pax_global_header00006660000000000000000000000064147042006200014505gustar00rootroot0000000000000052 comment=773b7332292ce9f8c32130d0404b391c2df04428 moderngl-moderngl-773b733/000077500000000000000000000000001470420062000154025ustar00rootroot00000000000000moderngl-moderngl-773b733/.containerignore000066400000000000000000000001171470420062000205700ustar00rootroot00000000000000.git .github .gitignore .pytest_cache .vscode build dist *.egg-info *.pyd *.so moderngl-moderngl-773b733/.gitattributes000066400000000000000000000003721470420062000202770ustar00rootroot00000000000000.github/** linguist-detectable=false examples/** linguist-documentation=false **/Containerfile linguist-detectable=false src/glcorearb.h linguist-detectable=false src/khrplatform.h linguist-detectable=false examples/data/** linguist-detectable=false moderngl-moderngl-773b733/.github/000077500000000000000000000000001470420062000167425ustar00rootroot00000000000000moderngl-moderngl-773b733/.github/workflows/000077500000000000000000000000001470420062000207775ustar00rootroot00000000000000moderngl-moderngl-773b733/.github/workflows/build.yml000066400000000000000000000007401470420062000226220ustar00rootroot00000000000000name: build on: push: branches: [main] pull_request: branches: [main] workflow_dispatch: jobs: build: name: build runs-on: windows-latest steps: - uses: actions/checkout@v4 - name: setup uses: actions/setup-python@v5 with: python-version: '3.12' architecture: x64 - name: deps run: python -m pip install -U pip wheel setuptools - name: wheel run: python -m pip wheel . moderngl-moderngl-773b733/.github/workflows/release.yml000066400000000000000000000021111470420062000231350ustar00rootroot00000000000000name: release on: workflow_dispatch: jobs: release: name: Build on ${{ matrix.os }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-latest, windows-latest, macos-13, macos-14] steps: - uses: actions/checkout@v4 - uses: actions/setup-python@v5 with: python-version: '3.12' - name: deps run: python -m pip install -U cibuildwheel build pip wheel setuptools - name: sdist run: python -m build --sdist --outdir package if: matrix.os == 'ubuntu-latest' - name: wheels run: python -m cibuildwheel --output-dir package env: CIBW_PROJECT_REQUIRES_PYTHON: ">=3.8" CIBW_SKIP: pp* - uses: actions/upload-artifact@v4 with: name: package-${{ matrix.os }} path: package/* merge: name: Merge Artifacts runs-on: ubuntu-latest needs: - release steps: - uses: actions/upload-artifact/merge@v4 with: name: moderngl-5.12.0 delete-merged: true moderngl-moderngl-773b733/.github/workflows/tests.yml000066400000000000000000000005351470420062000226670ustar00rootroot00000000000000name: tests on: push: branches: [main] pull_request: branches: [main] workflow_dispatch: jobs: tests: name: tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: build run: docker build . -f tests/Containerfile -t tests - name: test run: docker run --rm -t tests moderngl-moderngl-773b733/.gitignore000066400000000000000000000001201470420062000173630ustar00rootroot00000000000000.vscode .venv* venv build dist __pycache__ *.egg-info *.pyc *.pyd *.so /*.png moderngl-moderngl-773b733/.readthedocs.yml000066400000000000000000000004501470420062000204670ustar00rootroot00000000000000version: 2 build: os: ubuntu-20.04 tools: python: "3.10" jobs: post_checkout: - mv moderngl moderngl-package - cp moderngl-stubs/__init__.pyi moderngl.py python: install: - requirements: docs/requirements.txt sphinx: configuration: docs/conf.py formats: all moderngl-moderngl-773b733/CHANGELOG.md000066400000000000000000000544731470420062000172300ustar00rootroot00000000000000# Change Log All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). ## [main](https://github.com/moderngl/moderngl/compare/5.10.0...main) - Add `Context.debug_scope`. ## [5.10.0](https://github.com/moderngl/moderngl/compare/5.9.0...5.10.0) - Adding pre-built wheels for MacOS ARM - Adding size verify when writing to Uniforms - Adding a new methods: [get_context()](https://moderngl.readthedocs.io/en/latest/reference/moderngl.html#moderngl.moderngl.get_context) and `init_context()` (documentation is not ready yet) - Complementing old and adding new items to ["The Guide"](https://moderngl.readthedocs.io/en/latest/the_guide/index.html) - Redesign of ["The Guide"](https://moderngl.readthedocs.io/en/latest/the_guide/index.html) in the documentation - Adding shadow mapping example (see `examples/*`) - Improving code reliability (robustness) ## [5.9.0](https://github.com/moderngl/moderngl/compare/5.8.0...5.9.0) - Removing Python 3.7 support, adding Python 3.12 support - Fixing memory leaks - Transferring constants from `moderngl` to `moderngl.Context` (safely) - Dividing documentation into annotations (`moderngl-stubs/__init__.pyi`) and full documentation (`docs/*`) - Implemented new property: [Context.depth_clamp_range](https://moderngl.readthedocs.io/en/latest/reference/context.html#Context.depth_clamp_range) - Adding shader includes - Adding an example of creating a separate window object - Adding access to input attributes in SPIR-V programs (via SPIR-V parsing) (example: `vao = ctx.vertex_array(spv_program, buffer, 0, 1)` (if your SPIR-V compiler did not erase attribute names, they can also be used)) - Adding access to program attributes by their location numbers (example: `vao = ctx.vertex_array(program, buffer, 0, 1)`) - Adding descriptions for [Context.memory_barrier()](https://moderngl.readthedocs.io/en/latest/reference/context.html#Context.memory_barrier) and [Context.depth_clamp_range](https://moderngl.readthedocs.io/en/latest/reference/context.html#Context.depth_clamp_range) in the documentation - Fixed inaccuracies in documentation - Implemented depth cube maps: [Context.depth_texture_cube()](https://moderngl.readthedocs.io/en/latest/reference/context.html#Context.depth_texture_cube) - Update build documentation command (sphinx) (see in `README.md`) - Minor changes to `README.md` ## [5.8.0](https://github.com/moderngl/moderngl/compare/5.7.4...5.8.0) This version includes the following structural changes in moderngl: - The typehints and inline documentation was moved to moderngl-stubs. - The Python layer was concatenated but moderngl itself stays a package. - Most of the protected class members were removed. - Most of the property aliases became ordinary class members. - Slots were removed. ## [5.7.4](https://github.com/moderngl/moderngl/compare/5.7.3...5.7.4) ... ## [5.7.3](https://github.com/moderngl/moderngl/compare/5.7.2...5.7.3) ... ## [5.7.2](https://github.com/moderngl/moderngl/compare/5.7.1...5.7.2) ... ## [5.7.1](https://github.com/moderngl/moderngl/compare/5.7.0...5.7.1) ... ## [5.7.0](https://github.com/moderngl/moderngl/compare/5.6.4...5.7.0) * Python 3.11 support * Added support for configurable garbage collection mode. ``Context.gc_mode`` controls this. * ``None``: (default) No garbage collection is performed. Objects needs to to be manually released like in previous versions of moderngl. * ``"context_gc"``: Dead objects are collected in ``Context.objects``. These can periodically be released using ``Context.gc()``. * ``"auto"``: Dead objects are destroyed automatically like we would expect in python. * Added support for `glPolygonOffset`. The factors and units can be set using `Context.polygon_offset` * Added support for normalized signed and unsigned integer textures. `ni1`, `nu1`, `ni2` and `nu2` are the new dtypes for these. * Added ``Context.external_texture`` for creating textures from existing OpenGL textures. * Added `TextureCube.bind_to_image` so we can easily access cube textures in compute shaders * Added `Texture3D.bind_to_image` so we can easily access 3D textures in compute shaders * Added `TextureArray.bind_to_image` so we can easily access texture arrays in compute shaders * Added support for specifying a custom internalformat for cube maps. This can be used for sRGB and texture compression formats. * Integer textures now use `NEAREST` interpolation by default. This was causing issues with some drivers. * Added support for writing to multiple buffers in transforms. * ``Context.program`` now accepts a dictionary for mapping sampler names to specific texture units. * Added `Program.is_transform` exposing if the program has a fragment shader or not * Added `VertexArray.mode` and a `mode` argument in `Context.vertex_array`. This is now the default rendering mode when no mode parameter is passed in `render()` or `transform()` * Added support for 1D sampler in `Uniform` * Added direct access to `glEnable` / `glDisable` in `Context.enable_direct` / `Context.disable_direct`. This can be used to enabled capabilities not supported by ModernGL. * `Framebuffer.read()` now has a `clamp` (bool) parameter. If enabled, floating point data will clamp to `[0.0, 1.0]`. Clamping is disabled by default. * Fixed a bug causing ``copy_framebuffer`` to not work with multisampled framebuffers with multiple color attachments. * Fixed a bug in ``copy_framebuffer`` that caused the draw buffers to be permanently changed. * VertexArray: Removed "the first vertex attribute must not be a per instance attribute" limitation * Fixed a crash when reading `ctx.provoking_vertex` * Added workaround for MacOS requiring a framebuffer to be bound in headless mode even for transform shaders. We simply create and bind a framebuffer internally. * Added ``GL_MAX_GEOMETRY_OUTPUT_VERTICES`` to ``Context.info`` * Docstring improvements * Documentation improvements ## [5.6.4](https://github.com/moderngl/moderngl/compare/5.6.3...5.6.4) * Transform feedback now supports all primitive modes both for vertex and geometry shaders * `VertexArray.transform()` now raises sane errors when using the wrong primitive mode with geometry shaders * `VertexArray.transform()` now automatically detects output primitive based on the input mode. * `GL_TRIANGLES_ADJACENCY` enum incorrectly mapped (`D0` instead of `0D`) * Primitive modes are now accessible in the `Context` instance. For example: `ctx.POINTS` and `ctx.TRIANGLES` * Texture filers are now also available in the `Context` instance. For example: `ctx.NEAREST` and `ctx.LINEAR` * Docstring and documentation improvements ## [5.6.3](https://github.com/moderngl/moderngl/compare/5.6.2...5.6.3) * Added `Context.extensions`. This is a `set` containing the OpenGL extensions supported by the context. * Added support for overridable internal_format for `Texture`. This opens up for sRGB and compressed formats if needed. * Docstring and documentation improvements ## [5.6.2](https://github.com/moderngl/moderngl/compare/5.6.1...5.6.2) ### Bugs * `TextureArray.build_mimpmaps()` used the wrong target when building mipmaps. This caused the texture to corrupt with some drivers. Thanks to [Nir Aides](https://github.com/nir) for discovering this bug. * Docstring improvements ## [5.6.1](https://github.com/moderngl/moderngl/compare/5.6.0...5.6.1) ### Improvements * Added `Context.cull_face`. (`glCullFace`). An alternative to `Context.front_face` (`glFrontFace`) * Added support for signed and unsigned integer sampler uniforms (`isampler*`, `usampler*`) * Added support for multisampled texture array samplers * Doc improvements ### Bugs * Transform feedback with geo shader should now property set the out primitive type. It incorrectly assumed `POINTS` in some cases causing a gl error. * Moderngl will now propagate the default error messages when objects cannot be read using the buffer protocol. ## [5.6.0](https://github.com/moderngl/moderngl/compare/5.5.4...5.6.0) - 2020-02-01 From ModernGL 5.6 context creation is done by the [glcontext](https://github.com/moderngl/glcontext) package. This means we can keep improving context creation without releasing new moderngl versions. The bar for contributing to context creation is also lower. Backends can be written in C++ or by simply using ctypes. This version also has a lot of improvements to docsstrings, api docs and documentation in general. Still we have a lot more work to do in this area. ### Added - Standalone `Context` can now be destroyed on all platforms - Compute shaders can now write to textures using `Texture*.bind_to_image` - `VertexBuffer.transform` now as a `buffer_offset` parameter for setting the start byte offset of the output buffer. This can be used in many creative ways in for example particle emitting. - `Framebuffer` supports having only depth buffer. This makes things like shadow mapping easier to work with. - Support for `PROGRAM_POINT_SIZE` context flag so point sizes can be set in the vertex shader - Scissor test support. `Framebuffer.scissor` and `Context.scissor` can now be used to set and enable scissor testing per framebuffer. - The `Framebuffer.clear` have an optional `color` parameter to replace the old `red, green, blue, alpha` parameters. - Samplers and Buffers have an `assign` method to simplify the scope creation. - Samplers have an optional `texture` parameter that will be used together with the sampler when given. - The Scope's `enable_only` keyword argument is deprecated in favor of the `enable` keyword argument. - Buffers have a `bind` method that replaces the tuples in the VertexArray creation. - VertexArrays have an optional `scope` property that will be used when rendering. - The VertexArray's `vertices` property is now writeable. - VertexArrays have an `instances` property to control the default number of instances when rendering. - The Context object contains the constants provided by the moderngl module. The constants are: (TRIANGLE, LINES, DEPTH_TEST, ...) ### Changed - The `framebuffer` parameter is optional in Scopes. - The `ctx.simple_vertex_array` is deprecated in favor of using `ctx.vertex_array` with the same parameters. - The `prog[uniform].value = value` is deprecated in favor of using `prog[uniform] = value`. - The `prog[uniform].write(bytes_value)` is deprecated in favor of using the `prog[uniform] = bytes_value`. ### Bugs - Fixed an issue with attribute format detection causing integer and double types to fail - Several minor bug fixes ## [5.5.4](https://github.com/moderngl/moderngl/compare/5.5.3...5.5.4) - 2019-11-10 This version was originally meant to only add python 3.8 support, but a few additions and fixes where cherry-picked from the 5.6 branch. - Python 3.8 support - `Vertexarray`s can now be crated without any content. - `Context.blend_func` now supports separate blend functions for rgb and alpha. - Added `Context.blend_equation` supporting separate blend equations for rgb and alpha. ## [5.5.3](https://github.com/moderngl/moderngl/compare/5.5.2...5.5.3) - 2019-08-16 ### Fixed - Scope object uniform buffer bindings. ## [5.5.2](https://github.com/moderngl/moderngl/compare/5.5.1...5.5.2) - 2019-06-13 ### Fixed - missing package in setup.py ## [5.5.1](https://github.com/moderngl/moderngl/compare/5.5.0...5.5.1) - 2019-06-12 ### Fixed - offset fix for vao render ## [5.5.0](https://github.com/moderngl/moderngl/compare/5.4.2...5.5.0) - 2019-01-22 ### Fixed - depth texture filter and compare func - scope restores old enable flags properly - clear gl errors as the final step of initialization - fix default framebuffer's number of attachments ### Added - documentation for `extra` properties - improved documentation - improved build on Mac ## [5.4.2](https://github.com/moderngl/moderngl/compare/5.4.1...5.4.2) - 2018-08-01 ### Fixed - included `moderngl.program_members` in the package list ## [5.4.1](https://github.com/moderngl/moderngl/compare/5.4.0...5.4.1) - 2018-07-30 ### Fixed - broken description on PyPI ## [5.4.0](https://github.com/moderngl/moderngl/compare/5.3.0...5.4.0) - 2018-07-30 ### Added - Sampler object support - `Context.sampler` method - `Context.max_anisotropy` property - `Context.clear_samplers` method - `Framebuffer.read` and `Framebuffer.read_into` now accepts `attachment=-1` to read the depth attachment - `Texture.compare_func` property - `Texture.anisotropy` property - docs and tests ### Fixed - missing `ComputeShader` uniforms and uniform blocks - wrong `DrawBuffer` call when clearing the screen - reading depth values from textures - broken compare functions ## [5.3.0](https://github.com/moderngl/moderngl/compare/5.2.1...5.3.0) - 2018-06-27 ### Added - `index_element_size` parameter for `Context.vertex_array` and `Context.simple_vertex_array` ### Fixed - comapre fuctions ## [5.2.1](https://github.com/moderngl/moderngl/compare/5.2.0...5.2.1) - 2018-05-10 ### Fixed - markdown readme issues ## [5.2.0](https://github.com/moderngl/moderngl/compare/5.1.0...5.2.0) - 2018-05-10 ### Added - `Context.core_profile_check` method - `GL_CONTEXT_PROFILE_MASK` to `Context.info` - `GL_PATCHES` constant for drawing patches - getter and setter for `GL_PATCH_VERTICES` - markdown readme ### Fixed - tesselation control and tesselation evaluation shader being swapped when creating a program ## [5.1.0](https://github.com/moderngl/moderngl/compare/5.0.7...5.1.0) - 2018-04-28 ### Added - offset and size parameter to `Buffer.bind_to_uniform_block` - offset and size parameter to `Buffer.bind_to_storage_buffer` - `GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT` to `Context.info` ## [5.0.7](https://github.com/moderngl/moderngl/compare/5.0.6...5.0.7) - 2018-04-08 ### Fixed - minor bugs in Buffer Format ## [5.0.6](https://github.com/moderngl/moderngl/compare/5.0.5...5.0.6) - 2018-03-22 ### Fixed - `standalone_context` on linux [issue #173](https://github.com/moderngl/moderngl/issues/173) ## [5.0.5](https://github.com/moderngl/moderngl/compare/5.0.4...5.0.5) - 2018-03-21 ### Fixed - Standalone context on linux fails when the default display is nonzero. ## [5.0.4](https://github.com/moderngl/moderngl/compare/5.0.3...5.0.4) - 2018-03-07 ### Fixed - Standalone context on windows fails when old GPU driver is installed. ## [5.0.3](https://github.com/moderngl/moderngl/compare/5.0.2...5.0.3) - 2018-02-28 ### Added - TextureArray objects - Indirect drawing ### Changed - Restored Error class from ModernGL4 ### Fixed - Properly set subroutines in VertexArray render ## [5.0.2](https://github.com/moderngl/moderngl/compare/5.0.1...5.0.2) - 2018-02-20 ### Fixed - Wrong module name in some windows based wheel files ## [5.0.1](https://github.com/moderngl/moderngl/compare/5.0.0...5.0.1) - 2018-02-19 ### Fixed - Build errors and warnings for older python versions ## [5.0.0](https://github.com/moderngl/moderngl/tree/5.0.0) - 2018-02-18 For more information please see: [Differences between ModernGL5 and ModernGL4](https://moderngl.readthedocs.io/en/stable/misc/mgl5_vs_mgl4.html) ### Added - Query objects - Scope objects - Conditional Rendering - New `RASTERIZER_DISCARD` enable flag - Context fbo attribute - Context depth_func and blend_func - Depth Texture compare_func ### Changed - Most of the constants became integers - Renamed `default_framebuffer` to `screen` and always points to framebuffer 0 - VertexArray's buffer formats - Program creation - Program members - Replace floats parameter with dtype ### Removed - Classes and methods that are no longer needed ## [4.2.2](https://github.com/moderngl/moderngl/compare/4.2.1...4.2.2) - 2018-01-06 ### Added - Program.\_\_getitem\_\_ returns Uniforms, UniformBuffers, Attributes and Varyings ## [4.2.1](https://github.com/moderngl/moderngl/compare/4.2.0...4.2.1) - 2017-11-25 ### Added - UniformMap.get, AttributeMap.get, ... methods ### Fixed - Context.info `GL_MAX_COMPUTE_WORK_GROUP_COUNT` value - Missing TextureCube class - Buffer.clear return type hint ## [4.2.0](https://github.com/moderngl/moderngl/compare/4.1.12...4.2.0) - 2017-10-17 ### Added - Default framebuffer bits attribute - Context.detect_framebuffer - Support reserving buffers with human readable sizes ### Fixed - Standalone context on linux requires 24 bits for the depth buffer at least - Bound framebuffer reference count ## [4.1.12](https://github.com/moderngl/moderngl/compare/4.1.11...4.1.12) - 2017-08-22 ### Added - TextureCube class and Context `texture_cube` method - Context `enable_only` method ### Changed - Enable flags support bitwise `__or__`, `__and__` and `__inv__` - Framebuffer does not create a Renderbuffer when the depth_attachment is None ### Removed - `ModernGL.MULTISAMPLE` constant - Version class and Version constants ### Fixed - Texture3D created with wrong type ## [4.1.11](https://github.com/moderngl/moderngl/compare/4.1.10...4.1.11) - 2017-07-02 ### Added - Context `front_face` attribute ### Fixed - VertexArray `program` member type - Context `viewport` attribute missing `tuple` cast - Misplaced `GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS` - Compile warnings (strict-prototypes) - Initial value of `wireframe` ## [4.1.10](https://github.com/moderngl/moderngl/compare/4.1.9...4.1.10) - 2017-06-23 ### Added - Documentation improvements - Context `max_samples` attribute ### Fixed - Validate the number of samples using wrong values ## [4.1.9](https://github.com/moderngl/moderngl/compare/4.1.8...4.1.9) - 2017-06-23 ### Added - Context `info` attribute - Support Textures in `copy_framebuffer` - Texture `floats` attribute ### Fixed - 3D texture `depth` attribute type ## [4.1.8](https://github.com/moderngl/moderngl/compare/4.1.7...4.1.8) - 2017-06-19 ### Added - 3D texture support (`Texture3D` class and Context `texture3d` method) - Context `max_integer_samples` attribute - Fallback display for linux ### Removed - Unused texture's `read` method's `viewport` parameter ### Fixed - Broken framebuffer `color_attachments` attribute - Segmentation fault when creating a texture using string data by mistake - Validate Renderbuffer and Texture samples ## [4.1.7](https://github.com/moderngl/moderngl/compare/4.1.6...4.1.7) - 2017-06-13 ### Added - Uniform `read` and `write` methods - `write_offset` parameter for the `read_into` methods - Read framebuffer's pixels to a buffer - Read texture's pixels to a buffer - Write texture's from a buffer - Pixel Buffer Object ### Fixed - Default framebuffer wrong drawbuffers - Framebuffer non zero viewport settings - Uniform setter error messages ## [4.1.6](https://github.com/moderngl/moderngl/compare/4.1.5...4.1.6) - 2017-06-12 ### Fixed - Broken uniform setter in 4.1.5 ## [4.1.5](https://github.com/moderngl/moderngl/compare/4.1.4...4.1.5) - 2017-06-09 ### Fixed - Modifying framebuffer properties has no effect unless the framebuffer is explicitly bound ## [4.1.4](https://github.com/moderngl/moderngl/compare/4.1.3...4.1.4) - 2017-06-07 ### Added - Framebuffer `color_mask` attribute - Framebuffer `depth_mask` attribute - Framebuffer `viewport` attribute ### Fixed - `copy_framebuffer` using `default_framebuffer` - Failing `__repr__` in VertexArrays ### Changed - Framebuffer methods do not affect the bound framebuffer ### Removed - Invalid texture sampling parameters for multisample textures - Invalid texture sampling parameters for depth textures ## [4.1.3](https://github.com/moderngl/moderngl/compare/4.1.2...4.1.3) - 2017-06-04 ### Added - TextureFilter and TextureWrap classes and constants - Texture `build_mipmaps` method - Texture `repeat_x`, `repeat_y` and `filter` attributes - Texture `swizzle` getter ## [4.1.2](https://github.com/moderngl/moderngl/compare/4.1.1...4.1.2) - 2017-05-31 ### Added - Read any color attachments of the Framebuffer - Framebuffer, Buffer, BufferAccess and Texture `read_into` method - `__slots__` for ModernGL classes - Framebuffer read different color attachments - Tkinter connector for windows using ctypes ### Fixed - Multiple render targets - Non-float renderbuffers are not readable - Buffer `read` keyword only `offset` argument ### Changed - `Context.renderbuffer` will use `floats=False` by default - `bind_to_uniform_block` `location` parameter was renamed to `binding` - `bind_to_storage_buffer` `location` parameter was renamed to `binding` ## [4.1.1](https://github.com/moderngl/moderngl/compare/4.1.0...4.1.1) - 2017-05-27 ### Added - UniformBlock `binding` and `size` attribute - Framebuffer `width`, `height` and `samples` attribute - Texture `swizzle` attribute - Context `error` attribute - OpenGL objects as `glo` attributes - Buffer `clear()` method - Missing `release()` methods - Iterable program member maps - Human readable program members - Pixel pack and unpack alignments - Subroutines ### Removed - UniformBlock `array_size` and `location` attribute - VertexArrayAttribute `default` attribute ### Fixed - BufferAccess unused `offset` parameter - Binding buffer to a UniformBlock - Broken RTD docs ## [4.1.0](https://github.com/moderngl/moderngl/compare/4.0.0...4.1.0) - 2017-05-24 ### Added - Exception handling when importing the implementation - Standalone context on **linux** and **mac** with fallback mechanism - Require version at context creation - Context `version_code` property - Framebuffer `clear()` method ### Changed - Context `clear()` method accepts floats ### Removed - Required `-std=c++11` for **linux** and **mac** - ModernGL `VERSION` constant ## Fixed - `Framebuffer` and `Texture` can have uninitialized x, y values - Uniform setters ## [4.0.0](https://github.com/moderngl/moderngl/tree/4.0.0) - 2017-05-20 ### Added - Full linting support - Restructure docs - Examples in docs - pep8 style - VSCode snippets - Changelog ### Changed - Wrap the C/C++ module with a pure python module - Rename internal module to avoid ambiguosity - Rename class like members from the Context class ## [3.1.5](https://github.com/moderngl/moderngl/compare/3.1.0...3.1.5) - 2017-05-07 ### Added - Standalone ModernGL context - Sphinx generated docs - Linting with pylint mock file - Mac OSX support ## [3.1.0](https://github.com/moderngl/moderngl/tree/3.1.0) - 2017-03-01 ### Added - Wrapping OpenGL objects with python types ### Changed - Improved Linux support ### Removed - Direct access to OpenGL objects ## [2.4.1](https://github.com/moderngl/moderngl/tree/2.4.1) - 2016-08-30 ### Added - setup.py and PyPI compatible packaging - Direct access to OpenGL objects - Linux support ## 1.0.0 - 2016-03-03 - It was a tool for me to develop games in python moderngl-moderngl-773b733/LICENSE000066400000000000000000000021031470420062000164030ustar00rootroot00000000000000MIT License Copyright (c) 2017-2024 Szabolcs Dombi, Einar Forselv Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 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 AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. moderngl-moderngl-773b733/MANIFEST.in000066400000000000000000000001101470420062000171300ustar00rootroot00000000000000recursive-include src *.cpp *.hpp *.h include README.md include LICENSE moderngl-moderngl-773b733/README.md000066400000000000000000000151761470420062000166730ustar00rootroot00000000000000
[![preview](https://github.com/moderngl/moderngl/assets/11232402/b314f7af-0c0a-4b7d-b4f5-857f426454ca)](#readme)
# ModernGL ModernGL is a Python wrapper over OpenGL Core. ModernGL simplifies the creation of graphics applications like scientific simulations, games or user interfaces. Usually, acquiring in-depth knowledge of OpenGL requires a steep learning curve. In contrast, ModernGL is easy to learn and use. ModernGL is capable of rendering with high performance and quality, with less code written. ``` pip install moderngl ``` - [Documentation](https://moderngl.readthedocs.io/) - [Examples](https://github.com/moderngl/moderngl/tree/master/examples/#readme) - [ModernGL on Github](https://github.com/moderngl/moderngl/) - [ModernGL on PyPI](https://pypi.org/project/ModernGL/) - [ModernGL Discord Server](https://discord.gg/UEMtW8D) ## Extras ### [glcontext](https://github.com/moderngl/glcontext) - Headless Context Creation ``` pip install moderngl[headless] ``` ### [moderngl-window](https://github.com/moderngl/moderngl-window) - Window Creation and Resource Loading ``` pip install moderngl-window ``` ## Features - GPU accelerated high quality graphics - Rendering modern OpenGL scenes with less headache - Simpler and faster than PyOpenGL - Can render without a window - 100% Pythonic ## Sample usage ```py >>> import moderngl >>> ctx = moderngl.get_context() >>> buf = ctx.buffer(b"Hello World!") # allocated on the GPU >>> buf.read() b'Hello World!' ``` For complete examples please visit the [Examples](https://github.com/moderngl/moderngl/tree/master/examples/#readme). ## Easy to use with Pillow ```py >>> img = Image.open("texture.jpg").convert("RGB") >>> ctx.texture(img.size, 3, img.tobytes()) ``` ## Easy to use with Numpy ```py >>> ctx.buffer(np.array([0.0, 0.0, 1.0, 1.0], dtype="f4")) ``` ## Compared to PyOpenGL With PyOpenGL, using the original OpenGL API, you have to write three lines to achieve a simple task like binding a VBO: ```py vbo1 = GL.glGenBuffers(1) GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo1) GL.glBufferData(GL.GL_ARRAY_BUFFER, b"Hello World!", GL.GL_STATIC_DRAW) vbo2 = GL.glGenBuffers(1) GL.glBindBuffer(GL.GL_ARRAY_BUFFER, vbo2) GL.glBufferData(GL.GL_ARRAY_BUFFER, None, GL.GL_DYNAMIC_DRAW) ``` With ModernGL you need just one simple line per VBO to achieve the same results: ```py vbo1 = ctx.buffer(b"Hello World!") vbo2 = ctx.buffer(reserve=1024, dynamic=True) ``` ## Development ``` git clone git@github.com:moderngl/moderngl.git cd moderngl python -m pip install -e . ``` ## Using GLSL in ModernGL GLSL (OpenGL Shading Language) is integral for shader programming using the ModernGL library. It allows developers to execute code on the GPU, enhancing graphics rendering performance. This concise introduction covers the core concepts necessary for starting with GLSL in ModernGL. Data Types GLSL offers standard data types similar to C, including int, float, double, and bool, as well as graphics-specific types like vectors (vec2, vec3, vec4) and matrices (mat2, mat3, mat4) for efficient graphics computations. Inputs and Outputs ``` Attributes: Per-vertex data passed to the vertex shader. Commonly used for positions, normals, and texture coordinates. Varyings: Interpolated data passed from the vertex to the fragment shader, such as colors or texture coordinates. Output: Fragment shader's output, typically the color of the pixel (fragColor). ``` Uniforms Uniforms are global variables declared in shaders, constant for all vertices or fragments for a single draw call. They're ideal for passing data from your application, like transformation matrices or material properties, to the shader. Shader Types ``` Vertex Shader: Processes each vertex's attributes. It's the first stage in the shader pipeline, used for transformations and passing data to the fragment shader. Fragment Shader: Calculates the color of each pixel. It uses data interpolated from the vertex shader to apply textures, lighting, and color. Geometry Shader: Processes primitives (points, lines, triangles) formed by vertices from the vertex shader. It can add or remove vertices from the primitive. Tessellation Shaders: Control the tessellation of patches, allowing for smoother geometries at varying distances. Compute Shader: Handles general-purpose computing tasks not directly related to rendering images, like physics simulations or post-processing effects. ``` Example ``` glsl // Vertex Shader #version 330 core in vec3 position; uniform mat4 modelViewProjection; void main() { gl_Position = modelViewProjection * vec4(position, 1.0); } // Fragment Shader #version 330 core out vec4 fragColor; void main() { fragColor = vec4(1.0); // Set pixel color to white } ``` This basic example demonstrates a vertex shader transforming vertex positions with a matrix and a fragment shader setting the color of each pixel to white. ## Notes ModernGL may be faster than other libraries providing direct OpenGL access. ModernGL is implemented in C++ and a single render call involving multiple OpenGL functions count as a single Python function call. ModernGL require **OpenGL 3.3**. Compute Shaders require **OpenGL 4.3**. Some functionality relies on specific extensions. ModernGL can be used **anywhere where OpenGL is supported.** ModernGL is also working in a [headless](examples/headless) environment. ModernGL is responsible for calling the OpenGL API and providing a Pythonic user-friendly API instead. It is possible to integrate moderngl into any window libraries that support OpenGL. Consider [moderngl-window](https://github.com/moderngl/moderngl-window) which implements many of them, plus it also helps with resource loading. ModernGL does not implement the full OpenGL feature set or extensions. You can interact with the ModernGL objects from OpenGL. ## Citation If you need to cite this repository in academic research: ```txt @Online{Dombi2020, author = {Szabolcs Dombi}, title = {ModernGL, high performance python bindings for OpenGL 3.3+}, date = {2020-05-01}, publisher = {GitHub}, journal = {GitHub repository}, howpublished = {\url{https://github.com/moderngl/moderngl}}, commit = {} } ``` The commit hash can be found in the [Releases](https://github.com/moderngl/moderngl/releases). ## Community - [ModernGL Discord Server](https://discord.gg/UEMtW8D) - [Contributors](https://github.com/moderngl/moderngl/graphs/contributors) moderngl-moderngl-773b733/_moderngl.py000066400000000000000000000526051470420062000177320ustar00rootroot00000000000000import struct from typing import Any, Dict, List, Tuple class Attribute: def __init__(self): self.gl_type = None self.program_obj = None self.scalar_type = None self.rows_length = None self.row_length = None self.normalizable = None self.location = None self.array_length = None self.dimension = None self.shape = None self.name = None self.extra = None def __repr__(self): return f"" @property def mglo(self): return self class Uniform: def __init__(self): self.program_obj = None self.gl_type = None self.fmt = None self.location = None self.array_length = None self.element_size = None self.dimension = None self.name = None self.matrix = None self.ctx = None self.extra = None def __repr__(self): return f"" @property def mglo(self): return self @property def value(self): data = self.read() if self.array_length > 1: if self.dimension > 1: return [ struct.unpack(self.fmt, data[i * self.element_size : i * self.element_size + self.element_size]) for i in range(self.array_length) ] else: return [ struct.unpack(self.fmt, data[i * self.element_size : i * self.element_size + self.element_size])[0] for i in range(self.array_length) ] elif self.dimension > 1: return struct.unpack(self.fmt, data) else: return struct.unpack(self.fmt, data)[0] @value.setter def value(self, value): if self.array_length > 1: if self.dimension > 1: data = b"".join(struct.pack(self.fmt, *row) for row in value) else: data = b"".join(struct.pack(self.fmt, item) for item in value) elif self.dimension > 1: data = struct.pack(self.fmt, *value) else: data = struct.pack(self.fmt, value) self.write(data) @property def handle(self): raise NotImplementedError @handle.setter def handle(self, value): return self.ctx._set_uniform_handle(self.program_obj, self.location, value) def read(self): return self.ctx._read_uniform( self.program_obj, self.location, self.gl_type, self.array_length, self.element_size ) def write(self, data: Any): self.ctx._write_uniform( self.program_obj, self.location, self.gl_type, self.array_length, self.element_size, data, ) class UniformBlock: def __init__(self): self.program_obj = None self.index = None self.size = None self.name = None self.ctx = None self.extra = None def __repr__(self): return f"" @property def mglo(self): return self @property def binding(self): return self.ctx._get_ubo_binding(self.program_obj, self.index) @binding.setter def binding(self, binding): self.ctx._set_ubo_binding(self.program_obj, self.index, binding) @property def value(self): return self.ctx._get_ubo_binding(self.program_obj, self.index) @value.setter def value(self, value): self.ctx._set_ubo_binding(self.program_obj, self.index, value) class StorageBlock: def __init__(self): self.program_obj = None self.index = None self.name = None self.ctx = None self.extra = None def __repr__(self): return f"" @property def mglo(self): return self @property def binding(self): return self.ctx._get_storage_block_binding(self.program_obj, self.index) @binding.setter def binding(self, binding): self.ctx._set_storage_block_binding(self.program_obj, self.index, binding) @property def value(self): return self.ctx._get_storage_block_binding(self.program_obj, self.index) @value.setter def value(self, value): self.ctx._set_storage_block_binding(self.program_obj, self.index, value) class Subroutine: def __init__(self): self.index = None self.name = None self.extra = None def __repr__(self): return f"" @property def mglo(self): return self class Varying: def __init__(self): self.number = None self.array_length = None self.dimension = None self.name = None self.extra = None def __repr__(self): return f"" @property def mglo(self): return self class DefaultLoader: def __init__(self): import ctypes import sys def funcptr(lib, name): return ctypes.cast(getattr(lib, name, 0), ctypes.c_void_p).value or 0 if sys.platform.startswith("win"): lib = ctypes.WinDLL("opengl32.dll") proc = ctypes.cast(lib.wglGetProcAddress, ctypes.WINFUNCTYPE(ctypes.c_ulonglong, ctypes.c_char_p)) if not lib.wglGetCurrentContext(): raise RuntimeError("Cannot detect window with OpenGL support") def loader(name): return proc(name.encode()) or funcptr(lib, name) elif sys.platform.startswith("linux"): try: lib = ctypes.CDLL("libEGL.so") proc = ctypes.cast(lib.eglGetProcAddress, ctypes.CFUNCTYPE(ctypes.c_ulonglong, ctypes.c_char_p)) if not lib.eglGetCurrentContext(): raise RuntimeError("Cannot detect window with OpenGL support") def loader(name): return proc(name.encode()) except: lib = ctypes.CDLL("libGL.so") proc = ctypes.cast(lib.glXGetProcAddress, ctypes.CFUNCTYPE(ctypes.c_ulonglong, ctypes.c_char_p)) if not lib.glXGetCurrentContext(): raise RuntimeError("Cannot detect window with OpenGL support") def loader(name): return proc(name.encode()) or funcptr(lib, name) elif sys.platform.startswith("darwin"): lib = ctypes.CDLL("/System/Library/Frameworks/OpenGL.framework/OpenGL") def loader(name): return funcptr(lib, name) elif sys.platform.startswith("emscripten"): lib = ctypes.CDLL(None) def loader(name): return funcptr(lib, name) elif sys.platform.startswith("wasi"): lib = ctypes.CDLL(None) def loader(name): return funcptr(lib, name) self.load_opengl_function = loader def __enter__(self): pass def __exit__(self, *args): pass def release(self): pass class Error(Exception): pass ATTRIBUTE_LOOKUP_TABLE = { 0x1404: (1, 0x1404, 1, 1, False, "i"), 0x8B53: (2, 0x1404, 1, 2, False, "i"), 0x8B54: (3, 0x1404, 1, 3, False, "i"), 0x8B55: (4, 0x1404, 1, 4, False, "i"), 0x1405: (1, 0x1405, 1, 1, False, "i"), 0x8DC6: (2, 0x1405, 1, 2, False, "i"), 0x8DC7: (3, 0x1405, 1, 3, False, "i"), 0x8DC8: (4, 0x1405, 1, 4, False, "i"), 0x1406: (1, 0x1406, 1, 1, True, "f"), 0x8B50: (2, 0x1406, 1, 2, True, "f"), 0x8B51: (3, 0x1406, 1, 3, True, "f"), 0x8B52: (4, 0x1406, 1, 4, True, "f"), 0x140A: (1, 0x140A, 1, 1, False, "d"), 0x8FFC: (2, 0x140A, 1, 2, False, "d"), 0x8FFD: (3, 0x140A, 1, 3, False, "d"), 0x8FFE: (4, 0x140A, 1, 4, False, "d"), 0x8B5A: (4, 0x1406, 2, 2, True, "f"), 0x8B65: (6, 0x1406, 2, 3, True, "f"), 0x8B66: (8, 0x1406, 2, 4, True, "f"), 0x8B67: (6, 0x1406, 3, 2, True, "f"), 0x8B5B: (9, 0x1406, 3, 3, True, "f"), 0x8B68: (12, 0x1406, 3, 4, True, "f"), 0x8B69: (8, 0x1406, 4, 2, True, "f"), 0x8B6A: (12, 0x1406, 4, 3, True, "f"), 0x8B5C: (16, 0x1406, 4, 4, True, "f"), 0x8F46: (4, 0x140A, 2, 2, False, "d"), 0x8F49: (6, 0x140A, 2, 3, False, "d"), 0x8F4A: (8, 0x140A, 2, 4, False, "d"), 0x8F4B: (6, 0x140A, 3, 2, False, "d"), 0x8F47: (9, 0x140A, 3, 3, False, "d"), 0x8F4C: (12, 0x140A, 3, 4, False, "d"), 0x8F4D: (8, 0x140A, 4, 2, False, "d"), 0x8F4E: (12, 0x140A, 4, 3, False, "d"), 0x8F48: (16, 0x140A, 4, 4, False, "d"), } UNIFORM_LOOKUP_TABLE = { 0x8B56: (False, 1, 4, "1i"), 0x8B57: (False, 2, 8, "2i"), 0x8B58: (False, 3, 12, "3i"), 0x8B59: (False, 4, 16, "4i"), 0x1404: (False, 1, 4, "1i"), 0x8B53: (False, 2, 8, "2i"), 0x8B54: (False, 3, 12, "3i"), 0x8B55: (False, 4, 16, "4i"), 0x1405: (False, 1, 4, "1I"), 0x8DC6: (False, 2, 8, "2I"), 0x8DC7: (False, 3, 12, "3I"), 0x8DC8: (False, 4, 16, "4I"), 0x1406: (False, 1, 4, "1f"), 0x8B50: (False, 2, 8, "2f"), 0x8B51: (False, 3, 12, "3f"), 0x8B52: (False, 4, 16, "4f"), 0x140A: (False, 1, 8, "1d"), 0x8FFC: (False, 2, 16, "2d"), 0x8FFD: (False, 3, 24, "3d"), 0x8FFE: (False, 4, 32, "4d"), 0x8B5D: (False, 1, 4, "1i"), 0x8DC0: (False, 1, 4, "1i"), 0x8DC9: (False, 1, 4, "1i"), 0x8DCE: (False, 1, 4, "1i"), 0x8B5E: (False, 1, 4, "1i"), 0x8DCA: (False, 1, 4, "1i"), 0x8DD2: (False, 1, 4, "1i"), 0x8DC1: (False, 1, 4, "1i"), 0x8DCF: (False, 1, 4, "1i"), 0x8DD7: (False, 1, 4, "1i"), 0x8B5F: (False, 1, 4, "1i"), 0x8DCB: (False, 1, 4, "1i"), 0x8DD3: (False, 1, 4, "1i"), 0x8B62: (False, 1, 4, "1i"), 0x9108: (False, 1, 4, "1i"), 0x9109: (False, 1, 4, "1i"), 0x910A: (False, 1, 4, "1i"), 0x910B: (False, 1, 4, "1i"), 0x910C: (False, 1, 4, "1i"), 0x910D: (False, 1, 4, "1i"), 0x8B60: (False, 1, 4, "1i"), 0x8DCC: (False, 1, 4, "1i"), 0x8DD4: (False, 1, 4, "1i"), 0x904D: (False, 1, 4, "1i"), 0x8B5A: (True, 4, 16, "4f"), 0x8B65: (True, 6, 24, "6f"), 0x8B66: (True, 8, 32, "8f"), 0x8B67: (True, 6, 24, "6f"), 0x8B5B: (True, 9, 36, "9f"), 0x8B68: (True, 12, 48, "12f"), 0x8B69: (True, 8, 32, "8f"), 0x8B6A: (True, 12, 48, "12f"), 0x8B5C: (True, 16, 64, "16f"), 0x8F46: (True, 4, 32, "4d"), 0x8F49: (True, 6, 48, "6d"), 0x8F4A: (True, 8, 64, "8d"), 0x8F4B: (True, 6, 48, "6d"), 0x8F47: (True, 9, 72, "9d"), 0x8F4C: (True, 12, 96, "12d"), 0x8F4D: (True, 8, 64, "8d"), 0x8F4E: (True, 12, 96, "12d"), 0x8F48: (True, 16, 128, "16d"), } def make_attribute(name, gl_type, program_obj, location, array_length): tmp = ATTRIBUTE_LOOKUP_TABLE.get(gl_type, (1, 0, 1, 1, False, "?")) dimension, scalar_type, rows_length, row_length, normalizable, shape = tmp rows_length *= array_length res = Attribute() res.gl_type = gl_type res.program_obj = program_obj res.scalar_type = scalar_type res.rows_length = rows_length res.row_length = row_length res.normalizable = normalizable res.location = location res.array_length = array_length res.dimension = dimension res.shape = shape res.name = name return res def make_uniform(name, gl_type, program_obj, location, array_length, ctx): tmp = UNIFORM_LOOKUP_TABLE.get(gl_type, (False, 1, 4, "1i")) matrix, dimension, element_size, fmt = tmp res = Uniform() res.name = name res.gl_type = gl_type res.fmt = fmt res.program_obj = program_obj res.location = location res.array_length = array_length res.matrix = matrix res.dimension = dimension res.element_size = element_size res.ctx = ctx return res def make_uniform_block(name, program_obj, index, size, ctx): res = UniformBlock() res.name = name res.program_obj = program_obj res.index = index res.size = size res.ctx = ctx return res def make_storage_block(name, program_obj, index, ctx): res = StorageBlock() res.name = name res.program_obj = program_obj res.index = index res.ctx = ctx return res def make_subroutine(name, index): res = Subroutine() res.name = name res.index = index return res def make_varying(name, number, array_length, dimension): res = Varying() res.number = number res.name = name res.array_length = array_length res.dimension = dimension return res class Spv: INT32 = 1 << 0 INT64 = 1 << 1 UINT32 = 1 << 2 UINT64 = 1 << 3 FLOAT32 = 1 << 4 FLOAT64 = 1 << 5 VEC2 = 1 << 10 VEC3 = 1 << 11 VEC4 = 1 << 12 MAT2 = 1 << 20 MAT3 = 1 << 21 MAT4 = 1 << 22 NONE = 0 UNKNOWN = 1 << 30 TRANSLATION_TABLE_SPIRV_GLSL = { Spv.INT32: 0x1404, Spv.INT32 | Spv.VEC2: 0x8B53, Spv.INT32 | Spv.VEC3: 0x8B54, Spv.INT32 | Spv.VEC4: 0x8B55, Spv.UINT32: 0x1405, Spv.UINT32 | Spv.VEC2: 0x8DC6, Spv.UINT32 | Spv.VEC3: 0x8DC7, Spv.UINT32 | Spv.VEC4: 0x8DC8, Spv.FLOAT32: 0x1406, Spv.FLOAT32 | Spv.VEC2: 0x8B50, Spv.FLOAT32 | Spv.VEC3: 0x8B51, Spv.FLOAT32 | Spv.VEC4: 0x8B52, Spv.FLOAT64: 0x140A, Spv.FLOAT64 | Spv.VEC2: 0x8FFC, Spv.FLOAT64 | Spv.VEC3: 0x8FFD, Spv.FLOAT64 | Spv.VEC4: 0x8FFE, Spv.FLOAT32 | Spv.VEC2 | Spv.MAT2: 0x8B5A, Spv.FLOAT32 | Spv.VEC3 | Spv.MAT2: 0x8B65, Spv.FLOAT32 | Spv.VEC4 | Spv.MAT2: 0x8B66, Spv.FLOAT32 | Spv.VEC2 | Spv.MAT3: 0x8B67, Spv.FLOAT32 | Spv.VEC3 | Spv.MAT3: 0x8B5B, Spv.FLOAT32 | Spv.VEC4 | Spv.MAT3: 0x8B68, Spv.FLOAT32 | Spv.VEC2 | Spv.MAT4: 0x8B69, Spv.FLOAT32 | Spv.VEC3 | Spv.MAT4: 0x8B6A, Spv.FLOAT32 | Spv.VEC4 | Spv.MAT4: 0x8B5C, Spv.FLOAT64 | Spv.VEC2 | Spv.MAT2: 0x8F46, Spv.FLOAT64 | Spv.VEC3 | Spv.MAT2: 0x8F49, Spv.FLOAT64 | Spv.VEC4 | Spv.MAT2: 0x8F4A, Spv.FLOAT64 | Spv.VEC3 | Spv.MAT2: 0x8F4B, Spv.FLOAT64 | Spv.VEC3 | Spv.MAT3: 0x8F47, Spv.FLOAT64 | Spv.VEC4 | Spv.MAT3: 0x8F4C, Spv.FLOAT64 | Spv.VEC2 | Spv.MAT4: 0x8F4D, Spv.FLOAT64 | Spv.VEC3 | Spv.MAT4: 0x8F4E, Spv.FLOAT64 | Spv.VEC4 | Spv.MAT4: 0x8F48, } def parse_spv_inputs(program: int, spv: bytes) -> Dict[int, Attribute]: ui32 = struct.Struct("I") token = lambda i: ui32.unpack(spv[i * 4 : i * 4 + 4])[0] num_tokens = len(spv) // 4 if token(0) != 0x07230203 or len(spv) % 4 != 0: raise ValueError("invalid spv") idx = 5 extracted_names: Dict[int, str] = {} # id : name extracted_storage_class_id: Dict[int, int] = {} # id : storage_class_id extracted_constants: Dict[int, Tuple[int, bytes]] = {} # const_id : (type_id, content) pointer_variable: Dict[int, int] = {} # id : pointer_type_id pointer_allowed_types: Dict[int, int] = {} # pointer_type_id : type_id allowed_types: Dict[int, Tuple[int, int, int, int]] = {} # type_id : (spv_type, type_id, arr_const_id, arr_length) extracted_types: Dict[int, Tuple[int, int]] = {} # id : (spv_type, arr_length) extracted_location: Dict[int, int] = {} # id : location while idx < num_tokens: args, opcode = token(idx) >> 16, token(idx) & 0xFFFF if opcode == 5: # OpName # We can extract the name of some ids name_start, name_end = (idx + 2) * 4, (idx + args) * 4 extracted_names[token(idx + 1)] = spv[name_start:name_end].rstrip(b"\x00").decode() if opcode == 59: # OpVariable # We can extract if it is a vertex shader input or not extracted_storage_class_id[token(idx + 2)] = token(idx + 3) # Mapping pointer_type_id to id of user variables pointer_variable[token(idx + 2)] = token(idx + 1) if opcode == 71: # OpDecorate # We can extract the location here extracted_location[token(idx + 1)] = token(idx + 3) if opcode == 32: # OpTypePointer # Retrieving used (allowed) type_ids for pointer_type_ids pointer_allowed_types[token(idx + 1)] = token(idx + 3) if opcode == 21: # OpTypeInt unsg, bsz = token(idx + 3), token(idx + 2) // 8 to_write = Spv.UNKNOWN if unsg == 1: if bsz == 4: to_write = Spv.UINT32 elif bsz == 8: to_write = Spv.UINT64 else: if bsz == 4: to_write = Spv.INT32 elif bsz == 8: to_write = Spv.INT64 allowed_types[token(idx + 1)] = (to_write, -1, -1, -1) if opcode == 22: # OpTypeFloat to_write = Spv.UNKNOWN bsz = token(idx + 2) // 8 if bsz == 4: to_write = Spv.FLOAT32 elif bsz == 8: to_write = Spv.FLOAT64 allowed_types[token(idx + 1)] = (to_write, -1, -1, -1) if opcode == 23: # OpTypeVector to_write = Spv.UNKNOWN vsz = token(idx + 3) if vsz == 2: to_write = Spv.VEC2 elif vsz == 3: to_write = Spv.VEC3 elif vsz == 4: to_write = Spv.VEC4 allowed_types[token(idx + 1)] = (to_write, token(idx + 2), -1, -1) if opcode == 24: # OpTypeMatrix to_write = Spv.UNKNOWN msz = token(idx + 3) if msz == 2: to_write = Spv.MAT2 elif msz == 3: to_write = Spv.MAT3 elif msz == 4: to_write = Spv.MAT4 allowed_types[token(idx + 1)] = (to_write, token(idx + 2), -1, -1) if opcode == 28: # OpTypeArray allowed_types[token(idx + 1)] = (Spv.NONE, token(idx + 2), token(idx + 3), -1) if opcode == 43: # OpConstant # OpConstant is needed to extract the length of arrays # However, it can be used for other purposes content_start, content_end = (idx + 3) * 4, (idx + args) * 4 extracted_constants[token(idx + 2)] = (token(idx + 1), spv[content_start:content_end]) idx += args # Assembly types # Some types of variables have pointers to other types of variables used in them. # So we use endless research to identify complete types of variables. def decode_constant(const_id): type_id, content = extracted_constants[const_id] typ, _ = assembly(type_id) if typ == Spv.INT32: return struct.unpack("i", content[:4])[0] elif typ == Spv.INT64: return struct.unpack("q", content[:8])[0] elif typ == Spv.UINT32: return struct.unpack("I", content[:4])[0] elif typ == Spv.UINT64: return struct.unpack("Q", content[:8])[0] elif typ == Spv.FLOAT32: return struct.unpack("f", content[:4])[0] elif typ == Spv.FLOAT64: return struct.unpack("d", content[:8])[0] else: return 0 def assembly(type_id): typ, thrw_typ, arr_const_id, arr_length = allowed_types[type_id] if arr_const_id != -1 and arr_length == -1: arr_length = decode_constant(arr_const_id) if thrw_typ != -1: add_typ, multi_arr_length = assembly(thrw_typ) typ = add_typ | typ arr_length = arr_length * multi_arr_length allowed_types[type_id] = (typ, -1, -1, arr_length if arr_length > 0 else 1) return typ, arr_length for type_id in allowed_types.keys(): assembly(type_id) for ids, pointer_type_id in pointer_variable.items(): type_id = pointer_allowed_types[pointer_type_id] if type_id in allowed_types: extracted_types[ids] = (allowed_types[type_id][0], allowed_types[type_id][3]) # Making a whole list exrtacted_general_ids: List[int] = sorted( set( [ *extracted_location.keys(), *extracted_types.keys(), *extracted_storage_class_id.keys(), *extracted_names.keys(), ] ) ) extracted_collected: Dict[int, Tuple[str, int, int, int, int]] = {} # id : variable_info for ids in exrtacted_general_ids: # to_add: Tuple[str, int, int, int] = () # name, class, type, location, arr_length name, cls, typ, location, arr_length = "", -1, -1, -1, -1 if ids in extracted_names: name = extracted_names[ids] if ids in extracted_storage_class_id: cls = extracted_storage_class_id[ids] if ids in extracted_types: typ, arr_length = extracted_types[ids] if ids in extracted_location: location = extracted_location[ids] extracted_collected[ids] = (name, cls, typ, location, arr_length) # Conversion to the GLSL type for ids, item in extracted_collected.items(): if item[2] == -1 or item[2] not in TRANSLATION_TABLE_SPIRV_GLSL: continue extracted_collected[ids] = (item[0], item[1], TRANSLATION_TABLE_SPIRV_GLSL[item[2]], item[3], item[4]) # Cropping the data to the required output return { location: make_attribute(name, gltype, program, location, arr_length) for name, cls, gltype, location, arr_length in extracted_collected.values() if cls == 1 and location != -1 and gltype != -1 } class InvalidObject: pass def resolve_includes(ctx, source): def include(match): name = match.group(1) content = ctx.includes.get(name) if content is None: raise KeyError(f'cannot include "{name}"') return content import re source = re.sub(r'#include\s+"([^"]+)"', include, source) return source moderngl-moderngl-773b733/docs/000077500000000000000000000000001470420062000163325ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/_static/000077500000000000000000000000001470420062000177605ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/_static/css/000077500000000000000000000000001470420062000205505ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/_static/css/custom.css000066400000000000000000000011311470420062000225700ustar00rootroot00000000000000/* .wy-nav-content { max-width: 800px; } */ .hll { background-color: #f2f8fb; } /* .wy-nav-content { max-width: 100%; } */ .wy-breadcrumbs-aside { display: none !important; } .wy-menu-vertical li.current a { color: #545454; } .toctree-l1 a, .toctree-l2 a, .toctree-l3 a { min-height: 32px; } /* Temporary fix for https://github.com/rtfd/sphinx_rtd_theme/issues/417 */ .rst-content .highlight>pre { line-height: 18px; } .rubric { /* font-size: 125%; */ font-weight: 700; font-family: "Roboto Slab","ff-tisa-web-pro","Georgia",Arial,sans-serif; } em { font-style: normal; } moderngl-moderngl-773b733/docs/_static/favicon.ico000066400000000000000000000046361470420062000221120ustar00rootroot00000000000000 ˆ (0 ÃÃÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿôÿóÿóÿøÿùÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿôÿôÿÿÿÿÿû›ÿŽùÿ„ö…ÿ¡øÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÛþÛÿ¸û·ÿoôoÿ_îaÿGèKÿ<äAÿwêmÿßúÚÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÌþÍÿ“÷“ÿ[î]ÿ=ãCÿ.Ú7ÿ!Ó2ÿ2Ó3ÿSÖBÿŒãvÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþóóÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÓþÓÿŒ÷ŒÿRëUÿ1Ý9ÿ!Ñ0ÿÇ2ÿÀ1ÿ*À)ÿ?À(ÿ`È<ÿºê§ÿÿÿÿÿöß×ÿò¾´ÿñ˜ÿõnnÿÿëëÿÿûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿìÿíÿžùœÿSìUÿ.Ü8ÿÍ0ÿÀ4ÿ ´?ÿ°6ÿ)­*ÿ8ªÿG©ÿ^¢ÿ·>ÿÑlIÿÖaFÿÞSDÿèHEÿ÷z{ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÂýÀÿbðcÿ:à@ÿÏ0ÿ¿4ÿ ­Fÿ¢Lÿ >ÿ.3ÿ<š'ÿJ—ÿV• ÿhÿ±QÿÀFÿÎ:!ÿÝ9/ÿî`^ÿû’”ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿöÿöÿ–ø—ÿJèMÿ$Õ2ÿÄ3ÿ ±Cÿ˜_ÿ”Uÿ$‘Iÿ3Ž=ÿB‹1ÿPˆ&ÿ_…ÿk„ ÿ€yÿ°H ÿÁ6ÿÒ0 ÿåC>ÿ÷‰ˆÿþÛÜÿÿÿÿÿÿÿÿÿÿÿÿÿíÿíÿxô{ÿOåYÿ,ÑCÿ½@ÿ Yÿ …nÿ…^ÿ)‚Sÿ8GÿG|;ÿUy0ÿdv$ÿssÿs ÿ˜aÿ¶<ÿÊ1ÿÞ<3ÿðbaÿþÎÎÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòþôÿuéƒÿ;ÑYÿ¹Jÿ…tÿwvÿ viÿ.s]ÿ=pQÿLmFÿZj:ÿif.ÿxd#ÿ†aÿ“a ÿ­G ÿÄ2ÿÙ5)ÿìVSÿüÉÊÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëüïÿbÚÿ ¶\ÿgŽÿiÿ%gsÿ3dgÿBa[ÿQ^Pÿ_ZDÿnW9ÿ}T-ÿŒQ!ÿšNÿ©J ÿÁ4ÿÖ2%ÿëWSÿúœžÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿëÿêÿ,š‹ÿW•ÿZ‰ÿ*W}ÿ8TqÿGQfÿVNZÿdKNÿsHCÿ‚E7ÿ‘B+ÿŸ? ÿ®=ÿÀ5ÿÕ2%ÿëYVÿúÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿDyÁÿ Jœÿ K“ÿ/H‡ÿ=E|ÿLBpÿ[?dÿi¥ÿMšÿ\Žÿl‚ÿ| uÿfÿ–[ÿ¥fÿÓ[}ÿÝdÿév…ÿó‡ŽÿúŒŒÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿòóÿÿonöÿLGéÿ5*Ùÿ0Êÿ7½ÿA ±ÿO ¥ÿ[›ÿe”ÿg“ÿa ÿg&´ÿ͸èÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿéêþÿrrõÿMJèÿ8.Ûÿ1Îÿ3Äÿ6¼ÿ:·ÿ>·ÿBºÿM&ÄÿvX×ÿñïýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿüüÿÿÚÛþÿwwõÿXUëÿ=6àÿ6+Øÿ1 Ðÿ0Ìÿ/Ëÿ:#ÎÿR<×ÿŽ}çÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿþýÿÿãäþÿ˜—ùÿmmòÿTQêÿC?äÿA;áÿ=6àÿ:4àÿ_Vèÿ¶¯öÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÒÐýÿŒùÿŽ÷ÿpoóÿsqóÿuuôÿuvõÿÛÙýÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿââþÿþþÿÿÛÛþÿÎÏþÿøøÿÿûûÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmoderngl-moderngl-773b733/docs/_static/logo.png000066400000000000000000002460151470420062000214360ustar00rootroot00000000000000‰PNG  IHDR€¿6ÌsRGB®ÎégAMA± üa pHYsÄÄ•+ÿ¥IDATx^ìýk´e×uˆ­sϹ÷Ö @ P" P2IH²D¦Kˆ-›¶#£GwGc¤ÝÍŒöè(ý#Ã?óÓ¿•¤G¢NFºÙNšý°MÛq‡~È-ÛMYn‹mÊ(QHHxT¡Þuï=ï|ß|¬9×>ûP…G½ö¬šgÍõÍoεÎ=û¬uÖ~ŽÖ2È ƒ 2È ×([V2È ƒ 2È5É0 2È ƒ r]2L ƒ 2È ƒ\— È ƒ 2È ×%Ã2È ƒ 2ÈuÉ0 2È ƒ r]2L ƒ 2È ƒ\— È ƒ 2È ×%Ã2È ƒ 2ÈuÉ0 2È ƒ r]2L ƒ 2È ƒ\— È ƒ 2È ×%Ã2È ƒ 2ÈuÉ0 2È ƒ r]2L ƒ 2È ƒ\— È ƒ 2È ×%Ã2È ƒ 2ÈuÉ0 2È ƒ r]2L ƒÜþòÔSf|@rp`Æ ƒÜY2L ƒÜÞòâ‹eýøã¥<û¬ï³pòøÚ׬2È w– È ·µ¬¿ñ -9‰|ÂükLRø*gAnB&An¼ðü°hýܳeýV ´¦eýõ¯«ãýä/O>!æúë¿.å ƒÜI2L ƒÜX9uª¬ŸÅ@ÿÕ¯ðþÉú‰'Õi!õSojå½ &¼V529QQ_?õ´¸Þwޱ r“Ê0 rC…«N$ïã$"y_¶Õf/—_û;⯲þ‡§]g¨õ“6a½ŸÂ]cï÷ÊiAÞ'&An¨¬Ÿ~º¬1þÊ ÿâKeý›zÌâ½ sNUlRΟÇJä[V¹>Y?ùDYq÷˜÷[J(V7Ô÷Mx&5'‘a2ÈM(Ã2È Y%`@±~ýÿ©¬Ÿ}N+×)rì«‘‘Ï1Ð/Ù†·{­‚¸Õ¿ôIÎsSÔöƒöïY°"[ýtlè=þMäƒaäÆÉKXqØ žuõµ¿óž~ɯþ§oX.Ûuem¨ ‚Ayõø?²ú5â–ÿèq=ÞjhLN«g¿“âõÊ›˜<þÆW¥½šßwõ 2ÈM$Ã2È; ~ —¯|åýÝÂAÜE_%ÔÕV _ý›×µJX}穲Æ,RÓE^7W/¾¬ƒý5Èê[OÈY]"µÏZ¨h…+œë¼ç%Vë©ý­­îÞd›M† dwî‹çAnN"œLÞ‘øÂyû…ã%qËóµ¿ ä„1ßz²æèËëuÊòV!ìïò·ûr» þSÖÏþ“ß­\‹°ÿ÷kuÓ´ÃÓ‡Id›L† dw”õK:pqP\}õo¼/“Èê;OËÀXÅ_³W§Þ*‹¯þ-­¼ Y}·gõ‘V5åå㿦öÕûò7¾.e#UHP8\ë)½l“Ç ý׿Kê·Ù<á`An&&AÞQ8(ó—·Gî^z/¿†‘#ä®/ÚPêƒ2ÚY~ýŸiåjÂø]®>Ã*ä©ï¼ãñ–å¿üFØ7úiX3WOþŽïFØw[ñÝcM_S{׸ËmA>h&A®.Üò™R2É$ò7®ûl)9NÁI65¿ÝýË'~¿è¿£Ø!²üí'ÊúBç˜IÎåR±ð-¾ö÷ÍÚ”Õ÷Ÿ-ËßÑ«ÍÛ|mžIŠ£w賈MlGcuÂé´'³÷z€~AÞG&A®*¾ú𱎛£¸æ]5Õ÷mâIdó«^lŒ½ÁÅã¿vøJëâwÒê£/WÊÙõ­Î_Iª+œæÿ8]m^5µR¥õ}-¾þÏ¥¼š,~ãë2yˆä¿GÓׄ«An"&A®.~¼#uð„òtØÕ5\˜ÇAyU¯÷\–<µQíÚ֨̾ú·{N/¸BÀ$ÒHóëݤæL>39Øwssp¼FlòªÝ}/µÎÕÅSß…Õ/<®"«±N\mKÄÚ0Îêéw±ªdI† d«Êúe;€ÎN1“4ÆñÅò7ßÝ©«0E6ÇÈÔFþõ q.ä9&‘,¤<;ŠvÏÚŸ³›?þñª²øí'Êò=W›W€ÿ"uRñ’¢öòÿRÊ®p—ÛPiãrlWE ¹ÚýzÎðd@† äv’`ÿøŠ§ï6ã[à€»o…òÝœ1µúÁsÍà˜smˆ ̵-”ÜÝÄ•ˆ‹Ÿà5M¼U®’³ÃV/¾R–Ïþ ¬Þ:U¿uøÕæ^Ô÷Qm(|ù½­Î_”kN²ÈäÁÕ ¤GåÎýìr®õú•Aù d˜@n'áýŸx­Æû4‘È)±v`:ö2ÈÕ. –(çW™D˜g3ÕA’’òð¿´á¥Ù5 ôh‡»œ0qðØ%ÚïXòUVÊìï?^fÿªä®>Ñ̇!â%$ ø!Š-¾ñM))\uÌ¿©WÊ÷Å×¶Ìn8fûiÕƒ r£e˜@n#áî³Xù?/å}¸µ8Wø )’Æ2àŸ nÜg_ù«›Ç$ Ü%äÒ7xk.kÄ ‘ î¨,žø2û›KúÌí‹wéä+¦åò‡Ï—Å¿ø-±«¯ ÓJí³”1àÇDW6Üí´üîSeÉÃWLÝxU,oO¾A¹d˜@n'±A[>«âñ(õë^}.bcZÌÚ1N¤èN½Ù{À{ùݸó®HÎã"~Ëãù ωcú«ÿ°¬Ï]D-œq‘'k›Ûuuñ|Y¾ñZYžAy:_%ßæR‰6«ôMP;ûÕÇËüŸ½¬gº²é‹oûsX[Àñ9_íàü ƒ|X2L ·‘Èui¬á)¶Ë_ù¿]ÿÝmßz³ÌÚq,»NáUäS¬DXR䀴_§aÏ¥ªûEª8(—¯¿VÖ‹E™?ýƒ²º´Wó¨XéU‘>Ì„?r-_x^JÊò™JÙ· ‘þJi6|Jú®\.Ó¿÷÷Êê‚O¨›\–ü/’&¢n^—õKíq•A¹2L ·“äã>Ö`R‘ë5®ã‘«K^-Îo8ý/ÿ›²ðëê ‹Ò9^š]åÚLú—¯¼„~›ƒ-é)&ªo§+¹âù´h9xÖÕòW-ž±šcùò©²ÆêƵŸ>À{i¶øBÉnùì3HÄU ÚyýŒx`vb4¿·£bùWÅ Þ\q8w,Ãr;I÷–#fû˜³Âä±À$òn®Ù‹ý˜ÇbER^üDl Ïƒ¢ˆÅòØÂü_ÿ^YbͱÊ3’"ɯ\L©øE¿ÈqWÖüËÿ¯Þ{@QxüÃKà 5+k~Ñ.^ðK|uÉŽÍ@?xYÑ«äP‰ÙË%Ï’òcÒ¨óÉο÷BY¿l ¤úƒèù§^Õ ü>ÈW5lþý—ñ÷¡xŠÙZ,Ë“G¬’r^á×]YÛN.9©ÚÚïÄ=˜ »±¹¡2L ·‹Øñ Š 4ñ§œÌÇúâë¿!×mäH&£3¦ ’Ç+(> Kþ„Óæ€_WØ@ºüákeÁߨ»än«Üå+v­Ì…?ú¥öŒgf]ÞSŸsRe}åŠ8WÜyÔ–+ºX•ùs逺µ‘ÉãùgËò&øjßEÔf[yíå¸ GÛQi¹ä »±¹‘2L ·‹pЗ'‰ÕãØ“ê2(Q!rÊí—ÿßõÚ9€Þ庘¨‰ãý .ϾÝä”×Y̾ýV&ñ\\}¬.b’еm¾ªæã.$»à€."8Å ¬Šæ?|Vʈïæ$Ê>áÿêô¹²:c“j#äi1ñË ïך— ¿ç^aåÀ|ÁqžÚyµä’ýÚ7•åK¯š5È ¾ È’ýáAïÈUè”4Pé`dX®›–êóÇÿI™A—/ë/óÌÍ9rŒsê ©Uå_¹\Öøk„‹–ÐÕ¹Ëeöä3Ê¥ß8‘‹D Y}8O`r‚—},9HϾó‡êK8Ë9OÙÅ „õ:XKá¶–5FìQ™=ãwÞlwñÊK˜Ûëf´Ö¾ãlÿ/¿%˜H§ÁW5‡JÓ7ÃyYŽÓ 2Èa¹QÂçŒÿò/—õ×õ¦zïYº+sê ”Æ ܬB±:y\…L¿ò×ã²á݃B´ÁcŒ]9!5qèêÒ~™rÁªaC,–«˜å¥ –×òç¼bã%®Ðå¹K2‰¨¨Ç&xìC9Þ×4h7X´%%wQ}osâçýÅ«6Áõå´ºˆäaò¼TÖÓ©Ø·sÔVQ?'a7Ö 7J† äFÉ‘#Z>ñDYýòÿñ=O$yBñA§ŽCà¬BaE”ÌÇ;Þ.¾óƒ²ø¾Ý´ÏfjŽI¹6pÄ,Ïùî+ |æ§T®ðP^Ú+Óo~G¯(Ï~³—ð)‚‹/ º>`çú­Mî*[øYTËEY¼ô<,8\hJ/ø_s¹-ùop2‹ã+‹7^-ó—xª/늅hΘ؂C]>ÿ†à*ÆUÉ¥0¤ê—RíÅKý±¹12L 7JމA²~âɲüåÿÓu]1NYÛm2|ðIãMÓŽˆÕK\ÖW¼WV3”Õ+o–ù“¿_oR‰> RaÖÜæ¦ð leÖ ÇIIÅ dö»ÏÉŠD)ÈÔöY&;÷ÁíåÌÿà%ùÅ?{ùëJÍû }r[…%T Ç(ŠÍ¿ÃI};sJÄQ0íDeæ0/'£ÕþL9æê¶×æ°<îòY_e 2ȇ+Ãrƒdí+ŽPHþÏ×<‘È™S>°˜è h’Ú,q³º· ϸ<›‰“Èòû/7ñÊ· +§ö^ìg>Ú„ÿ”êÇ$2ýÖ÷dדó—§^ƒe¨óª­¯–ÙÎ-÷¿ùm Ø|¶ sQÍ'þ„5±Îk}<¾2}æûz"ú¬×”[òZéy;œÅ ¯ãU¥‰5»ä¡d¿(ÊŸçM%äÕa¹QbˆD½Î[,~ù?~÷‹Ý8ˆ®ƒM;&ÂKuú¸r¨ºåâå7Ë  ÷ÛWq ៲¯sÉO÷/û<Þy\‰pד¬>.Åê£ËU< XãV>°ïCuá\Y¼rþZã©Ý\T‹¡Ï•\@,W L ¿ûŒL$ê÷¶è7®cP•ˆW®rxŸ+9[ ÁUÌövk^—–K|þÔïkuA>D&$#L òX „a>`ðq±ó_ù”ÕSWv>ÛIÄòúÔ´C^·Î’º§g'9Gx¦«ËûeöÍï` ö³Â§¢mñ 7w¹¯æ; ˆ,É•ÂuöÔ÷Ëô;ßÛäI\JÍçʺc«UYž[Êõj]¯_Ja+ÕßúF¥-(* ãä±àÙVÌuŠ+å©‚düú=¯– “Çòu;V$j\qæDjo´g”ù“¿§Æ ƒ|ˆ2L 7JvmD«@dð`Ý0 _<þkeö+ÿ)&’þç@è€ñjÎA…]y¦n\9va1"ôP8Ærñý—Ëì[Ï”õ¾®Fº¹²úHqKuž•Rw;ù—ûeñÒé²<³ºçʃ§qƒ¦ö¼dßy;=ÕÞ¢,^»¼¬‚Y¾Æ'Éä üòíÓe½ÆdDîÞ¼¬.Íôý!7Åùšm ©Ægî»±,‡JîƒÚ"Né´·â-W†ÝXƒ|È2L 7J¸ c@ 2(¥1DÖ [cPs"á-H:‰¬@XRûrxÒŽÖ¶ºL³´+ …ðÜ.^ð_N¿ýWX¼aw˜¥Ç[— /ZÏ)Õò˜’//Ä“?ï±Ú¹(1Ë·÷ËòT÷`|pµOô8fmÁ–ÕÂå Ág ]^ž—å…©òj>ɼœ‹“Æâ Vrß,8ŇÉ}[/-.󭞨q¼M·Y.ûõ³Á‘ü.f{`z©ÜųzpA>,&(2ðû/ƒCÖc\‘ºa<Ívþø?–6q"‘GÏÒ‘b|¬bõ:8YÁ8Õça/+9^š­ùðëù{/–ï?µÐƒÉrÌ‚·.IÜà ‰•—ƯùhcÒઃ¿Ô¡ìç¯äUb«uå1G•ÕZv¥É®+T#Vmî~Zrõ @bYŠ¡â&wWÙäQsQAÀ¼¢“'ŸL™ ò¥dÝ9Qòÿü~*.*šßb£3!5‡q‡Óyù°e˜@n”pÂSyaÊÁñÁ 0 ¬ V© —ö©·äÊñéWþZY½~Z1‹©"ñª"K¥¸¾rÐ6!ëã;¦Šÿ·Ëô·¾«¾y|À}MqÌýtÔºVapõqi£ÕÞ“ÈEåP)RâÅ}Ä5nq™§m‚¿ñ”*ÂId5å}º¬­¬Ì2' Åù3e5çé¶ô.U®hØ¿m$òxœ üJ¡ðâ´®–TÁbs–AQcŽÈpUú ¦ È PøÝ·`³.ˆÔ}sñÁ‹²:s¶,þà‡z͆Üébü¾64Έçæ¢m`2¬ÆZÝã•q¯ãxêûeþ¼vKLÔ<ò¬¬9¾òW.–Õ*ýÒ÷Êãó1ÈbEsâH‰ mºAýb­7¬æX9ȱàärõ"»›¼k~õ<Ʊ—geqŽgfq7Ú%Ù•FœâmjNå7ù=ê‹·â>YãÅú`/RVžqØÞÞdÝY…h.ãa¾$îç鼋‡[¼òáÈ0\‹<þ¸ÞôðT籬×)£|‚•‡D.½õ4vH¼„ñ#üÆ‘:oGò½äÚf"I¼æÔ[ÆÀìæ’ü(j[´ÅÇkO±Fcòà.'N&:Z,Û©ñüÓêƒj¾lSj’¬×˜D^¹(ƒ?'°…]µ^ýøšÃëÕ&ƒ7VLó7±ò¸p(ÉŠ+eÍiv·ØjQV¦Èòâܶ4W6Ä7ã*Äì*Ì'eΓr%î칚5È ¬ È5ˆÜ¿ê‰'Êú+_)«¯ü×eý›ßÐg‘_¯ð¿÷öÝ×bØ¡uˆdfó¶à¾û+ŽRîk%É÷äŒ) }äÔSx+† űnÙñé &êîwÎâô•2«Ç.ZC,÷xš® ŒÄm–ø¤",YÇ yóW/•ù`¢DnÍá¶OŽ4)Ò†øT9 Í^A±`ŠTæñz²%Þê’dŽUˆ¼Oçf•8Õ—ò™ÍÛ›¬tÒ´)ˆ5"vÎ1}êdX† ädôðCRÊ«õ7¾Q–_þ/Êê«£¬yϪôXÙkžm%ƒŠu°0¬¯^…u;ˆ.6W1ZÓœVf› Ÿ“1µ{NÉyÝüÂ[.Ík¾dWw_Ù™S¬‹˜¿¤±™½pN®ëP^🻮¸úÌdÆd͈,É'¾œOËâÌyÔçxÃg]”±OMå)¿K;‰`qÃc,Nòäz²­ŽªaPLˆº+˸dµ²ÉχÐ=í&ßÅã,VòvŽ–<•w¸*}C† äZ䡇åK+ßSÿòBÖ/¾T–_ÿõ²ø•ÿ{Y~íï¾ã}«ªÙÕ|Ij~Ú¦¹½¾z=Bœõì3.Åmϱ:©Ì1‘`EÂAËs´1:hŸš*V—3•Pº¿[ê/§,Þ¼Œ_ú˜4Öë²BßåxCŠñ¼Šá…eÆ gɉk… „öò"V2—9²Ï®).—O{µZêä!ÿ€ñâÀsv ¾›+åñɇRó‰ŽäÚ啹på ¤Ò9‘?‹rä`ºù6xÖ¦J樛=;ìÆ䃗a¹á.,*D¾¨üË`ÀŠÊêYüªü•ù/ÿǘLþÞÕ'“k9ˆÎ—„5íç³°’Æàf˜Ù5Îðå¹ eñû}½ â/ÿ_¤\¡ž…wäõ/¼í\‡èÀbˆ ¬&ÜžÝVâ‡:Wya{]l;{jueVæ?<«7L+’ˆ³ÁKlÕÕ±Ü}eܬ5?mJªË`¹\–ù©KeyIû_5ó®ýˆtɶ×vÚ,1É‹>Ítð¾‰úë b9yx,EeØäÎ0£o:y©O¸ÆÍyÝö:Ï;m«3Ô¥Cž'ÇÕ|îS{úƒWNaµ#¦åÌ_|}Ø5È.Ãr­òðÃZv& ýòªèà`}¼gÕük¿Z~ùÿZæ_ÿ²zñeYÍHœå©9ºu ëÄ“hûëtú¬‰qY—Rxuýr›©ë{ZÊD¢+Ùµe<ÓMlÍÁw)ñbœˆqµÎt5ã3Áyñ Z¬d0ð‹aŒ«b˜+óó˜…캌y£MÍIä ²ìúĆc¹Á+ÏÁ†ÜoÜ%«r<ÛJ‹‹ÉîâÜ>®°<®‡ëvÊM‘c!¾ éòÁALHæ`2\2È,Ãr2zè!~Oå ê"_fÓ.^}¬›wùÄï”éWÿû2ûk_+˦Œ¥#åè­SX7Ld¡¿þ+7ùgé¶PÆ‘±® Ð;á„§Çr"Y¼yƒu{ŒDÚX¯êgiŸPæ¸:N‚•üõ¯7L´>aŒ]bÕ «b5—Ú¹_r͈³`,€êËq€11Å‹Üê³\x•‹yÁ¡ãSó¤‹óÈÁ3³¼k·r%ÖãÜg{þ:Ï03 På¢H¢çÎ^9-vòMÚ|©MãÏž{AÊAù d˜@®QF<¨_T~G¡ñ¥5Ûqù»7çÃ[Ÿ/_9Ußúý²àíG~øš\æ<áð%Åy¬¯€xºúœçš0Šçò’꫊ǹÏsð¬)ž=5ç]gí •g?ÅUßI¥nƒ›q³u?ðM©ƒ1q¬Foc5’O¥M~bËÙ¾®¬®>rÌv¥Ÿ“ÈËçñ{2)ßqc=Å[Ì“ÛjIÌpµ¸*n >¾W¼'^¤¨ñ Ѹ9pèVZ—±‚¹Ä‹#ü³#%W ñ¸ÜAù d˜@®Uì :E¿ìªüÒº`hSÃðÖaøö„5žZ»|áµ2ÿæÓeþí?( L&þ–„ÄϹºuÍ…Aï«î6kÔ?¸˜DôŒªÖωgµäÕç¨Ógþ*f QTd˜aå1Eßå´g¶eJ¾Å4y=ž æM®Dˆ q,D!Þ?åws`â}²ä¸RæX)ýP>6>èô^¸j ‰¨]y)68~ŒLŸV!ƒ|p2L ×*˜@FbÂïª}_õË ¹Æã"£1&ÁQc,¨óôZ®F¦¿ù»eþôêC›RΦ¼¡N©mvJi‡BÛ®¿È‘çé+Éå~ýÙž-óÓWt÷Äꀧ¹”Ÿ%çYaÒ’_èwMƒ©áj„l"ÆÓmå¸cçñ];a ™½5+ËýtÀŸ8hSW¬’—ý’3³ô3ÖXr/}JxÎCoÚèw야™OÑcÄOUÎüôE¬š0á>øCr>µ)Ãn¬A>H&둇ì@:¾¦òe– @¿¼.Š«f\ê‚LÄîjp0ˆžÁ/þï½P¦¿ñÛrñoEâ"ü´‚·Õ Ÿ•µOœ°x,g25¸•(ré>÷s »›Þâq ü²–AÞ1ò¤ÔÁ.êŒ[`ÒÑU“òfN³\˜y€}¹Ï“Ò®+¨‚Ç‚RãÌïmRW@&ëÑÔ/»‹Øüî^ _x¥n»±6â_ã0à¯0™ð €ûÿüwÊ”“ ¯"ç.,ç¡›bq”œ›â|ä˜E*æñY=OÚzÕâ4V˜HV+€øŸÛªyYÚA÷Ç þK~bPJÀÏÏÎËâ|øÛà‰:†¯Ã¿Z¡¯~ÌØjo‚I“7xcê¹úêÆ]îñ <ýÄé7žÇ–ê°Ù%¾ÌßܓեÆÓ6¾U,Ž>^™î«†c¶¾¶Ë’bøÁ´,±¢dB† ä:„ÒÕPå—ÖE¾¼ ®_ç:qÞÄжºÇ{¬ÄY>ç®Îœ×Û‘üëçÊò­+õ¸@åRŸ"Ù§æÁ\/æÏyÔŽÁIΠâ*ÂW^¦²"áDrÑÏ|ò8ôsÕRW–×ìkñü·Zl•Å…¬¶"Žê±n±ÚCì2AFºÜc@æJ1g±Gí©³sÂÇ*äþ–éÀ¼ò,†4À(•㻲R~á™ä¶j TNé}]oò¸æP‰]ÎpdJ† ä:¤y”XùâkI‘Ÿ²'!–.&ÔÁC#½î>JÍãJîZž?(‹W.–ùÞ–;ÊòžS]®äMq´y,¢¶ceÝ—UÚ\øþ7ùù }þÖª,xžð (ë™WVw[ûÓÓ®”˜Œ–¼XÐü—\Aìën¨ãŠdÕæêL&:‰g”9È%uæ?y*ڦƉÔXÅf<Â]wŒU»®~¨‚Ñ&¦<¹Í ŸâqÎ3¥_9ÓWÞÖ¿˜K£¶ˆqöž|—·Ödk”a¹á 2î¤ë_^¨³Ï¥‹‹Ï9,ù‹¢<؆Ö3ÆýúDd‚Àè*ÏàxéBY¼åAnürmâ“­×a$Œ% ©“à>·Í×ÄÑ‘|^ãD2;¥Iwõ‘¹,5‡”®ÄäŒ+x” €>Ø«é¸ÌÏc52·a‘ÃRWµ=ÇÍǺ䮦XÕ\JÇ¢„ßæt®×EY‡ÁëLê®&¾TÛñ÷£mVE}öúá¶üdÓ'`‹e™½qvƒb¶ä Îâüåa7Ö ˆ ÈuÊÖg‘R†6~oó€o"¶ø`³4 ÑãqøS)6ŠŠA2‡¾Æï¸)ŸÃ!“Éϕ٫ËâÌ~L(r+;ƒKꌳ’ ×Eh‡Ê€Îk?„§¸xß-yŒdöÚË¿öYö*^X‚#Àª³û‰ƒ±Ù”ÅåmÙåŠL7]E‰µ))Š«¨=Läƒ;gùêWËúk_Ógx¼ø¢×/£{î‘/¬Wu €&>ýRC*®_y?,÷{¼R&UŸx¢nÑ3§¶Ã ,ÏîÉd2í~‘`Ó[Ï×v¼¬±ªÕǰ9éT,•"Vö#°1`Õ°8·+»ŽšüTC¡ƒ&£D[•K?*ÊQŒgUqX-yl„£à7Í™bWŒ“/\\â$bœFÉK¶·o˜œ™%WУbRy´sÛË6œ@æ@™GüôiÎÚ†Ø.è'~ÌÞ8W¹*©aâx­9Ã$÷Ržxäý‘Ñšû=î‘' >ñ„Úþ…;yo)|ÆÇ='åYþ¼w#Ëï?[æ¿ú5±k>|£õé_èT‡‘}³xáù²xƒ÷,rñˆÓODZ.‡@å‡he4 \ëàÞä¶šq7Ô´ŒvGet”¿#4NßKã{½eòìôKæµÜš“ ÍÝ”x]Ïx–·udU¶ŽÚ¯wòé7{9ÇJ‡g+§Ð'vËk| &³2ÚáêCqç»­<Ú„³þO,ˈñ“¨þÖnûÃy}r÷Þ“ý&£?Ç ×Já³Î¿Á¤ì~âîMŽ—Âe…¶–[»»å®?¡+ààòŹçCÀÙ:²Sø+ÿ‘ƒ òþÈ3ðaOëÿäWð¥gE¿t>0²^ÿ>XF> gZ=ø±²uȤÂ;ØNÿ³Ãó1¡æìi+ÅÌ_|¾,9 °"ƒ<Ý÷µõÙ¯`TçqÃ9m>ÅWû¼š\O#">âÀ‡ÉdË&“Ê7?ëä3®æµ²ö[v¾–r”\ƒ‘8æó¸Ñ.&’cxÄ© ·¿CÙZcÀÄä“¥rµ šÛŸX”Jê#Ñy†¥<>Ð7¹“È6 …q´ÒrG¹óÀ‰2¾{·ÁÀ¬vå'ìÄÏ~¦LN3"yMܶŸTNþâŸ-G¿ðY­ 2Èû wÎYýç_¶GÐr°pá@ %E‘TRdurò¹þƒ“ËÖßüà¿úrY_Hùì‹«¹=¾?¿Ç,^y©,^}É‚¼_Œ!Ïb`k\ΥرÃös¼Ç(N[s[\¹„‰‡;Š(æ7ÞÖ±-L(¨ïè@¨>Ð9y¤É |Z÷¾¹ŸÕVb+8ÌÊO刓׃/îÄçÀce´á%ŠêÃNTÖŽó¶Ž`@>Ç*·Ú¦”žÛq™Dx™ŽÕå}äXJõ±®ºId4É8Dl›øË#Ÿº1˜±2‡bïI'µ)Û÷ßSŽý´]ÐjX»RäÀaò8ù‹F Ay?䎚@¸kýäöýÒ/— &"¬¬¬‘À(™»õÈgÊòÏ–Õé×K¹ëDÝ…_ƒÊÁ—7ÇÖ\ö¥vÞâWË«õ{ÛôiRMÖÍ/\ æóS¾û‹Xò51VR`ËC”x+(ž9+6uîÞÚÂʤlcÁ¤#'}'—¢çï«YMt¸>Ðç¶ÝOþ«‡Ñ¿ù„—8÷v¸òà ¤òP°„ŽÆXå„Dñ8å×U|øßÔñ9_•ñ6''íÍGµX·G[˜DîëLÉ߇Oì”ÝŸh0²k=ó-ÇÝâL’¶r¡Ð/%_”£ˆÚÜõà_ùß 2È ï‡p‘ÇÈè‹_Ôß(þ[¼~ëÜï6]&ä.ŸýAY¾ðJYüÁËâ[ß-óßøVY< ìû/cR9WVSî·J¯y ™Øý°` "¾à;Vûê6âå^«7šy) ŠÛˆw>KTä~TgWeö&Ѻ%iæ3¾ÉíuôOîxkXí“—Ð&å ýb¹<ØÁ éhY.:·zI\–rð› ò_ÃËÙ<°>¿²‹\q݈¶‹÷A5^ãKõ啱ÝúĹŒ péWºTfçñ^¤n|ð˜›RÛ¦mq¼Å‰ÜæÄüÁ3Nc«oÿÞê¶Ö«€£¥âÎYà3Nçä}”;j©×o@ø…á@ÌØá¥þ–[N࣠qÞ·Š·gŸc"á]uyÿ*>s|þÂkr’õ>oEQ[Ö\é~XÞ¾0ƒhû`¥cpÉq®•­2Fµú9èºm¹ª2ò0ÆÚ\ØYT¶Ëò⤬Æð18U®©äÀÀ.+}·Ýü>h¶qügï‡<«ý þGËjÞÿ7Š[²k.ŠóS¹8)MwŒ/Pðœ›m©k¹ØçUëvõ»(9Æ5NõÙ{ã™Yó‹ö·ƒ²A磮ç@9}sOcxÃqUÏÆZ !Vˆ3.qWQûÊSíS1ä½È5@FŸÿ¼~¡98BôU¥Úü"GKA7¸[¼"]¸ä¡M§Ç@—gΖå_/3L*Óõt9øç¿#· ™[ã¯AýÂKlŠ“Á µ/u˜™»qJ­Ù5jRŠ8ò«"ƒaR§"Fâ€TÿÅdÅ_õ¼ Èòü¶\„§·‰ÂO§×<®äŠ«s2 4<*^–hg¯]EÈäÁ ªrù^ø·´²Á,f>Æ„t«–4x|Ž«vÄÊ©Â\‰TŽ©p‚—ñåâöY³QåËÏB†Ó3û‘ÏTDB"Æ9¯œ•¼*9gΡíS®<ùŒƒ ò>È7lýì£fá‹%_JUµõëʰ+\r¸ûÉnE9Â΃p.—gΗŠ˜T~÷¹2ýÖ÷õ$¯]¾WÖ{s $­=ñRB|P¯8A+EG©<¯¯¨<JÄÍ_ã’oDèJaÉë'–û[eÁÉ„»{f[õú&‡©·³‘ßðMµIƒ¾ìÚÂD²šqpÌ“”¹<Ÿ”0¼ÎAÛ€LF³mõUŽÛ0¸éõKelµ¯ûÆ#5ÚÄøÊ6¥Tmƒ^Ç´j»}ô]èç6^œ›T0àk›Œ1mbä÷ðKýü&®Ò1 „U;kÝÍÅ‘¥â- § åÝ~˜H–ûzŒ„â~çˆ-xTUƒr‘Éh­«‘&NxJ’SÁ$¢'ènœ´«í›G¿¬'_ÃEYù£²ÿŸ’y©¬mÁ€ðÂB¹G– 8”š3Ù.ϾlÖ ƒ¼7¹ó&ÈÖÏþœ|é}°W[¿h.a·œ îî®ù0L÷us+NŽæä<ÚÂ&¶ñ¤Ä„Âc—9©ìë¤òý·õi€§.ËmI–œT¸’Œ'JÀmÉÕ–kÞŠDÞ·õ¡ÃÏ\)¹Êá?ÃTu SÂaûðÕr¬Ç.+Ë)~íó*qãxœ¼O;Ž£ŠÉmeÂc0Ô¾pà_Îv1™Åߪs°Ý•üšÏr fºÆd·wDW#÷ö¤D=ù(¼õÉìrºõ‰pãX¶¡³ xŸ0ªÏÛpŽå¦Íg¹Ï°QZ—áÔü_¹À¹Y¬å‹³«2?µ”r_¼2©ð^KdJ.|‹ÚWÇ<_(^Üö3¶,GôË&b†¯øÛêM‰ÂíÕL'“O­ÅÊÄw!IQ¯ÐŠç¿+^| …ÊŠdj+N$Î˹a瘬Œ_`Y.ì~XÎc|ÍL|ÃId"»Õ‚ë±äf±\üÍ0ÙSÂÏ’|ãÁæŠÇÁ䀺qREKϱ÷Â[Õ6—¼Wm'øœDä½Ê9@Æê‹Rr`ráX¾|P±M_ÜOÝž”Ñ®H×A âô>DIåiŒùM´ úµåK^ªk~y•²æÃ¤±Â¤Âü-Þæ-Õ1©œçmÕ1©ÀŸ<Ï%¥å‘| ål-Ö»<-=^•L]­fìC%“×þá—?epЗ• c¡Âµ<´81©­Ø†ÒavÞµ%+`”†_ãäc ] sLpòdE$­ý‡ÔxÇYŸ]ÁûXÀQý”2€S!‹IdŠ6ðÙhû𻿬<õɵ!WtÂW5NåE×xÌÎèÁñ.W;ã¢öÁK§¤d÷"wì"·cçwÉT¿h*>hê€ÊRUìŽ;:q\"š9.yõ‹ï¸ Ïæ‚¨¨µ+QÆõök,ÓAµ›E€,×jŠUÊå•>ŒéâvYœÛ)Ë+|0Óò‘ èäUeŽæøDW™_m–«Æ[½(ÅgïÏ•ƒ>~ù/÷•Å4¯ø[n“[Jò8XZ€$Î&’9ó­âôßZzœÄ:¦~ÆÎâ´áh#xõ½±]Tç{œDlw–à¦Â³X«ÏxfÖÌêï¹ÝŽúkÿSKi«ŠWøÄBŠEóˆ|©ä;•”_ZýºñUKJæ Gx(îæÃ¥àuŠêg½ÚàJÓngâ E|‚…ÝÔ;“Gn“vı=m“ï¥rLEj¿ÂÏÝcΑSrgÜÅ´[æ—ˆòZ ™T¸Û† WÕsY»PÉiÇ2\ÛX³~f]Ùd2çd2çõ=»¥:%¥)¡Ü5?8&Is_/ãÈ`+}±:”ó)W#ÛÆQ¥(Çh{ ¬àS›DªZN«Kg rÏ,÷U¿s™Wíý7öZLxÎUëoœoV!ÚŽ‹Úžçâ“ß“ú ƒ\¯ÜÑwcma¡è—¥Yü’ñûf*¶IåÐ"îÒ‰81Ûpõ©Ê@;àƒ7„eÍAUÔ8ÌD\ùSó¦2àzÁžÕA žæÙˆ–c+8ë qR‘‹ñ°:Yì+sèbÊ+¼yVRç×:JYQx¼©û"¿—æŸÅ@<~¹D»³£ev€Éd‰Œ“‰øðB®ñD=®S²ó©N$+Ðgª¶ ÊT‹Y,&z€Ýv…U´þâ“ÈtRfWÚÝoL¬ycÀ_ÎGeÊ{fÑ'jüÊU[¯ á½Ô4.8V‡­¢gd¹Ý媨ÁSyù¼ôA¹^¹µnçþÄeý’~˜ŽaÈ)¹¬'åó;Þ,¿ûT™ý“Ç­¦_8~Óô¢_´ør¶_TçRfß{º,/^艧 ÀëžGíåùsz«tb)V~! /êÃ|Y–{W |GQ®¨?ØÉü‡ñ¤}N6öÔAÁ ¹mÅÈ.ÇI’/ñDÆž9),Ë¶à•±6$ÎßGÆ„ëÂóº—ü¿µ,[c´Ã‰ó°\VÏõÑÖ¢lM:XŒp¤“ÆK1cpÇÛr´ŒøÌ›düä|¦¹ÈÑÝ2ý»ÿy˜Ïz²oû¸r(5'¾xŠuÛR[ž,xêU±uP¢0F/VO¸ñ–—.”Ô¿Ü£~ÃÌvßj1¯OdÝ}ÚO‹I˜Ü7?›ƒZû<±Wèáóþ5¾Ì­“‡rº}¬1lÇì²Åù˜T¶Pã@ºpd¹‘#·©¶æixÆÉór2á¤À ¡/§äqÜÿ¨sâD¢’y(Ìöx¾‡ÉμN:žÃmv˜u>Ùpç¨Ã¤òÂÞ¾“ÈŽãZ CüZŽn—£?Âç†Ða\±Q["Êñ?òñrä“©ur$›q5¶”c|ª<ð¥?kØ ƒ\›Ür”Z?þxY?ý”Uøe¦è—Dÿ޼LËå®f(˜d 'þ¢Ûž`¢™èÓãðKO|Œ›^)ÓüL@¹iWúI,ã°ÅÉóý/–åÞOqíƒÙPËáõÕ|^–û WÊÔÿŒ‘¯>ÅyÊibAà§š<‰ë<橃¾(·™Çl!ª¿Æg?t„Õ w_ÉÀï“ ü].ë0_/Ï1–œH0a11H ç¿›Kæ‡MþÖ8M@P‰ïİ>ÞÆj„ÀʾjkÌæ$ÂR}šX±“c´«XóBWpŽm,K]Ï8ÁÓ:ÿqwÖˆGÅO¢ò”ËÚ¨ì~“ˆÌ\ý© Æ]R<¸Sc!5¦r4gÓÃ5V|Ç"J‡×e¬ˆ|Ü5´ÆXµšb0?àíG WÖòxÙÅy”ÐÅù"ýñ ¼}úâ,åÜž¸¸<Öçsðöêz.¯iàÙS¼í:o¨×Cxß8ñé?ŠôÝûã~SµP¼ÕÌ¢x'WÎ)ÿj=ùkŒs”·\Oä ¬ùâH™Ï—Ùì„ØÄ–˜aål*‹­J Öñb6ùóån™ÎŽkŽ«œÌÉy±ÚF{Gõ¬/i‡»Ä%™óÌ´y¾»oâ cT¦¼j7”tŽù¼¾Äg?½d>Æ'Ÿ×çWæe±ÏÉþ»©)òÌËô4OÎ0‡ ÿm›×޼)õA¹V¹%'9þy¿£®~=ôU%싃¿?6(©ÿ÷Ü#Í׉3¾Ç´mFĹúE' 1œ"6óÁÏÕFõkŒ–£qás¿«`ôã?ïã$×gp¢˜Á>à.,^aÎçhPw1±@¯èrE¯`Pæ­Íôªíï'5w>Ñ{V-y!!YNr¿åP•/[ÍÓÆÖœµ=µË}6ó9[óßñŒ‰òËÎ2ùœ-˜Öš"Ò>[Ó¸6¯ú³XS\5bhp÷›LT^<ˆÁr‰_Ü¢˜P–˜Xæ˜`–SÞñ8 ¸ûX`Жk*ôJïÅ“t‰Av]®&…ÏÞà=¯¸ê‘{½]–‡ô‰ïºÚRw¼:©,9)åjcn“Šü½Rs¤øW8ˆ;à$+|E<¯òÙ÷‘L¨Srð>\xç›Í8±ñZúŒC¿ñæ¼àW­;VUs͸â¬÷Ì‚ZÛµ-|^gùÜ«çÒ8óËø¼ÒYe&ÁUûÒÓÏ >È ×"·ì"«ú\~ Z Ä,~IùýfeŶc7¨<˜‹¯¼\•ÿv1aàfK:ƒ^Ê/O%tÛØZK1Ô%—áëѪƒßÔ}Šç¸¨ÅPX—ÃRyžÛýbÃà¯qÜr!êkN<ܽ„AvΫÈ9c•°˜q÷&ªaówÙ䳂ÊÄ£þR&(Úñɧ¶Ýµ!ñžØ_Ö1à3M* ¬T–ÇÊl…>±Â•Šç²XÆ`â›re"+Ýu¥<ú•¿ç`†þsE‚Ÿ`ü3ãŇSL$²»P0ãX®ù “È”¸,˜ðX‡ò"C¿Óo#ä?=;“Ûœx¬82ø>p ¦kC€ŸrùÙW¥dk‘[wŒ;«µñI¥~a\´Öb*l¶>r_Íç_dyõºù<¿bæ'•gYñl+ÁõîüÈ)6B|PÒÜæƒF¿jÄjÙ«>:1xl?¯r3–êË:ÿ%NØ–Ÿ,ÁÜöº©aÞªü§ÊDÏ:o[‚ÝW‹%WGËlÁÝSº›êöŒ“&ž8œ „ºÒ@<óar YuhN*‹õâwuRA®9&/Ư$&úȉ‚~r¹J‘ÉDò(‡+’˜Hˆ±-m«º)ï ÌÕˆñE%Çè¸ÌdQL'!Úäa’àÿúX§¿”ýÓKÑ>¹O˃7.ÊíMD kr@Wó2?Ï SäÝË-=pOä×@Å-)ñEÑAKm/˰­|w^Šù2OÛÉ­_xøJîèý’”KLmmÏr˜V¦ÿ Ÿr•ý÷FE¬æŽXŵ½„ Ïå\Ç[Žö£ÅœßÉ_q·CñZ±È!¨q4—䫘óˆ™/á¾"áÏ ' NK(w?Í×»2±P0ÙpÕq°Ää³B¹:Z¦k¬.0aÌPÎÈEœàðï-O”½Å]eü)W*˜Ø'£l™L¸RB›Þ'*‘øD"ÂÏÕmúÚÕˆ)Þ‡L÷'ú~ÅŽÅ­ðr€ID¹Ê×Xú‹Èì⼉‰ÉAË+/ž±º T1γ¯huAÞ¥ÜÚdüçÓï‚)¿X>èù×%¾4”MÌíõd\¶>ö€åÉ<ÔhZ;ÞV´G…íÒÉ_æ¹­|o£å˜fŽË®*4Öótxô˜ígLåxµsû-¯†åÜÄRœ`êóçKÍqÑœ'|š'ò f±Ú^Êéþd‹ø )ªÐOÔsy[:ñè “'†²-'’9tZ°2Y-WV'ÊÅå=åüâ#åÜü¾raù‘riuO¹´8Y.vqyw¹ Þ'¢²ƒ‰çh¹<»+›#ÖÒh«ž>9‘'$¤¾ÒæA÷ƒ=þa@òAyfÖ>'ÇYVΨì¿=-Ë9?mâñ·ð÷zpúR]…Ää¢6ÿS.>ý‚ƒ ò.å–¼¤+‹_{¼¬¾£W§Ë"•üvøÜÄÂçöêìÛeöÜ3òíʹÔöºûÎê`¯,Μ®¾h'ÕåÛÝb«+—‹\ƒa9ÝXµáÂG¶œu®ëp[‚ç-Ló‰vø —ï@0i·Ëa›d¤v’â%ÙŽSÌîy¿Þ¶cÞN7ΑëOQl#_ÇWmó ¯ã÷൩‹XÝ||•x¾Žt×',áà—ì-Þo ~Ía ã­•\¨82w¸Ñ?¯ÊîrWe2ÒÏ}`;ǶÊä¨Õg*^ÓøãÛåØƒÇ SÞ±öpf_äP\Ζâ­IªÏpÖ¥ ³!+ÞD‘~ ²¥µÃM@ËàPœ+¼N|åäö<Ÿø2βÇWsš¯iß8†·Eñ.RëЖ§¾cy3–ûÚò(Vw_Í›4µ%'Lr‹¯°×†rËõÂBˆa$'vA"”ë#âÛˆ?rLb)Coi;ô}ìX9vbçˆ\Б>!Ëx\>ú§>+6 ~1!ù,Kùèc¬Üûèç´2È ï ·Çá*„wÖ¥È0•ü‚ø›ÜÄÂ'6*óçŸ+ËÓz^<ù•—‡6OÆFeöÆË2È»ÏckžZ†®ö°áÍY÷ADÔû`||R o¦˜}цÙôáÅW5>05m£°«nG¼s «¹µžý¹må¸Ýú𼬠nù¤}í¬væ5Xб~6Qà–;0ÓÔæÕxñ·£j;ÂkpÖÕWën×¼\•`Ð礂Á^&ùÂ'+³kV#Û°$ÔrZ99‚ÁŽŒ±d±sÒÎ4l‘¬vP½ë¡“åèGŽ– *“ÉÊ’·tÓ¶ïÿ£/ŸúKªì¹å÷nò!Èm3p2ýϰ ‘wƒo Dß¿\ZRä‹&%¥‹iÉ+Ο{Fê]Ÿ–‘³áð ™y³¬gSXðœÄm0´¹¿¿±ªhó› ‡L ~kv÷É ÒÆp“ÕEŸÊÁ…OŒxÃS)ó ´ë•¤n»¯Ãµ¼9޲Ñ^oû=º`ï~ô&>²Àâ$Ÿ &„Ï}¢yð^ó³MŠÛmIÙÄt¢áD²É箓z ±2ùp²—]øv°’Òúu¬–†Éç–’ÛjYû*Dj¾QSü Ònè}˜s¹kqú”áÁ‰|Àì‹×å,y ýíö@ºsrYhèR&½ª8lj-í.“‡On_qüᣭ}‘8s$_å™_Ên÷QÔßøªBñe¼íƒª×»cñ79áC½ò­¬Z}m޶ýwÐÊ3S×>žá].^†êä¡“ ÷É+ªq&ÜíÅç m¯Ê¶ÝYØß÷äØvïên¦ú^¬<ö#'åš%åk~”“I¹ïOþ„Ôg>ñA2Wñ>,| &F›ÓKÊÕÚëÃ"^1N(:ùè$Ä:Å'Ÿ»wž*±A®On» dø«±¯²áÅ؇éF)gcq`\±†Sǃ3{]½KÛ5×cÀQŒ»¯d,òäAHKpöp(ËáJ©||¬<Ø®8ý›mûÒõ+ÇêÂUÛÛ>™OêŸyM]X¼‡s˜¯r¼oŽÊcI±º©°-/ÅÁ ^Æi6¼bï‚×ßVÛNóxN‚b²ðc#2¹ðö7ä¡ÎrÄ#äøÏ3²¸ûkÂzìÞ1ø±Bñ˜É‰Ýrä£wYÛ+sM™ Ÿs)M\ÅZÅ1Jøóø>,|bK¥Û¥‹yžkk Ë{º“Ì®–Gd²Ñ˜{:å*·ÝBá3οÿ.V!_/)£2éù²ðÇÔ NpýËëù”§Øüôe5÷cÀ¬-÷SÄ'8”Ï9à3AZžú)ƃÆÓ7}Þ'×ãêïrdVgàPáÑGÜre¿pÄï¶ãŠ9_ó¸Oý«y¥”ÏqóeLx=ñM]lë‹ùBépŽa¨«ÝӇʵ| fœK¼·:mÁ:muâ»8Õ•sˆ#Â]WœCêß•L"í™Yðlm•#Ç·ä ¯ÉŠrg¢QG?ñ‘²5ÑŒ¼Ž$r•râÇ?^Ž|â~A$Ÿ‰Ûy\>ïOöQZ»›»»Z{}Jw&Œ¹)]Ìóôa›íé¤SLñ7GÉ gw×JÔùTmår2’iÜòr[N \5ìù½¯B–Ï—é<-5âêó R7¢Š’Rã<~å’ 9žµÓU…O Ú†û)-wÉ]]µÉ—b¸‹‹†Ç´<úóêÃKå×Üý„?aÁÙl'”'¿¶U퇚y(+Oò†æ÷\±gÝ| Æ’Ž.f*Ύϸ uÁÛöó{S%!×ûrjŽMܘ®Hô³ãŠDž²Hšùù0*¹’=õk‡OÀÄD¿c»Û˲{b§»ïhÙÆBƒ7P N?ûɳ±îÿùŸÐ4é…çZ3˜–”w‡yî> eíÄûÕ‡«µ×ÁôxÊû߇Ç•GµÊ-&·åÎ?ÞwòÓ_ï¦Hý\M«¢¡Yøݺû¤ä¢ß™ü§y`¥¼”àâÃ¥Xëò m~0펼îoo»1Ì^í„k=b„i~UâÒ£Þáç~¨¶'LóG.ç{¾Àaƒ˜/k´×á1Cå(O9Á‹œšC9›sçö»6Ge¯‹ÖøÀ„gƒZO>ï›¶Ù‰kêmŽÌsÛóð¨–\£ŽþñºõÙj»ÌW¼ØX1ü0;ŽŠ`¯3ïÁb\.\X—Óo­Ê믗òâ‹#Ø¥œ=[Ê•ýRæÓ%~ÐÌ@Vñ8ík.U[,Þoû寭 ʬ@4W´‘íþ>h]Ë6³ÖúÛëà –ËÛ9¼½Ìr¶™ÓòÁKù‚ÞÎï–”ÛöèÑöŸ{̬øëF’6ˆPÇÀI8ŸÒÅ=Ÿ ³FlÍ‹µ«~éµî¸ÄJÜàËóÐ#ËqSÉí8-ók›®Š¹Í2üŒÒ\ÊsܹK&mi{îwLýŠå˜Êo|†3ºrs\‡Íxå1ƒØÎÑ>8Çs„ßùª}¹=gm£ƒ{²É³>>ÇÃ'8̦oŸ;8”ìúV®°ù4ö&‘&“&F¹Œƒ.˜z$6úÆËùBpÖ9q\¸TÊ[o­Ë+¯–òÝöFyù™‹å­¯”Kg¦ev gþuÙÌ ©ˆµåmD´Ôzö;¦ÚÌŽµ(%cnIi¹¢íЫöADK¯©8h°;XÊÛׇ#Guõq+ïʺ-wa¹LÿéãeþŒ á'&oŸ¢¾a~Šþáw1-)¼ÅÈÁï[lÝ ~åDœbjSxŒbZÏÄ2̶ Ì­6^æ—/&¬ËA¬õ})׋„OJñ©ŸéÆVé}ww_©2NýRïôµ©W¸aM®œªmw9,;N$c,Œê±Å5ïäØníøé¾DY"“ÍÑO}”€äó\9–:ÆrìäN9rœW¬oC;goA<æêXøôoC‰’Òyž°¯¹½ŒU°ËóÜ”¶kíÃŒÊ/ýoõ`û­,·õB9øl"ï²»!xIébZR¦/ól¬×*/JUÊWŸÇ..žÃ¤ Ò{ã bÛzqùB`™S¿ð<»*ßH±õy / ¬}1å°¯Öߦ?†)Ç0ÔhS´»›Ï|‘'û¼NéÃSÝT$µ¼èƒÔ÷ÅŠâ=WûÊÏy|àªx'þê>Ç•#uãT_UHŸ˜Ú›9"Ð!m‹ P‹†)D8˜a&Û¼=ŠN(Ò/:Ä*DúNν{ÿ]e|"ù íÅKúãíOv±J9r\W*' ÏCiãU61ÍKÙÄÂWmé»Kð(‘›ÒÅáRºXh›ªÿeå!+*q £‰=‹6L]™œØ‘³µ4^}äròعïnØŽ…Ïs¸-¥´ÑÇ)r[N$,yÿ,Þ¾Ä}5G}¯”ÈKqn?æyú°È¹‰¥öjÛOyÿûðèÏn•ÇþÂíqøù¶Ÿ@(¾ y/ÄwcMí‰ ‰_9‘S1µÉŸ½·Cñ|±/³òŸcAÅ0”²A·¼õj)W¢‹rP³SxÍ_ãÈanÉo\b,sf×öÍßôG±Ü7‚nç¾U¿—’'¸ OâàëÄw9Ž)®¹Ä6Ÿó6ü^VÅmÅkLµU[ª©^íNÌa}hy”À»¼\§ôòLóß– òXnñBl‹ád²5ö+J,°£wmëêD® ¡À‡ÕɱOÝo<Å"NÛñRln`õàðX õèñq9z‚LL*^j›*›˜sùÒƒmðZe³½>,úsÖ<060H·=ÙuõŽo‹k@(wÄÂUÈåÿVW!ñ÷má[*ŠÍ^~¾Ìßìßåõº±`C ùôM;.˜s4.b´¾ä-Ýí%t*'¸äquá+ rû²‚áAr,²?X>@ã˜ÇIƒf'œâXök¬úš<^…8ë9¶áyŽÚ^‡vj«Á­nyj=—¹ŸY™4Õ½bKiq x¯üZw[xý¾ÜR®ð:í(NŠ­ùLh¶xíˆ<˜.ã!–·6‘ƒì¨nïŒÊöö–L(¯'VpËO¬§jÃÕÓ¾Ôk e/rXî„wsˆßËn;Ô žöÓý²¡þËO¸ AÝyœrÇL \…\úïÞå*¤þEÚ ÈzÊFœ–äuã›_äézk÷œOùm}±Eï²+eäµ/Øj9·³¬¢ÝœO&$͸ē޷âbÓo>ÉmÇ€¥1nç¾×þÔ~E<Õ}Q§D]0÷_Wó»†?Ç+ÖÓjÊÑðrnËõŽ:çêq(äÝ8 'îú:&+½í»ç¡´ñ*›˜ÇôaáÓ¿;¥ïbrÖÕ¿»}[íºr¹£&®B.þÕÍUHØ(Åh7„Z.åÊïýê¹_6ž´A9¶Ä¤0?wZý†Uý‚k]ž ’nÀ(>8ª õ Dc)É\&ÁR[ÌQóP4&0Úä’guhæ¹]±ªÆ4ï%ó´î '˜©Ô½¯Égý­1¦x ›e§/­¯Ãe™Úìr*ævO¼þíh›¯ÖUÝ–RÚJ9ºm7¸ò2îñ›9»¼à¸:WM­‹šÍUÍ1VÍ*1㣻²:‰\Š3Î' Wô›Rcš¾gŽ×)-W9Á݈°ÉQ…ö½œT0™ðïÇQÊ…Bp^Ž7׻´¤lbчGÿø¤<ö ·×®+—;j¡ìýúµ­BbCÐRvcÍê—‡XO,êk¬Þz%áZƆÏ:“ &¥L ZW^Š!g~øu×VÏrbM{Ĭޱ._ÚÜžb¹-µS.‹iyµ+漌¯¢‡pj½iƒ¶úš8³{yÔnަÍ6ß»éÿnMÚætÛx9÷»å¾Ñ6´}¿m?žÛž…îºb•Ÿ0Fe‹gbñŒÄ-W%cyŠ¡(·¶woíË„¢˜÷)õÍpÚ4´Þå´öÕã2çâ œ@ø|c't÷—ÞÆ>¥x %ç‚ÈßPºÉ¹#Þ19ëê?عív]¹Üqˆ¬BþÚ—;>D¾ ”îA lúJÞ¥XÝ@eÃR;oÓÓv Ý}•gq,-11q‚pŸãÎc)+T³6œƒ D æó˜öÚU:kv§ïŸqPóM.Kù6x5·«r5®·™Klé %0ï_Îõ–ž©´—úbêíÔºû„¾n¾ÌÓz'G7í䫼ŸÇ÷óú㛺)^œ¥,@:Ç4¶&ø¥>f©geñeûžcxË6ØÖ¾¨¯±¥O£rôn]™lcE“y¬H Ñ8åÇË~,>‡Åy]m”Ö§«<ÞnýÅ„rì¸N(wAé ^””°½ÝMìÈîHw]}йnO¹ã&Ê•¦«ÊæÆqøÁrUwciÿS¤Í13HßãE‚Ž»ªßñå‚•Ú¯~"—ªÜʽbðË—É”Ð݆Os“ÓéWªë§÷eeå¸7c•çy¬MœÕË}Ry9.µ_±¬ö7Êñݼł'8ËÚ^Ûïêgéï)aª Šz·íÊ.ÔC}†¥v\ËÑÏþxÿkN/ ¥ L8ë”jcá.,©³9ÍW>^32æªDny²Í —KïSàÆCäæÙS\Ù‡bq˜&žõ¦MJ7Îê’»ånÆ™ú¡œÌGåî`õpÊ»îÑIÅóP"§–Ïõèÿ|\û=Ft»Ê9prᯧUHý ôo]ìÊwŸ,+îÆ"§ò"–õl/./ót ½á¥/o,öÓ3A2Ï”ˆû„‡xñ¨×$¿?T*påc,ïêÊŠà•cõÔ·ÖÏ–Ê«}HZy,-“Kr[;ôYŽn{ŠÁÚМ-7·Ó`^vûд—|‡áÉ'XÃ˸Ƽ£/ç²2|=9Àžú»w÷+nÃDkŸÛx]‚ÀFÉ9Ãy[“ö˜Æö‘í²{Ï®ÆneO)ŠQ£N¶Çr%:W'~Á¢Çå\Ç5V¥ÁôúÕ⬬/Å(ZÝ8Šsøw9~b$»¾XrÅÂIElôáÁmé®+¬Bng¹#' W!Ó?¸¾UÈôõ呵¬«_70 Kçù™gWÍÏó@ºâÊŸó.±ºáBÉy«J‘V¿êÓë<¼Ä<ðá…6cy½ºæ5qãžêIO‘z/¢¾XHŽÉœ(-7Õ¸5OÃoym[ê,ûÄNqÐÍÜ)ÖðZ϶)ÅyW¥3ên·< ÊÌ«>1µ—94žÿ£®K lL‚ñ RÅK]…X ø[˜D&»“²}tÒ䬦k0ã 6×is"ÙÞå)¸œLrŒòœ/eêkÎÝ–ý˜”ÔŽöÛ¸ìk9Ú÷ŒE~}Î:&•ãú|õûîÛ*_ú_ïÜÖ»®\îØ „«óiB‰ JKJl,µy<ãòSi7–ºaOmÁ0°ëtßèà‡³ÚVrԜׂ3û"Þ‹ñcœ/.´œ5ë‚Y¼ùÝža5&ÛõKß*^´d½áDþÍ”Àº­oöEêæ›b¾\šÏ¹9–ÑŸMN¿Ïú$ñ¦•g¾ \}9—öÍüÕîÄ›¯© Kñ†[yš£úEëŽg_n+—>™Èé½rß,Ô… waaRa}‚Á‰øáëæq¼þ퓯‹íӕɱ»y¦EÛ«1Æ×¼Š»Ý´•ð«Ç±ÔzK}r¾s³ÍJg¸×?ùàVù·Û‘G×~ì­ò1ÔxPÛ»ÝäŽ@(—cs¢C.)]lT®|ç‰t©{鸩ÇoÄU_ÛNË¹š¯—ºq¿—™g¥(b´nmÒ‡àµþÞ6S[ŽUL–u +ÞöDóard§·-HòŠÅ}Ñ–¶AÑz}OÆ1'N(Žéß™âüœƒâ9 Â;¶½à{™ly‡åvEëãñ¨|þ3“rïÝzlGþ,ä5çŠò³`uò€N(Ô“'¾e䎞@(\…<{ «Ûx¹»éÒÓß4<ó‘•vCÁrù‚HW¬Æä 'šÇJçq•¡…ãÚ†¬,šèàÊÁsF×ú”¿|jçvZ_‹£î9jÝJHŬôܳX÷wyÑVâå>ô´µÉkÛ¨ïËF[´-_në0_ïïCµE)fçÜÆSnäñoø!s±-¾?w`nSÜïÜÜ^¢Îc TÆs—<œHxºïwcÙé¼þ>=Ž1ù{²¨±”ûœL*¥<ôðHž™~3_CrÇO K®BþFû¼¾56„°/ÿþ“e™nñqºqy%¯HŸÉtõQÄ®_ʨ̮\0¿bbÛµâÂaŽÍ+ÐýƉê÷¶Ú8Ï[cÜg¸çËXàÄ:ù*îuo·ãwxƼ9òP8fš9Qoykõ/lõEÅ펯ÓM^çïXq³¥NVªC¥Þé_Žoy‡üÍ©miI´b¬¥œl+cOA+(wcçÊḑÚ±çK)9".&Å7ø†I•jçÒpç³ä$Æ+Ëyð}²“v¯AjYÿ9>8žK°ÚFË Ž—P©lr|×W!"ùoñü§R±C¹jsù¹Ÿ•?óg ¼‰äö?Màd|÷ɲû_àgˆÏƒ®”ªnKi±ø”?l1›qÄrŽÑî‘ÄQ¾äbi¸`ò}H9!‚‹¶mUœÿ‰©<áD=Ú xkÓëýÎþˆõ÷£þ'v›ãõ N¦Ù•ój1êSLØ•kZã5¦‹z.½i °ó”cíóŸÔ7ãr[Þ>•CsÞŽhsRA[r*ÏckÈÅD3Ý_b"YHŒ·ã¹µO§±’¦s4_ÎïöZnzå⢼‰‰äÌ›órñwó2§dM¯*Ýy="aÊ!æýðRõG>:.'ïÆP Ûq—nÛ §ò”ÓÇ=r´”/}IW!7£ d|V!?öˆ}hºq4tÿ UFc,Ñ«”nt¾8GÄóð¡<,EcƒtŽíoֺ嵜í)ù<¶ñ%ŒC¹¢Á LùÊU_ÄF½bz`ÈeüŠÁTN´•ý9VߟúÝwÏótyÎῊÁ­ÓXñâ#GìJj[ë‘o“øfJZ×¾tymÝs¥v,^1ï‡c›â Ùï¸p˜ ©¹Àrµ* [ä|’‹I%Ÿâ«õJ'’ËœHd:Ò|‰'\Ö)§9Ù'ÕÀig¼”ÙtY._ÐÉäìéE¹ŒUŠíÙ5n›Ï±¦íäS\ëÁÏåºð&Å?ö£±ô°,â‹<Æ71¤}•KDîâûïë äf•a19þó™àaƒªbÛ÷=€J1å"Ö8žokgubm>F'ÇÂg6 µ™Û|sÛ}ÌÇ/*ԸīO4ð.'0æ‹þvy™“ýï¶•ã\s¬HªÊ3uŽö<ÀKŽÇGLÎ<ÃQ4œn]Úq»‹Kë›>féôÃ9^WL9ÊÍñ™“yê«y¬ÌJñ¸ÀÕÎõŒ#Bþé°o>+‰Éj+×\Þ–×ÕÇIgº·(û—çe‰$ÇHv«»†?Þ“‹ôFâ9v°¿’][§^™ÊdråŠ¶ÕæC ‘ó+Gý™Ë¿AbË.«Ï>Ä‹ Qñ¾Q!ÁJvåX>ãf‘6€9º.¿ø‹£òðÃ=¤›H† ĤwbÒn Zslûäý¶10ÆâLkœm8£ËïJ\µÆ˜zŒäŒu_ID ‡ÿ„ã ’h`"5FU9)y¢-O¸Ã9ŠI)<¼$•8ö>Ååø°½Ì%þà8/úÀ2p·µ®±šÇpF4s^§-ÉŸp‹×¸CbR)’yRnå‰í¹4_ðïSÅñ~ŽaÜW1–(8aè?ü•.»ôرèG›ƒ}T{‰¥Á¬H8‘è‰!-WùÍû"¢ÍUyò/ÕÍOî>&“óoÏËk/ÍÊÛ˜Lö.û)ïêWùÞŽdª¯Â£Y¹Ôµîºº‹`+žÓ¹ÌKÑW•jgK“ÇþÂVyäs ¸Ie˜@’œø“UHþ`mãR;ù&“2©“Hl ϘˆÛÚÅš´ò„%1yÒ›û 9G`ªZç C¢ ó¼ú¯Û‡ˆSºE0—ãÌj¶ò"_`®Âî`çº*¹%Çay¨ê×|m.‰³÷àXø²m9È6Ÿû[Ûsi¾ì‹~Dœæs¼ãÛ°£<É q^pƒ'œäLþ^V·øày\â$Ìb´®\kñÈ¥1˜>Pê¶W¹˜=æ³…L&Ѫ´¢mAg^ž=x°ç»¶ô‰¶ç-5Îû@M~ñ™m±5ÎøÂì­Ê¹·—åUL&\¡L§ô©×9‘;råüÄï:>*ŸþÑØ%]y"ž¯flòdnÃá ðGnT¾ðy#Üä2L Idòi[…ØoHþÐ)““÷ ¢¸ù£Ýø€Ëyôü“+G^…K6&ØÀtÎuán꘨åñ߉†K¬s˜¥Á,ù#—sÜœPkO4ð¾8źœàI‰ªûÝîæ’Éx/q©Þð2§ú¡Âïð˜¤ò—ã´m÷9–âPTži—¹”\ŽÇG‹2Ú¨˜›<ªçjÛR‡È–E¥œ:.¯õ±½†'uír 7íæ‚ÕËÓ6TknS¼Ö©'_¨rzyÌP1ç´<åzûÔovæx|'0ãIÿ»<ÏÑõ¥1N <¦‘ûí1<ûŠ»´¸«Êñȧ|Á ŠY\ݵ…‰ñ"ÆuŽÖ­'7¬rÂGqÎÃxç^º´*§ß\”S¯-ÊyL& L‚Ê“Vì]kùñûÇåÞ»0tZ{9oW¤—Æñ¶„K§‰Û|vT¾ø§o­!y˜@:"«‡±š~´ùÃv±ÍW?I¶ï{Ð6 â| &Ê5&^Å«¶nÔî·8[ÄÆ¦¼•ìªò<¦¾ 0qN9*_ÔÛ¶»>±-§r ¯ù•ï¾Ú÷„;'k`š¯áÁTÛÚU,âœ×¶%­»]qÍïõ¬£mH.‹¯>É/h͹4&÷ÌÜ–çèööa<æhyÚõ‡¯áØ{e5ù*‡6ŠÈù¼t\þž}ªÃí¬æ‚ÍI„ÖF>(Oõ]r5ÒàÆe´Ù®ÂaN àÍY[•Óö…|Í›rA4‹Yɯó¿b(Ë5&“¥L$œP.ž_ ¦~Ýuåg]1‹Kµ;ù\6¸ÆqÊ/þ;ã[îÉ…ÃÒ#wc¢lÖø°3îØä®{ꆱKLãx„~çä’:ò]\Òž·™yþ…ñRq®=ªŸ*_1áKތӶúŸæWU|#Ÿù$Ã'0µ#_—‡WÔ#Ÿ ɯªï'µÉQméMƒçöšvˆ¡p|Ãg89†{Å1Ö“-jþoÛ¢*g³”ˆsn‡cÚå GþÚïÌÙxO€·¸ä£„Ï.)éƒÊ³hr>¨—œ`æÓ…îqñ~ ƒnÆrE²Ò‰“‘û˜¡öϸ‚5xôEã¬=R;xÃðuz°–ëJt2áîµUùôǹë*ífÞˆÓ’’Ûi¸ÆqæÉ{FåKñÖ›<(ÃÒ#\…±Uˆo±Yd;¬É=ÝÝXðÙ†)1˜<•·Ö+%…6>ÖÝç~öCú’0þîcN-ñÏpå°®ZsT%¦šqåI¦£¹ZN\ JÂ+‡R±ÔÕg}Øè·ûi{¬ÅW<ñ`:¯¶cv䉖¹7}Yƒ—ë£qÀGs©ªÏãÜnsõ×kI1{“§í´Xàâœc#¦/®Çf¼ý£ð•ƒ½ØÂÓ\õýB¹’XÈãŠ{>ÏéýjÛR®L${˲e‰Ûå9æx.+¦ÚÑ¿ÊЯuõyÜÁëý½uyþ;óòì3órú”ŸÉ%EºmyN²ôÕ¸É/ þʼnL"·¢ È!r÷ŸxçUˆû¹Yð*óûL6Lˆm.RŠMܤ×<æÕ8b¡õzæÉä!>r6÷GGÏÁ2ò°õÈqÕo*Ò`¸á™Ï•õˆkqíãh3¥Ö%ºá…vÛV¿¯‹‡-÷#JuÚ^§´xäsLmǵîwŽbÁic3g“—U$ùsŽÀºÄÎÝv«MÉuã·ý°üÀuwVÊGÔlrxGiÛ;E&9©¨F[Ž+æ8'N"œL–’CZ`¤q K±åºÛVò_ÂÝçõÝíRî?>ι3Ëò‡ÏÍË¿þÆAyŽ“ V'Ö‘°Û|5/ W¿øoMʃÐqkÊ0"}«,y#ñ c|".Õ G7ʼñˆÊqÅóFª˜¡­*õÔ•_SÝmÅ_t>qýBX ÞVÍ/9-qQÏeî“`ÌPýžKóÛŒóz¨ÇºŠlø½L<Ã[|=ïImë¾Mûj>µ=—æó˜ú7~tcŒSã”Óå)¦9úxÒ²qj{æ¯bŸ1Ø”Šµ«È nc[[0«öÚÖ¿•‡­‘ÎaR´ïkz¹áqŽG›<ò›¯–ñ˜Hx?,N$>yœÇF>ÆJtÔ+uÉ«˜«æS{´µ.Ãä1Fé>/Ͼ½*?xnÉdV^x~Q.\Ðï¢øAsq[J‰_—Ç~aRùì­=ÈUäžÿE» Q[7)!y#Ù¾‡÷ÆŠ ´çåÖÎ Õž>÷ãEJó\ÊuåäÁ%´Æð¬«àz.æÕØÈ•ÚJùÌnŒÇæ<Å•“qÚ8ÀÎqŽ%–óGÝ8ü—qjo扎[*…äzØmÌa>Çgx7NÕúÙó>º¼nžœ ¯¨'ó"v³ïÛ© ¯ÍÓÚžË8í+«‰ˆá1N-MNJªóL'¹ø°ÇÑßÄ8–c‚‹p"Ò‰dc"-ÿŒéq«ó𝯉:¾.wÙ*Ƕ1Ù’ãKÉ:^É{ãµeyæéEùW˜L~øü“ ó9WmøâÏOÊ~:Ý}ñ•a¹Š¶ q«n¶Á&“²cgc9³ Ë­m?N_䑳°4V78õÇUèºòà«æ€ÓpóX·½ž1·»XÔ5ŸÔ;G1ÕÍ8ÇÕ¹œ—ü)gæi.ÏÑŸ§ÛŽs”§¸úÃ'%ÅìÖ׉ixŠw}—û¸jÄõÅ^…'Xæ¨VÂTSõÜ9ÖíÀ,—Ä Wã>¨ù‚—â Mn®DÌç8W"ur°Ìí“Ç-y6Ó Ö¶/êšWâê{VŒ%wmÅDÒãù]ñài{É!{w2*÷㮫ðYyí‹!þÆ«ËòûOÏËï<9ÇÊ„àƒÿè—?ƒ ävay9ùècºq˜êÆ"›DK¯Q¶ï¾¯¶±˜ø†ãéÖ®H¯>𫲮JŸÆ¨ÒÇÉC'Ãh{œðñÂXSÉ9¬^1Úü'¹˜Û0ÑÇ«àÊI>ÃÝç±¹ÿ×åÁ†h.Å3O±Ô‡ŠÎ9&ÛìÇÐnâÄàm[g>k+bÜ––Œ—üD3§‡§}2ŽðWëÎñ¸6Öm©S2ÆžËTsÑö\›þÀY§8'‹ cdá.-`õ½$•\ž*;ÇD毂å¶$Nìð±îIìÚŠ˜ˆËù5ÞëÑÎZWr×KáAäUxª!žÛ@ÁÖåõWWå÷¾½(OAÇËR¾ðGoý•‡Ë0¼ƒÈ*ä¡öºŠo(¡º¡NÀ¯‘©û“gL×鞯@ØVŠaË:qÄíd1NΓóù—¡ÉÕãÏy‚ׯE©¸ÆucÔŸsâµå¥ºÆlæSÜ|Œ0ŸhocÚ¸V¯Ö–úËíx 1X½>Ո͸çîr¥ÎŒ†µo'å‚[s+žãrév7¬êžçR__\õAúâjŒý£íƒ¶òèSŒwãõšÇbk.nÏú¬¹ø¶Šæõ\"ã}ð|š[sù®-ž¼db‰ÞŒ‰8Úô‡»®Žîè÷ñÐÉI¬?w®ËN„ƒRþú5+û«³òÛO,0ÁÀw ËÿDÂw#‹ËçË©¯Ù³Ó±5èŒ[7J‹]~å¹2=wJêþt1–bƒÈòàÜ›e9oŸfèy¬­ñTчùžkÏ:}®MîàK]¸VºJ=bœçÜ&¶bŠwóUŽkõmæÈ\ÿz]0– b¶ðËwžÛ µõ6¾ëS;ᆵõGž°3_TÚÛl'b7sU¿¼Á„CkÝÚñzð ¹ xŽ ŽújÎÆ×±=üøaÉãxøm*vía}¶º·Õ¶¯JaÉÇçnm[SíÓf_ˆy½â’;ÚÙÞÝ*“]®&œg>±•¹KÙ™l•Oݽƒ·D_´IÑ8)žu)QÏm‹5*'Žn•?ö““2‘ö£Ãç¢ösãòÓ_¸õ~ÏÈ»”3¿ñµ²ÿÒ³bëFel@ŠÍ/ž)—^|Æüð‰S9ŽÍ.Ÿ+sL¬«:ñ{—ô—lʿޘl<æØ6™G¿¡ž+6rm;óœ#i›/ChÚzËÍx~/úEÁK>á…ïðÜPû;ˆ¯bmÌ¡}\ákb¬oëý»H¾þ÷±ñwhêÆ»Z¨’ß|=}r͹)ý8JËÑ`,Þ͵-Wö7vn ƒ£¶‡’«l|¯ùˆqqžÆRÜ'áãm ú2é .¹¬_VWñÚ¾âœH¶1‘ð¦¥Óæâü÷£'¶Ë1´íqôQ¼ÏbKiq EŠñPácnù¸Û»ŽE¬Çh¼ÇL&cL&£ò3·Èd2L ïRæoŸ*§þ_©Å?ô.¶^.ʹgŸ”R9ºáTŒÅt¿\Ôg¤«°m쳃Kem« N$óÕ¼¬Ü?¬mÈi’ð|’»ù¢¸BêoXåY_Ý׉wLëÊ͘skŒô§ÍÑm«/¾új[mŽA᪼Ԏ+p­«/êªÕ×Á«ÏÚs_`–/ùÄ6_Ž ÎfšX·A|G^êÃa¾°“O´õåx©{ûÔÔñuíÜG^>;Ýbdq^.eÝÉ]9Ö¾û8laE\ŠÛªÍvbvæWž•2‘ì`Eä“^Ò{1Á|ìøÄêæïæ€4ý§®<<~êÇ&å£÷b2§âîos§¨ÍI䳟Û*Ÿ{Ĺ7Ÿ È5ÈéþîV!´¹ëÀwcÕ#JþÙ÷μ¢6±º1L W0èAÀ'€¼‹BÿŠg¬xœäÔ64—âS.J8‚¸hmßKíSÃëÖaÕ˜¦}ó%,çWÞÅð²mö6x}xßûíkÒ‡oæ$ÑíŒ÷øšØN?:y78ð ÖË£‚ëœF)(³¯Ú‘ß9ÕÎ8yÙgö&·Ãsœ²Ç ä­yª1ÕÖ‰Á뎉-o$ã”-¬F8à3&òˆ€ò C»j·í©M1 <ßµ¥I);èw]q.Ìqè9”«ï3óÓ:8õSŸÞÆä¡ïS%xRTÜìÚŽ–*£ò³ŽÊç°2yè&{ÀÔ0\ƒÌξûUÈŒ»±^zFëi£rKN œ$êN8XíL÷Êb1+ËÕBwe‘â+9G“ˆ0-fcC6m6R­op ÷>e_îWÔ5ŸÔÝwH|÷}/ãпJßÏpÃ\ãI½Ûµb‰gxð¬-¯çà§ë2Fsx]c!C‰vÔèÔQò‘BŸÿ¨|þó£òàƒß@&k®Bö^nW!±1¤öÙg~ «…¼Kq–ÄξQ– ¬0ßH&ÙìŠN.ÄPÈ…YòMb]ÔÙÐ4Ö•â_&©›yÕfÚ_Ç"_Û=80q%l3§ãËžœx ;áݶ‹—?g®Cû¸ÚÏÃúDIXR:ÅNùºœn6ryl§MLòuóÇߘ„„[YíÆ—ÚÉxj§b‡øjNûQÜ}r֡؈/û嘈üäL¹,[¾äw¼ÃSaÕï>ñ[¿2æqµ¿–R9ÀŽÆåGNn—{îåî+õUžõMÅbÜÞÈWʧ0q|æ“ò¬ÛŠWI}¤4yű‰3 à „É£ tCÄ?íAÞ¥Üó?û¢”úaª„ÝZ;ÉñíÁdk‡W·Ãìùz*§ì:&83Ò¦•òù¶ë<ÚÊk1·Óª)®Qí›pàn9ŠS6b¤¯š—ÚÍí¶¼op7xDÝöv:ùÔ>Ä×Ä+OÚªuõuë‘«Í'˜ô3rD¬åNï£õS=6â79P@‘+òuÛÒ²—z“L¯±«Ïó™oWŸ·¥yZŸû+O·Ô¨›O·ßÈÇR[4W×üQd˜ÆY0ŸsͦísØÅ\û—0ÓèoOÿ!Û[£rÙå‹Kyô-Ÿ "±ÌÉWÚŠöÏrZýSŒåSÑ6IÂÑ\ªší8Kf>,æ¿ÂàÉ0\£pR8ÆëBäÃô)?Xÿ€YâcÞ>n·xOâ.yzg^åSùÌÙ+¹ÖÃòHÉ/ ¿6 ‰*9K¿°*§ò’íý›b¶û`ÁŽ÷¤8KËo¾ð³n>FÞp ˜V3OÿžÞ–ùP¨í89$[œóªÝò"¾Ã£§r.xçy-wR‘SŽ`(„ãõª‘Ï1çö>‚gqü'uÕðwmÏeùÜ'ñîcÍpñî«þo˜Ô•'„qRJWÅåÚþü–Œ6ñxÃ=†Ê‹gr+ ~؇º‰û\¹ø¹‹§ 3lêåK+yR!'’Èe1‹öÜG•GÝ~"®2KÄqë}8ÅÛHâ1?\Ê/ýÒ¨œŒÛïÝ&ë{¾ «,õCOÌö=÷×çèFíðçä±WkîÒ¢ßñ¸‹q¾QµuWÔ)æ¯<ÁZžà•ƒM½íPÃE5f3.øngÌëŠi.o«Á‰ˆ¿õÃìZ‡ÙͱiÓß¶Uýµê‹ÜŽÑ1™“ñn}ÓvTQ‡Kp”Ñ~·ªjk¬cCa6õÊ|ŠÓvª»o3¦§>ƇOKËÇžÐo<û T¹‘K•wוC|V¯ù¥L1pWÿ8‰ÈT9Ãdò%FÕÛÓ\ër«äÓRãc"YD®Ä<:yülë£n%Þ8ú]šxÖµH1Šžb |fú—¾Äc6Z¿‘2L ×!¾ ©v*ë‡.².;¼µIÃㆠ¶<< %w[Í–û2yH~*À˜_W#ä³î‰ÕùOòY^F[½á‰*GÛWŸâäXŒÅwã7žÙ|ñº`\L´m+çéÃ[Žû=GŸyÑïŽæÕúq«8K`ügõW9(r=·ÕðDµ­&ÜÙï¸ær|³^qJ®‹F$p”R÷¸Cb²M›Ÿ½î˪æŠ:•'4X§Îã|úƒIc5û½o›ý[Ì×…ÏÉ}Nкë*ók q.'’W»+ú…UÊ‘ÝR~ú3˜<ì°‡ãçwqŠú}71>:*=vsL”a¹N9ùùX…ø,¥m¾ì؃¦èS^l´F“m›õ·}ÀkÄ‰Í Â02Qj¬ÇÀYFÎ6”8Årÿ\kÿ¡ä*d6ÕÕˆã`/Ç©gîrו̃¥åÆòÙ鯽´§§Ž1iüÌÙ–ÛžP$Zâ,Þ¤‹{;mG5Јყ~ñµUû $Ý<2L ×)² ùTgb}Þ&Çï)£íݺDÉüj¯dò`LÎ%_$¬>ô d|°<^Dðð1VëªÂ3¿pD#Nùîë‹‹zkoƨÏû@Í8K±8À™oŠ×˜œ?ìÈÓø,ŸÆ)§Ë8ã3n<޵¹6òñŸù[ŽãÑV7¶ÛOŠû3/r±®*~˜OËÇ2|mÛæc†Ws£^¶#Ÿã›¾ÀÜæ n|×\šÏc¨Œáé¼îq”èTêxI<>ú–7UÌq#qLì&®@(Ú‡è‡Ç‰j8küwöíeyý•EÙß[—Ÿüôv¹ë¸îMðŠ´C©¸"Öƒv(Þ·œK<õïl•/|>o&÷ ÷vW!öÁ«ÆÆ¸ë«Ù€ÕÇroq±¬÷,–˜nZ8î­{\Ä*ÞÚÁÙ|/a·¹*¯þ Ï1•“40Ë…-OsI>À£¥Åˆ*qëñR‡{“Ãz‡GŒ’9Ò¯ðW¼Æ©¯ÉͰjã…«]«7¹›zÊ×ÄÓ¾Z[ ŽÂ}RCŒ®®§æ¢_cò±ÜVŽÓØà°îØuµcù*?ì0òçéÃŒ³Í¨G{ôÑ›¹¼žwr°./>3/oâ"L‡‚(56ð$‡øxüKÿÞ¸<ò9sÜd2L ïA¸ 9ÎUˆÔüµÙ,Dvîå£nÛ …“ÇåÙÙ²–sàÛ “gceL2V?qæÒ|ôyœbî\ógeËu[c<Ÿû³OÚ³ʉÏ1ýÌq›)ßôAa:&8¥“/Ç)–Ú[âœßégĪ/¿_Q 9¿ ’¿ÃŸÛ›mKû ÿÜã:u˜5&ãÕvÛê÷möÁ|ö>ÄWû¸ ‚ÑrŽ+Šû-ާùJN¸„c<¯“'¹-‡s%wååd¢˜¶8By×h,ƒ_å‹b±¬y~Ç*×Ê“GGåž#[Xí”òüs‹ò»ONÛ‰„9Œ/1‚©tñ͘uyðÁQù¥ÿp\~ˆÀÍ)ÃòEV!¾!X¶n “£'Êx[zq³î¶Z–y'—ŒÚU9lGÛr,sËx_]mkGÊ./|m íïÆ¹ Wæåºò“/•ªmÄéúr|åõØä÷õ]yŽk¾KLc6Õc Çkn‚^ޝk„«Źëjg+­¾ ëï'çõú½G·Ê'ôASŽM§k™H¾óíiÿsÒ×%pk“uÈßÂäñ—&åä=‰|Ê0¼GÙ¹«O¶Ï ±M½Lç†9[”Kó³øRÈža|Ø@&þÄ3>ícž64L(kþú"16jWÅÚ]ãèIv—ñºbžQ gŽÀ“ Ć5ᨯo㲯kk=Úà..uÀ§>õ+^µáNOÓŽù•“òQ*ÎÒc:qçxÃñºµ}užúëû­8”ï*Å×8ˆ×\lFE®V5Wþ[d_íƒåW{3¦›Ûëü5V¢íœOsFlæ±ä1æ¢87s´®íx>÷qò˜Í°úX–rb‹ß7Æ«z®ú~`æ|‚•z‘UÇ}Çív'Ê1ÿå+kyNúÓßž—·8‘sñÏåHÆýÙqùÒ_ܾiδºš Èû \…ÈÆÐQŸqáWÏý?*Ë/ÌÞ— [qÚ ×rî&5o{¢«šŠªæÓ ÚñÜ^Ô5‡çq¼á0£pº~Ç5¶ _ÓÇ;Ì—mÏÕ—/ðª€É ^šzØ›8£Û|ÂLÕc".|R'»á´qî“’b¶kæU­¼Í\ÚžµÏšãÆ9¬žÿ®"Ä­ÔÏÆýæ«~‹5\8‡ÄdÛâƒçy¨Ê‰ãÁœ3qÔ¹t‘iDð~N`­»®¶JÙ»l½…›êÜܶÚm;,w·Gå£|J¡ä4Dò°t.Š+˜Hþ°N$ü^Ó§LDK™óSû… t|KL”ayd7­B|è„Ö|´(ç–g°ñ늢nhPÞ ”;®øu‰DÉ€u£3Íþœ#óäŸù²_ÕóX.¨ò£8 nŒæ¼mûp»©C¢È¼äó˜ê‹²öÉÞkææzå1ÙÆÑü®ŽELÄE 㻼¶Þ¯Þ>j ó8õå~(ÇbD#&ÇW›"vô{“çm´>ó¶ÜàWùçüÝv«O2°®œ~@)9CIuyÖ:3JÕÈãj~ù§¾8&0ùÒ²ÌæG¾÷‰â9j>öǣòÉ{&ek˸Éç6_½=Çø<ô<7׉ä”O$á§ð:’_ü·'ò¼ô[I† ä}’üÌá«ùj¿¼|é÷Ëê~VÈFí>XÐÕdK/"$æ>Z~0(ðœW•³æ‘:Ü}õ[®†g¸Øªçv«<]^nÇqUa«Ï¸î‹>€ã>²Ý6%šyŽ;/°h«b Žçp®k››â>É‘êʱÜž`,kûm[ʉ¶ºñ}öÕ|½»>¥âÔ6®¯½}‡äz׎٢·6*¦y{ûn>Å$Úêê§Ðdz³da¸ÇðŸÄ±.\õs ;ºÄ«qYì/Ë>´¶i|÷KÊ|œ4~än®y²n4º¡¤>[OaËæëÉfLÝ0¥®ªyœ—múœgÜj{lÄç™çáA*‡uÓà%nÂ¥Ã|-vÃkþ6¡<Ñ.ÇÛiÛ çWìzŸ:GyчM^Û‡6îxÀ•ƒâP^Å]7s´¸újnÓ¶ÞÆ Ž¢åi.Éi>Wb°Ôg܈£GqÁ ÎñÂ3\ãÈwU,ßúDòSÄö8æQ=–&Úlž¥ÅÕK÷Ki~ÚÜKúà‰IÙèwõké1¬WŸ”ßpQpEò}›Hfû¥üåÿh·<ò™[oò  Èû(ÝUÈÿ¸ò8X\á)»Ûå@¸‘ÎWÓ"g]ñ§ÅçíM”ç6ë´½¾©xEé<Ë•|ºQCYsã¬ÁÕçù ë <ìŒiÊÏýæos¯ùRãÌÇ“LøÈgJä&3ú°³Ú’]WêSuŸ( ý½U™èmƒä_â}ü®I9±«gKjfó™­uÆ0R¥Æ³âv§ÜÆpp ]ÿÿßYùîS<.zëÉð<÷Y^ú§_)Ós§Ê+×.?W.NßÖ[\¼uöl)íYèøÓÌ/Ë±Ž­Ù?‡¸œæ>ÚUñ*%îf062‰•ÍSëLM{W_7Fü=\Šcþ|ƒÍ:¥‹¹¶} ð7çˆzßµã)æj¾ãœà¥xjnËËŠ)w³T:»X‹»zÎ+x/Û⧸|¢^Üsk;mÛ=vÍA1Û0¯Ó©œ6ÞÛØèGm3Çñ÷ªóç?÷»z.nyÆj{†»MmŸµN•­õV¹kn7¨¢O’ò¹í9ŽÝ’’ØÇŽMʽGxÆ8àië‚=NGQ³»>)Q·xRyË÷ûщÜxÑý{pT~þ‹Ûå³Ü:¿ë‡ ä}N?ü§ÿeyõÒsåÂì nL¶ñ…5½ò²ØÓù^áS¹0la‘_^üE%'j¡ nxuÔPËðù†ØàæËvø•9a'¿Ö{ò Îò]ørÛô¹-xÄoúºvO[)GÅ ¯XµûyM*¼.^ë>4<ŠÙÖfæe—9¼ÞéCÃÛìCøÔ¿›ÝòÜwµ¿Kjëj} 6íµ9+§ëãä\rÐÒäO*uóÉ yøQ—XèqLÞ\ŽÚ¼e˜@Þgùö鯗Sä,Ýðb#¡ê†´8ºS«ƒŠËÆ8毞â¦lTî·Ø7›­§ñÑå6ñžû¥ä?o‡ìꋸìóXÅó©ëÚ~Ê—¯Õ—smð:uÇgt®‡ †"÷¡ò$Æq–£ï›Æ¹¿ò QÇ ±Z LÛéÿûI-qÛ\×øá¶Õi+Oµë 6—Ý­‰í3¿s¥Ôüâ3œº ½q[¬3ýÐÉöVùÈÇÆeÌ=‚[¼qê߃EÅ´~dg«üÔ§'åä]~¦ãä¿ÚVêHÜ_g®Ï=2*þ±ñ  a–ayŸäYNX}ˆ`]º\¶ŸøùàuKÑ êÊôí²?¿T޼uQ'âà¯ÖË2:8(£…n,>ðëºñGáx)¾¤©=ñ |º+îj9(-w“·éKù¼/•×ߥw;ü ‡Úô¡m;sã~Ålãk1‰|hà Õö(]Lñ.Öðè¯ÜäÛàRÏñ-OÛrÞÕð¨'_ƒwêI=®Ÿ§ù‚‡’“€ð(zZ¹î'nuÓü÷+#L2ÌAÜ9Œƒäöw[e±í±Œ?ÅíÈámpxÿˆLhXõ³”z)'cõ6&ŒåÿÈ£¢uÆÜulT~ú씣»áל&Àj.+ýoª²Yÿ,&’¿ðØÖM1‘ Èû 2yœÁäá´ýE'˜@F—®Ô „g\]žž‘f|eV¶/í×c¹œÉYX[s.Ø1-±áN]|c$Olhµ+ÎfÙvpZÌ.Vâq‡µC»ÉMI>–æ§3xÝáÛŒOq©Wå9ÆÒÛgý*}èý[tÞw‹QßüÊm÷à¯rµ‚÷Ä÷ò oxP¼´u–‡ÅW%êÙ߯®J19v\sný“_ðXq4ŸGž Ò{r?Ÿâ©˜½'χ’œ­ÕV9:ÃT°Š®¶Ò]ù½j;ˆƒur4)Ûœ¤ˆ×~ªMñú±ã[åž`¢‘¾Z?Œ'o…<Ø÷bÅñ3|J¡ mBä%rªÑ©K-U6ë?ó…Qùâoìsч ä=Êó—ž’•/¬Jlê² kü­ßl¹Z–óû¯ËmD°º8òÖññ´Ýåj.§îŽg+ÝPÈÃÒ®@T£6ÄðŠ5õˆuŽ­uÏÝËKuï‹×>oú`>¯{[^—Rc+žlõ³¤æídl³àµžKó9Ö×VθùR[‡ñ„–xÙñ³7rh|›3ÙÂGÁúa¼WnæU¿t$ðnŒóú9°¥/fÓEÛ°Ìó:wKå¾ù{ayd6)L"ïþÉ6¾<%áÃ÷`å±›&5ç±Zƒ£ èÃÉû&åÈ1ÍYãŒûÉMÊýˆ=]|t¨Ÿ¢¹hEŒºñ¯—òù8‘ð/6Èuʹé©ò;XyÈä!bªý2YÝ}¢¬ïºKì˳·e7•ÌÜxº¡Ü…—‡Î²Ý¬ìÖîäÛ6¹QWL V¿+ÜÊQ¿ãÁs\cs|·ž5çkyÌc>À‚£hcúÚJq¢ŽÎs\$qs^·Ø¦d'ލaÊñ\𝯙ÿ”ñ—ÛʾÀ¡Ö×ÏsÜ}Áíinå„ϱœ£ÚŒÊ«íh[mŵ=çGŒãqµn~ˆú,_­Ã°ÒmÏ]‰ËDx.NÝÔùb-gh)WÕóß=—]Ù=fqïm8Fq›;Þ>½,ÎñÄãÓýÌ'yš.&2^~b˜ˆ·iUÚM’sQèë­3—ÕŸzª”/y]ž}V U† ä:åÜìTùõ׿ª·(A¿äÃÛ+Ÿü‰²¿¸XfË=Tmã¦b˜ß•IEn°H Ÿ†®¼±Qò‡ ÿI]5oøRgLòÅ—7ðÀ4.øfSh£ÈqžOãÕïxø,Æ}ü—c •CŒÌŽO”bØF»‡ªñ¤MÅ4_ÛŽ·q ¦bä[.Tƒã¸ù’Fûá‹¶¼ê \íZ¯ñ̆gù( Ïpw_ø»¶r%Wƒg~éWë¸äSÛÓ8bZW•Ln×8”€èUŒ9•§9Ûz㳺œ•ê[0v—öÌ0éSmCŸRHUŸòŽãGÛL˜ê¾ÜÀÔ–:ŠKWåÍ7–rÆŸþŸÞ–ë<(’ϸ©ÓHñÝzÖ‰»têË:”÷Òzì±Qyøaq}¨2L ×!g1y|“Çtí§âv>iˆo{øp/n_±O7dýàGe~t§è-܃ŸGå@%FUêæ ŽùɬXâÑ`ÿ¼ž4cÃ6¼½MŸãM[>ÌWí;W›FñzŪ­íh?»œèCŸzž&®Ó÷à9ýö¸ìÛè{òQ²Ol‚b'^òW^µ£<÷5ñÓÍuÍã¾Ê¡TŸúÛÖŽ¨á³×Õz—#Ñ /lãj}¯m¢N¿©Çî.t(«9DÃïq‹¥ÞÿŠØ1L<]WüÌ“W³Ei›¿r ›ÍWå­S‹r7¾g?rÿ¸â!Ñ­E<¥©Ckºa"þ¾L~¨”¿ü—GåÑGu"ù°e˜@®Q./Ηß|óku·•¬<¤ […Ï5_”·.ÿ œý±ûÕï9mèЊûH¹A8.ˆ2üKà_Øð›vý}¼üejx(º_¸–g>éKŠ3>¬W_æQ™£Åk¦ÚšO58Ù§ý°8S¼*Þ·Yj¼Æh\—·™K9ŠÃ²:LÖŒ£¼¾¸l÷ôònx•cïױƗmŠØš'ÇÀj|ÞŽçèÆ¹/8Ž·q™ã±9¾æFÑbž‹üð©¾+¸ÆP¹+‹k÷m¬<Æp â9š|ã Ny¬±}°”ö&,ÇX q,+o²øð½“2½°.O{V._Ö= š­‰°.ïÇd£Î—„ÕXÔs®#GuÕñK¿tcÏÆ&kNÿ“Ç%L"ü ó¬ú‰Ë‡¬»³Îî½"®]Û)‹ã;æS­ÅrZ¦Ç¶mÃÐXŸ‡Ž:9M©þ¼QºÏyªžùû8ÊC½ÉÕñ™¶>­gŸçh}‘C¤âP©oæÓÒqoâ\»Ýp oc<—æsžÆE[Lcr¾l÷r`vyW³ûú<Ïo>ÓÃóE.;֢5ÅQŒï~Í?ª§˜]ýR¢Us;Ç5¸’ÇT|ã¾Ã§˜Äa2ØYØäQ¹–ƒn±5ÖsòÝéH,Õò,?ô$ªZõö?¶3*Ÿ<9‘g…°¾wy]¾ƒIäWyG ãÖ:DêP—:•uÃØÔ~xTþòÿ~\ý¹pƒd8 ë] 'ß:óxyùŠ©òO[þzaóŒ–{ósååsO):Ù›•û~ÿUár‚YÌÊbqÀ {*˜^D¸.“6äØâA?˯“•–b#§Û™#¾ŠçvëßañÔNŽßp¯ÖíÊWŸÇ+ÆxÊ‘c¥^ù×ÀcÝ}MŒæPžcV"°‹ÕzŽ©ù( ‡6<÷V¹â0;ãÔ”»úºñ†mðÜ•¢¸cQ7ŸcϘåïæíÄ»²Þþ ˆÚÈ›óQPv8zÜPñàÂFË#|O¶ÊÖ„¿…3OÛsÌó`ß½˜”‘æ+7O<>F3ž7âó{ à9÷S;eçˆòU¯¥ ã §mÐð:Eí#»£òØŸß*_øüÍó»˜@Þ…pòø&'=LéÃç±ý/h:oøÊùß+ó+ÁGyß3¯a"áMvÖåà€§ðÒ•£§eÌý²+üjo2ÇDÂG\ £^7bS©.uäpNÅX žx®uãÌ<³­¬v§}±ß×NÃózî+µ‰Oq=ý¨÷¡ÌùãeŽÔsá0Þû}9Fêbk¾ê÷2ùšüÀµn¾žv”(Õ«]ãG ËÑÏ{ç>äœ9>êÆc½Á¡)¶á5>Šq,¾rj‰Xòy ÛìÌqÛ¹o2—/êÃD€ €×ˆ„¿åzŽ»ÃkEX\ŽÙˆ¿zÄ®8ÅlÂ94^Û¨ ^ã7Ííç÷´É‹|Rw5ܱ¯Øfœô™+€NŸœCÉu)±‚8º¿-±ƒnÉÝxa9ÌO=†•Çâr;þ÷âJ‡W˜ÆŠuãýoÁÝ_=>)÷ìèÁKÍ¡ýSRÄVz÷=[ås”×…°î8…mh©bm¦O+œ”G>{sm&wNxù)­ÈÆÄ’-lÿË99»÷jyóò ³IETëy敲2ºâ½ÂÛô·˜åU_ÎíEŒð(ÆéÆWN§îù4&ñ¬¯9GøÛ˜&N>ûv}RRüjýu¼¯­äƒ¶×_úÖòðšòNTlŵŸ¸±ŠÛÆÓ\ʯ<–Ö7êd±U¶x C|GŸ<+°ÄYytµUv×ôagU¿öݱ+—WrÑ¡ø‡É•ÃòÉ„;šGû¤¥($ÇTŒJ å|QÊ>·(/<¿TÌ8çñ}<øÀ¨|éßÝ–•ÇÍts+¶™óÝôáÚª¾†·ÙV?ÏmP{pQùð“OÚg½Ó‡ÔEKÔ¼§.e´Ÿq·Åï˜ñ2ÇϺŠ|‰×É{d4–ã*Í­ýñ<¹Ü>²Uî=1ÁÊcǘKQÅc€U?¹”ȧ@ÔYý‘OŒË§|\üØVùâÏOÊ#Ÿ‘›gÝ22¬@:Â]V¿{QW\aÈ—G>{³Õ!¯*£r°¸\ÞÚ{A9#¡)wµš—éü’pöîÞ­«Ù…Èjk]fþà~*>ÝδUÇ5&|þ .ã]#9Ï}™94Ïa¾Œæ«JÕÕÀÕö>´ù²ßë®™£õÈ/â³3§¯ßŽ‹tb‘£©xª+Æm€ÛB‡38Tí‡û‚+5Øm[G;bwNËc©\O-GqXó˜Ü†ãs_äR;×S®·¿É‹¶tõ …»›kŒ•ÇÖFÂ\3Æ\[øñ5áµ¾’·Ã…ˆÍ2ÙžÃËíÙ¨ƒrGƒpèƒTÛñŒQ’ßGŽ„¼ùƪ\9³.ÿæŸÛ¾å&Ê0$yiÿÙò¯/|]nQâ—Š}Ú"6‘p#€½À¿×®|¯,y£Ä*6xÀR.&™Ù9,«õÆk” ;¦Þu׸‹ zäœ_$–Þ–t<û¢É?©;ÞÏãÈýáƒÂô/m7‡Çõù"^óv}¹.¥'ŸðÌ×íg7Vã"¶áˆ¶QÀWãäÖ¿âÚ¦0«/Ç–ñˆË9ER9#.ႱlsUsL9#,¶g[üU®pŒ´ry_¬£s Æ(y›É©19޳CµÕdy÷os²Uö¯¬Êé7犛O-³=NpµEÍÌ5áÔÇGåýä¤ÜwbTþû¿>+ßüÍé·” ˆÉÛóSå篷(ñ-¢~ø¢À†¨q+ƒ…ÝëÊyw>±ÅjZfäHŒb{wï”V!z'^ýR,|+tÅo[-!úåÐ/ˆ¤u®«ðøÏò EµE™C5â#*U"n§RVg¢­/lïGÛÎa¾àXÿòû lð¨ð ÏëÆCá|}ŸÊÉþs>ä&šÌÃßg‹|Pœ¸ÛRªÏ•oñLÇ bÓé“wØ@‚/5ˆÛþ÷qÌTãçM?û©±Lwañ<ßüÆ¢üÕ¯Ìnúç gŽ@8yüÚ½³n|úþ¹«%D¶ŠR.MO—W.ý~ë7_Ýr€íï¿Uæ3}¼mݪ€óÂû^ঈ øÑ+ó2™­ðÁŒä٠ؾAåF¦ùÜÎûQ_Ås½'p­w|×r£.6»Übª”9¦òúÛ ŒbõN|æTܱNÅ6ÛÒ˜îZýJq\ëý¾ÍøÍ>TÛ|9¦ËÓúUxIñ6Ëž>(/ÙæÛlÓìÔV`v*ÎzÊW1çX\Âr¼ØÜÙ?Æjb{ŠQ7säÁOÆZ Ê#àÉó@*¥>TJqÇĶXÚœvîMÊXáS.9Ûøwß4âøæÈ¥-1ü¯uÚ³,åÞ[å³aâ8†6j¬•5¶”_xlRþø£7ÿ.­;~riy¾üúÙ¸9bý@åóÔÝUEý¼QâkWžUŸ~ö(Á·å€,–XF_2ýÊa¹wŒÇ=cØRWÞºTç*D¸ê«6¥ï—œàÎCÍÔ9Ák}îßäeŸ¶'1†‡z¾ÀÄæ?‹s,s"Ný¢ TŠ^Žio.i³õkì!}@µÖ«m¹,f3.ùjLÆÛ¸>_àjwy¹í«ò6ÞoÛÎfíÔ}œêÕ|ÎÉxî«ã"Ó×—†‡O•?¤&sSÊ¡ ‡£/KT%rÞTQØ ®|®B¸‘>ªyL'øÞ'ωï¢úüûZÊl¶.o¾±°çŠ(&mÓFAÌÅ8ôùªãóŸÛ.'Ž!§ù]jŸL~ãëËò·¾:/>,ݤrG¯@8iüýÓ_‘IDÄ?AüEš³¯*ŸðËXyp"ˆl%‰S·†Q¹²÷šÜó*cÎY\”UÈGß8Ð_9ÀÆóE9Æ»yâcc£÷{öèdf6cÝNŠ—°Y"gÔ“¯ÁÃö_ZOù*&8mõ5ñ¬Kn‹ëæsœõÔ‡êO|r»œÊóÒúWcŒ¯õͶ"÷fŒ`–/ûƒ×iË/ÉN¸”WóeÜx°_²Õ§¼.®Øf[ /áÞžøûÚ^ÊGí‹u­9ÌgÜ.G±6oàZfœæÎþ¶^0Øå‰ŸßR­óèÛ<î!u´A¿óPº½½ËɨͳƒÕ̽£mAkßS)p¸¹ÿÁí²-R4ä çÀªã.¬:>©‡¶ ÉyŰRb!V?rd„ÕȸüÌnÎßúwì „“Ç?<ûÕrqe“‡"ú!ªÚJ1ÊÛ¯–K³ÓRW¿ó­´_-ó徨Æ î^/²š—½ãã2Ýåm¥™¿’ð‰ø5!\0Lìž_k÷_[­vøˆSúxQ'×5ðìËm¸ôÍ|¨E~SŒqªm<áJ½å/qÜ'<˜ñ^ÃGñ<®9FÚ¢Jß[Íe¾'êmµ1G å]ñª¯å·å8Þô~Ã*Þ¶×-£?Áq¿ã-›ÅNL.U{ú™ü9&÷aŒ•@mÆX.û\x;wªúË9%&K>øIê†ñR'·&rìÃ9®µÏ0)‚AøL*9˜Ò¯q,k[†éªc"ÏEçsá˜Ô6\,FrQÌ·ßžÿèñeùg_çÉ57ŸÜ‘+NÿâÂãåŃþ;ër»Q±O•bœÙrZ~xá[rQ`øYv¸P®>–¾ú¨›@f{H¶/øÑËËòÑSÓ2Z®D·úèþR®á*„“y2ù0‡ØLÛâM¶·•ñ*uÛºó6ñ¨§Ü ÞS'Ùê}}Pl3_ð:·‘b»œn--WŠïú¢žxgxÄï´s(/ûº1¨«ÝÏÓzêCƒ›ÝÉIq¼r\Kù*æœÍ¶ÔG ̵å½C? ÷|ÙDz`BàêCl‰§˜ßó¡Ü^ŒËÑåÄrY÷'›¥Ä£ä1ŒÉÎV9VÆrÌÃqå1KÇN±Z*N½ï£ú\t÷Q{<ðèŽáúš¼*9Ÿ–M]òj¯Jÿ÷¾4.=ìÜ/wÜ „§èþ˜<^˜êñ‹øà(öa¡àF¿ªâz܃W›óÌ)ó§U… ¹#¬<®”&*ÉU9PI…«Ç÷ŽocÂå°þ:ZNF²¡Â-ªyЊüÂR^à=<ÉÕá­ªå³v#‡Çvñði? ³¼-/×[nË‘h)+'ù¢½NDìNlæx[ŠE.áA"ÆslæÁ«á=}¨uû\ omÍ}X« 3÷øÕr¸6<˜Z÷<}¹¨ýùº±5…ú,4âÚ¼™WëÌ`|÷»¹'rÖUpÜOqÞ«“í9¾+q=OVçzYéŽbus·=í5<5µÍCJ í3§—ú)ú ct›ÏDÿ7ñÉCEóZݸŒïæËuŠð¬Îã!ó««òë7Ñj䎛@þÕ¥¯—1y¨p·‰¶”Ї¨MüÌÁ«åòò|ý@[óè„@ît~AJ¯û† uÞu+˜Œ_¸wW˜RǧÂI„éýK)_¢ÄWŸÙ‚GôžèÕxÞVÄ'bš8HËSLëÞ–××\ðªq¢Ä4.㜪­ï0žÖï*­×ºsúòçØn.ò»þj£’ñêSlï_[@Û:Tê5Þ0áÒgzS;ïœîûUÌbkLäu •[Ìí ^'WæÑ·Å yu••›l^ë±3Óá‹O¤ï–9FXÈ «›ã¡ýPíƒóí³Kœì—Ź·WåÒ¥•ëøÙŸÚg¢OÚ¥ôÔ)žßë­Â: ê“O¬Ëý•Uyó”xn¨ÜQÈÿxññòìþSöAèÆ¡Ò~RþAùàO¹‚‰ãíé+VÛäè䡨 «9öaAžXX_­¦ŠÑgØ–Á³T„¿.X™Ã§ÇDˆ)®¶¶È²ÅUžp6yxÝð š8Ž{_½žó7s€¥¾ŠZ>ÆlôÁ89¾r<޲Á£ÝŸK5òôǤ8HÄ9Ïl:¥~âEÎh§Å5æpŸÆz|×'uŠ9GólðD=WÂ`vû¸ÙÐ6O`ïÄkê0£Ô./|RÂÁÓv+‡’øŽíèCx°8‰°ôº”äJ©¹ù _¯qîÛžŽ%×Éi®>‡G‚R¼¬T¨Vw®ÆaRx×r\&(S?oœÈ›/nô¦ó\Ã9øHÛ‡ï—Ý*¯¼´(Ï<­W­‹W•¶(¤öÓˆæ51îÕcU¾ñ N$ërÞÏú厘@¾³ÿDùæå¯ÛzþÝÖ²å¼uðB9X]†Ïñð»-ñø?_\¶3¯Ç&Ê«Lµi÷ÃQöŽŽËl[ó`sÆ*q[ºq Òó…ëÖ¯ö…n|ˆ Þ†—µÛN—'~É«¸rrœcmî†cí{¬û+_ò;î¹4_æyÂg\þ;,ž’ê•'ýëòU&pºø/wÍ'ìì{˜|œxö¯Ø´{b‰e¾s¶¶FåÁãòÉ{&eÂç‡#ïÂù&ûh±.[¶ç¡Ïê׫«-?l¹íÏÂzÚ&ÙýÓ¡äOÃì>ÎÅùéòÒåï¢b8T¯±xÿQòOy™g^­f¶ý“~áÌ.•õ“ˆøŸìá˳.G°¬¾ïÌËøecž9r°ÒýÁŒe.¨LNM~·ßïç±TîϸJÔ[NÄkbQ“÷ž±†×ßÏŠ¹]} H¸•}yšxÁ•#õÞ9>ås_îËžvº¾ê·œM¾Š§ºÛ]þÏúgxŽÕ:\9æPJk+û§­¾¾>´¼ð£Ô:ô°>Œ–£²ÝyÂ`“öî ƒõ¢óP(ã{^ùg„"¶‹UÇQ¿:â|÷K*”ã‰>=çª~ò-ŽØ=»ãòÑc|:1HâÑf娉­ò“Ÿß•‡HI.Šä D»*SsPÌ×+D­ó:‘ŸûÙR¾ð…Q9yR Unë äÙƒ§dòà™Wúéàn¥üù â’áóåAùÁ¥o•o”H¬ò#âŠÍËþÁ[µ~ãb"XœÕŸ=çá#Ø>àóÓuC}àÍY9º§»ËŽbB™ðT^ËGLm¦ÕzÅó1oO]ã”Ûæ6[”¢xæI_Q žù*o3o[oý‡òL)¶r®Ö‡Œwâ©VϘðÌ—ãÅg}›e“O}MLÍÑŸs3‡+E}¯¼èƒÔ7â)f›¯—ùRæ¶ bÃÙpNôC¹­Ï±†cXðh#°‰]0ØøRüd:.;rkvÔ¥–“KN ü†sâàBnøùßëšGl(oU²{TùµŸRRôV'žàC¥tBʾšWlÅ×ÇØîÊÅ‹Æh©’ã¢Nñ¾:·[çÄñÅ?=*_ø¼žÞ{£ä¶@^›¿XþÉů•éêÀþäéðwìê2¥Ô¿„Ú/^ù®^0ØÄšÝÝx°z¸²ÕÇrV±–‹g¥íô¢ù‰APòÚÉT¯ á§qto…I“ê;³uÙÁ*D|¤[,KÝðÂÎ_¬ìË|ÑwÅk9ü²‡ÒÉWyjêÉÞìƒæòºðKa˜]Ûw;|ML扯‹¿C[‡ÅS£n¾Œ»Š3×[¿ÛÝ¿yõN[9ñ·ªjêGÅLkîÔ†r”¿Á3_åoy‡õf/ÞÆÇ{Jm@·fã2æ½®–ûÄSzylDŽV“âyœãíXI½«LÊ&ç‰ßlé®Åj%b`á5"mEžþ±ã˜ä7ç1Üó²ä“ ê ;˜L,F$ü"u¾$,ÕeâøS[7|âp¹-'3‹Så\øª®<(õæ lÿ@ü»Ÿbö™ƒWÊö€(òj–ŽI6Á¦³óezÆ|¦±µ\O/•5'˜šO}[‹yω¶\—O¼¶WÆXÖO+Ù­å>nPõ #ÊVg†orßG¤.&ÊàT—÷ÂRê“ñZ? ·vj½â,Õ·Ùb'¶â]^´ÕÉ“b‚gùXo|Ür*Ç|Ý|É—c¤žìêw»Û–«ä·|9—û]Ù¨ÙݲöArѶ|æ^‹+¦%EÊÞ>\ÅWÛt%9×ÕÏÓ wö¶S{gu^®7RÔ:ŸKîyË%õ(&œQ<Û\ðÄkþfcuãqWwi±¾‹òþ#cYu¸ŸRm‹õܬKI1Îd2*?ùùírüsÒ‘ý]>…¹ ‰{òîQù¹ŸÃÄñ3[7ÅÄárÛM g–§Ê¯úäwÖ¬,üªÄì<©ì//—^þ]Œã¾ëÊ9,•8>ìÕª\Ú¥¬xuºçf)ê6w_½]ë’ 67žñô ly,}XÍÜuñ Ü{~…e=¯J·ã l ~¦vÙ+Ý×ÔI~»uR¼ÞãËø&/Å&¼Áhwø‡öa7¯ ÖÓå°ö‰¿+ž8;>©Sß!9(b{›½<åô½ßÚVŽëáQ2'ûs|—9((áËy«¯SypeÜ|]¬?¬£²½7Á ÜV †I þ'—}L<°n¸¨œtb˜çE9ŸghñÖ·1è× u-Qä:”9D!Äsü®I¹÷è¤Ü•5^y´+Æ*lÍå>þo9?…Iäž“ºº¡ˆ_ +Éóx‘QyøS£ò¹ÏÞ|‡Ëm5ð¾VÿàâWËÅåæÍåC±w“J`Îå-J^ÜûnÙ›§{d‘C޾ÚÓéÙr0?«WÅYB,n=߇êqŽ˜ˆtƒ™Lõºça²3›•žY–íÙªìÎÖe"=Y JWƈm9™¥ñßyœMžúrÞ«ÕµD ðÊIJéúâ=¤¶*æ\JÞÃË>Å’ ¦œÌ«¶ùj\7‡t$ê9¾Öùú ûdm7×þ$Ž1Üœ‡Ëm3pÅñ«˜.í¿ ¥çóÔ9›ž/ëå"Ú?+‹Éôrå/V˜0æø5µ*y{ ['É¿l”VV›î\,×Õߟ°µÝø:˜hÅ,Ÿ©·¥J1»›·¯ŸT‰¸Ãâ»:Uê]iMŸ2/úPqל§ÓVàÒR½¶{µ¶äõ6WЧ¾[¼‘;¸ÊÑ®9^6°÷gíÔœ÷õö¡ÃW^Š¡bµ°½¿ƒïMâIrGr¬¯¢Í¹`³ä¢9µÜYŒËoùGÿØžB©ï+ùs$?QÆåÈ1ÀvŽl•ûàý¸@1žÆ‰<µß•“øö¾=†ú韔‚}ʱZ>üÉ­òØ/Lʃ8vsËm1pòøµË_“ç"ö!ЏmTT*ÜËXu¼¸ÿ²Zq×ð†kõÇ•ÄÁìmèYô‡ú†!&ŽÕô\ø+·”­å²lÙMÝ?^`ÒXè.­NÏË6&’£Ð¼”g)ÝñºåU\•ñΉºóÎÒ|á~Æø¾º˜Æ+^y‚y=ùš>$_j«ú¯ßð §ôñrŽÈ™bÝÎ1b[Œû{|¯u8s;ÁKùr[²ùÆ»Z̼MŽòR;ërÜVnå±L¾š¿iÏbRNçñ¬«OÉe¨ûȃncU2¶³§Xoü,EtæÍ`åA\¹ Y ù,yPœßÃ6G²QrÕq÷h,¥´'•#ÇÆå#å~ŠÇ¨íh=ò™ß0`Q•O<´U>õ°åÆ•ÆcÿËí[fâp¹å'NÿìÊãåùùæueðöw—pù°)‰ÃãÏ_ù]9þQ9,í—‰‡vòñOwÑWÏUëëù^Ý}Õøao-fXÊûu!ŠOæ L K„ʱ½U¹ï,&‘9ŸÂ| 0'¹Væ/™âÆëŠ;7Ç7uSïßF?ÏòõÄÓév`VZœÚ( ¯õŠQÞÓŽr;<Áh·}¸ZŽð1¨ƒW}KÏßð¿ŽUŽÇ'»Ö« .|S¥#êñ÷¬ÖAnêϘ¶Ó婾У.¸×Ý×ámñÁOS¿ƒ®qiC'Ày+9ðã„«m²Ž5Vð1xáwxÄFXLxnÍ%WÇ1q…æ]Ë"(™÷Þû&r]GK î†Ïꊀmsù‘—?ûç¶uâø˜®’n5¹5{mÂÉã×÷/¸ˆ›#†ð×ÏL>4ù )²ÿÔÅ9£rjúò·º¤pÍ\ɪ¨ÕçôN ¬‹ùR»V_-yW^Æ›?åSú”c顟²e4¿#zsEÅÅgeØô!Ú9€ÝþˆëÆçº`Ò×.Oñç¸Í´‚µqÓæk9´á·¶Ýßå©ù²_ÿºíEÃ3Üû–ÛtŸÚ‡ù7Ÿå§dŸós¼bîWNÃCÑÔ—óiŒb¢œÇíŒåö"·)ªÑ†rZžâ¹5žÑ)Æýa[,þ˽®µ~Åy5ºcMK‹¡l϶Êö*qE\úŽAù]ÊI(Q·Á»wŒÉ ̦?5à³o/ËÁ½7Ô½5«>ÁU%¯`0ðŸÏ yð£ãò‰`œÁ¾E'Ê-=|ãàëuåÑ Üþ)RdË`y8çìürzÎ%ÒïŽq¹!u⨫2ÇrA¹™ãuÁ`ËsC0IЮj|éïôcx“‹~Ý­{¿~–[}7VD”}Á´n Êϰ†¥D]óÁJª¢Þ9Љ_¸®¬ç穯ÆlØ‘£kõÐ>˜Ïý-n6L¯+|Á)‚kyx[¸ŠkÌa¾.GyŽY ÉXäêôAxæq†UÛÛÓ6EG±N>Á 5N}Õ3ðNœ©øÉžúƲ»)¸ÎßÂÄ“‡ÇX\âSvy¦Õ‚ß‘„çRÚdi~”s^Œkü—[¹ŸÄHÎGÙÖï*VÖ:mèÛ§—eÎY¬.>r¨[ê¦R7œǧ±êxô§'å§~|\î:6*/½¸.õ+¼½Ñ­)·ìò›˜<ž™éuõÓrQ[?8Û0éá@§«iyuö}ã:ß7¨ˆ¯8}ü?X\Â/þ‰S­ËÊb=5Œq(QT¿œ&ÌÍ]s Ä—ú…à ~MwFeˆÞ\‘>UÆH.Æšj|ðº_nçFéãŽ|ÑqÅÔŸs;¾Výç]Ô“"·îõÚþK¸ÚÒ[ã8Ú´#j¹×ñ©-­hixöáµ'NÛ§/ã›<–ÌÞâ•WqÏÕßoO릠´<Îk¹ Çr‘›9цâÝ>x\å3ƒÙGNŽÃŠ¥4Œ+ÏùØÄç[eÂ[³§¸¼WØã¹‹éÈ& D]îÀ›9R¦~u”“ȶµºê°8Jæ‰ÐÆ‹| á™·VÒ/Jå /ÅQ,F8(9qü&ŽŸÿÂvù±OŒË.ïØk~Ê[§8‰ÌnúçŸ÷É-9üÞì‰ò{Ó'¬–?,~àŠÊ'[Å8¢Ê¡Íúµé÷åøGÍᾩäa*à.|°ÔÁBŸ Òp\ȵ<ºûÊr«³ÖË PõW•IE0óA/ëÍakÂ6"ìKØâ£˜s¬W¸ß—#Ç)Gù›ë9&riŒûÔßúÜ×÷G|Š1d“ןKëÀùÏòeŸÆ„/ðUÇ(7,×Ë8^Q÷¶ZžÚýýs;óâowÏs°û¼ÂKxŽñ\®”ˆO8ËäãàÏcR7\lx±`æ‡Æö¾µÄäÁ«Ñ8Ö æ4ØO)½®%ýø_vù©µ¯:Z¿”nwpç-0‹p%"±ì§Ô8³9q|ö!N»åÓ˜8ø°©Ì±˜7may+É-7ü.&Õ‡~Pøë×#>Œ¥4Ž ç*£òÖü•r~yz“G®nh‘O1™<ä†V]Ž+뜸úðUŠñœ+ùÛ‡Jц+êPîÂbÉUïÔ««UrýK/_pHöUDñ ÄŸpèW¬r¨•—°TϘÚѧMŽ÷¡mKl¶ÔÁŇB±ˆ|‰WëÊS.0‹ŽçhÛêómæîÖõs͘׋>ã5ñ¬¾ëŠ…_Û7NÂ=GÔ•§\Ã̼àx|äbœû“ï*ví¤b¦‚÷ؼ]IÓ6”MóŒ+ŠcÙ¯ø¨L`³›-!ȉC{u©¼1û!jä@Ãq™ë%ÿ/×ó2]^T\¸‰Ó­/ùà¨Î>‰m*må\tëÝë>‰\9¾%ÇAt° '¾ôÿÿöÞÄéÎë¼;wÿ¬A€‹H”ĤDØ”M4vJOc‰‰M›DSÇ1'nRN¶ªí´õßáN—QÛ´£Ä™)&­·3JÜ©ÛÉNI^DQŠ’’Šbù¾ïnýýžåœç¼÷ý@”H,ïœûl¿ç9çÞûÞó|ç]IžCòçFŒ6Á{™< [|)8w{‡×Œs¿û`»ö| Ë1%…ÉqÅŸ›Ä]ã´׋¼Ú4¸²Zô…&uÉ£1Åæ6mnsL5¸ê8Ú<Öñ¥eŒç`†àËc×ð{é'b|\ÅW¶Ï —õÕ|ÚÔÎã¾ëÊW$Ã-û“œ6°Ø¿Ë#ÞÊ„ÂD=cؠƧÊo)71§ ô»—»Î$ñ½´½mã¤fi%.ú\2~õÊ2]¾Ä½îP̽ýô!ŽÇKáæÂ¡Œ95·ñô_ÝJéï}z*ÇFnºe ÈM¿œþ%ŠÇÖrK¿5ƒÊ—@9~IWc¸ êìÖ×Àí9 ¼6êÁf˜+Ó×eMQb ï_,ù\³ç~˧/g`Á vb.¶¾Úe’u«q[°ê«Ðg>Ú‹^Ú*æ80•·â[ñÕyõãU¸ÛÛq&s’+äƒËmžÇñŠQ»Çä8÷…þs¨Ò³l¹dòÚÀ™¿²Qv{·"[[«}b—1Èk¶kÓmÅ×ßá­J,Æâ†°Éвÿ&r_°‘x÷ÝÁ,ØÑT¶ß†7˜óÁt4ŸyΧrÕ!6Ã9žÓò&ÿ¸²Ê¸ØBLäŽÛº¸H'î¦;9Fáàƒ¥Ô©XphÄf{Èãd²Îê'ý£gæéw¿xs‘›¾€°xbþ€ñºÐÅÎò Æ|*S™©Íc²¬?²¸q/ì~<Ü}µ3îËYŠ·Œ­ûÄo¾œßä‚SìµpÓŽÓ¾Šî~ØãËRŽSÌ™qÖTc€¹Âæ~J.+²úK¾‚a¾‚có~4_lxUŸëb£¬ù½˜ÛóùØÝWá*½är_±\æÏ9 z\ÉUZÔkÙrÉ{‹>³KÛ%&øÄF_«ùk‡6kC¬Fz˜à]—Æ&ó¾ÉÕ4§^ã°&¿ °ÊÇ:X8ÆX}èhgžò[ò±ð€¸ž–rÇ̦¿Gͳ>î¥céþ½ƒôÒ·fIncIŒ²¾!y^§h—>œ|Lÿ³Ï-Ò¿øüÍ[DnêÂâñ¿m…Û²ãƒU®/ù÷V};†Õ/I±|¦ùÙí¯‰]ÈóŒ6“mƒ!f¶¸*Ç>Hy£¤lÓ mi»¯Ô®„5Ã&?8ÆK_öc)ÄXã™X—6ù,?:6À¤U?hP+FìŠÓ‰¨ø#¶ #­¯ºÆÄIEõç9ñj³“L.8çžKó .õ·øÄÞ&k¢çx÷¹ìãjËgýÈØ‹=¾_·—æ¹B>„ÄÜÞ4å’«ØÀA’«ùÙLŒÍ1ç²âõ=D»ú|Ün#íÓÌGw]y,/äñ͵š‡ECªcZ2›æ$Út̲ô am»ŸöpÕ‡ÆÕM—&“À¯^ÅoIä÷iXን1˜&yþù±ý#yŒ-oóN;‹a›ÉcØLbP5Ô,ävñû¿øÂ2}á&-"7m¹°<ŸþÏ­g¤xèk_²´ðéf9n*+ìó(<þ¡8b÷¢Åé6B™¤²xDöñ Qt6ÑW?®¼å¸7™S²±ÛïÏqbÃûÀ ¹«~ö¡pðLHÇÙ¶|ùÒ2=ûGÓ矃P#_&Ä‘Ü.q¤€‰ceùûŸ¹ùŠÈMY@X4þígÒyüÓ6|ª&Ë9øR°e‚OéåÙ‹é…²+‹û÷\$ù‚Õ6]^A»j~•~È2/¾/„MupÊ¢[¼o¸Åî‰Ü&*ek”ç¼"…ø×}[âÓŽ+ºbš¾b7ÌUXœšñç6D´õ£z£¯lW^Mnø FœçØ §zû8b<©Í§MmÒ@Çï¥èUŸŽ­ƒsï#Gjâ£ãñVüÞVqÄ(®ô…×`qðĸ*¦²kãMe«é¼jœ×zH´1#¸Ëßm ·ç‚Ìöú«‹ôÒwËŸû¢BŒS°ëÌiÌí>>!“ÏžMé37Y¹é ‹Çÿ3ý¬ì¾RÒ/U›}Á$~ÙS°ùSí¤­ôÒôÛ"G 7˜©â’¶°ú_hSd¬pük6ÁÑǼ®sãçíM Ø{¨òÒäl·ëœOY¿:ä[›Œ¶2YhŒu¯ùزÍ1§9VãÅ1çÊM1׆‘1!C±iS›¶*޳»/ÇX+ú.9*™¾‚ÛÍ׌/8ø!º¯ mm8ÅÄq˜L1íc¨uUœc|l—ßÈqBf×F½ø‹½Î_çÆK–ƒ"•¾<»œ6XðÀ³°D/Mòx°¼Y<<Ÿp±ÇqöÒ«>±3âx¿+?fBÊ}šL`õÛ6\Y…Ñ糧ÖéøÁqºg³¬8ráö[¦n6ŽáÛßœ¥×^Ó]ÓBÆHí”Õîï%8CŒø@Ï£ˆüŸ^Þ4W­ßT„ÅãÿFñxnþlþP3ù+jØ"ÆÉ7¸fËyúöö×äø‡ä8_4Îsä ˸cvæ—Òta«ñy39)[Žæ•çŠs]1ø9¿äp™=Òk6kÜmErªSÞžh1ñV&'×µELœ ˜Ë1ŠS»È0y‰ƒ˜e³kÅV5¸5—aD/qîs|ÉS|nkÆ;N1m9 “D¶| ˆË>f6{lBä¢k×Âå~¤5q>NÍ#qÖbœÛ+ H0ü'¸â«p"—\Ù/ñê‹cð˜ŒË~Õc|ÁPiè 9îºâô2ÚC×íU°4‹gcñ`y½ {læÊ|X Ç„ÇV˜D~KŽÓ6çÝ¢ ²ôkM¨ñ›cá™î,Q0é¡»Æénð¡ýÆòoQ8ü—F»ùÈ¡?û‡³tù²ôZÅ yHíÚ¢”û£}óþ¶þ4ŠÈyæÝ{H7MáYV,ß@ñPÒO.~˜ò6?QúüËr©—^ž½Þ\¼!rÆ‘;V6¦Ú—±À\¿a~ǨÝcHyÃÉûÁ‹aôøGôQf ¹ýˆE¦ ²oÌÖd7øU>~ü$“E‡’áŠO¹ÇÒߌÛM¶ˆîs¿û¤O³§º÷Uì1f×1ì‚ó«1—s˾¶·ÆµçF§~JjWÜîcðÖ†Ùgý41B9lP5¦`T§'êÆIÁÇq*c‹•³®Ðhƒ‰·f÷É?oÏÄBæñ˜c¥1 8iÈ'rÕáguÁ¦8Íë`αÉ¿ñlàZDz`½´¯ßO{wІzWÞfœsM÷G_™¦©Þ?UÉ|ú(^Èc@1§ÐJŒ¾'·ó)…ÏúTùÒMó<?˜Yû6t»ŸªÙ«O²\eº‚éÉíÙŸÛþ}}@”ØøB¬á–Mû#©¾3»”.í¼¤&Á\Ð=×r¾“–¼Í‰ØÌž1Eî\Â_STÌÆXÃ¦Ûø‘àO¢``ü“©îöbn>¡p„?›xÆÉÞ+³4’“@ oéÊlªkS»ÕÜÅÖÀÄË—}•ýÚ>RÌ¥6rµW1.Wökà(çÜ£/ÆÀ}1ÞÇVçläbkŽ |õókÄE?nw›Ø£m5¾5—4Rñ{ÉSå^‰w¹`£¯ÖIívrÑQ8W'Ú&ùV}>ëÜñÆy ïèêP¶Ý¦/1Ûñ.ð¼ûî`9ÝKŸÉÂÑúCô?@q‚,c7쇎ZCãs@xê0å „ªû{“$!Vrš¬Šò8öÍ=½ôècX}¹Ÿ$>Çb⮾UûñS:v¼—Nžè¥£GÍüÓMQ@~köùô;ó/ðáóù‡ìjykÌ“îs;¿Ÿ®äDkÊ9†võ€¹¸ó,‰¯ª-c\VL´/g—Ñ®ˆ=oL±´ŠÃpZ?–\7î”&;[üR*?Ÿ‘¾6C• úúâ0f}{ž6¶/]†qäĨ—Û¨›]}5÷˜˜¯òSf—-vihö*¾} Íx¼¹á‹ònc@ )ûvyŠs]ñ¢Wv·•|§rˆõÖCÌYånäyC– v7_´ï®“Ìî6ó;–TðÚôslZÿêÛ)ïw…í²ú˜Ëâx /wié>YÚ­ë[8ñ¹»jˆÇpŠUåèc…@îãm“=‹ÈbƒË|ÍÂáý ò»‡icÓ.%wEÊëãͱ¦‹(ö”öè§GEA2½‹PÑ5Ne!Äp•qôH?Cá8y²Y]7½çä÷æ_L¿9ûœ*öAóƒÄ&d()È#¨¦ùÅésr³ÄŒ¡ßbJŽhÃkÐwæ—±úø^Ó”ÑH"/Ó‚¶]ê긲Ñqýù, ¦(2UÛÑÖè“-Š«•µéTt~[ülÖ·§3D1ÙØÂŠdÊ•7Öü£„%ëî{ÑK Á&;Ï~Í#r£‰s9æ\é?ÛÍWé"Ûˆ/>—IÅ·›=ûzÆ# Âe»ë$ÕW0Ð .úHà±Ï ‹Þ‚Q»É!¯ä‹¹²]}­c¨â]/ï•­Š±ü‚ }Õ¸â«rSãi´;z¬£¿3J9Ÿ÷ Îé´³0Hñi¼¼?׉ŪcŒU‡?ݱòlsŠ+±4ùŦÏSÝÍò–6åyç¶*’Ž-Æ0´õ{½tÏ}xŽF|Äì–»·5‘ë>ØX}ðø}’mˆ‚Òçu!¦gŸåp;¯BóÀ:W(Mu4ùgÇ6à(>ðCÎUÌ]ãaZYßî™ä:D‹Éy`;tÏ0­­{lÀˆB¢`›væ Óí걑‚+ãÒ£€ßZE#Ò{R@ž[<›þéü³ræ‰Fþ|4òóˆ<Êkc¸òà3>2.‘&ƒ×ýE™ÿ—éÂöói!“|“s]ǵLóíW)˜ÏqA[Â_XÅÞÜà…Ë®*¬@ çˆµm>ö’’Ú†3HçÉ,JË4†¾¾å»Ï¸Ñj“\QfßQäã"/˜#¶Ê×Ý'\ãVp»Œ!ÆÝdãôkŽ6_ŒŒø¢l}E[yÏe ùó»Ù(7rÇþ*¼õ㸜#ç%[…û¯} M\e×qDœú¯ÕÅ侊/ÉŠƒÇ4úi€B¢`óñF,´.9À¹Òàé¼ú´Bµ N0 ʃÖg©rTr 0–ÍƃG¯yú7¿ÇÈ8Ý&z±Qf<^ïƒxoÁÇ$ºà]w®r³¿á°—Nÿäc˜}d ÏA¿U‹F$~ï*½¼<—þéŃ+ù¬ùEÈgœ› B²dÕï‚_X+ÆäsóôjsÄ(®¡ê>á*Vó XÅøm Fð1ƒðŸöÅb ÙÿúÍcµñøˆë+˜Òbv’Ç-˜Çú,¸ŸÊK}ƃ‹ ‘r+ (ŽOÖ¢/Ÿ6ãSô¦Íí"C̹¤5q×C»/ÆLÅäl7œÛ­e2x_±•±»^â"'9FûbÎhƒb>ï'æ*ö0N&Èó›­Îi¸ü4GNåÝpÔµ­ÆÌ®>=^0…g\‘d{ÇvÊ‚2ÚBñÀ*Àãø^²lƒ7Nä•è¬âl»g^·ç²pðO`àC£x3Å>þ1†'3ò"óŒÏ1ÊRŸõc>Æ=>î$¼`„ kÚmœ”ÉaçS ßwo?ýØŸ¦{±9ó³£[zÅѤwuÂâñ柩v[qâ§9ÉdÅ@nbI&ó”ݯó”]îº"Å|•lÜò‰Ç0KLðvtõÁ `•û~Y×½-goè)¼1FpC{±ƒ¿´øÞéË>êø«[üxÊU™Úâ_Hë;öàý`ÛØAŸÄA_ÛYà»ÌÇBˆ‘¡+rÉ·b÷æ~áŠYÁåÑgùàËö,¯ö¥>µgŸá3Ž—­_O|Àg™¼Â\«/õUc7.­1.3=â<_öµŒAãÝb‚íZ¸èS›5ÃV¸•xõeÙcZqAFPÓ×犃»­®Lð»Ð ›ùX4†[å/÷¾V÷‚Ôy›q{6{é÷äi„?2™6ºb{é…³‹ô›Ÿã5]·½+„Eƒ+¿9¢‘Bòå8Ù—”¹Êü/°óÒìE¹ÚÜ¿$±‹L®}IžL*— Ë]üP®2‡Ä«]`Ö§b‹Oâ–å9%ü_úec¬6êø“MpÒÄO,em¤b¹l-놛ËY)*s7ìÓ!ÆÄo6õÙD`11Oƈ¯}²¨pÒˆQ\ÆTñäj/qí>•èvŸÉ•*c°h÷ImcEoöEKð‹ÍšçŠùJš§Êe-ƹÝcJœÛàÕ8µ5seð½Õš¾,“¢.üZ1ÖM<öD¾ê­?H#BZŽãö®4‚Â;îÂ!>Ø2ÆmnoȤ V-ûviMúqŽ‘|!m{+üá°ÙfqÒ@ÑÎÛµ¿yQãà9ø$BŠŸxx,íý,ž_±Î„Lþ½/ÎÓ|Ùö”ÜâôC/ ,¡ÅC¾“N¦úEå<’aÝïØø­¼¹8Ÿ^ž¿ _ªcÄÍÇyÃ@U·«,ËÙîý°™fÍí>Â2ÆmÒ† õÂã?Óݧã¥Ülp+Fí>>R•ÏbÜ'´˜Ë1WüСªÍ1G½ø[efùjlò9è8hë팴-P,hl`§Þ’Jl‘y=Çxk$»¬Ü¶Ò$Ä߀ü(«ÿÓV,›(>£™Û ]Ä€IŒÅ©ìv>ŸÇôV,e‹aN‘‹~ñÂBîÚËã,ï¿oˆ‚1‘'¾ÿþaÚ»aӨęœó’‹®ôŸ¥—ϹvëÒµ€°x|vùÙtÿV?ÄÕO;c„;ŽTcÝ7Kóôüü9Ùu•I Ä8θot+H8uŽúžWCˆÊJfÏ + î9s[~i®›­‡1®øq¹Àˆ=ø¤™îñà|Ä-eÀ…Oy† 9W#üfÍîMuŸl 50§-ÚÕÇxRŒ,Gf1Ån2Id}/¤ˆsl‘µÿœÏðîS{ݗ爸ÒV1j‹æ8·±÷:ÎíŠQ[3Î}jkbÐ ®ÆœË´ËZü1¶ä*-âDæ¿–\Š >˜ªøVÛ(r•¹xåžiåyrƒ—Äë:¸ê`ýÞ­Á"9ÉMÎq"ó˜`/MP86¤pèTE{¾ýºè†7¹ä.ýp·Ÿ>˜qÖê8ÊŒQY|ˆÇ¹•û&¦ÊŸü¨ €ìÅJƒ!bÁr¼ÈŒ§Ó(cU ÿ~fš.œ§tëÒ­€xñxÿ”êO3ÈáCobHâ®r†à‹øîü[érzÓâð¶•/ÕsZ£˜+\}ø&ûy …ùEç_B¼q¢Úµ_÷­ê¼"Tówœå£–íÒhÓø…ç¡Ýâ½€x›Ën,•·GEÆ+âtbÝìqBSp«vbâ*ÌuÊ¢ƒÚ|q ´7}Ù߈ß|$Ç0¾à<®øvƒÚÌ'8õ7q2QdÙìk ›SÇ!þŒó1°Yœù²ÞŒeƒèú Žÿ*;eóÅ<`•âàêšì¾¢N¯ûg›ŠœÓ¹êð'z¾’Û³Û¢Í Ç:úñx‹û2ç®cÓ[Z?›ôÓË»±â{Óß^ÐÍÆ=ÃëXÅÝ;H¸KŸ@8ÜÆJä ~!&4æÍ$¿[¥6,m à-Ùí3·ö®¬Zùþyñ]x‘…ÂÍ´ã\÷¿²ø^ziþ¯‹q— ï‰* lÇ›,9Éýõ8DÎÝZ²kËl”ëUˆFä<Öê>!ù$0î+~·•õ8É•ø€ó\Ô*Ÿä·~çö†Ïl1Ä5s×~× ×šOûÒ\u¬ëÑÖÖŠúªìý_{ uL †ŸVðí†Ó÷ æâ£îã(võ•8ÏYŠÏ~âô±„8FòƒøŒ®<`*>k’?ÛËöN]…8¶²â ^1±èøn,×s^išOìfã©ðz-®ùh7?cybŸƒcQÚ7é§¾Ÿ¼‚öͯO®dÁ—QΛe÷9V™aÏcòkŸ¹uªÿPOãe9·|9=¿<›Î¦ça±O¿]ع½ åo”1ʃ¿&[é§_ÄäÏê0ôƒ‹%è¥ßUÌ•ùkéêìµlWŒ5R¶™lm‰1TwÞÍq1ÆtÈÃéE~Ø‚—ÞŇ<æ§<ž]ň†Ußp6K#¿‚6?]qm:Ë1Ü`‡óòèyŸ¬±ß#+4Ž©ÒÉ=/^+»·ìg|°S÷³Ç¸èó~ ¦¥/ÁµÛ³n2ãÝ_ǻߛá¢/˾b?«]±m¸"ûq_3ž-ãÚDZ¤•>¯ÇÖèKä*>Œ!ØÙz(Ë{€ïËî«!ôrŹåC ƒ ¹*a<;b<ûe3ŒçŽœWOx\± VíEæ=«˜ð³/Œ#â„À9ž¼gŸß¢9ðºw4B±6äõ#Œa€ÆŠhXÍ—ÒᣃôЉrÇ^á$ÁeY1:.ÓI-ØŸ8=HR‹æ­Dïêu g—ÏËñç—/¤³‹çe7Wëé$«j±+ÿÆì+éūЛa¥=Û}Ò¦ìv¦óÓç±Aq/©Ú¢?7’åqßröfZί(¼ÂFY}rÞÙÅÚ'~ݰ]žL/k‘lñ ç3}Òaö³X íŠti°¯ïøy­|”ÅÑdoš v—ϘSdR±7}¢·ù$°ØÅ'`ª˜(ÇÜ œøï6³‹ÞC•+â2oé³ÒI*—þ¾F^±l¶W¶ðVâÕ¦úµq¤˜WlU?äí9 Æàü>á|Ò o–ÈX¿\MLÓ§©k6žÎÛÇ Æ ‡¿Ǩ følÏ>lû( ²21{ÉÖÈ%>Ø77éОQÚ?Æ*gÀ"¢ ¬sµç\¢«ï#MªÛ’(©_ÆJʹøÒŽ%fòŸ?ÓOžºµŠÈ{r+'gÏ¥—±J9‹¢rnñ²:š¾qZyµùóóo”‰v[ð¡k‘¡Ì—‚¹<{%mñaS¢>ûM'' wû"-¸jÉëhõÉ'YáTï/gi0»\l¡øã;ñ`ºæTy¸˜£XøÅŠæC`ű†Õ‰n¸Šç­ÞX•P–UÈL $uâËžLùœg9Äĉ7âDç°]Žvòè«Æ@~-ŸËp™OóE_Å®ù¢]}jWÙ¸é¹Á^l$•…Ç>C?ÙÖðU¹«þ4.æŒX\.6ã-¶*ì»õÓŽc«±ÅŽí Å£7ÉÁsÞ,Ñ}Ò?ŠÀEeH;71‹Íãõ\ä&÷€c¡á±²â ¦Ž²Ž ävó ‡¼]IÑ#1yš ÉmÜQtî¹×.äcŸm}ˆÍeçfŸ`Åò£3‡ûù±[œ@B¡lJõ©<óãV¡÷´€´ ‰®R^ôO^>ä+Ë7ÓOÛªíÊñ/#r±Û.’cƒW›ŸŸÅ†GŽ8ÁšÙ—‹m}ÊaÆ F7DÅɱæ[øk+ÞÙW±ž[7^¬¦—²ì8ÿ!ò!S>Dú®ïO®H7œüèQ4XDƒ¶ŽU ®ÿHhóæ1YoðØW;Îò™?ljÇd÷åÁG;yȯ>Í}í86ÃFœ5RŒ[—ñH”1n£\áK¾ˆÉï©m !oö5sR6[.ëÂwíÞŠƒÆTùB|ÿÊzê]Úƒå\}d8ð ,^<˜?óC©lä\q •ÂÁc'ÄxŒÅI~iµ/çf#™\íÆjäâÝwÇ,À”;ñ²¥td4VœÛTvî>0ÈÚ¿û”çmÚïgAU=ûAå½'IN’ÛI*Çü¼ÅÉ/¡ˆ¹IõVtÓ&]peòýôõùséŸO#½>7-ôÞ¾œkîÎò/œÿÞœ“û^ŒáL^]áyÁc¹ Ðb>ñ» œÇ«ï—Uù]ÆÈòÌ9Fe?$ùÜV@ľ!·9QÝónðy!Ä¢é±RPزl9¢ä¾&NuõG_´W>6ñÃWåhÈ×Ê‘}Q¾ŽTlÎt÷“Ü_õSÙHQwc UnR±»54|U¼µÜŸö•}-ãðíaweÀÚp®‹„UÇàüþÔßÒ‡C'>®:X8æg{XN‘…ó¿á.0ŽâÞ>/v·¿¿›Òx¢/ÒÆ‚!E#¡PÁ¿cùøÀ¨‡Ê{ò\™»9GÈ0à?†UÈdRc+N qùý’2–/µíÀ^ú»Ÿº5veÝôÄéÿ~.ý«Ù±ö˜¥Wço¤ËËËéüâbº´à¤K>üø¥ˆl…@|fC›-·ä؇c<¾.ƳÍ8„ù”Ç_$È|´Yt儦<þA|†ËùÌû`Mø4ÃW0êçS µhÉU|üÏ]_¼µ»î²¢6ßE¢Îg†øgA]ZÀ˰Lv›÷¥¸â‘m«>{E¼ò‘L–¾]v´(ïæköÙ|/»ál5n5^Zs _a+c(¶:w°u±‘K|ñå\-ýÅñF\ĨÇdÏâ1¸Œˆœi¥yø8Z¹Ã®¬ ,‡qúÓÆ?æFÓ! &BñLÄ¢ƒbw[ÖÕ§¸hGøÇÛµ¯R8t¥Ê8“Ñü=x¾£÷ó¡QŽ#3lŽ%eÝm&ƒöîï§GNÙ1!!Åh_¦“²ärˆñíFÈäcÇSzê©›¿ˆÜä¹ù³éŸLŸ©‹Ê¯.Þ@!Ñ‚Âæ_ŽïrYù›óïÊ%ae²Ë¹O•yà|±xÓô¦ÍÇgzoiÐ!×? Ê5n2ó‡I©Íñä|ï³­Êæ¸ÑlšF(@ÑÆ‚3á} [ ±Æ¾\½)›_ÆíÒ®å3=ûnø¢,>R±IƒTãêØ×’¿îsçyŠÝ0ÞªþÌWÙÔžõ˜»ê'`Ø*_±©¼K¾è»f<Û5p•ÝpîcŽV on¦Ñ…}²ÚŸ¬"0árw•Û¼?r“ɽpð8WîSDáj#÷<ÅÚÅNóó–íc4ÞDq2F[Ã*¤Â¹6ï´srðîaÖÒqª¬<êlµíÄãü°(¡+Û¯\˜c®‰MéÑS½tæŒÛoNºé ´ÿ¯ÛŸN–çÛ?ð–/ãüü"V(W„ŸŸ¿)«Å÷Ò+–‹3[aŒ5ã SÛ]Wy1?(îŽ2I¸ã¬™ÞŸoãÇ…ùÊFÏsàçi<·³Òì½4SÞwKõücïËôr†–Ûå)†¦ÓçÇBh“á{ѽ™?ú²ŒÁ´ùv6øHŽiâZû²FgÁQ2Hy±­äð¾¶J—FR_3©à ·ÄgŒùÄåŠlÕY&¯0Á×’»Ø—톭q!W°K˜”ûÛkiøê]"Ó&w×婹à_rˆl±\•ðÇÐwm™X›Ä¹Íì&¬5Ëé˜\406ùÃÐðü·gwcYlöil±‚Ÿ'oÝs/Šâ“¿ùˆ' θØ8:h7ŸÈúœîÊ’;î ©] & 'I¾À³Ÿ¬Ërꔈ7%ÝôäcåÁPÕ«òÁWró 2ìlÉÝ^çÓe¬R¾±óåt…¥ä±xá1Þ}Á†I~1{E6nþkÆ­þH°ác¥Ó÷‚Så¬Tƒù,X@¦Ú¨ÀY@b\ùó@ºqùd6GÞ²êÐUˆ ‘8µk#ÝýpP¾,û\Ï2b¢¯êk5_ñ“Š­Â5ÆÑϦ}·áüsñ1d#¾à´eŸÙWs7b*œö•cªÜ$“›¹á,¸boÍrfìÎl5ŽŽ º·ƒ‰ðµƒ)MDzÒȪƒgXòXÏ Î‹ÿä.¼Àåðk.ŸÊ _¶«©ð›Ó¯Š|e±•v0±o/vÒÖ’—¨*F6f‰³Ø¬ãÿâRZÎ/™/`2~uN/à•Á† þ¼A¢ 1–!V+£Ü\ÄnL¯J!õ¸/„R´ñÈdÊS|KÌúÔV!’Síâ3žs»NPôE9⨃D¶1¹ô£¸"·æÏñ!.æDsÙñjg€ËÚjœæ‹y¤…1Äø&®ö•±ÕŸW틯Êmñî¹ê+Èö*{Ž7rÀU¾ÆøÄÎ ·&ipy3õ.¡Íí‚À¸ê®qÔ¹2ñºîÖʹµë-ø£O>~p‰ oœÈç{ä‚”±ŠÓØ’k²>kB ¶øHúžM79¯2¿÷}~] ê÷ñTýz^·‘ħãyäÑaÚ ø`óíJ(Çð¥ØxÖÕ²ûS:r¤—ŽGñ˜ xtga½3â.«¿7ý´<öÖJBùð}ÄùK1NjÚÂÆNñî½bƒ_¬‚륭Å6 Ê ým§«óiZÈl£>ïo9{ E¤ìó<ª«,kðù°©¬GŸ6ßÈFóLøqטùv}¦$Ú¯Ïvøe–¾ƒÌS|ùN‰£>DQ‘UˆÇºÏšèè#ë†Ë¾;©Ø½&x{¼ù(7ý’°ØÄ0¢7å³ÒŸùò¸êFòÇeÙZ´Wc¯|$—ƒOšÅ´ä–¸#þ\ì§²™=öU°µ½ÆyNLÖ|”œuu0 sÕ!Xæ°ÊäR8x]VüÞDÇÿJ¯eÿθëkd»§(˯2cA.‹®\b³žÒ`ÐO|tm…5 šŽ±èG~ðÐ0mlò`µÙˆþhϱ$·‰¬aòøOúõ%†!¹ ÎbÁGÙE¡Ø¿ÅâX…Cí·*Ý”„Ç=þ÷é3é…åY5„/A9_Vmºñ©ª_lá²úØÁêCt©1Ù‡Æ;ô^žo¥éE“ûöâjZÌx qÁH#5dÿáô;Š¥Þà«Ü±<þ1`q²±èFl“×f[øËŒÎbs>FÑÊ…ü›Ûy¥º`wûúÎL ‘ë…Ãp.GœÊ \ôY^•£dv·åÓȹŠ3]I}§rÛ RŒÉÓ .äk⬑rL…iŒÁ|êW_ŒÉz°¹Nr{ƸO°¥¯˜S±×è‹åïŒåQƒ×¦á¥ lú—|îË8 ÇX G˪„rÖk¹mÛçóÊyvwO d÷˜õ#m¯rmoæõÝXB´gŸêþ>ÔGrµ iñg›éš‡dvÁ*ß±Azð8VPXAØÇ]Pƒtär´ÛäèMº) Èï.¾˜þùüs2Éù—#T}y&†/7S¶ñE±_Ÿbõ1â3rÃ&yØRº‚ÕÇÅéËiŽÉx¶Ô¦8õg?0ŽæWá4û.Xò1pƒ…ŸP,.ƒC–"§æ›Çó:‘5¬B¨‹Íí¼¨p®«&÷‰Í…àÕó0§ÇºžeHÙ×ÄAŠö‚ 1Ñ. ð«9=GÓĸŸÎl³Vã 6mÔc(~Å·â¢/ÆXŽ‹ró³h¯ô¿Š%©mg>kWt-¼EûðâÞ4:@ã¼pîBâs?X8¸;‹vñû{1,uµ[~“E'‡mˆÕÅÅbÄS„­HUù‚î«l‰ù"žšÛÑ&ƒ4y^PöQ)ïGs?чiÓV0ÚŸù]\Æ)>øÚ¤Ÿö®÷äöîl¿ôËkéÃ'P,äúÛŸnºÂç¦ÿÚÌŸ›¾„ð¥)çK‘±y›¿#Ãò¾YßÜùŠéæ¯òE›É Û;ßJ ¬(D—†ßŠÈœÅ„E“¿„¹1z]n*zÞøD™Ì–×€ô½(I߆'ÌpkómäÓƒâçœHH—1@ÓXå³)&@E[JëÓÆ*ÄñÞDW¿·ìoø<¾`à«ô]dÁ(6ú"VߟöÕÄ䉲¿’ËÞgôeŒSl-8µ“«¯™[û6_Ì%Üò5ÆWü˜ÐO¶µøª\9w‰[ZÆ©,+®(ÀG¯–ûYi,P˜èû ½E‰\üçñ–CògTùðßd ¹m ¹å)XˆWÙì–‹²ç+XµG·5YG¡®ï#â(˜­EçsÓùìól'Áß#ϲâ³Îùð¨µq/Ü‹þP4Y…pP ñ¡¹/çmúÌÞÔs‚½ö…|>Ž*¾ô%¶†/æ©â²¬ñM\¥£eœÅI˸2†|ÍÜekÓ6ñÙq+ñ×òÑÕäÚÞÐ óxÛmÕGñài»ýË›©q¿lƒùHoŠÈxË¡\ã%G´›Î<ŽÁ[•Œy ˆcÐ/ÍräXÓ+åh/rÎ㛹 s•ˆ¾W·;§ÍšÙxÈ~ +‹ñ Ÿî:0L§NQ<ð^ú¡x:…8%æ2±a›¬õÒ/?=Ö³²nsòØ{N__>›¾´´âÁ/ÂÉŒ9r›2~þcÉ 6>ò–O-Œ?¦ŠË¹ã!†ÍmÆy0}GE?mÖ¤O¥c2wwQï÷°|ïa?¥IœÆýa õ`w¬¼üŠ=§æi4ïgŦáä3>¡*+*ÿ ‡O.œóÁ8˶Ã?· S5Ë}1ŽrS/!‚ Ó*.äƒyÕ^÷¥~·[ÞÐ2†ÿB|Ä eÝó(Žc(¸z 97Ý"[\Ã^òG9ä3\Ž£O{½Ž·bV|äæc|e/-â<Ø!ôxÚ-{ÐÈÂ¥½²Úï¬ »m“Ò caÓæºO³][ Óžé8mΰ]/O¿a—eØ3Åíj‘­¯,«½Ê+:_”ü7D<Ÿ[.~Ú-ƒYøXÚýXYÞ3HïÛ7J¼kœ>tHŸ6x¶Ñ4á·‰âÁ²9ånl,–SeonsL’' þæçxBÌíO7E᮫ÿkñY‘óÓøRJ+_bù†ƒÂÆõÊü{á‘·h™77êÖ̦„rÉg~àO4â«<Ć˜˜Odl‘.‡ÆÂ1ì㯵¾”Á8°…óï!>Ks·|ìß÷TÍ1h3yú#ªüà,.$·3ß㈅Å'°<Éf»ÅAÌ2í´XŒc³OxÉWç°‰/xm泘gm7LNåö\*{žb‹˜‚kÈ›vÕwËçcÐqDôÕv—ݧ~Ò®8~¢Ž ~YyÈñ¬<`äêeòÚ¡4ÙZ“c1d™Û¡5æ€ÎÝRë‹qÚ3›¤M¬Xxw•ßÉ9–q[|ÖÇŠŽ&ýº2¸åqIõk¾)‹Ÿ_ŽBq«‘÷í¦cûGé'Â즃k}y\-9õñâózSóZ¿ÆÁ™RÙŒôܳ i·;Ý„ÏN¿Úãþ{}Õ·ã¶ê ó/Ø|åK×ÕǹŠjc¼ÄÆfËý™MãPÜ–KnÚE¶þLV‚ÂFZbŠ·F[ˆQYÁ<ý°‡-zÀÕ &õ>šæËq!I¸ùÈ玧ÓìÞvƒ,«O'›² )OkêÈn-Ú Ö}mùVãTv|‰!Õ¸—ÎloâÈK¾&¯Òr_Ôš˜Üê<â‡Ù匱|%Žþ[å‡È˜’›óeœú4wÓ·*{·—¾°]¡@ðLª¾\]ŽB‚b2¾x ¯nlS-Û'󌖃´Æ&ŠÆúb$Æé¨¶kÃæX—=wô™.xÁZÏUa]·Á©–¶÷MüVö¡Ýv+û6Gé¾½#) ëcü¡†bÁð’?ôű„>¾nž¶·h±ƒÈMÈx‘Cžl+¾ßøìí¿ áÖðžÒ—Òe÷©|!ÖäK‰¶ò…ñ¿·Ž&ÁÆÕÇ6Ïä2ʱ¾ñÄÜbóÜÖà—ÝW ¬@ˆµn'±·’ú+ŒËõ­ÚÃDÎñ³ Èî/ü(ú=LÐs¬·C¾°ÕDô£Kóén,Õµ?ÊS·‹¬Ê!vXe’*Uñ‘»O²®ør|ôAË1ïrÑgv˜2â*ΰ[C¶E´…<–#ö§rÀ˜¿äR»è†Ï1´XL[\é;Ú¬ø«ïK}%F´$·açAs;`ÞG!á³=oîS0%ŽÛ!¶;L c9ŠÆt’& l6MÞûȲoÏäÖV°îkÑ+,c§ˆi>Áö»‰ßÃ]X¹ Ó=ƒäAÚ ûìC4Žòêù”5‡ä¶œ"ÇfýH…¾ÿ²X9sÏ%PÃ{X Ç8•+ã®¬ßø,O^¹}é=- çñïóË/È—S}þETT9Õì2|ä¼yâ¹¥­>,@|â7¬ðhs™yÔ¿µ¸<6á¶œÃu(FöXò€µÆñÎå›íÙ¸5)(üðØ ~0”Õ¦c*}ôäx‡èÍ¿#i™ š«me‚Lî-†‰qš§öŦ^±—˜€iä9]¦»m·1;sY ÌŽX+¸ˆÉz=&÷)/ñ͸l'{Žã?‹«} YâÛÇ ²çAã.«¹Ól­§Ál³nƒó‡°ê34<–¾Ç(,\mŒç(2œ¸}!H±ºÍŠì±YÖí0Û£^a-G¥«Ÿ—Š üÁ´í Å݃q:„¢q 7L{P0FÉ}¯$¦ò©ží †Mûjöy…¹Æ¹]ãik«ìÚÔ¾Wç€ R¹äÊ>³‹/¼ß%KÈÊí–®<šóô]‘ùÐ%ŠÙ…c"„Æe»’íÒû°&½Pæ6®ÛmÞÞŧq™({ÅÇ ÆìÑ–íʧó^úÞwã*ÄZÕ¿6¨Li±ý£gnßUÈ{Z@ŽõŽ¥'ðïþOÇÒQü[Ã?!Ûðj²/®òeÆ/«Þ,½Äc#²rýRÑD®Ip¶AM—[i‡г r3§Èîc£ß¯§/k¶Œ7?)ÚÚpÌ)¹Vì ~^øQ.­ÈÇG_nXÁ7·÷G›úuÚè\n±»Mx›} qlÔÝFjÚâgX÷áx¬¯èSÙíµ/7ËYá@ŽŽQ®6Ž¡`=6ä¦n1ÒDv_‰}ÖýS÷~]0%‡æñ8 \up·wüô¹ê@ ÑOßøÂÁ4Z°hŒÓº9Å]VyÛf#^b¸ø¶Bù~Ôær3Ö°IÍÅ`…á`»Æén4®*öâ-±ÆkŽjY7î²ènÓÝXòÁµ­Ø(×¶ÏbÂ÷pø2­ØŠ¯êCx±?ŸÒï~ñö< ~SÞÊ„ÄÝ[¼±áùtAn¨xžÏÁ—sayriò- é·õù·ÒwçßV“øü›5ÜŠÍähC»25]]¼ÎeG# ß͆ÿ³×ÁycDµE?endņŸ°Ü‹ÏúˆXmŽ%×ÇÞbU1ஓ°š™È“ ù¿áGÉmãy‡ÞUßútŠ¿B5NÆbvb2¯1¦ØÑ*\i:~’ÙªxïÏqµOd³W>q¶ØÙbþÝpÕØt+þF|+&ÛWß‹ä]Á¹ö‘Š=cE>·“cÕ ·bç.+;ÀÍÛ±ó¹²}ðÚæ¹ôÀ¹çBÈÅfrÖ•ËwÙ»ÁøD@‹à­JÆ(Øäºi€yÎJs›ûIŽiúÜF‹ûLwym£ŸökZèà{.~·é5+ `ôÁX±Ï“”±|iÚŒ“Vlàˆá}°þúÓÃh¶ßKñIDATtà€™oºi ÈÛ!/&,.¿¶ý?§K‹Ki{¹#gbÍx‡]¬x·]ùR_¶þ8Ìø…ÙYÄb%!6bÔN↷ò#t=ñBä­ÚDŸcèv“þüJâ-Ohã?í“ —‹ qjWÔ;Žó“óTÞµ×ñ´yñã¡ ˜c´áÅ'kžÛ±E7¿ó;LÁÇûÍ}™=ã²Íu‹-û³Ïx3·ÅG\±+.Ú‹ß|»Ä·ûB¾èÛ­/ØI+vê!&¾ßˆ“‚Éš+ â{(ƒm}í@Žu`b¿x M^?,±I>Ë)\:j±eÙúƒÛ¾Ü Ñ Å…>9fbØ:¶Î#:¹å£œ·ùŸËí…(Êh†å1¹AbŽD=ãÝFÙ8ì¼ð±ÇÇj#9Îú(œTÛô{U8>¦¶—~éxLíÛ¡Û¢€8ýöìóéw¦_Peå ÁÆU o5Â{Y±°lñ|-`·0‘_š£ Íí™éÞ,^ÿ»Ým”ÁP°X½,íäü_lEæUÀ—ñW¢­X`/?p0³I ÚúìÍ¢{1¾!„oº`È]^Ÿn˾KbÅf2ñz[xèÏLY'ÏqÊ Ždr¶)–Ô´©¬ö*¹ØJßÙךðæóx÷e›€¢ ÜãÀ±Y©áËùËx²O |7_°Ç1d‹š¯<ƒ•äᕽR<<Ž®ïAØô¸ˆäv;3IìY·B¼,\]˪‚[OÆ22Èn›û̹*gvyÐÙK´7q"‹­EåÛ´GßJN“7l?:Jû÷ó—ÒÄòåzlÆI&ÿåOöÓ‰“Á~‹ÓmS@øüÿeûÓzêîÛüR›¶ï;•¾7ý¶Ü ‘ëÚXpx;]ÕàÏxئ"óˆâ-ÇrqÄŸËnv“õ“VÝÄ”‡ó7ñEh?âó8áø°“Ù%JÙï>ÿñ3–·<æ[ë­L>ÈUý9Öì”宾¶ ¡CαÙt‘‰¹¼‰Mãç6DŽܖWõÕ|Y®pQ¶~<ÎpŠYCñ©?ËîÛµrßµ|1_Áè8V}«ö¬›,c”¡« ®>äÇÂ&tÆ1€¸µ—HÛu¥IÈ­™ÌI}(Å‚%Û8‹‡ÞÚÝcÀBLekú*]e-í>Õƒ\é‚½Ò ³âÇ*{sîBrŸËÆõóW9siTziÿ¾<(*û}Ì™“š6Ú\~óäú¤ÁÿôS·Ï­Ýo›Â'þ«Yã>Z+_.éÚ6~_Ýþ´Ã³¸h‹—àŠî >%·xG1¹<;—vì©…´ód^æDí‘Vúöø^Íx,‡ËQ& ‘cˆa×P@ª-|4Ÿ¦ñž‘Þð±Ohåñ¸Ö²»¸ôYÅæ­à Rwì.“¨+ÎmÆí½E›4{OEùŠ­Ò!5ý9&ôã­Æ5b­ÅÏ)Û„“‚-ø+_C쇭ê«ù~ÑDñA—cœÐ!ëÁr¬Ç’KÁøŠŸMm=>’ÝY•XÒ5mÆI W ŸüdðßÂÄ-ò–'®>þ`þeýÞñEò{R94±ñG¹›MùùÅ+(~"ò=Ó·«>ÙyƽQÚ¬§ao™Öú“4LÒ:ôÍÁfÚƒ¶o°'îM{‡›i³¿!ØõÁZšôÆi( òo?ö‡~ä¬rë¤cE’k9LÍ1$^ Rùòùål,·!s>ãm›W3_ŒdÆ©-ûBüJœùä_°«,Ÿfе5u·©]ó½ø›ý¬ÄI_µ?c@µÍ±õøçö†OxñÕöès]}¢ƒUv!*ºàö1`ñ`¡<ÿ%9æ‘debqh,0ëîNëØ.7±=该»ÐÈ÷ö&i£?¶Êã¶­ Èãõl&ÛÅfœ‰Ù “ N}ªÓ.n#ú½©¯ÂºÝ}b3{ÎívÓ+œÚeLøo/‰; f¼7V3·l£ßmÆCÌ Ï7Ξb?MʶàËb±yþgŸMé¬=+ïV§Û¢€üÖü rZpüþò—zÍ/<™^¿T6.Ø2Ù76úã6l´<€Î‹cy{üÑòÔÅÞP†BÿÿF("#è~¬É€7^ä}²ðC·¦7aÄ4"ã×~I’;´9ò·ù¢>çi»»Lr»Ý#Ë'>Ç©ß}«ö¦ÏýÍ|“q ¨+¯cê¸Õ¾œ\ÛØk®2pü¦,Wkï'û—}Ô‚Oí»!Ê$e,hü¾ù_Žcð»µNŽÚÌF¹²ƒØ‡lk$å2VruŠM¸‹f×÷Dî¹M§º´&Î’@vQÏ!Íeµ;6û)[®K—ô» ½ä”¥ÊVòz å—Ï-äŠòb+¾UšØ;Ý¿ùÖ(;'ñ[Η¦Mù<ÍÒW·~GŽwTñ™7d¸l°ïÌ/§7gß«1Ùßij‰!Íw¾»`kºÈ pÆ y „*¬ì¶ L˜ék³+ürQÒhT¬â\çÙX¶ËýÖèç±Éœ7„4¹Ä³â6³SŽºâÜfãjØšñî/ºö#1_p$—Ñ¢?Ëqš/ê*ëø²½¥¯¬W¾U{ÑWûÎrc â£ÍsÈŠ#LøÈÅã, ,(´‘·ö¤ÁtX%ỿx(m¾~¯ÈžWHdç´]V¿»ø„Ü.† “Úä ìž»Ñ§Ž¡¶ ™¬Ÿ›ê"™]ZSG޲Ëý| Re ²p0´û¤÷?¤ß‡b@ŸmøÜí9R|¡>‘Pm<î¡vÊ"¦ ü'O¦tô¨ê·*Ýòä7fŸM_]|Y•¼Q4¿\ÐuØò“ EwœÊò#'Ñ&>êj“ mkþFº<{ElÙî†Ú ï:&êùL È*6ê§§ü–ãBà®ë8y\e; r¡ 4ÚXXx„Ÿìb¶é¶ø5&`ŒK“ü »õ™1Ù¦²ró{ö…¾Š2)ØBËã¶Ø6\|oÞÆåx·©?bWìÙg±$±g]ùŠÜ‡œ5eºÁ±AÎôO1Çpg=¶75—ùØø°¨/}PއXₜíhù¬(íâw9ínkø³ D¹Š5›c*¿ëÆÑ´x¸=ÈÒt¹¡“²=êÊÞ?”g„PçSi#‰LVn.£àŒ†Ž)xNüão¯YQÐ!Å Êw"ÝÒäùåÙôgŸ‘/_~pù¸8©ÕV|ßœ~UŠH´©Ìþp£î²óž¬>üzyø‘9OûÏ^Ëö‚+Ümü¦‹«©?×ÇäJˆãB,ùp±“†ÄE;q§|ˆBTPERŸã}RâÀC¹åS]ýÞGư…xÚ²Ý|¤‚‹~ض+2@Y}g¿óˆ3.Mú§ ñ†-â‚­Æ‚vC–%ˆ…"Ç÷åf‡r`ܰ,&ƒÙ·‘ð½Xñðñxì{ùi´¥…EšÙ3޲ùªI;`VtR´‹­MÇ+ä2.0炵÷ÂåxËÅv$—áµôï~ÇP×" vb‰S¼úéþÀÇéÈ}(¼Ý|Êù¢±ÎÕSÛHúÉQúØi;««£L·tùGógÒs ½“oÙ(Œ‡/ÿš6ãsüûÊöo§9w_Á¦0â-ÆpúC¥í*¿1ý¶ÜHQâ³]}9Nì ó/1‰/æ¼r]}Ò¯ù2&è}»èPµÏû ,æi4¿ZûЯœ«>,Keòì·æ«Ú¥Ëà˲år¹òѾbs™n~±YbWlí±9wÌ•yûDG¢,“ï†#7lå>ꤶúHZ |•Á¦åÊ£ÄqÑç‚\ýÅ(®ð)‚:!Æþu×Õ}’±«L Èå]}Îi ºÉ<ÎBY'ìÂGœ±ÁÅOœMøòp&è,*2ùÃN 'öœ>ØYP`äP|O'ký+=Øù*2'pÆPâH #6é!Û¤‘D6N z½[,piªº.ÞVLƒ&ç¾F9rÃ6@µúÑÇ'i(»¦è œl2ÑIM|º£žu~½tË€âÁ"’¿dRµ­ØÀýÛ×vþuz“÷Û¢­ÚpÈ '>ÿñÓP8w]]äô€—¸È‘ÓQr,±¢X,Þ¬lŽÍ}&÷ÛrD±†s™8ǃ¯ñ9ëLè¸ÌiUy8Ÿ•kF Ó”ó±ÚÀÅgþ,g½äÎö¨çüÀ5ãÅ^0ÞW…Ÿõ‘q1ÎÇ⤟†Ýb›¹U·üÁûR}µÍ«pÁÑ^VŠÁ÷u0·üŽÉ}1‘s² Ph6·îÂ÷Ï‚C‹ö£Sp?ÝÿúÉ´±³Wû“>A"S¨ùî|So›à]7Ù¹a4·HjkÁÔØ6ŒÛ@S&øbz ŒÜ×ꨖÁâ#ãäræ|)1|Æùßú Ü‘“n…·ñTRSpþ¢Lç-Ëûøz}L÷lf§8OçÆ_÷°ó¯dÊ“´žÆ=x=¸ Ûؽ³r­ÑÀìŒcNösàʬ$÷bTØdtlºmHsœ.öˆ7Ýí»aП4‘Ý®ºä;y 21Jã-äV"M˜cKœÒ[``¿pß—éuƒqBY(„|Ê•]8¿¼#Sûvè–, _Z~)l˜h. · ÅlúåËËÊ!Û‹W6mšuÃSl€8ëé W~\„Ù1nãÑ—üƒ£ M~<%‡â¨‹Íô܃ÐbÔîrœPyQ!›ëeEm0Í0¡Õ4x*\ðU¸F>ñ3z }'­ÄzL‰‹6ÃÉ® CFà &Zib€/`´I¯9Wícc^ŽAÇÁxæõF›Æi·×¹¸fèÊð:fÈ0Œkð£à›=Çáec¶+“±~6ò¹[ð wðÒýú™²Y¿YÆ·-â+eÁÒ_0Jä-êt )F™cÉUV ³7ûg¬2Å<äJàAlb26bðòú«aÒ—¾È•‘J¬ÉWÙLþ½/ñÿŽœn¹òvV™dƒˆÍ7m¯,¿g6n(ec‘8Á9Þ1f9üÙ!¤‚!×Xæ"å³a:P›4ÅVùC#>OäU®º÷-ü‚BÚ¼ñŸðbߌĮ“šÚ«äŒLl’!û2.ä˸˜cŠŸXŸŒ!r‹´&º¾h˶€‰¶àÓ•@i‚1›Áû—¾í/zù«^ N‰ã 1þ?W´Ç÷ þaµAGöi£·¡¯ØÅ!¾Ñb]¸ÛÄn™{c¶7 ç“/FÔï¾x.ž½ÅÜÜër4QÍ—1b²„{¼bµ51üóÔýµ`4§Æ oÇdñY&w_[^Z0SÌù—.ã»n‰Ò.À]ä6a½ôüÙ¥¬D:RâÏä–¢/6WÞÄ7Ú–·cJ½teù¦Ü€1çÌœqPˆ÷˜Ì½pÈ|ø¯B¯ã;N° õ&ÞmÒð¾¼?¨:;6p4 9ÑXD?!-œÁeqP¹úÁ¸Š‰s.½eߘ(m"Ÿã¸%YÓIÔ1*3‡OöŠ3;šŽ“y[ѭЀjŒÚ=6Æ4qÚðýÊîŸþæç™B†ó\‚¥Éðþ~Å ã†aÌ3Äç2èµ´X„èç†(äÔµ¿-Äb¡¹Õ&>ùd¾™Fó £Q|ŠaÛwåhZÛÙç#Èâ·mFZô“ ƒ—ˆñ¼l%g“eÓ9vÊ›1ûXÄß‚¡¿c¹Å®zkœÅèX³U«èÎVñ&çq›Óo}¡ÛåÄŸò-C_OX}$¿‰Œoå‹Í”mÁ—Ű¡Àöú╼q¬n4l†— ¸Øâøiò'jÓtx1YãɹaZ£MìøóÈq†ÁlƒWNZ˜ØdŸ7'¢¡p±¡8°ÉýŒ0AqŸ:ý¼åÉ\&®Á±#ÁËþvLvŽ.ùQ°ÂÏÍ&@™Ølâã˜vOǨm~¯´Y‹²6¼Kkùs@’æ£ÍÚJu¸¢Ýû§=Æ‘sØä:‘C´÷âvÍãqÈ Åó›–üÞµß2& ý^ÊäF²\c•5ÞŽF V(.“Ñ ­imÜO{GëéÀh3í™ŒÒÆdŸbx1‰l.÷¤õé>í—ye eÜ\•p×úu› Û•4nk&KlħM솃=çlÃH>Ê´Qöf¶ÝâÐdàÑG^Å‘ã¬`L–œiŒÁø¬ó<^ãU[(åUãzòœón¢tK…õéå§Ó9ü³­Ã¶—¯e3N 6Þºäf_JÛ » JÄ{È"ŠOõáR/(Â-ÿ^›½˜¦‹K˜;0sÀÏݘ†rLíbw-DP¿°Ã‚8ÇXÉO’~µ?QÉEÖ[ŸˆÏüŽ«ð&äÖ'«×¶x¼Ÿ4XðI…vk“às]eX•åw_”snÅd_ÓžõÈC^ó{£3ËÆù/^xç\š¼Y³‡\c}ÁÇBÍY_ó.ôÇó;q«gUy>ú†=½7• !ûC}]–¯ÕcyÎ=˽é®tèß7âwfXãb;sÍòþ‹Iéò¹a \ikG©<óŠÎ÷gýˆÝlJAçè³Ï±×ƒ‰ºáå +·]ÆyƶaÜßÐÁå=¾Fî¬;)¿¯L..sd}ÏTœ§ôÑSýôçÏðÌ®;›n™ò,þ=³|F•üå—/4ÚÖ–¼àkDä`'ŽïÝñ¼@‘Ïq_ÆH.Æ¡‰ìãvƒÄPw»qÍc>;Ý•Y²ÐJ:ÇÑdñåÜŒ 2]ÂÑP0t’~ðÆXÏÃU9msÌÕ~{~™Ï­A«=Ûf³+Xúަ{ulÐé#ù¸ØX¼/}hv‚%Á±ˆÌÓ+\Ÿap[Û$Åå*ÚÖt‘fð³è¬‘Á¼OÈ†äØ€\Æ[¥×b00ªKÆ›ëÑG­‰‰¹Íþþ‡†éÞûå*ù2y|›Í±$Øxë’¿ó)¬2ïðk o©Âç¤ó¸ÆKþ õ\CȲñ·¢²óLúƼ¾’]~ÐEÉí `ã#sÿÍ6Ÿ‚H‰ñ °Ž· ƒyÄÞK¯í|½LäC¡.3' ˜À¦¼wÖ²Š\”%ç}³³Ë«~4'§mÌbn$I›`ͯ2W!\©(¹½‰~ï#ÛÀCîlCã?·å¿ò-§b4_у=Ø#6ë‹ù|•‘qÖH"7rË4p7U´³?‘ Ï•ÂŃ……÷Âóä|¤>¶Ü ü)¢×hë8æÀ{ÿÈá¹â;Y¬§Ÿ–?nÊ/.pÅäXdyÏ ìÖÎR * ‹Ê6 Œ¬f¤¡ØH˜9c¬Uû‰¿^Ût‚/z…!'¯±íµ«\­RšØ º»ŸN>¬{ÔÆ—€ÎÆ)kæ<¥O<9H?qÚâîPºe/$|§Ä»÷þÛ¿š¶«»ø†!˺Áè„`:Éä7o¤¯oÿ¾Èñù¯FÉåqÊ9i,P|Þ˜~+û5^›Ë’"æ€DöŒœÄ íª§4šžW¿a…gÁõ¹+ì΋¸(swט·Sq[ÀøxUV»êÁ›ÙßÜÄ5mö^Ü·K?1Æ}œ´Ù¬,ŽTǘžý'a×I}Žu+#çàAt¾#Åà{E®ª 'ã) Êr1@騔BÓÌçßˋǹ]û")çtö±t`qPt%ç ÇãH•…Z1Á¿ 6b¸’¹*«˜™®hĆÃBB®Å†±žƒñ*¯¬vZ0¥ÏŒ²Xã~Ó#†\nS;õÇrœx£D%ógò¼¤Ü‡s¾WÿÕ¯ÜÙ»±îØÂ{hq"”7p|ù‡ÛØ`*nØ—ç/¤¦ß0{=)÷EÌ2W/~û˜s|ñ{|–ÉѳW¥ø>Ø5DnvòÑŒ¤Î£~µå^›_*±†n8•íXˆm€…˜*§é*ûñ ë×}–7뤛ÉöyD›ç$÷•F¾ÊÛ|Íñ™?wSñ„þE»Š£\ú&v}0‘V0O;ŸërÏd¿üU¿=ãn$L¶˜Œ/s̃t÷òn¬P6E‡3Ç“tì)=0?–>8?!~lÅ ²aU÷Éäöl™àE XPÈWõÙèG6®dÞ¼‚¥l\ÑÈjf[W<Ä^Eᡬ«Ë'-èÆkLôÑrLÖ×iùà‰aºç(·àý’L^ù\¢lñ?¦Ÿ=eqw ݱäOŸIÏÉî«z£ò+o0Êõƒ 6Ð7wÂ| 2ü2 äxNãútq%]œ~G,y‚3.xoøä拼ýˆåÎ1 *sè3×ñç°éê'ºÄj_(6¼×ŠSÁŽA‹«™»‰¬ŸØð¢<Ú\<)ø,‡Ú4Vq1%Àu÷TÙíERŒë*+/>êR8Ð$í+ýPöñÛª£ÏcìÛ펅nýé™V{VV2äÜ}´ –ÅdßôPšÌ÷ÂÇ.Ø ¯-7ÒÇvtו~ÖF.£ƒ·žà#æÚØ]‹J°²S°Õ˜‚Ì• Wh,6²ªñã5,6Û\íà÷ÁbËML\Œµx˯ÅC¤lkbj,o®ØOBvc‰dxR#F¨ióþH°qò_ÿŠnw"Ý‘„¡úïw~U•¼±€‡Ê'Ëæ“Éä¯îüNÚæAjÇŠÝdæ!˶`‡¼½¸˜.ÍÂqø4OÀ‹Oc¨Ó¿˜ñî½, ôƒ±>I©ÓªÛà3ÞÍ|ÍB"gc¡ˆÔ9j~Nšôqºž`¢^æt®1ÂÍ[ëÚT¯Çœ1¢“‚Üpžƒ³G± f.rËWpÊy|C Éb€Í2¤ÃS¦ùâ¶‚ ±nKißh#ëíEüý(6æLé¡=÷¦Öï–ÝCo\ž¦ó—géü¥izs ³«ãjú±t`y—ä"½åÏ×·Âë[`5é:0nß[•Œ킹ŠM—«—©ìBƒXÚÄbÂ$9råy•‚°!jwc e_Ôo=7l ǶØ>ùÉ~:qRÄ;ŽîÈò{ó/¦ßœ}NdýS² ä my2±p|uç·UÏ#1”iãÿbÏ9M¾ÊPÍ_=Ž£Ä;Ç“Éåî½v¬¢Y\u49¾¸\å.8ü:' ŸiB’SVéÓIÚÿÂwl^Ž™d{Î¥ãû >£7±E/<7_iT8ëk—~«9úrý ×XÅÅ8·³?}Ä0¯Ø'ÍñÂÏârp´7í®™ßÆ`rŒ}`ýPzh“Oôþ '½rqš.]¥£ÓciíÜ1XàÓÎÀ 'º~oJ×qû.X¾ã;é­0¢»¬\û¼6ö-1f/}îŽÝÞÒc3³V0¶²¡ìEæêv/}èä@nŒ˜c[óÕy…ª¾•Ósôh/ý'Oæ£;²€üÚô3鹓oøÒW6&N¦“*Yy|‚¡N>$—Ñã²é2A˜ýêâ|ºìO#D“8ë§äpŸÚ©óùÓñß±ç6åIŽƒèäd64×û(rÜ€r¤!Ÿ9’W8† xÚ)SÏ8vJEõy+x¢Vó©M}žWmÞP0ä`{™ð=_Ö­iΆ6Ƀ÷'TÚ©Ønϱ‚µq¸ŽWj‹ãT'æÐx_Ú^Ç¡XÏå:}G'eõÁSÃ+㡟¤r^løô±?›Öúãtöå«éÜÛéypÊríóæÎlLЯ§Êøµ°×S(·öÙì/È«X¾ø˜Hm˜‚­úÛ%_Û˜xKöŸ=3Nç/,¥ñ™ç,4çÏëÏËE‚=ÑÏ_`œ„•¼-9?õ)|WD¼£èŽ+ //ÏÉ3Ô•tCÈ“|¾q¸Íx° ÃËwçßNß›}[dÉQaMÏ“˜ãL¾4{«¬&̯9Dãjßb޲ÀÄmz«mÎY@ô狉TVZ4ôF¦*øÞbGn/ºÙ(׺ÆðÌ­±ïò‚]ü”…Ãd¶ë2œM»ôMÇ…ñEÁB?ÞèmhÌɽÏÓqJŸŒßq$µÅx~N“Á(M0q«n±ls°Ð Óáɾ4’UŠúHîw™öM˜G÷@ŠS±®y•žzàgÒñõ#¦ÕÄÂB"åÜV:÷:€äý‘ó¥ÈòÙz〈±¢yÜ –/jWË[a‚lë˜HÍq­Ä®b¯·ÐñåÿÙÛ|8‹É¹—51 Ž4W!O>©òDw\ùóϧßZ|¡±QÏŸrý`‚°ß˜~¥:€.@ÆRV¬LX'\Û›³srD¾³K¸cÀ}²Yâ È¥´\”³¥²Ï8÷ùrß>OFåÊ !Óì øíà¸àH!¿ÉÞOý¥\ùñûaãvÌb#o¢Ä»?bµÑi>³‘ËDoE#ú´‘Ìòe •ŽV®á+H‚Ë9HàÐc¬žaµ&+Áƒ”F÷¢qxr@â§y=®Äocñˆ¹”“\>}àdzòðc¢]/=ûâ¬RPPΞÛödàš[uÈàjQ¹pPÀVü.A5í¤ŒQ¾ëO ùª>ƒ]bIæÚØÝúü›Ÿšèn¬ŽÞÝqä¿ýªD¯6*ÈþCŽ_ënN_Ùùí´ÍƒÓb 1hšZ±ä2IE lçßM;s»ÈOüt*Ïs^9LX},æaÑI—»d× '1Ï'ÿÅŒ«>`*䣲÷û`\=yˆUÞ!Á±¤:.¥Ã=ééVò¿ò•Éó/m‹ìg; É{/üfšàc¬![0[©Ë ÌÎgœÿøi?¢£¥;ª€<·|6ýúü™¼1 57FR–9a( ã•å¥ô‡Ó/™M[)Blüo²Ðªýüìlš-wDV[À{>NZÜEÂÛ\ð4ÎV[³Wä/dèö|êqx_‹Å6ŠW!§<ÊôQîc\,":aÖ¸Øej<BÄ‹E±šSqz<ÃV9ùL×FŠzñÇ|%?ÇPŽ˜Cx[þÏP²xpŒe¼1¶Ø<ϾÁFÚ?Úƒï¡ØH5ޤÇRÞ{øx­‡úœ“<ÇS÷|×]Wï„d·ŠÉóXœ} Åå5}†¿s’Éo9Áóõ­0ÆÅúXŸà¯ ãö]°Òã ùÈÑ^úå§»§ ¾Sº£ È?[|.ýî⋪¬l|ø!ªäUì«óï¥;ÿcõ‰ß&“ÕNƒÊ"†xNJ¼ 7t,9àYä©tüÇ¿Xy[9ÝÔ W-gßµÍ%>ð2y\ÿ2ͧ/W“f…w»p¸ :ðžqôªs­žþË9cÜò×¹Ž_âÄï± ‡Æj\lê'»Å³ Éç#ÿ*NäkÄs\¼ ×u”¾‹¥,¶˽¸™ö¢51$Å‘Ïâbóth¼_¬$ÅNrùôþ?‘ž¼ûc"¿ôìóW¥<ÿÒN:û=_Q«O·r¾Üèʘ‚½Ö¯|Œè.+Ë"Æ×†§ívc½3ºc ïéšZv_åí56Ȳ¡ÙdàãßšÿŠÈ9óÑ^âòäDg–ˤB™·Êà „ºõFR(¸ŠÅ#NÒuþçˆWÓÅé‹ê»c#'©,¹Àç3zT–•8!çt®D¼Ÿè“ü.ƒ1Fac™¼\i èÅXÇ’²ŽæyVì䱿`—Ýv(°”HUL–a—þŠ-û¼¹êðU‹â4—ŽÉd±«Îâqp¸/m×3¾æ†‡ÁežªûÀÚá‚>¨ÄË®«÷ýÜ;ÞuõNˆ+”s¯Î´ |wç¶=ÛëãOºÝXïî˜Â'þúb·»ù*×"ØH+Xl_žÙñÈ:á¨ÝýÏ ŒÇ&öô6Óž´)wþ=Ðß/ãËÛŸÏ12ÑYœt“s„ Çøt±“oâ“ñ:Ž2ž¦o1{ ¹ôô\Lj-ÛL&ç1îÆ[°{¬ØhA¡àd>"Þîü›qÆ¥+ë#6ñÛ8*›4„„\lÜ$ÿÙŠL0à“õF^ãy‚»¼èy$ÖÆIÊ6W;‡Fû廯ÁßÀÆ\$އ6î˺ûIm¶§î}ò‡²ëêìöúÞNzÅäì÷¦R\„ä»!çK‘Û'x¾¸ýú&xrµ¼&øwÁ¶éÃ'ûé/~ROëîèÆèŽ) ¿¾|&}}awÞÅÆÔœ”…|ƒ‹›Éòc7,w;ý«ÞWuãmÞyO`)ÒP2zR@„Bþm¬"¾ºý/Ev»O–¥?ÓI¥{ðù’7aü¶àè¯'vçꋺ\?²¸ú!s Z”I£ÙI¥1L£î2âM¹àScðLß”àÄRòUýàÕs[èÃmæçn*9AÀ}9®àµÑà¾`½/«=^¨«µ7Ç ²ç%ñÉ‚#9XΕcí÷8¥¢÷P<îFñÐç• I?¤ÂI.Ë®«C?.ÚÍNÏ~ÛV)RT¸ÖxÊù\-* Øë)‚jÚI£üzV;ô­¯õÒñ+öÛìè†èŽ( Ü}õß,~UxscÊ2~ؾñ‘ÂÆm—o¤ç_G©˜`M±GV,¼¥¼?;$ãã†ò_ÁdþÇÛ¿«6Ãøä#ýŽ“›R‘9=¿¾ýM“O®~ÕÅgºç_`Å´+,(âêÛ¸‚DWZœta »ŽÏôÓŸo¥~<¸¿wÇŠñ*×>ÏÍ¢ÁâQùv±q˜ß}$Žy«äªð2~Õ™/Æ9†«•{Æ Õ»ºœ»äqwc¥rbó}²bò<ÎK|±îMOßÿçÞÓ]Wï„Î~WW&σSæµ™ä3&ç‹Øò‡àŸ (`«¢ÒÈ!´+f»[Ÿé“Y‰ttctG/¥/¦Ï-ôÖ%e#Â8l`qcË t>œêhÿH:šîIû{Òñþƒé›ó¯¥ß™}^!†•‰ 溰œ™·vç÷E΋`´å±‰ä>Ó_ÛyŽÖ2:7Œbù_uÉW½¼ÛˆƒØˆ%gãõ$C¬·† ÛÀ$pëx0·AÎ.ŠE1ê‹yÕnqfyù>OLŽv§æcs_Îåzè‹ÿ&<5WŠh·ùPem¤}ÃÍ´“;óä8ñ(w[ÖÑ÷žÁzztßCV¬hÔ\1Nc<Þv]­ùv ž.ÌBòüwgéìwP\^Ñ›y 9'™|=Ç?Þc\¬oÕ\Ý“ß)Ýä3ËϤ³|–zËFé6>¨ê@ÚŸ HÁ¿ã½åÉ…G{«û£ýATþã¯ò×…©Ø‰ó˜WgßKßž}ÍüÁç:È'vÚ$eð½¶óMØSc]æ·Àç3ø8‹+ùõxƸ7’Õÿê–¢#oJc4?à9Ö¸åì/øÄÕ{dU±f‹9¹¾‘Ýb¶âÈc$>Ä«-ø¢MpjãÎUW15Fýš#ʪ»¼ˆÕ%ŠG±¬ŒÝõbç•ëîý ¬$ÜGªq$ï+¥ÓûNOÞukìºz'ôì¿e!á*ežÎ¾Èã(ø,üC°ÏSõ2Á_Æí¤Œ)X))»`y7ÝÿòW¸½ut#tÛ>ÅðW—õwY,Ž¢Hð>²ªHÇäq·×û$C>ˆJ.FÌ£MòânðµØ_¿”¾=ýc„@w¬ðÆäd65°µ½6ýpúÕ¹-âsŸn7ÛbþZZ.êÛµówù©Ã²«Æó ñÖ)ËùÈÖ—ÙëÜ.à àpV!'VÅ»ÎþØ?‹‡çRŸçS¹™£`Ì/8j}ÙíÄSsë÷b}£åHu?8Ú‡•Ćx½‘®iã{xtïC²qŒ¾w’cIÅ&g]Ý÷ó·ì®«wBg¿3“•Éó/² Ìí"G|NúáÈg§œÖ;)`eüZØ&†¦½ïcõƒ Û¾€ðQ¸_Ç?YUàßü»ÞBÑF,, $™8|c*º°èË2|°¿<1½0{ÎìćØü£PŸÇ_/]˜žMÓ|¢úT&W=OœÎñ*Å€Ç5ðaeÑðc:Q’b Ú\/Bô‰Rl”CÞØ}\ –[YÏ8—agŸ ²ï_?´"·Çke5°Ÿx²Ÿ¿ÃM{£tGìÂúAŸdȇQåRH7Ο~{^NáõIFÈ7TÛ0uÒe;ÈäoÍþX.D¤.)B¬OÂ$‘[|P|b!©s*ŽkŒÞzZï¯ËEŠþvkãºAPçÍãw.8PèGâ »Lâ*ÄÏÈbcÁ`ÕC‰äöï}g_‹ºûhç„¿.«Žr¼ŒÅ°n‡ä2É}<½÷ðè`)â­ã³.¹‹ýVÇÖô¹¤:7Éó›œuuô̹ëêÐÙXP–ZPÐ~Pg{ýÝOõ»ÝX7@]y›ôgv=IÛÆˆ ñz Ê7g_I¯û|ir¬pN8£9ÕõK(>[ þ…oX’É<½˜,nô601Úe9¸†x}û£-O¶ž+ŽÕíËišÏ_¯úËqÖ³eúÛòH\Å`r1{Æ„¼múÕù«i¾¼Ìµ† ü®±O ù²]‹Ï–_Phþ:Öd¼ºN¿îÆj¹%¼èšƒ+¹$Vú°*>Rô50;~"–f¬ËÚŸâÔ縇œ<5—ùsLÄÅ÷"^7›ä—“•åú^çá~}O$Ŭæ)6ž¡õèæ‡P<|ß9ã›NбärÖÕ‘¿Ðíºz‰ED ä³úBù~ôK×ÓyåWüûïèz©+ oƒ¾ºørú§óϪ'ùMvn >q¨P0_™ývÚb|˜t\WCÐõ¯î=ýÍt¨wWZ,/¥ïÏ^PŸÄ¬8µ²O~Ûó ò4ÄËíÖlŒq)båXGOWn+Ø0.Iý’Wó±xí—"PâÔç¹Úó(¶.1–ä1m¶^zêðϦã“n×Õ{I, ,*ÏŸ%OéÜKj?s¦—NR¹£ë£®€¼ bñ`!Éä ŸœM6 Éd±‹xŸH~wç7…û¤§>—ÉÁÀ¥hô6Ó‘þ=éîþ]r,þ—Q¸ê`qŠc͘0Nm¦‡~Ë\ršn½à C9ëö~‹Mužvüèæ‡sñŸ  Sb™›ÔK§÷p×ÕiÑ:º¹èÙgõl¬ãÇÍÐÑu‘þâ;º.âE‰œ“t²õŒƒÔn“E1‹ìvϰàõ´7šÿÒ>„bñÈèDz|òcéÑñÃéèð°±cL€N›û¶|±‘| ƒþšÙ—Ò/rêD Wr{±ø³9øô¾qÚ3ÜÙòYoMc˜ƒ}À0À„í¾&'ÙXš˜a¿Ÿö¢('¦Äzîbó8ÑÁÔ_lÌqïän¹Æ£Š#Vxù×Èeý û¼Öã˜\(c Nyi¥îºzbßAéèf¤“'»âq#Ôë$Þˆ‘Ç@„8)€|¢)EÉ'&™h‚ò,M%&úXŽ îIM§Ç?šL‡¶â0òœN¢›œ¹bŸ™[ó¾ø¬Ž>&ÓÊÑ'J™BCLö£­ Ê346ñ¸çÀ?Åiœäå ÚôÞ`“/"Ǽ^¤³këÉDÏ~´8Õ˜,ƒÔÆþ,î7Î;ð”"ÇF?Ñç²æ£M¹^(˜ûé«“Ûj+éÌÁ'ºãÝvÔë$žyµÕã5 :Mèäcd²N:ªf;Éíl³ÞL|¼{ïýûÒc£GÓããÇÒÉáÓfoSV ‘4Ö’QFãý¢r_Æ›²øÑ„Lö6êíQ®‡&drÌÁÉïÈèîttt4­K1P°ÄpÒ6\K€ë<[JV>°^|Ä™ìXÞ‚dŸ¬:ô=F<‰´ä&ùÔ¢,vÍÇ\r7];aoßÄ{΂#æØähº{È' æ^rlõ~²Íå¥ìºêŽ{tt;RW@®“x3F™:8)8q’“VÙUi+(Gû÷¤ O¥ÇÐ},=4x¿ãàgc‰kÄj_ Èà N̆NÝÉìÒlr”Ó_ û©tp¿oxXŠCÐ6 ø–¹Âäí±h”+]…¿NÖ×ï÷°âXÓÛˆˆ½ä'•>!0F¬…+V›çä®#Þ׊Ç>,ƒ@Eò<¯^%dýñáôÀ䞌!W*¹š¤‘è°7=±÷1‘;êèv£®€\'=¤XdŠÈ“ ô`—‰ÆèøàXzbøSééñ_KOOþZzdpRІã"Ösd 9¥/ÃŽ{gºçñ&ä:D±™úÅ Úsš´¾wtO:2¼ÛŽ?ЯSêúànèhCˆÅKZ]–ÉÙ°,Z(>y¢qcôÁÓ|J Æ©½Èš§i÷&ù‚ÎÉgrðŽºB‚‰\z—÷SQÆh_,­½O\[÷¥Ímç­ÛuÕÑíL]¹N:·<§„S^ep²Q.dÞ^‹Æ/§§F¿~2Ÿ+BÚ²ƒè‘Vr˜.6ÓIÞ_$×#Vò±Ñî6—AÃ~)@Îy+®8ŽbµÁw!ÅI›DÎɹǢB2_™àu"m6âØz<{‰6‹õUÇú€«h÷2bùWúÑ8Ém*«Ž<,›¼+nSrª=ÆUp9Æ]O¦K1ÖI35mJ§7IÇÇ÷™ÖQG·uä:ˆÐy–'0i2¡è¬Âg‡ïKO>žžýÇ(¿˜~zð§ZŸ'²Í'#’˜Ëò 1•ébÓÔB¥?%'щ±öÅØÌ99š¬:XÏ݉Ìë"öaep„»ªlÅ!x÷áqÎÇ}®$Vý¥ÏÀAÇâÃ+¿ñ™ñ,®jÕÁqêXcÿ%Ÿza¶2ékãÁîûƇ­ ¹_1Ò˜Á勌fsÎâqjãCrÚ. H¥œ«Ä”æ¶¥Üëê‰=ƒÒQG·/uä:èyÿÀÄÀID&N Þ>äxE£ÿ‰ô©áßIO 1îÿDkшtÿ4Ÿ%2ÖÌO\Ðésœ±aFβù5V2&Ú9ïKûÑîÞ“ö늃~¾Æ)Æ‘ÖQhT‡Ç&NñE›f*>Êh“á™ ýôߘƒñÞŠîùJ.m´ÜãçÊiÐÇfm6ã2;ûªcEÖd—Ó#ë!Їc,‹çŠäï3Ò™ý?Ýíºêè¶§®€\½VR4Ò±t¦ÿóéSƒ¿›žêÿU)oç#Ü…%$“NJy"3Ò Òu0™ª ëz5 Fn$¹‚Ì¿ªK?2>!y9QÆ8oB®ç ªçÝXîGSp®7|Œ98ÜIþpÚƒF¬ã¥_ÛÅF§è´{³ÜhŒåÈèŠjÙ¤ã~ÍǼ– ¤\ß™ÈðÉéºkÇ%Ÿ’¡%‡rÏSxô/ÓéÍt»®:º#¨»ý:è³øÇIÿÑÞ))ïäT¤8ýLzaÁ³º8ã8û¨$6ŸÍ„ðzC§Ÿ¸?œ~)]Y\›çò+º‹LAý¼ªýØà}éèà0¤Q:?%}cúU4†ýhž¢ §ž} Ëw™7tœŸÏ1äbcP]c&øÌ¸ÊÑ+Öí®À;|ª¢c46æªl†“üæWLJ{û{d%ÕO¼!"©ÅñÑûca¦“÷§»‡+Œ¾bI%žäcp òÓ‡þ’œ¢ÝQG·;uä= |G_›˜š•lb4›L ¤¢mö¯ÓEÞ‘—¶à/¹ËÉûþÁ}éh_ ‰ß|9Kÿfë "ç8Ê’Kc=—cD5·&á³Ù5Mú$9Òr “ûfS޵ˆÏÆvyþjºÂ[Ä Yk¤,Kª—ÏÈÝß'Ço2Vp$Ç1Þõ˜ÃmEfñ8Ê]s‚)yHn+±m¶^zêÀ™nõÑÑCÝ.¬÷’0ÿp.õ It0o>?‰NÙtRŽ#M¼ Èœ\¾?=6þhz`p¯^Õ0<†2–[“h¬“Êe×ŽèæºˆçwÈj³]D&óŒ.“à/O@¬pË´6¼Kln׆,“Æhó1É ‡ûõnº–/ÇGîhÓ+_¶©ÿÑ9ûL}jsb'ô`¼Ë§7º]WÝYÔ÷€äžZàyâD&ºL`:{‰MtQ…dÒ3yb÷´"e ÇÃÓéáÑ ¬<êÂQúPyÏà`Ž•Ü"ëDœs‚|,b3¢mmp@ðÔÏbqöÃ(¼¾CíæyYÆõ<®ÌƒÜñ0?oˆ(÷¤¢Íˆ£ˆTò316VŒX<šðZbÉâµÙø[mvÖÕæC騣;‡ºò.O ²IH§³¢“Ä&²@ÔóôfØ<ı˜ÄzûÒ££‡Ó©Ñ#«÷ÑâKI—õq7Ôž7çt=rŒEd®2öM.@Þ“öÚªC|š](bIk§öŒOÈ ‰1\ÆÃÏ3ÅîÅJaƒ+'£è÷IñâŒeÜRVǸjÝíÆøšÚlgöþ{ÝqŽî8ê È»L¼¯LRó„f$¶ ûd–§+úLÏX4ŽÇF§P<Áê:ÌNOœQS_ïïmäÅ?ÓÝ&œ:¨ø7ÀJbd«Žýr‰œF+™J|Éá£cüRV!kƒCÙJ".÷cYøO\ä„Ï3¥4Ÿæp¹ôr9poÇkP?(g¥•þMjĩ̸UÛéGÓñÑýP:êè΢®€¼ËĈLQœ|Œ8ÉdädzžÔâ.- Pù×î‘þ¹§ ‡ßEˆðO¢®i„¼Ï}ýƒ0±/K™¬/X´{†bÕqXf»ßš® L–Åï|m`cÈvéÙúTsß3º ”ŒÓeäK?Ѧ\m\)=ºvÅ?ÃkÏNeMrÛà'6º]WÝ™Ôw™ò.,'3™ÐœlËÓ•ùÄF“çZš¤Sƒ¤§Æ¿~aò—«{jUx fË:‰ºáHr ½WH÷\2S§Ñm¦ãדœ^;]®&7¿ã5y™¼#'–ã×± ÑIÜú4 Oåóºxh¾0Â"‰ŸÍ0”AŠâ{¤‡'”ñ“Ü^bËXcó~£íÌÞŸév]utÇRW@Þe*¥ dz™À(˜Íd^{òÄà§ÒÓ“_NgF?'wõ¥-OtFQoæÌ:‰ºØ–²KdkêSd3ŸÇèïKM>šÝ+EhÄ"DŒM°¯Ó;I4‹¿XA‚çYz0_ì‚YêÁrØ÷÷Á þZâµi^æroÀ€ÜÏÝk''ÝWUœò*.ÛŠÕ¥ÓkÝ®«Žîlê È»L×<ˆn$6Ó¥p *}jò7册z|&…R™Òï1$U&å>Ì–c¡o°€h¯¢{Ï‘s£±Xœ>$OIÔ¿¼ û}£÷ƒ[<ƒé±‰Wˆ=y?jåk/aÒ×Uí^<öô1Ñcy¼HxÞ’'¿ƒìw_Œ;9þ@:Ä]fB‚ò\¥y\Ý<×Á¾ôÄÆO@騣;—ºò.“NDódÝ'( ǓçOÿ–Ü”±íêwÞÀÑs9ŤºLºª¯÷êé$Åò‘ÁáôøäGåñº>Áºÿà ~^FÍj³ƒ¢î«îZâ™\<ÓJ @‰w¬Úl’©MýŠYãs%ã¡üUy¤b+¾3›Ý®«Ž:ê È»Lçy#E »\ëq í—;ú~jô·Óéþ·§ ˆæÒV¦7uË)ÔÔAÞ/¤Sö\.»ÎU±{b´zÜÀñ|Bây^å6ýŠÉìÞŠgd Ò]ÃûåL.}ô¬ú«\ÆIq Ú4ÏJ÷¦Мr,¥ˆ­ä–\h§×Nu»®:êÔw™|'0Ü”xß'ŸHOÿÆußœqï€pÉEÁ':×IÔÍ&d“bÖAœüY$ÄnÍsqÕÁg´²â@Šþ˜çîÁ½ðÁÂ>Äbœ¸€W+qÁŽÆã*rý§ÊùçnáŠéƒãc!Ƹx#¹­¶’Ü&g]­?.rGÝéÔ÷€d"3:Þ;.·ƒªÿKétïíÝÕ—¤“¢Ê$™æ‚-O…Ðe¢5µ©oØn,Ûžþ¦\ÍÎç´³¸xΊ}Q>ÀÝX ·ûØ4Ʀ`³»òGÓÃã˪êž^îþŒ—+uóòÕqÚ ŠaÀy 塊GÉÖÀ³1ÆåÒ<_´Ùüx·ëª£ŽŒºò.“?˜ŠŸbÑÐÂñøÛ.¤£“«) N’yR¤ìÓ¦Ùòtj: mX‹È}³xE;¯fÏ8ÈOnävž{+–ì'_™ k»Æp‚ht\/èƒí¾ÑÄWáe"g‹6rµ»ÍuG'?’/<Ì1ù])wäŸSþ¼@.žœJLJ˜ÖQGuä]¦£½£ééÞÓé©ÞSé8þ½Sâtò$©ÄÉ/O®”­å Õô½}žñ´™N ?”¼eÄnƒâ8‹'I<)OÜjá+ HÞc#£ŸÅãÄø¡ôÀð^Zr^®xxqb[‘‰lÚ¤)–qÃ^+šZ”"dRã­ô›Ú쬫µÓP:ê¨#§®€¼ËtÿŽâߊä"@’Mvy²ôÉ/NŸ2ªLtî’ù ã?=:|$ÝÝ×› ˜•œ˜PI%³Ûíl,êòZìÂaå?ê,'GIâ1œOä<-XìòZ¸HðwUÑî>÷„ŃW›kÞCRœ¿zT¡b+¾3ëŸèv]uÔQƒºr‹“¬@ÀóTgå®:H'_•öî‘«ÚŸýTÚìñ¹…D&.ç(^‰wŸX”ú˜¼ °¢Èx7<Ÿ ò±ñ£²‹Ìs{ÏÅW!:ù³1ñ•>¼ éªær@¾xƒd¹r¿•\Æý§'?Úíºê¨£ê È-N|X”Ox¤j¢]›ë<~òäèO§§&¿ Wµ“îéceä8Éç9,ªò)‰§a×Ó‚áq[àû{ûҩѤ‰<™Tr;Æåû‡z,„²¡ £}Ä«m)ÇRɛeð!»¯$§ûäýs5!«êV4b>)’ÁÎc)|\/)¿—qE.MmÌYlgÖŸìv]uÔÑ.Ô[œx-ˆL|™Âä(Z™8eÕ1øxúäè?”ëNšô`߯•Pݧ`R¶7}y2V _¹û‰×„«+‘¥<‹ýƒñà<¨äðü«c¿ð±•þ™Ïó–,N g¿7÷+©mV^2'¹Äë_ŽË)ÅuÔQuä§¼‚Iµ19úD ’Ó†GeeÕéÁ~9+¬LØœlb‡Ôô…˜½½ƒâãíƒÉD\å®Ñqòvr,W+GüXˆ!-v^ìx,£(Ù Y?±ïÝmˆŽUT_zbü'¡tÔQG»QW@nuâ„Ê“°M‚>‰æUÇð/¶®:"Û<-X'imj×Ì|]õ)Ñγ±øDDž|rí×$±Ççý,e"r –§P®!ÑÝbjG,eˆ¤Òå¨)K‘άý™n×UG½uä§ þʼn7OÐ÷¥§ýºoB:ܳSŒ9K^ÍØ,PÞ)ö)>Сޡô‹kEO α<6`I9ÑÑ&«W!´Ñ4äµþX®–àŸRÌ’xŶömŠqÿéÑcÝ®«Ž:ºê È-Nâý°l”U‡Üå¯fÿõÒ‘ætP5ñŠE‰ö죮,íNOMþ£ô£ƒÇZý¤,7'qµVDÏÈòÂÁƋǤU‚Ùb_ž©=ߪÕ-|ÏÁVÆçù‹ßmÊÏLþl·ëª£Ž®“ºr‹“O›,$gúg°êx*À¿¥ê@:_âdkTì61ñý'GÿG!ñƈÆ*AIGZ&zËi-Ë  Ãóûu! ß/×zh  4|&Õ¢Íå•>@§‡Ý®«Ž:z;Ô[œX8xGßOõ>•N¥GÍzãÄ|òœ›Iyª…-OÚ ·³`<9üiŒô¡þ‰\œ‹L§Q™Ì­ 9Æe#®Bþôørác[ˆ«‰˜§¶9F›Û¸bzbô“P:ꨣ륮€ÜâÄ2>…͉û?g$N°¤jÒ¶ ˜ÅãÌðÏÉê£>Ü?¹26ÉbyãD_²G¹Lü§‡Kgòw2^bÌGò˜:OÔ”bn§n×UG½}ê HG+t +NÌm#Nô, g.ìØ,íô¡ÁÉ2Ñ“[†’ÝdϰŽ95øˆ<ž«£Ç~WÜ’¡ŒOãÈ«1W6Ëm>&^ßQG½=ê HG+ÄéB6ÉÊDk$S6ô£ý#ééá_ËâAúpÿ„I%Þ'ï,[1¨Š_àã.+Þ·ËW?5z"Ä9yü*]k"g]¡0uÔQGoŸºÒÑ qBª¦Ý0aËUíƒ_”ã×Cܵ¿o·\É“¾OøÖ‹ç·æ}ñâGžÕwƒQ~dpJ•°ÒX‰Ï«‘6›ö{fôsÝ®«Ž:ºAê HG+Ä ºšŒÁlš—‹?9øK‚y;ôá^9+æ–òü$/*œØyß®¶¾~fø¤ðçZ\q¸Ôfëv]uÔÑ;£®€tÔJþÐ+™lm¢¢ÿïÊŠo·xŽõIŽ2‡ÉÝ IXM°œßm•CÿG¸ iÄŦ6ôÒ´¡g9ëªÛuÕQGÒQ+ùtN¶2™÷~>ýtï ñÝq²×§Ä‰Ü'w+%^P¼x¼Õñ•¶UHYi늄>™ÿF aGuT¨+ µÒ»ñ¢œ¦Û?“NõÞù5&'úºkew’oO þÔuœgøè.«—c¡Ò‚¨:ꨣšºÒÑ»N'’ž% ¢xü v•±8<ÚX…x!á³Qº]Wuôƒ§®€tô®Óã˜Ð9áŸé‘ÉŠ>Ñk¬BPDä‚Á<¶ÒQG]›ºÒÑ»N\q°xœ´•ÈŠdÒ³{dÙúƒ@v»®:êè‡C]éè=¡tñpz«?8¯»®Ê;ꨣ,u¤£ÛЏÚ8…\å<ñn½ÒQG½5õ– “;êè¶ -ü;‡|ZcGuô㮀tÔQGutCÔíÂꨣŽ:ê膨+ uÔQGÝu¤£Ž:ꨣ¢®€tÔQGutCÔŽ:ꨣŽnˆºÒQGuÔÑ QW@:ꨣŽ:º!ê HGuÔQG7D]騣Ž:ê膨+ uÔQGÝu¤£Ž:ꨣ¢®€tÔQGutCÔŽ:ꨣŽnˆºÒQGuÔÑ QW@:ꨣŽ:º!ê HGuÔQG7D]騣Ž:ê膨+ uÔQGÝu¤£Ž:ꨣ¢®€tÔQGutCÔŽ:ꨣŽn€Rúÿ©Ë°t+ æIEND®B`‚moderngl-moderngl-773b733/docs/_static/relatedlogo.png000066400000000000000000000022261470420062000227710ustar00rootroot00000000000000‰PNG  IHDRàw=øsRGB®ÎégAMA± üa pHYsÄÄ•++IDATHKµ•ËoTUÇ?3sçqç=}ÑB(Q&\ ‰1ÄàÂÇ uáBbBX˜.\6.4º4] ‰1¨˜èF‚Q$@Ó–R(¯Öv:ÎÜ;wîÛßÌ\i§íTbâ÷äwÏ}œóûþžç†|ÿ#ÂÁ¼!ü;wäâãONâÿy L'øº16ôÀ»|çÇðB!œi! G)aä‘Ä[Ç?²+XÙk <±tæö7g0G¯Ñ¸;ƒU^Äu<|[¬ö\;v“}í(êËG‚MÝÑIàºø7§0N}I}j}ú ݱ%"B,ä5…:ÐOþÙƒô¿ÿN°±;:rà—0>ÿ‚Ú•Q*ã·(Ïh”æ\JKQækIJõ¥j‚…9›ÊõY¼J5ØÙËh5Œ÷NR¿AåÎ_,Ulj8šDs²Ô½4¦—Ä›’1‹¾Áû?9FßóOµ¶wCGˆŒ3§Yüú4 £×)ÏëT1jNÝÍ¡µ$/Ïy–캩’êËÑ÷Ü„Õ$±bµÄ‹Æ‰W…H}á¼¾ f1D=Û@ÏšÔs¶ˆÕ#'ùÈ7°‹:V¯Í´aqá—Ûüv©ÄÏçùö§*¦å06¶œÖÎ>úK>‚SŒ e ô¦â¼¢·æö;CÄÜlSëÜ•ðNW5æ4ƒ±q‹¨è¬i´Â¡±¶$©ªQ⬽97¿g-ª‰ á–”±eºLÝòmëÌSââð,ff•²n÷âIMHlÅÁ•ñC£×ºTÜŸ]—ËCfÞk+j…åŸð´¯”&‰!Æ„}ioBBÙt[_t¿Æ§ 3aŒSŽ˜Üß&U%–­VØ" æf>ôMr.¹ a/‚‰H3…Ø»oÙîÖ]YƇõu&˜c‰ºâroP¡!ë†'ðD/šØDQt•˜#Šõ Jt*cHÙ†±YTÔâ!æ 1–6¹Ršëx!¢Ôc!3ý$¬Q?A*gÏž8ÙLKw ‹î¥7ÑO6Õ‹›åÙ(3=‘V˜–½°ÐDªyƒšêR{’‚—'¥dÈɵ}«JZUع«™6ø²/ü8Ôƒô¤Hd 8ÙåM*µ¢'ÍÕ®ûfÙÚE—H&Á¡êK<=¸G{Ù9§7—bë•ã'V4 ã¨¸ê_å¬y– Ú9îVobhÂõ:¾éÓ`³œC=lN s|Çë¼Ús˜±[7n:LNøL*œ<™$ŸeÇšÿÁþïœ3ÏsÑø•ûúm4c Û¬IÈE†ÙŸ9ÀGC#ÁêNhšO:½ž&Ö41éO2éÞà{ó;ªV…9k–º£³7ö 'òo³;º=XùïX—  ]FJÆ)ç+4OJ×­ÓÞÊ›ñ7‚‡®+Ñ$“ÿ1©ùñàíÃá¡þ;ào.™aŸé[2IEND®B`‚moderngl-moderngl-773b733/docs/_templates/000077500000000000000000000000001470420062000204675ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/_templates/placeholder.txt000066400000000000000000000000001470420062000235000ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/conf.py000066400000000000000000000121441470420062000176330ustar00rootroot00000000000000#!/usr/bin/env python3 # -*- coding: utf-8 -*- # # ModernGL documentation build configuration file, created by # sphinx-quickstart on Wed Jan 31 19:45:31 2018. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. # import os import sys from unittest.mock import MagicMock # Mock modules class Mock(MagicMock): @classmethod def __getattr__(cls, name): return MagicMock() sys.path.insert(0, os.path.abspath("..")) sys.modules["moderngl.mgl"] = Mock() # -- General configuration ------------------------------------------------ # If your documentation needs a minimal Sphinx version, state it here. # # needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom # ones. extensions = [ "sphinx.ext.autodoc", "sphinx.ext.githubpages", "sphinx.ext.napoleon", "sphinx_copybutton", ] # Add any paths that contain templates here, relative to this directory. templates_path = ["_templates"] # The suffix(es) of source filenames. # You can specify multiple suffix as a list of string: # # source_suffix = ['.rst', '.md'] source_suffix = ".rst" # The master toctree document. master_doc = "index" # General information about the project. project = "ModernGL" copyright = "2024, Szabolcs Dombi" author = "Szabolcs Dombi" # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = "5.12.0" # The full version, including alpha/beta/rc tags. release = "5.12.0" # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. # # This is also used if you do content translation via gettext catalogs. # Usually you set "language" from the command line for these cases. language = "en" # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # This patterns also effect to html_static_path and html_extra_path exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"] # The name of the Pygments (syntax highlighting) style to use. pygments_style = "sphinx" # If true, `todo` and `todoList` produce output, else they produce nothing. todo_include_todos = False # -- Options for HTML output ---------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. # # html_theme = 'sphinx_rtd_theme' html_theme = "furo" # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. # # html_theme_options = {} # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". html_static_path = ["_static"] html_logo = "_static/logo.png" html_favicon = "_static/favicon.ico" # -- Options for HTMLHelp output ------------------------------------------ # Output file base name for HTML help builder. htmlhelp_basename = "ModernGLdoc" # -- Options for LaTeX output --------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). # # 'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). # # 'pointsize': '10pt', # Additional stuff for the LaTeX preamble. # # 'preamble': '', # Latex figure (float) alignment # # 'figure_align': 'htbp', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, # author, documentclass [howto, manual, or own class]). latex_documents = [ (master_doc, "ModernGL.tex", "ModernGL Documentation", "Szabolcs Dombi", "manual"), ] # -- Options for manual page output --------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [(master_doc, "moderngl", "ModernGL Documentation", [author], 1)] # -- Options for Texinfo output ------------------------------------------- # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ( master_doc, "ModernGL", "ModernGL Documentation", author, "ModernGL", "One line description of project.", "Miscellaneous", ), ] # def setup(app): # app.add_css_file('css/custom.css') moderngl-moderngl-773b733/docs/index.rst000066400000000000000000000004771470420062000202030ustar00rootroot00000000000000ModernGL ======== ModernGL is a high performance rendering module for Python. .. toctree:: :maxdepth: 2 install/index.rst the_guide/index.rst topics/index.rst techniques/index.rst reference/index.rst Indices and tables ================== * :ref:`genindex` * :ref:`modindex` * :ref:`search` moderngl-moderngl-773b733/docs/install/000077500000000000000000000000001470420062000200005ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/install/index.rst000066400000000000000000000001431470420062000216370ustar00rootroot00000000000000 Install ======= .. toctree:: :maxdepth: 1 installation.rst using-moderngl-in-ci.rst moderngl-moderngl-773b733/docs/install/installation.rst000066400000000000000000000061271470420062000232410ustar00rootroot00000000000000 From PyPI (pip) --------------- ModernGL is available on PyPI for Windows, OS X and Linux as pre-built wheels. No complication is needed unless you are setting up a development environment. .. code-block:: sh $ pip install moderngl Verify that the package is working: .. code:: sh $ python -m moderngl moderngl 5.6.0 -------------- vendor: NVIDIA Corporation renderer: GeForce RTX 2080 SUPER/PCIe/SSE2 version: 3.3.0 NVIDIA 441.87 python: 3.7.6 (tags/v3.7.6:43364a7ae0, Dec 19 2019, 00:42:30) [MSC v.1916 64 bit (AMD64)] platform: win32 code: 330 .. Note:: If you experience issues it's probably related to context creation. More configuration might be needed to run moderngl in some cases. This is especially true on linux running without X. See the context section. Development Environment ----------------------- Ideally you want to fork the repository first. .. code-block:: sh # .. or clone for your fork git clone https://github.com/moderngl/moderngl.git cd moderngl Building on various platforms: * On Windows you need visual c++ build tools installed: https://visualstudio.microsoft.com/visual-cpp-build-tools/ * On OS X you need X Code installed + command line tools (``xcode-select --install``) * Building on linux should pretty much work out of the box * To compile moderngl: ``python setup.py build_ext --inplace`` Package and dev dependencies: * Install ``requirements.txt``, ``tests/requirements.txt`` and ``docs/requirements.txt`` * Install the package in editable mode: ``pip install -e .`` Using with Mesa 3D on Windows ----------------------------- If you have an old Graphics Card that raises errors when running moderngl, you can try using this method, to make Moderngl work. There are essentially two ways, * Compiling Mesa yourselves see https://docs.mesa3d.org/install.html. * Using msys2, which provides pre-compiled Mesa binaries. Using MSYS2 ___________ * Download and Install https://www.msys2.org/#installation * Check whether you have 32-bit or 64-bit python. 32-bit python +++++++++++++ If you have 32-bit python, then open ``C:\msys64\mingw32.exe`` and type the following .. code-block:: sh pacman -S mingw-w64-i686-mesa It will install mesa and its dependencies. Then you can add ``C:\msys64\mingw32\bin`` to PATH before ``C:\Windows`` and moderngl should be working. Also, you should set an environment variable called ``GLCONTEXT_WIN_LIBGL`` which contains the path to opengl32 dll from mesa. In this case it should be ``GLCONTEXT_WIN_LIBGL=C:\msys64\mingw32\bin\opengl32.dll``. 64-bit python +++++++++++++ If you have 64-bit python, then open ``C:\msys64\mingw64.exe`` and type the following .. code-block:: sh pacman -S mingw-w64-x86_64-mesa It will install mesa and it's dependencies. Then you can add ``C:\msys64\mingw64\bin`` to PATH before ``C:\Windows`` and moderngl should be working. Also, you should set an environment variable called ``GLCONTEXT_WIN_LIBGL`` which contains the path to opengl32 dll from mesa. In this case it should be ``GLCONTEXT_WIN_LIBGL=C:\msys64\mingw64\bin\opengl32.dll`` moderngl-moderngl-773b733/docs/install/using-moderngl-in-ci.rst000066400000000000000000000070451470420062000244670ustar00rootroot00000000000000 Using ModernGL in CI ==================== Windows CI Configuration ------------------------ ModernGL can't be run directly on Windows CI without the use of `Mesa`_. To get ModernGL running you should first install Mesa from the `MSYS2 project`_ and adding it to the ``PATH``. Steps _____ 1. Usually `MSYS2 project`_ should be installed by default by your CI provider in ``C:\msys64``. You can refer `the documentation `_ on how to get it installed and make sure to update it. 2. Then login through bash and enter ``pacman -S --noconfirm mingw-w64-x86_64-mesa``. .. code-block:: shell C:\msys64\usr\bin\bash -lc "pacman -S --noconfirm mingw-w64-x86_64-mesa" This will install Mesa binary, which moderngl would be using. 3. Then add ``C:\msys64\mingw64\bin`` to ``PATH``. .. code-block:: powershell $env:PATH = "C:\msys64\mingw64\bin;$env:PATH" .. warning:: Make sure to delete ``C:\msys64\mingw64\bin\python.exe`` if it exists because the python provided by them would then be added to Global and some unexpected things may happen. 4. Then set an environment variable ``GLCONTEXT_WIN_LIBGL=C:\msys64\mingw64\bin\opengl32.dll``. This will make glcontext use ``C:\msys64\mingw64\bin\opengl32.dll`` for opengl drivers. 5. Then you can run moderngl as you want to. .. _Mesa: https://mesa3d.org/ .. _MSYS2 project: https://www.msys2.org/ Example Configuration _____________________ A example configuration for Github Actions: .. code-block:: yaml name: Hello World on: [push, pull_request] jobs: build: runs-on: windows-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.9 - uses: msys2/setup-msys2@v2 with: msystem: MINGW64 release: false install: mingw-w64-x86_64-mesa - name: Test using ModernGL shell: pwsh run: | Remove-Item C:\msys64\mingw64\bin\python.exe -Force $env:GLCONTEXT_WIN_LIBGL = "C:\msys64\mingw64\bin\opengl32.dll" python -m pip install -r requirements.txt python -m pytest Linux ----- For running ModernGL on Linux CI, you would need to configure ``xvfb`` so that it starts a Window in the background. After that, you should be able to use ModernGL directly. Steps _____ 1. Install ``xvfb`` from Package Manager. .. code-block:: bash sudo apt-get -y install xvfb 2. The run the below command, to start Xvfb from background. .. code-block:: bash sudo /usr/bin/Xvfb :0 -screen 0 1280x1024x24 & 3. You can run ModernGL now. Example Configuration _____________________ A example configuration for Github Actions: .. code-block:: yaml name: Hello World on: [push, pull_request] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3.9 - name: Prepare run: | sudo apt-get -y install xvfb sudo /usr/bin/Xvfb :0 -screen 0 1280x1024x24 & - name: Test using ModernGL run: | python -m pip install -r requirements.txt python -m pytest macOS ----- You won't need any special configuration to run on macOS. moderngl-moderngl-773b733/docs/reference/000077500000000000000000000000001470420062000202705ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/reference/attribute.rst000066400000000000000000000017451470420062000230340ustar00rootroot00000000000000Attribute ========= .. py:class:: Attribute Available in :py:meth:`Program.__getitem__` Represents a program input attribute. .. py:attribute:: Attribute.location :type: int The location of the attribute. The result of the glGetAttribLocation. .. py:attribute:: Attribute.array_length :type: int If the attribute is an array the array_length is the length of the array otherwise `1`. .. py:attribute:: Attribute.dimension :type: int The attribute dimension. .. py:attribute:: Attribute.shape :type: str The shape is a single character, representing the scalar type of the attribute. It is either ``'i'`` (int), ``'f'`` (float), ``'I'`` (unsigned int), ``'d'`` (double). .. py:attribute:: Attribute.name :type: str The attribute name. The name will be filtered to have no array syntax on it's end. Attribute name without ``'[0]'`` ending if any. .. py:attribute:: Attribute.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/buffer.rst000066400000000000000000000057241470420062000223030ustar00rootroot00000000000000Buffer ====== .. py:class:: Buffer Returned by :py:meth:`Context.buffer` Buffer objects are OpenGL objects that store an array of unformatted memory \ allocated by the OpenGL context, (data allocated on the GPU). These can be used to store vertex data, pixel data retrieved from images or the framebuffer, and a variety of other things. A Buffer object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.buffer` to create one. Copy buffer content using :py:meth:`Context.copy_buffer`. Methods ------- .. py:method:: Buffer.write(data: Any, *, offset: int = 0) -> None: Write the content. :param bytes data: The data. :param int offset: The offset in bytes. .. py:method:: Buffer.read(size: int = -1, *, offset: int = 0) -> bytes: Read the content. :param int size: The size in bytes. Value ``-1`` means all. :param int offset: The offset in bytes. .. py:method:: Buffer.read_into(buffer: Any, size: int = -1, *, offset: int = 0, write_offset: int = 0) -> None: Read the content into a buffer. :param bytearray buffer: The buffer that will receive the content. :param int size: The size in bytes. Value ``-1`` means all. :param int offset: The read offset in bytes. :param int write_offset: The write offset in bytes. .. py:method:: Buffer.clear(size: int = -1, *, offset: int = 0, chunk: Any = None) -> None: Clear the content. :param int size: The size. Value ``-1`` means all. :param int offset: The offset. :param bytes chunk: The chunk to use repeatedly. .. py:method:: Buffer.bind_to_uniform_block(binding: int = 0, *, offset: int = 0, size: int = -1) -> None: Bind the buffer to a uniform block. :param int binding: The uniform block binding. :param int offset: The offset. :param int size: The size. Value ``-1`` means all. .. py:method:: Buffer.bind_to_storage_buffer(binding: int = 0, *, offset: int = 0, size: int = -1) -> None: Bind the buffer to a shader storage buffer. :param int binding: The shader storage binding. :param int offset: The offset. :param int size: The size. Value ``-1`` means all. .. py:method:: Buffer.release() -> None: Release the ModernGL object .. py:method:: Buffer.bind(*attribs, layout=None) -> tuple: Helper method for binding a buffer in :py:meth:`Context.vertex_array`. .. py:method:: Buffer.assign(index: int) -> tuple: Helper method for assigning a buffer to an index in :py:meth:`Context.scope`. Attributes ---------- .. py:attribute:: Buffer.size :type: int The size of the buffer in bytes. .. py:attribute:: Buffer.dynamic :type: bool The dynamic flag. .. py:attribute:: Buffer.ctx :type: Context The context this object belongs to .. py:attribute:: Buffer.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: Buffer.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/compute_shader.rst000066400000000000000000000062611470420062000240310ustar00rootroot00000000000000ComputeShader ============= .. py:class:: ComputeShader Returned by :py:meth:`Context.compute_shader` A Compute Shader is a Shader Stage that is used entirely for computing arbitrary information. While it can do rendering, it is generally used for tasks not directly related to drawing. - Compute shaders support uniforms similar to :py:class:`moderngl.Program` objects. - Storage buffers can be bound using :py:meth:`Buffer.bind_to_storage_buffer`. - Uniform buffers can be bound using :py:meth:`Buffer.bind_to_uniform_block`. - Images can be bound using :py:meth:`Texture.bind_to_image`. Methods ------- .. py:method:: ComputeShader.run(group_x: int = 1, group_y: int = 1, group_z: int = 1) -> None: :param int group_x: Workgroup size x. :param int group_y: Workgroup size y. :param int group_z: Workgroup size z. Run the compute shader. .. py:method:: run_indirect(self, buffer: Buffer, offset: int = 0) -> None: Run the compute shader indirectly from a Buffer object. :param Buffer buffer: the buffer containing a single workgroup size at offset. :param int offset: the offset into the buffer in bytes. .. py:method:: ComputeShader.get(key, default) Returns a Uniform, UniformBlock or StorageBlock. :param default: This is the value to be returned in case key does not exist. .. py:method:: ComputeShader.__getitem__(key) Get a member such as uniforms, uniform blocks and storage blocks. .. code-block:: python # Get a uniform uniform = program['color'] # Uniform values can be set on the returned object # or the `__setitem__` shortcut can be used. program['color'].value = 1.0, 1.0, 1.0, 1.0 # Still when writing byte data we need to use the `write()` method program['color'].write(buffer) # Set binding for a storage block (if supported) program['DataBlock'].binding = 0 .. py:method:: ComputeShader.__setitem__(key, value) Set a value of uniform or uniform block. .. code-block:: python # Set a vec4 uniform uniform['color'] = 1.0, 1.0, 1.0, 1.0 # Optionally we can store references to a member and set the value directly uniform = program['color'] uniform.value = 1.0, 0.0, 0.0, 0.0 uniform = program['cameraMatrix'] uniform.write(camera_matrix) # Set binding for a storage block (if supported) program['DataBlock'].binding = 0 .. py:method:: ComputeShader.__iter__() Yields the internal members names as strings. Example:: for member in program: obj = program[member] print(member, obj) if isinstance(obj, moderngl.StorageBlock): print('This is a storage block member') This includes all members such as uniforms, uniform blocks and storage blocks. Attributes ---------- .. py:attribute:: ComputeShader.ctx :type: Context The context this object belongs to .. py:attribute:: ComputeShader.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: ComputeShader.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/conditional_render.rst000066400000000000000000000010221470420062000246570ustar00rootroot00000000000000ConditionalRender ================= .. py:class:: ConditionalRender Available in :py:attr:`Query.crender` This class represents a ConditionalRender object. ConditionalRender objects can only be accessed from :py:class:`Query` objects. Examples -------- .. code-block:: python query = ctx.query(any_samples=True) with query: vao1.render() with query.crender: print('This will always get printed') vao2.render() # But this will be rendered only if vao1 has passing samples. moderngl-moderngl-773b733/docs/reference/context.rst000066400000000000000000001346331470420062000225200ustar00rootroot00000000000000Context ======= .. py:class:: Context Returned by :py:meth:`moderngl.create_context` Class exposing OpenGL features. ModernGL objects can be created from this class. Objects ------- .. py:method:: Context.program(vertex_shader: str, fragment_shader: str, geometry_shader: str, tess_control_shader: str, tess_evaluation_shader: str, varyings: Tuple[str, ...], fragment_outputs: Dict[str, int], varyings_capture_mode: str = 'interleaved') -> Program Create a :py:class:`Program` object. The ``varyings`` are only used when a transform program is created to specify the names of the output varyings to capture in the output buffer. ``fragment_outputs`` can be used to programmatically map named fragment shader outputs to a framebuffer attachment numbers. This can also be done by using ``layout(location=N)`` in the fragment shader. :param str vertex_shader: The vertex shader source. :param str fragment_shader: The fragment shader source. :param str geometry_shader: The geometry shader source. :param str tess_control_shader: The tessellation control shader source. :param str tess_evaluation_shader: The tessellation evaluation shader source. :param list varyings: A list of varyings. :param dict fragment_outputs: A dictionary of fragment outputs. .. py:method:: Context.buffer(data = None, reserve: int = 0, dynamic: bool = False) -> Buffer Returns a new :py:class:`Buffer` object. The `data` can be anything supporting the buffer interface. The `data` and `reserve` parameters are mutually exclusive. :param bytes data: Content of the new buffer. :param int reserve: The number of bytes to reserve. :param bool dynamic: Treat buffer as dynamic. .. py:method:: Context.vertex_array(program: Program, content: list, index_buffer: Buffer = None, index_element_size: int = 4, mode: int = ...) -> VertexArray Returns a new :py:class:`VertexArray` object. A VertexArray describes how buffers are read by a shader program. The content is a list of tuples containing a buffer, a format string and any number of attribute names. Attribute names are defined by the user in the Vertex Shader program stage. The default `mode` is :py:attr:`~Context.TRIANGLES`. :param Program program: The program used when rendering :param list content: A list of (buffer, format, attributes). See :ref:`buffer-format-label`. :param Buffer index_buffer: An index buffer (optional) :param int index_element_size: byte size of each index element, 1, 2 or 4. :param bool skip_errors: Ignore errors during creation :param int mode: The default draw mode (for example: ``TRIANGLES``) Examples:: # Empty vertext array (no attribute input) vao = ctx.vertex_array(program) # Multiple buffers vao = ctx.vertex_array(program, [ (buffer1, '3f', 'in_position'), (buffer2, '3f', 'in_normal'), ]) vao = ctx.vertex_array( program, [ (buffer1, '3f', 'in_position'), (buffer2, '3f', 'in_normal'), ], index_buffer=ibo, index_element_size=2, # 16 bit / 'u2' index buffer ) Backward Compatible Version:: # Simple version with a single buffer vao = ctx.vertex_array(program, buffer, 'in_position', 'in_normal') vao = ctx.vertex_array(program, buffer, 'in_position', 'in_normal', index_buffer=ibo) .. py:method:: Context.simple_vertex_array(...) Deprecated, use :py:meth:`Context.vertex_array` instead. .. py:method:: Context.texture(size: Tuple[int, int], components: int, data: Any = None, samples: int = 0, alignment: int = 1, dtype: str = 'f1') -> Texture Returns a new :py:class:`Texture` object. A Texture is a 2D image that can be used for sampler2D uniforms or as render targets if framebuffers. :param tuple size: The width and height of the texture. :param int components: The number of components 1, 2, 3 or 4. :param bytes data: Content of the texture. :param int samples: The number of samples. Value 0 means no multisample format. :param int alignment: The byte alignment 1, 2, 4 or 8. :param str dtype: Data type. :param int internal_format: Override the internalformat of the texture (IF needed) Example:: from PIL import Image img = Image.open(...).convert('RGBA') texture = ctx.texture(img.size, components=4, data=img.tobytes()) # float texture texture = ctx.texture((64, 64), components=..., dtype='f4') # integer texture texture = ctx.texture((64, 64), components=..., dtype='i4') .. Note:: Do not play with ``internal_format`` unless you know exactly you are doing. This is an override to support sRGB and compressed textures if needed. .. py:method:: Context.framebuffer(color_attachments: List[Texture], depth_attachment: Texture = None) -> Framebuffer Returns a new :py:class:`Framebuffer` object. A Framebuffer is a collection of images that can be used as render targets. The images of the Framebuffer object can be either Textures or Renderbuffers. :param list color_attachments: A list of :py:class:`Texture` or :py:class:`Renderbuffer` objects. :param Texture depth_attachment: The depth attachment. .. py:method:: Context.sampler(repeat_x: bool, repeat_y: bool, repeat_z: bool, filter: tuple, anisotropy: float, compare_func: str, border_color: tuple, min_lod: float, max_lod: float, texture: Texture) -> Sampler Returns a new :py:class:`Sampler` object. Samplers bind Textures to uniform samplers within a Program object. Binding a Sampler object also binds the texture object attached to it. :param bool repeat_x: Repeat texture on x :param bool repeat_y: Repeat texture on y :param bool repeat_z: Repeat texture on z :param tuple filter: The min and max filter :param float anisotropy: Number of samples for anisotropic filtering. Any value greater than 1.0 counts as a use of anisotropic filtering :param str compare_func: Compare function for depth textures :param tuple border_color: The (r, g, b, a) color for the texture border. When this value is set the ``repeat_`` values are overridden setting the texture wrap to return the border color when outside ``[0, 1]`` range. :param float min_lod: Minimum level-of-detail parameter (Default ``-1000.0``). This floating-point value limits the selection of highest resolution mipmap (lowest mipmap level) :param float max_lod: Minimum level-of-detail parameter (Default ``1000.0``). This floating-point value limits the selection of the lowest resolution mipmap (highest mipmap level) :param Texture texture: The texture for this sampler .. py:method:: Context.depth_texture(size: Tuple[int, int], data: Any = None, samples: int = 0, alignment: int = 4) -> Texture Returns a new :py:class:`Texture` object. A depth texture can be used for sampler2D and sampler2DShadow uniforms and as a depth attachment for framebuffers. :param tuple size: The width and height of the texture. :param bytes data: Content of the texture. :param int samples: The number of samples. Value 0 means no multisample format. :param int alignment: The byte alignment 1, 2, 4 or 8. .. py:method:: Context.texture3d(size: Tuple[int, int, int], components: int, data: Any = None, alignment: int = 1, dtype: str = 'f1') -> Texture3D Returns a new :py:class:`Texture3D` object. :param tuple size: The width, height and depth of the texture. :param int components: The number of components 1, 2, 3 or 4. :param bytes data: Content of the texture. :param int alignment: The byte alignment 1, 2, 4 or 8. :param str dtype: Data type. .. py:method:: Context.texture_array(size: Tuple[int, int, int], components: int, data: Any = None, *, alignment: int = 1, dtype: str = 'f1') -> TextureArray Returns a new :py:class:`TextureArray` object. :param tuple size: The ``(width, height, layers)`` of the texture. :param int components: The number of components 1, 2, 3 or 4. :param bytes data: Content of the texture. The size must be ``(width, height * layers)`` so each layer is stacked vertically. :param int alignment: The byte alignment 1, 2, 4 or 8. :param str dtype: Data type. .. py:method:: Context.texture_cube(size: Tuple[int, int], components: int, data: Any = None, alignment: int = 1, dtype: str = 'f1') -> TextureCube Returns a new :py:class:`TextureCube` object. Note that the width and height of the cubemap must be the same. :param tuple size: The width, height of the texture. Each side of the cube will have this size. :param int components: The number of components 1, 2, 3 or 4. :param bytes data: Content of the texture. The data should be have the following ordering: positive_x, negative_x, positive_y, negative_y, positive_z, negative_z :param int alignment: The byte alignment 1, 2, 4 or 8. :param str dtype: Data type. :param int internal_format: Override the internalformat of the texture (IF needed) .. py:method:: Context.depth_texture_cube(size: Tuple[int, int], data: Optional[Any] = None, alignment: int = 4) -> TextureCube Returns a new :py:class:`TextureCube` object. :param tuple size: The width and height of the texture. :param bytes data: Content of the texture. :param int alignment: The byte alignment 1, 2, 4 or 8. .. py:method:: Context.simple_framebuffer(...) Deprecated, use :py:meth:`Context.framebuffer` instead. .. py:method:: Context.renderbuffer(size: Tuple[int, int], components: int = 4, samples: int = 0, dtype: str = 'f1') -> Renderbuffer Returns a new :py:class:`Renderbuffer` object. Similar to textures, renderbuffers can be attached to framebuffers as render targets, but they cannot be sampled as textures. :param tuple size: The width and height of the renderbuffer. :param int components: The number of components 1, 2, 3 or 4. :param int samples: The number of samples. Value 0 means no multisample format. :param str dtype: Data type. .. py:method:: Context.depth_renderbuffer(size: Tuple[int, int], samples: int = 0) -> Renderbuffer Returns a new :py:class:`Renderbuffer` object. :param tuple size: The width and height of the renderbuffer. :param int samples: The number of samples. Value 0 means no multisample format. .. py:method:: Context.scope(framebuffer, enable_only, textures, uniform_buffers, storage_buffers, samplers) Returns a new :py:class:`Scope` object. Scope objects can be attached to VertexArray objects to minimize the possibility of rendering within the wrong scope. VertexArrays with an attached scope always have the scope settings at render time. :param Framebuffer framebuffer: The framebuffer to use when entering. :param int enable_only: The enable_only flags to set when entering. :param tuple textures: List of (texture, binding) tuples. :param tuple uniform_buffers: Tuple of (buffer, binding) tuples. :param tuple storage_buffers: Tuple of (buffer, binding) tuples. :param tuple samplers: Tuple of sampler bindings .. py:method:: Context.query(samples: bool, any_samples: bool, time: bool, primitives: bool) -> Query Returns a new :py:class:`Query` object. :param bool samples: Query ``GL_SAMPLES_PASSED`` or not. :param bool any_samples: Query ``GL_ANY_SAMPLES_PASSED`` or not. :param bool time: Query ``GL_TIME_ELAPSED`` or not. :param bool primitives: Query ``GL_PRIMITIVES_GENERATED`` or not. .. py:method:: Context.compute_shader(...) A :py:class:`ComputeShader` is a Shader Stage that is used entirely \ for computing arbitrary information. While it can do rendering, it \ is generally used for tasks not directly related to drawing. :param str source: The source of the compute shader. External Objects ---------------- External objects are only useful for interoperability with other libraries. .. py:method:: Context.external_buffer(glo: int, size: int, dynamic: bool) -> Buffer TBD .. py:method:: Context.external_texture(glo: int, size: Tuple[int, int], components: int, samples: int, dtype: str) -> Texture Returns a new :py:class:`Texture` object from an existing OpenGL texture object. The content of the texture is referenced and it is not copied. :param int glo: External OpenGL texture object. :param tuple size: The width and height of the texture. :param int components: The number of components 1, 2, 3 or 4. :param int samples: The number of samples. Value 0 means no multisample format. :param str dtype: Data type. Methods ------- .. py:method:: Context.clear Clear the bound framebuffer. If a `viewport` passed in, a scissor test will be used to clear the given viewport. This viewport take prescense over the framebuffers :py:attr:`~moderngl.Framebuffer.scissor`. Clearing can still be done with scissor if no viewport is passed in. This method also respects the :py:attr:`~moderngl.Framebuffer.color_mask` and :py:attr:`~moderngl.Framebuffer.depth_mask`. It can for example be used to only clear the depth or color buffer or specific components in the color buffer. If the `viewport` is a 2-tuple it will clear the ``(0, 0, width, height)`` where ``(width, height)`` is the 2-tuple. If the `viewport` is a 4-tuple it will clear the given viewport. Args: red (float): color component. green (float): color component. blue (float): color component. alpha (float): alpha component. depth (float): depth value. Keyword Args: viewport (tuple): The viewport. color (tuple): Optional rgba color tuple .. py:method:: Context.enable_only Clears all existing flags applying new ones. Note that the enum values defined in moderngl are not the same as the ones in opengl. These are defined as bit flags so we can logical `or` them together. Available flags: - :py:data:`moderngl.NOTHING` - :py:data:`moderngl.BLEND` - :py:data:`moderngl.DEPTH_TEST` - :py:data:`moderngl.CULL_FACE` - :py:data:`moderngl.RASTERIZER_DISCARD` - :py:data:`moderngl.PROGRAM_POINT_SIZE` Examples:: # Disable all flags ctx.enable_only(moderngl.NOTHING) # Ensure only depth testing and face culling is enabled ctx.enable_only(moderngl.DEPTH_TEST | moderngl.CULL_FACE) Args: flags (EnableFlag): The flags to enable .. py:method:: Context.enable Enable flags. Note that the enum values defined in moderngl are not the same as the ones in opengl. These are defined as bit flags so we can logical `or` them together. For valid flags, please see :py:meth:`enable_only`. Examples:: # Enable a single flag ctx.enable(moderngl.DEPTH_TEST) # Enable multiple flags ctx.enable(moderngl.DEPTH_TEST | moderngl.CULL_FACE | moderngl.BLEND) Args: flag (int): The flags to enable. .. py:method:: Context.disable Disable flags. For valid flags, please see :py:meth:`enable_only`. Examples:: # Only disable depth testing ctx.disable(moderngl.DEPTH_TEST) # Disable depth testing and face culling ctx.disable(moderngl.DEPTH_TEST | moderngl.CULL_FACE) Args: flag (int): The flags to disable. .. py:method:: Context.enable_direct Gives direct access to ``glEnable`` so unsupported capabilities in ModernGL can be enabled. Do not use this to set already supported context flags. Example:: # Enum value from the opengl registry GL_CONSERVATIVE_RASTERIZATION_NV = 0x9346 ctx.enable_direct(GL_CONSERVATIVE_RASTERIZATION_NV) .. py:method:: Context.disable_direct Gives direct access to ``glDisable`` so unsupported capabilities in ModernGL can be disabled. Do not use this to set already supported context flags. Example:: # Enum value from the opengl registry GL_CONSERVATIVE_RASTERIZATION_NV = 0x9346 ctx.disable_direct(GL_CONSERVATIVE_RASTERIZATION_NV) .. py:method:: Context.finish Wait for all drawing commands to finish. .. py:method:: Context.clear_samplers Unbinds samplers from texture units. Sampler bindings do clear automatically between every frame, but lingering samplers can still be a source of weird bugs during the frame rendering. This methods provides a fairly brute force and efficient way to ensure texture units are clear. :param int start: The texture unit index to start the clearing samplers :param int stop: The texture unit index to stop clearing samplers Example:: # Clear texture unit 0, 1, 2, 3, 4 ctx.clear_samplers(start=0, end=5) # Clear texture unit 4, 5, 6, 7 ctx.clear_samplers(start=4, end=8) .. py:method:: Context.copy_buffer Copy buffer content. Args: dst (Buffer): The destination buffer. src (Buffer): The source buffer. size (int): The number of bytes to copy. Keyword Args: read_offset (int): The read offset. write_offset (int): The write offset. .. py:method:: Context.copy_framebuffer Copy framebuffer content. Use this method to: - blit framebuffers. - copy framebuffer content into a texture. - downsample framebuffers. (it will allow to read the framebuffer's content) - downsample a framebuffer directly to a texture. Args: dst (Framebuffer or Texture): Destination framebuffer or texture. src (Framebuffer): Source framebuffer. .. py:method:: Context.detect_framebuffer Detect a framebuffer. This is already done when creating a context, but if the underlying window library for some changes the default framebuffer during the lifetime of the application this might be necessary. Args: glo (int): Framebuffer object. .. py:method:: Context.memory_barrier Applying a memory barrier. The memory barrier is needed in particular to correctly change buffers or textures between each shader. If the same buffer is changed in two shaders, it can cause an effect like 'depth fighting' on a buffer or texture. The method should be used between :py:class:`Program` -s, between :py:class:`ComputeShader` -s, and between :py:class:`Program` -s and :py:class:`ComputeShader` -s. Keyword Args: barriers (int): Affected barriers, default moderngl.ALL_BARRIER_BITS. by_region (bool): Memory barrier mode by region. More read on https://registry.khronos.org/OpenGL-Refpages/gl4/html/glMemoryBarrier.xhtml .. py:method:: Context.gc() -> int Deletes OpenGL objects. Returns the number of objects deleted. This method must be called to garbage collect OpenGL resources when ``gc_mode`` is ``'context_gc'```. Calling this method with any other ``gc_mode`` configuration has no effect and is perfectly safe. .. py:method:: Context.release Attributes ---------- .. py:attribute:: Context.gc_mode :type: str The garbage collection mode. The default mode is ``None`` meaning no automatic garbage collection is done. Other modes are ``auto`` and ``context_gc``. Please see documentation for the appropriate configuration. Examples:: # Disable automatic garbage collection. # Each objects needs to be explicitly released. ctx.gc_mode = None # Collect all dead objects in the context and # release them by calling Context.gc() ctx.gc_mode = 'context_gc' ctx.gc() # Deletes the collected objects # Enable automatic garbage collection like # we normally expect in python. ctx.gc_mode = 'auto' .. py:attribute:: Context.objects :type: deque Moderngl objects scheduled for deletion. These are deleted when calling :py:meth:`Context.gc`. .. py:attribute:: Context.line_width :type: float Set the default line width. .. Warning:: A line width other than 1.0 is not guaranteed to work across different OpenGL implementations. For wide lines you should be using geometry shaders. .. py:attribute:: Context.point_size :type: float Set/get the point size. Point size changes the pixel size of rendered points. The min and max values are limited by ``POINT_SIZE_RANGE``. This value usually at least ``(1, 100)``, but this depends on the drivers/vendors. If variable point size is needed you can enable ``PROGRAM_POINT_SIZE`` and write to ``gl_PointSize`` in the vertex or geometry shader. .. Note:: Using a geometry shader to create triangle strips from points is often a safer way to render large points since you don't have have any size restrictions. .. py:attribute:: Context.depth_func :type: str Set the default depth func. Example:: ctx.depth_func = '<=' # GL_LEQUAL ctx.depth_func = '<' # GL_LESS ctx.depth_func = '>=' # GL_GEQUAL ctx.depth_func = '>' # GL_GREATER ctx.depth_func = '==' # GL_EQUAL ctx.depth_func = '!=' # GL_NOTEQUAL ctx.depth_func = '0' # GL_NEVER ctx.depth_func = '1' # GL_ALWAYS .. py:attribute:: Context.depth_clamp_range :type: Tuple[float, float] Setting up depth clamp range (write only, by default ``None``). ``ctx.depth_clamp_range`` offers uniform use of GL_DEPTH_CLAMP and glDepthRange. ``GL_DEPTH_CLAMP`` is needed to disable clipping of fragments outside near limit of projection matrix. For example, this will allow you to draw between 0 and 1 in the Z (depth) coordinate, even if ``near`` is set to 0.5 in the projection matrix. .. note:: All fragments outside the ``near`` of the projection matrix will have a depth of ``near``. See https://www.khronos.org/opengl/wiki/Vertex_Post-Processing#Depth_clamping for more info. ``glDepthRange(nearVal, farVal)`` is needed to specify mapping of depth values from normalized device coordinates to window coordinates. See https://registry.khronos.org/OpenGL-Refpages/gl4/html/glDepthRange.xhtml for more info. Example:: # For glDisable(GL_DEPTH_CLAMP) and glDepthRange(0, 1) ctx.depth_clamp_range = None # For glEnable(GL_DEPTH_CLAMP) and glDepthRange(near, far) ctx.depth_clamp_range = (near, far) .. py:attribute:: Context.blend_func :type: tuple Set the blend func (write only). Blend func can be set for rgb and alpha separately if needed. Supported blend functions are:: moderngl.ZERO moderngl.ONE moderngl.SRC_COLOR moderngl.ONE_MINUS_SRC_COLOR moderngl.DST_COLOR moderngl.ONE_MINUS_DST_COLOR moderngl.SRC_ALPHA moderngl.ONE_MINUS_SRC_ALPHA moderngl.DST_ALPHA moderngl.ONE_MINUS_DST_ALPHA # Shortcuts moderngl.DEFAULT_BLENDING # (SRC_ALPHA, ONE_MINUS_SRC_ALPHA) moderngl.ADDITIVE_BLENDING # (ONE, ONE) moderngl.PREMULTIPLIED_ALPHA # (SRC_ALPHA, ONE) Example:: # For both rgb and alpha ctx.blend_func = moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA # Separate for rgb and alpha ctx.blend_func = ( moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, moderngl.ONE, moderngl.ONE ) .. py:attribute:: Context.blend_equation :type: tuple Set the blend equation (write only). Blend equations specify how source and destination colors are combined in blending operations. By default ``FUNC_ADD`` is used. Blend equation can be set for rgb and alpha separately if needed. Supported functions are:: moderngl.FUNC_ADD # source + destination moderngl.FUNC_SUBTRACT # source - destination moderngl.FUNC_REVERSE_SUBTRACT # destination - source moderngl.MIN # Minimum of source and destination moderngl.MAX # Maximum of source and destination Example:: # For both rgb and alpha channel ctx.blend_equation = moderngl.FUNC_ADD # Separate for rgb and alpha channel ctx.blend_equation = moderngl.FUNC_ADD, moderngl.MAX .. py:attribute:: Context.multisample :type: bool Enable/disable multisample mode (``GL_MULTISAMPLE``). This property is write only. Example:: # Enable ctx.multisample = True # Disable ctx.multisample = False .. py:attribute:: Context.viewport :type: tuple Get or set the viewport of the active framebuffer. Example:: >>> ctx.viewport (0, 0, 1280, 720) >>> ctx.viewport = (0, 0, 640, 360) >>> ctx.viewport (0, 0, 640, 360) If no framebuffer is bound ``(0, 0, 0, 0)`` will be returned. .. py:attribute:: Context.scissor :type: tuple Get or set the scissor box for the active framebuffer. When scissor testing is enabled fragments outside the defined scissor box will be discarded. This applies to rendered geometry or :py:meth:`Context.clear`. Setting is value enables scissor testing in the framebuffer. Setting the scissor to ``None`` disables scissor testing and reverts the scissor box to match the framebuffer size. Example:: # Enable scissor testing >>> ctx.scissor = 100, 100, 200, 100 # Disable scissor testing >>> ctx.scissor = None If no framebuffer is bound ``(0, 0, 0, 0)`` will be returned. .. py:attribute:: Context.version_code :type: int .. py:attribute:: Context.screen :type: Framebuffer A Framebuffer instance representing the screen. Normally set when creating a context with ``create_context()`` attaching to an existing context. This is the special system framebuffer represented by framebuffer ``id=0``. When creating a standalone context this property is not set since there are no default framebuffer. .. py:attribute:: Context.fbo :type: Framebuffer .. py:attribute:: Context.front_face :type: str The front_face. Acceptable values are ``'ccw'`` (default) or ``'cw'``. Face culling must be enabled for this to have any effect: ``ctx.enable(moderngl.CULL_FACE)``. Example:: # Triangles winded counter-clockwise considered front facing ctx.front_face = 'ccw' # Triangles winded clockwise considered front facing ctx.front_face = 'cw' .. py:attribute:: Context.cull_face :type: str The face side to cull. Acceptable values are ``'back'`` (default) ``'front'`` or ``'front_and_back'``. This is similar to :py:meth:`Context.front_face` Face culling must be enabled for this to have any effect: ``ctx.enable(moderngl.CULL_FACE)``. Example:: ctx.cull_face = 'front' ctx.cull_face = 'back' ctx.cull_face = 'front_and_back' .. py:attribute:: Context.wireframe :type: bool Wireframe settings for debugging. .. py:attribute:: Context.max_samples :type: int The maximum supported number of samples for multisampling. .. py:attribute:: Context.max_integer_samples :type: int The max integer samples. .. py:attribute:: Context.max_texture_units :type: int The max texture units. .. py:attribute:: Context.max_anisotropy :type: float The maximum value supported for anisotropic filtering. .. py:attribute:: Context.default_texture_unit :type: int The default texture unit. .. py:attribute:: Context.patch_vertices :type: int The number of vertices that will be used to make up a single patch primitive. .. py:attribute:: Context.provoking_vertex :type: int Specifies the vertex to be used as the source of data for flat shaded varyings. Flatshading a vertex shader varying output (ie. ``flat out vec3 pos``) means to assign all vetices of the primitive the same value for that output. The vertex from which these values is derived is known as the provoking vertex. It can be configured to be the first or the last vertex. This property is write only. Example:: # Use first vertex ctx.provoking_vertex = moderngl.FIRST_VERTEX_CONVENTION # Use last vertex ctx.provoking_vertex = moderngl.LAST_VERTEX_CONVENTION .. py:attribute:: Context.polygon_offset :type: tuple Get or set the current polygon offset. The tuple values represents two float values: ``unit`` and a ``factor``:: ctx.polygon_offset = unit, factor When drawing polygons, lines or points directly on top of exiting geometry the result is often not visually pleasant. We can experience z-fighting or partially fading fragments due to different primitives not being rasterized in the exact same way or simply depth buffer precision issues. For example when visualizing polygons drawing a wireframe version on top of the original mesh, these issues are immediately apparent. Applying decals to surfaces is another common example. The official documentation states the following:: When enabled, the depth value of each fragment is added to a calculated offset value. The offset is added before the depth test is performed and before the depth value is written into the depth buffer. The offset value o is calculated by: o = m * factor + r * units where m is the maximum depth slope of the polygon and r is the smallest value guaranteed to produce a resolvable difference in window coordinate depth values. The value r is an implementation-specific int. In simpler terms: We use polygon offset to either add a positive offset to the geometry (push it away from you) or a negative offset to geometry (pull it towards you). * ``units`` is a int offset to depth and will do the job alone if we are working with geometry parallel to the near/far plane. * The ``factor`` helps you handle sloped geometry (not parallel to near/far plane). In most cases you can get away with ``[-1.0, 1.0]`` for both factor and units, but definitely play around with the values. When both values are set to ``0`` polygon offset is disabled internally. To just get started with something you can try:: # Either push the geomtry away or pull it towards you # with support for handling small to medium sloped geometry ctx.polygon_offset = 1.0, 1.0 ctx.polygon_offset = -1.0, -1.0 # Disable polygon offset ctx.polygon_offset = 0, 0 .. py:attribute:: Context.error :type: str The result of ``glGetError()`` but human readable. This values is provided for debug purposes only and is likely to reduce performace when used in a draw loop. .. py:attribute:: Context.extensions :type: Set[str] The extensions supported by the context. All extensions names have a ``GL_`` prefix, so if the spec refers to ``ARB_compute_shader`` we need to look for ``GL_ARB_compute_shader``:: # If compute shaders are supported ... >> 'GL_ARB_compute_shader' in ctx.extensions True Example data:: { 'GL_ARB_multi_bind', 'GL_ARB_shader_objects', 'GL_ARB_half_float_vertex', 'GL_ARB_map_buffer_alignment', 'GL_ARB_arrays_of_arrays', 'GL_ARB_pipeline_statistics_query', 'GL_ARB_provoking_vertex', 'GL_ARB_gpu_shader5', 'GL_ARB_uniform_buffer_object', 'GL_EXT_blend_equation_separate', 'GL_ARB_tessellation_shader', 'GL_ARB_multi_draw_indirect', 'GL_ARB_multisample', .. etc .. } .. py:attribute:: Context.info :type: Dict[str, Any] OpenGL Limits and information about the context. Example:: # The maximum width and height of a texture >> ctx.info['GL_MAX_TEXTURE_SIZE'] 16384 # Vendor and renderer >> ctx.info['GL_VENDOR'] NVIDIA Corporation >> ctx.info['GL_RENDERER'] NVIDIA GeForce GT 650M OpenGL Engine Example data:: { 'GL_VENDOR': 'NVIDIA Corporation', 'GL_RENDERER': 'NVIDIA GeForce GT 650M OpenGL Engine', 'GL_VERSION': '4.1 NVIDIA-10.32.0 355.11.10.10.40.102', 'GL_POINT_SIZE_RANGE': (1.0, 2047.0), 'GL_SMOOTH_LINE_WIDTH_RANGE': (0.5, 1.0), 'GL_ALIASED_LINE_WIDTH_RANGE': (1.0, 1.0), 'GL_POINT_FADE_THRESHOLD_SIZE': 1.0, 'GL_POINT_SIZE_GRANULARITY': 0.125, 'GL_SMOOTH_LINE_WIDTH_GRANULARITY': 0.125, 'GL_MIN_PROGRAM_TEXEL_OFFSET': -8.0, 'GL_MAX_PROGRAM_TEXEL_OFFSET': 7.0, 'GL_MINOR_VERSION': 1, 'GL_MAJOR_VERSION': 4, 'GL_SAMPLE_BUFFERS': 0, 'GL_SUBPIXEL_BITS': 8, 'GL_CONTEXT_PROFILE_MASK': 1, 'GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT': 256, 'GL_DOUBLEBUFFER': False, 'GL_STEREO': False, 'GL_MAX_VIEWPORT_DIMS': (16384, 16384), 'GL_MAX_3D_TEXTURE_SIZE': 2048, 'GL_MAX_ARRAY_TEXTURE_LAYERS': 2048, 'GL_MAX_CLIP_DISTANCES': 8, 'GL_MAX_COLOR_ATTACHMENTS': 8, 'GL_MAX_COLOR_TEXTURE_SAMPLES': 8, 'GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS': 233472, 'GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS': 231424, 'GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS': 80, 'GL_MAX_COMBINED_UNIFORM_BLOCKS': 70, 'GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS': 233472, 'GL_MAX_CUBE_MAP_TEXTURE_SIZE': 16384, 'GL_MAX_DEPTH_TEXTURE_SAMPLES': 8, 'GL_MAX_DRAW_BUFFERS': 8, 'GL_MAX_DUAL_SOURCE_DRAW_BUFFERS': 1, 'GL_MAX_ELEMENTS_INDICES': 150000, 'GL_MAX_ELEMENTS_VERTICES': 1048575, 'GL_MAX_FRAGMENT_INPUT_COMPONENTS': 128, 'GL_MAX_FRAGMENT_UNIFORM_COMPONENTS': 4096, 'GL_MAX_FRAGMENT_UNIFORM_VECTORS': 1024, 'GL_MAX_FRAGMENT_UNIFORM_BLOCKS': 14, 'GL_MAX_GEOMETRY_INPUT_COMPONENTS': 128, 'GL_MAX_GEOMETRY_OUTPUT_COMPONENTS': 128, 'GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_GEOMETRY_UNIFORM_BLOCKS': 14, 'GL_MAX_GEOMETRY_UNIFORM_COMPONENTS': 2048, 'GL_MAX_INTEGER_SAMPLES': 1, 'GL_MAX_SAMPLES': 8, 'GL_MAX_RECTANGLE_TEXTURE_SIZE': 16384, 'GL_MAX_RENDERBUFFER_SIZE': 16384, 'GL_MAX_SAMPLE_MASK_WORDS': 1, 'GL_MAX_SERVER_WAIT_TIMEOUT': -1, 'GL_MAX_TEXTURE_BUFFER_SIZE': 134217728, 'GL_MAX_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_TEXTURE_LOD_BIAS': 15, 'GL_MAX_TEXTURE_SIZE': 16384, 'GL_MAX_UNIFORM_BUFFER_BINDINGS': 70, 'GL_MAX_UNIFORM_BLOCK_SIZE': 65536, 'GL_MAX_VARYING_COMPONENTS': 0, 'GL_MAX_VARYING_VECTORS': 31, 'GL_MAX_VARYING_FLOATS': 0, 'GL_MAX_VERTEX_ATTRIBS': 16, 'GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_VERTEX_UNIFORM_COMPONENTS': 4096, 'GL_MAX_VERTEX_UNIFORM_VECTORS': 1024, 'GL_MAX_VERTEX_OUTPUT_COMPONENTS': 128, 'GL_MAX_VERTEX_UNIFORM_BLOCKS': 14, 'GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET': 0, 'GL_MAX_VERTEX_ATTRIB_BINDINGS': 0, 'GL_VIEWPORT_BOUNDS_RANGE': (-32768, 32768), 'GL_VIEWPORT_SUBPIXEL_BITS': 0, 'GL_MAX_VIEWPORTS': 16 } .. py:attribute:: Context.includes :type: Dict[str, str] Mapping used for include statements. .. py:attribute:: Context.extra :type: Any User defined data. Context Flags ------------- Context flags are used to enable or disable states in the context. These are not the same enum values as in opengl, but are rather bit flags so we can ``or`` them together setting multiple states in a simple way. These values are available in the ``Context`` object and in the ``moderngl`` module when you don't have access to the context. .. code:: python import moderngl # From moderngl ctx.enable_only(moderngl.DEPTH_TEST | moderngl.CULL_FACE) # From context ctx.enable_only(ctx.DEPTH_TEST | ctx.CULL_FACE) .. py:attribute:: Context.NOTHING :type: int Represents no states. Can be used with :py:meth:`Context.enable_only` to disable all states. .. py:attribute:: Context.BLEND :type: int Enable/disable blending .. py:attribute:: Context.DEPTH_TEST :type: int Enable/disable depth testing .. py:attribute:: Context.CULL_FACE :type: int Enable/disable face culling .. py:attribute:: Context.RASTERIZER_DISCARD :type: int Enable/disable rasterization Context flag: Enables ``gl_PointSize`` in vertex or geometry shaders. When enabled we can write to ``gl_PointSize`` in the vertex shader to specify the point size for each individual point. If this value is not set in the shader the behavior is undefined. This means the points may or may not appear depending if the drivers enforce some default value for ``gl_PointSize``. .. py:attribute:: Context.PROGRAM_POINT_SIZE :type: int When disabled :py:attr:`Context.point_size` is used. Primitive Modes --------------- .. py:attribute:: Context.POINTS :type: int Each vertex represents a point .. py:attribute:: Context.LINES :type: int Vertices 0 and 1 are considered a line. Vertices 2 and 3 are considered a line. And so on. If the user specifies a non-even number of vertices, then the extra vertex is ignored. .. py:attribute:: Context.LINE_LOOP :type: int As line strips, except that the first and last vertices are also used as a line. Thus, you get n lines for n input vertices. If the user only specifies 1 vertex, the drawing command is ignored. The line between the first and last vertices happens after all of the previous lines in the sequence. .. py:attribute:: Context.LINE_STRIP :type: int The adjacent vertices are considered lines. Thus, if you pass n vertices, you will get n-1 lines. If the user only specifies 1 vertex, the drawing command is ignored. .. py:attribute:: Context.TRIANGLES :type: int Vertices 0, 1, and 2 form a triangle. Vertices 3, 4, and 5 form a triangle. And so on. .. py:attribute:: Context.TRIANGLE_STRIP :type: int Every group of 3 adjacent vertices forms a triangle. The face direction of the strip is determined by the winding of the first triangle. Each successive triangle will have its effective face order reversed, so the system compensates for that by testing it in the opposite way. A vertex stream of n length will generate n-2 triangles. .. py:attribute:: Context.TRIANGLE_FAN :type: int The first vertex is always held fixed. From there on, every group of 2 adjacent vertices form a triangle with the first. So with a vertex stream, you get a list of triangles like so: (0, 1, 2) (0, 2, 3), (0, 3, 4), etc. A vertex stream of n length will generate n-2 triangles. .. py:attribute:: Context.LINES_ADJACENCY :type: int These are special primitives that are expected to be used specifically with geomtry shaders. These primitives give the geometry shader more vertices to work with for each input primitive. Data needs to be duplicated in buffers. .. py:attribute:: Context.LINE_STRIP_ADJACENCY :type: int These are special primitives that are expected to be used specifically with geomtry shaders. These primitives give the geometry shader more vertices to work with for each input primitive. Data needs to be duplicated in buffers. .. py:attribute:: Context.TRIANGLES_ADJACENCY :type: int These are special primitives that are expected to be used specifically with geomtry shaders. These primitives give the geometry shader more vertices to work with for each input primitive. Data needs to be duplicated in buffers. .. py:attribute:: Context.TRIANGLE_STRIP_ADJACENCY :type: int These are special primitives that are expected to be used specifically with geomtry shaders. These primitives give the geometry shader more vertices to work with for each input primitive. Data needs to be duplicated in buffers. .. py:attribute:: Context.PATCHES :type: int primitive type can only be used when Tessellation is active. It is a primitive with a user-defined number of vertices, which is then tessellated based on the control and evaluation shaders into regular points, lines, or triangles, depending on the TES's settings. Texture Filters ~~~~~~~~~~~~~~~ Also available in the :py:class:`Context` instance including mode details. .. py:attribute:: Context.NEAREST :type: int Returns the value of the texture element that is nearest (in Manhattan distance) to the specified texture coordinates. .. py:attribute:: Context.LINEAR :type: int Returns the weighted average of the four texture elements that are closest to the specified texture coordinates. These can include items wrapped or repeated from other parts of a texture, depending on the values of texture repeat mode, and on the exact mapping. .. py:attribute:: Context.NEAREST_MIPMAP_NEAREST :type: int Chooses the mipmap that most closely matches the size of the pixel being textured and uses the ``NEAREST`` criterion (the texture element closest to the specified texture coordinates) to produce a texture value. .. py:attribute:: Context.LINEAR_MIPMAP_NEAREST :type: int Chooses the mipmap that most closely matches the size of the pixel being textured and uses the ``LINEAR`` criterion (a weighted average of the four texture elements that are closest to the specified texture coordinates) to produce a texture value. .. py:attribute:: Context.NEAREST_MIPMAP_LINEAR :type: int Chooses the two mipmaps that most closely match the size of the pixel being textured and uses the ``NEAREST`` criterion (the texture element closest to the specified texture coordinates ) to produce a texture value from each mipmap. The final texture value is a weighted average of those two values. .. py:attribute:: Context.LINEAR_MIPMAP_LINEAR :type: int Chooses the two mipmaps that most closely match the size of the pixel being textured and uses the ``LINEAR`` criterion (a weighted average of the texture elements that are closest to the specified texture coordinates) to produce a texture value from each mipmap. The final texture value is a weighted average of those two values. Blend Functions --------------- Blend functions are used with :py:attr:`Context.blend_func` to control blending operations. .. code:: # Default value ctx.blend_func = ctx.SRC_ALPHA, ctx.ONE_MINUS_SRC_ALPHA .. py:attribute:: Context.ZERO :type: int (0,0,0,0) .. py:attribute:: Context.ONE :type: int (1,1,1,1) .. py:attribute:: Context.SRC_COLOR :type: int (Rs0/kR,Gs0/kG,Bs0/kB,As0/kA) .. py:attribute:: Context.ONE_MINUS_SRC_COLOR :type: int (1,1,1,1) - (Rs0/kR,Gs0/kG,Bs0/kB,As0/kA) .. py:attribute:: Context.SRC_ALPHA :type: int (As0/kA,As0/kA,As0/kA,As0/kA) .. py:attribute:: Context.ONE_MINUS_SRC_ALPHA :type: int (1,1,1,1) - (As0/kA,As0/kA,As0/kA,As0/kA) .. py:attribute:: Context.DST_ALPHA :type: int (Ad/kA,Ad/kA,Ad/kA,Ad/kA) .. py:attribute:: Context.ONE_MINUS_DST_ALPHA :type: int (1,1,1,1) - (Ad/kA,Ad/kA,Ad/kA,Ad/kA) .. py:attribute:: Context.DST_COLOR :type: int (Rd/kR,Gd/kG,Bd/kB,Ad/kA) .. py:attribute:: Context.ONE_MINUS_DST_COLOR :type: int (1,1,1,1) - (Rd/kR,Gd/kG,Bd/kB,Ad/kA) Blend Function Shortcuts ------------------------ .. py:attribute:: Context.DEFAULT_BLENDING :type: tuple Shotcut for the default blending ``SRC_ALPHA, ONE_MINUS_SRC_ALPHA`` .. py:attribute:: Context.ADDITIVE_BLENDING :type: tuple Shotcut for additive blending ``ONE, ONE`` .. py:attribute:: Context.PREMULTIPLIED_ALPHA :type: tuple Shotcut for blend mode when using premultiplied alpha ``SRC_ALPHA, ONE`` Blend Equations --------------- Used with :py:attr:`Context.blend_equation`. .. py:attribute:: Context.FUNC_ADD :type: int source + destination .. py:attribute:: Context.FUNC_SUBTRACT :type: int source - destination .. py:attribute:: Context.FUNC_REVERSE_SUBTRACT :type: int destination - source .. py:attribute:: Context.MIN :type: int Minimum of source and destination .. py:attribute:: Context.MAX :type: int Maximum of source and destination Other Enums ----------- .. py:attribute:: Context.FIRST_VERTEX_CONVENTION :type: int Specifies the first vertex should be used as the source of data for flat shaded varyings. Used with :py:attr:`Context.provoking_vertex`. .. py:attribute:: Context.LAST_VERTEX_CONVENTION :type: int Specifies the last vertex should be used as the source of data for flat shaded varyings. Used with :py:attr:`Context.provoking_vertex`. .. py:attribute:: Context.VERTEX_ATTRIB_ARRAY_BARRIER_BIT :type: int VERTEX_ATTRIB_ARRAY_BARRIER_BIT .. py:attribute:: Context.ELEMENT_ARRAY_BARRIER_BIT :type: int ELEMENT_ARRAY_BARRIER_BIT .. py:attribute:: Context.UNIFORM_BARRIER_BIT :type: int UNIFORM_BARRIER_BIT .. py:attribute:: Context.TEXTURE_FETCH_BARRIER_BIT :type: int TEXTURE_FETCH_BARRIER_BIT .. py:attribute:: Context.SHADER_IMAGE_ACCESS_BARRIER_BIT :type: int SHADER_IMAGE_ACCESS_BARRIER_BIT .. py:attribute:: Context.COMMAND_BARRIER_BIT :type: int COMMAND_BARRIER_BIT .. py:attribute:: Context.PIXEL_BUFFER_BARRIER_BIT :type: int PIXEL_BUFFER_BARRIER_BIT .. py:attribute:: Context.TEXTURE_UPDATE_BARRIER_BIT :type: int TEXTURE_UPDATE_BARRIER_BIT .. py:attribute:: Context.BUFFER_UPDATE_BARRIER_BIT :type: int BUFFER_UPDATE_BARRIER_BIT .. py:attribute:: Context.FRAMEBUFFER_BARRIER_BIT :type: int FRAMEBUFFER_BARRIER_BIT .. py:attribute:: Context.TRANSFORM_FEEDBACK_BARRIER_BIT :type: int TRANSFORM_FEEDBACK_BARRIER_BIT .. py:attribute:: Context.ATOMIC_COUNTER_BARRIER_BIT :type: int ATOMIC_COUNTER_BARRIER_BIT .. py:attribute:: Context.SHADER_STORAGE_BARRIER_BIT :type: int SHADER_STORAGE_BARRIER_BIT .. py:attribute:: Context.ALL_BARRIER_BITS :type: int ALL_BARRIER_BITS Examples -------- ModernGL Context ~~~~~~~~~~~~~~~~ .. code-block:: python import moderngl # create a window ctx = moderngl.create_context() print(ctx.version_code) Standalone ModernGL Context ~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. code-block:: python import moderngl ctx = moderngl.create_standalone_context() print(ctx.version_code) moderngl-moderngl-773b733/docs/reference/framebuffer.rst000066400000000000000000000143451470420062000233150ustar00rootroot00000000000000Framebuffer =========== .. py:class:: Framebuffer Returned by :py:meth:`Context.framebuffer` A :py:class:`Framebuffer` is a collection of buffers that can be used as the destination for rendering. The buffers for Framebuffer objects reference images from either Textures or Renderbuffers. Methods ------- .. py:method:: Framebuffer.clear(red: float = 0.0, green: float = 0.0, blue: float = 0.0, alpha: float = 0.0, depth: float = 1.0, viewport=..., color=...) -> None Clear the framebuffer. If a `viewport` passed in, a scissor test will be used to clear the given viewport. This viewport take presence over the framebuffers :py:attr:`~moderngl.Framebuffer.scissor`. Clearing can still be done with scissor if no viewport is passed in. This method also respects the :py:attr:`~moderngl.Framebuffer.color_mask` and :py:attr:`~moderngl.Framebuffer.depth_mask`. It can for example be used to only clear the depth or color buffer or specific components in the color buffer. If the `viewport` is a 2-tuple it will clear the ``(0, 0, width, height)`` where ``(width, height)`` is the 2-tuple. If the `viewport` is a 4-tuple it will clear the given viewport. :param float red: color component. :param float green: color component. :param float blue: color component. :param float alpha: alpha component. :param float depth: depth value. :param tuple viewport: The viewport. :param tuple color: Optional tuple replacing the red, green, blue and alpha arguments .. py:method:: Framebuffer.read(viewport=..., components: int = 3, attachment: int = 0, alignment: int = 1, dtype: str = 'f1', clamp: bool = False) -> bytes Read the content of the framebuffer. :param tuple viewport: The viewport. :param int components: The number of components to read. :param int attachment: The color attachment number. -1 for the depth attachment :param int alignment: The byte alignment of the pixels. :param str dtype: Data type. :param bool clamp: Clamps floating point values to ``[0.0, 1.0]`` .. code:: python # Read the first color attachment's RGBA data data = fbo.read(components=4) # Read the second color attachment's RGB data data = fbo.read(attachment=1) # Read the depth attachment data = fbo.read(attachment=-1) # Read the lower left 10 x 10 pixels from the first color attachment data = fbo.read(viewport=(0, 0, 10, 10)) .. py:method:: Framebuffer.read_into(buffer, viewport, components: int = 3, attachment: int = 0, alignment: int = 1, dtype: str = 'f1', write_offset: int = 0) -> None Read the content of the framebuffer into a buffer. :param bytearray buffer: The buffer that will receive the pixels. :param tuple viewport: The viewport. :param int components: The number of components to read. :param int attachment: The color attachment. :param int alignment: The byte alignment of the pixels. :param str dtype: Data type. :param int write_offset: The write offset. .. py:method:: Framebuffer.use() Bind the framebuffer. .. py:method:: Framebuffer.release Attributes ---------- .. py:attribute:: Framebuffer.viewport :type: tuple Get or set the viewport of the framebuffer. .. py:attribute:: Framebuffer.scissor :type: tuple Get or set the scissor box of the framebuffer. When scissor testing is enabled fragments outside the defined scissor box will be discarded. This applies to rendered geometry or :py:meth:`Framebuffer.clear`. Setting is value enables scissor testing in the framebuffer. Setting the scissor to ``None`` disables scissor testing and reverts the scissor box to match the framebuffer size. Example:: # Enable scissor testing >>> ctx.scissor = 100, 100, 200, 100 # Disable scissor testing >>> ctx.scissor = None .. py:attribute:: Framebuffer.color_mask :type: tuple The color mask of the framebuffer. Color masking controls what components in color attachments will be affected by fragment write operations. This includes rendering geometry and clearing the framebuffer. Default value: ``(True, True, True, True)``. Examples:: # Block writing to all color components (rgba) in color attachments fbo.color_mask = False, False, False, False # Re-enable writing to color attachments fbo.color_mask = True, True, True, True # Block fragment writes to alpha channel fbo.color_mask = True, True, True, False .. py:attribute:: Framebuffer.depth_mask :type: bool The depth mask of the framebuffer. Depth mask enables or disables write operations to the depth buffer. This also applies when clearing the framebuffer. If depth testing is enabled fragments will still be culled, but the depth buffer will not be updated with new values. This is a very useful tool in many rendering techniques. Default value: ``True`` .. py:attribute:: Framebuffer.width :type: int The width of the framebuffer. Framebuffers created by a window will only report its initial size. It's better get size information from the window itself. .. py:attribute:: Framebuffer.height :type: int The height of the framebuffer. Framebuffers created by a window will only report its initial size. It's better get size information from the window itself. .. py:attribute:: Framebuffer.size :type: Tuple[int, int] The size of the framebuffer. Framebuffers created by a window will only report its initial size. It's better get size information from the window itself. .. py:attribute:: Framebuffer.samples :type: int The samples of the framebuffer. .. py:attribute:: Framebuffer.bits :type: int The bits of the framebuffer. .. py:attribute:: Framebuffer.color_attachments :type: tuple .. py:attribute:: Framebuffer.depth_attachment :type: tuple .. py:attribute:: Framebuffer.ctx :type: Context The context this object belongs to .. py:attribute:: Framebuffer.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: Framebuffer.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/index.rst000066400000000000000000000005021470420062000221260ustar00rootroot00000000000000Reference ========= .. toctree:: :maxdepth: 1 moderngl.rst context.rst buffer.rst vertex_array.rst program.rst sampler.rst texture.rst texture_array.rst texture3d.rst texture_cube.rst framebuffer.rst renderbuffer.rst scope.rst query.rst compute_shader.rst moderngl-moderngl-773b733/docs/reference/moderngl.rst000066400000000000000000000126521470420062000226370ustar00rootroot00000000000000moderngl ======== .. py:module:: moderngl .. code-block:: python import moderngl window = ... ctx = moderngl.create_context() # store a ref to ctx The module object itself is responsible for creating a :py:class:`Context` object. .. py:function:: moderngl.create_context(require: int = 330, standalone: bool = False) -> Context Create a ModernGL context by loading OpenGL functions from an existing OpenGL context. An OpenGL context must exist. Call this after a window is created or opt for the windowless standalone mode. Other backend specific settings are passed as keyword arguments. Context sharing is known to not work properly, please avoid using it. There is a paramter `share` for that to attempt to create a shared context. :param int require: OpenGL version code :param bool standalone: Headless flag Example:: # Accept the current context version ctx = moderngl.create_context() # Require at least OpenGL 4.3 ctx = moderngl.create_context(require=430) # Create a windowless context ctx = moderngl.create_context(standalone=True) .. py:function:: moderngl.create_standalone_context(...) -> Context Deprecated, use :py:func:`moderngl.create_context()` with the standalone parameter set. .. py:function:: moderngl.get_context() -> Context Returns the previously created context object. Example:: # my_app.py from moderngl import create_context ctx = create_context(...) # my_renderer.py from moderngl import get_context class MyRenderer: def __init__(self): self.ctx = get_context() self.program = ... self.vao = ... Context Flags ------------- These were moved to :py:class:`Context`. .. py:attribute:: moderngl.NOTHING See :py:attr:`Context.NOTHING` .. py:attribute:: moderngl.BLEND See :py:attr:`Context.BLEND` .. py:attribute:: moderngl.DEPTH_TEST See :py:attr:`Context.DEPTH_TEST` .. py:attribute:: moderngl.CULL_FACE See :py:attr:`Context.CULL_FACE` .. py:attribute:: moderngl.RASTERIZER_DISCARD See :py:attr:`Context.RASTERIZER_DISCARD` .. py:attribute:: moderngl.PROGRAM_POINT_SIZE See :py:attr:`Context.PROGRAM_POINT_SIZE` .. py:attribute:: moderngl.POINTS See :py:attr:`Context.POINTS` .. py:attribute:: moderngl.LINES See :py:attr:`Context.LINES` .. py:attribute:: moderngl.LINE_LOOP See :py:attr:`Context.LINE_LOOP` .. py:attribute:: moderngl.LINE_STRIP See :py:attr:`Context.LINE_STRIP` .. py:attribute:: moderngl.TRIANGLES See :py:attr:`Context.TRIANGLES` .. py:attribute:: moderngl.TRIANGLE_STRIP See :py:attr:`Context.TRIANGLE_STRIP` .. py:attribute:: moderngl.TRIANGLE_FAN See :py:attr:`Context.TRIANGLE_FAN` .. py:attribute:: moderngl.LINES_ADJACENCY See :py:attr:`Context.LINES_ADJACENCY` .. py:attribute:: moderngl.LINE_STRIP_ADJACENCY See :py:attr:`Context.LINE_STRIP_ADJACENCY` .. py:attribute:: moderngl.TRIANGLES_ADJACENCY See :py:attr:`Context.TRIANGLES_ADJACENCY` .. py:attribute:: moderngl.TRIANGLE_STRIP_ADJACENCY See :py:attr:`Context.TRIANGLE_STRIP_ADJACENCY` .. py:attribute:: moderngl.PATCHES See :py:attr:`Context.PATCHES` .. py:attribute:: moderngl.NEAREST See :py:attr:`Context.NEAREST` .. py:attribute:: moderngl.LINEAR See :py:attr:`Context.LINEAR` .. py:attribute:: moderngl.NEAREST_MIPMAP_NEAREST See :py:attr:`Context.NEAREST_MIPMAP_NEAREST` .. py:attribute:: moderngl.LINEAR_MIPMAP_NEAREST See :py:attr:`Context.LINEAR_MIPMAP_NEAREST` .. py:attribute:: moderngl.NEAREST_MIPMAP_LINEAR See :py:attr:`Context.NEAREST_MIPMAP_LINEAR` .. py:attribute:: moderngl.LINEAR_MIPMAP_LINEAR See :py:attr:`Context.LINEAR_MIPMAP_LINEAR` .. py:attribute:: moderngl.ZERO See :py:attr:`Context.ZERO` .. py:attribute:: moderngl.ONE See :py:attr:`Context.ONE` .. py:attribute:: moderngl.SRC_COLOR See :py:attr:`Context.SRC_COLOR` .. py:attribute:: moderngl.ONE_MINUS_SRC_COLOR See :py:attr:`Context.ONE_MINUS_SRC_COLOR` .. py:attribute:: moderngl.SRC_ALPHA See :py:attr:`Context.SRC_ALPHA` .. py:attribute:: moderngl.ONE_MINUS_SRC_ALPHA See :py:attr:`Context.ONE_MINUS_SRC_ALPHA` .. py:attribute:: moderngl.DST_ALPHA See :py:attr:`Context.DST_ALPHA` .. py:attribute:: moderngl.ONE_MINUS_DST_ALPHA See :py:attr:`Context.ONE_MINUS_DST_ALPHA` .. py:attribute:: moderngl.DST_COLOR See :py:attr:`Context.DST_COLOR` .. py:attribute:: moderngl.ONE_MINUS_DST_COLOR See :py:attr:`Context.ONE_MINUS_DST_COLOR` .. py:attribute:: moderngl.DEFAULT_BLENDING See :py:attr:`Context.DEFAULT_BLENDING` .. py:attribute:: moderngl.ADDITIVE_BLENDING See :py:attr:`Context.ADDITIVE_BLENDING` .. py:attribute:: moderngl.PREMULTIPLIED_ALPHA See :py:attr:`Context.PREMULTIPLIED_ALPHA` .. py:attribute:: moderngl.FUNC_ADD See :py:attr:`Context.FUNC_ADD` .. py:attribute:: moderngl.FUNC_SUBTRACT See :py:attr:`Context.FUNC_SUBTRACT` .. py:attribute:: moderngl.FUNC_REVERSE_SUBTRACT See :py:attr:`Context.FUNC_REVERSE_SUBTRACT` .. py:attribute:: moderngl.MIN See :py:attr:`Context.MIN` .. py:attribute:: moderngl.MAX See :py:attr:`Context.MAX` .. py:attribute:: moderngl.FIRST_VERTEX_CONVENTION See :py:attr:`Context.FIRST_VERTEX_CONVENTION` .. py:attribute:: moderngl.LAST_VERTEX_CONVENTION See :py:attr:`Context.LAST_VERTEX_CONVENTION` moderngl-moderngl-773b733/docs/reference/program.rst000066400000000000000000000132531470420062000224750ustar00rootroot00000000000000Program ======= .. py:class:: Program Returned by :py:meth:`Context.program` A Program object represents fully processed executable code in the OpenGL Shading Language, \ for one or more Shader stages. In ModernGL, a Program object can be assigned to :py:class:`VertexArray` objects. The VertexArray object is capable of binding the Program object once the :py:meth:`VertexArray.render` or :py:meth:`VertexArray.transform` is called. Program objects has no method called ``use()``, VertexArrays encapsulate this mechanism. A Program object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.program` to create one. Uniform buffers can be bound using :py:meth:`Buffer.bind_to_uniform_block` or can be set individually. For more complex binding yielding higher performance consider using :py:class:`moderngl.Scope`. Methods ------- .. py:method:: Program.get(key: str, default: Any) -> Uniform | UniformBlock | Attribute | Varying Returns a Uniform, UniformBlock, Attribute or Varying. :param default: This is the value to be returned in case key does not exist. .. py:method:: Program.__getitem__ Get a member such as uniforms, uniform blocks, attributes and varyings by name. .. code-block:: python # Get a uniform uniform = program['color'] # Uniform values can be set on the returned object # or the `__setitem__` shortcut can be used. program['color'].value = 1.0, 1.0, 1.0, 1.0 # Still when writing byte data we need to use the `write()` method program['color'].write(buffer) .. py:method:: Program.__setitem__ Set a value of uniform or uniform block. .. code-block:: python # Set a vec4 uniform uniform['color'] = 1.0, 1.0, 1.0, 1.0 # Optionally we can store references to a member and set the value directly uniform = program['color'] uniform.value = 1.0, 0.0, 0.0, 0.0 uniform = program['cameraMatrix'] uniform.write(camera_matrix) .. py:method:: Program.__iter__ Yields the internal members names as strings. This includes all members such as uniforms, attributes etc. Example:: # Print member information for name in program: member = program[name] print(name, type(member), member) Output:: vert vert_color gl_InstanceID rotation scale We can filter on member type if needed:: for name in prog: member = prog[name] if isinstance(member, moderngl.Uniform): print('Uniform', name, member) or a less verbose version using dict comprehensions:: uniforms = {name: self.prog[name] for name in self.prog if isinstance(self.prog[name], moderngl.Uniform)} print(uniforms) Output:: {'rotation': , 'scale': } .. py:method:: Program.release() -> None Release the ModernGL object. Attributes ---------- .. py:attribute:: Program.geometry_input :type: int The geometry input primitive. The GeometryShader's input primitive if the GeometryShader exists. The geometry input primitive will be used for validation. (from ``layout(input_primitive) in;``) This can only be ``POINTS``, ``LINES``, ``LINES_ADJACENCY``, ``TRIANGLES``, ``TRIANGLE_ADJACENCY``. .. py:attribute:: Program.geometry_output :type: int The geometry output primitive. The GeometryShader's output primitive if the GeometryShader exists. This can only be ``POINTS``, ``LINE_STRIP`` and ``TRIANGLE_STRIP`` (from ``layout(output_primitive, max_vertices = vert_count) out;``) .. py:attribute:: Program.geometry_vertices :type: int The maximum number of vertices that the geometry shader will output. (from ``layout(output_primitive, max_vertices = vert_count) out;``) .. py:attribute:: Program.is_transform :type: int If this is a tranform program (no fragment shader). .. py:attribute:: Program.ctx :type: Context The context this object belongs to .. py:attribute:: Program.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: Program.extra :type: Any User defined data. Examples -------- .. rubric:: A simple program designed for rendering .. code-block:: python :linenos: my_render_program = ctx.program( vertex_shader=''' #version 330 in vec2 vert; void main() { gl_Position = vec4(vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 color; void main() { color = vec4(0.3, 0.5, 1.0, 1.0); } ''', ) .. rubric:: A simple program designed for transforming .. code-block:: python :linenos: my_transform_program = ctx.program( vertex_shader=''' #version 330 in vec4 vert; out float vert_length; void main() { vert_length = length(vert); } ''', varyings=['vert_length'] ) Program Members --------------- .. toctree:: :maxdepth: 2 uniform.rst uniform_block.rst storage_block.rst attribute.rst varying.rst moderngl-moderngl-773b733/docs/reference/query.rst000066400000000000000000000034261470420062000221740ustar00rootroot00000000000000Query ===== .. py:class:: Query Returned by :py:meth:`Context.query` This class represents a Query object. Attributes ---------- .. py:attribute:: Query.samples :type: int The number of samples passed. .. py:attribute:: Query.primitives :type: int The number of primitives generated. .. py:attribute:: Query.elapsed :type: int The time elapsed in nanoseconds. .. py:attribute:: Query.crender :type: ConditionalRender .. py:attribute:: Query.ctx :type: Context The context this object belongs to .. py:attribute:: Query.extra :type: Any User defined data. Examples -------- .. rubric:: Simple query example .. code-block:: python :linenos: import moderngl import numpy as np ctx = moderngl.create_standalone_context() prog = ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 color; void main() { color = vec4(1.0, 0.0, 0.0, 1.0); } ''', ) vertices = np.array([ 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, ], dtype='f4') vbo = ctx.buffer(vertices.tobytes()) vao = ctx.simple_vertex_array(prog, vbo, 'in_vert') fbo = ctx.simple_framebuffer((64, 64)) fbo.use() query = ctx.query(samples=True, time=True) with query: vao.render() print('It took %d nanoseconds' % query.elapsed) print('to render %d samples' % query.samples) .. rubric:: Output .. code-block:: text It took 13529 nanoseconds to render 496 samples .. toctree:: :maxdepth: 1 conditional_render.rst moderngl-moderngl-773b733/docs/reference/renderbuffer.rst000066400000000000000000000034461470420062000235020ustar00rootroot00000000000000Renderbuffer ============ .. py:class:: Renderbuffer Returned by :py:meth:`Context.renderbuffer` or :py:meth:`Context.depth_renderbuffer` Renderbuffer objects are OpenGL objects that contain images. They are created and used specifically with :py:class:`Framebuffer` objects. They are optimized for use as render targets, while :py:class:`Texture` objects may not be, and are the logical choice when you do not need to sample from the produced image. If you need to resample, use Textures instead. Renderbuffer objects also natively accommodate multisampling. A Renderbuffer object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.renderbuffer` or :py:meth:`Context.depth_renderbuffer` to create one. Methods ------- .. py:method:: Renderbuffer.release Attributes ---------- .. py:attribute:: Renderbuffer.width :type: int The width of the renderbuffer. .. py:attribute:: Renderbuffer.height :type: int The height of the renderbuffer. .. py:attribute:: Renderbuffer.size :type: Tuple[int, int] The size of the renderbuffer. .. py:attribute:: Renderbuffer.samples :type: int The number of samples for multisampling. .. py:attribute:: Renderbuffer.components :type: int The number components. .. py:attribute:: Renderbuffer.depth :type: bool Determines if the renderbuffer contains depth values. .. py:attribute:: Renderbuffer.dtype :type: str Data type. .. py:attribute:: Renderbuffer.ctx :type: Context The context this object belongs to .. py:attribute:: Renderbuffer.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: Renderbuffer.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/sampler.rst000066400000000000000000000127401470420062000224710ustar00rootroot00000000000000Sampler ======= .. py:class:: Sampler Returned by :py:meth:`Context.sampler` A Sampler Object is an OpenGL Object that stores the sampling parameters for a Texture access inside of a shader. When a sampler object is bound to a texture image unit, the internal sampling parameters for a texture bound to the same image unit are all ignored. Instead, the sampling parameters are taken from this sampler object. Unlike textures, a samplers state can also be changed freely be at any time without the sampler object being bound/in use. Samplers are bound to a texture unit and not a texture itself. Be careful with leaving samplers bound to texture units as it can cause texture incompleteness issues (the texture bind is ignored). Sampler bindings do clear automatically between every frame so a texture unit need at least one bind/use per frame. Methods ------- .. py:method:: Sampler.use(location: int = 0) -> None: Bind the sampler to a texture unit. :param int location: The texture unit .. py:method:: Sampler.clear(location: int = 0) -> None: Clear the sampler binding on a texture unit. :param int location: The texture unit .. py:method:: Sampler.assign(index: int) -> tuple Helper method for assigning samplers to scopes. Example:: s1 = ctx.sampler(...) s2 = ctx.sampler(...) ctx.scope(samplers=(s1.assign(0), s1.assign(1)), ...)mpler .. py:method:: Sampler.release Attributes ---------- .. py:attribute:: Sampler.texture :type: Texture The texture object to sample. .. py:attribute:: Sampler.repeat_x :type: bool The x repeat flag for the sampler (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) sampler.repeat_x = True # Disable texture repeat (GL_CLAMP_TO_EDGE) sampler.repeat_x = False .. py:attribute:: Sampler.repeat_y :type: bool The y repeat flag for the sampler (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) sampler.repeat_y = True # Disable texture repeat (GL_CLAMP_TO_EDGE) sampler.repeat_y = False .. py:attribute:: Sampler.repeat_z :type: bool The z repeat flag for the sampler (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) sampler.repeat_z = True # Disable texture repeat (GL_CLAMP_TO_EDGE) sampler.repeat_z = False .. py:attribute:: Sampler.filter :type: tuple The minification and magnification filter for the sampler. (Default ``(moderngl.LINEAR. moderngl.LINEAR)``) Example:: sampler.filter == (moderngl.NEAREST, moderngl.NEAREST) sampler.filter == (moderngl.LINEAR_MIPMAP_LINEAR, moderngl.LINEAR) sampler.filter == (moderngl.NEAREST_MIPMAP_LINEAR, moderngl.NEAREST) sampler.filter == (moderngl.LINEAR_MIPMAP_NEAREST, moderngl.NEAREST) .. py:attribute:: Sampler.compare_func :type: tuple The compare function for a depth textures (Default ``'?'``). By default samplers don't have depth comparison mode enabled. This means that depth texture values can be read as a ``sampler2D`` using ``texture()`` in a GLSL shader by default. When setting this property to a valid compare mode, ``GL_TEXTURE_COMPARE_MODE`` is set to ``GL_COMPARE_REF_TO_TEXTURE`` so that texture lookup functions in GLSL will return a depth comparison result instead of the actual depth value. Accepted compare functions:: .compare_func = '' # Disale depth comparison completely sampler.compare_func = '<=' # GL_LEQUAL sampler.compare_func = '<' # GL_LESS sampler.compare_func = '>=' # GL_GEQUAL sampler.compare_func = '>' # GL_GREATER sampler.compare_func = '==' # GL_EQUAL sampler.compare_func = '!=' # GL_NOTEQUAL sampler.compare_func = '0' # GL_NEVER sampler.compare_func = '1' # GL_ALWAYS .. py:attribute:: Sampler.anisotropy :type: float Number of samples for anisotropic filtering (Default ``1.0``). The value will be clamped in range ``1.0`` and ``ctx.max_anisotropy``. Any value greater than 1.0 counts as a use of anisotropic filtering:: # Disable anisotropic filtering sampler.anisotropy = 1.0 # Enable anisotropic filtering suggesting 16 samples as a maximum sampler.anisotropy = 16.0 .. py:attribute:: Sampler.border_color :type: tuple The (r, g, b, a) color for the texture border (Default ``(0.0, 0.0, 0.0, 0.0)``). When setting this value the ``repeat_`` values are overridden setting the texture wrap to return the border color when outside [0, 1] range. Example:: # Red border color sampler.border_color = (1.0, 0.0, 0.0, 0.0) .. py:attribute:: Sampler.min_lod :type: float Minimum level-of-detail parameter (Default ``-1000.0``). This floating-point value limits the selection of highest resolution mipmap (lowest mipmap level) .. py:attribute:: Sampler.max_lod :type: float Minimum level-of-detail parameter (Default ``1000.0``). This floating-point value limits the selection of the lowest resolution mipmap (highest mipmap level) .. py:attribute:: Sampler.ctx :type: Context The context this object belongs to .. py:attribute:: Sampler.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: Sampler.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/scope.rst000066400000000000000000000057151470420062000221430ustar00rootroot00000000000000Scope ===== .. py:class:: Scope Returned by :py:meth:`Context.scope` This class represents a Scope object. Responsibilities on enter: - Set the enable flags. - Bind the framebuffer. - Assigning textures to texture locations. - Assigning buffers to uniform buffers. - Assigning buffers to shader storage buffers. Responsibilities on exit: - Restore the enable flags. - Restore the framebuffer. Methods ------- .. py:method:: Scope.release Attributes ---------- .. py:attribute:: Scope.ctx :type: Context The context this object belongs to .. py:attribute:: Scope.extra :type: Any User defined data. Examples -------- .. rubric:: Simple scope example .. code-block:: python scope1 = ctx.scope(fbo1, moderngl.BLEND) scope2 = ctx.scope(fbo2, moderngl.DEPTH_TEST | moderngl.CULL_FACE) with scope1: # do some rendering with scope2: # do some rendering .. rubric:: Scope for querying .. code-block:: python query = ctx.query(samples=True) scope = ctx.scope(ctx.screen, moderngl.DEPTH_TEST | moderngl.RASTERIZER_DISCARD) with scope, query: # do some rendering print(query.samples) .. rubric:: Understanding what scope objects do .. code-block:: python scope = ctx.scope( framebuffer=framebuffer1, enable_only=moderngl.BLEND, textures=[ (texture1, 4), (texture2, 3), ], uniform_buffers=[ (buffer1, 6), (buffer2, 5), ], storage_buffers=[ (buffer3, 8), ], ) # Let's assume we have some state before entering the scope some_random_framebuffer.use() some_random_texture.use(3) some_random_buffer.bind_to_uniform_block(5) some_random_buffer.bind_to_storage_buffer(8) ctx.enable_only(moderngl.DEPTH_TEST) with scope: # on __enter__ # framebuffer1.use() # ctx.enable_only(moderngl.BLEND) # texture1.use(4) # texture2.use(3) # buffer1.bind_to_uniform_block(6) # buffer2.bind_to_uniform_block(5) # buffer3.bind_to_storage_buffer(8) # do some rendering # on __exit__ # some_random_framebuffer.use() # ctx.enable_only(moderngl.DEPTH_TEST) # Originally we had the following, let's see what was changed some_random_framebuffer.use() # This was restored hurray! some_random_texture.use(3) # Have to restore it manually. some_random_buffer.bind_to_uniform_block(5) # Have to restore it manually. some_random_buffer.bind_to_storage_buffer(8) # Have to restore it manually. ctx.enable_only(moderngl.DEPTH_TEST) # This was restored too. # Scope objects only do as much as necessary. # Restoring the framebuffer and enable flags are lowcost operations and # without them you could get a hard time debugging the application. moderngl-moderngl-773b733/docs/reference/storage_block.rst000066400000000000000000000016021470420062000236370ustar00rootroot00000000000000StorageBlock ============ .. py:class:: StorageBlock Available in :py:meth:`Program.__getitem__` Storage Blocks are OpenGL 4.3+ Program accessible data blocks. Compared to UniformBlocks they can be larger in size and also support write operations. For less than one page (64KB) read-only data use UniformBlocks. .. py:attribute:: StorageBlock.binding :type: int The binding of the Storage block. Same as the value. .. py:attribute:: StorageBlock.value :type: int The value of the Storage block. Same as the binding. .. py:attribute:: StorageBlock.name :type: str The name of the Storage block. .. py:attribute:: StorageBlock.index :type: int The index of the Storage block. .. py:attribute:: StorageBlock.size :type: int The size of the Storage block. .. py:attribute:: StorageBlock.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/texture.rst000066400000000000000000000204431470420062000225250ustar00rootroot00000000000000Texture ======= .. py:class:: Texture Returned by :py:meth:`Context.texture` and :py:meth:`Context.depth_texture` A Texture is an OpenGL object that contains one or more images that all have the same image format. A texture can be used in two ways. It can be the source of a texture access from a Shader, or it can be used as a render target. A Texture object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.texture` or :py:meth:`Context.depth_texture` to create one. Methods ------- .. py:method:: Texture.read(alignment: int = 1) -> bytes Read the pixel data as bytes into system memory. :param int alignment: The byte alignment of the pixels. .. py:method:: Texture.read_into(buffer: Any, alignment: int = 1, write_offset: int = 0) Read the content of the texture into a bytearray or :py:class:`~moderngl.Buffer`. The advantage of reading into a :py:class:`~moderngl.Buffer` is that pixel data does not need to travel all the way to system memory:: # Reading pixel data into a bytearray data = bytearray(8) texture = ctx.texture3d((2, 2, 2), 1) texture.read_into(data) # Reading pixel data into a buffer data = ctx.buffer(reserve=8) texture = ctx.texture3d((2, 2, 2), 1) texture.read_into(data) :param bytearray buffer: The buffer that will receive the pixels. :param int alignment: The byte alignment of the pixels. :param int write_offset: The write offset. .. py:method:: Texture.write(data: Any, viewport: tuple, alignment: int = 1) Update the content of the texture from byte data or a moderngl :py:class:`~moderngl.Buffer`. Examples:: # Write data from a moderngl Buffer data = ctx.buffer(reserve=8) texture = ctx.texture3d((2, 2, 2), 1) texture.write(data) # Write data from bytes data = b'\xff\xff\xff\xff\xff\xff\xff\xff' texture = ctx.texture3d((2, 2), 1) texture.write(data) :param bytes data: The pixel data. :param tuple viewport: The viewport. :param int alignment: The byte alignment of the pixels. .. py:method:: Texture.build_mipmaps(base: int = 0, max_level: int = 1000) -> None Generate mipmaps. This also changes the texture filter to ``LINEAR_MIPMAP_LINEAR, LINEAR`` (Will be removed in ``6.x``) :param int base: The base level :param int max_level: The maximum levels to generate .. py:method:: Texture.bind_to_image(unit: int, read: bool = True, write: bool = True, level: int = 0, format: int = 0) -> None Bind a texture to an image unit (OpenGL 4.2 required). This is used to bind textures to image units for shaders. The idea with image load/store is that the user can bind one of the images in a Texture to a number of image binding points (which are separate from texture image units). Shaders can read information from these images and write information to them, in ways that they cannot with textures. It's important to specify the right access type for the image. This can be set with the ``read`` and ``write`` arguments. Allowed combinations are: - **Read-only**: ``read=True`` and ``write=False`` - **Write-only**: ``read=False`` and ``write=True`` - **Read-write**: ``read=True`` and ``write=True`` ``format`` specifies the format that is to be used when performing formatted stores into the image from shaders. ``format`` must be compatible with the texture's internal format. **By default the format of the texture is passed in. The format parameter is only needed when overriding this behavior.** Note that we bind the 3D textured layered making the entire texture readable and writable. It is possible to bind a specific 2D section in the future. More information: - https://www.khronos.org/opengl/wiki/Image_Load_Store - https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBindImageTexture.xhtml :param int unit: Specifies the index of the image unit to which to bind the texture :param Texture texture: The texture to bind :param bool read: Allows the shader to read the image (default: ``True``) :param bool write: Allows the shader to write to the image (default: ``True``) :param int level: Level of the texture to bind (default: ``0``). :param int format: (optional) The OpenGL enum value representing the format (defaults to the texture's format) .. py:method:: Texture.use(location: int = 0) -> None Better to use :py:class:`Sampler` objects and avoid this call on the Texture object directly. Bind the texture to a texture unit. :param int location: The texture location/unit. The location is the texture unit we want to bind the texture. This should correspond with the value of the ``sampler2D`` uniform in the shader because samplers read from the texture unit we assign to them:: # Define what texture unit our two sampler3D uniforms should represent program['texture_a'] = 0 program['texture_b'] = 1 # Bind textures to the texture units first_texture.use(location=0) second_texture.use(location=1) .. py:method:: Texture.get_handle(resident: bool = True) -> int Handle for Bindless Textures. :param bool resident: Make the texture resident. Once a handle is created its parameters cannot be changed. Attempting to do so will have no effect. (filter, wrap etc). There is no way to undo this immutability. Handles cannot be used by shaders until they are resident. This method can be called multiple times to move a texture in and out of residency:: >> texture.get_handle(resident=False) 4294969856 >> texture.get_handle(resident=True) 4294969856 Ths same handle is returned if the handle already exists. .. note:: Limitations from the OpenGL wiki The amount of storage available for resident images/textures may be less than the total storage for textures that is available. As such, you should attempt to minimize the time a texture spends being resident. Do not attempt to take steps like making textures resident/unresident every frame or something. But if you are finished using a texture for some time, make it unresident. .. py:method:: Texture.release Attributes ---------- .. py:attribute:: Texture.width :type: int The width of the texture. .. py:attribute:: Texture.height :type: int The height of the texture. .. py:attribute:: Texture.size :type: Tuple[int, int] The size of the texture. .. py:attribute:: Texture.components :type: int The number of components of the texture. .. py:attribute:: Texture.samples :type: int The number of samples set for the texture used in multisampling. .. py:attribute:: Texture.depth :type: bool Determines if the texture contains depth values. .. py:attribute:: Texture.dtype :type: str Data type. .. py:attribute:: Texture.swizzle :type: str The swizzle mask of the texture (Default ``'RGBA'``). The swizzle mask change/reorder the ``vec4`` value returned by the ``texture()`` function in a GLSL shaders. This is represented by a 4 character string were each character can be:: 'R' GL_RED 'G' GL_GREEN 'B' GL_BLUE 'A' GL_ALPHA '0' GL_ZERO '1' GL_ONE Example:: # Alpha channel will always return 1.0 texture.swizzle = 'RGB1' # Only return the red component. The rest is masked to 0.0 texture.swizzle = 'R000' # Reverse the components texture.swizzle = 'ABGR' .. py:attribute:: Texture.repeat_x See :py:class:`Sampler.repeat_x` .. py:attribute:: Texture.repeat_y See :py:class:`Sampler.repeat_y` .. py:attribute:: Texture.filter See :py:class:`Sampler.filter` .. py:attribute:: Texture.compare_func See :py:class:`Sampler.compare_func` .. py:attribute:: Texture.anisotropy See :py:class:`Sampler.anisotropy` .. py:attribute:: Texture.ctx :type: Context The context this object belongs to .. py:attribute:: Texture.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: Texture.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/texture3d.rst000066400000000000000000000027301470420062000227530ustar00rootroot00000000000000Texture3D ========= .. py:class:: Texture3D Returned by :py:meth:`Context.texture3d` A Texture is an OpenGL object that contains one or more images that all have the same image format. A texture can be used in two ways. It can be the source of a texture access from a Shader, or it can be used as a render target. A Texture3D object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.texture3d` to create one. Methods ------- .. py:method:: Texture3D.read .. py:method:: Texture3D.read_into .. py:method:: Texture3D.write .. py:method:: Texture3D.build_mipmaps .. py:method:: Texture3D.bind_to_image .. py:method:: Texture3D.use .. py:method:: Texture3D.release .. py:method:: Texture3D.get_handle Attributes ---------- .. py:attribute:: Texture3D.repeat_x .. py:attribute:: Texture3D.repeat_y .. py:attribute:: Texture3D.repeat_z .. py:attribute:: Texture3D.filter .. py:attribute:: Texture3D.swizzle .. py:attribute:: Texture3D.width .. py:attribute:: Texture3D.height .. py:attribute:: Texture3D.depth .. py:attribute:: Texture3D.size .. py:attribute:: Texture3D.dtype .. py:attribute:: Texture3D.components .. py:attribute:: Texture3D.ctx :type: Context The context this object belongs to .. py:attribute:: Texture3D.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: Texture3D.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/texture_array.rst000066400000000000000000000030131470420062000237150ustar00rootroot00000000000000TextureArray ============ .. py:class:: TextureArray Returned by :py:meth:`Context.texture_array` An Array Texture is a Texture where each mipmap level contains an array of images of the same size. Array textures may have Mipmaps, but each mipmap in the texture has the same number of levels. A TextureArray object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.texture_array` to create one. Methods ------- .. py:method:: TextureArray.read .. py:method:: TextureArray.read_into .. py:method:: TextureArray.write .. py:method:: TextureArray.bind_to_image .. py:method:: TextureArray.build_mipmaps .. py:method:: TextureArray.use .. py:method:: TextureArray.release .. py:method:: TextureArray.get_handle Attributes ---------- .. py:attribute:: TextureArray.repeat_x .. py:attribute:: TextureArray.repeat_y .. py:attribute:: TextureArray.filter .. py:attribute:: TextureArray.swizzle .. py:attribute:: TextureArray.anisotropy .. py:attribute:: TextureArray.width .. py:attribute:: TextureArray.height .. py:attribute:: TextureArray.layers .. py:attribute:: TextureArray.size .. py:attribute:: TextureArray.dtype .. py:attribute:: TextureArray.components .. py:attribute:: TextureArray.ctx :type: Context The context this object belongs to .. py:attribute:: TextureArray.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: TextureArray.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/texture_cube.rst000066400000000000000000000031451470420062000235230ustar00rootroot00000000000000TextureCube =========== .. py:class:: TextureCube Returned by :py:meth:`Context.texture_cube` and :py:meth:`Context.depth_texture_cube` Cubemaps are a texture using the type GL_TEXTURE_CUBE_MAP. They are similar to 2D textures in that they have two dimensions. However, each mipmap level has 6 faces, with each face having the same size as the other faces. The width and height of a cubemap must be the same (ie: cubemaps are squares), but these sizes need not be powers of two. .. Note:: ModernGL enables ``GL_TEXTURE_CUBE_MAP_SEAMLESS`` globally to ensure filtering will be done across the cube faces. A Texture3D object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.texture_cube` to create one. Methods ------- .. py:method:: TextureCube.read .. py:method:: TextureCube.read_into .. py:method:: TextureCube.write .. py:method:: TextureCube.bind_to_image .. py:method:: TextureCube.use .. py:method:: TextureCube.release .. py:method:: TextureCube.get_handle Attributes ---------- .. py:attribute:: TextureCube.size .. py:attribute:: TextureCube.dtype .. py:attribute:: TextureCube.components .. py:attribute:: TextureCube.filter .. py:attribute:: TextureCube.swizzle .. py:attribute:: TextureCube.anisotropy .. py:attribute:: TextureCube.ctx :type: Context The context this object belongs to .. py:attribute:: TextureCube.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: TextureCube.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/uniform.rst000066400000000000000000000024011470420062000224760ustar00rootroot00000000000000Uniform ======= .. py:class:: Uniform Available in :py:meth:`Program.__getitem__` A uniform is a global GLSL variable declared with the 'uniform' storage qualifier. These act as parameters that the user of a shader program can pass to that program. In ModernGL, Uniforms can be accessed using :py:meth:`Program.__getitem__` or :py:meth:`Program.__iter__` Methods ------- .. py:method:: read() -> bytes: Read the value of the uniform. .. py:method:: write(data: Any) -> None: Write the value of the uniform. Attributes ---------- .. py:attribute:: Uniform.location :type: int The location of the uniform. The result of the glGetUniformLocation. .. py:attribute:: Uniform.array_length :type: int If the uniform is an array the array_length is the length of the array otherwise `1`. .. py:attribute:: Uniform.dimension :type: int The uniform dimension. .. py:attribute:: Uniform.name :type: str The uniform name. The name does not contain leading `[0]`. The name may contain `[ ]` when the uniform is part of a struct. .. py:attribute:: Uniform.value :type: Any The uniform value stored in the program object. .. py:attribute:: Uniform.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/uniform_block.rst000066400000000000000000000012361470420062000236550ustar00rootroot00000000000000UniformBlock ============ .. py:class:: UniformBlock Available in :py:meth:`Program.__getitem__` .. py:attribute:: UniformBlock.binding :type: int The binding of the uniform block. Same as the value. .. py:attribute:: UniformBlock.value :type: int The value of the uniform block. Same as the binding. .. py:attribute:: UniformBlock.name :type: str The name of the uniform block. .. py:attribute:: UniformBlock.index :type: int The index of the uniform block. .. py:attribute:: UniformBlock.size :type: int The size of the uniform block. .. py:attribute:: UniformBlock.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/varying.rst000066400000000000000000000005611470420062000225030ustar00rootroot00000000000000Varying ======= .. py:class:: Varying Available in :py:meth:`Program.__getitem__` Represents a program output varying. .. py:attribute:: Varying.name :type: str The name of the varying. .. py:attribute:: Varying.number :type: int The output location of the varying. .. py:attribute:: Varying.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/reference/vertex_array.rst000066400000000000000000000105301470420062000235340ustar00rootroot00000000000000VertexArray =========== .. py:class:: VertexArray Returned by :py:meth:`Context.vertex_array` A VertexArray object is an OpenGL object that stores all of the state needed to supply vertex data. It stores the format of the vertex data as well as the Buffer objects providing the vertex data arrays. In ModernGL, the VertexArray object also stores a reference for a :py:class:`Program` object. Compared to OpenGL, :py:class:`VertexArray` also stores a :py:class:`Program` object. Methods ------- .. py:method:: VertexArray.render(mode: int | None = None, vertices: int = -1, first: int = 0, instances: int = -1) -> None The render primitive (mode) must be the same as the input primitive of the GeometryShader. :param int mode: By default :py:data:`TRIANGLES` will be used. :param int vertices: The number of vertices to transform. :param int first: The index of the first vertex to start with. :param int instances: The number of instances. .. py:method:: VertexArray.render_indirect(buffer: Buffer, mode: int | None = None, count: int = -1, first: int = 0) -> None The render primitive (mode) must be the same as the input primitive of the GeometryShader. The draw commands are 5 integers: (count, instanceCount, firstIndex, baseVertex, baseInstance). :param Buffer buffer: Indirect drawing commands. :param int mode: By default :py:data:`TRIANGLES` will be used. :param int count: The number of draws. :param int first: The index of the first indirect draw command. .. py:method:: VertexArray.transform(buffer: Buffer | List[Buffer], mode: int | None = None, vertices: int = -1, first: int = 0, instances: int = -1, buffer_offset: int = 0) -> None Transform vertices. Stores the output in a single buffer. The transform primitive (mode) must be the same as the input primitive of the GeometryShader. :param Buffer buffer: The buffer to store the output. :param int mode: By default :py:data:`POINTS` will be used. :param int vertices: The number of vertices to transform. :param int first: The index of the first vertex to start with. :param int instances: The number of instances. :param int buffer_offset: Byte offset for the output buffer .. py:method:: VertexArray.bind(attribute: int, cls: str, buffer: Buffer, fmt: str, offset: int = 0, stride: int = 0, divisor: int = 0, normalize: bool = False) Bind individual attributes to buffers. :param int location: The attribute location. :param str cls: The attribute class. Valid values are ``f``, ``i`` or ``d``. :param Buffer buffer: The buffer. :param str format: The buffer format. :param int offset: The offset. :param int stride: The stride. :param int divisor: The divisor. :param bool normalize: The normalize parameter, if applicable. .. py:method:: VertexArray.release() -> None Release the ModernGL object. Attributes ---------- .. py:attribute:: VertexArray.mode :type: int Get or set the default rendering mode. This value is used when ``mode`` is not passed in rendering calls. Examples:: vao.mode = moderngl.TRIANGLE_STRIPS .. py:attribute:: VertexArray.program :type: Program The program assigned to the VertexArray. The program used when rendering or transforming primitives. .. py:attribute:: VertexArray.index_buffer :type: Buffer The index buffer if the index_buffer is set, otherwise ``None``. .. py:attribute:: VertexArray.index_element_size :type: int The byte size of each element in the index buffer. .. py:attribute:: VertexArray.scope :type: Scope The scope to use while rendering. .. py:attribute:: VertexArray.vertices :type: int The number of vertices detected. This is the minimum of the number of vertices possible per Buffer. The size of the index_buffer determines the number of vertices. Per instance vertex attributes does not affect this number. .. py:attribute:: VertexArray.instances :type: int Get or set the number of instances to render. .. py:attribute:: VertexArray.ctx :type: Context The context this object belongs to .. py:attribute:: VertexArray.glo :type: int The internal OpenGL object. This values is provided for interoperability and debug purposes only. .. py:attribute:: VertexArray.extra :type: Any User defined data. moderngl-moderngl-773b733/docs/requirements.txt000066400000000000000000000000671470420062000216210ustar00rootroot00000000000000furo==2023.9.10 sphinx-copybutton==0.5.2 sphinx==7.2.6 moderngl-moderngl-773b733/docs/techniques/000077500000000000000000000000001470420062000205025ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/techniques/headless_ubuntu_18_server.rst000066400000000000000000000061761470420062000263360ustar00rootroot00000000000000 Headless on Ubuntu 18 Server ============================ Dependencies ------------ Headless rendering can be achieved with EGL or X11. We'll cover both cases. Starting with fresh ubuntu 18 server install we need to install required packages:: sudo apt-install python3-pip mesa-utils libegl1-mesa xvfb This should install mesa an diagnostic tools if needed later. * ``mesa-utils`` installs libgl1-mesa and tools like ``glxinfo``` * ``libegl1-mesa`` is optional if using EGL instead of X11 Creating a context ------------------ The libraries we are going to interact with has the following locations:: /usr/lib/x86_64-linux-gnu/libGL.so.1 /usr/lib/x86_64-linux-gnu/libX11.so.6 /usr/lib/x86_64-linux-gnu/libEGL.so.1 Double check that you have these libraries installed. ModernGL through the glcontext library will use ``ctype.find_library`` to locate the latest installed version. Before we can create a context we to run a virtual display:: export DISPLAY=:99.0 Xvfb :99 -screen 0 640x480x24 & Now we can create a context with x11 or egl: .. code:: # X11 import moderngl ctx = moderngl.create_context( standalone=True, # These are OPTIONAL if you want to load a specific version libgl='libGL.so.1', libx11='libX11.so.6', ) # EGL import moderngl ctx = moderngl.create_context( standalone=True, backend='egl', # These are OPTIONAL if you want to load a specific version libgl='libGL.so.1', libegl='libEGL.so.1', ) Running an example ------------------ Checking that everything works can be done with a basic triangle example. Install dependencies:: pip3 install moderngl numpy pyrr pillow The following example renders a triangle and writes it to a png file so we can verify the contents. .. image:: output.png .. code:: python import moderngl import numpy as np from PIL import Image from pyrr import Matrix44 # ------------------- # CREATE CONTEXT HERE # ------------------- prog = ctx.program(vertex_shader=""" #version 330 uniform mat4 model; in vec2 in_vert; in vec3 in_color; out vec3 color; void main() { gl_Position = model * vec4(in_vert, 0.0, 1.0); color = in_color; } """, fragment_shader=""" #version 330 in vec3 color; out vec4 fragColor; void main() { fragColor = vec4(color, 1.0); } """) vertices = np.array([ -0.6, -0.6, 1.0, 0.0, 0.0, 0.6, -0.6, 0.0, 1.0, 0.0, 0.0, 0.6, 0.0, 0.0, 1.0, ], dtype='f4') vbo = ctx.buffer(vertices) vao = ctx.simple_vertex_array(prog, vbo, 'in_vert', 'in_color') fbo = ctx.framebuffer(color_attachments=[ctx.texture((512, 512), 4)]) fbo.use() ctx.clear() prog['model'].write(Matrix44.from_eulers((0.0, 0.1, 0.0), dtype='f4')) vao.render(moderngl.TRIANGLES) data = fbo.read(components=3) image = Image.frombytes('RGB', fbo.size, data) image = image.transpose(Image.FLIP_TOP_BOTTOM) image.save('output.png') moderngl-moderngl-773b733/docs/techniques/index.rst000066400000000000000000000001301470420062000223350ustar00rootroot00000000000000Techniques ========== .. toctree:: :maxdepth: 2 headless_ubuntu_18_server.rst moderngl-moderngl-773b733/docs/techniques/output.png000066400000000000000000000335231470420062000225560ustar00rootroot00000000000000‰PNG  IHDR{C­7IDATxœí{ü}_=ç_+%IšB’„"©©†T’Š4Iä¹Ô%·HrÍ¥¡A#—r™4…HE%IRÊ” ©$ ‘¤íù㜽÷Zk¿×>kŸ½öõ<Ÿþèûù|~k­³Î:ïËëýÞëH›ÄérïXz%¹ÂÒ Ø®rª–^@Ip§y'ý»S%Wéþ}éµãŠK/` ¸&öwK. (d'¸¢Þ.UrrNΡÁ~Àôq%ý«;˜~U:üïJo_zQe@èÃ9U‡Ú¯;þωZ0ì2€$WÖ¿èPûu•T9UÇRð•ÿe饀 Àæ]ô¶ÊU‡_’œ*§öÛÀU3ïÙ}IÎ9ÉU¨@°€ ÞUÿì<ñ'쪤JWyëÒk €…«š¨ß¹ƒ TGýv æªú§JU­ö]@‡¢ÁÖAx7½ÙEjO· èð8ØUß²ôbFAÐ6þ«òÅ'I®r$°qÈZÞ]ÿ؆ü. ù뀫ÜñfÐJW{ó² À‘«ëMAã¿ÂÆÿƒ(ÔDý”‚aûàj¢ÆÿÚôÿ¥ØôÔ T Ø.H@’t ý}Üø/«\ëB®)_ýMË®àlÈtM½±ê6þ»¸ñ?|0øX F‚í‚h¿ïÅï}Nwzì:€  .÷Ðß:U‡ÞÿÞÆÿæq0¯ èð«k¼qá×pdpé¸chï=îÛx»]@ÒñO½. €BÍ{éoü¨?,ð¶BPò7ù«Ž^á=þnÁWpdp¹\Kohj¿›ŸÛÆuC~òƒæß”‚a“àà‚qUPàí¨=fã¿gú+¿JŒ › .”kë¯Sÿ)µ§i:üÖEwE\ë ¾€3 €Kä}ôW~ã¿\ø=_aãÝÚ6þ»„.DÛIØøßý²—° Èjü»€‰À¶@‚‹ã:úK™ÿÉ. NãÐtø£Jªtí¿^êEœ\Æ÷|êªKÁÍ_l2¸,®«×&ÿ½Ç}Û_Vãõû_pøçu^·äË\ï§¿8Ö~]7äW|ó³³Jj£þ¶$\ °ppIx•ÚÀôêÒñ.9€m€—ÂûëÕ.¬âêØø¯”ÚÓ~ÿ»ÚR° ÿRÝRðu_»Ôk\ Wÿ²Bþøæçö¦‡Œ¿ò! €M@—A­[ßóßü|üO\·ÔùÃ.Rçr½×,ùbò €ýóze¥êô—½tžùJÜäªæ—Ýzr3"ÀêÁÀιþ¬ê6þ]@Egpã¿d·¡ÁúA‚½Ó#ÔiüoÕ¤P\ú€W-ø¢r €=óAúÓ*º´9jŠ4þ§.X98Ø5þ n=BÍYÿªM¿).ñ@¬$ Ø-7Ô+¬žÿ)µçÐtúKä¯ÿÊ%_?À)È`Ÿ|ˆþ_Øø*Z÷»wºyC«ö$»€¼V"~ê(ú!€7þëD´®ƒ5O4þGû†×G÷}­Øýér[p2Ø!7ÒËSÿò ¼­Ð_‡õö—½Ø_¬¼ …V öÆõ²žÆÿ”Úcvµnát+‘’_+6å‹ìŽ<µ'y̓¬Æÿ^µ§÷kŤ¾b©è‡ vÅMô£Æ³6«ä5¶ÚÓÑ…œÒ]¤Ý[%H`à`_Úö%Móe/ç_(°>€`?ÜT/5„šÞë?[¡FòÕKJ~‰| .É—nôò¥ö 2Ø 7ÓKš¯{<º¡Áêòÿ…ü‹.£ñ_Ä%òX!d°ÚÚl_´îÂhÝùƒkàß%××øßä˜aÜøe‹ì @d°n®W‡òm÷q߸6«6Z@UÿqæÍÏ¿I`mà`óü½H®tCƒBͰ. 3Ä%€5›çœRBM=N¢ñœ¸tӗξ7}À¶ùpýAÜøo¨=ýBMØW鿌¸D«‚ 6Ì-ôB#äwVÈoßü|Æ ù]ò«[ vátJLW_]ÉI7{ÉB[`@¦½ÁÍzæ+ù㻀âg¾¬RpòúèÎ7 ÷=b_(°p°Un©ßkÄŸCoh80¶ñ¿éñÏk%B‚õ€›Åjª¤PS¤ñÿ”Ú“õ%òö¢ù· À„ 6É­ô‚ê¨åä 5Eÿ ](°p°=n­ß96þç 5ãÿ‡>óuª®° €`{”¼¡á0Ω. Ì/‘w‘Út<@%UºÅ gß32Ø·Ño÷6þ—‰ÖU—”Ë}­X©À €-ñQz~º6;,Zk³a´žù%òþVÌä–¿·ÌxÀ–èmü­·ƒD  R …¼Rp\”¦ «›á£õ[#ÿ-¡¦þ¡&ÙJ¤]@ž¸Ô¤— ¶Ã©ÆÿµYÙBM ö ùZ±qéÖ/˜{BÈ`ÜN¿y²ñ|mV±P†üJ‡üÞtA’âI, 6Àíõ³ñ_±Ú£V O«=ƒžù*×øo‰K‹‚`ä}œY74D­D¦ÚsvãJ\ºÍoÏ¿™ d°vî ß¨ÌðùŒÚlï A㿂馗P`AÈ`Õ|¬ž®ÍVƒk³Éžýiÿ{Q>þó¶Ï[dcDkÇUVø<â[y3j³ Q[WèiüÏÿ&áN]`)p°^>^ϪT%šèËu-..Ý'€3A‚•rG=sf—ººÐíž»ÈÀZ©-¬ó;)5N¨ñ¢õDm¶¨¸ä‚5×ÿ™±f’X2X#wÒ¯å†Ï’ê²ê©?ˆÖ;µÙ¾éŠ|­X_ÓêÇþó®O™óí€Ë„ à3ô*WÍñ­¼þ(£k³:d*õ/5»v¶vͲÖì¬5Ë`rp°mä›ªÍªÌ åk³ÃÅ¥ØÓĦ?ýœÀ´ ÁÜ|¦ž0aýD74Æ9).%ÔžhÍéAÂ2øÝ~iÖ7.2˜¿w³ PÓüÎj¦—œ7J§i5X³—©¤±Å%’˜2˜•{êñéðY½ás­'Âg;ZŸ.îÖ§øZ±ÞAzï¿»û/ÎùîÀ¥AóñÙúß•«Î Ÿ½Çµ’µYEu3Z×ßÓÒÖ¦?£®$ïB!€ÉÀÀŒ¸ÖðŽj¢o7¨6;a7ˆ|ÓŸDuªrÚ]¡Át ÁL|ŽwNý|µÙþ¯S4¥ö´âRJí1Å¥xH\ú´ŸŸóm‚‹‚ æàsõ3Aã¿ÖX›5u¡! )%.Ë>4­ªž±#.Å™ Àdà`Úð9-ÔL÷ÕŒ£nh(å®ZO£¤»2¦C‚é@‚Éù<ý¯,¡&¡ö küÏ—:º7ãa²Õ´}úç~Ïà2 €iù|ýt5QãFmvÐ AÔª6;E+QZ\ªç( LKÖ#¯'ÿûʪ‡y*?Ðî”Uí¯3j³Ê®Í†Ñúä·Uæf{Ëàr € ¹·~²ÓøŸŒÖ½ðYM䫯¦fFë íÁuk•\(PL‰Ñø¯Æü.«žî,ÔăÌê®N| æ©Í LÅ}ôãÃk³c˪c…O\껡¡#.¥Ôž⒳֬Ěïùø¹Þ:¸È`¾P=Ýø_‡ÏÙ·ç÷ 5îkg 5ö Éh=d¸¸”Ô…òšV)Ãà`Úðy°ØmØÐ µ§ï™¯fAånh˜¹ Hw(”ç¾zLÜßw ¼=ä}œ¹­DÁt‹uõˆK÷zÜlo"\dP˜/Òÿ½Ñºf Ÿ»!ÿ€Úl¿¸äeIµg”¸tø¿äP2(ÌÑúLáóµYg­YÖš[M,Õøâ‰è㌟û33½‘p@I¾D?RÕáíÁ·çO>u…"µY »PhÐmÕÞ òGÅÀ@QjkXk,S6Ñ[âÒܵYg­Y¹âÒùî  H@PŒûéѲê”Mô3×fµæŽP3H\ê¤#.µËþ‚Ÿšú­„ ÊpýÐ!JD¨9ŽhDë±rRD\êj2šVÓâ’êLeäýw$P2(ƒkmÜùuN3Z·IFë.ŒÖÕ­Oðµb=ƒ½ÿîÞ?9Ç› {‡ ðýϦö;¨Îi…ÏVä{ü«°®bFëÁ QI É+ÊÏZ›Âç8Ðön«V0H4] Ôt¢u¹F ©ŒA¢Äh\Ó*ÀHpp>_©ï¯¼Èº¯‰¾Hã¿,š/.¥ÕžìçÔ:BM;ˆZ;í‰KŠýG™. O\8$ A¾P#_¨YÓ Öš§l%’1È]@‡é¾èǦ~‡aßÀ™|•yˆÐ·}CCr5âRzæŒk%j_{bÔ¸µv«I` dp&.ŒÖÏoüïDëÃj³‰ðY'Ãç‰j³Áty·U+;ä÷¦;ò%?2ý[ »… Îá«õ}•f»µY×ÎÖFëê2_m¶Ì…BÎÈTœ5ÀÙà`0_£ïímü·„šF+±ÌŸ1ˆ,óg{š¾Ûó¡f;îj ¸p&H@0˜SµYÍSVíjœ%ԤťµٮPÓ)ƒ——îÿèYÞvØ!d0ŒéYÿÉÚ¬ùvÂçA‘oŸPSÿ+jâA’Ѻ§ö¨ÍTzÄ¥ü¦ÕiÄ%’8 àëô=¹ÿùb·|5±ÛºP(¤Îjꙡ&鮚éŠv…Ó—Î †ÑDêBaã¿ÝTs²‰>«•héú»€JˆKF+Ñ5Ç»»ƒ ry°¾ë`§»¡¡dªðÙ[¶1kšM 5õoŒ5G‰Ñ@q)Þjç¥`8 2ÈeªÛóç ŸÔfã«ëšÈ»º.­w£Î Þt=ÙU˜}ùNûöÃ!€,¾AßÙˆæ%y],|¶k³Å.ЧóiÖlL×,{LÓ*ÀPppš‡èáUº6{0)¡&êZimVÁt)w•ð4éÚ¬÷ÚO?§•Áeí’³¶ZÞ  N3膆ÁBÍj³Åoh8%.¥ÔžQÏX|å÷O~`_À ªooÿ3"ßÁB­'ÂçmÞаÄýw$02èã›ômçt%¦êœ²"ß¾ð¹/Zwí_ÇɪÍö•U3šVÕ¾öþh=¯iµÜýw‡?{à#'>°+È —ÚTyá³z뜽‘¯³"ßãˆCÄn+Z7‘­7ù¿æÄ…Bƒ¢uÕ™Ê2 ¹x1'Á@’‡é[j»™oÔ'Ô´¶y‡74¬Ä]¡A>H@`ó-úæ….8k§ ._V=_\j…ãĵٮPÓÑ…†=cÑ/.}Í÷Nz0`O@Kí™.|ήÍö 5m†‘jœDë†PÓâe*¡ÚS²iÕ%[\@80øV=¬2íQhúWt{¾§œ¤=Í1xΗ¬A,¡¦Þ·ÜZH»KµÉN¹+7À]â@H@`±½rÄ%c`ÍͲâRãZb¡fº. ËΗ¾î{¦<°È æÛõÐê êt…iÖÚìÈkvÁš;ƒxkN«=Cj³ç&FÞtãÅ%’È ¾CߨÖ«Í&#_Iašb”Uë¹f«Í&Êàášs«Ž§‹·:ç‰è÷´v„Ô¦jn±[–Ø~ä5?Z?#|Öœ_ Q0—%Bþ 1ʯ…HyUwœ-×74v³òÌ_Â-tCCG\ªÙƒ»Ðø‹K͸áÕui€àÈwéë·qCƒ1H .ÍQ›uÆší2ø|âRWÝòð ì2¨icäª fe…ügt%Œ|ƒAêɽh½3È\M«ášSƒL+.…»Ð$é»õàÿê·Gº€ŽBMB\2L¿5ÈÜ74Ì..å¹+€$H@ Iê 5jôŠÜ&z£ñ?ÐXšÉzÄ%BÝJd 5±Ú³¾ºk).å[‘oýBM2|ÖX¡Æeq)Úê!ÙIô@péüw}m™Ú¬ùÖãôE¾eÃge„ϧšèëéÒ!ÿTOD[ÙUg«íÄÈÚjWéaß:áéCpñÔ¶c€Ø= +1)vköð9ûB¡vºÎ “?oõк‚ì­0Á\4ß«¯n PñÒƒhÖÚl wåÔ¬¹.ö4Þæ‹K w•ñŒE³gYî À èry¤8é k©Í&Ôžéj³ê•ÁµÕ²¶ÚY»Ô:Î>q©Ýêoù扎l2€ ÆUA´~"ò5„šÓ]‰í žr’D±Ps*|>¿iµgÍÞtEÄ¥ÙUbtüQÖ[Ù¥`Èp¡ü}U¥P=¥CÑ”=’¡&9È4b÷Hw5¥¸ä ÒnØŒî*Þêª]0@Ð%òýúJC=ÈèrXq EÓƒâR¢•h“74hh+ÑÈg,¶âÒ·=tÚ#Û„ ài»S:ásÕš’´Pã,¡¦ÄŽÖãA¢È7œ®¤PãÍVJ\ÒÒ÷ßÕ/|€¸„ ]È.ŽÔ— Ÿ“ѺQ眷‰ÞZs™h]½ÑzÉûïêìêüÆÿNvuó;¾qÂSÛ„ àò¨íæRá³9>ëüÈw²h=ÎTÎè¯ÙYƒ(¹æx«§¬…Dà.‹GéUmC·G† ÕÉ&úv™†§ñVš®^s»lS\ªWb{Ç•»«¤¸$€$  â‡ô¥}uÎ5Ôfû„kÍñtÊ—zk³žP“¬ÍŽjf—\¥ïüúéNl2€KÂUt1iø\G¾½â’kgkC~Ńë¤lÃçþ¦Õ¸ ^&1JOouój»F2»дJ>d—£uIËÔf{ÃçÞÈWíšGvRjtøÜ®¹71êLgeWË=ýÝžìˆÁö ¸~X÷«–»à¬ùyͺP¨Øsj%ÂçxÍqbT¯ ï‰h¯ 2eÕ=HŒpAºñß3ý ٣ІÖãœ%.mË]5»ÛYsrºÐÓ ¬ºË{’€.Õ[j­LÑD?@¨(.MR› •“zÌ)k³Ý5›âRã1úªîêVÝÃA*=âk';k°1È.€Úv´‘¯­Ç!ù.ýÈk=ÈÒM«qÈï­99HiqIÖšÏÉ®p°s~L÷í4þæO¶=ÒJnhX‹»Zƒ¸TÖ] í›Çê Ïìé¨=õ?%‚Ù©nh0„O\Z¬‰~fqÉYk6t<{ͧ[‰¾ï«'8n°=Èv«ºêás^½ò+Œ7ÛðY½Ñz]çLDëèqÈTTÏØ‰Öω|ãðyiq)ñDtnv•ä°h¥²+’ÀŽùqý7)Ÿ­@;·‰ÞùƒÈ÷ðW•ùŸe R$ò Bþ ZOÔf{"zŠì*Ø¥G>pšs[‚ `Ÿü„î4þ+[ìN„ÏéÈ÷´Ø]:|n§K…ϹM«}µ¹ŸˆÖɺB³»ÉA†ÕB`ŸÄÿÃíQÁ2íÑŒîª6ýéébÓß¼Zk:c`ºáBM0H»EåÝ\6H@;ä§ôYêÁd74ÄuÎéj³.XsŸP£öµŸªÍÓuÔžsnh Ô8k«ÓâR¼Õ™âÒ|EùÛ‚ `oü´>¿ª P«”îJœ?|ÐD„üáš“ÓåÖf59M›™ƒä'FÍ‹˜ø’€ °;ÜÑ4æ/C¨tCƒ5H{TÆ]Í(.y3æ»+Û;†îª]¶éÇwyï,\.H@»âgô¹ùBÝ”Pzñ„šPí1ťɛèg—†=cÑ£P¹xͽ­DñtçtxÔ—•?…°Èö…«Úàs`ä«8|–­'±£uE¡èŽnhvihvFë©ìʌև”îÕ'.uŽ*Ð%C°§{IòÃg+ò=Uçô„ Þð9ˆÖásÑÈ·gÍQ³H´ž>Ê®†5þ,ÝwÇ}iÙs‚ `'ü¬>§:ucŒòŸ>Ñz8ˆ4Eä2\ì­ËÄËTNdWõoŒmuãrã^¾tŸ:p±àv‚iJ´˜=êjŽ?ZÉ Í²ÏtWÞšwWw¶³fÅÓÉËæàÒ@Ú×=OÔ9×P›í¨= ¡Fþt3ˆKc…š"ÿ#Å¥ü (òMD뽃ÌÒD_Çž3×f]oø¬ ²«b¥û¾Ä(<g's?ûÙ¥Ï1¬2€µót}â!ˆ«аÇt2C~ù‘¯ìðy5]‰®‰|;kNDëÆ ÊŽÖG6­ú£,U ‘µfóxƒØÇ#X³w<`÷àVͯ邯¥m¨,:Ê)j,SRF¨©“°GjMq)ß]¥×¼¸»2Ö|îñˆÄ¥àxÀ®AZ7‘z}CCJí)W› §‹…Ë^P\ …šFkÊjÖP›M¨=Ó‰Kí ?÷YÅN2¬2€õò Ý©R'[kø<¼6Oç RÏ7(Z·"ßfÙg&FÍïü­N†Ïj¢õ`o«Ï)Ýkàšƒw6K\ê9$û† `¥¿6Û¾öþÄÈ.ƒ‰Ö'=°Wpëâ9ú˜ºñ_‘ù“a ’æÏ3j?ÛE„š Ä¥ú?ç®ê=\]-$Ø¥vk Oãítwº`«›1Ïñì$ •áüèòd¯ˆºé|I¡f.q©L½%.õ¶M .õ 5Öšmq)Gí™÷xü§:ß°.ÈVÄoêö•‡ÏVäÛÖ9s#ßôt#Õ3Z·ÂgÕ‘ï¹B?Ê µY×ÎÖ®Y×Ünµ!.ƒxï×"ǃ$`—àÖÂsu»j{䵸œ²GÆtƒÕƒ)„…»tc*w5¶i5-.y[½6wÕ9OþÝý—û°â†ôÃ5=RÒ9Y64)v+?ZOØ£ŒºBý¯ÕÕBJ<½9w;° ž§ÛV<²œ=ÊV*¹Ø†6ËÎk¢·ëœ¡=:NgD¾Þt­éOº«fºsÅ¥p«ÇÜÐÐnuýË ¹+T ýXuˆ7³=Šmh8È õ`{ÔÚË-ݯYûsWñšù“u·§v`yž¯Û4Æ·pWâ”ê7H½æYí‘bOc¸+õ‰K.žÎØ¥ÃtNùÑzb•º«¡Çƒ$`gàæwô‘ÇÆÿ‘öÈül‹Ö×o:/\)we¬ÙÛês£fiþVƒ¨î-öÌWAw5øxÀ¾À,Í1l >ÛcìQAõ`ö¨»æ|±;í®êt¤'Zo;)ƒØÞQñû5W7Û¨ãñ+wÑ]Ÿ&Ø 8€%ynuø®ä‘WmÎu×,kÍw•ð4¶»ŠÄ¥lwUoµŒ­ž° ¨Þ܉Ä%ò€=XŒßÕ­ªó"_ËüeFëû³G)wÕiZí¬9Ø¥vWærWÆt÷ëÔñð¦+r<²’¹§}’îòtÁ.À,FpÜ~MSÒŽ08Z—a ”ŠÖ5T¨YÄEkN¸«´§Ù®»ÒÔâR»Õõ/N[° ¿¯ˆÿ•´G ±»?Z¯4gWâÄn×ΖCæÝÕ˜ãÑŸÌ%‡`'àà…ºEU®ñ?d˜=RáÈ7=Ý){$ßüƒÈ2¶§ÉnZݬ»š®¢Ìãñ«Ÿ ;?C°}pKàªàcÙ±GƒÔƒÉì‘ú"ßvqÛ¸¡aKîªgÍÃG$.•:$û07/Ò‡UÕø_ÿg‹6ÑgÙ£v:˵Ó)aŠ%FÍžmÂ]M).ƒè¬ãñŒ;éž)Ø88€ÙÝø?·=Š…ãy®#nØ´ ÒN·çd­yŠãÑÉaëàfåźùᣵüíù Ù£Ób·³Ö,cͶé¿ÈŒ5Oq<¢Ó(Ø<8€ùøCÝ<Õø¯‹±G§Å%Yk>Ç]y[tWñVOØTÿÆXsÇ]‰Öç;Ïú8ÝñÙ‚-ƒ˜ º1¦»æˆ?Ø#m©í‘¦tWÓ‰K3öwåŽÇsn¯;Ûíјh½Œ=ÒZí‘rÖÜN{šæEø[m¸+ÍÝ´Zÿfêãqƨ@[Pž?Ó ¼ÆEŸí‘oÒI*)vïØÕÅçb·1ˆü5Ë÷ŽŠß¯q‰‘7ÝbµYƒ¤ŽÇï|¤nóÁ¦À敺~-þ?7+yäU;²GOÓY³âé2Å¥¢îª?1òއ=ȬÇæw<`sàJãª!öHÕƒ´=²>Û±=RkþL±&{tºiµý]¼fk-ì®:ÓMq<uµ¯¶{<’ƒ m@Iþ\X ´G½bw8ÖŒ;K½ÂeÛÓ-Ñ•80Z·zÝîªàñˆì%‚Ճũ®ÄÖŽ¤íѸÈ×›n±;´Geº›_Ng¼5pWö R IN§D2§½’€M€8Ÿ¿ÖµÍÆÿö(;òµIN§è³=û#¯«²G:Ã]u¦+] Q¯P³ñãñ’›éæ/¬À™¼^ï}¬ýNk¼È7i4Ÿ¸ä”ù®ÏyhØPM(.[]äx4;qâxÌ®=†ÇÖà\šÆ­ÜÍWV]¹=j6ffq©üñÈ­…¨W\šþxÖàÞ ÷:X„-Ú##ÃHÛ£¨“Ò²GªMI•d±;Ç\säišÝ­ƒìùxœJæþè&ºéË+0˜¿Õ{V®Ú= lhÇ%LI©cÚéÒöH³v­áËvr<{š`:ïÐÀZÁ 'jü_=r²lh¾¸˜’ÖJ—°GR_WâaÍÆtž=ò¶ºHä[B\Š·º±¾Ý5çzs7t<úk!jÞ/X+8€aü®yø`¬Ê P\¼foÆpÍæg{{”éi¦—Ú­®i mõÐãO·Šãá½ÀÓGÚ8/ÿPÝøk0€7êšZ‡=ªMI®ÄÌÏöZí‘zÅ%w|££õv«Ã÷«¤P㲚ã­91Hßñ X38€¸]ÜÐà ÒN¾%{äÒkíÑàFÛh«µÕõ¶ŒJŒîR;ÝòÇ£ÿHwÉ8ü!úÐWV  —Ъš0°GŠÌŸR‘oý›„=RûÙ­ïÜ©Œ¸”ç®:[xšŒ …:Óu™ûx þÖ9{ÇV  ïÃÚ#Ë”ÿÊ7%ó=ò:X¨ÙŽ=*(.ƒÈZ³ë"å»+·ºãÑ×´ÚlüÇÖ ‹7éÝÇx¸=R¯zàŽ×e»›ß­Àå®Ù›.S\ŠíQ<È"î*žNw˜2­[í¦9òÁºáŸ Öà4oÖÕŽÿÏö,b÷iS’úl›áXbUv%ŒÖsíQw«Õ޳wUðxD‰Q8H¸ÕÉAÆ’€u‚È iü× ÄîØ)™‰×ëj>Û {¤ÝÜÐoõtîªy‡ºk^ÁñðÖlmu{<:[=Ýñø³èƒ^)X8€ü“®zø`,P|Ë·G£Âç`:Åöh®. o¶ühý|{ämõ9îj µôñ°Cþ„¸”d‚ãëÐÇ[tU ±Gç«#íQ‰ð9aú#ßã¦{äÕØêͺ«‚ÇÃØ¥ôš5¡»¡­@cÿ¥Üh]»²GíšÿÙùѺ±Õ²¶ÚY[Ýkï×ÒâRâxôßа®Ò}ûÚCOóç¨ë¿J°&pIÞª«ŒmüwÊËÄ÷f†ÜOlu»¸YšV=ó¿ðÐüÍ] qñš­ÞÂñ€µHc4þ+úlŠÖÛ#3_¥=ò^ µæpºÒö¨Î²GÇMÊŠ|× .åfw7t<ë`ó6]ùpÜWוè2£=:ݕسæ%í‘z=M3èꞈÖÉã±&w•{<^ýþú€×VÀà_õÎ^ã¿ÚÏv²ø6M&~qö(XslJb{‡ü«µGYb·1&(«îçxô¬™$`eà,‚Æõ„cµ=ÒØL¼þ×.ohX³=JL—/v÷v_.êxô'sñ~ºÞkëóv]ñpÖ ÜžŸ¨s†öHÇíè†mÈu×ì¬5¬…ä`vºX 8€€Ó«¹Ãç6‹HÛ£x:EŸíÙyÝ“=Š×,kÍ®-Rîj“ÇãD2'X 8€€žgâWl4aY5­'Yº+ñ<{4¢lõ¾‡5]êxy³<þò}uÝ× V å?t…¸ñ_³GÆšÕoJ’uÎhºà³mØ#­¢+qöZÈpAÉ\÷xÀJÀy‡\Uð¶kŒ5§íQ´æÎ Íš;Ÿív•u%z³M$.ƒäkÍÛ:Íîæ4Ú[Á*ÀÔ¸Ö mÈuLIgÍÊ]ó¹ö¨þl+Ü%oͱéí‘7]Ò--.tWá [<‘¸4öxüÕµu× –pä ‡ƒD&í?Þz••Ú£NWbÞ ë²G§L‰‚e[öhBq©}µ]ó—|¿¶s1ˆ·æä 5[™z¿ÂwÖõ’y«Ç†NáiâAú¦k>21ºªñÕK08€©¸çã¥ÉÂçÓ!¿7θÆ;Zï7ýÖ ‰eûk~×Y轺PpËp÷_{¶x:qiw¥ 1z—]tã/ Àöø˜çH±Õžñ9µ)î¿ó¼òÛ—ÚØK°7ný‚’Ñzn+QdúÇ´]ùß–ÝÀËpYÜüóL¿¦|æËš®ýù;ÿûÂ{t1à å†¯˜¾®!.éJø€9À@.×{M×jOs¡ÐÿcÙWz!à  ×zC9qéŠïXúÕ\8˜ƒ«½y˜¸¤wª–^òþÁÀò\éíüà K¯ NòÿÃ1–ܧ§¹IEND®B`‚moderngl-moderngl-773b733/docs/the_guide/000077500000000000000000000000001470420062000202675ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/the_guide/functionality_expansion/000077500000000000000000000000001470420062000252435ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/the_guide/functionality_expansion/index.rst000066400000000000000000000002221470420062000271000ustar00rootroot00000000000000Functionality expansion ======================= Opening up new possibilities with ModernGL. .. toctree:: :maxdepth: 2 window_using.rst moderngl-moderngl-773b733/docs/the_guide/functionality_expansion/window_using.rst000066400000000000000000000014771470420062000305220ustar00rootroot00000000000000Rendering to a window ===================== .. py:currentmodule:: moderngl By default, ModernGL does not have a window, but the `moderngl-window`_ module allows you to use one. The installation is as follows:: pip install moderngl-window `moderngl-window`_ uses `pyglet`_ as its default backend. It is installed automatically along with `moderngl-window`_. However, its use is limited to the supported functionality in ``moderngl_window.WindowConfig``. .. rubric:: Entire source .. literalinclude:: window_using_example.py :emphasize-lines: 1,4-12,57,62,64 :linenos: You can read the full usage of `moderngl-window`_ in its `documentation`_. .. _moderngl-window: https://github.com/moderngl/moderngl-window .. _documentation: https://moderngl-window.readthedocs.io/ .. _pyglet: https://github.com/pyglet/pyglet moderngl-moderngl-773b733/docs/the_guide/functionality_expansion/window_using_example.py000066400000000000000000000024031470420062000320430ustar00rootroot00000000000000import moderngl_window as glw import numpy as np window_cls = glw.get_local_window_cls('pyglet') window = window_cls( size=(512, 512), fullscreen=False, title='ModernGL Window', resizable=False, vsync=True, gl_version=(3, 3) ) ctx = window.ctx glw.activate_context(window, ctx=ctx) window.clear() window.swap_buffers() prog = ctx.program( vertex_shader=""" #version 330 in vec2 in_vert; in vec3 in_color; out vec3 v_color; void main() { v_color = in_color; gl_Position = vec4(in_vert, 0.0, 1.0); } """, fragment_shader=""" #version 330 in vec3 v_color; out vec3 f_color; void main() { f_color = v_color; } """, ) x = np.linspace(-1.0, 1.0, 50) y = np.random.rand(50) - 0.5 r = np.zeros(50) g = np.ones(50) b = np.zeros(50) vertices = np.dstack([x, y, r, g, b]) vbo = ctx.buffer(vertices.astype("f4").tobytes()) vao = ctx.vertex_array(prog, vbo, "in_vert", "in_color") fbo = ctx.framebuffer( color_attachments=[ctx.texture((512, 512), 3)] ) while not window.is_closing: fbo.use() fbo.clear(0.0, 0.0, 0.0, 1.0) vao.render(gl.LINE_STRIP) ctx.copy_framebuffer(window.fbo, fbo) window.swap_buffers() moderngl-moderngl-773b733/docs/the_guide/getting_started/000077500000000000000000000000001470420062000234565ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/000077500000000000000000000000001470420062000266425ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/buffer.rst000066400000000000000000000071551470420062000306550ustar00rootroot00000000000000.. py:currentmodule:: moderngl Buffer ====== :py:class:`Buffer` is a dedicated area of GPU memory. Can store anything in bytes. Creating a buffer is essentially allocating an area of memory into which data is later written. Therefore, when creating an empty buffer, it may contain memory fragments of deleted objects. Example of creating an empty buffer:: buf = ctx.buffer(reserve=1) The ``reserve`` parameter specifies how many bytes should be allocated, the minimum number is 1. The buffer is cleared by writing zeros to the allocated memory area. However, this must be done manually:: buf.clear() ModernGL allows you to create 2 types of buffer: dynamic and non-dynamic. To do this, when creating a buffer, use the keyword argument ``dynamic=True/False`` (by default ``False``):: buf = ctx.buffer(reserve=32, dynamic=True) .. Note:: Using the ``dynamic=True`` parameter tells the GPU that actions with this :py:class:`Buffer` will be performed very often. This parameter is optional, but is recommended if the :py:class:`Buffer` is used frequently. Later, using the :py:meth:`Buffer.orphan` function, you can change the buffer size at any time:: buf.orphan(size=64) After changing the buffer size, you will need to write data there. This is done using the :py:meth:`Buffer.write` function. This function will write data from RAM to GPU memory:: buf.write(b'any bytes data') However, if the size of this buffer was changed after it was added to :py:class:`VertexArray`, then when calling :py:meth:`VertexArray.render()` you will need to specify the new number of vertices in the ``vertices`` parameter. For example:: # If from the contents of this buffer every 12 bytes fall on one vertex. vao.render(vertices=buf.size // 4 // 3) The same will need to be done when calling the :py:meth:`VertexArray.transform` function:: # If from the contents of this buffer every 12 bytes fall on one vertex. # output_buf - the buffer into which the transformation will be performed. vao.transform(output_buf, vertices=buf.size // 4 // 3) After :py:meth:`VertexArray.transform` writes data to ``output_buf`` using a :doc:`vertex shader <../low_start/shader_transform>`, you may need to read it — use :py:meth:`Buffer.read`. This function will read data from GPU memory into RAM:: bytes_data = buf.read() .. Warning:: Transferring data between RAM and GPU memory comes at a huge performance cost. It is recommended to use :py:meth:`Buffer.write` and :py:meth:`Buffer.read` as little as possible. If you just need to copy data between buffers, look towards the :py:meth:`Context.copy_buffer` function:: ctx.copy_buffer(destination_buf, source_buf) In our example, we simply create a static buffer and write data immediately when it is created:: vbo = ctx.buffer(vertices.astype("f4").tobytes()) We called it `VBO`_ (Vertex Buffer Object) because we will store vertex data in this buffer. .. Sidebar:: .. Note:: For the convenience of transferring data to the GPU memory [in a dedicated :py:class:`Buffer` area], here we use the `NumPy`_ library. `NumPy`_ installation:: pip install numpy If you want fewer dependencies, you can try Python's built-in `struct`_ module with the ``struct.pack()`` and ``struct.unpack()`` methods. .. rubric:: Entire source .. literalinclude:: first.2.py :emphasize-lines: 2,33- :linenos: Proceed to the :doc:`next step `. .. _NumPy: https://github.com/numpy/numpy .. _struct: https://docs.python.org/3/library/struct.html .. _VBO: https://www.khronos.org/opengl/wiki/Vertex_Specification#Vertex_Buffer_Object moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/first.1.py000066400000000000000000000007711470420062000305070ustar00rootroot00000000000000import moderngl ctx = moderngl.create_context(standalone=True) prog = ctx.program( vertex_shader=""" #version 330 in vec2 in_vert; in vec3 in_color; out vec3 v_color; void main() { v_color = in_color; gl_Position = vec4(in_vert, 0.0, 1.0); } """, fragment_shader=""" #version 330 in vec3 v_color; out vec3 f_color; void main() { f_color = v_color; } """, ) moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/first.2.py000066400000000000000000000013251470420062000305040ustar00rootroot00000000000000import moderngl import numpy as np ctx = moderngl.create_context(standalone=True) prog = ctx.program( vertex_shader=""" #version 330 in vec2 in_vert; in vec3 in_color; out vec3 v_color; void main() { v_color = in_color; gl_Position = vec4(in_vert, 0.0, 1.0); } """, fragment_shader=""" #version 330 in vec3 v_color; out vec3 f_color; void main() { f_color = v_color; } """, ) x = np.linspace(-1.0, 1.0, 50) y = np.random.rand(50) - 0.5 r = np.zeros(50) g = np.ones(50) b = np.zeros(50) vertices = np.dstack([x, y, r, g, b]) vbo = ctx.buffer(vertices.astype("f4").tobytes()) moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/first.3.py000066400000000000000000000014161470420062000305060ustar00rootroot00000000000000import moderngl import numpy as np ctx = moderngl.create_context(standalone=True) prog = ctx.program( vertex_shader=""" #version 330 in vec2 in_vert; in vec3 in_color; out vec3 v_color; void main() { v_color = in_color; gl_Position = vec4(in_vert, 0.0, 1.0); } """, fragment_shader=""" #version 330 in vec3 v_color; out vec3 f_color; void main() { f_color = v_color; } """, ) x = np.linspace(-1.0, 1.0, 50) y = np.random.rand(50) - 0.5 r = np.zeros(50) g = np.ones(50) b = np.zeros(50) vertices = np.dstack([x, y, r, g, b]) vbo = ctx.buffer(vertices.astype("f4").tobytes()) vao = ctx.vertex_array(prog, vbo, "in_vert", "in_color") moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/first.4.py000066400000000000000000000020431470420062000305040ustar00rootroot00000000000000import moderngl import numpy as np from PIL import Image ctx = moderngl.create_context(standalone=True) prog = ctx.program( vertex_shader=""" #version 330 in vec2 in_vert; in vec3 in_color; out vec3 v_color; void main() { v_color = in_color; gl_Position = vec4(in_vert, 0.0, 1.0); } """, fragment_shader=""" #version 330 in vec3 v_color; out vec3 f_color; void main() { f_color = v_color; } """, ) x = np.linspace(-1.0, 1.0, 50) y = np.random.rand(50) - 0.5 r = np.zeros(50) g = np.ones(50) b = np.zeros(50) vertices = np.dstack([x, y, r, g, b]) vbo = ctx.buffer(vertices.astype("f4").tobytes()) vao = ctx.vertex_array(prog, vbo, "in_vert", "in_color") fbo = ctx.framebuffer( color_attachments=[ctx.texture((512, 512), 3)] ) fbo.use() fbo.clear(0.0, 0.0, 0.0, 1.0) vao.render(moderngl.LINE_STRIP) Image.frombytes( "RGB", fbo.size, fbo.color_attachments[0].read(), "raw", "RGB", 0, -1 ).show() moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/index.rst000066400000000000000000000010111470420062000304740ustar00rootroot00000000000000First rendering =============== Unlike OpenGL, ModernGL requires far fewer lines due to robust function generalization, which also reduces the likelihood of bugs when porting code to different platforms. In this example, we will draw a broken line, which will look different each time we run the code, and at the same time we will slightly expand our horizons in understanding the already mentioned ModernGL objects. .. toctree:: :maxdepth: 2 program.rst buffer.rst vertex_array.rst rendering.rst moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/program.rst000066400000000000000000000026421470420062000310470ustar00rootroot00000000000000.. py:currentmodule:: moderngl Program ======= ModernGL is different from standard plotting libraries. You can define your own shader program to render stuff. This could complicate things, but also provides freedom on how you render your data. Previously, we looked at creating a :doc:`vertex shader-only program <../low_start/shader_transform>` that could only read data from the input buffer and write the converted data to the output buffer. Now let's add a fragment shader to our program; it will allow us to create an algorithm for writing pixels into a texture, that is, perform the :doc:`main function <../low_start/shader_basics>` of the shader. Here is a sample program that passes the input vertex coordinates as is to screen coordinates. Screen coordinates are in the [-1, 1], [-1, 1] range for x and y axes. The (-1, -1) point is the lower left corner of the screen. .. figure:: screen_coordinates.png :alt: Screen Coordinates :align: center :figclass: align-center The screen coordinates The program will also process a color information. .. rubric:: Entire source .. literalinclude:: first.1.py :emphasize-lines: 5- :linenos: .. rubric:: Vertex Shader .. literalinclude:: first.1.py :language: glsl :dedent: 8 :lines: 7-17 .. rubric:: Fragment Shader .. literalinclude:: first.1.py :language: glsl :dedent: 8 :lines: 20-28 Proceed to the :doc:`next step `. moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/rendering.rst000066400000000000000000000017571470420062000313630ustar00rootroot00000000000000.. py:currentmodule:: moderngl Standalone rendering ==================== Standalone (offline) rendering allows you to render without using a window, and is included in ModernGL by default. Rendering occurs when :py:meth:`VertexArray.render` is called. By default, the ``mode`` parameter is :py:attr:`moderngl.TRIANGLES`, but since we need to draw a line, we change the mode value to :py:attr:`moderngl.LINES`:: vao.render(moderngl.LINES) # "mode" is the first optional argument To display the rendering result, we use the `Pillow (PIL)`_ library that comes with Python. Let's return the texture from the GPU memory to RAM and call the ``PIL.Image.show()`` method to show it. .. rubric:: Entire source .. literalinclude:: first.4.py :emphasize-lines: 4,46- :linenos: The result will be something like this: .. figure:: rendering_result.png :alt: Rendering result :align: center :figclass: align-center Rendering result .. _Pillow (PIL): https://pillow.readthedocs.io/ moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/rendering_result.png000066400000000000000000000057331470420062000327330ustar00rootroot00000000000000‰PNG  IHDR{C­ ¢IDATxœíÚ[rãºPåÔÿ”s?ºÒ•ÎÖmJ6ÖhÜ„äm€JÞ¯~€TµØÿ®~âÔ®ø;Z?<5.*0”€…ojpÀRÝÏзþK Ž÷m{»únêµ&g(4ñ_ïvíûäÀNï:ý('€ú _²›@á_v¢òo<éGQ©yÀrnŒ!`Û67MVëPQÿm[Ï+Ïß·ãÃÃr‘_J;œ¡­™êiÚÉŸ{U*_ÂÏ΃" ©îÿ£I+ê¨ïïß÷É¿KºþWÝ—ˆˆ‘Tñ\¥êYó’ÈE Êpú³JÀqÙ½š<J´®ø÷6åò«îÏŸ§uGp–P.WùûÒŸ }°€ŽXK™šrqæPM3@_œ¥güX½j=àµÏm½¶£»µd#Š(¹= CÌéŸdJ=¿ (§>KÈ €^…NqIå”´ÖÉ  5ï²Îõ)ü¾¥Øà`q@‹s³Ï+ÂûÖ°„ 6âtq µ¸OÐE½rJ €z¿òP6‚ZÍ1  Õï 좯¯ðo¸²ñMÛˆîæ›†Àj9b8` =…ìt÷èq™ Wnè[S¿©»Ý'r @±ZùÊØÍ ŽT<Ã`¶o cæâÜŽ¦ ” `¨nàú\„€çT(»,$Æ*ˆÙ…† °C¥[Û?:tÊ®‚‹üª¨Éé´” €Ç¹uB„èpôü.:Ȱ:ì7ô‹ÀP­ á¿¬ÅìBÌBàY¿@™ %C(£ÕÀ:€ã(2s TNëà:öÄ*jĘ€Ýj4íK–À:`¨ßÀM¡q„Œ7ðš>ÀsëôøEŸ(¨ó4)®Pàý„8Qç›Â« Ô:ðÅÍд|19èÃÑ´ˆ zƼL0£¶m0N÷'’øjQçô$ÀÕåÔ$†ß®®àgͦ&@1Å çÀOÇÅn…{àW^¥ù»Â6>˜ !1Æ €Ý:E Õ!\Ýxó,"¸‚c!åô¬Ýà'†<úz6À<ïÛö&¸+å” œ*Є£“ÕÀP €+>ÈW €Œi7cÚ¡¡¹ªp ¼(èb7,2ˆ1`0”Jp/²ŠÈ؈ŒUœî‘ð1pSÐzËØˆŒUøØ0”J U22^f¬8Íé´)‡Êø/SÆ*ÎqhÛ:›OËšìÀPÆó"k*Dc\GÇÂ¥  çËøð˜±ŠŸ6ÂÀït,DC €c¸;å €¡êÀ wçŒOÙ«`#XèÜrª°wqð;°OÜ}B^d %†@ s̃—Ò±CĽ=ÏðxèØ!tl6‚…þ-'Àt,ÐJ U,N{y’ñ%#cÀg'öu±€…Ü'à&lÛ&ÆîIüs‡J %€ ^d=Bp5/ñíy†§@ÇÞ ÖYH9±Ð·r2ðç †^d³ € b xV¥ðÞ™¾2’8cÎÚˆJ ¹OÀ=àžÐû„ŽztfC ‹OÙ» €¥L»Ïѱ?RNìÙбÁœ;ç§¾ž=ˆ1`°Ù0˜èÏÃBÊi’2à½3À¹ÊtçîÌB§”“ ‘²Q›¸)7ÆÀP`Ük4ã{Ì>ã@¡|!ÆŠ°o|P„$†ãürŸx!t,@g&€¡@ÓX‘± vÀ1|Ç.¯F(€ÓÕ¾8þ]œà“ŒQ,cp<°ˆC"E·¶ðŸ`(õDß:Oâb·ƒ ŒŒŽÍX3¼j ¸ßJð»Ý  …Ž¥Ÿ1:|бðEzS€ôŸàIOö€+€mÛ¼@b „Ý^GçæÐá_š‚&LC (Æ@¹ŠQì0” W¶:^Ù‹Œ!¦È*^lŠ›«lÛV¦Ö € ®ÏÀ#V€s !À1ÆBʉ®¯žYH9Á#®€àP‡ ”à›;@1ÞžÃYS.;=Ø‹µÜ'nZ~eÈó\_˰>L¤pîÀƒÃXÌåîÝŠ@‡D:¦µÀ'NÏ"l×ó:Q uiÄlÀ€©Ö€±½©Œ ËXœË+ €¡%(›2ŠÕ±c/”Qðô”Äu°ãô¬àÑ](ǹ.&ýÊK-ÁSLÿreÆXNÏ ì|1°)öÅ&ªØ´p®‹ÀKÛ"l fxÓ8Óê±XМfGgF9í^…€#ú’‘qzNrE¨vuzÂéV€Ž…甽iê\^}£Ü!ÒÖ~ä&! )ô$e¯ÿD;=z{°xÈÒë ”!¸GPÛ„$3Çœæv9ÍÛð¬yµÂ“&dE$æé>µž)û>y°Öõ0RÓr_ƒ¯^K¯# û¯ôð(½@1&`°Ù©,zš^Ìã@¦ÿö1G´’˜IEND®B`‚moderngl-moderngl-773b733/docs/the_guide/getting_started/first_rendering/screen_coordinates.png000066400000000000000000000624771470420062000332410ustar00rootroot00000000000000‰PNG  IHDRBJ‰ê7 pHYs  šœ OiCCPPhotoshop ICC profilexÚSgTSé=÷ÞôBKˆ€”KoR RB‹€‘&*! Jˆ!¡ÙQÁEEÈ ˆŽŽ€ŒQ, Š Øä!¢Žƒ£ˆŠÊûá{£kÖ¼÷æÍþµ×>ç¬ó³ÏÀ –H3Q5€ ©BàƒÇÄÆáä.@ $p³d!sý#ø~<<+"À¾xÓ ÀM›À0‡ÿêB™\€„Àt‘8K€@zŽB¦@F€˜&S `ËcbãP-`'æÓ€ø™{[”! ‘ eˆDh;¬ÏVŠEX0fKÄ9Ø-0IWfH°·ÀÎ ² 0Qˆ…){`È##x„™FòW<ñ+®ç*x™²<¹$9E[-qWW.(ÎI+6aaš@.Ây™24àóÌ ‘àƒóýxήÎÎ6޶_-ê¿ÿ"bbãþåÏ«p@át~Ñþ,/³€;€mþ¢%îh^  u÷‹f²@µ éÚWópø~<ß5°j>{‘-¨]cöK'XtÀâ÷ò»oÁÔ(€hƒáÏwÿï?ýG %€fI’q^D$.Tʳ?ÇD *°AôÁ,ÀÁÜÁ ü`6„B$ÄÂBB d€r`)¬‚B(†Í°*`/Ô@4ÀQh†“p.ÂU¸=púažÁ(¼ AÈa!ÚˆbŠX#Ž™…ø!ÁH‹$ ɈQ"K‘5H1RŠT UHò=r9‡\Fº‘;È2‚ü†¼G1”²Q=Ô µC¹¨7„F¢ Ðdt1š ›Ðr´=Œ6¡çЫhÚ>CÇ0Àè3Äl0.ÆÃB±8, “c˱"¬ «Æ°V¬»‰õcϱwEÀ 6wB aAHXLXNØH¨ $4Ú 7 „QÂ'"“¨K´&ºùÄb21‡XH,#Ö/{ˆCÄ7$‰C2'¹I±¤TÒÒFÒnR#é,©›4H#“ÉÚdk²9”, +È…ääÃä3ää!ò[ b@q¤øSâ(RÊjJåå4åe˜2AU£šRݨ¡T5ZB­¡¶R¯Q‡¨4uš9̓IK¥­¢•Óhh÷i¯ètºÝ•N—ÐWÒËéGè—èôw †ƒÇˆg(›gw¯˜L¦Ó‹ÇT071ë˜ç™™oUX*¶*|‘Ê •J•&•*/T©ª¦ªÞª UóUËT©^S}®FU3Sã© Ô–«UªPëSSg©;¨‡ªg¨oT?¤~Yý‰YÃLÃOC¤Q ±_ã¼Æ c³x,!k «†u5Ä&±ÍÙ|v*»˜ý»‹=ª©¡9C3J3W³Ró”f?ã˜qøœtN ç(§—ó~ŠÞï)â)¦4L¹1e\kª–—–X«H«Q«Gë½6®í§¦½E»YûAÇJ'\'GgÎçSÙSݧ §M=:õ®.ªk¥¡»Dw¿n§î˜ž¾^€žLo§Þy½çú}/ýTýmú§õG X³ $Û Î<Å5qo</ÇÛñQC]Ã@C¥a•a—á„‘¹Ñ<£ÕFFŒiÆ\ã$ãmÆmÆ£&&!&KMêMîšRM¹¦)¦;L;LÇÍÌÍ¢ÍÖ™5›=1×2ç›ç›×›ß·`ZxZ,¶¨¶¸eI²äZ¦Yî¶¼n…Z9Y¥XUZ]³F­­%Ö»­»§§¹N“N«žÖgðñ¶É¶©·°åØÛ®¶m¶}agbg·Å®Ã“}º}ý= ‡Ù«Z~s´r:V:ޚΜî?}Åô–é/gXÏÏØ3ã¶Ë)ÄiS›ÓGgg¹sƒóˆ‹‰K‚Ë.—>.›ÆÝȽäJtõq]ázÒõ›³›Âí¨Û¯î6îiî‡ÜŸÌ4Ÿ)žY3sÐÃÈCàQåÑ? Ÿ•0k߬~OCOgµç#/c/‘W­×°·¥wª÷aï>ö>rŸã>ã<7Þ2ÞY_Ì7À·È·ËOÃož_…ßC#ÿdÿzÿѧ€%g‰A[ûøz|!¿Ž?:Ûeö²ÙíAŒ ¹AA‚­‚åÁ­!hÈì­!÷ç˜Î‘Îi…P~èÖÐaæa‹Ã~ '…‡…W†?ŽpˆXÑ1—5wÑÜCsßDúD–DÞ›g1O9¯-J5*>ª.j<Ú7º4º?Æ.fYÌÕXXIlK9.*®6nl¾ßüíó‡ââ ã{˜/È]py¡ÎÂô…§©.,:–@LˆN8”ðA*¨Œ%òw%Ž yÂÂg"/Ñ6шØC\*NòH*Mz’쑼5y$Å3¥,幄'©¼L LÝ›:žšv m2=:½1ƒ’‘qBª!M“¶gêgæfvˬe…²þÅn‹·/•Ék³¬Y- ¶B¦èTZ(×*²geWf¿Í‰Ê9–«ž+Íí̳ÊÛ7œïŸÿíÂá’¶¥†KW-X潬j9²‰Š®Û—Ø(Üxå‡oÊ¿™Ü”´©«Ä¹dÏfÒféæÞ-ž[–ª—æ—n ÙÚ´ ßV´íõöEÛ/—Í(Û»ƒ¶C¹£¿<¸¼e§ÉÎÍ;?T¤TôTúT6îÒݵa×ønÑî{¼ö4ìÕÛ[¼÷ý>ɾÛUUMÕfÕeûIû³÷?®‰ªéø–ûm]­NmqíÇÒý#¶×¹ÔÕÒ=TRÖ+ëGǾþïw- 6 UœÆâ#pDyäé÷ ß÷ :ÚvŒ{¬áÓvg/jBšòšF›Sšû[b[ºOÌ>ÑÖêÞzüGÛœ499â?rýéü§CÏdÏ&žþ¢þË®/~øÕë×Îјѡ—ò—“¿m|¥ýêÀë¯ÛÆÂƾÉx31^ôVûíÁwÜwï£ßOä| (ÿhù±õSЧû“““ÿ˜óüc3-ÛFßiTXtXML:com.adobe.xmp Adobe Photoshop CC 2015 (Windows) 2017-06-04T11:56:37+02:00 2017-06-04T11:57:16+02:00 2017-06-04T11:57:16+02:00 image/png xmp.iid:611bbde0-b7d5-4144-bed8-c9808e9e08f9 adobe:docid:photoshop:1c2c9e3c-490c-11e7-85c9-dc072598f3f2 xmp.did:5903bac2-5dce-ba48-9b87-4d5aa73b803d created xmp.iid:5903bac2-5dce-ba48-9b87-4d5aa73b803d 2017-06-04T11:56:37+02:00 Adobe Photoshop CC 2015 (Windows) saved xmp.iid:1112a353-7ad2-3a47-bc31-2eb6b8824456 2017-06-04T11:57:16+02:00 Adobe Photoshop CC 2015 (Windows) / converted from application/vnd.adobe.photoshop to image/png derived converted from application/vnd.adobe.photoshop to image/png saved xmp.iid:611bbde0-b7d5-4144-bed8-c9808e9e08f9 2017-06-04T11:57:16+02:00 Adobe Photoshop CC 2015 (Windows) / xmp.iid:1112a353-7ad2-3a47-bc31-2eb6b8824456 xmp.did:5903bac2-5dce-ba48-9b87-4d5aa73b803d xmp.did:5903bac2-5dce-ba48-9b87-4d5aa73b803d (-0.6, -0.8) (-0.6, -0.8) (0.6, -0.8) (0.6, -0.8) (0.0, 0.8) (0.0, 0.8) (0.0, 0.0) (0.0, 0.0) (1.0, 1.0) (1.0, 1.0) (-1.0, -1.0) (-1.0, -1.0) (1.0, -1.0) (1.0, -1.0) (-1.0, 1.0) (-1.0, 1.0) 3 sRGB IEC61966-2.1 1 720000/10000 720000/10000 2 1 322 272 NÖþ cHRMz%€ƒùÿ€éu0ê`:˜o’_ÅFIDATxÚìÝ_H[y¢Àñ_—îCŠtâ@J0P*Ø®8%k 3Œh 1p ›<D7ô@.íCïA|1°°2‹g×%БX&ƒEJ¦¶Rö„îf²-Òó²°÷áwçp611µíÜÚ~?O‰þrLŽç{~ç9ãºûP8ÍÎ !þç¿.³"€SêÂû3ÖpÚ‘1@ÆÈd €Œ12N¹3g΋ÅƯ‹Å3gÎ1p ò—J¥X,&„X\\,—Ë2¼Í_¿~]×õƒƒƒ#¤Óéd2TUM¥RÓÓÓB¯×ûèÑ£¹¹9¶³cýñüæ›o„ß|ó=iË‚išš¦Åb1]ן?~äø[·n¥R)MÓ@2™l6ZÍÇãñd2Ùìš…išårYÓ4!D$)•JBˆ¡¡¡™™™J¥rLÆ 7oÞìêêj\n0TEQ”foN×õ±±±{÷îonn†±µµÕlp¥R‰Åb+++>Ÿ¯Ù˜……UUççç§§§s¹\&“‘fvvV×õvfûwÜ{ï½÷Þ{ïÉçÎc…´ÏÂúúúææf‹Ã™J¥’Édr¹\4ŸŸWUuaa¡ÅÂå$$=ÒÖÖ–a›››ÑhôÞ½{Š¢Èà€ÏçkÜGü¬n/ 7nÜh\®ÃáØÝÝ•óa‹ŒGGGåc§Ó©(ÊW_}ÕlpOOÏÎÎÎèèh¡PhvPaÆÈȈ5^±¿¿/?ŒâþýûlmxêBˆD"¹\îâÅ‹ÍÆïííY›¨bddÄ0ŒÓŒªªKKKÍ‹EEQœN§|:88hÍÛ“““©TªUÆòhùòåËG.ÚZh .—ËzìñxZnœóí^슢1^“º‡ÃáhýûA¥<ðivø-Sj½À~øÁþ´¯¯¯îqÝqõd|xx(ßô‰?ÿ|`=¾páÂë[ѽ½½OŸ>eƒÃëp‚º»»ÛœŸ^’œëöMo8¥Ói÷O©›yüø±õø•Ï–ön;::2™ Þö»-í÷Ò&{´rç"Ï.Ïxxx8÷£c­ã û5ç§OŸ¶ùÂ{ï¾ûÎúJ&“±N'ÇÆÆØzð&p¹\†aX÷edu/s°)ÿŠVÚßß·R’·Z/]ºÔ4c‰|7N§³çG-Ž.LÓÌçóò%Á`pccCÙl&“ñz½BˆR©Ôúú»]­V“;6‡Ã166¶ººZ«ÕLÓ”÷âz{{­³—÷ߟ ¯ƒ=„*•ŠÜÚ¯\¹"„X__7M³V«-//û|>§Óišf:nrÎçó²Ò«W¯ …l6+ÊÚÚZ(’c¾ÿþ{ëôûèŒe$íÿ „[[[‘HDÞXRåàà  ÆãñX,666&/)뺾¶¶Öæ¿üòËH$"?y"‘Èd2~ø¡¢(ÉdRUUyÖaš¦®ëGÞÜ^É•—vBˆF£ÑhTÎyš¦%“IEQB¡P&“¹}û¶Â0Œ™™™׺êfÄH$"ïEy½^EQb±X8ƒSSSrØöö¶°]—þãÿÑÕÕåóù666d~Gúä“OìOTUfssó믿BŒ É1º®/..6[àââ¢ýBœßïWUUBÈ›Rò{vvÖzWrý³Ááu82„ÎÎÎÅÅEû¡ò;wìIwww˓ʾ¾>™ÙÞÞžÇãiv맯¯ÏÞ…ÃáPUÕú‰óóó}ôÑáááäääðð°uŸhccCUÕºEqÝ}Xüõyëy©T …B¹\®.÷«V«×¯_ßÝÝmç~U›;-EQ®]»–L&ÙàÚÁ¿7>W‚¦içÏŸoý×/$›ÍÆb±ºšú?{Vÿÿpòz½š¦moo¿ªŒ;;;wvv^UÃBˆo¿ý¶»»ûÓO?eSÃëóJB˜ššz™ ]ŠÅâúúzcMõ³1˜qºôöŒ¨œzd 12@Æ cd €Œ2@ÆÈd €Œ12È cd 12@ÆÈ cd €Œ1@ÆÈ c€Œ12@Æ cd €Œ2@ÆÈd €Œ12È cd 12@ÆÈ cd €Œ1@ÆÈ c€Œ12@Æ cd €Œ2@ÆÈd €Œ12È cd 12Æcii)NËÇ«««~¿ßívkšfšfãàZ­¦išÛíöûý«««­—lš¦}ð‘ ¬V«ñxÜív‡Ãá|>/¿¨išõ–@Æ8F>ŸŸ››” '“É@  iZ*•šžžnëÖ­T*¥iZ H&“­c»}ûv*•RUU^__oì|bb¢\.kš&„ˆD"¥RI144433S©TøÀYVÁ»faaáæÍ›]]]Bˆßþö·ªªÊzý~0¬V«ò[R¥RÉd2¹\®§§GáñxÆÇÇ\rµZÕu}eeettT188833‰D‡5fkkË0ŒÝÝ]§ÓF‰„®ë^¯7ø|¾t:L&ù1£•jµZ(nܸ!†122"¿%C½ÿ¾}üÞÞžõ-!ÄÈȈaÕjõÈ…ÿío“óª|*'|Ã0ìcŠÅ¢¢(N§Ó£ëº|<99™J¥ø‘1ŽQ.—…—/_B<þ\qîÜ9ë»>Ÿ¯ñ%ö/ÊÁò…„ÖÜkŸÕ-?üðƒýi___ÝcŽ«ÉÇ8<<´—&„èìì´www7¾ÄþÅ#ËlíñãÇmŽôx<-ö c4e?èµ®ÛÙ¿øBS¥¼L}ñâÅcìÑÊËþþ>¿2F»äŸ¯P(x<ž©©)ùòííma»*ŽöqÝ}XüõyVÄ[Ìív?yòÄz‡»»»ççç­Ó]yWÉårɶ…r¶”·å\*¯B÷õõÉÌÒéôÂÂB.—³_-“J¥’<¿µ !–––€×ëµ–//¶ [7ŸÂáp0<òOPÐBÿgÏÈøË¸T*…B!ë/:NFÓ´óçÏ¿Âä²Ùl,“¯ìE3æ úãõz5MÛÞÞ~™Œ§¦¦š]è:™b±¸¾¾NÃT£­ÙoßlÌ•jàÔ#cà4ùç?ÿ966ö‡?üÁþ@É8evwwó›ßüò—¿¼sçÎÿý-ëîCÖ pz¹î><+„àúÇÛK\oÙAõ/~ñ ùkššRåã/ø+.àTùùÏî÷ûc±ØÇ|ö¬ì—ûÆÀ©rîܹÆÿŽ—¸€SŒ2@ÆÈ cd €Œ1@ÆÈ c€Œ12@Æ cd €Œ2@ÆÈd €Œ12È cd 12@ÆÈ cd €Œ1@ÆÈ c€Œ12@Æ cd €Œ2@ÆÈd €Œ12È cd 12@ÆÈ cd €Œ1@ÆÈ c€Œ12@Æ cd €Œ2@ÆÈd €Œ12È cd ¼/--¥Óé#G×j5MÓVWW›-.›Í†Ãa·ÛÇ«Õꋾ›ÕÕÕD"Ñì»Õj5»Ýîp8œÍfå5MkönU·ñg³ÙD"ÑlK–9¸Ýn¿ßß"ŠÛs"‘Èçó-rðûýn·[Ó4Ó4…¥R)‘HÔjµc2Îçósssƒƒƒ ­T*¡P(•J•Ëå#j©TŠÅbBˆÅÅÅr¹<11!v;jµZ<O&“º®9À4͉‰‰r¹¬iš"‹•J%!ÄÐÐÐÌÌL¥RaÄK²oü¦ijš‹Åt]þüù‘ãoݺ•J¥4M Édò…¦“l6{ýúu]׎N§“Éd PU5•JMOO !¼^ï£GæææŽÉxaaáæÍ›]]]ƒAEQEiöÎt]»wïÞøøøææ¦a[[[m~*ùÎVVVš ØÚÚ2 css3Þ»wOQ”ååe!D ðù|LÈxyö}}}ss³ÅY©T2™L.—‹F£óóóªª.,,´ùƒ*•J,[YYñù|-ÞŒªªóóóÓÓÓ¹\.“ÉÈykvvV×õº„ŸÕÍò…BáÆ u8»»»r—Ð"ãÑÑQùØét*ŠòÕW_µùÁTU]ZZ:<Ìd2òñääd*•b+ÄË¨Ûø#‘H.—»xñb³ñ{{{BˆžžùtddÄ0Œ6O${zzvvvFGG …B³7cÆÈȈ5^±¿¿/ç-!Äýû÷›f,–/_¾|䢭„Zp¹\ÖcÇÓþJt:‡£ÅÃ0ìOûúúês\—Q·ñ;ŽÖ¤Â>—ž;wNÑìð»Qã¯]ãrìGÁŠ¢´ÊXN†Ç¾û>øàëñ… ~š_€Ü_´¿F'Øø»»»ÛÌòÕêíí}úôi«scû¶ûGíOt?¶×í0êX ?Ùi­=Z¹êå!ð“±_dn݈½¦“ý,{·Ö¥t¶Ùˆ‡‡s¹Ü û|>ûe·§OŸ^½zµÙ`kámî666¬§öhåõðK—.±aá'ãr¹ Ã0MSÎ"r^i¶1Ûkjÿó»ï¾³Î½3™Ìøø¸uà066Öt6îèè°ªp:=?jq¤ašf>Ÿ—/ ƒr·”Íf3™Œ×ëB”J¥Æ)×ZxëSî|>/ï’]½zµP(ÈÛÅ•JemmíæÍ›öÓfyrœŒ}ão¡R©È-üÊ•+BˆõõuÓ4kµÚòò²Ïçs:¦i¦ÓéºÉÙ^S‹…×j59Ã;ޱ±±ÕÕÕZ­fš¦¼)ÝÛÛkÆ¿ÿþûM3–ãŠÅbû~kk+‰ÈKŠ¢ƒÁx<‹ÅÆÆÆäU5]××ÖÖN¶r#‘ˆ¼åõzE‰Åbáp8 LMMÉ1ÛÛÛÂvÍ8Ù g;4F£²LMӒɤ¢(¡P(“Éܾ}[N*333'»Róå—_F"¹ H$™LæÃ?T%™Lªª*O¿MÓÔu½î/;þã º««ËçómllÈüŽôÉ'ŸØŸ ¨ª:00 ?Øæææ×_-„’ct]_\\lçcôõõÕTUÕz3óóó}ôÑáááäääðð°5oll¨ªÊ†ˆ—qäÆßÙÙ¹¸¸h?T¾sçŽ=éîîny"Ù××''’½½=ÇÓìvOÅÅEû=¿ß¯ªª<¢–7¥ä¦ÙÙYë]ÉÍðð°}9g\w}Þz^*•B¡P.—{U“[µZ½~ýúîîn;÷«N ›ÍÆb±ŸòRáéâv»Ÿ`. moderngl-moderngl-773b733/docs/the_guide/getting_started/index.rst000066400000000000000000000004721470420062000253220ustar00rootroot00000000000000Getting started with ModernGL ============================= A comprehensive guide to getting you started with ModernGL. No experience with OpenGL is required, just an understanding of how it works. .. toctree:: :maxdepth: 2 low_start/index.rst first_rendering/index.rst triangles_draw/index.rst moderngl-moderngl-773b733/docs/the_guide/getting_started/low_start/000077500000000000000000000000001470420062000254745ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/the_guide/getting_started/low_start/creating_context.rst000066400000000000000000000015611470420062000315710ustar00rootroot00000000000000.. py:currentmodule:: moderngl Creating a Context ================== Before we can do anything with ModernGL we need a :py:class:`Context`. The :py:class:`Context` object makes us able to create OpenGL resources. ModernGL can only create headless contexts (no window), but it can also detect and use contexts from a large range of window libraries. The `moderngl-window`_ library is a good start or reference for rendering to a window. Most of the example code here assumes a ``ctx`` variable exists with a headless context:: # standalone=True makes a headless context ctx = moderngl.create_context(standalone=True) Detecting an active context created by a window library is simply:: ctx = moderngl.create_context() More details about context creation can be found in the :ref:`context` section. .. _moderngl-window: https://github.com/moderngl/moderngl-window moderngl-moderngl-773b733/docs/the_guide/getting_started/low_start/index.rst000066400000000000000000000003711470420062000273360ustar00rootroot00000000000000Low start ========= Low start in learning ModernGL. Coverage of all ModernGL objects with a glance and first use of GPU. .. toctree:: :maxdepth: 2 creating_context.rst moderngl_types.rst shader_basics.rst shader_transform.rst moderngl-moderngl-773b733/docs/the_guide/getting_started/low_start/moderngl_types.rst000066400000000000000000000031561470420062000312660ustar00rootroot00000000000000.. py:currentmodule:: moderngl ModernGL Types ============== Before throwing you into doing shaders we'll go through some of the most important types/objects in ModernGL. * :py:class:`Buffer` is an OpenGL buffer we can for example write vertex data into. This data will reside in graphics memory. * :py:class:`Program` is a shader program. We can feed it GLSL source code as strings to set up our shader program * :py:class:`VertexArray` is a light object responsible for communication between :py:class:`Buffer` and :py:class:`Program` so it can understand how to access the provided buffers and do the rendering call. These objects are currently immutable but are cheap to make. * :py:class:`Texture`, :py:class:`TextureArray`, :py:class:`Texture3D` and :py:class:`TextureCube` represents the different texture types. :py:class:`Texture` is a 2d texture and is most commonly used. * :py:class:`Framebuffer` is an offscreen render target. It supports different attachments types such as a :py:class:`Texture` and a depth texture/buffer. All of the objects above can only be created from a :py:class:`Context` object: * :py:meth:`Context.buffer` * :py:meth:`Context.program` * :py:meth:`Context.vertex_array` * :py:meth:`Context.texture` * :py:meth:`Context.texture_array` * :py:meth:`Context.texture3d` * :py:meth:`Context.texture_cube` * :py:meth:`Context.framebuffer` The ModernGL types cannot be extended as in; you cannot subclass them. Extending them must be done through substitution and not inheritance. This is related to performance. Most objects have an ``extra`` property that can contain any python object. moderngl-moderngl-773b733/docs/the_guide/getting_started/low_start/shader_basics.rst000066400000000000000000000065041470420062000310250ustar00rootroot00000000000000.. py:currentmodule:: moderngl Shader Introduction =================== Shaders are small programs running on the `GPU`_ (Graphics Processing Unit). We are using a fairly simple language called `GLSL`_ (OpenGL Shading Language). This is a C-style language, so it covers most of the features you would expect with such a language. Control structures (for-loops, if-else statements, etc) exist in GLSL, including the switch statement. .. Note:: The name "shader" comes from the fact that these small GPU programs was originally created for shading (lighting) 3D scenes. This started as per-vertex lighting when the early shaders could only process vertices and evolved into per-pixel lighting when the fragment shader was introduced. They are used in many other areas today, but the name have stuck around. Examples of types are:: bool value = true; int value = 1; uint value = 1; float value = 0.0; double value = 0.0; Each type above also has a 2, 3 and 4 component version:: // float (default) type vec2 value = vec2(0.0, 1.0); vec3 value = vec3(0.0, 1.0, 2.0); vec4 value = vec4(0.0); // signed and unsigned integer vectors ivec3 value = ivec3(0); uvec3 value = ivec3(0); // etc .. More about GLSL `data types`_ can be found in the Khronos wiki. The available functions are for example: ``radians``, ``degrees`` ``sin``, ``cos``, ``tan``, ``asin``, ``acos``, ``atan``, ``pow`` ``exp``, ``log``, ``exp2``, ``log2``, ``sqrt``, ``inversesqrt``, ``abs``, ``sign``, ``floor``, ``ceil``, ``fract``, ``mod``, ``min``, ``max``, ``clamp``, ``mix``, ``step``, ``smoothstep``, ``length``, ``distance``, ``dot``, ``cross``, ``normalize``, ``faceforward``, ``reflect``, ``refract``, ``any``, ``all`` etc. All functions can be found in the `OpenGL Reference Page`_ (exclude functions starting with ``gl``). Most of the functions exist in several overloaded versions supporting different data types. The basic setup for a shader is the following:: #version 330 void main() { } The ``#version`` statement is mandatory and should at least be 330 (GLSL version 3.3 matching OpenGL version 3.3). The version statement **should always be the first line in the source code**. Higher version number is only needed if more fancy features are needed. By the time you need those you probably know what you are doing. What we also need to realize when working with shaders is that they are executed in parallel across all the cores on your GPU. This can be everything from tens, hundreds, thousands or more cores. Even integrated GPUs today are very competent. For those who have not worked with shaders before it can be mind-boggling to see the work they can get done in a matter of microseconds. All shader executions / rendering calls are also asynchronous running in the background while your python code is doing other things (but certain operations can cause a "sync" stalling until the shader program is done). Let's try to use the shader in the :doc:`simplest way (next step) `. .. _GPU: https://wikipedia.org/wiki/Graphics_processing_unit .. _GLSL: https://www.khronos.org/opengl/wiki/OpenGL_Shading_Language .. _data types: https://www.khronos.org/opengl/wiki/Data_Type_(GLSL) .. _OpenGL Reference Page: https://www.khronos.org/registry/OpenGL-Refpages/gl4/ moderngl-moderngl-773b733/docs/the_guide/getting_started/low_start/shader_transform.rst000066400000000000000000000073161470420062000315760ustar00rootroot00000000000000.. py:currentmodule:: moderngl Vertex Shader (transforms) ========================== Let's get our hands dirty right away and jump into it by showing the simplest forms of shaders in OpenGL. These are called transforms or transform feedback. Instead of drawing to the screen we simply capture the output of a shader into a :py:class:`Buffer`. The example below shows shader program with only a vertex shader. It has no input data, but we can still force it to run N times. The ``gl_VertexID`` (int) variable is a built-in value in vertex shaders containing an integer representing the vertex number being processed. Input variables in vertex shaders are called **attributes** (we have no inputs in this example) while output values are called **varyings**. .. code:: import struct import moderngl ctx = moderngl.create_context(standalone=True) program = ctx.program( vertex_shader=""" #version 330 // Output values for the shader. They end up in the buffer. out float value; out float product; void main() { // Implicit type conversion from int to float will happen here value = gl_VertexID; product = gl_VertexID * gl_VertexID; } """, # What out varyings to capture in our buffer! varyings=["value", "product"], ) NUM_VERTICES = 10 # We always need a vertex array in order to execute a shader program. # Our shader doesn't have any buffer inputs, so we give it an empty array. vao = ctx.vertex_array(program, []) # Create a buffer allocating room for 20 32 bit floats # num of vertices (10) * num of varyings per vertex (2) * size of float in bytes (4) buffer = ctx.buffer(reserve=NUM_VERTICES * 2 * 4) # Start a transform with buffer as the destination. # We force the vertex shader to run 10 times vao.transform(buffer, vertices=NUM_VERTICES) # Unpack the 20 float values from the buffer (copy from graphics memory to system memory). # Reading from the buffer will cause a sync (the python program stalls until the shader is done) data = struct.unpack("20f", buffer.read()) for i in range(0, 20, 2): print("value = {}, product = {}".format(*data[i:i+2])) Output of the program is:: value = 0.0, product = 0.0 value = 1.0, product = 1.0 value = 2.0, product = 4.0 value = 3.0, product = 9.0 value = 4.0, product = 16.0 value = 5.0, product = 25.0 value = 6.0, product = 36.0 value = 7.0, product = 49.0 value = 8.0, product = 64.0 value = 9.0, product = 81.0 The GPU is at the very least slightly offended by the meager amount work we assigned it, but this at least shows the basic concept of transforms. We would in most situations also not read the results back into system memory because it's slow, but sometimes it is needed. This shader program could for example be modified to generate some geometry or data for any other purpose you might imagine useful. Using modulus (``mod(number, divisor)``) on ``gl_VertexID`` can get you pretty far. .. Warning:: One known bug in many OpenGL drivers is related to the ``mod(number, divisor)`` function. It lies in the fact that if the first argument is exactly 2 times the second, then instead of ``0`` you will receive the value of the second argument [divisor]. To avoid this error, it is recommended to use the following additional function (insert it into the shader before ``void main()`` and then always call ``mod2()`` instead of ``mod()``):: float mod2(float number, float divisor) { float result = mod(number, divisor); if (result >= divisor) { result = 0.0; } return result; } moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/000077500000000000000000000000001470420062000264635ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/enlarged_triangle.png000066400000000000000000000314131470420062000326410ustar00rootroot00000000000000‰PNG  IHDR{C­ IDATxœíw»,7™í—Îå[\`HC†Á¶1ÁÆØäŒ“lrÎ9çœÁ&ƒI÷rÍÌÆ0€“s†ËýûþѽÏÞÝ]]%UIz×+­ßólžß1çìVI«¤’Z­šÿ‰¿#à`õ‡ºؼî€ÿwÕ=õ!D%‚uDï\ÿ÷Çúâ®äïWK­.!2rºB{Y&¡¦d*»†(‡Â’«âo€Åò üýêÛ•"D-4ÖD?0_}qBX¡@˜q5ü­åŽ2òÚ®ö·zEb“«X@ôÌÂá;¢ýŠFh l¸:þÛº4\]U!lР̨ºi‡^„¨Ò' ¸:þ ÔÝlÃ/»„¨‹Q›À_FOr$ÿ} Q- ZÞý³MO×*œ¡à‰ª\¡8ƒVþz͘j" šˆê$=³>?7q¢w4ˆz\AÉ®³ê¦Br¿@ˆZèƒ`¢&%»ÿYrø§&¢šˆJ\&éó7ľ;rÍ?Cˆ*h1êRñœ™QåMÔàZøÅGòçkW©ËÑ @ÔbÖ“0É9 &ß#Di4ˆâ\ BçàŒ‹¿ÖŸŠ—Jtv‰ ìÝüOAè]0,BE3Q–kã¿ÚÀ_Î`]û¿l #ºA3Q}ëË¢$šˆ‚\Ôc*v?–D4QŠëà\Û’”C&4ˆbh H”#ßÁnyƒ7I„(f¢ÿˆ?äêüÃá¹îï÷–\ˆYhÈÅ·¾„Š6Ô!2¢€ÈÉõð;‚οæ×v½ß¥XˆQ4ˆÜ,îæBÛÂ9¶‰.Q¨D6þ ÿI±[¦yùÝõ!D4YÉô”Kr*É7Ãh ¡D‰<ü~ áð½JIQùÝ Äb4¸þaï¿þIQpýßBˆÅhyØ{˜å¸‰uT{"Š’XÊ ðŠ·F;”ßÞB,@3‘ƒyÿNT Ä"n€ß n—DzŸg¿Ô«ŽüB,@GAˆ…Pü°!… gBœ!f£€˜Ï ñk’>CBYá¸ÈC¹á¯!Ä\4ˆe˜÷€)âž° "Ä<!1“áW;a$øõ!D:šˆ<ŠÇC4 †hs¸~ë.ϸ$¹æ•ÜèWQebíó0ØüPà;^Ê j‹©h ’¹1~Ùþþr*×Ñ9¿¨¢W¼Þ\Šãx†%HÞ,u'©Uý«›Bˆh4i-È †EÌdÿjØ>" "›à_ŠÓÓ&nò ÞIä{ïWìôn°¨‹f"–›âç9ß¼œZÊèPfÕãŽÜôç" "…œ#@º¸BU%øQ`D7ÃÏì·ÄHâåç7‡Sh ¢±}¦5}&¹MD^4ˆin†ŸÁº;›)!X_FºÜìgb í1ð}ëK´‡‡:ä!ÆÑ @Lpsü” Ÿ/ ¹’T¹ùO!Ä(Dæ}Ù~ b_ {Eˆ”1Æ?ã'{Z$³å§·€{Ð @LQìé”äXA)b ‰ØË?ãÇGÏ’O•˜ Vm÷ÓS Äšˆanoü¹ÌjTxö¿Å!ÄÄ^*¬iˆ5•µô£ Bì tˆnqË Áh“ýä–bÍÄ1 È(“³.cšLˆchÛœ‚¡äÂô€dZåð(õ*ú”AˆMt„Ø…ïà·Ž3!NŠÇÑ @lpKü¤ÏOZÜ •òU“"·ü!„8†±ƒy?UH!)µu5ˆ–Q*Ä·Âì·²HJËo !h ¶!yL-/5c`!Vhkn…Àºc2îIJVZnõ@»€Ä1ø6ÿ,€Åß³+hG„€fbÅ­ñ}‚N;§äÚ–Ë­¿!Jß/·Æ÷ÀúèÊ“’7KMl¨)?8¢o4ëŸ)A%iœZUÓ¬¢s4ôÎmVÿ1Dt=$ç+´/˜–inÝô¢Qô&°8@@8\¦X(kôt™›°õ.n®&}£@לŠïžô"ëÑk’qÙ_Å À©ß…è ½cp,å¸tIMë»b„"Ð/§â;ÐÏöÉqÁ±¦ÿÞí ºD3€~©´ÎÐߤž&d·éEhè”Ûâ;`è†fH`ë J—Û~¢K´ ¨[š:ø!Yö8Îi0Ñ!šôÈíp%I?l&aX8 g!·»¢?4ôŠyc!!^ì k ¢7ÔôÝq{|Û~ Š„S®< ¢'4è’Î!yƒ7û l"ºBíÞ·Ç·ýœO)©.Ø Ã•§Ctƒfq¾5ü<|NIð%5ª$ƒlsÚžˆÑЮ7œaQGÙ>Ê ú@ Þ §á›@†ƒ<ë ’HI¯ê<òí3 :@3€^°]3P“‰Òhè‚ÓWÿ³È¶J‘{™¢yÉVõ38}~`„#tD'ÌÿÖ—5&ÒÁð˜}WŒØƒfís®°íÆçKŽ¥ )VGÅäŒ+ ZG@˜÷&…„’úh·‚EÔÐs|Ã~+‹Ä¯\q&D»hÐ$“¬ÂQ ^ £ eî€oÀºûà–rpʾÑ.ÚÔ6}ëKôóm0Ü¢ãAD«hÐ,gâë$},µØ—€^Îü:D£hh“3ñu€ ï(/Aì«¡°h h-µIÀÁAX ¢^…ŠNzŽÄÆãä¿m¡@ƒÜ_Kþ7}ɉ ,IàŽé¡ôhÐ$ó~˜–ÆÞyÈ×»—kzÑš´Æðe_àpY@Â(E¹Sáh‰êhhºƒ*ÅÒª¼BÓ‹†P«6ÅðUÐw¼ô)¨Òô_» D+hÐ5Q:&g]ÖlzÑÚáΫÇÿ²wàKeg¡±®ú™äα1ühPKÄnþYÓ˜T'p|"³h;POhÐwÁW’þ>I§SBmá¸ì¬É]ÒÂ&hÑоWxz7Ó2KR„„Ô˜-p.·ß‚"éM¾r6„s4h–gH iìÀZÞÑàž³p9:<ŸÒªc"¹B#ÙˆÙY—C8Gc¹oÎÆ¿S¬äàèìÉfUG.¿+„[4pOc‹]ÀQ×:B¨ s6¾ U~¨) y¶-$Õ본\~„O4pLXÿØ ŠH㔩8Û0§hðÊ]Wÿ¶[UL¶Å’»DQÌBGAø¥ä·¾Ì•5ý>Þç!.íë†ÞáÍ\r¾”ýw–Y™Ø‚õ ~I©Ð’‘sòRT@€Wš=–²HjZß#Ôtþ8_m¿‘°mFúò¹®Ð ÀóVbÍH1H®/ƒ”‹ðƒgÜmõø_ ûŽ)‹„Rb}a™¤w+N‘írGÙÍ?k\KaÂä~Ñv @3_œ‹/ô±ÔÊ ÇE²Ê¹_€ðƒ7œ‹/w¸g ñb_X·¢1ÀZrCÀÁÁá£hš@’¾:AÑ•RHrÞNþsAf>8ÿ6ÿt"Ë…å †$™¾,2‡óÄUTD3/Ô=øÁúQ}W\BÒ…“šühà€»ã_k¿dÖ®'H–ÈXÕ&K=î^=´" >`YÓ8)H±ˆ”ºf‰‡ÚÞ j(vîŽ}7‹d‰À(BÿvOb4`§ö‚æ ¨ˆc”­oÛ V4PsÕã¿);¦ ©rÈ„!÷°°A»€È±ÿÖ—5&ÒÁp•¾+FìA3^î‰Ï[aÙ(0µ¼àHŠÕÑ”˜sO–‹]4PÓþê„÷Þí’ú’ JÔ>¤Ü —Ùo‘HrÉçï Á‡fŒÜ —掽G)Z—{]Á‡VtPe-a)G+2’[Á†š†Ž{ãÿPÌÙ=ptö¤±pT»\v&4 ä°[Ñi”ãBI“\QT¨]¸¸7>F?x0<ÛÔƒ¹ì¾4hÀEXÿ0 ¨…’ºØ#öÚÁƒ"î³züg£X÷D²EEPJ¸¸eÈ{EGAPaðÃÁLÌíæ)2 Ã!|¢ ÷Åÿ¶.BQ­¥ɠุྞ¢Þ6ˆ`Y‹ˆ®g¡tIþê䈇‡ð‚Zƒ‚ûâÉ> GÛo$Çö©HÏÝÂÍ(¨¹bKPYR»žR‘!aŠ{î·züÀ¤ãe‘àO¬«ÌT&¹_lìE9´ ˆØÍ?k$³%š°lƒ“$*ÒÂÍŒ¹?>›Ô=‘t¤^%Ä GqÝJÀý?›ðD4Xr|ÇoŸ0-,w¸GI„¤Ô.%>ÉLÑ-3î°€õ!”a¦ïH}²7Y˜Ia…ff<Ÿ™wÇm@póŠÇ\Ë©¿âŸü5¢šR÷à‡¹Og¥ $=n©Na‚f6<Ÿ®ý’Ö½I¤„$[m••z<°úí h0„d¯:ÛâFpÔ5Kðúj{.T÷<Ÿ’Oäëp§ûÏ,Ÿy0D]40`xYÀ¿ˆj´¸"ä µyÐêñ¿QHš—6yPË·'ÚTŸßú’k( Lît²nèR"ê¢@UŒOZ¡8£€Ýò‚#™¨Ç†ypû7jC²†À{f,­*ކÖW¨Êëñ`\ Ú~#iIP ÒŸ:¢ šTâ!¸46+J1H®HJDú!—BTA@EJö\ö•„Rb}ad2ÓA\¡Ú®Áùø„ýT½{Ö'VÆ G±û•K QÍ*Ñüü’ I¹éEïûE5]œóñq ù´½OÉ3)É{¤ýÈ¥ƒ(‰fÅ ë&3q I F‹}87EE@Yºzügƒ £I’-êͯÎqñPÊÛ§!tDi|ü:q I§~L(Ò¥Ã!hÐ   ÃǬ‹0—¬]O,‘±ªM<ÌíMä eaY‹0ˆ´¦©ˆB¨‚Kñ0|HvSX 6äx”ôªnS>~D4(Eí…nÁ ˆc ×AÛ‘ˆ(€"<|õøoÊHÇË"Aâê CnC5‰vÂ~óÏšæ…€À±Qª¸h;PshŸ ð’~Ф‹.+Á^L¯¿–X°QŠ >bWfÑ™ ð ÞGÁ@Xú޶z¥AH꣠0Xc@n´”ªÞ-0,”ëu¶“rTÝMJr5½Èˆf9y>œóÖ $SQZŽRp Oñaˆ|hÈM8Œ«‰0tÞ„¥®Ä6ä"ªÒl<:¹ ©#@âw¼”Ž éE>ü(ˆh•Ãî€dkyÒ …’™%,QL‰«È‚€<<‚Ótu=AB³‚ç‰U¡ù!ãb´‚vå!à`µ—Ú1@™>Þ>BeD,G3€ < ´.BIŠ=y²¬*JI›<ªé›®šdÁþàvÑ$`’¡.œ¢íhE,F3€¥<°.‚ö< ÉÞºSÁ%(¸,PFàTBRsÉBÒyÌ%sѰ Ÿ]˜}3C‚?±®²YBƒÏR;C8“ q±ýT]’*´PÖ¤\rD:š, å…dKxïb…£¸ J¹AÌ@À.ÄÅ(šNŽ{Õ©„Òb‰Ž%ø_}áÅó^¡sôA°yÌùÖ—6x”ât¥Âi‘ŠfÉ\„÷×xöI… ;à6x”²¤–é¢÷×(U[h˜ÅÜû&‹u‡â c"¹ÂÅB‘·QIüë8ã±x0?ÜLIèA`ݽ4t9å<üä Ñh És¶CrI”¯G–ÀXˆˆG3€‹÷ÖÏ8Hh[êt‚ÝÊ)çá'_„ˆC3€ÂúG²_A'G5Ù74·ˆH4Äò¸Õã£äê»Iš ¶c<®å[5/ú@<-ëËišÀñi ’à•‡fQ<ïi¾Ÿ"éüÃáZ•Ü•µ@š`øúÿ“¸CÀ4Ç{0˜³Ð”°ôJĽÉ•eŽà•Ê­Æ€´܃†…›À°(‘Kš_(Su8Äb4˜à xwÎ[/PK¦‹$b\Ÿ¢%Ox7Ä("(y#†Iaè,ÜI(%ÖæRlC.FÐÁÆx"ÞÄ%XŸÈ§—*(Ûôý åVwþ±ͦ(ŸÑü«õÊîI’!)7™xŒ«Ø‡€½¬ÿ]¦“£§È(Á¯ØW^fÉOéB?ñ] Ù(Ú´—€ƒ‚_va+p&Ž!é¶£Å>œeD ¢À0OÂ;­‹P‚Ž&UHv³-nd—6yRÓ·ó4ØGË?äT—ÔíÂ)RA+bÍx2Þa]T@ ¾¤F•lˆãɺ©Ð0 Ë­À@œaQG,ñ`±…>°Í“ñvÀ¨‡ã“ q%Ø'ãÿo'rësðÇ8†f<oXÇE²¦œˆc”­o‚,QÈSÞq ;¨/Û¤`Ç$ÇV'4Ц£úXˆ–€Žx*ÞÖ³x6¹˜ÀºzÌÛÜ?ÐBÐÍ6©Üs”½{1½~o²ŽRô…€5«ÇÿªwDØ+,÷jbýúý CìŸú6ú Ø1ò}ëK g04/kZ¼y!iñí¦ïÍàix+Á ²!ö% ’7o]üÐo¤ŸöV G˜'rGB±¿ŽRBI½(ŠÑ"´ OÇ[€|)ïgû }`Å49õl|ÿrôfŽ2Á²˜PSàXˆ ©‘YÂE‹ØwNï3€§ãÍ8 ’R/AÌ»³ebÞˆfrêÙøþWÐ1šlg"H¶d ’ˆ„’ºØ#öb“ÍJê™®€gàÍJÃ4;uDòÜ*l‹Øæx=ãÍ–%±¦ß% gâM@²†àJ0Cfÿþ…¤Å—Ûž…ïuºÔõ `¢ÃûIîЂdŽDÔ즈QTs[t:¬ÿÇn¨ á{ÛÐ6UÅZÙ[wÏ|º¤Û£ JüСþÇ÷ƒ'9ª¦jÒåbÖ!=Ξ…7–½C’©²¢Å!µë‰ Žƒ÷¬7¢?z£.lqïFRX þĺÊL%’Â&–ººÛôl¼H¶èù•%úï“´xó*¹Ý]ðݯ¢'ºœ¤-µç"(…{ ±ÂQ\·ÂQŠee€Õã?IÎÒ„¥$”ûK¤–r¤Ë³ß€žèmМÍ?8hCÐ…‡¡Ÿ*/öqµ‹}?t4x^?ïvh‚n¥ŽÔœÜ‘nŒÖ€á•JÃ4ëˆäÙÖ· žx¥N½è•KËIFSK@/Æ+ÀúM°^$®óªÚ{õ-©h^Î8ßjg!¨µ@Ô­"²Ý=É«Ú Y說ÛVÿQ7Lмµ((®L2݉¼øh…–Ž‚(yðƒ7Çè§%H ÄU7Â!åÜÌ^‚—— p&Å*‚RL!©ƒJBmŠá%/G42 7ǦXCR 5$XŠõÅWkHª¦>2ÐÂ. —âe@²I€FЉ˜Àº¡ûPÉî€o^ç´2 ÉDjÏU’ -+Á^L¯¿–”‡äBÉj¥,î€Õã?IÒ$ë+t Ö¯ïG×]yéËàœvq}ëKj $9ör$ǵô{×øž¼ /%ÿ†Ô†ä²= G)|KmH.;/{il™)ñ= Ø‘@%öõÁ.,å Š$GÚ/Žw½/¬³È¿WR‚dŸÀ>ÀŠtšœy®ø&|â|@’€!ùP{6Ù¾¾¥"ö¢(Öbç‘ö:x9^<ð¨bžN’0zí¶“¬TQt"mwæ¸â[pˆËÀ+ðâÝÿÖ?’Ü‚""(SÝöjQ¶yÅ@§ÄËÈ÷¤#&)6L×X¥DL2³†w{!oø[z^ 7KÐJÆ1»'¡h»3d÷?žy:¾ál!Èß ¬uÄ3fÚž&“ŒKDÍ–ÏØFÚ΀W®ÿ÷S£íƒc1îVzê•HêL!/"ûxåDņ»£ Ü}±ãôsd´éÙä¨ºÝ ÁKŠ¢+<Í^…Æü5’›hC‘X\?“D@RRÅÕèú§dœWEuS$xš `¢„I±/c7â3B­ŠË[#&BNp³ èUx/Uü{ $%$úï“$§y;‰ùkw< _ÿ6<àfÖ?Q>q½‘¼ñ!6é4ÒI¢ÇÇðj¼ m¿@j@r©´’I©i¥$—:C^ýxÀË. ®o}™'¡›¯È •~¶ñ(ÒƒÀkð|‚¨g²\ä2!ÙHÞéâFº”…ä"gËkžzØß~ žÌoƒ IënÑþ¦íF(òæHæEúN·Ç×®1ì3€°þ‰lˆHúWÂŒ÷(Ùjk¾ˆ4¤”ê൫Çÿ$v’Î2åïG°Hº`Y±4t?‚mIàµéXEÈßž8ø!FÖtÚÓDLßk•d‹´†Üe”Š41¼3€×á¹¹~Õpøƒ¤@o¢^i’ÚÕ0(Ãu´œ×eëʲÃ;|o-¶‹}7´%™šžM¬«uGÚ…-ŠœîzžäŒ{Œ ¨Ä¼%…¤Å›d‘\¿êηÃ||ÎÂú'›€GX!©žìMÏ&¹+k°BR=Ešž Æàõ«ÇÿÜØ‡i%T¬ë%·€äÊÅJ’—×éÖ¹ (ÃæŸ]YÃ$¡ÑOÀSHò(nbŸ=B|ÐÍÞ€gD´’ CR8×R ’ës-áÙ ƒnÚ©¢„b_jz ¥Äúˆ"=.Tpíz#žÌÍOdJ‚w}Ìi9ë¶øêwAÑ àd₩˜¼ÓÅöévZqI=êÖ ¹5Þø,Ð@õ&ðè{¿È&`éq"eo*ø%_n+ˆªä––À›ð̉¿‘µ[ ’,2VÇ9Å1µªÉ> mÈX'Ë^Þ4ÕÝÕ‚eªÎàD*,ë¹£X¼¯ITŒ"o¿ ÏêÞ.Öo”µ u;ÓÊñð(©p-5£xÖ©øÊ÷` Å ¬ª Ž‹b"ÃÕ›L2.1„m¤Í±Þ¼zü·à¨íƒÄè¡[¨RÓ$¡bË(¾Ù¬ë; Ã. "?ÄÈõ\û î>mïSŽª»ô¿(Zc<x žn[€ù·UèB–ÕQ-1…¤×EudÅ[Œ;@û% – M¯dßY¸“V#Ԫ̥ÙÙa¹ è-x`E’íǤܕ¶)æ°L?‚BRô—OÊÙ·Áå߇–3€°þ1ðÉÑ3Eq¸Eò Ô‘&‰fÀ[ñ40´=¥AR Z¡¤>hå’QÉ[Ÿ# wPT=« }iÆJ.&¡hÄDÄ2ÚÍ“´fR•ü3€÷á±Ùg%¦ž ‚dTbê0V%g=´8µLÕ¡?Þ—¿k-²Ä2Ì-„±ÊÞñ²G‹»y“Ð\êÒu„²’yÐûp`Å’ȤܕZŠyzŠGÁ¤Dþ5wrÞ-ð…Ÿ ™gaýÓ¬`¹ä†!–™… ¡©#Ä&¹Q„Æ%#9€÷ã"XGÑ„Ìb}=$,ûâÓ‹"]SÞò‘wÐEõ ›„¼_šÑœ,‚¤Åie’o^r‘mp1.̵ýV2-aC8ÊD-&É»E±®„\|!2‘g¸›⨩¢ ÅþêýÉLHJïJtk•5™Æ€€GÖ£­µ‰>µ¿LHZʱ n‡K%÷¸9þõg˜Ë¢@8,Dƒ‚X“LT#I‹ÛÉD‰I¢ïX’/¡YÌ>¸züo•”A€d&H+êÝ&«*ŽFä$H›|p~W¼dÏo}) k˜â86JM‹uÛ‘ÈQ³‘‹ŠÐ˜Ìeæ àCx$I ©%˜‰éeG‹8I›(Ò.åCÄ,¼`~Íäb I5ŒI°¾µ8(ÖT­Ì`Î. ã«— ‡¯/!H¦$Ø7™D‘ž/÷ºþåçH$yp²÷O(Y7bû—$U6 )S£¢[£†|øHdÖPÌpMR#†JH.¬]±~ý^$?$f×ÑŽ7‰´% à‚É"v.P.EÚ`Rî}3|þˆ&}pøJšÓ #$US.9 ¸„’ªa»L°zü/ ŽVY.¡Ii»C¡BQû[<ägõ«?rAü¿Hú ØöWþ,ú6ƒ Fi“¬ñ·O­ §´IÖ(æ¶äD;ø(¾{áö4ü °,&ä’íë[*b/ŠbÝ(¶éãeúèÃ#ÿQü ÀçÁCcci÷ E<ØDQœÄ¨›§ˆGb–bˆš| ‹þ…dÅeý?’ã²YIbEh\*©’øãcQvìËÐD0G±½…XZÓ¨ÏÛfÖ…´¦M„¦˜þÀÇðP`¢¢ƒÄƒÀPÌ àSH’ãZжŒü¿÷¾ .û%F™ž„Ã_7"É…nLü`VOS’ JDÍ–?ô´wÖ8ÀÇWÿØW„¡7b]S2 IéH±®)S™äãøä. ØÍ? …– J-‚éþ( Q’Ç¥ap-‹·Í>ó“ÂA’^¯* ÇÕÚI$%U%ó’¼ñw?qþÈßÜ;|ç¿zØ+,õÂ'¡šØ_+½ì°’/Š´½Äxÿ0²´}ðCŒ¸9°¡¦Ôƒ%›¬ Irh¥$ɱ“\ê Ã3€Kñœ÷A%š íçú’+Å¥EºŽ “ú».}Èà¯ÙÿÀÜR‡,b]é•Z1/$—j›Gb_勤$—Êò|M6ðA°OâÁKЏ¨€MKp!ÈS%‡UìcÆÅ6C~¿ãs¿Æ&{fË^Éf_pž²˜ÖÉÖòæãê’û–-®ËʾÅö à“xÐò"’4¡„NDÉ)&íK!}mLî{£­IÀö þÕ%±®J!E.–¤Å[”ºÎ!„ܱ$-^$B‡l ŸÂƒ¶ÿÿ– ˆÀòðRð)F&ÓqD‘d}¬ñ j£“ßú€Ïo}©)X*„äº4Šê@Žš-‹²øÒHZŠTŽq4ø4×8 dϪ½„%g‰*(Òã’»Ž$#Ÿ>êê7–€,/4Ódd«ªÜ’ Š"= IŸA{gmüþOã«?þç\‚cóV‰¤ª@I–4!È™äµ<è³XÍ>ƒ„ÃË.l G)º%Ù—p”‚Q²&y-ŸyŽ–€fµS$öÕG%,åh] @reÍ K9È$‘´ù,îo?ÁéU€õñ~ÉÂQ~‰D‘v-'pøç¢Â¶Ã—DæCr5“ãZö^_k2’ àjÉ9Qá56à¨_ †bõÓÒ$µ©(:‘# ¿ØUê¼RÀÐ×ì úKHž+9´b AÌj OrNT»ðXš§²hQb\ÜCRŠ"ÄR¾(W 8X½ßhAàIl ¹â„"TŠb!¬Ó•$¡Ê'û¿Ì5Ö)I•àTjÔs¡q©Q79¥1NÖ$L\BHTùIZS‚¶sVOHZ³š\¥þä/0Ìv­g^ürÔZûD¡Ø×ˆ}©È‰Õ«†Ã—¯ p!b²žª'G2.aÝ©ÄJÅ䨼`_Å“$æm"F\½")Öm!u±Ù´¦yI'0¬y”žW ¨&Iá(.„$9´2P_ŽNuîQ!ƒÌzá.äh¸¦(·äˆ¢’\Zéi±ˆâ¬/„™'CØW:¥AR > œb_1¤rIØdˆ /{¸ ïn×»PoÐÝi”IB Ar²‹¢XCŒºGî£ –^cÉ É%å–”¶ל\’âz(GA$ÀÑrVö?è„ëÀì Erˆ#Ôu\˜‘SвpAÒâ’H!„ä¾*#ö->KœMÐðE…a’x¼\ $ÉÙ‰P«â”F¿¦•™) ÇòNÑd’q᎛P4™‘ÍÌb$£²Yc›Íf!nÙ­±JBÑ. ãÆðß–¥Ø¹X’ÀH†ÛÒ0$wÿL! ×. À±ð2G¬§r5娵ê‹Åö£ØD’¹vÁ©”‡äBí… ¥-'Y·FgIÞ9 Âû†™!¡¸X_!‡¸‚¤Îtk0Š5' ²s„ætV2E`Xé²ëp*ÉŠtI>Ù›_S¦™S!Iom ÂQJjÑÆv.Q¤%7KŠs"éoKî[‹¥ø$LŠ}-¥*$׬(º“ϰÜû…0…ïËÀ0M㓨Šë[ò]9"è]¦!£¤S´5ç~!L’„d)_&¯¢Åq©ÉÕ*Bî$$KÑ2ù9 ’ZØß%‹DQ—Xg€D(zÎQ!: bë¶ä‘PTX®r¾‡ä:!zá‡è(Í:#¥,³ÊÄ’s¤,$÷IyaÉÀá: b—?·µžLµ I~L„s»0м9—„ g…ë(ˆ]AF“,¨a’Àô%˜/b’œ=I`vÄÁ{Ùš!H JÖÛ¥MòWGÓ·*=$ÙÁ. 5$ÂDȽ?„K¬ƒ×x’uk(É^v‘$<þD,®¿–4 IíêÖ¨'ÜøØÄÒ–|™ ¹ üÂ<%9VòArA$yô(&ÃT.—hUa\š†"Štab°íF‚D²¿”½ G)ŠAÞ”äá(£ämñ½ h ­ØJ¯åë‘ÈQ³‘‹qm.É'ÖWp²Ž½Ar_ K0ÓËö!ÚØ>GéAñÃVÙOìþ' ެ’¾l‘ŸV )­Ì…¤øÅ´\ÒaŽ~!ŒQ\R ÀrÒüª‚àà¤@¢(Î’Z”hÖÑ/„Y(¡’»÷¢ÅqÙ€¤Ld¢MK¨$%.àD8ü³04^ÓrIøÄúõÙå’µ+ÁBL?f]ã=H`X: –ÈjìYHZªy1ÁëQš™FŠ} v„%9´.±/½°$']±æXc„eoUµ) 1G§¦;+þÎò‹ã£ vƒ*°î;Å>9´’V‘•D ÐD¤}±U†Y•d¯@LAÒR’¸${´ï£ veM’ôA`Xÿ±Ž‡#9j6C郞“ì|0DrÔC2«j²ŠHľÝrËxk4„ÿ]@;¢ÞmÆ G<‰ìI”ä…âÐA‹´« $²ƒäЊu\I#ÝÎwí8•ò\¨½4–EÑ:9Nåð=Ó(”À>(3$ë+äQHʨ(2ŠOF.èp<ÏweúÒÙ¤{ºi,9Š"Grh娺w$Ç›Àc¿_-¡’p\­D@RREQ#K:ðÛ@9jAIam$âÞ°.¢©ÄARXÉBÖ_pì›1L’zSÔ5LbŸ@ÅÞy„<Šyi>V¬¢6ÛV8–N!©}ÝYFw–9~Ž‚ÀLéŽ~a¶PÄÌC¤I¤#Ú4Í `’ýKÔ$Kw(É.ó…Ÿ‚{OOTcÖCÚUQ£Ê' Lió(ˆ]Ç„«ÁLéˆy#Iûv ÐæQ»‚ŒÒÙ«‡¤Å[•ºÎ!m¡$Ç‹Ÿ÷“-¡)QoâŽüMÇEºHw€Ÿ]@¹ætÊÄaٺͶX7tórÔlY¤E”äHéh€,·LhP2U ¥d‚äjŠA#Ý]ì*¸ÜÑJ¶H*&¿4–E±šptYåw…ƒÃÿ€iñOÈ»Ü1O¬ç}»rT;-IV(’£(ÖÿDfàÄÉ¿%Á½¤\-·ä†ä²rŠ’3.¹!¹,¶ä˜HäÕž‡Î# ׉„Ìb}=’9œ¶b_;ÒA„Z•\áÌýA0ëzéEÊ%ŽIS$§³µ*¹ |’) E„ãÚ6„%“íEº›± K&@zD•ÆoyÍt$ÀÑõèÎb¸³¨à; •Ä1Öwxe±Ï¤“H“ˆcú‹4ßÁ*F•a æ^P\Ü£$»Ô= Q"ö‘P$-Þ·5Û¤ˆ}ÄU#I‹ç¾@¢o‰ ’Ø:4ĶAº%ºƒrPE騩‰º+8QtÙ{%¢$ï å. º-n,\U ‘êìM­X‡Š4Ò÷ ¨º ¨x¦Bõ䔯’£(£±äðH£ï$R0^Á±°ô\ĽÉÕ+Šó¥oÝÔØr‡aá"F”œq±ƒ"|É!‘oCRK‚™˜^v´˜BRŠdFO¾` ˆãšÛkHªaLÜËÅúâ#Ä’jh^f°þB˜dHZ˜¢®a’"qm8öŠPR"®%ß&¨²T!yËKëlãB I‘ Ë åùÎ*Aî/„Ië uÐ³Ô ŸXæÖU¤I„’z±Ž´éÁ¬k|P‚ù­€HH!ðI± ­€QLð2‹ØK‹KâDì%w¯AÒâ3ÄÿQÙGëwÌHE¸ƒ$9l‚üâ±úŸ ´”$RÄ>6oxû–2`;ÅìŒH ¼A’6Á¶tÎÿ× Cy|(XIEND®B`‚moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/index.rst000066400000000000000000000002521470420062000303230ustar00rootroot00000000000000Triangles drawing ================= Drawing the first triangles. Closer to real rendering. .. toctree:: :maxdepth: 2 one_familiar_triangle.rst uniform.rst moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/lighted.frag.glsl000066400000000000000000000002521470420062000317030ustar00rootroot00000000000000#version 330 in vec3 v_color; out vec3 f_color; void main() { vec2 pixel_coord = (gl_FragCoord.xy-256.0)/256.0; f_color = v_color*(1.0-length(pixel_coord)); } moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/lighted_triangle.png000066400000000000000000000772551470420062000325160ustar00rootroot00000000000000‰PNG  IHDR{C­ IDATxœì½ùÓ6ËQ%vêJB’‹„@û½lþï«!é:l‡ƒ‡Á f3û*!ýj‡Ãû¾„a‡Ã’‰e€`Øw˜E庫êœÌ¬ê~ÞïÝß<Ò}¾ê¬¬êê~Þ'ódVu5H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘H$‰D"‘˜à{ï½ë1$w†çîz‰D"‘¸”»@"q7(ø÷ÔíPÿ¯»L"q'xé] ‘¸+$ûI\…ÿ껽Á%w„L%ž Jÿ°Ì§x…Dâ ÿÚ/ÃÊóTŒ?ü•ð_þ¯·5ÀDâns‰§€ÂT§pÎ'Ž¥A‰Ä£F¦€/Ãm… ÏSbakùC·1¾Dâî) ÄcÆ'à‡1yòë¬ð_ü/79ÀDâ.‘) ÄãGª›á #a&$-^Ž‘©ÝV–B(4Mþî¾'·ŒŒE¦sËÖ&¨¡Ð5I$%ò<ñ8ñrü(Rþ€æq°G ÷?ÝÆ ‰ÛEF‰Ç‰‚â7xè”ß.ôìÂbÛäF‰GŒüÓN~Ó‹+Pp¨U®m…’A@âQ"#€Ä£Â'âÇ+¶õŸ“Mßæ©Uà¯ÿû›|"qËÈ ñÈPÆŠþ1»«¯‚ÑÚ¢«B UÕòáàÄcCF‰ÇƒOÄOô OüÜï‚òŸÐßsDýßÝìe$·…t‰G‚Wá'äp豯åÜo0Ü óµõß^ëØ‰»A¦€ c¶6˜¶¥UžÇÓ¬ä|pâÑ #€ÄcÀ«ñSˆèÿ)¦DAÀ_þ7×5øDâ®@â±€vq˜¯åB¡¹ßÚ ˆ úB1´‡„‰ŽŒŸ„ŸŽ&l‡Õ¾(õ?Y Zµs ñ__ï…$·ŒŒ¥ìOp­wz:=Ä Aç5C€Ä#@F‰‡×àg& 7‹“j©|êDâ!"ÿv¯ÃÏØßõø,K€žy!ÐþPØŸþ7s¡‰Ä "#€Äƒ„Ðÿ.JæK€ ó‰šØ…@ãIc·Ï'ù—›xxødüüQ®ßFWHý;y=˜ø“ÿü†®7‘¸!¤H<0¼?x—·›ešÓᦚn¸@³º³¨øãô‰‡„L%è•¿ým½vçBºª`¶(˜h×g%ÍBšu4I$òO6ñð)ø… É3ãø–Â»5£SŽ_'aA/ŒøÀ&ˆþè?»žKM$n$ü~î%0…§GÆ"Öo|Q˰õ­ =!Jn‘xpÈ ñ`ð©øEbý݃ SR?â€å@7ìçªQX0Ãþ§Ï|­‰Äm๻@"qÚó^…H<€‚RJ/Žª‚²)ï…>Ðt¥ÐŠÅ5„ô¼ŸË¼*²ì3‰ÄÃAþÁ&> ¿8}®öDkf¤~^lÎúy]/Ú†þA‰€œH<›ô÷k‚\ÏÙÛ9€±Â§o#á' €Ò>Ò¡_ÿ#SÉ«™J<|:~ @ËÉ´Ì“3M´çgö*y€·UK3ùUô„=QK+q©I>ý—žár‰[BF‰ZücVøÐüˆÝov߈n²—ò:ëàuA="éE+%÷«&î;Þ€ÚÇ}“þ-1?ßâä^f3¸Sôðïÿ'×q‰›BF‰€ÍÆ×NÕû³¸Ââç4;êÄ|“ëó¤†*{½…Sým0}J ï´å’2H<d¸×ø |d¸' ù£M¡ à¶„kòÓ‡{¡†òî'æTü^‰û‹œNÜ_¼l¤ºÏ±öià~Hk}ö„|ÿ?Í7ŸA‡CÓLÛVCMôèñ‚Æû÷§hfù¼Ž;‘HÜÒ$î3 -½!;K¶¸ Åfô‡ZkÑŸê’‡¼ºÕ˧€õÒCg4JòLÍ+¨oJ$îÒ$î)Þ„m]ú9û`Ünf„]L·ü{ê°uâO1üD—ðP»ê›>tµ;HÜ4Ò$î/Ô‚Þj¡ØCXæ> 1Ð ô ÿºE„;Ô¶tF6ú]ªžg¸É%÷é÷oƇ\ö‡áõvw Òí5(]£™úŽéa‘¶Ekûe^ÁÌèLÀ›3HÜG¤HÜOL³ÿô_KõŒC4ÓLº9‡g8ìÙ$7ˆ"ãÉ™€ÄÃBþ]&î>¿<ÞúÒþBÝí aÌVq³£Íþq !Ì&Ïf»7=‘[ÊïŒlüÎ|Õ[’HÜ2HÜG(±²ÿ$½-ïá qvÊÛ˜4ŽÉ‡OŒôÐàþcG3Ït7‰Bþa&îÞ‚_Ö'¿¯‡²~ì¦Wù¾}F,:,·zn/ƒ<ÑCu1A¥Q™Ã*Ï…ýv‰{„Œ÷ LþÍÜ/±pÃìÍJüž¢o3ÀmÕLûšäüží쾘³ö)Z'Dgo’Õlp"qŸ qðYø°yúŠŒ8Ût€DÖJG)°M&¡9 t\Љ¬¼=±Øz÷xB)Àg}ø²;’HÜ$Ò$îtƒŸîïöºg Oùʂ҃ÁÝU ëMÎ@{aŒ¾ É ˜¼XÒÿĽCþQ&î >†ÙÞyËòÃç÷Gößk¬’9ƒÉ!eðaWû4MÚ÷­¤Æó²C\­~ë?z滕H\2HÜìì¼ÑgYO/ùý. b>*&©›+¦€ÜjÉ4Ù‘PŸE5G7Iº÷ùǘ¸x+><áû%XÀƒ8¾ßÎøNDGWÍc^ê3:A{> ˆ ~3ƒ€ÄÝ##€ÄÝãmø°åû& Ïý¶Ã]^ˆÒk&¿­í1k€F.šÓÞz}Ànbc¼…¥í"ß–³Á‰»G:€Ä}@áa‹Ù'Z›Xœy4lôc6„½Ç) ›*£“.çǾœÑ§¹^YäkãÓ$w‡t‰;ÆÛñaC߯ÆÀöE8½‡Á÷ÑåEJG«€¼~?‘s&ºˆÇ+>mÌDpoÏ qÇH¸c”f*» v|_4Át¨Ï‚IÆ$vFè0>›¶<2F^h0÷"Iü“T´.†Ëêã,ª™HÜÒ$îïÀGÀ<&ÎÄÙ¤‰ ÛîèY°ÞJÍ8ûõn-Eä…ätÔKz'|¥€¸”­ðŽœ¿W‰Äµ#@â.1¬¾fx@ Ü&y”ÿG¤~šÒá\ÿ ßaU˜2rႌ$šmЋë®N$î éw†wâ#’'Ûb"Ï”«Qg ô¼g’ø£m_Ñß­¹|º*ðØÆøF6süæ&F(н…u-½ò$î éw†n;Gzܹ³äR z—S`éüXýyY ¨M¸ÁÜ_†i¾[TF¡ˆ$‘¸¤HÜ ÞňZw;¬ œQa31*jfW¢oÇK9®ê¬ßPx—Øáá÷{4õK®À»3HÜ Ò$î dÁ%‚AÞÁÿÂÎpåÏÈÉíœÄe|މâbì¶&sZÏ:˜)bÎgIL`çY7#€ÄÝ!@âð<ÑIþÐò²™ƒÒór79Ü«yV ;ˆ¶ÔV™DÐpRUì)zÍñèºÏ¡VXaœµW=ŸA@â q7 ¾m—q†J± •W5Í×ï…ºq #…¬_|€9»ø:©™F’)ÒyëDâÖ qÛx†¾µÎP¢Gh¸çÖÏ®l:pîÁe‡& ƒÕ›áJ|À“Ýûx5¶PÕ $né·ŠÏÁfæ¦s¿bÍÙö›Å5ÄàÚexZ±ø5 :0T ÍwÁDäLtŠØÎ'ƒF'=øœô‰[E:€ÄmƒÉ»ä|Ð'UgrÐìfdM~fhPç­ãù€NÈ#Äêvø<3<:$‚†E ÖU$·…t‰ÛÃçâ#ÝÎ*†¥& 4Œ}w/z±ë}vól8»†b÷5ûâ_2¤“¢Mtä. õ„øÜ ·‡t‰Ûf“Ò‘>ƶ6uµÛbs•Ñûà€>Ág—ãX™i¾’}›®RîoA­¹^œ%‘¸U¤HÜ>¯ÏýöÌGKÉ£xJŠa$ú Ò>&ÿ®ÝD4 4ëÃÕX¡ÚŒ}·é]QŒS¸j~^‰[B:€Ä­¢y’"bÇmòG9=T¥w¢¤›29àNVÓQî¨*JõZøÎW0U$né·ÏLJ‹µø€ËÞ€LcQ‹[L 6¸LümgfʽÝ7 ÛKú9Íê ÷e„zÎú°?(Àçç»b·t‰Û€ÉÚ7N¾U±­7ÄŸóä&zØúkÐl寿žÇÈIâFBæ]ð”_ÆfÝ92rŒ§nk"ñlH¸q|>¼'VÔF³¾ƒÙ³y†µŒ ³gEØ*™%æO 4/Q‚ŽŽ†5Ì?]‹É§‰c(¾ ƒ€Ä#@âÆAß±{g<ᔋaÙ6 ãWûÌw_úŸÖλuaG±ššbš_§‹ä–%7ˆt‰›ÅâÃÎâÂÞÍå0›djgi}cýI§“m“ô/Úê賯9 \K;›O=Í& ¬WèŽI„5ãß›a‰›E:€ÄCxí`å#ùÑk¹À¶‘r.qº%ÔiFy˜r_Êtío ç:¡š ZüT«Í qãH¸A|>,yj;}޾åàŽò‡dßÑóÐÄ÷Ï# ·æ' ü% 4U—Ûù1ýCí‹2HÜ Ò$nLjŧ$m“cZ S¹Hý ÍŸ'ú¡=,¦¼f|º1öî·Xt=Ïhý\Þ$7†t‰›Âã—™•kŠ{Gå×lˆA¶â*L¬P´ÂÄÝóý¶£Î_ — g/^2Oøâ_žÜàDâY‘ q#øìfË&9œeŸØz;¬¾Ù%±Ïè çc‚H³÷¸öü(ue)¿z#ãÖ÷%é7‚t‰›­˜‘ý’ ïòbåè6´÷6Mú+yïýY3}ÒYÇH{P_püqîÑ'k¿ß]tg”HÜÒ$®_Ú“?J£ +¥SBW Z'l«CÛk€ÌîÎI,ƒÖV6þ)t}`VbnÓð¥_šA@âú‘ qS`ÛÍö8±åûR äN´å§§ÚÊ¿=[¿â§ÍAÁ8·8 èƒi¥ø"åŽ(ño½e¸1¤H\3¾ â¤E7–µ BAŒ eçP!2ÍJ¨Ù}¬,{™Nüªfï×®ì4“<½Ukb•ìÒqSè6àË>äïv"ñ,H¸túbËÝ’­-ñ|¯Î+‡6Æšš¨ ‰í¾‰O€Ñ­:‚PM¯ÑÏ 4yëÊhò5[N$né׉/LJ$áãØðBÈNlÇÎгí-A•±¿@d÷ý'ÛcídduàÂSeϾdZ˜ ‡Ÿøò ׉t‰ëDœÉpdßsö©dü;#ûã¼qÕqL°äûŽÈ#<‹é‡* "µ™$ ßH\Ò$® _Š•?Šâ°ª’Ñi๡ïÞÂ[ÿ¹Ã˜ò}vHAÌƒß Tv€8¸ábßðD"qMH¸6-/òþXccÊO¶tb”ép¢`N·ô …>Ði@`N·&aÜÙDâš q=øJCÿ‰hcMpeØ}mn,8›Öâ¬ðèÉÛýpgpн#ñ=¾ sṵ̈q˛Ş øÊ ׃t‰ëA -˜ËûCÀŽyÚØÜ{aTU¸¢÷~°ÜÓõxDÑÃì¼p\lpÁ±cÐòäæ&ÏŠt‰kÀWá—P*Œe—re9 4ßKZÏkʯ 7 WÙOêèÏw ;齓所€/êäœðv3A¾AÊ_õKá‘H\„t‰gÅWãË ¦›åª® D,vÜJ!;%QuÄ–}Ó/€óhV[<Çt½0×ú‰ Jã ™¢øUl·Ñ–|õ/"‘x6¤H<+ˆxó=+Oç{WUbô{;ï*TÒp2åßï]/fŒ§QBàÈ»D¡_u@ð‹Ö†eî*‘¸*Ò$ž _ƒ_Üm1 MyDÄ_t`î%Ý3ñ2‰ëWõL­y:ôSÆútRx—Я$š¶¡@x&÷´øš Ï„t‰gB¡ÒŒþc˜NJÁ–åF¿+›k…^Ç£¹³þösÂýe÷s™"”ÁÔƒPÀ‡ó @:I$®„t‰«ãkñ (µ8 {\vþ€‰ÿ‚hÖˆÍôöÚ`1ÏÜú—¥õ.Ð'7ì}Rs¶ø§o_w-_û H$®Št‰«c¥} ,õY•÷¶uo­Ö cîIÌ[ƒë¢Ðú‡ÍÉ8ëßûš6ïC4b\T`ñ«u å}j]¿€Dâ*H¸"¾?olú†Å ÊðT3:!þ€µ°†Ô{—°Œìç…™§ãÃ…™‡à~‚ªý¦ªEA´ˆOàë~‰Ä• qEöÉ46×_wÓoŒ›ª'þD k‰ zlß»üÈÄ“Öߣ '‡qhBZªqw67PGÿºøgDÈ ñLH¸ ¾?·Û²aߥWðyteÿ˜Xh‹Ýaèœ(3•PWþLuÎ ’¯¨UµN¯ò3Às[¿{ˆîN¾þçH\Žt‰« x[ßÝ€šxÖ±§Ð¥>Jü[úÈ, jÞ¢ÛÐ>`:,„‡Ö§øZìY/ DßE£’ Ê qe¤H\ŒoÀÏ‚Lá˜ÿDŸ^Î ‹ &zÏdô¥ùÆ=õ:ž•?F¸8µ;cä ÌØF²HšK¹ÍúŽrë„SCßð³Ñw•H¬ q1él󓎃*‘Õ9áΈ»é'‹Ö©ô̪†f}ÆñcpI`º²µ¡òÔHê_->ÏG³¾Óû»Å@Õ*$ç q¾1¦ÿ–òk-••ã›\¼L ±3"³nÏøc»§t~aýýH¸ÝH™ÒVÊâ»w Ÿ~G7ÿ1–ÚÚoÌ qÒ$.À7ág6zÞ—ð# §ƒòZgI{“îBºP˜>é ¹õrØY6§ÝM­µþ‘Ðtr@öI8.J•ûíæ,´—F·5Xª7½)|ÓÏ ‘8t‰ !¤¾¥ š‰t”Ëó¸'8b@3ýj:÷%.b‡Ýtt{Þt0=ûÞ M†ðöθsZßmù y2@‚½ŸýJH\‚t‰³øfü´a÷h¦Œ„ƒÈƒˆ³-‡VlO‰#›4½3î1Ó_ø€€iGõŸ¹ZŸatXèÊãFƒgŒÉo.䛉Ä9¤H\2åLÿÙ2b0wç&jï–‰ø©¨Á‹ûz«Ö[à.Œ²ÿ漃Îw}=ì­zL°Lý‹¹çõþª&A@áΉSH8…oÁOõŒM®é¿zž9hî¡@ÖEŽÁlJrÍÎO˜~,÷®¢¸CÓ¿“›þcׂŠÐзª6é=ž”FiK¤ŒKè·û((¥â[~ ‰Ä ¤H\† éÿ.cëÉY #,b£Åz69­Øbn8›6‡Þ%D€Ì@ØìÝÊðFCõIBØévLf€/ ‰óH8Æ·â'ù ¯ SúO6Qf‰‰ºÓo´}D€¬³Y!j’BG3ùù`冂°<¬VçdÆ{»ìïQ0žûÖŸ ¾ÈDB‘ q²¦ó€þ³­'R?ÊØ­aˤ‹e´ÖÝ ’<j`ë%28Œ&±Wè>Lß]c>=älÎÛÖù`˜øv3y¨…n~Ÿ?€ö©®‚œ­M$&H8À·á'z€{ôצõõ Á3ÀÃL1Ën¦SÖ‰‚¢UˆL¹·õ½ë6V€Ì0¯cQÐ-í¨“vgªœkÜ"ñ ¥è­[™0°oÐgľí'Ü—™HÒ$1,~7p¼ŸSÏ úу>Pœ}¤éòÊqºÝÎø¾î»p¼ôx¸:I·ÚÂô§ ÿ‡£µCü(À¸W“ €:ç¶CbH, ±Â·ãÇÙâ·Ô ¢fò<ýßì;”þ=>›f鍊Ë>—[¸së Ø°ºY_êüÔJP= ×€:I°AéŒÁƒB.˜;@7Çn 4 äNvoÄþàÛ‰Äékì9ý¢BtúoWûÐ\±ÆEÌ%çýéu1}VÀÚÓaÍ )h@ ~"ð]r:ˆ$ažÃR»ós|ŠRxŒþ‡M/6Ø'!(_D÷zL3$3¤HLñíø1 æÞ>2ŒÝ(WÒÔ§ýçÜzÈ ‹-øœIkâóûžï&~Q / óù SÄ3ñÖÍâÔ«usß/ÓÝ|ÆÝèa/í[F×àÛ,þv‰t‰ŠðQ;\¬Ð,µë|FUoۚΠtÚÛ×zºÀÏûµ@ó¼ÐÅ€>îË’2ã#w!.ãO+ ÆiæݦÛ?S~³ÔMsÄH(Ò$b|~Ãä : @3<²´,UÖ¬ô¿©5Ól ½+^¡OÆ9Ø'Š‹*h 3ØÝÍ8a6,r¶~~QcæGe2œ9¾]º+°{ Å²e £øŽE"!@"À{ð#Dð;Æ|€¡•Å0Ù=½ÃO~É{á‡U—0”›¤y¶ÝÝ+±øÎnª«0”ŸúYGc‘OÓ±û}Ú ÷Cϵ¹ø¦™ûÑí¢†òè¤iöÉýva»Éü­¡ïù$éŒ?’Äo¦ÈÏÔ–r ÇY{gkDD0÷kfH“x±x…½•Ù ®9†6þvê "€Þs³ælè[H¡FŸŸa®nðêú%ó2!]餗FË@ å79"]GÄÓȉ„G:€„Å{ðÃÄð%‰_TˆN=7ñ°’L`­­ïÆdï Bëé׆2¿VXòþnú·ù»'OáÔ”sóÖd lxˆñTšD¦`.­_õ¸|YÏCA:å'ûnî{˜÷—¥AÀ{~‰„"@Âb³•ÃL?<0Bísp“3Á0j…ìQèØPê’Pa»=Øú"ÎÛ]Q”ü)ÝÎŽª¡Óì;Ïv¸ü>ÜÌô6=¶ ÔÜ÷»¯úÊLg„LÞ_GmÔóõ£‰€t ƒïÄõE&M²ïš¡Ÿè¹—n­È&ÅÞú7§Jöa t«G¬_…Lóe98ã 4d¦‚AnoD,¼äÆ…w?ÁN…¼Ý~Û ]Ñʲ»¥AÜÿwþ B:€„°x¿àÇ͸ìÐ&dãð!Ódãí¬ÀžÀ‘9ƒašÑí2G®†ýÁXAßÚR Ô„í{üøð1ÿ]Ž]¸9P%«Ö-;Qþ…!‚ó߉Ò$ß…Ó§€Zn;øÙ`ñúÆ˜Êæ5X ¤éšBžc¤†Bê&?%á3rDÄîg/zó(¯ÝüGlÖSÇÃkS+¡Ó¯ÿ¡¤g„œeqÀøŽ ­Fñ]?ˆFåÞÍ IDATD¢!@ÂCX|‘…1óe?aÎc0.¡wÈ> N¡˜˜†³yvÓG<»K.jœÔE²u7ý,g†ÚOÊÛn×0÷ÎÐY\“B3ú–ì“ç(QôHÒ$v|þ'vFÙž ;2ì£n]Ð3*œÖÛÊ`ÕÿV/tXýei<›ÞOÚñ.#$Þ‚¦a%çCÖœáAw<ì±4§ïˆ?š]FoèÆðj#]F!º3fQÐÞ˜°ÑÀÐÿ®„D@:€DG!?X<»¦Ã&Û4-È894™¢À’?1L9ʨ4sÙ0Ä¿ÔbCΩ Ç:*IEÕ/Êëûü;¤YbëžÛ=éÏ~¶ þL$¤Hlønü€¤w8—`I¥l¡3"´ŽÍ:†À±1"cÊÆ‘¼Oû¥¢eúQ09žìí'ÒE«Þ¾£¾|¨«PC_Èij+%»ï(ÿÄÜ4Ñwÿ€ý H÷<h`Ö·±¡/ö–r a¾óè¯ÿd}$éÞ‹ï×ùÞ ½Ótóž ów&ÅÃØ‰Ï`jÏYx¬Hts?¦‡ÖD k–Ú³þFä瀦ø% ‚1æî/y…Ï"|i× ÞKí>ÝI£9IýËðxfø½ßïÿO éž:Þ‹ ˜3.¡›EÎñ´°­*#±SƒÉñÍ|O3?+¬Ø4M“HF#’˜­ü ø¢{BAµ(¯sAÃ…˜ëµ©™o3úíÖ›I‚á&‡cpÓ­ðÞˆÄÓF:€=†ÉáÐg³õAjÃâkåLl|`/oé h6¸©9£_û8û²HìY(åoÙ!º:ô½""¦o.ªôêB؉õ=XÇFk@7ßcnìðyô-ØOkèѾÙj>3xÊHðñ>üýeöß»^ùcG¢`‚Ц´÷v¡­¦‡™WhFo2\E÷vfTMyý›þ(ˆ –Ì_‹ö†–³_ŠUàÏøK/¨xßßw&‰ÇtOƈ›O–B—Eášáž(¹11¬”B Ò>bè…#‹)4´ZÍë 8DhY¯À“™`¥¹î$Þ8ï¦ïÇo¬?ÝÒõ÷TOpçí¬ïÌÐë=É™€'—Üõ·÷áßEiëbJø‰ñ€ìòsk2ò)Ûgë;*lÊ@Ë.í#&]¹.·ü̾PGúYšdë{»6°¤:{ï¼ö„5Žò{‰s Ý{­#fúlÖ£˜68hµÁÄ€*èç6°"˜™Ï>~åÿ^ÿñ$2xräݧzÆ€N Ç‚#ød(1É™4IO³œæÑz·,ʹŸ½Óÿ1>N ½‡Qó£ÐéüU»ÔÙàÍžݠ‡¢à }ûfÃÏv‡O <-¼ÿN£ÄÔÚ~’B§Ø"j¿}–NÒ¹·Þ„”{”±³ø¦Éü}¨17d"O¬Ÿ£ Rè9Dÿ$šo¨½ñmó°`^Ve>©måîó,ëkîÒ8lñcC?ŸØ>Ÿÿ||ìÿAâÉ #€§†Èè8R/j.D°sÚ¼‘Yέ[å4ÀäC OTîÊv»J¤´ÑÓ¶;Oß»ú8(øháË.³<žCëÕ€‹”£GÙdsWCÍØ}ÿˆ¯› ˜† î#ñTÀÂûño mw4_?Ãà`PûÆÅ…Î=0]õFnK0Aq€D -²r›0p\žKqçòÊ2žºbÌ„›å­qÆ¿IеÝÖaL­ÿv®^%žÆyˆÉ^=ùeÌýI5àùÏÅÇþ_$žÒ<¼ÿšíœÌý>»Éž{‚MÙ8.õb =š™ÞOÑÚ5‹ì;\î¾äTþ‡‡¹ç~v .Àšûn—/Í—ÀKw-Þ1pVÇQu3°÷æ>g³¾Å}râ(}ÀÓA¦€ž Ú4æ|Ý™¿Jf±öÿƒÿ¯¿QçÊ‹CI`Xalh^Ë(% £‡ÛTmAݦ±Š™ŽÛú¡ßÕ“ÖŸyÆú[»ß¢qáá÷Òþï]‚éÐwÞ\KâI #€'à߈¼PxGç™Ô3cÜ)6x½vPû]b#ƒÑá8©ôŽØ½õ¥Ãª46Ƭ¡šî«hfaÁ< 4lî)îÌ—ÞÄ%úÁÊÆG+[ì^ø\|ìÿCâ±##€'‚p¦W?§«B#ó±E%êA×Av¹>¾dC ]zÚ¤:Â.k]ÆŒîÇGÈbx½áû°ML‡qXpÊúÓ ÍHøÐÝ®îÄaDv?ü²¦ë>¼O<~|ÿÆñ¬/–ñÁ¬U¡D¿Ó7«?ͬ¯—Læ„Û'Ü¿MSˆ0´ºÛeš&—ÖYv7Êì)uw ý;ˆf}¹Öëïí>»ÒÊŸÑ/^xû(/½ë$n((([¹`”Š2ý¬F³šÞ6Í"µ›Y٠̆Ң—´î¶R+”Z°uN ÔÃÞ u,ôµ a;WÕÆý5…fâ›òÖ›NT²•½¼ýº¿V#„D`¥ì {­•ÐÓ[•ÎÕÕ Íá>7ͽ•ûýö–xäÈà‘ãx‘9>Qmâæ‹È ¯ ™>„D—λAŸQÆßH8tà%žŽû‹B¸L®ÜÔñß“éïï‰ ú=k|8€vÏqî6²ö$œÌp:Ñ pûž){Sè1à£8 hÅ§Ë à±##€GÁÐÏ\Þ~ª)×bU6ŒØÙ:‡¥Ô*'ž^z‡èÜŸ¢=0¡ÃˆÆð(˜°á‚¿†ýæHMõò"¡@)µëÖCjâ„e³uåV0ʤfÈûVk;¤SÓ')/â†~ê s—Í& Š `‚×PþÞš'¼|`Š“ÐPkT¦å@Äú»c0Â#e°Å€’)§®µû½lž0qÃÑ'¦3[LðüóøØÇx¤Èà1£ÙÉ×3 oJ³ @?MóB©447QIylX Mú˜JéµÐùÂ%CZ+UWm6C=*31‡ ¢t8†h­öHE"¡ù4…Àtšâ§jdpôiƒ ìH}ÕüÓÆB¥KïÐ $ob&øÒDXy+DÂÙ€Íø[šo—™Û`r_¥[@ˆV‘|”Ca÷zn±¿,ø™F{C¿^($ò'>5pU/<þ ýº¬A¯…”G'’ >ÝÖ«ÏêÚžµ*ñØÀãÄ‹xo´Â§Ûµ²óéÎÁ£ÏÒØùv4Së~„BÞy‘W°¾˜€@" ËëƒòI'õC¡Ž=b0 ˜þCòNÅ™ìž÷—˜`OøìºJç‡& ‘tnî—cxº'ò-ÖÑIðY†Z¡³4÷H§~á]øè¯"ñèàâE|wd©÷Ba‹<ý$#Žf¢ƒ‰_Xe›ÕÙ휱ø‘«ÆYlÎg8(êgVv…ŒGpéoŸuœ±9€½á>ä:4›œäa1kôƒ‰ßÀŒ~4_Är±×Sƒäˆ‡%”vaú€ÇˆL=RØi[`Ë£ˆÐŽö±Â>ñËéÍA—lb·ˆ6E³éQ²¨ŒDZ6 £eƒ¢¢íÙ§æm¢î†óF&Ƀp6µ´NËç´B3åUz&"ßRLÒ­[ZJ#­Œpþ9©ÚVýµT{K<6¼ˆïõÞ> ”¼ÛÏÖxšç±L¿tÎ C‡÷èµ6t(¶ê˜¹K”0UðeŸÒ‹ ®‘)?(ÏC½5O@ñÁz¡˜ZHZFwƒ@àF‡’ÚÏ@y¡02˜­òä)_þ܇]L/¼ ý5$2x|àyÔz*CXÿL¡C‚€þ9”LÛ– i–¯Ú  ˆæ®…Bœz³¸i`,õ„½…>R Ûbh»;å‰dyˆ)ï«9÷‘ðÂM5ÐvYg/Lè¿9£êӭާ‚=åwjV\H?¤!Qâ1 #€G…ñ¢äŠ#"õ210aýÇ3v™‚´Ù’óôC £7!Eô2¯^°Âj˾ɬ Ÿvgˆv;¡>i¬õ4žÀÐü–”ïM$D 7*¾ÔÓÿv¢`»Ö)åwšy„ëGK^x>úëH<dðèP÷'Pûéó€ Xj×zò>í¤Ÿ®÷ךk 1—ï·`OÙ—¸CúˆTF¨ÁwŒ/¶ŠP%­C¥ÏÅ41äÚ4· Àö³àõ¬Ð¾‰ÙnöÔ˜?Ä#@F/â;bߘ£Ñב”?Q5!õ³*¿Ös8‚/:4Àß?F=aA¿ƒû»€€t†[âGÀz!Œ öÂàø£­®üiçÎ/¢ÿ4µPœážUÍ2B®•«2«2xDÈà1¡¶<q˜ä> UcŸ¸Ýd»€€—ëôN ßoùŠÊ±\ms·>TÃ&il:ôB?E©r.ÅœÝÓi*ô="VI‹×ÃŒÔÍ>úhiÐ,¢(aB½¡;F e>…áø¶Û2šGû@ ¢–ŠhÚÀô9â=QâÁ##€G‚ñmÍúwÒ­·ð.ìì\ª¢€ ž> úÿˆeêêcÊÇ¥ç½PœÚzáÐÈ×{:¿úJ\ÞR¡ü|¸3e¨%ú{¡gË&”,ê|¼˜þ×ô¿ÐVq€Õ,<<#§^x;>ú‘xøÈà1a³ÌÊ ÙÂÒ«8¡?BnG'eç“  ¨PÏ;¶Oèt¾PåN/MÏG4¿¹€:¯ÄÝ«tä¾-ÿ•ÅN“i€FØ{Û½PXbWþ´ g‚ß óAmHÇÄß|”ì½:QâQ #€Ç€ñ­ÝòÊS¾p„m T…;'ó"°MâÃ`Ëh[Ðø`ªv¢ÖÎŽÏ WõB±’^&ß r¨åí®Åø’€ïËaKìçú°!˜Zè^›Ç_[ðH€¡ihk •XÓÚæ¦!K88-Û Ây!˜!0Yþˆ†›CëE"ú0×oC„½÷¡lEçoKâÁ"#€ñÍÍJšì¿áòcŠÀ}B=f¡À4ÙEAÀ,hY~ nWïŒrŒdY˜qü³Ü-÷-: "€ƒû§bÊo«Üê &_Óÿx‡8{xjP¹é.§5ámøèo"ñ‘À£{”wÿ­²~ ?«³ƒ9hMús¹¢¼>´rRèá‚-„0c›äÎ\¢Ìæ”!ëo'Š Ç—B× šy|X¤U´Æ¿¦‡[WÑ0r&à1##€‡ñMdC¡kÿAÔÚqv,iþ´V˜x FÖÞ<ñ«…]Þ_è¸äò]y«VŽz8¢üÓ Fòêû”@û*È>Ú%@XDºQ(ÉÍÃ=„ë÷·qy(ý·µÒ¶˜…‡ÛLÀ[3xÐHð€ñ"¾PsL‡ÐCçΘûоe¸ÃØ[`þÌ×¹B¹R«OP BMøœu¢¿ÔØîù#`¤ìÒA`‹L&#EþD­<ÉÏ®z]Î~øÂ[ñÑßBâa"S@vß·Ù¡>¶ ª~­u+;}‚h_Lª™¢>³Õ'ypX°g”yázœ™fqmFHõ-»W…Y¶G !¹‚b'ŸÃ¬&k@QÜ:ѽ“÷ä×ú0ñ ‘ÀCÅ‹øzCÆ‹rmBOó™Ý;:ïY¬?ÚâRª~&GtŠéÈãÏáÿ(2˜FDö!©!ZÚœ©y ÃpÛô‹§ÿtÈý&W ÿAçqÀ¾ðYøè?Aâ"#€‡Œ`Ùåf ˆ×3÷GDó¹ÖúN¯€N =Ô³KWë¿N ózitÐn Ÿ–§ÂN¥•SŸŒ†Bï þÚèûàÀ(¯BÜ!î##€‰ñu€òôFôû!ó÷¾4âïs²ßzŠ‚€AÒ÷Ú~.¤ä£P"Í(zèòÕáóoÁÇ~‰…Œ&Öé~{ˆ DXýµÜÎPÁÐð+/ýŸ ýïwÍ‘'qÊ3¬c‚b´Ó:¯õg¯þpÌ‚¥í£à6c˜FQÕIú/ò0ŒXò  <0|_ øtgùŽãw¹ðNG¾åþѬ¤þt¦Œ~Nç…KÂCûG–ã7¦¯qod$Ԟ˃æ·NZ,õ.€Kñ»­ß´jú@!ôĺÃÞ_x >ö;H<dðàp˜ýo…àS.<€!±yÌýE »Ø]íå_3ý+bqÆQå8»k[aæx£&+…óôŸ$6ªpë|ºd7ôÓ…;ÁùÁø±%2xHø¾Ò.ù'Þ]ôpo³ÄÁ{ÁÇ‹ Lí#Ñ\3îPƒƒY?´ïmrÑž%€î¨Jú¦ù>¢Æ¯{ô@eQzôàž¼û ór˜M(<01èQa@ ¿ ¸ ÏžK[á…7ãcÿ‰‚Œ6VY›¹g=ãã+÷OÿrÙ¦è4FcHFUMçⲇµ=쬙¬¯eòŽR+½¡> ûŽ,‡™ô¦¿dî–ì/uVš‹³€gª¿ØÄ@FÀW0…—Z¦„žÁÁàËKÊ?“PUíU§"߃¡ü3¹+Dòz¨ÚÏI€Æ»×ªÕ÷ Šš‘sW+¦Ïm†î m¼3åiŸr¶¾Éû)2x8Hð0ð~|y7ðæ›¹\ ø|N+´¦£«y‰Ñ?S5l1ºÍ úOÀçrš¶ÃP^båé§}@»Å0 taW†¸„Ýàöª‘ça9ë[ªn|À¬íIg°( ZÝÊaìNž3>öϸ÷ÈÐÃÁþ»œm¦V†‚OãXMÎÿà¬d‘&ZçyÌÎþ­‰ÍÄSXTÑ»Æĉ,På1û« ó9NÞ:‰2<£aØÛ,½Ó«ŠËð¬%& ˜'…¬&˯÷kHÜ(2xx?¾ Vy>T™#éã‘0î.—ìt1d֪߄»a.Pþjå® ÝÎ(ÿäp!”Ïh+ˆqØŸÒâÚ>aKœ½ôvñòP‘9I–ÜËž±pôv«  T« Ï¿)ƒ€ûŒêf'öM1qÍ#ÌÖw|X`0Ý%ÚI„Ý Îˆ£« ú?¸+±RåÜö¤ÒaÙÉüBGz+%~.ŒÚãÛ‰ »9¶Ô^;?ÈüH«ê;oûCT>´½í«(ù\ØAF÷ïÇ—t:lv€(­Àļ1PÇÙ{ë+S~Xš\·jÕcòΡÓsîÄÓv™údýuo+駙Π(¿ÖÏ×7‚ÖZW&çBasm%·Ûɵr!µ²”ˆ¯Aó®ST¹Läû¿Ï¿û]$î12xˆ_¥²‘üjäu÷ŽÅ_JùãB+ïÖß×v{ׄBœƒ~æÊ£*Ê}ByëñÙÈh—ÚÜÃD¹Çbs‚oƒXÁäý›²ëpO\­àNÔØ}t*7Ï™€†Œî5Þ‡/&šŸÊ—i€ÂJÒŠul`š¯–ú¬Õˆ¹/„­y úô!Ëgµó‡¿Â®bÍù'À«BËR•W’hb€k©j8šÔ»¿µ25/ú j ±~Û|ª6÷ñ+¿‡Ä}EF÷ô”Öúq-búm¢ 6Û*­ö¹ÓüÔ* ÑU5#1c„ŽÝÓáÈçð &åJÛa° h†b¬‘ ºèÄ*&Ù‘t:lqCA[3RçC­¯v§ˆƒ‘œ_4º5¶Û ldöý|+)$î-2¸¿x¾¬ºŸàû~ÉÑ&ý €±ìǬßoMjñBÔSÓ…@±kìœ5YTMX¿ùœL eºš)ñŸ•¹Û5èJ®©†­.(4ëÏwËÓ|Ô@™ú¬ðügdpo‘À}±ûV¨»?|/„4?&æ{?B¤6ƒkºÕò Ì,T呰9 :œJªŽé¨F§[û*eí-{ÃæVG\dž\û³ì¿Ž<Ž*¬LÿbW¸æ»à`+Hˆ”6K@/ÃÉå@÷ÜS¼`ÆïÉû*,Ø+Ïåúé‘×i`Wõ´. …¯+aëAu¸I=ì)j©=Úï¡DBûYî"M‰ŒÐËG!Ú‚k¹ ‚u>§‚G“I–lµÇwåx=m÷f©½ídؘçŒvŸ~þ ø•ßGâþ!#€{ŒÝj”ºÿæ÷„¾¤ø Ö¢’öÀx,šÙWvODÝÖ% éyðGæõ–ûCY«ëçÌ¡ïYä‡yç¸zÅýYaÖ¹\Ö”éOkÿ†«öYQ3}r؃£,c”ë¤I870ºÑ•« *µ¶¯!—Ýkdpñ=ø±‡[íÓ¥àêhÙOïcöd€VEj!÷…[Y[íFÎ.Æ_< `Bh­? ³xs–Upñç8T.?n§ËƒÉbÿíõd&]SX·J«Ñ«Ä LêG?¶p,,sµ¬{¨¨À»ß€_ùçHÜ3¤¸wø|>ûH 8åÃæg¶ú3Ú‚ËÎú³0ö Ÿ¨kå‰ù–T…ñ:±{h:æY0w–išè Ÿ0ÊùÄrç"`]H Ù“-±:'ÌeÖôµÎp“B˜þêVU«¢¿Þýééî2t±ù´y€^U¡]ºú“Ô‚—PoRж…kgåBÆ P¨2’íQ?%<ÜßoŠ‘(Ž3?¬<‘Ÿëa– ‰7ºMSî‚{"ŒzÐTR mýì•!»G4Ƕr))ŽAÎÞL §pɨLÝ?dp¿ð^|žÐûV0GØ[Î>$LŸ{­¡ØÔó©È Ô¤IZ£l=ìbP%é&À”û[a¨Iü6l~ð¹Þ¢úœÏöyø «È€[1”á>[¹Lä— 9šò¦ÑOqúÛ¿öé°^x×§ãWÿ‰{ƒŒî„ø›‡¶j·aeçŠfÚ¶Ö‡‰´7 š_\“ßkÞÝjN./Ÿô9lž¡‡¦m(é×0ßf@í[í\Â@ëØߣßP—´¡ö I‹ â8 h>Ù4¢îη ÍgYŸ~¾ÔÔÓù&Œç~©Ÿêk}(¸/Èàá½øœAíùŸÁíÄ@´*ÔÎøh`4‰Ùñ:À˜§õòÎâ]‡f1èncb^ßbˆ&¬Ng¶eô ².8pU“O+ôä}NùÙEsÂ£Þø$:,¾¶õ6Hú¯Óm žXvB¦ß׈7~ ¶ý,¶ðîOůþ!÷Ü3KÕi)'°­íÌÔlÑ,ÇÞDj¥I«Ž8~׌ƒ(['9åúm¢_h²åþÊ ‹X{– =è×Ä:Ã-áü9«úsöFüU3Ž,—§h#àæãÛ›Rþ¨<:_ÌìÂáªæÆð—Vý•&îÜ|7^€P|añ=”ß IDATòŸð}^ãCÂÎøÑ€vvfÁÏä‘®vÏÖ•Ë·ª–šŸ®j:<ŒÞ§ohvzˆZµ¶«8€OW-6„€:6úŠ|+£9?´dܽ1˜Ü Ç) þoô l(ÐòuWbNè™~¸¨ÆÃiƒ¨Â’öX7`÷¾vvÞ°«Je˜eþ[Ô¦a)Œ4}pêg*·rÛÛÃ\vojOç«î g°(¼ÈA÷Ü=¾ ïÆœìK `(@ ÂÇ/-G[=›SwÈ +ýî!‚'{«ïÐñÞÞm4²þ =åwj®ªHíb7ˆý¼âw&9ŸYÕEå(,è/þeCá‹*û¢´Zì‚w} ~-ƒ€;FF÷ýïðd¿•7ƒ$+‚6»f–ö7¾o8e"òººÈ×ÄÌ÷†jpïy·/{qtч¶Oª•Hb‚nßž‘ožinrú®-×2ñ7tÞ³û:5ôÛ Õ ae÷ÓŸ@ØP`ŒíP™ÛùU@Ü*C€{Œî߉wêVoÙ—à4V]"þ¬§Ä<ŒN–¡™}Cçg ö*åàüÞé™[MÞââÃÀ†qÛã8`%”'\ƒ&@ýïm­Pz²FŸn³o¨2y5N]ôÊ=¬_Iý¸2òU¤LWY¦ :ÞùzüÚ#qwÈà ¥ãgd¿¢rß®ù)šå/½Gzé‹!þí•îä"Î ª0FÀö®(uôÌ݇¦¶I6JpႈCšsÏ¿Ÿ$õR¨“†"x¦ÏMZ«3€vKTµ ê ŒÎÎîÉôÓWâÞo‚7ž(ŽÂ‚]|â–‘À]â;ñ€Ø¾_òÏÿ1Ë&ó â ©í0X/2úIL šª\2?Oà¨ú|³O@;w­l°úܬÏÁÂ!§Oµ5P“èïï°Ú…zÛ]Æá¨\åýõp¦Ù,õ", ÃzÒ@XÚþaòÇ?°ã¯Ç¯ý w„tw†÷àí¼ÍƒLþVÞúVG“[ Þål(Ž/Ÿ5÷búÝD«±ÈCyòØV5ʉŒ‚Ï/Y7p˜ù©þ“ViŸÅbPW[ŒP”]ŽÈJŒ]¸U_t¨fxD_žƒ%ø+?=;Œw|2~=}ÀÝ S@w ™Ôí¯ñ*&ù³•5ùSZÝÇ­ï±™&cÇÊ iy:' ú1—Ar ü|¯fF-½Ýܤ f‰ /¦QR!F.eºmÛ¤‰ÞQÿ}^÷¢ä(×þø_ÜPLó>÷[ŒTF¶×꬯ÑÓO7Z³@]GÖoÖÒÿ¶¢¶Æ7ô5áÇw‚ŒîïÁÛ¦ìvGùO‰y°=œUˆ¨z¯`î881C°÷P—µ[¹úÚ PImjÐ9a»÷ÜPóŸ®·å§Õ ÕýoQ4ÀBŒ»èäÎ )«e(`»ÚýqõÖ“Æå¢ntç"UÕÌYwEHÚÿ;^—AÀí##€;Äàâö /ö}/V§ÿEÝÞ0©ÿv.Ïî) ág.;´aA4¹ß/- ¼p\;z5Ý&Õk¦PLÝÎj/BKùë’¦äÖ’lýjv‰%ãFÄWf²êr®õä²¥ù>6#y=„¾!8]R$nÜ6¾Ÿ Lòü±ÐÀmú6þëÞ Lñw¹é“ù»vQ{RPÙ6ÿiÐJ(S¯U>hFâªæË:ùn5⼿iØÛ‚Ì·oÒ{[ËG•Uv~¶NkÁ÷ñq±f1UÍÄóq»ÄÀ”®&‰ ÞÖŽd¿gxÇëðÿ ‰[DF·Êì¾m'©üQv›¾u}lÕ m;èäèt nÒæ»Ek’g’ߺl07ºræÍJ&1–K¤ÒEÖtñ阌ÒKOæ¨^̉üâ¼ár &ø3yx:ðnI·? Š #TZ‹ºâûrXLÔ ™}év$mzýŠú #»~%T«E ‰Û@F·ŠoÃgu¦o9ü`¨áÎNƒhu¯dV®»CS Ï|IÏ¢é¹3ÕÆkxš$|CKéLOÝ›øhÃt8;Qð׆jí\•VCe§…Y@@¯Œ÷úFs¦3d²Øjaè£æ–òÓÉÃSÖßþÕld0+Ó¥ ç¾ ßþÚ nÜ2jÄ›·€F§‚e<€ÎîwbÚŒ5?+`"êª{ú±n=†ËâÃ:­õ‹Nêl^s¥ï c3/…aX0‹¬<êÛÑv+¬äOuáOö9Æy¸"7z¡<ïKC˜/Ä­ñ§Mâ¤Jnú>Þ!õ_~↑Àíá[ñOÿ ¡—²®ôÁÑ|€h0#îêBxç4ßÇSޝ¤{Hì â#vƒ ÝÊ<ˆåá‹ço<:´…ß§Ú@>©²éPÍÛÊcú_æµÅ(;cÝŽ\ `I5å@ml =b€6€·½¿ñçHÜ 2¸Mß­X³T{d0} ÐyÀÎ`‹*ÀNcô çXA5·Ã¢‡XIÈúûœ$lÈr9˰Q­Ó {ÓÚÙ˜õ; ? @Ô~ªsšøw"mšó‘é0–מÔ¹ÈñÙWÁ øNFëªW ÈƒO´˜«HÜ,2¸%|+>˜õpÑ&ñ G·ºÂÇÅBä{7¦“Í7‡—°~ x×<¼·mÍ™³×I“¨6¸Š >°ã·Ÿu¦/j¦pÿèAîÄWnÝ'5?çJ 09l9¨mNRÏ)‚îLQÇËÿíy)2xûk2¸¤¸ | Þ ²¾ÆÃ惴,v?ªršÝ=„;4}Nì¸i‹Å4oÿ ·a0+;Ç4²3åá ó$ÕsBÇù «¶ÖŸ«Í_À…:UðUÜçÐ{cô'¦œÕMB‡êkͤÙÚWÅkF%¬ÓQÞöüÆ_ qÃÈÐí ¥Oêö OOéÔñ[•-Þ¬|ï ÜQJû€=4ZI-:á/'‘ZèaÏ.9è/ÞèÈ! ÌPMˆD¢Ðûœ%̺ÏÀÂùÄ ëÏ29>T#]õÅ[AÀîô0j]j$ÞÑNr0…väÑÆt: Ú¿·5ùœ¨V:Ûi»|¹ì0èo§rú†)0*‰›CF7ŽoÆ›ºå<Çõavq†WæMU;ÒCÛ0¦ü$1‡‚ö¾ŒQ–Æòqsôrð™èÛ†nدÉ>òºÏiè åÙ˶º(hyIߎ4é:X–¸V%㊵ÊGä$ŠiÈëDÙ—t¯@|€Ïµ—ßúIøÍ nÜté§£ü{Íx-0 ó½®nÏ.8{ £P ªrÆLhsª©< ,ú½¶T}ÚDåB ÔlyFü1®ÛX|sëøVMÆ38»kRì ¹µµûÅʸ×ì_¤[6ª^i'òfp³Èàñø KÿëŸ,ø ÿ#V.F{µ”ÏÙj,“5üݱi‰þµ¤NV§¬Ü¶ ´0}¿²s.óÚæÓná°öžANvÕÊKâøš†7ÊW’”H¡ÝÄ6Ä>kLo×$| ·òAÀg¿¿•AÀM!#€…£ÿÖÏ"ì¿zÈ«‹ß~GÍÌê!1ôÞvÓ1+ò6&ÐC,§ l+1Z<»5ç¬MO »%,© 3–î *r—ѰBGí'gŸ‹-÷¯y;ðÁÄöe ëäË‘4J>Us­›j{>¾ýšE]ÉÃbK¦¿7Ü2¸)|Þ@”— ½R~)[ޝsCÚzã bü3‰,å/Qþ!­â¶Po>¿'r^»Ð±¬"…¡fǼz ²B ³ZüÓ0Ñ k‡ÎÔ¾ýÛ¾úïN†ã[‡Xí¡Ü'vûá³Áº‰t ÉãüìWã·þÊ]EâÀÍap?Ýù~2`/@Öü ˜˜v{Û¹y«Ž)¿ÙÖÍ ÚÄ·Z«Á™ž`1OµMÆ¿În:ãÈÛM>o¨Pí5KeÕF­ciqõæì¬sÞñ%ONë·áX; Ìîñ©€ øù‡:?äúóÕ+ÓâX»Gt4°Ä5!#€Á×ãÓWôd•e#WË1@ïF½]øßÿ5{9œ¡ü½•0å¢ ®Å}ŽïWí9zR·PÙêD¬?Ú"d0˜@è{B³[!Í„ŽÚ/ÂQXúA ;Þþ{Iè@‹L™øn:ä>£g lm¿Á[á³^…’AÀõ##€Â’þo¶²ý´BʿӾ¶7\7nè ´ß_Õ94sbßÙ#óyL ÆeÊî=µ‡³ÜÜÛ°%Ù—ÚÀÔí ÿ‹3šqXPãjµf!C_†¶«êŸ¿Õž µO:ŒU=Éô°Ì¢(€'~­NøEµï§ô?Ät6O|a@Ð{åÍ¢3¸5dpýø:|ÚYú/[¡ÿ¬y‹¦ÿ¤ØAJðY:äzYè0åWáìÑß®N®ogʘm.dƒƒnÃÍo&Siþü°²| H¡îýÁ ƒƒMwB¦pœÆN¶º"ΧWß$òã‚¢iÞSAÀ_”xdp8MÿË ÿ]E—ÙÇƒÑ ª¶_+ ™W"Ó°oé–Ö1lÀ"2€þ⣴ɂaö·Ý·ûbu\¡8ÖÌVEw/SÍéá´CJ߇ÊcØ[yMü[ÇÂîy4Þ ÀݼMËÎçv %ã$ô¶#ûJzŒÙݪ„‡ê J¯¦o¥V·Œ®_‹O}ú/aQK6ôMÍz9ÙÞ&"òz;yQû@(LÜöP£&yÿHÍgü-I÷=‡Ã0W7Sž(Ø*‰w|ß)_ø£›ÉX~E¡HšO®ŽszÖèÀ`O€AWºä\ð–OÄogpHpøZ| ˜dÌl·‰W¥}œÇ0ÍÈÒs¬Y1“P¢NB™3¬a³· —`ì2y é¹j'üZß0­2ƒÓ\œUÓN‚ë «FYìuå3µêZ±ÂŒó^·'Œ>©C/ÿ¶[ÈQØ,&à&H-¢¼~Ö'â·ÿ&jâ*ÈÐubèe3g€¦yݎаOµ¿zÚ!\ ³é›ÛŽÆ!¿Èþ[¦äO1 AfÝj‡ÌO¿LäÒ*ÚÎ:ê+h·›56rp#©}ì+;«êØÃ°íLn —£w~É¡‹ ì7Ö†ƒu4žÃÏw]®QÑ cO MìwÖFâl}—Ò.Xø©ÄU‘Àµákðz&ã¨ÇôŸ+£¤4íSâ.¨E™)h_¤¦­è4ÇBøäO§óìâHÏô[÷ qñÃb Öoh~Ø4ìð­\ç¾jš8¤yÙìßoa|ŸÕ\†gåVèv‹Ôü®pÆ$ó!yñ_dë›Äù H²}¾å•\2¸6ìô¼-Óìlv|뿟N¹í&­P¸CR@û¹Ḛ̀:šéó_z›@Á¨Í…ÐÑYåˆQN«qL<$œp³Á0†ÇPx¥ùEl´‰!jÛ¶³Ú{Œ¼ŸÎñ}R¨@¬Cýô¯EOPÌqôÑK |*¬s5·”·T?£l»Zí§–c”é>qÕw˜xVdp=ø*|rñô<j¶| Zðš)˜Fn h/‰ÃÄï9$û˜ååEß)!‚› žÍ%Lš˜n‹AMs' þ$˜oêàÃ…]®¦Ëø˜à[*îŒßU‚°³Øî;—ZÝÍÆ6˜0­ <å?#ÑÃÏ|~çoƒ'.DF×Gÿé/zúíáˆJ¶tá†ï+ —í¼ôã_A|’ª…׳ñá߯ëÁTy&É”µq:1m†Ó9ö¤^·šësˆb:Ô¶V`ÜÐ.*Çrj°6”ˆêo`»ZÇýÇ@ý-–ë w‡-ä"M•ý¢ÂX!loMüPóÃHª©ƒŸ¾•²ÛïI‚aýÁÊÔÄ3!#€kÀWⓉÝG8Eÿ•»Ûÿ6 1ì6Â2,ÐÚ fê¤*\Š­Ýûž= Æä}FðWã ¢‡X^ýÊÎx¨gñÖŽOçä0ô˜ZÈñ äÃg n$¢fNå^ùeFµ’r˜Ã7¿ÿ4ƒ€gEFׂZb¸|Díç’Ú¶6¥;ü—yÎK™ë>}ÊÄ·ÿfý* þåM¨)8¯ã©mL9bžCÁÏåM·G¬¿²ÎÐÐ&»X™þA40ðQ´«½ìì£Éìá/¾×à ædßÉǹEMƒ€AØIG³üÚ*’Ðbæ0ñlÈàYñx’Ú¢‡žþOvoSÌé¿}ÀL8 !$õ]nšG„ÝsphoÁ^B´£8`ØÂë(a­£ÊFŒVYt¸j#}ÈýC›^8+J'œöìò6ïÆCMöq›g}rÔP]4]œ,üow1Šúá›_‘AÀ3"#€gG­2}»Gã8^êÓY¼“´ßDR' a¨!È×ó„òBmZ× ×tþL•g†íŒEª¢4h2Ñ^¥ˆ¾VoYåCÞoë$0DÞf"˜QÑWl)özm‡0«&iLî®X¬xñ £𸋠ü¨æ±‚|UÃaèD6œ/mm«FãO\ˆŒž _Ž×bpY2¯ 0µ7™|æë:-@44e +vXGô”¡»€@GÜåK–=Ù bTMÖþï'ªQÑê`AÑb¥ßùDÒd? ò3¹ö #a‰-¯zȵb&§ÄS¹HÅigp]øŽÃSENÿò™––ˆEo~þÙß#OœCF×ý×¾=¬8ÞåX<ÙçÝßšëÓPŽ* ýïâÆ/%ÚhÃÁÑPËÜ2IƒÓ/z¼ˆ°/ó™¾1²ŒAÚÁs¢~2k™ª+Ø“ò³g™*Lût”?büaÌã:•‰ÌXâ[>3ú³ïj®oØ·ê(MÖ» [¯]ØÜ+=ý[ÌWK) ÑO?œŒ>q\_†× $Ùî%.Ýø*ý÷ƒm\lÝh`x½ëÝG,ŸÑù«GF¸Ú~G{¦HdžÁðÜÆÚÐFî*ì»eü¹z‡àM/Ï àÊHpE|é°þÝøtÛ  WKèg€!™î£My¢Ëž ÀÙw?+-ú‘|Œ&´øz‘ SÎ:ÎL_”ö)z¼ ‘­¿,¤šÒCØ*t*Ðy`­ Ënƒ:Ž{uÏWÅ•á "g`^Zù½loL4 mã­ ZÃÒ…oz9~7}ÀU) +cûSí}Á<ØUÛf耞䙃¢oƒ¨AÛïbd‡:ý¥l‰yXÿ‘‘Ýà_"ÿLÍ,­TE—¿ªÕe°ÛÜ{,ÖJ âx˜Òd»©)Ú <4­f°÷Y}+þšá…îìq:ªß¯06ôJ¥q¡?¨ó*¥ð yiRÆðݬ¬|7p¶´uẽcF'q%dp| > Ât_—•3šoÔ†Ùr'äÞ,yçb¼`”ŽíÜ/Ÿ‰å¶Õ "9,ü€±Ò|sêp[fCÉiH–æO¸ÿšõOÓAþÔ,ñ´·¨ôxÿ×u»6å®ÛGÅTy¯=“{aý³h’KŸGLJÈ+¬…o|9~÷_ q!2¸ ˆã+Ó§Í*Ü£a{¡o’ݤ-ýjˆþ°ýØx{úO!àä°úpˆéêœãÇ´ÝØâ¶vh¬QÃ`Pøj´%ÅÐÆ±{K:‡ÚØqÛvЩ߇ïÓž—¿fØP 5´Ü?˜æÍõTÑW4ËÝðu/¢_ Ž«+:ƒ:Q>ÊöÌ$þ)0U3ž#q 2¸_„W7þJÄû?çƒêÎDH[²&7·ütÂàòÖ’‡Aðb?[í|é'õ<WUM¿C7Œ&ÊLÇswá¾·8¡ïã€ÔVÓjµ÷ƒHlÉVÎ9ß!sz'«G¡3P75.Ë?¬ÂˆòKÄ`4]dPºð3>¿—AÀeÈàêë>•v!¿ìŒ¾6«;ž+`M´ßŽÂÒÿnÙ˜û÷"èý0M0~k\e~ÄL>ƒ*â°Þ–P—ãG *¹­C`„`üinAtöÄ%Èà2|!^å6zÛ>ý»_”sGo}!úÏÿPC:ÂÔû/à¹þ1³Qò%E€©u¼¾.uÂP ºs-v†¨ˆÏU£ÑVh‡ç 6>ð—°—É^±5ŸÅÜaWýpÔemÐǩڅчõËq“(ˆœvä<“BÃOT=¤æ»omµox~ÿ_Æ—“ˆÀÅ0?n ÏÐüNm@04s/"„<ÿu@ÿû/‚ QIc?ld€¡E¦OáÚÞ25zg:–j)ZfÉ®Iû±1éÁ. ò.íÍÚ"÷õL8¾~=ÊýeªzŸ¼„(­ßŒ?ºP߃¹”àhå-Âý$®´Ú_duB-ˆ?ààÀéObŽ .GFàïáUP:®¼· ~ÚÄÈ[¡tC× ¼“p| lKÏôÍlJÈâÍÊeðá:>&¬|+Ô@¸z5+t6°”¿°Mï“D¡«hU…åŸöRüaú€2t€-Ö÷»>ìŸÅæsÚçö‡lv‰@qÿØ©­ìÏng¨1àÛ~·â&£NóÏp¶ œ5c(¡Åòj­o6”U‡Ð;lWVmWæ‹‘=FY3žã­—®ÌðìôïD &áC™ CüÙ0ò ¤O,t Â…PÇEa@jj]•áï"9ª2Þ¹„T¹ÇÇd°ÂóxÅà”þá/K‘‹ª‘v¼†Ù+¾ ˆÆ¯ÂiÒþ‰6„榊Å3…(˜ªÕ¸UYÔú¢‡Eôm‡™ÚüÝÏ„Õ Á_*ËFy p–]°æõ3çÛé‰âò 1[—Êy+²ßþ‰ù>ä v‚Ósy—` ð)/Åe0EFkÔ€õO¢´Ê9ñä­ ¬¿QÃþ—n–„.hÕ¨e…®c¯|pPûoˆÍŽÎMS—Ö\˜%¡Ô*~ ­abOŸÅ0ŒæÁÃY|9‚Ï}ú™^)@¿Ö¯àhúwoï37=ªÕ›yk†—VýØ+¬žv Öô/\ÎR~•Û×Èp“Àøá&Lñn¼ƒé+?tvÊ›ç³ÁíhpY­ žƒt¶x"ÌpyR§œÿèXÓÉO=V½¾aëÚÊ3ôxÀ5ƒ@¨¼HýK»å1«ü`Àtè»íè²ñŸ­pÜÎ,¸”£jqËCìž›-üªÜ&¦Эâ¸U—ÊKñGÿÚ^d@F Ô¬¿ÉQôy®^mÕjkãÓ–øû˜0ã4/‡ºÑpK:7›6Ø´š«¦(!ƒ}FŒ®00ÆþYZ”è,–n{ ìºïú•Ú%¡ÑðM+n]©t+­LCþ’úéy0$±V6´õ&¿ÓÌa|Q‡LÝD/îbÞ·¬ˆÕ–ÙÿbÎnø{Fv´òòD„Œb¼/W¦ßÊí(XTººmXú/*¶µÊmÈ`›7aq’ Ÿ€Ñ›+äë;"ÈÕÖ¹ÚÁ* Ý\–™þ!÷gùFo5vTvIªœ£ò>I-þ3ú³õ^mî:l×\åÚ?d¸™[Ø- ¬•¯|#>ξbÀ{D³Îë_Š?Î @F3„›=¬£N%¥ “€¢/êµ­<öŒÃÐa cã†~-FgoIJ«ýŸ…×HîŒÇàõmX.Âðd¼Qï*¼;ÒçõRëõ?Á ¨u;6ü·ÒqÚ&ˆ¾£¿)F‘‡ñ‘•žRöH>5å¶"ì±.uÚa/o ]‚³ì¶° üQíšõ³WHDÈ À;ð "_Ч¶}+©W…ɪ.œ`ýÑañÐ(ßÖª`ô'5k CŠjÕ¦ò&qk‡º¾€vÅMj¤|å7ŒsUÒ$Ø?!Ò?”;qüªozç¦ï”fu¥‰éÓlªj¤àkÉdUͳgöÝßx…׿’A€EF*ózÞ±ÙÑG?Ðy^m¼>JôᅥVˆc‚¦lI=+lëU« ÿÞ/Ël=ŠBîCJî‹­O'ѦŽes:àõ+”ÑÓD?[$ 4„©r‹{†1Þ_,õá24,à&°Êæ+ÑKPf=%þîšf>h·ü>‡ÜÕ3k®$þpß ¤`}À¢jÿ/xJ ¡ÈÀâmx™áõLmÍÎ òQþSÁМ°~bó˜O´Þ$Ö0ñAë­‰)ÐõËø‚B,/6­ï 3’7§¦'²“ªz¤s0Àm¹ÃHÇ÷ã4++xC7•‹Â4—17nd§-àê]`t\ç !Ù‡¿°ÅB 6Öò›Zúä½%‚n·Ï×=‡?ý8„ŒŒ,ûÙ€ 1ì*B”}UÝäY‰¿<¬ŒV˜¨‰ 0Ê•Ê62h‡l—ÆïB)©±5p(äæ³XÁW™V| ê$²Ô>€{À¼‡u“1Ãí«|³¥o0jeñç|ß@åÅôÄüY—µHБ`Ç[ðÒf‚†µV¾Ñæ‰õÇèÁ9 Ñ1äÛ÷á |s)z'ˆ{‰ÃSÐ`â”KØZF|Kplz×g³ð ¡AÇ$X ­ùž•ý!d«Ÿ Ôж‡æÍQž&ö̃ÙúŠðdÁak=—„sÇR~ˆe·¼¾wrÆ7¼æ9üyú @ÇkñÖV~·­\œd|bÌŸ†Ëµ2™â(ÀÅY+ã'ØÛ¸ªYA¬ð%.a?ªÖ˸„CÉ",°^Áõp(´]#ûb'­cX›{ûPرc4Ïùˆ:=:0Ê Ç†‡|ßUÅ”¿«]Èú‹÷ 館ðf¼‡V^äü9ÒãÆN²;ÑÃ@™•˜w{ǼŒºS»ßºtÖv’ º‚KÐñ9…Ãõ Þˆoç¾.ÓÏUq@p¤ØúKÜ@“¸LŠé$4÷Þ …K‚…¹ŸËÚi&4ßòpBÇ5ãû¾@Á‹®ì~±µÎþùIÏá/Òä2Іí£}M'–»>LuàÔ Ï‹aȹPI2Ì/÷Ù„¼­€]詇U%Üð“-a?eõ•Ç÷ÏÝ‚y•KÔd±®=]SÒn.ÚÝ)½C»Ôž¥5Ÿ)°­o£÷´_YÕ«4µ #Ê®bòèuÊ7xÖÜkÓ¶³îŽ·€ÖƒÐÊÃûp9=v |x˜íZ9z¥ûø(‘Þ„—( œÏ,û­öqúñ¯)ÿ™9ª ç¸\Ìf@NbO¼ÒwwNª¯¢k«“¶ÓÝ¡'ÝŽŸö…¡‚·ÚÖ[²ïIý̲£¨&N»=Dw¿ »Ú"êT}cfÃß`ÏQ#a¤6Sp™ÝŸtÔŠOzñÔ]A:¼Ï‘‰Ì·µõÅʽ=T5<Û€µíÎa˜†­ÃÃ]B}'±KþOø†Ù*Ï3ö}ê-`çbÓï{F<ÓËM¡±ÝƲ¯r>5pV焇phš•wª=Í4§ÁÂêÀ¡éŸºW˜¸{XƒÚೞÒ釙àiã3té'”žGÖ¿K¦C¯ëÖ4| ,²ºÖp™í{¡jc—ç^¡XáY+_fÊö~b²`÷W’©éwÌ}JóC¡ëħþÞ”‡Æ=“)Œs°ò§àZ/º¿àìòÁá$ OýVšÖ¬²:è›Ê±ðÕÏ=qðÔÀ«Íâ°5/¦j’ÿoÑ„aŸ“ÇlCO^Hmú¤1Y2ÑÙ ë GM¤ßE$³„ÅßðFʆ\ú%ä%Ð:DðsRQÜaø+\ Û…¸]áj\«š|ü¦o\ör¹œ\V÷¡Ð^Ò\ç*8ñT@5ÿNÆsdú©…ëñ @í§¾”ŽA>µÛí—`6ˆWøñt#€O£äÏ ùyÕ XyqÊ&á3 \ ~âÝ¡ǧÛ*|Ûy|à §˜þº°ÈÕ~%g‚Xv ½Ö¬F¨úÒI¤ikå|€ P¾raµþÇZ¸©Å‹Vc®meG ç¼Ð:‰3F¿éÉ}sÚ} ëï„MóUýDÝÀuŸêSÿ-#®ÂÀÖ³q7fpâE\fe1ÍÌ—‰ZlëÉq8[)Æ=pAòçüVq®0õ uÕjZ{õy`wÒ‹ÊS—`4C;>³ì<6UíUTÌÈCæ??•Ü‹:¯ZOÌØÃÔN}À$/´¶þÛç'>QðDÀ+£u>†¹›_âdm¨} 8°ïê9Æ ìyGs­jEЬ ™°µ^dMóŸ öµÅIÖö] ã.œ·û¡ðjqÀÅSÁܹ×ô#¡!øÞ„¯ ~'‰È®ú³…²upP;.“R M¿ :v>Ë™€Wús»¿EaÕߤxx=žÛ ÞpÓa1 3j,Uû¸6ëz^ÛÜ•u (Â2w" â7ì)Œ•÷Æ] Ï4]̶õ Vl·Ü)¯fº=X ´(ÏÝC i®À…p·Ï€Ø2{'¶³–˜Ã08X‡A¡òp~*«…@›ð•å ú€§è^áÈîÔpŸy<8z8À*G.¡ÊжJí¤õÖªCç¸C«àNì ¢‚9ET( Sl@åCÊïOT}í3–µ[oÍyTÞ‹v…̺0NT×Ês/^-¿q±uEñkaâÂè}ô01÷•[]`÷Ufý·ÂߦxìxŠ<£»àéãsØÙÀ8y®æ Œ‡ SKÓÕDMØÖGÖœ•‹kâ„vç,øqÁ ƒíÞ¸°~gïLÍ8’S1Á¢lºâSøió5{ŠkxòëÈ7„¶}r¾‰'àºÀ+8ÓoOKF_Î}9<¿ø‡?«HÖÖÀ+€¿Å““s/'£jx·5âæ3\4khv:xTxö(›t\\îçÖÁÍ,»÷QÁ>qv¤DV{Öƒb+_Ân} qðHð¢¬M¬KpÊdôÉÚÍŒþì­g¹6qåÜšë‘oj^̲ûãò¦µá28pŸ5Óa „í!á¿Ã“ÂÓr¯qæ1´È±(¶•“ÇÂβÃÝàiþ°ڲÌmÍéV{Bpó ­üäÂôã `Yë…†æ›ûÐIPÕ¡K”Ãp!RcÄh!läÖymåb ø”cÓXüS+U›âƒS>ࢅ@Új;|yyR>ài9¢ÿèó&ã†f  +G¥ê˜ò‹í]¬ ’þiXñ¢O-‡&~bÙ‹×ôÆwµ04Æ–º,Ô<‘‵3˜)àzR@0VÈü­DÌ} zŒ1¶ÿ{çº39nQz1³ ‚¼ÿÃæ¦ýÑÓ¶D)ÙÝ› ö9@ú£)JvØ*úÒ·ào†«úìŸ gùæû/‘§KòÉç°yF÷‡¡&*1€[ò÷N{”dûQfö‰Í,¬,N ªŸ„ë4ª‹¯½!®2x]¢ûE›ßMßâèj°V¦ÏĨúQØ{´Ðzûì[M6õú…?Á &Α’…úAUõYˆ4‚B÷­ëÐmèõ->ÍZåŠè»Íá3L/ß—åw†ßìöd¿Ý°÷€÷`æNÓwÆ«=‡$ëÏ[þ~0Õúc±¤¸6ƒQC7=½nÔrÿŠýy@97•þ ï®xqè"eCû"ãRZ˹ºlt#?qެûºßGå *V×|ÂQ¯ˆ¾Û\zçsþYß~ÀÍø›Ò½¬%å¼,=ºë{0›Í׸‰¦.õȧþGy×q_ßGWzÙ æÁÜVÊäϾ ^HŠ6_Cج†úÕ⎲•ŒëÏ,AôÓe}9º$úM%ËͺÙïwœ}±Õ'‚¾ªû–«3û¹Ù?í <Å~&ý«Ôâ¡{v¥õbâ(÷[Ü…›¸oÆCê‡ÌÌ?Ÿ©¤Üɺ;ªXÐ%+¥¾î *)Ÿòìƒfú`äÉAÑË¿WÓ±Y:$ÝíË+žLšÙ6ù·ºŠ~zêÑ£¬–×ÿ…虾 ‹ý¾ +[müƒj»Í¥Oq‡@üØÀmøkÒéíùØZÿ>ŸÚöƒ—˜¹ë1WÚf<2•?¦ìãAsµ+ºâèHrÊ7F›µNŽgI}o ÙÅâTê¾F4Á2)Ž®ŽÊœ¶ÿrÝVärßbÍzÐkËFÇd‹C3ÝŸ÷þ{ðc³Ùíy„ü¯÷ñ0þ7© ëýç¦æVozmŽò®ÅýQLãA¬“×B¨ä°KhM2]gEî÷ ©¤Åó›=#dŸ^²^” ˜(ÿ¾g ©t[ÖË»s3i!Ómªî>‰õÛd/ßW'rßò!ñY\,ª“nq àüåÈ[Ѱ«6?Ìî–Nê K'Š—†ö•q–…«ŸÝüL¿þX|¾‘?=e“•úêé–_šD%ý‹—€lÀ×ÉxxC Z^Çâh:Ež ¼ÿøÁð²Ï´éO=mˆÝ×ký¢ÙÕ¡¡÷Ÿ¹îÛIõ=ü0û·Ý››ÀO3ó £}ì„hêc~KòbMq}›ÇÔì6À¸¸ÔñA¾ƒ1Ăᾉv×£KI5:¹ÌtKµÞ ±Ú *ßÉTé•…„±T?]NYI&O5õ§Ë„^ì¯Vy‹GŸÿ¸ÎÏ=Àë¾¾4´º9þ»Á¿™ýÇnÌÍ `ÿzµH½6U#\áÈšäåâÉŸñú£|ë·÷ÛÊ Ab nìA{gAc “â·¬ÒôÃB§.ýŸÚÔ®‰»Jö ®uÌ>yiÊTíE¡ý;¶ü!öo ZäA–ߗ$›®Õÿ`ÿ§¼¾[¦K®£U¯ N›úq®¯=ûäO^ Š·î[Évòêþšøƒ©D|SÉt͉Ü'ò­ókZoùu?”¯ÓÊdU Î[ ÐÚ'T¶‰hö;]iùß;ó6#=£‰MHKˆ¢ïêWt_µî(£ú7³-ùìÜÙ~{¹Ø¡é«@»‰Bè9¹1t&·BÁ(§–]ñæêu_¯jÒâ55wfS<Ý’ý×xÿG7ÕýwëÓÓ5E…uô”Ú ú¯ó+)EËò&ŠÏ“M%Ãù†´¦>>õ,Ðü@SÉЯŠMõ“`YGnk¾õÁ¸¹ÉúzM_{´¯We[V³¯sd”ȉS­ß\êÓ€¤àr²ûº@æšÇ2g!B¾£š'·|Íæù+—“J­„(ín]Y/ÐÚ9lÁ †¥[^ó¹îÿJ6=úõ·Û@ÄNÜKsX­ò€pµÇ’b_¹…++å³@iǼKc5ûž¤Iø`L ±SçK³®éþ°æló;N ×t볚JªéGÖÙ¢þfö°ÒüfqWsê¥@¦’BîUË_øÁÊI€kç/‡È’Eþ‚Iò]¬Öòb¿`>ÅUú§k¢¦G‰6à*…ôEçˆÃ‚©vOWËôkÅ Âïõôú ¦Áʦô‰ôóíE‰î·qÓäæ3Ôßb¶Òþ¿>71êµ¢SbÙÚûä¦ÑiÎý(LOì+ýÐêI@ÿ?ñ½Ž5¿ÚûïñŠI\Ö}Sÿ¤»ËdrìÖ?çcMU âÕ‚ø,¿Ûéab\%|±ÔQœ.IÿøÿX?»‚²‚Å7E/n>Fýí9` í¿ë~Ô†²Ã ¢²¿#)÷…įøA?*âdÈ­yCÝÎçq÷Q&¾'½aþv —WSbe“›±ÞÒû½Â0Ô”sŠ×<ô­ùâÂ*š(èçgÊ.æªýµ$%P›òžA×þû;ºÞB2¡wÉ¢ø<ÈlÖþï²ñ< zôùæçÌl¦çûNõè'^÷ðrÍ*>°â_Ôý˜ù²œª™‰j×ÿ XÊ>Û,ÞáVkŨò€ó¾x­Çï?UÒ_>z¶úÛÓ Àf …X;AV¶©bëEs8WŽ!ió¥Ðÿ/OVâdÁémÞ,nyM6¤…¾0ŒPCV†N+~\Ó©ðbÅý”î[ý;€³NP½âÂ-–ã´ %ùîÏ<ïÎ!òö¿jðûÑÖZUP }å ºßTRï÷1<Ñ,iÿ‡Ñ•›ÉI@ú8iò£°aº; ˆßøw¾àöD< zìëÝôl©¬f©àBl£F‡2=ü¨ûf>ã ž"$sû!a'߈W‹3Å7¯ò¾‘ÓƒI„²aÅúÞïä›^èÝfÑþ÷ŸÒ<ê“€çñPØíÿ+ân±2Töûò#ûìnðâIÀTè7Y·p­ÿÄ/Åc›h½¨ +¤¿“™iA\³´ÿ‚+ɺ÷·Ð×­¸?šÊòö_Äy°ô¤¿Û,*t¿rÁ#yºX¢ï{$Ľ˜Ü§ÞdátáÒI€?l-îj¨_¡¨ñKýi=~·rŠMTþZÆ ]¬T£‹Rþ'XÎU^FhÿÅеö¤%ÉÅö¿ÿ\yöÿ©`f±ýß?7]ûú:ïÖôI×òOOÆL_ïãnQ/ô¶zøÄI@^S %qz Û,,!jº_s-S8;€JÖÃøÔ!N¶ÿ}­ã–X?h®`Úþ;íÞY88¾ÅB¿ú`BLÄ#ÿGeìô·X䆂ÜÛ¸-úÉI@¿¦îôƒ@ë“w@¹îOýàCݯ—jùY:zA÷cÆ-žjôŸy`^–ý,w·ƒÔÊwÀÅÀ5òÑd§/6§‰fâÞÏ-*>çÌw2Ž~¶IEND®B`‚moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/one_familiar_triangle.rst000066400000000000000000000023221470420062000335260ustar00rootroot00000000000000.. py:currentmodule:: moderngl One familiar triangle ===================== As with any graphics library guide, we also have a guide on how to draw a triangle. Below is a slightly modified line drawing code from the :doc:`previous tutorial <../first_rendering/rendering>`. The following code draws one triangle: .. rubric:: Entire source .. literalinclude:: triangle_draw.py :emphasize-lines: 35-41, 43, 51 :linenos: When you run the code you will see this: .. figure:: triangle.png :alt: Triangle :align: center :figclass: align-center Triangle As you may have noticed, we only specified three colors for each vertex, but OpenGL interpolates our triangle and we see a soft transition of colors. At this point you can try out the fragment shader, for example, let's draw a lighting effect: .. rubric:: Fragment shader .. literalinclude:: lighted.frag.glsl :language: glsl :emphasize-lines: 8-9 .. figure:: lighted_triangle.png :alt: Lighted triangle :align: center :figclass: align-center Lighted triangle Shaders are not very fond of branching algorithms and operations such as ``if (condition) {action} else {action}``. It is recommended to use formulas more often. moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/reduced_triangle.png000066400000000000000000000130021470420062000324650ustar00rootroot00000000000000‰PNG  IHDR{C­ÉIDATxœíÝ{¬-WYðo]yX!@@!P‚jÊ£ØRª€X­ƒÁøÀ`Ôàƒ@4`0_€Qƒ‚K@°¡”‡åY,A‡¼„€`! {üãœsï9ûÌž=5³fïýûÈ—›ËÝßž™Ìú¾µÖž‰æäD|;N|»tPÌ J'å¤EЍJg¥œ(”qÃôÍ”ª”ªtÃo–ÎÊа³)E$»KÀ.ºqúzJUŠ*öš€½tFP€€sZ\Ÿ¢J©ŠT â´ëKçS3ÄÎIi±7ósr È\»IÀn¹i|õÔÌÏÑ núÕÒÙÁ¤tì–”UŠ)j‚ÂÙÁ¤Ré`:7/W'b‘¢J±*ˆ¯Ü¢tš0;$¥EíÔÿá@Àî°À®¸e|±vê9¸åKg Ѱ3Rµrêÿh  `GX`'|w|¾:UŠEŠ6Aü÷­K§ £Ó°Rª"¢J‘R´ 4ìÛï6é³ûþêÍ?KA•¢úÜmK'ãÒ°ýRTû~ŠãADMP)Ø.s¶ÜíÒ§×õ-×öÿþgn_:}‘€-—¢:\×·\Øk`»ùÛìôôÉÃüìœþÉÒßF¤ÈakÝ!>Þv§1ˆOܱôWQ˜b{¥ªí„Os0}æ0 Ûé{ã£K+ºý‚ýß…ý×J!ÈOÀv:ò˯ºÝŸÍÛ@—Ö5l%‹Àl¡3âõK»©.Ø ÜR°´&|ƇK'ÈOÀJi«ËùVÁ±^AÀöѰmÎŒöÜôÙœùÁÒß 2Ó°mÚ¼õ¥_  `ËèØ*w÷·zëK¿à®ï/ýý 'Û%-NMÜGÎ ¼+†­£`{Ü=½÷HÍ^»Ã'Öµ[†öÿ…»¿·ô·„ltlÕúr>”óµAÃÿñ €­árfKÜ3½»öy>UŠÅÀàø¿ùž³J]ÈÀÛସnÕO½2l=6›g]WúC¦€Ø)-²oú\À¦Ó°ñî׎²é³1ˆû\[ú{ÃP:6^J‹#mˆqƒ8ù'e¾.d£`³×,Wè}wvÛUœsMéoƒèØp©jU¼¯zô¡ÝŸÇƒµ &€f(ì~ñÖöïw¾û³6ˆ·Ÿ[ú0@O:6Ø‘·¾ ú•󭚆c§ `séØT?oþÂ÷,A¼å¥ô¡`S­*ÿ§4l(éAéËõxêÿæ÷!ï‹ß_`¸ú¼Ò‡:Ó°‘RTËõxíÄ}¦ßýF]p8ØD~ÀæyHz}ïÇø¬ý•oÏ =äõ¥ t¦taÜW \¶Í²û³6ˆ×]Púð@¦€Ø4©Z»6;èç]«f“Ú¬ Or ›ä¡ñš†•ØbÁ¡”âµ+} -›$¥ªa%¶XptÙ6…E`6ÆEqEÍ¢nËEÚ1ƒÃ‹ÆqÑ¥´¥`c¤´ˆæê{Úm «ºM›BÀf¸8^•åmŽcm=\üªÒG ZѰRZd{›ãÒ³ Ó©w¼äj4làñŠ~ïnlx¯K«^¡]ÓP<⥬§`¤ÅÚ8G]½i84¦¤ `þtÌÝ£âòæB¾O…ž%hnuyé#k蘻ý½ÿ]ªïRÁ‘.ÄJ³ç—ÀÌÚ§—Véè³zÆyŒO× eJÕ?>¶ô!„•tÌZŠªC>ä1>y(tÀœ¹B™¯Ç¥UŧõïxÉÖ+¼ä’ÒêYf¦.‰Ë2.Û./¯øÏÐÝŸuA\rYéc õL1S)-2.ÉfØý9 «ÁÌ“€9º4^Õúñ ¦¢Ÿ`ch›ß‹ÕeQÅ¥/*}D¡†€YJUÃBn ¬ÇG 5ÌE`fçññ·­6}–ØýÙ{?èâDÄ ŸPúÐÂ:æ'Uݪכּ?Yöƒz83¤`^~&þjšw76#%óÄÒNÑ0/)U1滣M0ZšfEÀŒülüeË }ºr>k&‹ñ‚'•>̰OÀŒ¤Te|Scžr¾Í2C»l½+†¹ùŽÒ À¾ŸK^íݲOÄr¢:±2¨ùûSër[ξ8ÞõêÒ"tÌÉbe_;_wÛ.MCþ qQ¡¶E€™Ð0 ¿ž¼dÎ^ç jêúNIþàÃãÚ+JrØ«² ¨_ŠçŽû‹­R ÈA<ïÉ¥<»Î3°÷à‡1w6q|ÆéP0VJ~Æ è(ì—ã³oµÌPÎO’RüéSJ~vš€Âö^ù›kI6r•óMCÆ•d(È"0%ýJüaËÝÚu×<ëÆ“ì­Ïö~Æ5W–> ì.%¥´hù>–¡ú)ˆ½ÿÙËù ð»0fH@1¿ÏÉVવ§ †v!)ªso»ªô©`Gé(&¥ÅÚ¹mÐò± Ñ6ˆvA–´5”¢ Œ§Æ³‹Ôì§‚ƒ²ýdp¸Ÿ4“œo}]éÂ.ÒPÈAùß©0ÏĪÇ6JI@: øÍxÖRõ=ˆÆ WÓ-xÀÇ[ÞPú´°st°¿÷Õ|ý€4ž F)Õk³Í”¿&€é¥Ò °sž–~·ü<Ÿ>ÿÂÁ°$«g>½ôÉa·è˜ZŠªO|¾~]­=eДdë&f €I=#=#R©ŠUmPe R'²S¤ýàÇÕW—>EìÓùxzÿØÑv¶\@ž(Éóÿb `"¦€˜Pª¢ÜVËæ©˜Ã3NÅr‹[B™yG&òÌøí"k³UŠÅÀ`ò´ãiÏ*}ºØ :¦²÷Ö—îK£7†fn&I[À4tLá÷â7²l¬œé~Ð’Œßzv铯öÓ0…”ªèû6Ç8Ä©``ž'Hk²íñoj˜€€Ñý~üú¤Åûºz|`0YÚñÔç”>ul9£K©ªâøõø© .µAÔùÛˆ h›ß0®?ˆ_ÝKSÓfü½`òÂûÇkß^ú²ÍtŒkÍK' âdÐ0_?¸iÈh•€ýQzÊÀz¼S0i«1MÚÝ7®¼¦ôidkéÕb}©[;qƒ©+ô¾Iš?Æ£`,’žœ§R^WÚç­Ç³¹’¼èœxÍ¿–>™l§T:¶Ósã§ÞXÙúãæµ´ÝÇÅ“Ÿ_ú”²…L1Šýw~µ›T‰ì»?G›ù‰CÁH»?Í1S@ä÷gñóÍÓ5eöƒvœ™Ë¦Õ½àâ³ãŸßYúIJmtä—ÒbÔ2¼ÿ²íÑ ±Ì%mM£ÑÙ_Ä“&ÞFÙu?è r¾\ÚÕÜ;^ý®Ò§—­¢ ³¶¿ü¶û³¶fŸ¢xo~:ô°üý.Œ‰éÈéñÄìÛ(£–ᣦ=4ÿGÜ+þéÝ¥O2ÛC@ViѾ ^S §•A¿¢{¼ Ú§=øã4d¤ ›¿Ž'¬}ßz›`šz¼kJÙ~ƒ60¥Gþ@¼òßJŸj¶„€löÞúûÜ{9+ô1xÃ~þ”†šrI¥`K¼0ýt•¢šÃ »ÿw™´ªÕã_Tú„³ tä‘¢ªMy/W¯…^Ù¸¾çhY}Ï'ÿˆJÙF&.%2ø»ô“ÃËðy½ qöùW—^Vú´³ñtd°Wþ÷/u›kðXôü¸1^BÙ˜dCÐûsa8»€êÅé'ö&Æx ÎòÆ›£8ÞçfL{¬OyÌÝãò/}òÙl yI˜I’5ÙFM°÷×4ôf §—Ç#÷ÊÿV•r—2¼_³xÖFdÌ¿UJ/düØ+&:ël=)ÿ§Ýý9â{%[½&s¢1’’&€~l¥WÆNº±2ùŽ—©Òñã.93þáC¥/ 6€>Ú¾õ%W ü¬Mà šƒˆå9œ‘M=èèìÕñðN@nY¼*ðÛe’=˜¦h•ÒOÝ9.ûpéKƒ £ »´è´TÁ¹—mcûA;f«  +Ý\‘¶¾=(ÛO¥*ôn}É ³­;’+ßHséñ÷)}°Itt“b±¾@NËÁx»'sï%v®É¿ùH  \™.¨FÚýyüvÜ7ˆ™íþ캒<(É+/¨.¼*ïIg‹hëª8¿Šj¬â·v`ðˆ¡é’öIÆUçǯËtÎÙrÚJ{ýÉ]w]Ú=92õyÚ”ó{ÿ~¹øx-hå q^5ð­/Ùš#“Œß¨C‹Ð±{èÄ΋‡¼±ÃÙeWh%¥E®…б[„,IÖ¦=EŸ)IMmXïêxàbé¹ÿµ÷Ü–³“æíJïˆVÁýD—¡bM’W?0ô¦Ágž-g …Tµ©‚÷oC«‚8Œ²H»"XS¼OØF¬ –F¦Æ`mÚšÖ2°Æ›ãÜê`ùwPñ> ièTg.Þ[ÎàðE†¶o>7ðÖ¬×ÛÆÀ{}«x¯½Ÿ¶_휸B¯ r,€tH543Ðämqßj»?WÍÉL[m¶ÇRj&Íím÷û_Sðúaæ 4ÉðÖ—ìûAÓ‘`x‘!Û–)M›­&€µ ¬ôŽtv•o÷çtÅ{Ö$1a1üØîï8»:çÚ ®6‘€•Òñ_~ÕÖ°}ï}±ôO»û³Ì’òàÝŸ=aõÞ™î½8Øý¹fš;ÕÑ6£Tï—öx½Îš õ Õ3íwÞ»ºÏ»F¸FØxj\g-bÑP{®/Þ;Vß³ÛÚ·õ‹ôn#⺳â^ïï‚aC¨‘~÷;VñÞ|cíñô›‰köè“dÉCš¬SÃÀ²÷Ä=šËÿуڻX¬ $Ù"¥ãA©M«ñž{Ä=ß[èšb¦ ³ôØŸI‚æºx¤!˜6ÛæIù“Á½Î  ý5Àn0pÄûânû¿üêR}büz<{0¨0Ÿ0ÉSÙ¾ïnñýïñêaÓ8¢þ—_ë&—³5Ÿ›qÙ¶oJ ÁÐló·öIj8ÌÀ)ˆ»T©ê·üKAtÆ-‡Sc¶+Òž2¥6Am¶Ý>÷w‰»þG¶+† gà””ÙŠ÷1{…‹÷IzÞùgi#4œd`߇âÎU»ÝŸý+åæ;lÖ%å±jö©Ö½Çk#ªÝ9ÎüÏ®—[ÉÀ¾ÞåÙÝŸµAŒ‘d¯Lö‚¨ mM{ DD|$î´üÒÇBÁr9œƒh 2çÖXV7g;^¯Ó3øÈ⌶¿<ØV"""-jnmQ ˆ®MC‰$øsÛý¹¶ Ñ"âcéŽUûÝŸ«op‘/ÈU˜^Rîšm§ c¶Ë™|ìŽÕ÷}<çeÄ2)ªåäêS´ü¦ ÖÝFãà¶Ø”ÿ"‡ƒLÙ‚`×}"^å[þmY¢ßO¹\OÒFdû"¹þÍOœ^ÝáS¥.<æÀ°Ó>·¯½õ¥e9ܶö\{cm?sRv?èøIŽul×öøÔíãôO·ºVØF€–öÞøYëÊ®ÁáSdbx’¹S:y´ËöØÿv–`w}&n»ˆêä}!†Å‚ºŠ5ŽÑ-ÈžÒðlKä82Ägn·ûlûˆmbØ]é`ëçá{ÖeøÀJy&Û(û÷¥S:~H—λ&`gvÔçâÖ+ùU[áöšgˆÁAÏz¼W¶¿ÑÀ6bÔã_Ó|îÖq›Ïs¡1k€]µú…ïõAój¼Ø~A÷l§Ý”üFcf« ØM€]ô…¸Õþ[_rȇﰱÄheøðm” ÁmÄÀ…èX5?6$øÂ­â{¾Xî’¤ À.ªëK÷‰õÁªûi—2|Œàä}s}]\hmvè!Öýhv`ç|)nQÚýYÄ…m]Ó0vÐ!· SÊ_Î×kSúÒ-â–_ûòcV ;'¥ªå„ÉtÅo»6bh=¥áÙNz×wMÀ®1ì–¯¤›í¿õe¯ö<Ä‘`Ê*¸mñÞ|Û-‘RC0“ãv$X¢Ž_¹YuóÿÉyÁ1o€Ý’bÑ­æmÑ+”ÙÚ«ÂÍû&h#F=þµi³S ;äké&‹,»?»¯m©p‡§ÝL÷r¤Ýás¿v“ê¦ÿÛå²bƒvÅõqÚ"Þú2°®ì8æmÒŽæ öƒ¹íþl95üsãúÓ⻾^ä*eb€ÑëÍUð‘ ùÆZüé7‡g9VÝRgÛ‘`ÝXÕa6©k«¯#¶‰`'|#nTÅ¢ÛT@Þâ½cÓ0v°2É¢)¦ØýY{Þ¿q£øÎoŽt52€RÕû&¥v6¦40è™Ò˜ixûl=ÀöûVÜ JU¬šLˆ5A±ºxõ­6ÿaÙ$ãàHÆFɦù¥oÝ nøC/>æÍ°ýRZÄex©ý §JæÜ¹õ¯”su…ûªkC°õ [n©JUžâqÔØ Û\iÇ”­R¾)  ¹-Rœ0 Àÿô‡2¦ï„ hIEND®B`‚moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/triangle.png000066400000000000000000000243051470420062000310020ustar00rootroot00000000000000‰PNG  IHDR{C­acTL´-é fcTLèü»º(RIDATxœíÝyÜ}ëxßñï%N…àÄ"b<1EÔPŠ5”‚Rœ"¦( ŠÍ)‚ˆ¥† ÔP$†(55$Š œO A(N©ÙÊkïç·Ÿ½×^û^kÝõîõy¿^^Ï÷çõœçY÷µî½÷º¯{={Kèdú‰ì'¥(æ,¥(ÇSSú €bxÀBE?25²FgùQécÊà e¶€¥áKtVýPjÖ- Fgýaé# à‹s’~ k¤fÕjÃI?(}\@n¼`¡hÌ},Ë?Ò÷“ÚËþ œ­äÁyµô™5¦Õ3þn…Y9›¾«vÛ×´/èûg/}˜@&ì`Alý¥'ËÁ|ÇRœ]ÿ¿»ï¿»ðÝs”;L ö°¶êó7ëëý6´ÍŸc¡äQùÐÂ"œCß1­V¼‡Ã9¾Sä ÌX`Ìšf€º±€úSÿ¯³û |û\¥ȃÀuÝõ :X öP¹séLu½ñÃáp®3³ P - ÔìÜúÖàÎÏÖM¢gž\âÀh¡n}oü€ŠÑBµNÖ7Çt~¶ÂÉßL{”@9¬P-SÓnþ®vtÇ VÌnÔé<ú¿«O|7MúÆyË H…jÕhàŸ}ñaXöP¡óêëýoù98œ÷ëÉÈŽjdë›vßî-àæŸî÷Œ+1 )öP›óéï4÷5d?àë?WhL@´€P›}·uZWX½ ¨u…=? ¨“Uù9}µçã#„¿¿@é!Ѱ€º´ÝE¸ýojÁ õ¸€¾å®ÿá«?_h|@dì Ô—#¼ñCH¸à—#6P- T"Ö?ðæXæ2jp!})yçgëþÑ¿û…2Câ¡„zdjµ`:cö~A_œø©/#?+æKÎ5D öP©Ÿú2.sÇDƼ]XŸOøg_‡‚¾x‘ÒÆcófë/E0kLaÌØEôôë鞟žý€Ï_4ï hØÀœÙê¾ü½ýzë ê ¦U{g3ôíä)- ÌÕEu†ÆÝÄiëwÝ CÈQ¸èÓÇÁ ³ð¾oísô¾pl`½wˆCØÀ,]LŸЦOÖ¿º‘tÆ%²Œˆ‰fɬЦOvö€yaós }F“ßË!r¸ÄgF (‹fæ’út™†O@ÐgNI=| "Z@˜¦LÇ7‡@uhaNNѧ\4|ö…S>5h8@Y¬0'9?õe\f„ ‹Ù¸”þwÄwwHøY1Ÿ¼tîÒ£°ÀŒ4Úý.˜ ö0—Öé*ô–ŸƒÃ¥O=L 'V˜ [ßücÚ2ÞóÓ>ãï ,0 ì`.£oÊüŒ—Ý0òWŸ~¹"µÂÑ LºAÓ6‚Bä÷Ý€gÌSxw9ýmÌ?Ö ¹ðõçÁ¿|úòã±÷~êËÐîüÁk§!}m€)XÀµËë£9úõéöþöŠe `~]AíïÎÇí×ÜWèßi¸ÂGÃÇ dF ~µÜcz8eÃñÆàÓN]I“£™“%è#¿œ³t@ Z@p­ü|Æ€OÌPxôËúpÌÛ1ýÍ•S ˜‚=øÔ ¾çÒwbnÂ+ëƒÃnµœIЇ¯Rº´À1ìÀïÜà?°‡˜•ðå*ú_¡íu¹¸ÃçÄ­>!û¼jú¡Ø€3áoü`]A9‚iÕÕÙ AûñêLG Ž\UÐÄ{.ÃÿF·7¤ú{ã«~`ÿèÜXÀ“öS_´z"Nû7º;éíSt“á†Ø€WÓ_•ìÎçÜiøÀÕ“WÀ ^˜5‰÷ éÎïé×óÙñ¨{páêz¿4¬Mد߸ïßN¾¯p"\ýý½Å2¡„ò®¡÷%ìá” =ƒzÿ5ã—‚õ%z°Þ0⺻+´OÈûBÚ öÐMõF÷í°~‘è åo+¼éfÉÏ–ŠrqcåN0ë ů3)0¿ÊÍô†Á7ÿ¤WNŽóXxãͧŸ`/Hâæz}©¶‰R?#Ônÿ$añØF"”ãÆÊÝÐÄÛûíâ H„=Äw ½Nñî§< šWèïÏ=Ønñ:±±@ ͈‹kK}?¥«0|åDÇÌBd·ÔŸ)d£uOˆÒ1÷Fçu¿‘é,bh!²fN=}žÝ¡ýˆ‹9…˜~C¯í¾€ur?åÜBG%ÿìVSN°‰=Dµï¬+ l‚×Úk±­Ð½‹D ÑÜJ¯öÐ(w¢çµ·Î~nQ'öMÂF¹æÒmoÓ1›Ç­õߊwÌsÞÏSr˜&½ú6ÓN ±€hF|êKô`AñƒiÕÌ)WÀ~¬Ðkç}ß&Ý¢n½¡ÿ›êBû½/L*òÖoö°Ãß‚¥º—þÓLÛâÞBÉšôœ{9ýXVØoʧ¾¤h‹kN¡m˸ØðÐ=t»·ž­£V²“ñ6Êž`³»EõÞÏÐÅ –ç>ú“ò‹r=%Ç;èÙ§öŸt,- tjŠõ+RÓê)¾??ÎØE ÛNÕ³\4.­Ÿû‚ƒãLN}–€ãX`›ÍôS_ÖÏwSï°ì¿WÕÊst¶0)pÌ}õånƒì"¸ zæý¦OTƒ¶4 ¹LŽÚ&L”¼«nñBÞ"[ØÀ ÷Ó3”þ6Êΰúºœ°þ’;ÜïÖX`Cûƶz²èÉ.®ÍG£·à{K÷ =ÕC§»#XoÇ`½!fq¢„=UX6Z@Kg3}ã‡Àv‡â„öi3rÇAÀÂ1í!úC½]¦òS(è)¿oBafhÁA/¢TðܟɰdÌ‚åú=¹ír4¦êÃÖõ~hppä9Šó‡Ý?MP3ö–¬±¨r·ÁF7ÊKyž€Åâü/ÔCõÄ‘ÅÙƒ‡Fy¬·AO~XÆÙ/ØX(ç÷Sª¦î¼J†KÙ_¢‡é?„¶‰åà :ä8݆ð‰ŸB¨{‹dí3Ãêñ߬+((˜Ví…éáðqº &”=è€w¦ ªG hq®Ó4½§ÑVß:áç¶Âú‹­ÿÿž0þ=ü4aaX,Oû©/Z=¡t†öad°pè‚‚«íêÿþF,‰þTäwõïå°óp0µwE>íƒffÀ²˜5á­äò°ƒ©8(C‘møQaØXGè ÒòQPžÐ¿p4×0¿j?â ÂbØáoA©ßÏÚpÈÖܘ{'cÐÕ5‰PZ@ËÑDk&x 4,˜¤€à¢±‚Ð"$ôX=ZÓ{ÁëW‹ˆ!ÂQÕVû±K07á- š%º{R“Û 1¯²¥us#zoZZ@Ujlg!ßþÆ6r òl}úƒ—²w†®Ñ¡>œØÚÂlÝãÞ¼gñ*í ¨ - zœ¦‡{é!” ¬/($”fÉpÚÃ…Z°¨‡ÙúS_Ö vÓ²ÂÁ«ûhÁÇx3×VÇ‹Œ ØáoÁ´J=¡|)FðÐÀ‡§=P˜'VóÕĺlÿ±º¬)Ä(NÊ%EˆTÌgo–ž®ß.ÞÎöÚ禨¡ü =à§OldF hÆ\ô܆u/Ȧ‡âc™CÀqöæçuÿî«ÔD·ˆTF^ø;8r·¡£\¿ý aVؘ¡}oü`]A3íåI”0~!VðQÒˆ'bß¾fÄJ†y†î³u;åê8Wˆ9Þ"¡t³ùþÏL8û{3“ð6Jy NÜåoµLÒmo`.8csòLýë¦tçwØ!³²0£²ß÷YÂL°0+#>õ%z° ¾Pø8+ Õ–“² ³A h6ž¥S•³q¬/ÈÂ~¡7¬ y¬c³Šç‰ð¬S…™°ÃßþD÷ɹׄíÄÁÁCƒ¥h¨²Ú:õÙû&3ü 4e\È·ÿ0½{rPÈ5(Ÿ!S‘•{t˜ÎÕ <[÷Êz‘8pË‘Û(©d÷Àïóœä LÃÀ ØúKΰúê!ôî4¼Õ²¿)Ò'0¤©@È‚gœ%Uê²QÃ;¿eB‰âP¥ âÜ빂cìø×˜VkêÌ¡}î˜AhŸqJ/¬Röçh¹ö\ÝÓKÁyl¶4&”¸óðÜ{ ޱpͬiWÓ¶^VŸ"L Ûõ>ŽjÖ¡}êß ÍàY|ìð· çé_Ϋá›3Œ©I†à£8îÊ~çwOq”Æ À±)oü`Aµ…‘5ÉÓg/]œÕÖIJ N±àÔóuw)o\³ j’"$o¢oŸãùw\bàÕ¾O}Il#L¹Üë íB”µ8C 81d©î*Á;ü-È4|·ÃúIjz(?·¡â"ßýO'?2- w^¨»zéif½ABñ±ø ýº€3R~,[á…wœ¡äŽi}ëgñžÆñ°:<[-ç·ƒ…cqÚç̓¡ûDÈÅz¦üàœøò"ÝÅÅj}OÔŒ>†0£Peµõ[/>ü0@.¬¼iÔqW4´ 6nÒ‚ƒa¦&) Œ)²Ê®?Àöy±î¬u£Üm(ÜwPÀ*õ„ñÅ , ƒ ì /¾³à+Wšñ×}¹Bû+ÕJvPƒ¡Xq䥇§|à„xñÝQ¦¦}ì rÐí!PäâE¾óKG>N- /®ßË߯WM È>ŠŒâ8.¼T¿ÙØjÜ´º¼Úû „À°®dOpqœ³!•¼ãË„ÒØðáàû¾™š£&ø|ºá9ƒI v8+rOð1p'a»Èÿ¡<+}ÐËtûöi¥¿mz\À†ýZÃâÄ ¥‡éºÈá?í7_ž÷¡†mì”×ËànP¨â6ÊqÁCƒ»ŽpnÅI(ìåú›ŽmÙP²”½T¸ý+„rØ(mʧ¾Ä ¶T&®@©²—«¶œ”](‰PI¯Ðí²¦Î×ï:†v±vCù{®vìQ~àGá·ʱÃß‚4^©Û–_€Çíµä±àà¨j UV[·{•P- ‚+¾Ú˜Vme[?=¥ÜU°õœè'Š,/Gg ¡Ê_Æ«tëŽK¹Ù™šA¡ô» ‹­¤nûê"Ä…c  [©#¬¾†‡Q îY‡øÝyƒŠ>……/àÕúçîòzƒ¤¦¾©8Þ‚‹Úz=Yºõk„¼Ø(¢‘¸{²7X¼£ÈŠ\Ô6ÅÉš\dA (·×èVŠ×åX}%t†õŠì¼È«&Økn%äÅ ;klµX_CM»=æØO#lÕvH%)r†"·Ïø[áØEFvø[ÏkõëšÞ-]¿Zl†?¶Þ ©| ÁiH1oõçA%Ä@ («8ënÛ^º.ƒ­þ768‚Û`odÚõÎçÏuËÝË¥´aÊ•o]–)à¸ð믲` £­î†`½AÞƒIŠ’pPðQÒÑÕÎ:o…L¬ô,ÅëtsåiË ù/òU¢ÈùÃ-ßñч}ØÈáõº¹‡ŽmGØÙN84>tv‡Ç…bÅÉSäAAãÃÌŠüú› éÑÊÁÔä^Agè õ67ädÕ„®"[@ëæ(”ÂÀ€ (sroÔ¯¹XSgRùc¨#,¶’ºÙ_„<Ä0- Lʯ©³‡öêÂÉÁÌ7œ(§ƒƒÉ•Në/tÓWpË 25ƒƒã¤Jnƒ~íMB2ì¤ÖØžÖmº`ë_\<5|óÇ[P%'!o•5NèMºqÐÅ]š \Z"W\䛾9⣛ØH(ÊÝ{ã‚“n¾@‘k/2R º©¼Yÿ¬±Õ2ö@Pª ·Ã¿ºŽ¬€ÙË,½ñ[„ØHÆÚ¾šÇ}Áº‚¦† _]Gè,`o0­ž}¶ƒÈSä®i6(Œ/ - $Þ¢I“—Û=A‡Ãø_½€ õ3ˉàà¨ü†õ—ƒÁzÃøcxË„X$aÖHjÖÓ7~° ¾Ð.Cj +yì*ÕâUЬ/lÎÉ饆 ˆÍ z«þiùŽín”¦‡[$¸()EÎnø6!*V „wÿó„ö ¬žP¾¤û‚ƒâD òPÒ™ŒˆØˆìmºTºc»ú·Ž‚2…þ6qHHR¥Ì՞ωHR¥qám7¢²Ãß‚`o×õË/“}77\ŒÅ Úûƒnð!Z@q5V|™œ(XXÐ஫à-*àQLÁË ¢DD (šwèz.–ÉeC@sÃÅqº ³kËä︞ +€hl¦Ÿú’3¬Æ.ÆaЪJ.Æq@,Ô2ŽwêŸ4ñZ·é‚”©QÛ|T`F“ÕWœë¾K˜Œ@,Ô/Ž®ÁË‹JW²¿ÈŠ Ÿ¬Ò•숂=€Þ¥ë¨Äm|CÃêë¬CÀ0)rÝE¶6¼ë:Âd¬b°Æ¶:Ý»!âÕÙ„pì8çJ"g®¤v±Æ4Vúfïݺ–"67×/ICÌžc 8ÕÌÀë¼gäã’hMwpMmƒ‚m¥ G^mèm/”?¼âÅI6ç¶…CGŽÑ(á$ïѯ6¶Z´ö‡„—T‡~õrB¶ X'ãu ùZïÆb`š°÷}3­Ö­I‚m„€ƒ©5¤-rgÙ} ¼Tµ•gn<a<+}3ö^]cÐbõ=§‡ÔnåœGãùWߟæ!^?öFzŸ®¡÷®ÉC>àœa~ÛûãÁUÊ"'b‘ü}×F¡4ZcCÎí?,s›b7XXT¬à¥8™CÞ"·ÁÖs·?Ì®8‡âñWú/Ëdçkó9v¨ä<ƒ®þ×ÃÆ 4…‹er‘ ¹Q~P™ÃúKxðÕó0Åì¯uµvÕÙ˜ÝA£®à<9UšsЯ|@‚=€Òtl=¤˜ÁÔhp(^ŠÜÁ‡Õ=/E¤€¡(Û0ÐUÚ'¬öñSMÐðKÑ9öÇ)rýE¾Ú?T…=€aü߯7"8éᎿ pÁEI+-òîQ°>¨ÜØj±$¿Ê 5£@q89¯ò!! {C„½ññ`]Aî°AÍ(PœÄʼnLÒN6:!- PÒ•¥xëîõ#ðDPÉaPÃúËÄàb,‰‚• ó? >te! +€`[Ÿú29l_Yoˆú«—ÖÏ/Bñ±Ì3¬ ¸'lÏÿ¸Ç€¼ù°®$5qàí?ŸË:B¼ƒ©5 +rg(=„¹„¶Þ[¡X‘?|%]ù#Â!¼1kµ;§öp{B‚žcˆPäÒCpLR¬6}®"£{‡}DW”VW+qÃêk¢à€ó›T)°’C®r%=ª4:$:ò\Q8„ÀÕ[µö­s'†„MXë òÒ'g(]ÉÀj{œ¥SÂG¯ +~LØ€ƒÎ$¡¿ƒtT,ÈC•¦‡r iÝ/åŠÐPŸéò W¾s E›.*0½€Áã]¥žP¾ÃÇ./ìÇ  ©ñÒCp¬-TÊ+8ÃR§ .†é8 /{}\—mFüéoE¡}ìô…öñ5¤Ï0./ÅøØg›dëç»þP¼¥ÂÇ/«Ë}BèB è€òkØBÁVÿë /”o‘`ñBÐÉ*=ÞRû°èö ]¦±Æl½œ4‹Ùœ¡e6*}Œ—"×Ú§þá—ÑeOvð°Ç¾7~°® :C¦‡kgIÇ…¼ÅQ¤©È>&UžÑ] ìà Ã麔½ñƒ×Û('•~lÇSqâ“4}èôKé2ŸŽc Cä¤õ æ/$©IŠ"+wp1ðé3°Hбsb+€mŸÔ/5jT¨¢ ¿±Ö`ÃBûŒp,hXð2ðY…’•üä/éRŸ6ð°£ô­ŸÛOXE¦ÖÐýQú¨j &isn<áZ@Ç|J§H…—íZOÖU°°Pî€ç¶‹¬ÿ-á(XXpTäO"l`p§uÉ&ö§¾Œ 6bÇÌzƒƒAE,Ž"…T)OµÇÌÒâƒúô%uÊgI¼lj§èˆ^pôÒ¯/Á*Š^œˆ¡tqâ†TS±tÀ^V>«‹WþÆݫꥤE.]œ¡•Ôô;,g>{q]âs{[<ôUË rÒ–btH6ÞÁÂBªR¸h±¤ÏébNºÿ~ƒdÅ/Ü6‚‹š8î³ÉIM܆Ï]L?C‹Ç @«‘$[¿! c3¸¨Ig•œ„â¥ð„Z@:CeQLZ?¿Œ Ň0Ÿ`£Cé#ŸAh»šg\T‹Ç @fëO}©ú~¾XÁ¦ì=ú‚ÿ@‘S”T;¥ÀÒ_>¯_ì{ãë ZbÐn•…þ’VQö¶NSÂøç;pXöîr}þu‘/hÁ–þ0éf{åÄPøÑî ÇI0IË®E[ôÀta)jWñ`Ðø`nB„r{Šã'$¯@¬©˜!ì'úlP®/\X ¶ì@þ[?m#h@È}œnƒÅ ]EV¤à¥\ÅOÖÀI^¬€KµÜ€/êBô©/ÑÞ»÷:ƒ g}"—+ònëF{8ÓÃ/¤ ÿi¡- /éB…[ûÂþ5µ‹ÃólP°¾ A¡ôÀ݆䭛¸áKÒ"-t`jr¯1'‡ö¸m÷^Uî^Ýx$÷_xÆ >ž?´Ï›‚ƒã7…–f‰/_Öß÷­®Ây0¨ZCîgÒã-Xoáàè¾|AýüW´0K|XMÔ€«<9x¼ ýop |Ž!ëÉr0ÞDÁ$³=öÉZ Åí|EÐúš:$”ïN¦Ö4×µ€Æ;ºJ=a|M܆ðâ|åZ˜®šÐ ‡õ4Réîdî\o!ÓÉ*=Ì)¡üìÊFL¡%YÖ ÀWu~µïü£a‹ââÛÜ!°•´LÒfP±à°8±Âô"»˜]™g²†„¯ž_øšcY- [Ï Ó€ ¡`«ÿmGUY È#CÃóx8úobA+€¯é|šÕ«½©#xX±Î3´N\Iù8ªÊEŽÚçú­ÐHúÚùtþ¯kôpø¬+ˆWr\ð1ºéÅQ¤p¬È>Fç?¨dgX†¥¼|]çѸ7~XÌm”ƒ¢?n ŠâÌ.˜¤é;_?Î÷ -ÀRö²v•)˜¿ZÀÀ"G-WÙu QË5zÚ‡0,To+€oègû>õ%z°° ©AÆR6V2e‘maPðRÒ!o‘3 ê?«ó|Sµ[Ä À¤O}IÚƒŠ´àõ2(Ÿ"ϤȫŸX|,;ÓºÕßú¦N–⯠s¬ßu8”‹û`65‚ë°þr0X‰ΤðÍ“U»ÊWßÒ¹›üŸú+XoÐ*”?NÇ!ÎÅ©±8 ǧ¢ö/<(|ëÜ:ùLÕ«ò€v~¦X$öÏõÁÖ+ zXfhÿ1鉠ô<„¶–S§b†h Õ«æ€3uÎoü<<&‡Ÿc˜ZIC(ädJ9YgžSçþ¶*Uó€­¿D«¯Îƒ……!Ÿcè.N`ð1„ÔÁÂÂvq¼…á4…ªTí àÛú™ÀO}lJWÁIHVœÍ*ÉGY%sRž,ŸŠQBº*}ûgtÎï¨FÕ¾¬&‹âž`ñBW•¼ ³Ž°¿ÈŠ\ stè*NÄP«:[@ßÑ9ÌVkÃÀåí¸ ÂúËnpqxu„õм7Xª°z&ùÎ9T£:W¶µ÷k]¡øŠµŽÐ>Hö„ò‡WG ÈYBûŒ¿ê^ Tøð]ýtÐ?XoØÿx#„·’Ô_dªmjëÔ$“TkëÆSµ¼N|÷§uöï©.¾Äyã‡àN7¡?„V»ôqRœÊB’KÕ¦¶=€ïélÒÖá `]Aƒ¹ µÒT2i‘óg¶E}"”"|ïlªKu+€üoü`½ABî 8 ¹º"oV[ûCîRT¤ª€ïë$ûÔ—t¡ÄXž9Pä‹|ÔÌñR“¾’ÎöCÕ¢žÐtRªußÄPbMíbà~Š|2XoPw(¿^öºÛ¥Êu°î`ꛜ¡×7ãBÁšüè§tÖkþ*yX=Š‹Þ|¦²ÎrŸcè8YŽjv¡ØóoéW£†=€ë,Z_/— %»“Ö²—Âè( ƒ£ò¬7¨TðPœ×ðäYÇ  ±âKÂõÕ¾öBÙà 8m°õ +º«ä$¸9Y^&ðfðQœ:Ìþà'R¢O}œLÍŽ°§‡; Ĩ’<”ÂsˆQ䣩¨iÁKMvgr¼*M ?©£‡˜ìÏç(¹!D×”IEND®B`‚moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/triangle_draw.py000066400000000000000000000020221470420062000316530ustar00rootroot00000000000000import moderngl import numpy as np from PIL import Image ctx = moderngl.create_context(standalone=True) prog = ctx.program( vertex_shader=""" #version 330 in vec2 in_vert; in vec3 in_color; out vec3 v_color; void main() { v_color = in_color; gl_Position = vec4(in_vert, 0.0, 1.0); } """, fragment_shader=""" #version 330 in vec3 v_color; out vec3 f_color; void main() { f_color = v_color; } """, ) vertices = np.asarray([ -0.75, -0.75, 1, 0, 0, 0.75, -0.75, 0, 1, 0, 0.0, 0.649, 0, 0, 1 ], dtype='f4') vbo = ctx.buffer(vertices.tobytes()) vao = ctx.vertex_array(prog, vbo, "in_vert", "in_color") fbo = ctx.framebuffer( color_attachments=[ctx.texture((512, 512), 3)] ) fbo.use() fbo.clear(0.0, 0.0, 0.0, 1.0) vao.render() # "mode" is moderngl.TRIANGLES by default Image.frombytes( "RGB", fbo.size, fbo.color_attachments[0].read(), "raw", "RGB", 0, -1 ).show() moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/triangle_draw_uniform.py000066400000000000000000000021231470420062000334140ustar00rootroot00000000000000import moderngl import numpy as np from PIL import Image ctx = moderngl.create_context(standalone=True) prog = ctx.program( vertex_shader=""" #version 330 in vec2 in_vert; in vec3 in_color; uniform float scale; out vec3 v_color; void main() { v_color = in_color; gl_Position = vec4(in_vert * scale, 0.0, 1.0); } """, fragment_shader=""" #version 330 in vec3 v_color; out vec3 f_color; void main() { f_color = v_color; } """, ) vertices = np.asarray([ -0.75, -0.75, 1, 0, 0, 0.75, -0.75, 0, 1, 0, 0.0, 0.649, 0, 0, 1 ], dtype='f4') vbo = ctx.buffer(vertices.tobytes()) vao = ctx.vertex_array(prog, vbo, "in_vert", "in_color") fbo = ctx.framebuffer( color_attachments=[ctx.texture((512, 512), 3)] ) fbo.use() fbo.clear(0.0, 0.0, 0.0, 1.0) vao.program['scale'] = 2 vao.render() # "mode" is moderngl.TRIANGLES by default Image.frombytes( "RGB", fbo.size, fbo.color_attachments[0].read(), "raw", "RGB", 0, -1 ).show() moderngl-moderngl-773b733/docs/the_guide/getting_started/triangles_draw/uniform.rst000066400000000000000000000057651470420062000307110ustar00rootroot00000000000000.. py:currentmodule:: moderngl Uniform ======= At some point you will need to make a lot of small changes to your rendering. Changing the screen aspect ratio, viewing angle, changing perspective/orthographic projection and much more. And in many situations it will be very convenient to use :py:class:`Uniform` -s. :py:class:`Uniform` -s can be specified and used at any time during rendering. They allow you to replace all constants in the shader with variables and change them as needed. The :py:class:`Uniform` is initialized in the shader as follows:: uniform float var1; Changing the :py:class:`Uniform` -s value in ModernGL is very easy. For example, setting the value for our variable ``140.02`` is done as follows:: vao.program['var1'].value = 140.02 # or (using `__setitem__` shortcut) vao.program['var1'] = 140.02 If the variable type is not ``float``, but ``vec4``, simply list the values separated by commas:: vao.program['var2'] = 1, 2, 3, 4 # or vao.program['var2'] = [1, 2, 3, 4] # or vao.program['var2'] = (1, 2, 3, 4) You need to list as many values as the :doc:`value type <../low_start/shader_basics>` takes: ``float`` will take 1 number, ``vec2`` will take 2 numbers, ``vec4`` will take 4 numbers, ``mat4`` will take 16 numbers, etc. Let's consider a case where we need to change the size of our triangle. Take the :doc:`original triangle drawing code <../triangles_draw/one_familiar_triangle>` and make the following changes. To change the scale (size) of the triangle, add a ``scale`` :py:class:`Uniform`. In the vertex shader it will be multiplied by all vertices and thus allow us to control the size of all triangles. .. rubric:: Entire source .. literalinclude:: triangle_draw_uniform.py :emphasize-lines: 15, 21, 54 :linenos: We set the scale value to ``2.0``, which means our triangle will be enlarged by 2 times. .. figure:: enlarged_triangle.png :alt: Enlarged triangle :align: center :figclass: align-center Enlarged triangle Now let's set the scale value to ``0.5`` to reduce the triangle by 2 times:: vao.program['scale'] = 0.5 .. figure:: reduced_triangle.png :alt: Reduced triangle :align: center :figclass: align-center Reduced triangle Uniforms can not only be set, but also read. This is done as follows:: scale = vao.program['scale'].value Also Uniforms can be written or read directly, in the form of bytes:: # write scale = 2 b_scale = numpy.asarray([scale], dtype='f4').tobytes() vao.program['scale'].write(b_scale) # read b_scale = vao.program['scale'].read() scale = numpy.frombuffer(b_scale, dtype='f4')[0] # `numpy.frombuffer()` converts a byte string into an array, # since we have one number, we select it from the array. In most cases, directly using :py:class:`Uniform` -s ``.read()/.write()`` methods can speed up the code, but constantly manually converting variables into bytes does not make sense, since ModernGL already does it in the most optimized way. moderngl-moderngl-773b733/docs/the_guide/index.rst000066400000000000000000000002501470420062000221250ustar00rootroot00000000000000The Guide ========= Consistent learning of ModernGL. .. toctree:: :maxdepth: 2 intro.rst getting_started/index.rst functionality_expansion/index.rst moderngl-moderngl-773b733/docs/the_guide/intro.rst000066400000000000000000000110501470420062000221510ustar00rootroot00000000000000.. py:currentmodule:: moderngl An introduction to OpenGL ========================= The simplified story -------------------- `OpenGL`_ (Open Graphics Library) has a long history reaching all the way back to 1992 when it was created by `Silicon Graphics`_. It was partly based in their proprietary `IRIS GL`_ (Integrated Raster Imaging System Graphics Library) library. Today OpenGL is managed by the `Khronos Group`_, an open industry consortium of over 150 leading hardware and software companies creating advanced, royalty-free, acceleration standards for 3D graphics, Augmented and Virtual Reality, vision and machine learning The purpose of `OpenGL`_ is to provide a standard way to interact with the graphics processing unit to achieve hardware accelerated rendering across several platforms. How this is done under the hood is up to the vendors (AMD, Nvidia, Intel, ARM .. etc) as long as the the specifications are followed. `OpenGL`_ has gone though many versions and it can be confusing when looking up resources. Today we separate "Old OpenGL" and "Modern OpenGL". From 2008 to 2010 version 3.x of OpenGL evolved until version 3.3 and 4.0 was released simultaneously. In 2010 version 3.3, 4.0 and 4.1 was released to modernize the api (simplified explanation) creating something that would be able to utilize Direct3D 11-class hardware. **OpenGL 3.3 is the first "Modern OpenGL" version** (simplified explanation). Everything from this version is forward compatible all the way to the latest 4.x version. An optional deprecation mechanism was introduced to disable outdated features. Running OpenGL in **core mode** would remove all old features while running in **compatibility mode** would still allow mixing the old and new api. .. Note:: OpenGL 2.x, 3.0, 3.1 and 3.2 can of course access some modern OpenGL features directly, but for simplicity we are are focused on version 3.3 as it created the final standard we are using today. Older OpenGL was also a pretty wild world with countless vendor specific extensions. Modern OpenGL cleaned this up quite a bit. In OpenGL we often talk about the **Fixed Pipeline** and the **Programmable Pipeline**. OpenGL code using the **Fixed Pipeline** (Old OpenGL) would use functions like ``glVertex``, ``glColor``, ``glMaterial`` ``glMatrixMode``, ``glLoadIdentity``, ``glBegin``, ``glEnd``, ``glVertexPointer``, ``glColorPointer``, ``glPushMatrix`` and ``glPopMatrix``. The api had strong opinions and limitations on what you could do, hiding what really went on under the hood. OpenGL code using the **Programmable Pipeline** (Modern OpenGL) would use functions like ``glCreateProgram``, ``UseProgram``. ``glCreateShader``, ``VertexAttrib*``, ``glBindBuffer*``, and ``glUniform*``. This API mainly works with buffers of data and smaller programs called "shaders" running on the GPU to process this data using the **OpenGL Shading Language (GLSL)**. This gives enormous flexibility but requires that we understand the OpenGL pipeline (actually not that complicated). Beyond OpenGL ------------- OpenGL has a lot of "baggage" after 25 years and hardware has drastically changed since its inception. Plans for "OpenGL 5" was started as the **Next Generation OpenGL Initiative (glNext)**. This Turned into the `Vulkan`_ API and was a grounds-up redesign to unify OpenGL and OpenGL ES into one common API that will not be backwards compatible with existing OpenGL versions. This doesn't mean OpenGL is not worth learning today. In fact learning 3.3+ shaders and understanding the rendering pipeline will greatly help you understand `Vulkan`_. In most cases you can pretty much copy paste the shaders over to `Vulkan`_. Where does ModernGL fit into all this? -------------------------------------- The ModernGL library exposes the **Programmable Pipeline** using OpenGL 3.3 core or higher. However, we don't expose OpenGL functions directly. Instead we expose features though various objects like :py:class:`Buffer` and :py:class:`Program` in a much more "pythonic" way. It's in other words a higher level wrapper making OpenGL much easier to reason with. We try to hide most of the complicated details to make the user more productive. There are a lot of pitfalls with OpenGL and we remove most of them. Learning ModernGL is more about learning shaders and the OpenGL pipeline. .. _Vulkan: https://www.khronos.org/vulkan/ .. _IRIS GL: https://wikipedia.org/wiki/IRIS_GL .. _OpenGL: https://en.wikipedia.org/wiki/OpenGL .. _Silicon Graphics: https://wikipedia.org/wiki/Silicon_Graphics .. _Khronos Group: https://www.khronos.org moderngl-moderngl-773b733/docs/topics/000077500000000000000000000000001470420062000176335ustar00rootroot00000000000000moderngl-moderngl-773b733/docs/topics/buffer_format.rst000066400000000000000000000254721470420062000232200ustar00rootroot00000000000000.. _buffer-format-label: Buffer Format ============= .. py:currentmodule:: moderngl Description ----------- A buffer format is a short string describing the layout of data in a vertex buffer object (VBO). A VBO often contains a homogeneous array of C-like structures. The buffer format describes what each element of the array looks like. For example, a buffer containing an array of high-precision 2D vertex positions might have the format ``"2f8"`` - each element of the array consists of two floats, each float being 8 bytes wide, ie. a double. Buffer formats are used in the :py:meth:`Context.vertex_array()` constructor, as the 2nd component of the `content` arg. See the :ref:`example-of-simple-usage-label` below. Syntax ------ A buffer format looks like: ``[count]type[size] [[count]type[size]...] [/usage]`` Where: - ``count`` is an optional integer. If omitted, it defaults to ``1``. - ``type`` is a single character indicating the data type: - ``f`` float - ``i`` int - ``u`` unsigned int - ``x`` padding - ``size`` is an optional number of bytes used to store the type. If omitted, it defaults to 4 for numeric types, or to 1 for padding bytes. A format may contain multiple, space-separated ``[count]type[size]`` triples (See the :ref:`example-of-single-interleaved-array-label`), followed by: - ``/usage`` is optional. It should be preceded by a space, and then consists of a slash followed by a single character, indicating how successive values in the buffer should be passed to the shader: - ``/v`` per vertex. Successive values from the buffer are passed to each vertex. This is the default behavior if usage is omitted. - ``/i`` per instance. Successive values from the buffer are passed to each instance. - ``/r`` per render. the first buffer value is passed to every vertex of every instance. ie. behaves like a uniform. When passing multiple VBOs to a VAO, the first one must be of usage ``/v``, as shown in the :ref:`example-of-multiple-arrays-with-differing-usage-label`. Valid combinations of type and size are: +----------+---------------+-------------------+-----------------+---------+ | | size | +==========+===============+===================+=================+=========+ | **type** | 1 | 2 | 4 | 8 | +----------+---------------+-------------------+-----------------+---------+ | f | Unsigned byte | Half float | Float | Double | | | (normalized) | | | | +----------+---------------+-------------------+-----------------+---------+ | i | Byte | Short | Int | \- | +----------+---------------+-------------------+-----------------+---------+ | u | Unsigned byte | Unsigned short | Unsigned int | \- | +----------+---------------+-------------------+-----------------+---------+ | x | 1 byte | 2 bytes | 4 bytes | 8 bytes | +----------+---------------+-------------------+-----------------+---------+ The entry ``f1`` has two unusual properties: 1. Its type is ``f`` (for float), but it defines a buffer containing unsigned bytes. For this size of floats only, the values are `normalized`, ie. unsigned bytes from 0 to 255 in the buffer are converted to float values from 0.0 to 1.0 by the time they reach the vertex shader. This is intended for passing in colors as unsigned bytes. 2. Three unsigned bytes, with a format of ``3f1``, may be assigned to a ``vec3`` attribute, as one would expect. But, from ModernGL v6.0, they can alternatively be passed to a ``vec4`` attribute. This is intended for passing a buffer of 3-byte RGB values into an attribute which also contains an alpha channel. There are no size 8 variants for types ``i`` and ``u``. This buffer format syntax is specific to ModernGL. As seen in the usage examples below, the formats sometimes look similar to the format strings passed to ``struct.pack``, but that is a different syntax (documented here_.) .. _here: https://docs.python.org/3.7/library/struct.html Buffer formats can represent a wide range of vertex attribute formats. For rare cases of specialized attribute formats that are not expressible using buffer formats, there is a :py:meth:`VertexArray.bind()` method, to manually configure the underlying OpenGL binding calls. This is not generally recommended. Examples -------- Example buffer formats ...................... ``"2f"`` has a count of ``2`` and a type of ``f`` (float). Hence it describes two floats, passed to a vertex shader's ``vec2`` attribute. The size of the floats is unspecified, so defaults to ``4`` bytes. The usage of the buffer is unspecified, so defaults to ``/v`` (vertex), meaning each successive pair of floats in the array are passed to successive vertices during the render call. ``"3i2/i"`` means three ``i`` (integers). The size of each integer is ``2`` bytes, ie. they are shorts, passed to an ``ivec3`` attribute. The trailing ``/i`` means that consecutive values in the buffer are passed to successive `instances` during an instanced render call. So the same value is passed to every vertex within a particular instance. Buffers contining interleaved values are represented by multiple space separated count-type-size triples. Hence: ``"2f 3u x /v"`` means: * ``2f``: two floats, passed to a ``vec2`` attribute, followed by * ``3u``: three unsigned bytes, passed to a ``uvec3``, then * ``x``: a single byte of padding, for alignment. The ``/v`` indicates successive elements in the buffer are passed to successive vertices during the render. This is the default, so the ``/v`` could be omitted. .. _example-of-simple-usage-label: Example of simple usage ....................... Consider a VBO containing 2D vertex positions, forming a single triangle:: # a 2D triangle (ie. three (x, y) vertices) verts = [ 0.0, 0.9, -0.5, 0.0, 0.5, 0.0, ] # pack all six values into a binary array of C-like floats verts_buffer = struct.pack("6f", *verts) # put the array into a VBO vbo = ctx.buffer(verts_buffer) # use the VBO in a VAO vao = ctx.vertex_array( shader_program, [ (vbo, "2f", "in_vert"), # <---- the "2f" is the buffer format ] index_buffer_object ) The line ``(vbo, "2f", "in_vert")``, known as the VAO content, indicates that ``vbo`` contains an array of values, each of which consists of two floats. These values are passed to an ``in_vert`` attribute, declared in the vertex shader as:: in vec2 in_vert; The ``"2f"`` format omits a ``size`` component, so the floats default to 4-bytes each. The format also omits the trailing ``/usage`` component, which defaults to ``/v``, so successive (x, y) rows from the buffer are passed to successive vertices during the render call. .. _example-of-single-interleaved-array-label: Example of single interleaved array ................................... A buffer array might contain elements consisting of multiple interleaved values. For example, consider a buffer array, each element of which contains a 2D vertex position as floats, an RGB color as unsigned ints, and a single byte of padding for alignment: +-------+-------+----------+----------+----------+---------+ | position | color | padding | +-------+-------+----------+----------+----------+---------+ | x | y | r | g | b | \- | +-------+-------+----------+----------+----------+---------+ | float | float | unsigned | unsigned | unsigned | byte | | | | byte | byte | byte | | +-------+-------+----------+----------+----------+---------+ Such a buffer, however you choose to construct it, would then be passed into a VAO using:: vao = ctx.vertex_array( shader_program, [ (vbo, "2f 3f1 x", "in_vert", "in_color") ] index_buffer_object ) The format starts with ``2f``, for the two position floats, which will be passed to the shader's ``in_vert`` attribute, declared as:: in vec2 in_vert; Next, after a space, is ``3f1``, for the three color unsigned bytes, which get normalized to floats by ``f1``. These floats will be passed to the shader's ``in_color`` attribute:: in vec3 in_color; Finally, the format ends with ``x``, a single byte of padding, which needs no shader attribute name. .. _example-of-multiple-arrays-with-differing-usage-label: Example of multiple arrays with differing ``/usage`` .................................................... To illustrate the trailing ``/usage`` portion, consider rendering a dozen cubes with instanced rendering. We will use: * ``vbo_verts_normals`` contains vertices (3 floats) and normals (3 floats) for the vertices within a single cube. * ``vbo_offset_orientation`` contains offsets (3 floats) and orientations (9 float matrices) that are used to position and orient each cube. * ``vbo_colors`` contains colors (3 floats). In this example, there is only one color in the buffer, that will be used for every vertex of every cube. Our shader will take all the above values as attributes. We bind the above VBOs in a single VAO, to prepare for an instanced rendering call:: vao = ctx.vertex_array( shader_program, [ (vbo_verts_normals, "3f 3f /v", "in_vert", "in_norm"), (vbo_offset_orientation, "3f 9f /i", "in_offset", "in_orientation"), (vbo_colors, "3f /r", "in_color"), ] index_buffer_object ) So, the vertices and normals, using ``/v``, are passed to each vertex within an instance. This fulfills the rule that the first VBO in a VAO must have usage ``/v``. These are passed to vertex attributes as:: in vec3 in_vert; in vec3 in_norm; The offsets and orientations pass the same value to each vertex within an instance, but then pass the next value in the buffer to the vertices of the next instance. Passed as:: in vec3 in_offset; in mat3 in_orientation; The single color is passed to every vertex of every instance. If we had stored the color with ``/v`` or ``/i``, then we would have had to store duplicate identical color values in vbo_colors - one per instance or one per vertex. To render all our cubes in a single color, this is needless duplication. Using ``/r``, only one color is require the buffer, and it is passed to every vertex of every instance for the whole render call:: in vec3 in_color; An alternative approach would be to pass in the color as a uniform, since it is constant. But doing it as an attribute is more flexible. It allows us to reuse the same shader program, bound to a different buffer, to pass in color data which varies per instance, or per vertex. .. toctree:: :maxdepth: 2 moderngl-moderngl-773b733/docs/topics/context.rst000066400000000000000000000122561470420062000220570ustar00rootroot00000000000000 .. _context: Context Creation ================ .. py:currentmodule:: moderngl .. Note:: From moderngl 5.6 context creation is handled by the glcontext_ package. This makes expanding context support easier for users lowering the bar for contributions. It also means context creation is no longer limited by a moderngl releases. .. Note:: This page might not list all supported backends as the glcontext_ project keeps evolving. If using anything outside of the default contexts provided per OS, please check the listed backends in the glcontext_ project. Introduction ------------ A context is an object giving moderngl access to opengl instructions (greatly simplified). How a context is created depends on your operating system and what kind of platform you want to target. In the vast majority of cases you'll be using the default context backend supported by your operating system. This backend will be automatically selected unless a specific ``backend`` parameter is used. Default backend per OS * **Windows**: wgl / opengl32.dll * **Linux**: x11/glx/libGL * **OS X**: CGL These default backends support two modes: * Detecting an exiting active context possibly created by a window library such as glfw, sdl2, pyglet etc. * Creating a headless context (No visible window) Detecting an existing active context created by a window library:: import moderngl # Create the window with an OpenGL context (Most window libraries support this) ctx = moderngl.create_context() # If successful we can now render to the window print("Default framebuffer is:", ctx.screen) A great reference using various window libraries can be found here: https://github.com/moderngl/moderngl-window/tree/master/moderngl_window/context Creating a headless context:: import moderngl # Create the context ctx = moderngl.create_context(standalone=True) # Create a framebuffer we can render to fbo = ctx.simple_framebuffer((100, 100), 4) fbo.use() Require a minimum OpenGL version -------------------------------- ModernGL only support 3.3+ contexts. By default version 3.3 is passed in as the minimum required version of the context returned by the backend. To require a specific version:: moderngl.create_context(require=430) This will require OpenGL 4.3. If a lower context version is returned the context creation will fail. This attribute can be accessed in :py:attr:`Context.version_code` and will be updated to contain the actual version code of the context (If higher than required). Specifying context backend -------------------------- A ``backend`` can be passed in for more advanced usage. For example: Making a headless EGL context on linux:: ctx = moderngl.create_context(standalone=True, backend='egl') .. Note:: Each backend supports additional keyword arguments for more advanced configuration. This can for example be the exact name of the library to load. More information in the glcontext_ docs. Context Sharing --------------- .. Warning:: Object sharing is an experimental feature Some context support the ``share`` parameters enabling object sharing between contexts. This is not needed if you are attaching to existing context with share mode enabled. For example if you create two windows with glfw enabling object sharing. ModernGL objects (such as :py:class:`moderngl.Buffer`, :py:class:`moderngl.Texture`, ..) has a ``ctx`` property containing the context they were created in. Still **ModernGL do not check what context is currently active when accessing these objects.** This means the object can be used in both contexts when sharing is enabled. This should in theory work fine with object sharing enabled:: data1 = numpy.array([1, 2, 3, 4], dtype='u1') data2 = numpy.array([4, 3, 2, 1], dtype='u1') ctx1 = moderngl.create_context(standalone=True) ctx2 = moderngl.create_context(standalone=True, share=True) with ctx1 as ctx: b1 = ctx.buffer(data1) with ctx2 as ctx: b2 = ctx.buffer(data2) print(b1.glo) # Displays: 1 print(b2.glo) # Displays: 2 with ctx1: print(b1.read()) print(b2.read()) with ctx2: print(b1.read()) print(b2.read()) Still, there are some limitations to object sharing. Especially objects that reference other objects (framebuffer, vertex array object, etc.) More information for a deeper dive: * https://www.khronos.org/opengl/wiki/OpenGL_Object#Object_Sharing * https://www.khronos.org/opengl/wiki/Memory_Model Context Info ------------ Various information such as limits and driver information can be found in the :py:attr:`~moderngl.Context.info` property. It can often be useful to know the vendor and render for the context:: >>> import moderngl >>> ctx = moderngl.create_context(standalone=True, gl_version=(4.6)) >>> ctx.info["GL_VENDOR"] 'NVIDIA Corporation' >>> ctx.info["GL_RENDERER"] 'GeForce RTX 2080 SUPER/PCIe/SSE2' >>> ctx.info["GL_VERSION"] '3.3.0 NVIDIA 456.71' Note that it reports version 3.3 here because ModernGL by default requests a version 3.3 context (minimum requirement). .. _glcontext: https://github.com/moderngl/glcontext moderngl-moderngl-773b733/docs/topics/gc.rst000066400000000000000000000061221470420062000207570ustar00rootroot00000000000000.. py:currentmodule:: moderngl The Lifecycle of a ModernGL Object ================================== From moderngl 5.7 we support three different garbage collection modes. This should be configured using the :py:attr:`Context.gc_mode` attribute preferably right after the context is created. The current supported modes are: * ``None``: (default) No garbage collection is performed. Objects needs to to be manually released like in previous versions of moderngl. * ``"context_gc"``: Dead objects are collected in :py:attr:`Context.objects`. These can periodically be released using :py:meth:`Context.gc`. * ``"auto"``: Dead objects are destroyed automatically like we would expect in python. It's important to realize here that garbage collection is not about the python objects itself, but the underlying OpenGL objects. ModernGL operates in many different environments were garbage collection can be a challenge. This depends on factors like who is controlling the existence of the OpenGL context and challenges around threading in python. Standalone / Headless Context ----------------------------- In this instance we control when the context is created and destroyed. Using ``"auto"`` garbage collection is perfectly reasonable in this situation. Context Detection ----------------- When detecting an existing context from some window library we have no direct control over the existence of the context. Using ``"auto"`` mode is dangerous can can cause crashes especially on application exit. The window and context is destroyed and closed, then moderngl will try to destroy resources in a context that no longer exists. Use ``"context_gc"`` mode to avoid this. It can be possible to switch the ``gc_mode`` to ``None`` when the window is closed. This can still be a problem if you have race conditions due to resources being created in the render loop. The Threading Issue ------------------- When using threads in python the garbage collector can run in any thread. This is a problem for OpenGL because only the main thread is allowed to interact with the context. When using threads in your application you should be using ``"context_gc"`` mode and periodically call ``Context.gc`` for example during every frame swap. Manually Releasing Objects -------------------------- Objects in moderngl don't automatically release the OpenGL resources when ``gc_mode=None`` is used. Each type has a ``release()`` method that needs to be called to properly clean up everything:: # Create a texture texture = ctx.texture((10, 10), 4) # Properly release the opengl resources texture.release() Detecting Released Objects -------------------------- If you for some reason need to detect if a resource was released it can be done by checking the type of the internal moderngl object (``.mglo`` property):: >> import moderngl >> ctx = moderngl.create_standalone_context() >> buffer = ctx.buffer(reserve=1024) >> type(buffer.mglo) >> buffer.release() >> type(buffer.mglo) >> type(buffer.mglo) == moderngl.mgl.InvalidObject True moderngl-moderngl-773b733/docs/topics/index.rst000066400000000000000000000001701470420062000214720ustar00rootroot00000000000000 Topics ====== .. toctree:: :maxdepth: 2 gc.rst context.rst texture_formats.rst buffer_format.rst moderngl-moderngl-773b733/docs/topics/texture_formats.rst000066400000000000000000000341311470420062000236220ustar00rootroot00000000000000.. _texture-format-label: Texture Format ============== .. py:currentmodule:: moderngl Description ----------- The format of a texture can be described by the ``dtype`` parameter during texture creation. For example the :py:meth:`moderngl.Context.texture`. The default ``dtype`` is ``f1``. Each component is an unsigned byte (0-255) that is normalized when read in a shader into a value from 0.0 to 1.0. The formats are based on the string formats used in numpy. Some quick example of texture creation:: # RGBA (4 component) f1 texture texture = ctx.texture((100, 100), 4) # dtype f1 is default # R (1 component) f4 texture (32 bit float) texture = ctx.texture((100, 100), 1, dype="f4") # RG (2 component) u2 texture (16 bit unsigned integer) texture = ctx.texture((100, 100), 2, dtype="u2") Texture contents can be passed in using the ``data`` parameter during creation or by using the ``write()`` method. The object passed in ``data`` can be bytes or any object supporting the buffer protocol. When writing data to texture the data type can be derived from the internal format in the tables below. ``f1`` textures takes unsigned bytes (``u1`` or ``numpy.uint8`` in numpy) while ``f2`` textures takes 16 bit floats (``f2`` or ``numpy.float16`` in numpy). Float Textures -------------- ``f1`` textures are just unsigned bytes (8 bits per component) (``GL_UNSIGNED_BYTE``) The ``f1`` texture is the most commonly used textures in OpenGL and is currently the default. Each component takes 1 byte (4 bytes for RGBA). This is not really a "real" float format, but a shader will read normalized values from these textures. ``0-255`` (byte range) is read as a value from ``0.0`` to ``1.0`` in shaders. In shaders the sampler type should be ``sampler2D``, ``sampler2DArray`` ``sampler3D``, ``samplerCube`` etc. +----------+---------------+---------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+===============+===================+ | f1 | 1 | GL_RED | GL_R8 | +----------+---------------+---------------+-------------------+ | f1 | 2 | GL_RG | GL_RG8 | +----------+---------------+---------------+-------------------+ | f1 | 3 | GL_RGB | GL_RGB8 | +----------+---------------+---------------+-------------------+ | f1 | 4 | GL_RGBA | GL_RGBA8 | +----------+---------------+---------------+-------------------+ ``f2`` textures stores 16 bit float values (``GL_HALF_FLOAT``). +----------+---------------+---------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+===============+===================+ | f2 | 1 | GL_RED | GL_R16F | +----------+---------------+---------------+-------------------+ | f2 | 2 | GL_RG | GL_RG16F | +----------+---------------+---------------+-------------------+ | f2 | 3 | GL_RGB | GL_RGB16F | +----------+---------------+---------------+-------------------+ | f2 | 4 | GL_RGBA | GL_RGBA16F | +----------+---------------+---------------+-------------------+ ``f4`` textures store 32 bit float values. (``GL_FLOAT``) Note that some drivers do not like 3 components because of alignment. +----------+---------------+---------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+===============+===================+ | f4 | 1 | GL_RED | GL_R32F | +----------+---------------+---------------+-------------------+ | f4 | 2 | GL_RG | GL_RG32F | +----------+---------------+---------------+-------------------+ | f4 | 3 | GL_RGB | GL_RGB32F | +----------+---------------+---------------+-------------------+ | f4 | 4 | GL_RGBA | GL_RGBA32F | +----------+---------------+---------------+-------------------+ Integer Textures ---------------- Integer textures come in a signed and unsigned version. The advantage with integer textures is that shader can read the raw integer values from them using for example ``usampler*`` (unsigned) or ``isampler*`` (signed). Integer textures do not support ``LINEAR`` filtering (only ``NEAREST``). Unsigned ~~~~~~~~ ``u1`` textures store unsigned byte values (``GL_UNSIGNED_BYTE``). In shaders the sampler type should be ``usampler2D``, ``usampler2DArray`` ``usampler3D``, ``usamplerCube`` etc. +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | u1 | 1 | GL_RED_INTEGER | GL_R8UI | +----------+---------------+-----------------+-------------------+ | u1 | 2 | GL_RG_INTEGER | GL_RG8UI | +----------+---------------+-----------------+-------------------+ | u1 | 3 | GL_RGB_INTEGER | GL_RGB8UI | +----------+---------------+-----------------+-------------------+ | u1 | 4 | GL_RGBA_INTEGER | GL_RGBA8UI | +----------+---------------+-----------------+-------------------+ ``u2`` textures store 16 bit unsigned integers (``GL_UNSIGNED_SHORT``). +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | u2 | 1 | GL_RED_INTEGER | GL_R16UI | +----------+---------------+-----------------+-------------------+ | u2 | 2 | GL_RG_INTEGER | GL_RG16UI | +----------+---------------+-----------------+-------------------+ | u2 | 3 | GL_RGB_INTEGER | GL_RGB16UI | +----------+---------------+-----------------+-------------------+ | u2 | 4 | GL_RGBA_INTEGER | GL_RGBA16UI | +----------+---------------+-----------------+-------------------+ ``u4`` textures store 32 bit unsigned integers (``GL_UNSIGNED_INT``) +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | u4 | 1 | GL_RED_INTEGER | GL_R32UI | +----------+---------------+-----------------+-------------------+ | u4 | 2 | GL_RG_INTEGER | GL_RG32UI | +----------+---------------+-----------------+-------------------+ | u4 | 3 | GL_RGB_INTEGER | GL_RGB32UI | +----------+---------------+-----------------+-------------------+ | u4 | 4 | GL_RGBA_INTEGER | GL_RGBA32UI | +----------+---------------+-----------------+-------------------+ Signed ~~~~~~ ``i1`` textures store signed byte values (``GL_BYTE``). In shaders the sampler type should be ``isampler2D``, ``isampler2DArray`` ``isampler3D``, ``isamplerCube`` etc. +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | i1 | 1 | GL_RED_INTEGER | GL_R8I | +----------+---------------+-----------------+-------------------+ | i1 | 2 | GL_RG_INTEGER | GL_RG8I | +----------+---------------+-----------------+-------------------+ | i1 | 3 | GL_RGB_INTEGER | GL_RGB8I | +----------+---------------+-----------------+-------------------+ | i1 | 4 | GL_RGBA_INTEGER | GL_RGBA8I | +----------+---------------+-----------------+-------------------+ ``i2`` textures store 16 bit integers (``GL_SHORT``). +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | i2 | 1 | GL_RED_INTEGER | GL_R16I | +----------+---------------+-----------------+-------------------+ | i2 | 2 | GL_RG_INTEGER | GL_RG16I | +----------+---------------+-----------------+-------------------+ | i2 | 3 | GL_RGB_INTEGER | GL_RGB16I | +----------+---------------+-----------------+-------------------+ | i2 | 4 | GL_RGBA_INTEGER | GL_RGBA16I | +----------+---------------+-----------------+-------------------+ ``i4`` textures store 32 bit integers (``GL_INT``) +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | i4 | 1 | GL_RED_INTEGER | GL_R32I | +----------+---------------+-----------------+-------------------+ | i4 | 2 | GL_RG_INTEGER | GL_RG32I | +----------+---------------+-----------------+-------------------+ | i4 | 3 | GL_RGB_INTEGER | GL_RGB32I | +----------+---------------+-----------------+-------------------+ | i4 | 4 | GL_RGBA_INTEGER | GL_RGBA32I | +----------+---------------+-----------------+-------------------+ Normalized Integer Textures --------------------------- Normalized integers are integer texture, but texel reads in a shader returns normalized values (``[0.0, 1.0]``). For example an unsigned 16 bit fragment with the value ``2**16-1`` will be read as ``1.0``. Normalized integer textures should use the `sampler2D` sampler type. Also note that there's no standard for normalized 32 bit integer textures because a float32 doesn't have enough precision to express a 32 bit integer as a number between 0.0 and 1.0. Unsigned ~~~~~~~~ ``nu1`` textures is really the same as an ``f1``. Each component is a ``GL_UNSIGNED_BYTE``, but are read by the shader in normalized form ``[0.0, 1.0]``. +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | nu1 | 1 | GL_RED | GL_R8 | +----------+---------------+-----------------+-------------------+ | nu1 | 2 | GL_RG | GL_RG8 | +----------+---------------+-----------------+-------------------+ | nu1 | 3 | GL_RGB | GL_RGB8 | +----------+---------------+-----------------+-------------------+ | nu1 | 4 | GL_RGBA | GL_RGBA8 | +----------+---------------+-----------------+-------------------+ ``nu2`` textures store 16 bit unsigned integers (``GL_UNSIGNED_SHORT``). The value range ``[0, 2**16-1]`` will be normalized into ``[0.0, 1.0]``. +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | nu2 | 1 | GL_RED | GL_R16 | +----------+---------------+-----------------+-------------------+ | nu2 | 2 | GL_RG | GL_RG16 | +----------+---------------+-----------------+-------------------+ | nu2 | 3 | GL_RGB | GL_RGB16 | +----------+---------------+-----------------+-------------------+ | nu2 | 4 | GL_RGBA | GL_RGBA16 | +----------+---------------+-----------------+-------------------+ Signed ~~~~~~ ``ni1`` textures store 8 bit signed integers (``GL_BYTE``). The value range ``[0, 127]`` will be normalized into ``[0.0, 1.0]``. Negative values will be clamped. +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | ni1 | 1 | GL_RED | GL_R8 | +----------+---------------+-----------------+-------------------+ | ni1 | 2 | GL_RG | GL_RG8 | +----------+---------------+-----------------+-------------------+ | ni1 | 3 | GL_RGB | GL_RGB8 | +----------+---------------+-----------------+-------------------+ | ni1 | 4 | GL_RGBA | GL_RGBA8 | +----------+---------------+-----------------+-------------------+ ``ni2`` textures store 16 bit signed integers (``GL_SHORT``). The value range ``[0, 2**15-1]`` will be normalized into ``[0.0, 1.0]``. Negative values will be clamped. +----------+---------------+-----------------+-------------------+ | **dtype**| *Components* | *Base Format* | *Internal Format* | +==========+===============+=================+===================+ | ni2 | 1 | GL_RED | GL_R16 | +----------+---------------+-----------------+-------------------+ | ni2 | 2 | GL_RG | GL_RG16 | +----------+---------------+-----------------+-------------------+ | ni2 | 3 | GL_RGB | GL_RGB16 | +----------+---------------+-----------------+-------------------+ | ni2 | 4 | GL_RGBA | GL_RGBA16 | +----------+---------------+-----------------+-------------------+ Overriding internalformat ------------------------- :py:meth:`Context.texture` supports overriding the internalformat of the texture. This is only necessary when needing a different internal formats from the tables above. This can for example be ``GL_SRGB8 = 0x8C41`` or some compressed format. You may also need to look up in :py:attr:`Context.extensions` to ensure the context supports internalformat you are using. We do not provide the enum values for these alternative internalformats. They can be looked up in the registry : https://raw.githubusercontent.com/KhronosGroup/OpenGL-Registry/master/xml/gl.xml Example:: texture = ctx.texture(image.size, 3, data=srbg_data, internal_format=GL_SRGB8) moderngl-moderngl-773b733/examples/000077500000000000000000000000001470420062000172205ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/01_hello_world.py000066400000000000000000000013471470420062000224110ustar00rootroot00000000000000import math import os import sys import moderngl import pygame os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class Scene: def __init__(self): self.ctx = moderngl.get_context() def render(self): now = pygame.time.get_ticks() / 1000.0 r = math.sin(now + 0.0) * 0.5 + 0.5 g = math.sin(now + 2.1) * 0.5 + 0.5 b = math.sin(now + 4.2) * 0.5 + 0.5 self.ctx.clear(r, g, b) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/02_shader.py000066400000000000000000000025171470420062000213460ustar00rootroot00000000000000import math import os import sys import moderngl import pygame os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core vec3 vertices[3] = vec3[]( vec3(0.0, 0.4, 0.0), vec3(-0.4, -0.3, 0.0), vec3(0.4, -0.3, 0.0) ); void main() { gl_Position = vec4(vertices[gl_VertexID], 1.0); } ''', fragment_shader=''' #version 330 core layout (location = 0) out vec4 out_color; void main() { out_color = vec4(1.0, 1.0, 1.0, 1.0); } ''', ) self.vao = self.ctx.vertex_array(self.program, []) self.vao.vertices = 3 def render(self): self.ctx.clear() self.vao.render() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/03_camera.py000066400000000000000000000034341470420062000213300ustar00rootroot00000000000000import math import os import sys import glm import moderngl import pygame os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; vec3 vertices[3] = vec3[]( vec3(0.0, 0.4, 0.0), vec3(-0.4, -0.3, 0.0), vec3(0.4, -0.3, 0.0) ); void main() { gl_Position = camera * vec4(vertices[gl_VertexID], 1.0); } ''', fragment_shader=''' #version 330 core layout (location = 0) out vec4 out_color; void main() { out_color = vec4(1.0, 1.0, 1.0, 1.0); } ''', ) self.vao = self.ctx.vertex_array(self.program, []) self.vao.vertices = 3 def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.program['camera'].write(camera) self.vao.render() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/04_vertex_buffer.py000066400000000000000000000035421470420062000227470ustar00rootroot00000000000000import math import os import sys import glm import moderngl import numpy as np import pygame os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; layout (location = 0) in vec3 in_vertex; void main() { gl_Position = camera * vec4(in_vertex, 1.0); } ''', fragment_shader=''' #version 330 core layout (location = 0) out vec4 out_color; void main() { out_color = vec4(1.0, 1.0, 1.0, 1.0); } ''', ) vertices = np.array([ 0.0, 0.4, 0.0, -0.4, -0.3, 0.0, 0.4, -0.3, 0.0, ]) self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes()) self.vao = self.ctx.vertex_array(self.program, [(self.vbo, '3f', 'in_vertex')]) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.program['camera'].write(camera) self.vao.render() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/05_uniforms.py000066400000000000000000000041461470420062000217450ustar00rootroot00000000000000import math import os import sys import glm import moderngl import numpy as np import pygame os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; void main() { gl_Position = camera * vec4(position + in_vertex * scale, 1.0); } ''', fragment_shader=''' #version 330 core uniform vec3 color; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(color, 1.0); } ''', ) vertices = np.array([ 0.0, 0.4, 0.0, -0.4, -0.3, 0.0, 0.4, -0.3, 0.0, ]) self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes()) self.vao = self.ctx.vertex_array(self.program, [(self.vbo, '3f', 'in_vertex')]) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.program['camera'].write(camera) self.program['position'] = (0.0, 0.0, 0.0) self.program['color'] = (1.0, 1.0, 1.0) self.program['scale'] = 0.2 self.vao.render() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/06_multiple_objects.py000066400000000000000000000053451470420062000234520ustar00rootroot00000000000000import math import os import sys import glm import moderngl import numpy as np import pygame os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class TriangleGeometry: def __init__(self): self.ctx = moderngl.get_context() vertices = np.array([ 0.0, 0.4, 0.0, -0.4, -0.3, 0.0, 0.4, -0.3, 0.0, ]) self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes()) def vertex_array(self, program): return self.ctx.vertex_array(program, [(self.vbo, '3f', 'in_vertex')]) class Mesh: def __init__(self, program, geometry): self.ctx = moderngl.get_context() self.vao = geometry.vertex_array(program) def render(self, position, color, scale): self.vao.program['position'] = position self.vao.program['color'] = color self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; void main() { gl_Position = camera * vec4(position + in_vertex * scale, 1.0); } ''', fragment_shader=''' #version 330 core uniform vec3 color; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(color, 1.0); } ''', ) self.triangle_geometry = TriangleGeometry() self.triangle = Mesh(self.program, self.triangle_geometry) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.program['camera'].write(camera) self.triangle.render((-0.2, 0.0, 0.0), (1.0, 0.0, 0.0), 0.2) self.triangle.render((0.0, 0.0, 0.0), (0.0, 1.0, 0.0), 0.2) self.triangle.render((0.2, 0.0, 0.0), (0.0, 0.0, 1.0), 0.2) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/07_different_geometries.py000066400000000000000000000075741470420062000243060ustar00rootroot00000000000000import math import os import sys import glm import moderngl import numpy as np import pygame os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class TriangleGeometry: def __init__(self): self.ctx = moderngl.get_context() vertices = np.array([ 0.0, 0.4, 0.0, -0.4, -0.3, 0.0, 0.4, -0.3, 0.0, ]) self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes()) def vertex_array(self, program): return self.ctx.vertex_array(program, [(self.vbo, '3f', 'in_vertex')]) class PlaneGeometry: def __init__(self): self.ctx = moderngl.get_context() vertices = np.array([ -0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, -0.5, 0.5, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, -0.5, 0.5, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, ]) self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes()) def vertex_array(self, program): return self.ctx.vertex_array(program, [(self.vbo, '3f 12x 8x', 'in_vertex')]) class Mesh: def __init__(self, program, geometry): self.ctx = moderngl.get_context() self.vao = geometry.vertex_array(program) def render(self, position, color, scale): self.vao.program['position'] = position self.vao.program['color'] = color self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(color, 1.0); } ''', ) self.triangle_geometry = TriangleGeometry() self.triangle = Mesh(self.program, self.triangle_geometry) self.plane_geometry = PlaneGeometry() self.plane = Mesh(self.program, self.plane_geometry) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.program['camera'].write(camera) self.triangle.render((-0.2, 0.0, 0.0), (1.0, 0.0, 0.0), 0.2) self.plane.render((0.0, 0.0, 0.0), (0.0, 1.0, 0.0), 0.2) self.triangle.render((0.2, 0.0, 0.0), (0.0, 0.0, 1.0), 0.2) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/08_texture.py000066400000000000000000000113461470420062000216060ustar00rootroot00000000000000import math import os import sys import glm import moderngl import numpy as np import pygame os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class NoiseTexture: def __init__(self, width, height): self.ctx = moderngl.get_context() pixels = os.urandom(width * height * 3) self.texture = self.ctx.texture((width, height), 3, pixels) self.sampler = self.ctx.sampler(texture=self.texture) self.sampler.filter = (self.ctx.NEAREST, self.ctx.NEAREST) def use(self): self.sampler.use() class TriangleGeometry: def __init__(self): self.ctx = moderngl.get_context() vertices = np.array([ 0.0, 0.4, 0.0, -0.4, -0.3, 0.0, 0.4, -0.3, 0.0, ]) self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes()) def vertex_array(self, program): return self.ctx.vertex_array(program, [(self.vbo, '3f', 'in_vertex')]) class PlaneGeometry: def __init__(self): self.ctx = moderngl.get_context() vertices = np.array([ -0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, -0.5, 0.5, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, -0.5, 0.5, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.5, -0.5, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, ]) self.vbo = self.ctx.buffer(vertices.astype('f4').tobytes()) def vertex_array(self, program): return self.ctx.vertex_array(program, [(self.vbo, '3f 12x 2f', 'in_vertex', 'in_uv')]) class Mesh: def __init__(self, program, geometry, texture=None): self.ctx = moderngl.get_context() self.vao = geometry.vertex_array(program) self.texture = texture def render(self, position, color, scale): self.vao.program['use_texture'] = False if self.texture: self.vao.program['use_texture'] = True self.texture.use() self.vao.program['position'] = position self.vao.program['color'] = color self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core uniform sampler2D Texture; uniform bool use_texture; uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(color, 1.0); if (use_texture) { out_color *= texture(Texture, v_uv); } } ''', ) self.texture = NoiseTexture(32, 32) self.triangle_geometry = TriangleGeometry() self.triangle = Mesh(self.program, self.triangle_geometry) self.plane_geometry = PlaneGeometry() self.plane = Mesh(self.program, self.plane_geometry, self.texture) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.program['camera'].write(camera) self.triangle.render((-0.2, 0.0, 0.0), (1.0, 0.0, 0.0), 0.2) self.plane.render((0.0, 0.0, 0.0), (1.0, 1.0, 1.0), 0.2) self.triangle.render((0.2, 0.0, 0.0), (0.0, 0.0, 1.0), 0.2) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/09_models_and_images.py000066400000000000000000000100541470420062000235340ustar00rootroot00000000000000import math import os import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class ImageTexture: def __init__(self, path): self.ctx = moderngl.get_context() img = Image.open(path).convert('RGBA') self.texture = self.ctx.texture(img.size, 4, img.tobytes()) self.sampler = self.ctx.sampler(texture=self.texture) def use(self): self.sampler.use() class ModelGeometry: def __init__(self, path): self.ctx = moderngl.get_context() obj = Obj.open(path) self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty')) def vertex_array(self, program): return self.ctx.vertex_array(program, [(self.vbo, '3f 12x 2f', 'in_vertex', 'in_uv')]) class Mesh: def __init__(self, program, geometry, texture=None): self.ctx = moderngl.get_context() self.vao = geometry.vertex_array(program) self.texture = texture def render(self, position, color, scale): self.vao.program['use_texture'] = False if self.texture: self.vao.program['use_texture'] = True self.texture.use() self.vao.program['position'] = position self.vao.program['color'] = color self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core uniform sampler2D Texture; uniform bool use_texture; uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(color, 1.0); if (use_texture) { out_color *= texture(Texture, v_uv); } } ''', ) self.texture = ImageTexture('examples/data/textures/crate.png') self.car_geometry = ModelGeometry('examples/data/models/lowpoly_toy_car.obj') self.car = Mesh(self.program, self.car_geometry) self.crate_geometry = ModelGeometry('examples/data/models/crate.obj') self.crate = Mesh(self.program, self.crate_geometry, self.texture) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.program['camera'].write(camera) self.car.render((-0.4, 0.0, 0.0), (1.0, 0.0, 0.0), 0.2) self.crate.render((0.0, 0.0, 0.0), (1.0, 1.0, 1.0), 0.2) self.car.render((0.4, 0.0, 0.0), (0.0, 0.0, 1.0), 0.2) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/10_lighting.py000066400000000000000000000104661470420062000217060ustar00rootroot00000000000000import math import os import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class ImageTexture: def __init__(self, path): self.ctx = moderngl.get_context() img = Image.open(path).convert('RGBA') self.texture = self.ctx.texture(img.size, 4, img.tobytes()) self.sampler = self.ctx.sampler(texture=self.texture) def use(self): self.sampler.use() class ModelGeometry: def __init__(self, path): self.ctx = moderngl.get_context() obj = Obj.open(path) self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty')) def vertex_array(self, program): return self.ctx.vertex_array(program, [(self.vbo, '3f 3f 2f', 'in_vertex', 'in_normal', 'in_uv')]) class Mesh: def __init__(self, program, geometry, texture=None): self.ctx = moderngl.get_context() self.vao = geometry.vertex_array(program) self.texture = texture def render(self, position, color, scale): self.vao.program['use_texture'] = False if self.texture: self.vao.program['use_texture'] = True self.texture.use() self.vao.program['position'] = position self.vao.program['color'] = color self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core uniform sampler2D Texture; uniform bool use_texture; uniform vec3 light_direction; uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(color, 1.0); if (use_texture) { out_color *= texture(Texture, v_uv); } float lum = dot(normalize(v_normal), normalize(light_direction)); out_color.rgb *= max(lum, 0.0) * 0.5 + 0.5; } ''', ) self.texture = ImageTexture('examples/data/textures/crate.png') self.car_geometry = ModelGeometry('examples/data/models/lowpoly_toy_car.obj') self.car = Mesh(self.program, self.car_geometry) self.crate_geometry = ModelGeometry('examples/data/models/crate.obj') self.crate = Mesh(self.program, self.crate_geometry, self.texture) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.program['camera'].write(camera) self.program['light_direction'] = (1.0, 2.0, 3.0) self.car.render((-0.4, 0.0, 0.0), (1.0, 0.0, 0.0), 0.2) self.crate.render((0.0, 0.0, 0.0), (1.0, 1.0, 1.0), 0.2) self.car.render((0.4, 0.0, 0.0), (0.0, 0.0, 1.0), 0.2) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/11_multiple_programs.py000066400000000000000000000141011470420062000236350ustar00rootroot00000000000000import math import os import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class ColorMaterial: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core uniform vec3 light_direction; uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(color, 1.0); float lum = dot(normalize(v_normal), normalize(light_direction)); out_color.rgb *= max(lum, 0.0) * 0.5 + 0.5; } ''', ) self.color = (1.0, 1.0, 1.0) def use(self): self.program['color'] = self.color def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 8x', 'in_vertex', 'in_normal')]) class TextureMaterial: def __init__(self, texture): self.texture = texture self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core uniform sampler2D Texture; uniform vec3 light_direction; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { out_color = texture(Texture, v_uv); float lum = dot(normalize(v_normal), normalize(light_direction)); out_color.rgb *= max(lum, 0.0) * 0.5 + 0.5; } ''', ) def use(self): self.texture.use() def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 2f', 'in_vertex', 'in_normal', 'in_uv')]) class ImageTexture: def __init__(self, path): self.ctx = moderngl.get_context() img = Image.open(path).convert('RGBA') self.texture = self.ctx.texture(img.size, 4, img.tobytes()) self.sampler = self.ctx.sampler(texture=self.texture) def use(self): self.sampler.use() class ModelGeometry: def __init__(self, path): self.ctx = moderngl.get_context() obj = Obj.open(path) self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty')) class Mesh: def __init__(self, material, geometry): self.ctx = moderngl.get_context() self.vao = material.vertex_array(geometry.vbo) self.material = material def render(self, position, scale): self.material.use() self.vao.program['position'] = position self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() self.texture = ImageTexture('examples/data/textures/crate.png') self.color_material = ColorMaterial() self.texture_material = TextureMaterial(self.texture) self.car_geometry = ModelGeometry('examples/data/models/lowpoly_toy_car.obj') self.car = Mesh(self.color_material, self.car_geometry) self.crate_geometry = ModelGeometry('examples/data/models/crate.obj') self.crate = Mesh(self.texture_material, self.crate_geometry) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.0), (0.0, 0.0, 1.0)) return proj * look def render(self): camera = self.camera_matrix() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.color_material.program['camera'].write(camera) self.color_material.program['light_direction'] = (1.0, 2.0, 3.0) self.texture_material.program['camera'].write(camera) self.texture_material.program['light_direction'] = (1.0, 2.0, 3.0) self.crate.render((0.0, 0.0, 0.0), 0.2) self.color_material.color = (1.0, 0.0, 0.0) self.car.render((-0.4, 0.0, 0.0), 0.2) self.color_material.color = (0.0, 0.0, 1.0) self.car.render((0.4, 0.0, 0.0), 0.2) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/12_uniform_buffer.py000066400000000000000000000154521470420062000231130ustar00rootroot00000000000000import math import os import struct import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class UniformBuffer: def __init__(self): self.ctx = moderngl.get_context() self.data = bytearray(1024) self.ubo = self.ctx.buffer(self.data) def set_camera(self, eye, target): proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, target, (0.0, 0.0, 1.0)) camera = proj * look self.data[0:64] = camera.to_bytes() def set_light_direction(self, x, y, z): self.data[64:80] = struct.pack('4f', x, y, z, 0.0) def use(self): self.ubo.write(self.data) self.ubo.bind_to_uniform_block() class ColorMaterial: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core layout (std140) uniform Common { mat4 camera; vec4 light_direction; }; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core layout (std140) uniform Common { mat4 camera; vec4 light_direction; }; uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(color, 1.0); float lum = dot(normalize(v_normal), normalize(light_direction.xyz)); out_color.rgb *= max(lum, 0.0) * 0.5 + 0.5; } ''', ) self.color = (1.0, 1.0, 1.0) def use(self): self.program['color'] = self.color def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 8x', 'in_vertex', 'in_normal')]) class TextureMaterial: def __init__(self, texture): self.texture = texture self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core layout (std140) uniform Common { mat4 camera; vec4 light_direction; }; uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core layout (std140) uniform Common { mat4 camera; vec4 light_direction; }; uniform sampler2D Texture; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { out_color = texture(Texture, v_uv); float lum = dot(normalize(v_normal), normalize(light_direction.xyz)); out_color.rgb *= max(lum, 0.0) * 0.5 + 0.5; } ''', ) def use(self): self.texture.use() def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 2f', 'in_vertex', 'in_normal', 'in_uv')]) class ImageTexture: def __init__(self, path): self.ctx = moderngl.get_context() img = Image.open(path).convert('RGBA') self.texture = self.ctx.texture(img.size, 4, img.tobytes()) self.sampler = self.ctx.sampler(texture=self.texture) def use(self): self.sampler.use() class ModelGeometry: def __init__(self, path): self.ctx = moderngl.get_context() obj = Obj.open(path) self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty')) class Mesh: def __init__(self, material, geometry): self.ctx = moderngl.get_context() self.vao = material.vertex_array(geometry.vbo) self.material = material def render(self, position, scale): self.material.use() self.vao.program['position'] = position self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() self.uniform_buffer = UniformBuffer() self.texture = ImageTexture('examples/data/textures/crate.png') self.color_material = ColorMaterial() self.texture_material = TextureMaterial(self.texture) self.car_geometry = ModelGeometry('examples/data/models/lowpoly_toy_car.obj') self.car = Mesh(self.color_material, self.car_geometry) self.crate_geometry = ModelGeometry('examples/data/models/crate.obj') self.crate = Mesh(self.texture_material, self.crate_geometry) def render(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.uniform_buffer.set_camera(eye, (0.0, 0.0, 0.0)) self.uniform_buffer.set_light_direction(1.0, 2.0, 3.0) self.uniform_buffer.use() self.crate.render((0.0, 0.0, 0.0), 0.2) self.color_material.color = (1.0, 0.0, 0.0) self.car.render((-0.4, 0.0, 0.0), 0.2) self.color_material.color = (0.0, 0.0, 1.0) self.car.render((0.4, 0.0, 0.0), 0.2) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/13_shader_includes.py000066400000000000000000000227651470420062000232450ustar00rootroot00000000000000import math import os import struct import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) def init_includes(): ctx = moderngl.get_context() ctx.includes['uniform_buffer'] = ''' struct Light { vec4 light_position; vec4 light_color; float light_power; }; layout (std140) uniform Common { mat4 camera; vec4 camera_position; Light lights[2]; }; ''' ctx.includes['blinn_phong'] = ''' vec3 blinn_phong( vec3 vertex, vec3 normal, vec3 camera_position, vec3 light_position, float shininess, vec3 ambient_color, vec3 diffuse_color, vec3 light_color, vec3 spec_color, float light_power) { vec3 light_dir = light_position - vertex; float light_distance = length(light_dir); light_distance = light_distance * light_distance; light_dir = normalize(light_dir); float lambertian = max(dot(light_dir, normal), 0.0); float specular = 0.0; if (lambertian > 0.0) { vec3 view_dir = normalize(camera_position - vertex); vec3 half_dir = normalize(light_dir + view_dir); float spec_angle = max(dot(half_dir, normal), 0.0); specular = pow(spec_angle, shininess); } vec3 color_linear = ambient_color + diffuse_color * lambertian * light_color * light_power / light_distance + spec_color * specular * light_color * light_power / light_distance; return color_linear; } ''' ctx.includes['calculate_lights'] = ''' vec3 calculate_lights(vec3 vertex, vec3 normal, vec3 color, vec3 camera_position) { vec3 result = vec3(0.0); for (int i = 0; i < 2; ++i) { result += blinn_phong( vertex, normal, camera_position, lights[i].light_position.xyz, 16.0, color * 0.05, color, lights[i].light_color.rgb, vec3(1.0, 1.0, 1.0), lights[i].light_power ); } return result; } ''' ctx.includes['srgb'] = ''' vec3 srgb_to_linear(vec3 color) { return pow(color, vec3(2.2)); } vec3 linear_to_srgb(vec3 color) { return pow(color, vec3(1.0 / 2.2)); } ''' class UniformBuffer: def __init__(self): self.ctx = moderngl.get_context() self.data = bytearray(1024) self.ubo = self.ctx.buffer(self.data) def set_camera(self, eye, target): proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, target, (0.0, 0.0, 1.0)) camera = proj * look self.data[0:64] = camera.to_bytes() self.data[64:80] = struct.pack('4f', *eye, 0.0) def set_light(self, light_index, position, color, power): offset = 80 + light_index * 48 self.data[offset + 0 : offset + 16] = struct.pack('4f', *position, 0.0) self.data[offset + 16 : offset + 32] = struct.pack('4f', *color, 0.0) self.data[offset + 32 : offset + 36] = struct.pack('f', power) def use(self): self.ubo.write(self.data) self.ubo.bind_to_uniform_block() class ColorMaterial: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core #include "uniform_buffer" uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core #include "uniform_buffer" #include "blinn_phong" #include "calculate_lights" #include "srgb" uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { vec3 color_linear = calculate_lights(v_vertex, v_normal, srgb_to_linear(color), camera_position.xyz); out_color = vec4(linear_to_srgb(color_linear), 1.0); } ''', ) self.color = (1.0, 1.0, 1.0) def use(self): self.program['color'] = self.color def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 8x', 'in_vertex', 'in_normal')]) class TextureMaterial: def __init__(self, texture): self.texture = texture self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core #include "uniform_buffer" uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core #include "uniform_buffer" #include "blinn_phong" #include "calculate_lights" #include "srgb" uniform sampler2D Texture; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { vec3 color = texture(Texture, v_uv).rgb; vec3 color_linear = calculate_lights(v_vertex, v_normal, srgb_to_linear(color), camera_position.xyz); out_color = vec4(linear_to_srgb(color_linear), 1.0); } ''', ) def use(self): self.texture.use() def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 2f', 'in_vertex', 'in_normal', 'in_uv')]) class ImageTexture: def __init__(self, path): self.ctx = moderngl.get_context() img = Image.open(path).convert('RGBA') self.texture = self.ctx.texture(img.size, 4, img.tobytes()) self.sampler = self.ctx.sampler(texture=self.texture) def use(self): self.sampler.use() class ModelGeometry: def __init__(self, path): self.ctx = moderngl.get_context() obj = Obj.open(path) self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty')) class Mesh: def __init__(self, material, geometry): self.ctx = moderngl.get_context() self.vao = material.vertex_array(geometry.vbo) self.material = material def render(self, position, scale): self.material.use() self.vao.program['position'] = position self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() self.uniform_buffer = UniformBuffer() self.texture = ImageTexture('examples/data/textures/crate.png') self.color_material = ColorMaterial() self.texture_material = TextureMaterial(self.texture) self.car_geometry = ModelGeometry('examples/data/models/lowpoly_toy_car.obj') self.car = Mesh(self.color_material, self.car_geometry) self.crate_geometry = ModelGeometry('examples/data/models/crate.obj') self.crate = Mesh(self.texture_material, self.crate_geometry) def render(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.uniform_buffer.set_camera(eye, (0.0, 0.0, 0.0)) self.uniform_buffer.set_light( light_index=0, position=(1.0, 2.0, 3.0), color=(1.0, 1.0, 1.0), power=10.0, ) self.uniform_buffer.set_light( light_index=1, position=(-2.0, -1.0, 4.0), color=(1.0, 1.0, 1.0), power=10.0, ) self.uniform_buffer.use() self.crate.render((0.0, 0.0, 0.0), 0.2) self.color_material.color = (1.0, 0.0, 0.0) self.car.render((-0.4, 0.0, 0.0), 0.2) self.color_material.color = (0.0, 0.0, 1.0) self.car.render((0.4, 0.0, 0.0), 0.2) init_includes() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/14_postprocessing.py000066400000000000000000000267041470420062000231710ustar00rootroot00000000000000import math import os import struct import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) def init_includes(): ctx = moderngl.get_context() ctx.includes['uniform_buffer'] = ''' struct Light { vec4 light_position; vec4 light_color; float light_power; }; layout (std140) uniform Common { mat4 camera; vec4 camera_position; Light lights[2]; }; ''' ctx.includes['blinn_phong'] = ''' vec3 blinn_phong( vec3 vertex, vec3 normal, vec3 camera_position, vec3 light_position, float shininess, vec3 ambient_color, vec3 diffuse_color, vec3 light_color, vec3 spec_color, float light_power) { vec3 light_dir = light_position - vertex; float light_distance = length(light_dir); light_distance = light_distance * light_distance; light_dir = normalize(light_dir); float lambertian = max(dot(light_dir, normal), 0.0); float specular = 0.0; if (lambertian > 0.0) { vec3 view_dir = normalize(camera_position - vertex); vec3 half_dir = normalize(light_dir + view_dir); float spec_angle = max(dot(half_dir, normal), 0.0); specular = pow(spec_angle, shininess); } vec3 color_linear = ambient_color + diffuse_color * lambertian * light_color * light_power / light_distance + spec_color * specular * light_color * light_power / light_distance; return color_linear; } ''' ctx.includes['calculate_lights'] = ''' vec3 calculate_lights(vec3 vertex, vec3 normal, vec3 color, vec3 camera_position) { vec3 result = vec3(0.0); for (int i = 0; i < 2; ++i) { result += blinn_phong( vertex, normal, camera_position, lights[i].light_position.xyz, 16.0, color * 0.05, color, lights[i].light_color.rgb, vec3(1.0, 1.0, 1.0), lights[i].light_power ); } return result; } ''' ctx.includes['srgb'] = ''' vec3 srgb_to_linear(vec3 color) { return pow(color, vec3(2.2)); } vec3 linear_to_srgb(vec3 color) { return pow(color, vec3(1.0 / 2.2)); } ''' ctx.includes['hash13'] = ''' float hash13(vec3 p3) { p3 = fract(p3 * 0.1031); p3 += dot(p3, p3.zyx + 31.32); return fract((p3.x + p3.y) * p3.z); } ''' class FilmGrain: def __init__(self, texture): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core vec2 positions[3] = vec2[]( vec2(-1.0, -1.0), vec2(3.0, -1.0), vec2(-1.0, 3.0) ); void main() { gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0); } ''', fragment_shader=''' #version 330 core #include "hash13" uniform sampler2D Texture; uniform float time; layout (location = 0) out vec4 out_color; void main() { ivec2 at = ivec2(gl_FragCoord.xy); float grain = hash13(vec3(gl_FragCoord.xy, time)) * 0.5 + 0.5; out_color = texelFetch(Texture, at, 0) * grain; } ''', ) self.sampler = self.ctx.sampler(texture=texture) self.vao = self.ctx.vertex_array(self.program, []) self.vao.vertices = 3 def render(self, now): self.ctx.enable_only(self.ctx.NOTHING) self.sampler.use() self.program['time'] = now self.vao.render() class UniformBuffer: def __init__(self): self.ctx = moderngl.get_context() self.data = bytearray(1024) self.ubo = self.ctx.buffer(self.data) def set_camera(self, eye, target): proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, target, (0.0, 0.0, 1.0)) camera = proj * look self.data[0:64] = camera.to_bytes() self.data[64:80] = struct.pack('4f', *eye, 0.0) def set_light(self, light_index, position, color, power): offset = 80 + light_index * 48 self.data[offset + 0 : offset + 16] = struct.pack('4f', *position, 0.0) self.data[offset + 16 : offset + 32] = struct.pack('4f', *color, 0.0) self.data[offset + 32 : offset + 36] = struct.pack('f', power) def use(self): self.ubo.write(self.data) self.ubo.bind_to_uniform_block() class ColorMaterial: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core #include "uniform_buffer" uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core #include "uniform_buffer" #include "blinn_phong" #include "calculate_lights" #include "srgb" uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { vec3 color_linear = calculate_lights(v_vertex, v_normal, srgb_to_linear(color), camera_position.xyz); out_color = vec4(linear_to_srgb(color_linear), 1.0); } ''', ) self.color = (1.0, 1.0, 1.0) def use(self): self.program['color'] = self.color def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 8x', 'in_vertex', 'in_normal')]) class TextureMaterial: def __init__(self, texture): self.texture = texture self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core #include "uniform_buffer" uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core #include "uniform_buffer" #include "blinn_phong" #include "calculate_lights" #include "srgb" uniform sampler2D Texture; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { vec3 color = texture(Texture, v_uv).rgb; vec3 color_linear = calculate_lights(v_vertex, v_normal, srgb_to_linear(color), camera_position.xyz); out_color = vec4(linear_to_srgb(color_linear), 1.0); } ''', ) def use(self): self.texture.use() def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 2f', 'in_vertex', 'in_normal', 'in_uv')]) class ImageTexture: def __init__(self, path): self.ctx = moderngl.get_context() img = Image.open(path).convert('RGBA') self.texture = self.ctx.texture(img.size, 4, img.tobytes()) self.sampler = self.ctx.sampler(texture=self.texture) def use(self): self.sampler.use() class ModelGeometry: def __init__(self, path): self.ctx = moderngl.get_context() obj = Obj.open(path) self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty')) class Mesh: def __init__(self, material, geometry): self.ctx = moderngl.get_context() self.vao = material.vertex_array(geometry.vbo) self.material = material def render(self, position, scale): self.material.use() self.vao.program['position'] = position self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() size = pygame.display.get_window_size() self.screen = self.ctx.texture(size, 4) self.depth = self.ctx.depth_texture(size) self.framebuffer = self.ctx.framebuffer( color_attachments=[self.screen], depth_attachment=self.depth, ) self.uniform_buffer = UniformBuffer() self.texture = ImageTexture('examples/data/textures/crate.png') self.color_material = ColorMaterial() self.texture_material = TextureMaterial(self.texture) self.car_geometry = ModelGeometry('examples/data/models/lowpoly_toy_car.obj') self.car = Mesh(self.color_material, self.car_geometry) self.crate_geometry = ModelGeometry('examples/data/models/crate.obj') self.crate = Mesh(self.texture_material, self.crate_geometry) self.film_grain = FilmGrain(self.screen) def render(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) self.framebuffer.use() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.uniform_buffer.set_camera(eye, (0.0, 0.0, 0.0)) self.uniform_buffer.set_light( light_index=0, position=(1.0, 2.0, 3.0), color=(1.0, 1.0, 1.0), power=10.0, ) self.uniform_buffer.set_light( light_index=1, position=(-2.0, -1.0, 4.0), color=(1.0, 1.0, 1.0), power=10.0, ) self.uniform_buffer.use() self.crate.render((0.0, 0.0, 0.0), 0.2) self.color_material.color = (1.0, 0.0, 0.0) self.car.render((-0.4, 0.0, 0.0), 0.2) self.color_material.color = (0.0, 0.0, 1.0) self.car.render((0.4, 0.0, 0.0), 0.2) self.ctx.screen.use() self.film_grain.render(now) init_includes() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/15_pillow_overlay.py000066400000000000000000000332631470420062000231550ustar00rootroot00000000000000import math import os import struct import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image, ImageDraw, ImageFont os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) def init_includes(): ctx = moderngl.get_context() ctx.includes['uniform_buffer'] = ''' struct Light { vec4 light_position; vec4 light_color; float light_power; }; layout (std140) uniform Common { mat4 camera; vec4 camera_position; Light lights[2]; }; ''' ctx.includes['blinn_phong'] = ''' vec3 blinn_phong( vec3 vertex, vec3 normal, vec3 camera_position, vec3 light_position, float shininess, vec3 ambient_color, vec3 diffuse_color, vec3 light_color, vec3 spec_color, float light_power) { vec3 light_dir = light_position - vertex; float light_distance = length(light_dir); light_distance = light_distance * light_distance; light_dir = normalize(light_dir); float lambertian = max(dot(light_dir, normal), 0.0); float specular = 0.0; if (lambertian > 0.0) { vec3 view_dir = normalize(camera_position - vertex); vec3 half_dir = normalize(light_dir + view_dir); float spec_angle = max(dot(half_dir, normal), 0.0); specular = pow(spec_angle, shininess); } vec3 color_linear = ambient_color + diffuse_color * lambertian * light_color * light_power / light_distance + spec_color * specular * light_color * light_power / light_distance; return color_linear; } ''' ctx.includes['calculate_lights'] = ''' vec3 calculate_lights(vec3 vertex, vec3 normal, vec3 color, vec3 camera_position) { vec3 result = vec3(0.0); for (int i = 0; i < 2; ++i) { result += blinn_phong( vertex, normal, camera_position, lights[i].light_position.xyz, 16.0, color * 0.05, color, lights[i].light_color.rgb, vec3(1.0, 1.0, 1.0), lights[i].light_power ); } return result; } ''' ctx.includes['srgb'] = ''' vec3 srgb_to_linear(vec3 color) { return pow(color, vec3(2.2)); } vec3 linear_to_srgb(vec3 color) { return pow(color, vec3(1.0 / 2.2)); } ''' ctx.includes['hash13'] = ''' float hash13(vec3 p3) { p3 = fract(p3 * 0.1031); p3 += dot(p3, p3.zyx + 31.32); return fract((p3.x + p3.y) * p3.z); } ''' class FilmGrain: def __init__(self, texture): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core vec2 positions[3] = vec2[]( vec2(-1.0, -1.0), vec2(3.0, -1.0), vec2(-1.0, 3.0) ); void main() { gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0); } ''', fragment_shader=''' #version 330 core #include "hash13" uniform sampler2D Texture; uniform float time; layout (location = 0) out vec4 out_color; void main() { ivec2 at = ivec2(gl_FragCoord.xy); float grain = hash13(vec3(gl_FragCoord.xy, time)) * 0.5 + 0.5; out_color = texelFetch(Texture, at, 0) * grain; } ''', ) self.sampler = self.ctx.sampler(texture=texture) self.vao = self.ctx.vertex_array(self.program, []) self.vao.vertices = 3 def render(self, now): self.ctx.enable_only(self.ctx.NOTHING) self.sampler.use() self.program['time'] = now self.vao.render() class Overlay: def __init__(self, size): self.ctx = moderngl.get_context() self.img = Image.new('RGBA', size) self.draw = ImageDraw.Draw(self.img) self.draw.font = ImageFont.truetype('examples/data/fonts/OpenSans/OpenSans-Medium.ttf', 20) self.texture = self.ctx.texture(size, 4) self.program = self.ctx.program( vertex_shader=''' #version 330 core vec2 positions[3] = vec2[]( vec2(-1.0, -1.0), vec2(3.0, -1.0), vec2(-1.0, 3.0) ); void main() { gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0); } ''', fragment_shader=''' #version 330 core uniform sampler2D Texture; layout (location = 0) out vec4 out_color; void main() { ivec2 at = ivec2(gl_FragCoord.xy); at.y = textureSize(Texture, 0).y - at.y - 1; out_color = texelFetch(Texture, at, 0); } ''', ) self.sampler = self.ctx.sampler(texture=self.texture) self.vao = self.ctx.vertex_array(self.program, []) self.vao.vertices = 3 self.clock = pygame.time.Clock() self.fps = 0.0 def render(self): self.clock.tick() mouse = pygame.mouse.get_pos() now = pygame.time.get_ticks() / 1000.0 self.fps = self.fps * 0.95 + self.clock.get_fps() * 0.05 self.draw.rectangle((0, 0, *self.img.size), fill=(0, 0, 0, 0)) self.draw.text((100, 100), f'fps: {self.fps:.2f}', fill='#fff') self.draw.text((100, 130), f'elapsed: {now:.2f}s', fill='#f00') self.draw.text((100, 160), f'mouse: {mouse}', fill='#fff') rect = self.draw.textbbox((0, 0), 'Hello, World!') pos = mouse[0] - (rect[0] + rect[2]) / 2, mouse[1] - 40 self.draw.text(pos, 'Hello, World!', fill='#fff') self.texture.write(self.img.tobytes()) self.ctx.enable_only(self.ctx.BLEND) self.sampler.use() self.vao.render() class UniformBuffer: def __init__(self): self.ctx = moderngl.get_context() self.data = bytearray(1024) self.ubo = self.ctx.buffer(self.data) def set_camera(self, eye, target): proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, target, (0.0, 0.0, 1.0)) camera = proj * look self.data[0:64] = camera.to_bytes() self.data[64:80] = struct.pack('4f', *eye, 0.0) def set_light(self, light_index, position, color, power): offset = 80 + light_index * 48 self.data[offset + 0 : offset + 16] = struct.pack('4f', *position, 0.0) self.data[offset + 16 : offset + 32] = struct.pack('4f', *color, 0.0) self.data[offset + 32 : offset + 36] = struct.pack('f', power) def use(self): self.ubo.write(self.data) self.ubo.bind_to_uniform_block() class ColorMaterial: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core #include "uniform_buffer" uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core #include "uniform_buffer" #include "blinn_phong" #include "calculate_lights" #include "srgb" uniform vec3 color; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { vec3 color_linear = calculate_lights(v_vertex, v_normal, srgb_to_linear(color), camera_position.xyz); out_color = vec4(linear_to_srgb(color_linear), 1.0); } ''', ) self.color = (1.0, 1.0, 1.0) def use(self): self.program['color'] = self.color def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 8x', 'in_vertex', 'in_normal')]) class TextureMaterial: def __init__(self, texture): self.texture = texture self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core #include "uniform_buffer" uniform vec3 position; uniform float scale; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = position + in_vertex * scale; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core #include "uniform_buffer" #include "blinn_phong" #include "calculate_lights" #include "srgb" uniform sampler2D Texture; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { vec3 color = texture(Texture, v_uv).rgb; vec3 color_linear = calculate_lights(v_vertex, v_normal, srgb_to_linear(color), camera_position.xyz); out_color = vec4(linear_to_srgb(color_linear), 1.0); } ''', ) def use(self): self.texture.use() def vertex_array(self, buffer): return self.ctx.vertex_array(self.program, [(buffer, '3f 3f 2f', 'in_vertex', 'in_normal', 'in_uv')]) class ImageTexture: def __init__(self, path): self.ctx = moderngl.get_context() img = Image.open(path).convert('RGBA') self.texture = self.ctx.texture(img.size, 4, img.tobytes()) self.sampler = self.ctx.sampler(texture=self.texture) def use(self): self.sampler.use() class ModelGeometry: def __init__(self, path): self.ctx = moderngl.get_context() obj = Obj.open(path) self.vbo = self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty')) class Mesh: def __init__(self, material, geometry): self.ctx = moderngl.get_context() self.vao = material.vertex_array(geometry.vbo) self.material = material def render(self, position, scale): self.material.use() self.vao.program['position'] = position self.vao.program['scale'] = scale self.vao.render() class Scene: def __init__(self): self.ctx = moderngl.get_context() size = pygame.display.get_window_size() self.screen = self.ctx.texture(size, 4) self.depth = self.ctx.depth_texture(size) self.framebuffer = self.ctx.framebuffer( color_attachments=[self.screen], depth_attachment=self.depth, ) self.uniform_buffer = UniformBuffer() self.texture = ImageTexture('examples/data/textures/crate.png') self.color_material = ColorMaterial() self.texture_material = TextureMaterial(self.texture) self.car_geometry = ModelGeometry('examples/data/models/lowpoly_toy_car.obj') self.car = Mesh(self.color_material, self.car_geometry) self.crate_geometry = ModelGeometry('examples/data/models/crate.obj') self.crate = Mesh(self.texture_material, self.crate_geometry) self.film_grain = FilmGrain(self.screen) self.overlay = Overlay(size) def render(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now), math.sin(now), 0.5) self.framebuffer.use() self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST) self.uniform_buffer.set_camera(eye, (0.0, 0.0, 0.0)) self.uniform_buffer.set_light( light_index=0, position=(1.0, 2.0, 3.0), color=(1.0, 1.0, 1.0), power=10.0, ) self.uniform_buffer.set_light( light_index=1, position=(-2.0, -1.0, 4.0), color=(1.0, 1.0, 1.0), power=10.0, ) self.uniform_buffer.use() self.crate.render((0.0, 0.0, 0.0), 0.2) self.color_material.color = (1.0, 0.0, 0.0) self.car.render((-0.4, 0.0, 0.0), 0.2) self.color_material.color = (0.0, 0.0, 1.0) self.car.render((0.4, 0.0, 0.0), 0.2) self.ctx.screen.use() self.film_grain.render(now) self.overlay.render() init_includes() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/README.md000066400000000000000000000013661470420062000205050ustar00rootroot00000000000000# ModernGL Examples ``` pip install moderngl numpy objloader pillow pygame-ce pyglm ``` - [01_hello_world](01_hello_world.py) - [02_shader](02_shader.py) - [03_camera](03_camera.py) - [04_vertex_buffer](04_vertex_buffer.py) - [05_uniforms](05_uniforms.py) - [06_multiple_objects](06_multiple_objects.py) - [07_different_geometries](07_different_geometries.py) - [08_texture](08_texture.py) - [09_models_and_images](09_models_and_images.py) - [10_lighting](10_lighting.py) - [11_multiple_programs](11_multiple_programs.py) - [12_uniform_buffer](12_uniform_buffer.py) - [13_shader_includes](13_shader_includes.py) - [14_postprocessing](14_postprocessing.py) - [15_pillow_overlay](15_pillow_overlay.py) - [16_moderngl_water(Webgl Water)](water/water_main.py) moderngl-moderngl-773b733/examples/data/000077500000000000000000000000001470420062000201315ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/data/colormaps/000077500000000000000000000000001470420062000221305ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/data/colormaps/fractal.png000066400000000000000000000002321470420062000242470ustar00rootroot00000000000000‰PNG  IHDR¾;ç pHYsHHFÉk>LIDAT(ÏÕŽ; À0 C_AƒîÚ :ã”tp …ŒÐ3òçC]Ãzl8MŠŒæçY߬Rpêƒ(Cj;æµüWßùW5NŸ~ž;IDIEND®B`‚moderngl-moderngl-773b733/examples/data/fonts/000077500000000000000000000000001470420062000212625ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/data/fonts/OpenSans/000077500000000000000000000000001470420062000230105ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/data/fonts/OpenSans/OpenSans-Medium.ttf000066400000000000000000003776401470420062000265140ustar00rootroot00000000000000 GDEF¯«µUp¾GPOS›Ýèvvt9ôGSUBceœOS/2–¤ƒA`STAT_@ݸZcmapÃ8€Ðöcvt =B,ÈtüfpgmâžZ-¤”gasp#,glyf`^N°hO6head¹ê€6hhea à \$hmtx³µ6×=8Îloca•ãD Èêmaxpû¥< namemãy‘´ èpost&¬œœO'jprep…ý{é0Ÿ ÿÿt‘_/š¾ƒý¨ àûxý" ØsÅx~Û|_<õ ÙÌÂ÷á{Û©ûxýÈ Øe,wdthwghtital"ôd¦ô3Íš3ÍÍ2’àÿ@ (GOOGÀÿýý¨þ‹ŸH¶  ¶¶Kÿêÿìÿêþÿþ¶ÿ먪––¦‚‚«–qŸ©¦ÈmŠškŽ›z¤:„š¢Šî…xH…zšžª³–q…™Ÿ¤©°›¦¬Èmz‚Ššk‚Š’› ¦z£«¯ƒŒ˜:q€‡›¥}†‹•›¥®îx~ˆ“Hy€†‹”š§Âz ÿ8ž§p>#STttvv 5 "%7$=D]ll||‚’˜š¸ºÞààââääæéëëííïïññôISTUUWXZeguwŸ¢55JJMMORTWYv}~‚°²µ·ÄÆ1335amsttuuvvz„ŠŽ”•—¤¦¬®°³³¶¾ÀÀÉã%oprs@ÿz g=ÿ<ÿ;r:ÿ9O7@Â6^43O10+)(O(\'-&%@%\$1#"ÿ!g @\ÿÿ2[87[2[87[>ÿZ1U1UYY 2 U2U YYïÿU 2 U2U_UY YYÏïYo¯ï 2U2UYYï@@¸°T+K¸ÿRK° P[°ˆ°%S°ˆ°@QZ°ˆ°UZ[X±ŽY…BK°SX²BY±CQX±ŽYBs++++ss+s+++++++s++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++âà€` ~01ac’¡°íðÿ7Y¼ÇÉÝó #(ŠŒ¡ÎÒÖ  OP\_‚†‘½¾ÂÇê?…žñóùMÞ   " & 0 3 : < D p z  ‰ Š Ž œ ¤ § ¬!!!! !"!&!.!^""""""""+"H"`"e%ʧµ«Sûû6û<û>ûAûDûKþÿÿýÿÿ  12bd’ ¯êðú7Y¼ÆÉØó#&„ŒŽ£ÑÖ PQ]`ƒˆ’°¾ÁÇÐ>€ž òôMÞ   & 0 2 9 < D p t | € Š Œ • £ § ª!!!! !"!&!.![""""""""+"H"`"d%ʧ³«Sûû*û8û>û@ûCûFþÿÿüÿÿÿõÿãÿÂ~ÿÁ ÿÁÿ¯´§…ZÿHyÿþ„þƒþuÿ`ýûëýÏýÎýÍýÌþ{þxþYýšþMý™þ ý˜ýýýøýgýöþeþ¥þbþ^ýùäQäãyäñäjã ähä(ã˜â;áîáíáìáéáàáßáÚáÙáÒããÙãàã,áuásáá áãNàýàúàóàÇà$à!ààâWàààßæßÏßÌÜhX_Šº¹¸·¶µHLĺÀ¬®|ˆŠˆdHI#$t   5\õö78x9:yhidfkegmb‘±)GŸeÙí>oŽ«¼×ì,RŽáa¹Õ=–Ãó+I–"W¢Þ3S˜¼Îó  5 n œ Þ  ` › ð 7 a µ à  & A V p Œ ž À  ^ • á!WÚ8o¥·7rÃAŽÄø s ßJ[¢ÛÛCŒ?XÊøi¶î ‘Åð%o‘Ðú1W‡»vøDVhzŒŸ«çó)<N`r…ÇÙëý!4g×éû  2kÊÜî#7¹Å×éû  / A T · É Û í ÿ!!#!Z!Â!Ô!æ!ø" ""m""‘"£"µ"Ç"Ó"ß"ñ###'#9#K#]#o##”#œ#ó$$$)$;$M$_$k$Ñ$ã$õ%%%+%>%P%c%o%€%’%¥%Ý&"&5&G&Z&k&~&&›&¦&¹&Å&Ñ&ã&õ'' '@'R'd'o'{'Ž' '¬'¸'á(((*(6(B(T(f(r(¶(þ))")4)F)Y)l)Å*5*G*Y*e*q*ƒ*”*¦*¸*Ê*Û*ç*ó+++!+,+>+J+x+¹+Ë+Ý+ï,,,%,9,M,`,s,Ä,Ð,â,ô---*-<-N-`-r-„-•-»..o.û/ //1/C/N/Y/†/µ/È/ï0 080b0™0Ò0ò141@1I1V1c1p1|1‰1•1ª1²1º1Ñ22 222h2p2x2¢2ª2²2Ø2à2ú3393A3I3œ3¤3â4/4B4U4f4w4ˆ4š4­5 5i5Ÿ5ú6J6—6Ë7757=7“7›7Ç8.868l8²8÷979g9–9é:<:€:Ù:ì:þ;; ;2;E;‡;™;ß;ç;ï<< 5>h>z>Ÿ>Ú>â>ê>ò>ú?? ??R?Z?b?†?µ?Ø@@7@p@Ÿ@åA:AtA|AßB)B@BxB€B¸C C;CLCrC¤CÚCÿDD"D*D2DODWD¨D°DÕEE+EXEEÈEûF:FˆF¾FÐG(G:GzG‚GŠGG¥GöH9HAHSHdH†H¢H¾HÐHâHôIII,I>IPIaIrIzI”I²IÑIÚIøJ*J]JfJŽJÏJïJÿKƒK–KµKÓKñKýLLALoLÁMMMèN>NœNâNêO/O°PVPóQiQÈQÐQêRR%RHR¨RÝRêS"S.S:SdSŠSªS³SÒTTDT_T¸T¸T¸T¸T¸T¸T¸T¸T¸T¸T¸T¸T¸T¸U¤UøV VVVÍW/WAWSW_WtW¢WøXHX‰XÒYYY%Y7YIY¤YûZ;Z{ZÐ[ [`[ž[ð\>\Ž\Ý]A]¢^>^Ú^â^ê_5_z_¹_ö` ``•`¡a apb*b×bébûc8crc¥dZdêe?e’eÒffdfÎf÷g gjg¯gðh1h=hIhyh©hÛi iQdxŒ ´ÈÜò‚‚‚,‚>‚P‚b‚t‚†‚˜‚¤‚°‚¼‚Ȃڂì‚þƒƒ"ƒ4ƒFƒXƒjƒ|ƒˆƒ”ƒ ƒ¬ƒ¾ƒÐƒâƒó„„G„‰„ß…5…n…¦…î†9†`†ˆ†”† †¬†¸†Î†ä‡%‡-‡C‡€‡­‡üˆJˆ`ˆvˆŒˆ¢ˆ¸ˆÎˆäˆú‰B‰J‰–‰ôŠUŠ¢Šð‹‹$‹0‹<‹L‹\‹±ŒŒQŒdŒwŒƒŒŒ¡Œ­ŒÙŒÿ#5HZl~Š•§³Å×ãðøŽ ŽŽ&Ž.Ž6ŽHŽmŽuŽ}ŽŽŽ Ž´+7B™÷ -ÕÝ‘‘?‘P‘œ‘Ë’’\’’Ù““X“€“À“Ò””=”š”°”ì•I•l•ª– –2–p–×——i—昘Z˜˜˜É™™n™€™’™¨™¾™Ê™Ö™â™î™úšššš(š4š@šLšXšdšpš|šˆš”š š¬š¸šÄšÐšÜšîš÷›› ›››$›-›6›?›H›Q››–›±›º›Ã›éœœ9œfœ“œõ-k„±óžžž3žMžž¦ž¸žÑžëŸŸŸŸ Ÿ)Ÿ2Ÿ;ŸDŸMŸVŸ_ŸŸŸÆ  R ‰ Ï¡&¡@¡§¡þ¢¢¢¢"¢+¢4¢=¢F¢O¢X¢¢²¢í£>£u£»¤¤0¤™¤ï¥=¥E¥M¥U¥]¥e¥m¥u¥}¥…¥¥–¥Ÿ¥¨¥±¥º¥Ã¥Ì¥Õ¥Þ¥ç¥ø¦¦!¦B¦K¦i¦‚¦‹¦”¦œ¦á§V§^§f§„§§›.. ¬  î à 4¬  î ’ t ¤Ð *¦ (~ B< >þ < "  4l Z  N 4  (     à  ü ê  Ì  "ª  $†  j  &D & *ô ,È $¤ .v 8> < >Ä 6Ž @N < "    N    RomanItalicNormalSemiCondensedCondensedOpenSansRoman-CondensedExtraBoldOpenSansRoman-CondensedBoldOpenSansRoman-CondensedSemiBoldOpenSansRoman-CondensedRegularOpenSansRoman-CondensedLightOpenSansRoman-ExtraBoldOpenSansRoman-BoldOpenSansRoman-SemiBoldOpenSansRoman-RegularOpenSansRoman-LightCondensed ExtraBoldCondensed BoldCondensed SemiBoldCondensed RegularCondensed LightExtraBoldBoldSemiBoldLightWidthWeightOpenSansRomanMediumOpen Sanshttp://scripts.sil.org/OFLThis Font Software is licensed under the SIL Open Font License, Version 1.1. This license is available with a FAQ at: https://scripts.sil.org/OFLhttp://www.monotype.com/studiohttp://www.google.com/get/noto/Designed by Monotype design team.Monotype Design TeamMonotype Imaging Inc.Open Sans is a trademark of Google and may be registered in certain jurisdictions.OpenSans-MediumVersion 3.0033.003;GOOG;OpenSans-MediumRegularOpen Sans MediumCopyright 2020 The Open Sans Project Authors (https://github.com/googlefonts/opensans) Â`DFLTˆcyrlgrekìhebr¼latn pAPPHBCAT IPPHæMAH ¸MOL ŠNAV \ROM .ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ pMKD >SRB ÿÿ ÿÿ ÿÿ  aalt–ccmpŽccmp~ccmptccmpjccmp^dnomXfracNligaHlnumBlocl&àšTüÖdP}A6˜™š›œžŸ ¡£¤¥¨©ª«¬­®À¦§¢,-Ž‘êìîðòóõYfv ¡¢¶Å24–º»¼½³Jßáãå;6& ŒO‹LŠIŽIOILI.OPQRSTUVWXDEFGHIJKLM09 .OPQRSTUVWX09DM .0123456789DEFGHIJKLMOX ÿìDMl|l|$2DR$ º2R $D>ÿì& .&/:C'$dfhw{tu78x9:yi  Q2egjYZ[\]^_`abkÁÂÃÄÅÆÇÈ  KNOPQSVWõÊ‘±²_s~“y/yO &/OyO y/’´“µüýHI#$ mn”¶•·–¸—¹ÆÇÚÛðñ34r h^TJ@6,"ÿ!þ!ý!ü!ú!ù!ø!î!ê! ÉÍÚÜÝàáâãn< ( ~€( z{|}…‘’ ˆ~t`VLB8$4 prLñÛÇ3 oqLðÚÆ $(,28DHLRX^¯°rops* B25"tt LMñîð5f0øêÜÎÀ²¤–ˆztnhbZTNHB<60*$ úôîèâÜÖÐÊľ¸²¬¦  QQðñ  09DMOX&9M8L7K6J5I4H3G2F1E0D9X8W7V6U5T4S3R2Q1P0OMLKJIHGFED‚ƒ„¸r–¡Åiky/9CXb:.8BWa9-7AV`x,6@U_8+5?T^7*4>S]u)3=R\t(2<Q[{'1;PZw&0:NOYhjfgdešJl˜™|lºÁ¯°ÂÃÄ|ÆÇÈš›œ”¶•·»¼½³žŸ £¤¥’´“µHI—¹¨‘©ª±²«¬­¿op®À¦§s#$¢&'()*+,-./J$,-2DJKLMNOPRSVWŽ‘ÆÇÚÛßáãåêìîòóõüý 34Y_fsv~“ ¡¢Êîð¶Å245mn–:;<=>?@ABC@J™˜—–‡†…„ƒ‚€~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSQPONMLKJIHGF( ,± C#Ce -,± C#C -,°C°Ce -,°O+ °@QX!KRXED!!Y#!°@°%E°%EadŠcRXED!!YY-,°C°C -,KS#KQZX EŠ`D!!Y-,KTX EŠ`D!!Y-,KS#KQZX8!!Y-,KTX8!!Y-,°CTX°F+!!!!Y-,°CTX°G+!!!Y-,°CTX°H+!!!!Y-,°CTX°I+!!!Y-,# °PŠŠd±%TX°@±%TX°C‹Y°O+Y#°b+#!#XeY-,± !T`C-,± !T`C-, G°C ¸b¸cW#¸b¸cWZX° `fYH-,±%°%°%S¸5#x°%°%`° c °%#bPXŠ!°`# °%#bRX#!°aŠ!#! YY¸ÿÁ`° c#!-,±B±#ˆQ±@ˆSZX¸° ˆTX²C`BY±$ˆQX¸ °@ˆTX²C`B±$ˆTX² C`BKKRX²C`BY¸@°€ˆTX²C`BY¸@°€c¸ˆTX²C`BY¹@c¸ˆTX²C`BY±&ˆQX¹@c¸ˆTX²@C`BY¹@c¸ˆTX²€C`BY±(ˆQX¹@c¸ˆTX¹°C`BYYYYYYY±CTX@ @@ @  ±CTX²@º ³  ±€CRX²@¸€± @¸°CRX²@º€ @¸€°CRX²@¸± @²@º YYY¸@°€ˆU¹@c¸ˆUZX³ ³ YYYBBBBB-,E±N+#°O+ °@QX!KQX°%E±N+`Y#KQX°%E dŠc°@SX±N+`!Y!YYD-, °P X#e#Y±ŠpE±CKŠCQZX°@°O+Y#±a&`+ŠX°C‹Y#XeY#:-,°%Ic#F`°O+#°%°%I°%cV `°b`+°% FŠF`° ca:-,°±%±%>>± ° #eB° #B±%±%??± °#eB°#B°±CTXE#E iŠc#b °@PXgfYa° c°@#a°#B±B!!Y-, E±N+D-,KQ±@O+P[X E±N+ ŠŠD ±@&aca±N+D!#!ŠE±N+ Š#DDY-,KQ±@O+P[XE а@ac`#!EY±N+D-,#E ŠE#a d°@Q°% °S#°@QZZ±@O+TZXŠ d#d#SX±@@Ša ca cYŠYc±N+`D-,-,-,± C#Ce -,± C#C -,°%cf°%¸ b`#b-,°%c° `f°%¸ b`#b-,°%cg°%¸ b`#b-,°%cf° `°%¸ b`#b-,#J±N+-,#J±N+-,#ŠJ#Ed°%d°%ad°CRX! dY±N+#°PXeY-,#ŠJ#Ed°%d°%ad°CRX! dY±N+#°PXeY-, °%J±N+Š;-, °%J±N+Š;-,°%°%аg+Š;-,°%°%аh+Š;-,°%F°%F`°%.°%°%°& °PX!°j°lY+°%F°%F`a°€b Š #:# #:-,°%G°%G`°%G°€ca°%°%Ic#°%J°€c Xb!Y°&F`ŠFŠF`° ca-,°&°%°%°&°n+ Š #:# #:-,# °TX!°%±N+°€P `Y `` °QX!! °QX! fa°@#a±%P°%°%PZX °%aŠSX!°Y!Y°TX fae#!!!°YYY±N+-,°%°%J°SX°ŠŠ#аY°%F fa °&°&I°&°&°p+#ae° ` fa° ae-,°%F Š °PX!±N+E#!Yae°%;-,°& ¸b ¸cŠ#a °]`+°%ŠŠ 9ŠX¹]°&cV`+#!  F ±N+#a#! Š I±N+Y;-,¹]° %cV`+°%°%°&°m+±]%`+°%°%°%°%°o+¹]°&cV`+ °RX°P+°%°%°%°%°%°q+°8°R°%°RZX°%°%I°%°%I` °@RX!°RX °TX°%°%°%°%I°8°%°%°%°%I°8YYYYY!!!!!-,¹]° %cV`+°%°%°%°%° %° %° %°%°n+°8°%°%°&°m+°%°%°&°m+°P+°%°%°%°q+°%°%°%°8 °%°%°%°q+`°%°%°%e°8°%°%` °@SX!°@a#°@a#¸ÿÀPX°@`#°@`#YY°%°%°&°8°%°%а8 °RX°%°%I°%°%I` °@RX!°RX°%°%°%°%° %° %I°8°%°%°%°%° %° %°%°q+°8°%°%°%°%°%°q+°8°%°%¸ÿÀ°8YYY!!!!!!!!-,°%°%‡°%°%Š °PX!°e°hY+d°%°%°%°%I c°% cQ±%T[X!!#! c°% ca °S+Šc°%°%‡°%°&J°PXeY°& F#F°& F#F°°#H°#H °#H°#H °#H°#H#²#8² #8±°Y-,# Šc#Šc`d¹@cPX°8eS“c N“M&Ž“`“©“`“Y“*“|“i“T“_“^&Ž&A“c“l“c‹,r-8Ä|ÖÄtÄ2ÄÐ|ôÄWÄFÿ_ÄCÄHÄ%ÄB|ÞÄB|Ädfwã¶áyÍš˜G   3“HsÿücR‹\ð«çmðmmË!cÿ«  ÿ‹e« «…«ÿ«Ùmð«ðl\«Ûe$ÿ¡#]L %ÊJ 3fã G“c(Ž“¯“H“w“fãv±.¨dâ?4P“c“M¨dÿúml“cØ3Ø+cR«=x&޾ ØPA4N=[,\/‹6------ÿÿ|tÄtÄtÄtÄWÿàW¸WÿÃWÖ7%ÄB|B|B|B|B|“„B|ã¶ã¶ã¶ã¶šÞÄ(«‹\‹\‹\‹\‹\‹\\çmmmmm ÿç Œ ÿª ÿæÖlÿ«ÙmÙmÙmÙmÙm“cÙmÿ¡ÿ¡ÿ¡ÿ¡%ð«%-‹\-‹\-‹\|çm|çm|çm|çmÖÄðmÖ7úmtÄmtÄmtÄmtÄmtÄmÐ|cÐ|cÐ|cÐ|côÄÿÿ­ôÿWÿ¯ ÿWÿö ÿÛWÿà ÿÌWd <W¹Ä@Fÿ_ ÿ‹Äe«e«C£ ŒCÄ †CÄ «CÄK«C ÿï%Äÿ«%Äÿ«%Äÿ«™%Äÿ«B|ÙmB|ÙmB|Ùm|¥kÄ\«Ä\ƒÄ\†dfÛedfÛedfÛedfÛew$w$w$ã¶ÿ¡ã¶ÿ¡ã¶ÿ¡ã¶ÿ¡ã¶ÿ¡ã¶ÿ¡y]š%š˜GÊJ˜GÊJ˜GÊJ´«“À.ÿÿ‹\ÿÿ\B|ÙmdfÛevRvRR;RRpRR R¡Ržþž 7 &Ž)ÿÿ©ÿÿÿÿ¢ÿÿãÿÿžÿöÚÿÑ-8Ä>ÄË*tĘGôÄB|WÄÄëHÄ%ÄrGB|ÜÄÞÄ–Jwš€f͉oBIWšömúVÿ«Ú¦óžöm«4×kúVâmÿ«ÈlÚ¦e«qÿù«p×kÙmbØ™ämúmêóžãmsÿè3ž_rÚÿëóžÙmóž_rtÄ>Ä0|dfWÄWFÿ_œÁÄÄÜÄ-óÄ8Ä>Ä¢ tÄïËV5Æ5ÆÄ¶HÄôÄB|ÜÄÞÄ|w€fÍüÄž™YÄsÄ’ çÄÄAmÄ ‹\Ðp´«‹«Ç%m(FA«A«W«¹ ««Ùm«ð«çmî+%ìkL "«ô’G«[«‹O«Ä«ýC»«‚mÿ‹«mÛe  ÿæ ÿ‹Ð «ÿW«%«SÄ «y]y]y]š%RRRGÿüss Asûû{A€w™aŽ –\ýTwTŠPŠNŽþ?p“O“Ie¥“8u$^+¶! BIôf·<·+·N·U£[Ë*é¿ B“cd%¤t “c“c“c“c©gž½~ÿwtØØDØ:Ø2ªV“&TÍTT ÿ‹s)¨ HÄ…«-‹\ªnV|mh¶¡üútÄ5ÆmA«f2u'enÄ«€£„Äa«ò ÄÍ«Â:‰o3žE|Ùm2C2C à|Öm‘|BmJ|Mwf2u'0{ümÞlé+¦+zÄ«ð-ËçÄð«E.“ ZÄa«_ŒËVF{Ä™«ÄW«#e“  .Äd«†Äç«™Äõ«6| m|çmwì+š%š%1‹ ä+Ì™$’ž™ì’žÅÿ«ð*d"ð*d"WÄï(§Ä£«óï èÄ «8Äk«ž™ô’†ÄM«WÄ-‹\-‹\ÿÿ\tÄmƒfƒfï(ËVF¯E$5ÆA«5ÆA«B|ÙmE|ÙmE|ÙmAýC%%%ž™ô’FÄ‹«çÄO«E.“ ,‹ ÍL ñvðm8u4k7?ŠJ$?zOìú &Ä^«"|&mÄ]+ÍiúVáì -‹\-‹\-‹\-‹-‹\-‹\-‹\-‹\-‹\-‹\-‹\-‹\tÄmtÄmtÄmtÄmt8/tÄmtÄmtÄmW wWµ B|ÙmB|ÙmB|ÙmB|Ù@B|ÙmB|ÙmB|ÙmV|mV|mV|mV|mV|mã¶ÿ¡ã¶ÿ¡h¶¡h¶¡h¶¡h¶¡h¶¡š%š%š%úmü_ûxü_ü^üdüdüdü\¥'Üw$B|ÙmB|ÙmfüúŸ¤XØ)Ø,Ø%ÚÿáÚÿâÚÿÑÚÿÒóžóžóžóžÓÃ%Ä·WWff¤³–!ë!ë!µ!µ!¿·;ÿé,ÀCÄ%Ä-tÄWdã¶ÇR_8Ç;ÇRÇÿÿÇ:ÇÿáÇ.Ç ÇRÇRÇR R_8ÇRÇRÐÿÿÇRÇ:ÇRÇ:_8ÇR « ÿ‹«sÿèðm Iÿ«‹\m <ÿ¡ðmðmðmðm~ÿð×kÇR?pÛpbpäp?p5pBõÓqKW\6,«"«GK«¢ž$ðEÿ:¦d]qoÕjÍ?òTÍj –LÚ«,ÏW60ÏWÏWÏWÏWÓqÓqÓqKW\6,«"ÿ¼GÿÊ¢ÿ¾$ðEÿ:dqoÕjòTÍj–LÚ«,ÏW60"«üýxþ˜ü þËþ·ÿþÖÿþ÷þ˜ûÆÿXý"ÿ1ÿRý<ý?üQüYÿ¼þžþÐþÐÿ¶ÿ ÿ ÿEÿGÿ·ÿ»ÿÿ»ÿÐÿ»ÿ¶ÿPØ)ØPØ3Ø+ØØDØ,Ø:Ø2Ø%µr¡-nM‹U-‹x r¹t dØ)ØPØ3Ø+ØØDØ,Ø:Ø2Ø%¹lN"`TT<—.ƒuoL*“_\“`mEm…m]mGmmbmUmCmMmDØ)ØPØ3Ø+ØØDØ,Ø:Ø2Ø%“MÔOÔOÔ<Ô<ºHºHºHºH®_f « ÿ‹o =¢ÿœ2t  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a£„…½–膎‹©¤Šƒ“ ˆÃÞ žªõôö¢­ÉÇ®bcdËeÈÊÏÌÍÎéfÓÐѯgð‘ÖÔÕhëí‰jikmln oqprsutvwêxzy{}|¸¡~€ìîº   ýþÿ !"#øù$%&'()*+,-./0123ú456789:;<=>?@ABâãCDEFGHIJKLMNOPQ°±RSTUVWXYZ[ûüäå\]^_`abcdefghijklmnopq»rstuæçv¦wxyz{|}~ØáÚÛÜÝàÙ߀‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·›¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+²³,-¶·Ä.´µÅ‚‡«Æ/0¾¿1¼2÷345678Œ9:;<=>˜?š™ï¥’œ§”•¹@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—ÀÁ˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹×º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}NULLCRuni00A0uni00AD overscoreuni00B2uni00B3uni00B5uni00B9AmacronamacronAbreveabreveAogonekaogonek Ccircumflex ccircumflexCdotcdotDcarondcaronDcroatEmacronemacronEbreveebreve Edotaccent edotaccentEogonekeogonekEcaronecaron Gcircumflex gcircumflexGdotgdotuni0122uni0123 Hcircumflex hcircumflexHbarhbarItildeitildeImacronimacronIbreveibreveIogonekiogonekIJij Jcircumflex jcircumflexuni0136uni0137 kgreenlandicLacutelacuteuni013Buni013CLcaronlcaronLdotldotNacutenacuteuni0145uni0146Ncaronncaron napostropheEngengOmacronomacronObreveobreve Ohungarumlaut ohungarumlautRacuteracuteuni0156uni0157RcaronrcaronSacutesacute Scircumflex scircumflexuni021Auni021BTcarontcaronTbartbarUtildeutildeUmacronumacronUbreveubreveUringuring Uhungarumlaut uhungarumlautUogonekuogonek Wcircumflex wcircumflex Ycircumflex ycircumflexZacutezacute Zdotaccent zdotaccentlongs Aringacute aringacuteAEacuteaeacute Oslashacute oslashacuteuni0218uni0219tonos dieresistonos Alphatonos anoteleia EpsilontonosEtatonos Iotatonos Omicrontonos Upsilontonos OmegatonosiotadieresistonosAlphaBetaGammauni0394EpsilonZetaEtaThetaIotaKappaLambdaMuNuXiOmicronPiRhoSigmaTauUpsilonPhiChiPsiuni03A9 IotadieresisUpsilondieresis alphatonos epsilontonosetatonos iotatonosupsilondieresistonosalphabetagammadeltaepsilonzetaetathetaiotakappalambdauni03BCnuxiomicronrhouni03C2sigmatauupsilonphichipsiomega iotadieresisupsilondieresis omicrontonos upsilontonos omegatonosuni0401uni0402uni0403uni0404uni0405uni0406uni0407uni0408uni0409uni040Auni040Buni040Cuni040Euni040Funi0410uni0411uni0412uni0413uni0414uni0415uni0416uni0417uni0418uni0419uni041Auni041Buni041Cuni041Duni041Euni041Funi0420uni0421uni0422uni0423uni0424uni0425uni0426uni0427uni0428uni0429uni042Auni042Buni042Cuni042Duni042Euni042Funi0430uni0431uni0432uni0433uni0434uni0435uni0436uni0437uni0438uni0439uni043Auni043Buni043Cuni043Duni043Euni043Funi0440uni0441uni0442uni0443uni0444uni0445uni0446uni0447uni0448uni0449uni044Auni044Buni044Cuni044Duni044Euni044Funi0451uni0452uni0453uni0454uni0455uni0456uni0457uni0458uni0459uni045Auni045Buni045Cuni045Euni045Funi0490uni0491WgravewgraveWacutewacute Wdieresis wdieresisYgraveygraveuni2015 underscoredbl quotereversedminutesecond exclamdbluni207F afii08941pesetaEurouni2105uni2113uni2116uni2126 estimated oneeighth threeeighths fiveeighths seveneighthsuni2206 cyrillicbrevecaroncommaaccentuni0326commaaccentrotateuni2074uni2075uni2077uni2078uni2000uni2001uni2002uni2003uni2004uni2005uni2006uni2007uni2008uni2009uni200Auni200BuniFEFFuniFFFCuniFFFDuni01F0uni02BCuni03D1uni03D2uni03D6uni1E3Euni1E3Funi1E00uni1E01uni02F3OhornohornUhornuhornhookuni0400uni040Duni0450uni045Duni0460uni0461uni0462uni0463uni0464uni0465uni0466uni0467uni0468uni0469uni046Auni046Buni046Cuni046Duni046Euni046Funi0470uni0471uni0472uni0473uni0474uni0475uni0476uni0477uni0478uni0479uni047Auni047Buni047Cuni047Duni047Euni047Funi0480uni0481uni0482uni0488uni0489uni048Auni048Buni048Cuni048Duni048Euni048Funi0492uni0493uni0494uni0495uni0496uni0497uni0498uni0499uni049Auni049Buni049Cuni049Duni049Euni049Funi04A0uni04A1uni04A2uni04A3uni04A4uni04A5uni04A6uni04A7uni04A8uni04A9uni04AAuni04ABuni04ACuni04ADuni04AEuni04AFuni04B0uni04B1uni04B2uni04B3uni04B4uni04B5uni04B6uni04B7uni04B8uni04B9uni04BAuni04BBuni04BCuni04BDuni04BEuni04BFuni04C0uni04C1uni04C2uni04C3uni04C4uni04C5uni04C6uni04C7uni04C8uni04C9uni04CAuni04CBuni04CCuni04CDuni04CEuni04CFuni04D0uni04D1uni04D2uni04D3uni04D4uni04D5uni04D6uni04D7uni04D8uni04D9uni04DAuni04DBuni04DCuni04DDuni04DEuni04DFuni04E0uni04E1uni04E2uni04E3uni04E4uni04E5uni04E6uni04E7uni04E8uni04E9uni04EAuni04EBuni04ECuni04EDuni04EEuni04EFuni04F0uni04F1uni04F2uni04F3uni04F4uni04F5uni04F6uni04F7uni04F8uni04F9uni04FAuni04FBuni04FCuni04FDuni04FEuni04FFuni0500uni0501uni0502uni0503uni0504uni0505uni0506uni0507uni0508uni0509uni050Auni050Buni050Cuni050Duni050Euni050Funi0510uni0511uni0512uni0513uni1EA0uni1EA1uni1EA2uni1EA3uni1EA4uni1EA5uni1EA6uni1EA7uni1EA8uni1EA9uni1EAAuni1EABuni1EACuni1EADuni1EAEuni1EAFuni1EB0uni1EB1uni1EB2uni1EB3uni1EB4uni1EB5uni1EB6uni1EB7uni1EB8uni1EB9uni1EBAuni1EBBuni1EBCuni1EBDuni1EBEuni1EBFuni1EC0uni1EC1uni1EC2uni1EC3uni1EC4uni1EC5uni1EC6uni1EC7uni1EC8uni1EC9uni1ECAuni1ECBuni1ECCuni1ECDuni1ECEuni1ECFuni1ED0uni1ED1uni1ED2uni1ED3uni1ED4uni1ED5uni1ED6uni1ED7uni1ED8uni1ED9uni1EDAuni1EDBuni1EDCuni1EDDuni1EDEuni1EDFuni1EE0uni1EE1uni1EE2uni1EE3uni1EE4uni1EE5uni1EE6uni1EE7uni1EE8uni1EE9uni1EEAuni1EEBuni1EECuni1EEDuni1EEEuni1EEFuni1EF0uni1EF1uni1EF4uni1EF5uni1EF6uni1EF7uni1EF8uni1EF9uni20ABcircumflexacutecombcircumflexgravecombcircumflexhookcombcircumflextildecombbreveacutecombbrevegravecomb brevehookcombbrevetildecombcyrillichookleftcyrillicbighookUCuni0162uni0163uni01EAuni01EBuni01ECuni01EDuni0259 hookabovecombuni1F4Duni1FDEuni2070uni2076uni2079uni03B9030803040300uni03B9030803040301uni03B9030803060300uni03B9030803060301uni03C5030803040300uni03C5030803040301uni03C5030803060300uni03C5030803060301Eng.alt1Eng.alt2Eng.alt3uni030103060308uni030003060308uni030103040308uni030003040308cyrillic_otmarkf_ff_f_if_f_luni1E9EuniA7B3uniA7B4uni013B.loclMAHuni0145.loclMAHAogonek.loclNAVEogonek.loclNAVIogonek.loclNAVUogonek.loclNAVI.saltJ.salt Igrave.salt Iacute.saltIcircumflex.saltIdieresis.salt Itilde.salt Imacron.salt Ibreve.salt Iogonek.saltIogonek_loclNAV.saltIdotaccent.saltIJ.saltJcircumflex.salt uni1EC8.salt uni1ECA.saltIotatonos.salt Iota.saltIotadieresis.salt uni0406.salt uni0407.salt uni0408.salt uni04C0.saltuni0237uniA7B5uniAB53 uni0123.altuni013C.loclMAHuni0146.loclMAHaogonek.loclNAVeogonek.loclNAViogonek.loclNAVuogonek.loclNAVg.saltgcircumflex.salt gbreve.salt gdot.salt florin.ss03uni0431.loclSRB uni04CF.saltuni2095uni2096uni2097uni2098uni2099uni209Auni209Buni209Cuni05D0uni05D1uni05D2uni05D3uni05D4uni05D5uni05D6uni05D7uni05D8uni05D9uni05DAuni05DBuni05DCuni05DDuni05DEuni05DFuni05E0uni05E1uni05E2uni05E3uni05E4uni05E5uni05E6uni05E7uni05E8uni05E9uni05EAuniFB2AuniFB2BuniFB2CuniFB2DuniFB2EuniFB2FuniFB30uniFB31uniFB32uniFB33uniFB34uniFB35uniFB36uniFB38uniFB39uniFB3AuniFB3BuniFB3CuniFB3EuniFB40uniFB41uniFB43uniFB44uniFB46uniFB47uniFB48uniFB49uniFB4AuniFB4B gravecomb acutecombuni0302 tildecombuni0304uni0306uni0307uni0308uni030Auni030Buni030Cuni030Funi0312 dotbelowcombuni0327uni0328uni0485uni0486uni0483uni0484uni05B0uni05B1uni05B2uni05B3uni05B4uni05B5uni05B6uni05B7uni05B8uni05B9uni05BAuni05BBuni05BCuni05BDuni05C1uni05C2uni05C7 zero.dnomone.dnomtwo.dnom three.dnom four.dnom five.dnomsix.dnom seven.dnom eight.dnom nine.dnomzero.lfone.lftwo.lfthree.lffour.lffive.lfsix.lfseven.lfeight.lfnine.lf zero.numrone.numrtwo.numr three.numr four.numr five.numrsix.numr seven.numr eight.numr nine.numrzero.osfone.osftwo.osf three.osffour.osffive.osfsix.osf seven.osf eight.osfnine.osf zero.slash zero.tosfone.tosftwo.tosf three.tosf four.tosf five.tosfsix.tosf seven.tosf eight.tosf nine.tosfuni2080uni2081uni2082uni2083uni2084uni2085uni2086uni2087uni2088uni2089uni05BEuni207Duni208Duni207Euni208Euni207Auni207Cuni208Auni208Cuni2215uni20AAuni2120afii10103dotlessafii10105dotless commaaccent2iogonekdotlessuni1ECBdotless 8VDFLT cyrl grek hebr latn ÿÿmarkmkmkŽX  ¦ ”Žˆ‚|vpjd^XRLF@:4.(ý×èý˹ýÃ@ýÀ@ÿû¶ý›! v! “ÿÿÕïôyý‡æýìý y1ý­–ttvv 8 8š8Ž8ˆ8‚8|8v8p8v8j8d8^8X8R8v8L8F8.8(8"87ìSTttvv  |.:  þ4þýšþþ;57Î7z7t7n7P7J7D7D7>787D727,776ü5 "%P¬¶ ~bR @:4.(¦,& ©¦ìØ! HB 6Ú8 ÛÝ= Ú:FŠŽ&6¶6°6ª6¤6ž6˜6’6Œ6†6Œ6€6z6t6n6h6Œ6b6\6V6P6J6D6>68626,6&6 6 666 6665ö5ê5ØST55ttvv  #""$%%% 5Þ3&4P ñ33332ü2ö2ð2ê2ä2Þ2Ø2Ò2Ì2Æ2À2º2´2®2¨2¢2œ2–22Š2„2~2x2r2l2f2`2Z2T2N2H2B2À2<26202*2$2222 221ú1ô1î1è2 1â21Ü1Ö1Ð1Ê1Ä1¾1¸1²1¬1¦1 1š1”1Ž1ˆ1‚1|1v1p1j1d1^1X1R1L1F1@1:141.1(1"115´11 10þ0ø0ò5´0ì0æ0à0Ú0Ô0Î0È0Â0¼0¶0°0ª0¤0ž0˜0¤0’0˜0Œ0†0°0€0z0t0n0h0b0\0V0P0J0D0>08020,0&0 00000/ü/ö/ð/ê/ä/Þ/Ø/Ò0V/Ì/Æ/À/º/´/®/¨/¢/œ/–//Š/„/~/x/r/l/f/`/Z/T/N3/N3/H3/B3/<3/63/0/*2ð/$/2À/2À/2À/2À/ //2.ú2.ú2.ô2.î2.è2.â.Ü.Ö1š.Ö1š.Ð1š.Ê1š.Ä1R.¾1î.¸.².¬1..¬1..¦1.. 1..š1..”1..Ž.ˆ5´.‚.|0ì.|0ì.v0ì.p0ì.j.d.j.d.^.d.X.d.R.L.F0P.@0>.@0>.:0>.40>..0>.(1ˆ."/Ì."/Ì./Ì./Ì./„. .-þ/„-ø3-ò1.-ì3-æ1.-à-Ú14-Ô-Î2ê.|1-È2ê.v1-Â2ê-¼1-È2ê.v1-¶2Ø10þ/ /-°-ª-¤2À-ž0ì-˜2À-’0ì-Œ2À-¼0ì2Æ-†5´-€/2À.v0ì-z2œ-t2œ-n2œ2¢-h-b2Š-\0¶2-V-P0P-J.d-D.d->.d0¤-8-2-,-&2`.^0’2T- 0Œ--0†-2À-0z2B-0€,ü2B2À0€0z2B2À0€0z2B2À0€0z,ö2."0P2,ð0V,ê,ä2.0P,Þ,Ø2,Ò0V,Ì0J,Æ2,À0>,º2,´0>.ú2.@0>,®,¨,¢,œ,–1Ö,01Ü,Š0,„,~1Ö,x0,r1Ä,l/ð,f1Ä,`/ð1Ê,Z/ö,T,f1Ä,`/ð1¸,N/ä,H,B1²,*\*°*V*P*J*¤*D/Ì*>*8+.-0†*2*,*&* **,**0D0>**)ü)ö)ð)ê)ä)Þ)Ø)Ò)Ì*’)Æ)À)º)´)®)¨)¢/®)œ)–+.)*’)Š0>)„*’)~)œ/2À)x)r)l+)f)`1Ê1Ä2f)Z)T)N)H)B)x)r)<)6)0)**ø)$33))32ü++)) 2Æ2À))(ú1d(ô(î(è(î(â)6(Ü(Ö202*22Š2 2*ø*ò1ô1î2ð2ê1¸1²3)**à*Ú1j1d(Ð(Ê(Ä(¾(¸(²(¬(¦( (š(”(Ž(ˆ(‚(|(v(p(j(d(^141.(X(R(L(F(@(:(4(.5´0ì((("(((( (( 'þ'ø'ò'ì'æ'à'Ú2ü0D0>'Ô'Î0,0&5´1'È'Â/Š/„'¼'¶/œ/–'°'ª'¤*’'ž'˜'ž'˜'’'Œ'†'€'z't'n*°'h'b'\'V.p0ì'P,Ì'J(:'D(/ö/ð0¤0ž.X.d0¤0’'>'8'2','P0P'&'ø' /„'''''&ü&ö1v&ð/¨&ö1v&ð/¨&ê1v&ä/¨.Ä1R./„.^0’&Þ&Ø2*&Ò0b3&Ì14&Æ2 .Ü0D(R1 &À0V/Ì/2À&º(î.|0ì&´( &®&¨&¢&œ&–&&Š(^&„&~&x&r&l&f&`&Z&T&N&H&B&<&6'°&0&*&$&&&& &&*Ô*Î)¨)¢2 .Ü0D1ˆ%ú%ô%î%è%â%ô%Ü%è%Ö%Ð%Ê%Ä)f%¾%¸%²%¬%¦% %š%”%Ž%ˆ/Ì1Ž%‚0.%|%v%p%j%d%^%X%R+d%L%F%@1j%:'D%4&l%.%(%"%0¶%'ø%)6% 0†%$þ'°&0$ø$ò'Ú$ì&<&6'Ú2ü$æ$à$Ú$Ô$Î+j'Ú2ü2ð$È5´$Â1¸$¼)Ø$¶1X1R$°$ª1X1R$°$ª)f$¤$ž$˜+X$’)Æ$Œ2Þ$†$€$z$t(¾$n+ $t(¾$h$b$\$V$h$P(($J$D)$>("$8$2$,$&&<$ 0$$$$$$Î#ü#ö#ð$t#ê#ä#Þ#Ø#Ò#Ì#Æ#À3#º1./<3.š1.#´/*#®.ˆ#¨2À#¢0ì#œ#–#1#Š#–#„1#~)#x("#r1d#l(#f#`#Z#T#N(î#H( #B(î#<( .è2..0>2 .Ü0D1ˆ#6.Ü..1ˆ#0(v#**°#$)*#/„#)*-þ/„#)*./„# (¾#*’#"ú"ô"î"è(Ž"â'€%|"Ü%p"Ö"Ð"Ê$ž"Ä1j1d"¾/–+"¸10þ"²"¬"¦"¬" "š"”"Ž"ˆ"‚"|"v$h$b"p+:"j"d"^"X"R"L$€"F"@":"4"."(2À*\*°"""$n"3"14" "3!þ1.!ø3!ò1.!ø3!ò1.!ì3!æ1.!à3!Ú1./H".¦" !Ô3!Î1.!Ô3!Î1.!È3!Â1.!¼3!¶1.-ì"-æ" 2Æ!°5´!ª!¤2À!ž0ì!˜2À!’0ì!Œ2À!†0ì!Œ2À!†0ì!€2À!z0ì!t2À!n0ì/!°.v!ª!h.d0¤!b2 !\0D!V!P2!J0>!D2!>0>!D2!>0>!82!20>!,2!&0>.ô!\.:!V! !!!! !!!!!!! ü! ö! ð ê ä Þ1  Ø0V Ò Ì1š Æ/Ì À º ´ ® À º ´ ® ¨ º ¢ ® œ º – ® Š „ ~1X x/Š/„ r1R l/„ f1R `/„1¸ Z/ä T2 N0D H,Æ N,À H B1 < 6 0+. 0+. *+. *+. $*’ $*’ *’ *’#œ 2,Ò   332Æ2À1 1šúôîèâÜÖôÖôÐôÊôÄô¾ô¸ôú²ú²¬ô¦ šôú”Ž1ˆúôÊôúôÊôúôˆ.dˆ0’‚|14-Ô5´-€0¤-80V,v|0‚|p|j|d.d^úôX/ÌRLF/–@:4.(:"/º(‚ 0zþøòìæ(‚àÚÔÎȼ¶°ª¤ž˜’Œ†€ztnhb\VPJD>82ž,/Þ& 0>(RžüöðêX/ÌäÞØÒÌÆÀºÌ´+ ®°ª¨¢œ–Š„%ô~xˆ.dˆ0’ˆrˆlþþ4"O¾˜šOä[:ÁVÁââOOY›vO ûFFOOý(ýýOfMOI[xxOi(iOOlœkOOFÀO (  O‡œ††OOˆ(ˆˆOOEœOOcùùOOWOOŒOœœŒŒOŠ(&O**OœŠœŠOOWœO œ²²O O„›'OOú+eOǺhïhøhNaþh Nn¶dþdè†þt†¶dWdþ4dadÝdRdHd‰dŠ8¶h?¶ž¶dd¶àà¶áá¶êþqx™xœ™œ~¶;Nkþ4$þ4Àþ;þéNR–NèNþÀþÀN4þ4¶Àé4RÀ–4èÀÀ!44Š€–óèeþîþ„þ„N+þ+¶„é+R„–+è„„!++Šn"en÷"In"Ñn–"èkþ$þþ–KoeK÷oIKoÑKéoRK–oè`þgþE•aE•XE•E•eE÷•IE•ÑE–•èEþþvþ_ñþZñ¶g¶¯¯Nãã¶“¶°°N¶~N>þ>N“þw“¶EEN¶œœœ¶y'NFþ_–þZ–¶Êþ_#þZ(ßtHÆþÆN$þw$¶{ßÏH…Š…Ht…Ýÿß1"1¡ßH¡tÝþNWW¶ßfHßxHGßHGNê¶KoN¶E•'þ'NÄþwĶ{þ€{NÏþw¶þ¶Nþw†þ †Nõþõ¶yþúþwRþ RNÔþÔ¶xþ÷þvN÷÷¶vN϶“þ€“NæþwòþþwFþ€FN™þwþNöþ;þwGþ4øþ4¶|þ |NVþV¶þþw¶Ë˶#¶,N‚¶Mþ€MN¾þwþ4fþ4FþFN°þw1þ 1N®þ®¶ÊÊN##¶uerr¶­þ­þwlþþþN™þlþlNðþð¶"!šŠ"Nš…¶þhTbþGbÚ@@N¶‡úú¶N¯¯¶RONÁ¾¶..N  ¶‘'´´¶<<N´´¶¡!ŠöEýÈýÈ×!¥ŠM¶/ß½H/!½ŠÏÏ‹**åŠþŠN,!ŽŽNggNNÆ!€BBN^^N¹NbbN(!NÆÆN¤¤NkN‡þ€‡Nöþö÷÷NƒƒNN  N]]N,IN¨¡¬NñNNeþ€eNÆNZZNii‘‘¶77¶¶ŠŠ¶tx¶Êʶ::¶--¶Ï¶¶ÿþwÿ¶ÛÛ¶µ¶*0¶\¶xz¶ÒþwÒ¶zz¶ïþw……Šàà¶Îζþt™™¶yж/lxlnlxßß/þJN:þ:NòþòNxNööNNòþvòNmþmN²²Nìþvì9N…þ…N99!N(!e!œNñþvñ4NkNþN~ ~N{x´lþœlÿ4l~l!!¶DD¶@@¶LL¶ïï¶::¶vv¶ y¶¶)¶¬´~~¶––¶ƒ¶«°¶$¶§Ÿ¶îþ;þ;!ŠE©——¬JþïËZ½ä U‰äïUWä!UŠNH N‰/ ½‰eþ4îþ4€“óû€øóa€tóÝóRJ;‰Àþ;;þ;îþþî E‰î!EŠê ‡‰þ;ªþ;ê!‡ŠÓÓNÀÀ¶nø"ant"Ý€þþtN‰€þ;þ;Šþ;gþ;è(Š2N2þ;¥þ;%‰Qþ1ïþ4øté1ûèû‰1þ;;W;a;‰`þ4gþ4oWKøoaKtoÝ~~æ‰Kï W ‰ ŠEþ4þ4•¼Eø•aEt•Ýßyþy!€ß€ €!oNnßnén n!€éllß !KßK K!GþNE“EßEéE E!••p¶NŠóHó‰óŠ"&¶"H"R"‰"ŠRìì¶oHo‰oŠøþæ¶• •H•R•‰•Š}‰Íb dÍ€NñäNýNÇþN#N'$N4N-/NúN N“Ne‚'ÇHÀJHŒNîîN3NêNNßþyN¹Nþ¥Nn'£NknN•N€€N#NÊ×N'³22þ÷ïï€'Y‚_N%þN@dN`y'~[(¹NG0”¦*NEENo¶cU¶q¶NN¶¤¶ff¶P¶³½¶¸¶nu¶º¶îó¶;ÛN¶;;¶;¶E¶Ý¶ª‡¶"þ¤µ¶pˆ¶"Û¶$"¶ý¶¶¶™¥¶"Û¶(¶Ø¶¥³¶¶þ›%¶î¶,,¶ûÛ˶õû¶§¶1;¶ ¶b¶K¶go¶ìÛ­¶¾æ¶å¶ø ¶¶›¶R¶•¶1$=D]ll4||5‚6’˜Bš¸IºÞhààââŽääæéëë”íí•ïï–ññ—ôI˜UUîWXïZeñguýwŸ ¢5JJ”MM•OR–TWšYvž}~¼‚°¾²µí·ÄñÆ1ÿ33k5alms™uu z„¡¬”•­—¤¯¦¬½®°Ä³³Ç¶¾ÈÀÀÑÉãÒopírsï*ˆ‚|vpjd^X^RLF@:^4.(" þøòòìæòàÚÔÎȼ¶°ªÿöÿÉ^ìOÿ„Uÿ´bìÿÿjÿÿÿþÿûÿÀÿ¹ÿûÿ¸ÿúÿ¸ÿ½ýÓNýÈNý¿Ný½Nÿÿý˜ÿ÷3ý›NvNNÿÿNNNý‡NNýìNý NKNý©NPNWNST55ttvv%Žÿ䘶@  rr++23|/01A#34632#"&\/íýM87NN78Mª ú¼L??LJDD‡¦Ï¶¶€r+2Í201A#!#S&€&H&€&¶ýðýð2ø¶9@   ?3?39/333Î233233301A!!#!#!5!!5!3!3!!!Ù=þÏSœSþëQ™Mÿ>þð*RQQ™Rüò=þëuþÇ’þVªþVª’9’¯þQ¯þQ’þÇ9uÿ‰"$,5(@..(, - %#/Í333/Í393301E5&&'5.5466753&&'6654&&''wÑGIÝiбVdµx~m¶Q?G N€ºdÖÈnk+_O~B[.(ZwÐ& »"5—,d‹cf’T¨¥*"£&þo(Z†k“¹× VG1A1ò`)B.3F3\ÿígË '3"@(." r  r+22/Ì2?+2Ì201A2#"&546"32654&%#2#"&546"32654&‘œ¡›¢–Ÿ—ŸIEEIKIHmüÕ©+‰š¢›¡—ž–ŸIDDIKJIËïÚÚóóÚÚïžžŸ  ŸŸxúJ¶ýÌðÙÙóóÙÙðžž ž žhÿì×Í%0<+@70& - r r1r+2++29/9901A26673!'#"&&54667.54663267"6654&ro£[©€w4CÍ iP'þù¥>­k“ÖtJŠ`0O.`­Db3—|v¬>þ¿QlKCtkcÍKc…·Jþ”A¥^€è[þß¡6R-_´€j—u66kwGeNüá)QdEnƒL7TRExG@xQJW‡¦S¶ ³r+Í01A#S&€&¶ýðRþ¼5¶ ³ r+/01S473#&RA†f¶’A^´f†A1©?#z¾þ0õŸþÈþà€x;>þ¼!¶ ³ r/+01A#654'3!A…g´_€AB€`¶g…A3§þÄþãw"7 £<${þÞþÁSz@    €/Í2901A%'%7”&…þﲯŸ¹íþ’'þzqÃ#þÂaYþ¨`>$Âq†cå,Á ´ /33301A!!#!5!3—•þkžþj–ž œþaŸœ¡NþøŽî ³€/2Í01e#>7 7B!”'! îI¦¦JP²¬HMÏG}±/201S5!MúÏ®®Žÿä˜ý ³ r+201w4632#"&ŽM78NN87MrL??LJDDô¶ ´r?+01A#ôýàÁ!¶úJ¶`ÿì2Í · r r+2+201A#"&5463232654&#"26u»„¦Øj`×±¨Ùiüø8~hh88}jj}7ݲþèÂe²QîêQµ³þ¯ìÃþü€ÄÀƒƒþý©ï¶ @  r r++22/301a#4667'3ïÇ9%§gŸ§Ý5YQ&1‡„B`.Ë@ r r+233+201a!5>54&#"'>32!.ü2n‘J†od¡Vl;Фd‰Çl]ªtþãÏž‡o§]rxID†2Q0`°vuÇÄoþæ Yÿì$Ë.@ $,r r+2+29/39901A#"&'532654&&##5326654&#"'6632øNŠ[®±xùÃuÈZ[Ôb¿§Z±„‰‹{ŸN‡{L}k2cQç•áêec‘\²’Æp&*·.3”‚Vm4¦AvOgq!6"‹>XÆ*m¼ @ r r++29/333301A##!533!4>7#mÐÅýRªÉÐþk/þkJþ¶JŸÓü;¤2[RG(V%ý¼|ÿì#¶!#@r r+2+29/333301A2#"&'5326654&#"'!!66@‘Ùy‚ø°rÆEJÑajVª¶=Ž.^8èýÆ"%nˆe‹˜Üv((¹+5B†gˆ” 9½³þmiÿì8Ê"1@))# r r+2+29/33301S4>32&&#"3>32#".2654&#"i%Yœê¥,k#&^/¹ÒZ ^…Y€¾hrÓ’l¸ˆLõ}—†‡\‰K$JppƒúÚ¥^ © —þý£1P/iȘÞxQ¡ñþÄ¡¥‡Nu=?kAT5¶@ r r++2301a!5!Lüöáý·³úÚ_ÿì1Ë.<@+6# r/r+2+2901A2#"&&54667.546632654&&''">54&I~ÉsKNZ”XyÚ’žÜsTŠRGuEuʬ“”Ž™IT"UxA&l‰CrGDm?‰ËP›sX…c'*l’dz³a]¯{e•k&(f‰Zp›Qû¬h†…mEhS" $WolhaFaGGcDbg^ÿë.Ê"1@))#r  r+2+29/33301A#"&'53267##"&&546632"326654..%Yœì¤+p$&b/ºÒ[ \†]~¼htÔm¸ˆKþ {˜ƒˆ^‰K$JpGƒûÛ¥^ ª –¤0P0iÈŽ™ßxQ¡ñ;¡¤ˆMv>>kAŽÿä˜f ·r r+2+201w4632#"&4632#"&ŽM78NN87MM78NN87MrL??LJDD²M??MJBBAþø•f ·r€ /Í9+201e#>74632#"&t8A!•(" M79MM97MîH§¦JP±­HìM??MJBBcé-â·/2Î2901e5-ü6Êý õé­ká«þœþÀl¹$é ³/3Î201S5!5!l¸üH¸Mœœþlœœcé-â·/3Î2901S5c÷ý Êü6“?e«þkþSÿäUË+@ ##) r r+2+23/01A54667>54&#"'66324632#"& MDJW'}q`KGVË{ÆÚ:mM@EÏK:6NN6:Kª9Mqc6r EE €.5/3Ì2/323+2Ì22301A#"&'##"&546632326654$#"3267#"$546$3232677&&#"»+Y…[Xp '‘h£°nȉ[±4F0>T,–þøª¬þø¶^ŽÆyê^[à„ôþ¥¸xâBÉØN¾ûóf[pg M*f|8Û_¶’WcFHaÒ®‡Ðwþi!( fFf«hºŠlÅþó¢Çþé‘6$’&0µTî¿Cþ¹þœ€v¨Šû _–+¼@ rr+2+9/3901a!#3.'T¢ýàÕ.Ò+þNš œ³þM¼úDe¯X^)[OþQÄʶ%@ rr+2+29/39901S! #!32654&##!2654&&#Ĩ>vVZŒQ~çŸýþÍÿ±ˆ¢°æµ•C–¶¤ÇU†X Np†»aOtoseýœþŽxLm:|ÿìÍË·r  r+2+201A"3267#"$546$32&&4q³|BiÔ¡`¯WT³xàþ×’\²©nÑXLI§O—Ô…±þþŒ#° ºQå¦Ém/*«!2ÄZ¶ ·rr+2+201A#!!24&&##3 Z¶þ§öþo¾àF²×zì«á½é÷þµ§¶£þÁñ¼ôwû¤Äù¶ @  r r+2+29/301a!!!!!!ùüË5ý˜Cý½h¶°þM®þ Äø¶ @  rr++29/301a#!!!!Ì4ý˜Bý¾¶°þ¯|ÿì4Ë!@ ! r r+2+29/301A!#"$54$32&&#"3267!$sô˜âþÊ¡²TðxÝ]JN½e¨ñlæµ[6þ» ý/'(´PìãRº.)­#1Žþþ±­þþœÄ/¶ @  rr+2+29/301a#!#3!3/Íý/ÍÍÑÍ£ý]¶ýžbÄ‘¶ µrr++01s3ÄͶúJÿ_þt‹¶ ´ r/2+01Q"&'53266535P J*8\6Îa²þt ­ ,l`™úq•Á]Ķ@ rr+2+2901a##36673ïþ–ÍÍ3i4£ëý̯€ýѶý67áýúÕýúÔE  "D¶úJ¶üT1ml--lo2©c¶)@$)rr+2+22901A#.'#3>73>7cþ~Ùþõ   þûØþ€Ñß  úÍ ß¶úJ¢%VUDCTW'ü_¶ü‰,[[U&'Y\Z)uü†*\\T$2t|<vȶ @  rr+2+2901a##33Èêþƒþ~Úæþ;ãa`Ûþ:mý“ø¾ýÇ9ý@š¶@ rr++2901A3#3NpÜþÍþàú¼ü‚ýÈ/‡GP¶ @ rr+23+2301a!5!5!!Pû÷ýýÜý’r²’ûŽ þ¼m¶µr/3+201A!!!!mþ3Íþîþ¼ú›ú=õ¶ µrr++01S#Ó"Áýß¶úJ¶3þ¼¶µr+2/301W!!5!!3þîÎþ2¨ÛùHLÀµr+Í2901S3#H·lá«þ—þ»¢ü^Ðý0ÿüþÉwÿH±/301A!5!wü…{þÉRÙ! · €/]Í9901A#.'5<JQ!‡%ZZJ!.qj&PYQ\ÿìça(#@%%  r rr+2++9/33301A2#'##"&&54$%754&#"'663265QÌÊ'.dƒ^dœY¾sgUœH@NÇ<š¿›jW†­aµÃý j1"’(6ý¶qeXR—”«ÿìƒ$%@r r rr+233+233++01A36632#"&'##"32654&t -¥‚ÉòoɈ -&•ðm8€¨ŠŽþ‚B~"Heþáþæºÿ‚_Bý¨V®„ÄÐÔÅÈÊmÿì¥b·r r+2+201E"&&546632&&#"3267f˜ä}†í™Z5<8:j‹FE‡eYŽ<:ŒzûÀÈÿz$£"]´„€±\(± mÿìD$%@ rr r r+233+233++01E"323&&53#'#'26754&#"(ÊñõËU€]  ÉŸ! ](£‡¬ŒŽŽ#.L0p*£ùì™0O.¤¼¹ÅÓÛÂÀÏmÿì'b@   rr+2+29/301A2!3267#"&&546"!.[Îný°Ÿi¤XS§t ñ†zÞ•z” 8qb{à˜r±½('©&#€û¸¶ŠœŸ”[ŠN!(@r r r++2+23901A!##57546632&&#"!´þñÉ»»V¡sEs*4"T/WS³üM³a=L‹©Nš pqMþ?c/?K-@" @@ 99))Fr0r+2+2239/39Æ29901A"&5467&&5467&&546632!#&'332%26654&&##"2654&#"ãÝí‚u,?EEWje¾ˆ@:|Ä$åÊ/0+,'J5À´ÀþÐþé­X9pR¶Fh:°onpnkqrþ¢‘gS4=Y*$§pw¨X w&h>¨Ã;&$˜’¹È“4`B32#4&#"#t #gƒI²\Çtxrˆ:ÉþT3b!:M'T±ý2³„…[°€ýÏ†ï· r r++Î201A#2#"&546tÉf0EE01CCNû²N¡8??99??8ÿ‹þ†ï@  rr+2+Î201S"&'5326534632#"&23U!@(CTÉCC10EE01Cþ ¡ Jdæûd–Rd?88??99«Y @r   r r++29+01A36673##sM`èþFÙîþ…Èüô.u1b"xþ'ý‹÷vþ«u µr r++01a#3uÊÊ«âb'(@$%! r!rr r+22+++23301A2#4&#"#4&&#"#33>32366p·»Çkj–…È0^Hg{7ÉŸ !e|E|ª( 5»b¿Òý/¸‚‚µ¯ý¨¸Ws:Y®~ýÉN˜9L'Z\]Y«[b@r r r+233+2+01A2#4&#"#33>Ï¿ÍÇtx«‰ÉŸ #l…bÀÔý2³„…ÊÀýÎN›:N'mÿìnb ·r r+2+201A#".546632326654&&#"nG‡¾xp»ˆJ|ç ˜æ€üÍA‡kiˆ@@‡lž“)ˆÕ“MM“Õˆµÿ…†þµ·bb·~´`Ó«þƒb(%@rr "" rr+233+233++01A2#"&&'##33>"326654&ÉÉñoɇU€[  Ê¥ [‚*j;8‚n^}=Šbþãþå¼ÿƒ-K+'g)þ>8ž1Q0¦S¤| „µ_fº{»ÕlþCb$%@rrr r+233+233++01A467##"4632373266754&#"z -¦ƒÆñoʆ£/£þl<…¨Ž‹‹þÕ(b&JeºƒeIšùÈyR¥|#ÈÏÛÀÁÑ«:b@ r rr+233++01A2&&#"#33>½F?@tX2Ê¢ "ab»0[ƒTý¹NÇ–…n]Jîú›ý•]\¡ÿìSN@ r r r++233+201A#'##"&&5332665S¡ "l†K±[Êsvs‡;Nû²—9L&T±ŒÑýK…„[¯5#N @  r r++29901a336673£þ]Õë- 0êÖþ\NýoAš23š@‘û²FO*@")r* r+2+22901e.'##33>733>73.¨  °ÞþÎÍ— ºÚ³ ™ÊþÌ@'^^QQ_`'ýÃMý¿:|n'MUPbýŸ,mj&"l<Aû³ ,N @  rr+2+2901A33##¨þŠåãþ‰‹åþßþÝã4þj–ýæý̯þQþ%N@ r r+2+2901S336673#"&'5326677Ùê ,àØþ$'o˜h0I?"?[A2Ný…1]W*3’Kzûi—Q  1Z<‚J~N @ r r+23+2301a!5!5!!~üÌDýàýÅI€2œŽüÛ3þ¼Ä¶%@  r%/2+29/39901A.54&>54663ĉ¶Y9oQQo9]¶…Eb4noql3bFþ¼CŠi4EU'£&TF6iˆCž%PAþÔfz zfþÏAO$ãþ‚±//01A3#㟟øGþ¼Ø¶%@ r/2+29/39901S5>54675&&54&&'53"GEa4nnom3bE‰µY9pQQp9]µþ¼ $OA.gz {e/BO%žB‰iþÌFU'£'TEþÉh‰DcG-]@  €/33/3Í22/301A&&#"566323267#"&)Hd/933|J=vZJc-;}20|K55#53466²oµID@’Nkw–þj)B&ûú>s0‡g„%$!„gˆ0r=GsCDsFHtEEtv¶,@   r ?+29/33Î2233301A33!!!#!5!5!533H]Ñþföþ×)þ×ÂþÖ*þÖòþjÔ³ý‰¥ˆþýˆ¥‰ýãþ‚ ³/2/301A3#3#㟟ŸŸüîþ*üívÿô‹6E@/!3:'<8#&YvSgƒ#&lNŽ &  )V:(;;'(Uxm2MD&YB2QG%Z. ‚ß ´ /33301A4632#"&%4632#"&.<++==++<…;++>>++;u733765567337655dÿìDË.B@ "9 r(€/ r+2Ì2+2Ì201E"$&546$32"&546632&&#"32672>54.#"T£þíËopÌ¡ÎtpËþîƒÌÍa»…Aƒ992b.~Š}ˆ1t41hgƒæ®c_ªçŠŠè«^]«èpÊ¢¡ËqpËþþíÊp#ûцÏv z°™Ÿ«¶_­êŒ…è²d_­ëŒ†é°c? Ç'@$$ Àr+2Ì2/992301A2#'#"&&54667754&#"'663265u††f(uLBc5I“nlO?4j118‰ÍbtQ:0a\Çwyþ@]/;-]EG]1(?7i%þ?51.`NPsçÕ $@    /3Ì29233301S%P\þãþ¤©_þäþ¡0¥Qþ þ¡R£¥Qþ þ¡R£c) ´/33/01A#!5)›üÕ ýãœÿÿMÏG}dÿìDË *>#@ 5!r €+ r+2Ì2+2Ì2901A!2##32654&##"$&546$32'2>54.#"<¤œc@îªÌ‡mR[T[k‚£þíËopÌ¡ÎtpËþæ®c_ªçŠŠè«^]«è€†„aqþuaþŸÜQELCûÏpÊ¢¡ËqpËþþíÊpm_­êŒ…è²d_­ëŒ†é°cÿú¦±/301A!5!ûô ’lK˶Àr+2Ì201A"&&546632'2654&#"¶b•SR”db•TT•`YacW\`_KP‘^_RQ‘_^‘P…fTWggWTfc.Ô@   /23/3333301s5!!!#!5!3cËþi•þkžþj–žœœ3œþaŸœ¡3T†Ô·x w?3ä2301A!57>54&#"'6632!†ý­êMS F<8c5Q>‘\‚˜4iNšŒTxåK`N,;?-+i4?sBpsI’+E—Ó)@  x#w?2ä29/39901A2#"&'532654&##532654&#"'66]Š—WEV_¬´Kƒ>C‰@d^jivqhWL=;i7L>ŽÓ~dPilPw’‹"(OECEwN=:=*$f-8RÙ! · €/]Í9901A#5>7KZZ%† OL!QYP&jq.«þ\N!@  r rr+2++23333/01A#'##"&'##332665\Ÿ !XuKPt&ÉÉvxt…9Nû²˜7M(4.K[1þµ:ýI†[°~5xþüj¶ /2/39/301A####"&&54663!j|Ë}L'}¹foÇ…7þü–ùjA `Úµ¿Ý^ÿÿŽ>˜WZ þ©µ À/Ì29901A#"&'532654&'73©’™"<B@GcUVƒ/0O0þëerx'034 ªc ,GPTûÁ @ x w?ä901A#4667'%û¡3eMÁü“"EA+IfÆA ÆÈ ¶ r+22/301A#"&5463232654&#"ư•³­—aQþU_^VU^^Wj¦º¶ª¨¶RœpswwssusNsåÕ @   /3Ì2901A'7'7åþ¡ŽþäŽ_þUþ£þä]þ]R`_Qþ\þ]R`_Qþ\=¶%6@" r  r+2/Ì9+2/Ì9/9333301a34667'%35!533#35467]¨ü¢u2eM—ûþs£þ`ú :¶úJJ"EA+HfÅü”ý¶ÀpCýÌÀ?Ä,j1` , ¶-&@++# r  r+2/Ì9+Ì23301s34>7'%357>54&#"'6632!ì^§ü¢]2eM—àéMS!H;8c4Q=’[ƒ—5hN™‹¶úJJ43.+HfÅü”ý¶xåK`N,;?-+i4?sBpsI’Œ/JÉ-8A?@1::44/>772.. r'( !!r+2/2Ì29/399+2/Ì9/9333301a3"&'532654&##532654&#"'66325!533#35467m^§ü£ÙK„>D‰Ac_kjuphXL=`Š–VEV`­5þs£þaù 9¶úJ:Š"'NFCDxN=:=*$e.8~eOi kPx’ýÆÀpCýÌÀ?Ä,j1` 6þwr^+@ ##)r /3+23}/01A3267#"&54667>55#"&54632n MDJX&~p_žKGWÉ|ÇÙ:nKBCÏK:6NN6:K˜9Lrb754&#"#46632L:UU: RJGg8a²za‘7$^j4kc#SJSb*8TS8oK|IÉ|ÕˆˆÌtíHhOA=%.=1.avSp”I" ®'ZN1GH.4WX8AYC@L7QQ+cVûiš‹«OEˆÿÿ\ÿìç!&DCÉ ³/r+Î01ÿÿ\ÿìç!&Dvo ³/r+Î01ÿÿ\ÿìç &DJŽ ³5r+Î01ÿÿ\ÿìçé&DQp ³:r+Î01ÿÿ\ÿìçß&Djí ´>2r+ÎÎ01ÿÿ\ÿìç“&DO ·)€V+44\ÿìb1=E3@ A%,r!229 r/>>r+23+299//3+233301A2!3267#"&&'#"&&54667754&#"'66326632665"!4&&ç‡Åjý7¡•e¢TS£m^ |*1q™ncž\nݦ»udQ›G@MÌh}§+9­þ“’´“eTS‚KßuŒ ø3jb{ß–t¸·('©gLIh7H‘pp—RJze/#‘)5T\T]ýµqeXRC…cœ—[‹Mÿÿmþ¥b&Fzoÿÿmÿì'!&HCÑ ³&r+Î01ÿÿmÿì'!&Hvv ³&r+Î01ÿÿmÿì' &HJ• ³,r+Î01ÿÿmÿì'ß&Hjõ ´5)r+ÎÎ01ÿÿÿç§!&¯C• ³ r+Î01ÿÿŒL!&¯v: ³ r+Î01ÿÿÿª| &¯JÿX ³r+Î01ÿÿÿæ9ß&¯jþ¸ ´ r+ÎÎ01lÿìj$4!@%$!  - r/+29/9301A7#"&&5466327&&''7&&'"32654.¼E‚:èOÃ`L{ç¡”æwØIv[ ~SþþNÙ)[/ýk‰AB‡jŸ”$Js I*ŠssZåþ餾þû†xà››Ýw3'p¼L—u~7ý•O™oc˜Už:hR0ÿÿ«[é&QQ­ ³'r+Î01ÿÿmÿìn!&RCò ³'r+Î01ÿÿmÿìn!&Rv— ³'r+Î01ÿÿmÿìn &RJ¶ ³-r+Î01ÿÿmÿìné&RQ™ ³2r+Î01ÿÿmÿìnß&Rj ´*6r+ÎÎ01cõ.®· /2Î2Î201S5!"&54632"&54632cËþ1CC1/CC/1CC1/CC„œœþq=BE88EB=½=BE88EB=mÿ»nˆ"-5@&& r' **  r+Î233333+Î2333301A#"&''7&&5327&&#"4&'3266n}èŸL‚8SxZ@FïL‡7NzW>EüÍ®!U4ž“dþTT2iˆ@)¶ÿ‡"!tR|KÐ…)%#nRxIËJ{0WÓ¿Ev.ý¬b·ÿÿ¡ÿìS!&XC ³ r+Î01ÿÿ¡ÿìS!&Xv© ³ r+Î01ÿÿ¡ÿìS &XJÈ ³ r+Î01ÿÿ¡ÿìSß&Xj' ´-! r+ÎÎ01ÿÿþ%!&\v< ³%r+Î01«þƒ*!@ rrr '' r+23+++2301A#"&&'##33>324&#"3266ƒndžV‚\ ÊÊ [‚WÉñΉŸ†‚¦_|=*¼ÿƒ,I-BDþ8þþE$e0P0þàþêÈȹ·#ÅÓ`·ÿÿþ%ß&\jº ´3'r+ÎÎ01ÿÿ+Ý&$L i ³r+Î01ÿÿ\ÿìçt&DL½ ³+r+Î01ÿÿ+a&$Mÿi ³r+Î01ÿÿ\ÿìçø&DM¯ ³-r+Î01ÿÿþ4+¼&$Pqÿÿ\þ4a&DPcÿÿ|ÿìÍŠ&&v1i ³&r+Î01ÿÿmÿì¥!&Fvq ³$r+Î01ÿÿ|ÿìÍŠ&&JOi ³,r+Î01ÿÿmÿì´ &FJ ³*r+Î01ÿÿ|ÿìÍX&&NEi ³&r+Î01ÿÿmÿì¥ï&FN„ ³$r+Î01ÿÿ|ÿìÍŠ&&KNi ³ r+Î01ÿÿmÿì± &FK ³r+Î01ÿÿÄZŠ&'K,i ³r+Î01ÿÿmÿì˜&G4 ¶1V+4ÿÿ7Z¶’mÿìß,*@ r'  ?23?33+?9/33301E"323&&55!5!533##'#'26754&#"(ÊñõÊU€^  þe›É›› ! \€(¤…€¬Œ.M/"s(o´´û/™0O.¤¶µÃÌÔ¾½ÊÿÿÄùÝ&(Lèi ³r+Î01ÿÿmÿì't&HLÅ ³"r+Î01ÿÿÄùa&(MÙi ³r+Î01ÿÿmÿì'ø&HM· ³$r+Î01ÿÿÄùX&(N¬i ³r+Î01ÿÿmÿì'ï&HN‰ ³&r+Î01ÿÿÄþ4ù¶&(PBmþ4'b-5)@#&1 & r.r+2+Ì29/3333301E3267#"&5466772!3267#"&&546"!.#0+!4=*kn;[1£QZ#ÈÎný°Ÿi¤XS§t ñ†zÞ•z” 8qí./ } k]:m]"BdR&{à˜r±½('©&#€û¸¶ŠœŸ”[ŠNÿÿÄùŠ&(K¶i ³ r+Î01ÿÿmÿì' &HK“ ³ r+Î01ÿÿ|ÿì4Š&*J‚i ³. r+Î01ÿÿþ? &JJ[ ¶R{V+4ÿÿ|ÿì4a&*M£i ³& r+Î01ÿÿþ?ø&JMx ¶P{V+4ÿÿ|ÿì4X&*Nwi ³( r+Î01ÿÿþ?ï&JNP ¶R–V+4ÿÿ|þ;4Ë&*q7ÿÿþ? &6"J ³r+Î01ÿÿÄ/Š&+JDi ³r+Î01ÿÿÿ­[è&KJÿ[Ç ¶!’V+4ó¶'@  rr+2+29/3Î2223301s#5353!533##!!5!ÄÄÄÍÑÍÄÄÍý/Ñý/3™êêêê™ûÍ£ý]Tß["#@! "r r r+2+2+9/33301A!!3>32#4&#"##535tšþf "g„J°\Çtxrˆ:É››´‘’3a!:M(U²Œý\ˆ……\¯ýøÏ‘´ÿÿÿ¯¬S&,Qÿ]i ¶•V+4ÿÿÿŠé&¯Qÿ; ³r+Î01ÿÿÿöaÝ&,Lÿ¤i ¶”V+4ÿÿÿÛEt&¯L‰ ³r+Î01ÿÿÿàwa&,MÿŽi ¶’V+4ÿÿÿÌcø&¯Mÿz ³r+Î01ÿÿdþ4Á¶&,Pÿÿ<þ4™ï&LPêÿÿ¹¢X&,Ngi ¶ ÁV+4ÿÿÄþtâ¶&,-Wÿÿþ¦ï&LM ÿÿÿ_þt‘Š&-Jÿmi ³ r+Î01ÿÿÿ‹þ| &°JÿX ³ r+Î01ÿÿÄþ;¶&.q°ÿÿ«þ;Y&Nq=«YN@ r r+2+2901I##336678þ[ÆìþžÑÑ3yNþýåsþŽNþàM–2>ºÿÿ£ Š&/vQi ³ r+Î01ÿÿŒLè&Ov:Ç ³ r+Î01ÿÿÄþ; ¶&/qoÿÿ†þ;—&OqÿÿÿĶ&/4“ÿ¢ ¶V+4ÿÿ«Ë&O4F ¶V+4ÿÿÄ ¶&/Nbý|ÿÿ«ª&ONoý’ ¶ @  r r+2+901s'737!ÄaO°ÍýPþ³{ý9†kýy—‹Äþ;²ÿï4 @  r r++901s'737£dP´ÉwQÈ6>…r%ýZQ……ýKÿÿÄbŠ&1v<i ³ r+Î01ÿÿ«[!&Qv¬ ³r+Î01ÿÿÄþ;b¶&1qÿÿ«þ;[b&Qq‡ÿÿÄbŠ&1KYi ³ r+Î01ÿÿ«[ &QKÈ ³r+Î01ÿÿõ¶'Q›éÄþtb¶!@  rr/2++2901A"&'532667##33.53Ó6T!P.=b;üѼôò¾c³þt § *cU«-ŽDüî¶û£0ˆ•CÍúR‰´W«þ\b$!@rr rr+2+++23301A"&'532654&#"#33>32+0M:#;Ntvrˆ<ÉŸ #j„J±[A†þ ¡ JdR‚€Z¯ýÌN›:N'T²ü‘d–Rÿÿ|ÿìÇÝ&2Lši ³#r+Î01ÿÿmÿìnt&RLå ³#r+Î01ÿÿ|ÿìÇa&2MŒi ³%r+Î01ÿÿmÿìnø&RM× ³%r+Î01ÿÿ|ÿìÇŠ&2RÌi ´'4r+ÎÎ01ÿÿmÿìn!&RR ´'4r+ÎÎ01|ÿîÌ(-@%"" r  rr&r+23+2+29/3+2301A2!!!!!!#"$54$"3267&&4i-(ý¯+ýÕQüÞ,j4âþב‘&êv®q8bÌœ9m'(iÌ °þM®þ ± ¼SââQº±O•Ô†²þþŒ;kÿì>`$3;-@!%%74r,,  r+2323+239/32301A2!3267#"&'#"&546632>"326654&&%"!.sÍný©œl¤VS¥sÖB?Ї•ãzåž‚Í=(sýD›?ƒhh‚>?ƒ©w‘ 6p`zߘr¹µ('©&#omlp†¶µý…pkFb3¥ÌÆ…¶]\´ƒ†µ\ š—[ŠLÿÿÄíŠ&5v´i ³ r+Î01ÿÿ«:!&Uv ³r+Î01ÿÿÄþ;í¶&5q²ÿÿƒþ;:b&UqÿÿÿÄíŠ&5KÑi ³r+Î01ÿÿ†X &UK4 ³r+Î01ÿÿfÿìŠ&6vpi ³7r+Î01ÿÿeÿì‚!&Vv ³2r+Î01ÿÿfÿìŠ&6Ji ³=r+Î01ÿÿeÿì‚ &VJ7 ³7r+Î01ÿÿfþË&6z@ÿÿeþ‚b&VzÿÿfÿìŠ&6Ki ³0r+Î01ÿÿeÿì‚ &VK4 ³+r+Î01ÿÿþ;]¶&7qBÿÿ$þ;ÎH&WqÇÿÿ]Š&7Ki ³r+Î01ÿÿ$ÿìå&W4`]¶!@  rr++9/3332301a!5!!5!!!!ÓþÖ*þEEþC(þØލβ²þ2¨ýr$ÿìÎH%@€r r+2+ÍÌ2333301S5!267#"&&5#5773!!5x‚+X "q;Z’W™ G|?þÁY+‘‘þd š>–…n]Jîú›ý•]\ÿÿ¶ÿì+S&8Q"i ³ r+Î01ÿÿ¡ÿìSé&XQ® ³ r+Î01ÿÿ¶ÿì+Ý&8Lji ³ r+Î01ÿÿ¡ÿìSt&XLø ³ r+Î01ÿÿ¶ÿì+a&8M\i ³ r+Î01ÿÿ¡ÿìSø&XMê ³ r+Î01ÿÿ¶ÿì+ü&8O½i ·“V+44ÿÿ¡ÿìS“&XOK ·’V+44ÿÿ¶ÿì+Š&8Rœi ´( r+ÎÎ01ÿÿ¡ÿìx!&XR) ´, r+ÎÎ01¶þ4+¶)@)r$$  r+2/3233+201E3267#"&546677# 5332665¾2+!2=*lm@`0‰?U*mÿÂþíþßι·~ MÚ;5 } ojB~h Cna^üNšòŒ'õ®üZ¹¼[§s¦ÿÿ¡þ4[N&XP¬ÿÿcŠ&:Ji ³7r+Î01ÿÿF &ZJx ³7r+Î01ÿÿšŠ&<J–i ³r+Î01ÿÿþ% &\J[ ³$r+Î01ÿÿšH&<jÿõi ´r+ÎÎ01ÿÿGPŠ&=v~i ³r+Î01ÿÿJ~!&]v ³r+Î01ÿÿGPX&=N‘i ³r+Î01ÿÿJ~ï&]N" ³r+Î01ÿÿGPŠ&=Kši ³ r+Î01ÿÿJ~ &]K+ ³ r+Î01«ó¶ r r++201A"#46632&&"UXÊ[¤oGj)2 Szhrû`¤‹¦J› ÀþË%#@ !!  r/2+29/333301A2&&#"!!#"&'53265#575466;Fm(0"N-TN þúL—p*P>"OPÊÊRËš _ršü>yŸN ¤ Xt¶`?}Œ¢Eÿÿ/¬*7&@ 0077%/33/3/??9/9301c&&54632#!!.'2654&#"5>73 +1€dc‡1+ Øý³™×ÙŸ  J4?@32@=+B=ìAQS#éZ>hvug>Zû€þ€3ŒNT#@@7l<76<<65>† RU%>D?\ÿìç©(4AM4@%% r CMMIGG)5/<r+2Þ2Ì22/333?+9/32301A2#'##"&&54$%754&#"'663265"32654&'2#"&546#5>7QÌÊ'.dƒ^dœY¾sgUœH@NÇ<š¿›jW†­Ð2@;71?@0Bh=„ce€€­p€/ŒC>aµÃý j1"’(6ý¶qeXR—”d=45>>54=j5aDivuifu' LMFHÿÿÿÿªŠ&ˆvi ³r+Î01ÿÿ\ÿì!&¨v¸ ³M,r+Î01ÿÿ|ÿ»ÇŠ&švOi ³8r+Î01ÿÿmÿ»n!&ºv˜ ³5r+Î01ÿÿfþ;Ë&6qÿÿeþ;‚b&VqõRÙ$ @ €  /]3Í901A#&&'#5>7%[d&‹6u66r6ˆ&aZ -qk'"c77a$(kp-RÙ$ @  €/]Í223901A.'536673NZb%ˆ6u36u6‹&d[Ù.nk'$c88d#'jo.RÛ½t ´/]301A!5½ý•t™™RÙéø·€ /]3Ì201A#"&'332667éS’dš¥y5Z=6Z;øUIœƒ89:5R;ï ´/]301S2#"&546Ç/EE/2CCï8??99??8RÙ“ ´À /2Ì201A"&54632'2654&#"6eeb†…c2@B00B;Ùvhfvueiwl=54==45=Rþ4°´ À/3Ì201W3267#"&54667î0, 4>*kn;[1fFKí./ } k]:m\ @pRÛOé@  € /]33/Í2/201S>3232673#".#"R%=Q0-SLH"+6o {a,QLI$,5ÛAdD##.#9=Ž$-$9=RÙO! @ €/]333Í22301A#5>7##5>7OBST#qEB›BST#qDA!QYQ'ko.QYQ'ko.þÙ&l ´€/2Ì201A5>73þÍ 9E$Ù&^gc)1…Œ;  ©´ #@  € /3ÜÌ3301A#5>72#"&546!2#"&546%=I&_!í+88++88);;)-77´+jn1*jo.Õ3765567337655673ÿÿ 5&$ Sþÿ–ÿÿŽM˜fiÿÿÿÿ®'(µSþÿ–ÿÿÿÿä'+µSþÿ–ÿÿÿÿK',ºSþÿ–ÿÿÿÿÿì&&2_Sþÿ–ÿÿÿÿâ'<HSþÿ–ÿÿÿöW&u]Sý÷ÿ˜ÿÿÿÑÿì´´&…TþÆ@ /¯V+444ÿÿ+¼$ÿÿÄʶ%Ͷrr++201A!#ý~Ͷ²úü¶* ¸@ rr+299+901A!5 .'ÐÐûŠÐËþó! þð¸úÁy{=úù1jc&&cg.üâÿÿÄù¶(ÿÿGP¶=ÿÿÄ/¶+|ÿìÇÍ$@  !r r+2+29/301A!5#"&&54$323265#"Mý§ÓV©ý©¬ÿ¨S”/æÞ,˜ûŒcÍŸ¡Ì`Üî Îd>®®a©þëÇllÈ©áR»ºþ¯å²þý²1‹þÿÿÿÄ‘¶,ÿÿĶ.ê¶@ r r+2+901A#.'#á Õþ¿$ $þÀÕ¶úJ¤5tp-.ps4ü[¶ÿÿÄ„¶0ÿÿÄb¶1G+¶ @  rr+2+29/301s5!5!5!Gäü—îüÀ’±±¤¯¯b°°ÿÿ|ÿìÇÍ2Ķ·rr+2+201s!#!ÄRËýF¶úJúûÿÿÄw¶3Jb¶'@  r r+233+9933301s55!!""&'663!Jåþ'Ñýþ!XUÓþJ”M¦W¥±ýöý­±ÿÿ]¶7ÿÿš¶<fÿìË!*!@"r# ! r+Í223+Í22301A#5.54>75>54&&¡êy@‘ó´Ã·õ=C”ò¯ž½S\¾”ؽYS¼Ë´“ò–fÞaáádŸÁbn–X´þ¤^¥ou¬`ýýb­to¤]ÿÿȶ;o¶@ rr++229/33301A##".53332665>‘ó´ÂµòŽ<ÈZ¼““½[¶þ uÅQþE»R’Ãqãþ!¢LNü²M âIúÍ'@r  r+23233+201A"!5!.54$32!!5>54&&!™ÍgB’xý©v[’T¡.ÔÖ/ T‘]vý¨z“BhÏvÜ›ˆçÂR¬²A¿ú—Æ$ ŸþÝǘú¿A²¬QÃ醜ÜuÿÿWH&,jþÕi ´ r+ÎÎ01ÿÿšH&<jÿõi ´r+ÎÎ01ÿÿmÿìÕl&}S* ³4r+Î01ÿÿVÿì²l&Sä ³-r+Î01ÿÿ«þ[l&ƒSK ³r+Î01ÿÿ¦ÿì´l&…SþÁ ³r+Î01ÿÿžÿí‚´&‘T(µ6*r+ÎÎÎ01mÿìÕa 3'@rr$,,0 r+2323+233+01e266754&#""32366733267#"&'#Wk;¨‹ŠgÊõöÛy¡3 !¢2$% '.SgY‚U®†ÆÍÒÈÇʤ'WU%T .ޤOþoF6˜ Kc0O/«þ½0)@))**r!! rr+2+239+9/39901A2#"&'#466"32654&&##532654&ž‹Öz“´ÀxÝ›q¤CÊâ‹P…OCš]¦œT—fdQ”‹•W­‚“¯ĹŒÅg&"ýß5£Ðc¤:‹{ü©&.™‹f‚>¦‘yxyþ+N@   rr++29901A#466733>7+þj -×/þGÑß,#(ÒNûÏS½²G;¯½S@ýÃ4‚w$ u1Gkÿìl$3@"%1)- rr+2+2901A2&&#"#"&&54667.546326654&˜‰ÉYTQ«c]W8zb{©X€èœ•åƒm¿zKr?Ú²Q¦oH‡^cŠH‡A+˜,9Q80NS5A•¶v¦ãskÍ‘…Ä#,bxLŽ”ý6[¤‚W…KN—l…ªVÿì²b,@,,&r  r+2+29/39901A#"3267#"&54675&&546632&&#"3í˜jŠCG‚Xs¸EB»öç‘jbmrÄ|t¸RFD“`{|¢‘Œ›(R<=M$4 «!)µ‹zz }baA)%›*LIVKmþvµ)@ & r/+9933301E#>54&&'.54>7#!5!µP2É#<%"ce„¶]^¨Û}Yt8þô Ñû,O•imƒÏ€°\Çsyq‡<ÉŸ #l…bT²ŽûFŸ„…Z°€ýÎN›:N'lÿì\! @  r r+2+29/301A# 463 2!"!\fß¶ÿõfݲúþ˜‘ý¨‹›•‹ V Žüþ½£xûc¼þbüþäþÞúþñþó ¦ÿì´N¶r r+2+01A3267#"&&5mNO-^ r:^‘SNüú]\ š=–† ÿÿ«YNùÿùÿìp!-@(  r r r++2+2901c'&&#"5>323267#"&&'.'#Ù3%SU"7/3l‡Z)U$(# */9P9‘ 5ú2_X¤I–rüG29˜ &P<›#ONG?“Fý¾ÿÿ«þ\NwN@  r r+2+9901S33653#Ïæ'# s‡;ÈO¿©ÊNý‹(rm$yJÈÚþ‰þ«¨kþv´<%@!!0 r+2333/9/39901S46675.54667##5!#"33#"#>54&&'.kOƒPEd5N‰W X]'8Ø=V¦…P“²¦ª{¨UR˜hm8O.Ä#:" ef†·_«d™h GmM[zLŸ•%KsMhl”LˆZeh3D[;W£C/c]%-'h¨ÿÿmÿìnbRÿì N@ r r r+2++2301e267#"&5!##57!#¤3R3tþGÇâjÝ6Ž š ˆŠ­üU«YJ£ý`D9™þlb"@r r r+233++201A#"&'##46632%"32654&lsÖ”U›: ËwßšÚzþ‘8“O˜ˆ…(¹ÿƒ0*(SþÙ ¹÷~„þÛÁÅþ¿12ÊÍÍÆmþv·b&@ r+2/901A2&&#"#>54&&'.546‚T¢?=<€C©—>”€m‚8P-Ä#:$"dd[˜n<…ðb#¢!ÞÔs„ID\ÇÀò”êˆô±Ìýu OÛtq¬bÊ X›†:½ÿë¬N@ r r+2+23301A!3267#"&&5!57¬þ\cS/_#!s@aŸ^þÜN£ý§kZ —;—ˆfYJžÿí‚N·r r+2+201E"&&5332654&'3x¶ÏUɉ•›˜" Êþù‡ë”[ý§¬ºàð‹æ~S›¥cþÃþÒmþva)!@r" r r+223+223+01A4632#.54">54&&C—M\Zš_¶›‚»dšÿ˜Àœò‰xò?Tj£^4a\gfÛŠ¬U U»Â†ó¤Âþþ‡ þ%Û zõ©(cyý© h¼†x«]ÿèþmW&"@ r r+2/3+92301S233267#"&&'#&&#"566ÀH[Aƒ5ÑþPÃ0>-.B/WtM Žþ¤×ئE2)CW8nSþ¬Dýþ;K$œ A{XýmR­OOŸ žþ¹!@rr rr++223++2/01A>54&'3#.53w©Z%!Ã"!–þþ¢À¡öŠÄXhú _¸ŽŒôŒŠöˆÐþþ| þ%Ût÷É%ýÖ‘«PrÿìíN0#@##0r )) r+22333+29/01A#"&'##"&&546673326653326654'u)5Z²†v# !‘tƒ´[5)È@=tiCT(½*T?Hc4=AN_´ºl¢úd]]d‹ù¥lº³`Žþ÷¡½ÊCxO6þÊUw>[¯|  Žÿÿÿëÿì´ß&…jþ½ ´&r+ÎÎ01ÿÿžÿí‚ß&‘j ´-!r+ÎÎ01ÿÿmÿìnl&RS ³!r+Î01ÿÿžÿí‚l&‘S# ³r+Î01ÿÿrÿìíl&•SÛ ³1r+Î01ÿÿÄùH&(ji ´!r+ÎÎ01ÿír¶ !@rr r+2++239/301E"&'53266554&#!#!5!!!2ù0X#J,.U8q„þŒËþ¥êþ<ÒáÎ ¯ "^X…rký)±±þƒÂ·ÊËÿÿÄŠ&`v¢i ³ r+Î01|ÿìòÍ#@ r  r+2+29/301A"!!3267#"$546$32&&Ch­M ¾ý>C|´ve¹]VÃwíþÏ’]· ®ÍZONª¶úýýĉþw<|/O]¬³xþàþÑþçpÿÿÄù¶(ë¶"@   rr+22+22901A333###CýØÝÃÞýØ?æýÔÃýÓæòÄý<Äý<Äý=ý åýåýVÿìbË.@ #+r r+2+29/39901A#"&'532654&##5326654&#"'>32@¾œ¹Ã„þúƒâ[>”™DÅÆñ׿·—¿Zž†…ºV_>šºnÚq_”¯µ’Ãm&*·,‚…z¨>qNisE8‹,F(]¤Æq¶@ r r+2+2901S333#4>7##ƽ é¼üóê¶üÖ1tpX­úJ"6zsYûLÿÿÆq&±3èi ³r+Î01Ķ @   rr+2+2901a##33òýƒÍÍnåý–æý¶ý<Äý<ÿêñ¶@ r rr++2+201a#!#"&'532667667!ñÌþC!"P†m$G7 9D+ !&)4kïîÕRˆ¿e « Y•Z@Ê,ŸÿÿÄ„¶0ÿÿÄ/¶+ÿÿ|ÿìÇÍ2ÿÿĶmÿÿÄw¶3ÿÿ|ÿìÍË&ÿÿ]¶7ÿì¶@ r  r+2+29901A#"&'53266733>7þ*>‚¹9j++c4JhK!ýÛÝ| M¶ûãŒÀa Á/aL6üý.000ÿÿfÿìËrÿÿȶ;Äþwж @ r r+Ì33+201e#!3!3ÐÅû¹ÍºË®ýɉ¶úýúø™Ù¶@ rr++29/33301a##"&5332673ÙÌxÓ{ÏßÌzŠr½uÌT+2Á´JýÞuw+)ºÄ“¶ @ rr+23+2201a!3!3!3“ù1Í3Í4ζúýúýÄþw9¶@  r r+Ì333+2201e#!3!3!39ÅùPÍ)Ï*Í®ýɉ¶úýúýúø ,¶ @ rr+2+29/301a!5!32!'32654&&##gþ¤(ÒÉñmþþþìãÒ¬©S£z·±ý¡l¿yÊé­‡]l-Ķ @ r r+22+29/301s332!'32654&&##3ÄÍÉÇñlþÿþë×Ȫ¨P x²À̶ý¡l¿yÊ鬀‡]k,ýY¶úJÄ®¶ @ r r+2+9/301s332!'32654&&##ÄÍïÈöpþöþìÿW§xÕ¶ý¡l¿yÊé­‡]l-AÿìŸË#@  rr+2+29/301A"'6632#"&'532>7!5!.îd±KM[Ýx««V›þÇí·Y]¶d|¼EýC»Hz§0"ª*/iÄþó¤êþ¦½ °%Dƒ¿{°mªx>ÄÿìñÍ'!@ $r r r r+2+++29/301A#"$'!#3!6$3232654&#"ñQ¡ó¡Ïþç• þ­ÍÍV˜ÈÕ ’ûÈ[¿•˜ÁZZ¾——À\Ý©þëÈk¬8Òý^¶ýÀœ»þ®á²þü޲²‹Šþÿ \¶@ r r+2+29/3901A#.54$!!##"33~þë›K†S ¤ÍÏo™Pª¯ÎWý©‚^£~ÉÓúJW³4nYŒÿÿ\ÿìçaDpÿìe"2,@.**# r r+223+29}/333301S4676673>32#".26654&#"pbЦ{ý|=††y/Y~G dŒYŒ¿cä™v»ƒEXFzˆU‹`E{•íOË%,° f»•*U8xݘ¶÷|Z¯ýþŸK¢„¤»Id'`µ’U«UN#@   r r+2+29/39901A#!!24&#!!264&#!3260vck“]Æ þäz»l¬ˆ‚þû }‰ juþðñ~€6dv{t_’SN6zýªYOþªP8GGþÜI«_N¶r r++201A!#_þÊN£üUN%þ€ N@  € ?Í2333?301A3#!#367#!Ÿ¾üþ»XYv@«ü ?dDîNüTýÞ€þ€"}1Q­Œþäþþeÿÿmÿì'bH#N @   r r+22+22901I###33üþCäàþ-»þ.àäþBØ´»µNýêýÈ/ýÑ/ýÑ8ýéýéFÿì©b/@""!! r)r+2+29/39901A2#"&&'5326654&&##532654&#"'66åz¼jp`DnBiÕ¥Pu,F¿oT†OF‹kŒw§|yW—QCYÆbB_cv @lQ\–W °"4#PA7!ËþÀ<[‚\!:")E9/$¸¬ÿþ•åk œCà;Í«oN@ r  r+22+2901A#467####!o·þ¢£þ§¸OTNû²¡5k3üŒu3k=ýfNü¢^«rN @   r r+2+29/301A!3#!#u5ÈÈýËÊNþ;Åû²çþNÿÿmÿìnbR«ZN·r r+2+201A#!#ZÊýåÊNû²©üWNÿÿ«þƒbSÿÿmÿì¥bF+ÃN@ r r++2301A!#!5!Ãþ–Èþš˜«üU«£ÿÿþ%N\kþ&%@r  r rr+++223+22301A#.54667>54&U«ø‡‚÷±Àªøˆù´v›MM›v¼všL¯þGó¤¢ôþ"Þô¤¥ôŽ ¹ý¦ f­uv­f &üÚ g¬u°Îÿÿ ,N[«þ€ýN @ r € r+Ì33+201A#!3!33ý¾ülÊ#Éœþ€€NüU«üR’IN@  r r++29/33301A32673##"&5[gad¥TÉÉW³z«¿Nþr`[:1Þû²ß5C°ž™«šN @ r  r+23+2201A!3!3!šúÉÊÉÊNû²NüU«üU««þ8N@ r  € r+Ì333+2201A3#!3!3!™ŸÂú5ÉÊÉÊNüRýáNüU«üU«)N@  r r+2+29/301A!2#!!5!!2654&B$™Èb]Ç þþ¤BþãvŠ€NþAGŒhh˜T«£ý£þ©S`[I«¤N @ r r+22+29/301s3!2#%32654&##3«Ê“À]ZÁ›ÿðsŒ‚zófÉNþAGŒhh˜TšRa\IþNû²«_N @  r r+2+9/301A!2#!34&#!!26u2”Ãa]Äœþ Ê!…zþÞ$pGŒhh˜TNüÿ\Iþ¨SCÿì’b@ r r+2+29/301E"&'532667!5!&&#"'6632r`?A”Xf’Týö ˜•>‹88<§Y™ê„‡ô¨'K™u™¡œ"š'qøÎÁÿ~«ÿìNb&!@ #r r r r+2+++29/301A#"&&'!#3!>32326654&&#"NvÛ˜‹Ò| þóÉÉ|Њ’Úyüÿ:|dc|:;{cc|;)µþÿ‡tâ¥þNþ;—Òp‡þ´ƒ¶_^¶„‚´\\´×N@ r  r+2+29/3901s#.5463!##33!"þä8BrFÞ³îÉúø„xöþêthÉL^ ©û²²R[[baÿÿmÿì'ß&Hjõ ´5)r+ÎÎ01þ\/)@'#'r rr+2++/339/33301A"&'532654&#"##5353!!3>322.K7 8Kuur‡;Ë››Éþ "hƒJ²[@„þ £ Kb'ƒ€\¯ýøÑ´´”2a":M(T²Œü½f–Rÿÿ«_!&Ìv4 ³ r+Î01mÿì½b @ r r+2+29/301E"&&546632&&#"!!3267~žï„‰òœV£@;=‰xúÃÎþu"GŒj™ršM'§ ÿÿeÿì‚bVÿÿ†ïLÿÿÿæ9ß&¯jþ¸ ´ r+ÎÎ01ÿÿÿ‹þ†ïM ÿñlN(@! r r" r+2+2+29/301A32#!!#"&'532>7#32654&Ñë“¿^[ÅžþYþû<[Z$9")F:.%LÑÔrŒƒNþAGŒhh˜T«ÿþ•äk šDá;Íý£þ©S`[I«¶N#@ r  r+23+29/33301A32#!!#3!#32654&è–À]ZßþTþ)ÌÌÚž×Øs‹Nþ?F‹hh˜TéþNþ=Ãý£þ©S`[Iÿÿ[éÿÿ«E!&Óvw ³r+Î01ÿÿþ%&\3Ë ³"r+Î01«þfN @ r  r+22Ì+201a!3!3!#-þ~Ê(Éþ…¾NüU«û²þÄ(å·rr++Ì301A!#!(ýiͪåþúü¶/«l‹·r r++Ì301A!#!lþ Ê‹þ(üMN=ÿÿcŠ&:CAi ³0r+Î01ÿÿF!&ZCµ ³1r+Î01ÿÿcŠ&:vçi ³0r+Î01ÿÿF!&ZvZ ³1r+Î01ÿÿcH&:jdi ´?3r+ÎÎ01ÿÿFß&ZjØ ´@4r+ÎÎ01ÿÿšŠ&<CÒi ³r+Î01ÿÿþ%!&\C˜ ³$r+Î01RÒ®{±/201S5!R\Ò©©RÒ®{±/201S5!R\Ò©©ÿÿRÒ®{ÿüþ:Kÿ ³/3Î201A!5!5!5!Kü±Oü±Oþ:‹~Á[¶ µ€r+Í901S'>73' 8B!“)! ÁI§§HN²®GÁZ¶ µ€ r+Í901A#>7K8C!’¶I¦¦J:‚†}6ÿÿAþøí'û7Á\¶ µ € r+Í301S#.'7ó !)“!C8¶G¯²MJ¦¦IÁã¶ @ € r+2Ì22301A#'>7##'>7ã(" Ë9C"ö(" Ê 7B"¶N³­GI¦§IN³­GI¦§IÁâ¶ @  € r+2Ì23301A#>7##>7Ó9B!”)" ¿9B!‘¶J¦¥JM²¯GJ¦¥J:‚†}6ÿÿAþø í 'û7€• @  //9/33301A%#53%•þ¥1Ó0þ¸H0Ó1[Øü õ¸¡þ_w'@  //99//33333301A%%#553%%B[þ¥0Ô/þªV))þªV/Ô0[þ¥)ûµþ‚~µµ~þ‚µþø™èiï± /301S46632#"&&™=iBBi==iBBi=ì^r33s][s66rÿÿŽÿäÓý&';\ÿí :Ë '3?K,@@4F: r(." r  r+22/Ì2?+2Ì2+2Ì201A2#"&546"32654&%#2#"&546"32654&%2#"&546"32654&‘œ¡›¢–Ÿ—ŸIEEIKIHmüÕ©+‰š¢›¡—ž–ŸIDDIKJIˆš¡™¢—ž–ŸJDDJKIIËïÚÚóóÚÚïžžŸ  ŸŸxúJ¶ýÌðÙÙóóÙÙðžž ž žðÙÙóóÙÙðžž ž žT¨"¶ ³r+Í01A3#]Åþ¶„¶ýòT¨¶µr+2Î201A3!3Î Åþµþ Åþ¶¨ýòýòPs<Õ·/Ì901SP\þãþ¤0¥Qþ þ¡R£Ns:Õ·/Ì901S'Ý]þ£þäÕþ\þ]R`_ÿÿŽÿä…¶&íþ…¶ ´r?+01A#…ü¢¦]¶úJ¶pLÕí@  /2/Ì233301A2#4&#"#3366Ô|…‚KNoY‚g"zís€þRŸOPzsþ¯•\44O$¶ @ r ?+29/3Î22301s#53!!!!!!ùªª+ý=ýÃ?þÁ‰°þ"°á‰þòIOÊ),@ %%"!! r+2?339/333Î22301A2&&#"!!!!!!5>5#535#535466¶q³GCDOhxþqþo"?.ûúCY.ÃÃÃÃ\»Ê.!œ&r‚¢‰¡‹NrL³¨K|X‹¡‰…Ãf¥ÿì"¶ .-@% r,--*.  r /+29/3/Í3333+201A ####32654&3#3267#"&&5#577Æø8€Õ=ÄT9µ²¡´îî<>#O_?Pt?›¢B¶âÐ_©‚Jýж­ýÕ…˜‰…àÛ”þjLO ‘ =fªULÎ8ÿìyÈ6+@300'* # rr+2+29/3Î2233301A2&&#"!!!!3267#"&&'#53&&5467#53>f®RM32!3267&&#"y­íy]œ¼^—ïŒüÅ,¡\•±EH0x¬¬&je“/# “”ÖŠBŠý¯þœ/L{o)LL‹(OG.þé<ÿð#¶8D.@93'?-  r  r+2/Ì9+2/2Ì2901s34667'%32654&''"&54667&&546326654&#"ù^§ü£[1fM–QPUL,<OR˜£*I-?Fªvu¥U@Pc­Š:GE?>EL¶úJJ"EA+HfÅü”þH97M /<&8Iw†r9T?']MmtnnLc!#lTrŒB61::15B+ÿðGÉ-;T`9@45COU[I<.< r(' !!r+2/2Ì29/399+2/2Ì2901a3"&'532654&##532654&#"'66322654&''"&54667&&546326654&#"A^¦ü£±Kƒ>C‰@d^jivqhWL=;i7L>ŽaŠ—WEV_¬ QOTM+<OR—¤+I-?Fªuu¦U@Od­Š:FE?>EM¶úJ:Š"'NFCDxN=:=*$e.8~eOi kPx’þ-H97M /<&8Iw†r9T?']MmtnnLc!#lTrŒB61::15BNÿïJ¶"0IU=@ )*8DJP>1#1 r r+2/2Ì29/3333+2/2Ì2901a3"&'532654&#"'!!66322654&''"&54667&&546326654&#"?^¦ü£šC.7ˆ7[kh`.KI"òþŠ<$ˆ¶²QOTM,<OS˜¤+I-?Fªuu¦U@Od­Š:GF?>EM¶úJ8!'OVLS(«}Ñ‚Žžþ/G98L /<'8Hx‡q9U>(\NlunoLc #mTqB62::24BUÿð0¶ 0<-@+17%  r r+2/Ì33+2/2Ì2901s3!5!2654&''"&5467&&546326654&#"ç^§ü¢Ñ]þ;iþ§QOTL,<OS˜£]C?Fªuu¦U@Pc­‹;FD??DK¶úJJè„lýþH97M /<&8Iw†rUk#']MmtnnLc!#lTrŒB61::15B[ÿì>É&6@4''/ rr+2+29/33301A2#"&&54>32665.#"5>"32>7&&Š}¨d+-^”Ì„£D$L|°tTˆ)Ûœøœÿÿcÿÿ.õ&*ý|ÿÿcÿÿ.õ&!*ý|g@Á @  r?2+2901a3' *þ=ÃSÃþ=)/þÑþÓßâýý!çøùþ½ÙÞ· € /]3Ì201A#"&&'33267Þ W¬ŠŽ¨N¹ `k^o fJHŽioNSj~Í… ´ €/Í9901A#5>7… 0; q (mp0LUP!ÿÿÿwþ;‰ÿƒqþ t؇ ´ €/3Í201A#5>7‡"Ã0?% #mt,(lq/TÅÇ @  xw?3ä9/333301A##5!533!5467Ŧþs£þÛ :¥ÀÀpCýÌÄ,j1` ñDC›Á@ xw?3ä29/333301A!6632#"&'532654&#"'mþŠ<$ˆµ±¨D‹/6‰7[kg`/JH"Á~ÐŽ‚!'PUMR'¬:T£Á¶xw?ä3301S!5!¡^þ;iþ§Té„lüÿ2D¦Ñ'3@ '.! x(w?2ä2901A2#"&&54667&&54632654&'"6654&mu¦U@Od­ŒdŽI+I-?Fª[,<OOQOTM>EM::GFÑnnLc!#lTrŒm^Ï{B.$*/;J1%&4^0  %1}o¾0oÁÁoþÐÁù/ÂmmÂþÑmmmmþooú¨ú;mm¦Jooooü/yýhI‡¦¦‡‰¤¤‰\ii\\hhÉCS1B :EPZb" "ãš+% *þú f$2’þre]TþÁª!-@ !%++//9/999301I5467>54&#"663232654&#"þ¬üTüVë*C;N'½£9yp.RD7?>5DLCQ<8SS84/TbC‰˜,²".:/:G5=qP;þíH??HL==ÿÿÿ‹þz &°KÿV ³ r+Î01ÿÿÁZ¶ÿì!;G.@ #CC4#4#4- r</2+299/}/33333301A23##".546654&#"'663232654&'&$&5466".ht³€QƒA‰Ø–p•Y% # 3.)m>_W boužPýþÍ‹N£}UUaÙ³ :Tk!R™Úˆ¢8›þôÈp9d~D4e[!.$ †fR.fn;U{€Ã6vÅxXŽT¡RLKyHf n8¢Ã@rr r+2++901A>7>32&&#"#3J"HG@?Q7 4 !7%MYY$ÏþàðN¤ƒ-2A! ">(·ÉaýÝ/‡ÿìÐN4-@((r $$ r. r+2+233+22339/01A##"&'##"&54667!57!32655332654&&Ðû-Z³…u’"#‘tÃÎ3 þï™^üÚ1skb\¾,U?jq+N¢J PžÚqd]]d÷òP¡IWK¢EšŸP·˜“w¹¹Uw>š´OŸšÿÿÄ„Š&0vÏi ³ r+Î01ÿÿ«â!&Pv ³/!r+Î01ÿÿýÈ+¼&$SDÿÿ\ýÈça&DSÕµ/ ¸ÿ–°V+44nýÈ;ÿ‚ ´ À|/3Ì201A"&54632'2654&#"Re~faˆ†c2@C/2@:ýÈvggvveivl=46<<64=|ÿì+@ (r! r+2+299Î201A#"&&54$32>533265#"ÅTªü©­ÿ¨R”/ç©T26Ðy~+*ûŽbÍ ¢Ë_Ûî¡ÎcÝ©þëÇllÈ©áR»peOsHˆÈ1VÑz²þý² 2‹þþmÿìEö)@ ' r r+2+299Î201A#"&532>53326654&&#"n}蟕æ‚ïnºB:>Ï@pX "üÍ@ˆkk‡??‡mŸ’)¶ÿ‡‡¶)IDQvH_˜k@œ[…¶]^¶„ƒ³\̶ÿì¤@ r r+2+993/Î201A>53# 5332665+=DÎ 0T…cyúÃþèþÙμº~žI¶Å MyPL…jIý™šòŒ'õ®üS³»Z¥n®¡ÿìÈ÷")@r  r r++233+993/Ì201A#'##"&&5332653>5º 0T„a¡ #j…J²[Êsv¬‰Ê7&&'3367< VŸw¹(SHíµA}f?È Pm5 $'’ÉBe9GpF OÇþŽþœ²G£ªNþgü2Áþ¥þâf#HJ&$bÛd¨þ»þшt"R¼ÿ¶$@   ¸ÿÿ´rr+2+9/3Í22301a!5!53!!32!'32654&&##AþÎ2Ï™þg¸ÐùnþýþáÍ»µ¬Sª€ŸB¥ÏÏ¥ël¿yÊ鬀‡]j-¸'!@ rr+2Í33+29/301A!!!2#!#535!!2654&Î_þ¡&æÞ]È þøøáþæw‘ˆ'Ù¢þáž›h˜T¬¢ÙüÊþ©S`[IÄÿì0Ë*'@ rrr$ r+2+++29/33301E"$'!#3!>72&&#"!!3267wÞþÙ˜ þÀÍÍFj²øžqÐVLK¨_i©{L ¨ýTAz±sc°\V¶¬7Òý_¶ýœŽè§[4+«$532&&#"!!3267—•â… þæÊÊÝŠY¡997‚>b†I ýÿJŠdXŽ@<má«þNþ:¨Ña&›EŠg£r˜L'¨{¸ #@  r r+23+9/93301A#####!'.*QÒþü‹¹þûÏPm EPK ¸úHšýfšýf¸®FOM±½CGD—N #@  r r+23+9/93301A######!'.ÇÐȽi³n¹ÊÏ}  98 Nû²Ôþ,Ôþ,Nƒ!HGŽ‹"MHÄ‹¸ 0@  r ?333+29/9333301A#####!#3!!'.;PÖþýˆ·‹þûÓþrÍÍÖùmFIG ¸úHŸýaŸýaŸýa¶ýšh®BGG"´¼DEA«XN.@  r  ?333+29/9333301A#####!#3!#!'.‰ÏÈÁf²fÃÈËþ×½½nÀ}  3 4 Nû²âþâþãþNþ7ɃMOv€"KGÕ¶!&@!  r?33+29/333301A#.'##>75!Qþc{—^$Ð…?i[Í\h=…ÔŒ?Y\þk¯ýLZ¶þ ]¢tþ7´\j/ýT¬/j\þLÉV†`: í³þ\üN &@  r ?33+29/333301A#.'##>75!…þ»ctH~¾w5RFµJR2y½~ Hvaþ¼ýðNfþ– N|Uþ­ACM#þ ö"NDþ¿SS}Nif›þ×Äî¶#&?@""%##&  r?333?+9/33333333301A#.'##667!#3!5!hþd{—]$̇BiZÎ[j?…Ó“7%þXÍͱþw±ýMZ¶þ \¢tþ7´`h+ýVª0iZþLÎNjý[¶ý ß³þ[«¿N#&:@""%##&  r ?333+9/33333333301A#.'##667!#3!5!IþºcuG~½w6RFµGU3y½)þĽ½þÆýïNfþ• L|Uþ­ABM#þ õ"MCþ¿S/PþNþ=]f›þÜ:þGWÙZ=@$ /@@7/== +/RT€WNNG r+223Ì22/3/39/993993301A2&&#"326632&&#"#"&&546676654&##5326654&#"'667.'53>r$5 *1l-±½Â™µÈFÛ—nr'HbR}q?SajT;t„U…ŸGXȪǺöÒÀ¹—¾[ †yÂW`M´q"SO1w4(YiÙ wXDÀ‰”°±’`p>3"/8³G{MU{G‚‡‡u¨>qNisE8‹5M)YS!m60`@þh©S[;@$ /BB7/?? +/SU€XOH r+222Ì22/3/39/993993301A2&&#"326632&&#"#"&&54667>54&&##532654&#"'667.'53>#5 ).b+wp_CmCdÙ®eg$J\Hyj1FO\/.yŒLvŠ:K¯•aŒKFj‹w‘§}xQžQC?zEEC‹1m9&YjS xK;Šlcw ?iQ\’V/ 1.¢ErDMxG$M?ÿÿo¶tÿÿžþ¹”|ÿìÇÍ"@ r r+2+29/301A#"&&54$322667!"!&&ÇV©ý©¬ÿ¨S”/æÞ,˜ý[•Æiüg hǘ’Äl •ÜÝ©þëÇllÈ©áR»ºþ¯üÙy㜜âzrÔ”ßûmÿìnb@  r r+2+29/301A#"&5322667!"!.n}蟕æ‚ï˜æ€þaEý¡Fƒ_Ž’_ G)¶ÿ‡‡¶)†þý³N˜mm˜N* šfŒH^Ã@ r rr++9+201A"#3>7>32&&û.=1þ­æý÷ÔJ! «-Sta+G17r[ûë¶üOBla2&NRZ0³T¥ cY@  r rr+2++901A2&&#"#33667>3&-"þññþbÒú' $CbY#D3üáNý=O~%-ˆD²iy3ÿÿ^Š&q âi ´$1r+ÎÎ01ÿÿc!&r | ´"/r+ÎÎ01|þ ØÍ!?&@?()":3-r"rr r+2+2++?3901A#"&&54$3232654&#"%336673#"&'5326677_MœêŸ¡ìšJ†ØÑŠûñV·‘“µSS´‘’¸Wh×ï .ÝÕþ''o™f2I>#?[B2Ý©þëÇllÈ©áR»ºþ¯å²þý²´Š‹þÿ¾ý‚0\W*3‘J}ûi—Q  1Z<‚ÿÿmþÕb&R\°|ÿŠ*8'@!$$$ r1.++ r+2Í3Í3+Í333Í01E"&'.54$766326632>54'#"&'J7G Ù’Iƒ¿ G54G¹…J‘Ö‹H½D2/Ez¡Q¶µG03Dz¤SS¤v38|—Ë9Å;--;ÅþÆË—ýÂ}83 ,$%+•ë˜æ#(,''+–阙ë•mÿ–Õ°3'@%"r.1+11  r+Í333Í+2Í3Í301A#"&'.54766324&&'#"&'663266ÕgÅŠ @47> „ÆméÒ>41@ †ÅmÎ2fP;46; yqrz :42;yq)žì20/5ê í"2''4‘éi¡i)()*Ê ¢Î)#%&Î|ÿìÎS)kC@#Lf rU\r €#:3riIFFCGGCC* r+23/333+2Þ2Ì2/Ì233+2+201A54>3233#".#"56654.54632"$546632&&#"3267332654.#"'6632#"&'º%BY5;ps‚M\Žq^,76O;=):1=F=sþßÃþþI‹Å}O=L,j".54632&&#"32673326654&#"'6632#"&'ƒ#?X6ø×IÔ‰¾ƒ%•ÏÊ^•h6199þË(0`³~ÊÏ–%ƒÿ¾·ý‚TGJQÿÿ2ÿø4&]‰qi ³7r+Î01ÿÿ'<µ&^‰Ù ³4r+Î01{þòË @  rr+2/+201A2&&#"3267#".546$NrØZMK¯bvºƒDiß°5j.͘ëªn4`º Ë/*­#1P–Õ…°ÿ‹ ýZØG…¹æ„¦Énmþ¹b@  rrr+2++201A2&&#"3267#.5466„T¥<:;‰'66&&'#667%&&''&&'&&'5#'>7vCK£<]-msûÙ^-ms6BJ¤þMUÀIMµN C#^( 62@.l,ü/.k-](Qç3su5U¿Jþ!' „ '.¢B-k-^64ü]63A-l2' „ B#ý¥LµOUÀIÚ.mr5CJ¤; J¤<]E­PýÜ '-]( …LU¿J3su5ÄþwUl''@#€   r r+2Î3+299Þ2Ì201A#4667##3333"&&'332673Ð¥Áüñê½ èæý`¨L¶ al]o »W­þw‰"<“Ž4ûM¶üÔ?‘ƒ/®úýýĶGŽjoNSjgŽJ«þi%'@!€ r r+Î33+299Þ2Í201A#4667#333"&&'332673ƒÅýÀõÁAõÕ‰ýÊŽ§N· bj^p » W­þh+hb üƒNý¡,gc(}üTýßXHŽilQSjfJ-‰¶ @r?3+9/333Î201A!!32!!#535#32654&&‘?þÁ²Ôrþòþàþi——²À²³W¦¶¶®ûk¾{ÎåR®¶üñþ€‡]j-f @?33/3/9/33301A!!!2#!#535!!2654&|;þÅ%šÉb^É þ››âþèw†ñ‘ýýGŒhh˜T’‘ñûÝþ©S`[IĶ7@   r r++29/33333333301A'###! 3267'76654&##dompˆ2pB®Íý $Aav|28®´¼wÌ?”Y· ý϶âþ „W¤!mQˆ†«þƒb29@ r r r,++-**'' r+2323233333+++2301E"&&'##33>32'"3267'76654&ÄU€[ Ê¥ [WÉñYPmr{!LRj;8‚n(zxy)'Š-K+)n%þC8ž1Q0þãþå¨îG”X¤ ÐS¤{!„µ_žY2™hÈÈ.¶ @   rr++29/33301A!!!##53ýu£þ]Í––¶±þ&¯ý„|¯‹ gN @   r r++29/33301A!!!##53gþWþ©É™™N¨þÈœþ.ÒœàÄþ¶&@  rr++2/39/33301A"#!!6632#"&'532>54&&L/mÍ`ým+~=–ò«[Q“Æt`„>>~GYˆ\/sÚr ýž¶±þ V¨ö ¥ø¦R¶@{²rÓm«þ "N!#@!r rr+2++29/33301A!6632#"&'532654&#"#tþ#N'¦îyÍ€Iv6.wA~©´G ÊN¨þÊ|þÅÅùw±!¿ÉÈÆþ@Nþw?¶(@ r  r+23Ì3+22901I3####33ÔýعÚÅuýÔÃýÓæ@ýØÝöý=ýÂý‰åýåýòÄý<Äý<ÄþlN(@ r  r+233/Ì+22901I3####33üþC[Ò½lþ-»þ.àäþBØ´»µNýêþhýá/ýÑ/ýÑ8ýéýéÿÿVþ4bË&°kmÿÿFþ4©b&ÐkÄþwX¶!@   r r+23Ì+2901I3###3äý–ïïÅ…ýƒÍÍn¶ý<ýÃý‰æý¶ý<Ä«þ€}N@  r  r+Î33+2901A##333ÁdþÊÊÍÝþ/lÃþ€€/ýÑNýéýíþgýÞĶ#@   rr+2+299//901A#3##33yyqòýƒÍÍnåý– Ùûæý¶ý<Äý<«EN#@    r r+2+299//901A#%3##3c€_Ýþ/÷èþÊÊöüh˜XýíýÅ/ýÑNýé#ö¶@  rr+2+2Î2901S5!##33#'¬óý„ÍÍnåý•`°°û æý¶ý<Äý<E)@r  rr+Î233+29+01A!!3###535u`þ ÍÝþ/÷èþÊ´ýfýíýÅ/ýÑÑ´ “¶ @   rr+2+22901I##!5!wý–†òýƒÍþ³n¶ý<ýæý²ý<ÄN @   r r+2+22901I##!5!ßþ/÷âþÂþ¥ÎNýëýÇ/ýÑ® ýéÄþwú¶@  r r+Î33+29/301A#!#3!335Òý.ÍÍÒÌËþw‰£ý]¶ýžbúÿý«þ0N@  r  r+Î33+29/301A#!#3!33oÅýËÊÊ5ȾþçþNþ;ÅüTýßÄ{¶ @ r r+2+239/301s3!!!#!ÄÍÑþ´Íý/¶ýžb²úü£ý]«ÏN @ r r+2+239/301s3!!!#!«Ê5%þ£ÈýËNþ;Å üRçþÄþC¶)#@"(&)r$(r/3+2+29/33301A6632#"&'532>54.#"#!#æ1|8è§ZP’Åub?>~GV‡]0C{ªg-m#ËývͶýcV¨÷¡£ö¥S¶@|°p´t7 ý¡úý¶«þ ¶N#%@" #r" r r+2+2+29/33301A6632#"&'532654&#"#!#5C ‘ç‡sÃzGr3,o>u…Ÿ¤@Éþ ÊNþ$xýÊÅùw±!¿ÉÈÆþA«üUN|ÿ¬æÍ=N,@B::%r1.. rK/3333+23+29}/301A3267#"&'#"&&54$32&&#"3267.54>324&&#">»Gr>M,'F49\ŸG3‚CŸö¨W‹ÚC|%6b2p£h2sÐŒ,4M*7eŠSi«eÆ(N:,C.)F."6654&&R7[!,H(™Aˆi- 6EO`X‹PpM8:G'IŠ:,iL áu;y¶ª*<D2>M8b ŸÚÈw±a @©vxŸOKŸ}ŒÄ5 ™ +%“ÿ ÕšTþf1^Ca‘-(“h@]1ÿÿ|þ4ÍË&&k+ÿÿmþ4¥b&FkŠþw]¶ @ r r+Î3+2301A#!5!!3§ÔþCGþCÌþw‰³³û²ýÂ+þÁN @  r r+2Ì+2301A!3##!5Áþ˜»¾ÅþšN¢üôýᬢÿÿš¶<þ%N@  rr++2901A#336673wÉþRÖà3 /ÞÖþRþêPý¬Kª22¨MTû°š¶%@  r r+2+9/33333301a!5!533!!çþË5þànpÜþ4þÌP±.‡ýD¼ü‚7±þ°þ%N!@  rr++29/9933301A!!#!5!33667%þSþãÉþáþTÖÝ/ 1ÙNû²™þ­S™Ný°S›==ŸTKþw¶ @  r r+2Î3+2901A##333Uwþƒþ~Úæþ;ãa`Ûþ:rÉþw‰mý“ø¾ýÇ9ý@ý¿ý þ€qN @   r  r+2Î3+2901A##333³lþßþÝãˆþŠåãþ‰´þ€€¯þQ4þj–ýæþnýÞþwÓ¶@ r r+Î33+22301A!!5!!!33û¡þf3þ4¹ÌÐþw‰³³û°úÿýÂ+þÀN!@   rr/++3323301A!!5!!!33üXþÒMþ©É¿þ¬¢¢ü÷«üRýá™þw¥¶!@ rr+2Ì+29/33301A3###"&533267ÙÌÄÔxÓ{ÏßÌzŠr½u¶úÿý‰T+2Á´JýÞuw+)º’þ€N@  r r+2Ì+29/301A3###"&533267I¼ÀÅW³z«¿Égad¥TNüTýÞ€ß5C°ž™þr`[:1Þ™Ù¶3@   rr++29/3/3333/3301A##".5333667ÙÎG‹Lyp°{@ÌyLC¶úJQ) þÇ.,ZbJýÞuwYþ¯'½’?N/@   r r++29/3/3333/301A##5#"&533667?Ê6m@t  ª»Ébat;p8Nû²ß#6÷粚þp_Z"þë 1$ÞŶ@ rr++29/33301S36632#4&#"#ÅÌwÜsÎàÍy‹r½t̶ý¬,1À´ýµ"vw+)ýEÿÿ«[K*ÿìlÍ)2%@$$//  r*r+2+29/3333/01A2!32667#"$'#"&5467333>"!4&ÿÞ~ûÖ qÖŸ`¯–y°ráø"ÿìý`'/%@##++  r(r+2+29/3333/01A2!3267#".'"&&5467333>"!4&&.’Ïný­ r£XS©twÂP[A š 57‡Ð}z– %9u`zߘr¹µ''¨&#C…ƃ0bK'F9/4Ídœš˜\‰M*þvlÍ,5)@!!((22  r-r+2+2Í39/3333/01A2!32667#&&'#"&5467333>"!4&ÿÞ~ûÖ qÖŸ`¯–y°ráø"þý`)1(@ --) ' *r+2?33Í9/3333/01E.'"&&5467333>32!3267#"!4&&Öz³f[A š 57†Ð€’Ïný­ r£XG‘\¿Uz– %9uØ–0bK'F9/4šÍgzߘr¹µ''¨" þ‘Cš˜\‰MÿÿÄ‘¶,ÿÿë&¯32i ³r+Î01ÿÿ#&Ï3É ³ r+Î01Äþ:¶+)@*''"+%r$r/3++29/3333301A6232#"&'532>54.#"#3667íý’  –ð«[T–Éu`ƒ??€NT†`4OŒ¸j@q,ÍÍ,a0°¶ýUQžíž¥ø£R¶>x²t²o4 ý·¶ý37w6é«þ WN!#@r r r+2++29/33301e#"&'5326654&&#"#33W}Ñ}Lm0.iAQ~HW¥w+\%ÈÈÓæþ/”åƒBÃüx®!U­…ˆ¯T þPNþýþqðþwÖ¶!@  r rr+2Ì+2+201e3##!#"&'532667667!ñåç¥ÒþC!"P†m$G7 9D+ !&)4µý‰kïîÕRˆ¿e « Y•Z@Ê,Ÿ þáN@r r€ r+2Ì+2+201e3##!#"&'532>7! ԉȃÐþ¿<[‚[!:")E9.$¸¢ý߬ÿþ–åk œDŽà9ÍÄþ/¶@ rr /3++29/301A#"&'53265!#3!/†ó¡b„>=N°¶ý.ÍÍÒ¶úÊÔþãµèèý]¶ýžb«þ rN@r r r+2++29/301A#"&'53267!#3!rn¿yJo1.m=r{ýÍÊÊ3NûÔ¼ìn°#ªÄ¿þNþ;ÅÄþw¶!@   r€ r+Ì33+29/301e3##!#3!3/æŸè§Òý.ÍÍÒ̵ý‰£ý]¶ýžb«þHN!@r € r+Ì33+29/301s3!33##!«Ê5È֊ȃÏýËNþ;ÅüTýßçþ™þwÙ¶"@  r€?Í3+29/33301a##3#"&5332673ÙÃÄ»xÓ{ÏßÌzŠr½uÌþw>Ÿ+2Á´JýÞuw+)º’þ€IN"@ r€ ?Í3+29/33301A##3#"&533267I¸¿®W³z«¿Égad¥TNû²þ€"=5C°ž™þr`[:1ÞÄþwi¶%@   r€ r+223Ì+2901a##!3!3##4>7#Aþ8¼'²º%åé§Ì þ-é'hla"ü•¶ûY§úÿý‰w#ek_û«þDN#@ r € r+Ì333+2901e##467####!!DŠÈ„¾þ¢£þ§¸OT¢ýß¡5k3üŒu3k=ýfNü¢^üTÿÿÄ‘¶,ÿÿ+&$3Ni ³r+Î01ÿÿ\ÿìç&D3þ ³-r+Î01ÿÿ+H&$j<i ´(r+ÎÎ01ÿÿ\ÿìçß&Djí ´>2r+ÎÎ01ÿÿÿÿª¶ˆÿÿ\ÿìb¨ÿÿÄ&(3(i ³r+Î01ÿÿmÿì'&H3 ³$r+Î01ƒÿì‹Í%@ ""  r r+2+29/301A"5>32#"$55!.2667!Æd²–<;Œ±r­³[U©÷¢ßþí1 rÔqƒÁr ü¨P´/¸+jÇþꬬþìÅi¸TéEžáwû€oÒ—•Ôoÿÿfÿì!bsÿÿƒÿì‹H&Îji ´;/ r+ÎÎ01ÿÿfÿì!ß&sjã ´5)r+ÎÎ01ÿÿëH&¯j!i ´'r+ÎÎ01ÿÿ#ß&Ïj¸ ´' r+ÎÎ01ÿÿVÿìbH&°ji ´D8+r+ÎÎ01ÿÿFÿì©ß&Ðj™ ´E9r+ÎÎ01Eÿì?¶%@ r r+2+9/3333301A#"&'5326654&&##5!5þ€þúÇy×]`âg„ªQb“„Æýw¶–þ% ÐÉ€Çp&*·.3C}WVq8Ÿ½²$þÔN#@ r r+2+9/333301A#"&'5326654&&##5!5¢þ8œã{ƒ÷®yÅJLÌppœSaºŠs½ý”Nþ tËŽÞ~'"µ$4Q”ajFà¤ÿÿÆqÝ&±L¨i ³r+Î01ÿÿ«”t&ÑL# ³r+Î01ÿÿÆqH&±j×i ´+r+ÎÎ01ÿÿ«”ß&ÑjS ´(r+ÎÎ01ÿÿ|ÿìÇH&2jÉi ´6*r+ÎÎ01ÿÿmÿìnß&Rj ´*6r+ÎÎ01ÿÿ|ÿìÇÍoÿÿmÿìnbpÿÿ|ÿìÇ1&ojÊR ´8,r+ÎÎ01ÿÿmÿìnß&pj ´5) r+ÎÎ01ÿÿAÿìŸ1&ÆjÿæR ´9-r+ÎÎ01ÿÿCÿì’ß&æjÿj ´5)r+ÎÎ01ÿÿÿìÝ&¼Li ³ r+Î01ÿÿþ%t&\L‹ ³ r+Î01ÿÿÿìH&¼jEi ´3'r+ÎÎ01ÿÿþ%ß&\jº ´3'r+ÎÎ01ÿÿÿìŠ&¼RFi ´%2r+ÎÎ01ÿÿþ%!&\R¼ ´%2r+ÎÎ01ÿÿ™ÙH&Àj^i ´) r+ÎÎ01ÿÿ’Iß&àj ´)r+ÎÎ01Äþw¶ @  r€r+2Ì+201A!3##ýtÊÃÔ¶²û±ý‰¶«þ^N @  r€ r+2Ì+201A!3##^þ¼ÁÅN¢üôýáNÿÿÄH&Äji ´/#r+ÎÎ01ÿÿ«¤ß&äjÌ ´/#r+ÎÎ01ÿÿ.þZ¶&ˆl© þ_gN"@ r ?3Ì2+29/33301A"&'5326655##53!!!!3*'C5 ,É™™ÁþWþ©°6lþ_  2'ŽÒœà¨þÈœþÇþà]}@þZ ¶$@r  r+23Ì2+2901A"&'5326655##333)H4 .pþƒþ~Úæþ;ãa`Ûþ:uµ7rþZ¤ 7-€mý“ø¾ýÇ9ý@ý¼þÉX‚G þ_eN#@r   ?33Ì2+2901A"&'5326655##333p(C4 ,nþßþÝãˆþŠåãþ‰¥6lþ_  2'ޝþQ4þj–ýæþeþà]}@ȶ!@  rr+2+29/333301S!33!!##!}1þxãa_Üþw5þôêþƒþ~Û°þÉUaýÆ:ýŸ°ý[mý“¥ ,N%@    rr+2+29/9933301S!33!!##!rþÀåãþ½þúXåþßþÝãTþþ‚Ìþj–þ4šþ¯þQèv;¶ @  r r+2+9/301a $5466333%3#"œþÚÿp÷ÈÉÍþz¹´|¥R°ÙÈ{Çw\úJ­þ7rX†wÿÿmÿìDGuÿ쀶+#@r( r r+2+2+99//301A32653#"&'#"&&54>33#"3265nhcnÊÔÈx¨+0¨‚–ÌhA‹Ù—‘‡y§T;uUw¶û¸nfwuÊþ³ÏWMIZc¿‹c£w@_üñ5xbUq8xWkÿì•&3+@&r!''r-- r r+2+23+9/33+01A32653#"&&'#"323&&5"326754&'[zldÉ6h˜ab~O&i[ÖûïÂS{X  þ舆„Œœ{û}y„~ƒ'þ¼e•a/,T94U2$.L0"q&£ý§ÔÈÇȺ¹!ÅÒ?ÿì„Ë5#@&&%% r.r+2+299//39901A232653#".'4.##5326654&#"'>•Ñp·ŒrR2SbF:T.~‚'þ»d•b0)PxOEW)›IXKJ%"™&(?þwüË( @ !r+2?3Î9/39901A23##4.##5326654&#"'>(˜×s¼‘±½ÑÄÖ8q¨oÇ̶Wš„z¸Kg9”³ËZ¡k˜¯±’ëý‰ @bA žBvMhuG0‰*D(Oþ_`& @  r+2?3Î9/39901A23##4&&##532654&#"'66Ýy»kn\Bk@À¿ÃDŠj›…§}uS¢LDXÆ`B`bt @kR”ýá6>S)œHWJM'"™&(ÿê<¶.@ .r% r r+2+2+29/01A32653#"&&5!#"&'532667667ËgljiÊß¾z¼jþg  P†l$F6 9D* !&)¶ûÈwky€»þ(ÉÃO®ŒHš •…7ˆ¾d « W—]BÉ)  ÿìYN(@'r! r r+2+2+29/01A32653#".5!#"&'532>7!øcnecÈ4f•`a˜j8þÓ<[‚[!:")E9.$£}vr~(þ¼e•b0/a–f4ÿþ–åk œDŽà9ÍÄÿìo¶%@rrr r+2++99//3+01A32653#"&&'!#3!fkjeÉÛ½zºhýWÍÍ©¶ûËxmw‚»þ(ÉÃO¯*ý]¶ýžb«ÿìºN%@  r r rr++2++99//301A!332653#".55!#uÉelddÆ3f”a_˜k8ýãÊNþ;Åý0wr~‚'þ¼e•b00a•foþN|ÿì¯Ë#@ #r r+2+29/301A!#"$54$32&&#"32665!UZF—ï©ÞþƦ¬Nïƒê]KMÍt©çvmÛ¦™³Nþ}b ÿµ`´PìâQ¼3+¬#7þý®­þþtÇ|mÿì¾b"@ "r r+2+29/301A!#"$&54$32&&#"32665!¨<ÊŽ¹þÿ„ÅxÇQB?¯b‰³W®Àu‘Cþ¶XL}ÉŽL‡þ²²‹-'0d¹¶ÞK†Wÿì ¶@ r r+2+9/3301A!32653#"&&5!5TþCjlkjÊà¿z¾kþL¶³ü|xmy¼þ(ÉÃO®ŽŒ³+ÿì»N@ r r+2+9/3301A!32653#".5!5¸þfmffÇ5h•a_™k9þŸN ýÑxrx„+þ¼e•b0/a•g6 iÿìwË/@(' rr+2+29/39901A2&&#"33#"32667#"&&54675.5466l­@fT·z‹žXº“»½×õÁµS ‘7!3Ë(C3 ,ÌþÀ<[‚\!:")E9/$¸°5lþ_  2'ެÿþ•åk œCà;ÍüKþà]}@ÿÿþ+¼&$ÿÿ\þça&D®ÿÿ+è&$XR ³r+Î01ÿÿ\ÿìç–&DXª ³.r+Î01ÿÿ+Ñ&$cóR ·oV+44ÿÿ\ÿìn&Dcž ·1V+44ÿÿ+Ñ&$dîR ·oV+44ÿÿÿìç&DdŸ ·5V+44ÿÿ+I&$eíR · oV+44ÿÿ\ÿì=÷&De¤ ·6V+44ÿÿ+e&$fòR ·oV+44ÿÿ\ÿìç&Df ·/V+44ÿÿþ+Š&$'JÞi ³+r+Î01ÿÿ\þç &D'JŽ  ³6r+Î01ÿÿ+&$gûR ·oV+44ÿÿ\ÿìçÂ&Dg¨ ·,V+44ÿÿ+&$hùR ·oV+44ÿÿ\ÿìçÂ&Dh¦ ·,V+44ÿÿ+X&$iùR ·oV+44ÿÿ\ÿìç&Di« ·,V+44ÿÿ+a&$jõR ·oV+44ÿÿ\ÿìç&Dj¦ ·,V+44ÿÿþ+a&$'Mÿi ³r+Î01ÿÿ\þçø&D'M¯ ³-r+Î01ÿÿÄþù¶&(Ïÿÿmþ'b&HÌÿÿÄùè&(XÊR ³r+Î01ÿÿmÿì'–&HXÊ ³%r+Î01ÿÿÄùS&(Qši ³ r+Î01ÿÿmÿì'é&HQx ³ r+Î01ÿÿÄÑ&(c½R ´(r+ÎÎ01ÿÿmÿìƒ&Hc³ ´<(r+ÎÎ01ÿÿ8ùÑ&(dÀR ·uV+44ÿÿ/ÿì'&Hd· ·,}V+44ÿÿÄUI&(e¼R ·uV+44ÿÿmÿìF÷&He­ ·-}V+44ÿÿÄùe&(fºR ·uV+44ÿÿmÿì'&Hf¯ ·&}V+44ÿÿÄþùŠ&('ÏJ¸i ³%r+Î01ÿÿmþ' &H'J•Ì ³-r+Î01ÿÿè&,X•R ³ r+Î01ÿÿwû–&¯X} ³ r+Î01ÿÿµþŸ¶&,“ÿÿþ‡ï&L|ÿÿ|þÇÍ&2Œÿÿmþnb&RÒÿÿ|ÿìÇè&2X‹R ³&r+Î01ÿÿmÿìn–&RXÕ ³&r+Î01ÿÿ|ÿìÇÑ&2c}R ´=)r+ÎÎ01ÿÿmÿì—&RcÇ ´=)r+ÎÎ01ÿÿ|ÿìÇÑ&2d}R ·-^V+44ÿÿ@ÿìn&RdÈ ·-}V+44ÿÿ|ÿìÇI&2e{R ·.^V+44ÿÿmÿìn÷&ReÇ ·.}V+44ÿÿ|ÿìÇe&2f{R ·'^V+44ÿÿmÿìn&RfÇ ·'}V+44ÿÿ|þÇŠ&2'ŒJki ³:r+Î01ÿÿmþn &R'ÒJ¶ ³:r+Î01ÿÿ|ÿìŠ&TvKi ³3r+Î01ÿÿmÿìE!&Uv— ³1 r+Î01ÿÿ|ÿìŠ&TC§i ³2r+Î01ÿÿmÿìE!&UCò ³0 r+Î01ÿÿ|ÿìè&TX‘R ³1r+Î01ÿÿmÿìE–&UXØ ³/ r+Î01ÿÿ|ÿìS&TQMi ³=r+Î01ÿÿmÿìEé&UQ™ ³; r+Î01ÿÿ|þ&TˆÿÿmþEö&UÕÿÿ¶þ+¶&8Vÿÿ¡þSN&XÍÿÿ¶ÿì+è&8XSR ³ r+Î01ÿÿ¡ÿìS–&XXÜ ³ r+Î01ÿÿ¶ÿ줊&Vvi ³'r+Î01ÿÿ¡ÿìÈ!&Wv© ³*r+Î01ÿÿ¶ÿ줊&VCwi ³&r+Î01ÿÿ¡ÿìÈ!&WC ³)r+Î01ÿÿ¶ÿì¤è&VX\R ³%r+Î01ÿÿ¡ÿìÈ–&WXâ ³(r+Î01ÿÿ¶ÿì¤S&VQi ³1r+Î01ÿÿ¡ÿìÈé&WQª ³4r+Î01ÿÿ¶þ¤&V]ÿÿ¡þÈ÷&WÌÿÿþš¶&<´ÿÿþ%N&\”ÿêÿÿšè&<X´R ³r+Î01ÿÿþ%–&\Xt ³#r+Î01ÿÿšS&<Qxi ³r+Î01ÿÿþ%é&\Q= ³/r+Î01ÿÿmþÉß&ÓBð ³/ r+Î01ü_ÙÿÐ#@€@  €/]3Í9ÜÌ9901A#&&'#5>73'6673#þäo3m35k3p#NKÐKM#Q); ¹+n6nÙ#U11U#&X^..^X&Â0[@:i+ûxÙþé#@€@ € /2/Ì9Þ2Í201A5>73#&&''&&'53üc"MMÑ KL#p4j54m3ˆ9m,¸ <(Ù'X^--^X'#U11U#Ã+i:@[2ü_Ùÿ™÷(-@%""&À@ € /3/33Í9ÜÌ2992301A#&&'#5>7%2#'6654&#"566þ KM#o3m35k3p#NKœ[hI7[ ?<3-' ,ü.^X&#U11U#&X^.ûEJ:> L~"! [ü^Ùþó+%@++#(  € /3/Ý9Æ2/2Í22/01A#&&'#5>7#".#"#66323267þ MP$h7n54q5i#QN¯0S:'IC?), a dU)KC>)+ ô-[U'"Q11Q"&U\-@e9&/3`'11üdÙþØ @  € /3Ì2/2|/3Ì201A#"&'332677#5667þØ ž”—˜rgXPn CH$f$=ôš–…V*+ ç|’‘}P55P(@c9&/4`|&11'þ4{ ³ /3/301W4&'7#"&'5326ÞLE…@ipf#@3&2í8u@.V^m }0þZ¥²´À /3Ì201S"&'5326655#53¡(H6 .Ñ7sþZ¤ 7-€²þÉX‚Gÿÿþ]¶&7zdÿÿ$þÎH&Wzêÿÿ|þ4ÇÍ&2P,ÿÿmþ4nb&RPxÿÿ|þ4ÇÝ&2'LšiPA ³#r+Î01ÿÿmþ4nt&R'LåPx ³#r+Î01fÿì!b@  rr+2+29/301A2#"&&55!&&#"566!326¡ò†{Þ–Ïn쯠h¤YS©¸ýã7rX{”b€û¸¶þþ‹{à˜r°½&(©&#ýXZŠNŸÿÿüú»þ~–Xÿÿÿì#Í'2]vþ©ÿ™µ2¸ÿü°V+44XÌ’1 @  €/2Ì22/33/301A56673&&54632#l5ÌAK%uq;4-;&8?Þ:¦G*hk. zd7F/0# #5)C®Ó µ xw?3ä201A"&54632'2654&#"j ¡š§¡£šªRLLROKJCìÝÛìêÝÙðŽ› Ÿšš¡ž›,D°Ò,@  'xw?2ä29/33301A2&&#"36632#"&&54>"32654&ëGB#o8lSy“L_`–V(c®6Q,'N9I[PÒ… PŠW*=ƒ]ŠKW¯„eºUþB)@$0[:[XJU%DªÕ+@ $$ xw?2ä29/33301A2#"&'532667##"&546"326654&&]_—W(a­…!I?+o}8 gQ€”ª‘F\NP6P-&MÕV­†e»“U† TŒT(@’……ªXVJY(@#7Y6ÿÿÿáÿì´œ&…ˆÿ{@ !V+4444ÿÿÿâÿì´œ&…‡ÿ|@ V+4444ÿÿÿÑÿì´™&…†ÿz@ %V+4444ÿÿÿÒÿì´™&……ÿ|@ V+4444ÿÿžÿ킜&‘ˆÜ@ (V+4444ÿÿžÿ킜&‘‡Ý@ "V+4444ÿÿžÿí‚™&‘†Ü@ ,V+4444ÿÿžÿí‚™&‘…Ý@ &dV+4444ÃþqÌ&@rr/2?++23301A"&'5326654&#"#33>32‰6Q N-6^:š¬¥FÍ " '€¡V–Þ{:k”þq ¬ )h]¬º¦mÊ‹ü¦¶ÆBc7jÛ©ü:n g2ÿÿÄþtb¶ ·ÿìÌ(#@ rr r+2++2339/Î01E"&&55332654&#"#33>32ܲõ~ÍOžt¸¥›«Ž¤FÍ ! '€ W–Þ{{ù…ñ£w¢Rɯ¨º¦mÊ‹~ÚÆBc7jÛ©þ(šóWÍÞ™ %1%@ +&& €/33/Ì232/Ä3301A"&'332673"&54632!"&546325>73••œ u iXOoy¨þ²+99+*;;X*99*+::þ²,)µEH%Ë–{I9?Cy˜þ5462264554622645é ?E'#KEWÍÞ™ %1+@ 0&@*,, € /33/3Ì22/3Í23301A#"&'332672#"&546!2#"&546#.'5Þ¨’•œ u iXOoþt*;;*+99­+::+*99¾(-h#JDÜy˜–{I9?CþÂ2645546226455462û'E? EK#fÍМ'@  '! /33/3ÞÍ3301A!52#"&546!2#"&546#5>7Ðý–s*;;*+99­+::+*99=EI$g,)x••Ú2645546226455462þ$JE ?E'fÍМ '@ " /33/3ÞÍ3301A.'535!"&54632!"&54632‹#JD´),þtjþ +99+*;;X*99*+::¹EJ$'E? Ö••þê5462264554622645³Þé³ @   € /33Í232301A#'##'##'5éN&.¹/&/·.&L³.§ffff§.ÿÿ!ó&IIËÿÿ!Q&ILËÿÿ!@&IOËÿÿ!&I'IËL–ÿÿ! &I'IËO–·ÿíyË+&@' r!r+2+29/9933?01A2#"&'532654&##5.#"#466æÍ‚þë}Ánmã²l¹OO¾W¨˜¬¯o(OsNwšKËúËV›jþÜe´‚Êq#)¶,0–ƒ~„”94F%Z¦süY° óˆÿéþ(Ì&@ r r+2+/93/301S233267#"&&'#&&#"566ÕO`B!ÁnÛþ!27&5 J+WmQ-Æþ7ÙIì%<77! FÌ5pVþ#Âüiý\LRž G”vîüÃ@_[ ž Àþ½¶' @ r+2?Í39/39901S! #!#32654&##!2654&&#À² @wT_ˆI„í þáÍÍü©”¨ªç© J˜x¶³¼V…V QŒkŒ¼^þ9tqtký˜ýÿŠ‚Pm8ÿÿÄþ ¶&/z¦ ¶V+4ÿÿÄþb¶&1z= ¶%V+4ÿÿþ4+¼&$P›ÿÿÄþ4ù¶&(Pdÿÿdþ4Á¶&,P ¶V+4ÿÿ¶þ4+¶&8PíRt¶ (@ r  ?3333+233301a!57'5!týÞªª"««v/k0vv0û•/8ÿ馶¶ r r+2+01E"&'5326653Ip*0k;8\7Íb±­,m`"ûè—Á]ÿÿ;tŠ&˜Cÿéi ³r+Î01ÿÿRŸŠ&˜vi ³r+Î01ÿÿÿÿЊ&˜Jÿ­i ³r+Î01ÿÿ:H&˜jÿ i ´!r+ÎÎ01ÿÿÿáÞS&˜Qÿi ³r+Î01ÿÿ.™Ý&˜LÿÜi ³r+Î01ÿÿ ·a&˜MÿÎi ³r+Î01ÿÿRþ4t¶&˜P¾ÿÿRþ4t¶&˜PcÿÿRtX&˜N¡i ³r+Î01ÿÿRþtR¶&˜-Çÿÿ8ÿ驊&™J…i ³ r+Î01ÿÿRtè&˜XÈR ³r+Î01ÿÿRþt¶&˜Ëÿÿÿÿ}'˜ Sþÿ–ÿÿRt¶˜ÿÿ:H&˜jÿ i ´!r+ÎÎ01ÿÿRt¶˜ÿÿ:H&˜jÿ i ´!r+ÎÎ01ÿÿ8ÿ馶™ÿÿRt¶˜«tN µr r++01a#3tÉÉNÿ‹þtN¶ rr+2+01S"&'53265323U!@(CTÉCþ ¡ Jdæûd–Rÿÿ«þ½~ÿÿÿèþmW“ÿÿmþD &º6k ³:r+Î01ÿÿIþæ&Oz= ¶V+4ÿÿ«þ[b&Qzº´¸þ°V+4\þ4ça3>2@;;!544)((! r-r/2+2?+9/333333301A"&5466732672#'##"&&54$%754&#"'663265ojnGm8f:R+1*"3=IÌÊ'.dƒ^dœY¾sgUœH@NÇ<š¿›jW†­þ4k]Lx,j1"’(6ý¶qeXR—”ÿÿmþ4'b&HPbÿÿ<þ4™ï&LPê¡þ4SN-$@-r#r(( r ?+Ì23333++01A"&546673267#'##"&&5332665¢mm‰¡ "l†K±[Êsvs‡;þ4k]>ug*3`Z/./ } û²—9L&T±ŒÑýK…„[¯5mþDb"3#@** r rr##r+23++2+2301A2373#"&'532655467##""32>554&&+oª; ¤mà¬wÆRSÒu— 7ªqÐëëü[}AŒOsH#@…bUT•û¡›Ôl"$°(. Ž*WXU+  5§_·ƒÆÎ,ZŠ^.Œ±TÿÿmþD &ºJ¯ ³Ar+Î01ÿÿmþDø&ºMÑ ³8r+Î01ÿÿmþDï&ºN£ ³:r+Î01ÿðÿáÛ+%@''$r r /2Ì2+2+232301E"&54673265#57546632&&#"!!%‘¤ ¨A1:B¼¼U¢rEs*4"T/WRþòF‰œ 9,@BP`a=L‹©Nš pqM›ý‰o›Qkÿìl!/@ " ) rr+2+2901A#"&&54667.5466$32654&&7ÕþÓž>ƒf€¶aè›”æƒ]«tAqF_È@ØQ”^¡Œ”¡I­(=9):A3?”¾‚›ØrmÒš}¼€##KdIStQ6ý>Zšw¨ª˜aˆdÿÿRt¶˜pÿ;Õá@ |} {?3íä23301S36632#4&#"#ò"uG~†‚KNpX‚áþÿ;35sþRŸOPzsþ¯¦pÿ;Óá@  |} {?3íä901S366773##ñ2ä—þá3šòVáþ,F:áþåþ†-Fç¦pÿ;òá ³}{?í01W#3ò‚‚Ŧpÿ;zÜ&%@ |{?33í2/3333301A2#4&#"#4&#"#33>32366‰wz‚FDbV‚FECQ#‚gAQ-Po "zÜr~þO¢NNmiþ˜¢NN6hLþ¬•[".6785pÿ;ÕÜ@  |{?3í2/33301A2#4&#"#3366Ô|…‚KNoY‚g"zÜs€þRŸOPzsþ¯•\44pþïÜ"#@ |{?Îä2/33333301A2#"&'##3366"32654&ЂŸ„Si‚kh9gWUl[[ZÜ«©ª¯:(>þò»_,?cpov~‡pp€Bÿ/HÜ)@ &"| {?3ä2901E#"&'532654&&'.54632&&#"H™‰Km,/};UJLEE`3•zBr5*/c3CG"NBA`4 `ej 2*&&2E8U[\(#$"1Gÿ/Óf@  |{?3ôÍ333301E267#"&5#57733#i9J&Xzcg/PÏÏ:o \ Xwu8,–]þ87qc #@   yr/2+2901s466766736676653#r ]BþüÞ³  0(Ç_CßþLMÉ:dY,,>¥ý0 dXÙþ(R{2,KþVÔ07;fþ7W @ zr ?23+201s5!4&'&&#"566323Xib_?(2gH™Rcˆ==Q “¢åml£D4DO.ý¢6ÿö» &@  ! z r+2?399?01W"&'732676654&#"5632#'#¸A&=!K|'3K&P0^\Kk#2)Ÿ 3*s µE?+oC¼Q` ¦"*Xü0Ê#C)0,ó ¶  yr/+2301a467667!5!c%ýMÇ2P+o3V(¢’0%;lü”«r @  zr ?+23/?01a4&'&&#"56676632!3§^_I.DÑ›1^-O‚5r“==R ü:ɇlk ¤P>+[9üyüè«u  ´yr ?+01s3«Ê úôK% ·  yr ?+2301s467667!5!¸"3þëÚ(" ®Zž9.E¢”3:(_*?#ýR«r @  zr ?+223?01s6676632#4&'&&#"«=,[£Gs”=>Q ËeeB*+sHO?*]:üy‡poûŽ¢ÿì¥ 6@ %zr yr r+2++201E"&'&&'&&5332676654&'&&#"56632 Fƒ54Y!*(Ë11"lEIn#6%#0'tD&;G52N " fE7†\CRц€ý€Í>,150EÖwvÍD71¤"]@LÌe«GZ„)!!žÌi µyr+2/301S3žËˆÌ@ýi©$þg ´ zr/+201A4&'&&'&#"56676632›*L}-R&IF*,_3j¶8/"!þ¾W‰7/6© E7C'F¦`ûCEÿìˆ8·%zr r+2+201E"&'5326766766554&'&&#"56676632b¢G$gv8>a! / *.*„Q32'267>54&'&&#"jŒeKo"#H5’\«ŸIQŒ9:X oMl”Jn#!'C8!]4/G%PL+-#m7&†_G­foµ3§&($nII·oW™Aj–->§62-€•K°Î4 "Uð©‹Ç;26?ÿÈ… @  yr/+2901W5%6673>73?9þ×ÇšpSR 6Â5'?+QþìÀ]ª8¤' aý¿þ,¾r7ýÐP‚9‚§TþN /@ %zr/+29/3301A4&'&&#"'"&'&&54676676632‚,+&rGF%#',+F+&!%\˜4-3A6K"9}DQ‹82R%'þrŽÆ97/--(e9In ”E>6•^] 63#$^?NÌ~ûŽjÿìb J@ ())9zr r+2+29/301E"&&''532676676654&'&&'&&#"'&&'&&'&&54676632\?yg$+^¸\Di"&,A4B%Jo"+3,%J*& %8b*'B!!M@I¼dV9.M%'/+$c81w ¡ -&*‚E/Q2S?Ac('t?Co#–=&2€Kl¬5?='&[:NÌ€ÝM=Vþ— @  yr/+2901A36676653þîÔû2FOÊ/.$yOmþÛýH„mœþ^`•4'> ü^L0 @  yr/233+29901s5!36673T[þØþDÜR8FR   %C'¢§ÆýÒVJ»r ÿ*MF!(J%.R$þƒv«þ£ @  yr+233///01a445467>7!5!3§  ¯üßø¹ ý<Ë2¡TR]+1¢ˆý²TWV_T þëû,q  ´zr/+201a4&'&&#"56632§ca8 )sy2[™?~“>=R ‡nm¤O?+[9üyW| (@ yr/2+93301s36676673"#!267673#ÄmÂ;;l$*+¾ >?8Ÿp‚ÛHG5¿6 @23…\EžV ý32*2”UHþº½E@Jþú‹ƒª4ýÈrÇUU*& 0ÿú‰ /@  $$zr/2+23/01W"&'532655>32#4&'&#"›4+-ED$H#f³™A]_*7H Éec-K#S/,&k ˜X[¤  M<%Y5üt†pm üÛ:`(9#ÿÿW|&â#!r ³)yr+Î01ÿÿW| &â$¦o ³)yr+Î01ÿÿW|&â'!5ÿl#$r ³4yr+Î01ÿÿW| &â'!5ÿl$¬o ³4yr+Î01ÿÿqÿc &ÉgÿèÿÿqþUc &Éfÿîÿÿqc &É!õþ×ÿÿW &Ê!Gÿÿ6ÿö» &Ë!Gÿÿ,ó &Ì!RGÿÿ«r &Í!…Gÿÿÿ¼u &Î!GÿÿÿÊ% &Ï!Hÿÿ¢ÿì¥ &Ñ!–Gÿÿÿ¾Ìi &Ò!8ÿÿ$þg&Ó!RHÿÿEÿìˆ&Ô!^Hÿÿ:°&Õ!@Gÿÿdi &×!‚Gÿÿoá &Ù!AHÿÿjÿìm &Ú!gGÿÿTþN &Ü!Dÿÿjÿìb &Ý!aøÿÿL0 &ß!ÿ¦ÿÿ«þ£ &à!TFÿÿ,q &á!RGÿÿW| &â!5ÿlÿÿ0ÿú‰ &ã!ºDÿÿ«uÓ&Îÿ· ³yr+Î01ÿÿüÙýÄ!Cû²ÿÿýxÙÿ8!vý&ÿÿþ˜Ùj JþFÿÿü ÛÿéQû¸ÿÿþËÛ6tLþyÿÿþ·ÙNøMþeÿÿÿvïNÿ;ÿÿþÖ *ßjý¨ÿÿÿÙë“OþÍÿÿþ÷Ùô!Rþ¥ÿÿþ˜Ùj KþFûÆÙþ¾! %@  €/]3/Í2233301A#.'5##.'5þ >Cp"SQBš=Cp"TPB!.ok'QYQ.ok'QYQÿÿÿXÁ˜¶ÿ=ý"þþ ÿ| ±/301A"&54632ý–0DD02DDþ9>@88@>9ÿÿÿ1þÎzÿ%ÿÿÿRþ4¯Pÿý<Òþ<@ ³€/Ì301A4632.ý¸=K,*5L@\ý?Òþ>@ ³€/3Ì01A56654.54632þ>>rO;<):2þX5YA$ˆ=/-`s[N‚tqè6W?$G2#."‹$/$ÿ¼þ Nÿ© ´ |/32/301W"&54632"&54632#%%#$&&$#%%#$&&õ(&'))'&(ÿ)&&))%')þžþTÿ¤ ".: @ /55#))|/3323333301E"&546323"54632"&54632!"&54632'"&54632þæ#%%#$&&þH%$#&&´$%'"$&&o#%%#$%%$#%%#$%%û)&'))'&)O'))'&)ÿ('(')&&)('&))&&)ÿ)&'))'&)þÐþ%ÿ¤@  |/3333301E5!"&54632'"&54632þÐi¡#%&"$'&%#%&"$'&ÖWWþÜ('(')&&)ÿ)''()'&)þÐþ%ÿ¤@ €|/Ì333301C5#5!#"&54632'"&54632¨ˆgˆ,$%%$$&&$$%%$$&&þ`ÊWWÊZ('&))&&)ÿ)'&))&')ÿ¶ÿJÿ¥ ±|/301G"54632H&"&&'ùO'()&&)ÿ ÿÕÿ¬ ´ |/33301W"&54632!"&54632‹$%%$#''þ¹"%&!%%%ò(&(()'%)('(')&&)ÿ þÕÿ¤ #@  |/333Î201C"&546327"&54632!"&54632$%%$$&&m$%%$#''þ¹"%&!%%%þ('&))&&)ÿ(''))'&))''()&')ÿEÿ7¶ÿŽ ±|/301G5!»qÉWWÿGþgµÿˆ ²€/Ì01C5#5!#-ŒnŒþgÉXXÉÿ·~K ±/201C"54632H%$$''~N((*&&(ÿ»Nž ±/201S"&54632#%%#$''(''()&&)ÿýÛìÿ  #· |/Í2/Í2/Í01G"&54632"&54632"&54632š#%'!$%%x#%%#%&&z#&&#%&&þ(&(()'&(”)'&))&&*“)''()&')ÿ»N£ ±/201S"54632H%#$''N'()&%)ÿÐþ..ÿp ²€/Í01C30^þ.Bþ¾ÿ»Nž ±/201S"54632H%#$''O'()&&)ÿ¶Jž ±/201C"&54632#%&"&&'(''()&&)ÿPþÅšÿµµ€|/Ì3301C5#5!#4|J~þÅžRRžÿÿ)ÿï®wü¬ÿÿPûm{ü¬ÿÿ3†€tü¬ÿÿ+ÿñ—uü¬ÿÿÅs7ü¬ÿÿDÿï›m8ü¬ÿÿ,ÿð°~xü¬ÿÿ:£m9ü¬ÿÿ2ÿð¦}:ü¬ÿÿ%ÿðªyü¬rÿìDÍ·r r+2+201A#"&&54632324&#"D6vº„~·y:`Ö²¨Øjüø‚œ›„8~ij~6ݲþèÂee³ëPµ³þ¯ìþÛþÝ"&Àƒƒþý-r¶ @  r r++22/301a4667'3«:%§fž§Ý5YQ&1‡„BúJMË@ r r+233+201s5>54&#"'>32!Mn‘J†ne¢Ul;‰¥eˆÇk]©tþâО‡o§]rxID†2Q0`°vuÇÄoþæ ³Uÿì Ë-@  $+ ?3?39/39901A#"&'5326654&&##5326654&#"'6632ô«ˆ®±xùÂvÈZ\ÔažIZ±„‰‹{ N‡|r©KcRæ•áêe•²²’Æp&*·.3C}VVm4¦AvOgqF3‹>XÆ-p¼ @   ??9/9333301a!533#4667#ÜýQ«ÈÐÐÄ;þzJŸÓü;­þ¶÷¾BiT"']%ýÊxÿì¶!!@ ?3?39/333301A2#"&'5326654&#"'!!66<’Ùx‚÷°sÆEJÑajVªµ>Ž-_8èýÆ!$oˆe‹˜Üv((¹+5B†gˆ” 9½³þnrÿìAÊ"1@ ))# ?3?39/3301S4>32&&#"3>32#".2654&'&r%Yšê¥.j#&]0¸Ò\ ]…Y€¾itÓm¸ˆKõ|—†‡\ˆL$JppƒúÚ¥^ © –þý¤1P/iȘÞxQ¡ñþÄ¡¥‡œNv=?kAô¶¶ ?33?01s!5!ÑKü÷áý·³úÚtÿìEË0>@ ()18 ?2?3901E"&&54667.546632'26654&&''>54&#"`ÜsSŠSGuEuÈ|ÉrK}NY”XyÚ–_„EJ€U"Ty@AƒhCm@ˆpk‰Cr]¯{e•k&(f‰Zp›QP›sX…c'*l’dz³a>kAÿÿ)9®ÉwþöÿÿPJû·{þöÿÿ3J†Êtþöÿÿ+;—ÉuþöÿÿJŽ7þöÿÿD9›·8þöÿÿ,:°Èxþöÿÿ:J£·9þöÿÿ2:¦Ç:þöÿÿ%:ªËyþölÿìOd·r r+2+201E"&546632'2654&#"Z¥Ümsߢ|¹|>û÷•”’¬®ÿQ–ÒþúþȦÍËËÈÉÊÆÒ"ˆd ·  r/+22301a#4667'3ˆÌ>'Èb»«€4dZ$7”†DT d@ r/333+201a!5>54&&#"'6632! üJ‹j95hNWªRgh挶bGŠeþ÷zŸJd]>;T-CDŠYQO“f]{E»<þŸåj-@  $+r /3+29/39901A#"&'532654&&##5326654&#"'6632¸D„_¬¨ƒð§}»WNÅf©±[®}{}e ^kešWYZá…Äï \Ž^«™ˆÀg*)°(7…Tk3¤4q\gm8;ŠHH¹.þ§od @r  ?Í3333+2201e##!533!4667#oÙÅý]¢ÆÙþb>*þš"þ…{„¾ü_„32#".2654&#&o\°þ¢.^/*`8—Õu )k‚Iˆ¿dpÓ•~½~?ô‚’ˆƒPŠU'JmmÝFÕi ¤ €þýÆ>V,kË–ß{^¬ëþ±¨¡Š›JwDA€j@*þ²N¶r+23/01S!5!í6ýÙýÃþ²î®~úâ_ÿì1Ë/=@,7$ r0r+2+2901A2#"&&54667.5466326654&&'">54&IÈsKNZ”XyÚ’žÜsTŠRGuEuʬA„b_ƒEBŽpUxA&l‰CrGClA‰ËP›sX…c'*l’dz³a]¯{e•k&(f‰Zp›Qû¬El=7€ 1@$p }(mq0#ms,ÿÿ=þ4›N&¯Pëÿÿ¢þ‹N&¯€moderngl-moderngl-773b733/examples/data/models/000077500000000000000000000000001470420062000214145ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/data/models/crate.obj000066400000000000000000000011131470420062000232020ustar00rootroot00000000000000v -0.50 -0.50 0.00 v -0.50 0.50 0.00 v 0.50 0.50 0.00 v 0.50 -0.50 0.00 v -0.50 -0.50 1.00 v 0.50 -0.50 1.00 v 0.50 0.50 1.00 v -0.50 0.50 1.00 vn 0.00 0.00 -1.00 vn 0.00 0.00 1.00 vn 0.00 -1.00 0.00 vn 1.00 0.00 0.00 vn 0.00 1.00 0.00 vn -1.00 0.00 0.00 vt 1.00 0.00 0.00 vt 1.00 1.00 0.00 vt 0.00 1.00 0.00 vt 0.00 0.00 0.00 g Crate f 1/1/1 2/2/1 3/3/1 f 3/3/1 4/4/1 1/1/1 f 5/4/2 6/1/2 7/2/2 f 7/2/2 8/3/2 5/4/2 f 1/4/3 4/1/3 6/2/3 f 6/2/3 5/3/3 1/4/3 f 4/4/4 3/1/4 7/2/4 f 7/2/4 6/3/4 4/4/4 f 3/4/5 2/1/5 8/2/5 f 8/2/5 7/3/5 3/4/5 f 2/4/6 1/1/6 5/2/6 f 5/2/6 8/3/6 2/4/6 moderngl-moderngl-773b733/examples/data/models/lowpoly_toy_car.obj000066400000000000000000000237371470420062000253510ustar00rootroot00000000000000v -0.917 0.458 0.211 v -0.617 0.458 0.211 v -0.617 -0.458 0.211 v -0.917 -0.458 0.211 v -0.617 -0.458 0.501 v -0.617 0.458 0.501 v -0.917 0.458 0.501 v -0.917 -0.458 0.501 v 0.917 -0.458 0.211 v 0.917 0.458 0.211 v 0.917 0.458 0.501 v 0.917 -0.458 0.501 v 0.617 0.458 0.211 v 0.617 0.458 0.501 v 0.617 -0.458 0.211 v 0.617 -0.458 0.501 v -0.251 -0.366 0.964 v 0.251 -0.366 0.964 v 0.251 0.366 0.964 v -0.251 0.366 0.964 v 0.623 0.411 0.020 v 0.548 0.411 0.000 v 0.472 0.411 0.020 v 0.417 0.411 0.076 v 0.397 0.411 0.151 v 0.417 0.411 0.226 v 0.472 0.411 0.282 v 0.548 0.411 0.302 v 0.623 0.411 0.282 v 0.678 0.411 0.226 v 0.698 0.411 0.151 v 0.678 0.411 0.076 v 0.678 0.276 0.226 v 0.698 0.276 0.151 v 0.623 0.276 0.282 v 0.548 0.276 0.302 v 0.472 0.276 0.282 v 0.417 0.276 0.226 v 0.397 0.276 0.151 v 0.417 0.276 0.076 v 0.472 0.276 0.020 v 0.548 0.276 0.000 v 0.623 0.276 0.020 v 0.678 0.276 0.076 v 0.623 -0.262 0.020 v 0.548 -0.262 0.000 v 0.472 -0.262 0.020 v 0.417 -0.262 0.076 v 0.397 -0.262 0.151 v 0.417 -0.262 0.226 v 0.472 -0.262 0.282 v 0.548 -0.262 0.302 v 0.623 -0.262 0.282 v 0.678 -0.262 0.226 v 0.698 -0.262 0.151 v 0.678 -0.262 0.076 v 0.678 -0.396 0.226 v 0.698 -0.396 0.151 v 0.623 -0.396 0.282 v 0.548 -0.396 0.302 v 0.472 -0.396 0.282 v 0.417 -0.396 0.226 v 0.397 -0.396 0.151 v 0.417 -0.396 0.076 v 0.472 -0.396 0.020 v 0.548 -0.396 0.000 v 0.623 -0.396 0.020 v 0.678 -0.396 0.076 v -0.483 0.411 0.020 v -0.559 0.411 0.000 v -0.634 0.411 0.020 v -0.690 0.411 0.076 v -0.710 0.411 0.151 v -0.690 0.411 0.226 v -0.634 0.411 0.282 v -0.559 0.411 0.302 v -0.483 0.411 0.282 v -0.428 0.411 0.226 v -0.408 0.411 0.151 v -0.428 0.411 0.076 v -0.428 0.276 0.226 v -0.408 0.276 0.151 v -0.483 0.276 0.282 v -0.559 0.276 0.302 v -0.634 0.276 0.282 v -0.690 0.276 0.226 v -0.710 0.276 0.151 v -0.690 0.276 0.076 v -0.634 0.276 0.020 v -0.559 0.276 0.000 v -0.483 0.276 0.020 v -0.428 0.276 0.076 v -0.483 -0.262 0.020 v -0.559 -0.262 0.000 v -0.634 -0.262 0.020 v -0.690 -0.262 0.076 v -0.710 -0.262 0.151 v -0.690 -0.262 0.226 v -0.634 -0.262 0.282 v -0.559 -0.262 0.302 v -0.483 -0.262 0.282 v -0.428 -0.262 0.226 v -0.408 -0.262 0.151 v -0.428 -0.262 0.076 v -0.428 -0.396 0.226 v -0.408 -0.396 0.151 v -0.483 -0.396 0.282 v -0.559 -0.396 0.302 v -0.634 -0.396 0.282 v -0.690 -0.396 0.226 v -0.710 -0.396 0.151 v -0.690 -0.396 0.076 v -0.634 -0.396 0.020 v -0.559 -0.396 0.000 v -0.483 -0.396 0.020 v -0.428 -0.396 0.076 vn 0.000 0.000 -1.000 vn 0.000 0.000 1.000 vn 0.000 -1.000 0.000 vn 1.000 0.000 0.000 vn 0.000 1.000 0.000 vn -1.000 0.000 0.000 vn -0.785 0.000 0.620 vn 0.000 -0.981 0.195 vn 0.785 0.000 0.620 vn 0.000 0.981 0.195 vn -0.000 1.000 0.000 vn -0.000 1.000 -0.000 vn 0.000 1.000 -0.000 vn 1.000 0.000 -0.000 vn 0.866 -0.000 0.500 vn 0.500 -0.000 0.866 vn -0.000 -0.000 1.000 vn -0.500 -0.000 0.866 vn -0.866 -0.000 0.500 vn -1.000 -0.000 0.000 vn -0.866 0.000 -0.500 vn -0.500 0.000 -0.866 vn -0.000 0.000 -1.000 vn 0.500 0.000 -0.866 vn 0.866 0.000 -0.500 vn -0.000 -1.000 -0.000 vn 0.000 -1.000 -0.000 vn 1.000 -0.000 -0.000 vn 0.000 -0.000 1.000 vn -1.000 0.000 -0.000 vt 1.000 1.000 0.000 vt 0.836 1.000 0.000 vt 0.836 0.000 0.000 vt 1.000 0.000 0.000 vt 0.164 0.000 0.000 vt 0.164 1.000 0.000 vt 0.000 1.000 0.000 vt 0.000 0.000 0.000 vt 0.244 0.000 -0.268 vt 0.112 0.000 -0.732 vt 0.083 0.000 -1.000 vt 0.167 0.000 -1.000 vt 0.339 0.000 -0.732 vt 0.555 0.000 -0.268 vt 0.756 0.000 0.268 vt 0.888 0.000 0.732 vt 0.917 0.000 1.000 vt 0.833 0.000 1.000 vt 0.750 0.000 1.000 vt 0.445 0.000 0.268 vt 0.833 1.000 1.000 vt 0.750 1.000 1.000 vt 0.917 1.000 1.000 vt -0.083 0.000 1.000 vt 0.000 0.000 1.000 vt 0.000 1.000 1.000 vt -0.083 1.000 1.000 vt 0.083 0.000 1.000 vt 0.083 1.000 1.000 vt 0.167 0.000 1.000 vt 0.167 1.000 1.000 vt 0.250 0.000 1.000 vt 0.250 1.000 1.000 vt 0.333 0.000 1.000 vt 0.333 1.000 1.000 vt 0.417 0.000 1.000 vt 0.417 1.000 1.000 vt 0.500 0.000 1.000 vt 0.500 1.000 1.000 vt 0.583 0.000 1.000 vt 0.583 1.000 1.000 vt 0.667 0.000 1.000 vt 0.667 1.000 1.000 vt 0.888 1.000 0.732 vt 0.756 1.000 0.268 vt 0.555 1.000 -0.268 vt 0.339 1.000 -0.732 vt 0.167 1.000 -1.000 vt 0.083 1.000 -1.000 vt 0.112 1.000 -0.732 vt 0.244 1.000 -0.268 g ToyCar f 1/1/1 2/2/1 3/3/1 f 3/3/1 4/4/1 1/1/1 f 5/5/2 6/6/2 7/7/2 f 7/7/2 8/8/2 5/5/2 f 3/5/3 5/6/3 8/7/3 f 8/7/3 4/8/3 3/5/3 f 9/8/4 10/4/4 11/1/4 f 11/1/4 12/7/4 9/8/4 f 13/5/5 14/6/5 11/7/5 f 11/7/5 10/8/5 13/5/5 f 1/8/6 4/4/6 8/1/6 f 8/1/6 7/7/6 1/8/6 f 10/7/1 9/8/1 15/5/1 f 15/5/1 13/6/1 10/7/1 f 12/4/2 11/1/2 14/2/2 f 14/2/2 16/3/2 12/4/2 f 9/4/3 12/1/3 16/2/3 f 16/2/3 15/3/3 9/4/3 f 1/4/5 7/1/5 6/2/5 f 6/2/5 2/3/5 1/4/5 f 2/2/1 13/6/1 15/5/1 f 15/5/1 3/3/1 2/2/1 f 17/5/2 18/3/2 19/2/2 f 19/2/2 20/6/2 17/5/2 f 3/5/3 15/3/3 16/2/3 f 16/2/3 5/6/3 3/5/3 f 13/5/5 2/3/5 6/2/5 f 6/2/5 14/6/5 13/5/5 f 6/6/7 5/5/7 17/5/7 f 17/5/7 20/6/7 6/6/7 f 5/5/8 16/3/8 18/3/8 f 18/3/8 17/5/8 5/5/8 f 16/3/9 14/2/9 19/2/9 f 19/2/9 18/3/9 16/3/9 f 14/2/10 6/6/10 20/6/10 f 20/6/10 19/2/10 14/2/10 f 21/9/5 22/10/5 23/11/11 f 23/11/11 24/12/12 25/13/5 f 25/13/5 26/14/13 27/15/5 f 23/11/11 25/13/5 27/15/5 f 27/15/5 28/16/5 29/17/11 f 29/17/11 30/18/12 31/19/5 f 27/15/5 29/17/11 31/19/5 f 23/11/11 27/15/5 31/19/5 f 21/9/5 23/11/11 31/19/5 f 32/20/13 21/9/5 31/19/5 f 31/19/14 30/18/15 33/21/15 f 33/21/15 34/22/14 31/19/14 f 30/18/15 29/17/16 35/23/16 f 35/23/16 33/21/15 30/18/15 f 29/24/16 28/25/17 36/26/17 f 36/26/17 35/27/16 29/24/16 f 28/25/17 27/28/18 37/29/18 f 37/29/18 36/26/17 28/25/17 f 27/28/18 26/30/19 38/31/19 f 38/31/19 37/29/18 27/28/18 f 26/30/19 25/32/20 39/33/20 f 39/33/20 38/31/19 26/30/19 f 25/32/20 24/34/21 40/35/21 f 40/35/21 39/33/20 25/32/20 f 24/34/21 23/36/22 41/37/22 f 41/37/22 40/35/21 24/34/21 f 23/36/22 22/38/23 42/39/23 f 42/39/23 41/37/22 23/36/22 f 22/38/23 21/40/24 43/41/24 f 43/41/24 42/39/23 22/38/23 f 21/40/24 32/42/25 44/43/25 f 44/43/25 43/41/24 21/40/24 f 32/42/25 31/19/14 34/22/14 f 34/22/14 44/43/25 32/42/25 f 34/22/26 33/21/26 35/23/26 f 35/23/26 36/44/3 37/45/27 f 37/45/27 38/46/27 39/47/26 f 35/23/26 37/45/27 39/47/26 f 39/47/26 40/48/26 41/49/26 f 41/49/26 42/50/3 43/51/27 f 39/47/26 41/49/26 43/51/27 f 35/23/26 39/47/26 43/51/27 f 34/22/26 35/23/26 43/51/27 f 44/43/27 34/22/26 43/51/27 f 45/9/11 46/10/11 47/11/5 f 47/11/5 48/12/5 49/13/5 f 49/13/5 50/14/5 51/15/11 f 47/11/5 49/13/5 51/15/11 f 51/15/11 52/16/11 53/17/11 f 53/17/11 54/18/5 55/19/11 f 51/15/11 53/17/11 55/19/11 f 47/11/5 51/15/11 55/19/11 f 45/9/11 47/11/5 55/19/11 f 56/20/5 45/9/11 55/19/11 f 55/19/14 54/18/15 57/21/15 f 57/21/15 58/22/28 55/19/14 f 54/18/15 53/17/16 59/23/16 f 59/23/16 57/21/15 54/18/15 f 53/24/16 52/25/17 60/26/29 f 60/26/29 59/27/16 53/24/16 f 52/25/17 51/28/18 61/29/18 f 61/29/18 60/26/29 52/25/17 f 51/28/18 50/30/19 62/31/19 f 62/31/19 61/29/18 51/28/18 f 50/30/19 49/32/30 63/33/20 f 63/33/20 62/31/19 50/30/19 f 49/32/30 48/34/21 64/35/21 f 64/35/21 63/33/20 49/32/30 f 48/34/21 47/36/22 65/37/22 f 65/37/22 64/35/21 48/34/21 f 47/36/22 46/38/23 66/39/23 f 66/39/23 65/37/22 47/36/22 f 46/38/23 45/40/24 67/41/24 f 67/41/24 66/39/23 46/38/23 f 45/40/24 56/42/25 68/43/25 f 68/43/25 67/41/24 45/40/24 f 56/42/25 55/19/14 58/22/28 f 58/22/28 68/43/25 56/42/25 f 58/22/26 57/21/3 59/23/26 f 59/23/26 60/44/3 61/45/3 f 61/45/3 62/46/3 63/47/26 f 59/23/26 61/45/3 63/47/26 f 63/47/26 64/48/26 65/49/26 f 65/49/26 66/50/3 67/51/27 f 63/47/26 65/49/26 67/51/27 f 59/23/26 63/47/26 67/51/27 f 58/22/26 59/23/26 67/51/27 f 68/43/27 58/22/26 67/51/27 f 69/9/5 70/10/5 71/11/11 f 71/11/11 72/12/12 73/13/5 f 73/13/5 74/14/13 75/15/5 f 71/11/11 73/13/5 75/15/5 f 75/15/5 76/16/5 77/17/11 f 77/17/11 78/18/12 79/19/5 f 75/15/5 77/17/11 79/19/5 f 71/11/11 75/15/5 79/19/5 f 69/9/5 71/11/11 79/19/5 f 80/20/13 69/9/5 79/19/5 f 79/19/14 78/18/15 81/21/15 f 81/21/15 82/22/14 79/19/14 f 78/18/15 77/17/16 83/23/16 f 83/23/16 81/21/15 78/18/15 f 77/24/16 76/25/17 84/26/17 f 84/26/17 83/27/16 77/24/16 f 76/25/17 75/28/18 85/29/18 f 85/29/18 84/26/17 76/25/17 f 75/28/18 74/30/19 86/31/19 f 86/31/19 85/29/18 75/28/18 f 74/30/19 73/32/20 87/33/20 f 87/33/20 86/31/19 74/30/19 f 73/32/20 72/34/21 88/35/21 f 88/35/21 87/33/20 73/32/20 f 72/34/21 71/36/22 89/37/22 f 89/37/22 88/35/21 72/34/21 f 71/36/22 70/38/23 90/39/23 f 90/39/23 89/37/22 71/36/22 f 70/38/23 69/40/24 91/41/24 f 91/41/24 90/39/23 70/38/23 f 69/40/24 80/42/25 92/43/25 f 92/43/25 91/41/24 69/40/24 f 80/42/25 79/19/14 82/22/14 f 82/22/14 92/43/25 80/42/25 f 82/22/26 81/21/26 83/23/26 f 83/23/26 84/44/3 85/45/27 f 85/45/27 86/46/27 87/47/26 f 83/23/26 85/45/27 87/47/26 f 87/47/26 88/48/26 89/49/26 f 89/49/26 90/50/3 91/51/27 f 87/47/26 89/49/26 91/51/27 f 83/23/26 87/47/26 91/51/27 f 82/22/26 83/23/26 91/51/27 f 92/43/27 82/22/26 91/51/27 f 93/9/11 94/10/11 95/11/5 f 95/11/5 96/12/5 97/13/5 f 97/13/5 98/14/5 99/15/11 f 95/11/5 97/13/5 99/15/11 f 99/15/11 100/16/11 101/17/11 f 101/17/11 102/18/5 103/19/11 f 99/15/11 101/17/11 103/19/11 f 95/11/5 99/15/11 103/19/11 f 93/9/11 95/11/5 103/19/11 f 104/20/5 93/9/11 103/19/11 f 103/19/14 102/18/15 105/21/15 f 105/21/15 106/22/28 103/19/14 f 102/18/15 101/17/16 107/23/16 f 107/23/16 105/21/15 102/18/15 f 101/24/16 100/25/17 108/26/29 f 108/26/29 107/27/16 101/24/16 f 100/25/17 99/28/18 109/29/18 f 109/29/18 108/26/29 100/25/17 f 99/28/18 98/30/19 110/31/19 f 110/31/19 109/29/18 99/28/18 f 98/30/19 97/32/30 111/33/20 f 111/33/20 110/31/19 98/30/19 f 97/32/30 96/34/21 112/35/21 f 112/35/21 111/33/20 97/32/30 f 96/34/21 95/36/22 113/37/22 f 113/37/22 112/35/21 96/34/21 f 95/36/22 94/38/23 114/39/23 f 114/39/23 113/37/22 95/36/22 f 94/38/23 93/40/24 115/41/24 f 115/41/24 114/39/23 94/38/23 f 93/40/24 104/42/25 116/43/25 f 116/43/25 115/41/24 93/40/24 f 104/42/25 103/19/14 106/22/28 f 106/22/28 116/43/25 104/42/25 f 106/22/26 105/21/3 107/23/26 f 107/23/26 108/44/3 109/45/3 f 109/45/3 110/46/3 111/47/26 f 107/23/26 109/45/3 111/47/26 f 111/47/26 112/48/26 113/49/26 f 113/49/26 114/50/3 115/51/27 f 111/47/26 113/49/26 115/51/27 f 107/23/26 111/47/26 115/51/27 f 106/22/26 107/23/26 115/51/27 f 116/43/27 106/22/26 115/51/27 moderngl-moderngl-773b733/examples/data/models/scene-1-billboard-holder.obj000066400000000000000000000072431470420062000265540ustar00rootroot00000000000000v -4.4449 -11.2931 9.4280 v -4.4991 -11.0206 9.4279 v -4.4845 -11.0128 19.6603 v -4.4303 -11.2853 19.6604 v -4.6535 -10.7896 9.4279 v -4.6388 -10.7818 19.6603 v -4.8845 -10.6353 9.4281 v -4.8698 -10.6275 19.6605 v -5.1569 -10.5811 9.4285 v -5.1423 -10.5733 19.6609 v -5.4294 -10.6353 9.4289 v -5.4148 -10.6275 19.6613 v -5.6604 -10.7896 9.4294 v -5.6457 -10.7818 19.6618 v -5.8147 -11.0206 9.4298 v -5.8001 -11.0128 19.6622 v -5.8689 -11.2931 9.4300 v -5.8543 -11.2853 19.6624 v -5.8147 -11.5656 9.4302 v -5.8001 -11.5577 19.6626 v -5.6604 -11.7965 9.4301 v -5.6457 -11.7887 19.6625 v -5.4294 -11.9509 9.4299 v -5.4148 -11.9431 19.6623 v -5.1569 -12.0051 9.4296 v -5.1423 -11.9973 19.6620 v -4.8845 -11.9509 9.4291 v -4.8698 -11.9431 19.6615 v -4.6535 -11.7965 9.4287 v -4.6388 -11.7887 19.6611 v -4.4991 -11.5656 9.4283 v -4.4845 -11.5577 19.6607 v -5.1423 -11.2853 19.6614 vn 1.0000 0.0000 -0.0014 vn 0.9239 0.3827 -0.0016 vn 0.7071 0.7071 -0.0016 vn 0.3827 0.9239 -0.0013 vn -0.0000 1.0000 -0.0008 vn -0.3827 0.9239 -0.0002 vn -0.7071 0.7071 0.0005 vn -0.9239 0.3827 0.0010 vn -1.0000 0.0000 0.0014 vn -0.9239 -0.3827 0.0016 vn -0.7071 -0.7071 0.0016 vn -0.3827 -0.9239 0.0013 vn 0.0000 -1.0000 0.0008 vn 0.3827 -0.9239 0.0002 vn 0.7071 -0.7071 -0.0005 vn 0.9239 -0.3827 -0.0010 vn 0.0014 0.0008 1.0000 vt 0.7500 0.0000 1.0000 vt 0.8125 0.0000 1.0000 vt 0.8125 1.0000 1.0000 vt 0.7500 1.0000 1.0000 vt 0.8750 0.0000 1.0000 vt 0.8750 1.0000 1.0000 vt 0.9375 0.0000 1.0000 vt 0.9375 1.0000 1.0000 vt -0.0625 0.0000 1.0000 vt 0.0000 0.0000 1.0000 vt 0.0000 1.0000 1.0000 vt -0.0625 1.0000 1.0000 vt 0.0625 0.0000 1.0000 vt 0.0625 1.0000 1.0000 vt 0.1250 0.0000 1.0000 vt 0.1250 1.0000 1.0000 vt 0.1875 0.0000 1.0000 vt 0.1875 1.0000 1.0000 vt 0.2500 0.0000 1.0000 vt 0.2500 1.0000 1.0000 vt 0.3125 0.0000 1.0000 vt 0.3125 1.0000 1.0000 vt 0.3750 0.0000 1.0000 vt 0.3750 1.0000 1.0000 vt 0.4375 0.0000 1.0000 vt 0.4375 1.0000 1.0000 vt 0.5000 0.0000 1.0000 vt 0.5000 1.0000 1.0000 vt 0.5625 0.0000 1.0000 vt 0.5625 1.0000 1.0000 vt 0.6250 0.0000 1.0000 vt 0.6250 1.0000 1.0000 vt 0.6875 0.0000 1.0000 vt 0.6875 1.0000 1.0000 vt 0.5296 1.0000 0.0867 vt 0.9334 1.0000 0.8478 vt 0.8633 1.0000 0.5665 vt 0.7379 1.0000 0.1989 vt 0.5763 1.0000 -0.1989 vt 0.4031 1.0000 -0.5665 vt 0.2446 1.0000 -0.8478 vt 0.1250 1.0000 -1.0000 vt 0.0625 1.0000 -1.0000 vt 0.0666 1.0000 -0.8478 vt 0.1367 1.0000 -0.5665 vt 0.2621 1.0000 -0.1989 g BillboardHolder f 1/1/1 2/2/2 3/3/2 f 3/3/2 4/4/1 1/1/1 f 2/2/2 5/5/3 6/6/3 f 6/6/3 3/3/2 2/2/2 f 5/5/3 7/7/4 8/8/4 f 8/8/4 6/6/3 5/5/3 f 7/9/4 9/10/5 10/11/5 f 10/11/5 8/12/4 7/9/4 f 9/10/5 11/13/6 12/14/6 f 12/14/6 10/11/5 9/10/5 f 11/13/6 13/15/7 14/16/7 f 14/16/7 12/14/6 11/13/6 f 13/15/7 15/17/8 16/18/8 f 16/18/8 14/16/7 13/15/7 f 15/17/8 17/19/9 18/20/9 f 18/20/9 16/18/8 15/17/8 f 17/19/9 19/21/10 20/22/10 f 20/22/10 18/20/9 17/19/9 f 19/21/10 21/23/11 22/24/11 f 22/24/11 20/22/10 19/21/10 f 21/23/11 23/25/12 24/26/12 f 24/26/12 22/24/11 21/23/11 f 23/25/12 25/27/13 26/28/13 f 26/28/13 24/26/12 23/25/12 f 25/27/13 27/29/14 28/30/14 f 28/30/14 26/28/13 25/27/13 f 27/29/14 29/31/15 30/32/15 f 30/32/15 28/30/14 27/29/14 f 29/31/15 31/33/16 32/34/16 f 32/34/16 30/32/15 29/31/15 f 31/33/16 1/1/1 4/4/1 f 4/4/1 32/34/16 31/33/16 f 4/4/17 3/3/17 33/35/17 f 3/3/17 6/6/17 33/35/17 f 6/6/17 8/8/17 33/35/17 f 8/8/17 10/36/17 33/35/17 f 10/36/17 12/37/17 33/35/17 f 12/37/17 14/38/17 33/35/17 f 14/38/17 16/39/17 33/35/17 f 16/39/17 18/40/17 33/35/17 f 18/40/17 20/41/17 33/35/17 f 20/41/17 22/42/17 33/35/17 f 22/42/17 24/43/17 33/35/17 f 24/43/17 26/44/17 33/35/17 f 26/44/17 28/45/17 33/35/17 f 28/45/17 30/46/17 33/35/17 f 30/46/17 32/34/17 33/35/17 f 32/34/17 4/4/17 33/35/17 moderngl-moderngl-773b733/examples/data/models/scene-1-billboard-image.obj000066400000000000000000000004421470420062000263530ustar00rootroot00000000000000v 0.2065 -15.5094 14.0291 v -8.7938 -6.0001 13.9511 v -8.8028 -5.9478 21.3671 v 0.1975 -15.4571 21.4451 vn 0.7263 0.6874 -0.0040 vt 0.0000 0.0000 0.0000 vt 1.0000 0.0000 0.0000 vt 1.0000 1.0000 0.0000 vt 0.0000 1.0000 0.0000 g BillboardImage f 1/1/1 2/2/1 3/3/1 f 3/3/1 4/4/1 1/1/1 moderngl-moderngl-773b733/examples/data/models/scene-1-billboard.obj000066400000000000000000000012221470420062000252700ustar00rootroot00000000000000v -9.4107 -6.5839 13.9545 v -8.7938 -6.0001 13.9511 v 0.2065 -15.5094 14.0291 v -0.4103 -16.0932 14.0325 v -9.4197 -6.5316 21.3705 v -0.4193 -16.0409 21.4485 v 0.1975 -15.4571 21.4451 v -8.8028 -5.9478 21.3671 vn 0.0012 -0.0071 -1.0000 vn -0.0012 0.0071 1.0000 vn -0.7263 -0.6874 0.0040 vn 0.6874 -0.7263 0.0060 vn -0.6874 0.7263 -0.0060 vt 1.0000 0.0000 0.0000 vt 1.0000 1.0000 0.0000 vt 0.0000 1.0000 0.0000 vt 0.0000 0.0000 0.0000 g Billboard f 1/1/1 2/2/1 3/3/1 f 3/3/1 4/4/1 1/1/1 f 5/4/2 6/1/2 7/2/2 f 7/2/2 8/3/2 5/4/2 f 1/4/3 4/1/3 6/2/3 f 6/2/3 5/3/3 1/4/3 f 4/4/4 3/1/4 7/2/4 f 7/2/4 6/3/4 4/4/4 f 2/4/5 1/1/5 5/2/5 f 5/2/5 8/3/5 2/4/5 moderngl-moderngl-773b733/examples/data/models/scene-1-grass.obj000066400000000000000000000141651470420062000244670ustar00rootroot00000000000000v 9.3754 2.9065 9.8627 v 10.7907 -2.1557 5.1672 v 10.3612 2.3635 5.1151 v 6.0427 5.8702 9.9036 v 6.4706 6.4850 5.0958 v 3.0680 9.2870 9.8661 v 2.3392 10.3829 5.1173 v -0.9014 9.5332 9.9039 v -2.1722 10.7660 5.1834 v -6.3430 7.6074 9.9437 v -8.0102 9.2547 5.2123 v -11.3435 6.6541 9.9229 v -13.4564 7.8699 5.2313 v -13.4310 4.7538 9.9329 v -15.4234 5.9429 5.2426 v -15.1408 -0.0387 9.9324 v -17.1723 0.2271 5.2152 v -15.2827 -4.6826 9.9034 v -16.6654 -5.0646 5.1775 v -11.0162 -10.7774 9.9110 v -11.9249 -11.9274 5.1755 v -4.9202 -15.1824 9.9003 v -5.0305 -16.6524 5.1889 v -0.2658 -15.1752 9.9266 v 0.2218 -17.1609 5.2280 v 4.5943 -13.5071 9.9324 v 5.9339 -15.4227 5.2472 v 6.5951 -11.4921 9.9200 v 7.8870 -13.4450 5.2359 v 7.5423 -6.5795 9.9474 v 9.2748 -8.0195 5.2168 v 9.5025 -1.1077 9.9105 v 5.3833 0.2825 10.0081 v 3.1415 2.9993 10.0169 v -2.1852 -2.1852 10.2284 v 0.3955 5.3719 10.0083 v -5.2758 3.6642 10.0538 v -9.6939 2.6474 10.0347 v -11.1293 -2.1296 10.0228 v -8.0734 -7.8784 10.0213 v -2.2772 -11.1049 10.0196 v 2.6018 -9.7326 10.0328 v 3.6019 -5.5006 10.0553 v 10.3502 -2.1094 4.8220 v 9.9277 2.1738 4.8219 v 6.1180 6.1470 4.8218 v 2.1589 9.9416 4.8218 v -2.1188 10.3467 4.8217 v -7.9199 8.8672 4.8217 v -13.2582 7.5372 4.8219 v -15.1045 5.7447 4.8219 v -16.7707 0.1770 4.8220 v -16.2598 -4.9164 4.8220 v -11.6173 -11.6208 4.8220 v -4.8984 -16.2547 4.8220 v 0.1796 -16.7806 4.8219 v 5.7428 -15.1093 4.8219 v 7.5612 -13.2533 4.8220 v 8.8878 -7.9123 4.8221 vn 0.6520 0.3577 0.6685 vn 0.9512 -0.0950 -0.2936 vn 0.8491 0.3714 -0.3756 vn 0.4753 0.4492 0.7565 vn 0.6415 0.6247 -0.4452 vn 0.3438 0.6499 0.6778 vn 0.3464 0.8590 -0.3771 vn -0.0628 0.6546 0.7534 vn -0.1093 0.9595 -0.2595 vn -0.1354 0.5372 0.8325 vn -0.2334 0.9504 -0.2056 vn -0.2590 0.5577 0.7886 vn -0.4989 0.8525 -0.1558 vn -0.4890 0.3248 0.8095 vn -0.8435 0.5215 -0.1283 vn -0.5785 0.1005 0.8095 vn -0.9744 0.1150 -0.1930 vn -0.6251 -0.2136 0.7508 vn -0.9052 -0.3305 -0.2670 vn -0.4596 -0.4480 0.7669 vn -0.6795 -0.6794 -0.2771 vn -0.2103 -0.6339 0.7443 vn -0.3109 -0.9183 -0.2449 vn 0.0794 -0.5991 0.7967 vn 0.1051 -0.9816 -0.1595 vn 0.3064 -0.5030 0.8081 vn 0.5146 -0.8497 -0.1149 vn 0.5642 -0.2674 0.7811 vn 0.8564 -0.4970 -0.1397 vn 0.5215 -0.1533 0.8394 vn 0.9463 -0.2549 -0.1988 vn 0.6378 -0.0659 0.7674 vn 0.0258 0.0092 0.9996 vn 0.0206 0.0195 0.9996 vn 0.0017 0.0016 1.0000 vn 0.0092 0.0257 0.9996 vn -0.0058 0.0262 0.9996 vn -0.0171 0.0145 0.9997 vn -0.0227 -0.0037 0.9997 vn -0.0179 -0.0186 0.9997 vn -0.0047 -0.0229 0.9997 vn 0.0141 -0.0171 0.9998 vn 0.0259 -0.0061 0.9996 vn 0.6101 -0.0494 -0.7908 vn 0.4777 0.2180 -0.8510 vn 0.3449 0.3500 -0.8710 vn 0.2171 0.4847 -0.8473 vn -0.0506 0.6500 -0.7582 vn -0.1742 0.6800 -0.7122 vn -0.3537 0.6362 -0.6856 vn -0.6349 0.3889 -0.6676 vn -0.6919 0.0685 -0.7187 vn -0.5964 -0.2193 -0.7722 vn -0.4451 -0.4485 -0.7751 vn -0.2268 -0.6209 -0.7504 vn 0.0699 -0.7254 -0.6848 vn 0.3884 -0.6486 -0.6546 vn 0.6426 -0.3609 -0.6758 vn 0.6767 -0.1743 -0.7153 vt 0.8125 1.0000 1.0000 vt 0.7500 1.0000 1.0000 vt 0.8750 1.0000 1.0000 vt 0.9375 1.0000 1.0000 vt 0.9022 1.0000 0.8247 vt 0.7734 1.0000 0.4374 vt 0.6557 1.0000 0.1074 vt 0.5818 1.0000 -0.0652 vt 0.4328 1.0000 -0.3670 vt 0.3161 1.0000 -0.5780 vt 0.2065 1.0000 -0.6842 vt 0.1599 1.0000 -0.6437 vt 0.2192 1.0000 -0.4455 vt 0.3215 1.0000 -0.1643 vt 0.3720 1.0000 -0.0574 vt 0.6875 1.0000 1.0000 vt 0.7813 1.0000 1.0000 vt 0.5627 1.0000 0.2103 vt 0.9199 1.0000 0.9123 vt 0.6187 1.0000 0.0211 vt 0.3745 1.0000 -0.4725 vt 0.1895 1.0000 -0.5446 vt 0.3467 1.0000 -0.1108 g Grass f 1/1/1 2/2/2 3/1/3 f 4/3/4 3/1/3 5/3/5 f 6/4/6 5/3/5 7/4/7 f 8/5/8 7/4/7 9/5/9 f 10/6/10 9/5/9 11/6/11 f 12/7/12 11/6/11 13/7/13 f 14/8/14 13/7/13 15/8/15 f 16/9/16 15/8/15 17/9/17 f 18/10/18 17/9/17 19/10/19 f 20/11/20 19/10/19 21/11/21 f 22/12/22 21/11/21 23/12/23 f 24/13/24 23/12/23 25/13/25 f 26/14/26 25/13/25 27/14/27 f 28/15/28 27/14/27 29/15/29 f 30/16/30 29/15/29 31/16/31 f 32/2/32 31/16/31 2/2/2 f 33/17/33 34/3/34 35/18/35 f 34/3/34 36/19/36 35/18/35 f 36/19/36 37/6/37 35/18/35 f 37/6/37 38/20/38 35/18/35 f 38/20/38 39/21/39 35/18/35 f 39/21/39 40/11/40 35/18/35 f 40/11/40 41/22/41 35/18/35 f 41/22/41 42/23/42 35/18/35 f 42/23/42 43/16/43 35/18/35 f 43/16/43 33/17/33 35/18/35 f 1/1/1 32/2/32 2/2/2 f 4/3/4 1/1/1 3/1/3 f 6/4/6 4/3/4 5/3/5 f 8/5/8 6/4/6 7/4/7 f 10/6/10 8/5/8 9/5/9 f 12/7/12 10/6/10 11/6/11 f 14/8/14 12/7/12 13/7/13 f 16/9/16 14/8/14 15/8/15 f 18/10/18 16/9/16 17/9/17 f 20/11/20 18/10/18 19/10/19 f 22/12/22 20/11/20 21/11/21 f 24/13/24 22/12/22 23/12/23 f 26/14/26 24/13/24 25/13/25 f 28/15/28 26/14/26 27/14/27 f 30/16/30 28/15/28 29/15/29 f 32/2/32 30/16/30 31/16/31 f 44/2/44 45/1/45 3/1/3 f 3/1/3 2/2/2 44/2/44 f 45/1/45 46/3/46 5/3/5 f 5/3/5 3/1/3 45/1/45 f 46/3/46 47/4/47 7/4/7 f 7/4/7 5/3/5 46/3/46 f 47/4/47 48/5/48 9/5/9 f 9/5/9 7/4/7 47/4/47 f 48/5/48 49/6/49 11/6/11 f 11/6/11 9/5/9 48/5/48 f 49/6/49 50/7/50 13/7/13 f 13/7/13 11/6/11 49/6/49 f 50/7/50 51/8/51 15/8/15 f 15/8/15 13/7/13 50/7/50 f 51/8/51 52/9/52 17/9/17 f 17/9/17 15/8/15 51/8/51 f 52/9/52 53/10/53 19/10/19 f 19/10/19 17/9/17 52/9/52 f 53/10/53 54/11/54 21/11/21 f 21/11/21 19/10/19 53/10/53 f 54/11/54 55/12/55 23/12/23 f 23/12/23 21/11/21 54/11/54 f 55/12/55 56/13/56 25/13/25 f 25/13/25 23/12/23 55/12/55 f 56/13/56 57/14/57 27/14/27 f 27/14/27 25/13/25 56/13/56 f 57/14/57 58/15/58 29/15/29 f 29/15/29 27/14/27 57/14/57 f 58/15/58 59/16/59 31/16/31 f 31/16/31 29/15/29 58/15/58 f 59/16/59 44/2/44 2/2/2 f 2/2/2 31/16/31 59/16/59 f 32/2/32 1/1/1 33/17/33 f 1/1/1 4/3/4 34/3/34 f 34/3/34 33/17/33 1/1/1 f 4/3/4 6/4/6 36/19/36 f 36/19/36 34/3/34 4/3/4 f 6/4/6 8/5/8 36/19/36 f 8/5/8 10/6/10 37/6/37 f 37/6/37 36/19/36 8/5/8 f 10/6/10 12/7/12 38/20/38 f 38/20/38 37/6/37 10/6/10 f 12/7/12 14/8/14 38/20/38 f 14/8/14 16/9/16 39/21/39 f 39/21/39 38/20/38 14/8/14 f 16/9/16 18/10/18 39/21/39 f 18/10/18 20/11/20 40/11/40 f 40/11/40 39/21/39 18/10/18 f 20/11/20 22/12/22 41/22/41 f 41/22/41 40/11/40 20/11/20 f 22/12/22 24/13/24 41/22/41 f 24/13/24 26/14/26 42/23/42 f 42/23/42 41/22/41 24/13/24 f 26/14/26 28/15/28 42/23/42 f 28/15/28 30/16/30 43/16/43 f 43/16/43 42/23/42 28/15/28 f 30/16/30 32/2/32 33/17/33 f 33/17/33 43/16/43 30/16/30 moderngl-moderngl-773b733/examples/data/models/scene-1-ground.obj000066400000000000000000000176161470420062000246520ustar00rootroot00000000000000v 9.9277 2.1738 4.8219 v 7.7397 -0.6896 0.6240 v 7.3068 2.7972 0.7157 v 10.3502 -2.1094 4.8220 v 5.6856 -5.8950 0.5645 v 8.8878 -7.9123 4.8221 v 5.9887 -10.8454 0.6113 v 7.5612 -13.2533 4.8220 v 4.3543 -12.7055 0.6227 v 5.7428 -15.1093 4.8219 v -0.5408 -14.7644 0.6306 v 0.1796 -16.7806 4.8219 v -4.6694 -15.0615 0.6349 v -4.8984 -16.2547 4.8220 v -10.0606 -10.3143 0.5726 v -11.6173 -11.6208 4.8220 v -14.9384 -4.9488 0.6276 v -16.2598 -4.9164 4.8220 v -14.8065 -0.7986 0.6213 v -16.7707 0.1770 4.8220 v -12.7959 4.1735 0.6056 v -15.1045 5.7447 4.8219 v -11.0200 5.9232 0.5900 v -13.2582 7.5372 4.8219 v -6.1670 5.6135 0.5278 v -7.9199 8.8672 4.8217 v -0.9347 7.7045 0.5741 v -2.1188 10.3467 4.8217 v 2.6205 7.3528 0.5766 v 2.1589 9.9416 4.8218 v 4.9507 5.0652 0.5178 v 6.1180 6.1470 4.8218 v -10.3906 -5.8148 -4.2540 v -12.6243 -3.1491 -4.5182 v -12.5163 -0.9797 -4.6974 v -11.3476 1.5181 -5.3865 v -10.4424 2.3304 -5.5498 v -3.8822 1.0168 0.2441 v -8.0107 2.2596 -5.0590 v -2.6799 -2.6819 0.4119 v -6.6696 -5.9843 0.3029 v -6.4990 -1.5738 -3.5224 v 2.3290 -8.0900 -5.0233 v 2.3044 -10.5740 -4.6450 v 1.3817 -11.4240 -4.4473 v -1.1651 -12.5645 -4.2060 v -3.3414 -12.5319 -4.2172 v -5.8351 -10.2753 -4.5867 v 0.9765 -4.7130 0.2518 v -1.5946 -6.5025 -4.3420 v 4.8178 2.4304 -4.7880 v 5.1458 0.5703 -4.2203 v 3.7458 -2.0455 -4.4701 v -0.2474 -0.2683 -4.6921 v -2.0047 3.8264 -5.8126 v 0.7468 5.1795 -5.9527 v 2.4901 4.7651 -5.7524 v 3.5050 3.5048 -5.3966 v -8.4226 -3.5503 -3.4988 v -6.8380 0.2895 -4.3105 v 1.4111 -1.2332 -4.5723 v -0.8013 1.4694 -5.2076 v -3.8541 -8.1141 -3.9627 v 0.2085 -7.2727 -4.8745 v -10.0945 -0.5183 -7.1801 v -0.5243 -10.0932 -6.5384 v 2.0822 2.0782 -7.2623 vn 0.8237 0.3252 -0.4645 vn 0.8474 -0.0991 -0.5216 vn 0.8013 0.4274 -0.4187 vn 0.8106 -0.1062 -0.5759 vn 0.7167 -0.0996 -0.6902 vn 0.8054 -0.1323 -0.5778 vn 0.7893 -0.2749 -0.5491 vn 0.7341 -0.4418 -0.5157 vn 0.5072 -0.6899 -0.5165 vn 0.4549 -0.7147 -0.5312 vn 0.1909 -0.8724 -0.4500 vn 0.1296 -0.9005 -0.4151 vn -0.3314 -0.8553 -0.3982 vn -0.3537 -0.8842 -0.3051 vn -0.5630 -0.5835 -0.5853 vn -0.6246 -0.6724 -0.3971 vn -0.8624 -0.3168 -0.3949 vn -0.9042 -0.2853 -0.3179 vn -0.9000 0.1590 -0.4059 vn -0.8767 0.1226 -0.4651 vn -0.7334 0.4812 -0.4802 vn -0.7127 0.4351 -0.5503 vn -0.2569 0.8414 -0.4754 vn -0.3901 0.7357 -0.5537 vn -0.1341 0.7371 -0.6624 vn -0.2120 0.7503 -0.6262 vn -0.1089 0.8634 -0.4927 vn -0.0805 0.8357 -0.5432 vn 0.4146 0.8225 -0.3894 vn 0.3231 0.8228 -0.4676 vn 0.6680 0.6652 -0.3336 vn 0.6618 0.6665 -0.3431 vn 0.0343 -0.6448 -0.7636 vn -0.7280 -0.2837 -0.6241 vn -0.8371 0.1260 -0.5324 vn -0.7105 0.3991 -0.5796 vn -0.2334 0.6744 -0.7005 vn 0.7737 0.2581 -0.5787 vn 0.4821 0.5200 -0.7051 vn 0.6723 -0.2068 -0.7108 vn 0.5973 -0.5354 -0.5971 vn 0.6816 -0.3087 -0.6635 vn 0.5452 0.3783 -0.7481 vn 0.6291 -0.3910 -0.6718 vn 0.3867 -0.7211 -0.5749 vn 0.1415 -0.8080 -0.5719 vn -0.2621 -0.7202 -0.6424 vn -0.5666 0.5697 -0.5953 vn -0.6098 -0.0506 -0.7909 vn -0.1022 0.7639 -0.6372 vn 0.3105 0.8130 -0.4925 vn -0.1464 0.6841 -0.7145 vn 0.7720 0.2794 -0.5709 vn 0.7775 -0.1659 -0.6066 vn -0.2921 -0.7746 -0.5610 vn 0.2819 -0.6149 -0.7365 vn -0.6355 -0.5356 -0.5561 vn -0.8039 -0.3614 -0.4724 vn -0.5400 -0.5349 -0.6498 vn -0.6459 0.1638 -0.7456 vn -0.0643 0.7206 -0.6904 vn 0.4877 0.6330 -0.6012 vn 0.6956 0.4561 -0.5551 vn 0.6239 -0.4691 -0.6251 vn 0.7592 0.0356 -0.6499 vn -0.2771 -0.6812 -0.6776 vn -0.6242 -0.4384 -0.6467 vn -0.4397 0.5430 -0.7155 vn 0.1508 0.6945 -0.7035 vn -0.0065 -0.0428 -0.9991 vn 0.0414 -0.1142 -0.9926 vn 0.1301 -0.0960 -0.9868 vt 0.8125 1.0000 1.0000 vt 0.7500 1.0000 1.0000 vt 0.6875 1.0000 1.0000 vt 0.3720 1.0000 -0.0574 vt 0.3215 1.0000 -0.1643 vt 0.2192 1.0000 -0.4455 vt 0.1599 1.0000 -0.6437 vt 0.2065 1.0000 -0.6842 vt 0.3161 1.0000 -0.5780 vt 0.4328 1.0000 -0.3670 vt 0.5818 1.0000 -0.0652 vt 0.6557 1.0000 0.1074 vt 0.7734 1.0000 0.4374 vt 0.9022 1.0000 0.8247 vt 0.9375 1.0000 1.0000 vt 0.8750 1.0000 1.0000 vt 0.3553 1.0000 -0.4092 vt 0.4101 1.0000 -0.3561 vt 0.4685 1.0000 -0.2506 vt 0.5430 1.0000 -0.0997 vt 0.5799 1.0000 -0.0134 vt 0.6681 1.0000 0.3238 vt 0.6388 1.0000 0.1516 vt 0.5627 1.0000 0.2103 vt 0.3846 1.0000 -0.2369 vt 0.5334 1.0000 0.0380 vt 0.5244 1.0000 0.4439 vt 0.3667 1.0000 -0.0848 vt 0.3414 1.0000 -0.1382 vt 0.2902 1.0000 -0.2788 vt 0.2606 1.0000 -0.3779 vt 0.2839 1.0000 -0.3981 vt 0.6251 1.0000 0.6051 vt 0.4620 1.0000 0.0491 vt 0.8001 1.0000 0.9045 vt 0.7688 1.0000 0.9045 vt 0.7376 1.0000 0.9045 vt 0.6752 1.0000 0.5096 vt 0.7805 1.0000 0.6232 vt 0.8449 1.0000 0.8169 vt 0.8626 1.0000 0.9045 vt 0.8313 1.0000 0.9045 vt 0.4444 1.0000 -0.1856 vt 0.5861 1.0000 0.0948 vt 0.7064 1.0000 0.7071 vt 0.7278 1.0000 0.5664 vt 0.3730 1.0000 -0.1745 vt 0.4932 1.0000 0.2465 vt 0.5041 1.0000 -0.1342 vt 0.3613 1.0000 -0.1121 vt 0.7876 1.0000 0.8090 g Ground f 1/1/1 2/2/2 3/1/3 f 4/2/4 5/3/5 2/2/2 f 6/3/6 7/4/7 5/3/5 f 8/4/8 9/5/9 7/4/7 f 10/5/10 11/6/11 9/5/9 f 12/6/12 13/7/13 11/6/11 f 14/7/14 15/8/15 13/7/13 f 16/8/16 17/9/17 15/8/15 f 18/9/18 19/10/19 17/9/17 f 20/10/20 21/11/21 19/10/19 f 22/11/22 23/12/23 21/11/21 f 24/12/24 25/13/25 23/12/23 f 26/13/26 27/14/27 25/13/25 f 28/14/28 29/15/29 27/14/27 f 30/15/30 31/16/31 29/15/29 f 32/16/32 3/1/3 31/16/31 f 15/8/15 17/9/17 33/17/33 f 17/9/17 19/10/19 34/18/34 f 19/10/19 21/11/21 35/19/35 f 21/11/21 23/12/23 36/20/36 f 23/12/23 25/13/25 37/21/37 f 25/13/25 38/22/38 39/23/39 f 40/24/40 41/25/41 42/26/42 f 5/3/5 7/4/7 43/27/43 f 7/4/7 9/5/9 44/28/44 f 9/5/9 11/6/11 45/29/45 f 11/6/11 13/7/13 46/30/46 f 13/7/13 15/8/15 47/31/47 f 15/8/15 41/25/48 48/32/49 f 40/24/50 49/33/51 50/34/52 f 3/1/3 2/2/2 51/35/53 f 2/2/2 5/3/5 52/36/54 f 5/3/5 49/33/55 53/37/56 f 40/24/57 38/22/58 54/38/59 f 25/13/25 27/14/27 55/39/60 f 27/14/27 29/15/29 56/40/61 f 29/15/29 31/16/31 57/41/62 f 31/16/31 51/35/53 58/42/63 f 41/25/41 33/17/33 59/43/64 f 38/22/38 42/26/42 60/44/65 f 49/33/55 54/38/59 61/45/66 f 38/22/58 55/39/60 62/46/67 f 41/25/48 50/34/52 63/47/68 f 49/33/51 43/27/43 64/48/69 f 34/18/34 65/49/70 33/17/33 f 35/19/35 65/49/70 34/18/34 f 36/20/36 65/49/70 35/19/35 f 37/21/37 65/49/70 36/20/36 f 39/23/39 65/49/70 37/21/37 f 60/44/65 65/49/70 39/23/39 f 59/43/64 65/49/70 42/26/42 f 44/28/44 66/50/71 43/27/43 f 45/29/45 66/50/71 44/28/44 f 46/30/46 66/50/71 45/29/45 f 47/31/47 66/50/71 46/30/46 f 48/32/49 66/50/71 47/31/47 f 63/47/68 66/50/71 48/32/49 f 64/48/69 66/50/71 50/34/52 f 52/36/54 67/51/72 51/35/53 f 53/37/56 67/51/72 52/36/54 f 61/45/66 67/51/72 53/37/56 f 62/46/67 67/51/72 54/38/59 f 56/40/61 67/51/72 55/39/60 f 57/41/62 67/51/72 56/40/61 f 58/42/63 67/51/72 57/41/62 f 51/35/53 67/51/72 58/42/63 f 33/17/33 65/49/70 59/43/64 f 42/26/42 65/49/70 60/44/65 f 54/38/59 67/51/72 61/45/66 f 55/39/60 67/51/72 62/46/67 f 50/34/52 66/50/71 63/47/68 f 43/27/43 66/50/71 64/48/69 f 1/1/1 4/2/4 2/2/2 f 4/2/4 6/3/6 5/3/5 f 6/3/6 8/4/8 7/4/7 f 8/4/8 10/5/10 9/5/9 f 10/5/10 12/6/12 11/6/11 f 12/6/12 14/7/14 13/7/13 f 14/7/14 16/8/16 15/8/15 f 16/8/16 18/9/18 17/9/17 f 18/9/18 20/10/20 19/10/19 f 20/10/20 22/11/22 21/11/21 f 22/11/22 24/12/24 23/12/23 f 24/12/24 26/13/26 25/13/25 f 26/13/26 28/14/28 27/14/27 f 28/14/28 30/15/30 29/15/29 f 30/15/30 32/16/32 31/16/31 f 32/16/32 1/1/1 3/1/3 f 17/9/17 34/18/34 33/17/33 f 19/10/19 35/19/35 34/18/34 f 21/11/21 36/20/36 35/19/35 f 23/12/23 37/21/37 36/20/36 f 25/13/25 39/23/39 37/21/37 f 38/22/38 60/44/65 39/23/39 f 41/25/41 59/43/64 42/26/42 f 7/4/7 44/28/44 43/27/43 f 9/5/9 45/29/45 44/28/44 f 11/6/11 46/30/46 45/29/45 f 13/7/13 47/31/47 46/30/46 f 15/8/15 48/32/49 47/31/47 f 41/25/48 63/47/68 48/32/49 f 49/33/51 64/48/69 50/34/52 f 2/2/2 52/36/54 51/35/53 f 5/3/5 53/37/56 52/36/54 f 49/33/55 61/45/66 53/37/56 f 38/22/58 62/46/67 54/38/59 f 27/14/27 56/40/61 55/39/60 f 29/15/29 57/41/62 56/40/61 f 31/16/31 58/42/63 57/41/62 f 31/16/31 3/1/3 51/35/53 f 41/25/41 15/8/15 33/17/33 f 38/22/38 40/24/40 42/26/42 f 49/33/55 40/24/57 54/38/59 f 38/22/58 25/13/25 55/39/60 f 41/25/48 40/24/50 50/34/52 f 49/33/51 5/3/5 43/27/43 moderngl-moderngl-773b733/examples/data/models/sitting_dummy.obj000066400000000000000000017525521470420062000250250ustar00rootroot00000000000000# Sitting v 1.8464 45.5902 60.5378 v 3.4117 42.8789 61.5826 v 5.9092 45.3766 61.5827 v 3.1980 46.9418 60.5378 v 0.0000 45.0955 60.5379 v 0.0000 41.9648 61.5826 v -1.8464 45.5902 60.5378 v -3.4117 42.8789 61.5826 v -3.1980 46.9418 60.5378 v -5.9092 45.3766 61.5827 v -3.6928 48.7882 60.5378 v -6.8234 48.7882 61.5826 v -3.1980 50.6346 60.5378 v -5.9092 52.2000 61.5825 v -1.8464 51.9862 60.5378 v -3.4117 54.6974 61.5826 v 0.0000 52.4808 60.5377 v 0.0000 55.6115 61.5826 v 1.8464 51.9862 60.5378 v 3.4117 54.6974 61.5826 v 3.1980 50.6346 60.5378 v 5.9092 52.2000 61.5825 v 3.6928 48.7882 60.5378 v 6.8234 48.7882 61.5826 v 4.4576 41.0673 61.6337 v 7.7208 44.3306 61.6338 v 0.0000 39.8731 61.6338 v -4.4576 41.0673 61.6337 v -7.7208 44.3306 61.6338 v -8.9152 48.7882 61.6338 v -7.7208 53.2457 61.6338 v -4.4576 56.5091 61.6339 v 0.0000 57.7033 61.6338 v 4.4576 56.5091 61.6339 v 7.7208 53.2457 61.6338 v 8.9152 48.7882 61.6338 v 6.1358 40.8953 57.4173 v 10.6274 44.6758 57.4173 v 0.0000 39.5117 57.4173 v -6.1357 40.8953 57.4173 v -10.6274 44.6758 57.4173 v -12.2715 49.8400 57.4173 v -10.6274 55.0043 57.4173 v -6.1357 58.7848 57.4173 v 0.0000 60.1684 57.4172 v 6.1358 58.7848 57.4173 v 10.6274 55.0043 57.4173 v 12.2715 49.8400 57.4173 v 6.9380 42.1453 44.3526 v 3.7548 44.8071 44.3413 v 6.5036 46.9343 44.3413 v 12.0170 44.4709 44.3526 v 0.0000 40.7067 44.3526 v 0.0000 44.0287 44.3414 v -6.9380 42.1453 44.3526 v -3.7548 44.8071 44.3413 v -12.0170 44.4709 44.3526 v -6.5036 46.9343 44.3413 v -13.8760 49.8400 44.3526 v -7.5097 49.8400 44.3414 v -12.0170 55.2092 44.3525 v -6.5036 52.7458 44.3414 v -6.9380 57.0280 44.3525 v -3.7548 54.8730 44.3414 v 0.0000 58.4666 44.3526 v 0.0000 55.6513 44.3413 v 6.9380 57.0280 44.3525 v 3.7548 54.8730 44.3414 v 12.0170 55.2092 44.3525 v 6.5036 52.7458 44.3414 v 13.8760 49.8400 44.3526 v 7.5097 49.8400 44.3414 v 0.0000 48.7882 60.1709 v 0.0000 49.8400 44.3373 v -14.1522 49.8400 51.9564 v -12.2562 44.3640 51.9563 v -7.0761 41.0312 51.9564 v 0.0000 39.5640 51.9564 v 7.0761 41.0312 51.9564 v 12.2561 44.3640 51.9563 v 14.1522 49.8400 51.9564 v 12.2561 55.3160 51.9564 v 7.0761 59.3246 51.9564 v 0.0000 60.7918 51.9563 v -7.0761 59.3246 51.9564 v -12.2562 55.3160 51.9564 v -12.5232 44.2446 45.6952 v -14.4606 49.8400 45.6954 v -7.2303 41.7537 45.6954 v 0.0000 40.2544 45.6954 v 7.2303 41.7537 45.6954 v 12.5232 44.2446 45.6952 v 14.4606 49.8400 45.6954 v 12.5232 55.4353 45.6954 v 7.2303 57.4196 45.6954 v 0.0000 58.9189 45.6954 v -7.2303 57.4196 45.6954 v -12.5232 55.4353 45.6954 vn -0.1133 0.1963 0.9740 vn -0.0741 0.1284 0.9890 vn -0.1284 0.0741 0.9889 vn -0.1963 0.1133 0.9740 vn -0.0000 0.2266 0.9740 vn 0.0000 0.1483 0.9889 vn 0.1133 0.1963 0.9740 vn 0.0741 0.1284 0.9890 vn 0.1963 0.1133 0.9740 vn 0.1284 0.0741 0.9889 vn 0.2266 0.0000 0.9740 vn 0.1483 0.0000 0.9889 vn 0.1963 -0.1133 0.9740 vn 0.1284 -0.0741 0.9889 vn 0.1133 -0.1963 0.9740 vn 0.0741 -0.1284 0.9889 vn -0.0000 -0.2266 0.9740 vn 0.0000 -0.1483 0.9889 vn -0.1133 -0.1963 0.9740 vn -0.0741 -0.1284 0.9889 vn -0.1962 -0.1133 0.9740 vn -0.1284 -0.0741 0.9889 vn -0.2266 0.0000 0.9740 vn -0.1483 0.0000 0.9889 vn 0.2989 -0.6135 0.7309 vn 0.4725 -0.3404 0.8129 vn 0.0000 -0.7217 0.6922 vn -0.2989 -0.6135 0.7309 vn -0.4725 -0.3404 0.8129 vn -0.4889 -0.0267 0.8719 vn -0.4070 0.2569 0.8765 vn -0.2502 0.4611 0.8514 vn 0.0000 0.5463 0.8376 vn 0.2502 0.4611 0.8514 vn 0.4070 0.2570 0.8765 vn 0.4889 -0.0267 0.8719 vn 0.4552 -0.8779 0.1486 vn 0.7742 -0.5211 0.3592 vn -0.0000 -0.9988 0.0481 vn -0.4552 -0.8779 0.1486 vn -0.7742 -0.5211 0.3592 vn -0.8881 0.0081 0.4595 vn -0.7383 0.5142 0.4365 vn -0.4152 0.8354 0.3601 vn -0.0000 0.9491 0.3150 vn 0.4152 0.8354 0.3601 vn 0.7383 0.5142 0.4365 vn 0.8881 0.0081 0.4595 vn 0.1850 -0.5793 -0.7938 vn 0.0007 -0.0019 -1.0000 vn 0.0011 -0.0010 -1.0000 vn 0.4668 -0.4492 -0.7618 vn 0.0000 -0.6304 -0.7763 vn 0.0000 -0.0022 -1.0000 vn -0.1850 -0.5793 -0.7938 vn -0.0007 -0.0019 -1.0000 vn -0.4668 -0.4492 -0.7618 vn -0.0011 -0.0010 -1.0000 vn -0.6200 0.0000 -0.7846 vn -0.0013 0.0000 -1.0000 vn -0.4505 0.4784 -0.7538 vn -0.0011 0.0011 -1.0000 vn -0.1595 0.5788 -0.7997 vn -0.0008 0.0022 -1.0000 vn 0.0000 0.6306 -0.7761 vn 0.0000 0.0026 -1.0000 vn 0.1595 0.5788 -0.7997 vn 0.0008 0.0022 -1.0000 vn 0.4505 0.4784 -0.7538 vn 0.0011 0.0011 -1.0000 vn 0.6200 0.0000 -0.7846 vn 0.0013 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn -0.0000 0.0000 -1.0000 vn -0.9829 0.0000 0.1841 vn -0.7769 -0.6143 0.1384 vn -0.4004 -0.9163 -0.0047 vn -0.0000 -0.9985 -0.0547 vn 0.4004 -0.9163 -0.0047 vn 0.7769 -0.6143 0.1384 vn 0.9829 0.0000 0.1841 vn 0.7920 0.5985 0.1202 vn 0.4214 0.9059 -0.0428 vn -0.0000 0.9967 -0.0817 vn -0.4214 0.9059 -0.0428 vn -0.7920 0.5985 0.1202 vn -0.7434 -0.6499 -0.1578 vn -0.9851 0.0000 -0.1718 vn -0.3306 -0.9236 -0.1942 vn -0.0000 -0.9771 -0.2128 vn 0.3306 -0.9236 -0.1942 vn 0.7434 -0.6499 -0.1578 vn 0.9851 0.0000 -0.1718 vn 0.7188 0.6776 -0.1556 vn 0.3106 0.9165 -0.2522 vn -0.0000 0.9532 -0.3023 vn -0.3106 0.9165 -0.2522 vn -0.7188 0.6776 -0.1556 vt 0.5426 0.3685 0.0000 vt 0.5580 0.3704 0.0000 vt 0.6126 0.3636 0.0000 vt 0.5722 0.3648 0.0000 vt 0.5075 0.3698 0.0000 vt 0.4931 0.3729 0.0000 vt 0.4763 0.3685 0.0000 vt 0.4354 0.3704 0.0000 vt 0.4573 0.3647 0.0000 vt 0.4003 0.3635 0.0000 vt 0.4556 0.3596 0.0000 vt 0.3973 0.3540 0.0000 vt 0.4717 0.3545 0.0000 vt 0.4271 0.3446 0.0000 vt 0.5013 0.3508 0.0000 vt 0.4817 0.3377 0.0000 vt 0.5364 0.3494 0.0000 vt 0.5466 0.3352 0.0000 vt 0.5676 0.3508 0.0000 vt 0.6043 0.3378 0.0000 vt 0.5866 0.3546 0.0000 vt 0.6394 0.3447 0.0000 vt 0.5883 0.3597 0.0000 vt 0.6424 0.3541 0.0000 vt 0.5696 0.3752 0.0000 vt 0.6410 0.3662 0.0000 vt 0.4848 0.3784 0.0000 vt 0.4094 0.3751 0.0000 vt 0.3636 0.3661 0.0000 vt 0.3596 0.3538 0.0000 vt 0.3985 0.3414 0.0000 vt 0.4699 0.3325 0.0000 vt 0.5547 0.3292 0.0000 vt 0.6301 0.3325 0.0000 vt 0.6759 0.3416 0.0000 vt 0.6799 0.3539 0.0000 vt 0.6075 0.3981 0.0000 vt 0.7030 0.3877 0.0000 vt 0.4919 0.4018 0.0000 vt 0.3871 0.3980 0.0000 vt 0.3212 0.3875 0.0000 vt 0.3119 0.3732 0.0000 vt 0.3617 0.3590 0.0000 vt 0.4572 0.3486 0.0000 vt 0.5728 0.3448 0.0000 vt 0.6776 0.3487 0.0000 vt 0.7435 0.3591 0.0000 vt 0.7528 0.3734 0.0000 vt 0.6531 0.4640 0.0000 vt 0.6064 0.4567 0.0000 vt 0.6641 0.4508 0.0000 vt 0.7534 0.4576 0.0000 vt 0.5228 0.4679 0.0000 vt 0.5359 0.4588 0.0000 vt 0.4038 0.4639 0.0000 vt 0.4715 0.4566 0.0000 vt 0.3217 0.4574 0.0000 vt 0.4304 0.4507 0.0000 vt 0.3094 0.4426 0.0000 vt 0.4237 0.4427 0.0000 vt 0.3638 0.4278 0.0000 vt 0.4532 0.4347 0.0000 vt 0.4621 0.4228 0.0000 vt 0.5109 0.4288 0.0000 vt 0.5924 0.4189 0.0000 vt 0.5814 0.4267 0.0000 vt 0.7114 0.4229 0.0000 vt 0.6458 0.4289 0.0000 vt 0.7955 0.4280 0.0000 vt 0.6868 0.4348 0.0000 vt 0.8078 0.4428 0.0000 vt 0.6935 0.4428 0.0000 vt 0.5227 0.3616 0.0000 vt 0.5586 0.4428 0.0000 vt 0.2891 0.4022 0.0000 vt 0.3017 0.4173 0.0000 vt 0.3817 0.4266 0.0000 vt 0.5031 0.4307 0.0000 vt 0.6359 0.4267 0.0000 vt 0.7420 0.4175 0.0000 vt 0.7975 0.4024 0.0000 vt 0.7849 0.3873 0.0000 vt 0.7076 0.3762 0.0000 vt 0.5862 0.3721 0.0000 vt 0.4534 0.3761 0.0000 vt 0.3446 0.3871 0.0000 vt 0.3090 0.4509 0.0000 vt 0.2962 0.4354 0.0000 vt 0.3944 0.4578 0.0000 vt 0.5184 0.4620 0.0000 vt 0.6541 0.4580 0.0000 vt 0.7589 0.4511 0.0000 vt 0.8156 0.4357 0.0000 vt 0.8028 0.4202 0.0000 vt 0.7155 0.4147 0.0000 vt 0.5915 0.4105 0.0000 vt 0.4557 0.4146 0.0000 vt 0.3529 0.4200 0.0000 g Object059 f 1/1/1 2/2/2 3/3/3 f 3/3/3 4/4/4 1/1/1 f 5/5/5 6/6/6 2/2/2 f 2/2/2 1/1/1 5/5/5 f 7/7/7 8/8/8 6/6/6 f 6/6/6 5/5/5 7/7/7 f 9/9/9 10/10/10 8/8/8 f 8/8/8 7/7/7 9/9/9 f 11/11/11 12/12/12 10/10/10 f 10/10/10 9/9/9 11/11/11 f 13/13/13 14/14/14 12/12/12 f 12/12/12 11/11/11 13/13/13 f 15/15/15 16/16/16 14/14/14 f 14/14/14 13/13/13 15/15/15 f 17/17/17 18/18/18 16/16/16 f 16/16/16 15/15/15 17/17/17 f 19/19/19 20/20/20 18/18/18 f 18/18/18 17/17/17 19/19/19 f 21/21/21 22/22/22 20/20/20 f 20/20/20 19/19/19 21/21/21 f 23/23/23 24/24/24 22/22/22 f 22/22/22 21/21/21 23/23/23 f 4/4/4 3/3/3 24/24/24 f 24/24/24 23/23/23 4/4/4 f 2/2/2 25/25/25 26/26/26 f 26/26/26 3/3/3 2/2/2 f 6/6/6 27/27/27 25/25/25 f 25/25/25 2/2/2 6/6/6 f 8/8/8 28/28/28 27/27/27 f 27/27/27 6/6/6 8/8/8 f 10/10/10 29/29/29 28/28/28 f 28/28/28 8/8/8 10/10/10 f 12/12/12 30/30/30 29/29/29 f 29/29/29 10/10/10 12/12/12 f 14/14/14 31/31/31 30/30/30 f 30/30/30 12/12/12 14/14/14 f 16/16/16 32/32/32 31/31/31 f 31/31/31 14/14/14 16/16/16 f 18/18/18 33/33/33 32/32/32 f 32/32/32 16/16/16 18/18/18 f 20/20/20 34/34/34 33/33/33 f 33/33/33 18/18/18 20/20/20 f 22/22/22 35/35/35 34/34/34 f 34/34/34 20/20/20 22/22/22 f 24/24/24 36/36/36 35/35/35 f 35/35/35 22/22/22 24/24/24 f 3/3/3 26/26/26 36/36/36 f 36/36/36 24/24/24 3/3/3 f 37/37/37 38/38/38 26/26/26 f 26/26/26 25/25/25 37/37/37 f 39/39/39 37/37/37 25/25/25 f 25/25/25 27/27/27 39/39/39 f 28/28/28 40/40/40 39/39/39 f 39/39/39 27/27/27 28/28/28 f 29/29/29 41/41/41 40/40/40 f 40/40/40 28/28/28 29/29/29 f 30/30/30 42/42/42 41/41/41 f 41/41/41 29/29/29 30/30/30 f 31/31/31 43/43/43 42/42/42 f 42/42/42 30/30/30 31/31/31 f 44/44/44 43/43/43 31/31/31 f 31/31/31 32/32/32 44/44/44 f 45/45/45 44/44/44 32/32/32 f 32/32/32 33/33/33 45/45/45 f 34/34/34 46/46/46 45/45/45 f 45/45/45 33/33/33 34/34/34 f 35/35/35 47/47/47 46/46/46 f 46/46/46 34/34/34 35/35/35 f 48/48/48 47/47/47 35/35/35 f 35/35/35 36/36/36 48/48/48 f 38/38/38 48/48/48 36/36/36 f 36/36/36 26/26/26 38/38/38 f 49/49/49 50/50/50 51/51/51 f 51/51/51 52/52/52 49/49/49 f 53/53/53 54/54/54 50/50/50 f 50/50/50 49/49/49 53/53/53 f 53/53/53 55/55/55 56/56/56 f 56/56/56 54/54/54 53/53/53 f 55/55/55 57/57/57 58/58/58 f 58/58/58 56/56/56 55/55/55 f 57/57/57 59/59/59 60/60/60 f 60/60/60 58/58/58 57/57/57 f 61/61/61 62/62/62 60/60/60 f 60/60/60 59/59/59 61/61/61 f 63/63/63 64/64/64 62/62/62 f 62/62/62 61/61/61 63/63/63 f 65/65/65 66/66/66 64/64/64 f 64/64/64 63/63/63 65/65/65 f 65/65/65 67/67/67 68/68/68 f 68/68/68 66/66/66 65/65/65 f 67/67/67 69/69/69 70/70/70 f 70/70/70 68/68/68 67/67/67 f 69/69/69 71/71/71 72/72/72 f 72/72/72 70/70/70 69/69/69 f 52/52/52 51/51/51 72/72/72 f 72/72/72 71/71/71 52/52/52 f 1/1/1 4/4/4 73/73/73 f 5/5/5 1/1/1 73/73/73 f 7/7/7 5/5/5 73/73/73 f 9/9/9 7/7/7 73/73/73 f 11/11/11 9/9/9 73/73/73 f 13/13/13 11/11/11 73/73/73 f 15/15/15 13/13/13 73/73/73 f 17/17/17 15/15/15 73/73/73 f 19/19/19 17/17/17 73/73/73 f 21/21/21 19/19/19 73/73/73 f 23/23/23 21/21/21 73/73/73 f 4/4/4 23/23/23 73/73/73 f 51/51/51 50/50/50 74/74/74 f 50/50/50 54/54/54 74/74/74 f 54/54/54 56/56/56 74/74/74 f 56/56/56 58/58/58 74/74/74 f 58/58/58 60/60/60 74/74/74 f 60/60/60 62/62/62 74/74/74 f 62/62/62 64/64/64 74/74/74 f 64/64/64 66/66/66 74/74/74 f 66/66/66 68/68/68 74/74/74 f 68/68/68 70/70/70 74/74/74 f 70/70/70 72/72/72 74/74/74 f 72/72/72 51/51/51 74/74/74 f 42/42/42 75/75/75 76/76/76 f 76/76/76 41/41/41 42/42/42 f 41/41/41 76/76/76 77/77/77 f 77/77/77 40/40/40 41/41/41 f 40/40/40 77/77/77 78/78/78 f 78/78/78 39/39/39 40/40/40 f 37/37/37 39/39/39 78/78/78 f 78/78/78 79/79/79 37/37/37 f 38/38/38 37/37/37 79/79/79 f 79/79/79 80/80/80 38/38/38 f 48/48/48 38/38/38 80/80/80 f 80/80/80 81/81/81 48/48/48 f 48/48/48 81/81/81 82/82/82 f 82/82/82 47/47/47 48/48/48 f 47/47/47 82/82/82 83/83/83 f 83/83/83 46/46/46 47/47/47 f 46/46/46 83/83/83 84/84/84 f 84/84/84 45/45/45 46/46/46 f 44/44/44 45/45/45 84/84/84 f 84/84/84 85/85/85 44/44/44 f 43/43/43 44/44/44 85/85/85 f 85/85/85 86/86/86 43/43/43 f 42/42/42 43/43/43 86/86/86 f 86/86/86 75/75/75 42/42/42 f 59/59/59 57/57/57 87/87/87 f 87/87/87 88/88/88 59/59/59 f 89/89/89 87/87/87 57/57/57 f 57/57/57 55/55/55 89/89/89 f 90/90/90 89/89/89 55/55/55 f 55/55/55 53/53/53 90/90/90 f 90/90/90 53/53/53 49/49/49 f 49/49/49 91/91/91 90/90/90 f 91/91/91 49/49/49 52/52/52 f 52/52/52 92/92/92 91/91/91 f 92/92/92 52/52/52 71/71/71 f 71/71/71 93/93/93 92/92/92 f 94/94/94 93/93/93 71/71/71 f 71/71/71 69/69/69 94/94/94 f 95/95/95 94/94/94 69/69/69 f 69/69/69 67/67/67 95/95/95 f 96/96/96 95/95/95 67/67/67 f 67/67/67 65/65/65 96/96/96 f 96/96/96 65/65/65 63/63/63 f 63/63/63 97/97/97 96/96/96 f 97/97/97 63/63/63 61/61/61 f 61/61/61 98/98/98 97/97/97 f 98/98/98 61/61/61 59/59/59 f 59/59/59 88/88/88 98/98/98 f 75/75/75 88/88/88 87/87/87 f 87/87/87 76/76/76 75/75/75 f 76/76/76 87/87/87 89/89/89 f 89/89/89 77/77/77 76/76/76 f 77/77/77 89/89/89 90/90/90 f 90/90/90 78/78/78 77/77/77 f 79/79/79 78/78/78 90/90/90 f 90/90/90 91/91/91 79/79/79 f 80/80/80 79/79/79 91/91/91 f 91/91/91 92/92/92 80/80/80 f 81/81/81 80/80/80 92/92/92 f 92/92/92 93/93/93 81/81/81 f 81/81/81 93/93/93 94/94/94 f 94/94/94 82/82/82 81/81/81 f 82/82/82 94/94/94 95/95/95 f 95/95/95 83/83/83 82/82/82 f 83/83/83 95/95/95 96/96/96 f 96/96/96 84/84/84 83/83/83 f 85/85/85 84/84/84 96/96/96 f 96/96/96 97/97/97 85/85/85 f 86/86/86 85/85/85 97/97/97 f 97/97/97 98/98/98 86/86/86 f 75/75/75 86/86/86 98/98/98 f 98/98/98 88/88/88 75/75/75 v 3.9413 52.9099 44.6175 v 5.3790 53.1624 46.2199 v 6.3549 54.3378 44.4864 v 5.5768 54.2012 43.6192 v 7.4325 53.3569 46.8861 v 7.4662 54.4432 44.8469 v 9.5515 53.4414 46.4376 v 8.6130 54.4888 44.6042 v 11.1683 53.3931 44.9946 v 9.4880 54.4627 43.8233 v 11.8495 53.2251 42.9437 v 9.8568 54.3717 42.7134 v 11.4128 52.9823 40.8345 v 9.6204 54.2405 41.5718 v 9.9751 52.7298 39.2321 v 8.8423 54.1037 40.7046 v 7.9216 52.5353 38.5659 v 7.7309 53.9984 40.3442 v 5.8026 52.4508 39.0144 v 6.5841 53.9527 40.5868 v 4.1858 52.4991 40.4574 v 5.7092 53.9790 41.3678 v 3.5045 52.6671 42.5083 v 5.3405 54.0698 42.4777 v 2.9134 50.9912 45.3927 v 4.7919 51.3210 47.4864 v 7.4749 51.5753 48.3567 v 10.2435 51.6855 47.7709 v 12.3559 51.6226 45.8854 v 13.2460 51.4029 43.2058 v 12.6754 51.0857 40.4499 v 10.7969 50.7559 38.3563 v 8.1139 50.5016 37.4859 v 5.3453 50.3914 38.0718 v 3.2329 50.4543 39.9572 v 2.3427 50.6739 42.6368 v 2.6497 48.7370 45.8266 v 4.6829 49.0941 48.0928 v 7.5870 49.3692 49.0349 v 10.5837 49.4886 48.4007 v 12.8702 49.4204 46.3600 v 13.8336 49.1827 43.4596 v 13.2160 48.8394 40.4767 v 11.1827 48.4823 38.2105 v 8.2787 48.2073 37.2684 v 5.2819 48.0878 37.9026 v 2.9955 48.1560 39.9434 v 2.0320 48.3936 42.8438 v 3.1903 46.4907 45.8534 v 5.0688 46.8204 47.9470 v 7.7518 47.0748 48.8175 v 10.5204 47.1850 48.2315 v 12.6328 47.1221 46.3461 v 13.5229 46.9025 43.6665 v 12.9523 46.5851 40.9107 v 11.0738 46.2554 38.8169 v 8.3908 46.0011 37.9466 v 5.6222 45.8909 38.5324 v 3.5098 45.9538 40.4180 v 2.6196 46.1735 43.0975 v 4.4529 44.5941 45.4688 v 5.8906 44.8466 47.0712 v 7.9441 45.0411 47.7374 v 10.0631 45.1256 47.2889 v 11.6799 45.0773 45.8459 v 12.3611 44.9093 43.7950 v 11.9244 44.6665 41.6858 v 10.4867 44.4140 40.0834 v 8.4332 44.2195 39.4172 v 6.3142 44.1350 39.8657 v 4.6974 44.1833 41.3087 v 4.0161 44.3513 43.3596 v 6.2453 43.3359 44.7315 v 7.0234 43.4727 45.5987 v 8.1347 43.5780 45.9592 v 9.2815 43.6237 45.7165 v 10.1565 43.5974 44.9356 v 10.5252 43.5066 43.8256 v 10.2888 43.3752 42.6841 v 9.5107 43.2386 41.8169 v 8.3994 43.1332 41.4564 v 7.2526 43.0876 41.6991 v 6.3776 43.1137 42.4800 v 6.0089 43.2046 43.5900 v 7.5711 54.6684 42.5497 v 8.2946 42.9079 43.7536 v 4.5670 47.7292 48.5401 v 2.4079 47.3500 46.1338 v 1.7111 43.9280 46.9423 v 4.2243 44.3598 49.6501 v 7.8065 44.6992 50.8122 v 7.6507 48.0212 49.5407 v 11.5030 44.8465 50.0299 v 10.8329 48.1481 48.8671 v 14.3182 44.7710 47.6002 v 13.2608 48.0757 46.7001 v 15.5066 44.4779 44.0225 v 14.2839 47.8233 43.6203 v 14.7448 44.0543 40.3431 v 13.6280 47.4587 40.4528 v 11.5153 47.0018 37.2587 v 12.2831 43.5361 36.7600 v 8.7009 43.1967 35.5978 v 8.4315 46.7095 36.2584 v 5.0044 43.0494 36.3802 v 5.2494 46.5828 36.9317 v 2.1377 43.2114 39.6853 v 2.7752 46.7331 39.8865 v 0.9493 43.5045 43.2629 v 1.7521 46.9854 42.9664 v 6.1826 46.3281 46.3299 v 8.0953 46.1481 43.4219 v 4.9860 46.1179 44.9962 v 7.8917 46.4900 46.8844 v 9.6554 46.5603 46.5111 v 11.0010 46.5201 45.3101 v 11.5681 46.3803 43.6031 v 11.2046 46.1782 41.8476 v 10.0079 45.9680 40.5139 v 8.2988 45.8061 39.9594 v 6.5351 45.7358 40.3327 v 5.1895 45.7760 41.5338 v 4.6225 45.9159 43.2407 v 8.6260 7.3841 48.3266 v 10.4790 7.4020 47.3884 v 9.3392 7.5094 49.1214 v 10.3577 7.6058 49.4519 v 11.4088 7.6478 49.2294 v 12.2107 7.6238 48.5137 v 12.5487 7.5404 47.4964 v 12.3320 7.4200 46.4502 v 11.6189 7.2947 45.6553 v 10.6003 7.1983 45.3249 v 9.5493 7.1564 45.5474 v 8.7473 7.1803 46.2631 v 8.4094 7.2636 47.2804 v 7.9127 42.8690 51.1221 v 11.5372 43.0134 50.3550 v 4.4003 42.5362 49.9826 v 1.9514 42.0871 47.0667 v 1.2043 41.6718 43.4589 v 2.3697 41.3844 39.9509 v 5.1814 41.2241 36.6949 v 8.8059 41.3685 35.9277 v 12.3183 41.7014 37.0673 v 14.7312 42.2109 40.5960 v 15.4782 42.6262 44.2037 v 14.3129 42.9136 47.7117 v 12.5483 7.0160 51.4679 v 12.8296 8.7884 52.0573 v 10.1200 8.6804 52.6308 v 10.2729 6.9254 51.9495 v 7.4942 8.4317 51.7789 v 8.0678 6.7164 51.2341 v 5.6558 8.1088 49.7299 v 6.5240 6.4452 49.5135 v 6.0550 6.1846 47.2485 v 5.0973 7.7985 47.0329 v 6.7866 6.0042 45.0463 v 5.9685 7.5836 44.4104 v 8.5227 5.9524 43.4968 v 8.0358 7.5219 42.5653 v 10.7454 7.6299 41.9918 v 10.7981 6.0430 43.0152 v 13.3712 7.8787 42.8437 v 13.0031 6.2520 43.7306 v 15.2096 8.2015 44.8926 v 14.5470 6.5231 45.4512 v 15.0160 6.7838 47.7161 v 15.7680 8.5120 47.5897 v 14.2844 6.9641 49.9184 v 14.8969 8.7267 50.2121 v 5.1828 47.6712 47.6039 v 3.4090 47.3597 45.6269 v 7.7163 47.9112 48.4258 v 10.3306 48.0154 47.8725 v 12.3253 47.9559 46.0922 v 13.1658 47.7486 43.5619 v 12.6270 47.4490 40.9597 v 10.8532 47.1375 38.9827 v 8.3660 46.8197 37.3729 v 5.7054 46.7933 38.7141 v 3.7107 46.8528 40.4944 v 2.8701 47.0602 43.0247 v 7.6717 6.4564 48.9324 v 8.7738 6.6499 50.1608 v 10.3480 6.7992 50.6715 v 11.9725 6.8638 50.3277 v 13.2119 6.8268 49.2215 v 13.7341 6.6981 47.6492 v 13.3993 6.5120 46.0323 v 12.2972 6.3184 44.8039 v 10.7230 6.1692 44.2933 v 9.0985 6.1045 44.6370 v 7.8591 6.1415 45.7432 v 7.3369 6.2704 47.3154 v 12.7799 10.6467 51.9948 v 9.9984 10.5358 52.5835 v 7.3029 10.2805 51.7090 v 5.4157 9.9489 49.6057 v 4.8424 9.6304 46.8370 v 5.7367 9.4098 44.1449 v 7.8589 9.3464 42.2507 v 10.6404 9.4573 41.6620 v 13.3359 9.7127 42.5365 v 15.2232 10.0441 44.6399 v 15.7964 10.3628 47.4086 v 14.9022 10.5832 50.1007 v 11.9642 37.6573 50.8032 v 8.2467 37.5091 51.5900 v 4.6441 37.1678 50.4213 v 2.1166 36.7335 47.6976 v 1.3504 36.3075 43.9972 v 2.5457 36.0127 40.3992 v 5.7029 31.3882 37.5366 v 9.4204 31.5363 36.7498 v 13.0230 31.8776 37.9186 v 15.2245 36.8605 41.0608 v 15.9907 37.2864 44.7612 v 14.7955 37.5812 48.3592 v 14.1753 19.5689 49.0663 v 15.0359 19.3566 46.4757 v 12.0507 19.7681 52.2897 v 9.3740 19.6613 52.8563 v 6.7801 19.4157 52.0147 v 5.0463 18.9585 48.5900 v 4.4946 18.6518 45.9256 v 5.3552 18.4394 43.3350 v 7.4952 18.2142 39.8490 v 10.1719 18.3210 39.2825 v 12.7658 18.5666 40.1240 v 14.4842 19.0498 43.8114 vn -0.6868 0.6802 0.2561 vn -0.4388 0.7238 0.5326 vn -0.2806 0.9269 0.2491 vn -0.4212 0.9022 0.0923 vn -0.0844 0.7573 0.6476 vn -0.0797 0.9460 0.3143 vn 0.2812 0.7719 0.5702 vn 0.1277 0.9542 0.2704 vn 0.5602 0.7636 0.3212 vn 0.2859 0.9495 0.1292 vn 0.6777 0.7346 -0.0327 vn 0.3525 0.9331 -0.0714 vn 0.6024 0.6927 -0.3967 vn 0.3098 0.9093 -0.2778 vn 0.3543 0.6491 -0.6731 vn 0.1691 0.8846 -0.4346 vn -0.0000 0.6155 -0.7881 vn -0.0318 0.8656 -0.4997 vn -0.3657 0.6010 -0.7107 vn -0.2391 0.8573 -0.4559 vn -0.6447 0.6093 -0.4617 vn -0.3973 0.8620 -0.3147 vn -0.7622 0.6383 -0.1078 vn -0.4640 0.8785 -0.1140 vn -0.8509 0.3611 0.3815 vn -0.5322 0.4171 0.7368 vn -0.0769 0.4602 0.8845 vn 0.3928 0.4789 0.7851 vn 0.7513 0.4682 0.4651 vn 0.9023 0.4310 0.0105 vn 0.8055 0.3772 -0.4571 vn 0.4867 0.3212 -0.8124 vn 0.0315 0.2781 -0.9600 vn -0.4383 0.2593 -0.8606 vn -0.7967 0.2700 -0.5407 vn -0.9477 0.3073 -0.0861 vn -0.8921 -0.0087 0.4517 vn -0.5488 0.0516 0.8344 vn -0.0584 0.0981 0.9935 vn 0.4476 0.1183 0.8864 vn 0.8337 0.1068 0.5418 vn 0.9964 0.0666 0.0520 vn 0.8921 0.0086 -0.4517 vn 0.5488 -0.0516 -0.8344 vn 0.0584 -0.0981 -0.9935 vn -0.4476 -0.1183 -0.8864 vn -0.8337 -0.1067 -0.5418 vn -0.9964 -0.0666 -0.0520 vn -0.8055 -0.3771 0.4571 vn -0.4867 -0.3212 0.8124 vn -0.0315 -0.2780 0.9601 vn 0.4383 -0.2593 0.8606 vn 0.7967 -0.2700 0.5407 vn 0.9477 -0.3073 0.0861 vn 0.8509 -0.3611 -0.3815 vn 0.5322 -0.4171 -0.7368 vn 0.0769 -0.4602 -0.8845 vn -0.3928 -0.4789 -0.7851 vn -0.7513 -0.4682 -0.4651 vn -0.9023 -0.4310 -0.0105 vn -0.6024 -0.6927 0.3966 vn -0.3543 -0.6491 0.6732 vn 0.0000 -0.6155 0.7881 vn 0.3657 -0.6010 0.7107 vn 0.6447 -0.6093 0.4617 vn 0.7622 -0.6383 0.1078 vn 0.6868 -0.6802 -0.2561 vn 0.4388 -0.7238 -0.5326 vn 0.0844 -0.7573 -0.6476 vn -0.2812 -0.7719 -0.5702 vn -0.5602 -0.7636 -0.3212 vn -0.6777 -0.7346 0.0327 vn -0.3098 -0.9093 0.2778 vn -0.1691 -0.8846 0.4346 vn 0.0318 -0.8656 0.4998 vn 0.2391 -0.8573 0.4559 vn 0.3973 -0.8620 0.3147 vn 0.4640 -0.8785 0.1140 vn 0.4212 -0.9022 -0.0923 vn 0.2806 -0.9269 -0.2491 vn 0.0797 -0.9460 -0.3143 vn -0.1277 -0.9542 -0.2704 vn -0.2859 -0.9495 -0.1292 vn -0.3525 -0.9331 0.0714 vn -0.0611 0.9929 -0.1016 vn 0.0611 -0.9929 0.1016 vn -0.4052 0.7791 0.4783 vn -0.6307 0.7444 0.2192 vn -0.8909 0.0918 0.4448 vn -0.5586 0.1944 0.8063 vn -0.0675 0.2571 0.9640 vn -0.0845 0.8072 0.5841 vn 0.4331 0.2711 0.8596 vn 0.2499 0.8216 0.5124 vn 0.8225 0.2147 0.5267 vn 0.4998 0.8190 0.2817 vn 0.9849 0.1679 0.0413 vn 0.6068 0.7937 -0.0427 vn 0.9085 0.1162 -0.4014 vn 0.5452 0.7732 -0.3239 vn 0.3598 0.7104 -0.6049 vn 0.5905 0.0558 -0.8051 vn 0.0518 0.0040 -0.9986 vn -0.0079 0.6858 -0.7278 vn -0.5074 -0.0152 -0.8616 vn -0.3902 0.6588 -0.6432 vn -0.8684 -0.0003 -0.4958 vn -0.6062 0.6945 -0.3875 vn -0.9974 0.0353 -0.0621 vn -0.6991 0.7064 -0.1109 vn 0.1422 0.9065 -0.3975 vn 0.2668 0.9284 -0.2586 vn -0.0357 0.8897 -0.4552 vn -0.2194 0.8823 -0.4164 vn -0.3595 0.8865 -0.2913 vn -0.4185 0.9011 -0.1136 vn -0.3807 0.9221 0.0692 vn -0.2705 0.9471 0.1729 vn -0.0468 0.9804 0.1914 vn 0.1055 0.9682 0.2269 vn 0.2456 0.9640 0.1019 vn 0.3046 0.9494 -0.0759 vn 0.3983 -0.9138 -0.0792 vn 0.0611 -0.9929 0.1017 vn 0.2667 -0.9369 -0.2258 vn 0.0788 -0.9547 -0.2868 vn -0.1151 -0.9625 -0.2458 vn -0.2631 -0.9581 -0.1137 vn -0.3254 -0.9427 0.0740 vn -0.2854 -0.9205 0.2670 vn -0.1538 -0.8974 0.4136 vn 0.0340 -0.8795 0.4746 vn 0.2279 -0.8718 0.4335 vn 0.3759 -0.8763 0.3015 vn 0.4382 -0.8916 0.1138 vn -0.0599 0.1231 0.9906 vn 0.4421 0.1357 0.8867 vn -0.5564 0.0697 0.8280 vn -0.8920 -0.0281 0.4511 vn -0.9949 -0.0879 -0.0498 vn -0.8665 -0.1243 -0.4835 vn -0.5013 -0.1454 -0.8529 vn 0.0602 -0.1270 -0.9901 vn 0.6041 -0.0735 -0.7935 vn 0.9197 -0.0079 -0.3926 vn 0.9975 0.0454 0.0542 vn 0.8437 0.0846 0.5301 vn 0.3094 -0.7402 0.5969 vn 0.4480 -0.1465 0.8820 vn -0.0403 -0.1660 0.9853 vn 0.0159 -0.7519 0.6590 vn -0.5135 -0.2108 0.8318 vn -0.2685 -0.7789 0.5668 vn -0.8448 -0.2690 0.4625 vn -0.4677 -0.8139 0.3448 vn -0.5282 -0.8475 0.0526 vn -0.9454 -0.3249 -0.0235 vn -0.4338 -0.8708 -0.2314 vn -0.7885 -0.3637 -0.4961 vn -0.2099 -0.8774 -0.4313 vn -0.4159 -0.3748 -0.8286 vn 0.0724 -0.3553 -0.9319 vn 0.0836 -0.8657 -0.4934 vn 0.5456 -0.3105 -0.7784 vn 0.3681 -0.8388 -0.4012 vn 0.8769 -0.2523 -0.4092 vn 0.5672 -0.8038 -0.1792 vn 0.6277 -0.7702 0.1129 vn 0.9775 -0.1964 0.0768 vn 0.5334 -0.7469 0.3970 vn 0.8205 -0.1576 0.5494 vn 0.0882 0.9428 -0.3216 vn 0.1803 0.9589 -0.2190 vn -0.0432 0.9303 -0.3642 vn -0.1788 0.9249 -0.3355 vn -0.2823 0.9280 -0.2431 vn -0.3259 0.9387 -0.1119 vn -0.2980 0.9543 0.0232 vn -0.2486 0.9602 0.1272 vn -0.0642 0.9957 0.0672 vn 0.0822 0.9870 0.1381 vn 0.1646 0.9852 0.0473 vn 0.2082 0.9745 -0.0840 vn 0.3121 -0.9495 -0.0309 vn 0.2146 -0.9667 -0.1397 vn 0.0752 -0.9799 -0.1849 vn -0.0687 -0.9856 -0.1545 vn -0.1784 -0.9823 -0.0565 vn -0.2246 -0.9709 0.0827 vn -0.1950 -0.9545 0.2258 vn -0.0973 -0.9373 0.3346 vn 0.0420 -0.9241 0.3798 vn 0.1857 -0.9184 0.3494 vn 0.2955 -0.9217 0.2514 vn 0.3417 -0.9331 0.1122 vn 0.4720 0.0495 0.8802 vn -0.0517 -0.0061 0.9986 vn -0.5461 -0.0421 0.8366 vn -0.8956 -0.0580 0.4411 vn -0.9944 -0.0930 -0.0493 vn -0.8318 -0.1332 -0.5389 vn -0.4669 -0.1943 -0.8627 vn 0.0653 -0.2155 -0.9743 vn 0.5587 -0.1557 -0.8146 vn 0.9028 -0.0399 -0.4283 vn 0.9977 0.0402 0.0547 vn 0.8351 0.0803 0.5443 vn 0.4463 0.0931 0.8900 vn -0.0570 0.0752 0.9955 vn -0.5555 0.0172 0.8313 vn -0.8853 -0.0470 0.4626 vn -0.9932 -0.1059 -0.0479 vn -0.8700 -0.1264 -0.4765 vn -0.5323 -0.1735 -0.8286 vn 0.0604 -0.1319 -0.9894 vn 0.6398 -0.0988 -0.7622 vn 0.9202 -0.0044 -0.3914 vn 0.9981 0.0272 0.0560 vn 0.8383 0.0745 0.5401 vn 0.8949 0.0380 0.4446 vn 0.9982 0.0206 0.0566 vn 0.5429 0.0317 0.8392 vn -0.0533 0.0176 0.9984 vn -0.6274 -0.0184 0.7785 vn -0.9375 -0.0559 0.3435 vn -0.9925 -0.1125 -0.0472 vn -0.8935 -0.1623 -0.4186 vn -0.5476 -0.2318 -0.8040 vn 0.0655 -0.2193 -0.9735 vn 0.6462 -0.1330 -0.7515 vn 0.9492 -0.0165 -0.3144 vt 0.6176 0.4356 0.0000 vt 0.6392 0.4398 0.0000 vt 0.6603 0.4284 0.0000 vt 0.6487 0.4261 0.0000 vt 0.6746 0.4414 0.0000 vt 0.6795 0.4292 0.0000 vt 0.7144 0.4398 0.0000 vt 0.7011 0.4284 0.0000 vt 0.7479 0.4356 0.0000 vt 0.7192 0.4261 0.0000 vt 0.7662 0.4298 0.0000 vt 0.7291 0.4230 0.0000 vt 0.7643 0.4240 0.0000 vt 0.7281 0.4199 0.0000 vt 0.7428 0.4198 0.0000 vt 0.7164 0.4176 0.0000 vt 0.7074 0.4182 0.0000 vt 0.6973 0.4167 0.0000 vt 0.6676 0.4198 0.0000 vt 0.6757 0.4176 0.0000 vt 0.6340 0.4240 0.0000 vt 0.6576 0.4198 0.0000 vt 0.6158 0.4298 0.0000 vt 0.6477 0.4230 0.0000 vt 0.5990 0.4475 0.0000 vt 0.6271 0.4531 0.0000 vt 0.6734 0.4551 0.0000 vt 0.7254 0.4531 0.0000 vt 0.7692 0.4476 0.0000 vt 0.7931 0.4400 0.0000 vt 0.7907 0.4325 0.0000 vt 0.7625 0.4269 0.0000 vt 0.7163 0.4249 0.0000 vt 0.6643 0.4269 0.0000 vt 0.6204 0.4324 0.0000 vt 0.5966 0.4400 0.0000 vt 0.5957 0.4602 0.0000 vt 0.6261 0.4662 0.0000 vt 0.6762 0.4684 0.0000 vt 0.7325 0.4662 0.0000 vt 0.7799 0.4603 0.0000 vt 0.8058 0.4521 0.0000 vt 0.8031 0.4439 0.0000 vt 0.7727 0.4379 0.0000 vt 0.7226 0.4357 0.0000 vt 0.6663 0.4378 0.0000 vt 0.6189 0.4438 0.0000 vt 0.5930 0.4520 0.0000 vt 0.6081 0.4716 0.0000 vt 0.6362 0.4771 0.0000 vt 0.6825 0.4792 0.0000 vt 0.7345 0.4772 0.0000 vt 0.7783 0.4717 0.0000 vt 0.8022 0.4641 0.0000 vt 0.7998 0.4566 0.0000 vt 0.7716 0.4510 0.0000 vt 0.7254 0.4490 0.0000 vt 0.6734 0.4510 0.0000 vt 0.6296 0.4565 0.0000 vt 0.6057 0.4640 0.0000 vt 0.6345 0.4800 0.0000 vt 0.6560 0.4843 0.0000 vt 0.6914 0.4858 0.0000 vt 0.7312 0.4843 0.0000 vt 0.7647 0.4801 0.0000 vt 0.7830 0.4743 0.0000 vt 0.7811 0.4685 0.0000 vt 0.7596 0.4643 0.0000 vt 0.7242 0.4627 0.0000 vt 0.6844 0.4642 0.0000 vt 0.6509 0.4685 0.0000 vt 0.6326 0.4742 0.0000 vt 0.6707 0.4842 0.0000 vt 0.6823 0.4865 0.0000 vt 0.7015 0.4874 0.0000 vt 0.7230 0.4865 0.0000 vt 0.7412 0.4842 0.0000 vt 0.7511 0.4811 0.0000 vt 0.7501 0.4780 0.0000 vt 0.7384 0.4757 0.0000 vt 0.7193 0.4748 0.0000 vt 0.6977 0.4757 0.0000 vt 0.6796 0.4779 0.0000 vt 0.6697 0.4811 0.0000 vt 0.6875 0.4206 0.0000 vt 0.7113 0.4835 0.0000 vt 0.6244 0.4745 0.0000 vt 0.5921 0.4681 0.0000 vt 0.5812 0.4877 0.0000 vt 0.6191 0.4949 0.0000 vt 0.6808 0.4976 0.0000 vt 0.6776 0.4768 0.0000 vt 0.7503 0.4950 0.0000 vt 0.7373 0.4745 0.0000 vt 0.8084 0.4878 0.0000 vt 0.7877 0.4682 0.0000 vt 0.8403 0.4778 0.0000 vt 0.8151 0.4595 0.0000 vt 0.8370 0.4677 0.0000 vt 0.8123 0.4508 0.0000 vt 0.7831 0.4422 0.0000 vt 0.8026 0.4581 0.0000 vt 0.7408 0.4553 0.0000 vt 0.7299 0.4399 0.0000 vt 0.6714 0.4580 0.0000 vt 0.6702 0.4422 0.0000 vt 0.6098 0.4676 0.0000 vt 0.6167 0.4507 0.0000 vt 0.5779 0.4776 0.0000 vt 0.5892 0.4594 0.0000 vt 0.6616 0.4745 0.0000 vt 0.7047 0.4662 0.0000 vt 0.6437 0.4709 0.0000 vt 0.6911 0.4758 0.0000 vt 0.7242 0.4745 0.0000 vt 0.7521 0.4710 0.0000 vt 0.7673 0.4662 0.0000 vt 0.7658 0.4614 0.0000 vt 0.7479 0.4578 0.0000 vt 0.7184 0.4565 0.0000 vt 0.6853 0.4578 0.0000 vt 0.6573 0.4613 0.0000 vt 0.6421 0.4661 0.0000 vt 0.7468 0.6762 0.0000 vt 0.7832 0.6734 0.0000 vt 0.7575 0.6783 0.0000 vt 0.7750 0.6791 0.0000 vt 0.7948 0.6784 0.0000 vt 0.8114 0.6763 0.0000 vt 0.8205 0.6734 0.0000 vt 0.8196 0.6705 0.0000 vt 0.8089 0.6684 0.0000 vt 0.7913 0.6676 0.0000 vt 0.7716 0.6684 0.0000 vt 0.7549 0.6705 0.0000 vt 0.7459 0.6734 0.0000 vt 0.6841 0.5078 0.0000 vt 0.7522 0.5052 0.0000 vt 0.6235 0.5051 0.0000 vt 0.5874 0.4974 0.0000 vt 0.5842 0.4875 0.0000 vt 0.6154 0.4776 0.0000 vt 0.6759 0.4682 0.0000 vt 0.7440 0.4656 0.0000 vt 0.8046 0.4683 0.0000 vt 0.8383 0.4777 0.0000 vt 0.8415 0.4876 0.0000 vt 0.8102 0.4975 0.0000 vt 0.8102 0.6891 0.0000 vt 0.8116 0.6822 0.0000 vt 0.7607 0.6841 0.0000 vt 0.7674 0.6907 0.0000 vt 0.7154 0.6821 0.0000 vt 0.7294 0.6890 0.0000 vt 0.6879 0.6767 0.0000 vt 0.7063 0.6845 0.0000 vt 0.7043 0.6783 0.0000 vt 0.6855 0.6693 0.0000 vt 0.7239 0.6721 0.0000 vt 0.7088 0.6619 0.0000 vt 0.7599 0.6675 0.0000 vt 0.7517 0.6565 0.0000 vt 0.8026 0.6546 0.0000 vt 0.8027 0.6659 0.0000 vt 0.8479 0.6566 0.0000 vt 0.8407 0.6676 0.0000 vt 0.8754 0.6620 0.0000 vt 0.8638 0.6721 0.0000 vt 0.8658 0.6783 0.0000 vt 0.8778 0.6694 0.0000 vt 0.8462 0.6845 0.0000 vt 0.8545 0.6768 0.0000 vt 0.6383 0.4718 0.0000 vt 0.6117 0.4665 0.0000 vt 0.6819 0.4737 0.0000 vt 0.7311 0.4718 0.0000 vt 0.7724 0.4666 0.0000 vt 0.7950 0.4595 0.0000 vt 0.7927 0.4523 0.0000 vt 0.7661 0.4471 0.0000 vt 0.7255 0.4430 0.0000 vt 0.6733 0.4471 0.0000 vt 0.6319 0.4523 0.0000 vt 0.6094 0.4594 0.0000 vt 0.7288 0.6827 0.0000 vt 0.7453 0.6860 0.0000 vt 0.7725 0.6872 0.0000 vt 0.8030 0.6860 0.0000 vt 0.8287 0.6827 0.0000 vt 0.8427 0.6783 0.0000 vt 0.8413 0.6739 0.0000 vt 0.8248 0.6706 0.0000 vt 0.7976 0.6694 0.0000 vt 0.7671 0.6706 0.0000 vt 0.7414 0.6738 0.0000 vt 0.7274 0.6783 0.0000 vt 0.8086 0.6727 0.0000 vt 0.7564 0.6747 0.0000 vt 0.7099 0.6726 0.0000 vt 0.6817 0.6671 0.0000 vt 0.6792 0.6595 0.0000 vt 0.7032 0.6519 0.0000 vt 0.7472 0.6463 0.0000 vt 0.7995 0.6443 0.0000 vt 0.8459 0.6464 0.0000 vt 0.8742 0.6520 0.0000 vt 0.8767 0.6596 0.0000 vt 0.8527 0.6671 0.0000 vt 0.7651 0.5335 0.0000 vt 0.6952 0.5362 0.0000 vt 0.6331 0.5335 0.0000 vt 0.5950 0.5263 0.0000 vt 0.5917 0.5161 0.0000 vt 0.6238 0.5060 0.0000 vt 0.6948 0.5202 0.0000 vt 0.7646 0.5176 0.0000 vt 0.8267 0.5203 0.0000 vt 0.8523 0.5061 0.0000 vt 0.8556 0.5162 0.0000 vt 0.8236 0.5264 0.0000 vt 0.8316 0.6187 0.0000 vt 0.8547 0.6114 0.0000 vt 0.7837 0.6279 0.0000 vt 0.7334 0.6298 0.0000 vt 0.6887 0.6279 0.0000 vt 0.6670 0.6186 0.0000 vt 0.6647 0.6113 0.0000 vt 0.6878 0.6040 0.0000 vt 0.7367 0.5940 0.0000 vt 0.7870 0.5921 0.0000 vt 0.8317 0.5941 0.0000 vt 0.8523 0.6041 0.0000 g Object010 f 99/99/99 100/100/100 101/101/101 f 101/101/101 102/102/102 99/99/99 f 103/103/103 104/104/104 101/101/101 f 101/101/101 100/100/100 103/103/103 f 105/105/105 106/106/106 104/104/104 f 104/104/104 103/103/103 105/105/105 f 107/107/107 108/108/108 106/106/106 f 106/106/106 105/105/105 107/107/107 f 108/108/108 107/107/107 109/109/109 f 109/109/109 110/110/110 108/108/108 f 110/110/110 109/109/109 111/111/111 f 111/111/111 112/112/112 110/110/110 f 111/111/111 113/113/113 114/114/114 f 114/114/114 112/112/112 111/111/111 f 115/115/115 116/116/116 114/114/114 f 114/114/114 113/113/113 115/115/115 f 117/117/117 118/118/118 116/116/116 f 116/116/116 115/115/115 117/117/117 f 119/119/119 120/120/120 118/118/118 f 118/118/118 117/117/117 119/119/119 f 120/120/120 119/119/119 121/121/121 f 121/121/121 122/122/122 120/120/120 f 122/122/122 121/121/121 99/99/99 f 99/99/99 102/102/102 122/122/122 f 123/123/123 124/124/124 100/100/100 f 100/100/100 99/99/99 123/123/123 f 124/124/124 125/125/125 103/103/103 f 103/103/103 100/100/100 124/124/124 f 125/125/125 126/126/126 105/105/105 f 105/105/105 103/103/103 125/125/125 f 126/126/126 127/127/127 107/107/107 f 107/107/107 105/105/105 126/126/126 f 127/127/127 128/128/128 109/109/109 f 109/109/109 107/107/107 127/127/127 f 128/128/128 129/129/129 111/111/111 f 111/111/111 109/109/109 128/128/128 f 129/129/129 130/130/130 113/113/113 f 113/113/113 111/111/111 129/129/129 f 130/130/130 131/131/131 115/115/115 f 115/115/115 113/113/113 130/130/130 f 131/131/131 132/132/132 117/117/117 f 117/117/117 115/115/115 131/131/131 f 132/132/132 133/133/133 119/119/119 f 119/119/119 117/117/117 132/132/132 f 133/133/133 134/134/134 121/121/121 f 121/121/121 119/119/119 133/133/133 f 134/134/134 123/123/123 99/99/99 f 99/99/99 121/121/121 134/134/134 f 135/135/135 136/136/136 124/124/124 f 124/124/124 123/123/123 135/135/135 f 136/136/136 137/137/137 125/125/125 f 125/125/125 124/124/124 136/136/136 f 137/137/137 138/138/138 126/126/126 f 126/126/126 125/125/125 137/137/137 f 138/138/138 139/139/139 127/127/127 f 127/127/127 126/126/126 138/138/138 f 139/139/139 140/140/140 128/128/128 f 128/128/128 127/127/127 139/139/139 f 140/140/140 141/141/141 129/129/129 f 129/129/129 128/128/128 140/140/140 f 141/141/141 142/142/142 130/130/130 f 130/130/130 129/129/129 141/141/141 f 142/142/142 143/143/143 131/131/131 f 131/131/131 130/130/130 142/142/142 f 143/143/143 144/144/144 132/132/132 f 132/132/132 131/131/131 143/143/143 f 144/144/144 145/145/145 133/133/133 f 133/133/133 132/132/132 144/144/144 f 145/145/145 146/146/146 134/134/134 f 134/134/134 133/133/133 145/145/145 f 146/146/146 135/135/135 123/123/123 f 123/123/123 134/134/134 146/146/146 f 147/147/147 148/148/148 136/136/136 f 136/136/136 135/135/135 147/147/147 f 148/148/148 149/149/149 137/137/137 f 137/137/137 136/136/136 148/148/148 f 149/149/149 150/150/150 138/138/138 f 138/138/138 137/137/137 149/149/149 f 150/150/150 151/151/151 139/139/139 f 139/139/139 138/138/138 150/150/150 f 151/151/151 152/152/152 140/140/140 f 140/140/140 139/139/139 151/151/151 f 152/152/152 153/153/153 141/141/141 f 141/141/141 140/140/140 152/152/152 f 153/153/153 154/154/154 142/142/142 f 142/142/142 141/141/141 153/153/153 f 154/154/154 155/155/155 143/143/143 f 143/143/143 142/142/142 154/154/154 f 155/155/155 156/156/156 144/144/144 f 144/144/144 143/143/143 155/155/155 f 156/156/156 157/157/157 145/145/145 f 145/145/145 144/144/144 156/156/156 f 157/157/157 158/158/158 146/146/146 f 146/146/146 145/145/145 157/157/157 f 158/158/158 147/147/147 135/135/135 f 135/135/135 146/146/146 158/158/158 f 159/159/159 160/160/160 148/148/148 f 148/148/148 147/147/147 159/159/159 f 160/160/160 161/161/161 149/149/149 f 149/149/149 148/148/148 160/160/160 f 161/161/161 162/162/162 150/150/150 f 150/150/150 149/149/149 161/161/161 f 162/162/162 163/163/163 151/151/151 f 151/151/151 150/150/150 162/162/162 f 163/163/163 164/164/164 152/152/152 f 152/152/152 151/151/151 163/163/163 f 164/164/164 165/165/165 153/153/153 f 153/153/153 152/152/152 164/164/164 f 165/165/165 166/166/166 154/154/154 f 154/154/154 153/153/153 165/165/165 f 166/166/166 167/167/167 155/155/155 f 155/155/155 154/154/154 166/166/166 f 167/167/167 168/168/168 156/156/156 f 156/156/156 155/155/155 167/167/167 f 168/168/168 169/169/169 157/157/157 f 157/157/157 156/156/156 168/168/168 f 169/169/169 170/170/170 158/158/158 f 158/158/158 157/157/157 169/169/169 f 170/170/170 159/159/159 147/147/147 f 147/147/147 158/158/158 170/170/170 f 171/171/171 172/172/172 160/160/160 f 160/160/160 159/159/159 171/171/171 f 172/172/172 173/173/173 161/161/161 f 161/161/161 160/160/160 172/172/172 f 173/173/173 174/174/174 162/162/162 f 162/162/162 161/161/161 173/173/173 f 174/174/174 175/175/175 163/163/163 f 163/163/163 162/162/162 174/174/174 f 175/175/175 176/176/176 164/164/164 f 164/164/164 163/163/163 175/175/175 f 176/176/176 177/177/177 165/165/165 f 165/165/165 164/164/164 176/176/176 f 177/177/177 178/178/178 166/166/166 f 166/166/166 165/165/165 177/177/177 f 178/178/178 179/179/179 167/167/167 f 167/167/167 166/166/166 178/178/178 f 179/179/179 180/180/180 168/168/168 f 168/168/168 167/167/167 179/179/179 f 180/180/180 181/181/181 169/169/169 f 169/169/169 168/168/168 180/180/180 f 181/181/181 182/182/182 170/170/170 f 170/170/170 169/169/169 181/181/181 f 182/182/182 171/171/171 159/159/159 f 159/159/159 170/170/170 182/182/182 f 101/101/101 183/183/183 102/102/102 f 104/104/104 183/183/183 101/101/101 f 106/106/106 183/183/183 104/104/104 f 108/108/108 183/183/183 106/106/106 f 110/110/110 183/183/183 108/108/108 f 112/112/112 183/183/183 110/110/110 f 114/114/114 183/183/183 112/112/112 f 116/116/116 183/183/183 114/114/114 f 118/118/118 183/183/183 116/116/116 f 120/120/120 183/183/183 118/118/118 f 122/122/122 183/183/183 120/120/120 f 102/102/102 183/183/183 122/122/122 f 171/171/171 184/184/184 172/172/172 f 172/172/172 184/184/184 173/173/173 f 173/173/173 184/184/184 174/174/174 f 174/174/174 184/184/184 175/175/175 f 175/175/175 184/184/184 176/176/176 f 176/176/176 184/184/184 177/177/177 f 177/177/177 184/184/184 178/178/178 f 178/178/178 184/184/184 179/179/179 f 179/179/179 184/184/184 180/180/180 f 180/180/180 184/184/184 181/181/181 f 181/181/181 184/184/184 182/182/182 f 182/182/182 184/184/184 171/171/171 f 185/185/185 186/186/186 187/187/187 f 187/187/187 188/188/188 185/185/185 f 185/185/185 188/188/188 189/189/189 f 189/189/189 190/190/190 185/185/185 f 191/191/191 192/192/192 190/190/190 f 190/190/190 189/189/189 191/191/191 f 191/191/191 193/193/193 194/194/194 f 194/194/194 192/192/192 191/191/191 f 193/193/193 195/195/195 196/196/196 f 196/196/196 194/194/194 193/193/193 f 195/195/195 197/197/197 198/198/198 f 198/198/198 196/196/196 195/195/195 f 199/199/199 198/198/198 197/197/197 f 197/197/197 200/200/200 199/199/199 f 199/199/199 200/200/200 201/201/201 f 201/201/201 202/202/202 199/199/199 f 203/203/203 204/204/204 202/202/202 f 202/202/202 201/201/201 203/203/203 f 203/203/203 205/205/205 206/206/206 f 206/206/206 204/204/204 203/203/203 f 205/205/205 207/207/207 208/208/208 f 208/208/208 206/206/206 205/205/205 f 207/207/207 187/187/187 186/186/186 f 186/186/186 208/208/208 207/207/207 f 209/209/209 210/210/183 211/211/210 f 212/212/211 210/210/183 209/209/209 f 213/213/212 210/210/183 212/212/211 f 214/214/213 210/210/183 213/213/212 f 215/215/214 210/210/183 214/214/213 f 216/216/215 210/210/183 215/215/214 f 217/217/216 210/210/183 216/216/215 f 218/218/217 210/210/183 217/217/216 f 219/219/218 210/210/183 218/218/217 f 220/220/219 210/210/183 219/219/218 f 221/221/220 210/210/183 220/220/219 f 211/211/210 210/210/183 221/221/220 f 222/222/221 223/223/222 224/224/223 f 224/224/223 223/223/222 225/225/224 f 225/225/224 223/223/222 226/226/225 f 226/226/225 223/223/222 227/227/226 f 227/227/226 223/223/222 228/228/227 f 228/228/227 223/223/222 229/229/228 f 229/229/228 223/223/222 230/230/229 f 230/230/229 223/223/222 231/231/230 f 231/231/230 223/223/222 232/232/231 f 232/232/231 223/223/222 233/233/232 f 233/233/232 223/223/222 234/234/233 f 234/234/233 223/223/222 222/222/221 f 235/235/234 236/236/235 191/191/191 f 191/191/191 189/189/189 235/235/234 f 237/237/236 235/235/234 189/189/189 f 189/189/189 188/188/188 237/237/236 f 238/238/237 237/237/236 188/188/188 f 188/188/188 187/187/187 238/238/237 f 239/239/238 238/238/237 187/187/187 f 187/187/187 207/207/207 239/239/238 f 240/240/239 239/239/238 207/207/207 f 207/207/207 205/205/205 240/240/239 f 241/241/240 240/240/239 205/205/205 f 205/205/205 203/203/203 241/241/240 f 242/242/241 241/241/240 203/203/203 f 203/203/203 201/201/201 242/242/241 f 243/243/242 242/242/241 201/201/201 f 201/201/201 200/200/200 243/243/242 f 244/244/243 243/243/242 200/200/200 f 200/200/200 197/197/197 244/244/243 f 245/245/244 244/244/243 197/197/197 f 197/197/197 195/195/195 245/245/244 f 246/246/245 245/245/244 195/195/195 f 195/195/195 193/193/193 246/246/245 f 236/236/235 246/246/245 193/193/193 f 193/193/193 191/191/191 236/236/235 f 247/247/246 248/248/247 249/249/248 f 249/249/248 250/250/249 247/247/246 f 250/250/249 249/249/248 251/251/250 f 251/251/250 252/252/251 250/250/249 f 252/252/251 251/251/250 253/253/252 f 253/253/252 254/254/253 252/252/251 f 255/255/254 254/254/253 253/253/252 f 253/253/252 256/256/255 255/255/254 f 257/257/256 255/255/254 256/256/255 f 256/256/255 258/258/257 257/257/256 f 259/259/258 257/257/256 258/258/257 f 258/258/257 260/260/259 259/259/258 f 259/259/258 260/260/259 261/261/260 f 261/261/260 262/262/261 259/259/258 f 262/262/261 261/261/260 263/263/262 f 263/263/262 264/264/263 262/262/261 f 264/264/263 263/263/262 265/265/264 f 265/265/264 266/266/265 264/264/263 f 267/267/266 266/266/265 265/265/264 f 265/265/264 268/268/267 267/267/266 f 269/269/268 267/267/266 268/268/267 f 268/268/267 270/270/269 269/269/268 f 248/248/247 247/247/246 269/269/268 f 269/269/268 270/270/269 248/248/247 f 271/271/270 272/272/271 186/186/186 f 186/186/186 185/185/185 271/271/270 f 273/273/272 271/271/270 185/185/185 f 185/185/185 190/190/190 273/273/272 f 192/192/192 274/274/273 273/273/272 f 273/273/272 190/190/190 192/192/192 f 194/194/194 275/275/274 274/274/273 f 274/274/273 192/192/192 194/194/194 f 196/196/196 276/276/275 275/275/274 f 275/275/274 194/194/194 196/196/196 f 198/198/198 277/277/276 276/276/275 f 276/276/275 196/196/196 198/198/198 f 278/278/277 277/277/276 198/198/198 f 198/198/198 199/199/199 278/278/277 f 279/279/278 278/278/277 199/199/199 f 199/199/199 202/202/202 279/279/278 f 204/204/204 280/280/279 279/279/278 f 279/279/278 202/202/202 204/204/204 f 206/206/206 281/281/280 280/280/279 f 280/280/279 204/204/204 206/206/206 f 282/282/281 281/281/280 206/206/206 f 206/206/206 208/208/208 282/282/281 f 272/272/271 282/282/281 208/208/208 f 208/208/208 186/186/186 272/272/271 f 209/209/209 211/211/210 272/272/271 f 272/272/271 271/271/270 209/209/209 f 273/273/272 212/212/211 209/209/209 f 209/209/209 271/271/270 273/273/272 f 274/274/273 213/213/212 212/212/211 f 212/212/211 273/273/272 274/274/273 f 275/275/274 214/214/213 213/213/212 f 213/213/212 274/274/273 275/275/274 f 276/276/275 215/215/214 214/214/213 f 214/214/213 275/275/274 276/276/275 f 277/277/276 216/216/215 215/215/214 f 215/215/214 276/276/275 277/277/276 f 278/278/277 217/217/216 216/216/215 f 216/216/215 277/277/276 278/278/277 f 279/279/278 218/218/217 217/217/216 f 217/217/216 278/278/277 279/279/278 f 280/280/279 219/219/218 218/218/217 f 218/218/217 279/279/278 280/280/279 f 281/281/280 220/220/219 219/219/218 f 219/219/218 280/280/279 281/281/280 f 282/282/281 221/221/220 220/220/219 f 220/220/219 281/281/280 282/282/281 f 211/211/210 221/221/220 282/282/281 f 282/282/281 272/272/271 211/211/210 f 283/283/282 284/284/283 252/252/251 f 252/252/251 254/254/253 283/283/282 f 252/252/251 284/284/283 285/285/284 f 285/285/284 250/250/249 252/252/251 f 250/250/249 285/285/284 286/286/285 f 286/286/285 247/247/246 250/250/249 f 247/247/246 286/286/285 287/287/286 f 287/287/286 269/269/268 247/247/246 f 287/287/286 288/288/287 267/267/266 f 267/267/266 269/269/268 287/287/286 f 288/288/287 289/289/288 266/266/265 f 266/266/265 267/267/266 288/288/287 f 289/289/288 290/290/289 264/264/263 f 264/264/263 266/266/265 289/289/288 f 290/290/289 291/291/290 262/262/261 f 262/262/261 264/264/263 290/290/289 f 262/262/261 291/291/290 292/292/291 f 292/292/291 259/259/258 262/262/261 f 259/259/258 292/292/291 293/293/292 f 293/293/292 257/257/256 259/259/258 f 293/293/292 294/294/293 255/255/254 f 255/255/254 257/257/256 293/293/292 f 255/255/254 294/294/293 283/283/282 f 283/283/282 254/254/253 255/255/254 f 284/284/283 283/283/282 222/222/221 f 222/222/221 224/224/223 284/284/283 f 224/224/223 225/225/224 285/285/284 f 285/285/284 284/284/283 224/224/223 f 225/225/224 226/226/225 286/286/285 f 286/286/285 285/285/284 225/225/224 f 226/226/225 227/227/226 287/287/286 f 287/287/286 286/286/285 226/226/225 f 227/227/226 228/228/227 288/288/287 f 288/288/287 287/287/286 227/227/226 f 228/228/227 229/229/228 289/289/288 f 289/289/288 288/288/287 228/228/227 f 229/229/228 230/230/229 290/290/289 f 290/290/289 289/289/288 229/229/228 f 230/230/229 231/231/230 291/291/290 f 291/291/290 290/290/289 230/230/229 f 231/231/230 232/232/231 292/292/291 f 292/292/291 291/291/290 231/231/230 f 232/232/231 233/233/232 293/293/292 f 293/293/292 292/292/291 232/232/231 f 233/233/232 234/234/233 294/294/293 f 294/294/293 293/293/292 233/233/232 f 222/222/221 283/283/282 294/294/293 f 294/294/293 234/234/233 222/222/221 f 249/249/248 248/248/247 295/295/294 f 295/295/294 296/296/295 249/249/248 f 251/251/250 249/249/248 296/296/295 f 296/296/295 297/297/296 251/251/250 f 298/298/297 253/253/252 251/251/250 f 251/251/250 297/297/296 298/298/297 f 299/299/298 256/256/255 253/253/252 f 253/253/252 298/298/297 299/299/298 f 300/300/299 258/258/257 256/256/255 f 256/256/255 299/299/298 300/300/299 f 260/260/259 258/258/257 300/300/299 f 300/300/299 301/301/300 260/260/259 f 261/261/260 260/260/259 301/301/300 f 301/301/300 302/302/301 261/261/260 f 263/263/262 261/261/260 302/302/301 f 302/302/301 303/303/302 263/263/262 f 304/304/303 265/265/264 263/263/262 f 263/263/262 303/303/302 304/304/303 f 305/305/304 268/268/267 265/265/264 f 265/265/264 304/304/303 305/305/304 f 270/270/269 268/268/267 305/305/304 f 305/305/304 306/306/305 270/270/269 f 248/248/247 270/270/269 306/306/305 f 306/306/305 295/295/294 248/248/247 f 307/307/306 236/236/235 235/235/234 f 235/235/234 308/308/307 307/307/306 f 308/308/307 235/235/234 237/237/236 f 237/237/236 309/309/308 308/308/307 f 309/309/308 237/237/236 238/238/237 f 238/238/237 310/310/309 309/309/308 f 310/310/309 238/238/237 239/239/238 f 239/239/238 311/311/310 310/310/309 f 311/311/310 239/239/238 240/240/239 f 240/240/239 312/312/311 311/311/310 f 312/312/311 240/240/239 241/241/240 f 241/241/240 313/313/312 312/312/311 f 313/313/312 241/241/240 242/242/241 f 242/242/241 314/314/313 313/313/312 f 314/314/313 242/242/241 243/243/242 f 243/243/242 315/315/314 314/314/313 f 315/315/314 243/243/242 244/244/243 f 244/244/243 316/316/315 315/315/314 f 316/316/315 244/244/243 245/245/244 f 245/245/244 317/317/316 316/316/315 f 317/317/316 245/245/244 246/246/245 f 246/246/245 318/318/317 317/317/316 f 318/318/317 246/246/245 236/236/235 f 236/236/235 307/307/306 318/318/317 f 319/319/318 320/320/319 317/317/316 f 317/317/316 318/318/317 319/319/318 f 321/321/320 319/319/318 318/318/317 f 318/318/317 307/307/306 321/321/320 f 322/322/321 321/321/320 307/307/306 f 307/307/306 308/308/307 322/322/321 f 323/323/322 322/322/321 308/308/307 f 308/308/307 309/309/308 323/323/322 f 324/324/323 323/323/322 309/309/308 f 309/309/308 310/310/309 324/324/323 f 325/325/324 324/324/323 310/310/309 f 310/310/309 311/311/310 325/325/324 f 326/326/325 325/325/324 311/311/310 f 311/311/310 312/312/311 326/326/325 f 327/327/326 326/326/325 312/312/311 f 312/312/311 313/313/312 327/327/326 f 328/328/327 327/327/326 313/313/312 f 313/313/312 314/314/313 328/328/327 f 329/329/328 328/328/327 314/314/313 f 314/314/313 315/315/314 329/329/328 f 330/330/329 329/329/328 315/315/314 f 315/315/314 316/316/315 330/330/329 f 320/320/319 330/330/329 316/316/315 f 316/316/315 317/317/316 320/320/319 f 306/306/305 305/305/304 320/320/319 f 320/320/319 319/319/318 306/306/305 f 295/295/294 306/306/305 319/319/318 f 319/319/318 321/321/320 295/295/294 f 296/296/295 295/295/294 321/321/320 f 321/321/320 322/322/321 296/296/295 f 297/297/296 296/296/295 322/322/321 f 322/322/321 323/323/322 297/297/296 f 298/298/297 297/297/296 323/323/322 f 323/323/322 324/324/323 298/298/297 f 299/299/298 298/298/297 324/324/323 f 324/324/323 325/325/324 299/299/298 f 300/300/299 299/299/298 325/325/324 f 325/325/324 326/326/325 300/300/299 f 301/301/300 300/300/299 326/326/325 f 326/326/325 327/327/326 301/301/300 f 302/302/301 301/301/300 327/327/326 f 327/327/326 328/328/327 302/302/301 f 303/303/302 302/302/301 328/328/327 f 328/328/327 329/329/328 303/303/302 f 304/304/303 303/303/302 329/329/328 f 329/329/328 330/330/329 304/304/303 f 305/305/304 304/304/303 330/330/329 f 330/330/329 320/320/319 305/305/304 v 7.8254 2.7883 50.7924 v 9.0701 1.6969 50.8909 v 9.6666 3.0435 51.8687 v 8.9930 3.6341 51.8153 v 10.6942 1.3755 50.9879 v 10.5456 2.8695 51.9213 v 12.2624 1.9103 51.0575 v 11.3943 3.1590 51.9588 v 13.3546 3.1580 51.0809 v 11.9854 3.8342 51.9715 v 13.6782 4.7843 51.0519 v 12.1605 4.7144 51.9558 v 13.1463 6.3534 50.9783 v 11.8727 5.5635 51.9161 v 11.9016 7.4448 50.8798 v 11.1990 6.1542 51.8627 v 10.2776 7.7662 50.7828 v 10.3201 6.3281 51.8102 v 8.7093 7.2314 50.7132 v 9.4714 6.0387 51.7725 v 7.6171 5.9837 50.6898 v 8.8803 5.3635 51.7599 v 7.2935 4.3574 50.7188 v 8.7052 4.4833 51.7755 v 7.0891 2.1999 49.2968 v 8.7154 0.7739 49.4254 v 10.8374 0.3540 49.5523 v 12.8864 1.0528 49.6430 v 14.3135 2.6830 49.6738 v 14.7362 4.8078 49.6358 v 14.0413 6.8579 49.5396 v 12.4150 8.2840 49.4110 v 10.2931 8.7038 49.2842 v 8.2440 8.0051 49.1934 v 6.8170 6.3749 49.1627 v 6.3943 4.2500 49.2005 v 6.8964 1.9586 47.5560 v 8.6566 0.4150 47.6955 v 10.9534 -0.0394 47.8326 v 13.1713 0.7169 47.9310 v 14.7159 2.4814 47.9640 v 15.1734 4.7813 47.9232 v 14.4213 7.0004 47.8191 v 12.6610 8.5439 47.6797 v 10.3642 8.9984 47.5426 v 8.1464 8.2420 47.4441 v 6.6018 6.4775 47.4111 v 6.1442 4.1776 47.4521 v 7.2764 2.1010 45.8355 v 8.9027 0.6750 45.9641 v 11.0246 0.2551 46.0910 v 13.0736 0.9539 46.1817 v 14.5007 2.5841 46.2125 v 14.9234 4.7089 46.1746 v 14.2285 6.7590 46.0783 v 12.6022 8.1852 45.9497 v 10.4803 8.6050 45.8229 v 8.4313 7.9063 45.7321 v 7.0042 6.2760 45.7014 v 6.5815 4.1511 45.7393 v 8.1713 2.6056 44.3968 v 9.4160 1.5141 44.4953 v 11.0401 1.1928 44.5923 v 12.6084 1.7276 44.6619 v 13.7006 2.9753 44.6853 v 14.0241 4.6016 44.6564 v 13.4923 6.1706 44.5828 v 12.2476 7.2621 44.4842 v 10.6235 7.5835 44.3872 v 9.0552 7.0486 44.3177 v 7.9630 5.8009 44.2942 v 7.6395 4.1747 44.3232 v 9.4450 3.3954 43.4590 v 10.1186 2.8047 43.5125 v 10.9976 2.6309 43.5650 v 11.8463 2.9202 43.6026 v 12.4374 3.5955 43.6152 v 12.6125 4.4756 43.5996 v 12.3247 5.3248 43.5598 v 11.6510 5.9155 43.5065 v 10.7721 6.0894 43.4539 v 9.9234 5.8000 43.4163 v 9.3323 5.1247 43.4037 v 9.1572 4.2446 43.4193 v 10.4142 4.6087 52.2099 v 10.9034 4.3503 43.1652 v 8.4605 -0.6499 42.8792 v 8.9340 0.6646 45.4292 v 7.3098 2.0888 45.3007 v 6.2986 1.2458 42.7081 v 11.2812 -1.2080 43.0478 v 11.0532 0.2453 45.5558 v 13.0995 0.9431 45.6466 v 14.0051 -0.2791 43.1685 v 15.9021 1.8880 43.2092 v 14.5247 2.5712 45.6772 v 16.4640 4.7126 43.1589 v 14.9469 4.6933 45.6394 v 15.5403 7.4378 43.0311 v 14.2529 6.7407 45.5433 v 13.3784 9.3335 42.8600 v 12.6288 8.1649 45.4147 v 10.5576 9.8917 42.6915 v 10.5096 8.5843 45.2882 v 8.4632 7.8864 45.1973 v 7.8338 8.9628 42.5707 v 5.9368 6.7957 42.5300 v 7.0380 6.2583 45.1668 v 5.3748 3.9711 42.5803 v 6.6159 4.1362 45.2046 v 9.8029 2.3123 44.5864 v 10.8268 4.3908 44.5824 v 8.9027 3.1016 44.5152 v 10.9774 2.0799 44.6566 v 12.1116 2.4666 44.7069 v 12.9015 3.3690 44.7238 v 13.1355 4.5451 44.7029 v 12.7509 5.6799 44.6497 v 11.8507 6.4692 44.5784 v 10.6761 6.7017 44.5082 v 9.5420 6.3149 44.4579 v 8.7521 5.4125 44.4410 v 8.5181 4.2364 44.4619 v 11.2181 2.4242 10.1435 v 12.6868 3.4083 10.1949 v 11.9053 1.8216 10.1980 v 12.8018 1.6442 10.2515 v 13.6676 1.9395 10.2900 v 14.2706 2.6283 10.3028 v 14.4492 3.5261 10.2868 v 14.1556 4.3923 10.2463 v 13.4684 4.9949 10.1918 v 12.5718 5.1723 10.1384 v 11.7061 4.8770 10.0999 v 11.1031 4.1882 10.0870 v 10.9245 3.2904 10.1029 v 11.3505 -1.1403 41.6336 v 14.0213 -0.2295 41.7520 v 8.5847 -0.5930 41.4684 v 6.4649 1.2658 41.3006 v 5.5591 3.9380 41.1753 v 6.0471 7.6743 41.0949 v 7.9072 9.7992 41.1349 v 10.5780 10.7100 41.2534 v 13.3438 10.1627 41.4186 v 15.4636 8.3039 41.5863 v 16.4324 4.6650 41.7426 v 15.8814 1.8954 41.7920 v 12.9484 -1.1209 10.9855 v 12.9783 -0.4331 9.5319 v 14.8526 0.2061 9.6149 v 15.1803 -0.3597 11.0845 v 10.6371 -0.6635 10.8474 v 11.0373 -0.0490 9.4158 v 9.5497 1.2554 9.2980 v 8.8657 0.8898 10.7072 v 8.1088 3.1229 10.6025 v 8.9141 3.1307 9.2102 v 9.3007 5.0743 9.1756 v 8.5692 5.4374 10.5613 v 10.1236 7.2131 10.5947 v 10.6061 6.5655 9.2036 v 12.4804 7.2047 9.2866 v 12.3555 7.9742 10.6937 v 14.6668 7.5168 10.8318 v 14.4214 6.8206 9.4027 v 16.4383 5.9635 10.9720 v 15.9090 5.5162 9.5204 v 16.5446 3.6409 9.6084 v 17.1952 3.7305 11.0766 v 16.1579 1.6973 9.6429 v 16.7347 1.4160 11.1178 v 7.9293 2.5038 45.3223 v 9.2636 1.3338 45.4279 v 11.0047 0.9892 45.5318 v 12.6859 1.5626 45.6065 v 13.8568 2.9002 45.6316 v 14.2036 4.6436 45.6006 v 13.6335 6.3257 45.5216 v 12.2991 7.4957 45.4161 v 10.5581 7.8403 45.3121 v 8.8769 7.2669 45.2375 v 7.7060 5.9293 45.2123 v 7.3591 4.1859 45.2434 v 10.4594 1.8649 9.3298 v 11.5214 0.9337 9.4139 v 12.9071 0.6595 9.4968 v 14.2451 1.1158 9.5560 v 15.1770 2.1804 9.5760 v 15.4531 3.5679 9.5514 v 14.9993 4.9067 9.4886 v 13.9373 5.8379 9.4046 v 12.5516 6.1121 9.3217 v 11.2135 5.6558 9.2624 v 10.2816 4.5913 9.2424 v 10.0056 3.2037 9.2671 v 12.8710 -1.1966 12.5656 v 15.1622 -0.4152 12.6672 v 10.4983 -0.7271 12.4239 v 8.6799 0.8675 12.2798 v 7.9029 3.1599 12.1724 v 8.3755 5.5358 12.1301 v 9.9712 7.3586 12.1643 v 12.2624 8.1400 12.2659 v 14.6351 7.6705 12.4077 v 16.4536 6.0759 12.5516 v 17.2306 3.7836 12.6591 v 16.7579 1.4076 12.7013 v 11.5813 -1.3970 37.5399 v 14.3206 -0.4628 37.6613 v 8.7444 -0.8357 37.3704 v 6.5703 1.0708 37.1983 v 5.6413 3.8116 37.0697 v 6.1005 8.2770 36.9670 v 8.0083 10.4564 37.0079 v 10.7476 11.3906 37.1294 v 13.5845 10.8293 37.2989 v 15.7587 8.9228 37.4710 v 16.7936 4.5573 37.6517 v 16.2284 1.7166 37.7023 v 16.1000 1.7495 21.9333 v 16.5549 4.0359 21.8926 v 14.5645 -0.0047 21.9003 v 12.3596 -0.7566 21.8026 v 10.0763 -0.3048 21.6661 v 8.3264 1.2297 21.5276 v 7.5787 3.4357 21.4242 v 8.0335 5.7221 21.3834 v 9.5691 7.4763 21.4164 v 11.7739 8.2282 21.5142 v 14.0572 7.7763 21.6506 v 15.8072 6.2419 21.7891 vn -0.6373 -0.3823 0.6691 vn -0.3566 -0.6285 0.6913 vn -0.2303 -0.3415 0.9112 vn -0.3895 -0.2019 0.8986 vn 0.0096 -0.7009 0.7131 vn -0.0226 -0.3826 0.9236 vn 0.3634 -0.5803 0.7288 vn 0.1780 -0.3142 0.9325 vn 0.6097 -0.2989 0.7341 vn 0.3176 -0.1547 0.9355 vn 0.6827 0.0679 0.7276 vn 0.3590 0.0533 0.9318 vn 0.5627 0.4217 0.7110 vn 0.2910 0.2540 0.9224 vn 0.2820 0.6679 0.6888 vn 0.1318 0.3936 0.9098 vn -0.0843 0.7404 0.6669 vn -0.0759 0.4346 0.8974 vn -0.4380 0.6198 0.6512 vn -0.2764 0.3663 0.8885 vn -0.6843 0.3384 0.6459 vn -0.4161 0.2067 0.8855 vn -0.7573 -0.0284 0.6524 vn -0.4575 -0.0013 0.8892 vn -0.7910 -0.5059 0.3441 vn -0.4303 -0.8222 0.3727 vn 0.0403 -0.9153 0.4008 vn 0.4947 -0.7603 0.4209 vn 0.8112 -0.3988 0.4277 vn 0.9049 0.0725 0.4193 vn 0.7508 0.5271 0.3980 vn 0.3902 0.8434 0.3695 vn -0.0804 0.9365 0.3413 vn -0.5348 0.7815 0.3212 vn -0.8513 0.4200 0.3144 vn -0.9451 -0.0512 0.3228 vn -0.8304 -0.5564 -0.0290 vn -0.4419 -0.8971 0.0017 vn 0.0650 -0.9974 0.0320 vn 0.5545 -0.8304 0.0537 vn 0.8954 -0.4410 0.0610 vn 0.9964 0.0666 0.0520 vn 0.8304 0.5564 0.0290 vn 0.4419 0.8971 -0.0017 vn -0.0650 0.9974 -0.0320 vn -0.5545 0.8304 -0.0537 vn -0.8954 0.4410 -0.0610 vn -0.9964 -0.0666 -0.0520 vn -0.7508 -0.5271 -0.3980 vn -0.3902 -0.8434 -0.3695 vn 0.0804 -0.9365 -0.3413 vn 0.5348 -0.7815 -0.3212 vn 0.8513 -0.4200 -0.3144 vn 0.9451 0.0512 -0.3228 vn 0.7910 0.5059 -0.3441 vn 0.4303 0.8222 -0.3727 vn -0.0403 0.9153 -0.4008 vn -0.4947 0.7603 -0.4209 vn -0.8112 0.3988 -0.4277 vn -0.9049 -0.0725 -0.4193 vn -0.5627 -0.4217 -0.7110 vn -0.2820 -0.6679 -0.6888 vn 0.0843 -0.7404 -0.6669 vn 0.4380 -0.6197 -0.6512 vn 0.6843 -0.3384 -0.6459 vn 0.7573 0.0284 -0.6524 vn 0.6373 0.3823 -0.6691 vn 0.3566 0.6285 -0.6913 vn -0.0096 0.7009 -0.7132 vn -0.3634 0.5803 -0.7288 vn -0.6097 0.2989 -0.7341 vn -0.6827 -0.0679 -0.7276 vn -0.2910 -0.2539 -0.9224 vn -0.1317 -0.3936 -0.9098 vn 0.0759 -0.4346 -0.8974 vn 0.2764 -0.3663 -0.8885 vn 0.4161 -0.2067 -0.8855 vn 0.4575 0.0013 -0.8892 vn 0.3895 0.2019 -0.8986 vn 0.2303 0.3415 -0.9112 vn 0.0226 0.3826 -0.9236 vn -0.1780 0.3142 -0.9325 vn -0.3176 0.1547 -0.9355 vn -0.3590 -0.0533 -0.9318 vn -0.0540 0.0285 0.9981 vn 0.0540 -0.0285 -0.9981 vn -0.4438 -0.8734 0.2007 vn -0.2960 -0.4873 0.8215 vn -0.5172 -0.2934 0.8040 vn -0.8245 -0.5395 0.1705 vn 0.0529 -0.9717 0.2304 vn -0.0074 -0.5444 0.8388 vn 0.2713 -0.4494 0.8511 vn 0.5326 -0.8081 0.2516 vn 0.8667 -0.4265 0.2588 vn 0.4655 -0.2276 0.8553 vn 0.9639 0.0576 0.2600 vn 0.5230 0.0614 0.8501 vn 0.7887 0.4934 0.3668 vn 0.4284 0.3402 0.8371 vn 0.3910 0.7977 0.4591 vn 0.2073 0.5342 0.8195 vn -0.0833 0.8779 0.4715 vn -0.0814 0.5913 0.8023 vn -0.3601 0.4963 0.7899 vn -0.5389 0.7356 0.4105 vn -0.8942 0.3666 0.2569 vn -0.5542 0.2745 0.7858 vn -0.9872 -0.0596 0.1480 vn -0.6117 -0.0145 0.7909 vn 0.1100 0.3521 0.9295 vn 0.2510 0.2285 0.9406 vn -0.0739 0.3885 0.9185 vn -0.2515 0.3279 0.9106 vn -0.3752 0.1866 0.9079 vn -0.4119 0.0024 0.9112 vn -0.3516 -0.1753 0.9196 vn -0.2107 -0.2990 0.9307 vn -0.0267 -0.3354 0.9417 vn 0.1509 -0.2748 0.9496 vn 0.2746 -0.1334 0.9523 vn 0.3113 0.0508 0.9490 vn 0.3681 0.1868 -0.9108 vn 0.2192 0.3174 -0.9226 vn 0.0250 0.3559 -0.9342 vn -0.1626 0.2919 -0.9425 vn -0.2933 0.1426 -0.9453 vn -0.3319 -0.0518 -0.9419 vn -0.2683 -0.2395 -0.9331 vn -0.1195 -0.3701 -0.9213 vn 0.0748 -0.4085 -0.9097 vn 0.2624 -0.3445 -0.9014 vn 0.3929 -0.1953 -0.8986 vn 0.4317 -0.0008 -0.9020 vn 0.0662 -0.9978 0.0106 vn 0.5555 -0.8309 0.0323 vn -0.4406 -0.8975 -0.0196 vn -0.8291 -0.5569 -0.0504 vn -0.9941 -0.0885 -0.0624 vn -0.8930 0.4310 0.1297 vn -0.5336 0.8032 0.2649 vn -0.0799 0.9436 0.3213 vn 0.3919 0.8651 0.3132 vn 0.8034 0.5539 0.2186 vn 0.9990 0.0290 0.0355 vn 0.8964 -0.4415 0.0397 vn 0.0769 -0.9699 -0.2311 vn 0.0817 -0.6017 -0.7945 vn 0.3656 -0.5049 -0.7819 vn 0.5492 -0.8088 -0.2102 vn -0.4122 -0.8731 -0.2604 vn -0.2123 -0.5436 -0.8121 vn -0.4377 -0.3459 -0.8299 vn -0.7871 -0.5444 -0.2900 vn -0.9473 -0.0718 -0.3122 vn -0.5340 -0.0619 -0.8432 vn -0.4754 0.2326 -0.8485 vn -0.8499 0.4180 -0.3209 vn -0.5209 0.7938 -0.3139 vn -0.2777 0.4585 -0.8442 vn 0.0063 0.5553 -0.8316 vn -0.0486 0.9549 -0.2929 vn 0.4406 0.8581 -0.2637 vn 0.3003 0.4971 -0.8141 vn 0.8155 0.5294 -0.2340 vn 0.5257 0.2995 -0.7962 vn 0.6219 0.0154 -0.7829 vn 0.9756 0.0568 -0.2119 vn 0.5634 -0.2790 -0.7777 vn 0.8782 -0.4330 -0.2031 vn 0.1706 0.1766 0.9694 vn 0.0665 0.2679 0.9611 vn -0.0694 0.2949 0.9530 vn -0.2007 0.2501 0.9472 vn -0.2920 0.1457 0.9452 vn -0.3191 0.0096 0.9477 vn -0.2747 -0.1217 0.9538 vn -0.1704 -0.2129 0.9621 vn -0.0346 -0.2399 0.9702 vn 0.0966 -0.1951 0.9760 vn 0.1881 -0.0908 0.9780 vn 0.2151 0.0453 0.9755 vn 0.2878 0.1308 -0.9487 vn 0.1774 0.2276 -0.9575 vn 0.0333 0.2561 -0.9661 vn -0.1059 0.2087 -0.9722 vn -0.2027 0.0980 -0.9743 vn -0.2314 -0.0462 -0.9718 vn -0.1842 -0.1855 -0.9652 vn -0.0738 -0.2823 -0.9565 vn 0.0702 -0.3108 -0.9479 vn 0.2093 -0.2633 -0.9417 vn 0.3062 -0.1527 -0.9396 vn 0.3349 -0.0084 -0.9422 vn 0.0665 -0.9978 0.0035 vn 0.5558 -0.8309 0.0252 vn -0.4402 -0.8975 -0.0267 vn -0.8285 -0.5570 -0.0575 vn -0.9945 -0.0674 -0.0804 vn -0.8935 0.4400 -0.0895 vn -0.5528 0.8293 -0.0822 vn -0.0635 0.9962 -0.0605 vn 0.4433 0.8959 -0.0302 vn 0.8316 0.5553 0.0006 vn 0.9976 0.0658 0.0235 vn 0.8966 -0.4416 0.0325 vn 0.0660 -0.9977 0.0146 vn 0.5554 -0.8308 0.0363 vn -0.4409 -0.8974 -0.0157 vn -0.8293 -0.5568 -0.0464 vn -0.9918 -0.1103 -0.0646 vn -0.9052 0.4205 -0.0615 vn -0.5463 0.8363 -0.0464 vn -0.0656 0.9976 -0.0218 vn 0.4323 0.9017 0.0046 vn 0.8414 0.5397 0.0269 vn 0.9992 0.0195 0.0360 vn 0.8962 -0.4414 0.0436 vn 0.8965 -0.4416 0.0358 vn 0.9979 0.0615 0.0211 vn 0.5557 -0.8309 0.0284 vn 0.0664 -0.9978 0.0067 vn -0.4404 -0.8975 -0.0235 vn -0.8288 -0.5569 -0.0543 vn -0.9940 -0.0717 -0.0828 vn -0.8949 0.4322 -0.1115 vn -0.5530 0.8239 -0.1237 vn -0.0607 0.9922 -0.1090 vn 0.4485 0.8909 -0.0714 vn 0.8363 0.5479 -0.0212 vt 0.7265 0.6764 0.0000 vt 0.7430 0.6797 0.0000 vt 0.7592 0.6709 0.0000 vt 0.7503 0.6692 0.0000 vt 0.7701 0.6809 0.0000 vt 0.7739 0.6716 0.0000 vt 0.8006 0.6797 0.0000 vt 0.7904 0.6709 0.0000 vt 0.8262 0.6764 0.0000 vt 0.8043 0.6692 0.0000 vt 0.8402 0.6720 0.0000 vt 0.8118 0.6668 0.0000 vt 0.8388 0.6676 0.0000 vt 0.8110 0.6644 0.0000 vt 0.8223 0.6643 0.0000 vt 0.8021 0.6626 0.0000 vt 0.7952 0.6632 0.0000 vt 0.7875 0.6620 0.0000 vt 0.7648 0.6643 0.0000 vt 0.7710 0.6626 0.0000 vt 0.7391 0.6676 0.0000 vt 0.7571 0.6644 0.0000 vt 0.7251 0.6720 0.0000 vt 0.7495 0.6668 0.0000 vt 0.7123 0.6856 0.0000 vt 0.7338 0.6898 0.0000 vt 0.7692 0.6914 0.0000 vt 0.8090 0.6898 0.0000 vt 0.8425 0.6856 0.0000 vt 0.8608 0.6798 0.0000 vt 0.8589 0.6741 0.0000 vt 0.8374 0.6698 0.0000 vt 0.8020 0.6682 0.0000 vt 0.7622 0.6698 0.0000 vt 0.7287 0.6740 0.0000 vt 0.7104 0.6798 0.0000 vt 0.7097 0.6952 0.0000 vt 0.7330 0.6998 0.0000 vt 0.7713 0.7015 0.0000 vt 0.8144 0.6999 0.0000 vt 0.8507 0.6953 0.0000 vt 0.8705 0.6891 0.0000 vt 0.8684 0.6828 0.0000 vt 0.8452 0.6782 0.0000 vt 0.8068 0.6765 0.0000 vt 0.7638 0.6782 0.0000 vt 0.7275 0.6827 0.0000 vt 0.7077 0.6890 0.0000 vt 0.7193 0.7040 0.0000 vt 0.7408 0.7082 0.0000 vt 0.7762 0.7098 0.0000 vt 0.8160 0.7083 0.0000 vt 0.8495 0.7040 0.0000 vt 0.8678 0.6983 0.0000 vt 0.8659 0.6925 0.0000 vt 0.8444 0.6882 0.0000 vt 0.8090 0.6867 0.0000 vt 0.7692 0.6882 0.0000 vt 0.7357 0.6924 0.0000 vt 0.7174 0.6982 0.0000 vt 0.7394 0.7104 0.0000 vt 0.7559 0.7137 0.0000 vt 0.7830 0.7149 0.0000 vt 0.8134 0.7137 0.0000 vt 0.8391 0.7105 0.0000 vt 0.8531 0.7061 0.0000 vt 0.8516 0.7016 0.0000 vt 0.8352 0.6984 0.0000 vt 0.8081 0.6972 0.0000 vt 0.7776 0.6984 0.0000 vt 0.7520 0.7016 0.0000 vt 0.7380 0.7060 0.0000 vt 0.7671 0.7136 0.0000 vt 0.7761 0.7154 0.0000 vt 0.7907 0.7160 0.0000 vt 0.8072 0.7154 0.0000 vt 0.8211 0.7137 0.0000 vt 0.8287 0.7113 0.0000 vt 0.8279 0.7089 0.0000 vt 0.8190 0.7071 0.0000 vt 0.8043 0.7065 0.0000 vt 0.7878 0.7071 0.0000 vt 0.7739 0.7088 0.0000 vt 0.7664 0.7112 0.0000 vt 0.7800 0.6650 0.0000 vt 0.7982 0.7131 0.0000 vt 0.7299 0.7279 0.0000 vt 0.7419 0.7111 0.0000 vt 0.7204 0.7068 0.0000 vt 0.7013 0.7223 0.0000 vt 0.7770 0.7300 0.0000 vt 0.7773 0.7126 0.0000 vt 0.8170 0.7111 0.0000 vt 0.8299 0.7280 0.0000 vt 0.8745 0.7224 0.0000 vt 0.8505 0.7069 0.0000 vt 0.8987 0.7147 0.0000 vt 0.8687 0.7011 0.0000 vt 0.8963 0.7070 0.0000 vt 0.8669 0.6953 0.0000 vt 0.8677 0.7014 0.0000 vt 0.8454 0.6911 0.0000 vt 0.8206 0.6993 0.0000 vt 0.8100 0.6895 0.0000 vt 0.7703 0.6911 0.0000 vt 0.7677 0.7013 0.0000 vt 0.7231 0.7069 0.0000 vt 0.7368 0.6953 0.0000 vt 0.6988 0.7146 0.0000 vt 0.7186 0.7010 0.0000 vt 0.7667 0.7111 0.0000 vt 0.7953 0.7055 0.0000 vt 0.7548 0.7087 0.0000 vt 0.7863 0.7119 0.0000 vt 0.8083 0.7111 0.0000 vt 0.8269 0.7088 0.0000 vt 0.8370 0.7056 0.0000 vt 0.8359 0.7024 0.0000 vt 0.8240 0.7000 0.0000 vt 0.8044 0.6991 0.0000 vt 0.7824 0.7000 0.0000 vt 0.7638 0.7023 0.0000 vt 0.7537 0.7055 0.0000 vt 0.8336 0.8909 0.0000 vt 0.8646 0.8885 0.0000 vt 0.8427 0.8927 0.0000 vt 0.8577 0.8934 0.0000 vt 0.8745 0.8927 0.0000 vt 0.8887 0.8910 0.0000 vt 0.8964 0.8885 0.0000 vt 0.8956 0.8861 0.0000 vt 0.8865 0.8843 0.0000 vt 0.8715 0.8836 0.0000 vt 0.8547 0.8843 0.0000 vt 0.8406 0.8860 0.0000 vt 0.8328 0.8885 0.0000 vt 0.7803 0.7372 0.0000 vt 0.8321 0.7352 0.0000 vt 0.7341 0.7352 0.0000 vt 0.7061 0.7297 0.0000 vt 0.7036 0.7221 0.0000 vt 0.7313 0.7119 0.0000 vt 0.7749 0.7064 0.0000 vt 0.8268 0.7044 0.0000 vt 0.8730 0.7064 0.0000 vt 0.9010 0.7120 0.0000 vt 0.8996 0.7222 0.0000 vt 0.8758 0.7297 0.0000 vt 0.8454 0.8977 0.0000 vt 0.8512 0.9033 0.0000 vt 0.8876 0.9019 0.0000 vt 0.8888 0.8960 0.0000 vt 0.8069 0.8960 0.0000 vt 0.8188 0.9018 0.0000 vt 0.7991 0.8979 0.0000 vt 0.7835 0.8913 0.0000 vt 0.7814 0.8850 0.0000 vt 0.7974 0.8926 0.0000 vt 0.8141 0.8874 0.0000 vt 0.8013 0.8787 0.0000 vt 0.8378 0.8741 0.0000 vt 0.8448 0.8835 0.0000 vt 0.8812 0.8821 0.0000 vt 0.8812 0.8725 0.0000 vt 0.9197 0.8742 0.0000 vt 0.9136 0.8835 0.0000 vt 0.9432 0.8788 0.0000 vt 0.9333 0.8874 0.0000 vt 0.9350 0.8927 0.0000 vt 0.9452 0.8851 0.0000 vt 0.9183 0.8980 0.0000 vt 0.9253 0.8914 0.0000 vt 0.7335 0.7058 0.0000 vt 0.7512 0.7093 0.0000 vt 0.7802 0.7106 0.0000 vt 0.8129 0.7093 0.0000 vt 0.8404 0.7058 0.0000 vt 0.8553 0.7011 0.0000 vt 0.8538 0.6964 0.0000 vt 0.8362 0.6929 0.0000 vt 0.8071 0.6916 0.0000 vt 0.7745 0.6928 0.0000 vt 0.7470 0.6963 0.0000 vt 0.7320 0.7010 0.0000 vt 0.8183 0.8964 0.0000 vt 0.8324 0.8992 0.0000 vt 0.8555 0.9002 0.0000 vt 0.8815 0.8992 0.0000 vt 0.9034 0.8965 0.0000 vt 0.9153 0.8927 0.0000 vt 0.9141 0.8889 0.0000 vt 0.9000 0.8861 0.0000 vt 0.8769 0.8851 0.0000 vt 0.8509 0.8861 0.0000 vt 0.8290 0.8889 0.0000 vt 0.8171 0.8927 0.0000 vt 0.8418 0.8896 0.0000 vt 0.8863 0.8879 0.0000 vt 0.8022 0.8879 0.0000 vt 0.7782 0.8831 0.0000 vt 0.7761 0.8766 0.0000 vt 0.7965 0.8702 0.0000 vt 0.8340 0.8655 0.0000 vt 0.8785 0.8637 0.0000 vt 0.9181 0.8655 0.0000 vt 0.9421 0.8702 0.0000 vt 0.9442 0.8767 0.0000 vt 0.9238 0.8832 0.0000 vt 0.7880 0.7594 0.0000 vt 0.8412 0.7574 0.0000 vt 0.7406 0.7573 0.0000 vt 0.7119 0.7516 0.0000 vt 0.7094 0.7439 0.0000 vt 0.7402 0.7317 0.0000 vt 0.7850 0.7261 0.0000 vt 0.8382 0.7240 0.0000 vt 0.8855 0.7261 0.0000 vt 0.9143 0.7318 0.0000 vt 0.9104 0.7440 0.0000 vt 0.8860 0.7517 0.0000 vt 0.9028 0.8338 0.0000 vt 0.9224 0.8275 0.0000 vt 0.8667 0.8383 0.0000 vt 0.8239 0.8399 0.0000 vt 0.7858 0.8383 0.0000 vt 0.7626 0.8337 0.0000 vt 0.7606 0.8275 0.0000 vt 0.7803 0.8213 0.0000 vt 0.8163 0.8167 0.0000 vt 0.8592 0.8151 0.0000 vt 0.8973 0.8167 0.0000 vt 0.9204 0.8213 0.0000 g Object014 f 331/331/330 332/332/331 333/333/332 f 333/333/332 334/334/333 331/331/330 f 335/335/334 336/336/335 333/333/332 f 333/333/332 332/332/331 335/335/334 f 337/337/336 338/338/337 336/336/335 f 336/336/335 335/335/334 337/337/336 f 339/339/338 340/340/339 338/338/337 f 338/338/337 337/337/336 339/339/338 f 340/340/339 339/339/338 341/341/340 f 341/341/340 342/342/341 340/340/339 f 342/342/341 341/341/340 343/343/342 f 343/343/342 344/344/343 342/342/341 f 343/343/342 345/345/344 346/346/345 f 346/346/345 344/344/343 343/343/342 f 347/347/346 348/348/347 346/346/345 f 346/346/345 345/345/344 347/347/346 f 349/349/348 350/350/349 348/348/347 f 348/348/347 347/347/346 349/349/348 f 351/351/350 352/352/351 350/350/349 f 350/350/349 349/349/348 351/351/350 f 352/352/351 351/351/350 353/353/352 f 353/353/352 354/354/353 352/352/351 f 354/354/353 353/353/352 331/331/330 f 331/331/330 334/334/333 354/354/353 f 355/355/354 356/356/355 332/332/331 f 332/332/331 331/331/330 355/355/354 f 356/356/355 357/357/356 335/335/334 f 335/335/334 332/332/331 356/356/355 f 357/357/356 358/358/357 337/337/336 f 337/337/336 335/335/334 357/357/356 f 358/358/357 359/359/358 339/339/338 f 339/339/338 337/337/336 358/358/357 f 359/359/358 360/360/359 341/341/340 f 341/341/340 339/339/338 359/359/358 f 360/360/359 361/361/360 343/343/342 f 343/343/342 341/341/340 360/360/359 f 361/361/360 362/362/361 345/345/344 f 345/345/344 343/343/342 361/361/360 f 362/362/361 363/363/362 347/347/346 f 347/347/346 345/345/344 362/362/361 f 363/363/362 364/364/363 349/349/348 f 349/349/348 347/347/346 363/363/362 f 364/364/363 365/365/364 351/351/350 f 351/351/350 349/349/348 364/364/363 f 365/365/364 366/366/365 353/353/352 f 353/353/352 351/351/350 365/365/364 f 366/366/365 355/355/354 331/331/330 f 331/331/330 353/353/352 366/366/365 f 367/367/366 368/368/367 356/356/355 f 356/356/355 355/355/354 367/367/366 f 368/368/367 369/369/368 357/357/356 f 357/357/356 356/356/355 368/368/367 f 369/369/368 370/370/369 358/358/357 f 358/358/357 357/357/356 369/369/368 f 370/370/369 371/371/370 359/359/358 f 359/359/358 358/358/357 370/370/369 f 371/371/370 372/372/371 360/360/359 f 360/360/359 359/359/358 371/371/370 f 372/372/371 373/373/372 361/361/360 f 361/361/360 360/360/359 372/372/371 f 373/373/372 374/374/373 362/362/361 f 362/362/361 361/361/360 373/373/372 f 374/374/373 375/375/374 363/363/362 f 363/363/362 362/362/361 374/374/373 f 375/375/374 376/376/375 364/364/363 f 364/364/363 363/363/362 375/375/374 f 376/376/375 377/377/376 365/365/364 f 365/365/364 364/364/363 376/376/375 f 377/377/376 378/378/377 366/366/365 f 366/366/365 365/365/364 377/377/376 f 378/378/377 367/367/366 355/355/354 f 355/355/354 366/366/365 378/378/377 f 379/379/378 380/380/379 368/368/367 f 368/368/367 367/367/366 379/379/378 f 380/380/379 381/381/380 369/369/368 f 369/369/368 368/368/367 380/380/379 f 381/381/380 382/382/381 370/370/369 f 370/370/369 369/369/368 381/381/380 f 382/382/381 383/383/382 371/371/370 f 371/371/370 370/370/369 382/382/381 f 383/383/382 384/384/383 372/372/371 f 372/372/371 371/371/370 383/383/382 f 384/384/383 385/385/384 373/373/372 f 373/373/372 372/372/371 384/384/383 f 385/385/384 386/386/385 374/374/373 f 374/374/373 373/373/372 385/385/384 f 386/386/385 387/387/386 375/375/374 f 375/375/374 374/374/373 386/386/385 f 387/387/386 388/388/387 376/376/375 f 376/376/375 375/375/374 387/387/386 f 388/388/387 389/389/388 377/377/376 f 377/377/376 376/376/375 388/388/387 f 389/389/388 390/390/389 378/378/377 f 378/378/377 377/377/376 389/389/388 f 390/390/389 379/379/378 367/367/366 f 367/367/366 378/378/377 390/390/389 f 391/391/390 392/392/391 380/380/379 f 380/380/379 379/379/378 391/391/390 f 392/392/391 393/393/392 381/381/380 f 381/381/380 380/380/379 392/392/391 f 393/393/392 394/394/393 382/382/381 f 382/382/381 381/381/380 393/393/392 f 394/394/393 395/395/394 383/383/382 f 383/383/382 382/382/381 394/394/393 f 395/395/394 396/396/395 384/384/383 f 384/384/383 383/383/382 395/395/394 f 396/396/395 397/397/396 385/385/384 f 385/385/384 384/384/383 396/396/395 f 397/397/396 398/398/397 386/386/385 f 386/386/385 385/385/384 397/397/396 f 398/398/397 399/399/398 387/387/386 f 387/387/386 386/386/385 398/398/397 f 399/399/398 400/400/399 388/388/387 f 388/388/387 387/387/386 399/399/398 f 400/400/399 401/401/400 389/389/388 f 389/389/388 388/388/387 400/400/399 f 401/401/400 402/402/401 390/390/389 f 390/390/389 389/389/388 401/401/400 f 402/402/401 391/391/390 379/379/378 f 379/379/378 390/390/389 402/402/401 f 403/403/402 404/404/403 392/392/391 f 392/392/391 391/391/390 403/403/402 f 404/404/403 405/405/404 393/393/392 f 393/393/392 392/392/391 404/404/403 f 405/405/404 406/406/405 394/394/393 f 394/394/393 393/393/392 405/405/404 f 406/406/405 407/407/406 395/395/394 f 395/395/394 394/394/393 406/406/405 f 407/407/406 408/408/407 396/396/395 f 396/396/395 395/395/394 407/407/406 f 408/408/407 409/409/408 397/397/396 f 397/397/396 396/396/395 408/408/407 f 409/409/408 410/410/409 398/398/397 f 398/398/397 397/397/396 409/409/408 f 410/410/409 411/411/410 399/399/398 f 399/399/398 398/398/397 410/410/409 f 411/411/410 412/412/411 400/400/399 f 400/400/399 399/399/398 411/411/410 f 412/412/411 413/413/412 401/401/400 f 401/401/400 400/400/399 412/412/411 f 413/413/412 414/414/413 402/402/401 f 402/402/401 401/401/400 413/413/412 f 414/414/413 403/403/402 391/391/390 f 391/391/390 402/402/401 414/414/413 f 333/333/332 415/415/414 334/334/333 f 336/336/335 415/415/414 333/333/332 f 338/338/337 415/415/414 336/336/335 f 340/340/339 415/415/414 338/338/337 f 342/342/341 415/415/414 340/340/339 f 344/344/343 415/415/414 342/342/341 f 346/346/345 415/415/414 344/344/343 f 348/348/347 415/415/414 346/346/345 f 350/350/349 415/415/414 348/348/347 f 352/352/351 415/415/414 350/350/349 f 354/354/353 415/415/414 352/352/351 f 334/334/333 415/415/414 354/354/353 f 403/403/402 416/416/415 404/404/403 f 404/404/403 416/416/415 405/405/404 f 405/405/404 416/416/415 406/406/405 f 406/406/405 416/416/415 407/407/406 f 407/407/406 416/416/415 408/408/407 f 408/408/407 416/416/415 409/409/408 f 409/409/408 416/416/415 410/410/409 f 410/410/409 416/416/415 411/411/410 f 411/411/410 416/416/415 412/412/411 f 412/412/411 416/416/415 413/413/412 f 413/413/412 416/416/415 414/414/413 f 414/414/413 416/416/415 403/403/402 f 417/417/416 418/418/417 419/419/418 f 419/419/418 420/420/419 417/417/416 f 421/421/420 422/422/421 418/418/417 f 418/418/417 417/417/416 421/421/420 f 423/423/422 422/422/421 421/421/420 f 421/421/420 424/424/423 423/423/422 f 424/424/423 425/425/424 426/426/425 f 426/426/425 423/423/422 424/424/423 f 425/425/424 427/427/426 428/428/427 f 428/428/427 426/426/425 425/425/424 f 427/427/426 429/429/428 430/430/429 f 430/430/429 428/428/427 427/427/426 f 431/431/430 432/432/431 430/430/429 f 430/430/429 429/429/428 431/431/430 f 433/433/432 434/434/433 432/432/431 f 432/432/431 431/431/430 433/433/432 f 435/435/434 434/434/433 433/433/432 f 433/433/432 436/436/435 435/435/434 f 436/436/435 437/437/436 438/438/437 f 438/438/437 435/435/434 436/436/435 f 437/437/436 439/439/438 440/440/439 f 440/440/439 438/438/437 437/437/436 f 439/439/438 420/420/419 419/419/418 f 419/419/418 440/440/439 439/439/438 f 441/441/440 442/442/414 443/443/441 f 444/444/442 442/442/414 441/441/440 f 445/445/443 442/442/414 444/444/442 f 446/446/444 442/442/414 445/445/443 f 447/447/445 442/442/414 446/446/444 f 448/448/446 442/442/414 447/447/445 f 449/449/447 442/442/414 448/448/446 f 450/450/448 442/442/414 449/449/447 f 451/451/449 442/442/414 450/450/448 f 452/452/450 442/442/414 451/451/449 f 453/453/451 442/442/414 452/452/450 f 443/443/441 442/442/414 453/453/451 f 454/454/452 455/455/415 456/456/453 f 456/456/453 455/455/415 457/457/454 f 457/457/454 455/455/415 458/458/455 f 458/458/455 455/455/415 459/459/456 f 459/459/456 455/455/415 460/460/457 f 460/460/457 455/455/415 461/461/458 f 461/461/458 455/455/415 462/462/459 f 462/462/459 455/455/415 463/463/460 f 463/463/460 455/455/415 464/464/461 f 464/464/461 455/455/415 465/465/462 f 465/465/462 455/455/415 466/466/463 f 466/466/463 455/455/415 454/454/452 f 421/421/420 467/467/464 468/468/465 f 468/468/465 424/424/423 421/421/420 f 469/469/466 467/467/464 421/421/420 f 421/421/420 417/417/416 469/469/466 f 420/420/419 470/470/467 469/469/466 f 469/469/466 417/417/416 420/420/419 f 439/439/438 471/471/468 470/470/467 f 470/470/467 420/420/419 439/439/438 f 437/437/436 472/472/469 471/471/468 f 471/471/468 439/439/438 437/437/436 f 436/436/435 473/473/470 472/472/469 f 472/472/469 437/437/436 436/436/435 f 433/433/432 474/474/471 473/473/470 f 473/473/470 436/436/435 433/433/432 f 431/431/430 475/475/472 474/474/471 f 474/474/471 433/433/432 431/431/430 f 429/429/428 476/476/473 475/475/472 f 475/475/472 431/431/430 429/429/428 f 427/427/426 477/477/474 476/476/473 f 476/476/473 429/429/428 427/427/426 f 425/425/424 478/478/475 477/477/474 f 477/477/474 427/427/426 425/425/424 f 424/424/423 468/468/465 478/478/475 f 478/478/475 425/425/424 424/424/423 f 479/479/476 480/480/477 481/481/478 f 481/481/478 482/482/479 479/479/476 f 480/480/477 479/479/476 483/483/480 f 483/483/480 484/484/481 480/480/477 f 485/485/482 484/484/481 483/483/480 f 483/483/480 486/486/483 485/485/482 f 487/487/484 488/488/485 485/485/482 f 485/485/482 486/486/483 487/487/484 f 489/489/486 488/488/485 487/487/484 f 487/487/484 490/490/487 489/489/486 f 489/489/486 490/490/487 491/491/488 f 491/491/488 492/492/489 489/489/486 f 493/493/490 492/492/489 491/491/488 f 491/491/488 494/494/491 493/493/490 f 495/495/492 496/496/493 493/493/490 f 493/493/490 494/494/491 495/495/492 f 496/496/493 495/495/492 497/497/494 f 497/497/494 498/498/495 496/496/493 f 499/499/496 498/498/495 497/497/494 f 497/497/494 500/500/497 499/499/496 f 501/501/498 499/499/496 500/500/497 f 500/500/497 502/502/499 501/501/498 f 501/501/498 502/502/499 482/482/479 f 482/482/479 481/481/478 501/501/498 f 503/503/500 419/419/418 418/418/417 f 418/418/417 504/504/501 503/503/500 f 505/505/502 504/504/501 418/418/417 f 418/418/417 422/422/421 505/505/502 f 423/423/422 506/506/503 505/505/502 f 505/505/502 422/422/421 423/423/422 f 426/426/425 507/507/504 506/506/503 f 506/506/503 423/423/422 426/426/425 f 428/428/427 508/508/505 507/507/504 f 507/507/504 426/426/425 428/428/427 f 430/430/429 509/509/506 508/508/505 f 508/508/505 428/428/427 430/430/429 f 432/432/431 510/510/507 509/509/506 f 509/509/506 430/430/429 432/432/431 f 511/511/508 510/510/507 432/432/431 f 432/432/431 434/434/433 511/511/508 f 435/435/434 512/512/509 511/511/508 f 511/511/508 434/434/433 435/435/434 f 438/438/437 513/513/510 512/512/509 f 512/512/509 435/435/434 438/438/437 f 438/438/437 440/440/439 514/514/511 f 514/514/511 513/513/510 438/438/437 f 503/503/500 514/514/511 440/440/439 f 440/440/439 419/419/418 503/503/500 f 443/443/441 503/503/500 504/504/501 f 504/504/501 441/441/440 443/443/441 f 504/504/501 505/505/502 444/444/442 f 444/444/442 441/441/440 504/504/501 f 506/506/503 445/445/443 444/444/442 f 444/444/442 505/505/502 506/506/503 f 507/507/504 446/446/444 445/445/443 f 445/445/443 506/506/503 507/507/504 f 447/447/445 446/446/444 507/507/504 f 507/507/504 508/508/505 447/447/445 f 509/509/506 448/448/446 447/447/445 f 447/447/445 508/508/505 509/509/506 f 510/510/507 449/449/447 448/448/446 f 448/448/446 509/509/506 510/510/507 f 450/450/448 449/449/447 510/510/507 f 510/510/507 511/511/508 450/450/448 f 451/451/449 450/450/448 511/511/508 f 511/511/508 512/512/509 451/451/449 f 451/451/449 512/512/509 513/513/510 f 513/513/510 452/452/450 451/451/449 f 514/514/511 453/453/451 452/452/450 f 452/452/450 513/513/510 514/514/511 f 514/514/511 503/503/500 443/443/441 f 443/443/441 453/453/451 514/514/511 f 515/515/512 516/516/513 484/484/481 f 484/484/481 485/485/482 515/515/512 f 484/484/481 516/516/513 517/517/514 f 517/517/514 480/480/477 484/484/481 f 480/480/477 517/517/514 518/518/515 f 518/518/515 481/481/478 480/480/477 f 518/518/515 519/519/516 501/501/498 f 501/501/498 481/481/478 518/518/515 f 520/520/517 499/499/496 501/501/498 f 501/501/498 519/519/516 520/520/517 f 499/499/496 520/520/517 521/521/518 f 521/521/518 498/498/495 499/499/496 f 521/521/518 522/522/519 496/496/493 f 496/496/493 498/498/495 521/521/518 f 522/522/519 523/523/520 493/493/490 f 493/493/490 496/496/493 522/522/519 f 493/493/490 523/523/520 524/524/521 f 524/524/521 492/492/489 493/493/490 f 492/492/489 524/524/521 525/525/522 f 525/525/522 489/489/486 492/492/489 f 489/489/486 525/525/522 526/526/523 f 526/526/523 488/488/485 489/489/486 f 488/488/485 526/526/523 515/515/512 f 515/515/512 485/485/482 488/488/485 f 515/515/512 454/454/452 456/456/453 f 456/456/453 516/516/513 515/515/512 f 516/516/513 456/456/453 457/457/454 f 457/457/454 517/517/514 516/516/513 f 457/457/454 458/458/455 518/518/515 f 518/518/515 517/517/514 457/457/454 f 518/518/515 458/458/455 459/459/456 f 459/459/456 519/519/516 518/518/515 f 459/459/456 460/460/457 520/520/517 f 520/520/517 519/519/516 459/459/456 f 520/520/517 460/460/457 461/461/458 f 461/461/458 521/521/518 520/520/517 f 462/462/459 522/522/519 521/521/518 f 521/521/518 461/461/458 462/462/459 f 462/462/459 463/463/460 523/523/520 f 523/523/520 522/522/519 462/462/459 f 463/463/460 464/464/461 524/524/521 f 524/524/521 523/523/520 463/463/460 f 525/525/522 524/524/521 464/464/461 f 464/464/461 465/465/462 525/525/522 f 465/465/462 466/466/463 526/526/523 f 526/526/523 525/525/522 465/465/462 f 526/526/523 466/466/463 454/454/452 f 454/454/452 515/515/512 526/526/523 f 527/527/524 479/479/476 482/482/479 f 482/482/479 528/528/525 527/527/524 f 529/529/526 483/483/480 479/479/476 f 479/479/476 527/527/524 529/529/526 f 483/483/480 529/529/526 530/530/527 f 530/530/527 486/486/483 483/483/480 f 530/530/527 531/531/528 487/487/484 f 487/487/484 486/486/483 530/530/527 f 487/487/484 531/531/528 532/532/529 f 532/532/529 490/490/487 487/487/484 f 533/533/530 491/491/488 490/490/487 f 490/490/487 532/532/529 533/533/530 f 534/534/531 494/494/491 491/491/488 f 491/491/488 533/533/530 534/534/531 f 495/495/492 494/494/491 534/534/531 f 534/534/531 535/535/532 495/495/492 f 536/536/533 497/497/494 495/495/492 f 495/495/492 535/535/532 536/536/533 f 500/500/497 497/497/494 536/536/533 f 536/536/533 537/537/534 500/500/497 f 502/502/499 500/500/497 537/537/534 f 537/537/534 538/538/535 502/502/499 f 482/482/479 502/502/499 538/538/535 f 538/538/535 528/528/525 482/482/479 f 467/467/464 539/539/536 540/540/537 f 540/540/537 468/468/465 467/467/464 f 469/469/466 541/541/538 539/539/536 f 539/539/536 467/467/464 469/469/466 f 470/470/467 542/542/539 541/541/538 f 541/541/538 469/469/466 470/470/467 f 543/543/540 542/542/539 470/470/467 f 470/470/467 471/471/468 543/543/540 f 472/472/469 544/544/541 543/543/540 f 543/543/540 471/471/468 472/472/469 f 473/473/470 545/545/542 544/544/541 f 544/544/541 472/472/469 473/473/470 f 546/546/543 545/545/542 473/473/470 f 473/473/470 474/474/471 546/546/543 f 547/547/544 546/546/543 474/474/471 f 474/474/471 475/475/472 547/547/544 f 548/548/545 547/547/544 475/475/472 f 475/475/472 476/476/473 548/548/545 f 477/477/474 549/549/546 548/548/545 f 548/548/545 476/476/473 477/477/474 f 550/550/547 549/549/546 477/477/474 f 477/477/474 478/478/475 550/550/547 f 550/550/547 478/478/475 468/468/465 f 468/468/465 540/540/537 550/550/547 f 549/549/546 550/550/547 551/551/548 f 551/551/548 552/552/549 549/549/546 f 540/540/537 553/553/550 551/551/548 f 551/551/548 550/550/547 540/540/537 f 539/539/536 554/554/551 553/553/550 f 553/553/550 540/540/537 539/539/536 f 555/555/552 554/554/551 539/539/536 f 539/539/536 541/541/538 555/555/552 f 556/556/553 555/555/552 541/541/538 f 541/541/538 542/542/539 556/556/553 f 556/556/553 542/542/539 543/543/540 f 543/543/540 557/557/554 556/556/553 f 544/544/541 558/558/555 557/557/554 f 557/557/554 543/543/540 544/544/541 f 559/559/556 558/558/555 544/544/541 f 544/544/541 545/545/542 559/559/556 f 559/559/556 545/545/542 546/546/543 f 546/546/543 560/560/557 559/559/556 f 546/546/543 547/547/544 561/561/558 f 561/561/558 560/560/557 546/546/543 f 561/561/558 547/547/544 548/548/545 f 548/548/545 562/562/559 561/561/558 f 552/552/549 562/562/559 548/548/545 f 548/548/545 549/549/546 552/552/549 f 537/537/534 552/552/549 551/551/548 f 551/551/548 538/538/535 537/537/534 f 553/553/550 528/528/525 538/538/535 f 538/538/535 551/551/548 553/553/550 f 554/554/551 527/527/524 528/528/525 f 528/528/525 553/553/550 554/554/551 f 555/555/552 529/529/526 527/527/524 f 527/527/524 554/554/551 555/555/552 f 529/529/526 555/555/552 556/556/553 f 556/556/553 530/530/527 529/529/526 f 530/530/527 556/556/553 557/557/554 f 557/557/554 531/531/528 530/530/527 f 558/558/555 532/532/529 531/531/528 f 531/531/528 557/557/554 558/558/555 f 532/532/529 558/558/555 559/559/556 f 559/559/556 533/533/530 532/532/529 f 560/560/557 534/534/531 533/533/530 f 533/533/530 559/559/556 560/560/557 f 534/534/531 560/560/557 561/561/558 f 561/561/558 535/535/532 534/534/531 f 536/536/533 535/535/532 561/561/558 f 561/561/558 562/562/559 536/536/533 f 552/552/549 537/537/534 536/536/533 f 536/536/533 562/562/559 552/552/549 v 10.5631 1.8693 10.1147 v 11.5625 0.9946 10.1525 v 12.0403 2.0394 10.9808 v 11.4994 2.5128 10.9603 v 12.8644 0.7370 10.2153 v 12.7449 1.9000 11.0147 v 14.1200 1.1656 10.2860 v 13.4245 2.1320 11.0530 v 14.9929 2.1655 10.3458 v 13.8969 2.6731 11.0854 v 15.2492 3.4688 10.3786 v 14.0356 3.3784 11.1031 v 14.8201 4.7262 10.3756 v 13.8034 4.0590 11.1015 v 13.8208 5.6009 10.3377 v 13.2625 4.5324 11.0810 v 12.5188 5.8585 10.2749 v 12.5579 4.6717 11.0469 v 11.2632 5.4299 10.2043 v 11.8783 4.4398 11.0088 v 10.3903 4.4300 10.1444 v 11.4059 3.8987 10.9764 v 10.1340 3.1267 10.1117 v 11.2673 3.1933 10.9587 v 9.9707 1.4491 8.8987 v 11.2765 0.3063 8.9481 v 12.9775 -0.0303 9.0302 v 14.6181 0.5297 9.1225 v 15.7586 1.8361 9.2007 v 16.0934 3.5390 9.2435 v 15.5328 5.1819 9.2397 v 14.2271 6.3248 9.1901 v 12.5260 6.6613 9.1081 v 10.8855 6.1013 9.0157 v 9.7450 4.7949 8.9376 v 9.4101 3.0921 8.8948 v 9.8126 1.3163 7.4975 v 11.2259 0.0793 7.5511 v 13.0671 -0.2850 7.6398 v 14.8429 0.3211 7.7398 v 16.0773 1.7352 7.8244 v 16.4397 3.5783 7.8707 v 15.8330 5.3566 7.8666 v 14.4196 6.5937 7.8129 v 12.5784 6.9579 7.7242 v 10.8027 6.3518 7.6242 v 9.5682 4.9377 7.5397 v 9.2058 3.0946 7.4933 v 10.1127 1.4910 6.1244 v 11.4184 0.3481 6.1739 v 13.1195 0.0116 6.2559 v 14.7601 0.5716 6.3483 v 15.9006 1.8780 6.4264 v 16.2354 3.5808 6.4692 v 15.6748 5.2238 6.4653 v 14.3691 6.3668 6.4159 v 12.6680 6.7032 6.3338 v 11.0274 6.1433 6.2415 v 9.8869 4.8368 6.1633 v 9.5521 3.1340 6.1205 v 10.8254 1.9467 4.9884 v 11.8248 1.0720 5.0263 v 13.1267 0.8144 5.0891 v 14.3823 1.2430 5.1598 v 15.2552 2.2429 5.2195 v 15.5115 3.5462 5.2523 v 15.0825 4.8037 5.2493 v 14.0831 5.6784 5.2115 v 12.7811 5.9359 5.1487 v 11.5255 5.5073 5.0781 v 10.6526 4.5075 5.0182 v 10.3963 3.2042 4.9854 v 11.8422 2.6139 4.2625 v 12.3830 2.1406 4.2830 v 13.0876 2.0012 4.3171 v 13.7672 2.2331 4.3553 v 14.2396 2.7742 4.3876 v 14.3783 3.4796 4.4054 v 14.1461 4.1601 4.4038 v 13.6052 4.6335 4.3832 v 12.9006 4.7729 4.3493 v 12.2211 4.5410 4.3110 v 11.7487 3.9998 4.2787 v 11.6100 3.2945 4.2609 v 12.6373 3.2817 11.3068 v 13.0082 3.3912 4.0572 v 17.1420 5.1006 4.1091 v 15.1473 8.1087 4.0524 v 14.0187 6.8160 5.7580 v 15.0799 5.4602 5.7918 v 12.6334 9.0903 3.9387 v 12.6649 7.2475 5.6952 v 10.2739 7.7829 3.7981 v 11.3813 6.6396 5.6204 v 8.7012 4.5362 3.6687 v 10.5117 5.1548 5.5534 v 8.3365 0.2209 3.5848 v 10.2893 3.1908 5.5124 v 9.2776 -4.0074 3.5691 v 10.7736 1.2741 5.5082 v 11.2724 -7.0152 3.6258 v 11.8348 -0.0817 5.5420 v 13.1886 -0.5133 5.6048 v 13.7863 -7.9971 3.7395 v 14.4722 0.0947 5.6796 v 16.1457 -6.6894 3.8801 v 17.7185 -3.4430 4.0096 v 15.3418 1.5795 5.7466 v 18.0832 0.8726 4.0934 v 15.5642 3.5435 5.7877 v 18.1686 4.2669 1.7165 v 15.7020 8.9820 1.6614 v 12.6605 10.5647 1.5297 v 9.8589 8.5913 1.3565 v 8.0479 3.5902 1.1884 v 7.7128 -3.0983 1.0702 v 8.9434 -9.6821 1.0337 v 11.4100 -14.3975 1.0889 v 14.4515 -15.9799 1.2205 v 17.2531 -14.0068 1.3938 v 19.0641 -9.0054 1.5618 v 19.3992 -2.3169 1.6800 v 18.6666 4.6592 -0.2838 v 16.0074 9.6066 -0.3451 v 12.7191 11.2630 -0.4884 v 9.6828 9.1837 -0.6751 v 7.7121 3.9267 -0.8554 v 7.3351 -3.0999 -0.9807 v 8.6527 -10.0135 -1.0177 v 11.3119 -14.9609 -0.9565 v 14.6002 -16.6173 -0.8131 v 17.6365 -14.5380 -0.6264 v 19.6072 -9.2811 -0.4461 v 19.9842 -2.2541 -0.3207 v 18.2846 4.1004 -0.2932 v 15.8277 8.6717 -0.3499 v 12.7898 10.2014 -0.4822 v 9.9846 8.2810 -0.6548 v 8.1639 3.4237 -0.8213 v 7.8155 -3.0680 -0.9371 v 9.0329 -9.4550 -0.9713 v 11.4897 -14.0263 -0.9146 v 14.5277 -15.5563 -0.7823 v 17.3328 -13.6356 -0.6098 v 19.1535 -8.7783 -0.4432 v 19.5019 -2.2866 -0.3273 v 15.5735 0.1298 -0.4657 v 14.5558 2.0230 -0.4890 v 13.2974 2.6568 -0.5439 v 12.1355 1.8612 -0.6153 v 11.3813 -0.1505 -0.6844 v 11.2370 -2.8395 -0.7323 v 11.7413 -5.4852 -0.7465 v 12.7589 -7.3787 -0.7231 v 14.0173 -8.0122 -0.6683 v 15.1793 -7.2169 -0.5968 v 15.9334 -5.2049 -0.5277 v 16.0777 -2.5159 -0.4797 v 12.8948 3.3577 6.2742 v 13.6572 -2.6778 -0.6023 vn -0.6345 -0.4126 0.6536 vn -0.3532 -0.6588 0.6642 vn -0.2269 -0.3814 0.8961 vn -0.3864 -0.2418 0.8901 vn 0.0133 -0.7313 0.6819 vn -0.0190 -0.4225 0.9062 vn 0.3668 -0.6107 0.7018 vn 0.1814 -0.3541 0.9174 vn 0.6125 -0.3292 0.7187 vn 0.3207 -0.1945 0.9270 vn 0.6846 0.0377 0.7279 vn 0.3616 0.0135 0.9322 vn 0.5639 0.3917 0.7271 vn 0.2932 0.2143 0.9317 vn 0.2825 0.6379 0.7164 vn 0.1336 0.3539 0.9257 vn -0.0840 0.7104 0.6987 vn -0.0742 0.3950 0.9157 vn -0.4374 0.5898 0.6788 vn -0.2746 0.3266 0.9044 vn -0.6832 0.3083 0.6620 vn -0.4140 0.1670 0.8949 vn -0.7553 -0.0586 0.6528 vn -0.4548 -0.0411 0.8896 vn -0.7888 -0.5223 0.3240 vn -0.4274 -0.8386 0.3377 vn 0.0435 -0.9318 0.3604 vn 0.4976 -0.7768 0.3860 vn 0.8133 -0.4151 0.4076 vn 0.9060 0.0562 0.4195 vn 0.7508 0.5110 0.4184 vn 0.3894 0.8274 0.4047 vn -0.0815 0.9206 0.3820 vn -0.5356 0.7655 0.3564 vn -0.8513 0.4039 0.3348 vn -0.9440 -0.0675 0.3229 vn -0.8293 -0.5565 -0.0508 vn -0.4399 -0.8973 -0.0361 vn 0.0673 -0.9977 -0.0116 vn 0.5565 -0.8307 0.0159 vn 0.8966 -0.4411 0.0392 vn 0.9964 0.0666 0.0520 vn 0.8293 0.5565 0.0508 vn 0.4399 0.8973 0.0361 vn -0.0673 0.9977 0.0116 vn -0.5565 0.8307 -0.0159 vn -0.8966 0.4411 -0.0392 vn -0.9964 -0.0666 -0.0520 vn -0.7508 -0.5110 -0.4184 vn -0.3894 -0.8274 -0.4047 vn 0.0815 -0.9206 -0.3820 vn 0.5356 -0.7656 -0.3564 vn 0.8513 -0.4039 -0.3348 vn 0.9440 0.0675 -0.3229 vn 0.7888 0.5223 -0.3240 vn 0.4274 0.8386 -0.3377 vn -0.0435 0.9318 -0.3604 vn -0.4976 0.7768 -0.3860 vn -0.8133 0.4151 -0.4076 vn -0.9060 -0.0562 -0.4195 vn -0.5639 -0.3917 -0.7271 vn -0.2825 -0.6379 -0.7164 vn 0.0840 -0.7104 -0.6987 vn 0.4374 -0.5898 -0.6788 vn 0.6832 -0.3083 -0.6620 vn 0.7553 0.0586 -0.6528 vn 0.6345 0.4126 -0.6536 vn 0.3532 0.6588 -0.6643 vn -0.0133 0.7313 -0.6819 vn -0.3668 0.6107 -0.7018 vn -0.6125 0.3292 -0.7187 vn -0.6847 -0.0377 -0.7279 vn -0.2931 -0.2142 -0.9318 vn -0.1336 -0.3539 -0.9257 vn 0.0742 -0.3950 -0.9157 vn 0.2745 -0.3266 -0.9044 vn 0.4139 -0.1670 -0.8949 vn 0.4548 0.0411 -0.8896 vn 0.3864 0.2418 -0.8901 vn 0.2269 0.3814 -0.8961 vn 0.0190 0.4225 -0.9062 vn -0.1814 0.3541 -0.9174 vn -0.3207 0.1945 -0.9270 vn -0.3616 -0.0135 -0.9322 vn -0.0511 -0.0151 0.9986 vn 0.0511 0.0151 -0.9986 vn 0.7952 0.3265 0.5109 vn 0.5194 0.6568 0.5466 vn 0.2677 0.4112 0.8713 vn 0.4286 0.2575 0.8660 vn -0.0670 0.8007 0.5953 vn -0.0883 0.4947 0.8645 vn -0.6598 0.5617 0.4991 vn -0.4058 0.3773 0.8325 vn -0.8770 0.2165 0.4290 vn -0.5483 0.1899 0.8145 vn -0.8442 -0.0444 0.5342 vn -0.5334 -0.0070 0.8458 vn -0.6260 -0.2175 0.7489 vn -0.3954 -0.1456 0.9069 vn -0.3048 -0.2834 0.9093 vn -0.2073 -0.2086 0.9558 vn -0.0378 -0.2186 0.9751 vn -0.0353 -0.2859 0.9576 vn 0.1334 -0.1848 0.9737 vn 0.2456 -0.2450 0.9379 vn 0.5895 -0.1329 0.7968 vn 0.3070 -0.0993 0.9465 vn 0.7983 0.0751 0.5976 vn 0.4290 0.0524 0.9018 vn 0.9113 0.2918 0.2906 vn 0.6386 0.6848 0.3510 vn -0.0712 0.9122 0.4036 vn -0.7674 0.5836 0.2655 vn -0.9675 0.1732 0.1840 vn -0.9540 -0.0955 0.2843 vn -0.8318 -0.3136 0.4581 vn -0.5719 -0.5715 0.5885 vn 0.0141 -0.7713 0.6363 vn 0.5826 -0.4933 0.6459 vn 0.8146 -0.2018 0.5438 vn 0.9177 0.0254 0.3965 vn 0.7855 0.2786 -0.5526 vn 0.5978 0.6203 -0.5077 vn -0.0302 0.8763 -0.4809 vn -0.6205 0.5356 -0.5729 vn -0.7540 0.1756 -0.6329 vn -0.7612 -0.0427 -0.6471 vn -0.7241 -0.2615 -0.6382 vn -0.5419 -0.6038 -0.5846 vn 0.0805 -0.8615 -0.5014 vn 0.6765 -0.5190 -0.5225 vn 0.8150 -0.1576 -0.5575 vn 0.8234 0.0621 -0.5640 vn 0.0294 0.0087 -0.9995 vn 0.0375 0.0043 -0.9993 vn 0.0519 0.0023 -0.9986 vn 0.0660 0.0062 -0.9978 vn 0.0734 0.0116 -0.9972 vn 0.0752 0.0167 -0.9970 vn 0.0726 0.0214 -0.9971 vn 0.0647 0.0259 -0.9976 vn 0.0502 0.0278 -0.9984 vn 0.0361 0.0240 -0.9991 vn 0.0289 0.0185 -0.9994 vn 0.0270 0.0135 -0.9995 vn 0.0468 0.0138 -0.9988 vn 0.0483 0.0129 -0.9987 vn 0.0513 0.0125 -0.9986 vn 0.0541 0.0133 -0.9984 vn 0.0556 0.0144 -0.9984 vn 0.0559 0.0154 -0.9983 vn 0.0554 0.0164 -0.9983 vn 0.0538 0.0172 -0.9984 vn 0.0509 0.0176 -0.9985 vn 0.0481 0.0169 -0.9987 vn 0.0467 0.0158 -0.9988 vn 0.0463 0.0147 -0.9988 vt 0.8196 0.8918 0.0000 vt 0.8328 0.8944 0.0000 vt 0.8457 0.8874 0.0000 vt 0.8386 0.8860 0.0000 vt 0.8545 0.8953 0.0000 vt 0.8575 0.8879 0.0000 vt 0.8789 0.8944 0.0000 vt 0.8707 0.8874 0.0000 vt 0.8994 0.8918 0.0000 vt 0.8818 0.8860 0.0000 vt 0.9106 0.8883 0.0000 vt 0.8879 0.8841 0.0000 vt 0.9095 0.8847 0.0000 vt 0.8873 0.8821 0.0000 vt 0.8963 0.8821 0.0000 vt 0.8801 0.8807 0.0000 vt 0.8746 0.8811 0.0000 vt 0.8684 0.8802 0.0000 vt 0.8502 0.8821 0.0000 vt 0.8552 0.8807 0.0000 vt 0.8296 0.8847 0.0000 vt 0.8440 0.8821 0.0000 vt 0.8184 0.8882 0.0000 vt 0.8380 0.8840 0.0000 vt 0.8081 0.8991 0.0000 vt 0.8254 0.9025 0.0000 vt 0.8537 0.9038 0.0000 vt 0.8856 0.9025 0.0000 vt 0.9125 0.8991 0.0000 vt 0.9271 0.8945 0.0000 vt 0.9256 0.8899 0.0000 vt 0.9084 0.8865 0.0000 vt 0.8800 0.8852 0.0000 vt 0.8481 0.8865 0.0000 vt 0.8213 0.8898 0.0000 vt 0.8066 0.8945 0.0000 vt 0.8061 0.9069 0.0000 vt 0.8248 0.9105 0.0000 vt 0.8554 0.9119 0.0000 vt 0.8900 0.9106 0.0000 vt 0.9190 0.9069 0.0000 vt 0.9349 0.9019 0.0000 vt 0.9332 0.8969 0.0000 vt 0.9146 0.8932 0.0000 vt 0.8839 0.8918 0.0000 vt 0.8494 0.8932 0.0000 vt 0.8203 0.8968 0.0000 vt 0.8045 0.9018 0.0000 vt 0.8137 0.9139 0.0000 vt 0.8310 0.9173 0.0000 vt 0.8593 0.9185 0.0000 vt 0.8912 0.9173 0.0000 vt 0.9181 0.9139 0.0000 vt 0.9327 0.9093 0.0000 vt 0.9312 0.9046 0.0000 vt 0.9140 0.9012 0.0000 vt 0.8856 0.9000 0.0000 vt 0.8537 0.9012 0.0000 vt 0.8269 0.9046 0.0000 vt 0.8122 0.9092 0.0000 vt 0.8299 0.9190 0.0000 vt 0.8431 0.9216 0.0000 vt 0.8648 0.9226 0.0000 vt 0.8892 0.9216 0.0000 vt 0.9097 0.9191 0.0000 vt 0.9209 0.9155 0.0000 vt 0.9198 0.9120 0.0000 vt 0.9066 0.9094 0.0000 vt 0.8849 0.9084 0.0000 vt 0.8605 0.9093 0.0000 vt 0.8399 0.9119 0.0000 vt 0.8287 0.9155 0.0000 vt 0.8521 0.9216 0.0000 vt 0.8592 0.9230 0.0000 vt 0.8710 0.9235 0.0000 vt 0.8842 0.9230 0.0000 vt 0.8953 0.9216 0.0000 vt 0.9014 0.9197 0.0000 vt 0.9007 0.9178 0.0000 vt 0.8936 0.9164 0.0000 vt 0.8819 0.9158 0.0000 vt 0.8686 0.9163 0.0000 vt 0.8575 0.9177 0.0000 vt 0.8515 0.9197 0.0000 vt 0.8624 0.8826 0.0000 vt 0.8770 0.9211 0.0000 vt 0.9585 0.9168 0.0000 vt 0.9386 0.9082 0.0000 vt 0.9102 0.9020 0.0000 vt 0.9220 0.9059 0.0000 vt 0.8992 0.9050 0.0000 vt 0.8885 0.9005 0.0000 vt 0.8508 0.9081 0.0000 vt 0.8627 0.9020 0.0000 vt 0.8063 0.9168 0.0000 vt 0.8397 0.9059 0.0000 vt 0.7778 0.9286 0.0000 vt 0.8257 0.9113 0.0000 vt 0.7728 0.9404 0.0000 vt 0.8244 0.9166 0.0000 vt 0.7927 0.9491 0.0000 vt 0.8363 0.9206 0.0000 vt 0.8580 0.9220 0.0000 vt 0.8321 0.9523 0.0000 vt 0.8838 0.9206 0.0000 vt 0.8805 0.9491 0.0000 vt 0.9249 0.9405 0.0000 vt 0.9068 0.9167 0.0000 vt 0.9535 0.9287 0.0000 vt 0.9208 0.9113 0.0000 vt 0.9749 0.9323 0.0000 vt 0.9554 0.9188 0.0000 vt 0.9097 0.9139 0.0000 vt 0.8501 0.9188 0.0000 vt 0.7924 0.9322 0.0000 vt 0.7523 0.9506 0.0000 vt 0.7403 0.9690 0.0000 vt 0.7598 0.9824 0.0000 vt 0.8055 0.9874 0.0000 vt 0.8651 0.9825 0.0000 vt 0.9228 0.9690 0.0000 vt 0.9629 0.9507 0.0000 vt 0.9878 0.9421 0.0000 vt 0.9661 0.9280 0.0000 vt 0.9164 0.9228 0.0000 vt 0.8521 0.9280 0.0000 vt 0.7903 0.9421 0.0000 vt 0.7477 0.9614 0.0000 vt 0.7356 0.9807 0.0000 vt 0.7573 0.9948 0.0000 vt 0.8069 1.0000 0.0000 vt 0.8713 0.9949 0.0000 vt 0.9330 0.9807 0.0000 vt 0.9757 0.9615 0.0000 vt 0.9781 0.9435 0.0000 vt 0.9581 0.9304 0.0000 vt 0.9122 0.9256 0.0000 vt 0.8528 0.9304 0.0000 vt 0.7957 0.9434 0.0000 vt 0.7563 0.9613 0.0000 vt 0.7451 0.9791 0.0000 vt 0.7652 0.9922 0.0000 vt 0.8111 0.9970 0.0000 vt 0.8705 0.9922 0.0000 vt 0.9276 0.9792 0.0000 vt 0.9670 0.9614 0.0000 vt 0.9098 0.9538 0.0000 vt 0.9015 0.9484 0.0000 vt 0.8825 0.9464 0.0000 vt 0.8579 0.9484 0.0000 vt 0.8343 0.9538 0.0000 vt 0.8180 0.9611 0.0000 vt 0.8133 0.9685 0.0000 vt 0.8216 0.9739 0.0000 vt 0.8406 0.9759 0.0000 vt 0.8653 0.9740 0.0000 vt 0.8889 0.9686 0.0000 vt 0.9052 0.9612 0.0000 vt 0.8720 0.9080 0.0000 vt 0.8616 0.9611 0.0000 g Object018 f 563/563/560 564/564/561 565/565/562 f 565/565/562 566/566/563 563/563/560 f 567/567/564 568/568/565 565/565/562 f 565/565/562 564/564/561 567/567/564 f 569/569/566 570/570/567 568/568/565 f 568/568/565 567/567/564 569/569/566 f 571/571/568 572/572/569 570/570/567 f 570/570/567 569/569/566 571/571/568 f 572/572/569 571/571/568 573/573/570 f 573/573/570 574/574/571 572/572/569 f 574/574/571 573/573/570 575/575/572 f 575/575/572 576/576/573 574/574/571 f 575/575/572 577/577/574 578/578/575 f 578/578/575 576/576/573 575/575/572 f 579/579/576 580/580/577 578/578/575 f 578/578/575 577/577/574 579/579/576 f 581/581/578 582/582/579 580/580/577 f 580/580/577 579/579/576 581/581/578 f 583/583/580 584/584/581 582/582/579 f 582/582/579 581/581/578 583/583/580 f 584/584/581 583/583/580 585/585/582 f 585/585/582 586/586/583 584/584/581 f 586/586/583 585/585/582 563/563/560 f 563/563/560 566/566/563 586/586/583 f 587/587/584 588/588/585 564/564/561 f 564/564/561 563/563/560 587/587/584 f 588/588/585 589/589/586 567/567/564 f 567/567/564 564/564/561 588/588/585 f 589/589/586 590/590/587 569/569/566 f 569/569/566 567/567/564 589/589/586 f 590/590/587 591/591/588 571/571/568 f 571/571/568 569/569/566 590/590/587 f 591/591/588 592/592/589 573/573/570 f 573/573/570 571/571/568 591/591/588 f 592/592/589 593/593/590 575/575/572 f 575/575/572 573/573/570 592/592/589 f 593/593/590 594/594/591 577/577/574 f 577/577/574 575/575/572 593/593/590 f 594/594/591 595/595/592 579/579/576 f 579/579/576 577/577/574 594/594/591 f 595/595/592 596/596/593 581/581/578 f 581/581/578 579/579/576 595/595/592 f 596/596/593 597/597/594 583/583/580 f 583/583/580 581/581/578 596/596/593 f 597/597/594 598/598/595 585/585/582 f 585/585/582 583/583/580 597/597/594 f 598/598/595 587/587/584 563/563/560 f 563/563/560 585/585/582 598/598/595 f 599/599/596 600/600/597 588/588/585 f 588/588/585 587/587/584 599/599/596 f 600/600/597 601/601/598 589/589/586 f 589/589/586 588/588/585 600/600/597 f 601/601/598 602/602/599 590/590/587 f 590/590/587 589/589/586 601/601/598 f 602/602/599 603/603/600 591/591/588 f 591/591/588 590/590/587 602/602/599 f 603/603/600 604/604/601 592/592/589 f 592/592/589 591/591/588 603/603/600 f 604/604/601 605/605/602 593/593/590 f 593/593/590 592/592/589 604/604/601 f 605/605/602 606/606/603 594/594/591 f 594/594/591 593/593/590 605/605/602 f 606/606/603 607/607/604 595/595/592 f 595/595/592 594/594/591 606/606/603 f 607/607/604 608/608/605 596/596/593 f 596/596/593 595/595/592 607/607/604 f 608/608/605 609/609/606 597/597/594 f 597/597/594 596/596/593 608/608/605 f 609/609/606 610/610/607 598/598/595 f 598/598/595 597/597/594 609/609/606 f 610/610/607 599/599/596 587/587/584 f 587/587/584 598/598/595 610/610/607 f 611/611/608 612/612/609 600/600/597 f 600/600/597 599/599/596 611/611/608 f 612/612/609 613/613/610 601/601/598 f 601/601/598 600/600/597 612/612/609 f 613/613/610 614/614/611 602/602/599 f 602/602/599 601/601/598 613/613/610 f 614/614/611 615/615/612 603/603/600 f 603/603/600 602/602/599 614/614/611 f 615/615/612 616/616/613 604/604/601 f 604/604/601 603/603/600 615/615/612 f 616/616/613 617/617/614 605/605/602 f 605/605/602 604/604/601 616/616/613 f 617/617/614 618/618/615 606/606/603 f 606/606/603 605/605/602 617/617/614 f 618/618/615 619/619/616 607/607/604 f 607/607/604 606/606/603 618/618/615 f 619/619/616 620/620/617 608/608/605 f 608/608/605 607/607/604 619/619/616 f 620/620/617 621/621/618 609/609/606 f 609/609/606 608/608/605 620/620/617 f 621/621/618 622/622/619 610/610/607 f 610/610/607 609/609/606 621/621/618 f 622/622/619 611/611/608 599/599/596 f 599/599/596 610/610/607 622/622/619 f 623/623/620 624/624/621 612/612/609 f 612/612/609 611/611/608 623/623/620 f 624/624/621 625/625/622 613/613/610 f 613/613/610 612/612/609 624/624/621 f 625/625/622 626/626/623 614/614/611 f 614/614/611 613/613/610 625/625/622 f 626/626/623 627/627/624 615/615/612 f 615/615/612 614/614/611 626/626/623 f 627/627/624 628/628/625 616/616/613 f 616/616/613 615/615/612 627/627/624 f 628/628/625 629/629/626 617/617/614 f 617/617/614 616/616/613 628/628/625 f 629/629/626 630/630/627 618/618/615 f 618/618/615 617/617/614 629/629/626 f 630/630/627 631/631/628 619/619/616 f 619/619/616 618/618/615 630/630/627 f 631/631/628 632/632/629 620/620/617 f 620/620/617 619/619/616 631/631/628 f 632/632/629 633/633/630 621/621/618 f 621/621/618 620/620/617 632/632/629 f 633/633/630 634/634/631 622/622/619 f 622/622/619 621/621/618 633/633/630 f 634/634/631 623/623/620 611/611/608 f 611/611/608 622/622/619 634/634/631 f 635/635/632 636/636/633 624/624/621 f 624/624/621 623/623/620 635/635/632 f 636/636/633 637/637/634 625/625/622 f 625/625/622 624/624/621 636/636/633 f 637/637/634 638/638/635 626/626/623 f 626/626/623 625/625/622 637/637/634 f 638/638/635 639/639/636 627/627/624 f 627/627/624 626/626/623 638/638/635 f 639/639/636 640/640/637 628/628/625 f 628/628/625 627/627/624 639/639/636 f 640/640/637 641/641/638 629/629/626 f 629/629/626 628/628/625 640/640/637 f 641/641/638 642/642/639 630/630/627 f 630/630/627 629/629/626 641/641/638 f 642/642/639 643/643/640 631/631/628 f 631/631/628 630/630/627 642/642/639 f 643/643/640 644/644/641 632/632/629 f 632/632/629 631/631/628 643/643/640 f 644/644/641 645/645/642 633/633/630 f 633/633/630 632/632/629 644/644/641 f 645/645/642 646/646/643 634/634/631 f 634/634/631 633/633/630 645/645/642 f 646/646/643 635/635/632 623/623/620 f 623/623/620 634/634/631 646/646/643 f 565/565/562 647/647/644 566/566/563 f 568/568/565 647/647/644 565/565/562 f 570/570/567 647/647/644 568/568/565 f 572/572/569 647/647/644 570/570/567 f 574/574/571 647/647/644 572/572/569 f 576/576/573 647/647/644 574/574/571 f 578/578/575 647/647/644 576/576/573 f 580/580/577 647/647/644 578/578/575 f 582/582/579 647/647/644 580/580/577 f 584/584/581 647/647/644 582/582/579 f 586/586/583 647/647/644 584/584/581 f 566/566/563 647/647/644 586/586/583 f 635/635/632 648/648/645 636/636/633 f 636/636/633 648/648/645 637/637/634 f 637/637/634 648/648/645 638/638/635 f 638/638/635 648/648/645 639/639/636 f 639/639/636 648/648/645 640/640/637 f 640/640/637 648/648/645 641/641/638 f 641/641/638 648/648/645 642/642/639 f 642/642/639 648/648/645 643/643/640 f 643/643/640 648/648/645 644/644/641 f 644/644/641 648/648/645 645/645/642 f 645/645/642 648/648/645 646/646/643 f 646/646/643 648/648/645 635/635/632 f 649/649/646 650/650/647 651/651/648 f 651/651/648 652/652/649 649/649/646 f 653/653/650 654/654/651 651/651/648 f 651/651/648 650/650/647 653/653/650 f 654/654/651 653/653/650 655/655/652 f 655/655/652 656/656/653 654/654/651 f 657/657/654 658/658/655 656/656/653 f 656/656/653 655/655/652 657/657/654 f 659/659/656 660/660/657 658/658/655 f 658/658/655 657/657/654 659/659/656 f 659/659/656 661/661/658 662/662/659 f 662/662/659 660/660/657 659/659/656 f 662/662/659 661/661/658 663/663/660 f 663/663/660 664/664/661 662/662/659 f 665/665/662 664/664/661 663/663/660 f 663/663/660 666/666/663 665/665/662 f 667/667/664 665/665/662 666/666/663 f 666/666/663 668/668/665 667/667/664 f 668/668/665 669/669/666 670/670/667 f 670/670/667 667/667/664 668/668/665 f 669/669/666 671/671/668 672/672/669 f 672/672/669 670/670/667 669/669/666 f 649/649/646 652/652/649 672/672/669 f 672/672/669 671/671/668 649/649/646 f 649/649/646 673/673/670 674/674/671 f 674/674/671 650/650/647 649/649/646 f 674/674/671 675/675/672 653/653/650 f 653/653/650 650/650/647 674/674/671 f 675/675/672 676/676/673 655/655/652 f 655/655/652 653/653/650 675/675/672 f 676/676/673 677/677/674 657/657/654 f 657/657/654 655/655/652 676/676/673 f 677/677/674 678/678/675 659/659/656 f 659/659/656 657/657/654 677/677/674 f 679/679/676 661/661/658 659/659/656 f 659/659/656 678/678/675 679/679/676 f 680/680/677 663/663/660 661/661/658 f 661/661/658 679/679/676 680/680/677 f 666/666/663 663/663/660 680/680/677 f 680/680/677 681/681/678 666/666/663 f 681/681/678 682/682/679 668/668/665 f 668/668/665 666/666/663 681/681/678 f 669/669/666 668/668/665 682/682/679 f 682/682/679 683/683/680 669/669/666 f 669/669/666 683/683/680 684/684/681 f 684/684/681 671/671/668 669/669/666 f 649/649/646 671/671/668 684/684/681 f 684/684/681 673/673/670 649/649/646 f 674/674/671 673/673/670 685/685/682 f 685/685/682 686/686/683 674/674/671 f 674/674/671 686/686/683 687/687/684 f 687/687/684 675/675/672 674/674/671 f 688/688/685 676/676/673 675/675/672 f 675/675/672 687/687/684 688/688/685 f 676/676/673 688/688/685 689/689/686 f 689/689/686 677/677/674 676/676/673 f 689/689/686 690/690/687 678/678/675 f 678/678/675 677/677/674 689/689/686 f 690/690/687 691/691/688 679/679/676 f 679/679/676 678/678/675 690/690/687 f 680/680/677 679/679/676 691/691/688 f 691/691/688 692/692/689 680/680/677 f 680/680/677 692/692/689 693/693/690 f 693/693/690 681/681/678 680/680/677 f 681/681/678 693/693/690 694/694/691 f 694/694/691 682/682/679 681/681/678 f 682/682/679 694/694/691 695/695/692 f 695/695/692 683/683/680 682/682/679 f 695/695/692 696/696/693 684/684/681 f 684/684/681 683/683/680 695/695/692 f 685/685/682 673/673/670 684/684/681 f 684/684/681 696/696/693 685/685/682 f 697/697/694 698/698/695 686/686/683 f 686/686/683 685/685/682 697/697/694 f 698/698/695 699/699/696 687/687/684 f 687/687/684 686/686/683 698/698/695 f 688/688/685 687/687/684 699/699/696 f 699/699/696 700/700/697 688/688/685 f 688/688/685 700/700/697 701/701/698 f 701/701/698 689/689/686 688/688/685 f 689/689/686 701/701/698 702/702/699 f 702/702/699 690/690/687 689/689/686 f 702/702/699 703/703/700 691/691/688 f 691/691/688 690/690/687 702/702/699 f 704/704/701 692/692/689 691/691/688 f 691/691/688 703/703/700 704/704/701 f 693/693/690 692/692/689 704/704/701 f 704/704/701 705/705/702 693/693/690 f 693/693/690 705/705/702 706/706/703 f 706/706/703 694/694/691 693/693/690 f 707/707/704 695/695/692 694/694/691 f 694/694/691 706/706/703 707/707/704 f 708/708/705 696/696/693 695/695/692 f 695/695/692 707/707/704 708/708/705 f 697/697/694 685/685/682 696/696/693 f 696/696/693 708/708/705 697/697/694 f 698/698/695 697/697/694 709/709/706 f 709/709/706 710/710/707 698/698/695 f 698/698/695 710/710/707 711/711/708 f 711/711/708 699/699/696 698/698/695 f 699/699/696 711/711/708 712/712/709 f 712/712/709 700/700/697 699/699/696 f 712/712/709 713/713/710 701/701/698 f 701/701/698 700/700/697 712/712/709 f 702/702/699 701/701/698 713/713/710 f 713/713/710 714/714/711 702/702/699 f 702/702/699 714/714/711 715/715/712 f 715/715/712 703/703/700 702/702/699 f 716/716/713 704/704/701 703/703/700 f 703/703/700 715/715/712 716/716/713 f 717/717/714 705/705/702 704/704/701 f 704/704/701 716/716/713 717/717/714 f 706/706/703 705/705/702 717/717/714 f 717/717/714 718/718/715 706/706/703 f 718/718/715 719/719/716 707/707/704 f 707/707/704 706/706/703 718/718/715 f 719/719/716 720/720/717 708/708/705 f 708/708/705 707/707/704 719/719/716 f 708/708/705 720/720/717 709/709/706 f 709/709/706 697/697/694 708/708/705 f 651/651/648 721/721/644 652/652/649 f 654/654/651 721/721/644 651/651/648 f 656/656/653 721/721/644 654/654/651 f 658/658/655 721/721/644 656/656/653 f 660/660/657 721/721/644 658/658/655 f 662/662/659 721/721/644 660/660/657 f 664/664/661 721/721/644 662/662/659 f 665/665/662 721/721/644 664/664/661 f 667/667/664 721/721/644 665/665/662 f 670/670/667 721/721/644 667/667/664 f 672/672/669 721/721/644 670/670/667 f 652/652/649 721/721/644 672/672/669 f 709/709/706 722/722/645 710/710/707 f 710/710/707 722/722/645 711/711/708 f 711/711/708 722/722/645 712/712/709 f 712/712/709 722/722/645 713/713/710 f 713/713/710 722/722/645 714/714/711 f 714/714/711 722/722/645 715/715/712 f 715/715/712 722/722/645 716/716/713 f 716/716/713 722/722/645 717/717/714 f 717/717/714 722/722/645 718/718/715 f 718/718/715 722/722/645 719/719/716 f 719/719/716 722/722/645 720/720/717 f 720/720/717 722/722/645 709/709/706 v -6.2925 54.3037 44.5508 v -5.3367 53.0982 46.2747 v -3.8967 52.8454 44.6744 v -5.5132 54.1669 43.6847 v -7.4037 54.4188 44.9088 v -7.3899 53.3105 46.9364 v -8.5490 54.4808 44.6629 v -9.5062 53.4254 46.4820 v -9.4216 54.4736 43.8789 v -11.1186 53.4121 45.0333 v -9.7877 54.3990 42.7669 v -11.7949 53.2742 42.9786 v -9.5491 54.2770 41.6248 v -11.3541 53.0486 40.8683 v -8.7698 54.1401 40.7587 v -9.9141 52.7958 39.2679 v -7.6586 54.0252 40.4008 v -7.8609 52.5835 38.6063 v -6.5133 53.9630 40.6466 v -5.7446 52.4686 39.0607 v -5.6407 53.9703 41.4306 v -4.1322 52.4819 40.5094 v -5.2746 54.0449 42.5426 v -3.4559 52.6198 42.5641 v -4.7761 51.2365 47.5234 v -2.8947 50.9063 45.4323 v -7.4587 51.5139 48.3877 v -10.2238 51.6639 47.7942 v -12.3305 51.6467 45.9012 v -13.2142 51.4664 43.2166 v -12.6382 51.1716 40.4594 v -10.7568 50.8415 38.3684 v -8.0742 50.5640 37.5040 v -5.3091 50.4140 38.0976 v -3.2024 50.4312 39.9904 v -2.3187 50.6114 42.6751 v -4.6961 49.0020 48.1062 v -2.6597 48.6445 45.8430 v -7.5997 49.3022 49.0419 v -10.5927 49.4647 48.3993 v -12.8729 49.4459 46.3506 v -13.8295 49.2509 43.4447 v -13.2060 48.9319 40.4604 v -11.1696 48.5744 38.1971 v -8.2659 48.2743 37.2614 v -5.2730 48.1117 37.9040 v -2.9928 48.1305 39.9527 v -2.0362 48.3255 42.8586 v -5.1088 46.7349 47.9349 v -3.2274 46.4047 45.8439 v -7.7915 47.0124 48.7994 v -10.5566 47.1624 48.2057 v -12.6632 47.1452 46.3129 v -13.5470 46.9650 43.6283 v -12.9710 46.6701 40.8711 v -11.0896 46.3399 38.7800 v -8.4070 46.0624 37.9156 v -5.6418 45.9125 38.5092 v -3.5352 45.9297 40.4021 v -2.6514 46.1100 43.0867 v -5.9515 44.7806 47.0354 v -4.5116 44.5278 45.4350 v -8.0047 44.9929 47.6970 v -10.1211 45.1078 47.2426 v -11.7334 45.0945 45.7940 v -12.4098 44.9566 43.7392 v -11.9690 44.7310 41.6290 v -10.5290 44.4782 40.0286 v -8.4758 44.2659 39.3670 v -6.3595 44.1510 39.8214 v -4.7471 44.1643 41.2700 v -4.0707 44.3022 43.3248 v -7.0959 43.4363 45.5446 v -6.3166 43.2993 44.6785 v -8.2070 43.5512 45.9027 v -9.3524 43.6133 45.6568 v -10.2250 43.6060 44.8728 v -10.5911 43.5315 43.7607 v -10.3525 43.4094 42.6187 v -9.5732 43.2726 41.7526 v -8.4620 43.1576 41.3945 v -7.3166 43.0956 41.6404 v -6.4440 43.1027 42.4244 v -6.0780 43.1774 43.5364 v -7.4980 54.6697 42.6138 v -8.3676 42.9067 43.6895 v -4.2999 44.2463 49.6143 v -1.7830 43.8129 46.9102 v -2.4357 47.2515 46.1360 v -4.5981 47.6311 48.5393 v -7.6815 47.9498 49.5330 v -7.8816 44.6166 50.7685 v -10.8596 48.1224 48.8505 v -11.5734 44.8170 49.9758 v -13.2808 48.1025 46.6751 v -14.3811 44.8015 47.5363 v -14.2966 47.8954 43.5894 v -15.5610 44.5609 43.9520 v -13.6345 47.5566 40.4204 v -14.7920 44.1674 40.2707 v -12.3247 43.6576 36.6902 v -11.5168 47.1082 37.2284 v -8.4335 46.7892 36.2350 v -8.7430 43.2872 35.5360 v -5.2554 46.6168 36.9172 v -5.0512 43.0868 36.3287 v -2.7894 46.7056 39.8814 v -2.1939 43.1788 39.6446 v -1.7737 46.9127 42.9670 v -1.0140 43.4194 43.2290 v -6.2231 46.2733 46.3090 v -5.0246 46.0629 44.9771 v -8.1280 46.1475 43.3931 v -7.9320 46.4500 46.8597 v -9.6934 46.5456 46.4815 v -11.0354 46.5346 45.2758 v -11.5984 46.4198 43.5656 v -11.2314 46.2321 41.8092 v -10.0330 46.0216 40.4773 v -8.3241 45.8450 39.9266 v -6.5627 45.7493 40.3048 v -5.2207 45.7604 41.5105 v -4.6577 45.8752 43.2207 v -9.1434 7.3427 47.8812 v -9.8576 7.4682 48.6750 v -10.9929 7.3931 46.9373 v -10.8761 7.5734 49.0032 v -11.9258 7.6305 48.7778 v -12.7256 7.6238 48.0593 v -13.0611 7.5554 47.0401 v -12.8424 7.4435 45.9934 v -12.1282 7.3181 45.1996 v -11.1097 7.2128 44.8714 v -10.0600 7.1558 45.0968 v -9.2602 7.1624 45.8153 v -8.9248 7.2308 46.8345 v -11.6309 42.9811 50.2812 v -8.0110 42.7846 51.0584 v -4.4990 42.4215 49.9267 v -2.0459 41.9738 47.0141 v -1.2919 41.5879 43.4045 v -2.4488 41.3520 39.8899 v -5.2513 41.2606 36.6233 v -8.8712 41.4570 35.8460 v -12.3832 41.8202 36.9777 v -14.8015 42.3213 40.5039 v -15.5556 42.7072 44.1134 v -14.3987 42.9431 47.6280 v -10.6361 8.6112 52.1942 v -13.3422 8.7581 51.6132 v -13.0804 6.9887 51.0058 v -10.8079 6.8654 51.4937 v -8.6031 6.6374 50.7833 v -8.0106 8.3397 51.3482 v -7.0569 6.3659 49.0648 v -6.1694 8.0165 49.3018 v -5.6057 7.7281 46.6034 v -6.5835 6.1238 46.7987 v -7.3098 5.9757 44.5923 v -6.4705 7.5518 43.9760 v -9.0412 5.9614 43.0367 v -8.5323 7.5348 42.1237 v -11.3137 6.0847 42.5488 v -11.2384 7.6817 41.5426 v -13.8638 7.9532 42.3886 v -13.5185 6.3128 43.2593 v -15.0647 6.5842 44.9777 v -15.7051 8.2764 44.4350 v -15.5381 6.8265 47.2438 v -16.2688 8.5648 47.1334 v -14.8118 6.9744 49.4502 v -15.4039 8.7411 49.7608 v -5.2114 47.5906 47.6005 v -3.4349 47.2787 45.6261 v -7.7446 47.8525 48.4168 v -10.3556 47.9943 47.8562 v -12.3448 47.9779 46.0689 v -13.1793 47.8077 43.5339 v -12.6354 47.5294 40.9304 v -10.8589 47.2175 38.9559 v -8.3703 46.8868 37.3509 v -5.7147 46.8139 38.7002 v -3.7255 46.8303 40.4875 v -2.8910 47.0004 43.0226 v -9.3062 6.5909 49.7070 v -8.2024 6.3971 48.4801 v -10.8802 6.7538 50.2142 v -12.5026 6.8417 49.8658 v -13.7386 6.8315 48.7553 v -14.2571 6.7259 47.1801 v -13.9192 6.5530 45.5624 v -12.8153 6.3592 44.3355 v -11.2413 6.1964 43.8285 v -9.6190 6.1084 44.1767 v -8.3829 6.1186 45.2872 v -7.8644 6.2243 46.8624 v -10.4919 10.4653 52.1672 v -13.2699 10.6162 51.5707 v -7.7968 10.1867 51.2987 v -5.9066 9.8547 49.1980 v -5.3279 9.5587 46.4280 v -6.2158 9.3777 43.7308 v -8.3323 9.3603 41.8292 v -11.1102 9.5111 41.2328 v -13.8054 9.7897 42.1012 v -15.6955 10.1216 44.2020 v -16.2742 10.4177 46.9720 v -15.3864 10.5986 49.6692 v -12.1240 37.6260 50.6707 v -8.4112 37.4244 51.4679 v -4.8091 37.0520 50.3071 v -2.2780 36.6161 47.5872 v -1.5045 36.2204 43.8850 v -2.6912 35.9785 40.2802 v -5.8944 31.4233 37.3581 v -9.6072 31.6248 36.5609 v -13.2093 31.9973 37.7216 v -15.3610 36.9726 40.9099 v -16.1344 37.3684 44.6121 v -14.9478 37.6103 48.2169 v -14.5476 19.5853 48.7333 v -15.4019 19.4111 46.1378 v -12.4315 19.7244 51.9655 v -9.7582 19.5792 52.5395 v -7.1647 19.3111 51.7037 v -5.4250 18.8694 48.2799 v -4.8682 18.5845 45.6143 v -5.7226 18.4102 43.0188 v -7.8534 18.2481 39.5237 v -10.5267 18.3933 38.9497 v -13.1203 18.6614 39.7854 v -14.8451 19.1260 43.4722 vn 0.2910 0.9208 0.2599 vn 0.4457 0.7127 0.5417 vn 0.6941 0.6691 0.2656 vn 0.4318 0.8960 0.1033 vn 0.0900 0.9415 0.3246 vn 0.0914 0.7493 0.6559 vn -0.1171 0.9528 0.2802 vn -0.2738 0.7691 0.5775 vn -0.2748 0.9515 0.1385 vn -0.5520 0.7668 0.3275 vn -0.3410 0.9380 -0.0625 vn -0.6687 0.7430 -0.0270 vn -0.2978 0.9159 -0.2691 vn -0.5926 0.7041 -0.3912 vn -0.1569 0.8912 -0.4257 vn -0.3442 0.6605 -0.6673 vn 0.0439 0.8704 -0.4904 vn 0.0101 0.6239 -0.7815 vn 0.2509 0.8592 -0.4459 vn 0.3753 0.6040 -0.7031 vn 0.4087 0.8605 -0.3042 vn 0.6535 0.6063 -0.4531 vn 0.4749 0.8740 -0.1031 vn 0.7702 0.6301 -0.0985 vn 0.5347 0.4027 0.7429 vn 0.8539 0.3467 0.3881 vn 0.0795 0.4498 0.8896 vn -0.3897 0.4753 0.7889 vn -0.7471 0.4723 0.4677 vn -0.8971 0.4417 0.0122 vn -0.7993 0.3917 -0.4556 vn -0.4801 0.3357 -0.8104 vn -0.0249 0.2886 -0.9571 vn 0.4442 0.2632 -0.8564 vn 0.8017 0.2661 -0.5352 vn 0.9516 0.2967 -0.0797 vn 0.5466 0.0361 0.8366 vn 0.8904 -0.0243 0.4545 vn 0.0562 0.0868 0.9946 vn -0.4492 0.1142 0.8861 vn -0.8342 0.1111 0.5402 vn -0.9957 0.0781 0.0495 vn -0.8904 0.0243 -0.4545 vn -0.5466 -0.0361 -0.8366 vn -0.0562 -0.0868 -0.9946 vn 0.4491 -0.1142 -0.8861 vn 0.8342 -0.1111 -0.5402 vn 0.9957 -0.0781 -0.0495 vn 0.4801 -0.3357 0.8104 vn 0.7993 -0.3917 0.4556 vn 0.0249 -0.2886 0.9571 vn -0.4443 -0.2632 0.8564 vn -0.8017 -0.2661 0.5352 vn -0.9516 -0.2967 0.0797 vn -0.8539 -0.3467 -0.3881 vn -0.5347 -0.4027 -0.7429 vn -0.0795 -0.4498 -0.8896 vn 0.3897 -0.4752 -0.7889 vn 0.7471 -0.4723 -0.4677 vn 0.8971 -0.4417 -0.0122 vn 0.3442 -0.6605 0.6673 vn 0.5927 -0.7041 0.3912 vn -0.0101 -0.6239 0.7815 vn -0.3753 -0.6040 0.7031 vn -0.6535 -0.6063 0.4531 vn -0.7702 -0.6301 0.0985 vn -0.6941 -0.6691 -0.2656 vn -0.4457 -0.7127 -0.5417 vn -0.0914 -0.7493 -0.6559 vn 0.2738 -0.7691 -0.5775 vn 0.5520 -0.7668 -0.3275 vn 0.6687 -0.7430 0.0270 vn 0.1569 -0.8912 0.4257 vn 0.2978 -0.9159 0.2690 vn -0.0439 -0.8704 0.4904 vn -0.2510 -0.8592 0.4459 vn -0.4087 -0.8605 0.3042 vn -0.4749 -0.8740 0.1031 vn -0.4318 -0.8960 -0.1033 vn -0.2909 -0.9208 -0.2599 vn -0.0900 -0.9415 -0.3246 vn 0.1171 -0.9528 -0.2802 vn 0.2748 -0.9515 -0.1385 vn 0.3410 -0.9380 0.0625 vn 0.0734 0.9932 -0.0908 vn -0.0734 -0.9932 0.0908 vn 0.5517 0.1899 0.8122 vn 0.8935 0.0845 0.4411 vn 0.6388 0.7333 0.2327 vn 0.4162 0.7674 0.4876 vn 0.0922 0.7999 0.5930 vn 0.0674 0.2460 0.9669 vn -0.2416 0.8191 0.5203 vn -0.4423 0.2593 0.8586 vn -0.4908 0.8220 0.2888 vn -0.8179 0.2123 0.5348 vn -0.5970 0.8014 -0.0362 vn -0.9830 0.1793 0.0399 vn -0.5350 0.7815 -0.3209 vn -0.9046 0.1337 -0.4048 vn -0.5880 0.0740 -0.8054 vn -0.3532 0.7199 -0.5974 vn 0.0186 0.6933 -0.7204 vn -0.0484 0.0153 -0.9987 vn 0.4003 0.6608 -0.6349 vn 0.5105 -0.0125 -0.8598 vn 0.6158 0.6912 -0.3781 vn 0.8698 -0.0059 -0.4933 vn 0.7079 0.6990 -0.1010 vn 0.9980 0.0239 -0.0585 vn -0.1299 0.9124 -0.3882 vn -0.2547 0.9343 -0.2495 vn 0.0480 0.8940 -0.4456 vn 0.2314 0.8840 -0.4062 vn 0.3711 0.8852 -0.2806 vn 0.4297 0.8971 -0.1026 vn 0.3915 0.9167 0.0803 vn 0.2667 0.9386 0.2190 vn 0.1150 0.9732 0.1992 vn -0.1119 0.9727 0.2035 vn -0.2343 0.9658 0.1114 vn -0.2929 0.9538 -0.0667 vn -0.4090 -0.9080 -0.0902 vn -0.2772 -0.9312 -0.2367 vn -0.0894 -0.9506 -0.2973 vn 0.1043 -0.9611 -0.2557 vn 0.2519 -0.9599 -0.1231 vn 0.3137 -0.9473 0.0649 vn 0.2734 -0.9267 0.2580 vn 0.1416 -0.9035 0.4045 vn -0.0462 -0.8841 0.4650 vn -0.2399 -0.8736 0.4234 vn -0.3875 -0.8748 0.2909 vn -0.4493 -0.8874 0.1029 vn -0.4501 0.1384 0.8822 vn 0.0581 0.1118 0.9920 vn 0.5472 0.0485 0.8356 vn 0.8933 -0.0522 0.4464 vn 0.9939 -0.0994 -0.0475 vn 0.8664 -0.1293 -0.4824 vn 0.5028 -0.1420 -0.8527 vn -0.0584 -0.1158 -0.9916 vn -0.6000 -0.0558 -0.7980 vn -0.9194 0.0105 -0.3932 vn -0.9971 0.0569 0.0514 vn -0.8392 0.0971 0.5350 vn 0.0350 -0.1770 0.9836 vn -0.4527 -0.1505 0.8789 vn -0.3203 -0.7428 0.5880 vn -0.0272 -0.7587 0.6509 vn 0.2572 -0.7881 0.5593 vn 0.5081 -0.2259 0.8311 vn 0.4567 -0.8231 0.3376 vn 0.8399 -0.2841 0.4624 vn 0.9415 -0.3361 -0.0239 vn 0.5178 -0.8543 0.0453 vn 0.4241 -0.8734 -0.2393 vn 0.7857 -0.3679 -0.4974 vn 0.2007 -0.8753 -0.4400 vn 0.4141 -0.3709 -0.8312 vn -0.0924 -0.8594 -0.5029 vn -0.0735 -0.3445 -0.9359 vn -0.5467 -0.2955 -0.7835 vn -0.3769 -0.8300 -0.4113 vn -0.5763 -0.7949 -0.1896 vn -0.8785 -0.2373 -0.4147 vn -0.6374 -0.7637 0.1027 vn -0.9801 -0.1853 0.0716 vn -0.5437 -0.7446 0.3873 vn -0.8242 -0.1535 0.5451 vn -0.0758 0.9471 -0.3118 vn -0.1679 0.9633 -0.2093 vn 0.0557 0.9336 -0.3541 vn 0.1911 0.9262 -0.3250 vn 0.2943 0.9270 -0.2323 vn 0.3376 0.9359 -0.1008 vn 0.3094 0.9503 0.0343 vn 0.2376 0.9622 0.1331 vn 0.0877 0.9931 0.0774 vn -0.0930 0.9834 0.1558 vn -0.1529 0.9866 0.0573 vn -0.1962 0.9778 -0.0742 vn -0.2258 -0.9625 -0.1507 vn -0.3234 -0.9453 -0.0421 vn -0.0864 -0.9769 -0.1956 vn 0.0573 -0.9847 -0.1648 vn 0.1667 -0.9838 -0.0665 vn 0.2126 -0.9744 0.0730 vn 0.1826 -0.9591 0.2162 vn 0.0849 -0.9419 0.3248 vn -0.0544 -0.9275 0.3698 vn -0.1980 -0.9197 0.3389 vn -0.3074 -0.9206 0.2406 vn -0.3534 -0.9300 0.1011 vn 0.0483 -0.0174 0.9987 vn -0.4599 0.0210 0.8877 vn 0.5600 -0.0354 0.8277 vn 0.8882 -0.0507 0.4567 vn 0.9934 -0.1046 -0.0471 vn 0.8319 -0.1375 -0.5376 vn 0.4674 -0.1908 -0.8632 vn -0.0646 -0.2043 -0.9768 vn -0.5578 -0.1402 -0.8180 vn -0.9018 -0.0244 -0.4316 vn -0.9973 0.0517 0.0519 vn -0.8458 0.0629 0.5298 vn -0.4570 0.0754 0.8863 vn 0.0545 0.0639 0.9965 vn 0.5529 0.0016 0.8332 vn 0.8831 -0.0626 0.4650 vn 0.9920 -0.1174 -0.0459 vn 0.8700 -0.1319 -0.4751 vn 0.5329 -0.1711 -0.8287 vn -0.0587 -0.1206 -0.9910 vn -0.6321 -0.0797 -0.7708 vn -0.9225 0.0088 -0.3860 vn -0.9978 0.0387 0.0530 vn -0.8348 0.0664 0.5465 vn -0.8965 0.0728 0.4370 vn -0.9980 0.0321 0.0536 vn -0.5423 0.0572 0.8382 vn 0.0501 0.0063 0.9987 vn 0.6318 -0.0506 0.7735 vn 0.9294 -0.0860 0.3588 vn 0.9913 -0.1240 -0.0452 vn 0.8929 -0.1686 -0.4175 vn 0.5475 -0.2298 -0.8046 vn -0.0648 -0.2081 -0.9760 vn -0.6434 -0.1209 -0.7560 vn -0.9491 -0.0044 -0.3150 vt 0.4161 0.4283 0.0000 vt 0.4294 0.4397 0.0000 vt 0.4629 0.4355 0.0000 vt 0.4342 0.4260 0.0000 vt 0.3945 0.4291 0.0000 vt 0.3896 0.4412 0.0000 vt 0.3754 0.4283 0.0000 vt 0.3542 0.4397 0.0000 vt 0.3637 0.4260 0.0000 vt 0.3326 0.4354 0.0000 vt 0.3627 0.4228 0.0000 vt 0.3308 0.4296 0.0000 vt 0.3726 0.4197 0.0000 vt 0.3491 0.4239 0.0000 vt 0.3907 0.4174 0.0000 vt 0.3826 0.4196 0.0000 vt 0.4123 0.4166 0.0000 vt 0.4224 0.4181 0.0000 vt 0.4315 0.4174 0.0000 vt 0.4578 0.4197 0.0000 vt 0.4431 0.4197 0.0000 vt 0.4793 0.4239 0.0000 vt 0.4441 0.4229 0.0000 vt 0.4812 0.4297 0.0000 vt 0.4404 0.4530 0.0000 vt 0.4842 0.4475 0.0000 vt 0.3884 0.4550 0.0000 vt 0.3422 0.4529 0.0000 vt 0.3140 0.4474 0.0000 vt 0.3116 0.4398 0.0000 vt 0.3355 0.4323 0.0000 vt 0.3793 0.4268 0.0000 vt 0.4313 0.4248 0.0000 vt 0.4776 0.4268 0.0000 vt 0.5057 0.4324 0.0000 vt 0.5081 0.4399 0.0000 vt 0.4475 0.4661 0.0000 vt 0.4949 0.4601 0.0000 vt 0.3912 0.4683 0.0000 vt 0.3411 0.4661 0.0000 vt 0.3107 0.4600 0.0000 vt 0.3080 0.4519 0.0000 vt 0.3339 0.4437 0.0000 vt 0.3813 0.4377 0.0000 vt 0.4376 0.4356 0.0000 vt 0.4877 0.4378 0.0000 vt 0.5181 0.4438 0.0000 vt 0.5208 0.4520 0.0000 vt 0.4495 0.4771 0.0000 vt 0.4934 0.4715 0.0000 vt 0.3975 0.4791 0.0000 vt 0.3513 0.4770 0.0000 vt 0.3231 0.4715 0.0000 vt 0.3207 0.4639 0.0000 vt 0.3446 0.4563 0.0000 vt 0.3884 0.4508 0.0000 vt 0.4404 0.4488 0.0000 vt 0.4867 0.4509 0.0000 vt 0.5148 0.4564 0.0000 vt 0.5172 0.4640 0.0000 vt 0.4462 0.4842 0.0000 vt 0.4798 0.4800 0.0000 vt 0.4064 0.4857 0.0000 vt 0.3710 0.4841 0.0000 vt 0.3495 0.4799 0.0000 vt 0.3476 0.4741 0.0000 vt 0.3659 0.4683 0.0000 vt 0.3994 0.4641 0.0000 vt 0.4392 0.4626 0.0000 vt 0.4746 0.4641 0.0000 vt 0.4962 0.4684 0.0000 vt 0.4980 0.4742 0.0000 vt 0.4381 0.4864 0.0000 vt 0.4562 0.4841 0.0000 vt 0.4165 0.4872 0.0000 vt 0.3974 0.4864 0.0000 vt 0.3857 0.4841 0.0000 vt 0.3847 0.4809 0.0000 vt 0.3946 0.4778 0.0000 vt 0.4127 0.4755 0.0000 vt 0.4343 0.4747 0.0000 vt 0.4534 0.4756 0.0000 vt 0.4651 0.4779 0.0000 vt 0.4661 0.4810 0.0000 vt 0.4025 0.4205 0.0000 vt 0.4263 0.4834 0.0000 vt 0.4653 0.4948 0.0000 vt 0.5234 0.4877 0.0000 vt 0.5027 0.4680 0.0000 vt 0.4523 0.4744 0.0000 vt 0.3926 0.4767 0.0000 vt 0.3958 0.4975 0.0000 vt 0.3394 0.4743 0.0000 vt 0.3341 0.4948 0.0000 vt 0.3071 0.4680 0.0000 vt 0.2962 0.4876 0.0000 vt 0.3043 0.4593 0.0000 vt 0.2929 0.4775 0.0000 vt 0.3317 0.4506 0.0000 vt 0.3248 0.4674 0.0000 vt 0.3864 0.4579 0.0000 vt 0.3852 0.4421 0.0000 vt 0.4450 0.4398 0.0000 vt 0.4558 0.4552 0.0000 vt 0.4981 0.4421 0.0000 vt 0.5176 0.4579 0.0000 vt 0.5273 0.4507 0.0000 vt 0.5521 0.4675 0.0000 vt 0.5302 0.4594 0.0000 vt 0.5553 0.4776 0.0000 vt 0.4392 0.4744 0.0000 vt 0.4671 0.4709 0.0000 vt 0.4198 0.4660 0.0000 vt 0.4061 0.4757 0.0000 vt 0.3766 0.4744 0.0000 vt 0.3587 0.4708 0.0000 vt 0.3572 0.4660 0.0000 vt 0.3724 0.4612 0.0000 vt 0.4003 0.4577 0.0000 vt 0.4334 0.4564 0.0000 vt 0.4629 0.4577 0.0000 vt 0.4808 0.4612 0.0000 vt 0.4824 0.4661 0.0000 vt 0.5264 0.6761 0.0000 vt 0.5098 0.6782 0.0000 vt 0.4982 0.6733 0.0000 vt 0.4901 0.6790 0.0000 vt 0.4725 0.6782 0.0000 vt 0.4618 0.6761 0.0000 vt 0.4609 0.6732 0.0000 vt 0.4700 0.6704 0.0000 vt 0.4866 0.6683 0.0000 vt 0.5063 0.6675 0.0000 vt 0.5239 0.6683 0.0000 vt 0.5346 0.6704 0.0000 vt 0.5355 0.6733 0.0000 vt 0.3385 0.5050 0.0000 vt 0.3991 0.5077 0.0000 vt 0.4672 0.5051 0.0000 vt 0.5252 0.4974 0.0000 vt 0.5565 0.4875 0.0000 vt 0.5533 0.4776 0.0000 vt 0.5196 0.4681 0.0000 vt 0.4590 0.4654 0.0000 vt 0.3909 0.4681 0.0000 vt 0.3305 0.4775 0.0000 vt 0.2992 0.4874 0.0000 vt 0.3024 0.4973 0.0000 vt 0.4757 0.6840 0.0000 vt 0.4304 0.6820 0.0000 vt 0.4444 0.6889 0.0000 vt 0.4824 0.6906 0.0000 vt 0.5252 0.6889 0.0000 vt 0.5266 0.6821 0.0000 vt 0.5612 0.6844 0.0000 vt 0.5695 0.6767 0.0000 vt 0.5929 0.6693 0.0000 vt 0.5808 0.6782 0.0000 vt 0.5788 0.6720 0.0000 vt 0.5905 0.6619 0.0000 vt 0.5557 0.6674 0.0000 vt 0.5629 0.6564 0.0000 vt 0.5177 0.6657 0.0000 vt 0.5177 0.6544 0.0000 vt 0.4668 0.6564 0.0000 vt 0.4749 0.6674 0.0000 vt 0.4389 0.6719 0.0000 vt 0.4239 0.6618 0.0000 vt 0.4193 0.6781 0.0000 vt 0.4005 0.6692 0.0000 vt 0.4213 0.6843 0.0000 vt 0.4029 0.6766 0.0000 vt 0.4461 0.4717 0.0000 vt 0.4875 0.4665 0.0000 vt 0.3970 0.4736 0.0000 vt 0.3533 0.4716 0.0000 vt 0.3267 0.4664 0.0000 vt 0.3244 0.4593 0.0000 vt 0.3470 0.4521 0.0000 vt 0.3883 0.4469 0.0000 vt 0.4406 0.4428 0.0000 vt 0.4811 0.4470 0.0000 vt 0.5077 0.4522 0.0000 vt 0.5100 0.4594 0.0000 vt 0.5180 0.6859 0.0000 vt 0.5437 0.6826 0.0000 vt 0.4875 0.6870 0.0000 vt 0.4603 0.6858 0.0000 vt 0.4438 0.6826 0.0000 vt 0.4424 0.6781 0.0000 vt 0.4564 0.6737 0.0000 vt 0.4821 0.6705 0.0000 vt 0.5126 0.6693 0.0000 vt 0.5398 0.6705 0.0000 vt 0.5563 0.6738 0.0000 vt 0.5577 0.6782 0.0000 vt 0.4714 0.6746 0.0000 vt 0.4249 0.6725 0.0000 vt 0.5237 0.6726 0.0000 vt 0.5677 0.6670 0.0000 vt 0.5917 0.6594 0.0000 vt 0.5892 0.6518 0.0000 vt 0.5610 0.6463 0.0000 vt 0.5145 0.6442 0.0000 vt 0.4622 0.6462 0.0000 vt 0.4182 0.6517 0.0000 vt 0.3942 0.6593 0.0000 vt 0.3967 0.6669 0.0000 vt 0.3481 0.5333 0.0000 vt 0.4103 0.5361 0.0000 vt 0.4801 0.5334 0.0000 vt 0.5386 0.5262 0.0000 vt 0.5706 0.5161 0.0000 vt 0.5674 0.5059 0.0000 vt 0.5417 0.5202 0.0000 vt 0.4796 0.5174 0.0000 vt 0.4098 0.5201 0.0000 vt 0.3388 0.5058 0.0000 vt 0.3067 0.5160 0.0000 vt 0.3100 0.5261 0.0000 vt 0.3821 0.6185 0.0000 vt 0.3797 0.6112 0.0000 vt 0.4037 0.6277 0.0000 vt 0.4485 0.6297 0.0000 vt 0.4987 0.6278 0.0000 vt 0.5466 0.6185 0.0000 vt 0.5697 0.6112 0.0000 vt 0.5674 0.6039 0.0000 vt 0.5467 0.5939 0.0000 vt 0.5020 0.5920 0.0000 vt 0.4517 0.5939 0.0000 vt 0.4028 0.6039 0.0000 g Object011 f 723/723/718 724/724/719 725/725/720 f 725/725/720 726/726/721 723/723/718 f 724/724/719 723/723/718 727/727/722 f 727/727/722 728/728/723 724/724/719 f 728/728/723 727/727/722 729/729/724 f 729/729/724 730/730/725 728/728/723 f 730/730/725 729/729/724 731/731/726 f 731/731/726 732/732/727 730/730/725 f 731/731/726 733/733/728 734/734/729 f 734/734/729 732/732/727 731/731/726 f 733/733/728 735/735/730 736/736/731 f 736/736/731 734/734/729 733/733/728 f 737/737/732 738/738/733 736/736/731 f 736/736/731 735/735/730 737/737/732 f 738/738/733 737/737/732 739/739/734 f 739/739/734 740/740/735 738/738/733 f 740/740/735 739/739/734 741/741/736 f 741/741/736 742/742/737 740/740/735 f 742/742/737 741/741/736 743/743/738 f 743/743/738 744/744/739 742/742/737 f 743/743/738 745/745/740 746/746/741 f 746/746/741 744/744/739 743/743/738 f 745/745/740 726/726/721 725/725/720 f 725/725/720 746/746/741 745/745/740 f 724/724/719 747/747/742 748/748/743 f 748/748/743 725/725/720 724/724/719 f 728/728/723 749/749/744 747/747/742 f 747/747/742 724/724/719 728/728/723 f 730/730/725 750/750/745 749/749/744 f 749/749/744 728/728/723 730/730/725 f 732/732/727 751/751/746 750/750/745 f 750/750/745 730/730/725 732/732/727 f 734/734/729 752/752/747 751/751/746 f 751/751/746 732/732/727 734/734/729 f 736/736/731 753/753/748 752/752/747 f 752/752/747 734/734/729 736/736/731 f 738/738/733 754/754/749 753/753/748 f 753/753/748 736/736/731 738/738/733 f 740/740/735 755/755/750 754/754/749 f 754/754/749 738/738/733 740/740/735 f 742/742/737 756/756/751 755/755/750 f 755/755/750 740/740/735 742/742/737 f 744/744/739 757/757/752 756/756/751 f 756/756/751 742/742/737 744/744/739 f 746/746/741 758/758/753 757/757/752 f 757/757/752 744/744/739 746/746/741 f 725/725/720 748/748/743 758/758/753 f 758/758/753 746/746/741 725/725/720 f 747/747/742 759/759/754 760/760/755 f 760/760/755 748/748/743 747/747/742 f 749/749/744 761/761/756 759/759/754 f 759/759/754 747/747/742 749/749/744 f 750/750/745 762/762/757 761/761/756 f 761/761/756 749/749/744 750/750/745 f 751/751/746 763/763/758 762/762/757 f 762/762/757 750/750/745 751/751/746 f 752/752/747 764/764/759 763/763/758 f 763/763/758 751/751/746 752/752/747 f 753/753/748 765/765/760 764/764/759 f 764/764/759 752/752/747 753/753/748 f 754/754/749 766/766/761 765/765/760 f 765/765/760 753/753/748 754/754/749 f 755/755/750 767/767/762 766/766/761 f 766/766/761 754/754/749 755/755/750 f 756/756/751 768/768/763 767/767/762 f 767/767/762 755/755/750 756/756/751 f 757/757/752 769/769/764 768/768/763 f 768/768/763 756/756/751 757/757/752 f 758/758/753 770/770/765 769/769/764 f 769/769/764 757/757/752 758/758/753 f 748/748/743 760/760/755 770/770/765 f 770/770/765 758/758/753 748/748/743 f 759/759/754 771/771/766 772/772/767 f 772/772/767 760/760/755 759/759/754 f 761/761/756 773/773/768 771/771/766 f 771/771/766 759/759/754 761/761/756 f 762/762/757 774/774/769 773/773/768 f 773/773/768 761/761/756 762/762/757 f 763/763/758 775/775/770 774/774/769 f 774/774/769 762/762/757 763/763/758 f 764/764/759 776/776/771 775/775/770 f 775/775/770 763/763/758 764/764/759 f 765/765/760 777/777/772 776/776/771 f 776/776/771 764/764/759 765/765/760 f 766/766/761 778/778/773 777/777/772 f 777/777/772 765/765/760 766/766/761 f 767/767/762 779/779/774 778/778/773 f 778/778/773 766/766/761 767/767/762 f 768/768/763 780/780/775 779/779/774 f 779/779/774 767/767/762 768/768/763 f 769/769/764 781/781/776 780/780/775 f 780/780/775 768/768/763 769/769/764 f 770/770/765 782/782/777 781/781/776 f 781/781/776 769/769/764 770/770/765 f 760/760/755 772/772/767 782/782/777 f 782/782/777 770/770/765 760/760/755 f 771/771/766 783/783/778 784/784/779 f 784/784/779 772/772/767 771/771/766 f 773/773/768 785/785/780 783/783/778 f 783/783/778 771/771/766 773/773/768 f 774/774/769 786/786/781 785/785/780 f 785/785/780 773/773/768 774/774/769 f 775/775/770 787/787/782 786/786/781 f 786/786/781 774/774/769 775/775/770 f 776/776/771 788/788/783 787/787/782 f 787/787/782 775/775/770 776/776/771 f 777/777/772 789/789/784 788/788/783 f 788/788/783 776/776/771 777/777/772 f 778/778/773 790/790/785 789/789/784 f 789/789/784 777/777/772 778/778/773 f 779/779/774 791/791/786 790/790/785 f 790/790/785 778/778/773 779/779/774 f 780/780/775 792/792/787 791/791/786 f 791/791/786 779/779/774 780/780/775 f 781/781/776 793/793/788 792/792/787 f 792/792/787 780/780/775 781/781/776 f 782/782/777 794/794/789 793/793/788 f 793/793/788 781/781/776 782/782/777 f 772/772/767 784/784/779 794/794/789 f 794/794/789 782/782/777 772/772/767 f 783/783/778 795/795/790 796/796/791 f 796/796/791 784/784/779 783/783/778 f 785/785/780 797/797/792 795/795/790 f 795/795/790 783/783/778 785/785/780 f 786/786/781 798/798/793 797/797/792 f 797/797/792 785/785/780 786/786/781 f 787/787/782 799/799/794 798/798/793 f 798/798/793 786/786/781 787/787/782 f 788/788/783 800/800/795 799/799/794 f 799/799/794 787/787/782 788/788/783 f 789/789/784 801/801/796 800/800/795 f 800/800/795 788/788/783 789/789/784 f 790/790/785 802/802/797 801/801/796 f 801/801/796 789/789/784 790/790/785 f 791/791/786 803/803/798 802/802/797 f 802/802/797 790/790/785 791/791/786 f 792/792/787 804/804/799 803/803/798 f 803/803/798 791/791/786 792/792/787 f 793/793/788 805/805/800 804/804/799 f 804/804/799 792/792/787 793/793/788 f 794/794/789 806/806/801 805/805/800 f 805/805/800 793/793/788 794/794/789 f 784/784/779 796/796/791 806/806/801 f 806/806/801 794/794/789 784/784/779 f 723/723/718 726/726/721 807/807/802 f 727/727/722 723/723/718 807/807/802 f 729/729/724 727/727/722 807/807/802 f 731/731/726 729/729/724 807/807/802 f 733/733/728 731/731/726 807/807/802 f 735/735/730 733/733/728 807/807/802 f 737/737/732 735/735/730 807/807/802 f 739/739/734 737/737/732 807/807/802 f 741/741/736 739/739/734 807/807/802 f 743/743/738 741/741/736 807/807/802 f 745/745/740 743/743/738 807/807/802 f 726/726/721 745/745/740 807/807/802 f 796/796/791 795/795/790 808/808/803 f 795/795/790 797/797/792 808/808/803 f 797/797/792 798/798/793 808/808/803 f 798/798/793 799/799/794 808/808/803 f 799/799/794 800/800/795 808/808/803 f 800/800/795 801/801/796 808/808/803 f 801/801/796 802/802/797 808/808/803 f 802/802/797 803/803/798 808/808/803 f 803/803/798 804/804/799 808/808/803 f 804/804/799 805/805/800 808/808/803 f 805/805/800 806/806/801 808/808/803 f 806/806/801 796/796/791 808/808/803 f 809/809/804 810/810/805 811/811/806 f 811/811/806 812/812/807 809/809/804 f 809/809/804 812/812/807 813/813/808 f 813/813/808 814/814/809 809/809/804 f 814/814/809 813/813/808 815/815/810 f 815/815/810 816/816/811 814/814/809 f 817/817/812 818/818/813 816/816/811 f 816/816/811 815/815/810 817/817/812 f 819/819/814 820/820/815 818/818/813 f 818/818/813 817/817/812 819/819/814 f 821/821/816 822/822/817 820/820/815 f 820/820/815 819/819/814 821/821/816 f 823/823/818 822/822/817 821/821/816 f 821/821/816 824/824/819 823/823/818 f 823/823/818 824/824/819 825/825/820 f 825/825/820 826/826/821 823/823/818 f 826/826/821 825/825/820 827/827/822 f 827/827/822 828/828/823 826/826/821 f 829/829/824 830/830/825 828/828/823 f 828/828/823 827/827/822 829/829/824 f 831/831/826 832/832/827 830/830/825 f 830/830/825 829/829/824 831/831/826 f 811/811/806 810/810/805 832/832/827 f 832/832/827 831/831/826 811/811/806 f 833/833/828 834/834/829 835/835/802 f 836/836/830 833/833/828 835/835/802 f 837/837/831 836/836/830 835/835/802 f 838/838/832 837/837/831 835/835/802 f 839/839/833 838/838/832 835/835/802 f 840/840/834 839/839/833 835/835/802 f 841/841/835 840/840/834 835/835/802 f 842/842/836 841/841/835 835/835/802 f 843/843/837 842/842/836 835/835/802 f 844/844/838 843/843/837 835/835/802 f 845/845/839 844/844/838 835/835/802 f 834/834/829 845/845/839 835/835/802 f 846/846/840 847/847/841 848/848/803 f 847/847/841 849/849/842 848/848/803 f 849/849/842 850/850/843 848/848/803 f 850/850/843 851/851/844 848/848/803 f 851/851/844 852/852/845 848/848/803 f 852/852/845 853/853/846 848/848/803 f 853/853/846 854/854/847 848/848/803 f 854/854/847 855/855/848 848/848/803 f 855/855/848 856/856/849 848/848/803 f 856/856/849 857/857/850 848/848/803 f 857/857/850 858/858/851 848/848/803 f 858/858/851 846/846/840 848/848/803 f 814/814/809 816/816/811 859/859/852 f 859/859/852 860/860/853 814/814/809 f 814/814/809 860/860/853 861/861/854 f 861/861/854 809/809/804 814/814/809 f 810/810/805 809/809/804 861/861/854 f 861/861/854 862/862/855 810/810/805 f 832/832/827 810/810/805 862/862/855 f 862/862/855 863/863/856 832/832/827 f 830/830/825 832/832/827 863/863/856 f 863/863/856 864/864/857 830/830/825 f 828/828/823 830/830/825 864/864/857 f 864/864/857 865/865/858 828/828/823 f 826/826/821 828/828/823 865/865/858 f 865/865/858 866/866/859 826/826/821 f 823/823/818 826/826/821 866/866/859 f 866/866/859 867/867/860 823/823/818 f 822/822/817 823/823/818 867/867/860 f 867/867/860 868/868/861 822/822/817 f 868/868/861 869/869/862 820/820/815 f 820/820/815 822/822/817 868/868/861 f 869/869/862 870/870/863 818/818/813 f 818/818/813 820/820/815 869/869/862 f 816/816/811 818/818/813 870/870/863 f 870/870/863 859/859/852 816/816/811 f 871/871/864 872/872/865 873/873/866 f 873/873/866 874/874/867 871/871/864 f 874/874/867 875/875/868 876/876/869 f 876/876/869 871/871/864 874/874/867 f 876/876/869 875/875/868 877/877/870 f 877/877/870 878/878/871 876/876/869 f 879/879/872 878/878/871 877/877/870 f 877/877/870 880/880/873 879/879/872 f 879/879/872 880/880/873 881/881/874 f 881/881/874 882/882/875 879/879/872 f 883/883/876 884/884/877 882/882/875 f 882/882/875 881/881/874 883/883/876 f 884/884/877 883/883/876 885/885/878 f 885/885/878 886/886/879 884/884/877 f 887/887/880 886/886/879 885/885/878 f 885/885/878 888/888/881 887/887/880 f 889/889/882 890/890/883 887/887/880 f 887/887/880 888/888/881 889/889/882 f 890/890/883 889/889/882 891/891/884 f 891/891/884 892/892/885 890/890/883 f 892/892/885 891/891/884 893/893/886 f 893/893/886 894/894/887 892/892/885 f 873/873/866 872/872/865 894/894/887 f 894/894/887 893/893/886 873/873/866 f 895/895/888 812/812/807 811/811/806 f 811/811/806 896/896/889 895/895/888 f 812/812/807 895/895/888 897/897/890 f 897/897/890 813/813/808 812/812/807 f 815/815/810 813/813/808 897/897/890 f 897/897/890 898/898/891 815/815/810 f 817/817/812 815/815/810 898/898/891 f 898/898/891 899/899/892 817/817/812 f 899/899/892 900/900/893 819/819/814 f 819/819/814 817/817/812 899/899/892 f 821/821/816 819/819/814 900/900/893 f 900/900/893 901/901/894 821/821/816 f 901/901/894 902/902/895 824/824/819 f 824/824/819 821/821/816 901/901/894 f 824/824/819 902/902/895 903/903/896 f 903/903/896 825/825/820 824/824/819 f 827/827/822 825/825/820 903/903/896 f 903/903/896 904/904/897 827/827/822 f 904/904/897 905/905/898 829/829/824 f 829/829/824 827/827/822 904/904/897 f 906/906/899 831/831/826 829/829/824 f 829/829/824 905/905/898 906/906/899 f 831/831/826 906/906/899 896/896/889 f 896/896/889 811/811/806 831/831/826 f 834/834/829 833/833/828 895/895/888 f 895/895/888 896/896/889 834/834/829 f 836/836/830 897/897/890 895/895/888 f 895/895/888 833/833/828 836/836/830 f 836/836/830 837/837/831 898/898/891 f 898/898/891 897/897/890 836/836/830 f 899/899/892 898/898/891 837/837/831 f 837/837/831 838/838/832 899/899/892 f 899/899/892 838/838/832 839/839/833 f 839/839/833 900/900/893 899/899/892 f 901/901/894 900/900/893 839/839/833 f 839/839/833 840/840/834 901/901/894 f 902/902/895 901/901/894 840/840/834 f 840/840/834 841/841/835 902/902/895 f 902/902/895 841/841/835 842/842/836 f 842/842/836 903/903/896 902/902/895 f 903/903/896 842/842/836 843/843/837 f 843/843/837 904/904/897 903/903/896 f 844/844/838 905/905/898 904/904/897 f 904/904/897 843/843/837 844/844/838 f 906/906/899 905/905/898 844/844/838 f 844/844/838 845/845/839 906/906/899 f 834/834/829 896/896/889 906/906/899 f 906/906/899 845/845/839 834/834/829 f 875/875/868 907/907/900 908/908/901 f 908/908/901 877/877/870 875/875/868 f 909/909/902 907/907/900 875/875/868 f 875/875/868 874/874/867 909/909/902 f 910/910/903 909/909/902 874/874/867 f 874/874/867 873/873/866 910/910/903 f 893/893/886 911/911/904 910/910/903 f 910/910/903 873/873/866 893/893/886 f 912/912/905 911/911/904 893/893/886 f 893/893/886 891/891/884 912/912/905 f 891/891/884 889/889/882 913/913/906 f 913/913/906 912/912/905 891/891/884 f 888/888/881 914/914/907 913/913/906 f 913/913/906 889/889/882 888/888/881 f 885/885/878 915/915/908 914/914/907 f 914/914/907 888/888/881 885/885/878 f 916/916/909 915/915/908 885/885/878 f 885/885/878 883/883/876 916/916/909 f 883/883/876 881/881/874 917/917/910 f 917/917/910 916/916/909 883/883/876 f 918/918/911 917/917/910 881/881/874 f 881/881/874 880/880/873 918/918/911 f 880/880/873 877/877/870 908/908/901 f 908/908/901 918/918/911 880/880/873 f 847/847/841 846/846/840 908/908/901 f 908/908/901 907/907/900 847/847/841 f 907/907/900 909/909/902 849/849/842 f 849/849/842 847/847/841 907/907/900 f 910/910/903 850/850/843 849/849/842 f 849/849/842 909/909/902 910/910/903 f 910/910/903 911/911/904 851/851/844 f 851/851/844 850/850/843 910/910/903 f 912/912/905 852/852/845 851/851/844 f 851/851/844 911/911/904 912/912/905 f 912/912/905 913/913/906 853/853/846 f 853/853/846 852/852/845 912/912/905 f 853/853/846 913/913/906 914/914/907 f 914/914/907 854/854/847 853/853/846 f 915/915/908 855/855/848 854/854/847 f 854/854/847 914/914/907 915/915/908 f 916/916/909 856/856/849 855/855/848 f 855/855/848 915/915/908 916/916/909 f 856/856/849 916/916/909 917/917/910 f 917/917/910 857/857/850 856/856/849 f 918/918/911 858/858/851 857/857/850 f 857/857/850 917/917/910 918/918/911 f 918/918/911 908/908/901 846/846/840 f 846/846/840 858/858/851 918/918/911 f 919/919/912 920/920/913 872/872/865 f 872/872/865 871/871/864 919/919/912 f 871/871/864 876/876/869 921/921/914 f 921/921/914 919/919/912 871/871/864 f 878/878/871 922/922/915 921/921/914 f 921/921/914 876/876/869 878/878/871 f 879/879/872 923/923/916 922/922/915 f 922/922/915 878/878/871 879/879/872 f 882/882/875 924/924/917 923/923/916 f 923/923/916 879/879/872 882/882/875 f 882/882/875 884/884/877 925/925/918 f 925/925/918 924/924/917 882/882/875 f 884/884/877 886/886/879 926/926/919 f 926/926/919 925/925/918 884/884/877 f 926/926/919 886/886/879 887/887/880 f 887/887/880 927/927/920 926/926/919 f 928/928/921 927/927/920 887/887/880 f 887/887/880 890/890/883 928/928/921 f 928/928/921 890/890/883 892/892/885 f 892/892/885 929/929/922 928/928/921 f 929/929/922 892/892/885 894/894/887 f 894/894/887 930/930/923 929/929/922 f 930/930/923 894/894/887 872/872/865 f 872/872/865 920/920/913 930/930/923 f 860/860/853 859/859/852 931/931/924 f 931/931/924 932/932/925 860/860/853 f 932/932/925 933/933/926 861/861/854 f 861/861/854 860/860/853 932/932/925 f 933/933/926 934/934/927 862/862/855 f 862/862/855 861/861/854 933/933/926 f 862/862/855 934/934/927 935/935/928 f 935/935/928 863/863/856 862/862/855 f 864/864/857 863/863/856 935/935/928 f 935/935/928 936/936/929 864/864/857 f 865/865/858 864/864/857 936/936/929 f 936/936/929 937/937/930 865/865/858 f 865/865/858 937/937/930 938/938/931 f 938/938/931 866/866/859 865/865/858 f 866/866/859 938/938/931 939/939/932 f 939/939/932 867/867/860 866/866/859 f 867/867/860 939/939/932 940/940/933 f 940/940/933 868/868/861 867/867/860 f 869/869/862 868/868/861 940/940/933 f 940/940/933 941/941/934 869/869/862 f 869/869/862 941/941/934 942/942/935 f 942/942/935 870/870/863 869/869/862 f 942/942/935 931/931/924 859/859/852 f 859/859/852 870/870/863 942/942/935 f 943/943/936 942/942/935 941/941/934 f 941/941/934 944/944/937 943/943/936 f 931/931/924 942/942/935 943/943/936 f 943/943/936 945/945/938 931/931/924 f 932/932/925 931/931/924 945/945/938 f 945/945/938 946/946/939 932/932/925 f 932/932/925 946/946/939 947/947/940 f 947/947/940 933/933/926 932/932/925 f 933/933/926 947/947/940 948/948/941 f 948/948/941 934/934/927 933/933/926 f 948/948/941 949/949/942 935/935/928 f 935/935/928 934/934/927 948/948/941 f 936/936/929 935/935/928 949/949/942 f 949/949/942 950/950/943 936/936/929 f 936/936/929 950/950/943 951/951/944 f 951/951/944 937/937/930 936/936/929 f 952/952/945 938/938/931 937/937/930 f 937/937/930 951/951/944 952/952/945 f 953/953/946 939/939/932 938/938/931 f 938/938/931 952/952/945 953/953/946 f 940/940/933 939/939/932 953/953/946 f 953/953/946 954/954/947 940/940/933 f 940/940/933 954/954/947 944/944/937 f 944/944/937 941/941/934 940/940/933 f 930/930/923 943/943/936 944/944/937 f 944/944/937 929/929/922 930/930/923 f 945/945/938 943/943/936 930/930/923 f 930/930/923 920/920/913 945/945/938 f 946/946/939 945/945/938 920/920/913 f 920/920/913 919/919/912 946/946/939 f 947/947/940 946/946/939 919/919/912 f 919/919/912 921/921/914 947/947/940 f 921/921/914 922/922/915 948/948/941 f 948/948/941 947/947/940 921/921/914 f 923/923/916 949/949/942 948/948/941 f 948/948/941 922/922/915 923/923/916 f 923/923/916 924/924/917 950/950/943 f 950/950/943 949/949/942 923/923/916 f 925/925/918 951/951/944 950/950/943 f 950/950/943 924/924/917 925/925/918 f 925/925/918 926/926/919 952/952/945 f 952/952/945 951/951/944 925/925/918 f 927/927/920 953/953/946 952/952/945 f 952/952/945 926/926/919 927/927/920 f 953/953/946 927/927/920 928/928/921 f 928/928/921 954/954/947 953/953/946 f 928/928/921 929/929/922 944/944/937 f 944/944/937 954/954/947 928/928/921 v -10.1549 4.0303 51.5891 v -9.5697 2.4944 50.9380 v -8.3286 3.5325 50.5740 v -9.4833 4.5921 51.3921 v -11.0327 3.8743 51.6927 v -11.1916 2.2061 51.1293 v -11.8814 4.1658 51.6749 v -12.7597 2.7448 51.0966 v -12.4735 4.8267 51.5407 v -13.8539 3.9660 50.8486 v -12.6505 5.6800 51.3260 v -14.1810 5.5427 50.4519 v -12.3650 6.4970 51.0884 v -13.6533 7.0523 50.0127 v -11.6933 7.0588 50.8913 v -12.4122 8.0903 49.6487 v -10.8155 7.2147 50.7878 v -10.7903 8.3787 49.4574 v -9.9668 6.9233 50.8055 v -9.2222 7.8400 49.4901 v -9.3747 6.2624 50.9398 v -8.1280 6.6187 49.7381 v -9.1977 5.4090 51.1544 v -7.8009 5.0421 50.1348 v -9.2340 1.2593 49.7185 v -7.6125 2.6156 49.2430 v -11.3531 0.8827 49.9686 v -13.4020 1.5864 49.9257 v -14.8316 3.1821 49.6018 v -15.2590 5.2421 49.0834 v -14.5695 7.2145 48.5095 v -12.9480 8.5708 48.0340 v -10.8289 8.9474 47.7840 v -8.7800 8.2437 47.8268 v -7.3503 6.6480 48.1507 v -6.9230 4.5880 48.6690 v -9.1990 0.5131 48.1164 v -7.4439 1.9810 47.6015 v -11.4927 0.1053 48.3868 v -13.7104 0.8671 48.3407 v -15.2579 2.5942 47.9899 v -15.7204 4.8240 47.4289 v -14.9741 6.9589 46.8078 v -13.2190 8.4268 46.2928 v -10.9253 8.8346 46.0225 v -8.7076 8.0728 46.0686 v -7.1601 6.3457 46.4194 v -6.6976 4.1159 46.9805 v -9.4700 0.3691 46.3753 v -7.8485 1.7254 45.8998 v -11.5891 -0.0076 46.6253 v -13.6380 0.6962 46.5825 v -15.0677 2.2919 46.2586 v -15.4950 4.3519 45.7402 v -14.8055 6.3243 45.1662 v -13.1840 7.6806 44.6907 v -11.0649 8.0572 44.4407 v -9.0160 7.3536 44.4836 v -7.5864 5.7578 44.8074 v -7.1590 3.6978 45.3259 v -10.0058 0.8495 44.7606 v -8.7647 1.8876 44.3966 v -11.6277 0.5612 44.9519 v -13.1958 1.0999 44.9192 v -14.2900 2.3211 44.6712 v -14.6171 3.8978 44.2745 v -14.0894 5.4074 43.8353 v -12.8483 6.4454 43.4712 v -11.2264 6.7338 43.2800 v -9.6583 6.1951 43.3127 v -8.5641 4.9738 43.5606 v -8.2370 3.3972 43.9574 v -10.7247 1.8811 43.5180 v -10.0531 2.4429 43.3209 v -11.6025 1.7252 43.6215 v -12.4512 2.0166 43.6038 v -13.0433 2.6775 43.4695 v -13.2203 3.5308 43.2549 v -12.9348 4.3478 43.0172 v -12.2631 4.9096 42.8202 v -11.3853 5.0656 42.7165 v -10.5366 4.7741 42.7344 v -9.9445 4.1132 42.8685 v -9.7675 3.2599 43.0833 v -10.9006 5.6331 51.5727 v -11.5174 3.3068 42.8365 v -7.8895 1.5908 45.3826 v -9.5089 0.2363 45.8576 v -9.0690 -1.6288 43.6708 v -6.9134 0.1741 43.0385 v -11.6253 -0.1398 46.1072 v -11.8860 -2.1296 44.0030 v -14.6096 -1.1941 43.9461 v -13.6715 0.5629 46.0645 v -15.0993 2.1565 45.7409 v -16.5101 0.9271 43.5155 v -15.5261 4.2139 45.2232 v -17.0782 3.6656 42.8264 v -16.1616 6.2875 42.0635 v -14.8375 6.1837 44.6501 v -13.2181 7.5382 44.1750 v -14.0061 8.0904 41.4313 v -11.1891 8.5912 41.0991 v -11.1017 7.9145 43.9255 v -9.0555 7.2115 43.9681 v -8.4654 7.6557 41.1559 v -7.6277 5.6180 44.2918 v -6.5650 5.5345 41.5866 v -7.2009 3.5606 44.8095 v -5.9969 2.7960 42.2757 v -10.3929 1.6478 44.6716 v -9.4953 2.3985 44.4084 v -11.4207 3.6713 44.2054 v -11.5658 1.4393 44.8100 v -12.6999 1.8289 44.7863 v -13.4913 2.7121 44.6070 v -13.7278 3.8523 44.3201 v -13.3462 4.9441 44.0024 v -12.4486 5.6948 43.7392 v -11.2756 5.9033 43.6008 v -10.1416 5.5138 43.6245 v -9.3502 4.6305 43.8038 v -9.1137 3.4903 44.0907 v -12.2958 -6.1446 11.1458 v -12.9809 -6.7176 11.3468 v -13.7656 -5.1730 10.9908 v -13.8763 -6.8768 11.4523 v -14.7420 -6.5794 11.4344 v -15.3461 -5.9052 11.2974 v -15.5267 -5.0348 11.0783 v -15.2353 -4.2014 10.8360 v -14.5502 -3.6283 10.6349 v -13.6548 -3.4691 10.5294 v -12.7891 -3.7665 10.5474 v -12.1850 -4.4407 10.6844 v -12.0045 -5.3112 10.9033 v -14.6460 -1.4707 42.5564 v -11.9754 -2.3881 42.6121 v -9.2133 -1.8970 42.2864 v -7.0997 -0.1292 41.6665 v -6.2010 2.4417 40.9184 v -6.6973 6.0605 39.9899 v -8.5607 8.1404 39.5677 v -11.2313 9.0577 39.5120 v -13.9935 8.5667 39.8377 v -16.1071 6.7989 40.4576 v -17.0665 3.2943 41.4585 v -16.5095 0.6091 42.1341 v -14.0071 -9.3995 12.8032 v -16.2389 -8.6329 12.7566 v -15.9331 -8.4198 11.1919 v -14.0589 -9.0636 11.2311 v -11.6989 -8.9891 12.5310 v -12.1205 -8.7190 11.0024 v -10.6372 -7.4784 10.5674 v -9.9326 -7.5118 12.0129 v -9.1816 -5.3634 11.3878 v -10.0066 -5.6742 10.0425 v -10.3975 -3.7899 9.5684 v -9.6471 -3.1195 10.8233 v -11.7052 -2.3302 9.2720 v -11.2043 -1.3814 10.4704 v -13.5794 -1.6865 9.2328 v -13.4361 -0.6149 10.4239 v -15.5177 -2.0311 9.4615 v -15.7443 -1.0252 10.6961 v -17.5106 -2.5025 11.2141 v -17.0010 -3.2717 9.8966 v -17.6317 -5.0759 10.4215 v -18.2616 -4.6509 11.8391 v -17.2408 -6.9602 10.8956 v -17.7961 -6.8948 12.4038 v -8.5094 2.0006 45.3172 v -9.8398 0.8878 45.7075 v -11.5786 0.5786 45.9124 v -13.2597 1.1561 45.8775 v -14.4327 2.4654 45.6116 v -14.7833 4.1556 45.1863 v -14.2176 5.7739 44.7153 v -12.8871 6.8867 44.3252 v -11.1484 7.1958 44.1202 v -9.4673 6.6184 44.1553 v -8.2943 5.3091 44.4209 v -7.9437 3.6189 44.8464 v -12.6065 -7.7623 10.7820 v -11.5476 -6.8767 10.4714 v -13.9903 -8.0083 10.9453 v -15.3283 -7.5487 10.9173 v -16.2619 -6.5067 10.7057 v -16.5409 -5.1615 10.3673 v -16.0907 -3.8734 9.9925 v -15.0318 -2.9878 9.6820 v -13.6480 -2.7418 9.5187 v -12.3100 -3.2013 9.5467 v -11.3764 -4.2434 9.7582 v -11.0973 -5.5886 10.0967 v -16.1982 -8.3238 14.3095 v -13.9072 -9.1107 14.3573 v -11.5377 -8.6895 14.0778 v -9.7245 -7.1730 13.5459 v -8.9536 -4.9675 12.9043 v -9.4314 -2.6640 12.3247 v -11.0300 -0.8798 11.9625 v -13.3210 -0.0928 11.9146 v -15.6905 -0.5141 12.1941 v -17.5037 -2.0306 12.7259 v -18.2747 -4.2361 13.3676 v -17.7968 -6.5396 13.9471 v -15.0028 -2.6361 38.6331 v -12.2636 -3.5770 38.6903 v -9.4306 -3.0734 38.3561 v -7.2627 -1.2602 37.7203 v -6.3410 1.3767 36.9531 v -6.8103 5.7000 35.8350 v -8.7216 7.8333 35.4019 v -11.4607 8.7741 35.3447 v -14.2938 8.2705 35.6789 v -16.4616 6.4573 36.3147 v -17.4854 2.2512 37.5070 v -16.9141 -0.5029 38.2000 v -17.4688 -1.8727 22.2862 v -17.0090 -4.0894 22.8440 v -15.4706 -5.8064 23.1926 v -13.2659 -6.5637 23.2386 v -10.9857 -6.1583 22.9697 v -9.2409 -4.6989 22.4579 v -8.4990 -2.5766 21.8404 v -8.9588 -0.3599 21.2826 v -10.4972 1.3571 20.9340 v -12.7018 2.1144 20.8880 v -14.9821 1.7090 21.1569 v -16.7269 0.2497 21.6687 vn 0.2439 -0.1236 0.9619 vn 0.3676 -0.4536 0.8119 vn 0.6475 -0.2194 0.7298 vn 0.4025 0.0091 0.9154 vn 0.0364 -0.1605 0.9864 vn 0.0018 -0.5186 0.8550 vn -0.1641 -0.0916 0.9822 vn -0.3519 -0.3971 0.8476 vn -0.3040 0.0646 0.9505 vn -0.5986 -0.1217 0.7917 vn -0.3459 0.2662 0.8997 vn -0.6724 0.2339 0.7022 vn -0.2784 0.4592 0.8436 vn -0.5534 0.5744 0.6032 vn -0.1196 0.5920 0.7970 vn -0.2735 0.8085 0.5211 vn 0.0877 0.6288 0.7726 vn 0.0923 0.8735 0.4779 vn 0.2882 0.5600 0.7767 vn 0.4460 0.7521 0.4853 vn 0.4282 0.4038 0.8085 vn 0.6928 0.4766 0.5412 vn 0.4700 0.2021 0.8592 vn 0.7665 0.1210 0.6307 vn 0.4371 -0.7153 0.5452 vn 0.7967 -0.4145 0.4397 vn -0.0328 -0.7988 0.6006 vn -0.4872 -0.6428 0.5911 vn -0.8043 -0.2889 0.5193 vn -0.8991 0.1680 0.4043 vn -0.7461 0.6054 0.2771 vn -0.3865 0.9062 0.1716 vn 0.0834 0.9897 0.1162 vn 0.5378 0.8336 0.1257 vn 0.8549 0.4798 0.1975 vn 0.9497 0.0229 0.3125 vn 0.4436 -0.8733 0.2012 vn 0.8310 -0.5493 0.0876 vn -0.0626 -0.9633 0.2609 vn -0.5521 -0.7952 0.2507 vn -0.8936 -0.4140 0.1733 vn -0.9957 0.0781 0.0495 vn -0.8310 0.5493 -0.0876 vn -0.4436 0.8733 -0.2012 vn 0.0626 0.9633 -0.2609 vn 0.5521 0.7952 -0.2507 vn 0.8936 0.4140 -0.1733 vn 0.9957 -0.0781 -0.0495 vn 0.3865 -0.9062 -0.1716 vn 0.7462 -0.6054 -0.2771 vn -0.0834 -0.9897 -0.1162 vn -0.5378 -0.8336 -0.1257 vn -0.8549 -0.4798 -0.1975 vn -0.9497 -0.0229 -0.3124 vn -0.7968 0.4145 -0.4397 vn -0.4371 0.7153 -0.5452 vn 0.0328 0.7988 -0.6006 vn 0.4872 0.6428 -0.5911 vn 0.8043 0.2889 -0.5193 vn 0.8991 -0.1680 -0.4043 vn 0.2735 -0.8085 -0.5211 vn 0.5534 -0.5744 -0.6032 vn -0.0923 -0.8735 -0.4779 vn -0.4460 -0.7520 -0.4853 vn -0.6928 -0.4766 -0.5412 vn -0.7665 -0.1210 -0.6307 vn -0.6475 0.2194 -0.7298 vn -0.3676 0.4536 -0.8119 vn -0.0018 0.5186 -0.8550 vn 0.3519 0.3971 -0.8476 vn 0.5986 0.1217 -0.7917 vn 0.6724 -0.2339 -0.7022 vn 0.1196 -0.5920 -0.7970 vn 0.2784 -0.4592 -0.8436 vn -0.0878 -0.6288 -0.7726 vn -0.2882 -0.5600 -0.7767 vn -0.4282 -0.4038 -0.8085 vn -0.4700 -0.2021 -0.8592 vn -0.4025 -0.0091 -0.9154 vn -0.2439 0.1236 -0.9619 vn -0.0364 0.1605 -0.9864 vn 0.1642 0.0916 -0.9822 vn 0.3040 -0.0646 -0.9505 vn 0.3459 -0.2662 -0.8997 vn 0.0681 0.2567 0.9641 vn -0.0681 -0.2567 -0.9641 vn 0.5291 -0.1017 0.8424 vn 0.3085 -0.2862 0.9071 vn 0.4483 -0.8046 0.3894 vn 0.8279 -0.4871 0.2780 vn 0.0203 -0.3374 0.9411 vn -0.0478 -0.8928 0.4479 vn -0.5274 -0.7281 0.4379 vn -0.2584 -0.2418 0.9353 vn -0.4529 -0.0247 0.8912 vn -0.8621 -0.3545 0.3620 vn -0.5110 0.2555 0.8207 vn -0.9622 0.1277 0.2407 vn -0.8021 0.5478 0.2376 vn -0.4172 0.5238 0.7427 vn -0.1967 0.7083 0.6779 vn -0.3860 0.8823 0.2693 vn 0.0883 0.9626 0.2562 vn 0.0916 0.7596 0.6440 vn 0.3703 0.6638 0.6497 vn 0.5432 0.8094 0.2231 vn 0.5647 0.4468 0.6939 vn 0.8971 0.4145 0.1532 vn 0.6229 0.1665 0.7644 vn 0.9893 -0.0254 0.1437 vn -0.0976 0.5561 0.8254 vn -0.2381 0.4386 0.8666 vn 0.0862 0.5888 0.8037 vn 0.2638 0.5278 0.8074 vn 0.3877 0.3894 0.8355 vn 0.4247 0.2109 0.8804 vn 0.3649 0.0399 0.9302 vn 0.2244 -0.0777 0.9714 vn 0.0407 -0.1104 0.9931 vn -0.1369 -0.0493 0.9894 vn -0.2608 0.0890 0.9613 vn -0.2979 0.2676 0.9163 vn -0.3813 -0.0266 -0.9241 vn -0.2329 0.0975 -0.9676 vn -0.0388 0.1320 -0.9905 vn 0.1487 0.0676 -0.9866 vn 0.2796 -0.0785 -0.9569 vn 0.3187 -0.2670 -0.9095 vn 0.2555 -0.4476 -0.8570 vn 0.1071 -0.5718 -0.8134 vn -0.0868 -0.6062 -0.7905 vn -0.2744 -0.5418 -0.7944 vn -0.4053 -0.3958 -0.8241 vn -0.4444 -0.2071 -0.8716 vn -0.5534 -0.8005 0.2300 vn -0.0641 -0.9686 0.2402 vn 0.4421 -0.8786 0.1805 vn 0.8294 -0.5547 0.0669 vn 0.9933 -0.1044 -0.0501 vn 0.8916 0.4525 0.0183 vn 0.5357 0.8418 0.0659 vn 0.0826 0.9920 0.0951 vn -0.3891 0.9144 0.1119 vn -0.8074 0.5816 0.0992 vn -0.9975 0.0545 0.0444 vn -0.8949 -0.4194 0.1526 vn -0.0783 -0.9969 -0.0013 vn -0.5506 -0.8347 -0.0112 vn -0.3757 -0.6704 -0.6399 vn -0.0918 -0.7679 -0.6340 vn 0.4102 -0.9101 -0.0589 vn 0.2019 -0.7157 -0.6686 vn 0.4266 -0.5277 -0.7345 vn 0.7840 -0.5975 -0.1685 vn 0.9429 -0.1428 -0.3008 vn 0.5221 -0.2544 -0.8141 vn 0.4629 0.0310 -0.8859 vn 0.8444 0.3321 -0.4203 vn 0.2648 0.2521 -0.9308 vn 0.5149 0.6999 -0.4950 vn -0.0191 0.3496 -0.9367 vn 0.0426 0.8622 -0.5049 vn -0.3128 0.2974 -0.9020 vn -0.4459 0.7753 -0.4472 vn -0.8197 0.4627 -0.3376 vn -0.5375 0.1095 -0.8361 vn -0.6330 -0.1638 -0.7566 vn -0.9787 0.0080 -0.2053 vn -0.5738 -0.4492 -0.6848 vn -0.8802 -0.4669 -0.0858 vn -0.1572 0.3946 0.9053 vn -0.0534 0.4814 0.8749 vn 0.0824 0.5056 0.8588 vn 0.2136 0.4605 0.8616 vn 0.3051 0.3583 0.8823 vn 0.3325 0.2264 0.9155 vn 0.2884 0.1000 0.9523 vn 0.1844 0.0133 0.9828 vn 0.0488 -0.0109 0.9987 vn -0.0824 0.0342 0.9960 vn -0.1740 0.1363 0.9753 vn -0.2013 0.2683 0.9421 vn -0.1914 0.0021 -0.9815 vn -0.3014 -0.0900 -0.9492 vn -0.0474 0.0276 -0.9985 vn 0.0917 -0.0201 -0.9956 vn 0.1887 -0.1284 -0.9736 vn 0.2177 -0.2683 -0.9384 vn 0.1709 -0.4022 -0.8994 vn 0.0608 -0.4943 -0.8671 vn -0.0830 -0.5199 -0.8502 vn -0.2221 -0.4721 -0.8531 vn -0.3192 -0.3638 -0.8751 vn -0.3482 -0.2239 -0.9103 vn -0.5538 -0.8022 0.2231 vn -0.0645 -0.9703 0.2333 vn 0.4415 -0.8803 0.1737 vn 0.8287 -0.5564 0.0601 vn 0.9934 -0.0854 -0.0770 vn 0.8913 0.4065 -0.2007 vn 0.5499 0.7876 -0.2781 vn 0.0607 0.9556 -0.2883 vn -0.4454 0.8657 -0.2286 vn -0.8326 0.5418 -0.1151 vn -0.9972 0.0708 0.0220 vn -0.8952 -0.4211 0.1458 vn -0.5532 -0.7996 0.2339 vn -0.0638 -0.9677 0.2441 vn 0.4424 -0.8777 0.1844 vn 0.8297 -0.5537 0.0708 vn 0.9903 -0.1262 -0.0577 vn 0.9027 0.3932 -0.1746 vn 0.5440 0.8026 -0.2449 vn 0.0633 0.9659 -0.2510 vn -0.4339 0.8793 -0.1963 vn -0.8447 0.5286 -0.0846 vn -0.9985 0.0338 0.0436 vn -0.8947 -0.4184 0.1565 vn -0.9971 0.0716 0.0251 vn -0.8951 -0.4204 0.1489 vn -0.5536 -0.8014 0.2262 vn -0.0643 -0.9695 0.2364 vn 0.4418 -0.8795 0.1768 vn 0.8290 -0.5556 0.0632 vn 0.9937 -0.0846 -0.0739 vn 0.8950 0.3919 -0.2133 vn 0.5496 0.7728 -0.3173 vn 0.0572 0.9406 -0.3346 vn -0.4512 0.8514 -0.2676 vn -0.8397 0.5280 -0.1271 vt 0.5054 0.6708 0.0000 vt 0.5156 0.6795 0.0000 vt 0.5412 0.6763 0.0000 vt 0.5193 0.6691 0.0000 vt 0.4889 0.6714 0.0000 vt 0.4851 0.6807 0.0000 vt 0.4742 0.6708 0.0000 vt 0.4580 0.6795 0.0000 vt 0.4653 0.6690 0.0000 vt 0.4416 0.6763 0.0000 vt 0.4646 0.6666 0.0000 vt 0.4401 0.6718 0.0000 vt 0.4721 0.6643 0.0000 vt 0.4541 0.6674 0.0000 vt 0.4860 0.6625 0.0000 vt 0.4798 0.6642 0.0000 vt 0.5025 0.6619 0.0000 vt 0.5102 0.6630 0.0000 vt 0.5172 0.6625 0.0000 vt 0.5373 0.6642 0.0000 vt 0.5261 0.6643 0.0000 vt 0.5538 0.6675 0.0000 vt 0.5268 0.6667 0.0000 vt 0.5552 0.6719 0.0000 vt 0.5240 0.6897 0.0000 vt 0.5575 0.6855 0.0000 vt 0.4842 0.6912 0.0000 vt 0.4488 0.6897 0.0000 vt 0.4273 0.6854 0.0000 vt 0.4254 0.6796 0.0000 vt 0.4437 0.6739 0.0000 vt 0.4772 0.6696 0.0000 vt 0.5170 0.6681 0.0000 vt 0.5524 0.6697 0.0000 vt 0.5739 0.6739 0.0000 vt 0.5758 0.6797 0.0000 vt 0.5294 0.6997 0.0000 vt 0.5657 0.6952 0.0000 vt 0.4864 0.7014 0.0000 vt 0.4481 0.6997 0.0000 vt 0.4248 0.6951 0.0000 vt 0.4227 0.6888 0.0000 vt 0.4425 0.6826 0.0000 vt 0.4788 0.6780 0.0000 vt 0.5219 0.6764 0.0000 vt 0.5602 0.6781 0.0000 vt 0.5835 0.6827 0.0000 vt 0.5855 0.6889 0.0000 vt 0.5310 0.7081 0.0000 vt 0.5645 0.7039 0.0000 vt 0.4912 0.7097 0.0000 vt 0.4558 0.7081 0.0000 vt 0.4343 0.7038 0.0000 vt 0.4324 0.6981 0.0000 vt 0.4507 0.6923 0.0000 vt 0.4842 0.6881 0.0000 vt 0.5240 0.6865 0.0000 vt 0.5594 0.6881 0.0000 vt 0.5809 0.6923 0.0000 vt 0.5828 0.6981 0.0000 vt 0.5285 0.7136 0.0000 vt 0.5541 0.7103 0.0000 vt 0.4980 0.7147 0.0000 vt 0.4709 0.7136 0.0000 vt 0.4544 0.7103 0.0000 vt 0.4530 0.7059 0.0000 vt 0.4670 0.7015 0.0000 vt 0.4927 0.6982 0.0000 vt 0.5231 0.6971 0.0000 vt 0.5502 0.6982 0.0000 vt 0.5667 0.7015 0.0000 vt 0.5681 0.7059 0.0000 vt 0.5222 0.7153 0.0000 vt 0.5361 0.7135 0.0000 vt 0.5057 0.7159 0.0000 vt 0.4911 0.7153 0.0000 vt 0.4822 0.7135 0.0000 vt 0.4814 0.7111 0.0000 vt 0.4890 0.7087 0.0000 vt 0.5028 0.7070 0.0000 vt 0.5193 0.7063 0.0000 vt 0.5340 0.7070 0.0000 vt 0.5429 0.7087 0.0000 vt 0.5437 0.7111 0.0000 vt 0.4950 0.6648 0.0000 vt 0.5132 0.7129 0.0000 vt 0.5655 0.7067 0.0000 vt 0.5320 0.7110 0.0000 vt 0.5449 0.7279 0.0000 vt 0.5895 0.7222 0.0000 vt 0.4923 0.7125 0.0000 vt 0.4920 0.7299 0.0000 vt 0.4450 0.7278 0.0000 vt 0.4570 0.7109 0.0000 vt 0.4355 0.7067 0.0000 vt 0.4164 0.7222 0.0000 vt 0.4336 0.7009 0.0000 vt 0.4139 0.7145 0.0000 vt 0.4382 0.7068 0.0000 vt 0.4518 0.6951 0.0000 vt 0.4853 0.6909 0.0000 vt 0.4827 0.7012 0.0000 vt 0.5356 0.6992 0.0000 vt 0.5251 0.6894 0.0000 vt 0.5604 0.6910 0.0000 vt 0.5827 0.7012 0.0000 vt 0.5819 0.6952 0.0000 vt 0.6113 0.7069 0.0000 vt 0.5838 0.7010 0.0000 vt 0.6138 0.7146 0.0000 vt 0.5233 0.7110 0.0000 vt 0.5419 0.7086 0.0000 vt 0.5104 0.7054 0.0000 vt 0.5013 0.7118 0.0000 vt 0.4817 0.7109 0.0000 vt 0.4698 0.7086 0.0000 vt 0.4688 0.7054 0.0000 vt 0.4789 0.7022 0.0000 vt 0.4974 0.6999 0.0000 vt 0.5194 0.6990 0.0000 vt 0.5390 0.6999 0.0000 vt 0.5510 0.7022 0.0000 vt 0.5520 0.7054 0.0000 vt 0.6037 0.8908 0.0000 vt 0.5895 0.8926 0.0000 vt 0.5796 0.8884 0.0000 vt 0.5727 0.8933 0.0000 vt 0.5577 0.8926 0.0000 vt 0.5487 0.8908 0.0000 vt 0.5479 0.8884 0.0000 vt 0.5556 0.8859 0.0000 vt 0.5697 0.8841 0.0000 vt 0.5866 0.8835 0.0000 vt 0.6015 0.8841 0.0000 vt 0.6106 0.8859 0.0000 vt 0.6114 0.8884 0.0000 vt 0.4491 0.7351 0.0000 vt 0.4953 0.7371 0.0000 vt 0.5472 0.7351 0.0000 vt 0.5908 0.7296 0.0000 vt 0.6147 0.7221 0.0000 vt 0.6160 0.7119 0.0000 vt 0.5880 0.7063 0.0000 vt 0.5418 0.7043 0.0000 vt 0.4900 0.7063 0.0000 vt 0.4463 0.7118 0.0000 vt 0.4187 0.7220 0.0000 vt 0.4211 0.7295 0.0000 vt 0.5605 0.8975 0.0000 vt 0.5219 0.8958 0.0000 vt 0.5338 0.9017 0.0000 vt 0.5662 0.9031 0.0000 vt 0.6038 0.8959 0.0000 vt 0.6026 0.9017 0.0000 vt 0.6333 0.8979 0.0000 vt 0.6403 0.8913 0.0000 vt 0.6602 0.8850 0.0000 vt 0.6500 0.8926 0.0000 vt 0.6483 0.8873 0.0000 vt 0.6582 0.8787 0.0000 vt 0.6286 0.8834 0.0000 vt 0.6348 0.8740 0.0000 vt 0.5962 0.8820 0.0000 vt 0.5962 0.8723 0.0000 vt 0.5598 0.8834 0.0000 vt 0.5529 0.8740 0.0000 vt 0.5163 0.8786 0.0000 vt 0.5292 0.8872 0.0000 vt 0.5124 0.8925 0.0000 vt 0.4964 0.8849 0.0000 vt 0.5142 0.8978 0.0000 vt 0.4985 0.8912 0.0000 vt 0.5554 0.7057 0.0000 vt 0.5279 0.7092 0.0000 vt 0.4952 0.7104 0.0000 vt 0.4662 0.7091 0.0000 vt 0.4485 0.7057 0.0000 vt 0.4470 0.7009 0.0000 vt 0.4620 0.6962 0.0000 vt 0.4895 0.6927 0.0000 vt 0.5221 0.6915 0.0000 vt 0.5512 0.6927 0.0000 vt 0.5688 0.6962 0.0000 vt 0.5704 0.7010 0.0000 vt 0.5965 0.8991 0.0000 vt 0.6184 0.8963 0.0000 vt 0.5705 0.9001 0.0000 vt 0.5474 0.8991 0.0000 vt 0.5333 0.8963 0.0000 vt 0.5321 0.8925 0.0000 vt 0.5440 0.8888 0.0000 vt 0.5659 0.8860 0.0000 vt 0.5919 0.8850 0.0000 vt 0.6150 0.8860 0.0000 vt 0.6291 0.8888 0.0000 vt 0.6303 0.8926 0.0000 vt 0.5172 0.8877 0.0000 vt 0.5568 0.8895 0.0000 vt 0.6013 0.8878 0.0000 vt 0.6388 0.8830 0.0000 vt 0.6592 0.8766 0.0000 vt 0.6571 0.8701 0.0000 vt 0.6331 0.8654 0.0000 vt 0.5935 0.8636 0.0000 vt 0.5490 0.8653 0.0000 vt 0.5115 0.8701 0.0000 vt 0.4911 0.8765 0.0000 vt 0.4932 0.8830 0.0000 vt 0.4557 0.7572 0.0000 vt 0.5030 0.7593 0.0000 vt 0.5562 0.7572 0.0000 vt 0.6010 0.7516 0.0000 vt 0.6254 0.7439 0.0000 vt 0.6293 0.7316 0.0000 vt 0.6005 0.7260 0.0000 vt 0.5532 0.7239 0.0000 vt 0.5000 0.7259 0.0000 vt 0.4552 0.7316 0.0000 vt 0.4244 0.7438 0.0000 vt 0.4269 0.7515 0.0000 vt 0.4756 0.8273 0.0000 vt 0.4777 0.8336 0.0000 vt 0.5008 0.8381 0.0000 vt 0.5389 0.8398 0.0000 vt 0.5817 0.8382 0.0000 vt 0.6178 0.8336 0.0000 vt 0.6374 0.8274 0.0000 vt 0.6354 0.8212 0.0000 vt 0.6123 0.8166 0.0000 vt 0.5742 0.8149 0.0000 vt 0.5314 0.8166 0.0000 vt 0.4953 0.8211 0.0000 g Object015 f 955/955/948 956/956/949 957/957/950 f 957/957/950 958/958/951 955/955/948 f 956/956/949 955/955/948 959/959/952 f 959/959/952 960/960/953 956/956/949 f 960/960/953 959/959/952 961/961/954 f 961/961/954 962/962/955 960/960/953 f 962/962/955 961/961/954 963/963/956 f 963/963/956 964/964/957 962/962/955 f 963/963/956 965/965/958 966/966/959 f 966/966/959 964/964/957 963/963/956 f 965/965/958 967/967/960 968/968/961 f 968/968/961 966/966/959 965/965/958 f 969/969/962 970/970/963 968/968/961 f 968/968/961 967/967/960 969/969/962 f 970/970/963 969/969/962 971/971/964 f 971/971/964 972/972/965 970/970/963 f 972/972/965 971/971/964 973/973/966 f 973/973/966 974/974/967 972/972/965 f 974/974/967 973/973/966 975/975/968 f 975/975/968 976/976/969 974/974/967 f 975/975/968 977/977/970 978/978/971 f 978/978/971 976/976/969 975/975/968 f 977/977/970 958/958/951 957/957/950 f 957/957/950 978/978/971 977/977/970 f 956/956/949 979/979/972 980/980/973 f 980/980/973 957/957/950 956/956/949 f 960/960/953 981/981/974 979/979/972 f 979/979/972 956/956/949 960/960/953 f 962/962/955 982/982/975 981/981/974 f 981/981/974 960/960/953 962/962/955 f 964/964/957 983/983/976 982/982/975 f 982/982/975 962/962/955 964/964/957 f 966/966/959 984/984/977 983/983/976 f 983/983/976 964/964/957 966/966/959 f 968/968/961 985/985/978 984/984/977 f 984/984/977 966/966/959 968/968/961 f 970/970/963 986/986/979 985/985/978 f 985/985/978 968/968/961 970/970/963 f 972/972/965 987/987/980 986/986/979 f 986/986/979 970/970/963 972/972/965 f 974/974/967 988/988/981 987/987/980 f 987/987/980 972/972/965 974/974/967 f 976/976/969 989/989/982 988/988/981 f 988/988/981 974/974/967 976/976/969 f 978/978/971 990/990/983 989/989/982 f 989/989/982 976/976/969 978/978/971 f 957/957/950 980/980/973 990/990/983 f 990/990/983 978/978/971 957/957/950 f 979/979/972 991/991/984 992/992/985 f 992/992/985 980/980/973 979/979/972 f 981/981/974 993/993/986 991/991/984 f 991/991/984 979/979/972 981/981/974 f 982/982/975 994/994/987 993/993/986 f 993/993/986 981/981/974 982/982/975 f 983/983/976 995/995/988 994/994/987 f 994/994/987 982/982/975 983/983/976 f 984/984/977 996/996/989 995/995/988 f 995/995/988 983/983/976 984/984/977 f 985/985/978 997/997/990 996/996/989 f 996/996/989 984/984/977 985/985/978 f 986/986/979 998/998/991 997/997/990 f 997/997/990 985/985/978 986/986/979 f 987/987/980 999/999/992 998/998/991 f 998/998/991 986/986/979 987/987/980 f 988/988/981 1000/1000/993 999/999/992 f 999/999/992 987/987/980 988/988/981 f 989/989/982 1001/1001/994 1000/1000/993 f 1000/1000/993 988/988/981 989/989/982 f 990/990/983 1002/1002/995 1001/1001/994 f 1001/1001/994 989/989/982 990/990/983 f 980/980/973 992/992/985 1002/1002/995 f 1002/1002/995 990/990/983 980/980/973 f 991/991/984 1003/1003/996 1004/1004/997 f 1004/1004/997 992/992/985 991/991/984 f 993/993/986 1005/1005/998 1003/1003/996 f 1003/1003/996 991/991/984 993/993/986 f 994/994/987 1006/1006/999 1005/1005/998 f 1005/1005/998 993/993/986 994/994/987 f 995/995/988 1007/1007/1000 1006/1006/999 f 1006/1006/999 994/994/987 995/995/988 f 996/996/989 1008/1008/1001 1007/1007/1000 f 1007/1007/1000 995/995/988 996/996/989 f 997/997/990 1009/1009/1002 1008/1008/1001 f 1008/1008/1001 996/996/989 997/997/990 f 998/998/991 1010/1010/1003 1009/1009/1002 f 1009/1009/1002 997/997/990 998/998/991 f 999/999/992 1011/1011/1004 1010/1010/1003 f 1010/1010/1003 998/998/991 999/999/992 f 1000/1000/993 1012/1012/1005 1011/1011/1004 f 1011/1011/1004 999/999/992 1000/1000/993 f 1001/1001/994 1013/1013/1006 1012/1012/1005 f 1012/1012/1005 1000/1000/993 1001/1001/994 f 1002/1002/995 1014/1014/1007 1013/1013/1006 f 1013/1013/1006 1001/1001/994 1002/1002/995 f 992/992/985 1004/1004/997 1014/1014/1007 f 1014/1014/1007 1002/1002/995 992/992/985 f 1003/1003/996 1015/1015/1008 1016/1016/1009 f 1016/1016/1009 1004/1004/997 1003/1003/996 f 1005/1005/998 1017/1017/1010 1015/1015/1008 f 1015/1015/1008 1003/1003/996 1005/1005/998 f 1006/1006/999 1018/1018/1011 1017/1017/1010 f 1017/1017/1010 1005/1005/998 1006/1006/999 f 1007/1007/1000 1019/1019/1012 1018/1018/1011 f 1018/1018/1011 1006/1006/999 1007/1007/1000 f 1008/1008/1001 1020/1020/1013 1019/1019/1012 f 1019/1019/1012 1007/1007/1000 1008/1008/1001 f 1009/1009/1002 1021/1021/1014 1020/1020/1013 f 1020/1020/1013 1008/1008/1001 1009/1009/1002 f 1010/1010/1003 1022/1022/1015 1021/1021/1014 f 1021/1021/1014 1009/1009/1002 1010/1010/1003 f 1011/1011/1004 1023/1023/1016 1022/1022/1015 f 1022/1022/1015 1010/1010/1003 1011/1011/1004 f 1012/1012/1005 1024/1024/1017 1023/1023/1016 f 1023/1023/1016 1011/1011/1004 1012/1012/1005 f 1013/1013/1006 1025/1025/1018 1024/1024/1017 f 1024/1024/1017 1012/1012/1005 1013/1013/1006 f 1014/1014/1007 1026/1026/1019 1025/1025/1018 f 1025/1025/1018 1013/1013/1006 1014/1014/1007 f 1004/1004/997 1016/1016/1009 1026/1026/1019 f 1026/1026/1019 1014/1014/1007 1004/1004/997 f 1015/1015/1008 1027/1027/1020 1028/1028/1021 f 1028/1028/1021 1016/1016/1009 1015/1015/1008 f 1017/1017/1010 1029/1029/1022 1027/1027/1020 f 1027/1027/1020 1015/1015/1008 1017/1017/1010 f 1018/1018/1011 1030/1030/1023 1029/1029/1022 f 1029/1029/1022 1017/1017/1010 1018/1018/1011 f 1019/1019/1012 1031/1031/1024 1030/1030/1023 f 1030/1030/1023 1018/1018/1011 1019/1019/1012 f 1020/1020/1013 1032/1032/1025 1031/1031/1024 f 1031/1031/1024 1019/1019/1012 1020/1020/1013 f 1021/1021/1014 1033/1033/1026 1032/1032/1025 f 1032/1032/1025 1020/1020/1013 1021/1021/1014 f 1022/1022/1015 1034/1034/1027 1033/1033/1026 f 1033/1033/1026 1021/1021/1014 1022/1022/1015 f 1023/1023/1016 1035/1035/1028 1034/1034/1027 f 1034/1034/1027 1022/1022/1015 1023/1023/1016 f 1024/1024/1017 1036/1036/1029 1035/1035/1028 f 1035/1035/1028 1023/1023/1016 1024/1024/1017 f 1025/1025/1018 1037/1037/1030 1036/1036/1029 f 1036/1036/1029 1024/1024/1017 1025/1025/1018 f 1026/1026/1019 1038/1038/1031 1037/1037/1030 f 1037/1037/1030 1025/1025/1018 1026/1026/1019 f 1016/1016/1009 1028/1028/1021 1038/1038/1031 f 1038/1038/1031 1026/1026/1019 1016/1016/1009 f 955/955/948 958/958/951 1039/1039/1032 f 959/959/952 955/955/948 1039/1039/1032 f 961/961/954 959/959/952 1039/1039/1032 f 963/963/956 961/961/954 1039/1039/1032 f 965/965/958 963/963/956 1039/1039/1032 f 967/967/960 965/965/958 1039/1039/1032 f 969/969/962 967/967/960 1039/1039/1032 f 971/971/964 969/969/962 1039/1039/1032 f 973/973/966 971/971/964 1039/1039/1032 f 975/975/968 973/973/966 1039/1039/1032 f 977/977/970 975/975/968 1039/1039/1032 f 958/958/951 977/977/970 1039/1039/1032 f 1028/1028/1021 1027/1027/1020 1040/1040/1033 f 1027/1027/1020 1029/1029/1022 1040/1040/1033 f 1029/1029/1022 1030/1030/1023 1040/1040/1033 f 1030/1030/1023 1031/1031/1024 1040/1040/1033 f 1031/1031/1024 1032/1032/1025 1040/1040/1033 f 1032/1032/1025 1033/1033/1026 1040/1040/1033 f 1033/1033/1026 1034/1034/1027 1040/1040/1033 f 1034/1034/1027 1035/1035/1028 1040/1040/1033 f 1035/1035/1028 1036/1036/1029 1040/1040/1033 f 1036/1036/1029 1037/1037/1030 1040/1040/1033 f 1037/1037/1030 1038/1038/1031 1040/1040/1033 f 1038/1038/1031 1028/1028/1021 1040/1040/1033 f 1041/1041/1034 1042/1042/1035 1043/1043/1036 f 1043/1043/1036 1044/1044/1037 1041/1041/1034 f 1043/1043/1036 1042/1042/1035 1045/1045/1038 f 1045/1045/1038 1046/1046/1039 1043/1043/1036 f 1047/1047/1040 1046/1046/1039 1045/1045/1038 f 1045/1045/1038 1048/1048/1041 1047/1047/1040 f 1049/1049/1042 1050/1050/1043 1047/1047/1040 f 1047/1047/1040 1048/1048/1041 1049/1049/1042 f 1049/1049/1042 1051/1051/1044 1052/1052/1045 f 1052/1052/1045 1050/1050/1043 1049/1049/1042 f 1053/1053/1046 1052/1052/1045 1051/1051/1044 f 1051/1051/1044 1054/1054/1047 1053/1053/1046 f 1054/1054/1047 1055/1055/1048 1056/1056/1049 f 1056/1056/1049 1053/1053/1046 1054/1054/1047 f 1057/1057/1050 1056/1056/1049 1055/1055/1048 f 1055/1055/1048 1058/1058/1051 1057/1057/1050 f 1059/1059/1052 1060/1060/1053 1057/1057/1050 f 1057/1057/1050 1058/1058/1051 1059/1059/1052 f 1061/1061/1054 1062/1062/1055 1060/1060/1053 f 1060/1060/1053 1059/1059/1052 1061/1061/1054 f 1061/1061/1054 1063/1063/1056 1064/1064/1057 f 1064/1064/1057 1062/1062/1055 1061/1061/1054 f 1041/1041/1034 1044/1044/1037 1064/1064/1057 f 1064/1064/1057 1063/1063/1056 1041/1041/1034 f 1065/1065/1058 1066/1066/1059 1067/1067/1032 f 1068/1068/1060 1065/1065/1058 1067/1067/1032 f 1069/1069/1061 1068/1068/1060 1067/1067/1032 f 1070/1070/1062 1069/1069/1061 1067/1067/1032 f 1071/1071/1063 1070/1070/1062 1067/1067/1032 f 1072/1072/1064 1071/1071/1063 1067/1067/1032 f 1073/1073/1065 1072/1072/1064 1067/1067/1032 f 1074/1074/1066 1073/1073/1065 1067/1067/1032 f 1075/1075/1067 1074/1074/1066 1067/1067/1032 f 1076/1076/1068 1075/1075/1067 1067/1067/1032 f 1077/1077/1069 1076/1076/1068 1067/1067/1032 f 1066/1066/1059 1077/1077/1069 1067/1067/1032 f 1078/1078/1070 1079/1079/1071 1080/1080/1033 f 1079/1079/1071 1081/1081/1072 1080/1080/1033 f 1081/1081/1072 1082/1082/1073 1080/1080/1033 f 1082/1082/1073 1083/1083/1074 1080/1080/1033 f 1083/1083/1074 1084/1084/1075 1080/1080/1033 f 1084/1084/1075 1085/1085/1076 1080/1080/1033 f 1085/1085/1076 1086/1086/1077 1080/1080/1033 f 1086/1086/1077 1087/1087/1078 1080/1080/1033 f 1087/1087/1078 1088/1088/1079 1080/1080/1033 f 1088/1088/1079 1089/1089/1080 1080/1080/1033 f 1089/1089/1080 1090/1090/1081 1080/1080/1033 f 1090/1090/1081 1078/1078/1070 1080/1080/1033 f 1047/1047/1040 1091/1091/1082 1092/1092/1083 f 1092/1092/1083 1046/1046/1039 1047/1047/1040 f 1093/1093/1084 1043/1043/1036 1046/1046/1039 f 1046/1046/1039 1092/1092/1083 1093/1093/1084 f 1094/1094/1085 1044/1044/1037 1043/1043/1036 f 1043/1043/1036 1093/1093/1084 1094/1094/1085 f 1095/1095/1086 1064/1064/1057 1044/1044/1037 f 1044/1044/1037 1094/1094/1085 1095/1095/1086 f 1062/1062/1055 1064/1064/1057 1095/1095/1086 f 1095/1095/1086 1096/1096/1087 1062/1062/1055 f 1097/1097/1088 1060/1060/1053 1062/1062/1055 f 1062/1062/1055 1096/1096/1087 1097/1097/1088 f 1097/1097/1088 1098/1098/1089 1057/1057/1050 f 1057/1057/1050 1060/1060/1053 1097/1097/1088 f 1056/1056/1049 1057/1057/1050 1098/1098/1089 f 1098/1098/1089 1099/1099/1090 1056/1056/1049 f 1056/1056/1049 1099/1099/1090 1100/1100/1091 f 1100/1100/1091 1053/1053/1046 1056/1056/1049 f 1053/1053/1046 1100/1100/1091 1101/1101/1092 f 1101/1101/1092 1052/1052/1045 1053/1053/1046 f 1052/1052/1045 1101/1101/1092 1102/1102/1093 f 1102/1102/1093 1050/1050/1043 1052/1052/1045 f 1050/1050/1043 1102/1102/1093 1091/1091/1082 f 1091/1091/1082 1047/1047/1040 1050/1050/1043 f 1103/1103/1094 1104/1104/1095 1105/1105/1096 f 1105/1105/1096 1106/1106/1097 1103/1103/1094 f 1107/1107/1098 1103/1103/1094 1106/1106/1097 f 1106/1106/1097 1108/1108/1099 1107/1107/1098 f 1108/1108/1099 1109/1109/1100 1110/1110/1101 f 1110/1110/1101 1107/1107/1098 1108/1108/1099 f 1111/1111/1102 1110/1110/1101 1109/1109/1100 f 1109/1109/1100 1112/1112/1103 1111/1111/1102 f 1112/1112/1103 1113/1113/1104 1114/1114/1105 f 1114/1114/1105 1111/1111/1102 1112/1112/1103 f 1114/1114/1105 1113/1113/1104 1115/1115/1106 f 1115/1115/1106 1116/1116/1107 1114/1114/1105 f 1115/1115/1106 1117/1117/1108 1118/1118/1109 f 1118/1118/1109 1116/1116/1107 1115/1115/1106 f 1117/1117/1108 1119/1119/1110 1120/1120/1111 f 1120/1120/1111 1118/1118/1109 1117/1117/1108 f 1121/1121/1112 1120/1120/1111 1119/1119/1110 f 1119/1119/1110 1122/1122/1113 1121/1121/1112 f 1121/1121/1112 1122/1122/1113 1123/1123/1114 f 1123/1123/1114 1124/1124/1115 1121/1121/1112 f 1125/1125/1116 1126/1126/1117 1124/1124/1115 f 1124/1124/1115 1123/1123/1114 1125/1125/1116 f 1104/1104/1095 1126/1126/1117 1125/1125/1116 f 1125/1125/1116 1105/1105/1096 1104/1104/1095 f 1127/1127/1118 1128/1128/1119 1042/1042/1035 f 1042/1042/1035 1041/1041/1034 1127/1127/1118 f 1129/1129/1120 1045/1045/1038 1042/1042/1035 f 1042/1042/1035 1128/1128/1119 1129/1129/1120 f 1045/1045/1038 1129/1129/1120 1130/1130/1121 f 1130/1130/1121 1048/1048/1041 1045/1045/1038 f 1131/1131/1122 1049/1049/1042 1048/1048/1041 f 1048/1048/1041 1130/1130/1121 1131/1131/1122 f 1132/1132/1123 1051/1051/1044 1049/1049/1042 f 1049/1049/1042 1131/1131/1122 1132/1132/1123 f 1133/1133/1124 1054/1054/1047 1051/1051/1044 f 1051/1051/1044 1132/1132/1123 1133/1133/1124 f 1054/1054/1047 1133/1133/1124 1134/1134/1125 f 1134/1134/1125 1055/1055/1048 1054/1054/1047 f 1058/1058/1051 1055/1055/1048 1134/1134/1125 f 1134/1134/1125 1135/1135/1126 1058/1058/1051 f 1135/1135/1126 1136/1136/1127 1059/1059/1052 f 1059/1059/1052 1058/1058/1051 1135/1135/1126 f 1061/1061/1054 1059/1059/1052 1136/1136/1127 f 1136/1136/1127 1137/1137/1128 1061/1061/1054 f 1138/1138/1129 1063/1063/1056 1061/1061/1054 f 1061/1061/1054 1137/1137/1128 1138/1138/1129 f 1041/1041/1034 1063/1063/1056 1138/1138/1129 f 1138/1138/1129 1127/1127/1118 1041/1041/1034 f 1127/1127/1118 1066/1066/1059 1065/1065/1058 f 1065/1065/1058 1128/1128/1119 1127/1127/1118 f 1129/1129/1120 1128/1128/1119 1065/1065/1058 f 1065/1065/1058 1068/1068/1060 1129/1129/1120 f 1130/1130/1121 1129/1129/1120 1068/1068/1060 f 1068/1068/1060 1069/1069/1061 1130/1130/1121 f 1131/1131/1122 1130/1130/1121 1069/1069/1061 f 1069/1069/1061 1070/1070/1062 1131/1131/1122 f 1132/1132/1123 1131/1131/1122 1070/1070/1062 f 1070/1070/1062 1071/1071/1063 1132/1132/1123 f 1133/1133/1124 1132/1132/1123 1071/1071/1063 f 1071/1071/1063 1072/1072/1064 1133/1133/1124 f 1134/1134/1125 1133/1133/1124 1072/1072/1064 f 1072/1072/1064 1073/1073/1065 1134/1134/1125 f 1073/1073/1065 1074/1074/1066 1135/1135/1126 f 1135/1135/1126 1134/1134/1125 1073/1073/1065 f 1136/1136/1127 1135/1135/1126 1074/1074/1066 f 1074/1074/1066 1075/1075/1067 1136/1136/1127 f 1137/1137/1128 1136/1136/1127 1075/1075/1067 f 1075/1075/1067 1076/1076/1068 1137/1137/1128 f 1138/1138/1129 1137/1137/1128 1076/1076/1068 f 1076/1076/1068 1077/1077/1069 1138/1138/1129 f 1138/1138/1129 1077/1077/1069 1066/1066/1059 f 1066/1066/1059 1127/1127/1118 1138/1138/1129 f 1109/1109/1100 1108/1108/1099 1139/1139/1130 f 1139/1139/1130 1140/1140/1131 1109/1109/1100 f 1139/1139/1130 1108/1108/1099 1106/1106/1097 f 1106/1106/1097 1141/1141/1132 1139/1139/1130 f 1106/1106/1097 1105/1105/1096 1142/1142/1133 f 1142/1142/1133 1141/1141/1132 1106/1106/1097 f 1142/1142/1133 1105/1105/1096 1125/1125/1116 f 1125/1125/1116 1143/1143/1134 1142/1142/1133 f 1144/1144/1135 1143/1143/1134 1125/1125/1116 f 1125/1125/1116 1123/1123/1114 1144/1144/1135 f 1123/1123/1114 1122/1122/1113 1145/1145/1136 f 1145/1145/1136 1144/1144/1135 1123/1123/1114 f 1145/1145/1136 1122/1122/1113 1119/1119/1110 f 1119/1119/1110 1146/1146/1137 1145/1145/1136 f 1117/1117/1108 1147/1147/1138 1146/1146/1137 f 1146/1146/1137 1119/1119/1110 1117/1117/1108 f 1115/1115/1106 1148/1148/1139 1147/1147/1138 f 1147/1147/1138 1117/1117/1108 1115/1115/1106 f 1115/1115/1106 1113/1113/1104 1149/1149/1140 f 1149/1149/1140 1148/1148/1139 1115/1115/1106 f 1113/1113/1104 1112/1112/1103 1150/1150/1141 f 1150/1150/1141 1149/1149/1140 1113/1113/1104 f 1109/1109/1100 1140/1140/1131 1150/1150/1141 f 1150/1150/1141 1112/1112/1103 1109/1109/1100 f 1139/1139/1130 1079/1079/1071 1078/1078/1070 f 1078/1078/1070 1140/1140/1131 1139/1139/1130 f 1141/1141/1132 1081/1081/1072 1079/1079/1071 f 1079/1079/1071 1139/1139/1130 1141/1141/1132 f 1142/1142/1133 1082/1082/1073 1081/1081/1072 f 1081/1081/1072 1141/1141/1132 1142/1142/1133 f 1143/1143/1134 1083/1083/1074 1082/1082/1073 f 1082/1082/1073 1142/1142/1133 1143/1143/1134 f 1144/1144/1135 1084/1084/1075 1083/1083/1074 f 1083/1083/1074 1143/1143/1134 1144/1144/1135 f 1084/1084/1075 1144/1144/1135 1145/1145/1136 f 1145/1145/1136 1085/1085/1076 1084/1084/1075 f 1146/1146/1137 1086/1086/1077 1085/1085/1076 f 1085/1085/1076 1145/1145/1136 1146/1146/1137 f 1147/1147/1138 1087/1087/1078 1086/1086/1077 f 1086/1086/1077 1146/1146/1137 1147/1147/1138 f 1148/1148/1139 1088/1088/1079 1087/1087/1078 f 1087/1087/1078 1147/1147/1138 1148/1148/1139 f 1149/1149/1140 1089/1089/1080 1088/1088/1079 f 1088/1088/1079 1148/1148/1139 1149/1149/1140 f 1150/1150/1141 1090/1090/1081 1089/1089/1080 f 1089/1089/1080 1149/1149/1140 1150/1150/1141 f 1150/1150/1141 1140/1140/1131 1078/1078/1070 f 1078/1078/1070 1090/1090/1081 1150/1150/1141 f 1151/1151/1142 1104/1104/1095 1103/1103/1094 f 1103/1103/1094 1152/1152/1143 1151/1151/1142 f 1152/1152/1143 1103/1103/1094 1107/1107/1098 f 1107/1107/1098 1153/1153/1144 1152/1152/1143 f 1153/1153/1144 1107/1107/1098 1110/1110/1101 f 1110/1110/1101 1154/1154/1145 1153/1153/1144 f 1154/1154/1145 1110/1110/1101 1111/1111/1102 f 1111/1111/1102 1155/1155/1146 1154/1154/1145 f 1155/1155/1146 1111/1111/1102 1114/1114/1105 f 1114/1114/1105 1156/1156/1147 1155/1155/1146 f 1116/1116/1107 1157/1157/1148 1156/1156/1147 f 1156/1156/1147 1114/1114/1105 1116/1116/1107 f 1157/1157/1148 1116/1116/1107 1118/1118/1109 f 1118/1118/1109 1158/1158/1149 1157/1157/1148 f 1120/1120/1111 1159/1159/1150 1158/1158/1149 f 1158/1158/1149 1118/1118/1109 1120/1120/1111 f 1159/1159/1150 1120/1120/1111 1121/1121/1112 f 1121/1121/1112 1160/1160/1151 1159/1159/1150 f 1160/1160/1151 1121/1121/1112 1124/1124/1115 f 1124/1124/1115 1161/1161/1152 1160/1160/1151 f 1161/1161/1152 1124/1124/1115 1126/1126/1117 f 1126/1126/1117 1162/1162/1153 1161/1161/1152 f 1151/1151/1142 1162/1162/1153 1126/1126/1117 f 1126/1126/1117 1104/1104/1095 1151/1151/1142 f 1091/1091/1082 1163/1163/1154 1164/1164/1155 f 1164/1164/1155 1092/1092/1083 1091/1091/1082 f 1092/1092/1083 1164/1164/1155 1165/1165/1156 f 1165/1165/1156 1093/1093/1084 1092/1092/1083 f 1165/1165/1156 1166/1166/1157 1094/1094/1085 f 1094/1094/1085 1093/1093/1084 1165/1165/1156 f 1094/1094/1085 1166/1166/1157 1167/1167/1158 f 1167/1167/1158 1095/1095/1086 1094/1094/1085 f 1095/1095/1086 1167/1167/1158 1168/1168/1159 f 1168/1168/1159 1096/1096/1087 1095/1095/1086 f 1168/1168/1159 1169/1169/1160 1097/1097/1088 f 1097/1097/1088 1096/1096/1087 1168/1168/1159 f 1170/1170/1161 1098/1098/1089 1097/1097/1088 f 1097/1097/1088 1169/1169/1160 1170/1170/1161 f 1099/1099/1090 1098/1098/1089 1170/1170/1161 f 1170/1170/1161 1171/1171/1162 1099/1099/1090 f 1100/1100/1091 1099/1099/1090 1171/1171/1162 f 1171/1171/1162 1172/1172/1163 1100/1100/1091 f 1100/1100/1091 1172/1172/1163 1173/1173/1164 f 1173/1173/1164 1101/1101/1092 1100/1100/1091 f 1174/1174/1165 1102/1102/1093 1101/1101/1092 f 1101/1101/1092 1173/1173/1164 1174/1174/1165 f 1102/1102/1093 1174/1174/1165 1163/1163/1154 f 1163/1163/1154 1091/1091/1082 1102/1102/1093 f 1173/1173/1164 1175/1175/1166 1176/1176/1167 f 1176/1176/1167 1174/1174/1165 1173/1173/1164 f 1174/1174/1165 1176/1176/1167 1177/1177/1168 f 1177/1177/1168 1163/1163/1154 1174/1174/1165 f 1163/1163/1154 1177/1177/1168 1178/1178/1169 f 1178/1178/1169 1164/1164/1155 1163/1163/1154 f 1164/1164/1155 1178/1178/1169 1179/1179/1170 f 1179/1179/1170 1165/1165/1156 1164/1164/1155 f 1165/1165/1156 1179/1179/1170 1180/1180/1171 f 1180/1180/1171 1166/1166/1157 1165/1165/1156 f 1166/1166/1157 1180/1180/1171 1181/1181/1172 f 1181/1181/1172 1167/1167/1158 1166/1166/1157 f 1167/1167/1158 1181/1181/1172 1182/1182/1173 f 1182/1182/1173 1168/1168/1159 1167/1167/1158 f 1169/1169/1160 1168/1168/1159 1182/1182/1173 f 1182/1182/1173 1183/1183/1174 1169/1169/1160 f 1169/1169/1160 1183/1183/1174 1184/1184/1175 f 1184/1184/1175 1170/1170/1161 1169/1169/1160 f 1184/1184/1175 1185/1185/1176 1171/1171/1162 f 1171/1171/1162 1170/1170/1161 1184/1184/1175 f 1171/1171/1162 1185/1185/1176 1186/1186/1177 f 1186/1186/1177 1172/1172/1163 1171/1171/1162 f 1186/1186/1177 1175/1175/1166 1173/1173/1164 f 1173/1173/1164 1172/1172/1163 1186/1186/1177 f 1175/1175/1166 1161/1161/1152 1162/1162/1153 f 1162/1162/1153 1176/1176/1167 1175/1175/1166 f 1176/1176/1167 1162/1162/1153 1151/1151/1142 f 1151/1151/1142 1177/1177/1168 1176/1176/1167 f 1178/1178/1169 1177/1177/1168 1151/1151/1142 f 1151/1151/1142 1152/1152/1143 1178/1178/1169 f 1152/1152/1143 1153/1153/1144 1179/1179/1170 f 1179/1179/1170 1178/1178/1169 1152/1152/1143 f 1180/1180/1171 1179/1179/1170 1153/1153/1144 f 1153/1153/1144 1154/1154/1145 1180/1180/1171 f 1181/1181/1172 1180/1180/1171 1154/1154/1145 f 1154/1154/1145 1155/1155/1146 1181/1181/1172 f 1182/1182/1173 1181/1181/1172 1155/1155/1146 f 1155/1155/1146 1156/1156/1147 1182/1182/1173 f 1157/1157/1148 1183/1183/1174 1182/1182/1173 f 1182/1182/1173 1156/1156/1147 1157/1157/1148 f 1184/1184/1175 1183/1183/1174 1157/1157/1148 f 1157/1157/1148 1158/1158/1149 1184/1184/1175 f 1185/1185/1176 1184/1184/1175 1158/1158/1149 f 1158/1158/1149 1159/1159/1150 1185/1185/1176 f 1186/1186/1177 1185/1185/1176 1159/1159/1150 f 1159/1159/1150 1160/1160/1151 1186/1186/1177 f 1186/1186/1177 1160/1160/1151 1161/1161/1152 f 1161/1161/1152 1175/1175/1166 1186/1186/1177 v -13.1888 -7.2377 11.8202 v -12.7205 -8.2602 10.9592 v -11.7095 -7.3981 10.9558 v -12.6416 -6.7711 11.8183 v -13.8953 -7.3687 11.8460 v -14.0260 -8.5023 11.0070 v -14.5720 -7.1292 11.8889 v -15.2762 -8.0596 11.0862 v -15.0374 -6.5832 11.9374 v -16.1362 -7.0507 11.1758 v -15.1668 -5.8770 11.9784 v -16.3754 -5.7460 11.2516 v -14.9257 -5.2000 12.0010 v -15.9298 -4.4950 11.2933 v -14.3785 -4.7335 11.9991 v -14.9187 -3.6329 11.2899 v -13.6720 -4.6025 11.9732 v -13.6132 -3.3908 11.2421 v -12.9953 -4.8420 11.9304 v -12.3630 -3.8335 11.1629 v -12.5299 -5.3880 11.8819 v -11.5031 -4.8424 11.0733 v -12.4005 -6.0941 11.8409 v -11.2638 -6.1471 10.9976 v -12.4373 -8.9110 9.7335 v -11.1164 -7.7847 9.7291 v -14.1431 -9.2274 9.7960 v -15.7766 -8.6490 9.8995 v -16.9001 -7.3309 10.0165 v -17.2127 -5.6261 10.1156 v -16.6305 -3.9916 10.1702 v -15.3095 -2.8653 10.1656 v -13.6038 -2.5489 10.1032 v -11.9703 -3.1273 9.9997 v -10.8467 -4.4455 9.8827 v -10.5342 -6.1502 9.7837 v -12.3825 -9.0912 8.3298 v -10.9527 -7.8721 8.3249 v -14.2288 -9.4336 8.3974 v -15.9969 -8.8076 8.5095 v -17.2130 -7.3808 8.6361 v -17.5513 -5.5357 8.7433 v -16.9211 -3.7665 8.8024 v -15.4913 -2.5473 8.7975 v -13.6450 -2.2049 8.7299 v -11.8769 -2.8310 8.6178 v -10.6608 -4.2577 8.4912 v -10.3225 -6.1029 8.3840 v -12.5643 -8.7733 6.9617 v -11.2433 -7.6469 6.9572 v -14.2700 -9.0896 7.0241 v -15.9035 -8.5113 7.1276 v -17.0271 -7.1931 7.2446 v -17.3396 -5.4884 7.3437 v -16.7574 -3.8539 7.3982 v -15.4365 -2.7274 7.3938 v -13.7307 -2.4112 7.3313 v -12.0972 -2.9895 7.2278 v -10.9737 -4.3077 7.1108 v -10.6611 -6.0124 7.0117 v -12.9551 -8.0056 5.8374 v -11.9440 -7.1436 5.8339 v -14.2606 -8.2478 5.8852 v -15.5108 -7.8051 5.9644 v -16.3707 -6.7962 6.0539 v -16.6100 -5.4915 6.1297 v -16.1644 -4.2405 6.1715 v -15.1533 -3.3784 6.1681 v -13.8478 -3.1363 6.1203 v -12.5976 -3.5789 6.0411 v -11.7377 -4.5878 5.9515 v -11.4984 -5.8926 5.8757 v -13.4953 -6.9051 5.1282 v -12.9481 -6.4386 5.1263 v -14.2018 -7.0361 5.1541 v -14.8785 -6.7966 5.1969 v -15.3439 -6.2506 5.2454 v -15.4733 -5.5445 5.2864 v -15.2322 -4.8674 5.3090 v -14.6850 -4.4009 5.3071 v -13.9785 -4.2698 5.2813 v -13.3018 -4.5094 5.2384 v -12.8364 -5.0554 5.1899 v -12.7070 -5.7615 5.1489 v -13.7710 -5.9993 12.1854 v -14.1028 -5.6393 4.9419 v -18.2139 -3.8776 5.0322 v -16.1560 -3.6027 6.7359 v -15.0768 -2.2609 6.7532 v -16.1793 -0.8961 5.0871 v -13.7171 -1.8456 6.7116 v -13.6521 0.0551 5.0187 v -11.3094 -1.2783 4.8451 v -12.4413 -2.4677 6.6222 v -11.5910 -3.9609 6.5091 v -9.7790 -4.5394 4.6130 v -11.3943 -5.9252 6.4024 v -9.4709 -8.8539 4.3845 v -11.9038 -7.8340 6.3309 v -10.4676 -13.0663 4.2208 v -12.9830 -9.1759 6.3135 v -12.5021 -16.0474 4.1658 v -14.3426 -9.5912 6.3553 v -15.0293 -16.9989 4.2341 v -17.3720 -15.6653 4.4078 v -15.6185 -8.9690 6.4445 v -16.4687 -7.4758 6.5578 v -18.9025 -12.4044 4.6400 v -19.2106 -8.0896 4.8685 v -16.6655 -5.5116 6.6644 v -16.7101 0.0650 2.7245 v -19.2388 -4.6159 2.6078 v -13.6473 1.6104 2.6611 v -10.8711 -0.3932 2.4343 v -9.1254 -5.4095 2.1052 v -8.8780 -12.0940 1.7616 v -10.1951 -18.6558 1.4957 v -12.7239 -23.3370 1.3791 v -15.7867 -24.8821 1.4425 v -18.5629 -22.8788 1.6693 v -20.3085 -17.8622 1.9984 v -20.5560 -11.1777 2.3420 v -19.7213 -4.1494 0.6196 v -16.9967 0.7612 0.7390 v -13.6862 2.3774 0.6676 v -10.6767 0.2653 0.4249 v -8.7746 -5.0084 0.0756 v -8.4896 -12.0312 -0.2864 v -9.8981 -18.9214 -0.5643 v -12.6227 -23.8320 -0.6837 v -15.9332 -25.4482 -0.6123 v -18.9427 -23.3361 -0.3696 v -20.8448 -18.0624 -0.0202 v -21.1298 -11.0393 0.3418 v -16.8294 -0.1753 0.7033 v -19.3466 -4.7126 0.5931 v -13.7708 1.3173 0.6374 v -10.9904 -0.6335 0.4131 v -9.2331 -5.5062 0.0904 v -8.9698 -11.9944 -0.2440 v -10.2711 -18.3597 -0.5008 v -12.7883 -22.8970 -0.6110 v -15.8468 -24.3900 -0.5451 v -18.6273 -22.4389 -0.3208 v -20.3845 -17.5661 0.0018 v -20.6478 -11.0780 0.3365 v -15.6446 -6.8318 0.3446 v -16.6872 -8.7110 0.2988 v -14.3777 -6.2135 0.3173 v -13.2260 -7.0216 0.2244 v -12.4981 -9.0397 0.0906 v -12.3890 -11.7273 -0.0478 v -12.9280 -14.3640 -0.1542 v -13.9707 -16.2434 -0.1999 v -15.2376 -16.8615 -0.1726 v -16.3893 -16.0536 -0.0797 v -17.1172 -14.0353 0.0540 v -17.2262 -11.3477 0.1926 v -14.0013 -5.7494 7.1571 v -14.8075 -11.5377 0.0760 vn 0.2171 -0.4145 0.8837 vn 0.3410 -0.6856 0.6432 vn 0.6256 -0.4429 0.6422 vn 0.3785 -0.2769 0.8832 vn 0.0088 -0.4532 0.8914 vn -0.0265 -0.7537 0.6566 vn -0.1908 -0.3825 0.9040 vn -0.3785 -0.6291 0.6789 vn -0.3281 -0.2215 0.9183 vn -0.6205 -0.3451 0.7042 vn -0.3663 -0.0132 0.9304 vn -0.6879 0.0222 0.7255 vn -0.2951 0.1865 0.9371 vn -0.5624 0.3743 0.7372 vn -0.1337 0.3241 0.9365 vn -0.2778 0.6170 0.7363 vn 0.0746 0.3627 0.9289 vn 0.0897 0.6852 0.7228 vn 0.2741 0.2921 0.9163 vn 0.4416 0.5606 0.7005 vn 0.4115 0.1310 0.9020 vn 0.6837 0.2766 0.6753 vn 0.4496 -0.0772 0.8899 vn 0.7511 -0.0907 0.6540 vn 0.4145 -0.8552 0.3111 vn 0.7802 -0.5434 0.3099 vn -0.0577 -0.9428 0.3284 vn -0.5098 -0.7827 0.3570 vn -0.8208 -0.4178 0.3894 vn -0.9074 0.0541 0.4168 vn -0.7462 0.5066 0.4320 vn -0.3805 0.8183 0.4307 vn 0.0916 0.9059 0.4134 vn 0.5438 0.7458 0.3848 vn 0.8548 0.3809 0.3524 vn 0.9413 -0.0910 0.3250 vn 0.4282 -0.9014 -0.0644 vn 0.8221 -0.5655 -0.0658 vn -0.0804 -0.9957 -0.0458 vn -0.5675 -0.8232 -0.0149 vn -0.9025 -0.4302 0.0200 vn -0.9957 0.0781 0.0495 vn -0.8221 0.5655 0.0658 vn -0.4282 0.9014 0.0644 vn 0.0804 0.9957 0.0458 vn 0.5675 0.8232 0.0149 vn 0.9025 0.4302 -0.0200 vn 0.9957 -0.0781 -0.0495 vn 0.3805 -0.8183 -0.4307 vn 0.7462 -0.5066 -0.4319 vn -0.0916 -0.9059 -0.4134 vn -0.5438 -0.7458 -0.3848 vn -0.8548 -0.3809 -0.3524 vn -0.9413 0.0910 -0.3250 vn -0.7802 0.5434 -0.3099 vn -0.4145 0.8552 -0.3111 vn 0.0577 0.9428 -0.3284 vn 0.5098 0.7827 -0.3570 vn 0.8209 0.4178 -0.3894 vn 0.9074 -0.0541 -0.4168 vn 0.2778 -0.6170 -0.7363 vn 0.5624 -0.3743 -0.7372 vn -0.0897 -0.6852 -0.7228 vn -0.4416 -0.5606 -0.7005 vn -0.6837 -0.2766 -0.6753 vn -0.7511 0.0907 -0.6540 vn -0.6256 0.4429 -0.6422 vn -0.3410 0.6856 -0.6432 vn 0.0265 0.7537 -0.6566 vn 0.3785 0.6291 -0.6789 vn 0.6205 0.3451 -0.7042 vn 0.6879 -0.0222 -0.7255 vn 0.1337 -0.3241 -0.9365 vn 0.2951 -0.1865 -0.9371 vn -0.0746 -0.3627 -0.9289 vn -0.2741 -0.2921 -0.9163 vn -0.4114 -0.1310 -0.9020 vn -0.4496 0.0772 -0.8899 vn -0.3785 0.2769 -0.8832 vn -0.2171 0.4145 -0.8837 vn -0.0087 0.4532 -0.8914 vn 0.1908 0.3825 -0.9040 vn 0.3281 0.2215 -0.9183 vn 0.3663 0.0132 -0.9304 vn 0.0457 -0.0496 0.9977 vn -0.0457 0.0496 -0.9977 vn -0.7895 0.3209 0.5232 vn -0.4319 0.2316 0.8717 vn -0.2625 0.3959 0.8799 vn -0.5185 0.6285 0.5798 vn 0.0806 0.4708 0.8785 vn 0.0917 0.7660 0.6363 vn 0.6645 0.5356 0.5210 vn 0.4064 0.3435 0.8467 vn 0.5446 0.1572 0.8238 vn 0.8786 0.1927 0.4370 vn 0.5189 -0.0484 0.8534 vn 0.8409 -0.0745 0.5360 vn 0.3888 -0.1816 0.9033 vn 0.6185 -0.2546 0.7434 vn 0.1996 -0.2436 0.9491 vn 0.3206 -0.3266 0.8891 vn 0.0282 -0.2533 0.9670 vn 0.0218 -0.3213 0.9467 vn -0.2520 -0.2751 0.9278 vn -0.1405 -0.2169 0.9660 vn -0.3213 -0.1258 0.9386 vn -0.5743 -0.1575 0.8033 vn -0.7850 0.0538 0.6172 vn -0.4430 0.0335 0.8959 vn -0.6442 0.6752 0.3593 vn -0.9091 0.3012 0.2877 vn 0.0945 0.9007 0.4241 vn 0.7726 0.5661 0.2874 vn 0.9688 0.1539 0.1944 vn 0.9511 -0.1178 0.2855 vn 0.8133 -0.3400 0.4722 vn 0.5634 -0.5947 0.5735 vn -0.0349 -0.7906 0.6113 vn -0.5913 -0.5068 0.6273 vn -0.8203 -0.2124 0.5310 vn -0.9253 0.0287 0.3782 vn -0.7789 0.3076 -0.5465 vn -0.5890 0.6420 -0.4908 vn 0.0508 0.8911 -0.4510 vn 0.6290 0.5497 -0.5497 vn 0.7596 0.1869 -0.6230 vn 0.7640 -0.0309 -0.6445 vn 0.7239 -0.2494 -0.6433 vn 0.5388 -0.5876 -0.6036 vn -0.0957 -0.8423 -0.5304 vn -0.6814 -0.4934 -0.5407 vn -0.8143 -0.1317 -0.5652 vn -0.8196 0.0922 -0.5655 vn -0.0323 0.0387 -0.9987 vn -0.0241 0.0429 -0.9988 vn -0.0467 0.0368 -0.9982 vn -0.0607 0.0409 -0.9973 vn -0.0680 0.0464 -0.9966 vn -0.0698 0.0515 -0.9962 vn -0.0671 0.0562 -0.9962 vn -0.0592 0.0605 -0.9964 vn -0.0447 0.0623 -0.9971 vn -0.0306 0.0583 -0.9978 vn -0.0234 0.0527 -0.9983 vn -0.0216 0.0477 -0.9986 vn -0.0430 0.0474 -0.9979 vn -0.0414 0.0483 -0.9980 vn -0.0459 0.0470 -0.9978 vn -0.0487 0.0479 -0.9977 vn -0.0502 0.0490 -0.9975 vn -0.0505 0.0499 -0.9975 vn -0.0500 0.0509 -0.9975 vn -0.0484 0.0518 -0.9975 vn -0.0455 0.0521 -0.9976 vn -0.0427 0.0513 -0.9978 vn -0.0413 0.0502 -0.9979 vn -0.0409 0.0492 -0.9980 vt 0.5857 0.8873 0.0000 vt 0.5939 0.8943 0.0000 vt 0.6144 0.8917 0.0000 vt 0.5968 0.8859 0.0000 vt 0.5725 0.8878 0.0000 vt 0.5695 0.8952 0.0000 vt 0.5608 0.8872 0.0000 vt 0.5478 0.8942 0.0000 vt 0.5536 0.8858 0.0000 vt 0.5346 0.8916 0.0000 vt 0.5530 0.8839 0.0000 vt 0.5334 0.8881 0.0000 vt 0.5591 0.8820 0.0000 vt 0.5446 0.8845 0.0000 vt 0.5702 0.8806 0.0000 vt 0.5652 0.8820 0.0000 vt 0.5834 0.8801 0.0000 vt 0.5896 0.8810 0.0000 vt 0.5951 0.8806 0.0000 vt 0.6113 0.8820 0.0000 vt 0.6023 0.8820 0.0000 vt 0.6245 0.8846 0.0000 vt 0.6029 0.8839 0.0000 vt 0.6256 0.8881 0.0000 vt 0.6006 0.9024 0.0000 vt 0.6275 0.8990 0.0000 vt 0.5688 0.9036 0.0000 vt 0.5404 0.9024 0.0000 vt 0.5232 0.8990 0.0000 vt 0.5217 0.8943 0.0000 vt 0.5363 0.8897 0.0000 vt 0.5632 0.8863 0.0000 vt 0.5950 0.8851 0.0000 vt 0.6234 0.8863 0.0000 vt 0.6406 0.8898 0.0000 vt 0.6421 0.8944 0.0000 vt 0.6050 0.9104 0.0000 vt 0.6340 0.9068 0.0000 vt 0.5705 0.9118 0.0000 vt 0.5398 0.9104 0.0000 vt 0.5211 0.9067 0.0000 vt 0.5195 0.9017 0.0000 vt 0.5353 0.8967 0.0000 vt 0.5644 0.8930 0.0000 vt 0.5989 0.8917 0.0000 vt 0.6296 0.8931 0.0000 vt 0.6483 0.8967 0.0000 vt 0.6499 0.9018 0.0000 vt 0.6062 0.9172 0.0000 vt 0.6331 0.9138 0.0000 vt 0.5743 0.9184 0.0000 vt 0.5460 0.9171 0.0000 vt 0.5287 0.9137 0.0000 vt 0.5272 0.9091 0.0000 vt 0.5419 0.9045 0.0000 vt 0.5687 0.9011 0.0000 vt 0.6006 0.8999 0.0000 vt 0.6290 0.9011 0.0000 vt 0.6462 0.9045 0.0000 vt 0.6477 0.9091 0.0000 vt 0.6042 0.9215 0.0000 vt 0.6248 0.9189 0.0000 vt 0.5798 0.9225 0.0000 vt 0.5581 0.9215 0.0000 vt 0.5449 0.9189 0.0000 vt 0.5437 0.9153 0.0000 vt 0.5550 0.9118 0.0000 vt 0.5755 0.9092 0.0000 vt 0.5999 0.9083 0.0000 vt 0.6216 0.9092 0.0000 vt 0.6348 0.9118 0.0000 vt 0.6360 0.9154 0.0000 vt 0.5992 0.9229 0.0000 vt 0.6103 0.9215 0.0000 vt 0.5860 0.9234 0.0000 vt 0.5742 0.9229 0.0000 vt 0.5671 0.9215 0.0000 vt 0.5665 0.9195 0.0000 vt 0.5725 0.9176 0.0000 vt 0.5837 0.9162 0.0000 vt 0.5969 0.9157 0.0000 vt 0.6086 0.9162 0.0000 vt 0.6158 0.9176 0.0000 vt 0.6164 0.9196 0.0000 vt 0.5774 0.8825 0.0000 vt 0.5920 0.9210 0.0000 vt 0.5213 0.9166 0.0000 vt 0.5547 0.9058 0.0000 vt 0.5777 0.9018 0.0000 vt 0.5658 0.9080 0.0000 vt 0.6035 0.9004 0.0000 vt 0.6142 0.9048 0.0000 vt 0.6536 0.9080 0.0000 vt 0.6252 0.9019 0.0000 vt 0.6370 0.9058 0.0000 vt 0.6735 0.9167 0.0000 vt 0.6358 0.9112 0.0000 vt 0.6685 0.9285 0.0000 vt 0.6218 0.9165 0.0000 vt 0.6400 0.9404 0.0000 vt 0.5988 0.9205 0.0000 vt 0.5955 0.9490 0.0000 vt 0.5730 0.9219 0.0000 vt 0.5471 0.9521 0.0000 vt 0.5077 0.9490 0.0000 vt 0.5513 0.9204 0.0000 vt 0.5395 0.9165 0.0000 vt 0.4878 0.9403 0.0000 vt 0.4928 0.9284 0.0000 vt 0.5407 0.9111 0.0000 vt 0.5651 0.9187 0.0000 vt 0.5075 0.9321 0.0000 vt 0.6247 0.9138 0.0000 vt 0.6704 0.9187 0.0000 vt 0.6899 0.9322 0.0000 vt 0.6779 0.9505 0.0000 vt 0.6378 0.9689 0.0000 vt 0.5801 0.9823 0.0000 vt 0.5205 0.9872 0.0000 vt 0.4748 0.9823 0.0000 vt 0.4553 0.9688 0.0000 vt 0.4673 0.9505 0.0000 vt 0.5053 0.9419 0.0000 vt 0.5671 0.9278 0.0000 vt 0.6314 0.9227 0.0000 vt 0.6811 0.9279 0.0000 vt 0.7028 0.9420 0.0000 vt 0.6907 0.9613 0.0000 vt 0.6481 0.9806 0.0000 vt 0.5863 0.9947 0.0000 vt 0.5220 0.9999 0.0000 vt 0.4723 0.9947 0.0000 vt 0.4506 0.9805 0.0000 vt 0.4627 0.9612 0.0000 vt 0.5678 0.9303 0.0000 vt 0.5107 0.9433 0.0000 vt 0.6272 0.9255 0.0000 vt 0.6731 0.9303 0.0000 vt 0.6932 0.9434 0.0000 vt 0.6820 0.9612 0.0000 vt 0.6426 0.9790 0.0000 vt 0.5855 0.9921 0.0000 vt 0.5261 0.9968 0.0000 vt 0.4802 0.9920 0.0000 vt 0.4602 0.9790 0.0000 vt 0.4713 0.9611 0.0000 vt 0.5729 0.9482 0.0000 vt 0.5493 0.9536 0.0000 vt 0.5975 0.9463 0.0000 vt 0.6166 0.9483 0.0000 vt 0.6249 0.9537 0.0000 vt 0.6202 0.9611 0.0000 vt 0.6039 0.9684 0.0000 vt 0.5803 0.9738 0.0000 vt 0.5557 0.9758 0.0000 vt 0.5366 0.9738 0.0000 vt 0.5283 0.9684 0.0000 vt 0.5330 0.9610 0.0000 vt 0.5870 0.9078 0.0000 vt 0.5766 0.9610 0.0000 g Object019 f 1187/1187/1178 1188/1188/1179 1189/1189/1180 f 1189/1189/1180 1190/1190/1181 1187/1187/1178 f 1191/1191/1182 1192/1192/1183 1188/1188/1179 f 1188/1188/1179 1187/1187/1178 1191/1191/1182 f 1193/1193/1184 1194/1194/1185 1192/1192/1183 f 1192/1192/1183 1191/1191/1182 1193/1193/1184 f 1195/1195/1186 1196/1196/1187 1194/1194/1185 f 1194/1194/1185 1193/1193/1184 1195/1195/1186 f 1197/1197/1188 1198/1198/1189 1196/1196/1187 f 1196/1196/1187 1195/1195/1186 1197/1197/1188 f 1199/1199/1190 1200/1200/1191 1198/1198/1189 f 1198/1198/1189 1197/1197/1188 1199/1199/1190 f 1201/1201/1192 1202/1202/1193 1200/1200/1191 f 1200/1200/1191 1199/1199/1190 1201/1201/1192 f 1203/1203/1194 1204/1204/1195 1202/1202/1193 f 1202/1202/1193 1201/1201/1192 1203/1203/1194 f 1205/1205/1196 1206/1206/1197 1204/1204/1195 f 1204/1204/1195 1203/1203/1194 1205/1205/1196 f 1207/1207/1198 1208/1208/1199 1206/1206/1197 f 1206/1206/1197 1205/1205/1196 1207/1207/1198 f 1209/1209/1200 1210/1210/1201 1208/1208/1199 f 1208/1208/1199 1207/1207/1198 1209/1209/1200 f 1190/1190/1181 1189/1189/1180 1210/1210/1201 f 1210/1210/1201 1209/1209/1200 1190/1190/1181 f 1188/1188/1179 1211/1211/1202 1212/1212/1203 f 1212/1212/1203 1189/1189/1180 1188/1188/1179 f 1192/1192/1183 1213/1213/1204 1211/1211/1202 f 1211/1211/1202 1188/1188/1179 1192/1192/1183 f 1194/1194/1185 1214/1214/1205 1213/1213/1204 f 1213/1213/1204 1192/1192/1183 1194/1194/1185 f 1196/1196/1187 1215/1215/1206 1214/1214/1205 f 1214/1214/1205 1194/1194/1185 1196/1196/1187 f 1198/1198/1189 1216/1216/1207 1215/1215/1206 f 1215/1215/1206 1196/1196/1187 1198/1198/1189 f 1200/1200/1191 1217/1217/1208 1216/1216/1207 f 1216/1216/1207 1198/1198/1189 1200/1200/1191 f 1202/1202/1193 1218/1218/1209 1217/1217/1208 f 1217/1217/1208 1200/1200/1191 1202/1202/1193 f 1204/1204/1195 1219/1219/1210 1218/1218/1209 f 1218/1218/1209 1202/1202/1193 1204/1204/1195 f 1206/1206/1197 1220/1220/1211 1219/1219/1210 f 1219/1219/1210 1204/1204/1195 1206/1206/1197 f 1208/1208/1199 1221/1221/1212 1220/1220/1211 f 1220/1220/1211 1206/1206/1197 1208/1208/1199 f 1210/1210/1201 1222/1222/1213 1221/1221/1212 f 1221/1221/1212 1208/1208/1199 1210/1210/1201 f 1189/1189/1180 1212/1212/1203 1222/1222/1213 f 1222/1222/1213 1210/1210/1201 1189/1189/1180 f 1212/1212/1203 1211/1211/1202 1223/1223/1214 f 1223/1223/1214 1224/1224/1215 1212/1212/1203 f 1211/1211/1202 1213/1213/1204 1225/1225/1216 f 1225/1225/1216 1223/1223/1214 1211/1211/1202 f 1214/1214/1205 1226/1226/1217 1225/1225/1216 f 1225/1225/1216 1213/1213/1204 1214/1214/1205 f 1215/1215/1206 1227/1227/1218 1226/1226/1217 f 1226/1226/1217 1214/1214/1205 1215/1215/1206 f 1216/1216/1207 1228/1228/1219 1227/1227/1218 f 1227/1227/1218 1215/1215/1206 1216/1216/1207 f 1217/1217/1208 1229/1229/1220 1228/1228/1219 f 1228/1228/1219 1216/1216/1207 1217/1217/1208 f 1217/1217/1208 1218/1218/1209 1230/1230/1221 f 1230/1230/1221 1229/1229/1220 1217/1217/1208 f 1218/1218/1209 1219/1219/1210 1231/1231/1222 f 1231/1231/1222 1230/1230/1221 1218/1218/1209 f 1220/1220/1211 1232/1232/1223 1231/1231/1222 f 1231/1231/1222 1219/1219/1210 1220/1220/1211 f 1221/1221/1212 1233/1233/1224 1232/1232/1223 f 1232/1232/1223 1220/1220/1211 1221/1221/1212 f 1222/1222/1213 1234/1234/1225 1233/1233/1224 f 1233/1233/1224 1221/1221/1212 1222/1222/1213 f 1222/1222/1213 1212/1212/1203 1224/1224/1215 f 1224/1224/1215 1234/1234/1225 1222/1222/1213 f 1223/1223/1214 1235/1235/1226 1236/1236/1227 f 1236/1236/1227 1224/1224/1215 1223/1223/1214 f 1225/1225/1216 1237/1237/1228 1235/1235/1226 f 1235/1235/1226 1223/1223/1214 1225/1225/1216 f 1225/1225/1216 1226/1226/1217 1238/1238/1229 f 1238/1238/1229 1237/1237/1228 1225/1225/1216 f 1226/1226/1217 1227/1227/1218 1239/1239/1230 f 1239/1239/1230 1238/1238/1229 1226/1226/1217 f 1227/1227/1218 1228/1228/1219 1240/1240/1231 f 1240/1240/1231 1239/1239/1230 1227/1227/1218 f 1229/1229/1220 1241/1241/1232 1240/1240/1231 f 1240/1240/1231 1228/1228/1219 1229/1229/1220 f 1230/1230/1221 1242/1242/1233 1241/1241/1232 f 1241/1241/1232 1229/1229/1220 1230/1230/1221 f 1231/1231/1222 1243/1243/1234 1242/1242/1233 f 1242/1242/1233 1230/1230/1221 1231/1231/1222 f 1231/1231/1222 1232/1232/1223 1244/1244/1235 f 1244/1244/1235 1243/1243/1234 1231/1231/1222 f 1232/1232/1223 1233/1233/1224 1245/1245/1236 f 1245/1245/1236 1244/1244/1235 1232/1232/1223 f 1233/1233/1224 1234/1234/1225 1246/1246/1237 f 1246/1246/1237 1245/1245/1236 1233/1233/1224 f 1224/1224/1215 1236/1236/1227 1246/1246/1237 f 1246/1246/1237 1234/1234/1225 1224/1224/1215 f 1236/1236/1227 1235/1235/1226 1247/1247/1238 f 1247/1247/1238 1248/1248/1239 1236/1236/1227 f 1237/1237/1228 1249/1249/1240 1247/1247/1238 f 1247/1247/1238 1235/1235/1226 1237/1237/1228 f 1238/1238/1229 1250/1250/1241 1249/1249/1240 f 1249/1249/1240 1237/1237/1228 1238/1238/1229 f 1251/1251/1242 1250/1250/1241 1238/1238/1229 f 1238/1238/1229 1239/1239/1230 1251/1251/1242 f 1252/1252/1243 1251/1251/1242 1239/1239/1230 f 1239/1239/1230 1240/1240/1231 1252/1252/1243 f 1241/1241/1232 1253/1253/1244 1252/1252/1243 f 1252/1252/1243 1240/1240/1231 1241/1241/1232 f 1242/1242/1233 1254/1254/1245 1253/1253/1244 f 1253/1253/1244 1241/1241/1232 1242/1242/1233 f 1243/1243/1234 1255/1255/1246 1254/1254/1245 f 1254/1254/1245 1242/1242/1233 1243/1243/1234 f 1244/1244/1235 1256/1256/1247 1255/1255/1246 f 1255/1255/1246 1243/1243/1234 1244/1244/1235 f 1257/1257/1248 1256/1256/1247 1244/1244/1235 f 1244/1244/1235 1245/1245/1236 1257/1257/1248 f 1258/1258/1249 1257/1257/1248 1245/1245/1236 f 1245/1245/1236 1246/1246/1237 1258/1258/1249 f 1246/1246/1237 1236/1236/1227 1248/1248/1239 f 1248/1248/1239 1258/1258/1249 1246/1246/1237 f 1248/1248/1239 1247/1247/1238 1259/1259/1250 f 1259/1259/1250 1260/1260/1251 1248/1248/1239 f 1259/1259/1250 1247/1247/1238 1249/1249/1240 f 1249/1249/1240 1261/1261/1252 1259/1259/1250 f 1249/1249/1240 1250/1250/1241 1262/1262/1253 f 1262/1262/1253 1261/1261/1252 1249/1249/1240 f 1250/1250/1241 1251/1251/1242 1263/1263/1254 f 1263/1263/1254 1262/1262/1253 1250/1250/1241 f 1251/1251/1242 1252/1252/1243 1264/1264/1255 f 1264/1264/1255 1263/1263/1254 1251/1251/1242 f 1253/1253/1244 1265/1265/1256 1264/1264/1255 f 1264/1264/1255 1252/1252/1243 1253/1253/1244 f 1254/1254/1245 1266/1266/1257 1265/1265/1256 f 1265/1265/1256 1253/1253/1244 1254/1254/1245 f 1255/1255/1246 1267/1267/1258 1266/1266/1257 f 1266/1266/1257 1254/1254/1245 1255/1255/1246 f 1255/1255/1246 1256/1256/1247 1268/1268/1259 f 1268/1268/1259 1267/1267/1258 1255/1255/1246 f 1256/1256/1247 1257/1257/1248 1269/1269/1260 f 1269/1269/1260 1268/1268/1259 1256/1256/1247 f 1257/1257/1248 1258/1258/1249 1270/1270/1261 f 1270/1270/1261 1269/1269/1260 1257/1257/1248 f 1258/1258/1249 1248/1248/1239 1260/1260/1251 f 1260/1260/1251 1270/1270/1261 1258/1258/1249 f 1187/1187/1178 1190/1190/1181 1271/1271/1262 f 1191/1191/1182 1187/1187/1178 1271/1271/1262 f 1193/1193/1184 1191/1191/1182 1271/1271/1262 f 1195/1195/1186 1193/1193/1184 1271/1271/1262 f 1197/1197/1188 1195/1195/1186 1271/1271/1262 f 1199/1199/1190 1197/1197/1188 1271/1271/1262 f 1201/1201/1192 1199/1199/1190 1271/1271/1262 f 1203/1203/1194 1201/1201/1192 1271/1271/1262 f 1205/1205/1196 1203/1203/1194 1271/1271/1262 f 1207/1207/1198 1205/1205/1196 1271/1271/1262 f 1209/1209/1200 1207/1207/1198 1271/1271/1262 f 1190/1190/1181 1209/1209/1200 1271/1271/1262 f 1260/1260/1251 1259/1259/1250 1272/1272/1263 f 1259/1259/1250 1261/1261/1252 1272/1272/1263 f 1261/1261/1252 1262/1262/1253 1272/1272/1263 f 1262/1262/1253 1263/1263/1254 1272/1272/1263 f 1263/1263/1254 1264/1264/1255 1272/1272/1263 f 1264/1264/1255 1265/1265/1256 1272/1272/1263 f 1265/1265/1256 1266/1266/1257 1272/1272/1263 f 1266/1266/1257 1267/1267/1258 1272/1272/1263 f 1267/1267/1258 1268/1268/1259 1272/1272/1263 f 1268/1268/1259 1269/1269/1260 1272/1272/1263 f 1269/1269/1260 1270/1270/1261 1272/1272/1263 f 1270/1270/1261 1260/1260/1251 1272/1272/1263 f 1273/1273/1264 1274/1274/1265 1275/1275/1266 f 1275/1275/1266 1276/1276/1267 1273/1273/1264 f 1276/1276/1267 1275/1275/1266 1277/1277/1268 f 1277/1277/1268 1278/1278/1269 1276/1276/1267 f 1279/1279/1270 1278/1278/1269 1277/1277/1268 f 1277/1277/1268 1280/1280/1271 1279/1279/1270 f 1280/1280/1271 1281/1281/1272 1282/1282/1273 f 1282/1282/1273 1279/1279/1270 1280/1280/1271 f 1282/1282/1273 1281/1281/1272 1283/1283/1274 f 1283/1283/1274 1284/1284/1275 1282/1282/1273 f 1285/1285/1276 1286/1286/1277 1284/1284/1275 f 1284/1284/1275 1283/1283/1274 1285/1285/1276 f 1285/1285/1276 1287/1287/1278 1288/1288/1279 f 1288/1288/1279 1286/1286/1277 1285/1285/1276 f 1288/1288/1279 1287/1287/1278 1289/1289/1280 f 1289/1289/1280 1290/1290/1281 1288/1288/1279 f 1291/1291/1282 1290/1290/1281 1289/1289/1280 f 1289/1289/1280 1292/1292/1283 1291/1291/1282 f 1291/1291/1282 1292/1292/1283 1293/1293/1284 f 1293/1293/1284 1294/1294/1285 1291/1291/1282 f 1295/1295/1286 1294/1294/1285 1293/1293/1284 f 1293/1293/1284 1296/1296/1287 1295/1295/1286 f 1295/1295/1286 1296/1296/1287 1274/1274/1265 f 1274/1274/1265 1273/1273/1264 1295/1295/1286 f 1297/1297/1288 1298/1298/1289 1273/1273/1264 f 1273/1273/1264 1276/1276/1267 1297/1297/1288 f 1276/1276/1267 1278/1278/1269 1299/1299/1290 f 1299/1299/1290 1297/1297/1288 1276/1276/1267 f 1279/1279/1270 1300/1300/1291 1299/1299/1290 f 1299/1299/1290 1278/1278/1269 1279/1279/1270 f 1300/1300/1291 1279/1279/1270 1282/1282/1273 f 1282/1282/1273 1301/1301/1292 1300/1300/1291 f 1284/1284/1275 1302/1302/1293 1301/1301/1292 f 1301/1301/1292 1282/1282/1273 1284/1284/1275 f 1284/1284/1275 1286/1286/1277 1303/1303/1294 f 1303/1303/1294 1302/1302/1293 1284/1284/1275 f 1303/1303/1294 1286/1286/1277 1288/1288/1279 f 1288/1288/1279 1304/1304/1295 1303/1303/1294 f 1304/1304/1295 1288/1288/1279 1290/1290/1281 f 1290/1290/1281 1305/1305/1296 1304/1304/1295 f 1290/1290/1281 1291/1291/1282 1306/1306/1297 f 1306/1306/1297 1305/1305/1296 1290/1290/1281 f 1306/1306/1297 1291/1291/1282 1294/1294/1285 f 1294/1294/1285 1307/1307/1298 1306/1306/1297 f 1307/1307/1298 1294/1294/1285 1295/1295/1286 f 1295/1295/1286 1308/1308/1299 1307/1307/1298 f 1298/1298/1289 1308/1308/1299 1295/1295/1286 f 1295/1295/1286 1273/1273/1264 1298/1298/1289 f 1309/1309/1300 1298/1298/1289 1297/1297/1288 f 1297/1297/1288 1310/1310/1301 1309/1309/1300 f 1310/1310/1301 1297/1297/1288 1299/1299/1290 f 1299/1299/1290 1311/1311/1302 1310/1310/1301 f 1300/1300/1291 1312/1312/1303 1311/1311/1302 f 1311/1311/1302 1299/1299/1290 1300/1300/1291 f 1313/1313/1304 1312/1312/1303 1300/1300/1291 f 1300/1300/1291 1301/1301/1292 1313/1313/1304 f 1302/1302/1293 1314/1314/1305 1313/1313/1304 f 1313/1313/1304 1301/1301/1292 1302/1302/1293 f 1303/1303/1294 1315/1315/1306 1314/1314/1305 f 1314/1314/1305 1302/1302/1293 1303/1303/1294 f 1304/1304/1295 1316/1316/1307 1315/1315/1306 f 1315/1315/1306 1303/1303/1294 1304/1304/1295 f 1305/1305/1296 1317/1317/1308 1316/1316/1307 f 1316/1316/1307 1304/1304/1295 1305/1305/1296 f 1306/1306/1297 1318/1318/1309 1317/1317/1308 f 1317/1317/1308 1305/1305/1296 1306/1306/1297 f 1307/1307/1298 1319/1319/1310 1318/1318/1309 f 1318/1318/1309 1306/1306/1297 1307/1307/1298 f 1308/1308/1299 1320/1320/1311 1319/1319/1310 f 1319/1319/1310 1307/1307/1298 1308/1308/1299 f 1308/1308/1299 1298/1298/1289 1309/1309/1300 f 1309/1309/1300 1320/1320/1311 1308/1308/1299 f 1310/1310/1301 1321/1321/1312 1322/1322/1313 f 1322/1322/1313 1309/1309/1300 1310/1310/1301 f 1311/1311/1302 1323/1323/1314 1321/1321/1312 f 1321/1321/1312 1310/1310/1301 1311/1311/1302 f 1312/1312/1303 1324/1324/1315 1323/1323/1314 f 1323/1323/1314 1311/1311/1302 1312/1312/1303 f 1313/1313/1304 1325/1325/1316 1324/1324/1315 f 1324/1324/1315 1312/1312/1303 1313/1313/1304 f 1314/1314/1305 1326/1326/1317 1325/1325/1316 f 1325/1325/1316 1313/1313/1304 1314/1314/1305 f 1315/1315/1306 1327/1327/1318 1326/1326/1317 f 1326/1326/1317 1314/1314/1305 1315/1315/1306 f 1316/1316/1307 1328/1328/1319 1327/1327/1318 f 1327/1327/1318 1315/1315/1306 1316/1316/1307 f 1317/1317/1308 1329/1329/1320 1328/1328/1319 f 1328/1328/1319 1316/1316/1307 1317/1317/1308 f 1318/1318/1309 1330/1330/1321 1329/1329/1320 f 1329/1329/1320 1317/1317/1308 1318/1318/1309 f 1319/1319/1310 1331/1331/1322 1330/1330/1321 f 1330/1330/1321 1318/1318/1309 1319/1319/1310 f 1320/1320/1311 1332/1332/1323 1331/1331/1322 f 1331/1331/1322 1319/1319/1310 1320/1320/1311 f 1320/1320/1311 1309/1309/1300 1322/1322/1313 f 1322/1322/1313 1332/1332/1323 1320/1320/1311 f 1333/1333/1324 1334/1334/1325 1322/1322/1313 f 1322/1322/1313 1321/1321/1312 1333/1333/1324 f 1335/1335/1326 1333/1333/1324 1321/1321/1312 f 1321/1321/1312 1323/1323/1314 1335/1335/1326 f 1336/1336/1327 1335/1335/1326 1323/1323/1314 f 1323/1323/1314 1324/1324/1315 1336/1336/1327 f 1325/1325/1316 1337/1337/1328 1336/1336/1327 f 1336/1336/1327 1324/1324/1315 1325/1325/1316 f 1338/1338/1329 1337/1337/1328 1325/1325/1316 f 1325/1325/1316 1326/1326/1317 1338/1338/1329 f 1339/1339/1330 1338/1338/1329 1326/1326/1317 f 1326/1326/1317 1327/1327/1318 1339/1339/1330 f 1340/1340/1331 1339/1339/1330 1327/1327/1318 f 1327/1327/1318 1328/1328/1319 1340/1340/1331 f 1341/1341/1332 1340/1340/1331 1328/1328/1319 f 1328/1328/1319 1329/1329/1320 1341/1341/1332 f 1342/1342/1333 1341/1341/1332 1329/1329/1320 f 1329/1329/1320 1330/1330/1321 1342/1342/1333 f 1343/1343/1334 1342/1342/1333 1330/1330/1321 f 1330/1330/1321 1331/1331/1322 1343/1343/1334 f 1344/1344/1335 1343/1343/1334 1331/1331/1322 f 1331/1331/1322 1332/1332/1323 1344/1344/1335 f 1334/1334/1325 1344/1344/1335 1332/1332/1323 f 1332/1332/1323 1322/1322/1313 1334/1334/1325 f 1275/1275/1266 1274/1274/1265 1345/1345/1262 f 1277/1277/1268 1275/1275/1266 1345/1345/1262 f 1280/1280/1271 1277/1277/1268 1345/1345/1262 f 1281/1281/1272 1280/1280/1271 1345/1345/1262 f 1283/1283/1274 1281/1281/1272 1345/1345/1262 f 1285/1285/1276 1283/1283/1274 1345/1345/1262 f 1287/1287/1278 1285/1285/1276 1345/1345/1262 f 1289/1289/1280 1287/1287/1278 1345/1345/1262 f 1292/1292/1283 1289/1289/1280 1345/1345/1262 f 1293/1293/1284 1292/1292/1283 1345/1345/1262 f 1296/1296/1287 1293/1293/1284 1345/1345/1262 f 1274/1274/1265 1296/1296/1287 1345/1345/1262 f 1334/1334/1325 1333/1333/1324 1346/1346/1263 f 1333/1333/1324 1335/1335/1326 1346/1346/1263 f 1335/1335/1326 1336/1336/1327 1346/1346/1263 f 1336/1336/1327 1337/1337/1328 1346/1346/1263 f 1337/1337/1328 1338/1338/1329 1346/1346/1263 f 1338/1338/1329 1339/1339/1330 1346/1346/1263 f 1339/1339/1330 1340/1340/1331 1346/1346/1263 f 1340/1340/1331 1341/1341/1332 1346/1346/1263 f 1341/1341/1332 1342/1342/1333 1346/1346/1263 f 1342/1342/1333 1343/1343/1334 1346/1346/1263 f 1343/1343/1334 1344/1344/1335 1346/1346/1263 f 1344/1344/1335 1334/1334/1325 1346/1346/1263 v 2.2569 45.3845 72.1561 v 3.4447 43.2217 70.0443 v 5.5908 45.3842 70.0450 v 3.4183 46.5548 72.1565 v 0.6702 44.9473 72.2572 v 0.5130 42.4138 70.2311 v -0.9164 45.3603 72.4326 v -2.4187 43.1770 70.5554 v -2.0779 46.5129 72.6355 v -4.5649 45.3068 70.9302 v -2.5030 48.0963 72.8113 v -5.3504 48.2325 71.2551 v -2.0779 49.6862 72.9131 v -4.5649 51.1701 71.4432 v -0.9164 50.8565 72.9135 v -2.4187 53.3326 71.4439 v 0.6702 51.2937 72.8123 v 0.5130 54.1405 71.2571 v 2.2569 50.8807 72.6369 v 3.4447 53.3773 70.9328 v 3.4183 49.7281 72.4341 v 5.5908 51.2476 70.5580 v 3.8435 48.1447 72.2582 v 6.3763 48.3219 70.2331 v 4.1081 41.9063 67.1499 v 6.9121 44.7318 67.1508 v 0.2776 40.8508 67.3940 v -3.5528 41.8479 67.8176 v -6.3569 44.6306 68.3073 v -7.3832 48.4532 68.7319 v -6.3569 52.2915 68.9776 v -3.5528 55.1169 68.9785 v 0.2776 56.1725 68.7344 v 4.1081 55.1753 68.3108 v 6.9121 52.3926 67.8211 v 7.9385 48.5700 67.3965 v 4.1460 41.6387 63.9134 v 7.1811 44.6969 63.9144 v -0.0000 40.4961 64.1776 v -4.1460 41.5754 64.6361 v -7.1811 44.5874 65.1662 v -8.2921 48.7250 65.6257 v -7.1811 52.8795 65.8916 v -4.1460 55.9377 65.8926 v 0.0000 57.0802 65.6286 v 4.1460 56.0009 65.1699 v 7.1811 52.9890 64.6399 v 8.2921 48.8514 64.1803 v 3.5528 42.4595 60.8275 v 6.3569 45.2849 60.8285 v -0.2776 41.4039 61.0717 v -4.1081 42.4010 61.4952 v -6.9121 45.1837 61.9849 v -7.9385 49.0063 62.4095 v -6.9121 52.8446 62.6552 v -4.1081 55.6700 62.6562 v -0.2776 56.7256 62.4121 v 3.5528 55.7285 61.9885 v 6.3569 52.9458 61.4987 v 7.3832 49.1232 61.0741 v 2.4187 44.2437 58.3622 v 4.5648 46.4063 58.3629 v -0.5130 43.4358 58.5491 v -3.4447 44.1990 58.8732 v -5.5908 46.3288 59.2480 v -6.3764 49.2545 59.5730 v -5.5908 52.1922 59.7610 v -3.4447 54.3547 59.7618 v -0.5130 55.1626 59.5749 v 2.4187 54.3994 59.2508 v 4.5648 52.2696 58.8759 v 5.3504 49.3439 58.5509 v 0.9164 46.7199 56.8926 v 2.0779 47.8902 56.8930 v -0.6702 46.2828 56.9938 v -2.2569 46.6957 57.1691 v -3.4183 47.8483 57.3720 v -3.8435 49.4317 57.5478 v -3.4183 51.0215 57.6497 v -2.2569 52.1919 57.6500 v -0.6702 52.6291 57.5489 v 0.9164 52.2161 57.3734 v 2.0779 51.0634 57.1707 v 2.5030 49.4801 56.9947 v 0.7255 48.0655 73.1636 v -0.7255 49.5109 56.6426 v -4.9481 39.9098 68.9539 v -4.8135 39.5292 70.4649 v -8.5345 42.4587 70.9222 v -8.6241 42.5949 69.3659 v -7.9852 43.0319 69.0563 v -4.0991 40.3871 68.4836 v 0.5708 39.4213 70.5930 v -3.9769 39.3862 70.9893 v -4.1032 39.7434 69.5712 v 0.4444 39.7785 69.1750 v 0.3421 40.2529 68.0818 v 0.3843 39.9509 68.4892 v 5.0071 39.8128 68.7772 v 5.1332 39.4556 70.1953 v 5.7343 39.9913 68.0228 v 4.7834 40.4549 67.7094 v 5.8686 39.6106 69.5339 v 9.3589 42.7320 67.7986 v 9.5419 42.5966 69.3467 v 8.6694 43.1589 67.6047 v -8.8952 41.8632 74.0473 v -5.7438 38.7617 73.5856 v -6.6013 37.1909 79.9079 v -10.2563 41.0198 80.5587 v -5.4313 37.1935 79.8317 v -4.7473 38.6666 73.9090 v 0.8206 38.7096 73.4238 v 1.3375 37.2467 79.2422 v 8.1037 37.2967 78.6521 v 6.4016 38.7517 72.9373 v 12.9262 41.1966 78.5382 v 9.2693 37.3119 78.5247 v 7.3289 38.8613 72.4462 v 10.4467 42.0107 72.3615 v -6.3548 36.4939 82.6876 v -12.0998 39.3704 83.4157 v -5.8104 34.9543 88.7996 v -11.6058 38.8783 89.0404 v -5.1999 36.5393 82.4403 v 1.5706 36.5914 81.8598 v -4.6890 35.0945 88.1762 v 2.3035 34.5188 90.0882 v 8.3170 36.6424 81.2622 v 8.8279 35.1976 86.9981 v 15.2609 39.5790 81.0311 v 9.4945 36.6147 81.3062 v 10.0389 35.0752 87.4182 v 15.7549 39.0869 86.6557 v -8.6241 53.7403 70.3410 v -8.5345 53.6042 71.8973 v -4.3167 56.5234 71.7823 v -4.4281 56.6594 70.2279 v 0.5037 56.7418 71.3780 v 0.3674 56.8776 69.8259 v 5.3241 56.5969 70.9420 v 5.1628 56.7325 69.3920 v 9.5419 53.7420 70.3218 v 9.3589 53.8775 68.7737 v -4.8470 56.4648 81.4349 v -10.2563 53.9386 81.6890 v -12.0998 54.2209 84.7150 v -5.7105 56.5222 84.4141 v 1.3350 56.7144 80.9138 v 1.5865 56.7795 83.8055 v 8.8819 56.6334 83.1423 v 7.5170 56.5590 80.3573 v 15.2609 54.4295 82.3303 v 12.9262 54.1153 79.6685 v -5.1591 56.5047 90.7389 v 2.1475 56.7524 90.2393 v 9.4332 56.6159 89.4671 v 15.7549 53.9374 87.9550 v -7.5045 48.2016 69.4663 v -7.2232 52.0019 69.7741 v -3.8369 53.8030 69.6343 v -3.7495 48.2312 69.1392 v -3.8369 42.6581 68.6592 v -7.2232 44.4058 69.1095 v -9.2236 48.1629 69.9057 v -7.9852 53.3640 69.9602 v -8.5403 48.1935 69.5566 v -9.1371 48.0267 71.4622 v 0.3421 53.9546 69.2805 v 0.3421 48.2626 68.7826 v 0.3421 42.5706 68.2846 v 4.5211 53.8667 68.9058 v 4.4337 48.2936 68.4259 v 4.5211 42.7219 67.9308 v 7.9075 52.1173 68.4554 v 8.1887 48.3213 68.0986 v 7.9075 44.5212 67.7908 v 10.1444 48.1737 69.7817 v 9.9583 48.3091 68.2339 v -9.5400 47.7504 74.6190 v -11.0290 46.8070 81.1329 v -8.8952 53.6479 75.0783 v 13.6990 46.9956 78.9777 v 16.1721 46.3982 81.5378 v -3.0706 45.0273 98.1915 v -3.0982 53.2671 98.5962 v -7.8526 51.0450 97.4008 v -8.4277 45.7352 97.0311 v -7.8526 41.5434 96.5695 v -3.0982 38.8435 97.3343 v -13.0126 46.1757 84.0815 v -12.5282 45.6931 89.5971 v -11.6058 53.7288 90.3396 v 2.9047 44.6652 97.8705 v 2.8767 53.3272 98.3067 v 2.8767 38.0602 96.9710 v 8.8394 45.1181 97.1535 v 8.8118 53.3579 97.5582 v 8.8118 38.9343 96.2963 v 16.6565 45.9157 87.0535 v 13.9036 45.9055 95.0848 v 13.3208 51.2065 95.5554 v 13.3208 41.7048 94.7241 v 16.1452 38.6981 91.1003 v 9.8892 35.4575 92.8472 v 2.6143 34.2823 93.6301 v -4.7032 35.3462 94.1190 v -11.2154 38.4895 93.4850 v -12.1488 45.3152 93.9173 v -11.2154 53.3399 94.7842 v -4.7032 56.0505 95.9304 v 2.6143 56.2873 95.5553 v 9.8892 56.1617 94.6586 v 16.1452 53.5486 92.3996 v 17.0359 45.5377 91.3737 v -4.3821 56.3358 74.9171 v 0.7758 56.5672 74.4844 v 5.9336 56.4144 74.0180 v 10.4467 53.7953 73.3925 v 11.0915 47.9077 72.8208 v 2.3649 34.3463 90.7738 v -4.0991 56.0700 69.8557 v 0.3421 56.2722 69.4833 v 4.7834 56.1377 69.0815 v 8.6694 53.4910 68.5087 v 9.2246 48.3290 68.0083 vn 0.2836 -0.4311 0.8566 vn 0.4202 -0.6807 0.6001 vn 0.6836 -0.4152 0.6002 vn 0.4330 -0.2806 0.8566 vn 0.0795 -0.4873 0.8696 vn 0.0603 -0.7798 0.6231 vn -0.1246 -0.4342 0.8922 vn -0.2997 -0.6861 0.6629 vn -0.2740 -0.2860 0.9182 vn -0.5631 -0.4247 0.7089 vn -0.3286 -0.0823 0.9409 vn -0.6596 -0.0655 0.7488 vn -0.2740 0.1222 0.9539 vn -0.5631 0.2951 0.7719 vn -0.1245 0.2727 0.9540 vn -0.2997 0.5606 0.7720 vn 0.0795 0.3290 0.9410 vn 0.0602 0.6598 0.7490 vn 0.2836 0.2758 0.9184 vn 0.4202 0.5661 0.7092 vn 0.4330 0.1276 0.8923 vn 0.6836 0.3046 0.6632 vn 0.4877 -0.0761 0.8697 vn 0.7801 -0.0545 0.6233 vn 0.4948 -0.8297 0.2586 vn 0.8333 -0.4886 0.2587 vn 0.0324 -0.9571 0.2880 vn -0.4300 -0.8367 0.3392 vn -0.7685 -0.5008 0.3983 vn -0.8924 -0.0393 0.4495 vn -0.7685 0.4240 0.4792 vn -0.4300 0.7651 0.4793 vn 0.0324 0.8925 0.4498 vn 0.4948 0.7721 0.3987 vn 0.8333 0.4362 0.3396 vn 0.9572 -0.0252 0.2883 vn 0.4981 -0.8589 -0.1189 vn 0.8627 -0.4915 -0.1188 vn -0.0000 -0.9962 -0.0872 vn -0.4981 -0.8665 -0.0321 vn -0.8627 -0.5047 0.0316 vn -0.9962 -0.0076 0.0868 vn -0.8627 0.4915 0.1188 vn -0.4981 0.8589 0.1189 vn -0.0000 0.9962 0.0872 vn 0.4981 0.8665 0.0321 vn 0.8627 0.5047 -0.0316 vn 0.9962 0.0076 -0.0868 vn 0.4300 -0.7651 -0.4793 vn 0.7685 -0.4240 -0.4792 vn -0.0324 -0.8925 -0.4498 vn -0.4948 -0.7722 -0.3987 vn -0.8333 -0.4362 -0.3396 vn -0.9572 0.0252 -0.2883 vn -0.8333 0.4886 -0.2587 vn -0.4948 0.8297 -0.2586 vn -0.0324 0.9571 -0.2880 vn 0.4300 0.8367 -0.3392 vn 0.7685 0.5008 -0.3983 vn 0.8924 0.0393 -0.4495 vn 0.2996 -0.5606 -0.7720 vn 0.5631 -0.2951 -0.7719 vn -0.0603 -0.6598 -0.7490 vn -0.4201 -0.5661 -0.7092 vn -0.6836 -0.3046 -0.6632 vn -0.7801 0.0545 -0.6233 vn -0.6836 0.4152 -0.6002 vn -0.4202 0.6807 -0.6001 vn -0.0603 0.7798 -0.6231 vn 0.2997 0.6862 -0.6629 vn 0.5631 0.4247 -0.7089 vn 0.6596 0.0655 -0.7488 vn 0.1245 -0.2727 -0.9540 vn 0.2739 -0.1222 -0.9540 vn -0.0795 -0.3289 -0.9410 vn -0.2835 -0.2758 -0.9184 vn -0.4330 -0.1276 -0.8923 vn -0.4876 0.0761 -0.8697 vn -0.4330 0.2806 -0.8566 vn -0.2836 0.4311 -0.8566 vn -0.0795 0.4873 -0.8696 vn 0.1246 0.4342 -0.8922 vn 0.2740 0.2860 -0.9182 vn 0.3286 0.0823 -0.9409 vn 0.0872 -0.0868 0.9924 vn -0.0872 0.0868 -0.9924 vn -0.3496 -0.7516 -0.5594 vn -0.2993 -0.9185 -0.2584 vn -0.8803 -0.4603 -0.1144 vn -0.7756 -0.3904 -0.4959 vn -0.2746 -0.0360 -0.9609 vn -0.1403 -0.2823 -0.9490 vn -0.0138 -0.9700 -0.2429 vn -0.0137 -0.9700 -0.2428 vn -0.0136 -0.9699 -0.2430 vn -0.0760 -0.4116 -0.9082 vn -0.0302 -0.9045 -0.4253 vn -0.0140 -0.9699 -0.2429 vn -0.0139 -0.9700 -0.2428 vn 0.2472 -0.7490 -0.6147 vn -0.0250 -0.2810 -0.9594 vn 0.2605 -0.9170 -0.3020 vn 0.6891 -0.3666 -0.6251 vn 0.8595 -0.4404 -0.2593 vn 0.1058 -0.0264 -0.9940 vn -0.8844 -0.4125 -0.2182 vn -0.3800 -0.8809 -0.2822 vn -0.4212 -0.8790 -0.2234 vn -0.8158 -0.3873 -0.4295 vn -0.0136 -0.9701 -0.2424 vn -0.0138 -0.9700 -0.2427 vn -0.0137 -0.9701 -0.2422 vn -0.0139 -0.9701 -0.2424 vn 0.7380 -0.3059 -0.6015 vn 0.3158 -0.8818 -0.3501 vn 0.3445 -0.8745 -0.3414 vn 0.8418 -0.4008 -0.3614 vn -0.2929 -0.9211 -0.2565 vn -0.8053 -0.5005 -0.3178 vn -0.2867 -0.9559 -0.0637 vn -0.8478 -0.5295 0.0281 vn -0.0136 -0.9700 -0.2425 vn -0.0137 -0.9701 -0.2424 vn -0.0136 -0.9700 -0.2429 vn -0.0140 -0.9700 -0.2425 vn -0.0139 -0.9700 -0.2429 vn 0.7751 -0.4709 -0.4212 vn 0.2146 -0.9428 -0.2552 vn 0.3079 -0.9466 -0.0960 vn 0.8390 -0.5350 -0.0990 vn -0.7742 0.4788 -0.4140 vn -0.8587 0.5124 -0.0086 vn -0.2991 0.9518 0.0680 vn -0.3172 0.8509 -0.4189 vn -0.0013 0.9974 0.0717 vn -0.0466 0.8883 -0.4568 vn 0.3027 0.9528 0.0247 vn 0.2264 0.8551 -0.4665 vn 0.8325 0.5353 -0.1430 vn 0.6838 0.4892 -0.5414 vn -0.2244 0.9713 -0.0791 vn -0.7343 0.5818 -0.3497 vn -0.7995 0.5774 -0.1652 vn -0.2084 0.9775 -0.0311 vn -0.0091 0.9997 -0.0232 vn -0.0074 0.9999 -0.0094 vn 0.1946 0.9792 -0.0576 vn 0.1834 0.9781 -0.0988 vn 0.7469 0.5985 -0.2896 vn 0.6632 0.5882 -0.4627 vn -0.2098 0.9751 0.0716 vn -0.0034 0.9989 0.0463 vn 0.2104 0.9772 0.0268 vn 0.7939 0.6074 -0.0280 vn -0.8774 0.0417 -0.4780 vn -0.2758 0.1958 -0.9411 vn -0.2892 0.0834 -0.9536 vn -0.9993 0.0030 -0.0361 vn 0.9779 0.0181 -0.2085 vn 0.7808 0.0543 -0.6225 vn -0.9847 0.0170 -0.1735 vn -0.9181 0.0285 -0.3953 vn -0.8269 0.5482 -0.1254 vn 0.8338 0.0396 -0.5507 vn 0.9145 0.0228 -0.4039 vn -0.0884 -0.0927 0.9918 vn -0.1137 0.3400 0.9335 vn -0.4149 0.1240 0.9014 vn -0.4499 -0.0847 0.8891 vn -0.4103 -0.2580 0.8747 vn -0.1539 -0.4029 0.9022 vn -0.9708 0.0085 -0.2396 vn -0.9961 -0.0176 0.0859 vn -0.8015 0.5855 0.1216 vn 0.0876 -0.0943 0.9917 vn 0.0768 0.3429 0.9362 vn 0.0826 -0.4368 0.8958 vn 0.2598 -0.0913 0.9614 vn 0.2709 0.3397 0.9007 vn 0.2980 -0.3958 0.8687 vn 0.9961 -0.0024 -0.0877 vn 0.5951 -0.0722 0.8004 vn 0.5637 0.1327 0.8152 vn 0.5519 -0.2323 0.8009 vn 0.7957 -0.5453 0.2637 vn 0.3651 -0.8350 0.4115 vn 0.0431 -0.9129 0.4060 vn -0.2673 -0.8306 0.4886 vn -0.7348 -0.5246 0.4299 vn -0.8908 -0.0546 0.4512 vn -0.7389 0.4886 0.4640 vn -0.2197 0.8544 0.4708 vn 0.0292 0.8977 0.4397 vn 0.2864 0.8585 0.4254 vn 0.8005 0.5004 0.3299 vn 0.9576 -0.0360 0.2859 vn -0.2839 0.9588 0.0063 vn -0.0067 0.9998 0.0165 vn 0.2639 0.9624 -0.0644 vn 0.7795 0.5549 -0.2907 vn 0.9403 0.0288 -0.3391 vn -0.0020 -0.9939 -0.1105 vn -0.1475 0.3044 -0.9410 vn -0.0851 0.3017 -0.9496 vn -0.0222 0.3054 -0.9520 vn 0.1059 0.1986 -0.9743 vn 0.1186 0.0865 -0.9892 vt 0.5155 0.3033 0.0000 vt 0.5342 0.3193 0.0000 vt 0.5814 0.3134 0.0000 vt 0.5410 0.3000 0.0000 vt 0.4852 0.3044 0.0000 vt 0.4783 0.3215 0.0000 vt 0.4583 0.3032 0.0000 vt 0.4285 0.3193 0.0000 vt 0.4419 0.3000 0.0000 vt 0.3983 0.3133 0.0000 vt 0.4405 0.2956 0.0000 vt 0.3956 0.3052 0.0000 vt 0.4544 0.2912 0.0000 vt 0.4213 0.2970 0.0000 vt 0.4799 0.2880 0.0000 vt 0.4684 0.2911 0.0000 vt 0.5102 0.2868 0.0000 vt 0.5244 0.2889 0.0000 vt 0.5371 0.2880 0.0000 vt 0.5742 0.2911 0.0000 vt 0.5535 0.2912 0.0000 vt 0.6044 0.2971 0.0000 vt 0.5549 0.2956 0.0000 vt 0.6071 0.3053 0.0000 vt 0.5497 0.3380 0.0000 vt 0.6113 0.3302 0.0000 vt 0.4766 0.3408 0.0000 vt 0.4116 0.3379 0.0000 vt 0.3721 0.3301 0.0000 vt 0.3686 0.3195 0.0000 vt 0.4022 0.3089 0.0000 vt 0.4638 0.3011 0.0000 vt 0.5369 0.2983 0.0000 vt 0.6019 0.3012 0.0000 vt 0.6415 0.3090 0.0000 vt 0.6449 0.3196 0.0000 vt 0.5597 0.3564 0.0000 vt 0.6263 0.3480 0.0000 vt 0.4806 0.3595 0.0000 vt 0.4102 0.3563 0.0000 vt 0.3674 0.3479 0.0000 vt 0.3637 0.3364 0.0000 vt 0.4000 0.3249 0.0000 vt 0.4667 0.3165 0.0000 vt 0.5458 0.3135 0.0000 vt 0.6162 0.3166 0.0000 vt 0.6590 0.3250 0.0000 vt 0.6627 0.3365 0.0000 vt 0.5625 0.3718 0.0000 vt 0.6241 0.3641 0.0000 vt 0.4894 0.3746 0.0000 vt 0.4244 0.3717 0.0000 vt 0.3849 0.3639 0.0000 vt 0.3814 0.3533 0.0000 vt 0.4150 0.3427 0.0000 vt 0.4766 0.3350 0.0000 vt 0.5497 0.3321 0.0000 vt 0.6147 0.3350 0.0000 vt 0.6543 0.3428 0.0000 vt 0.6577 0.3534 0.0000 vt 0.5579 0.3818 0.0000 vt 0.6050 0.3759 0.0000 vt 0.5019 0.3840 0.0000 vt 0.4522 0.3818 0.0000 vt 0.4219 0.3758 0.0000 vt 0.4193 0.3677 0.0000 vt 0.4450 0.3595 0.0000 vt 0.4921 0.3536 0.0000 vt 0.5481 0.3515 0.0000 vt 0.5978 0.3537 0.0000 vt 0.6281 0.3596 0.0000 vt 0.6307 0.3678 0.0000 vt 0.5464 0.3849 0.0000 vt 0.5719 0.3817 0.0000 vt 0.5162 0.3861 0.0000 vt 0.4892 0.3849 0.0000 vt 0.4728 0.3817 0.0000 vt 0.4714 0.3773 0.0000 vt 0.4853 0.3729 0.0000 vt 0.5108 0.3697 0.0000 vt 0.5411 0.3685 0.0000 vt 0.5680 0.3697 0.0000 vt 0.5844 0.3729 0.0000 vt 0.5858 0.3773 0.0000 vt 0.4964 0.2923 0.0000 vt 0.5299 0.3807 0.0000 vt 0.3751 0.3367 0.0000 vt 0.3710 0.3292 0.0000 vt 0.3159 0.3217 0.0000 vt 0.3199 0.3300 0.0000 vt 0.3341 0.3304 0.0000 vt 0.3936 0.3378 0.0000 vt 0.4655 0.3263 0.0000 vt 0.3835 0.3263 0.0000 vt 0.3874 0.3333 0.0000 vt 0.4694 0.3334 0.0000 vt 0.4731 0.3383 0.0000 vt 0.4712 0.3368 0.0000 vt 0.5516 0.3334 0.0000 vt 0.5478 0.3263 0.0000 vt 0.5677 0.3368 0.0000 vt 0.5538 0.3379 0.0000 vt 0.5636 0.3293 0.0000 vt 0.6442 0.3301 0.0000 vt 0.6419 0.3218 0.0000 vt 0.6344 0.3305 0.0000 vt 0.2970 0.3060 0.0000 vt 0.3413 0.3142 0.0000 vt 0.2991 0.2833 0.0000 vt 0.2484 0.2726 0.0000 vt 0.3201 0.2832 0.0000 vt 0.3575 0.3122 0.0000 vt 0.4579 0.3122 0.0000 vt 0.4422 0.2833 0.0000 vt 0.5642 0.2833 0.0000 vt 0.5585 0.3123 0.0000 vt 0.6664 0.2728 0.0000 vt 0.5853 0.2835 0.0000 vt 0.5770 0.3143 0.0000 vt 0.6457 0.3061 0.0000 vt 0.2916 0.2695 0.0000 vt 0.1996 0.2615 0.0000 vt 0.2751 0.2391 0.0000 vt 0.1882 0.2314 0.0000 vt 0.3131 0.2702 0.0000 vt 0.4351 0.2702 0.0000 vt 0.2976 0.2417 0.0000 vt 0.4129 0.2293 0.0000 vt 0.5568 0.2703 0.0000 vt 0.5413 0.2418 0.0000 vt 0.6929 0.2617 0.0000 vt 0.5774 0.2696 0.0000 vt 0.5609 0.2392 0.0000 vt 0.6815 0.2316 0.0000 vt 0.3638 0.2991 0.0000 vt 0.3598 0.2908 0.0000 vt 0.4472 0.2828 0.0000 vt 0.4508 0.2911 0.0000 vt 0.5348 0.2823 0.0000 vt 0.5379 0.2906 0.0000 vt 0.6210 0.2829 0.0000 vt 0.6237 0.2912 0.0000 vt 0.6857 0.2909 0.0000 vt 0.6880 0.2992 0.0000 vt 0.4065 0.2300 0.0000 vt 0.2992 0.2368 0.0000 vt 0.2580 0.2203 0.0000 vt 0.3819 0.2138 0.0000 vt 0.5188 0.2295 0.0000 vt 0.5142 0.2133 0.0000 vt 0.6450 0.2139 0.0000 vt 0.6294 0.2301 0.0000 vt 0.7513 0.2205 0.0000 vt 0.7172 0.2370 0.0000 vt 0.3713 0.1787 0.0000 vt 0.5034 0.1776 0.0000 vt 0.6344 0.1789 0.0000 vt 0.7399 0.1904 0.0000 vt 0.3631 0.3161 0.0000 vt 0.3831 0.3055 0.0000 vt 0.4511 0.3006 0.0000 vt 0.4308 0.3161 0.0000 vt 0.4073 0.3315 0.0000 vt 0.3532 0.3266 0.0000 vt 0.3310 0.3145 0.0000 vt 0.3747 0.3017 0.0000 vt 0.3444 0.3161 0.0000 vt 0.3270 0.3062 0.0000 vt 0.5269 0.3003 0.0000 vt 0.5046 0.3161 0.0000 vt 0.4822 0.3319 0.0000 vt 0.6018 0.3007 0.0000 vt 0.5783 0.3162 0.0000 vt 0.5580 0.3316 0.0000 vt 0.6559 0.3057 0.0000 vt 0.6460 0.3162 0.0000 vt 0.6260 0.3267 0.0000 vt 0.6746 0.3064 0.0000 vt 0.6769 0.3147 0.0000 vt 0.3085 0.2896 0.0000 vt 0.2573 0.2566 0.0000 vt 0.3433 0.2733 0.0000 vt 0.7031 0.2568 0.0000 vt 0.7362 0.2429 0.0000 vt 0.3360 0.1630 0.0000 vt 0.3689 0.1419 0.0000 vt 0.2791 0.1557 0.0000 vt 0.2477 0.1702 0.0000 vt 0.2418 0.1821 0.0000 vt 0.3122 0.1819 0.0000 vt 0.2100 0.2427 0.0000 vt 0.1988 0.2131 0.0000 vt 0.2466 0.1902 0.0000 vt 0.4413 0.1629 0.0000 vt 0.4759 0.1406 0.0000 vt 0.4159 0.1830 0.0000 vt 0.5507 0.1631 0.0000 vt 0.5836 0.1420 0.0000 vt 0.5269 0.1820 0.0000 vt 0.7250 0.2134 0.0000 vt 0.6504 0.1704 0.0000 vt 0.6609 0.1559 0.0000 vt 0.6235 0.1823 0.0000 vt 0.6725 0.2078 0.0000 vt 0.5424 0.2085 0.0000 vt 0.4061 0.2102 0.0000 vt 0.2793 0.2084 0.0000 vt 0.1792 0.2076 0.0000 vt 0.1901 0.1900 0.0000 vt 0.2376 0.1664 0.0000 vt 0.3607 0.1510 0.0000 vt 0.4926 0.1491 0.0000 vt 0.6238 0.1511 0.0000 vt 0.7309 0.1667 0.0000 vt 0.7163 0.1903 0.0000 vt 0.4352 0.2660 0.0000 vt 0.5289 0.2655 0.0000 vt 0.6212 0.2661 0.0000 vt 0.6921 0.2734 0.0000 vt 0.6805 0.2898 0.0000 vt 0.4111 0.2259 0.0000 vt 0.4553 0.2943 0.0000 vt 0.5361 0.2939 0.0000 vt 0.6155 0.2944 0.0000 vt 0.6750 0.3019 0.0000 vt 0.6647 0.3162 0.0000 g Object006 f 1347/1347/1336 1348/1348/1337 1349/1349/1338 f 1349/1349/1338 1350/1350/1339 1347/1347/1336 f 1348/1348/1337 1347/1347/1336 1351/1351/1340 f 1351/1351/1340 1352/1352/1341 1348/1348/1337 f 1352/1352/1341 1351/1351/1340 1353/1353/1342 f 1353/1353/1342 1354/1354/1343 1352/1352/1341 f 1354/1354/1343 1353/1353/1342 1355/1355/1344 f 1355/1355/1344 1356/1356/1345 1354/1354/1343 f 1355/1355/1344 1357/1357/1346 1358/1358/1347 f 1358/1358/1347 1356/1356/1345 1355/1355/1344 f 1357/1357/1346 1359/1359/1348 1360/1360/1349 f 1360/1360/1349 1358/1358/1347 1357/1357/1346 f 1361/1361/1350 1362/1362/1351 1360/1360/1349 f 1360/1360/1349 1359/1359/1348 1361/1361/1350 f 1362/1362/1351 1361/1361/1350 1363/1363/1352 f 1363/1363/1352 1364/1364/1353 1362/1362/1351 f 1364/1364/1353 1363/1363/1352 1365/1365/1354 f 1365/1365/1354 1366/1366/1355 1364/1364/1353 f 1366/1366/1355 1365/1365/1354 1367/1367/1356 f 1367/1367/1356 1368/1368/1357 1366/1366/1355 f 1367/1367/1356 1369/1369/1358 1370/1370/1359 f 1370/1370/1359 1368/1368/1357 1367/1367/1356 f 1369/1369/1358 1350/1350/1339 1349/1349/1338 f 1349/1349/1338 1370/1370/1359 1369/1369/1358 f 1348/1348/1337 1371/1371/1360 1372/1372/1361 f 1372/1372/1361 1349/1349/1338 1348/1348/1337 f 1352/1352/1341 1373/1373/1362 1371/1371/1360 f 1371/1371/1360 1348/1348/1337 1352/1352/1341 f 1354/1354/1343 1374/1374/1363 1373/1373/1362 f 1373/1373/1362 1352/1352/1341 1354/1354/1343 f 1356/1356/1345 1375/1375/1364 1374/1374/1363 f 1374/1374/1363 1354/1354/1343 1356/1356/1345 f 1358/1358/1347 1376/1376/1365 1375/1375/1364 f 1375/1375/1364 1356/1356/1345 1358/1358/1347 f 1360/1360/1349 1377/1377/1366 1376/1376/1365 f 1376/1376/1365 1358/1358/1347 1360/1360/1349 f 1362/1362/1351 1378/1378/1367 1377/1377/1366 f 1377/1377/1366 1360/1360/1349 1362/1362/1351 f 1364/1364/1353 1379/1379/1368 1378/1378/1367 f 1378/1378/1367 1362/1362/1351 1364/1364/1353 f 1366/1366/1355 1380/1380/1369 1379/1379/1368 f 1379/1379/1368 1364/1364/1353 1366/1366/1355 f 1368/1368/1357 1381/1381/1370 1380/1380/1369 f 1380/1380/1369 1366/1366/1355 1368/1368/1357 f 1370/1370/1359 1382/1382/1371 1381/1381/1370 f 1381/1381/1370 1368/1368/1357 1370/1370/1359 f 1349/1349/1338 1372/1372/1361 1382/1382/1371 f 1382/1382/1371 1370/1370/1359 1349/1349/1338 f 1371/1371/1360 1383/1383/1372 1384/1384/1373 f 1384/1384/1373 1372/1372/1361 1371/1371/1360 f 1373/1373/1362 1385/1385/1374 1383/1383/1372 f 1383/1383/1372 1371/1371/1360 1373/1373/1362 f 1374/1374/1363 1386/1386/1375 1385/1385/1374 f 1385/1385/1374 1373/1373/1362 1374/1374/1363 f 1375/1375/1364 1387/1387/1376 1386/1386/1375 f 1386/1386/1375 1374/1374/1363 1375/1375/1364 f 1376/1376/1365 1388/1388/1377 1387/1387/1376 f 1387/1387/1376 1375/1375/1364 1376/1376/1365 f 1377/1377/1366 1389/1389/1378 1388/1388/1377 f 1388/1388/1377 1376/1376/1365 1377/1377/1366 f 1378/1378/1367 1390/1390/1379 1389/1389/1378 f 1389/1389/1378 1377/1377/1366 1378/1378/1367 f 1379/1379/1368 1391/1391/1380 1390/1390/1379 f 1390/1390/1379 1378/1378/1367 1379/1379/1368 f 1380/1380/1369 1392/1392/1381 1391/1391/1380 f 1391/1391/1380 1379/1379/1368 1380/1380/1369 f 1381/1381/1370 1393/1393/1382 1392/1392/1381 f 1392/1392/1381 1380/1380/1369 1381/1381/1370 f 1382/1382/1371 1394/1394/1383 1393/1393/1382 f 1393/1393/1382 1381/1381/1370 1382/1382/1371 f 1372/1372/1361 1384/1384/1373 1394/1394/1383 f 1394/1394/1383 1382/1382/1371 1372/1372/1361 f 1383/1383/1372 1395/1395/1384 1396/1396/1385 f 1396/1396/1385 1384/1384/1373 1383/1383/1372 f 1385/1385/1374 1397/1397/1386 1395/1395/1384 f 1395/1395/1384 1383/1383/1372 1385/1385/1374 f 1386/1386/1375 1398/1398/1387 1397/1397/1386 f 1397/1397/1386 1385/1385/1374 1386/1386/1375 f 1387/1387/1376 1399/1399/1388 1398/1398/1387 f 1398/1398/1387 1386/1386/1375 1387/1387/1376 f 1388/1388/1377 1400/1400/1389 1399/1399/1388 f 1399/1399/1388 1387/1387/1376 1388/1388/1377 f 1389/1389/1378 1401/1401/1390 1400/1400/1389 f 1400/1400/1389 1388/1388/1377 1389/1389/1378 f 1390/1390/1379 1402/1402/1391 1401/1401/1390 f 1401/1401/1390 1389/1389/1378 1390/1390/1379 f 1391/1391/1380 1403/1403/1392 1402/1402/1391 f 1402/1402/1391 1390/1390/1379 1391/1391/1380 f 1392/1392/1381 1404/1404/1393 1403/1403/1392 f 1403/1403/1392 1391/1391/1380 1392/1392/1381 f 1393/1393/1382 1405/1405/1394 1404/1404/1393 f 1404/1404/1393 1392/1392/1381 1393/1393/1382 f 1394/1394/1383 1406/1406/1395 1405/1405/1394 f 1405/1405/1394 1393/1393/1382 1394/1394/1383 f 1384/1384/1373 1396/1396/1385 1406/1406/1395 f 1406/1406/1395 1394/1394/1383 1384/1384/1373 f 1395/1395/1384 1407/1407/1396 1408/1408/1397 f 1408/1408/1397 1396/1396/1385 1395/1395/1384 f 1397/1397/1386 1409/1409/1398 1407/1407/1396 f 1407/1407/1396 1395/1395/1384 1397/1397/1386 f 1398/1398/1387 1410/1410/1399 1409/1409/1398 f 1409/1409/1398 1397/1397/1386 1398/1398/1387 f 1399/1399/1388 1411/1411/1400 1410/1410/1399 f 1410/1410/1399 1398/1398/1387 1399/1399/1388 f 1400/1400/1389 1412/1412/1401 1411/1411/1400 f 1411/1411/1400 1399/1399/1388 1400/1400/1389 f 1401/1401/1390 1413/1413/1402 1412/1412/1401 f 1412/1412/1401 1400/1400/1389 1401/1401/1390 f 1402/1402/1391 1414/1414/1403 1413/1413/1402 f 1413/1413/1402 1401/1401/1390 1402/1402/1391 f 1403/1403/1392 1415/1415/1404 1414/1414/1403 f 1414/1414/1403 1402/1402/1391 1403/1403/1392 f 1404/1404/1393 1416/1416/1405 1415/1415/1404 f 1415/1415/1404 1403/1403/1392 1404/1404/1393 f 1405/1405/1394 1417/1417/1406 1416/1416/1405 f 1416/1416/1405 1404/1404/1393 1405/1405/1394 f 1406/1406/1395 1418/1418/1407 1417/1417/1406 f 1417/1417/1406 1405/1405/1394 1406/1406/1395 f 1396/1396/1385 1408/1408/1397 1418/1418/1407 f 1418/1418/1407 1406/1406/1395 1396/1396/1385 f 1407/1407/1396 1419/1419/1408 1420/1420/1409 f 1420/1420/1409 1408/1408/1397 1407/1407/1396 f 1409/1409/1398 1421/1421/1410 1419/1419/1408 f 1419/1419/1408 1407/1407/1396 1409/1409/1398 f 1410/1410/1399 1422/1422/1411 1421/1421/1410 f 1421/1421/1410 1409/1409/1398 1410/1410/1399 f 1411/1411/1400 1423/1423/1412 1422/1422/1411 f 1422/1422/1411 1410/1410/1399 1411/1411/1400 f 1412/1412/1401 1424/1424/1413 1423/1423/1412 f 1423/1423/1412 1411/1411/1400 1412/1412/1401 f 1413/1413/1402 1425/1425/1414 1424/1424/1413 f 1424/1424/1413 1412/1412/1401 1413/1413/1402 f 1414/1414/1403 1426/1426/1415 1425/1425/1414 f 1425/1425/1414 1413/1413/1402 1414/1414/1403 f 1415/1415/1404 1427/1427/1416 1426/1426/1415 f 1426/1426/1415 1414/1414/1403 1415/1415/1404 f 1416/1416/1405 1428/1428/1417 1427/1427/1416 f 1427/1427/1416 1415/1415/1404 1416/1416/1405 f 1417/1417/1406 1429/1429/1418 1428/1428/1417 f 1428/1428/1417 1416/1416/1405 1417/1417/1406 f 1418/1418/1407 1430/1430/1419 1429/1429/1418 f 1429/1429/1418 1417/1417/1406 1418/1418/1407 f 1408/1408/1397 1420/1420/1409 1430/1430/1419 f 1430/1430/1419 1418/1418/1407 1408/1408/1397 f 1347/1347/1336 1350/1350/1339 1431/1431/1420 f 1351/1351/1340 1347/1347/1336 1431/1431/1420 f 1353/1353/1342 1351/1351/1340 1431/1431/1420 f 1355/1355/1344 1353/1353/1342 1431/1431/1420 f 1357/1357/1346 1355/1355/1344 1431/1431/1420 f 1359/1359/1348 1357/1357/1346 1431/1431/1420 f 1361/1361/1350 1359/1359/1348 1431/1431/1420 f 1363/1363/1352 1361/1361/1350 1431/1431/1420 f 1365/1365/1354 1363/1363/1352 1431/1431/1420 f 1367/1367/1356 1365/1365/1354 1431/1431/1420 f 1369/1369/1358 1367/1367/1356 1431/1431/1420 f 1350/1350/1339 1369/1369/1358 1431/1431/1420 f 1420/1420/1409 1419/1419/1408 1432/1432/1421 f 1419/1419/1408 1421/1421/1410 1432/1432/1421 f 1421/1421/1410 1422/1422/1411 1432/1432/1421 f 1422/1422/1411 1423/1423/1412 1432/1432/1421 f 1423/1423/1412 1424/1424/1413 1432/1432/1421 f 1424/1424/1413 1425/1425/1414 1432/1432/1421 f 1425/1425/1414 1426/1426/1415 1432/1432/1421 f 1426/1426/1415 1427/1427/1416 1432/1432/1421 f 1427/1427/1416 1428/1428/1417 1432/1432/1421 f 1428/1428/1417 1429/1429/1418 1432/1432/1421 f 1429/1429/1418 1430/1430/1419 1432/1432/1421 f 1430/1430/1419 1420/1420/1409 1432/1432/1421 f 1433/1433/1422 1434/1434/1423 1435/1435/1424 f 1435/1435/1424 1436/1436/1425 1433/1433/1422 f 1433/1433/1422 1436/1436/1425 1437/1437/1426 f 1437/1437/1426 1438/1438/1427 1433/1433/1422 f 1439/1439/1428 1440/1440/1429 1441/1441/1430 f 1441/1441/1430 1442/1442/1428 1439/1439/1428 f 1433/1433/1422 1438/1438/1427 1443/1443/1431 f 1443/1443/1431 1444/1444/1432 1433/1433/1422 f 1442/1442/1428 1445/1445/1433 1446/1446/1434 f 1446/1446/1434 1439/1439/1428 1442/1442/1428 f 1447/1447/1435 1444/1444/1432 1443/1443/1431 f 1443/1443/1431 1448/1448/1436 1447/1447/1435 f 1449/1449/1437 1447/1447/1435 1450/1450/1438 f 1450/1450/1438 1451/1451/1439 1449/1449/1437 f 1450/1450/1438 1447/1447/1435 1448/1448/1436 f 1448/1448/1436 1452/1452/1440 1450/1450/1438 f 1453/1453/1441 1454/1454/1442 1455/1455/1443 f 1455/1455/1443 1456/1456/1444 1453/1453/1441 f 1457/1457/1445 1458/1458/1429 1459/1459/1446 f 1459/1459/1446 1460/1460/1447 1457/1457/1445 f 1461/1461/1448 1460/1460/1447 1459/1459/1446 f 1459/1459/1446 1462/1462/1446 1461/1461/1448 f 1463/1463/1449 1464/1464/1450 1465/1465/1451 f 1465/1465/1451 1466/1466/1452 1463/1463/1449 f 1467/1467/1453 1468/1468/1454 1456/1456/1444 f 1456/1456/1444 1455/1455/1443 1467/1467/1453 f 1469/1469/1455 1470/1470/1456 1468/1468/1454 f 1468/1468/1454 1467/1467/1453 1469/1469/1455 f 1471/1471/1457 1457/1457/1445 1460/1460/1447 f 1460/1460/1447 1472/1472/1458 1471/1471/1457 f 1473/1473/1459 1471/1471/1457 1472/1472/1458 f 1472/1472/1458 1474/1474/1428 1473/1473/1459 f 1472/1472/1458 1460/1460/1447 1461/1461/1448 f 1461/1461/1448 1475/1475/1460 1472/1472/1458 f 1476/1476/1461 1474/1474/1428 1472/1472/1458 f 1472/1472/1458 1475/1475/1460 1476/1476/1461 f 1477/1477/1462 1478/1478/1463 1464/1464/1450 f 1464/1464/1450 1463/1463/1449 1477/1477/1462 f 1479/1479/1464 1478/1478/1463 1477/1477/1462 f 1477/1477/1462 1480/1480/1465 1479/1479/1464 f 1481/1481/1466 1482/1482/1467 1483/1483/1468 f 1483/1483/1468 1484/1484/1469 1481/1481/1466 f 1485/1485/1470 1486/1486/1471 1484/1484/1469 f 1484/1484/1469 1483/1483/1468 1485/1485/1470 f 1486/1486/1471 1485/1485/1470 1487/1487/1472 f 1487/1487/1472 1488/1488/1473 1486/1486/1471 f 1489/1489/1474 1490/1490/1475 1488/1488/1473 f 1488/1488/1473 1487/1487/1472 1489/1489/1474 f 1491/1491/1476 1492/1492/1477 1493/1493/1478 f 1493/1493/1478 1494/1494/1479 1491/1491/1476 f 1495/1495/1480 1491/1491/1476 1494/1494/1479 f 1494/1494/1479 1496/1496/1481 1495/1495/1480 f 1496/1496/1481 1497/1497/1482 1498/1498/1483 f 1498/1498/1483 1495/1495/1480 1496/1496/1481 f 1498/1498/1483 1497/1497/1482 1499/1499/1484 f 1499/1499/1484 1500/1500/1485 1498/1498/1483 f 1496/1496/1481 1494/1494/1479 1501/1501/1486 f 1501/1501/1486 1502/1502/1487 1496/1496/1481 f 1497/1497/1482 1496/1496/1481 1502/1502/1487 f 1502/1502/1487 1503/1503/1488 1497/1497/1482 f 1497/1497/1482 1503/1503/1488 1504/1504/1489 f 1504/1504/1489 1499/1499/1484 1497/1497/1482 f 1505/1505/1421 1506/1506/1421 1507/1507/1421 f 1507/1507/1421 1508/1508/1421 1505/1505/1421 f 1505/1505/1421 1508/1508/1421 1509/1509/1421 f 1509/1509/1421 1510/1510/1421 1505/1505/1421 f 1511/1511/1490 1481/1481/1466 1512/1512/1491 f 1512/1512/1491 1513/1513/1492 1511/1511/1490 f 1513/1513/1492 1437/1437/1426 1436/1436/1425 f 1436/1436/1425 1511/1511/1490 1513/1513/1492 f 1511/1511/1490 1436/1436/1425 1435/1435/1424 f 1435/1435/1424 1514/1514/1493 1511/1511/1490 f 1481/1481/1466 1511/1511/1490 1514/1514/1493 f 1514/1514/1493 1482/1482/1467 1481/1481/1466 f 1508/1508/1421 1507/1507/1421 1515/1515/1421 f 1515/1515/1421 1516/1516/1421 1508/1508/1421 f 1509/1509/1421 1508/1508/1421 1516/1516/1421 f 1516/1516/1421 1517/1517/1421 1509/1509/1421 f 1515/1515/1421 1518/1518/1421 1519/1519/1421 f 1519/1519/1421 1516/1516/1421 1515/1515/1421 f 1516/1516/1421 1519/1519/1421 1520/1520/1421 f 1520/1520/1421 1517/1517/1421 1516/1516/1421 f 1519/1519/1421 1518/1518/1421 1521/1521/1421 f 1521/1521/1421 1522/1522/1421 1519/1519/1421 f 1523/1523/1421 1520/1520/1421 1519/1519/1421 f 1519/1519/1421 1522/1522/1421 1523/1523/1421 f 1524/1524/1494 1525/1525/1495 1490/1490/1475 f 1490/1490/1475 1489/1489/1474 1524/1524/1494 f 1525/1525/1495 1524/1524/1494 1451/1451/1439 f 1451/1451/1439 1450/1450/1438 1525/1525/1495 f 1526/1526/1496 1527/1527/1497 1492/1492/1477 f 1492/1492/1477 1528/1528/1498 1526/1526/1496 f 1527/1527/1497 1526/1526/1496 1453/1453/1441 f 1453/1453/1441 1456/1456/1444 1527/1527/1497 f 1529/1529/1499 1500/1500/1485 1499/1499/1484 f 1499/1499/1484 1530/1530/1500 1529/1529/1499 f 1529/1529/1499 1530/1530/1500 1477/1477/1462 f 1477/1477/1462 1463/1463/1449 1529/1529/1499 f 1531/1531/1501 1532/1532/1502 1533/1533/1503 f 1533/1533/1503 1534/1534/1504 1531/1531/1501 f 1534/1534/1504 1535/1535/1505 1536/1536/1506 f 1536/1536/1506 1531/1531/1501 1534/1534/1504 f 1493/1493/1478 1492/1492/1477 1527/1527/1497 f 1527/1527/1497 1537/1537/1507 1493/1493/1478 f 1468/1468/1454 1537/1537/1507 1527/1527/1497 f 1527/1527/1497 1456/1456/1444 1468/1468/1454 f 1537/1537/1507 1468/1468/1454 1470/1470/1456 f 1470/1470/1456 1538/1538/1508 1537/1537/1507 f 1538/1538/1508 1539/1539/1509 1493/1493/1478 f 1493/1493/1478 1537/1537/1507 1538/1538/1508 f 1531/1531/1501 1540/1540/1510 1541/1541/1511 f 1541/1541/1511 1532/1532/1502 1531/1531/1501 f 1531/1531/1501 1536/1536/1506 1542/1542/1512 f 1542/1542/1512 1540/1540/1510 1531/1531/1501 f 1540/1540/1510 1543/1543/1513 1544/1544/1514 f 1544/1544/1514 1541/1541/1511 1540/1540/1510 f 1540/1540/1510 1542/1542/1512 1545/1545/1515 f 1545/1545/1515 1543/1543/1513 1540/1540/1510 f 1546/1546/1516 1530/1530/1500 1499/1499/1484 f 1499/1499/1484 1504/1504/1489 1546/1546/1516 f 1530/1530/1500 1546/1546/1516 1480/1480/1465 f 1480/1480/1465 1477/1477/1462 1530/1530/1500 f 1544/1544/1514 1543/1543/1513 1547/1547/1517 f 1547/1547/1517 1548/1548/1518 1544/1544/1514 f 1543/1543/1513 1545/1545/1515 1549/1549/1519 f 1549/1549/1519 1547/1547/1517 1543/1543/1513 f 1550/1550/1520 1549/1549/1519 1545/1545/1515 f 1545/1545/1515 1551/1551/1521 1550/1550/1520 f 1551/1551/1521 1545/1545/1515 1542/1542/1512 f 1542/1542/1512 1552/1552/1522 1551/1551/1521 f 1552/1552/1522 1542/1542/1512 1536/1536/1506 f 1536/1536/1506 1553/1553/1523 1552/1552/1522 f 1553/1553/1523 1536/1536/1506 1535/1535/1505 f 1535/1535/1505 1554/1554/1524 1553/1553/1523 f 1555/1555/1525 1554/1554/1524 1535/1535/1505 f 1535/1535/1505 1534/1534/1504 1555/1555/1525 f 1534/1534/1504 1533/1533/1503 1556/1556/1526 f 1556/1556/1526 1555/1555/1525 1534/1534/1504 f 1532/1532/1502 1557/1557/1527 1556/1556/1526 f 1556/1556/1526 1533/1533/1503 1532/1532/1502 f 1541/1541/1511 1558/1558/1528 1557/1557/1527 f 1557/1557/1527 1532/1532/1502 1541/1541/1511 f 1544/1544/1514 1559/1559/1529 1558/1558/1528 f 1558/1558/1528 1541/1541/1511 1544/1544/1514 f 1544/1544/1514 1548/1548/1518 1560/1560/1530 f 1560/1560/1530 1559/1559/1529 1544/1544/1514 f 1560/1560/1530 1548/1548/1518 1547/1547/1517 f 1547/1547/1517 1561/1561/1531 1560/1560/1530 f 1547/1547/1517 1549/1549/1519 1550/1550/1520 f 1550/1550/1520 1561/1561/1531 1547/1547/1517 f 1491/1491/1476 1562/1562/1532 1528/1528/1498 f 1528/1528/1498 1492/1492/1477 1491/1491/1476 f 1495/1495/1480 1563/1563/1533 1562/1562/1532 f 1562/1562/1532 1491/1491/1476 1495/1495/1480 f 1498/1498/1483 1564/1564/1534 1563/1563/1533 f 1563/1563/1533 1495/1495/1480 1498/1498/1483 f 1500/1500/1485 1565/1565/1535 1564/1564/1534 f 1564/1564/1534 1498/1498/1483 1500/1500/1485 f 1500/1500/1485 1529/1529/1499 1566/1566/1536 f 1566/1566/1536 1565/1565/1535 1500/1500/1485 f 1566/1566/1536 1529/1529/1499 1463/1463/1449 f 1463/1463/1449 1466/1466/1452 1566/1566/1536 f 1552/1552/1522 1567/1567/1537 1479/1479/1464 f 1479/1479/1464 1551/1551/1521 1552/1552/1522 f 1469/1469/1455 1567/1567/1537 1552/1552/1522 f 1552/1552/1522 1553/1553/1523 1469/1469/1455 f 1554/1554/1524 1470/1470/1456 1469/1469/1455 f 1469/1469/1455 1553/1553/1523 1554/1554/1524 f 1538/1538/1508 1470/1470/1456 1554/1554/1524 f 1554/1554/1524 1555/1555/1525 1538/1538/1508 f 1555/1555/1525 1556/1556/1526 1539/1539/1509 f 1539/1539/1509 1538/1538/1508 1555/1555/1525 f 1557/1557/1527 1501/1501/1486 1539/1539/1509 f 1539/1539/1509 1556/1556/1526 1557/1557/1527 f 1558/1558/1528 1502/1502/1487 1501/1501/1486 f 1501/1501/1486 1557/1557/1527 1558/1558/1528 f 1559/1559/1529 1503/1503/1488 1502/1502/1487 f 1502/1502/1487 1558/1558/1528 1559/1559/1529 f 1560/1560/1530 1504/1504/1489 1503/1503/1488 f 1503/1503/1488 1559/1559/1529 1560/1560/1530 f 1504/1504/1489 1560/1560/1530 1561/1561/1531 f 1561/1561/1531 1546/1546/1516 1504/1504/1489 f 1480/1480/1465 1546/1546/1516 1561/1561/1531 f 1561/1561/1531 1550/1550/1520 1480/1480/1465 f 1551/1551/1521 1479/1479/1464 1480/1480/1465 f 1480/1480/1465 1550/1550/1520 1551/1551/1521 f 1512/1512/1491 1481/1481/1466 1484/1484/1469 f 1484/1484/1469 1568/1568/1538 1512/1512/1491 f 1568/1568/1538 1507/1507/1421 1506/1506/1421 f 1506/1506/1421 1512/1512/1491 1568/1568/1538 f 1509/1509/1421 1438/1438/1427 1437/1437/1426 f 1437/1437/1426 1510/1510/1421 1509/1509/1421 f 1513/1513/1492 1512/1512/1491 1506/1506/1421 f 1506/1506/1421 1505/1505/1421 1513/1513/1492 f 1513/1513/1492 1505/1505/1421 1510/1510/1421 f 1510/1510/1421 1437/1437/1426 1513/1513/1492 f 1486/1486/1471 1569/1569/1539 1568/1568/1538 f 1568/1568/1538 1484/1484/1469 1486/1486/1471 f 1568/1568/1538 1569/1569/1539 1515/1515/1421 f 1515/1515/1421 1507/1507/1421 1568/1568/1538 f 1509/1509/1421 1517/1517/1421 1443/1443/1431 f 1443/1443/1431 1438/1438/1427 1509/1509/1421 f 1486/1486/1471 1488/1488/1473 1570/1570/1540 f 1570/1570/1540 1569/1569/1539 1486/1486/1471 f 1570/1570/1540 1518/1518/1421 1515/1515/1421 f 1515/1515/1421 1569/1569/1539 1570/1570/1540 f 1517/1517/1421 1520/1520/1421 1448/1448/1436 f 1448/1448/1436 1443/1443/1431 1517/1517/1421 f 1490/1490/1475 1571/1571/1541 1570/1570/1540 f 1570/1570/1540 1488/1488/1473 1490/1490/1475 f 1570/1570/1540 1571/1571/1541 1521/1521/1421 f 1521/1521/1421 1518/1518/1421 1570/1570/1540 f 1525/1525/1495 1450/1450/1438 1452/1452/1440 f 1452/1452/1440 1572/1572/1542 1525/1525/1495 f 1572/1572/1542 1452/1452/1440 1523/1523/1421 f 1523/1523/1421 1522/1522/1421 1572/1572/1542 f 1522/1522/1421 1521/1521/1421 1571/1571/1541 f 1571/1571/1541 1572/1572/1542 1522/1522/1421 f 1571/1571/1541 1490/1490/1475 1525/1525/1495 f 1525/1525/1495 1572/1572/1542 1571/1571/1541 f 1448/1448/1436 1520/1520/1421 1523/1523/1421 f 1523/1523/1421 1452/1452/1440 1448/1448/1436 f 1439/1439/1428 1459/1459/1446 1458/1458/1429 f 1458/1458/1429 1440/1440/1429 1439/1439/1428 f 1435/1435/1424 1434/1434/1423 1454/1454/1442 f 1454/1454/1442 1453/1453/1441 1435/1435/1424 f 1526/1526/1496 1514/1514/1493 1435/1435/1424 f 1435/1435/1424 1453/1453/1441 1526/1526/1496 f 1482/1482/1467 1514/1514/1493 1526/1526/1496 f 1526/1526/1496 1528/1528/1498 1482/1482/1467 f 1528/1528/1498 1562/1562/1532 1483/1483/1468 f 1483/1483/1468 1482/1482/1467 1528/1528/1498 f 1562/1562/1532 1563/1563/1533 1485/1485/1470 f 1485/1485/1470 1483/1483/1468 1562/1562/1532 f 1563/1563/1533 1564/1564/1534 1487/1487/1472 f 1487/1487/1472 1485/1485/1470 1563/1563/1533 f 1564/1564/1534 1565/1565/1535 1489/1489/1474 f 1489/1489/1474 1487/1487/1472 1564/1564/1534 f 1489/1489/1474 1565/1565/1535 1566/1566/1536 f 1566/1566/1536 1524/1524/1494 1489/1489/1474 f 1451/1451/1439 1524/1524/1494 1566/1566/1536 f 1566/1566/1536 1466/1466/1452 1451/1451/1439 f 1465/1465/1451 1449/1449/1437 1451/1451/1439 f 1451/1451/1439 1466/1466/1452 1465/1465/1451 f 1459/1459/1446 1439/1439/1428 1446/1446/1434 f 1446/1446/1434 1462/1462/1446 1459/1459/1446 f 1493/1493/1478 1539/1539/1509 1501/1501/1486 f 1501/1501/1486 1494/1494/1479 1493/1493/1478 f 1434/1434/1423 1433/1433/1422 1441/1441/1430 f 1441/1441/1430 1440/1440/1429 1434/1434/1423 f 1441/1441/1430 1433/1433/1422 1444/1444/1432 f 1444/1444/1432 1442/1442/1428 1441/1441/1430 f 1446/1446/1434 1445/1445/1433 1447/1447/1435 f 1447/1447/1435 1449/1449/1437 1446/1446/1434 f 1445/1445/1433 1442/1442/1428 1444/1444/1432 f 1444/1444/1432 1447/1447/1435 1445/1445/1433 f 1454/1454/1442 1458/1458/1429 1457/1457/1445 f 1457/1457/1445 1455/1455/1443 1454/1454/1442 f 1465/1465/1451 1464/1464/1450 1461/1461/1448 f 1461/1461/1448 1462/1462/1446 1465/1465/1451 f 1467/1467/1453 1455/1455/1443 1457/1457/1445 f 1457/1457/1445 1471/1471/1457 1467/1467/1453 f 1469/1469/1455 1473/1473/1459 1474/1474/1428 f 1474/1474/1428 1567/1567/1537 1469/1469/1455 f 1469/1469/1455 1467/1467/1453 1471/1471/1457 f 1471/1471/1457 1473/1473/1459 1469/1469/1455 f 1478/1478/1463 1475/1475/1460 1461/1461/1448 f 1461/1461/1448 1464/1464/1450 1478/1478/1463 f 1479/1479/1464 1476/1476/1461 1475/1475/1460 f 1475/1475/1460 1478/1478/1463 1479/1479/1464 f 1476/1476/1461 1479/1479/1464 1567/1567/1537 f 1567/1567/1537 1474/1474/1428 1476/1476/1461 f 1434/1434/1423 1440/1440/1429 1458/1458/1429 f 1458/1458/1429 1454/1454/1442 1434/1434/1423 f 1449/1449/1437 1465/1465/1451 1462/1462/1446 f 1462/1462/1446 1446/1446/1434 1449/1449/1437 v 21.7528 44.2620 91.3759 v 19.5566 45.1692 91.3154 v 19.3303 43.2854 90.1436 v 21.6303 43.2426 90.7418 v 20.1667 41.7800 88.7269 v 22.0830 42.4279 89.9751 v 21.8417 41.0563 87.4449 v 22.9895 42.0362 89.2812 v 23.9065 41.3083 86.6412 v 24.1070 42.1726 88.8462 v 25.8078 42.4684 86.5309 v 25.1359 42.8005 88.7867 v 27.0361 44.2257 87.1438 v 25.8006 43.7515 89.1184 v 27.2624 46.1095 88.3156 v 25.9232 44.7710 89.7524 v 26.4260 47.6149 89.7323 v 25.4704 45.5856 90.5192 v 24.7510 48.3386 91.0143 v 24.5639 45.9774 91.2130 v 23.4465 45.8410 91.6480 v 22.6862 48.0866 91.8180 v 20.7849 46.9265 91.9283 v 22.4176 45.2131 91.7076 v 17.6911 46.3474 90.4320 v 17.3955 43.8861 88.9010 v 18.4884 41.9192 87.0500 v 20.6769 40.9737 85.3749 v 23.3745 41.3029 84.3248 v 25.8587 42.8186 84.1808 v 27.4636 45.1147 84.9815 v 27.7592 47.5760 86.5126 v 26.6664 49.5429 88.3636 v 24.4779 50.4884 90.0386 v 21.7802 50.1592 91.0887 v 19.2960 48.6435 91.2327 v 16.4405 47.6174 88.8602 v 16.1205 44.9534 87.2031 v 17.3034 42.8244 85.1996 v 19.6721 41.8010 83.3866 v 22.5922 42.1573 82.2499 v 25.2810 43.7979 82.0940 v 27.0181 46.2832 82.9607 v 27.3382 48.9472 84.6178 v 26.1553 51.0764 86.6214 v 23.7865 52.0996 88.4343 v 20.8665 51.7433 89.5710 v 18.1776 50.1027 89.7269 v 15.6994 46.3246 85.3083 v 15.9950 48.7859 86.8394 v 16.7922 44.3577 83.4574 v 18.9807 43.4122 81.7823 v 21.6784 43.7414 80.7322 v 24.1626 45.2571 80.5881 v 25.7675 47.5532 81.3889 v 26.0631 50.0145 82.9200 v 24.9703 51.9814 84.7709 v 22.7817 52.9270 86.4459 v 20.0841 52.5977 87.4961 v 17.5999 51.0820 87.6401 v 16.4225 49.6749 84.6771 v 16.1963 47.7911 83.5053 v 17.0327 46.2857 82.0886 v 18.7077 45.5621 80.8066 v 20.7724 45.8141 80.0029 v 22.6737 46.9741 79.8926 v 23.9021 48.7315 80.5055 v 24.1283 50.6152 81.6773 v 23.2919 52.1206 83.0940 v 21.6169 52.8443 84.3760 v 19.5522 52.5923 85.1797 v 17.6509 51.4323 85.2900 v 17.6580 50.1491 82.7025 v 17.5355 49.1296 82.0684 v 17.9882 48.3149 81.3017 v 18.8947 47.9232 80.6079 v 20.0121 48.0596 80.1729 v 21.0410 48.6875 80.1133 v 21.7058 49.6386 80.4450 v 21.8283 50.6580 81.0791 v 21.3756 51.4727 81.8458 v 20.4691 51.8644 82.5396 v 19.3517 51.7281 82.9747 v 18.3228 51.1002 83.0342 v 23.9454 43.7643 90.6044 v 19.5132 50.1364 81.2165 v 20.8569 44.5379 77.3419 v 19.9896 41.6669 78.9062 v 19.5572 43.7488 81.5779 v 20.2088 45.9058 80.4027 v 20.5425 39.3647 81.3221 v 19.9725 42.0193 83.3930 v 22.3673 38.2485 83.9424 v 21.3435 41.1807 85.3615 v 24.9752 38.6171 86.0649 v 23.3027 41.4576 86.9561 v 27.6674 40.3719 87.1209 v 25.3253 42.7759 87.7495 v 29.7225 43.0425 86.8273 v 26.8693 44.7824 87.5290 v 30.5898 45.9136 85.2631 v 27.5209 46.9392 86.3537 v 30.0369 48.2157 82.8472 v 27.1055 48.6688 84.5387 v 28.2121 49.3319 80.2269 v 25.7346 49.5074 82.5700 v 25.6042 48.9633 78.1043 v 23.7753 49.2305 80.9755 v 22.9120 47.2086 77.0484 v 21.7527 47.9122 80.1822 v 21.9080 43.9488 82.0236 v 24.1148 44.8330 83.3471 v 22.2691 45.1443 81.3722 v 22.1381 42.9903 83.0296 v 22.8980 42.5255 84.1206 v 23.9839 42.6790 85.0044 v 25.1049 43.4096 85.4441 v 25.9606 44.5217 85.3219 v 26.3217 45.7171 84.6705 v 26.0916 46.6757 83.6646 v 25.3317 47.1405 82.5735 v 24.2458 46.9870 81.6897 v 23.1248 46.2563 81.2500 v 35.4957 33.7721 68.2556 v 36.8303 33.5470 69.6836 v 35.2346 32.9077 68.7266 v 35.4010 32.2146 69.4540 v 35.9505 31.8785 70.2429 v 36.7356 31.9895 70.8819 v 37.5462 32.5178 71.1999 v 38.1649 33.3219 71.1115 v 38.4261 34.1863 70.6404 v 38.2597 34.8794 69.9131 v 37.7103 35.2154 69.1242 v 36.9250 35.1045 68.4852 v 36.1145 34.5762 68.1673 v 21.6024 38.5922 80.2973 v 23.3917 37.4977 82.8666 v 21.0603 40.8494 77.9284 v 21.9108 43.6646 76.3945 v 23.9258 46.2832 76.1068 v 26.5656 48.0038 77.1422 v 29.1226 48.3653 79.2234 v 30.9120 47.2707 81.7926 v 31.4540 45.0135 84.1616 v 30.6037 42.1984 85.6954 v 28.5886 39.5797 85.9831 v 25.9489 37.8591 84.9477 v 34.2466 30.2093 68.6379 v 35.4360 29.4819 70.3459 v 34.1433 29.6176 71.5755 v 32.7269 30.4839 69.5418 v 32.2978 32.2707 67.6666 v 33.8863 31.7099 67.0633 v 34.4516 33.5813 66.0437 v 32.9710 34.4990 66.4525 v 35.7910 35.3220 65.8524 v 34.5661 36.5719 66.2247 v 37.5458 36.4657 66.5407 v 36.6556 37.9339 67.0443 v 39.2456 36.7060 67.9242 v 38.6797 38.2200 68.6917 v 40.4350 35.9783 69.6319 v 40.0961 37.3536 70.7254 v 40.5252 35.5668 72.6006 v 40.7954 34.4779 71.2067 v 40.2300 32.6066 72.2263 v 39.8520 33.3385 73.8147 v 38.8906 30.8659 72.4176 v 38.2570 31.2656 74.0425 v 37.1358 29.7222 71.7293 v 36.1674 29.9037 73.2229 v 20.2677 44.0335 82.0040 v 20.8030 45.8055 81.0385 v 20.6090 42.6125 83.4951 v 21.7352 41.9236 85.1125 v 23.3449 42.1511 86.4225 v 25.0066 43.2342 87.0743 v 26.2751 44.8825 86.8931 v 26.8104 46.6546 85.9277 v 26.4691 48.0755 84.4365 v 25.3428 48.7645 82.8192 v 23.7332 48.5370 81.5090 v 22.0714 47.4540 80.8573 v 35.2782 33.4418 66.9281 v 34.8746 32.1058 67.6560 v 35.1318 31.0347 68.7802 v 35.9810 30.5152 69.9994 v 37.1945 30.6868 70.9871 v 38.4472 31.5033 71.4785 v 39.4035 32.7460 71.3419 v 39.8070 34.0820 70.6140 v 39.5498 35.1532 69.4898 v 38.7007 35.6726 68.2706 v 37.4871 35.5011 67.2829 v 36.2344 34.6846 66.7916 v 33.0590 30.4122 72.7142 v 31.6051 31.3016 70.6264 v 31.1646 33.1359 68.7015 v 31.8556 35.4234 67.4551 v 33.4930 37.5513 67.2213 v 35.6380 38.9494 68.0627 v 37.7160 39.2430 69.7537 v 39.1699 38.3537 71.8415 v 39.6104 36.5194 73.7664 v 38.9193 34.2320 75.0129 v 37.2819 32.1041 75.2467 v 35.1369 30.7059 74.4053 vn -0.0236 -0.4324 0.9014 vn -0.3756 -0.2826 0.8827 vn -0.4136 -0.5985 0.6861 vn -0.0452 -0.6115 0.7900 vn -0.2733 -0.8509 0.4486 vn 0.0344 -0.7546 0.6553 vn 0.0076 -0.9723 0.2336 vn 0.1936 -0.8234 0.5334 vn 0.3539 -0.9301 0.0988 vn 0.3900 -0.7995 0.4570 vn 0.6727 -0.7355 0.0803 vn 0.5707 -0.6891 0.4465 vn 0.8787 -0.4408 0.1831 vn 0.6875 -0.5221 0.5048 vn 0.9167 -0.1249 0.3796 vn 0.7090 -0.3429 0.6162 vn 0.7764 0.1276 0.6172 vn 0.6295 -0.1998 0.7509 vn 0.4955 0.2490 0.8322 vn 0.4703 -0.1310 0.8728 vn 0.2739 -0.1550 0.9492 vn 0.1492 0.2067 0.9670 vn -0.1696 0.0122 0.9854 vn 0.0931 -0.2653 0.9597 vn -0.6706 -0.0929 0.7360 vn -0.7193 -0.4988 0.4835 vn -0.5391 -0.8232 0.1783 vn -0.1781 -0.9791 -0.0980 vn 0.2668 -0.9248 -0.2712 vn 0.6764 -0.6748 -0.2950 vn 0.9411 -0.2962 -0.1629 vn 0.9899 0.1098 0.0896 vn 0.8097 0.4341 0.3949 vn 0.4487 0.5901 0.6711 vn 0.0038 0.5358 0.8443 vn -0.4059 0.2858 0.8681 vn -0.8681 0.1095 0.4842 vn -0.9206 -0.3278 0.2122 vn -0.7265 -0.6772 -0.1167 vn -0.3377 -0.8452 -0.4143 vn 0.1416 -0.7867 -0.6008 vn 0.5830 -0.5174 -0.6264 vn 0.8681 -0.1095 -0.4842 vn 0.9206 0.3278 -0.2122 vn 0.7265 0.6772 0.1167 vn 0.3376 0.8452 0.4143 vn -0.1416 0.7867 0.6008 vn -0.5830 0.5174 0.6264 vn -0.9899 -0.1098 -0.0896 vn -0.9412 0.2961 0.1629 vn -0.8097 -0.4342 -0.3949 vn -0.4487 -0.5901 -0.6711 vn -0.0038 -0.5358 -0.8443 vn 0.4059 -0.2858 -0.8681 vn 0.6706 0.0929 -0.7360 vn 0.7193 0.4988 -0.4835 vn 0.5391 0.8232 -0.1783 vn 0.1781 0.9791 0.0980 vn -0.2668 0.9248 0.2712 vn -0.6764 0.6748 0.2950 vn -0.8787 0.4408 -0.1831 vn -0.9167 0.1249 -0.3796 vn -0.7764 -0.1276 -0.6172 vn -0.4955 -0.2490 -0.8322 vn -0.1492 -0.2067 -0.9670 vn 0.1696 -0.0122 -0.9854 vn 0.3756 0.2826 -0.8827 vn 0.4136 0.5985 -0.6861 vn 0.2733 0.8510 -0.4486 vn -0.0076 0.9723 -0.2336 vn -0.3539 0.9301 -0.0988 vn -0.6727 0.7355 -0.0803 vn -0.6875 0.5221 -0.5048 vn -0.7090 0.3430 -0.6162 vn -0.6295 0.1998 -0.7509 vn -0.4702 0.1310 -0.8728 vn -0.2739 0.1550 -0.9492 vn -0.0931 0.2653 -0.9597 vn 0.0236 0.4324 -0.9014 vn 0.0452 0.6115 -0.7900 vn -0.0344 0.7546 -0.6553 vn -0.1936 0.8234 -0.5334 vn -0.3900 0.7995 -0.4570 vn -0.5707 0.6891 -0.4465 vn 0.3639 -0.5231 0.7707 vn -0.3639 0.5231 -0.7707 vn -0.7809 0.2153 -0.5863 vn -0.9110 -0.2153 -0.3518 vn -0.9411 0.2403 0.2380 vn -0.8655 0.4905 0.1017 vn -0.8281 -0.5605 0.0105 vn -0.8929 0.0398 0.4485 vn -0.5545 -0.7279 0.4035 vn -0.7339 -0.0575 0.6768 vn -0.1634 -0.6726 0.7218 vn -0.5066 -0.0254 0.8618 vn 0.2403 -0.4095 0.8801 vn -0.2721 0.1275 0.9538 vn 0.5485 -0.0090 0.8361 vn -0.0930 0.3602 0.9282 vn 0.6786 0.4216 0.6015 vn -0.0174 0.6104 0.7919 vn 0.5957 0.7668 0.2392 vn -0.0656 0.8110 0.5814 vn 0.3220 0.9342 -0.1537 vn -0.2246 0.9082 0.3531 vn -0.0690 0.8789 -0.4720 vn -0.4518 0.8761 0.1682 vn -0.4728 0.6158 -0.6303 vn -0.6864 0.7232 0.0761 vn -0.2489 0.6001 0.7602 vn -0.2971 0.4406 0.8471 vn -0.2796 0.7279 0.6261 vn -0.3810 0.7899 0.4806 vn -0.5258 0.7694 0.3627 vn -0.6753 0.6720 0.3041 vn -0.7894 0.5237 0.3204 vn -0.8375 0.3643 0.4072 vn -0.8068 0.2364 0.5414 vn -0.7055 0.1744 0.6869 vn -0.5607 0.1949 0.8048 vn -0.4112 0.2923 0.8634 vn 0.7984 -0.5218 -0.3005 vn 0.5829 -0.5174 -0.6264 vn 0.8493 -0.3534 -0.3922 vn 0.8169 -0.2184 -0.5339 vn 0.7098 -0.1529 -0.6876 vn 0.5569 -0.1746 -0.8120 vn 0.3990 -0.2775 -0.8739 vn 0.2785 -0.4341 -0.8567 vn 0.2277 -0.6025 -0.7650 vn 0.2601 -0.7374 -0.6233 vn 0.3671 -0.8029 -0.4697 vn 0.5200 -0.7813 -0.3452 vn 0.6779 -0.6784 -0.2833 vn -0.6798 -0.7148 -0.1642 vn -0.4013 -0.8851 0.2356 vn -0.7641 -0.3635 -0.5329 vn -0.6318 0.0745 -0.7715 vn -0.3182 0.4820 -0.8163 vn 0.0926 0.7498 -0.6552 vn 0.4905 0.8060 -0.3314 vn 0.7689 0.6357 0.0685 vn 0.8533 0.2844 0.4371 vn 0.7209 -0.1536 0.6758 vn 0.4074 -0.5611 0.7205 vn -0.0034 -0.8289 0.5594 vn 0.0535 -0.8143 -0.5780 vn 0.2155 -0.9134 -0.3453 vn -0.2785 -0.9541 0.1099 vn -0.5480 -0.7893 -0.2770 vn -0.6296 -0.4494 -0.6338 vn 0.0044 -0.6099 -0.7924 vn 0.0814 -0.3551 -0.9313 vn -0.5015 -0.0254 -0.8648 vn 0.2638 -0.1181 -0.9573 vn -0.1981 0.3689 -0.9081 vn 0.5028 0.0377 -0.8636 vn 0.1995 0.6280 -0.7522 vn 0.7343 0.0704 -0.6752 vn 0.5846 0.6825 -0.4388 vn 0.8962 -0.0287 -0.4426 vn 0.8540 0.5176 -0.0519 vn 0.9357 0.1777 0.3049 vn 0.9453 -0.2330 -0.2281 vn 0.8683 -0.4879 -0.0893 vn 0.8076 -0.2462 0.5359 vn 0.6859 -0.7249 -0.0633 vn 0.5041 -0.6406 0.5792 vn 0.4470 -0.8807 -0.1570 vn 0.1066 -0.8997 0.4233 vn -0.3442 0.5856 0.7339 vn -0.3798 0.4678 0.7980 vn -0.3669 0.6801 0.6348 vn -0.4418 0.7258 0.5273 vn -0.5487 0.7107 0.4402 vn -0.6591 0.6387 0.3969 vn -0.7435 0.5291 0.4089 vn -0.7790 0.4114 0.4732 vn -0.7564 0.3170 0.5722 vn -0.6815 0.2713 0.6797 vn -0.5745 0.2863 0.7668 vn -0.4641 0.3583 0.8101 vn 0.7517 -0.5286 -0.3943 vn 0.7894 -0.4037 -0.4624 vn 0.7654 -0.3036 -0.5674 vn 0.6860 -0.2551 -0.6814 vn 0.5726 -0.2711 -0.7737 vn 0.4555 -0.3474 -0.8196 vn 0.3661 -0.4636 -0.8069 vn 0.3285 -0.5884 -0.7388 vn 0.3525 -0.6886 -0.6337 vn 0.4318 -0.7371 -0.5198 vn 0.5452 -0.7211 -0.4275 vn 0.6623 -0.6448 -0.3816 vt 0.9154 0.2075 0.0000 vt 0.8844 0.2012 0.0000 vt 0.8813 0.2139 0.0000 vt 0.9138 0.2144 0.0000 vt 0.8834 0.2269 0.0000 vt 0.9149 0.2215 0.0000 vt 0.8900 0.2368 0.0000 vt 0.9184 0.2268 0.0000 vt 0.8994 0.2408 0.0000 vt 0.9235 0.2290 0.0000 vt 0.9090 0.2379 0.0000 vt 0.9287 0.2274 0.0000 vt 0.9162 0.2289 0.0000 vt 0.9326 0.2226 0.0000 vt 0.9192 0.2162 0.0000 vt 0.9343 0.2157 0.0000 vt 0.9172 0.2031 0.0000 vt 0.9331 0.2086 0.0000 vt 0.9106 0.1933 0.0000 vt 0.9296 0.2033 0.0000 vt 0.9245 0.2011 0.0000 vt 0.9012 0.1893 0.0000 vt 0.8916 0.1922 0.0000 vt 0.9193 0.2027 0.0000 vt 0.8440 0.1969 0.0000 vt 0.8400 0.2135 0.0000 vt 0.8427 0.2306 0.0000 vt 0.8514 0.2434 0.0000 vt 0.8636 0.2487 0.0000 vt 0.8761 0.2449 0.0000 vt 0.8856 0.2331 0.0000 vt 0.8896 0.2165 0.0000 vt 0.8868 0.1995 0.0000 vt 0.8782 0.1866 0.0000 vt 0.8660 0.1814 0.0000 vt 0.8535 0.1851 0.0000 vt 0.8004 0.1954 0.0000 vt 0.7961 0.2134 0.0000 vt 0.7991 0.2318 0.0000 vt 0.8084 0.2458 0.0000 vt 0.8216 0.2514 0.0000 vt 0.8352 0.2474 0.0000 vt 0.8455 0.2346 0.0000 vt 0.8497 0.2166 0.0000 vt 0.8468 0.1982 0.0000 vt 0.8375 0.1843 0.0000 vt 0.8243 0.1786 0.0000 vt 0.8107 0.1826 0.0000 vt 0.7563 0.2135 0.0000 vt 0.7602 0.1969 0.0000 vt 0.7590 0.2305 0.0000 vt 0.7676 0.2434 0.0000 vt 0.7798 0.2486 0.0000 vt 0.7924 0.2449 0.0000 vt 0.8019 0.2331 0.0000 vt 0.8058 0.2165 0.0000 vt 0.8031 0.1994 0.0000 vt 0.7945 0.1866 0.0000 vt 0.7823 0.1813 0.0000 vt 0.7698 0.1851 0.0000 vt 0.7296 0.2011 0.0000 vt 0.7266 0.2138 0.0000 vt 0.7287 0.2269 0.0000 vt 0.7353 0.2367 0.0000 vt 0.7446 0.2407 0.0000 vt 0.7542 0.2378 0.0000 vt 0.7615 0.2288 0.0000 vt 0.7645 0.2161 0.0000 vt 0.7625 0.2031 0.0000 vt 0.7559 0.1932 0.0000 vt 0.7465 0.1892 0.0000 vt 0.7369 0.1921 0.0000 vt 0.7132 0.2075 0.0000 vt 0.7116 0.2143 0.0000 vt 0.7127 0.2214 0.0000 vt 0.7163 0.2267 0.0000 vt 0.7214 0.2289 0.0000 vt 0.7265 0.2273 0.0000 vt 0.7305 0.2225 0.0000 vt 0.7321 0.2156 0.0000 vt 0.7310 0.2085 0.0000 vt 0.7274 0.2032 0.0000 vt 0.7224 0.2010 0.0000 vt 0.7172 0.2026 0.0000 vt 0.9323 0.2151 0.0000 vt 0.7135 0.2150 0.0000 vt 0.7208 0.2564 0.0000 vt 0.7544 0.2630 0.0000 vt 0.7684 0.2432 0.0000 vt 0.7432 0.2382 0.0000 vt 0.8096 0.2655 0.0000 vt 0.8099 0.2450 0.0000 vt 0.8717 0.2631 0.0000 vt 0.8566 0.2433 0.0000 vt 0.9241 0.2565 0.0000 vt 0.8959 0.2383 0.0000 vt 0.9526 0.2475 0.0000 vt 0.9174 0.2315 0.0000 vt 0.9497 0.2385 0.0000 vt 0.9152 0.2247 0.0000 vt 0.9161 0.2318 0.0000 vt 0.8899 0.2198 0.0000 vt 0.8608 0.2294 0.0000 vt 0.8484 0.2179 0.0000 vt 0.7987 0.2318 0.0000 vt 0.8017 0.2197 0.0000 vt 0.7464 0.2384 0.0000 vt 0.7624 0.2247 0.0000 vt 0.7178 0.2474 0.0000 vt 0.7410 0.2314 0.0000 vt 0.7975 0.2432 0.0000 vt 0.8312 0.2367 0.0000 vt 0.7835 0.2405 0.0000 vt 0.8205 0.2443 0.0000 vt 0.8464 0.2433 0.0000 vt 0.8682 0.2405 0.0000 vt 0.8800 0.2368 0.0000 vt 0.8788 0.2330 0.0000 vt 0.8648 0.2302 0.0000 vt 0.8418 0.2292 0.0000 vt 0.8160 0.2302 0.0000 vt 0.7942 0.2330 0.0000 vt 0.7823 0.2367 0.0000 vt 0.8406 0.3553 0.0000 vt 0.8750 0.3526 0.0000 vt 0.8507 0.3573 0.0000 vt 0.8673 0.3580 0.0000 vt 0.8860 0.3573 0.0000 vt 0.9018 0.3553 0.0000 vt 0.9103 0.3526 0.0000 vt 0.9095 0.3499 0.0000 vt 0.8994 0.3479 0.0000 vt 0.8827 0.3471 0.0000 vt 0.8640 0.3479 0.0000 vt 0.8483 0.3498 0.0000 vt 0.8397 0.3526 0.0000 vt 0.8134 0.2740 0.0000 vt 0.8744 0.2716 0.0000 vt 0.7593 0.2716 0.0000 vt 0.7263 0.2651 0.0000 vt 0.7235 0.2562 0.0000 vt 0.7514 0.2474 0.0000 vt 0.8027 0.2409 0.0000 vt 0.8637 0.2386 0.0000 vt 0.9178 0.2409 0.0000 vt 0.9508 0.2474 0.0000 vt 0.9536 0.2563 0.0000 vt 0.9257 0.2651 0.0000 vt 0.8601 0.3690 0.0000 vt 0.9006 0.3674 0.0000 vt 0.9019 0.3609 0.0000 vt 0.8537 0.3628 0.0000 vt 0.8108 0.3609 0.0000 vt 0.8241 0.3674 0.0000 vt 0.8022 0.3631 0.0000 vt 0.7847 0.3557 0.0000 vt 0.8003 0.3572 0.0000 vt 0.7825 0.3487 0.0000 vt 0.8189 0.3513 0.0000 vt 0.8046 0.3417 0.0000 vt 0.8530 0.3470 0.0000 vt 0.8452 0.3366 0.0000 vt 0.8935 0.3455 0.0000 vt 0.8934 0.3347 0.0000 vt 0.9363 0.3366 0.0000 vt 0.9295 0.3470 0.0000 vt 0.9514 0.3514 0.0000 vt 0.9624 0.3418 0.0000 vt 0.9533 0.3573 0.0000 vt 0.9647 0.3488 0.0000 vt 0.9347 0.3631 0.0000 vt 0.9425 0.3558 0.0000 vt 0.7793 0.2411 0.0000 vt 0.7585 0.2370 0.0000 vt 0.8134 0.2426 0.0000 vt 0.8517 0.2412 0.0000 vt 0.8840 0.2371 0.0000 vt 0.9016 0.2315 0.0000 vt 0.8998 0.2259 0.0000 vt 0.8791 0.2219 0.0000 vt 0.8450 0.2203 0.0000 vt 0.8066 0.2218 0.0000 vt 0.7743 0.2259 0.0000 vt 0.7567 0.2315 0.0000 vt 0.8235 0.3614 0.0000 vt 0.8391 0.3645 0.0000 vt 0.8649 0.3656 0.0000 vt 0.8938 0.3645 0.0000 vt 0.9181 0.3614 0.0000 vt 0.9314 0.3572 0.0000 vt 0.9300 0.3530 0.0000 vt 0.9144 0.3500 0.0000 vt 0.8887 0.3488 0.0000 vt 0.8598 0.3499 0.0000 vt 0.8354 0.3530 0.0000 vt 0.8222 0.3572 0.0000 vt 0.8991 0.3519 0.0000 vt 0.8496 0.3538 0.0000 vt 0.8056 0.3519 0.0000 vt 0.7788 0.3466 0.0000 vt 0.7765 0.3394 0.0000 vt 0.7992 0.3322 0.0000 vt 0.8409 0.3269 0.0000 vt 0.8904 0.3250 0.0000 vt 0.9345 0.3270 0.0000 vt 0.9612 0.3323 0.0000 vt 0.9636 0.3395 0.0000 vt 0.9408 0.3467 0.0000 g Object004 f 1573/1573/1543 1574/1574/1544 1575/1575/1545 f 1575/1575/1545 1576/1576/1546 1573/1573/1543 f 1576/1576/1546 1575/1575/1545 1577/1577/1547 f 1577/1577/1547 1578/1578/1548 1576/1576/1546 f 1578/1578/1548 1577/1577/1547 1579/1579/1549 f 1579/1579/1549 1580/1580/1550 1578/1578/1548 f 1579/1579/1549 1581/1581/1551 1582/1582/1552 f 1582/1582/1552 1580/1580/1550 1579/1579/1549 f 1582/1582/1552 1581/1581/1551 1583/1583/1553 f 1583/1583/1553 1584/1584/1554 1582/1582/1552 f 1584/1584/1554 1583/1583/1553 1585/1585/1555 f 1585/1585/1555 1586/1586/1556 1584/1584/1554 f 1585/1585/1555 1587/1587/1557 1588/1588/1558 f 1588/1588/1558 1586/1586/1556 1585/1585/1555 f 1587/1587/1557 1589/1589/1559 1590/1590/1560 f 1590/1590/1560 1588/1588/1558 1587/1587/1557 f 1590/1590/1560 1589/1589/1559 1591/1591/1561 f 1591/1591/1561 1592/1592/1562 1590/1590/1560 f 1593/1593/1563 1592/1592/1562 1591/1591/1561 f 1591/1591/1561 1594/1594/1564 1593/1593/1563 f 1595/1595/1565 1596/1596/1566 1593/1593/1563 f 1593/1593/1563 1594/1594/1564 1595/1595/1565 f 1595/1595/1565 1574/1574/1544 1573/1573/1543 f 1573/1573/1543 1596/1596/1566 1595/1595/1565 f 1574/1574/1544 1597/1597/1567 1598/1598/1568 f 1598/1598/1568 1575/1575/1545 1574/1574/1544 f 1575/1575/1545 1598/1598/1568 1599/1599/1569 f 1599/1599/1569 1577/1577/1547 1575/1575/1545 f 1599/1599/1569 1600/1600/1570 1579/1579/1549 f 1579/1579/1549 1577/1577/1547 1599/1599/1569 f 1579/1579/1549 1600/1600/1570 1601/1601/1571 f 1601/1601/1571 1581/1581/1551 1579/1579/1549 f 1581/1581/1551 1601/1601/1571 1602/1602/1572 f 1602/1602/1572 1583/1583/1553 1581/1581/1551 f 1602/1602/1572 1603/1603/1573 1585/1585/1555 f 1585/1585/1555 1583/1583/1553 1602/1602/1572 f 1603/1603/1573 1604/1604/1574 1587/1587/1557 f 1587/1587/1557 1585/1585/1555 1603/1603/1573 f 1587/1587/1557 1604/1604/1574 1605/1605/1575 f 1605/1605/1575 1589/1589/1559 1587/1587/1557 f 1589/1589/1559 1605/1605/1575 1606/1606/1576 f 1606/1606/1576 1591/1591/1561 1589/1589/1559 f 1607/1607/1577 1594/1594/1564 1591/1591/1561 f 1591/1591/1561 1606/1606/1576 1607/1607/1577 f 1595/1595/1565 1594/1594/1564 1607/1607/1577 f 1607/1607/1577 1608/1608/1578 1595/1595/1565 f 1597/1597/1567 1574/1574/1544 1595/1595/1565 f 1595/1595/1565 1608/1608/1578 1597/1597/1567 f 1597/1597/1567 1609/1609/1579 1610/1610/1580 f 1610/1610/1580 1598/1598/1568 1597/1597/1567 f 1610/1610/1580 1611/1611/1581 1599/1599/1569 f 1599/1599/1569 1598/1598/1568 1610/1610/1580 f 1599/1599/1569 1611/1611/1581 1612/1612/1582 f 1612/1612/1582 1600/1600/1570 1599/1599/1569 f 1612/1612/1582 1613/1613/1583 1601/1601/1571 f 1601/1601/1571 1600/1600/1570 1612/1612/1582 f 1601/1601/1571 1613/1613/1583 1614/1614/1584 f 1614/1614/1584 1602/1602/1572 1601/1601/1571 f 1603/1603/1573 1602/1602/1572 1614/1614/1584 f 1614/1614/1584 1615/1615/1585 1603/1603/1573 f 1603/1603/1573 1615/1615/1585 1616/1616/1586 f 1616/1616/1586 1604/1604/1574 1603/1603/1573 f 1617/1617/1587 1605/1605/1575 1604/1604/1574 f 1604/1604/1574 1616/1616/1586 1617/1617/1587 f 1617/1617/1587 1618/1618/1588 1606/1606/1576 f 1606/1606/1576 1605/1605/1575 1617/1617/1587 f 1618/1618/1588 1619/1619/1589 1607/1607/1577 f 1607/1607/1577 1606/1606/1576 1618/1618/1588 f 1607/1607/1577 1619/1619/1589 1620/1620/1590 f 1620/1620/1590 1608/1608/1578 1607/1607/1577 f 1608/1608/1578 1620/1620/1590 1609/1609/1579 f 1609/1609/1579 1597/1597/1567 1608/1608/1578 f 1621/1621/1591 1610/1610/1580 1609/1609/1579 f 1609/1609/1579 1622/1622/1592 1621/1621/1591 f 1621/1621/1591 1623/1623/1593 1611/1611/1581 f 1611/1611/1581 1610/1610/1580 1621/1621/1591 f 1623/1623/1593 1624/1624/1594 1612/1612/1582 f 1612/1612/1582 1611/1611/1581 1623/1623/1593 f 1612/1612/1582 1624/1624/1594 1625/1625/1595 f 1625/1625/1595 1613/1613/1583 1612/1612/1582 f 1626/1626/1596 1614/1614/1584 1613/1613/1583 f 1613/1613/1583 1625/1625/1595 1626/1626/1596 f 1627/1627/1597 1615/1615/1585 1614/1614/1584 f 1614/1614/1584 1626/1626/1596 1627/1627/1597 f 1627/1627/1597 1628/1628/1598 1616/1616/1586 f 1616/1616/1586 1615/1615/1585 1627/1627/1597 f 1616/1616/1586 1628/1628/1598 1629/1629/1599 f 1629/1629/1599 1617/1617/1587 1616/1616/1586 f 1617/1617/1587 1629/1629/1599 1630/1630/1600 f 1630/1630/1600 1618/1618/1588 1617/1617/1587 f 1631/1631/1601 1619/1619/1589 1618/1618/1588 f 1618/1618/1588 1630/1630/1600 1631/1631/1601 f 1631/1631/1601 1632/1632/1602 1620/1620/1590 f 1620/1620/1590 1619/1619/1589 1631/1631/1601 f 1620/1620/1590 1632/1632/1602 1622/1622/1592 f 1622/1622/1592 1609/1609/1579 1620/1620/1590 f 1633/1633/1603 1634/1634/1604 1621/1621/1591 f 1621/1621/1591 1622/1622/1592 1633/1633/1603 f 1621/1621/1591 1634/1634/1604 1635/1635/1605 f 1635/1635/1605 1623/1623/1593 1621/1621/1591 f 1635/1635/1605 1636/1636/1606 1624/1624/1594 f 1624/1624/1594 1623/1623/1593 1635/1635/1605 f 1637/1637/1607 1625/1625/1595 1624/1624/1594 f 1624/1624/1594 1636/1636/1606 1637/1637/1607 f 1625/1625/1595 1637/1637/1607 1638/1638/1608 f 1638/1638/1608 1626/1626/1596 1625/1625/1595 f 1639/1639/1609 1627/1627/1597 1626/1626/1596 f 1626/1626/1596 1638/1638/1608 1639/1639/1609 f 1640/1640/1610 1628/1628/1598 1627/1627/1597 f 1627/1627/1597 1639/1639/1609 1640/1640/1610 f 1640/1640/1610 1641/1641/1611 1629/1629/1599 f 1629/1629/1599 1628/1628/1598 1640/1640/1610 f 1629/1629/1599 1641/1641/1611 1642/1642/1612 f 1642/1642/1612 1630/1630/1600 1629/1629/1599 f 1631/1631/1601 1630/1630/1600 1642/1642/1612 f 1642/1642/1612 1643/1643/1613 1631/1631/1601 f 1632/1632/1602 1631/1631/1601 1643/1643/1613 f 1643/1643/1613 1644/1644/1614 1632/1632/1602 f 1632/1632/1602 1644/1644/1614 1633/1633/1603 f 1633/1633/1603 1622/1622/1592 1632/1632/1602 f 1645/1645/1615 1646/1646/1616 1634/1634/1604 f 1634/1634/1604 1633/1633/1603 1645/1645/1615 f 1634/1634/1604 1646/1646/1616 1647/1647/1617 f 1647/1647/1617 1635/1635/1605 1634/1634/1604 f 1635/1635/1605 1647/1647/1617 1648/1648/1618 f 1648/1648/1618 1636/1636/1606 1635/1635/1605 f 1648/1648/1618 1649/1649/1619 1637/1637/1607 f 1637/1637/1607 1636/1636/1606 1648/1648/1618 f 1649/1649/1619 1650/1650/1620 1638/1638/1608 f 1638/1638/1608 1637/1637/1607 1649/1649/1619 f 1650/1650/1620 1651/1651/1621 1639/1639/1609 f 1639/1639/1609 1638/1638/1608 1650/1650/1620 f 1651/1651/1621 1652/1652/1622 1640/1640/1610 f 1640/1640/1610 1639/1639/1609 1651/1651/1621 f 1653/1653/1623 1641/1641/1611 1640/1640/1610 f 1640/1640/1610 1652/1652/1622 1653/1653/1623 f 1654/1654/1624 1642/1642/1612 1641/1641/1611 f 1641/1641/1611 1653/1653/1623 1654/1654/1624 f 1643/1643/1613 1642/1642/1612 1654/1654/1624 f 1654/1654/1624 1655/1655/1625 1643/1643/1613 f 1655/1655/1625 1656/1656/1626 1644/1644/1614 f 1644/1644/1614 1643/1643/1613 1655/1655/1625 f 1645/1645/1615 1633/1633/1603 1644/1644/1614 f 1644/1644/1614 1656/1656/1626 1645/1645/1615 f 1576/1576/1546 1657/1657/1627 1573/1573/1543 f 1578/1578/1548 1657/1657/1627 1576/1576/1546 f 1580/1580/1550 1657/1657/1627 1578/1578/1548 f 1582/1582/1552 1657/1657/1627 1580/1580/1550 f 1584/1584/1554 1657/1657/1627 1582/1582/1552 f 1586/1586/1556 1657/1657/1627 1584/1584/1554 f 1588/1588/1558 1657/1657/1627 1586/1586/1556 f 1590/1590/1560 1657/1657/1627 1588/1588/1558 f 1592/1592/1562 1657/1657/1627 1590/1590/1560 f 1593/1593/1563 1657/1657/1627 1592/1592/1562 f 1596/1596/1566 1657/1657/1627 1593/1593/1563 f 1573/1573/1543 1657/1657/1627 1596/1596/1566 f 1645/1645/1615 1658/1658/1628 1646/1646/1616 f 1646/1646/1616 1658/1658/1628 1647/1647/1617 f 1647/1647/1617 1658/1658/1628 1648/1648/1618 f 1648/1648/1618 1658/1658/1628 1649/1649/1619 f 1649/1649/1619 1658/1658/1628 1650/1650/1620 f 1650/1650/1620 1658/1658/1628 1651/1651/1621 f 1651/1651/1621 1658/1658/1628 1652/1652/1622 f 1652/1652/1622 1658/1658/1628 1653/1653/1623 f 1653/1653/1623 1658/1658/1628 1654/1654/1624 f 1654/1654/1624 1658/1658/1628 1655/1655/1625 f 1655/1655/1625 1658/1658/1628 1656/1656/1626 f 1656/1656/1626 1658/1658/1628 1645/1645/1615 f 1659/1659/1629 1660/1660/1630 1661/1661/1631 f 1661/1661/1631 1662/1662/1632 1659/1659/1629 f 1663/1663/1633 1664/1664/1634 1661/1661/1631 f 1661/1661/1631 1660/1660/1630 1663/1663/1633 f 1663/1663/1633 1665/1665/1635 1666/1666/1636 f 1666/1666/1636 1664/1664/1634 1663/1663/1633 f 1665/1665/1635 1667/1667/1637 1668/1668/1638 f 1668/1668/1638 1666/1666/1636 1665/1665/1635 f 1667/1667/1637 1669/1669/1639 1670/1670/1640 f 1670/1670/1640 1668/1668/1638 1667/1667/1637 f 1669/1669/1639 1671/1671/1641 1672/1672/1642 f 1672/1672/1642 1670/1670/1640 1669/1669/1639 f 1671/1671/1641 1673/1673/1643 1674/1674/1644 f 1674/1674/1644 1672/1672/1642 1671/1671/1641 f 1675/1675/1645 1676/1676/1646 1674/1674/1644 f 1674/1674/1644 1673/1673/1643 1675/1675/1645 f 1675/1675/1645 1677/1677/1647 1678/1678/1648 f 1678/1678/1648 1676/1676/1646 1675/1675/1645 f 1677/1677/1647 1679/1679/1649 1680/1680/1650 f 1680/1680/1650 1678/1678/1648 1677/1677/1647 f 1679/1679/1649 1681/1681/1651 1682/1682/1652 f 1682/1682/1652 1680/1680/1650 1679/1679/1649 f 1681/1681/1651 1659/1659/1629 1662/1662/1632 f 1662/1662/1632 1682/1682/1652 1681/1681/1651 f 1683/1683/1653 1684/1684/1590 1685/1685/1654 f 1686/1686/1655 1684/1684/1590 1683/1683/1653 f 1687/1687/1656 1684/1684/1590 1686/1686/1655 f 1688/1688/1657 1684/1684/1590 1687/1687/1656 f 1689/1689/1658 1684/1684/1590 1688/1688/1657 f 1690/1690/1659 1684/1684/1590 1689/1689/1658 f 1691/1691/1660 1684/1684/1590 1690/1690/1659 f 1692/1692/1661 1684/1684/1590 1691/1691/1660 f 1693/1693/1662 1684/1684/1590 1692/1692/1661 f 1694/1694/1663 1684/1684/1590 1693/1693/1662 f 1695/1695/1664 1684/1684/1590 1694/1694/1663 f 1685/1685/1654 1684/1684/1590 1695/1695/1664 f 1696/1696/1665 1697/1697/1666 1698/1698/1667 f 1698/1698/1667 1697/1697/1666 1699/1699/1668 f 1699/1699/1668 1697/1697/1666 1700/1700/1669 f 1700/1700/1669 1697/1697/1666 1701/1701/1670 f 1701/1701/1670 1697/1697/1666 1702/1702/1671 f 1702/1702/1671 1697/1697/1666 1703/1703/1672 f 1703/1703/1672 1697/1697/1666 1704/1704/1673 f 1704/1704/1673 1697/1697/1666 1705/1705/1674 f 1705/1705/1674 1697/1697/1666 1706/1706/1675 f 1706/1706/1675 1697/1697/1666 1707/1707/1676 f 1707/1707/1676 1697/1697/1666 1708/1708/1677 f 1708/1708/1677 1697/1697/1666 1696/1696/1665 f 1663/1663/1633 1709/1709/1678 1710/1710/1679 f 1710/1710/1679 1665/1665/1635 1663/1663/1633 f 1711/1711/1680 1709/1709/1678 1663/1663/1633 f 1663/1663/1633 1660/1660/1630 1711/1711/1680 f 1659/1659/1629 1712/1712/1681 1711/1711/1680 f 1711/1711/1680 1660/1660/1630 1659/1659/1629 f 1681/1681/1651 1713/1713/1682 1712/1712/1681 f 1712/1712/1681 1659/1659/1629 1681/1681/1651 f 1679/1679/1649 1714/1714/1683 1713/1713/1682 f 1713/1713/1682 1681/1681/1651 1679/1679/1649 f 1677/1677/1647 1715/1715/1684 1714/1714/1683 f 1714/1714/1683 1679/1679/1649 1677/1677/1647 f 1675/1675/1645 1716/1716/1685 1715/1715/1684 f 1715/1715/1684 1677/1677/1647 1675/1675/1645 f 1673/1673/1643 1717/1717/1686 1716/1716/1685 f 1716/1716/1685 1675/1675/1645 1673/1673/1643 f 1671/1671/1641 1718/1718/1687 1717/1717/1686 f 1717/1717/1686 1673/1673/1643 1671/1671/1641 f 1669/1669/1639 1719/1719/1688 1718/1718/1687 f 1718/1718/1687 1671/1671/1641 1669/1669/1639 f 1720/1720/1689 1719/1719/1688 1669/1669/1639 f 1669/1669/1639 1667/1667/1637 1720/1720/1689 f 1710/1710/1679 1720/1720/1689 1667/1667/1637 f 1667/1667/1637 1665/1665/1635 1710/1710/1679 f 1721/1721/1690 1722/1722/1691 1723/1723/1692 f 1723/1723/1692 1724/1724/1693 1721/1721/1690 f 1725/1725/1694 1726/1726/1695 1721/1721/1690 f 1721/1721/1690 1724/1724/1693 1725/1725/1694 f 1727/1727/1696 1726/1726/1695 1725/1725/1694 f 1725/1725/1694 1728/1728/1697 1727/1727/1696 f 1729/1729/1698 1727/1727/1696 1728/1728/1697 f 1728/1728/1697 1730/1730/1699 1729/1729/1698 f 1731/1731/1700 1729/1729/1698 1730/1730/1699 f 1730/1730/1699 1732/1732/1701 1731/1731/1700 f 1733/1733/1702 1731/1731/1700 1732/1732/1701 f 1732/1732/1701 1734/1734/1703 1733/1733/1702 f 1735/1735/1704 1733/1733/1702 1734/1734/1703 f 1734/1734/1703 1736/1736/1705 1735/1735/1704 f 1737/1737/1706 1738/1738/1707 1735/1735/1704 f 1735/1735/1704 1736/1736/1705 1737/1737/1706 f 1739/1739/1708 1738/1738/1707 1737/1737/1706 f 1737/1737/1706 1740/1740/1709 1739/1739/1708 f 1741/1741/1710 1739/1739/1708 1740/1740/1709 f 1740/1740/1709 1742/1742/1711 1741/1741/1710 f 1743/1743/1712 1741/1741/1710 1742/1742/1711 f 1742/1742/1711 1744/1744/1713 1743/1743/1712 f 1722/1722/1691 1743/1743/1712 1744/1744/1713 f 1744/1744/1713 1723/1723/1692 1722/1722/1691 f 1745/1745/1714 1746/1746/1715 1662/1662/1632 f 1662/1662/1632 1661/1661/1631 1745/1745/1714 f 1747/1747/1716 1745/1745/1714 1661/1661/1631 f 1661/1661/1631 1664/1664/1634 1747/1747/1716 f 1748/1748/1717 1747/1747/1716 1664/1664/1634 f 1664/1664/1634 1666/1666/1636 1748/1748/1717 f 1749/1749/1718 1748/1748/1717 1666/1666/1636 f 1666/1666/1636 1668/1668/1638 1749/1749/1718 f 1750/1750/1719 1749/1749/1718 1668/1668/1638 f 1668/1668/1638 1670/1670/1640 1750/1750/1719 f 1751/1751/1720 1750/1750/1719 1670/1670/1640 f 1670/1670/1640 1672/1672/1642 1751/1751/1720 f 1752/1752/1721 1751/1751/1720 1672/1672/1642 f 1672/1672/1642 1674/1674/1644 1752/1752/1721 f 1753/1753/1722 1752/1752/1721 1674/1674/1644 f 1674/1674/1644 1676/1676/1646 1753/1753/1722 f 1754/1754/1723 1753/1753/1722 1676/1676/1646 f 1676/1676/1646 1678/1678/1648 1754/1754/1723 f 1755/1755/1724 1754/1754/1723 1678/1678/1648 f 1678/1678/1648 1680/1680/1650 1755/1755/1724 f 1756/1756/1725 1755/1755/1724 1680/1680/1650 f 1680/1680/1650 1682/1682/1652 1756/1756/1725 f 1746/1746/1715 1756/1756/1725 1682/1682/1652 f 1682/1682/1652 1662/1662/1632 1746/1746/1715 f 1683/1683/1653 1685/1685/1654 1746/1746/1715 f 1746/1746/1715 1745/1745/1714 1683/1683/1653 f 1747/1747/1716 1686/1686/1655 1683/1683/1653 f 1683/1683/1653 1745/1745/1714 1747/1747/1716 f 1748/1748/1717 1687/1687/1656 1686/1686/1655 f 1686/1686/1655 1747/1747/1716 1748/1748/1717 f 1749/1749/1718 1688/1688/1657 1687/1687/1656 f 1687/1687/1656 1748/1748/1717 1749/1749/1718 f 1750/1750/1719 1689/1689/1658 1688/1688/1657 f 1688/1688/1657 1749/1749/1718 1750/1750/1719 f 1751/1751/1720 1690/1690/1659 1689/1689/1658 f 1689/1689/1658 1750/1750/1719 1751/1751/1720 f 1752/1752/1721 1691/1691/1660 1690/1690/1659 f 1690/1690/1659 1751/1751/1720 1752/1752/1721 f 1753/1753/1722 1692/1692/1661 1691/1691/1660 f 1691/1691/1660 1752/1752/1721 1753/1753/1722 f 1693/1693/1662 1692/1692/1661 1753/1753/1722 f 1753/1753/1722 1754/1754/1723 1693/1693/1662 f 1694/1694/1663 1693/1693/1662 1754/1754/1723 f 1754/1754/1723 1755/1755/1724 1694/1694/1663 f 1756/1756/1725 1695/1695/1664 1694/1694/1663 f 1694/1694/1663 1755/1755/1724 1756/1756/1725 f 1685/1685/1654 1695/1695/1664 1756/1756/1725 f 1756/1756/1725 1746/1746/1715 1685/1685/1654 f 1727/1727/1696 1757/1757/1726 1758/1758/1727 f 1758/1758/1727 1726/1726/1695 1727/1727/1696 f 1758/1758/1727 1759/1759/1728 1721/1721/1690 f 1721/1721/1690 1726/1726/1695 1758/1758/1727 f 1721/1721/1690 1759/1759/1728 1760/1760/1729 f 1760/1760/1729 1722/1722/1691 1721/1721/1690 f 1722/1722/1691 1760/1760/1729 1761/1761/1730 f 1761/1761/1730 1743/1743/1712 1722/1722/1691 f 1761/1761/1730 1762/1762/1731 1741/1741/1710 f 1741/1741/1710 1743/1743/1712 1761/1761/1730 f 1741/1741/1710 1762/1762/1731 1763/1763/1732 f 1763/1763/1732 1739/1739/1708 1741/1741/1710 f 1739/1739/1708 1763/1763/1732 1764/1764/1733 f 1764/1764/1733 1738/1738/1707 1739/1739/1708 f 1738/1738/1707 1764/1764/1733 1765/1765/1734 f 1765/1765/1734 1735/1735/1704 1738/1738/1707 f 1735/1735/1704 1765/1765/1734 1766/1766/1735 f 1766/1766/1735 1733/1733/1702 1735/1735/1704 f 1733/1733/1702 1766/1766/1735 1767/1767/1736 f 1767/1767/1736 1731/1731/1700 1733/1733/1702 f 1731/1731/1700 1767/1767/1736 1768/1768/1737 f 1768/1768/1737 1729/1729/1698 1731/1731/1700 f 1729/1729/1698 1768/1768/1737 1757/1757/1726 f 1757/1757/1726 1727/1727/1696 1729/1729/1698 f 1757/1757/1726 1696/1696/1665 1698/1698/1667 f 1698/1698/1667 1758/1758/1727 1757/1757/1726 f 1758/1758/1727 1698/1698/1667 1699/1699/1668 f 1699/1699/1668 1759/1759/1728 1758/1758/1727 f 1699/1699/1668 1700/1700/1669 1760/1760/1729 f 1760/1760/1729 1759/1759/1728 1699/1699/1668 f 1760/1760/1729 1700/1700/1669 1701/1701/1670 f 1701/1701/1670 1761/1761/1730 1760/1760/1729 f 1701/1701/1670 1702/1702/1671 1762/1762/1731 f 1762/1762/1731 1761/1761/1730 1701/1701/1670 f 1702/1702/1671 1703/1703/1672 1763/1763/1732 f 1763/1763/1732 1762/1762/1731 1702/1702/1671 f 1763/1763/1732 1703/1703/1672 1704/1704/1673 f 1704/1704/1673 1764/1764/1733 1763/1763/1732 f 1764/1764/1733 1704/1704/1673 1705/1705/1674 f 1705/1705/1674 1765/1765/1734 1764/1764/1733 f 1706/1706/1675 1766/1766/1735 1765/1765/1734 f 1765/1765/1734 1705/1705/1674 1706/1706/1675 f 1706/1706/1675 1707/1707/1676 1767/1767/1736 f 1767/1767/1736 1766/1766/1735 1706/1706/1675 f 1767/1767/1736 1707/1707/1676 1708/1708/1677 f 1708/1708/1677 1768/1768/1737 1767/1767/1736 f 1768/1768/1737 1708/1708/1677 1696/1696/1665 f 1696/1696/1665 1757/1757/1726 1768/1768/1737 f 1769/1769/1679 1770/1770/1678 1724/1724/1693 f 1724/1724/1693 1723/1723/1692 1769/1769/1679 f 1724/1724/1693 1770/1770/1678 1771/1771/1680 f 1771/1771/1680 1725/1725/1694 1724/1724/1693 f 1725/1725/1694 1771/1771/1680 1772/1772/1681 f 1772/1772/1681 1728/1728/1697 1725/1725/1694 f 1730/1730/1699 1728/1728/1697 1772/1772/1681 f 1772/1772/1681 1773/1773/1682 1730/1730/1699 f 1774/1774/1683 1732/1732/1701 1730/1730/1699 f 1730/1730/1699 1773/1773/1682 1774/1774/1683 f 1734/1734/1703 1732/1732/1701 1774/1774/1683 f 1774/1774/1683 1775/1775/1684 1734/1734/1703 f 1736/1736/1705 1734/1734/1703 1775/1775/1684 f 1775/1775/1684 1776/1776/1685 1736/1736/1705 f 1736/1736/1705 1776/1776/1685 1777/1777/1686 f 1777/1777/1686 1737/1737/1706 1736/1736/1705 f 1778/1778/1687 1740/1740/1709 1737/1737/1706 f 1737/1737/1706 1777/1777/1686 1778/1778/1687 f 1740/1740/1709 1778/1778/1687 1779/1779/1688 f 1779/1779/1688 1742/1742/1711 1740/1740/1709 f 1780/1780/1689 1744/1744/1713 1742/1742/1711 f 1742/1742/1711 1779/1779/1688 1780/1780/1689 f 1769/1769/1679 1723/1723/1692 1744/1744/1713 f 1744/1744/1713 1780/1780/1689 1769/1769/1679 f 1770/1770/1678 1769/1769/1679 1710/1710/1679 f 1710/1710/1679 1709/1709/1678 1770/1770/1678 f 1711/1711/1680 1771/1771/1680 1770/1770/1678 f 1770/1770/1678 1709/1709/1678 1711/1711/1680 f 1772/1772/1681 1771/1771/1680 1711/1711/1680 f 1711/1711/1680 1712/1712/1681 1772/1772/1681 f 1772/1772/1681 1712/1712/1681 1713/1713/1682 f 1713/1713/1682 1773/1773/1682 1772/1772/1681 f 1714/1714/1683 1774/1774/1683 1773/1773/1682 f 1773/1773/1682 1713/1713/1682 1714/1714/1683 f 1715/1715/1684 1775/1775/1684 1774/1774/1683 f 1774/1774/1683 1714/1714/1683 1715/1715/1684 f 1775/1775/1684 1715/1715/1684 1716/1716/1685 f 1716/1716/1685 1776/1776/1685 1775/1775/1684 f 1777/1777/1686 1776/1776/1685 1716/1716/1685 f 1716/1716/1685 1717/1717/1686 1777/1777/1686 f 1718/1718/1687 1778/1778/1687 1777/1777/1686 f 1777/1777/1686 1717/1717/1686 1718/1718/1687 f 1718/1718/1687 1719/1719/1688 1779/1779/1688 f 1779/1779/1688 1778/1778/1687 1718/1718/1687 f 1719/1719/1688 1720/1720/1689 1780/1780/1689 f 1780/1780/1689 1779/1779/1688 1719/1719/1688 f 1710/1710/1679 1769/1769/1679 1780/1780/1689 f 1780/1780/1689 1720/1720/1689 1710/1710/1679 v 37.0955 35.0252 71.3931 v 36.0079 34.0988 71.5075 v 37.1409 33.3656 72.2235 v 37.7295 33.8668 72.1616 v 35.5255 32.7500 71.5475 v 36.8798 32.6356 72.2452 v 35.7774 31.3398 71.5026 v 37.0162 31.8724 72.2208 v 36.6963 30.2464 71.3847 v 37.5135 31.2806 72.1570 v 38.0359 29.7626 71.2254 v 38.2384 31.0188 72.0708 v 39.4372 30.0181 71.0674 v 38.9968 31.1571 71.9853 v 40.5248 30.9443 70.9530 v 39.5854 31.6584 71.9234 v 41.0072 32.2931 70.9129 v 39.8464 32.3883 71.9017 v 40.7552 33.7034 70.9579 v 39.7101 33.1516 71.9260 v 39.8363 34.7968 71.0758 v 39.2128 33.7434 71.9898 v 38.4968 35.2806 71.2351 v 38.4879 34.0051 72.0760 v 36.5916 35.8069 70.1811 v 35.1705 34.5966 70.3306 v 34.5403 32.8343 70.3829 v 34.8695 30.9918 70.3242 v 36.0701 29.5632 70.1702 v 37.8204 28.9311 69.9620 v 39.6513 29.2648 69.7556 v 41.0723 30.4751 69.6061 v 41.7026 32.2374 69.5538 v 41.3733 34.0799 69.6125 v 40.1727 35.5086 69.7666 v 38.4225 36.1407 69.9747 v 36.2946 36.0934 68.7102 v 34.7566 34.7834 68.8719 v 34.0743 32.8757 68.9286 v 34.4307 30.8815 68.8651 v 35.7302 29.3351 68.6983 v 37.6246 28.6509 68.4730 v 39.6064 29.0123 68.2496 v 41.1445 30.3222 68.0878 v 41.8267 32.2299 68.0311 v 41.4703 34.2240 68.0947 v 40.1708 35.7704 68.2614 v 38.2764 36.4546 68.4867 v 36.2498 35.8407 67.2041 v 34.8288 34.6304 67.3536 v 34.1985 32.8681 67.4060 v 34.5277 31.0256 67.3473 v 35.7283 29.5970 67.1932 v 37.4785 28.9648 66.9850 v 39.3094 29.2986 66.7786 v 40.7304 30.5089 66.6292 v 41.3607 32.2712 66.5768 v 41.0315 34.1137 66.6355 v 39.8309 35.5424 66.7896 v 38.0807 36.1745 66.9977 v 36.4638 35.0876 65.8923 v 35.3762 34.1612 66.0067 v 34.8938 32.8124 66.0468 v 35.1458 31.4022 66.0019 v 36.0647 30.3088 65.8839 v 37.4043 29.8250 65.7247 v 38.8056 30.0805 65.5666 v 39.8932 31.0067 65.4523 v 40.3756 32.3556 65.4122 v 40.1236 33.7658 65.4571 v 39.2047 34.8592 65.5750 v 37.8651 35.3430 65.7343 v 36.9042 33.9484 64.9745 v 36.3156 33.4472 65.0364 v 36.0545 32.7172 65.0580 v 36.1909 31.9540 65.0337 v 36.6882 31.3622 64.9699 v 37.4132 31.1004 64.8837 v 38.1716 31.2387 64.7982 v 38.7601 31.7399 64.7363 v 39.0212 32.4699 64.7146 v 38.8849 33.2331 64.7389 v 38.3876 33.8249 64.8027 v 37.6626 34.0867 64.8889 v 38.3971 32.5087 72.3695 v 37.5039 32.5970 64.5902 v 35.6890 31.8983 65.5152 v 34.7758 29.7114 64.5303 v 33.2010 29.8393 66.5223 v 34.5060 31.9945 67.0118 v 32.8297 29.8659 69.0374 v 34.2270 32.0144 68.9013 v 33.7613 29.7839 71.4016 v 34.9269 31.9529 70.6776 v 35.7462 29.6154 72.9816 v 36.4181 31.8263 71.8645 v 38.2525 29.4053 73.3538 v 38.3011 31.6685 72.1441 v 40.6087 29.2102 72.4186 v 40.0712 31.5218 71.4416 v 42.1835 29.0822 70.4266 v 41.2543 31.4256 69.9450 v 41.5332 31.4056 68.0555 v 42.5548 29.0557 67.9115 v 41.6232 29.1375 65.5472 v 40.8334 31.4672 66.2792 v 39.6383 29.3061 63.9673 v 39.3422 31.5938 65.0923 v 37.1320 29.5161 63.5951 v 37.4592 31.7517 64.8126 v 35.9483 31.1279 67.6642 v 37.8183 30.9702 68.4771 v 36.6040 31.0745 66.8348 v 35.7936 31.1389 68.7115 v 36.1815 31.1048 69.6959 v 37.0080 31.0345 70.3538 v 38.0516 30.9471 70.5088 v 39.0327 30.8659 70.1194 v 39.6884 30.8125 69.2899 v 39.8430 30.8016 68.2427 v 39.4551 30.8356 67.2582 v 38.6286 30.9058 66.6004 v 37.5850 30.9932 66.4454 v 35.1203 9.2557 67.2513 v 35.9984 9.1802 68.4388 v 34.6462 9.2942 67.8510 v 34.5344 9.3022 68.6083 v 34.8149 9.2775 69.3201 v 35.4125 9.2268 69.7958 v 36.1671 9.1636 69.9079 v 36.8765 9.1048 69.6263 v 37.3506 9.0662 69.0266 v 37.4624 9.0582 68.2693 v 37.1819 9.0828 67.5575 v 36.5843 9.1337 67.0818 v 35.8297 9.1969 66.9697 v 32.8206 28.6149 69.0242 v 33.7341 28.5345 71.3425 v 33.1847 28.5888 66.5581 v 34.7288 28.4633 64.6049 v 37.0391 28.2719 63.6879 v 39.4966 28.0660 64.0529 v 41.4428 27.9007 65.6020 v 42.3563 27.8204 67.9203 v 41.9922 27.8464 70.3864 v 40.4481 27.9720 72.3396 v 38.1378 28.1633 73.2566 v 35.6803 28.3692 72.8916 v 33.3815 8.7350 70.3456 v 32.9924 9.9692 70.7117 v 32.2693 10.0329 68.8767 v 32.7743 8.7884 68.8046 v 32.5575 10.0121 66.9246 v 33.0163 8.7710 67.1653 v 33.7797 9.9128 65.3784 v 34.0427 8.6876 65.8669 v 35.6085 9.7613 64.6526 v 35.5784 8.5604 65.2573 v 37.5538 9.5983 64.9415 v 37.2120 8.4235 65.4999 v 39.0944 9.4675 66.1678 v 38.5058 8.3137 66.5297 v 39.8174 9.4040 68.0028 v 39.1130 8.2603 68.0707 v 39.5292 9.4245 69.9549 v 38.8710 8.2776 69.7101 v 38.3070 9.5239 71.5010 v 37.8446 8.3610 71.0084 v 36.4782 9.6754 72.2269 v 36.3088 8.4882 71.6180 v 34.5329 9.8383 71.9380 v 34.6752 8.6251 71.3754 v 35.1081 31.9438 67.2735 v 36.0800 31.8647 66.0439 v 34.8789 31.9601 68.8259 v 35.4539 31.9096 70.2851 v 36.6790 31.8056 71.2603 v 38.2260 31.6759 71.4901 v 39.6802 31.5554 70.9128 v 40.6522 31.4765 69.6833 v 40.8814 31.4601 68.1309 v 40.3064 31.5107 66.6716 v 39.0813 31.6146 65.6965 v 37.5343 31.7443 65.4667 v 34.5865 8.6409 66.6023 v 33.8538 8.7005 67.5293 v 33.6810 8.7128 68.6996 v 34.1145 8.6747 69.7997 v 35.0381 8.5963 70.5349 v 36.2043 8.4986 70.7081 v 37.3007 8.4077 70.2729 v 38.0335 8.3483 69.3460 v 38.2062 8.3358 68.1757 v 37.7728 8.3741 67.0756 v 36.8492 8.4524 66.3404 v 35.6829 8.5501 66.1672 v 33.0212 11.2916 70.7744 v 32.2790 11.3569 68.8906 v 32.5748 11.3357 66.8866 v 33.8295 11.2337 65.2995 v 35.7068 11.0782 64.5544 v 37.7038 10.9109 64.8510 v 39.2853 10.7766 66.1097 v 40.0275 10.7113 67.9935 v 39.7317 10.7325 69.9975 v 38.4770 10.8345 71.5846 v 36.5997 10.9900 72.3297 v 34.6027 11.1573 72.0332 vn -0.2267 0.6456 0.7292 vn -0.5106 0.4038 0.7591 vn -0.2301 0.2231 0.9472 vn -0.0692 0.3602 0.9303 vn -0.6365 0.0518 0.7696 vn -0.3015 0.0235 0.9532 vn -0.5707 -0.3162 0.7578 vn -0.2643 -0.1851 0.9465 vn -0.3309 -0.6016 0.7271 vn -0.1283 -0.3470 0.9291 vn 0.0187 -0.7278 0.6855 vn 0.0700 -0.4186 0.9055 vn 0.3844 -0.6612 0.6442 vn 0.2773 -0.3808 0.8821 vn 0.6683 -0.4194 0.6144 vn 0.4383 -0.2437 0.8652 vn 0.7942 -0.0674 0.6039 vn 0.5096 -0.0441 0.8593 vn 0.7284 0.3006 0.6157 vn 0.4724 0.1646 0.8659 vn 0.4886 0.5860 0.6464 vn 0.3364 0.3264 0.8834 vn 0.1390 0.7123 0.6880 vn 0.1381 0.3980 0.9069 vn -0.3502 0.8353 0.4239 vn -0.7149 0.5247 0.4623 vn -0.8766 0.0724 0.4757 vn -0.7921 -0.4004 0.4606 vn -0.4840 -0.7671 0.4211 vn -0.0349 -0.9293 0.3677 vn 0.4350 -0.8436 0.3147 vn 0.7997 -0.5330 0.2763 vn 0.9614 -0.0808 0.2629 vn 0.8769 0.3921 0.2780 vn 0.5688 0.7587 0.3175 vn 0.1197 0.9209 0.3709 vn -0.4229 0.9043 0.0588 vn -0.8157 0.5697 0.1001 vn -0.9900 0.0825 0.1146 vn -0.8990 -0.4268 0.0984 vn -0.5671 -0.8218 0.0558 vn -0.0832 -0.9965 -0.0018 vn 0.4229 -0.9043 -0.0588 vn 0.8157 -0.5697 -0.1001 vn 0.9900 -0.0825 -0.1146 vn 0.8990 0.4268 -0.0984 vn 0.5671 0.8218 -0.0558 vn 0.0832 0.9965 0.0018 vn -0.4350 0.8436 -0.3147 vn -0.7997 0.5330 -0.2763 vn -0.9614 0.0808 -0.2629 vn -0.8769 -0.3921 -0.2780 vn -0.5688 -0.7587 -0.3175 vn -0.1197 -0.9209 -0.3709 vn 0.3502 -0.8353 -0.4239 vn 0.7149 -0.5247 -0.4623 vn 0.8766 -0.0724 -0.4757 vn 0.7921 0.4004 -0.4606 vn 0.4840 0.7671 -0.4211 vn 0.0349 0.9293 -0.3677 vn -0.3844 0.6612 -0.6442 vn -0.6683 0.4194 -0.6144 vn -0.7942 0.0674 -0.6039 vn -0.7284 -0.3006 -0.6156 vn -0.4886 -0.5860 -0.6464 vn -0.1390 -0.7123 -0.6880 vn 0.2267 -0.6456 -0.7293 vn 0.5106 -0.4039 -0.7591 vn 0.6365 -0.0518 -0.7696 vn 0.5707 0.3162 -0.7578 vn 0.3309 0.6016 -0.7270 vn -0.0187 0.7278 -0.6855 vn -0.2773 0.3808 -0.8821 vn -0.4383 0.2437 -0.8652 vn -0.5096 0.0441 -0.8593 vn -0.4724 -0.1646 -0.8659 vn -0.3364 -0.3264 -0.8833 vn -0.1381 -0.3980 -0.9069 vn 0.0692 -0.3602 -0.9303 vn 0.2301 -0.2231 -0.9472 vn 0.3015 -0.0235 -0.9532 vn 0.2643 0.1851 -0.9465 vn 0.1283 0.3470 -0.9291 vn -0.0700 0.4186 -0.9055 vn 0.1141 -0.0113 0.9934 vn -0.1141 0.0113 -0.9934 vn -0.2697 0.8483 -0.4558 vn -0.5653 0.2487 -0.7865 vn -0.8794 0.2742 -0.3891 vn -0.4522 0.8631 -0.2248 vn -0.9535 0.2795 0.1127 vn -0.4953 0.8662 0.0667 vn -0.7677 0.2631 0.5843 vn -0.3873 0.8567 0.3408 vn -0.3717 0.2295 0.8996 vn -0.1572 0.8371 0.5239 vn 0.1284 0.1876 0.9738 vn 0.1334 0.8128 0.5671 vn 0.5985 0.1487 0.7872 vn 0.4065 0.7902 0.4587 vn 0.9126 0.1231 0.3898 vn 0.5891 0.7753 0.2278 vn 0.6322 0.7722 -0.0638 vn 0.9867 0.1178 -0.1120 vn 0.8008 0.1342 -0.5837 vn 0.5241 0.7817 -0.3379 vn 0.4048 0.1678 -0.8989 vn 0.2940 0.8013 -0.5210 vn -0.0952 0.2097 -0.9731 vn 0.0035 0.8256 -0.5642 vn 0.4094 0.9006 0.1459 vn 0.2931 0.9101 0.2930 vn 0.4368 0.8987 -0.0400 vn 0.3680 0.9047 -0.2147 vn 0.2214 0.9172 -0.3313 vn 0.0362 0.9327 -0.3589 vn -0.1379 0.9471 -0.2898 vn -0.2543 0.9566 -0.1425 vn -0.2817 0.9585 0.0432 vn -0.2129 0.9525 0.2179 vn -0.0662 0.9400 0.3346 vn 0.1190 0.9245 0.3621 vn 0.1507 -0.9400 0.3061 vn -0.0833 -0.9965 -0.0017 vn 0.2735 -0.9500 0.1507 vn 0.3025 -0.9521 -0.0455 vn 0.2298 -0.9457 -0.2300 vn 0.0750 -0.9325 -0.3533 vn -0.1206 -0.9161 -0.3823 vn -0.3045 -0.9009 -0.3093 vn -0.4273 -0.8909 -0.1539 vn -0.4562 -0.8889 0.0423 vn -0.3836 -0.8953 0.2267 vn -0.2287 -0.9084 0.3500 vn -0.0332 -0.9248 0.3791 vn -0.9933 0.0180 0.1143 vn -0.8040 0.0014 0.5946 vn -0.9178 0.0126 -0.3967 vn -0.5979 -0.0134 -0.8015 vn -0.1192 -0.0530 -0.9915 vn 0.3900 -0.0957 -0.9158 vn 0.7933 -0.1299 -0.5948 vn 0.9826 -0.1466 -0.1145 vn 0.9071 -0.1412 0.3965 vn 0.5872 -0.1152 0.8012 vn 0.1085 -0.0755 0.9912 vn -0.4007 -0.0329 0.9156 vn -0.5320 -0.7736 0.3443 vn -0.7941 -0.1981 0.5746 vn -0.9771 -0.1820 0.1101 vn -0.6420 -0.7639 0.0651 vn -0.9042 -0.1872 -0.3840 vn -0.5982 -0.7671 -0.2320 vn -0.5948 -0.2124 -0.7753 vn -0.4122 -0.7822 -0.4672 vn -0.1319 -0.2507 -0.9590 vn -0.1340 -0.8052 -0.5776 vn 0.3605 -0.2920 -0.8859 vn 0.1620 -0.8300 -0.5337 vn 0.7504 -0.3251 -0.5755 vn 0.3964 -0.8499 -0.3471 vn 0.9334 -0.3412 -0.1111 vn 0.5064 -0.8596 -0.0679 vn 0.8605 -0.3360 0.3830 vn 0.4626 -0.8565 0.2291 vn 0.5511 -0.3108 0.7744 vn 0.2766 -0.8413 0.4644 vn 0.0882 -0.2725 0.9581 vn -0.0016 -0.8183 0.5748 vn -0.4042 -0.2312 0.8850 vn -0.2976 -0.7935 0.5308 vn 0.3253 0.9394 0.1083 vn 0.2394 0.9464 0.2169 vn 0.3455 0.9380 -0.0290 vn 0.2947 0.9424 -0.1581 vn 0.1864 0.9516 -0.2443 vn 0.0496 0.9631 -0.2646 vn -0.0790 0.9737 -0.2136 vn -0.1649 0.9807 -0.1048 vn -0.1851 0.9822 0.0324 vn -0.1343 0.9777 0.1613 vn -0.0260 0.9685 0.2476 vn 0.1108 0.9570 0.2680 vn 0.0890 -0.9699 0.2265 vn 0.1801 -0.9773 0.1113 vn 0.2016 -0.9789 -0.0343 vn 0.1477 -0.9741 -0.1711 vn 0.0328 -0.9644 -0.2625 vn -0.1122 -0.9522 -0.2840 vn -0.2485 -0.9409 -0.2299 vn -0.3397 -0.9335 -0.1147 vn -0.3611 -0.9320 0.0309 vn -0.3073 -0.9367 0.1677 vn -0.1924 -0.9465 0.2591 vn -0.0474 -0.9586 0.2807 vn -0.8040 0.0016 0.5946 vn -0.9933 0.0183 0.1143 vn -0.9178 0.0129 -0.3967 vn -0.5979 -0.0131 -0.8015 vn -0.1192 -0.0528 -0.9915 vn 0.3900 -0.0954 -0.9158 vn 0.7933 -0.1297 -0.5948 vn 0.9826 -0.1463 -0.1145 vn 0.9071 -0.1409 0.3965 vn 0.5872 -0.1149 0.8012 vn 0.1085 -0.0753 0.9912 vn -0.4007 -0.0326 0.9156 vt 0.9184 0.3539 0.0000 vt 0.9164 0.3621 0.0000 vt 0.9373 0.3624 0.0000 vt 0.9383 0.3580 0.0000 vt 0.9178 0.3704 0.0000 vt 0.9380 0.3669 0.0000 vt 0.9220 0.3768 0.0000 vt 0.9403 0.3704 0.0000 vt 0.9280 0.3794 0.0000 vt 0.9435 0.3718 0.0000 vt 0.9342 0.3775 0.0000 vt 0.9469 0.3708 0.0000 vt 0.9388 0.3717 0.0000 vt 0.9494 0.3676 0.0000 vt 0.9408 0.3635 0.0000 vt 0.9504 0.3632 0.0000 vt 0.9394 0.3551 0.0000 vt 0.9497 0.3587 0.0000 vt 0.9352 0.3488 0.0000 vt 0.9474 0.3552 0.0000 vt 0.9292 0.3462 0.0000 vt 0.9442 0.3538 0.0000 vt 0.9230 0.3481 0.0000 vt 0.9408 0.3548 0.0000 vt 0.8924 0.3511 0.0000 vt 0.8899 0.3618 0.0000 vt 0.8916 0.3728 0.0000 vt 0.8971 0.3810 0.0000 vt 0.9050 0.3844 0.0000 vt 0.9131 0.3820 0.0000 vt 0.9192 0.3744 0.0000 vt 0.9217 0.3637 0.0000 vt 0.9200 0.3528 0.0000 vt 0.9144 0.3445 0.0000 vt 0.9066 0.3412 0.0000 vt 0.8985 0.3436 0.0000 vt 0.8644 0.3502 0.0000 vt 0.8617 0.3617 0.0000 vt 0.8635 0.3736 0.0000 vt 0.8695 0.3825 0.0000 vt 0.8780 0.3862 0.0000 vt 0.8867 0.3836 0.0000 vt 0.8934 0.3754 0.0000 vt 0.8961 0.3638 0.0000 vt 0.8942 0.3520 0.0000 vt 0.8882 0.3430 0.0000 vt 0.8797 0.3394 0.0000 vt 0.8710 0.3420 0.0000 vt 0.8386 0.3511 0.0000 vt 0.8360 0.3618 0.0000 vt 0.8378 0.3728 0.0000 vt 0.8433 0.3810 0.0000 vt 0.8512 0.3844 0.0000 vt 0.8592 0.3820 0.0000 vt 0.8653 0.3744 0.0000 vt 0.8679 0.3637 0.0000 vt 0.8661 0.3528 0.0000 vt 0.8606 0.3445 0.0000 vt 0.8527 0.3411 0.0000 vt 0.8447 0.3435 0.0000 vt 0.8189 0.3538 0.0000 vt 0.8170 0.3620 0.0000 vt 0.8183 0.3704 0.0000 vt 0.8225 0.3767 0.0000 vt 0.8285 0.3793 0.0000 vt 0.8347 0.3775 0.0000 vt 0.8394 0.3717 0.0000 vt 0.8413 0.3635 0.0000 vt 0.8400 0.3551 0.0000 vt 0.8358 0.3488 0.0000 vt 0.8297 0.3462 0.0000 vt 0.8236 0.3480 0.0000 vt 0.8084 0.3579 0.0000 vt 0.8073 0.3623 0.0000 vt 0.8080 0.3669 0.0000 vt 0.8103 0.3703 0.0000 vt 0.8136 0.3717 0.0000 vt 0.8169 0.3707 0.0000 vt 0.8194 0.3676 0.0000 vt 0.8205 0.3631 0.0000 vt 0.8198 0.3586 0.0000 vt 0.8175 0.3552 0.0000 vt 0.8142 0.3538 0.0000 vt 0.8109 0.3548 0.0000 vt 0.9492 0.3628 0.0000 vt 0.8085 0.3627 0.0000 vt 0.8159 0.3723 0.0000 vt 0.7991 0.3860 0.0000 vt 0.8243 0.3910 0.0000 vt 0.8349 0.3761 0.0000 vt 0.8659 0.3928 0.0000 vt 0.8661 0.3775 0.0000 vt 0.9126 0.3910 0.0000 vt 0.9012 0.3761 0.0000 vt 0.9519 0.3861 0.0000 vt 0.9307 0.3724 0.0000 vt 0.9733 0.3793 0.0000 vt 0.9469 0.3673 0.0000 vt 0.9711 0.3725 0.0000 vt 0.9452 0.3622 0.0000 vt 0.9459 0.3675 0.0000 vt 0.9262 0.3584 0.0000 vt 0.8950 0.3571 0.0000 vt 0.9044 0.3657 0.0000 vt 0.8577 0.3675 0.0000 vt 0.8600 0.3584 0.0000 vt 0.8183 0.3724 0.0000 vt 0.8304 0.3621 0.0000 vt 0.7969 0.3792 0.0000 vt 0.8143 0.3672 0.0000 vt 0.8568 0.3761 0.0000 vt 0.8821 0.3712 0.0000 vt 0.8462 0.3740 0.0000 vt 0.8741 0.3769 0.0000 vt 0.8935 0.3761 0.0000 vt 0.9099 0.3740 0.0000 vt 0.9188 0.3712 0.0000 vt 0.9179 0.3684 0.0000 vt 0.9074 0.3663 0.0000 vt 0.8901 0.3656 0.0000 vt 0.8706 0.3663 0.0000 vt 0.8543 0.3684 0.0000 vt 0.8453 0.3712 0.0000 vt 0.9001 0.4894 0.0000 vt 0.9260 0.4873 0.0000 vt 0.9077 0.4909 0.0000 vt 0.9202 0.4914 0.0000 vt 0.9343 0.4909 0.0000 vt 0.9461 0.4894 0.0000 vt 0.9526 0.4873 0.0000 vt 0.9519 0.4853 0.0000 vt 0.9443 0.4838 0.0000 vt 0.9318 0.4832 0.0000 vt 0.9178 0.4838 0.0000 vt 0.9059 0.4853 0.0000 vt 0.8995 0.4873 0.0000 vt 0.8687 0.3992 0.0000 vt 0.9145 0.3974 0.0000 vt 0.8280 0.3974 0.0000 vt 0.8033 0.3925 0.0000 vt 0.8011 0.3858 0.0000 vt 0.8221 0.3792 0.0000 vt 0.8607 0.3743 0.0000 vt 0.9065 0.3726 0.0000 vt 0.9472 0.3744 0.0000 vt 0.9720 0.3793 0.0000 vt 0.9741 0.3859 0.0000 vt 0.9531 0.3926 0.0000 vt 0.9452 0.4985 0.0000 vt 0.9462 0.4936 0.0000 vt 0.9100 0.4950 0.0000 vt 0.9148 0.4997 0.0000 vt 0.8778 0.4936 0.0000 vt 0.8877 0.4985 0.0000 vt 0.8582 0.4897 0.0000 vt 0.8713 0.4952 0.0000 vt 0.8565 0.4844 0.0000 vt 0.8698 0.4908 0.0000 vt 0.8731 0.4792 0.0000 vt 0.8838 0.4864 0.0000 vt 0.9036 0.4753 0.0000 vt 0.9095 0.4831 0.0000 vt 0.9399 0.4739 0.0000 vt 0.9399 0.4820 0.0000 vt 0.9721 0.4754 0.0000 vt 0.9670 0.4832 0.0000 vt 0.9917 0.4792 0.0000 vt 0.9834 0.4864 0.0000 vt 0.9934 0.4845 0.0000 vt 0.9848 0.4908 0.0000 vt 0.9768 0.4897 0.0000 vt 0.9709 0.4953 0.0000 vt 0.8431 0.3745 0.0000 vt 0.8275 0.3714 0.0000 vt 0.8687 0.3756 0.0000 vt 0.8975 0.3745 0.0000 vt 0.9218 0.3715 0.0000 vt 0.9350 0.3673 0.0000 vt 0.9337 0.3631 0.0000 vt 0.9181 0.3600 0.0000 vt 0.8924 0.3589 0.0000 vt 0.8636 0.3600 0.0000 vt 0.8394 0.3631 0.0000 vt 0.8261 0.3672 0.0000 vt 0.8873 0.4940 0.0000 vt 0.8991 0.4963 0.0000 vt 0.9184 0.4971 0.0000 vt 0.9401 0.4963 0.0000 vt 0.9584 0.4940 0.0000 vt 0.9684 0.4908 0.0000 vt 0.9674 0.4877 0.0000 vt 0.9556 0.4854 0.0000 vt 0.9363 0.4845 0.0000 vt 0.9146 0.4853 0.0000 vt 0.8963 0.4876 0.0000 vt 0.8863 0.4908 0.0000 vt 0.9442 0.4868 0.0000 vt 0.9070 0.4883 0.0000 vt 0.8739 0.4868 0.0000 vt 0.8537 0.4828 0.0000 vt 0.8520 0.4774 0.0000 vt 0.8691 0.4720 0.0000 vt 0.9004 0.4681 0.0000 vt 0.9376 0.4666 0.0000 vt 0.9707 0.4681 0.0000 vt 0.9908 0.4721 0.0000 vt 0.9926 0.4775 0.0000 vt 0.9755 0.4829 0.0000 g Object026 f 1781/1781/1738 1782/1782/1739 1783/1783/1740 f 1783/1783/1740 1784/1784/1741 1781/1781/1738 f 1782/1782/1739 1785/1785/1742 1786/1786/1743 f 1786/1786/1743 1783/1783/1740 1782/1782/1739 f 1785/1785/1742 1787/1787/1744 1788/1788/1745 f 1788/1788/1745 1786/1786/1743 1785/1785/1742 f 1787/1787/1744 1789/1789/1746 1790/1790/1747 f 1790/1790/1747 1788/1788/1745 1787/1787/1744 f 1789/1789/1746 1791/1791/1748 1792/1792/1749 f 1792/1792/1749 1790/1790/1747 1789/1789/1746 f 1791/1791/1748 1793/1793/1750 1794/1794/1751 f 1794/1794/1751 1792/1792/1749 1791/1791/1748 f 1793/1793/1750 1795/1795/1752 1796/1796/1753 f 1796/1796/1753 1794/1794/1751 1793/1793/1750 f 1795/1795/1752 1797/1797/1754 1798/1798/1755 f 1798/1798/1755 1796/1796/1753 1795/1795/1752 f 1797/1797/1754 1799/1799/1756 1800/1800/1757 f 1800/1800/1757 1798/1798/1755 1797/1797/1754 f 1799/1799/1756 1801/1801/1758 1802/1802/1759 f 1802/1802/1759 1800/1800/1757 1799/1799/1756 f 1801/1801/1758 1803/1803/1760 1804/1804/1761 f 1804/1804/1761 1802/1802/1759 1801/1801/1758 f 1803/1803/1760 1781/1781/1738 1784/1784/1741 f 1784/1784/1741 1804/1804/1761 1803/1803/1760 f 1805/1805/1762 1806/1806/1763 1782/1782/1739 f 1782/1782/1739 1781/1781/1738 1805/1805/1762 f 1806/1806/1763 1807/1807/1764 1785/1785/1742 f 1785/1785/1742 1782/1782/1739 1806/1806/1763 f 1807/1807/1764 1808/1808/1765 1787/1787/1744 f 1787/1787/1744 1785/1785/1742 1807/1807/1764 f 1808/1808/1765 1809/1809/1766 1789/1789/1746 f 1789/1789/1746 1787/1787/1744 1808/1808/1765 f 1809/1809/1766 1810/1810/1767 1791/1791/1748 f 1791/1791/1748 1789/1789/1746 1809/1809/1766 f 1810/1810/1767 1811/1811/1768 1793/1793/1750 f 1793/1793/1750 1791/1791/1748 1810/1810/1767 f 1811/1811/1768 1812/1812/1769 1795/1795/1752 f 1795/1795/1752 1793/1793/1750 1811/1811/1768 f 1812/1812/1769 1813/1813/1770 1797/1797/1754 f 1797/1797/1754 1795/1795/1752 1812/1812/1769 f 1813/1813/1770 1814/1814/1771 1799/1799/1756 f 1799/1799/1756 1797/1797/1754 1813/1813/1770 f 1814/1814/1771 1815/1815/1772 1801/1801/1758 f 1801/1801/1758 1799/1799/1756 1814/1814/1771 f 1815/1815/1772 1816/1816/1773 1803/1803/1760 f 1803/1803/1760 1801/1801/1758 1815/1815/1772 f 1816/1816/1773 1805/1805/1762 1781/1781/1738 f 1781/1781/1738 1803/1803/1760 1816/1816/1773 f 1805/1805/1762 1817/1817/1774 1818/1818/1775 f 1818/1818/1775 1806/1806/1763 1805/1805/1762 f 1806/1806/1763 1818/1818/1775 1819/1819/1776 f 1819/1819/1776 1807/1807/1764 1806/1806/1763 f 1819/1819/1776 1820/1820/1777 1808/1808/1765 f 1808/1808/1765 1807/1807/1764 1819/1819/1776 f 1820/1820/1777 1821/1821/1778 1809/1809/1766 f 1809/1809/1766 1808/1808/1765 1820/1820/1777 f 1821/1821/1778 1822/1822/1779 1810/1810/1767 f 1810/1810/1767 1809/1809/1766 1821/1821/1778 f 1822/1822/1779 1823/1823/1780 1811/1811/1768 f 1811/1811/1768 1810/1810/1767 1822/1822/1779 f 1811/1811/1768 1823/1823/1780 1824/1824/1781 f 1824/1824/1781 1812/1812/1769 1811/1811/1768 f 1812/1812/1769 1824/1824/1781 1825/1825/1782 f 1825/1825/1782 1813/1813/1770 1812/1812/1769 f 1825/1825/1782 1826/1826/1783 1814/1814/1771 f 1814/1814/1771 1813/1813/1770 1825/1825/1782 f 1826/1826/1783 1827/1827/1784 1815/1815/1772 f 1815/1815/1772 1814/1814/1771 1826/1826/1783 f 1827/1827/1784 1828/1828/1785 1816/1816/1773 f 1816/1816/1773 1815/1815/1772 1827/1827/1784 f 1816/1816/1773 1828/1828/1785 1817/1817/1774 f 1817/1817/1774 1805/1805/1762 1816/1816/1773 f 1829/1829/1786 1830/1830/1787 1818/1818/1775 f 1818/1818/1775 1817/1817/1774 1829/1829/1786 f 1830/1830/1787 1831/1831/1788 1819/1819/1776 f 1819/1819/1776 1818/1818/1775 1830/1830/1787 f 1819/1819/1776 1831/1831/1788 1832/1832/1789 f 1832/1832/1789 1820/1820/1777 1819/1819/1776 f 1820/1820/1777 1832/1832/1789 1833/1833/1790 f 1833/1833/1790 1821/1821/1778 1820/1820/1777 f 1821/1821/1778 1833/1833/1790 1834/1834/1791 f 1834/1834/1791 1822/1822/1779 1821/1821/1778 f 1834/1834/1791 1835/1835/1792 1823/1823/1780 f 1823/1823/1780 1822/1822/1779 1834/1834/1791 f 1835/1835/1792 1836/1836/1793 1824/1824/1781 f 1824/1824/1781 1823/1823/1780 1835/1835/1792 f 1836/1836/1793 1837/1837/1794 1825/1825/1782 f 1825/1825/1782 1824/1824/1781 1836/1836/1793 f 1825/1825/1782 1837/1837/1794 1838/1838/1795 f 1838/1838/1795 1826/1826/1783 1825/1825/1782 f 1826/1826/1783 1838/1838/1795 1839/1839/1796 f 1839/1839/1796 1827/1827/1784 1826/1826/1783 f 1827/1827/1784 1839/1839/1796 1840/1840/1797 f 1840/1840/1797 1828/1828/1785 1827/1827/1784 f 1840/1840/1797 1829/1829/1786 1817/1817/1774 f 1817/1817/1774 1828/1828/1785 1840/1840/1797 f 1829/1829/1786 1841/1841/1798 1842/1842/1799 f 1842/1842/1799 1830/1830/1787 1829/1829/1786 f 1842/1842/1799 1843/1843/1800 1831/1831/1788 f 1831/1831/1788 1830/1830/1787 1842/1842/1799 f 1843/1843/1800 1844/1844/1801 1832/1832/1789 f 1832/1832/1789 1831/1831/1788 1843/1843/1800 f 1832/1832/1789 1844/1844/1801 1845/1845/1802 f 1845/1845/1802 1833/1833/1790 1832/1832/1789 f 1846/1846/1803 1834/1834/1791 1833/1833/1790 f 1833/1833/1790 1845/1845/1802 1846/1846/1803 f 1846/1846/1803 1847/1847/1804 1835/1835/1792 f 1835/1835/1792 1834/1834/1791 1846/1846/1803 f 1847/1847/1804 1848/1848/1805 1836/1836/1793 f 1836/1836/1793 1835/1835/1792 1847/1847/1804 f 1848/1848/1805 1849/1849/1806 1837/1837/1794 f 1837/1837/1794 1836/1836/1793 1848/1848/1805 f 1849/1849/1806 1850/1850/1807 1838/1838/1795 f 1838/1838/1795 1837/1837/1794 1849/1849/1806 f 1838/1838/1795 1850/1850/1807 1851/1851/1808 f 1851/1851/1808 1839/1839/1796 1838/1838/1795 f 1852/1852/1809 1840/1840/1797 1839/1839/1796 f 1839/1839/1796 1851/1851/1808 1852/1852/1809 f 1840/1840/1797 1852/1852/1809 1841/1841/1798 f 1841/1841/1798 1829/1829/1786 1840/1840/1797 f 1841/1841/1798 1853/1853/1810 1854/1854/1811 f 1854/1854/1811 1842/1842/1799 1841/1841/1798 f 1843/1843/1800 1842/1842/1799 1854/1854/1811 f 1854/1854/1811 1855/1855/1812 1843/1843/1800 f 1843/1843/1800 1855/1855/1812 1856/1856/1813 f 1856/1856/1813 1844/1844/1801 1843/1843/1800 f 1844/1844/1801 1856/1856/1813 1857/1857/1814 f 1857/1857/1814 1845/1845/1802 1844/1844/1801 f 1845/1845/1802 1857/1857/1814 1858/1858/1815 f 1858/1858/1815 1846/1846/1803 1845/1845/1802 f 1858/1858/1815 1859/1859/1816 1847/1847/1804 f 1847/1847/1804 1846/1846/1803 1858/1858/1815 f 1859/1859/1816 1860/1860/1817 1848/1848/1805 f 1848/1848/1805 1847/1847/1804 1859/1859/1816 f 1860/1860/1817 1861/1861/1818 1849/1849/1806 f 1849/1849/1806 1848/1848/1805 1860/1860/1817 f 1849/1849/1806 1861/1861/1818 1862/1862/1819 f 1862/1862/1819 1850/1850/1807 1849/1849/1806 f 1850/1850/1807 1862/1862/1819 1863/1863/1820 f 1863/1863/1820 1851/1851/1808 1850/1850/1807 f 1851/1851/1808 1863/1863/1820 1864/1864/1821 f 1864/1864/1821 1852/1852/1809 1851/1851/1808 f 1852/1852/1809 1864/1864/1821 1853/1853/1810 f 1853/1853/1810 1841/1841/1798 1852/1852/1809 f 1783/1783/1740 1865/1865/1822 1784/1784/1741 f 1786/1786/1743 1865/1865/1822 1783/1783/1740 f 1788/1788/1745 1865/1865/1822 1786/1786/1743 f 1790/1790/1747 1865/1865/1822 1788/1788/1745 f 1792/1792/1749 1865/1865/1822 1790/1790/1747 f 1794/1794/1751 1865/1865/1822 1792/1792/1749 f 1796/1796/1753 1865/1865/1822 1794/1794/1751 f 1798/1798/1755 1865/1865/1822 1796/1796/1753 f 1800/1800/1757 1865/1865/1822 1798/1798/1755 f 1802/1802/1759 1865/1865/1822 1800/1800/1757 f 1804/1804/1761 1865/1865/1822 1802/1802/1759 f 1784/1784/1741 1865/1865/1822 1804/1804/1761 f 1853/1853/1810 1866/1866/1823 1854/1854/1811 f 1854/1854/1811 1866/1866/1823 1855/1855/1812 f 1855/1855/1812 1866/1866/1823 1856/1856/1813 f 1856/1856/1813 1866/1866/1823 1857/1857/1814 f 1857/1857/1814 1866/1866/1823 1858/1858/1815 f 1858/1858/1815 1866/1866/1823 1859/1859/1816 f 1859/1859/1816 1866/1866/1823 1860/1860/1817 f 1860/1860/1817 1866/1866/1823 1861/1861/1818 f 1861/1861/1818 1866/1866/1823 1862/1862/1819 f 1862/1862/1819 1866/1866/1823 1863/1863/1820 f 1863/1863/1820 1866/1866/1823 1864/1864/1821 f 1864/1864/1821 1866/1866/1823 1853/1853/1810 f 1867/1867/1824 1868/1868/1825 1869/1869/1826 f 1869/1869/1826 1870/1870/1827 1867/1867/1824 f 1870/1870/1827 1869/1869/1826 1871/1871/1828 f 1871/1871/1828 1872/1872/1829 1870/1870/1827 f 1872/1872/1829 1871/1871/1828 1873/1873/1830 f 1873/1873/1830 1874/1874/1831 1872/1872/1829 f 1874/1874/1831 1873/1873/1830 1875/1875/1832 f 1875/1875/1832 1876/1876/1833 1874/1874/1831 f 1875/1875/1832 1877/1877/1834 1878/1878/1835 f 1878/1878/1835 1876/1876/1833 1875/1875/1832 f 1878/1878/1835 1877/1877/1834 1879/1879/1836 f 1879/1879/1836 1880/1880/1837 1878/1878/1835 f 1881/1881/1838 1882/1882/1839 1880/1880/1837 f 1880/1880/1837 1879/1879/1836 1881/1881/1838 f 1883/1883/1840 1882/1882/1839 1881/1881/1838 f 1881/1881/1838 1884/1884/1841 1883/1883/1840 f 1884/1884/1841 1885/1885/1842 1886/1886/1843 f 1886/1886/1843 1883/1883/1840 1884/1884/1841 f 1885/1885/1842 1887/1887/1844 1888/1888/1845 f 1888/1888/1845 1886/1886/1843 1885/1885/1842 f 1887/1887/1844 1889/1889/1846 1890/1890/1847 f 1890/1890/1847 1888/1888/1845 1887/1887/1844 f 1868/1868/1825 1867/1867/1824 1890/1890/1847 f 1890/1890/1847 1889/1889/1846 1868/1868/1825 f 1891/1891/1848 1892/1892/1785 1893/1893/1849 f 1894/1894/1850 1892/1892/1785 1891/1891/1848 f 1895/1895/1851 1892/1892/1785 1894/1894/1850 f 1896/1896/1852 1892/1892/1785 1895/1895/1851 f 1897/1897/1853 1892/1892/1785 1896/1896/1852 f 1898/1898/1854 1892/1892/1785 1897/1897/1853 f 1899/1899/1855 1892/1892/1785 1898/1898/1854 f 1900/1900/1856 1892/1892/1785 1899/1899/1855 f 1901/1901/1857 1892/1892/1785 1900/1900/1856 f 1902/1902/1858 1892/1892/1785 1901/1901/1857 f 1903/1903/1859 1892/1892/1785 1902/1902/1858 f 1893/1893/1849 1892/1892/1785 1903/1903/1859 f 1904/1904/1860 1905/1905/1861 1906/1906/1862 f 1906/1906/1862 1905/1905/1861 1907/1907/1863 f 1907/1907/1863 1905/1905/1861 1908/1908/1864 f 1908/1908/1864 1905/1905/1861 1909/1909/1865 f 1909/1909/1865 1905/1905/1861 1910/1910/1866 f 1910/1910/1866 1905/1905/1861 1911/1911/1867 f 1911/1911/1867 1905/1905/1861 1912/1912/1868 f 1912/1912/1868 1905/1905/1861 1913/1913/1869 f 1913/1913/1869 1905/1905/1861 1914/1914/1870 f 1914/1914/1870 1905/1905/1861 1915/1915/1871 f 1915/1915/1871 1905/1905/1861 1916/1916/1872 f 1916/1916/1872 1905/1905/1861 1904/1904/1860 f 1917/1917/1873 1918/1918/1874 1873/1873/1830 f 1873/1873/1830 1871/1871/1828 1917/1917/1873 f 1919/1919/1875 1917/1917/1873 1871/1871/1828 f 1871/1871/1828 1869/1869/1826 1919/1919/1875 f 1920/1920/1876 1919/1919/1875 1869/1869/1826 f 1869/1869/1826 1868/1868/1825 1920/1920/1876 f 1889/1889/1846 1921/1921/1877 1920/1920/1876 f 1920/1920/1876 1868/1868/1825 1889/1889/1846 f 1922/1922/1878 1921/1921/1877 1889/1889/1846 f 1889/1889/1846 1887/1887/1844 1922/1922/1878 f 1923/1923/1879 1922/1922/1878 1887/1887/1844 f 1887/1887/1844 1885/1885/1842 1923/1923/1879 f 1924/1924/1880 1923/1923/1879 1885/1885/1842 f 1885/1885/1842 1884/1884/1841 1924/1924/1880 f 1884/1884/1841 1881/1881/1838 1925/1925/1881 f 1925/1925/1881 1924/1924/1880 1884/1884/1841 f 1926/1926/1882 1925/1925/1881 1881/1881/1838 f 1881/1881/1838 1879/1879/1836 1926/1926/1882 f 1927/1927/1883 1926/1926/1882 1879/1879/1836 f 1879/1879/1836 1877/1877/1834 1927/1927/1883 f 1928/1928/1884 1927/1927/1883 1877/1877/1834 f 1877/1877/1834 1875/1875/1832 1928/1928/1884 f 1928/1928/1884 1875/1875/1832 1873/1873/1830 f 1873/1873/1830 1918/1918/1874 1928/1928/1884 f 1929/1929/1885 1930/1930/1886 1931/1931/1887 f 1931/1931/1887 1932/1932/1888 1929/1929/1885 f 1932/1932/1888 1931/1931/1887 1933/1933/1889 f 1933/1933/1889 1934/1934/1890 1932/1932/1888 f 1934/1934/1890 1933/1933/1889 1935/1935/1891 f 1935/1935/1891 1936/1936/1892 1934/1934/1890 f 1936/1936/1892 1935/1935/1891 1937/1937/1893 f 1937/1937/1893 1938/1938/1894 1936/1936/1892 f 1939/1939/1895 1940/1940/1896 1938/1938/1894 f 1938/1938/1894 1937/1937/1893 1939/1939/1895 f 1941/1941/1897 1942/1942/1898 1940/1940/1896 f 1940/1940/1896 1939/1939/1895 1941/1941/1897 f 1943/1943/1899 1944/1944/1900 1942/1942/1898 f 1942/1942/1898 1941/1941/1897 1943/1943/1899 f 1945/1945/1901 1946/1946/1902 1944/1944/1900 f 1944/1944/1900 1943/1943/1899 1945/1945/1901 f 1947/1947/1903 1948/1948/1904 1946/1946/1902 f 1946/1946/1902 1945/1945/1901 1947/1947/1903 f 1949/1949/1905 1950/1950/1906 1948/1948/1904 f 1948/1948/1904 1947/1947/1903 1949/1949/1905 f 1951/1951/1907 1952/1952/1908 1950/1950/1906 f 1950/1950/1906 1949/1949/1905 1951/1951/1907 f 1952/1952/1908 1951/1951/1907 1930/1930/1886 f 1930/1930/1886 1929/1929/1885 1952/1952/1908 f 1953/1953/1909 1954/1954/1910 1867/1867/1824 f 1867/1867/1824 1870/1870/1827 1953/1953/1909 f 1955/1955/1911 1953/1953/1909 1870/1870/1827 f 1870/1870/1827 1872/1872/1829 1955/1955/1911 f 1956/1956/1912 1955/1955/1911 1872/1872/1829 f 1872/1872/1829 1874/1874/1831 1956/1956/1912 f 1957/1957/1913 1956/1956/1912 1874/1874/1831 f 1874/1874/1831 1876/1876/1833 1957/1957/1913 f 1958/1958/1914 1957/1957/1913 1876/1876/1833 f 1876/1876/1833 1878/1878/1835 1958/1958/1914 f 1880/1880/1837 1959/1959/1915 1958/1958/1914 f 1958/1958/1914 1878/1878/1835 1880/1880/1837 f 1960/1960/1916 1959/1959/1915 1880/1880/1837 f 1880/1880/1837 1882/1882/1839 1960/1960/1916 f 1961/1961/1917 1960/1960/1916 1882/1882/1839 f 1882/1882/1839 1883/1883/1840 1961/1961/1917 f 1962/1962/1918 1961/1961/1917 1883/1883/1840 f 1883/1883/1840 1886/1886/1843 1962/1962/1918 f 1963/1963/1919 1962/1962/1918 1886/1886/1843 f 1886/1886/1843 1888/1888/1845 1963/1963/1919 f 1964/1964/1920 1963/1963/1919 1888/1888/1845 f 1888/1888/1845 1890/1890/1847 1964/1964/1920 f 1890/1890/1847 1867/1867/1824 1954/1954/1910 f 1954/1954/1910 1964/1964/1920 1890/1890/1847 f 1891/1891/1848 1893/1893/1849 1954/1954/1910 f 1954/1954/1910 1953/1953/1909 1891/1891/1848 f 1894/1894/1850 1891/1891/1848 1953/1953/1909 f 1953/1953/1909 1955/1955/1911 1894/1894/1850 f 1894/1894/1850 1955/1955/1911 1956/1956/1912 f 1956/1956/1912 1895/1895/1851 1894/1894/1850 f 1895/1895/1851 1956/1956/1912 1957/1957/1913 f 1957/1957/1913 1896/1896/1852 1895/1895/1851 f 1897/1897/1853 1896/1896/1852 1957/1957/1913 f 1957/1957/1913 1958/1958/1914 1897/1897/1853 f 1898/1898/1854 1897/1897/1853 1958/1958/1914 f 1958/1958/1914 1959/1959/1915 1898/1898/1854 f 1899/1899/1855 1898/1898/1854 1959/1959/1915 f 1959/1959/1915 1960/1960/1916 1899/1899/1855 f 1899/1899/1855 1960/1960/1916 1961/1961/1917 f 1961/1961/1917 1900/1900/1856 1899/1899/1855 f 1900/1900/1856 1961/1961/1917 1962/1962/1918 f 1962/1962/1918 1901/1901/1857 1900/1900/1856 f 1902/1902/1858 1901/1901/1857 1962/1962/1918 f 1962/1962/1918 1963/1963/1919 1902/1902/1858 f 1903/1903/1859 1902/1902/1858 1963/1963/1919 f 1963/1963/1919 1964/1964/1920 1903/1903/1859 f 1903/1903/1859 1964/1964/1920 1954/1954/1910 f 1954/1954/1910 1893/1893/1849 1903/1903/1859 f 1965/1965/1921 1966/1966/1922 1934/1934/1890 f 1934/1934/1890 1936/1936/1892 1965/1965/1921 f 1966/1966/1922 1967/1967/1923 1932/1932/1888 f 1932/1932/1888 1934/1934/1890 1966/1966/1922 f 1967/1967/1923 1968/1968/1924 1929/1929/1885 f 1929/1929/1885 1932/1932/1888 1967/1967/1923 f 1968/1968/1924 1969/1969/1925 1952/1952/1908 f 1952/1952/1908 1929/1929/1885 1968/1968/1924 f 1969/1969/1925 1970/1970/1926 1950/1950/1906 f 1950/1950/1906 1952/1952/1908 1969/1969/1925 f 1970/1970/1926 1971/1971/1927 1948/1948/1904 f 1948/1948/1904 1950/1950/1906 1970/1970/1926 f 1971/1971/1927 1972/1972/1928 1946/1946/1902 f 1946/1946/1902 1948/1948/1904 1971/1971/1927 f 1972/1972/1928 1973/1973/1929 1944/1944/1900 f 1944/1944/1900 1946/1946/1902 1972/1972/1928 f 1973/1973/1929 1974/1974/1930 1942/1942/1898 f 1942/1942/1898 1944/1944/1900 1973/1973/1929 f 1974/1974/1930 1975/1975/1931 1940/1940/1896 f 1940/1940/1896 1942/1942/1898 1974/1974/1930 f 1975/1975/1931 1976/1976/1932 1938/1938/1894 f 1938/1938/1894 1940/1940/1896 1975/1975/1931 f 1938/1938/1894 1976/1976/1932 1965/1965/1921 f 1965/1965/1921 1936/1936/1892 1938/1938/1894 f 1904/1904/1860 1906/1906/1862 1966/1966/1922 f 1966/1966/1922 1965/1965/1921 1904/1904/1860 f 1906/1906/1862 1907/1907/1863 1967/1967/1923 f 1967/1967/1923 1966/1966/1922 1906/1906/1862 f 1907/1907/1863 1908/1908/1864 1968/1968/1924 f 1968/1968/1924 1967/1967/1923 1907/1907/1863 f 1908/1908/1864 1909/1909/1865 1969/1969/1925 f 1969/1969/1925 1968/1968/1924 1908/1908/1864 f 1909/1909/1865 1910/1910/1866 1970/1970/1926 f 1970/1970/1926 1969/1969/1925 1909/1909/1865 f 1910/1910/1866 1911/1911/1867 1971/1971/1927 f 1971/1971/1927 1970/1970/1926 1910/1910/1866 f 1971/1971/1927 1911/1911/1867 1912/1912/1868 f 1912/1912/1868 1972/1972/1928 1971/1971/1927 f 1973/1973/1929 1972/1972/1928 1912/1912/1868 f 1912/1912/1868 1913/1913/1869 1973/1973/1929 f 1974/1974/1930 1973/1973/1929 1913/1913/1869 f 1913/1913/1869 1914/1914/1870 1974/1974/1930 f 1974/1974/1930 1914/1914/1870 1915/1915/1871 f 1915/1915/1871 1975/1975/1931 1974/1974/1930 f 1915/1915/1871 1916/1916/1872 1976/1976/1932 f 1976/1976/1932 1975/1975/1931 1915/1915/1871 f 1965/1965/1921 1976/1976/1932 1916/1916/1872 f 1916/1916/1872 1904/1904/1860 1965/1965/1921 f 1931/1931/1887 1930/1930/1886 1977/1977/1933 f 1977/1977/1933 1978/1978/1934 1931/1931/1887 f 1933/1933/1889 1931/1931/1887 1978/1978/1934 f 1978/1978/1934 1979/1979/1935 1933/1933/1889 f 1980/1980/1936 1935/1935/1891 1933/1933/1889 f 1933/1933/1889 1979/1979/1935 1980/1980/1936 f 1981/1981/1937 1937/1937/1893 1935/1935/1891 f 1935/1935/1891 1980/1980/1936 1981/1981/1937 f 1982/1982/1938 1939/1939/1895 1937/1937/1893 f 1937/1937/1893 1981/1981/1937 1982/1982/1938 f 1941/1941/1897 1939/1939/1895 1982/1982/1938 f 1982/1982/1938 1983/1983/1939 1941/1941/1897 f 1943/1943/1899 1941/1941/1897 1983/1983/1939 f 1983/1983/1939 1984/1984/1940 1943/1943/1899 f 1943/1943/1899 1984/1984/1940 1985/1985/1941 f 1985/1985/1941 1945/1945/1901 1943/1943/1899 f 1947/1947/1903 1945/1945/1901 1985/1985/1941 f 1985/1985/1941 1986/1986/1942 1947/1947/1903 f 1949/1949/1905 1947/1947/1903 1986/1986/1942 f 1986/1986/1942 1987/1987/1943 1949/1949/1905 f 1951/1951/1907 1949/1949/1905 1987/1987/1943 f 1987/1987/1943 1988/1988/1944 1951/1951/1907 f 1988/1988/1944 1977/1977/1933 1930/1930/1886 f 1930/1930/1886 1951/1951/1907 1988/1988/1944 f 1978/1978/1934 1977/1977/1933 1918/1918/1874 f 1918/1918/1874 1917/1917/1873 1978/1978/1934 f 1979/1979/1935 1978/1978/1934 1917/1917/1873 f 1917/1917/1873 1919/1919/1875 1979/1979/1935 f 1919/1919/1875 1920/1920/1876 1980/1980/1936 f 1980/1980/1936 1979/1979/1935 1919/1919/1875 f 1980/1980/1936 1920/1920/1876 1921/1921/1877 f 1921/1921/1877 1981/1981/1937 1980/1980/1936 f 1981/1981/1937 1921/1921/1877 1922/1922/1878 f 1922/1922/1878 1982/1982/1938 1981/1981/1937 f 1983/1983/1939 1982/1982/1938 1922/1922/1878 f 1922/1922/1878 1923/1923/1879 1983/1983/1939 f 1984/1984/1940 1983/1983/1939 1923/1923/1879 f 1923/1923/1879 1924/1924/1880 1984/1984/1940 f 1924/1924/1880 1925/1925/1881 1985/1985/1941 f 1985/1985/1941 1984/1984/1940 1924/1924/1880 f 1986/1986/1942 1985/1985/1941 1925/1925/1881 f 1925/1925/1881 1926/1926/1882 1986/1986/1942 f 1987/1987/1943 1986/1986/1942 1926/1926/1882 f 1926/1926/1882 1927/1927/1883 1987/1987/1943 f 1988/1988/1944 1987/1987/1943 1927/1927/1883 f 1927/1927/1883 1928/1928/1884 1988/1988/1944 f 1988/1988/1944 1928/1928/1884 1918/1918/1874 f 1918/1918/1874 1977/1977/1933 1988/1988/1944 v 35.0665 9.0264 70.5965 v 34.2738 8.3108 70.6491 v 35.1160 7.7854 71.2089 v 35.5450 8.1726 71.1805 v 33.9435 7.2942 70.6600 v 34.9373 7.2352 71.2148 v 34.1641 6.2485 70.6264 v 35.0566 6.6693 71.1967 v 34.8764 5.4544 70.5573 v 35.4421 6.2394 71.1593 v 35.8896 5.1243 70.4712 v 35.9904 6.0609 71.1126 v 36.9322 5.3468 70.3911 v 36.5547 6.1813 71.0693 v 37.7248 6.0623 70.3385 v 36.9837 6.5685 71.0408 v 38.0551 7.0789 70.3276 v 37.1624 7.1187 71.0349 v 37.8346 8.1246 70.3612 v 37.0431 7.6846 71.0531 v 37.1223 8.9188 70.4303 v 36.6576 8.1144 71.0905 v 36.1091 9.2488 70.5164 v 36.1092 8.2930 71.1371 v 34.7049 9.6047 69.6836 v 33.6692 8.6699 69.7522 v 33.2377 7.3416 69.7666 v 33.5258 5.9754 69.7227 v 34.4565 4.9377 69.6324 v 35.7803 4.5065 69.5198 v 37.1425 4.7972 69.4152 v 38.1782 5.7320 69.3465 v 38.6097 7.0603 69.3322 v 38.3216 8.4265 69.3761 v 37.3909 9.4642 69.4664 v 36.0671 9.8954 69.5789 v 34.5153 9.8197 68.5806 v 33.3943 8.8079 68.6549 v 32.9272 7.3700 68.6704 v 33.2391 5.8914 68.6229 v 34.2464 4.7682 68.5251 v 35.6793 4.3014 68.4033 v 37.1538 4.6161 68.2901 v 38.2747 5.6279 68.2157 v 38.7419 7.0658 68.2003 v 38.4300 8.5444 68.2477 v 37.4226 9.6676 68.3455 v 35.9897 10.1344 68.4673 v 34.5265 9.6386 67.4555 v 33.4909 8.7038 67.5242 v 33.0593 7.3755 67.5385 v 33.3475 6.0094 67.4946 v 34.2781 4.9717 67.4043 v 35.6019 4.5404 67.2917 v 36.9642 4.8311 67.1871 v 37.9998 5.7660 67.1184 v 38.4314 7.0943 67.1041 v 38.1432 8.4604 67.1480 v 37.2125 9.4981 67.2383 v 35.8887 9.9293 67.3508 v 34.7369 9.0891 66.4796 v 33.9442 8.3735 66.5321 v 33.6139 7.3569 66.5431 v 33.8345 6.3112 66.5095 v 34.5468 5.5171 66.4404 v 35.5600 5.1870 66.3542 v 36.6026 5.4095 66.2741 v 37.3952 6.1250 66.2216 v 37.7255 7.1416 66.2106 v 37.5050 8.1873 66.2442 v 36.7927 8.9815 66.3133 v 35.7795 9.3115 66.3995 v 35.1143 8.2545 65.8014 v 34.6854 7.8674 65.8298 v 34.5066 7.3172 65.8357 v 34.6260 6.7512 65.8176 v 35.0115 6.3214 65.7801 v 35.5598 6.1428 65.7335 v 36.1241 6.2633 65.6902 v 36.5530 6.6504 65.6617 v 36.7318 7.2006 65.6558 v 36.6124 7.7665 65.6740 v 36.2269 8.1964 65.7114 v 35.6786 8.3750 65.7580 v 36.0676 7.1736 71.3465 v 35.6015 7.2623 65.5242 v 34.0227 3.8484 70.0131 v 32.6427 2.0126 70.0956 v 34.0482 0.7322 70.9796 v 34.7950 1.7255 70.9349 v 32.0363 -0.5617 70.1050 v 33.7200 -0.6610 70.9846 v 32.3661 -3.1854 70.0386 v 33.8985 -2.0809 70.9487 v 33.5436 -5.1546 69.9144 v 34.5357 -3.1468 70.8814 v 35.2533 -5.9425 69.7655 v 35.4611 -3.5731 70.8009 v 37.0372 -5.3375 69.6319 v 36.4265 -3.2456 70.7286 v 38.4172 -3.5019 69.5493 v 37.1733 -2.2523 70.6839 v 39.0236 -0.9276 69.5400 v 37.5014 -0.8591 70.6789 v 38.6939 1.6961 69.6064 v 37.3231 0.5608 70.7148 v 37.5164 3.6655 69.7307 v 36.6858 1.6268 70.7820 v 35.8066 4.4532 69.8795 v 35.7605 2.0530 70.8626 v 33.4397 5.2793 68.5612 v 31.6366 2.8807 68.6690 v 30.8444 -0.4827 68.6812 v 31.2751 -3.9105 68.5945 v 32.8137 -6.4837 68.4321 v 35.0476 -7.5130 68.2376 v 37.3784 -6.7226 68.0630 v 39.1814 -4.3240 67.9552 v 39.9737 -0.9606 67.9430 v 39.5429 2.4672 68.0297 v 38.0044 5.0404 68.1921 v 35.7705 6.0697 68.3866 v 33.1574 5.7966 67.0819 v 31.2058 3.2005 67.1986 v 30.3482 -0.4403 67.2118 v 30.8146 -4.1503 67.1180 v 32.4798 -6.9357 66.9422 v 34.8978 -8.0498 66.7316 v 37.4205 -7.1940 66.5427 v 39.3722 -4.5982 66.4260 v 40.2297 -0.9573 66.4128 v 39.7634 2.7527 66.5067 v 38.0982 5.5380 66.6824 v 35.6802 6.6522 66.8930 v 33.3195 5.3022 67.0589 v 31.5164 2.9036 67.1667 v 30.7241 -0.4598 67.1789 v 31.1550 -3.8876 67.0922 v 32.6934 -6.4608 66.9298 v 34.9273 -7.4901 66.7353 v 37.2581 -6.6997 66.5607 v 39.0612 -4.3011 66.4529 v 39.8534 -0.9378 66.4407 v 39.4226 2.4901 66.5274 v 37.8841 5.0633 66.6898 v 35.6502 6.0926 66.8843 v 33.7814 3.8943 66.9983 v 32.4014 2.0585 67.0808 v 31.7950 -0.5158 67.0902 v 32.1247 -3.1395 67.0238 v 33.3022 -5.1087 66.8995 v 35.0120 -5.8966 66.7507 v 36.7959 -5.2915 66.6171 v 38.1759 -3.4559 66.5345 v 38.7822 -0.8817 66.5252 v 38.4525 1.7420 66.5916 v 37.2750 3.7114 66.7159 v 35.5652 4.4991 66.8647 v 33.7259 0.7936 66.9541 v 34.4728 1.7869 66.9094 v 33.3978 -0.5997 66.9592 v 33.5762 -2.0196 66.9232 v 34.2135 -3.0855 66.8560 v 35.1388 -3.5118 66.7754 v 36.1042 -3.1843 66.7031 v 36.8511 -2.1910 66.6584 v 37.1792 -0.7978 66.6534 v 37.0008 0.6222 66.6893 v 36.3635 1.6881 66.7566 v 35.4382 2.1143 66.8371 v 35.6391 -0.7653 71.1861 v 35.2885 -0.6986 66.8058 vn -0.2712 0.6332 0.7249 vn -0.5485 0.3828 0.7433 vn -0.2695 0.2092 0.9400 vn -0.1122 0.3511 0.9296 vn -0.6641 0.0272 0.7472 vn -0.3350 0.0075 0.9422 vn -0.5869 -0.3387 0.7354 vn -0.2913 -0.1999 0.9355 vn -0.3377 -0.6165 0.7112 vn -0.1500 -0.3575 0.9218 vn 0.0168 -0.7320 0.6811 vn 0.0510 -0.4229 0.9047 vn 0.3815 -0.6541 0.6531 vn 0.2578 -0.3788 0.8888 vn 0.6588 -0.4038 0.6347 vn 0.4151 -0.2369 0.8784 vn 0.7744 -0.0481 0.6309 vn 0.4806 -0.0352 0.8762 vn 0.6972 0.3177 0.6426 vn 0.4369 0.1722 0.8829 vn 0.4480 0.5955 0.6668 vn 0.2955 0.3298 0.8966 vn 0.0936 0.7110 0.6969 vn 0.0945 0.3952 0.9137 vn -0.3896 0.8213 0.4167 vn -0.7459 0.4997 0.4403 vn -0.8944 0.0427 0.4452 vn -0.7953 -0.4272 0.4301 vn -0.4751 -0.7842 0.3991 vn -0.0197 -0.9326 0.3604 vn 0.4490 -0.8326 0.3243 vn 0.8053 -0.5110 0.3007 vn 0.9537 -0.0540 0.2958 vn 0.8546 0.4160 0.3109 vn 0.5344 0.7730 0.3420 vn 0.0790 0.9213 0.3807 vn -0.4517 0.8908 0.0497 vn -0.8355 0.5444 0.0752 vn -0.9954 0.0521 0.0805 vn -0.8886 -0.4542 0.0642 vn -0.5437 -0.8387 0.0308 vn -0.0531 -0.9985 -0.0110 vn 0.4517 -0.8908 -0.0497 vn 0.8355 -0.5444 -0.0752 vn 0.9954 -0.0521 -0.0805 vn 0.8886 0.4541 -0.0642 vn 0.5437 0.8387 -0.0307 vn 0.0531 0.9985 0.0110 vn -0.4490 0.8326 -0.3244 vn -0.8053 0.5110 -0.3007 vn -0.9537 0.0540 -0.2958 vn -0.8546 -0.4160 -0.3109 vn -0.5344 -0.7730 -0.3420 vn -0.0790 -0.9213 -0.3807 vn 0.3896 -0.8213 -0.4167 vn 0.7459 -0.4997 -0.4403 vn 0.8944 -0.0427 -0.4452 vn 0.7953 0.4272 -0.4301 vn 0.4751 0.7842 -0.3991 vn 0.0197 0.9326 -0.3604 vn -0.3815 0.6542 -0.6531 vn -0.6588 0.4038 -0.6347 vn -0.7744 0.0482 -0.6309 vn -0.6972 -0.3177 -0.6426 vn -0.4480 -0.5955 -0.6668 vn -0.0936 -0.7110 -0.6969 vn 0.2712 -0.6332 -0.7250 vn 0.5485 -0.3829 -0.7433 vn 0.6641 -0.0272 -0.7472 vn 0.5869 0.3386 -0.7354 vn 0.3377 0.6165 -0.7112 vn -0.0168 0.7320 -0.6811 vn -0.2578 0.3788 -0.8888 vn -0.4151 0.2369 -0.8784 vn -0.4806 0.0352 -0.8762 vn -0.4369 -0.1722 -0.8829 vn -0.2956 -0.3298 -0.8966 vn -0.0945 -0.3952 -0.9137 vn 0.1123 -0.3511 -0.9296 vn 0.2695 -0.2092 -0.9400 vn 0.3350 -0.0075 -0.9422 vn 0.2913 0.1999 -0.9355 vn 0.1500 0.3575 -0.9218 vn -0.0510 0.4229 -0.9047 vn 0.0798 -0.0152 0.9967 vn -0.0798 0.0152 -0.9967 vn -0.3066 0.4790 0.8226 vn -0.5522 0.2696 0.7889 vn -0.2590 0.1314 0.9569 vn -0.1234 0.2356 0.9640 vn -0.6380 0.0255 0.7696 vn -0.3073 0.0059 0.9516 vn -0.5786 -0.2267 0.7835 vn -0.2726 -0.1241 0.9541 vn -0.3567 -0.4616 0.8122 vn -0.1488 -0.2422 0.9587 vn 0.0345 -0.5883 0.8079 vn 0.0609 -0.3046 0.9505 vn 0.4324 -0.5029 0.7484 vn 0.2746 -0.2644 0.9245 vn 0.6700 -0.2920 0.6825 vn 0.4076 -0.1597 0.8991 vn 0.7522 -0.0473 0.6572 vn 0.4547 -0.0340 0.8900 vn 0.6965 0.2042 0.6879 vn 0.4212 0.0958 0.9019 vn 0.4824 0.4377 0.7588 vn 0.3000 0.2135 0.9297 vn 0.0958 0.5635 0.8206 vn 0.0918 0.2755 0.9569 vn -0.4669 0.6976 0.5434 vn -0.7763 0.3777 0.5046 vn -0.8748 0.0413 0.4827 vn -0.8126 -0.3042 0.4971 vn -0.5390 -0.6558 0.5286 vn -0.0030 -0.8560 0.5170 vn 0.5458 -0.7126 0.4409 vn 0.8458 -0.3909 0.3630 vn 0.9403 -0.0537 0.3359 vn 0.8821 0.2909 0.3705 vn 0.6178 0.6408 0.4557 vn 0.0873 0.8399 0.5356 vn -0.5272 0.7083 -0.4694 vn -0.7887 0.3684 -0.4922 vn -0.8617 0.0514 -0.5047 vn -0.8227 -0.2718 -0.4993 vn -0.5989 -0.6379 -0.4841 vn -0.0856 -0.8611 -0.5012 vn 0.4442 -0.6925 -0.5685 vn 0.6994 -0.3515 -0.6223 vn 0.7704 -0.0340 -0.6367 vn 0.7335 0.2888 -0.6153 vn 0.5158 0.6537 -0.5537 vn 0.0069 0.8760 -0.4822 vn -0.0821 0.0180 -0.9965 vn -0.0837 0.0169 -0.9963 vn -0.0843 0.0154 -0.9963 vn -0.0839 0.0139 -0.9964 vn -0.0824 0.0126 -0.9965 vn -0.0800 0.0119 -0.9967 vn -0.0775 0.0123 -0.9969 vn -0.0758 0.0135 -0.9970 vn -0.0753 0.0149 -0.9971 vn -0.0757 0.0164 -0.9970 vn -0.0772 0.0178 -0.9969 vn -0.0796 0.0185 -0.9967 vn -0.0805 0.0161 -0.9966 vn -0.0811 0.0157 -0.9966 vn -0.0813 0.0153 -0.9966 vn -0.0811 0.0148 -0.9966 vn -0.0806 0.0143 -0.9966 vn -0.0799 0.0141 -0.9967 vn -0.0791 0.0143 -0.9968 vn -0.0785 0.0146 -0.9968 vn -0.0783 0.0151 -0.9968 vn -0.0785 0.0156 -0.9968 vn -0.0790 0.0160 -0.9967 vn -0.0797 0.0162 -0.9967 vn -0.0803 0.0154 -0.9967 vn -0.0801 0.0156 -0.9967 vn -0.0804 0.0152 -0.9966 vn -0.0803 0.0150 -0.9967 vn -0.0801 0.0148 -0.9967 vn -0.0798 0.0147 -0.9967 vn -0.0795 0.0148 -0.9967 vn -0.0793 0.0150 -0.9967 vn -0.0792 0.0152 -0.9967 vn -0.0792 0.0154 -0.9967 vn -0.0794 0.0155 -0.9967 vn -0.0798 0.0156 -0.9967 vt 0.9594 0.4912 0.0000 vt 0.9580 0.4973 0.0000 vt 0.9735 0.4975 0.0000 vt 0.9743 0.4942 0.0000 vt 0.9590 0.5035 0.0000 vt 0.9741 0.5009 0.0000 vt 0.9621 0.5082 0.0000 vt 0.9758 0.5034 0.0000 vt 0.9666 0.5102 0.0000 vt 0.9782 0.5045 0.0000 vt 0.9712 0.5088 0.0000 vt 0.9807 0.5037 0.0000 vt 0.9747 0.5044 0.0000 vt 0.9826 0.5014 0.0000 vt 0.9762 0.4983 0.0000 vt 0.9834 0.4981 0.0000 vt 0.9752 0.4921 0.0000 vt 0.9828 0.4947 0.0000 vt 0.9720 0.4874 0.0000 vt 0.9811 0.4922 0.0000 vt 0.9675 0.4854 0.0000 vt 0.9787 0.4911 0.0000 vt 0.9629 0.4868 0.0000 vt 0.9762 0.4919 0.0000 vt 0.9401 0.4891 0.0000 vt 0.9382 0.4971 0.0000 vt 0.9395 0.5052 0.0000 vt 0.9436 0.5114 0.0000 vt 0.9495 0.5139 0.0000 vt 0.9555 0.5121 0.0000 vt 0.9600 0.5065 0.0000 vt 0.9619 0.4985 0.0000 vt 0.9606 0.4903 0.0000 vt 0.9565 0.4842 0.0000 vt 0.9506 0.4817 0.0000 vt 0.9446 0.4835 0.0000 vt 0.9192 0.4884 0.0000 vt 0.9171 0.4970 0.0000 vt 0.9185 0.5059 0.0000 vt 0.9230 0.5125 0.0000 vt 0.9293 0.5153 0.0000 vt 0.9359 0.5133 0.0000 vt 0.9408 0.5072 0.0000 vt 0.9428 0.4986 0.0000 vt 0.9414 0.4897 0.0000 vt 0.9370 0.4830 0.0000 vt 0.9306 0.4803 0.0000 vt 0.9241 0.4823 0.0000 vt 0.8999 0.4891 0.0000 vt 0.8980 0.4971 0.0000 vt 0.8993 0.5052 0.0000 vt 0.9035 0.5114 0.0000 vt 0.9093 0.5139 0.0000 vt 0.9153 0.5121 0.0000 vt 0.9199 0.5065 0.0000 vt 0.9218 0.4985 0.0000 vt 0.9205 0.4903 0.0000 vt 0.9163 0.4842 0.0000 vt 0.9105 0.4816 0.0000 vt 0.9045 0.4834 0.0000 vt 0.8852 0.4911 0.0000 vt 0.8838 0.4972 0.0000 vt 0.8848 0.5035 0.0000 vt 0.8880 0.5082 0.0000 vt 0.8924 0.5101 0.0000 vt 0.8970 0.5087 0.0000 vt 0.9005 0.5044 0.0000 vt 0.9020 0.4983 0.0000 vt 0.9010 0.4921 0.0000 vt 0.8978 0.4873 0.0000 vt 0.8933 0.4854 0.0000 vt 0.8887 0.4868 0.0000 vt 0.8774 0.4942 0.0000 vt 0.8766 0.4975 0.0000 vt 0.8771 0.5008 0.0000 vt 0.8788 0.5034 0.0000 vt 0.8813 0.5044 0.0000 vt 0.8838 0.5037 0.0000 vt 0.8856 0.5014 0.0000 vt 0.8864 0.4981 0.0000 vt 0.8859 0.4947 0.0000 vt 0.8842 0.4921 0.0000 vt 0.8818 0.4911 0.0000 vt 0.8793 0.4918 0.0000 vt 0.9824 0.4978 0.0000 vt 0.8775 0.4978 0.0000 vt 0.9566 0.5209 0.0000 vt 0.9554 0.5346 0.0000 vt 0.9814 0.5371 0.0000 vt 0.9821 0.5297 0.0000 vt 0.9588 0.5497 0.0000 vt 0.9833 0.5453 0.0000 vt 0.9659 0.5622 0.0000 vt 0.9871 0.5521 0.0000 vt 0.9747 0.5688 0.0000 vt 0.9919 0.5556 0.0000 vt 0.9830 0.5677 0.0000 vt 0.9964 0.5550 0.0000 vt 0.9885 0.5591 0.0000 vt 0.9993 0.5504 0.0000 vt 0.9897 0.5454 0.0000 vt 1.0000 0.5430 0.0000 vt 0.9863 0.5303 0.0000 vt 0.9982 0.5348 0.0000 vt 0.9792 0.5178 0.0000 vt 0.9943 0.5280 0.0000 vt 0.9703 0.5112 0.0000 vt 0.9895 0.5245 0.0000 vt 0.9621 0.5124 0.0000 vt 0.9851 0.5251 0.0000 vt 0.9245 0.5151 0.0000 vt 0.9229 0.5329 0.0000 vt 0.9274 0.5527 0.0000 vt 0.9366 0.5690 0.0000 vt 0.9482 0.5776 0.0000 vt 0.9590 0.5761 0.0000 vt 0.9661 0.5650 0.0000 vt 0.9677 0.5471 0.0000 vt 0.9633 0.5273 0.0000 vt 0.9540 0.5110 0.0000 vt 0.9425 0.5024 0.0000 vt 0.9316 0.5039 0.0000 vt 0.8957 0.5130 0.0000 vt 0.8940 0.5323 0.0000 vt 0.8988 0.5537 0.0000 vt 0.9088 0.5714 0.0000 vt 0.9214 0.5807 0.0000 vt 0.9331 0.5791 0.0000 vt 0.9408 0.5670 0.0000 vt 0.9425 0.5477 0.0000 vt 0.9377 0.5263 0.0000 vt 0.9277 0.5086 0.0000 vt 0.9152 0.4993 0.0000 vt 0.9035 0.5009 0.0000 vt 0.8974 0.5151 0.0000 vt 0.8958 0.5329 0.0000 vt 0.9003 0.5527 0.0000 vt 0.9095 0.5690 0.0000 vt 0.9211 0.5776 0.0000 vt 0.9319 0.5761 0.0000 vt 0.9391 0.5649 0.0000 vt 0.9406 0.5471 0.0000 vt 0.9362 0.5273 0.0000 vt 0.9270 0.5110 0.0000 vt 0.9154 0.5024 0.0000 vt 0.9046 0.5039 0.0000 vt 0.9023 0.5209 0.0000 vt 0.9011 0.5346 0.0000 vt 0.9045 0.5497 0.0000 vt 0.9115 0.5622 0.0000 vt 0.9204 0.5688 0.0000 vt 0.9287 0.5676 0.0000 vt 0.9341 0.5591 0.0000 vt 0.9353 0.5454 0.0000 vt 0.9320 0.5303 0.0000 vt 0.9249 0.5178 0.0000 vt 0.9160 0.5112 0.0000 vt 0.9077 0.5124 0.0000 vt 0.9089 0.5371 0.0000 vt 0.9096 0.5297 0.0000 vt 0.9107 0.5452 0.0000 vt 0.9146 0.5520 0.0000 vt 0.9194 0.5556 0.0000 vt 0.9238 0.5550 0.0000 vt 0.9268 0.5503 0.0000 vt 0.9275 0.5429 0.0000 vt 0.9256 0.5348 0.0000 vt 0.9218 0.5280 0.0000 vt 0.9170 0.5244 0.0000 vt 0.9125 0.5250 0.0000 vt 0.9971 0.5400 0.0000 vt 0.9182 0.5400 0.0000 g Object028 f 1989/1989/1945 1990/1990/1946 1991/1991/1947 f 1991/1991/1947 1992/1992/1948 1989/1989/1945 f 1993/1993/1949 1994/1994/1950 1991/1991/1947 f 1991/1991/1947 1990/1990/1946 1993/1993/1949 f 1995/1995/1951 1996/1996/1952 1994/1994/1950 f 1994/1994/1950 1993/1993/1949 1995/1995/1951 f 1997/1997/1953 1998/1998/1954 1996/1996/1952 f 1996/1996/1952 1995/1995/1951 1997/1997/1953 f 1998/1998/1954 1997/1997/1953 1999/1999/1955 f 1999/1999/1955 2000/2000/1956 1998/1998/1954 f 2000/2000/1956 1999/1999/1955 2001/2001/1957 f 2001/2001/1957 2002/2002/1958 2000/2000/1956 f 2001/2001/1957 2003/2003/1959 2004/2004/1960 f 2004/2004/1960 2002/2002/1958 2001/2001/1957 f 2005/2005/1961 2006/2006/1962 2004/2004/1960 f 2004/2004/1960 2003/2003/1959 2005/2005/1961 f 2007/2007/1963 2008/2008/1964 2006/2006/1962 f 2006/2006/1962 2005/2005/1961 2007/2007/1963 f 2009/2009/1965 2010/2010/1966 2008/2008/1964 f 2008/2008/1964 2007/2007/1963 2009/2009/1965 f 2010/2010/1966 2009/2009/1965 2011/2011/1967 f 2011/2011/1967 2012/2012/1968 2010/2010/1966 f 2012/2012/1968 2011/2011/1967 1989/1989/1945 f 1989/1989/1945 1992/1992/1948 2012/2012/1968 f 2013/2013/1969 2014/2014/1970 1990/1990/1946 f 1990/1990/1946 1989/1989/1945 2013/2013/1969 f 2014/2014/1970 2015/2015/1971 1993/1993/1949 f 1993/1993/1949 1990/1990/1946 2014/2014/1970 f 2015/2015/1971 2016/2016/1972 1995/1995/1951 f 1995/1995/1951 1993/1993/1949 2015/2015/1971 f 2016/2016/1972 2017/2017/1973 1997/1997/1953 f 1997/1997/1953 1995/1995/1951 2016/2016/1972 f 2017/2017/1973 2018/2018/1974 1999/1999/1955 f 1999/1999/1955 1997/1997/1953 2017/2017/1973 f 2018/2018/1974 2019/2019/1975 2001/2001/1957 f 2001/2001/1957 1999/1999/1955 2018/2018/1974 f 2019/2019/1975 2020/2020/1976 2003/2003/1959 f 2003/2003/1959 2001/2001/1957 2019/2019/1975 f 2020/2020/1976 2021/2021/1977 2005/2005/1961 f 2005/2005/1961 2003/2003/1959 2020/2020/1976 f 2021/2021/1977 2022/2022/1978 2007/2007/1963 f 2007/2007/1963 2005/2005/1961 2021/2021/1977 f 2022/2022/1978 2023/2023/1979 2009/2009/1965 f 2009/2009/1965 2007/2007/1963 2022/2022/1978 f 2023/2023/1979 2024/2024/1980 2011/2011/1967 f 2011/2011/1967 2009/2009/1965 2023/2023/1979 f 2024/2024/1980 2013/2013/1969 1989/1989/1945 f 1989/1989/1945 2011/2011/1967 2024/2024/1980 f 2025/2025/1981 2026/2026/1982 2014/2014/1970 f 2014/2014/1970 2013/2013/1969 2025/2025/1981 f 2026/2026/1982 2027/2027/1983 2015/2015/1971 f 2015/2015/1971 2014/2014/1970 2026/2026/1982 f 2027/2027/1983 2028/2028/1984 2016/2016/1972 f 2016/2016/1972 2015/2015/1971 2027/2027/1983 f 2028/2028/1984 2029/2029/1985 2017/2017/1973 f 2017/2017/1973 2016/2016/1972 2028/2028/1984 f 2029/2029/1985 2030/2030/1986 2018/2018/1974 f 2018/2018/1974 2017/2017/1973 2029/2029/1985 f 2030/2030/1986 2031/2031/1987 2019/2019/1975 f 2019/2019/1975 2018/2018/1974 2030/2030/1986 f 2031/2031/1987 2032/2032/1988 2020/2020/1976 f 2020/2020/1976 2019/2019/1975 2031/2031/1987 f 2032/2032/1988 2033/2033/1989 2021/2021/1977 f 2021/2021/1977 2020/2020/1976 2032/2032/1988 f 2033/2033/1989 2034/2034/1990 2022/2022/1978 f 2022/2022/1978 2021/2021/1977 2033/2033/1989 f 2034/2034/1990 2035/2035/1991 2023/2023/1979 f 2023/2023/1979 2022/2022/1978 2034/2034/1990 f 2035/2035/1991 2036/2036/1992 2024/2024/1980 f 2024/2024/1980 2023/2023/1979 2035/2035/1991 f 2036/2036/1992 2025/2025/1981 2013/2013/1969 f 2013/2013/1969 2024/2024/1980 2036/2036/1992 f 2037/2037/1993 2038/2038/1994 2026/2026/1982 f 2026/2026/1982 2025/2025/1981 2037/2037/1993 f 2038/2038/1994 2039/2039/1995 2027/2027/1983 f 2027/2027/1983 2026/2026/1982 2038/2038/1994 f 2039/2039/1995 2040/2040/1996 2028/2028/1984 f 2028/2028/1984 2027/2027/1983 2039/2039/1995 f 2040/2040/1996 2041/2041/1997 2029/2029/1985 f 2029/2029/1985 2028/2028/1984 2040/2040/1996 f 2041/2041/1997 2042/2042/1998 2030/2030/1986 f 2030/2030/1986 2029/2029/1985 2041/2041/1997 f 2042/2042/1998 2043/2043/1999 2031/2031/1987 f 2031/2031/1987 2030/2030/1986 2042/2042/1998 f 2043/2043/1999 2044/2044/2000 2032/2032/1988 f 2032/2032/1988 2031/2031/1987 2043/2043/1999 f 2044/2044/2000 2045/2045/2001 2033/2033/1989 f 2033/2033/1989 2032/2032/1988 2044/2044/2000 f 2045/2045/2001 2046/2046/2002 2034/2034/1990 f 2034/2034/1990 2033/2033/1989 2045/2045/2001 f 2046/2046/2002 2047/2047/2003 2035/2035/1991 f 2035/2035/1991 2034/2034/1990 2046/2046/2002 f 2047/2047/2003 2048/2048/2004 2036/2036/1992 f 2036/2036/1992 2035/2035/1991 2047/2047/2003 f 2048/2048/2004 2037/2037/1993 2025/2025/1981 f 2025/2025/1981 2036/2036/1992 2048/2048/2004 f 2049/2049/2005 2050/2050/2006 2038/2038/1994 f 2038/2038/1994 2037/2037/1993 2049/2049/2005 f 2050/2050/2006 2051/2051/2007 2039/2039/1995 f 2039/2039/1995 2038/2038/1994 2050/2050/2006 f 2051/2051/2007 2052/2052/2008 2040/2040/1996 f 2040/2040/1996 2039/2039/1995 2051/2051/2007 f 2052/2052/2008 2053/2053/2009 2041/2041/1997 f 2041/2041/1997 2040/2040/1996 2052/2052/2008 f 2053/2053/2009 2054/2054/2010 2042/2042/1998 f 2042/2042/1998 2041/2041/1997 2053/2053/2009 f 2054/2054/2010 2055/2055/2011 2043/2043/1999 f 2043/2043/1999 2042/2042/1998 2054/2054/2010 f 2055/2055/2011 2056/2056/2012 2044/2044/2000 f 2044/2044/2000 2043/2043/1999 2055/2055/2011 f 2056/2056/2012 2057/2057/2013 2045/2045/2001 f 2045/2045/2001 2044/2044/2000 2056/2056/2012 f 2057/2057/2013 2058/2058/2014 2046/2046/2002 f 2046/2046/2002 2045/2045/2001 2057/2057/2013 f 2058/2058/2014 2059/2059/2015 2047/2047/2003 f 2047/2047/2003 2046/2046/2002 2058/2058/2014 f 2059/2059/2015 2060/2060/2016 2048/2048/2004 f 2048/2048/2004 2047/2047/2003 2059/2059/2015 f 2060/2060/2016 2049/2049/2005 2037/2037/1993 f 2037/2037/1993 2048/2048/2004 2060/2060/2016 f 2061/2061/2017 2062/2062/2018 2050/2050/2006 f 2050/2050/2006 2049/2049/2005 2061/2061/2017 f 2062/2062/2018 2063/2063/2019 2051/2051/2007 f 2051/2051/2007 2050/2050/2006 2062/2062/2018 f 2063/2063/2019 2064/2064/2020 2052/2052/2008 f 2052/2052/2008 2051/2051/2007 2063/2063/2019 f 2064/2064/2020 2065/2065/2021 2053/2053/2009 f 2053/2053/2009 2052/2052/2008 2064/2064/2020 f 2065/2065/2021 2066/2066/2022 2054/2054/2010 f 2054/2054/2010 2053/2053/2009 2065/2065/2021 f 2066/2066/2022 2067/2067/2023 2055/2055/2011 f 2055/2055/2011 2054/2054/2010 2066/2066/2022 f 2067/2067/2023 2068/2068/2024 2056/2056/2012 f 2056/2056/2012 2055/2055/2011 2067/2067/2023 f 2068/2068/2024 2069/2069/2025 2057/2057/2013 f 2057/2057/2013 2056/2056/2012 2068/2068/2024 f 2069/2069/2025 2070/2070/2026 2058/2058/2014 f 2058/2058/2014 2057/2057/2013 2069/2069/2025 f 2070/2070/2026 2071/2071/2027 2059/2059/2015 f 2059/2059/2015 2058/2058/2014 2070/2070/2026 f 2071/2071/2027 2072/2072/2028 2060/2060/2016 f 2060/2060/2016 2059/2059/2015 2071/2071/2027 f 2072/2072/2028 2061/2061/2017 2049/2049/2005 f 2049/2049/2005 2060/2060/2016 2072/2072/2028 f 1991/1991/1947 2073/2073/2029 1992/1992/1948 f 1994/1994/1950 2073/2073/2029 1991/1991/1947 f 1996/1996/1952 2073/2073/2029 1994/1994/1950 f 1998/1998/1954 2073/2073/2029 1996/1996/1952 f 2000/2000/1956 2073/2073/2029 1998/1998/1954 f 2002/2002/1958 2073/2073/2029 2000/2000/1956 f 2004/2004/1960 2073/2073/2029 2002/2002/1958 f 2006/2006/1962 2073/2073/2029 2004/2004/1960 f 2008/2008/1964 2073/2073/2029 2006/2006/1962 f 2010/2010/1966 2073/2073/2029 2008/2008/1964 f 2012/2012/1968 2073/2073/2029 2010/2010/1966 f 1992/1992/1948 2073/2073/2029 2012/2012/1968 f 2061/2061/2017 2074/2074/2030 2062/2062/2018 f 2062/2062/2018 2074/2074/2030 2063/2063/2019 f 2063/2063/2019 2074/2074/2030 2064/2064/2020 f 2064/2064/2020 2074/2074/2030 2065/2065/2021 f 2065/2065/2021 2074/2074/2030 2066/2066/2022 f 2066/2066/2022 2074/2074/2030 2067/2067/2023 f 2067/2067/2023 2074/2074/2030 2068/2068/2024 f 2068/2068/2024 2074/2074/2030 2069/2069/2025 f 2069/2069/2025 2074/2074/2030 2070/2070/2026 f 2070/2070/2026 2074/2074/2030 2071/2071/2027 f 2071/2071/2027 2074/2074/2030 2072/2072/2028 f 2072/2072/2028 2074/2074/2030 2061/2061/2017 f 2075/2075/2031 2076/2076/2032 2077/2077/2033 f 2077/2077/2033 2078/2078/2034 2075/2075/2031 f 2076/2076/2032 2079/2079/2035 2080/2080/2036 f 2080/2080/2036 2077/2077/2033 2076/2076/2032 f 2079/2079/2035 2081/2081/2037 2082/2082/2038 f 2082/2082/2038 2080/2080/2036 2079/2079/2035 f 2081/2081/2037 2083/2083/2039 2084/2084/2040 f 2084/2084/2040 2082/2082/2038 2081/2081/2037 f 2083/2083/2039 2085/2085/2041 2086/2086/2042 f 2086/2086/2042 2084/2084/2040 2083/2083/2039 f 2085/2085/2041 2087/2087/2043 2088/2088/2044 f 2088/2088/2044 2086/2086/2042 2085/2085/2041 f 2087/2087/2043 2089/2089/2045 2090/2090/2046 f 2090/2090/2046 2088/2088/2044 2087/2087/2043 f 2089/2089/2045 2091/2091/2047 2092/2092/2048 f 2092/2092/2048 2090/2090/2046 2089/2089/2045 f 2091/2091/2047 2093/2093/2049 2094/2094/2050 f 2094/2094/2050 2092/2092/2048 2091/2091/2047 f 2093/2093/2049 2095/2095/2051 2096/2096/2052 f 2096/2096/2052 2094/2094/2050 2093/2093/2049 f 2095/2095/2051 2097/2097/2053 2098/2098/2054 f 2098/2098/2054 2096/2096/2052 2095/2095/2051 f 2098/2098/2054 2097/2097/2053 2075/2075/2031 f 2075/2075/2031 2078/2078/2034 2098/2098/2054 f 2099/2099/2055 2100/2100/2056 2076/2076/2032 f 2076/2076/2032 2075/2075/2031 2099/2099/2055 f 2100/2100/2056 2101/2101/2057 2079/2079/2035 f 2079/2079/2035 2076/2076/2032 2100/2100/2056 f 2101/2101/2057 2102/2102/2058 2081/2081/2037 f 2081/2081/2037 2079/2079/2035 2101/2101/2057 f 2102/2102/2058 2103/2103/2059 2083/2083/2039 f 2083/2083/2039 2081/2081/2037 2102/2102/2058 f 2103/2103/2059 2104/2104/2060 2085/2085/2041 f 2085/2085/2041 2083/2083/2039 2103/2103/2059 f 2104/2104/2060 2105/2105/2061 2087/2087/2043 f 2087/2087/2043 2085/2085/2041 2104/2104/2060 f 2105/2105/2061 2106/2106/2062 2089/2089/2045 f 2089/2089/2045 2087/2087/2043 2105/2105/2061 f 2106/2106/2062 2107/2107/2063 2091/2091/2047 f 2091/2091/2047 2089/2089/2045 2106/2106/2062 f 2107/2107/2063 2108/2108/2064 2093/2093/2049 f 2093/2093/2049 2091/2091/2047 2107/2107/2063 f 2108/2108/2064 2109/2109/2065 2095/2095/2051 f 2095/2095/2051 2093/2093/2049 2108/2108/2064 f 2109/2109/2065 2110/2110/2066 2097/2097/2053 f 2097/2097/2053 2095/2095/2051 2109/2109/2065 f 2097/2097/2053 2110/2110/2066 2099/2099/2055 f 2099/2099/2055 2075/2075/2031 2097/2097/2053 f 2111/2111/2067 2112/2112/2068 2100/2100/2056 f 2100/2100/2056 2099/2099/2055 2111/2111/2067 f 2112/2112/2068 2113/2113/2069 2101/2101/2057 f 2101/2101/2057 2100/2100/2056 2112/2112/2068 f 2113/2113/2069 2114/2114/2070 2102/2102/2058 f 2102/2102/2058 2101/2101/2057 2113/2113/2069 f 2114/2114/2070 2115/2115/2071 2103/2103/2059 f 2103/2103/2059 2102/2102/2058 2114/2114/2070 f 2115/2115/2071 2116/2116/2072 2104/2104/2060 f 2104/2104/2060 2103/2103/2059 2115/2115/2071 f 2116/2116/2072 2117/2117/2073 2105/2105/2061 f 2105/2105/2061 2104/2104/2060 2116/2116/2072 f 2117/2117/2073 2118/2118/2074 2106/2106/2062 f 2106/2106/2062 2105/2105/2061 2117/2117/2073 f 2118/2118/2074 2119/2119/2075 2107/2107/2063 f 2107/2107/2063 2106/2106/2062 2118/2118/2074 f 2119/2119/2075 2120/2120/2076 2108/2108/2064 f 2108/2108/2064 2107/2107/2063 2119/2119/2075 f 2120/2120/2076 2121/2121/2077 2109/2109/2065 f 2109/2109/2065 2108/2108/2064 2120/2120/2076 f 2121/2121/2077 2122/2122/2078 2110/2110/2066 f 2110/2110/2066 2109/2109/2065 2121/2121/2077 f 2110/2110/2066 2122/2122/2078 2111/2111/2067 f 2111/2111/2067 2099/2099/2055 2110/2110/2066 f 2123/2123/2079 2124/2124/2080 2112/2112/2068 f 2112/2112/2068 2111/2111/2067 2123/2123/2079 f 2124/2124/2080 2125/2125/2081 2113/2113/2069 f 2113/2113/2069 2112/2112/2068 2124/2124/2080 f 2125/2125/2081 2126/2126/2082 2114/2114/2070 f 2114/2114/2070 2113/2113/2069 2125/2125/2081 f 2126/2126/2082 2127/2127/2083 2115/2115/2071 f 2115/2115/2071 2114/2114/2070 2126/2126/2082 f 2127/2127/2083 2128/2128/2084 2116/2116/2072 f 2116/2116/2072 2115/2115/2071 2127/2127/2083 f 2128/2128/2084 2129/2129/2085 2117/2117/2073 f 2117/2117/2073 2116/2116/2072 2128/2128/2084 f 2129/2129/2085 2130/2130/2086 2118/2118/2074 f 2118/2118/2074 2117/2117/2073 2129/2129/2085 f 2130/2130/2086 2131/2131/2087 2119/2119/2075 f 2119/2119/2075 2118/2118/2074 2130/2130/2086 f 2131/2131/2087 2132/2132/2088 2120/2120/2076 f 2120/2120/2076 2119/2119/2075 2131/2131/2087 f 2132/2132/2088 2133/2133/2089 2121/2121/2077 f 2121/2121/2077 2120/2120/2076 2132/2132/2088 f 2133/2133/2089 2134/2134/2090 2122/2122/2078 f 2122/2122/2078 2121/2121/2077 2133/2133/2089 f 2122/2122/2078 2134/2134/2090 2123/2123/2079 f 2123/2123/2079 2111/2111/2067 2122/2122/2078 f 2135/2135/2091 2136/2136/2092 2124/2124/2080 f 2124/2124/2080 2123/2123/2079 2135/2135/2091 f 2136/2136/2092 2137/2137/2093 2125/2125/2081 f 2125/2125/2081 2124/2124/2080 2136/2136/2092 f 2137/2137/2093 2138/2138/2094 2126/2126/2082 f 2126/2126/2082 2125/2125/2081 2137/2137/2093 f 2139/2139/2095 2127/2127/2083 2126/2126/2082 f 2126/2126/2082 2138/2138/2094 2139/2139/2095 f 2127/2127/2083 2139/2139/2095 2140/2140/2096 f 2140/2140/2096 2128/2128/2084 2127/2127/2083 f 2140/2140/2096 2141/2141/2097 2129/2129/2085 f 2129/2129/2085 2128/2128/2084 2140/2140/2096 f 2129/2129/2085 2141/2141/2097 2142/2142/2098 f 2142/2142/2098 2130/2130/2086 2129/2129/2085 f 2142/2142/2098 2143/2143/2099 2131/2131/2087 f 2131/2131/2087 2130/2130/2086 2142/2142/2098 f 2143/2143/2099 2144/2144/2100 2132/2132/2088 f 2132/2132/2088 2131/2131/2087 2143/2143/2099 f 2144/2144/2100 2145/2145/2101 2133/2133/2089 f 2133/2133/2089 2132/2132/2088 2144/2144/2100 f 2133/2133/2089 2145/2145/2101 2146/2146/2102 f 2146/2146/2102 2134/2134/2090 2133/2133/2089 f 2123/2123/2079 2134/2134/2090 2146/2146/2102 f 2146/2146/2102 2135/2135/2091 2123/2123/2079 f 2147/2147/2103 2136/2136/2092 2135/2135/2091 f 2135/2135/2091 2148/2148/2104 2147/2147/2103 f 2136/2136/2092 2147/2147/2103 2149/2149/2105 f 2149/2149/2105 2137/2137/2093 2136/2136/2092 f 2137/2137/2093 2149/2149/2105 2150/2150/2106 f 2150/2150/2106 2138/2138/2094 2137/2137/2093 f 2151/2151/2107 2139/2139/2095 2138/2138/2094 f 2138/2138/2094 2150/2150/2106 2151/2151/2107 f 2151/2151/2107 2152/2152/2108 2140/2140/2096 f 2140/2140/2096 2139/2139/2095 2151/2151/2107 f 2152/2152/2108 2153/2153/2109 2141/2141/2097 f 2141/2141/2097 2140/2140/2096 2152/2152/2108 f 2153/2153/2109 2154/2154/2110 2142/2142/2098 f 2142/2142/2098 2141/2141/2097 2153/2153/2109 f 2154/2154/2110 2155/2155/2111 2143/2143/2099 f 2143/2143/2099 2142/2142/2098 2154/2154/2110 f 2155/2155/2111 2156/2156/2112 2144/2144/2100 f 2144/2144/2100 2143/2143/2099 2155/2155/2111 f 2156/2156/2112 2157/2157/2113 2145/2145/2101 f 2145/2145/2101 2144/2144/2100 2156/2156/2112 f 2157/2157/2113 2158/2158/2114 2146/2146/2102 f 2146/2146/2102 2145/2145/2101 2157/2157/2113 f 2148/2148/2104 2135/2135/2091 2146/2146/2102 f 2146/2146/2102 2158/2158/2114 2148/2148/2104 f 2077/2077/2033 2159/2159/2029 2078/2078/2034 f 2080/2080/2036 2159/2159/2029 2077/2077/2033 f 2082/2082/2038 2159/2159/2029 2080/2080/2036 f 2084/2084/2040 2159/2159/2029 2082/2082/2038 f 2086/2086/2042 2159/2159/2029 2084/2084/2040 f 2088/2088/2044 2159/2159/2029 2086/2086/2042 f 2090/2090/2046 2159/2159/2029 2088/2088/2044 f 2092/2092/2048 2159/2159/2029 2090/2090/2046 f 2094/2094/2050 2159/2159/2029 2092/2092/2048 f 2096/2096/2052 2159/2159/2029 2094/2094/2050 f 2098/2098/2054 2159/2159/2029 2096/2096/2052 f 2078/2078/2034 2159/2159/2029 2098/2098/2054 f 2148/2148/2104 2160/2160/2030 2147/2147/2103 f 2147/2147/2103 2160/2160/2030 2149/2149/2105 f 2149/2149/2105 2160/2160/2030 2150/2150/2106 f 2150/2150/2106 2160/2160/2030 2151/2151/2107 f 2151/2151/2107 2160/2160/2030 2152/2152/2108 f 2152/2152/2108 2160/2160/2030 2153/2153/2109 f 2153/2153/2109 2160/2160/2030 2154/2154/2110 f 2154/2154/2110 2160/2160/2030 2155/2155/2111 f 2155/2155/2111 2160/2160/2030 2156/2156/2112 f 2156/2156/2112 2160/2160/2030 2157/2157/2113 f 2157/2157/2113 2160/2160/2030 2158/2158/2114 f 2158/2158/2114 2160/2160/2030 2148/2148/2104 v -13.1576 42.9425 90.8965 v -13.9710 43.4483 92.9103 v -15.4616 41.7523 92.1676 v -15.0214 41.4785 91.0778 v -13.4882 42.3220 88.7802 v -15.2003 41.1428 89.9325 v -14.8742 41.7532 87.1285 v -15.9504 40.8349 89.0386 v -17.0708 40.6374 88.6356 v -16.9443 41.3883 86.3840 v -19.1438 41.3252 86.7461 v -18.2611 40.6033 88.8317 v -20.8833 41.5808 88.1178 v -19.2025 40.7416 89.5741 v -19.6428 41.0153 90.6638 v -21.6967 42.0866 90.1316 v -19.4637 41.3511 91.8091 v -21.3661 42.7070 92.2478 v -18.7137 41.6590 92.7031 v -19.9801 43.2759 93.8995 v -17.5933 41.8565 93.1060 v -17.9100 43.6408 94.6440 v -15.7105 43.7039 94.2820 v -16.4030 41.8906 92.9100 v -11.9910 44.9707 90.4797 v -13.0538 45.6316 93.1109 v -12.4230 44.1601 87.7147 v -14.2340 43.4168 85.5566 v -16.9386 42.9401 84.5840 v -19.8124 42.8577 85.0570 v -22.0852 43.1916 86.8492 v -23.1479 43.8525 89.4804 v -22.7160 44.6631 92.2454 v -20.9050 45.4064 94.4035 v -18.2003 45.8831 95.3762 v -15.3265 45.9656 94.9031 v -11.6992 47.2546 89.8911 v -12.8496 47.9699 92.7389 v -12.1668 46.3772 86.8982 v -14.1270 45.5727 84.5624 v -17.0545 45.0567 83.5095 v -20.1651 44.9674 84.0215 v -22.6251 45.3289 85.9615 v -23.7755 46.0442 88.8093 v -23.3080 46.9217 91.8023 v -21.3478 47.7261 94.1379 v -18.4202 48.2422 95.1909 v -15.3096 48.3314 94.6788 v -13.3895 50.1072 91.8512 v -12.3268 49.4463 89.2200 v -12.7587 48.6357 86.4550 v -14.5697 47.8924 84.2969 v -17.2744 47.4157 83.3242 v -20.1482 47.3333 83.7973 v -22.4209 47.6672 85.5895 v -23.4837 48.3280 88.2207 v -23.0518 49.1387 90.9857 v -21.2408 49.8820 93.1438 v -18.5361 50.3587 94.1164 v -15.6623 50.4411 93.6434 v -13.7780 51.2122 88.5688 v -14.5914 51.7180 90.5826 v -14.1086 50.5917 86.4526 v -15.4946 50.0229 84.8009 v -17.5647 49.6580 84.0564 v -19.7642 49.5949 84.4184 v -21.5037 49.8505 85.7901 v -22.3171 50.3563 87.8039 v -21.9865 50.9767 89.9202 v -20.6005 51.5456 91.5719 v -18.5304 51.9105 92.3164 v -16.3309 51.9736 91.9543 v -15.8320 52.2835 88.0366 v -16.2722 52.5572 89.1264 v -16.0109 51.9477 86.8913 v -16.7610 51.6398 85.9973 v -17.8814 51.4423 85.5944 v -19.0717 51.4082 85.7904 v -20.0131 51.5465 86.5328 v -20.4533 51.8202 87.6226 v -20.2744 52.1560 88.7679 v -19.5243 52.4639 89.6618 v -18.4039 52.6614 90.0648 v -17.2136 52.6955 89.8687 v -17.2987 40.8018 90.9961 v -18.1760 52.4970 87.7043 v -17.0362 49.7647 84.4982 v -15.2637 47.9591 84.2606 v -15.2319 47.8474 80.8479 v -17.5911 50.2507 81.1642 v -14.4855 45.5730 84.6592 v -14.1961 44.6713 81.3784 v -14.9101 43.2456 85.5873 v -14.7612 41.5735 82.6138 v -16.7759 39.3839 84.2229 v -16.4237 41.6007 86.7961 v -18.6208 41.0789 87.9618 v -19.7003 38.6894 85.7744 v -22.7509 39.6759 86.8527 v -20.9126 41.8201 88.7719 v -22.6851 43.6256 89.0095 v -25.1101 42.0793 87.1691 v -23.4632 46.0118 88.6109 v -26.1460 45.2553 86.6385 v -25.5808 48.3532 85.4032 v -23.0387 48.3391 87.6828 v -21.5250 49.9841 86.4740 v -23.5661 50.5427 83.7941 v -20.6417 51.2373 82.2426 v -19.3280 50.5059 85.3084 v -17.3114 46.7206 84.4551 v -18.2937 47.7213 84.5868 v -19.3680 45.5197 85.7711 v -16.8801 45.3981 84.6760 v -17.1154 44.1082 85.1904 v -17.9543 43.1965 85.8604 v -19.1720 42.9073 86.5064 v -20.4422 43.3181 86.9555 v -21.4246 44.3188 87.0872 v -21.8559 45.6413 86.8662 v -21.6205 46.9312 86.3519 v -20.7816 47.8429 85.6819 v -19.5639 48.1321 85.0358 v -27.2828 41.0899 65.8375 v -26.5724 40.3663 65.7422 v -28.0595 39.4980 66.6938 v -26.2606 39.4101 65.9020 v -26.4307 38.4774 66.2739 v -27.0373 37.8182 66.7584 v -27.9178 37.6090 67.2255 v -28.8362 37.9061 67.5502 v -29.5466 38.6296 67.6453 v -29.8585 39.5859 67.4856 v -29.6883 40.5186 67.1136 v -29.0817 41.1778 66.6293 v -28.2012 41.3869 66.1622 v -15.5279 41.1813 81.1894 v -14.9738 44.2188 79.9781 v -15.9894 47.3330 79.4578 v -18.3027 49.6895 79.7679 v -21.2939 50.6569 80.8254 v -24.1613 49.9759 82.3467 v -26.1368 47.8290 83.9245 v -26.6910 44.7914 85.1357 v -25.6753 41.6772 85.6560 v -23.3620 39.3207 85.3458 v -20.3709 38.3533 84.2884 v -17.5034 39.0344 82.7670 v -23.1357 39.4697 65.2809 v -23.5744 37.0653 66.2397 v -24.8824 37.0468 65.0189 v -24.5140 39.0659 64.2136 v -25.1892 41.1360 63.8679 v -23.9397 41.9348 64.8691 v -26.7269 42.7025 64.0740 v -25.7709 43.8001 65.1146 v -28.7152 43.3455 64.7769 v -28.1385 44.5659 65.9516 v -30.6213 42.8929 65.7883 v -30.4083 44.0268 67.1558 v -31.9720 42.3274 68.4047 v -31.9345 41.4657 66.8370 v -32.3028 39.4465 67.6420 v -32.4107 39.9230 69.3635 v -31.6277 37.3764 67.9880 v -31.6067 37.4578 69.7753 v -30.0900 35.8100 67.7818 v -29.7756 35.5925 69.5298 v -27.4079 34.8268 68.6928 v -28.1017 35.1669 67.0789 v -26.1955 35.6196 66.0676 v -25.1381 35.3659 67.4885 v -17.3820 49.0559 84.8795 v -15.9258 47.5725 84.6843 v -15.2865 45.6121 85.0117 v -15.6353 43.7001 85.7742 v -16.8788 42.3486 86.7674 v -18.6838 41.9199 87.7250 v -20.5668 42.5289 88.3906 v -22.0229 44.0123 88.5859 v -22.6623 45.9726 88.2584 v -22.3134 47.8847 87.4959 v -21.0699 49.2361 86.5027 v -19.2649 49.6648 85.5451 v -26.1102 40.5982 64.4572 v -27.2080 41.7165 64.6044 v -25.6282 39.1204 64.7042 v -25.8912 37.6788 65.2789 v -26.8286 36.6600 66.0277 v -28.1894 36.3369 66.7497 v -29.6089 36.7959 67.2515 v -30.7067 37.9142 67.3986 v -31.1887 39.3921 67.1517 v -30.9257 40.8336 66.5769 v -29.9882 41.8524 65.8282 v -28.6274 42.1756 65.1062 v -22.3127 39.9486 66.7630 v -22.7629 37.4804 67.7473 v -23.1380 42.4792 66.3403 v -25.0177 44.3941 66.5923 v -27.4483 45.1801 67.4516 v -29.7783 44.6267 68.6878 v -31.3836 42.8822 69.9697 v -31.8339 40.4139 70.9541 v -31.0086 37.8833 71.3767 v -29.1288 35.9685 71.1248 v -26.6982 35.1824 70.2656 v -24.3682 35.7358 69.0293 vn 0.7658 -0.5920 0.2510 vn 0.6294 -0.5072 0.5887 vn 0.3943 -0.7871 0.4744 vn 0.4717 -0.8352 0.2829 vn 0.7104 -0.6961 -0.1039 vn 0.4402 -0.8942 0.0817 vn 0.4779 -0.7915 -0.3809 vn 0.3084 -0.9483 -0.0754 vn 0.1116 -0.9829 -0.1462 vn 0.1308 -0.8527 -0.5058 vn -0.2381 -0.8633 -0.4451 vn -0.0975 -0.9889 -0.1117 vn -0.5298 -0.8204 -0.2150 vn -0.2629 -0.9646 0.0187 vn -0.3403 -0.9165 0.2102 vn -0.6662 -0.7356 0.1227 vn -0.3088 -0.8576 0.4114 vn -0.6108 -0.6315 0.4776 vn -0.1771 -0.8035 0.5684 vn -0.3783 -0.5361 0.7546 vn 0.0198 -0.7688 0.6392 vn -0.0312 -0.4749 0.8795 vn 0.3377 -0.4644 0.8187 vn 0.2289 -0.7628 0.6048 vn 0.9468 -0.2648 0.1829 vn 0.7715 -0.1558 0.6168 vn 0.8756 -0.3985 -0.2731 vn 0.5769 -0.5211 -0.6290 vn 0.1308 -0.5997 -0.7895 vn -0.3431 -0.6133 -0.7115 vn -0.7180 -0.5582 -0.4159 vn -0.8932 -0.4492 0.0181 vn -0.8220 -0.3155 0.4741 vn -0.5233 -0.1929 0.8300 vn -0.0773 -0.1143 0.9904 vn 0.3967 -0.1007 0.9124 vn 0.9911 0.0993 0.0888 vn 0.8023 0.2167 0.5562 vn 0.9143 -0.0447 -0.4025 vn 0.5926 -0.1767 -0.7859 vn 0.1121 -0.2614 -0.9587 vn -0.3985 -0.2761 -0.8746 vn -0.8023 -0.2167 -0.5562 vn -0.9911 -0.0993 -0.0888 vn -0.9143 0.0447 0.4025 vn -0.5926 0.1767 0.7859 vn -0.1121 0.2614 0.9587 vn 0.3985 0.2761 0.8746 vn 0.7180 0.5582 0.4159 vn 0.8932 0.4492 -0.0181 vn 0.8220 0.3155 -0.4741 vn 0.5233 0.1929 -0.8300 vn 0.0773 0.1143 -0.9904 vn -0.3967 0.1007 -0.9124 vn -0.7715 0.1558 -0.6168 vn -0.9468 0.2648 -0.1829 vn -0.8756 0.3985 0.2731 vn -0.5769 0.5211 0.6290 vn -0.1308 0.5997 0.7895 vn 0.3431 0.6133 0.7115 vn 0.6662 0.7356 -0.1227 vn 0.5298 0.8204 0.2150 vn 0.6108 0.6315 -0.4776 vn 0.3783 0.5361 -0.7546 vn 0.0312 0.4749 -0.8795 vn -0.3377 0.4644 -0.8187 vn -0.6294 0.5072 -0.5887 vn -0.7658 0.5920 -0.2510 vn -0.7104 0.6961 0.1039 vn -0.4779 0.7915 0.3809 vn -0.1308 0.8527 0.5058 vn 0.2381 0.8633 0.4451 vn 0.3403 0.9165 -0.2101 vn 0.2629 0.9646 -0.0187 vn 0.3088 0.8576 -0.4114 vn 0.1770 0.8035 -0.5684 vn -0.0198 0.7688 -0.6392 vn -0.2289 0.7628 -0.6048 vn -0.3943 0.7871 -0.4744 vn -0.4717 0.8352 -0.2829 vn -0.4402 0.8942 -0.0817 vn -0.3084 0.9483 0.0754 vn -0.1116 0.9829 0.1462 vn 0.0975 0.9889 0.1117 vn 0.0720 -0.9601 0.2702 vn -0.0720 0.9601 -0.2702 vn 0.5524 0.6877 0.4712 vn 0.7579 0.4783 0.4436 vn 0.8201 0.4875 -0.2996 vn 0.4663 0.8479 -0.2522 vn 0.8482 0.2015 0.4899 vn 0.9754 0.0112 -0.2200 vn 0.7990 -0.0684 0.5975 vn 0.8907 -0.4533 -0.0348 vn 0.5886 -0.7816 0.2065 vn 0.6234 -0.2592 0.7377 vn 0.3686 -0.3197 0.8729 vn 0.1500 -0.8858 0.4392 vn -0.3074 -0.7379 0.6009 vn 0.1028 -0.2337 0.9669 vn -0.1028 -0.0244 0.9944 vn -0.6612 -0.3775 0.6483 vn -0.1930 0.2524 0.9482 vn -0.8166 0.0988 0.5687 vn -0.7318 0.5634 0.3835 vn -0.1438 0.5223 0.8405 vn 0.0318 0.7131 0.7004 vn -0.4297 0.8917 0.1422 vn 0.0089 0.9959 -0.0905 vn 0.2866 0.7736 0.5651 vn 0.0971 0.0971 0.9905 vn 0.2281 -0.0363 0.9730 vn 0.0396 0.2735 0.9611 vn 0.0709 0.4455 0.8925 vn 0.1828 0.5671 0.8031 vn 0.3452 0.6056 0.7170 vn 0.5146 0.5509 0.6571 vn 0.6456 0.4174 0.6395 vn 0.7031 0.2410 0.6690 vn 0.6717 0.0690 0.7376 vn 0.5598 -0.0525 0.8269 vn 0.3975 -0.0911 0.9131 vn -0.5194 -0.5651 -0.6411 vn -0.6577 -0.4241 -0.6225 vn -0.7184 -0.2379 -0.6536 vn -0.6853 -0.0562 -0.7261 vn -0.5672 0.0722 -0.8204 vn -0.3957 0.1129 -0.9114 vn -0.2168 0.0550 -0.9747 vn -0.0784 -0.0859 -0.9932 vn -0.0177 -0.2721 -0.9621 vn -0.0508 -0.4538 -0.8897 vn -0.1689 -0.5822 -0.7953 vn -0.3405 -0.6229 -0.7043 vn 0.7950 -0.5383 -0.2797 vn 0.8812 -0.0657 -0.4682 vn 0.7232 0.4190 -0.5491 vn 0.3632 0.7857 -0.5009 vn -0.1023 0.9362 -0.3363 vn -0.5485 0.8302 -0.0996 vn -0.8559 0.4961 0.1459 vn -0.9421 0.0234 0.3344 vn -0.7841 -0.4612 0.4154 vn -0.4241 -0.8279 0.3671 vn 0.0414 -0.9784 0.2026 vn 0.4876 -0.8724 -0.0342 vn 0.7777 -0.1156 -0.6179 vn 0.6942 -0.5730 -0.4355 vn 0.1556 -0.5258 -0.8362 vn 0.2058 -0.2508 -0.9459 vn 0.1138 0.0312 -0.9930 vn 0.6247 0.3534 -0.6963 vn -0.0956 0.2444 -0.9649 vn 0.2763 0.7083 -0.6496 vn -0.3664 0.3320 -0.8692 vn -0.1741 0.8540 -0.4904 vn -0.6260 0.2704 -0.7315 vn -0.6059 0.7514 -0.2612 vn -0.9034 0.4281 -0.0237 vn -0.8048 0.0760 -0.5887 vn -0.8549 -0.1990 -0.4791 vn -0.9869 -0.0294 0.1587 vn -0.7630 -0.4809 -0.4319 vn -0.8339 -0.4983 0.2371 vn -0.5536 -0.6942 -0.4600 vn -0.4856 -0.8532 0.1904 vn -0.0351 -0.9989 0.0312 vn -0.2828 -0.7818 -0.5557 vn -0.0232 -0.7201 -0.6934 vn 0.3967 -0.8963 -0.1980 vn 0.2781 0.0491 0.9593 vn 0.1813 0.1477 0.9723 vn 0.1388 0.2779 0.9505 vn 0.1620 0.4050 0.8998 vn 0.2446 0.4948 0.8338 vn 0.3646 0.5233 0.7702 vn 0.4897 0.4829 0.7259 vn 0.5865 0.3842 0.7130 vn 0.6290 0.2540 0.7348 vn 0.6058 0.1270 0.7855 vn 0.5232 0.0371 0.8514 vn 0.4032 0.0086 0.9151 vn -0.5969 -0.3901 -0.7011 vn -0.4943 -0.4946 -0.7149 vn -0.6420 -0.2520 -0.7241 vn -0.6173 -0.1173 -0.7779 vn -0.5297 -0.0221 -0.8479 vn -0.4025 0.0082 -0.9154 vn -0.2698 -0.0347 -0.9623 vn -0.1673 -0.1393 -0.9760 vn -0.1222 -0.2774 -0.9530 vn -0.1468 -0.4121 -0.8992 vn -0.2344 -0.5073 -0.8293 vn -0.3616 -0.5376 -0.7618 vn 0.3632 0.7856 -0.5009 vt 0.0150 0.2135 0.0000 vt 0.0180 0.2008 0.0000 vt 0.0016 0.2071 0.0000 vt 0.0000 0.2140 0.0000 vt 0.0171 0.2265 0.0000 vt 0.0011 0.2211 0.0000 vt 0.0237 0.2364 0.0000 vt 0.0047 0.2264 0.0000 vt 0.0097 0.2286 0.0000 vt 0.0330 0.2404 0.0000 vt 0.0426 0.2375 0.0000 vt 0.0149 0.2270 0.0000 vt 0.0499 0.2285 0.0000 vt 0.0189 0.2221 0.0000 vt 0.0205 0.2153 0.0000 vt 0.0529 0.2158 0.0000 vt 0.0194 0.2082 0.0000 vt 0.0508 0.2027 0.0000 vt 0.0158 0.2029 0.0000 vt 0.0443 0.1929 0.0000 vt 0.0108 0.2007 0.0000 vt 0.0349 0.1889 0.0000 vt 0.0253 0.1918 0.0000 vt 0.0056 0.2023 0.0000 vt 0.0447 0.2132 0.0000 vt 0.0486 0.1966 0.0000 vt 0.0474 0.2302 0.0000 vt 0.0560 0.2431 0.0000 vt 0.0682 0.2483 0.0000 vt 0.0808 0.2446 0.0000 vt 0.0903 0.2328 0.0000 vt 0.0942 0.2161 0.0000 vt 0.0915 0.1991 0.0000 vt 0.0829 0.1863 0.0000 vt 0.0707 0.1810 0.0000 vt 0.0581 0.1848 0.0000 vt 0.0845 0.2131 0.0000 vt 0.0888 0.1951 0.0000 vt 0.0875 0.2315 0.0000 vt 0.0968 0.2454 0.0000 vt 0.1100 0.2511 0.0000 vt 0.1236 0.2470 0.0000 vt 0.1339 0.2343 0.0000 vt 0.1381 0.2163 0.0000 vt 0.1352 0.1979 0.0000 vt 0.1259 0.1839 0.0000 vt 0.1127 0.1782 0.0000 vt 0.0991 0.1823 0.0000 vt 0.1324 0.1966 0.0000 vt 0.1284 0.2132 0.0000 vt 0.1311 0.2302 0.0000 vt 0.1398 0.2431 0.0000 vt 0.1520 0.2484 0.0000 vt 0.1645 0.2446 0.0000 vt 0.1740 0.2328 0.0000 vt 0.1779 0.2162 0.0000 vt 0.1752 0.1992 0.0000 vt 0.1666 0.1863 0.0000 vt 0.1544 0.1810 0.0000 vt 0.1419 0.1848 0.0000 vt 0.1697 0.2136 0.0000 vt 0.1727 0.2009 0.0000 vt 0.1718 0.2266 0.0000 vt 0.1784 0.2365 0.0000 vt 0.1877 0.2405 0.0000 vt 0.1973 0.2376 0.0000 vt 0.2046 0.2286 0.0000 vt 0.2076 0.2159 0.0000 vt 0.2056 0.2028 0.0000 vt 0.1990 0.1930 0.0000 vt 0.1896 0.1890 0.0000 vt 0.1800 0.1918 0.0000 vt 0.2021 0.2141 0.0000 vt 0.2038 0.2072 0.0000 vt 0.2033 0.2212 0.0000 vt 0.2068 0.2265 0.0000 vt 0.2119 0.2287 0.0000 vt 0.2171 0.2271 0.0000 vt 0.2210 0.2222 0.0000 vt 0.2227 0.2153 0.0000 vt 0.2215 0.2083 0.0000 vt 0.2180 0.2030 0.0000 vt 0.2129 0.2008 0.0000 vt 0.2077 0.2023 0.0000 vt 0.0019 0.2146 0.0000 vt 0.2207 0.2147 0.0000 vt 0.1843 0.2380 0.0000 vt 0.1450 0.2429 0.0000 vt 0.1601 0.2628 0.0000 vt 0.2125 0.2562 0.0000 vt 0.0983 0.2447 0.0000 vt 0.0980 0.2652 0.0000 vt 0.0568 0.2429 0.0000 vt 0.0427 0.2627 0.0000 vt 0.0092 0.2561 0.0000 vt 0.0316 0.2379 0.0000 vt 0.0294 0.2311 0.0000 vt 0.0062 0.2471 0.0000 vt 0.0348 0.2380 0.0000 vt 0.0508 0.2244 0.0000 vt 0.0901 0.2194 0.0000 vt 0.0871 0.2315 0.0000 vt 0.1368 0.2176 0.0000 vt 0.1492 0.2291 0.0000 vt 0.2045 0.2315 0.0000 vt 0.1783 0.2194 0.0000 vt 0.2036 0.2244 0.0000 vt 0.2381 0.2381 0.0000 vt 0.2410 0.2472 0.0000 vt 0.2057 0.2312 0.0000 vt 0.1348 0.2429 0.0000 vt 0.1565 0.2402 0.0000 vt 0.1196 0.2364 0.0000 vt 0.1089 0.2439 0.0000 vt 0.0859 0.2429 0.0000 vt 0.0719 0.2402 0.0000 vt 0.0707 0.2364 0.0000 vt 0.0826 0.2326 0.0000 vt 0.1043 0.2299 0.0000 vt 0.1302 0.2289 0.0000 vt 0.1532 0.2299 0.0000 vt 0.1672 0.2327 0.0000 vt 0.1684 0.2364 0.0000 vt 0.1902 0.3550 0.0000 vt 0.1744 0.3570 0.0000 vt 0.1634 0.3522 0.0000 vt 0.1557 0.3577 0.0000 vt 0.1391 0.3569 0.0000 vt 0.1289 0.3549 0.0000 vt 0.1281 0.3522 0.0000 vt 0.1366 0.3495 0.0000 vt 0.1524 0.3475 0.0000 vt 0.1711 0.3468 0.0000 vt 0.1877 0.3475 0.0000 vt 0.1979 0.3495 0.0000 vt 0.1987 0.3523 0.0000 vt 0.0477 0.2712 0.0000 vt 0.1018 0.2736 0.0000 vt 0.1627 0.2713 0.0000 vt 0.2141 0.2648 0.0000 vt 0.2420 0.2560 0.0000 vt 0.2392 0.2471 0.0000 vt 0.2062 0.2406 0.0000 vt 0.1520 0.2382 0.0000 vt 0.0911 0.2406 0.0000 vt 0.0398 0.2470 0.0000 vt 0.0119 0.2559 0.0000 vt 0.0147 0.2647 0.0000 vt 0.1421 0.3624 0.0000 vt 0.0992 0.3605 0.0000 vt 0.1125 0.3671 0.0000 vt 0.1485 0.3687 0.0000 vt 0.1890 0.3671 0.0000 vt 0.1903 0.3606 0.0000 vt 0.2231 0.3628 0.0000 vt 0.2309 0.3555 0.0000 vt 0.2417 0.3569 0.0000 vt 0.2531 0.3485 0.0000 vt 0.2398 0.3510 0.0000 vt 0.2508 0.3415 0.0000 vt 0.2247 0.3363 0.0000 vt 0.2179 0.3467 0.0000 vt 0.1818 0.3451 0.0000 vt 0.1818 0.3344 0.0000 vt 0.1414 0.3467 0.0000 vt 0.1336 0.3363 0.0000 vt 0.1072 0.3510 0.0000 vt 0.0930 0.3414 0.0000 vt 0.0709 0.3484 0.0000 vt 0.0887 0.3569 0.0000 vt 0.0906 0.3627 0.0000 vt 0.0731 0.3554 0.0000 vt 0.1724 0.2368 0.0000 vt 0.1401 0.2408 0.0000 vt 0.1018 0.2423 0.0000 vt 0.0677 0.2408 0.0000 vt 0.0469 0.2367 0.0000 vt 0.0451 0.2311 0.0000 vt 0.0627 0.2256 0.0000 vt 0.0950 0.2215 0.0000 vt 0.1334 0.2200 0.0000 vt 0.1675 0.2215 0.0000 vt 0.1882 0.2256 0.0000 vt 0.1900 0.2312 0.0000 vt 0.1822 0.3642 0.0000 vt 0.2065 0.3611 0.0000 vt 0.1532 0.3653 0.0000 vt 0.1275 0.3642 0.0000 vt 0.1119 0.3611 0.0000 vt 0.1105 0.3569 0.0000 vt 0.1238 0.3527 0.0000 vt 0.1482 0.3496 0.0000 vt 0.1771 0.3485 0.0000 vt 0.2028 0.3496 0.0000 vt 0.2184 0.3527 0.0000 vt 0.2198 0.3569 0.0000 vt 0.1380 0.3535 0.0000 vt 0.0940 0.3515 0.0000 vt 0.1875 0.3516 0.0000 vt 0.2292 0.3463 0.0000 vt 0.2519 0.3391 0.0000 vt 0.2496 0.3319 0.0000 vt 0.2229 0.3267 0.0000 vt 0.1788 0.3247 0.0000 vt 0.1293 0.3266 0.0000 vt 0.0876 0.3319 0.0000 vt 0.0649 0.3391 0.0000 vt 0.0672 0.3463 0.0000 g Object005 f 2161/2161/2115 2162/2162/2116 2163/2163/2117 f 2163/2163/2117 2164/2164/2118 2161/2161/2115 f 2165/2165/2119 2161/2161/2115 2164/2164/2118 f 2164/2164/2118 2166/2166/2120 2165/2165/2119 f 2167/2167/2121 2165/2165/2119 2166/2166/2120 f 2166/2166/2120 2168/2168/2122 2167/2167/2121 f 2169/2169/2123 2170/2170/2124 2167/2167/2121 f 2167/2167/2121 2168/2168/2122 2169/2169/2123 f 2171/2171/2125 2170/2170/2124 2169/2169/2123 f 2169/2169/2123 2172/2172/2126 2171/2171/2125 f 2173/2173/2127 2171/2171/2125 2172/2172/2126 f 2172/2172/2126 2174/2174/2128 2173/2173/2127 f 2175/2175/2129 2176/2176/2130 2173/2173/2127 f 2173/2173/2127 2174/2174/2128 2175/2175/2129 f 2177/2177/2131 2178/2178/2132 2176/2176/2130 f 2176/2176/2130 2175/2175/2129 2177/2177/2131 f 2177/2177/2131 2179/2179/2133 2180/2180/2134 f 2180/2180/2134 2178/2178/2132 2177/2177/2131 f 2180/2180/2134 2179/2179/2133 2181/2181/2135 f 2181/2181/2135 2182/2182/2136 2180/2180/2134 f 2183/2183/2137 2182/2182/2136 2181/2181/2135 f 2181/2181/2135 2184/2184/2138 2183/2183/2137 f 2163/2163/2117 2162/2162/2116 2183/2183/2137 f 2183/2183/2137 2184/2184/2138 2163/2163/2117 f 2162/2162/2116 2161/2161/2115 2185/2185/2139 f 2185/2185/2139 2186/2186/2140 2162/2162/2116 f 2161/2161/2115 2165/2165/2119 2187/2187/2141 f 2187/2187/2141 2185/2185/2139 2161/2161/2115 f 2167/2167/2121 2188/2188/2142 2187/2187/2141 f 2187/2187/2141 2165/2165/2119 2167/2167/2121 f 2167/2167/2121 2170/2170/2124 2189/2189/2143 f 2189/2189/2143 2188/2188/2142 2167/2167/2121 f 2170/2170/2124 2171/2171/2125 2190/2190/2144 f 2190/2190/2144 2189/2189/2143 2170/2170/2124 f 2173/2173/2127 2191/2191/2145 2190/2190/2144 f 2190/2190/2144 2171/2171/2125 2173/2173/2127 f 2176/2176/2130 2192/2192/2146 2191/2191/2145 f 2191/2191/2145 2173/2173/2127 2176/2176/2130 f 2193/2193/2147 2192/2192/2146 2176/2176/2130 f 2176/2176/2130 2178/2178/2132 2193/2193/2147 f 2178/2178/2132 2180/2180/2134 2194/2194/2148 f 2194/2194/2148 2193/2193/2147 2178/2178/2132 f 2194/2194/2148 2180/2180/2134 2182/2182/2136 f 2182/2182/2136 2195/2195/2149 2194/2194/2148 f 2195/2195/2149 2182/2182/2136 2183/2183/2137 f 2183/2183/2137 2196/2196/2150 2195/2195/2149 f 2186/2186/2140 2196/2196/2150 2183/2183/2137 f 2183/2183/2137 2162/2162/2116 2186/2186/2140 f 2186/2186/2140 2185/2185/2139 2197/2197/2151 f 2197/2197/2151 2198/2198/2152 2186/2186/2140 f 2187/2187/2141 2199/2199/2153 2197/2197/2151 f 2197/2197/2151 2185/2185/2139 2187/2187/2141 f 2187/2187/2141 2188/2188/2142 2200/2200/2154 f 2200/2200/2154 2199/2199/2153 2187/2187/2141 f 2189/2189/2143 2201/2201/2155 2200/2200/2154 f 2200/2200/2154 2188/2188/2142 2189/2189/2143 f 2189/2189/2143 2190/2190/2144 2202/2202/2156 f 2202/2202/2156 2201/2201/2155 2189/2189/2143 f 2202/2202/2156 2190/2190/2144 2191/2191/2145 f 2191/2191/2145 2203/2203/2157 2202/2202/2156 f 2191/2191/2145 2192/2192/2146 2204/2204/2158 f 2204/2204/2158 2203/2203/2157 2191/2191/2145 f 2204/2204/2158 2192/2192/2146 2193/2193/2147 f 2193/2193/2147 2205/2205/2159 2204/2204/2158 f 2194/2194/2148 2206/2206/2160 2205/2205/2159 f 2205/2205/2159 2193/2193/2147 2194/2194/2148 f 2195/2195/2149 2207/2207/2161 2206/2206/2160 f 2206/2206/2160 2194/2194/2148 2195/2195/2149 f 2208/2208/2162 2207/2207/2161 2195/2195/2149 f 2195/2195/2149 2196/2196/2150 2208/2208/2162 f 2198/2198/2152 2208/2208/2162 2196/2196/2150 f 2196/2196/2150 2186/2186/2140 2198/2198/2152 f 2209/2209/2163 2198/2198/2152 2197/2197/2151 f 2197/2197/2151 2210/2210/2164 2209/2209/2163 f 2199/2199/2153 2211/2211/2165 2210/2210/2164 f 2210/2210/2164 2197/2197/2151 2199/2199/2153 f 2200/2200/2154 2212/2212/2166 2211/2211/2165 f 2211/2211/2165 2199/2199/2153 2200/2200/2154 f 2213/2213/2167 2212/2212/2166 2200/2200/2154 f 2200/2200/2154 2201/2201/2155 2213/2213/2167 f 2213/2213/2167 2201/2201/2155 2202/2202/2156 f 2202/2202/2156 2214/2214/2168 2213/2213/2167 f 2214/2214/2168 2202/2202/2156 2203/2203/2157 f 2203/2203/2157 2215/2215/2169 2214/2214/2168 f 2204/2204/2158 2216/2216/2170 2215/2215/2169 f 2215/2215/2169 2203/2203/2157 2204/2204/2158 f 2217/2217/2171 2216/2216/2170 2204/2204/2158 f 2204/2204/2158 2205/2205/2159 2217/2217/2171 f 2205/2205/2159 2206/2206/2160 2218/2218/2172 f 2218/2218/2172 2217/2217/2171 2205/2205/2159 f 2219/2219/2173 2218/2218/2172 2206/2206/2160 f 2206/2206/2160 2207/2207/2161 2219/2219/2173 f 2208/2208/2162 2220/2220/2174 2219/2219/2173 f 2219/2219/2173 2207/2207/2161 2208/2208/2162 f 2208/2208/2162 2198/2198/2152 2209/2209/2163 f 2209/2209/2163 2220/2220/2174 2208/2208/2162 f 2210/2210/2164 2221/2221/2175 2222/2222/2176 f 2222/2222/2176 2209/2209/2163 2210/2210/2164 f 2210/2210/2164 2211/2211/2165 2223/2223/2177 f 2223/2223/2177 2221/2221/2175 2210/2210/2164 f 2212/2212/2166 2224/2224/2178 2223/2223/2177 f 2223/2223/2177 2211/2211/2165 2212/2212/2166 f 2225/2225/2179 2224/2224/2178 2212/2212/2166 f 2212/2212/2166 2213/2213/2167 2225/2225/2179 f 2213/2213/2167 2214/2214/2168 2226/2226/2180 f 2226/2226/2180 2225/2225/2179 2213/2213/2167 f 2226/2226/2180 2214/2214/2168 2215/2215/2169 f 2215/2215/2169 2227/2227/2181 2226/2226/2180 f 2228/2228/2182 2227/2227/2181 2215/2215/2169 f 2215/2215/2169 2216/2216/2170 2228/2228/2182 f 2217/2217/2171 2229/2229/2183 2228/2228/2182 f 2228/2228/2182 2216/2216/2170 2217/2217/2171 f 2217/2217/2171 2218/2218/2172 2230/2230/2184 f 2230/2230/2184 2229/2229/2183 2217/2217/2171 f 2230/2230/2184 2218/2218/2172 2219/2219/2173 f 2219/2219/2173 2231/2231/2185 2230/2230/2184 f 2231/2231/2185 2219/2219/2173 2220/2220/2174 f 2220/2220/2174 2232/2232/2186 2231/2231/2185 f 2220/2220/2174 2209/2209/2163 2222/2222/2176 f 2222/2222/2176 2232/2232/2186 2220/2220/2174 f 2221/2221/2175 2233/2233/2187 2234/2234/2188 f 2234/2234/2188 2222/2222/2176 2221/2221/2175 f 2221/2221/2175 2223/2223/2177 2235/2235/2189 f 2235/2235/2189 2233/2233/2187 2221/2221/2175 f 2236/2236/2190 2235/2235/2189 2223/2223/2177 f 2223/2223/2177 2224/2224/2178 2236/2236/2190 f 2225/2225/2179 2237/2237/2191 2236/2236/2190 f 2236/2236/2190 2224/2224/2178 2225/2225/2179 f 2226/2226/2180 2238/2238/2192 2237/2237/2191 f 2237/2237/2191 2225/2225/2179 2226/2226/2180 f 2227/2227/2181 2239/2239/2193 2238/2238/2192 f 2238/2238/2192 2226/2226/2180 2227/2227/2181 f 2228/2228/2182 2240/2240/2194 2239/2239/2193 f 2239/2239/2193 2227/2227/2181 2228/2228/2182 f 2240/2240/2194 2228/2228/2182 2229/2229/2183 f 2229/2229/2183 2241/2241/2195 2240/2240/2194 f 2241/2241/2195 2229/2229/2183 2230/2230/2184 f 2230/2230/2184 2242/2242/2196 2241/2241/2195 f 2242/2242/2196 2230/2230/2184 2231/2231/2185 f 2231/2231/2185 2243/2243/2197 2242/2242/2196 f 2232/2232/2186 2244/2244/2198 2243/2243/2197 f 2243/2243/2197 2231/2231/2185 2232/2232/2186 f 2234/2234/2188 2244/2244/2198 2232/2232/2186 f 2232/2232/2186 2222/2222/2176 2234/2234/2188 f 2164/2164/2118 2163/2163/2117 2245/2245/2199 f 2166/2166/2120 2164/2164/2118 2245/2245/2199 f 2168/2168/2122 2166/2166/2120 2245/2245/2199 f 2169/2169/2123 2168/2168/2122 2245/2245/2199 f 2172/2172/2126 2169/2169/2123 2245/2245/2199 f 2174/2174/2128 2172/2172/2126 2245/2245/2199 f 2175/2175/2129 2174/2174/2128 2245/2245/2199 f 2177/2177/2131 2175/2175/2129 2245/2245/2199 f 2179/2179/2133 2177/2177/2131 2245/2245/2199 f 2181/2181/2135 2179/2179/2133 2245/2245/2199 f 2184/2184/2138 2181/2181/2135 2245/2245/2199 f 2163/2163/2117 2184/2184/2138 2245/2245/2199 f 2234/2234/2188 2233/2233/2187 2246/2246/2200 f 2233/2233/2187 2235/2235/2189 2246/2246/2200 f 2235/2235/2189 2236/2236/2190 2246/2246/2200 f 2236/2236/2190 2237/2237/2191 2246/2246/2200 f 2237/2237/2191 2238/2238/2192 2246/2246/2200 f 2238/2238/2192 2239/2239/2193 2246/2246/2200 f 2239/2239/2193 2240/2240/2194 2246/2246/2200 f 2240/2240/2194 2241/2241/2195 2246/2246/2200 f 2241/2241/2195 2242/2242/2196 2246/2246/2200 f 2242/2242/2196 2243/2243/2197 2246/2246/2200 f 2243/2243/2197 2244/2244/2198 2246/2246/2200 f 2244/2244/2198 2234/2234/2188 2246/2246/2200 f 2247/2247/2201 2248/2248/2202 2249/2249/2203 f 2249/2249/2203 2250/2250/2204 2247/2247/2201 f 2248/2248/2202 2251/2251/2205 2252/2252/2206 f 2252/2252/2206 2249/2249/2203 2248/2248/2202 f 2253/2253/2207 2254/2254/2208 2252/2252/2206 f 2252/2252/2206 2251/2251/2205 2253/2253/2207 f 2255/2255/2209 2254/2254/2208 2253/2253/2207 f 2253/2253/2207 2256/2256/2210 2255/2255/2209 f 2256/2256/2210 2257/2257/2211 2258/2258/2212 f 2258/2258/2212 2255/2255/2209 2256/2256/2210 f 2259/2259/2213 2258/2258/2212 2257/2257/2211 f 2257/2257/2211 2260/2260/2214 2259/2259/2213 f 2259/2259/2213 2260/2260/2214 2261/2261/2215 f 2261/2261/2215 2262/2262/2216 2259/2259/2213 f 2261/2261/2215 2263/2263/2217 2264/2264/2218 f 2264/2264/2218 2262/2262/2216 2261/2261/2215 f 2265/2265/2219 2264/2264/2218 2263/2263/2217 f 2263/2263/2217 2266/2266/2220 2265/2265/2219 f 2267/2267/2221 2268/2268/2222 2265/2265/2219 f 2265/2265/2219 2266/2266/2220 2267/2267/2221 f 2269/2269/2223 2268/2268/2222 2267/2267/2221 f 2267/2267/2221 2270/2270/2224 2269/2269/2223 f 2270/2270/2224 2247/2247/2201 2250/2250/2204 f 2250/2250/2204 2269/2269/2223 2270/2270/2224 f 2271/2271/2225 2272/2272/2226 2273/2273/2162 f 2274/2274/2227 2271/2271/2225 2273/2273/2162 f 2275/2275/2228 2274/2274/2227 2273/2273/2162 f 2276/2276/2229 2275/2275/2228 2273/2273/2162 f 2277/2277/2230 2276/2276/2229 2273/2273/2162 f 2278/2278/2231 2277/2277/2230 2273/2273/2162 f 2279/2279/2232 2278/2278/2231 2273/2273/2162 f 2280/2280/2233 2279/2279/2232 2273/2273/2162 f 2281/2281/2234 2280/2280/2233 2273/2273/2162 f 2282/2282/2235 2281/2281/2234 2273/2273/2162 f 2283/2283/2236 2282/2282/2235 2273/2273/2162 f 2272/2272/2226 2283/2283/2236 2273/2273/2162 f 2284/2284/2237 2285/2285/2238 2286/2286/2156 f 2285/2285/2238 2287/2287/2239 2286/2286/2156 f 2287/2287/2239 2288/2288/2240 2286/2286/2156 f 2288/2288/2240 2289/2289/2241 2286/2286/2156 f 2289/2289/2241 2290/2290/2242 2286/2286/2156 f 2290/2290/2242 2291/2291/2243 2286/2286/2156 f 2291/2291/2243 2292/2292/2244 2286/2286/2156 f 2292/2292/2244 2293/2293/2245 2286/2286/2156 f 2293/2293/2245 2294/2294/2246 2286/2286/2156 f 2294/2294/2246 2295/2295/2247 2286/2286/2156 f 2295/2295/2247 2296/2296/2248 2286/2286/2156 f 2296/2296/2248 2284/2284/2237 2286/2286/2156 f 2252/2252/2206 2254/2254/2208 2297/2297/2249 f 2297/2297/2249 2298/2298/2250 2252/2252/2206 f 2299/2299/2251 2249/2249/2203 2252/2252/2206 f 2252/2252/2206 2298/2298/2250 2299/2299/2251 f 2249/2249/2203 2299/2299/2251 2300/2300/2252 f 2300/2300/2252 2250/2250/2204 2249/2249/2203 f 2250/2250/2204 2300/2300/2252 2301/2301/2253 f 2301/2301/2253 2269/2269/2223 2250/2250/2204 f 2269/2269/2223 2301/2301/2253 2302/2302/2254 f 2302/2302/2254 2268/2268/2222 2269/2269/2223 f 2303/2303/2255 2265/2265/2219 2268/2268/2222 f 2268/2268/2222 2302/2302/2254 2303/2303/2255 f 2304/2304/2256 2264/2264/2218 2265/2265/2219 f 2265/2265/2219 2303/2303/2255 2304/2304/2256 f 2262/2262/2216 2264/2264/2218 2304/2304/2256 f 2304/2304/2256 2305/2305/2257 2262/2262/2216 f 2259/2259/2213 2262/2262/2216 2305/2305/2257 f 2305/2305/2257 2306/2306/2258 2259/2259/2213 f 2259/2259/2213 2306/2306/2258 2307/2307/2259 f 2307/2307/2259 2258/2258/2212 2259/2259/2213 f 2308/2308/2260 2255/2255/2209 2258/2258/2212 f 2258/2258/2212 2307/2307/2259 2308/2308/2260 f 2297/2297/2249 2254/2254/2208 2255/2255/2209 f 2255/2255/2209 2308/2308/2260 2297/2297/2249 f 2309/2309/2261 2310/2310/2262 2311/2311/2263 f 2311/2311/2263 2312/2312/2264 2309/2309/2261 f 2312/2312/2264 2313/2313/2265 2314/2314/2266 f 2314/2314/2266 2309/2309/2261 2312/2312/2264 f 2314/2314/2266 2313/2313/2265 2315/2315/2267 f 2315/2315/2267 2316/2316/2268 2314/2314/2266 f 2315/2315/2267 2317/2317/2269 2318/2318/2270 f 2318/2318/2270 2316/2316/2268 2315/2315/2267 f 2317/2317/2269 2319/2319/2271 2320/2320/2272 f 2320/2320/2272 2318/2318/2270 2317/2317/2269 f 2321/2321/2273 2320/2320/2272 2319/2319/2271 f 2319/2319/2271 2322/2322/2274 2321/2321/2273 f 2322/2322/2274 2323/2323/2275 2324/2324/2276 f 2324/2324/2276 2321/2321/2273 2322/2322/2274 f 2324/2324/2276 2323/2323/2275 2325/2325/2277 f 2325/2325/2277 2326/2326/2278 2324/2324/2276 f 2326/2326/2278 2325/2325/2277 2327/2327/2279 f 2327/2327/2279 2328/2328/2280 2326/2326/2278 f 2329/2329/2281 2328/2328/2280 2327/2327/2279 f 2327/2327/2279 2330/2330/2282 2329/2329/2281 f 2331/2331/2283 2332/2332/2284 2329/2329/2281 f 2329/2329/2281 2330/2330/2282 2331/2331/2283 f 2331/2331/2283 2311/2311/2263 2310/2310/2262 f 2310/2310/2262 2332/2332/2284 2331/2331/2283 f 2247/2247/2201 2333/2333/2285 2334/2334/2286 f 2334/2334/2286 2248/2248/2202 2247/2247/2201 f 2334/2334/2286 2335/2335/2287 2251/2251/2205 f 2251/2251/2205 2248/2248/2202 2334/2334/2286 f 2253/2253/2207 2251/2251/2205 2335/2335/2287 f 2335/2335/2287 2336/2336/2288 2253/2253/2207 f 2256/2256/2210 2253/2253/2207 2336/2336/2288 f 2336/2336/2288 2337/2337/2289 2256/2256/2210 f 2337/2337/2289 2338/2338/2290 2257/2257/2211 f 2257/2257/2211 2256/2256/2210 2337/2337/2289 f 2257/2257/2211 2338/2338/2290 2339/2339/2291 f 2339/2339/2291 2260/2260/2214 2257/2257/2211 f 2339/2339/2291 2340/2340/2292 2261/2261/2215 f 2261/2261/2215 2260/2260/2214 2339/2339/2291 f 2340/2340/2292 2341/2341/2293 2263/2263/2217 f 2263/2263/2217 2261/2261/2215 2340/2340/2292 f 2266/2266/2220 2263/2263/2217 2341/2341/2293 f 2341/2341/2293 2342/2342/2294 2266/2266/2220 f 2342/2342/2294 2343/2343/2295 2267/2267/2221 f 2267/2267/2221 2266/2266/2220 2342/2342/2294 f 2267/2267/2221 2343/2343/2295 2344/2344/2296 f 2344/2344/2296 2270/2270/2224 2267/2267/2221 f 2270/2270/2224 2344/2344/2296 2333/2333/2285 f 2333/2333/2285 2247/2247/2201 2270/2270/2224 f 2333/2333/2285 2272/2272/2226 2271/2271/2225 f 2271/2271/2225 2334/2334/2286 2333/2333/2285 f 2334/2334/2286 2271/2271/2225 2274/2274/2227 f 2274/2274/2227 2335/2335/2287 2334/2334/2286 f 2275/2275/2228 2336/2336/2288 2335/2335/2287 f 2335/2335/2287 2274/2274/2227 2275/2275/2228 f 2275/2275/2228 2276/2276/2229 2337/2337/2289 f 2337/2337/2289 2336/2336/2288 2275/2275/2228 f 2337/2337/2289 2276/2276/2229 2277/2277/2230 f 2277/2277/2230 2338/2338/2290 2337/2337/2289 f 2278/2278/2231 2339/2339/2291 2338/2338/2290 f 2338/2338/2290 2277/2277/2230 2278/2278/2231 f 2278/2278/2231 2279/2279/2232 2340/2340/2292 f 2340/2340/2292 2339/2339/2291 2278/2278/2231 f 2341/2341/2293 2340/2340/2292 2279/2279/2232 f 2279/2279/2232 2280/2280/2233 2341/2341/2293 f 2280/2280/2233 2281/2281/2234 2342/2342/2294 f 2342/2342/2294 2341/2341/2293 2280/2280/2233 f 2282/2282/2235 2343/2343/2295 2342/2342/2294 f 2342/2342/2294 2281/2281/2234 2282/2282/2235 f 2344/2344/2296 2343/2343/2295 2282/2282/2235 f 2282/2282/2235 2283/2283/2236 2344/2344/2296 f 2333/2333/2285 2344/2344/2296 2283/2283/2236 f 2283/2283/2236 2272/2272/2226 2333/2333/2285 f 2315/2315/2267 2313/2313/2265 2345/2345/2297 f 2345/2345/2297 2346/2346/2298 2315/2315/2267 f 2312/2312/2264 2347/2347/2299 2345/2345/2297 f 2345/2345/2297 2313/2313/2265 2312/2312/2264 f 2348/2348/2300 2347/2347/2299 2312/2312/2264 f 2312/2312/2264 2311/2311/2263 2348/2348/2300 f 2348/2348/2300 2311/2311/2263 2331/2331/2283 f 2331/2331/2283 2349/2349/2301 2348/2348/2300 f 2330/2330/2282 2350/2350/2302 2349/2349/2301 f 2349/2349/2301 2331/2331/2283 2330/2330/2282 f 2327/2327/2279 2351/2351/2303 2350/2350/2302 f 2350/2350/2302 2330/2330/2282 2327/2327/2279 f 2352/2352/2304 2351/2351/2303 2327/2327/2279 f 2327/2327/2279 2325/2325/2277 2352/2352/2304 f 2325/2325/2277 2323/2323/2275 2353/2353/2305 f 2353/2353/2305 2352/2352/2304 2325/2325/2277 f 2353/2353/2305 2323/2323/2275 2322/2322/2274 f 2322/2322/2274 2354/2354/2306 2353/2353/2305 f 2319/2319/2271 2355/2355/2307 2354/2354/2306 f 2354/2354/2306 2322/2322/2274 2319/2319/2271 f 2319/2319/2271 2317/2317/2269 2356/2356/2308 f 2356/2356/2308 2355/2355/2307 2319/2319/2271 f 2346/2346/2298 2356/2356/2308 2317/2317/2269 f 2317/2317/2269 2315/2315/2267 2346/2346/2298 f 2284/2284/2237 2346/2346/2298 2345/2345/2297 f 2345/2345/2297 2285/2285/2238 2284/2284/2237 f 2285/2285/2238 2345/2345/2297 2347/2347/2299 f 2347/2347/2299 2287/2287/2239 2285/2285/2238 f 2347/2347/2299 2348/2348/2300 2288/2288/2240 f 2288/2288/2240 2287/2287/2239 2347/2347/2299 f 2289/2289/2241 2288/2288/2240 2348/2348/2300 f 2348/2348/2300 2349/2349/2301 2289/2289/2241 f 2289/2289/2241 2349/2349/2301 2350/2350/2302 f 2350/2350/2302 2290/2290/2242 2289/2289/2241 f 2291/2291/2243 2290/2290/2242 2350/2350/2302 f 2350/2350/2302 2351/2351/2303 2291/2291/2243 f 2291/2291/2243 2351/2351/2303 2352/2352/2304 f 2352/2352/2304 2292/2292/2244 2291/2291/2243 f 2353/2353/2305 2293/2293/2245 2292/2292/2244 f 2292/2292/2244 2352/2352/2304 2353/2353/2305 f 2354/2354/2306 2294/2294/2246 2293/2293/2245 f 2293/2293/2245 2353/2353/2305 2354/2354/2306 f 2355/2355/2307 2295/2295/2247 2294/2294/2246 f 2294/2294/2246 2354/2354/2306 2355/2355/2307 f 2356/2356/2308 2296/2296/2248 2295/2295/2247 f 2295/2295/2247 2355/2355/2307 2356/2356/2308 f 2284/2284/2237 2296/2296/2248 2356/2356/2308 f 2356/2356/2308 2346/2346/2298 2284/2284/2237 f 2310/2310/2262 2309/2309/2261 2357/2357/2250 f 2357/2357/2250 2358/2358/2249 2310/2310/2262 f 2357/2357/2250 2309/2309/2261 2314/2314/2266 f 2314/2314/2266 2359/2359/2251 2357/2357/2250 f 2314/2314/2266 2316/2316/2268 2360/2360/2309 f 2360/2360/2309 2359/2359/2251 2314/2314/2266 f 2361/2361/2253 2360/2360/2309 2316/2316/2268 f 2316/2316/2268 2318/2318/2270 2361/2361/2253 f 2362/2362/2254 2361/2361/2253 2318/2318/2270 f 2318/2318/2270 2320/2320/2272 2362/2362/2254 f 2363/2363/2255 2362/2362/2254 2320/2320/2272 f 2320/2320/2272 2321/2321/2273 2363/2363/2255 f 2363/2363/2255 2321/2321/2273 2324/2324/2276 f 2324/2324/2276 2364/2364/2256 2363/2363/2255 f 2364/2364/2256 2324/2324/2276 2326/2326/2278 f 2326/2326/2278 2365/2365/2257 2364/2364/2256 f 2365/2365/2257 2326/2326/2278 2328/2328/2280 f 2328/2328/2280 2366/2366/2258 2365/2365/2257 f 2366/2366/2258 2328/2328/2280 2329/2329/2281 f 2329/2329/2281 2367/2367/2259 2366/2366/2258 f 2332/2332/2284 2368/2368/2260 2367/2367/2259 f 2367/2367/2259 2329/2329/2281 2332/2332/2284 f 2310/2310/2262 2358/2358/2249 2368/2368/2260 f 2368/2368/2260 2332/2332/2284 2310/2310/2262 f 2297/2297/2249 2358/2358/2249 2357/2357/2250 f 2357/2357/2250 2298/2298/2250 2297/2297/2249 f 2298/2298/2250 2357/2357/2250 2359/2359/2251 f 2359/2359/2251 2299/2299/2251 2298/2298/2250 f 2299/2299/2251 2359/2359/2251 2360/2360/2309 f 2360/2360/2309 2300/2300/2252 2299/2299/2251 f 2300/2300/2252 2360/2360/2309 2361/2361/2253 f 2361/2361/2253 2301/2301/2253 2300/2300/2252 f 2301/2301/2253 2361/2361/2253 2362/2362/2254 f 2362/2362/2254 2302/2302/2254 2301/2301/2253 f 2302/2302/2254 2362/2362/2254 2363/2363/2255 f 2363/2363/2255 2303/2303/2255 2302/2302/2254 f 2303/2303/2255 2363/2363/2255 2364/2364/2256 f 2364/2364/2256 2304/2304/2256 2303/2303/2255 f 2304/2304/2256 2364/2364/2256 2365/2365/2257 f 2365/2365/2257 2305/2305/2257 2304/2304/2256 f 2305/2305/2257 2365/2365/2257 2366/2366/2258 f 2366/2366/2258 2306/2306/2258 2305/2305/2257 f 2306/2306/2258 2366/2366/2258 2367/2367/2259 f 2367/2367/2259 2307/2307/2259 2306/2306/2258 f 2307/2307/2259 2367/2367/2259 2368/2368/2260 f 2368/2368/2260 2308/2308/2260 2307/2307/2259 f 2297/2297/2249 2308/2308/2260 2368/2368/2260 f 2368/2368/2260 2358/2358/2249 2297/2297/2249 v -27.5637 35.8655 67.0422 v -26.7762 36.9949 67.7041 v -28.0492 37.0830 68.3565 v -28.2526 35.9132 67.3951 v -27.1429 35.7184 66.4074 v -25.9987 36.7231 66.5313 v -27.1031 35.5113 65.6610 v -25.9252 36.3404 65.1520 v -27.4549 35.2997 65.0029 v -26.5753 35.9494 63.9362 v -28.1041 35.1402 64.6096 v -27.7748 35.6549 63.2094 v -28.8767 35.0757 64.5864 v -29.2024 35.5357 63.1664 v -29.5656 35.1234 64.9393 v -30.4754 35.6238 63.8187 v -29.9863 35.2705 65.5741 v -31.2528 35.8956 64.9915 v -30.0262 35.4776 66.3205 v -31.3264 36.2783 66.3707 v -29.6744 35.6893 66.9786 v -30.6763 36.6693 67.5866 v -29.0252 35.8486 67.3719 v -29.4767 36.9638 68.3134 v -26.3005 38.4247 67.9563 v -27.9640 38.5398 68.8087 v -25.2849 38.0695 66.4240 v -25.1887 37.5696 64.6220 v -26.0382 37.0587 63.0334 v -27.6054 36.6738 62.0837 v -29.4706 36.5181 62.0275 v -31.1339 36.6332 62.8799 v -32.1497 36.9883 64.4122 v -32.2457 37.4883 66.2142 v -31.3964 37.9991 67.8028 v -29.8291 38.3840 68.7524 v -26.2094 39.9370 67.7606 v -28.0098 40.0616 68.6832 v -25.1100 39.5527 66.1019 v -25.0060 39.0115 64.1515 v -25.9254 38.4585 62.4320 v -27.6217 38.0419 61.4041 v -29.6406 37.8734 61.3433 v -31.4409 37.9980 62.2658 v -32.5404 38.3823 63.9245 v -32.6444 38.9235 65.8748 v -31.7250 39.4765 67.5944 v -30.0286 39.8931 68.6223 v -26.5165 41.3018 67.1465 v -28.1798 41.4169 67.9989 v -25.5007 40.9467 65.6142 v -25.4046 40.4467 63.8122 v -26.2540 39.9358 62.2235 v -27.8213 39.5510 61.2739 v -29.6864 39.3952 61.2177 v -31.3498 39.5103 62.0700 v -32.3655 39.8654 63.6023 v -32.4616 40.3654 65.4044 v -31.6122 40.8763 66.9930 v -30.0449 41.2612 67.9426 v -27.1750 42.3112 66.2077 v -28.4481 42.3993 66.8601 v -26.3976 42.0394 65.0349 v -26.3240 41.6567 63.6556 v -26.9741 41.2658 62.4399 v -28.1737 40.9712 61.7130 v -29.6012 40.8520 61.6700 v -30.8742 40.9401 62.3223 v -31.6516 41.2119 63.4951 v -31.7252 41.5946 64.8744 v -31.0751 41.9856 66.0902 v -29.8756 42.2801 66.8170 v -28.0848 42.8116 65.0871 v -28.7737 42.8592 65.4400 v -27.6640 42.6645 64.4523 v -27.6242 42.4574 63.7059 v -27.9760 42.2458 63.0478 v -28.6252 42.0863 62.6545 v -29.3978 42.0219 62.6312 v -30.0867 42.0695 62.9842 v -30.5075 42.2166 63.6189 v -30.5473 42.4237 64.3654 v -30.1955 42.6353 65.0235 v -29.5463 42.7947 65.4168 v -28.5432 35.2083 66.0713 v -29.1072 42.7267 63.9551 v -25.8476 42.6850 61.6866 v -27.0448 42.1115 63.8832 v -25.6659 41.0166 64.6238 v -24.0122 41.2276 62.6722 v -25.0639 39.3191 65.2597 v -23.2109 38.9681 63.5189 v -25.4001 37.4738 65.6210 v -23.6584 36.5119 63.9996 v -25.2349 34.5171 63.9856 v -26.5844 35.9752 65.6104 v -28.2995 35.2248 65.2309 v -27.5177 33.5183 63.4804 v -30.0858 35.4236 64.5842 v -29.8954 33.7830 62.6197 v -31.4647 36.5185 63.8436 v -31.7308 35.2404 61.6339 v -32.0667 38.2161 63.2075 v -32.5321 37.5000 60.7874 v -31.7305 40.0614 62.8464 v -32.0846 39.9562 60.3066 v -30.5082 41.9509 60.3207 v -30.5461 41.5600 62.8570 v -28.2253 42.9498 60.8258 v -28.8311 42.3105 63.2365 v -26.7301 39.8386 63.7656 v -27.4943 40.4454 63.3550 v -28.3371 38.5921 63.5493 v -26.3965 38.8977 64.1180 v -26.5828 37.8750 64.3183 v -27.2392 37.0444 64.3123 v -28.1898 36.6285 64.1020 v -29.1798 36.7388 63.7436 v -29.9440 37.3456 63.3331 v -30.2777 38.2865 62.9807 v -30.0913 39.3092 62.7805 v -29.4349 40.1398 62.7863 v -28.4844 40.5557 62.9966 v -21.0071 34.7633 43.2537 v -20.4545 34.3245 43.5505 v -21.6164 33.4232 43.3941 v -20.2132 33.6443 43.8054 v -20.3480 32.9047 43.9501 v -20.8226 32.3042 43.9459 v -21.5099 32.0034 43.7938 v -22.2258 32.0832 43.5346 v -22.7783 32.5219 43.2377 v -23.0196 33.2022 42.9828 v -22.8848 33.9417 42.8381 v -22.4103 34.5423 42.8425 v -21.7229 34.8430 42.9945 v -23.3571 36.2505 62.8138 v -22.9183 38.6589 62.3425 v -23.7040 40.8745 61.5123 v -25.5036 42.3035 60.5457 v -27.8350 42.5631 59.7018 v -30.0734 41.5837 59.2065 v -31.6191 39.6278 59.1927 v -32.0579 37.2194 59.6641 v -31.2722 35.0038 60.4942 v -29.4726 33.5748 61.4608 v -27.1412 33.3152 62.3048 v -24.9028 34.2946 62.8000 v -18.3764 33.7461 43.6777 v -18.1651 34.1207 44.9520 v -18.5124 32.2142 45.3250 v -18.6681 32.1452 43.9910 v -18.8987 35.2188 43.1258 v -18.7870 35.8744 44.2948 v -20.0949 36.1688 42.4833 v -20.2115 37.0055 43.5297 v -21.6447 36.3413 41.9223 v -22.0570 37.2110 42.8617 v -23.1327 35.6903 41.5931 v -23.8288 36.4358 42.4697 v -24.1601 34.3901 41.5839 v -25.0524 34.8875 42.4587 v -24.4518 32.7892 41.8972 v -25.3997 32.9812 42.8319 v -24.7778 31.2274 43.4889 v -23.9296 31.3165 42.4491 v -22.7333 30.3665 43.0916 v -23.3532 30.0962 44.2540 v -21.1835 30.1940 43.6526 v -21.5078 29.8908 44.9221 v -19.6955 30.8450 43.9818 v -19.7359 30.6660 45.3141 v -27.3161 41.5149 63.9457 v -26.1832 40.6153 64.5542 v -25.6886 39.2207 65.0766 v -25.9649 37.7047 65.3734 v -26.9379 36.4734 65.3647 v -28.3469 35.8569 65.0530 v -29.8145 36.0203 64.5216 v -30.9473 36.9199 63.9133 v -31.4419 38.3145 63.3907 v -31.1657 39.8306 63.0941 v -30.1927 41.0618 63.1026 v -28.7837 41.6783 63.4145 v -19.6183 34.6606 43.0290 v -20.4723 35.3388 42.5703 v -19.2455 33.6092 43.4230 v -19.4537 32.4663 43.6466 v -20.1872 31.5381 43.6401 v -21.2495 31.0733 43.4051 v -22.3559 31.1965 43.0046 v -23.2099 31.8747 42.5460 v -23.5828 32.9261 42.1519 v -23.3746 34.0690 41.9284 v -22.6410 34.9972 41.9348 v -21.5787 35.4620 42.1698 v -18.4748 34.4479 46.1971 v -18.8314 32.4908 46.5801 v -19.1133 36.2482 45.5225 v -20.5756 37.4094 44.7371 v -22.4701 37.6203 44.0513 v -24.2890 36.8245 43.6489 v -25.5450 35.2352 43.6377 v -25.9016 33.2781 44.0207 v -25.2631 31.4778 44.6953 v -23.8008 30.3166 45.4807 v -21.9063 30.1057 46.1665 v -20.0874 30.9015 46.5689 vn 0.3394 -0.7744 0.5340 vn 0.5325 -0.4848 0.6938 vn 0.2003 -0.4618 0.8641 vn 0.1510 -0.7613 0.6305 vn 0.4545 -0.8146 0.3604 vn 0.7354 -0.5557 0.3877 vn 0.4653 -0.8712 0.1564 vn 0.7546 -0.6556 0.0278 vn 0.3691 -0.9291 -0.0236 vn 0.5849 -0.7576 -0.2895 vn 0.1916 -0.9727 -0.1311 vn 0.2719 -0.8345 -0.4792 vn -0.0196 -0.9903 -0.1375 vn -0.1007 -0.8656 -0.4904 vn -0.2080 -0.9773 -0.0410 vn -0.4329 -0.8426 -0.3202 vn -0.3230 -0.9371 0.1326 vn -0.6358 -0.7717 -0.0141 vn -0.3339 -0.8804 0.3367 vn -0.6550 -0.6718 0.3458 vn -0.2377 -0.8226 0.5166 vn -0.4853 -0.5698 0.6632 vn -0.0602 -0.7790 0.6242 vn -0.1723 -0.4929 0.8528 vn 0.6470 -0.1270 0.7519 vn 0.2201 -0.0975 0.9706 vn 0.9076 -0.2182 0.3586 vn 0.9323 -0.3465 -0.1038 vn 0.7143 -0.4776 -0.5115 vn 0.3121 -0.5764 -0.7552 vn -0.1666 -0.6163 -0.7697 vn -0.5934 -0.5868 -0.5509 vn -0.8541 -0.4957 -0.1577 vn -0.8787 -0.3673 0.3048 vn -0.6608 -0.2362 0.7125 vn -0.2586 -0.1375 0.9562 vn 0.6681 0.2476 0.7017 vn 0.2083 0.2794 0.9373 vn 0.9489 0.1495 0.2781 vn 0.9754 0.0113 -0.2201 vn 0.7406 -0.1300 -0.6592 vn 0.3073 -0.2364 -0.9218 vn -0.2083 -0.2794 -0.9373 vn -0.6681 -0.2476 -0.7017 vn -0.9489 -0.1494 -0.2781 vn -0.9754 -0.0112 0.2201 vn -0.7406 0.1300 0.6592 vn -0.3074 0.2364 0.9218 vn 0.5934 0.5868 0.5509 vn 0.1666 0.6163 0.7697 vn 0.8541 0.4957 0.1577 vn 0.8787 0.3673 -0.3047 vn 0.6607 0.2362 -0.7125 vn 0.2585 0.1375 -0.9562 vn -0.2201 0.0975 -0.9706 vn -0.6470 0.1270 -0.7519 vn -0.9076 0.2182 -0.3586 vn -0.9323 0.3465 0.1038 vn -0.7143 0.4776 0.5115 vn -0.3121 0.5764 0.7552 vn 0.4329 0.8426 0.3202 vn 0.1007 0.8656 0.4904 vn 0.6358 0.7717 0.0141 vn 0.6550 0.6718 -0.3458 vn 0.4853 0.5698 -0.6632 vn 0.1723 0.4929 -0.8529 vn -0.2003 0.4618 -0.8641 vn -0.5325 0.4848 -0.6938 vn -0.7354 0.5557 -0.3877 vn -0.7546 0.6556 -0.0278 vn -0.5849 0.7576 0.2895 vn -0.2719 0.8345 0.4792 vn 0.2080 0.9773 0.0410 vn 0.0196 0.9903 0.1375 vn 0.3230 0.9371 -0.1326 vn 0.3339 0.8804 -0.3367 vn 0.2377 0.8226 -0.5166 vn 0.0602 0.7790 -0.6242 vn -0.1510 0.7613 -0.6305 vn -0.3394 0.7744 -0.5340 vn -0.4544 0.8146 -0.3604 vn -0.4653 0.8712 -0.1564 vn -0.3691 0.9291 0.0236 vn -0.1916 0.9727 0.1311 vn 0.0720 -0.9601 0.2702 vn -0.0720 0.9601 -0.2702 vn 0.3425 0.9351 0.0907 vn -0.0181 0.7103 0.7037 vn 0.1947 0.5413 0.8179 vn 0.7087 0.6444 0.2873 vn 0.2876 0.2794 0.9161 vn 0.8685 0.1936 0.4562 vn 0.2357 -0.0053 0.9718 vn 0.7793 -0.2965 0.5521 vn 0.4648 -0.6944 0.5493 vn 0.0530 -0.2365 0.9702 vn -0.2117 -0.3523 0.9116 vn 0.0093 -0.8937 0.4486 vn -0.4873 -0.3216 0.8118 vn -0.4651 -0.8409 0.2768 vn -0.7001 -0.1527 0.6975 vn -0.8312 -0.5501 0.0802 vn -0.7930 0.1092 0.5994 vn -0.9911 -0.0993 -0.0887 vn -0.7411 0.3940 0.5436 vn -0.9018 0.3907 -0.1846 vn -0.5873 0.7887 -0.1818 vn -0.5583 0.6252 0.5453 vn -0.1319 0.9879 -0.0811 vn -0.2937 0.7410 0.6039 vn -0.5715 -0.0009 0.8206 vn -0.4360 -0.1086 0.8934 vn -0.6307 0.1660 0.7580 vn -0.5977 0.3475 0.7225 vn -0.4812 0.4949 0.7235 vn -0.3126 0.5687 0.7609 vn -0.1369 0.5491 0.8245 vn -0.0013 0.4414 0.8973 vn 0.0579 0.2745 0.9598 vn 0.0249 0.0931 0.9953 vn -0.0916 -0.0543 0.9943 vn -0.2603 -0.1281 0.9570 vn 0.1260 -0.5656 -0.8150 vn -0.0172 -0.4519 -0.8919 vn 0.3074 -0.2364 -0.9218 vn -0.0797 -0.2756 -0.9580 vn -0.0448 -0.0840 -0.9955 vn 0.0782 0.0716 -0.9944 vn 0.2563 0.1496 -0.9550 vn 0.4418 0.1289 -0.8878 vn 0.5850 0.0151 -0.8109 vn 0.6475 -0.1611 -0.7449 vn 0.6126 -0.3527 -0.7074 vn 0.4897 -0.5083 -0.7084 vn 0.3115 -0.5863 -0.7478 vn 0.8758 -0.3651 0.3157 vn 0.9667 0.1339 0.2180 vn 0.8039 0.5930 0.0460 vn 0.4310 0.8891 -0.1542 vn -0.0521 0.9429 -0.3291 vn -0.5159 0.7399 -0.4317 vn -0.8361 0.3346 -0.4346 vn -0.9271 -0.1644 -0.3369 vn -0.7643 -0.6235 -0.1649 vn -0.3914 -0.9196 0.0354 vn 0.0917 -0.9733 0.2102 vn 0.5555 -0.7704 0.3128 vn 0.8008 -0.1059 -0.5896 vn 0.9963 0.0822 0.0264 vn 0.9084 -0.4004 0.1208 vn 0.7479 -0.3959 -0.5328 vn 0.7061 0.1610 -0.6895 vn 0.8389 0.5260 -0.1400 vn 0.4894 0.3331 -0.8060 vn 0.4783 0.8124 -0.3336 vn 0.2086 0.3643 -0.9076 vn 0.0112 0.8644 -0.5027 vn -0.0610 0.2464 -0.9673 vn -0.4373 0.6682 -0.6019 vn -0.2471 0.0108 -0.9689 vn -0.7470 0.2763 -0.6047 vn -0.3000 -0.2792 -0.9121 vn -0.8349 -0.2063 -0.5103 vn -0.6775 -0.6502 -0.3440 vn -0.2053 -0.5461 -0.8122 vn 0.0114 -0.7182 -0.6958 vn -0.3169 -0.9365 -0.1503 vn 0.2921 -0.7495 -0.5941 vn 0.1502 -0.9885 0.0188 vn 0.5617 -0.6315 -0.5345 vn 0.5987 -0.7923 0.1180 vn -0.4066 -0.0152 0.9135 vn -0.5067 0.0644 0.8597 vn -0.5504 0.1877 0.8135 vn -0.5260 0.3218 0.7873 vn -0.4400 0.4306 0.7880 vn -0.3155 0.4851 0.8156 vn -0.1857 0.4706 0.8626 vn -0.0856 0.3910 0.9164 vn -0.0419 0.2678 0.9626 vn -0.0663 0.1338 0.9888 vn -0.1522 0.0249 0.9880 vn -0.2768 -0.0296 0.9605 vn 0.0714 -0.3999 -0.9138 vn 0.1776 -0.4842 -0.8568 vn 0.0250 -0.2691 -0.9628 vn 0.0509 -0.1270 -0.9906 vn 0.1421 -0.0116 -0.9898 vn 0.2742 0.0462 -0.9606 vn 0.4117 0.0309 -0.9108 vn 0.5180 -0.0534 -0.8537 vn 0.5644 -0.1842 -0.8047 vn 0.5385 -0.3263 -0.7769 vn 0.4472 -0.4417 -0.7777 vn 0.3152 -0.4995 -0.8069 vn 0.9666 0.1340 0.2183 vn 0.8757 -0.3651 0.3159 vn 0.8038 0.5930 0.0463 vn 0.4309 0.8891 -0.1540 vn -0.0521 0.9429 -0.3289 vn -0.5160 0.7400 -0.4315 vn -0.8362 0.3347 -0.4344 vn -0.9272 -0.1643 -0.3367 vn -0.7644 -0.6234 -0.1647 vn -0.3915 -0.9195 0.0356 vn 0.0916 -0.9733 0.2105 vn 0.5554 -0.7704 0.3131 vt 0.0957 0.3620 0.0000 vt 0.1054 0.3617 0.0000 vt 0.1073 0.3535 0.0000 vt 0.0967 0.3576 0.0000 vt 0.0964 0.3666 0.0000 vt 0.1067 0.3701 0.0000 vt 0.0987 0.3700 0.0000 vt 0.1109 0.3764 0.0000 vt 0.1020 0.3714 0.0000 vt 0.1169 0.3790 0.0000 vt 0.1053 0.3704 0.0000 vt 0.1231 0.3771 0.0000 vt 0.1078 0.3672 0.0000 vt 0.1278 0.3713 0.0000 vt 0.1089 0.3628 0.0000 vt 0.1297 0.3632 0.0000 vt 0.1082 0.3583 0.0000 vt 0.1284 0.3548 0.0000 vt 0.1059 0.3549 0.0000 vt 0.1241 0.3485 0.0000 vt 0.1026 0.3535 0.0000 vt 0.1181 0.3459 0.0000 vt 0.0993 0.3545 0.0000 vt 0.1120 0.3477 0.0000 vt 0.1244 0.3615 0.0000 vt 0.1270 0.3508 0.0000 vt 0.1262 0.3724 0.0000 vt 0.1317 0.3807 0.0000 vt 0.1396 0.3841 0.0000 vt 0.1476 0.3816 0.0000 vt 0.1537 0.3741 0.0000 vt 0.1563 0.3634 0.0000 vt 0.1545 0.3524 0.0000 vt 0.1490 0.3442 0.0000 vt 0.1411 0.3408 0.0000 vt 0.1331 0.3432 0.0000 vt 0.1500 0.3614 0.0000 vt 0.1528 0.3499 0.0000 vt 0.1519 0.3733 0.0000 vt 0.1579 0.3822 0.0000 vt 0.1664 0.3859 0.0000 vt 0.1751 0.3832 0.0000 vt 0.1817 0.3751 0.0000 vt 0.1845 0.3635 0.0000 vt 0.1826 0.3516 0.0000 vt 0.1766 0.3427 0.0000 vt 0.1681 0.3390 0.0000 vt 0.1594 0.3417 0.0000 vt 0.1783 0.3615 0.0000 vt 0.1808 0.3508 0.0000 vt 0.1800 0.3725 0.0000 vt 0.1855 0.3807 0.0000 vt 0.1934 0.3841 0.0000 vt 0.2015 0.3817 0.0000 vt 0.2076 0.3741 0.0000 vt 0.2101 0.3634 0.0000 vt 0.2083 0.3525 0.0000 vt 0.2028 0.3442 0.0000 vt 0.1950 0.3408 0.0000 vt 0.1869 0.3433 0.0000 vt 0.2048 0.3617 0.0000 vt 0.2068 0.3536 0.0000 vt 0.2061 0.3701 0.0000 vt 0.2104 0.3764 0.0000 vt 0.2164 0.3790 0.0000 vt 0.2226 0.3772 0.0000 vt 0.2272 0.3714 0.0000 vt 0.2292 0.3632 0.0000 vt 0.2278 0.3548 0.0000 vt 0.2236 0.3485 0.0000 vt 0.2176 0.3459 0.0000 vt 0.2114 0.3478 0.0000 vt 0.2256 0.3621 0.0000 vt 0.2267 0.3577 0.0000 vt 0.2264 0.3666 0.0000 vt 0.2287 0.3700 0.0000 vt 0.2319 0.3714 0.0000 vt 0.2353 0.3704 0.0000 vt 0.2378 0.3673 0.0000 vt 0.2388 0.3629 0.0000 vt 0.2381 0.3583 0.0000 vt 0.2358 0.3549 0.0000 vt 0.2326 0.3535 0.0000 vt 0.2292 0.3545 0.0000 vt 0.0969 0.3624 0.0000 vt 0.2376 0.3625 0.0000 vt 0.2403 0.3857 0.0000 vt 0.2191 0.3721 0.0000 vt 0.1896 0.3758 0.0000 vt 0.2009 0.3907 0.0000 vt 0.1545 0.3771 0.0000 vt 0.1543 0.3925 0.0000 vt 0.1233 0.3758 0.0000 vt 0.1127 0.3907 0.0000 vt 0.0875 0.3857 0.0000 vt 0.1043 0.3720 0.0000 vt 0.1027 0.3669 0.0000 vt 0.0853 0.3789 0.0000 vt 0.1188 0.3618 0.0000 vt 0.1067 0.3721 0.0000 vt 0.1483 0.3581 0.0000 vt 0.1461 0.3672 0.0000 vt 0.1834 0.3567 0.0000 vt 0.1927 0.3654 0.0000 vt 0.2146 0.3581 0.0000 vt 0.2343 0.3672 0.0000 vt 0.2595 0.3722 0.0000 vt 0.2336 0.3619 0.0000 vt 0.2617 0.3790 0.0000 vt 0.2352 0.3670 0.0000 vt 0.1819 0.3758 0.0000 vt 0.1983 0.3737 0.0000 vt 0.1705 0.3709 0.0000 vt 0.1624 0.3765 0.0000 vt 0.1452 0.3758 0.0000 vt 0.1346 0.3737 0.0000 vt 0.1337 0.3709 0.0000 vt 0.1426 0.3680 0.0000 vt 0.1590 0.3660 0.0000 vt 0.1785 0.3652 0.0000 vt 0.1958 0.3660 0.0000 vt 0.2063 0.3681 0.0000 vt 0.2072 0.3709 0.0000 vt 0.2345 0.4891 0.0000 vt 0.2227 0.4905 0.0000 vt 0.2144 0.4870 0.0000 vt 0.2086 0.4911 0.0000 vt 0.1961 0.4905 0.0000 vt 0.1885 0.4890 0.0000 vt 0.1879 0.4870 0.0000 vt 0.1943 0.4850 0.0000 vt 0.2062 0.4835 0.0000 vt 0.2202 0.4829 0.0000 vt 0.2327 0.4835 0.0000 vt 0.2403 0.4850 0.0000 vt 0.2410 0.4870 0.0000 vt 0.1164 0.3971 0.0000 vt 0.1571 0.3989 0.0000 vt 0.2029 0.3971 0.0000 vt 0.2415 0.3922 0.0000 vt 0.2625 0.3856 0.0000 vt 0.2604 0.3789 0.0000 vt 0.2356 0.3741 0.0000 vt 0.1949 0.3722 0.0000 vt 0.1491 0.3740 0.0000 vt 0.1105 0.3789 0.0000 vt 0.0895 0.3855 0.0000 vt 0.0917 0.3922 0.0000 vt 0.2032 0.4993 0.0000 vt 0.1984 0.4947 0.0000 vt 0.1662 0.4932 0.0000 vt 0.1761 0.4981 0.0000 vt 0.2336 0.4982 0.0000 vt 0.2346 0.4933 0.0000 vt 0.2593 0.4949 0.0000 vt 0.2652 0.4894 0.0000 vt 0.2732 0.4905 0.0000 vt 0.2818 0.4842 0.0000 vt 0.2718 0.4861 0.0000 vt 0.2801 0.4789 0.0000 vt 0.2554 0.4829 0.0000 vt 0.2605 0.4750 0.0000 vt 0.2283 0.4817 0.0000 vt 0.2283 0.4736 0.0000 vt 0.1920 0.4750 0.0000 vt 0.1978 0.4828 0.0000 vt 0.1722 0.4861 0.0000 vt 0.1615 0.4788 0.0000 vt 0.1582 0.4905 0.0000 vt 0.1449 0.4841 0.0000 vt 0.1597 0.4949 0.0000 vt 0.1466 0.4894 0.0000 vt 0.2102 0.3711 0.0000 vt 0.1859 0.3742 0.0000 vt 0.1571 0.3753 0.0000 vt 0.1315 0.3742 0.0000 vt 0.1159 0.3711 0.0000 vt 0.1145 0.3669 0.0000 vt 0.1277 0.3627 0.0000 vt 0.1520 0.3597 0.0000 vt 0.1808 0.3586 0.0000 vt 0.2065 0.3597 0.0000 vt 0.2221 0.3628 0.0000 vt 0.2234 0.3670 0.0000 vt 0.2285 0.4960 0.0000 vt 0.2468 0.4937 0.0000 vt 0.2068 0.4968 0.0000 vt 0.1875 0.4960 0.0000 vt 0.1757 0.4936 0.0000 vt 0.1747 0.4905 0.0000 vt 0.1847 0.4873 0.0000 vt 0.2030 0.4850 0.0000 vt 0.2247 0.4842 0.0000 vt 0.2440 0.4850 0.0000 vt 0.2558 0.4874 0.0000 vt 0.2568 0.4905 0.0000 vt 0.1953 0.4879 0.0000 vt 0.1622 0.4865 0.0000 vt 0.2325 0.4865 0.0000 vt 0.2639 0.4826 0.0000 vt 0.2810 0.4772 0.0000 vt 0.2792 0.4717 0.0000 vt 0.2591 0.4678 0.0000 vt 0.2260 0.4663 0.0000 vt 0.1888 0.4677 0.0000 vt 0.1575 0.4717 0.0000 vt 0.1404 0.4771 0.0000 vt 0.1421 0.4825 0.0000 g Object022 f 2369/2369/2310 2370/2370/2311 2371/2371/2312 f 2371/2371/2312 2372/2372/2313 2369/2369/2310 f 2370/2370/2311 2369/2369/2310 2373/2373/2314 f 2373/2373/2314 2374/2374/2315 2370/2370/2311 f 2374/2374/2315 2373/2373/2314 2375/2375/2316 f 2375/2375/2316 2376/2376/2317 2374/2374/2315 f 2376/2376/2317 2375/2375/2316 2377/2377/2318 f 2377/2377/2318 2378/2378/2319 2376/2376/2317 f 2377/2377/2318 2379/2379/2320 2380/2380/2321 f 2380/2380/2321 2378/2378/2319 2377/2377/2318 f 2379/2379/2320 2381/2381/2322 2382/2382/2323 f 2382/2382/2323 2380/2380/2321 2379/2379/2320 f 2383/2383/2324 2384/2384/2325 2382/2382/2323 f 2382/2382/2323 2381/2381/2322 2383/2383/2324 f 2384/2384/2325 2383/2383/2324 2385/2385/2326 f 2385/2385/2326 2386/2386/2327 2384/2384/2325 f 2386/2386/2327 2385/2385/2326 2387/2387/2328 f 2387/2387/2328 2388/2388/2329 2386/2386/2327 f 2388/2388/2329 2387/2387/2328 2389/2389/2330 f 2389/2389/2330 2390/2390/2331 2388/2388/2329 f 2389/2389/2330 2391/2391/2332 2392/2392/2333 f 2392/2392/2333 2390/2390/2331 2389/2389/2330 f 2391/2391/2332 2372/2372/2313 2371/2371/2312 f 2371/2371/2312 2392/2392/2333 2391/2391/2332 f 2370/2370/2311 2393/2393/2334 2394/2394/2335 f 2394/2394/2335 2371/2371/2312 2370/2370/2311 f 2374/2374/2315 2395/2395/2336 2393/2393/2334 f 2393/2393/2334 2370/2370/2311 2374/2374/2315 f 2376/2376/2317 2396/2396/2337 2395/2395/2336 f 2395/2395/2336 2374/2374/2315 2376/2376/2317 f 2378/2378/2319 2397/2397/2338 2396/2396/2337 f 2396/2396/2337 2376/2376/2317 2378/2378/2319 f 2380/2380/2321 2398/2398/2339 2397/2397/2338 f 2397/2397/2338 2378/2378/2319 2380/2380/2321 f 2382/2382/2323 2399/2399/2340 2398/2398/2339 f 2398/2398/2339 2380/2380/2321 2382/2382/2323 f 2384/2384/2325 2400/2400/2341 2399/2399/2340 f 2399/2399/2340 2382/2382/2323 2384/2384/2325 f 2386/2386/2327 2401/2401/2342 2400/2400/2341 f 2400/2400/2341 2384/2384/2325 2386/2386/2327 f 2388/2388/2329 2402/2402/2343 2401/2401/2342 f 2401/2401/2342 2386/2386/2327 2388/2388/2329 f 2390/2390/2331 2403/2403/2344 2402/2402/2343 f 2402/2402/2343 2388/2388/2329 2390/2390/2331 f 2392/2392/2333 2404/2404/2345 2403/2403/2344 f 2403/2403/2344 2390/2390/2331 2392/2392/2333 f 2371/2371/2312 2394/2394/2335 2404/2404/2345 f 2404/2404/2345 2392/2392/2333 2371/2371/2312 f 2393/2393/2334 2405/2405/2346 2406/2406/2347 f 2406/2406/2347 2394/2394/2335 2393/2393/2334 f 2395/2395/2336 2407/2407/2348 2405/2405/2346 f 2405/2405/2346 2393/2393/2334 2395/2395/2336 f 2396/2396/2337 2408/2408/2349 2407/2407/2348 f 2407/2407/2348 2395/2395/2336 2396/2396/2337 f 2397/2397/2338 2409/2409/2350 2408/2408/2349 f 2408/2408/2349 2396/2396/2337 2397/2397/2338 f 2398/2398/2339 2410/2410/2351 2409/2409/2350 f 2409/2409/2350 2397/2397/2338 2398/2398/2339 f 2399/2399/2340 2411/2411/2352 2410/2410/2351 f 2410/2410/2351 2398/2398/2339 2399/2399/2340 f 2400/2400/2341 2412/2412/2353 2411/2411/2352 f 2411/2411/2352 2399/2399/2340 2400/2400/2341 f 2401/2401/2342 2413/2413/2354 2412/2412/2353 f 2412/2412/2353 2400/2400/2341 2401/2401/2342 f 2402/2402/2343 2414/2414/2355 2413/2413/2354 f 2413/2413/2354 2401/2401/2342 2402/2402/2343 f 2403/2403/2344 2415/2415/2356 2414/2414/2355 f 2414/2414/2355 2402/2402/2343 2403/2403/2344 f 2404/2404/2345 2416/2416/2357 2415/2415/2356 f 2415/2415/2356 2403/2403/2344 2404/2404/2345 f 2394/2394/2335 2406/2406/2347 2416/2416/2357 f 2416/2416/2357 2404/2404/2345 2394/2394/2335 f 2405/2405/2346 2417/2417/2358 2418/2418/2359 f 2418/2418/2359 2406/2406/2347 2405/2405/2346 f 2407/2407/2348 2419/2419/2360 2417/2417/2358 f 2417/2417/2358 2405/2405/2346 2407/2407/2348 f 2408/2408/2349 2420/2420/2361 2419/2419/2360 f 2419/2419/2360 2407/2407/2348 2408/2408/2349 f 2409/2409/2350 2421/2421/2362 2420/2420/2361 f 2420/2420/2361 2408/2408/2349 2409/2409/2350 f 2410/2410/2351 2422/2422/2363 2421/2421/2362 f 2421/2421/2362 2409/2409/2350 2410/2410/2351 f 2411/2411/2352 2423/2423/2364 2422/2422/2363 f 2422/2422/2363 2410/2410/2351 2411/2411/2352 f 2412/2412/2353 2424/2424/2365 2423/2423/2364 f 2423/2423/2364 2411/2411/2352 2412/2412/2353 f 2413/2413/2354 2425/2425/2366 2424/2424/2365 f 2424/2424/2365 2412/2412/2353 2413/2413/2354 f 2414/2414/2355 2426/2426/2367 2425/2425/2366 f 2425/2425/2366 2413/2413/2354 2414/2414/2355 f 2415/2415/2356 2427/2427/2368 2426/2426/2367 f 2426/2426/2367 2414/2414/2355 2415/2415/2356 f 2416/2416/2357 2428/2428/2369 2427/2427/2368 f 2427/2427/2368 2415/2415/2356 2416/2416/2357 f 2406/2406/2347 2418/2418/2359 2428/2428/2369 f 2428/2428/2369 2416/2416/2357 2406/2406/2347 f 2417/2417/2358 2429/2429/2370 2430/2430/2371 f 2430/2430/2371 2418/2418/2359 2417/2417/2358 f 2419/2419/2360 2431/2431/2372 2429/2429/2370 f 2429/2429/2370 2417/2417/2358 2419/2419/2360 f 2420/2420/2361 2432/2432/2373 2431/2431/2372 f 2431/2431/2372 2419/2419/2360 2420/2420/2361 f 2421/2421/2362 2433/2433/2374 2432/2432/2373 f 2432/2432/2373 2420/2420/2361 2421/2421/2362 f 2422/2422/2363 2434/2434/2375 2433/2433/2374 f 2433/2433/2374 2421/2421/2362 2422/2422/2363 f 2423/2423/2364 2435/2435/2376 2434/2434/2375 f 2434/2434/2375 2422/2422/2363 2423/2423/2364 f 2424/2424/2365 2436/2436/2377 2435/2435/2376 f 2435/2435/2376 2423/2423/2364 2424/2424/2365 f 2425/2425/2366 2437/2437/2378 2436/2436/2377 f 2436/2436/2377 2424/2424/2365 2425/2425/2366 f 2426/2426/2367 2438/2438/2379 2437/2437/2378 f 2437/2437/2378 2425/2425/2366 2426/2426/2367 f 2427/2427/2368 2439/2439/2380 2438/2438/2379 f 2438/2438/2379 2426/2426/2367 2427/2427/2368 f 2428/2428/2369 2440/2440/2381 2439/2439/2380 f 2439/2439/2380 2427/2427/2368 2428/2428/2369 f 2418/2418/2359 2430/2430/2371 2440/2440/2381 f 2440/2440/2381 2428/2428/2369 2418/2418/2359 f 2429/2429/2370 2441/2441/2382 2442/2442/2383 f 2442/2442/2383 2430/2430/2371 2429/2429/2370 f 2431/2431/2372 2443/2443/2384 2441/2441/2382 f 2441/2441/2382 2429/2429/2370 2431/2431/2372 f 2432/2432/2373 2444/2444/2385 2443/2443/2384 f 2443/2443/2384 2431/2431/2372 2432/2432/2373 f 2433/2433/2374 2445/2445/2386 2444/2444/2385 f 2444/2444/2385 2432/2432/2373 2433/2433/2374 f 2434/2434/2375 2446/2446/2387 2445/2445/2386 f 2445/2445/2386 2433/2433/2374 2434/2434/2375 f 2435/2435/2376 2447/2447/2388 2446/2446/2387 f 2446/2446/2387 2434/2434/2375 2435/2435/2376 f 2436/2436/2377 2448/2448/2389 2447/2447/2388 f 2447/2447/2388 2435/2435/2376 2436/2436/2377 f 2437/2437/2378 2449/2449/2390 2448/2448/2389 f 2448/2448/2389 2436/2436/2377 2437/2437/2378 f 2438/2438/2379 2450/2450/2391 2449/2449/2390 f 2449/2449/2390 2437/2437/2378 2438/2438/2379 f 2439/2439/2380 2451/2451/2392 2450/2450/2391 f 2450/2450/2391 2438/2438/2379 2439/2439/2380 f 2440/2440/2381 2452/2452/2393 2451/2451/2392 f 2451/2451/2392 2439/2439/2380 2440/2440/2381 f 2430/2430/2371 2442/2442/2383 2452/2452/2393 f 2452/2452/2393 2440/2440/2381 2430/2430/2371 f 2369/2369/2310 2372/2372/2313 2453/2453/2394 f 2373/2373/2314 2369/2369/2310 2453/2453/2394 f 2375/2375/2316 2373/2373/2314 2453/2453/2394 f 2377/2377/2318 2375/2375/2316 2453/2453/2394 f 2379/2379/2320 2377/2377/2318 2453/2453/2394 f 2381/2381/2322 2379/2379/2320 2453/2453/2394 f 2383/2383/2324 2381/2381/2322 2453/2453/2394 f 2385/2385/2326 2383/2383/2324 2453/2453/2394 f 2387/2387/2328 2385/2385/2326 2453/2453/2394 f 2389/2389/2330 2387/2387/2328 2453/2453/2394 f 2391/2391/2332 2389/2389/2330 2453/2453/2394 f 2372/2372/2313 2391/2391/2332 2453/2453/2394 f 2442/2442/2383 2441/2441/2382 2454/2454/2395 f 2441/2441/2382 2443/2443/2384 2454/2454/2395 f 2443/2443/2384 2444/2444/2385 2454/2454/2395 f 2444/2444/2385 2445/2445/2386 2454/2454/2395 f 2445/2445/2386 2446/2446/2387 2454/2454/2395 f 2446/2446/2387 2447/2447/2388 2454/2454/2395 f 2447/2447/2388 2448/2448/2389 2454/2454/2395 f 2448/2448/2389 2449/2449/2390 2454/2454/2395 f 2449/2449/2390 2450/2450/2391 2454/2454/2395 f 2450/2450/2391 2451/2451/2392 2454/2454/2395 f 2451/2451/2392 2452/2452/2393 2454/2454/2395 f 2452/2452/2393 2442/2442/2383 2454/2454/2395 f 2455/2455/2396 2456/2456/2397 2457/2457/2398 f 2457/2457/2398 2458/2458/2399 2455/2455/2396 f 2458/2458/2399 2457/2457/2398 2459/2459/2400 f 2459/2459/2400 2460/2460/2401 2458/2458/2399 f 2460/2460/2401 2459/2459/2400 2461/2461/2402 f 2461/2461/2402 2462/2462/2403 2460/2460/2401 f 2463/2463/2404 2462/2462/2403 2461/2461/2402 f 2461/2461/2402 2464/2464/2405 2463/2463/2404 f 2465/2465/2406 2466/2466/2407 2463/2463/2404 f 2463/2463/2404 2464/2464/2405 2465/2465/2406 f 2467/2467/2408 2468/2468/2409 2466/2466/2407 f 2466/2466/2407 2465/2465/2406 2467/2467/2408 f 2469/2469/2410 2470/2470/2411 2468/2468/2409 f 2468/2468/2409 2467/2467/2408 2469/2469/2410 f 2469/2469/2410 2471/2471/2412 2472/2472/2413 f 2472/2472/2413 2470/2470/2411 2469/2469/2410 f 2473/2473/2414 2474/2474/2415 2472/2472/2413 f 2472/2472/2413 2471/2471/2412 2473/2473/2414 f 2475/2475/2416 2474/2474/2415 2473/2473/2414 f 2473/2473/2414 2476/2476/2417 2475/2475/2416 f 2477/2477/2418 2475/2475/2416 2476/2476/2417 f 2476/2476/2417 2478/2478/2419 2477/2477/2418 f 2456/2456/2397 2455/2455/2396 2477/2477/2418 f 2477/2477/2418 2478/2478/2419 2456/2456/2397 f 2479/2479/2420 2480/2480/2421 2481/2481/2357 f 2482/2482/2422 2479/2479/2420 2481/2481/2357 f 2483/2483/2423 2482/2482/2422 2481/2481/2357 f 2484/2484/2424 2483/2483/2423 2481/2481/2357 f 2485/2485/2425 2484/2484/2424 2481/2481/2357 f 2486/2486/2426 2485/2485/2425 2481/2481/2357 f 2487/2487/2427 2486/2486/2426 2481/2481/2357 f 2488/2488/2428 2487/2487/2427 2481/2481/2357 f 2489/2489/2429 2488/2488/2428 2481/2481/2357 f 2490/2490/2430 2489/2489/2429 2481/2481/2357 f 2491/2491/2431 2490/2490/2430 2481/2481/2357 f 2480/2480/2421 2491/2491/2431 2481/2481/2357 f 2492/2492/2432 2493/2493/2433 2494/2494/2434 f 2493/2493/2433 2495/2495/2435 2494/2494/2434 f 2495/2495/2435 2496/2496/2436 2494/2494/2434 f 2496/2496/2436 2497/2497/2437 2494/2494/2434 f 2497/2497/2437 2498/2498/2438 2494/2494/2434 f 2498/2498/2438 2499/2499/2439 2494/2494/2434 f 2499/2499/2439 2500/2500/2440 2494/2494/2434 f 2500/2500/2440 2501/2501/2441 2494/2494/2434 f 2501/2501/2441 2502/2502/2442 2494/2494/2434 f 2502/2502/2442 2503/2503/2443 2494/2494/2434 f 2503/2503/2443 2504/2504/2444 2494/2494/2434 f 2504/2504/2444 2492/2492/2432 2494/2494/2434 f 2462/2462/2403 2505/2505/2445 2506/2506/2446 f 2506/2506/2446 2460/2460/2401 2462/2462/2403 f 2507/2507/2447 2458/2458/2399 2460/2460/2401 f 2460/2460/2401 2506/2506/2446 2507/2507/2447 f 2508/2508/2448 2455/2455/2396 2458/2458/2399 f 2458/2458/2399 2507/2507/2447 2508/2508/2448 f 2455/2455/2396 2508/2508/2448 2509/2509/2449 f 2509/2509/2449 2477/2477/2418 2455/2455/2396 f 2477/2477/2418 2509/2509/2449 2510/2510/2450 f 2510/2510/2450 2475/2475/2416 2477/2477/2418 f 2474/2474/2415 2475/2475/2416 2510/2510/2450 f 2510/2510/2450 2511/2511/2451 2474/2474/2415 f 2472/2472/2413 2474/2474/2415 2511/2511/2451 f 2511/2511/2451 2512/2512/2452 2472/2472/2413 f 2513/2513/2453 2470/2470/2411 2472/2472/2413 f 2472/2472/2413 2512/2512/2452 2513/2513/2453 f 2514/2514/2454 2468/2468/2409 2470/2470/2411 f 2470/2470/2411 2513/2513/2453 2514/2514/2454 f 2466/2466/2407 2468/2468/2409 2514/2514/2454 f 2514/2514/2454 2515/2515/2455 2466/2466/2407 f 2463/2463/2404 2466/2466/2407 2515/2515/2455 f 2515/2515/2455 2516/2516/2456 2463/2463/2404 f 2462/2462/2403 2463/2463/2404 2516/2516/2456 f 2516/2516/2456 2505/2505/2445 2462/2462/2403 f 2517/2517/2457 2518/2518/2458 2519/2519/2459 f 2519/2519/2459 2520/2520/2460 2517/2517/2457 f 2521/2521/2461 2522/2522/2462 2518/2518/2458 f 2518/2518/2458 2517/2517/2457 2521/2521/2461 f 2523/2523/2463 2524/2524/2464 2522/2522/2462 f 2522/2522/2462 2521/2521/2461 2523/2523/2463 f 2523/2523/2463 2525/2525/2465 2526/2526/2466 f 2526/2526/2466 2524/2524/2464 2523/2523/2463 f 2526/2526/2466 2525/2525/2465 2527/2527/2467 f 2527/2527/2467 2528/2528/2468 2526/2526/2466 f 2528/2528/2468 2527/2527/2467 2529/2529/2469 f 2529/2529/2469 2530/2530/2470 2528/2528/2468 f 2530/2530/2470 2529/2529/2469 2531/2531/2471 f 2531/2531/2471 2532/2532/2472 2530/2530/2470 f 2533/2533/2473 2532/2532/2472 2531/2531/2471 f 2531/2531/2471 2534/2534/2474 2533/2533/2473 f 2533/2533/2473 2534/2534/2474 2535/2535/2475 f 2535/2535/2475 2536/2536/2476 2533/2533/2473 f 2536/2536/2476 2535/2535/2475 2537/2537/2477 f 2537/2537/2477 2538/2538/2478 2536/2536/2476 f 2538/2538/2478 2537/2537/2477 2539/2539/2479 f 2539/2539/2479 2540/2540/2480 2538/2538/2478 f 2520/2520/2460 2519/2519/2459 2540/2540/2480 f 2540/2540/2480 2539/2539/2479 2520/2520/2460 f 2456/2456/2397 2541/2541/2481 2542/2542/2482 f 2542/2542/2482 2457/2457/2398 2456/2456/2397 f 2457/2457/2398 2542/2542/2482 2543/2543/2483 f 2543/2543/2483 2459/2459/2400 2457/2457/2398 f 2544/2544/2484 2461/2461/2402 2459/2459/2400 f 2459/2459/2400 2543/2543/2483 2544/2544/2484 f 2461/2461/2402 2544/2544/2484 2545/2545/2485 f 2545/2545/2485 2464/2464/2405 2461/2461/2402 f 2464/2464/2405 2545/2545/2485 2546/2546/2486 f 2546/2546/2486 2465/2465/2406 2464/2464/2405 f 2465/2465/2406 2546/2546/2486 2547/2547/2487 f 2547/2547/2487 2467/2467/2408 2465/2465/2406 f 2469/2469/2410 2467/2467/2408 2547/2547/2487 f 2547/2547/2487 2548/2548/2488 2469/2469/2410 f 2469/2469/2410 2548/2548/2488 2549/2549/2489 f 2549/2549/2489 2471/2471/2412 2469/2469/2410 f 2473/2473/2414 2471/2471/2412 2549/2549/2489 f 2549/2549/2489 2550/2550/2490 2473/2473/2414 f 2476/2476/2417 2473/2473/2414 2550/2550/2490 f 2550/2550/2490 2551/2551/2491 2476/2476/2417 f 2478/2478/2419 2476/2476/2417 2551/2551/2491 f 2551/2551/2491 2552/2552/2492 2478/2478/2419 f 2456/2456/2397 2478/2478/2419 2552/2552/2492 f 2552/2552/2492 2541/2541/2481 2456/2456/2397 f 2541/2541/2481 2480/2480/2421 2479/2479/2420 f 2479/2479/2420 2542/2542/2482 2541/2541/2481 f 2543/2543/2483 2542/2542/2482 2479/2479/2420 f 2479/2479/2420 2482/2482/2422 2543/2543/2483 f 2544/2544/2484 2543/2543/2483 2482/2482/2422 f 2482/2482/2422 2483/2483/2423 2544/2544/2484 f 2545/2545/2485 2544/2544/2484 2483/2483/2423 f 2483/2483/2423 2484/2484/2424 2545/2545/2485 f 2546/2546/2486 2545/2545/2485 2484/2484/2424 f 2484/2484/2424 2485/2485/2425 2546/2546/2486 f 2547/2547/2487 2546/2546/2486 2485/2485/2425 f 2485/2485/2425 2486/2486/2426 2547/2547/2487 f 2548/2548/2488 2547/2547/2487 2486/2486/2426 f 2486/2486/2426 2487/2487/2427 2548/2548/2488 f 2487/2487/2427 2488/2488/2428 2549/2549/2489 f 2549/2549/2489 2548/2548/2488 2487/2487/2427 f 2550/2550/2490 2549/2549/2489 2488/2488/2428 f 2488/2488/2428 2489/2489/2429 2550/2550/2490 f 2551/2551/2491 2550/2550/2490 2489/2489/2429 f 2489/2489/2429 2490/2490/2430 2551/2551/2491 f 2552/2552/2492 2551/2551/2491 2490/2490/2430 f 2490/2490/2430 2491/2491/2431 2552/2552/2492 f 2552/2552/2492 2491/2491/2431 2480/2480/2421 f 2480/2480/2421 2541/2541/2481 2552/2552/2492 f 2521/2521/2461 2553/2553/2493 2554/2554/2494 f 2554/2554/2494 2523/2523/2463 2521/2521/2461 f 2521/2521/2461 2517/2517/2457 2555/2555/2495 f 2555/2555/2495 2553/2553/2493 2521/2521/2461 f 2517/2517/2457 2520/2520/2460 2556/2556/2496 f 2556/2556/2496 2555/2555/2495 2517/2517/2457 f 2520/2520/2460 2539/2539/2479 2557/2557/2497 f 2557/2557/2497 2556/2556/2496 2520/2520/2460 f 2558/2558/2498 2557/2557/2497 2539/2539/2479 f 2539/2539/2479 2537/2537/2477 2558/2558/2498 f 2537/2537/2477 2535/2535/2475 2559/2559/2499 f 2559/2559/2499 2558/2558/2498 2537/2537/2477 f 2535/2535/2475 2534/2534/2474 2560/2560/2500 f 2560/2560/2500 2559/2559/2499 2535/2535/2475 f 2534/2534/2474 2531/2531/2471 2561/2561/2501 f 2561/2561/2501 2560/2560/2500 2534/2534/2474 f 2561/2561/2501 2531/2531/2471 2529/2529/2469 f 2529/2529/2469 2562/2562/2502 2561/2561/2501 f 2562/2562/2502 2529/2529/2469 2527/2527/2467 f 2527/2527/2467 2563/2563/2503 2562/2562/2502 f 2525/2525/2465 2564/2564/2504 2563/2563/2503 f 2563/2563/2503 2527/2527/2467 2525/2525/2465 f 2523/2523/2463 2554/2554/2494 2564/2564/2504 f 2564/2564/2504 2525/2525/2465 2523/2523/2463 f 2553/2553/2493 2493/2493/2433 2492/2492/2432 f 2492/2492/2432 2554/2554/2494 2553/2553/2493 f 2555/2555/2495 2495/2495/2435 2493/2493/2433 f 2493/2493/2433 2553/2553/2493 2555/2555/2495 f 2556/2556/2496 2496/2496/2436 2495/2495/2435 f 2495/2495/2435 2555/2555/2495 2556/2556/2496 f 2557/2557/2497 2497/2497/2437 2496/2496/2436 f 2496/2496/2436 2556/2556/2496 2557/2557/2497 f 2558/2558/2498 2498/2498/2438 2497/2497/2437 f 2497/2497/2437 2557/2557/2497 2558/2558/2498 f 2559/2559/2499 2499/2499/2439 2498/2498/2438 f 2498/2498/2438 2558/2558/2498 2559/2559/2499 f 2560/2560/2500 2500/2500/2440 2499/2499/2439 f 2499/2499/2439 2559/2559/2499 2560/2560/2500 f 2561/2561/2501 2501/2501/2441 2500/2500/2440 f 2500/2500/2440 2560/2560/2500 2561/2561/2501 f 2562/2562/2502 2502/2502/2442 2501/2501/2441 f 2501/2501/2441 2561/2561/2501 2562/2562/2502 f 2563/2563/2503 2503/2503/2443 2502/2502/2442 f 2502/2502/2442 2562/2562/2502 2563/2563/2503 f 2564/2564/2504 2504/2504/2444 2503/2503/2443 f 2503/2503/2443 2563/2563/2503 2564/2564/2504 f 2564/2564/2504 2554/2554/2494 2492/2492/2432 f 2492/2492/2432 2504/2504/2444 2564/2564/2504 f 2565/2565/2505 2566/2566/2506 2519/2519/2459 f 2519/2519/2459 2518/2518/2458 2565/2565/2505 f 2567/2567/2507 2565/2565/2505 2518/2518/2458 f 2518/2518/2458 2522/2522/2462 2567/2567/2507 f 2522/2522/2462 2524/2524/2464 2568/2568/2508 f 2568/2568/2508 2567/2567/2507 2522/2522/2462 f 2569/2569/2509 2568/2568/2508 2524/2524/2464 f 2524/2524/2464 2526/2526/2466 2569/2569/2509 f 2570/2570/2510 2569/2569/2509 2526/2526/2466 f 2526/2526/2466 2528/2528/2468 2570/2570/2510 f 2570/2570/2510 2528/2528/2468 2530/2530/2470 f 2530/2530/2470 2571/2571/2511 2570/2570/2510 f 2571/2571/2511 2530/2530/2470 2532/2532/2472 f 2532/2532/2472 2572/2572/2512 2571/2571/2511 f 2572/2572/2512 2532/2532/2472 2533/2533/2473 f 2533/2533/2473 2573/2573/2513 2572/2572/2512 f 2573/2573/2513 2533/2533/2473 2536/2536/2476 f 2536/2536/2476 2574/2574/2514 2573/2573/2513 f 2574/2574/2514 2536/2536/2476 2538/2538/2478 f 2538/2538/2478 2575/2575/2515 2574/2574/2514 f 2575/2575/2515 2538/2538/2478 2540/2540/2480 f 2540/2540/2480 2576/2576/2516 2575/2575/2515 f 2540/2540/2480 2519/2519/2459 2566/2566/2506 f 2566/2566/2506 2576/2576/2516 2540/2540/2480 f 2505/2505/2445 2566/2566/2506 2565/2565/2505 f 2565/2565/2505 2506/2506/2446 2505/2505/2445 f 2506/2506/2446 2565/2565/2505 2567/2567/2507 f 2567/2567/2507 2507/2507/2447 2506/2506/2446 f 2507/2507/2447 2567/2567/2507 2568/2568/2508 f 2568/2568/2508 2508/2508/2448 2507/2507/2447 f 2508/2508/2448 2568/2568/2508 2569/2569/2509 f 2569/2569/2509 2509/2509/2449 2508/2508/2448 f 2509/2509/2449 2569/2569/2509 2570/2570/2510 f 2570/2570/2510 2510/2510/2450 2509/2509/2449 f 2510/2510/2450 2570/2570/2510 2571/2571/2511 f 2571/2571/2511 2511/2511/2451 2510/2510/2450 f 2511/2511/2451 2571/2571/2511 2572/2572/2512 f 2572/2572/2512 2512/2512/2452 2511/2511/2451 f 2512/2512/2452 2572/2572/2512 2573/2573/2513 f 2573/2573/2513 2513/2513/2453 2512/2512/2452 f 2513/2513/2453 2573/2573/2513 2574/2574/2514 f 2574/2574/2514 2514/2514/2454 2513/2513/2453 f 2514/2514/2454 2574/2574/2514 2575/2575/2515 f 2575/2575/2515 2515/2515/2455 2514/2514/2454 f 2515/2515/2455 2575/2575/2515 2576/2576/2516 f 2576/2576/2516 2516/2516/2456 2515/2515/2455 f 2505/2505/2445 2516/2516/2456 2576/2576/2516 f 2576/2576/2516 2566/2566/2506 2505/2505/2445 v -19.5795 33.7966 43.9827 v -20.4802 34.3637 44.0835 v -20.7926 33.3369 44.4669 v -20.3052 33.0301 44.4123 v -19.0865 32.8713 43.7744 v -20.0384 32.5293 44.2995 v -19.1333 31.8353 43.5142 v -20.0637 31.9686 44.1587 v -20.3743 31.4984 44.0277 v -19.7074 30.9666 43.2720 v -20.6548 30.4977 43.1127 v -20.8871 31.2447 43.9415 v -21.7219 30.5544 43.0789 v -21.4646 31.2754 43.9232 v -21.9520 31.5822 43.9777 v -22.6226 31.1214 43.1797 v -22.2188 32.0830 44.0905 v -23.1156 32.0468 43.3881 v -22.1935 32.6437 44.2313 v -23.0688 33.0828 43.6483 v -21.8829 33.1139 44.3624 v -22.4948 33.9515 43.8904 v -21.5473 34.4204 44.0497 v -21.3701 33.3676 44.4486 v -19.0718 34.4355 43.1872 v -20.2487 35.1764 43.3189 v -18.4277 33.2264 42.9149 v -18.4888 31.8729 42.5751 v -19.2389 30.7378 42.2586 v -20.4768 30.1252 42.0505 v -21.8710 30.1993 42.0063 v -23.0478 30.9402 42.1381 v -23.6919 32.1492 42.4103 v -23.6308 33.5028 42.7502 v -22.8808 34.6379 43.0666 v -21.6428 35.2505 43.2748 v -18.8594 34.8495 42.1469 v -20.1332 35.6514 42.2894 v -18.1622 33.5406 41.8521 v -18.2284 32.0757 41.4843 v -19.0402 30.8470 41.1418 v -20.3801 30.1840 40.9165 v -21.8892 30.2642 40.8687 v -23.1629 31.0660 41.0112 v -23.8602 32.3748 41.3060 v -23.7940 33.8398 41.6738 v -22.9822 35.0684 42.0163 v -21.6422 35.7315 42.2416 v -20.1514 35.7162 41.1518 v -18.9746 34.9753 41.0200 v -18.3304 33.7663 40.7478 v -18.3916 32.4127 40.4079 v -19.1416 31.2776 40.0915 v -20.3795 30.6650 39.8833 v -21.7737 30.7391 39.8392 v -22.9505 31.4800 39.9709 v -23.5946 32.6891 40.2432 v -23.5335 34.0426 40.5830 v -22.7835 35.1777 40.8995 v -21.5455 35.7903 41.1076 v -19.3998 34.7941 39.9784 v -20.3005 35.3612 40.0792 v -18.9068 33.8687 39.7700 v -18.9535 32.8327 39.5098 v -19.5276 31.9640 39.2677 v -20.4751 31.4951 39.1084 v -21.5421 31.5518 39.0746 v -22.4428 32.1189 39.1754 v -22.9358 33.0442 39.3838 v -22.8890 34.0802 39.6439 v -22.3150 34.9490 39.8861 v -21.3675 35.4178 40.0454 v -20.0703 34.3333 39.1804 v -20.5577 34.6401 39.2349 v -19.8035 33.8325 39.0676 v -19.8288 33.2718 38.9268 v -20.1395 32.8016 38.7957 v -20.6522 32.5479 38.7095 v -21.2297 32.5786 38.6912 v -21.7172 32.8854 38.7458 v -21.9840 33.3862 38.8586 v -21.9587 33.9469 38.9994 v -21.6480 34.4171 39.1304 v -21.1352 34.6708 39.2166 v -21.1383 32.2525 44.4106 v -20.8841 33.6631 38.7476 v -18.1014 26.4706 42.6641 v -16.9550 28.1273 42.0838 v -18.6198 29.6806 42.3959 v -19.0023 27.3109 42.8330 v -17.5488 25.1837 42.3684 v -15.9340 25.7496 41.5373 v -17.4927 23.7951 42.0250 v -15.8303 23.1838 40.9029 v -16.6718 21.1182 40.3506 v -17.9480 22.6770 41.7261 v -18.7929 22.1292 41.5517 v -18.2328 20.1056 40.0283 v -19.8009 22.2981 41.5485 v -20.0953 20.4177 40.0224 v -20.7018 23.1385 41.7174 v -21.7600 21.9707 40.3345 v -21.2542 24.4253 42.0131 v -22.7810 24.3484 40.8810 v -21.3105 25.8139 42.3565 v -22.8847 26.9143 41.5154 v -20.8551 26.9320 42.6554 v -22.0433 28.9801 42.0678 v -20.0102 27.4799 42.8298 v -20.4822 29.9925 42.3900 v -16.1524 29.4369 40.8828 v -18.3277 31.4662 41.2906 v -14.8186 26.3303 40.1689 v -14.6830 22.9781 39.3399 v -15.7824 20.2789 38.6183 v -17.8221 18.9560 38.1972 v -20.2555 19.3637 38.1895 v -22.4306 21.3930 38.5973 v -23.7645 24.4996 39.3113 v -23.9000 27.8519 40.1402 v -22.8007 30.5510 40.8619 v -20.7610 31.8739 41.2829 v -15.8284 30.1318 39.5182 v -18.1828 32.3282 39.9596 v -14.3845 26.7689 38.7454 v -14.2379 23.1407 37.8482 v -15.4278 20.2191 37.0670 v -17.6355 18.7871 36.6113 v -20.2694 19.2286 36.6030 v -22.6237 21.4249 37.0444 v -24.0676 24.7878 37.8172 v -24.2142 28.4160 38.7144 v -23.0243 31.3376 39.4955 v -20.8166 32.7695 39.9513 v -16.0869 29.8009 39.4216 v -18.2621 31.8302 39.8294 v -14.7530 26.6943 38.7077 v -14.6175 23.3420 37.8787 v -15.7168 20.6429 37.1571 v -17.7565 19.3199 36.7360 v -20.1899 19.7277 36.7283 v -22.3650 21.7570 37.1361 v -23.6989 24.8636 37.8501 v -23.8344 28.2159 38.6790 v -22.7351 30.9150 39.4007 v -20.6954 32.2379 39.8218 v -16.8234 28.8578 39.1515 v -18.4882 30.4110 39.4636 v -15.8024 26.4800 38.6050 v -15.6987 23.9142 37.9706 v -16.5401 21.8486 37.4182 v -18.1012 20.8360 37.0959 v -19.9636 21.1481 37.0901 v -21.6284 22.7011 37.4022 v -22.6493 25.0789 37.9486 v -22.7531 27.6447 38.5831 v -21.9116 29.7105 39.1354 v -20.3505 30.7229 39.4577 v -17.9256 27.4458 38.7488 v -18.8265 28.2862 38.9177 v -17.3730 26.1590 38.4531 v -17.3169 24.7704 38.1097 v -17.7723 23.6523 37.8107 v -18.6171 23.1044 37.6363 v -19.6251 23.2734 37.6332 v -20.5260 24.1137 37.8021 v -21.0786 25.4006 38.0978 v -21.1347 26.7892 38.4412 v -20.6793 27.9073 38.7401 v -19.8345 28.4552 38.9145 v -19.4171 24.7188 42.5355 v -19.2258 25.7800 38.2750 vn 0.5022 0.3010 0.8106 vn 0.1871 0.4994 0.8459 vn 0.0834 0.1576 0.9840 vn 0.2621 0.0451 0.9640 vn 0.6747 -0.0227 0.7377 vn 0.3599 -0.1385 0.9226 vn 0.6583 -0.3851 0.6467 vn 0.3506 -0.3440 0.8710 vn 0.2368 -0.5164 0.8230 vn 0.4575 -0.6891 0.5620 vn 0.1260 -0.8531 0.5062 vn 0.0488 -0.6094 0.7914 vn -0.2473 -0.8333 0.4944 vn -0.1629 -0.5981 0.7847 vn -0.3415 -0.4856 0.8047 vn -0.5624 -0.6349 0.5297 vn -0.4393 -0.3021 0.8460 vn -0.7349 -0.3112 0.6026 vn -0.4301 -0.0966 0.8976 vn -0.7185 0.0513 0.6936 vn -0.3162 0.0758 0.9457 vn -0.5177 0.3552 0.7783 vn -0.1862 0.5193 0.8341 vn -0.1282 0.1688 0.9773 vn 0.6677 0.5115 0.5408 vn 0.2629 0.7664 0.5862 vn 0.8893 0.0955 0.4472 vn 0.8683 -0.3701 0.3302 vn 0.6103 -0.7606 0.2214 vn 0.1844 -0.9714 0.1498 vn -0.2952 -0.9459 0.1346 vn -0.7001 -0.6910 0.1799 vn -0.9217 -0.2751 0.2736 vn -0.9007 0.1906 0.3905 vn -0.6426 0.5811 0.4994 vn -0.2167 0.7918 0.5710 vn 0.7367 0.6477 0.1944 vn 0.3006 0.9222 0.2432 vn 0.9754 0.1996 0.0935 vn 0.9528 -0.3020 -0.0325 vn 0.6748 -0.7226 -0.1497 vn 0.2160 -0.9497 -0.2269 vn -0.3006 -0.9222 -0.2432 vn -0.7367 -0.6477 -0.1944 vn -0.9754 -0.1996 -0.0935 vn -0.9528 0.3020 0.0325 vn -0.6748 0.7226 0.1497 vn -0.2161 0.9497 0.2269 vn 0.2952 0.9459 -0.1346 vn 0.7001 0.6910 -0.1799 vn 0.9217 0.2751 -0.2736 vn 0.9007 -0.1906 -0.3905 vn 0.6426 -0.5811 -0.4994 vn 0.2167 -0.7918 -0.5710 vn -0.2629 -0.7664 -0.5862 vn -0.6677 -0.5115 -0.5409 vn -0.8893 -0.0955 -0.4472 vn -0.8683 0.3701 -0.3303 vn -0.6103 0.7606 -0.2214 vn -0.1844 0.9714 -0.1498 vn 0.5624 0.6349 -0.5297 vn 0.2473 0.8333 -0.4944 vn 0.7349 0.3112 -0.6026 vn 0.7185 -0.0513 -0.6936 vn 0.5177 -0.3552 -0.7783 vn 0.1862 -0.5193 -0.8341 vn -0.1871 -0.4994 -0.8459 vn -0.5022 -0.3011 -0.8106 vn -0.6747 0.0227 -0.7377 vn -0.6583 0.3851 -0.6467 vn -0.4575 0.6891 -0.5620 vn -0.1260 0.8531 -0.5063 vn 0.3415 0.4857 -0.8047 vn 0.1629 0.5981 -0.7847 vn 0.4393 0.3021 -0.8460 vn 0.4300 0.0966 -0.8976 vn 0.3162 -0.0758 -0.9457 vn 0.1282 -0.1688 -0.9773 vn -0.0835 -0.1575 -0.9840 vn -0.2621 -0.0451 -0.9640 vn -0.3599 0.1385 -0.9226 vn -0.3506 0.3440 -0.8710 vn -0.2368 0.5164 -0.8230 vn -0.0488 0.6094 -0.7914 vn -0.0435 -0.2415 0.9694 vn 0.0435 0.2415 -0.9694 vn 0.2651 -0.0351 0.9636 vn 0.5260 0.1829 0.8306 vn 0.2505 0.3361 0.9079 vn 0.1145 0.0409 0.9926 vn 0.3331 -0.1467 0.9314 vn 0.6500 -0.0335 0.7592 vn 0.3204 -0.2781 0.9055 vn 0.6334 -0.2890 0.7179 vn 0.4540 -0.5585 0.6942 vn 0.2180 -0.4135 0.8840 vn 0.0211 -0.5069 0.8617 vn 0.0890 -0.7449 0.6612 vn -0.1970 -0.4984 0.8442 vn -0.3191 -0.7167 0.6201 vn -0.3462 -0.4145 0.8416 vn -0.5903 -0.5394 0.6005 vn -0.4135 -0.2995 0.8598 vn -0.7123 -0.3122 0.6286 vn -0.4015 -0.1715 0.8997 vn -0.6976 -0.0674 0.7133 vn -0.3004 -0.0440 0.9528 vn -0.5226 0.1779 0.8338 vn -0.1044 0.0448 0.9935 vn -0.1602 0.3504 0.9228 vn 0.7199 0.3854 0.5773 vn 0.3636 0.6331 0.6834 vn 0.8715 0.0828 0.4834 vn 0.8674 -0.2631 0.4224 vn 0.6564 -0.6541 0.3759 vn 0.1605 -0.9340 0.3193 vn -0.4066 -0.8716 0.2740 vn -0.7577 -0.5956 0.2666 vn -0.9072 -0.2812 0.3129 vn -0.9053 0.0529 0.4215 vn -0.6994 0.4156 0.5815 vn -0.2065 0.6790 0.7046 vn 0.7009 0.5920 -0.3978 vn 0.3880 0.8705 -0.3028 vn 0.8246 0.3019 -0.4784 vn 0.8394 -0.0168 -0.5433 vn 0.6793 -0.4099 -0.6087 vn 0.2094 -0.7069 -0.6756 vn -0.3428 -0.6190 -0.7067 vn -0.6522 -0.3221 -0.6862 vn -0.7748 -0.0253 -0.6317 vn -0.7907 0.2868 -0.5408 vn -0.6340 0.6613 -0.4008 vn -0.1665 0.9452 -0.2809 vn 0.0472 0.2437 -0.9687 vn 0.0453 0.2446 -0.9686 vn 0.0480 0.2424 -0.9690 vn 0.0478 0.2409 -0.9694 vn 0.0465 0.2394 -0.9698 vn 0.0442 0.2384 -0.9702 vn 0.0417 0.2384 -0.9703 vn 0.0399 0.2393 -0.9701 vn 0.0391 0.2406 -0.9698 vn 0.0392 0.2421 -0.9695 vn 0.0405 0.2436 -0.9690 vn 0.0428 0.2446 -0.9687 vn 0.0447 0.2422 -0.9692 vn 0.0441 0.2425 -0.9692 vn 0.0450 0.2418 -0.9693 vn 0.0449 0.2413 -0.9694 vn 0.0445 0.2408 -0.9696 vn 0.0437 0.2405 -0.9697 vn 0.0429 0.2405 -0.9697 vn 0.0423 0.2408 -0.9697 vn 0.0421 0.2412 -0.9696 vn 0.0421 0.2417 -0.9694 vn 0.0426 0.2422 -0.9693 vn 0.0433 0.2425 -0.9692 vn 0.0440 0.2418 -0.9693 vn 0.0438 0.2419 -0.9693 vn 0.0441 0.2416 -0.9694 vn 0.0441 0.2414 -0.9694 vn 0.0439 0.2412 -0.9695 vn 0.0436 0.2411 -0.9695 vn 0.0433 0.2411 -0.9695 vn 0.0430 0.2412 -0.9695 vn 0.0429 0.2414 -0.9695 vn 0.0430 0.2416 -0.9694 vn 0.0431 0.2418 -0.9694 vn 0.0434 0.2419 -0.9693 vt 0.1722 0.4969 0.0000 vt 0.1736 0.4908 0.0000 vt 0.1658 0.4938 0.0000 vt 0.1650 0.4971 0.0000 vt 0.1732 0.5031 0.0000 vt 0.1655 0.5005 0.0000 vt 0.1763 0.5079 0.0000 vt 0.1672 0.5031 0.0000 vt 0.1697 0.5041 0.0000 vt 0.1808 0.5098 0.0000 vt 0.1854 0.5084 0.0000 vt 0.1722 0.5034 0.0000 vt 0.1889 0.5041 0.0000 vt 0.1740 0.5010 0.0000 vt 0.1748 0.4977 0.0000 vt 0.1904 0.4980 0.0000 vt 0.1743 0.4944 0.0000 vt 0.1894 0.4917 0.0000 vt 0.1726 0.4918 0.0000 vt 0.1862 0.4870 0.0000 vt 0.1701 0.4908 0.0000 vt 0.1817 0.4851 0.0000 vt 0.1771 0.4865 0.0000 vt 0.1677 0.4915 0.0000 vt 0.1864 0.4967 0.0000 vt 0.1883 0.4888 0.0000 vt 0.1877 0.5049 0.0000 vt 0.1919 0.5111 0.0000 vt 0.1977 0.5136 0.0000 vt 0.2037 0.5118 0.0000 vt 0.2083 0.5061 0.0000 vt 0.2102 0.4982 0.0000 vt 0.2089 0.4900 0.0000 vt 0.2047 0.4838 0.0000 vt 0.1989 0.4813 0.0000 vt 0.1929 0.4831 0.0000 vt 0.2055 0.4967 0.0000 vt 0.2076 0.4881 0.0000 vt 0.2069 0.5055 0.0000 vt 0.2114 0.5122 0.0000 vt 0.2177 0.5149 0.0000 vt 0.2242 0.5130 0.0000 vt 0.2292 0.5069 0.0000 vt 0.2312 0.4982 0.0000 vt 0.2298 0.4894 0.0000 vt 0.2253 0.4827 0.0000 vt 0.2190 0.4800 0.0000 vt 0.2125 0.4820 0.0000 vt 0.2285 0.4888 0.0000 vt 0.2266 0.4968 0.0000 vt 0.2279 0.5049 0.0000 vt 0.2320 0.5111 0.0000 vt 0.2379 0.5136 0.0000 vt 0.2439 0.5118 0.0000 vt 0.2484 0.5062 0.0000 vt 0.2503 0.4982 0.0000 vt 0.2490 0.4900 0.0000 vt 0.2449 0.4839 0.0000 vt 0.2390 0.4813 0.0000 vt 0.2330 0.4831 0.0000 vt 0.2464 0.4969 0.0000 vt 0.2478 0.4908 0.0000 vt 0.2474 0.5032 0.0000 vt 0.2505 0.5079 0.0000 vt 0.2550 0.5098 0.0000 vt 0.2596 0.5084 0.0000 vt 0.2631 0.5041 0.0000 vt 0.2646 0.4980 0.0000 vt 0.2636 0.4918 0.0000 vt 0.2604 0.4871 0.0000 vt 0.2559 0.4851 0.0000 vt 0.2513 0.4865 0.0000 vt 0.2619 0.4972 0.0000 vt 0.2627 0.4939 0.0000 vt 0.2625 0.5006 0.0000 vt 0.2642 0.5031 0.0000 vt 0.2666 0.5042 0.0000 vt 0.2691 0.5034 0.0000 vt 0.2710 0.5011 0.0000 vt 0.2718 0.4978 0.0000 vt 0.2712 0.4944 0.0000 vt 0.2695 0.4918 0.0000 vt 0.2671 0.4908 0.0000 vt 0.2646 0.4915 0.0000 vt 0.1659 0.4974 0.0000 vt 0.2708 0.4975 0.0000 vt 0.1803 0.5367 0.0000 vt 0.1907 0.5343 0.0000 vt 0.1919 0.5206 0.0000 vt 0.1810 0.5293 0.0000 vt 0.1822 0.5449 0.0000 vt 0.1940 0.5494 0.0000 vt 0.1860 0.5517 0.0000 vt 0.2011 0.5619 0.0000 vt 0.2100 0.5685 0.0000 vt 0.1908 0.5553 0.0000 vt 0.1953 0.5546 0.0000 vt 0.2183 0.5673 0.0000 vt 0.1982 0.5500 0.0000 vt 0.2237 0.5588 0.0000 vt 0.1989 0.5426 0.0000 vt 0.2249 0.5451 0.0000 vt 0.1970 0.5344 0.0000 vt 0.2215 0.5300 0.0000 vt 0.1932 0.5276 0.0000 vt 0.2145 0.5175 0.0000 vt 0.1884 0.5241 0.0000 vt 0.2056 0.5109 0.0000 vt 0.1839 0.5247 0.0000 vt 0.1973 0.5120 0.0000 vt 0.2126 0.5326 0.0000 vt 0.2142 0.5147 0.0000 vt 0.2170 0.5524 0.0000 vt 0.2263 0.5687 0.0000 vt 0.2379 0.5773 0.0000 vt 0.2487 0.5758 0.0000 vt 0.2558 0.5646 0.0000 vt 0.2574 0.5468 0.0000 vt 0.2530 0.5270 0.0000 vt 0.2437 0.5107 0.0000 vt 0.2322 0.5021 0.0000 vt 0.2213 0.5036 0.0000 vt 0.2378 0.5320 0.0000 vt 0.2395 0.5127 0.0000 vt 0.2426 0.5534 0.0000 vt 0.2526 0.5711 0.0000 vt 0.2651 0.5804 0.0000 vt 0.2768 0.5788 0.0000 vt 0.2846 0.5667 0.0000 vt 0.2863 0.5474 0.0000 vt 0.2815 0.5260 0.0000 vt 0.2715 0.5083 0.0000 vt 0.2589 0.4990 0.0000 vt 0.2472 0.5006 0.0000 vt 0.2397 0.5326 0.0000 vt 0.2413 0.5148 0.0000 vt 0.2441 0.5524 0.0000 vt 0.2534 0.5687 0.0000 vt 0.2649 0.5773 0.0000 vt 0.2758 0.5758 0.0000 vt 0.2829 0.5646 0.0000 vt 0.2845 0.5468 0.0000 vt 0.2800 0.5270 0.0000 vt 0.2708 0.5107 0.0000 vt 0.2592 0.5021 0.0000 vt 0.2484 0.5036 0.0000 vt 0.2450 0.5343 0.0000 vt 0.2462 0.5206 0.0000 vt 0.2484 0.5494 0.0000 vt 0.2554 0.5619 0.0000 vt 0.2643 0.5685 0.0000 vt 0.2726 0.5673 0.0000 vt 0.2781 0.5588 0.0000 vt 0.2793 0.5451 0.0000 vt 0.2759 0.5300 0.0000 vt 0.2688 0.5175 0.0000 vt 0.2599 0.5109 0.0000 vt 0.2517 0.5121 0.0000 vt 0.2529 0.5368 0.0000 vt 0.2535 0.5294 0.0000 vt 0.2547 0.5449 0.0000 vt 0.2585 0.5517 0.0000 vt 0.2633 0.5553 0.0000 vt 0.2678 0.5547 0.0000 vt 0.2708 0.5500 0.0000 vt 0.2714 0.5426 0.0000 vt 0.2696 0.5345 0.0000 vt 0.2658 0.5277 0.0000 vt 0.2610 0.5241 0.0000 vt 0.2565 0.5247 0.0000 vt 0.1832 0.5397 0.0000 vt 0.2622 0.5397 0.0000 g Object024 f 2577/2577/2517 2578/2578/2518 2579/2579/2519 f 2579/2579/2519 2580/2580/2520 2577/2577/2517 f 2581/2581/2521 2577/2577/2517 2580/2580/2520 f 2580/2580/2520 2582/2582/2522 2581/2581/2521 f 2583/2583/2523 2581/2581/2521 2582/2582/2522 f 2582/2582/2522 2584/2584/2524 2583/2583/2523 f 2585/2585/2525 2586/2586/2526 2583/2583/2523 f 2583/2583/2523 2584/2584/2524 2585/2585/2525 f 2587/2587/2527 2586/2586/2526 2585/2585/2525 f 2585/2585/2525 2588/2588/2528 2587/2587/2527 f 2589/2589/2529 2587/2587/2527 2588/2588/2528 f 2588/2588/2528 2590/2590/2530 2589/2589/2529 f 2591/2591/2531 2592/2592/2532 2589/2589/2529 f 2589/2589/2529 2590/2590/2530 2591/2591/2531 f 2593/2593/2533 2594/2594/2534 2592/2592/2532 f 2592/2592/2532 2591/2591/2531 2593/2593/2533 f 2593/2593/2533 2595/2595/2535 2596/2596/2536 f 2596/2596/2536 2594/2594/2534 2593/2593/2533 f 2596/2596/2536 2595/2595/2535 2597/2597/2537 f 2597/2597/2537 2598/2598/2538 2596/2596/2536 f 2599/2599/2539 2598/2598/2538 2597/2597/2537 f 2597/2597/2537 2600/2600/2540 2599/2599/2539 f 2579/2579/2519 2578/2578/2518 2599/2599/2539 f 2599/2599/2539 2600/2600/2540 2579/2579/2519 f 2578/2578/2518 2577/2577/2517 2601/2601/2541 f 2601/2601/2541 2602/2602/2542 2578/2578/2518 f 2577/2577/2517 2581/2581/2521 2603/2603/2543 f 2603/2603/2543 2601/2601/2541 2577/2577/2517 f 2583/2583/2523 2604/2604/2544 2603/2603/2543 f 2603/2603/2543 2581/2581/2521 2583/2583/2523 f 2583/2583/2523 2586/2586/2526 2605/2605/2545 f 2605/2605/2545 2604/2604/2544 2583/2583/2523 f 2586/2586/2526 2587/2587/2527 2606/2606/2546 f 2606/2606/2546 2605/2605/2545 2586/2586/2526 f 2589/2589/2529 2607/2607/2547 2606/2606/2546 f 2606/2606/2546 2587/2587/2527 2589/2589/2529 f 2592/2592/2532 2608/2608/2548 2607/2607/2547 f 2607/2607/2547 2589/2589/2529 2592/2592/2532 f 2609/2609/2549 2608/2608/2548 2592/2592/2532 f 2592/2592/2532 2594/2594/2534 2609/2609/2549 f 2594/2594/2534 2596/2596/2536 2610/2610/2550 f 2610/2610/2550 2609/2609/2549 2594/2594/2534 f 2610/2610/2550 2596/2596/2536 2598/2598/2538 f 2598/2598/2538 2611/2611/2551 2610/2610/2550 f 2611/2611/2551 2598/2598/2538 2599/2599/2539 f 2599/2599/2539 2612/2612/2552 2611/2611/2551 f 2602/2602/2542 2612/2612/2552 2599/2599/2539 f 2599/2599/2539 2578/2578/2518 2602/2602/2542 f 2602/2602/2542 2601/2601/2541 2613/2613/2553 f 2613/2613/2553 2614/2614/2554 2602/2602/2542 f 2603/2603/2543 2615/2615/2555 2613/2613/2553 f 2613/2613/2553 2601/2601/2541 2603/2603/2543 f 2603/2603/2543 2604/2604/2544 2616/2616/2556 f 2616/2616/2556 2615/2615/2555 2603/2603/2543 f 2605/2605/2545 2617/2617/2557 2616/2616/2556 f 2616/2616/2556 2604/2604/2544 2605/2605/2545 f 2605/2605/2545 2606/2606/2546 2618/2618/2558 f 2618/2618/2558 2617/2617/2557 2605/2605/2545 f 2618/2618/2558 2606/2606/2546 2607/2607/2547 f 2607/2607/2547 2619/2619/2559 2618/2618/2558 f 2607/2607/2547 2608/2608/2548 2620/2620/2560 f 2620/2620/2560 2619/2619/2559 2607/2607/2547 f 2620/2620/2560 2608/2608/2548 2609/2609/2549 f 2609/2609/2549 2621/2621/2561 2620/2620/2560 f 2610/2610/2550 2622/2622/2562 2621/2621/2561 f 2621/2621/2561 2609/2609/2549 2610/2610/2550 f 2611/2611/2551 2623/2623/2563 2622/2622/2562 f 2622/2622/2562 2610/2610/2550 2611/2611/2551 f 2624/2624/2564 2623/2623/2563 2611/2611/2551 f 2611/2611/2551 2612/2612/2552 2624/2624/2564 f 2614/2614/2554 2624/2624/2564 2612/2612/2552 f 2612/2612/2552 2602/2602/2542 2614/2614/2554 f 2625/2625/2565 2614/2614/2554 2613/2613/2553 f 2613/2613/2553 2626/2626/2566 2625/2625/2565 f 2615/2615/2555 2627/2627/2567 2626/2626/2566 f 2626/2626/2566 2613/2613/2553 2615/2615/2555 f 2616/2616/2556 2628/2628/2568 2627/2627/2567 f 2627/2627/2567 2615/2615/2555 2616/2616/2556 f 2629/2629/2569 2628/2628/2568 2616/2616/2556 f 2616/2616/2556 2617/2617/2557 2629/2629/2569 f 2629/2629/2569 2617/2617/2557 2618/2618/2558 f 2618/2618/2558 2630/2630/2570 2629/2629/2569 f 2630/2630/2570 2618/2618/2558 2619/2619/2559 f 2619/2619/2559 2631/2631/2571 2630/2630/2570 f 2620/2620/2560 2632/2632/2572 2631/2631/2571 f 2631/2631/2571 2619/2619/2559 2620/2620/2560 f 2633/2633/2573 2632/2632/2572 2620/2620/2560 f 2620/2620/2560 2621/2621/2561 2633/2633/2573 f 2621/2621/2561 2622/2622/2562 2634/2634/2574 f 2634/2634/2574 2633/2633/2573 2621/2621/2561 f 2635/2635/2575 2634/2634/2574 2622/2622/2562 f 2622/2622/2562 2623/2623/2563 2635/2635/2575 f 2624/2624/2564 2636/2636/2576 2635/2635/2575 f 2635/2635/2575 2623/2623/2563 2624/2624/2564 f 2624/2624/2564 2614/2614/2554 2625/2625/2565 f 2625/2625/2565 2636/2636/2576 2624/2624/2564 f 2626/2626/2566 2637/2637/2577 2638/2638/2578 f 2638/2638/2578 2625/2625/2565 2626/2626/2566 f 2626/2626/2566 2627/2627/2567 2639/2639/2579 f 2639/2639/2579 2637/2637/2577 2626/2626/2566 f 2628/2628/2568 2640/2640/2580 2639/2639/2579 f 2639/2639/2579 2627/2627/2567 2628/2628/2568 f 2641/2641/2581 2640/2640/2580 2628/2628/2568 f 2628/2628/2568 2629/2629/2569 2641/2641/2581 f 2629/2629/2569 2630/2630/2570 2642/2642/2582 f 2642/2642/2582 2641/2641/2581 2629/2629/2569 f 2642/2642/2582 2630/2630/2570 2631/2631/2571 f 2631/2631/2571 2643/2643/2583 2642/2642/2582 f 2644/2644/2584 2643/2643/2583 2631/2631/2571 f 2631/2631/2571 2632/2632/2572 2644/2644/2584 f 2633/2633/2573 2645/2645/2585 2644/2644/2584 f 2644/2644/2584 2632/2632/2572 2633/2633/2573 f 2633/2633/2573 2634/2634/2574 2646/2646/2586 f 2646/2646/2586 2645/2645/2585 2633/2633/2573 f 2646/2646/2586 2634/2634/2574 2635/2635/2575 f 2635/2635/2575 2647/2647/2587 2646/2646/2586 f 2647/2647/2587 2635/2635/2575 2636/2636/2576 f 2636/2636/2576 2648/2648/2588 2647/2647/2587 f 2636/2636/2576 2625/2625/2565 2638/2638/2578 f 2638/2638/2578 2648/2648/2588 2636/2636/2576 f 2637/2637/2577 2649/2649/2589 2650/2650/2590 f 2650/2650/2590 2638/2638/2578 2637/2637/2577 f 2637/2637/2577 2639/2639/2579 2651/2651/2591 f 2651/2651/2591 2649/2649/2589 2637/2637/2577 f 2652/2652/2592 2651/2651/2591 2639/2639/2579 f 2639/2639/2579 2640/2640/2580 2652/2652/2592 f 2641/2641/2581 2653/2653/2593 2652/2652/2592 f 2652/2652/2592 2640/2640/2580 2641/2641/2581 f 2642/2642/2582 2654/2654/2594 2653/2653/2593 f 2653/2653/2593 2641/2641/2581 2642/2642/2582 f 2643/2643/2583 2655/2655/2595 2654/2654/2594 f 2654/2654/2594 2642/2642/2582 2643/2643/2583 f 2644/2644/2584 2656/2656/2596 2655/2655/2595 f 2655/2655/2595 2643/2643/2583 2644/2644/2584 f 2656/2656/2596 2644/2644/2584 2645/2645/2585 f 2645/2645/2585 2657/2657/2597 2656/2656/2596 f 2657/2657/2597 2645/2645/2585 2646/2646/2586 f 2646/2646/2586 2658/2658/2598 2657/2657/2597 f 2658/2658/2598 2646/2646/2586 2647/2647/2587 f 2647/2647/2587 2659/2659/2599 2658/2658/2598 f 2648/2648/2588 2660/2660/2600 2659/2659/2599 f 2659/2659/2599 2647/2647/2587 2648/2648/2588 f 2650/2650/2590 2660/2660/2600 2648/2648/2588 f 2648/2648/2588 2638/2638/2578 2650/2650/2590 f 2580/2580/2520 2579/2579/2519 2661/2661/2601 f 2582/2582/2522 2580/2580/2520 2661/2661/2601 f 2584/2584/2524 2582/2582/2522 2661/2661/2601 f 2585/2585/2525 2584/2584/2524 2661/2661/2601 f 2588/2588/2528 2585/2585/2525 2661/2661/2601 f 2590/2590/2530 2588/2588/2528 2661/2661/2601 f 2591/2591/2531 2590/2590/2530 2661/2661/2601 f 2593/2593/2533 2591/2591/2531 2661/2661/2601 f 2595/2595/2535 2593/2593/2533 2661/2661/2601 f 2597/2597/2537 2595/2595/2535 2661/2661/2601 f 2600/2600/2540 2597/2597/2537 2661/2661/2601 f 2579/2579/2519 2600/2600/2540 2661/2661/2601 f 2650/2650/2590 2649/2649/2589 2662/2662/2602 f 2649/2649/2589 2651/2651/2591 2662/2662/2602 f 2651/2651/2591 2652/2652/2592 2662/2662/2602 f 2652/2652/2592 2653/2653/2593 2662/2662/2602 f 2653/2653/2593 2654/2654/2594 2662/2662/2602 f 2654/2654/2594 2655/2655/2595 2662/2662/2602 f 2655/2655/2595 2656/2656/2596 2662/2662/2602 f 2656/2656/2596 2657/2657/2597 2662/2662/2602 f 2657/2657/2597 2658/2658/2598 2662/2662/2602 f 2658/2658/2598 2659/2659/2599 2662/2662/2602 f 2659/2659/2599 2660/2660/2600 2662/2662/2602 f 2660/2660/2600 2650/2650/2590 2662/2662/2602 f 2663/2663/2603 2664/2664/2604 2665/2665/2605 f 2665/2665/2605 2666/2666/2606 2663/2663/2603 f 2667/2667/2607 2668/2668/2608 2664/2664/2604 f 2664/2664/2604 2663/2663/2603 2667/2667/2607 f 2669/2669/2609 2670/2670/2610 2668/2668/2608 f 2668/2668/2608 2667/2667/2607 2669/2669/2609 f 2671/2671/2611 2670/2670/2610 2669/2669/2609 f 2669/2669/2609 2672/2672/2612 2671/2671/2611 f 2672/2672/2612 2673/2673/2613 2674/2674/2614 f 2674/2674/2614 2671/2671/2611 2672/2672/2612 f 2675/2675/2615 2676/2676/2616 2674/2674/2614 f 2674/2674/2614 2673/2673/2613 2675/2675/2615 f 2677/2677/2617 2678/2678/2618 2676/2676/2616 f 2676/2676/2616 2675/2675/2615 2677/2677/2617 f 2679/2679/2619 2680/2680/2620 2678/2678/2618 f 2678/2678/2618 2677/2677/2617 2679/2679/2619 f 2681/2681/2621 2682/2682/2622 2680/2680/2620 f 2680/2680/2620 2679/2679/2619 2681/2681/2621 f 2683/2683/2623 2684/2684/2624 2682/2682/2622 f 2682/2682/2622 2681/2681/2621 2683/2683/2623 f 2685/2685/2625 2686/2686/2626 2684/2684/2624 f 2684/2684/2624 2683/2683/2623 2685/2685/2625 f 2665/2665/2605 2686/2686/2626 2685/2685/2625 f 2685/2685/2625 2666/2666/2606 2665/2665/2605 f 2665/2665/2605 2664/2664/2604 2687/2687/2627 f 2687/2687/2627 2688/2688/2628 2665/2665/2605 f 2664/2664/2604 2668/2668/2608 2689/2689/2629 f 2689/2689/2629 2687/2687/2627 2664/2664/2604 f 2668/2668/2608 2670/2670/2610 2690/2690/2630 f 2690/2690/2630 2689/2689/2629 2668/2668/2608 f 2691/2691/2631 2690/2690/2630 2670/2670/2610 f 2670/2670/2610 2671/2671/2611 2691/2691/2631 f 2674/2674/2614 2692/2692/2632 2691/2691/2631 f 2691/2691/2631 2671/2671/2611 2674/2674/2614 f 2676/2676/2616 2693/2693/2633 2692/2692/2632 f 2692/2692/2632 2674/2674/2614 2676/2676/2616 f 2678/2678/2618 2694/2694/2634 2693/2693/2633 f 2693/2693/2633 2676/2676/2616 2678/2678/2618 f 2680/2680/2620 2695/2695/2635 2694/2694/2634 f 2694/2694/2634 2678/2678/2618 2680/2680/2620 f 2682/2682/2622 2696/2696/2636 2695/2695/2635 f 2695/2695/2635 2680/2680/2620 2682/2682/2622 f 2684/2684/2624 2697/2697/2637 2696/2696/2636 f 2696/2696/2636 2682/2682/2622 2684/2684/2624 f 2686/2686/2626 2698/2698/2638 2697/2697/2637 f 2697/2697/2637 2684/2684/2624 2686/2686/2626 f 2688/2688/2628 2698/2698/2638 2686/2686/2626 f 2686/2686/2626 2665/2665/2605 2688/2688/2628 f 2687/2687/2627 2699/2699/2639 2700/2700/2640 f 2700/2700/2640 2688/2688/2628 2687/2687/2627 f 2689/2689/2629 2701/2701/2641 2699/2699/2639 f 2699/2699/2639 2687/2687/2627 2689/2689/2629 f 2690/2690/2630 2702/2702/2642 2701/2701/2641 f 2701/2701/2641 2689/2689/2629 2690/2690/2630 f 2691/2691/2631 2703/2703/2643 2702/2702/2642 f 2702/2702/2642 2690/2690/2630 2691/2691/2631 f 2692/2692/2632 2704/2704/2644 2703/2703/2643 f 2703/2703/2643 2691/2691/2631 2692/2692/2632 f 2693/2693/2633 2705/2705/2645 2704/2704/2644 f 2704/2704/2644 2692/2692/2632 2693/2693/2633 f 2694/2694/2634 2706/2706/2646 2705/2705/2645 f 2705/2705/2645 2693/2693/2633 2694/2694/2634 f 2695/2695/2635 2707/2707/2647 2706/2706/2646 f 2706/2706/2646 2694/2694/2634 2695/2695/2635 f 2696/2696/2636 2708/2708/2648 2707/2707/2647 f 2707/2707/2647 2695/2695/2635 2696/2696/2636 f 2697/2697/2637 2709/2709/2649 2708/2708/2648 f 2708/2708/2648 2696/2696/2636 2697/2697/2637 f 2698/2698/2638 2710/2710/2650 2709/2709/2649 f 2709/2709/2649 2697/2697/2637 2698/2698/2638 f 2698/2698/2638 2688/2688/2628 2700/2700/2640 f 2700/2700/2640 2710/2710/2650 2698/2698/2638 f 2699/2699/2639 2711/2711/2651 2712/2712/2652 f 2712/2712/2652 2700/2700/2640 2699/2699/2639 f 2701/2701/2641 2713/2713/2653 2711/2711/2651 f 2711/2711/2651 2699/2699/2639 2701/2701/2641 f 2702/2702/2642 2714/2714/2654 2713/2713/2653 f 2713/2713/2653 2701/2701/2641 2702/2702/2642 f 2703/2703/2643 2715/2715/2655 2714/2714/2654 f 2714/2714/2654 2702/2702/2642 2703/2703/2643 f 2704/2704/2644 2716/2716/2656 2715/2715/2655 f 2715/2715/2655 2703/2703/2643 2704/2704/2644 f 2705/2705/2645 2717/2717/2657 2716/2716/2656 f 2716/2716/2656 2704/2704/2644 2705/2705/2645 f 2706/2706/2646 2718/2718/2658 2717/2717/2657 f 2717/2717/2657 2705/2705/2645 2706/2706/2646 f 2707/2707/2647 2719/2719/2659 2718/2718/2658 f 2718/2718/2658 2706/2706/2646 2707/2707/2647 f 2708/2708/2648 2720/2720/2660 2719/2719/2659 f 2719/2719/2659 2707/2707/2647 2708/2708/2648 f 2709/2709/2649 2721/2721/2661 2720/2720/2660 f 2720/2720/2660 2708/2708/2648 2709/2709/2649 f 2710/2710/2650 2722/2722/2662 2721/2721/2661 f 2721/2721/2661 2709/2709/2649 2710/2710/2650 f 2710/2710/2650 2700/2700/2640 2712/2712/2652 f 2712/2712/2652 2722/2722/2662 2710/2710/2650 f 2711/2711/2651 2723/2723/2663 2724/2724/2664 f 2724/2724/2664 2712/2712/2652 2711/2711/2651 f 2713/2713/2653 2725/2725/2665 2723/2723/2663 f 2723/2723/2663 2711/2711/2651 2713/2713/2653 f 2714/2714/2654 2726/2726/2666 2725/2725/2665 f 2725/2725/2665 2713/2713/2653 2714/2714/2654 f 2715/2715/2655 2727/2727/2667 2726/2726/2666 f 2726/2726/2666 2714/2714/2654 2715/2715/2655 f 2716/2716/2656 2728/2728/2668 2727/2727/2667 f 2727/2727/2667 2715/2715/2655 2716/2716/2656 f 2717/2717/2657 2729/2729/2669 2728/2728/2668 f 2728/2728/2668 2716/2716/2656 2717/2717/2657 f 2718/2718/2658 2730/2730/2670 2729/2729/2669 f 2729/2729/2669 2717/2717/2657 2718/2718/2658 f 2719/2719/2659 2731/2731/2671 2730/2730/2670 f 2730/2730/2670 2718/2718/2658 2719/2719/2659 f 2720/2720/2660 2732/2732/2672 2731/2731/2671 f 2731/2731/2671 2719/2719/2659 2720/2720/2660 f 2721/2721/2661 2733/2733/2673 2732/2732/2672 f 2732/2732/2672 2720/2720/2660 2721/2721/2661 f 2722/2722/2662 2734/2734/2674 2733/2733/2673 f 2733/2733/2673 2721/2721/2661 2722/2722/2662 f 2722/2722/2662 2712/2712/2652 2724/2724/2664 f 2724/2724/2664 2734/2734/2674 2722/2722/2662 f 2723/2723/2663 2735/2735/2675 2736/2736/2676 f 2736/2736/2676 2724/2724/2664 2723/2723/2663 f 2725/2725/2665 2737/2737/2677 2735/2735/2675 f 2735/2735/2675 2723/2723/2663 2725/2725/2665 f 2726/2726/2666 2738/2738/2678 2737/2737/2677 f 2737/2737/2677 2725/2725/2665 2726/2726/2666 f 2727/2727/2667 2739/2739/2679 2738/2738/2678 f 2738/2738/2678 2726/2726/2666 2727/2727/2667 f 2728/2728/2668 2740/2740/2680 2739/2739/2679 f 2739/2739/2679 2727/2727/2667 2728/2728/2668 f 2729/2729/2669 2741/2741/2681 2740/2740/2680 f 2740/2740/2680 2728/2728/2668 2729/2729/2669 f 2730/2730/2670 2742/2742/2682 2741/2741/2681 f 2741/2741/2681 2729/2729/2669 2730/2730/2670 f 2731/2731/2671 2743/2743/2683 2742/2742/2682 f 2742/2742/2682 2730/2730/2670 2731/2731/2671 f 2732/2732/2672 2744/2744/2684 2743/2743/2683 f 2743/2743/2683 2731/2731/2671 2732/2732/2672 f 2733/2733/2673 2745/2745/2685 2744/2744/2684 f 2744/2744/2684 2732/2732/2672 2733/2733/2673 f 2734/2734/2674 2746/2746/2686 2745/2745/2685 f 2745/2745/2685 2733/2733/2673 2734/2734/2674 f 2734/2734/2674 2724/2724/2664 2736/2736/2676 f 2736/2736/2676 2746/2746/2686 2734/2734/2674 f 2663/2663/2603 2666/2666/2606 2747/2747/2601 f 2667/2667/2607 2663/2663/2603 2747/2747/2601 f 2669/2669/2609 2667/2667/2607 2747/2747/2601 f 2672/2672/2612 2669/2669/2609 2747/2747/2601 f 2673/2673/2613 2672/2672/2612 2747/2747/2601 f 2675/2675/2615 2673/2673/2613 2747/2747/2601 f 2677/2677/2617 2675/2675/2615 2747/2747/2601 f 2679/2679/2619 2677/2677/2617 2747/2747/2601 f 2681/2681/2621 2679/2679/2619 2747/2747/2601 f 2683/2683/2623 2681/2681/2621 2747/2747/2601 f 2685/2685/2625 2683/2683/2623 2747/2747/2601 f 2666/2666/2606 2685/2685/2625 2747/2747/2601 f 2736/2736/2676 2735/2735/2675 2748/2748/2602 f 2735/2735/2675 2737/2737/2677 2748/2748/2602 f 2737/2737/2677 2738/2738/2678 2748/2748/2602 f 2738/2738/2678 2739/2739/2679 2748/2748/2602 f 2739/2739/2679 2740/2740/2680 2748/2748/2602 f 2740/2740/2680 2741/2741/2681 2748/2748/2602 f 2741/2741/2681 2742/2742/2682 2748/2748/2602 f 2742/2742/2682 2743/2743/2683 2748/2748/2602 f 2743/2743/2683 2744/2744/2684 2748/2748/2602 f 2744/2744/2684 2745/2745/2685 2748/2748/2602 f 2745/2745/2685 2746/2746/2686 2748/2748/2602 f 2746/2746/2686 2736/2736/2676 2748/2748/2602 v 4.0059 43.3641 104.3367 v 4.7707 42.2164 103.0839 v 6.0160 43.4243 103.2969 v 4.6799 44.0178 104.4519 v 3.0904 43.1299 104.2951 v 3.0790 41.7836 103.0071 v 2.1786 43.3779 104.3385 v 1.3942 42.2419 103.0872 v 1.5148 44.0417 104.4551 v 0.1677 43.4684 103.3027 v 1.2769 44.9434 104.6137 v -0.2719 45.1345 103.5957 v 1.5287 45.8414 104.7718 v 0.1933 46.7938 103.8879 v 2.2026 46.4951 104.8871 v 1.4386 48.0016 104.1009 v 3.1182 46.7293 104.9285 v 3.1303 48.4344 104.1776 v 4.0300 46.4813 104.8852 v 4.8151 47.9762 104.0975 v 4.6938 45.8175 104.7687 v 6.0416 46.7497 103.8821 v 4.9316 44.9158 104.6101 v 6.4811 45.0836 103.5890 v 5.2819 41.5982 101.4023 v 6.9090 43.1763 101.6805 v 3.0716 41.0327 101.3020 v 0.8703 41.6314 101.4066 v -0.7322 43.2339 101.6881 v -1.3065 45.4108 102.0710 v -0.6987 47.5788 102.4527 v 0.9284 49.1569 102.7310 v 3.1387 49.7224 102.8313 v 5.3400 49.1237 102.7266 v 6.9425 47.5212 102.4452 v 7.5168 45.3443 102.0623 v 5.4619 41.6035 99.5477 v 7.2230 43.3117 99.8489 v 3.0695 40.9914 99.4392 v 0.6868 41.6395 99.5525 v -1.0477 43.3740 99.8571 v -1.6694 45.7303 100.2716 v -1.0115 48.0769 100.6848 v 0.7496 49.7850 100.9860 v 3.1420 50.3971 101.0946 v 5.5247 49.7490 100.9812 v 7.2592 48.0145 100.6766 v 7.8809 45.6583 100.2621 v 5.2831 42.2316 97.8027 v 6.9102 43.8098 98.0810 v 3.0728 41.6661 97.7025 v 0.8715 42.2649 97.8071 v -0.7310 43.8674 98.0886 v -1.3053 46.0443 98.4715 v -0.6975 48.2122 98.8532 v 0.9296 49.7904 99.1315 v 3.1399 50.3558 99.2317 v 5.3412 49.7571 99.1272 v 6.9437 48.1546 98.8456 v 7.5180 45.9777 98.4627 v 4.7729 43.3869 96.4329 v 6.0182 44.5947 96.6458 v 3.0812 42.9541 96.3562 v 1.3964 43.4123 96.4362 v 0.1699 44.6388 96.6516 v -0.2696 46.3050 96.9447 v 0.1956 47.9642 97.2369 v 1.4408 49.1721 97.4499 v 3.1325 49.6049 97.5266 v 4.8173 49.1466 97.4466 v 6.0438 47.9202 97.2311 v 6.4834 46.2540 96.9380 v 4.0089 44.8934 95.6467 v 4.6828 45.5471 95.7619 v 3.0933 44.6593 95.6052 v 2.1815 44.9072 95.6485 v 1.5177 45.5710 95.7651 v 1.2799 46.4727 95.9237 v 1.5316 47.3707 96.0819 v 2.2056 48.0244 96.1971 v 3.1211 48.2586 96.2386 v 4.0329 48.0106 96.1953 v 4.6967 47.3468 96.0787 v 4.9346 46.4451 95.9201 v 3.1042 44.8666 104.9699 v 3.1073 46.5219 95.5639 vn 0.2019 -0.5091 0.8367 vn 0.3563 -0.7388 0.5720 vn 0.6228 -0.4803 0.6176 vn 0.3529 -0.3625 0.8626 vn -0.0034 -0.5616 0.8274 vn -0.0057 -0.8314 0.5556 vn -0.2078 -0.5060 0.8371 vn -0.3663 -0.7334 0.5727 vn -0.3567 -0.3572 0.8633 vn -0.6287 -0.4709 0.6188 vn -0.4100 -0.1550 0.8988 vn -0.7228 -0.1144 0.6816 vn -0.3536 0.0463 0.9343 vn -0.6232 0.2407 0.7441 vn -0.2024 0.1929 0.9601 vn -0.3567 0.4992 0.7897 vn 0.0028 0.2454 0.9694 vn 0.0053 0.5918 0.8061 vn 0.2072 0.1898 0.9597 vn 0.3658 0.4937 0.7889 vn 0.3561 0.0410 0.9336 vn 0.6283 0.2313 0.7428 vn 0.4094 -0.1612 0.8980 vn 0.7223 -0.1253 0.6801 vn 0.4579 -0.8597 0.2263 vn 0.8003 -0.5276 0.2849 vn -0.0072 -0.9787 0.2052 vn -0.4704 -0.8527 0.2272 vn -0.8076 -0.5155 0.2865 vn -0.9284 -0.0574 0.3670 vn -0.8005 0.3988 0.4474 vn -0.4582 0.7308 0.5059 vn 0.0069 0.8498 0.5270 vn 0.4701 0.7238 0.5050 vn 0.8073 0.3866 0.4458 vn 0.9282 -0.0714 0.3652 vn 0.4934 -0.8567 -0.1506 vn 0.8622 -0.4989 -0.0875 vn -0.0076 -0.9848 -0.1733 vn -0.5066 -0.8491 -0.1496 vn -0.8698 -0.4859 -0.0858 vn -1.0000 0.0075 0.0010 vn -0.8622 0.4989 0.0875 vn -0.4934 0.8567 0.1506 vn 0.0076 0.9848 0.1733 vn 0.5066 0.8491 0.1496 vn 0.8698 0.4859 0.0858 vn 1.0000 -0.0075 -0.0010 vn 0.4582 -0.7308 -0.5059 vn 0.8005 -0.3988 -0.4474 vn -0.0069 -0.8498 -0.5270 vn -0.4701 -0.7238 -0.5050 vn -0.8073 -0.3866 -0.4458 vn -0.9282 0.0714 -0.3652 vn -0.8003 0.5276 -0.2849 vn -0.4579 0.8597 -0.2263 vn 0.0072 0.9787 -0.2052 vn 0.4704 0.8527 -0.2272 vn 0.8076 0.5155 -0.2865 vn 0.9284 0.0574 -0.3670 vn 0.3567 -0.4992 -0.7897 vn 0.6232 -0.2407 -0.7441 vn -0.0053 -0.5918 -0.8061 vn -0.3658 -0.4937 -0.7889 vn -0.6283 -0.2313 -0.7428 vn -0.7223 0.1253 -0.6801 vn -0.6228 0.4803 -0.6176 vn -0.3563 0.7388 -0.5720 vn 0.0057 0.8314 -0.5556 vn 0.3663 0.7334 -0.5727 vn 0.6287 0.4709 -0.6189 vn 0.7228 0.1144 -0.6816 vn 0.2024 -0.1929 -0.9601 vn 0.3535 -0.0463 -0.9343 vn -0.0028 -0.2454 -0.9694 vn -0.2072 -0.1898 -0.9597 vn -0.3560 -0.0410 -0.9336 vn -0.4094 0.1612 -0.8980 vn -0.3529 0.3625 -0.8626 vn -0.2019 0.5091 -0.8367 vn 0.0034 0.5616 -0.8274 vn 0.2079 0.5060 -0.8371 vn 0.3567 0.3572 -0.8633 vn 0.4100 0.1550 -0.8988 vn -0.0003 -0.1733 0.9849 vn 0.0003 0.1733 -0.9849 vt 0.4429 0.1282 0.0000 vt 0.4536 0.1374 0.0000 vt 0.4807 0.1340 0.0000 vt 0.4575 0.1263 0.0000 vt 0.4255 0.1288 0.0000 vt 0.4215 0.1386 0.0000 vt 0.4101 0.1282 0.0000 vt 0.3930 0.1374 0.0000 vt 0.4007 0.1263 0.0000 vt 0.3756 0.1339 0.0000 vt 0.3998 0.1238 0.0000 vt 0.3741 0.1293 0.0000 vt 0.4078 0.1213 0.0000 vt 0.3888 0.1246 0.0000 vt 0.4225 0.1194 0.0000 vt 0.4159 0.1212 0.0000 vt 0.4398 0.1187 0.0000 vt 0.4480 0.1200 0.0000 vt 0.4553 0.1194 0.0000 vt 0.4765 0.1212 0.0000 vt 0.4647 0.1213 0.0000 vt 0.4939 0.1247 0.0000 vt 0.4655 0.1238 0.0000 vt 0.4954 0.1293 0.0000 vt 0.4625 0.1481 0.0000 vt 0.4978 0.1436 0.0000 vt 0.4206 0.1497 0.0000 vt 0.3833 0.1481 0.0000 vt 0.3606 0.1436 0.0000 vt 0.3586 0.1375 0.0000 vt 0.3779 0.1314 0.0000 vt 0.4132 0.1269 0.0000 vt 0.4551 0.1253 0.0000 vt 0.4924 0.1270 0.0000 vt 0.5151 0.1315 0.0000 vt 0.5171 0.1376 0.0000 vt 0.4682 0.1587 0.0000 vt 0.5065 0.1539 0.0000 vt 0.4228 0.1604 0.0000 vt 0.3824 0.1586 0.0000 vt 0.3579 0.1538 0.0000 vt 0.3558 0.1472 0.0000 vt 0.3766 0.1406 0.0000 vt 0.4148 0.1358 0.0000 vt 0.4602 0.1340 0.0000 vt 0.5006 0.1358 0.0000 vt 0.5252 0.1407 0.0000 vt 0.5273 0.1473 0.0000 vt 0.4699 0.1675 0.0000 vt 0.5052 0.1631 0.0000 vt 0.4279 0.1691 0.0000 vt 0.3906 0.1675 0.0000 vt 0.3679 0.1630 0.0000 vt 0.3660 0.1569 0.0000 vt 0.3852 0.1508 0.0000 vt 0.4206 0.1464 0.0000 vt 0.4625 0.1447 0.0000 vt 0.4998 0.1464 0.0000 vt 0.5225 0.1509 0.0000 vt 0.5244 0.1570 0.0000 vt 0.4672 0.1732 0.0000 vt 0.4942 0.1698 0.0000 vt 0.4351 0.1745 0.0000 vt 0.4065 0.1732 0.0000 vt 0.3892 0.1698 0.0000 vt 0.3877 0.1651 0.0000 vt 0.4024 0.1605 0.0000 vt 0.4295 0.1571 0.0000 vt 0.4615 0.1558 0.0000 vt 0.4901 0.1571 0.0000 vt 0.5075 0.1605 0.0000 vt 0.5090 0.1652 0.0000 vt 0.4606 0.1750 0.0000 vt 0.4752 0.1732 0.0000 vt 0.4432 0.1757 0.0000 vt 0.4278 0.1750 0.0000 vt 0.4184 0.1732 0.0000 vt 0.4176 0.1706 0.0000 vt 0.4256 0.1681 0.0000 vt 0.4402 0.1663 0.0000 vt 0.4576 0.1656 0.0000 vt 0.4730 0.1663 0.0000 vt 0.4824 0.1681 0.0000 vt 0.4832 0.1707 0.0000 vt 0.4319 0.1219 0.0000 vt 0.4511 0.1726 0.0000 g Object002 f 2749/2749/2687 2750/2750/2688 2751/2751/2689 f 2751/2751/2689 2752/2752/2690 2749/2749/2687 f 2753/2753/2691 2754/2754/2692 2750/2750/2688 f 2750/2750/2688 2749/2749/2687 2753/2753/2691 f 2755/2755/2693 2756/2756/2694 2754/2754/2692 f 2754/2754/2692 2753/2753/2691 2755/2755/2693 f 2757/2757/2695 2758/2758/2696 2756/2756/2694 f 2756/2756/2694 2755/2755/2693 2757/2757/2695 f 2759/2759/2697 2760/2760/2698 2758/2758/2696 f 2758/2758/2696 2757/2757/2695 2759/2759/2697 f 2761/2761/2699 2762/2762/2700 2760/2760/2698 f 2760/2760/2698 2759/2759/2697 2761/2761/2699 f 2763/2763/2701 2764/2764/2702 2762/2762/2700 f 2762/2762/2700 2761/2761/2699 2763/2763/2701 f 2765/2765/2703 2766/2766/2704 2764/2764/2702 f 2764/2764/2702 2763/2763/2701 2765/2765/2703 f 2767/2767/2705 2768/2768/2706 2766/2766/2704 f 2766/2766/2704 2765/2765/2703 2767/2767/2705 f 2769/2769/2707 2770/2770/2708 2768/2768/2706 f 2768/2768/2706 2767/2767/2705 2769/2769/2707 f 2771/2771/2709 2772/2772/2710 2770/2770/2708 f 2770/2770/2708 2769/2769/2707 2771/2771/2709 f 2752/2752/2690 2751/2751/2689 2772/2772/2710 f 2772/2772/2710 2771/2771/2709 2752/2752/2690 f 2750/2750/2688 2773/2773/2711 2774/2774/2712 f 2774/2774/2712 2751/2751/2689 2750/2750/2688 f 2754/2754/2692 2775/2775/2713 2773/2773/2711 f 2773/2773/2711 2750/2750/2688 2754/2754/2692 f 2756/2756/2694 2776/2776/2714 2775/2775/2713 f 2775/2775/2713 2754/2754/2692 2756/2756/2694 f 2758/2758/2696 2777/2777/2715 2776/2776/2714 f 2776/2776/2714 2756/2756/2694 2758/2758/2696 f 2760/2760/2698 2778/2778/2716 2777/2777/2715 f 2777/2777/2715 2758/2758/2696 2760/2760/2698 f 2762/2762/2700 2779/2779/2717 2778/2778/2716 f 2778/2778/2716 2760/2760/2698 2762/2762/2700 f 2764/2764/2702 2780/2780/2718 2779/2779/2717 f 2779/2779/2717 2762/2762/2700 2764/2764/2702 f 2766/2766/2704 2781/2781/2719 2780/2780/2718 f 2780/2780/2718 2764/2764/2702 2766/2766/2704 f 2768/2768/2706 2782/2782/2720 2781/2781/2719 f 2781/2781/2719 2766/2766/2704 2768/2768/2706 f 2770/2770/2708 2783/2783/2721 2782/2782/2720 f 2782/2782/2720 2768/2768/2706 2770/2770/2708 f 2772/2772/2710 2784/2784/2722 2783/2783/2721 f 2783/2783/2721 2770/2770/2708 2772/2772/2710 f 2751/2751/2689 2774/2774/2712 2784/2784/2722 f 2784/2784/2722 2772/2772/2710 2751/2751/2689 f 2774/2774/2712 2773/2773/2711 2785/2785/2723 f 2785/2785/2723 2786/2786/2724 2774/2774/2712 f 2773/2773/2711 2775/2775/2713 2787/2787/2725 f 2787/2787/2725 2785/2785/2723 2773/2773/2711 f 2776/2776/2714 2788/2788/2726 2787/2787/2725 f 2787/2787/2725 2775/2775/2713 2776/2776/2714 f 2777/2777/2715 2789/2789/2727 2788/2788/2726 f 2788/2788/2726 2776/2776/2714 2777/2777/2715 f 2778/2778/2716 2790/2790/2728 2789/2789/2727 f 2789/2789/2727 2777/2777/2715 2778/2778/2716 f 2779/2779/2717 2791/2791/2729 2790/2790/2728 f 2790/2790/2728 2778/2778/2716 2779/2779/2717 f 2779/2779/2717 2780/2780/2718 2792/2792/2730 f 2792/2792/2730 2791/2791/2729 2779/2779/2717 f 2780/2780/2718 2781/2781/2719 2793/2793/2731 f 2793/2793/2731 2792/2792/2730 2780/2780/2718 f 2782/2782/2720 2794/2794/2732 2793/2793/2731 f 2793/2793/2731 2781/2781/2719 2782/2782/2720 f 2783/2783/2721 2795/2795/2733 2794/2794/2732 f 2794/2794/2732 2782/2782/2720 2783/2783/2721 f 2784/2784/2722 2796/2796/2734 2795/2795/2733 f 2795/2795/2733 2783/2783/2721 2784/2784/2722 f 2784/2784/2722 2774/2774/2712 2786/2786/2724 f 2786/2786/2724 2796/2796/2734 2784/2784/2722 f 2785/2785/2723 2797/2797/2735 2798/2798/2736 f 2798/2798/2736 2786/2786/2724 2785/2785/2723 f 2787/2787/2725 2799/2799/2737 2797/2797/2735 f 2797/2797/2735 2785/2785/2723 2787/2787/2725 f 2787/2787/2725 2788/2788/2726 2800/2800/2738 f 2800/2800/2738 2799/2799/2737 2787/2787/2725 f 2788/2788/2726 2789/2789/2727 2801/2801/2739 f 2801/2801/2739 2800/2800/2738 2788/2788/2726 f 2789/2789/2727 2790/2790/2728 2802/2802/2740 f 2802/2802/2740 2801/2801/2739 2789/2789/2727 f 2791/2791/2729 2803/2803/2741 2802/2802/2740 f 2802/2802/2740 2790/2790/2728 2791/2791/2729 f 2792/2792/2730 2804/2804/2742 2803/2803/2741 f 2803/2803/2741 2791/2791/2729 2792/2792/2730 f 2793/2793/2731 2805/2805/2743 2804/2804/2742 f 2804/2804/2742 2792/2792/2730 2793/2793/2731 f 2793/2793/2731 2794/2794/2732 2806/2806/2744 f 2806/2806/2744 2805/2805/2743 2793/2793/2731 f 2794/2794/2732 2795/2795/2733 2807/2807/2745 f 2807/2807/2745 2806/2806/2744 2794/2794/2732 f 2795/2795/2733 2796/2796/2734 2808/2808/2746 f 2808/2808/2746 2807/2807/2745 2795/2795/2733 f 2786/2786/2724 2798/2798/2736 2808/2808/2746 f 2808/2808/2746 2796/2796/2734 2786/2786/2724 f 2798/2798/2736 2797/2797/2735 2809/2809/2747 f 2809/2809/2747 2810/2810/2748 2798/2798/2736 f 2799/2799/2737 2811/2811/2749 2809/2809/2747 f 2809/2809/2747 2797/2797/2735 2799/2799/2737 f 2800/2800/2738 2812/2812/2750 2811/2811/2749 f 2811/2811/2749 2799/2799/2737 2800/2800/2738 f 2813/2813/2751 2812/2812/2750 2800/2800/2738 f 2800/2800/2738 2801/2801/2739 2813/2813/2751 f 2814/2814/2752 2813/2813/2751 2801/2801/2739 f 2801/2801/2739 2802/2802/2740 2814/2814/2752 f 2803/2803/2741 2815/2815/2753 2814/2814/2752 f 2814/2814/2752 2802/2802/2740 2803/2803/2741 f 2804/2804/2742 2816/2816/2754 2815/2815/2753 f 2815/2815/2753 2803/2803/2741 2804/2804/2742 f 2805/2805/2743 2817/2817/2755 2816/2816/2754 f 2816/2816/2754 2804/2804/2742 2805/2805/2743 f 2806/2806/2744 2818/2818/2756 2817/2817/2755 f 2817/2817/2755 2805/2805/2743 2806/2806/2744 f 2819/2819/2757 2818/2818/2756 2806/2806/2744 f 2806/2806/2744 2807/2807/2745 2819/2819/2757 f 2820/2820/2758 2819/2819/2757 2807/2807/2745 f 2807/2807/2745 2808/2808/2746 2820/2820/2758 f 2808/2808/2746 2798/2798/2736 2810/2810/2748 f 2810/2810/2748 2820/2820/2758 2808/2808/2746 f 2810/2810/2748 2809/2809/2747 2821/2821/2759 f 2821/2821/2759 2822/2822/2760 2810/2810/2748 f 2821/2821/2759 2809/2809/2747 2811/2811/2749 f 2811/2811/2749 2823/2823/2761 2821/2821/2759 f 2811/2811/2749 2812/2812/2750 2824/2824/2762 f 2824/2824/2762 2823/2823/2761 2811/2811/2749 f 2812/2812/2750 2813/2813/2751 2825/2825/2763 f 2825/2825/2763 2824/2824/2762 2812/2812/2750 f 2813/2813/2751 2814/2814/2752 2826/2826/2764 f 2826/2826/2764 2825/2825/2763 2813/2813/2751 f 2815/2815/2753 2827/2827/2765 2826/2826/2764 f 2826/2826/2764 2814/2814/2752 2815/2815/2753 f 2816/2816/2754 2828/2828/2766 2827/2827/2765 f 2827/2827/2765 2815/2815/2753 2816/2816/2754 f 2817/2817/2755 2829/2829/2767 2828/2828/2766 f 2828/2828/2766 2816/2816/2754 2817/2817/2755 f 2817/2817/2755 2818/2818/2756 2830/2830/2768 f 2830/2830/2768 2829/2829/2767 2817/2817/2755 f 2818/2818/2756 2819/2819/2757 2831/2831/2769 f 2831/2831/2769 2830/2830/2768 2818/2818/2756 f 2819/2819/2757 2820/2820/2758 2832/2832/2770 f 2832/2832/2770 2831/2831/2769 2819/2819/2757 f 2820/2820/2758 2810/2810/2748 2822/2822/2760 f 2822/2822/2760 2832/2832/2770 2820/2820/2758 f 2749/2749/2687 2752/2752/2690 2833/2833/2771 f 2753/2753/2691 2749/2749/2687 2833/2833/2771 f 2755/2755/2693 2753/2753/2691 2833/2833/2771 f 2757/2757/2695 2755/2755/2693 2833/2833/2771 f 2759/2759/2697 2757/2757/2695 2833/2833/2771 f 2761/2761/2699 2759/2759/2697 2833/2833/2771 f 2763/2763/2701 2761/2761/2699 2833/2833/2771 f 2765/2765/2703 2763/2763/2701 2833/2833/2771 f 2767/2767/2705 2765/2765/2703 2833/2833/2771 f 2769/2769/2707 2767/2767/2705 2833/2833/2771 f 2771/2771/2709 2769/2769/2707 2833/2833/2771 f 2752/2752/2690 2771/2771/2709 2833/2833/2771 f 2822/2822/2760 2821/2821/2759 2834/2834/2772 f 2821/2821/2759 2823/2823/2761 2834/2834/2772 f 2823/2823/2761 2824/2824/2762 2834/2834/2772 f 2824/2824/2762 2825/2825/2763 2834/2834/2772 f 2825/2825/2763 2826/2826/2764 2834/2834/2772 f 2826/2826/2764 2827/2827/2765 2834/2834/2772 f 2827/2827/2765 2828/2828/2766 2834/2834/2772 f 2828/2828/2766 2829/2829/2767 2834/2834/2772 f 2829/2829/2767 2830/2830/2768 2834/2834/2772 f 2830/2830/2768 2831/2831/2769 2834/2834/2772 f 2831/2831/2769 2832/2832/2770 2834/2834/2772 f 2832/2832/2770 2822/2822/2760 2834/2834/2772 v 4.8321 38.1943 125.2390 v 6.3035 36.0156 122.6597 v 8.6995 38.3397 123.0695 v 6.1288 39.4520 125.4608 v 3.0705 37.7436 125.1592 v 3.0486 35.1829 122.5121 v -0.1932 36.0646 122.6661 v 1.3161 38.2208 125.2425 v 0.0389 39.4979 125.4668 v -2.5531 38.4245 123.0807 v -0.4188 41.2329 125.7720 v -3.3988 41.6302 123.6445 v 0.0656 42.9607 126.0762 v -2.5037 44.8229 124.2067 v 1.3623 44.2185 126.2980 v -0.1077 47.1469 124.6165 v 3.1239 44.6691 126.3780 v 3.1473 47.9796 124.7641 v 4.8783 44.1919 126.2945 v 6.3890 47.0979 124.6100 v 6.1555 42.9148 126.0702 v 8.7489 44.7380 124.1955 v 6.6132 41.1799 125.7650 v 9.5946 41.5323 123.6317 v 10.0187 37.5198 119.6385 v 10.4179 37.9070 119.7068 v 3.0345 33.7825 118.9785 v 3.4769 33.8957 118.9987 v -3.8912 37.6247 119.6523 v -0.4913 35.9629 121.8697 v 2.5939 33.9023 118.9995 v -5.3894 42.2064 120.4581 v -4.2844 38.0179 119.7214 v -4.2199 46.3777 121.1926 v -1.0893 49.4142 121.7281 v 3.1635 50.5023 121.9209 v 7.3990 49.3502 121.7197 v 10.4823 46.2669 121.1781 v 11.5873 42.0784 120.4413 v 6.5985 35.9094 121.8627 v 7.6400 35.7525 115.4494 v 10.5909 37.9055 115.8293 v 3.5100 33.9633 115.1331 v -1.5477 35.8218 115.4585 v 2.5542 33.9705 115.1340 v -4.4651 38.0190 115.8443 v -6.0875 42.8735 116.6979 v -4.8915 38.3399 115.9005 v -4.8217 47.3885 117.4929 v -1.4332 50.6752 118.0725 v 3.1700 51.8529 118.2814 v 7.7545 50.6060 118.0634 v 11.0919 47.2686 117.4772 v 12.2880 42.7350 116.6797 v 11.0221 38.2199 115.8847 v 7.2961 37.0137 111.7939 v 10.0220 38.9480 112.1353 v 3.4801 35.3046 111.4919 v -1.1922 37.0777 111.8024 v 2.5971 35.3113 111.4928 v -3.8879 39.0529 112.1491 v -5.3868 43.5301 112.9364 v -4.2819 39.3416 112.1996 v -4.2174 47.7014 113.6709 v -1.0868 50.7379 114.2064 v 3.1660 51.8260 114.3992 v 7.4015 50.6739 114.1980 v 10.4849 47.5906 113.6563 v 11.5898 43.4021 112.9195 v 10.4204 39.2307 112.1851 v 6.3637 40.5345 101.3066 v 8.4792 41.8770 101.5434 v 3.3993 39.0435 101.0432 v -0.2276 40.5842 101.3131 v 2.7136 39.0487 101.0439 v -2.3221 41.9584 101.5541 v -3.4862 45.4117 102.1614 v -2.6282 42.1592 101.5894 v -2.5781 48.6508 102.7318 v -0.1472 51.0087 103.1477 v 3.1552 51.8535 103.2973 v 6.4441 50.9590 103.1411 v 8.8384 48.5647 102.7205 v 9.6964 45.3123 102.1484 v 8.7883 42.0731 101.5780 v 3.0969 41.0747 126.5166 v -2.2440 42.1033 101.0256 v -0.1795 40.7592 100.7898 v 2.7194 39.2351 100.5225 v 3.3952 39.2300 100.5219 v 6.3172 40.7102 100.7833 v 8.4022 42.0231 101.0151 v 8.7069 42.2149 101.0490 v 9.6020 45.4076 101.6111 v 8.7563 48.6133 102.1750 v 6.3964 50.9732 102.5895 v 3.1546 51.8549 102.7436 v -0.1003 51.0222 102.5959 v -2.4963 48.6981 102.1861 v -3.3914 45.5055 101.6240 v -2.5457 42.2998 101.0601 v 3.0304 33.7556 115.0965 v 3.0370 35.1062 111.4567 v 3.0550 38.8704 101.0125 v 3.0559 39.0582 100.4915 v 5.1658 42.4117 101.0824 v 6.5033 43.2539 101.2310 v 3.2913 41.4621 100.9147 v 3.0736 41.3519 100.8952 v 2.8577 41.4654 100.9151 v -0.3263 43.3054 101.2378 v 0.9981 42.4431 101.0865 v -0.5199 43.4314 101.2599 v -1.0624 45.4880 101.6217 v -0.4882 47.5361 101.9823 v 1.0489 49.0270 102.2452 v 3.1370 49.5612 102.3399 v 5.2166 48.9955 102.2411 v 6.7305 47.4816 101.9751 v 7.2730 45.4251 101.6134 v 6.6988 43.3770 101.2528 v 3.1042 45.3202 101.5937 vn 0.1743 -0.4652 0.8679 vn 0.3776 -0.7704 0.5137 vn 0.6445 -0.4882 0.5885 vn 0.3617 -0.3668 0.8571 vn -0.0035 -0.5708 0.8211 vn -0.0059 -0.8515 0.5243 vn -0.3881 -0.7647 0.5145 vn -0.1795 -0.4625 0.8682 vn -0.3680 -0.3722 0.8521 vn -0.6506 -0.4784 0.5898 vn -0.4361 -0.1527 0.8869 vn -0.7479 -0.1094 0.6547 vn -0.3760 0.0614 0.9246 vn -0.6449 0.2580 0.7194 vn -0.2153 0.2173 0.9521 vn -0.3692 0.5255 0.7665 vn 0.0030 0.2732 0.9620 vn 0.0055 0.6213 0.7835 vn 0.2205 0.2140 0.9516 vn 0.3786 0.5198 0.7658 vn 0.3763 0.0435 0.9255 vn 0.6502 0.2482 0.7181 vn 0.3534 -0.1648 0.9208 vn 0.7475 -0.1207 0.6532 vn 0.6039 -0.7745 0.1884 vn 0.8077 -0.5310 0.2562 vn -0.0035 -0.9845 0.1756 vn 0.3562 -0.9244 0.1364 vn -0.5829 -0.7976 0.1550 vn -0.4908 -0.8426 0.2219 vn -0.3314 -0.9292 0.1635 vn -0.9374 -0.0533 0.3441 vn -0.8151 -0.5188 0.2578 vn -0.8083 0.4073 0.4252 vn -0.4626 0.7426 0.4843 vn 0.0070 0.8627 0.5056 vn 0.4747 0.7355 0.4834 vn 0.8152 0.3951 0.4236 vn 0.9372 -0.0675 0.3422 vn 0.4710 -0.8544 0.2196 vn 0.4922 -0.8607 -0.1299 vn 0.5966 -0.7892 -0.1460 vn 0.4130 -0.8986 -0.1479 vn -0.5262 -0.8412 -0.1242 vn -0.4179 -0.8926 -0.1689 vn -0.5961 -0.7924 -0.1296 vn -1.0000 0.0075 0.0010 vn -0.8344 -0.5428 -0.0958 vn -0.8622 0.4989 0.0875 vn -0.4934 0.8567 0.1506 vn 0.0076 0.9848 0.1733 vn 0.5066 0.8491 0.1496 vn 0.8698 0.4859 0.0858 vn 1.0000 -0.0075 -0.0010 vn 0.8258 -0.5554 -0.0979 vn 0.4956 -0.8080 -0.3187 vn 0.5755 -0.7605 -0.3008 vn 0.4086 -0.8554 -0.3184 vn -0.5077 -0.8033 -0.3114 vn -0.4219 -0.8508 -0.3132 vn -0.5889 -0.7514 -0.2977 vn -0.9844 0.0379 -0.1720 vn -0.8163 -0.5112 -0.2690 vn -0.8487 0.5216 -0.0868 vn -0.4857 0.8738 -0.0247 vn 0.0075 1.0000 -0.0024 vn 0.4987 0.8664 -0.0257 vn 0.8563 0.5088 -0.0885 vn 0.9845 0.0230 -0.1740 vn 0.8078 -0.5238 -0.2702 vn 0.4926 -0.8134 -0.3095 vn 0.5346 -0.7914 -0.2963 vn 0.4495 -0.8402 -0.3033 vn -0.5044 -0.8039 -0.3151 vn -0.4604 -0.8330 -0.3067 vn -0.5490 -0.7806 -0.2987 vn -0.9852 0.0370 -0.1673 vn -0.8023 -0.5338 -0.2672 vn -0.8495 0.5212 -0.0821 vn -0.4861 0.8737 -0.0199 vn 0.0075 1.0000 0.0025 vn 0.4992 0.8663 -0.0209 vn 0.8571 0.5084 -0.0838 vn 0.9853 0.0222 -0.1693 vn 0.7938 -0.5457 -0.2684 vn 0.0049 -0.1823 0.9832 vn -0.3587 -0.4023 -0.8423 vn -0.3354 -0.4237 -0.8414 vn -0.3058 -0.4339 -0.8475 vn 0.2968 -0.4380 -0.8485 vn 0.3279 -0.4280 -0.8422 vn 0.3504 -0.4076 -0.8432 vn 0.5751 -0.3000 -0.7611 vn 0.6988 0.1187 -0.7054 vn 0.6079 0.4635 -0.6448 vn 0.3541 0.7172 -0.6002 vn 0.0055 0.8120 -0.5836 vn -0.3445 0.7225 -0.5995 vn -0.6021 0.4726 -0.6436 vn -0.6983 0.1293 -0.7040 vn -0.5810 -0.2919 -0.7597 vn -0.0050 -0.9840 -0.1781 vn -0.0077 -0.9386 -0.3449 vn -0.0077 -0.9406 -0.3394 vn -0.0058 -0.6043 -0.7967 vn 0.0003 0.1733 -0.9849 vt 0.4091 0.0181 0.0000 vt 0.4301 0.0368 0.0000 vt 0.4822 0.0302 0.0000 vt 0.4373 0.0146 0.0000 vt 0.3757 0.0194 0.0000 vt 0.3684 0.0391 0.0000 vt 0.3134 0.0367 0.0000 vt 0.3460 0.0181 0.0000 vt 0.3279 0.0145 0.0000 vt 0.2800 0.0301 0.0000 vt 0.3263 0.0097 0.0000 vt 0.2771 0.0211 0.0000 vt 0.3417 0.0048 0.0000 vt 0.3055 0.0122 0.0000 vt 0.3698 0.0013 0.0000 vt 0.3575 0.0056 0.0000 vt 0.4033 0.0000 0.0000 vt 0.4193 0.0033 0.0000 vt 0.4330 0.0013 0.0000 vt 0.4742 0.0057 0.0000 vt 0.4511 0.0049 0.0000 vt 0.5076 0.0123 0.0000 vt 0.4526 0.0097 0.0000 vt 0.5105 0.0213 0.0000 vt 0.5071 0.0513 0.0000 vt 0.5158 0.0502 0.0000 vt 0.3671 0.0618 0.0000 vt 0.3755 0.0615 0.0000 vt 0.2572 0.0512 0.0000 vt 0.3087 0.0414 0.0000 vt 0.3596 0.0615 0.0000 vt 0.2479 0.0383 0.0000 vt 0.2517 0.0501 0.0000 vt 0.2849 0.0266 0.0000 vt 0.3529 0.0181 0.0000 vt 0.4336 0.0149 0.0000 vt 0.5054 0.0181 0.0000 vt 0.5490 0.0267 0.0000 vt 0.5528 0.0385 0.0000 vt 0.4361 0.0415 0.0000 vt 0.4626 0.0784 0.0000 vt 0.5240 0.0723 0.0000 vt 0.3814 0.0835 0.0000 vt 0.2976 0.0783 0.0000 vt 0.3643 0.0835 0.0000 vt 0.2535 0.0722 0.0000 vt 0.2430 0.0586 0.0000 vt 0.2471 0.0713 0.0000 vt 0.2831 0.0459 0.0000 vt 0.3567 0.0367 0.0000 vt 0.4440 0.0333 0.0000 vt 0.5217 0.0367 0.0000 vt 0.5689 0.0460 0.0000 vt 0.5730 0.0587 0.0000 vt 0.5329 0.0714 0.0000 vt 0.4664 0.0970 0.0000 vt 0.5229 0.0915 0.0000 vt 0.3912 0.1018 0.0000 vt 0.3139 0.0969 0.0000 vt 0.3753 0.1018 0.0000 vt 0.2730 0.0914 0.0000 vt 0.2632 0.0789 0.0000 vt 0.2670 0.0906 0.0000 vt 0.3003 0.0672 0.0000 vt 0.3683 0.0586 0.0000 vt 0.4489 0.0555 0.0000 vt 0.5207 0.0587 0.0000 vt 0.5644 0.0673 0.0000 vt 0.5682 0.0790 0.0000 vt 0.5311 0.0907 0.0000 vt 0.4778 0.1505 0.0000 vt 0.5210 0.1467 0.0000 vt 0.4187 0.1548 0.0000 vt 0.3594 0.1505 0.0000 vt 0.4064 0.1548 0.0000 vt 0.3270 0.1467 0.0000 vt 0.3193 0.1370 0.0000 vt 0.3222 0.1461 0.0000 vt 0.3481 0.1279 0.0000 vt 0.4008 0.1212 0.0000 vt 0.4635 0.1188 0.0000 vt 0.5192 0.1213 0.0000 vt 0.5531 0.1280 0.0000 vt 0.5561 0.1371 0.0000 vt 0.5273 0.1462 0.0000 vt 0.3880 0.0057 0.0000 vt 0.3297 0.1494 0.0000 vt 0.3616 0.1532 0.0000 vt 0.4079 0.1574 0.0000 vt 0.4201 0.1574 0.0000 vt 0.4783 0.1532 0.0000 vt 0.5209 0.1495 0.0000 vt 0.5271 0.1490 0.0000 vt 0.5555 0.1400 0.0000 vt 0.5526 0.1310 0.0000 vt 0.5192 0.1244 0.0000 vt 0.4642 0.1220 0.0000 vt 0.4025 0.1244 0.0000 vt 0.3504 0.1309 0.0000 vt 0.3221 0.1399 0.0000 vt 0.3250 0.1489 0.0000 vt 0.3720 0.0841 0.0000 vt 0.3824 0.1024 0.0000 vt 0.4119 0.1552 0.0000 vt 0.4133 0.1579 0.0000 vt 0.4642 0.1485 0.0000 vt 0.4915 0.1461 0.0000 vt 0.4268 0.1511 0.0000 vt 0.4224 0.1515 0.0000 vt 0.4190 0.1511 0.0000 vt 0.3688 0.1460 0.0000 vt 0.3893 0.1484 0.0000 vt 0.3658 0.1457 0.0000 vt 0.3639 0.1399 0.0000 vt 0.3821 0.1342 0.0000 vt 0.4155 0.1300 0.0000 vt 0.4551 0.1284 0.0000 vt 0.4903 0.1300 0.0000 vt 0.5118 0.1342 0.0000 vt 0.5136 0.1400 0.0000 vt 0.4954 0.1457 0.0000 vt 0.4382 0.1403 0.0000 g Object001 f 2835/2835/2773 2836/2836/2774 2837/2837/2775 f 2837/2837/2775 2838/2838/2776 2835/2835/2773 f 2835/2835/2773 2839/2839/2777 2840/2840/2778 f 2840/2840/2778 2836/2836/2774 2835/2835/2773 f 2841/2841/2779 2840/2840/2778 2839/2839/2777 f 2839/2839/2777 2842/2842/2780 2841/2841/2779 f 2843/2843/2781 2844/2844/2782 2841/2841/2779 f 2841/2841/2779 2842/2842/2780 2843/2843/2781 f 2845/2845/2783 2846/2846/2784 2844/2844/2782 f 2844/2844/2782 2843/2843/2781 2845/2845/2783 f 2847/2847/2785 2848/2848/2786 2846/2846/2784 f 2846/2846/2784 2845/2845/2783 2847/2847/2785 f 2849/2849/2787 2850/2850/2788 2848/2848/2786 f 2848/2848/2786 2847/2847/2785 2849/2849/2787 f 2851/2851/2789 2852/2852/2790 2850/2850/2788 f 2850/2850/2788 2849/2849/2787 2851/2851/2789 f 2853/2853/2791 2854/2854/2792 2852/2852/2790 f 2852/2852/2790 2851/2851/2789 2853/2853/2791 f 2855/2855/2793 2856/2856/2794 2854/2854/2792 f 2854/2854/2792 2853/2853/2791 2855/2855/2793 f 2857/2857/2795 2858/2858/2796 2856/2856/2794 f 2856/2856/2794 2855/2855/2793 2857/2857/2795 f 2838/2838/2776 2837/2837/2775 2858/2858/2796 f 2858/2858/2796 2857/2857/2795 2838/2838/2776 f 2859/2859/2797 2860/2860/2798 2837/2837/2775 f 2837/2837/2775 2836/2836/2774 2859/2859/2797 f 2840/2840/2778 2861/2861/2799 2862/2862/2800 f 2862/2862/2800 2836/2836/2774 2840/2840/2778 f 2841/2841/2779 2863/2863/2801 2864/2864/2802 f 2864/2864/2802 2865/2865/2803 2841/2841/2779 f 2846/2846/2784 2866/2866/2804 2867/2867/2805 f 2867/2867/2805 2844/2844/2782 2846/2846/2784 f 2848/2848/2786 2868/2868/2806 2866/2866/2804 f 2866/2866/2804 2846/2846/2784 2848/2848/2786 f 2850/2850/2788 2869/2869/2807 2868/2868/2806 f 2868/2868/2806 2848/2848/2786 2850/2850/2788 f 2852/2852/2790 2870/2870/2808 2869/2869/2807 f 2869/2869/2807 2850/2850/2788 2852/2852/2790 f 2854/2854/2792 2871/2871/2809 2870/2870/2808 f 2870/2870/2808 2852/2852/2790 2854/2854/2792 f 2856/2856/2794 2872/2872/2810 2871/2871/2809 f 2871/2871/2809 2854/2854/2792 2856/2856/2794 f 2858/2858/2796 2873/2873/2811 2872/2872/2810 f 2872/2872/2810 2856/2856/2794 2858/2858/2796 f 2837/2837/2775 2860/2860/2798 2873/2873/2811 f 2873/2873/2811 2858/2858/2796 2837/2837/2775 f 2859/2859/2797 2874/2874/2812 2875/2875/2813 f 2875/2875/2813 2876/2876/2814 2859/2859/2797 f 2877/2877/2815 2875/2875/2813 2874/2874/2812 f 2874/2874/2812 2862/2862/2800 2877/2877/2815 f 2865/2865/2803 2864/2864/2802 2878/2878/2816 f 2878/2878/2816 2879/2879/2817 2865/2865/2803 f 2864/2864/2802 2863/2863/2801 2880/2880/2818 f 2880/2880/2818 2878/2878/2816 2864/2864/2802 f 2866/2866/2804 2881/2881/2819 2882/2882/2820 f 2882/2882/2820 2867/2867/2805 2866/2866/2804 f 2868/2868/2806 2883/2883/2821 2881/2881/2819 f 2881/2881/2819 2866/2866/2804 2868/2868/2806 f 2868/2868/2806 2869/2869/2807 2884/2884/2822 f 2884/2884/2822 2883/2883/2821 2868/2868/2806 f 2869/2869/2807 2870/2870/2808 2885/2885/2823 f 2885/2885/2823 2884/2884/2822 2869/2869/2807 f 2871/2871/2809 2886/2886/2824 2885/2885/2823 f 2885/2885/2823 2870/2870/2808 2871/2871/2809 f 2872/2872/2810 2887/2887/2825 2886/2886/2824 f 2886/2886/2824 2871/2871/2809 2872/2872/2810 f 2873/2873/2811 2888/2888/2826 2887/2887/2825 f 2887/2887/2825 2872/2872/2810 2873/2873/2811 f 2873/2873/2811 2860/2860/2798 2889/2889/2827 f 2889/2889/2827 2888/2888/2826 2873/2873/2811 f 2876/2876/2814 2875/2875/2813 2890/2890/2828 f 2890/2890/2828 2891/2891/2829 2876/2876/2814 f 2875/2875/2813 2877/2877/2815 2892/2892/2830 f 2892/2892/2830 2890/2890/2828 2875/2875/2813 f 2893/2893/2831 2894/2894/2832 2879/2879/2817 f 2879/2879/2817 2878/2878/2816 2893/2893/2831 f 2880/2880/2818 2895/2895/2833 2893/2893/2831 f 2893/2893/2831 2878/2878/2816 2880/2880/2818 f 2882/2882/2820 2881/2881/2819 2896/2896/2834 f 2896/2896/2834 2897/2897/2835 2882/2882/2820 f 2883/2883/2821 2898/2898/2836 2896/2896/2834 f 2896/2896/2834 2881/2881/2819 2883/2883/2821 f 2884/2884/2822 2899/2899/2837 2898/2898/2836 f 2898/2898/2836 2883/2883/2821 2884/2884/2822 f 2885/2885/2823 2900/2900/2838 2899/2899/2837 f 2899/2899/2837 2884/2884/2822 2885/2885/2823 f 2885/2885/2823 2886/2886/2824 2901/2901/2839 f 2901/2901/2839 2900/2900/2838 2885/2885/2823 f 2886/2886/2824 2887/2887/2825 2902/2902/2840 f 2902/2902/2840 2901/2901/2839 2886/2886/2824 f 2887/2887/2825 2888/2888/2826 2903/2903/2841 f 2903/2903/2841 2902/2902/2840 2887/2887/2825 f 2889/2889/2827 2904/2904/2842 2903/2903/2841 f 2903/2903/2841 2888/2888/2826 2889/2889/2827 f 2891/2891/2829 2890/2890/2828 2905/2905/2843 f 2905/2905/2843 2906/2906/2844 2891/2891/2829 f 2892/2892/2830 2907/2907/2845 2905/2905/2843 f 2905/2905/2843 2890/2890/2828 2892/2892/2830 f 2893/2893/2831 2908/2908/2846 2909/2909/2847 f 2909/2909/2847 2894/2894/2832 2893/2893/2831 f 2910/2910/2848 2908/2908/2846 2893/2893/2831 f 2893/2893/2831 2895/2895/2833 2910/2910/2848 f 2897/2897/2835 2896/2896/2834 2911/2911/2849 f 2911/2911/2849 2912/2912/2850 2897/2897/2835 f 2911/2911/2849 2896/2896/2834 2898/2898/2836 f 2898/2898/2836 2913/2913/2851 2911/2911/2849 f 2913/2913/2851 2898/2898/2836 2899/2899/2837 f 2899/2899/2837 2914/2914/2852 2913/2913/2851 f 2914/2914/2852 2899/2899/2837 2900/2900/2838 f 2900/2900/2838 2915/2915/2853 2914/2914/2852 f 2915/2915/2853 2900/2900/2838 2901/2901/2839 f 2901/2901/2839 2916/2916/2854 2915/2915/2853 f 2916/2916/2854 2901/2901/2839 2902/2902/2840 f 2902/2902/2840 2917/2917/2855 2916/2916/2854 f 2917/2917/2855 2902/2902/2840 2903/2903/2841 f 2903/2903/2841 2918/2918/2856 2917/2917/2855 f 2918/2918/2856 2903/2903/2841 2904/2904/2842 f 2904/2904/2842 2919/2919/2857 2918/2918/2856 f 2838/2838/2776 2920/2920/2858 2839/2839/2777 f 2839/2839/2777 2835/2835/2773 2838/2838/2776 f 2843/2843/2781 2842/2842/2780 2839/2839/2777 f 2839/2839/2777 2920/2920/2858 2843/2843/2781 f 2920/2920/2858 2847/2847/2785 2845/2845/2783 f 2845/2845/2783 2843/2843/2781 2920/2920/2858 f 2920/2920/2858 2851/2851/2789 2849/2849/2787 f 2849/2849/2787 2847/2847/2785 2920/2920/2858 f 2920/2920/2858 2855/2855/2793 2853/2853/2791 f 2853/2853/2791 2851/2851/2789 2920/2920/2858 f 2855/2855/2793 2920/2920/2858 2838/2838/2776 f 2838/2838/2776 2857/2857/2795 2855/2855/2793 f 2910/2910/2848 2921/2921/2859 2922/2922/2860 f 2922/2922/2860 2908/2908/2846 2910/2910/2848 f 2909/2909/2847 2908/2908/2846 2922/2922/2860 f 2922/2922/2860 2923/2923/2861 2909/2909/2847 f 2905/2905/2843 2907/2907/2845 2924/2924/2862 f 2924/2924/2862 2925/2925/2863 2905/2905/2843 f 2906/2906/2844 2905/2905/2843 2925/2925/2863 f 2925/2925/2863 2926/2926/2864 2906/2906/2844 f 2918/2918/2856 2919/2919/2857 2927/2927/2865 f 2927/2927/2865 2928/2928/2866 2918/2918/2856 f 2918/2918/2856 2928/2928/2866 2929/2929/2867 f 2929/2929/2867 2917/2917/2855 2918/2918/2856 f 2917/2917/2855 2929/2929/2867 2930/2930/2868 f 2930/2930/2868 2916/2916/2854 2917/2917/2855 f 2931/2931/2869 2915/2915/2853 2916/2916/2854 f 2916/2916/2854 2930/2930/2868 2931/2931/2869 f 2914/2914/2852 2915/2915/2853 2931/2931/2869 f 2931/2931/2869 2932/2932/2870 2914/2914/2852 f 2914/2914/2852 2932/2932/2870 2933/2933/2871 f 2933/2933/2871 2913/2913/2851 2914/2914/2852 f 2913/2913/2851 2933/2933/2871 2934/2934/2872 f 2934/2934/2872 2911/2911/2849 2913/2913/2851 f 2912/2912/2850 2911/2911/2849 2934/2934/2872 f 2934/2934/2872 2935/2935/2873 2912/2912/2850 f 2861/2861/2799 2936/2936/2874 2877/2877/2815 f 2877/2877/2815 2862/2862/2800 2861/2861/2799 f 2937/2937/2875 2892/2892/2830 2877/2877/2815 f 2877/2877/2815 2936/2936/2874 2937/2937/2875 f 2937/2937/2875 2938/2938/2876 2907/2907/2845 f 2907/2907/2845 2892/2892/2830 2937/2937/2875 f 2939/2939/2877 2924/2924/2862 2907/2907/2845 f 2907/2907/2845 2938/2938/2876 2939/2939/2877 f 2923/2923/2861 2939/2939/2877 2938/2938/2876 f 2938/2938/2876 2909/2909/2847 2923/2923/2861 f 2937/2937/2875 2894/2894/2832 2909/2909/2847 f 2909/2909/2847 2938/2938/2876 2937/2937/2875 f 2936/2936/2874 2879/2879/2817 2894/2894/2832 f 2894/2894/2832 2937/2937/2875 2936/2936/2874 f 2865/2865/2803 2879/2879/2817 2936/2936/2874 f 2936/2936/2874 2861/2861/2799 2865/2865/2803 f 2836/2836/2774 2862/2862/2800 2874/2874/2812 f 2874/2874/2812 2859/2859/2797 2836/2836/2774 f 2840/2840/2778 2841/2841/2779 2865/2865/2803 f 2865/2865/2803 2861/2861/2799 2840/2840/2778 f 2926/2926/2864 2925/2925/2863 2940/2940/2878 f 2940/2940/2878 2941/2941/2878 2926/2926/2864 f 2925/2925/2863 2924/2924/2862 2942/2942/2878 f 2942/2942/2878 2940/2940/2878 2925/2925/2863 f 2943/2943/2878 2939/2939/2877 2923/2923/2861 f 2923/2923/2861 2944/2944/2878 2943/2943/2878 f 2921/2921/2859 2945/2945/2878 2946/2946/2878 f 2946/2946/2878 2922/2922/2860 2921/2921/2859 f 2947/2947/2878 2935/2935/2873 2934/2934/2872 f 2934/2934/2872 2948/2948/2878 2947/2947/2878 f 2934/2934/2872 2933/2933/2871 2949/2949/2878 f 2949/2949/2878 2948/2948/2878 2934/2934/2872 f 2933/2933/2871 2932/2932/2870 2950/2950/2878 f 2950/2950/2878 2949/2949/2878 2933/2933/2871 f 2932/2932/2870 2931/2931/2869 2951/2951/2878 f 2951/2951/2878 2950/2950/2878 2932/2932/2870 f 2931/2931/2869 2930/2930/2868 2952/2952/2878 f 2952/2952/2878 2951/2951/2878 2931/2931/2869 f 2952/2952/2878 2930/2930/2868 2929/2929/2867 f 2929/2929/2867 2953/2953/2878 2952/2952/2878 f 2953/2953/2878 2929/2929/2867 2928/2928/2866 f 2928/2928/2866 2954/2954/2878 2953/2953/2878 f 2928/2928/2866 2927/2927/2865 2955/2955/2878 f 2955/2955/2878 2954/2954/2878 2928/2928/2866 f 2942/2942/2878 2924/2924/2862 2939/2939/2877 f 2939/2939/2877 2943/2943/2878 2942/2942/2878 f 2922/2922/2860 2946/2946/2878 2944/2944/2878 f 2944/2944/2878 2923/2923/2861 2922/2922/2860 f 2927/2927/2865 2926/2926/2864 2941/2941/2878 f 2941/2941/2878 2955/2955/2878 2927/2927/2865 f 2906/2906/2844 2926/2926/2864 2927/2927/2865 f 2927/2927/2865 2919/2919/2857 2906/2906/2844 f 2906/2906/2844 2919/2919/2857 2904/2904/2842 f 2904/2904/2842 2891/2891/2829 2906/2906/2844 f 2891/2891/2829 2904/2904/2842 2889/2889/2827 f 2889/2889/2827 2876/2876/2814 2891/2891/2829 f 2876/2876/2814 2889/2889/2827 2860/2860/2798 f 2860/2860/2798 2859/2859/2797 2876/2876/2814 f 2880/2880/2818 2863/2863/2801 2867/2867/2805 f 2867/2867/2805 2882/2882/2820 2880/2880/2818 f 2880/2880/2818 2882/2882/2820 2897/2897/2835 f 2897/2897/2835 2895/2895/2833 2880/2880/2818 f 2897/2897/2835 2912/2912/2850 2910/2910/2848 f 2910/2910/2848 2895/2895/2833 2897/2897/2835 f 2921/2921/2859 2910/2910/2848 2912/2912/2850 f 2912/2912/2850 2935/2935/2873 2921/2921/2859 f 2921/2921/2859 2935/2935/2873 2947/2947/2878 f 2947/2947/2878 2945/2945/2878 2921/2921/2859 f 2844/2844/2782 2867/2867/2805 2863/2863/2801 f 2863/2863/2801 2841/2841/2779 2844/2844/2782 f 2948/2948/2878 2949/2949/2878 2950/2950/2878 f 2950/2950/2878 2956/2956/2878 2948/2948/2878 f 2950/2950/2878 2951/2951/2878 2952/2952/2878 f 2952/2952/2878 2956/2956/2878 2950/2950/2878 f 2952/2952/2878 2953/2953/2878 2954/2954/2878 f 2954/2954/2878 2956/2956/2878 2952/2952/2878 f 2956/2956/2878 2954/2954/2878 2955/2955/2878 f 2955/2955/2878 2941/2941/2878 2956/2956/2878 f 2944/2944/2878 2956/2956/2878 2942/2942/2878 f 2942/2942/2878 2943/2943/2878 2944/2944/2878 f 2944/2944/2878 2946/2946/2878 2945/2945/2878 f 2945/2945/2878 2956/2956/2878 2944/2944/2878 f 2940/2940/2878 2942/2942/2878 2956/2956/2878 f 2956/2956/2878 2941/2941/2878 2940/2940/2878 f 2948/2948/2878 2956/2956/2878 2945/2945/2878 f 2945/2945/2878 2947/2947/2878 2948/2948/2878 v 22.0172 18.7516 0.0000 v -25.7945 18.7516 0.0000 v -25.7945 66.5633 0.0000 v 22.0172 66.5633 0.0000 v 22.0172 66.5633 36.9166 v -25.7945 66.5633 36.9166 v -25.7945 18.7516 36.9166 v 22.0172 18.7516 36.9166 v -25.7945 15.1734 33.3361 v -25.7945 15.1734 3.5805 v 22.0172 15.1734 3.5805 v 22.0172 15.1734 33.3361 v 25.5954 18.7516 33.3361 v 25.5954 18.7516 3.5805 v 25.5954 66.5633 3.5805 v 25.5954 66.5633 33.3361 v 22.0172 70.1415 33.3361 v 22.0172 70.1415 3.5805 v -25.7945 70.1415 3.5805 v -25.7945 70.1415 33.3361 v -29.3728 66.5633 33.3361 v -29.3728 66.5633 3.5805 v -29.3728 18.7516 3.5805 v -29.3728 18.7516 33.3361 v -27.6951 15.1734 1.6776 v -29.3728 16.8510 1.6776 v -27.6951 16.8510 0.0000 v 23.9178 16.8510 0.0000 v 25.5954 16.8510 1.6776 v 23.9178 15.1734 1.6776 v -29.3728 68.4639 1.6776 v -27.6951 70.1415 1.6776 v -27.6951 68.4639 0.0000 v 23.9178 68.4639 0.0000 v 23.9178 70.1415 1.6776 v 25.5954 68.4639 1.6776 v -27.6951 15.1734 35.2390 v -27.6951 16.8510 36.9166 v -29.3728 16.8510 35.2390 v 25.5954 16.8510 35.2390 v 23.9178 16.8510 36.9166 v 23.9178 15.1734 35.2390 v -29.3728 68.4639 35.2390 v -27.6951 68.4639 36.9166 v -27.6951 70.1415 35.2390 v 23.9178 70.1415 35.2390 v 23.9178 68.4639 36.9166 v 25.5954 68.4639 35.2390 v -29.3728 66.5633 1.6776 v -27.6951 66.5633 0.0000 v -27.6951 18.7516 0.0000 v -29.3728 18.7516 1.6776 v 22.0172 70.1415 1.6776 v 22.0172 68.4639 0.0000 v -25.7945 68.4639 0.0000 v -25.7945 70.1415 1.6776 v 25.5954 18.7516 1.6776 v 23.9178 18.7516 0.0000 v 23.9178 66.5633 0.0000 v 25.5954 66.5633 1.6776 v -25.7945 15.1734 1.6776 v -25.7945 16.8510 0.0000 v 22.0172 16.8510 0.0000 v 22.0172 15.1734 1.6776 v 22.0172 15.1734 35.2390 v 22.0172 16.8510 36.9166 v -25.7945 16.8510 36.9166 v -25.7945 15.1734 35.2390 v 25.5954 66.5633 35.2390 v 23.9178 66.5633 36.9166 v 23.9178 18.7516 36.9166 v 25.5954 18.7516 35.2390 v -25.7945 70.1415 35.2390 v -25.7945 68.4639 36.9166 v 22.0172 68.4639 36.9166 v 22.0172 70.1415 35.2390 v -29.3728 18.7516 35.2390 v -27.6951 18.7516 36.9166 v -27.6951 66.5633 36.9166 v -29.3728 66.5633 35.2390 v 25.5954 16.8510 33.3361 v 23.9178 15.1734 33.3361 v 23.9178 15.1734 3.5805 v 25.5954 16.8510 3.5805 v -29.3728 16.8510 3.5805 v -27.6951 15.1734 3.5805 v -27.6951 15.1734 33.3361 v -29.3728 16.8510 33.3361 v 23.9178 70.1415 33.3361 v 25.5954 68.4639 33.3361 v 25.5954 68.4639 3.5805 v 23.9178 70.1415 3.5805 v -29.3728 68.4639 33.3361 v -27.6951 70.1415 33.3361 v -27.6951 70.1415 3.5805 v -29.3728 68.4639 3.5805 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn -0.3416 -0.8756 -0.3416 vn -0.8756 -0.3416 -0.3416 vn -0.3416 -0.3416 -0.8756 vn 0.3416 -0.3416 -0.8756 vn 0.8756 -0.3416 -0.3416 vn 0.3416 -0.8756 -0.3416 vn -0.8756 0.3416 -0.3416 vn -0.3416 0.8756 -0.3416 vn -0.3416 0.3416 -0.8756 vn 0.3416 0.3416 -0.8756 vn 0.3416 0.8756 -0.3416 vn 0.8756 0.3416 -0.3416 vn -0.3416 -0.8756 0.3416 vn -0.3416 -0.3416 0.8756 vn -0.8756 -0.3416 0.3416 vn 0.8756 -0.3416 0.3416 vn 0.3416 -0.3416 0.8756 vn 0.3416 -0.8756 0.3416 vn -0.8756 0.3416 0.3416 vn -0.3416 0.3416 0.8756 vn -0.3416 0.8756 0.3416 vn 0.3416 0.8756 0.3416 vn 0.3416 0.3416 0.8756 vn 0.8756 0.3416 0.3416 vn -0.9239 -0.0000 -0.3827 vn -0.3827 0.0000 -0.9239 vn -0.3827 -0.0000 -0.9239 vn -0.0000 0.9239 -0.3827 vn 0.0000 0.3827 -0.9239 vn -0.0000 0.3827 -0.9239 vn 0.9239 0.0000 -0.3827 vn 0.3827 0.0000 -0.9239 vn 0.0000 -0.9239 -0.3827 vn 0.0000 -0.3827 -0.9239 vn 0.0000 -0.9239 0.3827 vn 0.0000 -0.3827 0.9239 vn 0.9239 0.0000 0.3827 vn 0.3827 0.0000 0.9239 vn 0.0000 0.9239 0.3827 vn 0.0000 0.3827 0.9239 vn -0.9239 0.0000 0.3827 vn -0.3827 0.0000 0.9239 vn 0.9239 -0.3827 0.0000 vn 0.3827 -0.9239 0.0000 vn -0.9239 -0.3827 0.0000 vn -0.3827 -0.9239 0.0000 vn 0.3827 0.9239 0.0000 vn 0.9239 0.3827 0.0000 vn -0.9239 0.3827 0.0000 vn -0.3827 0.9239 0.0000 vt 0.7383 0.3718 0.4391 vt 0.5083 0.2439 0.6402 vt 0.2617 0.3632 0.4527 vt 0.4917 0.4911 0.2517 vt 0.4917 0.7561 0.3598 vt 0.2617 0.6282 0.5609 vt 0.5083 0.5089 0.7483 vt 0.7383 0.6368 0.5473 vt 0.5268 0.4743 0.7519 vt 0.5268 0.2607 0.6647 vt 0.7568 0.3886 0.4637 vt 0.7568 0.6022 0.5508 vt 0.7555 0.6207 0.5218 vt 0.7555 0.4071 0.4346 vt 0.5089 0.5264 0.2471 vt 0.5089 0.7399 0.3343 vt 0.4732 0.7393 0.3353 vt 0.4732 0.5257 0.2481 vt 0.2432 0.3978 0.4492 vt 0.2432 0.6114 0.5363 vt 0.2445 0.5929 0.5654 vt 0.2445 0.3793 0.4782 vt 0.4911 0.2601 0.6657 vt 0.4911 0.4736 0.7529 vt 0.5176 0.2420 0.6671 vt 0.5009 0.2417 0.6676 vt 0.5090 0.2341 0.6556 vt 0.7572 0.3722 0.4386 vt 0.7653 0.3887 0.4365 vt 0.7659 0.3800 0.4501 vt 0.2347 0.3704 0.4652 vt 0.2341 0.3791 0.4516 vt 0.2428 0.3628 0.4533 vt 0.4910 0.5009 0.2362 vt 0.4824 0.5171 0.2346 vt 0.4991 0.5174 0.2341 vt 0.5176 0.4829 0.7654 vt 0.5090 0.4991 0.7638 vt 0.5009 0.4826 0.7659 vt 0.7653 0.6296 0.5348 vt 0.7572 0.6372 0.5467 vt 0.7659 0.6209 0.5484 vt 0.2347 0.6113 0.5635 vt 0.2428 0.6278 0.5614 vt 0.2341 0.6200 0.5499 vt 0.4824 0.7580 0.3329 vt 0.4910 0.7659 0.3444 vt 0.4991 0.7583 0.3324 vt 0.2445 0.3657 0.4727 vt 0.2526 0.3581 0.4607 vt 0.4992 0.2388 0.6482 vt 0.4911 0.2464 0.6601 vt 0.4732 0.5120 0.2426 vt 0.4819 0.4958 0.2442 vt 0.2519 0.3679 0.4453 vt 0.2432 0.3842 0.4436 vt 0.7555 0.3934 0.4290 vt 0.7474 0.3769 0.4312 vt 0.5008 0.4962 0.2437 vt 0.5089 0.5127 0.2416 vt 0.5268 0.2470 0.6591 vt 0.5181 0.2392 0.6476 vt 0.7481 0.3671 0.4466 vt 0.7568 0.3749 0.4581 vt 0.7568 0.6158 0.5564 vt 0.7481 0.6321 0.5547 vt 0.5181 0.5042 0.7558 vt 0.5268 0.4880 0.7574 vt 0.5089 0.7536 0.3399 vt 0.5008 0.7612 0.3518 vt 0.7474 0.6419 0.5393 vt 0.7555 0.6343 0.5273 vt 0.2432 0.6251 0.5419 vt 0.2519 0.6329 0.5534 vt 0.4819 0.7608 0.3524 vt 0.4732 0.7530 0.3409 vt 0.4911 0.4873 0.7584 vt 0.4992 0.5038 0.7563 vt 0.2526 0.6231 0.5688 vt 0.2445 0.6066 0.5710 vt 0.7653 0.6159 0.5292 vt 0.7659 0.6073 0.5428 vt 0.7659 0.3937 0.4557 vt 0.7653 0.4024 0.4420 vt 0.5009 0.2553 0.6732 vt 0.5176 0.2556 0.6727 vt 0.5176 0.4692 0.7598 vt 0.5009 0.4689 0.7603 vt 0.4824 0.7444 0.3273 vt 0.4991 0.7447 0.3268 vt 0.4991 0.5311 0.2397 vt 0.4824 0.5308 0.2402 vt 0.2347 0.5976 0.5580 vt 0.2341 0.6063 0.5443 vt 0.2341 0.3927 0.4572 vt 0.2347 0.3841 0.4708 g Box001 f 2957/2957/2879 2958/2958/2879 2959/2959/2879 f 2959/2959/2879 2960/2960/2879 2957/2957/2879 f 2961/2961/2880 2962/2962/2880 2963/2963/2880 f 2963/2963/2880 2964/2964/2880 2961/2961/2880 f 2965/2965/2881 2966/2966/2881 2967/2967/2881 f 2967/2967/2881 2968/2968/2881 2965/2965/2881 f 2969/2969/2882 2970/2970/2882 2971/2971/2882 f 2971/2971/2882 2972/2972/2882 2969/2969/2882 f 2973/2973/2883 2974/2974/2883 2975/2975/2883 f 2975/2975/2883 2976/2976/2883 2973/2973/2883 f 2977/2977/2884 2978/2978/2884 2979/2979/2884 f 2979/2979/2884 2980/2980/2884 2977/2977/2884 f 2981/2981/2885 2982/2982/2886 2983/2983/2887 f 2984/2984/2888 2985/2985/2889 2986/2986/2890 f 2987/2987/2891 2988/2988/2892 2989/2989/2893 f 2990/2990/2894 2991/2991/2895 2992/2992/2896 f 2993/2993/2897 2994/2994/2898 2995/2995/2899 f 2996/2996/2900 2997/2997/2901 2998/2998/2902 f 2999/2999/2903 3000/3000/2904 3001/3001/2905 f 3002/3002/2906 3003/3003/2907 3004/3004/2908 f 3005/3005/2909 3006/3006/2910 3007/3007/2911 f 3007/3007/2911 3008/3008/2909 3005/3005/2909 f 3009/3009/2912 3010/3010/2913 3011/3011/2914 f 3011/3011/2914 3012/3012/2912 3009/3009/2912 f 3013/3013/2915 3014/3014/2916 3015/3015/2916 f 3015/3015/2916 3016/3016/2915 3013/3013/2915 f 3017/3017/2917 3018/3018/2918 3019/3019/2918 f 3019/3019/2918 3020/3020/2917 3017/3017/2917 f 3021/3021/2919 3022/3022/2920 3023/3023/2920 f 3023/3023/2920 3024/3024/2919 3021/3021/2919 f 3025/3025/2921 3026/3026/2922 3027/3027/2922 f 3027/3027/2922 3028/3028/2921 3025/3025/2921 f 3029/3029/2923 3030/3030/2924 3031/3031/2924 f 3031/3031/2924 3032/3032/2923 3029/3029/2923 f 3033/3033/2925 3034/3034/2926 3035/3035/2926 f 3035/3035/2926 3036/3036/2925 3033/3033/2925 f 3037/3037/2927 3038/3038/2928 3039/3039/2928 f 3039/3039/2928 3040/3040/2927 3037/3037/2927 f 3041/3041/2929 3042/3042/2930 3043/3043/2930 f 3043/3043/2930 3044/3044/2929 3041/3041/2929 f 3045/3045/2931 3046/3046/2932 3047/3047/2932 f 3047/3047/2932 3048/3048/2931 3045/3045/2931 f 3049/3049/2933 3050/3050/2934 3051/3051/2934 f 3051/3051/2934 3052/3052/2933 3049/3049/2933 f 3024/3024/2919 2965/2965/2881 2968/2968/2881 f 2968/2968/2881 3021/3021/2919 3024/3024/2919 f 3020/3020/2917 2967/2967/2881 2966/2966/2881 f 2966/2966/2881 3017/3017/2917 3020/3020/2917 f 3028/3028/2921 2969/2969/2882 2972/2972/2882 f 2972/2972/2882 3025/3025/2921 3028/3028/2921 f 3016/3016/2915 2971/2971/2882 2970/2970/2882 f 2970/2970/2882 3013/3013/2915 3016/3016/2915 f 3032/3032/2923 2973/2973/2883 2976/2976/2883 f 2976/2976/2883 3029/3029/2923 3032/3032/2923 f 3012/3012/2912 2975/2975/2883 2974/2974/2883 f 2974/2974/2883 3009/3009/2912 3012/3012/2912 f 3036/3036/2925 2977/2977/2884 2980/2980/2884 f 2980/2980/2884 3033/3033/2925 3036/3036/2925 f 3008/3008/2909 2979/2979/2884 2978/2978/2884 f 2978/2978/2884 3005/3005/2909 3008/3008/2909 f 2996/2996/2900 2998/2998/2902 3038/3038/2928 f 3038/3038/2928 3037/3037/2927 2996/2996/2900 f 2986/2986/2890 2985/2985/2889 3040/3040/2927 f 3040/3040/2927 3039/3039/2928 2986/2986/2890 f 2982/2982/2886 2981/2981/2885 3042/3042/2930 f 3042/3042/2930 3041/3041/2929 2982/2982/2886 f 2993/2993/2897 2995/2995/2899 3044/3044/2929 f 3044/3044/2929 3043/3043/2930 2993/2993/2897 f 3002/3002/2906 3004/3004/2908 3046/3046/2932 f 3046/3046/2932 3045/3045/2931 3002/3002/2906 f 2992/2992/2896 2991/2991/2895 3048/3048/2931 f 3048/3048/2931 3047/3047/2932 2992/2992/2896 f 2999/2999/2903 3001/3001/2905 3050/3050/2934 f 3050/3050/2934 3049/3049/2933 2999/2999/2903 f 2988/2988/2892 2987/2987/2891 3052/3052/2933 f 3052/3052/2933 3051/3051/2934 2988/2988/2892 f 3014/3014/2916 2957/2957/2879 2960/2960/2879 f 2960/2960/2879 3015/3015/2916 3014/3014/2916 f 3006/3006/2910 2959/2959/2879 2958/2958/2879 f 2958/2958/2879 3007/3007/2911 3006/3006/2910 f 3026/3026/2922 2961/2961/2880 2964/2964/2880 f 2964/2964/2880 3027/3027/2922 3026/3026/2922 f 3034/3034/2926 2963/2963/2880 2962/2962/2880 f 2962/2962/2880 3035/3035/2926 3034/3034/2926 f 3043/3043/2930 3042/3042/2930 2966/2966/2881 f 2966/2966/2881 2965/2965/2881 3043/3043/2930 f 3039/3039/2928 3038/3038/2928 2968/2968/2881 f 2968/2968/2881 2967/2967/2881 3039/3039/2928 f 3045/3045/2931 3048/3048/2931 2974/2974/2883 f 2974/2974/2883 2973/2973/2883 3045/3045/2931 f 3051/3051/2934 3050/3050/2934 2976/2976/2883 f 2976/2976/2883 2975/2975/2883 3051/3051/2934 f 2991/2991/2895 2990/2990/2894 3010/3010/2913 f 3010/3010/2913 3009/3009/2912 2991/2991/2895 f 2989/2989/2893 2988/2988/2892 3012/3012/2912 f 3012/3012/2912 3011/3011/2914 2989/2989/2893 f 2981/2981/2885 2983/2983/2887 3018/3018/2918 f 3018/3018/2918 3017/3017/2917 2981/2981/2885 f 2984/2984/2888 2986/2986/2890 3020/3020/2917 f 3020/3020/2917 3019/3019/2918 2984/2984/2888 f 2998/2998/2902 2997/2997/2901 3022/3022/2920 f 3022/3022/2920 3021/3021/2919 2998/2998/2902 f 2994/2994/2898 2993/2993/2897 3024/3024/2919 f 3024/3024/2919 3023/3023/2920 2994/2994/2898 f 3001/3001/2905 3000/3000/2904 3030/3030/2924 f 3030/3030/2924 3029/3029/2923 3001/3001/2905 f 3003/3003/2907 3002/3002/2906 3032/3032/2923 f 3032/3032/2923 3031/3031/2924 3003/3003/2907 f 2993/2993/2897 3043/3043/2930 2965/2965/2881 f 2965/2965/2881 3024/3024/2919 2993/2993/2897 f 3038/3038/2928 2998/2998/2902 3021/3021/2919 f 3021/3021/2919 2968/2968/2881 3038/3038/2928 f 2986/2986/2890 3039/3039/2928 2967/2967/2881 f 2967/2967/2881 3020/3020/2917 2986/2986/2890 f 3042/3042/2930 2981/2981/2885 3017/3017/2917 f 3017/3017/2917 2966/2966/2881 3042/3042/2930 f 3002/3002/2906 3045/3045/2931 2973/2973/2883 f 2973/2973/2883 3032/3032/2923 3002/3002/2906 f 3050/3050/2934 3001/3001/2905 3029/3029/2923 f 3029/3029/2923 2976/2976/2883 3050/3050/2934 f 2988/2988/2892 3051/3051/2934 2975/2975/2883 f 2975/2975/2883 3012/3012/2912 2988/2988/2892 f 3048/3048/2931 2991/2991/2895 3009/3009/2912 f 3009/3009/2912 2974/2974/2883 3048/3048/2931 f 3019/3019/2918 3018/3018/2918 2958/2958/2879 f 2958/2958/2879 2957/2957/2879 3019/3019/2918 f 3011/3011/2914 3010/3010/2913 2960/2960/2879 f 2960/2960/2879 2959/2959/2879 3011/3011/2914 f 3031/3031/2924 3030/3030/2924 2962/2962/2880 f 2962/2962/2880 2961/2961/2880 3031/3031/2924 f 3023/3023/2920 3022/3022/2920 2964/2964/2880 f 2964/2964/2880 2963/2963/2880 3023/3023/2920 f 3037/3037/2927 3040/3040/2927 2970/2970/2882 f 2970/2970/2882 2969/2969/2882 3037/3037/2927 f 3047/3047/2932 3046/3046/2932 2972/2972/2882 f 2972/2972/2882 2971/2971/2882 3047/3047/2932 f 3049/3049/2933 3052/3052/2933 2978/2978/2884 f 2978/2978/2884 2977/2977/2884 3049/3049/2933 f 3041/3041/2929 3044/3044/2929 2980/2980/2884 f 2980/2980/2884 2979/2979/2884 3041/3041/2929 f 2987/2987/2891 2989/2989/2893 3006/3006/2910 f 3006/3006/2910 3005/3005/2909 2987/2987/2891 f 2983/2983/2887 2982/2982/2886 3008/3008/2909 f 3008/3008/2909 3007/3007/2911 2983/2983/2887 f 2985/2985/2889 2984/2984/2888 3014/3014/2916 f 3014/3014/2916 3013/3013/2915 2985/2985/2889 f 2990/2990/2894 2992/2992/2896 3016/3016/2915 f 3016/3016/2915 3015/3015/2916 2990/2990/2894 f 3004/3004/2908 3003/3003/2907 3026/3026/2922 f 3026/3026/2922 3025/3025/2921 3004/3004/2908 f 2997/2997/2901 2996/2996/2900 3028/3028/2921 f 3028/3028/2921 3027/3027/2922 2997/2997/2901 f 2995/2995/2899 2994/2994/2898 3034/3034/2926 f 3034/3034/2926 3033/3033/2925 2995/2995/2899 f 3000/3000/2904 2999/2999/2903 3036/3036/2925 f 3036/3036/2925 3035/3035/2926 3000/3000/2904 f 2996/2996/2900 3037/3037/2927 2969/2969/2882 f 2969/2969/2882 3028/3028/2921 2996/2996/2900 f 3046/3046/2932 3004/3004/2908 3025/3025/2921 f 3025/3025/2921 2972/2972/2882 3046/3046/2932 f 2992/2992/2896 3047/3047/2932 2971/2971/2882 f 2971/2971/2882 3016/3016/2915 2992/2992/2896 f 3040/3040/2927 2985/2985/2889 3013/3013/2915 f 3013/3013/2915 2970/2970/2882 3040/3040/2927 f 2999/2999/2903 3049/3049/2933 2977/2977/2884 f 2977/2977/2884 3036/3036/2925 2999/2999/2903 f 3044/3044/2929 2995/2995/2899 3033/3033/2925 f 3033/3033/2925 2980/2980/2884 3044/3044/2929 f 2982/2982/2886 3041/3041/2929 2979/2979/2884 f 2979/2979/2884 3008/3008/2909 2982/2982/2886 f 3052/3052/2933 2987/2987/2891 3005/3005/2909 f 3005/3005/2909 2978/2978/2884 3052/3052/2933 f 2984/2984/2888 3019/3019/2918 2957/2957/2879 f 2957/2957/2879 3014/3014/2916 2984/2984/2888 f 3010/3010/2913 2990/2990/2894 3015/3015/2916 f 3015/3015/2916 2960/2960/2879 3010/3010/2913 f 2989/2989/2893 3011/3011/2914 2959/2959/2879 f 2959/2959/2879 3006/3006/2910 2989/2989/2893 f 3018/3018/2918 2983/2983/2887 3007/3007/2911 f 3007/3007/2911 2958/2958/2879 3018/3018/2918 f 3003/3003/2907 3031/3031/2924 2961/2961/2880 f 2961/2961/2880 3026/3026/2922 3003/3003/2907 f 3022/3022/2920 2997/2997/2901 3027/3027/2922 f 3027/3027/2922 2964/2964/2880 3022/3022/2920 f 2994/2994/2898 3023/3023/2920 2963/2963/2880 f 2963/2963/2880 3034/3034/2926 2994/2994/2898 f 3030/3030/2924 3000/3000/2904 3035/3035/2926 f 3035/3035/2926 2962/2962/2880 3030/3030/2924 v 38.9978 64.9303 0.0000 v 38.9978 -0.4119 0.0000 v 29.9289 -0.4119 0.0000 v 29.9289 64.9303 0.0000 v 29.9289 64.9303 66.2770 v 29.9289 -0.4119 66.2770 v 38.9978 -0.4119 66.2770 v 38.9978 64.9303 66.2770 v 29.9289 -5.6231 62.2823 v 29.9289 -5.6231 3.9947 v 38.9978 -5.6231 3.9947 v 38.9978 -5.6231 62.2823 v 43.0243 -0.4119 62.2823 v 43.0243 -0.4119 3.9947 v 43.0243 64.9303 3.9947 v 43.0243 64.9303 62.2823 v 38.9978 70.1415 62.2823 v 38.9978 70.1415 3.9947 v 29.9289 70.1415 3.9947 v 29.9289 70.1415 62.2823 v 25.9023 64.9303 62.2819 v 25.9023 64.9303 3.9947 v 25.9023 -0.4119 3.9947 v 25.9023 -0.4119 62.2819 v 27.5799 -5.6231 1.6776 v 25.9023 -3.9455 1.6776 v 27.5799 -3.9455 0.0000 v 41.3467 -3.9455 0.0000 v 43.0243 -3.9455 1.6776 v 41.3467 -5.6231 1.6776 v 25.9023 68.4639 1.6776 v 27.5799 70.1415 1.6776 v 27.5799 68.4639 0.0000 v 41.3467 68.4639 0.0000 v 41.3467 70.1415 1.6776 v 43.0243 68.4639 1.6776 v 27.5799 -5.6231 64.5994 v 27.5799 -3.9455 66.2770 v 25.9023 -3.9455 64.5990 v 43.0243 -3.9455 64.5994 v 41.3467 -3.9455 66.2770 v 41.3467 -5.6231 64.5994 v 25.9023 68.4639 64.5990 v 27.5799 68.4639 66.2770 v 27.5799 70.1415 64.5994 v 41.3467 70.1415 64.5994 v 41.3467 68.4639 66.2770 v 43.0243 68.4639 64.5994 v 25.9023 64.9303 1.6776 v 27.5799 64.9303 0.0000 v 27.5799 -0.4119 0.0000 v 25.9023 -0.4119 1.6776 v 38.9978 70.1415 1.6776 v 38.9978 68.4639 0.0000 v 29.9289 68.4639 0.0000 v 29.9289 70.1415 1.6776 v 43.0243 -0.4119 1.6776 v 41.3467 -0.4119 0.0000 v 41.3467 64.9303 0.0000 v 43.0243 64.9303 1.6776 v 29.9289 -5.6231 1.6776 v 29.9289 -3.9455 0.0000 v 38.9978 -3.9455 0.0000 v 38.9978 -5.6231 1.6776 v 38.9978 -5.6231 64.5994 v 38.9978 -3.9455 66.2770 v 29.9289 -3.9455 66.2770 v 29.9289 -5.6231 64.5994 v 43.0243 64.9303 64.5994 v 41.3467 64.9303 66.2770 v 41.3467 -0.4119 66.2770 v 43.0243 -0.4119 64.5994 v 29.9289 70.1415 64.5994 v 29.9289 68.4639 66.2770 v 38.9978 68.4639 66.2770 v 38.9978 70.1415 64.5994 v 25.9023 -0.4119 64.5990 v 27.5799 -0.4119 66.2770 v 27.5799 64.9303 66.2770 v 25.9023 64.9303 64.5990 v 43.0243 -3.9455 62.2823 v 41.3467 -5.6231 62.2823 v 41.3467 -5.6231 3.9947 v 43.0243 -3.9455 3.9947 v 25.9023 -3.9455 3.9947 v 27.5799 -5.6231 3.9947 v 27.5799 -5.6231 62.2823 v 25.9023 -3.9455 62.2819 v 41.3467 70.1415 62.2823 v 43.0243 68.4639 62.2823 v 43.0243 68.4639 3.9947 v 41.3467 70.1415 3.9947 v 25.9023 68.4639 62.2819 v 27.5799 70.1415 62.2823 v 27.5799 70.1415 3.9947 v 25.9023 68.4639 3.9947 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn -0.3416 -0.8756 -0.3416 vn -0.8756 -0.3416 -0.3416 vn -0.3416 -0.3416 -0.8756 vn 0.3416 -0.3416 -0.8756 vn 0.8756 -0.3416 -0.3416 vn 0.3416 -0.8756 -0.3416 vn -0.8756 0.3416 -0.3416 vn -0.3416 0.8756 -0.3416 vn -0.3416 0.3416 -0.8756 vn 0.3416 0.3416 -0.8756 vn 0.3416 0.8756 -0.3416 vn 0.8756 0.3416 -0.3416 vn -0.3416 -0.8756 0.3416 vn -0.3416 -0.3416 0.8756 vn -0.8756 -0.3416 0.3415 vn 0.8756 -0.3416 0.3416 vn 0.3416 -0.3416 0.8756 vn 0.3416 -0.8756 0.3416 vn -0.8756 0.3416 0.3415 vn -0.3416 0.3416 0.8756 vn -0.3416 0.8756 0.3416 vn 0.3416 0.8756 0.3416 vn 0.3416 0.3416 0.8756 vn 0.8756 0.3416 0.3416 vn -0.9239 0.0000 -0.3827 vn -0.3827 0.0000 -0.9239 vn 0.0000 0.9239 -0.3827 vn 0.0000 0.3827 -0.9239 vn 0.9239 0.0000 -0.3827 vn 0.3827 0.0000 -0.9239 vn 0.0000 -0.9239 -0.3827 vn 0.0000 -0.3827 -0.9239 vn 0.0000 -0.9239 0.3827 vn 0.0000 -0.3827 0.9239 vn 0.9239 0.0000 0.3827 vn 0.3827 0.0000 0.9239 vn 0.0000 0.9239 0.3827 vn 0.0000 0.3827 0.9239 vn -0.9239 0.0000 0.3826 vn -0.3827 0.0000 0.9239 vn 0.9239 -0.3827 0.0000 vn 0.3827 -0.9239 0.0000 vn -0.9239 -0.3827 0.0000 vn -0.3827 -0.9239 0.0000 vn 0.3827 0.9239 0.0000 vn 0.9239 0.3827 0.0000 vn -0.9239 0.3827 0.0000 vn -0.3827 0.9239 0.0000 vt 0.8317 0.3100 0.2043 vt 0.2175 0.1278 0.4723 vt 0.1683 0.1716 0.4079 vt 0.7825 0.3539 0.1399 vt 0.7825 0.8722 0.5277 vt 0.1683 0.6900 0.7957 vt 0.2175 0.6461 0.8601 vt 0.8317 0.8284 0.5921 vt 0.1193 0.6442 0.7937 vt 0.1193 0.1883 0.4526 vt 0.1685 0.1445 0.5171 vt 0.1685 0.6004 0.8581 vt 0.2394 0.5954 0.8654 vt 0.2394 0.1396 0.5243 vt 0.8535 0.3218 0.2563 vt 0.8535 0.7777 0.5973 vt 0.8807 0.8117 0.5474 vt 0.8807 0.3558 0.2063 vt 0.8315 0.3996 0.1419 vt 0.8315 0.8555 0.4829 vt 0.7606 0.8604 0.4757 vt 0.7606 0.4046 0.1346 vt 0.1465 0.2223 0.4027 vt 0.1465 0.6782 0.7437 vt 0.1066 0.1815 0.4224 vt 0.1132 0.1943 0.4036 vt 0.1223 0.1731 0.4057 vt 0.1971 0.1066 0.5035 vt 0.2062 0.1116 0.5252 vt 0.1813 0.1150 0.5202 vt 0.7938 0.3963 0.1066 vt 0.8187 0.3929 0.1116 vt 0.8029 0.3751 0.1087 vt 0.8777 0.3086 0.2065 vt 0.8934 0.3264 0.2094 vt 0.8868 0.3136 0.2282 vt 0.1066 0.6736 0.7906 vt 0.1223 0.6914 0.7935 vt 0.1132 0.6864 0.7718 vt 0.2062 0.6037 0.8934 vt 0.1971 0.6249 0.8913 vt 0.1813 0.6071 0.8884 vt 0.7938 0.8884 0.4748 vt 0.8029 0.8934 0.4965 vt 0.8187 0.8850 0.4798 vt 0.8934 0.8185 0.5776 vt 0.8777 0.8269 0.5943 vt 0.8868 0.8057 0.5964 vt 0.7606 0.3864 0.1211 vt 0.7697 0.3652 0.1232 vt 0.1556 0.1829 0.3912 vt 0.1465 0.2042 0.3891 vt 0.8807 0.3377 0.1927 vt 0.8649 0.3199 0.1898 vt 0.8157 0.3637 0.1254 vt 0.8315 0.3815 0.1283 vt 0.2394 0.1215 0.5107 vt 0.2303 0.1164 0.4890 vt 0.8444 0.2987 0.2210 vt 0.8535 0.3037 0.2427 vt 0.1193 0.1702 0.4391 vt 0.1351 0.1617 0.4224 vt 0.1843 0.1179 0.4868 vt 0.1685 0.1264 0.5035 vt 0.1685 0.6185 0.8717 vt 0.1843 0.6363 0.8746 vt 0.1351 0.6801 0.8102 vt 0.1193 0.6623 0.8073 vt 0.8535 0.7958 0.6109 vt 0.8444 0.8171 0.6088 vt 0.2303 0.6348 0.8768 vt 0.2394 0.6136 0.8789 vt 0.8315 0.8736 0.4965 vt 0.8157 0.8821 0.5132 vt 0.8649 0.8383 0.5776 vt 0.8807 0.8298 0.5609 vt 0.1465 0.6963 0.7573 vt 0.1556 0.7013 0.7790 vt 0.7697 0.8836 0.5110 vt 0.7606 0.8785 0.4893 vt 0.2062 0.5856 0.8799 vt 0.1813 0.5890 0.8748 vt 0.1813 0.1331 0.5338 vt 0.2062 0.1297 0.5388 vt 0.1132 0.2124 0.4171 vt 0.1066 0.1997 0.4359 vt 0.1066 0.6555 0.7770 vt 0.1132 0.6683 0.7582 vt 0.8934 0.8003 0.5641 vt 0.8868 0.7876 0.5829 vt 0.8868 0.3317 0.2418 vt 0.8934 0.3445 0.2230 vt 0.7938 0.8703 0.4612 vt 0.8187 0.8669 0.4662 vt 0.8187 0.4110 0.1252 vt 0.7938 0.4144 0.1201 g Object076 f 3053/3053/2935 3054/3054/2935 3055/3055/2935 f 3055/3055/2935 3056/3056/2935 3053/3053/2935 f 3057/3057/2936 3058/3058/2936 3059/3059/2936 f 3059/3059/2936 3060/3060/2936 3057/3057/2936 f 3061/3061/2937 3062/3062/2937 3063/3063/2937 f 3063/3063/2937 3064/3064/2937 3061/3061/2937 f 3065/3065/2938 3066/3066/2938 3067/3067/2938 f 3067/3067/2938 3068/3068/2938 3065/3065/2938 f 3069/3069/2939 3070/3070/2939 3071/3071/2939 f 3071/3071/2939 3072/3072/2939 3069/3069/2939 f 3073/3073/2940 3074/3074/2940 3075/3075/2940 f 3075/3075/2940 3076/3076/2940 3073/3073/2940 f 3077/3077/2941 3078/3078/2942 3079/3079/2943 f 3080/3080/2944 3081/3081/2945 3082/3082/2946 f 3083/3083/2947 3084/3084/2948 3085/3085/2949 f 3086/3086/2950 3087/3087/2951 3088/3088/2952 f 3089/3089/2953 3090/3090/2954 3091/3091/2955 f 3092/3092/2956 3093/3093/2957 3094/3094/2958 f 3095/3095/2959 3096/3096/2960 3097/3097/2961 f 3098/3098/2962 3099/3099/2963 3100/3100/2964 f 3101/3101/2965 3102/3102/2966 3103/3103/2966 f 3103/3103/2966 3104/3104/2965 3101/3101/2965 f 3105/3105/2967 3106/3106/2968 3107/3107/2968 f 3107/3107/2968 3108/3108/2967 3105/3105/2967 f 3109/3109/2969 3110/3110/2970 3111/3111/2970 f 3111/3111/2970 3112/3112/2969 3109/3109/2969 f 3113/3113/2971 3114/3114/2972 3115/3115/2972 f 3115/3115/2972 3116/3116/2971 3113/3113/2971 f 3117/3117/2973 3118/3118/2974 3119/3119/2974 f 3119/3119/2974 3120/3120/2973 3117/3117/2973 f 3121/3121/2975 3122/3122/2976 3123/3123/2976 f 3123/3123/2976 3124/3124/2975 3121/3121/2975 f 3125/3125/2977 3126/3126/2978 3127/3127/2978 f 3127/3127/2978 3128/3128/2977 3125/3125/2977 f 3129/3129/2979 3130/3130/2980 3131/3131/2980 f 3131/3131/2980 3132/3132/2979 3129/3129/2979 f 3133/3133/2981 3134/3134/2982 3135/3135/2982 f 3135/3135/2982 3136/3136/2981 3133/3133/2981 f 3137/3137/2983 3138/3138/2984 3139/3139/2984 f 3139/3139/2984 3140/3140/2983 3137/3137/2983 f 3141/3141/2985 3142/3142/2986 3143/3143/2986 f 3143/3143/2986 3144/3144/2985 3141/3141/2985 f 3145/3145/2987 3146/3146/2988 3147/3147/2988 f 3147/3147/2988 3148/3148/2987 3145/3145/2987 f 3120/3120/2973 3061/3061/2937 3064/3064/2937 f 3064/3064/2937 3117/3117/2973 3120/3120/2973 f 3116/3116/2971 3063/3063/2937 3062/3062/2937 f 3062/3062/2937 3113/3113/2971 3116/3116/2971 f 3124/3124/2975 3065/3065/2938 3068/3068/2938 f 3068/3068/2938 3121/3121/2975 3124/3124/2975 f 3112/3112/2969 3067/3067/2938 3066/3066/2938 f 3066/3066/2938 3109/3109/2969 3112/3112/2969 f 3128/3128/2977 3069/3069/2939 3072/3072/2939 f 3072/3072/2939 3125/3125/2977 3128/3128/2977 f 3108/3108/2967 3071/3071/2939 3070/3070/2939 f 3070/3070/2939 3105/3105/2967 3108/3108/2967 f 3132/3132/2979 3073/3073/2940 3076/3076/2940 f 3076/3076/2940 3129/3129/2979 3132/3132/2979 f 3104/3104/2965 3075/3075/2940 3074/3074/2940 f 3074/3074/2940 3101/3101/2965 3104/3104/2965 f 3092/3092/2956 3094/3094/2958 3134/3134/2982 f 3134/3134/2982 3133/3133/2981 3092/3092/2956 f 3082/3082/2946 3081/3081/2945 3136/3136/2981 f 3136/3136/2981 3135/3135/2982 3082/3082/2946 f 3078/3078/2942 3077/3077/2941 3138/3138/2984 f 3138/3138/2984 3137/3137/2983 3078/3078/2942 f 3089/3089/2953 3091/3091/2955 3140/3140/2983 f 3140/3140/2983 3139/3139/2984 3089/3089/2953 f 3098/3098/2962 3100/3100/2964 3142/3142/2986 f 3142/3142/2986 3141/3141/2985 3098/3098/2962 f 3088/3088/2952 3087/3087/2951 3144/3144/2985 f 3144/3144/2985 3143/3143/2986 3088/3088/2952 f 3095/3095/2959 3097/3097/2961 3146/3146/2988 f 3146/3146/2988 3145/3145/2987 3095/3095/2959 f 3084/3084/2948 3083/3083/2947 3148/3148/2987 f 3148/3148/2987 3147/3147/2988 3084/3084/2948 f 3106/3106/2968 3053/3053/2935 3056/3056/2935 f 3056/3056/2935 3107/3107/2968 3106/3106/2968 f 3114/3114/2972 3055/3055/2935 3054/3054/2935 f 3054/3054/2935 3115/3115/2972 3114/3114/2972 f 3126/3126/2978 3057/3057/2936 3060/3060/2936 f 3060/3060/2936 3127/3127/2978 3126/3126/2978 f 3118/3118/2974 3059/3059/2936 3058/3058/2936 f 3058/3058/2936 3119/3119/2974 3118/3118/2974 f 3133/3133/2981 3136/3136/2981 3066/3066/2938 f 3066/3066/2938 3065/3065/2938 3133/3133/2981 f 3143/3143/2986 3142/3142/2986 3068/3068/2938 f 3068/3068/2938 3067/3067/2938 3143/3143/2986 f 3145/3145/2987 3148/3148/2987 3074/3074/2940 f 3074/3074/2940 3073/3073/2940 3145/3145/2987 f 3137/3137/2983 3140/3140/2983 3076/3076/2940 f 3076/3076/2940 3075/3075/2940 3137/3137/2983 f 3083/3083/2947 3085/3085/2949 3102/3102/2966 f 3102/3102/2966 3101/3101/2965 3083/3083/2947 f 3079/3079/2943 3078/3078/2942 3104/3104/2965 f 3104/3104/2965 3103/3103/2966 3079/3079/2943 f 3081/3081/2945 3080/3080/2944 3110/3110/2970 f 3110/3110/2970 3109/3109/2969 3081/3081/2945 f 3086/3086/2950 3088/3088/2952 3112/3112/2969 f 3112/3112/2969 3111/3111/2970 3086/3086/2950 f 3100/3100/2964 3099/3099/2963 3122/3122/2976 f 3122/3122/2976 3121/3121/2975 3100/3100/2964 f 3093/3093/2957 3092/3092/2956 3124/3124/2975 f 3124/3124/2975 3123/3123/2976 3093/3093/2957 f 3091/3091/2955 3090/3090/2954 3130/3130/2980 f 3130/3130/2980 3129/3129/2979 3091/3091/2955 f 3096/3096/2960 3095/3095/2959 3132/3132/2979 f 3132/3132/2979 3131/3131/2980 3096/3096/2960 f 3092/3092/2956 3133/3133/2981 3065/3065/2938 f 3065/3065/2938 3124/3124/2975 3092/3092/2956 f 3142/3142/2986 3100/3100/2964 3121/3121/2975 f 3121/3121/2975 3068/3068/2938 3142/3142/2986 f 3088/3088/2952 3143/3143/2986 3067/3067/2938 f 3067/3067/2938 3112/3112/2969 3088/3088/2952 f 3136/3136/2981 3081/3081/2945 3109/3109/2969 f 3109/3109/2969 3066/3066/2938 3136/3136/2981 f 3095/3095/2959 3145/3145/2987 3073/3073/2940 f 3073/3073/2940 3132/3132/2979 3095/3095/2959 f 3140/3140/2983 3091/3091/2955 3129/3129/2979 f 3129/3129/2979 3076/3076/2940 3140/3140/2983 f 3078/3078/2942 3137/3137/2983 3075/3075/2940 f 3075/3075/2940 3104/3104/2965 3078/3078/2942 f 3148/3148/2987 3083/3083/2947 3101/3101/2965 f 3101/3101/2965 3074/3074/2940 3148/3148/2987 f 3111/3111/2970 3110/3110/2970 3054/3054/2935 f 3054/3054/2935 3053/3053/2935 3111/3111/2970 f 3103/3103/2966 3102/3102/2966 3056/3056/2935 f 3056/3056/2935 3055/3055/2935 3103/3103/2966 f 3131/3131/2980 3130/3130/2980 3058/3058/2936 f 3058/3058/2936 3057/3057/2936 3131/3131/2980 f 3123/3123/2976 3122/3122/2976 3060/3060/2936 f 3060/3060/2936 3059/3059/2936 3123/3123/2976 f 3139/3139/2984 3138/3138/2984 3062/3062/2937 f 3062/3062/2937 3061/3061/2937 3139/3139/2984 f 3135/3135/2982 3134/3134/2982 3064/3064/2937 f 3064/3064/2937 3063/3063/2937 3135/3135/2982 f 3141/3141/2985 3144/3144/2985 3070/3070/2939 f 3070/3070/2939 3069/3069/2939 3141/3141/2985 f 3147/3147/2988 3146/3146/2988 3072/3072/2939 f 3072/3072/2939 3071/3071/2939 3147/3147/2988 f 3087/3087/2951 3086/3086/2950 3106/3106/2968 f 3106/3106/2968 3105/3105/2967 3087/3087/2951 f 3085/3085/2949 3084/3084/2948 3108/3108/2967 f 3108/3108/2967 3107/3107/2968 3085/3085/2949 f 3077/3077/2941 3079/3079/2943 3114/3114/2972 f 3114/3114/2972 3113/3113/2971 3077/3077/2941 f 3080/3080/2944 3082/3082/2946 3116/3116/2971 f 3116/3116/2971 3115/3115/2972 3080/3080/2944 f 3094/3094/2958 3093/3093/2957 3118/3118/2974 f 3118/3118/2974 3117/3117/2973 3094/3094/2958 f 3090/3090/2954 3089/3089/2953 3120/3120/2973 f 3120/3120/2973 3119/3119/2974 3090/3090/2954 f 3097/3097/2961 3096/3096/2960 3126/3126/2978 f 3126/3126/2978 3125/3125/2977 3097/3097/2961 f 3099/3099/2963 3098/3098/2962 3128/3128/2977 f 3128/3128/2977 3127/3127/2978 3099/3099/2963 f 3089/3089/2953 3139/3139/2984 3061/3061/2937 f 3061/3061/2937 3120/3120/2973 3089/3089/2953 f 3134/3134/2982 3094/3094/2958 3117/3117/2973 f 3117/3117/2973 3064/3064/2937 3134/3134/2982 f 3082/3082/2946 3135/3135/2982 3063/3063/2937 f 3063/3063/2937 3116/3116/2971 3082/3082/2946 f 3138/3138/2984 3077/3077/2941 3113/3113/2971 f 3113/3113/2971 3062/3062/2937 3138/3138/2984 f 3098/3098/2962 3141/3141/2985 3069/3069/2939 f 3069/3069/2939 3128/3128/2977 3098/3098/2962 f 3146/3146/2988 3097/3097/2961 3125/3125/2977 f 3125/3125/2977 3072/3072/2939 3146/3146/2988 f 3084/3084/2948 3147/3147/2988 3071/3071/2939 f 3071/3071/2939 3108/3108/2967 3084/3084/2948 f 3144/3144/2985 3087/3087/2951 3105/3105/2967 f 3105/3105/2967 3070/3070/2939 3144/3144/2985 f 3086/3086/2950 3111/3111/2970 3053/3053/2935 f 3053/3053/2935 3106/3106/2968 3086/3086/2950 f 3102/3102/2966 3085/3085/2949 3107/3107/2968 f 3107/3107/2968 3056/3056/2935 3102/3102/2966 f 3079/3079/2943 3103/3103/2966 3055/3055/2935 f 3055/3055/2935 3114/3114/2972 3079/3079/2943 f 3110/3110/2970 3080/3080/2944 3115/3115/2972 f 3115/3115/2972 3054/3054/2935 3110/3110/2970 f 3096/3096/2960 3131/3131/2980 3057/3057/2936 f 3057/3057/2936 3126/3126/2978 3096/3096/2960 f 3122/3122/2976 3099/3099/2963 3127/3127/2978 f 3127/3127/2978 3060/3060/2936 3122/3122/2976 f 3093/3093/2957 3123/3123/2976 3059/3059/2936 f 3059/3059/2936 3118/3118/2974 3093/3093/2957 f 3130/3130/2980 3090/3090/2954 3119/3119/2974 f 3119/3119/2974 3058/3058/2936 3130/3130/2980 moderngl-moderngl-773b733/examples/data/models/test_scene.obj000066400000000000000000000541001470420062000242440ustar00rootroot00000000000000v -7.794367 -6.735848 -0.558487 v -7.794367 -6.735848 10.275335 v -7.161063 -6.735848 -0.558487 v -7.161063 -6.735848 10.275335 v -7.794367 -7.369153 -0.558487 v -7.794367 -7.369153 10.275335 v -7.161063 -7.369153 -0.558487 v -7.161063 -7.369153 10.275335 v -7.794367 7.361459 -0.558487 v -7.794367 7.361459 10.275335 v -7.161063 7.361459 -0.558487 v -7.161063 7.361459 10.275335 v -7.794367 6.728155 -0.558487 v -7.794367 6.728155 10.275335 v -7.161063 6.728155 -0.558487 v -7.161063 6.728155 10.275335 v 7.148414 7.361459 -0.558487 v 7.148414 7.361459 10.275335 v 7.781719 7.361459 -0.558487 v 7.781719 7.361459 10.275335 v 7.148414 6.728155 -0.558487 v 7.148414 6.728155 10.275335 v 7.781719 6.728155 -0.558487 v 7.781719 6.728155 10.275335 v 7.148414 -6.735848 -0.558487 v 7.148414 -6.735848 10.275335 v 7.781719 -6.735848 -0.558487 v 7.781719 -6.735848 10.275335 v 7.148414 -7.369153 -0.558487 v 7.148414 -7.369153 10.275335 v 7.781719 -7.369153 -0.558487 v 7.781719 -7.369153 10.275335 v -6.976072 -7.557692 8.387264 v -8.091581 -7.557692 8.387264 v -8.091581 7.596245 8.387264 v -6.976072 7.596241 8.387264 v -6.976072 -7.557695 9.160309 v -8.091581 -7.557687 9.160309 v -8.091581 7.596247 9.160309 v -6.976072 7.596243 9.160309 v 7.903984 -7.557692 8.387264 v 6.788475 -7.557692 8.387264 v 6.788475 7.596245 8.387264 v 7.903985 7.596241 8.387264 v 7.903984 -7.557695 9.160309 v 6.788475 -7.557687 9.160309 v 6.788475 7.596247 9.160309 v 7.903984 7.596243 9.160309 v 7.357846 5.507042 8.843460 v -7.796089 5.507042 8.843460 v -7.796088 6.531510 8.843460 v 7.357849 6.531510 8.843460 v 7.357842 5.507042 9.616505 v -7.796093 5.507043 9.616505 v -7.796086 6.531510 9.616505 v 7.357846 6.531510 9.616505 v 7.357846 3.507042 8.843460 v -7.796089 3.507042 8.843460 v -7.796088 4.531510 8.843460 v 7.357849 4.531510 8.843460 v 7.357842 3.507042 9.616505 v -7.796093 3.507043 9.616505 v -7.796086 4.531510 9.616505 v 7.357846 4.531510 9.616505 v 7.357846 1.507043 8.843460 v -7.796089 1.507043 8.843460 v -7.796088 2.531510 8.843460 v 7.357849 2.531510 8.843460 v 7.357842 1.507042 9.616505 v -7.796093 1.507043 9.616505 v -7.796086 2.531510 9.616505 v 7.357846 2.531510 9.616505 v 7.357846 -6.492958 8.843460 v -7.796089 -6.492958 8.843460 v -7.796088 -5.468490 8.843460 v 7.357849 -5.468490 8.843460 v 7.357842 -6.492958 9.616505 v -7.796093 -6.492957 9.616505 v -7.796086 -5.468490 9.616505 v 7.357846 -5.468490 9.616505 v 7.357846 -4.492958 8.843460 v -7.796089 -4.492958 8.843460 v -7.796088 -3.468490 8.843460 v 7.357849 -3.468490 8.843460 v 7.357842 -4.492958 9.616505 v -7.796093 -4.492957 9.616505 v -7.796086 -3.468490 9.616505 v 7.357846 -3.468490 9.616505 v 7.357846 -2.492958 8.843460 v -7.796089 -2.492958 8.843460 v -7.796088 -1.468490 8.843460 v 7.357849 -1.468490 8.843460 v 7.357842 -2.492958 9.616505 v -7.796093 -2.492957 9.616505 v -7.796086 -1.468490 9.616505 v 7.357846 -1.468490 9.616505 v 7.357846 -0.492957 8.843460 v -7.796089 -0.492957 8.843460 v -7.796088 0.531510 8.843460 v 7.357849 0.531510 8.843460 v 7.357842 -0.492958 9.616505 v -7.796093 -0.492957 9.616505 v -7.796086 0.531510 9.616505 v 7.357846 0.531510 9.616505 v -6.653174 1.867140 -0.033253 v -6.653174 1.867140 1.012101 v -6.087916 3.785599 -0.033253 v -6.087916 3.785599 1.012101 v -4.734715 1.301883 -0.033253 v -4.734715 1.301883 1.012101 v -4.169458 3.220341 -0.033253 v -4.169458 3.220341 1.012101 v -6.904324 2.007019 2.140657 v -6.797250 1.830572 3.165434 v -5.454842 3.382415 2.226024 v -5.347767 3.205968 3.250801 v -5.541593 0.594814 1.755117 v -5.434519 0.418367 2.779894 v -4.092111 1.970210 1.840484 v -3.985037 1.793763 2.865261 v -6.654268 2.948102 3.491557 v -6.812673 3.187583 4.496705 v -5.310411 4.422745 3.352000 v -5.468815 4.662226 4.357148 v -5.204372 1.677080 4.022877 v -5.362776 1.916561 5.028025 v -3.860515 3.151722 3.883320 v -4.018919 3.391203 4.888468 v -5.791192 2.539814 0.778202 v -5.791192 2.539814 6.986249 v -5.415243 2.923616 0.778202 v -5.415243 2.923616 6.986249 v -5.407389 2.163865 0.778202 v -5.407389 2.163865 6.986249 v -5.031440 2.547668 0.778202 v -5.031440 2.547668 6.986249 v -1.665531 6.076654 0.778202 v -1.665531 6.076654 6.986249 v -1.128276 6.076654 0.778202 v -1.128276 6.076654 6.986249 v -1.665531 5.539400 0.778202 v -1.665531 5.539400 6.986249 v -1.128276 5.539400 0.778202 v -1.128276 5.539400 6.986249 v -1.977804 6.978922 3.491557 v -1.917569 7.259662 4.496705 v 0.016026 7.050795 3.352000 v 0.076261 7.331534 4.357148 v -1.871216 5.053737 4.022877 v -1.810981 5.334476 5.028025 v 0.122614 5.125609 3.883320 v 0.182849 5.406349 4.888468 v -2.825072 6.499023 2.140657 v -2.876196 6.299062 3.165434 v -0.828230 6.425992 2.226024 v -0.879354 6.226030 3.250801 v -2.880337 4.537314 1.755117 v -2.931461 4.337352 2.779894 v -0.883495 4.464282 1.840484 v -0.934619 4.264320 2.865261 v -2.749254 6.221726 -0.033253 v -2.749254 6.221726 1.012101 v -0.983205 7.160378 -0.033253 v -0.983205 7.160378 1.012101 v -1.810602 4.455676 -0.033253 v -1.810602 4.455676 1.012101 v -0.044553 5.394329 -0.033253 v -0.044553 5.394329 1.012101 v 3.440550 -0.686330 5.647765 v 4.355030 1.609873 5.219212 v 3.393898 -0.734900 5.287976 v 4.308378 1.561303 4.859424 v 3.778189 -0.825462 5.622767 v 4.692669 1.470740 5.194215 v 3.731537 -0.874032 5.262979 v 4.646018 1.422170 4.834426 v 3.919706 2.673811 5.264254 v 3.767457 4.944423 4.208972 v 4.027300 2.532314 4.944277 v 3.875050 4.802925 3.888995 v 4.268867 2.738495 5.353056 v 4.116617 5.009106 4.297774 v 4.376461 2.596997 5.033079 v 4.224211 4.867609 3.977797 v 3.400661 -0.710375 4.840626 v 3.720232 1.750900 4.476655 v 3.473382 -0.772077 4.487232 v 3.792953 1.689198 4.123260 v 3.756357 -0.744845 4.919839 v 4.075928 1.716431 4.555868 v 3.829079 -0.806547 4.566445 v 4.148650 1.654729 4.202473 v 1.856231 -3.726096 4.207289 v 2.814565 -1.724808 5.377296 v 2.184279 -3.888245 4.215944 v 3.142614 -1.886957 5.385952 v 1.773696 -3.875798 4.530957 v 2.732030 -1.874510 5.700964 v 2.101744 -4.037947 4.539612 v 3.060079 -2.036659 5.709619 v 0.040159 -4.660388 0.985405 v 1.410294 -3.888244 2.939632 v 0.345166 -4.768264 0.814184 v 1.715301 -3.996121 2.768411 v 0.008822 -4.991523 1.138213 v 1.378956 -4.219380 3.092440 v 0.313829 -5.099401 0.966992 v 1.683963 -4.327257 2.921219 v -0.619296 -6.497821 2.058140 v -2.121614 -5.897836 1.020904 v 0.504931 -6.367723 0.505082 v -0.997387 -5.767738 -0.532154 v -0.204620 -4.676862 2.510856 v -1.706937 -4.076877 1.473620 v 0.919607 -4.546764 0.957798 v -0.582711 -3.946779 -0.079439 v 3.667673 6.848917 3.635402 v 2.186402 5.660248 3.928155 v 4.839196 5.605842 4.515798 v 3.357925 4.417173 4.808552 v 4.022878 5.991810 1.952548 v 2.541607 4.803142 2.245301 v 5.194401 4.748735 2.832944 v 3.713130 3.560067 3.125698 v 0.976359 -5.115030 4.723959 v 1.014514 -5.377875 2.820737 v 2.775598 -4.442490 4.667148 v 2.813753 -4.705335 2.763926 v 0.302503 -3.334188 4.464507 v 0.340657 -3.597033 2.561284 v 2.101742 -2.661647 4.407695 v 2.139896 -2.924492 2.504473 v 3.559137 -0.125242 6.178404 v 2.805738 -1.789410 6.774839 v 4.948658 -1.083513 5.259846 v 4.195259 -2.747681 5.856281 v 2.466241 -0.196388 4.599380 v 1.712842 -1.860555 5.195815 v 3.855762 -1.154659 3.680822 v 3.102363 -2.818827 4.277257 v 2.758499 2.976808 4.844677 v 3.233990 2.153152 6.514498 v 4.610665 3.362140 4.507332 v 5.086155 2.538484 6.177152 v 2.948740 1.283908 3.955465 v 3.424230 0.460252 5.625285 v 4.800905 1.669240 3.618119 v 5.276396 0.845584 5.287940 v 7.576967 -7.576968 -0.753305 v -7.576968 -7.576968 -0.753305 v -7.576966 7.576969 -0.753305 v 7.576971 7.576965 -0.753305 v 7.576963 -7.576972 0.019741 v -7.576972 -7.576963 0.019741 v -7.576965 7.576971 0.019741 v 7.576968 7.576967 0.019741 vn 0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn -0.0000 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 -0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 -0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 -0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn -0.0000 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 0.0000 vn 1.0000 -0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 -0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn -0.0000 0.0000 1.0000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 -0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 -0.0000 0.0000 vn -0.9592 0.2826 0.0000 vn 0.2826 0.9592 0.0000 vn 0.9592 -0.2826 0.0000 vn -0.2826 -0.9592 0.0000 vn 0.0000 0.0000 -1.0000 vn -0.0000 0.0000 1.0000 vn -0.6814 0.7061 0.1928 vn 0.7247 0.6877 0.0427 vn 0.6814 -0.7061 -0.1928 vn -0.7247 -0.6877 -0.0427 vn -0.1024 0.1688 -0.9803 vn 0.1024 -0.1688 0.9803 vn -0.7249 0.6355 -0.2657 vn 0.6719 0.7373 -0.0698 vn 0.7249 -0.6355 0.2657 vn -0.6719 -0.7373 0.0698 vn 0.1515 -0.2291 -0.9615 vn -0.1515 0.2291 0.9615 vn -0.7144 0.6998 0.0000 vn 0.6998 0.7144 0.0000 vn 0.7144 -0.6998 0.0000 vn -0.6998 -0.7144 0.0000 vn 0.0000 0.0000 -1.0000 vn -0.0000 0.0000 1.0000 vn 0.0000 1.0000 0.0000 vn 1.0000 0.0000 0.0000 vn 0.0000 -1.0000 0.0000 vn -1.0000 0.0000 0.0000 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn -0.0533 0.9626 -0.2657 vn 0.9969 0.0359 -0.0698 vn 0.0533 -0.9626 0.2657 vn -0.9969 -0.0359 0.0698 vn -0.0576 -0.2686 -0.9615 vn 0.0576 0.2686 0.9615 vn 0.0276 0.9809 0.1928 vn 0.9984 -0.0365 0.0427 vn -0.0276 -0.9809 -0.1928 vn -0.9984 0.0365 -0.0427 vn 0.0489 0.1913 -0.9803 vn -0.0489 -0.1913 0.9803 vn -0.4693 0.8830 0.0000 vn 0.8830 0.4693 0.0000 vn 0.4693 -0.8830 0.0000 vn -0.8830 -0.4693 0.0000 vn -0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn -0.9224 0.3801 0.0683 vn -0.1275 -0.1327 -0.9829 vn 0.9224 -0.3801 -0.0683 vn 0.1275 0.1327 0.9829 vn -0.3646 -0.9154 0.1708 vn 0.3646 0.9154 -0.1708 vn -0.1274 -0.1327 -0.9829 vn 0.1274 0.1327 0.9829 vn -0.9539 -0.1767 -0.2426 vn 0.2939 -0.3866 -0.8742 vn 0.9539 0.1767 0.2426 vn -0.2939 0.3866 0.8742 vn 0.0607 -0.9052 0.4207 vn -0.0607 0.9052 -0.4207 vn -0.9718 0.0942 -0.2164 vn 0.1987 -0.1686 -0.9655 vn 0.9718 -0.0942 0.2164 vn -0.1987 0.1686 0.9655 vn -0.1274 -0.9812 0.1451 vn 0.1274 0.9812 -0.1451 vn 0.2255 0.4090 -0.8842 vn 0.8962 -0.4430 0.0236 vn -0.2255 -0.4090 0.8842 vn -0.8962 0.4430 -0.0236 vn -0.3820 -0.7978 -0.4664 vn 0.3820 0.7978 0.4664 vn 0.0856 0.9047 -0.4175 vn 0.8333 -0.2947 -0.4678 vn -0.0856 -0.9047 0.4175 vn -0.8333 0.2947 0.4678 vn -0.5462 -0.3078 -0.7790 vn 0.5462 0.3078 0.7790 vn -0.2158 -0.9476 -0.2356 vn 0.5850 0.0677 -0.8082 vn 0.2158 0.9476 0.2356 vn -0.5850 -0.0677 0.8082 vn 0.7818 -0.3122 0.5398 vn -0.7818 0.3122 -0.5398 vn -0.1848 0.4460 0.8757 vn 0.6096 -0.6469 0.4581 vn 0.1848 -0.4460 -0.8757 vn -0.6096 0.6469 -0.4581 vn 0.7708 0.6186 -0.1523 vn -0.7708 -0.6186 0.1523 vn 0.3507 -0.9267 0.1350 vn 0.9363 0.3500 -0.0296 vn -0.3507 0.9267 -0.1350 vn -0.9363 -0.3500 0.0296 vn -0.0199 0.1368 0.9904 vn 0.0199 -0.1368 -0.9904 vn 0.5687 0.0370 0.8217 vn 0.7231 -0.4987 -0.4780 vn -0.5687 -0.0370 -0.8217 vn -0.7231 0.4987 0.4780 vn 0.3921 0.8660 -0.3104 vn -0.3921 -0.8660 0.3104 vn -0.0990 0.8810 0.4627 vn 0.9638 0.2005 -0.1755 vn 0.0990 -0.8810 -0.4627 vn -0.9638 -0.2005 0.1755 vn -0.2474 0.4286 -0.8689 vn 0.2474 -0.4286 0.8689 vn 0.0000 0.0000 -1.0000 vn 0.0000 0.0000 1.0000 vn 0.0000 -1.0000 -0.0000 vn -1.0000 0.0000 -0.0000 vn 0.0000 1.0000 -0.0000 vn 1.0000 -0.0000 0.0000 g scene f 2//1 3//1 1//1 f 4//2 7//2 3//2 f 8//3 5//3 7//3 f 6//4 1//4 5//4 f 7//5 1//5 3//5 f 4//6 6//6 8//6 f 2//1 4//1 3//1 f 4//2 8//2 7//2 f 8//3 6//3 5//3 f 6//4 2//4 1//4 f 7//5 5//5 1//5 f 4//6 2//6 6//6 f 10//7 11//7 9//7 f 12//8 15//8 11//8 f 16//9 13//9 15//9 f 14//10 9//10 13//10 f 15//11 9//11 11//11 f 12//12 14//12 16//12 f 10//7 12//7 11//7 f 12//8 16//8 15//8 f 16//9 14//9 13//9 f 14//10 10//10 9//10 f 15//11 13//11 9//11 f 12//12 10//12 14//12 f 18//13 19//13 17//13 f 20//14 23//14 19//14 f 24//15 21//15 23//15 f 22//16 17//16 21//16 f 23//17 17//17 19//17 f 20//18 22//18 24//18 f 18//13 20//13 19//13 f 20//14 24//14 23//14 f 24//15 22//15 21//15 f 22//16 18//16 17//16 f 23//17 21//17 17//17 f 20//18 18//18 22//18 f 26//19 27//19 25//19 f 28//20 31//20 27//20 f 32//21 29//21 31//21 f 30//22 25//22 29//22 f 31//23 25//23 27//23 f 28//24 30//24 32//24 f 26//19 28//19 27//19 f 28//20 32//20 31//20 f 32//21 30//21 29//21 f 30//22 26//22 25//22 f 31//23 29//23 25//23 f 28//24 26//24 30//24 f 34//25 36//25 33//25 f 40//26 38//26 37//26 f 37//27 34//27 33//27 f 38//28 35//28 34//28 f 35//29 40//29 36//29 f 33//30 40//30 37//30 f 34//25 35//25 36//25 f 40//26 39//26 38//26 f 37//27 38//27 34//27 f 38//28 39//28 35//28 f 35//29 39//29 40//29 f 33//30 36//30 40//30 f 42//31 44//31 41//31 f 48//32 46//32 45//32 f 45//33 42//33 41//33 f 46//34 43//34 42//34 f 43//35 48//35 44//35 f 41//36 48//36 45//36 f 42//31 43//31 44//31 f 48//32 47//32 46//32 f 45//33 46//33 42//33 f 46//34 47//34 43//34 f 43//35 47//35 48//35 f 41//36 44//36 48//36 f 50//37 52//37 49//37 f 56//38 54//38 53//38 f 53//39 50//39 49//39 f 54//40 51//40 50//40 f 51//41 56//41 52//41 f 49//42 56//42 53//42 f 50//37 51//37 52//37 f 56//38 55//38 54//38 f 53//39 54//39 50//39 f 54//40 55//40 51//40 f 51//41 55//41 56//41 f 49//42 52//42 56//42 f 58//43 60//43 57//43 f 64//44 62//44 61//44 f 61//45 58//45 57//45 f 62//46 59//46 58//46 f 59//47 64//47 60//47 f 57//48 64//48 61//48 f 58//43 59//43 60//43 f 64//44 63//44 62//44 f 61//45 62//45 58//45 f 62//46 63//46 59//46 f 59//47 63//47 64//47 f 57//48 60//48 64//48 f 66//49 68//49 65//49 f 72//50 70//50 69//50 f 69//51 66//51 65//51 f 70//52 67//52 66//52 f 67//53 72//53 68//53 f 65//54 72//54 69//54 f 66//49 67//49 68//49 f 72//50 71//50 70//50 f 69//51 70//51 66//51 f 70//52 71//52 67//52 f 67//53 71//53 72//53 f 65//54 68//54 72//54 f 74//55 76//55 73//55 f 80//56 78//56 77//56 f 77//57 74//57 73//57 f 78//58 75//58 74//58 f 75//59 80//59 76//59 f 73//60 80//60 77//60 f 74//55 75//55 76//55 f 80//56 79//56 78//56 f 77//57 78//57 74//57 f 78//58 79//58 75//58 f 75//59 79//59 80//59 f 73//60 76//60 80//60 f 82//61 84//61 81//61 f 88//62 86//62 85//62 f 85//63 82//63 81//63 f 86//64 83//64 82//64 f 83//65 88//65 84//65 f 81//66 88//66 85//66 f 82//61 83//61 84//61 f 88//62 87//62 86//62 f 85//63 86//63 82//63 f 86//64 87//64 83//64 f 83//65 87//65 88//65 f 81//66 84//66 88//66 f 90//67 92//67 89//67 f 96//68 94//68 93//68 f 93//69 90//69 89//69 f 94//70 91//70 90//70 f 91//71 96//71 92//71 f 89//72 96//72 93//72 f 90//67 91//67 92//67 f 96//68 95//68 94//68 f 93//69 94//69 90//69 f 94//70 95//70 91//70 f 91//71 95//71 96//71 f 89//72 92//72 96//72 f 98//73 100//73 97//73 f 104//74 102//74 101//74 f 101//75 98//75 97//75 f 102//76 99//76 98//76 f 99//77 104//77 100//77 f 97//78 104//78 101//78 f 98//73 99//73 100//73 f 104//74 103//74 102//74 f 101//75 102//75 98//75 f 102//76 103//76 99//76 f 99//77 103//77 104//77 f 97//78 100//78 104//78 f 106//79 107//79 105//79 f 108//80 111//80 107//80 f 112//81 109//81 111//81 f 110//82 105//82 109//82 f 111//83 105//83 107//83 f 108//84 110//84 112//84 f 106//79 108//79 107//79 f 108//80 112//80 111//80 f 112//81 110//81 109//81 f 110//82 106//82 105//82 f 111//83 109//83 105//83 f 108//84 106//84 110//84 f 114//85 115//85 113//85 f 116//86 119//86 115//86 f 120//87 117//87 119//87 f 118//88 113//88 117//88 f 119//89 113//89 115//89 f 116//90 118//90 120//90 f 114//85 116//85 115//85 f 116//86 120//86 119//86 f 120//87 118//87 117//87 f 118//88 114//88 113//88 f 119//89 117//89 113//89 f 116//90 114//90 118//90 f 122//91 123//91 121//91 f 124//92 127//92 123//92 f 128//93 125//93 127//93 f 126//94 121//94 125//94 f 127//95 121//95 123//95 f 124//96 126//96 128//96 f 122//91 124//91 123//91 f 124//92 128//92 127//92 f 128//93 126//93 125//93 f 126//94 122//94 121//94 f 127//95 125//95 121//95 f 124//96 122//96 126//96 f 130//97 131//97 129//97 f 132//98 135//98 131//98 f 136//99 133//99 135//99 f 134//100 129//100 133//100 f 135//101 129//101 131//101 f 132//102 134//102 136//102 f 130//97 132//97 131//97 f 132//98 136//98 135//98 f 136//99 134//99 133//99 f 134//100 130//100 129//100 f 135//101 133//101 129//101 f 132//102 130//102 134//102 f 138//103 139//103 137//103 f 140//104 143//104 139//104 f 144//105 141//105 143//105 f 142//106 137//106 141//106 f 143//107 137//107 139//107 f 140//108 142//108 144//108 f 138//103 140//103 139//103 f 140//104 144//104 143//104 f 144//105 142//105 141//105 f 142//106 138//106 137//106 f 143//107 141//107 137//107 f 140//108 138//108 142//108 f 146//109 147//109 145//109 f 148//110 151//110 147//110 f 152//111 149//111 151//111 f 150//112 145//112 149//112 f 151//113 145//113 147//113 f 148//114 150//114 152//114 f 146//109 148//109 147//109 f 148//110 152//110 151//110 f 152//111 150//111 149//111 f 150//112 146//112 145//112 f 151//113 149//113 145//113 f 148//114 146//114 150//114 f 154//115 155//115 153//115 f 156//116 159//116 155//116 f 160//117 157//117 159//117 f 158//118 153//118 157//118 f 159//119 153//119 155//119 f 156//120 158//120 160//120 f 154//115 156//115 155//115 f 156//116 160//116 159//116 f 160//117 158//117 157//117 f 158//118 154//118 153//118 f 159//119 157//119 153//119 f 156//120 154//120 158//120 f 162//121 163//121 161//121 f 164//122 167//122 163//122 f 168//123 165//123 167//123 f 166//124 161//124 165//124 f 167//125 161//125 163//125 f 164//126 166//126 168//126 f 162//121 164//121 163//121 f 164//122 168//122 167//122 f 168//123 166//123 165//123 f 166//124 162//124 161//124 f 167//125 165//125 161//125 f 164//126 162//126 166//126 f 170//127 171//127 169//127 f 172//128 175//128 171//128 f 176//129 173//129 175//129 f 174//130 169//130 173//130 f 175//131 169//131 171//131 f 172//132 174//132 176//132 f 170//127 172//127 171//127 f 172//133 176//133 175//133 f 176//129 174//129 173//129 f 174//134 170//134 169//134 f 175//131 173//131 169//131 f 172//132 170//132 174//132 f 178//135 179//135 177//135 f 180//136 183//136 179//136 f 184//137 181//137 183//137 f 182//138 177//138 181//138 f 183//139 177//139 179//139 f 180//140 182//140 184//140 f 178//135 180//135 179//135 f 180//136 184//136 183//136 f 184//137 182//137 181//137 f 182//138 178//138 177//138 f 183//139 181//139 177//139 f 180//140 178//140 182//140 f 186//141 187//141 185//141 f 188//142 191//142 187//142 f 192//143 189//143 191//143 f 190//144 185//144 189//144 f 191//145 185//145 187//145 f 188//146 190//146 192//146 f 186//141 188//141 187//141 f 188//142 192//142 191//142 f 192//143 190//143 189//143 f 190//144 186//144 185//144 f 191//145 189//145 185//145 f 188//146 186//146 190//146 f 194//147 195//147 193//147 f 196//148 199//148 195//148 f 200//149 197//149 199//149 f 198//150 193//150 197//150 f 199//151 193//151 195//151 f 196//152 198//152 200//152 f 194//147 196//147 195//147 f 196//148 200//148 199//148 f 200//149 198//149 197//149 f 198//150 194//150 193//150 f 199//151 197//151 193//151 f 196//152 194//152 198//152 f 202//153 203//153 201//153 f 204//154 207//154 203//154 f 208//155 205//155 207//155 f 206//156 201//156 205//156 f 207//157 201//157 203//157 f 204//158 206//158 208//158 f 202//153 204//153 203//153 f 204//154 208//154 207//154 f 208//155 206//155 205//155 f 206//156 202//156 201//156 f 207//157 205//157 201//157 f 204//158 202//158 206//158 f 210//159 211//159 209//159 f 212//160 215//160 211//160 f 216//161 213//161 215//161 f 214//162 209//162 213//162 f 215//163 209//163 211//163 f 212//164 214//164 216//164 f 210//159 212//159 211//159 f 212//160 216//160 215//160 f 216//161 214//161 213//161 f 214//162 210//162 209//162 f 215//163 213//163 209//163 f 212//164 210//164 214//164 f 218//165 219//165 217//165 f 220//166 223//166 219//166 f 224//167 221//167 223//167 f 222//168 217//168 221//168 f 223//169 217//169 219//169 f 220//170 222//170 224//170 f 218//165 220//165 219//165 f 220//166 224//166 223//166 f 224//167 222//167 221//167 f 222//168 218//168 217//168 f 223//169 221//169 217//169 f 220//170 218//170 222//170 f 226//171 227//171 225//171 f 228//172 231//172 227//172 f 232//173 229//173 231//173 f 230//174 225//174 229//174 f 231//175 225//175 227//175 f 228//176 230//176 232//176 f 226//171 228//171 227//171 f 228//172 232//172 231//172 f 232//173 230//173 229//173 f 230//174 226//174 225//174 f 231//175 229//175 225//175 f 228//176 226//176 230//176 f 234//177 235//177 233//177 f 236//178 239//178 235//178 f 240//179 237//179 239//179 f 238//180 233//180 237//180 f 239//181 233//181 235//181 f 236//182 238//182 240//182 f 234//177 236//177 235//177 f 236//178 240//178 239//178 f 240//179 238//179 237//179 f 238//180 234//180 233//180 f 239//181 237//181 233//181 f 236//182 234//182 238//182 f 242//183 243//183 241//183 f 244//184 247//184 243//184 f 248//185 245//185 247//185 f 246//186 241//186 245//186 f 247//187 241//187 243//187 f 244//188 246//188 248//188 f 242//183 244//183 243//183 f 244//184 248//184 247//184 f 248//185 246//185 245//185 f 246//186 242//186 241//186 f 247//187 245//187 241//187 f 244//188 242//188 246//188 f 250//189 252//189 249//189 f 256//190 254//190 253//190 f 253//191 250//191 249//191 f 254//192 251//192 250//192 f 251//193 256//193 252//193 f 249//194 256//194 253//194 f 250//189 251//189 252//189 f 256//190 255//190 254//190 f 253//191 254//191 250//191 f 254//192 255//192 251//192 f 251//193 255//193 256//193 f 249//194 252//194 256//194 moderngl-moderngl-773b733/examples/data/spv/000077500000000000000000000000001470420062000207415ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/data/spv/logo.frag000066400000000000000000000002511470420062000225400ustar00rootroot00000000000000#version 450 core layout (location = 0) in vec3 v_color; layout (location = 0) out vec4 f_color; void main() { f_color = vec4(pow(v_color, vec3(1.0 / 2.2)), 1.0); } moderngl-moderngl-773b733/examples/data/spv/logo.frag.spv000066400000000000000000000011701470420062000233500ustar00rootroot00000000000000#  GLSL.std.450main  GL_GOOGLE_cpp_style_line_directiveGL_GOOGLE_include_directivemain f_color v_colorG G !  ;     ; +/ºè>, +€?6ø=   QQQP> ý8moderngl-moderngl-773b733/examples/data/spv/logo.vert000066400000000000000000000007361470420062000226110ustar00rootroot00000000000000#version 450 core vec2 vertex[3] = vec2[]( vec2(1.0, 0.0), vec2(-0.5, -0.86), vec2(-0.5, 0.86) ); vec3 color[3] = vec3[]( vec3(0.0, 0.0, 1.0), vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0) ); layout (location = 0) out vec3 v_color; void main() { v_color = color[gl_VertexIndex]; float r = (gl_InstanceIndex - 4) * 0.15; mat2 rot = mat2(cos(r), sin(r), -sin(r), cos(r)); gl_Position = vec4(rot * vertex[gl_VertexIndex] * 0.95, 0.0, 1.0); } moderngl-moderngl-773b733/examples/data/spv/logo.vert.spv000066400000000000000000000041041470420062000234110ustar00rootroot00000000000000# S GLSL.std.450 main")D GL_GOOGLE_cpp_style_line_directiveGL_GOOGLE_include_directivemain vertexcolorv_color"gl_VertexIndex(r)gl_InstanceIndex2rotBgl_PerVertexBgl_PositionBgl_PointSizeBgl_ClipDistanceBgl_CullDistanceDGG" *G) +HB HB HB HB GB!  +     ; + €?+, +¿+ö(\¿,+ö(\?,,  ;, , , , ;  ! ;!" $ ';!)+ ++.š™>0 10?+@A@B?AA CB;CD+ E H+L33s? Q?6ø;'(;12> >= #"A$%#=&%>&= *)‚ ,*+o-,…/-.>(/=3( 43=5( 6 5=7( 8 798=:( ;:P<46P=9;P0><=>2>=0F2= G"AHI G=JI‘KFJŽMKLQNMQOMP?PNO AQRDE>RPý8moderngl-moderngl-773b733/examples/data/textures/000077500000000000000000000000001470420062000220145ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/data/textures/arrows.png000066400000000000000000000152131470420062000240410ustar00rootroot00000000000000‰PNG  IHDRHÃÛ±¤PLTEÿÿÿÃÃÃîîûÝÝ÷ûððøáá Å ÄÇôÒÒÇ Æ ÍóÍÊË""ËóËÃñÃÇöýöEÓEÇòǵð¿®ì®¼ï¼ºïºÎóÎÅñÅÄñijí³ÏôÏÁðÁ¹ï¹¸î¸·î·±í±ÈÄŰì°þûûýÿýÉòÉÆ ((Í0Ï0÷÷ýÈûûþëëû ÆkÝk×SSÊûììåXXØU×UÔHHËýööɧë§ã‰‰ÉÇñÃÃ~á~ußuLÕLÌ''ææùÀÀñßøßuußiiÜõÔÔ;;ÑóÊÊæ““Ühh­­ìúç瀀áDDÓ22Ïåùåï¹¹í°°é  žèž˜ç˜’æ’á||Ò==Ð44Î..'Ì'ÇÇò÷ÚÚ``ÚôÏÏóóüððüùþùÓÓõüôôÏÏôËËóñüñëû럟虙çÙöÙPPÖKKÕÓõÓ!!Ë먨癙ŒäŒ†ã†bÚbÚ__\Ù\Ù[[>Ò>9Ð9¹¹ï´´íˆˆãááøÚÚö××ö¤¤êøââßuuÝooJ)Çô¢IDATxÚìØ1jÀe ëüB0تÅ!(V¢`gaiã,į‡$w$‚Iì·3Ϙþß|2 ¨k^¨é™‡*ÚŒ3s¼  žó:ß­Ï”sËO·ª¹dç@-§qvƧ*¬óËË €B&ùÝ$€:vyo@ÛaÞn¨að’4Ô€€‚ùÈ"€þÛó‘á*€¾›Mó±é,€žkò'MýÖ€€‚Vmh¨§ 5ù»æ5€žj@@A]h¨g¿Ì¿-÷ôϨÉg4£zç˜Ï9¼±c÷* ƒa†_ž¡]=‹@ ku‡N¢â’:Øââè έ'íÒ â_›&ùþîë0.ĦδŸ¬6qi€Ò“¯µ¿5 De4 Z‡¡€xlJ¦Ü€8´@ Úêp[ƒ•ºX€ðM+uQM @èòFÝ44¼uõa¶ HÐc¥îªG®E£c4 ¬çÆ„êEÇz1aj€Ò³xÐñh H» €Ý©w 4—3õcviÂÒ $èMýy3!Ù $¨ HÏóRýZ>€@¼«oï ¯êß«ÁÓLý›=ÿM–Ârb¼7×0æÀw×ʵðÛU¦¡dWÀg“ 焼6×W4Žo@Éø)h g§Úé™ðR¡áÀGçùðÏE¦1dÀ7 Ä®Ðïh n Äì¿ €xÝ–Syk|‘W‘OÜkl÷Àu¦±eµðÁž@Ê×raMØ?h 6µ\¡×6¥\)7à0Q ø`+—¶À•ÜZW¦•ܪ¦À¼‘kŸìÝ1NQ…á«[¸¡ñ.\¹Å …+n©‚„hXˆ°éHEiPÀÒ¼ñ›¹ß·ˆSüÍù%À‰|äé}ð=Ë 2eY@€#,.Èp*‡ìÅ!€i½d?^˜Òc`ðó1€é\>dO.ø¥¾¶Ü À´n¶Ù›íMŸ[t`JoÙ£·Ú»Ï>Ýð‰¥&ò¼Ï^íŸhê=ûõ@K¯Ù³×Úyê5 ¶O´²ê7 ö«9ÏÞÐÆ]öï.€n7Ù?šX­sÖ2üQ-ÈðO½ À_À`sÀ˜.v9»‹Fô#çD€1]å¼\0–ëù€Áæ:€‚@€qÖÇhµ»õ1<ÀIœegtÏ@a 3P˜€Â f 0…(Ì@a 3P˜€Â f 0…(Ì@a 3P˜€Â f 0…(ÌÀoöì^%ŽŒÂðG¦Ð…"ä?ti,¶ÚjY°Q oÀBm$Mš„IzçÂ*Œˆè޲?3çy.â-Î &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ &L ˜@0€`Á‚ ƒwôúxo:ž@ÃO'ûÓñv37.€?ÎߟNÎFÍmÓB´7¿?þ™¼5÷Ù/€aúùj÷ï¿‹Yó€ãB˜_ïv÷þ_~k÷¡†âzÚÙ,ì¨ú®ö»ÙÞ)€Þj§ý޼€@ÝLû£æY  OÚi¿/àúð½`yÓ~w'Å °U°¼i¿»Ï…°™Úii `ôÓþ’¼€Àæh§ýÕ8+€õ{ò´ïœú©ö×aRÜgëÅœpG/¦ýÅÀ£ú5í/îk!¬È—ëiƒœpÅΣVEQ^p_W%J°²0,¬¬DH£NÀBmìÒDR$AâÌÁ»9·¹ç¼Í÷Íaý͆ÍFöÏÛd®ƒpHõx ,,)^€³ ,¨]W@`YéÜ`Qåœ`YáÜà u p€§T-€+ Ð£hƒÐ¡f‚УdîƒÐ¥b®‚Ч`öAèT¯7AèU­AèW¬ÿ‚°B­ü À¥ ð)«T*€+ °V¡¼ÀJu ð;kU)ÀIÆT€wA˜À˜|À †às¦0¢ßƒ0‡x€Il_€oA˜ÅÖxö6Óè(€+à!ÀÑÛ¶_‚0“ýI[â x˜püÎwm;?‚0‘M÷ß^`Ûî¿} À46ÞÿÎP˜ÇÆûo¿‚0‹¾ý»"³Í÷ßÞ`Ûï¿ý À쿽 À Fì¿ý À.wm€ë Œ7fÿƒ0Þ˜ý·³ ·fÿ®€‡ ÇhÔþÛ]V*³ÿv€uêì¿Ý`•Bûo§AX£Òþ]€±ÞìÚ8AX¡ÔþÛCúÕÚ»@·bûoWAèUmÿm€Nåößn‚ЧÞþ/‚ЧÞþÿ³gïªUEaF'¬Æ„h4AlD‹TVA°I,|ÑÆÎÆ€`¡Ì›Ëñ~NöMP‰ÿãæ×Ìv€E î¿`‰ŠûoGAX äþ½€À"5÷ßö‚0«èþÛYæTÝÿvæTÝ;ÀŒ²ûo‡A˜Vwÿí8“ ï¿`Jåý·Ý üC÷®ÒþÛIÆÕÞÿµ Œ«½/ 0¥øþÛ³ Œ©¾/ 0®üþÛ‹ «¿ÿv'ƒ:Ø{€!=ìëQô°ÿö*ºØ¿PÔÇþÛã \ÒÉþÛË lêeÿm?ºÙ{€uý쿽ÀšŽöÿ$k:Ú»€¿iÿ ïß (¬ëjÿí}~êkÿía~èlÿí]¾ëmÿíf¾)´ÿ­m/ ð[*íÿö6ïS¾*µÿdI>à‹bû_T€AX)·ÿ%x€$÷¿ wƒ”Üÿ|Þ E÷?W€AHÙýÏà"…÷?]€ó TÞÿdŽ‚Pzÿ«x€å÷?Q€½ ßÿx΂P}ÿcØ @ýýà 츇Aèaÿ«x€_tµÿ¡œ ý`7ìÿrN‚ÐËþ7 p=ýìU/ ðÇÝÿ?ö¿*€Pèuÿk8ð™zÇ…0(ú%­„„Ä£µ5(¬Æþ÷ ˆóHæŸÜsöp/©þWð2­þWp>±þð<µþ¿pò0‡ÛÿýÌx €`ÿ_x €bÿŸx €dÿx €-ÜýÓâúŸ9½ €hÿúÇÐ?€þ1ô°Øþï†?¿è`WnôŸbè?ÌИ ÿ0@ÿa€þà ý‡ú3ôfè?ÌИ ÿ0@ÿa€þà OÿeP·Ïþ¯†uúÇÐ?€þ16q­ÿ:Ó?Ð¥  Kÿ@—þ1€.ýc]úǺôtéèÒ?Ð¥  Kÿ@—þ1€.ýc]ûìÿlXHÑ?Ð¥  Kÿ@×…þ1€,ýc]úǺôtéèÒ?Ð¥ÿwvê¤ `à<‘@ñãð¯[³éö`]úǺôtéèÒ?Ð¥  Kÿ@—þ1€.ýc]úǺôtéèzéÈÒ?Ð¥  Kÿ@×ÉþÃ"p!ýc]úǺôtéèÒ?Ð¥  Kÿ@×Áþú_É.¢  Kÿ@—þ1€.ýc]úǺôt=õdéèÒ?Ðu²ÿï°š¬§  Kÿ@—þ1€.ýc]úǺôtéèÒ?Ð¥  Kÿ@—þ1€.ýc]úǺôtéèÒ?Ðu²ÿÏpØFÿ@—þ1€.ýc]úǺôtéŸ1€,ý3cUoý3cvêÝ&b(Š¢¨E0  ‰.(„þkA0|g<öu~œ»V{7¥^@Oúç´¤Ž  #ýóÎÒ?  ýóÉÚÑ?_  ýó4óx]ÍUÿ@š=û¿ŸHgcÓ??@'úç„4¢N@ú猴¡Î@úg†4¡æ@7úgŽ´ æ@úçh@ÿ\òOð<¡†÷tõ;úgx‡c¯0ý³ÀÂéŸ%Mÿ,2€húg™$Û³ÿ»‰~ `$úgäÒ?« –þYg©ôO„Ò?Iÿ”@$ýSc‰ôO‘Ò?UGÿ”@ýSgiôÏFÿlaYôÏ&EÿlcIôÏFdÏþo'0€-ôO¨Ó?q  Lÿä1€*ýÈŠôO"¨Ñ?‘  Dÿd2€ ýÊ ôO*ø{úg°Jÿä2€5ú'˜¬Ð?É `™þ‰f‹ôÏ ;u’Ò@@ô¯7.Ü)xÿK:b¦î@Èðë½;TÍÍŽÑ?“3€#ôÏì `þ™ž¬Ò?ó3€ky:5Wý³Î“þ¹G°Lÿ$À"ýÓ`KôO„,Ð?pHÿdÀ™úÿ`·ô¦î—ìÑ?%°Kÿ¤ÀýÓbÛôOŒlÑ?5°¡r àßDý?ë8þ 2€?ú§È~éŸ$ø¡š à›þ‰2€/ú§ÊÆÐ?Y0ôO—ÌÔÿË8‡þ)3ýfõªŠèŸ0Ð?a  @ÿ„€þ 3ýfú'ÌôO˜èŸ0Ð?a  @ÿ„€þ 3ýfú'ÌôO˜èŸ0Ð?a  @ÿ„€þ 3ýfú'ÌôO˜èŸ0Ð?a  à“:¶Aø5BHiè`öŸ†‚Ä£4I|·ƒý·‡þ9 Ð?a  @ÿ„€þ 3€½ô0†ÌÓ?€þÁÖZôÏá€þ 3ýfú'ÌôO˜l¼ÿ“þyg¿é @ÿ`úÐ?€þÁô Ú @ÿ„ÀFû¿ øÀ¾Ò?€þÁô 0ýƒÌZγ¹êŸ=3ýfú'ÌôO˜èŸ0Ð?a  @ÿ„€þ 3ýfú'ÌôO˜l¢ÿë€)ð¢0ýƒè @ÿ`úÐ?€þÁô 0ýƒ蟴øôO[{ú'.=ýSWÀEÿÔ… è@ÿЀþ¡;ýód§ŽŠ¢ˆ*À˜1È"‘NôßxÙÿîžÓÃ.ÝèºÐ?t è@ÿÐÀ鲚«þ™®7ýCw[öÿ:À¾Ô è@ÿЀþ¡;ýCwú‡îôÝÜõÙèºزÿóv*2ýCwú‡îôÝèºÐ?t è@ÿЀþ¡;ýCwú‡îôÝèºÐ?t è@ÿÐÀCÿÀ†ýõÏÿ˜9ýCwú‡îôÝèºÐ?t è@ÿЀþ¡;€Çs5WýôèºÐ?t è@ÿЀþ¡;ýCwú‡îôݼõÝ\o‹¹êæ `õú‡‰X;€þaæV ˜:€ßÐ?ÌÀ¯è&àûô³ðíú‡éø°S¯ÆRPD' óæ: A*äŸb¿¥ ˆsrèþx÷>ð^j¿;€þaaÏ ØÀ³èVðëô;øùú‡¥üxýÃÖ¾?€þamß ØÀ?;À›þy-¯9€Çô›HOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€¿t€·—ôâHOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€ôô³HOÿ0;€?8ÀÛÇÀˆ¹¤§˜@zú‡Ù¤§˜@zú‡Ù¤§˜@zú‡Ù¤§˜À“|Ò?sfžþ™·;€ôôϺÏ^žþY÷èurééŸq^7žþÙöèutéévõô»zú‡]ýøÊÂ0 jƒŸ ¸À¿\ð, üuV]%·€¦2æ.xìÝËJQ…á½ {¼^£!P¤CMÒÇ ŠÑ~ Š((Šó\ÔÇÎñ†·¶­.¬³ÿï!ü£…œ,éŒ r² 2ÈÉ*È 'ëÖé(dcÝ9? ÉXäd=˜í€L¬GšÃˆõØä$äa=5Û YXÏ4 ë¹ö8ä`½´û5d`-Ð\€¬EÚ«P?k± 2¨ŸõŠùE¨œõšv+ÔÍ*È 'k‰ù8TÌZfJ5³–[ÿje½aó_¨”õ–éŸP'« €œ¬6€ Y]L€úXÝl“@}¬ŽvÈ :VWk?@]¬î¶¿€šX+ØáG¨ŠU@NVA9Yädd“µ²ÉßP«‡32¨‚Õ‡€á³z™|ƒgõt: gõu~†Í*È€ÁaUc,°¦w˜í>Ž€Ï­9 ÜcÎä$p‡@B³½À 5k Rj€¤vù/dÕ\¤Õ^äµA0Hl~`V»`À ³ù8À ­)À ³u~Ä$öŸ½;Fi (:…Ö^# «6¦±V”’xEÅ^ͽ=Èdwg³€¬åwº¬@Ùæj²–ŸAè²eÖ Ì ¤m­@ØÎ „]^@×öx²vgƒe ÊVƒÐõe ÂŽ ku1]Ÿƒõý6YÖ mý<Y'¯ƒµú€®õÓ d¼ @Öùû t=º#.„­ Ê dù @èò/€Ðå9 Ë“€@—w€.o Y¾ tù"Ð囀@–ñ_èr@èrHÈrPèrXèÚÿ€¬íñ 4ÿ€®ÝÕ DmO iù€¨ñ_Ⱥ1þ UËï Dmöƒeü²–»Aˆº?€¨[gÿ€*ã¿Ðeü€öî^%®0ŠÂðŒõ¾aš™F›©# )Bâ È ˆ‚¢Ø'F½ì¨äÏ8NÎ9’â|ûy.bñv‹ºä¿ ¬…ü7”µŠ’ÿ€²w ¨Ùm`(j%ÿïJZœ÷ ÍŽƒ€‚vƒG€r¦çÁ€jf'Á·=¡§ùÝ,_•ÿGŒX¾"ÿwµápuÀ¸ €‹I#—òê6yÀø €Ëy Èù@úÀr/€6ô€ÏòšÑw>mЊ”ÿPWöÊÿ·4$ûä¿×ohKv¿ýû@[:ÀùÍé:ïä?´'»åÿ×Ú“òêJùu¥ü‡ºòŸùÿ-€F¥ü‡ºrsþ  ]`+€†m€÷^¿¡m/ÀBþCëòÅü¿  q)ÿ¡®\Ÿÿw´oíÌn(`ݬä?ÔÏóÿ,€òYþPÄß°{@O`z@ù$ÿO($ÿÌÿ£*Éßù¿@-¿àê4€b~ÀÅ$€jRþC]ô0—ó*Ê7ÓëjÊå^E­ä?À÷öà@Ðÿ׎°ÀbżzéIEND®B`‚moderngl-moderngl-773b733/examples/data/textures/checker.jpg000066400000000000000000000621311470420062000241250ustar00rootroot00000000000000ÿØÿáªExifMM*bj(1"r2”‡i¨Ô ü€' ü€'Adobe Photoshop CC 2015 (Windows)2017:06:30 15:27:16   "*(2pHHÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?ó­©áH¤’˜(•2;¨8ÂJDB‰¤J@N©)Š›Jm©ÚRF„®Ò§|™ÂVÑ;à’Ÿ£Ÿüë¾)@NñúG|TJJWu0†œ”•<¡Â[’S7AqN\£ÊJZ%1j˜ mIOÿÐàv&Ú1CzJBâµS(e%"t§iRpQˆII)åI¥%%=ƒôNø$ÐžßæðIOÑÖ}7|TS°ûÝñP%%,aEÅ9P%%,\›qQ'TÛ’R@TƼ!„F¤¦mn‰ËTš§·ºJÿÑá‰ByD(nIH†Šô2S TÏ %%("5 ‰)+T¬Ö§|[ ìÒ§|SômŸMß§iý!Cá%,â‚ç"< >RRÅÉ •T‚JNØDo(,(ÌIIš¥A§E)IOÿÒátPxR3µIMw ŒàžS)œJxIL6©·„´NJ\¬?¢wÁ(MoóNø$§èûOéñP.OwóŽø¡¤¥œ†äB¢Z’˜Ê–Å6µ5%"hEn‰mO )#Juè¥))ÿÓà¥)Bõêýð˜ßWï”ÉÅ Å#}¼ ÕþðIL¸Õ1r‡ªÏÞKÔ¯÷‚JfáXÏÞ bÚÿx$¦eFÏæðOêÔ8!Ûef·àd$§é¿œwÅ è‹mvCL¢‡¥oî””ÁHâ«t©¶›?t¤¦!ª`B©þ ^›üR8ÕRRÅÉ •T‚JNØDo(,(ÌIIš¥A§E)IOÿÒátPxR3µIMw ŒàžS)œJxIL6©·„´NJ\¬?¢wÁ(MoóNø$§èûOéñP.OwóŽø¡¤¥œ†äB¢Z’˜Ê–Å6µ5%"hEn‰mO )#Juè¥))ÿÓà¥)Bõêýð˜ßWï”ÉÅ Å#}¼ ÕþðIL¸Õ1r‡ªÏÞKÔ¯÷‚JfáXÏÞ bÚÿx$¦eFÏæðOêÔ8!Ûef·àd$§é¿œwÅ è‹mvCL¢‡¥oî””ÁHâ«t©¶›?t¤¦!ª`B©þ ^›üR8Õ ÿâ 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@ÿÛ„       ÿÀÿÝ@ÿÄ¢  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ŠšªºÊÚêúÿÚ ?ñY«©Š¯˜ªð1VÈÅ\1WUaßv*´ŒUaÅVñUâªL1U2¸ªÂ´ßv*ìU£ŠµŠ¶*¸bª‹Š®TÃ^1U늪 Upª 4ÅW U±Š¿föÅWƒŠª ÅU)\U®'kŽ*Õ6Å]LU¼Uz UT UxÅWP⮫xªõÅU*â1V†*ÙÅTÛQsЍ1ÅTŽ*¤ÇXqU¤W[LU¢1U§ZتÚb¯ÿÐñUÜiж*¼ UºеÓh"˜«X«G¦*¦Ûâ«1U7ÅTqV;â­q®*·†*°íŠ­=1VÔb«©Š­­1UÊØª ÷ÅUT¸ªª±UÃT\UUØ««Š¿fWUQŠ« ÅUBâ­ñ«\vÅVЬÅ]Šª-1UQÓ\ 1UA¾*ßUÔÅ]Zb«Ãb«úŒUªb­Ьc\UAñUÅT\âªdâ«â®QŠ®+Ь#XF*´®*Ñ\UÿÑñ¡\U¢¸«€ÅWb­ŒU¦\UOhœU¬U¢qU3еЩ8ÅTˆ¡ÅZ"¸«@ U¦8ª“b«(qUÃoZwÅ\¢˜ª¨8ª¢œUYqUdßT Н_LUi«@oŠ¿fF*¬˜ª¸ÅUÅWTb­WXت™«±U늫 U¼Up8ª aŠ·\U¬Uتåp1VËŒUalUam±U68ªƒœUت™8«G|Up4ÅWñWLUL®*Ñ«T®*ÿÿÒñÁ«\qWÅ\F*ìUÄb«qU3еЭ;â­SZF*¦Øª‰ÅV“LUªâ«Sßl.ø«dSkn˜«T¦*ØÅUPbªëŠ«ÇŠ«Š®qðÅ]LU¾8«ö` UUV˜ª¨÷Å[®*ß,U¢qVŽ*·v*¸51UáñVù⫹b­‡ÅWÅW†ÅZ-Š­-жi›YËXÍŠ¨;bªLqU‡p«`b«×lâ«N*¶•Å[ Š¿ÿÓñÙÅVâ­Wo[Óp;â® ULŒUoUiZb«ISfÅT˜âªlqU"qVÅZ'k®*¸ UºWu)Š´qW\U°1UEÅUF*¯*ˆQН¥*Õ1UÀb«©Š¿fbªŠ1UôÅ\F*Ö*ïlU£øâ­tÅ]Š»v*¸tÅ[¯Ž*îXªàØªðØ«‹S[ʸ«uÅV–ÅTËâ«KbªlqU˜«G®*áŠ®éŠ·Š·M±V¸×l-1WSÿÔñáÅVÓZF*ኸŠâ­R˜«±WR¸ªÒ´ÅT˜âª-Š©±¦*¤ÍЍ±ÅVTâ­WloН\*Ý1Vé\Ui\UÜqUÀb«ÀÅW/\U]1Uu4ÅWƒŠ®Å[¸ª «ö]WU^*â1U”ÅZÅVœUØ«Dâ­rÅ[_Š­cеËw:b­‰1UÜ«Šº¸«¹b«Kb« ÅZ'XN*²¸ªá¾*¸ Uºb­Š¶\l®*¶”Å_ÿÕññ\Um)Š´F*¶˜ªàµÅ]Ãh®*Õ)Š­;튩2⪶*‡rqUЩЭ'[\UzœUPUzŠâ«ÀÅ[㊶qLU°¸ªà¸ªà”ÅUbª£\1UãVQН~Ì ÅU8â®i«Š­8«TÅZ¦ØªÜU£ŠµÇv*îTÅZ,1U¥±U…±VƒŠ®õ1VýLU²ø«^¦*âÕÅV×ßqßkŽ*¸ Uxªð+Š®ãŠ¶]Çu*±†*ÿÿÖò_ U¯Ok†*ÑLU°´Å[ã\Uk-1UªÂqU'lUäUA†*¤øª‹mЍ³b«yâ«ÔâªËŠª®*ª1UÃ|Upb­Ðb«‚ŒUxQŠ·Çl-1Uã\1UEÅUU\Uû4´ªñŠ´qU¸«Db®u1U…qV€Å[8ªÃŠ©±ÅTë¾*êâ«IÅV–ÅVßp|U¾x«ƒb«ƒb«†*¨*Ø«,UpªªŒUSŽ*¸.*ßUi\Ua«ÿ×òPLUÅ1U¼qVŠâ«iŠ´h1U7lUAŽ*¢ÇRcŠ©6*¤Øª›ŒUAÆ*¢ËŠ©Ð⫔©ÅUWTSŠª)¦*ÙlUrœU~*¼b«Æ*ìUrâ«À¦*ª¢¸ªð)Н\Uû41Uë¾*¸®*´®*´â«IÅ]\Uª×[ßhœUa8ª“âªdâ­r¦*±ŸX[XMqW U²qUÊqUãÇ^§^T^*¼ UUWT\*êSj˜ªÒ˜«ÿÐò— Ui\UoU¦\UHŠbª/Ѝ1ßRsЍ³bª$â«[ЬlULŠâªl¸ª‹ UhÅW©ÅUU±U@ت lUºâ­†¦*ª­\Ux8ªõ5ÅW‘ж£VU®*ª¢˜ªð;b«À¦*ý—ÛT^˜ªìUilULœUaÅZ'lUªâ«Kb«ñU¥±U¬qU3¶*¤çS-е\UØ«co\6ÅWƒŠ·Š¶*ª§VSŠ«(ÅUTbª€W^تÒ1WŠ® Š¿ÿÑò±ªÒ1V¸â«SPlUA늡ÜSC¹ÅT[Xت™8«^øªÖÅVtÅVUI—XWp®*½qUUß_Џ¶*àØªª±ÅUAÅUSV^£T\UPb«Æ*º¸«öTUxjb«ë\UiÅVUf*Õ1VŽ*°ŒUaªÜU£Š©³bªqU2N*Úâ­’1WŠ®]\UÀ÷ÅWƒŠ¯TQŠª®Øª²U]qUQŠ®Å[㊶]Ƙ«ÿÒò¾*´â®¨ÅTßPqЍ°ÅPÒb¨WÅTN*´ïЬ¦*ÑÅVâ«ÅTÈÅVâ«qV©Š¶1UE8ªêâ­¸«‡¾*¨‡VS¾*ˆŒâªëŠª¨ÅUÅW¨Å[ùb®«öXxâ­×\qlULœUÃßn˜«DbªglUMŽ*°œUi8ª‹Š©6*°â®q8«\±UÁ±UõÅ[ªªâªƒ®*ª¸ª ÅUTbªÊqU@kŠª¨ÅUÅWR˜«GÿÓò¾*´ïеЬlUE±UÅP²b¨gªƒlqU•Å\zb«øªÜU¯–*±†*¦F*¶›â® U¯lUpÛ]\UÃoTQŠª.*ˆLU]M1UU8ª¨ÅU*º˜«ˆ¦*ý“ÅWb­ÓZqU´ïŠº¸«Å['SlUE¶ÅT‹b­Š©±ÅT‰ÅVŠ­åŠ´[p8«uÅUS|UX.*½F*ª*½F*ª¸ª¢âªËŠ« ÅUWTªìUaÅ_ÿÔò±ëŠ­'j¸ªÖ8ª‹b¨wÅPò U ûb¨vÅTÏ\Uªâ­елhŠâ«bªxªÓŠ­éŠ®â««Š»TLUR˜ªõÅUPâªà⪨ت²âªÊ1Uäb«N*ý”\1VñVˆÅVÓXÃhb®&˜ªÂت“œUEŽ*°¶*¦ÍŠ©ÅV“Š­'Y\UÁŽ*¼ñTDxª%wÅWªâª”¦*¸UUqUEª!U^¸ªñŠ·^ØªÒØ«ÿÕò©ÅVœUa8ªÆlUIŽ*¤ÇC¹ÅPÏŠ¨0ÅTŸY\UÇhUºâ­T Ui¥1U6ÅTɦ*ÑÅ[ªà1UÃT\UPb«ÀÅUbªÀbªŠ1Ud4ÅUѱUN£u1Wì¥1WtÅ]\UƘªÚâ«N*×LUiÅTÛlUIÎ* ÇRcŠ©3bªDâ«Kb®åŠ­'mwÅUb¨ˆÆ*ˆ1UU4Å[­qVÁÅU“D ÅQ ÓT1UÔÅ[8«@×h튿ÿÖò®*°â«*¤ÇR-Š©±®* øªƒŒUAñU21U6ªÌUØ«±VˆÅZÅVUf*Õ7ÅWLU¼Uتõ5ÅUÔbª mН\UQN*ª¸ª¢âªƒlUY*©Š¿e)ЏŒUi¦*´œUoSŠ·LU£Š©¶Øª“UAÎ*¢ÇQcŠ©3bªE±UµÅ[]±ÅW(¦*ª¸ªº6*ª­ŠªƒŠ®^1UtÅQqUuÅU*¿hâ­b®­qWÿ×ò©ÅTËb« ÅTÛ|UI†*¤F*¦øªƒâª1U"1Uኩ±W ñV銺˜ª›â«1VˆÅV×o–*îX«U$⪩Z⨄8ª°ß\)Šª(ÅU—TªîXª´xª°Å_²ÀSXƘªÊ×XÇhb««Š­cŠ©1ÅT˜âªqT;UEÛPfÅVеË|Up8ªñŠ®TSŠª©ÅU—UªªïŠª¨ÅUSWLU]qULUºâ­Šb®Å]Nø«ÿÐò¡ÅTÏ\UaÅZ#SqЍ6ت“uÅTœbª Ѝ‘Ь;âªeqV€ÅWSkSqŠ©â«IÅVâ®Å]Š®TLUYqUtÅU‚â«Ôbª«áНÅWŠª¦*ª*ý– ЬcЬ­1U§|U 1V늩±ÅTÉÅTœâª qUñT;âª'ZqU¸ªàqUã¦*¸UQN*¬˜ª²œUTUU1U`qUTªºâªÊqU@qVñUÝ6Å]\UÕÅ_ÿÑò‰lUn*ìUkSS8ªŒ˜ª1U&ߦ*¤Øª“b«1VˆÅVR˜«±U½±UŠ©‘Š­¦*¶›â®8«C®*¼bªŠ1UUªºbªàÓ\b«ÁÅUWTÅWŒUuqWì­iŠ­&¸«©ŠµMñWЬlULœUMŽ* ÇS8ª›b¨wÅTN*·èÅZ+Џ bª€b«©Š¯\UTUU*®£U]±UeÅUÓUÅUT\*º»b­b®Å_ÿÒò€Å[ÅZ=1U„bªM¶* ç¶*‡cŠ©“Ѝ¹ÅT‰Å\1WŠ­#ZqU‡[Jâ­qÅVñ¨ÅV•ÅVñ®*îâ­Šª ÅUÕqUU\UR˜«`b«‡\UUM1UElUxlU¾X«öS–*àØªêâ®®*Þ*¦øª‘ÅTœâª$b«HÅTØbª 1U&LU®8«¸b®ã㊮ Š®¦*¸ b«Ôbª©Š«!ÅU†*ª‡D)ÅUÅUU«tÅW U¢iŠ­&¸«ÿÓò«x«Db«P|UA†*¡"âª Š©0®*¦F*ÕqWWj¸ªÓŠ©œU°1V銭¦*´Šâ­qÅ]LUÀbªŠ7ÅQ Н˜ªàqWW\øªáŠª)ÅWrÅ[­qWì¶*ØÅW˜«‰Å\Z튩1ÛQcŠ©“Š­'SlUM±U‡|UoUÔÅWÅWðÅ[኷Ãu)Šª&*®«ŠªŠª.*¬§U\UU1UaŠ®®*ÕqV‰ÅZÅ_ÿÔò•qWWj¸«]qU&\UEÆ*‡WPuÅTŠíŠ©°ÅTÈÅZ¦*Ö*êWw U®4ÅZÅZ#kŽ*ßUi\UÀb«†ØªªœU}qWж:â«Æ*©\UÕÅW®*¨1Wì¶*êÓqlU®[b­rÅV–®*´ïЬaŠ©0ÅTÎ*°œUHâ­ UpÅWÅW„¦*¨©Š®à1V¸â«xb«•iŠ«®*¼ UpÅUVMñUa¶*¼6*Ø8«x«±VÆ*ÿÿÕòŽ*ìUÔ®*êSXتƒbªЍ0ÅTÊâªe1U&ª“Uªâ­†ÅW1Wb­qÅZ¦*Ø«d U®8ªÒ¸«©Š®AŠªÓu1WtÅW©ÅWâ®ÅW©ÅW†Å_²ÕÅZ'[\U¢qV«Š¸œU®X«Dâ« UI†*¤F*°ŒUªbªŠ1UU\UW†*¸-1UÜqWzx«A1Vøb«ÂÓ]LU°)Нªõ;⪠×T8ªþتáÓv*ÙßÿÖòxlU²qVÁÅ\qU6ÅTŽ*¢ÃS)Š©•¦*¦ÃQaЍ8ÅT·Å\N*Ø8ªðqWWpðíŠ·Š®¸«tÅV‘еLUrŒU}1Vé\UÁqV銯ªï|UØ«c~ËWv*â1U‡n˜«@â­â­Shâ«NøªÂ1U…qU…qW*bª1UEª²UU°¸ªî#kŽ*Ø\UwU®8ªà1WSlbªª1UeÛ^7«x«±V«Š¿ÿ×òn*ìUp8«‰ÅTØ×S8ªÃŠ­jbªm¾*¤ãPaЍ°ßR*1U¤b®^*ØÅ[㊺˜«u¦*ÝqV±Wb«†Øªá¾*¸ UØ«±Vúb«Å[Å[Øâ¯Ù\Uºâ­Š©±Å\*»v*´â«qVˆÅZ#ZWmWT\£^ªªbª”Å]Äb®â1WŠ·Š»l UªWl bª‹\Up8ª jb«ÅZ'j¸«ÿÐò]qVÁÅ]Ëi›[ЏŠâªl1U&ÅVŠ©±ÅT[R8ª“bªxªàqUàW\*Ù#ZqU2Ø«ƒWTâ«€¦*ìU±ŠªЏŒU¬U¢qVÆ*¸oН~ËЏŒUiªÂ1WŠ®Å]튬&˜«U®*ìUÔ®*î8ªî8«€ÅUb«éНQŠ«Š®ãŠ­aŠ­Å[Øâ®¦*ØÅWŠ·Ç\1VñWb­†¦*ÝkŠ»ÿÑòN*»ZqV«Šº§uqU­Š©0ÅTœÓR'RcŠ©6*¦qU¥qWqÅWŒUºâ­rªÒتÚTâ®éŠª)ÅWƒ\Uºb­Š®]±VÉÅZÅZ8«@âª‹ŠªŠ¿e±Wb­Š­#hb®ÛZqU§|U¡Š®¦*¸ UºSpÅWqÅUqUáqU긪¢ŒU¶*´ŒUa\UÀb«©\U°¸ªà)ж@Å]\UØ«Gk®*¸UÕ®*ÿÿÒòEqWWqÅZÅZ'uqU¥±U6aЍ¹ÅTI¡ÅTØŒUH¶*×QЏ UÄb­W[ËZN*¶¸ªàqUÃ|Uxª¢ŒUq«kŠ·Ðâ­b­†*¶µÅ[¦*½qUAŠ¿eºb®®*êâ­b­LUa8ªÜUØ«©Š®qUã\qUÁqUáqUÀPb«Ôb«éLUp8«±Wb­UÊ+Н Š·AЏœUi8«C|U¾˜«ºâ­Óhâ­Š¿ÿÓò.*»¦*Ø>8ªÒiЬ-Š»–*°œUMŽ*¦qU8ª›bªtÅ]ÓuqV™±U‡sŠ­8«X«Gp8ª¢œUP6*¼6*¸±UÃo®*Ý1U§|Um)Š»\¸ª lUû([lUÇp8«LqU”Å[ÅZ8«†*¸b«Æ*½F*¨_LUÀbªŠ1UüqWLU¬Uºb®ãж1UýqV±VˆÅV•Å\1W\U°1WUkb«+Š¿ÿÔò(#q8«¹b«I®*°×hšbªe«Š©“Ь-ЬmñU6ÅVâ«Xâ«yb«IÅ\*ÙÅVb®>تÃQжT Šª)ÅUW\ÅW©ÅWb«iŠ´F*´Šb®o®*ý–Å[SЏœUÄâ­V¸«±WUØ«€ÅWb«€ÅUTbª b­ñÅWŠªŠ¯íŠ­ëŠ¶l Uºb­Šº”ÅZ8«†*â1V©Š­ÅZ®*Ñ;b«Nø«CÿÕòqWWkhœUilUcâªuÅV1ÅVâ­WZqU„âªdâ« ÅVÔœU°iŠ®­qV©Š¸ŒUiÅZ¦øªå®*ªµÅUFتð+Š®˜ªàqVúâ®ãŠ­lULâ«—~ËUh8«u«Dâ­W]\UÕÅ\1UÕðÅ[8ªõªº ⪠ U±Š¯b«€Å[Å]Ólb­â®Å[b®®*´â®\1VŠâ«*²˜«DSZqV±WÿÖòqV«¶*×,UÀ×ZØªÂØªÃŠ©œUi8ªÂØªÂØª›6*°¶*ÑÅZb­õ«cß]ЏŒUÀU¾«|qUê1UP1UA¶*âqV«\UQqVñU6ÅVÒ§]Jb¯Ù6ÅVV˜««Š»v*êâ­Ô⭊⫱UÀbªÈ1UeÅWƒŠ·Š¯ªüU±\UÔÅZÅ[«Dâ®⫱Wb­Š·Š¸ïЬ#XvÅV“Ь=1U¤â¯ÿ×ö¡ÅVŠº¸«¦*±ÛS-Š­/Š­-Š­'lUaÅTÛXN*Õ1WSoŽØ«©Š·LUp«|kж1UÃl UpªñŠ®ëŠµLUÃlUuqWrÅZ'j¸«Lø«ñ˜µqU•ÅW Î*¸žØ«x«Db®^^TUALUTUxªêb­Ž˜«xªðvÅ[Å[ã\UÀb®)ŠµÆ˜ªà1VÈÅ\*㊭lôÅT›R;b«I®*°ôÅ_ÿÐö™ÅVb­Ž*´¶*¦Í\Ua8ªÂqV‰ÅZ労N*¦Ç[Š´1UàW^h®*êb­Š®lâ®U8ª \Uºxb®ùõÅ\*¼oŠ¸â« ÅZ Џ¶*°¶*¦[~4ÅWW\¸ª¦*ìUÀW^*¨£T Š®UÅWНbªªqUØ«±WŠ®ªð1UàUp«|qWÅ\˜«Db«NتӾ*·¦*ê×ScŠ©õÅVLUiÅ_ÿÑö‰8ªÒiŠ­-Ьc\Ua8ª“b«9â®­qWl1V‰ÅV6*°â«†øª¢ŒUPb®#h.*»1VÂ×o†*½S_Çj˜ªÓ¶*´œU°Ø«‹WXN*ኴzbªlqU•®*üiÅW-qUA¶*¨7ÅWqÅW#\*¨£\ 1UÀ⫆*¼ â«Á¦*»–*ÞØ«]1U늪¨ÅU^*Þ*ìUÇXqU­\Um1U¤Wj”ÅV8ÅT[lUalUa8«ÿÒöy8ªÆ8ªÂwÅZÅV±UÅVS]ÓhœUn*ÑÅZ¥qVÀ¦*¨1UÃ^qUÀb®8ªõ\UUpÅZ8ªÂqU„×ZEqV±WV¸«±Wb«X튩1®*´mŠ¿IÅW+b«Ãbª±ïŠ¢¦*»Ž*ßUØ««Š¶ 1Uá±UE8ªòqU¼Ž*¸6*º¸ªôÅQ 1U@)Š·\UÕ®*ኸâ«{b­b­b­b­Š©¸®*¡&ت«MŠ¿ÿÓösbªM¾*¶˜«xªÓŠ©0ÅZ¦*êb«HÅVâ®Å[lŒUÃTbªŠ+ŠªqÅ[ Н LUu1Wb­SXËŠ©•ÅVU¬Un*àØ«‹SSfÅV¾*Ñ8«ñ¢¸««Š¯SŠ¢ÓWVÅUCb­ƒ\U£Š´1UÔÅWLUx8ªúíŠµŠ»^*ª‡|U„b«ñW\Uºb­tÅZ&˜«\±WWhqUµÅZ-ЬfÅPîqU#ЬlUÿÔökULœU¬U±Š´ÃXV¸ªÞ8«ˆÅTÛ[MñWqÅ[Å[¦*ت¢Šâª«¶*¨¸ªà1VñVŽ*Ø5Å]Š­&¸ª›bªg|Uiª™ÅVÖ˜«‰ÅVÓhŒUa®*üf­1WrßTWÅUVLU]U \Ux8ªîX«`×\1UØ«u¦*Ø8ªìUv*ìUzšbªêت¨`qUàâ­“AŠ­-Š­&¸ªÓе\Uªâ«I®*·•1U„×R|Uf*µ±WÿÕöY5ÅVU°1UÀb­еLUiÅVqU¥qV¸Ón˜ªÒ¸«ºb­ŒUx4ÅWƒ\UzœUR¸«u¦*ÕqW U¦8ªÚâ«Xâ«+Š­&¸ªÓŠ©°ÅVâ­Š­®*Ñ8«ñ™†*°Ón¸ªôlU][D#WU劶 N*½qULUv*µ1VѱUJâ­â«±VÆ*¼6*¨¯Šª *¸½qU•Å[q8ªÚŒUalUo*b«I'h튨³b«9SXÇÿÖöG,Uº×lb«éЏâ­UaÅV‘ееJ⮦*Ñ\ULŒU±Š¶qUËŠªŠ® Н¸«tÅZ®*µŽØªqU¥«Š­8ªÞX««Š´wÅV‘Ь#YMñV\UøÎÇS'[SНSŠ¢⨄ÅUk¶*Ø8ª¢¶*ª*êâ«I®*àiŠª+bª€×]òÅ[ÅWb®åLUÅñUË&*¨¸ªáLU³¸ÅTÎØªÂqU¤â®\U¦ÅTRcŠ©—Å_ÿ×ö51U˜ªñН1VLUi«XªÜUªb«©¶*Ö*°œUiÅZÅ]ж 1Uàâ®TVÅW×kZÇQ'hŸ UkЬ®*Ø5ÅWÓlUiÛRsLUK–*ÑlUøÊÍŠ¬'j»âª‰Š«©ÅUѱU`kж1UEª ®*âØªÎX«`⪃UCŠ®®*îX«|±V¹â®©8ªáŠª¦*¸>*»ž*´µqU2تÚâ«ÅZc¶* æ˜ª›S8«ÿÐö94Å\*¸UPU£Š­-еÔâ®#vÃuqVŽ*×U¢´ÅVSj˜«†*»¦*ØÅW®*¸Uºâ«[¦*§AŠ´vÅVUa«k±ÅW×ZÇPâªâ« b¯ÆrØ«†ûb®|UYF*¨1UE8ªºâªÊ1Ue«}*¦ØªÊÓplUQ_U Š®åŠ·\Ui8«†øªðqUàâ­×k–*¸5qV늩“Š´*¨»â«\ÓC¹®*¢Ã[Š¿ÿÑö1ÅZªáŠªOž*âqU3Šº¸ªáЏâ«1VÇ\Up¦*â+Š­"˜ªÒ1V©Š»uqUÁ±Vùb­ƒŠ»hâ«HÅVŠ©“ЏU²qU„âªMŠ©0ÅTXb¯Æ|Uµ8ªñŠªŠª)ÅWŒU] 1TB±U`vÅZ-Ь'XqV±UÃlUQN*¨1UÃ|UÄb®b­×mN*¸œU®X«`Óo–*Ö*ኮ˜ªÖ5ÅTXbªl1U‡lUÿÒö=1W\Ux«tÅZÅZ#[LU±¶*ÓUmqV늮ªúŒUkSYŠ´qV±U¤öÅ[¶*Þ*ÝqWÅ\*º›bªgSaŠ­««Š­lUHœUaª™\UøÏÄb­…Å[¥1Uê1UêÅUTbª£UVÅUb­ÅVóÅW\UÄb®TLUYF*¼ UÄâ« Å[«clÓhœUÀ⪃]¶*ìUkbªdb«ÅT˜b¯ÿÓöI«¶«uÅZ-ЏU¼Ui8ªÞX«GkuqUêqUÄâ«IÅZ«tÛZF*±†*ÐÅWWkhœUrœUuqU¤â«[S8ªÚâ­uÅVЬ8ª™8«ñŸ¾*¼b®lUµÅU—|UP Uv*¸Uw,U®x«@Ôâ«Á¦*¾»b­W|Uz¶*®¶*¼6*Ñ8«X««LUÁñUܱV‹b« b­ßUVÅWÔb­ƒŠ·¾*´âªdbªMŠ¿ÿÔöI®*Ñ8«Dâ­W[ʘ«|±W\U¬UتÆlU®X«a銮犺¸ªàqWr®*ÝF*µ±U¸«±WUn*ÝqWWuqVºâ­0ÅVŠ¬éŠ´qUŒ1UÅ_ŒÃ®*¼UP ⫸Ó^ƒV\U³¶*¶¸«E±WrÅ[VÅU*¸mЏœUÀ⪪ÔÅU늯oXÇZøªúâ­ÅTËb­ÅUâª1UÀâ­×hœUa5ÅV0Å_ÿÕö[.*¦F*ÑÅTÉÅV–Å[SжN*îX«UÅZ;â«ÅZÅ[ ж]Ël6*º¸«®*â1V±U¤â­WuqWUÃ]ÓhlUIŽ*·®*µŽ*¤qWã8¸ªª­qUEZb«éж£T«˜â«+Š´N*·¾*½z⪣lUv*ìUØ«uÅU⪱Vùb«IÅV⫹mŠ­'[_ UÃUCŠªƒ\U½†*Ø$â®;⮥1U¤WÿÖösbªmЍ±ÅTÎ*³¾*¹N*¸œUmqWWlUÕªÒqU¤â­Wv*îXªðØ«|±UêØªâqU¤ŒU¬Un*ØÅ[¥qVÀ¦*Ñ8ªÚÓZت‘ÅZ銬lUoUøÖ©Šªªb«éЏ UÃ]\UÇYLUÇYßTSŠª\UU°1VŽ*Ö*½N*¿v*ìUªâ­V˜«U®*ኮª¢ŒUx4ÅWWv*ØÅWvÅZÅ_ÿ×öa8ª›UHŠâ«ÅVS|U¼U±Š¸ŒU£Š´qU…±U…±V¹b®/Š»•qUÊqULUp4Å[劺¸«Å\EqW UP Ui銭8ªÓŠ­8ªÃŠ­#Xkж1Wãb튯\)Š® ЏеLUi4ÅVòÅV–ÅZ⪊1TJb«ñU¤â«N*ìU±¶*¼UÜ©ŠµÊ¸«U¦*Ñ5Å[«`â««Š® Š®åŠ¸6*¿•qW¦*»–*×>Ø«ÿÐö“h=qWrÅ]×ZF*´â­ŒU¼UiÅV1ÅTY±U„œUilUÁ«Š®ÅU⪀⫱WrÅ]Zâ­ŒUpÅWНhŠâ«¦*ÓbªgYŠ»XF*êS~4^§T«Ž*´œUcbªF£ZN*¹zâªè1Ue4ÅWœUf*ìUØ«b¿F*ÝiŠ­-\U¡Š¶wÅZ銶o®øªê⮘«u®*Ø8ªðqWrÅZ-Š­/LUÿÑõíqWŠ®¸ªñжÔÅTÈÅZÅZ®*ÑlUEÛQ'j¸ªÃ\Ur⪘ªå8ª 8ªàqWb­Š¯\*¨£]Š­ÅVœUaªÂ1U¥qU¸«tÅ]Jâ¯Ær)Šº»â­†ÅUb««¶*´â«*±†*·Ž*¸ UYN*ª»â«»b®\˜«Šâ®ªÖªÚ}Ø«ºb®®*`b«€Å]Š»®*ßLU®X«a±WrªÂøªÂø«ÿÒõÕiŠ´[¾*Ú¶*ª]QŠ­'lUa5ÅV“Š©–ÅT™±U˜«±V‡¾*ßLUuqUà⫃b­†ÅWƒŠ¯\*½qUPqW1ÅVÓ¾*Õ1VŽ*´®*´®*·Ž*×UºS~3\U®8«TÅ[ªîX«u®*Ñ«TÅ]LUr¦*¿1UÃlUx8ª¢ UŠ­lUn*ÑÅZ¥1VˆÅVÓ\1UÃou1U¤ïеZâ­b­Uc51U2õÅZ¯Ž*ÿÿÓõ·,Uª×^£^6ÅWƒŠ´ÇY\Uc6*¤ÇSlU¡Š·Š¸â­Wn´Å\\\*¨*¼Нª¢UPb­ŸU±Óu1U´¦*´œUn*µ1U¼±Vúâ¯Æšb«NتÌUÀb­qW.*¸ŒUÀb«‚⪊´Å[#j˜ªõª²íжN*´ŒU¢7Å]¶*´ŒUiÛv*ìUºb­Ö˜«u®*¤Ûb­\Uq¦*´‘Ѝ¹ÅTw®*ÝqWÿÔõŸSŠ®˜ª 8«dâ«yÓkqU¥ñV«\Uk Um1V¸÷ÅZ;b«N*àqWŠ­ÅWÅWƒŠªŠª)ÅU*¼b«Ãâ«®*¿v*´â«*¶¸ªÓŠ­¦*ØëŠ¿;b­®*´¦*Ø\U¾«¸SoŽ*สð1UÔÅZ¥N*¸.*¹F*¼b­ÓqªÓеLU¢)Š©œUÃ_LUØ«G[\Ukâ«kLUűU«Š´Øª‘ÅV“Š¿ÿÕõžÃ\*ÝiŠ´[[\Ui4Å\ qUÀâ®ëŠº˜«©ÛXÃXF*°šb®­qV‰Å\1Uà⪊qU@ÔÅW«â«Ãb«ÅU⫹b­†Å\HÅTÉÅVœU¬UØ«c~6b­Ó|UÔÅ[\q\U ¸«t¦*¸ UºU°¸ªà¸«©LUÕ¦*ÝqWñV©\UÜqU¤b«J⮦*ìUÇSfÅVrÅV“еËhœU®˜«Dâ«XqWÿÖõ‰Å[q8ªÒØ«@â®&¸«clUºâ«×\F*¶˜ªÓŠ©¶*¤ØªÑзж*¿\ 1Vë^˜ªõ'^TVÛTSН&˜«UÅ\[ZN*êâ­b®Å[«ñ¨ñUã^]Ç\ƒhŠâ®hŒUzŒUwUp\Uu1U¥qU¥N*Õ)ж*¸ b­Un*ØZâ­ÅVœUMÍ1U'YSеZâ­U qV‰8««Šº„â«Å_ÿ×õ¡\UaÅV“Š´qU£n´8«u®*¸tÅWLUxjâ®'YLUc UM†*²˜«tÅ]ж*»\1Uã\:b«ÔÓVSжN*¶¸««\U¼UØ«`W\oŽ*üi Н LUUqUàb®#kŽ*´×¶*à1Uàb«ÅWŒUx«¸â«Jâ« â®n˜«EkŠ´]LU£Š©6*¤Â¸ª›.*¦Tâ­ÅZ#[MñV‰Å]LU¼Uk â¯ÿÐõ±ÛXqU„b«O†*à1WÅZ˜«‰Å\ ÅU]\UÕ®*°ŒUM±U„â®hñW Ux8ª¢âª€b­LU°qUêqUØ«±UÀb«¸â­ñ¦*¸ Ux\Uw UøÖq\U°)Š®lšb«k\UÄb­Ó\*¸.*¸bª‹Ó]LUÜqU¥qU„oŠº•8ªð»b«JâªgZzb«)\U¢˜ªÆ\UL©ÅZ㊴ˊ©0ÅVñûñVÂ⮥1U¤b¯ÿÑõÁªÂ)ЬlUm1WLU kЏŒULõÅ[QŠªV˜««\UÕÅ\N*¤Æ¸ªÌUo,UÄâ«—T^¸ª ÅWSpªáНÅ[¸ªð1Uàb«Ââ­…ÅUb«øâ¯ÆÀ¸«Šâ« â«zb­Џb««Š¶7ÅU¦*»oŽ*½F*ªqVøâ®+\UcG\U ”Å[¦*µ†*¢Â˜ªŸ\UÝ1V±V¸“Ь+еÇZËŠ©²bªL1VÅ\N*Ö*ÿÿÒõÑÅTÛYLUÄb«HÅZ¥1VºŒUoâ­LU¾¸«`b­LUa8ª™8ªÚ튭'pßUQŠª Up8ªõ8ªúâ­â®ÅWŒUUF*¼ Upª ªà1Uê1U@¸«ñ®”ÅVœUm1UŽ1U2qWН⪊)НöÅW®*¾˜«€ÅUU Š®ãŠ­+еÇh­1U&ª‹ UH­*êb­Óp\UÅvÅTÈÅV‘Š©6*¦ËŠ©•¡ÅV‘Џ UÿÓõÙ¦*°ŒUªb«iŠº˜ªÒµÅ\qZb«HÅ\*Þ*±ºbªdbªdb« F*Öç\1Uàâ«ÁÅWqUÊqU@qVÁÅ[®*¹N*ˆ\UPUpÅW⫆*¹qUQŠ¿±V©ŠµŠ¬a\UaCŠ»†*ت ªð1U@1UôÅ[¸ª¢­1UeªêmеCŠ´WhŠâªL›bª ˜ª™\U®8«a+Š®ãLUc UHÓS8ª™ÅV‘LUc-qU21V‡†*ÿÿÔõÖ*㊸.*ßU¢˜«\qWqÅ\R¸ªÒ˜ªÞ8«EqUŒ1U21UŒ1U„WkŽ*Ý1WtÅ[Uon¸ªàqUÃsŠª¨ÅUF*¨ 1UE8ªüUv*¸uÅWW~6Wlb­еLU¾8«Šâ­qÅWН ªàqU˾*ª*¨¢¸ª¨Z â­Ò£u)Š­;â­Š´Fت“-qU3*×§ŠµÆ˜«Xª“ÓQlULâ­b«Xbªxª› UaÅ_ÿÕõà«Db«—U Š´SkÓÅ]Ãw UiLUaLUoUc&ت‘\UM—YLU¢1V±VºŒUµÅWŒUuqV¦*¨7ÅUت¢šâª£\*¸51UPqUÀâ«ÁÅW Uø×*¸b«€ÅWShŒUm1VÆ*º˜«`WTQLUUF*¨6ÅW×\1WŠ»qVˆÅVÓqJâ«JbªdS®*±©Š©6ت“nqU6ªÂ1U‡ZqU„b«ÅTÙqWÿÖõý1V©Š¯UÅUÅ[¦*Ý*ÑhÓ[OUk UgUc.*¤ÃQaŠ©œUتÒ1V¸â­Ò˜«`â®®ø«`oŠª¦*¨*½qU@qUتኯSŠª ñUÃ\~6ñV銪(®*¼1W U¬Um1VÀÅ[ªõ늪¨ÅUb«±UÃlUuqUËŠ¯¦*´ŒU ¸«tÅV0ÅT˜WQm±U5ÅTÎØª™ÅV±U‡Zzâ­Ь#[NØ«ÿÙmoderngl-moderngl-773b733/examples/data/textures/cracks.jpg000066400000000000000000002230161470420062000237700ustar00rootroot00000000000000ÿØÿáîExifMM*bj(1"r2”‡i¨Ô ü€' ü€'Adobe Photoshop CC 2015 (Windows)2017:06:30 15:35:50   "*(2´HHÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?õ*n¦úÛu6ÚŸôlaiíís}ªk&Î’þM.è³ѱ®»V×uA¾”·ü9vÓ~Ïç¨ô®³Ñ¾õ?ùÇÒOPuàUU†‹YÚÛÇÒÃv;®ûSÐlõ?ëi)ÓIVÄΧ)ֱ춇ÛU-sK†ö}¯cØœ¯{?Áÿ9]ŠÊJsºßVgKÅcå‚ÛÞj¤Ù¸VfE°Ö×;ôXô]o§ôïôý ÿIbäz5=c*ìË(Æ-¯ªY^Nn5­³§Ò÷·íu&3!´õæ·!ù­£•ú.•èã×ë.Ï«tÖõ<â—šlÜËh½ 8×uNmø×µ®ö¿Òº¶?gøOæÕ6[õ®š®}øøYc‰¥”>ÊúöµÛ?NÛëmûýF7}̦Ïû¯þ )×lÀÜAtj@? Sª½?¨âõ=lrá´ì¶«Ymo9ÔäRÿÒSn×5Û_ùŸ¤þmêÒJRI$’”’I$¥$’I)J°ÙSëueí-dnlˆÞÍÁÍÜßꩤ’œO«–gUwPé7Ÿ_¥Y]8™Ž0÷5õ³$b^ÉsŸnc³íŸö¯Õÿ¹ä-µ›é_Óó2ò™[²1rÜÛî %Ö×c+¯Þ•?ái}ôþŠ¿Ö=o[ùÿZºé»“N^=YXîßMìm•º–¸niÚí®oö’RU ¯§§ß}ªšÁu–<†µ­¹ïwµ­SX̦ž»{²/;ð1-s0šÇ86ËÐËs^æìÜü{½j0¶{*}lõ,·ìßdJÿÐõU×ðîm´ºn&GS«hu×Õ¾ÑC¬öbìô¬¿#sVÇ~V->·øuw§ä]sn«!Õ?#×Ui¦CxmõK纫>Ïu.}{Óu 2I«ÆÓ~A;­ =ÕÔÑú[«­ÞÇY¼ÕS=OÑWeÞ¥•ÝüʼnO›ô.³õ†Ÿ¬yy.Ì¿¨ÙœÀ×ÏNÈ,e4¹ôU{1Ãñlª¼\Ëmý^§­OÛ=ÿ´}:lô®—oP»§ÑgRªº3\Ù¾ªœ\Àïä9ícýÍ÷lÿüßé?œFǤQC)u›ì;œãûïwï9%)$’IML®MöŒ†˜Z2é liqô_ê2Æ]Gé,ý ̲¿­W§‘éÜ ìÜÊ[n¹´hìOm†vû=k«ôÒ~°ïIŸ÷"Åy$”ÓoTÇ{2üG×ô½víl~kÛÒügnŸôÊØ €Au'YŸiéU‘‡U™6ÚÖebVÝî¤Xcí¸­gév2Ç~·‹úOÑ~ŸÑô®ûRS®’¯ƒŸŒ2q\]SœöKšêÜ[ÝEÌ}W6»k}vÖúÜ×±J»ñ2}Z«²»½2k½pv×~uVµ³µßÈzJL’I$¥$’I)K0tFc[fGNÈ»ë^ûÇÙeøîuŽu¶Nöúu5ÖÙêþ¥öGÿÂz£Zi$§ g4ÚìÞ©vGÚžçdÐѶ‚Ò[cU{²ïÄ«kv?ÓÊ÷ú×ݳí5­cCZÑ hÐ;ê¯RÈ»v?§ë½õÕW¬HfëÚ·;o½û7úž“þoÔ«ùÔ”ÿÿÑêqúgÖþÓ†-•u‹ýk³‹Ësl¨Øm>žX»#5Ô~†œ‹òé¯Òýø?Yntllº±†F{ì~nKZû™i­Æ7 &?º)²¼g>ÆúÛ?MüâÐI%)$’IJI$’R’I$”¤’I%9Ù=Ù“nF.]ØNÉ M¤Wm›mý-o}y>—è½zßüÛ*ú~>™_Òz{꦳NÑ¥cœËãéß[™{wÿ…ý'é¿Â«ˆwÚi¢Ëƒi­Žx­›w;hݱž£«¯{ÿá,cS™“ƒ‘ÓlûwJm— +ØKm`êbúîÙNu_™ïªœ¯ærÀebžî®kc,¯ *æu»j!Õ×ÞßJßNËÿu±›v_ý×õD³±~°õ|ŽŽ:ßì³^)km¦ÉÉu1ödÖÆ1Õ¹íg©èáÿ9‘þ–«,ôU^«õòŒn¨î›Žì³Q¿¨dÉ Å¬>ìf±Ùvz{[ë5µû=ZÿÂ~%=&n&~5yxv¶ü{D²ÖiƒµßÚcÛ±íüÇ£®êZe;'7>œ×õ‡Vü·R}3–涪pm镵ޛ^Êîÿ*Xýù…uåWW£]–u#ë'EwUÇé ÊcòòñþÕŽe¨ýWoóv:Öï²¶Wþ ¯U%:i$’JRæÙõøÝgö‹±°öØþŸEq º»±éζ˜ÿW'Ó¶œ¬oÐQöoæ==GغEõS©3¨të [‹™—u-2+s/´×Nï¢í¸Ï£ù¿Ñ$§ÿÒõF¹®hsHs\$¨ §\þìú³ŠÌ<ÖØô¸³5¯{ý ‹¡OPnCŸeuR×2–å×m¸ìgóÕácÔ·«²»XÛ+p}oÌ{L‚­s\>“RS$’U3º®c2¬Ûe­sª©­sìxac_éSS_e®ÝuMØÆÿ„IM´•.“Ö:gYÄûgL½¹4n,.h µãéWevY]žï¡cÔ”¤’I%)$’IJI$*rq¯u¢ÖZêk¸1ÁÅ8ÕfÓì³k¾ƒ’SFÖn›ÒÓê³ÓÇŠsFûme1c±ÙGMôk­öã~‚Šª³:ßSÓÿ­"ôŸÛvôÊ.§¦ãšƒ±ð¯]aúŒvN[-§Ñ¶úÿžým•ÜÿVËr?›[¶Y]UºË[sÞâ ¹Îqú-jÂèk§ÕÐY•‘}9¶:¼+l¹€}žw` Köúý™Õþ­cýOùïÓz•V”äu¯©øoéöõn¨ÊFMËòÙ‡Xe^•–ÕwSµ¾Ï¶_™oN¢Ú}koþrÛ>Ï]_¢ôðú÷Õv;ê¾^}–2œ,G}¯¥eRß^Ë®kqöleNÃÀv+°êô[¾Ê/«Ö¯ÓÅÆôòºn­Ôrþ±ç[õo¤mû YQë9û€"‹ýV¿ «+w©f]{2ëý +zê.¨U°R$Z3ìô¶û~šJy©y }ÖщKñ0ªÄÆ'ùdî«mŽ{kȺüwß[ØïÒÑOÚ6Ywó«¬X½_¡àŒ/µ`b6¬þž,ÉÀv;EoõaÏu?£ôýJsú<ªú³e[Üw>êÙ]˜îªË]î»ßé[gé½?^Ëm²úI)É«ë\ülÿÕ:Q¿[ùâÜÖß[;ͯô­¦ŸSý=8÷×mæ º«0ó¾´ä\js1®ý›˜=Q[ý+c¨EÊõ±™ú=ïelý7ß¿í–u[¸:à ðÜ%<¿ÔCNF.f{w­}¬¯+#%î]}5²¼›nÀsígM}w›1þÍ]ŸàÐz ¨Y]•9¹Ù´ ³ò}oxÚ^tãz­a ýþÍú†§ÓÈÿ µRR’I$”¤’Uìêe×…fML˹¥Õc¹í9£ó«¨ïn‰)°±ºŽ%]3##¥Šðó:ŽF=vÞc›®f=–±–K×croºšöúvå9U¾£ÖW^úËN'_§Ψ:v7 .¢øcèuÕÝf.f.g©µöÿƒg¥‹‘UØïeö߳ض0ú~uùtu.§•VA¦²q±ñë-¦·Ø"ÌRÛ.·"ïEßg¦ÿÕÿAfGè?XILÇÕž‚C½lržò íÊhȱÄ}÷ez¶;oæ{½Š†?Eè9[*œªi³+0fâVè´=”Þì6Û}?´.Ës,»Õª»½J+þgÒ¯¢U:‡LÇϹåÔäPwceU´[SŽŽuO{lg½¾Ëk±–Ss=—Vô”ÛIaôÞ±™ÔY™Ò­cð:ÖA—]écúimY¸eÎ-¿öRªn²»ÿÁÛùëb†ÜÚkmïm—mnƹÀ{ÞÊˬôÚç~g¨ô”‘$’IO>âî±õÒÛÜN‡cN;Ü\ën}^¾%Ÿf4:ïVœ›ýoS'ô4Uö´®`õ®‹ûO§åboÆê—äÖn;ƒ Ô×e3¨6[ö¬fâÕéUê2×Ñ‘f?£éz«y%?ÿÔõT’I%9[²ìÂú³Ôòª´ÓeXÖX¤:!i¥Ì¶·=ÞÏYýóÊ·Mú¿‹•‡MýK#)۾ыnmÙ!À˜ô2íõ^~6ßð¥_àý?Ò[ê¨}—ë/éu1Öá‹Xrr‹ê ǵ—?¿_s2Þûiô-ô껟Óú¶ý¢¯Am¤¥$’I)I$¨u®·Óº™ýFÑ]U‚CF¯yàégç½É)­õƒë?G«euœÞ§cAÅéµn·XÜÆÚöVƶÛ_g§üÝ7£X˜ßR®ëxÕäýk¶×ÜüŸ¶;z1Á­Æf=Ù8Õn½ž…5G~6ÿÏý"×é=¦ä㞣”áÕíê-67/*¦î÷6+Ħ·0;ìöÿGýû²=Oçì[‰)Ìé?Wz_HÃɬ³2ëoµ“nÑì¯ÓÙéÖÊÃj«gø6!ÑÐ¯ÂÆû/Nê7ãÐÊ›M5ãNF6UnöØÏðدgý¨®½þ•¨6ôVáz}FœËŽNIu™™:—Õ§«%…Þ…-óßiªÐ]UV~“¯²Ø^½Ñíêþ¶ îÂê”5ßfÊ® v5¯s-ýZïÏfÇ쵕dlõ(bÌë96u/²`f7©ô«xέõ€lÓ«ëñŸé\çíýeõ~µö?Oí¤ôÒžƒ-¹¸8ùŒÜš™s@; XÑ`÷¥ô•…ÊZ:çÕ§Q`º¾¥Ô3›UÔŠŽÉk›ö[×Ée^¾{k}ŒmL¢ÌŒË¿E]–£bßõÃ'«äã¿# bWH4ú.È®Áh±ÿlªÆß‡‘S½JŸö{¿Ñz¿ž’˜ãuŒ>·õ„ãO#£d=¬±Ÿj°úo«&¶bÖë?Q±¶UoÚ]g¿g§öjï£Ö¯§Y7 aôþ¡ÔÁuÙÝD°ä^ý ÅlmUÕ[+k]~Ýÿ¾ÿð¶YìZi)ÿÕõT¼º±)7[$KXÆÜ÷¼ìªª÷·Ô¶Çlb2ÊúÆ-oOfUVŽõ^ç6ìkƒmõ˃¶c2·ºÜ—×ú_B»=4”ÝéØöbôü\kK ´S]o5¬.kZÇzlüÚ÷b°’I)I$’JRåGEë}_ëOüä§#êþ3·ôì]oѧ*Æ9»ý˜¶ÝNE7»ÐûGé)§ü*ê’IJI$’R’I$”¤’I%)Që˜Ùy]+"¬-Ÿl b›'hº·6ürèðÕ±^I%8o¨`çôx«íØW»Ñ· 4úï±ÇЫ–—ÕöLÚ3}7ÙmžüO³ÙþôÔÒéy×ô`Ì\O«–tþ‹öwåz¦ÊŬôÃ}o¶°½õý¢Æ¹žŸ«ë¾ºÿIüݵÑÑ~ÌéÿknoÙÙö–’E±®ç7ÒuŸñ®«ô^¯óž—èþ‚Ïúå‘]Vz†ö:Ãu.¢º˜`½öþ†ªf[íµïØÿðŸè¿K±%; ÈÇÇDê¾K²ðqòßSñÝ‘S-4X!ì/h¥`ÿI^í¯VSÿÖõT<ŠuTךÝcÑctsIw·ùMDI%4:޳¥c +²«)o¡c-w¨ðúIƳußá÷>­Ì¿ü;?J«ß—GUÍý™‡–àÜpçæÛŠñ¹iôéĶÖnu:Ç:ÿOéþ­é¿ôZwHkìµÕedã3 ÍÕTðN›Ëc,·Õ`Øÿ²Yþ–¿O#ôÊ,½UKjû?L£µý¥ÖUM§mT×xÈxº·5Œ½¾¯©³õ¡JJk¾Ÿ­ôâèÉÁÌȬ–äUe>£`7ôÿg²ÖWwÒ·Ö¦¯JÏæ¾Éüåvð:½W;èÇêt·uøEÒàÙ õès…iÃ{ú,¦3þïC'ÕÇ®úï7¥?ëV]¹4aáŠëq{ÚͶ~бö‡ýäãcQuw7õ;1ÿî݉)ÜU¯ê=?"œ\Œš©ÈÉ1KÞÖ¾Â?ÑVãºÏì¦Âêx9ûÆ%Í´×·x]›]¢¶?Eoóv~b®Ü“›ÕÇV™9x-v# ‡Š\Nûöÿ£És\ÊìüÿOôá-IN’I$’”’I$¥$‡}ôcÔnȱ”ÔØÝeŽ h“µ²ç{}ÎvÕŸ_§Æý£.¬W´–æš‹ª~m¬©ÏÌÇþ¾N-4ÿÂ$§Q% nªú™u/mµZÐúìakšá¹cÛísÕ4”¥õ¾–]õ_©‡ 5ãYs {éi¥ÛívÛªbØ\Èê+ëT¿¤?>ŸKÓ]Ý(m6^ê¨ï]ïöÙ‹½Ÿ¤ÅÄßìgë·þšü ’žŽ¦½•1–<Úö´X@ÄsËYµÝü•4’IOÿ×õT’I%)VêW6ŽŸ“sÈkj©ï.$66´ºw9¶5¿öÝŠÊÌúÉ[®èyt×üõ¬ôñõÛúg–³Ýù¿¬º¤”Æ®›Õ²0qëêEìÈ­¬u¶b5´—XÖòíþ»\ÏSôžžÏJßô~‡èußQú}Y¸Ýcõ|0&܇HÉ2\÷g;Ó³ôïÞïK*š¿Uý§OÙñêÆ]2I)Ë«©[Õ±z†S(©”ã_KªcÜ÷‡ÜìK}¶ºº™eª?üàÖ‰kÍÛ¡€}5Ÿå:~öTÕ|ìÊðq-˱®{jlŠÙïqöÕE-qnûï°²škÝúK^’› ,£õ†Ê2ê§,;Ô8ž˜v>Òú¥–ÿJÜÝÍýv§×úVz¿côTNìܼŒGÑ•Ò-u–VæÙŽçQe/ÖXÏYÖíuÞïç©®ÇÕÿi¿Á¤¦ÞRéýJ“OÉ«.–¸Öë){lhpúLÝYw»Üªõî·Ò°2lõ©Ì¡öbãZðm€F¶U¸[o«vÚ¶ÕïzÍé¿Rp0Í9m}˜™Á¯bµõRâ÷úÌ«Òüúpÿ£âooôjêªïæëôöqºOOÅ{í®–›í«eö~’×<Ö½÷Û¾ßѱÞ>ïÐSú}:’R^[mnVm÷u C«~A•4û>%M«—·ßúGퟤôß“±7XúÅÒú=ì« ßlÇ¡¦Û]é7Ö¿mUýÓ_ó×[éÑG³×¶µ¦¸|ß©¸µu×àt‚10zÕ6¿¬ã–4×èײªþÂZÖ]’ë²ö~—ìÕÿ=e?¢¯ô§_;+ tÆÕÔ±r‰ˆ\ÓœÇWkYF÷z6ÜÀiÊm8ØÆŸYÿe{êÙg«ì¯í ßTúÅGO66¼\ž êifE¬Ã`±Á—Yö|m¬sëõ]{™{ÿE¿ôX־ݟ¡õr>¯t7bfbTÌüì³ÓYéå\ëœ1 ™Spjéôâ5µã\Ì}¯½ö1žµ9,ýjû¯³ô{5ô¶ô†VÎ…‡C+»%®ÍcœæIÀ±ïÇtYïÆý£üÇÙ«û5è’R­nOS¹¸Ù§¦ì/¿Õs?LâvWˆújuÎv6Íöå2ßGÔý?驳.”l~…Ñ1l®Ì^Ÿ‹E”’j}tÖÂÂAk½71Ù¹®wÑW’IJI$’SÿÐô>±ôªâ½ï9OV­õäØ]í¯ÒÅÈm6úos]úÿU¯e¾­Õú6ì%mëáþ¥¯Ä-xƒŒÖØ=3ÙÃ,¼ý£gþÆõà?Âè$’š"¾²úFìŒz­$îÛKÞ?šÇ:ú·=¿é_ýeWÿ›¸ï¾«ïÊɾÆÜÆäº¶‹\ÇÔ×åQ[†×ú¯ªŸZïç*gú?[í8éLze©bœ¬Í½-·€ì\V3}õ´€éͳ$z~³¿î31«ô?ÓYþÍ}†Ün¾üŒ³¹¶5—Ø][^Ó½¶2†ztîßúFû?Dö3Ðô–‚I)I$’JRI$’”«åàãf06ö™n¬{êìlèïNú]ÕîüïNÅa$”‹†cãVÚi¬C+` hèÖ¬Û.Îê™`dŒJ0œju¡­´Ûxhsê{wo«~Û¶?6ûÿš¿ª=LÝuÍýj§?;©t¼wä;&O6º-ô.kju}CÆý<œzÞúÝWóÙ_ªþ“õoJÔ¥ñ>µ |œí”âߊû‹*ªû¬¥îcó=Jj}léY4·Ö»"¼{/ÿÏ}\šAiÔV?Aè?Ÿ¶c½×œì\jís¯vMne,¤êm´7}onCþƒ*¦Ï§èT›+¢õì ~¡f7NxYYýj§0³e¹ýšÍŸ¤ûO¯wó´ÿ5{>È”—3ë=V]M½S6‰ÇÅlµ®ŸNü» xxöÿÀYÚÑÑb[>¯ä9•U˜Çe<4ý²ü†—sSñ*õ/môþÓO§êcl±÷úu«+§Ž‚ÌAkïÚç½Ö?h%Ö=÷¿kkk]m}›)©ŸÍS²µh8:¤§ÿÙÿí%ÂPhotoshop 3.08BIMZ%Ga8BIM%'®!Z‡%´IìØÃôÑ»k¬8BIM:å printOutputPstSboolInteenumInteClrmprintSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oàGrn doub@oàBl doub@oàBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMíHH8BIM&?€8BIM 8BIM8BIMó 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM@@8BIM8BIMAcracksnullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?ð8BIM8BIM Р à,´ÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?õ*n¦úÛu6ÚŸôlaiíís}ªk&Î’þM.è³ѱ®»V×uA¾”·ü9vÓ~Ïç¨ô®³Ñ¾õ?ùÇÒOPuàUU†‹YÚÛÇÒÃv;®ûSÐlõ?ëi)ÓIVÄΧ)ֱ춇ÛU-sK†ö}¯cØœ¯{?Áÿ9]ŠÊJsºßVgKÅcå‚ÛÞj¤Ù¸VfE°Ö×;ôXô]o§ôïôý ÿIbäz5=c*ìË(Æ-¯ªY^Nn5­³§Ò÷·íu&3!´õæ·!ù­£•ú.•èã×ë.Ï«tÖõ<â—šlÜËh½ 8×uNmø×µ®ö¿Òº¶?gøOæÕ6[õ®š®}øøYc‰¥”>ÊúöµÛ?NÛëmûýF7}̦Ïû¯þ )×lÀÜAtj@? Sª½?¨âõ=lrá´ì¶«Ymo9ÔäRÿÒSn×5Û_ùŸ¤þmêÒJRI$’”’I$¥$’I)J°ÙSëueí-dnlˆÞÍÁÍÜßꩤ’œO«–gUwPé7Ÿ_¥Y]8™Ž0÷5õ³$b^ÉsŸnc³íŸö¯Õÿ¹ä-µ›é_Óó2ò™[²1rÜÛî %Ö×c+¯Þ•?ái}ôþŠ¿Ö=o[ùÿZºé»“N^=YXîßMìm•º–¸niÚí®oö’RU ¯§§ß}ªšÁu–<†µ­¹ïwµ­SX̦ž»{²/;ð1-s0šÇ86ËÐËs^æìÜü{½j0¶{*}lõ,·ìßdJÿÐõU×ðîm´ºn&GS«hu×Õ¾ÑC¬öbìô¬¿#sVÇ~V->·øuw§ä]sn«!Õ?#×Ui¦CxmõK纫>Ïu.}{Óu 2I«ÆÓ~A;­ =ÕÔÑú[«­ÞÇY¼ÕS=OÑWeÞ¥•ÝüʼnO›ô.³õ†Ÿ¬yy.Ì¿¨ÙœÀ×ÏNÈ,e4¹ôU{1Ãñlª¼\Ëmý^§­OÛ=ÿ´}:lô®—oP»§ÑgRªº3\Ù¾ªœ\Àïä9ícýÍ÷lÿüßé?œFǤQC)u›ì;œãûïwï9%)$’IML®MöŒ†˜Z2é liqô_ê2Æ]Gé,ý ̲¿­W§‘éÜ ìÜÊ[n¹´hìOm†vû=k«ôÒ~°ïIŸ÷"Åy$”ÓoTÇ{2üG×ô½víl~kÛÒügnŸôÊØ €Au'YŸiéU‘‡U™6ÚÖebVÝî¤Xcí¸­gév2Ç~·‹úOÑ~ŸÑô®ûRS®’¯ƒŸŒ2q\]SœöKšêÜ[ÝEÌ}W6»k}vÖúÜ×±J»ñ2}Z«²»½2k½pv×~uVµ³µßÈzJL’I$¥$’I)K0tFc[fGNÈ»ë^ûÇÙeøîuŽu¶Nöúu5ÖÙêþ¥öGÿÂz£Zi$§ g4ÚìÞ©vGÚžçdÐѶ‚Ò[cU{²ïÄ«kv?ÓÊ÷ú×ݳí5­cCZÑ hÐ;ê¯RÈ»v?§ë½õÕW¬HfëÚ·;o½û7úž“þoÔ«ùÔ”ÿÿÑêqúgÖþÓ†-•u‹ýk³‹Ësl¨Øm>žX»#5Ô~†œ‹òé¯Òýø?Yntllº±†F{ì~nKZû™i­Æ7 &?º)²¼g>ÆúÛ?MüâÐI%)$’IJI$’R’I$”¤’I%9Ù=Ù“nF.]ØNÉ M¤Wm›mý-o}y>—è½zßüÛ*ú~>™_Òz{꦳NÑ¥cœËãéß[™{wÿ…ý'é¿Â«ˆwÚi¢Ëƒi­Žx­›w;hݱž£«¯{ÿá,cS™“ƒ‘ÓlûwJm— +ØKm`êbúîÙNu_™ïªœ¯ærÀebžî®kc,¯ *æu»j!Õ×ÞßJßNËÿu±›v_ý×õD³±~°õ|ŽŽ:ßì³^)km¦ÉÉu1ödÖÆ1Õ¹íg©èáÿ9‘þ–«,ôU^«õòŒn¨î›Žì³Q¿¨dÉ Å¬>ìf±Ùvz{[ë5µû=ZÿÂ~%=&n&~5yxv¶ü{D²ÖiƒµßÚcÛ±íüÇ£®êZe;'7>œ×õ‡Vü·R}3–涪pm镵ޛ^Êîÿ*Xýù…uåWW£]–u#ë'EwUÇé ÊcòòñþÕŽe¨ýWoóv:Öï²¶Wþ ¯U%:i$’JRæÙõøÝgö‹±°öØþŸEq º»±éζ˜ÿW'Ó¶œ¬oÐQöoæ==GغEõS©3¨të [‹™—u-2+s/´×Nï¢í¸Ï£ù¿Ñ$§ÿÒõF¹®hsHs\$¨ §\þìú³ŠÌ<ÖØô¸³5¯{ý ‹¡OPnCŸeuR×2–å×m¸ìgóÕácÔ·«²»XÛ+p}oÌ{L‚­s\>“RS$’U3º®c2¬Ûe­sª©­sìxac_éSS_e®ÝuMØÆÿ„IM´•.“Ö:gYÄûgL½¹4n,.h µãéWevY]žï¡cÔ”¤’I%)$’IJI$*rq¯u¢ÖZêk¸1ÁÅ8ÕfÓì³k¾ƒ’SFÖn›ÒÓê³ÓÇŠsFûme1c±ÙGMôk­öã~‚Šª³:ßSÓÿ­"ôŸÛvôÊ.§¦ãšƒ±ð¯]aúŒvN[-§Ñ¶úÿžým•ÜÿVËr?›[¶Y]UºË[sÞâ ¹Îqú-jÂèk§ÕÐY•‘}9¶:¼+l¹€}žw` Köúý™Õþ­cýOùïÓz•V”äu¯©øoéöõn¨ÊFMËòÙ‡Xe^•–ÕwSµ¾Ï¶_™oN¢Ú}koþrÛ>Ï]_¢ôðú÷Õv;ê¾^}–2œ,G}¯¥eRß^Ë®kqöleNÃÀv+°êô[¾Ê/«Ö¯ÓÅÆôòºn­Ôrþ±ç[õo¤mû YQë9û€"‹ýV¿ «+w©f]{2ëý +zê.¨U°R$Z3ìô¶û~šJy©y }ÖщKñ0ªÄÆ'ùdî«mŽ{kȺüwß[ØïÒÑOÚ6Ywó«¬X½_¡àŒ/µ`b6¬þž,ÉÀv;EoõaÏu?£ôýJsú<ªú³e[Üw>êÙ]˜îªË]î»ßé[gé½?^Ëm²úI)É«ë\ülÿÕ:Q¿[ùâÜÖß[;ͯô­¦ŸSý=8÷×mæ º«0ó¾´ä\js1®ý›˜=Q[ý+c¨EÊõ±™ú=ïelý7ß¿í–u[¸:à ðÜ%<¿ÔCNF.f{w­}¬¯+#%î]}5²¼›nÀsígM}w›1þÍ]ŸàÐz ¨Y]•9¹Ù´ ³ò}oxÚ^tãz­a ýþÍú†§ÓÈÿ µRR’I$”¤’Uìêe×…fML˹¥Õc¹í9£ó«¨ïn‰)°±ºŽ%]3##¥Šðó:ŽF=vÞc›®f=–±–K×croºšöúvå9U¾£ÖW^úËN'_§Ψ:v7 .¢øcèuÕÝf.f.g©µöÿƒg¥‹‘UØïeö߳ض0ú~uùtu.§•VA¦²q±ñë-¦·Ø"ÌRÛ.·"ïEßg¦ÿÕÿAfGè?XILÇÕž‚C½lržò íÊhȱÄ}÷ez¶;oæ{½Š†?Eè9[*œªi³+0fâVè´=”Þì6Û}?´.Ës,»Õª»½J+þgÒ¯¢U:‡LÇϹåÔäPwceU´[SŽŽuO{lg½¾Ëk±–Ss=—Vô”ÛIaôÞ±™ÔY™Ò­cð:ÖA—]écúimY¸eÎ-¿öRªn²»ÿÁÛùëb†ÜÚkmïm—mnƹÀ{ÞÊˬôÚç~g¨ô”‘$’IO>âî±õÒÛÜN‡cN;Ü\ën}^¾%Ÿf4:ïVœ›ýoS'ô4Uö´®`õ®‹ûO§åboÆê—äÖn;ƒ Ô×e3¨6[ö¬fâÕéUê2×Ñ‘f?£éz«y%?ÿÔõT’I%9[²ìÂú³Ôòª´ÓeXÖX¤:!i¥Ì¶·=ÞÏYýóÊ·Mú¿‹•‡MýK#)۾ыnmÙ!À˜ô2íõ^~6ßð¥_àý?Ò[ê¨}—ë/éu1Öá‹Xrr‹ê ǵ—?¿_s2Þûiô-ô껟Óú¶ý¢¯Am¤¥$’I)I$¨u®·Óº™ýFÑ]U‚CF¯yàégç½É)­õƒë?G«euœÞ§cAÅéµn·XÜÆÚöVƶÛ_g§üÝ7£X˜ßR®ëxÕäýk¶×ÜüŸ¶;z1Á­Æf=Ù8Õn½ž…5G~6ÿÏý"×é=¦ä㞣”áÕíê-67/*¦î÷6+Ħ·0;ìöÿGýû²=Oçì[‰)Ìé?Wz_HÃɬ³2ëoµ“nÑì¯ÓÙéÖÊÃj«gø6!ÑÐ¯ÂÆû/Nê7ãÐÊ›M5ãNF6UnöØÏðدgý¨®½þ•¨6ôVáz}FœËŽNIu™™:—Õ§«%…Þ…-óßiªÐ]UV~“¯²Ø^½Ñíêþ¶ îÂê”5ßfÊ® v5¯s-ýZïÏfÇ쵕dlõ(bÌë96u/²`f7©ô«xέõ€lÓ«ëñŸé\çíýeõ~µö?Oí¤ôÒžƒ-¹¸8ùŒÜš™s@; XÑ`÷¥ô•…ÊZ:çÕ§Q`º¾¥Ô3›UÔŠŽÉk›ö[×Ée^¾{k}ŒmL¢ÌŒË¿E]–£bßõÃ'«äã¿# bWH4ú.È®Áh±ÿlªÆß‡‘S½JŸö{¿Ñz¿ž’˜ãuŒ>·õ„ãO#£d=¬±Ÿj°úo«&¶bÖë?Q±¶UoÚ]g¿g§öjï£Ö¯§Y7 aôþ¡ÔÁuÙÝD°ä^ý ÅlmUÕ[+k]~Ýÿ¾ÿð¶YìZi)ÿÕõT¼º±)7[$KXÆÜ÷¼ìªª÷·Ô¶Çlb2ÊúÆ-oOfUVŽõ^ç6ìkƒmõ˃¶c2·ºÜ—×ú_B»=4”ÝéØöbôü\kK ´S]o5¬.kZÇzlüÚ÷b°’I)I$’JRåGEë}_ëOüä§#êþ3·ôì]oѧ*Æ9»ý˜¶ÝNE7»ÐûGé)§ü*ê’IJI$’R’I$”¤’I%)Që˜Ùy]+"¬-Ÿl b›'hº·6ürèðÕ±^I%8o¨`çôx«íØW»Ñ· 4úï±ÇЫ–—ÕöLÚ3}7ÙmžüO³ÙþôÔÒéy×ô`Ì\O«–tþ‹öwåz¦ÊŬôÃ}o¶°½õý¢Æ¹žŸ«ë¾ºÿIüݵÑÑ~ÌéÿknoÙÙö–’E±®ç7ÒuŸñ®«ô^¯óž—èþ‚Ïúå‘]Vz†ö:Ãu.¢º˜`½öþ†ªf[íµïØÿðŸè¿K±%; ÈÇÇDê¾K²ðqòßSñÝ‘S-4X!ì/h¥`ÿI^í¯VSÿÖõT<ŠuTךÝcÑctsIw·ùMDI%4:޳¥c +²«)o¡c-w¨ðúIƳußá÷>­Ì¿ü;?J«ß—GUÍý™‡–àÜpçæÛŠñ¹iôéĶÖnu:Ç:ÿOéþ­é¿ôZwHkìµÕedã3 ÍÕTðN›Ëc,·Õ`Øÿ²Yþ–¿O#ôÊ,½UKjû?L£µý¥ÖUM§mT×xÈxº·5Œ½¾¯©³õ¡JJk¾Ÿ­ôâèÉÁÌȬ–äUe>£`7ôÿg²ÖWwÒ·Ö¦¯JÏæ¾Éüåvð:½W;èÇêt·uøEÒàÙ õès…iÃ{ú,¦3þïC'ÕÇ®úï7¥?ëV]¹4aáŠëq{ÚͶ~бö‡ýäãcQuw7õ;1ÿî݉)ÜU¯ê=?"œ\Œš©ÈÉ1KÞÖ¾Â?ÑVãºÏì¦Âêx9ûÆ%Í´×·x]›]¢¶?Eoóv~b®Ü“›ÕÇV™9x-v# ‡Š\Nûöÿ£És\ÊìüÿOôá-IN’I$’”’I$¥$‡}ôcÔnȱ”ÔØÝeŽ h“µ²ç{}ÎvÕŸ_§Æý£.¬W´–æš‹ª~m¬©ÏÌÇþ¾N-4ÿÂ$§Q% nªú™u/mµZÐúìakšá¹cÛísÕ4”¥õ¾–]õ_©‡ 5ãYs {éi¥ÛívÛªbØ\Èê+ëT¿¤?>ŸKÓ]Ý(m6^ê¨ï]ïöÙ‹½Ÿ¤ÅÄßìgë·þšü ’žŽ¦½•1–<Úö´X@ÄsËYµÝü•4’IOÿ×õT’I%)VêW6ŽŸ“sÈkj©ï.$66´ºw9¶5¿öÝŠÊÌúÉ[®èyt×üõ¬ôñõÛúg–³Ýù¿¬º¤”Æ®›Õ²0qëêEìÈ­¬u¶b5´—XÖòíþ»\ÏSôžžÏJßô~‡èußQú}Y¸Ýcõ|0&܇HÉ2\÷g;Ó³ôïÞïK*š¿Uý§OÙñêÆ]2I)Ë«©[Õ±z†S(©”ã_KªcÜ÷‡ÜìK}¶ºº™eª?üàÖ‰kÍÛ¡€}5Ÿå:~öTÕ|ìÊðq-˱®{jlŠÙïqöÕE-qnûï°²škÝúK^’› ,£õ†Ê2ê§,;Ô8ž˜v>Òú¥–ÿJÜÝÍýv§×úVz¿côTNìܼŒGÑ•Ò-u–VæÙŽçQe/ÖXÏYÖíuÞïç©®ÇÕÿi¿Á¤¦ÞRéýJ“OÉ«.–¸Öë){lhpúLÝYw»Üªõî·Ò°2lõ©Ì¡öbãZðm€F¶U¸[o«vÚ¶ÕïzÍé¿Rp0Í9m}˜™Á¯bµõRâ÷úÌ«Òüúpÿ£âooôjêªïæëôöqºOOÅ{í®–›í«eö~’×<Ö½÷Û¾ßѱÞ>ïÐSú}:’R^[mnVm÷u C«~A•4û>%M«—·ßúGퟤôß“±7XúÅÒú=ì« ßlÇ¡¦Û]é7Ö¿mUýÓ_ó×[éÑG³×¶µ¦¸|ß©¸µu×àt‚10zÕ6¿¬ã–4×èײªþÂZÖ]’ë²ö~—ìÕÿ=e?¢¯ô§_;+ tÆÕÔ±r‰ˆ\ÓœÇWkYF÷z6ÜÀiÊm8ØÆŸYÿe{êÙg«ì¯í ßTúÅGO66¼\ž êifE¬Ã`±Á—Yö|m¬sëõ]{™{ÿE¿ôX־ݟ¡õr>¯t7bfbTÌüì³ÓYéå\ëœ1 ™Spjéôâ5µã\Ì}¯½ö1žµ9,ýjû¯³ô{5ô¶ô†VÎ…‡C+»%®ÍcœæIÀ±ïÇtYïÆý£üÇÙ«û5è’R­nOS¹¸Ù§¦ì/¿Õs?LâvWˆújuÎv6Íöå2ßGÔý?驳.”l~…Ñ1l®Ì^Ÿ‹E”’j}tÖÂÂAk½71Ù¹®wÑW’IJI$’SÿÐô>±ôªâ½ï9OV­õäØ]í¯ÒÅÈm6úos]úÿU¯e¾­Õú6ì%mëáþ¥¯Ä-xƒŒÖØ=3ÙÃ,¼ý£gþÆõà?Âè$’š"¾²úFìŒz­$îÛKÞ?šÇ:ú·=¿é_ýeWÿ›¸ï¾«ïÊɾÆÜÆäº¶‹\ÇÔ×åQ[†×ú¯ªŸZïç*gú?[í8éLze©bœ¬Í½-·€ì\V3}õ´€éͳ$z~³¿î31«ô?ÓYþÍ}†Ün¾üŒ³¹¶5—Ø][^Ó½¶2†ztîßúFû?Dö3Ðô–‚I)I$’JRI$’”«åàãf06ö™n¬{êìlèïNú]ÕîüïNÅa$”‹†cãVÚi¬C+` hèÖ¬Û.Îê™`dŒJ0œju¡­´Ûxhsê{wo«~Û¶?6ûÿš¿ª=LÝuÍýj§?;©t¼wä;&O6º-ô.kju}CÆý<œzÞúÝWóÙ_ªþ“õoJÔ¥ñ>µ |œí”âߊû‹*ªû¬¥îcó=Jj}léY4·Ö»"¼{/ÿÏ}\šAiÔV?Aè?Ÿ¶c½×œì\jís¯vMne,¤êm´7}onCþƒ*¦Ï§èT›+¢õì ~¡f7NxYYýj§0³e¹ýšÍŸ¤ûO¯wó´ÿ5{>È”—3ë=V]M½S6‰ÇÅlµ®ŸNü» xxöÿÀYÚÑÑb[>¯ä9•U˜Çe<4ý²ü†—sSñ*õ/môþÓO§êcl±÷úu«+§Ž‚ÌAkïÚç½Ö?h%Ö=÷¿kkk]m}›)©ŸÍS²µh8:¤§ÿÙ8BIM!]Adobe PhotoshopAdobe Photoshop CC 20158BIMÿáÈhttp://ns.adobe.com/xap/1.0/ ÿâ 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@ÿÛ„       ÿÀÿÝ@ÿÄ¢  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ŠšªºÊÚêúÿÚ ?÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»|±ÿ9äÏ1k ù]ç}óOЬ|¡æ[FÕ<áxÁ§ÑR½²‚ÁıÚÍoÊp²‚õH8”ƒëMЦ‘ŸÍÏæšç?35Ý?Ìžvòä·hþqÓ¾¯k­|d’Ö[hÊ*^Û,„I áD7 'ÅjÓÜ*Ëõo¿(¿4|Ñù™­êñCù=ç8´˜õ×¼¹jéc‹†™н8b²ž¶‚âZÍ?Ö= %ô¬¡’HU{…ýŽ©cm©é—1^é·±Gsgym"ÍÐL¡ã’9•de!•”цãDb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU/×u½/Ë:§æMnªèº=¤ú†£sÁäô­m#i¥~«;qE'Š«1ý‘\UòÇäWüägåußææ»þÓü©ùu®ëqëRÕµX¿BÁ©ßÅcii¬²Ï;$Ë¥­Ð‰¸]°»iæJ³¬J¾·Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÐ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]м_ó[ókó'AóS~^~Q~]Kço6~„:ÝÞ¡s{›¥iéu4¶¶~£LTLï,³[ú¶îÑÇû§oÞ´ ¾0üúÿœÉüÅÖü¥æŸÈísBÓô¿6A¨]h~gó.‡yv¶“Ácw$sEio"¬±¤Â5ŠF–iD°™•¡_Z‘*ôùÂMþqóÍŸ•–žWó$V©çé¼Áu¨^hóØÉqwuie,Vïmh[Ô¹´†ÎâVE$X®šòXÂðGU^Áù‰ÿ9úkóçþq÷ò›ÊvŸ˜~jº´»´ó5Æ¡?.é<”BãP ¿XŠ.t¼‰Z=ÊY£½Ü j½òòïÌ_••Ú’<Ñæ)|Ë«é±q{©(`¶CN6v¬QekxÁLYéöD0úVðªôŒUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»y?üäŸå|ß›ÿ“^dò~Ÿ Rù„Äš‡—̱E#FÅÄÑÇÌñ¬O:«Ú™¹¯¦“¹nIÉWÎ1~yþd:Íÿ8ßùåe˜>^ÓÚæ jçP‚kÛÄXí¦‚ÖEˆÈ—Þg™§Žbí Uš6•f™•}oŠ»v*ìUØ«±Wb®Å]Š»v*ÿÿÑ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^oùùù•}ùAùGæoÌ=2Æ-GRÒ"lí.Y’=íÔ6q¼œ>&HÚa#"”2à$—5UàSÿœŒü’üÐt;¯8ꆹù©ù…¢ZyÇÏ:ÄE}zon´ä»µµ¹uhV*ÿWÓ­"Q ´&7”A¿Y•VAùçoùÇùÉÍÍ6òyDÑ<íªÅqœ´6·¶úýÝ•ÍÂÍõ¤¾†y§F˜E#Ê8Mov±»qo«O*¯òWüû—ÍV–'S×ÿ0bòÿ¬õ.tkÏ/Ã5ìAn¥ýORV°™n Å6Œ¨„DOïZaõu_GÿÎ:Î:_~D_yËSÔüå/œµ/9KgsyysfÖ“‰íéä’Iêé¥yZè³35Zž\¶U﫱Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ãùÃï,h™¿˜˜ÿó“÷—Ww÷÷þ`Ôô,Ùj‘Ç$Ö62, )‘šfYVÚhí#XRX¹K«éªû?v*ìUØ«±Wb®Å]Š»v*—êºî‡¡}KôÞ§i¦þ’»‹MÓ¾»¯q#èTš[@-î¥h¯&’PßWŠöÌÂ’#…_OØ~hk¶¶6×Þ|ü¾Öü¡b±FúÞ¯su¢ßéZs²Žm$¶Z„·ÝÑ®M¢$Qÿ¤\ý^–HÕz…ýŽ©cm©é—1^é·±Gsgym"ÍÐL¡ã’9•de!•”цãDb®Å]Š»v*ìUØ«±Wb®Å]Š¥úù›CÔü·­Áõ­X´ŸOÔm¹¼~­­Üm ©Î6W^HÄrVV²kоXü…6þI~zêŸóŒZÆ·ïåšh’ëÿ—PKH5I¯ ÒEÛ²´¯ÊKßXJ¼Ûêž¼1ÛÛÕ ¯£ü¹ùuä¯(ù‹Ì¾jòÖ™®ù¾X.|ÇqH©u=¨$†"Æ$re‘¤hÑ ®í$¼ÜòÅYF*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«åùÁ}WËhš:'’l®ãòeŸoï|¹¨ÉËc6—yQÚà ·ÕibŠÙd”zˆ“@ÏVÑWÕø«±Wb®Å]Š»v*ìUØ«Ïÿ:6t?ÉOËÍSÏÚÜ_[ú§4í-fŽÞkëë†ã´‡ç$…VGŽå•c“Ó㊼#ÎþB±>M»üðÿœ¹¸Óõ6Yhš¾‡ùr·Ë¦ynÎ{‹XÙ–ye—SœC'+•šb²°ú²?Ô­fU_ÿÓ÷ö*‡¿°±Õ,ntÍNÚ+Ý6ö)-¯,îcY š ”¤‘É‚¬Œ¤«+ 0Øâ¯Œ?ç4{ïùůÍ1~Iþeê’¦›çimnÿ.5–剨ÏmêÅ:''e‚öU’Ý»—ÿ9eùV¶:ä¾hÔⶸòĶñkÚ‡—cÔ|Ñåø’ýQíeU±°¿£I’úÔsB¨ê‰,г,þ~My¶k{M'ÎZ|Z•ܶðYiz£¾¨Ü=ôPÏl`³ÔVÞyRtž&‚Hãd›ŸîÙ±W¤b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯Ðt}'þqóó$h:M”Zgå'掠Ÿ£.-`¶Ò<äÐLò[¬2$N-õ-â[dŽY–¨>¯Gq ½ãv*ìUØ«±Wb®Å]аÿÌÍ/"~RhvþdüÂÕ¿Cè·Wi§Ásõ{›¾WRG$Êœ-b•ÅR'<ŠñøzÖ˜«ò¯–!üáóùÁùåém,ôIC~Zyc^°—OÕôg@c½¼¿…¦t{‹™ãW·VWK{{kKˆ \M/^ÑŠ¿ÿÔ÷ö*ìUƒþe~Rù+óZÆÆßÍV²®¥£Ê×~^×´ùä²Õt»ÖZ-Å¥ÌD2º°I·8ZH¢y#M(«°óÿ˜¼ç[o!~i¼Réô±ÛyÏqF-࿹ôÀ:f¨«û¨56*ÒBñ¬V·ã’ÛCo4VÅ^±Š±?ùÚ yuüÁ.…­ù‘ıÁ‘å>]WQ•å;‘tUEPÌÒJñ¦Ü9^8ÝW~UÿÎ@þhþsÃu®ù#ò¢+?"z·1é>eó˜?F¥è¶•cmí´ÛÙyÇ‘ORÝ9¡úËI ¬Ÿò÷óæßÌžoÊÿ?ùrïòûób;A¨EåÝFâ Ë[ëV2zmõ¹ôî¸Fœ¥PˆÈÞ²(“êׯ`Å]Š»v*ìUØ«±Wb©?š¼«åß;ùwQòŸ›4èµ_/j±/¬gƒ¥C ÊêÀbò˜u´Õìâ–6ÐõýwTÖtMI%hØÅr5oe·p#"«N/¿9b¼‡•¬ª¥þJüöÒ|ÃçSù[æí Pò/æ‚iðjK k k,©$eæýyk4±]¤%[“MÈY¥XnV^±Š»v*ìUØ«±Wƒþq˜|íù¹ùKùc›¨][èÚÜ^}×õ{¥ô4ÄÒ­o¿E%̦ÞHB^ÝE,{ÊKwE^SG"ª÷ŒUØ«ÿÕ÷ö*ìUØ«üÊüŸü¶üß±±Óÿ1´µ»}2VžÁÚYíg…ä^kY"”#€¼ãçÁÊFÌ¥£Bª¾h×4ŸùÈïùÆñFùå/ñ§å×všŸ–-og“W›EŽëÔ[ël¡’ é9ÜɈQ¦ŠÕ“Ôžk©QVaªþUÎYy·\²ó·ù•¥y_ë–æ.ù=¯â±o.É!–æöÒmAn}-Tó1E"ÛÆQ6[´ø‘•{ÿ‘¼›¡þ^yCEòO–âôt]Ò;+j¬i$ž˜øæ—ÑHÑ¥•ËK3„_RWwêØ«åùÊßÎ*þX~x~Lù¢YbÖî<¡/˜ÌzŸu j6jöVp#ÉbQÌR´Ð¤¾˜Ÿ‡Q½EUõ”üÉcç*è~nÓ#–-7_Óí5[8®B¬éô)\Ô®Þx}(ôöIõ bö¬’4WvqËo,„SòA')$j¦'üää'˜4¸5{Ì/ÃiqÏÓPÔ Ó.‡¦íçmzÐÌ›©ãÎ5ä´uª2¶*ô‹ ûRÆÛSÓ.b½ÓobŽæÎòÚEš  ™CÇ$r!*ÈÊC+)£ Æ*ˆÅR{?6yWQÕ›@ÓõÍ>ï]H¦¹}2 ¸e»ZÝ=”ÒQË„Žá eh›ãR¸ªqа4ùÏVÌVÞCòEœWþpš(oµ;‹õºNÒ4‹¡uwóxîíeôÝ£~ÂÌÅÕ•¨ve+×L1Wb®Å]Š»v*ìUØ«±Wb¯7ó÷åž³æ5h>~ò/˜âò´x¤Óo/åÒ­õh5-y¢º’Âéà›‡­4oÄo{ŽÜÑWh>ióî‡æÑåÌÛm>æÏY•"ò›t8^ÎÒòäZMu>Ÿsa=ÕÜð\F–³Î“ $µšÔ†ãŒ2ªôŒUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»CߨXê–7:f§mî›{–×–w1¬ÐMÊRHäÁVFRU•…lqW›ÝÿÎ8~B^êšv¯7åÇ—ÖïKõþ­|ö¯õ”¿Ö-¡T†â€~ïëËé7Çø±V>ß•Þoü¤Õ/<Éù'é?-ÝýjmKò›V¿6z:3#ÜFÚ ÞŒ«§Ê×,åàu6s}aªÖË @yÛþrËË–Ÿ^?˜^Aó¯—c³ô£‚êëM³šÆòê~ ¶Ö·¶·ÓZ¼¾“<ÄÕBA2rõ”Dʾgògäfÿ9 ÿ9yù“åæ·¢~Eêq6¹«4Éq§¾«{ªÛJë-ƒ”’áÖãŒW3B¨Œþ´i<x«Ú?-?-¿ç%¿$5O0ycËÏiçß(k\­<•¨y‹ÌwUòÍŽ”—È^Z>o뤰£Å§ª§(8³Ã W¿ùɺ§–Kê¾gÖÿľo×®ÍΡ«‹T±†+Xª¶–™â´¶BÆ8Þy˜Ï5ÍÃ?©s&*Ì1Wb®Å_ÿ×÷ö*ìUØ«±Wb¯˜?<¿ç t¿ÍÌ;oÍ,y¾ïÉ>oýÄš…Üï}êÝX¬iisVÏo,i©(å[„n«‹#Ê«Éü‡ù¯cçÌï4Áÿ9I­ùi´/Ëo-jÚ&«:ÜiÚ¿˜ì5+’u?I¹„#Ü x¥‚C^¿ïa‰ãêñ*ùÃÊ`ü®MÕ8ÿ3ï5?~wYkqYé~VÖ¯~±§^@ö#êwº˜ Åͼ«$Q\Q½;[iÒ8n9²¯GÖÿç!üÏçß(OùÑa¤ùSòóó7É×i,~l¶³…õ3_\…ÒÍ•Š^£òŠÊÂðÉ|¯-ë§úª@ެв7ùÇòþr«ÈZT·Z<°ÎT_Å,vš'•,æK›íUPÚÂ.îî-Żي+¹ ×K+XÞ4¹øeõU}¯ù%ùeÿ*sòÃBü¸ý)úkô/ÖÿÜŸÕþ§êýrò{¿î}Y¸ñõ¸xÕãËjÓz*ìUØ«±Wb®Å]Š»v*ìUتOæ-Øù³F—E¿’X¥¶»¶»¶*³Û^é÷ÞZ\Gê+¡xg†9UeI!rœfŽH‹£*ÃïÛó×@±¹ÔíÏ–¼óqR´ kkÏ)Ï#ª—Sä÷ºÄLìWÓXd†&OQî¢XøÈªþW]…–‡õoÊ~k‡Í6öž¦£åÝ7Ëzæ§ÃPŽ:Ëgo}ŠYÜR@bŽáf[iv‘e7 ‘úŠ#‚¬οóï¿É­OÊ¢ÓÉ‹¨hÞl°ÓçŠÆùõx/õD,ê"hn§ª¼¤qÛí$œSûµEY‡åOüáä—å­Š¶§£Eç_0ËŽóTó1]ÀK,^ ·²pÐDœã/e–á¹t8«ßÒÂÆ;éµ8í¢MJæ(­®/5ɳHñFòÉ’6šVE&Šd¯ÛlUŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅR5yW˾wòî£å?6iÑj¾^Õb0_XÎJ†!•Õ€xäB¯ªÉ+ª¶*ÅôßÉ éây—M‡U¶×¿Ñ¾¹¨&¿­ú×ÿQ’I-ÿH“z~½éú}sפmÿÞtHÕW†?1¼½þä´O8ÝùÂí~мÖ4½>ÆXßbÉw£iM¨hÊÍÔN‚HZyRæÝVAå8i~húÕ¼ÝéÚÖéSDÕ-ÞÒúÕ¥ä•j¤±3Ç,qÝ[<ös¼2ý^âaUb®Å]Š»v*ìUØ«±T¿FÖô¿0ZI¤Oõ‹Hnïtù$àñÒëLº–Êå)"©ø&†DåN-Ç’B­Š¦«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÑ÷²_ØÉ}6™ÌO©[EÍŚȦxà¹i)0y*HÐʨÄQŒrû Š¢1Wb®Å]б:þcù òâÄjzóŸ [¼SÏn—× ÷ h¡åГêÎêw ;’Ȫ¼AUåúv£ù“ùé«iRßy_Pü¸ü¤Ò5 -q¿N¬ æMvïJºŽæÖÙ¬©ú>Þ»Vwvi®¢[«˜ãšfU^ñŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Vç? C«jÖ~{òÚEcù™£D¶Ún¬ÒK]ißZŠæãL¼1sW·¹XÞ%ya¹ú“Êo-¡úÂJ¤þIüÞ»ÕµË$þcùVïò÷ó R´–ÿLÒ/®­uByf[ ûG1Í,1ˆå¸ÒãI¬rB¦lU꫱Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÒîþü‘òåÜ>EüÂü¶Ñ´ÿ(j^@Öô³¨jVVh^o-ÞË™ª­ôÎ~$ŽÒg¹šöçÖ–†Y=H½If ¾‡Å]Š»v*òtÑfó/üäDÞb¹¸ŠïBò–¢Óô»VµŠam¯ùŠæIodK¯µÂXÚY‡‡vú½ìoû´Ÿ÷ê½cv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]аÿÌËO,~ihvú'™ÅÜ£îÓTÑõ6îkí?T‚9#‚òÞXXRX}Vhù‡£jb¯ÿœ ü÷óæï’µ-yª9nõß$EcǘînDóêI%áˆÈ‚$*ðÅn‘´$¯9ýìÌ·%_Sâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«æcò^ÏÎ>\þjjú†«ùgå CKÒü³ä›kélôãwúË©î¡#fpÚ’´¤ë7÷‘IþޱÆUÿÓô·üå§™/¼«ÿ8çù©éñÅ-ÄúziN³†dk70éÓ0Êy¬WÑšÐ8RÊËU*½CÊzÅ÷˜|«¡ëúž—.‰©jº}¥õæsËײžæ–Ki9¤mÎ&crD5]Ñzb©Æ*ìU‹ùÿÍóy/˯©iúT¾`ó Ô±ØyË–²ÅΣ¨ÜG <Ä*¢¨yî%ø¾¯k ÷,¬¶*ˆò–?Âú\Ð\]~‘Öµ»S[Õ ~“]_]¿&!KHëHÚÖ9%™à³‚ÞßÕBd«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÅõùÆo%ˆµ_5y3]ó/µß0Ë{sæ[,jÒBšœúˆ4—^¥ÜAâ3ÌÖí DmÞV’..±4j¼ƒÍQóïüãæ•3µ>ùÃÍóštO_\×_TžÎîûÔ°‚YlëšÜKum"ˆb¸™ S?†ê¾·Ò5ÝÌíw êvš¥¢ú\§±ž;˜ÇÖ Šê*´LÃã†h¦OæŠXä_Ô⩆*Ãÿ0¼÷þ ÒÓôf‘wæ7ê@ò¶š+uy78â/$„¶´‰æëW³R etäZI!ŠEXþ‰ùµ«Ùép_þoù2ïòÒ6æ·z®¡©iZ†…ÜØCßZÜ—‹Õ@8Ésoo¬E²ÊÓIn³ªô ]ÐüÍ¥Á­ùoS´Ö4[®VÔtù㻵—ÓvøK 27VV¡Ù”¯\U0Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^?ÿ8ûæñöŸçÌ{;_«ùoÍžk»ºòÍÇ©Ïëš^—ac¢%ßXä‹Ö“O‘ý)cI#û?ñ‘ÕÿÔçÞKóïç—æ/ç—åÿüã÷žüÇi¬ÿʾó¯×¦¿™©q'•z®„"Y¸Åksè<ˆ²Í-Ã5Üû¶Wéþ*óÿÌÏÍ+Ë›¿)i±è×~dּݪ&ËCÒdƒô£F–³O%ÔPÜIy³Z”Ùykɺ\žŽ¯w{YÁp©-ºžYî®cHb·_[ãåÈ« üºò¯˜®5kŸÍ/Ì};O°üÅÖtøt”Ó4ð'M#F·º¸»†ÈݹfžàµÏúlÑzVÓxÒ5ïÊo0ʺÑl-ް-î¥}±mr%‚æ g½W^HÛ••=·‘d3;B«(·×¿ç,?!|»woæO/Åùë¡[Ê#Ò5]íìõûk(Lvñ Ëo©Í-ËÊ IX¾³4L.ææTôÝUx?•¼×ùÕùuù÷åßÏOùÈÿ'ñ°ó×¥åÝTÔn-ìì|¹£< ýa¬¾¯lÓBàÛÏ"=ÛK)“ëLU}1ùeùá¤ÿÎFùËÏÿ–×~FÓõ?˯+Jð\ëóßÚëv¤ñß±"Íí²N¶ò\Ç"¼É¤¿^6Å^ÿaac¥ØÛiše´VZm”QÛYÙÛF°Á ¨HãŽ4U@UUQ°ÅQ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]ФöþSò­Ÿ˜®üÝi¡éðy²þ!m}¯Ei j3À¢0#–åPJèQ€¬Ä~í?•qTãv*ìUØ«±Wƒþ~~Zþhê¾bò·æ¿ä}öŸeùƒå(¯m¯´ëõô“\Ò®L,&™h±3ãW¸k„¸µ–5‘•zå懗8|…¤ùç˳DÉ{.§c¦g°ÔU®,å,‘·8™¨Æžªp™¥"1Uœb¬ó+óƒòÛò‚ÆÇPüÆ×âÑ-õ9Z h§ºžgy¹Hmc–Rˆ ó“‡/³‘*˜yóÉ_š>]O5y X‹ZОY-ÄK$Oðšÿ8£ùåï%^ù)Åu¦ê±C³¨\Ë7é[Ñ–óþòö'ŽdFšÖ)šQy,+ÈŒU蟗^JÔ|„¿–†ß‘O‡GMv’TV¨‘¢Gc(xÂ!Ž^~²:¬Šþ¢†Å_ÿÖ÷ö*ìU‹ùÿòëÉ_š>]*ù÷G‹ZОXîE¼­$O𚤑K $±¸”´n¥‘ž6øÕ•Iÿ,¿$¿,?'?JʸпBþšú¿é?ô»ËÏWê~¯£þõÏ7>´Ÿcy|U Å^Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Çõ¿ùÇ?(^y¾=ùK[óåÿ™5´Ô5é|¥¨ +]Vê­ßYÜEsm/æÅ}YšiÚàLÒ6*œX~QÍ¢XÛZywóÎuÂEZ…õΧ½=óÄ¡VY¿m¨Å ד0²ŽÕ¿ÆŒ© ĪaåoË+.ùŠçΞ½­ù§Í“Å5¤z¦¹x¬–ÖW×Ô·¶²²ŠÖÆv³†GhíVi’FÅ^æ¯ÊŸÌ_(ù÷QüÀÿœu_-i—Þoˆ>é^gk§]^Ú¸{Kët°ˆÊ—Kr·½Heæ²´/9yqTãò#óÿCüêÒ°ÿ ùûG»»²Öü•}uš•¿ÔÞ4i„Eb˜Ä ©¼EÂãÔ‡öº¯`Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«üÊó%÷“¿.¼ßæí28¥Ô´ RÕlâ¹ Ð<ö6’OȨÈÅ ”Ó£ Uåó†_îCò'Nó•çï<ÉçMW[ó™¯~ÏÖõIõ)íÞoMiuŽׄH‘ü5áȵU{þ*ìUÿ×÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯?ç.­ç4"y§T°Ëúoçn“wg«é¯¡^XèþkX¸¹‰ÒéÚ72Qg72£¡õS÷ªñKéÜÄ«Ûÿç0µOÍ?É_(yã[N:Ö¡i$Œ•Cë]i÷ÙKqHã‰×x Þš XùúkÈ/"«Ô1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*òÉËi¼«yÏò‘ìb´Ó|¹¨6¿å‰,íâµ´}ÍwWw°Ä±Ç<¼^Öî;ëZzp/£ »¤*õŒUØ«ÿÐ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^¯~tþ^hgÐü›&©úKÌš÷é6µÓ´„mNâ8tHn¤»’X­½I> ,å¶XÑ^yn•¡Ž'h§ô•`ú/üå—1õk/~Eè:‡æ¥k¬÷º£)Ðô $ººô^^_ ]P<Ëw/2©+ð—ÒU8Õ¿¹/ç_•nü£¢ÛÕàófÓù›Ë²GþŠŠ²ÏkkÕ´­-ÁVêʤ17¥<„…Å^‘å_5ywÎþ]Ó¼Ùå=F-WËÚ¬B{è àéR¤À2º°)$nãuhäUueÅS ûû.ÆçSÔîb²Ól¢’æòòæE†`…KÉ$’9 ¨ª 31¢Î*ðÌ_ùÍOÈ#Xëéža‹Í~gÓ¢V³Ñ´q4Ð]Ï*«F‹¨$OhsWY\ÆÔG$Ë貯/ÿœ†üàüÜóÏüãzž‰ùk­ùzßͱAs¬êv·6º­¤>\šoZD›Oº[¨Òhcˆ\5Õ”P$2Oo/Äѳ*ùòßþqÏ¿™“Z׿öŸw oÄþYÐR¼»ÕÓOyè/ Y¢~Q¼VÑúr=ÄËÅ–Œs:¯²?'ÿç%ô93üÿ8á¤yOÌ•¦yô\oæ»hí5Á}¦YÇ=°¸‚9Dz‚Gi8³Í4ÐðŠ‘žE_Wâ®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUóGüãÏæ æWçÇçî¿£_˨yzÖ_-éZ<²L³À Ó¡Ô ‘­Z9$O«Ë:Í\ò¯œ?*5¯#y—G󶻢OciªštV^†­ [ýenlïoDEw#ÒhÚÝž&æÑªùò÷òkÉ¿ž¾bò’?(gÖì¼Âº{ßþej~dú‹iÖiµŽI´ØíYf•=i$DŠSÍùÁÉ£OZXÕ}/ªþiy“þq“ê_óß:7ø¿òwU´‹GÓ<øÒ^iÓI¡_V=HH‘I~ò}M.=íà{y¢‚¸ü3ÀÁT¿þqþrÛÊ—?—–Ÿš>`»Õ5¯.ê©§è‰õFÑî ˆÛ¤S°¾‹¾*ÂþpÃòS¾›Süÿó/æ>¤ñEmiyæÍrêæ{H!iÓ†K3hÜ¥,VC táÉùªö&ùÊ—š^[òN‹i¡è°ñ?V²ŒGêH‘¤>¬Ï»Ë+$hiY哯ìqTG˜|«åß6Ca˜´èµÒµ MgL2ƒÎÛQÓ¥[Ï© ®¬(h~4g‰ùE#£*ø#ó§þqóËógþrTó%äzU¯”<ÇvŽþd²œ<6m¤Uf´ã¸’ïêöñ—X•­Þy?¿Š>f^ùïù[qÿ8ýùåcå?Ê gÌê³ZZO£\GöºÂ]j"KSomqkZõ7Q%²ýëZ7)a–ª¦¢þy~RþFÿʈó/‘~©aù³ªÛjÚ ®Â}bI-Í“Kj¶vò¼‰+È–!cš8åJÏŠI$_«*õ(O¥þ\Åùÿ8¥~k]ùNïIÕfóSþeh¶/sõ»];FŠçTÓL6w&kIm©vxî¥ú¼ö®#vôfUùóù?ç_Ï%~XþpþT¶¡çí6×Éé£k—1Çmª™ô$Ï$SÝI4÷Í%Â4P}`ú~îkZ6*¾pò‡¼åù+}g«ùŏæËMmÓ̾Kq}a&ˆÐInºŠÇ,"t–Yn ’Ù¸¼")9S׫êÊ¿ùËÿùÈoÍÌ?/yÉ:¦±õ?/ªyF¿1¬:…Þš¦{­Eo-í úŒ·|RÖ—Ô±†y£æ§˜eUõÿ9íüÙæûÏË_2ygUòoæN›¥[kwº.¦ ¸µšÖb±Ë-õœ²ÅqRºÄd>“3z|ã!U꫱Wb®Å]Š»v*ìUñ‡ÿ t=SþsWóÏm òß“îí5+}1®#¹¸1kz|¦âKi„Ò,K$×ÈL!n„_U,¶ó$J¾ÏÅ]Š¿ÿÓ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_$ÏÅ,/¯?"´»‹Kig·°ó-•Íô±FÎ@Öw° %e"eŽ0ÍAÎDO´ËŠ¡ÿç?3?%|ƒùQ’oÿ5ô«ÍjÆî{ÛÿÒ7wnŸ×eN7ôŽƒ˜¸D%•…̳;m2UW§ùƒþrÃòƒHó~ä òïÏֽɇø.óv¡<¤Ÿê’3·Y%híÒyÒ(™Ú /QVùæŸ7ù‡óËógóOÏžDÕ|›äÉô«ô}Î tù4½7J Ú1v‰Â+¯Þ_]$ú½´±~ù¥i#˜ªõ}kþrOòkLšßOÒ<É›üÃÔº_—üžæ=Fíì¢õž$N,nËö ï ;s ŒŠ±+þpÎJyæÆ)4ÏÈȼ¨šŒW+g¬ù«Ì-'‰dXÞïOK$¿(d@,Hd ¬$Ž&õ•T<ßó—þXòG›õO!þ{èW—~`°å=•ìfmwGÔ,IE†{k‹khæoT™( ¨Dô™%‘.9@мÿòŸóËó/þrçTó7—t]cþU_–ôŸ¨Ï?è{ µMbçO»I`»·Ì͵¤¬Ã¼‰j·#íÃÍmg.«×ôOùÇ}?óÊÎý{ί›5[=)ôí:ÛZXKK§ šÓÒÎÝ"ú¼’Çõoªqõf–å¤2¶Ê¼ãDò>lÿœë󿘼ì‘^ÙùODÒo|—¦j²Je46Ê·º}¼Ÿ–öӥؑ×à‚ödu_¬|qªˆµòƇ¥Îvù®zêÒúÓóòÿÕ]"ú8ÄsqšÖÂ[!¬Âãœ:l³ºñþèÈ8DÎʱû[!ùïÌ_óˆŸóqýCô·¯æ_8ù·X¼žY<·kªÛGm$ZtQ-¤²KMc%œ¿Y¸oV^·Ã,ðªùÿó÷þp¯ó_Éš§˜üë¡]Œ¼˜¿_Öïu›»È—X·µ…>µ4º€¹h½iMdý幕§ôÚFŽ‘bÅ_\Î hþBµü‡ÒõÏ(ÙEo®ê²Ìžn¸7 yzúœÒD«;ª!Ee·¶*=gVýëË%Äʦó’öj“οúŸ–í¢t¶óÕµõå¬sn8.cgž8d„|6RZCtÚŠ±£$pýÒIо‡Å]Š»v*ìUØ«±Wƒù£þrãò›É›’þOy¨êV¯¶Ð\k×1[®‰ÞÚÇu’qpeD"TF‘¡ žR2­(Uóæ—æW|ÿ9?'Ÿ¿"|ßå¯9'挶Z<W°Ô£Ô –{K;->Ô£ŠHR3¹kIVáM¼bi£u_H~WÿÎHù‹WüɇòSó“Éùó2}>+Í4Ãp5 ;Stæ¸h^%e‰8Æïï®S÷sA%À¸ˆ$ª¾‡Å_ÿÔ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]а}còkò›Ì^b½óg˜¼“¢k>aÔb·‚öûR°·½yÌ:Äi::‡ ü@º$Q»2C ¢¬‚ßÊ~U³óß›­4=>6_Ä-¯µè­!MFxFrܪ ]Š0˜Ý§ò®*ù#þsCPüÃó'ž<™ùo¬ZyoòÛóÒKXõ í–ëëÞb¶¹[ZNcÜC¸%Š4 õ©$“ë G¯ü‹ü‹ò‡ä7”Ë~[O­j·\&×õù%Ö¡t€€Ìn'&@¬J[ây^i¥U꫱Wb®Å^ùé¨ÿÊ óƃÿ9ú'ô‡–ô½*óÊŸ˜jþ¦¨º]õÌéiÓÁôï‡ [—©éÜÿw"¯8Cù›òƒò›þsÈ^JüÃó2éÚ•ÞŸÔ:žwn÷p¤ÈZ}6[‡‚D• Hh•â™$áèú“£ªËÿ&¿çÿ+¿"ážO%iòË®ÞEõkï0êRýgQžU¥òUH£@J†X"ˆIéÄÓz¾*À?ç,¿:üÕù_}ä?(è~Z¹Ó0eÔ4­f_9G4šTP³ƒ•ÃE4J¶ünÜÜ™Aé³×’¯‘ÿç(<ñù“ú^óËžeó’<·kwbÖôMZçMúí8K ðÅjcšXc )–é}¯ÚÜ,l±<ª¾€×ç?7ôO3Ãù“ù{ù¹w­þdé·f.ê>r/qõ hocš–Xõ¬J~°†Þ­ÄžŸ9ÓUö~*ìUØ«±Wb®Å]оHüýüžòïüåÝŽ£¨~\êiþ{ü¸Öîü¥s©@m쯞·šîÞIcŽKŽÏ3zÀ§­õ•Xš9Òä*ðôÿŸ~þbùWʳyªO,Uô>*ìUØ«±Wb¯’?6ç=<…äˆ|Íåß-i:†¡ù‹¢êއ •ü)œ—zt©¹šXç,ÖìÆCGûé=IE¨’9±V/ÿ>îÔ¿/.4¿;ÿEùûR»Š}WË?YimSKµyZÖ{š?XD†í­å\ÞH­RK"}b5eQ™Þa›þrÏó¶/ùÇß&y¶+_Ê O‹_󖥤ÉÁÕž9aoJÚâš)R3qnˆ$‘\zóKÃÛ[&*úo!\~Q~Tjšü㟗4«]zוö‘¤jo;ÚÝÝ<¨Ó‰çi–W•âVŽ–pªÂÞD·O…WÀ|üÿÿœ–üÜÕ.¿:?-ì<Áå ùWê¶SZèwWwºl3Z¤·ÒM|RŠÍpímèEoõhn~Üm2¯ÿÖæo)ÿÎ2ÿÎ þgþVßÛ_ê±ù¿N»¹›]’^úiô-jÏQ²KÙÂB–ÿè×%¨ŽoCÔf·¹“ƒb¯»ñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUت_®èš_™´=OËzÜZÑu‹IôýFÛ›ÇêÚÝÆÐÊœãeuäŒG%eaû&¸«Ëÿç¼ÃÏÊ–:“qóOå]Ûy?Qàú”—:xôô½AmžyäX¯,Ö)F!%”OèÖ%VÅ^ÁŠ»v*—ë·z¦Ÿ¡êwú&úcZµ´ž};HõÒÓë—QÆÍ¿¯ )ªà'¨ÃŠräÛb¯ÏÉ#ù—ÿ9•ùÏkùç?0ÚiWåmÞ¨ÚhvVó=¨Ý Ä6м߯õ9âæIe”7¢‚9"TH~â©~»­é~YÐõ?2ksýWEÑí'Ô5ž'¥kiM+ðYÛŠ)§ä¡VqŠ»x}üäß–<Ñ¥ùŠo˯-ùƒÍúÖªÏåý6ÓOÓ¦“MÔ¯¡xãISXg°‚ÑýU‘§¸ž7ŽÞ³hcYa{ò?ü凿·˜¡ò?›µÊŸ“Zœ¯˜§òlï>£6•p'—ê²O¨¤R—Qm´²A 1¿×ƒ5½Ô q ³ÿ˯ùÅ?ÈÿÊígGó?•|¿*y³E‰¢·×.oïfžG–Ý­e–HŒÂܼˆïÈ, Š[÷hŸ_ ~SÿÎ7~dÁçÓæOùÇ¿;Ëmù+ç=?QÓ üËŠÞÒ6ÚqyUíe²¼kK•¸[›Dˆ\Ú¤±sÅñŨÈÏʯί!ÿÎKyãÈ?•Öš ‡—.âmgX׬mõ_W˯wÖp4ð@Ye»¶‘g6ñObgô›”Én¾’¯Pÿœº“þr©ü‰æŸ+ßè>_ó'å<––wÚ—št+K‹=Bínb¹pösêw2/¥$!¥tIâß½i#ýà…W¤Î/!~kÿÎ-§•ô6-Þ÷Oºò§œ£Ò¢KyÛQIe=ÛHmÑ$¸¸·hn …&âdXäh›ÿ×ö÷™ü‰ä:ýWüeå­+Ì_Qõ>¥ú^ÆÚÿÐõ¸úž—Ö#~ø'.?kŠ×ìâ¯_ùǿɟҾkÿœjÔ.ô»û»½6ûWòìÖ·^±c¥sõ,!¼¿·¸¹´–u’^ ;¢É'ÇÂKu^ùkù¿cçËëï+ëZ&¡äÏÌ]"%ŸUòž¶Š“´½»°™ KË/]^º‹f*¬É–.j½#v*ìUØ«±Wb®Å]Š¡ÒþÆKé´Èîb}JÚ(®n,ÖE3ÇËH‘HñƒÉRF†UF"Œc/ØlUçþxüüü£üµóVä¿=yš-Ì:¬P\ÙÃs× `¹™íã’K”… ‰9ÆášYP ^oÅ>,U˜yoÍžU󌚟”uÍ?_Ób”ÛKy¥]Ã}Nª®Ñ´;¨p®¬TšÑ”÷ÅSŒUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Vùµù­å_É%]yëÍÍ+é¶ÒÁm¡„ÞÜÏs EŽÞ9å…du^R²‡¨†9ö1WŒÎ8þT~yi™~püìüèÔ-4íWÎv‹m?”4鑤–Ó$vòL v·V·€EmÆK©Z+‰ Ó$¾¨•WÓø«±T=ýýŽ—cs©êw1Yi¶QIsyys"Ã0B¥ä’I…TU™˜ÑFç~Xy'ò»Î_ó”>jó÷“¼—çmB/Ê&Kqsä«]VîúûJ‰=i­ôKU¶»¸õ FµYœC+ÁlyYWÝÿóŒÿv?B:·1j^lÕ¥[ï1ê°Æ¨8@‰m ”YZÞËÓõwg’i¸EëzH«Ú1T=ý…Ž©cs¦jvÑ^é·±ImygsÍÐL¥$ŽHÜde%YXQ†ÇC蚇å. Ëze¦¢Úóú¶§Á¥¬^£´Â(UQy;35ìź⩆*ìUØ«çùÆo9ycL¸óå§™¥´Ðÿ<[ÍzÞ©æÝškhõ;íFyn’óIŽñÌ’Ú5œqpà¡Ö(½icã*M2¯£ñWb¯œ4Wþ…ƒTóýçæ •Ü¿–^oó]ß›-¼û§Eõ»]>mu>;-JÎ÷PúrÛ¤Q\ÅðN×ó6Î}š%R GÏ_›ÿ‘Ÿ¢åh/ü¬¿ËÙù®µù¡i§êš/^i'ÔtËV¹Ž[EÓÿH·ô=â—ÕŽYš¬*÷{ ûRÆÛSÓ.b½ÓobŽæÎòÚEš  ™CÇ$r!*ÈÊC+)£ Æ*ˆÅ]Š»v*ìUØ«å ¿Ëo7ù÷þrûÏ×eºÕt¯(Yy*ÆÇËzÞƒªúÖ=FT0•kc–Oô«}N@—I4\â_V6êÀªÊ5_ùÃ?Ê=[˺õ®¦5 {ÏzÞŸ5‹yûÌ××Z¾®“’­krA–‹Û˜áEôÒöñý^Ghå›ÔUðÿž'<Åÿ8Ÿù“£\kžsÖôï$ë’ÜY¯˜|žÂÃ_½Ó¬ ±¹ºT€]ªD<ëz·ñ@÷-nʰ¤ª¿Qü“ço,~cybÇÎ^M¾ý%å½KÕú•ï¥5¿©õyžÞOÝÜ$r I¯Ä‚´¨øqVAŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUäÿó’þóåä›|ïå7Š/0éÑZÅc<ñ‰’'¾½‚ÌʾxÖbñ‡ œÕ}D‘9#*À?ç1?ç#ÎR~VÿÎCùv+]I´Iõý̱}Y^é-¯¢·š)MƒÉhî¿ZŠ‚/AáDC4r}a%Å_Kâ®Å^/æÿùÊ?Êo.M¥iþ]¾—óÌ:̲Åeåÿ!}_Ì xŒÒÊñÁ0UEQп6ø™’9š5RûÏùÊß%is.‰«ySÎ_˜71Cw¤ùôI'×õ +ˆ’qql–ÒKnQË꬗1Í[\E$k,| ¯ž<÷æüçµÞ‘7åí·øgòKËš¨Óîïõk…úô·ÓZ‰î®å°‚gþ«-Ð72÷uõ½)®~¦«Ò?'¿5¿<,&Ô<åÿ˼åùuùq¨Aù~ž`Óõ[-+Qç帣³¼¹’Þþà,Ï2„¸†0$\½¹˜ÖeUù¥ÿ9]ªiZ­çoËsw™<·iokæ¿Ê¯:éé¥Ýiqê±-¶±$uŠæj©Ks µÔ±q¿´¸@Ñ:N«Éÿç|Õÿ9?ù×·¢iŸœèZ•"¤¼Ô´Ë?1j3O©K3Æž¥ê ]ŠnO%É1þê(ã)ýÒ¯¢?4¿çü¡ù¥¥ê×z÷˜µ]Kó&ûêñéÞwÖœ]I§ÚÛ¼DÛA§éçM²2¬»z!½[‰gfgÅSùÄɯ1~HþS.ù²xŸÌ:¾¡.¹}e,žæÞÞleVe•Ñ`GOƒ›2FdDY¤U﫱Wb®Å]Š»v*òÿ̿ȟ#þa×[†ÆÓAüɵ»´Õ´_=YY[>©mªiœM¤³3¯úTIÁUíç-Æ8Ž‘I¯0¼ÿœM×<õù‡¨~kþg~cj¶žsNò®‡å2IeÓt >ÓJ³–ä«NðXÂFÒ2*)r¨ Uè£DkºÞ—åSó&·?Õt]Ò}CQ¹àòzV¶‘´Ò¿Õ¸¢“ÅU˜þÈ®*ðùÆ‹ÏÌŸÌkï1~}ùùeÐl|ß®›åO'¬0,èsK=¥ÛÎÉõ‰]Þîãƒ7 ²’Mà–ÍmÕ}Š»v*ÿÿÑ÷ö*ìUØ«±Wþ‡¸üÔ>·åîóòvûá¾òž…i>¥}£ë·üßP³ƒÖgýé3ýfÊÎú³Åö–¼f¼eUœy{óÉ^hòíÿš´b/ÐZD·vÚÕÅêɧ¾Ÿ>šHºŽö+ņ[gˆN³¤eSŒŸa•Ь£v*ìUØ«åÌÏùÌSòÇó/Ì_—Z徫}ª¯èÈ<‰cE“Z’êi{Z#="’±¥œpAq+K±Üz2³Cnªaÿ8·cù—æo=þiþv~`è—~Kÿ]éú}—”.­æ¶“ÓÒ-„q\J/-’Wá¤I,R$SJnËÛ¯j½þr'ósIü ü®ó¹&­‡›'Óîbò¥¨{V½›Q~ñKµË2[ËŸ¨Ûsxý[[¸ÚSœl®¼‘ˆä¬¬?d×yÿÿ!<‰ä R×X³—UÖ¯ôŸ­Cåvó¥sªG¡i÷‰Me¦E;íâXáXÕµɋ”R\£òUyòëÉ_•Þ]O*ù G‹EÐ’Y.M¼M$¯$ó¼’Ë3<²9T4ŽÅQR5øUe«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»|ùåaæ­OÊ^bü˜ó¯%Ò¿0|õù¡&£ä þòmE/ü¯{woceÍk$âÎÉ%•®bŽu›,6æUø}ßaac¥ØÛiše´VZm”QÛYÙÛF°Á ¨HãŽ4U@UUQ°ÅQ«±Wb¯ÿÒ÷ö*ìUØ«±Wb¬Íÿ“Ÿ•Þ󕿝:ùWO×uÝ)m¬n/âõ“Мcš&>”襙¢YÒA ³IflUçeüµÕ?%µË¿ÍÈm ÑtÍCê1þaþ_ØY!úö›§ÉSy£CÛˆõay•mË{¾|ý&ºUõÕzåïæ§åçæ®–ú¿å÷˜m5ËHiõ˜àfŽêß›É}bÚ`“CÌÄþŸ«zмӒ|X«0Å^ùÓù³¡þJ~^jž~ÖâúßÕ8A§ik4vó__\7 ¤?9$*²qóì_›¿œ˜Ú…÷æ ¼¶Ú4^[··³Ó´iì\ζÖ˨G|&·Š^>8¡/I%¸IežLUõ>*üøÿœÀü¿»ò·çmçž´)|ÿùA¬Ågg«YqÕ+åûK9m c–ÒîÖ(žs#½§«2Ã%ÅŽ¿5YVAù»ÿ91ä/+~Mycò«þq˜K™ü×§ÙC¢Øè ’Ýè–×άÐÊa7,u9Ùž;]$Ï%Ë̳z-:¯±ü‰þ'ÿùkümÿ)Ÿè«ñ÷?ñÔú´Zÿyÿuýï?î¿wüŸ 1VAŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WËó›>@òïžl)m5”•./üõ¦ydß[HRxtíyd[±nQsco +„vÁšVžæ3[Í7vï$Fy•}Š»v*ìUÿÓ÷ö*ìUØ«±Wb®Å]о8üÛü‡òKξ[ÿœ‡ÿœ~òlºž¯¢ê§˜¼‰§¤³AsiªG<\ÚFŒÒÂè'1­â–ÃE2Û¤6Ó‰UzF•çÿÏ¿Íë»Ø¼åùU^L·õl¥óžì'—ÌSM5¨tšÃHY!‰~¯)âÏs<°J9´SÛâ¨2Î!y7óú?0~py—[ó·›DêR& w Ò‹›[}:Ö®’É+D—t€IÂa?!W¯þ]yË¿•ÞJÑü…åT•4-&ŠÜÜÈfžG–FšYds@^I]ä`ª¨¥¸ÆˆœQUe«åÎÊùÊOÍ:Ë•çMÊ_•oÖŒt‹;›Û™çÒµ(ÚÚî{Ûv³Ž›‡…ØÅJ±Û É/;¹|Ÿþ‡þq¿þsÊy×FÑ"òÀÔ-.tßBycÒN¾ça¦N§=ôÐ=´Á®¤IæoNâôfX}ñWê¾*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]мóŸóôÏæ’¿"üoúwÍóyƒBóœá=Hô.èÚ…¾¤ó\Mê"C+¼P˜Ñ׉¸ðY.-=U^ÿŠ»v*ìUäÿ^QóäÞRüÌò¿ù‹ù¨Is¤èÓÎ-RÿNÕâú†¥j&’xa…Ì.³Ç<‹/¶TXÜHèʤþIÿœ¡ò‡œ?0ì+ïü¯æ¿&ù¿U´–ûK´ó^”4ï¬Ç»°@³Jâ©Ì®è±FDõ=N(ʽÃv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯ÏùÌÌÍÉ/ùÉóʓн÷–­ôÛY&ÓùÚ\Ù[ê\ÝXM$¬âG2ˆä‘íÍ´ÑÃ4(87ï¥U÷”õ‹ï0ùWC×õ=.]RÕtûKëÍç—¯e=Ì),–ÒsHÛœLÆ6äˆj»¢ôÅSŒUØ«±Wb¯ÿÔ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯Ž?ç4|7ææä£I^ßZÔ5¨µm$PÏèÙ¯e窎Ý%‘AVäWŠ£µ•}Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*òÿÌν/ÈÚå¿‘ôM Uó—æn¡h—Úw•´kg4µžI-¢º¼¼ {kO¬ †iÙÙ¡æ²4L›â©?å'çäÞ}ó¯™?+|éåi|‘ù¡å¨¢¿ºÐö-b 4éãÖd¼¶D‹š›ˆùÄ{IFsë,*½£yÿæoçOåçå ½•çžuO©Z]]Áe;Àw%§× ¼žÞkˆ ç0ŠSa4QºFü¥_äI^5^qÿ8[åXtŸÈý'ͺ†,>vó¬·zÏ™µ{ñ+j:“É{qõYæ–r]‘ )$[ðU§Z´òH꾇Å]Š»v*ìU‡þeþ\hš^X>XÖî.ôÿNîÓRÓµ-ãƒTÓï¬fY¢¸³žHåôe)ê*óôÞER9b¯7òWçš¼¹çSùEùÕ¦Ëk©E,g—3cµšÓËþe½ž340‚ñ$6ײCưG,ÐÉuÌP²q‚){Æ*ìU‹ùÿóÉ_•Þ]5y÷X‹EÐ’Xí…Ä«$¯$ó$qE ¼²9˜¬hÅQ^FøÙUN4MwCó6—·å½NÓXÑn¹ý[QÓçŽîÖ_MÚ7á,,ÈÜ]YZ‡fR½qTÃv*ìUØ«±Wb®Å]Š»bþuü¸òæ=ˆÓüõåÍ?_·H§‚Ýï­ÒYíÒíBJm¦#ÕØ*þòGQ•¹"«â?~FþuÎ0yŸUüÂÿœq¹õÿ+¿å$×ô{©íÿÑ!Ñ¡¸/kv.dŽ[«OJæs¤í?óÿ¥[Û]H«éÿùÆoÍ/7þr~TXùóÎz5¦yww£iòµ¼µ¶”Ä.'’Y!¤‚H9$ff„Ì)¨ª«Ø1Wb®Å_ÿÕ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯üî“C·×?,.â¹ô2aó]‚ùN kx,n¤K]v>- 拦Í<×2/¤‘D±üžóÿ˜ÿÂߘ^DúÞ­Ùù¦þ©§Ü˜˜[j…³ÄŒþ”âOV¢ô×Ö†s"¯©ì/ìuKmOL¹Š÷M½Š;›;Ëih&‚e‘È„«#) ¬¦Œ7«Ïÿ<&¼»ùëä+Ÿ$y‚yle[ý#S‚¬özŒ(ñÅ1’¬©ÆGI"cñ£·Ž_NXÕL?'ÿ-l(?-´Ë>ú]NßDŠU{ùÕcy§ºžK©œ"T"eM99Dâ­$Œ ²¬ãv*ìUØ«±Wb®Å]Š»v*—ëºÞ—åSó&·?Õt]Ò}CQ¹àòzV¶‘´Ò¿Õ¸¢“ÅU˜þÈ®*òùÄ¿-ßyWþqÏòÿLÔ$Š[‰ô÷ÕQ ,È ÖnfÔaR]TóX®d pÁY–ŒU{F*ìUØ«ÿÖ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±TŸÍ^d±ò—u1êË=½„FD³µ ÷wS± ­´nÈ$¸¸•’x¹,ÒGüL1W—þMyó&5y£óSó†m=üÙæ(­ì<½£Ú$èS\^®œ÷ÑA™Ä·\&(¬²h¤õæø=%^ÑŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¨{ûû.ÆçSÔîb²Ól¢’æòòæE†`…KÉ$’9 ¨ª 31¢Î*ùcÏßóŸ¿”Oó}Ÿ—´[{¿7è©õ•×µÝ  ŽÚhK$QÚ¥À.ù:UäIc€DÉ$2ÜȪ½ßÊ¿œ¿”Þw›N´òŸ´MWRÕbØép_Ûþ‘tôŒä6q:º -$o¼|[ÔUâØªO­þ~~_éÞgÑ|“¡\ÿ‹üßæI¯´Ë·:}ÌÒG 6÷j滂(}kYÍÜ4‘Å<ËéÈÒc™WÂóÞ]ü×׿0?Çúï®ô_&i6 Ùkp\ŪZÜZÙêo.Ø¡ýc둈á¸âܾg`ÁUL4ßùÌÏ(~Yp·ü—Ñ5[o+XÝÛiú’µ§ ¤ÿ‡ÿy}wp&7ww1j²_\ÜÆ²«Éiõ/CÖ·–X#à«íÿÈ¿ÏO(~|ùA<Éå·ú®«kÂ@™ÃÝi÷N ÄçñcáBÊ¡¾•&†%^¡Š»v*ìUØ«±Wb®Å]о(ÿœ®ÿœ5Ò|ËcæÏͿ˘õ 0g–-Jçˑڵ•â*¤wW†8â”\8 tÍêN÷ bigN*§óƒ—™z'•,<ßæï4ÝÇå¸í5o/é—RE4ØI°ï=ÅÊ3F¢ì\ÇwW…åXWëG¡¯¯ñWb®Å]Š»v*ìUØ«±Wb®Å]оxÿœ†—˾}üÁü«ÿœ{×e•ô7jºç™m,oͬòiÚ Œ÷ö×0Æ9›{«^|“{GôO¬¢XU{ý……Ž—cm¦i–ÑYi¶QGmggmÃ0B¡#Ž8ÐTUUTQFÃDb®Å]Š¿ÿ×÷ö*ìUØ«±Wb®Å]Š»v*ù¢ÿþró—]üÉóW—ÿ'¿,"ó¿’|›¨E£jº¼ºŠhÏ.£ ýv¥¾§8§hTðIø$.íÉo­¤Wh>aÿœ¨üî„^YXEù刢I`ºÔ­#ó¿{v’ÍÅõ[Áj¶öü@v3[Ç7%‰¡ya™ý5Xþ¿ùƒÿ9wù,¾bÓ5?(ËùϦË,1ùSΖ6¶ö3Ç<ö\Ü\éHžg·Še+Vä•pn‰W£ùòÓϘú¦ƒçoùÈiowåïÑÚ–|‹ ÝÜ6ÃY·H§—R¼•Y ÅØ˜oòw”,¼·ç_5ÿ5]>°Ã¯Éfln¥µPkr ÅÏ«*î ü•¤^>¢´¾¤ÒªÈ5-7ëïìÒ2Cisi¥ê—vßZú¿Ö½6`Ud†F‰¤†–$š/WÒOYU•WÅóÞi‡ò§VüôÕ5í#Îzó´¾p¸Óõ ï.ùz[»MQôû©•¤€Z§¡opæk‹˜fž4Xd·[~mÉJ¯©ÿ,¿8<±ù¥úRÏJ³Õt_2h?WÿygÌ:|Úf©§ý{ÕkoYÏ­FTôä“÷lœø3qÅYÅ…ýŽ©cm©é—1^é·±Gsgym"ÍÐL¡ã’9•de!•”цãbúßæÇåg–uIôO2yãËú>µkÃë:v¡ªÙZ]Eê"ÈœâšUu䌬µ«銲 ]ÐüÍ¥Á­ùoS´Ö4[®VÔtù㻵—ÓvøK 27VV¡Ù”¯\U0Å]Š»v*ìUØ«ÉüËåÌŸ(ßj¾mü¤ÕbÔmR¾ü´Ö"‚=6êæV¶iÿFÞÂ!–ÂâqČӛ«Yo.¤žX£g’lU„~_Îcþ^k~P×<Çù öŸ–ÚÖƒªË¤]ùVúõ¯µÜˆÊ,ÒÞ+£IexVݽ?FFv¢¿]å_ùÌ?-þakšÝ‡å·‘<׿ýË–—W𯝦ÛY§Ã жßW‚æê—ë(&xâ&;ÆôÂÇi)2ú ¼¿Î™ß󛿘?§üÏù[äû¿!ùËßY{ SO·bÕ#êÿ µÔgyx3ÏÛÃTõm–{»˜âWUô¿äwç/—=|…mç/Á-“¬­a«é“ÕžÏQ…IaqU•8Ȫ>4uæ±ËêE¯HÅ]Š»v*ìUØ«±Wb¯š?ç'|««yCÌ^Xÿœ§òv­æËh¦ƒÌ,¢è¾¡ ]‡†CB]b{Eº¸”Èbâ©#Ï3:[,2*ú_v*ìUØ«ÿÐ÷ö*ìUØ«±Wb®Å]Š»v*üøü¸ÿœ†Õ¿ç6|çùwùáž¶~cÖï¼Í­]yr «§Óõnâ%šiR¶FÑÚ¬1Ü\ªM ?ú@šÞ%_oùóÉ_š>]O5y X‹ZОY-ÄK$OðšUü˜òU¯‘|¢²¾›m,÷2Þ]ˆMíÌ÷2i.$‚(VGUã±Jˆc?c|Áÿ99ùä/ʽ[É_óþJòìZF›äÿ2éWþwÓthÒ›NK«UŠh-Þâ(#xÞ%‹Ò‚%õžëÖ™—ÓwÅ^¬Î\¶¹}¥ÛþAþ]ë›mÜ¿T¿×­!½Ñô«;×d n÷7V.¡Â¸’f—цÞ'õ“úJ¦ ù·ÿ9?©ßM Y~BE£jOF=gSóEΕhoH£žo«@­:DÑ™'··sp#ãð§­ uPö¿ó’VWy«þqöìÚXVÿR¼Ò5ë©KšyÌkkoÅ…åÜPÅÅà†q$²„oNÙ.`LUêþ[üåü¦óuŒš‡—<í¢_ÛÁ§fñ#¿·YítäUy'º…Ýe·Hï«ë$~‘xîíeôÝ£~ÂÌÅÕ•¨ve+×L1Wb¯/Öÿç%|Íç¹ÿ2|Éå McÍ÷\>³s¨Iqwk/§l¶‰ÎÊiZոΰìÊ$þóãÅ^¡Š»xþ©å¯Ì? þaù‡ó ÈÖŸã-ùÇôtždò|×Ëa}g}`°X}wI3ñ´~v‹[˜.^Ùä{hx^qã *Ì<ƒù—åÌ[{ÏЦîËZÒ¾¬º÷—5{I´ÝcMšò¸Š;«[…W^H߉Πx¿£,â¬Ãv*ìUØ«±Wb¯'üÎüç›òãN6-[òêÇPÒôýwÍ0jQp±K½BïNÔd6ÑG4Ò>Ÿ4Vé$(9Ê÷-àm¦ÅXÄžf»ÿœ¥ü¼¹òÞ‰åÏ5ù#Éžcúºê>kÕÒ×Jš]$47RǧÅÍijýr& %²ô%žF–f‹êw ½¿BÑ4¿,èzg–ôH>«¢èöiúu·7“Òµ´a‰9ÈÌíÅLÌÇöqTÃv*ìUÿÑ÷ö*ìUØ«±Wb®Å]Š»v*üÀÿœtò©ÿ9qùåæ̫ͯËF°ÐnôýOZÒa¶CìŒ,lVHþ¨‘ÙðœÊd–H‘c<ä™î#UúäÉÿËoÊëí{Pò…qæYcŸXKig0Hð4¯Ž$h¡D3ÉÆ84PÜxñU «8Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯’?4?ç5?+¥òæ—¡\kv:ìQjž]ò®µmoþ‰©j¨nn4ÍBÒi"álf‚åäy!C,2B’;ªb¯ü±ÿ8ÿ9Eù‡¥é›õÐ~GÖnåó–©&¯tfºTÔ^;iÞêÕkq. Öñ‰‘'"8ÕÞ7¸·¹–â—{aäx.ÚïTô¿Kêš…Ã\]]ýYæh9ªˆáOLN辌1rZzœßâÅ^¡Š»v*ìUØ«±Wb®Å]Š¡ïì,uK3S¶Š÷M½ŠKkË;˜Öh&‚e)$rFà«#)*ÊÂŒ68ªDд?,éphž[Ó-4}ןմí>í-bõ¤~Bª‹ÉÙ™¨7f-×L1Wb¯'ó'üã7ä?›|Õ5ÿ#i÷>aIE̳Gë[Aq8™®K«h$Ž —wv2´ñHf¼ÓáÅR}KòoÍÿ—üï?çõm+ʶ—w:ž­äMjÈÜywQÔ/}8šq³ló[F°0¸OÞÌß×Uê`Ó¼Ïå›Ì?ó†ÞMòUþ‹æþV^l×axaÑâ‡Mœ¥¤Êš}å²?¹½¼\N}5ªc1W§þNþi[þry@ùóKÑ®ô-Þ]͂ڄ5Õå­°H¥¸x­ä•a¥È¸ci™al²ªª¯@Å]Š»v*ìUùAÿ9÷åÐ?ó׺¯Ö¾±þ(Ò´í_Òôý?«úQ¶™éräÜëõS•ûÎ~l«ìùÃÏÈ?*þXù6ÏóO¹—P×|ù¢h×Ï%Üpó°‚{nf¶‚D@å$¸w‘÷‘-‘‘ž4ª¾—Å]Š»v*ÿÿÓ÷ö*ìUØ«±Wb®Å]Š»yÿçN¥®Z~^jšO”߇œüÏÃË~[e¹’Îh¯µvú·Ö£’å”}J&–þOIÒ YdøDUùù5åßȯ![y#ËóËzí+_êúœõW¼ÔfDŽY„|™bN1¢GŸy´’ú’È«Ò1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU‡þkyc\ó¯å§›|Ÿå»«K-k_Ò¯4»kB9%µ_®Bиq +¯$fUsô˜‰})‚z.«Ê?#篼7—|éù·«EæŸÍ+iñèXº°-o§hú%¤WÐÛB±Çln]¢¸Ë5Ôlÿ¢o­*¯¡ñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅP÷ö:¥Î™©ÛE{¦ÞÅ%µåÌk4A2”’9#pU‘”•eaFUùáç¿ù¿*þ[þlþ^Ü}oÌ?’:Þ¡g£ùŠ_¬C&£mªß\4«pÐCj"²žY-ãyS÷‹ûôÒZúŠ¿Cì,,t»m3L¶ŠËM²Š;k;;hÖ!‚ qÆ€*¢¨ ª¢Š6«¯/ìtèVãP¹ŠÒÝå†Ù%žE‰ ÷R¤ÆÈä•Ò8׫»*/ÄÃ|Aç¿ùöÿ—u?1C{ù}æÙt/\ÊæûLԭΤöˆÂy´‘d…¤EoB†sÌ'©3ÝJábuYF—ùGÿ95ù%qæëoÉ­vÓVü½ÓnÓSò5 ¸µºXžTº±{«»Ènm?G­'R·•Û'÷ÒÜÅŠ°ÿùÇ*ÿÎf^yb×Ê7:§üªß ÙÚzš§wåý"k褴™á{3§»[Ì¿Y2½Ä·P¼²< "Ëþí2¯hü¢üüóUçš¼óùsùém¢h>vò†¡¤Z[I¤‚þ0M¥£Åo#Ï7Z{nSP‚ò¸ŠÙ‘ù*›þtÎU~Z~Ek‘yoÎú­Öµqik¨[ÛivÐÍêZÝÉw póO Ií)"³+~ú/HH=oEW€ÎDÎP럙·[ü¦ÿœc½»Ôu?5}^ù|Å¡\Ée¨~ê{¸¥°xe†­8›xîe¸i ÿFÝÇÕdguS"~tÿÎU~OÝêþ@üÕüµóædzMaÑüÏ¢ÚÜOÍaµ"7pÚ:]E;¬%§–—s®y—êÈ«Ûô_þrKóá¬5o.Z~Lh¶Þ”—z§×l|Ù¬^Öx˜Ã`¨ÖÛ÷I*K5Ô7_ÞÅèÀÅ]‘V1¯ÿÎi>püܲüÊóלu:i §Í¦ê^^󭬦t–ÖâÙ~¯=€±ŠÕ#3,Ѭ6¼Öá^áeõ¤æŠ¾—Å]Š»v*ìUÿÔ÷ö*ìUØ«±Wb®ÅP÷÷ö:]Χ©ÜÅe¦ÙE%ÍååÌ‹ Á —’I$rQTfcEœUàßüäw˜¼Ïç]gÈ?ó^YÓÿ1n4µ+ß6.¬!Ñ,õc™­­ÒŠáä)EŠê>nòFò@¶÷3B«?ò”<û$ÉæŸÎ]WOÕüá ²>‘¤èqJÖ<…椕ô-j%ŠàÛHaž7ŠEš)cqP9Q$PÊÈÅxÈŽœ‘•y~RÿÎJyFúmgÉ¿œÑy-¢ŠËLò¿4l¥²·iye/®×¤Ìò]E My4q ŸÝXÕxÿš¬?ç#,üŨêó‘>UÖÿ3¼“e)¹òÇ–¿/å¶-Þê.Ü6º¦ =”RGîÒOBX8´w‹sñª÷ùÇÏÏÛÍ¿Óþ^ó–‹þ üÍÐ.ä’ëÉ×~¼WË£Üp–ÒäÇuNh’¤R•l$å`K¨"Å^ኻ~l~|èZ6ÿ9Ÿ­kÿ˜>yÔ?,4+Í?NÖto2hÑ\\ê7P-¥¶™4=ym^Qä~¬ˆÁ}?ŠTæ«ïËOËO,~Sy`y?Éâî=;»»Û{{Û¹¯=®LÓa33p‰9qD^¿ÞËê\I4Ò*ù#óòjo$Îgù3ó^yåÑ?.¼Ù­ØÄ5='Ò³tó%ͤñ¦žñÂÒM"_Ílîc E"^M²)ç.*ûŸv*ìUØ«±Wb®Å]Š¿ÿÕ÷ö*ìUØ«±Wb®Å^ÿ9'å‹¿Ì}?É_”Muw¥ùoÏ>`[_2j¶‘ÚËþƒ¥X]êÿT»z‰,òY¡ŠXâtÑ[áã¯Pòo‘¼¡ùy¡Åå¿$è¶š‹õk(Ä~¤‰CêÌû¼²²F敞Y8ünÇd«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUù±ÿ9»çïÍŸËÎ[Í#Ë_˜݇—¼Ë§éšü:]…ÝÅšX½º\iÆ(^9y*HÐÉ<¢?I%yWÕÞäÅRùÅOùÄoVòî™ä-CÎ>lŸOÓìõk©.¢Ó§¼×ÝDS­­­¥­Øt–Z¸úLÅø t⼕{凿/üäl>SüÑüÛ¶Óô/Ëí/PÿyÉÚdwqê2ÞÁ,±Ø]ê—7!K$~úÜZˆá¼õÖi”D«ªú_v*ìUØ«±Wb®Å]Š¿ÿÖ÷ö*ìUØ«±Wb®Å^?ùŸæª~s~Gy7ê¼ÿKêºþ¯õßRž—è/^[ú^ŸËÔý!Ë—5áéS‹sø{*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¡ïïìt»OS¹ŠËM²ŠK›ËË™!‚/$’Hä*¢¨,ÌÆŠ78«óCþrþrª:_hß™?“_˜žeò¶¯¦Kk¦Kù}s ¶°J–íqvÚ¤ÕÅŒÈÌñ[5¼¨Ï OÞ)‡b«èùÄÍÊ¿œº4?ó?˜²ùãóme:=ìúÄ0µ–‹>—qõ‹eÓm’Þas Û\4±‡+3ÈѼrIr¬«ë|UØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUó‡üæö·¥ùgòV2I?Õ|ߣùƒGÔ<‹sÁäôµÛKY_€V‰¸Ú­Ñãp­ ðõ=±§C/mk5­ÃÈ=)]Í߉=Pžœñ\zn¼T¿ò¯þq»òòkVº×ü‰£Ki®ÞEsi5ü÷—W/õ+«¥ºá$Ä2‘Çpõ¸F¾¤’;Hî«Ð<ÉæÏ*ù:Æ=OÍÚæŸ i²Ê-¢¼Õná±çegXÖIݹTf h¬{b©……ýŽ©cm©é—1^é·±Gsgym"ÍÐL¡ã’9•de!•”цãDb®Å]Š»v*ìUØ«ÿ×÷ö*ìUØ«±Wb¨{ûû.ÆçSÔîb²Ól¢’æòòæE†`…KÉ$’9 ¨ª 31¢Î*óÿ#¤>tóV£ù©{¢kz%Å´Sù[ËVÚÛËj%Ò#™../ÓL‘Qí^òá¬/Ö$·²´“Œ+!B«Ò1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìU/×tM/ÌÚ§å½n­hºÅ¤ú~£mÍãõmnãheNq²ºòF#’²°ý“\UùѬϹ|úþ}½Óü»æ>?Ë¥–Þ[-kRgmGê—âX¾­|d¸¶Tø‰{xn9ÄÈñ–š+u_wþTþRù+òcÊ«å"ÚËm¦¼¢îò[™ä¹žæôÃ\HÎx«È°¡e‰c„±b¬ãv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»bþüºòWæ—_ʾ}ÑâÖ´'–;‘o+IÇ<&©$RÂÉ,ne-©dg¾ue^oÿ8¶Ú§—ÿ/$ü£óeçÖ<ýùkw.‹®F×Iw[[†7ºdðm'ÕÎh£·õR_FH=$ô â¯pÅ^?ùßæKÈoÈ4k¾@Òm4ŸÐ¶‚ ËO† ;[K­Rí-–á!¼GÒ–çë ŒÌ¥ZœËb¯?(¿ç7ÿ9ü¿éþXù§Èw˜>oÓ¹iöpÄ÷Vžb2XúÆá/c÷o<±¢fô¢•D.÷iäÅSùÈÈßùÈoÌïËMKó›óZæÒ×Íþ\¬ö¾@Óç4Ý/˶ÈoçFõ.K¹#¸aõ†?WŒ§©,ŸW´·Uÿ8‡¦~xy¹µ{ŸÊï>ËåÈ¿-jiÞ^²×´û-b{´ŽöMEmg¶‰à1»EzZöæáw2E.é }UW×þJó¯ŸfóQòæG—tý;]DƒY‡\Ðõ»Ò¯œLmnãŠ+Ø-.âNFHÖí ŽxVâæ7–¬*ôŒUØ«±Wb®Å]Š¿ÿÐ÷ö*ìUØ«±Wb¯üÞ†ûÌ¿š?”^Am^-+ËÓêÞnÕ"-m{¨Ïå/ªOecüI:îVæâJú6­4rFðî«Ú1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»|±ÿ9qùçß?ßyóKòfî[/Í.Dúk­¥ëé··ZuÃ0_«ÝâŠ'€Í?%>Ÿ¯ ò–±Å нòÇó¯ËwÞ[²Ð?1uûMócA´6žuÐõÙìôÍAu 2ÌO{v‡XÞÑãV»Šæß•±¶na“ƒ¢*Â5”òWüå7敢Ѧ—ÌŸ”Ÿ–Òêwžh•¢ùsTóz0XY#<‘-ÓÛ¨šéåHî-} #ˆ»Ç|Ø«é|Uت_¢hZ–t¸4O-é–š>‹kÏêÚvŸv–±zŽÒ?¡UEäìÌÔ³늼Èú½Çš?ç&¿5ÓT^_à+ËÚ—BK8Ž;]zÕ/¡2˜Œ³Kº´«·¥m~Ë—UWb®Å]Š»ÿÑ÷ö*ìUØ«±Wb¯Ž?ç)?1üÕäÏËï4hDÔ<Ù¦þYèš§˜5™ìLƒÌpÜéÿé2Åk:Û$+`óz’TH9­Ó/о¯òŸ™,|ãå]ÍÚdrŦëú}¦«gÈU ¾…'dTgPá\ Ì+ÑŽ*œb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*“ù“Ê~UóŒzg›´=?_Ób”\ÅgªÚC}NªÈ²,s£¨p®Ê јwÅ]å¿)ùWÉÖ2ižQÐôýM–Ss-ž•i Œ;*£HÑÀˆ¥Ê¢©b+EQÛN1Wb®Å_8Î.hš^•æÿÏ»‰àú¯œî¿05#¨ÛÌî—_¡Ü›­.V·vøb—ë72A0Aë©j;ª/_Gâ®Å]Š»v*ìUÿÒ÷ö*ìUØ«±Wb¯'ÿœ‡óBþZþQùÛóJ–]+Ìöº}µµ¦³§[YOzgú×¥c¿\ŽD{užé½EebÍpÐq™ÅY‡å¯–ï¼ùuå(êrE.¥ hšn•y-±fç±´Ž 6uF(Y RʦTb¬£v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»IüÕæ¯.ù#˺›<٨ťy{JˆÏ}}9<*gf!#<ŽËjÎʸ«óBãþsOVòoçÇæ'Ÿ<‹£iú¯”üߨi‘\G|n–{;Ëð›(¥¶z¹ˆ´´šÞoDº+#úmÍWé¾…wªj™­éß¡õ««H'Ôt].þ§u$jÒÛúñ€’úNJzŠ8¿K¶*˜b®Å]Š»v*ÿÿÓ÷ö*ìUØ«±Wb¬Ï>MÐÿ0ü¡­y'Ì‘zÚ.¹i%•Í7’?P|Eë$ˆ²Äáe…Ê7§*#õ\U‹þRk}•|Éå/ÌëÝ?Póg•õ­mµ-:ÝìN¥£Oe¶š”¶ò;yåúÌr@¶÷CËÐsн#v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»xüå×–<ßç/È4ùoÉZGé­VëêsMe¥.¾«ewämýyrƒ”lê[Óg•c‚e_0Z~A\ÎmêšçàÖ´¯!Øjþ…ŠèÚw¯æ-@]i¨me:‘–[(à”ÇB¼^Ùáwdå,ê¿CñWb®Å]Š»v*ÿÿÔ÷ö*ìUØ«±Wb®Å_8y[óÞ«ÿ9“ù·a,þ·t?/èZ{ÇÂÙ=©"ŠöÅ*LÕ7Z›ò«/ÇÆCðÛªªú?v*ìUØ«üËüÇÐÿ+|°|Ï­ÛÝê¥Ý¦›§húZG>©¨__L°Åog’EëJj_ÓVç餌 ñÅ^QyùÃùÛùg ùÇóÃÉÚ%§å}ä°µî£å½B[GË]JÄš”3­/ßÕ¸†'};dôç•c41•^Ïäß<ùCóC‹ÌžIÖ­5Ín#ë6R =94›Ò™6x¥T‘ Ã*¤±òøÑN*È1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¨{û RÆçLÔí¢½Óob’ÚòÎæ5š  ™JI‘¸*ÈÊJ²°£ Ž*øþp£ó3ò›òÃÌZ‡äõÚË'æ/˜õ¹ôÛŸ7ÚÞ[Ýyný4Ñ2ØýZWxViÝV^âY£oV’Ǻ¯Ð|UØ«±Wb®Å]Š¿ÿÕ÷ö*ìUØ«±Wb®Å^æ?8ØþRÿÎ@I©ù²Ö]?ÈŸ˜Ú&Ÿ§¯oïÕ4‹ oËí©Ü}Ro­JÙ'·œ4A i%±Ž)d’êX•{Æ*ìUØ«±W“é·v?™Ÿ›“ê–¦Wò÷å4·ZT7Ý«Ù^y£Sµ„\°ŠÞ·¦ÚHÖÄÜFÕ›P¹'µf‘W¨_ØXê–7:f§mî›{–×–w1¬ÐMÊRHäÁVFRU•…lqWÉvÿŸþ^Iõï0þSk:¯“¼çoé]ùf/®´º]¥õ¯CÍ£{ÔæÉËÕ[—xdUÕ«ÑõÉÿÏ2èÚ_—5ÏÏ9m´Ûyyk:‡—ü¿‹­ê0„Ÿ‡×b½‘m=(ÞÚÇ?XŽçpU|Ñæ/É¿ùÎ#þœü»ü¸ó&«æ? Ü]þÌK¦i—×7WžåÓÇ%Íëß[ÖäÉê*N«3ú²°?X“š¯§ÿç¿5üßæý.ïÈÿœøóŸË|—RÓgŒÛI©é±¿¡­nœ'‰åW†GµymýTõÒŽâñW¸b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±WȔߗ•—ÿó’_ž¾R󒼩þãÿÓùwËÆÊÊîl~¢þ´ö°Km§êz¶ïv"„sʱ´’üÈ«ëüUØ«±Wb®Å]Š¿ÿÖ÷ö*ìUØ«±Wb®ÅXæ—寇ù·äM[ò÷Ì—vº.±õ¬Ï§¼qÝ/Õ.bºN 4r «Ä¡ªð×¾øª_ù®ÿ‰¿&<­¾§úbîëËúg×õ?Öä–ú;XãºõeäÅ¥Y–E›‘æ%WWøùb¯@ÅRýo]Ðü³¥Ï­ù“S´Ñô[^YÔu ã´µ‹Ôu9Ë3*/'eU©Ý˜/\UóƱÿ9¡å]*ûKeòœ.<½­ËõMTý ´úÌ÷ ŸR}"Êêâ)ï-çBÎÓ"©€½¤rEÎò>*³ÿÈ/ y‹Èþ]ó&¡æÄŠÓÌ>yó.§ç;í Êio¬ȱ7+Ågx–1êJˆˆ\²ÇÍeu^±Š»v*ìUåÿß•º§æF‡¦ßù?Yÿ ~fùRìêÞNóÆé]zm–³±ßê—(x\F «ñ¥ŠtБWÏPÿœí¾ò§˜µ_"ÿÎJyR_,ù²ÃPŠÐÜhvÌö–ðJw¹Šk©e(€‰’kf¸È¾iÕ}¯Š»v*ìUØ«óÏœ4¿Ëÿ(k^uÖ¡»¸Ò´+I/®áÓíÞî飈T„?áÊEÖI¤Ž$yWÈÿÏÊ<ŽuËky|ª¯–Ûë\ÔêÙ¯£ã$ÂßÓ´!c~q¬ '+¨ý'’T_YaI'Uöþ*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»|Ñùå»/þrþr&âI%Ôµ(åòä–úž¢Vâö5{9¯eµŠb¡–ÝXEq –{tn^’¶*ú_v*ìUØ«±Wb¯ÿ×÷ö*ìUØ«±Wb®Å]оxп2uŸÈý;ÌëùÉåCFò'øÃ_¹Ñ|ça¾¥§G¥k:…Æ¡k%üvww‘¼³Ìñ+}Mc_RÚ)8ÈÌqV_£ÿÎMÿÎ?ë°ÙOeù‰¢Dš„WÀ/î—NuKIR%ç¢Ð¹g(æ¼éÊXVH‘ÝUxç^¿ù“ÿ9wä«?+þGùGPòÖã[Œ^yóU¾ƒH²¾K&†@¶ßXžÉ]¡¸pgõ h¾«õˆ6Uõ?Ÿ¼­ú~ÞÏRÓ|»åýkÍú?ÖgòÞ¡æX½HôÛïA¤·ž"K(­ÔVÂQÀþ—)RORã‘TãÊúúùŸF‹W[)tçynm§°¹šÊæx'²¸’ÖXä}>âîjñ0eIœ¡ø$á*º*©Æ*ìUØ«±Wb¯?ç+?(¼±çïÌ?"Øù?Ñ¿Ÿš¾«cy¨ëºSL/¬<±§,É.«p‘Í KõyL Ò4w¼Ikm+z|W×ø«±Wb®Å]мßóùüÅkù5ç-_Êzܾ^ó…§¾¿cª@‚WWÑuF`¬“­¹‚@ü¤êG*r•|‘ÿ8ÿ8eå0ycË_›ÿ™-w¨Éþä4ï(][ [SOOv$æ÷QL‹ ÌJ22 ˜d¦*ûÿv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^oùýçù¿+ÿ&¼åç{G–-KNÓÞ-.x#Šg‹Q¾u³³”¤ÿ$sÍÈ7À­ðIöVÿ8×ù)æÿ!~œüÈüÕ×nõÍÏ=zSùЬ–±´Ž=á·ôâ"eˆ>¢¯¥nŸèÖ\ ç%¯Å]Š»v*ìUØ«ÿÐ÷ö*ìUØ«±Wb®Å]Š»Kõ½ Có6—>‰æM2ÓXÑn¸}gNÔ ŽîÖ_MÖDçÊÈÜ]U–£fPÝqTÃv*Åüù‹ä¯Í.§š¼…¬E­hO,–Æâ%’'ŽxM9b™RXܬDRÈÉ"üŒÊ²ŒUØ«±Wb®Å^ù+åírãó/óó^ým-ô_9j¶úF‘eòOtŸà©¯t)å¸åHž»À%Q¤â­Åš«VUWb®Å]бÿ;y'˘ÞX¾òoœ¬IyoRô¾»eêÍoê}^d¸÷–ï‚’Fð¸­(~Ub®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š¡íïìo&»·´¹Š{‹ EµôQH®ðNÑG8ŽURJ9ŠXä Ô<$Gû,¸ª#v*ìUØ«±Wb®Å]Š»v*ìUãþvÖüßù…æ{ïÊ_ËÙîü¿¦i¾’~`ùþ41McÔ)pšfŽÎ´}BxeG’ä‹O‚D“㺒$ERÿ&ÿÎ(þTySÌñyïU¯¼ýov·ÖÞhón¡.§|’E Aâ¢(_Ñ’–'âÉ ôâôÕ{†*ìUØ«±Wb®Å]Š¿ÿÑ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«À4oùÅ(yþrOÏÍ#U»·’o®ÞÉåÎ"HN±©Ç,77?X‘™ý'I¤«ñøgni2Âß{=¿›<«yæ+¿(Úkš|þl°ˆ\ßh1]ÂúŒ0Œ‰%¶W2¢,d3(¼Oæ\U8Å]Š»b÷˜¾J³óí§å…Þ±{¿Óαc£Ê²#Ïd¯$e¢‘”Dî R¹›„o'MY±WŒ~RùŸÊ•Ÿšÿ™ÿ”hÕÿGy“̾k›Îž\›Sˆiöº¥¯™¢´ Œ’HVia¹lUO)™yD¬É]Óf»¶üÃòœ<˜š¢ÃͺÝÖ”oô +Qô£Eï¬^V‘$ib[yV߬ðKÅb”6*÷û ûRÆÛSÓ.b½ÓobŽæÎòÚEš  ™CÇ$r!*ÈÊC+)£ Æ*ˆÅ]Š»v*ìUØ«±Wb¬?óR]RÛòóÌ7úGš¿Á7z}£jy§ôzkQµ±asrÿS’¢^PÇ"q¡aË’ê£|Aä_ùο(~]jÑÂ¥t[ß0y^ò潤g6¥&¥~÷£PŠá×’7uñK ?SslU÷?’¿0ü›ùƒbnü«­iúÄA.¥cc¨Xê3ؽҖX®M„÷+Õj²:1GôÝÔrÅYF*ìUØ«±Wb®Å]Š¿ÿÒ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±W›Ÿ!~Wy+óFÿó†öâ-+ÎÞtŠËËX¾¾ô`ºŸáAm®®'[xS‚ò,-“ÒEf¸i•zF*ìUçþOüñü óö©6‰å:iZ¦µ ÝÅ‚éÑܤwSÍhž¤­m¼â €°ž$ªÌ’0V¢¯˜?ç!l/ÿç ?2ô½ò‚ÊÓÏ_›ù~h&×#Ôôû*XèWóOa%ÅàM$—v\™íã¶Dš7ž+–úÏ£¹UðÇœí4-<Ågä_7_jV»ä‰VçIÓWPõÓIžôE~$³ki¤Š´s3@Àó£7Ƹ«ôòWJ¿ÿœ•òÃj¿˜_›·~uòµ–«a©Aä¨l4=c„ÎV?1YZÇvLWBæ+S?¥$GqÍ¥p–ª¾¿Å^Oÿ9 å»ÏË­_ÏVòK§yÛòûOÔ|Éå0ÙŽöÊöÊÑåhÃ2º½½ÊÇèÝ[ȯ ðž.¼–7EYGå>·ªy›ò³ÈþdÖçúÖµ¬yJÔ5ž «uweÒ¿ÕQy;ÅUT~Ȧ*Ì1V?å?#yCÈ–÷ö~LÑm4 Jïô…Ý–Ÿ·µ7Fm‹¤)Hã¬pFcTV`d#ÔwfU8Kû/¦Ó#¹‰õ+h¢¹¸³YÏ-"E#Æ%IUŠ1Ž@¿a±TF*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å^Où¿ÿ9 ä/É›íC×cÔ5¿6y†T‹JòÇ—àKíVD‘Œi/¢òÄ<£ÒŒrç4•XRON_MV!~Ÿ™?ó’–7>]ÔtMoò£òjî)Qº¼x-|Ý®#©‹êbÔ¬ÃN·YVCpÓz¯y ‘‚yè«Ùü›äo(~^hqyoÉ:-¦‡¢ÃÄýZÊ1©"Fú³>ï,¬‘ y¥g–N?±ÅY*ìUçÿÿ—ò¶ÿ*<Ñùz—U»Ö-Ô'/鯷֒¥Õ¯ªÞœ¤DfŠ17gô¹ðøøœUùù•å_ÍoÊí Í^Q±‹GÓV/Ñòùz…†—=•"kN0QUB´¤E­Þ=(ùð ½#v*ìUØ«±Wb®ÅXŸ¿0´¿#ÛÙÙ„ý%ç={ë6þPò¼%ÅÖ«¨[ÀÓˆU£Ž_F!EÝÊ¢ÚÕ]d¸‘•Uó‡¿ç?9ÿ5~½wçïÏK¸c×=)õO)éº}ÓùvÞHø:ÛÛÀÚ”HñB辜’B²ÈPO/ï™›aöŸóí 4½F+ÿÌ[¹õ©}ÑiqÁkoÅÉŸëíu+ÏÍ(±ðžßÒo‰½Qðb¬£Èÿó€Ö?—¾uòŸž<·ù‰¨C©y{P¶¾¾F²UE¸žÙˆÚ$–é_‘˜}^â8Ñ’[•_câ®Å]Š»v*ìUØ«ÿÓ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±WƒÿÎ^Kä+É«­{Ïrê¾…¨Yj^V}ý4½_ôüNR×ê“HC…yFô¦h­Ä×ÄÒÂ…U@~OÞÎ\k>BÐÏ+å­3X½–[»ÍgY†êm^-:D‘ ‚}Å, [‚æ?Œ_Cé[ü[}i$ª¬ß[ü½üÀó¾—?•¼ÿæÍ*ëÉš—õ»GÔ4MBêÕdkazu»¿N)øúW BZ[gš%h™Ä¨ª_ªÿÎ+ÿÎ<ë:——®ÿ/t¨ì4ÿKКÉ$±¾oB3ú×¶¯ÌÕSWõ¥Qÿy')lU”~ZþOþ[~PXßiÿ—:Z%¾§*Ï~ë,÷SÌñ¯5Ô’ÊQnóà…äePÒ9eRÿ̯È?Ê?ÍûëOóË1jú–[Z^,÷VSˆ¹úo%œÐ´ˆ­VE°Œ¼…8úÉW”yoJÐÿç¿>üï©ù’÷ê?—¿œu«?6êÒÇmceæ+Yï..4©eÓ_V;™n-å­Ã$Vë3+¾*öû¿ÍoËK-/NÖͺTÖ×®4´¼†òMNKWKŸ»I%Ü«!ú6Ë,­+,J†FUÅ^1ùùùõ¡_þIyÒ%ùw̾e¸ÔôýSC¸–?/kZ}•Ч´½¹ºº¼±Š$K2’‰PY='¯«,J³ÿùÆO2Xù«þqÿòïSÓã–+x4K])Öpªæ}GLÀ#0àÒÛ»FkR…K*µT*õŒU/ÖîõK.{Ný-ªŽ ibgKXÚI]P4³8n'/RfD–Q¿£òð…Õv›kpxjš”WÖ®­-¡Ô- ¼žîÆ)!õ¬E‰ WS8·†YÑcõV‘Æ‘ª˜b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ùƒË:ιÿ9iwæ=_AóÆ«åÉ.j¯¥yvO)¼š7˜µKèmm¤šâöæ_[¢úÏõh8žQ({¤ŽKtVU—þTÎ*þZ~Sy¿Póý…Æ«æO9ê¡ß™na¾º‚K’ææXš8!ýìüÈ–gç)^J®«,ÂE^ኻv*ìUØ«åùÃ//ywËßZ,vú_žµ.ÛË vg‚ÃN±fŽÒt†BÒ«Î9ÄóÈÍë‹H×í@ø«ê|UØ«±Wb®Å]Š¡ïïìt»OS¹ŠËM²ŠK›ËË™!‚/$’Hä*¢¨,ÌÆŠ78«Ëÿ%ôx|Åc禿eyïÏú}­Ò”¸–ö-7@•Vk 6ÑçD1 ˆ¤÷‚4Užýç—û¿A"U뫱Wb®Å]Š»v*ìUØ«±WÿÔ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±WþyÚézî©ùWå'ŽÒo2^ù×LÕôQsxöÒ[GåÄ›T¾ºŽÕÚôhd´àËé,·»º7нƒv*ìUØ«±T=ý…Ž©cs¦jvÑ^é·±ImygsÍÐL¥$ŽHÜde%YXQ†Ç`þDüü¨ü²×52yÊöš.µ®Tj0_÷m!˜ÅHî–ñ ˜mÖ(¾þ E^Š¥ú&…¡ùgKƒDòÞ™i£è¶¼þ­§iðGik¨í#ðŠT^NÌÍA»1n¸ªaŠ»v*ìUØ«±Wb®Å]Š»Iî<Ùå[?1ZyFï\ÓàóeüFæÇA–îÔgD„ɳ8•Ф%•HýÛÿ+b©Æ*ìUØ«±T=ýýŽ—cs©êw1Yi¶QIsyys"Ã0B¥ä’I…TU™˜ÑFç|áÿ8]}gä¯2~\ÚÜéþ`òO5»Ë^xÒ¤a¬.${ë…h$%•àk„¬¨Ío(•VÝæXMÄʾ—Å]Š»v*Ãÿ3¿3¼¡ùEå ß:ùÖ÷êºU­#†À{«»§Çmm+ÎWâh*T4’2D’Hª¾PÓÿç1?7üé®~UjºGåçøOòÛÍ~k‡Ë×ÚÕ쯪C¨úòGjðÃ'¡kèú~¬’#ѽiíø#”¶¼…Õ{>±ÿ8Ÿä)üÅ{æ/$kþeü²}N+xµ=3ÈZŠhZuËÚXå{xàuÈ¢qO´ü=Y%yPºüü×òF—%çåæç˜5/25Ýœói¿˜×qkÚ=Ý­»·©ndYµæ®KIlÁŸ¦Ü[ÓžXåïüä׿^—ùäÿ‘Ÿó~^Ò´WR¢yk[ÑÌÖú}Ä„Hb`×·zÑ]ñôíÚ2’­Èú´z®âÝWÕø«å̯ÍÉ¿7?7,ç?-umoA¸³ÔçÏþwÐ*ÛiÚu¯Ö^ÖÚxG…ä¸hífÌ?W¸_«´w++ÄU`ÿó—˜ßá›ÿ)~m]ÞÚkÿY´_HÑe¾Yði."žÛJŠÆ„•\«Gë£Éõu^‘ù3æßùÉÏÍßÊíVÔByÞé÷15_YM©êº“·¦¶š…¶–²YÛÚ£!’NsK:O"¤‘Y¥¤‰ÉTÃó+þq“Ì¿š·Ö:o›¿8|ËwùuLº—––ßL´žîrÞ¢»ÜX[ÚÀȉqepc1ÉéȆZ¢¯°°±Òìm´Í2Ú+-6Ê(í¬ìí£X`†T$qÇªŠ *ªŠ(Øb¨ŒUØ«±Wb®Å]Š»v*ìUØ«ÿÕ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±WƒèÌZüåÇ›§ó¥¦› y>Æ×Éž_†{Ý;XºY¯µ!ÖƒÅweõYˆ…9§ÕyÓŒM2¯xÅ]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]мÿó¦ïó^ÏòóTÉm:ÓRóô¼ ²KÙâƒÐŽVá%Ä+p2Ë<’9äŽ/ÛoW‡Õ§Uù#æoËÝR7Ô´1>ªßŸ–º®¹wæ­ Pñþ‡Ó´ØõI5½šEç+ñº‘x5ÇÖâTdýÏ×}où_ÿ9óä/+é?—Ÿ—š‡—5¼½¥hš^æ3Ë"sµ»´µ[i$ŠÊ™¦· ˆÅýXæàÏÆÙ%U÷}…ýŽ©cm©é—1^é·±Gsgym"ÍÐL¡ã’9•de!•”цãcþüÅòWåw—_Í^}Ö"Ñt$–;aq*É+É<ƉQB¯,Ž@f+1TW‘¾vU_,~Vëßó˜?ó¦³ç8¼Ëÿ*òÚãÓ—ËV“èVZ¤“Ç*Fñ}\^ųDb"I/EŠI^–Ñpæ–ʲ‡ÿœ`ü廇[òF§ùó­ÞþRk¤—VW–É{¯Ïi4¬.l›Q¸‘ž$ô#…=HÏ£3KqêX¤|’áWÑþUò¯—|‘åÝ;Ê~SÓ¢Ò¼½¥D ±±€•,I,K3³òHåžGf’FgflU8Å]мÿó¿Ížoò'åGš<çäK MKÌš  Ô"´Ô*mM­¼¨÷Žáf§l&‘Ud Ì€(vøWæ‡ý_üä—éÏÒßâ;O¨}oë_ ¿FXýGÑõ9ýWŸ£õŸKîëõ_‡û»ÔøñWÖ”ßó¶Ÿwrþ~þ|X~›ÎT#˾N“PºÔ,tûëPfºI%•ä‹ëK5Í•¤rpÓqÁ¾²©õU_7ÿÎI~lùãòÛþr ÊqZy_Ë–wvSùoÊš$×0hoêF×޽ŬÖ?Vê;ùbºGîe{oReå<ª¿CãüÝòÆŸùA¤~rùÊOðÿ–õ +KÕï~¯¾©ú] ôâÿG„É%$#䱿*«ÑTŸËó“óþj±“PÓ?14H-â”ÀɪÝ.9uUrVGêò²Q…$T(O% ÉXRÿÍÏÉÏÊïùÊ/%Z\6¥ëÛÅv¾SóvuõÈ-gšHÖgU†_Bá Û,r£ïEtŽHeýâªò…ÿœ¥Õ?ç­ìÿ,ç$4ë½_Îv6–²iZç•‚_Úê:8 ŽææmJö†»kˆnVrñEÉ—š¯ʳùÅ/Ë7ùfãóó[ζ_ u_ÍmTk°ùJBdºÒíL÷w1¥Ì¤Gû×úá¬^š4j‹êq•ä‚^ïæO)ùWÎ61éžnÐôýMŠQsž«i ô :«"ȱΎ¡Â»(`+FaßN1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»ÿÖ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±W͇•ôoË/ùÌ?)y—IŠ[‹Íí^Òudžæâg‚÷Hú¾¦nÄ—2NY(ⵎÖ16é˜þÝb¯¥ñWb®Å]Š»v*ìUØ«±Wb®Å]Š¡ïïìt»OS¹ŠËM²ŠK›ËË™!‚/$’Hä*¢¨,ÌÆŠ78«Çü·ù׿¯ÌËé/'¼—»ùt±oçS›Ë¶W—±2¬°YÚ:òîDN|~°ðÇ š+ˆ¹V%õcšòÎch^PÓüÉäíGʚƫ¤úzŸ˜´ #I¼Šêå`d±µ7—wZ‰ùH\¢Ø^2ÄŸVý쾎*Ëÿ,ç$¿-?0ô»$¿Õm<§ç©.Α©y]º†ÏX¶ÖÄOjÎb’jÈBÄéÇö#d†5^ÁŠ»v*ùbÛ@òWæïüæ^§æ[‹Øµ'ü¥Ñ4û;;+8d¾²}VIï]ÍíÌ–â.,Þ_Ý[Ç$’•&IÒ[K»h•eÿóßó‹Jüÿ†=Nîê] Ïv‘Aicæ8„—H¶PK,¦Þ[6š8Ï#SÊü¨Ñ«Dê¤ó‚_ú^mg¦G­ÙyžÊXîlüëmªM· ðÜ ˆä€ŠëA²ÚUSâ¾ýî*õ{?ÉOË›msOó%æw®kZG#¤\ù“UÕ<ÅõH¦2Ú¦­utKÎÏ­¤£‡Û¦*ô UØ«±Wb®Å]о`ÿœ¤ÿœJÿ•åéù—Êš×è9ÛzJš}ëpÐîkHçžQ/*]¼Ifã÷¼á´··høªI¯Ÿÿ2ÿç$¿ç(¿çÿ0Ï”üÉ•?E~Š´m Ëz]‘ÿÁcÅ`ŽK?M­ïSƒ[˧<¼úžœ^—ÕØ*È<×ù5åùÌ ÎFyu<ÁäFãÓ²ó6šú`Öþ¿%ŒvÐ=朋wnóElœâs ™n~ªÉ—×£¸UƒùþqCóóëòkOó üÀ–îãGÔ/ôÏ%Úk7wzΉjöÖk5Ÿ¨>±`œíîÓ{^r¬Vê`·UæÊ½£þr›þq'òÐþ\ï~[ùô?œôÑ:‡§i’Cmk¨É©j–š|"øÎ©(õÚ—-,r»7+™¥TN ¾—üŸüµ±ü ü¶Ð?.tûéu;})UïçUæžêy.¦p‰Pˆe•ý4ä労’0.ʲ‹½ CÔ5M;[¿Ó-.µ­×ý¨Ïr]Yýmsý^VRñz¨ÉÀ¯5ø[lU0ÅX?8?-¿4oµí?ÈüZíÇ–¥Ž aí¢œAÎÒ¤f9¤b™Á' y‚òåÅ”²¬ãv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wÿ×÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wƒ¦‹7æ7üäüÞb¹¸Ô-t/É}>-?KµkX£²¼×üÑg$·²%×ÄÒ$62Y‡‡áe™ãݧûÔ«Þ1Wb®Å]Š»v*ìUØ«±Wb®Å]оx󦵿/ΟÍÍWòL·—Nü¯òœV—šÚ²] KÝI5KSsg¤Ú¹J¶óŠ}q×ÒyaYàÀ8ýqW¿ØXXév6Úf™m–›evÖvvѬ0C*8ãUEPUEl1TF*òÿÎÉ]ók@¸ŠÝ­<¿çåú—èO>Çaα¦}Bö;Õú´áá™7WQéÏU›Ä2¬Cþ³;@ÿËç +Kÿ¶¦•®jöößðVV×w*¾ö°Ìÿï¥ÅY=ÇçŒÖžb´òÅÏå—ž—Rºˆ¼“Å£Ås§ArÂC ´·ö÷RZs—Œt•'{X}túÝÅ¿§uõuPþaÔ=¼÷ËCòf“ÿ*®Ã÷]yÃÌ/¦ë: þýž.Æ{Ëgø£dšêî>1Í'¥È«"ªÎ<ä.þ[yu<»åÔ•Ñå’÷SÔïd7:Ž£¨ÜžW·· ñMq3nîÉDT‰VQŠ»v*ìUØ«±Wb®Å]Š»|Aæ?ËÛOùÊ?ùË[íJÿAúÿäïå½£ùSÌz„óÝYǪZ­ÔoncX%õ`ººEG1úVþ«MÆæäUö½……Ž—cm¦i–ÑYi¶QGmggmÃ0B¡#Ž8ÐTUUTQFÃbú&ùyù'äH4‹ -<«äŸ§&¡zÉkmõۖ󹽕Ç4Ç9>Ó„_Ù\UåV¹£ÎMù÷AÕô›MB_ɯËéaó—¬ÜÁq§[kÞhæÑYÉkëÛ$²[é¢;¡=&‹Ô‘¤Éu‘WÐø«±T=ý…Ž©cs¦jvÑ^é·±ImygsÍÐL¥$ŽHÜde%YXQ†Ç|Áùoÿ8qåçÄ™žEóD¶žDôµ¸ò¬‹)œ%Ô+VfàKIíÖViÃL¼ã6öÈÂâFk˜Õ}OŠ»v*ìUØ«±Wb®Å]Š»v*ìUØ«ÿÐ÷ö*ìUØ«±Wb®Å]Š»v*ìU/ÖõÝË:\úß™5;MEµáõGPž;KX½GXÓœ³2¢òvUZÙ‚õÅPþ[óg•|ãc&§åsO×ôØ¥6ÒÞiWpß@“ª«´m$ê+«&´e=ñW“ÿÎ*ù‹üoùiqù‰}®Zk^ióŽ«s«ù™tÿ‚×O¾X`³‹OHš8äêövÖ¨Â_UÝ«2Ïi_˜Ú‡è]Ï>uÔ|ÉåŸ4j ¶súVÊ ©m^åe•-¥·xf~¸m¾µÀ=¯ª}HâUíúÞ»¡ùgKŸ[ó&§i£è¶¼>³¨êÇik¨ës–fT^NÊ«S»0^¸«Ä<±ªÚÎBþeé~Ó¬¿I~Gy.ÒY|¯¨j]Y®¥æùfŒ5õ½¤åDÑið¤E<ðFÐÞKqõU“Ô…W¿â®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å_ÿÑ÷ö*ìUØ«±W—êÿó‘¿‘º›×ȚǞô«O2~ôM“ªÛÉneY"¹¼Û[Ê­ ©†y£——áÊHù*ô‹ ûRÆÛSÓ.b½ÓobŽæÎòÚEš  ™CÇ$r!*ÈÊC+)£ Æ*ˆÅRýo]Ðü³¥Ï­ù“S´Ñô[^YÔu ã´µ‹Ôu9Ë3*/'eU©Ý˜/\UÚ~l~Vj^£­ØyãË÷Z.è~—Ô`Õl¤µ³úÛ˜àúÄ«)H½WcæW›|+¾*Ãõ/ùÈ=þíôÊUüÐÕÒ`[Ï-Çøvè-c»Ž ­nåâ²ÔYWx¤¸xÏÀÑú¾œR*—ùOò‡Íú÷æ]ÿæ·çΕ«ßØÿ¢yÊZz›ýBµCsõ´–öÚPi!NW)L8š7¦ÐÁh«Î<Çä¯ÏÊ/6þfлþXh’é¾z‹I—C×´ûÛ-54‡±´ú¬±I¦]I :¿­q Ž5Nsó¸{¯÷š^ïù-ùM¡þJ~^i~AÑ%úßÕ9Ϩê vó__\7)g‘c(ã Ò¡_­µ¤ª¬ÿéH˪± ¿Ê¿ùË”Õ4è¬??­'ÑeõÿKÞOå]. «~( W·T•'æõY9Ïoé/ľ©ø1Vgÿ8ûùaþãåó=…ßžoôëF²†óκ…癿½ôŒÓ-¾¥,ÖÑK+BŒïo?Êœ#ø1W¨b®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®ÅP÷ö:¥Î™©ÛE{¦ÞÅ%µåÌk4A2”’9#pU‘”•eaFUãöó‰óŽvbo3Áù§¾¤òÍ9‚w¹¹Ó¹Ü‡„Ó= AÌúqˆ8EðúJœНhÅ]Š»v*Ãÿ3¿3¼¡ùEå ß:ùÖ÷êºU­#†À{«»§Çmm+ÎWâh*T4’2D’Hª¾pòÿüäO<á¥ëú?çÇå¿.|·õµÔm¼×åÝ;Z¶ŽËG°qzðêPÆ.cªÁèMsj‹êÅ<Ÿ»²TõqWÓþIó·–?1¼±cç/&ß~’òÞ¥êýJ÷ÒšßÔú¼Ïo'îî9$×âAZT|8ªaªëº…õ/Óz¦›úJî-7NúìñÛýfú⾕¼>£/9_‰áÕÚŸÅS UØ«±Wb®Å]Š»v*ìUØ«±WÿÒ÷ö*ìU'ó'›<«äëõ?7kš~¦Ë(¶ŠóU»†Æ•cY'tRåQ˜(5¢±íм~ßÈMÿ9 ßš?3®%Ÿò›Uˆ/’<“¦_^ÙZ]éM,wjú£Û=´³\]âšÞÖJGa UtkÆ•£Uêÿ–¿—V~]»ò§”4H<§(¹¾ÐbÓmNžu1‘$¶Ë‰Ü£!™IýÚ*â¬Jÿœ}Óü­¡ÞùOÈ>xó_“ü™wêú>_Òîì.!²úÌa&úÎ¥cy{6å7îî‡ ä’X½6lUÚ¿ü㟕5½Qg¿óOdòÜ–’Øê^P“ÍzÄú=üs¤±¹¹ÜIrj²Q.R&à¡£*d*Ê<ù9ù]ù] Gä/*éú-ÂE%±Ô"‹ÕÔd‚i}wŽ[Ù‹ÜH…²JÁx¢¯ÂˆTÃÌŸ–¿—^q¾Sów”4MRŠ!m櫦Ú_N+3¬k$ñ» ìÁA¥Y|U”b®Å]Š»v*ìUØ«±Wb®Å_ÎH_þrùÏþr#Ê’—þjÖüµåKDƒ\Õnü» ìÜ\ßÛ½ÝÄÉ=”¿WbI#k¥Jðô¡šçÒŠE^‘ùÿ8“ùyùèkò’~aGõ…ÿ]FÐzPÜÑ=;[_VXá¤c‰’¯;s™}Q ¾Šª÷üUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±T¿]Öô¿,èzŸ™5¹þ«¢èö“êϓҵ´¦•øF¬íÅž*¬ÇöEqW„~ZiSÎ@ù‹LüûüÀÐeÓ¼½¡Ë0ü¢òÆ£ Aã´˜Bí®ÝÎÏqrѯգn0Ú¤I<»Éæ*ú|`öš§üáïæÿ‘¼•äGô§åæß˜.`ÿÞÀ‹6‘upúmŸÖ!ÔjóMÀÊœ#”qô#ôßœïõµUëÿó’?óŽ:üä‡gõÍBîÇÌž]´ÔÿÃ>”ÑÃb÷×ñÅÃë¼­î$1 -ãåéq~þÓq¢¯`ÑKý¾yõë zzܧ¿“Ô°vµ•%¸•å’Ic’&Žf‘Ú_U_Õ>§,U0Å]Š»v*ìUùËÏ>Pü¼Ðåó'µ«ME‡úÍì‚?RDæô¡MÞYY#rį,œ~cоH°ÿŸ‚ùwQüí¶òµ¾™~P]Ë•™î\ÚÞ‹¹eº„‚wH£²Ñ£,ÉúKº¿ú*úÿË~fÒ|Ùc&¯ \E¡LV½¥Å­å•ò"¯9m嵚PQ%/ =7C'ÁÃ„ŽªqŠ»ÿÓôwý ç“>©õñ_Ç_Týÿ+üM¨ÿˆ¾£õ¯­ý_ÔçõoK—ÃéýW…>:zÿ¾ÅR‹}þrÏÊ~}»ò¿øGOüÆüºYDZOœ¯o¬<»¨”»xåÞ­³L¬–Šò@âßM‰çô–dJŸNEXþ™ÿ8ïù³ù…ù¹¦þfÎFë^ZÖ´//Å$G‘4«KCDtºµ– ‹G¨ªÜJbœÈËtòº*r‰!€*¯©ñWb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUâÿž>{ó¾Ñÿ%¿.a–_Ì>E2\êö®+å½’Áw¬Ê±Ïªè$aeñIJÜ! +KA2®ü”ÿœuÑ¿)¯¯<ݬ뺇55X¤´Ö<ëªÍqëÏdͧn°I<Ê5¶„v–j«REˆ¬(«Ú1Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]мþş•ÿ'cÖàÐ-<Éå»?0hW>oÒï™94{[øîLcÔ%O­sµ»Ö)ÿu4•„­]zÿ“uß#ëº_ò¯u=+RòÞ›ÇMƒô ö×6ßW8Û¯ÕY£N²R1N(Wn4ÅY*ù¢ïËv?Ÿó•šùžISBü†‹F¸ÐtˆŠ„»ÖõèÿHýzY‘RUHE¼-¹:;Â’sTi •TGüägæÄš^‰ÿ8é¥ê^¯æÇæWèý#SŸOÓ§xí4-EåƒSÔÒÞAqˆGop]‰¡‰Ìþ¿î}RªÈó‡ëùg¤¦•äïÍo8i÷ñI™à²šÉ-.ͯ¥4ÖPIm(²¸2Ç %Èi®"†6%äþ²*Éÿ m¿0ü½¯þdþ^ù§]»óg”<¡ªÙÚùSÌÚ»¬ÚÄ¿¤l“S¹´º—Ôg—êÉulWDçê? F©º¯pÅ]Š¡ïïìt»OS¹ŠËM²ŠK›ËË™!‚/$’Hä*¢¨,ÌÆŠ78«ç‹¯8ÎG~qÜIwù9•äOÊ{¿©þˆó¿˜­ä¸×u S;ïôý=¹Æ‘y¼þñ ´»n´³¤ú«È$×öóÏIý2R”‡Ön-*½ãv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯òw—ÿó’_˜Ú¯mú'Ë™T×¼‡ÜZ¥åöczãGl“z‹w,—1Ë!ô9Ü$ÌìË,U—ÿÎ@Aù®-5-KòkZýç=ºšÂ,bÔ¤Ômm¡ËcrÃ=%’¡¡+3ËCð,­"*ùcþq‹Ì?ó™`Ò|Ϩi6 MoP‡ÌÓùƒó ÓY¶}Iõ[T…Ÿ%˜H^Þ8lââ± H‘âXÿtQQV?ùOù?ÿ99ù_ÿ99e«ùƒ@‹Ï7—1Z&µç­JYµ+H´‹™­­®®m/ï$¶q{ ð,M[GÔáo-»«2¯Ñ|Uåþvü¸»¶×/¿5?...ôßÌ%´ˆjzM‹ÚÅcæˆtéhl¯Öî7%xÒKK{ô1Ïj—“Ë bUå¿ÏÕÿ4dü®ó“µ¿&êSiæûD¼×þ¥œöÜ^îÚÎK[›ˆgxašq4ÆŸX$Wýê¨ùÈOÌÝsò{ò£[üÂÐt»MZïKôch/®$·Ž?®J¶±L(œÍÂib/;~qzœgGU «å‹oùÈÏ:ϤÿÎBþMÎ@j}‡›,´MxùjQze¤…íe€XÚµÃC,é(– tîQIq<-,’LÿºÅ^Ñÿ8;ç7ùÃòM6ÃÆ=îM Ë×W6ÿYÑôø H»$¾“™-½T¾‡9L²»*ú?v*ìUØ«±WÿÕ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*“ù³X¾ò÷•uÍLÒåÖõ-+O»¾³Ñ­¹z÷³ÛBòÇm‘¹ÊÊ#^(æ­²7LUãÿóˆÞ[òU‡äÖ‹ç,I.¥®ùÒ!ªùÃÌWæIuíl;¥âÍ4Ê®ÉǯCì}©yHóI<ª½ãv*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb¯?üÜò&¹çJ›Êz¿è_9ùWU·ó'–î%2 ¯¬ã–ªß Êm.bžX'ô™_„•ýↆE_ y›þscó·TóíÇu}GDü¢±Óõ»‹M_YŠÂ]zïO‚ÍæŠ[yÞÈ®Hâ xD³*~òÞ…_TÎ$y‹óÍD×5Ÿ9ëŸâ¿/ÜùƒTo%ù¶n6÷Z––·/ÈÖK›h½dÁ’4‘«´(mà·õ{þ*ìUØ«üÖò=÷ž|ªÐhŒº7´iN±äÝfÚi­Á ±@ÓQ%Y-äY^ ˜¤ŠT’ÞYW‡.%Uyÿ”?#üëæ=Í¿ç%¼ã/Ÿu(%y–l}=?ÊôKˆ'·76ö–Öm¨:5²½/­×ÔxűãëH«Ò5¿ÊÊÏ3j“ë~dò?—õjë‡ÖuCJ²»º—ÓE9Ë4LíÅUjvU Óe:]¶™¦[Ee¦ÙEµ´k Á „Ž8ã@QTUQE UŠ»v*ìUØ«ÿÖ÷ö*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»aÿ™˜úåo–™õ»{½CÔ»´ÓtíKHçÕ5 ëé–­ìà’H½iMKújÜý4‘”8«(³{ç…›P†(.³*$´è`Y\Båž8ˆwˆ#ÈœHÙ£Y%Uº¯üŽòÇ™ü­ùÅùåamuÏòÊo0AªYÃs2]7˜µ« mKP1ÍFéi<)éË †V‡Ó•^+ŸYW¿â®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«±Wb®Å]Š»v*ìUØ«Áÿ9çü¥ù‰ù5埗`‹OÔ¼¹üèÚ–¥5Ýûémþ±4²OõyQ}BÒ¤)é:@ÿVTƒþp›ó#Ì^pü®“É^jÑu ?]ü¸•<·q}yn-à æ±[#ˆ¥ÅœH\BÊ]G¡4’3ÎÊŠ¾—Å]Š»v*ìUØ«±Wb®Å]Š»v*ÿÿÙmoderngl-moderngl-773b733/examples/data/textures/crate.png000066400000000000000000001670131470420062000236300ustar00rootroot00000000000000‰PNG  IHDRÀÀRÜlbKGDÿÿÿ ½§“ pHYs  šœtIMEß ˜aL iTXtCommentCreated with GIMPd.e IDATxÚ´½Y“&Ù}Þ÷;[f¾[-]Ý3=’"HC”‚ e9h+l1ÂW6EGø›ø 9|ç Ë–´åC6H¤ BI`@³uÏt­ï’ËÙ|qNžÌ·ªz:äŠèèîªz·ÌsþËóžçˆÿî÷9þŇ7øYÖ„QÈôwŒD€!FÿŸ¿Dù‡@‘~1$P… h%Ëï !¤RBc1¾wÄÑJ²ë,íà !óëGÒ{ßÄü½Œ_>Dz뉳÷#-yïbI])Bˆ´ƒ§³çczÎ×<ßýÄÇ^\€@ ò‡Lo1½ÏûÏãý§~í«>øÝ/úŠùF…ƒõDÀùˆ,Œ¢Ò²\Ãñº<øì÷?Þìçñ±Ÿÿ_JŠt|íÁ…ô¿à9Åì­×DÜ»îRˆò‹2òº‰ã:ÄÖ¤è~tËÍ~Èߌœ­k”ЄüðùÒbúRJ*£ÒÂk]zs!ƒ'‹–°¬5ÎBLoª1 "‡Þá|Äú6òEðyÁÏZü;,!Òæ+5ßì‹uÍfY18@¥%íà½ÐÝñåD齉鎉{ÓÝ"ý†¢\O)µ‘TZÐYOo}¹Q~)¡ÖŠÊȣ׳.rwŽ6tY,´(%ðq~Mgeüö¸ØÙÀ1> ¦ÝÿúkW>ÈÃÆÀzÿYãñ͈ùzÅËu”yS×V«´D¾óM7_O‡Þc”DJnŒ¢Ò !'K¾òöS<Ò‹.›šÍ²¡·.GøÍWMRˆüìÓK~úÉ%!dÎ! ìàh”EÆIÎ4ó‹~ÿšJD¹…!F€qAUZòô¤áí' VµF Áfa¸Üv >äE7{Ë_~|‹õavÍóæŸ–|záÞAäH;~CIÁÙªâ|]§ &%µ‘l†Í°j4FÉòû>DBˆ%pÎãC(Y)2]¯(!J¦¿¥`Õ¤åíHþó~übËí~HÏ·”ÿ— 0˪G™ýAx]¬(¥øÖמó»¿ùM¤T¥B"¥šrÍ,ÅÏwÖ;oœóùõ<è‡H ÷"˸`cú@1NéHæÉ(Áɲ¢Ò’Áµf³¨ˆ@S)N†Uc”Š(•–e¡.*]®à²©Ñ9ºŽïÿÙ›é}…s¦‰|õK{~òÉ%‡ÞåÔožÇ KžYhíâÏÿÇýÇËa¦¬(ÔZ²¬e‰È•œ,4ËJ=2•áŠÆÈ’AÇá}Àû@ç"][¤iX­–8°Î38÷çRÀU2=VÆP„HYÒ…@mTY{züRJšª®oST«¢Ò©Ón“ „B 1C"F)~éKoB¤6’_¾â°X'Ó—’M^Øì³ÓONÒBZÖæ^!ÙöŽE]1ϯµÖ³1Æjq¿!A!e²‘R RØÈåVHÏ:Þº8áÍó5!xBxï‰Áã½CBÊl2õ0RˆôÙc ëº\k¦Et»íg‹+—w!â}(Y0„xô;ó’èu…ýTŽÄeß ¦ÅöÍçK¾ù| ÀåvH%`½çÐ{ÚY_4–ãû¼Ü9v½+eã¼Þ޹‹ãcf‘Û(ÁÙRóîyÅÅÚ”{,îí qo›Ü¤¥d¼—ÆÀ³ïBÜ]÷Hùå/¿É?ý¿ÍùÉ ½óôÖ±Ý÷\^ß ‚e°Ž¶ënŠ–’ÿX¿‹üGJñ¸ÿöä˜õŒ, _ ÈQœ˜6G*IŽ{Ÿû¤ñïû›è±ªüb]ͱ&®ãqC˜ÿ=Þy‰êC8Ê^f1^‡iцKyRÀ‘1‹ Q²œmìx¯¬Ë%F+uÅ`^\HýÝ®åÐYÎO%M¥¨Œ¦ÒšóÍ‚ÝÝ]*ƒ¼G…ŽFGzëølû7éZÏ®–1æ…!9YVyÑt!Ó$Á{‚·)’z›RÒÐÓm_1t-~|Í‹O¯‰û »©h* ,B!¤D¨µĘSð9¢Å©ã¹—òAG$fTôþ¨67¢1¼wXëÊbÁ—çPR¢”(‘ÝäÔŒ‚`$ÖEñJ—ú<-QJ9)Óã¥Ì5è å±áÇ2O•L”¸ãM]šßy¯!ÄQß4nª#Îygq.à;Z˜!LeUA}òµö!â| ízëJ?2e"q¯®¯5.„ •É9]‘¯qúc”Bªt‡¬GÙí!ˆ‘¿Y6¬›Uë›]*©ò»ÙµûCWJVïÃÐcL…T‚@*‰©TF•ÅEõ lÓBÊ´ ¤$x—n®6i(…ˆ‘à‡ãÚNN©;•±”F« Þöé9Ç”?_À9J%Åÿ_Z€R¥Ì©üþbŠ%J•È,u¥©Ç~‚ãEâü¦§º\…Ì×RH•®Hÿ2¿†(!NJUJË)R È 6•bq„Ÿsð7Núv`ÚÃŽàÖy­eßöiq{Ÿ|HãÇ !e1ñhEÿ‹Àâ‘v¬Ý âP²æ¸9æñ|áÇËÚ°^Öœ®è ÝŽpª‘};ðá‹W|ýKÏB¤à#RJ¼óéº#PJ¥5,M]0 ¬˜Ë 9‹¶!z$fB ¼%8‹mw4'Oó VåC–Z1_ ­òÏb*§¤Ò¡Ê¤?²Díts<Áù²b )ó_2Æÿ—/!ŽK-•7ÁT§Ê{uéÖo|ŸRA…$¢‰Ê Œ¡Ò ›eò¢3d¢lˆü=!äƒ 0þ÷æ )@ÄÒ£Xçèû~°týÀ~àææšÃ~_ Ë£ÅçŸ"Aºÿ¡¾æ¨eˆqÔó¤€'fÙQŠP2…•ƒµ!àÐY´îY6­«rGFàÂ:ÏÝ®%—îE)ÙBB…d.¹ r §Ký ŠÖ1Noj\´©Î„à!! Á{l ‰!5Âcd‘†|I©vB"u…ÔyÑ ™zDÞ@c]?–6 ¢A™ùStïlúÀÁç|*wîï‹B•ŠñR©ÊŸ·4— S—„(BEŠàJW¹ŒŠháS/q´èç!Næ”ùX–Œ°åØûÌ¿ï}˜šóœ1CXkqÎÓu=ýÐÓ÷ýƒf:þ]§Uÿ!6Â8 –Œ" TÖ†’©¦, Êz‹y£ˆÜ‡<|ó6Ï”BôÖåª"NÀ†óTu…@àÆ²0FüС)ÀO¥—ß ’ë<…”y¡"g~H°”÷¥óÂH5mÇ5pÕ,¨–'(]åt8A©1x¢ŽÓþ¸`¤<ª{™-Ò´‘ !÷ bÔ¯kˆç@h.G¦ÉõñF›N*ÑBn~¥J ^KCÌ 8̇J\ ¥ß13Î Çp4˜¥Ì ñ¸ö{‡8«Ý*•zšàýÐѶ-}ÛÑ÷=}ßáœ}}mò‹n‚×ü®¸7­>šÄÞŽƒ¿4ÈA •})0Fa´¦™ P#àœÏÍxÄg ¤®§+jc¾  KBëY0q6÷!ò(@ï02ŒùµãØ1Îêöà±.5Z2o"m*6§çÔ‹uŽr¡DMŽ!5°!¸eÇZW*U2‹©*¢NðkB‘8Ž®ã¢§*Ý×YÉu*¡8j‘ ¤ ä÷,D!@ô!æ4‚”z°Ýïý¬¤?óxåÑû£VB`BÞ"#që,Î¥ïpÖ2 =Ö8›f 1Ä/¤Ä×Të…#Ç •‹rêî¡McÓ<ÑM&dK+‰Öi‘WZ¡µ¢©4‹ÚPgŒ Ö§Ï5BÖUê‹•ɃÖyB¾ÑNHXÈ%së•©Òf0&mŒ¡ål¡&ºNéżÂ¹Ö!u®Eù°.¤n[é*e€ŒîøÜ<(%Ñ¥AŽÒ*ÓºRjÄÍ]Ú©žà¼ë Î¥¬¯z¸ÎïMîKêaôìn>ŒVsxuÜ\1¦ì•†T!%9­‘2òˆ¢r‰bZœ!8¼w8kéû?XBLõëXŽð2R¤ÅTúQ VŸ#w¢øà!MkÇ,,î§„ ŠPf<©Lý)H—-%Æ(£©*V2CA´Jý.ü˜âýF5o4 *p©@`Œ¤Ò£,9Í:Æ¡VjˆÇÇH)ÐR³¨*BTÉG7îã߉3œJÊDɹzõ9Ož\C@Dx7”!é¶Õ1O5ޏ B ´*‹OAð±D¼©cW ßgB„œðÃ+B®­å©ŽI~œ(<=v{( ÁÔ踄qáåƒÇ;‹†´QÆ…rÁǘ˔éóH©S ¥ #4!Oac‰*ÓÕ >”A•s;ô ]Ë0téýŒ Lƒþi<ÿpª*þ–1ªÌ5²ÈKÀ‡iç‹‚áO‘wl*•’œ)$BN%ž"!y!Ò–C?¤çÊÙCˆ š5J%Ô%BeRäÖJ¡”,µ|oÚ¤”`Ù˜G2²`p.Õòùù±yRë|,$ɱ'º!!—MÅézÑ*÷{ â`•Ò¨CßcûŽíö–¦ª ^2´w)°?2£Ña^£ÆH ¡MZ0RO¿)c~³!ßñµœ$zwÆæZÐ¥‰Í ~M]P›à}©Û ·g–ÇúψÉQs™#¤ŸÐ™PGy4(³„Ô&cä#åb"$äM“{“Ò,OžWÁ§›š†>çrC[°ð±®°Ö¦EåCª±‡>g#ˆ ”(ÌW“kÛq€†H¥†x¤á–3¬{D8¦,*Ê÷^è}(=AÈýÀXÛŽQpìâŒY*EÊñ^A_ ‡ÆÌËÒÀŽ“Ù !5¨Ì( CŽþs’Ó@p^¯ôgœûÌHaâÞF)×/ T+Ý0{­ûˆPL|\o‘8c• ú¾G›Ô7J='cæ)(/&k3±+×—BJdŒ¸rDiòÆ!Ñé&Ã)~A¸,ä×ò€íK¦V"”™J§ ÊIaÂ%BÄŸ‰R‰embVŽãý8nŠ\¯§•`Do‡»I!ÐZÒɦYæFNæ™Æt“Õl^2§Ø&ò_(Ðe˜±<]"Þ±1KfSä£#;9ŧ{ÀŒ9ãD±8\äN”M'Žxél‰_ÀŸˆ¸q0 lÊ/"„£ùÅ|Q‹9]"G/™‘01£JŒ²Jk–‹©ÚwC¼†XèÓéRÈ2„Œ”…T7Ò÷‹e÷±t¸ãzܸBŒ0h.vmǹI‹“qP%óG):#w‘áI„@ ™Ssäoa…¿˜oœ'º“– 0nŒñYø0Ö¦Eï¼g°ç.cÉ1ä1M<ÓEVèeb‹­JêÕ³Tÿúͱ™4—&fD3a]ЉÚÐ[Ç®÷ .b]àÐ{VM¢p¯kͲV…^1ç¼Ï§Ñ¥ÜÊâ¢Î¦÷Ò ¥®n]`ÛY½ç®µ„yë¼á"3€­µìú·Ý=­’ιXÇ©¬—!I“3b"$&ÁKï"M›GAe$' ]ؽ1ƒ>ÀeëøìУ®\ÞöŽ>Ù±ï=·­ÇúÀ²‘JÓ¬$ñÁ‚¾ïˆ~ó=«ÿç‰D ‘Q œJ½#ÆiŒ/…$ˆ8¡D"½@ÌÈˈ¨•n– i—Å¿ub+ŽdB¨‰QˆSÓ" Þãc"A%ÈL¤Têà‰Bbª ¥¦ñr©*ˆADs “¢:™‚­îñvœì;Gïw[hƒs 6psصIçàC`UkF6v<êmÓsm»Iøs4W“HCËTC_ljÞy"Y.jÎ6u©¿Ç:¸À®³DOé®\àó»Žnðìºô¾Æ×9?#×?}ÕñŸ}ë-~ã+ORqžÁ9lã8?•7c9æ}LJ½ou%ˆBâ}B½.÷Ž®zB„ç§5ï=1\,×ËÍÁa]¤w!/¾i›i)hj•²jL¼¢QîÕoés$‡‘}ç¸ÞýÜǘF:tžàªsá}_ü„È0h| pÓÔt,Ø Ôxï>¦]ç !±PQä ÖÌËD”©PÚ¤„?›yjê\j~]D25¾JHdNÃ#7GF‰ˆD´N0 ÊèŠs–¾w\m)s8˶³©1ó~p…ÂÜ»@Ÿ3ÌØ49ˆuSÃ|³·…Á8G]âÝ™#y¢ó›U[!×Ú^øëO·)”ˆK‰ ,úz¹å߯Wè]àûóOyã¬áÓ†˜3EÛ[ÚÞÒÛ$ñù=v6²"×mÚÈ!LývãrFµ³üìª?’[Þ§c"]Œì:—KfäÈG„3R—aúú>-6‘&ñ1†$¢ ™3%"‚P ~­Ä½Až@so.4´±Ôt¢Ð™…T¥®ù,JJÖ‹Ä… @ïÓN«ŒšÉ@ÉT³¥¿Aå_¨ ¤áÐ Îr}{À‡€ íúàÇÜê×ÚäÒˆI§¬•Bi…Q çJÉ´1mÌ °@×[^ÝØzÚÞb]ú¾ËåÌ(T)u} S3’J:ÖtSæ5ï¸P{›õy!ùkòò‰ QŠ1Òöþ@Á±¯"üÉeŽ‘}ùþõœ/5RäÒ¦r>ÒÚ<ókî\¶£B–ç²>°=Ø£²"ÄÈað4FýB寂®<^AŒp¯Ê%­‚§'«)ëÆt/ÆÙ€1U¾'áØÇ… !Ž:s2K³´ÆRf¶hB;Æ1o©Ö4µ¡·­5×»ŽO®ö¼Ú\ízzëYTšo¾sÊÛëÂè 1Òàî`¹Ýµì{Ç«»Ž6«³N&  ¬–£17Ý.D:ë QÐÙÀí¾O*7)YÖºàÙ•eC†ÑŒÉܤ(3ç&&©\iÊDѧ»Y$îCï¸;XÚÁa}âwÖ3ä5Ò k#‘BÕ×÷ˆÇ§ÎiÞ@‹Ç6JLÃIïCb†c¼°ï,Ýà2h!LXã½ÆÏVyFÐÛ$²y„®ƒÉIˆÇÞ%Žœ°YÉXNñžÞZŒ2\MÛ{zçÙ,*NWõ¨OM•…ðe²X­Ç(LLãÏo;b|„=~­u‡Ä0Qx¥RÃðó¥ƒw>p{ØuŽ«íÀ/>.âŠÈ±øßxÃiV†E"ÝàÙg’÷¡àëI¥‹lrY©é"ÁãC‘{´ÚñÂÝìS³3¦Ñ±këJˬN~•ËRM9êt÷½ËýÍž"ƒK5³ÏÒF‘›ÖQÇ*…œ¨Ó!bïÕ´eñŽÂ1䊘1¹#59@ˆÐg •réšòÂHŒ¢”Só§˜ÞGs û¼å¤•ëi%gDH!¸X×\ljÛ!8-S½¿YhÖˆõzªf×»2T3J¥ ë;–:¢$y¢QRòdex~¾àß~pÅ_lQ*UÄ \YRÚ¤R˜빨©âž®êhÔF‰ÍÊÅM› ”* ]f—k×Z^Þ¤ rs’Ä ¥˜§F"/o„ð…49jpÇr"F\€ÞEÕœ~}Ÿò+Ô‹â5X)Ålê›6aÊ6óÙ‹ÞÁõz8†?Çñ ^S®Œ‹Ý(YDÞ–\¬4>F¶gðqFØ›8Kó£@  .}‚u56õbÆ¿´™R )S Nÿ]çy¶V(!Øæ>·QR°ª$‹J²0²è­¹ép½ípyX\•\|à0øtAŽ ˜Ó8œ81JcD ÏÙÐú€ñ’U£J-g|˜‘€• CØ, M¥\àv?¤ù€Gž³0B2‹‚¿{2Τ™7{¯Ò2õ*«Zqžà&x"7{dz¦Öâ5Bžc4Ÿ7Œ¿wËmZ\§Mrž0Yi6Þ›ÁNO6œ?ÁyÏÝÍ5íáÀõÁñqèYÕŠU%¸X«"„Ãc_>D^Ü üìÊ–É®˜A O65ÿɯ<£’›»}™*k)ަ¶›“«“Ä4(ÚjAŽ~wÃÝõg‰‚±HåKt‡®Ç:Ÿ¨Râ i0N),N|(1 àí€,GŸå›oŸòâº%DX/ zŽ^Œ"‚ÒŽ2#A¢Ø”ÌV/PÉÂ(Ö•äâš“*qQŒ’´6ÐÛÀ®÷ÙøÊãrS¥%,s¤iŒ ÊiÙè\äú¸Ü;|œ.¿þ¥ ›F2 žÁZBŒ™^«‘Jâ|àîàž.h*çsfJ5qo=Û6ÕëŸo-ÛÎQë4No‡È}ë¯äg$ Š0ÞÜuêáç§U‰”ÛÎh8æÒA‹ãêß¶ŽÞz¨µšÙ–Ä2Õü<Ö§fõu|ÿõrÁ[o¿ËbµÆ{G ®íèlÈœœøh9ùXÛ÷žŸ|Þójï0ú¸±URðõç~õ5Áö\÷ö‘6UçOYŸœ²\.©ŒFˆHðŽ®=°»þ, §„À4 šåÛ¡gß8ŸJ¤Q¾+Š‚o¤²¤’:„‘+¥P¹ù׫»®¯³U•acäJZÞáX”aÏqØ/µž)ûŠ3¸@;8çXå…2 «k•”,Ìx“UñqˆÇFe!•Ði£Ð>¾µ|vÛñoìø_9¥R0Ø@ˆÁ&g!ևůHôŽEmŽùõyÅTZòd%Ø÷‚nðÔZóÖiŪÑå?÷ãÑ0¬Ÿïìf½iÔãèÍ !Qçc.Aâ‘>¡LçË5™¸ Áà"RÄ9“û¨~[oNX®Ö˜ª"ÆŠ“Ó3^¼xQ,XÜl:*2\¼¨«2yG¯¶?|ѱZ«#®ÏÉ¢â~ý §5t}ŠÒóžcì%êªæüâ)ËÕ†¦iX.jj- vàêê’—/>%„ÀzYq²ZR×RºÞrysKð!‰hT‚¸Çà)T*+ÁDFëbH(RHEòð^.äj#ÙµèûLÄÈ„ñ–; çü›ã,•lÅ7Ö“R&öè|…¹tñz?š#/FÞ9ÓlàÕÎqspüéÏîøõw×E b⫨™õâà2“òˆpWc~~—û•˜) R‰/í¦èìssìC‚:k=‘¾”NàZp¾Ø‡ÛyÎO*ž¬“Dz©Ð:Q4ÖËæµtŒ­}ÅbëYV‚çO–­yþÆ3ž<}†÷ŽíÝ-ªZpº^¤H$ÔŠþÙN?¹ÅÅž“•f½¬ &ÊýÒæÇŸÞñ‡ßÿ”»ƒ=š_i)ùÎ7žòö©awèp³é¶˜‰i¤¬7kÞ|ó9ËÕ £5RH”Œ´ûŸ|ú)77·“.[šª¢nBìö-CßgÔ©¢2ж·GÑ\IÁ²ÑEG"$™zøa)˜Ä‚ŸÚ¨¢e°>ä ëx§ôîgÒÃQªxÏ‘ôK±z#–1i0¥”dQVM…1šC;°=tiê˜Yš£Ùz_¤RšÉמVüäÒÒ¹4zw¾ú´fÙL’:!@ I(j¢ÇРX`Ëc²Öˆ¾Œô^“yBF+–MÅfYSW%%ÖþúãkÂË-OOW¼ùdQŠºY`š’@ô¦8bˆY„ß ‘º÷_c IDATjY6ë…¡© ON–ˆÑ¼ëµÍh`ßÙ<¤J=›Òг§oP/VI!¶kñQ08ÏʘL-QiJßïeÙ:‹WçùèòÀÿü½ì4XøG¿üŒµIž ‡…ÈÉRó[g+~ôyϧ×W»äý›ï¯Y-‡Îfhç&KÃãfV’Yš7ê*¥ðå¢âb³àéÙŠ''«ifðày޳ӏ˜*­Y-k„®tk¹¯z½Pyœ)ú¥µÑ¯þm|(©“}ÈrƒÒ©ÁŠë<ýàPÊ¥¬GeâÔ Î—ì;R.çùÞ—|÷¯>/>©cŒ{²®ùÎ/=Aã¸ÛÛ£LÃÚhž^œñÆo¢L6\ñw]GÛ'Ƕ˜©,«eÅ““%MmØ÷žíá@×(<ËÚ°hL*%ãDé_ªÓe5™ˆLÉÍ ï=èã à}`QZäTºN¢ø\C ) nÀv;‚³…/šäw‰Ç…µn c’HVöŠP׿A#"stx~qÂvQewé$Ì#zª¥UAŒ.N¾ö®àŸÿÉG¼¼mÙuž?þÉ–¿ÿþš¥Q ö6 5„T<=[9 5oS´’|r¹ãªM¬Èõ¢fµ¨²f5Ëó¼'fƒ˜9Í÷þÔt§ˆ‚Òxúa@zûè‡jõ€Nø¶õT¢~=4ºG‹,–R`ê&ExH”pkQJ§þÆO‚Ÿ‘‡ŠÓD<Òÿþ¯ßÿ”¿üèvB—r¶z²®øöû§à-÷³Å?”¦6l– Ožœsrö$-À ŠgÑ~·§ëûäÝé"xžž¯8Û,‰!²k=Û®KìToiêÄ,(V4y®s³kr³-¥`Qëûv.ŽLDâ‘YCoËìÌ—þŸ7€Ìõ]Ú=ª”A1zÀûÚ̬G Íä’!fç´H,Ö¯ûRRâEÀ(ɲ®hóâyãÉ™…Õò„ÕæŒª2ØnO·½FJø½o¿Ã¿üwóâ¦eð‘|¼ç7Þ[gjsÄ÷iÄÿädɲ©ŽìO‚·¥œ37ƒ¹çÐÂ4Tõ c4¾Û¢cÁÏ '½ƒ©¨jIôC)…©.!#NbÊJÉ.ÉGõk±>dûï„ÀÕMSú2—µ£»FÌLιwÓ¸1Æ(*…àÿøÁK~øám&ý7Á¯½wÆóˆ¾P;Æ™ôŠUSqq¶áôôŒz¹N‹‰u=‡¶e¿½£íûQøÁñì|Ų©¬çnßc [T ‰;tÔ)X5UÊj‡]8ÚΨçÅraóø@PñÁ K+A­ea èqìžf1Éþ£ 4ñ˜É©•šTG™m7:5Œ3‚ù„ô‹næHþòªJÑ[…óŽ»]ËÓ³5!È, I¦ªèêÀз¼õdÁ?ùõ·ø¿ÿês>¾M¤E†øR©)gºe_̈‹Rnf7Ù žnð˜ò‡?øŒ«+$2)‹JñO¾õ&*zºa(æV“[¶¤2šÓuÃÅÙ†ÕæešT=DÁa¿g»Ûqw{ƒ³©yUZQ+8?ß •¤í,·û.‰¨dâkÅ9´}éKŒV,²@½h·}6Vé"Ó LL²èd#“öxNùÚŸ®*vãA,ãÎ)›œlIŽ#e6Á’jOä篌*“ÄLÚÕûpÔX^Œ“=‰`Ukî·»–Óõëm2êÍÆSª^!†ïï?[óΓ%ÿãwÆ>Ý2¸À_¾hùúM¦Q‡rªVIÞ)µ!aIˆ`LÄ(M+†ÒDÅ0qh´®Q:ÙxD¥Q¦"d×èqp8bö!dÍt™‘DLÝ t’~S ÿ¤!,2Ç)‹†fu 1ÐÛuõøDÖfÅS^ãh“ä«!ÛÊ(=£ŒäûgtzîoïwÏwrƒuÉGf爯¼¹á×Þ;A˾ ‘N J“¾l*NW çTÍ©5R&în»c»Ûq{sƒ)“Œt³Ðœ¬¼ÜíS?àC’¹ÖFc­¥íº¬1H×´®t‘Cj-³•$†d>Ò§“­Š˜dùÑ"}FIWR&È:l9î|1Ûñž;ÚTM* 9w;5eâ¨6DŒG¹^œÖyº|3s0¥Ó墆]oi»¦’ˆì9ÊZL³‘¦¾ZIþáןòtS#¤`?x~~5 ”fÑÔtƒãГS„÷Yw\#¤Ê‘éù±Ù‚,ÜŸ´ =\MþžL`äɧțÞs™ZÊÉacì\…Pc¤ªš„ Õ ¤i…„·­-Ú„E%QÚ )eœ÷!»]äÉhÎÎJÉœ=Òܤµï~pCoC!ã%ùÎ7žñ_üÆsdp:[¤–"ËAk£9Ë@ÁÓ'§TÍ*ë´ ƒu\ßÜry}ÍÕÕ%Þ»¼Y ÏN—œ® Ös»o9t‰3fLES× ãâÉÛ³© ç›D¸ÝµÜîZÚÞryו¬{º4GÌB1ù d|,Yq¾ö&ÊHÂ,5q²¦¸? ÞM†‡R'‡´°86X&Sdã\qOÖpf'“'‰Å·? PV‹£%.Di’ÌÑ:ö½g¹Ñ,*…2…VTÕຖ "_ysÃüΗùö1?µçåmOï"_~#}†Û}‹ÒšÓf™fŽ Ñ;ÜÐ¥m•µ²£B*!z6ã„8Õ×qf0}îÑqb¼³~"o‚‘—î2U{¼V!Û¸©’ Æ VK& è*•lªÿÅ‘óœÖ©†Ž™-’-QÖʦxvµ·©‡Èpõfaø/ó]žn*>}uK7ØÌ$¦ÒD0F²Y6œ¬—¬WË”yd²—éÚ–›»-7·7ôm›J £Y-*Î× ”’´Ý<þcbwÖu2?h­£mÛ|†›b³¨Y. ·»ŽÝ!ñËŒVÔ½åz×—²fnJ6Òbv\„Á£K“¬f¤¯"ˆâ!>7ºµÛK)]\F{‘ÝáäÌ pŠöé]¨,U39=Ëܰ•T§§riµ¬pÛ$NÙ꺡nºÁ&oN$Ò,Îáý€’'›šßûö;ü÷ÿú'ÜúË]ÏË[Ë{K¼ÜîÚt¢H“qùñÞBði 'Mó(<—¹´Sê|2úNBÎqC$jL"þ™YiCÈ–Î'W4Ôñ ©ø!†¢DK—V¡•¢³™i«I3¥ôLè6nâÅ$'ŒÚ4Î{^\Þqè’Á—6†år•Up¬§§',Íäè!Ûí–Ûm*y¬³‰V®S¹s²N™lwHúŽT)¤ù*wth‹×ɪFJÁ‡/oh3¯h<>I«ñ<·X±±³Ÿ‹\Š+I6»O_Z­w9b¸óSç–&ÇÞ™â¨?Ýx½3ï–i †qY¬cŠ`dîIâËÚΖˆ˜|Z›U“ ´¾e»ïðÎÑTU.­Îy„n’@>GÑ'›šßýµçe1}ÿg7¼Ú§€µŽ»Ý!1=B‚TŽc/^¤³‰÷hÛ‹Þ=(8Oƒ˜Øœ JõÅ'S(s„É, š»ä7+mÈ<*šé†Ë!w¦ª2:9Í¥Š@à½ãîú \ÇÐÞqy}CÌ.nZñå7×ü·ÿø«8ïyyµ¥ëÓ𳮬×', 6«%g\\‘ãÃËvÆÚ •LçjUF•T=>$xŸ¡>ù‰XΫ‹3Ž á¨Î3Ó—ÁOBkH‘OÊd92öm¾ðã&S¡öûûÃ!7sI™…$ @Õ¸2,ƒo½Î/¿{šDŒüË?û”—w9ìwÜÜÝq»=Ü{¯¢R…0ÆÌÐ)‚Xã÷ž ^'Zµ€Ìc3ÃZ©ôžï}d°áCEÈ ‰Óù` ‘7MS½k´¦ªê£×ŸnuZ\ÃỿâGó!ÿêûŸÐd°bQ+~åÝSþÙo™};ðòrK?¤^­i,W+êÊPÅÉfÁÙfM]7 æu=Û»[^~ö9———ìîn9B/šŠ³Í‚Ez‚]Û§û-&m¶õ þõÞCô4•f½¬i{˧—w)Ó߫Ņ„ͪfÕè¤fë-ýÉñáÕe|:H•yUŒ<ÐÞY7©õdÇÓ21¿ñÞÜ@pÑ»™Ïçñ8}ŽœÌ]FxÔù壟… (š¦JQ2ÆÜy„T˜Ì¯+ͪ1ؾçn»åж Q0Y0Ž DI@åáHzõßùæ¼ÿl½ãÿÁgüôó–npô½ånß±ÝwÅÂ%¦Æ r<Êilæ§s‰ã \Ù/4Z«È=T˜M'£y$ˉى‡Jª¢s©Ì©çH­Ñ¦*Ï–ìYvèÞ¡BÇùºæ¯>ºæŸÿɇì{Gmg«Šo¾}Êþo³o{^\Þ% "D‹%Í¢aQk–‹†³Í†E]'Âà±ÝžÛ›.¯¯¹ÛniÛC~?ŠE“¨.•QtýÀ¡²„Rå9QšLäÇT%¹Ýv|vµ¥í‡£;ši)l.Ý,Û|Òã~uD%)üòÈîø¡c:Dp L1£Ó,ç¡­tj†C!¿·¯gv|”H˜Î´©1Í’z±FéšEÊk=‡.ãÅÆ`L…ÊSÛª’ í««KÚ®OÇÖu.z%Aê¼ R4}ûÉ’ßûö;¼yš"Ö¾süéOoøÙ«ëCˆì;öÝ@eM¥°>9=„ §(ÎÄ.¯s*ÈÆuÅ•Îσ€˜³n¦Ôì³&Aˆ)<…ñL1V’Lu§ƒ6Fý˜¥T9҉€<ì÷ÜÞ\ú[Ö&ðÑUË~ÿ“BÞ{ºâ÷û}v‡ž—Û”åzM³X°^-X/Wœ¬iƒÒ&y,u.¯®¸¾ÝÒvC9‰q<ÂhYW#¹ÛwÜî:¬Ogñ )p!ÐÛ˜MÞÚ,»…Û}Çí®Í^ÿSIÓÉ­CªDsÿÞ/ùþÏ®Ùu¶° ~ùݳ#¾ÒDÍ¥ x <9›Žb*f6_äç“Ö[òz/3à ÷‡3‹#Ö|>"³R %" ©¥ªº¢ªÔuU(Øû¶gRm®´Fæ4¶^ÔHº××W¸ÒmÓ$K­ BWø(°yúæÙ‚ÿô[o%ÁƒÜî>¼j¹ëÒ&îÇåÍkëFWâL&LÍRvƾ¤Î¼Rm™»/Û±ÎÛ*3ã²F‹RçÊâ«? xŸW'"J©Rû†l¶½½bw{‰Šü£Wü‹?û˜nHÃ1%ï=]ñ¿óeÝÀç7»ì)ª8ÙœÒ4 ›Õ’ÕrÉj¹H N)ñ®§;ìøìòšÛ}G7¸R®.›ªXž+%¹Ûuìö}:ÿX'¤už¶·¸¬wµÖ"Húï};¤ŸÍ!$‹–¡6àÕ]Ï>ºK\þ˜:°¯=ßð«ï©Ó"⸜d>ݳóÖ&1™žó¨½Qú ‘Ü ‚Hƒï’Ú¨·IrèCÌ0S,‚z£ÊÈdYè‡ÃÍÉš¨u½¤Òm©o·û„TuÖ†t cµ¬Ùí{†vÏ~wÇzs‚ÖšÅb‰µø­vC‹¨Ó@ç—Þ:áó¯u|ïƒKƒãåMÇé2Ùº¯ª$ ÿüf‡T:•A9:ÚåñÂÆ8SÄ©L4Ùd+ÆÑ'‡Ù…ÁYO7XõdÉž âì8¤Ñ0uvtCÍ®ÎGŒÛüßa° }OSTLGÛF?PÅ¿úÁ þ"SÆZ÷½‹ÿìw¾ŒužËÛ}jÄ•fµZ£”b³^RW£Ób&z†¶e¿ßs}»ËeR˜'—‰q*²z¾më*AœF+¬õ©±)˜yŸ¬nF··~pÓ²‘ìlgó\Bá|tyàG/‰b“?ûª1¼qÚ‡õ|!G§¼‡Ç^M&ÃãZĤ;‚‘ŽôZðf²Ñº|ðÉ ¦sÙ†#×ÌJ*´Ö( «EÅ¡÷tÝ!-Þ¦&Ö «Õîr¤T‡1É9ºªj¬“˜hY/IÖÞ»FWTMCUUEÿ¼YÑv=«EBŒþ£¯<¡³žÿó:ëùëOî¸Þ×|õé‚ç§Û¶ÏþšiS'ù¤Ë@"D(ÜÄtªdùˆ ͵°‰ûíàpÎc•Ïh“:òµ?²79r‘žûlŠ£2s\,íaÇööšF§I|è·ìûÀ¿ù«Wìûiø(…àý7Öü×ßy¿,þÁ´©Y,h)9ݬhš*ã& ËÐØî[n·‡b66›Rï2å<ÒvCñVM‡“Kœ )[ 2kUÄ#èz—¡£‹àlñ !ÐFa]à/_øä¦O‘Z'Ö@e$'Ks´°‹8rä¤w´f%¨ÏÙÚDÐó‹ÊáÀÑÆ˜7È!OV–UJU£AnákW]Õ×SW:Ôí}ß¡A+Åj³!FÏçWw„Ø·Ëf ªRŒ¨ ²±†Þvl·7œ¨ ´ÒTU“°ýÚ$Ó[è:Ë¢1,kÍw¾ñ €¿øðç/®;B€ÍB±©ƒMþ8›Zæs¤“Çúˆòé5¢Dçä#š¢Jò¾Ÿ¸ÿÚZ¬shmŠr Hœ‰¸¹ÇÐ/¡'†|nÚ½SQò¿œµ\¾zA£§«š?ùÑ þÝß\eë²Q€à7¾ü„ßýµçiR»=Ð ŽºiÒ|¥2œn–y–0¢a߸½Û³=té|ÞlJ²Q4Îû‚²tƒK‡oÔé<_£rÃ:¸d-ƒH}¤³àÏ1ò4íÁ&{”‘`<üðůû#•œQ’‹M`ïu=ӌΎӱµRLM°˜‰…›Ôxú~d™7nÇRV1)¹ `é‰êJ£µ$Ø÷©áQ2RWÉåYêš`{šZ±ïÒy®²ÕI-T7,W+V‡–í¡ÇûÀݾãA“²Ð&5½J&&¦uÝþ–ÕÉårMÛîUOëÊ&wºù&øÁÏo¸; ¼¼íøóà7¿|‚08G0*!Áã‹KDÈ.»²Æ,à‹/ªÌ"ó©D‘2/;Ä|p 82i©ñžn#FYï*î rÂì€ig-ûýŽÿåO~ÊÏ_íœk“¨ ÿàëOéËõ]j4MÕP×5ËeÃùfEÈìJ%¼ï[®nwìÚŽÁNèšõi‚ëóðRexÖT‰Z¾^ÔeZ½k{ö½§·ÉqOŠHcT1D-ÏCˆ´}B‹äx*€.[>¾îgÖ’É ÿâ´Nï#ÏîÓìǃWÆ)ñxøÉüëÓ›v’OƘNˆ™ŽÊ £ÿ\õ“ñi™é óß_Õ!ZzØöž“eE¥”DòÒD•¤µihS¡dE³Ü°Þ$f`Ÿ=*eB›ºIÍ`ÕàmO•÷ ·-}»£:9K¸YBܪŠ<­ QoÜø~zͶ³|rÕa”äKgU©ß“õ†HýÊÐ¥ÞÀ;‚·„8;¼Z&¤¦ÖŠE­é{›@€b2ºŠ'ÒÜó(ÓA‚œÙ#Î<‰¤„0È}ÿl…1qìÏÿùG±ÏîhdõÞÓÿôÛosº¬èÇͶź@Ý,©ê*‘Ù6«2Ñ—\·ÇZËåõ‡~ÈçÌzQЦ*³4GALe²p%&‘ÓÕím;d]v>î(œKbŸqÍZ—úJÈr$ÓG×=ýòPüRGþÎß{gÅç;u÷lærQd`€$m¡šÑð™àbR„ùâ95yÑO£æ‚ùÇ!îMŠaµH‡šÅ˜ìLÞ{ª“5Hð©¶Ô>”Š˜àðÖÒw-R%Û“Ós¢÷\ú-Özöí@Å)ºZ¤M`jü1&‰ð]»¥ÓšÅ2Ù-ÖÍ8”Z¡ú"¾YÖšßúÆ3B„ï}pIg=?•Ü…GËQ-u·ß³¹»bOÎâ†TÞ(¥ÁÙÊÐvª3ËyhŠÉøoÔTF–ÃFfçýcU'¡M8>o!Nl‰ýàù£nqar0Jò÷¿zÁ?þÕ7Ë"»;t8i–+ªºbÕÔ¬W‹Ä— Ø¡¥zn™=”¦YGæ$e‰ë(2ªkMS¥CèîöŸ]oÙw6yqg˜ÔÙ|Zæ‹ù ζ·Å“h>Ù- _¾¨xç¼æåv_XŸ•V"–ùÌ2EšÆg“ƒ9¥¤ðT&y)2Q—)â^*gããXÆ[F'Þùc´Lʰ.×~—Ç7ŒÁ»e&¯MCût¥`è;¤R(±¤®*6'§ ÃÀµkqγ=ôY9Ö¢«eª;«†`;*“D3}»Müô:‘®ªf ¢-Mí®ë9Y¤ViÉoó7ûzGïºî©òÂQRðΓ%ÿÕo}©8r;Ÿ‚Gï‹Åšº©8Ùlr žtÑ÷;°Û·Ü:†Ác}ªù«fÁr±Lv#¹a®KÈ^.û¤€ë»6Eýv ÄdSìu‚O½HœÃc$Mü]Èež(‹ÿ“ëž|²'̉RÞØhÞ?7(!XÔæ—\Tzò¯g33RúY(€*Sá8y±ŽÞ !_7³,ÛCj,ªöÈ™ršÖ%±³$•#ûn€yó¤æ`ÓAú7—¬–5ÏN‚푺Iu°®Q.b…¨éÚ=R$ Äê„sïˆaK;Xö‡TÆœJ ôH]H 1†­ÀÙžvœaª)¦ªYJI{h“h¿'k(8i¿ûkÏùŸþøçXŸœë^ÜH4o¢tƒË®“£74ܧÝÊéè׌6”Ir9ÖH1ä:Fl¿©&™Ñ¤©87d•Sß¶Ô*‚™T1—Ûž»Öqµ·¥ÑZòîÅŠÿæ}ùˆh·=ô)ò¯6,š†ÍæA>œÎ9üÐA´Ülì}f¦&-Áb±b±hˆ$‘Œs®p»*­h*ƒWw\mÉNSJŒ1¹œ‘<1óú¥H:ïC7¤ž@d×@-ñ~vÙòãÏÚR«æ['†/ë,f’<Ù,ÛǽšF>W>,oœDA1hSAÎ;™lä4äšÄÖël:sk>I+>ç²f®w=‡Ìê<[jÞ>_ ¥äz×ño~ø‚Ïﺬ/èËy¦ª1"y ¹a`èÚ<œ1,VÎOVTJˆl³Ùj ïú|¨D›Z%¾L°–v{í[ˆ¥tjЖËtðžY$Ö'g…‹µá·¿ñ”EF'¶çÓ;Ç«ýtD×[¶ûž—W[úÁÎè@2 fT1ê ³aØhê:7&gÄ:7: éCæí'T%=ÆÙþAiô½.ùù«}R Amï?]-~ûÒÁrµa³ÙpzvŽ ølëvÄ0pu7-~¦ªYŸœ±Z­2õ^ÎY‚ˆÁÓT­Õá'Ÿ\òòzË¡³ib­4F¥‰¿$¤³ÖªdOØö–]›¦ÃRJ”’ÔFáƒà‡ŸøÑlñ_§âK5:_ÇeSå9ÅÃ3æk£]br»SGAÁg•˜u ˬvŒÈ³J+c¬ ¯ %ª/˜ŽŽÅOÆåôbãÙÆ°¬$ÎG^\íùþO/'AH–*c¨3Í!†4 †¬ªW,–«„QgjðuŽ6Ot¶ª§LŒ§2bÓíoqv@DT ¢[,—(“èÉšÁE¾ñö ßzÿŒJ'Qÿ]çùèÚrÛû#õÚ¾íùìêŽv¿Ï¨/÷ñž¡WˆétqdD8Õ±}²¤s“©Ô4sùã½âƒÛtêJ´à/=[ó÷ÿXŠ4‹%ËÕŠår‰÷él0?ô„á@žW7{¶ûã÷˜zQ¬ Ç:lèzìp ØžE„:Ÿ]íøùËk¶û.SØZê| |cT1Úò™Ò0R¬U>5>¹dHþúeËÇyÈ5?cùéÚð+o-Y¢t é IDATšÄƒªŒd½¨§éŒ'Ë$þÊìPÁÔÃÝFH§àŒÑîdW&ÁZ –µ)§tTzJÉÁ”ÑG:€tPt: i¹å+ožðÕç'7 ¨ˆB¡tEÝÚ®ÇYËa¿Ek“L©––. L®·mvž>pqºÂ¨tQ•©G¢m÷û[äæ#JWèY.Wì¼§ùézϧ͒ó¼ïêpòß0ïÄÝY»ØE&ˆDB(†)™%È]–í*ÛU.©þ!ó—TåDIeÙ4É"Eq¹6çÙIo~ŸpBŸþpw÷9ÏÌrª¶aæ'ôé¾û¾¯ëw圾t™ W~ëóס´Å›÷WØ´W­Á+÷¶ÈS‰½*ñBÛmƒGÎáš3(ò‚gN8¿»qKjº1N%x¨ýC§&¹ Õ¤Ì"Keü=?zë?{ç Î9”9y‰ƒ m\Q· `y™£,'H² Z)ºÛ^™z±®Q·*²<ór†ªª | µ6î´cež@©Ï®°Útž<Á ¥¤‰~–`Væ¨Z°–°0uK9˹cÚX¼}ìûüÁŽë?Ÿ›óŸ9*ÉA„XæiŒg‚#M–÷M„°ˆnœuÎ'Ó;€‘o¥Vz”Ɉ (ÆáÂ.¼áÒå|B;ç÷n‡óÓõƧ¾h,ç)^¸>ů>¾‚ ?xí!¦E‚ÃY£E¡ ‰4ËaÐ×-”êÐÔH9G¹7‰»Xת^ãjÓ`ZfÐFÁ2 “ç(²’18Õúp4…v{…¬šÁYûвD[×Ä72Ia­Æoþ&y‚Ÿ¾{†m§Ñ(‹¿yçßúÌ•ô@¦ÚôJáÚÞe‘ÃZ^Ó=(>}2ñÆmŸ"ã„‹}þ'³y=šÓ"G‘¥HS ƒª ËüËoàçïžÅлDp<{8ÁòÍgF°× ·¡Øt:çºW°}Ý·Œ>ëMƒM£ µ—i>AY”¾¯oFßµä “ ©LpµÙâä|MvF/I¤D–&˜UfÓmÛ¢ëÈá×(Êa ;‘Òg+w½Åk¶¸ÙÅ„ °?}˜ãÙý‰ÏdîµE–ú@C?`3v¤qñ4}5Û#é¸1P] Ýl!`À9•m§W[ÒÜ‹|B¹yžÃYK,žfK›g¿®Ö ž^ájÛ ×ô~Ò,ÅtZa>ÁÁ²‚é.Öl…ºS4pÓƒC*“D`Ó¼z‹w×þ÷¸ˆ/yéF‰ó”NhIüØù$Ç­ÃÙ ðÿVýpyellÜrR‚y c´\…/ã{m=eƒ4Mc )éö³2Å$£ž9QûÜñ–§Ã><–N-w°÷#G0ÊNSÜXæÊÜk¼üÆc´Šº4œVw°ºóF— ‚Kt]‹®mÐ)å‚“ù‹iëÀM£èImS£×4Æ—Y ™å¾;Ä¡U‡z{Acyg eŠ¢(À%ÝA‚¤¹÷Ѧ_º»ÄßÿÊ-TYðã:üêÁï7ÅÚ×ÞWëÖs¸DÅÔ6™ÅÅ.¹m¯c|jœ k…Ÿ¼ö!¾ÿ«‘]s8Ëñ/~Ââg4KÉ+ÏRÕhë5¬j£ÉfÛt8¹ ÓçÓÅŠ¢"Kªµè{…®­a´"Ow8½ÚâñÙ•ßÍ-˜?aÓ ®ïϱ7+Ñlkl›u«°i:lj5,&/L¥@šH\l4~þÁ÷ΚáñÀ‹7JÜ^¤è½¾ˆaRæ¸s´Œíö¿ (ìÜ®j™ TT:E8§¿ávòê”¶³ ÷Ïkè^£ï6à.…V*Þ´é‹]¤¶µ0ZC·£³ [T%žui¬ÃÝý'Wtùùèt×îã×?s \$p®‡V \:ßVK z†®iÀ½E0Kˆ$Ãl¹ï[“ ½¦îG–Òd²Ùn ‘’“¬òq¡ ¸µ0]9Ãt¾™¤2AQ04›-ò¢@½ÝzŠË>wgG ~üÎ)ZE"¬×la,ðâõ2B—´Õè{’*Ì'9)*ýf Œ#É´&Pž=¢í êNã•÷Ïñ‹÷Ïizl,¾ú©=¼ps>?FI 2+&©‡¯5Œª!™ƒôyoÛ«ÖZäE…¼œ€ ‚ðCrtÕ¶à (‹]×âÂÏú(…(² ói…ýE`µ& exø‰4Tœ3?±øè¬ÅjÔŽ>‰Pö|æ]xs_+%®íO°?+T>4N` u§=?4ÈBø¨êHâ¥×YMAƇ{±·ŒŽ«ë[ü2Øå”öô@®Du¶¾‹=~Lø=âI4vâQÓDF·×¼”xî°À·`ŒágoãÖþ×—¥ïá’f\xd]MSƒ Á'ÔNKr,–{°î m×SëÍ9䉄5Ív…b2óySÿ lÑkúùÛ«sTó=È”°‡Å¤B½Ù / l7[$@¯Q²¿û¥ÈŽï¿qŒºÓè ðÆÃ ¬sxéFéc{h¾ª•WUnˆ•$$²$%«dpº‹`ÝðÆ ÃËoàõ¯<]ø{/á+Ïí}bß[¦%,H–¬U£jÿIöë ÉÊ œÌ0™Îiàf,œ3´ø»‚Ó…s½­q±ª#­m@½çXÎ'˜O h­Qw4‘g†¤"ÒOY¦8c0xç¤Æ‡§-”6;C.Î>{TàÙRTeË8¦ey•¡×&&ãXo± „Û>ŽgeºÃ7áì k=ø ñ6çqÞÄ`—dž’3¿Ó„ê ýgQèÔå;fùÐå;œ|#LiÀSäil—jcqs‘ãñJù7üä­ÇøÞ7ŸÂç;­È#‰æexâwv"Ͻæ'Çr±ÀÅå%IjEÇ4R)¡”6Wp“Ò”!ÉüÖÔPÖ × Íêål ždB¢œLPo7ÈòMÝ€A …FžJ|û¥#8?xãÛVÃXàíGDCøìQé÷›®Ç½ãKܰ³JC¤9dJsÓÕt2øÐ‘uÓG9îã«§ë.Þ~÷‹×ñÙ[ó§×¾HÀD âA¨¶3òDÆKÞ庎ea5£ª¦C<”³èÚ¶WÈ%HçW\mj´ÕÈC–%˜–%ö™ôXs áK·ËMCÉØÊ:3›ÖàáÊàñºœ~ëÏ%ÇK7JÍi¢»˜XNK´žmê§µÆOö=M#ÔB*è¬8"ÕîÉi0¥WX0gzâv=o4@ÉBYʹ×Ieú¤ý‘s8³›#‘‘5†t/þ© ìù‡åFÔ´Å´Œºlc-^¸^âGï\Âh‹w^áçïžà«Ÿ¾Fãw׌ºCŽižRþW’a³ZÎ!Ï É—fæS k×è}Ò ƒA–ÒCÀ뛃%I>ñA 5´±èúls‰¼šËœˆÈEIïË4­ŠCžIü½—¨õ‚Þ8¼ù¨ÔÏîe£Ìa…'WP½Æá’#Ñm¯v¤ãÅ^+ƒþ¬FéÅe¿ý…xáæì?xêõI@ßÕ°¾ôcÑDÔt=’$A5£('Ô7V÷èºÌ”9¡O.W¸Z·è4Û¤ÈÓ4vyÒ„£nZÀ9HαmV[2ÉPûÕŽðÀecðî©B­¼Ìz£ZeŸ»Q`¯¢Åm1ŵý)¤P«6ʤµ¶Ð’N \ “túû0\dƒ)ÂËôe8`è­ïH9¸­«ó˃|\îƒF]ŠE ”4Æ-`™'$»èæ_y’%ï*Wø¹Ëiƒô–e‚g÷ ¼s\C:‡¿|õ>šNãÛŸ»áscçÈ[h×€s"ŒI™`³^û]* ²¼ÄÌ\®·Q¶ =t«ë:{>[ ‘I1suS3R)0w…¬´`ÞoPVoÓ³¨»p)8Ò”瀿üÕ#tÊ@;àþ]'é€JìzÇçkαœ•O-f¥ šÞ îèßYB Úßúüõ§?c`œ¦æÊXkз 2ÉÈ7í…f—›ª7IŠÅò"I {í]cú®…pÔRªÇÙå&.f MäùU‹¦n)gq¬ë–ì”]?,|7„æ5½Ã;§ ugw¼ÈŒ1Ü^¤¸{£L©+—J‰çníGÜ{X#´ûÛÑF<ˆGVm.áé"ëZa>¥¶)C‚õF-‡Av®µ—Cð=ÌÏVä'³û½ÞÝÿ[' 6^jB¾Wðg ×âA³ý@æ]ÎJôÆàreqm–à£s†®§§ôgïãöÁÏNÀõ2:žz£ÀEâ9¢›ÍŒM$ ¸LQVSê¯kp) Œ!iµà¤Ý\‚OÔš+&°Ö i;íÕpõ©5`I!8&“©ŸŠÒT3Ái*ñÏaÓöøÑ['¾Ÿ ¯úRâæÒíè‡î=&ŒÈkôwkqº¢¡àÅF¡V&Ö§Ÿ´ó;çÀxŠÞÆ¡O«EÊ#,7ôø­sÈ‹ ³Å¾ÇQöt** éŒÂ'š®ÇÙUMvGM]žB&TöT–Óœ.Õ†ì¤ÆXœ\®ãò“³é'¸½Þ>î°íìÎ*O8^8*p}ž‚í$SÆØlRDá%HF]cÌ ™!íÆÏazŸ|ç ™ù­³°šVÑÏâÿÜÎeô¥`J[¿±#â.Å`N%£GjF;J_ßÍÔ œžP¶œ¢ï –Ú`’àÁiK”þô÷ð¿q×fè&kÀé80Žcëõ“I‰4%ÆPUͬ· 8¨ÿ4çŒvúíe5¥ÇjÇÖh›†„hZm i5xZAŠóÙ õfƒ¶#íRxþ£¯ÞF"èbl­CoŽ× Éc†k³,~Æ9\®khmðÜÍ}¼ýp7î_aÝR¶÷ݯÜÝ{zñƒÁqI / À‡–™ˆâ@Õ\¬k€ L¦3TÓzÕC Ýw$ù`7dÑôëÛ¦ƒÖ¤>MSJ_™MJL ¥ˆïÉ¥ÄÕ¦Æñņ µÖ} ‚¡é75¸jÌŽX-“ Ÿ¿UbßÏR¥&m”RRê#ÉÂà=œÖT–—¨f%ÚföjãËĤçsÁ'»­3½î<—,’;>mÆbÅ^j"881}(=<<hÝ»l "8l¬A×k´]­í.Wh”b¯=“ÞŒžÂ£ý)ðüQ…£YJZm±ª;üñ?À£Ëfpö}¹ÓtttÍqŒc»¥áœ— ÊjŠªÌ©k‚_]“VÚÚ» ÕŠ²Šõ³6Zu°]M“p™`>_ ¬hðF~&r¾û囸ö‹×Pf2v])¼õ¸µ§éó¨[…_}x†·\aÛiœ\µ8Zȯ>·‡ßxñð©Nq›F¡ë4ú®³Šò8÷Fò—›išcºØC9™ ë:hÝ£«·h·$þ4æŒÈ —ë+ŸÈ"“Ež¡ÈS,çL«Ld˜Ì–H‹).·=P·*.~72í$‰ÀªuxõãzgñS–Ë7ЏøŸlã.&¾Þ7DóÐx£™-öQV̇èz¡XÖ[-9Ãêž&અj·CyæjwøN2oÌS¯d¯m| ÿéi1#µ¦˜ç±÷zÕ-zá´ó…¨`œ3dÑ·¿¨pºîðåÛSüìÃ+œ×½fX×þøÇâóSØ«Ân$˜É3r’„ÅuÝé8¥Éõd2%nÓùKiï=«}ß‚5¢š’þÆ—NMMeeiµô~ó d’`¾\‚s†Íê ½Ö`ó¸ŽßûòMÀ÷_{ì…]Àë¶œáîA?âãµÂÙ¶ÔÕºµ_¢×¿ûÅëxéöâ©_k‡MÛ”Ø×©EîsêÑ´E5AVNÁ¨NA÷=Úzg{$B@z4Èå¦ÁŪö^]桺äåOi*Ì}¾±Rίp¾ªIÊöDdD0³||ÙãÝã6vz†„{à3×2TróTÅ{Ó 7æpÎyúõâ!Fxzf.¤)—è Ai’K%‘äÈÇ`Œ‚k-ºf ­zp!=vqç×±^1êO¥íß}ŒÄYŒ‡` šª ê:ú`”ÒØ´:ÞÎwÚ}™$"üÕªE–™_}v†_|´Æù–úìÛ¶Ç¿yùü׿ýæ $ .TÛiXFdá$I)ö§í;‡,Ë!’ “j « ñõ}_¤ #Ü:— Š¢ãy^Ö¡k[úP´Xƒ„10>E’$˜ï€s†õÕ%Å‹¶Ê«5~ïË7±nz¼úÁœÃ/?Þ • ·—¯NÖ=a¸àŸ¿1¥^öÎâçPÆ¢öVLã Š4A‘ŠøÙuJC)¬(Á“ªSžâM“`Î$!àpvUãÒ§«Œ¼¹’À·³éyš"M(­ñøä gkBÄŒ¸HnãBàÝ“.ª91ŠÖâŒáùk)®Ï“΢—8—3ì/*ò ĻC¨Ùµ6H|ãExÓ‘FÀ„¢†!ìNµ¿ÿYaãöÃ`Óä|p4†èU9¦yîÔxRz- #ðg|C¨2K2†]£Qtˆ² ¡ã¬0‡½y‰Íz ¥ ¾þÜ /¿·ÂEMêËm‡?þÉGøÇßzÎRz"P0‰M­`¥CÏ©Hu¶í0¤YŠ4/0µëõ£ê rÎàŒ†jk.f)¸L—zxUK_@¯á솄}“=$Rb± Ϋ«s¨žÚl“2ƒàø­g!8Û÷WØv$îûÅG0.°í˜¸¾¬0),')>u4}ê³¶PÖ`Sw4ÌaU–"Ïd\`M« –SXH´mG_¸Õ°º…€dç l²ªBrdYŠª(1›HÓ‚s¬Ö<:9󈛜1à+‘*þÕ‚U…ï=L†òDà¹ý³œÇR~b»˜–¸¶œD?çŽ r)9ToÁ3é6éõgÞ£b‚àÍoÌÆßUr¨}ôÿ p™]»“à0¨oÇC¹Y‘FŸö“éH„놜`¯åŒÌâežú¡—Û ò”ðýÜ'ãR™d«ÊÂ˰¯Ý!OX¼7|x¼Æß<…óqŸ&“x­»‚ÖIšL ë®kCVN0M‘HééÆ »tß¡k6P•OB¦È«)Ò´u ÕÒ›K¯ºX좚ÐTUõdÚ¿þão<ƒoÍ0-h$¯´ÅOÞ»Dš&øÒÝ}|úú7–Å'.þÞXl;…ËUM={k0ɳÝů4 “È«9ò¼„u¤ÄÕªÓ$'–&gÀ¦V¸Ú¶”ÊâËT‘HäEŽiUaî£cM¯ððñ#|pï6ÛÖw_H#¤TëV$m(²o?nðñEëÑ6~m–âË·+T™@ÓŒ!OÉ%8þn´—7°x¬`”$ab‡ Y·Kú‹®O¢—yê )õðKw¦,ð-~ñÞ)œ7±žñ:Už@µ5IŒFšç#A\‚b‚ÙlJÞ`)Ñõ^ã=·m³…R·Ï¥È'3dyIº¥Iw»]¡YŸy>ÃbïÕdF5¬ê±=ÿèÏàÓ×g˜2_ý¢Q“ 7—å'/þ¦ÇjÓ’ÃÎÌ'…§.”ŸƒL2dE…²¤ÌâTp0§ ™…äƒøpµ¡4–ºéÐ)í©zÔãŸU%öæ%Š„ãâòïüÏ®†TxÆè˜€Ä}Œ1üêþïŸ6£Ð<º`æZ/Þ¬0Ë…O‹'WܤÌpçh‰å”"ªÚ^G`•õN¾`ÿœÇ–r$ß6Læqæã©/cÀ冺YaÑq.(4P’Â7P;BóFrŽºÛíJvÚŽðèO,\£»x“ŽÇƒà1QR }­¡;âv‘ø£ÿýÉìÔ–:7~ð¶W%¸{ÇxÕVüé+ïä½ Î‘¥ež ïjÛ©:¹@³Ù õœ`>Ÿ’·TrÂðùãÒôTëÿƒÛûRÉ£ûÿúñ=¼ÿx½s‚=¶M €„qóiñD>0C’çÔ,KêêÀ@:Zü»Ž9Š$Ò`R"Í2äy†ýå ·®-!™Ãã“S<8>GVAÍk¢a'äíuÞ~ÜàþEw}ÁkÓ_{vŠOä¤sòå Ó2Ǵ̼82Øw“©¶eu97rríÒR#ºܹá«Z¡Õz¸A1ÝŠfg}²…’^€á¯$äâxVï¤ï:èÑ?ä/ æ; žëÚNAîÐiûDŠ:žHAd¸ë袗%ñÝ=½ÂÁ$‰§Àù¦Ã÷ßx¼{?áBÌ`T‹Nuà‚Bã ší MÛÁø‡`:­èÈ9êFÅ#V«]³ö&{!äÕð'%Ñ&.V5¶uCfASãªñ઺@œáî~ޝ<3Á¼;»´L½‡Ì»çz%Î1ˆ„î\ŽSf³L’]Þ£ÖûE£¶l@wJÓ$=èÂ#@XÎ{µ­ñƒ3m µÁ£‹fgVÚRBL`¦ï$ê9‹f»¢œ°Ñøxœu%}Æo‘òH:X·f§Œ2Æz~þÓeõ‘ŤðÇ-}Ÿ¿Uð2ôÿòƒsüä³§HíUž®‡îZtJA&)ŠrÇÚfãG÷y5ÃdRÆwWw*ú—u×B5Û(Tã2AVÍ0™ïCÊdˆÛTºÍ%8Ãl¾@9™Á:†uÝî<ÿÍï|w¯M0óY¶½±øÁÇø?ø!ÎLª%Tˆô¨P'‡7'ÒŽgè‡ê{ôþîÒvz¬ »¿6ë¦CÛÈ4…”yžâúÁË*ÁùÅ%Þûøëº‹Äæ8öþ))ýsŽmÛã•·x´Ò1º@p†g÷2<TŒs}²|Šƒùαh8Þì¶j9G™¦$áî{¨®G’æ˜Ì–8šÍ ª§¶ZQÍ1©&ĺt@ÛyÎ:ÕÕèê:Ú<…ÀØfn IDAT”HŠ Êé2òeL¸ Ö—¾3%0_îc:ŸàQŒ~ýᷞŠ7瘕‰/1^¿w‰þïßúV×GÌ›2Owf<)a aÀ¡”‚êZtÛ y08G‘¥˜)¤Ÿ ¯·$mH’‚ Te†;‡sL2àñÙž®è"í†${šèš£$¾jñÓj¬Z»/‚1<³?,~6êïWyŠÛG X?p –GpîánÈHcœrâóàÜqC+uª(¼ŽZ}»m¨AœdE‘%XNËx¸{˜ã™½<†j+mð'¿¸‡õîC 9ŠTB«Ö¹!ÉrT³%¬³èš5})"Åüà¦Ë%¡ÜõÕ;E£~ÕnHbì­žœsdåy1Ýq¸)¥Ðm/k %Çl¾D5]€±§‚ôõ;øæó‡XNRpN%ßéFáÿ~å­¦&À´Êw?dŽVÚ1¨®ƒî;讎â.)ò<”Ú\®( $IJ‘Re†[ûfðñã Ÿo 41 ]®“àÌ{ÁÉ\óÖã¯?êè÷{#gøÔaŽç¯Oé€&e†»·öQæ:e"sÇZô‹ûÉðÆàå5t§ %P¤7ø&^†C¢£wÿe «¯·Ý°Ùz¨ª_¦„`·Œ3䙌VVg‡‹1®|úx§L&‹øÍÕ9”ja!±‘5±5)½ãk¬Ô cê,d½œb°Œ ‹¨‹p!9XT>4›~ÖK7Ã}€>ÔM«ñ¯^þ'WíŽÀIHŠsTa’áÖ~]]“\ŽH4ìÔJÇR*Âz1œœsã*Æ8ðƒYŽy™`oší¼a*qÈtÂ8ƒƒ²­F–MÛÇà²Öh={½ï5ýYÆžÚýp¬³Ñ a½lb^!ÏvÛd¿þì™Rïnñׯ=Þ9±8£4rXÕnÑ4”ÖkÕuè¶—0!è*-à ÖR9êFkz´*‡œ¥ä—$ÍQL—(ª)àÛo½¶Tm¯|–Är¹D1]Â@`½í°m¶M‡uÝáÆ²Àõ[ŸÆ¼Jý Æàb«ðÓwÏñÃ×`{y†~{«?྾×8»ªqµU°ŽE§v–ó2E«zÜ{|‰Î×û»Aæ>¦(•H‰²Hñ‹{<^uq·tX”ß|n‚çö³§ÚÖŒ1Ü<\àÆÁlwñûä¥íhbë|Œ ¼„/™­·f:; ö3IÚÞ % Ôþ÷zXÛ­eŽðk7p8/È}È™`±ÞÛa=¤€J _QBsÂÝGYÄq:]e´+<ù+I3¤IæoÖÃ.U¨»[Ö¸]!ìSÆ÷ƒ‡’…“`mÔ?ªÈ\ߟ¤7´Òð…[åpÍvÀÏß;Ã=Ÿ5>d"< dz µ!}½†î5q²’ 饲JÓÄØšíö½ªiÐ"$’¬D1=@9Å ²öè¶—°¦£Z|:Åþá5dY>P¶µÁÉåyüÓï>»‡U$é5Êà—]áÿùùGèû<ˆýÆ¡´ÁÕ¶ÃŦCï› Œ9$‚áp^Aiƒã‹µº¸Òâ×ÈÓI"1«2¼òÁ.Ûˆf”‚a’àKwJä>úuŒ‚œá™ë Ü:œ?µøCP^×Ó´< ©D!/¹>.Ê"ãÁwn€„*ݺÝ~¨Yj.V v”gçÆé™€7þìP*ƒ°CÚ3¬¤`àç…m§Qw::BÚ†L$YBßH4¶D]sã`87„> Ú½øÂH±èv˘7àŒðŠãSbVå8Ú›yºw•• îìežADþ/~ù0Þ¸Ð%‚#K¤ >„ÿ}ßãêâ ]Û@[¢¤žB‹L†ÔurŠicaµB³>'ž>¸”YŽj~ ó½ë2õb@k4ºÍ%¬n‘g)f“ ׎å‡ä‡1gk¨Ná{_»…¯>·D*i¡+ãðþñÿög÷}*ü°Ë@) eÈ1LÒŽö&` 8½ØÔÃ3‚ŒOµ4½‡CšP>×ár‚ûç->>¯c‹³Hª)´d+Ο¨©¸s´À¬*ž œ{r²Íüwo=Ï„î‹<&¶D_tTª ŠSãg>Ö90/±q^5žõ~ƒ ѨƒáfЪ ©äa0Ü'^³à üäªÅ¶ÕXÕ=NWínÜŒçZ:£‡‰›ÆpŸ  {BIä>M%¤“ÄaYßBû5” ã_ËyI~âѯO˜äD pÎáÑe‹?þÉǸڪ(•B Ièö_d“2G‘SIÕ+…ÕÕT×ÁX É+X.áDl­éb¬…íê«ÓØ2HSä“9æ×!e ø–ªÑíú¬o°˜VØ[Ìpãæ-Ìæ ôÚD†æñåÖZ|çs×ð[Ÿ?B–ˆø@¿ûxƒÿùÏÞ¦A—O¬§iö4"Cw8˜—œáÑÙŠ@[^®uOP­ 9ù ª<ÅáÞ'—-~yï ÚcÛ³„ãËw*Ì šÔÊF'CU¤xöÆ Çš~7 nôëj«ˆ j‡Uaô˜Ã³«c£HÓ°µJ1)¥¿[(Ϩ¢êÂà|MÓîN)”)ß ,qÖŒ"³‡œ©˜×ðÄ,*Oøe­`|ZÉÙº£ÀdB†xNžKgÝpËÆø?B›or 2Æ¡õ®uNq+ÆÚ§Î®-§(²!Y à³G¥NÑ_øþñÿÛ>À_Å“ g0ß-¨Êói‰4èšÛõú^!IsäÕŒSK—.MTß+åa¸}‡úâ1œ¬{O¶.&˜í_óé„mGüJÕ®€¾Á|Zbo>ǵkGXÆEÚv=.Ö R)ñ›/á{_»ƒ"(È/üó¿z|ÌiŠ<ÏQ•%fU2¥²‡sŽãjÓ¢ï5ù¯ýVúûEž`Z娛Wxt^ão`Û‘ä¡H8>³Ä$¾uM@m¨O_)îÞ܇”Æ $Å,­ÐÛ§ïs§«–Hwš*äõÕ#­æ@£²^zA—`’vПá1ÛK÷¡$Ǻéa}w!¼ÛO‚Gáããš³Áž<\ìÄPŸ}XÿBÆ(mØ(Ö÷Ym¼E?™,¼вdpçþ4 ƒ’±"ÔŒÊ'=²Or!!³EYâúþní¹?IpmšÐå“ÛòÊ}¼þñeD»ÌßE˜@YV8Ü[ È8T½¡>;,¦“¦³8~"ġҀ2ÖB«ÛË8£i®Ýô›ˆÃ¶¡äc,>ÿÌÿä7ïbâgÚ8_uø—?úŒ9è^¡m60(ó]¯ñþƒ3OÇ3ÑÉ€°iB¡Õ‹iƒE…ûg[|ÿÍl¼L¥J9>«Â²ÚÞ¶¬Š ·$›¶I^¢˜Ì‘–3 ©qâH®­´fŒêq8 ÇŒÏíun· &+ÁMuG—êpFlt² ²³Ú—ÝÌ‹–ýôÉ ÞÀª¹`Oœ<ÀB‰oF€$C<C”¡h$ëUƒtþÄXíxëgÓȸ¿ ¹¨Ñf 2}(¾êƒDZ É+¤Å‹ù×÷§ÑÑ£Ãá4Á$¤8õu« þüÕ‡¸wºÅoÒQÚ÷Æ‘\àh‰å4CÎ{äÂ!O9òbŠ¢ò‡7nÓë![§±}³B½:‰ !0p¤å{×nú÷Iƒ*@ù;Á´Ì°˜M1ŸÏqtýf¼ó¬¶¤ €O]ŸâŸ}÷Lrê»·½Á‡'üÑß¼Õ5Øn¶hUm«pz¹ñb³à» yîéŠ,ÁÞ¼ÂÁ¼Â«\à‡ožî,þÏÞ(1}k˜M ÜØŸùÅO‹-I2Ê^“ Ý›F]°AËãFÊÇ(“‰¶  £®_ô™Dpa{fÎÞâCàüÔXÄ˯ÑSÃà•ÅÝéúp¯ ŠIÒnÀdžä6¿ü =ÀECWÁY’Ìöªó '6†¢Ú¸¶d’Èx‘50^]®80ã2HÈ "ÉÀe Î.&ñƒ•‚áæ‚Â¸µ1C~n«ñozlb+Ž1øA^O4‘`>›!Ͷô!3†rº@êésDž–þRLe‹µÝúõÕ1œ!Ý— çȪ9öŽnC$‰CÕt¹]ŸÃêÓ*Å|:Åd:Ãrÿ0 .V„&€½i†ÿì7ï[ À¦ÕxÿñÿîgÓH øduÁ(ú5M$ª"£´–*ǃö¦þ~ˆ?}õî]PVp•r¼p½ÜQrŽg>“ªÀrJq³Œ3p‘Äz:D8 )©œ±´/[ë"B}Ü^d#óJèKõqwÐÁ¡ëmü};‘´|7‹:"æG“1óÓE홋 3á5ÍË$λ¢p³éÁw©¹ˆòóx›·¦‡ñÞÓð@ô½A"UCÇzCè æ“2n$ûˤ€ðüÏÐ â‚lq!tÂù1~x³7ç˜U9Œ/k2ÁñÒ’Á³ééç¬êöêC\nUlÇ1Nn0ë;<Œ ¤ykzôõŠFôœ£ší“¢!XYÄ J:th×g¨W'ÞGä<0޼œayp‰„ H¾vu ­LJ‰$!Ù‚Léò¬ÅñÅ:²ðï^›à?ýg‘úväåVáµ/ñ³÷/Pæ)ÒD"Ϩ»•¥ Š<ŬÊã⿾?C•gø×?¾‡w®¡4Õ߯:|ö‰Åϼƿ,RíÏ0-³Øø"„ Ëa²?,Àº£W4«ÇÍyî ñ3c%Ò(ƒ¶']RØH mpg=ZÓCÇôˆJ9ébœI3†p²9P¦‰à;ÒkåÓ}F5»‹åó!IÊêŒF×lÐÔ›ø{»^Cp†ëóÜ·º|+Êy8)#ª3G+¹Aç-8ƒ¶ƒdBéCµyLö{rÄþéÛ˜Mˆº ŒÃ4xá(ßq9'«?yç4θ׋ô= ÌzcÕùØIë×|p<¹q7h ýx†-–Á7PŒI¬å(TYìÄã¼pû‹iõ‡Ó/]Ï!˜‹—hç€WÞ?Ç›÷¯¼Ÿx˜'Ý£kô=e ™Á™}»!f’¢˜Ì0íES…­¢L°¦#d}qŒv}A“VN` I1CµÄÏß;ßù2ÿè‡âþY¦#S ‰Ú |áÖÄãĽJr.'xæúÒDîª9G"5Õ+OpÂò¼‹&u·£äÐÜkþ…?ßﵯ´Aדé)¢Ëýå:vte$¸‹’ï”bÍ0P Ÿ_dX¹§á?qNñ$…a8Â(eOÄžm¸EXi¸$³Q‹Ií|•_д¨Ç}`É™–Á_zéÒÃ}°Ø8„QÁ¿±ºÓXòaØÔâuxá¨D• “bàtÝá¯^{ŒÞب®ŒÇ‡`³Þ@µ5¬¥ìcÓwqª˜eIìܨޠ÷ÇòjÛD à°=U¯)bVp0ßHÈ'{ÅlÇ ÁüS=)S,*ßt`Ql¸Ú4xpz?§?øêm|öÖ ™‚?þɽ8øûÑ['xxQ{¼… w |þf…Y!#'¿ÌS<{c·Qn1Öãǵ?q3cwo¡t §u¯-Z?èz‹p×¥6§ˆÁ€táa1!3¬¥ÉìàUcÏ€ Fµ¡†€IgŽ/kR„‡ËÛCC×®7£‡ó&ØÆŽ€ñor#Y+ÁRYŒ@õõ¿1ñX ™c¿%F.Š-U÷wè'Œ¿S„£3&ÓøÓÛ†Ï9´½ñˆ JY — i!ñå;S/êÚrï{Pà«Ï-üPeXTýÚcüìÝ3 Lð5kHw¤£“%´j`tÝ7±ß_–‹%Ë=tJGIÓQK³ï T×bsñ}WÓ.©|IŠlºËx|Ýa'vp8\VØ›—1=l8gW[|ƒò@-ç7M2µ„Œ_áÉ ¤NpÖD'<š¤:î)àøâáãݨÁ|Û*Þ¶½sÇc3B.@@ª(?üú¤Ò&<(¡/€S'«.Z¬=O32j´Ž6’Ðr!âåHÚcÞð)9&eŠYU *2$‰ÄóG¾xg¶Ó6ÖáÏ_}ˆ_~xÕ•R!dPÞ#l´†Õ ºkзX«ÁP•%–Ë},÷Ñõ´øëV¡õfxm,ÚíëÓþ¡®I1–Pxœ§Í‰ày°ÔÙÚŸWƒŽÉ·¦Ÿ|þÛß}7–…ï…ÓûZÕÄö”>.‘³*Çެ¤¤9Iï}°½¶Oiw±ñtÜcãµöæ>Ôíþn6³VNa¶œ!JƲçpW ›[£´?A,´µÞÌäwüž@À”àÆ)ñ#ÀVxé²KwPö¹‘DcçÄÆ`¬'Q(Ã2„Œq.ox«£Ö–ÂK( ÓAô¨$s–˜EÒ³`ÓD r‡7¾»ºk[ù†š/O\Kâº1Á8?.r? Fö0öf^™ô¤mÐÞó±ÿÎЛg„>$‚J TzÔcà£z~ÜQ¢’á:P!ÓD=“‹Ã4ØŸWè ðî­`,@¨Làqºúï~vÿᣋ‡@Jç%ËÊëì­¡ü)U¯àt‡T’l¸*+,÷W¯Í<Í IDATst½Ã¦éhÀå»fªÙ¢Ý^@7kº;¹aǧN‹Ž‹ŽùÒ9‡ÛG Ì'ùh祚öjÓâÑÙ*©þûßûÓ‘ÞÊï=Þàú“7ññYMe£ï̸m„jq’ëÕ¥aè(} ÂãË&þýežÄËhˆ ærg úf˜ g¨Ê yžc2[ Ÿ.ÑŽ®×~SðN&¥àLO©%2±ˆˆñ¬Ëñ‰~ݺ¶@U¤;§¡µç+Êï ÁÒÿÃï¿€O_ŸÐô8›Óu‡ñWïáå·O¢ÊÖái=|°^†I.÷u5…âÑÆÅG¶TƇÌhç®êZeà ÞùV‹qaJK-Pk#6Ç—u\OyÂ#£Ô¡h¼±jÁøN%ÔøìµøT º ñûü`–Å#k<ѵž•ÇÛl8vâIÇÒD  7ç)îìeøâí E:€WÃ$¤É"¶BíhônÌ`~êÍñntI¡5Ö’Ð˹ØBŸHŒ1üÙ«ðÃ7O¨Ë`“ðÕÛøî—oìxŸƒ,ö/õ(.tÁ9Ê,%ÁjÛ ר÷]í1#DcK¤D–—HŠ)zGªÖØï÷~dæ|–²L|`›óèÜxwœãÚrê»TØ™­œ^np|±!S™áŸýÞgñå»{¡•ê€MÛãoÞ8ÁOß=yh”ë¶ëéŽÄ4×D’e>&ww ?Ôf$£Ô’_$ Êƒö)X![E]7:=ØxÂ<¾ÄÚ}<þo!4†Å×;L£=+ÈŸ&©£Öó(—g^¥#™ëðCXC¸]ÓƒewÂ.‚i:ð“Q)´sL9ùR’TálÝaÓl;ƒ‹m?|éBÒÕ ð(”›ðÃeÑù [º¬ÕjÐ$ Îñý×ãµ{W±Ýº˜¤øö‹×p´(ð…g–øƒ_¿Eò€Ñ.øþã ~ðÆqüïi*1)³È'ÝÔí¹éɨ»-à,²Dx©r‚$ËÁ’½•€Ržç^Å”.ÿó1 y OÉ0«r\[N‘$»­Ö§_¬ã—ÿO¾}ø­g0¯?lbh{ƒ¿ýà?ÿ2NáûQrz¤²’‚ ‰3?wæ'¹QéÉYô}‡:ˆC·(”V¡‘" 8‡NN”H¸Ñås¸Tìè÷þûxÓî6vlø³þõå¾<29‡OÈ ¿ÌøºSS`›5Þq3øg‘(ì†~ÓÓ¢#ÓÇKµðgW[å;Äm·Þ¨vûÈò>\7Ö¢[‡"á±Î ÁŒ1üù«ñ·\ÄÅT¦ß~ñnïWñõ|á™=|ïëw½6hмüö)~üöi|¸ó,ùÿ{Ó'Û®ó¼ïYÃÏØã/@b"A€à<Êâ$R²S.•ÙIU>%©|É_‘?#q*IUbW%Q9²E+2ek°DJ$ÁQ HÄtç¾÷öt†=¯!ÞµÖÞçô…¬®‚ª@¡»OŸ³ÖÚïzßçù=È’Ø}4EŒ6n´åÐÒXg3ŠkžŒ e ."Šsu‹Cµ-"Iµ)â@´ðåØ6ys†iŽýÙRŠ Uo§5ŽÏ œ.ËÐüä‡÷ðß|ýY¼üôÒ˜RcZeð“÷Nñó[ š€ž(ž½êK­ 'ùF`x²¾±N*áŽÑnÀ"“ºcq/iï7€/…ýJôpb¸ÌÞ~bÛËç}ÅQ¶u׿W2XUÊ娮 ÷ OÓð/æ\„¾8 ƒ1†NˆñÓ`kLX„Æn~8BI!¨? p¯·¼±àÔñúÐb=r.s¤ jê ]ÛDa0ÔPÆ s)ëiDðO_Œ×ï,ÐtÚùc9>ýÌ>>|i.F\ùùãÏ]Ço}ò)*S¦·ø³×àgï†M§1Ò$ XU·Â…Q-Úr fZdÎtI #R²Mr8NœÀ(YìŒ12HÄmßà3Iƒ1öçãÞmûúýáé‹¢ ìá,ÃùåásÏí÷›Ü¿¼·Â¯îÈ“xãô¯;Z,ÌýÍuÛ Ènˆ‰¾cçU¸eÝ9’M†c.óùK«÷£r‰ñp!=[ÕAù9u^Ÿ@³©á±X>¥¾ÿã[Ý_lU׸’6e&|ž£ß!øUBÂ^Â\{8¸fýåÄ-V)ʺ rVµ5fO.¼Ã1ϼ$ïk=ÁŒ¢¯êP ¬ªݺnZOípã dz—r¤Çß[àdÝ†Ë’à Ÿ~fŸ~fÚЇÌD ™Í d&$>ÿÑ«øÜs—"m,¾óÓ{øé»'áoe "Aè¢nCrø„kË ûM$1 c°2‡ 8WéÊ ƒ<‰èß¹p€-RÌ(¥Ÿ¸ wÆØß!Œüàž‡¶Ó¸ÿxuÕl|Ï7_¹Šg.O¡«ÅOß;Åw~v/Éòú?UÓáÞ£sÔm·ñ=ÿùžÂ'žÞ%»¢Óȼ~çò³û(ê­Ò7¶Û%2â4r Ö>àZ „6t™ Î]Ye‚„%•ÂE­ò­Ï¿/GØ@v1¬Óá´@C‚` LÒdPç÷±¬~þÊIf?0³î‰€ òÃ0»a¨ë•¡Ôϵaø¯ÜùU¹›ÞÒ%XndÄn¤Ç0Ù¬«aufM¯éÞ˜4–HbòÖþô½S|ï­Sœ—$Ÿ‚N§ç¯NñÕ—.“`Í2JWQT'õæ×nB«Gßxù ^¸6ÛØÆXüùkGDžë4âH`:ÊÜ;ÀPTÍ…zÝ®^öslKË`y %äµv›À× £4FG-äcg·g.~\Ù'aÛÆÈÅ=î<¼¸ ~ë•«øÐ¥I(Gµ±øÕÝþã/†»˜µ–ôEƾf$c²zlŽ´xífÄ ¦³o¡t;é4Qžóïlþs#Þ‹jY¿èÛÎn\ÜcÉ1Çaò.œWG/t³"ÿ$a[š° û 'ó²×­ š¬G¡¸I ôÿïé(EK£ ¬ã” % ‰µ|[5äØ&ÍùÇì(‹¡µÅwßx„_Ü>‡6ä‡,–xåéüÆG/¡éÀc$iŽ8Í ­:ÊP Q £Æð­W®"¯ß9ošvãGË_{é2g8ÏB©ÑvY²m©0ÐM¦X<‚1$)'énª)®žîO\0ŒÒ„4ùmK² c§I–o”•q„ë‡D›+ª¶oýYš[[_Ø/ÝÜÁ×^º² 0ç¥BQ“fk(s—®ÅÝkœ1Æ¥‡z¢x/v£‹ižÄá.Ãܺb–T¾­jý$kàœ2LÇ)fã4¼_¡(X™óÀqj}þ³7Òo…QŒnÄ~Òò’3ðeÙ†…º„UÔnê:P h÷ °-©š6©t­«A@ÆÐh£ õiáÓ,ÅÌøch• àÕ¿«ú¿¾ûî–añÇRàóÏà«/]¦,XH$ã$ÙqDà յ¨‹Œ¡´È8sD!ÃTWiƒªéˆ§ ¾ü‘C|ã•kAã7½ÒßùÙ=üèíã@¢þO} f®„jÉW@´5&SÄ£9ý׳$qŒé8CšHg)UXÍ7ç ³q†K»W*m·ž´ >ýÌþÁG/mHß­•Âýóf#°NJéâ—„{âÑÒQ©wwFq/D34„œäI¸Sø;ƒGMr×.£;T@­¸Å;ÊbÌÇ™ƒ¤9: sÐ^»yrO³˜®®#Ä  ·tE^R ŽÝq3WÄR€«A«h”ÈAíDÒÎqYèDˆC!‰¹-.N°Ÿ Ø‹¤À8‘Æyš‚ ád¶½n;ŠÆy†NCjÀÿú~ Ñ”KK‹ÿù«S"5Èq>Aň¤„V-ÊõÅòÖZdãIÜ ¦UK›r Õ¶ÐÆ¸ÜXIØÑ2ÎðÒ‡¯à¿þÆËøÐ¥IpDùMðW¿|ø÷ÞUÓbUVX-('P]=xÄHÇ;`\8±•RLFIPèVM‡Åº È”íÎХ݉” Ó éþu¾ªpÿx¹±>÷Ü~㣇ˆ\9ä˽7Ž*Ü;k¨TuJß¡Úw¸NÖu뀺^IK 4JH!!Õô°ve¡¯G‹2舼„ܯ˜Në0 Üe€m Wï«®w·Yc(ôÛ±A‡«3†oÌpyž!O%æy„YCcHzj¶®vïÛ`Q’vA<ר%wC28¶Ë–âŽ3¤ˆ .”ba™w/eØæ‹;Çþø'wŒ¡óQŒöå§1Ni‚*Ó ¢$GÇ` h› MI”EMæ”´>hUZkÑ5%š¦D«t°'Nf{ˆÒ‰·¬…Ö-örà?ûäUüù/8~yç<(µAˆhúâ ‡ç¨[…ºU¡7nŒÆx¶ $,8d6ª–—K¿ üºS‹¢Æl”mȆ›Ÿ­9Û?©ÏW’HâÒÞ$¼ÇŸ{þg믾}ž¬Œ¯Ý]#K#|\ƆË3ü×éª º@«y#I#eÀʳA7æÎ£eè¶%‡›±Nœ3hMеµžg˜OÒÐë÷ X€Q®€¼h}g‘À•,@ÃbÉ!ZÀî8Ù²Gzs¼Î1$IJÜ-¯Á·Ö)qÑ{i‡ƒ"£;pN;· ÌgÈ’hcñÿà­ÇøÁ¯ûôÆ0Ëcü·ßx.ÔÆq>ë?,º¶E]¬ š Q!ï†.õ«I>¨ºuU¢mh#9Çd¾gA©hœìYµÆY„o}â*&Y„þú1=’a¡ û{m‚4–Ô®¥ÉpÞ¡X#Égˆ“Œ6¨»Ø¶Üø^)[8#—±Xµ˜#ùäM`‡§ý³®«÷øœˆ~pÆðÕ—¯ U¿º·èoü~zk‰Ù|.Î(xÜA½Úr9x²u½¿Ù©,,I¸e†Ñ('r[ôኖØGË¢Þˆ;ª[ƒQÊ‚:XròŠdIðšþwŒćÆh(ÝV8ì¦&éù–dgÛÃ6ïÒk@’HPM·5ëÜŽ÷e”‘+éÙ•0Û•¿×ël4ET+ãàñ$‰ "A±õþëGo½¡<%æ£~ñ·Ú"›ìC&)„ óJ×Õ¨‹t[!I)ÐÎÿµ6d[(Õ * 4Më’&;ûî~@r­tõª)7/_ùØ%D‚ỿzðÜÆþ§7A–ƘiƒeQC)ƒºq´»DÛÔˆ³Å£nH²½°'y )Šª,°*j°QàV›`oí$ÓÃ6­¿´JáêÁ i!‹%¾ñÊUÁñ«»‹ LæŸþüî<^ã+¯|ˆ~¦ í~Rÿß×÷Ì…^Äy™DÔérO ή© „EÛöxwe¬:>‘õr—`¿ÕŒÅ¥R*dî”Áº¥HUïfWYº‹ëõ%ô—ÖËóìÂ<˜1Ý6TS¹Œbdž¤Ô9ßèkßš?^oƒ¼B ‰#ìŽ(LLs*SÞº¿Àß9 ” ÁnìðO¿ô4½AȦ3ˆˆŒ-ZktM¦X€Yl4B’ÏSž¨ÖŒËP®W+ê¸öãÎþeDé(ÐÏtW£-—z?>×Úà³ÏîCƒï¿uܳêA› é ¾ô‘’ˆçŒa’§túÔÛ· }ÀÜ6èºQB^nÆY|ÝÃ9C–ÒáST$üZ5ÆY‚x‹}I«3Îñø|½Áp2ÖàtQ¢n®Î1ÎŒÓ_}é2¤àxýöyÐÐkñÆÝs<8{ÿèS×pó`|wŠ èâàõ éœdœpŠ^h׵襻0h¥>}_EèÉ2=5‡$)8Æ©tèóÌ®T·I¤0½g|]ux¼¨±®I½ ék¤_¾øÇ‘€Ê%q€úö2Š‚àŒù€k°'Ú%k‡ ™äIØÆhp.& ^º9ÇýÓ O_š ‹%þèGwñöÑ6a}ü©|ý7 rÄ"$ù„°ÝŒo¾©ÑgŒ!ÎFˆ²1|8šÑ\Dî2ßa¹8#Dº¶B`²{çañ{Q›<õ¬{}ŒkÓ)|üÆ ÖXüðíŸÃ †¼õÇË_ùØeÌÒ x2J`ŒÁª¤xÒ²îÆƪÐlB t « ›À•‚3¬ŠÆ¥Œ¬EšD6Á¥=w'ØÚÖ’ÝóÖƒS\;œc>Î0N#|ý¥ËÈb½}<p^´øWs ¿ñâ%|öÙýÞýÙÉy¸ÊžûÜ Þçªîï–±ôðb˜DÃ÷m[wKŽH0¥BÛu)s›†‡¬‹à:d};5‰Î ¢P ¥é³¤Ë%Gú„˜Tá”{ôHñ#eË´n Ý—[ŸJk,VUØFjÄrÁ€«{cÌ2DRà~|oÞ_„pƒ,øèõ~óåQ žÎ Ý4š‚ìZ¨º„®×ˆ‡ˆSÈtltZuàBÒÅ\)¬gPmÀ"ÍŒ¦»ˆ’ RÊ ÂkÊ%´ëq{þ¥ÓwÎ$BdhÎ8>vc )þúGa€1¼}´ÂYÑâ·?qõ‰)8Çl’Q‡ëƒ—uëÒKÜdÙÔaÀ‰ut±-G“ÂFZW ´6ȶþûá&8^…rX«Öm‡;G§h÷¦Ø›G_|žÂ;^}û¸7 ¸aÔŸ½öÂ&a eƒÉÆ»®Â…×1aá8=Æ”µBåp&i„<‰€žª”ÝH.¢{Y,›¶¥Á§q^`.6ýnçùú¿7ê†SF…ô¸Ãíœ`BQ8\`ÚжJÒ eY r†Šu­\þ×f]h-.HtU[ÑÂ4 ‘0øù.ÎÖíÆ£ï£×gø^"‰t:%}½µ€é »ªYÃv™/âq:#|k µZ­EÓÔ(W ’@0 ÍFMw cjÇv]KÒëjúÛ^MØv U£¡Ý&jz’[D‘Àžß,ð×o>î°NV þðÕ;øæ+WñµمM0ŸdÁol­EÕ(dIÄxZ4–b™ÆYrãé7Átİ*k(eQ6ÔÎõ!Û›@JNõ¿k£ZK²šVi,¡”Á¥=²_~é…$Ç÷Þx´‘ iŒÅ_¾þm§ñ±›;œy/ ÃAÖE~“x͘‰&ýójš„5§Ýaj»ï¬h±ª» í(‘èT‡ºU.Èt‡™uOÀv>Ie ·¹ ÃGO$% “¡“àU¡Iœ@ðž½Yw­C[·[QšúÖÖ¸¶Ø£Eÿ÷û·°vCHý̳{´øÁ¨i×ÚÖ­UÓ‰ňÓqÀ¯¾›òʲD¹ZÀE5ôh‚(AD18稫 uUB·¤Ãvk)&U(+¥ ˜¦XNæ¤ÑÔ…ˆÐ´ /ßœB¸‹±6ý}a]+üá«wð¥UƒÏ>»·q/ð›ÀZNñªnI‚äF’;.yÆY‚,ŸØÿŸä)V%÷+GYei]0ÔäiŒ»ÏPÔíF›¼ë.^Ž¿øÂ!fyŒ?þIïðvÊï¾ñ¿~°ÂË7§¡ŒÑæƒføT5´]‡ºíE‚¸ù(A‹àLSÚÝ8p´¨Éu6X½Y,(³mƒ'æb˜‰õ!„qˆMïK±ºÓîð ‚×~ƒ 7²X•$Ionqm«>ÿÀþ½†C÷OKüÁn£j{ÍHq|áù|æYâêÇã]Ä®/ÏhÕ¢kÖ°]MÖICÆYê‘d[ S UQ¢*0ZC†ÑxŽ4Ÿ@D„g©ëuU¢©Vˆ˜—´iE _ü¼Iš@v-ª²€tÒljÁY´š¨ ŸúÐ.vÆ þÃÏïSÒ¦÷­໿zˆ£³ ¿ùâ¥{à;Ó Ë’Z‚M§À8Ð)ç´s'eÓiŒZE`Û­I¹Ÿ¡,‹MðÐEr4Ø4‚sLG)>|}wŽÎB²*§ËqÛiܼ¼ƒ<ñâ9à~|wc[ <<¯pºª‰FÍGHô P. uëˆ{M« %‡¶fÕ5Ça=yƒ¾‚¡äÃY7-”V}&˜Ó–Û­Í×ßÄPîn-–UGwëÌÓÆìŒƒû¬`·Ø„”ļ„ *6sƆ¶Éí¯w®ðÇ?¹¿osþÞ—žÂ,§ÅvçSçf0ªC[-HJÌ8¤²1—Ń!Ô«¢Dµ>‡µR äÓ$ÙØÔ-Ê¢ ´ø¦ ³d ´9:×ß1µgÏ× ½îô÷`\é:cB0|äÚ y,ðï~z§ëfÃßúöƒ%N×Í…{àói‹UQÓ¢- ( !q¤:k-š¶CÙtØæÈ¶¦åžj Ñ%êF…ÈÙé(½ "½qy÷-p¾ª6l®ôDªñî½ܼ¼ƒq–„Mð¿8ªê6ÚÝe«š…áæÞÈËÜ4·.À•FÛ6hš«’ü¶³aœõ*Í0À 6kKoÅ0I%u†Œ%|ch¾ð€gìX7ÀÅÎZ*U¹ÿ×U·ñF™àYö¼Ú3H%XOù5CüÝvç#ßüþæÍGøö«wP6ýÉu7Ã÷[ÏÑâ·r4G:š‚ ê³Z¡)ÎÑU+²ÜÅ)ùR¹€µ$&£ì/…r½D],H)*#Œ¦»Hó bAi…¢(PWºz ÁMXÔ-”°2EÕ(7l¡0º¢¬‡õN"¦SX—5ÁqÛeÓbU6h•ÆÍƒ1~÷s7ðìåI€òz2ÚéªÁÿän?^_¸ìNrLGi(úy]5h;Šej•Ʋ¨pt²Äª¨Ÿx'ç‰ ú†ó 4X¬«'J©o^ÞÁá¤lsxY5-Þ»ˆ/Þ˜ã÷¾ô4>vs¾AÓè)rÀÝÓG‹º'y«MqŽÅùž,([MÄŽ"Ê#jú §9úHÜíÀ•ÝÜê{û£Å&8‹1"ßÇ ™ ²H IDATÐË þ_ÊÏÕw':DˆAI‚stЛ¿ (Ž9ÀX‡œ¥øÖ+WñÜ•)¾û«G8^Ö%ÑªÑøþÛçH’Ÿø0ÝyÂ:RÚ¹Ã(zVF*°Äþq3Õ+‰‡_I$ 8ÐÖ:`Ð7ÒmXO' ^¶q#é¥?RÐ%˜s†³ÁÙ·È ˆnÀ¹phD ÜAä ³˜Ä‘Dc”¡Óˆú®IB4äýƒÛ¸s\LÀÍý1þÙ—ŸvØŽd´‹(sÒÙ­ÐçhÜâç"‚ˆÒ¤kÝÊ|]ÕáÍ‹¤òñ—Кê­ÁaÓBkuÙ 5@Ày ë¸FÖ*Œò1Õ˜F£©KÀhœ®« _ò2€Nk›%˨Œi0%9®ìdxåæ{ûœÒ®oÿèšNããOïn”1³qΖë­Ò°‚žÆÜ0G榤ÊBQg8ØoH"hNÀ±,*BNðÞ3c1gÚ¤—~èáÉ’Ò}ªúöåx†4‰ðµ.Í3¼úö1^ýõã^þb)òôÏ^;ÂÝÓ ÿࣗ°3ŽƒäÂ2И'x¼ªÝº)Qðw†€ Ú0ÇÓk&^”O´¡²Ëá󹯿?Ì7ï¥C2‹à¬·D‡þÑ-¤‡â274™)Âeoœ $‘# =ÞÎ*üékGXV](y$ç4àúøwðK$ã]'Dビ±±øeìå 4±íZRY†J$!Ÿì‚¹§L Ákk²*X&Áe ËhQqH¦‘dc´ŠR`šr ¥:,Öµ—Ñb¯›cÚ¸ÔCÙeëªÃ›÷—8/¤1Çg><Çk·(=`›ßùÙ}´ÊàÓÏì…E@2èœ1œ¯+tƒÓ¬m5´ÑŽÉC%ÎÉ¢@Qµ8Øc:xÄ‘À|’õ¨64Ëh:…iŽ$’ƒ…GõqžàtQ†§/s18Y”¨š×ç˜ä)æ£ß|å*riñ½7Qu&hÅ´Þº¿Äñ²Æoò.ÍHN®qrŽª5¡Jöè}™mÑ߆Q¯AÖàL?ÆødIÏùäàL‚±v€ Ý,Ì“H n©1’%’±‹`óû|4R°À Õd­¥ÅeûçùŒo¸urŠ6à/¨†ûüóøÂóŽ– ï@Ä™ ç&ÍP[.Ãâg\@&99ÒÜ«iWŸ;×QœQŠt4CÛu蔌†Õ ’[´m…uQ;»dî ßdïÓ°¦Eœˆ“i,t[£i[¬Öµ“ç’0¦Áƒ´s×­ç ֭ůÞ}‡ËóãT ‹8~øÎÖ5°p¢?{íëZmÈ'ü&ˆ¤ÀÉ¢@c‘aÞƒ…‰»éððd‰®Ë±7…M Çî4Çb]Óâo;·ÁyåOgép”£<ƺhÂé*=ÁÁ•^ïß?Ááîûs²™>{y‚¦íð³[K¬<œÌ•Ç«øÃ;øÇŸ½{9‰’¤Ædçç=t­/£·Û«‘`ŽZèÜk>N7ÛðìÍF‚ãlU¹Ë&›$–=ˆGkw×pRt\$¸:O;l çiawF'k§4勯Žq†ŸßY¹¦ù*ÖU‡óêm[‡{G㦫q$™LLÀb]Ai›—vœHŽ.Æ`´5!t¼lZÜ?^àpw‚Iž"Oã0MöD ßÖPÊ•D®Å©”ÆÞ|Œù„Ü|¾Ôù÷?¿ Å~==^ÖøWß¿…ƒiŠÈ­™ÃYŠƒYº‘æÈðÜ+7ýýÖmÓ#ÒCf‡ˆ$â8 ÷ 1÷¦¯Hð@³ÖÚ U¬—BlO‚‡­#ãà·ÚtAÃ9sfšÀ²½>Oíd[‹IF‹_Æ>%Fµ¨×ç(×+Ô®ÔÐÚDDÓRp÷ÇQ„¶”Z£n:Á u‡„[讃rræªQh-˜qaÜ–6JÛ`:‚qJƒ©ë wï?DåhoÆ÷÷šÁÅ: ¶Åý•­“&×ç1®Ìⱂc:J0ŸäA“³3Éq²(BøÄÓûšÎà×J2ä;ÈÕ$Ÿxïá Ÿî < <BJ£ã%Z«B»¹j:ÄŽáÙã&IgôöÝcܸ4Ç|BåÊî4p¾¦Ì/˾÷hi‹Ã fãlP ©j£ØiÚ8þâÚ*ƒ“EÎvÆaŒÓ¿ÿ×ï£éôÖ¡jqtV">z}ŽÏ=·êoÆñmÌó¢u°‚þ´ìî\0ƒˆ¢€¤Çà@ð¿_pæòÈèµsS.jµÅ‹ï1èÃŒ`¸Å=ŒÍ¬ß0œ»1Ç7_¹ŠßùäµÍ{HFó~ñ»¶`µ^âüì¥;ù¡78I$´1Îz×û’—E…Óó3¬‹5˜ÕÌ bšÒdLÎ9ªFa]+4"H«±€1PmÉdŠ(I‘Ä–Ë5Þ¿}«u‰ª¥V!åådÞ¾¼poÑ/~c-®¹ÅïÁÒÙw&’…qž`>É\P}³Là©ÝY̽Ú×ÁwŽ üÁnáÛ¯ÞÙxGiŒk‡3$±tŒ% ø«ÛÎÅ‚"XU±¨ÛïÞ;ÁÉ¢O“¹›<óÚNáÑéw#‰%öçcŒ³I!K"Œó¹óhaêOìNi<>_ÓÓÉ}=}8Æ·^¹ºáô 46ÎÐ*ƒ;'E`õx4üðb\Ôjãš`ŒEéïNêeûŒ\†QDtîá´Ù-Ô4"i‹q‡™ç 5ß0>Ó/xïóÜÈ‹õŒ_Ó÷p¡GÝÁ,¹8®Ï&qÖçþº ¹ó“‡!iQkƒ8ÔÉp;Þ·õçX¬K,×ʲ‚i Àt€î¨7¬;ÎP· 뺃6,P+Œê`T…,Kf9")q|zŽ»P{´SgÈÂ-IÕo?nqÿ¼uSZàò4Æ•©D$¼˜OâúÁûó1„K[§™-¯êŒ$ÕÌ`ÔÖ{ñJŽÃiâŸücZ‹Ÿ½Šþ'ob1T¦q„«3Ä‘„àdFe±ëôèÓV»´—wîãöÑ:E¤ÝiŽq–„`Ïy=]xï>bvÆg1˜§1Æ£Ròºç¡Òä9~p¼‡á+ÚÅñŧp0M/8ÆÈTßàù÷¿ÆßÞ: D:²+ò úÒÝhXÉú—bt~æP.lQoê2a æÜ¥Ùˆg¯ŒÿGNN\p‚®«2Jˆ¹(É~V•+0kG2œ8~˜qï¼ 7ìHrõÞ â¯9ÊbìL3tÚâí£V•"‚ˆÒý`[Ær¼¬  ýl`6 ´¦ÍÖ}‚1Ž8w¥âhÕòO°ráë84-]îüâ÷¶>ŸÅÉQäNSÁÀ,q6—e‹Óe¥P‡ §$%º¶Áƒ‡'¸D‹ß³iìöâwaÓçµÆ/î—XÕ4!%Çs‡9Æ)¹ÍÆy‚ÃɆò•.Ô®ÔîɀʋÙRHÔ­A­,šŽ‘/\ácWs7µAoA):ÿò/ß á¾œ¹yy“œdÒBä—>Ù÷ê\ÞÙºÆ{÷Oððd‰ó8%nŸ4xë¨ Ô×ÝQ„.ç˜e”©-CGàR†~ôpáSÆ£þmêuID‘„Òö š¸ÞØMðµæ˜f24 Bè´±xûÁ ÿ󟼅Ÿ¸8Ü`o–#ôÁçIŒ,‰BVÖ6ÎÏ×û¿x猱¸v0#ÿÁ@‹cÝ<æÑÙïÞ;FQÙ%•s‰”È’;ãÜY::çG¨[…¥›)lýÞoà…+ã§Îî=úÞ›Çø¾÷^o±µ}=?ÉìNsLFI¸`k­PŒ»DŸQ…dH2 ZW6 ï´=ÅaKx¤uÏXñ]œ^*Ñ?¬`m”@îƒSLL  «u¹Âzyîù½„"‹#ÌÇ)"ÉÑ´ ÇçjgóB ËsîN©b–ë§«Ë’¨iJäYŒ˜[Œ³£,FQµx|¶Æ™s;UM·™Å{òq$9âXâG~ý¨rë…᩽/^Í1M‰–ÇFy X†Î Á|æ±Òh;eH®Q<úlðôÕ=úlÙÅͲ.¼{îl]G’rm(šÈÃÕ²4BK7InPÔ –kê²_±"\Î4aøê ;xñê˜Hnñk§CêÜÆ–Kþõ·)c¥¤ÏO)Ö(‘ÉÀ¶ò,†÷Sc즨uÙP¾Ÿ¬=Õ˺I›èm†Ø…ܹýƒY‚Û'eÐ[tÊ €Z¯æcHnÁѬN!™Æ¥Ý‰s<‘¥.v$äÊ;¬ºÎAz9Ò$Á•ƒ9â(BY8:Y`Y´h"‰cd‰D")è±Z”X—DTöH“~VÁBm‹ð&¾vg£e†*Ï]ÎðÔ^ºÑÃnJÓÏIüiIÆ-Œ6úaø‚4¡¡œµ,’ÓAò©§'Ø›Dxý^º£ §ŒqÉð ÚZ¼u‰u­ðO>ûÓפÀÑÉ EݹDÿ~‹M«¡Ý¼@Û)/ðøl…ë‡4gØ~ýv¾¢Á¡_tMÛ·œàÄïŒG,ê¦År]DN–DNaJ‹P)ƒ½‘À—ž™â`…aYhN þòkýÇËÕKP¤ŒE1˜“Tø;ÄÎ2ê??ùÛ·+ý DJ‰n ‡~yâ®ÿ¾{§>ùá=¢~1»Á”$^ ˆN&üŠ/±D–&8Ü›“Up¹ÆÝG§X•- ¤äåbN'DÝvPÊ8‘¦°=Ï/\x"É]¸7 Ÿ_Ü+Qu&°m®ï&¸¹›bƒ˜Á(òuwšãîiÝ_JÝEÎ:•©i@‹Ö—ŒO"Gz«qb1/7Ùß?@’¡-0å¸sçV(ÝF±À‡öSÀZœWtÂZæ‚(Ü)µ(ZüOßyßúÄU|òÃ{¸²?C$EÒíL2÷>ëàIÞ,u,N—%šVáÚá Ž—¨›n0S`!.×{“³$r˜L]·e „ëÈhmÀ-e?>[Ó]!¥²¬j:":»¿3‹OÝcYkœ• ¿¸W„ßAœú`•áRU.È…3+Ò8qs¶A+´éõFR¼}‚îÑâ=o>âÔ>Á|¬¶¨X˪C«Ì…ˆ_ü^{O'§Åº$×UâúÌ~ñkq¶XáÝ{±(hñ'2ÂÁ|ŒqDHìuÙ ªVeCúŸN…:ÒŸÂÜü4=¥×óÎÃ?»S  út†Y.ñÂåRF˜LgHR"FçiŒ]ÝsOºW~$ïe œK§põGñÄóE t“üú§GšeeöpãÒ.öçc$®®VÚ ‘ céêf'#öhJ÷9þÛßÅ|ÿ§æc\Ú¸“—0*Y¹:[?ñð+ê÷-°?õ9d®íÍE߇_5j÷$ðé"ãOÉpÚsFB´UYãxAÖØaèÆ ‘Ä3Ù@%Ú×ñõ@ á—[×)´.çXµ¤ ò3+‹‹Èò5¼”=)Ü‚è’)8‡Æ“ƒáøÖm»S¦O|Ââ'Ø,!”u ¥mX y–â`w†N)œ- Ü|ŽVÑâHâ—v'0ªEÕ’|Bi¦UtirR?qô´2)„«SéÑûË{kÜ?oC°7w}þÏÇ­ãÿð“×ðµgdœ©[Œ²8èÿ[£¹îOx¥.²õÁñ»Î°_Ö-À„å°Â†ä–åºÆŒ8DŽÅY7!ó„NûV©¾ƒµ×Û#·ÊŸ­ññ²ÆåyJ8íò(šº‚VŠØAž´qß;Ä¿ô‰í©ðpQ…ñ´ÿÐŒ¢ü*ãäŠÖ]˜†…jk`ûB] ˜ŽÃÅORTÒÞx"…@–ÆØÛ™b]68Y¬±.jD2˜Fž%˜d1º– PD “‡Ö&°/•³Èùö¦t’5hüäÖ ËZ‡7Vp`wá“7Çî~#NR$i‚X¤ÈwDÜ\¬7â ‚ZÏ-xH‡Î´µþÃɦŒE£4¤T}É騤RÆ€Ve ®GoÝ[âhÑÀ‘éñâ• g¥Æû§wJ>ù²hñûý>¾ü‘C|íå+¸&ž®°*d)ξ$ФØh_ãxQ`oNñB몡˜hxË5•X{Ó:MðÚ-øIcœÅ˜äI Dhm&Qð&øCˆ As%\œÎû’uoõôpÁÀ`´†ÒÒ}_œd¡I3üáàò±_‚÷ô,±’QЪ@8A!DК o’ó-.¨ À« k·PÛN£ OD¸¨íÌ&8[V8Y¬Ðu2¡¡Ø~žJ¡, ´J¡ªI6ÑväÒê\Ë_v¹ËŒŠ¤@ Æðþq…wWh” =þˆ3\™Gxö ¥Àe&Å1¤ÃÆàÚº½ ëÝ~°Ú-ô™‰ú9Ê<å®F-4ÒD‰6.Ï< ‰")Âä•.Ü@3̲/^›àÇ·V¸wÖlÀ}½å»oPœÓ×^¾‚k‡sŸ­q¶¢¼b>f®i ƒŒ o9RÇæñéã<&ïsÙ@øM`5á,Ö5$ç8Ü™ bUÓ¢m FâÁñ(ÁKËdß IDATþ|„N‘H5ŠJ¸ÈXº3ÄR„¤ú&9Ø‘•OÚq$0jõ2f!¸7Í3Ïš ¬ªoÎ5<×TÆ’²¯¨Óƒ€l@·-Œëû ™À¨ÂIP±éç–N¶ïÁŸ¦ƒr¦HŠðìeicg>òhpr¾¦\(B–Äe Šõ MCmMEUŠJ5˜[x’ŸUÄ‘€1Àë÷׸w>ðR·âÒ4ÂS{±Ã½3Icw6† ]§`»©¼à}bÓ`˜*ié& kdxëBÌ¢Ö¢¥|0¡'¢:JéNi.xoYuæ§Ÿš`o,ñú½ʇ˜kj—üÕ¯á¼hñO¾ðw'HbI©1-ùE…®3ˆd?•öÛÀZ¢Q§Nyº*—%L%¥ïH¯*HÁqy ÎÉ“Ñt*d*«Nc2J1g4ðìôª kax_ä ÐvC e9(£<}ÄÃÚ`Â`Lx³[÷ ײöw€û#¼ÿhýM ‡CÑ –+0&E:Åéëj9ë¨iÃG‹µ uët:EãI,Ñ´¤Üô•TIÌfs¬ÊEEªÐ$I‘g„úXœŸC)â^Ò @î$¯;Öœõ›Šs†¢îðËû%NËaÉÃ0J8®ÌbHNu¤ô·ŽóO_Ý…H"´ŠÐ{|kT?¬[ý?~öþfǹßâÝ?Y.ÕK´Ó2YFYÁRD°‚ô<œ¶s‰–œ 7yíáO7vÌSŸß-pV*—²h©¼àt/8]·ø½/>EÁqt²BÓvØÓ&hÜ„Ä}v7^7Š4FÆ-u»Ü|Bœ.KÎqõp†eQÓá§ ,TIŸÛd”"OìÍrb,u:˜«¼ô9‘| ÿ§÷øÑ¢¦K6 ¡ñ½†L«ØA^¬o‚„™€î±ï\ ¶õ1lK§,´éhš IXÆCÀß ‚mɯѶT®´Î·©@Ì«cˆÓË¢"F£ “qNí¾³S´‰åŠš©ÒÁí Ó]’OV ~z»Ài¡Æ/– 7v|âÆ˜º*¦/iò4‡® ËGtò:Ã5Ùñ.±†í5>ðJ1ºÓyôvEvÁB'Ü€ nh׋ظ”NBîCG´âÐS#‰ á˜Å}ŽV1|öé1ž=L7ü¶^Twç¤ÀÿþgoãîIQ–àÆ¥C6gÈ“ÈuÑô…×l…‚ÊYšx–¢icp^T8>+0ÎSŒÝ…Ûºß_5NŽk¬ÊÖ ™7ökŠ_<,Öuç6üƒ0 ÂpÙÀé¯V™à·¸ …ø /«‹5à"wÓV»e›,'È}Ò~Üςњ3Žñx kûlÛñx„(Jж-–˺Ž`VUM§„6†rž¬< {}R$ÈôpQã—j¬øõ±äøð~Šç/eaáY'ižŽRìLs¤I Æ%8B&2%ÛMƒ±ì¤Œ÷‹›%ÛJM€‰›JZ¢.±Þ×·Œ3p.6Z©¾41Æ¢vé<±xêê.v&d™ôרçIÆ1ܾ~^”-þÏ¿x?y÷q$pýÒ&£40ŽFYLÙk!qqsãúáŸÏiWjù»ŽÑ4OX¬J7ÐLƒ‹$ Çgk,ÖUèÔøû_žjòçÃÚ›®'P÷l/ZWÔ²ö#d<³ ÷éBý¿Ñý;¿˜…V-˜R¤m‰b€s«ÂPµ:¼HR”F,IAØ)ƒN¹¸PC9²“é»ó q,•ZCAj«ÕFkÔµãÊ ½C¬·ÿã¥k¡Zkñþ£wN;×⤲(‹9>r%ÇÞ( mÒV[DB`w6¢Åèј;*µ€p°Ø (o>ª$lKócû'ÂF¡o­+k¢˜lÀÚ0S€½Iê.û@ÕšðzÆY‚äÉ„N–®îføÈ•’3¼ù°„Öd,7.N¨Uôã»8/Z|ýå+¸~8ǃã%–E…< &êC±cèù³¾Eéó“ƒìÛõßOâH Kèç)ÇVª_ɘÆé?iF»ÝZ÷O c ´ Ë`ÁXEÊ!xðjè­y•|B4Àv¼éØåX‘ï2FÅhê6äcÕ­¾0G¨ZJ='Y.QÙ”ÒR`”°7'e§ä@ ,ŠUÕ`¹<ƒrݪí‚Ü`ø† Qq$èIJÀëw—¸sÖÁ˜~sL3‰/ç§ý‡¨ÜÐ)ÏxEˆ6MÝ`48Õa4¥¿ƒÈ5 êN»9‡ *”¥À7)ÅŒ9-wÃt¶ñ^7·`R9ã'ï^~ÂÖg¸©Æá©aà Ãݧ &S†VÔM,¥Ï_&ÃOn­°r¼}jeÓßó½_Q‡èë/_Á•ý)!X–4oØ™æ8_‘Þgøûµ&$ãØÆ1"D’»–7pt²rJS‰ˆ1ÄÚ ø/zœW—õˆô­õém»Ûs+c,Úºt‡ŽûoÛÌú§¿tžj¹Yº~@¬ï@Ðß·ŽêrMÓNÆ‘åã‹…ì‚Ò0st/ïòÒÆ"Š"L'\:ØAšDÐ]ƒª*q|²Àâü‹³St]éüå«Ófcw3×=Š0ŸdÈ“o>(pû´¥Ëµ{3÷Ç>us¼±øcQ!#T­qƒ(’2Tu ãÛÀÌe¢¡×üø:\91Uë>ÿ°Á‚h7‚F¶;˪sù6|°UK9·¡ò!%›xãÁåۆצ,ƒLrÄéQ”"Ïr\¾t W.í"’»ã_ÿèvs^Ÿvlm,¾÷Æ#ü¹Ë;Ø»¸$’ŒìÎrÄ‘p Ú:-Ïïc‘¤¥ Æ9™éÓ8 þˆ‡'$©èÓ*û‹;gÈ¥Þq8qŸø6\yÐpñ+O©Þ`A›Ì"ŽzCR(Ÿ¼–È› ¼ãÈ×™ý£¥-S]‹º*iÁK 'áÅŽb~AäßGQ«s>ŸawŽ8’èÚeQâèñ9ÎÎÏQ”Q®QáÕÆe(²†,‰0'È’?yÿ G‹6üÿ9c¸:ñÊqH3ô¯éÊþ“Q°¿€CÒ`JTô¥¤šÖôo~‚ûSXOoL:½f…ó@ÀNw|ÙãÌÚ Ã†ŒÖÜUŠpÇòR íÜXþ駦;ûH²q°;C,ÉÌôÒµ ã¤ÿž°ægÿú·Mîúá©»\ÏÆò4vt3 w\QæR`|™:TkBá|U¡îºv'ë¡ýÆ€C'ŒcÞ·>ôz‚Ò( ÄBJ†ä-ÏÃZœâ %¬. –„TÞ5ŒÎ±–Rp¹^…!µûåã”xþzÐïðþ‚,‰ ¤DœæHâÈÍ*ÔUƒ' —€ÞëYZ‡ï#¨‘DoRàÁÿ_Û—ôZ’\ç}1eæß{õjìªb·º[4Ѳ%›‚¬… ­¼öÖ€ÿša@;m X4@0MÈ&`ƒ$(º%’mª6««‹5¾éÞ›SL^œˆÈˆ{ß«æÆ豪îqÎw¾I¤ü‘‚ãû?{…WÛ±°i¹»VøÎƒù´w2Ú¡Þ{p §G lÆ È ¾o‚û@lB­uŠ.¬ α€u2‘ónâú!—Hnº±EŠnv¦ç–!:£ çòÈæ)díÁ“q0HÈΛ‹ NnÂhæä½ªªB÷nƒ3Oè¦Ç­™o7 ‡œó?{rŽv0øú>fµÂ{ïÜÂW/.Ð DŸpÎa×4!?qÃìG$’9+j¤ ŠGü=Ö¹"uÆÙ锿³®À~Ó¦‹e¡{ûaŒd×B'@ܰ=<$稥,¸åLQ3ìzgŽÞY‹¿’ï¿sŠÓ£E"£©ô;¤ƒ;™ Ùàðž’¿'-‚d¸š²Lº}`:0«$VšJ Ð”§Ä“½‡,þ\îÊ$Ÿ‹–6]ÛÑ{†i½·”ìA¥ˆ<øîƒ[p!ueYsÜ[ɽƞN‚/^lðgßÿ —-ù„¾÷àÖÁÚ|½h°ZÔe—:ñ9F”.R¿…D‘¶9`{Syyr4“ŒA$ˆ™ÜK|±)øTÌ®Sy'„$ CL'À¢‘¨$Çj&±h$¸ä‘k461BóÅãó©%<œ1ÐãñÚY<]kƒ˜¬a†Æh¼8ÛÐâw“PÅX츉ƒÂYÙEŒ1«ðÕ›ÿã“רô6»ÐÀû·Ü]m£ifB`ÑTøö·îâd=?Pd¹¬™Š6$©¶ÆG2ϲ’¬Ô°¬~E0ÎÓ|pÂÞW…-gûù >ùå;P — ⺞|>ã4F£Ý]ÂjÂÉ©ŒY¯Rë=‚!{‚§ovøOßûI.ï'gºÅ¬ÆÑ²IÈŠàt_*h'‰:Áã2ØÂ÷£ÎZ› í}sŸ¹@ä˜r*Î8‘ùƒ·–ìî½M5Á§k¼¨’ÇT£ä²™ŠoŠºtÎCFÚœŸÂÇhÄÎÈ-N²o&88C;õ«ó-EÙÉ A—œ¤Ûц#Õ§wþy­pÞZüã“+hãS36¯8>zg“9Àçófó9󸳤ñý¡÷é4H˹j±>f©œ£ÅÉÑ1..¨+YA,qPh*ùv¸± ωæ¯ÉýÃß2 ÓËZ‚™ÞyŒc;t*‘ÉU›J¤z4À‡w*Ì+Ž/ÏF˜pê9çÀÇn0ø«Ÿ<ÅånÄŸþÞ}Ü?%Ôîì2”%Œ”_>$ÕGA~ä!MÇWx¤HJ°JIŒÆ¢ëÇô`WJæ Ì4á]62=,žÐC`ð?ñ­Æ¿û£Ç8Y‘oÑë‹]1ó©”ÄÑ¢±$ˆw1OŽ•ëJ m,šJ¡Qý@“]ؽ9B@wb8{1tÍ‘œà2-¥$¡¡õ€qhp»çüÐå:åë™*•5ÖÝøDõPÁÓlÓØâ¹`XÍU±ø7»ž²¹Jà3îÇ$q™™S°ÄóºÂ§/{|þ|“B$gXÕÞi’h= 7fA½.Ñöö ±Ù'šµd<\Õð,ùÄ9 XvÙâ/]|ÂüéBQ]θ8XÍ×y)yÿ(ò×ÉrƯϲ¸&®Œ²LK§‚¤•aB÷æõ„ƒ[Ç ‘íÉñÇ¿³Ä¼šPÁ|“ú‡/Ïðgßÿ,!Dw‚¡– I+ÛÝ€7»P-ð2úhÏe‚z‹Å¬Jâ}¨Æ”^»¢4ºlÇlÓBQ Á¡‡›‹7¸¼8Ç8öSr}¾ça|Qš5¡ÛÞ\WÂ(ª¬•‘}ÉÑøâ)ÍQc]°Ç’ùíDšCʲ¡$‚äÌ<°:=ãøû'[üâé%•á­Oæë™H³ÈzÞàîñ"äëtÚá|ÓáõŶXH©Èânˆ?¹¸`;ÈBóeœÃe;¦«Ôˆƒr1ŸÜ. CüðA)´¹OP¬/ž”™’“ƒ€vôä+Žx³³,\,c‹ÒN-B“Jÿ­9©1Æ0«8þè½e²bñ:ßþé›þãû'ÀzÑàÁí5f‚ ¥Ë¶#·Ž1Û’®7æeIl#o­ç˜U*A“)'ÌOº’BzÛ\uc6(å¹Þ[ m‹¾ÝÀYwÐw½Ù Åës%²æÌS¬Žj‹› ¿u¾,nꌵش=ÚaLRÅé‹NôeêhñG2%~s¥ñÃ/6øú¬…±¡÷` ß:©p­&/™°‚î¯ðÁ£Û)ÃÀZ¢4‰ó~]Æn Ñ`HntÉÕ9xoSmù(ñUeÒîå§l5çÀ¼ f­â`Ú˜ùoO=‰›tØÔ7”Ën0ù€A;ôÑëqÊ2ð©wÉó÷ûŸhËRW•hÇ¿úÖÞmúÖdô¥­ÃÓ7-þü_®¹©ðàöšJÂ8‚»AãbÛQ)‚0òâ3*ɶ£j`µlÐÔŠœFˈ˜‡v2Öy\¶¦”åFêC˲‚+Až³íP¸qðˆäÄ‹òò²'-e¶òcC*ƒ;P&FÞD§pÎa³Ðõº¬Ý Î7 ¢o²S„Ø"?(ßù³ÇòdVƒšã.ñ\J‹hKι‹-pïÖ OÎF|ùº; õ³Jà-ñÞíÙ¯f1«pûdJRKÁCqVI¨ÒºôËô4|‰ÎJˆÑ!­égLéáË=¼„tB`›÷ÙÀ‹üåeŸœ}ôÆ ‹EJrŸ# oguÁa¢Òb uš£5Ì8`컉ï÷šP) mt£˜’#¬u¨kš•Ì•@Žþäƒ5æ/`qç<þâ‡Oðó'ɤwÖ¨$ÖG²jïB€b²ÕÏüú!Lý YÝ‚n³Íákf6±”¡wÌŸ Ñ8ìŠ?rE÷Þ#BG£Ä$,ÀŸìXFw &Ø´cȃb8YÏq¼ îo¡¶×Ú$âJQÖÝ“~üÙüèÓ×4]DÁÈ/óß_ád!:?bDˆbÍê¼OÈ s–»« R*cÉæÃ—¸wNsæl¢øjcÁB©–&—{ÈÍþG¡~D¶c0ÍÙ2ìaÓéŽ^Ó¦PKAý“wð–þlü¹µÌGù, Ñ„ \´¡Û¡m·pÖ&îL)ÉM:ÚIög5½'ë9>x|ó¦c dø“ÖX5”ÐË¢m¯ñ7?}Šççfµ¢x¥Ð36U&<‘Aƒœ•Ó¦9R.òýkË’N Nšc)W,‹Z=<€ØdŽ»ëuF¼ž)4…?ä#Å@‚X/çÚJqŸß{z°³GûÃES‡Ñ¸MÔhÁ9n­¸{²Ä~ñŸ<½ 7„ʬ‡'5Y•\ BmfÁª|Ô6ÜÌàdÇ9÷ ¨ë³Å ŒQÜO4xjƒ]0fŒ¤œ<ÜecLÚqy¶ûbA‰»Ï&¯Kg1¶t»M`+NÍܾ©îh轜aͫ˞e5S…Å8C-À°Q°ÿžÄ"ù|çöz–ú6š>Oªñ>ìÖÇ«9¾ýøNp½¦Eû//è!` ŒQ5°é4þîçÏ¡­ÇÝ[Kœ¬XÍ: O Pkº˜'‘qµT Eˆä6^ž ³Jƒ0ÉYbåNà O÷!=œJû´SW’cÙ¨Ôw2ðDê»G³Cˆ³Ìú¤ìÒ'ŽŠÈ<0éÃΙìÃ#×¶½"gX/jÜ=Yâ/ò5þþWgØö¤ùe ¸·VøöýÙþL¾—• åÊ„~äà Ǡ ަ’¨*…z6#ÝFb´Æ8œz}'z­50zH¯#'Kn!&S_LbõîÓ—%cà^vóþf´ öZèn‹±½‚Î Åâ(ÿÑéù!¹QCˆNÕ •”h*J¼)jôhYCIžÑvœ6¿1óï\.¼ÿè6󊲘+ŽïÜŸ£ϸ úì õ“§èµÇ½Sr¨&+”É¢<Öõ±ÜÍÙ³µ¢æ;NgS~pØV3 žý·’,é(â…‹ÍsžÏ@÷ž%bg<ýª`ƒ@~¶¡PdŸvY49¥W† G¤¥é¢bËÿLSÉ”EÕdx»ë†”q[WëÅ ÷o¯ñ_~ôO^M!r•`øçø–‡‹?X¨×)BgÚåb2 ÕÀ.˜òp8H† !éÏEcª4³#ú¶E×î èQUd ªrfb]Éð¾>ÑyixãRt’àå ºYç–¸VвÀw¥`¸X²òЄ6µÂÉjŽÛÇ ’"†ëÁ9æ•Jäµ6qÁXÊéJ§Í¼Æoc5'îÏÉ\àwïÏÑ(N;qH]üäé%þóÿúÝH@D<åcôêu q”Ÿ‚û\‘cíø#'( 2ÆÒõUAÁDzõÈùÈÝ&92F|,9˜i†tDì›^yæ%yO»™)øcíGÂ"  Î1jCÓßÀ$¤\YÚ9o/ñ?þç»14™´àÞ¿7ýµJPÇ®à §!áüÍV—¼GÖx£Ö°¦¥=I ¨„Á¢rhxkLSÝA;tƒA] lvçh¯ZŒÃ€Z‘l”\N5?mkñ{Zëà™E5SX;FØÁBk“”l152÷û àvÈüA‰É9ÛnĮѯ®úI5`ÛØu^žmQWÿŽÙ{*)±˜)ÔJ‘#¶@bk¾ÞhÜ]ʰ@Hv*jžî…’ïã×/αmGHF>¥ÚW½Kâ ×›ßûøþí¼ƒãõ ]ðjBF<°^6äå'P%ïÛ"±-æ›JLf¨Í£âÉÌRéNï‹€ï9qŒfB/›J@F… Ûµç*¾4ÍË`¼Ñ`×Ù„„2ÁXr…ˆ~@³ºJÇöñr†ÿà¥Kü³{3œØœWVI‡wpz´<˜ìFÅbãç¤áyí÷Ò݃|S0jì™÷ØôJpc0ô=¤ št]I´Ã˜fÛ–|<Û Á¡­AÛBëÜ{k¨Y|}±M›‡Wm¯_^@b@iµÁ›ËúQãÕù6Q³ó&Ý=-ËvÒA“€½Ld™}Ãh1Œ#„ 3ÂÒÑ»)ÚË[Ûãó¯_£©¤ä)Iч·ë Xp~øýw!U¯Þ´xú†¢^ãð½Ÿá»ïŸâhÑà|C³¼¤¼÷¸w²J1¸1ý&æ÷:þsQñthFcS¿)‡c>P×>–͈¦Eµà 1þÇïÑñöÍG“[Y†ÑæfC7ýô1zTÛP‡‡#‘süíÇÏi2vºJ0üþÃ>D£Fs+ÌnŸ,È&eסÆTžÄpŒ¶Ñö4wHp¥ó‰K-1´µpÖA –êK—%3vÃøúOŒ!¼Ÿ’hì”=ë<ºn„ÑÎ÷prºYÀ{‡×/_àÕ«×iiã` š]\CÆ=d˜ˆ·½X7• {RSY Ä`< /}>³Åäà  ƒ1\0¨ð½§§{OqM]t]XâÑ3†ùLAuÖQ¸ßGï®ðÑc2/þìù?þô5vƒÁßýü9þõ‡§8žÕ)CPÌs©‡“èGƒó«6Üo_X¼DK—Ü$K z"ƒ0š°==vL’¿®¼,¸U-“ò¬ªý7qxÆŠ'6ú}¦©§®ÛëoKŽ–3Xçð—?ù_½n·…¡–ÀwÏigȦ…ð\‘ù0Z´ý&¸×‘csý¨±íPpŠR<ö/E~È(@!UÎ0í48`ÞÛ°ûtO$ÄzÆÐ8ç`ݬŸ¼ƒÚÁ¦8¦h–µíËü**›zcй/BåŒgNÌÜöwCv]³Ž›“\®à 9 sfëþÕ Ïuà¢ï.™ìY‚4¥RÓÿÙÿ`A§;Xl“×%^W^JÜôÃ92¤ ’—9ƒ—< X££‡ ¼ßÓF§&—•æcHª·<ûÀãã¯6¨ãÓÁ¤áˆ©s>YùÝDÇ.NçwÁx¬D©_âlgÝ5ËžVm_À¼øÝû ©ðì¬C¸9GªžH‹U‚¥TÄnÓT/¬„ý`n‚ʈd"ü™ý†þ›n+;¨ÞîÔäA!‘¨æü5Œ•ëô/{$À8_ñaâŒCdåoû‰™ÀåçcÅ"*oýáWcbÊÒš¬ o†5òhÑ·}N%ˆþ=h›ÀX‘†ü›Îu¿EÏ_ux÷.">C-}J›$U˜6–-ˆ¤8ò™H:W†ÐÔ“Ü šÒ¢‘Ïܵ²’$¾L¤,î-q÷Ö ‚st£Á×oZ|}Ö¢,zãІ:ƦpˆÉk†G6=Á|Á‡™¿»ˆî_éÌû²ûgoÝ é»Î*I è!£ ©¤°Î£í5º€dE“×x!ã`‚Áqpù=‹tð褛ð½" B Y<²ßö(ºfaN©³åŽÏ®yÓóxA 6 òÕæÎ\ø¢?xûCJÞÍÞȅ}røvIâô2:dg|¬\çíPj¾‰´é°£$/3¼Ú¦É¬”’Ub}%cò‰§ÚKdãk±Âœ+¼ yrAøðÁ¾s YÏ D…íèÀ„„ó64Þ‚óÄ3"_MŽ«]Ë–Ôd.{zÝza‡³™´ë"ÁIe>ÜX”Zµ’¸wºÂ­UUÅÝQãàR‘G¨ЖaÓk\u¿~q‰³«n"²ùœ¹H·¦4Î6m"6þÚq „ˆÙeü’ù´Ú”¤˜£Å¬Æ¼©qÿön­—X4 wN–8^ͯ)xo¬/6-^o°m{¼¹ØàÙË7Øn·I‰i.Î_£Õ›Ž6ë}rQ‚ƒs@ ã$Ÿ8<2Fj¸†*l´±§Œeòþö¥$ÃwgÁëˆG> Œ÷$þZ¯]r¾£ ÏïYöm" …»€â’À˜,+Ô•€1³J×÷tU¡V*ãqÕ@5 pI´'KòßLۀݓˆ% -a‚¸Z4Å@äíG0K7?Zù‘JÊP’ˆÑ¡'Þ1#^]^ÁŒ;4aJ)ƒHC¡ª+ÜšW8]5øàþ1˜“Ê+8ARp§‡ábÛáõåO_œãÅÙUx(HLrÿtÇNqçd“Õì°sÿ­wÄ\|^.þúzÿZ-g8Z6Á½ÙÁawŽawyíGðÞáÿ÷Ï0<{}‰¿þés¼¸“Y£8þðÝ5îÕÜȧYA´¤&±ç(4*ÁeÐÿ!éüÔü:ïq¶ñðÖ<°yÁ°‹ãk.8êJâxE6íP:îrÆp2—“ú‹K¨f¡€K‚ጆ±„§ûìÉ%M¬-†DκÄÃ-²¤8 Þ/'O ÆœŒ4Éq|výC/öµÚýÅZùÄë9ì âiÍ8Ù¯3Æ'7;.h£*-ö8±Æz1jˆ{Fë”ÿ5QÆ}2NŽ¶èŒ (I¤ÄJ ÔJ¡iª”$šL­¼ÇÅ®§Ø%xHŽÞr{©pÿ¨ œºÆÖ‘£6Äd.ÌB.\î9Ä3uÔ“»ô> ¬|jt޳|->5Ä – ðdô…´Øö&k€G6a2Ƀeù8jŒ–¦µãh0ŽˆM‰'D}0Ú`:˜QÃX !eH"/!´D¹°RJÊõªH)!…%ŽÎ® ·¶‚Æ`³¹ÄÕÕ%Â@4Ô‘C`šÆàçJIÌêŒ]dœ*פ¢|ZUUá䨪 U]CJ•T!dp,L&¼1Ù†¥ïKÖÖŒpz$o%;’ýŸ¿~g§…o‹_ãBA¨Œ‹´Ø)ȃG÷ &`‹“ÒÃC%–mDc`MƒªžÞ·‚ÇÌgб÷{å¿§NûvhµÇ¢–X4‚ÔlÞbÆåä«´‡lÄ!­äNøDûµIcS)ºž|‚gµl(cD…È'gº’"øíGJk Îë Æ5'måG G¹$=4zÄÐSÀEÛvFaÐa·°©A‹¥ ÝøpÇ!IiÄþ`oSU…ªªCRÅ($TU¥[k®kquy]²{¼¾Â°Ñ!!LIi¸uè` õˆ»k€ŸRŸ:ÁN×8Ê÷*)ÑÌTR€ ¦‚eE…:&h)1aJ´iE7mm,a·)–LáAdŒ…ÿÇC¬PœøóI‹l¶À¼©+üšë毱|ñvcަñÎ:Xc`´†³ ‹EEµº;d]!^7!8jûƼ¢D–—@¼,d‰m¯!£ž5âÙ1@Y %\¤Ì'gÔJMù¿Gó ïœÌðì¬MˆÐ›íˆwã` vÛ½Ö0šŽf|»¤´òIi•BÊR`²™ì“XVxx:U†áìœn°”*¼È‰Ùý[ ,Äà ®¡63ööùáрÏB+¬åèƒ]7‚…c?î^>ˆÒ£ÌpÔ´K»pMréjôzM‚û=©ê¶Ï꺗*œ¦J©p’Éb&¤„t*#ŠQ8?8a±÷Þ1OÙ92ÿµZcÉÃÎCp˜ 3À;ìvm¢×Lq}½ N4iMîÝ@Ô˜dÙ“E#iãHOÒqBzOÝ·6ttœmÇ$©*u€53ÆÒâÏoî·¬ñÓ_¥<*ç€m7%+V•~=Uê+ºaDÛ!Ö”eth“=—áä<¤ÍÔ‰Sâ.€½Ó&¤šLf«&ÕûºïЏ žýf>…üáÌÅÖntð FJŠ)ÕVI–ò”d‹?çXÕŠaé‹VíIVY >ümÐÄi¬œ¨&sÝÀ½2{‚rÎjÉšÂxOM×ò!O–&”N3¹3GP„³É€lðxxŠú,ÊÊ'>™`N¥¶Ü×y]7$Æn~KNl^ÁE¡]HlàÌ*Åg6ó!.‘±_Vp·íH&¸ >yzA #xuJÁ0¯%ÚÁ`Ûlû‘x4Ym}HdñÅ?ÕáÉù€~q…õ¼‚ °*²t¿xÔ]§^“QêH‹oªïâäX 2xŠ_(Ù(îí¾‚Óé¤$'n»à8Y„ÏP§^[\tc¸g³c·×v Ús`жt†H^þlêI•˜æ)øxXL.ñØ Ñ”‚c®8šŠÌà¢w´´0ê`W9~’q7(΃×H'NæÓ¦ÖŽ»‘j㜠É24Ë8`C¢/ߺè"Ç’^˜ŒD²m©;p ÔÖaÓÛàhALXŠÑ ’Ñn Ü´ô¹®z‹þj!8f_^aÑTh*‰F lûm¯Ñ(ŽY%ñªõÓ<Éy|öü ÛÞ$i¦à ìßÿ›G¾ ^o4І?Nç˜×² ¢æ˜oôÆœÄ Ä²<Û Ãx~®ìkupüç•»û&;Fï¯e €{µ»†ÚÍöJJ ŸJ¤#ô:w‚8™.}Eý^:æ!×åÑË·L÷¿óe)øMï…N5–1, ľSsƽ¿®¤úæ÷÷7ôWþ¦Ö!¸_¸â;»ð`IÁŠÙˤמLx¤+_GÝHÍuü½‹F :²ÿ‹GÈU«±¨eÆšt{Q6‡Ô2Á浀ФÚ‚ÂÛ8co½H"Aš8ÄÁáCÃÅžOM©`“/¼?ȶ)ݜ߷xÁµ<û©±{Ë fûœ¢ìûeSÕ´kCÎn\©Ónœ/@îËp¾}IñŠMà`BÌXñ]nrh> G^Cô7€7ƒ ¬œ g<4æòLÊŽì`>Ùfî ¾Rv2hQFî ‰þ.„K7z–qªIEND®B`‚moderngl-moderngl-773b733/examples/data/textures/grass.jpg000066400000000000000000006300501470420062000236410ustar00rootroot00000000000000ÿØÿá0ÅExifMM*bj(1"r2”‡i¨Ô ü€' ü€'Adobe Photoshop CC 2015 (Windows)2017:06:30 14:07:34   "*(2/‹HHÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ? úê ¶¦8—1¥¬Híu•¹þǽíý#kgó¿ñ¿ÎÚâ½µçûwØèÜÂ×=žàïvà×¾¿úç¥úEQŒÞ žâ!ÅÌv“µö·ÔÝüÍN±eMoú|K-ô­WYïI»˜ í÷ÏÎØ~Æ·Ù¿ÿYÓ[ÕªÂý¯qaqg¨`íƒíñûŽvßÓ/þè![Iu®H´¸Ÿ~£ÜNÞ^Ç>­Ûã?3ô e‡ÒfÒM$—5ÛD }›_ûÍk½–¢,kÐH2 Øðãùÿè~ŸÐý'ólþq HªJ&’Ú¶7ÚýÀOÐ'g·ÚÇ·óðEò®­îc·tƒnÞCƒ¤{÷?gýuKxsKÃ7ƒx. 1¹úÃXÏð¿È±Aô׸xKÚG¶C\ãceÃó×ü:Æèb†´Ù%ä—8~“èÿ8Êÿß]?é}OQLú¶Öº¶íÆ^H=ƒ~”ÐÏ罬¶æ[èzÿàÿIZl†5Û]ÂæØZ.‘;CÚçîÛúo¥ôßn;7ÿÁ©–KËϪI.ôÝ,†¹Õ?ô>Û=F~†¶l¦ö‚úiàìRÎÖØEÛHp qidÖ=ÔY}Õ1gèËŸ·÷?àP¾Ìö¼YµÑŽöƒ£÷‚êO»nÿ¡^Ïç+Èúh·×Fö5cª$½‘!Û oÒs™êºÏôŸ¢©ê[ú4Gã±äâ»C‹Mdè»Ôu;]KŸêYÿ¢ý4Þ*ðµS^Œ€ã±îw©`ôšÂ`5vÏoé}OÑd7þ ;ns,!Ð@Ý-$Û;ìsÂ3ó¿Á©_X¹à04š^ÝÖ–þ¶[mgsœúÍû2– $“³V> ‚ïséfÝ›ªÝôý?èÿEê3ÑCNÚ­¦šÃ,©ðà Ôã1ô~‡éý›Ýþ›?Ñ)Ùk„¼<ý ‡€êëk\6¹®Ú;ü-?éžæ¸º"Àâw1‡sˆy¯ôn ›3è2¶çÕ]›`úµî±ÇpÓùÛlôÿ›÷·ôÉ¢B7z®/i/ka¦Ú>‰­›?Ý[Ùèÿ#ü*˜e…ͯF½Ó¹ò2Mmõw}»wæ¿ü'éþ*«¹à Z©ii Ìkµ®v×}=Ìõ³èZ£cŸUÐ Èho®p†¶ÇNÏÒº¿gü?þ/J—uL–!„à·WDZÀ;Ùé{ÿð=éØÂ5ÜâåÅÚ»ùÏOÝ»o²æ¿šg§üµ·ÕÇahq;‰k·»oøk(Ûþ ¾æ²ÂÆ·yÛú¹ö¼ Þ“EŽnöífßô¿™ê$ŽÇ¶þ*nYe[›o¼4´‚Éiq;¶þ™ÛkÝïþmþ͈aâ\wm$íÚt}';ŸcþüübŽòúˆtím›Fѹ¦"°ýŒŸûkjzËÄÆæ¾¦Ã¬’XDûwmÝú7Ý]Œöûÿí¿ÑŠ!EÿÐÍ´\]‹Ká¤9Þ›·ßá6YùŸÏ£P¬‘¢ %Úĸý!W»n?õ‘²+.Û«Á>•¡º:k¾§ûO³Ùÿþ"âÒéc]­npËẖ7ÝŽßÍôþ‡ó¿¥ý"Ȱiª™7Ü+y†¾’Ó¶w7Ó}¬·ô­©ŸKÓݳþ ïðh…ÕÛS…Û…nls‡c˜?©gµ¿Íªþ‹HcŒXÐÝíkýÍÚFÇ ¤÷¹Ûìüö~ó=DWV åòdnv›¤é ÿŠõ¿=WMÅ€—©ëX¥]Ùc*¹–Xe¡þÒKìk¶ÿ€ª¦mgèÔm·ÚãPpDÊZíßOþµj-^®­îª³ô.½¿ÎìÚßoé¤ön³ÕÿÏmn,ÞêhÁêÀ¸5­.Ÿ¡`õç7ýüó›u­Ê!­‚÷ƒ±’l,Ûµ»6}?ÚÏæÿHÿOÒþuü»ªËcÿPÍ›­ÎMÍqšïGÝíÿK¿þ·ê$û\ Þ¹§W¼ndþߥ±ìdmÿKþ–¿Nµ5ÅÍs[ë‚ýÎ2;WìÓÚÝÍüßø¯æ¿J§‘}D;`{ie͇˜­¬±®ØÊ÷mõ.ÿ·«) _Š÷n!Ž–‡4Y¨¯ôE¡þ>›¿Óÿ=þˆ,®âÆSÕ5¤p–³éný#­þgЫóÿÂ~OZÚÃ=­Ù1€×7Ûc-õNçìýçÿ¥«ôv~‘*X=3UÍ-}mËd’[ô›VG¹—=Îô˜ö:º¬gé?ãÕ×m}WvU­¬=äXOµãC£ƒ]sýYs÷1ÞÍ?úŠN}a¥îp­ÁÏ€D–¶XÛ=Míýß²ý'þÔeÎþ޶²­ŒôºÒÓ³k]é9ÀNÊÅŽ÷îvÍ»ÿ£ÿ‚÷Ø•ŽºÑ}•¼Ø#Õ ¬‚öÔà×ý-þ§ú?Òzÿáäš»[[¬&Ó¡a™–€÷{¬~ûèþ•ž¥tl­ïôœõ¿žQdÓéo'~Ö±¦:µî;ýWNͶþšŸú×è¿›±¡¢ê«°º* –´æ›ƒj÷=Ão«êo«ô?£ýøk½Gз× ë6±Íu¦ Hll©cìfûmß¿ÿõ’ððEÚf:«w8·sHÆâÂýë£è}Y³ùÚÿáoMá¬çlxk§–µâ¶±õîo·mOÿŒKhp>¸-¸5¤¹®sc:Úê¥ÌÝgïþޝV”Ô ­%¡¬ljI:ÃZXÝÞ—©_ç×éû?Géo¯ÒC†¶?ËÁx¦{C¶n¢Öµä’CeÛÇÒsý¾ÏýH“‡­$°¬;ŸðŸ›¿Õïÿ긽’ëøZ÷ o¹­cË]ï÷}?ѳóýF)×u a~ÍÖ9»^l.ƒOÑlæŸê{?üó¡¸U¿ÿÒËo¨÷ϵƒ\ú·†Vm°úUÛíÿ†ÿGü×è?qsj68™q ªÉníÔþfßQžölý2%­/¡µ°:\a vŽé6môs6?þÜP}»šàÖ6Êœu­Ž–è uwïÚÝûöúè¿ãYìl~k¥ Z§V]_»Õàæ¶Æ ‹,â·þk¿IüÝÞŸóuÔs¡…¶¸†4´z›Û»ØK?7ùݹ>‡õ+¦+~öWê×%Ìsôyqkôvïo¨ÿÒo³èz¾Š›kh¾&€d¹Ú‘·Üv›g¦û75[½/Òÿ8‰î”V·ÔC_ºíµÖÖ‡ Ém•W¿Ûé6Û™üÝv>ïæ’w¥¸ u»\ZOÒÔ+Û k~–ÿ£ú?YíkžÖ†¹Ò ÕÄoÑŽ{« ~×Ó[?Ñÿ.´[-»è¶Ç¾@sÜul“îú{7{}_ðèÿÂzFöC8¶ˆe›]¯µ…ΡæíôÿJÏäç´2àlkÙ»cšæl ‚©öìôv¿¿£üßójw=©­c]Cw¼Ÿwýü þ´ªØÁ],$Ö7Þ&vûßô[é»ùæú¾·©üÕ¾¥oHd÷袕–cXãSÙ¹¥Á®v×)ݯ±µ5¾ýŸñÿžÏRÙµÎu-±¡íi6!åäï.ÜúÙê>ûÝ_ú;_þÕ¯ü" –Ä{¿Civç{CÞ¯Ò®Ë?@ÿQŸèÿáS¹Œ—ÊÎý¸@.kZçÒúý_Ñ×µµûÿWøOøO´£¡ûT ¬l ¥Í Á[ímvmpw¨Æú•nÆöYÿ£$û‹A"×Zç“ lIgtÙ8û÷ÔËïð~§ø46ÞêÆêçê-‡p‡=ÏnÇ5Û.nEmôÙéú_Øõ.Qµ–ØÊ½"¯×®ulam•µ¬sZëXçþuOuŸŸé£[*’ ôk€h|A×þ‘ÎpØý›n~Ç7ü'ÚwÛìOfÊØÐL [Ä:·ŒØïg§k½ÛêUêWúOÑz)zAñE´ú»í%ÁûêK\ßWèXÏw¿g¾Ñz6þ‘BÇ ÷þ˜k±Ïö—±®‡oeÛ³ùßQûvWùžŠ¯ê¥ýÌ¡‚ÇA¾¶ÎÓ¹ÅtºÇ·Þÿé;ª¦ßÒ} )õ.µ;u{+k€q-µ†v6]ê7Ö`x³ùËYeµþ—þ°¦j5Eްú”í.¬ qp¶ÍÖz™w³Ôý¿ôÿÎÿÁÀØæ=ÒÁhÜ$5Ïxa»é} öYîºßc?™õ7¡ÞµÝ'foeVÁ¦»@ýöÕ³k\_úZMßü×èÕlw ò{Cžóïp¬’]k\úšöS6YïüÿU–ÿ7úJý5bÛ±ìf×7i¨†¢ öi»~ÿEŒÿ…ÿƒý" ¬°Ü6È÷µÌ¥Çéz.oçîÙfúIüÕV…ý"Ö¨ÿÓÌ|‚ê º5`Üw3oªç¹Î­ØßÎïÞÇWüïüRoFÛ²²×p}ýÖsgúOßý.õ ˜ÓS¡Í´ÁÔ€Ó¶Æ·èíkjnÇÿ×ë± ™‡nvøÚÓ´Ÿcà«õ_üŸÒz[?›YFëFª\»€ÛXà`‰–m> ö7Ùc)wé?õ%u Þí´Ö÷01Û×»CêØÖzQ»ÿ=ûÉÞÿyíhÁpÙcÛº×XÊ¿3ýø?æÔ+†îs75æ8 ÛE>çÔÊ¿:ÖíþsÓÿM‰ ßö¡oJš˜lK/ ‚@oéjŽÑÙ±¾¯Ðý2BÆ‚ðÀáên°eºt±Ìk_gÓýèê³ôUÙ³ü ë_A3]®—mh ’óù·2;–íÞ§Óý«üI3*>› Àhký»„¹²×>Æý~óí±Ÿñ¨ƒÔêvKdWuomuE¡°v ô³Úí¾—¿é¿Óõmþ™äPæÖ¿x­­ Û'Üߤïõÿ·=Dî¿6àm}¯vöYí,i®œí­wó–íÝn?úOÌþqìÊ^ö5»ƒ^æ7ô¥ÁÎ-?JçÙ¹÷Yº—Ýuu×ùÿø€ ^œ†Ö–=¯´9Õ±Î!þÃéû­gø7½¾“ö{ÿÒzj/{mܾH&vVû*næ»kþ‡ø=–Е>Ÿµ –µä—ÖâéÙº¶³ô/÷¹¬ômô«³ô¬òKÅÖ5 ¹µÜ\[Y’æmöîý'ò?Âú75è¤bÒ“ãnØF–\òNØaÛêïv1›Ýô?î?ýØQêµÅ¾“ ‘%Û‰{¬£Úë^É÷Ùú_ôŠ»eMvEn“¶[kÈöîl±îk÷×·ém¯ßôþŸó6ícEö5 dÒà᱌ÜÒ×¼º—äíÝú6ÙþŠÏGü*mk©B¶ÆÍÌ=ÍXƸ75¬Êüö¾Ûë~ßðvl³üõ¦î¬Æ‘·‡“Îú¯{´±ïú¥ÿŒE}öž*1[+{ ,þzËîvÿAÎÆež—§üÇé¿ÁTìeÒÙ†Ÿcúö·l5íd}6WvÇ}¡ÿ¬ý£Ôÿê"%Z?‚zΤ´4z,5ÔÖ45Özþoé~{è~í•ÖÊ¿Â8¬1Å1cÖ’Ñ/Üà8kC`Ü÷l¯è{+»'Ѿ•S)ugi›}Æ¢}ÎkªÉ®ªEv7ÕÖÏEŒvËý?Ð[è}7kvÔêjÞÛ-ÿ ïs‹« Ùc£Õk·Õ¯'ežÛõ$-ͯª£`Õ¯sk¤»t‚6ä½û=γÞÏûrèþ²­md8:¦Ax.}d†±Àc†ç1¾~—èÿKÿ]¯×­–ƒ–êjÝéU¸¹» ZÒíÏ©ÜÛ[è¿m~ŒÿﺯôC†]Yn9&¡5Þ ÷ ¯Çg»}›Y^ê÷ú63þÏE§àR¦ã½Ì²¢@~9,m­>ÖÃl§ÐÚw³cÏ¥gÙï«ô_Ï©ÖÆ6·ì¬4;cE{@ î ÖÝì}vmÙìþcþ 3ÚêØÊK}¶=®q%à4—±Î±Û½ŸÉÿÑhµ²ã.Õ²ç8 .{ƒ][aÿºìýÿç?Ñ&JH/ÿÔÎwé}Jw†ÉÚ9'Bç2#ó¬þrÛ?óŠÃPÙs^âEº7´I;ŸîvÏAŒ{úk=ìõ‹c«ˆy_&µÁÆ=+ìÚïô^§¤ŠêßXZZ\¬$µÌnãíú?¤ýÿøE“|;ìZ 0h$ ™0ÿv×XÿÒo÷·ù¿Ñÿ„ý“‹.²k>¡÷5ÆG¶æ5Õ†¶ÝßùòÄï uOsqúA ˜Ò¦Þæ»ÿ&†ðÁéÛ]Ÿ¡g/ —aÕíõÖmc¬¯vײ­žºù(6*{XÇl: ÃNâ'J˜=IöÖßôŸú0}íqÝ.iÐ’à£pm¾“w6¿næWK>šcíÚC‹œ.Úw,’Ö5õíwýu'¾Û+fæ‰,~Òæ}»Xíìm-§üßõý?LUÿjØé!÷ŸMÚC\׸ûnú?ØþÅ^§èÔ²CÇo—Wa/{€;Þ G§½ön÷×éþš«?¤ú;?µAÍ!¯hxkˆ{œà!Ìô}íŸÏÿGfû6)½ ZH>Ñc\©s®¹Îk¾»ÿwz}Ò˜S[IoÚƒ\àYê¿nã®æûÃís(gé1iüÏç©^Ö²‚GÐõK›ì®l±»ì«u~æ;ô^ï^Ú½CÕþu6Ç ës}6½¾Ö1Í%Í-?Iî®ÏÒ~Ž»ð:ÿKb?èœwU7ÍmDÀkœwVÆ~‘Û™éþŽ›ýž‹îb6òáWT ¦Ê¯¯nùqõ6ÍÏÜ?LÛ\ÏÒ7ÓÙþõkYo­EH¸æ§my¥Î‚™oª×9»*­µýΪ¿e¶oý/¡fEÌôF?¨'m–ØKM­pdŽ[½ÆßÑ5Ÿ¡ýþ üêŒW«÷;Ñs@cýŒi‡5ûÜúË62ýŒû?¿Ú¿ž¤‘×Ãþj™1Îõ=V÷5á´;pÚÓþŸI»ÚÏu–zÌÈöÂú”'Ç5ZCð@q®èsœòËeµ–^ý›Ÿ“[½ÿ¿é5oèÓPëksÙ]@XZ+inâÖ‚ÛékxsýÖ1íckÿЄ­õ-­–9ߢ­Ç402ÐNûýî-±¶z_Îz´¿Ó¯ùð_­*ßóJï¹µ¹®;/î/†±ûvíØÈkêo«¿gó^Ïü6º×4²Ço±¡Îcì.†»c«þqΫ{}ÿ¥ÿEÿü⃜kÊËh°0YQ {l­»é¥öVÖºßMÌÿüßøzý =šÇ5ÆÂÆ.»sZÙpÜë_¿èW¿Óß¹þÏúÂù)-~¶ ÆúìŸRÊßî=§Ñ¶½à7Ôþgwþú_[Ö{®}Lp`}—K·C\O¡ú`ÚÆXÏV¦c¾¿J¯CôÏý?¦¡’úí¡ísܺ¡ikžw5æ²÷l5ÝüÓª²ïø¿[þ5ìÄnÓC˜ÈýG¸1¡‚º8Üßnû+±ìõ®ýôÑ$7~GÁjí|íy"»ãÞº]éí§‘µû=þwÙüæ7§þYÈäà’5Gžß¤ïk¿èƒþqT;œù­±.¬=Ý¿ÚÇ9ŸIžße¿ç©¶Üpð÷º^ã †·ù­Û6ìþ½^ÞÿøÔà …?ÿÕÊ5mvÝC H†`‡9Þï¢Í¶'ô¶)K›¸hl§{Fðwzž”l«÷ýOWþý"Ö7ÕÚHãig:±Äï=MßÎl®ÏÜüÿæÐßµÎm•ÒÓ¼ÖÑ»ùÍÕl?΄öýøE’-ª’Û¦7Ð× v´ZÒûô¶»üÓÿ…±&ÃZÂñ¾ÒÝÎ;‰s·Ûîe~ÿcÂzž¦ËPÞú‰qh- fò'pv×ïÌk}Wovÿ¡s¯qg¦Ç;mf6¼‡¶I÷:]¹Þ×}½ ¨öðS70îm•Ù²·0µ­xK»À>›v³ùCü"‰›[i5©î—4Ζ–·èûÛµIÆÍ¬xôÚ@€ ¦d·tŸð³þꌳsÃ×Ái´ßÒúߤOØû’‰µZÍ5 LµÀí7l7}¾…{=µú»ßßý#ë±AÞ¤º¢Zç!Í'nÆú“þÓ{gÐÿ„R¶Z}7ÎÚÀÜ'èÎíÞïðmnßø«Tž+sÞl€Î.ÑÎ%Ömö·Ùe¬s,¯Ýþš¦zžÄëüuS ?˜ýÖlv矠Ýð7þ•Û>üg髺æN¢KLúŽƒ«O?¤öþ’Û?Ò»ÓóBÄöÖÚà¿~§Q·R,Úö‡nel~ÿ¥úOÒþgîH4‰{Úá´qpigÑÿÏZ½ßõĈðûT“újvÆ“fÙ&Zǵ¥Ãô›·l¥ö»Ó²Ë¿EïR/m.s=Ž\÷Y;¶‡YcYº7³Ù(«ÿÎYþ—ù´±¬>©{ÿJI`¾ÿÌkë“¿óÝcùŸédº»qËNÐCØÐHi`‡XÝÛ˜ÆÔßWüú?í‹TFû««:½PÁ½Þ£]q.iÓx'ÓÝú?Ò5޲×_èíÙéþ­múh;^úÜö5Ïqg󬤆Ϥv·g¦á»ÛüßÓÿF¦is7VÒÖÚLCˆ5έÜí¿¤c6ÿÛ^ŸèS2׉;}Û\ó®¢)µñc·oèë¯üˆøŽêYµ,Ú¦øÉH û=û®Ûì³õ§üÒ‰sª­Æ§¸6 uzlÜv´®mŒö~åß™c-³ïÒ?ü$í›^û–µö5Îp º\g÷>—Ѫ¿øÄ϶ÂñVãYôö hI³kœ×5ž«ÿ1ÿÎ~“Ô£ô•¤?R?³Þç–03sÁsÚÐÖþ‘ÎÝwµõ7e_øWôŸà•–=›\XÖÒv–¼_¥mŽÛô?Iÿý[ÔUöí°ÄµvÆ0‚æú@îev{K+­ŽÚöXë?ý'ÙëD«s\аX €‡vïý µVßUûwÿè±"kù~jc±áÖReͲHØw€ç6×¼VíÞïæöÿÅÿÂÆÐÝÑê1Ï÷@¬—:K½'±ÞßôÞÏSù´X›Ã}=À7èëísŸfáîs™g¨ß}Nÿ2´¡;I‘­%¤°ý ÿƒÞÿûoùÊw½-l)ÿÖÏ`vÏvààÓÁÐ8G¦7»Øï§êz¿ð•¡´†Îá/]an¤$îÞïu/vßû±³ÖôÑKUž ©º˜q`%ÐK‹®n›~ü¿ÖPc6V\ñÄ ;G5¾¥[_!»Û·³ùÍöìY`Š-jUF§Fí®¸·’ykÝÏôv}?ì)RÂÙ†[.6ç[@|û[ûµ¨Š˜úÆÍÖ{Ó[L»s÷´}nú{ÿœ³è[üâ»ÕkƶV!§‡7w¶Àà7~Ûïø¿ôžš]«Í›/.;Z=¿™§ÒÓ¿s~“[üã??üăœÇØÒ$1äÐ:¹»ïo©ÿn!3)x›Dm2]«½»™¹ßKèYé¿Ùÿ¢ÕHä9µÁ~¤‚ÐAÕ’âvŸm[õ_èÓ ¦Èim±Ö1í@hkÜaÐ^)qq—5Þï{=?úu©¹Î, ƒ´L$lß_¤æ=»w~þŽ¿ô_Îÿ—6ÀMŽk5‡4Á;ZµÂw5µ}ýZ¥¼ìyid>×Ë7;Óþz}-ûkw²æ;gþ‹uëDl¦%%ÁÎ"b²“¸îa÷íè÷¿ÙWóà”[CdÛ:’ç¼Mm.¨îcžÏ§K7ÿÚÑ)WsÛ^Òñé“«÷ƒ¹®ͳÚÏÌwú/çL¡císɯ±%­¬¶=ÛXï{[ký?gúø4EìªfÖÖýÚËfvê †ó»vïSw§êàᵤR/íwXî}³»Üêý›}µþôªL 56Ç´:}Åă»ÚîÛïuo÷~‡ó_¸†çXÚ@ 6±ÓôAÛÿIþ‡ÝúM¿Íÿ-â Ä½Ì×ïi–’Ø«¤7óÛþéÙüçèÑ)}—µØYwißÝoé*iÝ¿Ûûþ£*b®àúòÜ 'ÔoÈ#ï}Ÿ¥ôÚßÑ¿ü/éQjmF¢KÝÄhÔG¥vøYíÝêÿä nɶÀ"¬¸µÐX O§e±þw³è½?å§±Žu»ik›X«ØáýžŸüÍú~¯© ßvÒâ¶<ÀhkÙ±ÎÛ^ÿk=¾ÿðé>ÐÐË.-^ˆtÎÆ¿ù£³è2Æ!TtRîµÚ“[†Ñ±à7ôaÍ®¶6¿Ìô¿ÕeŒÿ ö¯[ßìjæºÖ<‘£C¸4謹Îk½ŒýÿæÙcÔj}ÄW°qsécwîkHm>¥ß›úO¦¥„ЉÛˆ8NßQ¿£Ù¶›ê{[üÞÏøTOe%u4ìÐÁ ú¤í’ñ½Ÿ¤÷VÇ6Ûv3üÿWÔPôÜËD8Ú@>¨{F\ÑúcwGý#(ô¿žgé?ÁúvÉ–› Î<î!‚Ë5ö²o±Î¯Ù³Ò·wïïc?Ò)µ¬c^×9å»][§yÚÆî{ëqõ+È®­ÿÌþƒü/ø$‰={)ÿ× ç‚€Áïqv­™Ýô_ìüÍÿúKü$.Úûwîíq3¸ë¦æXëœw¹û¿Kë%M¤†ššk·V1Ò=BàÃk÷PÏk÷ÛŸñŠ>d2ÐZýάî€ßvæîfÝߟº½ÿðŸàÖN£v­™2Ò1[VÖ¤ « 4AáþݾýÏþ§öÓWU­o°“.qst$ƒ·ü¿1³½¿ñ?¡ýéT¬®õ–ÛÃ@]í-sŸôYo¨Æþ“éþ‡ôŠT˜¯Sìcœí™!¾Í»]µÏsô}MŸÎ~‹ôžª=4몭 ö{60{_î÷Ëv}=ÎgÑú~Ä÷YemsCKw½¿HÂ4±ó»Ûclý'é6"ÚÖúNkÄ1û¡Ž€ÛXv‘¹ÍÙèÕ³éþÓý"Îmöî–½Çc˜A.ìL}'?s½?êÛinu ]¥¯õ*/Ý^íÎx @?˜í¾Íþß§U›6ÆzI¬µ„°Ë68?k‹xvç=ÎØè}ÞÏw©üåŠ,{ØÚ‰;ÍpÝÒÖÃC›¡nÍígõÿëª%Ú ØÒã^‡G‘¾Š›éëºýÿ¢ÿHÿçPÔJ›[÷º§¼1„¹‚ÝGµ¶>?ž÷ÿ;[PÅ.!»?œ“XsFÛ—mÚEôEü¿Ñ¤¹*Ûê7c‹[¸´K›ôIéûY³é9wøOô)0W³Õ'Ûkîi!ßFí¿KÓ³Ùé³ÕÿÒkm”ÁÌ;l‡VÖØ’öVæ;ôNþr»?·ÿ“cÈd°¼ƒåÅÄvïú_¢²–?fÊÿð4K‰´8†5®¶6†ÖC¶le~ÚÜÊÿ—jƒ^ìbçû÷4Iy˜-ì£ÖoÓ©–Ø}ϱž£=/ç*ô‘Üx…ZöïkÜã[õ­ÀLmÜ-þl¾ÍÛ›ïÛÿéú‰1÷±»¶ÇÑk¶öÓôúO·k¬ô½/í¨¶ŸQ¢vÝ`Yì×nxüÚ÷Wgóž{=ö¡TK˜,’’I û™éý7²ËŸ³~ÿçiöo¯ôu#Wôî¯Ø–²ù"«ZK²·Ã„·ÚÏÑ׳ù½ßOý©ÿ üêiüáaôFÑî!µÍ£{§±ŸÎ>Êý{ÿÒ\‰þÕiúB²¸;Œn-Õ¬µÞÏÑú–{+ü¬–à]aß²â!°â=ÖÐ÷µÕ?w³ôµþùïôˆkÙ*8¦¹¦ÀÐ]ì°?Ghö³k¿Ÿ­ÎÙÿ[¯þÔLç¾ÊÅ–8šß ­®p–msžÍû½ìvÚÿÕ‰«¬l2ºm.fÀwµ»·!—úÌ{î½ÖQU•Áz–8 Ö¤µÇÚû@ ¶Ú÷?m•ìÙÿ\JµBA겦4¼VXfØ.í¿¥hþqóÿ ê×ê†Þ“iyc=gP9„´u-ÛúF‡5õ{½-ß¹g©±Cc€k«—ÖkÐ?qiÝÌXßu¾›kú[èþ¥¶"â´Tîk+" ¥‚[éÇï7©ýÓ tÀ)ÿÐÊ4›n;‡4¸C 79‘ïô}MŸàíözŸÎìN^÷Ö[tjæ±›v€æƒ;-ó6¹¬wèöo³ý*-Ŧl­¯ªÍÀ£áÛß³Ûê·nÿå³ôŸÏ';[hs²§[ì€È%¯¦ÊÚý¯Ùú?æ·ÿ#ý2É2¶©±Üç1¶uOÜòOçî,i†è÷7è{ÏOgüoé~‚ïT´5òw#ß¿o¼þg¿{ÙMŠm¹¿g.-ßN²H. ¸ûôÿ¤¢PõçFç×m£Qd¿è9ž•^£\]ô©þ{õM:(,ÐâÍ‘«\Xp'Üí³±ôÿ7güZ“Z~®xnƒOsö;ó)cw±ì÷ÿb¿Ð©À±Ž;õ61ÃÚ\FðïO´ú–îö{=?ç=?MšìoGô~Ýä‰#Úï¢-ÞïÑ7oÐöþg¥Wú íû6Rõìh&Çfí¯±íq"gü#ººìõü÷óV(n¢ZCÔ.ù×{]íÿ‹÷ú?ñu¤*{ ª-hacŒ¦æ‡þ¤öÿ=·ôôúŸðJ#ÞßL€¸9Äj»Ûìú>ãïöúžž7ýq6k{«|Öç€×Ùú÷ÆÏ{ZÍ›?àýÿ£C±öÆÑ‘Ä™oóžç}lký•ÿ×?H«º‚Ö›í!g§[šà \}_K_Òz_EÛéÿ‚üÄ{d¼¼ =–0I—V÷û\ïkÙþ“óÿ=ëjcd>°ðÀvêÒnŽh69­ßÿCúéÞöØY'F‡{A²[þ ¿Ü÷þ‰¶léëŒç‡9­°ËÛ.ºZñ ~’ÖVÇ–³Gz{ßëý?æÙìRõ!µ½¦DKOC€³ônoèÿ·þ-t…ÙE—Evµþã&ßtºí•·Û¿y·{?MêúŸÍ©cµÕØI’C[úeîÛë;ݹÛYù–3ô^¯Ó»ôžŒ^×\×µ‘Ìlq¼?Ýé±ÞÿæÿôZfÇdËÈ.c@¡Ä4臿£gø-žÏ߯ùÄ4oP–EÅ·5¹NÞ \gnÖÅn}¥¬ÙüÛvÔÝ•×éo±=d›‹ÿÂlq6w{´>žÍÌõ=-Õûÿý/øã€ç9¶=ðNÖëk wÿ\Ýú$Ÿ[íµË} ù¡Ä1‘/ßOÑo³g¥Z66ÿÑTÁõÛlˆm^¬pÕ£Ûè½ß™K­öØÿÏÿ®'{Þ ÏÝ`ÿíÿäÓ—;Õi€~ís@Ú××ùíýßýsý*;ƒ ¡ÆÚIIk‹Cžæïý5ŸÎ{=Oí M)®âÖ¾ÇãÀw¼¸¸¤þž“‹¿G¿Ýìÿ§þ ìÕÍu&ZÝÍÌm yÓz,ýó~›ìÿ®XªÚÐ×±ÀÐçAÀ{[.Ú×ûv1ÿùš•%â§9àzçIcßü§·o¿gè?¨ÿb2,)ÿÙÿí8†Photoshop 3.08BIM%8BIM:å printOutputPstSboolInteenumInteClrmprintSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oàGrn doub@oàBl doub@oàBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMíHH8BIM&?€8BIM Z8BIM8BIMó 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM@@8BIM8BIMI Untitled-3nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?ð8BIM8BIM /§  à,/‹ÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ? úê ¶¦8—1¥¬Híu•¹þǽíý#kgó¿ñ¿ÎÚâ½µçûwØèÜÂ×=žàïvà×¾¿úç¥úEQŒÞ žâ!ÅÌv“µö·ÔÝüÍN±eMoú|K-ô­WYïI»˜ í÷ÏÎØ~Æ·Ù¿ÿYÓ[ÕªÂý¯qaqg¨`íƒíñûŽvßÓ/þè![Iu®H´¸Ÿ~£ÜNÞ^Ç>­Ûã?3ô e‡ÒfÒM$—5ÛD }›_ûÍk½–¢,kÐH2 Øðãùÿè~ŸÐý'ólþq HªJ&’Ú¶7ÚýÀOÐ'g·ÚÇ·óðEò®­îc·tƒnÞCƒ¤{÷?gýuKxsKÃ7ƒx. 1¹úÃXÏð¿È±Aô׸xKÚG¶C\ãceÃó×ü:Æèb†´Ù%ä—8~“èÿ8Êÿß]?é}OQLú¶Öº¶íÆ^H=ƒ~”ÐÏ罬¶æ[èzÿàÿIZl†5Û]ÂæØZ.‘;CÚçîÛúo¥ôßn;7ÿÁ©–KËϪI.ôÝ,†¹Õ?ô>Û=F~†¶l¦ö‚úiàìRÎÖØEÛHp qidÖ=ÔY}Õ1gèËŸ·÷?àP¾Ìö¼YµÑŽöƒ£÷‚êO»nÿ¡^Ïç+Èúh·×Fö5cª$½‘!Û oÒs™êºÏôŸ¢©ê[ú4Gã±äâ»C‹Mdè»Ôu;]KŸêYÿ¢ý4Þ*ðµS^Œ€ã±îw©`ôšÂ`5vÏoé}OÑd7þ ;ns,!Ð@Ý-$Û;ìsÂ3ó¿Á©_X¹à04š^ÝÖ–þ¶[mgsœúÍû2– $“³V> ‚ïséfÝ›ªÝôý?èÿEê3ÑCNÚ­¦šÃ,©ðà Ôã1ô~‡éý›Ýþ›?Ñ)Ùk„¼<ý ‡€êëk\6¹®Ú;ü-?éžæ¸º"Àâw1‡sˆy¯ôn ›3è2¶çÕ]›`úµî±ÇpÓùÛlôÿ›÷·ôÉ¢B7z®/i/ka¦Ú>‰­›?Ý[Ùèÿ#ü*˜e…ͯF½Ó¹ò2Mmõw}»wæ¿ü'éþ*«¹à Z©ii Ìkµ®v×}=Ìõ³èZ£cŸUÐ Èho®p†¶ÇNÏÒº¿gü?þ/J—uL–!„à·WDZÀ;Ùé{ÿð=éØÂ5ÜâåÅÚ»ùÏOÝ»o²æ¿šg§üµ·ÕÇahq;‰k·»oøk(Ûþ ¾æ²ÂÆ·yÛú¹ö¼ Þ“EŽnöífßô¿™ê$ŽÇ¶þ*nYe[›o¼4´‚Éiq;¶þ™ÛkÝïþmþ͈aâ\wm$íÚt}';ŸcþüübŽòúˆtím›Fѹ¦"°ýŒŸûkjzËÄÆæ¾¦Ã¬’XDûwmÝú7Ý]Œöûÿí¿ÑŠ!EÿÐÍ´\]‹Ká¤9Þ›·ßá6YùŸÏ£P¬‘¢ %Úĸý!W»n?õ‘²+.Û«Á>•¡º:k¾§ûO³Ùÿþ"âÒéc]­npËẖ7ÝŽßÍôþ‡ó¿¥ý"Ȱiª™7Ü+y†¾’Ó¶w7Ó}¬·ô­©ŸKÓݳþ ïðh…ÕÛS…Û…nls‡c˜?©gµ¿Íªþ‹HcŒXÐÝíkýÍÚFÇ ¤÷¹Ûìüö~ó=DWV åòdnv›¤é ÿŠõ¿=WMÅ€—©ëX¥]Ùc*¹–Xe¡þÒKìk¶ÿ€ª¦mgèÔm·ÚãPpDÊZíßOþµj-^®­îª³ô.½¿ÎìÚßoé¤ön³ÕÿÏmn,ÞêhÁêÀ¸5­.Ÿ¡`õç7ýüó›u­Ê!­‚÷ƒ±’l,Ûµ»6}?ÚÏæÿHÿOÒþuü»ªËcÿPÍ›­ÎMÍqšïGÝíÿK¿þ·ê$û\ Þ¹§W¼ndþߥ±ìdmÿKþ–¿Nµ5ÅÍs[ë‚ýÎ2;WìÓÚÝÍüßø¯æ¿J§‘}D;`{ie͇˜­¬±®ØÊ÷mõ.ÿ·«) _Š÷n!Ž–‡4Y¨¯ôE¡þ>›¿Óÿ=þˆ,®âÆSÕ5¤p–³éný#­þgЫóÿÂ~OZÚÃ=­Ù1€×7Ûc-õNçìýçÿ¥«ôv~‘*X=3UÍ-}mËd’[ô›VG¹—=Îô˜ö:º¬gé?ãÕ×m}WvU­¬=äXOµãC£ƒ]sýYs÷1ÞÍ?úŠN}a¥îp­ÁÏ€D–¶XÛ=Míýß²ý'þÔeÎþ޶²­ŒôºÒÓ³k]é9ÀNÊÅŽ÷îvÍ»ÿ£ÿ‚÷Ø•ŽºÑ}•¼Ø#Õ ¬‚öÔà×ý-þ§ú?Òzÿáäš»[[¬&Ó¡a™–€÷{¬~ûèþ•ž¥tl­ïôœõ¿žQdÓéo'~Ö±¦:µî;ýWNͶþšŸú×è¿›±¡¢ê«°º* –´æ›ƒj÷=Ão«êo«ô?£ýøk½Gз× ë6±Íu¦ Hll©cìfûmß¿ÿõ’ððEÚf:«w8·sHÆâÂýë£è}Y³ùÚÿáoMá¬çlxk§–µâ¶±õîo·mOÿŒKhp>¸-¸5¤¹®sc:Úê¥ÌÝgïþޝV”Ô ­%¡¬ljI:ÃZXÝÞ—©_ç×éû?Géo¯ÒC†¶?ËÁx¦{C¶n¢Öµä’CeÛÇÒsý¾ÏýH“‡­$°¬;ŸðŸ›¿Õïÿ긽’ëøZ÷ o¹­cË]ï÷}?ѳóýF)×u a~ÍÖ9»^l.ƒOÑlæŸê{?üó¡¸U¿ÿÒËo¨÷ϵƒ\ú·†Vm°úUÛíÿ†ÿGü×è?qsj68™q ªÉníÔþfßQžölý2%­/¡µ°:\a vŽé6môs6?þÜP}»šàÖ6Êœu­Ž–è uwïÚÝûöúè¿ãYìl~k¥ Z§V]_»Õàæ¶Æ ‹,â·þk¿IüÝÞŸóuÔs¡…¶¸†4´z›Û»ØK?7ùݹ>‡õ+¦+~öWê×%Ìsôyqkôvïo¨ÿÒo³èz¾Š›kh¾&€d¹Ú‘·Üv›g¦û75[½/Òÿ8‰î”V·ÔC_ºíµÖÖ‡ Ém•W¿Ûé6Û™üÝv>ïæ’w¥¸ u»\ZOÒÔ+Û k~–ÿ£ú?YíkžÖ†¹Ò ÕÄoÑŽ{« ~×Ó[?Ñÿ.´[-»è¶Ç¾@sÜul“îú{7{}_ðèÿÂzFöC8¶ˆe›]¯µ…ΡæíôÿJÏäç´2àlkÙ»cšæl ‚©öìôv¿¿£üßójw=©­c]Cw¼Ÿwýü þ´ªØÁ],$Ö7Þ&vûßô[é»ùæú¾·©üÕ¾¥oHd÷袕–cXãSÙ¹¥Á®v×)ݯ±µ5¾ýŸñÿžÏRÙµÎu-±¡íi6!åäï.ÜúÙê>ûÝ_ú;_þÕ¯ü" –Ä{¿Civç{CÞ¯Ò®Ë?@ÿQŸèÿáS¹Œ—ÊÎý¸@.kZçÒúý_Ñ×µµûÿWøOøO´£¡ûT ¬l ¥Í Á[ímvmpw¨Æú•nÆöYÿ£$û‹A"×Zç“ lIgtÙ8û÷ÔËïð~§ø46ÞêÆêçê-‡p‡=ÏnÇ5Û.nEmôÙéú_Øõ.Qµ–ØÊ½"¯×®ulam•µ¬sZëXçþuOuŸŸé£[*’ ôk€h|A×þ‘ÎpØý›n~Ç7ü'ÚwÛìOfÊØÐL [Ä:·ŒØïg§k½ÛêUêWúOÑz)zAñE´ú»í%ÁûêK\ßWèXÏw¿g¾Ñz6þ‘BÇ ÷þ˜k±Ïö—±®‡oeÛ³ùßQûvWùžŠ¯ê¥ýÌ¡‚ÇA¾¶ÎÓ¹ÅtºÇ·Þÿé;ª¦ßÒ} )õ.µ;u{+k€q-µ†v6]ê7Ö`x³ùËYeµþ—þ°¦j5Eްú”í.¬ qp¶ÍÖz™w³Ôý¿ôÿÎÿÁÀØæ=ÒÁhÜ$5Ïxa»é} öYîºßc?™õ7¡ÞµÝ'foeVÁ¦»@ýöÕ³k\_úZMßü×èÕlw ò{Cžóïp¬’]k\úšöS6YïüÿU–ÿ7úJý5bÛ±ìf×7i¨†¢ öi»~ÿEŒÿ…ÿƒý" ¬°Ü6È÷µÌ¥Çéz.oçîÙfúIüÕV…ý"Ö¨ÿÓÌ|‚ê º5`Üw3oªç¹Î­ØßÎïÞÇWüïüRoFÛ²²×p}ýÖsgúOßý.õ ˜ÓS¡Í´ÁÔ€Ó¶Æ·èíkjnÇÿ×ë± ™‡nvøÚÓ´Ÿcà«õ_üŸÒz[?›YFëFª\»€ÛXà`‰–m> ö7Ùc)wé?õ%u Þí´Ö÷01Û×»CêØÖzQ»ÿ=ûÉÞÿyíhÁpÙcÛº×XÊ¿3ýø?æÔ+†îs75æ8 ÛE>çÔÊ¿:ÖíþsÓÿM‰ ßö¡oJš˜lK/ ‚@oéjŽÑÙ±¾¯Ðý2BÆ‚ðÀáên°eºt±Ìk_gÓýèê³ôUÙ³ü ë_A3]®—mh ’óù·2;–íÞ§Óý«üI3*>› Àhký»„¹²×>Æý~óí±Ÿñ¨ƒÔêvKdWuomuE¡°v ô³Úí¾—¿é¿Óõmþ™äPæÖ¿x­­ Û'Üߤïõÿ·=Dî¿6àm}¯vöYí,i®œí­wó–íÝn?úOÌþqìÊ^ö5»ƒ^æ7ô¥ÁÎ-?JçÙ¹÷Yº—Ýuu×ùÿø€ ^œ†Ö–=¯´9Õ±Î!þÃéû­gø7½¾“ö{ÿÒzj/{mܾH&vVû*næ»kþ‡ø=–Е>Ÿµ –µä—ÖâéÙº¶³ô/÷¹¬ômô«³ô¬òKÅÖ5 ¹µÜ\[Y’æmöîý'ò?Âú75è¤bÒ“ãnØF–\òNØaÛêïv1›Ýô?î?ýØQêµÅ¾“ ‘%Û‰{¬£Úë^É÷Ùú_ôŠ»eMvEn“¶[kÈöîl±îk÷×·ém¯ßôþŸó6ícEö5 dÒà᱌ÜÒ×¼º—äíÝú6ÙþŠÏGü*mk©B¶ÆÍÌ=ÍXƸ75¬Êüö¾Ûë~ßðvl³üõ¦î¬Æ‘·‡“Îú¯{´±ïú¥ÿŒE}öž*1[+{ ,þzËîvÿAÎÆež—§üÇé¿ÁTìeÒÙ†Ÿcúö·l5íd}6WvÇ}¡ÿ¬ý£Ôÿê"%Z?‚zΤ´4z,5ÔÖ45Özþoé~{è~í•ÖÊ¿Â8¬1Å1cÖ’Ñ/Üà8kC`Ü÷l¯è{+»'Ѿ•S)ugi›}Æ¢}ÎkªÉ®ªEv7ÕÖÏEŒvËý?Ð[è}7kvÔêjÞÛ-ÿ ïs‹« Ùc£Õk·Õ¯'ežÛõ$-ͯª£`Õ¯sk¤»t‚6ä½û=γÞÏûrèþ²­md8:¦Ax.}d†±Àc†ç1¾~—èÿKÿ]¯×­–ƒ–êjÝéU¸¹» ZÒíÏ©ÜÛ[è¿m~ŒÿﺯôC†]Yn9&¡5Þ ÷ ¯Çg»}›Y^ê÷ú63þÏE§àR¦ã½Ì²¢@~9,m­>ÖÃl§ÐÚw³cÏ¥gÙï«ô_Ï©ÖÆ6·ì¬4;cE{@ î ÖÝì}vmÙìþcþ 3ÚêØÊK}¶=®q%à4—±Î±Û½ŸÉÿÑhµ²ã.Õ²ç8 .{ƒ][aÿºìýÿç?Ñ&JH/ÿÔÎwé}Jw†ÉÚ9'Bç2#ó¬þrÛ?óŠÃPÙs^âEº7´I;ŸîvÏAŒ{úk=ìõ‹c«ˆy_&µÁÆ=+ìÚïô^§¤ŠêßXZZ\¬$µÌnãíú?¤ýÿøE“|;ìZ 0h$ ™0ÿv×XÿÒo÷·ù¿Ñÿ„ý“‹.²k>¡÷5ÆG¶æ5Õ†¶ÝßùòÄï uOsqúA ˜Ò¦Þæ»ÿ&†ðÁéÛ]Ÿ¡g/ —aÕíõÖmc¬¯vײ­žºù(6*{XÇl: ÃNâ'J˜=IöÖßôŸú0}íqÝ.iÐ’à£pm¾“w6¿næWK>šcíÚC‹œ.Úw,’Ö5õíwýu'¾Û+fæ‰,~Òæ}»Xíìm-§üßõý?LUÿjØé!÷ŸMÚC\׸ûnú?ØþÅ^§èÔ²CÇo—Wa/{€;Þ G§½ön÷×éþš«?¤ú;?µAÍ!¯hxkˆ{œà!Ìô}íŸÏÿGfû6)½ ZH>Ñc\©s®¹Îk¾»ÿwz}Ò˜S[IoÚƒ\àYê¿nã®æûÃís(gé1iüÏç©^Ö²‚GÐõK›ì®l±»ì«u~æ;ô^ï^Ú½CÕþu6Ç ës}6½¾Ö1Í%Í-?Iî®ÏÒ~Ž»ð:ÿKb?èœwU7ÍmDÀkœwVÆ~‘Û™éþŽ›ýž‹îb6òáWT ¦Ê¯¯nùqõ6ÍÏÜ?LÛ\ÏÒ7ÓÙþõkYo­EH¸æ§my¥Î‚™oª×9»*­µýΪ¿e¶oý/¡fEÌôF?¨'m–ØKM­pdŽ[½ÆßÑ5Ÿ¡ýþ üêŒW«÷;Ñs@cýŒi‡5ûÜúË62ýŒû?¿Ú¿ž¤‘×Ãþj™1Îõ=V÷5á´;pÚÓþŸI»ÚÏu–zÌÈöÂú”'Ç5ZCð@q®èsœòËeµ–^ý›Ÿ“[½ÿ¿é5oèÓPëksÙ]@XZ+inâÖ‚ÛékxsýÖ1íckÿЄ­õ-­–9ߢ­Ç402ÐNûýî-±¶z_Îz´¿Ó¯ùð_­*ßóJï¹µ¹®;/î/†±ûvíØÈkêo«¿gó^Ïü6º×4²Ço±¡Îcì.†»c«þqΫ{}ÿ¥ÿEÿü⃜kÊËh°0YQ {l­»é¥öVÖºßMÌÿüßøzý =šÇ5ÆÂÆ.»sZÙpÜë_¿èW¿Óß¹þÏúÂù)-~¶ ÆúìŸRÊßî=§Ñ¶½à7Ôþgwþú_[Ö{®}Lp`}—K·C\O¡ú`ÚÆXÏV¦c¾¿J¯CôÏý?¦¡’úí¡ísܺ¡ikžw5æ²÷l5ÝüÓª²ïø¿[þ5ìÄnÓC˜ÈýG¸1¡‚º8Üßnû+±ìõ®ýôÑ$7~GÁjí|íy"»ãÞº]éí§‘µû=þwÙüæ7§þYÈäà’5Gžß¤ïk¿èƒþqT;œù­±.¬=Ý¿ÚÇ9ŸIžße¿ç©¶Üpð÷º^ã †·ù­Û6ìþ½^ÞÿøÔà …?ÿÕÊ5mvÝC H†`‡9Þï¢Í¶'ô¶)K›¸hl§{Fðwzž”l«÷ýOWþý"Ö7ÕÚHãig:±Äï=MßÎl®ÏÜüÿæÐßµÎm•ÒÓ¼ÖÑ»ùÍÕl?΄öýøE’-ª’Û¦7Ð× v´ZÒûô¶»üÓÿ…±&ÃZÂñ¾ÒÝÎ;‰s·Ûîe~ÿcÂzž¦ËPÞú‰qh- fò'pv×ïÌk}Wovÿ¡s¯qg¦Ç;mf6¼‡¶I÷:]¹Þ×}½ ¨öðS70îm•Ù²·0µ­xK»À>›v³ùCü"‰›[i5©î—4Ζ–·èûÛµIÆÍ¬xôÚ@€ ¦d·tŸð³þꌳsÃ×Ái´ßÒúߤOØû’‰µZÍ5 LµÀí7l7}¾…{=µú»ßßý#ë±AÞ¤º¢Zç!Í'nÆú“þÓ{gÐÿ„R¶Z}7ÎÚÀÜ'èÎíÞïðmnßø«Tž+sÞl€Î.ÑÎ%Ömö·Ùe¬s,¯Ýþš¦zžÄëüuS ?˜ýÖlv矠Ýð7þ•Û>üg髺æN¢KLúŽƒ«O?¤öþ’Û?Ò»ÓóBÄöÖÚà¿~§Q·R,Úö‡nel~ÿ¥úOÒþgîH4‰{Úá´qpigÑÿÏZ½ßõĈðûT“újvÆ“fÙ&Zǵ¥Ãô›·l¥ö»Ó²Ë¿EïR/m.s=Ž\÷Y;¶‡YcYº7³Ù(«ÿÎYþ—ù´±¬>©{ÿJI`¾ÿÌkë“¿óÝcùŸédº»qËNÐCØÐHi`‡XÝÛ˜ÆÔßWüú?í‹TFû««:½PÁ½Þ£]q.iÓx'ÓÝú?Ò5޲×_èíÙéþ­múh;^úÜö5Ïqg󬤆Ϥv·g¦á»ÛüßÓÿF¦is7VÒÖÚLCˆ5έÜí¿¤c6ÿÛ^ŸèS2׉;}Û\ó®¢)µñc·oèë¯üˆøŽêYµ,Ú¦øÉH û=û®Ûì³õ§üÒ‰sª­Æ§¸6 uzlÜv´®mŒö~åß™c-³ïÒ?ü$í›^û–µö5Îp º\g÷>—Ѫ¿øÄ϶ÂñVãYôö hI³kœ×5ž«ÿ1ÿÎ~“Ô£ô•¤?R?³Þç–03sÁsÚÐÖþ‘ÎÝwµõ7e_øWôŸà•–=›\XÖÒv–¼_¥mŽÛô?Iÿý[ÔUöí°ÄµvÆ0‚æú@îev{K+­ŽÚöXë?ý'ÙëD«s\аX €‡vïý µVßUûwÿè±"kù~jc±áÖReͲHØw€ç6×¼VíÞïæöÿÅÿÂÆÐÝÑê1Ï÷@¬—:K½'±ÞßôÞÏSù´X›Ã}=À7èëísŸfáîs™g¨ß}Nÿ2´¡;I‘­%¤°ý ÿƒÞÿûoùÊw½-l)ÿÖÏ`vÏvààÓÁÐ8G¦7»Øï§êz¿ð•¡´†Îá/]an¤$îÞïu/vßû±³ÖôÑKUž ©º˜q`%ÐK‹®n›~ü¿ÖPc6V\ñÄ ;G5¾¥[_!»Û·³ùÍöìY`Š-jUF§Fí®¸·’ykÝÏôv}?ì)RÂÙ†[.6ç[@|û[ûµ¨Š˜úÆÍÖ{Ó[L»s÷´}nú{ÿœ³è[üâ»ÕkƶV!§‡7w¶Àà7~Ûïø¿ôžš]«Í›/.;Z=¿™§ÒÓ¿s~“[üã??üăœÇØÒ$1äÐ:¹»ïo©ÿn!3)x›Dm2]«½»™¹ßKèYé¿Ùÿ¢ÕHä9µÁ~¤‚ÐAÕ’âvŸm[õ_èÓ ¦Èim±Ö1í@hkÜaÐ^)qq—5Þï{=?úu©¹Î, ƒ´L$lß_¤æ=»w~þŽ¿ô_Îÿ—6ÀMŽk5‡4Á;ZµÂw5µ}ýZ¥¼ìyid>×Ë7;Óþz}-ûkw²æ;gþ‹uëDl¦%%ÁÎ"b²“¸îa÷íè÷¿ÙWóà”[CdÛ:’ç¼Mm.¨îcžÏ§K7ÿÚÑ)WsÛ^Òñé“«÷ƒ¹®ͳÚÏÌwú/çL¡císɯ±%­¬¶=ÛXï{[ký?gúø4EìªfÖÖýÚËfvê †ó»vïSw§êàᵤR/íwXî}³»Üêý›}µþôªL 56Ç´:}Åă»ÚîÛïuo÷~‡ó_¸†çXÚ@ 6±ÓôAÛÿIþ‡ÝúM¿Íÿ-â Ä½Ì×ïi–’Ø«¤7óÛþéÙüçèÑ)}—µØYwißÝoé*iÝ¿Ûûþ£*b®àúòÜ 'ÔoÈ#ï}Ÿ¥ôÚßÑ¿ü/éQjmF¢KÝÄhÔG¥vøYíÝêÿä nɶÀ"¬¸µÐX O§e±þw³è½?å§±Žu»ik›X«ØáýžŸüÍú~¯© ßvÒâ¶<ÀhkÙ±ÎÛ^ÿk=¾ÿðé>ÐÐË.-^ˆtÎÆ¿ù£³è2Æ!TtRîµÚ“[†Ñ±à7ôaÍ®¶6¿Ìô¿ÕeŒÿ ö¯[ßìjæºÖ<‘£C¸4謹Îk½ŒýÿæÙcÔj}ÄW°qsécwîkHm>¥ß›úO¦¥„ЉÛˆ8NßQ¿£Ù¶›ê{[üÞÏøTOe%u4ìÐÁ ú¤í’ñ½Ÿ¤÷VÇ6Ûv3üÿWÔPôÜËD8Ú@>¨{F\ÑúcwGý#(ô¿žgé?ÁúvÉ–› Î<î!‚Ë5ö²o±Î¯Ù³Ò·wïïc?Ò)µ¬c^×9å»][§yÚÆî{ëqõ+È®­ÿÌþƒü/ø$‰={)ÿ× ç‚€Áïqv­™Ýô_ìüÍÿúKü$.Úûwîíq3¸ë¦æXëœw¹û¿Kë%M¤†ššk·V1Ò=BàÃk÷PÏk÷ÛŸñŠ>d2ÐZýάî€ßvæîfÝߟº½ÿðŸàÖN£v­™2Ò1[VÖ¤ « 4AáþݾýÏþ§öÓWU­o°“.qst$ƒ·ü¿1³½¿ñ?¡ýéT¬®õ–ÛÃ@]í-sŸôYo¨Æþ“éþ‡ôŠT˜¯Sìcœí™!¾Í»]µÏsô}MŸÎ~‹ôžª=4몭 ö{60{_î÷Ëv}=ÎgÑú~Ä÷YemsCKw½¿HÂ4±ó»Ûclý'é6"ÚÖúNkÄ1û¡Ž€ÛXv‘¹ÍÙèÕ³éþÓý"Îmöî–½Çc˜A.ìL}'?s½?êÛinu ]¥¯õ*/Ý^íÎx @?˜í¾Íþß§U›6ÆzI¬µ„°Ë68?k‹xvç=ÎØè}ÞÏw©üåŠ,{ØÚ‰;ÍpÝÒÖÃC›¡nÍígõÿëª%Ú ØÒã^‡G‘¾Š›éëºýÿ¢ÿHÿçPÔJ›[÷º§¼1„¹‚ÝGµ¶>?ž÷ÿ;[PÅ.!»?œ“XsFÛ—mÚEôEü¿Ñ¤¹*Ûê7c‹[¸´K›ôIéûY³é9wøOô)0W³Õ'Ûkîi!ßFí¿KÓ³Ùé³ÕÿÒkm”ÁÌ;l‡VÖØ’öVæ;ôNþr»?·ÿ“cÈd°¼ƒåÅÄvïú_¢²–?fÊÿð4K‰´8†5®¶6†ÖC¶le~ÚÜÊÿ—jƒ^ìbçû÷4Iy˜-ì£ÖoÓ©–Ø}ϱž£=/ç*ô‘Üx…ZöïkÜã[õ­ÀLmÜ-þl¾ÍÛ›ïÛÿéú‰1÷±»¶ÇÑk¶öÓôúO·k¬ô½/í¨¶ŸQ¢vÝ`Yì×nxüÚ÷Wgóž{=ö¡TK˜,’’I û™éý7²ËŸ³~ÿçiöo¯ôu#Wôî¯Ø–²ù"«ZK²·Ã„·ÚÏÑ׳ù½ßOý©ÿ üêiüáaôFÑî!µÍ£{§±ŸÎ>Êý{ÿÒ\‰þÕiúB²¸;Œn-Õ¬µÞÏÑú–{+ü¬–à]aß²â!°â=ÖÐ÷µÕ?w³ôµþùïôˆkÙ*8¦¹¦ÀÐ]ì°?Ghö³k¿Ÿ­ÎÙÿ[¯þÔLç¾ÊÅ–8šß ­®p–msžÍû½ìvÚÿÕ‰«¬l2ºm.fÀwµ»·!—úÌ{î½ÖQU•Áz–8 Ö¤µÇÚû@ ¶Ú÷?m•ìÙÿ\JµBA겦4¼VXfØ.í¿¥hþqóÿ ê×ê†Þ“iyc=gP9„´u-ÛúF‡5õ{½-ß¹g©±Cc€k«—ÖkÐ?qiÝÌXßu¾›kú[èþ¥¶"â´Tîk+" ¥‚[éÇï7©ýÓ tÀ)ÿÐÊ4›n;‡4¸C 79‘ïô}MŸàíözŸÎìN^÷Ö[tjæ±›v€æƒ;-ó6¹¬wèöo³ý*-Ŧl­¯ªÍÀ£áÛß³Ûê·nÿå³ôŸÏ';[hs²§[ì€È%¯¦ÊÚý¯Ùú?æ·ÿ#ý2É2¶©±Üç1¶uOÜòOçî,i†è÷7è{ÏOgüoé~‚ïT´5òw#ß¿o¼þg¿{ÙMŠm¹¿g.-ßN²H. ¸ûôÿ¤¢PõçFç×m£Qd¿è9ž•^£\]ô©þ{õM:(,ÐâÍ‘«\Xp'Üí³±ôÿ7güZ“Z~®xnƒOsö;ó)cw±ì÷ÿb¿Ð©À±Ž;õ61ÃÚ\FðïO´ú–îö{=?ç=?MšìoGô~Ýä‰#Úï¢-ÞïÑ7oÐöþg¥Wú íû6Rõìh&Çfí¯±íq"gü#ººìõü÷óV(n¢ZCÔ.ù×{]íÿ‹÷ú?ñu¤*{ ª-hacŒ¦æ‡þ¤öÿ=·ôôúŸðJ#ÞßL€¸9Äj»Ûìú>ãïöúžž7ýq6k{«|Öç€×Ùú÷ÆÏ{ZÍ›?àýÿ£C±öÆÑ‘Ä™oóžç}lký•ÿ×?H«º‚Ö›í!g§[šà \}_K_Òz_EÛéÿ‚üÄ{d¼¼ =–0I—V÷û\ïkÙþ“óÿ=ëjcd>°ðÀvêÒnŽh69­ßÿCúéÞöØY'F‡{A²[þ ¿Ü÷þ‰¶léëŒç‡9­°ËÛ.ºZñ ~’ÖVÇ–³Gz{ßëý?æÙìRõ!µ½¦DKOC€³ônoèÿ·þ-t…ÙE—Evµþã&ßtºí•·Û¿y·{?MêúŸÍ©cµÕØI’C[úeîÛë;ݹÛYù–3ô^¯Ó»ôžŒ^×\×µ‘Ìlq¼?Ýé±ÞÿæÿôZfÇdËÈ.c@¡Ä4臿£gø-žÏ߯ùÄ4oP–EÅ·5¹NÞ \gnÖÅn}¥¬ÙüÛvÔÝ•×éo±=d›‹ÿÂlq6w{´>žÍÌõ=-Õûÿý/øã€ç9¶=ðNÖëk wÿ\Ýú$Ÿ[íµË} ù¡Ä1‘/ßOÑo³g¥Z66ÿÑTÁõÛlˆm^¬pÕ£Ûè½ß™K­öØÿÏÿ®'{Þ ÏÝ`ÿíÿäÓ—;Õi€~ís@Ú××ùíýßýsý*;ƒ ¡ÆÚIIk‹Cžæïý5ŸÎ{=Oí M)®âÖ¾ÇãÀw¼¸¸¤þž“‹¿G¿Ýìÿ§þ ìÕÍu&ZÝÍÌm yÓz,ýó~›ìÿ®XªÚÐ×±ÀÐçAÀ{[.Ú×ûv1ÿùš•%â§9àzçIcßü§·o¿gè?¨ÿb2,)ÿÙ8BIM!]Adobe PhotoshopAdobe Photoshop CC 20158BIMÿá &http://ns.adobe.com/xap/1.0/ ÿâ 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@ÿÛ„       ÿÀÿÝ@ÿÄ¢  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®šÒÞ&Êu%œ£ÑiU $$ƒo‡’ç"%°]ÀNuù.áî"¿’+(Ê+¹®%õýÜèÊ‹ 1š (Týšf?†8 ñÑ ÝKyt‰%Ä/|uyä³ÔÆŸûøš&„˜nÖ‘’ÊÓ¡¨ÊqB26Náh%~]¼î“gn‹ -`“ÜÓI¶VDIÉ"öKSxðÊÉØ´½¦Ú}œÚ½¤Rk\mna’k«HXÞxÉWU€­H9ªÊeˆžLxdE…o<›+}. P‰áX."dB>²%Œ*¬µ=zäôBvd°±Í1hòizŒn¦ÎÝ J³rç,¶Ñ‹Ñ'j¿k+õJ\Eº1´%â¬I¥Á§Çõ§±äb•ÿvž””&AûLì iû9v9ÈØ,Ȥú¡H´Ò.)¼Û,Ÿè¼ÐOh1ŠáäO³Ūiû,ÙaÆd/£´¿ËúŒ–òÛ©Ô$ý=/o!ýëFbo†7Xþĉº3 ¥ŒòÁ©ŽÜè0ܱÜjw6ZòÙi¾ž¡e7ï­-]I’͆ò §ªŠÈñ]ÔæDx1Î6y†Ó.ô¡¦ÔÒ+=Ô­ã-¥É@ ¢-ñ$jÄ™J©®ÿNYá‰LñrA¾K®Fc{|rö¶WäËúi¤2‰bsX䀓Hê(Ì^3ã–B|»Ù Æ·æœZÛÙéºUáµÓ¢76q §\’æÞæ&bNü‹B~0ÿ´™F\’œ·qc2›Ém ÙØÛÁw: Ô†êúC#1YŒ(Éè±?»‘¨oLÔœ“6Þ™ŸBÌZÌÚL—Ó‘ 1CëG(oNuPcP _Ú_Ú¦dG-ØÆ?ÄÝäé«]ëzÜbYlg{}BÎè’]’H¦‚µ“£òôúƒ‡&!ŒO6ÒI&6JŸ¡.­ÙÛÌ÷Q´z}´Ä¥ÊÚ5VæÛ~B‘µ&‰š”ÌcB[<‚o}æ‹9nQšÈZê6RÁ ÍΆuýâ¼{”R£ájü'+Œ$w,&w`WÚÅ­Ý伌‰¥3[igIÎÂïí½M´\(m0ÇŒm¦~”%ÑÖü½å½?^ÐîmïoQ§K[XYÅô¶*G¨á ø¸ž‡ªødðÀf™‰Ûͯ°šÛ¬ÓCÌzn¤çB“O”öw0ˆÓ•áX¸«ËBÈ¥]W® ¡è;›ü|‘ºœZïé*èÚlˆtdv[•[‰L^´ö×/Šf;°–: ¥W¡,3=vmðì2»-OÖ.ïu'{Ý[ËÁn­-|½p.L¶¶J k#·ÅÍ‚ŸeH® å”`#±@1H4/Ì JóëúýÔú=”ª‚ÎÂYUZ[²¦E–ŽÄ—¨+ü2q–,P¨ú‹mÉR÷XÒ-ŸO¶×,>¹®Û]Dº~»c!·Yo‘üRnQ½D&•ød¦Y>@Ù0&·N<ñg¢êv:‡˜muÉ5½3ÖžT±Th/­"Ʀݠ+¬D„#1a”™ ÛÞž0V·VZ—¡iejúü¥¥Ü±üQN´T¹B¾¢aÅÿg|ÃÈ2Ë0Œ¯„w~† ÖåŠêËu¤jqèz®“ }XN÷z–wÊÍ.æˆLÒ(}€`¦mn9 hüþ¦éî(7h±Áj5ûk»ëѪ‰"Ôï ŠI)õ IȨ ;7ÚŒŒæ89SA$ K4û›H´Ë½oI˜Áuuu¶°wa×.ÌÏÈwø•jœOÃðåñŒ‰[ÒDRo¥é:íï•×Hò½ÔÖÚŽ¢$½¿³µ ðÛÀ¡UMIØK*οÃc'Õ° iwo­A¥Í¡éá%ÔóO½ÓnBrIíxÝC;…yÔrŒüJÃl³HFD‘µØÌCkW:]¶»7•`ŠóF•åi-}8Zxn””e–¾§-ñ/a“ˆ3ØûPeeh·âÒQ¥Þ[i>Œr5”Ä$«$ ŶnE„‚¤ òÊøâO“Ë PÐ¥¸º÷:›ÚýbV[‹ya[uX#r£…jÕ$ý–\ËË@Xo €É¢ó,Ï‘¤Ï!òÇ:~¡m'(åš:£—w_нSáož`æÀ`7æÔb—y·UmRٛ˷R6±¥´Z–ªeA¶öì¦6oMHiÒ§ãO´>Ödép]ñò-ðžÛ'Ì·Oú*þÎG¹ü¶ÕšèI& ¼ñúA•kð2²•=èTœÇÃG@ËŠ\ÒíR'òþ‹¦èדAªhþ«Å™- ¶ýòÈxÚOnjj¼·þeÜfTç{Ťìßëði?£l¡¤Ö×vQK,AÁ`¤ ɉp[qÞ‡0°á”¤dQ¥Ú™¼¹ªÚØh×—-y£A<×7·L²H@K†YVœHB˺þÎù“›O8ˈ21ŠööÚK­NïX¼¼½’7XìΑ¶„ÇjÊë$¥xÛ2d. ˜ù+^ê±\¤?U½¸ômŒz¢@mž0îô/Yc©%>=¬rLŽË,o\Úiúmê“ q\4,­Î4+ñF\žDÔ'0²‚7䤲i¶¶Ö¼e7+µ†ê#ní,‘\‡äƒ~ËÓf—¢¯«m¦ZÞ ïåÏ3j·,Z×Kkx‰-x©‘„bµ‘dÕÇ õƹ¨ §5¢Ïm§k:|—v>_–Ë‘g™®Sœ2:9ûLh~ÎdÌpØèPE­yNˆ.ŸY·½²mRN *$·1FëÌÜÄ“†Z ïö†W$xAØ/'hc]ºÑîüñedÑëS,—š}Ü2‹+•Ý&nMABŸÄkŽcc'eªFoÇ•›Í g&“ÝY˜­ÑØ[ˆ®˜FOÄ$`YÝÃÓ)œ„§Â&tœÚjš=¿Ö® ˆ5›ó¾Ô, 2¬p®!z>˜*Ê7Ýs(™¡&Èž­G†£¦ÉsþÍê1»¶ŠTæÖèâªÎ”EAʵ^´Ê$7q2LJš<¶²kië%êêŽÖ·}'h‹†B>gˆë‘„Aˆ€¾hˆ¥¹ú¶‘­"ê–q––âa¨¨2JüŒ1ò+ð ´ Êòz6æ ·ÿÐ'žéõ­Êê{hïü×c%Ë^ßɵŸMCQrØM^\x·Ú^¹æØ¸c2"ó·½(iÚMÌp%Åå̇QÒ¤C®Z”œ»A0RÕ  ëR¾;d2Îp; Šwg›ÖòWÑFN¶ö’ËmÂDpÙÊè$t)@ÏñíË”ÄÆF\Û- Òà¼ú¤ú©ú¤sÙ ¬î ½»"öêîÍVJ‚k×cQ„džÉ¸Óôyf}B[{ûÙ-!E¾±ÓÃv8– ýª?lÆŽY‚"kŸ3Ѧ9:)Üè±ÚÙ? ±Å¥Çh² ¦iâ9^\‰bìê6©ÈK4¥-™Ì§˦Ágqª½ÄËn"Ï &x¢Ü†ìJÔ»$làh%¢ ×C‡ZŽ)u¸±rgWŒÚÛ’à:Ðô*ÈE”åçÒi6ÓÃ=Ãm¤]Ý!°žù$òÚ*r04¥š‹)aòñËñLƒ]Å…Þ]Ñã³ÒÿĆÒuCmibá$¸´ä$ŠP£e}š÷ÉåËÅ*æ„’]ÞÿB»›U²’X´‚÷zdösÇK›–’¦4dÜr£úcÛ|œ²G ­Ã;桡̾´-%›d¹šiÔÇ)#Ôua"Iä?ûùtÚc£Žv;:Ål¤·ËšÂBll.'ŽÏÌ) ¾i‡´œ¨#÷¦ŒŽÏìrdñoTJd/uúTï©^iZ†£nlW”VñÛÏY•Ô”P‚qo´C,dÆDÅ“•²½òÜñç^×TºŽßO¸h ´¯iELÕå ˆw\Ådž^lÀb6šœö³Í©ÃC¨AxLö±B}ŽE>¢ºÉ^J¿²µï—䉎ç[Ki&¥`Mso*Æ×ÚŠˆT(ı44ø¾!Ó qÈK8»N×à$”j³Á?§ayáqñ²  0âÊÊ2{eÙqFÛµÏfek ;râãTÔes¨Vˆ³WbŒãáUþaš£’dòÙ®í¶Ö–š©Õ"ç£4ÐÉ » úÍŒ6ÈyIT€f †‡60…ÐÒ'Ñ$Ô5 :ÖïEÕní¦šmO“TˆÛ°„‹È‰–@$4ødW»S30DȘÄìYâ&é·=þ§yoS|Z/š\Û•ŒÈnKpCŠQC…#—íeRÓøfS‰¹E¶q­Â.î÷E·L’ëM g¦£ÛÁwq?Ö$œú¾£ƒ~Kz‘°ß1¿y(sõDÉïåm?Ï×±ÛÃZ†§"Àu•žKd†7‹ª-–@w¨ë™8ÌΞ ™H€¥¯™õ j[+‹ˆî.m ŸO‚òèVh–71¨Š-ªÒò¸Œ³‡{„ã.|Ó_&yÛO¹Ô|¬ÅwÔ–W‹zÒ¡º–ØÙRH.#E¦è’9¥7Wë«ÚË&“ÚO ¯mgêH\¹–R$àPÈÔéôf^ÃT71ö~,†(Aø$@€·Ò/!{Û+0°^LÉ$Z´l²,U^A@o÷Y¾cK(±ÅÑŠ0Z]Ûy^òæ+Á%Áô–À"‰y ~oüª¤5u®De ´‚«x©hÒ_èš}œ×wh­<ü%™‘ \§¡^Ë×2ãê^ÉK´Ë/6‰]Z\hÒj°¿é VàÜÆãOñä¤yPn>.]òyseá‰â ‡¸´s£ÜÛjP¬6óž=H¼¬Â \H¡wâÜ·lª9ˆæÏªg5Ö£<u…Ϋ"•Sa§ØÀfx=Pѱ¨ä´= ¶@ËŽe„ŠªÏ=ÚiöÖ°´P ˆ=>áÄ‘Ÿˆ™ƒ#‚³SŽßìàˆ¢eÑ0ªÝ¢jU7þ®PYj·RXÚ[NôŽßîæP~Ç|$ïö²Ì°É*Œz/>Iε=„±5 ŸOK«þê¶öҘψõ ³S¡Í|aÃ=ÎöÒm$±Ñ,- ’ÂÃËö÷Ö̲}N'7Wo ÍG;€ãìþÈ͆l’™²vnÜÊéä·µÔfÓ*îøÚÇœ‘ŸZ!¢œL´%Ûâ>Ì¿,„g{0y¤ºé²¶/ä7Z¦t–Ïy•VZ$+©F¡ªÈgìäã¹ÙÈ*[èÒiž¶¨Ó­¦•cy Í?ÃÕK}˜~Ó©­6=2“;<=Z'ä…akõ©…œÖæþùeãv¯"Ç=ŒŸ½ b~“ŽÍLÊã p£ˆŸÿÑ%Ö|Égg¤Ûéw’+ùWS¸Ž9®ÙǧbcEÖ7QÊZJƒ*òæqÃ,—ÃÌ<èŽé*Ý\Aõ/EÓa±Ñ´ßU"’Ýþ¯qõãò2m˜0!èݘ®L™Hƒ#¿/óVDÚ3Xhnü“¤o$Úî™4“Ȱ¢BVé´xÔ’VµCñR™D&FiF@9WÕSôRÅ{qdöövI~töõŠª|r´«'Ù¡b®<2¨DJUÚÑvPÇæ;mgËí4šb,Kê)‚a¸>˜e­$P6÷…”ËCV¨Úóêz—«|`H.nã}2 ‘¸ÝyðôÔ~ì€*^»fFÙ¸ElÚ¤ú¶Ÿ}ysy"M4rXÁD"xšÑ~ Ü-ëð“Zòg¦u™ ‡¿[?ZO,\ÜH©5œ—–zle@V`Äÿx){å‘Ë*ã#Ü‘. —Å}<:޹ks…- –ÆÆE·V‘Û˜v,ÓrÔ~Îgâ@H|YN“­ OÓõÑöPÜÌtÛkd»»Ö§•­Öûde,SrÕpH9…ž‡ª=z8‚[ µ c¸–x!×d›Kš(.âÕ•9=µðˆŸNaû\…x‘’„£[¹`XBGm¦êROgæã­ný;70KÜ‚HÄž˜)ýåfPÛö9‘<ÆôuæÄ‚/orŒú–RY,1\êšMÄË”(ƒh‘hVU`X¾8Œ¼`Ê£ºV·SÜIu~i. cF¸žØ´iÀ—•¬¬òÔqt4ø|pN„k£\ÿxm3ÓÞäÞiÖ÷3G4w¶ÌŒ]=h~·)yT}¸0+ºíLÇ[÷5ã‰RÒôȬïË·?¥¨¼S ÛvWµº¨ò™%5hY)E‘/Tx›Œ, õC£Ëå¤&Bþk‚ÚzN¿Wž£ >$1ŠÑ»ô¦Y†b\ù"¸P3ÍÑí"²„)Y'‡O†áUŒ—¾ Q^$tï•‚LÉèƒ+EXÛØ%ÜÚ1yçÒ. ‹êÍw2FÆöFÚtôÍPPòí¶[(Äî"»F7ßS¸Ô¤··¼Ö-Ñí“l}n g(R †$©¥Oïðà‘(ÔQäAk#Ôm"ÛKú޹Ò¦Ÿw%úr$®A·¹XhWeqðȹŸ‡‰å¶ÍòˆDêé¥o¢j2öƒw%¯—A}enêT†? ±·Ä—ÚŠy1LÇŸòqãvɵM^ßIô$ÕnF‘¦ªú"BÚòæÂòê¼Jz ¢ì8þÎ[Ï‹aÍ»†[$úÞ‹4öW6—Piwº¾ŸmqnöÌòËõfõLÐH†¤ÓŒ€0ïðí”áÏ(O€]6™Fgu[="DÒŸÌk«Û^ÜÜ[@4k˜£ôÛ„tyÖz’Þ¬,Ä;q¦C_8™Q§b7LŽûTÓ£óž‰æŸ.ëk1»²šÆòÔÊ#·Ž[Ûn,ªÿ*áK6ãŽã¾t1WŧÔ6èÇõMBïÉÚ6«dÖ¡M¼’_G z¶3C=ßÔfu£5 bÃÛ.ÓéxÆÇ““Ãa0´—W[GÊZ}¦Ÿ$vÉ¡kd zײ–Ž5ø•”Rðƒ˜óÇFRÜÜwT•Áoa§Kgeç›}>ÊÿK…£¿K)ÍÅôº{HÉH}ÉÀ í¶fU›‰¸4ÈQ¶Z °ŠM[©'×ôËÐÖº…ô-N›sÆKIâX™G7ß(χŒú9.n!‚ ÒwC¾º°óºI5µå¤Ö÷Wj¡®#»:I „75,¥YÊÉæà&óS(\Ðú^…g•ÍÞ™k,z…ˆeÕmn”KnÇŠÜÆ Ð*W‹ª|ÇË–\c‹fˆŒfçB´òüú>¸ÞŒ¶!á’çLÍß.¼¾ÏÅ‘Á.EP䯕t-@Áæ]GÊ6µƒQ¹e±™8ËÍ«Ê.5åÑÔ1§/µB¹F§9A°“u²eæý7HX,µ&‚Þ{ "îåeÏîe–ìÆ(YhSŒ£—_‡!¦Êg ]RÍbÇG´‚h縃GÓEä ya{#ÊDRÅêzñ4gâFe4#}é’„I—¤YE¢¬œÈöñ[´VÚUœqߨÙÙ«‚!„~öW«É¥r§¦ ³ð‘»#¶Ê6—÷s=¾ŠÓEqn/æ/§Gd¶%x*È´+"TU[èÇ4 #·àµË¹=×îõ»}_»ÓìÓUµúÑ™u¡¹‡Ô*•¸¥að·M÷Ì\0®!»lEn„¹¼Óm"yÖÊÖïX‘}ZQ,S¤ÅȪtPQÎǾF‘‘£Aä–éé­[_B±z‚Òî_KÙYa»B¨Öë $Š‘Æ@Çìžk™ÂX„k«‘)€)>mfÒóP¼¼Š‡Kkk†Óìl\ýinÞ.P¬j ?äŒÆð„*¹µ ’Ë©ô¨¼³&–Rg´žàˆ–ØÇ å'Å%d.Ãv¾û9“(œ’6ve:ªK’ãô½Å´¶±=ìu”Â¥™œHÄ9ˆPF#L¢6MDÕ5› ìuÛ«qvc¸–2ã„­ »râÒ€ºœÏÂG R]å8%žÊÒý-ŒÚŽçFºÒ^V7‘Fþ´CÓ¯ ü}>Y~§%:ìUw݉“Òh¬/­fmCMôÊCjÐ(,¦I §ª•O»#õBCª:âÉ®$°Õá¸m>;«nlEâ!©~*]é×ÖšµÝÍߎ⽲@ˆ÷·Z«*,ePwã™àç¸m1+c½×V2\*j°@Ò¥­¬"ÚP¹±o„;P«Ó¦Lc‘qäÀ RÔµ;;tya[§ˆ¤NJ§9ÞÞCRÒ£Ž"”í”C¬¦<Ñše¨Š[1ÜZýnòÜÒÝ•˜BÌMb˜W¸Z©ìÓ*É1ˆê™hMVÃL··ƒêº43k–𣾝«Mv×JßcŒª=6â{ff,£áKÄ¡žòþÒ};QÐ,ï]ƒúV¶ñúVpÉgS 觉û]×&rD wc|;„–ØIm,7SEÕ=9@¢Wö³JsO‡äŽ ßQÑä‚34RÁ´Ë+Ù,‚‚ŠÐª¼X|·Ùß)ÔOcL˜Øœ¨*jÚM¶ RQm4Ç>µË[ÄÁînc@ÊþÊ3ƒß ±ŽöðÙŒß5³^ÜZ¤×I£˜>¯nš}.ÔJ?ïÇb¼˜ÙS" ž•êܾ£u:ÙÁw$çÁ3•¹¡ao"îhÇjxåqí·&ƒËd Üëc¬>©a÷ÚŽ*D¶1’ܘÏ+°¡±ÙFÕÌý0"=í€XDZA¨iV/e©Î³Û_K%ÄvÊKÇv…¦2?4Û·,ÃÍÅÆèÖ`Xèú^«¢A é0”4ñ[ÛúÍ Írb4d,¨#œ:²}œ#$ã>)nâ˜(‹)–+Ý#S W[Ñ,ZÙôùYé$–È «lĨ aƒ&^(‘E¶d(}Fîç̧Ìɧ¹ÓõÕ“ÐÓKaó)!#âU¸‘Ó¦]•9Ð@]i¬Ý}Jö+‹›[«i!CqpƒÓdµF+Až€´düùi•LHò„ˆHµã±Ö­å²ešÊô¤ñXÈJíÚ $ž „YylËûy~,¢xÉ=Ä&’XYiwæ k+‹›]Z>WÉr°Ú¿¦JÕjKn„•–a˜É Ù‰Y¤ÜWOªzr£ Ec¹’âòî.B!^* O²ü…/§pƒG“\‡ª˜õ½ö‘ªé¶‰z×/q§C7=»@‘Û³}“â'Dq÷fD¡áÊØ²”Bí:Àß_\½£q‰ŒK´·0Dv 0‹ +‘_‹')xpäÙ´ceœÚ^_Þù^êæÊ+A5¾¢ÇR¸‘¸½Í´±ÑZ5E'÷n»þÕ[0x¡!G›1Ã(\X}Þ§§ÚjÚ[YËe­Ã$S_鳨T»R†¾œéáPÊ$á噸à|=͆ j;¯ŸË×Oqo­ÙjltçK+„œ€`±xÙáue`Ü£zò»äa– õ,£.*]å.ÃóuÅÑ{é.f‚8,}tyÄÆ‹V¼£rQ»6K6¨Ç† VÍy&¨# Õ´«0éWmykk \¤fÊ~nS‹Hb.v!ºGÃÓ¦U‡ŽW¶é„7´}ö‹å:÷Sò¥Ø}ZkG-ð¸7Sy½@@øâ`$„qÇ8”ä#-‹nHD®Ö¬­ašûLÓ|µk ·qÇ=Ôó<“KGrÂ2HãMSùÌc/M_'ÇdsJõS]l'¸³·ò…ˆeç XÄJH"4r¹>¢·Úë™ÌaŒpóê¢F(o^óÑiW•ý½¤÷’ÁA+  -¯!,€Šök˜øqFr«gŠD¥þ…ç™oofÔ’ÞÊF2X[Âw,,’G4‹ÄÜÀ(ùæDD0·J}éóÇ{¬ëšuγ,bçDŽöÆ ­Æ÷J¼ …ƒP†¼ìýŸ³‘ˬC­[ fàI›7Ôî,ëYµ“O†é'ãyt#º‚bŒ±PRD;p¯³ã’Í$ÖþL`IŠ}o©y¶Þ=CëðÆoXÅwu®i°“4qLΊ×Q 1KT \¨W5ß–Qã˜'qÞ±•šf•¥ÞèLkY¡-¨5Ä/oé{›V©<|jÑ8æ|U©˜ÒÎc ov¾!\)JùoMtˆ]k3é7RH³™™¤xf™”ªŽb£ Cȹ™DèŠÙª Çb¥m5óCwbúbëKq&Öš†Dˆž,³ÝH>ÒB¯ 2rÆ Qôó§+VÔ¥K¸ÛTÕ¯XG¯%…§.0\]B#ŽPÑ? aËŸùX Ú#“Aßjo—õ½" x ¼ó<¶3Ay ò,Öq Œij C¿Ù=2c<'ª1Eéº+K¤ÂnoƜӢ™.&,—´^œiãBn«LÇžPgUtÒ%ºwmc<T¶¯"ßË|']N+ƒ•f‚ž™Hë± ´®Ûe‘”¯’@ßt.“oÉ8Ò´ùà±¶°’f¿Šcõc5Ñö’DÇ‘*An??g3g(ÆË’ÊZ$zTš5Ö¯uþäQÑHôyÉxg‹á›àpQ¿nø2B¨5òK`ÔËj+pðjÑ´\Y åººŽ±”RI +·Ú5Ëx8‡¹6 ¦‹mi-ÛÏ5·Öl¦t`òßÛ'7·r»ÕÕßi‡«%r<™HÒ­ö£=•”ºE•¨·X%G“MVáéÍT9}•zÑwØà1'rQ Õå¾³’Úþòe#™®-¡·ˆáz(%¿Š©˜Æ*-’4¯ך]¼ú”hc)‚ùVnvìU Eת½8ûa€žÅ¯ˆ"¡ÓÊöÿMŽOߣEp…å*‘¢+$/·ZŽC‡fÈåÑ[+Ò5 »mA-¯­X´„ÜÛGTŽgT¡q½Âßµ^C/É@¦QVÆÊYoo\ š :7:QcÂ3fAvF.G ¯ZS)É ›‚Õ.%ƒFx#Š8!úÕ¸’[z–Xöi&¼¹¾ÿK[­&¢òÚïU¹Ö5Ì762¨¶¾@¥ã†6 «BÃf ¹NH8bÞj—Iæ´Ö­ôU¸·²°¼žKÝz9à/.A;•’”PÌ$}ƒ™Xc;žMq)F¯ªOæáÞ‚/MÆ•rÖ×–7ÜHòŸUO)V¿b»ŠåñÅ ñì¥+TÒÏ×ïd›ô|Ú–¥oÂ%yi0—PÒGñ•¢¿zæ.pkÒh$‹ ÜEwÅŸ–¢Ð5ª\¨åR2=¸I+À,†Ë2x,†¢h-6Ï.­<XƒôA¹ôot¶cÕg‰Ê) l­9tÀapnµi¤·FÀê:%õ¤¶ÓêÖæT¹@ R/&7¡Êü}]ÈÜ!}zæ6Óo´émì„Án®V«êBË»HßÊÃöq8@C›3 >ä[Å,DµÂÅ{k5µª¢qÜG"õ §‹Wö¨r&øwæÌ u©tçÿH¶‡ÕÓnLð^Þ@GÇVP+ʽXÓÛG4ŸGiò {L½7rÜÄÐMk¨ *† ÆKV•SCLËÉ—j!…"tÈN©õ-*m:Ê ø˜C­¬ñK†G,£âRÑž¦W<œ"º<( 4héªJßZšÊ(’¬“(’Öhàf(µ£‘ðÓö²ÈȘy¯&HJ×.í[ õ­_P´±'úNí¶Þ¨y Õ¾ÐÌ|y%tvcÍÿÓåZ–ƒkæ ÉÓZÒO¼±áõ{‹{“}awjdoB TO‘­ šçc@‰»tò4(*y6ûÍ:¥¯è ~4¸Ò,cx­ïÙ;X"<…¬Š~*‡âcoæF¨b±(š-fŠ/JÐEЭcÔ¤K/0Nn!Ò$½ø.¤iÙ›ÕoS›¨â¼>˜3æ™áúGÕLx»Ö6ÒýVÒÂy= „hÞêîļ¢N,òFh[˜éÓ~Ù‰–Q7 Ùµ—¡G,;Ok¢M!— ýâ²T˜9q?ßÌsŸŸÕe ~h[É-æµ·{ dìÍ­¼‚kØþ­„“ÑHé½+…Ò%‘žêð"+äoõ—‡E|§õp—,ÀJ>m^ßXëéú‡×æÕ¥±–®?§*[Ȧ3Ɔœ¸ïÌffRb{Øäú¶A_h:ÞŸ¨[^ÙÌGÔb{FÎâU–8íä—ÒâÆ•jüÆ_Le;K‰Jƶ7¥Î¡/–"»’Ê+KMí­ÄTç"7IAª’xæd…ð‰sr@±E•ÝÕëiËc4·²Å' Ö,ô–9¢ R€|M󯉒9µb¨J—ÚjWú¶·|ú®°4››²Òòk` `F8VE Wˆ­Å™"\Ÿ{‘9 Jm?H_ßÜKTVµÖÕcÔ¢·µkunGÓGZ7*ƽûfFn Hp -õ ºÖ§£ézrØiz•¥mLZ¥ÅÕªÎðýf H’(g"œYTåqÅ?ŒúºR%6êÓdòö¯¢É y†Q$j/¦Ã{ioŸ5¤·¶ßXˆ¨xËŠgc™Ùg(ÔÀÙÊÚ”|ËåÛ.èz>夆îk«X~¿§Î…-›TÓîyM‘¬aãe’•ø·ã˜ÑÊ2d3‘ >mÉŒ‹J¼}çÌòXËrt«'6pZ“HºxÁ+hH«U @ÛþÎPLqÇ~§âÊűÝK]ŽÃ[Ñõ rÒInÑâiÓ—‡êwQübÞQð! ]ëÇ¡ÊÎ9Ê'„ÿc “=µÍrÓMÕ'–ÇËöÇO¿ç%í•û›˜ãh[‚gìÌù#ƒ'†$Âø·lxeûË:m¾¡u¥ë—Wq[éÚjÇõ©Ö³<Óz‘,pNJògj|=ÙÊø ‰q8 ªB‘‰4 ‘}©X\Åoõya2\¤(ï!Yd$|CíqcRNWHdœ\\ù!¼Ë£ëwzƒišªi­n׺ÝÝÂËÍûÃUŽèTq­3'K©²MŒ¡Ãu’KxÝg¼µ³¾¶·ŽÕ.R4»‘$ŒYäYo-QðÔ.ͶOž¿ÖÆP'½7>d·Ñì¯'³\OhmÒXþ£q4ÀŽ2dz+)£ÔW1e¦ñǘhœEXBÝùjïIóí­Å’húè[Ýõij‹µ‘Zf@•¡12²fn<‘”EóS(Ž ºÊçY°Ð/¼¿k¯ÔVÌjÚ†œ-Äúkûiî„ú´þZ’äË,ÒÝ<ˆTA«(´§\¦”à@Û‰a² ëT¶“Z±½ÖæîèDç,EuPQ@T0!¿’EÇc‰Œ›Lª)ýŽ˜n.cƒU›F Ô¦æ†YcÔCš­¿­ÄËö@ÌQ~¨ßêks)nžšÍÌñ%€šæ+TVš1G–9 äÅB¸4f |FY2"29Q‘ëé7òè×ñE ,pAm8exÝã*j]OÃÌ£¥0Œ¬²¡hË}&î=1.äÔ"FÖçÔ!†¤ä°I‚öŠ’Ë/_OeØü>×Ã.;úv‹muHôhâ‡M‹H±A|Ñ™áŽò÷êó\E¤œ¢Ý’T¾­xýªæFh‰K‹§Ø‰pÒ*inl5ˆ§½KkÛi'œ–ák3úšTR¦DUcOÚß1§Cœ_\ËA¤Ëq vvÞµœœZ¦ýðHÜÕOÃʹˆ6èÀH¡çžå›-EVyïnU¼j*Nô’9ý"hAø¾,“ÉA£º}6_)ê·É­}^Àjrѵ}4<ðým`,aºZUXÓþ6ü0œ9þÄHÄ”šÞÝÝ5¿¯õ–†Ñ#s$C~n»l•¯Ê'.°@6žÚévóNÒQäš}º…äëpXnâädâ é§mã~Ø#Ä'‘j6‘ÛØëœµvížÓLµŒYÜKº¼w’\J„ŠÐ5(Y—á\¸Î"9²”¨lœß ÝF2i®ßW¶…–ìI  E£,¶Ý³1³Rê€+rºY.#¹ÔÄkdlnôÄYcžSos*-öª+Ðí‚8âO³3ݧêZÅÖsþ¾]3IŠå5žÑR5ž0¡žIdj©¯Û\¿4c‹Ýdif¦ê7÷ºõæ—qõ‹8¥ôf¤„$3z|¥  î.QñíŽcÂäãÏ„ÒÒê÷Ìúöå[ YoNœ“C>¦ðô‚C ·" rÁ¥ÂH9'·ÓýT‚O7ŸÃnt‹ûMJËUŽÚÆîÚ;Ž73[_\ÔÉmõp 7 bÛˆý¼Ü Xqø·"#…œwË^bÐ#Ôl®N•¤É4–ú”–±zQiÚ¤#“rŠJÑ$tÜ+oѳY¨Å“A·?öA!Ef¥n|Çä‹ßNúÊ+½BkK»³*d»»M^2ªA <8ôÉË0Ç ÒrÀÊ.º:–£y¨êtv²é^¬Mwqäoè\­ºÃª$]ØS þð #€q1À‚¿Ê¾rkkÙByM5'[ãáz„‹^"(åEõ?«+Ë‚f¶ÿŽ»Œ‘LÀêsÞ[Ûë÷Ð[Ø_\»¬©é(†òyK‰Tez©=n¹­œ .£'(ÓžçUó ñÓu;;yD÷é¶Ð¬RH£I ½\U!OÑ—C?A6Ò$b§w?˜­-5»O.\¿“Yo¬ÑÒK«/ªŸHñ>’8õ ;rß3tø8e#)n9’r!(Í0ÒîÍíí®¡ šêMV /cºâ!pŽüùCÈÆ¤¯óæxÌÝÇžYMÚee«é6—š=Ô3EåÓA%ij²ÝÙÅvÞw†UHÁn[·Â2ÄH?Wst8b7想òßœ-|Éw£M©£.—;‰ïx)…Ó‘)ës’I'ï#éß¾_UŠ5µ[Lˆâaº¯—¼Á§È‹­ßiZ§w2=•œ„O"Þú¬£MÍ#­Wp{æÊ2ÆÂäÌw3mf{èô‹¬#{V°‰5}:+ˆÌ¾™i¾¯t°í·¨$õW58r JE«ˆ´nÕ¼Ë=•í«YéðÝìõ",ÍÊ|nQ@/ þ,Èž*…ÄóL!¿D[~šúí´žWÓtøL² OÓ“Aë‰c˜4e"ªèÛuVù®怅e.Tù([êæ iMšDÖŸXk »J=µÂÙÛ7î˜ö+&áFÔÉp·¾N Žèû¸¯mgq Û^[yŠ®^ÇË6äúW2iWzÓâU軆ÄK†@QêʃºË›íU°³·Òg¸Òµ{¥ŽöÉ. õ–âÞøóšÖ¨hTÊWb¿F@b8r™sÛ ½Ñº…Œº¦£ÐÑäžUé×23»?¿oˆò§^Ä.S ‰Jä:¦1½ØäÖhÐcšä]Û[G­][kËrê2=œ¨V9 UÙÍž>e±Ý³ 6†Ó<Åqp!´¸ã„©èZµ«z²EõGõ“@ŠDªžT`Û`É„O¼2‡#iƒéÖ—wzVµ¨[\Ácf†{™´ùéÄö¥€I ÷Šáƒ#x ÅÓË„Ýß{ÏzFAe©ê?£`óåª]ʳ¼zœ¸‚Kˆµº*|bJ0“¯Ã¸Ãâ㘃ñl$ Ò1èšEÜîçU™ÏVÓ–9n.¾½)§«½ EI^›fn 㙿âáôÛ¡¸–Æ MWË6Š<Ãfë¡õ–¥§èûn†‡qÈ7Çâr¹e‘3²Æßšk´šÎÒæÂÙDO,‰§Ý_­)†Új½¿Ç²€ŠÚÌA”ÂÀD‡"j‚®Æye4ž]ž/V{éá(-ŒŠ}>š 'oõ:f&+2tFÒ{‘yeg>¤ÛT‡WÓÍÅ–™‘ýD€2™ßâeP‡’}¬Ï„##¾ÒcÙÝ*,d°ÔÅ…ý„·±r¿¶Ž(¸Ý$¬Ò~骈Í;2'q"ÆÅÈHm”ÖÖö÷m^Þ“yRš4Eu“ÓegÛá6Fqˆ7T×!I‘Ó.u‹+o/y>¯¨éNm¯ˆ ’¯¬²%UiUø¸…Ê':•ÅRsõo{£ÿ‰lnþ´e{+)íähÛRU7»¥jìæQÔÈ ¹„Nµç1é–×QGú>ÕVfÕ˜ . µEdVœN` $2€´›®[YÔ-4ˆ"¶¾´õmày$‰ä¦tõŒ¶¬vySÀfÃE™‹c£d¢K'Ea —SŽ+oSNÖB­¥»zÅ–U$Dw+®‚¤+«!‘º¾Ÿ¨Ü—°Ð>·t±ÝFªÑÏk"aE1…9¯$Ð䶼ނ)̰ÚZÉ9‡"Ï"ô¹ª>×#“ãŽçt§z¦Ÿ«é±Ùk‹ïJ[ˆ#Kº´ðÌ=6¡zNCeaÓ1¥˜ÎÍ’7¦E¥ÛY½ÔÿTÓæ/‚=°+P{÷˧b–ÔC2w)n‹}e}æ=æ´Ôô×µ³as{,†4ôúK$†xî¯Ú…²Ü¸ÌpÈÀdN;3–ž\×!†ÇU¹>fÓ êZbz’Í$¯ÁŒ Ž!JniÈVïš¹FF4FÇ«T`c·z_ jRù‡P]S†-'ÎÐ\µºX²:Yߨ€å!yû*‹íd³Äb‡ }CîF\F¨]ÜfÚ=-¼Á-¬Ö×+[9¢/$‹jC:•s´aŽÃ¦U(xlRbLŦ~có}bÖk»‰¯´ð4ëÝ>ÞFT[áC85ŽG_ìøez\5|`Qäß16=æ£ê_YZÝA&§fRëEk›bÓµ"O@8<–ki9(?ËðæËÎ8l(uhñh[!‡YÕã×´„Öe–?*Abñ^¤kÅe»Vy-z›|×Â?Î%B[ ¼÷=½Ý¥¦¹q:}Õ…Ôvðº½};‰ÐÍlLªˆ`ãN<©óÌ&$aäÝK4æÖ翚›Û3GƒNƒëÞ¢òg¿¨î ¡BÇÙʵÇ!ÃW+a)tK<éæ[}oN³¿—Z½ÔmõÀ †ÐÛ%‘–XŒ‚b<‰^¼ú¹±Ó`8ö¯§šBqmþ&ÑbѤÒï×Ë÷^UÓ%¸µ²Z\O<Ï03,“1+Qðžü@äAŒ¥3W$%²kæTòÅŸ=OÖm?HÖ Ô,ïmÃÖÞâgíuc%˜/fc˜±ŒæxN繜äXv“ce©AÔ§Q½¾f7±ßj-,íy¤Ë%9*ðü+¿ò[25@Ä #ä劆Șu;go-u9å´·ÛU­ÌíÚÕùؤ Óˆ~Fª~ÉË#Xà(z‹ŽMÎ×Í÷w|WG‚è·¿èÞbå#OpJÊ“B"“ÔÜ#c˜’þçÔXB–júƒ¾™¬ýwH“DòêÁöqhõit’ž^-SûÊ|.ðc LJy2ˆ1±Ô´í´ýV ^bµ¶žÞÂwpÒ¢Âd™UY^¨Jõ^¹ F)ò¡vÌÄÖ饩MfëOÖ.uí'@¿Öštr¨ƒÖâx¸J>±+_£)ɺ#“‹e9ãÔuk«ýRÚg´¼Vg·¶HÚXJÆi¬ò_§1æ8ÏW‘•¤ö^`·Ö ¸³ž+{ëbƒU³³oJ8¥€‘Ê)o†D­®Ì7̉饌XØ·LPdzߘ™ælÍ££éÖÑêzl­Yg‚GEÌ”b ù >š&[’$ÕÃ!Iuž»{æmêßчF²‘[Û\YH™Ýxö¤5Íä:”öZ]Ñ–;ˆ§ám{ LÉ$rÇÉ”r¨&ªv 7åN¹!õÇ;¦Ÿ¤¼GRú³Áz9YYá’9'!¸&@ÕUp>í±ÌxFY%a³ˆØ¥: Þ‡—u ø/¶’ËorëÎ9ÍáreˆÚ­´‘?Ùa—jqÈH9¶Î–é…Ÿ˜EÍÜV‰“YÔ´é ÓŠ­ä±D†h <|V¼›âåÈ“Œ±È¶i”è"tûךßÌ—7-s§iׯÜÏÉVµ“üAê)p}3úò™LŒ‚Å2²Ç5kÍQîú8ZÚ´zUÁY‡¬®R§á(<º2|-›p…Tœ‹ É¬´Ë][CÒ-õR /Y{Éïgk'hc¹Yž¡#­G¨JÓëšéJ>.ÂÇ›\$$²úÇP·¶µÔ¼Á¥K¨ï…ß7áôdta«ð Û»dŒýF—ˆ„ÊÂùÅ”oewõµÑ3GFm¦H$’­ áNÇì6bÊvwè¤ÛÖ4öòÜVÚ®œ"žÆÞ9’{xÐG-]KM¨ýT!æû-ðævšQÍér¢ŠWw¤ÞC¤I©[j—Wˆž‘´.^+ÔUø}6ˆmð}—^ÿo.ñ $`L£GdçÌ:äwºmט¼´ZÛ\²—:–…unD³ n4¶z+8W_Œv¯,¯%ê;$m­†µvš„Côz‹½jöiBMèI +µ¼ÀP;¤„õëëÉq–ënu{Ô–ê[i-./5‘´Ao£ÉN!jÖ´Þž9Œ"%Dôc-‚.þòÝVMS³·FÅæž$£½¬¥Ä÷RÐüuð,Pã²Ä’©¯-õ;†–æâVÔ«gqs,ÒÃéú‘Ô·¦£â*~rÜcìm…D"t«5ÓõiΗy”Pè’[\F€…Tšeݸšý¯åÌŒYx¦9&O$¦á4„± åWµ»°G¤fžYR»j+O<áU$…cðå¶e/X÷0ÉC"Õì­µQ£ùÚìþ€¸h¤Ò´ë²%[y-TÅä*9qâŽßÍ•‰J'ƒ˜ïL%Àw>oh¼­©ê:ÂM¦ë÷¶7,ß 2Åp¾—¨íOMƒØ| ˜Ç³¦s 6Õ)l·[óÖ‰¡Mmå­ÎãQòî‹v–âùØÏ.£õ„.nŠ=}EðÅ]¸fv]™²wn˸ÝŸ¤!“UMCP¶ÖAÓÞæÖËP´j«!RèœxÄ”T© r‰Æ†Ämp˜åIl\_CbšÔsj÷wKe:ɘ"’Þ•ÉÈ~Æ@Æ ž&ìdm5ÖžêÞoѲÙ^\éDé— Éé=ÝÔ$™¤`ÿVëJý¥Ã@¾&’b-ãÕµFŽî+h#Ap50inÒÛCðú‚ÐÂHªü*yå¸åÿ‡{\>H%Öãý-£h`ÝÈ÷Ñp°ó£$¹ °†weçuŽQ,g€Ì_ÂÌÙVš\ivZ6©y¢Ûù“–k'é«Òí-°ÓÁðWíæ§1|_ný,K桬]Zù‚htŶ̷öÒÚÛêšÒ¢X]ž3"ЧÀ¢… åøñðܤxby{¹1ágéghl¯çÒa´µ¿kX½ ’‰%2Hñ°žJÉQh¾(xÏòkÉV‡Ô|ÃåË‹—ŠûKžÍ¾µ±j–R-½Â’L†ôe©¡©]°<„w;÷'%FýbÙ/¬ç²·×4Y5‹e†G†êfµq΂0«Ê ¿%PÊãÙ²6 æˆh Q·òj µkM[H±†Á¥·ŽÝ&¶ÿLt·T?$~èü|ìããã–[Æ}íÂB”ìÆ§ul·ºÎ£•ꡉf^,ÒÁo 39z)õ@AÄ~±’ËŽ|{”ãÂ2lZãQ’íuÍLµIt-GƒT¼·¶1›Ë{ë’´0'rÃÔ («›<8eÁ^äüq™EkcgäÍîÞ!©_ßÊÐJX³ÚF%¢Ü ÀŸ ¿OlÄ1Ô‘ÈSŠf8¨,Šê+i¼Äm59îNµk´Òu(ÃÄ—6À1†øY$€–@~Ò­eʸ¢y×õ·‘ÄPšìWÏk}oršuΧaröJÒ3ZÛN(ª‘Æ:$œxF‡ìðÌ|Ûžt,'–Aí jz‚_ϧ½"µÖEÜJ±ÚÈXTÄWg+P8íŪsaã€{’IœC5×ຎãG].æ84äÓZ ÉWâC#qšë-ÚãZúg5ú@<[›nŒO$£Hº¿Ó® MÁµøµ!6™y±²,Û¡‘&·¼X’ÄTuËÄ3<$oïk0ÙV¸M.ÎÊM{U—P×¢‰ŒÓQd»X%tR‹pâÔéLÃŒ²æ‘ Pe\A>SÓgÑåÔ´¹&Õaf‚×Lº’ÙAµ–Œ²z‰ÌB‘½Ú¹‚P‘=C†c(IBÛRÔ5].ïË:¦¤eÑ EÓïžÕ.9Ü·`PJý£M©‡n~/W<šŽÅæ.ÇNÕ5¥ÞXêqiv©¼}GÓHÊÃé­ÍBÉ1Zò ûY™Æ'Cæãîw(3H.ØÞJñ̲j–Cs+GLÅñ4%êÝ"¹³ƒP»–_^o¯$SL·\7ÕbÅ,R5F%T)å¸å™±™¢8™Å’Dº}Õö£¥Jú…Õ«ZÇhÒßD¥¾Ï¨j  âÌ~kšŒ’ð÷ 1‰miã²’ÖÒùôñc™¢ÄÄ8i——ª®PˆV…k–ã‡8ïÔÚGU ­_HÐnôÕÖnãxçXa½·±v“Ô‚Èš»´$`i'o‡%ÎcaÉe.HyçžYÞyÅ{|.ÍœD×VaÉ'#nQrQÔ-c¸¢¤–—:t«¢éR6±¨O$ó˜gÆÊ£Æ^j//QMBøá2Œ‡ÒÂ#mú?ëO£ÌðX]¿­~È ÐË9A¤ »+Fk˳&C$ÍQ²€ã)¦™£ZÞéúÇè©éžnX§’]8\,ˆÖít²<ñ8;ÕOÄŸhvÈdœ„–ñm8é(¸°òבìuHõa×uh¢“W’êª TŽ]‹7®Ǫ̂JZ‰‡&#J,Zæ§§¦«¦>¡ÀL³IoÿJ´‚QµÚHCÔNÄÿgífTôàm×ïl"ù,]BëYô5 NÒ ‰~¯tš´×2›„HR@ÎѲЄbG-ÍNÙ\=á¹3òóC¦yNÝ:¬OxðG šÅD¹çèò ’¤Q«Ó5âeŸ‡£ c=m¯Ï•¯ïukÉõK-+ëW¥m$çZÅtÞ˜•Xðì Ùp€cˆMø¨ì¿Ì3ÃmyÆ©éñ›Q’úš{0xäœñÙÔ/ÆŸh{åc•×*â¦ã}S¶òö³¨ÛÝZI<2Zê6–ÀÇu1šCÂà¥Ø5z²¯Ž x‘‘‡6©X(kíèÚŒRkLcòþ ¢ BQÌ|H&|,®8ºµ&¹||Ã3'ÿ×#ÐuiÛIÒ¤»Ò¯.õk÷{7½ºÊc‰‰á©[ÂjÆ_‹©ªºxg8ÃŒž1½BÓVÓ4¸î$xcÔÖêSi„Ö`J­Òè‘Ù•ÿ˜e‘„D¶n"‘u­ìº¥“Äêæ;aú"K‘õHe¶œ\Éäj*CY®ÎDˆ.$Æêú¬:%•œúDJ±!h—OY–vbße¾%‘_’×*ÇÎU"ˆÈÚ_smµn—÷6/ ú•¶‡J–OQåŽ7¡Sì²²’kÖ¹“ŒRá“d‰ ®ïô‡€Êœb†EcØsW3*À0$¡ŠÔm€ÊvR2‚”kÞ^Õl®ô+ˆ´è4´ž6†æIýBÊÕYñõÜw뙸¤#å™6©åƒ«Øý^[[Žr²ÜMw¨bƒ2‘*|ËxÔvʧŽ9%mCÓ ¸|§æ-/Lú¯˜Ëú¶¯wRéòò+,lÑ”Œ¨%²ò Üx†é™Å8]‹È–;Š­®™{if–r#_ý]šËKee^ õ(ÿ"<†Ç5¦PÉ3N4"AS³ŽæßMŠmM$¶»aÞæ1$ïA¸â;ä2ý)$öÑáÖ„÷–l=m?êéoaĬ-3QZOŽ”, 6Ìz°+<Ãyg©éÖ¶×zµÑg“4$S€efä:ý~ŽÆ[¡"_¨ësêU”IØÉ$' ˜„ž|@$~ MêW3q²-ÙÔ¢¼°ƒGHµM~–Ô¬ô™eXËýÚÔNü˜ôøkƹ IdÊ6¡­Üê:¼Þ­¦Áwo¥Ú¤Z†/O‹Æðúb›¸øKSö2pU±ºDη¿§d¢‚ È¢Ž !ð,Q°ŒK‘QÈrT¦ÕÛ(á2µËr‡ŽàÞë6×—V—z­’M;ZM2I Ä"EoÙpME|ž0`7Û*ƒŠ]­í ¾Ò¢ŸQMäF5’IVQ/£%¼Š GBzWÀæ|Ž m›p²¯1k+¤ÞËzˆ¶Ð^;-…d_¬ÍnŠfŽPã`«ÓŽÅ…3 džA†=ú$ºtš3Èo<ÈÁDÝÙÝÞ'ª^32‰YEBÄToLÉ'$k8ç9lŠÐô‹É4½2âþÖßEòåÊ3é–ÓHÒÜ\]Ü0<‘d5dyó"„|9,Ñ£dÜ¿CdžÉF_èv)äËÿ.ùÅeµ»Õõspޜȋ$zzíä@Â’ v…q†¦xä wFžfÌŠ–©¨¦žž[ÓâÕ­gÓoh÷wÑÁhXª7§W +ðrÙ—GÅ2&í²W0¬1ÙiZ|z¾³8²×5yaU8Òeˆz·óáä(ѱ ¹™á€€ªkh‰>àÊ[Q¶°¾´ó6g%å´ºŠM,ϲ–¶‰‘†íÄ…YªNkcÅ–G‹fˆb<šf°"ôõM9DoÔ|Í6¡+‡áî­‘Êc]îl`8i ‹EŠ-^´tÆÔX\Odcá!·Š7GV˜sNjJ²íºœÍÇ’OûÚÍæÝàò¯–·÷:‹[X_Éqs#ήö³IªÉÌ)Y´¨J|9Trx™* 02⓱óV‰¨hú„:kHÚUËÛÅyõ¤†1iÊoP²Ïòà~ÐjUZµÌ¼Ø¦2FÃ*âæ›èío¡ê±j+i¨Ädõno^4¿hÞ5aõw`EãÊßïÅÌ=VR& A ’B¨,·Ö<Áåûû­:êXÑ×êÚ½CÛͦÉ"ú³/.(aL„4¸±ÏÔ9µÆ†ìŠä[ëžJÒ,.Ö ûK[ÍI¦õ”‹=¬©#ÅÁh\K¢Fþ9Dƒ;ù6â&)¥¥ùoÊ÷íæ³{/Ö`¶±Ó‘ kxo”ú"I#„bŽŸf¹³Ód–SÃNq—ÈmëY¹Ô/tME_MòóÚ½±Uú…üD G Bû;øƒvÁªÇŠ#ŠîCŸs’ú¦S¦§c}¦Xk.gš+KÕUIÖæÊÉxn½ #‡åöGL£â‰ÞþÆv@AjÞb‘5+í"Ò]>ÇN1Íj×W6>£@`£RTÔŽ%?›%®)nÔ,”÷œ³i¢­íÔ×w7ºÅ¼Jé40%¸‚P̤ø j†ß6Bã—ÜåдÓÌ\úÍþªù_P¶†[™îA¹±,×±ýX]~ê ¢JJ”X¯ŶbàËÂeÆ6 #–…”.™ç S˺¬štž»ê-Éúó øe„³5©UhϾˌ–H ž®GÕº P“E-¦ýóÇ5Ò~iI#Kañ+³Ä>A¸P|/”aŽI"h98ä*™d=ÝÛÙù¢Õlìü·yÖ"žâ>7¶Ú´¼‘Vh@<¢cX™‚ñ¦ùJ »?QXZ+ «™äãnðC:ßͦJÄ%ÌÌ y'»|4£e`6ba –ÒÚmwôYÓn5o/É êZÏÕ GI#¹@Rx¤r¦©Evâ>Ò²wÌ>;‰‘æßŽ&Q=Ëb´6šm±Ö=^2ÝH’ÞÛÿ|°LBÆáY¢qÓm³x·¸óF.›»Ð"HSÊÚ{¾µqk0Ôô18T…ô”ŸŒ¶ÛL±š»FÙ— œ{«o‹uA«;»ÍyÚÒçÖ†ûÓŠWoÞOg 4?ñZ¯!ñwÍ~YB&œi‰ú¬™»u¼¸î+õ©J¦PZ>MT|FQß&¾#Õ%Ô´as¨,Ú}¬’¥Í»MÉAÃ(ŽŒÕ5 ð–®Ù‘‹7‡érá2”Ep-`úž¡ ×Õ¯£k{}:$åwl±º¸™¾> EŸÃ3N9UíÞ‚(²/,ÝßÃ<ú}£=Ò‹¾³È¬œ~Ôk#/Ú*‡.Ùƒ©œk‰£,оµ§G¤-¥ªÝ­¤H× =" ËÊpçá€oÚûY y™ ºO–®ô8íž=ûQ"øÙßZÊb¸Ó/Cò_L ä‡ºñ¦eÌÄCŠ|×$£}Rùµ½qßêwŸS²žúÎXášàÂmšéœ—Ò•˜zLZ³  žì x•3úFòü¦¥-¬œ˜YE ­ –XÏ%t™–OƒcþRå—oìwÿÐ#¾Óô–ò~›å£ Ŷ¢¯sk5䓿ô<ÓÈ’Öªµãé¡ûTÏ0Ã9xÞ$¹AçEl6ßHŽÖÂÃOiàÒùéT¹ŠÓÕe¹‰¥iÉ9¨,YA ñͬ²qÛ2mSO×|Ï­ÆúÌÖ¶zž›%œZ®žÕÅ,) qO¶®áª~ÒÓ1òÃMr?kFöšÉåÙïuûˆVBóß̱ÜZ\RµŒ˜Àqöàаk*9À Fí°–è9£Õ-tH.,šs\‹hÞ1© JËEæ§“aöq†bT[eº³XÚ]Öçê‹rŒ²Â©i$m3Ïo+4s+·Ùælzöʦ÷i0}MVbx´k}þÁ®µ iÕ¯>°9&ŽH%wo„¯Ñ™lãß›Ãmy-Þ}£TIm,º‹T“ÏqXkIâ•°F@lf%*¤2j¾_‚ÊM:%·“Ìj £¯[ÄîÒsðºSƒ ƒ$«ñ+ŒÏ‰œ#räC“`7W¶ºhÔŽœwk¡Y̶²\\?™#µfýí7qºŸ˜Í~¦8ñ 2ÄÊ‚cì6wW3ÚÙ¹Ómæx µ¸ŸÔ˜Ü¡’á+¿Æ§sãÈf,£qØócín¸’ÞéŰÔÑícÿrr©ˆÞÞFåv4 Óç•GÈFÒØ,ì®uC>Ÿo½Ô’9ws£ì Gþ“™Y%(ã£È"C„&–¾ZY5«[Þ–¬ÝnhãÒImÏ&µ,á4;d£ÑT±ä«­Ge™&±¤ÊVîÜÛR+p‘–±»#`Æ öYN qš!’GºKû;ÈïLî8ÂX4W¦7'­Æªâ6Zr;üG63áä›K'ü^Ñê–·âK ¤™ epV”(  œÖ0~ßµ†7†=öØ*©©yËÚ}´¶z6ñãÜ1ŠK¢ñ¼Ä`1ø¨»² W¶ –Pc\˜pÚÝ3Ì2ϪØêcIš.ç—êq=Á{·3éÌèÜiô÷ãQÓM ù´J%æM_¿ÓüÁé<×Ú¨º²Ç75–J ÅŲ¾ÇÓ‘[Ô Þ¹f“$±Àų4ë] ½)ï5— e¸Õe{™ úëꟺ†±¡­ ü~Æ[ù¾@zº)ÎAô²)<£§Oså}5WEÑŒšdö±Ê${w„3ÅdÄ‚KFI Æž¢S5ÃW0d'åȸ³É³zà l¬të':…µƒF-ãÖ"dŠéÚBÅ-_â*wWfýž9 @‰[‘Ž#‡wjv¾.­£ÿEŽæãS}VÍÐ\ϨóÔ‰ø}SÅMweͤµ8ÀáêÙÌmÉ.ò}ÅÏ9´ZÕO–ä–[Ù-%A-Å”’8#ìósÐv#0uww(”åÈ-±Ô<©6µasmaÆâá9éú©"Ø( OLž<ÅXU‡Ú\œã’0óbMRevn4[‹ýcJÕF¡c¨ÙÁ§h«4~”ÐÝE_V9•v„óð}¸ä ñ€zo$åÆ+ˆ%݇•tÏ-ÜMæ/ÍuæmI` ‚öI¦[x¹1ø#V¯_LöZW|ËÓæŽÑ‰Ø5ˆXº_ öš•ÂØy¶qk ¿[`…m$No *²¾/¹I"ÒÕ Q2húï-1,âšÏP›S{K²‘$PÛDÏ'7ûJŸmË#pïѾ$,ÓdÕEÓ´›ÒÊ÷;ÀÔÇ/¥bÛšRŒ:m”gŒNÝ:´L”ßRó6£ÇômÝ¥´—vpÞKs)A×-^«û¤Ü‰2µÃlq€ ®…¶CÐ $Zǘ^ ô¨n¤²¤¶qˆàºŽÚ"ÒÅpè›#“Ñ~y“Å?¨"Cv9¦j·¾\ŽÎãH[X­xe{k(¢šÙÀ@\É^m²ý®–LÂdó$8F$òÞ )½Ôš®¦ºh~±owg{}Fkôæ!¹¶­ÿ°¡—"D³zkö6œ|Hï.ϪūEd–êmH¾Õt虞Eàœ[ÐrªX$?ÅÈÓ03éøi»--ƒEóù¹…mÞ  Rt*Ö¯¬b¶ÂÔˆŽÿÈÃ3Åúœ¹Žï2ͬjuã[é}£i·³M¡úŽ$žÜ%²ˆ–7 B–fø˜ïÇŽ[‚X¢8I£!»GOÔ™Åm©ùž+(uä‚åîyÇÖ„ƒÀ•>¢,¥Jž_bQ¿ÚÌ?8I­Ã’c’îXó  –æKÛË ®f±µµâ¶Âx£ç$n$j4Œ£‹ÜcŽYEÐÚIŰORú-8_i×60EmæxWXŒ—‘í¯82Í5»h$f þ¸Á?QxôYJ’8í´%ß6£Û\Üëº:zKúNô M–Ybôvg'û¶=C.dqÏ ³È±œÄèr@ù–îâ;¿­Îš…ÅÍíÃǤÝêv&K›G™)¢É¿Æ¦œ$åðï™8 F×VÈÄòf«¨^ÝèÚf®Óé½¾µl"8“2¬öÒq/Wdà~Xe`ñÄíÉ%Á»k(ÊÚéú…ÕÌ‘ÝidY\D÷®£›ãŽ]#jþÃÔˆ] í·`/ªýFú×UóL÷É9Õ¼ÕécP*mS×7 €AŒàü`×'xx{‘ÆeÌ$:ž«¯¶—®›†¤¶W?\•ã[ib òX%8¯ žIKÙ)øce;}:ÑcºÓµÍUᲚ(N“}yalîG¢ã¨+_ˆ ŽCÃSpáʉâÓÃc`$±Òun.㼉cº’Z(&¼·@b–Ùã«©•xú¿Ï”ŒÒ;EÌŒ¸7d³ÛíÜé cÓ­ã·úÓ›†hÏ«h, žE™„r#uÙóW(qz‘<‚F’[Ûiîa¸£äŠD’ñeâá%Óa¹U–EiéÔ1W¡Ì¼c‡ñÍN1ImåäWV¦ÄêñÆÚ›Ãqk}x¼mG îI Ãá<{ó*8÷².ŠÃLR‚H/,fHÖYlµ[­KÌ• d$1 Þ¦™|¤d+“n8ž¨--%±ò΢ðÝÃyYæ–ØT4SÈ©IH+Õ–”í”åŒúk‹™nµO­Ø Š% nÀ2ïÇ̸jc¾äW&áB‚û}#S3<ÓGk£V^ & ovzDú•*¹#‘¶G„¥²åˆˆ°ÿÿÑŒÝk:n«-ºXé÷‘[_Ú^ÕÞ’µÜ,#n`Š¡hÈhù{ç™äÀa±`¼é‹›Jò¾°‘i©ÅŽ¡£B²iò\Ö;i$†jÍÀ’NíÇŸA³tʰäÉŽDÚ‚Ç-nO–cÔ¡±Òš)æ°4õ™ž¹&uÈ Ô‰…)\Í„|Ssl#lou»ÝIŠÂÊWÖuHg³Ôµ‚ÁŒeœË 8~”aðrùe2&ö;Ú=“=+QjÖqÁe5ÝúÈ÷0R_¯Dõ‘„l@PÏUÿ[(ËŠS˜üÜ$ëõíþúo0XZèúLž„p^[Õod·çê{«7#Åé\ØTe„.WÞh+¸o$»Ônôý>ít†º\LÑñS§±+2r©âT­^™dDn÷k–ÂÊ•õ¾¡¦êvR=µÝç—­ä¶šÞ×D‡”R[Ä8’JRŇ.Uþlœ*`‚j^lã CQÙéšݾµgª?ø{SÔ#ÒÆ†Þ¦e”K_ÚYUÍ)ņD‰e‰o×=ÓÝZþÓKÔí´ylÛFÔ ¹g¾µ³¤)v*‚» ŸÃ5qÅÅdm¯…w2½ú³Í[ ãîH©2¯)=•ypãÞ¿]#›-|ºfŸg¨ßBÖEkz²\82—•`ž?Z ýv’¥)_†HÎSC¢‘ZJE ÜÉm p²]EõËk ˆ„Œ³2#Õ¡AUë¿UÊ2ÈÌYdwLl4ÂÜ…„‰ ʧ§r^fæÎw!£;’ŸÇ‘‘±JukUacupši‰"Õ ‹9%žSÁùR¨7~Îdâ#æªV¢{}[R™mîlÞhf³¸AyƒŠmèü—?g‘ºæXŽô€IL4VS£YÜiöÐÜëw Ge…-¯L²*Êj¿¾·hèȾà ‰]Ò­ß—žçKÖu;d±Õ,š;kh~¢é$×,ì8z uf Ô¯"§èÉx„ÄÄn<»™q˜ìPÖÖv—“ÞÉæm^«ëVð㘽G wfòRR"rI÷å’àb:®äù%± «3Q×.Góe§ú¼†8Ĩ]­n SàôÍ+ñ|aó+ëõƒAggww:é×0j lmþ¦.lQM·§+·¢w,_‹ m€âÕÌLÒÇÔjÿ3ø7-h\yKM’ÂÂÎîÿFÖ¯Jk7W ÌÒúL6ª ë”æ”u3â&¸G&¼¢=S»Û[o'ÛÚ~ž[‹á'Ô4Ý:d¾™£"¦*—S;/òvÌ<€J\6)£(”MIn½6·§éz”öq¥…Ô¶èË!̳ÆÁÉW“ã*è9Q‡}³# tY2P—@ºÔtøüÁw,šÌðØ5ëìò<Ñ¢·©êjÄy#2ñ̉N1ŸÙÄ”ª\)¥†}¤[Ú]ëú…µ‚êU½³K·76·w6§Ó…ç‘9¹Fhì(Uºæ4² Ë„rrÀ¦ô‰¯ô mBîÚÞ4½†;©¬¢Y–îÛë/'!õkY!`C*öë•erõ˜ø†Ñ·?T±×`—PÓþ¯%ÔK§ùvꇬҿPɰäk1òb rÝrÈÚ¼wRéš‚K§#É«ßg™2É¥š‰g'Ö#H“SŠæÛÒ-¤¿»xZJòõß5ÿ'5þ%>¥„€¥(tûÔÕnµh®c¹—ƒXêV÷fky˜Fò¸1©Ýo§¾VC9¨„'åüÒ5êž¡" ]È4«K‰C5»(i‘Xšo²ÕøwÁª™Œ6É@žI>§ªùfçÌWWóÛj‚+·™!¼·¼‰­¹ËÈÛÆ š‡âç\»" $veá‘@º‡–u-"ÂÿZ‹Gšè~˜†VÞòÎB¬¶S<ÙÑøñnUã^Ù‡’3$–Ý<ñ1ÍpØy›U“ËÞcÔî,uç¹Þ\´» nf‘…Í®¾"TãèHñ~!©™ø"#(‹þsd€²Z¸Ô­õû™âˆÉ¢ùqïcº¿–ö{‚– F ]šPãˆþ|1€—R)’hÐy^â×S¿¶k‹-SJ¼±Ö$,ÍÌe#£"€²Kªì­ðÔe2FXý=ìŒE5aåÛè“RžÖuÓôý ¬V³[̱µÄLœ¹’Ê57‚i˜Sϸ›iˆ1Ý£ÛêòO¨Ø[[ÛÃ}yYõK†¼7¯ÊŒNdØzª*¡zeº¨‰дfR˘eÒ®§UÕ¬þ¨'½IÅåNNÑR)Zò_òr¿àÜnCT€óö¢º(ÐÓʶ6ÆÖØÚ5›ÇÅ…ábfX™90ºï·á™zxâFd‚çc«Uеý3MÓçÔl`–Æ;éì†ÆÖ1-FŠ ±‹ùOí.C ‘— Zç"6 yƒP¶ÓúÞ4ë¨[úÚu´1⮉o@ ˆ#j¶ÕXqqN0ˆ(›e7šÖô}3T¸ Ö¶ñ¿›“J×nß¼ERT ^-Ë®iãŸÖGV%ÃÉ©`X5(Ñ¡ô&Ôm¡–ÒÝåÈñIÉX_´Tü]†]9ÊQäŽ2y¬‡Y¿†Htý~ÝÍ‹2ÙÂdä¶mÈË G‹öÔŽ?QŒq•GvpÈAo«i³\j’ØË'Ö¯áLâXVuø$*Î~øGÀÛI™9qH%É®S²ÈnîngÒ4pªeK:··öjU^á_÷i,t!}’½ye>ˆ“[7Ý…+ <Ý©ù~MX½ŽŸhd¶†u·H4‚TžEÀ4Û"8c ~«e‹/¢¬´­cËku{©E [Ú¥¼ßYõ…ɸ^CÔD’¬~ÖÛå’œ%´Fé"9šÒößÌz-Íô³Å¨ˆ^áínÒnD-™IŽX¹¤MAZ}œ·.)b ×6R¼cÉ’Þ­ž³ ké'¼ o©[Ïv’=”‘Y2'Ãé)5r@ê86Q„ !¤d½ÀK¯âÒ®µKMQi ™®ä_6X¹2ƦBhÕþä@V^ªÊ¾9!)@l=Í’BÃÿÒ'Ön­!úÕȵ)î!k?MëÏnŒ¢F®ÔaÔ?ŽyÈNMÎ΄ÄÒ[« (É{¡úüÖ“VÞåIŽàÁ*„6Î\Ì‹ü®9•˜îZÌPºíªKkg刹KG:ÜFXúÌ%@–*š-TŠñ;°®[‚|ä‹+¬u»¨"Ö!žÖYl¿ÑméÅ+Ýê„1aݓ瑞8’ ¢ÕtùµO¯iâѯn-íM¤ÂID²Bf Â@ñºñ‰ÿ[®]4ã z3„7¶A `‹OÒ&_ØUç·¼ey%¶–ãÏ#ñ¬%ÇÅÅ‚nªšì¤eÏ|Gìkã‘4·TÔí®Ïé»xæŸËZõ¢Ía§¤e¤ÔOßJ’·ÙàEf#n‡®ŒŒ† QüzZ2@ÊT«m —–K}º·˜n¯eæ[™ Æïc<+R²¥9¿|–C úk›9cPæ˜y†ï[»Ñõ4ûI¯µˆm I#Q-VòØi ±ãéIøÙ[í ÇŠM™ÇX—týgW±‹ôæieigõD¶œ\‡Ó2‰3Ê6$švͶŸ‡ ì«ìsÁŒw mõÍ'Jm7R…ìô»ÎZ@’5¬&퇨‹ J$|55^^l¦1“Ä,—Y6Ì/ç¸Ð>±u¤JɨÝÍkdl¤6Œªb*’Ö¥+ö³]L‰ ã>1º•í®±å8˜Y7žtÆšKIî.Âêv7t_F/Œ *©-È^@¯LÉ7ÂZxwê„*ßùvÆS¡™$¹°‘âw”½…À@ ¬&0JJA^YŠuq‘-©IÚUöªšÅ÷˜í¡»šÝ¡DÒlˆ³€µâèjåk*3 ðÑÇ!°Ü)ÝÙîÛIKil.g»ï*¹†(£Æx)Ýk»dc˜Ù‰r!@l£åécÔô-BÆQtÚÓë qWÊŦ˜Ù˜G~Ãp*Ãå—fÇ}þöÓUºÍ'U°ÓæK§ g"JóéE‰™mªß~‹|Càçã”æÆd(8Y§B”5 UõnÚ]29,tPÉmêBá$i"b’´Ô•–ãd¤ÆçS–âÚ ]ìÛG}©ÝΗoËŠ„V¯ä*iðÓ1µ2±ûÇmÓËýRâó̓ϮjQýrÖØF#DIîV9£.’Cë'â> 5-‘ÓÄâ†×E¶fÂY¯kwåèµ½c÷¢ù.#ŠÊv~­e'=Äh[—6%iצdezC‹,dn­¥§^ÞûWÕZ;ÍæK‹>o‡¬p›'ä°*Zw˜ü½w§Çmæë[¨/äO«hÚ¬-³½¥J²>Á~_DÐ5'ªÁ–<™ðݦé'–´‹}OÑæVòÿÔbµ»3s%ÕÜŽé!v5‚¿ÉÌ]FL’Ìn×Á#ÍkÇ”ô/5Ýyg˰ÙÝ—™çf·2472~îWä ÄÍ*SìwÛ6\y¥ˆJñ°¤ÒÇQòõü"Io¥ÐtM;N[wÓõÚÙ êMˇ ¼jT?ZûÇÔñ‰Põ$«¬Ä5@隆£†òXÒ5ÌÖQI³(†YÐäH¥×þ3´‘<7&p<ÐŽŸåKNò%µÕoLWúí„$w:Üß÷€Q(Ž¡Wp¿W“ŠÌêÀq«€wBèéõýOÌ&þâó\ÓôémäÒ­àG.…V’ò„I -g(ÔOhz6c„É‘ùul 0]ͧê4wxÒ‰(bÅQ¤#Ó¤/¤׸Ìh’O¥ÅÇ ™Xä^d½´q¡i¾[‹Ë×WÑI§Ù´,ÓIq„-põ, ö~Ëd¡rËÆkn³"Ï4¿XÕ43kz—èÔ¸ôô¨-,4ýFá„fý¸~ò3*œ°å7Ú\É–˜ˆÙ<Ï$ÊA(Ôa]U Ò¼Ÿ¤Ç%‚Oúaik5±$N—sHj$2/îØ}Š)ï—éøa"fwL1Ùõ#Khg·6&Ò}"Öiâ¹Ó#”’Hdnå^³-¨û\r™L«ªeVÜÑÞ_ÝÇjÚ]òjCP½¾áw1iPÛɧ¯ïµG²¨?mrì¸"=D~–éT¶¦ØAa §£o}$×k6¡:»[šž<]Ü(jÁ@Û5ùsJF†Î1ÍÜšKå1­êZ§šcÔ-t¯.B“Åþ‹—7ï!@¯u ž!ÇQ»|é–GUP¹Ûtd y1rÎ|Ça娵ôÏ.é>Œ3êZ‰v2=զѲÆO&§TØrÍžÜLä,ËéÞm±DìÈgÒüɬßÝËä0)–öKm6ÇœPú¹[0YsY8#mÔä|x£ûÈ5Â`ýCvµ)c¹óÖ¦l§‚î8…ÌO ïÔï±ûÖ‰ ÐKnçì)Ì#áöÌsŒ‰‰ÿ‰Å"Rëm&;}zÖÚêxî,oàŽ­d°–[K8넎H]‡0µaNk™qÍÇ.TìvÝ ªù´ÝB±Ô4Xý[¤’Îì=¬ÉÁ¤£ÔS~ ㇬ÈѸÞ'ʶ¤WÞHƒX¾†Ú;MBí­uMZ ‹¨}*Ïi,hª¼JÄõý¥ËeвÁ£-ƒJw†èj-·eÒuiæ·¸‘ea46ªˆa”†Ø(äI÷ârº…nw "&6Nmî!ú½Ö¨ÛÃÖ‘qü·i=²¸‰Yœµ9È”ã÷ä†(\J<: ú}ö»¯¸ó%Êê·Ö&-1mÔ Pœ 3³Dô¦ÿC˜ÙaÁPÛÞ¢Zûý>Ö3>‹ªÇy©IúFâ÷M²·)­óH 7-Aw O윯QÞ)²ví/äµÔlu‰5ˆì®RTK½#ŒÛ½Ä`¡U*B’éÇ“½W"3h s'KÓk|Ÿå¿-ÿ¹[ízöçVMP7Öâ¶–(–yà”J ò¯¤µÜvÉËU’[U;háÁºß0Ç¢êöÃMÒVïÌ\Ò´QÄ÷V* x•êànÜcŽg@FκPŒ%²O§èqè÷ºs ïÊ^H¶v4!Ä62ñ ‘)1°«HOÃôfDõd½íœBÛi`Ÿ_ÓüµèÏ¥ù†Í^ÒÇR‰D‚;y$š Ñ~ öý®;ddrC0×µ .4íFi­¬´{u¹Ñïî&F’ ‹Ÿ 'QÉM}©‚26yµÃs²r–I47Iix³OéÛ"Œ³K$1HËÈ­6qÄ#o‰W1ògúƒ—âVÈû)ï´½&&Ô‹²,®œ•š.SwT+SÁÃü½³ d¹úNÌdHAèvš¿”5mR=?P\Õ¯çŽ+@ïYZhTK$hgçzµzôé›9å…ÉÕ²•ÓÙÛj“èZeôšn©¬‰n&¶¹O¬Lï(º·še*ª V òíŒÃޝ‡eÀQT’ >Ÿ^êïP“DH&Yôù)')ÞX©UäT¨ýœÇ„ÄÉÚ­„ &ËmZ-BSwª½ÏéE”[Ck_PM%‹ }T'÷¨ÔjfÎ10€ˆüsrÆ]ßÿÔ…j—s\A膰„Þ[µß¦c ‘ü6ä) R »SösÌ1F$“'žŽÉ³èVþ`Öm5r.šæIÈKo¬Ø‚ aëðÇ//ÚöÛ2 ¨ mŽkV:݃ÿ‰']> .ækëm6iDŬ®uXùTú¡…6í™0Ë ÇÇi÷–Ö÷^»¸ƒR‚ {½64‚ÆÒ)—ÓîU¹2© îÔq·ÚÊsã (lãJ4wv…f°Þ]O¨ËÆélâ‚ê½’ÐÊGŒŠ‡§ÂHo|ÁÔ’I6h(Û²r²‚(­Ž• îߢ§[ÞM/­Å}ä%9BéUnÿdcÇÄ7æÙÃA]æÓeÐ5ÑÚ—è­Nõ¤“Rב´øg bŒ­CHX•j^¹n(†I'é«-k;X4kc=·§­tÒ;Í< VJT²‹‹ToÇ'“—ÕÉ™‹Ñ®uA©X7Õl`3´Üm"Œ²L°·ï6bT¸Œô=W(ÊGLȈM<ÃÛXêRi×ßè·/2ÎŒÆÙ\r×`”øYFÙDI•1•VÌ{N¼•K=²[Üêl“A§Û±ôÕm÷…ä‘#S·€ËAÓ«½Ñ-¬_QuQd€Ø½#OR-öƒQ\¢8c)æèÆPÛêW:’^[^Oh®¥#Che ,s#5A¥:³&‰$2“£ØOy"O ÚÞ±<÷z<ð¡¸@õxì:`ɘÖüƒ=ÕÅíâ=š[MÂkhŒr9‹„sW¢îChŸdæº4I, Dkúèÿ¢ÞI"Ò5H˜²¢úÜPÑ]czŽEC.ß~eàÈjë“!$$zö¶'—JO~Ìu•˜¤nm¸d¥ã¡n?ä¶Y R”IâåÉ·…ÙC^j6š=ö«4Öh|¨ò\Þn¡i$¹Wý5+,c­>EÛ3¡ˆNºI$qKd’-6ý΋©šHõX úqW•m µrÌv£«T­>!ûC ôD‰UÚì .=.kÙ!Ö¬­Åö“ ɧ¤p»(·–)—<¸€áË?™zœÇ”øG ¶'v¢l§ºþ¡e©ÚjÈ!Ôl¤‹PYífTµº[sE,´n£öGÂäo¾càôƒ{†P7|ŸW¸¼„Ǧ_@olt; ×žXi!Tû+?%V§Ã–Ñ FÌÌ­äwó>±-ÌQjsjë6¦ò$Õc†I¦6’ 8ˆZ¼at„‹öHÌÝMD_Á–:V-r‹}'TiÖëôd‚ŽâÔ‰$wkwôϨ€î¨àö†bxRÜ×KÝŽMŠýoÉz^kª_é–ͤJ²·ºf¶hc“”–õj$Œåºe¸õ˜© ù·q­k0èVÐùž" ’(bºNJZck=#Jn¥Šž>¡à똷y='“Q”—–BûVÕ-"C¬HÞ{;k©oˆèªf‰G§ÍPÑ ö®dJy DG&œ†ÈMó@òõõž—å¡qampò[_\ðŠ#Å—”’3Á”é÷ÆbúÐnÓ'm_Q›K¶ºŽ7k€Vö=CMAk-Äi/ âàW÷½Ørc5Ñ#Å<[¦uÑw©ÜÍ>©äK›eÓ4)ÖHtø’)ÜÍ£tå”`œò¾ÁłǼádÚu†´š¦™˜.!¶HïM*Ñ…›ÔåItõ>É¥rì‡($¹3–Ô…±L›R³žÒÊ9tÝjÂòòÂæ'$Þ›v+-¨gÝ'…Ã+³|>9•¨À@â=ì&xBU¯ÅiåÑtÝÔ ÖÉpȜ線_ÝT;‡1ÓÔ¦Y§™Í ä¸ãâ… /OÕ¹½¼‹ öÐJu0¼Ðú%9Äj’›q%Á|DnÆ8¢Í2êÃEµ²ƒYÕ™ÒénBÐ$?S{V†JúWr½8E'.b"K”OLr*õ©1=µé.­^öâQ¦þˆºœÜÀ–j/ëµX˜[€•‘…OEÛìäôù.¿œ¸ž¤¯–ÃôV™7•-$ÕåÕžÆoqK¡vÖr;5yQT¯¨!¾Î^gâ9?Ü´JävdÐëzŽ£ºü6mkiki ÎÁ.îÕ¦N34ÍZ,ˆËñ+¹¦ž #qæN㣑2 P~SÔô‰$K˜’uó B/~¹vðM=´Š*¸ñ“níCŲYq[µä‰ÙA4y­MÆ}¥µ›isy÷³ÆÓ\Íp¾¨ëðªŽíŲùf <ܳÁ—ØE¥>¥o¨ù‚ã놭gpñ]à ’6)ا֙ž‹#/*§ì±Ë%)ðÇñäâlºìÜ^kÑ^]-̲éPZÙX^If;‰nŒÞ ZQ£!þ>_䜙?»L Tº×á[?1ët˧\jÚ”6vÒÝ) õ*£-ªHꓚMö8¶Pul‰Ý­„¿™¶þYÒ,%Óîzv­/¶Âä<Œ?xô¤ä~4ì\/‚ü܉BØ·—´»7éÚ.¦×zé‘Ý6¥ 2q¶,&x(äI®ÕâŽlrC#™D£ÃEÝÍ£ÿ†nt½æÇRòÛ$ÚÅRÚ¼q™X•žve!͉øñ¯ÃÐàÃ#âïͪ(ÙVòU–·ª\ÙC"hX™­ã¹™WŒE_L1.Ž»«6`k%â-qˆˆÙt:xó»¬-Æ¡¥ÂG|Öv§Ö…­¡Q'ªÀ´(쟳‘³‡í“Í0ѵÓq¹q Ó¤:“<±én²˜§K`~“Ê6hÀh”ü? 2D Gˆôlé²2ÒúßH·¶‚ÚâmCAÔjI¦Ïlÿè÷thQ’MÔ‡'‹k\Á” ¡»!’öPÔ48öúÍllo&[hk¥ÞŽ2 ÄBFˆn^ NT_Ú9^šSÜ5OÏš¾¯­ivÖI•/“G´6òÙ‹9âu·³FŒ¢¸XÒ…™ˆ2µY³/S,•1ÍÍÇ©"4X˜ü²ž_Óìµo¬l%”‰n`‘ý?¬ÕÌI oÄ·Aǡ˼N"b´“Õays¦g½’+-é©K0.þ¤w_¦€ÒŸÄ?Ä釤îÕá ”=êécUåõý­é Ú˜Óâ“ë]ÛN¾œæ^LÜWí/ûìòË røu!b™øœ¤ÊÏO–ßT±’}WM´±€¡¶Vs+\³"°’%ˆ» Iøºæ? @â-ƒºè¬n"¶’]6Q1yOа´·'9$àìÙ‡9 ¦Ë•qnSÛxµ V 2Ê;•²»¶i>½5á>¢ã# Pçââû_³•c7|ÓÌ¡F–÷_£õ­9akÝ!Rê+h˜AÏ”Ð;æ Q”ý“\cœ ‡zÅJäY[-®£:ÇêÙžIgpÌ+5È€n¸7#¾ F@ð†2*öö…•Å·4ÈÙ® ·¸¶gúª¬h¯*)Ɉo£2 ¼9QLt»O·‚+è5m,­®l·¾†ŽIîS”JIâx± Ùצdœ§„Žˆ3§ÿÕŽ‹M?Ou”óªëÒH×>·ï FˆðDWo²ÔsÆ»³Ë%NÜžzúœö…¹µ•mdÔde„ÃÃê‹=Ò)å^ÔUÃ~Ø®d`ÆD¶;6”#ZZÇq¦jò½Î© Åuk'é&ŽA+(¢uû^”Pÿ´¹±8ªvǹ¼D¦Z,SM²Ó|Ç¥EqªÜFtÍSW†îQ~¡æT 볪–VâãeÊ'Ÿ ‘?œ\¤»Ð¸·]sJá$Ú–•,6údpIê^0,XÕ”5G§ñ)¦QáÄÈãÆíF];O֦Р­êòþöD»g¼0DáO£2ˆkRŒ—9•—ñx`È"r'd‘èvsK£¶¢ºT·Å§°‘%ágmw•+̯À²+µÑºåP☰-ª1²šØ[¥•ߘ͑–ÊT°¶—XˆÆ³LÖ,Áe $‹ñp#f_æÌ|Óˆ©I4i)g¶Óïì-Ûèö:MpáQbCB!äU—™²k–Q8ùîRyn¼Ðî4MgCm/™ƒM§ÜúäÅyÝAŒº’¬¦O²_<õ`¶F•-¤³½—zëÃu}¥«Ûê6¿V_JbV:4B¼ƒŽ%NÌFFQ— Ç«EQ@\ê[¡Ö4Ùe²¶ÒT‹kK˜ýQõ‚ dµII 7fÂWW**V·zh ©K×—÷¨&›0 *¹•CX H Ê)"Õæ`aˆCvVt–(I u*~-Í>ÖWœšš7&‘~Njš}Ä7" [Ëk;Ci¬ 2K—rüdAB¦9³¡ûJġ̽^(bˆêråOt“æÝYo#ôµ }sõÆÓRXä´³õÝTE2²™¶Å”x"BéNÌà\5Í‹qªÃpúy•WÖMœ…ZÙEd‘Tü²ƒ#!¶û©ÈO$¦Ï[Ötæ¾²³Ñ¬-ôÍN`îöqŽ%î{ˆœ?# ™|¯$ï›2c ¹ÒH½Êu¨_]@t] ÂHmlÚêåõk}B#|u ÏL#~b‚‘Š¥(}JÕqã”Dn¹E1‘MuíKó ¯Õ¤¶:JÉo–Rx}>NêVâÎi _|‡/|ÃÅ#ÝT”o oVÒt»{ÿ-y‡P¸åk*ê¶6ö5½ÂFƒ‹ÂÓìg`ÕàĘ́ÎQ"QÖ¶Ž2™>§ç§Ö¥×­5D³òÖ›£Ú_*ê!Axnסn ‰£tç!ñï’8áúÈ–øH‘I޹«¶¯£E7­©ÝY^C4ÖïyþŒ«õ!x@*KòP }’3MÌe-˜¨¥:§—¢Õô½ZýîQ³žÑâîÒk˜$kuçK3Ñ‹G%y\Ûã”±ò¦S1Œú`–(¯õ;…-f³Ï{–I%‰XÈ^8ÙhŒ§âo燚`’$7 2ã ž.›§}nÒç[ü;oh¯µ…7ši ê™Ð‡ƒç\ªY ‰­ÃY$lÈ‹]^÷O¹öX.ôÛ™>«†©½µÊ²CqÈÔ±VSNâ™QÄxA‹ µ¢K³Ðü»õõMÊûT±¸2+Åõ›‹'@$q^4~UZŒ²p0ÜîÈŠ¥{­®³e&º²j:­ýÔCI֬ɋÓVGF[¦J£º”ßk³d%¨…ØçûJ#"0Å«y]/4›BâãFYänw·OtReZËox‹ˆä¿~Q)Ç0‘òd cÍ"óuõÞ£y5¶©éßjúdð6‘w K„¾†eॅCç>,·Fâv<Úrd9-Õ#Ô£ƒT·ó>ž÷ZtŽ«bÖ‰èÇ1…ô”Ž‘¯äjjÅvÉH‰Èýlb $Ú ÐW[o¨]ýMBC(¶»†;dâd+- 'r¿k2ñNgî_z,ê6wfõ-Ž©,M5ÔÇ}e¼‰*‰8ðø £Ã#ÆcÕÑ„h§WVÚ–©§Imq©-ÕŸ!{c*Т²À©ûÓâîªs_І^6r!3TÙkQÛéÉ7©{k+ {xØ”…}:4m)!š=Ã$™“Ÿï6c; ©™`Óíä…¢Ó-¼:tñ7+¸Ä­Fh…dw|cmóbõ\ƒ~Ct.£æËMQ¡¹•®5­>ÂS{æ«I=;VŠéXZ«ÅÅi$j€§s›LzNwÍ¿ hÄB!“EÒÔIoRÅ­pZСàV."]‰xÈR?™y ט‚xº÷8â|[ ôí?L¹´1Áw$ºlâÕ`»¼B³Û&hÃÖ…\3-~Œ¾Yš%_ÿÖƒ¾»c¬_jÈæKˆ¯å‹Ê=+9" PÈy)îsÍLLFüà‘`£+ř崹±}[O–6 b1Ià²$ŒMgPz4ÌŠˆÇ|‹.H­CÊVm­ê·7:ž“æ]ækù#ø`hž¦þ¿$u+ö\ýŒÏ†¤J‡£h’ µfò42Zi"ûOk¿®XÍÌÚ;Ò1Ígi(àrU4_Úø|3í“ÔvêÓ2/t§Ló,:MŒ··×ã«ÝjÑz‹¼±(⪟mÇC•ªäΘLƒ·rDo’êÆU²µó•®E}ª@Âk-F.Qíýê4¢¡8Ö£é÷äã8YÇ!IZ}¥ë‘ùõ"°óå½×–Ø,×W0Úq–ÒâØ€"Y s-ñ7\ÄÕDࣛ ¿Ì—‚[›[O+]]ui‹ÚdŸ“Š;3ÈP¬´1ì7Èà¹1Z*&kïWY–´»Òe}+R0pËlâ6zPƒXÛ‹û=29£Â@É䊻Çgå É K¥' ŸÝ$æE>¥|s_’Ü÷±â R÷’7º/ÖÕºôÚÞDjÅk½7¦`a©ïü]¦S-,`›M‡I»¶°¼…[qBîä<„ÆyöŒÕ†_Ç(ßæ¢ÈJÓK×­tÿ/Goc=òZ ûÝZMe¾®éÿÑÏp®£÷N½ŽmdqJ<[_pnr³Dòç—µ>§ ƒDŠþfÕªæYª¨e·’)Tׇ/„¨ø©±Ê2j̱Œu³W'ÉÛëß¡ôÍ6ô\Dܧ[‹˜-Š:E²¬`Æ$ UZ¾À¼bã5½5Õî÷sk¶š¶±ú2X[EiZÓT·L°”R–·&5?feCàåö±8£Á¿G"2ê ºç”ÖÆÖB¶×ku%†­£ÙFe”Ù˲I9»\–P¢«\9£¸Ís®k2eMt_.Oewæ=i®Q>µqok¤B·?Pamj!‹÷Ì|™£,B˜j”Ä«¢›-ÞÎÃT†â=[SH®c·¹²¾õꙩ$qÃãþ·#ß#ˆ˜ŽMÑ1;òüÞÂã]Ñ|½§~é+‰‚Ì’OlÁ•`W§Çáßì‘ï•æ‘â`n!juõó5”šÚ¤R}jêú¾½ú5·Ç Êñ·É×ý\´C w*eé¥{\Ô¼³=µoSLÕf€Â.aHmdº.îÏnÜ„‡˜èß³S•G …95â<#t¢æâþÃÌK`ö0^Éå»x縻¸Y E,öæfãͨÍW_Ú§\ÉŒÄ 5Å~ŸÇ&Él)–^YysZ²Ñ­t­BÖóBpÑ­³¹†\ ¸µŽVjƒê–({·ÆŒeÄ{â’)  ´–)ek©,òÛi«õ(Ë’Þ餘=U—f_³ðæ^)oɫĩRËùoµzÞÚâHN¬ð­É¹²ç=¤vüJpyvQ ²kLžhÄc2n˜ ¥0Ù›8ßë÷B.i=µ¤kêJ[Ôn-qqUÌjW÷©û9$.%È€Sžm+Lk-vÑ$¸Ò4 …ú¸2¤Vwêy¤j0—o†^Ø‘!éë&Y!A:ÑãòäwGÒÕ–cUk‹ÆÕýi8é¦e滧 ûDS|ÇÏŠÚÀpˆ;ª\ùMZÚäX^Oíä¶í§éþœVÏ©*h–)Br­h[oµ‚Z“-ˆrD¸ÍV­¢kZ}ü2èo.«4ö—Z¥²¸KH¦ø2†_ò2¼YðåÚBŒy/†cÍ ÕuÒžÖÎKÙ¤»ÓçVswjV8•Ϩž¤‘§Ãö‚†ã¿íɇ¨“LI°ÛÚyXÒÒ8Ò×RÔävxã“ÒŠxQÂ@ò×Nt`u¸ÄƒEð• n)]G#ÞXk:…ô.©¤i“Ò( ª,ifÿî¤3?ò¶fñxÑ&¸@o³Ì&zÔhÚÕ¬—I-ó£_-ìÈ÷ÒÛ,dJÉ0v,8¢ÈÔ=òŒ½úŒb{ ô«­=oc6ì¬nnÔm$k []_ÒPÓ3/!®ÍÇ¥}òìâW}ÌÎ>‰Eæ›g=ãé¿V¹€>½¡G§«KmpÊÀÉk3T‘ j´n)Í)Ï2c/EÇŸVb^TÒHê¾q³Ô<¥8‡X× Ò^[\0›Kxm« ë$aH‰Ú… ¿k'šGÃâ—N¿Å¿&™&ú-͵¯œîô.Çõ}>9cÓîþ©+ƶ÷2GêK-”~-¾Ök³BRÄ%.e³„î´ê>aó¥yå›im~¡g<څƺœ%V¶(±ÊYÅ /ÄWöÁ(iLcÄw-yhGdˆêZiŸV°Ól£}OäšEý«‘¤ž‘ÈìÄŠƒ³€2É ¹÷8±¨ód—0y–+Ý"êÊUºÐ]¬àíede†I= ùÃÐ0-Üñ+¾ciNØ&‹’xDm,’Úò[­GÌÞe!k‰4»=TÜ\–e¢Yþ® ØÑX‹2rN' ÇüÚáÌ&qù¶ÖÓH¶ÑÝÌö´6óÛÜMn-ØÃ’)Reœ¨?^˾WŸ †@by2²d©¦[ëÞKò~»¡jÖZ¾“å먵=2{eÞ MAÀVX£!œ9‰OÂ8å™gÙG_ªÛüH‘ºk!jÞd¿œJþÙ¦»køà—M¸[n+Ä!š‚„ð¥j0DúÄk‡ß×ÜÔH‰bÖ3éé éúž¥0»H,¥·Q¯¥ÛÏ5L©Ú/%Õ©Æ«™9x¸ø@iÉI¾¹kq}¬Ç¦É}#Mz¨c¹Š‚âæ·~•EŒJâ?M×ýÖùðËÔz~8YFC…«É|ÔmÌÐÂoìõ¸cô¢Sêä2qYQA“×âãAñWÇ(¡!uD4Y"™˜t™ÛKƒUÕ4¸¥Ô ½[Hµ­h-åPXǪ@æX‡ÅŒ"b8G"ÀÀÖèKÝ?VÔ¢´‹VˆÙZEu&“{ÏŒWÒÚ¨–9­%Z•®ü²£âîSÀ+dÔuñ«ÿ£Æ¤Oèý_H¼•¤‹”‚ðSZoG©ÊåáŒtv- êï8ykIÑîlµØK½ö± qßÙÛ/Nâß÷g„rR…ê¨Ù—-Á©ã‡ä Î4ƒÖ/.tm6Î;M9mµƒtšjZßGëDínyÈ„€‚Œ@=rz|"É‘´Ã ­Þ™§ëþ[Š×JÔWO‹Hk¹–ap#«V·äUX p µa×*Ç–PËêŽì¢) “ZÖ š ¯/%„vZêf½ÙZHÃÆ€3?dø¶Ìs•ò7²jÊ_C·x¼Óå«5KåÓ–DoYš~ph JÿyÇ·\eððL»³E\ÚÊò}^ka ΋}sq3Cè¤S¨,ƒ­?h|Y…[X,D‰&RZjòÍÊ‚x V¸† K²s,ªÊ£z”ãŒ`@eÖë'k&’æwKN‹v,ÓPŽGáoÀƒI”_Ú WÇ.¥:Û1Å-ßÿ׎júpÑ´ûëYmý{nI6_M‹<¥]aâ7¢îM³Ëq,·}] @+4-7L·ò¬ÏazgHŠÞ[^Ç9’C,j ©V£š5@?”œ·,r–H¦R *NÒë6Ú|ú¤fMJm\ëVšEÜÞœvð´\í䢸X3Ñ•kE-–ŒÇ ŒcȨ’•äò&¯æ›å7Ú„–Ñ­½½í9ï.¥Wa 5…Z|Yg¢Cs»’å+Chºµíõºk/šdÉ#•„t“ÂÔ†¤qVnT*|vÊ£¨8Ù‰Òµ¼º-œ0ùR .M?Ë‘Zµ¾³õ˜”ÉÍɦҧÁ©kv¡“U6³}^kÉ G!F"ôƒIJœÒ—ˆ! ‚„—RB¶š…µì “†ºÓ âz’ÚýaDwUjJrý¡ñFÉðxw*·7ÚðÑ£±¸€ZI4¼í# ÍmǧCZ’P~%Þ™T1B2÷4ƒÄVkº ¾­m–¥§Haºõ¥[»I^Ú9ç…xÈ^§`Î+Å}ŠæV’¾ŽVÁmçõk[; ëhoµ›XeHÚÚèÍnÖ,G5"¢H˜u;Ö¹<ºXÇÔ:´˜’Sßкn¡k£]ê6ð5Ôצ×LÓÕÅ¿¡o×^™Tâ|2K(Âí¬C¯HÇ+Ëa¢K#Í©î¯"rukyA$ ÄÝ Éà”c{žXè&z—–¬á_BúiÒk&™£¿Ô  e˜TB~9â¬l~Ê·¶cÇQ-…5d;Rw¡iÚ}Þ¡¥ÁgèûgKžþÊ[HU`‚ãLb¬’(©‘½E·ÝYr™BcÖO#ºŒB®Òk4ÝyÆÂöÚûNý ¾6òÊLo=°Bœcf^\wã™Ù!Jù7žH(,íÚ5›[ëim‹´ú½ƒÏÆnZ2Ë <ÑÔ²óªË†ç“½Ktmí¬ÿLêZ™¸Ôôè A´×v°Ü #‰+Äú‹ð£'¨H‹ ’á´$ÚÆ«w­™47{úÅõ};F¼‰­ÖصÅ9ܤ›8`Ô Ÿ~Ùl1@C†[›æäñG›'µ»¶Ô®åÓuÄÓ£†â8ä³¼µe´t PKðQA‚RÝOÄž9(J2¨“ý¬âD6»z,tíNqmëß\Ú5ÂÙ2¼E˜ñ’d SÆPK/¿Ë)Ëõ›äÀ/ó5ƒi-q?– Øêñß­ŒèU„w*HjÉk ¯%R¤¼]ùr 1æŽQSý¡c“D¢-µ-fÊm~ÃM“ÕЯ$¼´Š ôÓ”òuÒ¦2>åƒòÜØìÎ`EŽjS_}@6›¢m®}{ëi‰OGê×Rsx}7f­÷M¶ÝrØc”¬’ŒBUrK49µ›’öôG¤Ï¤¶:Å´°›¯[T,`4‚ˆñý´e_’£ çÜÔNì­¥´Ñaqs¥M%핼7sjÚ”ª"ú«‰ã æñˆzæ#ǸlÅ)äí:çS¾¸†ïT¸mH¶·›_2NY5ì£!JCÆ”˜f~.Y,˜#ð¢çepò¶¼´ ï"ßêšæ£¬ÝÛ£ÛÝ]ÍNýTiMy~î"so|U!ýåmòà6åÜÛ*1ô¦š¬Ÿ O/*]ÚiŽöÁ˜ d–æFI$žERÅ£ˆ³rŸgÇ,Ç c¾ô˜aô™I$õ­ï-|é§ié§Giig—´vŒ}]Þ7ÖL ˆ‘PîOÄçök–F$T2ã2rTóUþŸu©Ê`‚ eÒtË(?B½¨µaHÃJ¬­ÁÞ6?µ¿ÇÉ„íÇ”"• {¦» ¼qßAg©ØVFsÅy¨-~Ù/‡\Äž(Æ#‹ŸF#wyÊìêWÖmůèNâ-ZãP·ŠzGpRRrT2ÉD¦æŽ¹™¢7*²Ù„,,Ò5ÍbÇIÐÖÚRnf²–O«ÚÁ ÞœwDÅ4«ZÈÃYUk!’ŠÃq—G>©æ…¶½óhZÌC¦ZkVµ1ÝÁ @©p!œ¨? ^JØ' FB?œt›y[I†×SÕN—©!²ŸP’8Í{!GžÎáKC21¡q£ìxmË|¯S’2…O˜–‰‚í_Gî5-bÆòÎöÖÖÞKX­¡´6÷‘‰Z3Ê'#²ÔV8ÀõgÆ”¬õ+O¬On]ìl´{1¬Ct¨/­šà%´¶pqÜ+–'‡nÃ'(PÛ½«€ÚI.ŒžH–ßU1®Ÿ‘á“Ve®îVV$³ÄÌʪìk™äø˜Àîg1°‹y©Ok¡ëSMu¤ê:œ‚[Á<“¬NÊ…%5"…x•ãü¹_Œ?ƒ˜mRcu&£}eªy“[‘ïõ¹o iúl%cY#‡Œun<8 `¿Faæ#&A·ycGr‰€^XùÆÞèY€—÷ÑÇ-ÌÄ‹¥Zš2£ûȤW^$n9uËèx|'tcDhZ}Œ—ZeÍ–ªÉª]]ʨ×L.\~s9Üÿvņœ·ëLÄ–C¸¡îïj„ø%ä»N²Õ=U´¿UƒGÕ§»¼°ŽIƒä¶ÖUËCÏâØÌÂO0äfáæžbÓ. ×/´[;hDEÚsÞ‘! z©*31¡Ÿ G$4†Ù¯~®‰#Z5e+AÈžC5º|ÄHßB¸óíOÿЇÏ,:Å­·˜ ¸]M’iL±E0†?NY¹©dz‡ UØñlóhFP&$<äd²Úñ,ü«ª_ùoEŽ4€ñ‚Ú63DÐ^H#Y£f¹ýøòÆxÎL›ž\Ùh«]  k«DYuNFÞÖK=FãІH0¡ôÕƒF¤}™)Øá‰õK]Öô;˜4˜c‹X³–h-­´«‡ÝÙ¥ å×2P–hÉ CÙ[3%‹\ŠnÂ7U—@Ô£k¡Äöš®¥46òÉ'&Ké!a"ŠÊè)!ëß5‘܉Kj5idKæ9ï­4mbٮ侰I5»Q*ByÅØ¯Æ8’®Ù•’2âŽÌˆ³²ž•¦[hÅ´6xõ <©Òåøcš[k…pDíP Ð…#+˘ä²vm6P:ò_2ÝZýa/ÃGÚuÔp‰f†Ä’ÇÔܹ/Ðåøg‰VÊ–0D×e/êú^Ÿuõk{vj‰á`£ÔëPÀTöÌ=NÔ#½± ”f§®ú·6Wº|‘ê6va­šö8¸ÈQ ©“‹R¬§Ã(†D-—„&rCu¦é7.ÐÒî0./–ÑÕDð)NŸ:еyH½òp J™])¼ž_Ö4ùâ›NÔ"pâÊïDI¢½­æ<¦t hT³–ˆËKŠ­‚êWZ½¦«>•o}ú2-ßê׆î#i3Y£…Œ;7>dýš¦Ýóop$E’‚Sû3ËÚn“ ¤z‚\Rè\é¶ï‰ºŽ¾£HxÔriSàb0Æ|™2[BVQZ³æÛÛ),$¹›Ë鉧%ìПªM<;´XV 9 @Ý~·6,qÆIú‰eéý6(u ÌwÐYÚ_ëº*Çuk’Šò”1)6ÃÔ_åý¡÷âbb P=I~›q>¥upú'–n¡†ß÷P[Z˜moTÊA’+’À¨JŸµÕ—3%(ߨ Ø*— ¤jFý#_®ùZúßÔ†Ù}[h"œ–NTøädzÄY~ÖcGñ+ÚJhóGÅ&¿u¦Èloã´Ò¯%´¹»Ñîà†K§I¬Ám娉OZ|<¿É92 5»t`"7Ô´ÍBâ[ûÓcÚ4e4‰.dk ‡²ENLxï¼™~ÏÙÇFè±6=Êz_•$†h!]FT{Ó ñéÒ\ýuu->ÖU2A°P„+óJÓìµ2ñ’rêäS6>¿¬ë—Z½êÍao¨.^DWxÇ`ê‡=ƒŒÇÁ pæ7þsAFhù0[ØjðÏ}ç‡K¦éP•†ÞQ|Æ!¾’€œBÕ½>!˜xÈÍŽ9¢zDõîl˜±²3TÔïmµ_­êSIy¤i1<–6¶°¤+ÈÇá' }ÿà³Wˆƨ(Û_éZ…åþ©=¬ºuÌvòÙÃÛ$š|nè9­ÊÀEJ“ñûW,„2Â@_ýM2Ç.;Iôh½7—RÒõa­Þ V­“ÛÉgj삆‰ÖeÛ·plsÈUM•ÄY<0ùw]Õ-5í2ê/¬éV¦ÊæÚ÷ÕT¸¼…9þì>ìc,õA˜rÇQ#›)B’6%ÔeÓ –æÇJ{ñ¡ÞéV±%ö™t¬Rò2õ¨^`Ê$Ý’x€ ¿— ¾MQo$²Š4Ðl=)õˆÙ`Ó;y˜[¯¦Õ&CJ–nvʲJ'=oâ¼\"Ë&ºÔ£ &“r#×4‡ë×wÒ;)Óç½Ú!ò&Uj„áñq9…ʸ‰Ù„ä IçÖõ‹+Í;¯/ÝYêº]èÒ裸zÃõkØ k%O÷¦XÛ÷ŠÝ>fÛ Ûy±íoH³Ó4ÛÖÑ,`¿Ö4Á=¾›ymt‚f†8ñš'$ôÎΣâáʘ0‰dÉÃ~–øHº%ZºÞºÃê‹5Ç™áÓn.,bk¨î£˜ÃVY½_³A]¿hL²^7<˜L‹Ù¡ß=­¤Ve´ŽO2²¤7rKp ,Ûìp‰ùB”tès0Œ¬ãØ5ÊföNu Hnnnníá}3‰o5‚e{k»‘Ua¶P¥T >Òæ<²J1—_ÆíðÌAÝŠX[Þ_ë7—6à |X ,̰؆äÌì?t£|HÌÓô±NIq2ï*ê¶zþ¯o%Ï×.-õk9çÓî5⛌ÐGë)G✹CÛØù´â1âþ!ÜÒhK Ñmu[˜¼¯¢$º–§y9µµÕàiRÞ+?ÜË1äU–ƒíW1£"OØ„­eç“m´íjù­åŽÎÿFµ–ÚÇBFŠö#g"˜âåÄ–-JúÀã™2Õ™cú¶ö:±¶ó˜¢ùGÒçuke`ÚMqHF*„…`’o’œÁ1æå’´ÃÌ ge5þo½åž˜‘ÙÞy†&EXÌñ‰P”B6 •ކ¼ví˜ÇHo@ÆbŠRú¿ž¼·®G§G/×ô£gÅݾ§¤\°…æµJŽ ž¿¾ù—‚â$XéüÙ6à”L¸O$§\µò°ÔYÕíµ®¡k.Ÿ6’“ºËi‹ê¾£¤E.ÃââÙ,“"@·ø·j2ƒ.rMu}>Ád6z¦‰odÖ–ö÷¨»IÌ1«DÂ1¸F O1|iqqƒvàaÉDŠbúÂÜÌd¼7ZV«›õy®DL±ÜGf¿/e+P»mÇ2Á®`ƒö4å$ )ߘµkÿ*ǧêZŠÇZó ‰vÂ% m fžœÏ΢DÇÚå”`Ë"rrÚÂ$J6W]h–þgVÔm÷›ÅÓ%åê8“Nd2ÅpPKp$¡ µdFÀ'“8LIç–ÆO.Ú V¢ßi÷ÿ ‡uÌsŒ™Y<™ø¤Hõ=}Ûô…¤w†§-óÜ`i®#X%UhL(¦ˆÃ lÏq Ú®¥»ÿуAow"]èÖt·:7­rlàãsë[:Ñ_­òbÝ3Íç9BWÎÞ|SC©½ÍÖYÍ%xÖÊuI®½5VXdZFAh~ü!Ân‡VðKü·qvmt©í%´¹8Ó®¯AiôàÒðoIˆe`§¨ r9nAÃæäE„zÜš´1JºµÒjYßÝÜ"ÛN¦'P‚u]Éu¯‡lŽPdGFß`•è¾a–]sÎvvq³¼Çêá&^15òÕ%ÐsF@Fëþ¶[©Ã,Xàdvëîgàв©•æ-"úRÁ¥6ÉX®¤‘求(8Ì ™T°U$7s“ñqå–½$ÛL°°×&Ž÷™N¨¬o5’7-tn ‘— 5UVƒáÌ]FXÄpžm¼TƵ™u]'^—I¹±‚ÂÒÂb/ä^F&[‘êzŠÑê e?²ù•Dãâ½ÙŠdXÚGty§×´¡W^ËÅäôR¾”ª¢†´ãË4óÉ&‰J¹!¯ï£±°ÓµK‰"½ÔVÿJ–A͵ÉáP‚ƒ÷mN™Ê{“Òèõí.ÖúM"î‹Ã<1]-¬n”‘³ø›ìÆÃˆ!ÅÜØcJzÖ‡}µÌ^–®/>­úFÞc+i£4ÁfàxôÜf^ ‘&¤Æ“¸dÔïíotÛ»íBXl¤6º}à·´¤ìá3ËRH<ŽÌ0äÉÂA“‰ó>™}æK+F¹Ð®7†ám5+˜’ê7B÷;)©øh½{f&žq„Œ‰Üµò+£fòÔrj²*éÖšm¹y-mU®înšXÊz**V"Šk$vé\²yc’\=z$Rs%×™áÒ[W˜ùcÉS¤·†+y¸^4޼b '>5PÛuËLoÔYƒMé^aòÅÓMk¡Ü^è÷ºhqihòúðÜÖ¯pŹ(Ôj1ãÛ#_@¢w, $%pÉ Öµ£7¢!Òn-™&·ŽhCÞ,…VÀØWæWí Èá<;|’FÉÕûI>‡:Çh¯=¬Ò@¨¦ŸY‚IªFIZ£0-Çq˜4鿃ˆn€µ×¾¹?Ôõ Q›¤úe.-Ý`ŠFq$Êâ#ûÖrMºt̲Þ¤F)5ÝÓΓêZ•ËZÿ‰¯£Aw"1‚6¶£,KÈ´lS@zûeòˆtc3k<¿w7™5½_X¾¾šÛD·–Ò4¸R;?RåÍ>¼ÆŸb$Û­[á9›Å@ õ$ÈF5ÕSR]#NÔ®îµèÏ­ò¾Ôl‹$´´sPIòeÿUÃ7pŽ­1óO…žŸÍ›¬¬þ¨Ä!‚ ‹z¼B&(á–Z8V ðqõã˜F<7 åΘî7v¥é1h‹o>³sw£Å©«yv^<¤´•‰_ƒ—îø™:~Ñ\ŽYÈ‘³|*|Ð7WÆs®Ëåˆ~»u¬ÚÁ¡Ú€Mv’9†ú)œTŠ«(ÌŒsÄcê4Gà3ãˆÙ,‚ÛKIÂÒié{5¾¡SÏmtc–æ$ŒzÊ¥ÏîE¨4æ¸v2¶M¡XA ¤²Ý?Öíî/¢ Å$·”V:0ø¸ý†oą̊å&G›–%-œiÏpÝé:”Öqi0éϬZ\\0Šæ ËTq: EÍxöû9®ñŽK½ÍºÞ.)¢ õݾªÙj’¹¹äµ™íT-´¶¦(çŠQÇ¡`ôä´9®ÏŽ0˜ ÛnHQ-7še½ÜÚ-ý„öVšnê[µ½n#k[ß%s´ŸïÐöÌ® ’€Žj,¤¾YÒ¤{›('šµ–þÑÙ{ë+¶ã-¯¨ôj¨ªÇžù°œãê³ì¯gy-—”nü©aŸXÑ®¦‹JpY&ÓåÈ-esCEäx0Ìór ¬9'¢†“S¼´ž =r9–Îtµ»݇"5‡àG§u,x?ù@d† ®-&¸)¯˜SRó Ö:n¼¶Í,Š÷&kzÈÄBTÛJâ2h¼Hû9D&0Yïh”ÍÒ–©æXã¼¾õ.äšú7hâ†VýÍ­½×ô„€*x³(&¿³™8ñœ A³‚EÿÒƒÍåÍSGó Ûécê÷ד¬@!?éÞ8êæc±‰‘«OÛS¶y¼ ˜$ó:FíÜ^~_Úùf ïg³X¯/'­Ëw6Ò-¢´±P‚®7 Ë¡ ÒÉÄFé”»Ëz«]O}­Øjwz…•¼ñj±HdEº°FçHB)5wuôëÝNdfÇ~žD¦q­Ó4êZ]†˜³ê6Ïka«Kmõ©å_Û‰>e$ËÒ}Ï.ù­Ña”ò Òã¡e–]]âÖìÝoµ“fIQð‰u r"¹ž@(U¸€Í]™s&r3¸däÀÊLžÕ›Ì:¾¿§ùŠâ#k>¤Q_E¢õ/¬­I “!â!b ßíf>XŒDòa{%IÆ‘dút–° ^û×½‚[Ë[Çg<ÑÙ¹oV‚¿êä2eõÚ'|Õä“R¹‡Bº·‚Úã^Ó‚Ex—RNâ̰z2’IB%cýÛ|9D§Ýß FY‰=ô—^_Ö}k/ôX®SëW>‚™Òä·î‚‚HàK'M×âv1¿&pÝ>ŠÚ UÞQ*ÚXE"˜"eôÒÝÔ!9ÉXP©ëû'5Âs‰÷²º)5£hzµ½Í…æ£õH®KZÃxbçõc3. Ì%Œßg3œH­Ù‹*¯¤kvöVMb·PYÈ“ÙßA2O’Æ1NC« ÈÖËìØ’BC=ž¼uù_Íڼ˥ùL6· GK[ãQ,b¨ÉâçüªŒÙŒÑž>7 øöM¼±¨I%Ê,6ߤ-ü¸æÖÞi¦n?\––)A ¥ñ§Ù`§0sã¨ÙJ8m¹uP/…®“yÃP6Hú¬²ª]r”’ÒVy-@‘Ú\§#õÈräÆ0H£o}4š6#E®Ã$ÛEªØÇöñ](, ¢°0îÉìãðÌþF_ae’ CKå]&ÒXIÞÖ0æêùÑnín«wB?¼^_ÍãÔÈFTÊb[#.ô_-Moê'ý%€[ê7jâ…HÚ+Ep¢0Mé³ <à+¡aÂP·^j¼æ•§XëÉÁ¬5{i-ÞÝU<½U!A.Á˜{«S'† g·óXÚ’[i6Ú½­Ö­ Å¥¤Kpšp4+p#‰¤š)$SíS!)DÓ8ÅKÌ×7Ú‘ž=ÖQù[;[k:»J"øI0’…)l -µ‹Ö³—Nú…µµœÚ\‘iö¦9­‘å·aU,›´›·Æös0 /tž.w}}£.«®‹¢+<&á–¹½‘=HmÒ݈ ÀŸ‰›âÊø"Hæ~æ˜é·~g}>ÎÇO¸x!¹ŠGKD{ª¸ž2PJ|H{-sKž"ìßìa)ù,ÖmSB³ ~m-’UY^õ©Úæã„ñ´Q!àL2(Û~æ^ “"™«_æ¨& m˜,´›ˆ)bÓ]âo­TÍ5Ãñm½8öjf>žw#)'N.h»íBß[†}>+››‹Ë8ìu8µ{T§Öa¹^&/«ufIßíqçË.Œ8w=íyFû1ý¿3PO‡¢K<ú-5¬6±Iõi#'Œ‘}h…%×íñ®ùš#¹4Ø!µ¢ü×£A éòAªhÒjZž“ÅÚÌJ$+q9,â_GoK~*‹ö¨ÙŠ\RØìãѽÐ7“Þ(Öuk[k8Irê-¥Ó£…‚úÄ_ sWøx·VÌÞ%é,²l6FÝJú¦‹gç íìÝé7—Ð1f‘}zµ¼ÄíðÔÙ‡qLÆ&ï›LdbòÜߦ4¹îµ½:ªÞJml)‹êKÊ9$.Qd“†ÜTÓŽQœDgp§©yÇ^’Å4¯!Ú}NKK¸mµ+›Š$—“2t¬,œYØ×Žeãìèg–V<»ÙF¬«Mmo î¯"écQÓ¢öºÄJ¾Ý´Ç›Ä‰·ÂŠÛ·Úïšù˜# n>ÆW Lz——¯ ƒô­¬rÚ–”É$rH¿W¹‚*-K…QÈ2ÜXŒ›*¿¥.ä¯dM3RŠS¨ÅbÁ½ií¤SJj•¥;äáôž%„øee-Ô Åýž­¡^z·:e¤0°·$†¹¹äK›y+NQ†Ùkñ qc Û#˜ÎLƒIãµõ丵—IžÓ¯í¡‰%ô ZÆÒF³Eµ6]Ù¾ë'–QÜTx›§:ö25¦‡5Þ—Ã+Y6̸ñB¥=ÇÚÓ)ËmÓ/WÐŽ¡wåxì µÓe1Û*Îm­o-x0 <¿T”nf´Ì]F."rK¯FÞ{”¡¼½m7§oæ›;wÔ,dè笶©œ `´—Ò--ÄHà°´2a¨& DlÿñKÄ$)0±}a"Ô¼ß À·ÉÄGNÓ¡úÌZÌr«#Ø+ɹd•y;‹†ßiq!)próý,ñ€Æ´*ãÉþZŽîòx²Ãý¬ðŽâ ±ÂhÕÖ¤}^¢2kðÖ¹VIø¹hoâÈÜÓ½;EºÑ4ÿ¯éwSi÷wú}͵µ·®·Sß>@DHP±oV"ExüòY8§>ȉ_4ŸBµ] \’ÂÿÑñë)dÓEƢΠ‰vz\ G(5Váe;dó‘ <¾ÖÛè Mµ­NO®éP‹‚òI4”ONyQ­œ*ú¿ ¯ѹPƒÓ1ŒqÄØ!­¨8ò…™ré/•Ípi¯¥ùBêþK½KA²µÄ7¶Ww[ºÊ§–ÿe¶!”ñð^íÖ@ÿÓ‰ysR™õ&¹ÖæúßÔžvÓ'ar „RIew +ñ!¥GLóYÃqñ/=ŻխÒ_*&¿ua=ΨTFÏ*±<ê}Y$=AzƒZls/ § œ ìØ.™ˆ òÏ”45üW:Ćy,ÕL"(ETÉóh‘(¿ÍœÎiv¶°LŽèíÝu¨¯õí\Ùj6f£õ•n %¬¶ÒUFf Vn$€k¦bå”°f€D¢AÙ)´·ó%î¿?˜î^kk{y¾°V4ŽÝ ²¥ºCÕ‰ŒÐ½>#¶eÏ4>ƒõ<ö,B×tm~{}fæ;‹WÔ¦TŽÖDôýFV¾—hªyV•%¾,ÂÕ€7H˜˜îƒê\„ƒËò]j³¤šŸÖí¯cX.màpÆ•%YÄ ÊÕpØm‡&ÉÌpÐ 4·cµ²kMæñ “™AÜÆ£Ñ²`H²t¡´µÉâ†) ˜ô÷µÀXÝ=Ö5Ét¶ŒúÉ1¼6šƒÃ*Å1kf cZì 1ç?kìæƒ`rèÙt›Íæ;Iâ¼³K†+ 2GéÆcŠ/„—NHê>ŒÅ0<[š2lPvrZhz¾½a¬Ìßf‰áAÎçNjHÉ ¥O÷n8òþ^Ù(DÄp·BLfñ¯lä¹Ô<» åÅ·­E¹¶»[öâáv€­TЍø¶jævB@ / ›Uòþ£¤*k^ò;"’"Ýiñ“ ‡+Pê8ÆFç…r¬úr%é^¹-­%…-®šèùdÏy}wŸûµ™šE )œ ’ªkF¦ÙaÊc÷,¸„y¦pè6‹æ a^ïM¾†[šAi4ÒÃEs0`ÔêAæ´ ËéªYg( –gªg¡hzââMmµ}/Ì-¾Ÿcd`šÞB}T#„ƒ9«eZ½DÌ@pÖOBé:Þ±¡=¶™£J'‚kÛâ×[ËnÔ-)Þ©û&»å91FPâ'~à‘ŒU«\é–â+ÝjÚöÉ4ycú«ÝÈ9±ì}EU‹?ÄC?g HŠc=—ëæM:çH¿Óä—W¸ÒÊÝ5ò°YœJIV•)O‡ŠŠòë–â Ø’¸±ÞÚǡˤ\>×R«krOuõˆ„QÜ%P‰~ñDµýÐi–F\b¾ ƹ tä‚÷LÔ5tž}SËÚ`YᶈîLÜ™–) ¤Ö þ΀Œ”vóhõR‡˜´é/Ä·Úœ2]éW3ÀÌöÓú ¦ÏFŒZúTÝeªIïË20˜ÀtâošIjÃGÓµ»öÓoµKm2ÇLaÖ^( Äe¹!BC±d4`r 䡯ç“*O4ëm95çÓa°Ò-”~õe‚’]\ìjÄ:Ô7zæ4å<‚–É;$Qi÷¶Zf·ª\ÉõÍ&[wÒÏê[\ÈâUeáR*X#¨ý¬¾ª»(Ž"­æTš//Ý}`\kðE(Ó.¦Qp.n"„È¢ä0Z¢ÉÔñø†dBDÈŽYÀÍ8òÇ—¯ãд a¿yØ#\ÞG"ºÛ­är0’!QH¥$§µ3Sž3‘Û“fNE;Ò4a iºœË£ê_%„a8ä‘!dˆ-**xqøºƒš¨å”äkâÓŒmEmå­ÞŸ6•­Mn½'¬Á/$$$oÝŽž™4^|~²Xç"Ê {P²³7zÍŽ‘tm$¸º‡ëW–à#C;ÉŕڑÊ0¢¹±ÅÅBú8£ªCæ{¤kÙõm9nï¬ìâšú(šêHk„‰‘”YÝ\–í.l4Ø„¢A¦ßÕ'2Í¢è÷÷÷òqªi°Ç öƒÑýï¨×6ì¬ÄÔ˜ÎôÌL1‰•U\a¹DBo/tû»]Zêàj'O´[o*Ø@D“Ëo'ªÅ¥z)ð«ÈßlžIËÒ=?ÎdFë¼ç«ùO’Kw¸»²¼¸E¾»ÒT¤ÑLVŸW+ÔĔs펖 ‚JéU푳òÕÙ¶Ïeå{´²M$üwsßÜ>ÄÊ)XBñSídxqÊ{Ð2Þü˜:èjž[òÀ³´x¬5mHÅõýD¹úÉyE`ýöȨ¼–E¦û 8óBY+¤[#e;óMþ›¬ÙiZ§u¨h:ÌR=Å…¾Ÿj·Í¥Ý8‚ÞòP…LJ>!ijøË’0‘˜ñud1ѵ ËÏѱXùzÏU°Ôo ·úÏé{wf34La-éÓ“¨#Z­2¹b–ò¦1»ÝosaªZZÉc¨ó-ì_P± Lò-»H³:©$*-(ÀíOµ‘¤$Aè×ÃrLn.,5m òëK¶x4K[›«f·eõË´0¡&ÿ²ì̾Ù#ïOéf”4}Fæ×SŠçP´Õ¥¸µµ†ËÐôË„cÒ<ìy—d‘TR¹ ±ôð‘i2Nï´·¼ó>´±^®§å}*Ò饸@ä·T[G3ý£QÆW>Ùċޘörúæ«¡ho¤ ³\hVNŽc‰`bÏaQ"š ¾dä„O«‹}Ͻ4!º)õ-7N–vkY—@¸¼šÃQ™Óý&íæŒÇu$|ªÀÕª§¡¥2©Äí.mÆ\BÔõ{]Hk «5¾žÛAžÖo*êîÁd¸†t)s[ͼ† +Î1³m™xŒ$v¹}H¡²«êz$‚Ï@‚âæ+­)µ6Þ8®$yIë´…ZÈÁIø®\‡’äaŽÓOÔ-¬t¡¥rëqa¸áRH½GVu?Ù©¿LÂÔz¬ô²Ym¤šæ‘{ì:q¼‚Ë«Ã#C<¨¬d îÆ3QCצ`œ¾¡\ƒ‘ nÆ.-¬,/eòÞ«gqo%å±Ó|»2 ÂYŒòqVeZòf­<3ndrÃÄç[–Xá{”N¸nmluÙµm:ÊU·xnQí£0P㉉­h>&íË)ÓLNc…4¥­ûɧiR47÷î’é–ñBe—Ó¹•„ °§N?Þ é›Ip“/& lÓ%·ó4CÍwZ|7?è6ëkõ¿TCy+0»A$drªÆ2sÁ–( ¬ç.ºåDóæ…å'TòùÓ’­î/RM[S^¥îš²¼2ð"ܪæ²6-³†<)f¯e刵;‹VK‹­>i!I'H(Ö—qÇÚ1rU ߀S™xŒ§Šû˜žJÖš}¶qs=ìii¨CwÆŸê^Ž2Û#Ž|GAB9Pæ¿13‘I;çkz…Ž¡o¤_»Ý+ b¬Ç~ ¶h+ANF¯×lÆÅ G›pÆz¤ò6{«Øëš‡—šÿÒc:uĆ(â†8yÁ,~©Fý¢>Ög ˆ12ݪq16>`Ö|Ë©YØÚ˧Åm%¸±1­.‚9  ðB(ye˜Ì|3ÅÍõ šŽ»æ}JMUõÛ{[†³žÒÆÆ;€n¦å*!˜æµuåûYqB“d%{”Á.ü›ä‹«DÖ4éõ9þ±,×6ör™§²C!Œ@Õø¼[Å›S´Mfئ™ªù¥.!Š ï®.ïï$žßKX­¦µËÄ«ÕƺŒÍɃ¾aL†ÆïWHmôÏÐÖòjÓC5ÊÊü¢¶¶õ¦ýÜ’&ãË‹Çú¹®–8‘vk¹Æ®v­¯ê]K¦\Ø[.­úþJ,Æ2÷ÀÑA"’‰;“Ó BG~mÈ"( ôóe§ÚÍÔÍÕ¬MpÚÈ&ºX.&Yp~–217í&ddÙ”gÞ•Ì—Ñ_ë’LóHóÛj+qu ­Òñ•ãZ@62Uoæùe¼q$&\E0ÐÆ—¬˜¼¹¯¬—µìSï=f ;Ç+Hm#âTáFZtÈj1ŸªSyªeš?èË=—é+K›$É’­¬öÒÆ¼À +%]·ß5²‡…¿{ t£\ò¬#N¸×Üß™¿Fë³^IêH# Ȧ¡YPtË1jLMD Ou}6/R×T´×`"æúñ.mלqúÊñ44aÄ- –e—¤pµ©°|¿yæ[Ù5N:­ä¶ÒÚÜKbê¨(‚ÝŠâ V«Üà¹Â6S)úüz„"Äzvº‡F¶kW[w½h}^Rf_ƒxæÉ‰ lgPŸM…5]JÞæþ C[·ŽÞæ[ÒË%¶ŸÃÖH_öšG•ßgFwPè>öG'DËTÖ4ô²¿ºÒ¬o¤¾¿h¬g²Š'/mõj3ŒŒXC-гþ®cN®€DMªÜù’ínt˜o!k="i~½ç fj°`-(42*î¾ÖW‹KÆF÷åú[ø‚ó¶¯ç™|Åmi-úé.4‹ #Y UeJ4ÒPUJîµý¬³G‡q‘-¼×{(¿ÖtÛ‹~xaM^ïQº´ÒÂ#šÊ¯·t©¥šaÜ‚0&\ Ðk”¬ ï¯ãòÔWÞ¥ösm¢,n´›[sn¯î ´²°b¡GëÌث6z¨4„±ódžg7vftÛË‹8ì´ã!Eå§XdEåIÈ–q¿ó †hˆHH¿‰Fê¶–Íåé4‹ø¥Ö,t÷c$iÈGxý $yb¢IµÝòÙdŒî¹R‰)RÚÚêvúιkz//ôæ’ßF¸²Ž`št+A=ÊÔòr¨~Aâ[-†Oˆ×6CÒ›èú……µ¶›¡¬-w¡XiË£~á„P-ßï°$VY+ÌŽÿg15x‰wFù4×2›ØjãÊz>«eª›»d²tq£¬Fk{ r>´Å¸,»¬¿UáF÷,¤ŠóÌö–ú¡ªywMŽÉ4ϪY\­ÌÏw¨ÇêUä’I$øYHqJ ò\ÊÉ€ÇÌ99F·¯µ¾©únFÒü¯bš†­Ëok$¬’۸ܖ'¸»æT§c„ þžÒ°5Ñõ9.æÔ,ížæÓôfœ'¹¿Ô§–þ¤Ú¹¾ çáâ§£.8 -q%{ùžÇQòì ¯_¸›¯_ê×ñAõ7¡øABAQ"€ žKÏp~,dž C)áCl=2Pòú]iº.³¦ÛêsþŒD‡S·Kê,2Ûñâeœ7…³…ø%^¿3')ñ+¿É9wM¦ÕdX´M>îþêçô”V6Vzìá`˜³·­hJ~òˆÚO´¿²r ÊF.1ÅGróÝÔúþ…qgåÛbÚÔÜïsæu-,ÄŠñÉÍ·”Ê”þï—¾OÉêåMàD’÷S°”v7ÑMªµ…ÌgVõä’'–êXÖ8ÕBŸ‰Ë88×1ÈrA…”ô}&êÑ|ÈÚ½ÞuZYÃûË©¬¡h¨ËE‹ «t\†¢rˆkÝ“ÚùB¦º/nô;m^Îõô»ÓpâÕNqýaKl…vj>Ë æ9åà grb¶…þ­.™o©ÌYºÔ ú½ÌTŠX'ÀMVO‰zó,b€•œ‰‘-‚>ÇÍ6âÆëPÒ´é´Ý^ßU £O/;Y¯ÇÅao1º=í£zW°'èË—ã'ÕhOï«!å¿òæÃ±eÁÁDus,pRV—CK˜"µ¹‘ô‹K)® °º+¹Þ8ËÉÊh¼7Ò¾ã! GnvÐ#aw©Oc§èžgÕµ ¸nžÆ1e¦éñE誫˜ÙC¶ÊÑÇAAöƒrËñÀJ#ý7TÐ }Ö³•åûÍWBÓ¤µ¶‚i-ìÞâ_†{‰Â3Uh ËŠž¹8âŽIHûÛŒ¶)힯ª_ÛÅ®]Ú½å¥Þ»§[J^ÆâãOBa»@Û#1bøÍrÉSá‰Ù®RáØrÿÕ^O÷ÐkVÂßT¹µ1Ùk‘DUV8ÞFe'Ö«+QMú.yĦFÜ<åYµ ]*æÖîí&gKEÜShV%’5ûlcj2¢ž\¶]šx¥½–ÙÒ*i54k¾_Ôä–ÒæçE·úΧ>¤õ vò\ñýµ¢±§P2­1Ž›SD9 ­/õ·´¼·ÕÖ/0ηFiŠ­ùG*ÌÓÆé2£¬™Ž0n;[ci~¹æ_-kže¶òö‹c%Íä:”º‰½–ExäŠý¤ASˆ‰À!¿—–d~^x±“½)ˆˆ¾¬ŠÒöËQó èzºO­ê÷²[ß^Ú1+kiÂDÌ¢>Kð¹û;f²|F>%ì9öˆîm$Ô4ÍÒÃZŽÜ=â*ˆF¦ÕŠªk‡MÙ•”Ô‘¹Ëñå$‡&$S-µÒmeµÓ%ÔZ9.¯´ÙŒÖÀÉÎHÐl¨æŒOĬg5¹¥/×'Çt+_O,)¨|r\4qÛº½hªÑ9µ&P8œ¢"çM¢þUÕoìôë%‡Lhd} \GÉOîÈg˜‰P⹨ޘñQMâ󶆷’ímÙÐYJ±ú…’î3û¹ÒH˜”,‡¦ôÉ’xm¸ÌR̶YŠÿQ}_X]RKK;(›,kÔJ((AìÞøâ–AÊ69±{MbÊöïFÔf±†(ý-Bã\¸ªé—VŒPÀÑÊ>ÈhÿÙfÊñåg•u)TšEµÞ©$š¾«j-Y¥¶H£õcš -ÄUB9‰FdFqŒyøÈUÓQŠ[½=WTÒ!acèGyª}dÛ\ÜË!" ¨dQÕ$»ŒÇÃ’Ž9•dZeî¡w§[Gyz.t±i&ªšÓÇ ÄÖwa½5XëFš+Û|×dˆýÉv¯æ-˨¤ÞmÑì ¶^?\›Œ«{5Êq戥y+Q—öŽ &<ƒáçÝѳˆ”Eä‘ÝYÜh^P·[kfá§$ÓI' ¸˜±¨K*ÉV|"¸ª–R¦]k}:æöÆÝâ´›LW’ËL»¸ºeŠé@p× º¢×‰uòÚ8> ã›fCl¶Ðy¢òóD´²}…܆îÆ!=Ù–¢…ÚY€CêjæBRøHmh 2Én"Õ5Û//@5i½]<Û´¥îm ôhÞ¬ÕxÇO‹å•äÍ(Ð4ÎÍn„´{M@ÛÝÝß\èÚDÐýWQ0×ëWWÚSˆ¦U+OL8nçŠfÈG•õn…K jVÞy±“V±Ëz}¥´–1éww*–× !i&»j5éVøs_ž3Ã.ê½Ú%BÁ¢é]•Õõ­ÛO{nËi§ýKŒö¶íp¼`‰ ;qFc$¾"2Ns8ëuþTòç•-tøâIµ4­Bk«)odD7ÿVÔ¤(A`Šã—3ú±ÔåÍ)ÐÝ2IV½e§ß[ÝÜiÚ}Ü—$m$·ózH̲!!–ACýž\¾ÉËqFFBÓ$”t(ü°oç²ÑU¦–E6×”Ùê{\Oõ¶&‘–5Z.õÿ[2µ$7—^M³ ƒJ¹Ó,£Öüï©[Ó-´ë]*á9‹˜§ˆÄ® î#â¿ý–³Ž0iù¥‡š Ñí§}vÚçPš{5µž5*ñÍm YO$éð²>›·Ûí™#NÁ¯‡ÔƬKû‘æGÏå„ö°ÅÅd0Èç…¹±J$N ]úeÔ!é!e@«¥¦Ÿ¤jº„’XßéíÅ©6²JÇms2+ óbꬥqÍdÑe¿%·:–¥§ùn :þkÏRÅŽ¥¨Ì­ðOj qlz:ÈJ¹%2¬P†Itî y&šÑ]Öã†æõ$“UQ •”¥RÀAvŠᙩVªŠà s€"¾)–20êÒiÚ½À{ØàM,DUJ¬¯qtWÑE•˜Ñ£t3'ìå”ló-I…ì²éZcê!aºÓoä–R„KK¯ÙxÝ ¿GÔéÈ98z†ØÊö@h֚Ϋ¤Á)–è^k7Co}mp.ÃF$wФñ ”R?’´Ì¹ð‰ð‘ÉAá4ŒÓ|Ûæ­R÷DòÆ™GË:\¡/aÒQ~´ðòå2]\TQ—j…ZqãŽ3)ìK"(.Q×ΩæÒÎÏS½ŠHF¿g4DÛóèˆñ‚¼DÃö—Ç(”*"CaѤ•x<Í%äú¦¼GÕ¬ícM.Ú;{E‰!•Ø*´aÀf)ö[o³ñerÆvëm± 伸´Ò½]OQõ.55šÛT[d{Èž8]JÃ:/Fâ;d£fB1ÄÊ—yK@·ý¨ ÛÍ 8ï.î4½Dª£_D¶àͤIhêà9¯ìšo™Œ€Ì^ôÏŒrYƒ«]yH¿¹¸Xo¤ŒÄm¥hâF¼¶'Ò’(Ž`©*Ï^¼[1sÞì=%¬L“䃼·±½²K=:iäÔu½Ytû OD«[Ç bi¾9M#_„WáË„@Ò!‡×n’Ö-CRmóE3:Éhþ³e«4rzf[U]‡¦Àr¹`ÆHÈ~¦PnS¹¬EΉy{q§y¥ã‹G¸Ôí—ëv÷É/·ú¤tUŒ(ª»}µÃ—MÇ+ÃÍ¢ŒŽÈRm^×TÕ4ý:ê u,]zÖþ•²Ì=Xý#@ÈGï„•¦Wà º,ÉmÞƒªXé’ybÔY*þéÓOº¬®l®¡æ¯`ü¯ªÙ\ÜEs°Û$•ãºñõdŒƒûʲË8Íß&@ŠL¾¿ 6öv÷o¯_NLW°*ˆã³Š]¤™êHP>NÝs]àÀ“#Ѥ@„mÿ–n~½cq©}\iÈd:]‹¨ž;Jâ ¾Ô+é§ïŸ…Šä4Úº„€OØåGÖUôå¶×¯mô†kkëí.â %¸Ô+e,ÜMÇ‹&ì•äµÉG¡[4®ãÌVóÜê6±ÚÇg¦¥Ü¦Åa2¢2´uÎÊÕ>Œ³ìc A,¹“L¿6šsϨhW‚;í'Ì0iP3Žqz-@BªÜ7ÌÉGÂ&}G0ÂŒNè4¶Ômc½ò6·©E®ÛjÒêVb‹kˆØ? ¹S‰¢²¶YÄ'SÇé-¦@òDy>å.5}wUТ³Š>hm†š$¬6ú[ÅÍç jI$wø±×B£.g¯› DÿրϮhМžtPµh¾­­Zªß%¹··+p=;‹IË«²1¨d ÃáÛ·†S ã;ƒDh·¶²¬º‡—íä·Xš×TÕ,!eOa 8†Ý$Œq2O"Çâ gxÈŒ·aäÂèÐIn´ýÿG¶¾Š[ˆÒIæ¶Ô ÌD±ZJZud‰O"M8»aÁ9x†%²3Ýg“lü³u­iï.5Óê¶wSÂLb¬*"ùPØW/×äËáöŠÈ™S Böw÷—4¹o0iÖ—Ü^,P«‰#ŠiÙO-‰…ÿW5Ó&(ÎF‡F£²ƒ]Awiu¢\,÷öΦY'Žß„aÉ A$dQy֌œ¿qã<Émä­¼ÓÀ ¾¥m¼–ÙÀv·ŽZ,Pò¨7Ê'MªïMÑõqutÒÛEq#B,fn.ãJqUò© ¾9 eÄ n€•ùFí_ÓÌ<¦V;kéá´s*Õ}NŸ õðë#Š,$^¯©iúM¸{Ø.ÊÊ¿¦­.h¢‘IH£ ¡Þ¤V™äGŸqQHÍCI’H¬5ìtŸ0E#5×£¨BÉ|¶l¿ ‘Ȥ7~.ü”æf›9ÆLem±*ÖÐGæ}Vú2i¶Z多{šœñ-ÅÒ--¥h£ÚH‰¤n}0ßµÄÌÓɉ([A¸Öìí•n̺Z4r[Ø4QÅ×V$¿ƒâôˆûQ¨ä>Ö6¢¦OÚׯJ"k3¬è·Ú—mÞ íah¼¿nB¢çÂêà*Ï’ù ŒD¹îž"WëÖ‡i&Š·ö2^]Úß7Ö.­fxIJ U%Tq%r?k›‹Œ›mè—hçNM2m ßC–X ¾®š"›ëRêN8£YJ4o·Tnƒje¹ìÌ}ìcw±fP¶¡õCE¶"çZ†ÅcÔ¥¢I}õÄ¡•d’„ro´Fٮ͖YâääÔƒa×4VËSY4ÿQmî|¾ë$3µÃ¿p‡qÅMRtès*ÕoßäÃ$¢›Õõ „Õ¦Ó.–DÓfž!¤"ñWiVµaJYUÌR+tožgñð;ÚÁ§ u[{]ñŸK²ÔäžîòÊQ鈯YH' ɽ0K?\†\œmË É-Õtéî|¹/×5d{«ë‹­¥¹ ëÈæ¡¶¡P6Û)ñÍñ¯£d«DòèZ=¤žr‚ÞKçIl-th&Y¤‚(y7o´Ì®0åÅÅ?BL0—ÞiUï—gº‡FF´ò¬r«]^]§©õôŠ´x«Jª}Ù‘ ²Œ¸Iܶ ¼BŠe©YéZ®æù%’}7˶vÒYiéŒ7ÖB±R¤ÖNC‘'Ža‘>8Æè“ͨÝÒù§åý®“z–ö–Ör\At‘[ú—çᨼ•…¸;ßö¿›3?,!˜ÈsïlD§Z=Ìöš&—¢_ÎÚæxôÛRR3s#ÄT•# DâÌ1”Êgn"z®ó6–èšþ‹ Ëu}¤Y~ŽÑuy4øt{–&B¢ãvÝ>7fS¹ús'>úÿ…™‰;#|ǨêçÍþYÐ5ôM1¬—ž£®Ç8‡ô¥ó0H]ÐRFF;aÒÆÇ)sè#üÚêÙá»Y¾3]ZÙ[ñòôE%»Ö®õ ò\%å­a—ÐP8Žqñ’£­rì1Œ|ËTi´ý.Ú×ËÞXâ»ý —M®#¹ºKç*ª&}øBG/ö^ÌÇçÉ&ëeÑy‰tmfïK†ðê6Ù­£ÙÇ õ¤Õ-Öu R(P|.L„£âCaê)ÚB‘ú­ÌZ ÅœúɵԴ[ktÕ4«}R`$h9ðˆ ¯%fŒÔü%s9ÄŽe¤X4l43æ]Q5]ý¶R<–6¬—ss Û“NQhè¯Ã\>40Š—2Î9+n¬/Ìšî§ä¯'ZØL×[Ég–¥ÄPÁi?7r5C˧ZfÇž~¢äCšDZy«R‹Wòÿ™âŠØÈÐKw4w¤Ë!³¸aj·pPü%µ³™qBJb -0Ó4wCô4îa¸‘eškë™9»=KÄ `9+4_~i³˜e³ÉÔÁ²½gWÓüÉ¢^} L­‘ú±H\É"¦I¡âÀ !™OV\×é¥,Y,ÄwCùoFxìÕ|éy¯u¦Öð²ÈµJGŠàqÆJ-{ËϪ‘Å£¨Û“»´Ót­OS›W°>iŸT½ÛSÒnØ”½ BÒÀ ^%ITSߦl!.8r Ä$î !ý#¦êÚæ«{±©Ã<™Nv±¼Ç4h*Ejç®U xb62Ž* r­ö•O¶q¢I9Zj"+‹¸l£%Ú5’’ÆŒ»Ðᇌ¤ –p1«ê¾Êm MóÇ¢Ðˬßù†µ½¹””´±ŠÉB,Ã÷³  ËO‡Ždd&Zs"~–fÌPÚÔÚ„ÒÈ«0â¬ßW×be6¶±d^*Õ¤„¤¯Ùí˜8 Oêq†Ê:†‘¢éÚ‹§j—ogõÛ¥¾KyϤ¾¨õ yÉÈYдnÇìI™ò•ïmâŽÌÍv¥æ9uKøeÔµ+ˆ¦±ÑúÔp¤±ƒ h‰±§Cûæk,‡NleNÈ/.Ë4¯¶ƒ©B#—íÞ“{ [ÔnRL­BWÔ«rÝk _0Ó30iå½?YÖl!Óøiê‘êz}ÕË«$ä$ˆò1âÜ$%„Š6bjDåbo£T¨„Ö}Gë .™zÙõ§¶]:Eº’6ˆ¢©/‡0Æ<„‚¢'ªT×V‹*_éW­¤M§…³hgbìÍjýM…ƒõG÷‹òÍž8Ê'†¹·™§j:¶“§iÚÆ”×:~‘s4Q¥ª$ò]HJz„P S—Æ8µ3&rwµqHìƒÖd¸ÿÃæ$Ô`¿žÚxáÑu 9’9­þ¶x””)¥A$2·%lÎ…âÇáò-ÆBÙ~²ö†xcŽg¹Ž2¥?ÜmÊš5Êñ£$rH£á_²r¼¦IþÖ¬dÈÙH´¸î®o/´/3I$šž³v’Ù­´k<²C4E¨ÎXÀ­zŒÊž0xL>.o @BùnãR³Ô¤·Ñt{t½Ôn£‚W‚PñÇÎc›†ÌcÝ"?¶«o¨iZ”‹s×.4½CÓX\¥E¸…e‰)Ôüóaù!C¡­Ãtbi–¸[s¤ëÚ|á"·hbÔ`iúÉ´Z™i®Z=ÜæîÍî~¿q ËTs˜z=iUro2b#k; -ãU¸›LŠ+¸/uGgµ”‘pÄ<£W ¡cɇìá>­Ó¹ ÷“o¥±‚ío-ï䈼ói2È ¸“Ò>ÂDƒápÄC!‹ ²j–;1}bïFŠKhšÚþçXµFµkY$0ZÈ.·G¥%ZueZ£S687‰.G4}µùMSHºSmm¢èO¾«§¡õÅäˆÄ¨ ñ=râßÑn*þ––éç™|Ūë#Ò›Q¶ý )Mké*ÑŒÂ@YƒÈ‹Î9m˜1³=Ç&2È–ÝirK1Ø[j:«ÃWvv÷3ó7LíT$`z‹Jó_ܳ f™‘`¢V¿ëžo»Ô›JÓ5ôÍ*y~¢4ÐTLŠ©$B#“”eë_²Ù3|V[jà mSËÞh‘´mJ–ïËz½­¥ìòÉõÛ«K~ Ÿ–Û›ž<œ“%¸>éá€cÞùÑܬ" ¬± *ÛT>]ýªMiaesyéØj±…¿‘¡¨Gœ¿.<׎ëÔ¦gfÉ0aÝðmÍ@úYFšúV‹¥ëždƒI0éOgÆ×ï–ÿY¶oNJDMx7Äõ~`Ï‹,¢ £ËÝ­ce§ÇåøMä·–x`›IZýÖê;ü@Ñ$Ýf.£!ŽJŽôÎ$Žkl<¶öÚ–™©²Ì“éI~dÓ§15Ä×JÞ¯41ì¡ÔˆŽ™•“Xx@ø­Ú YŽôÜ\êþbÓÇ••Ql´GQ’OV6¾ORr¾ˆ`SqÅ”rËðdŽ=±ž"~¦èÈB)§ž“ÊñÜùKO.×·‡K…`·²!”O&Ž’æ)—Õ°ó}•º mÿê6tô¥ b¶È‹ QÂ@a#+7ïÀ[Ê'?•³$qP,2U:ýæƒåË´1Ê—:…Ð{6°¹3޲¡øœ0⬋)åÓ6CÅA²Ž#v®¯ôIƒ¬:47úe“7øq§ ežÙ‚Þ BH¤•æªß\€ŒÄFôO?sÀFìïFŽ?%Ú&§k}§Ku5ŒSj73@¤F õxã$ˆÞŸ»u]Ç÷™¨ÔâŽy×F‰ì^}¬ÝizËXDãÒd^–›ëýbúÂè¹ÀÍñÈ!”td9µÀe€_7/ÈÊ4'i‘Ék§ÚKo46æ=Öª’µ¼aÌÐN¯BÊòIZoÄfmtçDw¸éðiœøŠU>¥ j÷zì·w:î³amÍ&·2Êfá½cíCû·Qó˲ããôЦ—Wº›íuk›ǺÖô¨æ²ŠÒØÇme,Wñ-&¶Ø—’b>¤gâo´28ñC »ý­8ª&•,e×õ¯1ùzâÂxu+(´¿©ëPÞFÍe‘ W–¦”œã'gvÁ,Øñc•Çsô·Ë,9R޽­yWU†m3Êú¼:a$6×;Û >â9P–â.7$;üEÛ¦WŠ9£R³&¡Íi™®-lô¸’M"U}nîÉŸQ–@Á^–qña^D|$|°g‚~®L']Uõ¨üÁ«]ß@m,¤š+èì|»ixÍn."¾B ¸)F;…êÜph!†1‰=òN½#ôÍ7]Õ-mlc¶z\òF±É`L‚Îò y§]ÂÀ¿8“¬kÏáå™2ãŒMsîû‹,Ù4ó©h­b|·¥GnÞ£Ú\ê³]CèAw»;‰xž K·Å𬑔óDdXòõ¦»åúëztv‹`’½¬¶ò­bôŸàŠN€DyWžüF:|²Œê&í¶ÄRmT¸º–êÆêx§ek zUôFŸZU§'íG‹ÄL+ôfNxT€4y³ãá÷¤>z‚ÒïPó Ö¯$[ó.Ÿ 5þ‘bÒKê’•g-à+^[ü™Ÿ§5[†íˆÝ[NúäžCƒSÐcÿè¶Öv鍨\8k”Šê`ddI‘Du*ׯl°ãˆÎD½>n0ǹLü³§Ý\K&¬­QYp°‚âêXJÁl%g/U¡WˆŒ/Ž`jçÀh8äo²©NÒ–}-îî%µÔ®þ¯ë\„šÎPã„»ªîŽÇ¨â2¼sÊw¯¥x»Òß1éºÞu&–Âᵩ(Žyýg¹úÍD|áSǃîÈþïí ÊÓHg.eœ¹7-Ÿ’uõÑm¬´ÛgÓlVçX™cKs*§­%¡Š©T#ã;«o—Î2˜D”p¹nÿ@·óµŒM¼K2FÚ»´j2¸›Õ’e?H‚SÄf<‡òMÞÁ~›v·´ÞeòÉÞåÍŽ¿%¼Kå¼S#)j ñæ´¦_êŒ@'n‰1•%º'Ôì%¿ºÕ$k¥iDZÛÛ•6æÈÁû»Ô Çœ„€²,´_›ˆ"GãÉŒ‰ªÿÐæ:Ž,7o¶ƒmf£œ·Òz׉e0 nÒ:·Â̆ŸË¾p”}ÄeÝÊÝ•¢ÓÊA%…ô6úMJoL\à ¾œ¶±Ç+z¨ óÎãŽÔÈŒÒõº"]è;ÈâóÜXéöWZZ]F°Äeil‘ Vy ¨8<¼‘ÀøKqlž)J'Œµ‹†ïO±òôPjõÕYàõßW‡ŒrC,È.(H¡¥žbpK&S +É…unêïFÔ"Ðn´´dŠm9ZTÓÄKw3Ù úËŽ"€°Ü׫-s( ‘$‹0vEXiº\ºN£k$·À—¿§ƒÈ%efiVHèJ’ðµiO…Õ—(ÔNQ¡Í­£Ûèì½Î‹(kä·ˆ™LŸ.BJ€>1ÔÔtÌ}Dò‚8ù4Ët×U·µKÏ­ÝÜ~«l—s$fâ¬" ÅRœfµ¦Ù‹ƒ)Å1“óQÐgÔ¢Ó/`:ÄÓ°z¦K¨'@Ñò PŸ²Þù°ÀrÌRíoQÐåž‘d¯iª,vòiWÒUàyÄ<Ýš€‚8ø²81Y`6Kt?)ÜJ«<·ÙI£ÝÜ]]µý¼‡ŠÊ¡X€y Œ³U¨„!Ã\ÙSù^òêþ J3«ydÞ„ÚêÇ[h$ ðͰ§ 7 k·,ÆÂj<ö`I Uä÷Ö–þ¦¥ªépC ÄZÛØˆ­…äŠü…ÝÛªš'ÄU+M³>U!ÂA¿Ç&ÂhR±ó?è=>k={MƒM}Bé4׆Àäºpy áhÃ^$þc‘–’R7`pɽWUŠ+ +Këíe/¬T 5ìmÒk4Fc*™.cýâz­*9SÛ'‰ ·4F$*¤úf¾ ô¶Ÿ®m{ëÌÐO%²‚þ2yNêWn_hW(žNäÝ Fè=CQÔD:w—5 BÙ/dšÖêÌ[!ˆÍ+HÍÀ†¡ƒ•`OĹ< d&QÜ0&Ó°×~dÑt&ŽÊæ k»MSOtf;Ë5oJFARÔbz0Ê¥‡‚÷îi%t‘Ã¥!Õ´–iôëˆ-ÚÏO·G’%Ãpîª~4õ슭29+päAOIŠg¹´Ðï´ûÝBGfÔZR˜0t%xü8·öídrËŠ ɉ)uõ°[Òµ[Ï2­¥ÍÇ.þ$3Á²†&Úê3UYÔƒÃáýªff˜‰¶à7BB—ÛØytÝ[Zjú˜Ð×W-¤·1-'en„(i>ÏSË1ã)äâÑ0m_VÖLZ…Ýŵ‚Þ_JZÖÚÞܹ†å€ŠÞjÔ¬ˆÄY{}¬¢8Lö%¶$U,¿Õ¡³‹Q¶Òýî§žÖÞ=7OŠžÄ¨RâFfÛv5cÉW.¸Èß“"A@ÛY~ŒÓ!Ò-.#žiµk‡¹š6âó)XEFPÈÔ!ŽÎFWÐMõ›Yï.à‹PÓ.æÐͤ¶-­ 5TfE7ŠŠ`äpò0âÉAÝxÍØP—Uò핟é½zÐI+9&Š)nxðoÝÆ•^^Š‚]EE¹G‡<’¨,òÊEæK;!ya¦èšÍ£Xj®.#)ÊO]ïØA5´‰–S<ëöJæn˜ðÙ<Ãn;2¤÷Gò͆)ò­§î4ëî„z„QŒÏ²+“'Æ}F§Â»rÍn\ÓœøäË £]é-´ÿî3PÔµ{Øî¼ª`Kâ;ËkrQCÔ‘ Èå—DDä ‘a,QˆÙOT‹B˜i^›ž­ ¢„¿·bl­çxK¿¼^6²ßT8¸y°Ø%îumQÒïB–5k‡Šêhh²[Ç1,qÁH ü'¯\Ÿ‰K×¹a)#î&úî™åÝ*ï‚dD™±LBykq•å÷†îÁì´˜u24ó ³Ÿ…K–n`•zò ã˜óÇ)¾£ÍDGT®ÃAòõ•Λç‹W›XÓošR×WñÈe_R)‘’ '×\Éñä'áÉ€6B\]kÚ•´/ZH“‹Ë­RE¼(cböð•5–F ?FLcÇ,’çääB«t§wg©M ö±sõ&¸¹QmÆkéÖ#n´‚J6¡ûY%Œ7ñ:2m#Ѻ‘´ù'·Mj'šâšækyöÜÕ ,ebªV¡wß1ã)cŸ<$AAZhÚmÇåý§–o™eÖ’hî划â$Õ=De ~ ìæL²ÈdãftXÂãêZcÚé÷Ì÷×:eŽö—ÎdFR73CfÒHäŸ.Ÿ§Kª•Ó#šãY¼¬ú³8¯^°Z׈õ ¯%èÄ ÀñrdòXþ–™e‘Ù_Ýéúý“Z[éZÞ›7˜Za=´A#†î(^Ÿ¼Œ°I›ì·ÚÄÿ †ñê×5}4yrÞÏJó¡§ý[UÒ¡ú–­¬_*<,Ñ5aG=FøÊ–þUÉd2Éé”Êâ”>«åødžïÔ¹›U³·G±ÖRæÓ×oVâCQ?ðjS ðØ=Äy§Ú=äk3ê6z‹Ž3Kõ˜Oú\¢Ž0qV Õ~&Í^¤ÏêÅ¿”¦¤¿ÍÚœ:uÌ·61>‹§ l[Ðx^ ñ1S,ÿèåG7ö^2x×6º]0ÉDg G›$Òn/t=sWú¶—å[Ø—êBhþ±É®&øRàŠŸP¯ÅM¸Öj@É.îC HÁ.¤±Ô-"ó%ø[ýJ)¯–¤…~§2ZÊœým·fZzGƧ6H¹MüÕ=Ì:ž‰s Oú?@Ö—ëöþ¡Št¸š/…¥+"lx¨é”iðÆb\|Ã\±ñŸRó%’ZG}u=瘵k d–[”<§õ ·¤jF@e'âë—ãÀ%´O.dEEšF™¤$÷Z•Þæ}MyEz.d½‚âŒLhœjÊÃàä>ÐݳÃ&{ ÅàÞÊc¢Ø4·Vd[€—ñZ¾¥¨êCÓRÍ+@VDBʉ+ë f>l„ÈÄ‹zŽÈ-Côö£¦k³i7­Ž”Ó>·et¬ºÇéH‘@ó@ÝÆÌœ[2ñcð$;ú9B­âËOóEÿ—´xšm$èï#èö…`[e6é$Äs£’äú‘©â¬à=32`Ì d³”EÚQeæ+8üÄžb·Õ¿H½íŠAÅÜ ”›J´MË’ƒÇ˜~¢¸g +b#²+Ìqio¦è¾{‚Àé—Ê÷Z<öZ_ť݋yjÒÛTÕ@å½?²®>”³qžµÆœ×Ay¥i÷vvVi$wö1Þ]ÛÛ¼lâ+¥’.ÀŽk++È+˜gNdx»™ã |Ý¢YÙÙM¡>¡q©5ÜW¶“ƒ³Åk2•ä”áà|qÿ:x屄I#ðRÿZϤ F÷I®éúÕÆ•+Ç6PĈ’Ä qf*hÈzå3Ã’ïzûQ²´v—{þ„'ºÒÕ!úûO››ˆ#·PRE‘~Ñ4Zø#äqä ‰®hí54)<±qu¥É¤R-1šðþúÞMœŸM>2Џü0„dØØk6wÿÑ…i6—A©yŽK¸cM?N¹ÓïtËÛH®.’âRx S^Q•5Mù/QÓ<ç,¸ŒEïÏ£¡<¶Y¤Û¾•¦ÜÜhdÙÜÇ¥¬ws,òOw' V€4„H1ñÊòå9(I¦R%¯µ·™uÛý:ô%‰¸°YµMRÝŠL“’ <¬¤…|,Ê~ÑÌÈGÁ€”wgKu[;;Xm5L’xš%³ú”-ÊáY„fŸeÍL|»m˜ø²™ËsL‰‹¤–ÃI»Šm5RÖïO–5R9#Ä$D*Ey0›†\DøN÷Õžé¶öZ6¡u¤Ï§\ëÍi/¡yÂkF„/©m-ºJ‚\õÌIÜâ%{À¼•höÝZQ¿6z¤’Ä#vú´g’‡,ðÈjff¸óæœÉv-U䬾9‚rã1¸ËW<™—§i×­ÝÍ›\hÖúýœ §Íp 6ÿ\€…y#|&W'"´Ìc˜ˆÑC#„»ƒQ]#ÖÕ[êžd73Û fÕ}Kw "SëN…V©ü¥®Up<· ñ~dÒµ}CXº–ýY.Ý¡:m¬1¤¶ˆÉ%n¥\Œƒñ+eXò@|TJÔ4Û/0iúÜÚž™Òê÷+o=Î,nÖò\^À}PŸ s}º(ûM› ™=›xATŸËš¾‘i¥Ãk¥h–Vè<ÂC:zò<Ó!U;QºôÌd6yµr*zÏž_˺F—ù‰k“Üjê#¹Ñæ‰þ©äÇêò¤µ$ð•@‘c ’pCIâå0¿‹1$v­µÅæ ,-¦Ó4¤—SºÑkIú5_NKWaB¢´`âX #ѽ÷ù7B1ˆ@[ÍpúÔÞo·–ãF· ¨À×Vâ),ÃÑ¡†"¤ÓnZ>Ù`†1 ý¥†I‚wÚ„7ߤ°‹@-|d³E{¯/$…ÕªBHÇýÖ:ød0ÂFÉ<Ú€ ‰ºš}?HÔï­¡·´vââÓLe?]šÜÈ$1ÊXî¨Iø¶8=\-|Ê•þ¡|=}B×OÑ×V¼úµ¼šE¼e¦·³…kê4¬I!›ì¯óeó«;0'z õMW†êûM’ä\]é¶°ÜØÚC#\Ïp³MÉH…HHÐÕ©á•âž;-°»K›æº†ÖÇÌQÇ,°4“ÜMj"1FÒ-#1·úÜžùT · lÇ/pM,níe‡êÚÁ¾ÕÝžgÕmíŒ7-ê#¶WE*(y7ùYELK~NNž1Ô—ÙùsWòí¥×™o¥¸½¸¼–+KKI×ÔŽRâr®yvQ×ß2%’3< roœEXÝVßËòOhö–´:FÍíݵçîâÔµ ÇæÜ$c±ƒâ½ ã“(æFî>:ä’i#Ký «ÛEj÷aKõr9Ú|j^xQÅOËU²ò8Œl´“êÛ’Ÿ–µkK­>Á©—©BRçRÒÕR8XÏ~ïÔèj€=[ç•fÓœr48‡BÊxï’[%I¥Í%ÂËäëK‹¥Öu $TåJ¯$)ÀµFá®ec¡Ä=Ga ¶f¶ ¨ÝË ®™©Þ4êž…Ìú¤nÒ ì¬:4Ó€g_µ_˜'4ˆ2®Mr²Qi¹e1 éN­ÑP†YiÑs&obb¹4ˆïa\#Dռï[Ú>Ò/þ­y«svmÂ*KFOŠfÉôOîˆðÍ2˜ˆìå"Àt­7KÓ´ bö«Ac«ØA.—¨É¹T7¬Å‚ì(ø”}–ÉO,†^ÊÁØ ô(u=^Ú &Âòìy^ Èänb´ÂÞsˆ/Â%,Õ*H-]š@o[±”E"µ;ÿ+Ý$0Ìn/5¹.u [iÕ,˜ƒð¨UPñ«€A/Ï!Ž$D2$÷ÉrþÓïcQÖZ}>à©ÒuŽIdGŒ§¤•<¢§$lÄ× ˆ÷4Î%JkíkÍwʲ­­Ú[[êÜDlÚKËYïÈÒF  ¡”DJ?HéÜÊ8öIôýO¶×4ûB¿[!u´›÷ níùŠgªKÕ9vG̉äC‘deA”[&¡¥5Ö½Œ!Ò¯§™Ž•k)’5Ž@«E“ dê¡»®j¼XNc~Mƒ»~]Õõ &[kÐ.ï¯mà6wSÍ ¹e.D éP9 <öY2YeÅ:5›%~µc§_Ggæö‹y"Á|`oJXu¤Ú9b© ‰*Ôø“l„¡ÍÓÿÒ‰êZ‡Sº[Ë ‰mµžfïT±"½Ev‹Š Ï W£)æÑÍš‰Ø<ð<’ [KG˺þ±«£j³é¶ÐÎÎËsm"‹á«/5ßÇŽdÊ&pp[Œ†èË­{ËÖ2Ù-Æ•=îŸ$†VX%…]R0¯Ö«ö’0êé^œ~,pžQ¦ XG%ªXiW·±E¨_ÈŽÓÙˆÚK„’'"¾ŽÜMGÙlÆ5,‚!¦B¢ ÑcžöÞË̶£H’T†ãHЭ¤U%uUg©C(-ûÅ-°Á¨É8Ä×.öWmIoõO7i¶¢Î³¤iS¹¸·Õž6Ñ$jà*Õa_´r¨ÈŒdß>Š&B­ŠB«/–_ÓM>e’îÓë#Õ‘ïÄ…¸½£ª{œ¬Ëˆy¤ÒLÔ5HíìõQ¥•¹—t‰xMÎ7¢¬AzšÖµ;eð®Rúšˆ¥/2ØÝÝWP.nux[«=:JYµ½½H…Þ5ëZñø~Ð9d&D¼º¶Â7Í[ÊþbÕ×ü8·3ßjÉwa2šÞ5W£Êã“EDª åz§§ÀžR·^rö>¹T2FE”%*áBßë:6¹©Z\Oú_Ì:[Z½´NÍeq$ËȨ´¦Ê´ÿ'%,ÉyD´i4Õ­Õ5´òæ›qo°¾½õi™–I¢ мáe$íÛr^›["9¤ž_}ÝäÖ¥Ò£eŠM^Âá‚ÄQË ™g?ï™>*ÓuË ç0`ÝI'dU¶‘–~bÑ4= ¾±© @¼¹˜IqE­8ÄÔ§&ÊŒîq”ÏÒÌl›[ÁªÙØ,Ž¡–ÂÆ;?B18K+ØOMžUZ'o•åËŽö‘#š]jvw- ¬ó ó<‘é×óORõT¼¬'j*¢(]þ"13C¦ò åê ÒãQ¸ó8Ó.t×Ô'²¶’Ökûæ‹„3˜øzÈëðÉŒî½Z€õÈÔD6<Ú$i'ó4ZÌ0Kk©ð‚{v¼&JmÏîãô£AÉ¢}ùÀœ·M[’1ù¦Zés^ëóÝ$µ½{]6ÏGÓӔȰ§ª’?¨T*« ·/³Å&œ·Ùç-§Ô5­”]ÙiÚúÒÞPD±K¬Ï,ÉU•‰nNòEÆã#‡™æ±$%ZòÆ…¨è÷ŸUÝÏj?YºþŽ]BÕýe<´&b¿&¨ÞÙ,ù³CkD²€½OÒÿKêšVŸÕõͼz†‡­Âiîdˆ!©àZ«O ž ÎUÄws,s*Ð$°Cm¥O¨ÃsçkYIm­XÇЬ¢0Œ£{¸¾*îñí’Ëê$Q¤L”Ï]x4ÓÅÔ7úµÕVêÒÊݾª8DmåñTõ9V¼¶Ì]6Mê;X¢X É×7²ßkQéÚ»Co6¯tu&:‚­ep=HOÄq0…ô˜“ð²rÆHâɉ2%„ÚØØ\†Ôoç·¸ÑÄZÍo ü¿vô›ÉΪÿÌ»æt²HF‡1»l¥A>“Ëði–ɧ¤µ¼©t²(Žá­â IúKþð~Õ~ÎSƒX ¢¸òˆ‹CØéž­å¯—­æ½Ó«pþ\»„¬S´iðÊ·+À%GñûK^9/Ì qqs=SâÓ-GPÐAßDÖ"+é졵M/N¹š ÑÝÞ„Õ9·0›Ó*Ç)oÉÑW¾Ðt[(4½cS¾Ôlõ6Î;KÛ«8ýK9­^P‘ÈŠ‡›˜Õ‚IÈsé‰ÌrD©Œ‰ Þ¸Ú°º‡WÒµ(ï4{䵞Î! ÄN×–²$E¦ŽJ(ÙA#á µëšü'3úÇÜÌ•µÔ ó#kw?V}Ï[I§ŽÓ’¤Òê _^­QÇb›Ž4é–ÎV6¬–ó‡™Ë¥¬µ“ªè÷·—z†Ÿ4P–[AXÒIBnc« H;WáÊ´¸8ÝHU—@6Jî­®ßÊTõdžþîêK±ð“c¥@!û\þ׎fÀðÈ× °)Ÿ–ì¬P(Šký>O\[G! ½üjfi Dƒ39™ ¥¡ùòîÊt׭òå´"ÒÚaQ].Ë3$¨ãCL–M |Øp”‡«ë-w«h¶÷\\)õ/ÜJæn>©“• µåг$£ÅÀK¤lºåݽĖZd>­ìñ¦¥¤K!¯)èz¥…íÓjö‘ÝܸžÓL¼™ÚS …›ÖPŽGeÊuñ"yue-ãERå"Ñõ=Ré¥Swõ8ínào®[6ä< ÀV˜ž«{3Ù¿èû4…äãeV£¶Ã~ÙžqA6YÊLzâ;X,4Ï®^Eme¨]“ª[“kþŠÅ ¶ê>ÌL T¶e Fr2 1ÆõIý‡EäžÖÒu’jL²ÇnðHYÌq€ZŒ»…/Ã(Çbä@‚uæk}¦Cg¬CÉ,ž^µhZ×âTõ=ƒ 5æ‚°ýݳ‚G%ŽM5RkÉú~›©¥ôw1%Ÿ˜£±[ÀÓ8šÒâ yF®¤R(‡öp癉Éd7´‹DÒ|ûi"\Þ7Y–Ôz–Ò±¸ymQ˜P©“íbþûOS£ê7“¤T²I¤ZÁ4O<Ü8*Ç ·0w¯LÄcϽÔÌÙcS,÷“ÉxšªjútSqX½!k,Ò¡FêM §Vçð²æy€ .!I¤ÜZÙÙǯ^Üj:^´ÑG,ì`J5ÔÄÜy7îÇR }Ÿ‹1ÎO[Kj)}mwe¦é7o5¦­4ï2ÒFžä¼F⊅‰^*Où;àË„™qG’'zTÍ%ÜZé°ù“Pšu³»³pb‚ÜX£4³Ç dž%Ki¬4Xi.WŽ¥žN@ÈôZó¯ùe|BÔP7Aù2}Z¾´òÏ–ešôN«“KÏv{–«WÒÝQ£÷ÍŽLs2‘õ7Ë1fjÑìõŸK¶¶†ÏF°G¼k$8o/#$Ç :’Ä;¹ïðæ£cŽ\RæM8´:°m2Æú- ÞëRÔ^ëÍh÷Š£KÓi”,ì&ä}: ÏÏ“66 öN—@µòÄ5èÔ2\‹‹ÝST‰ÚV·º ÌË@Ê]þ 7ĹIÈsDyl=È™nØÉæ‰åh!’ŧ³½¹¿º¾vim®mx$$rãÀñ >ÉÈáó6Z­y4—>PѼ¹e<2ËæÚ_j€ÜJ’ÜHZI#™ÍxÓøæN2|RNÕü,DÈJïõ5-Ŭ\} Â,ÞÞuHP›fºãÄW ËnJªrüxfDä9þ6d"f«ÛÃuwea£Ë>³§,íå“à‰gä’½»«Ì­¯ŽbÎÃrØýL8wS²×õfÒä’Y.-Àõ É8Æ}9eú¹Žgéß"»q®f >1 båÕ’Ý/Ë¡§ýb-=N¡qi.²ÍöÑD¡cU4õªIË3æ£Ã[µ‚y[¦ÍåO-êWÚ=¥Ã\ywVÓŠnvfúåäÒ$±"ÔÆ*)Söh3_ŸŽbïqÑxwÝ9òåìrµæ‚PÕ—Üê7·Ú˜ #CF*©Èðús&Ä2ÈU±Lx2ÜÜë2K4:ƒÙIpæES ”,Ë"Gá@U’›ŒØÂX£*Ü1i…äú{Ç¢[z·:U´S/èæo¬B%2¨–6#÷¿Ëö¸¶W‹MÌJ„™D µ[Vó5ήyŸPõ.u-ÝoôÑ'ÂDv²­`Ž”õDDWßöxäNXŒ9u-ÔeîK!“ÌÖ–š–­¬\Cªë0Oª^[ ½mÕ£SÁE#C¨öjä¦cÇPäíÉ +ØÚØÉyutš‡—®áŸK}6áB\I¨D‰$SZ­>%t?f\0zoø’ÔœÜùv×WÐâÿU,t[(µ-2ÌNê;©­"Ê¢¿m>ËusÄ0±.­UúE¿Ó53Yë’ØÛ]êkAmv’2Ëu"†vØoö•ˆÙ±®˜ƒÍ$“ 7Ì>b[‹M*ÖÒ5Ôžkiþ³°°–{rüQPŠ'ÂYY¹R½2‰Âse;’Qæ ;EÓ|Ý›î@ÕtƒèÝèëi––_ÜÊ“ÙZ64¯ˆÌÀ% |D†ó"@‘jºÅÌvïGtn!‡G†*A¤Ô¹2[cßál°’rs‹r'ËskÍÀÑ,åQ¥XIreôÞ6™V5#iVrMA®QœBâþ"¥5½}ã[:<Öá¯î³_G¢±QÈ4B"Q¿ •ø¹f\9xDïf™J‘ ÖZ¦›ú2ÍŽ— ™ÚK¸Ñ¾²%Ž„§!³=|r1>®"ÄoÍv­q§CÇ™ÓN ij÷{)ŽFVš°šŽøˆ=ë–FçPÈ%&Šs8j|ÅØÙõGvî­t}oÍ×pë^X¸};V¼œÚÚÅpöóÙ³ÃS%ÏñHföxY(Æ7~Ÿ—“i1©ßù¶ïPºòæŽéws­@š[érJa¸´ˆJXCñÒ‚¦½33K(p“!˯E=Y¿˜tï2ùsËòj1!ÍÖ“Gq.£u 9ž*E"E#TŠÒ¿<ÓcË›€ý( ²ý TÖ#Ó_V{IlÒX^5ÓôÈ£·´7-ZÜ\<ƒ]ꢼ—¢Ò7qL©|zÝä:õåôi¿V¸´Öô¹ÏîîÒd¥ ©#—=·í‡Œ£Ôò-ãp»Y»‡Hµ‹ë–Ú|0È z}«Ä'ºX!‹ƒˆ\W×RhëÞ•®U€NC—ň‰Hèë§%æµ®éöwWqqÑ!»°ŽI90,ÓF h¾%qö¿o®lðC)5Ì7C½(]b}+ÍVV­¥Y_é2ÛÙêLQc±¸Y V €|,ž§ÅÓáËåRMW&26S›”•,µH.ô×ӡЈÓ.¥Š¿µ¢ 9En|8šUw¡Ímú˜› £Í¢Cu|¾_½ŸKyJgÉÜQÇUÈÊh€°_£/È'ïº`lnÈtß5K&˜<•.Ÿ¡ÜZê,o. c-–«aþ‘p”ƒÆd¢²¼<&]\ˆäaÚ¿æW›îu‹HÔ¤ÖµËy+¬Ü[ÆÖ©'Ôd ±(‹Üý¬ÎÇ£Ç\Rú ‹6¿ó®›} Å¥bšÞí’kK{[Ah­yÉKªÈw(ç—CövÌS‚QÇ“Ow}æûjÃO1ÚØùnuž(¬,¸ü1ÈúCT òny8xˆ¹#jLn4 ¥i¶šÖ¡/éŸ,éime ªÄ„5Ǧ¾XW¶b FIÌð ­¢ ”Dº”Ïæ Y|±kogs®À [¸fHg„$u²T‚C`å ›Ýº&¶b÷7ÿ^¾¿º¼½º»‰!‹I‰-!/ÓDW^¢rP©áÍŽTxG?ÆÌñ㲩¤ 95ˆ¬-.©ëñ¾"0êú}¼ãΜ~ÐÊgdïÑöN,m®a³‘&ԅͬ·ü¹æ˜fõî­c–XàžW¡1\W„‰û8r倿&2•&Oå¨õûû- ½®â¶‰«è^Û¿7O^=€«ToöWŽ`чFš]:_ͪO«ú lt©åŽûËh­ê¶¦OïäPI& ÿ(fD„x|Ûb- ªù“_¼Ó­µ½fÊÞRúÝ­n-"³[™d ‰b–5¨–2E{2à±ý1;|šŒèÒ§šì5¸/þ ºQúü‘Çpur} cd°«ÛÇ"R’2îÀrãðòGÔy3„@æ‘¶¢÷QÍiªiòÞêš¼£ëª%0ÃdU‡Õý$ e"›‰NY q»F$ïA Ô'¼–ï”–Z›Ämô*PÈêBÒI÷=R¼ÿgå”ä—müM—lOºÓ|“§¶¡®Ã}u¬Kio ZC9á,U+<­$f†e-XX}¯³ß1å¨G`ˆFÁUÖÚ9´-K%í½Ü÷Ïéiw š";œ”]ÖFRHÏÄ®´ï“œIª! ¬ë^‹ee hvŸV¸Ñ 1­ÕŒo-ÝÜ–“z²ÄÊ@0’Î%7ŽO9ä>®G‡j’´>hòå•ÅÀ“M‚[™¥óöŒÁ µ³Cëf­H®¼Õk!‡Åš†þö¢iß l´gÒ´ ;¶òÕé:w˜5Ÿ~MÜ›E¥R¡¨Ã·QœˆË$útnž@"˜êVšu•Ôºv¹ssuæ-l.ó¬sJ ´Ó’„!¢‰:¶íšèdÉ0'ó‚•o&jÖ×RjÒGHÒí¥¹[kõI%–ý&P¡%â(e§!¿à˧9%<û™D&¥}{Î^iŸÌžc¿k]2êîOÓ–Ws•¶I‚ ŽÊŒße³s’<ðâ7ïe›¦Sæ3hRÜKc¤ÚóÕ­Iµ¸·¶€H#^,yJšrßÖ"ò̦ ܶgÁ\Ò8íWͺÞIŠ;{m[AKi´Ù-J‘›´oU}Db¾§1E§í|=rü˜¥†~&äh´'˜&ТƒËvÚ–¡%òÚ\¾‘}rЄcc$!Öt¡ D|`üºæFŸ!ËÄy1Å+‘GXŠaq¥ÝÁ·:¶‘íüÉ$îÒIk3q‘’Dâß»cJ7Ä£l„d!`ï“*JšUµô>FhtëmWËVOé9}Kµ·¹OVCûÁP¡–¥ÙÇ!‡&N)€MI"tSh/ü»¨èš7™4Ëxô EšE‚Ñ\β½ÊüWS[Óâ!—‹ò½²‰eœrðH|XLÑ U„~ló“ªùjöám4Óquw§EošæÞÝʻ…Jº±dVû~l¸ã8Ê#ÞÚK'òÀ³òÞ£me«ëÚÙé³=µ••Ï-Fâîy hãÏÃWâgû*}³ &Ig™âî¾æ»2»H¼ñ6¡Cc£ÇÅ­ýŸ¢×kë .­¡•Ÿ ‰‘èz´y~—§C(B1¦úÖœÁåï4é´ŠêïK/o}wp`šúâÌ´r‚5äÅcað~ß\ÆÁ)\£.]Í}P×z”ö·7ÓÜÓ@Òí$ŠG‰f¶’#|‹é<Ö²­ýP>,ÍÄ?†"‹p‘V±ÕìE¦Ÿëê£Lº‰ Ô4›É¢õ€/§-´ê¦ Lh>"S|Œ@Œª¶Z*Í©ýs^Ñ×H‡†ª-¾§s­[ú—Ia!¤G û þÚõ9aýÌe3¸;G‡½<­&òýçåé7öó\ÞI{%æ”·hÅ–[GP:lÃ9¿1“‡?%G^“Ì:Õ¤ÖÒÝYk–ÑÙE+˜©êInÕÚ*²…¹_åß3´Ü1‘Øþ6mÐE®.5 GB†þ{[k‡ŠÚâ(€™a œÙÕÒ BÒ±1:Ÿl Dº0”·EùNÓQ°Ò5 .îñ®µ˜¤O­$jÆÄ¼²–TŠ` ¿ÿGYÁ1Çrrfzý–‹¨iš²Ù<—/}Öt+Xin$‹ŠÝ:0¡^ ÇÔˆÓìò\Ôé¤yžö«2,SKšþÂ{ˆ"w‡[¶†kIö,.a°‡…»k“NM™²'Õɶ`Z…åÂ\j}ÔeãÓï‘ï’täÓÚj7Ó™ ƒº b­O‹Žù;ŒbwþÆ€â«g¨]®¡ÞØ‘ºcå‹}bÝuɬÄ÷W`V×R‘V;5 (VÕbK¹ãûC¾`jeHóür…ŠPµ)u$þc¸ŠÈÞÉ$:mñ¶y%Ylד§Ó˜.ô]q›aߥ4[+è‰õ95—Y’úÛz Ð1™äXAX–)Àøé›Š\ëff –[ K§~_YC¨Y‰|Ïf#êÆÚ7e¸7’ñ™Ô8R€-JÄ3Ÿ7 ìÀÇt›V{‹KÇk»³¨krÜŸ*먦O¯ÛM(ìæ »O¸ô¥f ­™²³n5—S°šùµxµ«òö¶¶_\ôõ Q,e})”‚rWjnŸNc ‚è4Ú3Ë:v»®é—gšb†á-¯cv—¼bV8ÇiëT±'~^9…«ž8dçÍÜ „:§m%õþ™[ËCÊ[õœ‹ÕR÷±†I#ü¹«Ûh7úG•gI,înmîõ­JkÃÍkorU"3HÃ2*¸åÊœ9f\±™òºý¬¸x”‘:}í–¿æ½BâI<Ãw=· ý%¼¹·…œ¸Ú8ÂG|£WÅ–$@m¾äp œº,× ÖIòþ©¦¥¥öuq`÷Ð9tm?ûÈ’HZ¡€Dnã EÆù‹ÿ9Lj1“^uó—æò•Þ±é½SY¶·ž-–%e,ÄJh ²¶ehôäeãŽô/wcŠ6-C@ÖôFÇXÓ¼á¦F4©.’Îñ¬¢£\<1ñŽo Ú¿´¾W«ñ#(K·i—¤¦Q[ÙiC©Kssu}ïm8‚³Çouë‚Äe¯>ÙQÈgõ4ø„ÉRÿIÖô+K1éeRÎâÑo¬íla6ÌñÞ9ço,.7N"esÜ|81k!"qHîÊrK.4í}µŸ2ÛÜ 6ÜM$7“)¸¸‡ÕÀøYåðÓ'‡'N–¶M®îït¯/ßyŽ<¸í Ú,Vë-­µ€šˆZÜÕY&qȰÝ2ÈÀË/ èOT·PÕ5OðÔú†•šf« Õ¨ccmÝRF’I-ÃqB:-”âáñ®[Šk­Ñ~WÔµ]'Ì×Z—˜lí£òU´+¦MÅuv¢`£uø•0)þN l#šcú»ü›h)î¬, W_—:¼zƳs}&««Ü£E:¢Ž´,ijrcö»fTrxpœyø-¤ˆ”^¥¬O¥ùF?ѶçX¿HåÑd–Æ1<ú¥åÜHâg*¡¾‹"ŸÙ¡Ìm<<\ÄÿbÆ1ݽ^Î{»M']¸¶’ÊïS°RÁoÑr[Žô2±«*Ÿˆ©ø‚µr"£3}#ý“TâICÚè¶¡húo™u-nbÔF¥¤¼„ËtmQqnW„Ê“‘ß 2ÈH˜Žž¥ ƒº‡š,õÈ|Ѩ방ÔtÝFÚìí#^qj6È¡šà“DXC-iFøFm0ç‰ÇÂv“mß%þH:}Íýæ§>†àÂÖâßN„¶²X[³z"¹.ˆýØ=Jí˜z±(Äw,g$ÒMVé¦ó/˜<Ë© =>Ð Ñ5 „S[N9¢ äèÛen1ǹ?SXÿ˜u{KkÛË´Ž{ˆï×Q¹žFa "á’X¦‰¨x½_¿å6l±h½'/)w7Ç Ùo™uí}õ›}jÒÖïêºJ¬õ wG ò>´Ò øK(Z8? ‹•hà 8&}EŒc\Õ4ÛÍ7ô¡(ºk餀Ü,6¶~™•%“Ôµ¬Ä¨ø¿ÔïþN[8\¨µŠµöãR†ÿRÑu »{›Ÿ¬Å¨¶’Ñ-š¢Qõwý¦‹•$âø³48e]™D%O«G¥ù‹JÕ&·{;æ’óLkë”h-T'ÁÉ€­D±IGl´`ôpÄ´L Ù0X.tùmLvÁ-§Yæñ§2Ïm"ȱ¥NÜk³)ý¡šÌ‘â?Pj£ÉéZ%¶%æªÑ­ÄštÌ—… vV-´àt † äf»&IÌð±0,{K·òܺޭs%Ù¶¸úÌpÇjUÑ Ìâ@âFøhǶl3q·lY4¶VÐy’=Fææ)ïLKrÞš™O)ÄÌa¸0øHûUÊ0ªmŒÿÖŠê÷:Mù›MÒZïH´Ômfõ4ð¯n³êqµ̦¤#Pª'Ùéžm‡ÓÍç£ RÍ6êþÊÊA=ŒÏg5{`Èë*ª –*Ó…Ó®Gðù‘g©[Cåû‹*ØÊ÷Ÿ_¿1G"Ét8»-EMIÚ‡áürøž#rd1_$,Ö½ö«­®‘¤[]j¯³‚ê ÔâóƪZFŽ» ™|º;2á!ZÓÏo—çÒØÅõh5[HÆ«¬"K$K*¹VŠáwaÁ”Ñ—¦?\º5Né”]jSj²[[ÛÙ\Çmé4Ô˜¼Ísñ‘–SCR V¦½³[d&ù1òß“5+†—PÐ5[›ÔkP’Ý0L>Ÿ¨ÿŠ ï¿|ÛÏQ“‚ FÎL'A3µ±¸òòj²è¬ºrß͝ê¬nï"/$ˆÐ“êJø¿hTf$g“4ª¹&9 §þ¢Øi×ZÔ¶÷æÞ8¬1•àf>§9VRD…ˆ YWákƒ4xg&éEÍí¼ºµ½´ûxÍÄ–Q'ªÐPŸVâk¢8‚ßdÆ™2cáYÍŠê‹£ZGltÛ7¾•gK8‡7-s,ßP³Ôy-iü¹“Êfï`a(ïÍ•N’HÚÔ‘^þ˜Ò´XŸF¶ŒÁyovU‘£uz–Fnއl€áé³Í‰4i¥è‰gåtó%ƒµ¥ìqÈš›-ÂIyÀòŠYkO‚ÑÆùÊráÆÜ€GD¿MÕ®eó“e¨¢êõýʉnæ^ r%ˆ°•™*Ån#-Süë™Þ G Ñ4âþò :ئ¢é–zN–gµG‚ÞYÚÞnjóI#nû¥2¨ä2;î×¹ä†êÞæx´“}®j‰õ-ÙìŠØÙÛ(-ôÛ19?aÙ‘‰Ÿ¨žMÿJÌ-çKë›K].ѽ ƒº›ÄM5µZIeRC &v5¯ìœqøPõºe+bú\᫹4½kPKmj¶™o™ý]§-)EJU·¢W¦ÙnA¢áÉ…’iqæb]# èúLö“qX„´òûù"_ˆªÊ~Ód|3¯›>Jþd¹Ÿ\±Yç2i(—MhgEú”b ”õѪ̼· 2:OLÍs`ýRï.èö‘‹h<¬cŠI#yN½}þñÝÄõÿE€E.@)ç$úûѼ¹¡®æ›ÍÞ`]rÊ)¡ÓôÔæ5 ²Ý,ÇËÀOV™w t‹“¯Ôn5·Ò¼Épæôjw Ò ˆ,è¢|0úÌöËr‘ªÀûÛ`‘úEç–õ7Q¶òËÜ^_™ý3¦%ç¥:7:ú0»ïè—%Ý—âg1§‹(”eP¦f÷CÝ=Å›¼æóôv‰¤ê„éWu‘äd‹ÒP’( è./|ðÎQ/ˆoø÷8¤Ž: ¿—üÝëyVîO0JSMšâÑÚÊVa#"}Rïr(,Õ<µ}isgæõ'º¶Xm® Ž@$º»žséÇo^…£VnT칌5‚@ÀŠ?s‹râAjX}'ZÖbÔ$Ô.®`³’ËLSn$·iX¢© UIàýž£Ëq꣒1®z’O‡²ûU±µóœ0Ã,¯éÞj~³´r=ͤ&Ê{t¶<Í6ðÍ…q@½?ÚÐEîê_—é¢ÚéÞ^ŠæÎ5¦±q}%”ßÇi=£|]¹‚köOLÁÁÚf3”¥S,Zh'¸–ÄÏä/),§Rà¹[Aý8 o*‰PƒÌדuí’2ŽHŒù>›äˆñîtÙfÔ¬4 KV]»†Ñí`» ö—p\F¡ý) Ÿß+aŒ>ÈÃãFxøÄx|»Ð@‘±É4½»Ö'Öï5«íV[64“H¶"k±ú-ùeP„N08*DýH˜·jrÙj^UžÏÎq_þ‹š`Òî ’5»’Y%QM­%`ÍG=:åZ@{‡5Æm:Ò,V?Íã“Í‹{¢XÙ5®­ ÏzQÚ4aZ@¤zjˆ€­[3u3' îOÔÈÌ÷15yŸU¼Õb×tk—EÒZé–Ù”²q+@[Ӧх#ýS”iqƒŒó(«ªÃkç=¯4=b_Ò·¢)ï ‰K¢§QiÄÉÿvÙ÷äü®OPØ @ÀÚ)´h¢ˆù:ÞÎ(î`ôÆ««^Èö“ª*Ê®£âe?´~ÖJ9ã)x„ý\ƒ9%óiÐi—z|ÃP¼›M1­ªé+rb¶‚)¶F”˜1,´9\s( ùõQ’…,òn‘¨êž¾£~³i·êFKž˜}(ÌR?4!áo›ªåÒÍÃB!ˆ›W‘j~jÐ,çÓÄfëN¶¼Ò´ËösZXC½°›à ¨ÿìpG8Ç—ÔË‹Ž{¼×Oòö³­jñyf×Zh4Ùm£·j]*Åsq‚‘©-ð§PßË›©gÅñÙl3Ø=/L†M>þßUòÆ¡§Gugu4Úþ¥®«, Å ³Œº•”Fû’>ÓošìÙ#DJìý-$ƒ¹Jµ]fÖÓZ²ÐuI$š×^K»]R§;im£ç,þ“’ M"‘²ü-&œËœv¦èãmK¦Á©iZe®µrÿáÍ7II}xX«_AfHäWppŒëÕ-ñ§Ä@ç÷0ŽB•‡›"<¹m, ¤èWž¬ºíÕü"æ;…q飔UTÐp¯÷ƒ4ç…ñn~æº1õ_4·ôeü7jt­9týA¢— “e&9”“QZrEÿuøÓ3IâŽÜÓV-;Òô¸t÷ŸH±›Ó2oô¨ï A-Œ÷J¼ãÞ eI ,>Ïl×Ï4¦@¯ÒÊ$õyó¾§4¶²_-´–SNúi‡Rõ.dÃ2 $_ ¤|@ü9µ€;A°HémRÎ&ÒµwHí­ â$PË*°r¨Êj ì¥½³Tfnâc:6‰AÓ¹ TÕeÕ­-å„ßêslä[…õv//óðSæéͲ3±k¬¬í ¹¹}N@·3A’ÑWÖŠq>Ü‹/Ù'E2¡Å0ÀsEÈñßy†ÆÖÁÄKj^„yb·••+QÊ»W’×,Å\ƒ.ÿ׌Á=ö©si5¶°F-×Õ[Gž:2ý]úr¹¤ƒj×<¸mêó'æÞŒ±«É§,fÏK¸¹‰Î¦Äz>‘-,œza¹ï^Xä‡÷d-rêKfÐ.-bŽ BÅo?GËeñÎâDÇ’uB7,ËÓqð›êØY¦^é7úMÎ’nÖÍã¥ÝŒws1½YØ—f £¿ZŒËž9Ĥ³UÕRåãÓ–Þâ[[ûx®þ©hcT¸*´v‘ä…`y§\¿@M2¡» ŠMgM]R×U .[‹k½Ò9Öâ(D‚0ªOzSâ¦ÿåf6¢0”sêÃ4,2RêÚãT:Ž› /yªÜßè¶7EQá¾³Uw„H(J9åÃîÌ#‚#þtyµC`ǴךkK™ÅÛŨj³»6™É}6·rd­¨u§¨Œ¤23$Õr fÓkw–y´×šù ²e™ôÛ•·ôJ´ ³Et‚‹È~œÆË6 t=E,íøÜE²qÂhæfÎdS¸ W e±žü¹£tmõö“¡Gk£A´ÝD¯Ôn®X™D7 x¨R:‘ºä±Ây7­Ã(äÙ/´ŠþÚåtË¥?RE&úò¤B0„º?$$IÆ¿hSáí™3Œd,6ÂTSJ7‡N»‚9Þö”´öOKj° ö*¤„øäc”@wl2DÈ<Ëi¥ÞÅŒ2HÖ×tüåiSÁ ³+èÙh”$[_'µo«ùP²Ôãk©•šXYdwŒI?ÂdlÈÈŠì3Y9ž @çÏÜŠ ÷>òÏVó¥a™f‰õ}:4šêþV•uŠ^ìI©*6̨ÊÓm%Ô<Ïå>ÛS]O¸771]C¦]…šI ˆ³zê>Ò˜É4î¸1bË|ö@&;€¯2è­o¿qe¨ÍvxK¶“d1*,Oë 'sDÁ)HLŽŒ¼A$|ú©Ô5 »K>ÙC²›fý¼ñ„OUQÙˆ$îr‘Š\ ¤1-fÎîk'ˆÓú“ϨipÅõvöññájþó‹‡T͆ÀXòF?$Zj¢HßR¹°±MÕÜñO¨Èdµ»‹SôV«É[÷Èç³}e(Q6z(›*š:Û\*ê÷s6©éÍkgª·àºII-ž7;¥>Ë¿Ze13€¨òh9( ü¡¬êþ[Õõ-ëU³»Ñtøe¹»žÂ>£D *`x…g&ƒÀæfl~&8Ð"M²Ñ|£mw¨ÛùÞâk­>kët²njté&¹‰ä·y$Vª$x±"‹ZþÎW“%D {­ÑWšþÏJ6·þ]”Xꚉx4Ý@O3›;ÒîK˜IÊ0 ’‡Žùvíênââ GË–ÐGa>§mrÐ^ÝÝ4fíæ"êéhºIð¯¬M½²ýD ˆÉ´PŠk©X]ßÝY6—žŸ¡§ÕôÝGQýjt•#g‘]Ø’­°¦›ü9äŒ"D¶kâ¥ú—“fÔt©¡ÔcPºŽöÞãY¤æDH;ª–¡û;e1ÔøfÀä“ Õ-ô{Ï1›É.µmA5ˆdŽÙ-cC=ÅúÆ¥¤vvT@´ï•PŒ¸¢¶± }IÇ‘§ÑnµëÈÅ•ÄSiqO{|ŽX TzS¬P ¿)–”'ãë•jc>3̰6‰°Õä—F»¼csu¯ÝºÚZyZ[sÆÞÕ™„¨¬Wý"0¼]¾ÁÉL wÉ&Å%rO™m«ÜhÖÇJÓÝ·¤âi•`eOJi@â¨aAû'a#±ßù¬‡sóF¤n>±.™b&òõÔí®&ÑØ4ÖÁø¿7e¯2çâ¯rÍ–›W?>­¢§“Xyt›2Ã%þ™©éÖS›k?«¥Eݹå-ˆۗ)”ó5û©”äɘπr-‚{Ò;BÖum“\ÝCucz#úͼíÎ}DT"ª’|AƒýwÍv§°*N.\dJÂéÒ/,SÍky§Ü6§Ú´Q,ì†é=9n%w¨¡ìÙ®Øþ÷(ÜÁ"Pr}q,'ò¿•4è­<¶±ƒ$×3"ÜÉ*\‡i™[ᢆ!×|Ì–@ BxœƒŸycʺÅÍíýåõÌÚO•õït‰K„ŽîX9Å Œ‘PqXÿÊå˜:nЯ¬pÉ dˆ[󆩧=þ¿¬Élë©´Z­Õÿ¦é ß@&…bD ¬„!½9aÄ"<1é©Å+)/˜¼Árö66úïÕõ;™&-¡ß-”^ÓÖŒb.Ð×+Aü¹™‡ÇøvõI³x×i¶^z°Ö´)íþ§h5ÕŠç[Ô.Û(ǨLòCOÙû[ñÊLôù!8“uôµB;žl·VÔ<ξOÔüÏå3Imu?©ýcŽ…”½´ü\ÔS¾béôâ$C!¸‘ųty$öQ^jsé·÷—R]]ßé?_Žqh9Ù< Ræ?Tì\=Ž]“b* ÙîA%®•-Ì>t±7Ú/›ôûU»ó p'(/ »‘M#’U*ÄP+89™Òœ|=«½¶2â‰N#ƒSó'æ?—áM2ïQÒ,,îoMµÀŽ ÍÒÇ΀P²)Ù¨s#ƒ«ê%¬È%º…¢Gis ÚO-}!‰nØŸ­•šFd "$)†_·M‰ûC,Óæ®1°X‰^è›K›u»[/3Þú×Ä·¥êZ¼2Ü,ƒê®éoD…h’Û|ŽXÊDÏÁ&4Q’ù{̉|WAk}m=8쨫<ö’†ôe¶‘HWÍ~ †Wmò©ä ÷%¼TÇœ¯n_XÓü½`=KK«[9-µhÑË9øšc&áV?%ã™Ñc‡ ·[•¡_/yªm?Ëš'—JÖukk™,$K™^(--™¤q/ª $xBÄï\޵k%¶†’Ëgl’Ȫâ^f>@·|n§Óµ¢FˆeÛúw×uï^o­_IŽ›©MP[ܶ”Ñ£ÛZ5Y“ÓÞ°\†m±Â=ÍÓ€’j>aÒoo§óY°‰ü˧\ñ¶±™Œ‰¡LpHè: 9pãû9 Úý2û˜î7C¸¿‹ÌZJêêl- ONî)¸†;ɰ1ÉPÑT·Fs5Œg‡zäˆÊ¹¨i:9»ÔüÃ¥Áb÷6Æ ïí…ÌŸW1Ü9âÂ2µRTWoÚÁ9FPŒ‰©5‰7É»MWH¹¼f§-ž±umèCŵc{pá”Ô+0 ônYFHHc⃱I­Ä7zh–ÃX´k‹­NV¤²ñ‘bu=)eiÖ¿g0á—Š™D%iqú>DÒì®O§|‘i-¨2zÑÄñ1$– hX­Y~ÚæÖ[€¥I½9¯nu#s¶²Ó˜µÌÁÇ¥s¼xJSâr´N›aŽJ¨ÄskÝÿЋk·sÚy’6´tk©~šte!y$åûÅ^Á¢`½úg™ãÇÅмø’_m>e—w0Ë&‡ ì±Y4ŽuN'¶#Ó!ŽÕä»dź¢ƒ Ð5(íÿIF¨ÑÈÓÎöÉH'¶œešýÙZÆKuÂsÆáH zI4» *iíâ]QÕŸôƒ¼F zS"‚Z±0÷™|F­´Ý2Õ¯¥ŒÅjºE´×º’G}o§ÆÂ1:¹P}-ê½ sË®UŠFÉØ0œ­3‡MÒ4¹ $QÉ®Åw!²²Þ—½âïñz‰éþ¼†I™Ñ£r¡ú_D¾ó-®•¤iöãFÓà÷7 ü™­Ã™%–ÍTz•ìr2‡2O4÷){«ùÉ༕mYt³Ä˜›ÑXd tYíïð¶BRÆz³ ¶úö„eÔºIÝ››…Šå™àyåzHR&hA®cË Í¦H­;S²ý1.‡«z·Ks·†îÛˆú½É ÑðFx¨?²^§c»žˆû]+Ëú˜†[+™uYîWKÃÂ~¯‰‹n ñ#¥B¹I´ˆ·6?=ÅÍ´—qÜÛEugw4&e‚U‘+t†ªÕÓ—v´2ÑŽâ:ÄÈ#,õSH–æ×Nkh´Ÿ«©6ñÂÒËëB¤…YV«BG·Ë!,11ßêïl¨+éÖÖW¤Zíý¡ú숳Gsª¸-±SÒ†*Š+±ØŸµÓ'án¨ŽèÛ›±0šÎèÇc£ÝAϦÀî ´ñ79WjÔWtn¼O˜ò˜â'ª-ãÒî#ŽK4’è[[ÑH¼æ’"Û»Fs¶àûe$±›#šù›¢K ið&¥©Ü}eﯜRå}T"H£ßŠÕ4þlÍÇ9Î’•Y\I%Ô1ýkëšn’‚H5'iZšâо¼LGÆ9KÞ›fL¢H¶)²kúf’¢ K·3H–1C$±.BHHÁ¹*Ÿl–)Èób *úþ¯{ªØéKu¨\ÙYè’JÏ2ªG#©`Á¤.¼×4â>é–iè¶P»Hí$}ZçOÔ5!.!Ôf¸hM\pžJ˜Ø§Ùn ¦ÿg.$B鑵òè×<á"\_Oú·ÖuˆV-¼Ïlˆìá•#~Fï™8Mâ°J;l™ycô]õÏœ?F\­¦¶«)Óß÷wqù»>Ó¿ÄG÷ §SšUè¶G "–ùCN׬t‰ü»hH^Ilæò°ºÓí‘§‹ê¤w<n‡,ÔdÇ2ÐrëÑù–×̾ioÑ~^½g§i&!4OëÁÉT1x'§}›,Œ¡(pÞ\í°@”y·Ëg™¬oµOIÒõ[{k(䤷]àòŠ…UiéPí™x2Ëá<Ó´;”‚ÏV´òäÓêV—rÁ"AÎÕg‰Ë r´2¥rSörŒ±ŒEeæZHßtÚßDºº¸:Ö½1}ês¬v°«]^¤ò9a|H‰%³Sös$ø¥áÇéc(íL†1æyô«ÍRxaØo¥GJj<”æ’N”Ž,jxfá S q6 g¤yn[˜,ô‹Ë£sqb×Úm”.°9¾3•’(æZ´œzócÚ™¶™ÉÃrDùXEÜÞ¨´hõ9ÞßX¹·¦½²ú?Vr³@¯±2²XeX`¸¤7è:—G6„š–­g§Þ_XëmQ¿¶v†æÖÚÖ"®—‘+ äz‹2r™61g)oiâéâ9µ/2~Z´BÂÎãM†þ( ‹‹teõ ¨ ¯¨*˜‘ÍÇ*ËuÑD¸‹°k5è/¥{kk¬Cy5åí­Í«Û3mlÓEðšÆxH8ñ+ö¾Ï,Ùfœa+s)P;&5´:ì7Z{GwmõHí-tˆnÕâžSê3D>ËR7<ëJfóxƒÕÎþ-'i¥ÅÖ—¤Ý=”Ö¯'–Ô-ž±y,’^^´Ò’úÐÈG¦ŠHBEOl b3ŽÆ¤²‘WZ畟O“HƒHŠÚúÕ£mBå ?VŽW1ƒÆnA‘ÝU\ðÕYXf6^#9› | íÆ¯«Ãæ?&éÖÖí}«ÜÝŸ0]\•‚[[¸Åª+¬d)àŸîÃö~pâᔥ±™ã…([Ûm,jšuÜ~a¸ºÒ4™#²Õm§à"lãg•V2d4'ãöÿ(PàÉ1 ü¿c!;qˆ¦aæ] î|³q6½j‘j@Geæ9¾½¼Týn((Á@ÔïÇ|ÁŒ¸r9wy4ðïlRÏFN…åÉtÏRóË÷¬ú¶¥-«@Ö3o«w*d£é\ÉÉ.1)K»ÒØ&­ç ìtÍsY‹ZºšÛ\Ó­D`0i"h¸¢¼çÒ ñ·6Waº×Ç#§„§&UaVÛWºòõŒ:dQ~™¹ôìÝnJúÓ=»QÜÅ;§Åð·QÄfå\·Ñ„né+¹¼yR·×VÞûUÒ£ãw,ÆåŠy8Ãõ¨ˆþõõVí\ÏÎá1ØtæR”y&z{êúj§—áf¸’çOš[KÊúQÞ¤§ÕôýI;ÅJõÌ9KŠ»­n¶ f»¨ë1~^\O&¦aÔfÔ¢Q©^ü!cTecÌlõ$*‘ño™:^Ÿq{rc HìQ>O¼²±²Ò|£«\Eq©-ãÇcæR²Ù\Ý2´B9$èßìåzŒFY%8ì;½ÍrÆAdWz-Íõ•¤’¼ºÅõ­ý”~ ºj‘ÈGÇ#‹HÈ£Ù«Û10ñÈ›äÖKq ^]jW¢dë²ßG}­F´ô#½kqÂØH MØÿ\ÍÔj8"Ü6ñžI€Òîï|õ©ØÁxÖòxO¬Rê²XLS—ÁÚ­ÜöÊo"Ë$,&ZhÞkòÉ´ò†µkå¯Jî[7ºh}?¬Ñ$ËJÈÀJf>Ù0dá˜âj¾R[2_¼,,¤Žñ­íù¾«)[©${O+ˆžœ”³|Dßi~-ó?&+˜âÚú7z˜æŽöZ핽þ¤Ém¨ÝêÝy£NYCÆÉmXÉeEj»F~ÏË3u'ƒÓ>UélÉ0 ‰µ SZÕ®f²ç¦Y$’k†Te–H‹( ,@ý¡ÑMs€eÉ£‚Ó¯'j¶^pµ¾Mê[°žÓêÆi!ž J‡“nQ0øXõñÌmN›òòâ"ì/„C Ô4+¨ØêV*’ÁmõK»9IŒjÅçD—â+ö¹%~9‰P00È6A˜Ó”¥þ—icªÄ’ʶÿèÐÈþ¤ªÉ)T•]à´ëü¹… @Jàl2„6¶3}aõ [»¹.Ö]và1HÃz6Ð;±CÄ>þ¢ÐvÌØe³DlÜz[ÃL¿¸–{ûÛËhí¯Rþ?B G÷‡˜øX+^ù“(C˜a(€_ÿÑ„kmÔc©ËTÓe•î£Ób4ôã’[ú›!yøg™D^Ãky¾úf­iyªÙj—>§¦Ã,BÜNiéF¾› #Ôük^85Â9©¡úFîTKY_M'”P<¦ßÑ#ø ¯ZÝX}²˜@F5%!–…}ªÜ]Å,ºEåÍ›\]AþéãS8ä⊼¼:åâsØ2¡H;IZÇTÓô ¸m|µo Í5ņ£~HÍp²†uA*TËP¨9°ËÂc`îX=ž¥ø“ôdÐ-Æ•£ÆæîãêòA ¤O My£ò,†¿á”Ç}[b)4ú¿•´]nIt•±²´µG·"º˜ÚàQ&e¨4R9øs0Ë.¬%AiëzÜw7ÆZÔ]O$×VÒå·¾‚‚2Hâ@9æúrãÆ uH š²¥­æg§Fš¾“w,iw«OïížT:Zt'bvÊc(’M\)¡¼µ“…ìV¦ÊÐÊÚdüZÞs-£+¹Ž‡}·>;Ó+Œ$7 ¤–ß[¼7VÚeœrɧ=Ã}Jö9AGc#3DÛ/ ž›åÒÇâ<ÙÒ¥ÔwwlºÓãŽÞG1ÛÙ¸–_@ëqcð©ýµm×¶] D@“!G˜Nõ]2äIö ¶Ÿå™ýY텥˨yX˜1ƒËß|Å„¾ö$£©s%”.3Êê„4Î=HÐÁA`>˜©¯ÙÈOn¬@®I–”n®.n.ô{ø/ítXÄ·V¶À4—‘À’Ò(¯A”³ñdáH1²Çy[MÖ¢‹{¦DV;îKÍméU~žâßÊš[#Ï{+úbº+ÙLîk,€¸~;Ÿ ¿&?C)ú»˜Lñ›M¼©åï*èzn¡u«]ÛÜYébçMòö³`и·~hÎ( 9¡Sö’N¹›S“$„ÔKY4^q?šõxmôÛ=/C¼­kªËdTÏ(…Ï $i*Ivu.@ùæÔéÁ£êrŒDE3™ômÉz]¾iq4—^o’[¶»Ó¡ö,bdœïÉÄŸµ3[“17Êk\¢LVi6ÚõŒ–:QsnaÔ<ÅxñzQ9„µ·n41±Uš¿2Âëv³.†Ô­ìô?2½%c½´ó5»ÜÛ豯)mÍëëp£‚„3©ãÅÕ¶¦YË<,ôeNè;M7ÌšÖæXí¬­aÐͪÚ[è0]D³Ctƒá¹BT€}é—Ë6™ûÙK†·ZF·ªùŠæïW+o¦Eomk®XÈñ³Ý_º¤jµ_ŒDÅT«‰”3À ”‚Ù0ÒuMóÌ¢ØX¿1E"꜒@­Á­fª2’9†ôÍv¦3Ž1Ã.*a’ Wê°ùÉpÕt»Mê»LÑ\7Öeã·Cë<ý)€ÿ³^™v pσŠf³8É¡<:-¥Ÿ™ì–æHoý9&Ó~±Ýi–÷K$¤³ÉÊ­uâѯß-©ptó›L(&úf‰«y®ÛUÑüÏ^WÒô™¡šúdH-¤ä’Iè˜$$-Ú—ÚDãmDñbàáâ‘;w±9,RU-ÕÕ—•¯­¬|¾/ô­&&„Þj·¥ZpÑÉ Âý!d'dñöéd rWˆ—=¿(ªÝ>Ôìm|½,ߥ4 >=\Û/é @«YLP`ÿÞßO}e ¦š%†)Ž—7&h`"Y„a+è4•û7|ØÇæDiº&ã]Yuž±s¬ú:ΧõYädMF™X#‡R‘­%ô”0!a½*»ÕdÝ.œcaCC×ôŸ.èw÷”´ùï.îc’}VÒ ¤µµ–ÒÎJ\rŠUfhÔ‘_vÆ8§âTÊ›ä²o27ùÇL¾±»hgŠÊÓìå[+È£v˜Z„CDP¿ãíý¬¶p–8‘-Ø™ðìǼߨϦkú¦­©éÒë:ìF[éí]yiò;Ž*±ŠƒÉWSË‹ ÊÒ‹…_ ûÛñÌ4ïî-t«+9l´Øâ¬îï®Hº’âÉÙ…gEª¬‚ñ4呌nw¹ù/$”æòx¿ ìì®õ©ÅݽÓ*LÄ+!yÄ›82% ÖŸ´:æ1ŸT®‡À{œaí.7úœWqê^h¾·Ñìm"Š$Òæ‘¥…¦¼4Ä¡€@( r¦_UÚ™.kq¹%×Z¨Ó¤Ôä¹…¯î/¯î(P¬k) I ÍPëFøù}š.mŒl Ù”…J—Ožk•<_Y)ÊGG•’’ËB¨ÐŠR–«ûYa„@Ø£„ýG“ÿÒçw:„·²_éâöeK¨¾·n¨…WëÌUbw§í­T’sÎ@n‚;–“WÑt»–ì?Õ/Dþ­µ¿ORG!„•û2(ë•ørœ˜J]É•Ì o¤ÜXéR¾7¶òX^;òZ¼\£dV=¾íË)­è±´Á!Ô&´ÕZ÷MjYÚB¯oqÄ—.¡%Ek@Iù`⢔«O† Óô¹Z6Ö,eºMYgn«(bŒî$ ¤TvËäw*R×Ñè2à‹=¥ì¤ÒK–$^,¯ÂEiHF_Ä6æØŠò¬Š%³õl ô3r‚ÚIíùÛKj“©4 ˵~X2Ks.‹î`–ú+½+J¹ú¼q£S¶…=’hœ)®à'Â[®cø‚#ˆ¸ÄYDÝÇspö’ÐÞCql±Ù¼l`o­ÇÓj…¯:Þ¦HŽÅÈ(òÞ +yí$[«Ì^:É•[í”qU=×.cVì'òÊÚ[i–VwQê¶“KqoªÆ®ü…»|a£„²Ñª|0È8¤±›ŒÍ-ÅÜÚÆ©Ö‹Çõ¼6ò$¾„›ñ€d˜5A&‡,â&7^äÚibÚ-ÿ¨š­Ü1¶“mÃј® ôI¬P¼Iø~×ÚÛ1¼)óélµIà±½K6Ô£ç-ÔLq5ÜuŠàÔ!ôc%™ èÚ½r|YeÝ´Xüq\}V%{›k=Ô,RÀ‚jTUùãã•Ù¤’67?\ÓΠŽÿ§´À–7ȇ«Ç$NñÊ@øNÀPŸÚÊ3a”Ew°]sÑÚ]YܺîŸëVW«]°„ ¸]ÔCºÿLa[*RT“NIt„K[«8¸¼¸„¥ÒCmÒXâ­X¯~ørür¹îÎ1µ]9á7ö¢çX–÷s!Šä¬­kurP9ãÊ…}NܶÈÊyžrÂUŒëú:YèvŽ5{]NV†®Þúꆘ÷ƒíQvâ£Û2ð噸‘M€ŠÝA43ùÌi÷BçR1[,±Èœc”äPs ¶êÃ5ù¨åô´N@d2é\²³°ÒἊôËgq¥¬†æH/C d¸ìÃf&¹d±ÆyL¯f³W²L×A7˜VÓÌÂò}fÊÏâµ°i žk*üO,ŒEhryðñ€!³‘[)Ük1[È’h¶‘ÙÞÆ­5§íõ[VäóveGÜ•Gõ²‹ƒG‚îãM†áî4«6²[ÍSQ¢{™e9¥ín 5 r>8„OUŒëb¥&‡¯M#ZÁ k¦Ço=ý…Ó·=>{›v-ÕÜì:¶ëL8çŒ.Ex÷EYÛCæµYu+ŸÞÛÕîOêÛÁy + „—ÔFj­>ÒŒ—Œc €M£Œ«äh¼¶¨ËJ¾¸’è-¢+;¨çÆz49øºåY0ŸÄ¿PlêueZÚyfÄ6™mÖ`¸G MbÇÔ¢šò…øø[u¦eñõ׎Êq¶£.¯ ¶·sMo"Ú\Zjò(ú…Ŭ”Že© žœ†?‹ùvè2'41Æ6Ó=–_ë:gåwœtuÕ#+m¬[ýJÔz“ßK§Í'­# Ë'5ßy1›,iªP) hþs×Ú}BÃH½ÕnìÂÅ5ÌËf®¼mB¼PÕv9l2B2àºl±È&ú¶­ è¯–ôøÐy’ÖáµuLj\ÀІâÜÈM޵ã˜qcÍ.)ræ/f£–ãÌwë:s4Ú´‰¥ªY¬lŠðD±‰9º‚œ%P8÷\²|X†ã—F<&(MvÖê×HT¿M#Sý+6‘y4ÐVÉÔAêÂ𢭪A²¿\³w[ShÄd,§Z¶­umŸæ=.ùcóDú$z:êºyyîâ·µ$¹‰èd2"ü-×çÅd~›äÈ“É ¾×50ÛiÚ¶Ÿk©é‰l"ó5Ä–‘[]•¯xn(´<~%VÓ2c% (i¿Dé3Ea¥Ø]¾«*,–PG —$KnÆ(çq@Ž¥4•û.¹8™HŠbj¶g¶z>Ÿ©9Ú]j:Ì·’$ÖG”·ˆmpÌŒ¨‘­A_åû>Ù«—ŒF›ï@ëº%¶³a¬j70RÓN†KCm¨\ß4Œ«#K)©HЃÉZ”öÊðå˜1Ñ<ÏNš%?‘44~_]Ï4–Zv¨/¬u²´¸–Hcã Ò3 ÔÊߎ] YÅŸ~@#ˆ@¤²/˜ïõ]}/t8&Ô è–VP–²»ºŠÚ«F5YUb-Àõå™ñÍŒV÷Û½ÊSay©Yèºv•c47÷Wa Ôf†](¼¶˜¬½ÿg*á㙟6¬fäYé>p›Ëv—ú ¥‚k°‰£UDŠÊíZO܆ €óZ7óf&<àæõ}, 7݈y[K×ü¹¡é×-η§sö¡(f³o‰\ó¨9ü<ºñÍÆsƒ1&;W&ãHØL|æ/'&¿¬ygSÓ'ÕàÉiqª$ŽÚy¾Œ± ¦ ÆÙªì?—5ší6HÂ2Œ€#øzµdˆ ¾emRóÍöÚd·òÛXÅ}­ýZâ)íØª²A?@›V ×2tÆÅÅ!Ϫ#ô¶tÖ$ЧŽÜ¦­m£ÄÍ«l†%Ó^@L.¡Õ¯1ü£Ž[ŠPño•…ˆìœþ‹]SNõ ºSim¦‹ ©ÿ¢ÖÀDc JR"8âOöaGRa˜‚=ÔÃzFB¶奧–õ{'°º°‚[©Ý¹µú©ãõX•€åÂÔãQ˜ùàqŸrkœ)WU°›UÑ&ÓZɬMÜVz}“ 鳨‰$u‚JÕà£e;Ù3©Œ+$MƒÍ1&;±ýfÕ­->K·µ´–æûOÓÅb’GGº~²31$øFeá”d8ܹ1ܱÈ<éço6ù«Q±ŽV±Ñu®vâÞr©¦"[P2† +©5_ÎͦÁþräá ³^ó¥ê–׳]G®Egc"Ú鱯ê¯ÂúžŸÅ´¨KFÔÛ5š|2”j¸\x-Ð~h³ý/¨[Ý;Eduxí­^iYa‚ '„<Xn$tÛ­ ó'”"EqS`䇎¯¼Áo I=­Ý»XGý$ìÍõËveçE` •Ûâ=2¹æÆeTo£l¹Rsc«}cP¿½¾)aass¢Á¶y€_IC žgâé^ssásÝÆ}Ð6Ic¢é ¨Ñ…†]BòÜ¢«L¥¸‘7M¼¡;WLY2LLrm‰ÝÚ3ØO¥Ë²½¼6­%¥Ì^§14‰X#‘©ñÇ¿83Äš Yꉛ;&zäWÖòGtš­ºÙºÜé‘EÅ!¸DO—Ç#Ô‚¬6Êásª=츄E¤P³ÓZößOåo ªÃ’æ ‚ªûÕkûÁN¹ñ .#I…¤Óy²óK·ÒdŠÎY®m‘¥v1´r¢|PÒPñ*xòËDaˆú·n»ÙÿÓy‡Hú¥­îŸg¨ ½HÍq5œVÌ>;YבäªGØ'’…éžq€ñIæÁ²’i2]%‘²žá¤·¹–ÒBf‰^Ý&?lÄÄnX‰|s')àÜ5”Âú&«käBÞ="9g°´ŠæÞ7,GCé4f¼W¾Q02ê[ æœjwšŒZWÔcy#±žXf]FåÔH°MUI5âUÈ㘞Œ¬² 6KbžòÕu 6ÆÉ'Oú¨{¹œ-ÂÊŠJM°qEÐ哯Hõföîÿô¤væâ'Óc¸åo3––)Š¼Ð¼aj¬¥üë™8áÆú²0L 7ƒôºZÄòÁe*»¦ðžFƒ’â 3G©æÄMl/ì..dÖ§±„ÆY``ªÆ_¬Dªí_‚œ«^¹…”™óÙZuYZhÖþ7[´c³F±Å­Z6Œ <];w9õn$‘ÚèZ²–;›áªBŤ¿GaÀG1W^«P3k,‚ì ’M£,51ii¨Ý­ªÛé‘Üz±j6’ó½ªÖuXÞ”.&ýž£+˨ æoE- Z‹éË%¬’j,xVH¥æöH3íÔ€fïKŽ2ŽD²»­6Hl¬íî-ßTòÞ¬‰¨_¬’(e»#7VX¥£_H‹“!QF<‡ —4ѹ)ôÚ¿˜e-­y‚ü'”®ç 2Í!E£e ž€3#©ªû4ÊåBäÌì–y…,WK:'9…¥½ìš’ZÚ¶Ãx¡r´À…ÝØÌÝ6OKdcaugåkß+Å¥¢Gn'•oïbÓx#Å4ˆ£‚iH4TaCÇÅNcO,¡“mÂJM¤ÚmåòZF“ÔƒD–¤ú¶±ž|® ihÎdJFR‰‰Ý¶#‹š>;ûÈ~]Ñ­RÃMÖõ1>Ÿ¬?¨ï%žmr%ŽÙ¨ @ÕwË2ˆaÈdOünÀ€ Qëù’ÓFó›¢j·>®›q–ú*¬Eeh’zo"ÇJÈMyþË8e(q ñw°¸Úû2y¿M†k>d¸k‹˜l­¡ŠÖ(­Á™AYÈA¿ Týœ–hc‘Ûl”…lÌuo+¹%Ÿ^·—[’Ò9uW»¾™ÖfÓáæÑÁSU D4ãšÝ.¦Y,D×ð²ŒË­­u/0Y¥õ”ÐÍå½fÌ]XÚªBÆy(òÛŒ)¤r†B~ÃaÎ1ã~¡ö± £©èöZ0ò¹ÖgÔ<Á#ÎòéH¾§2·8—ÖOï=?÷Ùnùa„d”j)ä7KîµvúKhÞHß\‚x­íç{E‹Oõ¸P™`¡vjÍÇö±> #—Ú‰'Æ;]mæW’ÇHòÅË[6©¨ÜE4µX¾d£ñª¡‘;Ç–zc/NòýYˆŽ‹DÓ¤ÔdÓµ ˜tøt™ËkÍi)šÓPÖR²40…nQÛKRxý¼ŽL„ æÂG‡š//]k—ú†›ªÏ¤ùwSºô¬¼µim-"‘Ãþæ4øØ‡GíW »F€ž¥#(,gÌÖ1ùgQú°d†öêFš"%0ÛÅrãÕ· 䔹Ц¬i™Øòx»NËO&Oæ ]3Ê:bkºÝÆ¥ DD k’ö×N¢Ç*3˜©oÛþïíf¿9äbv¦õl…ÔõK[JM£—M[ë[9!ºr—1O3F8\6ø\2—5Ù¹­3 é`H—6ðæƒ˜’éËocün¶íu­c5¬¿Xky&@Ö©*th]“ŽHé6;{šrG¹”Úé>Yt-/A{û-U–ãTÒ­DÿYI`‘Iky‡/ƒÊ7Íd†be*ܲ„vc7׺—š5Ï7Ühs /CHŒL’Ûë…¢FÆ*>.•ÌÚð¡(Ù(1U»×¼ååâÖ661ÚyWœ0j71ªÉ#ËèUƒµn4%®âÅ eüLely¼·w;Eõ_4Kc¦-ü²é³Ý1¹’æéÈ•>®¶†œj3.YñžPä7re6G¨ysE—Q»žñ¦‹TÐãcq¨HVÒÖ)e!ÚïßÔ,GÀ;ïL׌¹y@lâ× 4¥­½ìðEº–æÉb¶½´Ô#q—7MŪô>hZPÝ)ï“Ìܢ$‚ N¸¸Õî.4=NòþÆöY¥‹R¸CGvc‹Ê¤‡g?²¢™<˜ŽŸp-œq˜„^©¦ÚÁåy-5k«-%¯êòXB±Ë¥¸Œ”$²ÉQÌ·Åá”âÍd½¥*D}H;TÑ¥tÐ5‹pmÆ‘©&‰q;°X£õÒxÚ!×tf§2NKîãÍœ!ÄnÖ“¦kV½Ï—.š)ü¿} ½ÝÚü0MFP1&‚U˜ŽŒ7ûYá^'ÓäØ AÙ:´¹Ðm"Ôu[ï/Ï-¶‘¾—Cµ¹*lb¹Œ'¥Ê¬Ü‰uŒ‚¹–3ñØYá·cÔ;×êI ùu4ÍRòÎîðýzÂ÷]MBZÊÓH¨lç‘b4÷ò+Ê\’Aùc“çÙD)‹âú+ý2bº'–ä¿"’.\ýH+ñ3µ>1Û1ø²îÓ’)†¦°êó ?TŽêòKw¸¹·¸Vv–Kj*¤Aèš¿»Q×)ÃÅWF¸DÞÉ×–´o.<:UÞ±«ÃcæIÞ ‡[V@—I9#ÖŽ:ÑŠ•Nkû_k/Ï.)l6s%C“ÿÔ€þÃm}æP\¼²6… )ðFñÑz ,¬ô­d;gÊ`K†G9@ ¡’Þúÿ]µŠÄÚ_çÏsq ¼ÉèÝ\Jʫȯ¨êü<3#$$ ,Øk8É¶ÒØÝjwvðL¿¥nmT4wn±Å §ܳ€x:u9AÞ>KIŸ˜-Uí­µG8Ì1ýNò3˜•]G ™¥Ñš§áÌIé¥|@ØmŒm¦ZGw«Ý8‚8´Ù¥3¬CÑŽ ,q2Ô†þ0f®Yš@Àw ˆ=¹ôh5ŸFÂÁãš`JOóz3I!JÝV¡—¾`Œçš#i5lô;q†K‚6±]†õUÂÔzsÿ=Ž™ Niq"Q Vò¢Fú-¢}NšS,JQîee$‚´-\‘ŸRÔB2ÞæâÖ–å`²¸žš B…¤ŽoÞ<’rý°S‹&*¶Ý§‡v9½õ @jš]ú\éóÆ×V7$™.¥ºžJRJŽAh@öé™ÓÂLxe±rH Žþý5ÝV.ÝÁ %ÔÍ-o Š!ë)yÒRßc›/í¶ù‰n' Y(‡M½Ôu¨¥¼²—FŒ>•¥ÉËg›Ä5[&f‚/ÍXÞÞG¤éW’Ú]X?Õ¡ÑôÿVÞ’aÅ HÕ¤èÌsîdsj­ÖiÖaµžÿËóýZ×ÌJãUÑn˜•Õa³‹•Ùf&¯9©·ÅÀŒÎ¸N"býÍÛK<¯Ý^˨]kº¡Õ,íͳAq¥“C%øh£ hVX¾ ìä3¸E© ;5Ÿ¨Ú5†æ{(u-.ðµÈeŽèÙȒȉÕ_MÔ˜éð•n'+ãŽAÜY #d—R–âêM>óB׆äÍQ¡–S¤Z(Ö i› jk¿ÚäU©™¸s `‚.Cý+x˜ïDùÎÆ_ÓzpЄͣé¿VA"«E;zlñÍpYkĆPʤüUÌ}>XðÈÈîStv±êÖ>‡—ã€\yŽ[{]Rácxþ³cg Ý*ЯÂþã+Á0eëæ.˜˜n |õåMS׿Ŷ/­ù6ãV[Ma j4–2¯¥ou NAC “í}“ö³/Œä® QD1ñ–Kù‡äíɺ2.·õWòA jÖažêínÕ‚o«©ª<«ð°Ífä–cyؘ›¦1i¢éZšµœo,VwZ…¡µ—ë2¨0]êÇÓ¡ðÌNS†CÂõa*€M@Óô¯/Z[j²Üê@—¶±ÇëCéM©XíäY(RP¬Ä+Ó1£©žIqUÍqša§F°Ôô[ÍKÊò ´1MÂÒI.®d˜Éè‰:Q8TH‡£fÆYȘŽAw÷6Ä’Í ¼¹›Ëwz.ŸåöÔï/$ˆ\G©ÍQ2Ĭ4a¼ ñ \ÔäÓÇn;á•4’a"§,Ú²Ok¨úZ]·—´‚#ÒÀd¿npRÚ/ZQòCÈtË1 RŒ¢ Œ‰¿&È7]?ËçMŽÇY¿‚öû]¾žåÎEŽ+‹¥q"A*±Qéÿ ‘ɪ‘ÉppEc”‰7äÿ.Og¬Ï¦.¯exuf½ÓüÍr²‹k«q¨©UžJ"e^ »ftóÇ0Œ¤(Géó¥â•õkÌÞùgÊPù[[æÕ/n¬nu}T4R‹ãnÏ ÉIœ·/ÝïA¸¦ 7l²ÈEsárxÉ–á~³q–—kt/‘¬l wòΩ8šîv°€SÓܧ«ê…XTf,#ÅŽG¨éÅúœp, ¼Ùæ >-ßL’ïô½´Vº£zwk$q´Ô Ò½6Yäb§ÈÒiìJë¹´A—h·Íæ5Üêº-Û¦‡3Gqzü~ª³_/)c§âøŠ¨b3]­… <Ú¦7K4¸ì´eókjºn›ukqu>¢ fg‰™ hEY}EâÔû9äÉ’1ß’ PQ\^G,šö¥wªÙÉk 7)©ZÛ-ý½Åä¿ `ÄI HLt¥{¶m®€)»b«0·º[y4;ÅÔ¼ÝpÇ”n¾ŸÕ£¹++FˆG(D+¿Ù_ƒ*‘âØì’ØOp4kKŽÞoN B;“)v "Àœ™xŸ„P7Ùä2ÀJŠ:[ˆëÖH,îdbœ;K :†ãUâT9æªëÞd€“ê[¡éÖW‹<–r¤š®åa¹GEazŠ•AˆâæÖ|’}6šÚÏPKٚγ™ÐÆDR0rº #.æ›æVYP¢¢v»æ.IåYuK=Þ†æ8õiºž{”céIf)‰¤B °>Ù\1’jö,Í56±¶×w¶an¯ ­õ¥šÈ×*ÈÜài4 7 2y` Œ‚æßY—VŠ&{4µ²? LÏC jJÔ$‡_äß21ðpñ»P•¢­L¶—U°{&7©··ÓLÊò$ñH¦4Z ꇎSž20æÌ Šóe¦­ws]8{"]FØìí {µ…¶øŠ) Ê»6 11 Ùâ…›R½”Z$ñj°\­­¼QýXØÎœÍÓ"zS«J€©Ózä|?]°•™)Ã5»ù–öÏ\ÝZ\"´·0£B²J¡$¬Š œ|2p-¾[’7d•n«¤-Ÿ˜§‹M½­®½•ò Xî’?WÆ2Xdþj«dDDb(,I!)´×‚–Ôu»²lÁ’ÖY ^”ß\–³¨,¼XíÌ~×ÚçÇÄ*<Òy+ÜIªÛHÒØGúBùý¬ÜË:ž‹–!‚/)¸ÌHÆ9"D…3á'7º%…ýÛÜ‘wwi<Ü\:É,ÑÅu|¢àÊÇì§ìü²¨f–:ˆª#f u;//X é¡{e¼F{‰«èB³?6Ž rn%š¼³gáAØoÑ”#i®›£ÚZù»Z:A“QòýÔpG§Í§2Ëoñ•™ˆã²•<^Ÿäï‡<ˆÆ¶¤OfEgsåïÑ—zš}Ö¡æ˜RIl¥‰ã²¥Ë™% WáGUs÷fºVNÍ`©ªé_’çÖ´o,ÝEcç[ˆ†&©¦¹tý5•[Ѐ1¢™Iå÷ÌèÉÂ21ÅÆÈ£Ãe3xì|×+êÆ‡J²Õ Ï­ÆU%†ö/ÝÜ@!Þ¤ü‹©Sxc~rDj“;Ë:UÍ®œtï÷/«ê·¸™Y#T6¬È³JØ"‹Ëö‰ÍV\¤dç€í,x4M Ö÷Ìw×n¯µ÷‹ôyktçnÎîªÑ q@CžÙ— Ë<ü8 ŠboeW¹¾ŸÊwWfßÌ:6¦4U½˜´\ £ ¤cʬWµrÈàðs#µ[;àÙWóü.¼|¤=]5»¨¯íì`†«¼tVoLÐ"ÏÍ€°Ø0߈ró€õ’z&Ö^ó‡i©M©êê–ºV›l–7**=û z’ŒE)”œñÍ– (ÛNÉg£ÜØXéw—Vñ^ÞjÀê²Ñž9­îÀe¶‰ FV—öM2Ì™ ˆÒxwdz•Ì~P2ë:ƒ5› wžEä÷PÌ-nUa•>ÁAñ~ÐÍ~œô#Í‘Kµo1YÅ{{g Ä·ö7}cFÔD “Åkp mйð©ûiá—Çž(ôÚ›Ž>ƒ¹ˆù_ÐÖ-’ÚæCg´ÑÊ!iÚî‚9ÚRY‘ÔŒ¿ìK`Ö%\–Osªy·Ê¶Wþm‚Dk¶šÖXð‰,䜛p**œ>‰+’Èc†`@ÛK„)KªDöwßV0µÎ“iv¾M$y&V‰Õ]–‡œ¥ÚË!•Ë—VqskQ³ÕüÏç˜õ›´¿WAx‚P‘¼zœ*N±(âå¨CŽ™f„#(Žrra”D%¨ó ri6ŸV–Ö¶Úu«gžþF+u$‹öšùú›}œ¶#„ÜÎçîè.«tŸ)OåÏ/=–Ÿ3Bc†=gÖP‘ ªÎK1¨¨V }9QÕÇ6CcbÓâ‰Â.ßOó˜42=5¥¥ê1ZêQmRÝý3°¤+¤,¯U•8¶] n®‹*¢‹Ñ­ï#¼¶‡L·ÒtÉRÖ äh¤«©*¨qñSÛ53˜ò<Ü[1J#¼–K‹Ÿ-µ´÷’Íñ=üRˆZ»Èzz…A¡ï™#§Œ–è“Kmí´k+™ež­ëX´Ä¾f ëÜq~¬¿ ¯.Kðå§<Ìj>õ)zi‘kwÓÛýLë3ÛÛ½µÍë3„¬F‘—(Ig;q8qØ¢[؆i­É›is'Õ”Üϵ‰¥r^Ü5>°ŒGQöIÌì²$5Ë“ÿÖÛiÚÄ1$>_‚½>ÚiVíP²´£‚‚ÜÚzñþmóͧ–Øìòãb–jz¥Æ•g©ÙÜÛÉ¥M ÜmE©xäE¹ ¬¥Ç$ H!‡ì¶_‡‘FÛŒ)•¦›?šmµ 2ZHm^ÞóÖd’â4 €ÅH^\Å·sYN)Ô\xÊBT££]_ê6·6zn£:ë6²Í&“}4|f§î-§¼ã j¦¹•(ˆÑrÆÛ§:.“©èIm£¶­g˜áº’9̰ ŠH ƒ4`)ŠÓ–cÌ ’â;‰Ý©y‹ëígm¦éWZTÍê%½¿§Ø]ÙqeŒ»³îÆ•ÈÇ$›Êy&zè™ml´©î%ý-ojÑÜ$_¹:! Ï+’®åô©ôå3‰ââ­œ`7SÓµ{íÂãKº77ÚmÌH×3ˆÉg<_ DeŒe‡ó|>ù9iÇÔ6rLIÝjÎ}{CXfx¡™by`¸·f¶\«•vr»:²~y-<Æ9BÆU±EÍ,·ÐÉ£ÝÁÌ-n-­59ž35µG$’(£HEyC¶ë•ññZHÝkoiëéZ¤w0Ã{¤ÑlÖXÌp^2J7V‘èWF£mƒYââ—{_UmN[ëëIu‹«{Û‹o^kS #ÓœªFA_µÈår$ k&КËêO$7PìÞÈáß“h®c¬^y¡xË®\Ç%¤+ê]78á²x®vÌpš‚z¯/§5£ofP€æ©¦Z¥ÞIæK©."ÓÞ(¬š(î ·0’³F%”–ãÅGÓ— ŠäÕÑ[帴™¾¦<Ás, mq ÒßÊ Æ–¼Ï¸  àrÝS†Ûey&z¡äÔ|Ó§Ïo Ek¨¬W2ÍìjD…eåEæ2ŸµÓ„&9ÑmŽáa§ê7rOgåû”xäç.‡¨†6s©|ú¬é azËo ¼ºxŽ9@Œ8l –ãÏ© €@ˆì~-•³+¹ÒàK8ulÚéz©‚89"õa-èÆE}ZmÔfÙáŽôÐeH-^ÞSD„Ùê¿£-™ìç„Û€O%¢Ò@áÍUê2ZlžÈ"Ê`lÚI§®…i«KªjÍ£^´RI˜£½µ¹¾‘hÑ’TP•eÿ'6œ€ Ch&šDö:6Ÿ%ÖsøÆÌË+Þ\©‹Ñ‚Z:aZAc\ÖeË)Έô—!Ý<ÕüËæ];L…¼Á"×êÐêV¾g…$µYæu%´±(nA…QˆâÙdt¸ïo’Hâ eΧ¥ë:N«{9}9¯š5žÖÍf¹¾¬ŠœmBÓâ†FNjÆŽ%r¦±ÜTômq,¼Å¨êz}•¾•¤Í ÖŸëê‰êÝÛú…ÕZUÌl'ìåù+óû[̉ÓmÞËG›ô}Þ›­Ì·ö}ˆð$÷qðÚ¯#Ô3õ‡¨7 ¥¦`ôd>_¶³²üÊ× Ð­¢YùnæúúØó-ÔÈeä±®Áj´9Qxnº§ŠÃÖl®µƒc¦=°–+Û1c¨C‹װȲ¥À–Bk7èû0øs'0HC,uÕ’C¤Yy_ZÓ¼˜—ö·úµÔ-Ι#ÿ¤G¨¡3¦hÈŽ†-¹~ÑÌ|üR‰ÈÖfL·KµTÑôï2 íNäÍue¤ú6Œ©%·®÷ž”cÔ܉#o „<_ËTG3ñmÉ.ÒÎ1Ϫ.•å;Ëѧh2^‰uQ!(L–5 ¯@@©%‡ò¯Å™:#á‚@õR#\-ùvãX޳ yJ…¼¿§¼V¾«Êqë[ÆÒFÑ()*µQör­(ð„ç-ÉäÌa¨ßU-râÿRÕ$òט`¶[Ÿ,O«¹qr¨ó+õË&€É^¼iÖ¢¹™‡0â2†òäÙ(Âú²O8ù›ÌQXë÷þNUÓôŽ=)Wý*ÖÚþÝÌ‚ª9¯ÂTf¿M1æy°„Œö)­„:†«¦rYmµ”ÓÀ•¥1Ï`^ÙVI#•Þ•-Zªöò첑ºäˆšuÍž—ssyçP³Ó5p$ӵ뻅˜¬­'RÔ|1$li,d”' ¨‰?kY,̱]ð¼›U²´h.F›ª_]¬Š_Sƒ™wa$tnCgÌüq2W1mÉÉw¦ù‰¤„ÛÜ>Ч³½5‹Q…"KBA!ךTÆÛ°f·û¼&4Ο«nÖsypÅ®Ùë =¦Ÿ©ÀÜ'#ÿJeåFVãýåzqÌéÂD‘=š·‹%±ôm®´Kƒåû›ÿ0[Â-­Ñ§‡ê±X\)Ž)®Š 0w4Uïö»e1Ç鑱_{xˆBÆ.´xõÛû;ä’^;ýCH”eXAµ¸ŒµMj)ʽºdFX™H> MʶynJwy€ U¦]ÛiP.¡uru­29Åc•I“Ò¹ˆÀu¨¨å×/2•ÐÝ´½RÞkÏ0e¦ŸsÙdT‚ÉÝ‘£dØ”2mü»á8‰[ÄG4ÊßBÓ`Òo5ˆ!¬úg×n-í% ,’4€ Cð×Óä±ûbeÃ.N,ŒItXÉ­lï#Vã,/õ_P´Ê’ÂK»Vjxï°ÌŒÆ29 Eê:Å„ºf§š•å‚âÝ‚½´Ò«~åÇt$lÜ{YN'˜j”ÇÖíl#}½6"ŒCt¢å-âGUR•_ˆâ FøßRXx}É—­l<›%΄֢mb๼E6ì`ÇZɪøHG%Èê²b}1nŒ¸PzåÕ«ÚZêVUΟ§RÖòÍ'2[Û]é9bET8*ÃÃÄûÑ)†»†i,.!¼Km7Z±–…÷—ƒËýÜ‘”RV Wájåƒc°Ù€ ™í­ntÄÓ¯œZ\[ën>‰D¥×‘¥M?gÙó 5Æ^„Šf]&ô¹&´Ò`FžÏê+ÊbŠÿ¤kBÇ}²PìY N–Údº:v©%ž¢-ž ¨Û,1Å"~óš…øXž…¿–™=¢@­‹.‘ðêš¾±oÉ™gšÅ#wúºòŠF¦ó d ž$|jzù^QŽ2¨´Dn¾ßM¹Õn/ÒÍ­õJÎÐ\Þ3ÛEmê=hÿ¼‚ê´ø‰ø²ãšDWFË$RóC3½ôv²O?¤ÙÜ@ióS#·Â¬â¤lÜ|2xõ1êß l„¿¶hÍç¤e¼½·’w’_«Ë~6¤Q> qe4×8ZO§êT¿Ô.Þíí~±¦Å¸˜ !Ži®ÔaV6¨JfvÜ4ÇfX—ÖË­[êÑEmnuE Ð_A!†Kx¥ÀERcg8Ùs\eÀ}Bé…ÐcÖ o¦ë7}.tÔ­me:uÌ×1›gK©™#iã]ÃÔª>ùŸR–;‹.ˆíêrAjúÜ«c­ÍX >8€pþ«GÍÚBA¡íLÃÍ! ðŨP:Íý¤Ð‹y GÓí™c³ŽÌmÀº›™L•+Êœ¨Ä´ËŒŒ¡Âåyºþ/ÓÚœ¥[ÉskqmK{ê‡cpˆÁ0! Pì7ÁÄ7çi’Yt}SDÖh×RI£oot–ê— ‘TÈÑÒ¥xÿ(ùf@Í#vÁ «`MÕ¨K¸Ôd¾2ª[Ã$nK£HAãΕøNÿRcÆ8»b¾µ»³ÓîõMBÒ;X•°»b„ú6mÉ#™‘º²å±‰˜Ø·ƒ²j¬ê³ù†xÒþæuS¡]@ËšO*­$häzž çâaÛ1£ˆB|#n÷@ZîëJ´ËD‘'X v~hÓ’QQwxŒ¾œR8e++%Y˜æV<‹ˆê¢  ¬®tIšÆöÛJ¼Ó´í8 X®d…&µi]È_Yªi"«6*=²R„£IÜ·R{«ýYfI5‰dŸOôî-µ)9DeÓn"]‹¼b¬Y‚´-˜8`yõûÚ¦7KeÖ=K5µ;‹‹°JYÊ.‘ä““(iB~!Bžl(2±Ä‹´ˆ‹ÒNÑt”ó_—,)¬nú§§9›RwgdV^D§ãÔJæ6¦fS”½Ì+tÃ^×tKY¬/á¶{sÍM*ÞM rš;sµYäQ+V^*?c,Ç‚Fìíd ­¼ÇqjI(†ÞÏN[X¬¶êež]‘$.¡æÇ|†M0”êîØð’²×­®ô«—Óë/š<פ›MU¡•Lö c0£õnNáË'†Xy›„VQ¥}ÉzU•­¯éˆ®šêTõçk™Œ°Ìí'ڔ൛¦Ég¬êƒªÅG»hX\I!#á*Ej»žÙ µo·s\¥EbÅkg¢ nï̺ž±§YÜ^Üj¢’ðYÈDRDíURGU~¾Ørå3ÉU°LÈâÙ,¼µÓ[Gµ´¶h5‹}CPIï'Ô.Þ{+¡8ŠAâÕ¥‡üfá&DŽL({Ém‚¾­õk»í.­mgpò#ÙÃ|D‚VQÈ¢W¯Û¦cÇ‚ÆJ³ MWÎv:t躅ËÇ ´wŠ¡m.‘«uP -Šôø ¿hc0g„9U·íV¿ËÉq¥>¯æ &ØX.‘t¶ñÙ܆¸OÒœ„e T¨CF 4úW–FTví2Ý”ÜjÚBêZt­ys¨êVK1*-ÍÕ¸i=Z°â#g4 \Æ„|RHÚ!ª1I,.ô™"·×®-¯&‘¬ž(S ÜOÈ:ÑiFn»|9VHÎ$Ä«T–ë~TÐôå·Ô4ˆ§Ö4ÙÊßY¬œží °‘% Nhis2:Œ’ ¦Ë ì|Ä×þcÑ´©¡’O,ɧ¢^…˜°¼d¨xò¦ý铞(ÂȦuK­§Ôui>§f¶Z}¿ú-œŸº‘nly,oêÅ!¹ˆ ¦€6K@µ2Ë}®iK}¥ù~ßPœB9Y« Ì’¯Ù£òwÁ¥Ç*‘ ÝŒ™ÒýVîÒ}0Ú¢Èúż¶äéÚ}n8cOˆ,«¹wPj§2ø"r_CÕ³‡}ñÙj²KtâÛŽ±i¶‘ñ”tÓ$(èðDÇí)í¾ùt¤"@Ž­b@JŸÿÐŽ¤K¦Ë£§ÈöòGt÷p^BnÙÊ5\ÆíŠ~9å6e“ÕÉç7¤)ÓÚòöëNô×Nµ¶õ¦†ÚÌ 1,ÜÃÜóîB§a™’5¿5ºCþ’ yª¿¡,ööòCñFýÈ!Š"¡w®ë•ž)UóO‰HY¯¯t0²qyurѵÒCýÁ†H}>2Fßd˜ÿh‹®82âF?ª}JTkDjL¤†wvRѽ^_a©µ1 J,,mFÉ4õ¸Ö¹O%² 3ú=c7––s½Và½:ÆOºÓŽda‰âÛ—ØËŽ2O¯ü¿ii5½¯1u-°¸7ަ(ÄèK‹‰5I–œÐý–å˜)™4Ö# yìƒMF[É®u+OOPÑî ·…´ëÃK«s+(ˆÔ3FYj~-ûŒÊˆáˆ[ûQ yzkÔš)]&k‡ ì¢âyTÇéñ5âJÐU«¾ùT¤x¸:5pÚ\‘ݼú¾­y¥{ih°ÛCÉd`Íì™c`ßÏöskǦG„2ý"ÛMÔ<½.‘ç}[Œ3]A-ž³$%£‘!ZsFGUfí¶j3K‡' n㌋.<¹©ZÏq¦éÖìÖ@ÖðYQÐóFaZ·©BÜk\°e7—6Û@¥Æ‘{l„Úúzá3ÛÌ—±H!ˆÇEõ‘«|$€‡#¼%wm£%ŠN4‹:E¥²¼…a–Ökƒ%²¥Ç)E5*Ûr¦`æm¬õÚäZž¤‘A{sgkhÑÛÀyE Ì#ò²Å±!>ÊŽd`;oÉ“µý§B¯¤Jn•’k)$ºFw‚…Ei±5DëÇ2ç(Ë¢¦Vú…ž„©é5Æ­è +xãU‘9Ly ×»lëÙ‡¾bŒdî 0É2QZƧms3YÛÔRšD6Üc†ú-¾³p©öjçM²ÌzƒGæÆåL+X¶¸·…4ë·¼Òï'‘RK¸›˜M¤æû¸ñ8õÍ–˜ÂG‹›x2?NÓg¾×¬ôÏ­BÎ-MPF%õL,ÎfYGÙbi±,ræ0ºÔæ—Ã¥>ˆšZüv×VrÇ–ñ¦ŠŠú·QÌ@Õ)Å—¨G#,àáVÏN ‡Fž%ZÑã“N·ºs¬XÈcPµŽhy1Œ±!ãßšÓªÿ•á°LúµõAÇo}ge ÚðÕ'wŒÊ浚$--ÖŽ˜Ú•ñÉø¢T y6‚¼½åû}2ãM6†çÌ o&£§ ™¥²ž#´èëP?uBɵ ¯&c;+ÇGtºÓQÒ¸Zy†[QÌÓÊ.fµ-%³¬qòPñnAä +”Κ4nÑÂú}œÐ›»»«¹&¼iýTE:cæßu?†ËÒ@è’S»«ßÑúŠ]éË ~Z°aF†5¸yZOܘØmN\‰5é×1"Ëš¤ªÿË·¶zÃCws%ÌÚZƒc¦]0ú¡Œ«:"ɱ<ÍB×í}œÊ®(€EôÒk­7\Ö.ÖâÆÞM:ÌH×Ú±žÜÝ£U¤pÅJ~ÍB“±ï¶gÃ>]ÿšÚf'´Ó|½«ù¥í4KV»–5}FîX¡‡ÑõdrGiG"¿æºr •†‰JÕt Rã]}OÓõY/5hæ»G¾¸RÑK/.3Dcâ#Pzl FІÅTÆ’­KOÔõM'Íšiס%Ô+5Å¢Ž.´éíµ2q*Ïñ‰Ìœ¾ Àn„ÕüÍ}å=F]Ëló_eÓä‹U>²AÚÆ}B@9u¦_†ŸOégl–IçÒoím4ØmÞñäœi—1²¿{˜Ö)Q&O³È€È¬½s9/ŠK#mIlþÓô–úD3ƒuõ¨F ¢$ôäŠ5bLeX2šv+•ñ˜ÄŽeÛó‡é£M§½ä1˨^*$“Z¼Æ‘ó F«T âs/ §Â$wòfFÊÒþˆšúÞ{G{Фú•âD„ÃñFBw­CU¨œ9qÆr\ØWYj­õ•æµggam-Ì0F–…ä[—v1GëB92_¹<šheb[¥’yzwͶó\\™£·†xµˆ$Wuôã‘Áœ+}…*  ¾ÖXc,xŒcÏ¡l O¨NgüÀ»“Vv>R²ŽÛNÓ Rci­T§§)Š £UFR 1bϪ*’Ÿðí†d#Ô§±Ôµ VX¬¬´ÖxÒ6˜Ö~Nx*ª¡é³e’–IÌò®¬xÈ*–âÓMÖ4ß.M¥ õ›×Üiò}oM‹Mfà­!O»9Ègãž>+ÚëÍ@<Ê–·åþ“«Ï¦hú6¡¡©ÒGÔ¯®ˆ·µ¼AêAè€ ˜yšT}Œ¿¼H#@&,ž]^{o*Å«ù B¶óÏõXôɯ}DyÌE®fŽŒ*@’.]5QÒ˜îȰ_/Ù] Fú_8hÿ]Ñ#ˆYi7UF°I\Vàñ«1aÕÛ|²ˆCŸV\]í&Ö´Ï0yJÎÚYìtô·¿ºŠk¤[«·ŽpŠÐNKÇâ-ᘧâ8ÁÝg¶EiP^Cx$Ö'¾úÅ-ã³™9[Dµ+éÆ@Ø k˜9fc)„A+%»ÓãI/£+k•õHBLçê÷¶åš W¤ Ž<¿j¹8ù©Š–Ÿk§.ªú½Ÿ¯k§ÆÕLoÅa5x£S^Jbz‡é™— X1¹¦žÖÒï^ìÓjqÅ CƒÉÏ‘xˆ'‹íAAóÌ£R%d.µª½Ü×W3ÅuZÅw²Èñ‡äê¬ÐÕ*§ì²ïBTæ,?wËrŽ ~ƒcs¥k&ö]1ÒÖÞÛêòI ·à/+\„;©Eúi™2ñcàÞÛÀ¨Ò`y붦ëK´O¿w’êâ˜[Çê!1¹ ô!]Y]êöÊxH°â %Á/˜ôÄŽêq¸=´•K¸n­ŠOit®yDÄüp·LÉñc¦ØoÄ’ÿÿÑ'¶o©.’¶/%ï¡y]"'522ìž«`F)ΔåžS#*&CgœÈ BD=™$Ô#ŽKp§ê®¤Z*10\s&•,[Ã3ôñ¬{‘wÍ1-¨Ü.}ie,¶Æ)¡[¹$ú¸ ,%P &Bßø¾y J0V—Û­ž¡§Ï¡Ç§Ç«§ÜF–Ö—nÈn¦¶c,Q£’µæ”­ydbõE<ÉF£>“úAííá³”²Žëá†[Ò„ú*{05 AÄÓ}òpÅÒI$öRY_ÞZ>¯¦úk«ZÑUÝm廑V·P¤¡·ý¬ÈÉŽXãé(àÚÙEž•w—3^Þ¬¶úe¸ú¼p- ´=VY£qû,¥~2HÄ€ôã“à;7$ÝõzÚYÉ †×LÔn5Ô' -ýN¬~ÇðäÇ[H¸ƒKŠ{­e’ÚâÜ­áz´Lö ]Á Û(˜â<%1—zMJÙ¢cgn³G¨Ù›­Lδ’71údŽ´ ñS–ø&YgÃ|›Ñ5ks1³¹º´FGT¶´x [›…‡ AøePI«lÝ2é@ó ¼ºŽ£@%ÐoVÎyÚ`oÖrÉrŒDô¤‹¿^˜! ÝË’ˆ%Öš„VÐI©ù[P»¶Öu‹Õµ¾¸¾Vˆ¬ôþ눪´M¸ÿ[2æ?†[€·©]ê+®Guæ+D¼Žê$vöèg´,ØG ?ôéNN‡üša†8ðÜvdè…²…õu¿ó“w-®Ÿokpm#´×VΧû©QG=ëðÿ>WG$ˆƒT \yͤè‘V9ç¶Îd‘n­ÈTE(;©öìöÉKÓ*¦S òÛG¨X OŽ1¦ÌÀ®™1â–W‘˜ìÎ[~ös_,¦7&£"R½zjÇX°Ó´ãú=mêÐÛ}a©)cJP²íOö>~”Øâ“8KuúeY®¼µyÂÛV¾BºU­º—:t#™‰b@%»üY–I—¨rnJÙtŸ.é¦ýíÞDMN¨JŽ RÑ„Rñªs þRŸòwœD³K†ömKôÛK;û ,,¥+-Χq(ºcÊñ¤Œ”á°@@ j‰S‡S—‚‡=˜sbÓѶ²ÑµUº¹Õ¡“”jæ#o$ Á®ÿ öˆÜ³&øvaÀSi/®ã›ËÞ…°¶Ò,"»·I­Ñå '”²Æòõ§Žc¦U8Žgv*RH-/®ô»Ë(âÑ58ãV„º~áÕÂÅ$oX±'í¶JSˆ‰4C.*æ•jòD~®-îÙ;C|×*ïH–=äÓ \jœs'l1õN|Á{£&¥j+<—Q%´+®iööÿ Ìñ…mö*ñÊ0éì›j–æ’­JÿôÍíÆ˜=E¢‹ƒ12ä°q"C#OŒ ü{«|9d@„À<”ì˜Ûëö¶÷Zµü¦üê3ZÛ´pFYŒ‡Ò1AZ'&'šõÇ<"j;04Y‡”®îþ§.¹©[¶Ÿdš-Õä©y9ÚyY`CknYÕØž¹‡8ˆšŽå¤ (».ä¹Ñtu©`‹Nô§šE…"õ–’OLÿ0ø—(—¹„ÙæÇì,´kÝOX×a½¦Šc ¤ÁÕm–Û‘•£QÉÞ2(y§,\<œd”§Î6ò~“šþ[K[2ý5{b¦Ina#ÐuT;2ºŽi³8ÌÍ$öá'w#†¹$:VŸæ­Vîâ+ù-áòìÑZÞˆ•ã½$Kõˆ-Å Šš×ˆë› dÊ>¥ˆ±Gš~Ö÷7š¥ü|Çcy=¤zuÃ̰±»…èðܳqô Jª²ž´æ& ÅzJcPÙ)Ò`·½·rè7º_‘,ï­íµ+yäŽkƒu;ibTUË( P?g3rD‰ó š-êšôÚf¨·Þd’A¥³]èñ=¤Þ-½¥ÁêÆ•ô• S/Ä,¡bÓ«mXÓuhn…õ¬7w·]·Ô$d{KØR2¿©Ç…QèkÛ02T 5Æ6-TßjúÅìòÙYÖ, `à fKKxc%XœR¡nÃ1#ã¡ÒùŽû_{{K8îÞö Iít½iøÉuc~è%äuøþ¯= mêƃâÌìx •íHáFëš=޽æY¼Áis%޳wfeŠèð5Ū¬ziZ²Há¿w÷eX³p„ÀÙŽÁ¤ßYÙA¦KqõÍ'Öô–xž_P’6ž)&äy·*…EoµLÊ—Ô"D¢–W—PÝjú>±$ú»Ã%Œ.pÂ)tÿø¦f_ç°x€)†ÜÓ/T‚ÆRµ¸•õý-ôI®ô¥õd…y,ÑLÑ9­#)WÛ®v½†ìEÒ0\é¾°oRþûO¹–Å„¶¢´i£UGT9+1 º|<²r™8èŽ'"±küŪÁ¢ZCäë¹$´Óµe„ÈöíqpÒÜñjGÔ—…wÇKŽDqG£šÒ„þ[‹Ê~Uk³$ir±Gj—PI,_ZF‘^!bxž`¼xrN9\u#.BD  {O2N“ÞM{õõn“ˆŠÞ,ŒCª¨ð³VZ}Œ„óB;SX}QŽ-ItV-7ÌKp!Kæ¾f”%À °ÊBvbFêÝrßW˜ÚÛÁ¤>­«XZh×~f¶ylZ[K-ä7!Ç£n ˜‹Å¿—߉1 QDÝØi¬jÜ. ³6QŸªIÀk…[‚§Šò¨¡¨‚¿gå•’c@ò¶ ’œZj¢4{mFÖÕ.¼Å¨©„Ås‚8¸Ñ. Ä©c»˜ %2NÀ1ŒødŽ:Z5¢Â5(n!•} õr R…yÍ V즮ŽjŽNU,b 6ÎD›@ùƒÐÑíµKû[Îò’[3lì¿»C0a°c·,ÈÓƒ3ë cse  ·°Òµ»EK›ˆíÙ5Ãi*In¶×¹d¤·ÚÛ¦ZH$Æ–g¹3:Nµ¨ÔãŒj5£Rΰï곓GYòÿ'0ŒÌeQqàJT6¦¶uq=¬SzqºUf·EiLQSfR{‚/óflݸì—iº›Yé“ë+¨I0¸O«Ea4K2<+IèÊô¢’ß».z òÁT–ïuÚTͱɪÁˆŸOyšÞÀ­ím'pa,òî˜â¥C}ØrÀHÜyDÜŸÿÒ#:ÕÕ–£5î«¡Éב½„ØÀÁgª¸‚DÈMõÏ.8¥=¢vÁt\¬¤SÃcaºÔ4élmî¬Í† ®©*# VDœ†5X(î§3!3!ÃŒ¤ÝY4¨žOTëó\jš»ˆÍº†ŽÁ?œ¹ Æ6ŒŠ¡^¡¶Ê§.!ÂCAR:ƒß[ÚÛÙË Í“Ë=ÄRJÌdúí‚õ‰iÌÄ2xñJ$‚HÙ{u±m—Z;{má ®þ€¶†èÒ)¨¢®Œ[âãS^Ø!,‘Ÿ¥²v) Ú~í4ñKr4þQÏ$Ždrá})š'+ÄEDÇ®[<„Ën¨1…©Ùµ¬1ùRi¹é÷¶ÑòºŽdˆÄ 7Uâ R£fËg ©Ë#*IõëÝËw¤kÎom§ÓÞµ(ašÚt )†Qñç‹8åÇ/ÅL\E0´Â{V gM${yõ +8n4NK/1°@Da”òåï\ÆËŒF$c‘a{«ybòßK½ó—ìõOA¶’u¥¨YPÕâ†éjJI^Ÿ²ã,È/‘¯&â}(.-'¾Ôô9í¥Ž} Ãýj;–‰šÞé䌫™9z„Ñúp rðøâyµñJ”µk½D]ÜGn«£ë4 ÂÂ{x¥Tˆä4ø‹ b)ðœ”`þ&bêÛÖÕ!ž2XæÒô«Ët™ì­ˆ7ÇÔ^))Ú‡•*å¿h{àÄZøŠ;FÕ¦·Óæ[ky5-u. ­·. ³˜# $ŽÞ>ÐòŒ¸©$ÂAé½Õ“3»Î¬¥[Õb\|B™(ÎãdnFËsO¬jm°¾v»Óf¾³¸‡PµôÞE’ÅËYX$`Ê~Ú娤`LºÒÕ¯¿ÒfŽòæïA»‹P¹š&‡O¼˜<’Ç Îe—÷ODB¬ü–œ—·,®ZÊú›ælRS-¯×.ï<¿sªE{¨%ý¼ú„W!†âÝ#$ŠW`"eÝ$@7ú3&9=<@sk„xvMÒ]Cê†<À‹¤Ü£ÛM|»ò{~uR íÁWíuÌcdn«i·ú…®>§qqaåíRxì¬î}+—´·“÷~» ógSJÒ´;à˜¹Æä%T¸7Z§•çÓíSN¶ÓÖORÌësk*H ”H'‘«/ãŽHÆ[µñ‘tËRó&šªòÚÇÝêo"È-ýGýÔ±ñ ¥Mx)Ì“ˆ‚Œ€…h´-jã̺]ô-(„\<–rÓˆ,,?ÆÙ%TüþÏ\ÉÅž4Fí¤v÷×ߣô]KTV:”VíõÖœýn²ëŠNáЫ‡¨Û)Í_¥Æ™½‚«]\6­“©$zÆ‘kkH¯5mo^2Êf¡àü@dìÆ«¾_‚=;7Ãm›³–ÅtX¬'¼{£bÏ6Ÿ*TNªÃuB*Ž* óDñy±2Þ•5ëûl´ŸñdÖ÷—6öÒ_hvä8Vò2“³Ü(ã"ƒIP(¨©ÈàÄq_‡×êLrPÚ^«qw ê7–í4ø¤‘£AëÉ-ÁanR1Z*IJý£×%—6>=V™LŠ¿³Ò®µ†°Ôœ?™-äHn5.?ª„Žœ;!«©Ç)3˜oM5És§ë·Vš}¿™­­_G„ßzv—.¡n-æ#n •wY²Ùä³kv±¤ZizUüÒI¨ë6¦×Oµ½"ƒÔIĄIJ¿ÃºtÉâ‘ÈwÙœTôý2ßGÓRê(tÝ^1Ü“éÍna#ÔV(OB8ñʵVO-šÈÝFé.¯t-jMVêkyMìs:[ÂL±NµeÝ l‹GéGf8c‰¹´nkI·lËå8žèëW#Zš[‰½©Ç¯«© e퓆Q \ÆÌ¸X•®­­ùdÝÛÙéö3Úó‹ëÍû³ivß’˜ê (hü¶ß2Œ!3Ä¡~töÓî%‚X¥‰¹,I}JÀõåµ)Ò™@™7 0ßA’Ü4¨–ÝО(øgH=}²cÐwbNé>ŠÓévé5Ô„4“^FZJR¨èy ‡MŽß³¾eJ[X ‰¥o5ÂuFÒÀ&ÊÚKMWÓ€ÎÖ€5‘Jî7ËpLcü˜sDÍ%ËOs“!ÓÌI¾¡§²mEœó ¨‹¸ãB¦ ÃÄEÚ$R2É­VÚÎ] çHòÍ„Ï,ꈞBxšV…êh¾•Š0ˆâˆ– ÖéøÑM®€¶]½›Çs·\¤œÐÆ‘¥CŽ45Þ 2ºdH)5óEõ‰5F3=Ó¤}XÅŹà’* PŽÿË™™º›"iKG–ÎU‰&½ªÿ[kf1Ç¿«²úf¦¥Š±§A\”Ï m¡]jɨMm­‰žÑK†¼N0Kš±°y#R*Åú+†@%!Ì0‘µo\hwqj÷³i²êš#™ W2‡Ó.Ê ‚¤Áq+šÝ5­þ˜ò£A©è7?ZÓ–ha¼»W-þ“0¨2)yq­28r’$Æ`óB=«jqÞ-ô…ÚëPŠßS³‚PÂÞ9`™\ЭÕ¿g2ñ޲GIÑÖÊQvbºÒ¯n4ûå/$a¸ˆ¡N/OâFJ"2õH qlm´öó³3]¾¯ }lˆˆ€$Á švDN…yÓÇ+žAŹ6­c>©q¢ÌÚV 7K pë3ú~­êÛ?îЫ)j•n\—ìÒ‡+˜á$Ëo豺Ù7ѬѭÞIdy$6—¨ÝEv.-Nx̶Ó(§¥)ª>ËÄÉøº0„ú 4¹/¥’k=fÞÒÒöð$V÷ѳJÎÐE¤”Pâ¿NO4âb8[Š2ž`[ó¯ZÃÈ-ïšÔGE»qšAÈŽ)@+óÊg11Âvj±Õú®—ræ}iÿC¸·tçl'§~?v«ÔŠV£á¦Wá˜úAÝ‘.ÕžâàÁÒ­þ“kŽåÒ†~Iô§U®â1Äòø²Xãey!´­JKÝGMÔ.äú­ýî•s*ž0Êò(VoLsbŠ@Ëd$X-œÒË(´ÉÞâûPz­Íœ˜4Ù+ ½ÔÈM © ðŸŽ!fC½¦ ÞÖëUŒßÛ][ ]>PÅYLA/à±ñÛ,œ¸$7Z¬È4˜|³õ/ëš5‰½Ñôô™µk%‘H’ôÞ0­KrÏÂs&\‚DÍBú Ršn“k«}RK§Ðe•šxmçŠ2ÐÅ0RgåÇãÞ‡,ÓÈÝÈìP"/džÐ_L³¼½k+6)é§iÆlÌʯ%ºòë7Û²r1Ü×h°‘Yé¼:œš•¹:¬,Ò‹ô•TZI6áXldEøzô<²Ì“1˜Îiäš5½ö±qkõÓ¬ ­ý¸&IåìÕ ’"°¡‘,„»–8g·6›-K¸Ì)BBÿY˜æÒu­GMÐìíô;¾‰bK™¯ã•ÂYÕ˜´S(.Xrœqã¤ðBâ¼ %º…ðºK[ýZß˚Ŵ“Gf–I4ؘŠ3ÈÁÁ§Ž8Ϻ¸÷ÿI¾„’…ò¹Òm,µ-Hþš(–æ-E.)êG3ðŠ4b©%IBX|;.]<æ~*ص[¨½[hîï`mA§U²Ó#F¹µ‡Ôe…” G!*­Q¡Ñ&ƒ Ôu{Ò<®g¸Š}JÖÙfºÄ‚q¥ÜÐ¥IG_‹—úÙF)N1b ËšjsÙzww–þ³3HóLÞ°æKé0ر²yægDóAN-ï4Ù-ÌjúeôޝÎ"%IŽ®jh¬§ª·ÚF<3 c'rwd{ ¶Wÿâ;y$ƒJŽakª\X…¸4áã6üâDP¼‘¾ÎmqâãÆDªÛ£eež–š¶öñÜyimbÞ+€åîG¦(J²ü/Cȳ’28ác›#`&:Œ:Bi¦<µhöCOô´Ë»½3éb úR(‰y£öJÐæ1™Ë´tÉ·j‰Ôîô…ŠþMˆ¥³kHVDúí² x«·‹Ë”l|@Ž8ãÇ›ñÈÄ%²è:JÂú­­ƒèÞ¤Æê «‰#¤Š†BvRµ%#Ôùä§”ß6¹JÙEÕ4Ë­fÞñîô)àI%´VV{K¨ØRhxò &þ›‘ÇáÆ§6¢Ì ÿÿÔ…C4š-ðÒõ[+kÇŽ;™V5(âKá XeãAñSf¯ßç‰ ‰¢èroMéaóúõ¶›f“Jk «u‚8ÖÖìÆÞ‹£Â9+šÑܲÙlÅB]Z!«]ޤaòôÑͤù‹O¾u'«ßýÖ«RCPŸ³áôf³&' /t²²—OÕ Úœª†t›PÓW—îŸB_AOÞ†¨jüYž%<`m·{aÇ[·£Úê Æ‹ams2GÚß3ª‹Hú¿ïÇ·ò°ä©(°Déºì —¾h·[+Ás­£A9õ"&Ã#QÁ ¨Å@o´Ê0ðÌÇÐlu[!*²Ó4 ¨õ©àCkavÅÔ†Ö;…¹oIË-(B«V”ørÃ);×êæŒý%¾Ÿi|>« Ú¤PKqjcSsÆAõI%e%‰K ÿ›§¢GªÀ‹¤ ¯×cƒX°»·ƒV]#Á<²IÅ"ŠÉnÉýÙfø‰¦çÑ òg’©8ƒPÔm|³y#ÙZÙO[¨cõ#³–ÊS"0 ñ¹âߵĞٛ”Á²wäãÆ%FÎÒëH³ÔMÝÕ¶­=Ô(4ëpÀÛÎò,72W=>Šß<³Ž=ÈáAi‘]j÷¶zT×þ˜»m“RšU†ßëR†\È*ÓŠ¶Tb L‡' r_¡¦™k¬§–Öcõho×Qµô á¸ví8û BOÃL¶8ÄÇ…0 ­Ôº•½¤ÍW©Èö £«À^(Êü ƒìð [ǶbÿÛ…ºMªC :j[ZÝÂuy 1ÁkÞÙ/X™Y]ºµøã2á> n6XíÆÊÞËRõ`˜+ʶæãN·çV–Š¡ [—OÙë”ê2pb6gTÿLIe§&ž×ˆ.®îâ·³Ž"Ä:“ðÒfþWê¹]¦ÇFÙ ›×WM‚þkkHÚò4™.™Vc‚øüRvÙÔQ€_“ˆ²}Í;®Ôõ2ma­a¶ýú<]^ZÜAUƒPУFJl•¦åi–`Ó »÷ôl˜ŒÓõ l4ã¬Ä‚êãPŽÞ;Ø ¤|B¨T¹Pz„ü!ºŒÂ3— òh÷@%Þ°a¸…cµº’âk fˆr7°(Oݼ[¨’2j+ñ>eŽ ‰'dRÏ¥E¡j:™{ÝKY·ç QHHHUž3RGÇùÌ.™€y01]kæO11…á–'µ¹´ŠúÒÅá*´vä4jÃp]IJœÍðaÇ]T²Öî;í=”G6¡m|ŒtÈ.Ñ@òOÀÄUiY>Gò×2u8câ[‰›Ã ýNÃSBúnƒ‚ÎâíÑ¡•omIE,7 q%9}– 3^vØîÇjZα:Üâ$mªéëšé•9£$dKÆxŸ‡‚·<‘8m,r}Fà VZ»ÈÍÅ'©3*ƬN/é³£+™ìvkie匑êôѯô©"·Ü/#GSéÉÇj5ƒ{ñÀ2ˆŸW$Çr·ÌPÖ|Ïqåë 2ßG·Ñ¬mî’úæV"+Y—Öt_PŠ3žb1LØáÇþ¦R4…×®æÛÌ7!a²¶H#–-NE½ýfŒ+…nŒA¢ŽÇÉã‡ÿÎe²s¥ê&“«æ{ˆFc¨ÛMai¨F9‘+,ºŠ‚ÈÊB(ZqʳCˆˆ Úf7Hd¼¿Ö^ÿÍ6Úu²j|ÐéòjסÑ. ¹ªÆ¯ 1ª¹h" Bý,¡* ^§qa¦é×fçJ¾‚ÚòT³·ŽK°¯ïžhù Š>Ê?heŒg-&qÝ?‚âm0[ê66QA.‰$7“ ÕWÈÅâcËp@b?\Ã1‘–ÅÜ¡´÷ŒÝÃ<ÓYiÒ()XK$Pþõ¨©‹"²ôé–(š#›`ˆ•ó?á“o7ZUΫp¥-e!æ™ê\KHK*8ø_1åŽBd’DG2WßÍm}¤ê®“û™f†7ŽÔÆÒ ¶T£*)ÔÜå¸À3á+Ëvz]§™üµua¥™tmFòÕuUc ÔäòI"p§d'‡É³+Xãɾ푒=.+}wÊ—ºM·©¬ÝXZÓLºF„K6™3E#¸^äPðjm¾_–dÀ÷[3"BÌ2¥·˜n“TÓžÃC¹¸w•¤’ŒÕeUŠ£ª¨zµj7Ê1ÄJ"ϩLj‰÷ªÜëWZýÔ¾©›anum¡]92<²’² !¸ÅkEn½0 ^ x¤8·lá Ó<ÁªyNâmÖþÑtÙ™ŸN‘ýe¦Œè‘8䥫ƾÙ|±ãÊx‡ÅLE2Í>×Ë«m?˜'“ôg™¼Â¢{2Ó”ðÈ‚¨„~ºÇ_Õx³–Ná&«âÿÕç·7pEou¨Csu{dÞˆyB¥½h^N7£“ŸåÜgÆ$Æ"­Ð dîY\Ç©[ØÚ32i÷ÖÆ{}_Oq‚EoÜÉ R¬V £1ûIîU=<±v{”6S¹¸¼Õ-4‹{Ǽ‡LÊ5YÖ%e–sP’1@O.@V­þVdž5Md*Aé~^Ò<ç}¬ÚßK{#h–êñ/¨«ÍÚŠ1ê~Ò³ äðâ6æË{YåÙ¾µøYõYn,-ÜÏ¥"¤o4Nƒ›¢Í;³T0¢ñ4l·4Ì…õmà&{¨MÃuŸ¥ëP[뎩.‹«_7^å$3z>™ª#¸ª ´¼[®W§‰˜6,9Ä"-ò¾£}{/—9Ù麤©sª’WPŽPd[hèx(a+¯xÿ«“Ž O¨òqL¬Ò¶•±¸°âߥ­.n4Ë›””–ÌÈ Ë'PJ( ÀqÜ“˜Ú¼¾ªèÑMJÍÄ–Ú¥Ô©·¶ydÓwõ„h U>ÍIø†W(ƒ¦œ‚‹w¶ÁU&½sq¦H¶÷3\Ìüá…±âG¦¤wR8Ô|xý$ „I*Ò'×[’cKmt9o/ôÍF s€D ºË${úl´­U³+4*PëÍÊ‘j÷wÚ¦¥§êZ™í£»iú{I) éÌ&äßÝþ*uÌ3™w!Ĉ$'VVÉÄ—:‡äy·×hÖâXlà ”ñ390ÜW0Ï®T MõbsO©ÚOcª­²érÛ¹‡•Âz‹3íñïÄ"ŸÊÙ #—4}*ú©¬I3ºB×JÓp,ÑÜG4g‰ _ˆ) £På9q˜l7j'uuÔÕÞÈFí,æIÚ9‘D Cq~IN„ W+ÇêoˆK–úêÊÞÊÄ¥ÀKÒÂ1%$K6„žAž_´’•û=3,Dd&C£)Åï—õH5„‚(mU={Ÿ¨\\;ª$J8©5eí•Uùþ†±ÎКdÇOúª5Äö÷÷›½&øF—A ‘ÈÐT0â7'ü¬°ÈîlŽè¹uËhï¡–9o ×oÃLAñ†&Ý#鼃¶ø' HZ$õ-.k[;s¤jݾŸ­r“+I3¯§1ŒÐïP>Ù²Ã8Ì äB¸QÞi½†iãÔå†)Œ0-…‘eHnyV9úi~µó "{I8’â÷J‹M×$œ¥Å µ‘âBÂ0yÕåÔ0o¶™ƒ#7X(¿+IK¡u Å¥¦oo3C¦2s$’¨GõKVµ 4?Ë3z¡êLö,r_KOÓä¾Ð^vÓ®&á(Œ#^ÛHÌBAt®*ÑòäÑ| ¶g)$ƒ2YZèÖ“´—ŒwsiöР œxOŘí±;·ºœÄàÚ¶P]e¡~€Vó¸’ÜÜ¥ªI ä&"¬PƒÉy·pÂY#3ÀÊèn˜5¥½½¼ZÞ¹£6£§ÌñC4+I/…¿ŸYDˆq âÜNò²üY!)nhµ Ñnã}+OÔ`T¹º{—Ó®Æ8ƒÆJÔ²ÉR¡§¦¿dfX¯6à:·a¢K¨}T‘îl¾¼ì×vzœÃN…åSè¸2·Ç# >(xÒ£®C/H€j™²¥æK 6ÇR]wT¾mCEÀ±3£AêzN¢º“¡aWâhßÂr¬YD®汓z§“â·‹Q’îì0k—M6åZ2“i±Æ²AE ¡+Óâ¦U=Nâ1õ÷±‘užˆ÷šÖl°Ek¤K —ÖLüVK²! j¼+ÈWä&[²„–èÖ·~_•ÛG±3Ï5fÕ.åey$HÚ¯ mP”eÔÔ¶J9xãÂvdJ#S™ìšÐÞØ¾¥k¢™¥{[9DfÞMCŒ6ï01úa¹R­þ¶eiñÆ6{Ø Jt ÛëÛØ$±²’MFÖy´¥Õç‰%CuRƒ“~Ó‹LH›£yÃBÙ Ž‡m5ìÔRƺ¿èù!mpbýÆoI€ãÍóâz¨lÖÏ?1ˆÚÙâ–û¤÷ƒM’öïK¶ÞÅ j e`H[Xf0Çu%$&­Ä(zTí™QŒŒ{™Ì£çÓnµ"ÖÛêq.šÖpOfÊLbä9ò•ÜJ7ífd‹Ô1èheЍâÒ=A"´6Ûq\–|¾º™€­ui¤“…¥Îº±Ë4Öú~™k KÖŒ4¥#z¼aBÛáÆ%)6ñ-Q[ªYM½:š®¿EyâÖÞKK`>¬tûrX-èp9H£xÏUÈˇ«ã«`$§Mž k›™nï¼·ez_êÎÌÅE –9ã°S“:‘)p€!„g½"uxm¢°Ôn5Û©/Ž£Õ"»²ŒÆ¿Ñ‹²rê8åp™2>öÐB·—!{+};Ë–ðN.eYî.¦>¥Ä–µõ?p(‹ò©öHʲg"å.›‰½Óý?Búð’å,”èúz³%ÝÓò¸72FÄ[ÂÌjQh9PS1²EƒÍº[kmGÌ–†îK‹}ZÖ(¤m<Ýb¸ˆeH¾ª¸ûþ6ËáŒu7mS!½–çNÖÆ•¦Í"A5¾§ut}^Õ-ÉYä” -U‚Õ[!Ž@™}A…„§P’-+ËZö¡m5å´wŒ—P^ZMõ‹ÛË©ƈÌV±D‡i^4̘gñH®Iœ½*­Ü—vš-¨Inìì`VÕ.‰svb ÊXò<‰Ö§#>ž(¸ð*ÑèžOÒ­ôŸ4j63^^Govì–Ñlíý`MÔæ¡?eºí‡óRàÎY/dŸ\´ÅÆ•æ‚ÕüÓh^C¥·^äÀyEp„ÑJ=J²}¯ ÉÁ踓±lƒR\jW¶_]i$&é¢ÕÚÆ1K”£@é„qtºoÉs0‡Ì£@¿ÿÖ€-Žqoæ),® Åܾ¼6·³Ú[F°Éþó:ŠÓÕv®á~,óùg”Ay<ðÊy'²¥æŸ¤µíôRhb@ldzRúöSÖQmÒÈ« ä»S(Ž+™”M¶Doeeó%éžÃFÕ-F§¦ÞGä!‚á-¥‹Õ†U+^ ]¾×=³0Ck–ÈœxMôQÖ¢Óï[Ukd¸ŠÏO´H•G¶Šîöö@Íp²¸ý 55§8"DheŸz$Ñip‹ x´xí5]*xšGš"Ñܦ© ˆd⤩âÜT ÎäŒlKš ƒiŒè—CËúeü²]<:”ñD[zgÓd£¼mÒ„’÷\« ÈÄíM–e²ç[¹0YÙÜ–›Yžy€ 9úvvò2‰ xѨC1ðÇ&"°ÀÄGÞ«j׺-¢Ã,&ÝuYZïV-!úÄóBÂ8æ…wàXš²×q˜ÙLrvÑ@4Ü0]Ú³\Ocl÷‹n![0ä¤É Š—nUãÀšÓáä2ÈšâK)âL.&Ó.â¾ÓmœI>¹7×u+KXlÌ°ÆÆ(RBy@•ä69\å$Ñ;©êÚdUºÕçQ·úÑ·šÒ/P¥ÕË1V–8£çîÌ8¶å o_*>¡I±ÓüÕ©ùMÓmdŸêWpË~'ºC W2D K*Ä  Q”‡pÊxŒI<Ëf$‰¾‰7æ¬1Ákwom}*Ômb5¼éŽ1‰R¿ß+PWö†S¥Œ!|IœxM–â[—²”ë©§ vXåd»H% )7”<‡‹f_ã»1ºË›[»+&˜\Eµ³ ½%™K­%?«(u_åørŒ¬µF-Ù‹gc.•$QÝ83RªÊ÷)ñ'>ä­QØæ¯1â‘sj¹*ù…ä™RÊÝ]ãÄd€—Xî28sö÷Ù 4Œy—‡tZyƒSšêñžÏO·F³%RI%_RÄR¿d f\ϧ̱”7CÚ)Ô¡³ êiҘēÞÄ} P³# 4ep}°À)ªŸK½òëT{ FHe±¸²³†³‹Ëtâ‚€@ý :åæR6æÐM£õ+Ž.Ø‹——Y°´P¶¾Ÿ ÔN…–ï`IôÇÛˆŸ±ñaÇ“iH–6µGŠO&Æ4ï«ßÝÍq(×/;Õ>DP 2ùv¦UŠ#ŒÊWýôGùƒUÓçXôGWŽÒÀÁÏ $îÆV±ì§ÆU?³Ðaż‡6P 7^^Ôä7qù.ÒïQ¼UF¹»µXÙdˆxòbÕ¼²X½Dq³ ´½ õ´Mj;;xßW·sg$óʦIcYA¤ˆŠ‘Ú¦£cûÁÜÆ©åkI´·–^¶¡$mí³?¥õ== ªÀðâ´æ7æÕ‘ŸÖ(™^Ët¹ôÝjÖÇP u Y}̓ê˜rÔAñ%J–R8Œ«$(‘üEž@Q/˜æ˜]ê¶4šN«h’½Äž«Ï,¬cgUcCÅ>ë³.bæÄ!.í¤H.±Óåk“w­é¦ÝI#^¥Ü c–d„±+l(ÃæË%*  9VþËÎ\z‘k3\[8åq©zR»·54ˆ UZoÝpˈŽìj‚Í’[ù«L5šXQ`´‚u¤“ÜÇ7¦ü9ØéL«I‡'H¤Œœô3ËѪG5°“ê¦ýÖ60<´!¥n² ¯Ã±ãÇ3ጧ' ¦ –ÏAÒ§¿Óì' Ñ´í<^¡º“ý4Å=JÛ´hÝZP×èl®yxnT×D ©mmt!¡ß!¢E¾Ólâ•"µy})9©Y“vû<òŸY` –«¨XhRjߣg·»KH$†C(·ÓiZcð†MŠÓíS 7Š#Í&UŸL¹­Üöö‡ë—Ú¥º‰ç–eä…Ú5û ©ò—lóæÞgl¢ÃêVrZC¨´·ñ˜@¶¸^Bét@Ns=8Êà¸ý–Ì9c0³ÞÀ„<¾[Óg½›M´C§jl†{H8á”»|VóÝ%D45øYH9lLâ-lfÖöáìu} Lº}Š1ŽÊ{hšiM¼Y ˆêÍèÈWað•-™ƒ8„¹É’¦—©<-åË{+©ášæ2nÕ­Mó¡ñ4(¤žmFÖÇÎWê±j6±òD¸â-®¬¾êªI ŽŸµŒfqDdz…„ÞHoaµxôI’+X5„³|I=»¸’â +ÙIjÎWë´òÝÿ׉j×z‰7š¿Eiöm<ñ\§Õ-%e~FY³0‘ݽ7C¸ ᜌ!á²]G¤ Ëz†©_K} É ¬Öu‘®Z@L¨션¦aœâT̲P'V®•oõ×ڞ£núÍÀhÿÒ½x™b™¤v¢— ºTS%Ë!©ƒ‡Ž2•±É,tùõË{ï®ëz!µi]c.^Ê4`CL§ UUùf@ª¾E1)Am­jWz•óÅ 3hªík-‹¼zsz ‚3wv_R†˜æ„@þsd¬„û^²Y%ý- \5[+ËEÕ5hæxçõ^$úÔ%MjŸ€¾U†1åü,±DºS¬^'›5ëŸ-iZ2éÞ`–9í…êÊÂ(ãpóDÕ+ÍM/ì¶] Gã‘ÙŒ`l’¯æ½JÏJÖôùÞØ\é±Úš…¥ÌrÅ$·ˆ‘¬°Ö¼ø?lXâÅŽ#±jï+>¯¨}KGm*Æ_®^úïmëLÁʺ´mP* ʽûf<%R$îi¤ÜØXÍsb¦!ŠìÆ.diAzñ,RÊcaöCסøyt˲ˌXr# FÉåëÛYÚ ÏG†¥¦Ã[ËÈYäŽV„”/¤| à©§Ùcšê&\'“vÙw—åÒô¤¹¸·šâëZ“Òš .ä–∸f(bÆEX7_‹á̉˜‰[9sʘ£XßèËdSQhãÔ˜GÆQ£¸%ÙUYy€8òË™D ‡aÉÇÉ#2WÜ^Û¾‹vžb³7o2½è·V•$†$>›ËýåOĪFÕöÉÃiúXãnTmåXìl&ý)5ÅÝ‹Ä-Œ–Õ–[{~-L§Š’ˆJ¿.ãñ“L8÷d“Y[Ù‰/¬/– +Ûµ_MÅx»þ÷š,d”ÜÑ©°¯ÙÍIœêAÈŒ­9šiRK½SÓ’ïëÊPHÙZÞ+t‚´-³V›æ6IFöA šR¹µS廩¬n—ôM™Cf¬…'Š{p$„™§#Èñ|C.„6Þ"-ŠÛE®ý^hœ›{™œ˜>;‰epÿõâ*m²¶ddá2´dßdëË:œÚ1:Æ©¨[Mm4‚½‚صǢ¬kñ`H«ò9*BƒŒb§¤é’zõõ+ˆã¿žHîÌÒ9mF?A$1 ” (n=wÇ!>EÕþ²¶Úް¶Ë{´¼¨=+´D_ÝHUIRV»R½ò¸PØn+C R/Û&‘,"ûX¢ä¶Š:Ý,ã“ógû*” Hê2ø“È2€¤^ŸåØVïPÕô6–³XK=`W†8¯ã_Q‘ŠB¾ßlå“Ê6VD£k­ù{_Œ^Ãnu}-åŽþv_ªÙˆã`]¡JlÜÇLrbž)£awªEi¡¤Öf uµ®¯SÑhíä2…õû4'1<9™€9²<кv¢ñÛ´š¥«Þ<òH–2§%†~©±I¦:c™üõteÃcv@nmmÏÕZåt{¤·U´% +,¶ëË’[¶åˆ%jÛž½s_8ÈÙæâ›‹ R+ë]B%ŸMFDk»ÙA° é%O2Õo„8‰¾(ón*·z~«³¦Æ¯l·°ßiónÅ~j:†rOÂÙ‘ žªi'Ô¯®~½m¨Ë§Åzneäm¤$”MË€zf5¯Äã©ã–Æ„M¯œ—vW»:Z%ž­úenÿKÚÞ±»ú¨ gfo´² V&®Y<‘³°˜d‰^—óêè·úF‡†®ñ-¥ÍÃ7!Ûú^»³PG=ùeg jG“W ZDÖ¯ŠG=È›NŽHåxV‚æÔ 3)Z¨skídqúv½‹fè‹m#^×´ë{rÕlmR î–˘ŒCnÜBV…™¤V!ÀaºeYsG¸c¹H¤”Y"™o'7W‘[ñ$Žú&¢š ¯%éFø|rØ’6ê[#Šƒ/“P‹GÕ´ëÛ‹xm웞£"`ÓÙÆŠÚ*Õ´¿³”}HàK$K=cNU»’[´Ö®¥i浕Ñ\=}‘…xüDzmÚ…[lʳG˜j „²+6=ÓI²¼m:U¿’ ›‰ƒ­å¼è u (e"ªHÄÄñ˜[Õb6ÞÙ[kn+§k–ÿ¿–g2~ð«Ed`Ô­s&2â÷÷3"Ñ÷:¬º×Õíü±t©£éÆóÍÌBc 4×\H:ˆ•!†SùxÆ^°ÔbbÕdÑ>»åíf{v´Ÿ\†K{Ȭ#µ…lcô„Ñ&ÔusVý¥ÈF21;€vïP8”u¸´D¼ÖM¼Â ’4–âéit÷vün"ú¸Að·"yž†¹n9ää¥ËdÃQÕ"¾º]bóU¾ô¥Ó£¹¶{Ûxż²L¤„PG7 Tp}²±ŽB< mj‚ívòmkY±¼·¿{¥ÓôèìÌ—Ž` CLý‰ V›f6;Ç'Õ@P¾óøÒMµ¾«,§Õc22~ýв±Uc@®§£¶¹f’kb@VÓ¦º¸ÖŒÐAmszÒ¤Z<¤[¡{7¸»4t¯Zc>8e³F@m¥Çyo«¥‘Hþ¬±·­¢ÓÝD1)#¢¦ÅjwÌ\óD6DPoYÕ¢´Õõ='Vá•q§ÚAk¹åèÜ¥&N ä—YyU8pÃ÷w[±;î–ëv×qÚi¶¬‹ë|"[h¹ÏrK}PÃâ@“’Ç A¾Œ¤ßCÑl5?2Üè–·×2ßÏXS×ôäIE­› ®ëɇÂGÙÇ$å@ÚM ˜öƒwæ;Ï«ëƧV+ë1"™®žtBBwýH— gæM6ÇOíµyþµæØIijË ZÂ&XU][ˆðjf6Ï‹žÌwQòú&¥Û^jßRÓµ(š;«É‡§ Õß¾”Š›Gñø¿›cÀv ƒr…ŠÎãG_ßډﴻ¦xçY—Ó§û2Se4‘xœœgÇ ŽÉ<Ó6mCHÕ!¸—Òžæè$Ö—æ ¬%š^QÑ‘KH…¦åkL«ŒÌW*lŒ@@ßjWVWvwu>¢.g7¶ÌÓÛ´Z Q©_„”Ü|+L¶2ܯ2­ª¼åûià–ßNòæ¡w œº± ›yäoŽ­,Ÿ±§îѾû'ŽFÍ ûØíÍ ç»Ë­3G¿ŸPµ{W’êÚAy'‰§Ç¶ã³VÜaÒiå9ìvafe«Éæ nh®ô·†Ê8/&·sn&SÔS Pz¬v ÷Œ«Xc$dçi Gd-ŠAsioåûû6Öç5½•é?]–H£hf-AÅ% Ñ)Ë2Iñs †ÈÍGM’ÇAÌÍj/ï­ž«A$"´¸D,¢'˜,Ƭ»Síf&G&BÙŸ¿ÿЇͩI bÕtùít™Èkë¡l†Ï먗”£?®éÅW+N™ç¹AŽàïÐ:Z¥‚}GSŽæo+­í¼yÅÀ™å·¸”±cûÅRªÁÊ:6 ú†ôÄFÑðk–ú޽m£ßÛÏwp’Ç43Û´Äh‡g„šÛ—2~yxn½Þ‡­N“K a§°¾‚%xÉUÝâÓ’¶ê£–gÆ#éú‹g£Ëé¬Oæ8¼Ãæ(íR×SYôy®ã?W¬m×Ð’v? 3©_L>,ËÈb`sl²G4Ôm,eÓôÍ=-ÞÊh%ŠÇIó È”E6£êñh ½K¨¢˜ä;|EsÉDý]î(…9Ñš ~KZÁÖÒ÷HöÓÅé·&ŽÞxÔÜY¿™r’@Ú-B2BþûN•µ¬ŸXÐuó%«[\¨ŽîØP÷Ûf˜±Rìh¶] cäÊ06…³Õb½Ûj7—D¦ÓêKVh–f+$m¸F^RmR§á9~L|4@d.%_Nµ–ÏI:­¤©«è!‰t¾RÁ,‡£,ûÆFç¯/‡Ç+>³Ã{ô‰†µk“¨®‘©EpóYÉxóÛZ%ZâÌ1&EˆÈ£†<ƒ}Œ«– i„åMÏiqgÅŸ–uÖäÓb¸éÒ*A¨G"ŽanÒ+)<|2Qteé¶0 ,¥–1jzƉ:-ë«ÛÛÄZ[²’\­~)"àEX+ ›íPá9"'`0&F[Æ[»›Ÿ-5ö¦G{6¢Qe–Å}?LP·H­@¢€¬‹OµþNQ,1ñ}Råø¦ÝâwO­t‹Ùo$´7éiªYE-³%ôL–Ó´±óŒÀˆ~&¯Ã¶a‘²6+Ár°– –ûI]=®§Ý"Ô¬Øc5í¤xšSSé×ì¶HÆ0•Ç“?¢ce¦Ç5¢ÝZË_BÑZ¼’rõ‘‚X}•xŸ£ŽD›P:±ÍWQÒ"ýow¡-­µÕÝ&ˆÛÜòvã*H )Þ¹‡!O쥪5i_Nk„º’óÒºÓý.Vñýe$ÐÉ*@ä¿l26Y›)‰»nÊ}RêÌÝLeò«H÷3“¼fIÒ(¤Ýš6 üÉË £W»+.³ »Éi§Bú½Ø³[x”¤éàš¥ˆOÆ÷d£(Æ|Ùc’Uºé÷k¥XØ=Íéyê@ý]¹ÝL¬ìiÊ2ÝIìØrJSõHÐg’a–êÛ̶ÖpI¹½²±0¼Èê!‚â1‹j¿Ú‰B¯Æ~/S0 íÞÓª”_éqA>“yrBCtnÞYåí‚¥Ä(Á@FêjÙ$Ôl¹€K=&ßUYåŠBúRO-“ÙÊž¤ßRIÔ#Ó‹¡^J«ö¾Ö`œ¼žífêÊVºm•®–RÓL‚ÖyD¬ZîõÝxER*DlãÙ¥1—•Ó{$ú’DËwm{j’ê÷è,`š&ø`¿µ‰dŠE*O1·'20‹•ô Hµ{‹;è§i@÷%åÑ1˜$ŠÖv ÀR€‘,dñ^Ç#’¹)¤6v:Ť÷ZõÕÕÅåï«§É d)ŽWÕÜT%W³¶bÜÁôŽ­E#ý0m­lol=K‹eÆ[ -Ñdšdœ@!rµæ(õë™QÇÒGr±†I$:­½½õ¨·¼úÔªó^"£¤MPüþ„9‡( KÓɇ%Ñ,š v×Ú}º\éñH·¶CGuõwB¯#È âT±ø?k2#õnÊØî¡«Çe Ée%.tûâ])áœCQ,f@Ì7žuçþOÌÁ,œE"!5¹µÌvªó_OzZÍ{º$Í<‰OŽJ€Ñ$ 7/ò²Q&¡D6B‰Ý'òÞƒ4rjk¨zÐ[$pAq{[£RÒ¬FŒ¾˜ï_µ¾:Œ÷@4J¸“ÝN+;íZMI&D¹¶Ks¨\ÊZ†@9°(7¨¡âÙ®1y–tÿ]ÒáóTºv•Vöò$“ÙÅ2¬‰Ó*ŠÉ H£ÅrR„£ˆóHrŒÖ±yªßQ¯§=ÖŒéõøá ÜêгÄ*zßSe|S…m@²”i[BН´+Ï1ÝIVW†ÛG¼ˆ˜ø\zw± J¬mQË—Ùl¶QœAÜucºK¬ë^TŽîitO1H£Y˜™ †&ŽhÌÀÃéšü,°·.r~ÖfâÇ1 äØ"z²‹ ¾½g—µ¥šþélâ¼õiëZ™½›’¨ª†éñS5z¨J>±* $¤¡µÛmSWÖ4ø%Žfböí¦±å\CÍmqIZ|Ÿ~fÆ90â‹t®5H¤¸»Ò<»¨ØiücòãéKû£I,Ú…ÅÃ!CUSš0—Ù9XÁ „Èý±¦ì§šÆ…úBöÛ^ eqw-Ä“ë’3MKhmåTCC…^ ^Üš¹‹ Õ ¥;W{b ÈmÝ<»{ ë,£c J`I\ ¯Â¼š½ùå^aË›aÿÑ$Ô­-,5hEtÝ­¦š9˜Éºæ£‘ •QO‹ùsË8̦Ay¾"Õôáµ›Ù_S:ýÜLðÏpÆ:Æ®(*ºnŠß´2Y'!ѳ¢Æ'²¸Ñ¤¾Õ쥹µÖoŸÕk¸á´K3[×pé2†l1ä"=‰LHPè‹Ð½xõ± …˜¶ó¡e$Þb{Et‰-.h¹è (Õz|G\s”yØN8ìŒÓžçWšM3P‚5Ò|¼æ+d±ŠPuW¼röéP*ƒ’öÜý¬Œ4õ¿É§.2 Ý&öâúæöÊòèiÚœKÕQ®VB$@ÝmM•«LŘˆ•ôjsI¦7öO¯æVÖöée\vâ`æoˆ¤,…=ó;ŒHpÄlÝé<“æŠËÌ–Ñé¾¢-ô’-xÝ3_Y¼Ð™ÓWÄ$E`Íãâ–- HDjzÆ£sw£jº„ïwÕ¦•ˆæö Á–YäãTuu;“•D€ O±0i×Z&¬-cºŠk}xOq§]ya’ÖQQZ‚9IB¬ ®Ù—Œƒ.åãâTý.Ÿ-þ¹kh÷‰!·kYço,Ç„¢I“*„øÐ¯U^ùtOIá¾k¼¡ªÚèÚEÔ0Ùúò_­e¼Šf6ïolTÆHçF;ôÁ©Œ­ªXÅ슰¶“G°´½ýÅ´†µÔuI‰g /TÄæßsPñ0iÛ1瓈ÔYF6»ËÑG§jWèÒGqw¦¹›MÔeJF•ŸÒaΡˆ¡£8—–…'ËÑÚ„žÚÔ£iïN¨É%Yâ0òzͱ_ˆ|)ÕwÌoF=Í‘˜¦µ;;Íþ-+O¢Ú],QNÓzQ°TËЩâ?Ã$Hõsh&Îê 4Ƙ¢ñ%ŽÞÉ ¶Ü ½fV1ÎÌøMhTÓpôŽE° ‘:mÌñYÀšeÍ©¾}1 ´·$))ñÉ_‹áª•ý¬¢0»á‘%o/è:Þ¡¥jeÓìÛê·ïõ[¸®xÈ—ýè–J§”mÔ}¡¾O(ne_$›Ízv™¨êw—q­¬Âýµ„¡eyB§¥<U•¿yi_Ÿ]†šrá£Õº35NÒ'3[ݾ¤d}^Œ¢Úæ4ŽDO‚œO«P)ºåyà'RIáÕRh×ë·jf¹F6ð¼k*œÄ9éF\ÖFlÚ(=Õ¦¢öï;éWÐ:Iavî$ëEhe I£¿lcP&#“*(;ÍE5O2?•uågšÖu´´•d–Ö#sbH0ÝM3/$1™Ž‰6PŸ ,Ž©êh§QÓ­­¤ZÈmìÞQ2²¨õ?z…Y©ú³&9ÌÈÚs×z”tµµŸPÕ.ÚÖÜ#Akus^ $'÷b(Ù (yùH†\„ð‡"#«W¶Âf³¾k{òö¹ aìm掔â%H˜órZ½òÈÈÇcõêæH­fŒ‹—³œZ¾•4¾œÑ#¯«@È8ºVµ®ÿ¯)31æÊCE×4­2Qe¥i&ËZb±>¨¾¤ÐÄ%~*Š%n$uVùí’ÍŽdƒ{w ÈÐW&ËK†WÔnÄö÷ u]>$–ÊøLú QÊPLe ñmTÖ97úíø×ÖÞA¥jšêW¤? f’²DÀÑÇâq—ŸG½c-ʼn¾Òôx¦‹êQË=ö›«D²s&('I#‘Ðÿvßû%ÉÄx`ž­±Šs£^%…°²’åd¶Šymâ0§9$EýÙ®äIPÍn¨JTVf‚a}awm6©èö"ÏW‘5°w„GdxŠjx]ƒ •¨~œœ2ÜLdÕŠÖõÛJmRI †úß]ŠÏOº´ŒF/¡•Ko?0–RK0ë–ã1ˆô‹Ù‘' uj× §Y´Ée;ÚZÅ"z×k ÌCUÆè TÖAÁDZ( ìôýCQ}'S•M•ÆšÿR¿YHеZ‰ðÄÝþÐù`É!Ò7-’ËéKõ,ÙÞëZ7–§¹·»Óµ9á.#a$Šð3úOû³ðñãé8cÄ«Ì4å’6+ŠFH›©mµýi¦·K«Í8(–Ú&⠵€ðü;rä¿ ×ÀN(˜î—ߵͼÓé6æ$Ò3¦ˆ®T¬ô…}I˜ý® y©ûŽf!¹æZâÚÓÊú´‰}xÖãP´íuÍîá—÷Ѝ#zƒ–Æ2ËЋŒ•/ÊÝùÆ;i.^XLé{ 1Û¿Õ®ÑW÷ª¥¬eºòï“ÇðbcÃÉå½JÎôÉe4dÏ%à´²ƒ’Kiz¤ à1 öz²œ¢PçÉ„AM4½fþþ-+E…b]~K´áspGï­¥…¥üf0d^,¼›"pBø'$B_}bª^ÓL–Òâá¬C7ï.PJX™? ÆÂŸ â>Y\ì›'"Í¡´è.tkh®H1Ïm4·ÖËvh}xØ5\Qjôå2rŸ¨ro3¥êÒµµååÂZ¥éô4„ºS#$³#z²™ÜÀj½Nd`úGNkÃa›É£è¿¡4h•œë.¥~›k·FHÝ9ïT¨äìôÍyË(eòi1ÝŠùËVú¶“¦è‘ÞD€J®’K+úÞ¤rz1=®KU©õÝQl•ô]5Þ™æï:ß²Y2è6Ò¶«ÉeõVòêÛý€JÍ+ï™ãŽ0AÞ“Äi ‡W¶¶õ>¥KèíÛÛN•hdA'«¿[’‘L¤á•nÆPtZu•ÜZŸÕíVçEÕnß#°ŠH–(‹)BÆ‹é7ÂûTËDˆþˆÙb@LžîXì[E•ÁVÓÞk33HÒB…W T1žA°aú¸Š‚²ßLóŽ£ ®¹ac-Õ¦ %·Šá%Gxf†E‘UÕTÈ«ÝwÈÌââÝeŽ’=7Bòä|±/í¶°¼ø­Dð±ã/ÿ$¿ÙŠ žQ\ƒUgi”wvvë&¡ª¨–xÖ^G”4øO!µ$AŇÚZfNp2'ÒŽÍÚÝj:\·ÀÛÙkš„Þž¯o/«ÉowV!ä;“µòu2G¼ÜB™E¨Ï çHÒmŒÂ+¿­ÞÜ×÷ÉÙ‘mòãRT/ò³tdHžLcGòýœŸ˜°éZ\1éÃIõ–ßô¢3$ªjò‰¶£xÖŸNgËQ/que9ɵ?1ÜIÃou ê­ªFu '•…Ë[)*%Ž³èª·£ösáÈzpصO3i/å»{­+H°ŠÛT»™¦¹º¶¶îE«()) ²9qð±§o †—Rg ŸÒS°¿“Ëö:o’uÑ)›VPÖÖˆŠóÚ[Õ‘ZeÙ9Ô‚GAºå¶&%8“@(Í^çFIô ãÖ'µ?^t¸a3G2*£µ´¬¤ŸLŽ;Ôòîr&âFBÛa8ݤ—)¬­–‚óÁú>ùˆ5"¥¢\3–Å 8!ÃÅßm2•ËgÿÒ„…²G¶Òµvˆ@öËn÷P´ñZ³=V(Ôˆ”äŸå.yß ËŠAæ¦(ìÉõMV–^½œ×œ¤Ž(ôù¢He€,†“4€—ê`~Ö`țߓ—i(Ö´Ï4]\ØZhËéò=äö“ÒI'õ#Ü',Þ?MJf^ŸS„ØgŒp’ïo,5˜,ôÃcx×V·¶r=½!݉WnµªV´ ¶]é绕ÊGd¹__ÒäS† m{Ë^KYgõ>­i»Cmjíò6̃’1>øûÜrD‰,~Öæç^®à{y®­du[ pñCul¤õÒ>±º­}]ûW!“†;ÍÃÝ"/ÖÇP³K¿)]³ú×ßJVÚ{‹:ޤÅQÙy©ø¹ex̱šFÌ—Mò……öi¨.¢’¥¾œt÷d’Çé+"óF_Xž,§èÍnMTüFÁ ²¸†há³²›KŠ{(M½¼kû£.#ŒŠLÐ~ÒT ·y“E‰®LSÕu}y^vXgÑæq¤Ánìʉ¾8Ù×ìˆÀä(S’œÊÇ„cØ”Œ`$Þ_Ôn/¯'Ñô-ÚòâxÞ‹W•#ÛÆÑ ¡VøMUK7>Ù—š4z³àÝ8Ñ¥òî®]ÞØÆÓ=ÜõÒ™aŠp j±F‡Ã_dƒ˜ùç)ÄÍeÙ×öÖQ¥Í®§{ysúŸ¤ng"8ÕÔ…cž>‚ÆÃ¨ÈG âᦠÓý=} V³±µ½ýüq8‰O«;FÃ’ÉÄ…D,9sože 0žÒ,†)E™iÑÞjXK9?LÈÓ¾­¡Ï/m®.U1ö–•*hÃâÍ~§‡¤‹í2‰è‰“HºúÄñ_:ÜZ,‰ •»BÑJ·q’Y¢x‰ vb6uÊ1Ê>jc·šãXÓe´¹¶ºõ¦±qouúUa·¡4†:ÿwñvN¼rØa3•ÞÁºȦàMåÝf=~âÂòÚÝ mB€úe.èÅ¡Q‘Ói"piLÇ™²h1–Ë5-fx;ý#T™î…ô2ã¥Ç£hÑ-ÝʬꞴgŒ‰Jñ`y‡§vÄé"X¦ÒnSµh®µ@*O¨ÞBV5R]eQZMµÑÓâlæ Ù”€µ]cP¶‹MID’:,i}w võf!d†[:”w^˜pÀݶZÜ]y|^izÇÕ¤òüо£as073_ÛJœb_Ý€k23Õzf@¬‡Ï¹P_¶’öÊþ-2/ƒT¹ñÇY *œ–Xô(cû'§Àr¬¦§Âz,…&ÚŽ±d÷•¥ýµÅÖ¯u5°’᜴O-ÄbëB‘gáä¹D°/rÙ Ö“ù¶þ ä3I¦Lñ‹÷Œ%»º©[R±TËP¦NôË`8%³YTÓ/´å°Ž N/Yõ`n¯më‹ú¶êae˜G²Æfâ†Q›رܷõ˜îaD¸‚Ö+…'¶¶ºšO@Ù²óV»/á„% \¹©Šû{8¢¸‹@ôá{V/¬HÐǵºÆú¦4—fp ~׎ù•r;¹˜¨š†¥h«¼N.îî={øcŒ@°Xú*Èä¹ IãN«Èe2‰Î2sFj÷ö6ö“éÜ_RòåÍÈôb¡¸Ô#kÚò»«|\‡Ù\¢–I:4ä2 “jÖw’O7 8õ̤Ñ\¹ŒÂV0É¡K!{¢ÖD5íØÕ¡ˆ‹_ZÂâZ:Àìę̀…~ ˆë€Ú­ Šd:Íè–ÃDia‰5MEEÞ š@0ÁÉËz3;WcØf1⾌LZ1}>.mH.t«i—.¼îZ £ËÔ„BÉ-·L¯ ãþìÕ±¦j½Í×úG-QîæÆÚhÅä7¡ F]OÙ c_øÛ'öâúCo t·WÐìu»k«]"9´ýSê³] OS” >RÏè¤RH K^»Ž^2tÓܹ]y²y±íxÛi6ºmž¯ªÜØÀ¦ÜÛÚÙÈ’9‘E×&8W "ïº6eâÄ@LˆˆÙž‚u»»’tº×/O­q¨@] Aq}Z6Bj›uUª¶ªësqmõѧ-ªCq)šN@‰âª„†rÇlØà–IÃ~C«de{S¤I¥ê6ÊÞgú΢š>¨E¥Ó\ǽÓôVEÕU¸±Õ³S9q H„–?J[¿ª%´šzQš7n.în9äjTmZeQÊ@¿© dÝ ­ù^þêÚÚ3pmáŽic6i)™¥ ”çrÑn›¯Ä_¯lËǪâ°[£“½}ι&Ÿ]Ù^Æòƶ†ÓËq Í Ä6â7*Õ¢;²£í|ò\1™—š¾JÚf§É ¥Æe¹¼Õ.ä“ÌÐÈ\Í Í› ˆíÅcçu£u¥2'ˆXØri aÓg»Ž;?«j6Ñ]=P=23Æñ ø‰ª¨ ;>[)pŸKq(ˆá7ö%–k{ç‚ô@ÑSê³ ˜rYaŒŠ‡àuA𵇊lÆHÝKQš!å¯KSœê:ΣÂH÷Iiy vR•@Š)€þa‘³“/RD½élš¶‡$é¦]ÉinöñíJ9C,IUEdÔ|BŒzæG‡1-Ñ#[+êsFÆád…—SÖ=Ò1Y»$:r‰¬pƒOÞM³R¦‹\„O ÚªÔít©íîíçî¡f²r#t”u!Îå‹åy±ñmÜÈ‘×þeÔ4M6->ÓLmCJŽ;¨dbÒ?Ö¤ HÚ„ü4'o…k•C‹ÌÑ @’³RÔ-ŸO½ó ÷víiâÖÒH‘½¼šôâfaÈHüDŽ5˱c<|6ß ÕãÔ,5Ûk³‚K‹È} {«¥·–9ÞþÀEÞµ5éí”f‰òdc8’ýVËP>gå¨Ú^Û4Vv³Çs$<–Þ w/"ò$&^@{6eá‹•ÄÆÊg}§_YÜY@ÂßP´¹·‘´››Ò˱­=)²q<ŽÍÛ¦S·4wÙm¨Xy~-*k»H­ÎG¶?Pf>´kV"<œ_‹6ü—¾F`å&µ€Q ª¥ã]"•Ü–¦y`Vµ†kš)t/Fb€|qŸõ²Ó˜&¨ñ #m4í;M¾½Â¡ ýBÚå]VâêÄÊ‘ŽÌ^¢Ÿ´2Ž9ˆÙ¶€;¡-˜üÏeç-.h¢¸Ôô˜¦½»Ôú`IdD¾„±’3Éd]‰®lòã„xz_ÝüæâD²Sk¯ÜéÚ¾¡!²ÓoìZæÝæd•¥Deøác#ñß¾D“„˜DY@™“¯¥ý cå#ÓC©è·^ŒEÂHó´ì!€²¨»ì~Ï\˜Žù~-œÅ¢+Ø%'HÓRI4{ ,×OÔš+ŸÓR'ÿqé×öFùŽÇ;žÕa(ÄFÙ(Ñ/uY-, ý©iÒ[7™4t.H˜ó»õ©WYØ€hé¾cÃ4q—Óü,!—…C j[¶k‹«Yf²ÓVÌ©†H •ÐȶWôØ1M¼FeL3Ϊïl3Œ¹¢çÓÃè‘ÉqËQ–Jê/%Ëä{µäªÑ­P"ñ*Ôø¹o˜äË'šÑWÖgYÕíWLM>÷Ê«9{Ë)]­¯Äàz¼¤fÝøõN; ²áÄMž$+µÃßk:”mÿCM§Æö—¢ÛGT}8åsÀW혇hTOªØB•a’vXo&¸‰Å¼lºf¥oŠSIZ5ßaöK}–¨Ã1(Š!ŠÈîõ…¶µ·ÔtÉæiÞZjh…~£ ³+ÌV»—íQ¹`0ˆ¦Ñ±A귑꺚°µÚ™­ô«mI•-neyù2r<Ë´ Ö«üÝsqDø[òS>%]:h-´F´ÔnŶy5ì)x­bJzE-Y”–]¹Qº2ü9‰\Á1Ü×2$¹ô©Å¤6ͧ´7VIkõˆíãÞÞ`BÈXPŠéöHo|ËÅ–ï!¸L#ÞœéÚ•æP^Ím(¼°•5)ç•£µÄYàpÄ×ÔVG¾Ù¯ËŽŸ§½®`$ÖãÍYÑtkwO|÷7ÅU¥¼–kÚ,r€,h~2ê×ôž˜-o$¹êФÇÐæ¯Xh£ƒBAþ¹)ÈD¹2 ³h°”dŠñì´/ y‚Ù^3sx,”9ô $„¯Û ×.ÓçìtÙ¨WÒ$Ìža”Ø”ÓL!»°¹‰#¶´¶’ؘ%*bÕš´®U—Ó=Yz¢SIV‘´›ÅBš‚G’çR¯sUr²ܺ4Ì#¨à [6).-þ„··†—bÆI-ýBÒÌ–º©£$Q`ѱCÉ[ì–ÌÙ—pw |4ŒU´‚âÒËË7’XhÒ'­¦hÚƒÈÖò´kG`äþíXFÎE>Ƕe\Ræä .M&üi–÷’\­”ñC5à•ViÚ0YàbµUoMèŽås*9Ç*e–D Mtk„Õ>©§A77‹$:MÜ“´R%Ü*É “ ò'âf0xŒ$IiÆLEçLÓNtëØ¦*)#ß-kpèüä–æDø•jÅ(~Yñlj”…$ÚݰŠãNƒE†ßOÔ–9åÔ%3Faˆñ´lvW.ÓJ&Õu»htI>\Áº ž0F•Ðü-·U<†HGìcÉ8Ñ$Ö´M>Æm#Vf»6ËåUnd/˜ÊÓ\ÎõBJ>5â³2U8úœ³"`—¦WÌ6úe˜’ÒiæhšKu_MîeŒ©V#£æ¶xâe6€i¦ZjF t‚BúÀ=­ÍÌ L!bnEmÛ§ syFü(%qwWÒ}SVšëP}fÝXQðfcÅ”×윀âEâ)CÛh²ÔõnKM1——¥m!¢j·Øž\w¡þ\ÎÄ ¾€ž4?˜¥mJÝ­¬µ+H¼·d±]Ìâ0³¬7R*æ4ÚO™:~(‚$퀢ÒiM!‚k‹ˆä–K‹³ÔÂÀ$0 äœÅ%©éž(ä wi”úÔ² Ò-.âÎà†³£…»`* —¥h®A CáL8ô£îÖGD%–§q ÍÝü&ÃJÒ'skt‹4Ï-ÕÀë< Q‘˜=lg˜ÐæÙÆ9o4$—1M¤]E'é«y­†§qnDÒJ.}hÖ´‚Ýûæ> blòmˆí2=sO¦¡es4W¿XŽÙ`¡µ¼.€Gy!n#—ÀÈü¾Òã<Ü[ŽCsin³ é~_ŽÚ)u8¢{¹Ym­¬X›8®åIe´É@¬Õ‰öv¦déòK5ßDÈ£5+ýzo+y‹ÌW«o©i¶’® 8˜#¸yR‚I7YÅœlr1Ôˆ™c­‹!: \ÝBÖÚn´—ïªEh·PÈ P>ždš7 É*0jßÈFâxb)ˆ îǵ˫_Òš6¥5ݱi¦e¹ýÜfÕ"LF–«ûKFóeŒÄñ6Bl·òÄ2-ìPÝ,ö–Ì9Ëq$lÉrìEӗјÀÔlsDˆŠKæDœh«¬]ÜÞ*µµ¨@“<†B\Lñòä¤}ªe˜ˆâ;1â)Ý×èªÛÚ=å͵¥ÄDi¶î‰„FÃÕô“•] އãáñf,¡.>!ɫÕ®±ŠÏ\ÿpΛú}ÂC&‡¥¬—’›‚¯"Š~.<ÇL6c. i™$l¬g’åm¡µ‘­¬Þ­"ËÊÖþÖf-&D+Æ´â$ý¢¸D‰ïL…k¿,ßÝZÛ[´³êZ§®`½½.c»‹/¨n2ÆA©Œnßir¸“dJ2LoTž;&&]BKÍ?W{tµ…‡!c= RšIö‹ñDÛ½s.2ÉJ'ë:?˜µïаÛOa¯iÅk§*¬ï.¼»e‘1à¾h•AWSÕ|³¨j2jº¦¡õ«rå­´ßV+»9猱‰žA jõ¦J2c…»‚Ž›¨Fáf3Gwz’ý^á–WV­=‰=6ïOl9! U|’‡h4:ÂßË:õœ³Ee©¨Ï È–‘y b ˆÅxÒ¿ˆËH9 ÉÀÆ…”ßP¹·¸ÔôÍ;Ìw1½ÍÜ·0][ŠDºmÜ~’F¬@£ÇP]H£W®bË' Î#Þ¢tmö‹¤® Ú>§#<ü§·ŠÊ@× õ{&æ®Hª¯¨Eh3k§Ë(Ê;7qšd‘éÞ]O(h^e²V±Ñ NZ¹½Œµ½Ìs»¡FD®Äýž"µ¡ÍW‹—óÞG—“MuO5+«ˆcÒõfÛI6\é°Mn3J•PZ.õê¹O†DÈÏUŽèT_êß§-¾±deŠ)µ+—âT‚3ˇ 7«†P„|%~Y‘(Th¶[ÿÕˆÛÍy&ªæ}9ÌÖ¹IÀRXØúkä7¨iž_,D ·šê‚çq›-¥Ì°=ÚÂG#Œ·/IÛôéÄŒ³„]‚È‹N|µåöÓ^ùŒ+«l«'«ŒVij…íð€H øº`”y¾¥#Ön£Ñõ[o¨»O¡jšw¤/o#2Å=äÎTƒP km%z6faŒLzÈ!o Õ­5;D[¤šÛL*÷KŒÄÉY%‡ÄO6ùŒ Že…“²=Jx喇Ksog/ïm®Š*Ä’äÐÔ£by(',”}#‹äØHŠue¡[^ÒÞæêy5{…Y–å8‹îãïG›qÊÍžä Ý+°ŸÌÞ_óÑké4·RO”6Ò,©*IT”ºTÆ òävA¾gT jÙL¸O´; OP·–ñ¢¶—\Z£‰ZÞ4H¡4^‡âÌiÆãAAâÇ®dIÔ5?NÞGµ²•ml¯¯ƒ¼·­yN$ˆd#á#3%ˆJ"Žä6Œa“Ëxë¨Ü ˜ˆô2)}HʳÝ@¬Ë$*‹´‚=ø}­³$eïiœÌv(»è¥Ñ´ 6}r?­”‚âÛNºTõ.lg¬r£þ%•dâs£’FR™ãžÍɨF¯nïotm#’ù¢òp– R‹#£FEL@ŠÄÝTäñ‚c²MU¥šôPhÖúí´WVšÍÂLJ¥¬’CÕâ}Bêúv·]2Å›T6†FåŒÆªÑ_J6j<:æn!6wéK¢žüëRhZ¼ï¦ÛݬÖÚ?Õ N’YP”ÏW‹ðžÙxÇ·éÍ®#©Rò¦éXÉ ßÌÚuõº¡½ŽI‚êë’zr~×Ä&‡l†³4¡!1¸)É"FÉøÐtß.ÙN-ÚdÖ´ù‚Ç}gy¥BŠ*O"FýHÍ_‰<Ù*CÒ°—ÅWD}OT´´’DXnå˜\ðyTëOžåk%œð•TQV‘ó3bD1Žh°žËF¶K?ÐSÄtíJ4:=#6xÁúÅ»¨'¨Ú»m\Å2È ½ûÐNÌ{P¹šÛ]W×5'½´³½]3NÓç’1mun# 58ÅÈPûÓ6xá㸶Æ>›eòé—ZšjKuÏÊöð,æ¶ç,‘ÆÜ¡ ÊyCÐæ¨ÌÊF=\~¨½2âmmn`ƒK]CKÔ®õˆµ(ã·‰=(}C4<¾%`IÜT¹L‰Ç×v| RkSiú¸º†x4í3S`œÀËÓÁæ­ÄÔ9S-ŒHS#Ho1#QÖ-om¯í Ž(..ĬX38ýò@ Pð!‡\:p#è#vÌqDùdKõ»‹KíjZ]¥ÑõÑäT[‰‚zL±°âŒ€´Û.Ôp«« Çt\—òéPϤ 6óXK-áÕ¥zJÍ5ˆªŸE§ÃTÊåÃ?W&²/`ÑôMj5¶ÒÇôu¡¹™ákØžî …hyJmܽº7ž å?sa‡¤«åkqåë[mz}ô÷òA$ÊïlÏ$F>QŠGÓZµvø°CS+ç͈¸¡l¼ê<Ùç;]3OIØØêÍwõ]‚¼RÆÂI¡4ZL º”|ØœLÏ?ÇÞ²«RÓb°Ò­u 7ÕúÕõÜ/¬ÁsEOF{f2Nª X¬±’Fßmsþþ=Ä,"RÛ›[Ë2éÝÈë¨Ý[Ye¼U–Xšî2a1F£²¯%áÌÒN<[oÑËÆ-•hK£°·ó6‰{©k–Öw-jò¥¸¶HäT|U$€Yƒå¦bjbaWÕ£kxm5=!Y ­oçcFŠW%å‰P \R¿²ÙYœãê$D¹(Â/ü¿5…ºiÍw¬Æ³Ä· "^ÅoxÀˆH RXÂv®Ü«™0”2º{12 g£ù>;w³Üñêïy§ÝÅs';¹„±áºÇ"¿²ã¦cYÉqÒ²Ëm^êMæeÖµ­ÛY_½Òh’ýtÈb™• 7 àйôÒ9QÙ—-ÆÁ’.´]›Çjæ|¥‡€pŸë{ÙɦùŸÌRo2ÚéVP]y.+ªK¨A’òæ[éú±£rr<jS1§¦ÇŠ•Ëì”b©e¦]^,Ö–B/à’¡½‘#†ým/¡¸^)ð9ŠDq‡$ˆ 8 ]%ì² KÁ ¶ÐÛ$úN­nR êlþ´w lëÄ2·FZåbQ0 ñ2ä-7Y´Ë¹´øÊÊÖÇY²‰ü»uõ‡¸¸v¹—„áU¾ËÀiêþêÈx2ï¨5 µbÔàÔ.nm›LÕћ̚}ûéQjVÓîã‰LsD É*¦Ÿ v¦2Óðú†À´˜”$¾d»ò†‹gš$Ñj2úv>‡9¦”|m’O²Z­]ÀÛ%‚)ß§VÀ:#4ýÌš¥üÅ›wnºu­š¸$ÎÔpû¥+ÜG®u[Ö—WEV­FCóE P|<¶åö²üY¢g„`žh&‚QòüZž£i1jQÜé–z{I °Éõ~s’¢¸ògB®k×.Žj™ÛÔW¢kå˜t3Új¾¡éž`òÔ‚å=9uºº…â¼1þñŽÎ­üë–ñdÅ*"Ê\©†èÚ®”ÿTÑ#‹TÔ®­ˆô/I¸ q¼ðUБðšíÛ,Ôà DŠ-…ìMœ:õŽ·«:êVEn5 £ *‘É:UbŒŠ|R…ÇŽ`ä1–0äŽ>…‰êZ¦©¤ÞDڅɸžá½6²¼y¤t7L¬¢1ȨFíZ¶eâÁ(°*™õ ŸË×:v­qa£3iÍ’YJ!+VßW>¢sv©fv¨ ¢¹…©ŽLt{Ë]R­*×Ji,®´è®5«¸!½[ÍJ6x4óe$ܲóýDn4§ÛÌÒI‰Œ¨r÷·Fi~“å›mJÁ¬u™c··/:Ê, p´†T/Îe!]O_gÇ–Bwµ¸FÊ£A³–çRѵ0òH±iåå})Š*¼±HŽD7ØÑ±3< Ñj¡S²Ó¯­uƼmHË¥H÷W¿SÔU…ÌòÀ‹Z…b6¡øðj2Hâà#~ôÈÙÙ3†óÊ—šÔö¦ÏÒ¼¹³¹0ÙÞ§xYY'^G¯ü[ò\®òBrG"•[Cc<óK%ĺrG%ãXÄ [µ°-É EňŠm¤ÈÜó&äAâ²%4×`òݤ³%óÉki¨Á©¦4†QjpÎ93¨ë˜8òå ð,4e²¼¹ŽUÓÞÊÝ£ô$$KÉeähA$ fºY ‚y‚Ô6/ÿ×åz}íÉkˆµhM§£?Õ!ä¨lä)ËÓ2ÐçÃá;ÎxÄåcwàtU湡¾þbÖm¥Óï#w··Ñ`>¾Ÿ%ë‘$.’R¦¿ã^¹!§”AŒ?Ó&"@æ›yšS_Ñô¦Ò峊Öâ w“#Òy¥¥Q+éÌ”¢øæbÅ2$-„d#´‚…ΙÜÞùZóP¸ŸÌqÊ[›y‰š¬Ü¤2@Ì­ÀŸo|¬å8ÁœFÍrÉÃô¦þdÐ'´¶ý1¨ªè]¤qé÷wŠÞO+01˜£þè¯;Šl¹<á–«ê=àA >¦KqnÚCÈtíFó”zÌ.y)²n"6ŠæMÙR£¾YœÆºÙ†A[ÂÎkȤ¹Š+°,’ÒX¨ìUÚ)JpTó…Fkåˆ^ÝZ€^am,u"(5)n Ñ#¶õ³[ë¤Y¢’XH=UçÐ9ÌìqœA¿ÉÈ‚W«A¨i7o<·]´’ÌóèŒRæJ<|]ÌÄŠi¹åÐåËFQÃCvS•ì‹Pkuž FâÛJÓ£`©¤Ú xÐ^BKH¢¤šU9Y³C›YÙ ¤j%4´[-QY^[KoŠl†HonõI"’ê{J fšÜ2š#ö@‹52ü˜ãGjh>j£G‘l4‹[Û¤K¹oâžÅ^î— Î)4¢†¾*æ<¤ä4VAúZëÊ6Ñù~F#Xšv6„§¬8/'I#!™T2³ü[õ㓉àÌm2» .šÖ:D²éº$m«èðzv—‰5ÂI<¤$äÈçb”øGFÌÌñ2[Yf¦ª]#·›Ågû(]HÜ|=²¾49•ˆ!^M.ÞK´¿Ö­ŒŒGô\ÓX¿ 4ÜÌ䣎-FFÕä¿\rð ø¶‰2½#Mhô›}ôÛ:t­:ÍÍœsŽéý2$õhíÓ¦k5f3—NåP–y#‚O¯i×—±-,¬lCZÇs(åÔÓš„?f;ã€ï¹¥&§°AÚç]éúu¡Ë§°›J]<¼Ò<«0a!RK;Óá,{e“2¿OP¹"dm1šöÞâëS¶‹K´–{¶úî™fcbÀr؃¸©¡é”ʹ·Œ6»8¬nt¡y¯[Ýi³ÞKxëME…@‚”ÈXU›~*34ŠQݤÇå©gý!º°k«ƒ™äZnRÝ•á!_âåÆªUÅß+ÉÅm±b}FÂYq¤iwZ’CÖíQ½žþÚ “„À…ýר»*F$<0ñˇ¥òlÞ‘ú´>f´-â´KÝ[L†ÙtËX–%¸† ÆG÷è\7åð÷ør8cÅÏe˹ »Î³G{¨.ˆ³É7šÖgÒtØ:‘º¨Þi“[¿­D¿Ðt[»Iµ™ï&Cw}zj}•?þe®figC‹©mÅ$‰G›æÓõ-ZøÌ×öêÚu­¬k.Ð[¹’[…Š3•Ú€|C2òJB#—{t»™Ç&µ=®™æ u‹L‚ÚËMŽÿá•MÑkjªŠŽ(å)ýC1&x  Î…6±:¾‡þ’öEÒ®íl.f·_ôÛ¹ pÈRFÆ P{ýV q“:jŒkrÈ<ŧhZ¨“C$×WZŒ·ºŽ‘)Él÷¶â10#Š#«ªað×vë•iõÉõ º'ÄLrÚÊ{;;­AdW6’ê–ú©2Ÿ¬ÅlÍ ”­MÛËD|YpÿèÛ‘Mïµ&ÕìgƒNÔƒy—X[f½Ôì^[V¿k g’JqåÓÔ/!ï€HÂ{ïÑL‡5 •Òßßy—ÌWVZÍØ‚YÒÞY®-ÜÒ—+ZH»°øWâÊófžJ„ßjh•{´‡ó,VW³Å}¬f»»ÔâŠd»·š6-k l„°$ã%N8„$êói<é ­—½ò¢hZÅâZj6lÖI!…n2²B¿h$g¨ëßž$KŠcjçðn eÿ“,F¿ªéw×R[ÙßÝÛEsk"ˆ>¼¨.ITš´Eoö—2ŽS lC¹e-å/9i60Ïq© [ù\_I¨iê.të½2Ö0èo²Á+ûÀi˜2ÇŒG„›ûûÙß ÙŽ[Á§yÛO‹ôþ§,ŸZ½yôk톸çÀ¹v§¨¨Â‡oƒå™%=9¨Ç¦à´ÏžéÆ»{ug¨>£G¦ºÁäÔe—’p£„‘É!-ÄÜÎ>? wÊq✣ÄMÁŒˆÛÕ^úÖÿJ}ÒÜBÒ¥Ìà–Tô#£Ê‘lk%Y›í>dâ„LRA õÆ¡&¬ö’È"Ñ¥ÆÓUú°XšY"IUýÛ½@ûYV5oÝ·ó©È`Ä2Júµ‹%"Ò4}*ñÆ£s$ƒRÕ´ôŠÂÛÔ&)@ä,»ˆdCÄžÅrüÙÌ}°oÖÖúg9mïôé­×Nxí-®YI_Jy8?¥!¯ï©ZnGlâ1‰Žacé¡{m-í¶<ÖÚ´Zdœ.ಂH 謫öÈÎrŒÀ;Èn­®Ùi^c.Aûøm/ P*ÜÆ$v¸i¸‡2ƒZ·×)Å9c±Õf(3TÕ¤žO®ÝÚÇ<°Ü½‚Z¡X‘-YÂôƒ4ŠW–Ù®1ã‚ÿÿÐåze”ºý òÆp·Ñͨ5¶­4±˜êðBÌ –o´Œßk¶qb¢lŠ¿¥çj™ Šyth°ÛÍ:ëçLAfš~šWÒŽw•%”Q€Tì¿ sQ9FuÉŸ%ñê—ú¦º¦©jm,%¾š-+Fº’)"š& 4‚Ll´®ãvÈOœ{ö扻´E­­ýÞ¶×:Ìvò}a«gé©[Æ‘£$’E'¦‹Ðtä|r¹Ž2y lªßW}=ïc»k[ZJÈ(Djá¨EAŠ•&Äጬðól´]þ‘«Ýi÷~_¹h´Û¿¬}r[Âè$–L20¯Ù,_žYðÌu¥â ­ô5Û}Iu >òk»{:àºÊ­mrœgJ `„üMS·-†edˈõß¹#t³S[ˆ´uÔ´G¸¶Š$‘"–án.Úd¬RäBTS©Êñå/©%Ö~W²òryAæ¹¿ŽæÑe¼–T‹êÑÜ ˜ÙeBX*BÃ!“,†n0‚i2—M²´Ð´Ï-F’Úêò]Z–íÁT$r)ð¬Ôæ¨û9Dfe2KX‰;ªi¶^aÕçÕôËqþ•§ÅèÍuðÛTrÐÉÌ|e$C×_‡!—‚4[.“ylu]3KKä{»ˆíÖHaŠ^"I9+üR¹©QJf—‰`1{}Ípê­«\Áo`.¤`š\×)us Ôz¨Ì»‘Z¢mõ€ôŽmç# »{[ µ{»³m£ÛX\B‰—©ð 1Á$›š>/˜Ê =5Ô¬³ô °Z}|k |ƒM½³3– ¨Ý\‡ É'lž9pG„µð™s[¤]}kUѵ Uš_Ñ7OexÉÈF‘ÜÛ´@©;6üȉðæŽ.G™£Ñã†W¸š XÞÖöææ;¤º™e¤Ð (t“pÁ é’É1Ä6=Ëb’bîÎ÷K:NŸŸ]Ðmk;N¹oR.G›Ò]Ø~&L¿M F\S?S\m;ŽïNŠóÊ×mb/m/,­§\æÐGoûªOo$¡ƒ† Â&\ÙUŠ(?0ÅäÍmš[[["È]h’²»~ý[”ìR½L`”þßÃ\ÈÁ–@Õý\ÓB˜ÕÚÇ”ÄÅ‹úkp¯g 1X ²Ö/¬wgøI*?Õ9xeàvééA=:ö£rº6¥i$Iõ™+B ÝÄq¢Êëÿºã?îÔ_ÙÆˆŒ„“­õ̾Ÿ¨j¿X°×õ cx‘A•ÞiǨ³+¨µRgý\£.9â¤Ø,8VyÖ#ç8ßé:Å¢Øi:j[›¥·‘}’ A„¨GÅôàÓËÁÅÆ©²>”¶êîå?C-ÄCQÓti%M6;§i—.¤p’D°fê3.3_"y¦$[)ßó­ê¶7jW·6ºÆ‚ñ/§qqõˆýŠf^*¥[áQ׊æ$å "+½‰æïðzéöñ\y£ë?[IdšMk#ÆÔºy\™%Ž6?žYOŽH1¦$Ú.æÆõ´q-ØOÑÀÿ¤MÆéon¤Z+;‘±0p`Àý­Çí ¯O›€î6*#E"¹·Ö úµÏ˜oýgn‡ê–!ᢽN&„!~'|ÍÇ8oÀ9¶pމ®—ttÝ â]}4ënY®4ûvY$2? (-Á»FE쟳˜¹qÈÈxvGV®7BëÖ¶)¦Eªj—qêñ‹[{E­Ø‰ín\´$F¤¬e(É*„æDeêôŠH‘¶5g ¶…®iCH0A¡Á¨Em®êð:ÝÞ<ž¯U€ô!­@ÙO\Ï2âªl”c^iþ›¦^ê¾pÖ5[ "‚hsªÈ±ÉW/¿hGBJÿ»j²g€ ØÚÞ™± ²Ù25Æ­©þ”žæÌq·ôãhÑ·`Ê˓ǘõènQ>\ÖK³‡òÞÃN¼[bI.oÑä/õ[ƒ”˜Cl±HörÙúÿxy†`ÞéI¸O-Øéégo$ºm¤³ZÝYD9ÅÓ³r!ËŒcñázSör'5™sh¾"›é[‹5×â/õ+û&Ò?Óëj—1ÂÁ(F^`5c˜y2ÈK‡”QÆFÌ~+¿0yrÚ-æÒwdv†Õ¢ r°‚ÿZš7uݘ¨¡ßìæi€ËkäSæÓ¢Õt«Û {3ú"ðÇ¨ÌæoZind^~¨@BÆ¢„v8æ9ÉQìC>Ü%2YO¨êv–°Á{±­Cuc5„ÜÌ¿XŒP„-Eýà |F[ mgpØ'Ъèwš ç•´›yb[½bÝÓS–GõI¢NMÉ&ËÁÑh|peÃ1”ðìÜÎ@²Û;̼cu 3ÔÿIÝÜ,MÍ$C$51·%ˆq1)]ºdóDB7ÍŒ£²cuúFêú{}?Iž{‹Kdº—S•_Ò·pÁ ‘,ƒÓ‘Ù?1”b± Ó[#"Ñt›"}sH¼3!r³NxºM5Êó“¦B¯0´osFÌIeœòQزº@é‘Ñìo›K¸²Ö,–9$ÿFy\–ˆ*Õ£44û²Ì™=G+gÅĉ»–;›ý+V´´´»Õ5¿ß3cèßFµ¸J1¥k¾ßë €»Û“_ÿрş®é26ްóÒ }CëFÐÜ^ʣѕ$T"£µs€–¯{;EÐ(‹)°ÔîôX¥’!£\ÞHšœWQ…‹Ö1!@#n+± ß|”òÇz“‹§·y¬Þ}GÌ:]³ØÝGëýf5V•'aKƒZœV®}¼3ÅáÆá-ؘØeVú™òö­ùNh/´MoQ·µk‹øÊ¯ÕYX¬r4»³µ#-6ÈcÓÆc~a€Š=u½/X‘µk ªÎ±Ë‘§3܆h_›åT#•<3[› „ògTË}GM]/L¿±MUõ‰.n$¼šá ºE³’ªâ‹N2NYœ1ÄÀ‘µ--º»ú‚ÛAw§J/ìî.›,ȨP‡ˆø¹†V?³á”Â÷ù²dG—«å÷¿²ŽH×TÖ® “P°´¤‹dõmÃ4bÇ’0¯ÙÛ/ÏÑFÁ}£ÙÞÙ[¤× q§jw’ƒaj«i1d¤r1þbE‹(nG&³²|Ïmo£_F²[¾ Òi—LÔK·Š6DÔ r‡ vÌO r"QäÙºFÚMÜÂ+x,ìcòõ²Ë5Ä5ŒOqwlyQ Ãc\ÍǨmø™oHac{}èÙK•¢2Ã{°‰I#q¨œP•“—qörøÇ''rßÃBÙe½µž‚ú†•ojé:ØÏo«[Û2ËÊ_Š&“ŸÙu;G!ïFœ‰M0Ût›L3éZÞ±t¶×oFåf&:d(~™y2Ý,Š8nm=K_^dg6ìÊ–ëk¹^‹RM/ˆåcˆÆŠjâ†×o5mJÎ]F-rMA9Bmaµ&­˜*¯§Ý§0~ÖÄfF)F>’Ö×O/™ÖÅ´Qq¤ùÎ+Hµ)XÍ›]¬Ãë ñÕV•ë\ Fä8¢ÙR¥äæÝõ{]`z:šÚ¢&›Á$·úјI±2 •Û’²³˜óÇÄ.ªcÅÉlðÁ™ùê>ª‹wÞÂú‰º¯ØÊý=Ƽ)®{nKkÝ#]ŠîÎ?Fý!žl\¨Ó¥Š1È,àì~ÙŽ_K ɇ _6Óò/Dý¨=Φ–Æ}$6òôÿz=>'ò«f³S#ˆÐ6Ñ!I™†+­:ÿËo,PÞ[´WñÃB&~A Ý•ÛÃ)d˜(Iµ¦k6“©YÛ\[æêv2­äÆßáŠt+º•û ¤fÏIB\a™ÝVÆ4K}2ÃDÔ!g%ºK;¸ŒÓÉËÓ£’¼º‡!’QÉ2fGšÉô»[(¤úŒ_T•èÍëF%†I\òc4f¬ŒxÔS·\¨e<\­˜Ü¢tÈ//õ};L³ МI.¡qD±Éhõâ©uíÇ Èóc0m –©i•u¥8Ño/ 0ÝÞݤ&á¢y:îTR´ùfD $<ù³ŒHËWó.™¢Ù6‹ya¨ÞÙNdÕd2~æâГÂ?Z¼¹GN?,™Ž9Lñƒ]Ç~hç”y’ÚúêâFžUÝ»±‚܇cnéñBS~ã5ó—¶káÝè;a¨Çum%Ÿ•É‚K)m¥­äÓ/ÀÞ˜5bz—¦eW±Í´ŽˆTóBÞ¬–‘Y‡Ò¬.,ÚîþíQ¤,>™8Êê>þl°bÜ”€¡ssªÊð`†×ëq…RÚ(­Oô„Š: ¬›>ßydO£rÝÅA9–äF“¶?âfÛê“IÌÃm¾æ…]H?Ý=óX¾N1Ü `¶¹Õ¯d)´ÖSâ¹”Gé#I÷@äKSoˆe²È¤ß$ªÉ“M¿óYY$z®§¶Óol‘ZuKbw÷ DiJÉ›)dýÐâ<›@ÚŠq¥_ØËfú=Åä—‰m¥DVQ0†[ÕxíÓ‚’ L~Îbœd½«r/cXôKMCRµŒ±}>æãá1DÄ3Z¡SN>°4ö¯lÅŒ¸È°ÔgÑõíNÚÏ\ÔtôÓn£ŽUy„q¤¼N Ä죡ûc'âGà6W^ùDM KÔ~­¤Å¥­äwÀºÝ]É#Hf!j%í™>'¬õgŒõ(æòο{y§ÉCšMruUa§%þžëþ"·i$4&§‘Í€Pª•ZŒÆââ˜z¶ÿÒƒZM¢Þj–÷þWŽëI¸¸sg"ȽñoP"ÑDá‡!O†Jqïž©2á>¨ºI8¦¶°è¯å[¸¿LÅ{ Eq]3U·Ü';^2‘£ý™#‘v?9‹—£ @¯{LbCÔôJóDÐõë{!¥êðÍqc ΚŽ¾L´“ì–J¬ŸÍÇlȆh‰M‚š"6“jóKv!MF+å†_FÚØ´i*+Ûð]0R8Ô·»¿ŒA"Bÿ5FB[§Zm“é:î¥æÙî¢/LâêûN³“ÕHå ¤—qðÃ'*º¯íŽHrFOz‹w„g™¯~¿ÇO²TŸT7R5VM9#VGàKCÔB»íÇŒáˆâÜ0 „4ªÞÎÐiòXé6¨«Ùj:È2Umý7‚&"®¬~Åz61”ª[ù0¡­¯ÒÎÈÞ›ymà’ÝM¹hHnH·ý¶øë\„ã.=Šx¬£tËIæy’f¶•®m¬ï"Ep­"†žAàõ¯%û$|Yù¯Ò×vQz–œ5}"áµý"{;Û’÷CR·‘^’)hÉq½:|QÉ’€0ÜœÉÖúŸ˜­¥D„>•)XÜ"ÝQãTU7€ þl¨}dÀsS¶µ²:•ìÒ©e²²–;‹«iDÆöÒÝ”r@èÊù¾yy”Æ×³d¤NË,'Ô¥kßÒ,¦ºOªß^G-.fŠXǤ÷AÅ ©U¥ø2š¡Ñ(É,JZir]²Úê¶Vߣ專„5ÛÒ+¸Êü%@%˜÷Â2ˆ›G”%¾ŽñI ¾f¾¸²’KmHÛ©„pÿu»°:…GĵÊ%˜Ê[ˤçJm:(îì„Piöi$j/ÓÓF¸Ÿã‰ÑÀähÛWéÊx¥) kJt 6+=#ê·ó›9¦ç÷w ˆ’k7Ú#ªfF£/€è€vÖG_Xì5;¦Ôuˆ­n-4ØÒD˜&Uã3È !èvl',¡È1&ARHÝ=´‘’!oyu;+¿ÖàhXŽ )êåÍ^èF2ÉæKù‡é /a $JRi—Іgõ|]«Jå‚R Ät ø™”ï¦y«O¾Š8î4 +…KÝF…Ñ£Í F£áe;¨#0%áÔ¹–rŽÉMÆcxòÅyªÛÙù¿Yºal¨¬Ï{¥zÜ¢˜²ÉLjã]éã› w^xb:÷±ˆTó5ö—¥êÆX&µ}Vº¡tho"¸RO'‘öŠŸ VÁ§ŽYDßNM’!ì§s¨´vT—CŽŽ#%-’=FE¾,Ž(û{àÉ’ãR¢Àì÷†âöS¸ºŠéä·%E_ŠùPúƒœuä ¤n§ âŽÊðkzIF¶‰¥Õì¦OZÚ2G5fF4ز—þ®…š2óO‚êÂþþx•!ÒîVK(ãõ/«Ý¹ååØ7Lc2=Ñ}ÈiôÝ& *Æ ÏÖÃk¦[¸DTÖ)нGÈäüi“GaÞÈÆÂe§5ÕšÃakWº”ÐGoõkOînY}Tv#™zŒ=ò¹ÀKÔžæ›sj9ÜFײEm=®—*½ZKžjdçP82©jÙËðÌW½HÙ,Òn¢¼¿»Ñ-¯[Oµa-¿H§–áH™$ Wâç3²ïÀ•g¶Ô^ÞÒð.“qew:^ÜÄŽæ`n*‘GÀ椕\x7¶”,W73E—ìUôiÉS Û©š)aªQ¤ …1WÛ®"m 'Z•–»muimlVd´ŽC}o!VSSÜÛµ(ÈWoõr¨ˆÊ Jm®¼Ë¦Ï¬G¥C:ßZÛ¯ÖîG$2Ap”‰˜·_ Ê1‰á%‚»Ê÷0^èúµ¥ºCk®y‚Ú)–Î&h.ŒÖFfáQ(+¿ÙÈj±˜ä‰&ã“ 9"õY¥¸òå‹]êÒØhÐÞ?WÓ,ÎÉw‰ ŽÒcRÞªš»W'† "í¨hfÒï¡‹Jž÷ýÑí.Ü-9{[S )nªµ5•¨)·ÚnM•Ë$8ŽÛ¹–è¯.K¡y_PÐíµØ.ãÑõháµÔ^WŒ~ŽR ÄR¼¨+ÌJ·ù$å²Ç,¤›}©Ç0„Eð”jÅåÕ–þîî[›]=" r}8Ø€@e‰NÇÇ13é«ô~¶ *Çå=7MWÓN§«~?w4±Šén-­Lfø™äãÃÓ^§%-Dò…&W³)Ö¾¥æap––6“C¨iÐÇi§Í‚éuwõØ^øÕUj9eZyœdƒÞÛ`7W?—óÌÓ\ϦÂÄ1€–êK¶oEDgrPºÝó:Êu¿zÂ[îËÒÿM_ªyüÆÐ]-©ò×”¬¦¶séLZkÊ;DÍé+S©ï–˜Hc1‘°\ƒB6¡`± 2xn­î,­m\ÙÜAo#[­ÌwOÅàS êÆäÃÍ p†­m´Ý^ÆÛNµ–à>4×÷rÃéÍ4ñÜ틨¦6 íFîKMfO3غGa-ÂZØÅ/ž(Ñ~7‘bK6Ôû]W+Œ8¢#%dPÙ]¦‚uO4@ \Çõ¹¬â…ft¤Ž¡­äåUp]GìôÌrÈa‹“¥¥\y}…–©¢¹‘E¼!_ÐÄJµñaÓ18gc&“"S+d…弞âhî—Smô–gŽ;gÌ|ccJr ñ©í–ÆB w³ˆÿÓ‚^Û^éœuhaÑ¥¾·•fÓžfôn'ur ñqf_µðï×8(0c¸–5»bÒ×O½Ÿêš=Þ{´Ž3j‘:ÄYX±¸GÞEnU5=3ÌTÎÌcbíy}b}>â×{xnÑõX’*Gq/(£–(åÛ‰¯8õú3]”Ê$m³Žn>ä‚ÓÌ÷QÝÄ¿W´ŠÑͼÖW¦9£x×’H Ó”C£mVþ\Ù _{.ä&iådÑI[j/kl·ò4:M¼d[Ýzôxá–Iz±ý¦¾Í=òìÓ1•f¹÷3É!ÉõDév¶°¥¶©o4Z­ü¯èzª’sD hJŽþN)‰FR'qÈ&2,ó%¦©w«Y]_Iù6OÒ ädŽApVD‚£—Úm«–éãã5¼šø€ “Ak%Ódklåæ4†K’ó=Ý»1-"CÊEØòø[×5²‰ãõ4B6moÆ¡o, ´6V×ÝžWú×Õdj@)âyÓ"Dc:ÓêÙ å»}?R´Ôõ™.ϯvD†V‘Ñ$'ÂâÌÔò$|Nh§éÌLç ˆsr¼vZŠÇ¤ê‰õÁk£ÀÖo6[F¶þ­Í¸/IUšíÛlÈ2#mûšÌm>“giakª_jÎ;• ¨ÞÚ+úF¢e`ª@ ñšÐ–NÏ"È[åénõ /eÔ­¥î “O½EQK‹T+éMHèGc”ê'áæÊwMk}°’òÞI}8-.¥VKŽpBz|CÉÐ×íã\xª€ ÆÝûßÅé/%ýÓ™#ŽÒrnnÀÏÈp\¸£È3·MýcJ’Þ[kˆÝn{²&’)‘„µFc@$ @¯JâDÁ¾mDˆöÖín­›W²³–šäšy$2ª·!ÌlÈ žCö{d)R‚J[¢iì5-(Hð«ÇÇ‘ºµÄuP•ßá©£±l1°Ö¡ÒÙ Ý‹Y¥»%ˆŠÒä™&/Vrv-V*=²¼y6 Û =6úki׋k¤KyÔGi¬±« K–Û—Úf¨g4š´:^ÌÓÛÝj0Å$ÚŠ^j‰‰EäB(ýH¥ €§ü0ÌÉUh1(å¦êľdÓõv›ZiæMNÂk•Žv¶Lb^Ô¿oò[-p†ãf$S*ºòï˜WMžÚçJ··Óu$ŠMGVYþ·wlÊÉ$oqÉ–­·íeXòÆwL¡¹KÆ»©êZ“Mj¶FÊÚ3mg§ÊÕµ´±GYgfaÏ÷‡‘5k2gÀ첊,n<±æ&kϬ%ö®·Ðy‚õæš®Û).±Ä¨Ø}ùdòJ@ÆÇJi”ø¶Gù>±¢k« Ôšf©¥ kWhä‚yµ+EFŠæëPÏGZøe:yGN[Ûdÿšou-KÌ}æŸÕƱ¢éÃQyÕ“ý*#;’i2‘BGÚÌÑTH“#VÖ×T‡]ò+Ùúw–7Ú›x¥8*’ˆcSÀ3uørZœeÄ‘[­Ð¬â‹ÌZÇœ4‹èÛI¾”Gœ²±˜_¤ž¤Š¤ÐFVŒ«NíL–L‡†0õ$€y¡~¯m6–ú'ší%´°òÆ­öRúÃÕËûT>¤‡’š‡,ñN2@ç!ö#«e÷m¨,Z-äßê1É5Іá’Ö@ôä·²¯ ¥y§.œ¿hf1’I,«t·Ê±iº…ýÅåô—ŸX6>’iSR=8‰ éɳº qÉJöÉÈŽŽÛóiÚi,4ý"ÊÎÖ§¨Iõ{{ɉÃj¡Š˜•ÒµÈT‰³È2舖qézK[Í;j³½Ìnn% áFøX¸ë”Å#ÜÀ…3–­}æ[hô»F´ÔmÖ6ŸÐ ŽÈ¯9VHªK V’}–Z÷̳ðÛ 6”êzo–ì!o1Yè1ÂçëÉm•…\³¤‘úrQ†Äjx`Ç–y%ÍŸéRy´Asa6¡ªc±†r÷pËÕCTüQÈÃu_°NGhš-dYCÍ%×Ö÷¡¦Ó¯f0É:Ö+ÕxcYí\Ç›zr2ÿj™™é"–²]]膘Úé5Ô\j jí$¬¦:ªñ4P²-‰û ¹^?^ÝAT·Ô"‚ÏV¹ÖYXÇr¶Òé@ Ætcñ3©&P¤• ïÓ!’$Ê¢Æ[•÷n›&­§K©ÙVú›IÔåSÍÕº¯§­oȨaÔ½(rÃÅg“=Â$iöWZ‰Ñ5Asw®è0ZµÅµ”-K&E„þÓ­~*}¡˜µ(Ž8õ¿zi6k¶¹hÜò¶´-pìÓˆÉ!*QTž|@|ó P"W&ª@éÊ÷é«y¤‘äg²Ü±Z³š±ú2U=·f6ÿÔ}å.ù„ÎÚÞ8Öî,Úõ7·S.Ÿ-§ÆEÙ¹VŸ§ÅžU>\q#˜uÄŽåˆÛCå­Fi¨þ½ìMmks*»¨ŸŸ4õ÷4_#„}œÙa&Jvh%Ú¯™%‘à·—S†Ò ;»~qsçÆÎ&¥ Ó“‡söCæ\–<6*C›T÷YƱk¦Ûê–>a¸Ž×N»Ö)gæ¸äK ß«´vò@MT‰€­)ö«˜¸³â,ðý=ÞkŒŠ¤¢á5 –óMž’ieú6Ò!k‹9ìë$2ÎÎ*àÔ… Wör#(ŽçŸ^âãF¡Ñ¬ã¯S'×&ÓÅÅÖ¡úJæЖ֩ªØ”‰­ù´‚8Ú7â®üÛâä§ác•⑜y6CqiCéßXÎðß,¶7S ©¢2Û´ËH½Aoß(aÓí.LžÀ@6±u+¹ìôÛyš¨±²}|ŸZÝû#; 2"‡ožbåÓÆfú±(Jæ(´ÿñ†·i&ŠQ“VÓù:É3DAh=9E ZãÞ nÖJcæ/ÞÝëÚlúUúÇixÀÉ/ÄÒ¤W1Ž!g­UW—ØÁ‹,aƒ~‰ ‚8ù® O¦6â𮤜¼èEQØì‰þWù]2|&¸š¯zM¥‹NŠk[(âŠï˱´—ÖÐLàO,³¯6ŒH(Uã<¸öÊ|rbKe³WÓÜBÞÖHñÇkk<¾¢L—ev$Еï•b8ºµ„B]êòÛÍ©Gkm5ŤpB‰–0 @‡sÉh܆O†9¹³†æ’çT=Ô¶=[v‘ã%y Ë,IRµû4̸ã„uf­·–ó^³…ïÓÑômR[ÖyR1 R+„Jý¾Û|9‰“Š˜îÌÇeML<°âGƒL%ý(¬Üï¯9*úL]¿nÙ^Ïêh”HäÙMlº­Åƒ‰Öm6á.çYVÝ£–dÞ1$È*b+±ÓÇ6²2àóeÓw¬oíï/õ8®}FH䵊9Ë•`Ò®ÞšåëLÃÆ3ÂÆ4³OòÕ³êÍŸ/®.,¤-¥²…ÎdVVfb…~ÈûM™“ÊD+¯zžLƒQó&–š5÷˜´+g·ÔÛP²±žÚå$·6Ö¾€YÖ‰·  8ü_cÇ”½g’êǵ»›«8.4{ÛÅ´Ôïu[i4û¹ž_ÝÅ´°A­T‚Ù—‡ž ,S(ÀÓIeón›¨]4öšf§¬»I{tÑH¯ioc UŸIoN„íö…ÉÈË<†…Šg:*tŸRÑå¾Ò5Ciec©G+jpDÏsnRªWÔŒü*YOÙõÈG Å +vAKQòûMäËôòˆ…ô­CPŠy5 ™Vu/ñ]ȃÀKº÷ež'(–Nt²‘Bk7š%–…¡¢Ü}aäcêYFgŠƒºÝ’yz¾¢- “®KMûÙÊD쳺¶¥ÞØ_êiV·I¢I–[K– ê¯Û2Ê¿¼ $.I‘:2ä£QžÆ­º“Ë(¯cŠãUÔR+OÕÞ= 4ø \ýNÚkfk{”u4aêFªN_ÈÌDš7÷µ™ J²{ÛX¢[˜îXæhrÀÝ'UææHx˜·ì×3 áDŽè‹ »ë‡:ÒËk ˆ’o\]E`@ì_–͸éï•e©gd'6Ék{¨I&¹­¤$7QMŽy5iÇ#«€Èt¥>sÎ1ˆ°m®Ð14Âêo©4wðÃiit9 "õ>®KÛàeZœ0$Ë"Òÿ-ßhoy&­ s;6Ÿ,0Éû­Rê@ªŠñ×âe ¹,°—_$ƒE w=åÅÕ®·m,Úì¯nRì"…n!ä’0BBœù"Ÿ´eó 6ž[*jp6³¨éö7Wï`¶‡×¾¹½áo-õºݼ‚?ž²\|MoŒ2TM–iš•¼ãôÌ‘<°ÞßH,Y“×ÐÞxE º°20ŒoÉ|zo™<#~i¤n™s¥é.&ÔmMÕׇ݄Q؃qk ü&Õ˜ü? ‡áöé•ÎDQAÝCAƒS×4Ëí` õ`1Ma§A!7Q´oÊWš1F!‡ä:ŽrDlÈ’vß.½¤×W_¢ÚÚÿNõ…Ô×R4±Î— îUÀ# z·ÙÌ DÌ a¬ÐL¯¾£¥E¤ nÞf{yma ê¬<œ2©qö’#JT}–ðÌH LÜy2ÿÕ‹j~n‡F¾Ñ5ØîYüÅoqi µÜ¶ì’Ë”¢v‰èÑ8ÛqöNy”qœ‚Q€éJåÉ‘Lþ]Ó|ÏtÐio?éTY-­ã‹•´kvyŸÑX°õ~ÒrfBâ~–2»`ZÝÞ•£‹!¡iºužÉe} á3^´‘„°c©n]~4£fò"y LÉ⤟W6[q.‘«]ÛyzÎíî5k­:Òê8ÙVaÕnQ7«û,¼Šñ§M³QŠ91㔇+háákv¯äÿ4®¯nD¿¤.MíåÀ‘§xú‡>˜$4cr÷Û3!8ç…ŒãU»vÓyV-NÕ!’m~(á½6í14s¹d ÍCGöסãðûå#›=fÙHÝö• ]´ÖóIæ{Ë9¥¹´’;w´•¾µñÉYd4ª“E¦eáÌúm§†Ó{]GËéiåÏ&y¿SšÏJÖô»©¯­b>­Å¬—3Ÿ«É+Ű Èß,0ÃS3ˆÚ'š% Ü+\Oæ0Ém­=ÅÝ«¤…êi$µšÍoËzL8ºüÍ>ÎcÌBFã͘‰"ÂÓÍØ]Å Ísåë™Z+1¬(ŠI¦We*8‘Ä–îße‡ùXŸÂØ,Àá p^´:m†e-ýÅ…ôšŽ—v–ñ=+š‹ÿN7$È‘ èŸijl0ÆVg.Lxvµ-/Ê:U‡ÅkªÄu‰‘æŽÒ"-ý½Ü”RÜ÷EVø‚oC˜ù5@ŠÛ½„dj‘wí7—tù/íÒHµí2 l¥—Nexí¸úÇÖæJü5â+ñqÊq qpk eåñZÖŸ§ÇcšïoÆHäÖ6riôщ§ââÕ\†N(ªÛdo’_¯Úé÷wqhvÖ×¶žaŽëÐKè-Ç£inÔ,ëVh÷øXïO‡2´Ùf¾M†¸i¨hö’ Ÿ/ÞÍúCôD†ãKFY>¯•ÖC#(¢ Ž5ø[®cO4 n=\hê8O e¬†ÍÎTÕu8‚ÜN#uh® ‘Ëz±;É 8´t¯|Ç‘ë-ƒdÍ‹N.×J¼×'ŸLÕÞ_3Gl¢Â ’%B=;žHª@"» üJ:dpÙFÝíBqä•k–šmΟi£Ç,1Îúl§S†Ö?«¼W¶ŒÇ‘­ p¼—ìþßLω–3uéX]¥úTwڽε£j¦ÖÀM©ßÕÙe{¦‰&ŠgqÑUÿiGžO4 8d:¹-lRHd¸Ðõ[}2[8¡´‰ JÁêZW@&”E FSAü§-¸Ø;¦B÷ ‚ÔZi²Oq§F§H™…«Ç#‡HÌÒ#ò¡ãñÓ0 ø·-\i|rjƒØêºjé׌ַÊm(fµ¨0°Aë¾dŒ0ôóeBH;}VÃTך5ÃS´YÖ¯E-ÂÚ¯•EJ‘BAÈË„x‰°YDR=ôû=bSæ;Û˜¿Ðo•¤µHÑâ†'·Vh º’CW¯ìæF9Ë8i=É^·q?—侚ÚOÒ³àšØÜ+Ù9¶©ŒDG‚kû¯j¹8‘“%GMìŸë—í¤ÜùW´¸ŸJ[Ô‹êÖ“ñX§šs4*C2ÆQ· ¾Ø#Žæ"rJ­t¸,¼±æ™´kkϯÝÛÛ[ØêIÅwjoÇ|É<`K1ꥺUÖ=ÿÖa³¹¼¸³¼·7×ÐNœœÁ :4•¼þû=r¬ÒœbD¹3‘ÚŠ{wcie½¦Ë§ßiÜÉs1kµžGõ"ç¡  ×’˜W0±KktôAh¶ú†Ÿpþe²é«§ÿ§y~¶.ãŒR9½¿yQ‰¥{ã“.ÞnZeé({k}ÿPÔV13ÜÁºä‘ªKÝNTº P>Œpã3q ¹Xòý–£§\ϯ{9&[ׯ#k±$eã6Ñ™”S’Ô™8vL©~§u¨£·˜ma—KÓ"¶‚;~bãëRrÆÐ€YFïÐæ<G¤›'ý‹i£Û鯬M<×­kõØ{³xî–ž™b¬›Ôo@Õ#l'#òb7,‰t ´ÝY&º{i-â,¢µ™eh —á’RªM>-ªGC\ÂË ‹u%7ÚÚAºÞŸ2ê77ÓZÃ-¡Xâ†{P8£™E d£Ž#|ØC1ô–2ä†Öîu[4¹¶°m>}FÝá7’¹v‰è¡£ °š×ör8"È(“k¤×ínîô¨n'²Ñô›yE‰œ¬;<@K;1©ÏÂ>Y,†å½¶ÉíŸ+]ýOÔ¶Òtø žÿC4êð 5–èG‘4#Õˆ‘Dé—:‘éEur‚Þ)ΫixèIÁÔ¨ŽF8fYë’Ɉ Ç6ge·vK«»u‚8Läݳîñý`rHK Š´ ïÛ š‰IõkÊÙ_ý¦¶Fy]QÊEê†X½EJE´dB6[$ÂÏH†Î1ÛÛ^,ÚÍŒBëL¾7Œœ%ާ£Qj6ÉeÈ“Í7‰m¯ì&¸Ô¤´:–“5©Y$—›\[Í 2Ñ#4£1ĹԨr(;¥Ám©jV™á¹žÑy0@Š"ä±@ûÔ°j£ðæËc±M(Ç =Ρ¦éúZÉmqaw£ÝÊ¥Š¤‰™B;o$’â;ï”ä2«¢Õ’žÛÞÙ?Ö`f¸•"Ò«¢-¼bAcð(O‹5²»²¢4P–ï¨Ýh6¶)¥Y˜Ö;³¡ÿGêl(Õ?F ™ìî<Š[w¦ÛßÛÚKÎìè@!LU1‚‡fS¸=ë™8£#š­sVéO«ªÝLÐMCEq”"'S„«©ä¬s/¨nØ$€µÒµ K‰Öͬí5a öš'¹6üìZämëG»-¸ä‘Ê76އXMvòyšo¬À`¸7Z„ŒñK?¤UVx!ãËÕV,Tó¡®Uù~ Ëd…¤:=”º|†Xl=]A´º‰–)Þì2Ʀ”+³ŸfËç+æ“ÉžG¥E¥ÛÜ\ÜZê:Î(‘ø2 ††Ü…•B¯*Hªx•#·%Ì]U8ÜÖÍzêóJœ|è [=?{õ–ø9§#'vÜ8Ì,˜ˆÜÅmõܶ·ñ¬§GÖ¯XiòJñ-æT¥e„îy&Ržü‚L-,¾–ê !ç¼ôõM@Ü7lsKeWdM… %4ÿ'3£9w˜óMšÔ‘i­Ë W3^\ÜA…ÑHchÒXË!Ü© J¯Jf‹¬\XÛÏu5ÌÍ:ÜN‰ ¼xU…efRÇ,œÌ§ÖI%uy©^i‹>”^ãOºyßOGu5ÒÆ³Jƒo‰hOƒ.S›Ââ#¹œ€fO§Os¤ØCq§\þóO³kMfþvxÚ_U ÄB ÈVŸÓ˜‘iãljÈñ1ýKHAýŒI5êÝÛA}sopX4HL‹ ¹Ó%VÛ¶\&x¬ ™IƒCyª^YéßYC°Òì Ehîaõ‰FÎèªQ¿—+à(™¤¾IËËíwwVÒ´«D„Ë+BŽdf$íÉGØjö®ã$TP`Ll!íïeÔ‚êQ ·¼·ç=Ü|fŽåG§È—Ø¡­Jï\¾1–3Âw ŽÏ5Úu“A§¯—µhy- ¾‰…"¼ŽÞB‰U}>8$ú²¼¾²ÌÊÀÉ]ÔÅðøošyHâÈ$㉔¿N³Óu=oŽ‹úKË×¶ ,1X[[%Ê2Ú°°s¦ó-†»)͉¸ÄJU+ü}ŽHêššëYÒ¤Ô®®.!³–K‹=Y4“ÇpÆ6´•* |Ÿ€ý’¸áÊ =å¤ÂŠ…îŸ©¶­§ÉªÙͨÝ>žÓi³ÚT`9,qª)* ÄžÇá9#˜íщÝ#²¹ón™¥Ï£ÙkR2[˜nD²«É,iÕÔ¦Š+ßjàœ1qðôèÇ$Y$—qù“Ë–¤¶71XZ‚Xƒ¶¢Ë{799P;•QörˆÆX¤8zü“±h#Öáhîmt˜Ãê ÚmÜÏ,rÒÙ8}a$a²¼d3ƒ·Àٰͼƒ"εÙá{Ñ+m4â8bàïmFŒ|²DmöÁ¤Š3U§œùÒ8-"ú­ÓÙ›+›³o¢Æð2[ÚsGŽI—¥=ÑÞ¼_Žd +ú,a¯gmssõöÓ$¸Ó4»A%´bðô­¡S$¬ v §±ñÌl•Ä/™kØ”ïNEÓÚÌ^zò^ðmBÉy°¹ƒRSQ@мUÐØeBÉºÙ‘Š”ö­Ü‘IròÞév^ì:MaPT U½vÿƒÉœÒ‡¯>­Ü&·H {û» WAhƧ’+SEé\ÜË3V9Q“àøjûæÆb&+káÝ[Ìsˆ–ÞÞGRŶ*?\+78ÞHeaFäÈ>‡Þ§'òäÈ*iWzn—9†X§•uÁ.Dü’Ø©î ©ùæN,„ðôJkum5Š"56{ê² J12ˆ”\!#‰ûò†R žh&˜å夷ƺ´VóÛ-µä.öÖ5XÍ>ÙìŒË!’˜¢Ý ,,Ìkúж§cv¢x^&$ÆJìO!ÅyoÄæ<«¡c¸Ù;Ó¯žãX]rçNúÞ Ïv“–òúëZ¸^È hsQ0å»aus¥^\Ûi·–úÖ¡y$ÒݵÄbãêcŽûHV½NfGÉR®Lx/t«JÓVå.ÞX÷TF6v2úr@¶ñ:vCJ<†ÄœÉœÄ"]‘úq“K{$¶Ó­ÌÂÍ’âÖGsëÛ3”<^AE’‡™ï•W¤…kÉæÔ®Ò¬ÍÓ}fKh¡º ?eºæc)Ø€z¡-纶òÖ­tèí¯¥1Æ"Il6U»Zr<Ä„¬Êœ<åÜòQÍÿÙmoderngl-moderngl-773b733/examples/data/textures/heightmap.jpg000066400000000000000000000641241470420062000244730ustar00rootroot00000000000000ÿØÿá -ExifMM*bj(1"r2”‡i¨Ô üÚ' üÚ'Adobe Photoshop CC 2015 (Windows)2017:06:30 15:34:44 ÿÿ  "*(2 óHHÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?ÜģЬ4x+0 Ml˜IL«©Ö:ßÁ¤ÕHgtì7›Ý  ]Ö±„6RS"”H‚”„É)ÂêU î$wTœ%¦V÷PÅmµ—w  iINP ´ÂZ9t {ªVRêÌ”2’bRȸù¥Ò8B„’S³N]v& 1±³:,Hà©úöFÙÑ%:6õ Û r³m°ØòåNRàI€¯SÓ‹›.UñºÑ¦‹m IOÿÐé¡!΋K¨á²šÚ[áªÍINÆ3îû!>EA¹o’ò´1l %i÷“æ’›êW‡htW02ï¹þ‰(øùO¢vðRS­ŸœÆ0±§Ü°žK§ÍNËcËu”Šªöns»¬ÜË7Ø@à-,€óY åd<=®!ܤ¦ Š‘Q))dÉJt”¤¡8 ÒRД'Wpq[`Üä”›¦Ô6n!_…ëk7…kŸVàÞÉ)ÿÑô|ücup;,;q­¨Ã‚鎫¨×aÝ«JJh ìcKZt*ŽFck$U§2¡@swRSHåÙên-ê-º*„&IM†gÚÞuZ8×z¬Ü±JÒ鯖mIMñ®ˆ7bWaÔAZ]2†Ûo¸hì®–îf‰)ãòñ=G ™]6^ÁØöÊÈÌéîd¹£ä’œõ ¢ATí))˜ á0RILaitÛÎë=X \$¤§` t[]/c}GrV=f é1 ÒÓ’SÿÒõ U2ñ{Hû•™JRSÍ_K©yiY}FÇ7Ú8+¥êÞö—3ÔÇ%9å4'D®§X`”ËÜï%©Š+†°j§Ó°Ã\y+¢ÇéÔÖˆ’’ôÌ7T7»’´R  $¦.©ŽúBV_TÁaa{GÄ-b”Òú\‚Jxn¡ŒÖ{𷲍.aTÓœÙ-IM0¤}o­Ðà˜Od”º&8&ÖÂðÌ¿s„BJu¨ÕÍtÔ*h ŸÁ¤Ûhð  oµ x$§ÿÓô¹R ® Ê„4Ë•Ú×LöILz‹Ú ¬ÌÚ}Jär»®7<¼¨r’œ1Í0á ßNqõ!ZÉÄõH1ñ™HÓ””ìt¼`÷z‡²ÙX)îõv΋m%)1)_.ÿF¢îé)1{{•6È\í™÷½Ä‡B±ÔÞ!–j JjåG¬â B•¡Ôikš-`ågé ) ”ÕÄ$Ì*˜>*tÔêÜdèQL”мZ™¬"€€&”LvØ'@’›X7Œg̓•¯F]wiX™¶VâÎÝÔúqµÝjJÿÔè^ç=ä»’e(#•¯_N¦Ò\;W¨ÒÚœ{$§6ì–ÓÊí6ø)ç0:¢VBJtÙÔtÚìm‚ZVÐé×í%%=OKÅꕦ±0úŸ¢ÍŽZôÜ-`xî’™’³º°y§Ú¯’ öµâ%%<®ª@n™A~è@³¤î²A†¤¦ÆªÜp…—˜Ö¶òÂÓ¯§˜C]ªË˦ʟïÖRR QkއUI˜åVîÍÅî?$”ÜJ¿C±›\¦V{œ$¦mw%:ؘ5Úâ÷jÌŠý,sé@TúND‡ºÕx¦xIOÿÕôZ¬§k‹¬\ûý[Œpq”êšFè ßY÷$¦¾yŠŽ°²%\ÎÉ­áRILRe¦·)M))ÜÅÉmu[øYõ×D8êMŽkÄ[4ÜÁ¯Å%;ìêõ¹ðt ã2*³è¸.g”J®²· Jziºƒ²*o. ÌÛôUì¹Ñ/rJz3›C[;‚Åê"ë$pEOk¶òÝD¹°ÞRS{Ö®v’¢ìŠØðߌl~íÓªFç’ <$§_2͵+:‹mõLJ¶Ë!¤«U~®œ&RS­k«-u½NuO«s޽×/VmOµå5ÒÖ9%?ÿÖ³™”lt4è«zâSí­îú"RS&Vû8Ô¥mO¯éWph±®—hó¨®G!%8Å2w0˜$¦A»lk€@ Ð)ŠžÒF‰)Ú¤þŒIÕMeœ³ BϹ%;¡äVmaê³™Ô^9MûBÝÓÙ%"¾‡Ôïr5ù¸ê‚’”’%;A%É)ˆ¤x«G#uPá*×ö‡fÚ!šÊJiO‚¬tFûª³ØXâÓÙ%?ÿ×v p jŠkmbÄaÚà|æ;÷Ô JH&µŽ,#ÅMŒsœ -¦`Wf8$C¡%<6E.cÈ([WCÔ0›.op±,¥Ìt’‘ÖíŽÁ_9Úöµºª; ê•M­˜ûˆƒ )̰â e+ ¼•”²I’R’RdnÂÁ…ÞÄ”"–¡=z¼”étÚÈnâä:`D”±ãUšXm;V†mÞzV9qq’’Ÿÿб^ ÎÚcCªÖŧhk|+_hÔ{F]2S¿‰‡Ski€Jžct¦V?R¶¨iÔ-]–bJrÛ~CÉŽ{ äôÒÃ/lù®–º™[a¡G%ŒuN‘:$§’v%N"N àÆŠÇ VÁ+7©PO¼$§,¦R„Ä$¦ JxJR•Œ:…–ꀯtÆêJJl;·M_NcL•q$”ÔmÆ»}3£BÙÛmòhõc•‘c×îBJmgXÛÓòUYSœÝÁF #msDSÿÙÿí Photoshop 3.08BIM%8BIM:å printOutputPstSboolInteenumInteClrmprintSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oàGrn doub@oàBl doub@oàBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R“€ vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMíHNHN8BIM&?€8BIM Z8BIM8BIMó 8BIM' 8BIMô5-8BIM÷ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM8BIM8BIM08BIM- 8BIM@@8BIM8BIMI Untitled-1nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?ð8BIM 8BIM   à, óÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?ÜģЬ4x+0 Ml˜IL«©Ö:ßÁ¤ÕHgtì7›Ý  ]Ö±„6RS"”H‚”„É)ÂêU î$wTœ%¦V÷PÅmµ—w  iINP ´ÂZ9t {ªVRêÌ”2’bRȸù¥Ò8B„’S³N]v& 1±³:,Hà©úöFÙÑ%:6õ Û r³m°ØòåNRàI€¯SÓ‹›.UñºÑ¦‹m IOÿÐé¡!΋K¨á²šÚ[áªÍINÆ3îû!>EA¹o’ò´1l %i÷“æ’›êW‡htW02ï¹þ‰(øùO¢vðRS­ŸœÆ0±§Ü°žK§ÍNËcËu”Šªöns»¬ÜË7Ø@à-,€óY åd<=®!ܤ¦ Š‘Q))dÉJt”¤¡8 ÒRД'Wpq[`Üä”›¦Ô6n!_…ëk7…kŸVàÞÉ)ÿÑô|ücup;,;q­¨Ã‚鎫¨×aÝ«JJh ìcKZt*ŽFck$U§2¡@swRSHåÙên-ê-º*„&IM†gÚÞuZ8×z¬Ü±JÒ鯖mIMñ®ˆ7bWaÔAZ]2†Ûo¸hì®–îf‰)ãòñ=G ™]6^ÁØöÊÈÌéîd¹£ä’œõ ¢ATí))˜ á0RILaitÛÎë=X \$¤§` t[]/c}GrV=f é1 ÒÓ’SÿÒõ U2ñ{Hû•™JRSÍ_K©yiY}FÇ7Ú8+¥êÞö—3ÔÇ%9å4'D®§X`”ËÜï%©Š+†°j§Ó°Ã\y+¢ÇéÔÖˆ’’ôÌ7T7»’´R  $¦.©ŽúBV_TÁaa{GÄ-b”Òú\‚Jxn¡ŒÖ{𷲍.aTÓœÙ-IM0¤}o­Ðà˜Od”º&8&ÖÂðÌ¿s„BJu¨ÕÍtÔ*h ŸÁ¤Ûhð  oµ x$§ÿÓô¹R ® Ê„4Ë•Ú×LöILz‹Ú ¬ÌÚ}Jär»®7<¼¨r’œ1Í0á ßNqõ!ZÉÄõH1ñ™HÓ””ìt¼`÷z‡²ÙX)îõv΋m%)1)_.ÿF¢îé)1{{•6È\í™÷½Ä‡B±ÔÞ!–j JjåG¬â B•¡Ôikš-`ågé ) ”ÕÄ$Ì*˜>*tÔêÜdèQL”мZ™¬"€€&”LvØ'@’›X7Œg̓•¯F]wiX™¶VâÎÝÔúqµÝjJÿÔè^ç=ä»’e(#•¯_N¦Ò\;W¨ÒÚœ{$§6ì–ÓÊí6ø)ç0:¢VBJtÙÔtÚìm‚ZVÐé×í%%=OKÅꕦ±0úŸ¢ÍŽZôÜ-`xî’™’³º°y§Ú¯’ öµâ%%<®ª@n™A~è@³¤î²A†¤¦ÆªÜp…—˜Ö¶òÂÓ¯§˜C]ªË˦ʟïÖRR QkއUI˜åVîÍÅî?$”ÜJ¿C±›\¦V{œ$¦mw%:ؘ5Úâ÷jÌŠý,sé@TúND‡ºÕx¦xIOÿÕôZ¬§k‹¬\ûý[Œpq”êšFè ßY÷$¦¾yŠŽ°²%\ÎÉ­áRILRe¦·)M))ÜÅÉmu[øYõ×D8êMŽkÄ[4ÜÁ¯Å%;ìêõ¹ðt ã2*³è¸.g”J®²· Jziºƒ²*o. ÌÛôUì¹Ñ/rJz3›C[;‚Åê"ë$pEOk¶òÝD¹°ÞRS{Ö®v’¢ìŠØðߌl~íÓªFç’ <$§_2͵+:‹mõLJ¶Ë!¤«U~®œ&RS­k«-u½NuO«s޽×/VmOµå5ÒÖ9%?ÿÖ³™”lt4è«zâSí­îú"RS&Vû8Ô¥mO¯éWph±®—hó¨®G!%8Å2w0˜$¦A»lk€@ Ð)ŠžÒF‰)Ú¤þŒIÕMeœ³ BϹ%;¡äVmaê³™Ô^9MûBÝÓÙ%"¾‡Ôïr5ù¸ê‚’”’%;A%É)ˆ¤x«G#uPá*×ö‡fÚ!šÊJiO‚¬tFûª³ØXâÓÙ%?ÿ×v p jŠkmbÄaÚà|æ;÷Ô JH&µŽ,#ÅMŒsœ -¦`Wf8$C¡%<6E.cÈ([WCÔ0›.op±,¥Ìt’‘ÖíŽÁ_9Úöµºª; ê•M­˜ûˆƒ )̰â e+ ¼•”²I’R’RdnÂÁ…ÞÄ”"–¡=z¼”étÚÈnâä:`D”±ãUšXm;V†mÞzV9qq’’Ÿÿб^ ÎÚcCªÖŧhk|+_hÔ{F]2S¿‰‡Ski€Jžct¦V?R¶¨iÔ-]–bJrÛ~CÉŽ{ äôÒÃ/lù®–º™[a¡G%ŒuN‘:$§’v%N"N àÆŠÇ VÁ+7©PO¼$§,¦R„Ä$¦ JxJR•Œ:…–ꀯtÆêJJl;·M_NcL•q$”ÔmÆ»}3£BÙÛmòhõc•‘c×îBJmgXÛÓòUYSœÝÁF #msDSÿÙ8BIM!]Adobe PhotoshopAdobe Photoshop CC 20158BIMÿá ÿhttp://ns.adobe.com/xap/1.0/ ÿâ ICC_PROFILEADBEprtrGRAYXYZ ÏacspAPPLnoneöÖÓ-ADBEcprtÀ2descôgwtpt\bkptpkTRC„ textCopyright 1999 Adobe Systems Incorporateddesc Dot Gain 20%XYZ öÖÓ-XYZ curv 0@Pa ÅìDu¨ÞRÐY¡ì9ˆÚ.…Þ9–öW»"Šô a Ð A ´ )    •  ’–£,¸EÔeø$½Wô’2ÔxÆoÈv'ÚŽDü µ!q"."í#­$p%4%ù&Á'Š(U)")ð*À+’,e-:..ê/Ä0 1}2\3=455é6Ð7¹8¤9:~;m<^=Q>E?;@3A,B&C"D EF G#H'I-J4K´ÒÀ¡¦[Úl‘ÓaƒmmYÈÛ&&˜ÕSLèºU©l>AAŽÍ›PL§¶$öÈ{aF£§+©Û zÞ“ND.A5$í‘ÛË% í‘}JÈ-H¹‹ ß ÇŒpÇc²Æ^76jæË^¸s¦5dçMcÄaÊtà %«Œè^]„|':’Aƒi˜œÿÔ÷mr‰Æ6øHy`w³ :a]î’®§áÈ^³¤ðäBä*ò‘L‰MöNEµphÙº¯3Æš™©˜Œ¬£‹Dœ0ÿO²çM²Qg`ªØi¸QÓXü ·µg`)’½#H.T•Éæ•¥,j»d’BÁ³fÍ›p<ÈdwV±¬iœß]³[l†ÝG¹ÔàNB¯ââÇ È¡Ë 8mŽËy«›6lØô8{¦BK šéñ£ ”Ó ,ãÑüºÛ.OíÀ0]sW?ÿÕ÷Y8Òk•›0–0ÀäkX°­AœçXÓŠ³dfhJ 7Ù9ÕÆÇ!·Ÿhà,¢r²éš˜Ò2Â’pm¤D°ÉŽ“o°Û$ðCðŠ –Ìݰ}¾˜îFÙ"ÓtF, \›éZXŒ-W$@ °@Êï—š¹`f9XÂq…×Ñ‚‡9ߘ ÙÏoRŽpƒPŽªr©Ày°ŠHÈ9J»ï‹Ì@Ç–)—\ºæ®^lÙ±hXd£Iq“ E¢Œ;aŽž„¸Î‘åØÍ'–» ÁUË®ÿÖ÷=r«š¹\²Ãe“\uu9Ö¬†4Î}©Û„s„c‘}\lryöÎʦa—›/qx`,zaå…‰$d»MµâS%V&Zm’k-½‘YhR«’M%#áÃh`6¸Û6lÙ²Æc8Ó×pتy‰6læú‚|g ®bäGoì9×l!ŸM`NØ ¬YOLi·aÛxÈIJÁÇæË.¹c/5rºœif/Ò "›džE)#‡ÚM±w]³¥èVÅUvÉd"Š+ZerÏÿ×÷sW7,ªåŒu|p=ÌÁT×!úÝêa\çz¥Àwjaæ äoVZƒ«áG8_\ÕÌ2ñʤœ ¹r6û<±dšÊÀ(aõœ)“Ð9]³¡éÚraÄvˆ½*#1YtñËÊ9©—”G|iÆn*§!úõ©em³šj°pvÛ¤ZÔ`ImÕû`9tõ=°šP?³€æÒzí…wZiZí…Û=01eƒ—\uj–1Ô'±“‹ÇlÄôÃ:ÌòdºÂÜ"°Ù´‹› ›èV*i N· Û ”Ðe•\ÿÐöýsrÍ\°qÙNÔC«^zhwÎw¬ê,̹¸˜¹'8Øá¨µSE(Ç O\Ù`å‚0Mº†#$:}¢½6ÉE•’¨˜kAFYÇWÐ<» øv΋b”Aƒ±‡F76;(åæÊ'N4ãq®*2?¬CÉ9~»m²)(£Oc—Äo¤1­ÔöÀ6*Àí‘ÝCO¥h2?=©RvÀÞ“Ó‘1=0dVlæ\–L£¦"-š½0L6LݰÊßK&›a”:M)¶Z؈é¶ÄF.§|8Ò×”‹+A„q\˜À¨ÅùcyeŸÿÑöÝsW,p8ðq9ä;_”…l溤¤ÈÛáIjñ­Ó ïâä§!š¥¹í‘ù‹c3fÁVÏF*Òe]²]hAQ†¯")‡š]‘w]³£hV<M2cqQ‹Œ'(šãiš™yG*¹‹eWr«ã•”Ý0«RPP×9¯˜bZ¶A®–Žp6X8ê㇆5Ô…·Vªàí„W:]I ÀM¤šôÅ"ÒH=0ÎßLtÅ&Ó0 Ò¾.˜>ÛL•e’­6ÁKŽØþqÀÓ­¾és_žt½E¹)Žu§\x˜øþUÍZgÿÒöÅseƒŠÁøNBüÁö[9®£ýãaewËÀóÇÉNFµ[Zƒ¶D®íˆc¶(F76)¡!Ò¤<†M´öªŒ’XAê0;ÐôÐxšdòÂÔF£l3 ÕÆœ£˜æÌN0ã ÍË7/|k8Êä3Wv ÂmJp¨ÙÎuéùÈMÉ« Zf®X8îX“ËL`‘_,À¯Û,ÔöÇ­šت«ÛbSÛ-–½1U‰W@2«Œ'2Šœ]"8ag!‰†KôÍ`Få‡ÑëËAña¦¬²ñaä‡×®ÿÓöÆl®@e‰@Çzëã‰Ë*•9×È*Ù͵?ï×|°rœTamÝ·¨Ù»Ó+SL%¹ÓÊWl*š.' œ^‹’=.ÜÔm“== ’­)”:×:F‡,|W&6ì¥E0Iß+›53ecbliˆÉ2§|. ‰ß¾­?k)uhÉûX*+ô~ø»Jv8E©†e4ȱl䱦Dn¡*Æ£¶Ç8e1 ÂÛ©ø÷Ä­îªÔ®@Á€ÁxÇjcUñPÙ|²‰Æ'·^L0îÞÇšƒLeÅ«E½0 »x\Z=YÁûX{¥jçšÕ²}¥_‰wÉoÈgÿÔö¹ `y®ç ¦Õ+ñ` µÔ_ÚÀßâ¯ÚÅFºŒ¿kuIdS¾Aï¥æçeƒ—dKn¤tÂ=BØh2+yävÀÑÙ³˜me¦’FÙ&°°àØ{ |Ã+YŒl2g¢j$·¦\péMFc•9²«'N¸˜ '#š–ª±WâÈ•÷˜&…y…«ö²£óT|Xwa¯ÔжI­5t‘@-‚Ý’q„ÚŽš²) dWÓÌdí‘yÓ‹ˆœ½ßrß[»É“’£ Û,tÆ8®&1@rëš¹G× ¬!.ã&ºu1ŠŒKT´UC¶Bï‡4Âþd0°¹(ã|è õx‚ryg8dçÿÕöD׊€ï‘íOV !÷Úãr4l'—X‘ÚÄ?JIZòÁ «8k¸ÔA× d“‘Æ×(pËÌËQ…—vüÁÂI´ÂÍÓ”l6¶°T¦ØeAFÃtÇÆ~,“h„ó\ê(<$iÓ,œ¬£”zc4âr !Õný4móœkz£r`Cî¯]Øï€Ìì{æYظ:Úùã#|>±Ö™( d£NÖÃÐÉ s,ñäo\µXÓ9î¡Ó|xNµ]skλ`%²*Õ¦ÚÆT Ùu(ÐãHÆ×(œÕÍ\VäÙ&Ò-A*NKád‚,#Ö/”‚È]䡨àRpM²·!’ÝWB¹Ð4Ë¢PTçÿÖôeî¾(hÙÔ5†’¿OrÎÇ|D99uËFnd僗›1ɺÄMºøc–±P cË®>>£$ú!£®u ¾É³•›\¢q„àk‰(§!~`ºâ¬+œÃV¸.í¾»TãscƒSŽfo‡º]Ó]ó i3—A¾?T„ÉÈ¥`üÍÉhÈzbJæEÄÌ T¦>´ÄÙòƒã«9G– “ƒí#%†J,ÒPq[ÍOŠFooZBwÂÃÉ΂ͤ#l=±ÑÙéðäŽÏJ1Hûf Ÿÿ×éjýðÎ[¾4⃛683r\Æ_ª1Þ²øã ÂŽùBåqÞºžøõpqÕËu8´(Y†J´Kv榙Ó4xÊ¢ä6y«”N6¸Òq68]}'9ÎüÇr~!\çwÒòs€+—›5rÔï†V3qa“Íë—’å·ÇÓ /4@õ‘+“+A  é•vÑ22-}lÍ?NÒù°¨É}†Š ÇmôôŒ °o¤vC¬±Tjg4Öf~m¾ÿÑœ#(xbÑ¡l-Í17Ž0brµÂ-Bá’¹¸Ô1ß>¢Ç¾'õç=òþºÞ8ƼcßúÓø¼7¬\9³ÔÈ¥NHl¯ÃÓ|;‚N@`ûaW7Ð-ÕŠçGÓm•Pm†ê  v6¹GN4œa8ÆÂûÄä‡ Zý™nF™Ï/íí…Œ¥N2„⊄ਣñÇ:Šb*@l’h×b6]ó£i’•Q\ µhúäg]™J¶ù͵VιYG*´i‚wÀ¿]¥pDW‡\^µ™¸õ\^3ÄáÅ•ç¥MðÝu’¢œ±ë«Øœµdl’hÑ«“;X”(Ûq¦S °U·.œß\²!ØÓ?ÿÒéÒéì;`¨½z`ëM9ØŠ®4ªV˜MyvÂúPâr­AÂ-JAÈ~¡V8Ră˜1ÍÈå‚rŽ`Ä`˜fe9 Ó.Fù2°—’Œ;µaÈdçËó¨+¾t}:u1ðÑ\Ž QÛN7Ç'N!*rG©iâU;d#UÑ $…È­Ö’êÆ‹—LŸ³ƒbÑޕ㌞ɡ0¶ZÖ˜šÆÌkL0´# d·J¸•)×$Rds‘íWT.®D/'æÇ“S•\Øœ¯Äa&¡uÀðõêuÃ{ ²ôß¡n@`Ž5ËãLØ¢ÈF;×oQ.XwÁÖ·gß'À«ÛT4Ô­¥õÈüñ2“\ E2ª3€®¤â§"º¥ÁÜa"y2I¥Â‡$ÖêBŒ6ÌN0¸ƒƒŽÌj1h$!†Lt¾,¢¹Ò´»€è»áÊî2é‰ÊµµPÖ¹ÿÔôÆ”âB+’»kTe˜(Û*Ž˜M«(Tjg7Ö¨]²/*îqinwS‘=YzäRãíC6a¶;,tË2ÖN,2W¥ÝMòQm8eá„3”;4ƒTxûá®¶ü€å“S2qß®M-%æ€àªãN0œaÄÎ4œ¬iPq žÙKn¾ã‘Ó î´õ°¸è¨Z¼p\J->œ‚›`…³@:`{«u;d_SÑCxä+UÓ}"vÈÄéňÀõÌz`+µ%NE¯íÙ˜â6vG˜$d¢ÆØ*°ÕƒŒv À\ñ=q8ïA4® ŽåXuÅ–@qT4;aÖ—rcuß:>…}È(®Lí¤æ£‰KÐä{T­iŸÿÕõ™dѰ¨Éu¢£>Êr7­8àÙÍuwøÛ#²Îc.ZŠr%«H7ȵÃUŽÇfË1ã69‡ ìnʾK4ûÐÀTáäS¸s‚-å!ÆM|¿9ä»çKÓ^±Œ3®ØÆaŒ.1¥†4ãHÊ͘ ã€ÇcJƒ”"õ@1@<.S # o¢N¹Ï|ª9S9ýí9š`±‰È†ÍdôʆÄ!é†QFbôʦ!;QNGïçâNøPu ×Á«v®Zêé¾C `0ÂÙʰ94Ðo8•©Î¦\A¾©¨ÆÈµKhd®ÿÖö<6ˆ¦ a„hbW2SÝvða\ç:œüœï„ÎÕ8›tÂëÂxœ†êÌjr7+|G.¸àqÃ\Äãk‹C)S‡–üHÉEðp7Ȥä ‰¾!’½ à+.ùÓt›¥1®øn×J®Ï©¢WâÀ¿¦#'í`˜u~ø5%W¨¡Ê9TÌ2òëŽy`Œp#È kÊ a&©xª¾smzô9a\…Ü¿'85röé–PbmÅq¢eIǶÞËÅNDµ;­ÎùšàÔåGtÀõý:ñ¹ òc§ÍÍFÄԡý6ðÄÃ|è.¨P[&V·+"ðS0¦~ ×?ÿ×õÕ®ª’¾Çr¬µ®j—ïœï[Ô9ä:æ^lp1Ƙ]|@SÍXжF¥ûXÁ—ŽuÇW(œªår¦/ åHß$:mí©ÉUØeá¤SBé×~› òq¥ë!TU°}μ¡6lŽ_kä“FÂå×_—ÚÃ{xÔU²Oe­+VÃxµ4nø2;¤~ø¸prù ÕF@1†åSˆ½ò/| Ú¬`ý¬µÕc?µ–Ú´`}¬s­¢ƒñdWVÖùd'P¼2±ß äjœAå ß5âƒ×—ŠO\³©p-ÝÇMp¡µ =+†Vwé¾ \,Ô[á9 ÔÛâ8Hõ$å"šáµ‚°a“],#ãû8&J‘’/R1²ï“­+XTÃÓ©¯×M¬"ŸµŸÿÐîºv²Á…[%ÖzʘÅ[jÚ¨e4lê7&G;áKœn1öM¨ÉE9 Ôå«#}ÎP‰ËQ•\®Y¹erÊ Cƒm®J¾Ùjt ®H¬õôßí®zpÞßQd|R]QØ}¬.šéœñY«×CxèFøom¬ºSâÃ{o00"­’?^ @[$6ú¢²ƒ\Uµ4^ø‹ëÚÀS먿µ…³ù„ üX[?˜ºÑ°¶_01?k)<ÀÃö²ßÌ Oµ€'×Áø°®âý¤®ø_$•Üœ<áAß ¯uµß§Õc¾hµc^¸gªë•u~øE-Ùõ+\1°¿¥*pö=ExõÀ7×êÊwȵìÁØàNGÛÙò¦Ø{c§î 2OeoÀ 4A¶;¦- Å8{a©´tß Î¸xS–\ë,Iø³ÿÑé6÷,„á¼:³"Ó–%s©´ƒ®K)s\G14ÀÓÊê—"„W!×Òrc…Äï—\¢sLÕÊ'*¹YUÍ\°Ä`ˆnHß´ëãQ¾K¬ny¨ß RM±ÜÉÊÆæß†(— \4²Ô]ß$öz±â>,}Æ®À}¬+›[zŸ‹Ë«Èßµ€¥Ôdnø®Ü÷ÄšvñÄšð§|Eµ/ò±?Òž¹\Sßšõ@ë„׺€r5{~Xð¦IØž¹K3×ÅxËßkÒG\ ó’kŠÃtS¾ ]E€ëˆÍzÏß³–8&Ý*FÚ*­+‡örF)‡L”Øà””ø¥kš´Ç¤ÅzTݵ:â37|ÿÒž¦_¯Ç¾0ÜÂp{ã½QãˆËpª:á-þ ò+|\ð’WäIIJŽVUr«š£5q¤ãk›,µ®X± 2]§O@pú|x`ré›(Œªb‘¹S†V÷eG\|×e‡\/’BO\H¹ÊÜå°<Ó /u•ß ¤ÕM~Ö0j¦¿k]XÓ®!>¨Hë…SÞ³×|#–ĈÊË©Ì\ãKc8 sš¤â±!c†Ö¶ÄÓlU££¾1ž¸:-[µpÎÛS MðÒ;Å#®T—ª;âbýIë‚c¸ß­sÿÓšÉ Q…—Wá+¾>®ëWÍŠ]iö°Æ®;á%Þ ^»áD²—8‰ÊÊ8Ó•'*¹ª2«›6lruÁöÒ#-o¸S|;µÔFÛáŠ_©ï‚á¹ß)¨Ç˜ãHÌ(®FYrq¹©›¶ž^á õý*+‘›ÛÒÄï…/;×&op¼ršf=ñ>DæÊ9TʦU3S,c†9zá…šÃ$Ö6êTmŠ]ÛQvºFBp'¬ÊzàÛ{æR7Ã8õR®%6¬Ç¾2-L–ë‡Ö¼é¾Å'!ŸÿÔ’ÞÜ…S¾DµãS¾½Û×2Þ°ïŽúóø›Ý3wÄBÇ®4eœncŒ8Ì£•˜¢sW/51ÃlQ\ŒY'aƒ!¾eÔ+’:à½7É& bݲ³fÍ–^XÌÝ0®ÿ—L‡êLàœ"”±&¸ŒnlÙ³TæÍ›6lÀc±Ë±Á¶²q#$–b€W žE‘0Žþ5ÜŒ#™hqÄcýfñ6™|ÑJCuÉ›wBr[epFùÿÕRÿPNù»œ»ð bNUN]Nj×:⨄â‚Ýl¿«7†'$Ep;lq™G›*¹yc1Ôy³r#Z±,2_¤TñÉU¿Ù åfÌN6¹uË;¨Àw0ó#z†žZ´¸ÓÙk¶KCˆ¦Ç*™DS6l£˜eæÍÓrøœ¼z1 ­n Ó|5K®º¹å\)•êq*Œ¢q§|h4Á¶³”a’[B€TçÿÖŽÍtÏß;ŒÊ'08ð1EZœ1µ„9sœ °AÒ¶é…WÖ<Û§Œ©8ØÃ•›lpìpé–3¦ ´ÉŽ‘@Ic*ãÄàž¸ fõ7Ô½A›˜Ç852ýA”][’“ ï,„Ó"ú…¨BvÂ9R‡Ɯٱ¹²Æ^8X&( 튴Ö™C‰ˆÁˆäŒFjà7;ãk”NUr²ÕŠœ Ó'|ÿ׈ñ¹GF`1E8õ;á­ƒ|C%úz†Q†ßWR½0ŸR³NÙ Ô-ø1Û \PâgzefÇà1ÀeæÍA‚-d«L–€a¬—|W® ×]L×/ô¢øåQ|s MO|Y5=ð\wŠ{ãží@ë€äÔUO\MuE¯ÚÁQj {ãno©ß#:ŒÊÄÓ#ÓšœA±™³cs vX8*‹3Š£q‰Î@Û²ò;e†*·†. ¨ß™¶Àm¾6‡(ƒ5ÊÇ\½ÆÿЉ#+*™¨qÁN*‘±8mardËMŒ…ô_‡^BNÙÕm7&™¹‹ƒvƬÙcñŽË¹|r¸œ^F®Z\|%ß!JàWœÁÀÒ^²÷Ä Þ9_¤Ç,j ;âñêL;àèuR)SŠÉªšuÂéµ'®"/ظ*-M‡|RMMˆ¥p¾k¢ýð#5q&ÆæÍ”FXtÇ ß lÔmƒe`«¶Í%Z˜­¼\Îç¦Ø,it^˜êÍ“¶<OLgÔÜöÇ '=²Í‹S¦–Ù—¶e å p9ÿш×1ʸ¢D[¦ ŽÍ›¶ McÛC¦¾9³Ó¸‘¶H-`à c$PÃu+`Tí½J¬vÂIø™ÜØà1ã¸à+‚"„¿l‹0éŽm=‡lE­Ù;c}B™BäøækºàY$-ˆÔæÊ$å†8¢ÌÃgcß\žù\Ž<9~¡9\³rÆœ¬Ù³e—ŽS¾ ‚n8¤·5p"͇:l\˜dºÊÔ`mWL.»° Û ÿETôÅ—IËŠ )Gìæ}1iÓ /´ð í‘»¨x1À™³ÿÒˆ Ç­0Dó8wg§¦Øyo¤ª¸a˜£¶K^Ø*;e^Ø%P ³”Ø[| ¡ÈV¬¢§#rSˆ‘Œ¦X©ŽñŠÇ¹Ã›C‘\”ZX¡Q¶/&œœza5õš 4ºN$à2H9\²«\ÙDe”2òé•›.¹«š¹«—\ÕÍ›, ¼Ù²ÃÓ1rq[uäÃ%ZM¿C’ëXø¨ÁtÛñ†ÆÃ"QÛ,ƸnjS oíÁS¶Cµ(8“„n(N2§?ÿÓˆŒÊ*pßN„3 ™iÖ«Äm‡qÀ tÅx–ÇPfÆåp âUNCõhI'#ÆA8®7Žn9©–XªlpÞÂp„d¦Êùh*pl—©Ç®ß\™º$“€®3,eŒ³9Y`eå¹Y³fÍ›6jã²ë˜忯åWÙ-\dÏIa¶I¡QŠåW5sW5q§]¨*r«(©ÈÌÃâ8•3ÿÔˆã“í =ÒþÒäÛOÃPh3”8ºW‘Žh0$Ð’¦j6<Û"WÖEIÛ $ˆ©ÄÊåʦjeÓ0®-…[Þ²í\/Å+ŽàÒ ðͽ©V‡Í›6QÌ|¼Ù±¹³fÍCš‡6lvl±–3aÇ"’pçN·%†Ù5Ó`â£PcŽVlÙ±¬i…—Ó…S¾CµK€Äï‘ù§\ÿÕˆWŸhdƒJZ‘“[Ed:f9C®;ŒTá½§©M°{éLWeÂÛ9Ö¿]ÙlAÔtêÔ‘kÛ"„í…OSŒ¦4®WÔÍ–Nµ€¹wk`Æ›a€µô×q…ä Œ!™ªÇÍ›6lÙG(e×+6lv(‘–Å~¬iˆ¼Eq,°ròú ÕÌN7©¦ µ‹› –éVccL”ÛCÅF fÊ9Y²‰¦¹¸ùÔ¯ú€r-w9v;àjsgÿÖ‡ãÐáî™0R7Éž8eáÂŒu3S6 ·a’ýØ?²a² øpþ„8“Ç!ºž–c-¶Eï,ëQLj:p šdRöС;a[%6˜ÚeeŠDµ#ôÈA#%––ËÀm½ˆ*dCS;œ!“rq´ÍL¬Ù³e¬Ù²èsPã—®µ@ÄW ÒÙJa}äk…N(q™uÌNjåcTáÆ›&6Ó!F  ËÍ›6lBwâ§#š•áZŠäNöè³𱛑ÊË Ïÿ×‡å °uœ¥XdÇI˜2QUF/Qš„ã• Á¶°±q¶Nü¿nj»gD±·F)uf¬‡l…kšr€Æ™ÏµpŒÛd~îÜ0;dWS±­H¹´*NØ£ ãx•éœiB1Xå’=-MFJíÛŠ ¨\(R+ÝFPÌp¡ºãr‰¦VlÙ±¤å±š´Ë®^X냭\)Ãd¹P”®»˜5hp±ÅN3†6”͘šeWßô 9 ›éôâ0ÐtÍ›6l¢h0ì¡Tä7UŸs¾Fæz±ÄAÇf®ÿЇ\²0E°ø…2[¤WáÉm·Ù-V§AhÒSl4·Òÿgl´6äšhúg¥ÄÓ%¶è#Q•q2ªšœ‡k·)Å·Îq©ÈÍ0–Eå\-»´Ù½Ó+Z $›M`NØŠéÌ{b£LjtÀÓX2öÄá´n]2I§ZØm+£ÈÞ¥xwÈìò—'œi4ÊÍ›*¹Dãsc†lulØ¢IÇ7&”®"Ò–8´1Á&ÌÓ¦’Ü©é‰zMáhÈÆ'Š$m‡zr²0ɆŸ-†Ë #9‰¦&f¾a(=ó;í\#Ôî8©ß!z…Ç&8PÍS”]1Ã?ÿш…9|IÁ–’Ãl˜i0IàZ(à h¹°Év¦zœj2ic¢/JáÌJ%>4†Õcƒ+p\Žêwæ0wÈ&¯©3–ȥĥ؜Äœ£aÓÍdµ].˜¤ôÄÆ– ôÇ9iÓÜi€öÀñiTjÓ  µ/L¨¸U#!šƒ’Ç ÛrkŒÆ¬ÙGr³f®jå×.¹«\±—”k—pïO¶-M°ñl9'L >˜kÓþŒ>”º[xb ¦·.˜cm¥“JŒ1‹O)½0b7¢0LWÀšW a”0®iåâ¸Os~ºæ·Ô¸d&æp‡V©!·•äp뎜x5ÿÒ*cxc“LjôÃK=0‚*2Mcié¶ưóK€;®t ÍB©¦Lí UQ¶ >›`[•ªœ‡kˆ@l皟"äabÛ»ž˜cm¥¼”Û “B~5ã.´wAöpž{&Bj0#EN£Àbm=²…ºé‰Î)È®­=+‘+©91Àg®3q¹²ˆÊ8ÜÙG®V]iš¸áÍ›[-Xd¯J€m’Xm‡¶[Ú)퉋ðÌúržØèůL’¯lRH/L#Ô JÓ "¹a'^ù ²¹øENkë ï‘;ëÃÌ¾!†ù$´½  ‰ß²ºœˆß äi…œjpL0rÁØÓ-ÍzgÿÓ‘ 9lzééá‚¢³Uíƒ0½*¢‡4©\W:F‡vœW|˜ÛN¬£|¬:¢˜î@ªr®N 25¹žNpÆÃD.A+’› @\9]8ýœ{¢+EȦ¥¡© ‘;Ûˆºa[¡S,°¾øÑBuw59”îq×(ãHÆÓ1XÜnUrŽX˦U1Û6²J¸É–“˶I"Z.>€ã‚Žâ2Š m)Œ‘j0–þظ;dzXZ'®-ï¤(N»Ô9+„7bq(å*pÎÚü¥7Á2j<–•›™ƒ“PU°ÚÎ0@® x” ÐÀ¬Ý3ÿÔ‘~Bzà¸.ÓǸÅ2Ç\m1F¹)ÒõS7É…Žº  ¶Ûkôø°É/‘—c…Ú…àâ@9¼V¸cLÖZIfŒ•Xiª€Upæ+uAÓ1áV0¦ÿOGS¶@uÍ8'* „]ÅÁÈÀtË=0¾ùj‡!:¼f§#3-â6cÆœn4ŒnU3S/š™¨qÙU˸i§­XdÛLZ(ÃÄcÀËÇf8Â+”p4Ñ /­ #7£&˜U,­]ð318Üpr1Þ©Æ–'Ç í¥ {G\ZÚáAß?ÿÕ ovîÃ|“饚„ä‚%ØbÔÍLzŠ`˜§dï†ên”ß ìµ§U²Me¬Qñ`©'y½ñ{K3#n2Ak`ª¦GQì°q •NA<Ä¢œßPÔl.Í®’œŠêÖ„ÔÓ"pc¶aLhtÒ1¤cq¤WFj Ù²ÀËÍ•LÔËAS‡zbU†Mt䢌7]†?6]r³cN4Šà;˜Cƒ‘JÄîi‘›«r„퀈¦ÙTÍLÔË1E®8ÊN9'+ŸÿÖ¦ÅɆM´ÈB¨ÃÄZ u8 p©•R1hf òM¤LÌTW':u¯¨ œ‘ÚÙ„¦Ød¨e“•›1ƒðƒy„T6sm@|g O\ØÇ°®úØ:²ªZ$‘É“‰8†l£Óq‡*™©•”F`2ófÍ›.?´2A¥ý¥É­€ø¶_L¼Ù³em1¬€Œ/¼µ §l‰êv¡IÛ#³%â@eÓ/.™YŽ75sÿÙmoderngl-moderngl-773b733/examples/data/textures/noise.jpg000066400000000000000000000565451470420062000236520ustar00rootroot00000000000000ÿØÿá™ExifMM*bj(1r2‡i¤Ð ü€' ü€'Adobe Photoshop CS6 (Windows)2016:06:27 22:02:21   &(.cHHÿØÿâ 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ÿÿÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?Ë#WfоôÆÈá%7E“¯e3pouOÕöÌê£êå%7·‡ ñH:*mµZ¥Â<ÒSn§qâ®Vé $+ ´4ÂJnµûGŠ‹¬=ŠªÑAÖGt”•Ö€M³(n|ðT IKØðKÉLçЇ¤¦D'èT·öB±Ò’”ë4…7(“ª`ý5IK;ÛÇ*’uN^'R›AÝ%?ÿÐÀõ$Jc`„>BmÚ¤¤Þ©Éܨ—™E®ÂÝStÂ4ðBsÉ•\™†N©)pÒG’é×Ei¬Dm`¤¦€® +8F²˜:'ep’ŸÿÓæ\ÐU[k‚¯¸¡[X!%9ĺaI²X•:ê””Õs)1‡r±mq Qkå%1³@¼«/l„/Hx$¥ëvš¦sÉO¶’ŽÓ2’—aƒª°ÇJ®Ýª:‰IMP{Ì¢µ§ä—§))­°¸©¶­QÛOxSô!%,ÆÊ#D$Ѭh™IL]PwÁ ͉ðV vûì ”ÿÿÔçZGÅEçïPcÏu3ªJDæª5L€¡£±ži)©“1¢ê…woe !%4¶x&5”vÒAEôd$§=í#…ÖJ¾ìb{h˜S·NSXPy…!T|UÎÝÔ›RJFɈ*@Nò‰…n'É%3i$B‹·”pÝÐ’'U-À"ôø¤¤»À«Ùlè™Ö9óÊJÿÕäÀD¬”ZšZRRV7ÅYcxðQ©€« dp’”+îQ%Z­›¹S}[GÁ%4 d)°g6G -®R½0à¡èÊÃrÄ”Ô5€˜ˆþ(îa:¡–h>i)®Z Dk#…?K^†”¶ÍënÔã] ƒßµ%${€ª\é2÷Jp?”…纞Šv™As ¤§ÿÖçI>R‹é Vq¢‰$¥0G Íu—Y³ºUêx’RJ냅„ò§[FéV\ê’š¢raj>©ù ýŸ^!%5YTj§²Uƒ\r¢Y{¤¦««Ôù¨ yVËg²^Ÿ~é)¯è‚4¡šÀVŽš3D”Òx#[Oнk{*V‚ Jk<2â5¾H[e%0“*{$p‰]d…a´$§ÿ×Ï#² ÁXsHù(‰)«;T°íÛ ¤§F—ö*ån‘ 6’t%hcÁIM†²uQ{B;µAÀO’J@k„övæ¢ÄÁž))ªÖÇ#•ÇÁZ±€*¯×„”ˆ4’¦Y¢“[ :!%5-guZÊgXWœÒ~ d$§-ôŸW’Õô˜F¡ Ô¨IM6VuFhŽ{Lè¦ÖiñIOÿУcû6ÌÊMp?ZÙ&RRƒ$J“Y( §dF±§„”ƶUªÎÔ Á¥;l$ò’›ì¶xV+´*…6x«”¿Y))²*ÒT,«YD‚Т÷„”Ó´hUXÕ^°ðUœÒ JFãÙ Ú)ŸÅú$¤ðC´GÁ0²;¦} ˆ)) Ÿ)Ü5Lñ÷!—À„”Ï`¥¸r °žé‹á%?ÿÙÿí’Photoshop 3.08BIM%8BIM:å printOutputPstSboolInteenumInteClrmprintSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oàGrn doub@oàBl doub@oàBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMíHH8BIM&?€8BIM x8BIM8BIMó 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM8BIM8BIM08BIM-8BIM@@8BIM8BIMI Untitled-1nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?ð8BIM8BIM   à,cÿØÿâ 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ÿÿÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?Ë#WfоôÆÈá%7E“¯e3pouOÕöÌê£êå%7·‡ ñH:*mµZ¥Â<ÒSn§qâ®Vé $+ ´4ÂJnµûGŠ‹¬=ŠªÑAÖGt”•Ö€M³(n|ðT IKØðKÉLçЇ¤¦D'èT·öB±Ò’”ë4…7(“ª`ý5IK;ÛÇ*’uN^'R›AÝ%?ÿÐÀõ$Jc`„>BmÚ¤¤Þ©Éܨ—™E®ÂÝStÂ4ðBsÉ•\™†N©)pÒG’é×Ei¬Dm`¤¦€® +8F²˜:'ep’ŸÿÓæ\ÐU[k‚¯¸¡[X!%9ĺaI²X•:ê””Õs)1‡r±mq Qkå%1³@¼«/l„/Hx$¥ëvš¦sÉO¶’ŽÓ2’—aƒª°ÇJ®Ýª:‰IMP{Ì¢µ§ä—§))­°¸©¶­QÛOxSô!%,ÆÊ#D$Ѭh™IL]PwÁ ͉ðV vûì ”ÿÿÔçZGÅEçïPcÏu3ªJDæª5L€¡£±ži)©“1¢ê…woe !%4¶x&5”vÒAEôd$§=í#…ÖJ¾ìb{h˜S·NSXPy…!T|UÎÝÔ›RJFɈ*@Nò‰…n'É%3i$B‹·”pÝÐ’'U-À"ôø¤¤»À«Ùlè™Ö9óÊJÿÕäÀD¬”ZšZRRV7ÅYcxðQ©€« dp’”+îQ%Z­›¹S}[GÁ%4 d)°g6G -®R½0à¡èÊÃrÄ”Ô5€˜ˆþ(îa:¡–h>i)®Z Dk#…?K^†”¶ÍënÔã] ƒßµ%${€ª\é2÷Jp?”…纞Šv™As ¤§ÿÖçI>R‹é Vq¢‰$¥0G Íu—Y³ºUêx’RJ냅„ò§[FéV\ê’š¢raj>©ù ýŸ^!%5YTj§²Uƒ\r¢Y{¤¦««Ôù¨ yVËg²^Ÿ~é)¯è‚4¡šÀVŽš3D”Òx#[Oнk{*V‚ Jk<2â5¾H[e%0“*{$p‰]d…a´$§ÿ×Ï#² ÁXsHù(‰)«;T°íÛ ¤§F—ö*ån‘ 6’t%hcÁIM†²uQ{B;µAÀO’J@k„övæ¢ÄÁž))ªÖÇ#•ÇÁZ±€*¯×„”ˆ4’¦Y¢“[ :!%5-guZÊgXWœÒ~ d$§-ôŸW’Õô˜F¡ Ô¨IM6VuFhŽ{Lè¦ÖiñIOÿУcû6ÌÊMp?ZÙ&RRƒ$J“Y( §dF±§„”ƶUªÎÔ Á¥;l$ò’›ì¶xV+´*…6x«”¿Y))²*ÒT,«YD‚Т÷„”Ó´hUXÕ^°ðUœÒ JFãÙ Ú)ŸÅú$¤ðC´GÁ0²;¦} ˆ)) Ÿ)Ü5Lñ÷!—À„”Ï`¥¸r °žé‹á%?ÿÙ8BIM!UAdobe PhotoshopAdobe Photoshop CS68BIMÿá Öhttp://ns.adobe.com/xap/1.0/ ÿâ 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ÿÛ„         ÿÂÿÄy!"1 2!1a AQ0 ÿÚ ùaÅcÂp°G—ž‰QHBA'&J$P"J(X£˜0pà 0 ´¼´p D ŒPG$q¤â8ÀG£K‹‹J‡ $HâL$ÂŽ8A†‚`0¼ôÊC8¤2bpÎ X˜ Q(’p†„£ -=aà0q)0ð€(Ð…ˆ<òA"Ž$0Š,+XzEŠÒaeÌ'<³ÎXƒFˆ³ŠG–—p³â€Î’SË<òRc$0ÎQxá,4!Ã,Œó$˜2€Í4у +,Ó ,pf bÉIIÏ4òD(8¬Hæœ4 xA0á Ž!”‰'JJyä寔‰q†8pá‚Í0ƒÎi@¢QBMAÃJGh¦pÌ441ƒM8h¢ ”p€ †y@q8ÂÓ¦€PT0ÐD‘‚\T4p‘Ž&<â „,³ L)NqQQHB ÁRX8pB…‹Dy⇠`ð€p°Ç•– £†P11‚D 00D`°NRzcL`ÃBP„dcDˆ/JNP£F VTcC4ƒDJ4H Š‡˜(ˆXÐIÄ”`ãM ¤€2RBr…„Z<Ð…”„(B8qÄç)) âRQ"‰Å âÑá€$á…iƉP4Ñ…§q IC(*)++"(p£‹há„4Y) ° ,=‚‚Á„âD4‚£ @‘$db‹Ž,.<¼y ƒT %<ñLi…ÅfŽ^^P0ád ” 4H“š I!M0õÂ0ƒ×-)*$àÌ8Fœ²rÎ&&&yHãÕNóÔ/=â`ŠX°0œPÂRa!”HaPóÑ=#Ð*q1ÂIÌ A CIÈI D„PR4ÐE iiè©é–Š,YÀ“Ši1(‘@‚,â¢0ƒÏHõT°ÀÁda ‰4b@‡F@c•–•”0””ó‰ÆŠáDB 0Q§€XàÇ0°¼ô A& %XœyćI Š‚(8Y…¥åå &$%' AÀŠ H ?ÿÚÿ€ÿÚÿ€ÿÚ Q –¢†£®osèƒær§7‘žv­s&"6¢>䟠­u¨u9°ú± ¨!”M ŠäuY2 Û3¸ÔÖ¢éô_Õq7kþ‘hÝÛ1Sbph>Ÿ“­FÑkMæ›>“Mø×F'¼‹©Þ‹id%”M%ÔσôäëEµŽÖ4Ö}"ïÊígÍ µkžv®qõÔþ€A~e¦ÐÄÙš˜X’@‡J‡KiAÛŽ,9ô\ jÐ!ÔWÖ3Áé+ÓØý{DÿTó03FoÖO#p{X;q¾ÀAè0z‡CZ8·Ò‰ØÆÒâ½MH )3vUèéêýf'¦‚ú.g¥Ï§XÛGÒâìÃK'Jƒ^ÓË¥L6{š:Nâcéè5·¤»žÉ°,Ûòu].w1y@34ôªÏG¨Ús£òZ ELµ°ÏÀc4~F„¶;TM{Ø’NMÔ ÀS¨aÛŸ·XޞРߜ·ÚóÜ’ïA9ºÂàÍtžÍˆ‡V%·7 Sú9Ï['y–¤°¡¡3M9ÊÃ_éS&¹‰.ÔNÑž‡ôsöåõ¸ïÏsx¹¾äÀôv ‚úõÒ×È;íSúE¶êfZäÒç¡0¹€“š]8ó‚bP™íÑ=FÙ˜3TûFØÅ$Â,‡ë3Úv-ªw°ú¯i«€uÐ1õ°Y¾Ä“¤CÚgùŸCa€õŸBfnDú@Ô|ÛAµÄÒ>µsyíqÞÃ1ëG=Á¸\4SEv*¢ÀÔ®„‡z·`äW¬’wÿG%ˆ€6±›C–=¨É™ú(gê1=Q½bÀÂôäÆÜM4‰¹ì ËJ~_Ôf;ÙûÓΛrÚ‰¶Âj{Mò62%‘j*\ñ®47CAxAÔp­Z!aÚ+\Ï^ ïk÷"w²ÏÉ` 5ÅÒ6°fnDXÕªi©%´6ä’3&k€#ù蜨æ¢"†›ž7ï•R«\sÖ ?Y8b8èý,}. 8pè‡(¤<›isM+ÜD¸‹>OV˜u‹™¼s©¢ ¾fÝj#Tw²£8ó–…J¸`ƧЈ®¾Á{,;ÔúÙÉ®#ðÀ5‰«ÐÕŒNÀùÖàÎ"r¹‰¾Î,di•ol¬o‰Ve ±ˆj0-:9ÁfÜC¡¿§8½Í5¨îLBfZîgþiµ³ ‹7ÀÏ6}"'h¦`øö‚¨aÆ™ Üôäf¸\SÄáÔhµA¨u°Ù´5æ*hI bòP(˜µä°øÙø‘2ÈßÊŠ¥œÖ§Z™!º¨ù6Ê7êj€³©W0Âië®W³¨ŽäoçUIƒ>ë %ì§: ‚.7³ãp`T€AAe( Ç Þ‚'¨TÕ;Á7Ÿ>wÄðØTl”ä§#H„W;ƒÏpyàĨóµCM>.â¬cÀ^ÑE@à"kªÞúˆŽ*Áp]ªsuíM1üíù‚˜ŒA q& œü  ü⎠Șžn:•Z öq[%ì*¨‡ý@ciÎzQWŒ,0ã+¼ò*^¶8ßÏÚ'–¦x o5Æñ›þB§à Jƒ"bã൑‰%p1Ö( ©•ÈÖ™䃣˜I3PA_õX‰ôáOišYÌP\Ëʦ«ÏÎç̹˜©ZùÈ ç‡ÍdeS¥M³¸˜L󠹈s˜Q2Ôô²Í ÕªjÆþ¦g´AØçDóì2B'ÌÞ{?Í4óÔ@B"-Í3¸¸ÔÕxÜÄ^hVh(@Vãm€¿i­Þ¼M5"}® ØÁ‹_œ1^Ó±Ò5užW7ç$œ„UëªW†™n AQ¢4бS4@ ùGÂËøAâƒÌ¢h LÀ1TÓçqÿ1X¢XÏ.³æf Ο+Óc 3670¯?"KùÈ€5ÏA¨Ã±\¥uøÔøùÔ+È F¦ªiŸcž M(jöPÌ>bÕ.&50ÌÞb¦:(‹¼ÉÉäs×L:ÍG>•ä(»1¸Àˆ Úó= Ë‘m¨t³¢Ÿ#(,µŒÝ£(3<æYø‚W¡V\¨tyØ›<Íj½z+`Õú3³Ñm€‡‰¦†+ñ›€4 …6å¶· C·'NsÐØ£0Ì¢SGµAµ”a<úÑÉîc¿P›Ú…jóN¤j,6`M8$‚uXuþ‚!póEëÔ}E—v¥ÿÚ?ÿÚ?ÿÚ?„! ìÕ~NÃ,G† t(pªpC±™fÜÔ;2:mžqì¨9/ÃÃ,ÑUا,G£,ïÆçc~ú7ÿGeø`™Ó¢:t_=<tØË;¢fŒÓÃ#±“Ta¦Yسó‚…=˜ExgÅTwM<0Û:w ³ÑñŒ²ÕÆËœ½„3úTᢨðÁ Å_†ý4éÓ¦\d1Ç£¸GEV(è¡Ã0Ó'±k¢»~4B±PÊøé·6xy ÍèÙéešdlï!ÊgeÕŒž›sq…—wÈ_§¦öúB?ÁW## ì&?Žg>2¾WË 4ÁÑåˆF!Åÿ>wá ¸gOaCý…b6jT5†E™F 6þ³ã éïÅC99Ógúr¿9ÙÈð teÿ 0öxpR¿Â¬q¦O24ÃEϾ|r|<2¥_¯šäaáè>mC4ÎÂFü8W0ä§x:éLÞÂ.99‡Dspð«6lw:y\a³ÉHàÇt!\dà£Âêý26)˜9q§†rv¡åOt¸·ñ±é£ŽG“ƒ„*6ä9lÎŽúXç%~üz1Ù¢x(gŽB³ áœ6QƒÅ|páÁŽÏ#~È¿éf™ÉQéé¥)à¿D¥ òU«†ðð²ÿ‚†sæ…5ý=ùP¿ Å_{ÙÓŸ,eeò0Cý‡sœà«ƒ¡­8zpæBì¹ªŠ¢…g†BÜ£aœFTd¨Èc¾¸S(è„!©_(áÃc“àM<<ááG¦ØªáÙà‹³>œ:ùq釱á’ã±_ð¾6<(ðuÃÈvgÂ;…C(ìx9òØðGƒ©Bü?ÿÙmoderngl-moderngl-773b733/examples/data/textures/rock.jpg000066400000000000000000005374171470420062000234750ustar00rootroot00000000000000ÿØÿá)½ExifMM*bj(1"r2”‡i¨Ô ü€' ü€'Adobe Photoshop CC 2015 (Windows)2017:06:30 16:06:18   "*(2(ƒHHÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?™¶¾vÇç]´$í³ØˆX`ÜëY§»FËHÖþïøOæÔŸXpئ܂ ¹ÃÚ=6¿kw7÷Ÿg¤§·`{î­¢_ïɆ¶ ôšï¢ýŠ;_Ѭ”ÀÛ[Ün˜Ð&[ôY5géïQß×MUÕeR,c\CÆ”7pÜus[¹ŸGÑ÷X§™^VsKò¡ô_[ç ÑknÚÖýßg¬ž¡¨kq©ÌŸPÖO´6¯eXÎÛüï³þ"»H©3 ß›C[Ñ ÿÿ ïwïb¿Nµ,Œ€ê½Ÿ²6ºÏ¥þ‹Ñÿ‚µ1º¦¹æÂïd¸hÁ´D7Ý»Ù쿯ôXÚØ?GMZïAà8¸vX÷¶Ë5ú(©1ȬÚÛn-k+‚ò÷–6îhßúgíc>‡§üµMî±ïh†½ðʃ‹¡Ãv×9Ÿ÷ï§ýOç/Ue¬ÖÆnIiÚbÐÔ ½BÈ,H }»ƒ}¶íÛêþ‹ùi%aKkÖ· cˆcœw¹Àiï¶éýÏgø:ÑH®ÒÁô˜"HŸÙþ‘¾ßå©evlô¶–í¾àæí÷µ&0XíþŸ½ÆCÎé$~s_¼1­¯ùMÿ­¤¦¹u¥Äµ Ô’Ø­ú?ð÷¿é¦©¾«‰ 9Íú@ ?KÜçGòGµ=â§·sD1ðïYòÀ<,e¬{l~÷ÚŠ”kp€ZIe{@¨~†H±í{§üô¤m€ÆHú[»þšä?û?ñŸ¥LlôÚFÀ Aí¼HÔ±þ£]ô¿ª„ÛX÷e­ð!°D†~fï¦ïcÓºÊå‚ÚÝp'Û[KŸ?™¾G[¿y3®Ì;šãç:§†n®°ñ¼ý-u_¤ØëúOMè–ú- µðé =§þdoýÇû}?øE°ºÍöSªkž´6íZÿOgÑØÿúҙƥµz®Ú[É™ˆ^é.÷nßûÛÿÁ —ÿÐ׭Ť4¹µá@–£¢}FÛ«_þ‡ÛüÒFnuÃ_²çÑìi߯ú?ÞýÆzžÏQWs‹NÆ»pÛœæµåÅ¢áî÷~ç§x–kiÓG{s!þ«¿¯è¨é{+-eN,1} lM½îÛéíøOæ?ëHnê[½µmݨsƒˆkcùÍÎRÇ¿ü§½ ‚ºC..ä=–Ÿh>ýöµÖ{±–"†ƒ³ÓiÞÖþ‹k¹l{v‹7Úÿõß±%*Ÿµ0ÚÊÚÇK_c\]c[ qg·èú{]úOVßzv1Õ^m¤Wcœ!Ù%¯u°\ßø­o²»=OøUFÆÐµîxC€‘îs_ô›ýoç¶ÛÝú8$ˆÜv»k/Ѭ÷GýEi)3ì¹ÌÞÉÐm;#ˆþmÂ?Ïÿ„B«)„áÓÌ8{¤h×iîú^ߢ‰“[ˆÚ7ûIu¥À®ßOÓüÿ£ôÿEïA¶ÉsÃXËjkƒKš7[¾œëï¡f×7_ÓÿŒIM–Ws÷  ôÈhq3컟µû}ûÞ ú©kǨ ‚󵭟ηèîôöþb…5ØZ^¦Ç ’\ú6îüý¾ïzgWµ¾“œûÙÆ×M^¬µ­{¶³èWüÝèÒSòê²Ç¶ËZëX};˜ ù݇§îŸÍV1­fók‰ÓP[#Ü÷¹ÍýßðͪØÞ¥þÛÛ!¬!¶’[`qÔmÚÆm­ÎüÏÒ# mŒv熊ôvØ{¦æÁîn¿º—‚‘Û]‚§>—Aq®Ü&?q‡nÏMŽgèêÿ ÿѳùÄ':ö;fI /ö9¯.s=ScýÿKè"Šߤ „î!…æ=þ§ÑÿÈ£DõE:ÖîÄ‚ \ïÒ~é¤ÙZIAcm!ù¢=®üØßïÙ[XŒ îÚ\Ûâ}¯ -ÜKC‰ƒôÜïk½Djñ¨}ÛW¹¾£h±ÇÔÚ=–[_î}6zomMÓc?J÷¼ ›¶d4óôR´43«ÆÆª¹6ÝqîÀŸcµ57ÔöUé·ÙîüÿÒYWø^–fâCf—Óîö~s?c?ð_ðv¢½V5oVÖ‹ÜÛNàL“ôëéZû?¨Œê±©. nk{ñµ­wèßc?õ*WI­H»w¯{šÚÇÒc$’Oæz¾×ýßàý5<£{ˆ­Õ>ÖìmuTÖÌú6dÙk~ÐßÎ}xÕzvÛ^Ïc,²Ô­ýÌî¸4ìcZíηgõ?ÂÁ¡†ŠÃ´Öç;"CA$4âßM»ÞÿÜüÏÑú‰x£ÁÿѼ綖jšî. ˆ.:9ÞÖ¯½ Îq2Í6·qd™oò÷?Ýô½ªµYù>¡¤Œqeîç4}Cw?s=GýUþ“ôˆíÇnÂü¶†–P°Zë'Üæ Ùú_¥½ê=—ª¶Üàé$€Ë~†ŸIõ6¿cÝýOUN««sžÏLSçû þVAo¦Ö»óÂÁ©6Ê Vá"}§‘>^ ÷~âOº¶7QÚî ˜!çfݳùÏ …*Ù]hØ×jÝK‰ ÿ[›>¢vº¬fûìß¶ZòÍK›ÎÆ~“ù({òÃ"Ú\ÐѸî¤7_§ô¿×ÔPg¨Í™h°Õî†îÝ·nàvØöÿ4Ï¡þ%,¹.qmvb⃽µ[Yiµà·ô;½Ýÿi¿ôWèÒe×09–‚íÏtRÈö´¹Ïl¾ÏÒGügüï»-kÈì¿]ÁÄ=ÛIún€>—ÐÞïý‹Hc_¥cIq൜èðÏÑצïì#ÑWª?µ1ÀØKéÔŸpôÛ#ÛºÂYô¿óÚ,uÖ8á5¾˜ƒ‘{Á#qŸEžÑîmŸðogüoéU›,pÚë Ÿ£[¼;k}ÛZý¿£cÝ·þþ1E÷¹Ð ÚÖ¶ƘkA>ÿN ÿ··gýµüÚS²ëï´9%¤n$ŸÍÐîÝÿZÿÿ£é¼4Ö×±½â¦úA hÍCžçØïÍô}/ø[Tý0ô-·†0ëΞ›?Âþýˆ´Š÷1¯tîݨ>“XÃÝÿ ½%!®ÏDÃXë.=K7¸ˆ÷MÞ«¾ƒ~ŸÑb=ƒÔ¤7íÅŒkeÚŽC›í­Ÿ³nÿÒïôÔÜý0ÿT¸C£Ù-vÓis¿Âþå¹éª¡ÙÆ5…Î>›ˆ$;»½ŸM´³ý%{?szJm3+Õ©U~¥‡µïÕ€kv¹¾÷{w ädçšÃñ^àLzrí¿¿Wé=ŸÚ÷¦8¢á imf?£—ú^—ºßwÓß¿þ5'04l>×¸î ‰ùE“fçÿ£KE"nY½ä2iîp!çhn¯{…tþ“ý7þKu€lhem¢ /sAÛ[¿Ic«ÝÿZIæÇÍRÒ'FØ6€gÙúRço»ßþûhì®ÚÜ[aÛ_À{Ò"¿kýÿËÿ=%"s µöm; í'áé¹ã×¹ÕîÞöìØÄ€ÚÿWÒu8â\Óoµâ± ²ëEÛšÇÙì¯ô¥±–zHŽ ‚íÖ44†»`Úᦛß÷îýÏ £U^»Å¯yypý È—ÈöoÜ=Î÷{}íÿ¡b ÿÒ·cê­ž»œÊÚÃpcš=í— ûö{ßô«©§c– ìú`naÚvŸ£ê×.ý3Ÿþ´[ÿ\D,¹Œs¶ÀKvš›stöån•¹‘ûÛ?àS²‹&fÍòç¶ŠèªÂïMîxÿEb‰‘ƒ©QÈ´è! ‚èêáÔþ½•zð~ª`ìÈà1—6e£Ü»Û¡gó¾Ôa‘suÖ8ê6AѾݭÙé;ù>•žô2êšðÚ±Þ,úDnlm?H½ïÙ_·o¿Óþsù´PQ3×?e÷>Æ5Òã\V]·ý3˜7Yÿ[ô¿âÑ2.ÙìÝp./kCËA>ë^ûó{½­Þ•¹v;ôxÀnÚ É;[©ýkµ³þšUã=KË[òwV,ph$} ”¯~Ç~gý¸—]UÑcq¥þ–@mŽx$¾·¥¿E¶~ký­ÿG_¤§ëPÖ‰®ú1¡?˜_í/þ^Ë™ëÿ¤Nìg–6•¸ÃÚH{šáô^í­c~æ{=í68´X[ù€™p$Ï©·wÓ³oÐjV¤6äá¶ßI±]:¶Ö?|ǸÞv×öø?ô‰U‹EÖWSì"¶’v |kúHo¿þø‰c±É-¬™¹­ìoõýÿùñBÍî©í¨€ãÆÑcöO¾öTçW]üß©ÿmÙô* Úï4½õÖÇWK]¸ë© ù;oõ=ïöê%¡â ž?1¿áíÿÕˆUbÅ"¬:l¢³—8’Ñç{ýí¶Ö»ô›êÓ6†°»kžêàÇ“/vŽ }·ŸcÿnlHRKŒ›÷´1® ¶ºš×Öý/¦ïwökö„úDǶàØl3ù{ƒGÒuŸ£þuÞ£ý6VÏÐÖˆïL8°¾°HK£ÙôÆýßè·1Š>§t6Ì›!¢ÇIv ¸³é~‰Ìª»cÒ@[y¹Æ°æ×°¹æ ¥ôíÞßôª$’ÐÖVokCDAüÙ¿nÍÛžÇ~™EÚÐ+#ù ‹Àú>ùkj¥Ÿé6Ûgú/Ó"5ÖÖ1•ú¤8±ÒƹÆ}Û‡¬Ýß»”ßæRR«Åcj?Mðui!­Ûô0}ëŠUSeO"·9Ø¡§ôe›¥ßºNíþ—ò+bˆ}àRé-¸èÐËw¹ÿÊôëNó»Bö5÷mp'÷tkYþüÿgúD•išk ûY\“´ý Ç¿wücÍïsý:¶Ò ’ù€ÖkžçÎöÇæÿ„UN 4úÙ:³Þ÷<þýt±ÞÑÙ²ÿüöúµt–—´lØç·é\ý›\í¿àè÷¤§ÿÓ°.6C Íç½îà Ý›6{¿œýÊÓ4¶æ»ô->ßÌ¿¾ßë"X+eF"¦sƒˆkt÷K¶½ª/k„ ú@:Hwïo,sÍb{&ØXÒëcÚ kIh{Ïîz™m­çþ³ïýôÖ_‘®•Ø ÎÐ4÷i}›[ûï±&bÖ=þß\ËL{‹dýí?Îÿ¯ó)›_¹ŒØ>‘$„G§ÓnïõôÒR\L›A{¯mbÈhc‹¶Ãßê5»7³óÿ‚ReOug"û¶î$H¾µÛ+÷¿wæþÿþ ‚ë²(°¾–8¿n›×nÓÝf×Cé»Ûôÿí¤'[fCš-víþÖ[£É#Û±¢Cû¿™ú?ð‰R’0V«_«SŒ‡Xá¸Áþqµ¿Ö±Û;Õô½Gÿ7þ‘=yUC«}9.‚j sú0\kÿ·?Â}4®euWë[`ªºám†µ lcXµ÷;ÛüÛœ»Âj.6É-pqp Æç²Ð=?гéÿ‚±% k‹òÙ3U6±„Vgßgè]µö»èo³³ôlö'møõ‡UŽæ¼ÖC¯E›æºÇìnÍ¿EŒ@fIq±ísö˜hqìWÊšÏÎö+‹«ÛcÜXÒ œAkšOÇ·zT¥ —d—úÅåΉÑÌk“ìÙ[wþïçÿÁ(Ù™Œ×=ö2¢kA'vžç¶±_¹Ÿºëú6# /`Ù³sÂ@x?Ö±Õ±»½¿ðßA Ôï—ZëcinÑí` 5³vÿÒmKE9–u|MÍeo´º¤ ¤:>ƒŸôµ¿M,*îÍÝš× &5»öÖì7¼ØßY•ûv}ž­ž·è?ÁzËM¿dÇÜíìfæ–2¦I68ÿî÷ÿ5ÿ¥”Ü÷1·ï‡m”°4ŸÌs÷~Ъš®éïkl±¯¶ñ°ûïs˜Gç9Ôµµnõ½®õÇÕÿ[õê}ÌcË‹[{~•–Æ=î.Ûìý'õÿ¡mÝ]Å–º†ßU„ì{ZZHþÇç7ôÛýöWúTZ¯¥æ§—ÙS´k†×°‰nçU c,ýÏoèÐüR’šéeN¨\\gsÎÓ-'M[aÚïÍõ_ýN¤?²蘆ÒA¶ÜIû?{OÏ«þ‚–ö?Ó{Žx-yýÝ´Ùÿ¢ý–£IÕ5î!¹{Z«[l!Ó: n¨;gïzA.Êšãc޼º“ÆŸºÿôžåZ˲.±µR jf®uMOaê=ÍÛ_þ|³þ á?%þ¯kê­¿AÒZ ¹ü¹ûÜßðmÿŒýó‰0â°}Ÿ­µŒ$»në'ùÇXÒ~ïQþ÷¿ÿIŽªÿÔ¸ÀË+;Ø×±ŽÞòè:ò7OµÌ­ßñŸ¥þ¢Õ¥Œ€Ó¸Ø ¶Iü÷7Ý[¬ýÇújC,Tßh!‘¹Ÿ';Ú63s¿õ…¹V¸–VÆcÓIlüÜ’Ûã?Iÿ¢¢¾Ö¼c—lkÅ€v×Ë_ýGý»gïɾäTÖ–l{F¡®ö~vßwæ5ˆ-ªškh¡û¤ûîÝ%Î6ÿ+sþš•ùOÅi¦ŠEÍ3asý±»è‡:ßwø”§Ñ¸Ö.{7äKƒl:±µÿ„ö~•Û½V²½ÿ¢ÿÁë—6è‡{lÞæ¹¡¢ÝÃoÒb¥vn^g­•X4µ†²=8y.Öºklnô¿Â?ô–¿ôÍYìôî¾§K  `û¸}67ü+Òꞌlq®Öää1Öìc…E°Ø{Ǥë _NËÝõoU…¼–Ãw ˆgæ }{ê¯wæogü'óhîÅ41Îj Üãº!®k}þc}Dî¯s\=ÎqŠêvÀK} »o©ÿ³ÔúOg¨Š‘µõ¶ÀÖØÖ½î²>‹%Çgõ~ŸüRpÊ_6–°–úV“2ïh¯ýßô^šaˆâÀµ­ÖÖÇn$Hégù{Â\ÿø´vÕ†ÁVÿx.÷lk¡Ûœ©µµÎÙS}ž¥ÖèÄ­T¸mPµõ1,4Ï}ÓeŽÿJïú»?›Ú1ŸaÆ®`‡6¶ÀÚßéý+*díßþù¥ä‹h4âÐæ“¨u-kX'ô»ÇþE4Ýý„+‹‡‹U½î²×“M1ê[kÜÿgµÛ¶µ›ÿGöKô_¸’›ÕÔÚYö’÷’ rIŸç;]Ï窖¿ ;c_½¤9³&#{ê<ûÝýF!Ó™eu€i»Õ½–¹Œ’~ƒ6ÜÝÍ©¿›écÿÆ?ü"5y•¾êKb+ÜÐããíÛ¿ÿVZ–ÊHÏR·1à1¡ÃF˜ÚAÿsÇúêW°4€í¥ÀLˆ_-žÅc[§vÅkˆ?ºvÆOénÙýENë­^÷èm»I÷Æ÷ÖÖÿƒöïCÅL[eàÙéV].¶æ¹  =Ísv~{]í÷¨¹µÜ×°v¶²þìOÑöû½ž¥Ÿá?›V 500VK;déÎ'{¶ïÿ[šmö½íh©º–‡ ¤Æÿ£ùÿKóQ´"Å¢¬{6µÇm÷XÆ ´}ŒsÚç~¿èþŸö]“M4QmÆK½G€ÖëÖU»ô¬þÇÓÿ ô{™]Žw¦=M,phŸ¢÷;ÚÆ¹Þÿæ÷þçó‰ÙŒúÜaôÁ%΂?2¸²×Â5-«ÿÕ»NãíôÚ|@ýïL{œí¿ZD8ÙìnØ1/-ܦ~ƒÿ®¡ û[Àö˃ÅîeNnݾÿð_×HÃù‚ÈÛÛÞÿöë&.fïLâCÉ:Æ[»é;k›ìú67wéò³½ä»ìÆ*dlüß´¾ÏÒ5­ÜéUú?Ѩúy-hÈwµ¶ì4¹Áž×Y«·mgÐú(ÊɳÜw<“>â@>ÁX®›7Wÿ\÷þý¿˜‚Y ‹=A€Ó»lû ´4´û,c[úO¥úUXzŽcmè^KK`Ö±î«mŽÛüâ+1®ÈdX ­h.ùµ­ýïóÑ=ØÀwz\Ðk?J±îsœöÇæ!²šçÕ»^ì‹v’aµ‚~›}»•ìw²½ïÿ­©c‡ŠýFì­¯1X$¶vû »üÏr54Ø÷›Ç #o¨à"~¦ß{×ôžš8ŵÌÜ.s¦lÒøK=Ok˜•¥­[ª~ÒÒaK籟NªÜÏoúoôž¥¨6E²æ¼´   n»?3óÃ7üÊý:ÑŸCí¿s‰hp& “=-Ìݱÿ྇übk+ynË i!Ó»]Íg£ô˜ÆnþoóŸÎzˆ… qÌ5·{Æ5v{b¿ysG±î?Í»Ø=¿žžºjÇ/ºªÅZØ ×%žƒ`WéîÛ»ÒoÓO[*m~½7: HžN绿»ý?ÁmÙê"Uq68¹Þ×ß¼;ó¿9%0®§·iK4t8¥w¦=þ¯øeç¨K]°î ¤Þlÿ)3ò.¬¹–ÚZ"YèÎî}›¿5Õþ±ßú=%$ÄǬ‚èuvY%¡Áâ û=¾ë?¯þ•ÔÜq»/k¶°C†³³wæÿàŠ›ouÅÕ›ç7Qc™·p&w±»ÿ™©ZÇï»d9ÆCDéîhk½îÛü´©¨ß‘ç=Õ²¦Ì°µÅÎ pûgÙÿÿ£±ªs÷¼í?G´.“úgýc?êÐȱíÛ¨ØLÚÙoö½MÞïÜo¨Ô+7†Qk_é¸Gyµ­籞ïoò™é¤¤×]G«KªÈ-sì°“;­ˆ¦¦Hôïw©ôÿÑ)é8ú­‘ºXÂâY»èú{ÎÝÿÕÝìb'LÇ¢æÞmw¬"¶?l¹à›¶íÏÑ#g¢Šn£qs 5¤‚=§W{öþ‘Üý¨uÑ=ÿÖ#™cÜÐàà=G–‚k=ÖYêU ù¯ewÃ`!Ž³Ú êý¬~Ç¥ù–-]u·UQ§޵Ïk]fâÖIô~›žßÒ{ÿ×ÔAnÖ¿×wÚ/¼EÖ;ÜAlþ‰­s½•³÷?íÕ¯¥÷cÒÃeXâ–ZAhÓs}¾í›Yüßý»Z³Uµ×Xºë+clI°†—¼£îÝ»éÆ3ýõV¬!A¶ŠëpúRC\ïvë?œú?OfÿôèÑ…¦ÒXÇY6Oé)·†}sÛg¥êÿÖmHø+̓ìµÍ²ç20ÙµÂXí~Žá¦ÿ[ý©úz_Ö±©;-½Ìlî^Òáþ‚Zýµ×þƒ÷ýEAõ3!¥ãÕ47Þïq'óÞí×;Öwü/©gú/I†¹®s=&±²ç± ƒº#sšwÿ%¾ô´ê”øù-¾¿SX)sˆ¯Ö%›[ù­á¶*ïôuÿÂþ…eŸJ+kíy¼á÷~ÿîWéþú:ï¶Æòç]`ö†°HÚ;¹žíîÛÿê!µÍ¼¶ÁS»uOô÷-Ñüïò=?úÒ$7*x¥e- Ÿ¡ˆüýÎsíßþ Š®uØìc+h¦.°¹òZI Ûm‡ü#¾Ÿú?ø5=Ï{kdžL4;k罞͛+ýÌV×ÜÛ½Pò÷0‡nƒì±ŽõµÎÿÏi%}¾´Z\lÔ3Ó’ÚËGº^ž£Y³ú›ÿœ÷©ÔEmun~öíK€?Gß»ûiêÞY¼€C"°w£÷?×b›Žæ5a!Þá³sw¦í­nýŒÿɤ¥µ´‡Ý±€np ’~ úO³ù¿ýHª’ñy sÇçˆÛ>Úâ²=Ïw»b³`cXÜ I#ŸycÜãoõ`@´8²ÂI½Ï{C¢˜vÍÿ˳úžÄŒ±–5ÁŽtÍa'éô†£Û·ó7§{›¿yý+µÎ÷üªÚvîÿEè ¾ÊÚù¡Ó®ý­Üdý/øÝÞß§ëçÄV¹Ð\ÒçŽ\Ù†ë·é³ÚŠÙ‘Q.¬–0À!ÄCæÃ›ùîÙ·ów« ¯ÖXꮲË^vÜæ™+¦Ç{k«ý£÷ú—~‘±[ê-¥Ž3ùyk`j*¯oæÿ¤ÿJýŠuãz°×¼ÙÛsÉOçUµõWÎÖ~–;|¹šjè{[ôúW)F¿Mõí/.¹Æ‹ØàbAúGèíÿVŒ£¸ wôKXÿk?{üõ7]Xc†ZØpØÖ‰s¬»Óú~ç~ÿI$§ÿ׼뫾ÇÙEÂʘZÐcÚÙ÷nmú9ïÿƒþi&æVÐéx¬:lö‰sO¶óù¿éH©ÙMnp.¿ÒcI€C\&6îk,k›êíwýký*+\ïÎ×m.pÚÓíÚÙõ,úÿæÿÑÚ£ ½)ÈmŒ/ÞÒø!§t3]¾Ïγg·Ðý*©ÛK­ßé‘Ó!¤ 6²í¬u»Gé?óâ™fÒNóhÝícˆƒú&ØÁ¹¬wî3ÿ3C¤Ön´Ùì3E.`®çFÛÇ5ïužÝ¿¤ØIJn±•2·½¿DµÄ7Ùú'Øç»Û³ý¿è}Df䆴µ‡Cç8€‘ùÃôŸºßüøªPX²ºö±Öûˆ¦Æå;{­ºÿçXê¿í•c~%Ç4±­põ@y$Îp~óü¤‚?{lvç<\x{¿I0$~ƒÝM?Èw§ë¨z/vç>ÇRÆ€MgÚ k½÷]»wó¾¦GüR³c,¥¡‘þŽ· #ùÆ·ùñ¿ø"NÝ?im°uq% {¿Iù¯ß·s*ý#ÑSE~â÷KçcXæ¼—iu¬ú[›¶ÍŸÍþbŽçÔ>Îö1ò Fý+KÚÚßëþ‘+«s^IÛP2HÚ[ü­žÐ[K꿜RÆoµ†–iÉÝ·nòIhû­o礆wl²ºÙ]¥Í—OÒ'ÆÏJÇûßìþn¯çUG;-¯±¦ úS-$ýíc>—ò73Ø‹s½ÂÛM–©•€é.Ý»s¿×ü"L‹x!aöA$ë?š×YµßÚIL^-µ­:[k†âÐ ë§!ÎÿÑ{Wa®ÃApÑ;ZÙ~¤³upù»ÚÍÞÏü z¦kh¤Æ×] †´ÍtCþø¬2›©i¯Vê½®€ö¸5ÁÎæ¾Ý¿OÔIMj±ªp/{‹+¨°¥ÎúSnæíüïüùXZì¦ú6¸ÔÝÁÏ{Û#é×CkwªýŽþ~×{*ýü"¿}l{ÙEÎ 1…ÌÇÞæ¹Ÿ½c^ÁVô‚×·èU €ÂmŒ²¢ïKlýzV¥=×c‰sƒMŒüÑ>êÜ@kÝô?è'mÞ•{©ÚLÖ½®1QüæÕKêØ×·ù¿ÒWú?äz{ÆúET×\ Û¡¬6w~nç}+-³ý#¿KþL>Ìr=AêZA¶CœAú,õ?™uwøüú’‘×Uop»Ò{÷€[f×4ì˜È ­µÿ‚§ýsùÏщô ísÁ{œèÜðdêé»ùWÍN’âãHpõ ‚AÐnö}=ïú ú ÿ•OŬl`k§RÑ©‡C½¾ô-OÿÐ;g¨Úö¸9ül ý/hoÑsFíé(¡€äPÚë:›œKZF ~Ó½¿¹ì³þ2´F ¨sƒK¦_.ÜKò·Úˆ]L;R+q%Í8»þ©F½“]ô^בS@,-×C>Ö²M•ØïÞÚ¢1îk·X浜5¥ÂL–ÿ)û~Žßå¨;!ååìa´ ÜcÔoóŒô,Q{­±å›K Z^âé0Ù€tíßE¿éÿ‚™Ý™ˆËZ=;/¼ŽÚÇ–úd€öÚêØíµþs¿—]ÎV‹eUº·X_µó´=»>RÿR¿oýÇýÏøE]¶†m¦=:€0XèÇü%Ö8ú¾¶ïÝþkôIÜ=gXT@ü­ßAßðŸÎ%J¶ ËÆŒpØþZ^Ø Qßëÿ£‘•Euí¶ÍÒZàÙ sìs¶ì¹ÿöçèÕ²ëÔײ¶4ÎÒÖ0ðbï¢63kkM•W鼂±î‰ÛµºnþµŽEKeXÇ}µ’ .}#kˆy'{lúêÿ›g¦ëS[Sk¿F KË÷CcÜæÖê3Ôüß¡ÿ]Hþ‘òé! ’òfOivßRœÿÁ=ÿ£}ͱÀ˜,@ {~eN÷PïúŠ’R9µ¯&Û, ~¾ƒ]´?÷[{Zÿø/^ÏøË*ûKš,kk£BNÐg‘vÛú'}ðž§é€Êö7mU\ÇI$í·µˆ7,i5›^OˆkEc÷+oý¹ÿ¤¤Îg ¾MOh,nðæŽ7K¿HÇG§S?Eú5#‘uMk)¨TƇ8. sœý[³k¿®ª³ô‡]„ˆc L¸îí{v}:ýGÿÅ©·õ~à'sŽ÷;_ìÿ7ü–ÿÛ‰) BÁ»í;m-,kZæÕϨçìµ×#ÙoЭ3™ò×3ݼoÚàv4ö·fÇz·;Ü×½¨®{™/™/ »‘ôžûßÿA5u^KžÚÚœL±ÀŸPý/o¶¿øÏßIHMslµ¯±ÆEvý>‘snÖmö6¦1Xa¤Vê˜)ƒívðö’~ŽíÞ£v1ÞŸ§þÓ­Ök­tY¦ðãê‰ÿK§»ù>Æ º¦—†±äÜ'Úöè6û‰Û[›íÛô’RJ骗zuv™ŸÜhÿßѧ»âöº§:]?¢ c÷Ýô}ŸŸþ“ùj.Ǻ¦5Ô»~ù´¤hÍHu~ÆŸkÝÿŸ_c-¨Õ-¶€ö×eÖ9Ä7‘yíÙù¿à÷ÿRÔÿÿÙÿí1~Photoshop 3.08BIM%8BIM:å printOutputPstSboolInteenumInteClrmprintSixteenBitbool printerNameTEXTprintProofSetupObjc Proof Setup proofSetupBltnenum builtinProof proofCMYK8BIM;-printOutputOptionsCptnboolClbrboolRgsMboolCrnCboolCntCboolLblsboolNgtvboolEmlDboolIntrboolBckgObjcRGBCRd doub@oàGrn doub@oàBl doub@oàBrdTUntF#RltBld UntF#RltRsltUntF#Pxl@R vectorDataboolPgPsenumPgPsPgPCLeftUntF#RltTop UntF#RltScl UntF#Prc@YcropWhenPrintingboolcropRectBottomlong cropRectLeftlong cropRectRightlong cropRectToplong8BIMíHH8BIM&?€8BIM Z8BIM8BIMó 8BIM' 8BIMõH/fflff/ff¡™š2Z5-8BIMøpÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿèÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿè8BIM@@8BIM8BIMI Untitled-1nullboundsObjcRct1Top longLeftlongBtomlongRghtlongslicesVlLsObjcslicesliceIDlonggroupIDlongoriginenum ESliceOrigin autoGeneratedTypeenum ESliceTypeImg boundsObjcRct1Top longLeftlongBtomlongRghtlongurlTEXTnullTEXTMsgeTEXTaltTagTEXTcellTextIsHTMLboolcellTextTEXT horzAlignenumESliceHorzAligndefault vertAlignenumESliceVertAligndefault bgColorTypeenumESliceBGColorTypeNone topOutsetlong leftOutsetlong bottomOutsetlong rightOutsetlong8BIM( ?ð8BIM8BIM (Ÿ  à,(ƒÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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‡—§·ÇÿÚ ?™¶¾vÇç]´$í³ØˆX`ÜëY§»FËHÖþïøOæÔŸXpئ܂ ¹ÃÚ=6¿kw7÷Ÿg¤§·`{î­¢_ïɆ¶ ôšï¢ýŠ;_Ѭ”ÀÛ[Ün˜Ð&[ôY5géïQß×MUÕeR,c\CÆ”7pÜus[¹ŸGÑ÷X§™^VsKò¡ô_[ç ÑknÚÖýßg¬ž¡¨kq©ÌŸPÖO´6¯eXÎÛüï³þ"»H©3 ß›C[Ñ ÿÿ ïwïb¿Nµ,Œ€ê½Ÿ²6ºÏ¥þ‹Ñÿ‚µ1º¦¹æÂïd¸hÁ´D7Ý»Ù쿯ôXÚØ?GMZïAà8¸vX÷¶Ë5ú(©1ȬÚÛn-k+‚ò÷–6îhßúgíc>‡§üµMî±ïh†½ðʃ‹¡Ãv×9Ÿ÷ï§ýOç/Ue¬ÖÆnIiÚbÐÔ ½BÈ,H }»ƒ}¶íÛêþ‹ùi%aKkÖ· cˆcœw¹Àiï¶éýÏgø:ÑH®ÒÁô˜"HŸÙþ‘¾ßå©evlô¶–í¾àæí÷µ&0XíþŸ½ÆCÎé$~s_¼1­¯ùMÿ­¤¦¹u¥Äµ Ô’Ø­ú?ð÷¿é¦©¾«‰ 9Íú@ ?KÜçGòGµ=â§·sD1ðïYòÀ<,e¬{l~÷ÚŠ”kp€ZIe{@¨~†H±í{§üô¤m€ÆHú[»þšä?û?ñŸ¥LlôÚFÀ Aí¼HÔ±þ£]ô¿ª„ÛX÷e­ð!°D†~fï¦ïcÓºÊå‚ÚÝp'Û[KŸ?™¾G[¿y3®Ì;šãç:§†n®°ñ¼ý-u_¤ØëúOMè–ú- µðé =§þdoýÇû}?øE°ºÍöSªkž´6íZÿOgÑØÿúҙƥµz®Ú[É™ˆ^é.÷nßûÛÿÁ —ÿÐ׭Ť4¹µá@–£¢}FÛ«_þ‡ÛüÒFnuÃ_²çÑìi߯ú?ÞýÆzžÏQWs‹NÆ»pÛœæµåÅ¢áî÷~ç§x–kiÓG{s!þ«¿¯è¨é{+-eN,1} lM½îÛéíøOæ?ëHnê[½µmݨsƒˆkcùÍÎRÇ¿ü§½ ‚ºC..ä=–Ÿh>ýöµÖ{±–"†ƒ³ÓiÞÖþ‹k¹l{v‹7Úÿõß±%*Ÿµ0ÚÊÚÇK_c\]c[ qg·èú{]úOVßzv1Õ^m¤Wcœ!Ù%¯u°\ßø­o²»=OøUFÆÐµîxC€‘îs_ô›ýoç¶ÛÝú8$ˆÜv»k/Ѭ÷GýEi)3ì¹ÌÞÉÐm;#ˆþmÂ?Ïÿ„B«)„áÓÌ8{¤h×iîú^ߢ‰“[ˆÚ7ûIu¥À®ßOÓüÿ£ôÿEïA¶ÉsÃXËjkƒKš7[¾œëï¡f×7_ÓÿŒIM–Ws÷  ôÈhq3컟µû}ûÞ ú©kǨ ‚󵭟ηèîôöþb…5ØZ^¦Ç ’\ú6îüý¾ïzgWµ¾“œûÙÆ×M^¬µ­{¶³èWüÝèÒSòê²Ç¶ËZëX};˜ ù݇§îŸÍV1­fók‰ÓP[#Ü÷¹ÍýßðͪØÞ¥þÛÛ!¬!¶’[`qÔmÚÆm­ÎüÏÒ# mŒv熊ôvØ{¦æÁîn¿º—‚‘Û]‚§>—Aq®Ü&?q‡nÏMŽgèêÿ ÿѳùÄ':ö;fI /ö9¯.s=ScýÿKè"Šߤ „î!…æ=þ§ÑÿÈ£DõE:ÖîÄ‚ \ïÒ~é¤ÙZIAcm!ù¢=®üØßïÙ[XŒ îÚ\Ûâ}¯ -ÜKC‰ƒôÜïk½Djñ¨}ÛW¹¾£h±ÇÔÚ=–[_î}6zomMÓc?J÷¼ ›¶d4óôR´43«ÆÆª¹6ÝqîÀŸcµ57ÔöUé·ÙîüÿÒYWø^–fâCf—Óîö~s?c?ð_ðv¢½V5oVÖ‹ÜÛNàL“ôëéZû?¨Œê±©. nk{ñµ­wèßc?õ*WI­H»w¯{šÚÇÒc$’Oæz¾×ýßàý5<£{ˆ­Õ>ÖìmuTÖÌú6dÙk~ÐßÎ}xÕzvÛ^Ïc,²Ô­ýÌî¸4ìcZíηgõ?ÂÁ¡†ŠÃ´Öç;"CA$4âßM»ÞÿÜüÏÑú‰x£ÁÿѼ綖jšî. ˆ.:9ÞÖ¯½ Îq2Í6·qd™oò÷?Ýô½ªµYù>¡¤Œqeîç4}Cw?s=GýUþ“ôˆíÇnÂü¶†–P°Zë'Üæ Ùú_¥½ê=—ª¶Üàé$€Ë~†ŸIõ6¿cÝýOUN««sžÏLSçû þVAo¦Ö»óÂÁ©6Ê Vá"}§‘>^ ÷~âOº¶7QÚî ˜!çfݳùÏ …*Ù]hØ×jÝK‰ ÿ[›>¢vº¬fûìß¶ZòÍK›ÎÆ~“ù({òÃ"Ú\ÐѸî¤7_§ô¿×ÔPg¨Í™h°Õî†îÝ·nàvØöÿ4Ï¡þ%,¹.qmvb⃽µ[Yiµà·ô;½Ýÿi¿ôWèÒe×09–‚íÏtRÈö´¹Ïl¾ÏÒGügüï»-kÈì¿]ÁÄ=ÛIún€>—ÐÞïý‹Hc_¥cIq൜èðÏÑצïì#ÑWª?µ1ÀØKéÔŸpôÛ#ÛºÂYô¿óÚ,uÖ8á5¾˜ƒ‘{Á#qŸEžÑîmŸðogüoéU›,pÚë Ÿ£[¼;k}ÛZý¿£cÝ·þþ1E÷¹Ð ÚÖ¶ƘkA>ÿN ÿ··gýµüÚS²ëï´9%¤n$ŸÍÐîÝÿZÿÿ£é¼4Ö×±½â¦úA hÍCžçØïÍô}/ø[Tý0ô-·†0ëΞ›?Âþýˆ´Š÷1¯tîݨ>“XÃÝÿ ½%!®ÏDÃXë.=K7¸ˆ÷MÞ«¾ƒ~ŸÑb=ƒÔ¤7íÅŒkeÚŽC›í­Ÿ³nÿÒïôÔÜý0ÿT¸C£Ù-vÓis¿Âþå¹éª¡ÙÆ5…Î>›ˆ$;»½ŸM´³ý%{?szJm3+Õ©U~¥‡µïÕ€kv¹¾÷{w ädçšÃñ^àLzrí¿¿Wé=ŸÚ÷¦8¢á imf?£—ú^—ºßwÓß¿þ5'04l>×¸î ‰ùE“fçÿ£KE"nY½ä2iîp!çhn¯{…tþ“ý7þKu€lhem¢ /sAÛ[¿Ic«ÝÿZIæÇÍRÒ'FØ6€gÙúRço»ßþûhì®ÚÜ[aÛ_À{Ò"¿kýÿËÿ=%"s µöm; í'áé¹ã×¹ÕîÞöìØÄ€ÚÿWÒu8â\Óoµâ± ²ëEÛšÇÙì¯ô¥±–zHŽ ‚íÖ44†»`Úᦛß÷îýÏ £U^»Å¯yypý È—ÈöoÜ=Î÷{}íÿ¡b ÿÒ·cê­ž»œÊÚÃpcš=í— ûö{ßô«©§c– ìú`naÚvŸ£ê×.ý3Ÿþ´[ÿ\D,¹Œs¶ÀKvš›stöån•¹‘ûÛ?àS²‹&fÍòç¶ŠèªÂïMîxÿEb‰‘ƒ©QÈ´è! ‚èêáÔþ½•zð~ª`ìÈà1—6e£Ü»Û¡gó¾Ôa‘suÖ8ê6AѾݭÙé;ù>•žô2êšðÚ±Þ,úDnlm?H½ïÙ_·o¿Óþsù´PQ3×?e÷>Æ5Òã\V]·ý3˜7Yÿ[ô¿âÑ2.ÙìÝp./kCËA>ë^ûó{½­Þ•¹v;ôxÀnÚ É;[©ýkµ³þšUã=KË[òwV,ph$} ”¯~Ç~gý¸—]UÑcq¥þ–@mŽx$¾·¥¿E¶~ký­ÿG_¤§ëPÖ‰®ú1¡?˜_í/þ^Ë™ëÿ¤Nìg–6•¸ÃÚH{šáô^í­c~æ{=í68´X[ù€™p$Ï©·wÓ³oÐjV¤6äá¶ßI±]:¶Ö?|ǸÞv×öø?ô‰U‹EÖWSì"¶’v |kúHo¿þø‰c±É-¬™¹­ìoõýÿùñBÍî©í¨€ãÆÑcöO¾öTçW]üß©ÿmÙô* Úï4½õÖÇWK]¸ë© ù;oõ=ïöê%¡â ž?1¿áíÿÕˆUbÅ"¬:l¢³—8’Ñç{ýí¶Ö»ô›êÓ6†°»kžêàÇ“/vŽ }·ŸcÿnlHRKŒ›÷´1® ¶ºš×Öý/¦ïwökö„úDǶàØl3ù{ƒGÒuŸ£þuÞ£ý6VÏÐÖˆïL8°¾°HK£ÙôÆýßè·1Š>§t6Ì›!¢ÇIv ¸³é~‰Ìª»cÒ@[y¹Æ°æ×°¹æ ¥ôíÞßôª$’ÐÖVokCDAüÙ¿nÍÛžÇ~™EÚÐ+#ù ‹Àú>ùkj¥Ÿé6Ûgú/Ó"5ÖÖ1•ú¤8±ÒƹÆ}Û‡¬Ýß»”ßæRR«Åcj?Mðui!­Ûô0}ëŠUSeO"·9Ø¡§ôe›¥ßºNíþ—ò+bˆ}àRé-¸èÐËw¹ÿÊôëNó»Bö5÷mp'÷tkYþüÿgúD•išk ûY\“´ý Ç¿wücÍïsý:¶Ò ’ù€ÖkžçÎöÇæÿ„UN 4úÙ:³Þ÷<þýt±ÞÑÙ²ÿüöúµt–—´lØç·é\ý›\í¿àè÷¤§ÿÓ°.6C Íç½îà Ý›6{¿œýÊÓ4¶æ»ô->ßÌ¿¾ßë"X+eF"¦sƒˆkt÷K¶½ª/k„ ú@:Hwïo,sÍb{&ØXÒëcÚ kIh{Ïîz™m­çþ³ïýôÖ_‘®•Ø ÎÐ4÷i}›[ûï±&bÖ=þß\ËL{‹dýí?Îÿ¯ó)›_¹ŒØ>‘$„G§ÓnïõôÒR\L›A{¯mbÈhc‹¶Ãßê5»7³óÿ‚ReOug"û¶î$H¾µÛ+÷¿wæþÿþ ‚ë²(°¾–8¿n›×nÓÝf×Cé»Ûôÿí¤'[fCš-víþÖ[£É#Û±¢Cû¿™ú?ð‰R’0V«_«SŒ‡Xá¸Áþqµ¿Ö±Û;Õô½Gÿ7þ‘=yUC«}9.‚j sú0\kÿ·?Â}4®euWë[`ªºám†µ lcXµ÷;ÛüÛœ»Âj.6É-pqp Æç²Ð=?гéÿ‚±% k‹òÙ3U6±„Vgßgè]µö»èo³³ôlö'møõ‡UŽæ¼ÖC¯E›æºÇìnÍ¿EŒ@fIq±ísö˜hqìWÊšÏÎö+‹«ÛcÜXÒ œAkšOÇ·zT¥ —d—úÅåΉÑÌk“ìÙ[wþïçÿÁ(Ù™Œ×=ö2¢kA'vžç¶±_¹Ÿºëú6# /`Ù³sÂ@x?Ö±Õ±»½¿ðßA Ôï—ZëcinÑí` 5³vÿÒmKE9–u|MÍeo´º¤ ¤:>ƒŸôµ¿M,*îÍÝš× &5»öÖì7¼ØßY•ûv}ž­ž·è?ÁzËM¿dÇÜíìfæ–2¦I68ÿî÷ÿ5ÿ¥”Ü÷1·ï‡m”°4ŸÌs÷~Ъš®éïkl±¯¶ñ°ûïs˜Gç9Ôµµnõ½®õÇÕÿ[õê}ÌcË‹[{~•–Æ=î.Ûìý'õÿ¡mÝ]Å–º†ßU„ì{ZZHþÇç7ôÛýöWúTZ¯¥æ§—ÙS´k†×°‰nçU c,ýÏoèÐüR’šéeN¨\\gsÎÓ-'M[aÚïÍõ_ýN¤?²蘆ÒA¶ÜIû?{OÏ«þ‚–ö?Ó{Žx-yýÝ´Ùÿ¢ý–£IÕ5î!¹{Z«[l!Ó: n¨;gïzA.Êšãc޼º“ÆŸºÿôžåZ˲.±µR jf®uMOaê=ÍÛ_þ|³þ á?%þ¯kê­¿AÒZ ¹ü¹ûÜßðmÿŒýó‰0â°}Ÿ­µŒ$»në'ùÇXÒ~ïQþ÷¿ÿIŽªÿÔ¸ÀË+;Ø×±ŽÞòè:ò7OµÌ­ßñŸ¥þ¢Õ¥Œ€Ó¸Ø ¶Iü÷7Ý[¬ýÇújC,Tßh!‘¹Ÿ';Ú63s¿õ…¹V¸–VÆcÓIlüÜ’Ûã?Iÿ¢¢¾Ö¼c—lkÅ€v×Ë_ýGý»gïɾäTÖ–l{F¡®ö~vßwæ5ˆ-ªškh¡û¤ûîÝ%Î6ÿ+sþš•ùOÅi¦ŠEÍ3asý±»è‡:ßwø”§Ñ¸Ö.{7äKƒl:±µÿ„ö~•Û½V²½ÿ¢ÿÁë—6è‡{lÞæ¹¡¢ÝÃoÒb¥vn^g­•X4µ†²=8y.Öºklnô¿Â?ô–¿ôÍYìôî¾§K  `û¸}67ü+Òꞌlq®Öää1Öìc…E°Ø{Ǥë _NËÝõoU…¼–Ãw ˆgæ }{ê¯wæogü'óhîÅ41Îj Üãº!®k}þc}Dî¯s\=ÎqŠêvÀK} »o©ÿ³ÔúOg¨Š‘µõ¶ÀÖØÖ½î²>‹%Çgõ~ŸüRpÊ_6–°–úV“2ïh¯ýßô^šaˆâÀµ­ÖÖÇn$Hégù{Â\ÿø´vÕ†ÁVÿx.÷lk¡Ûœ©µµÎÙS}ž¥ÖèÄ­T¸mPµõ1,4Ï}ÓeŽÿJïú»?›Ú1ŸaÆ®`‡6¶ÀÚßéý+*díßþù¥ä‹h4âÐæ“¨u-kX'ô»ÇþE4Ýý„+‹‡‹U½î²×“M1ê[kÜÿgµÛ¶µ›ÿGöKô_¸’›ÕÔÚYö’÷’ rIŸç;]Ï窖¿ ;c_½¤9³&#{ê<ûÝýF!Ó™eu€i»Õ½–¹Œ’~ƒ6ÜÝÍ©¿›écÿÆ?ü"5y•¾êKb+ÜÐããíÛ¿ÿVZ–ÊHÏR·1à1¡ÃF˜ÚAÿsÇúêW°4€í¥ÀLˆ_-žÅc[§vÅkˆ?ºvÆOénÙýENë­^÷èm»I÷Æ÷ÖÖÿƒöïCÅL[eàÙéV].¶æ¹  =Ísv~{]í÷¨¹µÜ×°v¶²þìOÑöû½ž¥Ÿá?›V 500VK;déÎ'{¶ïÿ[šmö½íh©º–‡ ¤Æÿ£ùÿKóQ´"Å¢¬{6µÇm÷XÆ ´}ŒsÚç~¿èþŸö]“M4QmÆK½G€ÖëÖU»ô¬þÇÓÿ ô{™]Žw¦=M,phŸ¢÷;ÚÆ¹Þÿæ÷þçó‰ÙŒúÜaôÁ%΂?2¸²×Â5-«ÿÕ»NãíôÚ|@ýïL{œí¿ZD8ÙìnØ1/-ܦ~ƒÿ®¡ û[Àö˃ÅîeNnݾÿð_×HÃù‚ÈÛÛÞÿöë&.fïLâCÉ:Æ[»é;k›ìú67wéò³½ä»ìÆ*dlüß´¾ÏÒ5­ÜéUú?Ѩúy-hÈwµ¶ì4¹Áž×Y«·mgÐú(ÊɳÜw<“>â@>ÁX®›7Wÿ\÷þý¿˜‚Y ‹=A€Ó»lû ´4´û,c[úO¥úUXzŽcmè^KK`Ö±î«mŽÛüâ+1®ÈdX ­h.ùµ­ýïóÑ=ØÀwz\Ðk?J±îsœöÇæ!²šçÕ»^ì‹v’aµ‚~›}»•ìw²½ïÿ­©c‡ŠýFì­¯1X$¶vû »üÏr54Ø÷›Ç #o¨à"~¦ß{×ôžš8ŵÌÜ.s¦lÒøK=Ok˜•¥­[ª~ÒÒaK籟NªÜÏoúoôž¥¨6E²æ¼´   n»?3óÃ7üÊý:ÑŸCí¿s‰hp& “=-Ìݱÿ྇übk+ynË i!Ó»]Íg£ô˜ÆnþoóŸÎzˆ… qÌ5·{Æ5v{b¿ysG±î?Í»Ø=¿žžºjÇ/ºªÅZØ ×%žƒ`WéîÛ»ÒoÓO[*m~½7: HžN绿»ý?ÁmÙê"Uq68¹Þ×ß¼;ó¿9%0®§·iK4t8¥w¦=þ¯øeç¨K]°î ¤Þlÿ)3ò.¬¹–ÚZ"YèÎî}›¿5Õþ±ßú=%$ÄǬ‚èuvY%¡Áâ û=¾ë?¯þ•ÔÜq»/k¶°C†³³wæÿàŠ›ouÅÕ›ç7Qc™·p&w±»ÿ™©ZÇï»d9ÆCDéîhk½îÛü´©¨ß‘ç=Õ²¦Ì°µÅÎ pûgÙÿÿ£±ªs÷¼í?G´.“úgýc?êÐȱíÛ¨ØLÚÙoö½MÞïÜo¨Ô+7†Qk_é¸Gyµ­籞ïoò™é¤¤×]G«KªÈ-sì°“;­ˆ¦¦Hôïw©ôÿÑ)é8ú­‘ºXÂâY»èú{ÎÝÿÕÝìb'LÇ¢æÞmw¬"¶?l¹à›¶íÏÑ#g¢Šn£qs 5¤‚=§W{öþ‘Üý¨uÑ=ÿÖ#™cÜÐàà=G–‚k=ÖYêU ù¯ewÃ`!Ž³Ú êý¬~Ç¥ù–-]u·UQ§޵Ïk]fâÖIô~›žßÒ{ÿ×ÔAnÖ¿×wÚ/¼EÖ;ÜAlþ‰­s½•³÷?íÕ¯¥÷cÒÃeXâ–ZAhÓs}¾í›Yüßý»Z³Uµ×Xºë+clI°†—¼£îÝ»éÆ3ýõV¬!A¶ŠëpúRC\ïvë?œú?OfÿôèÑ…¦ÒXÇY6Oé)·†}sÛg¥êÿÖmHø+̓ìµÍ²ç20ÙµÂXí~Žá¦ÿ[ý©úz_Ö±©;-½Ìlî^Òáþ‚Zýµ×þƒ÷ýEAõ3!¥ãÕ47Þïq'óÞí×;Öwü/©gú/I†¹®s=&±²ç± ƒº#sšwÿ%¾ô´ê”øù-¾¿SX)sˆ¯Ö%›[ù­á¶*ïôuÿÂþ…eŸJ+kíy¼á÷~ÿîWéþú:ï¶Æòç]`ö†°HÚ;¹žíîÛÿê!µÍ¼¶ÁS»uOô÷-Ñüïò=?úÒ$7*x¥e- Ÿ¡ˆüýÎsíßþ Š®uØìc+h¦.°¹òZI Ûm‡ü#¾Ÿú?ø5=Ï{kdžL4;k罞͛+ýÌV×ÜÛ½Pò÷0‡nƒì±ŽõµÎÿÏi%}¾´Z\lÔ3Ó’ÚËGº^ž£Y³ú›ÿœ÷©ÔEmun~öíK€?Gß»ûiêÞY¼€C"°w£÷?×b›Žæ5a!Þá³sw¦í­nýŒÿɤ¥µ´‡Ý±€np ’~ úO³ù¿ýHª’ñy sÇçˆÛ>Úâ²=Ïw»b³`cXÜ I#ŸycÜãoõ`@´8²ÂI½Ï{C¢˜vÍÿ˳úžÄŒ±–5ÁŽtÍa'éô†£Û·ó7§{›¿yý+µÎ÷üªÚvîÿEè ¾ÊÚù¡Ó®ý­Üdý/øÝÞß§ëçÄV¹Ð\ÒçŽ\Ù†ë·é³ÚŠÙ‘Q.¬–0À!ÄCæÃ›ùîÙ·ów« ¯ÖXꮲË^vÜæ™+¦Ç{k«ý£÷ú—~‘±[ê-¥Ž3ùyk`j*¯oæÿ¤ÿJýŠuãz°×¼ÙÛsÉOçUµõWÎÖ~–;|¹šjè{[ôúW)F¿Mõí/.¹Æ‹ØàbAúGèíÿVŒ£¸ wôKXÿk?{üõ7]Xc†ZØpØÖ‰s¬»Óú~ç~ÿI$§ÿ׼뫾ÇÙEÂʘZÐcÚÙ÷nmú9ïÿƒþi&æVÐéx¬:lö‰sO¶óù¿éH©ÙMnp.¿ÒcI€C\&6îk,k›êíwýký*+\ïÎ×m.pÚÓíÚÙõ,úÿæÿÑÚ£ ½)ÈmŒ/ÞÒø!§t3]¾Ïγg·Ðý*©ÛK­ßé‘Ó!¤ 6²í¬u»Gé?óâ™fÒNóhÝícˆƒú&ØÁ¹¬wî3ÿ3C¤Ön´Ùì3E.`®çFÛÇ5ïužÝ¿¤ØIJn±•2·½¿DµÄ7Ùú'Øç»Û³ý¿è}Df䆴µ‡Cç8€‘ùÃôŸºßüøªPX²ºö±Öûˆ¦Æå;{­ºÿçXê¿í•c~%Ç4±­põ@y$Îp~óü¤‚?{lvç<\x{¿I0$~ƒÝM?Èw§ë¨z/vç>ÇRÆ€MgÚ k½÷]»wó¾¦GüR³c,¥¡‘þŽ· #ùÆ·ùñ¿ø"NÝ?im°uq% {¿Iù¯ß·s*ý#ÑSE~â÷KçcXæ¼—iu¬ú[›¶ÍŸÍþbŽçÔ>Îö1ò Fý+KÚÚßëþ‘+«s^IÛP2HÚ[ü­žÐ[K꿜RÆoµ†–iÉÝ·nòIhû­o礆wl²ºÙ]¥Í—OÒ'ÆÏJÇûßìþn¯çUG;-¯±¦ úS-$ýíc>—ò73Ø‹s½ÂÛM–©•€é.Ý»s¿×ü"L‹x!aöA$ë?š×YµßÚIL^-µ­:[k†âÐ ë§!ÎÿÑ{Wa®ÃApÑ;ZÙ~¤³upù»ÚÍÞÏü z¦kh¤Æ×] †´ÍtCþø¬2›©i¯Vê½®€ö¸5ÁÎæ¾Ý¿OÔIMj±ªp/{‹+¨°¥ÎúSnæíüïüùXZì¦ú6¸ÔÝÁÏ{Û#é×CkwªýŽþ~×{*ýü"¿}l{ÙEÎ 1…ÌÇÞæ¹Ÿ½c^ÁVô‚×·èU €ÂmŒ²¢ïKlýzV¥=×c‰sƒMŒüÑ>êÜ@kÝô?è'mÞ•{©ÚLÖ½®1QüæÕKêØ×·ù¿ÒWú?äz{ÆúET×\ Û¡¬6w~nç}+-³ý#¿KþL>Ìr=AêZA¶CœAú,õ?™uwøüú’‘×Uop»Ò{÷€[f×4ì˜È ­µÿ‚§ýsùÏщô ísÁ{œèÜðdêé»ùWÍN’âãHpõ ‚AÐnö}=ïú ú ÿ•OŬl`k§RÑ©‡C½¾ô-OÿÐ;g¨Úö¸9ül ý/hoÑsFíé(¡€äPÚë:›œKZF ~Ó½¿¹ì³þ2´F ¨sƒK¦_.ÜKò·Úˆ]L;R+q%Í8»þ©F½“]ô^בS@,-×C>Ö²M•ØïÞÚ¢1îk·X浜5¥ÂL–ÿ)û~Žßå¨;!ååìa´ ÜcÔoóŒô,Q{­±å›K Z^âé0Ù€tíßE¿éÿ‚™Ý™ˆËZ=;/¼ŽÚÇ–úd€öÚêØíµþs¿—]ÎV‹eUº·X_µó´=»>RÿR¿oýÇýÏøE]¶†m¦=:€0XèÇü%Ö8ú¾¶ïÝþkôIÜ=gXT@ü­ßAßðŸÎ%J¶ ËÆŒpØþZ^Ø Qßëÿ£‘•Euí¶ÍÒZàÙ sìs¶ì¹ÿöçèÕ²ëÔײ¶4ÎÒÖ0ðbï¢63kkM•W鼂±î‰ÛµºnþµŽEKeXÇ}µ’ .}#kˆy'{lúêÿ›g¦ëS[Sk¿F KË÷CcÜæÖê3Ôüß¡ÿ]Hþ‘òé! ’òfOivßRœÿÁ=ÿ£}ͱÀ˜,@ {~eN÷PïúŠ’R9µ¯&Û, ~¾ƒ]´?÷[{Zÿø/^ÏøË*ûKš,kk£BNÐg‘vÛú'}ðž§é€Êö7mU\ÇI$í·µˆ7,i5›^OˆkEc÷+oý¹ÿ¤¤Îg ¾MOh,nðæŽ7K¿HÇG§S?Eú5#‘uMk)¨TƇ8. sœý[³k¿®ª³ô‡]„ˆc L¸îí{v}:ýGÿÅ©·õ~à'sŽ÷;_ìÿ7ü–ÿÛ‰) BÁ»í;m-,kZæÕϨçìµ×#ÙoЭ3™ò×3ݼoÚàv4ö·fÇz·;Ü×½¨®{™/™/ »‘ôžûßÿA5u^KžÚÚœL±ÀŸPý/o¶¿øÏßIHMslµ¯±ÆEvý>‘snÖmö6¦1Xa¤Vê˜)ƒívðö’~ŽíÞ£v1ÞŸ§þÓ­Ök­tY¦ðãê‰ÿK§»ù>Æ º¦—†±äÜ'Úöè6û‰Û[›íÛô’RJ骗zuv™ŸÜhÿßѧ»âöº§:]?¢ c÷Ýô}ŸŸþ“ùj.Ǻ¦5Ô»~ù´¤hÍHu~ÆŸkÝÿŸ_c-¨Õ-¶€ö×eÖ9Ä7‘yíÙù¿à÷ÿRÔÿÿÙ8BIM!]Adobe PhotoshopAdobe Photoshop CC 20158BIMÿá &http://ns.adobe.com/xap/1.0/ ÿâ 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@ÿÛ„       ÿÀÿÝ@ÿÄ¢  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ŠšªºÊÚêúÿÚ ?;–;cõãŽE^³+»0åR(LjÛ0Ã=Ò‹Éî§¼•tù£·´øD‘Éj]ØîEdb(½•@ÛvÜäötê 2;›S{©Kgdï4ó·ú$lVŒÊªßÈ ‘ÿ/…r‰å»p¤6£¯G¨ßI{l²Írd0ÚÚ-ª¬QñTªìjIw+ì¹(Æ…"ì©Éy$Éiv0Z·\<’£rTñÜl#_¿Ù¬-亶iï®êkt‰RÑ#–#4n+#ÈÊ߃áãÍq'£4—òÓdQk;)‡MEWE©«ÈÜ…BF½úœ³`-ºU=Ķiú.¡k´@›ë¹âúÌ·2wÕ©ò¸;uñÃÒËL‡JÔnu¶·1"°?è×0iÚ2>%F‡>!êtìØ”L–I~°ýFXZì‰%x¤å‰Q¸ò ”WA -­²³þ’I¤fe‚ÕH4.‹É˜¨¢ªŽ»žUÜä7dv Vþ`¾Ò^«Rö;™SÁdèe†Þ5*+‘FS#XÿÝ|y7#L3ˆ;(;l”â›É–MI½meå>¤Ò·Ö€¤Âª{ïÄ‘Å{žØ ·Û› Ž•§ØL×?¥9ÝX­e¶¾¼oN?M~õ5"›Ö…¼r³g“3C~ŠMen‘]Z‚t—b¶ž…É›êêµâHÒ—™…E~ÈžF|›!ÎZõ¬zëËg£0S©Ž5uV«IÇ`܉v_·ñd¡³‘Li´¸-n‷­y8/£†ã š"@OÄHø”PþÏ&+–[/düëÚ®c%¶™b‘Þ¯¨/5;¡È `¡ŽÞ7`A©âASød*Ù“[ w¨ù¾ÍÒ]?Ë×^NBó–?ôi¥nŠ •f÷â:õl·jܵÕòNít_0ù“V–ëÎ÷FÎx­øZéš3E< $T ò9¨ýÝ8ª‚ßÚå•ôîÜwæµÃosm-óN&˜<‚J[I)£K"׃J…¥?dd¹±e7Qi³5ÑôÁ$m™¢´‰¤;(XŠNZ­ÛÃ#EÙRn‘W—w7²*i~œ‘IÊ[…vô^Znbª´éêTón]0ÅŒ»Ò=N=1Ñ'†Õ­ù;zü€+ÅO‘G«:Ôö¸A £e/Ѻ­âA ,gN’²ZC ~­ÊÄ„~ð; ÖŒÿÃl6ží:’ÆÞÉ]ÈVœï(GSÄË)b¬X÷ ¶Ý²"ØšA›‹ZêÚ)õ ë!šn4p¥@P¤„ «pøzá–Ãd­qêÝÇ íŒ©zDHly«*‚@¾*a›}s5³ÄÐ]½×(Õ@‰äw䪀J×s¹\#Í… ¥ŠùÖ+{)æ×—”¶ñ&, |LÄqTbh7ßâšj;©.ÀÔžH„œ@x¼k øB‘ñrfmÍå\IÛfA3µÐukÁê]KÒ Æ®ñ[ÈʽB3U–´û?löÈð§ú=ïÖ ¹¼½:wƧe+"ãà7e§ÙrÜ»qÛ šk!+›R¿Õî¥úƒ@ ¼V+X® UR£pÜMwfß&v@Ýqe­ÄŠ¼Ñ¦vå(@¦$1ü$µ„ŸßvDgÂñi·sXJ¨Ör¥´Jí+ÇÌñv€ù}‘‘ÙS 4†ç·Ôï!"~ *9–V*¼NôUY: :䈶§e¢i:te¡ˆmoKOq{’*ÛÛ‚Ä•–}ËJ[r£›°öŒ¤A³ðd=Ieü?£ˆ´yDñL¼TxÆìJ’C6ÁR¿NIÉ]£´Ë¯ªX]^éóˆîeŠinìeä’FʼÖPÌB” ^\~ÉR¼{äkvR0m&ÇÏ>`¼ú÷™–ËÌ^[¹,ÜuXœ¤6K•&ZD@Vâ¼·¢å’”@¡±e]o©ÛëMk{¥ê+ÌA‚TH£Q@R2°4åEn5l BŽí“žÈN^bžI#²ÕJ<‹ÉX_êüKP²€I©îNÛeß‘Öwkp’é—Þ¥!–{ÀcekuzAUŒjI­%ø·Èù¤Š÷?ÿÐ÷×W+1=Å” ÍÍ‘ˆÓíš)ðªí˜Íô§¥'Öx[$~µªúr^8c4¨ŸNÒdHQhWÒtmOP7ê_kѹÝHÿUøNÎT°Rõßâ«Sìà66¶a>»òÅ®›oo’²ÜÝOS~Y´—³;<ž“«2²/U#í/…2$²•rYªX‹[ iI^F^R3úf8â"ƒœŒy9Wüš}œ•–;%ö‘‚VKI®¢y”­µÍ¡g=9 Wì×§zvË {‹K»k—•§iÅÀçpK×r¬X|g½ø.Õ+²KmÿëvȾ¼gŠÛÆ$œrªB¸D G%lI´Òù..µ åÓ^Ùet§¯'¤,I^G”EùFüòb€k6Ôz½ÆŸzˆ·F]V‡‡aSSÄöi„Õ#r¾¹õ‹g¶M:(ïo£vg’†¡¡$Ö1QF!wÁAU­´=;$ºŽk›y.£iJÌ…,‹Ç°ôè:TüF¼»œ$–vè5Øôùáút&;W jí¹ýÑqZþ.?³€Àsd&ADkwž¡k$QÜú6ép Z¼+ T‘…=ëð1<)L¬î EúݽìvqÁo£˜X£qŒq@yl¡©ÐþVGaAA&×]aŸQ±ÔâÖ-ÙŒPÞM1žà0Uõ„`FxÔ§ñ"ññÈ tm¦Gå­8ú³YÌë ²z—71Èn®Óë ÁFysÛyH+ød'07jК†§'é­´(¢·ÓìC©­ÍÊ[ ¹kŹsöª# ]©_uÍxm‡yÆîîiŽ™k%½åëÅY´XMuèeõeGâ;D~Þ´ËñŽ¥„€#d»EÕõ¥ŠƒŠ¢9 k‚CÍqÆkÉÊð ÿ»å’®Ù<‘ÔtôáéñGËS¶áÍ!F ”ˆƒO‹©û<Šü9DãR¶ÈHð–=­kŸ\.ÖpÚYi±ÓÒ‚Ç—¦Œ§ãŽ@Ê¥œ6ò6ÿ¯|· ÆfÊ×V¹…έ©¨‰¤ˆPÔ0¥U€ÚƒðÉKvA.¶5µõ-Ö9…ºzI8ÛÖ1OV•ÐlÊ„(Ûgª(« JÞßÊQh^mOXI¤X'Œ¬o ‘¹×Ÿ!ÄG^*´8*å|“|!<ÒõÒ,îæÔ,ä·1ÂѸªYÀ%6ê¿kFÐI =¥ää[j퓲y‹Èæx+‰ ÛÜÓ ßdÒÒ!¬×:¤ïŒïÂãž8'‘¤BÊA$8Žìkü´ß·ä¢Ò4°ŸT¿7–úmú; µ iÈŸ‘äPÒ9åFaÐd¯§4Uy'º_–íü´¯2\²êÄ(²h¥a5!¥“šU¹0Û§]¹ÈKÕÍœgÃÉ.{(›S™.ßYLžš Rò*}5Æ¡©_Ûo¶Ü°‘ݲASë­kM²¸ô´hQ†tŽK‰LÍuÉ‘Ey`„r¨4dd 2‰Ú\/õ;mNçR¸T´„I§K"^Ä" ¼)ÀT5y|J‡ÜdÈ@ô„f›|5ÍHZ[K%ì¯I'Ô¤{‹Hªx@³[F8%hÁ/³É› Ç!á°ˆ,;\Ö.õ[Ùt>Ño4{)˜JÒ•†Úi—à+Ì£IÇâT ûƒñåÖq I•%šuÕôSÉkk$¯{%`.CUº’Žì)QÇeû[m’%ˆØ¦¶2]RƹÔVO¬M"ƳÜ(u4TN'‡BÈ/ÿÊÙZpºm¥¥¹ý >­¨ZËs<¿X•ýP$UJ;Ö1_‰Rœí‘ˆì¤Ý*†âòYî&²’YoI†Ô#Ú,Õ¢¯l™¥EÞèWR4Zk¨ zÄús)iPºêz°~ñm€Ýëh •ÍÀ†7Ó¾¦ ònFf¡PPÈ ˜»V:/M±µ¤úá§´…­µëXíu1Éh¾‹,tåÊr(«SNW®F'}¹&\’¹™nÈ»¸D’ÖØs?U)ÊF¯¤Ið¶û| ÚËm€ ‰¿±³õb’itÛÔšK¨ÒHäd BªÊ€¯€íÇ‘?k+ØŸrH4Å/¦”:©ÓîMÊ܇ ÉÞ±ò*E+ñ|YuµRèuxhö–áþ²¼VêGä Rû* õ û;–Ély±Ý4¶‡H¶·N ßR°ü|b CÈ´1°$}%ðeao¯\Å~tû=-ç»H½¹“Ó ÓwûµåÄ=*  eEVÚÒH%–K­Bõõ9$U¾µõE¼QPñ,P|AFà|ŸéÁ#ab4šÅ%´¤6)¿Dc'®D røZ„|[-‚­º=sV‚@“Û˧ÚÝ+z+ ·™n¡¡ýäêµÀösΘv¥«;.™Òæ×–®¦TýÏÖ~¡o$Lçá«P)¹â96XÈ%1¿¶Ñæ²Xô]5,.`ûOëõÊ­UH?³1¯Ãû#â9]f@l–>£a<–·Ebš ¢aê‰S—_ ‚?hlrq¤÷¯º¿’í–u‘ ±PÑZsd`ÛN :TÔÕ|X"E©"¦¶}VÞÞ-?Oý-ËcšyÇÁ:åÔ-Fÿi¸Œš@ÙäÝL’^Aa£Ùܬƒ¬7rÝ#!!dy!G'×Áö‰8ÆÀÝ2ܦºƒYÍv¦&}E84q„N!J¯Ä[Ó¥^*£öûåq2Fiz“ÙÜDü%Óø-µÇ=ÇïÇÙ^ä HOíd„·¤Hug/%”2%†$6wGš’GÍd`ƒÕxââX:•¯&c1¥­ƒ ¾æ<Ðii¨/êéqnÅQýœ•XÔÈ×$rFcÇÓb0§"»cK¯6fqáº@êvkefÐÛÄ+·ÁrÂOÄUJ“ÀïñV«™@®8•¤³Ä÷Ñú6×ÚY\7ˆ ºH.Ý8´±ª†0íØ2Ÿ²wÄ‘l„kÜÿÿÑ]ïK˜ÐK)´N~”S±UxÊׄgˆüë˜aÉ )½Æ¥8ŽÒ(í(â…}W{‡j õ$⣈ހ}­1 Lo¢õYà{;(‘=UJÆÔ« ŒñBX­x.çÈ “m¬´éSõŠM km6 /©µ @ÍýØüRžµáO‹"Fû&(åµý3g{©êWKusOôXâ”,H‘[Û¯.Ë]ÚB¼èÍá„liHÙ4Ç™ýInƒ*¢·§4fZlª¡OÃ_ðœ6ÖÜéw¾¬{1f©H è¬F§7;–d‰L@fùdè~YƒYv %Ô\­m#WK‰#&€šÕ‰ FýŸ·S˜ñÈ%/s2 6çI¿¶³Žêò6õ&‘×êJÎa†rXú%<ÂÌ¿Bݲþ-ØðòcÞaÓµ?-é¬êñ\N%Œ4PÇÈ¥ŠFž© @ÄU¼·|”Mš^Ey?YÖí¤·ŠûF–+k¸¸Á<_6˜¤’WŠ uãñ7FÂO›U.®ÓÜÛZ\Å7×deHl¡rÿº]ÔQ@øk»Ð|p³7ݨù~îIãkk±§BXýfwÌì(œ•GùDÉð•™æÐTfŸe¥ÞÜÅ~ Üh֊η³H`—š‘G*)!X6ëð°ö°\é‰á"ï4íráZk¹ Óu%"ZÜ5°RXFµ^ƒíYFéá’4±Ù;±ƒHŽîÊ;{·³´©ÑtE”²-˧/RP¬ƒˆ¥Xrs\¦\Twm`óÕ¾‘I©ÁëÙI-×û…â·™¦!—“Æç“)< ׎K6®õ³a-o;ÝùªÊê{%|¼5IÓNÓHæ’yÒ€7$!ÍŠ’[Ò\‰çt’m i£Ï –óй¿iŠ‹I•$–(­·ep )?²”¯Ù$Œ&wÉDJn—–é$7èɪÝÂÒϤrÇ m%6H¤äª¯7o…¨"¢`˜Ÿ$<ºfˆtǼ¼Šâk˜Ä­wp× ½ÍÀ: Ô^ADc§ìònY" $ $ùt­Å«[²Å'¤¢0õ†UóØ•><—©÷ˆM˜Ê+´Ý>ËM¾kÅ”Ò@W÷òV 1 ÆXôf¢¯L‘6Ã’‚é·òff¶ÒÁà(ÑGªäŽöñW‹^]±ºMÊÿBÜýDÅ%µ¬úlœC,hœOE_ã^U¯Å¶UÅѰ!,ôxäCoç VŽ%´Øã¸õmU$~Jí*¸*Æ¿»BJ c%|èîÀÓYý›¶K]Së‚Ûàåqo$Ï#~ÂÆÀ(%¨£’­?j¹X±Ãg]“?ÒVwŒ®äÚ\F¡ïâE¬r€kê¯o´r|;5™JŒÑùjäµÞ¥,ΰ7ÔÞ8¤žíÕØ´†Z­eÛ€ãñžøˆÉ‘;5¯ÞÞ×@²°…WEEt»³–â’'6"I˜0.ü~iÈ)¦""ÉaÄ*5 §Ò.–T¶Žúá@†’(·,ÒHHEÙv_£,k)vwms"*ËÖD‘FÓB·íݸrm©þý=öO³•ÈmÍȉêQ:l°iÃS½¹¥’`ÐÉ*R8ývøyHÚ |[bnÀc-Å©;iE>²÷ÂŽ8ÛÆäz¥Á¢íRjÌ@QöŸ%jm}ù®h±¶’Ö‰6§x‹.£k QÙ‹DXÂó¹ô@âƒ÷|¾ÇÃöŽFX£5„ŒK¸Õ^îâ}]%-ê-D±¯7ü*É*¹¦äð_îÇím–pI’ø<ͤYê'ËVr½î°ˆÍp¢6¸†.fŸ»FŸ.ž ?ìk„wè´½9·Õu{°–¶Wô„$±NvÊ),KÕCÈjÊ(™@;²(Þ; >îËS‚+[¸Â«\üE-Áø–Œ‘ññ6ßøäk“)Ùe¬ªô„ŠÕQZxä ¯*HhŒUy8w=‡ìÿ/\2@Ûe³MÕE½ÔF3"Ÿ«Eƒ1мx‚9pP*(íÿÙ7IB0°Ó[oFdxY­£v’Kˆ±*²9ª§ù<:„Fä“Ék{=ý½¼“]‰­Ý Awè¬>šÔ–øTò*NÜþÒþÖH)ôZIŽÑd¸³2#`¹cVÙw`>×û&À ”@BqnÞ­’Z\`²½ó*Æ‚”$âýéðäš9ªO–Yu‰M´·Â‹ ¶šJ1˜îáYHZª|JÌvñ8 #’l!¦]7K‘_M’ûô‹–Çx¥™"Mš7Ü IZPòaû+× ß¹@ ­6®š¢4"ÄÁ!#[Ä%0³Sáy$”j§¡¨*·T,—6בM“m 1Pò«——ššµ;)?´)’¤¤8Žâ ™¤ÕnbŸ‚i®+,J‡b#b½é¿¿$(°;$×z’ó›Y´VQ¬q bH”Ô; nH=Os‚«“`´{ù¾) –á¬Y=xøÚÊ‘:FªM¥Šú„Wl€ŠJsmæ„Òt¨äÖ'ŠÞEõJñçš­q I™OÑß"‚6PµÖõÍr[K=wIŽÛJvIdÓÙšÜKnêLp¦¨ UÙTòãðíËÆÆ–)´Ï¦¥´zF‘wo qoVñ? ‚GÄG+’½~-ò0‰æYNV[¿Ó,ímÅäz¼²Dv[ÇîY¥­@@Œ6%‰þl›ªÙ… ó tºÌÊfkˆ¢–¬öÐ,lW&§Á¿ù?i·Ä„ÝîÿÿÒ0¾ú…Õ¤Çë6ñ]¶–Gi ¯mÂ( - ×}†ar.Pv‘§H®îäŸID÷ÓÁÉ…£° !äBÔ|8 ù­!õŸ¨Í—W– ¨ÚÙ2ÃgáhR5e¯Ž§¨@,Ûýž!¹o‡uÑ0Þy~Â?®][‰ýXßê7u’WHЧZq©‡ÂÙ Él;r]a«Ü oNOUŒÃÔ–4…)µiÄ•-PGÂä÷`£&E–¾K¬oc½24!VâU¢ÁX’j¡š§®õ Ója!ˆ,ÇËh–×qêZÂ}bêâ6MتKqSÅ Lh>"æˆNW’ÈÙ”JÌZŒ:¦ Ú¶¨ÆúábŽæú*zm$Ë!¤AB„UK§û±º¶1‰­™uÝ…y‡Ï1éÒ<‘iðÜ\¬$‚áŒ2§!@K¿Â@> V8ãºÝ‡æØf½æíVGó\ÖÚ†€¥>©kªLÑ[E?CéˆÇu§&<¸ÐØsby3¨õ› 6] Ö}NV<7ÌP«ü"oN 5 ;.ÙQR¤“îGé6gT¸•t›”e™½9寧Çé€X²ËZü*´á¸øtÁÒAâæë¶¤†;iÒ=(sX=P»®äò?ë 㑉?DF,b¹Ž²E"*¤Œ-À(¨Ç“*[› ògÝk–‹äÕ-Êiªê:=•¥¢i 2c‹ p‘­E$¨¯C\1…VPvpši×<ÀÎ[PF}ÝA•ÒÕ§ÌD¢¡¦r8ò>§‰FQ#êÛ—Và6ßšZ®mF¡¨>”ÐÞ±Šå„¬·e…”žMJŠz/Ó„VÝÌåg“W~p¶–$Žæ8&0ÂeŒ8»†Zl:7\°@«*2_÷}Zâ;½CSº‚^«õX-¢òŠÕMIo´ä¯L®Q®M±=\jÖ‚ðÕRêê6 qgnНG誟Ý>/°£&€²Ãc°L`½•ïý-ÝãÓíéõ¦œ= HÜÚ;MJÔÒ­ÈÓsß*È#[¶c»TºÓ®~«,qÎa‰ªâÞ^rJÛ—^,£À¯JãŒ)„ågv4ââeú¼6’Kp q¹ EB‰U؈ҋÄ{åÇmÐäÜW7V>…Às»*¬1Ⱦ¯Æ>]÷ZW‘šÛêF66÷7J…é –^Š ™ZŸiŽÆ”èE2<Âj“É­$¸AÙ–! —h]‘’I ¨A'QUÝÓ+½öe¿U&¶Òíõ;Yb¼"ð2[½Ã‚!y‰`°¸}‚± V«ÇøWªÉô»ˆ/.’"YÒU´iâ‘^9'`wMOW€Zª-_ìár) ónîxt?DMyjüÝXL$ç•(„×ö:åà[D‰,XÁæ_0_M>¡¨¬–q†˜_NÃë×ÓHMBÅıWá­9·`2ˆòmæ%A ›G©ÏzÞ§–Úy"†åe¥Ag„/§§'88ÏE ™èÚœ.o.ê–×ZB´¶çKÔ=D—ÖP9þò-Ý$$*%KÂá›âS•ÄKpÛ¹ÙÚ­osõ+›U…cY”³*ÊGŒ$ª ¡ª«qËAÚ¹rUÒô[[ž{v¶Óïš •u) Š&ˆr!ŒÆ„R«A»òøwÌiݶÃÍ©ômfÚ»{ˆÃ1…Lr©†J #› :¿â~&FX211¢”êžZžÄÞ—‹Ö‰n&ecꪌ@o‹öÊ.íþNKÄ^V…ÓÏJÓnlí¬ ÚΠ8~•hÔh·!Œ…”(˜Lx·´ƒJÖ7sØ«Åc3¾Ê%ºU‰gd‘ÂÖ5@iSÓ“r§Å†˜ =­îµÅ{-/ëDˆÎÒÜȳ<1!å#ú1 ÉN­#žXòPY§ËÖ#¬FÖqVY®¡¥¼¨QxüR²9‚¯Ãü´Äì¼ÑPÙX¢LñþýÐU`$§§MÀ  Uߤ Õm—Gq™á’øºÌÚ{9XÜ[bƒ‘£lwû8 òd+›ÕnƒÍ-ä_Vže•ehÐÉR ¢+SíÚl1uA%»¨µø¬b¾¿Ñ­#Ud¸Žhæ( BÈaŒ¨â>×¾(ƒVÄÇkLt»½.H¦šh¿t,„Õ |@J •ÙOÙlŒJ]-ŒÑÛÏs¦Z40#—oR‘ÄÖ ÐÓöyvÉEeº®Ÿ™f‰ß˺0+'­ªÝ\CoséÀÌI5û[(OæX ,cPóZuí¶›æëyìoïyKÉ#õøÄ7a Í~N•æÙ:±³. &¼½—ž¯«ÞXéÑÌ?-Â=7h],²ÍaWj0ŽŸ/\‰;Pù§“.´Ö {ƒs£éV–Æá’ Èh½xÀæÌ´oHR•—èï”Æ= ºe9uiå­jþšé~¼ŽæØÈ­fуÁ¾-6eè9d¥:鳟´9//$´LRÖ3>¨"E&—â? £s¸¯Ã^'–Xe³)%¾Ÿc,¿áËù§i˜…¹µƒo‚œC«n[£c¾Kr7G¹÷Þ(”7ÒEÇêÌüÕ\\úŽÎIØU¿›$€ªšö§rÙÞËÎݨ±F’CP”õX ¾ˆà¤òŠúÞáãµ¶·)c—X†) `°p¾¥ ½}Î@Ë~iD· gs$OpH—ÔCrÃêäÃ31#zUA?gâ?[mB6…±°`åct«}§)‘Ò. áŠ#-¤Sw%8ž*7Èɶ ¦Úþ¡cyõ-3O’[i8ú,¢Žf*GîR5$(Q·!µä"nµe &³§ 焉$(²­·Ò—? {þÕ|7¦õÉðÛZý<×Kjú…¨É»¼º„ž‹›Xšg!BH¬)U K®ãož@Ž`¶È©Úµ½ýê"Ï¥y{H´ê¶÷.²±PX9œ’ª]ºÉ'>Gs‡p»´ ²Ð®"–[n%׮ṹi\µE,Tp½ÕË-€ç¿$Dê?Ãú Ö èàÜjw³,Q!#“ƒÎœ˜ø®ËÓ[*ãÚËgÁÿÓ’yyn,ì⼿ÒìÖÖþ`êî ÌÉèã£#qCûYƒ-Ü üÏy¤Ù‹:ÂóÓ6\dš-ÊOí³‘OJÑA<Žw­îÇOóO™¡Ó´Ûk´ÛZK-†©«Op¿èõýä‹ ó–f¢Sâß‹|)Ëm€^̇Iò Km¨Yëw-qªz« n %H Vû,Ñ×áaǯÅᕜG%áuêhÚMµÅ˜‰eÔ#˜‹›‰X‚À㣀ÊÕ©cñ/ÝõË´HÍO†úèHÖ°G3Æ×6ÒJ¾„.µ(0äbIbªvã_²¹ ÝP(KP½Òü¨×yV"—2ºIw¬¿n=HꂬIBvOË ®&³#È0Û5yoPn¥ó$wÍ'©sxÊéÈ(ÖÌ*®D GËhŽˆ¤†ËK†¡&£ªOÂÁ®™L7g¢€þì0#ûêL+±ÛíL©=ºÓô4é²Z¢AúÆVð”Å,†*ðäGAF Äídw‰óUšõ‚Û /…̈ÑÄÖÚãœ(~!w ¬Êò(¾#ýÙ¶r²ƒ[:ßóéòÝiÑiê÷>­¥Ø[H)$¦ŠyGQØÕv\°Ä5€O&Q/—õ+’ûÌ×Örë×—Q¢ZÙú’ÙÛ†Ž„Ù~9ÕD£áå˜g-‘\œˆ€ òKkaZŶ›rm§Œ=Ÿ¦«KÀ•䱓ÌL$¥6éß,“¹a0Ô“[Ô/“Wó%‘±³³‘JYÄ­q$Ìß ”M€ŸiËv>•ÀmÏš/P5ÄšÃ\K-Ò9ŸÑHÑ#†v$–bä³S ¢q,Õ2 ¶”öwr+ˆ‘®m?Òí.Y\;qBòu’‚µ}-Ó–ùQ‰êØ$ôIµ_)%αsuuY’ßýÝ!Ùå”r20æ RM$b>û äŒèMtËËEQ¦Úé‘ÇëR¡¬Š‚…]’Wa·üï͉èšDúNŠc½¶H-¯aW–+ø‘#¸­Ê˜äfâ„°n¨‡«|G…¢3R;›¿÷5½ýË”¹S2Ãm!…QÙ‡‡sOÞºY(ÀrL¥Õ%’þêð8+¶ÖäE$!Ú’ªÄ ñUþS×Ç-“P €è·¤Ka(øDÎ$b"¡¢3T«uR7=ò³*gH-7JµWúÅÊZ‰&”Ç”‘‘DBŒV}äRA寴ø8ò sJù9nnžÂ ‚Ê6Šz\-CÆ®IøøÖ»V¢¿ð9’ÕD²;]âÖÕ㺞Q=¯©us 1 ¢_F*©âiNF‚µ$ þHS6·:…Å´ú•µÔÂ%¬@žPñv©XÕBŽc£s5ùdø·¤UrOáÓ$Ô'‘éËÛ«ËŽi@1…”‚˜™Zü]ñã$h±§i¨ÂßXôî>¬±†hܸJÞŒGTþcö½±Ü°±ïJõ÷’ÊK‹[ƒ÷ó"ý^BÇ'ÕÊ«ú›T† NøE¢»í$á£YÊÔàZI¹Lì 8гõßÅpØ ºµ—˜§D¿´æá'8+vUÙhê`âqN?Þÿ6K„;„ª[™ 9šîkÙ7¸¿•ÌÌõ;¬8Ñ{b6MZ.ÊòÚâÂKwæöëÅ'¸Ì¢ªª±,yU›ùyd%f,y'6úºX$1ÈË.¢Ñ’öÑDÆ’7!Î@Hv)¯ÙÃLI(-nçë7¦kñÎÄpDµ£¬åãÑ€jðo·ÑU¯5ȵÐI¤o%ÔºµÓÔËoÈP(b>Û}”¢„N9Q ù6óFYjãIy£²†©$…în§Võ–FbyH%$Ñ áò¯óWmÐd- Ÿ˜RY_…µÕÃ/Pgã+78𒦼ÅjI¯N™=àÐ.º[Ó­c¸6FëB¶FÅ:Ç2¨R9¢¹UX«û$ú‡‡–ØãœI=ë8æÅGÉ«Kq¸-ÙÈýÅœ, #© ÜÑZ@£rÃ\¼–¨Æ“ $hE­e‡MµX¤ŸVŒú·DÛ-=(Z2!n”«ü4åÇ &K2'êÓjÉ ‹ð!´™‚“T’„“Ê ³xï€Il5™£ŽX‹[é‚3é5ċ魨ÜíÐT•åDF-ËŽôãL‘îXÇumWÉg›í]„·šªÆ°-å«”Š9#TG*.̱±æH‡*}œ‘ }ê^SÒ­<½m¥èVq&¦\þœÔT\ß„mäwrçÒ¯ïSÓã^˜27/ìl”¨lKy{}mHâÔ窰­B'pk×Û&% òH í}¨5ü· éLvñ§ª¦8ÂÖ”R›)Ùß%T+¢“ÞŒ‚=B+¡,7b^V„vÈ\qWyjÈw (~|‰"™R3OÔRúý´‹WkÙb%±…c„ÝÝ— ÿlõðÈÈÓ8îšišŒpž7Vo|¬R(aú“Fá‡Eø—!XŠ~Î"n˜Ìí·4Ê5 £:H#G×½Šx_à„V”ñ–5åVë‚UÍErI¯[\y~ìI£ÜÛ¦™«…’Á¡7±$¡ŒM­é‰#UNM!j ¨TÊa4\‰J‵Šå‚¾¢Å¯Ýœ˜íC½Ÿ(~ÑÝw l vëÃ28œ~—WR4r:”F[^>©±„`6sZöiV>9\çCfpˆLÖÉí­mäÒ/ Au‰ †Ü*ȼkñ“@wãö›v䣟:GØIcibWV!æGYg’YƒÉªÑ„u!x«QTr«³qÊåêÙ1Û’/Ux¾¬Ïsu¶¡a–±Ú[Ưn¶QYy…?x§âåö_¦WD{ƒgù¡mm®´¦V¶ŽxäIÆÍ*úž—sð–ã*¹ œƒ}œ¤O5$Äy%sJ f–ÖHî]K@[êê$f8ËP…û%‰ã·LË3nÑ^ॠêЄ†ð›0¥îZíV*‰8ž0ÿvíN­†ÇÍkìPƒUÖÁ6ñÞAo§¹!P31T*;¿í3~×|;ÄÄ‘Íf·%Æh_U½ãdü¡K%!od2R…·êäÓo‹ý\˜Ü ù#­<¿¥y{L‚æpãP½Q+½ég¸b¤Q=6bcˆ×ì¹<¨Ÿ2€e#äÌjO§\–ŒÂ~®O¤ÖóJÖ‘3°É* 8öÉð03¤±£jÛϧI#¯¤LD,ŽÖð|>˜j)R§à …ãû8„vêʬ%––3„Cw2KvMmØ $Ð)˜·^«áÓ%Ä g˜ÝéÓZÇe‚ò6C2µ’I ŠªhG9 ToïûGE;ÐÐßÝ*:ÜÙ›Iî¡Q BD¸OM¾Ó< 7¶ËOˆü8m Všt¾bilô[ ¯R&Vº¼7"{TªúJT‚ï; êFG„Ùm$½RÓ÷ó\"£¨…¢SÃÒ]½FV¨§ÃÒ¿ð¹+,LQ¶BÚ9#ý+‰ÝÄ?Xwqö*¡Þœ}—á.Ó`„ÞÒyD²Ë"´fêŠâЩ{s#LöêŸ|)A±ã½r¹ ­ î…¾mIEÂßý\ \É¥IØñuõCtE¼NÏEûY0A *Š­Ä’O4G+Ü·ÃÉûÉåSãW$ÕK4þl4@MŠ'R²»±Š(.í’6‘‡Õ„Š@™ö¯ˆ£q Éä%i°ÁtƒR MîÌúd_Ak n®d~)*•u…GªOÏãÄPæ›%3ý3ÿU›^Ž Fæ¦ê Ëiƒ§(£*¨¼kM—‡ãðÁ7L¸ˆ ÒX¼r^_ÊÒ ™"¨x#–Bƒ°ê[—Ã@:ä³A+ï3ÞÙÞ.›b`žòx>­+a/ÕLœ‚0±S÷äÄE[ЗÑk÷W$sÜÛÚFÉÖ¾’ʉ<‹ÏÒ’CV,EEøUOþ-rǧ­¸¾óìQiÒ³”¬2I0!š(âBÄÊÆC7;6U.à!¯|Å6©}5äê}FYÙIéúÆ :B¢¤¶Ëñ·˜lÆìÚË‹»«•í ´°ã«]2:ÔÆ(ß»bO&¨áUøGL Rš*ñY­ä ÓÍúJòÝbÚÉâÐñ»•Œòû5ãÉva€Û4,ò^LòiWœ¡¹•L®Ê`X"SY¤!+Ä*ü*½NY`5ºG%ÜI êÂÓO³RÒˆ!†æ{‰:7ÖÿuÜOÃÛ|–õºŠd:N©=Ï;ã H¤Éní*É/¦GÄ܇#~, òÀ|½ÂXÝEoé\Gä4’ ã Un#ƒ©§&f´ßÛ³³Ñ‚"ík$—ºÁn\†dôÖ¥ßz(ðE{šäyòäÌš [ùšÿOY­t[¸ï®ï%oRÊ94Ž$OM Yˆr/Ù©ÉJ óè ì„Ó4Q2Au®EÒÙ„·ä½û%ÝNhUNÿxŽÙ K}™Õ›évVÐÏqªD?D}k{¨j©^(êÆëצVA<™[¡ç¹€¼VѼðÊkgm!t!sP^øT59?e~y òE«ÚD¬šåÄ–×$zž‚ÂꈅOÀH§ÇöIQöƒ|M‘ žL®‘’.³n¶/u¥Ù¥‹À&·²Cê5Âe›‰=WpŸ xñÊÁŦ‚c¬]Ï+:ÛÄ€ÂÕ­Lr) €ŠÜÉû&™f8ж©é"ÕŒZ(H/^ÞÆÎÒUsu`—i7;ñ¡§L”@’™W7ÿÕ“ØýZå"¸ÔlÖuƒ´7&7Š6û ¿ÅPOE³ºæ!Ù¶Ë4²Ò,=¾½è¸”ú’Oýê£7ÙhûíM«ú²‰Û8ÐbÚ¿”¯¦žé¤hF›V·¸¸Vº¨`Ì©T¯Úpßk Ðf ^ú"—½’BlÊ€ÑÁÎÓœ¬¨FäÈý•¯ÅþNØ "9º_.ù#õl®-Uk5ÉfYÖ òAAPÔ¨¨ý¬˜kªæ‰}?Nk8tZK“$WFt’Wk‡¹BÝ>. ‹’Ôíö²7Õš…î„¡P¶H/­eo†$—˜@ODäü)±=~Éß‘¤íuÕ5žIý6{x#W•îJA¦R!Ò„ý…Tÿ.6Ä‹uÞ¡©Km žˆÓ&ž2õfFP„íÊP8“JPöY!KKlô¸o£kï0Z‹ùìÐOðC8™OÁT¾Å>/å®'ËdÐ/ºÒ£Ô­Ä±—¶U„Mé$iÈnüH¦ä=yb6 ̪G¥ØÙJîGh¨·q|}“P[™¨ê´È›æ9²¿’Ëé´ÛWH¦’9íbŠÈ•ŽÇœ”¡!kÒ«\œnš‰Æ¡±¶[©õõA=Õºú)úqC Œ@y–11û[òz|9)é˜) MO_‰l4( r\8„^j Ð[q ÀLH•JTPnØ.·)®öE™¤yoN}*MJKË›i]5K…¶n¤åRá‰B‘±à¨¡[¡®cqJFËup½>Ÿ{°~µäjȲJQ€Š/P!â¤VI j&_¸èÒwæ’[yëÏrð°¼HÛL¶ mÿI±—‹q(ŠªX_]G|´ˆó` Îíýk…†_0]Å#¹ŽÞ£eâþ”d°C½h Æ—-›b(¯¶Òfº’8ôßB(]Ú³J¤B¥G!d5Zÿ—#@ ,앚²Kl ¶{peg6ÑÅm’”¨$LòzaT°6j×ìñïšÝtwL¾¥õiýMVYâ2Bª2·Gª9q Úâ\™¶j•}b&‰x¡H!™¤Xø†xµU•–”UTÇÃmÓ9Ù U,5[»[¸šÒÖ3H%Õ%š“I6ß»Eðõ¤©ql.펠DeI’ÈL}$n> ’  ø/ó._[&¾þæïõ‹[h&—HŽôù½{t¨¸ 5!‰$HMW~§ýx«èú”zPk+I-®#“É%Á¢‡øyF±”©Þ›ìß,7ճީ%Ž8¤žK+ŠÜΚæ+q$0£Tújä¬À|@rø=°ì¹Mý¯) zrB‘ä°W¤qUäÕ!GJòø²;„ìœj×Û›}#ʶ~¤WŠ.-dÚîH QÁŒ”¨YK,[íl~Žüäšc×Úí¾¦,ôý:8d³´×: å9ê"Kjò-ýÛU½1ñ7ÚÂn¦¹*úwPC§[ÚR2x¾“¡ŒÊÄì <ƒ)éü4ËG›Qµ5¼±»˜ÍªÜ\\^3ýfV’E…¢œí²Š)ìrØlÎ"ú«ýn{(ÑoC«ÊÉ3Ko$‹nvyR›Ÿ…{ý¦ÆûöP ¾‰ln¥¼´IžUôgÑ$mT—2«+°$ާ‘ù|88{—Þß]ëÚ¢5–µ–“;ŽR"JbQngXXhO3SJÓ$"³Í2–Û'wzw•ü«¨Yè±Íªj̳ÞëÚŠ„•¥E+ð­0p'yd8%)Ùä:-‚)Ûêz˜-LâÛÑc>¤?ºº“í+©¨,Iìy °€K ¤£r/^ãéÀ¡bÒi7­ „Þz‘±hìP;BXP<ÒFî½1&ÙVËZãQÔ%–ÊáKÛÄU®.§â"@ vp*j~Ê©ÿ[& Ey}sc(^L°KûµuaµX Û É7ÝZÏXŽöEk¶³ÝZîY$šØÊ»zJQˆ•ÚªÏûC!É‘MôÛK9¾°5+w‚íkgôý c`8Œf~ÉeßâÁÍ Ó&²Õ4í2Êßô/¬Øú24k™£[H¶º›ZÞ³¼fÓIŽS<‘Ê¡øÃ, †A^'žSË)ÈÙåæÞvÙ†ÙyOÍGSž­ºâi³Äe±"‡1«ñY¨U=O‡—Âr~(`§êwGÏ­Z6¤¶ éÉu4RÆ–ä¼]HøBøä^»í—bÏÉ£­Ù5»K9 ­Þœ&¸ŽEŽKµ^M;Ÿ‡ªq­àäDÅ;ª<ðX2ÞjQˆmË1­X,éÑ$Px ·©ÆŸ vɈß&²OR†¼×žE­ ƒPõø„ú· I 4^[Õš…¨w^Þ*7E²¤7 ¹â·õV#áË”Q¢j?•Iñ8ÑA䯧Ô<½¨]´šÍäðÙÆæHá cŽgýƒ]¹ܯ,¶¥[0¹µ,—z£ÛÚÚÍv|Õç0´’L@<‹Ô±4ÜõÄì –EiíôU²Hm­HUå$MÎ`Ê“*š²Ô+ŸÃ•xb¬²â?³Éu¯^ð†?­Kipñ_K»\YG,¬ÄH$‰Pçj1À“¨º‚ÝPºHla™G$ä)-ÍÜÔª€=×¹ù6ÆÀ#ªN º´¹–Ky8¢Aõ¥qÎf@h6bU ïJûqËÁ¾n?sL· q ¼’+hã+rFüäp~ Ó©j.í^Ÿ<…“°m Êkë5¬ö·w·†7€“XX"ɪ~9ý1ÎU©P~ÿµ‘0Ɉ‘µxnGÔ&imÂÛDþ¡¾*¯3±Ýcy…«×’…U|0»ŽH«£3)YÒêùbKÄžHŠE(FܘT°PI&Ò™®ä¸2‰¢e‘øªÇi $2Êϱ©Üñ ·í6J€Fè8µk›0ÜÀÌÓUa·‰•ë*ÎA(„lÔ,Ŧºm;¡}‡\ ,¨ÖðT°‰*ÃÐ>.À2©b ÿ+¹XØžm¤r´$ö÷ÚmÁ‚äfš‘!¹O^xíê;G·)Ô+–O6ÎÊϧÁ¨/Ö,BØ@8-§Öac<“€‚M¡›á´pWšj÷P¿Ô£òÜ–‘Ý(´Ô® f1¬…Ï`Çf©=)–a§tÊÞéoa2ê ¶‰Œ¦7æ¯#.àÉÇn$Ó)îi‘­öf ¥š<“XÉ_žBê*1YèôÖ´iO„|'"AQD/Š nY#ÿGúÊ0‘ý8Ù@Þ€6ÔZe•³-ÑP]j÷2Å‚ŒHò(ÌeVØ©â¤"/Ú&¾@S0mF V6´¾‚(aÒ, Ùe ÜÛ”KÄ2DÄбû;Q°³O´}NÓì›XÕå-©3†µ·ôD]’N@0y‡ÂVe½­­GS¹¹·šææÆÝVÖöÝ ¼G#Ô·cį,Ô,TlêÛpÕ¨®Œ?JòÏ•ôÍ&1h¶ÓiÑßF÷V4ŠöÓÚ£]¾®À˜ÉpJP¬»ì§ §+¢Ï…yw£ d¾½Õúäi¢’# FG%¡§!û+*…û'àý¼œo“\‚jú¤‰qm?Õ¬ßàƒ‡8Zrµ '9 eAÐP|M“1(\~aò‹ZÝZé—hu'â¶6L÷S¼¼ZzÎjäE*Bü_G†@¦ÉªYk7k¡e{=­°!–&æ/»ŸUŒ·ó‡d_‰‹6HލéIók—Úv ±êúMþ“¦½¬PÄT‘®%£zR%xÅ 4VeøÀ§mò°º6TíîIuëØ§»Ž?­=æ™jPÇ*“t¾’¿;ü™8Ýo͉ʆ}bê±$±¬P…>”Q¬BIåryHî ^” ªvÁt¤²ãëÖVߦ5Å” äRr¿XPÈ(ø¥`>qæY¶É…ž«&›c'é8g¹¹»q$:jÈ"‚a·SBbˆvqñ9ø|r$n‘ä™Ãhš…þ©<×÷ñ. @gŽsË„H‚´y>Ò®íɰÞô¤l…ý’HóÜ3H]á¸U.”AðSz× –¾I Ή*M+_HyÜÔÉ«„HŽÁB€'ávɘ³yü³—ü»mu?Òw1¶Ó(‰"x z0*Õ!ˆý³JŒÇ†N){™ÈPawz奬7($½•œ4IC 3š–¨&±ªÓ‹Ÿ´Ýrþ+cÂçš´kÿ(éWÔa7Op«éá-Ä’Ùƒ ÍÕwãO”O¤ƒÒ|ݭ餦sw`Áž", ¨p•ìGï’á…3‹O1Úêim š[YÊÌ)î 8RÏq#+§ØY¢´¹A;¢¬|ש}õ-/Ó·ÖÔñšù–;¤¶XŒä ãJTŸé„˜ðÕ%W×ÚqºI¸Eu,蚬s)ß~^‡nnÇ}Ç’Õõ ~ýt›H¯'Óc =ÛÛ2 •!R^gdAË¡)ñ²­•í°‰zŽl÷— ªÇ¥ÛYZYD[C°2Ò(‡÷©Ù€ãE¯AñÌIš|ÛƒóŸÛNx­'ˆë—Zq’âE †v+D£¬Æ2´ë–«¡a!fÂ[yç½wYÑ.îüÃ`t„Ôeº}žœËÈc¢‰Ü”9;²˜Ç‰ÛzI6a²‹ÊÆéäMjúæ6‹Nš/UR(êÈX5ddåEQöëÉ©.KTÿ×A}p4cÎöÂȘ¬^R† 'ÛoêmÒ‰µ+ ;R°·{iâ‚OX¡²žF^zHd-öþÔk]©ðä%VÙÇF“ß.Øiv¶W>£[‘˜¡šDFK»†`x°URÀ³±?kítb2 šLÎà*É<ÑßM=Ϳ詣wŠ i¥[¹ÞÀýóp⃹j|(½NZ9ßFƒÜ§­$— ñ[#D¡š×QšAè3“N&0’wû ûr¦HÅcA/¹óDK-Æ“nn™àŒ'«ê™=F#ZÁ¯Ÿ½6Œqmg“33{1åŸ0i¾cÒ¥¼’êµF—Ó{}I®ì¢µSÁI欢âI÷ax*òøé‡€ ™ÎGšigOTŽ+K‹³ÊFibb= Z¿¼ô€ ãj¿Vú1,l$ú–«}ce%ÅŒ =ÄŠ¿Uô[·üA•'ˆ-†Ù.lA<’ =uMaMܯi áÈ„Dé, еøƒS`Õýß_°š !º>x!•b¹‘V Å_«CvјäšIJ‰$ ‡²±û!¸íÓ#Í6kd³P—Ì­Ï–´«b|É…º´¸oF;Uû4ºvb¡düTýœ64pí»w¾Jò¾–-,õ«—½¾½ܱ¹ p´,‚¨Ž z…r"R,½Ë-¿/býö£b“ÙÎ*ŠÈÜèòÍ:°_µ‡Œ­tþCÒ-´6kMVK]Ne¬µ&™Q¤‚D ë8ëÃe(§®SãÜ7XdtO£ùsOÔ'¼:”–°ú·Òŵ_Q˜¹Y uJQ¨Tü\IÈHÙòQ˨O®àÓ¼ÍZŨ>‡c,fq"$$É+ŽP*³ŽInÇ“37Úo’à7|Ø‚Ì14{m0IrÒ˜ZPêÕTq ЬÈ(èÝ}BªhiÇ,9;׆ÎÍhqù[PŠ}sL…/. ÂÛKq"¤~¤ÐÕ`héF_Ù›‹rý®¹ etTì˜Û[ÙßNÇOÓÝ­¢oUÌ'’òŒìf j§çüÙ3ɨsGD“êJštwªÞ)vK KÊЯ~4R8Òµm²²i”m/cq<MŽÐÄiÊ(ä ?îÁ21z‰Ü­vÉ æŠßtŠMfâÒâkWýI ú³+#F"«ÄʤþÆÍþÇldú>¥q žªiŸXÔ&ýÕµÔÈ.í†e^GÐ#¿Ó€€y£qÉk¬_YÝ%åéK[ íe ½³©˜K²ü)CÊ:ü%™¿àW Ø m¿ãÞ˜K®Éiõˆïì_R¸Ž@¯ahés:É Ø*òŽ£—ÅUýœ`u ô›‹íJÝîmìí´Äidi5 ²]Mð"v„}‰§Å•È êR, Óï,hWÂäjZ½Í³E¼¶‘Ñ/8±2抳yFª(£+Ë+e[÷¤JÐ\]5¨—PÓ§–ÛÂ!heaV•꬀Ë…jª¬ù|NÔv+(‚l&¦ÅRÜ¥ÝÄ÷VM(XW #Wˆ24POb܆ܰµ¤llrp[û»¾¥¿¶²FI†aVX«ñ2‘»Wìî¹ ›8‚BKg Yk¢O¨©Ô åõIg’òAâsÏŸ&û`=hW¦ ²ÛÍ–0Ùe擈ÐrÂ$Ótɽ­Ö=X9«¡€¡—ñE?dàxã²Ìp•D¹²¾ÒÇ¡ Q#–•gJ…fRWŠH@=Ïá“à Û_I"†!l5. õ••¾¯,ÑSì©y˜+úž P½Ù0M£’*9eÒâ“…ØKA.#3MÅ—¡V*¨Ÿ´Bõ¯Å‘ê˦ÈÍ6¯>¬~¯pÃQŠ2¼„±zÈb|ܲfA‘&µh¯0Om;Úú„—•š6Š;˜¸Ô’6 O«Ze\=YßzY®jÆÖÚ¯î¡çr…mg7‡š´kë…R}$,[o†Ÿ9tEìuCÜ6‹úNÑ,uÞ[vúç©Å®Ñ-#DÔš¬ùLÙD­¸]*kúmÔÈëåéä¼äho¹1™c»²ª@cåðq%¤åׂñÆ2#É'Ɇßy~{ ùlnôè[SuG’x§¶HÈ¢¡+ñ)Ô)âµï—ÆW¸äÕ!HÛk[¨Å­´:dL¬¦ê;f†—.YO¦Q€ªôø[o‡ÛÅ*J¶r™ZÞOIPzq©.ñ†5+êÔw#B2ò(ï­ÌÚ”É5ƒ*«ðbѨäÉ!,½ö=냒õ[4z[ÙúV²¤ÖèßT·ÊcU?h VGTZõPcÕQZN—¦ßZ’k½*K!<¡ÉöV8•š¬ *Ƥ~ÎDŸš¨jâ’]FçM[¶GYþ’E›‚FzQªBÈ>&e ðÃ䣪êèÚlt,’už'’ÖåQžçà4<êÌŽˆÄ­|2[-iª]$ ¾³ÊàË'¨bTVãR6©Û‡©å“¦¾\—é×±Þ†(†iÇöã¼Àãñ=Oöa"˜‚Í<¥6a|—SÄ.5»¸Xé–Ò…»)$]fxО(ª>Ý[özåYwêÎ$Ò ^Ô#¹Ô$Ô5kÝF8âšò¡ñÜ]†eSSN>š‘D_©ño’»ÁüÉçË6IZÒÚt!ôdK”)ĶÌ ³1u_£'`Öìx¹Ûò¶…«y‹^ý9æ‰æÔô+zKmjËõ˜Zä ªÐ‚¥Ží¶K$ÄFÜÙÂ6Ëõo.,QsÓõ[›ïB'–õÿ¸ ¸âª~&v @]…i\¢wÝ”¡ÜLJ•ZÞc¡kÙ%ãÔïd·®b4„¢…Ä¿´ÔfGxj¢&ãÈþ]žÊ+Yô[™ÚxÄòj÷’-½ÅÂBñô©ÁZŸ½8dDåwlÈ µ‡•ô ˜èÖ6¢n¦Y..‹r•"ˆ—DäEòÝ~Àg"Æ™^›¤Þ%´º†«f¶VS¨¶¶W†;šHÀaQŠ1³¤ÚJ.tá3ê.P5Ò$+ h„Uý„;±?®"'«´«WÖ5çº/m;[JÍêß\,*Vâ&ý’I,¼ö; qéñ`]ií´š´úîªÐNžÔr¸m³*†‘ö†û6L’¡n©¡Ùê¾›G{wkmf‘\:ˆÝ‹0¨d :Ž¾Íˆ‘ }Ìq<¡(±keÕ%—QfÜjMRn´ôÚ:ž«ð—¨%zä„sa!œ¥üzMšÛ·Õ-¨ ÛK ¬jÑ SŠ—aMò¡ 팦z”†ßQó˜d:ý³M§éI#EnñͽIJ¯ÙrÏþêÚ«ñÿ«“‘Doš6ÒÂþïÔ‹XÔ]d‰Œ“È C"8ÝÙÕyû#ý—¶l PAêaR&–çÚÞMÏl³!¢ð5"§·C/zP|ke j6zÆ©©R~w±zéjØꣀÆ6ª#AN?´Nž‹@“+)§°©[Û­­­YáúÌ­-IJ>îÓ8øæ‰ûr±Oz*Ó›{kˆQ¯®JÊ‘m)bÅÏìQk¾ÿ´¹¶7Ü¥c¬Y¬Íma#]ˆh÷m3/îYÇ÷ ¡ö+¹ppž¬xdM¬¥Ýå»\Úª®éÄ‚…ƒ/(އ+0‘ÚW©él!WV-oýéY~Ün‘žu7'¯DçÕ‹`ŽÛíˆÙ»<çíã ¦©¥³±É+¿ÇHÌ´'}ȧÖ ÃLŽé¦•壋—„ %$7gdéR]Ô'.[·O9 Œ©JtƒO/m¢Y­ÕÓÃ$V–HâÞ(Þg2K,´T–f<Éû4ÈF&¹¶N@ÉÞ¤3XÜ´*ѦF#0EB¨QaM¤,~ÃÆŸdã2 0”Aë_SJ‚ãQ¿š;T»j¼™Zw…ŒYU¹€Iøwâ}°×Á‰ÙTØ‹Û$rMm?£¨œ„Îʼn »ƒS°úr Á)V¡å› cõW:eÌ$FèÉèÆ¤ÐЀÀ”"…Eû?<Âlr,vKxg·+¤2GÄzr< -år †n ’ÀWÔß§&Ëx©…^Ên ŠM©3Ü'Õ6‘¥Ú'ÄÈ[ŠÈ©fS»7ø²\ØÑè›iF²ô£¶)H— ±»G¨àª§i&bOA‘ žiâÙ©êÒ[NÙÃY»´4 I<ÒÍÖ‡¦š©O ŒÍNèÛO0[\ÚEf…ªªcpüÈÝy=CW©ýœLO5ßdöööÙ,&¸x³ø…¥Š0’ ãTq5‘Ì”Óìä!ŽÊÊd‚W…£šñŽÊ¬O*lòu"!²P¾–Zŧ[­?K†Õe6¶Ì}Ckm)Y˜7™c 30ÜþÇol‰½w>dÖ¯mã²²¬´˜ ‰e´tÕ-8•MtªŸõ·ÉðÆ&ú–½ÎÖ•ù£Hº×¬e–ÎíïµHHí®¥ôm™!xRŒž¡©æ»?íS"='–Ì£»ŸËzÆmå½[QŽm^ö8äK§ÛÖœžJ,‹kÊ1Oå ’AÜÎpá(ølînCÔ`¾±¶¨wWsqÑT¨]+„æƒE’Þ6õxZ½ÈÚÖVfw©ˆQ¸ïûuv`FÛ&s=µ½¬°ê+-ÍÍÊ‚lJÌ”¦Ì•ûköhkûX*ù­£m®-!–âÃAçh#QëúMêªÁ™™‰‡âßìò®Vc\Û=ZÑ¡²“P¹»†KëHâ,’j““Ìë²Ä¡¹´J•ûaJªü'ù2!´1Ã¥iúœV¶ ¨jÀÙA©i¶¬ÑÉFFæ·¾Ÿ7,Å™—án…ŒâK>[&ú\÷&XôÉ$ŸÕ’í’/Q&p‘ j°fì®tÊ ÛÓ´íF½¹úͤÒK3:¨I¥2«c.Y¨äšügŠ…aË$O@óI¦šÃ\Ômšâ(ã–Ô·>´P‡J“4δfbi·ÙO„6Ùep†<Ð×þ^ÕµúAúΛ§"OvL)q;9”@6ÈJ•‘Ÿ4˜”U¶‘­éê_QšK±›ã #‰‹Pñ 5ßbi“â„¢ŒŒÛètdµ #G {xžJ'R]jÀ¨¡ÈÙPRÕu7êRZÛ]H.# $ÑÆ„‘,›9› ¡¢Ž¹ ù”´éט,!·½š ÄËk¨ÎîXl”žqúQÈ8Ï+Ó“QWï_¦@šå½¶'žZòžƒ}¦Ý‡¼ý94Ó¬v—qÕaû<ÄÑ«-j ò;|tnДÍÝRhKùl4›{: >7+7;«™Ai KOI#B­E‡ã5O²2Á»Gh6bæàKwvÓϺ¶¸¸ˆ—•P,1ÀšrwçÁG\„ùPHÙ¬ë:g—!¹ÿ Äšu¼²¤·º€’1w=ÂÄOI¨HU_‡Ç-Œ9»Q‘; qç_%Íbmbsz¬%¸Å$zÁg§ÛR _ù –Cö²Þލ} ˺½ü—ÇŒn×. 7œÌ0)pª†€òdSWe­MwÊå00-ž7PÒ§Ä9¢XÖ¢).¤b4‰w*¼¨?Ý«ðñÌRx›À¥'Šâ[$–µ œ¡ã#ËÎx®Sã@­Ä“Ä­9?EÈ‚-™¶=ª«y~“\[5ãLÀ‹TA%X|!$XI ÛãØpÌÈîã¯eQ¥ï×gˆÈ`·ž°ZÊF”»¡yPqôÿÝ‡ì ¹`½ü™+~i”—R$V­=­í„ „ŠÒ–¾‘j¤ Û`Hߎ4:0äŒÚ>³f·ðß\Å«hù2K4Šc74a;wé„F‹rC­¥æŸ=ž¡"?êJDPiÈ?TÞ«AêrÂEŠè¼A~§©ù%$6þjÓ¹hÚlo}m,·rÜΡ£ô‹“¹'™^_ÌÏ”ðH}%¼Jú'J`³´·Ó-à–ÂÀ™a¶QJóèP02ö4ÿW#ý°3((ž·¹Öãú¶³»J %áô8±¤œŠÁ€)PT'Úø©„÷&ú¿ÿÑ•jztèî;ë=V&^FD`„¨<Þ O©â*y)µsdèäðWTŸJÑ#yÛT–êX´¸ÄÄÍ*ËûK ƒË‰ØQ‡Ã“2'“‡½”’Ïs[Él!`cŽ7pfPŒ£§Jôÿ+"<ÑËÞ–ÙéR\O$·i úqÅ!\‡‘4V­(jvãú±;3­ª}kLx¢‚ËëÒHhZÈâj;\{+“‰…–¾Ÿm¦æîàÜF=YDkèLŽÆ¢+v¨;1;Œ–D1›,]ÝÞ-Ž›õÍRç‹\ÏhZŸºq,Å "®õSŘïöwɉì€:ªÇ¯!¸ ¨Ûi!ãôèñ ®Å§ØýØ ƒ§îߩNJ#£!È´Ò Òžg¾–e· É—w¯Øb$pä³Ðïû9MÈžL ÷+ÜYéþd•giŽŸ‘ Ý‹ºG2š !vnAØÒŒh)Ñ)’³l-ÑÑZiW¡,ôÛÚFmïu³HýLJÕiJ6èO÷kö°Yø²‘J¯l®-®#ÎÚ¢ÆÁ#’æÜ$ÃáN4Y7#§ÚÉÞˆïÉ×MŸÇ­[¶’óR+IpêÛ+sU ¹ŠÂ¼rCvºßôsijÇpαïƒsÐ:­ O!€ƒÑG.HK­*ÆU3êÓÞÉ#§;H ”¢»r¯+W*OÛPy}lÁ¥{+»æ–y`‹Ò’íT ú ‚²E^…¾2"©ÓïÇšò((8Õ%iRR§‘ø»EMÑÿ+®NÖb©s.…¥[›Û© „[,³É§·ï®¦ŽŒ‹@ˆíV§ºª“ɲ2½²½ÞfòÞ»·é0½ê…Ö—vK]CpJÊÊ@‘–´,­’”(]±"TPV6¶×púOaõ+€$’+i“ˆ„Œ*±ÞPô¥NJ=Ìg¶èo©ØÁrñEÝÞÐ"ÀdS¹ø½2{©ý²{m“6ˆÚ &Ö4¸„YÙ§/Ý[ó»UÝóÙI¦ô«S+êÊì1­gXõfd³³imJ´Ð †xj‘­d‘Ëðލ*9ï–Ç`ÀíFÆ=DÝC«k4ž)ßW¹)m¸ ©«Š•†§*qùâMŠ…4oÒ:ÕÍÕŽÜQKxí)¹µfe‰bRx ~Šý¯…ˆÒjÔ57QÑìÚïR’?AcŽH5céÐTT*š¾ËÀrâ~,a0JLi(‡VÕµb- Òâ·„¥ý° ?ÙžÙq®­@w2{­bßUšHµ«95[øP'©rRVHý1ÀóŒì5!ù.cœ}Æ›ã3µï+hB÷ëž[oÑÓÅÀéÉj‹fZ7_…dg¼PGÇ_Œ7íe0É |º·JuÖuŸÑ·:rGi~î÷RF+ž“…•$1ƒÁ¤á;¿Çï‡`<ÙDYÛ“9i7gÒlÞåã :¥ê5½´ ð‚¯ÉQV€ÚjÊ€°ÊéFgÓ•ÞÍåX%…˲™æ”ò"B¼kÈþÅE+öi€D²â EåCöV$‰þ\º%Þ¼²`|‘Ï’ÛVó-„Ójºœ’½X­!&òò;‰ˆf-û°åˆ¨Qð ¦B@³86Uóˆ³@ÓX@·|CjWI4íkrò ØìQ¸/ئܘS!³-­ˆZZ lÉæÉôkÝå®d[;}K©-¢…x¢›yX‰÷/)èßýœ™4kbÈFßÿÒ<²òîŸwksq¬j×:Tö‘A>Ÿg(ôÞä3ñ,Ü(¦>0•o|ÂŒ¯“’E 5Ô4ØA¶‰\Ž2ÃÁ+ê­(´dò#¿Ù$ é]„þh¾Ô™ ·ˆË0e*KG2xÉ "‡o°ÄNÿH"›Éw<ò%¾D–Ú2·­¨ŽRF½JÖ?„å«uÈmÍ‘$ÆÖmgH‚9fŒE¸DFsëºS™u”ª  R«û[`ÚLj”g¶¹¿g½¼Ô—O²¥ ©Œ3¹j’¼ºªŽì|"°š¹ îTœ•ÍiF+Gô OŽÍO*ÊÁ¦šRy,%cû-QÛìd‰´ ‘×"ò—sE¬XÉhìDœŽÀ/¬KŽ ïCí×!Ó"¡§YÚë¼×3E§Ç­è7y—<e£9CÄÔ¨õ8$iœk¯$ÚGKmSL½’îâ+=:eºx¬äTYgt%*w‘uæÛö‹°Ê[ ”õ5Á¦Þ#ùrâkKx\5¼#Ò’W5&†¥ÇÅûÇ ×.›G=Ó=÷_žÁ,5Ë“sé´×qÝCpY¤Uâª}G"¦µå¿Ùâ2Œ€s6À¦1~ˆOUVÚXRׇ®®RF¥¨›qÈý¯åÉ$<ûUòåÅÅü—׺Üö#S–Sc§LE¼-ªþé^1Tê s³ô2F`mM€m²ëýLhv0ÛÀP[Ûÿw=’M£o±U^$•oØcבc’ˆr×+½u¨KKŒ\GqmežÒÆŠÊ Z4’:òŠ•øwÁÃ\™]óMt-£°ÑÍ=‹HÇ•ï©ÄŒr8˜}•ªËö¿m°nŠ4›é¾V_0!—X‚ßÕŠ%a$•˜ùš‡DøYIngùxÓá¦FR7²cC›„HÒÆ ufX湚C<3<,J’0;Ö„í’l êk¢^éo'ÔcYæ-$±,l–ðºW“*Š3Ðw5åL•ÐòbwCk’éW¶zm¼0µéˆÝM=y¬v¼ø 'Uy¹âu VØa 7D=H}rêÎ}9mN;ˆH2C5Ðàâ!±»¢%w@“äh‚ÊÁ TÝj0ä^Å¥À7FyRÑc ß Ž^£âÈQýë9O³â[É™Lä°†(Ò]PKçEXc–N-¸`ExRƒ–ÛŒ4 ’Iëgk¨YØ[[¢º´CŠNû’¡S’«×o‹&6Sºéu8m--æ·kY/ŒÊ—³Ê¤K Á2¡ýÖô¢‚¬Ë•ž+,‰ôÓ ²óÒÛ²èèådyÐs!›ttT|ÎS+f %^\{y¦½•žX·ú¼Ü’y# W,Æ Ö¿+Û$%JwÙ4ŒÄÈÐG=¿÷vÑJ’}aUÇjA¡ñØ·\’ƒMK妺e½»¸ôâBƒœˆ#d<‚ñ¨#®W’ª¶“c%Õ¥¥«ZÞÞÊך…ÌJ×Ü»¥ÊG"#ࢼhûMË+=å˜Ý-Ô4Õ¸?¤íM­ìwXE ÝVµ&þJF{Ÿ‡ šH«óZ ŠæêæHÇ›NS×dj†*Š ~ÍpÖÊ a*&·p·”k<ð­$¼'ŠÁ¨eUŒŠÊ;`6PÖ‘Çgª¤×®Ú Ž?E.bYQªðþì­@ø_¿íã-ÅuH=K%¼³™'¶Óìn?M8‚Úr¨}IЉ3ÉXÈPG 9†§%ëFí×JVõɰÐo&’hÚG½k™¥²¼¸kz,±ÌbjÉ 1/üýídH¥°y¤wzÖyarÚd2ÞgŽKá Ënš“S™´¹v‡¨>«^k,€(•sAi‰a¦[Nf+*Éw{"¤²J´%šCË’ fˆ‹æ! SÙÛÃĸ4¶àJj‡Ô­@û í„HÒ[›»…šk}1VêÑiyxCUŸ¢Geˆ mûXÐ ¥³jÓËwí³ÙHc!FI#AJ@`~b¼»aÛ˜P&Qy4ãטÜHÌ9 G$• ÅÈT}•yý¯ˆ¤ïºË-vöY£Ó”«ið¥Lò\úW.UD]«^Õû?|I¤_Á* ›Xµ'¹µ6×F’F¬À!Z‘;söùö¦ÙeIEÖ™-Ýá}"ÝV Ù`77NdB(yè©ÄTó¾ÖøƒÃͰoÉ^ÿ@òñ’T.µEéÉ š(a‘TˆÃ·iG%>ÏÃã<4æÜÚ?”ÍŒFéîå[u¢âxÅäÕ!QÉ¸îœØ‚Ôÿ+fy ¥wÚL ‘[M{tª²,Q7F4f¤"dV  fîÇÇl"FIá ô.Æ^HµmBÞæ Ö¯ê$ñÂÕd7ÁY"éöU¸øäølÆ·Ý?µòæåí6ÑÒOyu2Ç,—÷ŽLÄÔ(RÊ PR§â_‹âfÊŒÏôÎ…lÄ/o/´Ù®l´£=¼lDþ“ÛH€YµZHå™Çïä£UxªñË@‹W4ÒÛP}CX7Z§™à²z24°¨â«‚¡Ap>:|>øf5Àž‰Íô¿¢é>¦`Òµ7Q3YÄÑH¨eÜPÛ’¬‚¢¢œ“öùdc¸Û’e²ô›ÈVTat-¹˜Víy‡`.x°`  .ûýœ˜ÆI_“n¼É«êZÙšØ8¿oªØC2˜bƒ÷èúˆxåV—ªì»®UŸ†ƒv8§×úeì7¹š[+Øé-Ô hÐzŠX¾©¡YÜ~„'·xIˆÛ½,‹ÉöZ´Í«ÞJÒF%Y5 ?Yn}ÄŽâ@S—JþÍ7É ½:”ð&–V6vWV÷±Ü3˜wŽa#ÃLJà ‰VøÏñä÷;5ÈÐE6H žòÅ/ †úi. Š{ƒqÀPUB5TW’†ëSŒMlÂF÷(É,äºû7Êé'8¢Š9T–r-^¡~ü'b<Ò/4jQé÷¾¥†¥ Õ&U³Ž'ÒŒBßoMjFãw-²ô¯ÚÃŽ&;–2£+$¥¤‚Ð mUîÙIîDŽÌ^yõ8®.'²¶F²Ž­,$ðýç"Ȥ@…¯@6û9‘É¥ýÃÉÞg¶s !ëÜ ºÄÌ9$kø‚TΔ-ðã±äš#›bîÃמy.ËÍ<¡i¸¬T¨ ±4gìŸÚÄß$€µ¹·Õe0Xê’é97ºƒÄI5Ò§hÂP©TŽœ•¶çñdO͘ÛdþÁ|ÀÄhï jštŠÃôµÔ1½ÃpÄ@,{µy.Ãå»äÊl|¿cim†ç×+HáʣƸ’+ÄñWsó¦$ÛW&*þhóõæ¼-ÛN··ò´°Ïª\Hù£j¨!a$p#ìT|=i‚Rˆåͺ8‰Ü³=;SƒÌpG>{Æx$PÊVJ¯XžG7×ÚÃH³j¦ Ò(ÚGŽhÁõDRUø”a^Hß°+Ú»oŒ¶ ‰¤~c};N´6–3Þ§’U:LÛ,ÊÀÑÌÕ !8Øüò¨oê-äôêÄì<•®Åª6§¼l$½a,–ï—ND¡™H*…WìÅ n¾òñ¶Ø,¡Üî‰}enu¨[2ñhá»’±Sᑤ @)°TûLùpYhëA·rH,ãIƒ¤ÔiÓâIy ‡;ÑÔ¿ØÞŸµÓ Ò8Oz=îÒµ¶K¡ors”™H—›€@âXôeï Ö'w]ÚÞk:@ŠþþãêWE¥²€·sfËñAýÊ(U~Ê©¹“IçÕàÒMÆ‹‹•ôý' >¯³¹U‘ÖHg€£#Ú¤qËx;Öé9Ñ¢Ö,Æ¡m • 7K¿í!%XµÏ:>Ýü_cíуeº²y!#‡HÓm.¯µíß„.ïw+Qî9:¯÷N0ŒUCQL¸ÙäÀ̱¨üÁ úþ“šÖMB;ê±Ï Af2!Ö'U!O^•í–\Ø›SŠ K‡y’ ¥¼Žg‘#yE%ídž@¥I•+NeÏ}œ•Ê%†ÇÞ«¦Ý2Á©Ö(§aÇ=ÅÅúúh7hâR©­$wä̦›dI<à kfA¬ywNU0Æözn-Ø_à œ"U6îò ¹bÂ*+uÄK£ îJ­¼ÑªØY^N6·Ó.¦•´Ç´Q$’ò% ÃQ”Ã#• ³lŸ ü,2³ÅæÛ½?ÿÔ<¾·µ—RŽÂÒ&¼z˜’ærË8¢Õé-Æ”ûTí˜ÐrÇ6Aiewyõ{˦fŠDxe—ãWT7È•-€Uç†Ä^^Å¥Í%´Hü “Š(g L¬#@[˜åÅ]Y~. et{ÙX«è”G¥Ü†šá/&02´wq3HÑ-EQ’®¼}ÍöFHKz¤)}<¨Šk×3ÆÂ)”ÂÒDŠH?W‰ ÝhÃ|³¥°Ù¹nbú½RܰuôÏ«öœòûkJ°¯„(û?k|!D=Ä7w0}rWŒÊ9$1ËÆx$5$’N@ºQ@´ßïÆÙp„ªK¹ E—«d]Zq»‰fÜ…,()û\>×Jñ\$õPì4Ê[As$jÑFв“2$¤ËûÑÌž»ToðÖ™^í„Nº}®™m5Þš~°b‘f–;¸ýk‹…¬Êà„Q¿Åè>×,¤Ù>¦CÉ '–4ËË„[ÂmP³H†)^Ò¹“«³ñr袡Rœ7ýœ´Ìðì×BÑçKÑ4±"ß;•bº"ª ÓÔ`?»'ùxÕ©ñew)y3]Év¡;‹¨.a1D»ÚG-Ô‘·X‡.*‹X݇}ÚŸjO ¶'o&³{¡g¸žÑ£†zê3°¬ˆf2ÁÂV 4Ò;56iǶKŸ¹¹+¿ÕuX=k5{Y ËÄzh*åÈ%HvèxÕ¶*¤{:D„,?a¥GpFõ#°NY³íSDÌWÃN³ô•ía‘çšcÅ"Š͸ȳ{Ùc¶ùT¢gJ}‹dÑØ%ìw*UbŠðÐúƒ—*s–²PWˆg<¤û_dä@ÛvGžÉ¤À6ö±¯ …Œ_Ò‰‘'ÅEBø °HF·H2»@jú=ìÖÒ¦›}"êƒki}&—÷ŠA”X4`(û NëÅkã£äÎ…!4ígFµµº¾Xþ¯õ?XÏ-Ô~·r}9¡åTËU2–ZH¾Ü²î&Ž#>¥æM{]}Ë3ZZp‰®u´¾ôîg’ˆàH‹)~5!g¹9tå‹!„"K)±²WŠú³C¥p&IK+zrÓ‹¸§v®ôß eÉ¥y†K4ëëx4«ë¶¦XŽMFV>“Hj 4ÊŠ©oN!¹å”å‡?&ø‰Ý¦ª°ò–ÈIT’w›ƒK1™Ô¯ª^J²uãê.ü{à’Në,þ¡§u«ÜOmu*Ç-¼l=@Ÿ@Ê¥M+PÇ•0í.LwjÓǦ[jÖ‘êQÊü‰¹ú½»Gi-XÆ[â£1‹óF{,Žû¤ºÄý;èeµŠF¥œ»O, š <*­±Þrýš¸Jb×Z„¢¶…Ãòú³ª!Š#Áj}>L´4ß—nù “]Z[Þ7^ñ¡¹>”“\BÓ7‹$ÔãAÉxšÿ•’%cÏdM½ž‰å[9¥¿Ô£M.'<%hdb”û"ÔÈÇìƒM¾Œ‰”‚ ´Íb-rÖ]RÙÓJò½µ.,5GhÒ=G‹0%ã ÂxdsÊ´^9:²#k+î¼Ï¦4Hú¬QF¡¤‚Tf[–èE?ÉS²­8‘^ùâ ›Ý w&*­Þ£%²nœ¼ríûK‘L¦w Ixö÷SÞj.ò²·Žo­2Û!•æn*Û}§§_ÚË@ÞÚ9…°j³É:°ŠÚ8ä±¾™Ìž£š‚ŸWâšwQÈäˆXšIï|Ý&¡§Û…½¼ef¹k†˜ÆŠ¦ •dN …JÇJàŽ-·feêÙ ò¶¹§ù—Fúì’+ê·2­>‘ɦdž5ÖõIRîä˜ÿ”ñÃÂ9“Í8†+‹(ŵ­Œ×#‹ú“ÄíêÀƤȰ ¯VVåã€÷±è”jŽ¡ ¯£oHýrg!âôPƒÏÔ³‘Ô)ë“ Ä_$3ékÆÓQQl,-¨æVbм¡Czk‘Y~:צ6Ì ÍÎ¥|ÒÚ¶¯¨ËwBj¤e£e’*„Eoˆ|R¼±áÈâÙ¨ëúMµ³O ä–vhO¢,ããpdh¥Œ”û-N¹ äÊ2ïtöúMõüúÞ…«OuÅô·i$7ªS÷ˆIâÃ¥>Í2|4e½&êÒÚÞÞ×X½µ6ÎÒMõw¸ X£¥H„˜×—¡¾Û~Ï Æåql‚O"i7kiZ‚¼Ò’nn„Ow JÊŠ«qØÄ{0e‘¹á²Ô•l4É,m¢gIJÞ¨!¥¾Ž´ÉcN¿, m»ge&ÐZ ë8Ÿô‡%‰m#UŽG@6 !+À’vß ÙL%ÑèÚ¡æ/KóÝÜ:T33Yè1‰ µ%“É%Ëyf'íq⿲» dH…Êq¤krÜÛ^ßhz1O/¬†ÊÉRúµÄn%·õœHTq #л:ü'®Q(Ñç¹n«ÿÕ˜ÇåI¾²¶ÓCÝåÛ,6o ’±(ÅAVW ZŽ+üÍš¹HóäæÂ½íê6ÚŒ éõßô¸ù µz×€›#ú†‘•o‹Ô¦õä¢z©—Tºã^†Ü uÔ,Ž&<\«ƪ«òûLzoñeÂ6ÔyÓz^¬oäx® ±< ³H¼mç„V 305f? ‹O $rR|–]X¼“Î+høHÑÆêþ’šY#¢ ºø,'¢ÙoõËK´ÜGjaŽGŠ(g™bq2’¤šÐ©§.X²Ù[!~½¨½ß¤»G#ãDKtÀŠŒ• …Iè%É…"luX㻓L±•ÚäÄÖ¶vέêÑÅdfÔò?¼¯/ò²„‚Ù»´·¸ŽÁôÿ®Úr{iæ@bRå kɈ&¹n9²„Ç™´?ÓÒõO®H"”\i—¬£zp¶¹1,>8Ï*Ó—Ú¦RæÊCdËL×4rO®‰¯N¡ áh."šiÙ#5h2%hi©ÃöürÙn<š€£²iŠZ¼Þ¥’Î Þ ´æ£ªª–ÜòU¿kß*1º!—%÷mwåu[¹txÞÍøÄŽ¼JÃm@y4Œƒ7R1o8²MžI•½ž™t}èH«)åy×ÁpÌÃ’†Œ’ÿ(uý¼4ƒ"µ«ýVæÓŒŠÒ—¯Õ]*ΔâĪŽ*>ôê:d¢4s)è™–^hR#"I³ž,ì)D=iÊ´¯Ï ¤: (`ƒMµ††Q"É-ÀƒÒ>¤n=8ÄbjIâ]‡4ë\–á`'—uÔ3Û˪Úž)¦IPƒ'?TÅ]Ú5Vû)O³\§›"6EG-–“³4ÌñzbF¶šR ŒŠ…ŽeR8”Ü¢ƒÒœÛ'Ám\ds@ê^fµŽÖÚHõ8ïmyÏ%¬ë)vP}4U<\¯6§îÏì{ä㈟¨1–@/…çzÖ•§~aê–÷›]%ª1.®¥’+K«‡#œ’*3?Ç 8*ѾӞY€Û«{Ù.åm'AŽ[I²Ó®&õßêÍ;vôÀ;q,ê*O*~Öc™’k}›«d¦óI6ÄãTÔ$‘mä/=¤r3[G!O†”qã>×*ôúrøË‰¦Gª]å 'KkۉƟqæ ®/g¸—Sº °‰¢0Ä%¼.á‚5RÜÆ¿ ,’+òÈf$tݎȪe³jöÑË1ºfUV1]Æ…Ù½`ª¦9¸òûG#ð©ÁØa3GeÐù‘ø½Å4 ÑÕy8&2)ØÓ â¥rF-vB¾­§NbƒP]ËÌC§1‰½4K3K"E âY A¶Þ‰ÂÌmž%…m½"Šñ¥»»A':ñ&9W'rWݨš@ßM®’ãSšÚKY…x˜H‘?±ª;äãÜ?JßÓ6ˆ“[¤ÒÌÒ"FK**H¤ò%9š€ß±¿Ã×%ý±'g™ëþcÔ¬oá‡H¶Ü;r•š¯37ìÌefsþÇ,÷¤©ëùW^¿·‰–ᬭêÛK‹wgøÛ„GˆUì´÷Êxâ h‹adlomF¥qy`ªÌe’Ú.!¹…F…€•Toµ¿&V |Uì,t‹{§ÕµA/­®›M7â†OE7„ HíP=NJªGmòD”l¶->8¬¤—SÞzJ—Z‚O3Zê7á šҗԯì¨Ê ®é²º$—–ÍÌQÒ[ß/ko:dP¬q¯ÙøïËn<©¿Ú˨m»æ­l|¼×Z†±æGÌÆ ÝëA4Ù\۲Ж$U]Ù|ò,‰ª¤ðDk"ÔÓV2XyJº´ò0¬ÑÜ_˜Æ nP|fD¥ñWåð¨éÈå•\ùµŸÀEÚé·  nþ¬¢[‘UåLM*Ì#ºÿ²È’¯5„еºÝNâ1ûÛ{X˜-±1C=hYiAÈ~×A…ï²´:í»É2¥»=ôÀ—™‡¨Êµø¦/  r~Âþ϶T–Ýî%¿[ËT‰™\˜dž7y©ûE‚»Ž }ù0Xð³í&ëËó_ͪZÚG˜5h¾¡y¨ZÌ9ú@òûf¤G*Ðw\ÇËŒ×6X¦n•u'ã´Z„P‹u%T-Ü Ç©"IËŒu§îÕyǗÔŒ›ÑrjÂ\oš)¡{>vФƒ‹pH¦¤‘ÐDÔ½ºf@ã©Á«éöMë_ú°L²=dtY(onzÖ›aˆ`|‚­Ï˜l#K§Ã1¼‘•¦ÔZTè´­Px'Ú+ÿ\"5½¢ÁØ¥ZÅÖ»sqA<ñ >¥Ôˆ#ÿIWè²…©%ëÉ|ƒàÉ&k] ê)©È'®â’srC%(cŽ‚‘ôª®L’‘ku.é:¹/$“[4ÊË£<«è°Z‡_‹i8€*)Ìmˆ‘aîH£òm²ZEh—²›˜.$¾n-%ȼdJ#n$øÐ62ÌÍn5ÅÓ­})îmãu^vó"„/³*€7¥#áÂ&&L~ټݮ‘æ §m6ÙÙÅ•¸¹[[€z‰å'âáO°Êßl”¤Ùzae¦¼«"k7ò³Z±’gûÄàüuTÛvÛß‘,cASêÐÜúÒØÅõ{u*MQX׊(Mÿi²BEi^Ç@a©[\Û~’’îcŽ¡ ¶¶Ifn,üœ(¤qPW96p’Ö§¤]Ùê’YÙÙ4šŠ5M€seÆI!«Ë°‰Šc™Úé)i<–ºö‘-Î¥1q%ÄŬ팀qV¶‰kê IY¸£}‘ûLk³-ïfÉbhŸRú¦scy«Î[]?š¨.±ˆO‹J×áydÁÛv¹Eùz«·=+{T¶ãqé«3Éé\ÈÀÒ‰¸å¿LdE0ˆI<ë®¶£}5¾‘«ÄRH·V¡®'=Æ®ô I %9ptÉ€ä‰yî†ÒgÔ4›[‹ÿ0[qÓaŠF´³™@ž8OÂóN¼•ˆméÌí·|ŽÒØ37ÑÞYÖ šÉ­mîo>¹sn +{k(†ÒÙ% 4@¬`ħÙåVl®qá6Ù{?ÿÖ˜Ú´–¿ÒÍ’Û\„‹L.Ì=;UbZIH52+q)Ä"¿Ã5ÜÇ{™#G¹tÓs«ZÂYõRH‡¡ò‰Z¡"iÂ% H„õenerrÛn‹>ô·Rše¿Š ”‹T6êUoHg¸V>’3Š£â?+*ôøÉÆ<’nÕEƵ:Í;̇N*\­Òȧû®6T!Žß /Ú4Â(1#ªÉ¯Å«D‹ÅÝi9pÍð™:)J*šx(=²a¨ìš5­’Ù&µ¬$‰ŽfâJ‹,„õ ø—¥*6ß+7{3ûiwÚ­œ×sÄñ]K&ÒÆÁX¹X€aUÚ òÂM›h¾R´µ´ŠÛ[ž[¹n>6…>©`#–”R¼¸óqºlµÊ¥ÞÌ„vE\iÖº”ê_¬ '‹ˆ• <ª9Û—\GÏ•²Þ•/t[By›K’FÖŒtõº Eî¦XÏ5âÛEO‰óesât¶qø±14鉥¤J’ €Mvä£ßJ¾ˆ4gƒà-â[fõ{eØä*‹DÂï+ZyïRh†µªEx¬Ì÷vòÇ4RBÔ “4RI@y­ö¾ë2d0cͪ¶×V6ÒY°ôdø$HÌ¡¥¡ üI+Äñ5yÀtÊÈ%'‹d-õí­øŽ[qq ÔãÔPîy¸’¤¸GOí7Å’˜›'É£ZÁiv·q ¦x©$îÎòŠ©Ø=UC~Ï|ëôÚ{Éž^±­·s[ÆM](çp(ÇáQËŽG…"@ u4½Ó[Û^ÍëÜY«$,‘»Äܶ$€§‘ Z‡öpÆÍD¥P꺥—¡kzmA–N+öê ?ÅÓa„€ ¨$ìÆî.t™ä’,§`Õ£´–þ§Ý I<©ÈÓî9h¹  U?å]ö§©ØÏ­G¥Ã{æ²[ ²µ´0×Òà±z~eêÜyO‹!,Â<º7ìœi”òhפt-L_ê ©Å¥Õ#`®À2»¡åD`/.J~:d|kæƒto{,$WhÝÅÌR)‚)QjܨGJ€kþN,Á*»Ò éèn®>£#ŸVVH™–JE(Ä»•Qð僆&] ÒóOòý›hþ[··Ó’i£Gº¶_U%eR¢Ff5&µmÇù]1 y¦Ï0‘Øé]ó´çLš{ù­™®õ+z›0œ›ÔsÆG}øïû?ËL®r1ÖÝ ÷Dê]óµã¨Á¦Â„°Ia‘¦õB€Mà BŸæaË' ±äÀâ<í­IóÜåôÝ:Íf¿™ [Ã#46ÎFüå*Š¥ÙÇñûXÊQ^Ck ›ëSIsx ¥Ä¶IðúU§8‰Ù•þ ¯±ÿ'$sK/<Ûei!´Tž4EæÑÜ[²•E4­x„fñL´ k”M¥Sj~eÔ"MKM´—Púv¼ )ÊÍF !: êPôà3àÙœyʺÄ7Z¶¡ ¹ÝÒC \~TŽ~>£I_Ã1²Îö ‘‡z4Eul“Çs3ßÜ=Ìê–¨´b Óâ)­½[l¢.˜ý$ÓQëvöS §¼-ƒún•XÓ‘ã³t ûñïí’1½©Òm´{›™®¯-Œ³Ü|q](áfˆŠO& ×£d(2¾$ èwÔ³A¦ë3«ÆÕim––­ÄsõjÊ¡T0#‘ø{',<\"ÓV–+¹>¶ÉŸU¸…ž}EýF€Í©2úu4­kïQ·‚K8ò¥¶ÞVÖµ™om¬tØ$Ò,ULÚÑ»h%…ßì· æÍB‚%fUî0[î¦;¦|¥Ó1ÛAoÄ+Û?5vU yÈàë×q\œ{Ú¤ë}z*oÐ:‡h—³ªµÍú@eI&æV¸B8Q(à åŒALX»×`e’kin´qIõ¶EôÐQV^jCï½W¾V ¥ïS– ‹=(ßÈèñÈÛ´Q·©q·õ5tZ±älFåHÙ*µ½¾Ô}Iìá2Ao{‹›Þ6çÒcĉ‹ÜìÄrd×4«é:5‚ÎÚ´³:Y±^6*ÂIL£¯§Èƒ¶ß 4ðÀI<—aïd¾²L¨ö×¶ëPaKpGŽj‹ P~ÿ³‘åïKí4Ñ$²}nks:7mn8—û°¦ÄW¿úØ–}-¨FÎXmôëD¾‘«Y"rÄqý éÛÃ$ØU¥Òé––Ò-Ô—2ÍÑÿs;ÌÆ¼`û±]ùb dXÛùRâîéáÑážýíQîoòºÛª×f•»¬\¿ËlŸÛ¨ ®ŸæËë[‘q¯ 5'Pg¶‚>wfÐôMÇî·åÇ®&`tHˆdšEÞa¥ú’M(0ŠH&áÈT~éš9O*u©¯&ûYO¬²&6¯qk¦kŽºµû‹M6%¥å¿;heŒ^)?U¹[%{ìÇPÔüÅå û!™s}fÒÆQ'•”Ý´&ƒ”ÎÇ!Ëv_Zâc"ì¢wòL¯t˹f6Ç^¶ž»uk›ˆ#nfYÛÕšÞØä8ty†@PèÎÐ6:~¯£\}WMEµÓݹ Vvizú¬ÙÃQË—öx䬺'dMý˜u{–Ñî iBDwklbž§›Mrî\½5?í` ¯=•L¶z5§è­.º„0rººúšE<×é(2¥C¨P '†ý+¸ÈnMžL$²hžd×.HÓ´³{$Í$ú¿©qè¤ðEF‘Yƒ#j ,_e-`l”ÛÊ¿—ͧWQÕoí´èJ©´ÓúH1Už¯lK®ýyesËÜ ]©ésjcGÒ£–]jêöW›Q¢›(ôèã*ÁŠ3„-͘wË JÝç4Xé:¤šm›TD[yḙÂZƱqnAPz’@÷¨a•FÆú3² ÿדÞÜi—ú“þ‡oÒ^0N-Éh„‘ê,àåTöUûD'6UÌ 0N_T±Òí-µ™­â³HC+^‘¤”ÈL`‰ ywŸŽD›±iÞ¹#eÓ–ây^H¢[˜_Ó·³L¾”qž;«~ÑEVm‰å‘Td9¤~l·K´Ó´æº»°²úË4:g5’zAn*¨=?‹áRÎÕ(´ûG'¼E„ ‘¤¶âòÓ@–8§"[æ õ½‰ç‘Ð}ºFIäK|i·a’‹EtI¯ìõ5T¶¾Ig†ÝÁÍpÑ@f Ñø‘ÊRÈ6L³‹f>LžÒÎ[8à »žªD¥d ¡6sEQ^„Ÿ–BÔäçKõ¬‘ÜÁ$ò—·aûØD‹BAy* ìíðø×+‰,âHèÕÌ0ËqlÒjæ+çä­ +½ÁŽÇÖdBh +^geÈD*¦Ê*Z¬ZG¬ ÌM; K†,Ѱ§ù µEkËâ ¾LßVº¾H(Þ{¹¥n‚Þéã0zÒ³E#,‚’ˆÅ6 ½?ÈÆ€°»×hߤô(…ÂÜ=Íä¬É€·õ‰exjHn"ª~ÉùãõsD¤AÙI5û;6ºƒQ¹Y5I%1Í<ð…ÝNñÀq ˰ø™¹3e¢<[´“[¢Y`–͇+¶r¨ô4 Q½~g Ç%óp«od%6l­$²òU_ˆšOÄ•‡ÅØ ×4}It3z±ÓD‘Y10H²ÇHÙÐT¤U&‹M¹Ÿ‹ n“Õyw}hÑ^Dë ÓÒ¶xbt¥$òQ*fÚ¿5ðñÉDv@]zW“<—RKkªÈª¶ÐÂIŽ^GÓExÆäöõâúp]{“Ï›"ò— ²†êÿÌ3 ŸN¸’ÖÞÂ^*.¦D d@­º#|£l®´âÙVIH›#Â9óA_k‰#=­¼–ìÅÌײFóÏÉC¡#‰-Ô‚¹gÍ7ev¡nöì‰åÍFæe˜+J·ç·,œ¥‘d*ªªÜzî8mŒ þ/ƒ)Qå²û´ø¢µµÔyË çû÷~, eneÉrOÛ;ŒH't g6þ¢j>—&‘ÞÎ)ªYIäÌæ›~È ²å—µZ ]%ÄF[;XÆ«*°²½¸b±³9)Õ*Ò êä Qx× [=S]Ëz–ôv´²jž HeˆÅkm?3I¸Âü˜~!O÷]¾Q9q ÃtESiõòÈÖnKFXÆ ¥(AkÈšÿ“ÇìÓ !ÃÉ„§fÒËÝ[KH`ƒë7#Uµ…Ú¯"IŒU@q#äh§˜ÿ'ö²b$cÅanºŒÐ¥Ö¦¿W°„Ëj/íŒb²DôÔnL`ŸÝ“NK^8AQ=[}6ÏQQ¦É¨\=ƒJŽáÜMQSVPJZÐþ¬Mú£jNmíãЦk†_Oâ³½cHâ>*G@BÇ_ЬñLJˆnÇŽ¹ µ-Zï[¸ŠóV»m2qéJ„#teTò¨ø™k®ÄAÆê#Æêø¬‘Êñ?iYÁU*:?Øßáß%OE"ù” ú?«)¾¿d­ˆ0¢<³¬’JvŽ/D5M.R-óÄË P2Ousõ‹ëk‰¬mÙ „-'”ªÅëQRv4 Ë:$mº;Q¾ÔÓÓ·¹H,£qjíW~‹ìÙI(ƹ*af<Ôo£»Ô.¯+Ao;ª,HÞµÍÄÅ*x°%h*¸·ˆdy%¶ÐZÚÊñÅ[ûŠªÌŒÏ:Æ ¥_€Á—§Ó„ﺦqùz+i=B÷W/ð2[LZ4ŒOýÙ (çF®Çß¾;O qqttØe·½Ymô° Üze¼+O‰@+ÄšíAÕpU¯"ƒ½ô5(§ŽÒKX1Žêñ©(Œž%¤A°f)#ö‚««0vóMaº]+EŠ Hˆ,™ P]©—“Ì 9"’_åë×+ç-–Èæ“ÁÚ‚J]íå³²‰¥MDÖݦQ@´án$ì:7Ú…rÐi„…¤¶i³s%€Šàò¤šø0~í逑豜¥[¨ñÛZÄ÷7:ôi6Iæ…š7> à®(9)^&›ûä}ÝT{«]É<Ú=›ÝHښ̌#•DhêƒtfU4Û¿ÚÀ´CÐçŠö÷ÍZ}ü ´› KÄš5]hDMÓÆ½0ÆWÉe·D»QƒU±…’¢Ì´’f "°ì§†àÓí15öÉ‚Äî•XCæ«ýEßœ!ä Ž²©ã^¤—© Î6U'n­’$¦Ï-ÝÍ °Sa šð»7jn'ª @ ñ–ƒo£!c›"ÿLèp£9Hƒ0­™f¬(,¥]ÅOŠñ÷¤ÄŠQ–Ð]—½Ôu9-­ÏiáC=yµUAÛá;áÜ1Ù©R]M#²º†•S$ÓFÆ3,i° ¿hþÒà;rf/¯èŠÖÒÙEh†ÌФ1OPý¢Ìý l§N‡ z²2Iu»u+¨õƲ³¹Õfb°M+~ôF¦ˆ«Ô| üGª&¶ËvÜ÷3ÛϧÞ_6£ &Yž1»ÄkÉ Sdd­EV™¨Ç¤Ow©Eo Ýߪ »Ù€”Ç5(#Y9¡öQÇoÚÈJ6Ê2­“ \ÍlæÚâ@drŽöU•‹SЍ¯!Æ„ ²x¶´-ï¯ÓOz¦ÉÛ’”„“ò4¥FíîXí’¦#ek›DJ²Â[Ó·%Ö;vg—5¡íãÓ|KÍ -ŵ„¿W¼Ž ‹yL@Ý QªÈ4A©ËöAVdÕ{c¹äCš·˜µ»–¾Òì­%XÁO¬4Š]a‡Ðˆñø¿ÙÈÊ#{eRaw­=θþ\Т¸½¾…òòi(³H¿U ãá¨,ÕsɆáU NÂúògЬ±ºµ°Ó/-µ®l-j ¨ÏKk™Ê©c·xƒrªÃ—=Ú«‰lØ‚@ÿÐ/šüï ^ÞûKXíâµQµH#¶€¿Ç8,b©n\Æå›‹yNL†ÉÅ¿˜?1¬té—öúyd[ÈQÕ…Œä ¬J¼‘â‰t>‹}©2< žH#Í/¶óŒš¬WQ]J%Õ¡häýŽÏ|òB&áQT4} µ:äÈ@ ü¿æÖ†þ[­Iõ e’Hížõíd d³rýÌq­]’¦†µ¹°´ÓÛQ_M^Ig<f‹ n ©î2'}‘É%ô’É,“‹Ë«WÞd·ä÷_cá@°í;e2gæº[›$ô帶’ú&.²ÂŸniM+û"»u~yë“0l)ɨXºÞE´Ö| å%Ó-ºoµÕCwvú6Ëb7k•ÒMk毮_ÜXZio”2­ÅÌ‹µ´EJ3ÉGp@‡L™Œ~ly&7WzÊZ†–Å4í"t>ƒK 2^¤NUœ@• ÒW§¨6È‹Ù;YC>µkc2Ø^«j ©kK[+ÜáBh=Û-O’ÂÚÝ圗·Wh‘« qŽI¨ ÕŽâ€LF™ØC8³²¿1ê—.ú£ 0µ¹ç1Ÿ‰‹VâS»|+׎#tì¥åÜR]®,m¯èVaj¨¶±ÙzÁ*eP!hᯠGXnÜè®dF4 Ý+o5êöóÂÃPpÛÖ8.<›Žå•—z*ЭÑTRîÓQ Iäs+´ˆ¨´ŠC»qh;6áܳbvd7QŽ?7­òXh¶1K§N«u%Åü’ÃlU”·¤ÅhÎÕNÔo8³²É.t]* ZÝ̱ܽ”—NY¡¤*ª9Ž~MËsÊN;òʑ䦒Ù,&²x¸$Ö–rŽWhŒßXæÆ¥ä[â?i÷,¿h š×5óêosm¡ÙÇq|‘RèJLNM¸|.ƒsÇírÿW$)bÚêS½­µÝÛÚ¢ºL±ZÄEÃ*ÎH^F*›Ô/5ùbOrš:h£õ§ŸKI#-êA=þîC|<‹£EÀ©_ˆ2+}XýÍ·¥"E Í$ä…õ}_DšT1­Fû ŸD}V-VÎÎÞ’ÚÂT>¤r^žK"Ó÷D³­w? 8‚%;/y‘aŽæÐCnc¢Ý·VÙ]þ0¼ª?ig¦ R@AK>¥v³\Ab‘Ϲœ*›»Éz…´ x…EݹqðÃAFû5ìÍ#JÞÚÎÖÑ‘&²$šäï¿$¯´E3²¼[Ké#¸Túº« Ÿq$|P†^t?èâ¾Øî´f›~—z.!‰b#ƒê¬d,9¸št4ÿ)ŠÑr%Jrtë··½’úŠæ¦H@hø¸ÝЕe |\ûœXÚ]}a}©]Dð•´Ó©õd¸»bUmÀ,åùR€vo£sˆÓÖ¹P•KvGpÿÿÑ*¾Ñá:[kñpg¸’îìÝÜ´ª£àaRV•%·fëösVîY¢–E¯h£N$zõí¬!VÞâÚ[£‚Yˆ)ÉwÈF„ŽuàÊÿ´FXAæÖ9îÏR}.âÞÚêÇN·¸¶–6óÝ-Õ£º¯æeøÉ.Kº»üNËöxŒ£«oØ|¿ëÉÖHî”<¿[·BPÅ ñ´dBXPž[d8©@uÕ¶¥ò\ê)O©knxú¨òK´`«0øyrÿ'"%[3­“ÍkÌÂPͧ؛’°B¾¨ƒ„•MÚ¡¨‡‘²ŠŠµýòa…Én¥H£‚æ†öE ^ÜHÂ¥C^Š´¯Û¾V)¡u4é#Ú˜-íõ¦¸†2eࢤ©¨<š»ò'ùŽYæ‚od½µ­7ËöSÝ^3zPž&ã˜wf‚>‚Z¤íÄ3d€´mÜÁw¨iæØi×VÖƒ’{ÕhO!ðH†,j‘ðñé¡vÚ,sEižI×­íî`õ¢‰”›¦hZ¤ ž„~ó—Âʨel¨ä·†Ô4í h.¥f·7ú„ Vâù¸ˆb•‰<-á«Wm·wmºŒ2—{ [¨i-¥Ù¾«õÔ’Ù"õ.DááTšCC¸n$|=9a³]ìLzªy/D¼ÔçõíUNn×½Eã#;Ò%jt?i¨Y²­‹f1Ô"õ6¹Õ¦h‰&…¦FEvhî/'€‘û™b§"ÃâãN5 F<²¸æS)  Ôú¤á®mgú¥ø è¥Ë«H±C åÀ&ÁNü[°ý–ï—ìÕ#f˜áÑt;yDÚe¦jÛ™rÛÛH*ˆäø/vê:S%vcqÉ2³ó<’G>£õ[pW÷Ö±s´È(¡‘¾ ôÔ|{ñÉðØÛ› 6Q¶—w£œ·…T\R;[pìüAë)VQW'¸4Qð(è«,¡ d!¬±²²FÜÒ¤³Ô¥U«²þšƒº¢J4 !-Þš&!ŒÜL„€ÁþʃҽÍœ·Ø#ᦡh«a§Ç*J…c™ýZJ!®ÅÁû|~í€ÓŠO£iš­õ®™®/ÕáÓÐ!´w¢±ëɈ$Ô9Ü7Úë‘Ü ›Ä™›aek¡Okawkk¦\ðŽòâô§ª¯2Ò7sÍÂÊ+ðü$¶JfÃTä+f ¨Ú‰ãKëx!¾žfŽ 5gž9œnܦR´ŠýãGN? 2Dì˜ éºeÄÊ.R;[»¤\Ý@É5˜é@¦‘«Ò¼÷ëL€;³<š’Í.`6Lëo(¸hVS,áj(U7ÜŸ…w©ø¼+‰ób6*aíìÑ´ù`Žx¥¸¶F7 ôÄîE;Sù޾ë!Kî.-¡˜é¯þ‹¥«Ìî¯\]O=Ó+Uç‚’+ *ø }YH­;LW¿ŽÛJ·±µ˜„Xïæ”´hÀü!+F,ÏÓ~Gáþl÷²GQÕl4û§¶×.â·x¥\—)b¦’rY…$ (=k㑈$l§¸¥ñ]éZõݧ”Þæ?LáquFÌ-•š‘1f~µH¢¢’z®Y¼y­^á;–æM!’Soõ9'ÓŠP”«Q¦²Ð95‡–DTFîúÕ´É%½Û:N­þŽ ¨W“¿&€µû;üGÃ,¹¤Çšg Ç-·­yv‘[Ä¡•"ô¢Š6`A‰ ìäý¦#¶7äžK,õk[;Iî-‹ÂÑ7d¹f˜Ý Hä̫Ā|I_åý¬H7ä·c~nÔ/%½²{Yç_­@ Èaä Ï+CÇ£ø–zôP9 î¥³»¿–K{ë{Ö ‹õÛV/P²ò·¬«ÄƒU? ôøpð²”¾E†Ò‹L–9¯ï®o£c `Y •¨½øÐ^»³’Û+K}je¶6hÖqrk¨bI"ãS¹/BÏBAÛá§ùXdxSD¦:ØÓ4)e´Ñîã½’r=Y™P ‘ò®ÔûTé„y¢ìl¯ai3YG •¶½½• Ì Î!·bjôæ¥/öV£—Ã&Š(ºÛˆí¦¾[ktã`ס–>säã®àW‡R1&ƒ!Í’ÙØÜ9·º¾ŸÑž9RHd‰Ùc 4帯ø²%nŠ¥È±–îî;VšÖßÀÉWe‰,c‚†<¾û|>ßuÈpô¶\B¯¢Uˆè·Ç%Ôvá=ymeQp¬b P°øÏ.Ù!#|˜’+š]y ‚ŠÓÜúÊÞ”ó¢$‘²úMV  ¶Ç°Ë:1^÷|  e 2p1$yUZ¥þRM+ÔpL 1膖ÒèÁõƒ:,òN%âdÓv-#º:–° JþßɪF*ë¥z4èÚ«f‘$•TòäÝZ›±P(­ö› ;( ‘-ú‚ÚÝäHˆÅ$A¸Fh ª$¼ˆèiɾÖWêg³*ŽÊ-.ÓëZ(§£2ÎÖ÷ ë4×PNiжèö®Ryú™ èƒo-è—Q&¦«NOnKËoSHA’@±2r¡Uçð|Gå–Ù®…íÕV]7C²•xªê G*òá¸5 !jÂŽU*W}ðn|™h;Ë×7PÝ[\Ã¥9–¿’`åßö!e(¤îàQâÆÉÄü˜÷¡¥ìdHqßH‚“´²håÉ*Ûêp ¸!ú­Á ŬB¬Q­3s'aǹ(ÐO$‰ï.~©·øà‚¤÷¦ÌE6­÷Ëv¦6m[BaæK™-£š8 ³¶‘çžZ„X¢;¤E~#Rh8ü_Ë•J ÈÙæŸÇ:ÚÉ›ñ’ GW%}1"¥Hæ3 ßá«Çâj×"9n“õl™ÄÚÔæXB‹5-ۓòºw?Ç#.‹½ßÿÒ‘Ç£j·Æ >Úêæì3­Y¢E´wyeRƒœg¢ÓuþlÕÍw;6b:‡‘t1ùŽ_0ëš]MnË¡pT„|BFé °+©áöZ2P XÖÖY/Õlέ-¬:.Ÿs9œ"¤P-²ŸÞK(ôóPrNiy ðÎèú· î4R{¤³Ðõk£sRÐXÇ#Gk,J¥è>ÓBÎCâµöÉqW>Lb-¬_jVìº[)w¸#i.’C'§/Ä$©¥JÇÚã’B8HYa£ëºŒ/ ¾§j–d³\IvTLÒ³ê¯ËŽãbìþÖk¢cLì¡[1=½ä²Åyh} “qî"„£‰€]À§Æ¸«Üƒ±B_ê¶â‘Ç ¼%î¨@¶äH­VIðá„DKE¾ÓËW·Œº¤÷ü.'UgÓ¬Ç#›W‹Ï3| ¬7<>.\w팲S(„ÇL{˜­›oi,|{Z´Ò–.wæØŠÔOÞ§ø±1?4WèßD<é,0ŠfŽ(œ/ÙJ3QÕ†J­¬n‹¡êšæ­?Õïü×oýr‘‘mlœ8Õa,Åß›ÇáRFW9H èÙê¡6¡g¤˜/湋üAÍÉ‚77¨Z98Ç,¼$ §Õ?´q…ŸrÏ¢ÿÌzþ¡«;Ý*BàÜT'`CnßÍ–J$y1‡¹™_ë>^·±T‚ «bkK$k3Ö‘£"B“^R7ÙþZe@KÞØH<“mîlÑâ¸ÔnÒžÙ."$ˆŽ€ü`µ'í ÏDN…,½±Ò¬--J¤ž7ZîgQ»¯&  ¢×ˆb§'ˆ–¹Õ(Í>™enïq©6¡hŒyi*œUfGy2êYxòðÉp½P'µ$èÚm椺å½g3´µ ÆZ‡Œj¬OPj¼nÛuVž-î“u†Öövö¯4‰¤™Ù†Àž. nkñr_µá\ ‚-c4×Éqõi-’Ç ’™ Ì"pDû*¬Ä}¡ÉÿÕË%äÀ æƒËfÅ'ÖnuÙîuŠ™b•DzÇ$|Õ8Õ|>ùA‘;VÍÀF—^kñé‘Ism¨ÚZÄJ¯«,é†n*h"5ÛŽÕNX"×̯JÓ­´Ñ¨*-ÅüÜýH!g¸U,~ÓÖ…™«¹!fü™ù1»­2{Áú2ÈKÓœ…™ˆ="E`PòFO‰— cq¤RH¨=8-a¡‚ ?ÑæõFKÈhJŠ1¹éÓ+Œø¶ Gé}Æ“§é°¬ÖbîY‚ú×w E˜M;ïÄ#«mשÉFDÓ*襤ÛÉ>£o$º‹võ^Dþðp$¢€V§Ç<×M¦é7¬ÑÈ×5µÂJÜ”jY+Ïá^ ãk4‹J¹×µ[…»Ó¢/d’˜DÔ Ï9ø¸¸$ú¡ö¡_‰}òs! S0ú¾¢×1C(4”!SU  % @»+×j?µñev)$YV“§hKd±M¤À¯RI®Â$ŒîÜ#[nDi ý¼Ç•ÞͱØn˜@šm¦© ͵œGapôæBk*'¦ÈQ>/е]ÎûåtK3Lnúæ9uÇŽ; Öƒ†˜ÈÌZÝ”–ëN%š­·Ø r‰…uGvEŽ9EÜÇÆx‘|€æørÚÒI©¬4{)—ô-³YºGëMvìJO!ëV£räj§õ©‘ˆ•ﺓcd—OŠï]¿ÊÐRÒ¹T)é‚~ÎÀ«;×`~ïñe’ lÂ!Fúi£‘íÑi$"¶–hd‘š G `÷sûU ®²c䆸¶Õ£3[K i.­ë]Û[úr¿Àƒ8ÖHPÝÊ]_FW–$-DˆCQY™h(6 Ú´ðÁÄ…h¬ä„é6±ÀÖͤ‚yaXUîQ©‡ +µyS›rn”Êɲ[…€šË¦Ïm-¤ú…¢³Æ×ä§ïÒ@çâÁ†ë_ÞU¸ý•ʆþæR.7ÚF÷FáT?¯1xbmê’¢ D~ÑË8,4ñ‘ÍÿÓ•]ëú½´„µ:…KrQÖ§e”8’µcº÷Íi€'w4HÕ.Ö4ص=6;‹Ö[; „g¹™9Eq$qF]–%‡c#?hzj¬~Ó ‡.A%"Ò5++ 6ÚãK:–·åéÊ‹B ãÎp•Cl¤ÕÑ;«ªÈ6+ð¶LH™Tée±UÔµk½{vÓuÍGV¼V¹K5‚e¹Šž"OJ¡Tˆ‡áñ~ËeƈߓLEªywXÖµ»IÛ\ŽâV!õ}ZS=&D5àÐR3 qb#Sö›íeRöléºsc¢ZÃ{ipZâ{KeÏfÑD¦Ù‘Áª1åJâ¦ÿ ñÆfÇš_©Þê7®·Z¥£@­bý¡éÜ;órÇã¯%¢±ÃaHÈmo©æ"÷„‘[éveIµ4Àÿ2 5ørr4(1›5µ¥˜½†YeÔo Év²LÂÚUŒãÅ@ © }ŠtÌx’v“l¨rKgÕ™Ü á†ÕíÕ#HÄÜoˆJÓp@̈€Ó$Ž/0[jSÌtèe¸³Œ•Šö† ¡“v ß §¶_MG4ÎÛV»U¸}:w22GhÈ«#ȳƒË; ?hä:îsIgòõ†¹ ú7+¼±Çªé£…ô +ªÄ„ Z+¤•UO‹,‰‘ŸÁ¸Ȥ–ÑyóBŽ]'Jó,·‘H„&“ªZ? ä¸? Õ¸¢rþfÛùø®Yq;”R:×Éúäo.¡—šõÄ&cwÃ*+ÈjE ‘é¼TS¦S)È{™Æ‹/Ð|¥åÉå±Ñc}V<µ¸ÓêìmÞŒúÔõH岎ùAÈL·m0 ¼és<]«ÛBIy ÓRuHUváê„i»P4œÏÁ–M_W.N’ÏP2›™õq=¯þ!]9Ð!P£âb6§*ö÷Äd³Ée J|É£^ê)#‹£i§ÙÉñLÅ Š8øÐJáA3LZ¤&Ñ/ÛrO¾4Q#ªIer¾RŽÛHÖmF›«jŽ÷VVív&7äì÷Âqâ>.&Ÿkx·²”i™ZjÚu͵¿èý*Cpä$Zˆ%â–I §7SÄÐÄÙý¬1Ý;³¿Ò4Ø¿FÉÆQT­Ô ‚bÔ’XªFÄWÃŒ¹±$I6£¬4Z´º¥Ú1L®Þ”Èà¬)¬@%Nõ :Ž™.–±Šel‰kêz1K¨, ûÉw)nP¨v @ ŽæxŸ‡íåG~m¢ òj/ÚßNu‡KiE£rôn!Œ:Ìkµcßš©ÜÓ€'‰åÞ±Û~äMÕÚÉ ±ÂQÁ1†܉¯ãÑ·ã¿Ùɪb%gtn¥kú;ƒ-Ùr- šEŽv‹—íµIBEv><Œ—0™H¥\ùZšÚóU°ÓdÔ$´F:lR$0HÀ ™T‚¹|L­· ™´Æët%ÊÜj0Xh“»]YY$V×:œr(y®'>±dU?©'“~ϧŽFú²¢6j×K6fXÓ•¬jLµ4Z4E"¼*ŸÚã¶$‚µÜ–_y?NÕ¥YuûëÈÓÓámki"‰„ýØWj¤Q§Y9ræ131ä,²)h6úu´pÜÚ$ `àÛ$ô§UJ—e}‘}A³1 Ç*É;äÊ1Ý—=•ŵÑk;»huUd–5EŽˆXªÇ#oVQ±zòo·ÐàÄH挆Ò+Ÿ6é‹{õ[»16®Œb’E,#Œtædòe;¯gw‡ÜZîÅsGÙȳñ™XBè k‹ˆ™Y)ÑÉø™–¿OÑ w êÖj…$p$ 8ô¢xÀõ ‰¥HêÇ’¯÷‡ìàˆïn$Rm?R`¹·žh®Ú¢%G©ÙTÒ›R ~ÖÕË EÓIH5_­Ø®—u)˜G/[Ù"øT"îôR*U¸ôfaªÝ(KEÕáõu­t´÷å+ge¦ÊðEä9>#8îB¶ýòŽœ™ØåÕi¤ÜÙØÅ<²F·—%)c;ªJµ’YéûÐ6þU¯}±âÝÜy‡C¶ž[/™T» m µŒ4pÛ°^|ÉEeâO«OV¾À!‘éWú&‰¦I©ßjxâ‚A MÎ{»‰èôKÑ)Ö§¶$r*ýî­ê/Ö¢Wr?H1FtŒ°ä +€vŒTàÆ,îÕ§}<ÚÆ×ò [r£ÔºŒ˜Gì~KåZtÉ€C+J½}%îæ×m¦ |Íè­ôÌÜÛ £pZÕNÿ´ß jdd&È¢u;û¹-îáõ58I·´»œ+Ý9?†rYˆëöÖ4þn¸Ð ”RrE{¹.¥/(SèÒýbH…xDTnWí~}¾X H ïÅîžöÊDY4•úÀ.:04;{xäa[#¦ŽÊÊÂ=_Y„ª d‘ù:Í5~%D<÷4ùqør4IÙ¡³:<ú­«<”’òWc ð¯) †¥‚ò¨V¥z/Ž@èš¾©Î“å=*ÆÊ -TÍ~f`ì¬G¦³»|ʼ— Õo†Ÿµ•Jr½¶f¥yl-´6¯Ã})YhðÆÿYCn‡’…ˆÀÔƒ!SJ`²¤lºûF°¿7‘iÁ­zZËxþ­´3­%ì5W`‹Ûö«•HHWsdd:±3Úù–È›½ìD“C ½Ä†·PÝÈ­¾Ý2_6F#š>î{ vf´^îÓ‘„Äè`HË}®åªz(½~Î1óAäÆ5/0KVG"Ã^»)·H}M–B½°$ò-O‡zeЮRªxº6Ž4‡Ž!þ›ƶڌLþœVé'è2E[â£Mºª¥sŸ6ù˜‚I–ü®­ÍdÔ5-Y¿»ë&Ú5'pË @õ7øHýÞùfZ‚}eýj;;Ý8i1å{꫼)Vdf/öy1nôí<¶æ£šµÛ]Å4‘ÃX`"âÐ×v}Ïv­¦æ‘·"¢úE„&8£¸–Ú"þ»¢Æ°L6d"¤¤u=þÐý•È–ÃMcY­Q!¿iHÉžydç%¼üè}v…ƒøG(xñ^>9N÷l¼—å» g"Õ…äÆ$Š“ÈõôId1‡éê–ýéa—"7k&)G›¼Óc¡©Ôõ9â¶–H‡Äª‘À%–µvã³¥?ÊãÏ-†-Úå2Kҵɯžb¹mFâtoB&1K'§!¡•£`µQ½K4s–H z= ã@Ñnì’[Nó Ép“]êñ¬à(ˆ;9ONO_†½°')q×'+6Å5S¨¢Kr˧¤ÌLŽ‚(œˆ£a,[$dòUZ+?åË„Ã,cšSj5; ©j5{yä+E zÕÃC¡#j¡Ë×'`±®æPždòÝ­“ézœëa©I)–×I–EvI.8¢Fóºò§Â©ü¹M¨–Û&w^y^Ò {ÉìdÒÕÖ#–ÒË#LhåYJÖB„üL>%û_g©-ï±Q—T·ú•˽«wýÜ‘ÄLÞ¡5ôèÄ1r>!–‹cÄXÕß›´.AmwploŒm5ÖŸqo/×íãþ{€¿`FÝw*EÖZÿåÖ ˆ«uáSúZÕcFiýÓeå^?ë/ÈäLg}Ø®H=_óZ+E·ÐôÑð¼©iJvW1ô׊2’>/¸að‡4#îd {¦]ÇòyŽY ͦÙñr±FjÓ oDUø¿—•>.™I±¿Fèï²åm"šËx¥†Y‡¡%ÅÔþªž-ÍÞ OBÔ}ž™=YT‹·¼µk´š7¹ŽXÛŒbÖE…‚Ê Ò£~DË$CH,Í/´élDÓ\K 6ÀÃ"Á™Jˆø§-)ÑÈ÷®T#LŒìÐ Ìé©'%úÚÙX]²G%ؽrh8ª‘Nu'ìÁ÷Ëc¶Ì´¶Ùu*OÐÅ–I¨byn£2HH¢Ü£bt_µÀÓp¬WâÈÈíl„zâA¡‘¥¾I5RÅøÇ#Çok!ÃnkðµÊŸqÁŽDû“(Ò uãÁXÔ—êÒ‚Vè¿Vê%hÀ ܶN—‹,0½šìƒhKùdÖÍ-/$NCÂ×Õà¯9ã”×ìÄ?˜ð$ŽÜ±‡Ÿ5 ]¾^Ó‹™5 ^k)Qƒrž«u`¡”ŠÔÒ¶Kz@«Ü%•§˜Yç·õÖPdPVx 'c¾À¯Ñ„m²Ý¦Py~uqklÁ¤U%”œB7•5 ÄPj2» ù&¡¥ë1ÜM{jðϧ!EkE/êqz ÆÒ=K–¯.B™ B*÷ Åiæ/2JVk…Ð4YŒ¥Ü«ÉD ²¦ä*©û8ñ¹¦­ u¤6s“kµ¾ƒh®¶[¦ ðÏÚcÝÙÏù;ãwÏšS™tgó©§Ýë"NÃNe½¾ÒÒÆUWœL"ãJ,YS—ÃJ~ÖVd <ÊFå©_µ·+8eRÍÇÕÕ ´ÿá ‘[Zu E© *¶Àöä{d“#³3»·Ó®L6„[ZÂÓOtì€Å ³ –*ÌO¸ß)1,„…±À×wõºÒïŒc›@œgô­ã‰˜%b•ê r)Î?¸ý®8M‚Èî›A´«él­£¹¸»æ‹mqè~‘N ЇU@üÜû\ƒdùóbGu£]aâÙd‚ÝÈ‚îâI22dHÅy±=ÏÂ2|[#É•[é³XA°FòÊd–xÊp ¢–‘ íö©Ó+µ¤ßLK˜mZ;¸ »HìðË_bÄs%Gˆ§òä%ÂNìÁ!JâÛOšâØýváoØ1š8â%¾¯â$’M‘ºƒÄ}•<òK`Û±¯·–ÛG·•aºORDoL´f’G1øUKq^uZùI¸^™fö-¤ 䆤÷µÙQcu:z™IŠíá4õTt §A²vÁ°°ÆêšMÛ®>lÙt¾Œ‘úq;éë7,õW/V£*†ntU<›"MsHõ cwš¬YÇ%¥ƒÖ7I¢;§PBíg¥+Ël#š%tPÓêúbFá8Y•‹„SûÀ¡Y–ëË'²Ç’áb¾¹NÒE¯MÂ+q~ì™I¼Tݾ/ò²7^äódÞSÑì4›+GY¸ ªZË5¶Ÿc!F,`­U:F[’Æçãä¿cpùVC#Ë“dLcÏ›ÿÕ6±¶µ¶I¯%KÛÛ¢ñ¬1 Õ …Ãi9¸bì²FµcûY¯5AÌ#š{¦Çª¬‡R½ÒR-:`²¹~SC,¼~' @chTñôÍ~-éŽÇfµ±6ùf¶,ZÖ @Gqw%¿ªì†çýÙs»"´ #gSÁ~Cö±Þú7T”Ûù{A±X-o®&½°G&êÚ4¶D1†¼,€2ÐŽr¢º«³ü¹>"yl×µ“½ö‘>¥hÖZ¬FEþ¡$2«ÈìÅâ&äTî´"6"àq£È†>jzþ—s¨iïkgqÈŽòŒJ&^\k5IrÌMköÁÅšš7Nò–—­Í£ù{N‚9›NºNq•J¸$LüR¼É » òmò³+ß«0xMóe—šy·†ÆÏD²4ênìÑ•¢¶ °ã+ý¯ƒÀ@]ºå»ßàÎuHiN—§Ä–[hV¢ˆzEƒüAiË¡iÌ‘Z8ÀJõ> hÜèóA2Ë3I0’u¤±òtRߌtîNì³ã½’ËO2Ð5¤º·DBÖö¦Wu·Œ8œcÝÐÓuì»ü9h„z4™KªØ¯V;¡cŒž¬ñ)šãVRµ·£6ôQñxäHêÌI4³’hÒ3fëq('”L„ÆÌ>ËLXš)ÜvöÀT+%¬ws2¬¶æGþêe&5jÔ"©Rµ!ÃáE´vŸne½TKyâ–8½Gž$£¤­ZëÈ»{uãû#+™áØ=JWw‘´zb™ÒöÕÄQYÙ'd‘Çï >0W‡ÂNÝG¾B̲‘ƒ½¸¼òär__¯•ˆŠ¹wHÊxP©§ÅMþzæH"{4Q‹¶´Ò.õ«Þ\Ó,¥­fˆ,öÐJH<¢µ”5xôRª2ÂlWF$W&Aµ¦jV³^jÓݸcòK vpêåX"[ÆWâq ÑÎëé·ÚðÊd(Óp²-KO:地[Ý\ÞhOÕ> ùå¢>Mwa`×åõ£ý'cõXn[÷:m«z“FìCCÈîA‹€€FÊ ÅÅ´ÚÛêeœ0\ŽbÝ"Žž ~ÓbÜö4<©ÀôÈÄÞÅœ·6]ÊVçT6 )Wrd–åøR¬ŠAg;¿Çö¨¹=¹y¦(ó\YȰ+Cm1øï%²;ÈôÁ'‡ó7Ý€¡.‘†•u¶Éyz²EmÔ´ŒæŠ€#€wø¾Î5`ÚÙäšËn×\ëW6„á…êÊGTB A ¢ñ]¸øäkm™Û½ÓôË­ÓE¶–êþÚNH²3¹“Òõ˜ñÜ‘O³ûY-Ï5Y¥jZ¾Ÿ¨Ïk“QÔµ0«|HhÖ$B,ÈI+TîÖÆ@º· êúÍæ%Ôbœ¼’ñp޳µ+×d5Æ`ÈYIa¼›P ?ÕÂÝÌ~ *æ"#*u¯ Ä×üœžÌ«mÙ.™§íÏ”í´/pí$~ cÅHˆÝ¹±ß Nê(5¨AF{;[x¤ò„hN±¬Ã"+LËB-¡Oˆs.jxŽ+ñòÉß͉Ú„–k±Y[Y3ÛÙÉÛÙÃ?+ÆN5’±ÄÅQ"A³Þ=à\Ï l‡¨Rf—Ÿ£4›{3)†âÔ‘f«¢ýa‰ç*ñ$‘QÄGVNãjdG¨ÚÊ5²m å¾g%͸h.eá Ö¦.˱æh  mâ»àæƒa.i.Y庒ÒöîÈÎUV5ø>ÇÃ+ž5¯ítÉÈ€ÄnUÊc ò™ÂÔL¥ý‘¹ ¨ÄÆù 4™¥úϧþˆ*ð«UäHdXáVœY˜3QA=År'ïÕ#-è…º†ÎÚV±Ñ¢Š$õ=$ŽB%YmÃÞ!zª”Zq;1ûU刺óH;ì‹°¸ŒÝµ™áGH–YX£-V©<˜·/ˆT×–K€03!u¬K “Ó˜ÜMnÁ^VsyœjF½´½ò±Í•ìÔ:Œ—kqoe¦&àÕ”+ò:¸‡§/³“A–RR8¢·/‡ßl®û¶-·Þ»Dòþåk­JãKÒõ tÔùÞ^ê·ò tõ’‚.P0"=Øs^U“ál&FD¤ä§žc¾»'–•ý¾+‹˜âõÃòV>E˜¦õ«(•g½Æ›DJa>Ÿæ})g‚ÚMJóÓÚr '¢¤UØH~È"¿/¿+‰e!ÉÞ¯õÅäóC T.ËtÏ+˜ˆ¡P»¥¿ÕÂElŽiøe’ÉæŠhÝÁ<*T/Y(@Rk@:S|•›k#e]?MMM'úœbÍ …ƒZÄVÕÖ D[âjÏ%âëJrÞ˜2zj·X‰(”Ѭ淆Æv^qòªZ3+«ÉÖJ!© Ú»ÿ“£Äd²ê ’ÖË˱Ȧ4X¾·pæo¬]FGz¿ÚøE{b/«"„3i ê^×Ö Å¤†%’Bò I©üÛßÝÜs«jjtÝêöÑ­EÕÍÁbc]ª…Ð)šR§p‡÷]9m‚ÀܤܒÍCZ†^×G»Ÿ€+Â8¤2Èì6.$=Ewiì>œŸx@•òH¯ï,šúF²–/^â ³É-Ëú¼¢²ÆŒ yõJš9 <Û9샸½¹ÖoF˜á­¯Õâh-$ø]!”òõ”@AäÒH½¸¨ïŽÀ[ z"¬ü¯ål ëÍ6dGGë´OYíà>˜–Xˆ"¶Åù3ºü]0qÈ„î+}/OƒÒ¸H͵œ Çè‚m#D/¤Ì €AÝ~Ѿ"-W²µŸ•ì¯íÌúykgU‚=5¦l‘H9sX9„bÄQ&;ÇZdL©²ìÒ†¢óy^[k[(yT,kJ1­X#-j±å_µLbx®Ø•××·Z~5ÅÔ‘›{½iá^5G™vA’¸¡WÃörÈBšå>#怇ëã‹ßY–†3Úpã\ÊT9” TUZ°^+ñ7WÃ:"a­jÐÜji÷r› ^eWÑÐ¥,NwŠR*#æÔçðäc·/µ‘åh«MOô†•vòYh,îÍÕ¥ÍÈO!áÁë ÅÔ) zR(?ääeŲc*ŽúáÔ/¥‘ìme»Íj7nR ò$BxÛ?û# PDBêRV-Iž(ïmæ kt”žEAP%äG—OzxžŒÁH û‘ih±XȶÓô¥ºDŒÌIBb*¥‰­j½úaÇÍŒùZO¦h÷÷gT‡YšY¢& m8€­;+Q«· S–åÛöm‘3£TÈBwkO#M}y¡q2 €IÊ;fzUÉ 'ÃöÆ¢¸Ha"ƒµÔg]VÞÖÊÖ CX‹Ò»Œ\7ú9H˜:#°  ä|%ÿàpæ["K ×ÿ1u/Í0Cå/hvÑ'–òùnýG·&Ðò¢¬D²!aÊJWŸä®[áÆ‰nDÑzF‰åôÒ4ÍIu(ôø%Öc’k„Ž8Õ›˜Ò ˜ÔÔŠ?ÃÊ&\Æ‘ÜShH4k-)?Ñ.`ŽÆ$‘‘瑞9bQ¼eUK V¿i—¦#.mt-"Ö=Zd0]XÙ/&s£Ãªî4PFûÿTåÃf7eBËíc«= ¶Õm¸¼V¶í$‚âYjªÂ!TR”ª“ö»ãâžC’ð®hì´k^Vöñ?(-$gàî½6PJ°?½(1æWzÙZÊßÏzÁQpöv¶?¯pK¥$–&Cñ8ôÜ7J䉈 Ò®­gÓ¢Ži!ä¶ð݉‹•I¬@«SÛ!iµo«˜9F—Ñž.ó@ò*€à–Áj­ï÷a pëz>«qæ›È`† bcÒl%V¸i"Ý%¸$LìøþÑðĘòHw ¨Jï2Ã%Â9 «º°æiÁéZ;:bi!4Óm,õF-?VÓ —ÒÜ}bV[iA,d§Ð …GžB\¶d &¢þÏFÓäÑ´Cmox«õ†`&v<‹W‘«‡áRƈ¢¹¤²â<©ƒ¥Æ«jéw`^{X.ZÞÚÆI}Hd”7);=w?—-£[±]&óhRÙÏõRƒÉÜ¢(€;ž±mú ÿ«Ó&?¯ù‹Ëz4É¥ÜÈ/'<è‘4†Y&o…UŠ)$9ÝTý¶rË!E°$Û!Ñï¡ÔL'ZÓ%Óü¼e1ÚÁ:ÁmU”Ê’*–-¸¡?¥û;×+#oIÝ—#e_HÖô½[Í—ÞW1ÞÙi¶åÓ™Þ³šIF$’ìB*·Úâ®k#8Ðõg(ßé[ú¿¤ IŠÞ5QÁâÌœÈ5J­Ÿ‹|€?$€+emCPô'–÷D±¿¡!¥q}=Ûâf ±&„SìŸÙë–\Ú®Ò7SÕ®oµKXÚé¢v‚ÖгGl~}ªzœ‡Úfð¹)QÙcYÎúE°‹[{ª-œ°H²ÎT´Èî‰?²~È ò6²Kži \¤&òá\­µ¿>D‘»²Ð=NÄ/zäØlš¥Å؆8&AëL8‹«b>®dêä/D(¤N“Uø€qÃáø~9]S)q[>¥uþ™jóA¯ ÷Ívôp¼^œA­áãü¿ 2ñœrl¿ÿ×›ÜybÃÌ(Ö·âÎv™DÔÃë:¶á½C7Âè ¨Uè~7o³šÉXÜ2£·ò÷•ü¥s«ÜL-{Ofq§#æ„ 6@’¢-h úÃö6ñJU\›(Vè=kÍV:ˆ´¹òö•<¢}î쬭 •üq&K…QŒmCÆAð6Y×ÔX´ëKÔtÁu>Ÿ¢´–Ö*]ÙÚêñÔäuøafP¤òoæSÁ»uÁ(Ú,…÷öK,’A,ZµëÏÅ´»É-ÍÓG$Š_ND+ ‘—â\€åm’Ýw–ü»se5êë¶_V×WÕž5d2G´kñr±PIaÅ)ñ`œŒ¾•°9®¾Ò´}]æšÞâñËòÆ/öh^8¤±åMÍ:ä¨Ç•0âKl!×-ä´¸Ö%´º‰ÙxÛ,fÙ¡™ˆˆøÚ£ì¹Ý¾,™ ±ù¦¨\J÷0ÚÈâåH"Eâ9©¯Æ´ä@© £|˜Ø4žieÇ™ïµ[M?NúŠFR-BTˆq3 É¿dÅéñ;ð’wC¶¡b±}rêWŽKqû‰@˜èP/í‘O†÷dùµ~|Ô^ÒækÄ:üêÖæÚÆÐÅ:-t’ Z(b®ÜGú¸8¶ !v‘´ÛZëïO|üÆ“$6 ¼Øw)þ§Ø¦"q‘ ²Qd)«k:~²á n¬DL¶»0¤•F© ߎCil¤VìV{ˆ¼å©<>­¥®`D×1¬œ$y€â‘úQŽSTîSá_æÛ%"G.¬¢.ïš_)Zê³.­åË»«5±ÙlŠ4b½å¬ä… >Çìàâ¡EŸ.hÿ*y*H¦>hó„Þ•ÔÊâð:M{| ð”Q½:ñ þíÖ¹Tò¹¬'žË+VŠš4º|•¢„TU…\ý­½.<‡ù? 3ì‚y¶]<ÚÐIJ^Mªj«#?;‡0À=P )Á–$d§Æ¿ìæF>2|še(Ët›P¶ó¡*ZéËXÝÈÒlâ8•EFt#‚‚“¾YÅÆÌx-3ºÒ%T–Ô\'éE;“m ÍY* ¡Ï„·…2¸›ß¢di!¶¶µÐ5h¯î£–òktÆöêêYÌ“°ø›ÑˆQ¯íóüœ¶ÉØíÑ1Õ­o,Â]ÜYÁõ¶Ži4gŒ°žÞ) nx³’BBžŸ ˆãÓ!\YÊeYdø¤çÌq'pˆ}žY(DÖüÚrf¹ îµRB×CÖ½¹v *ÇÁù×á éñØRƒˆÿ$×-î` 惻Ôä¶‚)#¼¥ÉL ÇEË£,{OÙ[l„cÐÚúÊÊâ;¡c6õ'¥¬\V•eøU‰‹í}¬‡QͰHŽh¥—Q•cÒf{[f&i#(n¥V5$"ôVåZ½i\?H²·l®ÆÊ84+Û‰eŠDnrÆ)æšéNÜݺUjãöBƒ\¢~£M±Ø ™mä¼¼¸Ñô×´´‚¾¥Í´B™Q‚7à ßÏ–_]-ªˆO4Ý_Ì3]Ï©.¤mtH¢ i— ‘ÇX;”2‚ÆgF²¿g#!]YÄÐV2k6ZjîÒ’«ª'Æ#ò‘£~¼Í*K«°ÂêÄD¯Ót{«‰MܱIp̤µÔ!DQÀçããê„á¸øˆ-þN$† ì]ZÚZM¨è— }jIKÆmÔ»€Wo‡eܵ‘á»;)ò:ݭΠ÷q$cÓk¢Ey)ÀÈiÂ5åбo‚¬Ã¦<¶ ¾õOñ(Ó¢seb·QU­ZîÍÕ´·—xÞACP y¨e_³û9 V1´¸Óã…_S¸’ßV™À´’qÊD b;)„SfÿX{aë·&7¶íG®_ªKœE²ÍÈDZ„Ô-dùTåœ#«QEyyçºÔ †ßR[ V̭Ͷ¥oé;_Õ&gÔnl¡[yV(¿t¶ß¼Q)o©ãñˆå‚<#f$¦zW‘4ÃŽä¨%±†á^îDÓ³\È —y«Å]B à‡ýUß*3ú™€Á¬nÎQ¤zSC‘F“a‘ȶrW/Ru;B8iCOÑ./¡ v;)I+š4“ÌÎ#,ÕÍ)ʃáí‰5½,@=SkxKÚ߉í®mÑžYÂɯíJè6 ±ý¬¥îAØ µ-Xµ •"[{ z³\út§-¹U@%­Aæ»ÿ—Jäø‡.ª"y…·Äš6–Gq 賺´Hæ$1F€‰H˜ñâ;S›W*~M†6½Ÿô=kÌ–6Ö­˜e³ÝÜFÒ;D¬ëéð+ðЩØð웢±/u1y"i‚M_VŒÉrQmžÕíiˆO„V06QÁ¹4Däm uæmMà²ý¿ZšHþ³|¬#hR2OïjK·n?éÛ.ðè]µño¿D\¿YµãÚZÅilÊñÛÉ'Æ9ìÒ;‚*E@ÿcËÜPwBÛêos$3ݧ­n%wkc¹W#ŠÉ&Î"iéÏl})ã¾{§×v–×jo,Ì:}â"¬2Ǥ†•* ‘J¸U ~òQñ);ä‘Ao„ïºO¨ÝÞÙÚZXùŠm6öãVS+}UÝŒnŒŸÔcBbm‹¯ ¿åe¢¥¸c¸47 ]Ä)9@Ë(“ÔxîRRU£A°W$’HÜn :ý¬•Öë±LtÝ9æÊúƒ2Åj’±úQ€O0qQM¹|?~CÞ·júµôÖŠotûwÔ.Yˆ•G+£M$nŸ»…6œ×Àä£!ÑŒâÜ¥vv‹§ZFf»¸´³ZCedäİæf’:ñZ”ë‚Édxy£noõ½e’kÀ†+p§¬D35}$‰>2Ò‡Ñ W²Vú^¡$1ÛO¨1²fõcµš&x+B©1 ò õ ]ÇÑ“ù)îCè~TÑ#’Y\Ǫ<üã€(x¡rTò“Ó‘P(?›ñèr&E“!Ò4ÍgUIu9­’ÖÆU]]O*˜GðÆ#hþÐ*ÆÄSl‚hóFëRJ¶2CVÖ#•–ÞИ¤!> ‘IÝŸ,€›H‘%wZ†¹t©´³ºð-¹¼Gˆ}¥ô¡YùíÑ›%ß{"L—Åi|·ÛÝ߬–R?˜ã Z •’ŽÇÇ·L³mšxE¦zޱa¦XÊëm~gW+pº§4ïîK@ÜZaɺŒ¹qಠ`%Ì$v¾e‚ÎÖ9.l×ô Éy¨[Ê—´v.‘*ª¤ 4ñðxo‘¶fÁ¥×Þaò½”FK9Vh"ZÝ_´‘D²9 (Ø|a˜Ô“ö²TO5¥Vm.+ˆçž{bÏÎHýK†x¹œ˜U&R 3»ä¡s­úö£N—TdÓ. IèÇÑÌÁ( “P7#ìÓl•Vìw&›–ûZ• »°EÒUÂéì€ÍrTš3±e»ö)GäbGÅ2‡É^]JUµ{("·FêÜë©MÝåâÇÓµvjÒ¿ùdCL€&˜¶÷Úü:tX}R4V¸Õ!žFÐl•£h=I”|#¹µ“œÀ‹eÚ ZÖ´ÿ,²\ëZÕ¶§ÄR)!„-ä“LÄcm¾Ï6gÿ$.DvNÄlÓ|Ï«qõnv×—jK\¹«$q*ì=:Ñ[ö~%®7 š%µ©aŠibµŽ[¹AW™ ?  F ]þ"To‘á²›ÙéZ®¹µÇ™4ˆáÑìE¸Ó¬‘åŠiç,'>‰XèÇŒŸ½—“ ¨ÈE´ üÓ9.o.é`Gt®ñDém¤¬mÈ4ª¾˜,\ŠºÑ› ²T“Ü‹É]¤Viï¢ßJ$‘€Æd yÊcŒÔÐÊÇù/<«Ä‘<í‘G[[ 6ÜK+GjÕLÓdÕ¾^_g!f=éÅ&)mæKheÔJ™ h\,C4¤L§€2rFãûC' ÷ sØîÂõI~±s$1¼"·s%»4±’MQî:WöFeM_ýyÛNÔu‹Iv y¸ ò4?acpŽ„ÅzýŽ;äH5cšD·Ý©kz~•¥‹Ù§–édqg¦¤¢Iï!Q£¡b…ZJ}£@6À.9-½×.´û5³·´–êi–¯ NLfS¿Ú*¬kº•¨R§ ’γæ¹<ôÒùCO±ï-„qjpÅ2$,̨ŠÓ|-鍸»rû,†˜DDE§pyóz'˜,u õÓ,u„D²ÒWÓŠ$HÚÖr«Ä‘EZr£qæÝ~˜˜Ï:êäMÚ”Ð%½ü³«ôÒ&hÔTâ¼h´ø—Šñ÷Ë"7k‘Ù†êÚ…ÔZ"k0߯äÜ\¤1ñŽÊ¹pìCK+®Å)ÃîËIáÞ˜B¤§ªInY®%»´Ô4¤HÓô|1§¨±ôâPdãöÏßá\À¢Ê‡DÿR{­>â;.®£¨jÓÆng³0™ÒGBS›Å U °f-¸Èž[¢![Ëóë—|íæ+i>­*‡‡Q¼·Àô¸I¤EZ†á-U\ª\ý,ùiõŽ™gg¨Er¢é…´RÛ&Š5„«‚#±ZQi_Úÿ'Í„”_ÜjrIÚ¬*aíV'Z,$Ð*´G?´ý$?g'K3h{+]G^gÕukÅú­‹)Šñ…, M־풙5Aˆ šIg§ÛYÅulê·K‹‰åi$Y_d<£'f¨ä„|ÓÛ1áÅÊM² rK&Õçk‰Ï£Ý¿¤X9\4hà¾ä¨âGí€6®dÄ™$Vú÷éIgšÊÊ_¨Ê;›bWˆ5=DE£¢’c¿¶]ME&1ê72Å;YÜKJ ¶vSmÅ€Û“Šxäwd”Íåý3Ì–±Ç꟪¤¾õÝŠýVõ%XÏë°¨^jQÇ4ß|¬ÈƒÍ¾'¡I-ôÏ:iQË¥éd¿– þãµ[sq¦€¯È“¬÷vìÈ…9hIè8³vfåEþ^XN%”IüË M©¹¸¸¶–²•VhÖ4#ŠˆR:rœÐò’O‚>CŠ—ø³"$MDŽGŸØÿÿѦÁæ[ç:­·Õtÿ$éÌm-µ)—··ò§2ò[¨)èÂÀê<>y‚dáæ\¾ vO¼¥d×1½µú4Í}U‚$‡ÖºÑ™Rªq¼ùü_gã匧½1¹0³±±õb·ÓuI¶µh´Ëy_ë ÐFX;4® sVcVìZŸºf@<öJï­'³¾’ÚeŠMJOM®&céÉ#§ñr"5J»dmGŸ4§ô›Iu›s’ÆJÄ„æÑ©-QPŇ€>ü2ΈŽÊ]Jq-̉õY¼q@X»Æ÷~«*}Ǿ$¬HRÔôŸ1Ky %ç¥eCŠFÆ(ªѹ"ˆlyo‰£d‰#¹3Ò5ýsA´ž BÆ×RÑ/*öÓˆÍϪª]]51öªÇÑ^¬¼Ž&>L@;ÌjÞ…­æ‘v|Ç}"AcoGpde ' ` Dâd‘>Í7\ErxMìk]*Îîk½Nslñ†C2¬-,”<Cð¨`v _ò°ý_K À¢€Ô¼÷§M*XYÍŒüV{Y¥WdH¾%w_…h6¢ü#ß'öèßÉúvñÃ5ú@ÏIhX,ñŽ?gÒ€oQí‘á {Û²Ô=IÒU¸žÙ£q"Ì%Q*4Hx¶çy)Ë¡l£>H;CD!mîîd—Q $žØDUdp‹ÎVo…9´¡Ÿ%D""ÓR?¯y˜AwÁ½;84›™Ĩ¢'úÅ 0 µ)öM3|öÙÈ“;íDÂ ÝÆË³}NÚÝCCD˜ZŠHûLvä7S&?æ<Sz6B÷A})eK•gX¦ô­ÄWî̯mVRË+åºvºcI¥Z¿Vxä‘nœ@Ž@¤©FÙY¹]øöÊä;ÛcUæo+j«luue¸´â‚èݤ/r¯"’MÎûB¿`râ2C º,L:Ú <­¥“<ú¬ú…Ì!&¶¶¹’VQèDѼmFÉÕ.g,3-`oÉe¬bÒy.ŸTšöhÕ£x¦i(êTÔ!ÈÖÜ’k“(·iÑ-nM„&&Iaš^FÑJ+ô4ÛàÈðލ•îu mDÚ×èèín’(¢ƒcRòV*UܱûF™*º1Ü £kFxŽÔêî ÷w#y9å¡dSà¿òäjº6Š)ö¢ö;O{3f„Ök¡;ýa€+TPè ¨ÜxïóÊã¬åRGz¶vvÓ½ìÙ›“KÀ–-ê-h?’¼[—Žd ·œM0]WÏú·š~“o$ñÎà¶~qÂòʵDIéÊäP§>;>Ù>Þê’'Ém¹[=_V‹JšUwºhT‹—7±£+Ìľ¥_ÓXKW2¬†ÁÛâxH)©HÓ¡»K{ m7SiG­¨2¬· ­ð„fj’^®2 ûA6y&:–µn-î§‘ãÒPÛ(g•èJ€ !ãCøåsÉCnm‘Æžê~jÖ4kö™/£¹’T¾ÂÉr¥T«^œx¼\~×qfØÎ¹÷(é~hµVKfñ]ýZvCé²ÔÀé_ÚZ«e†Ã~kµ_9ÞÜÂ,ã·‘ÂYoôxå•:TTÐÐqû;|'ãŒwê‹'cÉ"Ñ´ë .-jÝ~¥'©-äg›H åcÐSÇ ¹mÍ;·§Z\’ÃTèйôìmŸêȦ^…UY›p7¡û#|`MoÍV!¢iÖ¢=5…­ë¿–$é s»§©ïNH~ö‰Ã½î¼Â¥ÒÙÀæÝ-î.õE5–W+¤íºR¿z|*^Õ ä›j’húužŸW¯§Y#¼Ž1›¶`„<8ÉUjVfðã\®"FÉg)FØüú½üšuååÄhÛ\Ü›~P¿Â¢F,Wâðä¼~ÏÄk— m³·¹J%Ò D-xâ<”G"±TO†€nµR(w%©— j¾©~¥¨Gu;µ…ˆšµ1^\8‰9¥ óc_äS°‚:£,5ÿ4ê:´_µ–¡{nkhN¢HÒ!¸HKŠõ }¬„¢ob•ëóÒCZ´åu¯ÍÈ÷Þ%½•¡¡¬ ¹<7ÝéWfâ¼pÇaä’.[°+-gÏú•­–‡k§I«$²*Ø[Ä‹yn“2ƒsq8 ä<­³Êį/‡áÉ’>LåEë¶ÿ˜šd¶ðÚj‰ߦD6ÖóÉs5Ó™íІ~;×m¹àDz·€<üt«}Lê úuÕ’çHäÍv©öÁ¸rH ‚[—@™–—¢Y–EžáP\Îê¡]V]˜Fzƒã ÛÃ+•–Ù iÖ«pÖ÷ÆKx] VŠ­$´E«ÈÑJ H¼þËø½Írª!Ÿ<¹ªÄÚu»E%ëú×Öƒ“\^2Ð3Glà¨;Gý˜xI,.ƒÔo¼¡sq7™õyÖ?+ÛÌÖj.anïúk"] ±ƒÉB/ò¹©ÉVõÕ&¯½“ùVÞÒæ3l'·Òm”Ì–èL(c4ÝÙž~!CV4ýœ‡D9£..­G9´´k››n^Úô‘ Pq7f'ì×o´qš“ÔõÛ鳜ÜZêÓ«Cw$ Œmâ“nJëTÜ-!øƒ}¯‹. R‰do¦i-£2”4r,ÖÚª«E-½´pª–*䬨iARy?ïM:f,,Hîß*1¼¿äô‹}2KÝjA_Zúåâ ÉHAð?³/Þ3 Èõj§¶É?×"U²‚ÃMZú“Û?©-º/EâÁ—Œ‡©Óà yl£šë‰.Ù˜DÕÜò_M”BTŠ4©?äŠï‘³¥Ò´ßZ8#–h9A qI¢wI\F[zxU¶ûYY‘¦ÓÓ8"–ÌGâE{bZk•y&Še”Õ¦hêÀ;ƒû?eºQ@ʅݧɿ[AÓ¤aÓãŽúâHŠº´”ål) Éà†µ±Ý³#†DnÖd-ù×Îv:+íBð%ÍÜiN¡xz’-IUAñ3õ>ß¶…îÕ,†EèÚ¥ÌÓFa–iîY0ƒÍoƾ«¬È´sž&?NTsÿÒ>¥x×öÖ2ýpYŬZsDK<­WÄ(-Rdè+ñS0PºBêz–·deŽÉËpOM§1­ÍÔ’>¤ªÁˆPÀÐqØc„XI‡éû…Ô/5l´Éx461B'Yh¼d¸©$ŸÙJ/ítËr J{9ÑmtöºtšÞa_Vö턪 Ž@¬ÌhkO…+Ëþ Ž;Ú6­Væ®# ¸¸Ž’}dQQšª¬P2òbv cM°v¤¥ñÆðÖ÷õ¹Y¾²ò§  ‰ê«þHJbëS˜4Ë”±ž$W£Ä-y*¤t©W™ß‘´Ù̲&ÊI§Øè1OÕ¾§sQ=Âݼ‘IVä°ºTƵ?Ì>6a³ „̨Ól@Ë(Ò¼Á¤Ø\O tvÚ‰,f”éÆÒ žÁA kQEË#M‘»J亰×oÖæÞÖ][MµW‚ÞBôCë!IR•£7‡Ùl$VË¡/è½ 3i¥éVϨÆâ¡ºŒ˜8"Ðp9Eê‰Zøä@½Ë2o’MssæËkP£_ä$­”PBb ÑAv ăþVÃíe¢C¹‡ ìÿ ù“SIu[ÝQRT6‰|$½¸5øx3R8cý•bY·n™0 1…Ó|§æ‹«¨¦Ö5ËyåyƒÏinÉ0CE·UZüg© GÏd^Ï•´éü¾¯>¶aY#õ¤H6ú³6íê½K°,|Gʧ¿&Q5Í6“S¼Õ¥2Íx-àš@£tœ IQMHbÃöC* ¶" RFƒN¶å|ÒÇ …·9nf”zœ™wwV!iþY¥¶J‰YP,Å´1Ám³«Úį£5½¤… 𓌤KoöÒ±š3ÑBr®ù±4Ý¡ÐáÖîAqQ iH$ŽÙZ#¼q b+Äü ý¢µïQ–.©¬HÑ7WÑJûSÐníà¶‘Ñm"çu3ŸM̲¨žN V€¨­q Ä Ì*ûÍòy…†Ÿ¡i‰pÖ$ó‰b"2ŒÊ^Zp7ÄÕ*rîÝ… Ðzœß˜šeɲ·{{7ÔIU ¶æ)H $ ÕŒ¼O ³.1”HS‡Ô¯í"×;}FO(iæK}:ÂPÂu Ê¼¿wŽÂWöÉFøi”£Fú²…×cÒlíe¹X'Ón8˜¤µ%dšv‹U¾·©ß –¢J>ûÎúLÅlo¬EߥSoÌ´’sáN¢qQPwçðñÿ+!,v±”¢vc1~f¦q.‰g þ“!])ÞLæJ´IÅã·¡©é’0±¹g¦11Öµe±¿Ónm¯/Õ-8ÞÚ^£,ò©e5 +‡"‹ö¸å4-²Ýl4+ê‚Ù'…›”¶‚6¶-ÝJ‡>’)é²»žY\fC) E K/ªOõ{û˜.†‰+ÚOé×Õ,®sk¯?HÌ^è5h¹[ÌHÍë¡T=ìÑ7 ʵE/M¶í„QÝL$ŽeÐe´t¼ç-ÅÌnÚUµ´¼Ña]–I831 lÍǶkô —sn·Ö’«ÚÇ_^æ "”EìÅI@ùØ|+ødã±a •AvC4Í´³"SH]Íte>£œ¾È92€ x—éðµ­ÍÛÝÛGC¨@æ42SnªOìFôåÒi0i5KÆ—Q¶h-ôˆ˜rÓ½U ˆ¨8–y*qE0Õ `Mî¢/o]Üh·+,ÔIsDvÙT‰ö¿k zoª×Rk‡k¸Ýñ0Êü¹ñÕØ hIñ;à!l¦?áÛ xîoí®À½ºŒ…7…d’dŒÑ™_‰u`>šÐv呹2îa²ÞÜOvþYÓ¯e(¿’då$¬Õ4+ûÅRß±üe~ü¼Þ˜ew%ž›§`‚Ö%ˆ.Öα33ƒY)*hȇýšcc)1GX±‰eñGq4<ÀÅgUrj PÓ»þNL ѽ1ýZóÊwqú­u&›xÜžCi ËmÆ€êU›ö†è§ XÜR]J+ðn5½>ÃÜH’5›Þ2OÝ€î´Uâ*Ôýž¹fõÜž{EµœþKÒfÕÖÉ¼Ñæ‹‹+{«« =Ä—Q0gŽÖdâyúK+’²KÏŠ±QLÁ•HöndÓ@òt¶ô×µ{—Ðué¬ã—KK8žCl £\’wZ‡XëéüA»á3O0ÀDÄù¢ïtSU†å?HÙ]Fx8º¿•lo ¬ à<"vW“üNŸµ‘2lˆ´Ž;Ÿ8GÚ–­åû&;n<Ù”È-¢çé‰eâ v“¤n¤ï¾Hðž¨á1)v½å›Vu &šÉ/Ö7ýˆ&ö¦¾“†$1b>4—í Ø÷À2Ë£#¹CA§ù~ÇÑK·ŸR´z·PIp‚ÞeV $QéÓš‘Ìü@HÜk$I; > úêš&¡©Btûùš{n"K7µçn.%%ãgš2βSìójrÿuòÆ"ÇÍv»£KªØ}RÞâHmÚ6N•Vá9PÑJü4P~ÚMú`âád<Ó=;DÓtèày#´‹OÓ-¢s§É^˜E°büj”Eä¿<¨›d ïdú•¬€ÚC¦G p«M¨[Xà„jÀÅÈ įÚ^}V0oƒ9‘HK™ôÛ$ŽRæ8  u⡃–©ý“NÜ\É%£Ž’­Z+Eˆ ôÞg•ãXãx¤Œ3ª¢ÕêÀÃìuȈVå—úRË/0jƒœ? vxÚÞÚæåŒ« ¢2T»!4é—pĵz—Awt.~¡o`D¢½ÕÈ¡UD¨ôöûNß´£ì÷96BE2±’XÄ_£f­ÌDìUV$q¸y¿"»Q©ü¸ E+%º]ÜHñL³Nç—îa(«'ÚV ®â¾Ø)m2Ӭ縺xâ³L1$ŒLãuøÅñUš?…²¼„Ä6ÄYA^ÝÃsΚo®ZÈaŠ ~ÖªÅ#²5T…‰íÇ,sYFÌ~þîë˵ãÏ ï¬Á"’äI$J€‚¥ÄlK¨¥xÖµö̧³W f¦.ƒûêââIî%vh¯átiàby3$©ó4je†ÎÝG&A¹¦ßØ ÝNkëÇ”²¼wåcƒY‘œ#9DØÇÓ‹Êhör’(×à6€HÿÓ^nV[F–a4„G,±¹‹ã¥\‚T0¿iI®a䀘Zi¢Ü£Hó˜B–ô•ǨáT‹Ì­6dIÙvÉ y¤6Ÿg}¨é¨ö²NXGipœ.®Œ‡ˆŽ#R¼U™öÜc­fè Kóªf½"]>6^fNhR¯9gèkûº*q_·ß')Ù¦""­?æÎO¬ˆÈäÊ l (¨ãÕ)þQø¿k wk–Ê?[X­ïôaÔî‰Q[8–2YyÑn(ƒfeS˫ݔ«e4?Xukˆn!¿¸ÂÎÙ–db¿g‹È€~ïù@ø{ï•’Ø#ANÎ÷ÊÜ'‚öÃÔúí$Õon=aw2ŠE$²2F`@…#ø—ü¥Ç„’ÊöA^]ùcÌP¥¬77ñÜ[#ȲÁ½´È»*'0¤Ã_ˆÈßoù{e›†Ík ØÇ¤ÖóÙÄ‘L°ð?Û!H+P>ÉÛ#ļ6S…:ÆœAºˆÅs<^¨Ì\ý)P²‚R.}ƒQ©ˆ ±! &•q sjšìhú„…`ŽÜSS$¡+½6*iVÉ]²KnuV€ }2Y.$¸$Ë$K´{|nµÞ£ä(:⩚Ý5æ Þ9U`E1Xž%ä¥âŽ ÈŽ ªôårÉ\¹¶Æ;²«ëïZ Û¹…Þ¤f1'Á¸AR O("¼Èõrgè¯ÇŽŠrdÚ˜V½¬^k2]‹ ˜¢ˆz‹saé,#ЇT—â v5u^\³0DÉÆ½…ÃwiæO1ýKKó"^éðÛÇ%õ­¬FÊàFÇ“Y±4‘ÇŒò*+ñ|5áCuQÙé/æW€O •žŸ¥\ÉÆê;ID6–ñÇã\•D´aRE=Ûö²¾Þ÷I«Kc–k”K[­AæµUà‘Æ#„5V²©äïÈ–QË—Ý’Ùs§XjÚlv÷pDLwú Èá\‰x†·#½;œn‰!I¡EŠkZx·×§ÓôÈmMT´7£C ªf1¨Q#}¢>³"2ôÙi”wEéÏ"‘ŒÓ_I+4”‰ ¢°¢ƒPCüÝ©¾/tX¦u§ZÛZi‰&¹%”/N?éR2Ç»TÖ¿E3ÝÙl°šYØ%šÞ¤dš¬dlj¤Q ¢•c"Ñ”9ëCEâí—#Hxaµ½–xì-´û(­›ý4¨åˆ*Òý`Hæ[öGÅá•m¸QYw. ö·s„ô…ÂQ½T~.•±z×· l‡ˆäQÂ’Z€l¿N_,±àè£åË-Z[Ioµo¬éVŠÕadŽêêB¤*ªÐ…SÊ µ[8ᑽ†ê ÑÚ¦• :,èöP„ôla+ ¾&Ÿˆ ò9÷Uí‚%Œˆ(Cåî —ow"Ü?©$¢WŒ\« ‘¸‚´ßšü5ë’µ•ôï&\È§ÌºŽ¯,(š+A`)YÙ~&ygâHQh?ÕÈË'ðŽl«ª5'Ó"šI-àV¶±,c±¶F$»Õ‹‚iðñ~ÖNë›ôN¥íÓ[ÚYZEu©])š{¢íoe=Qñ»(ZrwÀO{RÛŸ5jú>Ÿ}peŠHtØ€Ej¶–A«"z҇˿ÀÕUçö¹m‡€f Ìåóëé.»&¡p/¤aõ}=,Þö5E2/$µ¿òN\cF©*ƒÎ÷ÚBÜÅ¥Ù\[\Ú©[[®ñDóIq1HìhÚjOÙÃÁ|ÙI=•Ö¹®êÛ"Ën³¿¤„”øˆF $øw'-ØiÕ¿åœõ›‰.l -j¥OÖ¦eŽ ôÙk¹?dwl‡‰ Lµ_Ë‹Ë}<Ù[ÝÚ\O¡¥´Æz]J~(Þ‰V)öx ûg¾CÅÙð3,ù/Tò~— jVA.#äŸV^-zÒ²Ô‰@SÂ=éÉ_æ¼³YDŽÌ¸ Ñ|­q“h— jÖ‚p¦Í W²Êñµ=)$^(è% ö¾ÖùT£ÄÈæ’0yâÎq©ZCŧ¨Õ^-$‰"’>IV<ƒU~-úe¦ˆ¢Ö6Ý1$V·†òG“SŠY.ï »…=2â”JIºÔé¶Õß*­É œt˜—¾°ÔEÍõÜjÖœÕ#¹dY&UI›‰¨ ñûyrøpô 2¤›Ì1·ø—O‡Nº´·µY;¨IRE,‹R š–X”üU ÍÈñðÁQ óYv’É ƒ£YK¨E©Z4¦ÕR{z$$¹pc‘QŸ“EQÊ‹ðá$ûŠƒñ_¥èÖV—R¹Ò4fÒ,ï \j¬·&íâzFȱ$E ¿t<¹ò^œ°Ù‘¦T"ƒÎ×Õñòÿ—¶–¤Ü\AUÜ /*=âjÐS.1vˆÚoq¦ù‡Fßë–MªÞq‘aR©ÂÝ>Ô…‰£Pïð·†WIJ”y%°¶£oy=ì—Inú‚3ÜJáöôêÜ€%¨ÑìôÂQÏfD¾œ–’Ë ¤ÜFâ)•#ª¢…ÛÔ kÉ«¹¥8öÉY¶³°DiöK¬ÇsưHˆßP–Ù#†Ü¬T¬/F2*ÅHSÈmƒ&ÄWÅ`v$«.›¥]EŸtñ\º†N0ìÀ½y:**?dL1à­ÑâtK/!ˆËoi Cõa‰![‡a#Lè9‰v  [í½±ue*\`›IŒ´Þ¥Ã"ú,öü …¤Š“²®Ý|óah¾ä{E¬k±›2â;2Ý[ës¼rJŠŠG8ã$¯¨Ey$…~Ï,ˆûÓFE!Ôµ«5õm´©eŠÏ’úÆì‘*ô/êH@XúµOÅÛ&"G4qZOw§=ì§OkxštG’:Ìn$xExD¤ñþÅkøäDv¶Î{!úmkV—Mº«jÖÏË9imm˜-" ¬jA©¨.îÜ[ˆÁÈ[ z&v¾[еˆRÕôiaõ¢b²^Æ–Å­”úq¼ð §Â@W“ñøž¸ ˆÚÒFÞää›->â>qD‹ÆT °Uhª±ÁNèá~ÚøŸÿÔ?ý ÊËs N|¥HŠŸÝq§ƒ£± 5ê7ƒÕÊeFškD™tÈæ·»4q^±e‰d4«’ß•§Â\FÈúWZ}õΧ×7QÍ%Êr‚ô°kV€Ê» *ž±ÿÖÉq6kžjïmunßRD×2’ÂH‹;z]Ý Šö¨r^Ø“\ÂÕòDjþ^Ó¢°HçFŸOuWõ­ùGn즄*M6ýXc/š „7^…ÊZغ èÖCÆäºÅlªn4R~.8þÎF~l±ÆÍ¡gúÂÉVžmjö'yBÍH#«PÜ–ZÒ¤r·øxä6 ò;l–M¥Lm&AF¼z²®çîæÈ‹¸º´+e"Åm§)4vÑúq•#§&#áÚŸ, ‰îS[]CQak¤ú0 ¢‹ÐõMTŸ³µMN;×ìoSòηnWK¾Ö"¸ó*Å+n ‘ ~&ŒGeßæïÉ~‡õqÎ[TXÍ"£· $;Q¥âÌvä±’÷¡‘éË¥Û_.· [eÄœ 8-W,h#ãU÷c˜'dƒMÏæÍÊݬ•.f}Z)dðÜ.é4l=E`RF掾B1³E°¯« —Ì“jWó\]4Ѥ„¾œb3ö‡‡ŸS×Û.lÔM¦ú^µ©ZÝ¥à‰î"ŒRÁ&•+µJlHž*Ãß ­yŸB¸¢ú)'×ÞJ[Ó·Aêî1ö¹$Ó`°ÊDòCÁ¡éÒq;¿’L´©…U€rËJž?lµ8ây1 RBåîloR{›[`ª.ëA£W«FФI®û²97.[`>L©¤jöò\˧éIq¦A$‹ue¥H \'ŒE¥CÀšï9U‡Û| î¶B¥æŸëMêXOö¨Ó4QZêQÞHæs,ÄqaJ¯í!ãÅréÜ3$Í_@Ðî´¿®Z눯« –x¸”ŒŽ@-Èõ$}¿—•0Hñ×$’#ÍJ}3Ëúä“8'žærOèô›÷2²ñ@¤:©¥[‘®Oxõag™@ÙZëZt–·Z¾¢—…PÃu ˆÅuZ"GÀ*«TSâÿ[•rDßF t—×¼ÖñNÐÜN¤(? Z•?j½Ô*äÇ&“Í,»ó³¬ºÛ}Q,­b·Àqˆ´Q+"2ÕÙŸöd¯æðð'„ÞèyuãõïPýf1ÆÙQ˜Ê\n8¦ãáÉók „ Ï›¼Ísc;´wšî¥r RÄÖþŒ‘Õ©ÈàôÁ+ɪû˾æÀ sTÒ´Ÿ5èP¬ÕüFþ팲hèy¢â’´ÎJ¸µN4í€LHš (€O¤¼Õô/ÅÅǥőo8¬Vî²lQ@,¥t#";) b’_ÙùÓQ’]JòÚ=#N~T –’ï‰ #ŒqGeŸQè½rR¾YDs¾jOå MFgÕô‡¼Ò§±‘ÿGTFZ‰jÍ%A¸!xàãéÍ•Òoå_$¾Š±yƒÌZo¹™n­BºÉupd$·Õjµ…IFL¢yMð‚Ú#¶ìÂ{V+»'ŠÝbº6âD1F":“RH掊~ÙŽ ›fM Q›DòúGÅ#Þê1³òÔ5›z„HY$ ÁH â„ñøh3#™$žMœ@ªÿÕ˜C{¦Â)Þ²FTËëÊ­¸ŒµÈxæ·Ý:å-&H¡Võçp#õË™!ØÀuÒ¼W =)ƒ~© =þŸmé3ƒ,÷7MUÔXÕef. „(û ¤Yæ…³¶ÔíýgÐôóñ1™',êÄ)5"»÷Ú´$÷{m:x}U“\nh¼[Myã··ˆš°– ´ù[åÄÌó¥LXËmi2%ûÜp®œÒŸ´A?(§ýŽGžôÊé赆•w< 8-3G!_ØØ²&œO||ÊOwFGåË #O·K ]µ>Nn.¥Œ$âp”|!P{õþl®VVÝ4fµ¶+ÝÉ%ç¸ôî™Ðíð´]Áø¾ÏË,‰!“H–Ö?ªh!fnw3ZŸJëp$¸rX‡$–¨â¸=é°B*-6H`ŠÈ  VÁ>¹zcuY&c͉ߙN6ƒg¢U|Ö„í6 ëymÊ D²¤ndð¡! ¾#þJrø²{±~»´&úÏôx˜£«­–?‡šŠžT÷5È -œ–yƒZ]J{ûÖžîòŽœ‘µÜ¤;Vdm‚9¢…ª¿ 2\òk‰ ¡?KjÆêÿÍrÁa©ÜÆÆ¶ÑÛÄJ eZ–øù°ì>ªQäÛ8“¿T®ûÌúEá6$Åsyº¬XX#BNŠzÖ•§û™œ;8àI¤K <›ýiE[‹‹vás¼J7*¿ìÔr\®¼ÙÚÖòÎñ" 4W¶ŒÕä•^"%F‰H-CCSúð”r,ª- ^Û=þ³%¤I+{r%2HMZW U nkñ•Ýl‰µ’´ë›DÃ[­MííËM$gâetøH^UE*Ü2¢ îÛ¶Û*ižZòեĶ‘E«Îß]{Ç)Ä2„1LQHæyÔTãd&Dؾ¨K«9{.IÕ.XÆŽüL°Ÿ€E ­*;­2ÁÊÚ‰LmeÓ´»3 *ÍëÜÆnÒ8ÔµWˆúa¥jWᓹõ ¦F·´‰|S}?\šÂ9´nHÚÉÊÊó³²Ý™vôÔð°âx…b}5Á<\[„ VÈmY5/K–þ.2´!ÞV{¹ájÑÓ!o±ÅG|ä.5˜º¤‚Þê ·úµ´QݶïZ©…,4Þ0<97,¸ ØÉ+¹“MŽù懔÷1BbúàdXòSÔ ìÌÙ=ØŽJú^y{kþšæÓÖç$l’4Þ¢’-²¹§Æ¿¶VeE¶¶W–è˜ÂAg tdv‘$Rh C¨vuÉy°¤Æ 7H™¢k[9ÍÅx¡Rêd5Ò0@¥>×·\¯4D—÷S^¥H¡àp ‰ PM84K¹¯p xà4š´ÎÖÑ“¬²E%Ôhïõ&@-‘å]Ò‹öPT5ÄOÚl¬îÙ|(4°Ï8Òå¶ŠîHŒFïŠÜ]MP€ ¬iZñOÚÃÃ`Z/t–} êÞGúê›R$ë<Éi#O(ÙY†~=$¯íS%Z˜íÉi¤Çn×KÞ¢”ŠZ0ø•€/Á¨ å\4IbMZ]ui}«E5ÖŸsÏI•“Õ–Õ‘ÕØü pXñýª|?vJÀQ™ ^µÓ´žW¡¾·mÍ© ’‘BÑ%Kqikßìí• YÙ• A›»„^†/nKq Á¡w‘âŽEVâh‘·ûäªØÑ •Ã¥åÌ’[Û—{Ž|lƒªÔ²ÔüLI¨Ž´A±ûX9udZkKXmEÌšÓ ÚÓ„­n\׌„€ ÈMx©§zöÄ”seº€Ök3ëºtSâYSM½ ní qs2Uù3I¿ÂB,tÙr©’vfZaú†£iÍ$×0› Üæ´V?¼tÝ!@ÊT½:öLȦ»+¤ò&‘ªÙZêW²\^ä «ôÓ§K?M7cÒ'RW£€ý6Ê£2Ø@惛ËÚ4{züLÖî×-m ]¥]Øî7ß–YÄPÁµ¿0i7 =”ªž©>­¼¼Ù¹’³é7§Ùoö9`¢À…idÕ­tËké™®§¼nzw bT >&ã±rÔ¥Rª|y AA‘‹×µ vÜ JÍîm%oM8'î – nud'¡¯/|œiO´¿=úZ3Á¨Àú†­q,vÒ]Ç!šöh–ˆU~ߢú‡feª~,®PÞÃ(’vz)Ôm VZªÜÛ+Ç&¡u/ Ññ¯hí P?%ß—\¬Ç©E£æúÚ@÷³}M!·u1Z\EQÅØšrv*jVœ¹m‚<é‰ßÞPVÚ“™-å½T“Ó–I……Ó·Èyr™ÄÁi´Dñúq0–̸Ë!¿ŽÛT·kŸYmî}5H.$8¨Ô€V¬Ä®Ô®Už|Òk뫽>ÚËNÔu M`ê‘s¸’$ƒ—T9äÌѰ 0^É—%¿&5GnIdöÑOþ‹F†A,‹-Eè”j4¡øéÇìä®·^iž›eP´>ªNGÝš¦4Š.$³¢Ü)_ ‡½nÑ:½†®ö —ÑE,÷Uin êBç‘‘®_°´nuâÙ!&$z¹¥0iñiÖÑ5Ã]B‡ŒV6(í<1¯/¥*Ó`»|† Ë3_l’ù—[ m'´»uô%Ô!ˆOtâRX[¤$¡Š†sñ6Ø6ˆZ´¡´FQžöT…é"DÑ+Æ¢…R^†-C^»ï¾LA®Kôo.i6’K2§×'Z8d¼†XŒ­yºÈ)HþV-Ú¹"Ê“½+DÖo­_\Ô~¯e§IIžñå2¬ÒÖˆ…¹4J•éòÈ  “­¬zæÉí­MMnd1Á$ðz‹øŸâcêJêôÀ".Ód%÷:‡˜5P=´ÖÑ,vÒ^\ñi’€2ˆ¡‰8¡§Z¶ßµ†&1é»#e}½´±j0Çy©4JÔ‰^^N ©½Ù†ý=òÎ#M\"öÿÖ”mm­ÒæY%·úäMp–ÓJÊG`à€Àôj¨ëðŽP4Ì ­6š;{¥Ý„b9ŸëVÑ(åp õ=@Ùš­þFDíºŠJõH#·ÖêêD…”R„bàÕ‡*Òƒ»¥¢[Y[À׳\zS—-£scE K@¤3(? q¯©Ó|6Èl™Ùy–9à†ÃK²ú1/w –ÊHÜ+<€2–ù7‹d„kv¢µõ›ÛC¤6“jó/îá¶ êN²L¨x"(øTòúpí[£™Û’ô—úe’êw6ÈÓÝÉ*Ü=¼¢iÜþ”øGêyÇŽùw¦U¶ÊWöñ4WIšÆÎX’H\úÓM,È@X½6V%œéÓÇöF#ÞÌóK,ô ë—}ðF±Úi`F—&%]­’ruBi$Ÿëì7ʉ²»Õ¥´½V[O0º´³Æew²zqt%IG (w/Âpƒ|˜"ÿ˜<ýc¤³é>\ÑýkÎ^Œ2‚“4ÅWûʼnwŽ0î‹ò›íd¡w’M“i^|ó6w)®h26¥«H-úÒa*üòV%TT· qä~ÏÙË A6À Ø#àRºP…­™­Ø›8%hd‰Xú³ §ÃQþ¾DÈ€¥cyço1¼¨m׃”YÍ1…Þ8jŒ#P…kñd‰ˆ Di[_]q£ý¢i’BáǨL© -_³ÅäãARkÄq÷Á",©õ1˜,5½~鬮¤† @HíÈÚ ÑWìÐìiƼTä¥0˧PØßÚÆ-mu¹¹Ríu¨h® ?k‚ž¼~×.M·ÙÁÏšy/Ž×V»^ ©wê¬Æ2 uße%‰§ó;npZG4RIæ­3Ä3I*–e¹3FZw²•,PK%=Îf4m*fÔ¬…Ôl«èE´ˆìjÆ„•!HoÅŽW+ºeµná©ÜÏsú:4[í`2zpª˜-‘OÙY%Tš ñPÜ[®#ܦ¹§ë¦*[‹ÝBâÚÚé†t_÷Qy8†f?d(ùYU¶m>ÉÝÖy!Š}6häO©Þ—I&~BŽÄ €ížÊÒ½²ß“([ çÑ|¹{õ‰/4¸odUXò[@#‚"VÿUÃqN5o‹ #b³ØÒËû ++¡=¥¬zwª†Ií-ÔEmÉTì€Su5¢€?ÉÉÀžEŒŽÞh ï凇$GoU XŸˆVã³w#}é–Çv²ד<‘°Ô.~³wnWÒ±¹<ÃúŸjÕ?ûM¾F»’%µ(ÿˆ#@4Tº¶µ±‘’XíªüQ–fjMAÈ“C·ßˆTÞÔ·CÔâÓî[UKÛ-(Uåh%A˜Qy&œ|Ol$t;¨Ü±‹¯Ì›ÝN±±ŸÖeˆÚ ž)&™á’`Ïmð€òK84Z·£øòG $FÈË?,IêXÝhæÆ?y}õ×FvŠb Q[Z”bTüKáÓ#ÇæË…žM ±Ó’Í­­—W¼}#4mp µŒ®äBâ¡Oeåß)wø,üz´’iÖÆ÷Qu–5Qo ŒˆÊü~:ªÑ¶ä8–û ï–Dñ³WLoQ°µ½f’xLîBݲz‹ƒã#`:'$ÑZO/C 3ÚÞêñÊZëN¾"#µ"‘ý]zª³SeP W)Èem€ n'èúʶ©q¢K5ÔÏ,²Á!¤tŒVET;¤K_ƒ’B·Iˆ v%y{JÕm|Åcå«}'Rˆ9–ÇœÆÞ(äª$h7>³Wwcð×uZdÎBE]…át–ßAÖ|¡¨O3K3ùNâQ4qJMÜ©ê&êå@¢†'ðã– ‰6¹FÓk]j+éáV]:܉x³ñ%‘OÚMªMv©¥=òÃɤ («{Òs»•gŠF3%¤+Á@Ù‚^<2'É×½CSòö©wz—­¨r´Š*J€ˆªŠEE"ƒŠ9/r15µ3–á0Ó<Çæ-XÜÃ$ö·ú  ‹¬&_QSá•Þf&ÿ| âONUÂctª@z(Ë_1ßÎÖúw语y†úEŠÚKk¡q zJÒžj€bˆpø¤é]† †éá¾Epš•4׺³¤¤qÜoJY¾Ñ£‘ZÔ¥8}ýGfE(¾óý•ÕÚZiÒªÍð=Ì2”¢.èìÌ8±Üq¨ãü¹g Ð#¿’oú_Tã#Þ²\ ¢äã°bE¡T»³•¢K¶‰˜“%¤G”  Œ_J *yˆœ˜`FëtmkþZœ¯ú*òBc. 2J“]›áàŸgâoæÀe{2[Òµbî ĺžŸèXÛê©êM!Ža¼Æ( €9Q~5;rßzŒäÍ‚6º*rª‚iaš;;wY„qÈQ¦+qÅ•«»ò$R¥ì’­ô3\\ýsT’UG•êí!OjãnTO³’èÇš•ç˜uˬËkqig8>œœP¤’Çè->3&Ä(Ù NÝñ y®é\VÖ©£G¡hÞdŸ¢Ú“ÜFZ0³Ë!Âñ±‰æßiJ"2B1Ù|W}Yßz]ci(Ž3GK¨ ä_Põë4"À¥—fb:Wáý¬‘“X™/ÕtgYm®Ì±Î­éÇ{§È}*µd®ÕûUë‘ߘI!)¿ÓuÝ]–ÛCh%qg½‘¡Œp / T|Mû+‡ˆ Ò µ?*yºÖ_ªKæhZ6A.¡lbXc–8Ç ¸Üõg­zªàãɪVŽ-kF´ŠßË×0I"É$·:}ÚIqjÒH8…I>ãÄ¿ÙûXßMšy{˲‰füÀ¼ý=,ZU¼Ö`9‘‰UO*’ǃÊßmW…Qr¬“½£±mˆ­Ñ÷rÃi+½ðKk{s ¶³øB)xñG aÓŠ}%|šø¶Ýo©Z\ZÜ,q16Acµ_PÀcf5-)£»‚HãÍßáË­‘ÏšÈt;;O³\5Çé Ipñúðì\‚870¯ÈžCù<7ÊŒ‰46´ßÒÐâ s¦,wΡŒž–âSÂŽY˜°j“Eø•Å6Ô¥¾$šXŒÑ}wŠÃs×ë #¡5 ;‚E8‘¿l´1èÜòEm¡·ŠæK©š[«xÜÜG±R¬ôeø‡R¿†ØëŠ[0Ð!-þŠn%‡ã1Ï4…>±ÀòV Ä‹ÅTq]°‹+²?ËúÆ£swa<št6Ó %‚îÔÙ3©`‰&äÀÎ~0¿BD ›#ÓËÿ5^Z:‡óR´ qz ŽÞÔ±; ‡'á/»×¢íÇ7DÍ ,µ½Vh?H^Í$ž£5ÃÁ  !4 íJš €"¾Ã- ÔvTŸÌ–72­î¥q,\CÒJÚY:F3PFÜ™ê¡G\— ¤ ÷6Z›¬¤¢Üº·¥3IÁ¨h­"'Úû5ƈfTÅ,t›yåY¬ì®uxµ“U•g_‰BË"e­jƒõŒ¦Vym…jÓ^Ø·;± ‚uw$¬9Ô8=yÈPÚ$,I!”ÙÚÚëz4÷p½ÉÕmGpÀiÄ–’±ÓbÄŠ;òcÿ”Ê<'ÉœeijZÙ²­…œºå½½¼È®'6¬Ó-CM!£ný¾Cý^X &@Ø w¢- z_îc¼˜*L©m ÇîÓœ,U‡ï+É¥ø{äã2wk”m-€Ódk9îä†üÈZñ¤ø„Ýþ*/N;eÜDôjá –½pq¥ÍB²F-×ê¼T€¢4RXòy}£Œ@ I²“iíåÍ:äͨ5”¦Õ’KÕ»†³Ct7Ž UW¨âíË2â"ƒlv6YEš¡°’âݬ¢µ¸<ÕÚ€©V˜‚W‰Øýªm–F¢DÝ¥P_Zë·ß¥4ë5¼°…ÚÖydeqËÆAU$pßâÿ~.Ãl2²Ä÷º{¯Ñ0 Â.#ÇÉ©bªC)$Ð}…¢ªW#Þå‘6Æî×]¶·HSÌ—¯$ŠX[#"[;TâkCÖ½2Ñ/&< ¨ƒuMB95Ký^IdFÛ"¤RMrAç%Á•:Ç—«dNMù6Pè‡Ò<“ª=ü'Pó_ê 7«%ŒKF¹T, ð…#¿#Å| d¾‹ÂÇ–´ù|­ Ne3ƲúvË €¯3“!Y›™ iñ7ÿ•ÏÕT˜šGÉ}q kûÉ,mn•¸IžBŠB¹U<÷añH¿f¿ ŠJ Å…ŠBiZÞÎÞ¬Õ í3¯z=\—Å!í’ ”Õ³94/1i…5Yí御–M.¢[ˆ¢`²È³ÛïÄq`ŽÕåËá¾cìM7H´2i6Z½ÍÍÝíº¤ ¹¤[C8”h©@R ߆ùe ªjÚûú?ÿÐ<….&•Õ8ªú3¥¸i©ã_„u¯/´3 óoäŽmRúþK}'B·,в à % M€’ ˆ§Çí 7dl”zÊe´ÐÔšŒÌŒdN Ô ¡z ?ͽi‘«IJ²i¥ s3ÀgŸÅGåAQZ3CÄ}šüXJ„ìj›²†,QUGøå]•È­)ÄìzåGgÄT#Õd1µHîEÄj'¶SÉËiñQyÒµ4ûðˆ€‰S8´‹[{X-ÿG%¥êžRÁÍ=YÂÊ`ÍC¿">ÎF2Þ™›¤]zËØÜr#‚êN[cð¸!¸±~J¤Õ«·O|™ˆ 8¬%·¬4¹b ëêÓuváq,P/Äž¡]…Fê¹0;Ñj¡ÛO™¯/î.'ÂÓ›)8ErHBÇêW›¨>!ñ|=2ìÊ5ϪûO2ê0É’Ãð8ëªúQ”cÉÕd'™f¥Ûí72€áˆ4JµÕûDï#Í%½”ަ(ÚC#•MÐU¼*+\1ŽÌIßd1Ó­ÜÜ\§¬`á´I‚Dò6áköœ Ø€wñÂI4% 9¥vú\º Þœi,Œn."LÒÎS‹us!ä7'ì(é†G½˜*Š,ü“£=«ið]ß\­å‚'i®§’*Gõ©È*$*ÅWŠðŠŸeR‡ ã ¶W~bÕ¢»Õž×KHh^g–yI Æĉc‰MMUbïËl˜áŽÉá'vQy«é†Âh`ÒcÙjÍÂ-‡ ½]É?lüC#Ào›0ƒ¸[oÑ_^Š!À—¡I‡¬)!$o‹™¶§íb.öEËeqwz.#’X“‰Û± #i˜;ví¿¼`B%´«ëĶºó=â\ã”-Ý8š7>ý¦¶êÙM‘È6{%w–&ÔYÜÀÚ€žŸ]¾3 ¼I#z†Ù¥ßâçÇg§ÂF]nØ[=-w˰ۆµã¦òò°¶äÓWÔ^(yâ ™‚f?†y2ñ6#}=­­ÔÒXÝY¾«êzs[´¸ÚÏ— YI‡V=rðÁ¬›Ü$—öjl‰‡TÓ×P–¬©­ÜN´K*¹*ÎËF§ÙÿXqÈÇ%œ§@ %™ã·KÍ2Ìj7sŸÝ[òaâ¡É¬ HQGP>,»®î6ÕA SK*-ŤƒTºŽY};IdXœŠ‚ຳ1J-$Úh)XëÚ)$3X' êZÿP•£–ÖåûºâFœ˜á ÏìÖ cÁgšIÙuuåß1ÁMe¨ÆðFÓ[^F¦(gÈI #í<²ÃaˆóGE¶æk«V ^§«k( ²ô,€€wúr×N™\§Ð6ÄRkq}s µš[Ãwv“4Qƒéñ·Ü€!ãêN`)øY¾&lq⢹2X¦«ëòk³Ý‹=E?¯¦B±Ê³•?WRÎñ !E[2„k£Ž<ßÿÑ3…áÒmVºKÝ^a+OIxC·Â ðáN¼A~Fœ©˜[Þüœº“}'}0[¦þäøXñº—•Pµ­Ýå…¬:MúµÔ—DÌò]¾ÆNRÈ…$THÐ7-ÎuLåLKU°°ÐlŽ¢¼Mt=XΕ‘¤ŽCE‰¤qê/*n¢‡ùŽN“m$VÈŠâÞ [›6ËJ¹ŒÉõ].ò ÷<—ìGšò?åòÍ’<ÑÓÍsæ-.ÚÖ+‹ûõ³8[KeHÃü”(KÁ*¬ß ‘ÇY[óGè?ãÛ¨ã× °†Î[—sk ê²ßÃNA’ˆ"9¡tâªo‘"'dQ°~ŒG5äs^Ù%¸¾ºrÿSiT¹†.$’hÇù Äƒ[ J_eÖ‘ms©ÚèߨÞI2Ã4’-ÕÔŸ„< ‘…ZpÜ8ñåÇâÈÝš%‘T=”OÂ/©Îi9[“SâýÚÁ~êåŸVÌ>–U ´ºµ}jæâ+½F‡•Åˬ mcÓUáèY¹Û–UÂnº2ãYæ“Ù^ypBa¨ú¡ƒ›3!ôÊqûE[Žý_‹¶Y}ìH¾I†… …°–©~š^•ñ¬—²C%ÉF#˜õcA'-‡ÃAýçÚµ•Îå´[ƯsjŒö¶ÈÆã{==œ÷dš˜©Ðô”ž –ù–¡¹ ­|ºþk0ÔÒþt&’ÒK¦–ÒÙ QÈ( ­YUw¬²äD£.Løw¥¶šF­cqwæMbñε{E$d,KW‚+#솃á§QFÊÌ<#eF½éœ’^ÚFÖW —+« W§%rHiTÐ’)P[àâ:á]†$íIn¥¬Á¤¨¿Õ§K~7Ënfâ šI%@øÍ>|F_µ]°¸¼íåh¡”ù”ÝFš—kj…ìgô‹ƒÎI#©H½›®õÉðô¤lY6›æúdÚ›ùz [ZZÍ,PÄãj+P ù±=r6FÇšd•”ñÝÞX¯£jê#wšk’ÓFVßá ¥Ö¼r£|™ƒlÂâñä¼î>³2ó!ådg…Z²hhþÆûæ/ ¿ŒHØæÇ¯!Ô]ïδ÷60pM> k ˜îBºÊväÿ`Ƽ¾ƒ—NȰ=Él™%šk¥ŽwE´dÑOJ§í^äšdøGFÑÚ”“$6îóÛË ¢²œ8E­?x¼‹ §ÅM¾Î o²:$¶7s­´ÖðÊòÐF¹õ´Räq v_³\•Öìw¥]_F} HôÍ4Û_¬nd¼¸š¶æ&gäŽ:@¿ÃïŒMîRGFU£YÃ`¦=JígÕT ýtK$»¤ah¼xtmè2¹‚Î %š¾’ö² ¹€Û´•If´.ðÐ úhTƒ·í« 1!¢tÔ²b--dXµ;–A&@8Èñ@jßí6'½E’ÈMÞ™¤§ª—þ‰h«m=Øð¢R0¦ š±?åPe nÌÈœØ .ã†bcOîgÓ™‚WBÒ@áÆ¿3¾H’&#Ÿ4²)$·“NqI Ì&Ÿœ+S‰ º1ní±þ\´·k€’ÜÌËœfûR½F{ë±1šÝ¤®Ü.!Mi^ź|8òfM§5Õ«ÛA}êÞ+¶°RZR”ÉèÑ›7޼_Øáº,y„âÏC]&MFâÚ}L…Ü‘ f–Ÿ Xш@)AÌm‚ÉAJ.Åã‰4ë9RmBiL·’Û†‘âŽ]³]ßbNù4EÖKo 3qŽÒ Ñ–á¤UyœQå Û¿‚à !²"öXÑ£kÈ Ú…Ï3$*Aôø”Z|\‰®YÏ“XÓ#eªÞiw:Ƭ"²±’;yM»¿“’òz¡êxü+²|YA–õ_©·„sDjZXšIÛÜ$ ¬Ðê“’ÆXc«»O ©U,8¯nœ›! Pß›3Ï–É5€¿Ó¸¼±Kn!d–æ/PÔ7““5¨ UPk\¾pÕ8íE—?š¬I%Ä…-ç’åÁ+êÃJ€BnƧ·Ë&b9¸ñ¾I8ó5Þ¬Íkm!Hge¬e@V£â^¼jiãß"`9·y!dÓl®’S­\´S˜˜•GN”ôÕ#mËx‚{/Å‘‘=F­%Õ5- òXôý+Gddâ“ÄQA_Û¸¢ŠVú(Æ1­í–åÿÒ”Yh±¼É¨Oê>—q*­åðTCQöb„µ*T/·,À”­ÌäžÙj$3¼ßU’þõ­¸z3)c˜·Rµgå_…ÿ)˜S*•€¹òMoô NÝ-õ+ƒBi`†±¬…âbÄ35*ç—¶U¦öæÎPˆéÚ–òÒä–Ó4éåŽÚßànrrËÉÀ,I Z QCrËÌè Éô›¨\C~·i É \õ‘PÀèÛôÀcÄ)‰BÿT‹OÓåžâãŒ!ý9¦AID¬^V…å!ƒPQÅàøW®â ’Éy‡šï4ÝDúKy¥˜à2Û°sS©A#Zƒ!#—"»,ÉræÇ„“º @ò§™,´]WR³²¸ÖZq%YdÔŒ‘6ëp´HÔ-¾ÓžUFÈ–MÞ\m#i±ÛÛY[F,ìm-âÝ)5*ªW‘Ý›¿Ï!}ìeº Å#FÖ—2L÷-?{%? ¥Cl9U˜øa²Šk[kMNæ+Õíã´‰¹[2Âée V:{}$H–_Í–™lb³ 4&7¶’fæž©M˜Xò¨ßry¶RL³mFäÜ´.'UýݸT~i° 9mþ{åÒÛ“M÷¦Ó5­–púŒ£NÓ‹¬ßÍH•Å=5—ŸjÖöw²}^ äQé¤q#¹«:…u5 ±<~Óf$d6ß([GË×âäXÈ.’ú”}~IçõhÕ/! =(‘…(ª:äÁìÖG{v—V÷.ðØÜ+ú£Yo ŸÔtâBʧd"‹Ëâ^Y>ö9ºæåÞY#x¾§¬AàÆÓ—¯Ù`‚¬]¸©åüÞ )<ÒKõó>›wZâ‹h¤E6–ˆÃë!6*Í»(å_„7L òbcGtÒÎ×P¾†}Bæ)­m”¢2ÊŸTŽ0åI256_²‡#böO!äÜ—v­/§§«XJᕞB›¹§Fb¨j¿ÞËÛ%C HSä[KùÚòh'‘UQ!ˆÝ4P d&­/' u‘«Ãü²2‘6BðéuV–Þ+‹‹WhÅÝÌföAlŸ ôÓˆe ý¶ôzbM„ƒI†±ç !Ú HLßRRñ4“Fþ‹Æ¯³6F+B„å]¹`„8w(‘2‘ßkz¬3­ÔT÷—nëo¡\Bîåá/é-¨nJ…‡Ù†[A€ †¢¥åíåþ¥¢K¦jñ*[Åm$†9èļŒë ºIŠråûÿU)«“`JÄ~QžæúÓÌšäÍ ^ÊGŽœAàËé†!«ð¯Uí“&@Š$ÖžSòûÆa²·–yê8ÃsrÈ9V¡¤ôÁæ[º/Úɬvd†ËR…-UH\Æ*XÚÂL0ÚFwõœhç⌎”ø²»Ý˜;&Öš•ýµÂ\Úzɉ[Øæ3qr*4 R•éJx9Äm±`wø á†m[QkHo­¬õVY&]:ÌÇÄA*\üL¬ô,Èðœ”%ˆ´×NÓ¯lõ(¯$E×ZÐÊðM}|Ñ@’Bµy(‘9sÚ%uãûJܲ®=»› wÙ:Ó¢žö{k»ˆØÞòIõ Hܾ›oéÆÒ¹çɾê»}…U®BU[&=ÅêÜiòIÕ§Ôäø¤™Ú_]¤”¹ Z€ðá·5®Ùp Õ5HvŵŸ6Ùi¦+›)ä7mÉ4ë DKºpqGZÂÚjl¸ ,îdFmå"óZAæ=fi õÀ„=Äpð ¥g@Ž  &ûKJX™qŠèžI¤^kX®$ú²+_êoè‹Iƒ0vj²CÈ’  ~þ<‘ˆçш'£(k»ù[If,® ´—E ±ôWphx&SÃ\™‰÷¤ri:`ô.£ÔIJJD1U¢ª¤-Da‰§Âü¿à²vT†ž,õº¶o{kl’YÚJG"’1^<ŽÔmÛ‘|¸.õhq4’]­»-¿­[hÕÉ$]–%v˜Z‚ÕÿVµ®H摹Ùú¢¶upº\:¬1z¡Ù[r~'jþìõñ§Ãƒˆ]¤²ÊÎòÒæx'á#HÔHfM ŠÈGÔ‚ï |G$M¦·Md“N•ŒÑÏ' XŸ×¹^MûÅ ˜A¶õf¦Dm±Aå°EY]h:}²5ÌsÞ_ÝÇK5h q™È1'%÷„üU?±¸ã†Q±Î”-¾MJád—L„Å­DcS:ÍH½Œƒ¨­xüðÄŠc!Õ#M>Ê).%¹Ö¤7¯XæK»‡ŽØ3U¹ƒÑÚ»Ûé’24ÀÕlºzGo2Gy,ågM$r£âfi>Õ£Õ~¡vU­r|"^æ¸Ø4…:éw¾p½S­NÜî1é[Áªð*Ñ¡EP[âØü_hÐep }#ÒÝ8^ýRK¿9h×ïõ%’Þæð†$–bP»5Œ%C‘öwvð̾œp :æá­,ÚëI‡Q@¸–TúÒÅjƒ‚Ǫ×á;euæÊЗ®±ÇwlööÍéÅõà×SDÝBÍ¢“¶çâðÂQȲË{+{›W¿Ö/í§šÞÚÑh’ É'.Ad  ¨û_VväÈÿÓèÐÁgý(ñê×RÄÑ#ÜP˜š‚BªxŠƒ@ßi…3]R'mœ©@­’´ÂvƒC,cÓy 6O„Ÿ„‚œ›&GF]B­µÖ“;Mw©é®—N« h¬b‡Ó _Þ;=h>,Ü™Cÿ+"+^W·ä#TêZ:¤@Ñ”1 ˆû=²¿ËËÄ 0›ÍbÆìO¬ß¼qhösm¢õ¥x=*Ua’‹Vc@ÜŽý˜\ʶ ÒhçÔ5[¥Ôd’Ú{¦F¹´xךˆ‹R9 ¬¤„¢©+‘;lJ5=SëZ¶¹mëZË7Õn~±OF[ÓGT-»UsnMM׎V|›c²9…ûE¾„1Dd(PÎá@ Y‘›ìµ~¿~H7ÞÙô%™®ÖKŒ\ì‘Iªn,íО?ìŽ%²þ+ÄŒB!HZ~0C$ÅEÚ„×vŽ<Ó͚Š”K[; Èmš(c’rÔ‹ÕàÊ^D§ÆŸf¼Sáe´ÑQº¿Ó¬â„êz”1‰JŸ^S*ȃ•R„Ÿ¿pÙt"Ní!…kšDr‹?-4ú‹J8Kml† º’Ô߯*+AÊO´rècá•ÈÛ»Ö5-@,ºÅÄo¥Ú7+}*&-¹ fYkR Iß%äÓ›‹Î–I¬»K+Ø_J·¡¸>œ3½Âª)Ž›€8ÂOAþV ‚bHó{¶•gycåÍ.ãÌ‘Em¨Mh$:u쳦"¬PÍ”pmªy?Z¶kÈšr»V¿·G“ÓiK@ÖðÉqàÄÄ(ˆaÏ`û<¹a„Aæ—êVÖ–‘ý_H‰¬5 )Ì– ભRC€ ÷Ë1’E–¹¶ÎçYzÍzұ $‘ªä¡SÐ2ÇMßíe›1Õ5—K:Þ“Æ(E­ŒR¼­©8{›ë‰%ûJÒc‡v§^”FÙs }l$±`‡Fû„:uÄÒ*ZBWP 5NëÈÓj ³š+½þM¾´³ŠI¬¥ºšwd¹¹–N14®=F XÒCÙ#á뉘º´y¦__ó.zp°ŠÎ[åõ ¼WL"Œf¡¨Œ qeo£1’ JczN³bö:œ÷ªMtm-® 7‘3¨#Ž1ÍZ­Ìøþß%9Q¸››èBgúJ²´¤QjÖÌ·ÎŒ~©PcZô¨eåFø®"D¢TÇe_Ñò.k\Y• q¹X¿Ýôn$Tîze”ØÙ5k6hí5™‚Ã~m¤6àÛµðr¥Åñvëw$+höO«ÚÉcäÝÍ-Å#‚òæ`…„JÕš9™ªASðއvåd‘õÂE" ½½ˆ&ÊØi÷vÒÖpah+B2ÿû?ÍZ¶J?b ¶‰g«ê¨×Z—©åé¨rx[^InÁ•G*1Œ´Ëû¼ª¤ Š{{:Ïi0­¼úíß#ooÌBŸŽTæp´ñãû\NÙ“É2–Þö¼¡–z<Òê)kÊóZç…fº…%uwx¨Èd ¼‹pôþ2ÈÝw¬,‹^ñhÏs©Í-í¾ŸbV+²e"9#ˆp/!^lã¯N8Æ9ÛÌ™w(hú­æªëu¡éí­Z”ÿ@¸@#A€Ç 9••ˆµý¶Ã(×½1¶æ?3YÅ÷Ó‡ƒÔ”VwL‘‘ÈEP•frO‚Ÿ_ôîk‘²“y{BòÔæ:…åÍ­~³pWë6ÆW©ب¢ºˆÝ}ðLË–ÌÀô ÎïÒ– 9míÞí¸×U“u<äþð¹f¾Üxñé˜ó®E¥—zF§oÑj7P´ Æ8õ––ÒXTž&«ZÉR~,œH(–ɱ£úË›¯j±E ÛËõ›ÙUd³›Ó`ÃÊ„“ ¥a˶X "â7`ßvQ¤Å£y{N¸ŠÂ/NßÓko¯+}bKu˜ÑyJ6 ?i)ýá_‹ŽWÃ)iâæ‡>YúßÕ†µ­Ç—鬶Ö¢CÖˆhêò³nÛUøºrû äŒÍš¨ˆJh<Ï£Ú޽Ů ÏHÝÖÖÊÔÝÍõ›y»&¥$m,ËSÍB¨,ÀƒÁM9Wì·íddmÙ0µóüÑǧØY=ºÛBXFÛÑ@ËB¼€äýU=)“sj*gUÔ@ŠÊÂüÞß8zÛÊm#Py9–@kJ FŠX.º oË’ü—šuœW?è×W³<ßXŽÒB×%º¡býßø["9²Ú¶SÕ!†O«Ás¥Z[¥Ì -¦Àši¤–2U‡]ÁfåDûMËäÌó@[iCÆæp‘Å–±YUÜŽ?  û^øm†G&¡mio|ÿWyÇÕÄpG$Ó’ŒRESä«QøWÇ+¢SÉ©g{苤éšlW7 ,²Iv¯$òúŠ#«•¯ÁÓàªüáÉòÜ£v5,_Å}¦Â'½Ò-™`]hA$1D!<'·SêáÏUø¤,‰ÚïÜλÚÔ4hVÚÔÏcm? YP2¬pÀˆÄFVŠ]Ý·o€V=ªrq±!+°ÔlƬ«d!Ôníb6álãŒköœ³¸«2ØüN¹>CH ¶«mªÖÓ]ÅóÇ0Mlïlë¹â¥*ªÎ?˜õ\ˆNÈ}ËVIVæ]2x¤Z U?Ò àtª€7ÿˆá2óZÿÔ=&xœÆ/‡ÄŒLkÓâAÈ¥{WèÌkm"ÁÒôØž_JK©~±ÙµcXXUXüD«“½\òþl½$VÁ,kÆžå ŒKÑzŽ5Iný>Xo¹w¯ôí=.w‘Û]]sæ"Y„J»*I@>*šíË5ä”júK_KêÍb†6 ‰#šHGN¬û2ž…zoƒ‰˜dKylŽŸ["AûÈìDv‘‚‚‹# ÊjyßjåuËe””´ûí6ÞìÎ-ÁKqpG ‹Tz€|<‚tøydÌmF“É#Ó59$7&}V6ãžÜ"¸X FÃΞ#¨j2­Á¢ÌoÈ1kËû¸Ýí4Ëi®'‘„w7om"J€8âkCÄ…ùr —lÄÍ3òö›$š‹j Ù<é¹gô…véÌ7åÊ$G&Þ¶Öµ¨OtÒÊnàÓí­Ï;ËÉ[Š®á‹úkÕ¼A«.N"…0Ý€O¢Kæ‹èµ _L$´-lînT…ƒÁV´§5¬‹xøTDuK%ò¥Îƒ5Åͼ-*»È°ÏŒÁd'sÍNè<ÂǦ+AŠ{Fî(-oí.7R„õceS*R´E¡nDÖ»té\D“LŸÊšœ5GÖ‹Çk&› °ÒÙa[ØÄÑEÊi*Ôc3—‘^+•Êg“0:³µMRÎÚIõá Iôä‹”’ Sû¸ã3³K^Š£nû&S±dé ·¶“OúÏ£wrž¤N êŠ!þt9PªS˜… Ÿä*Ø¡@²'u-GÔï&–k¤Žâî)ZAenZKûq"²7ªÌ€~ò8>öý‚q”Äyr@óYm«|a•l®R2MÜHòDU•‚²ÊòÑ@e9HD[ ÕÖÈ_ÜNÒ­m­ýq-ü”1Ä ª¤Pó«Uºs?âÍð® NÜ‘mŸ–áµã©Ù¬³0à·wóßÔ‘Ð…æŒðô\ÕH-oÌpL‰¦Â}f˜F‹w‰y ŽLàì@ ¶N1®l ¾H«k[ŽÌÜÞévOû¶OSM¹3+)'ân4Tæ â§‘ëÈ` Ìßzއåß,Cé7´€ù¯W‘Ì×ú‚x¢V8•ãzÆÄ uå/ˆ ‘‘7äÀ… ¼½o§^ÛÉ1þ­#F‘ ‘¬»½´ M7¯.+¹Éƒ³PÞêþâ[)dhV€µj(®àJÅH¥~ÌbŸvJéˆGižPÐìYõ]jYoä‚OŽ4,(hž‚QP÷Ù!Ÿí¾D“[2$uLõÍ:ÒIììRÕôØ­àŽîÊòÂpmŒN¤ìœÊ'0RœM>ÃqåË)ú·*P¬šêÝë¶ñÇog ­²$ A$aèÒjZµ%y)ÙW$MIܰæwL`óÝüO`œeš%‹ê^¤©[ZÚ̱–¢3‘³*/ºŒLk’ßzY­êh Æ©¬kMy™c}WTsp¦Fä8Æ¢¡£Œ¨"¾ªõãL0F×H™óBXùý5?«Ühvz•¤<ÓJº–Ì´÷“!$‘]Äjfa˂տo—!–âæÀL'VóG˜õKÕmvÊÎ3Gy¨,,ó@ŠÂBÏ “Y€F>JtûL2Î?-šŒ~i„pGocom=¼S[Û–WAÉc†f$’e c'sÙ›~ø"lÚ¥m2ÖàÉÔH×p‚L‘ÈÊ_kš¸Z×­ùa,);¿¿Óõ>F Ų½EIDqE« ÐЦªH¹2¾÷ÿÕ?·]@=ÅÔ Xý$`X€Ô$Swbÿ“˜—¿“oO4C.ŠóJL“µÕ¤-Õd_«Û 'áâ£p¦Œç¯/±‘¢›±eA­m/f† »kµ…–öí ªÉÄIo€Ð×¥~,—ÅAꉶ‚Ökø¬´­Léú]¹õ ¼FÝ™…œ‘­X·0½¾Gx4ó6‡{RÆÞ>WVzåôS»*¾®Ÿr¢ó2õ§.áxô–äRòäZ±Òõ9¥šHÕnnJeX¢Œ$¶üßâ>øo½‰î«Ý0[i÷÷.­Z4+³ÚDYÖ«9xˆ>6û\qµáîAÚ\Ao“\:´/Ë¡CpÒÜÉû¸bôãø¹‚~Z)<±˜´‹un)µ‹k½CO†X,®¤";ˆï©4q3€8¼pµ{|%^¹Ìr¤Ö=cQÑ¥ÇË}ÂX­’C$Ÿ _˜¢Â„QCnÛñÊøAÜìŸ ÅÌsK¨[~•¹—Q±Že¼žâH’¥«QX#â65á'zW-&ÆË[ºöG¾Ô®n¡Ž?®¤ŒÒýz2Ž¡¾Ê˜ã!TÓ¢‹Ç#B“$-‹j—+¥ÝÛ¢L寑Àµ$‚ãˆjT'ü£†T„DnɦÒtá#ß-¸6®ÆÞÎâ}DD•I4«±ø~*d,²O,lìbÐltÛoªÃ ‹s-•ÕÔ\ÝÚG!DŒœWÔÞ‡¶U#FÉæÙ}z”Znœ/žÙ‹K@“J-ã°`ñJw äpi(|Y ‚Ë(‘Iuܺ•­Ô–—s‹hZD0µ‹@µXª}š¨ßz:åñåÉ¢T Og¬ÏÓܤbÙ‘ ë[‰`§àäÏÔ„¢Óàé’”lS!*(ñ浊Î4¶·-ÄMpBÈÊEj|( UŠý·ý£†ÄÌ£tíwK°…l¾« Ç¡ “•Í3·ÙU D¨Ø€yTõȘs+nÔfžÂOST‚;V•KxÝ’æ&Œ“·!ºÖ§—¶1"Cd nÖ]VÕ¬ílîÚØ2+M•&DsÈøÃÕ9lI<ø‡'¸§“gZÖÞí´(ía¹½–áï‹›H ´+ÄÆ‘…¢“N\«°ãËÙíjÏ&ê]>W · '&">Œ¬¿iêiÄŽ\”dË\MlÓll ·žX uaê;r‘°4ýà¯ÂNÀ°=¨kðä Û"Syµ=.ÛJ‚ÞæïÒ'žs³,“Ý\qLj¯R”¼vÛô¤¦Ök—yïB-ïÔÔôî>d#`Ì**;Óö¶ÉHtd6 ¬œ%œ÷Â%µ’â9ÒUô„Q4Ü–²“^.Ê 7ß c»33É{ÚÕ}·:” ¡=A!•Nü˜ú‡öú|N7e¥2hòlÝ}½…Ûˆu 9QÕ⣺[¹Âz,*€Õ)AÐïV®X;MrÙ'¾Ô-5_0éÖº¤vóA§\Ç*»È Ë5K?Èd«„ê¦WðVÖ<Å=ÍÅÄiy+ÀÄ¡ŽÒo«F’@<*áMiO…m†0…Ùv—jll¡¿¾ôçHÂÒÒ$2þµØ~Ñol‰ÜÒÚ7M¶Ñdg–x> 8C;'©È³qiIj%‚“Uo´ÔªDˆ´eØý£ßj7ó ³½s Ú»4·rÉz¥‚ ‰v€¾Â¸+zPvaÖ>u”Kw§éá³µ-q2"(´‰”| ñ*–`Ý9ÑyrÉm»!a‰ùŸ[óv«a–¬,­t•‘‡I¶“Õ¸•pEɧÂG÷‘‡ü¦Ëb"=E}“&~Rh–vÓù“Í+%ãÛr ÈY<ɱ‰?Sñ×í»'Å•O9ºœqжy&²¶¤V3‡·µ_Ý\FÊQ§œçªºRœ«ÍGóe\îų¾ms[½/£LÖúˆäeÉAÞ†„÷*NõørÛaÏšµ¦ ¿{2àójF­:‰ÕP³/1@„‚¼MkOõø¶Jï“éL/!¹²2È'’^X£1,mö‰>õÈZÖØYXÝÏ ÝÀ-x+K•I 8¼hðññ§Úšý¬‘ºd ¿˜¬í쥊;¶ôîäDx2xÄi°nuøTlÄÿ‚'#Sï@-¥ÕªFÓ$&f/VÛÔÐRJÿ®ß³ß5¥+ûÛ(®>;+{]=£†O¬t^’2JìxƒÍ¿hí€XdwÜ#ôF‹X¼#Ê0z½X¯CsxdeøÉF•ý°>×ÙÂvæÕVÉÖQ*ËbiíCÉq \R¥@#Šÿ*¶@$2º¼Þ„ñ•…YcçY+Ä*’(ïµNÔ\J„Ø^_³zÍ-R4U Ï„|×ì»@V¢ü²³Ïˆ©Á©]É];Ç­úÖ|Z•^à·Ú åûáÊr¶1Akok%µ½Å½KBŽ®’„žR¢ªƒ¹?ì»Vƒ+Œ‡½‘¹¥=ʼœ4ó%¤ÄÅõ¼¨ð€ƒº©§.d×Û,1!*¸¸[ !‚ þ½|Ì%{˜\\˜wPÒñ7Ûìå€w¢ÕT¦™4·r4÷7) g·šJÅó0 ðB›+@iOµñä$ ÷2sêݶ¿ª[¼fæ0ð7§õ’ÁcI©t¤9åщ? Óö°ÊA€4M*ÝÞ%©3LÆÚÒG#r㲎Lh×|"; ÔÍžž±ÜÝHÜχµ„È˹ܣfUüGŽ&ÍÉysK¬ôé5³ z›ÉÝJˆš”ð…ìX»3¨Ið\d{Ù‚©u2y6ÒäÙÜÅú„æ}!­lÚ4i劣ëç#”,¯(øbãðåfg~ŒÄÚt^k»·¸×BCf°›kE³ç-í)®mÝêZ8Çí?%øxªƒ¾KŠô§„Ùט๴žÖÖÆÎæQ3˜,ÉoPªÐÒ§¹<ó`ðÏRÇŒ!/f°`¸ÜJ9jÒq¸ˆz„q`ôn!w•-ÇâÄY;¡Ü“5õ‘x­+ZÆ¥g¹·vUBí¸~ß`ÄŸ™uÓ][ÿÖÇw’}bx=k`Œ"%QV2„²1«7åüôÌz¶}U´ÛÒ yc%V™}$å;Ƨì„~"¡NÙ{“ïWŠÚÙb:}¨¹ž)øÈîŽc_N3DRÎ[€O·ûY¬¸‘Z„n¶Ë¥±žÆ&ÍȤ\°â%2Fˆ U?²¿kçL”v÷±(k Ky–»6qHCÉEõ‚3ñ~íO&4Ýû;rÆ\–2½’©¯¬e»hô›ÉQ’GýÜŠ‰ 6è´UsÈ”ŸÙSóÁ¿V]L±kyn¹-Åùÿ@,†V=Ì“­i³ÍÐ|?÷'qÉ‹5•âjòÇë,OtãÕ@ÆIAXëÇx…7D¿ÙñÈqql};‰Ó¢Óô›I!Š\(uºŒ€9™~¬jxÿ"âbn؉!¬tHÅ}sssm“ö–Üj¶bžŸʬí»4beѰEª]é~\ch¤Op²Çr;âH½Z/B ªmþVú‘.{ryý”Úÿ™žm_P±†.,­µ¥¥ÃÞOsÁ¸™c ¡ŒeÏذ?oùk†RŒMlÄO{4—ËH¾ý5;‹Kyh÷ªñÉnª(ÀHÑ—,¼©©ãñrÈqqnšt¯ªF8iÏ ÖsºÆçbS›… H1«¶x“û?øo¼nÆ…ì€óµjºB[A©7¥~c·†êÍLáÙ$*ÆÝø«pßضFÅŸµ”ŽôtÙ|¦5–‘wq{gpHžån¥¸ŽéÙÏ ÊËœ]~Çm× gÅvÇ(åI&¸<Égo=ôvï5¼ËɆ¥ê×*ŒgŒŠ!0ê”i¦Ú×ëmpm½S%ÝÌtKv*ª¥9t#ãäÍ•Ø2[°{*\Ú¿Ö‰…ÓIè:íÉŒ±2ŠòÛí7.‡®WFÔÕn§¥ù–xo­®¬]¾²±Ea,Q˜ªã‡©$’l£~J¤Ó±®Z`¦½ÁNtï.kZ•šÝÞê¾”|åk8PBÊkYe,çuD¸÷\¦R5_Ð,sJ"ÒeºÕ"×U³³K=¢(PÏ4Ty$o…YÅüHÏkDwGÚßÏzeµÒd·ô®ŒQêWW“zÖÑ*Ÿ†5Au<@Ž‚¿Ú딘Á4³]¼úÝ£B4×§¸’Ynm”Ç ²'‹p>Mxª‚¾›xåñ…12æ”ØLÐ3G¢éœîf<. ÈÂxþá`»U•Wcñr=¤ÀÕ ,î­ím¢¸ºá§Ü?/ªÇ1Š"HPúl2wñQ×jB¦jPF²Çk:Í(ãõ¶¸õ£Xmél«CÜ÷øi‰‹_$zþ¼öî,të¸.µù'Iíífá%‘IªÍÀÕwn@nÛ˜ŠÇv=¨ëºÆ£s®»£­Æ§$…m¬"šV¢Ô!’7,Œi^_lÏ„‚ô§^˦®‹©“¦è¶—=¶g \ÞÊêB*Ò>ÁwníÇ(‰aœ­  y#C°¹¹Ô.#ŽÞgF;²^­ä›í²( R”ãÇí0©¦ ÌžKËbÔÚ…„îöz±6sVÞI¦“p€~ò5uÕh?µ“f$ôRŸÍºvkow¨[²‡/¥ƒ’ÏÊ(êÌÌÆ´5¦K…J±ë¶—1<–Ó$«#X´ŸW›“(¾F¢¿ÛýžYY ŽÅ¬^y~ë„Z«ýZìÿwl©+ÜNÊÒ ãVêIn9 l»Jònµ«´"hÇd“ŸÂJàñ%É*"c·žYb%7ÔâÔ|­k裎Ê[†[V´…¥¹gJ¸ˆn*+ZWÅ\Œfé>Zð>µ4w®\ʯijPÌ–Ð1øcŒÈMAV”•âß³Ó=ë¹<;&GN²–eÕä’XcŒC'Õd”,’)Fê6*T~Ó ðHÙ[¥òÇoytf™a°Ê¢?IVÞÚ'ˆ0Tf%kÇç&ƒ-åÉ:ƒC—O€évqIvÊÒ ,`¬lÅVHÀPJ‘ö‡|7fÃÝiº.”ëy¦ÛÇi}([häTv·ºÕä’A3š5OâØ¶Ë¶H_"×#|©« Ú#¤$’ˆÁ›ÔB@!@ ½é„Å•”L:ÝÕÒÚr¶‘îmí qFæQþ!îÔ ·¶@Ê)<é6´‚òÂvo‰Éª”©MÈŠ»•]·“ö…Oцû…–Û*6¡¦Ü¤h÷‰¸fõ£,ŠŽ›JbŠ\Æ¿þRrQÓ;"ù1¹|óåOW¸Ñôë{ícR´šŽª±Çj‘ª€ ¿ªÃa>Ïá–›(2´¦¶–1Åo¤@`õÄ‚Œ%µ‘Ñ©!¡øePÛ1øUŸVWcuuMU¹ÜÉoè¤GWŽ3i@+Ä]þÉ©>ùz) Ku;*¬eä’gÙ¹ÓŠ‘NCÄmã]öÉLK$ò¾–5 [Zº¶õì4¨Õ–ÞO…_‰‹òØ·LÇœ«nöÀ6´–ùUåh oNÔÕ%¢²¬ˆÆ¤•ëìGNù‘¦îŸùwM‚ÞQwv‹»Õù3$@€X¨Ûqð…ñÊg¸Û«`Í!óö­g&¡åß/i ½2Úã뚬ÐÜ©–Ø8xÄ’ÆKU Wœˆ¦¿ *Ù1Ž@{¨$„Ö jØ%¼r¶Q¬ˆ‘ÛÈïÀLJCN‰(d’œOìÓíf5c›uÏ£Õt[wK§Áwo•nÞ;9>¯<ëe"9”N”'mó&$VãÊVwEÃoúI©.±]‚œí®íH$—ìªLê¸t,Gõ²Â96‘º}¤Í Ù†þÔBÓF¹õ=e£ýÍPn*>) ‹oÚÁ d9ì» ‹ÿ×XYß\]%¾¦ÒÚÄ­Îh%@vŒT»T4U¸f-í³(4}kR`ꉬ„¬°H›Øú-+( ½7ú2&@'„óOô»Ziáõ.>±¤Ç C$´Y`eFTTÈ 6+J}œx¶k1PÔµkëëÉ"ÓÕDJÍÂÈÄ£T±WÞ¦ž&MŠMsm­B•–(Å̤Gè‘ÃpY‡*€ˆ_lˆ•¶pŽHË=2ækWÖÊáá®_‹zO¹(Þé‘4©œw÷jº•äH“Çž`ÆFQÇ•#Û_³Sñ/é’"ØÝl¶ËËZn™ww&’²&¹©ÎóÉm;ƒrciêÏ+°´ºF#ŠýŒ•sä˜ú©/¾ŠûNd¸OyEtŽ@cd–¼ˆ– "ò£SÙ¥r\²°A¶Ã¡RóÕÖ”Aæ=BMF ‘Ú­¬qD© §§Æ5­7n_,³zÙ¤P(ý›yq6‘­•’B±ÄZßÔPR¿ð'ör©‹e¢¼Å®iZQ,Òjª S·µC˜ÑÍ+׉ø¿\1…0»äŵ?.êžb¶ŠóÌßW»òu‹‰îtËfv-3¹XýYd+J¸øÑ€øCäšæÙÑc¥Ý¦Ÿ ÝÝ¢Áa8aiªÀB‘© ‹ŠR¤}‘ÅJ×á­rBC—V²o/ysô½ú_\íS×ÓãTKÉä†2ÌÒ3=6¨ýÒ·qòÊrdám„S-NÔê/suå¼€^klñ¬êH*ˆ³ø• V¼»³d¢ƒ·6¯-,aúÃϨÚùjÒQ¹7s¼iÏÒ/ v4añ€9rÿ%p‰oš JÃÌ~Rº‚êk=zk¥¶“\ÛŠÄD_гÉÅK†?ÐpúÉäÀ'±ÜÚMm ³ßBLÒ–—C‰èÁ¹šS_…—ìŠÔ/,4ÈÕ<Ï嫵 n4û¤—Ë«%,$/ÎIÇÂÀ¯W—Ùveʄ鶭-·M M.Ö(šH«¨j²Hót>Ô© ø„AOL}¶ËV49+^ÆÖ ‹v)¹E5Ô°—¤¤UàU_¶z¿Ù^91÷kÙ p–Cmio꽬B9Á?X 2TòqljHùWˆcLh‹etXľS³Ô¥1Gcõɧ!›êˆë=û| ú |°ñ‘ºjÙ&—å+?/-Á–Æ+B#õ“ûÉ„u»Fس9?þÙîäx̹-lˆƒUÓîuˆšÒÜÎ-I,•bþ˜¢¤Iâ‰_åïûX‘³—šnµ«úÂ0æEnD×10Y§Nf¥ÀW^%å¹Ù¸£cb=-jù,Éi¡=Œ­ qK%²{¹g2¨‘. TM;jéËílzä"nÛ íL‚íeÕ, Ô¥†(Þ!KoKš£VQýá?i•/f~ôªëSK ‡’çP‘m¢ !¸€!åµ Á£Œͺ°§Ã¾[Ç&¹Ø(ÈäŽÆÛWŽk» Ôœ!‰á(*à‚Á Ø6ç}é\G4‚އyk>¶šœ±Å}x¢XL²„¸•ÖE BFÔÔP FÔß%!²#" #°»†ÞâpÖOu¨´`¸„1JHUcBC‚ weD¯#”……»4y&ú†›¢_Ãéj×’Î9¥¶·IQŠ‘ÕE* +P~?–U ’º4Ê!ØyfY/l缆ãO´ã†ÞÒ8™ÂWix_zY€ xªŠeÒÈæŸi¶°iO ó^µ¬r°vx¬…©FVõ+Vß¿‘¦@¥¬[i6-ëÎñ[ÑÖÚÄIp€™eôÒ"°êôþð|?gŰ CgÍæ¾q’Úõ§ƒZÓ§²–ÞÈKÉÍ$ãÊGÁPG.g~Ÿ^b ;¨hþLÔ´¿/Ûiúζ‘}uâ»×´ô·išbA- ^€øPÆ‹ñ†ûC|ÈMš÷7p€Ê–ÖqYmÙ-ã(¶vÖpÀ°$qÇû”!E7¡È˜k„IéýVVwyA"u‘^OÄ#ÑUE~*×|;®ÊVVún±ªŸhòã—JGéïL9[3¼Òu»ëí"àg§ÞHP^ŠðA œFÜöu§=ÃøÆ¹‹å Sÿ ”ÚIn±˜L%ûK#Ê#5-,³ iñŠ‚€/c“³³Yî°¼µ¼2A§ÉèÅe‹ÖV¸yIÛ˜uSº¡ošÓ&cÞÂÇ5×]É$±ÍYÁK’I/&ø\§ ýž¨µý¦É “ÍÿÐ?¶úœ1*ÛÄ×:6G! ÜEB7©%Ab ^«Q¶aU·“MïêÓFÊ[ Yȉnž(nÿìÈ¡KHÔS²¹à[¶ ܲ5Å“Iª*ÅNöдÓ"† ²ç@OóˆtɆ²“MòéÓÔhÖrC¨¥õ/ª¤&º³lªÛ½j)6Jx€ yÔµ DˆÖÓ´hò¤’)$IR(&½ªÃ¶J4²Šû½Fi#Yã0À€E¿99 éöÚ‚1kVžµ@4}.âÚô¿Õ⸺>¬NôœÈ:ïð©eOM°qpù¨RmE’Æx´{(ïf½š[›¶hIv«BÒš>„ñt?g "Ë)QåÉ2¾6ž¥¢M*ÞpEY-aOI–B*b~…Õܱä~®=YäN‹¥Üº¿Mk|® qÍT aR¬Aíºý°ÝÙ›YÛiÚ¦Ÿ§éOÖ©h°ˆ’‹¼qFŽ%,PÓÔßöò‰Ä’K(Ì 7GÓõtçµ·I' ‰'­Ö v1?Døx²¿Æµø["ËoiBþÊ++Y–Ú2ÔrÑÇ8h•CÐÑZ¤«6 ð÷̱}\n+HÝn§‚Y´©%³I)oyunöñÝu¡DW™ ä¥þ%þlI€ÈF½Èk›ÝKBXt}]´žI×®‘ãýÃ< ªÅ"ðV,¡Zªuë€Qõ’$~iå§ú²OÌÑÑ®c@#Fw$‰XnDÓ§ÃöH ØÞ‡õ›Çu}$ï<ñ‰AY£.Tl´ûmݼ)€îY³™"•´ï(gŸãŠI$…=`Îæ¿ò“‹­ §_žSüL®†ÅŒÇo¬Ë}%³Z@²ñ q9‘a°€ÍP±¬d¨äUO.·ó²è"®ÊKÉa[¨®Î#I HXCöG1»0 ø·¥,»Ô4›¥žæŒU¦ždUã èU+ñ^õ£ »›_ Ï—íu+«æ!¹GHå˜ÇÕä··¡a,;±"”ñÌyJ‹|FÛ/Ô|±¡\™5=6±[=8EêIÊ£bé_„Ô¶ýï’ Óa­q¡›k;8n¢Vž[F“”’Tl ¢ŠÜН\I;²cÕ…ÔZu¹‰À3#Lõ˜r^LXÔ 6øz þÖYc› —j–y¯PÒcóL¶Z²i«u,3^Ñ I”ÇáËÔ~e™•Õ!V-•ý7[6 Ó4Åy v2Åx’h1HËi°Z+Û6À˜"€(ªÜc*žñckD·)]äR›Ëx4õi º!:lK ™Ü׋¿(~6V¹}£Û&91{E~”Öm¬çÓ4³ž›y,7+Ôë š5¤Å•JƒË ^Ÿ»`À ® Pz«Gå]5-§ŠÐˆíZ6šK¦Z·¢ò¥&f#ˆ.y6BS!1Ø™k׿Kå¾½·{hí¬íೂuú嶺ˆØ$`;0"¼kÉ[®F¶m'¹uå}NÌÐ×w¶pSë°•/b³Ð9eõY¾-œlc1ÕH´òÛ}a´ÆÜ( ÎÑ€ž¬…yuv°5-¿\´H™ ÑQÇ K]@]épÐCg-´uª(@ýOÄÜŸŽ@²Ù4‹ ‰»¸šÛO‘U¡ž8ßÑŠî:–‹¢° µ%UÚ¿<‘$r@¢¨­2q¸´–í¥ýûI8R¶æ„Hµ­›p;¿Úë\“+äËîêâ+‰(í–t1$rM#´@\1P±²(#âhÜ+ÿ±ÌNÝtm5æ†Ô£¶×4·Ô%¸;C´€§ ÃJþcg¬œ9 mß2# 5™ß5+O.hMkwev²}dªÇn¯0ž•Kú‚¤Fìñ íû[ädHe)~—¥yoNÔ->ªÿ¾†ª)G&¬ÁÊîÇp*w+°Ãr ØYzO5 Ýí®fšâä]T…SP3€xÆ(ÁW`þÖXå[5H÷*Û_ÙV[­SJˆßÉÁUÛŒQ¬h~Ê91ßs$áÿ3dÓí¥cý^ŠZv`O§Z2PžT=<|2¿ËÄ–^!¦w®X²Ï¯êMÕìåiìáU—ÓD"«ˆJ.4åû_dÕlE¥¶-©jRF´¼¹xÅÄw1BDh¡êÖò°Uv$Ð楗½22 lÊ!km«]E.±ªÄ³Â÷ƲÖHd¾Ö5E ^Žkßö¹d$Ù‘¬ºŒiŽðÚ«±!¡˜FneYˆnu¯òüéˆ!‰÷µþ$²]KpÑzoyéq«MÖj}œT—^Cw+EfÍzË 2Í3%wŠ(@ý_k4Ù¿è›wô-íõ/«-¤(XÁeYxna¨†CO‹o´x®c‹îm$ºûÌ:–‘.«¬F…г¼®¼™QkN1Š¡=(Ûòé—ÂîÑ"«ù§g¨Î,<©Íï¨ Í¿è±³¥~2 —µ¢¨?ëo—GˆD®FË›Q»2CQ»IVÐð³²LQ$”Ü©¨—Ã^¯N¸|‚vcyÂÖÖ9á{mVU¸†Ý]Zx¥–èÈë$–ŠÛ²/Ã’0˜’ýa§Ühzš5ï«G­If¯=“FóÆSÀªájDµßír9®4I§+¸Kû[yge‘L±Ç¼÷6óF}Nœ€ôª¿Ü0ÀšAT±…Óì m3Tn.º„õã• TP¬A  »‰²Ìgkæ× –Zb5yõeåZ ä fVÙ„€‚[§GmÍrËOÿÑ”[i5¶õ®­d¹‹šˆ®êJz‚¦•µ;vÌ l·Ñ«P1O åmm éƶó8TPz– ­E6¦þù#æ€{•ŽÅÃê×Kmi,J+ie33É*ýˆ¦Ç•hX öþ\‘É;!¦ŠÆÄ‹«[ëÙuB@ŠÖî"fŒRd؇‘¡Sö{Ãdû” U›Z°¿ k›[$@Ï<’…ï$@U ¯Ã_§WîC™4ÿJXt«1ßæ@J8#uD  Áa¥&‚‡Gëj5i£c^h³¸hciΣn@¦¬¿<˜¢ÖE$·Ú„Fê+[ki!´µVdhKbç“0 5=šþÎ ¦Át˜Gæý-PËè‚4xà–xâõ£JT‚vñÈp””ëHó Yé‚}VHlQ¤¬SJC+# zŠ0jø‚?ÊÄ€JÙ ›u-imíSJ6zDÎ'·hË[<–…Ï3IÄÆÓx=E rlg"#}Óé`³´µý ¤4K#3Ï4Ï,“ª¡»óå P8òü\k¾WNåœä.‚Û2g´]QµÖ»,¦{¹®”[©`xE$}¾5ûDe†Fê¶aÂ+Í+}FÖImÌ¿VŽæÕ$ÉõÁ;³È*Ë]þ6VÂBA¿r„³›õy%”ês,KûþÆâDQ Zdž܇/йIA\Åagè™ Fº—ÒŠa!º(àú_îê}:ríŽý쯽¹õM1Ç 4O2P~¶Þ“I->/I˜ÕEõÄ‚WI¨ê6ì‰l`I¡†éš¬/†*>È ÉÛâa „ÒÞ ËÙSN¼’3O‰êgºZ½’6'á1 ÌŽÌü#'ŸÄr2#˜æ˜·{®J÷¬ò¼z…õ”&;-4ÉTV&ˆÒÉE4´È €…GfC¡.t{›É4ÛÍNHà²`Æ'¼‰c—™.Ì(b¥ÚÞžØD¹ˆ£†Š*¹¡'9-`šS*D¡Ø(qÄ|;|&‡}Ùºa惰lÞ_ý{ê6ͪۥ%½¾ƒÕí½EÙKò覜Km„Õ(ÑúEÅ»Ü-ÕÙšk”Wž kešHÑ€*î@Š5,jÎæû5ÈH ¦VO6µ{¸Ò,Öéi¨Op שQUeä8È3£t¢É²Q¡°`A*V•¤iú˜ó+ÛýK^¤öÑ8‰„¿V–> ÂjJ¹;Ó‰ØSÝžûtLM )&­¤×w5°iï#¾¡/æÝ'‚*uçð9¦ÍJä€lOTõ´ÿYmJÓä}<1žÖÆú¤Íq5Ï4€1ޤ7ÚêÔ]ñó´ùÉLõà“Y¶W·äŒ¼¡¢š` !uˆ7¦bVC"7ÆŸ|¬H›¦F<%0²‚-fxì´•xí\íä™ÙˆÙËì i¹ÿ…É’"7kÜ›D]Ïs ­õ½”¢ú+(©ÎhVî%¨#¨ (ëURÇããöÛ 9±›}?Eй‚Ú[ý^çá}npðI9d¥7ÙIÚ”®NÏÁ2ù[_¸”:¸Xžª‘ܯ+U ¢’›â?ä“óLj&‘÷¶o—¡³M:ê Nâkt–xf‹ÒQtYE#v$j|;qø²Dù2 £f5g’GÔäõõ”¶°?ï–/ÙæîE6Ýžž£Ÿ³“&ØŠ L—ó]Acu}õ§n õ4ªz¢2 +¬DUTŸmëË•+D² çi5+«¦+®åˆˆr±„H´ïþ³eQ)$Ú¼ƒ„²NÒ¶V†9•[Ôe“oMš* ”û8‘ܘž¥ªXÍmèAýh7ï¥fFvm©>ã©åˉÝsé5½´÷Ÿ»J°5 Q–R¼™ Z ×¥8âè; ECԞݮ ‘nQ'n7*BòøQ¤¥wR3Ólݵ)µ-5Û4o$B9§L±£‚% .㓚ˆl’£˜n4Ù’ÿRšF‚AÆÔ[ˆš5UMÀ¢vâ~ï†1 'd-Þ­´2è-s¨ù—ViD¶¶¬ÄÛ@£É,€ˆ‘¢|Ä»ŒoäÙÂYs¨Zh7ÚM­$–Áûê¶ñ»´€­d{‡OÝq)¿¦ÕÞ˜cê„‘F®çß/k7K ­ÃJ8m-ž)-­}V¥Z{’ ?h|MÙx×C‡“}y#þ»k§´Ñê0z×Ü¿ÐnQÚÚÆÛ”H­Ê XT¯OÚÈïvËøRós$·1¼V±!†täê@åD-¹÷; ²ûš«½YØ@“1µ¾¹.\HcÇû+&ˆëT8nù ì•jú4×R­Ý奫e0´ªð*PŽ4~ûÐP×®G‹£0žÃë!tŸR3º ã ,Ë:©°Â‹B«R[ø²"<¶YICO»Ó ½çoõ×îÈi ˜",Ƈˆ¯>Ôç@§å’1´OMTÓWÔ™ŸXŽAKk§¡ BD’Ä©fRÔ5Ê·‰¦c}ö fîmVF–ßJ³”ÆÏÆÿQ˜ƒˆ¡à·¦ô=Çm²Ý˜ˆš´ßËúTÆî}Bâ1lmR±¼A…TUˆ‹Ó  çö… øeäÛ·4&¿ë.õ ÔÓí-HÜp2JÄ‘´q ±?²¢¬k,ˆ¡A€÷`¯ 0ßC©H°ØŠŸÑ÷¤ÛÏ0¯ÀóIæ›ïÁƒq§Ï-ã¥u@ÜùFm#מÆ$¸·•œG<5â¬Nò.à•þZÑ[­"Vƒš>©t-lõ #47RSᘬ’ÇJ…(½7;ý— šežRÒ­êã_õ%¶{I—§MeÉ iUqIGÃ$­R]ˆâ›Ù\äy3«%7º¥«5ì±jQ]'’Ò14¦E4X!C¯óTø‰ýœªÁdéÇÔí¤ÓRæ=>K¸ÄËshÅÄoÄq*º9n>²¥¸RÁ¹U[P«e{©y{C¾™æBñÝêä”éÖÁcš ëS"Hå½vP£ÖãÅw9tÆsáåÉDo𥶡wx ·V“Ã&o^¶ŒHÁ©#õhve¡é’”À b¿ÿÒ‘E¢y¯T–[ñz¶º¬Z\f9m JÜU“¤ËÕaûæ˜!³”<ù¬mòæí4ä•Þê@Ïs(· ]ä‘”€`H ø†Yŵ°t$¶:v‘4’hú¨˜Èz–‘™£yl…Iâ¡EOÅðôÉHÝMP¸o«CsuI/ÙYšÞFõëjØrø—ìàäƒ""ßZÔ¬ÃY]'¥i"ªG "­ÙÙŠñý­¾ž˜((ä ·úb¼Vém÷’«‰'³å$v¾«Êá¯2òŸ³A‘ÌîWNÖ÷ßS¸¸3Èü¤Š'¯¥(„Õº%|:ôË-¦’È¡“\–m#’Iõ®~¬VÍ$B4•Y#&¦•â*#þfÀ[brò `³Ótö“N1"© ¡ceÚ4ŒEÎâ´ý¬®¼¤îPɨ[Øi²ßß[ˆœ«4òpI[ƒ0*~õ¦ýr\6Ä•9|ѧK)£ØêݬÆâêØÛË4$aQ,i×áþ\vÌGe±‹]WQKM>-+K±’ORêçT7Bâæi6ÉUkð‡Ýÿ“LEÄ2Øù!®­´i^æòãR7ðVT™îâ. #X[‰ >Ø\²ÚÇ5°iRÚ#hútWþ`Ö®xÊÅK×Ô N#ùNß·•ñíe°Ç d°ùJ.-s9IR0[Ó˜¸ÅUJº¨r­^›/¾@NÔŽädž_Ò–’G’mIÒÄÑ«ˆÏØ´ â|>9±2=90&Õ|½ hPÝÝÝê604pÂU}y×Õ‰Úƒ‘âhrøT|_k!’^m€ZK¸<½tcú©2)-ÑÂàÑT(aWåUAVìYr|ű¢€»Ó^+x-ÚÊe¶y\ItìÈŒ@ 1P¢"vø~ÖMG$D×:5’ÊÖ÷PÝ_E')nääñ„AÇm–†§äÝò ¶¶×Ušìð‚Ñ'…€_¸¸xƒ¸cºÆv§PWí?~øÒÒshžaÔôò–²F±ÍÌßÈ‚•Nü”ß Ššä Oèû*.¡lé4Ë!*#ŸšLÓŠ‡ )!a»ý¯åÂU‘« •"³¹šÊîh¬Ê!ý&Bˆ•ŒÛCNN~φi$ÆÜ<žž£ wWš,è–÷Ú×îãYiYM@õUXšÕÔ2¸6åhºHï./í/¤K›éV;¶u†Ýå`¬Ñn;*±!H?Ú_³L³fÇ$žru=aà‚(ËÈÿ܆1ÚY ]«É””ðí‡gº O¶Xuy$Ð`žV¶ŒY^Åp=úÕÉ࢔‡~g¯­›dI=Y‘l‹WЯt•‚ß]…>ºI­!2<°EQB°£+q§(úÓm²± M)ŽÌcT7Ú|ŒMßju’8ÅOÀ¯ûC§Ã\¼Qj!u„žh7÷7vúeƒ!–h½7õ‰•ÛÔ2 ŠudÝ:a4}ê9"ï.šúI.¯Ýa7¬³ý§F"¥BŠðÚ‰OµL`ƒä­i¯i:Zy/亚ò –(̉¼M+GË€X™É`¢¡Ùwv\D­x{VWKl¬C<ÓÍú¦ †–îç÷j@T»+û±¿Žî‘`Ð[jKw¨XÛßGc+H!ºuQ¨$r0ÝJ…¸Ú«FVk!&a3McTÓféæ+AÒHìçµr#@ä+\ÈYH«û¤ïL«„Ê|‡&;oi*ê–“Ý=Þ¥i¢ïœÅf¹2¶õ@FsÚŸ 夨EZ»’æêþæäRÚù$oVKÈÖiyÉÑ9«ÊmâpG•2’M‡T¼¹—Ñ+ÚóY/îU^8V© êʲ0 ÿı‘mͲy´ë'ç|¶É-µÓ<6òD ΰñââB¨©ˆ övë³Õ’wZN³´ib°µµx"äx4Ó@œ—rL¬jiQð–#•r©zM÷¶^Ôè–ϧéù-Ù’à,rÞIF‡ƒ0qÄ''J°âîwâ¿g¦C$nI‰ºQk$÷–7wr>£k‰}F¨ÊX­(B…Oò[棦dFé¢D“[j—±É-ËF ¶výÛZürqJQ#iþÑm˜³qÅpÊ ìÌJŠ9|ÌÚŸ§jÑCgiP HÂI=>?w›ª¼|qðÃ"ÿÿÓ0:5¥•ÁŽ+íFåd=¤§”½ Xð ñ©aÈ.bq&‚:-VÖ+«‰,§¼»XÚödw˜’+³†êiÁU‹*Õ¼pU„8âkiâqakèKê¬^¨ fcÀ Aýøå·cv²§$ê7 Ôx=1Ìò°V¨cºÔpUì¤ø9rO0ˆ6R½µ ‘£” qÊ@+ZHí³Jò#e#’¼z¢éQM<¼6Ñ£ÿ£Bp“~@‰6 W`NôȘß4ñ } 9íÖ mXµ–O¨½E`8²u €+NGö®% žLá/4=FKdô­ÛÓ’}9¡$e_†7eP¡ðuñøsdÌšbz§™®ç’]Nþ/ª=ô¾µ”VàÇ2ÔR9èî#PO•¯Ûþ\´G¢ƒÕ&}Ã]–[¸.¡-œãHþ8I™]”ÈêÛ§3Å›ör|ENÜÓeÖotµ™#±hÑÈX ‡žEO²òRµŸˆSác T‚‰¥¼I­äµµ]I WV6ëÕR2¿îÉ¥Þ6© Ë|H$YæÖš¶Ð[zztp B"B_FÔ·DP+ÇJ=CmòÉ^è ­ŠåÛœw-%åå˦c1P(vR©E«7ß¶-É­´—…a–ÓR–(fVt·¬£ Uê92³W+vD"î¬ô˸íÖçR·ƒN·DA¥Ÿˆ!äj“QR éË'Ây1âÐqß[‡‡HÒíÉ~2Iä")âýØ&C8_Šþä/Ãß)£~¦ÍªÁO´1´èŽ©>¥4W¢’åãŽ"Þ“n$na‡ï L¼IeÌ|“â< 6ÆÀ´„4ZœÏm¦hpë'’oV(RI‰g” æIFÁ+þÇ2k„skæ–ÜyVÊcó…UhòE0Û±ß÷q)©`)AZ/òáÖèZeŸ¥4Fòy <á‹ê\"XÐ-IØTSá†2yWçõ2°š-›k‘%ÿ¡bÜî%¼‰X‹@Â;XI¤Û«|#ýQ’-b‰Ku=Z眱Û]-ã3ª+“*JY ²Ç±¡Û/nM=Q6­Ì_¢^¹¿iLõ¸¾àU”ójÁ¶*Hú2¢7¶ÑÊ‘öó}ZvƒQ›ëV×2¼²ÂEcf JÈ@@©ZîÇzS*óˆg9I)ó7˜ô««»m>ÞY£»Õšt»“Aoö~ &% *rÜ·Eø¨rqÆ@µ3²…½ÔtM2Ó|»£ÁjIK¿­ÉKé€ÌïêúŽ¥)È’£ãâ¹$M’Ùb…)E=·™Æ¡wrŽ÷¼Ò8æaž7\¬Å™  r¦N#‡f2'˜L-ô[FÖh-õ ezM=ô²1¸{u XâgÚ5‰x²"~ð ë‘’HA_ë“Ù\ÚÛ]ß[J"b¤MhòIÆ$Ñ$rkÍIa#ƒÅ¸°øš™>]Á‡šB^ê¶.#‚ÈÁug3s‰gåð4l æî9Qúºs |4(‚²!&úÞ“õ¶’êY4í%å¹sUd‘öNL©CÉB•ntR¼rr š£¾å(µÒ~µw£¨r,õú”14p¤†r¥‹Í¿!¿ê´8žTÌeÿZÓb†KñÕía·ö¶VŽÓÞ\ÈI %‰š§‘5yK†e¯Ã£i$w±‹ûëÛ9lÖ{ŽÞB~§ ªÑ[[±¯ïU[i6­kðä¸Ac{·¤° /e‹ÓÒ­mäXYÕ*y°ÜŽœ™øÝ{£á¼šâÙmµ©ÒòåaÀ"¬n‹mÙ ò¥K×¶'bÊÍ4«y7Víé+1õ.fz¤`xEd‘’­šÎÜÑQMmi33ÜEë$\p¸$n×^45~A†D²«Åæ=2 Á¥Ó‚ïê\@¾©.ÌX†­+°øÊ|+ð³S¦DGmÒ–ÛÜJc’k˜$0ÆÆK«UNqps³Mij-v• Ùo6'0_ê–B;Il"ëÇkn)f0ßݽ?—ãS•&`Òß1ɧÚúBê/ZëÓ•®¢’xš=Xô]þëŒ,¬˜Äf+ZÇêÇ1ÖCo$ˆ²¹;rUr4û_È2Ö$¨Ë>Ÿ ÇR'Ò†:É¥£8^Œ7¦û+æÙò¼:åµ½ì±$Ï4/r,e‰Z@­^@ôU4ÿ' eL†ëí¢šÎöÝ¥º[cs(²´ŒAXÀA#‚£‘âvè9÷ɶËbµYaK¶õ#ÞÝ=mÒˆÛr FꦫēÌíujâFê|³ Ií¬p,‘‘xKiJ)—â äñ#ýž1Ù‰Kà¶Òฎ9æh#ÚR°•y-kE$ °éɾíË ­`odž]GMº»h´É&ŠþYË4Ì‚¢ Æ8ñøÜÓåƒv\‚`-V8`Y-+ûÊ,1ú®bO¶}DU!ÍT¸ä¿kl¦Š* .ÞÚúY¦¾·»¿Š-Ôi'­0¸ºœ 2+•ø•vR›d¸™ÃÏš2ÌÛiVRZ[ZqÕksoTô‹®]ÉqR|¦&;Û.ˆm;BÓäh¯®þ°òÉ0–âÒÚUQõf é*S¡+ñUúbd[Di[^Õ4Ï+ÿ¢¨Eç2ÛÁyvZ+f¸â~JH@jìǶ1EŒ¹ØäÁ4x|Ãæuý?©Gi>3ÑÚN™ëNÓÛ‡à'ýé ±»m•[zSLDÐlóf³y[OÓµA§Åy‰îÕ¯íðÙ"Ê6O´½Rîñ–Êá!(Hú˰‘Þ¢¦Š¬+´ƒˆ ï‰Ûp€WQYÜDž”ð‹¦•À†âª‹é3#O§í{bTM´#ÔmN+‰£P–ñ)“ÊÄÜâªíÈ–?k¦Fï“.A|Éw Éq&›4W7W¤|…™¡J»~$Ñ€ôiÕy³tevXŸµ)´Ó/µtkRO)k§º‘šhè~/ETŠï·òÚ8%*;2›i:~›$óúÂk½‰kK»æø8ÆÞ«òí±e?Ó*6}ìÍ ú)ÜK§ÅºÓþ=(9[o«ŸIåß‹²BªK)aEåöþØÂ]´–ă©^.œó·‰Ñ–0x—fãE$n;ºýœ_&wJíô66s~ƒA¢\s–&æ}kÖ`ô €›îiËõä/r/¹49¦º¥ÂE¥­´vò*Ç(ôxÜ@Š…¯ÂO%fû´KdñÂÚ¦w ’êP2 ñÁhŒÑÝË|õbCð¡*ÅI©þc’K’“\ú!$Õmõ8ý+{yf2“%½õ¬ ‰£ "iUh*·ÂÏÇs°ï†„wA²“XØù‰õ+ÆóUü6~SE¥¥Þ˜-fõ.èvV¸"¨ûžM *ªÃâÈÏ5Hݶ8ÁæS{½Z}5,­´1ZÇåû8`µŠææÌÇ-åí9‹B!¿9€•_ Ö£*Áâ–UGdø“UÒt‰´ëI5 &/ç&4>²—ôá@W÷`Oí3ǦÒ5[+†8™Ý3™<;-k¿7Edöål4hY%“R˜—innÓ€­@,¡xÇEø~3VÉž.óÝÜŠ°‚X/#TÔìòBѸ¸J,’J?b5j†Z‰ÏO|¶÷¦®bÕ ó5ö¡5Ìz³Z¬¤ hæD^!E]Å:(¥>ÑÛ&y1á<Ó;‹wžÿÑÏiñ¢UÄÁ‡¤(g~!ÙÿeùºåuÞËŠÒÝJÎ[›£y¨j1[êa½°³]¢‘Ž"€Š"i˜äÁ­(›}{ [\È‘Bêg·2ÈTÞªûÔ‘ñoNXšbYd&4Ò¸ú–r¼s´³–žpa‰Ï$qÙÛa^T¦VL‡4ìÂ/´K=bþçÍ<§R¿¸X—O·åqp–°C´Nàв.Ä''åǵrf\;3ŽâÑv>_:}µµÆ¯isi£ÌÇô}¶¯HEZ3þñ«Èö{b$Á‰¸²ûkí~êÃQ–êÊÒê ñZ‰Ø|rPíEÚ5*}3ØrZe ´ ¿6·.˜–·¶Ë„ó*µp«*%C!G©µ|Gp2Ñ~mvy¬Òü¥¨EugqÆ[{-A}/«­Ã˜ã˜¨/!­£!”rï¶ n=Ìáõ5ækhïï]-¢´àKˆý0’”$ßfQÄ•“íý®]°À"dS}6ÚÆæN...‹zd0®îä¸*Aþqð¸e–Ö§ðë·— {m2Þ;{òô—S½)Ê@ÓŠ)xâ«î|7ÈU³å³Ô/<çoMBáî¦$ýuø2HÇp¤ íÝ‚n™hªcVšÙh¾hó§hž}¹XRÞ:^†éŦ+UIëÈ @ÕôÁcÌý¬¯Š5élB(:eÝúZê-Gb³-ôAå`ŸgÖ‘6>öwÃÌnŽE“ŪêRn¬Äfécôå’Ù–ÜZñTÐRœHÀ@ëÉî™ê:›ÝÌ-.tèÞhQ×&*>$ X†+ûrË—ÃÛ6䲪ÝRÒk;8.]ôØŠË–Œ±(•’ÞM¤d?hK^ý”œLmAn© ~¦C¨hºª5½Àâèx Kò;CVcN’4-üßgçRPlì•I¥Ü‘¬-´¢#}]€G…ÝMPV´'’µ>O‡$%B™ ]¨Aiµ½Ö©qr²³ªÛÛ ‡hêG&i+!©ø.=øãI4‚(ZEy¨;\GªZ —­Éƒ„r¼Jj XÂ’ §Åû±ñ5Z¹*¥¶Æ¬K%¬+¸¾ xF$‘j@ #-Ü÷_ò²%¢Yek4Ý2;“˜ÈIvbkñ¡x¡? ŠíᇇÍl îl5X˨^Mm?&{§ƒÓ UÜSó½ýœ ìƒE\]j8ÐÞÝïn®[¥¬e"‘¿xõsðôû<‰› Êtý:ú;¨¾·|$Ó­æôš+·_^T|(ƒoQO‹0¡§ÂpÞÍR ÝVëU¿•,e·AýÔÉ3s6;ÜOrO²åœ˜ .4ýr4+ÍZåÛŒ‰Ó5äÄ%ŠÒ¤ý"%m”Öv“Y¼k%œþŒ-;,¨câÕøÌl´5û‘4¨»5‚ÊìE¨_ÁèËFHvÏû{*ƒÇub)ñ •[ n×EÑlžæ b³Õ.î&žî‘QŽí=Æôw¥BÕ¨>È0JDoÌ2ª’»ës¦ªÆ— +] LÑÉHš df¡,¿!jj~„äl‘Ü  ´v‡4Q$·zk}^öbþ¦-Qš"„Æë!!~4Ú_ò²=YžLM²üÀóF¢/õ ­|Åå«·–šœeáŠÞ§™S/™T—âKSݲÙJ Ȧ•Ûjv:ÊÚ®™z–׌R [EXaHbyB„=6EøâäÙÁ¾ý[e=”õùgae«H’JÃÊ-˜ƒBJ†ÝhOÙwÁ§dmÓ´§J¿çpñ$¼ïP©>†ÆCÀ)xÐÔŸÞvÈ”Õ{v›ag;ê>·é>M ´–ñ‹ê©øšà¨iJt팬š,Ç+•ZkÍ6kh#†8ÂÁ%}?VIdØ´ BѪì®e4§Åá„]÷°4FÉ iwóÈDvú„ñO*3ÙÚ´pE+S©bÊìU ze—†üÆù2hìˆÕWDÂñµÏ/\éÚtövWð~òk·3´—œTá ‚ŒQx«Üƒ¶V7m†7¸nTS­Þ]ë1Ì?v³ú2@Æèj¨SmÎùaºiÏÿÕ^Ùa!e¶{Ž2rTº´`’4)IV… mð×—¶c7Ú"k» o$®fâÉs9-;1®ü‹0ýàÿ$`æ©UªA£ê1j7vÜ£‘Kà‹ç %ø,†0õ“i¥I®ï¯®$ÓšØNˆÒ%Š6ܱ”(â”kVÉŠ e w{-›}YX<"œ#ãÄ:Eš´¥:d@ܪZkq]Ëmés­bõg¸W´Œªüò¢óV#öˆ+‘äÈòL´» +‹™ú9-¦D%O¦¢;˜Íwgj;TîÔ¡oÙl#fK¦K£ÚXGñƳZ¹’ÜK¸·@*w­ Q×zõÊL -œuÍ­_êZ­Ø·»ÑrIÒÝâG†ŽWx SCSÓ¢«}9dE03²„hoÄÂX­#ŽÚÒ(àWޱÉÁoµTr=x϶DÐæ›$•YY%Iõ=?R‹TXÜBÆyÚiaº(Y‚iĨû5jöÈѲ¶N¼±`D­ 4qÅ4Q_\Í™o#PÜQ2—mÉ‹á3ÇókQœ‰óý§n¢Òg²›S¿[›HdÓïm~©¨kdŽ6SÊY&‘A•Êšü'£Wå\Öº§:g–,ü¾ZîIýMI“ýÑ•‚$íF3_Ž´ ¿•ºäg¾ÉŒèØ@ÜÙG6¦·þ`½mf;ƒ»Fæ ðEv$ ­9ÓíþÞ$mCf@÷§sëe£B4;cy-Ä1‹¡ëµÃˆn¤³pØñSÆ¡~ÎB õDü_ji«>ªÁ,}5Uµ³­Ò4r/>F8|Téñpï“ KdHEXêK­ê±[[™/®dWf‹Nw‘!…DÚÄeKš!%Iµðãð‹X"żͪÞÜj^Óí’òÆÎOôß[Œ6—R¨æQ¤±eUºÛâå’„EZI¯rIg=å¥Ô°Û4­vIŽ6PM¢‡Ú„¸Í:*|?µÐ ™ÝˆØ§Öì—-¾’}BFI¥+žâ5zQ•%Xöš¯ÃìòíVœG¥YÚÇ2ê±$D‹³y$‚âVIkHâ"´}ªñ|ð¹.#²H5ºT’ÜÝÞ³Zðq%§.а *PkO„­“• ÑW:TÒÚÛ-”Æ9®‡ïÈtœ¨mÝ ! ©`¥¸î­‚ÇÉÔV)§Þ ytä·Pí¨I90\:ý¦þ>d·Â±*Ðt\x“Ió=奚1B‰õ¨R[Eà«*¡5õ%e *Ñ~×.ÙÏe<’É$7ã“Ê†Þ ¼’Ú9ŠnKCÀHh ¡ w&•Û.ºjáP´±’êI.áÒ–hÁXá†öî8ÖÖƒd W’» ÷ø~Ö@ž‘£tä—P–T¹…¯`ˆ–“Óõ%)ð kQÁºjü#j6Džª†ó¢$ŽnÕ¡2Á!*¥š´ 6ÎA'‰oÙ91³Jí¬¢µhN±ÏIÒdq%ÛZ ’W ñPÒ5\Ž@÷ýçù]r$÷2 wªÜ=ûiQÃsrކå!‹i„,Ä$­5§:RµUðɵ”L6“ÛÏ,×÷—‘ëc€¹² h ·R ÊÐîü¹9ÀM†#b›ÀövѤ–ãëá™Ô\I@ „ ä¨Ry×â>8´I]¼S¿]B}=í…Àô`º‚tçQ³óŒmðç¹]ë…•ÚfòýbÑΤMʬ@O”q4ÉpªÇjÍ/zdÅtj;¦·hséËi¦é©esRnšC“)Àu;‚Çeãñ}¯‹ A»O){ÍKO˜[Ý…ŽeP“z«GÐPÊ6ßïÉD…”[¼ÔÞî5¸[„;-~¨¥Ãî.9'âôþ/òp-jÂ.XŸQ³Ž+m14id“ê°\Ï*¼Dž®ìì® šÓ˜.À~ÈÆø|Ô 6‘ß´qÏo¤iV“Ê,Ë‘z÷jÍõ ´iD1ß~Ÿ.Ø!u»9QM¯$¶’kBŒúE˜B|"P ²–á+Ú åV+•Ä%¢hÒ¼r¤–i(ý Ïð¡$ƒñq~»d®ŠÈ3h_O°‹O´Ñ¥†kcj¶¶êS÷r^ÂAahDlkýçÄ«˜ó‡6QÉD$w1éð_®œaKˆ$áÊA úŽVjþíy­ êÓ„ºì[8ãWHMJÉ,í§ŠÞ ·¥r¿¸…RJ1÷P½s(ÕÇâ´‚e{ØLVÓ½¤rñCx-oeJPð ªLU䯷%Ä‘tÈF·BêWZ;ãè^aqÁ>½sëÁ"Cõ€¥Q ÔØ3rVñ\7½nÈ€v@Åæ‰~£™îÔ¨ôåF„Ï<µ "Œ‚~#×þà>ÚÈUÑ,n4×k7Ö&jL²=däÄê{ÝäI¶{3Â.Û˰Ik"¹þéÕ‘$ÙÏÄTS£õÊkÔÊÀ.-õ™/n>³%¢Ô*Þ곞‰%©¤@•aÅ,8Ž\WâË,»/ÿÖ9]3×d3\ñcÃq¦Ê¨vâíS·/³˜d·¤—šMçÖ[¹ qËX£¶¯ÂŠ¿*:޹õí’%1¦a¥ù]4¿,Eæ ¤XÖ`æÖ®³Ì‹R_ís<ÎëSZ}¯µ˜þ 2®æÂÄn4‹øíþþW’v§ÆÌÑÄäѺŸÞrœ‡öOÃÇ/âßf¾’gHÔôM-¼Á«G<Ö­ºÅJ„ Äì@Œ»òylrQ6i— O¢yÖïK·AªiR~Œ‘U¤ýŸXZÉØ;PÔ½yxäŒl°"ÙõŽ¿a©[Aú>Ò(ærª—w¬-àI]¨‘‡Ÿoî•V¯í¾G•Ú wE1Û\Ý:;U¹óJ8n#úÊP’X€­JÓ¾a‰‰-jKdÔ5/5 Y‰¸¼·‘c³õ ©.èÎ9¾ŸÄ+ðŒ#’ýÉt~cÔõ ø|»¥Ëve¹eÏm»Dã /%NeGÂY¾þVDÄs-‰z&ƒ¦Úêj–:#Úù~Ä ˆ,¤™”IwÄr«Õßâ<Ÿùž¾‹9×rÜ7ByÎñiÑ]^8º|4!€S’ÍZPuöÉc…1˜³²O'æMÖ·§jz®«¤'—t´,b¸UIÚi8òØ-$§"kJÿ’~îØ%[1Ÿñlš–£i¦›+ëÖH¥Ö4Ã,Wq\Ó™âÉEFfê©·je¼'“ÉEhGœ®5(oüôon4x’BÐ^¤7'ˆh™ƒkö‰äµåŰJQªŠEÛ×ôŸ-MkjÐùÊÍÎŽ°‹½:Ö;¯­ÙGëÑ‘¹Fñ’(9?iÔ¶QÄ#ºǽ<¸3\‹KmY¥ŠÜõ.`{ U‡Â"o‡•>ϾܶʅÖá°Õì™.§ouéÅp¦ÏPˆz“ËFVŒì\0'ˆ 5.Ù!­¬’ N|·vÂçU¹†HÖ)^ÚHí幸SAþ€J<§f*(¾<"&Ù^ÊZååì:v‡g¤Â–ÖÊúÌžsŒ2–°B€È ~ÈPO§Bkñ·Î½2 YIA*iºiŠ[4VPàÚ2<óCP*ìàñ ǧ¼O\‘²QÊ‘jÐ\ZÚKõ{X\¤ñLì-ߘ Hêßh©¯ÄÃãÇŽGu+%‘Y¬`†+7P=[™FÕ`L¨À…?˜òË-®‘*.¤Óâ–É`T™äX I–i¥ ü¡þÀ¨Þ‡âðÈ´¥Òëéëqe,!’[¬±Æqæ«,ÒPF§qïözbbÊ)]åίæû‰uM\G§Kr‘Ço`ª…b·@#Œ3€@zÅÄï„AôîÒÍtD7"ü4²5«]ž\Ž£Š?&®Ðü?»ßæ‹è”G¬-†™{«jêÏ;4·“%»Îþš|1"Èj²šñn(½@ÉÐ2A䈱ÔfÔm —ëm=‹rŽÞF…"hKIU€ û]þÎHèÈ-t’¶‹,¶‚âaèÜ3<€$•RyàÇáȃeiVkre±³K9}tEêAzGá“>hæ¬4:öfÕ®¤²žú=+}œ²«8 ü#`­Aáör@)$Õ­Ù“RºI–44šnR‰@V€ÓcMÿf¹!EÙ&¿½yîR4±)ag0˜Cz\IæÌ¥ïS½pUrf-¾oák¦°f·hš;i㉑iN&@ŠZœÎÕ”ÛMóèÝ0I«ÜGn „Æèÿ@Û¦ì¬cµ)ûXÐ%l¡˜|í‹xµ 6;}åÒe¶ôZÕ‰¤-B}?_¿FâÄÓF‘FÊs3èÐ[~‚Ò.- †ÑÝç•YaåFQň ¨ø@““Ðd!̳œ¬ònëMÓ¢µKѬLf ëÎoÜ}bI ª±€¤Q—öU~Öù;•ù0¡UÕ.mf)1%µQdŠ$"¯Vw_Žô-Õ°mA®¾»€N÷ì‘ Is",‚O²¿*øGì}œ‡$¡.d´´à­mqãÅ“ë ñ gPyJ¬d7Ã+R›WÓ\ˆ´»W·VeT‚òQûùøšªIP@ý“„Š Tyµ4kk­±ŽÊIÑØˆ²€Z*ÓáPþfu8nBmm²M¾§{—¦Z¢\,Pº¹>Ü ÍH¹RŠíññݯ,„ŽÛ Óÿ×4²Ô"»™Ù#¸ Ç„.I½kJnû9†C“l³Ë6ú,¶×úò4ÜùÛXÙOûÄšê1ðªªlƒí;Ð/ód2]l˜÷.ó6¡±x·š³‹«„…žò>š¼0H¾Œ1qÓFí¿©ð†øpD‰5Õ…kþxM5ã•4褹Š&çkrL.‚%bT„l{òqÇcš8·Ý€Ø[ù‹ÎúÜGÌw²Käø¸ÉqeÇÖ·¯÷pÑF­9Åx|5Ëg!ù¦"Í3SË’ÅɦjFᇫ?Ôâ‰cöaC*3·%*¢ (s9wÝœ Æ?Â×V‹$º5多®¤àÍu¨Çõ†ñãêZ€Ã‘¢¡}ó#‹½ª¶¤AòN†lÂNš…þ£qê)óÓã1FHsj9 ™eÒ/|ˆ™¿&dËLòg—ô˜ô}¢-Ó´SÞË$P\I@Ì-ø¿& öž*Xá9$XÖì«AÒ¤+5ßÔVÇL¶ˆÛ½Ê[›XYä¯]ÎòI¿mûåR=:¤wª]Om£˜ÝÌÂNMè[r}FûPÔ52>¤M“¦é¬ú…õ…”>p¾!¾ž+‰ €GXd3;zHž¸žL¿Úørž/—“i /Ìœö¥®‹¯.$wˆö@2úå‰Fæƒ÷¨6d‰¾ ”ñÑd‰ÏïFFã4€ôn¿káÄB1²PÏç-꯵;»ë؃‹A‡ýêõ§¨[n*•Ø·û°Dô`{ØÝÍŸ™¼áu4—PCg{*ÍvhZÖ(¾ÊF¨~&n•?ir^˜…ÞÓMCÉpÝÛɧ궆M,:Ç,Ñ ŽyŠ|`zɹ×â2R´Ùr"{Ø@ –ÓN²Ò,#‹IÒU-x„-õnBªÑUÞEVè)Sï²z§eM/OÑy[ÞGhö÷’ ¡¢[Q$”Ò£ûð>ÜöWìo¾Bd™ÕiË¥éöw7“É©¥ç ú¬ŠòH÷#‹$chÐüjÝ[ìï\¨Ý¶GÍŽù‚êöÆè&–ètö—”¶Ë$’A8èX P˜À„$ñlȇ›L‚:Å¡ k¨êq1C¢Û\’M#¯%I‹,hXž"Ÿg"oGDÚûI¿±¿¸3I\L¼Ö2‡„=Á&8"yˆ%*Æ8ÉNá¶ÀäRAæ¶í­ôh¡K»¸Úé¤I=a rªŠˆöèxõùåÑ´L“³”y‡Ìº«ýsUì¨×R^^·údÎhÝ" [ÓŒ~ÓS‘UZSÑ6„æ%ÛÃb[V–ô¬È­=¥Ü±¤¬§u<£U1¨÷g>Ù2V‚c£ùoÍ/Eåb$Ó!¸ô.týLHÃ×xýNK*”*xz,Û»z‰•JqÜ[h®Jú?ÓpÅc ²¨¹¼S!ŠÚQ±eZ¸ðjlN[—&£éäÇí¥Ð¯ MOËvê’3·<|5 K%€óË%³I÷¢¯oSS©µ›¾¤©r3:,o*üšG©'âñøzdH­ÔsK/átKÛ…ŸQ"Ó£‘ÃÈVIªª‘ÈѤZ.Þßsen˜hæ/ZÜÂ,†£¬Ý/¢—áVÞ962r(墕³}ò¹G‰14ºÊæãOŽD±¸y¤ZK–X„Œ ½5U$Ÿ‡›U¾xišnõ¦ý¤ ‹‡`ôS ] ÈËt2c;mŠj6F,V‰¬ÆÖññṳ́}\"Äy¨-Í;.$õQÜŒŠÓLy$hÕ¥b*–·5ü<èwcö,z"û×Àt™“ý&tKé˜zp1A(-!Qñ:ïü¾ø ²Ù'Ö/d¸»{Ô³Xn:5ôdqñ!P+Tuë%1ŒH”P^e“LŠêm";»D^`G:<üTа·EýŠÔüUý¬ Ê“JklA$rsR'ì©"¿!–ÛPŠÖÍüÄe°—íÇ)nÆÂÔ%CŽœWp$ r2 ÛS­zî÷M–]Mw´™cDEúßf4†8Ö»MÇÚep·IPGXý§IwwŽâ”œÂTÊÁš†&,7biM«“ᶯӓßCÐ<½¨½ÔR½Åû$FKXÇ‘܅Ijò*9 `"®Ë1‚Èå‡R¾Š[Oòî r"ëNy¥‘˜–inD‚[ái$äÝÈÄX ØÐMm \‰çæ¼Öå !Ô-aúÉ–NT2ܪ ‰ÙNYlß’¬: Ű} C°ºÔïå+%ÍõüËQI «rçð–#²ŸÝûå\[Yl1éÉ“Cå;R…˜Í*Çð<jòq²¢±`üZ»öý‘\ˆ‘î¥=Á.‘¢Ço,%Z{ØÅgq7¦Ì[eBÄ*¹NŠ‹×âfÄ’Âí_˺~‹g=õÝ͵›§£è$Í"3R´`/Þ‹° ÔÈd“`—Éq6vö¶¶&fÝÌFò2Æà…xvn_d[íä¶"ØÑKîôÆ·†k!ªRíåspÔ ‡©Nã’ ¢ŸÚËÿЙhvpjqÍ%´*'W–ÒySêÖìmöã/÷’;8-9qùæº{ ͽR}'Ë2ÝÝyvÝJËÀj´…K©¹KRÜ­H4ÚÉFmfga7žqòÖ£·7þcIõ2ÆK«‹Õx/“…E T#ŠþÉ’¾\"GM˜’[móÌ:­ÕÜ>¥Ä¨0Z^K÷ +#ÍQEy+Ïü‘Û˜ôt«í H¢AHdZ‰­•àŠTˆŸÝ@S÷†®:¨ç'‡ÅË1%.&èŠj5žKs5½¼-qo'/ßOÆY„¼ƒ#"¨¯W*ËÕím†Øî¥l<»n·÷ñ:ÚH‚$l¬Ë„FMKšOífdM¸Ò𵄡áŽNWÑ=Ø•­´»vK¦ŽAF‰„²«E¼€ŽÙðõå³*ºd$¹ŽÎÜ]G°W%…!¹©o¬MŸ¨¯ÚÛØrLN©¥k6¤bHõ 9 ³¹vâu‡¦”hØ>ׇ€À#Eé ¶©j¶º‰’ánŠc‘I©¤d…ãüÎÇáíá’òcqnúóÉw‰oaæÎ2iVð ÍbãP3 ÊÈ)XH)RÌ­x¯‡(à”~— Jú&Ú&Ÿ¥%¦ƒiú;N¾ÉlÐÀŠÁ“êê¨ØnÊíWlócÇܹGé)/oÒf‘í%ކoô·hjž¨ˆ‚`qø›Ÿ/‡!H»Ýƒ^êú~­w4¶Úd77?¥}s ª"ÃÚ*³ Ϋ^ ñq伲؂5»[cyumléé\Û¨ÔB–È‘ TR²Ú‡sÇ—ÅðñßDºÝ •àÿLÒ,wQÛÉÄŽâOUÈêxÆÚ?äÖ™-˜Hκ†95ke—žñ_„D&ê™cÏù‹¶ùCftÈôp÷ú+Þ5‰‹Mý4ŠgHfži.C‰ýâ¼ «ü›åSسo%KÈo£Î›Ôoæˆý{›G Œ³ÐÓÐ-AûÕãþUq[6W³ÐåµxTÖc›Š†‚’r¨ P†n+þQcñü[`3TˆÇ6ï¢Ò4‰-¿I‹{ãrĬ3¨f•Ò´‚2ÜŸG/˶J#ŒfTRÇ{M>%’ãKŠ @ÔŽÔ<‡ã)J$nÛ#Æ2Úî(»R¸¹Ô.´édŽÞ5h­Øiñ$ÑÇ,ÎŽ¥\.òr%Fý>Q±—ZéZ×—fe¿Óìnµ-Z%õµ ’L‘¡ ª3qôØT ×ßo’FÃtÖ Í=mÃ^Gq›¸çz_ÀoZÕjw­(¸A;ºÛóÛJŠæ42i—œ¡Wž0ÖÒ–^1ÇnªZ§aOe|Ÿü ¨ÚÁd×ÑëšÑ»žöЉ-muúÙ–APÌñ!à±Ç·jK|OöFW NÁ²&·TO7꺵ÉÓt„Š{t¶Þ—ôàŠ(Fîe¹4vñôè?ÉäqànËšQq¥>¯*èº}Ä#Ë÷EÞ¹CnñÇ%9¬Ê~"àç^ |M“ºç͉}]1 Z~¦÷šT•. g‘Œl Á©fø`UÆìȱ² #mo¦â ÈÔtç" $5x¿C¿ìâw A¢­£§jò>‹¦Ü»KY’âîyY ˆ J*”=:n?›[±ë$¾¹Y'¾†ÞÙ%v‹Œeçj“…V45â̇üœ„21úüÍ«ÇejÉ-´)% ‡Ó_P¿%$,‡ˆ‘;äkkIæ¥puø¥€j6 RMÉm¥…~µÉø‘öZ¡˜ßá$å  bw;&ŸâK‘Ö³ÄËm3|mEIb*x Ø-OÙøˆÇ€s,l†ìn;¿«YéñÜÁp€Ë{r)­cˆ‡å HÇÕ%E[íU}ò2;nÊ7hXµ½BGŠâÎÚîÜK#<3N‚T+!%•¨§Äô5%GÙå‘mÙÌò¤ÂöK»Û±.»u-ŽŸgkõEµ¨õYyc¨dE-Ðè¬vÃ]$ºþá³Æ[yáz½6¨’ Ú¢£†¸Få&¸›Gm<~˜¹œN_Õú¢H[…âV/îÄ}®–ï{rkB3Ý”Ác$ÚTj!¾#†õ¦Y*xúw´<~Ð?DÀ`• ¯™o1µ¸´d–KbˆÖËp€<…jQA ôå‰'ȳ%‰jÞ`Ôäi¯5uau©HÓ}^ UÑeO;)¨`µà‘SŠŸæéhw$Õ+‹IÒõÇ}BÍÍÝÅ›ò¶”Ñl]O‡Ô¯Øv,U²VRvæ™CV¶G ”.djZÚ+µÑâ”Í XëÖSÞ¹Rz:+«›ˆg‚W‚MBùZ-JExíôÔB¿fBT¿%¦ëSñR†§ YêºÂU6¦;/InCÇQC­VŸ A:(oÙ=kî‚;” ™˜yõ ‰˜µ~P(jË#U^Õë’;£¹4Ïç‡S¹¶;Ë4¿YF1p&‰¢*£¿ ¬ÙH#.Ž…u»^êª4ût‘l`·U Ê‚’6À’+ĶÊ|2|2èLjsA¶³"°²ŒÃf#–Hµ$SÓÊŒˆYäaÉx³Sì}œªˆ;¶Ù6Ñ…¦Ÿc&¯6«sÝýhgŽ3,MÕ˜,ÒFߦtü»åYD¤v ¡0G{-ÍüŦé0Ú‰-cÔgP‚æ«G™¤¯ÅQþ¶[\(»ÝÿјÛ0,žî8H®£W<[â °ˆÅ©—/ÚëšØÊ&NYáØ±¿¨ÍªO7é±oõR ´VäÁ… a˜Ð<€_È2ó&4¿UòFƒq§YÂÚe´×·¢;yµHžeHœ»ÇlP¨]™U¾& ›zebf鶺²+o.ØèM¥ˆŠÎÞvájâ¬e!i#LÄíJúÓ Ö\öW¾H.Öi(n%Šq„1üê9¥@”rÊøG»õ³óJâ·”˜!ŽæIÚqj‹"ÝF±Ô‘èõ,„qN\ð‘Ô²jjÛÉQOõ´ ’ÚzlOÖZoZWú…¦‚ªY@Ø äÈ¥¡¦HÏd"›zŒª°[1Úµ ÓÎàç“… Ê…‚Ò‘Šwß#}ŠYs éÖÎöÚv¢šš¬¦;Ûø uDºEæÐKÎ¡Š‡å#§.§¶\ n×Í «ù«OÑ,­¬,ëú?ÓrðÛA$"rZ†2Àfb(+G’›q\œc{–£g’ æ´:|z¾ ¼f2%¼“|1Gäêð±šÐüG²«“ttQ¶»Öî®"Ö5[#…$_YݤܺG_M¾¨ƒ‚%("CFß–BC¹œMlŠÕ´ËJÄMh%¼»¾Dšâ#sõIBÂÄ@1#Sɨ¼EŽ@]XTCæY®µèàÕ4k=>Xí"†I&¹´h “ÉPβ·XÒª©Ó'-¨% _&uc£y‹ZŠÅïÚ-+Ë6ÇÓ(VÎé=:¹—œC‚fª-ŸÚm땳*6„½Õôw…m´ß¬µ´ß\Þ·­4ê»4ànàv¯õÞ¬L¶JüV‘\Í8xtÏP ¬FcZ… Ì~‡ß-¦4Ìô=[I²’Î[V&¤Í§G+ÛˆÕÊ—õQ&£ìÆÃâîW1$ %º<“kôXãŠkÝ%­g»W¬ìÏï"”Q£p´ˆÁXrU¬G—rB];‘Lf]N$Š;8Ù4ߪVIf.Ò1R¥<ˆ‘ž´ªÑùráͤËu8u;ZB«¥É©I$MD³D{ºF úª%?îºnà¨ãçiâè’]Gªë!oô—°¹¸kiYn¦’%úŒJ"æ*ÒHß¼Ž¿g'c®Èàè’.¡ç¹C/¯`TjZ­äê±\ÝE%hâŒ=ú×,$ØpÖÈ•“Ϻû¤[Kqeðñ{xVIŽð\\3 $Gúà<5ºÄ2 Gó—–R{›˜D—×ÈŽt­*W¿–%§%’5uýò­k0-Ïö¾ 2®8Ë“gT[Ì__õå0οQ °ÅZ’»¡TâQ9ŠWø™ø@­wå¸×u) ·Ðí ¶ºFú”’#ŠÜÔ Ûõ$þ^kñ´ÂLcÍŒchƒc}­*Bÿ\¸¼T!š46ê#MH1¸Ãw僖쯢*;YmŠÚKp©bUf”e£†r«¸UO-·ÚÁÍNȇÔä±XM„pj÷LÀ‰Õ]‹|B¨+ÄWâaÄ/ìãKƵ²Ô|Éu>™i¤É¶H-=µá†iH ä• É¤ôþ&oÙÈNäìØ~…²Ï:É-ÁH=%` §ÂÎÊÝÙyqåÿ ’²ÀÅ^Â{†¶/op«¥Ü0k‰>¬¥e!dã¸íÓìý¬$oi±TÚ\Oõ¡w"4SJ¯ ź©6ÒAŠ$¢ÆÈ§¡©Vø¾,„†Êè[¶Ô¿{ѵ}*H4É#WŽ&_ݬ‚0*G)@<—£o’Œ"Š•Ñ[“),ŽT,sJyÍ(eÜ2¿"܉ìkÄ-qª câÔôûÝ.É$½…b†`=•J™&§! Æ(»³?ª:â$ Ù; &¶Ôî."‡I¯ל’µÄéÂÔÈô–z-z|"‡5²vL!Õ¡¶€­Ö­=Ž¥wC*I`ò„·e*ª‚>~šò­TòÎDÀÎ2 -ý ݘK£ÒÊ ÄF„iÀ"€ò&Ç}É®­˜y &‚íU'fXìEPKJ$nf´äNÀŽ”ùdØlR‹ùo.¯YÝ\X[ü*éHÙ¶R]¹7ù*ƒç×'°@Ý3ôlÖ_ñ-ý¾odåæk’°7ªT d±vP=Âÿ7Å”’z n£©y™µkÙ®à’]òXí£wb†0«Å(~7øE>ÃЦ7{µ5ÝíÊ©­œ‘ï"¤:‚X˜ØšÔ|)ðñ¯Å„ SK­­RòÔ­ÕË_ÝA =¥³Ä¼LÅœ0b§Ü{ƒ‰%š…Ä—þ¹Ó¯chÚUh,")è,Nû³²Ç^+t^¤å‚€cVR;‹‹x.í´o/ëÒ rdº’Ö(§¼žAµY\PÃÙ–»­‡z²Iö•ª\ÈÂÊîHc·‡¶•˜<•‚UÉSe¯!ñ/LO’Òcõk]Qb·²™õÚYK{p‘šWMÉ=¶ÿ(cËt kom#›Ëwº?¥¹b¹îK·ÅDP?dãí‘6ÊÅl‚‡Z¿Ó店I“ëì^4¸°ÚKhÁ´¤nåØþèü • á”AØ¢'m’øôDšV¸¸h_Kwå;\RîP [ÑäPZ¢ ü>È™ïæÌc¤Øiöþ½ÌÖÇü8À½¬÷íê$H›"šýºtÛ|¬‚}ìÎÛ¨\ÝÚJ"¼±C=£·+dä—-! ¬)E å~z§ÄÛä€cÉoã¯K5«ÉGHUHªh­(Ì>%ã»6D‚y2ºD‘¬¥¥„ëagú2Uw´³Bi¸l²J»€æž¹ ¬‹MuM5Kˉâ+i|ãU™šÇ÷¬!ôÀ¥H<u­wº¯Lž8†©Ò=]SJ·ô®žÞÚÀ4wow,Œ}JœÁÞ„×áùä£RRkŸDÕ›\ ­¬×_X_ZÒöÍ-±oOÔ ~.5Ç&Üýœ‘;± ži5ŽŸªCy¨ù¿\úÇ”Ç'Ó&Kr×ìì^1•ݹגdà ¬†Ö“ép[Ú­ÍÕÛz×Spõu cgJ3QJ€}¡A_æ¦]#a¤ Ðé4¥£Ôt¹ÞW2Jd•Y-&†X—R^µ^*ço‹,è-¬ ÔÓOÓæÞjðêÞ­º]Iiã’ßu#¹êÑY^ÝC¨j6Q“á†y$Б•€+l ƒ« (&‹“×6§ÛhRV+±(šQ$Vi4Ÿ'¦x\JÈ4Ÿ²ìŸÙßnœii@ÜÝG2Ç6£irS•ÃP)y€-Z¨e϶ԘËpIÓ]V ë6šæWµ³YT$˜ÝàJF€?%G| ÷>ˬzO›-ˆ´Šãü+<î÷\®ƒ–÷eu ¢‘[G,,_aW- š"‘ðnŸÕ² ›e_&7c$ñ»MrOɦáX—؃ÛÇ°Ë ³­¿Cé0N-¤7\Þ<ΰ«n(ž›),?f¿µðöÊ«‹fÎ.'餗R[\ºžSêÍ ð¢'/Ý ]GXî‘éË%°]Êh"†ä%¬~“F"a"JÀ?°«É‰+_‰·?Gp“Fò ;{M7ʶ^£ê*«™ÞîXž†f•Ex³9$5>Ïû9÷2äʘý÷˜"¾ŠßG³0¼pJͨË"Ä@™6š[ÊE ­9pøþ>TÂ#Õvä¼Ç<VqBÜÍ)w:¬BBÔT`ƨGeúk–õ¶£n[û9nd}fIîî½"Ž9CjŠGÆQ¤ž½~fȹ2ŽýU‹5¤ÁtZÍ$ÿ»­ÒKo$ªˆÒm+lÜ ü[3~ÎFöÜ2¹RÇT•ašòúÝôÄY4Øø› £‘O¨]ÉVÜ}¡Ë~ÜvªEòEw MÓÜZ\pUµÓÝ–Ý`±·–8ϧûÂD|IrvMû/,k{I—@“;ÞÊþ´ãNB]È–¹¨véòËÁ¦ªÝE/®–J#[U)ú@Æ8¢Wâò¨ ±û_höÈÈ(S6:>¡v.}%×!Q-½íÜ¡[aFR9¹û=kí€í×faÜùvÒvÑàio§vý!poÝåÃò%BP|!¾/…»eq$ÙJº!õ+lt›fBñÊ~3ÎP°¤cá"Œ 9'pÃá!#lLE%A¬r¬R´s š9ZÖ^gáR G.ÛWö¶ËXZ¼ÚxÓbõáœHÜ 3È…Yå¡û$ÈÕgða¾ µ@Ù™tÛô¹Xÿ’³Ief¡ç@©•ã©^‰ }Ø“l©ÒÝj—³Ëa(ia+ÎâyÙDKsÓ`©å_µ“Q êXÝ",òˆy,‘•ø QûJFãaökJuÃ{ OÌ—VÍ vöÆÚì2Iyžâ0wö‡×Å‚‚(‘¶ºFˆ,­ï§²¹·¸¸WYf-nÞAU$(=I_µ¾@ݳ´<>`»ÓiSÛ[:_D$² œ›˜#™Ü•8 H”‚+Y½¹Ô£º”jm#ºO«DÜÄ…EcŒž M:·Ùmé„ I•›+×T’St±EõXVQc^,UÓcRÊ~×\‰1l¬å§Ëm>«¡ß‰ã›^R‰§‘.xò”Ç,¼*y_‰xÿ•¶@ȶÖ̇ËZlPI,2`´u†îô@ëM/.)Ilj˜ »+UW¦Fr#p7ZK\½–]N-;Kôt¨4gy&k³"½Áb@yRÌCEc¨þ\€=TæÍ@Ü]Á§i·Öߥ¯ã/ŸYeŠrYÂÏ!Uf4èB.Çö²üc©c-ÆÉN‹qæ 10y F2úÑ8‚Ag ×<Áq¬•~Q%¢¨†ÚÖÚ&‹Óx¨µž…¤õ+üÙn1AÜ¥ÖÚ„‘žúþyÃ:²Ú€Ì@­6rýŸ ‘¶G˜?KÆ’Ú2›{pm­.œz‘»–à«öiM²¾vÎÍWGÿÓèÚäÚfÏoª >ý¤¶ÓW™–täVdhµ!·ãÒœ³R.Fú9ü‡™`ö¾VóUÆ š¦Ÿª.Ÿõ•Hlô똌¶dS™G!AŽF¡i8Ñyü¹d¼P98ÅnwL¯u›D¿]:C÷qzŠn¥ŒU˜FN'ˆ@Aø‡'jÓ.¨YÙ Š47EÛ¨K7ið:-ÅÜB±¸q¸ªŠÁ—?ˇo‚S#ÚÇoj'[ ÙÚ„—r> ) û$þ8Ð,A£K§}GYÓgYï–; ­ãÀ dàAôa"‹Q²ÔËZ6cÐrl˜¤ÃT³òäßSX'šõâi™h§úÉ^æk§õ0V©SŤÿd]Á|ù Lü¼º¼ÒÇY–ê'¸µhà’KµtPVK¥¡çQOÚVåÇ–S#ÞÈ(ÚZX,“_jB)çôæ–kŸYmÑãT¸HË +SSFßìå‡~LAïcG\Ó5t™dŒj6œÁÌQ[m"FQ#’Õz!+Ë—Ï,e‰µ[ éç™’q<’Eq-š“øqŠ9‘~0"AÅqZu®NÌKjëmë«%íÅݺ9Hë7$@Ëš$(­#-M!WáÜ2'wþNÓœ.¯¥Åkgkn¶öÐ^«ÕáX"*Ñ£Kö mÊzə۲וìX l<Õu¥6 nàKM² {è¢2}fhPGÎ8Ô–‹Ñ‚̵ø¾,„£gͰ•m ºÐìãÔ?LÍ\E&¨ñÀ¾´‘ܰ% œIvmøücfo³ËH™äÌúi4ÚΡë·³¬:­²‚ÑLŽò9˜ñ_‹âA]Ã:ò'za° <%36º}Õõž±"KDk››ÙíÞN$ñ Õ(Š´ È+õ-âëÑk¢?Lºµ]A¤¹´¶¹Òâp¶÷ò‘,RÃ?eVý­ýEÛ ÈkbÈlPš®¡j—RE¦Ï·Ïm5¬Bñ#îà"$4lßQð}88yq2¾æ?¬éž©WÔ'·]>É–?E®RÚÄÝLHãµIg$Ÿ þï,² »ØJùÒaa{o¥Îmô;U‚8×Ñ2Üq‰°âcŒÇñ7ªü#‡ÄpÈï`Mn‘êZ¯tÝ^êšœ*ïKl­PxÇ‚Hö^_äáÈZG$.˜Þy´¸kxu 5e.óß[°at@f–€¨øW“'Ûû9)Qõn÷ÊSyÂæIµmfK-&Ê(Ñ´û"òù¹=HèEʥؓTZõȉpr ù¤Ñh6pݬV×r݇"›Š^Æ!PB$Qñ\R¼Ç-²Á+°ªdÖv3E[[‹[«kKxÖ{‰Ö¯#F¯W©aÓì×"7MR.{clÂ=(Ï“9_Fâ䩸vu'â 0Vëðö뀛h"tŸ*yKPóë7W dèÿV†åÔÒÅÙÐÊ­ÄcÄ/NÊóÔ@>j+)¨øé\œIºa —oBÔcÚKõk@}(åExšâE?h4†¡´,ÄÙa‰b6hÛO1y!b¸³†â8îʈ¬b&æVaZÇëÈ~XÕ Cñ³…k1’A-ØêZŒ²ZØ_ÚOõX¦­Â b K0çé#ÓÒâ) eo‡‘þ\‘®h2 [Ï1ÍõkÈ´ÕÐt»^PO%ý×’‘œM¦…Aãêä–~<2ž û²’¹nh%ã5½£±–ÜLÎñÈ5U©Øî2ÀÀÒÓ&­p±ÛG4qÃ^´[ÇÅLÎÀF²I føwoñWi³Ç}¯émEE¬kÃÖ.´œnBD¤Žx‡e–QÈ« ^K+Iîuši/´P¸Š)–Ÿf†¼#§ÚzråÓ"FéŠqco­ þ£¨É-Íä1¤†@´G¸ŽÚÜóI§« =Ùé\n)!M†Y\Ìêþ’³Á8ŽF¢ý8R€ÿ6H’Ö’Ý蒥ē^?ÅqTôEJ,iñ6ۖɘ³8|³k¡ùb Fõ½;©Ð½žšÈ‰)Œn¬ÈH*Ï^AOÙøz“˜âw*îl¡l>ëB¼·¶—Ñ,—ï3¶ŽrTñôÇ*²…ȯ?l¿ŠØp÷1ÿ1h7žXÑ_Ìzœfê9·‘cˆU¸ÆŒÎÀ©sñ|;ðSL”MšM;Ê7^p°6ww:b ØúÔ ˆFû3ÿ èa‘ìLm•Ü_Ï%Ô6wm=ì잌³ÿr¿©j|#íûàäE­S@úô‘Ì·¿U(çë §2±b Eô…+VëÅFÛåDž‚ºî­am¥]\Et6Ó,9–M@s¼KˆhŒK ÒCºððØÔˆ´HÄl½Ñou'Ô¯dµ±¸–1 0:£¼[—Xž*Hkâ=¶l•€ˆíºwntèî´ÿZ KxLi¥i(-㜯;xž4 ü\Îã) w÷¶ñrKüÉçk›ú­ê>¸a•ïUa·‰<€Œ¢ñf*Wán, ûaÅ1e,_=ùŸ^°»¸ó‚i—Ma …%õ\Ò²4eGØb?xxªü\Wá8Œq‰ØÚÝ…±h²ùcÔWº wzä%¬†°Ko hݪY LJ#× ôQLÆ¢ìö×—Oëkw $·2Çh-ø« )¦¼†Ò?OׂñÀ#щ+#²ÑçÓÞk=/¦¥”ÞË<Œn¥U?î¥ VŒÒ4¥övnG!"AæÊ"ù1é¼¼Œ-n gh‚4²--íÄdò£¥I Š›óÛß.ŽK ejÒÖÃJÔú)$ŠFøb–ˆ¦d¡ZÆ„Ô3®ÿg²äì–µ§Üëo4~ºÛò+!+ÜK)jHÕUvÿ~SéÇMÿÔè·gŽ+™4x~²óÅ’OQmÉø[ÑTR=0IâIçö«ÓlbÚÏ&ùH‚)‰ùoÌv`³»¸šîµ¥úºA¤Ë=ä k(e¸–jÈ“Jô4VQ¿Ç×6Lš´ÚÞÑÄ*Z\ß‘ÙÌ-ÀÇ!ØKÀ ½(9(ߨ–A-¹Õo-mY­›ÏA±«ܾ/P2³qýºüwÉPc¿$ šky† O«´f(˜Iwu­ Ö¢¬c!ƒ="W‘ö¦YÇdòMSS h—W±ÙZz¿V†%UF}"D‘PkJ1,yõ_ÚÀb;—d6¡ªi¶öÓKo|"Š5f3^åS0P´’C¹cO„à0îQ.ö®×Sº]oAó º¢ešQ5¤Ñª¨Rž™¥w}‡ëöpˆÐÜ$ÊŠ9K­’AªÏ vW’ˆÓÔš8™“98µOüìWŽê¹L£êôófÛ¤×vú9UK+è¾»;¸ôXýcЈ}„-ñ›µ~ï–YꊴuÂG¤é·”<‰Èƒ¦ˆîA–E§#V q#ì¯Ã„ ?4,Z+z~¥Ä†+˜•1ć› O¤kð“QÇÇÇ6vI4Ze¶§yaå¿1j÷ZO—®n¡i4šwypÄòiîf_I@øbN|@û|› $!ºÇsIÞŸ«iQÝê¶~XÒÌúŠÞ€“Ñ{襌Èì9ÌW—>Ñ/ÙÌyDÝõ-À… ÝI•olWO„¶í6oÚirzŠzS÷_íœbFÈ‘°Õê£úZˆu›¬itWÓõ@¼@#á]·¦ß ò«!î‰ý1f0Io¹(†x‰C̼ˆ ‚æ)þ¶$"ÔšKYÝ¢ˆúQ—eÌñ¸Z6mðÖÌI¥{]&ÊÝÒ=¦†XdõîU`-žƒ™êáÖ†§–ø7M€§{ ÜRK¡Ü¦£,Å–ÚÆ[F/) G«0#̳9^?<7\Ø‹K_M¼Ñ‘ÛTÔí ütyt´RcŒÒ„É+3 U@Vý¬S¶·³Õ¦Ñm'ø$Gªò´Š„†ãðl(p™ÚYÕ‹y;EÑ/îôxD,à[þîYJ¤18OŒ*'‡1ˆ‘ t*ØÃjZ]ü/|ìÇ©¨ènM@BªTÑ*q4Ì6k•§Ö>X¶Õíîu;ùWê,ÇP¹–3Áj£ƒ!f¹|B2 òaÑ/Ôõ+­>Â8gaÓ™øÉ*Ä iO4Œ9‚£ã'u;›.1½šê%õ+Ù#Óm“ë3jhJ‘ò‘#z8Wázôäi‘°¹š¥æ>ƒiQzÉ´­•w’M€gõ$­ Wá*Ÿ´7®F&Ù’¿­&ØÇ)m%Å$‚Ú. dñy@b~">>f½²EÈ Û¨¬›T‚6XhÂà…ŒzÒ’9#šUA¯ÃN;e{@Úr5K[iÁ'†Wµ=»Þ†•>¶í+0õfd·„Êd Ô??  ý…ÊîÚ.‘ZÍ”÷<ž\ºžâ⊗ŽìÓG麉 3rQ1þߨ*ìLjãñr$sMõaZ;Û]ú2ÙBuT*F²G,ˆxÑÍ*Äöáðÿ•\¼JÚˆFÚÚÝÅ­´Z|+É2ý]áI «ÈQz“„ Æ)^z›S‘¡g¶/ê„&ŠÊdßâÿq½È®¤»µO©ëV–÷Nc‹Ó‘ˆyB$j¨ã°wcör¹²Ý'šãJ»†íhá¼uS$0ÂÓUSsÊ@ID|+Z䪘…º>— %g–Iôu_ZõêÐÄüwô¡«rmÈZ·¿ÀJµª¬|&¾m5e†Ü-½”zŒiqeoF8Ô*·3׈ã¾ëk¬uM"Æ!z,"š9–BŒ¨Zá$@ ±ýÐ$Ñ›Žù 'fð٫Vè¦A3=ÉõwŽ4@À‘ÁäTЊ»òÉ×T©a¨¥ÔŒ@ôf’±Ç P#.Xƒ²ÐÐ×â#儆 ›fS“E²Ôí®/a[Jpöúu“»-<[,¦Iô“rKu?Ìr¼»ŽtÊ7ºÏ1ê+yõ­c•Þ¢‘¯c»Z}dÇ(h"Þœu ö¿n¸Ä6NÌÌ^z»Òd‚Þ¼†"Ê~î°²–n´*£¸÷ÉÇ,x·Ýƒè¶úž««>¹æMFÙ´%UP5E{‹(æcû U AûMU­F^O@‚6g°ëVÖþˆÒíßTŽâC4gÔY„#êx‚µÀ^CÃ)1ïæ‹´ÏKµMRycÓ§6öó? ¯nŒI<ùFøžuo·ðà™¯4ƒ|ݨIjZ/Bv]"'ô’0¾ƒ³@óܹê»ñnÙß^l5¶mq¶u¼d Ü"J,nÆ¥O v¾ÉøFZ5ÊÊg«k:Mµ”éðGpäÔ”’8Á£»#q×­wÉF [Y•”ž^ÖÍõ­iÚYu.Pij|wðÇAÈÄçŒRNXp 9:ŽÕ®S3gnÀ7æY.íe½žKx5;ˆã~È­4—°T]Ì€(¿‡–"¶îfA; ¿;Î#[ké~±$[ B=0­ûc“(âW¸ËG6¯R”7’j &±¬—ú”¶ßRKÇœ´p[,•hâE`¡ 4gjþÖB`tlssjÖSjÙÛ^ÜÝëq8å§ÇÌÝh‘©«T|F¦ˆ=ð€@»FÄÕ&ÕԮﴋ7Ó- ¢Þ]8iÊÏ P#Qwc÷|Y\ŒxweAÝ^æÀH“Ê“µ¯Ö‰”Û 2±/½ÃÐ0 ®0ÌÙÝŒúWÄ}NŒîB]µ#åMˆ¼ØŸ³µ)— Ðþ³Ù¬-$±­Ù*"³G!˜° * ãC×öpqáÿÕ&O(\-œÖË«M.§3zªšòxÁ FR§–ÕömÚ¹Ž&\‹ ÚÒî-Á-ŠÚ[/6Ó‹(œYP…?dSínr¡ íšG§æï1Ìú½‰šËGµ—ÐIã‘!žiTPg§î'ÅãLœˆŠcæµ²Õ/¤šgP_—©3€!•d—nƒ-:Sí}®›beaŒ@ ±ÛÛI$£HY$Š:M<ü’;JŨªrO¿ß÷³æƒ¸òêzp>¿$VÊ¥e±eâ-}R]À HE“f¨«qêË“ZPƒH·{›k˜/.µ9Èä¡,äŠÄ0oM(ÅP³1ý¯åȳ£5í*ãFÔ&Slòj‡“/¤¯œ «¸a@éá]‚ýœc0CÉk¤ÁÛÅæ]2æ[Ç!]-AjˆA”–H›ëC’@§ãøéÆF\¹6š %4»¸í4T².(³ØX*’‚QÉ‘¶sAð·-òBWÍ®QN4h//ÊÚÇh°/.uiL“·Æyí£vý¬&©¬/>k³·´Ó5 hï`ãëÏSqõhÖ:•€¼Tðêpã,<ÒMãS .µ›igÑ­Ã=¿ÖÓý:âu_Þ;r+Í$ké¬ëÊÙGAÉÝþ0>Ñ h&“84IÎB·ª^Y½È„³¢5T1Ž9Ÿ‡Û²¹-é5A khdÔ9iöQ_Jµ‰à I–Cð‘*€Wí)íö†L‹6±*(Û·C+^*E0;É1Yk³1Dj¨4-ûY lÈH)K¨ÖÅ`œ\Hâ+ˆ$ã$jOI ö­Oì`ªæÌƒ§ÙGlÓÉìBxÖÍehı#Ôg"?gÒ¯ïiû#|‰&ÙIE²ëo<“iö¾­Ü£Ó‚?M!¤ä†U?5GÄ켸~ÎXHê«daÌVÐI¨³‰Y’+u·2E'gà¢^Ê^´Â¶%/Ž) A¨^rŠÞGŠÒуð·.?yÅÆìÔ¹Õ—¢ü9;îbƒé2\½“ë ±¼´Œ¼QˆÎÃjï°'íaá¶6…e-ÚâóQšK=%@7‹,¨?xÑÇñâKV¥S®FQvQß`Œ‡HHn½7D†üe®Ä“%:øwȲ¶âòî£}{,÷º˜¶‚TT°IÒhذ¤ŠiFs»1?ÊfÈ™PäÈñF¦˜<¸¦ÞÃPšKùYÚ䟊DXNçw-ÁŽË^ü²1ä]6ÐêvÄϪ^þå" û¾ (?˜ü,)Ä·Æ¡ÄÛe'-Ñ“¶ý´Ý+í*(ëêà]O%CG¯÷Q­O&‹§´à;å±$†'dV…×®b»ºXâhóZ^\Ff€•DŽ4K±?·Å(¿ÈÏ•åC\Õt½/[Ë‘Ehó˜Î©©»Æ.'’3XêXR xúO,²0å{µ°`SùÛÊwJ-îµK¶Õ¥oZT½†FÕ‰â8²òw‰‘¨Ùw BßGúÆ£u«_ ­­ã¸ø­®Uä0ÄàÄ]«Éßö[¯FTÈD:w›"¸²Ž(ßH³2ÛK«s:( œˆ0€9Ž=òIPѵ+ H‘`VßL·-èZß¶´b€²J²ñ2ÐTø¢»ø«’"Í”ðšÙJÓóQ²Ô¯tÍ.Ö núŒ0iiÌg°)RH4»EúÄæFéë3°Y8ñZÓ,¡Ê;0÷Fê1›çŸU¬Ív…ÞDg‰m¢–¿m »€w·‚úrLS-&xî}8n! C{“D …¢£¨ÚGdûb@~³Â‡*0lã®”‚Ö<´—Ú¤úÓ¾£¤tŽthÖ"Óo,¥XÔ·',ypª|%²FtD@^›¨J’%…µ¤åe‚ÜFƒ÷„qQÆ6ÞŸ²¡Xø"{Ó(ß$Øj6Zd*Q–6¶?X¡„±MC>QЂA¢-|¹bqÛ“âÇ®g„ZJ5'{¡tŒZ7/ ? &ÜöÏJtø«†1­™JGšOë__sXÕgŠÞŠm^73„q8Aû>9lˆk‘®‰<Z»ÃBU î×›DÛI§#Ñ›îr³*È óCiújÛ³Ë-8\;¸Ûƒ%™9#r„øU‹~Îc]òrNÜßÿÖÖ6úŒ2ýnêu¸Í2"z2BN뻊&”n_g¦a‚\‚Íß–®®¯#°ÓÚûR¼—œæÇ—Äa@6f(ÌœOÚ­9Ÿ³·Å“ãÙZ¤0ùÞu™m¯-tŽ1`ÇëN-×àa †w£õåULjŒ¸C òÚépi’™5§6Š"»–QW‘eˆ‘Ã5[fâ}—*&DìMÌ>cdhåú–Ÿc å“°VjRHd/ÉYˆØü?ìøá¶=úÖ¯ä{/%Íý»2[ÜH¹š„†Ý€–^#âwÃR#dŽ~IΣµ)‰ãÔìaƒP‚[OÖ3}AnIHíË|M%ÀWù—öºS*6“ºS®¯ Ü°¨¶–¥õ9\Ëpá~£“1XûÐy6NÁ±6ÕO™¯äm$C.qå›ý2S”e”ÉÍRóø“í˰ÈÄ¿EòYog¤y^1km/æ2&’çS{7†õ¥ h²( Y’Áx²ý®½A2‘ß“* TÖþgÔ®M†‰§ÝÞkwì#Ú¿¤ÂÛ€wU  Œëñ/Ä+ûY`1~L ’‹ò·åÞ¡õ¦¾ž[}'LBEµ¬óµÃò XÚ_ˆ¹äœ†!|#“56Œ×­/.¬-í-ç}fûP½6–ÚU…Rk;pÔS4ÍNjÁYˆƒ%[¢$ËÌÚ¾—å3e¤ØˆçÔ£¶†Þ+nÆ„´“1Zð CñmØ7vß)ã¶Y"°ÖMͦ©©\°K­ µUú”m$· Êщ‹5P€ªªŒwðÉHr®©‹*öõž½©\@ošãV,òYé„ZÙz ŠÀ 0ÊP'ÄìÜ¾Îø%£~l¿Nòµœr)6vú…@ž?®æ‰U B@u&§í}4ÊòO¹b)«~óý&èC£¢YÞ2–¹,”’@¤´@`Íü£m»ÉDWÅegpy ì/.&Ôîmþ®`šEà¥Q ¨+Èð·+N_˾ZCMì ·Jå ‚}uâ&»r¬¨ÍVq²¿¯Ø­xáÙ"ÊZmî$¸ uÏbËõÉqNòL8žšãÇ& 7µxõ l. ÄÕä‹J‰c‚:ž ¯üJņƒ°­¦Ïm«Ü ]:Ïô¶~!úÃíUõ l¦SðµNÙE kYÐ\Er0LLŠŠz‡@APÒ•ï¶kȧ7BÆ=2­¬->§*‰Cp%׉<än;’IB+_l¨]¶lBI×n4¸¤ƒNaõ@xÙ‘ª‘îdô¹ÕjÀ|dT^ød/b©qiK3Oqq™8¨fæÜÈûbGB+A^ ?j¬ç& ;„ šö™s‹0,´»U1K{p=[{™dÜ¢²è:rþo²Í’ )aõÛ[;Pµ°±µ %6ï#OvÄ“é*Œ'ñr<“Pw6˜èºî©¨Ojgêú|f8 @=Ä×MÍc!o³ÌÐ}®¼r$9²€îä§$|™ï§µ••åt’æêdõe¸P¡‚•øÉCû*œ)ÊiõÕœDñM-£ˆÍ ”4‹¤‚Ìcé¹øjÙ7Ùx»Ò ^kÝB[[g’ûR?Þ$(ËĽj³JVŠ€mVo–À]-ö·¨~`ßÞO¡A`Úë|škèˆYiÖ‚“´ŽŠJ‡²±%»ñÀ#¹æÈoæØ *Xéa[?I`¶ÓÖïQl»¹bGuØ|;ãbÊ4[\i¶kŸ©K Ýùøe”3`$l90¢ïB¤vFØ8IS4=Òè‘§q^‚c{–W™ƒÉȸ$›ÝÐ"Í4i/¹Óù\"jS†hdWˆÂ¢3ÀÏ%Ç!4'~ `69@„å¤ÓŒ¯§Ùô¿Vi.Ž¿tþœ¬±€s% ]‡Â QT}œª¤nÅm¬>™<£MDŒ;4·¦OLÊÏ+ròNa×oÝ · ÙUKF=·S=Ö[}SZ2‹±ÂâcÅLjD¾§ ¶ۃ¸þu«d¨Å‰á+oìµ]*Óëq=¬ºE‘"î+¹¾­4¨¼‡*·Ã¨F9–?ëã ܹ,ãc›XÝ̇]¹‚PÈDÁiUzU‚Ÿ¶ròZãN$òÞ‘5¤0Ú[H·(¿Y¼P²Ï)€± ’º¯Ë´O…¸}®¹X&Ù¥ðÙÝjØ­º[Mg·>5>™äñ¯ Ãg«o‹¬yu««35¾«vºm²¹Ž´y^HÌyÅJ@Tcð ?Vÿ''îQí0Ô<¯¡y®ÐÁ¬Ú‡¼XÞÜ^$†#zó(…™yÆ«)4­²‘d“JYÓbòì7¾\Ð8ý#Rj$Úœ+þì–Uxȯî߉æ¸I¹3”¶Ù4–Kè`7Jæ%Ze{ …$nô>Ù`Ý££{‹k«ö¹¸zjq‚’­<˜!Ôn½@Ð+;rI P¿ãñ8Ó®"7¹DÍ Òǯ,Q—•„WÄMvïkeUª¬(ìx(mêüÍ{âH½˜]vI<Í`ÚSGªh“tÍ],-¥XÒæ& ñE;©àœ’É£}•\¢0Þ‹eqJ¬­g`¯zæúíä1Çwj¦;q·$< Û*Hþn'/2ià(å·žRGÖ¢Vb»£C@+= w?ûÈd‘e‹M¾¥ÛĶ’[ɲ­´17©o°È€üòþÏÅìW¾ÊúuÅ–•c0ÔZ6’FWº™™[€a-ƒ@ÊÔÈr³»8Šä™ßOo:=½Ôò¶£`KÙÛZ£˜mä•^-öÕ¤¬>Î@‚=Á—ù¿ÿ×<šQšú}EtË Ñ4bG~DÕCÀîd0ù7mÕaiî!6¨a´˜ð›Pµq1 ø€B<ƒrÄÐd7Gåøa‚(mR[Fý>lÎÃ`[‘>Ù#ŽC„õdd)*ó&›g­Ê5¹ôÈn$€úVc˜N1GB*ìììÔ1, pì‹¶­­õ ¹Ñïn~±op)5„J/ð¢0rAÕ¿†R(m:[;+·ÔÒ;™¤„YÄ·=¼«Î8˜7»à%4šXjör‰'ŽÊ f-$±_¶kgfŽuSȱ•—ýŽÙ6¶@ßE ÉnÄwsÆúy¦À’Æœv,û1$ñ¨ã\• ` ¤¶NÈ.¦˜ËqÞ&_NIe¢ï!¡øvèEqØ/4<¬–2p½…nhÔzÐLDq#µ ú„|7ªñ6<ù lwR‹_Ôloþ³¤é0Þµ¥}õT¨>ÓêÈð?ìr2€#rÊ2¤Æ1}wIÔî589½Ó§ÕcyfV(n“RÊ~2Æ¿³†0¢S%Ž]éWú®©måý#ëÝÜbäYTÚÚ©ÐÄ…ƒ–qHöØF8SãfÉG—“!ÕmŠXÚͨéZæ•%íâð–ëR¸_«OVL@‚)$2–~\ëCð÷ðÂE‹h!tÉÖÿS†}ögs·Ðhï+ZHÑ0T – UVåË®Ãm»eÛ(Ô<©§[IJީ·¸ÔfO­<ž¥Ü÷ }%õc4rñš«²ü>Û~Ñ„dIR.õ¿=è«.•a—%‰ô’I§A4ÐÃ÷lVõb2ð“Ò»òÆ1’ÙѺ?˜µiä’Ó]µ[»øŒ×wF–ÐCmn¢#Ly2±iñTãÓ#(c¢ÄšDÚêQ¥¼vRÉíÂüoe,”¸PŒL€îH¨äÀ¨É˜Þá¬Î¶kÌ7×/5Åæ•£Ãvïq^]RâáÖ…äâKú€‚‡³3+dqù–sØ 4è4»‹i¥°šém“‰ŸL›÷ª×@qšH¦jSLJ…róm W¶¹‘~§dñLÁ}GŠu:§ìW—‡o|(N)5kÓ®¬t£mÆ`ôÙØ*ŠOBŸ‰ƒüU¥2£WÞÜ7F·‘4-7JŽæ÷HK››= Û ÕjŽ\Ø·ˆ`WeáãƒÄ$ÐP‚JÔ&¹ŽÓËšl k$’µËŽ&¨fH’G¢GB[£?N]2`íº›žEi漎ïY½QÊÈ¢€€‘,Mö¡kðñR¼²Ò|З6³Û¬BYìï£&¼…§¦¨²ñŠט?Ù wb@(I›¢ÜËõØ­¤x&a-¿¨ÍТ Û…A¯ÅáÇ–i”uÝ;4¶h5¨î'»c,útP½°…TA¨D=²?í|8c+,HÛe]3WÔ4ØgM Õä¤H&o‚(QP©e`¬jB²ŽMöúS£iíáÖ.f’æ/% ²LW’ɱ ³^ãía°6A ¾‹ã¬:$RêD}mf[‰V' HÜêµPz¦¢Ÿäx¨YG3²9¢ƒM‰ì\ýVÙÒ·²Bfxx)É–€µ$®ÿµ‘æTØJ.5-),`Çq8h£ædDL§•…Ãø«ã¿L”¡²c-з^e½°»‘t™_Ó)áæOJŸµM‹–?ÜG¾×$l¡±®hô«ZAÂA$ŒIæF`ü\ôjð·ìò4n™ml|—iº-ËÊÒ†˜â$ÜÕ8-O¾¦õ½û¶D”ð§rÛ"CÝú˜¢¹ –CÙE[xl>ü†Å6”k s4˦ ^Ú;kXAŽæQ^`“û²#¨NTË#·Nlv)rÜ_Ûim&©m/) X¢2+GZ–n ßg~ü°ÞþLh'ÚE‹u»ž(¥¶‹¤âQ,i ‰¿‹+Yw¦ØzE>;hªÈ²Æx"¥œ’+Oò¾Y8‚CQ–ö‹Xä¼¹ÖÖ)'ÔlÃUÕ-ýdaöÕ( ¿Úã&ù)s®Œ‡%§ëÕ¹‡M¶k¤,±êwƒ÷&x´„!-ÁI¯lÍ— dLÑ<£§M£%ÝýïÕ%-q¨H–ô?ÎË()CAEû Ö¹r‘²Ý°o´¦wú­× E`nšH…°’FV_J ܸƵ>£²ÒN4^¹x­šMuc–:ߟâ”Û$Â=&Û‹¬S,×aZŒUÄT4v ðEEP rÒbÄAŸéë?®u;©õ;¤™‡îÑæU?•ŠÔµg1åËfqQQi†öñÒÂE´ØÊòF’ºÀƒâ–XØoN2>Í/‡Ã•íÞØw÷)k -¤iu¼0Ì ?TôR uu£<ž©z#ƒã âÀ´½–ö–íÔeúÙRBVhÙÐu Hµ µÝvå–HÙ¤HZ\u¬¢YÂ'i*£@¸”zv^ýqŒ(nÊs³A»MGRŠê84ái ¹¼‘SÖ»•?e≲úŽüÝÝa~ÖB@IäÎ3Ø ÝÿÐ0¾„@çÓ3É9bPD@k²£?õiLÛÂ"ò^ÓNXíãH.Aå ÍûðF^”)bêMkıJ]Ì/oÍ¥´ܰõ& kNSð?!B šñW¦üp „Ò„—wOKMA}f•¼¼<–0¢%œjH’V#«-iÜW  qßO7$žÎ(mÑ^ä_´‘ÌÜ¿mcâRAû' ¸O ˜ßEg¨Ä¿SiƒŠ*8R4ØŽJÄ‘í¶Þ8‚G5ÚѺ]ìSßIÕ£ŠJFV°åÍ$kTøj@AûeB/‘6’œ&š—¶)¨›»v·™‚Mvb¤V‹!ëÎN¼ú-0uaiv£oy|öðé1³·oB)'oR2Ò“Ê»EêôêØG§›!¿%×¾^е“W)¬Å zSZØú©\*"õ$ ù}ª§Dø²F¶fjÚ“Eò©Ó.$º‘`d†0LpÇ"°¯©éMU$ŽMüq&} y”¶ÿJ¶1}\ÞÝ$"bæ/±©¥»!iaV  üOþWÅÓÈžëO½”t 6óM¼’FÕÔ#Õlaå,wÉ9(gv<ĨÕ%Wá‹ûd‰°<‘ÈÛ ¼Ó B‡OŽþæîÚ%iæyM#‘fzÈŠVµ«€í$ñ–WÅRÝ—M’©tùuÝI€^ÛùŽåe¸”s´2Á¬Ffc@¨ô ¼t¢«ôlœ¯†ÖÅD&VþcÒíMΦߤtÉÏûÚ±hB) ÂÅ^¤×š…åör11—.i¥“é6WšTÐÙG¬G%µ(ÆçŸ.l,œ$Ž€†ÛŸòñû8A¢Š½V÷Ko ZmÔ†Ø+<Ð$²F.›‘!¤ZÔѨkZ,Ÿ4QFà 岻Àð·Ö¹ºÆP§*Ô2q‘Ë¿Ëb{ú²ÌÐ[ã¾Y.ì*­ZN<ÒŠ±ý¶EôUˆøc-•Ê6Ê&¶Ck׺kÛ ËkÙlÙãõn,x%ͳIFå•ꀪ)_‡ùù” 0 1›!±=Å„FFˆMH˽G0¦ ûS,<Ð 2ˆ£»‰¢Õ좖žGx¢‘’v-ƲˆâÕ'âú:eWÑ<]êÏwy~Ék§?ÕIŽ;’gHáâ ÌüJMNãsðŽ˜xYÚZµ±ÒDZ…­ÃÁb-]Ï%VÖ¡cUæÜEOŽöŽˆÍß@óO¯ëSɬµmÞX«±¶UI ¡!ýÇjò²2¸Š3‰´eÊG{|Ö0­Ý=EŠÎ9âõ.9»$s‰Ü |Kð/ß’"·,ot²þÎÒ®ïî-à…Ñ–¶‘ øþÔ**cRvm÷j×jcfÀFÌ-µ g–T…䊱[¬MèÆj)©>í™sY‘jð¬3Ò:rE ±‘T}¨Ûb§Äh2$Û#²d5}ßM‘®o¢šëRvwQ8.’#ü<-˜8ß‹oð‰,LÖØk:tbX&µZÄU½g ²=Ê£Hc*>èìä¸o›Y´v­¨é $VÁymõàŽÑE'Öbga¼áò£ø¿äõÄF’ei0е›òí4ÉÈZ rèB ÄQÅ{œ&J)0}m]£Ô>±q©ÛC ^"qh¤ˆ$ÆŠ>PüÙ›1¢I>NDŽÌnêmAo'–ÂÕ>¢¼žâÞ¾•*Ü£J5E:lÙ“É¥^FêV‚3Û9³YMÚÆÖël²JІŒW§))ÄÇÇG’hŽ­‹«).¤svK´ôn ãð²ñVƒý—|M„€¶»´Ôæ6öZ“é\¬ê3 I *E¤A@`E>)¶%¹`6<Ù“;k¹ìo­m.=è#õvñ"{¶æHã‹÷qò'‡Ë|q»y3Ë=6ØØ£ĸæÌò@¥bÄ !e‚ƒÄØsY&ì°íKÌŸ˜WºÙivÖ±ùfÒEWÕoYë‡*ÄÛ&ý ÿ+({dq¹eú^¯i®µÒïÔÃa1Šx˜ñ™ÊŸ²Ìà9S]È>ÖWGâ¤Ñä”@ÊAjñ¼‡Öc`»ÐDäo½Øá¦6mËk2Û²++>¬7bèPŠæ„ÌöÂy,d K¼Áú>ÚÍÌ_]{«—WHô«g¶‚q*ò~®ëÀÔGÅ]©”Gs}ƒ¶ÝX<>GÕ.µ%Õ×W¸Òu¥ŽãP^Ö0€‘ñ9ø©Ä‰-'üOÅçA&·G\k%/SOƒÄJÒEõßDËê’ª©ð€GŠTå±,óh<è&±ëw6lÍšßzL‡ëjœæ˜–܉ä) £á]ð®ë®/íìä]GRôc%¼%ãqº’Ü©Äôv£(¥2b7ɬŸ4%Çšæ›Ón!¼žN èí ®J€ Ÿf¡åµ?à±" Ñl©U‚å–ÞHEÔ*±ü*YDJ+ÜPÐüLTÕÿÊÀ"y Ìrb·º÷•æ½kŸ0–6<½XÁqèÝøCqä(¨{ü²ÞEL¥7¼·× µ…ü lÎ8ÛB?xË×à&BYj‚lº|<ù3ÝCåäú·Õ­ä;ue›ˆ<‚2Kr -;‘•øb¬²²Q-æ¿~ÑÛ³ÝÉgræ¥@‘W—(–Bˆ$,ÅB¶Ë¾cÈp‚Û|Ò+>MZúK-BÎ%Ò#UõçH‚I,¡ŠÈiöAT¨o„展2‚,’‹¹óFåªY[Z·,Ò-J²*²Ó÷ž.HQñ†û#¢äÄor×dòW“ó#F¹YOYMíxÌ”˜¤uq¨FU¡£rFÿ$d†:6XöFÚ^Ëloîµ èEà…`g²œÏ"COˆ¥zGïÈHqtH4º[¦¤VÇ]‘^DXË)ÁUD®`úìÝœ­ –B\ï£lo’Q%Œ–×o-³µ¡…[Õ Å¥‘? ” ­A)ñ6^$㘩ɳË×&ÓªÈ9ÆkM·ÆÙp„²KÙíé {y¬¥è­\<„ü(P*ŸäÝøÙoªiß aT‚+™#õ!WOˆË\n }QË—ZÐü*Ù^ìè2hô»;+k‹½=ÌÊRV‘z·´v1•!c÷­:×*$“»!]óùsNÔ.ÞVÒ9\Ì~¯+ÚD·.ix¹(€ý…^§Ã–qžº5е[­C±n õèÐDê´àü£.ëþê¨ø©×¡Èƒ#äʨҖ¥3 ˆ.PjÊm úÔ‘ˆíÁ_RœV©#ÿ’X¿w¢äâ{¹1#t$÷76žšÜ“¨ÜIWhÖoV"²%¥uâ¡Ô«J¶KŸ¹.JäÚêr´g*qŠÞ”*|ÈÌA*QŽÊXWŽØ*ŽÉ´‘ïf‰Ý#€,@êƒE%`j ?—,Ú˜Úí—˜5(´k%‹ë¬¥žpqF‹ê9õ8’EHìÙYˆ˜‘%=IÀEj·ÑÝ+/ï /^OË€’oÞ|5§¨Æ¯¿‡!³)sÙ5†çV„Áagú*äĨâ$w=@—ˆû?Ì?—„jŠA•ÙKäòìv\^im_0ˆåmí%y-ïf &ti'SÏààßgl„²wòf­“ 'G†m!…²Í5煉ÜB³zžªr·_I˜|O4⼇òäeõ_F@Š¢§yq=Ìöv2Jua¡2Û´ÑÛ$E½'$)Y[w¢’Xr¥2QŽÄ†'¸ ]ôØãžÂÆÉ5YRKÉ®£U»õa$H!‡“³"oS˨fåû9-ÎÈ ÞÇ®iW^YéWz¶‰3Kp ’Vvà¬#?r?Ý|<øþÎ_ÂPDØ]ÝÚþk/ªÉÇÔ’É#,ÁåGšÞ‡á=)‹hÒl³i‘2Þê£ê|˜4Q­¹•O*¿$0èzÿÖÈÝìqºë•±‚þÏëÍ/§4‹t–ŠÀË5«0  üAÃÀ¸À÷¤í²E©kEf•n`šÎÅäo©Es)ši‘ôÖ±¬w•ë–ìÕÂúíûAVp²LdŽ =(ÌQ¹ž –SZÿ’Ù “G’^¾mwê°ÿ¤G ýE·.«Ry UGÙ`>Ð<ϵ¾K’A%£½—“tË›h/mà´–aê^º=JPâpyrPÇá ¨?j d L¹„Æio•|Ã{[½rÆ`-mcž8uó:…¼BÍÑE*¡hG¨ÜáøW €;3W²×%¼‚Ù]ÛO‹”–±Ü“7*ô“ŽæBÀQKbcLA$nˆh¢½žH¾¿ðÉiõˆcrBlxÆxüþxÒI ÛZÞ~»n.çhÛÒ¶2Ú€ÍÆ>*„²!=Ù¹?ìü8AR²Ó<¯nÓjwv–³kQ…ÚœbDPy쀩ŽKsîkâE@]'°Òä´òñA5ÂÈ ‘]€_E“t;³ÓŠœˆ­&6/¹ ¬k÷wwsØhêK\ªÉ$³é[A ªÒF§ó ów<¸ŒÍ_.LWô›ŒñÛ&§AX,±¸fHþ„2¿ ðûKï–p d¶ÞNÔõ{Xìnõ£¦¥³™f®òÏyrëð‰ç“Ó-öé²í”JDn¶ÆŽÅ’[èÖÖ„.¨á¤…,0„ÈV¢cSÈǽA_׈X‡û·t~,G¹ºåÍ“ÜyytøbÓtË{}3Mµãò‚nZY}2IËU„Œ‡~-¾ÎR'{–ΡǕtë ÝýÀÔH­H  /6yÓB Ÿ†0\ÕÅYrÑÄO“NÕæŸi÷z¢h’%Å•¹Ó`ã>•wªaˆ^WŠñr«³|8,rêÂQ7h}>'S²EvŠÚùfR¨b2C3>Ë3,j $¯ñâ)ØdL [.:Ú™‰•”w–wr[dUkoEžæpÌû +‹6è¿ùXº,¦y5urÐ_¼÷ßWÓ䮚–ó§’Ý#«<’ÉE,%¿eB÷¦Z»iç°CÇ®3¼W*ÖߣœÒßQšSÌJäpQ¼äwR:ô\°ÆØ‚Kî|×Z…Γl È‰K©’gX’ gEOÅHÄ´}ò0ǵžM’‘±L[Êž`°ó•ä·/õË´N)t»I--b°Œh²¤µi¦‘©Y"“Ó ­6lÕ²-n,¤YiæúiÌÉ$Œ’ü[E¨W`?Ÿííñ`!‡K©]êpZÊÖÑ®˜pŠ;‚Ö³G 4<Ìb£˜ñ=ÉÉPæÇ~LkM7º kGP·K••QÀ+( †-~ØØ/ÀÙeí²È&w/ÖÈo¤g’È<0Ý:,×K<´°âkñ/^];dVû’íJ ~]jçʺ|i¿j/^Fåkd Ô Þ2Â¥HuE«þ\—%áÛuiü«å] X¯cmJþðÒúæ1%Ð’æ›Êޯ؈RŠ<;d,–V9¢òr./ã¶H&£RZ·"8ì‚ °ø1ã+·"˜Ëä_/Çåé,K¨'!ÊÀ\-Ü‹Ä ÉRË!¯ÂîB/  å•Ûpˆ)†™g™åË*ÝÝjwö|ä™5ŠÕrä©v*Šáù7ÚãñÈÊDî Iû_hžk··R¹›NÓ.Mplfô䕸Ò#Å”˜ãG5uûl~'L$vbBÅãÑ-¬^W¶õd’­­§)Õò!â%øÀäÊÀµOL™™­Ó\Ge-óFÕb¸¿°µy.aØ¥ÕÒzröÌ9¬AÔ8‰¡¡õ#;ò\ ›ÝH¤ÊÒ!¬ÏK5%µ„ú„FôU)·>m¼ƒ—ÅFªœ›H;Ú.n5{¶°‚>¯xŒÂ(ä{w0G³.UBÐnÇ!#L¢Ò.ŒgH0Ån·¦dV@ÑT´ŽW£Úý“’sR7H&Ôoín'‚8’e“«qŒ¨"4!JŠ€Äîž'ö²B–HÝW¿¶žK› xžöBa]F9!‘âóBû-ýšWíb@<ØòäÿÿÒ1…nlï`0ÜGgé3Ü[ÅY§ôèw&J€jiį¯\Âw.¶óBK{¨‹ŽÃÓp‘%dÏ+„”øx)ZüT“ulÃÒ†29}_ã Ò@ÈÄóû° —6d#ôÍI×.帽Ôô­EÌSI +¼ÆR6åº~×NYl·M p–Ce’A$W¢K#q_® Ôæª±’TÑA¯Ù~þ9Q‰5LŒ©.¼[Ÿ-ÇõÿÐé=‰TH[á+ ÖWwF~´àßÊ»a’IL­mt»ôm@C*úÇ•â\Ö9™Yj !ÛƒŠ5)P4‚in¯¨Ëlúw¨£‘êÞšÃË€(U@^+Ä1W%9 Ý¥©¤Ü,L÷0E EúðÚ¹(ÎÕ¨BjiÊ´©øºãÄ…‘XÛÁcgh°¬2É-n.}LnPKÐ3’AcƬªŠÙYæÛÙÞŸyÑOªÚž¦yAøÃ‰T|!ãÜ?ÄHB6]ø®SvÌŽôT&ËLY&i\ÂÉÌÙ¼…a‰¢G4jj¢¿yoñ³€ž29 ï<Ïk µ¥ÄZŒ7¶µõnþ¯:̤%]aàÅK'"¨}3úðÃ?PD²ÉŽØkךכmµØumOE–8ÞÆo0AÅZG—5Hå.¤¢¯±îÏ–Ê#dÆvlÒÑôhùrÊ[{{I¤–Ä\ò¼’8… ( 6ÿÚ(«ñ‹(?U6ߦÓíY£Ò¸ÚÙ¬³Ü*ÙC}ij¬FNH­Ë›z{·V¥ùXmD¹%®±{¥ÞI¡[Ìfœ2C/VˆþñØÅ‘UÕ‘™ŒœH«)6v fâ⇒ç’Inâ;IœLƒà”GÈr¡šwñËb6i–Å™â¸ED‰T$U£HŠv<d6ç|‘ˆk²£¯§LR GÖ¼ø– :‘7ÎK$‘‘Á­yrGf •˜vmèœ,«oèú+l-ÙD¨-½)y6Ü£”UIoÙÿ'%ͨÈ uW¸†ãP’ÝíYBCˆxõV¡ªÔ}Ý2C¸õ‹¬YƲÁÄ“3Æ" ÅDN®jJs?dÅEÊÉp_6Ê✾>C*¯o€S*Ù&–ÏDŠFº¼²¼iî…ô"á˜:Á†øVÔ«“$ôQnÔ4=WI-³Åpó’2ˆËÅY×™ø†ôjU[á®1$ õ'’4ØlKK¹ËÊL‰¨HWëD)Ú>”*èÕ#$$m‘f_¦WK²Hno¢ôø«[OÁD¨Ux0 ¯…Ë×+ÞØ™1øWÌžfvÕ.f[-2ãkjg0O:ApøÄKÆ£ùË%)É”Gzce¥I4’ÛkÒÜ2þòBïÍ”ÐU]òªì¼¿Öo‹+ E=RæÙbt°ŽxEÄo_ª‰dŒñø$x¥P 7$‘²ûäC/zEþòѶý-c-Õö­* YînÞ8çVŽ‘ÁƒÝðâ€|8LåÕ;tø=]$Ec Vú^‘ ?S´£L±Jßkv 3¹é#³0Ã}XÕ§Vp¼"K׸F’Þ:™Ž¬Û€£cþËÛ MZßë/òŽ’Þ½ÁwTsZ,'ˆ¢·N"¼k®<,ù²)uÙ亶{øcV ʨddQÄ‚qP<@é•ðŠ@™´þ™oq[wUx¼–Å–xbdÅÇW¶E$ý¢ÇlÝÄYaf‘éí:ðµ±$·˜˜¤–w° äÊ{“Ó§ŽJ&Ã\ù¦z}Ý£Åq8H®¥4ŽXÄv'‘,À¹?´>ÈÀE±¥×³ˆ.]t¸£mNtx‘$­½ºÏ1æÍðš„ï%>Õ?—+„(7NBGd–²ÈmîIa¼‰½‘”ÇýX/u’´Ràq§ûœdAbDHDÁqm¥%Åíåüów‚+T‘%œÆ´,΃b¦ýÁøxäªØtE¬Mw¦4‘ÃÔa€¬ª"”/"ȬÌÕøûõZqvPža"3^Ø%¥âI$&åfa4$­$²Š-A CS쎸7æ x€Ø±¹ ‚ê/©Ù»D`WŠI[Ë"©j¥A‡sº®ÿk.ºaÕÿÓ” ky¬F±­E!¶Œ™¦•«+WGÈ€)ãÓ0MÞÎH¡Í kZ»Ë ¨Ý&…2Ä}7%BR-וh+ðý®˜ABi£yBÖÆÌ¦·<Óý`’`àâ7UåðVF]ò¹LÞÌ£}Εo¢®I´l(‰PZ‘ÉšŸó"€qçüÙ+,º+]iV©pO–VÔ¥†GÓ’çŠÆ“L…àSáaö~<™«•ψräμnÆ5ÔóNok©éïóý^!3ÅozîñC•H*¿ ¡S—/ƒ.Ç(Õ2P§åˆ?05f5V+ß]ɹ¶š9REAŽf‘»Ð;|*Ûqùe¹'æ˜À3vÔÖÒk;I¬ÙÄr£ ‚IªT°SðWâf¡ÿ%r²,ß©BþþÖü$±}b;©‰‘]˜ÖRÆ…ÕYE7[ §Ã†"¹ Ù;ªiVð]­Àõæ‘(÷ dy(„©âŠnÿN ù¬S»‹Ùe›…üKmg¸Œ_‰Ïˆ ¼UG"2 ¸¯t­æ‰&K[ù„ÒÚaâŒñ;AÈ%¸/ÙøzŒ”a[ È“²So©_jv†ÖÎñ^bÜ*Ƥš7 x€h)¿ìátNÌræãK’I-ÞÐj6  ½·-$@½TÊš½ëÛÇ-ž¨°ÉE×å}æ­{§^ê¶ú]±×ÙaÓ!‘¤“êÖÑ5bdH„e OWÇJ‰Ì#ɸFÓm+ò¢=æMKMÖ~µªÃÆqé’¸2™â4šÓ“²¶WãßEðÀf ¨jš>¥ochÉc©…W)Š(äVˆŒÒ¤8øžL8ã±X숹6¶3j“\Êš…Ø it¬ ý䱨„€T5>˃|1°èÂR¤¼è’Íq§ér?À D¸žÜ’ ÌÕ¤Fzµ ¼x­>™€E–=“ y\h,.¦¾ÔUþµªXÚÔÚ¸„nò±âÅÅU~·9\‰ˆîl‡«r‹Ô|½ç;Ǧ—k§C"°Ì’4¥öä¨Qx…e_µñ0ä2PËLN#ÎÔ´M+Ï/+iÖ_Y¿¸VK{rƧl›`(Y~+oÛ ¥W„•A ñÜ2ßÌn5(I^Å9D#è^hIä¡è70‰w0"’ÛÏ5XÙIõÒtN$˜îmÙH:žABÉß.Úä S>­æ J©i–²êÆÅ-Ö+r¨Ó@®ôÔ.ÿ iûX‚-—3ò•õ[Óu«j„.¬ úKé£ÛÂSª›ˆ•¨I ûMñvÌ\³½ƒlaÞ™˜o,ÍÒ]O&¡pèú²¤v¨•m”W— ümûXFã’+„ìÔZ¤²}m¯c)d]шäq/_ÑIë“«éÍÒ ¢Ñ¯&2]ÚóŽ@E¬¢Ç$#ís*ÝIÿ[ü¬i”H½Âg.©údÜY£ˆ4¸Ì Þ×ÔúKÄ_‹Ey ¹o‰¶Êê·<Ù]¡'¹úÝÉ[9®ïµ&‡Œ†4‰î"PIG&ñÅÆµaÉë“é» ÉÙ-Ôõ}Ê–i­ä!RÚNNÛ$‚B ùÒrñ`¦k¬"D- vz‰ÛÅ‹dQB|Ú‹R9¹óuÈS"múãZ¹žËMÖe7€’[%UsN^¡%TV’xò›´¥¢ÂôÉrQd&†Qyª·3KKéŠÐ rÛ¯òâK(…e¯–5­^âçOÓtØntëH„—Ã]µ³À[ìËÆN­QÄ@¬Ê\` ù¤Ç’fºTñé0BCÇY­ßÔg’1SÍœ×sº×%÷j%¸uÛ}ài&‡hڭ⇹ÔqêI) 3N„âµè rrîXDûOó^§y¶¯=¬ÇŸ¢¬×E8ª2âŒjgÃ*á›a´~§u¤_Çþ‚æÙ=13“–áP ]øêï¹o§!ѶFv*’k»kYT_iúäZƒ”òH•cãñ– Ç—Âwj©É žD1á M§hö\¾«<­°¢ËhŒÞPkXшôê=øü²d“°cÉ“‹˜$Uxo!ƒÒ&3hTË"JÔ(IØ úþφDZ9{Ð6öº_OuÙâ¼y/òàûÙ–ÝisÛ¼m£5Ýݼ-éE,Ügå%(ˆ¬kV˘I®h|–Þô¸ÒzÜC4¼ž+{BӦ䝯ƒ“+–ÞŸ×$bboe¶Ï¦ÜB³Ze„ŸH)de—Ë ;¡íß;.¹!.4½T/«A-ëN Aj“A-@PÈŒ6'rµâþDÛ0QgSõ Ò@aIÑKˆ”ÀÍéü< kð)#«a$Aˆš.-CŒeïÕãˆý¸©«9|_/°§ÄDòI=Q:bFþÞ÷U¥íÅYlä)sñ¸Î!oÓOìW#"j“¿%˜Â··^Û;ñYÉXç).ª$UdéÑÈÈžæQ¯¶·¹¼2¾•o=ÜÎÚH“Ξ«<Çe_P¨û_ Ôá°9±¤÷DÓí®çf±Ó✣¤ ë¨ÄfŒŽ¦Œ¬Œ)ñVžù@2¢ã·[)e¾¸¶3sš—–ÓÄ.bã#€T0âµ9/ú¹.Œ¹î–ê© õìì“  ŠJ…„;Ø+Û‚õßïÉÀÓY Íy¢XEK2Û¼gÔ[[U’ååŠ(ŒƒŸªX”§Äÿ r2là_ÿÔ«Yj2êÃ}\ÛŽie’âK{c!5ä9È "Š/óo˜¢[9=i‘ÚiÒÛ[¤Õk¹þ‰£’ªªjJ·ÙPrxøW!kIÞ˜n.~·o$BáÉâ&X„¿hry*7ëÆ‡ù²¹žlãczjö¥{wmQ¢Ôƒ˜a†4wžhÓãf ŸPcÉÿØä"—&ÁDn«dér<ŸZŠY$.Ñ´‹:•âÕè Wìž_ä¯Å“7Õ®¯’ 9®.å‹S¶A ôHbŽâFhwa#`ÊOüyc@;×q»´uÔ45{µ¸’âgy"µŽTŒ…µ.)êIM‚w傸…”·küAmg=âê×1¶©$…%šÞ:EÈž~X }¾DÓ“RrÑæ‰Ll‘ÊE,2A"™.ËÔ»¨ß·s‰œJ´†Þ:[éÂSo'9$• *È9nPòn£ör7\ÑÍ-‚e’0t±$6Á¼Üã¬\é^1r©; ‡å‡šNÖƒ¼º¾´ÞÄËÃTà‰‚zäÓˆ™@f=wáí“ "<’û¹!º”Ï,¶W¾-Òb’𪺳Ԛs“âùäyrO4ÿÊZŽÜÞ\ù’Uˆé“úIe0nç)ΈªË¢;7Ãý¾TʲLÖÍ‘Ðú†»É%´Ö‘É#¿­{:¼ó_e×n$ÿ’FYÁ¶í$ÙnòÜACA¾žææé"ibºœ3ÛÊG)eŠª"­+źû¼'ø™’:#àm"ßL°Ò§ˆM/©\HŤ¯ ëRãˆ4_‡f-1Ñ<³cå­&x¡™uAš¢k?JÒÒiŸûåHå%¸šü$~ÀéVÊ'.!¸nˆ£a9›P¾!„fƒ¡˜€2­šòQxý8Â<˜ÊvRë­[KŠ {y®®SU·I$B$GƒÒNE–8@Œ@ÜÔ²Ë Û+ Q©ÏÜê °µw·mBÔÇðº§/N1¹1Ž_ é^|pñŠbz·.ki‡Q¸’ÒVC ,&‹°4 ½O >X›ÖèÚ“«{4YÚQ¸)õƒ´0 ø§@x©Ø–p7ñ+ˆnŽ.ä&©­^k²Çyª]:Ô²úW!eˆ¢ÔTׯ"½ñŒ@È“º}NäÊ,l>¡o} ¤š“¬‹;BÛR^` â ôá¾J#‡¢‘{’¸Ò ò5Õü‰Û|jRI'ŠF€© ¬X¸Ü3¯ÙëÛ( öo=ÕÚÉ{ïclXÝE ­'à¿ g­TTÓìñ®$$mºa}©Ç6òŤÂH%1Çx z­ REH4fÉp‚ÂÌw*Ëu*ÎÓ Q°WÜÍ3®ËZƒE¢ž-¶Dw2½‚]µ½ÃªGÇS›”PH´éM˜ •ßšÒ†¸Nû¨G¦mëú·WUfŽÚ^qÆ‹)¢2´£—?µÓùkƒŽÒbÉ;ipÉop’ZéÊ¥nÚ0²Ýq#÷Š¢œØ ò¯ŽDW‘B]5®£§Å<sZ‘Í­îïHID`SÔxÅW‘Rm²tߣ͜NÉŒãHÑRDˆì(Ñ‹Ô2žsð”ZÒ€néöŽÙYÜì¶BSmº™xù[ÜYÛ#̺‰¬ " ¯Áø“ÿ=SÁrë¦|’;KS»–ÊÄEy)oÞ_)¤]šFh‡²3SL‘;Z¤cY4MpoಋNÓB›…fÞ3Hê„©n›Ñ†Í€µQ×e¾¢&‚èÝZ\òX­ãxå”åÇ~*vø¹ý¬•áóKìô í¥4½Õ†Ù.4¸ýpÓ™h Ò¬‡o‹ e|–B·Ö·¶ñÓÈEp$¶YA˜°`:Š1cܵ:äAÝ&´‡Í—ºŠ»K SšÆË22¬a‡Å!’¤‘O…Uš™"@NY¯d ed­§µ ­ôÓƒw'©ç²jP.ý{ä,sæÈ„l1jú=¿¨Ò$bœ ‰–»¹qG]ÿÉãüØÝ± -žÜjo5=F{8i_©ÛQ–@ƽ vû|_N<¹#e’$÷ñ&ŸÄ.CF•KC+B»²F€ß³°ÄÐd<Ñí¨h¢­mRk6 x@#bÃì³±ý 9-rÙJ[%Úòì°Õ®"²¸¼Wôì„ߢö"÷'u2¸j¶ eJÆÖvy¬®ï–H.#?]iåqlЉ_N%·USßÙ±'eØrDVÿÖõ®,â†Ê8ãK$•©4¡ÔŠIP@JKö][í{‹¾H­·V7~g¼)µ£Ál‹û¦¶Oˆñ1 â;Ž­– +Íž¥Äbi.Ö><îXüJ$ÍI;òú0[w&)Ínº…Ë…·ƒ÷V¶âED%ޅ؈“_ÚL€CP¹ŽÎY® –ÕÑ$õ£+EyÝŽg‘©͈݉“_ ­P¶Hq76¸kE<p#R#åÜ|_¶JéiÐØ¿¢ßYˆÇc^N„µÅÃÌÃh‰¡ìZŸdtß%`  D\ƒelMíä6×yÍfD’iñ¨ óûä#»)2ÚÇYºe¾‰®ÆX¯¨Ð”pà ¥LŠ«©aÿ‚F™B¾ ¥Ò[Oya;z—1i’­ì–öò2˜ò+êD¢¨¨"*~.%©•Ç›9 ¶k̾dôîâýo}kõp¦3ú<Í#ÑÏÍ‚×ãfû_³ã—€¸ôO>hÏ.M«=¹³Ôµ µKiežñfycŽ;p£e¨bÌ:šŸ)Ë\Û ™¬£fŽk7 Eã;ÍVä rM+Éúá6Àµï-XÞêkzµåí¼š­ÁKKxÝ¥µ%R'HÀ`¬H«ý®_ )¾Hζg#noÿÕšY\ÙÚÙI©3"\új“E$GŒæa»P$×s±Íqßg/’[Éî&’GK»ˆáž+h™£ôÓãŒW•‡o³“4«ÅÀx}hÙŠ±\¯#ßáyPÓ®ÛãVti2µ¿E²{F·¹˜’ŽÀŸO” ðäNôèäN+ÞÓâÖÈ;Û-6Â7ÓôÈe*-oÖŽà8V*ªã‰(Åž§ºâ,Ó{ØG[žW±ýeö[rþ„3:ò$…YŽõÚ€wØáv&d-æ«-»K L“\Ä©¢Âý’ø‡s¾LF˜}[ ­uÝ;QžG¶²’æ Ey'Y£,#A@ǃ­¹$õ§—+fTÇžåôÙQm˜É};»~<•YÏ3m^*:£*Bm¨ÚTlÑ]Ea'½-¬ô$ú)£#ª}MëËáÊøI6ÊÅ-‹WõÌöÚÖ&ŽXÀýâWøª9q$²øm\nQÄNÉYÔ®RêE­Âµºú6–‰Q¤–ˆþª¸ R¼_í»uÉÄuLmtë‹Aomì.-§W’9ZáVx–æ%çÅØ‘É–:qä<~³”Ê]-•p‹B_]Ü\CÊŒÖÏ@öÑH“q VjP¿ÏlÈ’ 5u;9¬šh,£ø/%¼‘ÜBjI8³PmÇ+áÓ {П¦m4é-ì-ÖÝç¶ÓhÛÕžŠ~cAB[7± ëwÖ’ÜI7Õí-ãb ˆá0… Z¬wUQNí`º,„Ai­ô¥.Ké#åd¶ßÄŒ«)«SˆÞ£ˆûXÒ9*ÞÝÂn#òë×´~3J!nÄó' œ дg”gíS]y¢éZݶ£zÚ4¶ú,OÞÄáž>'hÒ 'ü•m°‘µ²ëæžHWKh㽊î×LÔTÄÚu¼æks$dñVr9qaBxÕR¹›ëÉf+’ýP7vsF±GéýrêîHkuÝ vø Ón¨UøŠ¶Y´ZÅÚ !»ŽÝSMŽI4ð~³s9eHI>.1C±<—váÆˆ2$÷³<Ó5[-“,Q£O"•’eDŽXÒZÊêMWН_§‡¢Ž*Ü#.µÇÔoV}%­ šÑÅÒK+ÏU<`…˜üHj+ñ|KMƒ/Å‘ááWˆÉWQ·ŸQÔ!¸š‰{2˜R!ê3I;P™0¼"E'j±n=?kÐÙ;)Ťyšêù­.î(®Ô¼ºœÅpÄx…¨›Â‡ŠŽ<°’°ÉOP³¹K¸"ó%ßÖì£W–;Xê'y¤#’c^ b¬8îÍû2¥ÛÄ–Ú”þ±p’YB\ÇpµšD<«A!*…ù¿‹l®äy)¤Æ5£$Ç%¤3“õÁ·®àš –æXíGû|GÙÉ Òù52ö£NÑì„÷«'ÊÌÞ›B§%qbÕuo‰ºaÛ½Á_êZ´‘Ac{uõRÄ0ŽO93ñ˜‹9Óì©e#¸ÂOP]S8­£ŽYæ“MÚל™Ydn @í"•%›ì²üJzäVït†öÝ”Ž7’Vfh¤õ 1ÔšÑ\Ô¿Ñ“½ ®£k©YibÜÏ͹Áu+zÈJí°ZHzÊät®QîS/y‚æÉ.íf‰&@&¸ºÀ#˜üÕÍQ^*v_ž"]Aòê×+*zVëqlžœº‹ª4·UÚ;{QPc'K1 pì¡+ººÕäž=6þÊH‘G¨Ä*<°­åÍyÛý•ü0ØæÈDòd²ÜZ_ y#.‰b‰öQ˜u]¿výŸ„ò¦D ·CÙêwo4v1´鈦FIýg‘Ïí¢2+þK ø±&”@R¶–3ÚE}-ìqÉ#zojc*UTž(èY[öÜ 2Æé,½Ò縺úΙ vHBo$™MùõzÆzþÈý¦Â l¢gÒ´ú­Ô±15²äY`0Û*û¾˜G¹ ‡ë•‚H®L‰ miå94Ð%°’ëЉZ òb¶u`yC*Ÿ†£ö¿Ž$Hõ¤ íÒKMÑÞ3o!•b.Ó6šfW¹ŽÑ˜,aî+À…'ãôù2òý¬1‘)᲎‘å»; ׆æí¾¯)?VÒe×êÑ»0ôå*?zèjܫlj]¹rÉq=Ȫ;õd>[Ñ4½:Ἷg,Íuy/¥&yYùÐÐ(¢)ÃbÀr_ÚÊŒÏå6 ?V‡Wµ–k{ kûHn¸âˆ±Z SY© jÉë°ýâµÔË0£Ígws¨j\†£¯Ù¬P5û$±­±ãÏÒ-+SP ÆÛÅ>ΑL š{©\Éjó\š«ºýmþ£IãRjTÕ8•Û”gàþVÈÃ~[˜¤:ƒHVKI #fô`²‡˜®îÊõƒìÇPÛŸžL bz¥þM—ÍždÕïZP?I¨ÓàX—ÐãIj*½>;“ð§Ä¹VsnÇÿÖ—Ü^ÛDm®´¸'¸ž?IØ©U21 Ìyü>ë¾kÀ­Ë•v•iÚÖ¥5ä·š™µ· þ•¬$ŠU$a³Ôíéô_|2¨1ˆ¥/^ê`/'²ú–šÿ»´½øg† Я°åûCÃ$Ni  ’˜®]æHŠÇn‘•†ó‘f4Û€êrA… ÉRÞ1wn"–QTú·‰YþÂã•Bý ¢¹ ‘J2Ïm'Õšhï¥UãwdÊ|U –`6©ß¸\Ÿš ´ÕôíÚêîöF0ÛUåºiž=¨5®ç·#]²Cu7ɧ7–žmâÓ5iç¼W·PÂä35X¶ß‰íˆÒ<“®ÛÚ¤ÜCë"0éš—2= ÕâWá…ò£îR°Ðg†ùÌöÿ¤5+uo¬\UVÖÙÙ¨«g‘rA«·Ã’œ»Ø€wnóG“Oµm[ëˆñ¤m=ÚL¯G)4¢”w+^¸‰‚@ïbcÕg“ô‹ÍVëÔ²µ¤Ô¸» BYÛû¸•¨B6©¢œeCvxã|“Mcë:œïm§ª>‹¤¹Ší¦c÷RÂÄ…Šhi¿—â¾.LÙT¼³œ¸Šœº¬ð´J-ocXøA$Šî Že¡`kŇOò¹eÂ;[LŽû1·Ñ48d\Úh\èÛ’[[ÈEAôž‰ÈxÕ}òwlEŽI–¿‹;Å%úÚAE>¥¤Aí–&Øz±‘ÀÓÇá^]²\ 6$›FÚß^–’îå“Ñ”p´ƒ™rÌÝee**õéCð÷8‡‚HÝ$±ô}WXÔNò-H ò©CÆ¥øWóPwt2.ƒdf»ÓÕ@nQÏ©ÈU‚ü+þ¶L|­(Ô4k NêËF×PÚÁh­jïÇÔg%˜»MCù}¯ÙÈî†ëOôm6Ê×H¹·Ó.í­¬®ÛÞÝ^çä^±4‡”a¸ñÛ‘Uï¾^á®r³Õ-¢ž3y 1j x[iÑ4m"Ï3HDªGÕ~7@)Eø²e1qi×0Û«\ˆ-ïîÔn™¬Åy•OîÕ‰ç»3ɹ,âšØéúLénŒ¦s—œÁV•*ŸÅ]—ü£Ól'͈æ¤Í ‚\XÏs$ó#ëEÂÓ‰VcN„…;æÂ7Ý2*\ÜÚ[ÌÖ?ï–ÒÉspÒÛµÕäÒÜ*ªƒ$¼B¼@G?gu<ÔÈE–™ _Ái§ZØÁpáUog™š8KWø‹3Pny7Ó‘'½˜oRÔ"°»–×YºŽ ¢•¾°ábäé@ÅÖBxÔ‡—Zäb Ü$¥÷FÖg³Ó<¢nb´³¥ÕͺFÏéB«#Uý8Èb)Ä7/´7Éïh Iä³É¤²ÞKÕ¤ux“ÖMÊK-95DFë…ͼÂK{Öxå¨ô Ó½X £ÇöŽYîi1æ˜Ú•’ß•ÝÊAo)†(âmÇ ¹3;S¨¯ÙÄ„‚Û=RÎÎ ‹ˆá1|P=Ë´¦íä o…B°]¸òøvÿ[öä·c~k¯o'¾²’Îy]-XˆC( A&:V„¨?ôí× õ @ÜMkwv$‚öÞöa+õ¨=HÚGd‹ ´tâh¡vÛ W%'ªÒ PÐérÇq,€‰%¾F{xÈ<™¢•¨€¨ØþÑ?g#ïfUo–«†·F´„·×a…£Ø–y\‚ûoD4ëc#I­Ó+ë[]9žxQìj’+Ö…í¤RTÄ ücа ý¦â0ÄWpPjÂiíl´‹»{ˆµ#úô×ñÈNÓÇe„õe 8®Ç§À¹#Cv{&º„‹¨E£ÙÛ©†ÊŠVë˜KƲQ~Ÿ éL¬šÌsO-,.&‚9o.}&R†Úb oÝѪ¡÷_nX•º(Ûö²¸¿ºKs-´,¼måõ L¬}IJÆ8©å¿O©×Û+áóeÄ*Ò˜´>RÍ=´—PFêÒ¼-Âá]»8¯ÃþI忆HJB¬ ‘\ÒÛÇX#~Ü´È@D¡ô¤”F«P…(FÄm–a‚ÿ­ƒ[xg ó!žà*HÍ>ÅG¦0€Ç¢‰·¸xšäα^!e¶ W¢³M‚O Øßs* ,´nº|^5›²´þ‹3,Ó–®õÜ3"Štä{aâÙi0it•a†UxBHЫƱÏZ€ó©þc^,Þ •‹l¡Í•ÛXYÁaq>‡êFX,Ê$ :܈x»s™¶F ð}9L®ýL…rk½H¿¸Œë‘ÆVvk‡êG¸Së!q#”®ßå}¡–ñ¶kÚöG5¾‡¦¤æÍEûY'GE6ÌÄJ©£qßl¯ÔyìÌ ªþùX® žï_«Esê}emããꀯÂï·êÎÇl²'f$n„ä²dHøju3JÎÒ~æäc,µ¹–kT´•xÇo/Çé"§ÄÒs YüwÈЂR'¹¼õXFªÊŒA50ªõù}šå¶Ávƒ3kzŒ:Ds¥¤1ú…îe¡·Œ"n 4ãîÇ`r¹€ÙIOVK})#°²»ÙôÕý6ŠœÛ‘C Uì’y7D®@rÝ”†û&¨uy=mÏŸ(äøÖçbÌÉñµ+P 9WŒjŠ}Wj:Ÿ—¥žÞh¬æº†ùÔúÐŽ —S,ŒXñãZ ;/ÅL¬Î‹0rKmµûm9%Õ#ŸK}'› »Õeº¸Ô¨‰^ŠÈS’»Ìw÷Q—ˆ ´bX3jú·›5øt_,ë–ú5Á =ü¨ë~Ó¢%VÙXR4z·Ø\¾dB7V¾l¾ÆéC3¤QiȦ;šÊ –^®©jW—ëÈ€‰%¶¾gm6è躤ֶ²jÃOÑ eyã·y?pòHT¨–BØ/÷q­>.YVLv“l ÿÙmoderngl-moderngl-773b733/examples/data/textures/tiles.jpg000066400000000000000000003272361470420062000236530ustar00rootroot00000000000000ÿØÿàJFIFHHÿâ@ICC_PROFILE0appl mntrRGB XYZ Ù  acspAPPLapplöÖÓ-appl dscmòdescüogXYZlwtpt€rXYZ”bXYZ¨rTRC¼cprtÌ8chad,gTRC¼bTRC¼mluc enUS&~esES&‚daDK.êdeDE,¨fiFI(ÜfrFU(*itIT(VnlNL(nbNO&ptBR&‚svSE&jaJPRkoKR@zhTWlzhCNÔruRU"¤plPL,ÆYleinen RGB-profiiliGenerisk RGB-profilProfil Générique RVBN‚, RGB 0×0í0Õ0¡0¤0ëu( RGB ‚r_icÏðPerfil RGB GenéricoAllgemeines RGB-Profilfn RGB cÏðe‡NöGenerel RGB-beskrivelseAlgemeen RGB-profielÇ|¼ RGB Õ¸\Ó Ç|Profilo RGB GenericoGeneric RGB Profile1I89 ?@>D8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zu¬s4XYZ óRÏXYZ tM=îÐXYZ (Ÿ¸6curvÍtextCopyright 2007 Apple Inc., all rights reserved.sf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlÿá€ExifMM*JR(‡iZHH  ÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ú£áŸÃ/ CðŸÁÅ|àùKh{36‹lÌÌm£%˜”É9$äÖçü+_ y ËàÏí r°íþ®™ðÙ‰øQàðP<7§Øà‘mçÞ¶#9b@ùˆû˜ã¿Jó_ˆ? ¼)/íð7ð‡„±?е8çDÑ­Õ.Th—nªê¡”0 jöøUþv;|à°À øGí1ÿ¢ø¯1ñ“ý¡?gþÃþýW-Œgþ$7™¯dóԹɖI9ÃN(_†¾ 7þ(Ÿ¨Rri×õμ×àןCñßö‚Càß:Úø»LŽäÑmÝ C¡Ú;,`¦fb'=ëÙ2³„±'7|ñŸzóŸ„ ¿ã¯í’F‹à·÷x/Á²»xkM‘ôKfy\ÚÄX’cÉ'“ž¼Öãü5ð”­Çƒ|ÎÑ ÚñÇýsõ¨þÆcø-àFŒÃÂú`#®GÙ"é[yË€XÊSÆ~½ûVw4Hòÿ‰¿ |#?ÇÏ€!¼áYüW©ÃÁŽXü1ªHƒj-¤¥YXGAjïædg\™:í<ü£ééX?ÛàgÄ|)«ƒÿNrþ}(ƾ|2ðø;àe“ÁÞbþÓZFmÙÝØÚFÅ™Šd±'’ksþׄՂ§‚üˆçBµ÷î£øQæ'ÁŸ¾FWÂúXǤUºÙ†C#¨£ “Ífn-ø›ðÿ~lð‡„•.|Y©Ã4qèÖè—(º%ÛªÈaÀu ƒÆTõgøeá“cx#ÁJI2è6„{ÿË:á~%Eå|xýŸCn?ñWj™$ñì+Î+Ô’F GðNzñVŒ§¹—ÿ ·Â@±ø m<(Ð-IúÝþµçþx>?Ž´·„<"ÁâÝ1 Ž]ÝÒ:›²F¥0€³302I¯\Îâ€$ÌÿÌןüÁøßûC俌4¬àc?ñ!²ééL“© |%(O‚¼1Ðÿ`Ú`ûŸÝÖÆ…ÞŸà—މðWƒãdðΧ"8Ñ-U‘…¤¥YXF °#9í]¢|…V ㎃޲>-ÿ CÇù“äo j¸%q»ý\ãÖ€:oƒ?|À¯‡ùðG‚$wð¶—$&i$’3ZDY˜˜òI99ïšèÿáUx)ÔÅàòxðí§_ÝÓ>ß¾+çŸ éÁìQqøâ·’=À‰Tõäð6ýyô­|ïû\ü#ðt_?g†Oø:ßí4Ôá¹H4KxÖéB½p²(@Cª° QSÿ»ðŠ1à¿Ð Zÿ¶u·û^*ÂÐýœòp¿ð›êƒ'ªç@½þ”‘Ê1„áyOë@«ðÓÂ1ÿ„/Á/°ó ÔŽŸõθ‚ß |%Æ¿K7„<&âé£[²@­¢Z9XÔ¦K32I=ëÕÀ2.ØÆXäñÓ WðsåøÛñÿÌÁð—éy?÷²é@;|2ð¤'æðWƒá‘ן|yuÏ|YøaáI~ øä?ƒü<7©H‰l®Œ¶²ÊÁ2‘ô®Ô— ¶2|ٟ±¾(Hfø%ã‡kÂ3©ƒÏû½?J×ø?ð³Áð|ð(>ðdŽÞÓ$‘ŸBµwvkH‹31$’rI溾ø=œ†ð7”dÓÃ÷tÏ„N[à€ÂBxWKüØâë[ ãÈÈÈáH?0ïøÐüyøIàáñÏö{Aà¿ÇçøÇTŠá#Ñm‘.t+ÇUÔ:«`ñjïWោ$E#ÀþÆy#@µäãþ¹û×?ñÁ±ñ»övÁñ®¬râA{À®ê ±}ö^ÊzžGAøúÐGü+/Ç1Àþ lƒø§íÓÇ'÷uçÿ~øA~8~Ðdø3Á²Goã .8R]ÙÒÙB³vX”¡ 36'=kÖ‚Ç °æ¸op«|lý¢•ŸfŒoÙ‚xç/õ®{ãÂ]|ñÞïø-Y|1©È’E Ú£#‹IJ²°L©dÜWy)iJÛ¹º_Zçþ.Fà§Ø±$øWU¿K9p}»Šäþ|0ðt?üO‚|#7†tÉ%yt+g.ÍibìS$“’Iîkv†~q¾ox#ntCøãËéQ|)SÁO–PCø[JÇÏú]ëyÊü¥ÀN0@ão·ÔЕ|XøUàÙ¾?~Ï›|àøÒçÅÚ¤sÆš-²­Ê.‡xá]BaÔ:†÷ö¯X ¼˘üàMägØŸ‘ýÝp¿‰OÚ öuô>2Õ‰'Žºï¯UŽO+Ñ»Bã°ô4„ÿ ¼åe¼à@\h6úÿË:ó¼Ÿh…—Á¾ ‘m¼a¥ÃI¢[:[#hVr2Ƭ˜E,ÌÄ $÷¯b’#Æ Ã€yëŸA^{ðSwü/_Ú8 “ÿ ¦’=ü‹öTÔ/Ãu“Áã®ßÚsøy}kãÂ_Ëð3ÇŠÞð\R'…µ9RHôTde´”«+ò¤ ç5ÞX#áY]Ç$Øçñ¬‹‹‚?NT¨ð®­1þ‡/_΀2¾ |(ðlü‚<îþÒåw“A´v‘šÒ"Y˜Ç’I$’z×Dÿ |ç6ßøøzÓž?ëWøD üø}¹› i8ÿ§8¿Âº„JмýT»ï@ûM|'ðpøÁû><á t¹ñާÂG¢Û"OÐïV@©‡Pê¬Ï ÕÑGðÇÂ÷|à JîÈÐmp~Ÿ»¦þÒ¤/ÅïÙØÄqj§$ÿÔö·"Ä›;Áà{çÓô  tøeá ³Iàßç9ãB´à{þî¼Ïá¯ÇñÇãïüQÞ–;é‘À¤[2ÛÆÚ%£²Æ a±f w$õ5ì,£Íïã¸ïÚ¼ïá ÿ‹çû@¡äÿÂ_¥žzÿÈϯµtᯅ' /ƒ|ƒá´;Qôòë âïÃ/¿ÁŸyž ðlr§†õ'GE¶VW²*Á2 :핌*ØÃÑ€àþ5‡ñY|ñÈ~ðƦÛœ´oàﯯÁ/y> ð\²7†tÙ$it+Wy­"%˜˜òI$œ÷5ÐÇðÃÁîAÿ„#ÁAÁØ6€ýÕÕ„ê_à€Ìd’|/¥öÇü¹ÅßÖº•¾³NxzÿúªYhò üß?gÌø7Áè“ø¿TŠâ8´[hã¸t;ÇUu ‡PáX¨¯Io†~ ݵ<àŒÉ?ØIúùçÉüg¾=þÏ.qã-Xà ÿ‰ï5é /É’[À÷Ȧ ¼îäxÁlþEë^Iïþ®¹Ù¿àÿƒ?átþÑ&_x:eµñ–— &‰m"[Ft+7eE)ˆÔ³38É'½zQP§%HPHϯ\úW+û;GŒß´rG¸ãm'OLx~Æ„)¹ø[࢘Oøwý‹Ö‡>øòúVÅÏ„~ Ÿà¯ŽGü ¾GO êr,‰ ZÆñºÚÈCä@ätâ»g ³mÚáÇOóÓÿ­XÿË‚þ8(rƒÂú§QË¢KþqL“åß…ÿ¼pÿ ¼!Ÿ€ÿ.- ÁVxõýáEºttU€3ÍnÿÂÜñ»€Éðâ! c#ÄZ û¥~•Ö|6ÚŸ ¼HPÿðŽiÜu>ËøÖª¢Ü80÷ÛÂÔsò#Á¾!|cñ½·Ç¯R¾;…ìüO¨ÉmlúæŽòjŽÚ=Ò4Q2\”FUf™ ‚€s^ÉÆ?+~ïöxøš1÷€ñøÿËÝbxÿ û@þÏ¢7.Õþ$7•ë±6ÖbC œÇКw%Å|¿¼t®ýþ%ñùôÊó¯Ÿ|{yñ·ãÛØüñõä·^+Ó¥¹¶‡]Ñ£“JuÑ­PC3IrÙ,€ÆXmp È } !Yd@ í\z×#û<`üký¢¼Æ_ù´¬àñøGì¹ÓV)ÂËø†YÿgO‰'hÁω4Ïáy\÷ÆŠãø)ãq'ì÷ñÕ$ðæ¢’\Iâ âµSk iè¹U± Àâ½ññ7*äd÷ϧZÁø¾]> |B r?áÕrÿ§9GÅvxŸÁ¿üJ›à¿ä‡ö~øƒs~Ó’;ˆ¼C¡¬w(¶Ñ…‘îƒ*°Á€8<€k¡>#ø–Ÿ{öwøŒ¡[rãÄz?ù7^µðŠ6þ…LøDô’8ÿ§8³] ’FÐãPF2xû¿áJÈ|Ìø÷ãGįˆøáð"çWø ãË6¶ñV¥%¬ëº4’ê’6v†(š;’¨ÈŒÒ!U*„NôÈþ=xÌJCþÎÿ‹·ñÂC îð»­¯Ú†B~-þÎEq•ñƪ1Žä_¾àV b•BçŒnèØ-}N@ü|ñ¡,áž~&àóLjôü›þ•ç¿ioX|møóæ|ø‡y-ÿ‹4뛋{}sFIt·MÑ)šK®ÌвaµÀ'p {„aDÀ±UÁ9ÎqÛ"¼Ëá‘ãŸíŠ»·x·JäŒùYúЂÇVŸµ/Ї•û:üQ`«Èÿ„‡@9¿ñ÷ï\ïÆ/Ú›ÅMð[ÆÈŸ³ïÄ»U›ÃzŒ <ºþ„ÐÚ£ZȦVTº,UA,B‚xàW\¢@bÁë·?­a|W—wÁ¿(;ÛþPgÓý^£ñ¦8ß„¿¼}?Áˆ¾|A¹Ž/iéÄ:þˆ‹r‚Ú5Y^è0V3Ï9®|}ñû>|HÜ;hY»®ûá,^gÁ/©ÿ"Δ©ÿC‹ò­èñò°Æ{–êAíJȤÙó'ÅŠ^;¶øçð&I~xöÙí¼O¨Ékm.»£¼š£é(™.J#*3HL…Wj 8êñcÇÞS#~Ï?Ènÿð’hŸü}óS|b |xýžT6ý¾1Õ}¿æ{ŠôvC bØ#ÜÔíb¬ó?øZþ<Ëû<|IùúãÄš__øû¯4ø%ñ‹Ç-ñ»ãÁ‡à/ñV-żZiR.h‹­%ÈWfEYBÊ€H Šú^@]2¸SŽ~µç_ÜÇñïöˆ*£?ð™éG×ûË©ô EQñ{ÇŒ„Gû<|Kóÿ#ƒ“µóX?~2xí> øÝdýŸþ"Û¤ÞÔc’æ_èr%²5¬¥eK¢Ìª b@àf½œ±dàxôü+âí¸ÿ…%ãÑ´ÞÕ[=‡ú¿çð  >;xþO¾Xÿg‰wI†´Ø£º‡Äz%Ò%¬aeE{°Ê¬àÏ èÛãwÛ‰fŠ{s»ÄÞ#=ÿåóùWSðtnøðôìmÿðˆé#vì’>ÇAè+|Œ2lŒ1#ÓŠù?ö³øãã»ÏŠ¿ÅßÀˆ[Zx»QšÚÞç^Ñd}QÛE»F†Šèª2£4„ÈUJ¡– UáñcÆûðÿ³÷ÄQÁ!йçþ¾ûW{ûX€>)~ÎXÛ¸xãVžæ_¾:¡¹ÈïŸjóµø«ãŒGìÿñk|§"пù.¸oüy©|døêÖ|w|×(ÓÞêÞ-sGŽM)×GµEŠV{®Ìd2ÀœäW¿`„fcTsÅ`þÍ‹»ãí·oÍã],ßö²ë@#)|NÝ“óÂA eIÿ·¾8ªß °Ÿ< Y†O†´±o²Eß·ô­ß G!ØÛøàÏÓð “Èþ6~Ò-¾øÛð!ÇÀŸˆV³iþ*Ôna¶Ÿ[ÑžMUÛFºŒÅ GrUUŒ¤ÈTBÉú"~Ð>0W]Ÿ³çÄÜg‚ëžø–¦?ŽŸ³þ@aÿ ~¨îÃûó¯ã^”bß*í zðO§ÿ^¥s–?übìÆOÙïâaÈÎGˆtÓý.¸?´GŒ¡øÕñå“àOÄ ·¾ñV5żÞŒ’éNº5¤bZK®Ìвƒa‡AÚ ¨É#qÎ3‚=§5Â|Ëüký ÇŒ´¼íçþ`6| ««ûCøÃvGìïñ9ðp1âŸó÷\ÿÆ?ÚÆMðWÆègÿˆÖÂoj1=ÌÞ ÐÞ;T{i‘–;¢ÅTÄ('Œô¯E2"NŽYΩÅbüX!~ øíF†u2qØ}Ž^(Äüý Ó£Žâ-{DT¹UµVUWº ªàdÁä[OñçÆr!Ùû>üLVæ9'ò (¾!ÆŸ»ý›¾'ñÏüŒÞê}Ó;Wü&ý¢¼e£|zøø·ÿ>!Ü\_ø«Mž{h5ÝdÒt[HÖ)™îBÈ̪$2ˇAõ®ÕŠ .FÉbÐûWÏš4ÅiÏÚäx·IÂãþ _þº¾¿µŠºŸÙãâqÛÁψ´ßöùÅsßÿiÿ‚ž7†/ÙÿâEºÏáÍF .&ñ†éj­k"™Rì±U± p vÌ7’y$äáp¬{VÅmÇàÿŽÔ‘µ|1©ã1ö9zý=h‚ÿ~ ‚ÞÙû:|H»Ž i±Gqˆô$ŠíÖ0²¢½Ø`À0ÈÍt¯ñ›ÇÏ&?áœ>'€G 6Õ~QÛþ$ßç¨øaò±’2Hɽyïü-ÿOü3ÿÄ… ŒøH´þK®àw¾ x‡ãGÇi4¯€Þ;½kéÒÝ[ǯhñI¥Èº5¢,2³Ü…vdUËA}þ@.¼‘Œ1Ð~²ÿe§ÿ‹­ûFå°?á7Ò‹`pâAeþ*ÀüKŸ3öxøŠÛó‘ÿ &ƒÿÉuÏ|`ñ_Ĩ¾ øØÍðÇöз‡uyäñ‡$vÈmd #º.Ê ’B‚xà_M̂䷗Ÿ˜r@:þuƒñ}HøãþÂ:©ëcá;gà·€üÅ$Â/¥ç=¿Ñ"5³²*Œ÷úž}éXwgƒ|høýã4øÝðäøñ Ùì%ðÿ°ÿŸÏjÁø½ûBøâ/‚Þ4Aû9üKµY|;¨B÷3x‹Axí‘­¤FT»,Ê ä…:W¨òÑ¢Ÿƒ·$ôÍbüPSÿ Ç{·o ê}{bÒQÅ8?†ÌOÂ_Œé¤éÖU†èO¸{hÙbF{B̪bOœÖúþÇÞ'IÚ+â¡Îqÿï‡ö‘ÿ€*9Y¯:8ƒ'íû>‚YKxÃUÎGö å{Saƒ?¹Á¯ži?ٻŞø»ðãMøóñþkïj6Ð\\èz7~у-ã])}¿ä_²®7þ?¢„_ÚâÕ?áÐp?òSÔ× ð?Àl¾4üt¿üya$>)Ó’îx´-I59Gµe–`öÅQ• ÆaA $Ж¢nçבÌ ùqßœñú ÀøºWþwÄ …¿yáMY¸<Çœ¹ÁôÍyoü"ß<Ü7í ñ dá½ÿ’œf¹Ï‹þø?Á‰ÿhˆPÿÂ9¨Ë-¼ÞÑ#K•Ò–‰™-C(`%H yª$úàûløà†`¾Ò Ê œYú×A#ˆ$çuçù׎|ýŸü}À¿4´oÄËD›Ãzl±ÛÅáÍâ´FµŒ¬HÏh\…(,I8äšé¿á@øòO”~Ò¿Áÿȵáà?ôŽ€0j7üZýœFÒTøßUÈÇOø§ï«U% àE…~Qž¿á^OûL|ñÉøÃû?ý«ö‚ø‰¨¶¡âíJÞÞâ}EŠM&EÑnäiaXíB;2+FD—k’` uŸðÏž5FÀý¡¾&`wÿ„wAíÓ½&Rv:£*:1Œ«×gSŸ_J󆫿|vøþ|Ï•<_¥ž8'þ$V|þ•Ñ€3i‚§íñ$9áÝã¯ý:W›üýœ|_wñ»ãÂ?Lj§ø§N‚âê Fy57mÒEše{b¨Ê¬±PU ’M žÅ9±œŒŒ}å8ã5ñH"üñÎAR<3©°ù³É³–¤oٳŀ’ß´7ÄÒ:.øêïã¯Àˆî~Ð1ÿ¤•Æ~γ¯5ZããïÄM:M?źt6úŠòjnÚ-¤‹4Ë%©TeFX€Œ* ‘¸“JácÝ™‰ ûxÆ ÈàšÃø¼Ë/ÁçïÂ-ªœôég(Æ?­#þÌ>/d%ÿhߊaA1ðׇúv?ñçÓ­sß?f?ÀßJh¯‰·k†õ)žÚoh+Ê­¬ŒÑ³Gh+T• €x9¦#×¾Oÿ;áê³…Ï„ôŒçÿ8ô®‚1º!熞ã×¥|£ðIøgðOÀâ×ö€ñí¬x{Nhíãðö†ñÚ!µŒ¬jÏjXª‚$àrs]X|OyŸ´_Ä!éŸ h<ü¥ÌŠägOû[“'ÅÙЮ@8Õ@Èéÿý÷õ©¼Æ…C>{‘‚ÞþÝkþ/ø â¾;ü ³ñǯÞ}£ÅŠÚܾ£G.—"è×NÓB©lË"´dH䀽9g3ß´/ÄîFüSº Ï·üzzS½ÄÕŽˆ|3Ĥ„éŒÇ'·½`~Î2Åßý¡KŒã]+ 6ÿ‰ •!ý“à¿ÚOÚâ5ÒGáÝFI-æðþ†‘ܪÚÈLNÉjU€*Jyàƒ@îXø[8¼ †4ÀôHº×E¹c;|( 'Åú aœä óŠô³_›x.¨ÿ=+çoŠÿ|b¿¾!øã㻆»ñ>¡¼òèšBI¦:éNÓB©lFeVŒ‰ 9 ¯P@ÞXÎÑ•çàöæ°>+I‚ž:ó6–>Õpx'þ=%?*Æÿ…ãIºþпÈïÿîƒé“ÿ.•Ï|^øãdø5ãCÿ ûâ%ȇÚ„¯o7‡ôDK”²1‰™-C` ’¤Ìì>2§Áy§?ñLi`sÓý.~•º7GPÀdÉä¯ñ¯+øEð/ÆkðgÁN>>|B¶FðîŸ*[Å h²5´l±+=©baAbIÀÉ&º~øÖEÜ?h‰#<|= òzò>É@‹ºêý§?g–‰·#x·V ç¡þÁ½ÿúÙ”ÆÃržIs“ßšøÃâ×Áï迾IÇoÍqsâF+k‰ô=dÒœh×nÒÄ©lÙ‘Z2$  9 g½Q|1ñ-ÉÇíñ…øFôsÿn”ïS¶ÆaûÍ‚Iç§?¥|÷£€ÿ´×í Ÿé Ÿó³«ßðŠ|LgÄ_´OÄŒ¯?ò-h.{ôJóƒ|mâoŽ?¦½øññÖæÛÅZt70hZ3>ªÇF´uše{b¨ÊŒ±Q„‚I4ì‘ȲG’ƒ ÀR=GNµ‡ñ]•þ øè+(?ðŒjœŽIc—Œý}j#û8x¶8É_Úâa€Ïü#ºÆíÒ¹ïŒ?³‡‹—àϾ>üG¸X<;¨Êöòè"Gt«m#4nÉj©*AäE{ÿÂ<7ÀŸ‡ÍpAðŠi8þ¼áük{Y-6œ|Ç“ô¯ ø3ðoâ_ü cý¡þ%ÚG/‡4Ù#·‡Ãº ‘Û+ZÆË4–…™T ±'Ô×Lß~ ¡Pi‰íÆsÿׇøÏý¹õ  ?µKgâÇììxxÛUü#÷½}êü#8긇ö¯%ý¡~xçRøÓð ÿßo÷‹u(mî&дHäÒ¤]îFšŽÔ+³"´DH@r@È»¡û8øÁÂîý¡¾'íéÿ"æƒÇþJPI, +y„ª.Xã?ZÍý•÷Šÿ´Q BÿÂo¥g@>²éYƒöwñ’FÊhOŠŸø§t0?ëÒ¼Çà×ÈøéñêÛFøõãË?²ø§N[›ˆô-I5YF´uše’ت:£,ac ¤ $I ¯{ù›†zþŸ`|^ù~|BUwxSU<ãÎ\s^I‡¾%HX?íñ¦ä[Ð2}xû%`|`ð§Ä«‚ž57´Ä;˜¿áÔZX%ðö†‘Ü¢ÛHZ&dµ  ©*AÁàƒ@ÏÁäGø/à0Ù+ÿ¾–HÄ>Éoñ­Ó™k# >ö?ý]kÈ~üñÄ?<aøýñÖ9|9§J¶ðèÇj†Ú2"Rö¥Ê¨!AbIÇ'5ÑŸ‚Þ6qûCüLÆx?ðŽh=}¿Ñ($ÿÂðýŸ@-„ñ~¨û¿ó¼èk»Ž\B¡ØaÏbzã½x'Æož4¸øãð";¿?º’÷ÅZŒ0\Ë¡èÉ.–ë£Ý9–%K`®ÌŠÑ‘ a†$pkÓÀ_ò?á¡þ&}‡4 ž?ëÒ€;&̈UrSØþ5Ì~ÎèÏñƒö†T?ðši\Óþ$6UU¾øÌ??´/ijž2|; óÿ’•Å~Ï?¼qÆŸieñóâƒYx·N†ââßBÑd“TvÑm$Y¥Y-Š£*2ÆaW ²HÒ±€Êà …@Êäßù~‰ñ;çø7ã†b@>Ôþ\uÿD— ®^?‚~:.Aý£>((>¾ðù=¿ãÒ°¾,ü ñä¿üjÃö‰ø•rx{P’H%ðî„‘Ü*ÛHLLÉh©‚ {O©Š|ð)íÿ¾–Ço±Åþ·¢g!Tÿrùâ¼ûá7ÆŸÜüð7ü\ÄñøgM’OÚ#£-¬a••¤È ‚<æºø½àaƒÄ/‡Œy'%²ëþ³­y¿í€Á>&~ÎÍÏ8ÕHÝÏüË÷µYUU·vf+ë»ééþ5‹û]üeðS|NýŸ §Ž|r-›àW€BøûÀ0É…´¸ÝÄVi$n¶‘VV“ ‚ òÑŸŒ~]Å~"|<]Ýsâ[3ž;~ö€8ÚV#Æ?Ù·!BÿÂoªòyÀ¾äŠß D›—8뎃ú×~Ó¼~4~Îßgñׂg~2Õ&¹’zÖEµFÐoc #,„"—ePNX¦º„øµàœ±<ðÜ}Ñâ<þÌ  ùV%—Ê+Œ(éøWð<~:~Ñ…H$xÏJaøhUÐCñgÁp³ñï€w …ψ­>lúþö¼ûàgÆO¯ÇÚËãŸÁÏ‹tÉmä“\µD¸ŒhvhÍ3áÀue$‚ê(Ù¹RË e`'mÏ5ƒñsiø%ãÝ»r<-ªãÿÐ塾0x( Uñÿ€@a»Äv];ç÷•Ï|cø¿àˆþ øì/< +?†54#ñ£¼ŽÖ’ªª¨“,OÜÐ> ‚~Nóá}3·$}’.1Þ¶ü¶ŽFòˆPÍøp? à>ü^ð{üð0_ø!<9¦Fñ¿ˆ-ãeµŒei2¤A®‡þ¿‚Ê3ÇžfÛ•?ð‘Y’~§Í  OŠqyg²’þ1Õ $pö èíÒ½5AŽ<üÒH eÏo~•âþ0x->;|dñσdŽÛźœ—¹jÑ[#h—h­!ŠY•rØÉ u¯T›â߀¾>ð]¸Éñ-Ÿ_B<Ε2*&Ë‘n[†ã¨êx¬Ùxƒñƒöf ´xßJÛÀÿŠ~ǵDß|ªWþß‘Œÿ„†ÏÿBókö[øÍà„øÃûDùþ9ðDKwã=.[i'×­cKˆ×A²Fx˜É‡PêÊHÎ#¨Å p‘ïñá‰c‚ã0ø"oŽß´#7Ž|w^-Òæ¶’MrÙ#ºt;4f‹€êYI^uª$õ똉e©ÌI^Ã×ñ‰ñrB~ xó"ÿÂ-ªñ[9zç¥!øÁàœ|Þ9ð#¼“â;<ç<ËN>•ƒñã‚ ø%ãµ;ð<­7†u4T_´g•ÚÖPªª$$’H ËøQ#/Á¿lRÀxgLvÿH¹æ¶–O-X¾ ^q»©èx…pÿ >-x2Oƒ~ó¼qà¸Ù<7¦Ç$rk¶ªÑºÚÆe2dF<ŒVèø£àÅbG޼ à‘Ïöý¦ôeIºØÃø°øãð~ÕÇ‹õPpxCý‡{^&- fmÍÃôý+Åþ(üYðtþ3x×Â¿Šµ9.$MnÙÒÙ‹vŠÒ°rePN,S^”ÿüÿ1ñ߀È'€Ç/çJ>-øÕOü'Þ-ïâ;3è?yÁ®sâïÅÿÇð_Ç xïÀÒ™<5©¢$~ ´y$f´”*e‰$ Ö¤«š¿ aÝðWÀ†ÿáÒÆ1À?cŠ·¹BÄq˜989®á7ÅÜ|ð6ÿø!$ÃZdRFþ ´GÖÖ C)“*T‚8æ·¿ákx4³Ç¾fÎÿ„†Ïåçþºzwª æ¾3n¿gÒë‘ÿ –ªWœ–ØW¿•wi²`«0Æ yÆŸŒ ‹ãwÀ&‡Æ¾’;_êR\I¹m"[«h—hB$!»*‚p u5èâ߃“þ¯›þ*CŸ^<ÏNht‘–s½Tƒ‚?Jå~‚ß¿hm3ÿ ¦–UF?èeWÛâÏ‚ŒKxw9ñ ¦O ÿYé\gìýñwÁñ§ãû?Ž<l—^0Ó&å×-Q.£]Íãc ¡Ô©+œG­{˜ªß¾8b0 êzÓšçþ-Æà§Ú6bÂڮߛ°³—ŸÌšâÏ‚œ°>>ð†'Äv|äJÁøÍñ‡Á1üñÙ<ðD­/†uHÑ_´y&f´” $ËHœÐoðy¿¼ÌÂÚVÛìQtÿ=«x2ÜgÌêFzƒéšà>|eðLßü§Ç¾ŽH¼3¦Dé/ˆ-£e´ˆ2²™2¬ ƒÜWFß¼ÙÿŠÿÀ¦qâ;>¤óÿ-(‘øõó|pýœ×aSÿ ¦­Àÿ°/xÞÈZW!Ю2Ãxäþä_¾3ø>9~Ï5þЭ?޼w1Ó'µy5ÛTK”] Í FÍ&VRà GPhÜÞf3ep@OËÿX¬/ŠkŸƒþ:gÆG…õ1…ôIO5üZð&0ß<“Çü$–dçÛ÷µƒñkã'¡ø7〟< ÆO ê1¢'ˆlä’WkY L’N1Íeü)ø=àˆ¾ø1cðYßúl®òøzÑÚVkXÉfc$’I$ó“[Rü"ð\L¢_‡þ$äçþÛ1‘ßþYõ©þ|ß¼ ‘•ÿ„kLÆqŒý’?ÿUkïðT7 ŽœvûRäß¾ ø)ÿh_Ùíáð\iuâíRÒ= Ö8î£] ñÕ$@˜pU€là€zŠõöøMàeÉÿ„áöìü#v{Wò‹&¸/‰£?´Wìé¿—ÆZ°bæ_½¯_Œ´ð¨_c®Iëý:Óσ¾ +ÏÃÿ‡Ã ôðå—nç1q^àσþ µý£ÿhE‹Á x­|W¥Ço š%«Gl¡Ù»,JS ³1 ’OzúH£3Kç'Ýݼ3ÂX?´í•-éEzÐË­ ¨n\O…> hð|àpÃŒÂ;iÿÆëâßÂMðcÇ,¾ðDO‡56GAµÑ–ÒBH ‚Wv¯¿ªî$gƒŒ}kŸø¬?âËxì`•ÿ„_Säç#ý^MI­ŽÃàÏÁoÛ|ð™à»¿…´¹Yæðí£É+µ¤LY˜ÆKI$šèàÿ€‹ÃχªØÎ†ìùÿÈ]=éÿU¤øà €°ÿ„OJïÐýŠ*Û”Ÿ*!!20ÜðO­Qó×íoð{Á+ñCö}û|j—>2Ô¡¹HtT[”] òEIcÀuV Ùõ:ü'ðhqæx#ÀÀFO‡ìñœ÷]mþ×$ÿÂËýX’Hñ¾©×ÿ"ýïZm±=­·Ì úïëÞ€1$øSàôgUð7w)Æ@´}|º©û)|ðTÿhsàŸÏ¯ŒtØ Yô+gKhÛC³vHÁBK³1 Œ’Ozê‰ùC ääœ@öïUÿe Ãâoí #ûßðšéy9àĂ˚ô!ð‹À¾RïðÃÀùÚÇþË1Î?ëŸÒ¹¿Œ?¼?À߸ð€ãhü/ªI‘xzÑlå!ÕÄyR#5èPì ³³1\rN23ŽH¬‹‘øñ·rÞÕ€cèrÿ>(žø3ðcÀñüðüP™¤ð¾™$¯'‡íäv³ˆ–,cÉ$’I=I­Óð“ÁNIO‡þb9xjÏõýÕIð|0øàù0<)¤{‚,¢ÍtoX‚‡ “Œ`÷Íx߯‚þ—ö„ý| àxâ»ñŽ« Äqh6©Ôk Þ:¬ª#ÀuVÁÈÔW® ð/–IøyðùH8ÿ‘nÌçÿ!WñhŸøh_Ù¸ŽWþ]_ÿñO_t¯Væbý½ëõ=¨>ø æTá÷ÃüœŒ Y~Ÿº¯ž<=ðÁ6ß´Çí‹à´Vþ+Òã·…´+WKhÛC³vX”¦#RìÌ@ÆI'©¯©<ÝŸqQT}ÜŽ‡ëÞ¾~ÐÕá§¿hŒqÿ~’sŒÿÌ¿dzPÒü*ð\Oµ| à\²îñOYãÓŸÝþ5…ñsáƒÁ:ø#Àñù~ÔÞ7@µVG[YHuqT‚äîÄJŠé÷ˆÊ‘Œ“ÆOùíX?fy~ øð¿ÍŸ ê¼â?d—üçÞ€5>|"ðT_¼Àž’GðÆ™+´ž´w‘œLÌÌcÉbNr}ë¢ ¼y_ø‚G‡,ð=埭?á¿ñe|Uñám(zÿÇœY­…m§“€Ç¡'[À^è>VðõŸ~2?wëYÿ´?ÿgp§poj§éÿ ÞŸç½uAãx Ê™ôŒdú÷ ¤b„Þ V#þ“ŒàøzÏ8õÿW^]ð«àÿ‚ÇÇŸ¨|àé#·ñf™¼m¢Zº[FtKGe‰Ja±f!p $õ&½µ”C½|Ç ñ×Jó?… ÃãçÇñ0¾0Ò÷zq¡Yš›mð§Á·?€ü T£ÃÖxÿÑu…ñoáo‚dø5ã€| àˆåO êMÇ Ú¬±:ÚHC+,yRÐ×uçíR T`äšÃø£#‚ž8…Çü#›|½ÿÐæ “3á'ÂO§ÁŸ;xÁ2<7¦¼²KáûW’BmbfbLybNy<œÖäŸ ¼²±ðBäŒáë>G§ú®*O…ÁŸoß„ðÆ—Àíþ‰5ºåŠ—‘t9Ïå¾x.Úö~ˆø#ÁqÇsâÍQ.#DµDºŒhwŽ©*ˆÀpU€9ö¯`—á7ãɼ‘ßþË3øªÇ­yÿĆó?hoÙá›Æ·Oáÿ‰ èÅzææ‘€èpf O…/Â_1,<àG?ò.Yÿñºágσ>h´øÁSÅkã-.håÐm]-£m ÉÙ"S#RìÌ@Ç$žõësïé%€lÿNk†ýŸä ñÓößÉ7Ò@ãþeûÅuíðwÀá_g€~íφìÀþýW7ñƒàßçøã¶ð2/…µYQ“Ãö‰"2ÚJVDaT‚W¡Ÿßá“;YsŒýÑýkžøÀØøñ NÕ0Çœ½;þÁ|ø5àˆþøŸxW é#ÉáûG’fkH‹1cKI$šè$øGàx‰#À>9®<9g•ôÿ–}:þTß„NÀßå‰eð¾–G_øò‹šÝÿ2•9æ8ö øÿðsÁMñ»ö}xÁp Ÿêp\G‡k]ƺãªÈ¢0Cª¶€@=k¶„¾ Lð=Gü#֜׺¬¿,%øÑû;üÛ±ãMW$p1ý{ú…uÇ0 ŽÃ#õ'þªÆÿ…MàÀž'øG¬ú}|®½8¯;ø+ðwÁ‹ñ¿ö€Y<à¹E·‹tÈm£—Dµt¶C¡Ù»,JcÂÌXܓֽ„Æø}£øºŸ¦x¯>ø@3ñßö†ãþ-(`sŸøÙPJ>x.EñAx ˆã Ú{Ï:ç~/ü!ðYø-ãŒxÀñ:xkR‘$@´G–ÒR¬¬#Ê@ Ž˜®î9¼Â;‰Ïÿ Åø¸€üñá!|/©ç<ãýZóï„¿ <¿|çÀþ •äðæ›#¼š«³³ZÆY™Ìd’I9'Ö·Âße>ð #·ü#ö}9çý_?Ò—á@ÏÁÏìÉoøF´²NéÒ.¢¶]J:•<®[§úJEœ¹ðgÁrþÓ¿³ü3x'Á‚+Ÿê‰sh–«Ôk¡Þ:¤Šª¶#* }Á¯±~|?-‚Dzù}¿Õs^+ªiÿÙÔdž-Õ¹þ µôYf‚²vù€'¯8Í2^ç:ßü FáçÃÌŽyðÍ‘'®2<¿Çó…—ÂZþÓ¿´Cà¯46Þ)Ò£¶‰ôKVŠÙD´vX¦K³1 ݉ë_XdP"ù‡8õϯ§½|ßl¥ÿj/Úñf’ Æp?°lºP q’ü-ðq [ø'Á¸>³ÛÛ‘ûºÅø·ð—Á³|ñ© ðRü9©H²E Ú£Äëk#)R#È àär+· y„HªH8À?t׎ý+â~?áNxìÔùDz˒=);á/Â/Áo1ðG‚\·‡4Ö‘ßB´v–Fµˆ’Ìc$’NryÉ­ù¾x.|Áà/)ï»Ãöx§»¦ü$ù¾ x”œÂ/¥î‡úCó­–(òƒÈ$äèE&›øÛàï‚®¿iÙò?øB<±\ø³TŠæô;eŠéWC»uIG‡PʬÈÔWº7Áï<ðô†äá«.˜ëþ®¼³ÅÊö‘ýœÇuñ†®8àÿÈ÷œgüæ½Ê'W‰SaUžG#=¿5±/s >x¡ÝðÿáîÒ_ Ù _õUæ> ø/Ÿ´_™àO˧Œt¨­£—Aµxí‘´7d‰LxŒfb$ž¦½¥ÐüÞSl8Ú>l=kÎ> …ÿ…õûJè|k¤‘âž±ý)ˆêSàïÔ¸“áïÃíÝ¿á²ÁÿÈ\×?ñgà¿î¾ xäÿÂàüŸ êRFñøvÑ$‰Å¬Œ¬cʰ8 Ž•Þ¾ÔV ´œþ½b|Wˆ¯Áß–\áTç<ôIzPƒ|'øÿãFøIàÐß³ßÄk„ƒ@Óâ[„×ô4Žà-º"+Ý ÀyäVñøùãE_Ÿöxø”@ ‚|E ð?ð.µþÿ…A༖ <;¦þ?è±}+bp<´Äx‘†9àúNø .xoÆOÚ?ÅúoÇo€÷—Ÿ¾ Øÿgø¯Rž iuÍåÕôk¸ÚY.J£*1™ ‚¨@$+Óßö¸ñ3±ÏìïñOjàÿ €~Ÿkï\¿í>/|?á1Ôñ_ìÎ@®™QX…pß{©§ó¤RWÿ qâpƒÈýþ*mÎI"ÐNßñù^YðwâÿŽüoñãã¾£ |ñýâÝx«N’âÚ=sFŽm.EÑ­C1{ŽÎª²e àEz‰RÒ>gfÜ#íÛš“öEo/â?íO%¼o¥ã¯üH,©‡Ãª3¿á)ø•$Œdýþ"°c‚?á$Ð?òn¹ÏŒ>/øÁo?gψ6ÈÞÔb’âohrGkFTº,UFI ã€M}4 €y~NØ×?ñn |ø„ã¡ð¦¬'‘þ‡/4­`ægüý®|NŸ<~Ï¿nDÓa[ˆ5ý #»DµDŠtU€óÈÍtCöºñ3åá~(†íÿÏõ÷X_ ß?| ìÛá­3-ŒËœX&·JåÃJÄ*‚#§|~¢™'“þÑŸ´Œü=*£xOHÎ:6,áÿëÖùPÊÜvüǃßÖ,üyø÷ã¯|sýŸîµoÙÿâ%‰°ñf¥-µ¼úö‹$º«¾‰wC GtV6Tf”™ ®Ô Ä ôSûXx €áœþ*1€|dñ׌?h?Wº_À_]ý·Å:l—©®èÑË¥ºèÖ±ˆegºìÈ¢@c,¸‚¯n“s/ÈJí]Ì1Œœú çg%ücý¡Ì¤ø­4£2äeÆ(;þψxýßìõñ#ò¿ð’è?ù7\ÿƈ£ø3ã´üø…l’xwPYn%ñˆél†Ö@deK¢Ä*’HPI€M}cßP} ‚1ëõéX_þ,¯xBG…u_˜”ÿ¡KÅjÇ”üý¤ü^Ÿ¼«û>|H»K éÑ¥ÌZþ†‘\"ÛF«"«Ý€Ü@<€k ´w‹¢Bû;üQÇ¿ˆôOù{£á\CþÏm;¼3¥í$ò?Ñ"è+u¥Dm¤+66’FÜÿž´ñŽ´ŒuO–Ûà?ÄI¬|U©Omm>½£<š«¶v-ÉTeVi ª•B'½|_ñ× 'ìññ' 9ÄšÕÿéuKâKF¿¿g³0Õzô?ñ!¼ã¥z¬gËe8 …ÁêzæÜó¯ø[þ:?g‰?x¶áâ=>ßkãü+Ì>üRñæ¡ñÏã»ÛüñÝÛÏâ:K›xuÝ$ÒœhÖ¨±LÏrÙ,€ÆXp "¾••|„Ý"—#œœýH®à[ìøáûDœícã=(Ùÿ‰—åH71ÄoˆMÿŒyøŠª:gÄšçÿuÏü]øñƒ^73|ø‰n’x{QIneñ†élk iYRè³*‚[ Ààf½ô…ŽI>aÉP1³šÂø¹#IðWÇë0PáÕqŸO±ËÐS)ä¾2xîo‚Þ XþüC¸Ž/éñÅsˆ4DŽåE´adP÷A€`€8<ŠÞ?¼tWö|øUùÇü$z?ù7]wÂŒ/Á.ÖÚ|+¥ž9$ýŽ.ßÖ· æ"Ò›rA Ôû¡ “çO‹Ÿüi£üuø u}ð+Çö¿bñV£-½´šæŒòjŽÚ5Üm,—%Q‘¤&B£@$+Ôö›ña\¿ìóñ@pá!Ðõíwõ¬ÏÚ„Ÿgì€ñ–¦Îÿ‰ ïåÀ®Œ±Ù¶‚pOn8çÒ€(·í?₤Ã;üO F?äaÐyÿɺàþ~ÔÞ,´øÝñîUø ñîMKÅzmÄÖñkz2I¥:hÖ‘ˆ¦i.B»2 Ë ®9ȯN’/œ†Ï\(VÎ;×ðe÷üdý y)¿Åú_<öv¯ûTx¨m+û:üRÚ>AÿÇþNw®{ãíWâ×øã˜Gì÷ñ*ÙgðÞ£ O6¿¡I¢5¬Še`—Eʨ;ˆPIšìýåmêBœp~¢°¾*1oƒ>;o™±áLg=?Ðå  ¯ƒ?> ?ÁOy³ÏÄ‹¨àðæ\Eâ c¹EµVUW» ¡€ yäfºñ{ÇÌí+~Îó×'Äz_oôÊë~qðCÀ2þ}'ñc‹ðÿß‘RhÀ“9èAÿ{zÐËÿ´OÆÿØücø %÷À_éæËÅšŒöÖókÚ,’j’6wC Žèª2£4„ÈTmB$€zãñÿÅé°Iû>üJNïh_¯ú]l~Ô¸_ŠŸ³º e#ÆÚ `}°/zU¹"EiSËqëÓŠ•Î}ÿh4DÙ÷âX$[þ ÿ}ë‡øñcǺïÆO7GÀoj&ëÅ:l—0E¯hÑɥȺ=¢,2´—!]™Ê e€ äW¬´È6Ž øR~É(âWíò—Ç´°3ÔÿĂ˟ë@5b1ãï‰%g_‰+Îr.ø‹7Á¯¼> ]F¾Ó’)âñ†‰r‚Ú0²ª½ÐuV 0‘œè'ñ?Äi“iýž¾!ŒžƒÄšÿëÔ~1OþBsá=+'Ð}Ž.@ï[ªûó@)ÉÍž:ýhϘ<{ñKÇþý¢þ]j?|} Zø§S’ÒѵÝåÕdmé].JFÊ…¤&B „ Ä ÷cûCøé—ömø§ëøI|?òûôÊÉøÊ<¿Úöq 1êÙíø§ï«Ó„‚hÕ”&ðèßNÔâ?á ¼v!sÿ ÛñSs“óÂKáàÃéþ™^à_ˆÿü]ûE|{ºÓ¾øöv¹ñ>˜÷V«¯hÉ6“*èÖˆ±LÍrÙ,€ÆXmp >­2n+U'žqÖ¼ëà¦æøíûImn?á5ÒNsÿRõ—¯Zâ·ñ(É—ýž~!69çĺO×ý/¥sÿ¼IñÓàçZãöñõœ-áÝA$¸“Ä:$‘ÚÆmd !Tº,UA$…à}:à 7¤A¯ ×?ñü)?ˆOò‘ÿ¦¬Àç6RœqÖÝž7ðwÆ®¾ øÇû=üD»<;§$wx‹BHî£[XÂÈŠ÷aÕXa€`ÐüKT*Ÿ³¯Ä€¬Ä¨%Ð8õÿ—ºõïƒÛdøðñ’ÞÒxF,âäzý+¢·AYOâúçÚ•‚ìøïãůx3ã×À;ÿ|øgöOj/onúþ,º´¢ÝÆa‰’ä¬l¨Í!2]¨@$+Õ›ö¯ñIÿ›sø  î|GáÿÇéu?íh©ÅÙ×jŒê¹ÁÀÏü#÷Ý=»ÔØYc^å9ã·¯§4›¶…F<Ú²šþÕž(cŸøg_Šd°ã>#ðÿÿ&WŸ~Ïÿ´oµŽ_®4ÿ€/šÿÅÚlóÛC¯h‘É¥:h¶‘¬34—A$fUYŒ²íp =(…Š63e¹ÈÛÈ_ üë/öb\ü[ý¡Áé|ž1ÿ .hNá(¤ãñÿLJƒû7|S#qâ_tÿÀÊç¾0||ñä_½{ßêÁ,Ú&ަ:è÷R4±,vÁ]™U£"@ˆ$pk©ÿ…3ã98oŸ·µáí ÿ‘xúRܤìvã!xØ9ù~ñÇ_åOý‘¤Sñ/ö‰Þ?á7ÒÀÏaýe\9ø-ã`~#GxBÝŸOøõ®köoøYãÍ?â¿ÇeÓ><ø÷N¾*Ó⸚ F–MVFÑí]f”IlUP¬`F€‘œ’l Üû³Ç›·pÀ'§¸ÿë×=ñäø#ñx O„õR;ÿË”µækà?‰–_øh¯‰!¶äøF´ÿ¶•Ï|dø}ñ‚Þ7þпîàOj2Io?‡t8Ò嬅£vKPê¬2¤©ž¦+2ÿÂŒƒžù[Ãa`ëÒ.õ·13`ªˆÆÁ?€9íõ¯.øIðSÆ«ðoÁYøõñ Ò)ü=§Í¼zŠÑÛ©¶Œˆ•žÔ± 0bI’ksþÇŒ•ˆ¾#¸_hGÿçÒøà¸ý gâB‰ź®êyÖ½ˆÄÍ ¼ÉŒ Ï5òïŃ4‹ã·ÀÏø¾ž=¸–ëÄúŒ0]K¡èé&–Ë£ÝHÒÄ©lÙ‘LdHB¹ ¯W? |xßö‡ø’~¾Ð9Èéÿ”é›SQb1ÅyçÁËñÏöˆåñã-(`ÌË5Y>xñ°ö‡ø’ çoü#šßþ==«Ï>üñÏü.Ÿ%~<øþÒk/éÐÜO…£I&­#hÖŽ³J²[FUeˆ‚ $Ðú:M²H>áù»ž8ïX2> xûx>ÕA# ô9}kœàߎÏÜý¢>%à·þ)Íןùs®âïÁ_Íð[Ç'Çÿˆ×Q§‡5d·›@ÐÖ;¤[Y Ù-CÀJ@<Ð;Ÿ@üeÿ…ðäqáM$œGú]?m³vΜ€s€OrGá_,üѾ%Û|ðJÅûA|@µ‰ü;§´6ÐøwCt·CmXÕ¤µ,UA p99®„éßcá¿hˆÀùtOþs@Ž›ö±;¾,þÎa‡/ã}TdœÿÌ÷¿j´«€€bBÃnsÏÚ¼Gâ§Âÿˆ><øÿðOñÇŸÝ ŸêKkrÚºT‹£]»M ¥°WfEhÈ0É {ý“üWäçþ/â™LG‡<>1ÿ’y  GsâGÜ3ÔÁ®oös“â÷í ³†>5ұܟøYt­†ý•üUÈÿ†Žø¦TÇðþêMŸ½xŸÃÿ…;ð?íñâÃEøñãÛskâ5..†…£I.©#hÖ®%™^Ø¢2£,`F€‘’M&4®Ï©ÄŠ€`Ço'=—éX¿œMðGÇ̤ø_Ví´ô9x÷¯(_ üGÜßñŸîáÐH'Ó?e®{âÿ„þ"Ü|ñ§ñóÇ·0¯‡u d·“ÃÚ$qܨ¶´LRÔ0V©“‚8£˜¾Fz†Xþ øŠœŸ é¤3ôH¿nÛOö”Sd3íס?ι¿‚ÿ²GŠOÁ/È?hO‰ÖÉqá½6t·‹ÃúÛ#ZÆÂ$g´,UAÚ Ç“]ü2?ŠF7~ÑŽO$xoÃço×ýŠfgñ¿³Ø'q>/ÕHùqÏö è¯TIÎb;ŒgÓ¹éí^'ñ»öSñm‡ÇÇïˆ×o¨x³Rµ‚êm FI4§MîS4*–¡]™ÆD€W$@5ê'öeñŽàíñM÷`cþ¿óŸûs  ÂËÎÒce;KdÇÿÕ\?À©Ôüqý¢Ô|¡¼e¥rÃ?ó²5ºÿ³_ŒsƒûG|Us· ð߇Îîzô:òß‚Ÿ³—m¾;þÐEñÿâ5›iÞ,Ó`¸¹ƒAÑd—U‘ô[IY•íJFÊŽ±U*€I$ƒZù窩UÜpsÅ`|]‡Á_* 𾫹éöI±ŸçY‹ðÆÂ"íñD…ãÃz§ýyô®sã?ìñãoøR7øh‰W+†µžÞoèIÊ-¬…¢vK@À0¤Ìt¿ YGÁTð¶–sús‹[Þqx•f<)ÈoïÆqéŒþUä~øÕ¾ x&Eý ~"Û$žÓ¤ŽÞ/hrGl­kÕžÔ±±$€3“]üñ¹á¡þ%FüSšüÇÙ(&Æ_íø½û>„'Æz™'ŸøÞñÏùæºxbÞêÚG*çßšòŽÿükqñŸà4Süwø¨ÿj0[\Ë¡èÉ.˜ë£]ÈÓB±ÛveVŒ‰(H×yìõãÇûBüM'nxðö‚3ÿ’è}ãóL%K¸9Ǧ?ã~ Êás|~À>0Ó7gþÀ6|~u£ÿ óââq'íñ3Žsÿö‚9ú›NÕÄüýœ<[?ÆoŽë/ÇoˆV-§x¯N¶¸ž F’]QÛFµ‘e™d¶*ŒªË…T3“@Ì’«© x8è7_±>+Œ|ñÈaÏü"úžq×þ=%Áó§Ã3x°³y¿´?ÄáÀÏüSšqÿ€ŸçŠçþ1~Í0o‚>7”~Юã·ðî¥,°M hqÇp«k#4NÉjU€*Jpx Эü!™Wàw€ [o…t¢qÏc‹¿¿ô­ÇPNåŒnÉÈ-ëŠòσ³¿ÇÀÿ?ü4_ÄËEŸÃZlÉo‡´ŠÕ ¬l±«IhXª‚$9=k¤“ötñ¸ ŸÚOâ–ÖøkÃùü?Ðè”ý©?áiþÏ8%‡ü&Ú§ãÿ Ú¼²ÆîP1ÉÇÝ#éšóŸÚ»ö}ñ¥ŸÅO€~Çïˆz©½ñv¡om=Ƈ¢Æú\‹£]ÈÓD±Zª»2+FD—k’ Ò?üdËÇÇ߉žþйú²zÐ4ìv,¥”ˆÎñ÷úd“õ¥ý’˜·ÄßÚNwô¼äãŸì #Œú×ßÇgʇ;—žƒµb|a@>üAfÊíð¦¬0?òç.3ޏ¯#ÿ„sâ@ÀÚ'â -ëá­§þW=ñ‹ÂŸî~ xÛí´Ä+˜‡‡µ’Ú_èh—(¶²Ú;PÁXd¤6.ŒöOƒóþ ü?Ü'šW~ãÊ*èR%ãÌ$‘¸‘Æî¾xø=ð÷â"|ðGÙþ?üA·‰¼;§I¼^ÐÝ-ÚÆV4gµ,ÁA 7H$šßÿ„â"’?á¡þ#ð3ÿ"æƒÏþJS$ê>1aÿhÙ¼…Âi« äÈ¿}Ï5é’¤pÛ$œç¶3ÔþuòGÅÿ‡^?½øëð#Îøóãë¹§ñV£µÌÚšT‹£]»M%°Wf@Ñ‘ eÚä¸=L|=øˆùvý¢þ%mäøo@çŸè”ì&a²ª€{º:`Û½yßÁSÿßöÁÿ„×I “ž?á±êa‡¿d<~Ñ?; è?•¥yïÀ„ßãoǶã笥·ñf›ÕÄ:#ê²6hë,«%±TeFXÀŒ*€‘œšú :rªÎƒÓÙ®ãSðCÇØ “á=[‚sŸô)zâ¸8þ|B’ßðÑ?ëƒá­§¨ÿC¬Œß |}/Á_ ?hoˆ÷qÇá½FI-¤ðî…]"ÛHZ7d´ ªÃ*JFx"ÙžéðhÿÅ‹øy¿ÿ„KI ±À?èpÖóL ·øˆ€}¿|ŸðwLøŸÁGíãëhO‡4öH"ðî‡$vˆm£+3Ú–` € Hœ×D¶¿Àùhˆ„ŸñLè<~d GSû[ÿ Cöt £þGSþåûßþ½?Ë]§AÈËäW†|ið7Äükøk¬üyñÝïÚ ÝÄšûIžÑ;„îZ6dµ  ‚TƒÏ4ù‘Ÿ+=áŠ*ü#ðI+ÞÒÔéÖ>1ýkf]«1)–ï€IÿÕ\G¯Œ—á‚ü'~ŒÇáÝ:9üAh¯ XÁWS ‚¡­´ø±à´î>ðNäx’ÏŸü‰Ö˜Ž7ö’¿Å¯Ùó, êŽ1Ïö ï5¶#è2 óžß«‚ý£¾0x2O‹ßŒ4ðlËoã NK‡‡\¶‘m£mñäa&#RÌî@êkxüPðz”Tñǰ$~Ð.ïånº…¤ ÁÈݓߓšæ>|ßh-ܰñ–—€2°¬ù«­ñCÁª„Eãàçñ §‡ýerŸ³÷ÆÇñƒãÓø1ãźlÖí.·m\¢è–‘³FÆ@R¹v ksÚ€bU¤v=zô> VÅdàß‚ŒðƦxbåÎ^ýéámø(§ËãßôèµÂü$ø­àÏøSž óoÔ׉üVø»àÈ~;|uñ¯ƒäK_jRNé­Ú¼vÈÚ%Ú‘ƒá»*‚ÝÈêâ¿‚¤”ñôãÄV€€=üÏ¥ná`ˆ™Lg5Ã| ühý¡ü²JÿÂe¥uÏüHlºÖãüWðI9_ø’9?ðÙ㯼œ~Á| øÃà£ñ»ãÿŸã—>/Ó&¶’]rÚ4ºEÐìÑž6i0à2²’22 jóCÄ62cYÉ#ç¹ÿ‹Nà·[î«x_TÜ3œŸ±ËíC|Wð+3ƒãßÜ:xŽË,=ÖûVÅ ‹àŸŽÿâ»ð$¬ÞÔã„Eâ Ig6’…TQ&I$ãdÐ…’ø-àe_âðƘNÖ‘ÛUÉXdŒF}2k‚øGñgÁ¯ð{Á¼qà¸Ú? i±ÿÈW˺÷ÆÛ~ÒŸ³ä’øßÁ’Ckâ½RYå]nÔ¥²6‡v¤a&K°PN2X¦¾†_Œ~Ù²oˆ_ØÿØËeýeçñ ‰:˜¸;@\g¿å_7D1ûP~ÐÁ±Ç‹tœñÇü€l«Ü[ãvŸ>ä ø©l€ù¥|Û¥ü`ð]ßí5û@Jž6ðjÃwâ)íå}nØGt‹¢Z#’ø@‹ÿ 7áðÞ~o i<Ûœ'zÞG;³"nàsŸcë\ÁÏ^¸øà_x#…ô¸¥Ž_Ù¤‘°´‰YYZ\‚ ƒÈ5пÆ_6Â>"|=à|¿ñRYd ôÿ[Íhrœ·Ç,Ã@þÍAA Ù Âã?æ yoÂ?ðÐ?´™Ür|k¤/8ÿŠ~Æ»SñÀ»oćÁ}á%³Î:gýmy?Á¯Œþ?´í¿Ç~ ‚+ÏiS[I/ˆ-Q.Qt+$gŒ˜u¬¤‚FAF(Ù¶’ØFxÇ®}½«Ÿø¸åþü@Æ jÄxÿ)iíñÀûSgü¤œx’Ë'ÿ"rkšøÍñ“À±üø€#ñÿÍðÆ©qGâ GyY­% ª¢L–$€ëšgÂaðSÀerHðÆ”q“ÿ>q Þ·÷n9@ÎÃjà~ü^ðdŸüøJxgKI#Ú$±2ÚDX2¤FJÞOŠþ M£þ¿í<Þ"³>ÙÇ™õ g1ñµ˜|pýž‹¿ñYêØÔ÷Ö»¸¾æÖÁR:æ¼ãÆ/ÇÙûgü*Zø»S–w]µ‘-Pèwˆ­# E.Ê ±,Zôø­à˜Øù~=ð®?⡳ÉÇ8?¼ Fì¸D[ø1íë\Ÿìösñ§öŒãþgM+ƒÿ` .:â¯?ÅÏ^;ð †ù˜ŸYõÇ?òÓÞ¸ßÙßã/‚ÆÚÍñ¿‚aK¯é“[4Úí¬qÝFºœe£c&C«)+œGj÷ Šíæ)*W –Ï<ó×é\ÿÅíÿð¤>"lám[ƒÿ^rÔ‘ü]ð?Vøƒà~ö1<ø’ÌsÿhÎ?kµÿ‹£û9±M»¼oª;ãþûßÖœÎÍ,› À88Ís_µÏÆMñSöyû7Ž<p¶¾3Ôæ¸huÛYRÚ3¡^FVYE.Ê ¶$AWâ·‚ð øïÀß)¯ÙüÜóÿ-(c£áÙ† Ý€y® àè/ñ«ãúÇ‘Ÿi]8ÇüH¬ÿ*è¤ø­à×ROŽ| \¶GüTV™¤þò¼÷àïÅÉñ³ãÏ›ã_·>,Ó$äÖí£Žé‰hŒÑ±“+) "“بn{´UÙÊáyÁö¬/Š·Áª'þ­L’zÙÍÎ)ƒâŸƒ ;¼qà‘žãÄcÿ×JÆø¹ñ_ÁP|ñÎ|oà™e—Ãz”q¢kö®ò3ZÈUD™$“€RjM®t_ X¯Áù$nÿ„gKÞû YÅþN+y_v©ãÇLg­p_ þ-ø1þ ø>:ð4F? é©"I¯Z$ŠÂÒ5*ÀÉApAë[ËñcÁhÿ'| [þ+ON?å§éVs˜œ¿ÇŸÙô¹ ¯‹õPŸú€Þâ½&q–vc€ØíŽõâ¿>/x2?ŽÿÞx1ã¶ñ^¥%Ä‘kv®–èÚ%ÜjÒ°|"—ePO:šôïøZž i3'<Øÿ‘†ÌzuýïÖ€7I!È}à“¸õ=½EqßÉñ·ö†QóÿÅe¥ïÿ.kTüSð^2ž<ð>ã⡳"³=ºãÌã8®{âÏÆ/Eð?ÇŠ¾:ð;I'†u8£Š/Z»HÆÖP(“$’@zÐUÌ/…aOÁß2o`|3¦wÇ"Ò1þ~†·>UVef`làÿœŽ•Ã|&ø§àé¾x$Iã£ÅáÍ5Y]µG‰–Ö0U“ ƒÁf·SâƒÜ~óÇÉ;|Chïå~6Mß´ìú ÿÂ[ªç×þ@Wœ*ö#!vs Çbp:W€xóâ÷ƒaý ¾È,ø'%¿á:𠜯ü$6|ôÿ¦•ܸìmÊÍÏ ÎHéÐבx‰ý ?hˆr|[¥g#8ÿ‰ Ÿç^†ÿ|í½|wà5 vñž=y^AðïâøýñòCã_ÇÏŠ´É wÖ­‘.QtKDgˆ—ÀeeÈÈHíB=.,$¹3…9êr8õæ²þ'a¾øÌó¹|=© ‚H?è²wïPCñOÁâ@á<ð7þƒö€Ÿ¯ï9¬Ÿ‰ÿü>xÄÿÂkà†fðö¡$zõ«´ŒÖÒª™$’0;“@¯ƒ^ Oƒ~ à_ÈíáÝ:I%Z33XÙ™™£%‰=úÖéøEàÿ'€ü\ñøGm1ùùTÿ…²™>ø%ebü#šnL²EÅmI&FÔ,~l‚~¹jÌÏ ý¥>x-¾-|û7‚¼n—^1Ô œC¢[GÌcC»uYTG‡PÊ­†ÈÔVê|+ðkFÌž ðCqÛ@´íÿ<òëOý¤/ÅŸÙï• |g©äqÿ+ßê+Yw ànRF Ïõ ¨˜ð¯Á¤6ßø!¶ãxzÓtç÷|ÖìëðÁ¿ð·¾=ùþ ðUÂÛø¿L†›D¶t¶FÑ-–%)„Rı±=k¹VgÞ¤˜#c~ÎD‹?´bärÒ×·#û Γخ§iÿ §Ár6æð€)éÿõŸ#õÏÖ°~.ü ðT¿|uÿ'átðÆ¥$lš¢I­¤¥YXG• ŒäwÝ”Pʤ]ã‘ÀöÏ5…ñg ðWǪ6€¾ÔÀéÎ^ÿBæ¿ >x1>x'w‚|òKáÍ1ËÉ¡Z³;5¬e™‰Œ–bI$žI­Åø_àÐIÿ„ÀûTu>´äÿß¾üS¾ oƒ-Ào éœqÏú$]?•nSË áÔŒ†˜ûV†G™øÿáƒfý þ¨ð_ƒ;Ÿjqܤz-²Çr‹¢]¸Y&U`yö¯`—á'‚Àžvÿ„rÐþêûמxáÀøýû>2çŸjÇž£:ç_Zö;` "Ú3€Ý¹úÐü*Oì$ø Àlz‚|=d=Ï—Ò¹¿Ù£à¯‚Æ?Ú KàO\-§4»{t›Bµ’;hÛB²vX•£Äj]™°0 $÷¯A1…ÎòUzc Õû2ø¼´Ëø®4 0yÿ‘zǿր;³ðwÀ¥ÀO‡ÿH♳Ç|y\×9ñ«àÇ_àoÄ€<‘ø[T–&ÃÖi$L¶’•ue ‚äu¯AKˆÎ| üòN~ÿ®sé\ÿÆ|ø†ÈB¨ðž­ïÿ.r÷í@Kð{á'‚bø#à3ÿ'æ’O i’I#ø~ÖIšÒ"Y‰,ÄžIçœ×AÂ_´™oü?ÁlÿõŸËíþ®™ð—÷üÊÇ…´ž1޶qqÖ·óæåœàäÿúûД|Yø7à‡ý ÿgµÁ Hî<[©Çqzª¥ÔcB¼‘VU€êU€ Œ€zŠõµøEàlÃßÈ ðå˜÷ÿžUÂüMOÚöv1oøLµmÀžŸñ ½Æ?N+ÕãˆÄF€îäÀÇCמÝh þx!—þD‡ÝÏü‹V(úùuå¿> ø´2Íีñ~—´RèVϪ6…få#S¥Ø± €I'½{y•QÈsœ•†FON™é^gð‡÷¿h² î>4ÒFâ¹Æ|?e@øCà¨Wæð€ ,´Üùe\ÿÆ_ƒž“àOü ~‰Óä‘Kh-¤…YXF €r:q]ü‘£0±ÝžÝy㎹÷®wâÒð?ÇÛÏÝð¦ª@'ËÓë@¾ üð$_<Çáÿ€¤ð¶—$’Káë7y¬â,Îæ<’I$Ÿzèà÷”+?Ãχ„±ãÃ6\{ªý)ÿ­Ìß>°< ég?èQd|f·¤aÛwd3ùŸÄÐο¶Á¿/Ä¿Ùå­< à›e¼ñž¥ ÂÁ¡ZÅÌk¡^:¤¡cÀê¬àQQ¯Â߉8ðGA$YóÇýsè+¦ý±Áoˆÿ³°ì ãUqœÿÌ¿{ϵUÜDѨ,qÁ%$ûÿõª$i ŒVøWà·LÛøÀ„üH-þýןüøGáñ£ãʯƒ<*Ûø¯MŽÝD¶‘-c:%£•‰JŠ]™ˆ’zšõ±ÔÞÛ ¨ëê õ®àôCþíåœÅ]¥àßûÌÑKc£O„þ f!üàQßþEëO˜{~ï¥`üWøOàÙ~øÕ—Àþ ‰—ú”ˆé¡Z£!²•eaA5Ü Êr[fXñž}¬oŠòHŽ;êq\Dº%²¥Ê.‰váeQ¡ÕXµ{gü*O±Çü+ï(ÿÂ;gŒÿ³ûªó?hŸÙø>åð—j¹ãùÞtÅ{nýÇb–QÂç‚HõöúÐ=ÿ Á/pâ‚ð#ª¯‡,ÇN¼yuÉ~Îü¿ÿha/|8¶ñž— ºM¡Zɬm¡Y»$A£Â)v,@À$“Ô×§•Ê~Íñ¬ßhðË’{`þî—á Fø!à/58ÿ„_J<.åÎóšÞ‰†í® RwuÎ=?ÿ*ñ?Ú+àï‚áq~ÏÍgàB—^/ÔṎ= Ö4¹EÐï$Š#E¡€aŒ¨=Etíð«Á$+?¼N5|vø3ÁòÇoâ½68RMÙÖÙE´r±)L(.ÌØ\d’z׫œÆ‘ùˆ Ðï\?Á¤Ýñ§ãÚ•RŸð–éžÃþ@v}©!Èè_ágƒ Ü< àƒ•è<=iÏS˜ëâ×Â_·ÁßcÁ> FOj2FÑè6©$l¶²e"<«Ú»} °Ë`w“\ʱþ+¡à׎I7ü#Z˜ÈnúŸALß ¾ø.?‚þÇ‚< +ÍáÍ2Wy4+Vy]­c,ĘòÌNNOS[Cág‚Ññ/< ÎG>´ÏÓý]'ÂÄ2|ð©ëá/©ÀÚE[î¨ ûÎʽ°’ÓÅz„ÖðO­èò>©!Ñî‘¡…£¹+*³HL…FŒ’@=Aø¡ã˜Îfø ñœ ‚S“È8ëŽõÏ~Ï [ãír"Ð#¸ÇÚú×;ñsã7ãø+ãaÿ ýñÕ%ðî£ÜMâ H­‘­¤GTº,ÁA,B‚N8½‹wœA%•qÆ;ëô¬?‹#gÁ/ÈÿŠ[Už9û¼bŸ*3æg|#ø—ãÛƒ> ò¾üAºŠ?éè—kú"%Ê-´`Hîƒ(` À"ºñ/Ç`©ÿ†~ø‰òöÿ„Bÿäºí¾+‚^òˆ|1¦ c9Íœ_­nd±=ÈÉsJãå>rø¥ñ‡Ç_Çwß|wnÖž'Ô$·µ}sG’MQÛGºFŠK’¨ÊŒÒ!Q… +ÕÇÇ–'þóâYàÂC œoôº§ñ••~8~Ï­ï›Æ:£gÏüHoyÅw0æicù—©<ƒôïM)ÈŸž3 ƒû<üLÁç#ÄZÃwÏú]r³_íã[OŒŸZßàÄ;÷¿ñn=ÄúöšS®‹i†f’è+³"‰FXp ^ºŒ#CtË×¯çšæg¯“ãí|i¥e@ëÿ .ôÂÇJ¿´‡ø-û7üR;p|Káï—ÿ'+šøÏûGøÔ|ñÚŸÙÛâ]ªÏá½F).¥ñƒ$VÈÖ²#ª]–* ’B‚įR™„¼*Œß1îÇÓùW;ñeƒ|ø‚PÇÂÚ¨lçô9i\,y?Áï>8›à¯‚#àÄk„‡ÃÚlIqˆtDŽåÚ0$E{ Ê¬`Î tCãöŸ+öwø”ƒ'þf=¯×íuÒü#Ú~ xÌÇ>Ò”{±Åë[b2U¨ËéÒ™'Ïÿþ7xäüøçà/í¦³ñV¥5µ¬Úö$š£¶v ,—%ceFi ªá8ì#ã?ö³Äüã/‰|=ùôÊÉøŒþ#öuòÉpfëžù®sââøQŸZ@ >ÕÆzð,åþ´äŸÿi¯¾þßâuÚEá­6î ñƒWH¶±ªÈŠ÷a€`€<ò®Œ~Ó0W ~Έë“â_¿ù9Rü•cø'ðü•Ÿ iX9ä¡EŒë]„*eU'§'Ôš ²>wý«h럾Ŀ>!écâýFæÚ wFy5IF»¢…¢º*Œ¨Í!2]¨@$+KþŽ7 üøŒÜcÄZ?[ºéÿh• ñwöxò”ŒxÏTý€ok¥6‚f Øäûæ¥î4y¼¿¼u,dÙûâ1;Iþ- ŸOµWðÆ?üKñƒã¤š?À¯^™üU§=ÔkºÅ-Q'Ê_ >.øÛþçƒL?> \ªxOŽ;ˆõíc¸U¶Œ ^ä0Vv3È­ù>,xåO?þ#Ýü$=:ÿÇÕtŸ ¤eø/à]»r|5¦G_ôH¿Öüm7 V –!xÇÓÿÕ@㋞:´À“ÀÏGqkâ]Jk[G×4w›RvÑî£1DésµUšBd*¤!ä€}Ñ>'|D ?ã>%7b‰<>r?ºçuÏù9ÏÙà·ËŸjÜ`qÿ εô"]<ªùc+Ï=}»Ð7Äà§ìãñ/çþ*_ÿòey§ÀïÚ7Æžøçñù/¾|Eº¸½ñn›ssoo®è©&’ë¢ÚF±LÏtÙ•VPc,¡\w+ê á6Ç.Bàî :ç¿ùõ¯ ðs(ý¤?hÍãké?_ùYõ¨\þÔž-2³—Å2·ü$~ÆzÿÏç½sŸjOŸ‚~:†?Ùçâm¢Ïá½J'¹“ÄÇl¯k i]Rì¹U’€p3]¦ý¬pW‘Ôqø Äø°T|ñëÆ>ÕþJKúÐ5ðgãW$ø'àìóñî(ü7§CÄ~!Ж+¤[XÂÊŠ÷a•XÀ0ž@5Ð?Æ/ÈTÙßâi8Èlj4}ÿãòºï„_‚ž*ÿŠWJÜ@>ÇzÜ ä#Ü1 ^|Ëû@üdñå÷ÆŸ€¨ÿ> YOkâ­F[kiõÝäÕ¤mí Q4w%•¤&B«„ p+»âÄÏü3ÇÄ}Ä`“â]úW[_Â÷ýNíàøÏUê1ø§ïO§Jôr‹¿– dƒÏn£Ò€Ÿ%Õ´Zér ÕV)YîB»2Ë®ä_Zµ¾M£jp tü?é^Uð»s~Ð?´HC·þ++?/þ$](v9£ãÿˆ #öø‹&ÜŒè8ÿÒ¾µƒñgÇÞ?ƒà×Ñþxþäðö£·ëú#%²µ´¥`—EЍ$ ’ÆkÞ¼ÅÄ…À瑌_çɬ_‹£þ,§ŽÈbwxcTtÿ—9yééJÈ|ìæ>~Öž*ƒà§ãÙóâeÀ‡Ãšl1ψ4$ŠåVÖ5YQ^ì:« Œ€k¢ö°ñJ³ý>*6î§þ?ÿòeeü(ø/àF;€ÒÛœsþ‰ª0’nUžÄçhϧõ¦I䟴ïíã?|]ø i§|øƒaqeâÍBâÞÞç]ÑõV:5Üm MÑTeV2!Qµ±ºX¼Cñ&vþÏŸY{ƒâMù‹º»ã4ÛûFþÏA‹dx¿U •ôÐ/zWµïýè?2–Áý±I«I£Á¤×¾$H¸OÙïâ! uÿ„“AÊþ?k¯6øGñ DZ|nøä²| ñÅÌòø£NšêÞ-oGI4·Eª¬R³Ü…vdUË® äWØ*>R@ üÙÇ­y÷~дYút•à‘ýƒeBV“g;įÍìýñ ¯øB8õñõÞ°>,üKñü8ç‹^Ñ;…Ñ"+ÝPàn€#=­ÃñÇÆ9;gïˆë…ähGOøûéZß ÇÁÏH`<3¥äû›H‡ºàª2;s· riX.Ï øÍñwÇ^ øÛð2ÞËàWŽínmüS¨Íkm6»£³ênt{¥1BÉrUP´„ÈTmBÉú@Õ~'HÄ·ìõñ ¶?èdÐr§uc[ÚGövÀÂ]ª:cþ$µïŠÉ‹%Hœmç¯Ò˜žÿ´¾'"ß³ßÄRKnÈñ&ƒ’}ÿÒý+Í~|Mñæ™ñÃã”sü ñÕÍÌÞ(Óå¹·‡]ÑÕô·=ª,R³Ü„vd 1–8ä_hÛ C'ïg w5á^R?iÚ'aÁÿ„¿J=zÿĆËúÆOŠþ:ˈÿgïˆÜõψ´#´úÿÇßáX?~,øê/„ž0Gø ñÝ[A¾I'—_Ñ;e6ò#*]* ’@ñÀ¯aù¥‚à2s»I÷÷ÍeüI_ø´3äœøwS#›I9 á¨|#ðYãþE½4ãþÝcüë_'Í;ž)…üœúþUç? ¿g¯ƒ¾x¿h/ˆöûô >D·‹@ÐÙ-•­£"5gµ,B‚IàdÖó~Ï^4†OÚâvIÇÐ3ô0Õ0qÓþ$Wµ×$ùå+¹ÂzËë^Yñoöjñv¥ñßà%µçÇŸˆ—GQñV¥2èZ2K¥:h·r4ЬvÁ$fUhˆ2€ä€z¸ý‘|LçŸÚ/⢜nÀðÞ‘ÿ’~Õ-\¥$„E0Bvä ýîxë\ÇìþYþ.þÐrdŸø¬ô¼ƒÿ`+.Mtíû"ø•!Éý¢þ)€xñOxžÿóç^sðö^ñ}¯Ç_ÖöŸ~"Ù7Åšu¼÷0èZ,’j®ú-¤«,ë%©TeVUÚ€X“BV O™Üq»yÚâN0;có¬ŠÏ·à¿”ãðŒê¸8Çc–“þ›ÆL¥OíñH†ê§Ã~äûÿ¡×5ñögñ™ø#ã‰Sö„ø›r°xoR•í§ðö„‘\ªZÈZ&d´€ • àðEQ™©ð™±ð_À>6ÿÂ/¥ò}>Éç[ì»à Š|®nzcéŠòƒß¼mÁ¿íøûñÒ9|9§ËèÇj­mXÔ½©bª±'’Moƒ>7ÆöƒøÞçÃÚ ÿÀJ†h†ügñ|ÿgàìA_êƒßþ@7µÝÁ ™né€3ŸZðωßüg«~Э.~<|@¹{ÿê0Ás&‡£G&–ë£]Èe…RØ#³"´dHr@ܯa_ÙwŨ™ÿ†‹ø¢¸ÎsáßçÿHúU-‰nÆ«\¿9 ¹;†sž ç?gic“ã/ívà7Œô®?»ÿ .}êó~Ë~++ûEüQÁù³ÿç‡Î=ÿãμÃàŸÀi_>?[X|}ø‡fl*ÀøDõPTõ?èrž~•Ë‚ž?0þÑ¿”ô*<9 uöÿC®oã'ÁO·Áo³~Ðî–/ êËo/‡´4ŽíÖRÑ;% p¤‚‚( ÏÂGð¤ü¹Ž…t ÃþÇùâ¶Ô,WÌM§œãƒ^cðoö}ñ¹øà‰í ñ&Ù%ðæ4vðø{Bt¶Fµ–4/jXªƒ´$àrMtGözñ›»ö‹øžHÿÈ· döéö>h$ƒâVÑûBþΘè|a«PâAzzW®,Û0¿t†Ë Žãÿ­_3ü_ýžWí%ñL¶sòøgÃøúÿÇyWÁ_ƒ_t¯Ÿ´6?þ!ÙÉgâÍ6;«˜´ IugmÒA4Êö¥‘c0£jFâM}S1/•ŸäRw×${VÆ «ð#â‡ð–¬sœ…ÿC–¼óþ—ÄiWöø—ƒÎO†¼?òÿ䟥sŸ¾|DŸàwŽK~Ñîã‹Ãš”’ZÏáÍ #¹Eµ´lÉh+T• €x"€;„D‚‹8Lø[JÛÿ€pæ·Zex\œtÇ\x÷Áÿ¾7O‚~?ðПíR_i²Åm‡t9#µFµŒ¬hÒZ–ePB‚Äœ’Mt‰ðCÇM¿gíñ1Šÿ2Öéÿ^9 »™¿´+yŸ?g|áâ´ÕŽŸò½é]"¼ð«È>:üñ½çÇ€p]|zøƒz×Þ+Ô¢‚yt-%Òtk¹X–;`®ìŠc"@ˇ$Ø#ÐGìåâ×€;þÐÿ ê<; Ïsþ‰íI«Šö:©qµ|ÂFsÏN?Æ ý’`ÇÅOÚ5dRÊ;ü’Çã÷Ä;©ï|W©[Au>…¢¤šK.‹w#M ¥¨I‘LdH@r@ܯP ~"ÿË?Ú7âOLóá¿€²u a2h@\܃^á9?ã%hpã—ñŽ“Î2F4.Õ«'Ã?ˆªNßÚ;âYPH?ñMxù}޼ßà?ìßã_|sý fÔ>>üEµ›Oñ^›mqsm¡h¯&¬í¢ÚH³L²Z•FUeŒ‚ $ЯÉ/š1 ÿhý{ÖÅCÿKÇža@c𾨯ú$½Iõ­û*x±•YhïŠaqÆ<9áüoøó®oã7ì­âôø%ã©Gí ñ>è[xoRí§ðö…W(–²Ù-Àm%H8'ï>:¯Àÿdá—ÂÚN1ÿ^qVÚËæŽxÎWžÿPzW”üýüsÀß¿ü4OÄ»D¸ðæ$pEáÝ HíQ­ceí PB‚Äž9$×Kìñãs ÙûHüP‚N|7áà}2Ðþ´ñ¥¾<þÎb?»ÿ ¦¬OýK÷¿zOºl)Á*“Øtÿ?ZðOŽ_³—Ž?á}~ÏÐ\|ø‰w.¡âÝJ [‰´9t§]îFšŽÔ+³*´dHä¸^¢ÿ³‡bÿ›‘ø¨IïÿׇòòN€:¿(E-†SsÛМW•ü.hÚ#Ìê|c¤žü€,«§³—„d¯íñTñÐøoÃØý,ÿJñï…?³Ïm~?|}„||ø…nl|W¦Cqw…¢¼º¬£ZH²Ê¯lQQ–0# ¥P hÝ÷ŠìåY—}O_OAX_Ü‚þ>eÈð‹j™ÈÏ[9sÏ¿¥fIû=øÐîÿŒ‰ø˜vãðÞ€N;-+›øÅû?xÖo‚Þ9aûB|IºH<;¨Ë-¼ÞÐÒ+…KiÄì–”0r¤hkáCø/à}¸çÃ:Yò-"­ÍÈ0á—©9ÏÓµxßÂO…8<éñïâªKáý:HíâÐtWKe6Ñ•YíK € N9=ëu¾xå‹ü{ø‰œóŸèYÉúZþ4½ãhŠþѳÈcœø¿UÀî?âA{šöXä ÊpÛ·ž}±_#øïᎮ?h/+'Ç_O=߉õ(­®_DÑÖM-×Gºv–K`ŽY£"@ÃH€5íðâl'íñ3ÞÐ1ìãÏõ ObªåD{·ã xöÿ>Õãß¶·í ûDù™aÿ Ž“Çqÿ .ŸáZ-ð›ÇáX7íñ1KÔµ óö>+Ì>ü ñ½ÇÇ/»¾<øþÞ[é°\ÝC¡hÏ.ªí£Z:Ë*½±TeFX€Œ(!A ’M{¨ÁÎä¨ÂœöôÍa|T9ø-ãÝùÜÞÕ7däöIqYßðÏþ4 6þÐÿ:<;áþ1ÏO²W7ñ‹à?áJxá›ö‚øs>Ôe{y¼=¡ÇÊ­¬ŒÑ3%¨` ¤©pA v6¾ÈíðkÁí ÿΘ£<øô‹§¿ZÜVo( ¼nü*ç¾ þÈÞ)“à‡äÚâm¢ÜxoNž;ht â¶Vµ„HÏhXª‚,I㓚è£ý‘|LWäý¢¾*g9?ñNøŸü” G3â ûIþÏ# âÝ[8ÿ‰ áëþz׿4›ÑC År>ð9ÿëÿ:ù‡ã'ìµâýöýŸÿ³þ>üDº—Qñf§mou6…¢¬ºK®‹w+M ¥¨I‘2$ ¡\G¯‰ñìˆ6þÒF@Éo x{ÿÀ:ï²Ó2lg;I㎟•xwƒ°iÚhSÿ†•Œôã@²ë] ø ãषí'ñOŽäZð÷#Ûý¼‡à÷ìÑãSö€øþ.þ?üDµ—Oñf™m=Ô:Šòj¬ú-¤‹4Êö¥#dVU! ’IõR€G–ÚHVþÎ{uþ•“ñ0cá/<¼ÔO^Oú$µ0ý–üX#b?hߊÛQ¹ÿŠo@ÈÿÉ>µñoöXñü)ßKÿ ñ2ä[ø{Q™­æðþ„‘Ü*ÛHÆ7d´ T• óÁ @øc ?< ª cá38çè‘óþ}+]fû;€¬IÆr¿wž?Nk†øOñ—Á2|ðF|yàEhü9¦Æë'ˆmH™mc2™Œ•µ/Åßá‘<àãÄvDz~óƒAW2~#üß´_ìà ¯Œõn¼cþ)ûßñ¯bòÖ2[i|9íéï_<|OøÕà‹Ú/öyøN|ñZø»T–âHõëWŽÖ6Я^FavUÉ @êkÙápxºüAøvŒgþ[<ýÖñ@™Ðˆð6ܸÏLß'ßÚ¼Ïà®OíûI…!ü&úGç?ðXñ]cüaðýψ_‘ÈÏ&²À?÷÷¸¯.ø%ñ«Àó|~ý£KøëÁ¥ßŒ´©­¤—^´Ž;´]Éâc&C«)# #¨ G´Ê›Hsœ×ñ¬ŒaŸàÄ]Ê„µQ´ús›·jY~/ø+ñ À œ¿ð’Yt>âZç¾3|eð4~ ñ÷€ä3x_TTDñ›É#µœªªŠ²rÄñÀ9 wá5ºÉð[À»È!ü+¥gßý/Ëé[m7ævݼ`ý+„ø=ñ{Á‹ðkÀ£þo/—á1'×íRHä[HÁ ¦@AƒÒ·ÿákø4ðþ=ð)žˆ,ðß_ÞVf—3ün¸ý£g\œã\‘žŸñ ½ŠöÀ»P¼Ûõǵ|ããÿŒ^·ý£?gÉÆÞ 1[x³TšâE×mdŽÕ[C¼Œ<¬¯„R̪ ÆI©¯p‹ã¡9>“‚0|IgN?{V¶"[›¢"é’ß/`T03ÇaÅy?ÂÂOí ûGyCñ¦‘È?ò/ØÿZîâÿ׃ñáùãåω,ý?ë¥y/Â?Œ¾—öý¢ øçÁ·¾/Òæ¶’MvÕ#¹t+4f‹áÔ:²–‚;Së¦\çÍ ¼ñ׃×òí\÷ÅÉ—þ·|¼äøWU‡ØåÏáOO‹~ oñ÷€Š‘“ÿ™Éè?å¯5Îü_øµà˜¾ xðÂyàY% ê‘Ç~ ´w‘šÒPªª$É' ;šì>sð?áï$nð¶”>î@ÿB‹óçúÖð |¸È#o§3ühð<_´ìêÑxïÁ iã V{©c×m]-Ñ´ÈÕåa&K²¨,z:šõUø»àu‰±ñáêƒÛþK"?ômtNë,íæ¼.ðÓ¾ò_…jWö‡ý£š?—5Ò$gñOÙ îãÊa¾!øò Ä–G·ýt¯%ø=ñ§Á/ûBþÐî'úûÿž•‡ñ€ƒðOǾXwOøE5\±þÅ-6O‹¾I9ñï€0’«âK>ÿö×½`|cøÅàx~xð[øûÀ³yÞÔÑcÄ6Žò;ZJUD™$’­l|#¾ø œŸðŠi@ç©ÿC‹€+y7 2§’IÆlzõÅp¾/xãà‡€÷xïÀ‘ˆ´¸¤Wñ ¢øzvã“âK3õÿ–´È~Ъ¿ðºfòͼêÅ›<Ÿø§ïzšìZ&Æ8RIÉ·¯?ç½yGíñŸÀÿð»ÿgsŽ|*ÛxËTšêHµÛW[dm ö5yXHBìª ÀÉ­véñwÁ ÿ ÷€'Ùä_õ´¼èC2¬¸eädƒœw>õËþÎ*GÆÚC Ïÿ¾“‘Çý Ö\Õ¶ø³à+0ñ¯Oø¨ìŽOýü®KöløÓàø]´H“Ç^nüe¥Ëo$úíªGsèVq³ÄÍ&C«)+žAA z1ŒuS†Úp9Î:b¹ÿŒ²ŸøQ?—-´xGV'î‘e/ùüi£ãä9ŸâÃâAÄögþþþµÏ|iøËà8¾xü/|òIá}R8ã‹ÄVnÒ;YÊB‰2Ä’ÇS@_ÛÁ‡jû•„ô¸9$ýŠ.ÕÐàH¤G¼ú Øÿ­^}ðSã7&øà/ø¯ü ±øcJÒOÚFñºÚDYL™ ÆJèÅß³–_ˆ?TŽ™ñ%—>ŸòÒ€9ïŒRý ¿f²yðšêÀáqø§¯ºçéÖ½<óX–bØå±Œý=+¾3üeð@øýû8–ñߦK_ê“\Ë¿k"Û#h7¨¯+ 1—eP[’S^®¿ü¹Ùñ áñïÿ#5Ÿ{É@M¶áHù—’GVÏ<Šñ߆kÚ/ö‚ãM#)$ÿÅ?bq^ˆ~2x–ÇćŒ[''Ķ~ÿô×­xÏÂߌþ›ö‡ý¢]|uà¸â»ñ~•-¼®Ú¤wQ®…dŒñ±“¡Õ”•èAEz±«¸RG#ßãXÿ$ÏÁOo‘|-ª€@éþ‡/õü-¯?ñ_øevàx’ÏßÊÁøÁñwÁ1|ñàOxÚO jqÇ^ ´w‘ÚÒU ª$Ë1$É gá‚gà×™€eÿ„cK<»›X¿ZÚ™L¬ï¹qŸÎ¸Ÿ„¿|ÿü²øßÁ1˜ü9¦Æñɮګ£‹XÃ+)“ ‚1ê1[oñ[Á¨Ÿ»ñׂ2üT™#ÓýeQñ’ ý¡¿g¾Vñf©¹Çý€o {R"ņLs×'¯|~•ó¯~/x*/Úà’xÓÁ·Šõ9n-nØÇl¢]¢´Œ„R̪ pI¾+ÛÅÏà·ü,‡ä¶ãÄvd}?ÖPç–W;[(z«6O½yÿÁLŽ¿´n?èsÒÈÿ©~Ëü+¤‹¾„~sʯü$VyQèH’¼ÛàÆO·Ç/Ú ÉãŸF·>0Òå¶–]vÕ#¸A¡Y£!›Ÿ éJ@>¶pò8­âVq¸Æ@=sïøWŸüøÓàY~øIãÿFñøWJ’OÙ¤‘ȶqFV“*A ô5Ò?Æ?,> |= p@ÿ„–Ì‚>žoãA'%ñÃãçìØA ŸjüÿRõ÷JôW/#;Fá…À xÇÇŸ>‹ãßìäWÇ~ –;_j³ÝË¿jñÛ#h7¨FYE.Ê ¶X ô¿ø\¾G?ñp~mõ'³ãÿ"ý(xFnŒŸ*çŒg*}ÁükÍ>  ?´®Ò|kðC|~ý¢ËxëÀñ­ÏŒ´¹­žm~Ö8îc]Éãc&$Õ—+À Ž¢€=´‘ÛÓ®9éþ~µ…ñQ–o‚þ;<ø¥u%žŸd—~•øÇàq"ø‡ððÈÿŠ–ÏÓþºs\ÿÅ¿ŒÞà¿öøÿÀR;øoS?Z;ÈÍk UU|Ä“Œš¡ð›à×¢ø3àuOøÝü7¦ÈòKáûFi­c,ÌÆ<’I''¯5¼~ø!Ùžø~™]ÿò.YŸý¥Þ¦øY»þ·vxgL#+“²EÞ¶¤,ÒœmÛ“ŽOÏë@7ñoàÏî?hOÙÕWÀ¾Hn¼e«CqZ ªEt‹¡^:¤ª#ÄŠU€9€=EzìŸ< ´øyð÷=GüSVC>˜Ì]=ë‰ø´1ûCþÍóã]_'×þ)ëîkÕâ aLŸ”±ÎXûæ€9Ù>xdÙÿ óáñl€qá›.^žV x†~ ø.×ö”ý ã¶ð7‚Ú;_iiohV®–Ѷ…f챩¥Ù˜…e‰êkéû—Ìl:ðqœŒvãÖ¼ à?í5ûD†;â¯Òz ‘ÿ ,b€,„¾ ‡9ð/(ÜÙðõŸéû¿óÍ`ü]øOàÇø-ãcÿ'ahü7©H’C Z£Fëi)R¬ ‚ÈéÅwQÀW$•ã$žkâÌ{~ øØ‚7ÿÂ1©†äsþ‡/Aô sáÂo§Á¿‰<à© žÓ]¤“A´’IÚÆY˜˜òI$’IÎktü+ð`eXü àVÜsχm±òèøB£þ÷‚…;ü3¥äd‚OÙ"çÐVìŒ7ÁÝ׿8žUñ;à÷‚çøýðáðtQ]ø·S†â8ô[UK¤]íÕeQ¡•XQšõÁðwÁ$®ïøçè?á´Ïþ‹ýkƒø’v|{ýžØñn«Ž8Çö ïOƽf)Œ[·Ë.yþë×¥0OÂO6ïø·þã#Ödƒß*¼‡áŸÂÇñÿãè> ð[ÃoâÍ2;xåÑ--‘´KGeLxE.Ű0 $õ5ïqò7K€¨0zç“^OðÚc'íûB”<·‹t¬°Gö Ÿ#ó¡nh…Þ Lð/y=O‡m2?òãX>x2Oƒ~81øÁñøkR’7MÑd‰–ÖRYS ‚t®ðÿ« §…Ï'¯_þµbüW>gÁ—a<1ªž˜Áû$¿¥"Žçà×ÁÛüð|à&i¼1¥É+¿‡m$–VkH™™‹G–$žI<æºðƒÀ±p~|=U÷ðÕ™ÁúyY©~ ÊàÃàÌ  i ¹'ýÞh •g¹üi|ëûZ|ðT_¿g£kàoÛ­×58n- Ö(î£] ñÕeUŒPê­ƒ¨«gá?‚Á`Þð+ŽG‡m?/õ}x­¯ÚçjüUý©E_jœc’á½ý)g…ÊúdàþMdÿÂ¥ðYO“À¾aŒ<;gÿÆúÕOÙ'àÇÿák~Ðÿoð?‚n#²ñž™ 6…k"[FÚ›²D2fl.I=MtAŽ÷ 8ˆ÷íMý’‡ÄÿÚ,F6ÿÅo¥gžŸñ ± D_ƒÞ Tü>øxŽXxjÈŽzc÷UÏ|jø/à7øãÕÿ…à‘|+ªË±xzÍ$F[IJ²° ‚‚+ÐJªιÂñ’}íÓ9¬‹Ã?þ •)ðž¯Ë7,~Ç.N? ñ„_|ÁO–ð7æ‘ü7¦Hò>ƒhÒHZÖ"ÌÌc%˜’I'žõ¾Ÿ |™ ¾ð)G‡mÏýû£á#ø+à@+á},ó×þ<âÈäõ­ÅòÔrw9îêxè0?y¿Œ~ x"ÚSö|Œø#ÁqÅuâÝVˆ“C¶Hî•t;ÇT‘DxuªØaÁõ¯{¼ ‹ó|;ø{‘ÙðÝ—ù ¼—Äîdý¦¿gmûŽïêüŸû^ãúW¾BFÜX’ ê~*çÿáMx¨+ðóáö0xÿ„jÌóúåúW™|ø%àEøûûGïð/‚fŠËÆZTVñÉ ÚȖѶƒdì‘+FB)v,BàIêkÛ^T$D±ä0`¯×ò¯6øJþд¶Í„ÿÂo¤wÿ©zÆ€:ð{À®Ü|>øz á»<äúçé\÷ƃ>¸øãâ¿ü Gá}RXåÖ‘¼L¶’•*Â<†G5èRBÒήJã$žOóÅsßÙ×àwÄ1!V á=Yˆ#?c›§¡  øGð“ÁIð_Àâox!ÞO 鲳ɠZ³ÈÍkbÌc%‰'$žy5¼¿ ü ÝàO_ø§­n™ò¨øMÿ$SÀA6çþm,ž0x´‹ÿ¯[Ò2FͰ…ÂŽ¾Ôä_~x)~:üXüàÄKŸjQ\G‰l‰r‹¢^H«*¬`2‡U`8 µéëð‹ÁLø ºù,ÁçþÙó\—Å…1üwýŸflx¿Tl÷Ïö áþµè›<Îe(>SÓwùæ€2[á‚G1øÀN[;â³ÿlºó^]ð§à÷ƒ#øéñ킼émâÍ2+hßDµt¶FÑ-’51Š]™°¼d“Œ×´Çlѹóyù½Œãß±¯7øRøøçû@î;â°Ò€Ç_ùÙóIìT76ßáOƒÇü ~ œsáëLŸlyYÎkâßÂÉð_Ç-¼‹ÃZœˆé Z+£­¬„0`™RÈ"»·AЪä0OôõÍ`üWãà×c#Âú›_ô9sÅAµŽ—àßÁïÅð7À[¼à9d—Âúd’<ž´gfkHË3±,Äœ’{×J¿¼ &Ý¿¾n‡þ»3ü…Lø@B| ø{æ øE4¬x'ìquÅoÀ¾l$.~C…Q·=«CœðOÚ[àÏ‚WãìòÀÞ ·[¯jpܬZ¬QÜ¢èW’*J«Þ¡ÕX‘ tƒá7‚Èð'S#€Þ³ÇþŠæ“ö•bßÿgPO+ã}TŽ?ä_½ÿ è"IÛ¸Ž 8ç8ì~¿Ê€0áQø,†Vðà¶G‡lÿ+­y§ÂO„ _Ž•üà¹ÓÅzdvé.‡lÑ[#h–ŽË”Â)v-…’N2kÙ&É\¶A FGù°T Ùsÿ«Šø¼Gü4'ìß…`ÆÚ¹=âž¾çŠõO,”RÛAÇG_\úÐ#ü!ð.BŸ‡¿óŽâš³ôÿž\}+Íþüð:||ý£„Þð<ÑÚxÓK†Ù&Ðm^;TmÉÊD­©vf!qËÞ½™Ý‹qó(^ `{šóï€àÿÃ@þÒ`â¸Ò1Ç_ø§lzÐSÁÿ;®ï‡¿Š’?á²$ä.kãOÁoËð3ÇÙð€‘ÓÂú¤‘ɇm#’7[IX2²ÇA‚9Þ¢l ¡zg‘ß&¹ÿ‹$Çð3â8?ò*jʼnõû´ó¯Â¯ƒÞ ?| Ÿø*F›Ãzl’ÊÚ£HìÖ±±ff%‰ÉÉë[çág‚Õ•[ÁrÄp|?iÎ}Ätß…%GÁ¯osá­0ð?éÒ/ʶsµÀ¯Ê~VëéÖ€8mOàï‚nÿi¿Ùõá ð_“wâ­V+ˆ—DµT¹EÐîÝVD ‡PáXέ} ¿¼€¿ð®¾±Àû¾³çÿ!ñõ¯¹O/öžýRþ-Õ±‘‚âA{Ö¾ŠM¡³º3¾zôëÚ€0ÏÁï3áßÃæn1ÿÍ–>‡÷]kË>üð4_´íÀ¾’+Oé0[Å&k$v¨Ú “²D­©ff!z’ORkÜYÕrWûÝøÜOL ó/ƒþ2ö’©ÿŠÛHÉ?ö/Xäs@,¿| ·-ðóáøÉƆ¬¾™ÿUX_> xþ øà?Ãÿ#¯†µ7ŽHü;gÆëi#VåH EwŒØ”¬[œd ñþ&±¾*HàÏp-ÿ¾¨p1Œ}’Q@Uð‡âïÄ+¿‚þ û9üJ¸Hü=§F—x—AŽ;•[dUvC Áä ß?~"þ»âx œcÄÞý?Ó+¾øQq³à¿€ÕUY¿áÒþ§ý<í[JŒÌ8\ù±Æøó@.üjøÓãÝ3ãïìû-×ì÷ñÉìü[©Ëmk6¿¢É.«#h·hÐÄÑÝFDf™ ©@$«ÉñçÇŒ¹_ٯ⒟Qâ_wúÞsÅ/ÇØÇü/Ù«z²gÆú±ÆyçÃ×ßç5è0¢´Xp3ÊzŽ=*óÏø^¾<^Sökø£ÏPHmÿhOÚD äxÓIïÓþ)û.h–_üH “û<üGÆwa¼G ý»®{ã'Žþ"Að[ÆþgìýñÖðæ£Ï7ˆtGŽÕÚ@Ò¸K¢ÌHPN¾Œpw*7 `~ =þ•…ñuŠ| ø„’²’<-ªç û¼{P€|"øÁã™þ ø/oÀ/ˆwQ§‡tèâ¸_Ñ.mc "+Ý€ @<€k{þ玟¼ýŸ~#ïÆ?äbÐGéÿuÕü&P¿üÄ/>ÒÇŸøó‹šÙóEÂEÚÀ`ñ÷³‘‘AV>}ø±ñ§ÆößþÏ/ÀŸZIgâF[{yu½åÕ$:5Ôf(™.J£*3HL…FÔ «Éñ߯ÅI_ÙßâhÀÆGˆôþKýk?ãïøçû<à¡aãPaF9þÁ¼ö5ßÅ&ò‡8<‘éøÐ&q£ãŸ Ü¿³¿Ä¬vÿŠ‹@ç×þ^ýkÌ>üOñæ½ñ¿ã¼ÚÀ^ý«Å:t—6ñëº|C¶þÍF9.%ñ†ñÛ+[HWTº,UA$…ðqšú"GS"#ž~½« ã ø!ñFN|)ªŒóÉû¼R°îÎgà§ÇOËð3À@~Î_/ i±Åsˆôã¹EµVTY.Ã*°€`85ÑÇñ¿Çÿ1_ٯ♠I øŸÃÜŸü ⺄«ÿáÛF ?ðŠi sùr‹?Sí[Ì|ÙCmÁ+ŽT‚}yÔÄ|¯ûT|eñþ«ñkà ~Ïÿ´Ù­<[¨Íko>¿¢Ë&«!ÑnÑ¡…£º*Œ¨Í!2R¨@;ˆ½Œ~"‚qû;üG õÄzãô¿ZïhÎ>8þÍÛ76ßêç#ù—¯¿úÕ×E <ŠÇqeo_óÒ€üD¼¸¿ñfuq®»£#énº5¤k Í%ÐWfUYŒ²…p _MÎCŸ›çO\þëļ(|¿ÚCöƒÚüÚPàçþ`6~´ÕËûaxžWUoÙÓâ˜aÀLj|>ÿÉÊçþ2þ×¾(›àwŽ!‡ö{øj—>Ôa{‰üA¡ 6ÿ¾"\¬~Ó¢Iá×ô4ŽåVÖ5Y=ÐuV0 Áä èOÅßñæ~ÏÔ–Äz~Ÿñ÷Ítÿ ã2|ð>á”ÒÁI?c‹ôþU¸à–d$ u=±Þ€<Çÿ|m§~Ðß'“à/Ä(d³ñN§=­œšöŒòjŽÚ5Üm ,—%•¥&B „ Ä ÷QûDøãÌþ³â—=â¥ððÿÛÊãþ" OÚ'öwU ƒã Xñÿ` Ïþ½zù;Š‘´©v÷${~|Ðh¿îÀý›~)ñÇüŒ¾ãÓþ_+Í~|~ñíÏÇ_ÚKOÙóâ5óê-Óf¹¶ƒ_Ñ#—JuÑ-#Xgi.‚»2¢Ê e†AW»ˆbÉfç;ºœ×#û:ì_Ž_´Žó÷|q¤ãä^±Z´¿|~û5üSqâoù9\ׯ¿Ž~>‹à_Ž÷þÎ_-#›ÃZœR\Mâ=ã¶Fµ4¬ì»*‚X…àp3Å{Z¦ùí\ýÞ8‡©ÿ ÁøÄ¥¾|B$‚§Âš¹ž,æÀ Ÿ>øËâU×ÁOÙ÷âÌKáÍ6(®"ñ†‘Ý"ÛG¶TWº ªÃæ€  t‰â¿‰#¯ìíñ‚;ø“@ùþשü ÿ>ã|#¥nÆr?Т?…o°Lû–#ùñßµ|}ñ×âoÄüjøs¬|ñý™¶ñV£%µ¼ºî$š¤£Ý£E GrUQšBÒR€I WzŸ¼dªæÙóâS+sóx‹AÈ<ÓßS]?í^»>,~ÎÙ^OŽ5C’pþ$½*ehà/#?ÀŸˆ ‰³>Õò8äýŽSG*;Ÿâ­FâÞÖ}{Fy5Wmî6ŠŽèª2£4„ÈT„I»6øÇãÆ‹ö}ø’¤qÿ#Ï~Ÿk§üeÏü/oÙè„Êê˜Çø^f½@@ . H^ןz.ÂÇœ'ÅïÆ¡—ö{ø•œdÿÅE àúŸøû¯1øGñ§Æíñ¿ã£'À¿ÝK{â}:[‹xµÍ$Óhö¨"•žä+³"¬€ÆY@p >” ŽwyRzãô¯2øXÇþïíCñ†—Ô cû Ï­;‰«ßã^$øñ#åéŸèXç¿ü}ÖÅÏ>7Oƒ^5Y¾|B·ŽOê=ÄÚþˆñÛ+[H Œ©tX…± p ¯\X–ÆI-:÷÷¬O‹#gÁOU¼-ªrãý\g.|C¸øàhãý¾#ÝŇ4Ø’æ/h)Ò-¬adE{°Ê¬0À0g tcâÇÄ6rßðÍßÇ~|MáüŸ¯úewŸA_?˜løSH“ßìqsÆ·ãEW^In9ê éøÐË?~5|@²øõû>Iyû>üC´{OjsZZɯè¯.«#h—‘´0´wE#dFiI¨!’õh¾:ü@‰p?fïŠ[±ñ7‡úûÿ¦S¾;&~;~ÍK ,GŽ5p;cþ)ëïZô6_0þôžS ½}èÎGÇmÁý›~)ãvî|D ¾#Ð}=îþµë_ÂŽð* Â+¤äuý.8®ƒahö®W’_;=° ”¼qñ?â„¿h€wz—À_Ã%§Š5'¶µ}{F’]RFÑ®‘¡…’ä¢2¡i ¨!±½åh’?ã~)g ÿŠ—ÃØü¾ÙYŸ?ÇÙÄ ò:êÇ$`ø§ï»W¡ª„‰¹ÚìztÜ8ý(®qÿðÑ6hñ'ìÝñLžI?ð’ø{?úY^að#öñÜßÿh)­¿g²_x»L¸¹µƒ^Ñ#›I‘4KHÖšK ŽÌвƒe à>RQ€lãéµ½¿Jྂÿ¿hÐä|Þ6Ò2}3áûh\o<'ŸÙ·â’ã qâ_ þW•Ïü_øûãÅø-ãEÿ†pø•k¾Ô"’â_h.–êÖÒ)‘Õ.Ë ’B‚p2kØ€ÄEP†Á‚y§ëX_gÁŸ†ãÕ8ƒþ‰-/|.“üä·Ì|1¥g¯üùÅ[Îá•ÝȈäôä׋ü øãø¾ ø¯íñ6Ýfðî,vÐøs@xíQ­c"5g´,UA H“]|ø"dþÒŸ™TäÅ3ááŸü“ þ?¿¿fÒþ8ÕŽàÿÅ=}Óò®úfÎÝØ žþŸ_~µó—Çÿž>“ã×ìú“~П/žóÅúœ×3è$Ré2.‰xí4+¨W,ŠÑ a‡$ à×¥/Àï•Èý¥~(qÏðö?ôŽ€=®šM§*Ã$_AߥygÁÀ²~Ð_´ˆeO´Œ GüSö>µp| ñîÐíûJ|QÛÈ'þ¯p8ïö:ñ…Ÿü¦þÑ?aµøýãûg´ñV›ÍÔz$º´¢ÚȲʯjUQ–0# ¤ $$7>œf (ù€×®;VÅ×qðC┿ðŠêÀ¶zÿ¡ËÛõÍpcáŸÄeÇíñ#sÔ³ ~¿èuÎübøañ _‚8i?hOˆ·QÅáÍFY-æðö„‘Ü µ˜’Ô8VŒ©Áͳ:„ê[àÇ€—ïá,ñÜ}’Öð˜Nó–à‘È¢¼Óàïìóãð_Áÿ ñÕdðî,vñxCxíÕ­ca3Ú–` …‰$Nk¡oÙ÷ƘÂ~ѳЯü#º Ÿ­¹•ñƒäøßû=ÃÆ:¨À#þ€7¿Ÿ­züFo.pàœäóí^ ñ×ö~ñ¥§ÆÏ€Ë'Ljr^ø¯Q·¶¸›DÑ’M1×F»‘¦‰c¶ìÊ­9 ¯A|q'#ö†ø—òàîÿ„wA$ÿä¥gs2Ë±Š¦ÀF8$~&¹ÙîP¿ÿh¬m |k¥¸öþÀ²ü«,|ñ³±_øhO‰™Çý z>¿òéÚ¼óà§Â_é>¤¾fÄEr ¸ÿUaü_?|zU¸ÿ„[V8ëƒö9zóôøqñÏÉûD|I,q‘ÿÞƒúÿ¢*ç¾2|6øuðcÆë7íñê$ðî£,°Iáí #¹Am!h™£µ €*JFN4ô?Áò«ð+áã)Ë é ¦éÊ*ÞoŸ7o›•QÐz`×Ë_ü;ñ.ÛàׂÚâœ-áÍ9â·ÃºÇl†Ú2±#=©v PX’qÉÍt_Ø_‹.hŸˆ£ùô~Ÿè”ØþÐäÿÂîýšFã‘ã}XsÔÅ=}ŸÖºäÂÈN³g5òïÆ/|C×þ<üƒQøõãËÙgñV¤–·2è:2K¥Hº5Ó4±*[vd P7G©Cð£Çìrÿ´WÄÀøÝƒá­Ÿý# UuY˜¸¾:ÿŸÂ¼#¸ÿ†“ý¡²ïøKt¯›=¿°lÿº1ðŸÇÒàÚ3âV_·ü#zqÿ€uäŸ ¾øÒÿã×ǃ/ÇÛÜÙø£N†{˜ô=äÕ\èÖ²,²«ÛFTeŒ©T‚I4ç²E"ª;08#¦yÅa|SãàߎN[ðŒjxöû$¸NµWþŒ ˆGíñ(–ãpðö…ÇõéÏÿ®¹ÿ‹Ÿ|^ÿ¼jÒ||ø‰t‘ø{P•­¥ÐtDŽáVÖBѹKPÀ0¤ƒšcÑþ|ð)#pÿ„_KéÎ?ÐâÆZÝ,"SÌU~wmà`u>kÂþ|8ñÜ<éñóâ¢?‡ôù"‚-ExíÔÛFV5gµ,B‚$9­ÓðëDZY?hˆ˜#ÿ„wB8ö?è”é~!mOÚöuûœø¿UÊÿtÿ`^ó^ÀWs.6…=úWȾ<øOã­Köø üxñìò]x£QŽÚéô-$Òä]éÚX•-‚;2+FD”$ À÷ø9ãÄoÚ;âkdøF¼?Ç=?ã΀=zü¨ àä€:~+ýW??i™cÿ ¾“»éÿý‰85'Á†ý£>&¯Aÿ"ç‡øÿÉ:ò߃_ ¾!hŸþ>Åeñ÷ÇöMmâ­:;«ˆ´IuY[F´u–U{R¨Ê…c0£jFâM}v“©…7œó€ƒÔç¥a|fÚ>|BÎ÷š¸_ïô)5å á‰$¯—ûF|Inùÿ„k@ù~¿è•Îühð?ĉ> xån?h_ˆwQ§‡5%‚oèIÚ Y DÌ–¡À` ’¤4í¿\Eð#á÷ óxWIÿNqVôoº¤‚pGÍŒþ~µówÁŸ|HàÇ‚>ÏûB|@´…ü9§I¼~К;d6Ñ•íKQ…Ëp9ÍoÂ'ñ!7ný¢~$dqÿ"΀Gáþ‡ÖØÒý¬N>(~Θç6Õ0GS÷ÿ­VßfÄE Íœ.NxàþýjñoŽÿ ¼â/ŒÿáÕþ<øúõ®ÐAéßýšMØlêv (»ÉÁ ÛëQ~ÊŠ´VAñ¾–zwÿ„~ʹøPþ1ÉÝûB|Jè ·ùôé^yðcÀ?¼'ñ³ãŶ‹ñãÇ–&ßÅ:r]\E èÒKªÈÚ=«¬²«ÛFT+…R $‘;ƒMdÜÜoÎÕE$ £ÜzVÅòWàÄ%fŸ êç¶ú¼û}+Ç?²>&giý¢>!äZÐ{ûý’¹ßŒÄ»Ÿƒ^6Ž_ÚÇ×p§†õfü=¡¤w¶Òn‰Ù-C¨a•%H ƘJøO?¼¼|1¥ªsœ¡ÄOá[È€Ã$öð¯øGð‹ÇPüðIOß­béïh#¥²5´dD¥íK2¨ Ä’$×EÂoò‰ûC|FQ¸ÿ„{B×ýÞ§”®bŒpø^?³ÐÈùücªŒ¯øÞô¯FRQT9Âq‘ËÖ¾qøÁðcÇüsø ÇÇoݽ׊uí®dдt“KeÑ®¥‰Ø,ŒÈ­9 Oÿ…%ãˆÉó?hoˆäwÂ; `ã×ýŠ,;éfßÍ€G#héÏZó…³gã¿í #ÏŒ4£Œsÿ ,Vˆø/ãs#,Ÿ´GÄ¥r0Gü#º¡ÿJò?…ßüokñÏã¬q|uñݳÚx£MŠâê=G’]NFÑí]e•^ت2£,`FÚ ‘’I{Å¢>† p¢=›±žOùãùÖÅ¥ÿ‹3ã†Ê2Â/ª †à¡ËÈ®Lü0ñÂ.áüC.Ç>гÿ¤Ÿ¥`|]øUãÉ> xËÎøññêü=¨;ÛÉ h‰è¶ÒŠZ‡€*JFx9£™#>¥ø>Ì¿¾•ƒá=#’sÇØâÉü+|d¿8õÝ0==úÿ*ù¯à¿‚~#ÃðoÀéoûDüCµI<9§ß\×|88ý£?hÌñžÇSÿý–3]øãæ_“ö‘ø¦ÃãÃ>ãÿ$ÿÎ+É> þÎþ8ºøûûAøhˆÖ²Øx«L‚âæ D’]Y›E´‘f™$µ(Œ¨Â0#  $$q;¼² [—?{?QþzÖÅ‹…à·Õ± o ê¼ãc”ðªƒövñªãöŽø¤Aôðç‡òþ×7ñ£öpñ¢üñÓ¯íñ*é!ðæ£+ÛMáý#»E´‘š7híª°à• €x9 CøF@ø!à¥U›ÂšPäöû9­âC`fu¯Sסö¯>ø#â4_<-¾?üAµ†OéÏ1øCx­•­£+3Ú—* –$àrs]ø+â3cgí ñœÿÂ7 ÿò%.dW#:oÏ»ã·ìä\ýïjÇïgŸøGïxá^…æ*¡Øê\çw~ÿç¥|­ñWá¿Ä [ãßÀhî~<øòå®kOi°]\Ûè+ɪHÚ%¤‹4Ë%©DeFXÀŒ*•@HÉ&€lú]#(Còªò ôÀþ¿­aüTþß6’Äø[SëŒôI{Jç[àŽË0oÚOâ‘#ãÃ^çÿ$ëžøÇû=xí¾ xÜ·íñ.é"ðî¡+Á'‡4ŠåVÚBѳ% `¬RTƒƒÁÍ=Ká[þ x”À>ÒÆsÔý’.kkyfÆvàõ#Œ…p¿~5xƒ^Ǽ†/ é±²Iâ+DxÝm#VVS&A#Þ·ÅïI)oøXŸúcþFk.Gýý [ãžÇßÙ¬ä6=ülð,?¿g"¾:ð4©kã-Vk—‡\´xíQ´ÔW•„„ .Ê ’HëÒSã7 |Cø|¬NüT¶LÇSûÞ´Ð)1ÀUUÔ–éÁöÇ­x§€°ß´í\޵æ ˆ“ã¿í €0Þ/Ò›#žFƒeŠëgø·ày…ñïNìçþ*2«ùÉŸZó?„?üß¾?³øßÁ‘­Ï‹tÉ-¤“\µHîQtKDf‰‹áÀu+HÔP­ÇÛœK69õþ|Ö?ÅvÛðWÇJ,|1ªòç/çL?<X…ñ× ŸZsîyX?~.ø*?ƒ~;aãK$¾ÔbE_ZHò¹´UY2Ä“€z¿ð¹•~ ø9 ?áÒ²O\ý’*Û–Œ8e`ÄŒ ‚ù渄Ÿ¼ß| xÛÁ1ºøoMŽE“^µG…¬jÊÊdÈ ‚=9­Éþ)ø2FùO¼ž„ÿÂGiÃ÷•ƒñsâׂcø#ã‘޼#IáJ5Ž=~ÑÞV6’ª¢L’N8å…,Á¯2ð_ÃZf8çìqœúVÛ´™”<ƒ1þz×ð£âÇ‚_àï‚Þ5ðRHžÓRD“]µW‰ÖÖ0T©“!Áèk â¯ƒ•p|oà`r~câ+BqÏ÷žýh$¥â†öŒýŸ}Ìž-Õ¹Ì óµ{h+ˆÑÉ(@<ŒóŠùËÆ?|íðÏü$VÞ,Õ$¸•uËfŽÝD»Ey>eP[$µî)ñoÁEQÇþã#ÄvxÛ÷½¨}þY1œ9𢼛Ⴣû@þÐääƒã-+8?õ²çúWp>,ø%@'â€KÉ>#³ägÓÍé^Mð¿ã'‚¤ý ?h|qàÄŽëź\Öï&¹j‘Ý¢è–hÏ3áÔ2²’2R:ŠõÀ¯&2Œv>„û ç~-üßütJ…+á}W‘Èô9y”GñgÁ,Nßx NïºÞ"³ÚÔIÖ°¾.|[ðBüñÎ` œ °x¯J‹^ °ñ瀉یYóõýï52)’’6¤%Q†pqœßJò_ÉåþдK€G‹ô {ãþ$V}ÿµèü^ðIoŽü«¼xŠÏ'_7Ô×|;ø»àËßä5ðtQÜø¯LšÞGÖ­U.Qt[D-3áÔ:²’22ëJ"–ǧogV/±›9Á?{Þ±~*(ƒ¾8ipÏÿΨGå?d“?Ò‘¾-x9˜ãä£^´üÈó1šÃø·ñOÁ±|ñ°9ð\ÒIáÝI#×­]äck UP$ÉbHw« î>Ç¿àÇ7áü"ÚZã<Ǥ\LZݹ^I Ü/žÿp? >/x)¾ ø?Ž|'†ôÔ•_µWF[HÕƒ)“ ƒWü+t|Yð\®Ùñç6ƒ€?á ³éÿ>”ñ4ñïözËmsã Wßñ"½¯Lã ±60>¹ë×µx—Åo‹þ ‡ãßÀ‹Æ¾ hí<[©Ëpé­ÚºÛ!Ñ.Ñ^FŠ]•A8É w¯R_‹ ¥¼wàC»Ÿù¬ð¾ã÷¼PÈ=v0$ƒyÏLšòOahÚa/‹´¡Ž #ûÏÿ×^„ßüݸçð®áÆ7ÁOñ×Q“ÃzjR?ò2Yò-s¿>4øÿñç€^I¼/©ÇEâ+9$•ÚÎU(“%‰ÀrMqÿ ʯÁŸ–,qá0œð¹û$]=sÅm¼Ì6ïiFIAíúW ð“⿃.¾ øÍñ¿‚âx¼5¦ÄÈÚõ¢:2ÚÄ ²´™VxϺø·àÕÎßøqœøHm;ÿÛOjÌÝ3'Ç@ÚözUñv«N°¯q^¼˜` ƒR~½kÀ~!|`ðd´ìüá5ðkÇkâÍN[‡[µhí‘´KÄV•„˜E,ʹlHM{)ø³à˜Ôñ瀉Rpá#³ÿFUÄÊ{›iœû€›qøû×7û3¸__´š2OŽ4‘Ýü#öU;|[ðO”þß1ÇÄvüv¹_Ù—ã_‚ÆÚ)ŸÇ^ ·K¿ésZ¼Úõ¬kqè6q³DÌøu¬¤¯É=õ•K1@6ôäã?OðíX_ï‚þ>s jœ·¢KúÔ?ð¸<Ê1ñáðägÄ–@Ž1ÚZÂø¹ñ£À–ÿütâ€\ÉáMSÄ6o$ŒÖ²Š¢L±'šóO†Ÿ|Áÿ7ü ž f—ÃÚ{³¾hï#›hË1&<’O$ŸS[°ü'ðSÈø r>eÿ„vÏ :õòê_†I¿á‚ ~ÓNrçÖ>q[ct„‚pFJåzƒ×¯Zò‰</íû>¨ð?ƒ#Šëź¤WÇ¡Z¤wH4;ÉdP˜uªÀà€kÙáOx Ÿù'Þ\cþe»2OáåWŸ|F ?hÙÝc!Çü&¨Æê{Ízà„ º‚÷Ö€0ÇÁïá³ðÿáøëø¦ì†>¿»¯ øcðÁP|ý Çü þ –;_iq[Å&‡lÑÛ#hvŽÉ˜È@Y™ˆ\ ±=M{ÜƒÍ Gñ óé^Iðá|ÏÚö‡ùð?á1Òps€ö—ZÕ? üµ·xÀ™QœÂ;gƒôýßó¬_Œü'Áo°ð7‚#1xgR‘?Ú+ÆâÒFV ±‚¤GzïaÜ üûIîŽø®wâ©gø)ãÎHaá}W?ø.9«ðcàχÁƒà?Ë#ø_K‘ÞOÙ»Êíigg1’I'$šèáÜ‘ÃχÌWãÖx÷?êé~Bð;á÷šv—𦓎éÎ.1[²Fª¬2 1þ§¦?Zñß¼ÿ¿g¼»ñ–© ÂC¡ZÇÒ.…xê“(L:†Ul€@=EwŸð¨¼€SÀ_²¸ÂÿÂ9fq“Üù~Õñè±øãû8ï Ïõ\xQÿý÷Zî!‰Œ " ÌÍÏS޹úPŸ<\ oøF b|9gÇçy‡Á¿ƒþƒã×í ¿Á xí¼a¥Ãl’è–­ª¶…få#S¥Ù˜…’OzöÅpêŠK´’0ÏZóo‚ä¿ÇÚ-w7ü&šHíÏüH,³×üñ@ <ù à/dÙ³ü¿ÕðkŸøÅð—ÀÏðcÇñBx7Ã:œˆÑø~Ñ7[IJ²° ‚2ô®úL0Ü1¹x#¦}?ϵaü\“Á/™AãïO_±Ë×=hξü!ðl< Íà;Ká½6G’MÕÞFkX‰f-I$’MnKð»Á‘dKào Â;h'þÙÑð•™¾ øiB†t³€yâÎ*Ý@&W*ÌpHù¿OZƒ{hxçÆï„ž “ãÀCƒ<Ýø³SŠxÓD¶D¸UÑnÝRUáÔ:©²2ê+¶ ü€·ü ¾'—þÛO^ú¾µ•ñ¸øÏû?’ßð—êcáÿ‰ç>ÕÙ´À Ç*Ã9¦*–ÆRјrü'ð^àWÀÞ ^ ãÃögñÇ—Ò¼ßáG¿•üàéÛÅzlvñ¾‹lÉÑÊÆ¬˜E.ňÉbzšöRá×’7à¹Ï©¯9øZ¡>9ü}G%±âí3¾IÆ…gÏqÖ›Ð!¹·Âï4aæð?‚òFÃöœþ":Âø¯ð»Á³|ñ¦Ïø-<5¨ºHšª•‹ñT³|ñÖ÷FðŒêx¿èrñõ©F­WÁ¯ƒ¾ ÿ…+àSÿ7Ÿ i’»ËáëWy­",ÌÆ<’I$ž¦·Wá‚Ê3x ˆ=O‡,ÀÿÛ.x§ü"“Ìø!à0à<-¤ç¹³Š¶Ø¯! €É;‡íT`x¯Ç߃> ÿ…Ûû>*ø+ÁQ­ÏŒu8n-Õæ1¡Þ:¬ª±áÔ2«sȨ®ßþG̹ð`øG-¯ý3ëYQ_ãGìñµ]Œž3ÕIR:Ÿì ÞžÞÕÙÀw6Õç<g$sõé@-ð§Á;Ÿø€O‡,ðòÖ°?e߃hv¼ð7‚®#³ñ–— ¼rèV²Gj¡Y;$A£Â)ffÂàe‰êk¾‹¨ùÉ8ÆG>õ‡û0†“âßí–`ßð›iDg'þeû/ËÒ€;ßøSÞ¥¾|=Ú8?ñMÙuöý×Ô×;ñ£à߀çøãæÀ^ŠDð¶©$O‡¬Ñãe³‘••–0A‘Þ»ñ ‰¶È¡¾bÿ>Õ…ñ˜…øñ+ÿ¦¯Fqþ‡/åþæ~x*/‚~ðƒøžo é’;ÉáûGy]­",ÎZ<±$äóÎk~?„> ;ü ž A O‡m 'ÓWµ?áçà§Ãã'þ],ÿnqdc­máUv‰8Ú:çž§ñÉ (ø™ðsÁ7?´GìîàÆ—^/Õb¹Ž= Õ#ºEЯRUáÔ:«{€zŠö›„>Whø}ðü’rð͘ {+­yÏÄeÛûDþÍþJñÿ Ž®GÝÿýï5ì’)d,Àll†?/sîh ¾ø~áïÃãÐøjÌ{gˆ½kǾüð2~Ðÿ´JKà¼V~/Òâ‚'ЭdŽÙ[A³r‘) ±b$ž¦½ù¡*¬êJs€¼íÿë¯"øbííûH²(Ûÿ ¦ #·ü#Ö=(v/…œ¾ð1ùxðåŸçþ®¹ßŒ?|7ÁcÀž‰£ðƧ$o‡íâu´”«+ò# Jïã_10§r†Á=Éôü»VŦ ð?â@ªáÕTŒä±rÐOƒ¿ü¿ü»Ài%ð¾—,²Éáë6yXÚDY™š<³ä“Ü×B>x ¯ÃÏa²>³ÀôçË£á ð3À$Øð¦‘Œ·Sö8»~¾ü YHÎ3ž£ÿ×@?þÕÿ¼¿gÖµð?‚à[¿jp\¬:¬ir‹¡Þ:¤ª±áÔ:«rõ«Íð«Á» ·ð7È<ÿÈ¿gϱýߥûV(_Š?³¹Œ®?á7Õ#þÅûÞ*×ÝS¾>£<Kzb€0—á_ƒAãÀÞÇ$†ðõ #þ¹õ'ùR~ȼ'ÄßÚ®¼à™þËãM2+TŸAµ‘-£m ÉÊF­fb£’zšÝ ™æù†@$OZ—ö>Qÿ /ö‰.ÀøMô²[×þ)û/Ê€=¾ø'€>°ÝŒ/†¬¸ç?»â¹¿Œßü /ÀãÀ>I"ð®©"K‡-H]m%*ÊÂ0Aç½zÈ>ШåB¯'ç½`|a$|ø¼Ž|'«…ïö)•yÇÁ߃> ¶ø!à À~—ÌðÆ–îÒx~ÑÞW6‘gs%‰9çó®¾ø('À>=±ÿݘ9Çýs§ü'oø²_N cšPg,âýkuÝÃr¹lc“ÈôÞ€=ñåõúVí¾5~Ρ@þ=T ä{ÿ׮Ţ!ãòuÎ~÷¦Esÿð©ü€ü¤à‚<7h{ÿîø¬/Ùsà·ßâïí×>ðDñÚøËLŠÙfÐ-dKTm ÍÙ#V¥Ø±’q“]Ò¢Ç3ÙB‘·9É^ÿáY?²úîø¿ûE™@m¾8ÒN:Ÿùì±@Ü¿<‘`|:øw´¨Úá²'=Çú¾žõÎühø-àWøãüøÀQI…5I£hü;f’FËg)®#ʰ8 Ž˜¯Dly|îÉ^3¸~W;ñ“/ð7âìçþ=\(ÿ·)sÅygÁ¯ƒÞ ¼eð/äyü1¦HÎþ´y%sk,ÌcÉ$ç$òI­õøKàÀ§þ(/(Æp|9fH8ÿ®t¿¤_øR>RU6ø[J'ûÇ6qVØ;8`Ü.3_ÿ]xgí'ð‡ÁÍñgூ¼¹ñ†¥ ÂC¡ÚÄ—(4;ÇT‘V<:†PÀ€@=En…ž (x#À¬ÝüSöcoâcúúÔ¿´Ãgâ×ìýÊá4ÕOú€ÞVº¸ÎŒߟ׵a¿Â¯–a'¼ 6Ä/‡­xíûºçg„> o‹?<ïø*å-|_¦GmÚ%«¥¼m¢Ù¹HÕ“äRìÌ@ÆI'½wd$\I’Ü€OóÅb~Îl©ñcö‚' ñ––FÕÉñ!³ÿíá/•›Íð'€™Gw‡,Ãgç÷U‡ñ_á‚§øGã0<àDxü9¨È‡í£ak! ¬#È Œƒë]ºáþEá”gÜzÖWÄà?áNøØ¹ÿáÔÀR¤gý\{zОü#ñïÄ{Ÿ„^ týž> ÝFž°HçÄZGp¢Þ0² {°À0€ÀFEtx×â<“îÙÏâNÑÁÄÚÿ&ÿJõ?…­æ|ðrçþ)}/ŽÃ6‘VìÎ<Ì@ª[¯ÌÙù+âçÄ¿ˆ:7Çÿ€“]|ñí¬–þ+Ô¥µ¶}{Ey5YF»FŠ&K’ˆÊ…¤&B«µ$ õÁñâcæýœ~'ô#ÄÞÿäÎõwãˆþ=~ÎÿÂq«§üS÷ÕèO™iþ#È?׿/ñ‡âE…ýœ>'¯ñe|Káð>§ý2¼á_ů]ü|øöñ|øƒu%׊tÉn­b×tT—J‘tkTX¦g¹ !dUË®9WÕfTÎðj’¼‚? ó„n_öƒý£ÃgƺHõ/ÙP,þ «?áž~$1ÿ &‚_µæ¹ÏŒ<}ÁOŸøg߈¶‹7‡5žâOhm²5¬€ÊÊ—E˜(É!A${ËȘ`ëäeNzççXŸ¤'àÌ``øWU8c–€<ÏàßíEãø)àeOÙóâ]ÚCáÍ:¸‡_ÐÒ+•[XÂÈŠ÷a°°ÀžEt?ðÓþ.1‚¿³ÇÅ œøH¼?ÉÿÀʃáD¾_ÁäáÓÂä(û$]ëqˆœŽH F=x×ÇÿÚÅ·~Ï7ÀˆvFÃÅš•Ä6Óëº4’j®ú5Ôm MÉTeV2!PU’wŸðÔž(Hqÿ õñ? s“â-$÷ÿ—ºç¾:ª7Åÿ€ ä)ñŽ©¹±Óþ$Wƒ"º­ŠvlùŽ2:zƒúT·cHÅIjUOÚ›Å^äýžþ&œ ÿ„‡AÊOøû® à'Çÿê~=Üiÿ~ ^‹ÿiÒÜ[C®èÑɥȺ5¢fi.B»2”Ë 8ä^»Ë‹çÞwÁ Ìý™HoŠ´ ʲ·ŒôÌŒã?ñ ²¡;„ࢮkŸ¾;e?ñŽÿHÀò2h=¿Ó+ãÇ/“ñºÙïâ-ªËáÍB9.e×ô'ŽÕZÖE28Žì±Ul($ÆM{Q÷T°b2Á‡`|X /ÁO9<ÿÂ+ªá{Çœ½ªŒÏøCñÏÆmðkÁ*>|C»Žiñ%ÄZöŠ‘Ü*ÛF¢EWº ªÀ€8<€kxüoñ-»ö~øŽ ãþôÿK­_…ªÍðWÁ+Œ“á,ûǤ\ÖÐv Kýиb9?_çJÅs3Ä>,ü]ñιñËàTŸ¼{ö¾'Ô$µµ›\ÑÞMMÎtL—%Q•¤&B£@9 R]âhÃ/ìõñ±?ô2hü—ÏãLÕðß´¯ìñåãð–êÇûÞÿJú ;fÁa±‚ž¾;Ów<uÿ‰aJŸÙëâ)àŽ•ÂþϪãÏí(#þ+$€pá±ëùÐ Øó¥ŸâŽ×Wýž>!x9ñ.ƒÿ“uñ‹Uø™Áo½çìùãØ"Ô[‰•ñeüñÛªíVðÆ©Áý^h/àÇÅ/ˆðWÁGìóñê8¼7§GÌ>"УŽå¬@Jª÷A¸€ÀȺOøYa?g‰Àcø|ÿ;Îõßüe?|#o„ô¬uÆM”U»˜ÞPŒÙП×ús@.üeøÛãÝ ãßÀ GàÄ3eâ½J[kY5íI5YE»ŒÃ %ÑTdFiI¨Â 8ëö’ñ£._önø¦N1øI<=×ÿ*Ú$løÕû9à©ÛãmXŒqÿýõu» cœ<ò¿Qÿ× ¤®s_ðÒ^4BÂOÙ¿â‘'®ïx{§ ÿLâ¼áGíãI¾>ü~™~üC¹’ûÅzl×ñkº2K¥:h¶‘ˆ¦y.B»2*È e€ äWвíp¡U@PÌ8éþq^eð‰D¿ÿh€Ü3xËIî6øÙrhV-ŸÞ3Lû:üNÆsÿ#Éïÿ/ç5Îüaý |f~ xááž¾"Z |7¨Ã$òx‡Cxí•­dGTº.ÁA,@5ê X÷JìGLt>ÄãÞ±>-¿üwº ø_Tçþœåç=èÉüý¨|X~ xöyø•txoNŠ;˜¼A¡$w*–±¨‘îÃ`7À èÏí5ââT¿ìçñE·ÿ ‡ñúÝõïQ|'ŒŸƒ>عÃ:_n¤YÅÖ·š):BeøÈëׯj9‹å<;ö‘ý kj7Ð\kš4’jŽÚ5Üm MÉTeVi ¨!8Ô/Äo¨þÏp:nñ…Çãý.®üY¿g­à€= ðΨFq“þ‰&;zP(|øçãÇø%àd_Ùçâ5ÒÅá½:(®bñ„‰r‹kƯvU€ÜØ<Œñ]ürñÔO¸þΟ?ò1ø+ÿ“•Ñ|#!¾øÍè<-¥€¹ÁÏØâÿÞˆb/,)e ˜qœþ¼ >mý¡¾<øÞ/Œß$¸øñ O6>+Ô¦·†ã\Ñd“U‘´k´hbhîJ£*3JL…A@$àWb~<øÀDTþÏ8?ò0è$“ïþ—W¿hö|]ýÏ'o5L‚zŸì ïÌVÞT(Xn2r3ý1RÝ‹ŒSG.~=xÈ Cû=üLõψtôý/Ú¸ïÙÛö«ñW‡~1||¾!ßË©x¯N¸ž }sFI4¶]Ò1 Í%ÐWfTaµÀ$ŠõÐÂ5| £Œ`õúךü1[ãÇÀø»Lúçû ÎŽb¹èMûcøŽHp?g_Š[GÿÂE ~˜¼®ã7í‡ây¾ xæÿg¿‰¶Ÿhðæ¥ÜO¯èo²=¤ŠduK¢ÅTÄ(-À&µ¼“,xpÉ0}¿?­büV>gÁ¿¶Yü#Z§$öû$¿¥+±û43àÏÄψðWÀÞWìïñå#ðæ›\Ãâ- íÖ0²*½ØuVp Áä]!øñËÿg‰gÿ„—Ãàø]×¢| \üø{¸*ƒáM+'<Ÿô(¸­÷¬{ºþÏÍ‘Vb|…ûJ|Kø€ß¾­×À_ØK‹5-mç×tiVs£]£CGrUQšBd*¤!ä]"ø¿âlÙÿâO¯ˆô sÛþ^ëÑ?ipcøÅû8 ÿ ¶­’Nrá¾êkËbÄÝåŽH=Éï@>|oñ™~ÏßÏøHô#ÿ·UÂ| øãã=ãÇH¯>øúîkÏi÷öúÞŽ¥ºèö¨±JÏrÙ•D™Œ²áÀ$Šúuã.€I…Áã;^=à’Wö†ý š0~oéC+ß: Ÿ4~OÚ#žhÿŒ|ø– ŽƒÄ: ÛžŸò÷X?¿hß„~0Œüø‘ Í _Än$×ôGKekwF tX…$(']ÈWo™´í9f<–íþx¬¯ˆÊÍð§Æ[œ>ÏêD¸ýLóý(Ù~8ƒ>ÞûHð¾˜G8ñçklÉ´á1^?ÏZñ„¿þ CðWÁ,ß´gÄ›XåðþŸ,vðøsAt·F¶Œ¬HÏh]‚‚,Iã’k¡_ƒCGûIüOÇ¿âšðð== ;ã³nø÷û8¤)ñÆ®@öÿ„zú½ "í]Ü'?N|»ûN|'ñþ‘ñƒà$ÿð¿þ jÜx·R†ÖâçAÑc“Iq¢Ý»MÇlÙ4dHä€]:x{âZ·ö†øŒp3ÿ"Þ‚Oþ’P¾ |ÍÌäçéþ{W•|$Éý hð )ÿ„ÏI!éÿ .µÌÉΈQ†Ïíñ ã'Ãz9ãôNÕç_>üAŸãWÇiaøñã»I`ñNÝĎ調Ñí]f•d¶*Œ¨V0# ¤ $d“@T™–E;Ig÷,+âÜ |ñøY[ÂÚ°àYËýkÎ?áøƒ·öˆøŽã<øF´{Ë¥sÿ>üCoƒ>52þÐ?®¢_ê/$øCHî‘m¤-2Z† àJyâ€;_„’ÿŘð9ÈñKéy3gë[M°BXÙ$œ0ÿkÒ¼¿áÀŸ/Áo”øùñ Õ$ðæ2Á¢$©Î0|= ÷ÿ·OjÈøìP|\ø‚o‹õNGñÄŠòºfÛ6N@ôéþy¯1ø«û8ø¿VøûðÎçã¿î¾ßâ­J.dÐôt—KuÑ®¤iaT¶ ìÊ­PÁ¯YoÙÄgþÐÿo#>Ð0òR¥«³HO•fÌQ³vb0PöôÅfþÌ'Å/Ú  i|.yÿ‰ —Oð­×ý޼Ic/íñMF2Iðöœÿà%xç߃^8ð/Çß:ÇoÛ-§‰ôÔ¸¸AѤ—T‘´kW̯lUQ–0# ¥P $‘ œÔ‘ôö#G ‡väÌVÅ‘·à§Óÿ¶©‘ÆãÎ^ž•ægÁ67üdÄLJh8ëùô¬‹þøƒ/ÁŸ—øûãû¤Oj-´¾Ñ.ZÈLnÉj©*AðEQ™Ùü) ~ ø±,[ÃZY7ý>•´§aê7gþ}ë™ø7û)x©þx%‡íñ.ØMá½6t·‹@ÐÞ+UkXÙcF{Rä(;AbIÇ$õ®‚/ÙWÅî~Ðÿ1ÓðŽè¹d  MT«~Ó³ÖÃ×Åú±ç·üH/?ÏôìK g9Ïÿ×_"~г÷Œü ñ—à=æ‘ñãÇ÷·7~,Ô-­®.t=La£]ÈÓD©lÙÑZ2$ r@Î vͦ|MgÂþп:pO†´þDü(èF‹ÌRalð‚9öþUÁ|üyý¥Fý»|o¤6sÿRõyÛhÿUœ'í ñ…àŸøFôŸü”®'öxð/ÄIþ2|z’?ž=²š/iÑ]ÜÁ¡h²>­)Ñ­e•d¶+*ˆ‚3“@b²¤'* Œí\˜ôéëÿÖ®wâûðâÕl jÌxà¡KŠòù|ñ.6¿h߉mÎr<3áðþI×9ñ—À¿î¾xÝ&ý¡þ"]Æ<7¨Ë%´¾ÐãŽå´„Æî–•\eIRöß„@Çð'áéFþ)M'ÇèQu5¿çùY(ÅGû\çÜñ_=|øcñþû?íñÕÃzt‘ÛÃáÝ ãµFµ–$g´,ÁA$95ѷ߉9ý£>%ƒŒcþŸŸÏýŠgízþ&þΛÀR|oªÓþ$¼ŒÔRÉa€#s' 3õýk;9üñߊ¾8ü³Ö¾>|A¾KïjQÚÜË¡h±Ë¥Jš5Û™aTµ ìÈ­\פÃ'x¡¹›ö‰ø§ÔŒŸx8ÿÀ:{˾0\©Ùó XzWðP³|hý 6±#þ 0³c9ÿ‰Ÿë]jþÉ~(e%¿hŠ_/8>Ð ?ù)Ö¼ëàwì³âÇøçñòÙ~=|F³m7Åšm¼óÁ¡hÒIª;èÖ’¬Ó,–ÅQ•c0«„ŒäЭ:€ãs òyyïÏò¬/‹/»à·Ž˜KÂ3ª;ôIx«§öZñ[OíñA¸Éaáßœ צ+›øÅû,x¯þ¯ßþâ]ЃÃzŒÏoqáý8®‘m¥c4v•X¤©ƒšö_„vþgÀχ¬ xWJαEŠèRLŸ¼¿»ùN}O=+ç?ƒ_þ"[üð>ÏÚâ¤-áÍ:H­âðî†élmX‘žÔ³*‚$ñÉ®‰üñ73þÑ>\íφ´òN€5¿h·_ø]³‰QÉñ®¬O'¯ü#÷Ù5Õ‰0g†ï·'ŸÿXüëçÏ‹|{âÚ à®¥ñÿâÙ»ñV¥µÔšŠ’éR.‹væhU-‚;2Œ‰®H€kØbýš|dñ’Ÿ´ŸÅ21»ið߇Ïïþ‡øÐ4ìt@îˆnb£Ý€@=«ÌþŸ¿h’€2Ò»ñÿ .+ª?³'ŒQ>OÚC⚌díðׇ¿?øó¯øwð?Æú7í ñòÚ/? k/é°ÜÝE¡hÒKª»èÖ’,Ó+ÛFTeŒ®Ô‚rH Ü÷á…n6œÝûúÖŦà¿ŽŠ…øcT`{Ÿô9s\¿ü*?»ÿ´'Ä’qßúG8äý“ŠÀø½ðƱüñªŸÿ®V?êIm'‡ô5ŠíVÖBÑ3¥¨`¬ RÏ4ï¾ø²ž`KcÃ^PŒçý*ÙÜAœt%åTøWü"ø=㋃ x~?|F´Y<;§KhGlmX‘žÔ¹ PX’@ä“]ø=ãiP3~п>sƒÿî‚pð¦Ì¾b‹„/ÇoÙëoVñ†«œvÿ‰ ízSd’#??¾kçOмkwñûà<|vñýÄ—ž(Ô£·¹—CÑ’M-×F»v–%K`ŽÌŠÑ‘ a‡$ àׯÙëÆy%h߉¹<ÿæûsëM+ ˜ëZ)Ø6À _ð⼫áÌ#þçí¿Ýñv—ÿp+>k§³ßŒÕY¿á¢¾'ª}àçÞçŸúô¯ømð/Æv¿><Ÿ<}o%Š4è®.¢Ðôv“V‘´kY³+ÛFTeŒª $Ó žâ“‰~ÎÀ12sžq\ÿÅbà߉< ê¤ñÆM¤¼qXƒà¿ >h‰k³‘ŸhGþ‘Ò·1q’ŽŒtRb$…dð÷ÅyßÂx¼Ï¿Šx³KÚXŒŒèV|àסÉû%x§£þÑŸ =ÿáðÿ§_øó¯ ðWì÷âýö…øñgoñÓâm§ø›MŽâåtM¦Õ´{I³+[mFDa…P $ÑÊ>usÙ µ1œžkâ±ò> x猗ðÖ¨9çþ\åÁþuˆ~xÅpÇÿˆÛsÆ<=¡œä¯Ò°¾/üñ±ø;ãG¸øïñæ4ðî¡#Ã6…¢¢]*ÛHZ6d¶ªÀ• àñJÖ´GÓße'àw€üÁ¼)¤¬?éÎ*èf'o˜ÓÈàñúâ¾sø;ðçâ5§Á/íý¡~"ÚÆþÓ¤ŠÞ/hOª5¬ecV{RÌbN95Ð'ÃÿˆÅ—?´Wı¼ü#Z>ÿñéVbi~ÒÀ¯ÅïÙÀŒcþm[Óæ?ðßWJÔ9!]»„ÿN+Á>5|ñÿˆ><|¶Õ~>üA¼7ž*Ô’Öæ]EŠ]&EÑnݦ…RÔ#³ hÈ0Éõ(¿gðcý£~(|ÜÿÈ·áþòN€:yïXÆã•+Éãíÿׯð[ÿhÚ #|[¥óè?°¬ÿZï?áœ|iÛÿ ñAK ãþÏÿòy‡ÁÙGÅZÏÇßkøûñÊ]3Åzm´÷6úŠòj®Ú-¤«,Êö¥Q•c0£jFrhÐ ‚y~cŽóÿõV?ÄwÝð¯Æc;wxsQàt?è²uô?κøc9~Ñ×pÿŠw@8õ?ñçX?cßÇðoÆŽ¿´'Äù…·‡õ ÞÚmBHîm¤c2Z Àm%H<œ@±ð¶'?<cLøF4ÜúZEÍm,bEfߟ—#O°=½ëƒøIñÀ¯ðcÀØñÿ€ãhü7¦ÆñÉâExØZÆH2¤‚JÞ“ãÊ1=ø}ó(ÿ™–˃õó?Î(ÏÿkÇÅ?ÙÛÊÎ[ƺ§8<ì ÞÕrGÚã®ïø×!ûS|bð[|SýŸ¾ÉãŸÏöOêSNðëÖ²¥ª6‡xŠÒ²¾eP[¹½^ÿ…Ÿàñ–ñçÙÔ‚qâ 3»ëûÊ@nˆ—a q´ÉëÏoð®3àª~1~Ð*ÁˆiyǯöŸZÙ?¼Èí޼ ¬yëöœ{­ë\GÀ¿‹~ _Œ¿·x×ÁÐÇqâÍ6[v}rÚ4¹UÑ-´lΨue$È"˜ÄÇË*d9 ó“ô¬ŠíŸƒ^9ß±·ø_T9§ú$½¯ô§¿Å¯$Gw޼Ìü1ÿ„†ÏŽ{~óõ¬Š¿|Áƒã¿¼á­M#Ž=~ÑÚGkYT(U“,I#sÎ(²øLø-àO˜'üRúV@ïþ‰&·G™ædí dõŸÊ¸O„|ÿ<ÿßã’? i±¼Rkö¨èËi*ÊÒeXG= mŸ‹^ ]Øñß9<ÿÅCgŒßÚÎñÒ²þÒ?³®å7‹õlŽÿò/Þ÷¯nŽMÐ"Å´nËcüÿ:ùÃâÆ_ÁûFþÏlÞ8ðL‘Úø·U’âD×-š;Dmñ¤q&ePN2HëÜSã€Ò#øðôa@ |Id{ûI@£Å‚T©{óÞ¾zÒÇ™ûN~ÐÛˆñf“ŒŽäg^Ð~1ø!‰Uø…ðð¯UÝâ[#ƒß¬:ŠùÏGøÇàÛÏÚ_ö–ÛÆÞ Üø«K–ÞG×-–;¤]Ñ FÆL:†VRA8 ŽÔß’ kå¥ó½¸Åb|S?ƒ>9fÂúŸÎF_²Køõ¥?<É´øçÀä÷#Ä6Ÿür°¾,|Xð„_¼n£Æþ –I<5¨Ä‰¿jí+Y@ ¢L³@€=ãá<Š>ü<ÎÞ<+¥3zŸô8°3[ªEº•^x<縸ƒüÿ< æøïÀ‰/ü"ú\r$¾!³F–Ò ÊÊdÊF<×Dÿü y_¾€zãÄv@A6€<ïö± ~&þÎâUÆÚ >£þ$´â»—0\Œ9#°þµÍþÖ¼~)~ÏŸdñÇ‚®>ÍãJ{—‡]¶•-Q´;Ä # Å.Ê ž2@ïV?áiø4&á9ð.sÐø‚ÌÿíNhqÆùZ'òÉ+Án§œú~}«öwo3â×íÇ¿Œt¥Ç±Ð¬ú~£â‡ƒ÷îÇ>@§!³ÁO3Þ¹ÿÙãâÿ‚ÏÅâox2$ºñv™-³Ë®[F—Hº%š3FÆ@CRW# Ž¢€=¬Ã´³}ÀÄòã¦Iõ¬O‹K·à¯He*ÞÕ@?èrôÿ â߂ʶÏø Iëÿž¸ýå`|ZøÁà˜¾ xäÂsàggðÖ§qǯÚHîÆÒPTHK1$p9ÍußÓgÁOäŒÂ-¥äç•c‹ô­Ä E2©89Æ?ýuÀ|'øÇà™~ øo޼®žÒât—Ä6ˆñ2ÚFYL™VAé] |ŽKø÷ÀN|Ig?ïçáøP'ı»öˆýœ‚ƒ¸xËVbssáûÞÏ­zàC2ä’§®ç8ÿ•xÅ/Œ¾·ý ¿g¶:ð\©kâýV[™c×m¤KTm ñäa&K²¨',zõåøÁàµ_Þ|@ø{’1ÿ#%™Ïå'ë@8ä©` 6H< ôÅyçÀ±³ãçí#»ò:é'ëÿýJèÇÅŸ$€¯Ä`Œx’σÿ{×›| øÑà–øùûE3øïÁ0¥×Œt¹`iuëTK¤]Î6xØÉ‡PêÊJçHê(ÚKGfÓOçXß?>!ºåÿÂ)ªáä¡ÍÅ"ü^ðG—•øðüçùlÁúi\߯_Œ^‹à‡ŽÒ?øBþÕcDÄ6$ŒÖ’…UQ&I$€äæ€(ü%P~ ø íHÿ„_Kž€}Ž.ý«}&ýò²¸ã’Ýp}ú×ðwâ÷‚›àŸBøçÁ ,~Ó#‘_´I–Ò0ÊÊÒ#= oËñgÁ.6øÓþ<ü‹@þ2ý¤ÿg7Ÿêä/§üH/zW¸6ùãÊ*}ÃØŽßçÖ¾lñÇÆ_§í!û<»øãÁf;_ê³\I¹jñÛ#hwˆ­#‰0Š]•Al œwïüað+ÿáð+ƒÿ#-—'ŸúiÇ^”¾ñyœ©ÜøÎr?Èàþ¿iÚ,“<_¤qŸ½ÿ !Åz×ü.·)ñ áâçïøHìÎîÇþZ×€ø?ã‚åý¤?hy!ñ·‚V;¯éRÁ$šå²Gt‹¡Y£4ldèue$2ê(Ò¥Ø%‹;íb=;ûýkâªlø)ãÂ1ûÏ j ö9û¼R‹> äÿÂyàUaøHlÈaøÉÀæ°>.ü]ðt?|p‹ã6ÿ êh‘ǯÚ;ÊÍk"ªª‰2Xœ æ€5~ß<Ÿ iléiýk}äÌATõä«r9õ®á7Åÿƒ^VñÏ‚£ðÖš’$ºõ¢´L¶‘VV“! ŠÞo‹^ ½ãÏ…ÆÓŸÙðsÿ]=(3Dzùß´gìð6•òüaª®ëÿ ÞAï^Ë¿ …rî;.k矈|íð‡Ž<,V¾-Õ$žXõËgŽÚ3¡Ý¢¼Œ¥ÙTŽHM{Oü-Ïÿ‘ûÀ98ŸÙä~"ZÞhE]¹^=Î=:ñŸ!Úö‰Ú§xñ†“ƒŸ»ÿ*ôwø¿à¥ùOþäŒñâK,Žå¥xÇÃÏŒ^ Ÿöý Y¼màèÒëÅš\¶²¾¹l‘Ü"èvˆÏèeeÈÎ ‘ÔP§y…Š Ã©æèz÷õ¬ŠêáMøè‚vŸ j˜ã¿Øå§7Å/ƒòøçÀ¤ç8>!´`2?ë§ZÀø±ñWÁVß|r?á8ðS»økRDŠ/ZÈÎík"…Ue‰=çš¹ðÅP|ð)8.<1¦;ôH»Vؘ™J¡TsôÏaú×ð§â׃›àÏ‚ øßÁ1´>ÓQÑõëU’7±«S&T‚0G­n§Åo±3Ç~|KøÉà«Ú#özwñσ$Š×ÅÚ¤×G®Û-Õ#¸Š=ÙRåB¼p²¨¨`@ Õì’ü$ð’!øyà¿Âá³éøGךóÿ‰Rý¢¿gQ‚¸ñެ0G?ò½ëÑS-É#sôüø  )>x”ø}ðûyê?á²<ÿߺòÿ‚Ÿ¼ÇŸÚ'Íð7‚%K_éQÛÇ&…jél¡Y»$JcÂ)vf $õ5íŽÆ[ƒòîÀcšó_ƒìWãßí$cbü&ºA,;Å?c@;ü#ðIæ‡ÿØqÇü#–c·ýs®wãÁŸIð;ÇÄøÀИ¼1ª½íÛé^æÐºåw(aò䆀9Óð“ÀÁI—áçÃÖÈ#ðÙŽÿÕq^[ðOà·àý ¿h±/<,vž1Ò¡·Ž] ÕãµFÐlä+´xE,ÌÄ d’zš÷"ÅïXdW¯µy¿ð¿i<…?ñ[iõÿŠzÆ€:døCàW,ÃÀ?ͳ'ÃV}zçý_ùÍsß~ xþøüIàÁ:x[Sš7ÃÖˆñºÚJC+ò¬ÕßHD›D@íL“ôè}«âñÝð3â9Èð¦¬AÝÀÿC˜c4…ð_àÏàøà&ð ÆO érHÒørÒG•ͤE™˜Ç’I9$õ®“þ÷P‡ß²FÿÂ7eéÀÇ•ëQü#þwÃìž„ô‘Ÿî¡EÎk£Ï˜wò©ÉÈî;àv k߃¾_гá²ðG‚­¾ÕãN•‹BµŠ;„]ñÂJ«¡•X‘QJ~x8•hüàpÃÿŠzÐ~êë¡ý¯bó~&~ÎÁ”îjŠ ãþ`¸>ÔÄ"6Ea¼IÂŽp¸  5øOàÖOŸÀ¾P;¯‡­ß§—ô®à·ÂÿÂæøðÁ~-¼Y¦Co¢[2[£h¶ŽR5dÂìXŽI5ëQ¸§!8?Ï­pßÉÿ…Ññóyäø¿K$ã$ÄŽÏ ï@ ü.ð[ ©àod’N|=iœg§ú¿jÇøµðÁRüñ¿•àŸG,~Ô¤VB´WG[YeaAÈÅvó8'ríVœ ïšÄø©²_ƒ>ù­§ñ¦…Sc¦ÿ…SàöQŸx*{xzÏæôÏîëâßÂ_·ÁŸ7ü! †Hü7©:²hªñ•´”«£ÁRµÛ• ÛNã‚}ÓZÆø¯1“࿎G#þ)P1Ï,Eœ¼}*ŒŽëà×ÁßEð+À$xÀRË'…ô¹]åðõ£¼¬Ö‘gcY‰$ûšèá'‡-ð÷áæ?„Ÿ ÙŽ=1å~´ï„#?þî]ÄøWI#òçå]–߀£.N žÙ ý§> ø%>0þÎÿgð'‚mÅ׌µ8.- Ö8îÑt+ÇU‘V<:‡U`#* tá‚Dmÿ'€Œ?á´ãðò¸£ö¢ù>1~ÎJüž7ÕK ŸøGïkn$Á &ݧ8n˜êåÄÅÿ…Kà“Ï€¼úáËN=¿ÕýJñÿ‡¿|ÇϘð_ƒä·¶ñV™>‹lél­¢Ú9X¦K³69$õ¯{“Ê>cnÈúŒ{בø•h/ÚØñf–1M Ëó¢;Š[£ágƒ‚Ÿ3À¾$v§ãÿ,ëâߟƒ¾6h¼àxü¿j,…j¯ Y ²° ädk»fÄ?#d…ÈÀÉ'=Í`|P ÿ gÇ –øgSÏ£¢KýjÉ%øGð§Á‘|ðI“ÀÞ•›ÃzdŽï Ú;ÈÆÒ2Y˜ÆKI$ž¦·›á'‚ãÃGàoáÆ|?hqÿé~Jà—qðÆ–þ"þ•¼ÙŽ`±²dœcoö…<Ÿâ§ÁßÏñûö|QàŸGç‹u8®bMÕåWC¼p’˜uªÀŒ€zש·Â¬¼øÀ[WŽ<7g´Ÿûõ\GÄçßñóözUQã Sgûö½ZY©fP2 Ó¯_­Fü*?‹cæxÀDŽ¿ñNYäÿä*ó„ü¿¿h%ox)áµñv—ºK¡ÛðcámS À?èrôôqßþx.ƒ¾y|à‰KxkM‘‹hVŽò»ZFY˜˜òÄœ’Mo§ðY‚| ä¯ü#¶€sÛýU T§Áo2 ‘á0©þœâê+xnx‰˜q‘è}ÿúÕ™­7ñgÁÏÝ~Ò¿³âKà¬w~-Õb¹‰4;UŽåC¼uYTG‡PʬÏ ¢½þ/ƒÞËøWHÆH²ÿã]+ȼG¹ÿiŸÙÔ€wjÝzcûó¥{â+¦M¬=8çúð*ÖÆrÜçÁÏyLOÃ‰cÃ6\ûåœW˜| ø%àHþ?þÑËÿ'¦ŽÓÆzT6ñÏ ÚÈ–¨Ú ”ޱ) ³1Œ’zšöùFã!“ÛŸœzó_‚2¤¿i\LøÛH{øzÆ˜Ž¡~xoVøyðøî_“²äôÏú®•ƒñoà§$ø5ã¥o‡þŒÅá­Mãxü?f’FÂÖVVR#È`Fr=+½Äx‘<)÷üëâÚ*|ñÖÆ ÂÚ¡8nGú¾½ºÐÏ ~1xýþøüEž%Ð,#IÓÄ:Çp¢Ù•UîƒÀ7py­³ñLjÇgìóñ!>^qâ=~?ñ÷]Ã#æ|ðW!|¿ 逑À ÚÅ[>P G÷€fs×·èi\«3~ПüoÅÿMqð#Ƕ/kâFkx'×4yTvÑî‘¡‰£¹*Œ¨Í!2B$]|ÕËüCÆ?ÚpÅ|c¥üÌ;aYÿZvÇö©ñd¤ýœ~)ñÆ?á#ðùÈôÇÛ+žøËûVx½þxî?øg¯‰öËsá½F .gñ„éh­k"™Rì±U± p ®Åw;aÆryVt}{*Äø© —ñãØÿ„cUϹû£4ÁüøããUø-à¡ìÿñæ8¼9§Ä·ëúGr«k¬Šè8V0 Áä ßÿ…çã@ª?áž~%’¿1?ð‘è<žäŸ¶u­¯„ª?áKø ÆåHðÆ—ÆrsöHº Þpb‚rvœc<І|Gøçã‰ÿh_€MÀ_ˆVòÙx«RšÚÖMwFyuGmî6Š&[’ˆÊŒÒ!PB2p·ÂâøˆbÄ¿³oÅž~oxxÿíçZæüPTþÓ_³®ïºÞ1ÕÇ¡?ñOÞãùW½É"m`Ì—¸%˜ÿžÿ•y;|`øƒµü3gÅóÿ7‡Î=‡úeyÂoÚ#ƺ_íñø]üø‡s=ÿŠôÙ®ma×tT—KuÑm#Xeg¹ ìÈ« 1–8îWÖ€`£‰ÁçŽÔãùWøoðÓ´aÚOüUúOóχì¿ÏãI» jÉÏí#âýÛOìëñ@äôÿ„Ãùù9X_?i_·Áo ýŸ>%ڭׇ5^ê_hm²µ¬ŠÒ:ÇvXª‚I Àà]ñT9ÈársšÂø±;''þ)S­›Iis”â~ütñÀø+à¥_€?î‘<9§D—ëúEt«k‰^è0VP€y­¡ñŸÆÀìûñ-H ø¨ô?òo¡®‡á>Ážþ)}(`ôèqVëÈC&ÜH<ž¼Ux?Å?ÚÆÇï€×º—ÀˆVßÙÞ(Ô¦‚Ú]sFyµGmî3,—%•¤&B ª 8×¢ý²|KågoŠ„çvá"ðþGþNWû@~0~ÏÃ$•ñ–¨HëŸø‘^ñï]Hˆ$ªÓ<@íן¥L?l• ìéñSiËm!ÐOù|®ö{ý¡|oâ_Ÿ´Þû?|E¿]Kźl·6ðëÚ$ré.º-¤k Í%ÐWfEYŒ²íp ®½Ô|â=ÎÙÎwr¿]ýŽÃˆÿ´`EÇô¼qÇü#ö=ûÐÛ|dø‚ñœþÍŸ#&ðöô²¹¯~ Cð;Ç~gìãñ*ÕfðΣÝOâ-D´Fµ4Ž©v]•A,B‚pkÜØ9‰@ +œ{óéíX_?~!ÿž¬xý ^ôå_~9xúãàw€Ö?ÙÛâ]ÒÃá­6(î`ñƒwH–±…‘VK°ÁXÀ0È×Iÿ »Ç¤°_Ù³âyÝÔÿÂKáìŸüœ®£àÚºüø|èvøDô•b1‘›8«xÞ<Ï :}ùë@+~Õ?|¬üXøÿ¾!éòÚø·QžÚ¯h²É«;h·hÐDÑ]FT-!2]¨@9 Vºx³â!'?³çÄ<ãþ†MÿíÝzíŸfüüÇþ[–äÿÈ¿}Öº¸PÆ6"䩯Aý?Ïã@(Þ*øŠNOìùñ ýŒzçßý.¼Ûà÷ÄïÇñ¯ã’Ÿ~;½šãÄút—6ð뺕‡ñWåø'ãÁ•/ÿÆ«€¸l¡ËÖ—1|ˆä>|\ñüÿ¼aýžþ#\Ň´äK˜|C¡GÊ­¬j²"Ét+óÈ®„üVø!ãövø–ªzÿÅI >¿l®Çá#2|ðP®¿ðŠiY½,⮉•>r¤8êÀ`ý0óª"ìùoãïÄ_ˆ·Æ_€öÖŸ|{es‹5í`¸×´iUè×hÐÄÑÜ•FT-!2!’@®áâŠnöxø‚ ÷>%ÐIÇþ×cñ)Wþ/öo1òÆš¹ôÇüS÷¿á^¾Ø\3w|Ø9èy¥a©4|Þ'ø ëÏìññ#œÂI oùû¯.øOñ?Ç^øÛñÒÛQø㻋©üO§Mum¹£«én4{TX¥f¹ ìÈ@P° àE}Æî‘†²ä˜ç {_:X>?i¯Ú!±»>-ÒqœuþÁ²ÇÖ„¬M˜ñŸÆ›öŸ€?W`ˆ4.¸ëŸµÖÅï¾6|jðâªMáýB9'—^Ñ;ekY‘‚]ePK ’šõŒJü1Î8nüÖGÅHHø7ã;…µ<ÿ´~É.*d“|ý§|dÿ¼ý¾']-·†ôècº‹Ä Er‰k‰T=Øp¬0À02t?ðÓž0pT~Î_øÁñQøpÇøü¥øNIø+àw€ÞÒúœ†ÿC‹Ö¶cTÉ1òéÈ Î3õí@ûI~Ò^1¿øÁðÀOˆv §x³Q¹‚ sE’MU›F»‰¢…£º(ŽªÆBd*0„Iº¯ø_¾2`Å¿g߉„6ÄZ‡ÚèøüY~2þÏ¥óƒã-Sè£ûó¥u +FwðîÎÿZM\w±ÊIñëÆJücçÄÀ ?â¡Ðyõÿ—ºó/„ß|wâŽ.4ßž=¹kiÏsnšîšc®j‚™îB»2Ë® ‚+Ýn1›ºŽƒ¯N}ëöx]ÿhPÃ?ñZidާþ@6]hJÀÝÌ¡ãOˆ€âOÙ÷âý!ÐÒ+´[hÂȪ÷A•X@`Ï#5Ј™ ·ìïñöÈñ&üþÙ^‘ð~ÿ ;ÀÔçþM+°~Çë[ríwÂíWa“Æ ¨Ç­|·ñ_âWÄ+o_<߀~?µ–×Å:”–¶²ëÚ4’j²6vL—%•¤&B „ HëKñ â37Ïû7üL`0JÿÂKáð8ÿ·ÊÐø¶Aý¡ÿfìãM[<ÿÔ½}^®¿#á€1‘ü'ÿ¯@îxÚüGø’ïû8|L,sø©¼?ŒzôÎ+É~|Sø€ß~>yþ \Msâ­6{«Xuý94¹F´EŠf{’3"¬€ÆXà"¾¾$UŒ|àwújò?…Ÿ7í ûHdŒé‡üSöT æüNø‡´ý~%ˆÎIVñ.€sîÚøÿëW=ñ«â¯Äø-ã´~ÏŸ-ãoê1Ës/ˆ4'ŽÙÖEiRè»*ƒ¸…8½áeÚÛ 8 rOóÅsÿ•áGü@À9O jƒ%³ÿ.sq@'ð⇦ø/à¿>!ÝŇ´èã¸ÄZ$qܪÛFDWº†ŒŒâºI>%øýÀû<|I‡Ěù7õ®ßá$ñdþBvø_JÉî?ÐâàJÝhÆÐÇpÀÝ×$Í+"¹™óÄO>;Ðÿh/€w:‡Àoˆ½ŸŠu9m­^ÑžmRGѮѡ…’ä¤l¨ZRd*¥P€K·Ú?Æ¡°ÿ³Å0àx{’9Ïü~VÆE ñçöt;G5aÉéÿ Úô”X@Bwv ýOãúÐêÎY¿iÉ?³wÅ`x#$ð÷§ý~W–|ý¥üf¿h?³÷Ä[¹/üY¦Ü\[A¯h‰.“"è–‘,34—A™d2˵À'p {Ë.IÙ·pP¹Ìó’GÝ÷þ\Ö?ÄÞ> øãiV_øG50rOËþ‰'"ü.uÿ…Mà3ûÏ é„ï‹X°yê{Vèî™ò‘üG§^õÀ|#ý˜ðÿ¤¢P„ÝÈw…%ÎâädÿŸ­r¿¤Qñ‡önFïécžqÿ>+±?²‰ó7íñUJà|9 òJóo?²×‹Óã¿ÇÛkŸl[Lñn›o5Ô‹$º«¾‹i"Í2ÉjQUÖ #  $$Ð#ÙŠÆA˜|™¦=+ â°Wø/ãÝänÕ[®w²IRÃ.øÂ5%¿hÏŠ$'*‡€ˆˆÔ;òpN¯zÄø¬èßüwäƒáS;ŽO6r×'Â߯G™û@üEÉ(ÿ„wB'ØÇ­sÿþøìüñ±ºøõñå"ðö Ïo.¢$w*¶Ò‰™-CÀ%H jK³=SáD…> xøCxcKÈ¡ÅÇç[Ï»í@¨a¸rç8ÿ"¸ŸƒŸ²×‹ÿáJø¿á¡¾&[,þÓ§ŽÞhO²5¬l"F{BÅT ±$ã’k ?²×‹ˆÃ~Ñ¿À?1'ÞÇ×þ<þ¢¬Èâ¾?~óãÀœñަlÿÄŠ÷Ÿóé]6Är›KÄ‚AÀ9Ï>Ý+Ì¿i¯ÙÃÅÚ_Å_€ÇþÇÄ-Eõj6ÐOq¡èÈú[®w#K ÅlÙ•LdHpä€7[à—Œ†ÿÚâ:?è^гø¢P]µ"FÂ0÷===3Vc{œ|Fý¢YºŸéy®á²®)¾øÊ5ñJ…ðèXÿÒJÂý—þøòÃâ¿Ç˜ô¿ß4å´ñfÌöú‹,š¬£ZºÍ*ËlUQ–%\|7¨ÌöÓø{BDºEµ‘š7d´ ªÀ%H 0iXÓ“ð–r¿<iÏ…t¢r¿ôçZÝpŠª `ãä¿þøå> xÿÃD|J³K éÒÇo‡t'ŠÙÖ6XўбT.X’@9®—þûÇ2ÑþÑßpx |5áÿþCª2!ø•&ßÚömËyŸñZjüÿܽ}Çç^Åc•·òÀÚIÈÉ÷5òׯ¯€ž:¶øýû?yþ"]Ë}âÍJ k™´$ÒÝt[¹hU-BHÌŠÑ aµÉ õ–ø)ñ ÊVÿ†“ø 3ÁÿŠgÃßü‡@”ª%b‡ƒÀÆ1þóŃøiÏÚ+Ê1—>,Ò1¸wþÁ²ï]ë|ø³)ûJ|R#Ÿù–<=Ç¿üy×ÎúÁ¿Ù~Ñ¿Ѿ:xñgµñ6›ÍÒhz9—VvÑ­dYeF¶(Œ¨Ë…P $Òa¹ìÅC/?+œßßÚ±¾*bOƒ^9݃·Ã:™$פ£¿O¥rãáWân>>|FœcÃú?ù+X~øÙ¾øÌÂõøƒq>Ôex%Ð4dŽáVÙËFÌ–Á‚°¤ #\|¬öï„çÌø)àE}¹ÒñÎ?åÒ> m2ìC½ÏËê =zô®#à×ì³âÿøR^‘h‰¶«qáÍ6d·‹ÃÚÇl­kXўбU(,I rs]þË~0oÚ?â™$àgÃ^?Ÿú1OÇ×ÏÆ/Ùð‚ÛOŒõAÓ§üHok©‰aPTu ®:ô§JòÏÚsösñŽñsà#_µ7¿ñn¥mÅÆ‰£#ér.w#O ÇlÙÑZ"$ ¡]ˆ€5¶ßüeæí?´ÄsÎåχ´"3íþ‰@Óâd%˜áF1žõÏ~ΤÿÂÛý¡<À|e¥eqƃgÅeKðKÆ‘ŸôŸÚâ0#×ÃúO·üzó\¿ìáð'Æ×>;­·Çˆ2Yx³N·ž{} F’MMÛF´‘e•d¶*Œ¨Ë…P É ¢¤RËœmùGSëúV7ÅÑ¿àÇÄáÕ8ÀÇØå5Œ>øßvåý£>&e†Iÿ„s@Î=Oú%sß¾xÜüñßÚâMÊEáÍJG·›ÃºqÝ*ÛHZ'd´ € • €x"€=Oá<ê>|? ´íð¶’HfÆA³‹ó­ùT¢ío‘‰#pη¦Îkæoƒ¾ø‘Áo OÚâ¼Gús¥¼~ÐÞ+hÚÚ2±£=©v 0£q'“šèñ&Úh?ˆØ\ŒÿÂ7 €²PyñZo7öˆý›Ë|­ÿ ¦®:cþeûîÕë6ù+Ãýñß3Ï=«ãŸü7ø‰¯~ÑŸ`ºø÷ãÛ™n·šßÅ:lwWi hÒKªHÚ5£¬³+[FT+…P $¨™·ð¡z³tÜzn¬Œ·Áˆ ]Çš®qÆqg(é^bþ ø•/ûBüE;‡ÊG†ôŸ\ÿ¢q\ÿÆ?üD¹ø1ãa7ÇÿˆQ'‡ux%ðöˆ‘Ü ¶´LÉj+T• àðEzïÂQæ|ð Ÿ éCàƒö8¹Ím¬Ñ‘ÈÚd<†õ?ç­xW†>‹àÇ‚vþЭc“ú|‘Á‡ô7Kd6Ñ•íKQò‚Äœ.I5¾>øù ý¡>$c‡4ïþ‰í@ÿe ñ×öuÛ°ã-[iQÏü€/:פ h³¿ @Ý“ŽÿZù—âWÁ¯jßþÛÜüzøp÷ž(Ô¢¶¹“AÑ’M*EѮݥ…RØ#³"´dHv¹ Á¯g_€58Ïí#ñEˆ§†¼>ö΂“±ÙÝ«FΙ#îž:ÿZó_„xoŸ´FÓ·oŒô ðAeÅmËûìüQ¦ÇsvšŒòêŽÚ5¬‹4ªöÅ‘c Q„‚I4w>–3æìÌíþ9=ýkâ|¿ñi|n¯€ÿðŒêG§CöIzןŸ‡¿K'í ñ“9%¼9 ñèãÓÚ°¾,|7ñíÇÂo >?üBº‰4 ù$‚_hˆ— -ä&6dµ ¡€ÆA{ÐIô·Â¶ÝðCÀAH<1¥•>£ì‘sÏ|ÖÐe†Ù Ćݻq'Ü}3“õ®áÆoÜüð&|à(ž? éˆé'ˆìÑâeµŒei2 äŠé#øÇà4VâÃÒcâ["[ÿ"ô Kã{ÅýýšËżo«œúøG¯€5é^kLî;£è GNÝ+Ä~:|kð2||ýœvxçÀÒÇgãMZk™b×­dŽÕA½EyXI„Rìª ÀÉ©¯M?ü fÊü@øv n>%³?^’ÐFN]¤ˆüËÔgƒÿÖ¯,ø4ÁhÚQ øÛHêqÏü#ö=+±oŒxÆïˆžÈå>$²Ç‡ïkÊþ |mð4¿ÿhÆoø"8¯ xy>Ò—ç?cжÉ&ì H#ýãÿÖ®àÿÅŸ¿Á üwàX xkLŽe“_´Y#e´ˆe2dG óÆ+{þׂ7•<ðñž¡ÿY@ïŧð¾?g²§§ŒuSלÿ`^ôÅz<,m.H篵xׯŒ~ O޳ùx2hí<[©Épñk–®–Èt;´ # 0ŠY•Al +ÒâÇ‚ARž<ðíê?á#³ ÿäJÝ.­„ ýìŒúzw¯#ð&_öý¡>^‹´¦8É aYúW¡‹> ó?x©PÔ϶~Ç.9ô4«ñcÁÆ`&ñÏ0N>_ZmþþzÖÅ¿‹~ ?¼n‘øßÁ2JþÔ‘=vÑšIÖ@I–bHÀ¸¨6¹ïÿFº|+¥uä7ú]»ÖúMò¨Cô“ÀÿõçŸ~1øçà_€¿â¾ðRÇá}.)OÙ£Æëge*dÈ`ALWIqñÀ²HþÃî›X7‰,ÈÊN+CœóÏÚ·pø«û9¨8ÝãTŽÿ„~÷ô«lÆ_‘¶ãol}}«‘ýªþ1ø$|UýžE‡Ž|2ÚøÏSšá¡×mdKDmñäe“¥ÙTŽHkN?‹^ \ ÙókÊþ |jðEÇí ûE7ü'~ …oŸàg€ƒ|Að&/ iqËž!´I"u³ˆe2dr0{õ®…>/x°áaü>ÎpAñ%Ÿ8?õÓƒ@ÏÆ ÇÿÙ¿iÚµsžÇþ)ëîõéR ŽÙY¹Ï –Ï×"¼OãÆÏŸ³›ÿÂwà‰RÓÆZ¤·2E®ÚI¬m Þ¢´¬²a»*‚Ø;×§'Æ£.£‘ÿ 5Ÿ¯ýtô †IcÜuýÌwü+ç]? ûP~Ð)Ûé$qŸù€Ùô¯k“âÿ€÷ÿ á÷$œÙt÷ýç>µó®ñƒÁW´×ÇùƾÜø«J–ÞVÖíR;”]Í£bø‘C«) #¨¤ö*;é"‘‘Xç¦GPzãôâ±~)¯üYŸ—$7ü#ŸÊ ã6’ÿ:Vø³àÆÚ¯ãôäŸZ~@y•ÎüVø«à¸~ øàGã_ÈòxsRR=~ÕÙ­d D™f$€Z‚Ϥ¾Ÿø±ß‚žÒJçîô(³šß?¹• 9Ào½ÇLþuÀ|øÓàIþxÍñ÷€ãx|+¥ÄÑËâ4xÝm" ¬¦L©A®‘¾2ø9þ±ÿ %‘ý|Îõ¡‘絫ñ_ösUùqãP($Å?{ÅO·lYÛŸ”Oú×)ûXühðL¿?g•¶ñß‚¦KOêsÜ<:í¬‰khWˆB²€»° wu~+x,®_Ç^,­¸ÅAiÈõ8“­n83çí';WŸ—…翯ZÂý›¶‹¿´KXÂk¥tïÿ #O?|¶xçÀŠOaâ3žùÿ[ë\çìÙñ“Á_ð·¿h´xçÁP­×Œ4É yµÛXÒê5Ðíš62êYI\à©hÝ—÷’pdaœÂ°¾-œ|ñê¡ÈÕlö9x>ôñ{Àʤˆ)Ôâ;<ôõó+Ÿø¿ñ“ÁüñâÿÂyàLžÔã‰#ñ£É+µ¤UTI–bHjrÿ æ1üðNõÁo é¸ÿHºÖêÈIUr’6ýßÃõ®á/ÅšðWŸã_$©áÍ595ëTteµŒe2dAuâºø«à°‡><ð;;`‚¿x‡ÔIûK~Ñ Ïü%úPëÀØ\ŸZõãñ—ÀЇþ.ÃíÄ}ïøI,¿øåx„þ2x*ëö‘ý d_ø-#¹ñ^—,¾·j±ÝFº¤lѱ|8¥I\à©è“G…Üd$ž½Éqì+â£ÅœñØaòŸ ê`{²KDZ¥O‹> Vñר)ÜTø‚Ï'±ÿ–˜Á¬?‹¼~ øÜGãÃZ”h‘ëÖŽò³ZȪ‰2[$9Îh¨øVÃþ·I_øF4ÂréÎ>?é[‡r¹Fsž™?#\7Â_‹¾ ƒž'ÆÞâðÞ™©&½h’+ HÕ”«I• äyâ·Ûâׂʰ><ð1c€ü$6™ù€(xº0?i?ÙØäpÕ=ÿâA{þ¥{š”ˆ€0S8<òx¯šükñ‹Á6¿´_ìøçÇ> –+Oê’ÜHšå«Çl¡Þ i>K²¨-ŽHM{¤<Ö?> Œx’Ïú­ €îl‚ ¸$¾ÿõ¿Jðo ¡“ö’ý¢î!¼]¤«”ÏZõµø½ài‰~ |=uð’YœlÉÅx„þ1x.ïö’ý žø1a»ñV™5¼Ï­Û*\¢èvhÏèee$gGQ@ˆË»*o(FH9õç¿zÉø>xÔ[Ú‘dÿǬ•|TðSæxãÀÌÍÎá ´ýG›X¿~-ø2?„¾1+ã3?‡µT‹^´g•ÚÚ@¨“$’@Çz¹ð¿á‚ÓჶxÀîíáÝ9ÚI4 Fy [FY‹Éf'''’koþ?‚ÕOüP~`Gý ¶eþBü*…Çþ-'‚ÏË”ðÞ›Õ{}–.þžõ­Ðv¤m+ëÍA¢<{ã_Áÿ¿ÆÏ€bø:!uâÍJ+ˆãЭcK”]íÂH¡0êCa²õÝ¿Â_²|žðïõðõ™ÇþC¬oŒå¤øÝû=Åú¡±ÿ‰ïÿZ»g *8e\tÜ3ú~5H‡¹Šß ¼„7<ß_YõŸ»éT¿dŸ‚þ‹´2ÜxÁS‹_iÛ$ú¬‹ihVNR5hÈE.ÌÄ/RÄõ5ÔP´¸ÉedçkÜúÔ_²@#âŸíTíÛã}+y>ŸØ9¦#ÐÏÁßðÍð÷áà ÿгdõ]s\÷ƃ›àGÄð m…µFI#ðíš::ÙÊÊÊË*AÁ}kÐòYŽÒ‚Gloóҹߌq´_¾ ‚aá-\’½låÇäÿþxßà€Ì¾ð+¼ÞÒÝä“ÃÖ²<ŽÖ‘ÌÆ<–$’Ië]ü ðY„¸ð€zŒøzÌä{~ëš>7Á d/…´¥çø¿Ðâý:Öâ*Ĩ»Ÿx%A ì=q@Ï øÏðsÁ/ñãözø#ÁqÇwâýN+ˆãЭQ.Qt;Ç âEªÀ@ ¢½<|#ðAâ?‡þé×þ»2@õÿWþq\ÅÂWã·ìï¸Ìç«ôÐ/GN½-$ ,Ù€3Çlýh‚~x!P1ð€O#þ)Ë08ôý×Ö¸ÏÙßàׂÆÏÚ'Ìð/‚e[_iq[G>ƒm"[#h6nɘðŠ]™ˆI=NkÔcÌÁ‰ùÁïžØüëýŸ§Æ¿ÚD®XÿÂo¤÷ÇüËÖ#¯­vßð§¼ ±¡ÿ…}ðøpIφ¬ù#Ó÷uÍüdø=àk¯~?+àÄSÂÚœ±É‡mãu´•ƒ)åH G9¯BÃ*+(E…§ÔVÆ0áDüAU\áMWŽÿñå/o¥y×Áïƒþà‡‹øÀó;ø_KyOÚ;ÈæÒ6,ÌcËNI=MtS|)ð1säøÀuÛáË< #ƒŸ*—á mø#à ¿y¼/¤ŽOQö8º{ÖÒ8wµ‰Áb2A=¨Å~=|ðQø×û?<àÈRçÅúœ7Å¡ZÆ—(ºã…‘BêCr2®Ôü,ðW•–ð'€÷ÃÃÖchïÝóY¿O_³³(äxÏU8Á?ؼâºõA$DÆ@,8ž¿çЉn\v1 >o€ü œøzÏŸOùgÅpß¾ ø-¾5þÐ{üà©ÓÅúdVë6ƒm"ZÆt;7dJavf `d“ÔשÉ#BÕSÆî}sïð®?ö~mŸh`9-ãM(dœgþ$_Ÿj#¸Kc¬„Þ *ü?ðfãþEË>¨ý×ýzçþ0|ðTŸüwŸø'O ꎎš¢I­¬¥YXFa€xèq]ù¾I$Æ ÷øÇâ+âÄXøãì•Êx_U>øûµdÇÁÿ„¾ ‹à?â„ð<'†4Édy<=hï#5¤E™˜ÇÉ$’I<æºð›ÁL£o€|XðsáË1ŽÃ?»æ“ááIøGáÒºŒËœ]ë}áfÜÐüŠyŒ‚¯ç@Sñ#àÇ‚¥ý¢¿geox-b¹ñ~­ÄQèv¨—(ºã…•DxpCÙ€zŠö™> x †WáïÃâÈðŒÙqÿ«Íþ íoÚ?ör'©ñž¯Ÿü_W¶ÃÚ+à19ÇL°äP7ÿ oÀ¤á~ü<%”O†lðO§ú¯óŠðß|ðT´‡í xÁRCiâÝ.+xŸCµdµFЬݖ%1á» `d“Þ¾P°£U> g½x‚˜ÚWö‹[Æ:@àÈ¿e@1ü%ðIyð€›9àxvÏ?ú/Þ°>0ü!ðL¿|t€¼ †57I"Ð-RHm$*á„yVGzï ylå3•ãæÏ_éX_I?fð€Ýåð¾—+É'‡m$wf´ˆ³³4y,I$“×5Ñ'Áß9%¾|:äÅ7e‚?ïÝ;á 'À߇¹—w„´œ€8û_­tD‚vª«nÁ'ßëùPÏÿ´ßÁ'Æ?ÙäÃàO@.üg©Ãq: ¬isÐo$U,x‘Cª° œQ]*|&ðC–ÙàìÇ9ðõŸÈ}?Õ{ÒþÓåÆ?ÙÃ!~O꧃×þ)ûРþëh\m;z1Ï_ç@áøUà‡gÃÿJރö}?ïßÍþÌß<~2þÑox"T´ñž—ºM ÚÈ–±¶…g#$JcÂ)vf!p2IêkÑDj‘,¶ì£ÔŸoóÒ¹ßÙ¤«|gý¤ )ñ¶•““‘ÿõ—JîácRËðûáû/@†ì²òsß> øãàWŠx À<Õ$OÙ£¤‹g+++ò¤Gq^'Ì=SRßZÀø¾ | ø€}ï ê¾ùÿC›‘Åx7ÂO„þ àÇ‹ø#Á/#øsM’F“@µw‘ͤE™ÜÇ’I9=ù­óð£Á[ÀOø18'þëNxçþYÿœQð›àÏ€ùÀ>Ò÷7§ú$_ç¸ÈRˆÎáÎ?ÃÒ€<ׯÿ|7íû?ÇÿOƒ+Ÿj‘\Fš²%Ò®‰xáeQCª°#*Q^Ú>x!Kcáÿ€p1€|9gÈÇ<ùuæ1p?hïÙíTïUñ~ª3œÿÌ÷ν¶Iæ »n¦8<þT GáGöÞðæ$m²çè UÃ~Îß|ÿÿh¡/| xOþÀðøcUedðí¢I ­¤¬¬¬#È`@ät¯A•0F[îg`+ ã*çà_Ä@¥—o…5|ç¿ú¾¼æ?~ x/€þ/à/±>Òåw—ÃÖ’<ÎÖqgcIÉ''®k¢Oƒþ}ÂO‡ß—Ÿúìú¯Â¤ø7…øà“ïŸé1ùOú]~µ¿"‡÷H|œŽ§üâ€ÕXŸòé.O­n|ø9à˜~xxG—Âúd²<ž´y%sg,ÌÑä’IÉç¹®“þÿ‚c?7Ãï‡ÙR?ðÙ€~Ÿ»¨þ¿~ÈàíÒ‰ðGØ¢Ío.Õcç6ìÀÏçëƒúP„þÒ?<'ÆÙèCàoB·^1Õ!ºŽ Ö4ºEЯRUáÀuVädÖ»øEà˜ÁÏ€¼PHðå™'ðòúU?Ú-¶|hýœJƒòxßV Î3ÿý÷¥u8’f¿ öö÷  &øIà•Á>ð ëœxnÌd}<¾ y¿Á„> ‹ã§í‚<2Úø»LŠÞ)t;WKdmÍÙ#B˜@Y‹1É'©¯e•Ĺx%G Çé^yði~Ññ×öˆ/ÔøÃJç¡ÿ ‘ÿ?…t‹ðÁm.dð@ÉÂÿÂ9f:vÇ—ü½+â·ÁÿÍð{Æ›< àTuðî£"Ij¯-¬„2°ŒA­vì¡Àༀ`7%‡þ_b|H_'à÷üÝÇ>Ôóê?ÑdûÃ×¥ygŸ‹~:›áƒHøñå"Ð,#IÓ_ÐÕ.P[ *½Ð``€@##5»'Å7Ê¿³ïă©ÿ„“Aþkë]ŸÃ&ßð‡ÁPv§†tÜœ`cì‘VÚÛ'åÀ`óסéJÈ|ÌùÇã'ÅOÏñÇàB¿À¯ÛOе-­§×4w—Us£Ý#C%ÉTeFi ¨Ú„[½1|kñ ¿ìññ¨à/ü$šþWu¡ñ(‡ý¡g0?ñXêÀ™Ø¼×¯0Ü»zƒów”Äxü&_Žqû<üGäø“@äûµ×'û5üzñdž¾1|}†ïàÄ;ùï|]§\][Ûëº*>’ë¢ÚF°ÌÒ]‘™e2ÊÀ$0"¾˜·±fÖ<öÏ·ç^Qð¨øh?Ú-˜nð™é9P ÿýï@ûLxɰ[öoø¥ýÑÿ‡¿/øüüëšøÕûNxÔüñÌ_ðÎÿ-#¸ðæ¥ ·ø‹BxíU­dV‘Õ.Ë•PK œkÑ„€(Ân<€1ÔŽø¬‹;[à§ŽþP øWUkIA4ä¿¿hÿŸ‚Þ þÄ‹„‡Ãš|â-wDD¹UµŒ,¨¯tU€ pFEtGö’ñi?òo?r€Ž|C¡sÿ“ç4ß… Âð0.ÞÓ0¤U¼ëó0dó·§Qõ !øÁûGø¶çã—ÀibøãûGÓ¼S©M¬ºÞŽÒjŽÚ5Üm MÉTeWi HUJ¡’@¯ROÚ+Æ{€Ùçâiè00#s~Ϙgø@Ç?ö÷ë\ìÿûOx¿IøÝñóÍøñùõéÓÜ[[ëº*I¥ºh¶‘¬34—AdvEe à"½‹ËÛ¹c߀§éŸzó¿…ŽŸ´@»¿á/ÒÀ=ÇüH¬¹'pq±ØÚÇÄ꘳·Å3‘Ÿhãþß+žøËûVx¯þ¯Ž¢ÿ†zø•h—Ôa’æmBx­‘ídV‘Ö;²Ä(;ˆP[Œšë•ÀR!Tä©Éÿ çþ*b?‚Þ$Ð8øÖº/’oøëû7—É#Æú·$dŸø§¯k»DI ¨Üz•'ž¿_Ò•®;Øò6ø‘ñFÿg‰#ýïhÿäßZà¿gïŠ?ŸãWÇæ·øñPšëÅšt×PC¯hÑ˥Ⱥ5¢,2´—A]™d2ˇœä¦d` v*B/ Œ“Ï¿á\gìþürý¤I$xãHÿÔzÆ„¬ ÜÊ‹â?Äe ŸÙÏâk=üMáüõÏüþt®{ã'Ä¿ˆ|ñÈ“öuø‰kžÔ£’æ_hO²5¬¤uK²ìª $('šúGó¤FøôÇ×`ü_>wÀßí?ó*kÀÿ9*b>vø=ûFx¸|ðBÂør±xsN…'‹^Ñ.Õ-£ *+ÝU`2@<€k¡_Ú'Å¥yýž¾&d’üTZzôÿÏÒ¤øRíÁÏ“òÿÅ3¥‘ÏQö8³šÝÛ•0¬ã“×’sÇá@Eñ;ö‘ñ}¯íðá¾üD¶“MñF¥46Òëš3ͪ;h×q´P²]FUs!2P€K²ŸÚÅû™û8|S%H<ø“ÃãñÿÏÖ¸‰ ¯ÇÿÙ÷@ÿ„ÇU ×þ$WkÔŠ’¤oËcÓ…çÿ×@MûQø½¢çöqø¤U¿»â?çÿK+Ç>þÐ~4Õ~?ü{¹´ø ñå¯üS¦Ëqk»£$ºS®‹iÅ3=ÈGfEYŒ°À$E{¹%XF¨§9ŸóÅp?ÛoÇÚÇŒô¬ã¨ÿ‰ •&ì4®(øÅã}€Ã=|KP¤ˆ´øÇÝ`|cøÕã¦ø+ãa/ìÿñÝúŒos6¿¡¼vªÖÒ‘•.‹2¨$ ’šö=Š~ðáTðÀv&¹ÿ‹‡`äfºAûIøÌ9aû7üRoú<<¹¼©þÿ KÀdÏ…t¥9럱Å[í–!JŒ68åxÇôëVAóïí)ûHøÊçãÀ)døñOm?źŒöðÜkÚ,²j®Ú-Üm -Ó*2«4¤ÈUp„Iºx¿h$ŠbýŸþ&ïÅG œûÇßZ±ûG¶ï‹ß³×”¯ü&š¨8äcû÷ÿ­[.ŶeIê3ñÏIûCøÂQ…ýž~'1S…ÿŠ‹A Æê¸ÿÙ»ö”ñ•—ÆoŒ¿~!ß¶£âÍ:k‹{}wEô·]Ò1 Í%ÈWfUƒe à"½HBáO_”ý r¿_gÆÚ¸%ÏŒ4¾\ÿ`Ùu Å¿iu?³Å!°çŸøƒŽ¿ñù\ׯoÚkÆ'à‡Ž~ÎÿlÒ êP½Ä¾ О;e{YJëÙfU± À8®ùPÁ÷m¡I8_r+âÈà·”œá}T€?ëÒZñŸ„¿¼fÿü|øt±x{O."×´TŽáÚ5ª½ÐeVpƒÈí[Çã_ŒÛ_€_OR1â CŸô¯¥nü';þ ø'x £Ãbà¿è‘+_vÀÜã!O~žÔã^?øçãXhO‰ñôYx£Q–ÞÒMwGiuWmê3L—%Q•Y¤&B£j 8í'ã×÷ÿɹüNÈ^¿ð’h§úeqÞ5Ü¿´/ìüÇißâíW3ýƒyúײÆK°ipü€?‡>¼â“ãÏdïýœþ'î àÿÂGáðqÓ?ñùÚ¼÷à'íã;ÿ‰øñùõi·3Û[ëº"I¥ºè¶‘,2´—A]™d2ÊÀ$0"½Úb¡p£ 2àÖ¼ëàþÄøíûB™ ÿ ž•õÿ‘~Ëšß_Ú[ÆçþÃⓜÅIáò?ô²¹¿Œß´çŒ$øã”_Ùçâ]ª\xoQ…®eñ…$V¨ö²+HËÙrª bpp z:•%—8 O#Ò°¾-äüñèùHÿ„cU#þ<åë@?h_Þ û9|L»þÓaK˜|E ¤wH¶±ªÊ‹%Ø`¬ 0Ⱥ9?hOJïÙ»âžHäxx:gý2µþŸø±ð2?áÒ‰$wûXãñ5ºÓ“;Žá€ úÐ3çÚöŒñÄ¿gén?g`ñn¥qom>¿¢É.©#h—q´0´wEQ•¥&BªU±úý¨|`Ê ýœ¾(¨Çèqþ™Ú«þÑÈGÆ_ÙÔüÄÂkª•Üs‘ý{]IàÜòO¥2öñ€ŒÆ8üResâ?õÇQþ™^5ðËãÇu¯ÚãÍÕ§ÀOÎoüS¦ËqhºîŒ“iR.kÅ35ÈGfEYŒ°À' ïRxË £½p›ñ¿ö…2'Æ:Q(9ÏüHl¨“|]ñÀq¿ö|ø•‘Ê|G ãõ»¬Œ_üqÿ kÆeÿgÿˆ–±ÍáíF'¸—_Ñ;dki‘Õ.‹² $ “Ž5ìCl–˜e8@~˜úþuñQ |yó±-áPäÿל¹c#àÏíãƒðOÀËÿ ïñ*é"ðÖ›w0ø‹BŽ;¤[XÔJ‹%Øe 0À0+£ÿ…ÿã™ ?ðÎË3ÿ '‡Áǧü~{VÇÂwÇÁgøSJ$¨à±ÅÅo«G½TòѧÙôõ “æïÚGö…ñ¬_~Ëuðâž,<[¨Ü[Á>»¢Ë&«#h·q˜b1ÝFDf”™ ©@9À®«þ'Ũö{øœ«œø¨´’{ÿÇßÿª¯~Ó‘mø©û=|¡ü&º£N1ý{ëWˆýÞb •àcªÐ ~Ñ^, L¿³÷ÄÆÇ>!ÐxÏý½×ðâß|Gñ‹ãÌÚ/Ào_‹ÏéÒ\ÛÁ®hѾ”é£Z"Ã+IrÙ‘VPc,0à"½HJ»]c ãÏQô"¥ý‘À‰´R°\éú`²47¾#‚J~Î?— ÿ‘›@8#ßí+Ÿø½ñâ<Ç?dýkŸøÃð‡Çoð[Æí'íñî(|;¨É%¼¾ÐÒ;”[Y FÌ–¡”8È%H i…_…ÊGÁ–ðΘ3ê>É ÿJÜÅÔªŠvIÏÿ=k€øKû;x¼|ðK'Ç߈ÖÂéóGm¢¼VÊÖѰYíK í‰'šè?áüXòOÚâvT`øG´Oùôô FGÄ¥ã¿À#þíQA-é¡^~•éÎr˜R§ž 8=?•x7ÅïÙãÅÉñÛàLmñãâÜ—Þ)Ôa‚æmFŽ])×G»‘¥…RØ+³*˜È2€ä€½ROÙÓÆrß´?Äå gwü#šsÿ€u-\¸ÊÇPʱc,ø‰<îkÎ>H±|pý „£ÌÏŒ4 1ßþ$Vxçµo·ìõã »ÿ᡾'üËž|; tÿÀ:ò¿…_oÚâP=ßè<ä§5…ñ‹à¥ø7ãS/Ç߈÷QÇáÝFW·›@Ñ;”[i DÌ–¡€` åH8'v1ô/ÂBà_ÃÂäžÒ€ºÿ¡E[«+oÃ6F õÆWÎ_¼ ñ"Û࿼ŸÚâ¬2øwNx­âðö„ñÛ!¶Œ¬hÏjXª‚$ñÉ5ÐüIS´þÑ? N§þ­ƒÿ€”É:_wÇ?Ù·spÞ5Õcðõ÷ë]Ü·v6p1øzq_0üIø[ñÄŸ´Àkÿ¾>¹{¿jQÚÝI è©.•"è×nÒÄ©lFtVŒ‰ ®Hàj?³çüµy?i?ŠaXü#^ËcþÜ赈cœ‘Ó×üýkŠýÉ?¿i"„î8Ò9éÇü#ö9íKìíã‰såþÒ?ÊôÝÿׇøÿÉ>+Å~ü3ø‡á/Úãõ®›ñ÷Çöímâ5.®cÐ4Y%ÕdmÑÖi•íJ#*Œ© ’H×r&ùË#w;¸÷ֹàwÄ6‹‘ÿ®¯ÈÉûµäÃß/Þ~ÑÀ'Â5 úgþ}+ŸøÅá?‰Süñ²ÉûBüB¹|9¨É%´¾ÐÒ;˜Å¬…£vKPʬRTƒÎA  ß…-Ÿƒþ2lþ/$ œ_§ZÛr«/îÀPçœv¾Ùæ¼ÏáÀ?ƒ~ 1ü|ø‡Ëáý>D¶‡AÑ-Q­c"%gµ,UA$àrMt-ðÆ_>h/‰ƒ Gü‹º<×§¸ eo‰(«ñÛö|²‹µ@Töÿ‰ ç¥z¤`´dI´ñ– ŽG×±ó‡Æÿž4Ó¾7| ÇÇ_ÞK{âF {™´M$Ót{§ibT¶ ÌÊ­X‘‚¯A? |zéøh‰u8ðî…Óÿ?ÏK}áÁqS€zœcðí\Á‚?áx~Лَ|e¥dÜ˯ëUá_Š/ö‚øŒ3Æ?áйôÇú%yŸÂ_…¾=²øÝñÕm~:xîÙí|O§Ewq‡£¼šœ£ÚºË*½±DeB±Q„Œ’i=F¦Êì%X©$q¸ž1×ŠÃø¼ Ÿ¼|EÛÿ¾©sþ‰-p-ðÿâ(-û@üF+ÔŸøG4#Œúÿ¢VÅ߇>>›àçüzñíÌ)áýEä·—AÑ+•[i FÌ–¡À` ’¤ƒSÊW1> ø ( i@ nÿC‹Ö¶Q#I<«‚@çߟҼ7ᯈ0üðSGû@|CµŠOéÍ´~ÐÝ-‘­£+³Ú–ePv‚I8’MoŸ…þ>Þ»¿h_‰^Äxo@þd« í!ÿgìÿÂg©àç$Ä‚÷5¹›!ŸigÜf¼‡â¿À¿ø—ãïÀKOãÇÄ ¿¶x§RŠÚåô-9t©F»v–K`ŽÌŠÑ‘ aµÉ85ëoû'x˜Dý£>)uúÿÛ?óŠ™L»*–PBä`ŸLvâ¹O€a¤øÃûB [§Œô½Äœÿ`ÙWNd¯;hŸŠ˜aÆ|9 tôÿ:ó²ï‹ÇÇ/ÚÞßãçÄ[!¦x³M‚{˜4-Iuf}ÒA4Êö¥Q•c0 ªA9$Û>EfUv‚s»$ÿõ¸¬O‹iÿgLJ’…µN€gþ=%¦Iû2x½Neý£¾(ƒœcþ¿çüyû×9ñ—öeñœ_üríûC|LºX<7©Löóx{BŽ;¥[Y£fK@ÁX ¤©“ƒ@ü&Dƒ~Ý´±ðΗ÷ÞÿC‹=+h8HÛo NBç§úWü!ýŸü`> ø%ÓãçÄkT—út©oƒ¢…£¤šc.u!–K`®YTÆD€HצŸ…ž>Ž2Sö…ø’Y›îÿÂ9 Ç×?d¢÷ œ~Q™€è0ãïŠóƒ²møóûC>pÃÆZV=Ïö—ëþ^/…^=á?h_‰+–ïáÍgßþ=+Žýœÿg¯ë~=~>|BÓå²ñn›osso¡hÏ&ªí£ZH²Ê²Z•FTeŒÂŒ $d“LG»…2óGB\gÒ°~.>ß‚ž>2¶â|/ªwíö9GOšŸ³_ËûG|Rebs·ÃžÁÉÿC®sãGìÍã/øQ~7y?ho‰wB êRµ¼¾Ð’;¤KY¢vK@áX¤©‚(Ò~ÆÒü ðÖÛ i=O >Çòé]íѲ°@Ä瑟óŠðŸƒ > ÇðOÀÅh_ˆÖ‘Íá½:H­¢ðî†ñ[+[FDjÏjY•A xä“]ü*߈[ˆOÚ7âYƒŸ ø|{sþ‡EÇaß´~[ã/ìêzã]P‚qÿýítŒÿf(NJŽNÇN3^%ñ£àwŽµßŽÿ­u?¿oóÅz”v×2hZ2I¥Hº-۴Ьv¡$fEhˆ2…r@^¨?f( ~ÑŸ±À#þ½žzqö:lFU‚g;AÉ$ƒôü+€øA°|qý¡3ÐøÇJê{ÿaY~•Ó·ìÃãg?ðÑŸGbO†ô ü“¯ øUû>xÆÇã÷Ç»uø÷ñѬ |-ñú|ðF?h/ˆv‘ÉáÝ:HmâðîˆñÛ#[FV$gµ,UAÚ H&º ~üA22ŸÚâFå ÿæƒùt÷ ý§ÿÂÒýžX1;¼gªNN?âC{Å_l«-€SÆAÁÇ|ŠñïÚá7Ž®þ.ü ¿ü{¨µ×еí§›BÑã“Lq£Ý;KÇlÙ•Z20Úä u ðÆ™Ù/ÇßˆŠØÉÃÚ9ÿ·Zî y‹6oTé‘ïïV¿d"?áe~ÑL¼ ñ¾—ž9Çö•yÛü!ñ°Ë/Çÿˆ¬ÀÿŠBçŸO²d×3û:|=øƒ¡ü]øêš7ÇéÿgñVž—sÅ èòIªJÚ=«,²¬–ÅQ• ÄaA äÐÙèÊä™pÄà<ƒéüaüR“þ,·T9Áð¾¨0W¿ÐäÁúõ¯!ÿ„kâQßöŠøÏ?ñLèOù󬋞ø“sð‹Æ)sûC|B¹EðýûIo'‡´(Òtò™-Ãå%H<ðsHv;φ$Ÿ„¾ 9ÿÂ7¦ô?ôéGò­‚æFù”Ýéÿ×ú×ð¿âׂ.>ø3wŽü¯‡4èÊ7ˆ-ãameei8 ‚0G­m¯ÅŸG ãÏ“‚H>#´%¿ò.)ˆç>.ÌÇ?Ùè©;‡Œµ\6:g@½éëÅz0ÚJ¬—*È¿O¼oãÆOÿÂõýŸÜxßÁR­·‹õ9n%‹[¶tµFÑ/ZV„™PêHëÑ—âÏ‚OÇ~RWi?ð’Yõõ¼â“)£÷LÊÀ€;HǾ3þy¯<ø9ÿ…çûCùløÿ„ËJíÉØ6Gšé‡Å¯yMˆ%ŽT7ˆìò=²$¯9ø7ñ‹ÁSüvý ‹x×ÁQGuâí2ki%Öí•.Ut;8Ù£bøu¬¤®@e#µ õÐìûŽXÓÒ±~+ÎáIx÷aàø_TÁøó—­"ü\ðI~|wàE8ê|EfÀûÞ}k âçůÅð[Ç^_Žü,¯áI"Ž=~ÑšGkIªªÉ’Ç 94ÂçMð˜¨ø'à#ËøEô p Àû\LúÖíÃtYÜ2?ÙÏ¥pþ1x*O‚~_øNüøkLÑüAhŽŽ-#L€ŒrzèâׂäpOŽü@ëâ+2r:u–‚âÚ¨øïû:2ÄøÇU-ß?ñ ½ãé^œQŒG~æWÁÃc= W‡ü^øÃà±ñóö~h¼oàÉÛÅú¤·G®ÚȶÈÚâ+ÈÂL"—eP[Œ°ëÔÇÅ5¹ÿŠûáþàs‘â+<ƒëÌ” ¥‚FÆRK ’Aÿ9ÿ8¯'øjü4íSÞ1ÒJŽÇþ$^µÞ/ÅŸ¼{àpãÄ–}缯%ø]ñwÁRü}ý ™ükàÕKŸirÛÉ&¹l‹p«¡Ù£$¬/‹ß¼Ÿür±øçÀåŸÃz’F‘ø‚ÕÞf6’€ª‚L–$€Îs@Ÿ P·Áo’Cy~Òþ_PlãÏÔÖæUðÌüGœ€1×ü+„øEñoÁMðwÀ¬ ß¹<:¿Æ¿Ùï9Ú|eªí%¸'ûöºòâ8•¥eÜ1ëéÍyoÇŒ> ÿ…ÑðÚøÛÁrÃkâÝNYÚ-rÚD¶FÑ.Ñ^V„ÙT€I½vãâÏ‚ˆþÏÎp|Cg€:c‰)’Í·—ÍÚ%‹oe$á€ÿë×›|0¾8þÐ •ø«t¼çþÀV×½uçâÏ‚”+ø./ƒ>6[ox)Ýü7©"$zõ¬#5¬¡U@“$’qÔô @ø])ÿ…+à ¥OüSX9ÁÇú_ã[q®[lxeîêsŽâ¸O„Ÿ<'ÁÏ)ñÏ‚c‘<1§$Èúý¢::ÚÄ 2´™AÕ¶>+ø-˜ã¿ç<“â;>?ò'µRñ“¼ß´—ìêdûÍã \ÿp ßñ5îÊAÈÀn.;çüŠù£Ç¼í#û<Ê|oà¹b´ñf©%ıë¶Íª6‡xŠÒ0“¥ÙTÀ$×ïñ‡À²³“ñáøbÐ|Mg´§›@ÛÊî\'ÕŽ0+Í~ Hã÷í(Êqÿ¶‘ŒsÏü#ÖÒ”0#ý/ñ­Ý¾Yó $ãw×ë\ÂŒ Ÿàw€ÃøëÁ ,^Óchäñª#³ýG™YšÞç/ñŸbümýž×q`|eªçqã?Ø7¾¿…w±¾ñò•$‚ e¸íþ5ä_~/ø)¾6~Ïæx-’ןœ·E®ÚÈ–Èt;ÄW‘•ñ.Ê œd°Mw‡âǃ ~çÇžCúí×ÌíT¶"OS Œ—ÇÊIùO¶=+ögWŒ´pŒù´ ÁÎü€,½*&ø³à¢ÍŸøÁÿІÌo>¼IíX³/ÆO‹ÿ´/™ã¿[-ÏŒ´¹íÞmvÚ8îÑt;4fšL:‡VRW#*Gj¢O{ á\ÆO]ínÃü÷¬OŒhÃàÄC<'ª¹q·ý^)ñ“Àäø¯þ» Ùœs×ýmsßþ1ø?Þ=#â€ç–O j‘¢Gâ Gy­%UD¤±$€:Ð_ö‚>^N|-¥©Ž¿c‹©­øÈÜD£,~fœž‡šóÿƒŸ<?Á_ïñçÇá2)#“Ĉèëi*ÊdÊAÈ<äW@¿¼(ùü}àTqÿ™,}ÿ{þqSmKF7ħ?ðѳ‘\‘ÿ ž¯òãðÞþZö»•3Àrƒ¸ô&¾|ø£ñ›Á'ö‡ýžþÉ·Œ5I®eMvÕÒÙB¼EyI„ÙT€I©¯aO‹þmëÿ áüaÀ‡‰l‡#¿úßóš¢^çE¸9ݵ‚È0F7Ž2O½xÏ÷~Ñÿ´cÄi$`nÇüSö]»úW£Ââð3?Íñáâ†åŠø’Ë'Ô­¯øgñ›ÁþÑ´C¿ü‘]x»L–ÞG×­’;”] Î6h˜É‡Õ”‘‘Gjz¡b’œƒ0~œv¬/‹E›à¯vd†ðÆ«Ï?èrôhOŠþ(øñ÷€aÁ>"³?÷ö°þ/|_ð<|x©ãŸÈóxgRDXüChîîlå ¨¢L±$€1ô  ß ›Ïø'àD  id“Î?Ðâ­Ð¤¦aÎ œ–úúWð‹âÏ‚¤ø%àAÿ ï‚!h¼7¦¤‘¾»h¯­¤JÊÊdH ‚¥tâ÷‚·ž=ð$îãÄVg?ÖP#ûB~0~Ï£n?â²Õ 'ŒŸì+Ì×FªcŒJ„À>¼ô¯9øýñ{Á²ü_ø x2aoâíJ[‡‡\¶‘-£:Üa¥a!¥Ø(-€KÞºÄø±àô_ø®rGöõ¦ôgë@r#0Üv–ò‘Îq\ŸÀÑŸ´vPßð˜éœûYÿõëROŠÞtÂøëÀà'ÝÄ6™÷ÿ–•Åüø»àÏø[ßüÿø6$¼ñv™$.·l‰r‹¢Ú!xظÞ)\Œ€TŽ¢£Ùƒ˜‰ó<äŸîƒÐ‘X¿£ÿ‹SãV}Å¿áÔNƒì’tÍ4üZðXrÏ㯒{ÿÂCfBÿäNµ‰ñKâׂaøMã?ø®¼#·‡µãHõûWgck TI’I8ÀæË¿ >ø.„þ'Àžc/‡´çw“A´v•¬e™˜Ç’I9$÷­ãð‹Á±ÿ98Éðåžù})ÿ $að‹ÁF%“ÃZ`%6±ô­ˆÈd&]¥F{ç8*J<›âÁï]~Ð_³ò¯‚|‘Ýx»T†æ8ô+TŽåWC¼p’(L:‡U`yõìð¨<WÀÎ1ÿ"ÝŸ'éå×ñ1_´ìêC7ŒuVÁä¯üH/zW®«°mÑù¹“ªç;O×늤D·0á¤%WÀÞx]Þ³çðò«Ì> üðD¿h`< à©ÒׯT6ñɡڼv¨Ú›²Ä¬˜E,ň±=M{R“3‚à ”gÞ¼ïàßü—¿Ú3wi=ùñ ²àS¹Ò„^]êÞð'§üS–ÏÊ÷®wãÁïÉðGÇ›|àT)á}NT’/Ú$‘2ÚJC)åXGB8®û$Èÿ0Ýœ®98ã±ÿò/Â<ÇðCÀ^^âíá(¸ä}Ž/ë[±DYA;›=ž½ûHüðZ|^ø¶ž ð\isâýJ„‹Cµ.c]íÂÈ«C¨p@ ¢·¥ø_àç §| ŒñÐÿí?ÂÚ/ ñoö~…Ï5AÇoø^Öì2B Ü À¯9úú@mð³ÁE†ßx.sáûCƒíûºóÏ„_ <¿þ;+ø7Áî–Þ*Óa·ŽMÙÒÙ[E´r‘©L .ňÉb{ׯ°bÍ€rß7AÏùÅp @ŸÙÁb<]¥ÿéŽÎ“Øksuþx9ä$x#À»vƒ‘ ZuÏÝÖ'Å„¾“à×]<à”hü;¨ÈŽšªH…md*ÊÁ8 Œ‚;×u˜Éa€~ètôǵa|R?üqŽøoTÝŸO²KÛ ¨,ÈøQð£Á±üðSIàÈ_ÃZl$š ³»³[FK3òÄžIõ­ãð³Á®ê­àOääãûÍ[9è?wÒ—ák•ø7àB»N|5¦|î~É­©1l r¥ñÎÓÛƒéZœ‰~ø.ïö—ýŸcoø5!ºñV©Ä+¡Û*\*è—ŽEáÔ:«rPzŠúüð2°ð¯~z|5eÏÓ÷_μsZlþÓ¿³É~[þí[v’°o¾„(ó0Úveˆ‡ùí@éøAàR>|?ÚqŸø§,¾_|ù\õ¯.ø%ðcÀÖÿ´íÀÞ –;_éPÛE&k"[FÚ “²F¥1—fb$ž¤×·¬`Œ#+ÀØ×š|Ü>?þÒGåÈñ®‘ÿ¨õt¿ð§|“qð÷À$mÈÿŠrË‘žÇËäÿ…sŸþxž>tð!dð¶©"2xzÑ$‰ÖÒR¬¬±ä@9 ×~¢)‚ßqXŸYdø%ñø€ð®­·'ïfÊSÒ€(|ø3àXþxŸøY[ÂúTŽòøvÑ䙚Î&ff1ä±$äŸ\×GÁï… 'Ã\Â7fqõýÕ'Á·h~ü<ÞHÏ…4އÿB‹½n¹ (òN úPŠüwø+àfý ?g< àtŠïÆš¬7àZÅÔk ÞÈ©*ˆÀpU€9”¢½1¾x—ü+߇Éꆬ¿OÝ×/ñÅJ|ýšs¸ŸøMµ¦á¾þµèé#Fciç87Áß þ|=Ž>²Éü<ªùßCø9àÈ?i¿Ú (¼àà §Šô¨ ŽMÙ’ÙC³vX”¦f$9$õ¯ªX‚‚»NO®}+ç})Â~Ô´Cº±?ð–é8ìOüHl…HŸ |ßð7[Ãþ)ûN§úºÀøµð³Á’üñ¿—àŸFaðÞ§":hV¨èëk!VR#È àƒ]ÊDB• §,[’3Ïb|TgÁß@ÿŠcTù˜`ôIh?„ üÁøA|+7†tÇ’I<=k$Žíkff1ä’O$ó]øOàÐvŸø-ÕO‡-vè|ªgÂt/ðoÀAƒ>ÒÈÁê~Ç>ýëu$ó[ç'‘“ž Ÿ~½*_rÏ!øÉð{ÁmñÃö~XüàÄKŸjqN‘èVÈ—H4;ÇT•DxuªÀá€=«Ò‡Â_G(ßà/ž9ðݧ\ÿ×:æ>/sñÏöyRFÃã W88<è7¿•z · Ç9êG¯Й„ß |»Ÿx®3ÿ"ížô_A\ïìÉðgÁã'íçøÁ gã-.+d›Aµ‘-cm ÉÙbV ³1–'©¯AòÈQäáÉ–$ûçùÖìÈâ/Œ_´~ÂüVúV0 ÿ™~ÇñíLGr>ø)›áïÃñ»§üS6_ün¹ÏŒÿ¼ 'Àÿˆð€!x¼-ªH‡­ÑÖÒR¬¬"ʰ sï]úÈ7!<œúóX_B§À¯ˆ[s‘á=X{ô)yühçß¾ø>ø¤ðÝäðÆ™$’IáûGy­"%™š>I$äžk¡? ü hð€>aßÃvcúŸ*›ð†P>ü?2–#þ](mÿ·8ð½Â>öÈéÐdÿ>Ôäþ xãö…ýBøÁ1ÅuâýV)Ò= ÕåB½uITG‡PêÏ ¢½•¾xjü=øzy?ðYŽÞÑb¼ûâaÛûF~Îtñ¦¯Ÿ_ùïyú×°HÁNædU¤Ÿ­`GðoÀíGÃ߇…ñ’?á³$N#¯øQðgÀßðÑ?´Jx%ã¶ñ†•¼Rh6²%º6ƒfì±)©vfÂàIêI¯ $bƒsqK*õÆ?ÏZñÿ…ŠOíûHcæÏ4ޏÿ„~Æ€7_á‚oøtÿ„nσÿ~þ•Ïüfø7à†øãÆÿ„À±•ðƧ,R'‡íâqi)VV‚¬wèXƒ±`Ë´ä3õ¬Œà™·nÕ@ãÿ¡ËÈ  _„<Àïmð$wð¾™,’ÉáÛI$‘šÒ"ÌÌcÉ$ä’yÍt‡á‚#|Ÿ‡þÙÀþ».sïåÑð„gàoÃàNâ•ÒI\ðGØ¢Et 2“*8•È?Aë@-ñ¯àß§ý ?g‘|]xÇU‚æ(´TŽéB½p²¨ŒPê¬ÈÈ­zŠ| ð!’/‡ßŠŽ?ä[²ÏþŠ®Kã;+~Ð_³y`ø×Vù±ŒÿÅ?{Î=kÓ‰ÞáœuÁ8ôút }>øÐíø}ðÿ 2?âš³þ~Wã^Kðƒà×àøÿûC«xÁSCkã *xåЭ]-´+7aÈE.ÌÄ.9bzš÷„rÜ®Q}¹Áúw¯.øH„þд‚ŒãþM#>ßñOYõ[›­ð‹Á@ÿ~¯8çÃÖXüuXþx"o¾;hü àD#ä‰$^´IÖÖVVVåHÀÁæ»ø@Y͸œçæ õé\ïÅôÛðOâ°_—º©'xŸx V—ÂÚ\$¾´‘äv´‰™ŒybrI'œšè_àÿpvøáö:ȵe’}ÿwIð‡ü(¿‡ÊAØ<)¤’AÀÇØ¢®€F\3Eò`ŸNzqßô “çÚãàïÇÅ/Ùù¬|à«t¹ñž§ é…kÜÆºãªJ«ª°VÔT¿ð«<"v¸ð?‚òì >O|~ê·kf'â_ìè«ÔxßUþ¥ûÚ[pX|¤1rIã Î1žù©lÖ‡áƒJ(“ÀÞÉ$h¸úÿ«®Oö~øIàßø[ÿž ðdëoâý6e—D¶u·C¢Y»,jɄ٘…À$“Þ½+ÍóÌ/V³Æ¹ÙñÑþ1þÐ…ÈU>2ÒÎIéÿž]a|QøCà–ø?ãA/|¯‡uFMÑ^&ÒeaAô®à+·L‘Ô‚Üã<û¥c|MGªn]¾Ôˆ\ùô’¨ÈáþüCøqðÁ¬¿³ßÄ9Ñ|?awx‹BHî[FEWº  ¸äÅn|FvÜ¿³ŸÄ•×ÄÚþW|W§ü,·3|ð 2|3¥Ÿ›ǤU°Qœ!!Ç=×±¥d>f|Ÿñ¯ãŽü?ñÛà%Þ«ðÇÖ?dñ^¥-µ¼ºö,š¬¢Ý¡†&Žäª2£4…¤*B$^•'í+ã Ÿ³¿ÅsÓþ=úWš¹ûR€>+þξOñxßU-õþÀ¾þµ¤A1*͆ãp9ÓÞ˜¯s~Ò.Šìíñ<?ð‘è^Ýîñ^qð?öˆñ{üsøó,_þ ^5÷ŠôÙî-¢×te“KuÑmcLÒ]‘™Ud2˵À$0 {<‘)PÛw1È/ÿkˆø$øÍûB”wü&ZYÝË¥m/í ã'cÿëñ;8 …ñ‘ôÿK÷®{ãíã1ðKÇ(?g¿ˆö©?‡5Þâ}CxíQ­dV‘–;¢ÅTeˆ“ŽkÓ$!§'.ª |ÄŽ=½kâÐàŽFOüŠú©9íþ‡/Ojvrß¾#üEºøàt‡öxøu xwMD¸‹ÄziuÚÆDW»€ FF@5ÒüHÈ'öqø’7çþ_ÿòezGÂ0?áDü=!K2øSIã?ôåtF±Ê<ò‰$q  GÇ_´ßÅ?ˆ6ÿ¾6«ðǺ{Úø³P–Ú õÍGÕd:5Ú41îJ£*3JL…T„ +püTñ²‚àÄEÏ8 І?òn½ö´“þ.gìèÓŸñ\j½yŸñ÷Ò¼ëáÆ/ü(ÿÝÉuâm>[›huÍ!$Ó]t‹TJÏpÙ‘V@P°€'9ô;b4×qÈã¿\óÏ…x?h¥6Ÿé`îçì;?Ö“**ì‰>.x̹vøñüÙþ cÛþ>«âÏÅïEðÆ¡þøþÕfÐ5y¥×´gŽÝZÚ@deK’ÌHPIÇBq^ºÈ¡‹ÆŠw·Ë’9Ç·ô¬OŠ.­ðwÇ;rOü#ZŸ#ø¿Ñ%äŸn•&œ§ð—âŽ&ø?àÁÀ_ˆ71ÅáÛÒxõý#E´aeU{À0€  nÛüRñÁ`ÃàÄ6Έt.GlµWaðŒ,ß| X+á-7{ý’.ƒ½n(gÊî%Ž:ùsVbx>6xÛCý¢>ÝOð+ÇñIgâ}J[kI5ÝåÔÝ´{¤1BÉrQQšBd*BÎ{¨ý£|j’ÙÏâŸsƒâ_€}Ïú]qÿ]?áþÏyÈÏ‹õR}³ Þô¯Y?uˆØe@ñž{ýGjæí'ã?0“û9|Rôþ_àgþß+Ì>~О7ŸãÇí<_>"Þ=ÿ‹4Ù®m"×´XäÒÝt[HÖšK ®ÎвeÚà¸=ÕW%|â Ú½21ýkƒø|ký¢ÌÙãÆšO Ð,¨Uþ>øáÓû8|NþOŒäås_>?øå~øå?áž¾%Z¤¾Ôa{‰¼C¡I¢5¬ ÈËÙrª b@àgŠõ©â &>P@ÁÜAç¿ù5…ñ}BüñÞBîÿ„WU £¯üyËÿê ;ø9ûax•>xgω·k†ôØc¸‹ÄGt©k‰Q^ì2«¸€y×G'íâE[öuø¨77x‡Ãù'ÿë™øXÁþ øcùY|7¥’vçþ\âþ™üë|º¸Ûƒ´“ŒíyïÆ¯Ú×Å:Ç¿€OÀ?ˆöo¥ø³R¹†Ö}sFy5F}î&†K¢¨Ê®e&B „ HêmûTø¬–Qû7üRÈÀ x“@Àü>Ùô¯;ñð/ñïöW òø»Tè9çB¼¯TwÞƒPGs1ëü¨‹~Õ^.2ïoÙÃâžîAÄ~üúexƒ¾=øÇ]ý¢~;\Åð+ÇÒÉâ}6YíS\ÑÒm-×Gµb•šä#³*¬€ÆX` _Dˆöîn#?çåŸ_™2Oü%º[mÿĊΓ**ì~4xËrøP_þ†- Ÿqþ—X_>4øÍ>xÑáD|A·I|?¨G$òkú+Çj­m 22¥ÑbHPIàõfF‘J°ÛŽœ€1ÐŠÂø®¨>øà *G†uBxÆìÚKK˜¾DUø5ã‰?ü"ýž~!ݾÓ’;ˆüE¡¢] ¶Œ,¨è2« ÁÁÐ|I'Ù×âJ±;²+xóÿ~\k<{cö_j/mÚö$º´­£]£EGrUQšBd*¸BÉ»‘ûAø¾Eçö|ø–vÿ3ƒœzÇßÖºOÚùÿâåþÎÆR>_j€uÆ{þsMd*ß9pKnÎñ§°®s«ûBø½W#ö|ø”Û†?äaÐø\çìÃñÿÆñãÛØ|ø‡©5÷‹´Ùî ·×´XåÒ¤]Ò5†f–è+³"¬£,0à"½Ü©d*T0Èàg¯oÏõ¨?eFÙñOöˆ!ñ¶—Ôà¯üH,¹>”Ð'ÇÏøý›>(g¾|KáÿþL®sãWÇßÃð;Çj?g_‰v‰7†õ(¥¹›ÄZ ‘Ú£ZÈ­+¬weˆ@I!A8 ¯_aë¸' <žþç½sߨ¿À߈+"²*øSV#†ÿC—Ÿzòï‚ÿ> ËðCÀ¢ÙãâEÔqxoMŽ;ˆ|C¡$W(¶±ªÊ«%Ø`a€`<Œ×J~*üA'öpøœóŸøI|?ÇþNs]¿Áý«ð+áþs é#õ?c‹µt,d'Ê0N1þ}èæŒßüw¢üzýŸ®/g߈6&ËÅzœ¶Ö²ëú,’êÒ6‹v ,—EQ•Y¥&BªU$ õWý¤|jɸþÍ¿ƒÿC'‡³Ïý¾T´&Wã_ìáŒ`xÛVÉ#·ü#÷ÕÙ‰†Õ1ò©Ø¾ùúÐ)ÿ 'ãFbSöpø¥0Xø“ÃÙ__ù|à×|#ý£¼d?h?×ð ¾"\Ë}âÍ2iíb×´T—HtÑm#X¥i.‚;2 Ë.×Ùèc$sçÈs‚sÀÆyWÃXÃ|}ý¡È)ÇŒ4“œdcûËúf“UÙ hO*o?³ÇÄÖP:è\ ºç>1~Ñ2_‚Þ9EýŸ>#Û‰ü7¨Å%ľ ÐÞ;EkiJÊ—eЍ%ˆPNšô¹ YX 0û§ûÝùö¬‹­ðWÇ|Ž<-ªm€FlåÏúTó2܇ð_㿎Ÿà¯×þãâUÜpøoM.`ñ…WJ¶±…‘îÀÀ€#8=ÅtRütñÌ£-û9|Pëž%Ð}ÿãò¼¿àwÆ/ê¿ÿh´ÿÙÿâ ëÞx·M–îÖ-EŽM&EÑm#Xfi.‚»2*È e”+€H Šú.M†t¬€d^¼ ã¿gÏù-ÿ´–õÜá7ÒñÿõPþ"Åöoø˜Û¹ø›Ãù?ù9\÷ƯŠ? øã'ìéñ"Ò9<5¨¤—3xB’;dkYJéÙbª b@ãž+è8`2ƒ·‘q€3Æ;zÀøÀå>|Cóƒø¥5a´ôìróŸé@îx÷ÁŸÚ3Æò|ð*/ìïñ6ñbðÞ› W0ø‹BHî•mcU‘îÃÀn€#<à×Iÿ ã1…?³‡Å!» ÿ„—Ãù‡Û*÷ÂÀï…à i$:bÎ.krFT™·8à*ä±õÇõ GΟµGí ã=câ·À5€Ÿ´æÓü[¨Ü[Ás®è®ú´¢ÝÆÑDÑ]2£*3HL…T„ ©ø¿ã`>_€_×-’ˆt!ŸÃí^ÕÑ~ÑÊSâ×ì÷‚8ñ¦©ÇSŸì Þ•»ÈŠJ³c€ç×ñëKq©4p ñ{ÆÀá¾|E²“eoøL¾$,¿³—ĤôÄÞÿäÏ­`üXñ÷Ä{oƒž3ó¿gˆ°Fú úÉq7ˆ´'Ke6Ò••.ËPrB‚N8¾Žy YMê_˜²ð8õ¬_ŠD™ññ`ß jœúôuïLE…Ì«ðgÀB@0|/¦{ÿǤ\ûÖÛa³“´ Áèwg°ÇÖ¾{øMðÛâ?¼?á¡þ"Û£è GáÝ ã¶F¶Œ¬jÏhX…±$àdšèGÃ߈òÿÃFüJÞØÿ„k@àúö:WC±7íB™ø«û:îÈÝãmT7=âA{Ò´ãpÅ aùÛ–9ÁÏjñŸŸ¼{¬ülø©ñëÇׯïÅz”v·3h:4riR.ví,K°GfEhÈ0 ä w«û=xÄÍûAüMSÿæ‚r=ÿÑ)ˆêUÙÜÑäñÂðXÿžÕÅü]ß¿hQŒ4¼`ÿÔÌb¯ÙçÆyÿh_‰H'þíõÿD¯.ø=ðCÆö_>?üBºŽ/ê2ɾÐÒ;„[i ™-Cª¸¤.;3郒„øðùX<'¤rO-›(¸­ýÂH” Ý€rsӞýxŸÁ_€~?<ËûFüLµŽ_ éÒÇm‡4ŽÙ ¬l±#IhY‚‚$9$×L¿<~sÚ[â‰ã$ÿÂ5áï—ÿ$èÏþ×IäüPýAÛÏõCÇý‹÷´ *ù'ÙN ûW ûFþÎÞ8Õ>6þÏ–º¯íñP‹µ(m®'ÐtX¥Òt[É Ð¬v¡]™U£"@Ê’85ÜEû#ø¢V%?h¿ŠY?ò.èü‰@¢.‰ÛÈɼßáPoø]ŸAãźYÚ}°ìû×¢/ì“â‰?ðÑŸÆñßðŽè>Çý¼ßàwì‹â›ß?-›ãçÄK'ÓÉTddüH |}ýžÊgÆ·Ì>ñ?Ø7¿‡§ç^ª9ío#è:šùÏã·ì÷ã=ã_ÀsÇ]Ï{â½F k‹ FGÒÝtk¹hU-‚È̈Ñ `Ép»ôøUãâØOÚâ8È âÐx>ÿèœÐ¦Ê»Ðp¬daqƒë\GÀ²ãí€ßiC¯ýKö^•Š~xò%o;ö†øŽW‘»þÍÿ‘8®#àÁ¿Ïñ«ãÏ‘ñïÇÖRZø«NŠæâ Fy5gmÑÖYVKb¨ÊŒ±…Œ(Ú€X“@K/î[*v€ÄcП§ãXŸcUø+ãó ꣃÁÿC–¹øAãïŸoíñ3pãåðÖ–ÿÉ:çþ0üñô¿ünÍûAüG¹Ž/j2Éo7‡´8ã¹Ak!1»% eV©*AÁàæ€,ü,'þ¯‚J¾ÒÉÉ9è‘s[h»B¬a½Û$sÛ׿_ >øÄ|ðSÅñç⨛Ãút‘[E h¬–ÊÖÑ‘3Ú–*£$àsÍoÂñŠªùŸ´Ä€3ùh\sßý€‰€ÿÂþø¼m>.Õ{ÿÔ ó½z„nÑFÀQ’tcõ¯Ÿüyû=øÇRý¢~ZKñãâÍâ}J+{—Ðôu—KeÑ®¤2«lÙ•Z2$ rF^æÿ²§‹ˆÃþÑÿ:€ ðÿàµ]’MÑðCn×o<õéÖ¼«áñdø÷ñø±¿á.Ò²xÁ?ØVçŠô‘û(øµC“ûFüR,¼sáÏóÿ’uä??eoÜ|}øýßþ!Ú¾—â½6Þk˜t=åÕ]´kIVY•íJ£*ºÆaT…ŒäÒz•fz9ÙËDéþGõ¬OŠ„Ÿƒž921xgT#àŸ²KÅkŸÙ;ÄêW´?ÄâGþ)ÝoøóÅs¿e/ÅðSÆóÚâUÒÛøsQ™­æÐ44ŽåRÖF1³%¨`¬RTƒ‚qƒJ̾t{§Â% ð/áó`ø¤ô ŸúsŠ·NÆÑòžTŽ™ôþuã_þxô| ð¯íñ2Î9¼5¦Í´>Ð]-­c"5i-  …‰$’Mtkð3ÇÆMÇö’ø¨m¿ò,øxãñûJ£#ý®˜·ÄßÙÓdxãTû§œ`^ŽO­$l§` TŽ ‡óõ®ö›ýžüqyñ“àZíñP:‹u(m®.4 94©E»‘¦…bµ ìè­\9 d]Oü3‹v¿í ñC¹løwAý>É@›@'ËfUÇ\co·óªŸ²²ïøûC„bñ¾”ÙÿâCeÅUÙ§Å¢3ŸÚâp$‡´Ôý’¸?€?¼w¡üoø÷m¦|}øƒcö?é±\\G¡h²K«Hú5£¬³ -Š£*2ÄaT„‚I$êhœLûgçáp×Ò°>.ɳà‡Ä,J?…ucƒÏ"ÊQŒþUÄ7¯ˆ8ÿ“ø—»©ÿŠoÃøÇ×ìuÎübøEñ þ øäKûCüEºHü;¨É-´¾Ð’+¤[Y FÌ–¡‚°È%H8<бüÉøðôÈÀŸøE4ž0 cìQ=ëvL‰[#2g ëëÞ¾]ø= |Iµø1à”_ÚÇö‘7‡t押;¢I²hÊÆŒö¥Š¨ Ä’95¿ý™ñ7iö†ø‡Æy_ è8ù)Þ€;OÚ¾5þ·þ}[åçåÿŠzø×cçá,2ÄžTrË?á_)|ið—ÄMWãGÀ±¨|wñÝäÒø§QK[‰t94©tÍ,A-‚»2Œ‰2¯D> øˆ‘î?´'Ä`ÙÚü#šãëöJösbŒx#¢Ÿþ¿jò¿†Xÿ…ûûDºi$ŒpâCe×Ò²›Â?7ÿÉÂ|EÝéÿ惒>¿d®[öpøãoü^øõ=ßǯˆV3Yx³N‚yí´=äÕd:5¤‹,«%±TeFXÀŒ*€‘œšOQ§gsÝRyÇÐtãô¬/‹)> ø÷n—Âú£'û_èrþ´­û2xÃj“ûEüRÃŒxo@àzÿÇŸë\÷Æ/Ù‹ÆàŽe_Úâ]ÒAáÝJg·—Ãúq]"ÚÈͲZ À%H#<ir—Îz'Â|¯Á?‡á8 á])O~¶qt­ÄU2‡\ãø˜ã­yGÁOÙ÷Ç#àHý¢>%Ú¤þÓdŠÚ/è/²µ¬l"F’л*$9$×F?gϸ þÑÿzø¦ü=ÏþJU”þ3Ÿÿg<‘ãm_?_øGï»W¤—o.0H;TqœlWÍ¿´GÀßéÿ>8øýñúKÏê0[\Üh:*>”ë¢ÝÈÓB±Ú…‘™£"@Ê’8#¹á‡ÄoÝþÑöœÿÂ7 gŸ­¥µÏX.öèï*§ ‚}ëŽýž6?ÆßÚCÎÇ8Òq‘ßþëåÃoˆ&0íñ-r¹ÿ‘o@útû%rŸ³_ÁÜ|eý  ´Ä-:[_i°ÜÜ[è,’j²6hë,Ë%©DdFXÀŒ*•@H$“@ªU„þ^A9àü kŸøÆÃþOÄýG„õ}¹éƒg)ãÿ¯\ø3ñ@?ðÒßyäcÃ>çßþ<ëœøÓðOâ üñá“öø—y>Ôd–Þ_è)Ò-¤ŒÑ3Gh+ ©*Aàƒ@/ÂÉðGáþÄžÒ¸ 1ȳ‹¥m².ÙìaýÏó×Âxúƒ ñûÇöèÞÓÞ+h¼=¢H–èÖ±•‰íK0PBÄ’$×H<ñØ£~П÷ðÞƒÿÈ”®W+/þÒ?òWg͹Ü|gª`Ÿò¼àVË\ÿXrÊIïœÏ_ç^;ñ#àߎü#®éÒ^+> &ü4¯Å¼†|<1Ï_øó®ãÀ¯ˆ/ðgƦ_Ú;â]ÊÇáíFI —ú %Ê­´ŒÑ9ŽÐ2†is@Ÿ ×wªdíðÆšH?t¢GÒ¶®ùc9Ç-Î{q? >(x>çàÿ‚Œ^8ðdgþÝ5_\µW–Ú0T©“ƒœ‚B+{þwƒÚ<øXrOü$‡=¿ç§jËG5ñçã·ìîH,á2Õr¡ÿ‰íz1.±aÈ8Î<‘ŸÐw¯øÉñgÂ|yýžÙ¼gáR×Åú¤—·lén¡^F­#Âìª ÆI½3þwƒK«x$ñÂzÌŒúÿ¬ª[÷7P(Á ê3À<דü-B¿´í 3´ÿÂc¥Ø8h]«º<8ø%H]£ý§çþ³·½yGŸŠÞÿ…÷û@ñ„Ò+Ÿé’BòkVÈ·(4;D-ÃêA#8 j`·=ca“*¿>>RqÇÖ°>.IŸƒ>>;BãÂÚ 9<ÿÇœµ+üJð‰9ÿ„×Áq”×íp=†d®ãÄÿ GðOÇ_ñZø1žO jq¢G®[3ÊÍi &K@u¤Qígdøðö3Óþ=(€q›(»}kxþï>nÖ`ÛÛò>õÁüø·à«€þÙ㯣Åám)$×íQãqie`dÈ ‚=Åtkñ[Á ¸'Ž|¹ãÄV‡#×>gZdwÇ9ü/ÏÙ§€?â·Õ€Ç9ÿŠzú½Xí(Hàñë^3ñûâï‚áø÷û8cÆÞ š;oj³\<:Ý´‰l Þ¢´¬„ÙT’;×¥ÿÂØðg¸ñ߀›= ñ™ãõÒ€6L\ vÎ>¿y×ÀÄÿ‹÷ûJ"à9ñ¶‘ózÅ;cÈ®©>*x,Ì¥|wà2r[Ä6ž:ŸÞæ¼Óà?ÅÿÏñïö'ÆÞ Eºñž•5´’ë–ÑÇr‹ ÙFÏÔ2²åzE{l™…1RA8ùy>ÿZçþ2/à_ÄÅ·Ÿ êøÏ?òå/9©¿ákx(H…<}à%*Ïü$y\ÛJæ~3üXðE·ÀOˆøïÁ,žÕcŽ8õûWi­%UUQ&I$€|Ð?X'Á‡ç9 á]$2÷‡Øâ­Ç,Td¹°¸<ƒô®#à¿ÅOÉðCÀEüqàÈä‡ÂúZº¾¿j’#‹Hƒ+)|‚Á…oÿÂÑð|­óøãÀ Á ´à÷ÿ–”Å~Ñ [ã7ìî3ÓÆº®sÔÿÅ?{Áô®”»DÒ4x°à ó×8¯<ý¢~.x?þ7ìø!ñŸ„f[êrÜI·lé6‡xŠò0rK0PN9 w®¹¾%ø@*y^5ð?.?·­FxëŸ2€5¾R_ÈÇŸ›ðô®Cà@ÏÆŸÚç?á4Ò²qÁÿ‰•j‰,ÌüNð„ÿü _Æ> ¢ðÖ›+ë–©$l-"0/ÃÇZÜo‰g¼gࢧ õªíÿÈ”À§âÍûMþάä1ÿ„»VÁô?Ø¿‘¯ "f ¿9Úôî?­|Ã⿊þ¶ý¥ÿg™%ñ„L6þ,Õ$ÓZ¶d¶FÐïZF„RÌ-Ô:×Ð ñ_Áf\§<GŸÚñÊÞ•—ÊýÛnÏF=rOç^Oð¿ã!¿i,ã]!ºãþeë¾ÕÞOñWÁŠÿºñï€Áêü$VxÿÑ•äþ/x2ÚöŒ#Ç n¼c¥Mo$šÕ²%Ê.ƒe4l_¡•”‘‘Ezô c²nv÷`|`˜'ÁˆKódøSVà÷ÿC—µN>(x+Ë"?ø½ñ §oOÞW9ñ“âσ øñ8ðL¯7…u8•c×í]åcg(UUd±'êhµø.›~ü=2î)ÿž“…ï¡EÚ·Ä`D¾h;NHžsßóýk€ø-ñsÁ7þçÇ^ G‡Âº\N’x‚Õ7‘VS ‚Áé]|SðbHHñß6ãi?ðÚ úñæP ûH7—ñ«öo¨ÿ„ßVÚ;È¿}]s¶èÕ€fÊä?ãÐ÷¯0ý¥~/ø6?Ÿ³˜ÆÞ ,ügªI<ëvÒ%²6ƒzŠòä"—` œHë³oŠ hAOø?t‘â @G¿úÊÙÏ—™HÁåqÛ°ÆÏJóOƒ¹ã×íqÓÆ:WR9Ø\~5Ø/Å´dIãŸñØx†Ó§§úÊóƒ?ü7ÇßÚxF¹ñ~—5¼’kVÊ—HºšŒ³áÀe*HÈÖ€=†8ı«!$±#ç8‡ñuˆø#ãÂØÚÞÕ3Žp~Ç/_éN_Š>IË?üÊ£> ´8ü<ÏóŠçþ0üVðl|yÿ¯‚ÝäðÖ©,Zí«<¬Ö’¡D„’N8ïšç¾‘Áßð>Òù÷û$]>µ®…äR<ò}Aé\ÂO‰>¼ÿð˜x<<~Óct}nÙ]ZÆ •/A¯~+kþO…]Œü­ÔíËRGþD wâ¨+ñ·à@ ¾/Õ6€êyŒ¥z wP<… Äñ‘ÈüëÈ~/|Mð˜øÛð¿‹¼%(ƒÅZ“ÎÑë0*x=‹ãÏ¿_øH­:}<ÏÆ€8ÚEÏü.OÙÈîäxßUÇÀÿ„~÷­t E€Ï~Iç­yÿí1ñoÁÉñ£ö{0øÛÁó-¯ŒõI§’=nÚE‚3¡^"´Œ®B̪ à’S]Qø™á X™ƒ÷”rB·B/?ËšÂýšŒŸ´z`¶|m¥Îü‹ö4õø›àþwxÛÁ@· ´ÏþŒâ¹ÏÙ—â÷ƒã'íÆÞ „\øËK–ÝæÖí£K”] Íãf|:‡VRFFA=àDîwtÝ÷TŽ8•Îü_s'À߈íÕG#b—µHŸüÍóøëÀ@ã·ˆ­2sÌŸ§½s¿þ.x2ÛàO±ã<á}RHüCjï+µ¤¡T(“’IÀÖ‚NáL#þÏ€šná,)Iû$U¶ìB…féÊO¥pÿ¾%xFo‚þÇŒ|‹á½67ŽMnÖ7–Ö ÊÀ¾A`çœÖôŸ¼'ŒÂgàÒpÆ»kÇ=ÿyPn™¤ÿ Cû<ð$ ƒâ+0ãþºW•üøÁàÙþ>þÑå xô’ß7†5LŒ†ÇúžÜR‹> TÇü'Þ»ÂEiøy•ñ{âÇ‚m> xé¿á9ðC³øgSR=~ÑÞGkYUQ&I'ŒZÿÙmoderngl-moderngl-773b733/examples/data/textures/wood.jpg000066400000000000000000015604641470420062000235060ustar00rootroot00000000000000ÿØÿáàExifMM*  ø øž¤¬(1"´2Ö‡iì$ ü€' ü€'Adobe Photoshop CC 2015 (Windows)2017:06:13 16:02:400221   rz(‚VHHÿØÿí Adobe_CMÿîAdobed€ÿÛ„            ÿÀ  "ÿÝ ÿÄ?   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$î=ŸGù)ÃKžé$ê'’%Þÿí~z‹ @Û-ï¯îµÜI&Kˆƒ§.;ê–#²©³0ü¬ ÚaÍæt—¹DA.‘ôšæëã¸lü‰W þ°Èiÿ™ T™Žâ4‡kßRs@7ÿX|õ*¸Ðí€át#ß«®î77þüšwOF«ÞÑaÐ:[íd851ì–Ï#ž?êv¦p³´ ¦9çOú¤åßCÛ$iø'2tÁЇD8#qïüŸ¦ÔÎl4¯ù³?Š^âÀxl·@5€â›PüB*SžÀù€á·Ú;IÞ¢!£Å¢ÏóPÈWÛh-tsˋꑬ×BÁòš‚› ]ÀëOùÉßÀvÔ8ï,ÑF·K.'Iò„ž"ÁæÚãâ6»þú™ÕwFaÓ]ºÿƒ|ü"¶7þŠ)§yÐNO‡Ñ0vw%Ž˜òôQÞ7]`Ìÿ¾ÊÚÕp>ƒ‡‹Àü gêoî›§öŠ#›ú3=ìnœ~jg²Òu÷úÅ#oóAÃÅÀ”¡ûŽà°ÿ_’ ŸI !Çå§ 0D¸êFÓáâÝŸÿТƴ‚ÉøxÅKþþ¤¡Ž7'tÿÕ(4£p‚~D±¬qDÜ&vÄ8§ò–v‘²IýrLŸk]à@žÃ_ûñHÈa1¨3ò nÐy’Oý÷þŠHI¶àj5€G½¤:Óâöß]$ Ž qäÔÞéìÌÑ>;¶<õô„ÐG#ôÖø=~å\Ï¢GõxøŸüвã_ýP?þ*Á [£ZᩲuÓó{(ƒUœò 3ÿ’R¸ÖÒb]稟æ­içÛóÕ"­»˜‰$Aø¤á쟇å=ÔêLû_äݪ?àÜ>î÷#ÕÿÑ Á½¦:ï3²”¦ wÒ2|åßKþŠ–`éX†Üÿ%;@h=ˆ>^Õ†] ¡´ñ©ÓÈp™®sý§¹—}çUÑ_õ\ 3ýv$,h’Í=¤ýÿI$6\àId¶>åL¸øîQ‘à@Ÿú)åŒ`·ƒ$êÛàw rJîxïÞ0áä6¢VIkÜys`_c78º5‡4r=Íj“l0C‰ØÈÿä’C`;K;ýï¼)×8ð"#îjécÈÐÀÐ"€CÈí'¶¬MJÍÐ;KåmÑ¿!Ó¨öÇ„ª¨ä|X@íJ1t6óϼ {ÜšR8‘m^^ã÷¨LVóð;©ƒ “¿* 㼃>á§ñÿ¤òüUü¿5ºø¾8·Ò Ž] à(Òè ÐâOˆIÅÞ˜à‘÷I™Nê€ÿÿÒÍh–Îá ˜î$±|L‘ ðÜ Ò8ÆK|f6íãüå/pq2A8å®oåX…Ù Ð p™ƒÀOþIE²F¦Ó hÉ;Ô½¤û§]¯eP8oÐv  i€‚“ÌòâÞ¦àv>{8kþr„ŽH Ÿ?üŠ#£kÁìáÿ~A-WCŽ 7ÿ"ÿI'µ°Lû¤üv©<2'ÈxrT_üÙ&g“?îNHÖgIíá˿ꓢ$“%¼ò¤Zò ƾ=”]ÃGi×äS6¸ 1àÚ×j'q0Ià~ñLCZgÈxr¥Y'å()'-|xÈ­Õäö3§œ5ãúò¤ õcNGn 15)˜çÛ°ŽÿžŒè¸¡wo'µ³ìw´IŽÞ¢9q/É?œ8ÿ;”Ó¿òðHbšŽçþ—‡ùÈ_àŸ0 ´F¿ç'k4‰ú@ƒNwdͰì¶{÷’ñýªþ_‚66Xò"dy~ð ËÜ è$ˆÖBM±àî’`‰×ÀŽÉ]¸A$èω܉ÝgÿÓÎÛ 5ÔöÓj”»ÀF½Œ¨´ˆtùƒðRK]5—N½ËJÄ.Ê0Ù1âtù à¹Þáà&?ïÊ`Db?‰o÷¨ÖZA4‘ÞtíÿI$ ;c_?"Œñ¥£ùMüw!¶Ù©ÚcŽL£Z5¸x9§ñ„Þ©j>~š¦>ðÞÀ'¶¤÷Žún–¤ð×6`qÚ`~oýà†[LGˆ‰s¡DîÚÑùÒ$yå3´ ‚b]ÿ~Ú›é’u$”Siað2?ïßõIÙî‚ ˆóEðÆx>zNæ©€4vžØÑº÷€Ô7ÚóÄø¤öþ“ˆ6O´'lXO€8ÕH´9òtöV~gkSm*ð-&<·i‹® ÿ¦‚@5¿™ôÉùEZ¢" wùÛ”A™Ü×7_?Í„«0?¬òæH&c¸!Ð{êQîhÿëñÔªÀ€v@">èG¼‚ë»íÿ¿&ÓѬ÷´XtÝ-ö2˜öKg‘Ïõ;S8YÚÓó§ýRrï¡í’4ü‚;t1.=ÿ“ôؙ͆‚5þ>ÝÓø¥.Ø –ÈX)¸u€OÄ"¥9ì˜NÑÚNðÝ jÑçù¨d+Ò6‚Óòâßú¤NY®…‚äÿ56&»Ö Ÿó“¾€¹Pã¼±B·K.'Iò§xý ómqñ]ÿ}L껣6ºYf¿àß?­E"/yÐNO„m0vw%Ž˜òôQmÖë4üÏà‡ö«øµÝ>ƒ‡‹Àòà¦~¦þà9ºh¤óìp?¾<¿56àEäƒøÊriýpñpñUî$‚<€D6Ea£Btù \èi3þ£”à5A:?ÿÕÅ£‚"ærŒ×Μ€xù” N‘11äKQ[¼xîøoýŒ]€»\tž5N×p>-·ŸýRƒ\èoiø”õ—{ ®‰e£rm)('·~<l.ý!Ž^ßûò n'uâTŸ¤ù¸~…'¢†éi¸‰Óý9-­umq€| ˆ2ðÁ2~P—è$L¸îII:<} D“§ç)w¬ñ“^Ðd 2Ù8Ál¤ã-€5‘?Å$¨K\>˜yþ¿ÖI€:¹iÇÁEÐl‚=¤‚~G)5Þ×À’gø ¤ìÛ#‚ÉÏÒo*p}`<=1§õPÚà=I“¹€x÷HZ}A@ãɨVéìÎDèîØóÔÔ#þ‚¿Î¸ÿ" (ôHžvññÿÌT­?¦È~D?µ_ØÔwÑåOm4Iº9þ²‹Á5ž •.-€n¿pOZÄÓ»—yÿ¯d+Ï´ØOÞŸi%­ƒ ŸÁ5£Rît{r¬ž‡ÿÖÆ§nÒN ŽÚ‘£uE sI]H~çké(Ó&KymçºþïÑEHs¸&‡hßÿ‘X¥ÙC[[-¹îÿΓפLþù›í $ÎÒ ×Ÿíhi÷jØåkï©!+âcds€{φáä“fY2ÑÇæT‹D\@æˆMJ@Þ`€Iïö‚yq1?ÿ~Iñµúêí~ öþ*/wèæŽ Ÿ ÿ:D!,¶ Ö>ç;Oê¹3£G$Gä èÛ"Þd¹®Lð ¢wjÙñ î’T^"|à ¦Ç8‡—;OïB$m~½·káEN¢y£½Ñæ4oö’Rp}®1Ìsä¦.<ãîAlí â)lpðhŸ›e5,öÇioýS”ì?¤.ÒOûBäOÃᣬ)%¾;&ð CxžØl ï7Ôžá08í0?7Oꧬ¶™‘Ä‚%ΈLwmhÐ:D2ÝÑýU#€AìK¿ïÛSNàÒH’Aù@á1†–">[¿ê”ª;à€Ctvå¡AðÖ{èé;š¦$;@7^ðÖ –Ã4ešDOƒ‡‹Àü gêoî›§öŠ#›ú3=ìnœ~jg²Òu÷úÅ#oóAÃÅÀ”¡ûŽà°ÿ_’ ŸI !Çå§ 0D¸êFÓáâÝŸÿТƴ‚ÉøxÅKþþ¤¡Ž7'tÿÕ(4£p‚~D±¬qDÜ&vÄ8§ò–v‘²IýrLŸk]à@žÃ_ûñHÈa1¨3ò nÐy’Oý÷þŠHI¶àj5€G½¤:Óâöß]$ Ž qäÔÞéìÌÑ>;¶<õô„ÐG#ôÖø=~å\Ï¢GõxøŸüвã_ýP?þ*Á [£ZᩲuÓó{(ƒUœò 3ÿ’R¸ÖÒb]稟æ­içÛóÕ"­»˜‰$Aø¤á쟇å=ÔêLû_äݪ?àÜ>î÷#ÕÿÑ Á½¦:ï3²”¦ wÒ2|åßKþŠ–`éX†Üÿ%;@h=ˆ>^Õ†] ¡´ñ©ÓÈp™®sý§¹—}çUÑ_õ\ 3ýv$,h’Í=¤ýÿI$6\àId¶>åL¸øîQ‘à@Ÿú)åŒ`·ƒ$êÛàw rJîxïÞ0áä6¢VIkÜys`_c78º5‡4r=Íj“l0C‰ØÈÿä’C`;K;ýï¼)×8ð"#îjécÈÐÀÐ"€CÈí'¶¬MJÍÐ;KåmÑ¿!Ó¨öÇ„ª¨ä|X@íJ1t6óϼ {ÜšR8‘m^^ã÷¨LVóð;©ƒ “¿* 㼃>á§ñÿ¤òüUü¿5ºø¾8·Ò Ž] à(Òè ÐâOˆIÅÞ˜à‘÷I™Nê€ÿÿÒÍh–Îá ˜î$±|L‘ ðÜ Ò8ÆK|f6íãüå/pq2A8å®oåX…Ù Ð p™ƒÀOþIE²F¦Ó hÉ;Ô½¤û§]¯eP8oÐv  i€‚“ÌòâÞ¦àv>{8kþr„ŽH Ÿ?üŠ#£kÁìáÿ~A-WCŽ 7ÿ"ÿI'µ°Lû¤üv©<2'ÈxrT_üÙ&g“?îNHÖgIíá˿ꓢ$“%¼ò¤Zò ƾ=”]ÃGi×äS6¸ 1àÚ×j'q0Ià~ñLCZgÈxr¥Y'å()'-|xÈ­Õäö3§œ5ãúò¤ õcNGn 15)˜çÛ°ŽÿžŒè¸¡wo'µ³ìw´IŽÞ¢9q/É?œ8ÿ;”Ó¿òðHbšŽçþ—‡ùÈ_àŸ0 ´F¿ç'k4‰ú@ƒNwdͰì¶{÷’ñýªþ_‚66Xò"dy~ð ËÜ è$ˆÖBM±àî’`‰×ÀŽÉ]¸A$èω܉ÝgÿÓÎÛ 5ÔöÓj”»ÀF½Œ¨´ˆtùƒðRK]5—N½ËJÄ.Ê0Ù1âtù à¹Þáà&?ïÊ`Db?‰o÷¨ÖZA4‘ÞtíÿI$ ;c_?"Œñ¥£ùMüw!¶Ù©ÚcŽL£Z5¸x9§ñ„Þ©j>~š¦>ðÞÀ'¶¤÷Žún–¤ð×6`qÚ`~oýà†[LGˆ‰s¡DîÚÑùÒ$yå3´ ‚b]ÿ~Ú›é’u$”Siað2?ïßõIÙî‚ ˆóEðÆx>zNæ©€4vžØÑº÷€Ô7ÚóÄø¤öþ“ˆ6O´'lXO€8ÕH´9òtöV~gkSm*ð-&<·i‹® ÿ¦‚@5¿™ôÉùEZ¢" wùÛ”A™Ü×7_?Í„«0?¬òæH&c¸!Ð{êQîhÿëñÔªÀ€v@">èG¼‚ë»íÿ¿&ÓѬ÷´XtÝ-ö2˜öKg‘Ïõ;S8YÚÓó§ýRrï¡í’4ü‚;t1.=ÿ“ôؙ͆‚5þ>ÝÓø¥.Ø –ÈX)¸u€OÄ"¥9ì˜NÑÚNðÝ jÑçù¨d+Ò6‚Óòâßú¤NY®…‚äÿ56&»Ö Ÿó“¾€¹Pã¼±B·K.'Iò§xý ómqñ]ÿ}L껣6ºYf¿àß?­E"/yÐNO„m0vw%Ž˜òôQmÖë4üÏà‡ö«øµÝ>ƒ‡‹Àòà¦~¦þà9ºh¤óìp?¾<¿56àEäƒøÊriýpñpñUî$‚<€D6Ea£Btù \èi3þ£”à5A:?ÿÕÅ£‚"ærŒ×Μ€xù” N‘11äKQ[¼xîøoýŒ]€»\tž5N×p>-·ŸýRƒ\èoiø”õ—{ ®‰e£rm)('·~<l.ý!Ž^ßûò n'uâTŸ¤ù¸~…'¢†éi¸‰Óý9-­umq€| ˆ2ðÁ2~P—è$L¸îII:<} D“§ç)w¬ñ“^Ðd 2Ù8Ál¤ã-€5‘?Å$¨K\>˜yþ¿ÖI€:¹iÇÁEÐl‚=¤‚~G)5Þ×À’gø ¤ìÛ#‚ÉÏÒo*p}`<=1§õPÚà=I“¹€x÷HZ}A@ãɨVéìÎDèîØóÔÔ#þ‚¿Î¸ÿ" (ôHžvññÿÌT­?¦È~D?µ_ØÔwÑåOm4Iº9þ²‹Á5ž •.-€n¿pOZÄÓ»—yÿ¯d+Ï´ØOÞŸi%­ƒ ŸÁ5£Rît{r¬ž‡ÿÖÆ§nÒN ŽÚ‘£uE sI]H~çké(Ó&KymçºþïÑEHs¸&‡hßÿ‘X¥ÙC[[-¹îÿΓפLþù›í $ÎÒ ×Ÿíhi÷jØåkï©!+âcds€{φáä“fY2ÑÇæT‹D\@æˆMJ@Þ`€Iïö‚yq1?ÿ~Iñµúêí~ öþ*/wèæŽ Ÿ ÿ:D!,¶ Ö>ç;Oê¹3£G$Gä èÛ"Þd¹®Lð ¢wjÙñ î’T^"|à ¦Ç8‡—;OïB$m~½·káEN¢y£½Ñæ4oö’Rp}®1Ìsä¦.<ãîAlí â)lpðhŸ›e5,öÇioýS”ì?¤.ÒOûBäOÃᣬ)%¾;&ð CxžØl ï7Ôžá08í0?7Oꧬ¶™‘Ä‚%ΈLwmhÐ:D2ÝÑýU#€AìK¿ïÛSNàÒH’Aù@á1†–">[¿ê”ª;à€Ctvå¡AðÖ{èé;š¦$;@7^ðÖ –Ã4ešDO ÿâ 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ÿÛ„         ÿÀÿÝ€ÿÄ¢  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ŠšªºÊÚêúÿÚ ?ŠéBkmFå$jKLT…I(CWù•©G#8éb<Þ¾$Gr7VšÒõ¥½· ŒX4±šPÉåÓeû\²8¬ (¾ÞÞÓÐ8hÚBŒñ1,’ü8ᔽ[&ôî‚hþ¯7ÁxÔ³Z²âµørLNï[ÖžiP†`T; r%T í±g\¨ ›¤R;õ’7·½ƒˆDu[®=àfààõØVËñÑ4z´äØXMl¾³ <0…3ÛÈ&´ºVÝÕT| ‡ößí/ƒ(ÈAm€çö)êp„»†j*¬ôœ2HGCÆ›ð#·ìñÆjDùÚþu‡LžÐÈÍÆ6žjhTËeªS' æ%îc+á#ÞÝê­Å™žÙ–)a#€_÷ÜÃ’ËNÀ7%qˆøþjI°‡µkØí`[º+FòRDû&n&›–øÊÆ`^È4- [%éVW‰g ñBHp'•Jû‡*4#VPÖkn‹u,ÄÜgå½YÉ ­}‡ÙÉ“¸þ‹ÿ5 ?­É)·›Š¬®»` xŸá–έªJ·ú–üƒ„È@*@~«@)þk‡?ƒd¹"ŒmìÃ~õ C‰¡J ÿ²Ù«û9XÞE—ð„5“~àK4nß¿Ç,­ÝG:ü#¯²ÇÁ¬OÅ|I0úƒÕ,O6€¯_„õ¨éOæÊ!Õºh…uŽÖ€qV¸#ˆ^C±ý¦=rÚ²Â髹[™HráÁUo³Çz2}®Iû-‘Ä6 ¹è}'N–{Ó+ñ§ ×døwë‡,¶ œqT¸°×êÈæ?«·)œ‚´õGÐõÛŽ fÆé˜²Âÿ½zäüªI$V» ¸ÿ“ ¦'uÓ¸ô%¢Ô»"ÛÄ*´b@éBÙd„{ØÚ!ãWÔ&R¥ÕYX3´FiÓá¦@­ŸñR8Ì3r3Uˆ üÛý¦ør0Žö“.‰eÓKx–0Žˆåèw=¶ï’®g½‰<•ô²‹š¨²’7$·#Èô_òi‰çJ6áÍ•ÅÐ"yî¥#m˜§ì®FU~äÇïZ÷pÜ»…Ö¥tÎíÆ²ÎÍF¨Þµ?ÖPyW yZ'ÏdÂÕ—ÕœD¯ñ¿©)fR®x…)d­;åsúCd~¢…ˆr¸ ŒÁMiU¦Ô€ýòC“Ív%pŸ jÌ ‡ JO/4;!x ÆÁý5ŒFNäòZ»oÐíÇŽ…XBKx ^PDLÒA]Ç–£ÙÛ‰VÆÐ™qˆËe:¢ŒiÑB1 Çß*;[tw¤›]ZR¼Ybs?:ü.£Ø÷Oµ’ÓÑ›’BM’¿ŒH5e!½¶j/ü.XNÿ‘KBO.§wÄo5²2±?»Y Éý½ÇÅ–mÃçlEñ|4EÒˆUx)!$‚{oV Ì9nmÊ&?r‘Û¢ÎÕV‹©˜/"ÜKx€)™0h“p¹‘Ì»¤Þ“H¼Éª‚Õ~Þ2"<Âm`²-ˆc"ð=2ƒqMÙ˜v5@ø²¬»ÌL^ôD÷öq5ÈãŠÃQÉŽû8éÇíÿÄó0 »öqÏ6O{éÏdêž X}€'âû4âc0`=AÊ'Ò£ 4b)Ë>/‹ ì _å~¬›}˜áRí^X§T—ÖybGn7¢Ò?زž¿g/Åɯ-Úyz²¾}CÅä ðÊO&S½>ÆÆßüK`²ÜX:*€ca‡•*àß³“佬‹!;RVõc2¿µýÐDÚŸMiÿ˜öä1+¤ˆS÷r%Ú›ÕXäÇØ…Ûös2'`âÏê)î˜&K_ôuV$ž áOÛÿÖòœ¼Ûp“Jñ]óVuXã‡ÞÆ|ÊÝ&«=ÌîÜáõ`…¶Ÿl }Ÿø’ä§ôó¤ÂÏÁ|·i,eBbbT1ø”#9¡®ßËÐ|<²°}{6¥,PñÛˆ¢ãŒš`ÌjÔoÓ•®Z7–íUCeD\Oeîã†Å]ù¿ÿb•¾#Ë—Ùá‚5Fù”›)½·¨Òº“ø#Pw 8ò#þjÊdÝI¯ w¸e…„2ª)U¯~¹d 3¡ /%ÀŒKHÄLfØ•2ïñ(ëÅkÇ-#í;5Z«q0ðõšDÒF¬> Ø*µ~ŒDŠ UR^wi¿"ñsqñ( :¨ÛŠOö¶nÐiÒ±R¼6ÄКïJò9 ¢äÙéP~ TâÒú í$HÕ*CÔŠíÔÎyÛ µÒ&XÙãH­)#¦Ä§Ò:|XD…”ì«eg¸h‚óhÓí1,É]×õÓäi0Ô/£ ¨<‡Œl"ˆ´]‰f +SvcAÃ'Œú>%†AêE‰e‰UxGê²*Èôþî1Rí9’Ù\ce”¥Iv¥gÕÙ‹ý(гPU|]Ÿì¯ûº37·ðµÈW2­#õ©Ì‘ ~µ~›0ãU¢ñYƒ8µiy¶…Ø€ÜÐPÓ‘"‹ Sâ4Ã;ÝbFÊRLÍg+Ûžk"É/ªëF½Pmö÷äßä®HG¡þ« ¾K=If¸º(üBÛ†¥ øˆ¡$6ìpïCÞ¬ûŸÿÐŽ,fãP¶hª}~3$ª¼J:“ê'לpämë·$RÚ`—æ&©Žw’6=3 †ýùL—Ìx·FÁoqos;Æâœ1o†E£!^[tÿc‚RæꎞæßT·KÆG€“Ó]ƒ"&ý±·5CþWòã]z(•Š?R½”­c¥:]Y‹´ˆ+¨É2žLBÝdÿ€ÊÌA–Çþ’lâ";„%åº\Çuki é2P/4S°ªíöÇíä h‚ÆFÅ%êmoc ñLdH"¸MѪ¤+‡¼MñäåŽå\¿šÃèZq7Ám!$7©8ˆÜˆð&Ê@س½ÂúÔª¢8*í´ŠçpÍð°?äóìr`¬QòøyìÏÖá T’¨ OBJ-+û.?i¿—†Y”v?Ój±DE¨Á"XÃ1$¢K^ DrP5iö¾*|')‰½º¶˜/¢ŒÑÍc{"7ªòÙÌ’Á5@!'P8©ßሚPäŽãn£ýÏüR¥ºèÓê²ÜÜ+¨X¤õ€2º‡§.ýüG S̬$:³ÆÁe$á#1ãPASÈn¼rÀl0<Õ/Q$²–YƬHôÈ$tâükãÕr¸X!œ¹U³ÖÆÒv #DÔnfµ;ÕnÙõCéišh-ÇÕÑT\ÌÛ:‚BHOÂ6<;òþ\a/Q¾äHzBÝ^H¤Š ‹ÁæãÁ‰©HéV€uaƒ6Ë%RæÜʈµçr]Y}¯‰ÅWonœ²Ð@÷5­¨r ŒnÅ©b憧¿ò•û9²Néî™ 0[ªñ5««T4Ù‰t¯Ù\Ç™Ýɇ$ŸP˜-Üðñ,œÃ8$¬kD§óÓâÿ®²ø_ Dþ¤9·Ü,M …ËU»Õ‰þNçýŽH›åüLQ ³"¦f!ÃÅM h  ³ðrûX$yù&!½>ÚYoæúd£Hÿ Ú¦¿?³û8$ERÆîÕÞg’ÎXhëÃaƒ;µ °n„ý®?$P ¹»CÊ‚HiBˆ Ð èô¢î?”±\nÔ…zÀ,¥v¨u‚+[s£*Ÿˆ³Sö¼+‘ì’i^V¸šs® KBÀ‘ÐU—ðø«€I;”wFòXÉE $©jSu§§·%÷8e·>ë^h«e<ãBL’–1™í6ê$ßù©Á¿ÔÈȦ(Ëk òÈÞ£{(}^·±<-ÉÑ\J”(ÎôÛ—Åÿ5d®Å5î9.š?SQxÉ$Hè‚4g€Û­?àŽ  Ëkd‘ˆVßŠŠ‡Ü•âÀr¥{¶ß´8þÎb¹"©Œ“Ç$Y0x£ÅÇ'æÔâö\s3Šœ^m•æiQ=9$û%ªA¦ôþb>%\ˆ;”¢62Ë “ÓX„¬y3Ѐ*6§U£0û-ß>ö]iðK¬—Ek¿°<\“ØWözÿ. TŠÆÀ_w3É V’7Lo袂âªK¢û\™~Œdë{PzªxØii=YÉHº¯%ZþVN·ø5Ùá]-îž9¬Lb”©nJê€ñø¿k¾HzJ ­2³¿¹³â—©…ã­Á,>ŽëÓ÷‹üŸêäCüÖR$¾hÚ}þžÑÍ ž‹šÆâ„¼l HdÛàÿe‰¨²ÍѺ•Õ³É" ci4B9#JÔK ûLŠz¢NÿË•ÄmlŒ·®©¤©o¨ÛÝ™(æOAÇÂÎ㚊t^]¿™¿ÖËã|$w4Ìúµk F­ÉlîA‚E+6ìBJ¥TŠÒœô«”Ë«ü~$ÛÇѳMl·<²¬´; söZ‡—ùXeÏäˆn-%¹Y’þÏÐ@ÂáÌ ëñITžKþIØ×-€°Gùßé¤xHü}Iä0r6¯ˆ'à•Z) ÑŸ~Þ²ßk*2£äØ#cÎZÌŸ¤!kYÑSc$EôÅ›ùp¶óô¬¯vž1%¼ÖÑ­#IÖhÑž€‰AfdSˆÀ9ß“+Ûey£/òõYw ½ ,£‰üTuÄ%e‰V±·E@d•B?Á•ƒ1^œh8a’ˆònkƒ‹nÀ†ê¤ò<€?ÌydMð2þ4[DŒÿVôÀdŸÔUWr¤Ÿ²wéûYY‘¦t-RÞæi.'I‘d„ «J9áø¶-ñc-âQKæV„ˆ çEN¡Q7kÄ僾l%ÌÒý6Í$@z‰RwNA qÞ¤•'—O³Œ·hŽÅ½{„ZUARô¢ÒFïO¾ƒ#ìËs«ú?£žµâTÅXö]Å>“”cú›òI*2Ïr×Äï=ˆ¡ËQ(ÜvÿSùs$žŽ8jÉAQ( Ò1&­AÛü·loª+£rDßUg2qŽâ@ˆƒ‘$Ä«’Oåû8,_Á'’4Csmi6¯¡Gâ+Ô;R­ÇùF€eiÕÔ½µK3*7Äщj íMÿâY\¹ØÝê‰õVèw’8å@XЃ×í|8q91Èn•Éi6·eôÖ·ÛuþZe¢VÖB¬rµñ¼E[z6`Á@<€¡üÌ[örFø~(ëðd°À#H£@]ÆÑPq)@üº²žëû9‰#¹r"6HoŒ¯krò»nDl*O ø7ó‹2aVe{·ŠXäT ÀW×¥9/ ŠæußO ¾õÄZ:,‘ŠŽI(j¢P QUwkö†U›fXy¤—}^y]ˆã‚Ðq$5!N[Óą́Ùù4EÉkvìFA †eb C±û\zPÙÌ[Ü{ÛÀûšLíŸ iyI­!Z3ÒN¡¾ÖÁqsK¯â¶VY)¥C%Īçɋe؆¼ÃtóZõRÊbuF%"‚TñõûKÇ|Æ€Mäúš{¸»·ôÃ…ºqc‘*Åê*Çén€‘@¬ÃþifÿW2Õy"K¨³EÂ(ä1$ñ»LWzZ¨âÈÆè$óLlZAo Hé#9¢³Ì#R~QËþ +˜}Æè+Ü‚-®V9cY0¥>"Æ N?Ê2»aòI HÖ(‚H¤ô¢ý¡é’9@}¼É%Ç4§q%´öw++H–†1  ÈnkÇbTÓý—,”H62á-<±/èØf¸x i#ሲ1.J³ø×sI•PL4òF—o/õÍÌÞ˜ûÎB‘P ÕE6Ì|›È÷9;y©ê°<ìÖ겫ª®«ñò?‘S¨föË!Í®G¹q,rI1¤CÁ"w`ÕM9±'wåL²1åîk'¹JÊ1ë]F$fE™¥bæ…‹"‚Û}Ÿ³“<‡õXõø¦¢c¦@üDQ¤Šá<—ÄWg¯S”@zŽíÒ>” ï8ãHd ¡¡ 'RI‹â#}ú呦¹†õÖ °³*­EH§’¢Ñ GQ¶ÚÐ%ÞirÝ'%hÔÆMA42!`Z„ŽœÉýœ«$[q„œZ1~úIx³•êš‘Sö~14³æ—YÃðÞ3'ÙyÈ’4Ý™ÙA;“JSá¯ÃÇ-‘ú}Í@P%}ÔŠDSó!x$nª@( jçTºÍnÕ úÓ UÁ¸$-L~™ò?ÌÌ>Àý¬™¿&<%2Fº];Õžfdä ˆû³nZ‘öâM•ä®&Ì|”ËÍ‚Y‹»…  Jˆ’¼¿ Y¦V°Fïwi!J'ÃP¤‘ÍËóSâ/o4‘J¶ ·SâP*®TT)z‚~.½y61¥²7;‹òB‘$ˆ!…L¨PÄ×ö‡#þÇ-þñ“YæQ3©]éJ£ü,ܾ.\°qUK¬K!ÈèB£ˆ³Y;”¡ •K |éÊŸ áâ<؈ŽJ·ÓœˆY•Ù‹ªÐ#j-OÇÃþ!Õ´òÝciÂ{´‚âqûèBô*üMCð¸+_ƒö²ÉJÀ¿áÿrÕ¥ïNRæÒ{s"áB±+ñ©;nµpüy.S¸•6ìE¨YN.mš#W¹HXJ×ÕHÅG^¥ˆû',—§vÕ·ZQºŽXïâFñú«ñÛɱâÈ~±¯ÂÔ)þN=$,¥¸>JK%Ú\AqûqˆØPq,€©Ür |_Í“4Á+JÊd‰–9›ÔXê8o‡—bc àX;†Â,[[™SLŒÂ¡¥R=%¤"1#â‘·çöðKiZÂÈ¥;íA¯,DÄ–šæ¯,êô.êC³5šŒßµ‚©²™¸ì¯«Ãõ˜-ä5CU;GÀX ’WE–Aa+ey¢¢uYYâUZ‚I ?ìiCñeãõ´£/•Õ¼+$m$`ȵ “¹Û¸ãþ®B€¶wÉ9´š)¡™O‹§*Ð ¿dxeºRDª·—^‘™§•äªÈ‹°E%Û‚ýs' qïuåÚXË<‚R‘§ ?kuë@#QñòÊÇ1äÎVG½[Ne…ZFßê¨#I£«ÅûT5ÉdÝ…¿Ôã6¶î¬ò*ÈÌÅO¤¤“Å{äÜÛ l³‘­¤Žëêêd$z*Ä7’ 5:vïá½™·P–vWY¦„Ⱦ§ï™ÅF`HE&†µl”`dh1”«r¤Ví9tV„7ªAn<˜ÂŒʟ͉¿{2µ8$e‰ÞâcVŠ£«vÿ#l)*6ʰÌÑ¡ÔHÒ`@'jS rx·Úù6PNÔ­ÅR¼‹þð5ª´•+AJÖ¿²~Ïû,5ºñ+inž¹_UÄž¤Ã‹ä«Çí~×*üYòe-:·¥”h¿ÂF¨Ö “Zü]W(<Û¯fíû<²¾™Þöœ]KÕ&•¡Hþ'’!¥ ½2 · )_•¼…íÔ™dãRYØ"V½:|9“7—MhÛ±ÅV:z|Í#B¼„mZ.~ÈíÄýœª ³ÚdðÏfIr·±…ÓÆÅO@FÜ—¯ÅöþÎ3æ˜ ¶S—Õ¦·!„p40¯DuVéño‰%Jþï6 *AÚkJÖÅ+›w"ÞGÁU5‰È`EboøL‘•÷Ll¹Yw§¬r}gˆY}ÆX¥K »ÿwʼr"T z[".¥Ö–Á8R·P1?Xà’ÂX¯ CuåJò’>Ïdžg¢`7°Õ,⸅ᩄ©¬ ñtF¨â6`Q¹d±ÌÄÛÄHûiU^.nÒÃt´PEWÕŒüg—Uæ»ìåsÝþå”%ÉSPº†;¸æŽ6_‡Ñ•ìcjÕ­‚ãcu‘®J“ÁÑ»*<Ñ<|’íT*§‰V÷ø—áþeÁ¿Ú‘·úTºq$\$¤‚XÕÇZ‹P8²²ÕGìå»[PºUµké-VÝ¢2ÏòZü_k#.vÊ6¨g®¥ÊJezJÊIþN?s\ˆÞ+!º-µ9ïê¤VÊåTûCü'oä‡/µ•“qnÖiÓòÔ. úˆŽy€²¿Ê…Üã/¤"ÔRù¡ô.dp%ÚDpÃðÉã<‹ Žjö*ðÉ{)ž2Š…bg¡,}0NÃÛþ@@4Uôi„rò‘UÄÄÇRö©5'!3¤N³(ŽÒ2’´,ÍSûE€…_>9#Õ»,§d¹Qc…¥…äHî T :¤J|G~ÿX|ØG¸:uãpÎE}5ú»©Ø7%ˆ¦åc§ÂØa°¤Hnˆ½ôkklcwãȲ¡Û”€&›©§íd#bÊe½(¬W-u24Nt·øÁ ‘®ÛŸÚË)ŽöŠ{—Ëj‘$pÃ%d**]Îõ¯FÈW^ödôR¶T–9âx=9bu½Ãi¹ ©ñ§,ØÞà‘ºy¦$³$ o l“ &ƒíòcBzpÛýlÆÊwÝ¿+u†g€1BUj8‰ZƒùØì24[d6Kìí¹§¥è+Fó7ÃÔ’–å_òâzõqëzmãV1Ì¡MS¹,¨R¢Ÿ³ˆ;©­0‰­£ŠÜÉ ãn9EÃd…I?´Üòì³l‰œ/¦H•Cû¥;²´_¯ü þoµ•ƒe¸„’Þáã¸D¨¤n$Sñ úd’Î~Ï/ò²ùrhëH+¹ÒHßÖ/+JÕ(h²)ñ9l9µHì»§§h¶â¥ŒuV¡ã‰›“üÔÿ‚l„yg!ºg¦»Kab×¥Ô‘ú“;)뽫÷tûYU×+r²•¼ÎÑñFhZSÉfèTŠ€Y‰Øïðe°Žís(ŽB#c heä¦Ôí½ràZ4EÄe5&·Aû©läf§7ýæûrøq˜ =Ë$£unIk1³QØÐAû_ËþNcãæ\‰òK]®Lò£q£˜×™e¡§Ùgï—ìжSz„i,"d¶PIäz®Ì£ö¹¹ªãš°ƒ!{¦ö³@å’Œ>¢“nó¸¨ßâ>í•d¶ìdt@PO,ê¦Hby ‚O*Š}ž¼› ì¤n‡ šx•fU’i j’«-Nßòâ(ß“Uò_9GŒ‰y@xS#E⠷Ѿä‚{Ðò­Ãм z†F—†ÀŸ…A¦Õ >ý¬”h1$”ÕÖ,0òIVU™²kËf­>¨Vû7Æ[7ªÏ3Èa;ÌÒ»Mܳ(øAa½rÈÀi•©YDÆí“×âIK}R.-ó£1?ÖÄÈ?SWkì\­­ÇÙ¨¨‡ Z–%©NŸý¬6(‡$¢Æhn'šR}Yš@Ä‘XšN<Ÿ%ãË2$j‡tCHgÍ×qAn³ô^iZ1;oN-É¸Ž¿\„EÉ$ì=¼¯§’¬ ÄR)=Pá‘C¤îYh96Oí (ýè7·”D°(,fe0Í!Øz±ÏŸ» ö¾Az&“(ÞØi÷L20«ò û²Hj¯mÈ<ÿÉȨ¶ËømCLdw¸EˆGõmªš›áøqÈ þqLzû’_7¢ñ´JÜ Ë§«‰‡IþZ â¹m i%ÿÒ‹Û•K¿QKÄ“Qbê¹£¥O쇆ÙÇߦž»ª>ùÑ­Õ¢..¡^µødŠ¥—vû.£‡Ùþ\„%¿“)‹j‹µ°¬2/"¡”švøˆ$}!ÊÀN鄲æÚFämâ/*©àd=ÔÔÇúÈÿË–_{UW$ƼôdhÇ(& Š&møº†¯órboòr¾ ¾Huôâô€´RúˆY¨Ä“]Ù—~\ª¿âÄwßàªÿ­‘4Ù-^úÖ¦­Äa{wxncsð’æ±²ïEïýœ"}`H ¹/ÊúåÜ1dT2ŠÂð|CàÃ.›[ËcEVi›˜]§XG$­†”íÆL ,Žèð-î­àd(!•n PI,«Böjvþ\‰ØÑîáDlÆüÐÚ’ú–Å ¤ CÊœ‰t˜JÖ‡Ó—?ØãŒWãù©Èodu´oiÂ×ÓrBh´ ¤7Úä§!!ÄYC`–¼!,çUOR$œ!Ûáq½9oÓ†XþlÙ«'ú¤î÷¤‘o#2üA{HaÈ|_ía—6 íÉR_Þ^Ž*cex×Ófø€§ÆkO…›³~Ò¶ “4]ê—ú¸B2L ¯!F$Ê í·l¦ÿ5ºG–ÝU t}Mç$q°h‘Kß %‰ö–½rDz9°Ö”^(/,ŠÈ m¸§9+Ä îæ™8r gÍu¤¢1rUÜz‹êF§‚™nU;òQà åøïDQ:L·%ƒ1UHZ1½wvqÄ|y•E0&Õ5™¹ÚÀì¼æyY€QÂ0*ÁÏâÈãY ‡i®E·Ûi– \ÂY7e5§ )½)ŽNk§¥‡š BK’ÂGdºTqé½)ñv¯ÙÃÕ°I¹Ém —ûß«WÔf*xòäÁ˜[ïOòq¾h"Т–U"¼ŒÈKqÕøjw¢oüÜrFT-6\-¦ŽH婲zÜx– ®vé½(«Uþlå·rB*ÎæyíINS73ƬT’y­ÃÍV¼gŠ4DCqt¥,ñ¤÷2#¨ª¬j¥jI¯s°¯ºà«M‹E²°‡Ö¨H•øšµC|?¾‰­”,­’Ý¥¸’I]'pˆƒ·Oµ“œìˆÂ¬ªÇ4‘¢Í"SÒG"Ð}£û?:‹—ŦVE £·nEÕ A •¬Æ¿¶W2-¶eNPÏm ¤<’­z1§5¨+È®8Îè˜Ù(kw0FZX¢œ ™@«PÓ“ñpÛ_‡$MµTÚ°Qž#' ‚¬\=(X*•¯ótäÙl~›c.l’B«F@êBü\Æà¨ñë¾Ù‡ äĤ𥴑Et²:¥x8E?URH¯ºíÓ2qžMG5Ð$—F¡ÉKM¾ÖS=Ëv=’ëøeU’oï(ZR l¼ÈâOòÔµ’‡r&…†Cqcf²ˆ‘Ø’AQ;z”øŠr\´ÏsQ*˳$“Q\ÊD€( ñ>ßËü¸$:©ZLrF¤«$’®àPûj ~Èeýœ;±ÚÂ`di-­Ò€4ב#P9­°ãör³ÏàÝK¯fÑäŠNr4ápûJ§f5=ɦG}Ù¡o/&´“÷‰êHÓ2­Ã’MMºŒœ"¸‘4UŠ4‹"ÄÆ5YB=v Àni¹«S!’Ó­9ÒspžŠ–•Ù˜ªà|@uÿ„ÌŒƒr:´ƒbÛ ó5¤,ÊÃ/Ä>3êzžü¿àr» K:²–¦Ÿé¥C¤ xFµ2€î¼…I§ºÿ6[8~MdnÕǥʹn}@¯ Ýúg5>Wü¬­$y¦V/o s3n9>Ìd«üªå$’CoD‚]'Õ$†'t¨`‘wEþ_Úå“êô‹È$"æè†0°Å EÄ7ùUÛ‘ø¿ØåÄP \ÉÿÓˆC9¶Õ½9Œë¬Ð†­TL oßµœÄ½hÚT­:H.Dr4’)fÉcVV©û5åñ¦@Íehë!$Å"ÂóB‘©¸PIGˆí¸|Q8û_Ëñc3¹Lbh!ï-R¶’"Z¤Ñ¹,Häc^Dx}¯‹‘!ˆefÒÚ8Y^à:òÜv`j¼Õkðàµ0!=0ÒP„¢Š²0£TwVêJ÷E#..¦·Ôm 2JŸFŸ Æ9†ö©N-•Â;è¶Ê\‡{¼Áwq<Ö,cõHR`ËVè~×?ð8qž-ŽOW%<››‘4uVšÓš–#šºÍÓ¨ßþ%!Q‰ï Ù¼~¨e!ÈN.Pô ÿ(/C€òH"Ó D(ÓÊÌ&VN@SâØïðµSmÇ’M‘=Vbã΄„°èþýÙdòrøµÃb»Såú@ €È8™AÜ+)ãà>ÉÆ‚rsP¸õ%¾´!Lsž¥v5&•?Íǯ˜4 å×ÂòHîÑ"…1ºrâ~Ça@OÙÈ Ø†DÝVÄCEêIp ü | ž¿ðX2ÑŒìÜqÆÍlR47rHÆ€©5( GZ~Ö+ý(e/ÒUõ4yM¯¥µ ŒœB2îˆò’+Ë#e'é Q_®*,’×ÔW5fpGÙþ`?árè6Ó!ceMM&7eјH*ëWܰRÊyáƒ)¢={‰â‘"U„HœùâXý|sþ³` ‰( KXú'˜sÞ…<‚ômϪ?á²r–ÌcÓx­%‡Ö‹¯¤®d‘À$R¼FÇÆ”Ìn=¼ÜÐÑÏê[ê&F‹Õš’»Ì%ø‘_³¾J·…ìJ8–Nr2´@ÛÆGÅÀ’hÔý¢¼2Â(S¹GMé j[E æ VŽ‡èø²¡TY×%0Gu¢µKež&Åç¡FëO„¯ÚÉéßø¿Þ ÅîtÚG,/ÃÔX¤Ž§Ÿ.DÃr¨§ŽK„Ý0¾¨Ë5µŽCq '~|“Ì»7%¯]ÏòÑ—*•š¶È€ -éf9.`šX‚Æ?zÈwU§…6S¾ Š&'{RˆÉ4‘´h+Èrøw<5@¯ü6Å0³x–ànn"Aߦý:õÛö²è³iÕ­c@ +r_å^$i³S(¦ö7+·¨±âÍFe}ö.ŠR»fD\y)fy`‘xµÂ:ŠÑX©^ýÎNv$ìœi¢:4aœ¸ãÍÂT1kALŽ^l±;S–U# #DwCZ‡©ä+ßãþË"9’C!¹z(¢+ÔN@P÷-¶^FƒËtC'ØuR>/RäTP{•#sïfÁpTõ£-B#…U""§á5 xÖ¼— J$…¾2 ™f¹ÑŠ€ÍÏáf¡îŸrYóQµˆË} þ­ +ˆÐ7-Ä.Ç ã^90j'Í…YP¬7fD¢òÑ(89*À‘Ú¹(òø"\Ñ7FââÔ–~R*XO*` -’´{xa¸”“ÊR†’шVbÇ«^Ãö¿ÉÁ’[2ÇѶðͧÁq9$)‰¢PnO$ôã_ø,¨Êè6DP%Òú:eŸ-Ê­KF2I&ÀÍ rÉÅ"@)Ʊ´È«Jeýø‹JÐø”DE~ª·,²³‘J±F¡ ZÓököqÅUIÉÍBÊé®´¸dF‘$·”ÊûUƤ€>Ïù#'0˜Äžìâ 2®ï¨ªŒÄ@p5ø¹äªØI P”Âx}k7¶¸G[ˆ—Õ‚g$"9PîуÿÈ Ù™ŽÛ í¬¤—š”,ä·Ù-ðs¡4oò•~ÞN˜Æ6ºîÙbvcZ€ š»šÓjádÒ¦R@ü–3ñÆ(+Ð=›ü¬ŽNMæ­¤_,ú|¶×ÓHLi*ŽJì„ÇRk°pض3ö_é’%`ßõRÇIcÔ§ŠI %Änˆ@ ¼âû²ü<g$w‡õOû¦°=^ôIø,ldfɵ'Ãî@m¿ÖÆfäQ¤Za¦(+kð•c¥MTô>'¾U“›f>T—êOÞIÊ2ÈÐÉ`Ó¢Jj:þÒo‡ÂÖ|Ó¥ƒšPE›žJh ;‹þ##vq;%Öe‘ óŒ++¨©@W£Tõå¾ZZBÛ¬¥„Ï ¾"ܸ+S¿jRœq‘-1-‘f[âó…æÁ${u Ô€•aÓ­0ÄlXË¥£¥ˆ„pR¾´f5Øì¥©JšóÊ"ûëj#MšS 4¬^TNL¡÷éü¬¿ d§Ëf0çiS4КµZV2Ãéšt=‚•nY!Éæ¾Öß„Žd,Ò„æŠô⪽ÇíPŸ‡'#°ŒG;Q²yavG¤n –çÑÕˆ¢¯Jºž ÝÚ„W79feJ 5-E?k¯Ú ~ÍpB…¦@šVÓí¡:q‚*)濪Éö‡]¸°ÜýŸåÈdžöÙì©x$¶Òã³™ˆiæVp6â´Û™?Í^™n^ä£ïkQšU¼x£nRè…R8ÑH©ß~Gõ°ã-ŒÍkO0DñÉè‘“wAï׆í”R¤F(>¯qv}I`!Ø~Îäž‚ž5lÞT ¡âôá±¶‚Z·øÍÙ‹õ4CMÎLï"XrˆìdŒÀð’Âa b‚±Ò›oA_„ÚÈï±P¼î(-@›ŽÎ T ¯^-÷l&¶_3EŸ ~˜2Lî\q©nJ-^õý¬ÙAåN„™HUffB)FãÅEI?ßíc+è‘]S{ :F±°D~ly ŸRiþ¶U“›f>MëRr·ƒá »À$ò©¨$RùpBÓ2CpñÆdrGÅÀ8ZÀ?›ü¬¹¦ú¯ˆ{<“ó@«I-A««’Oì¿k-Kwdñ˜£‰çn`¬rùƒN\IV uæßhf çNSÕ7W?Òfui¤Z€(Zó,xåøÃNC»Vð¬Jm$gn²P­B©à†´­X|¿c ¥bÇ{Š•+èÑÌ-%Z2²;"r~@;/%&Ÿj«ð®W™ž4¢þâ3ª3OW’U`’ò…PT(mú}¯òs#} †™Í§æò1¡ºP¬‹¿ÂÁWâ§Mþ³P>'žŒQã–' ‰$`¨Rj¢Œ§­j¬vôòÙí^ö¸nTtãp¼R9 âúAÂÀ¸ž9<}È –·5n’ŒrÐt,dRvªž™ˆ[~]€R³øïQÕ~®cR@I5#핺öl²\šA²›_¹ŠÄƒCZ†O²£¯ö³.AåÍ"ž5·³h\g¸I’%¡.¬Ѩve¯ØÌ¸‚Mù8‡’m¥Ä#·ýWzŠ7종%Jô¯.?òå¥eÈÕõÒ t‘®$RTZªø©øZ‡áÊ¢YË›¡ú¼õªÊF8Õº¸êÂ:šÓù³+¹Ç#š"zxóIb-3ŲÖB$åãþ³ãÍyÒ8 –{U’7–I¢‘ #ØŠ}j™]š,ëp«ª©:pQE «mZÛÇýŽí•Ç›l’vxL’JÄ*|t§F© ²wËë“A(M\C"_L0ˆúj‘èI.9,BÎþlfh*_¥¼Ö|©,ÑÈŸÕMW‚¢Ôÿy\” rd:y¦¶[[ZÄ[“¢GŽ<~ʸëÄþ×/Ú\£ m‚ öY#ÔâhÚe€JË-BW`¤J•û?åý¬²þl%²2q4Ü| %¨â4¯òƒÛùq nÕthÒ$¼zó¹†Y9îr WsR~Ïì¶Çé¤cÑZ¬#Œh§Ó‰Ç!QB ‚åHý“QCO‡+ܶO’[kk¼m±'ªåñ‚I5d€ÛÈ"ÎéÖ™ ÖöñsfâCr…ˆøjQhz6Q”S~+AëJÌ%\ú³ QCÍù°é@-8õ#/%1’,fSm 0¡Û”¦‹C߉nƒ o›WH{vGœeOM¦Ø.åÈ™©Ðd¥lE,W·©ù§ä Sn4ÝŠƒ“Þ˜ØM-dÒ…x—Š"I‹—~T“¿2Ų‰ýíðä¾N<Íx²ºÔ •Gßc·ü6BL℺X“ãõ%^*~R,K|âýŒ¶$‹þ«Tˆ?5öò°–E’¦Fwˆ’i^KUÜk-œA «Èˆ¤P„ÐÔÓÇ*2Ìò ¦i$b=Œ*´Ø­•!Hßâ?ð9* =å#¯ÁÒ "6©ÁS—7hÇÂŒÆN<™ŽÌÔAß'Ѭ?ÿÔŒêv¬o,ÝŠ+ÄÞ¤² ¢†ˆ€ã¸<Ô«§úùÇãÞÇ“×LAWÖ4Èí#úÍ´¬ñ Dû;©5h‹O%d?kù²ç{Çó™e…n¬o§¥t„jþ”±qªºPñ•+J‡ý\e5ވʇ¹Nt\Bç¡eÉZ¦ÿh#Tý”å’Žè–Ȩ -‡5cI£ᢂDнXÛýŽB[I”H1Kï!'€­†ä¥\Hëü§,­é¬÷¢îà€ÏO™’6àEhQOš}–ßí/ù9\Iù³1”od¡hžÙcfAº|@¸ð!¼ÊÄw©W0B–Öoj²#:8@ €ÿ“M›öÓŸóc"M¤…œ„\˜è ÜP¤6Ý~.L3äQRGrEºXæo èüDì«N¿ËûyHͦ«tÈC+p+#*€Áj)QBkÈìË–O•µB®•u&š&K‰fW\|Rs‡ÇQûUVÿ„ÈbîlÊPú“ÈuUp¥=EiR5 ÇpO :Õ›¥2Ø}-2;ì.DWòIK+ÜyŠZtá¹ÿ'âÀ°ÈŠœrµ¤Rý_”mÌ•V]qðȶ߳†BÎìbh!m¸UƒE1ôc4 ø˜-OE«plgÌ{·X‘úôOé¯ÿ5‘hÈ  mÕHû?Ë•ã>¦ÉòI¾³¿$ãªü!‡Ùý\¼D´lŒ¾…–î6¸”­ämé( ñ'7 ;¯,Œ92—5¶Ò´ÖšŒßVj° üH¦ë¿_s†bˆ `•údR–ðÖ°±ŒD*yÙB{ü\yd2s¡üLáÊû—Ú4‹ —³-ÕÌœp´‰€ZT šuZñýœ$rb:÷ªE[KX€E`^Y‹Ê¢†g¢¯2?b‚£ùr<7&fU_h K/Ås;0I*” ã#½tDc{ª@b†é§±20øHç:ùQz•ëð®6®©¬Ô!–Gªú”$«>0TvmüpÖÈ)zÀ=¼RѬ]¹„M¨(Z¬ùc$3Ô1­é;ÑÊÛIñ’Zj•Tî~ʰí*W1å"Kp)[¯Áp‡¤¨Ñ·µö¹1¥~/ä®HìÉR· ±ºôr½ ) Z/¿ÏE"ô††çP’EQÁã)f§*l)^…¿güœgb)ŽòdL«nÀ¡1­I)Ó“JÓíS¦cË‘É"Xæ{™ÀeYyéAMéþN^yÓEs*2Ô[I 3’@ þb6ÿÕÔúžIŬ*Í+ÍÙ¹:ˆ|5nœEÃûäèœa/ž_[P¸yš >õâcøIQãF ‚kLÎépC,§û¥˜«ˆPºž'ÚˇÔÒ~–®=e[hˆ&)£ ÊŸ ûÿÃbä©;ЖchE°+)b>C~Õ"Ÿëdkr“È!õ5)tŽq#Øñã·CÏ®Kë4-ŒqyˆKõ‚Æ@½”ÞCÇüž¹9E€;´å ¸’d&iÙUåEbCr4à~ŸrQ² ­Û˜·è[fX¹Ë$Šüè'riÔ`ç6CéD¢Íkhn‘ÿyp*J¨¨å%?Õ¢®W-åGf6Ô»Òôìc´_R dÔž6’ÕäíJrLœ†ìÁVyZÜz)/ãŠe÷q®åHý²ù $²™ ¤BÚ(ý5#Ö`&¸g0gÓ®õÁv‘neHExDÒ늿ï$-ÿT¿oõ× +h=M¶’ ¡4­2Ó*È¢8ôßšwå™eDŒQçm$ok¨=¤ÊÒp+¨*øZD"§ŠŠ6¤,0£ºc%Ì’Úµ»5nì$ic—9¯uâ:–û2.VmòîPµhÜ7Õ[˜FAñ¢2ƒÈþûÞµÿ²r0Œ·‹»dâܾ7E )j—E` _æâ?àr1䙡´˜«$ˆ¨§áâèÄÑ•êKm¸&¿³ûXÏ’!VëhàKf0[$±21*ăñyPlxšüKŒ‰'š€FìZ u§–à†²ºš1Ü’‡—/´¼q….ÄÚœñbxÅE#"µZõ¿Ú­>ÎS![#­]ÞQ(»;%‚AÛäÁ¾"Ü~,†A»]ò¼œÛqÕ!-¥vŠòØGVÚzq?§"TŠtÿ[íe¤n ´Ø£²Å„–&7Ë585XÂ@Hø½¿c&FìÙVñQ®]HfŠ«EnJÝkPLmðäa°Lù¨j—µ*9‹i‘¨†cFÿbèG6ÇGÍe2™X*‰§¥DJøiÌô NÿöÿÉʥɲ#t’éÚÞi@û‚®¥jÜ]¾3_ e°²6kŸ5{VD¢i(X®$v~3UPf£ö°ÈrDJ äŠ G†.RÀå£-S@AÝÅiöêX7Ý5²7Sõ—R‰F6áfBăQ@Žù\7¶ËjT»·ž8£Óc«£È@XÖ”E$ì>6Èãõ,§° ¬ÉÅä*ŒÆÚÚPVš¡ä¼ë^@Ž5ߟê sXÒË<‰ C#Ÿ¬…Qêòv«õBí‚"£h‘³JÓGg=¬°DÜ ô^(Þ*bˆz wb0Dït’)’ÆÖç™õR5õ¥ ×oL`+Ë~<1ˆÞÿÍI;RS#à‰ÄK&'qЯ^Uý®9.L)»D’>{­ÃHÞ«±Ý–?±Cƒ$ˆÛ£(FÓ‹ÙÒK+vŒcrµq·&*¥d/Lª ³‘Ù {ƒ ±£$\KǸڊ ÷rNÝlÕÕÄ)ï^)@B•"ŸìÞ0Çs²ÁijÛ#QM7UÙM•”þ×zå9íÐ䣬ñªV ê>×óò㌨{”I(­^9mçŽÙ¤++(!ºíÔòÊ w¶É©/Fh$v¥#X•¹oË“¨þRãý\°ò |ŠÍŒisõN2Åñr~ÒÌÁIRvØå²€Xƒ²¥«½²‚)N1‚¤U@è¶ù‹îäcMv5Y F}8¤t±øU¦þ<¨rÌ&÷1ɺ"æX¹ˆÑÐÐ+c°¯SL 5’„ ‰þ°ÊCBÌÈ‚H @gڻ啾ÌIÙ´X–WY#ãσ;‚‘$Ü>¯d«“ëGK!8šäÉéĘöäŽïJPîZ¦”ÿe”Nîƒv:«<•î]myÊrV.¡ªð;,‡ðÈU–Âi(•D¶äÍ0¨“‹µEZj3‘P?ʪåãêh<•#X¡Ò* #$‡Ô'«1âª@¦þù ›0j(e…ÛŸ®=#é3ÌGÃÅ š7ù=2Q<½írVŠYEòÞ<$B‹ësB*»:ÿ¿Lã^l¹Jа¢¤WHÈÜ. L“Éx£1+ôž¹2y1#g/¨&IèLA¨PTš+ÿb{a'ÒP9‚Œ¹Š8ìc ˆ–D¾• ]”ß<¬Ë3ɨVd@‘sQ¶éûÆ%+½Sl‰,©·U,€F k+ñRRE —~Ù) ƒÿÿÕŒ3I2YΪrþîAû+s â@û<£ ÙÇ ­ëH°n>³#é̼^NfÑÅ8‚*ܧâ@y# «¶Û³KtÁ5Θðê\[µ!‡nnˆßÝñþ~5ÿYW'9Q£ =Pp]¬Ö±@²³\YO@ì@>ÆËR?ßmû_Ë“ Ýô>–@Šêz¶šðTDœòà#$¡Ü|u_õ*»»nª’Û¨‘Ñ‚HUa‘¢ +V9>5ˆñ¥*ÜrÐy{šŒy¦Ñg±HÁÓăw]¨Å)º£/KþG,«Š¤Ø!qJæºqyñºú ©,¿²Wà®õèwoò²`µ»÷R´Á‰‰µj³µx±jçþ%þ&Þˆ[X/m½ä­´RV„¯ ññª0<ÿÕÉžFÚÀÜR$ËwP4CòèFËÿ¬Ì£Ÿóe@[9=¤¯o~ïÅZ/W—½%NKÄ‘óÿU—'-Ãwµkæ® `±â­NDƒ^ÿÊ 9Ü„,Õ&gk)ä$ñs ÒXv©ørì`4L–õ+fŽÖæÝäÊìòH Uø——ìô9-Å3šj-›À®£`¨Í¸5¡Sö«þNX7!¨Èë>Fõâæ¥BíØGZ’zø…Ã(õò?z/§¹4ó\E§[’C ž­ðñ`vR»Õk˜ø—# Ù °®¶æ¥” BËÄ–,À÷Û–eÃŒv*óË—̱#°˜)ý‘%I©?çË+…³'tUŒS®‰pœ€õ.8_¸È“í‘Ê}@ù2Ä6+Ôñ´hV‚ÞÖ7¹A,>b½{½N Ìó,­Š6K„i*Ó@Á†¢†E&>*?a˜ª°ÉÝ0Ñ÷ŠËjXÒ«©tä€=INô=ÇÅÛ*ܶHl%¤ÑEúѬ2¡õcÅ(hiüØ,{×p/½ p²Ës;ÄÒPu<ʪ#T°Üq§*dÀçÔ~"ÀòUBÒ£¹ ê„££p§Ë§Œ¼™\×2£_´2%%’‘ †žš¨#áèkPpØ_4u’[¬—´‹"ºâ¥ƒ7W¦Ã‡ÃN#+ÜGsh+ˆ G2JÕ’_†fz€±‡ ‚€m¶#H#uÍéÉ%dTQ#òxû]qQÖÆÜ]ú1°VuŒÒœEH,¡‰ðý¬†ü,¬Zxá–9ËKt $UøT‚»†¿ÖŸk(-û¤bÚÛÔx€e ¦Õ!EÓ§Úÿ†Ì§¯’îz<² &%j… ãâÓ-¨ÊÁ4“²g¥Èò —w‘ŸœËÇ£Prø~F‘Ê(Ó,{„Ñ3jAÁbhè­^ r ÿ2ôÿc’€ôü–|Ð2ÿÇÄ&¥L…H­ +·Ó–½µË’Ë–,lÈŽ”ï±®ãùpެOGZz•…Ñ£Œ³(êÔ*?›® 1Ü…žbwK•…‡8Ö W€Ý€¿ðcg«)„šx™X— fi P¥qã_¿ýlºCfh¨ž3-Äq#ˆ”—…ˆøx¨§/æÿ'µ/4Êâ&m;NŠi?uésG°š@7>ÙI5#MÑúWLn'U‚9¥¬ š¯Â¦Fíñ†¸H¢‹ÚÚ± %g‹—­*ˆ‰w¯îåbeµBSúÙ)DGTN¢£š„¢Bòzp– Ç¿óÿšr¼gfSÚ÷¶žx‹G:ÕLPQØ‘J±â;ü8 Aß’dÙ/Iƒ_ý]ä ·*ñ‡¨¢<„z;ÇÄ€o–íKw]i5Ì $¬ŸéI)õ×tb7û\…q•z«\ÌL¶Z•¹ôâ•ÌR‡¥ Ž_²Œ´eþW\by…—BêÒ>ê @1ôC¬¼Å ° °¹ö­[ý‹c Ç oøõ.Mû Ki®.WÔýÒ™M·'¡1μ·¦ßÝž?å`‘4/ñ±ˆ2µÓ_L`OZ^)o"”1•_‚ž“ú†Ÿbh¶oò£ÃÎßÄ?ì“-‡õTlmÌ7ì=OÞDJ£©£FF⸩§úØe+ DjJ·ð%»9 ‹ʰøCå^G€ùÈÆvN4Púdó˜eP@… p¢„rqÄ0öÝ— ¹"ÚžÚ?­”°"J—b¿ˆ«‚7IßÍ}šñÓ‰Ä+P8¾åOfAÓü¬çIÇÊÔïdW°èEã;…®ê‡í6û ºáˆ¢ÆFÇš%f—ôtñº({w©î7;S¡ø+ÿ•Èn)²cmÛNEóK *&TFxÍ)½ÇöMpcv24vBiðrŽàTŽÚu2Ôž £ªÓÛ.$l×WjWƒü—Li'åI$nÜ+ãÛ!•2È7Bß‚MÈ•—àM >à¸íߎ[Œrj™Üù'º ’ydd”iXW€§$û%·øk”d±MØ÷%j“I%ÜüÅ“-FÊ»kZü_Ë–cæJ"‰tâ%™B¢t)]ù|?ääç>l"Pè²Íõi•q"#4ƒ­Ú§ì£­Â”ÞôSW’w>¡…é߉ 7#o‡ü–ÌxC|è(N³¹[‹ÏžuFø¿|åAVè:%rqØŸ/KtE骀 ýX³ÜJ*I2†. ö)»­‘Êv¤Ànз’kõ…™R^ȨoµñAJ`œ‡’Æ;×W:ÎÑÚ9$T Ë0X€øÅH+AÛìŠ*ü_ÍŸ6Ìku„>¬1J¢KŠøÈ4Vo²ÞËþN K“Ír"„Ü''v%y72ÄÜüü¡ö²ÂÔ×Þ…¶¸?Zú»–¿y)ÕÁzt<ê2À[w¢žÝÌñ[Uª¬Î8·†ß~ëÈU¿à³n\žŒræ?OGâDˆºƒSWݘR+\ËËÆÎ1GÅrÏ©¦ª²BÉ+ò"»”ä@öÈÊ<0Pn{;C¹ˆŸQcrÊPüJ í×ö[~¿g+Ìy3Æ7I-~¹r³GÆi#gdåÉXžMA·ÅÄÛáÿ‚Ìáj<Ù%Ù™´¨NlPQ©CÔ¯ ~uÜæ)doÐPZ éWE+r¡"2e?}Ä|OFníÔí™4Õ‚«Òi(ÑÚŸL†(d2?G®ùP“ÞÙ~ §«\B´V‡“ÆUHJÐŽî£ß§ù8`6e2µD†Xå˜ãnA)¨B~_ÊZŒßÍ—ÚœÉë„Sñ««HÁ˜ò¯Ûo²pƒhªC[*Ϫ£\ÉèÚCê½Ó’6P£cÓ¦H‚#]õ÷¢&åå»!²P°¤¢0¶óSˆbXzj([¯&MÇì®bÌ·À}©6ªå%32‰\~æ&mÊp=—Û-Å»„‡\ /$aJ̨”JR Ó§ín«’j`yµfÆ8ø‚Üö@È„† ¡Pô¨ëÈa&Ïù¬FÃ⯮zHãшÄÐ(­2U«Ôû‰r¼{ómžÈ@&o®ÆV‘c‹zìWâ݉ðßùrWTÀuSKxc¶dXÉŠHãXzšÕž¢¿ì²s7"Æ; O4ÓA |ÛÑy ŽUÙiÕi¿ØÙîF>Iuì£ô§ ÉW’';°âÕ*@'o³“ƒÍ 7 «ÆÅ™¤e"”bÀ ƒ·.»Œ´óh­”n hÙÑ·’$§ À/ZÛr‡âÛ'Ä…[Xä-ˆðƱ*º<Ž)U©«- kÓ¤„ÆÄåbd•äi%ä!Å*Fåë‚cvqä­uêú\X;²ªž qýž´9LH ² jËI?¡GèWÔ¤•k ((ä´Ø„iá¿ c ÊÕ9!ŽÉ¡}i €ä/"Toâ’¿êå} gr«Hq<¾˜ôâ$e(ÊiB¤µ¡ÃFƒ¬¿ÿÖŒn,/æ°`¼de”£’„`•• v~ Û8˰ בF•õ ·ñÊäús¢Ï¾Æ¬(Ÿ²äÿ±lqò¤ä‚©ÍñÝFž‹ÍÁVrÌ$  ® íñxõpÕ-’K¯Ò‘ê ¼¦Î©ãGVjeœ^škõ_TÛS¶[:{h _¬DÆ1öYXƒƒöyŽ™LMHѼ‹Íû¹¥õ=—ÛDÓDzIqU¿Õä9q?åeœ¬tÿbÕwDó1D©’Ò;{ÈÁ—êíårtG/÷âüEW+–ä†`ÔAKu;8㹺 Uã<„ŠÊEI SCJ\²ØÊÀa1D®úìL"wæ-YÌ2Z€Tí^|I^9Òg²þ«×g€«C4%QÀaPW—í+uþ|™ü[SZ)¦34Rxx Yv©Ù“åê|?äóÊÕ6Öö·N‹”Ê× "hRáÏmÊÕû-°“\˜&I@õBEKÅrÀŠ£ÆÔZ)Ý×Ä.J"Ç»Õ÷É™ ®ÔÄŸVIƒq’Õc‘ã`§#Ëné_øØÊÚ¼Ö³1sñIÇíÈåÛ슅ZþÎF¨„Äì¥ÄÛ„¥cE`†ê"Z:ŠïU£ñý¬¾÷je $¿4f,›©Ü&½j/,eô¨ìŸÞÇ Ý¢#Y"fs-J’I Üí˜Ü|ƒu7 ³J›ú!Y˜†ø½8Ðì‰É°,i(ô9\ý¤ueâvBP½7ÊåõÙ¤©C-Ü“‰\¬kcPŶØmÁTnƒ&O ĺû.I}UD›óZñUZu¯\­ ìÖ$ºnPÇ(¡@V:qc)RHP>Ò~ÖG4ä%¨[Ä/`…B¥”iö:…MÉáE r$üLæ*‡D®o]dšþ2YR7GwÊUGΈZ;šÀ]‘„Uy¢TH$™‰UsCϘúpX2òZ WUeCš’D’Y&cZ3߯´5ãü¹õnʶDér]HEÔ¥6y u+A¿P›ùqÈ8G½Í›SÔ­­½y>²êÎKM+-BŽ`qS¹åN;à„¶³î†ôæh¨ôhÍM#ãúpZÒb–kåÈšÔ£->ÒÈzÄõeY“~—ÔhÆr*ñ¢€Û<²ò?ä¨É!|]lì “ÍÓ¨7 –$þVT¨¶Ÿ¤!厧$%{‰ffŒó$=iŽüÿ—,åðc[|S 9i4vïÅ}98˜XVNT«½=«•K•÷³p©–ïV·3Ä^—ˆØ†X—‘Rè>Ër ‡é®tйoÞ¾Z‹»™‚#êü7*ËÒµoµË#¤Rg¹6–ˤË-ÔÁ9D È)PÞ˜@ŒÔÿ%*å¢{†&;Mœ×ö÷%Ê´³ÆeõTÓ“CJ?•þø¿à²2Ú™C{CÛ"LM•®@ jþéZü9d¶aJ÷ròQ„TŸ*2/ê§¡dä¯üÙl™r¥MÒ+hÍ™fxâUú¬»‘ÁEkOaðñÇ!â7ÕqF…7qk餞/ZÒöÉ¡•¢‰‘ë…ýƼ©‚'Ó·8ˉ”¾¯)DÆJ–Ñz›‚Ñ3´ÀmÎ"#xä_Ú]ùW ¹{s Ý«› »Y·qw­9,”£”Wý,Œ6?æ³°GùÉ|mËFˆTJcŒqz1p)ðš2×&EŠêÀJ©Þ\Ve$Ý[;‡Y*K 5Z1§nKŒÉ?5{váê[£2,ÁŒqŽ-IJŠ(øƒ2ü-üÙ w³PºuU·¶(ÊÑ"z3ÇN!AÝåoµ2TŠ^H"Kx’GÝæȧfQ2­Oü—|æ(–Y˜œýa}9’72¤€FÁ¿ie¿ÕÉdˆ¹0‰=P«êÛÜÍn˜‘£•8Ü?Ã@w=þ<™-†ö¾hÓôc#5Š'Ô¸©SQû@5kƒÚ™dÜ„-Àê±~û«–P>öÀ5ñnC¾Y°×*M´Fô $Vt Ûâ Tq=«_æÌ|Çp݈w©j6¢;©81iº(«pn½?gÃ+„ÓdÀ¤¸TÀb^"8•=SO·C%O|É'w šZ´ÖìvÍñîÕTˆ8P‹þQÅ*ú»2ê9¨¥Y –~Õê+·Oµ•âåm™ë.­¢Pà R’±/Ö K/¼’½¿Éɱ÷ Âgep®T„2”;!?aß¿òä&Á˜—2»JŽCqy,ñ)™" €Õ=VrÓŽËŽcQɆäžhpmTHÿ½•¿{Ä+£‡ŸÙß$~Æ! æJ ‹,–SŠɘԖøˆ'ý†HoÌ­"’ &º¶·¢~ìÈÈÄî6§Âzƒ•ߦú¦†åšá¯=È3\Ì*Hä«ñ®Ç¥C?ÃþË% šLý6’ÃÓ•Ð"°–pVÅ[AÒµý’r«õ6צ’…Š4 Y”Ôž z}²DšÝ®…«GjM½Ä²â£ÜÔ}¦<ÿ²À S½9¢´“ŒÇ  ’@»)b »ßâ?n˜3Yb Tµ4E¶‰Épxš–¢šåàÇ¡r¼¹·–þG•„¬ªž™å°~‡Ûü¯ò²dm¿Ô×µíÉD+u8xýe`È58vþNJKÕ£µÚ8-„³–BüÙIÙx®Ý6éûnI$—ˆŸ¢^5FÝEÃZpwß§Vý–̈- ’Ü]<ÉGI#dWCð(;†í²ûdˆÛv1;ì©åé˜Ü\–^2Ün9uàOÚîÜ{§4v ñ”œ9]bQ@Cõ'‘~! (÷<¨2£ô5Hz™9[J·Rƒ÷¤ 7$b@à®a­É‡ÐÒƒr¿õ˜£IéÑOÃVZøÖ¥Øå¹G&¼_QC«‹­e$œ€ qæ:–‰È¯µ­9•ñe¤ÔZHÝ1ÔÑ#Õ­nNÆž‹š€k*ˆðßáÿÌ|CjrrlQòêŸY¤$òã©RL„u¨éÛö²ÌÃo‹N>aªDÓiåUÉZ€÷¡•}鿇ÚÊ!ÍÈ—$†5 "ÛG9A©-hMiEîkAñm™\·qyìÊì …"@ì²m*1¨†Ç—íf$äI·'@ Z‹\A’1<¸ê)ðƒNÿêã6 ¤R[{`c,y"z‘¹‡N”­?kjååÇ¥+sm,ѵ°s‰'ÒèÔ"‡sV_‡%ËäÖ Qê4dzp«4Å‹«¸õRoddŽ$ôfE5(«Ñ™ #á>"§(È,îÝ-Õ9Ç|…[ËñJ¥Ð|TJSùŠÙn±c‘ :Ä2´EØøü`UGQJuÂKZÑ žV>ˆ‰G@ 9BGa’æQÑ|QÁ,S¨x Ìw¹äzv®#§š÷¦zy¸yUŽ4·Feä(—ø¨Ú¯ísÈä?s<¥QÿÒ%@è\*XÉ(kÁIð Ýr°7g{%$ Ó®½ À PhÄÄ yòìZœNY¢ÚåÐ«ÊÆbˆeN]‰“e¨^\E:oÈ. QMì±Þ ×%,.cTRkCºÕùŽœzïö°ˆíýT¿½l|n½nCY*¥\ªŽTíÔÿ±ÃT9•G’)u-"¢¯6æ(ëP)Éü‰ùü8›¯’õù ­ÝEÔÍÍܘÑx³£æÄ7Š9äˆÛñÞ€Qšš:( á¦õJ©¥<zõÈÄ2(egy­ä`UؼcpÊÌŸd¨;/qèƒÍ0¹I&R¿ï½9˜ò €½*~ÕB’?i²0=ì¥Íÿ×É*ʶ:” ÉhU¡ Ê „$•©ý¬ã8H°y½ ÑëÛrl%’!ÎhÖJ’%È‚ŸîÞø~Ïíd`Mþ?¦SoO[YôW™IžC$;×›°¡J‡€ßý\9«Éâ8|ÒëY"YŒ@r yÛËVWá#·ù''ѨìQײ¤1Ä$PQ9cP¥XÇ˦WͶF’û§–&I ,qÉ…T‘Õ¶øz|Yhˆ-vŽs¨=w@!N‘¨ P´î¶^¼r±VÌ“\’»‹˜’âÝÕ‡ïlô^R)eæ€V´^«—ÁjÓ6Ò)lî㨠#x b—z«)=ãÿv(ý–ÈKýÉeïç%èe‡Ì!¾®eŠthn¶§Ù£;ÿ6ù*êÿ¾cÄD‚-½-1¡ˆ±šÖõ,J3`OÓñ•KÕ¸lªçÉx¯{ìÈcš'f«Så^/±ÿ' ä[—JìÑÝ[€äuÜd¨û!~L+Ëö²C"vVc» Ç«ÛI2‘ÌJ :U[‰Aç’†Ìg½!t´Ú¿Q*§(U`­…?ÕS¹Ç(¢¸· ìí ½ºì!ErÕ RiûÀù'ý–Y¸ %tP"f3ʱ'%Žé6§ÄQ«ÔþÎJt~Ö"é”ôÁ»¸GŽ8—מD«`ÜPÅX¶ßäæ šgJEª¡ý$'y‚Q•›²Wrköj»fF/¦š2sC$-ûÕ €î«ê0¦õ,Oú«¶'dA›KŒÔ4WSµ´~€ ¯Mÿâ?gÔ¼Ã*ôù5iÎ*æXb1«:•Oµàâ¥E;òý¬92¬ D•hãýåœ> +E3DO6W¯/…Dµ€õ@è®D“jE`Z9 4ŽBƒ¦ÿ³‘†6“¹T¾úóUJ…ýð7"ÿdU{ŠÿåcÕ„ÎDÒNQA<Œ‘´ÐŸQª9Û€ æÆŸ¼ªroÙËc*ÞºJL od]àã$„ÔÆÎüJAeÐxò¯OÚÊ`-²vijȾ¿¨#Z«©ê)âGóþÙý¬²{0ˆ´ÂÖGh FdôV&ôŠy±, 4;ÿ7ù82ÆJ($bÞ€)'ݳǕyüÿ› O› ‰yÄ *´Œš’„0¨ ê7g#É<ÚY &`5•C’Û±¨Ø•áü¹tÛ\2dh@XM\«/ÅìÃÄm¾Ù†M9@ZA ‘žG Kxä,Í»3<ЍWÝiÿ™7òi#wO/¢ÑmK;0–R›zôøÉÀ6ŠO44SIݽ¥ÅRæé^m½v䮣ˆ¡ ºý¬²q»#øî‘[âoJF@mäŒÉ%»ò6Ÿ4ˆñF~ËmU¯Ú|ïe®#Ž ^+cûÈg)=œ‚«Í>Ҟ߯üäâ}'½„†þJÚôP%Ã\ËªŽ¢N²GþĶWŒìÏ${›ÓåÂÍ`"žo ò5+³qìü8r8ŠÉ³%?x iÔ•'nUë¿üH%NÂká$ñDMP7¤ÍO„N¼Ù¯í~Ö2ˆ ±‘½•®¤kyŠ] FE’+?ÂÀSö¼°ÃÉŒù÷%–ô’Þ{Vxý4PˆxÂõJääw¿rè›ëv‘p•ýu»†hÐKsª±¥+AöH çå•ò4^À ´˜f¹ÓmxÚÚþÀ•¿o@ÙwûäòБ”ƒvcæ ¤“Ã>“z¼k,\gæ +ZªÄ²¸Š,Ï"¬ê#³õQ«‚)[â£Ê ©ñ#Žç’…h§úI\ŽdXëöV‚”Þ¿iÿ…ÈU†BTRû¸Ö²m£oDÇ;%Xœ† FÔvýœ¼nÈ»ÄXL»G(Rcé²7 #þÇ“ «6éòÙ ¨[Em¤‹ˆØ‰]xÛ‘³ ´­þ·üK2q‘[÷¸ò»Fé ,—‘ú%¡–C'Hb4£ä­s Øw·ã;”mãÿ¡½¨g[·Œ\:>˜Y6QÝ‹ñø²¨ Áém²=:Ómé)g¡æ# Šiâß³™rçn0D¥»K{ JÀI$‰§ìž4«òGl«£>ªwÑ,·¬í9$˜ªqzŠEH‰ód±ŸNȘßttåÛTu•š8៨ O‹ƒ½zeq›g#ê¦íšE±v2!–YK/À­M‡ ö°Èz N– *¡¨!~RˆÍ¢¨øW—ÚjÓŠäf8¿Íe@B47LeHÿyq ’B쌅‡%$ü*rl´UŽæ³ÉVÒÊÞȲ—–YÑ"V¨q JoÄõ-Èd2K`9sÿLÙÏã…Fä+ÉéIÄUêÜJ¶Øò ûY(ƘWY7¡qnÐH«(RÈd©âxµFÀŽü¸þÏócíjDK" h”ÇÊB*ƒ•B:|DïZŠþ×óe|‰gÑg8ãS"Dµ]½@û°¨¨SþAñÁ̧£È‹ŒrªÂ¦¢†ªʸĩ™é/Â{+R®ê­Ê‚”Üuä¿ñ9…R1%¨É¤R"UDÛÆÛVƒ(‰&Û¤9%Vþ¥¨ƒÔX̱ÅÀ ØÈO%©ññ|»&ä´ÄP gëë©Ã½D³Ü\F-éÈ~¿å壯wa=»‚V°Tyx+0+Éjcg©¡ì«Ó‹f("ör7¤ŠÞîit‹§YAe„F=>TYÒ­_¹©ðåó¨5qlí6Ö99À^Gp~-þEkðä³’>l0óø*è°Æ/¢ Ô‘T•©uäú­Äåy¥œ~¤²ïŒ~`FçéÃ*Ì’BOI)ñSo´¥y¦[x|˜ÌnŸÝÌ^€!ÛÔø¿hì:ûGùs[l¥GO‘ _¼ªRG74§$Q»’´é’Ì.˜â4PVpA©ÑŒK–Zòa!§2§Âv1ƒ—a¤ì›ëÒˆž ZŒ8Ý(>G€åâ7å˜øyìäeä‡òɹŽåª‚HàGÊK’HëCðýŸåË5WÅ«‚™êÞ©²j¸"¬:€Hj×`ÌÔÌ|{—&{“Œ]2_«R›.ı­{ìÙ“tneÛúr)÷hT¿ÿ߈۸é˜ÓÙ¾… Ö‰­$ŠMØ)·ìs,)ôí¶óòL’ùbônJ\;ÅÈô DdºŸOÃü¹h7òi;|ÝÆ·SJJ²«!SÄÐà=ñ÷w'ßÞ˜ÂÈ÷SÅ´ÑPq*¥JxÓà ~–Qú”5O]uNZcW{’w$~Ç.»c‹pÎe éÃ3¡†Du*R½Åy§,³cÞÕJPÒ8ùq,ˆêî€A©ëüÕÉþ¦#ŸÅ q{ùÕùsô]U‚†#âåÜ…Øî™¾˜—/{,Òyd‰42 %˜êV¡@SñÚ åÇ12J©ÈÆ.Òíf(’7„”@ïYQB¨®ÿþÏóe¸E±Ë±R,èóÂ`…~êµ÷ÉŬ…m 0™ž3ÃÑ@P¹¥NõñéÈvN>mê1\ÝjŸ¼*ŠªW _¸7цÑg.h8øÉ‰d‘ßÒaE Z|,?o2f4À÷ Þ”(@õ#‰•n ¡pE›±ðÆ=VI‚ ºµhÛ‹Šì{Ö¿åR»m€Cê!ÃúlMqe%š¦¿hŠS%Œ£"@˺«0 ª~.GùTOò²`ß6²¶ð ŽeŽ]æMb=J'^¿³’ˆ³ðc#AZ7õš‡„j Üþ U+9•GÄ£6 .eWKŒ}¡+”Dn R¼ª¡-ðpþ_‹¬±£n­ØYÏ"ÔCÂæ%4#ºÍÛ 9†}‹Ù&’¤$… (Üðì8íJ·^9(U°™Tdkˆl¤˜¬bgL­OÃ]› 掊v6·¢kÅä.¤˜ÈŠ»R2~/ÙãþVÈ^J"O4]Ú‡’ÙT³DœÞF5¡á^4;ïþFWÈ6uCÌóD謠¢©v‰¶F­ ãMûŒ”Ó Æqo „ž H` °ø¨iO‡Ù¦UͶOÿЉéké9{wm”UbyFÔsËà“ö³œ9ÿIëc;¤ÎæBç…¹6ä)øC’x¤â~ÉFW®UÉ—h÷ú\pÉw‡ì´,ET’Go‘ä¯OÙÁ–œS´²!•Ô‘¯)L91“ÅÂIñ£©5(y ºFÀ-@oI…ìdÚÂíñÆüý'SF U‡Î™P;³ÙèYZ&I^!i@XŽ4ãÓ©®Z{ÚÀ蚇–M tªÍ"–ŒòRPuÿ!”ôʈ{rl˜oÍê6Ïës…G¨xKSöãj©%–©Çùs"2üY¦C¢yœB5¯)"È*)Qê3Dh~%¦ë”Stca t×H—n„´ÌËêöÈ4Ë©ýãGzü_äå‘ÖJí¬QX•¨YPÓ•¨Ûšr®Ù ͘¹¯y})äšÃ÷l‚`*)âµê*ÔŒ=Ì:@,r£L}Bb‘fñÕhÉHQ62çðOîÝâ°E§îÕyu¨Z|L?k­_)Žòn–ÑJ5U•Ýý58ÂFA'iÉ€ÿZ¿þ\–2ÏšÂî’Æ V dø·5éF÷§ÃÇý–HW4™²G¨‘„°£‘«Ä/ûñ†á•ÝÚ7Š™$eãªÎT°¬‡áÞ¯_ø\™Ý€¯ÓÍÔzŒÁT’@$ŽL­Oo‡lœì–1 É:‡fUeâi¹aíÔå\Ù+,«#CF£ú¥Íô ÄÔu=ðV̯te„1UˆùI+Ñ«JV»þ ‡ˆƒHá V@¨„FSàZ|!8×qÛáÿÌ{rI.m?w%â·ò,kZŽ?Ìãl´©¤ÐƒÖPâ7£¼Ô ä RO^ÊMrc›ßM•^($i=bÈÅŸj1æ>-©ü¹ÜË,<‚Sv­$œ¹¿ïwVPl”6 -Ê“³¬—S‚°Þ•d&„×å–C k“w\’GÒ¾ ±"§£n2#™dy t“Ñ…˜*IÀ =Á&¿ì†HÓÂá˜Í@-RƒÄŠÓ¿Ñ‰Ø–És ÊM,©!»‘™Ô¡©îjþÊÓáË0«*bÞiÒ7‰Uˆu„(ßÞ¡»ñþl6 c©ÄïÅ[a¢r!JT“È14m²¸›9O,ÙÛ§÷Q¬e‰§ÄXî¬ þU¦Ø@T“An’ Bnõý*©|‘½h| Ç'éXl­"ȶ4Š(ݹ­8¯@ìÜGÃÆG#†­ˆµÆ‹¨3JJQ>=hâ”kÜŽDä:6uJ¯e¶´6­Ù´”#ÜJ …§CÙySÔÿ‚Ë¢ ¯Ì5ß &–Ò¤‘˜‡8Ä¥}?UE}ZÑC¶Å¾!öÇì¶Bc{l‰5Hk›ˆæ?¬;$#â·˜’L|Á2FÀìcãü¸Dl0”¨¢5¹l.mbž­–n%¸“ºÆÂZñ޽•°b¾*þs<¿M¬ÒZG‘-”5Q¹~íê~ðkMñ•"! *ìÊ„U5ÜTô þÍrPÜ0–ÅSNyâÔ¢ž¬¥^)yš02S+׉?ÿÀã =é‰ …mbžâê3D’T¨Ô¯`õ#R ”n—hö¼®å2}‡@é³zÁB9ÿY¶~99¿K}V›:L±Å††èôãèíË¢ñ”7Âã)½Û j«ñÿBÛHñG ô‹4nœTmZ6è+½H4a†]¡»H£u gT2°–"pkÔE>×îØü?³„žH®k´ÇŠ{%¬AÕÌlO@dÝM¢3¨_õ±Ú©jÞ\'Æ¥UhGïiE4ñÿ‰a®äƒy½V(Ф n(*ô‘‡ûË`šÎÑ5»Fê$’žš¦Äd-U¡¯ÂTÃeù–Ù‚[zfžÙmêiE–ÜìO_LŸ–N—½„ºû‘ú0”Þ—rÒÊbéµ(ä€Gj¨éƒ%VÉÇÍ}ÔíÊáªj±€„Öƒ— |;’Ùá ïr“ÉÑÊæUÇÄPFýÿj»ÿ­–ß› 4QZu«~‘†I˜YLÎÈ(À± ÿ)ˆÛ!#é4±îÛ£É(VžW¸cäîß•Ðß1ä™s_©ÊòÊÑšª³*LjF;ç§,¶Lì•[t-¦ˆ¢©V‰dpäR9pJ÷4øp©yE]½Gº·iÊÒ(ôÏùL¤ž ÒœŠ•š£øúThhÒ¶™f—‰gíBÄ"H øiÅF Ñ) ¬2[¥¨ºXÌa›œiBÕâ ré·ûåÈI¢ÊèZýJÜ[Ú‰^TäNã™q¯vºá„¢@RcøÉ–*ÃnDh Û'öÉÉBêØË¹òÇè†à.ÑõÜ7¥7ÜdJA \(áÁW"µ<ëÿ£Ç"BB¼*³K)×¹%KvSV$‡a„ŠÝBud Y%1ªIâëö¿ÊäNã¶Ù^BH à%Ú¤´ -5bWañ(-Fjø×9ÙÌl“ß[´RM°pŽ¡©O„mEÿcß.ËIW³ž_Òª­90<­é¥Ž§áÛö>y*ôs}AxímÂB†JÖ®6ðÊòr?…&š]>ï…Ÿ¨¢1Zõ-ôåÖ8îi ÑVÒèoœíÓŒŽK©g Üš.OQËnöNö{`ÓEªD'%( T+(G^@öK•Hz[ÕºŽ± ÿˆ=Yš’ÅžrÈÙö¦ã®K ô,þµkËhÑ4øV ÈK8®ìÄñn'~*Ãör#y ŠÓíÑ-ïÀèŒÁƒ䥗ìÐ}¨ÆC!&“ˆQ)|ËqõÛ{€”gH¤fåVdïÓŒˆÿ³—Š£m2ækQ™G’pþ ­j?Ùf6+Éžá åþbi#v"F-U¯TTé°®õË3µaæ™j\„–än¿¼f¡ô˜Ù»Ó¶S`·O•1ÀÑ‹‰dgâ ¸¨0g’„ÓìïËìfSŒÉ,Ã2âªËTXý—qZôßß1¦(¹· ¦õJ¬r2˜CÆÌ$óâIëØ¶&V‘––I¹ž„(CoȧxŽ]s †€UaŠq"Õh¥+"9óVý—Ãö—È…Âai,+yyÕ2Q‰ß¹Œ¤6ïjåbYåæÜVDô¤ x’7¢[ìôý¬qôYó(­Ö’!Gé @ŸP†§ùH1È”ÂöFÞ\sTµšS sMS@kFåüÎV›äj÷dIK ‚îí„(B¼q*QªµV ~": 1Û›µ2JÖñ7‰ÎXS‰äÀŸÚ?²*¼¿Õã’"b –Þ˜[•_MT’òJ76;(ÛaJqÆÓV¥§$‘õ _÷¬7* —$®Ç¶ƒîX½Qãd¿–W•mÚ@®ìíFûtܯû~Î Q±ô#ÎTG'‘Y@cJô ìl27jRc1o®XðÈQƒ¨ =6&HSñd,S0ƒ½š.)l*‘¨¤€‚ÁêH*)ö+örp‹\Ë’Iî4øm }#*ˆË1å³U™Aÿ}ì½r%³ŠÀÿÑ‚X´ö†R²Ír¡ÜP²8“üÜn¹ÈÏzþˆ/WDßRkØaŠþXËI™}2J‚ãâ ŸØn»ýŒª<›%±nßOµõa’áùÚݬLJlÁïAâÕçÇ%#Óù¿ï˜Ä²B©k{Ç·œ”•ˆÇQñz¯QÍ&#ñüLMƒøþÎÖšª’ÌÐ;F­QN} HaP¯þ¯,¢[o…’­#v”3G OTìIF‡$ufæÌŸ Z ¾ê6ÈG}Û*J/${eYÀíArÄWá­+CSÈ/Ú˱ó®ö©òN™ât‰éèN÷quA!ø¸ü54•y|9En[‡$Ǫ ‘‘¥æ®cØÒ¤Ú(ßÿÁäÀ fé^õf?ØL kÍxüaOr¦ßir¸žŒä %ÒúÚx ,†ˆ¯\j´5øíÿå÷ɧ½2+(õÈ÷Ũ,ëÅ‘írS•GfÓEtüô{_M×’³++ cºÔ õý¢ßääáVm„¹l²ß‹ÙÜKÐŽ)7©ûG·Ù­xà‘¢ ÛœFñ\Hû°«->¨ A_æ¯Å·íb$E >©‘p’ÆA$ƒÛâ'·ÙÆö­­oä™Þk+NI#¨àÿ³¶ûšò¬‘l#ÒoV‘úi!¸’’+O¨J€6ðUæÛã¶²è—^A_Z( B±4¯Jì»ü9,fÀc1¹FI'û‹µC+¬’£|aji°'¸öÄ ™î[ô+´ï%¼P'ÂÒ5UÝø©¨ÞœÿkŽFB¤¡0· *ËVýãÆ>*n»ÿ7,”E±‘§D9#À²EDjϸcFgS·SQñ/óbH½ÓZe-qEUŽ•cÈ–‹rà)ÁHkäŽiµ´ê+R±ó™Vµ.ÍÓoå«”Óm©¤ÜI~f9åy(ØQv È}Ÿ‰½Jd†à±)}Àÿq¥¨n9]Ÿì°WWjó9f1ê¶ä¯E»-BÈÌ MòåCÙ~Éa€ƒV ‹R¹T6æ4œÝ@sþQlî’‹¢ZΈç©%èjÛxrë|MHÚ3$@lÇŽÊIí¾Wˆmm™']<—tGj*DÒÉéÕ‡ Ôß©ªÓ#U¿šnÔCó…á”wøžµ§úÇ£‘–F'›Y=qõˆ¹HÄDSMjÀãßìŠ6FÇN{3£[®&Y.Ä©,ô¯Ýö¡Øüg@ECÍ`\ÛÆ‘o\XÆü•Bƒ×»ä´ÛJÑ›xìÝ»=ݽòÊ}9 ‘ Èñ? (­(áxÏúË‚ª¼ÙŸU¬ŠÖ;êÀ¯éI"IN[Ž@ “ü¬Ùäáß¹…qlºâÒ?©ˆ•šà7§r€ÑP*ÓfF^ø#*>å"ãn´¸ˆ¬7+!*¥* @ÉPéàËÉk\3E„‘ó[ú`Ïjäú‰PhýHðaº½ÊÈC¹³ ê¶! sL².¡%£U¢j>ät£Âýœ25³ïºË†ââ‹RÌd•>ãáëñ&6I;Ú†séܵ« ôÔ,âP)ɈåþVÿ ƹ,›ÀóXCi"åO„¤,Æ äKü•éŃ\dø~%啊l’ØV¸¹™"‘‡"«ÿz[«û.j:Œ®K% |M´ÆáÍ=&Y⎜¹$ŒÈëñTóG?ÿe²Ìfþ,&n(ÐOu* $éRkND¢˜ëÇáoöYd_šÇŸÁ’zz£J8Ø—!€n<ÍYw?²ÿâw ê–ÎÅ/$FýçÂéZ)õ¯Úß-æÍ|Žè»ž;ÇÈ,~’ÉʵoQZ…jÛeQ;¶K’æúÃÂÌË PJüC§ÛéÇáø°Äò÷±#sîDèÀÇs š¬V?LÈ€ü=B‚µø¹þÇ#“‘g˜_ Bg4°XÅW á˜ä °+£ 7()áI#žEøb 1ªüe¾%þÊÖ¶HÃ=%­9i¬ÂªIJ±­Cv ¯jW%? ±Ôà¸é¦Ëc 8ª/-Ú½Ko¥&^¦îU¦•î9• /§QðñTÓ‰ëZå`VÌŽû¬–uh„ìLeDœ"Þ¼H 0ùºòÐ)¯™ÙP€—yCM*=5, Ü…}:.BYÊ×鵊àÉ2ƒÈ`iûµèÀ·í`žô˜£žF–ÚÞ"22󖽯‰í^9L¹¡®d7M q“$ ]ý:P(]Âñûq]þ&Ë k`ØB»E-ü÷ y³4%cèû-(Ô۸铯H /tKÙ’6䆑Ž{¨RiÍHë×ý–B@‹eYj+xe Á Fü‰Qá·Ú¦D¤/TWšÚ(èÈáŠP‚¨‘Ü`ï)M47q΃‹±*bàWûψ}‡·ídrXÑš¿;FŠŠRU‘XÊS_€ÿ“”öÌl“ kX£OX±_EÖW­NÝZ¿Ï^Ÿìró¹¶šÙ¸XM©‰v nò€ƒÉdº­>Í>.#âÉoÂXa<¹Š(í‚‘DÊ¥9@e^jÙ ˜÷rr+ÒÇg‚åm%’)–$w“”ÄüKÌr`µ¯?k2XÛ¹¤Ú¶™4Fìµ»«Z¼*w©d ‡`z?!Ë%œ,q‘aOO2B(n&-*шcµA-Ôø«±ÈHzl&îMê¶Ë©3zçqâO ’w 8¾Ë'Ô‰¾‘-5@-õp•vd4cN…OÅ^Ç™_á –¢ÑRX¹Ê±Š«) §íÐòg#’öN.¨KF鱬…Â’ Sp+ÈC“Þ¤Â[Òu«,W2Ž%™T²#P|(Ü·?\Çô·oɼR½ÙIæêJ…f£7¯/¸eÙ!¢Ze©”m#bÈ$ˆ;º–ŒY‚¬>yL7>÷"[Š"Åm8Ô¼Šî¼MhKöX|E]»ý¥Ì 9¸¥ZΞ‘x×ÔDPG¨Æ…—z0ûA³ Ý¿]ê"™å`U)+P94þcŒY—] WÌ>Ó-9î~gíe–ÖTùy]ľ´Aƒ•sWN"®ØFåö›%#Ï܈ô÷¦°ÂRêîve·*ÜQ[âXÜŠ“P7SíûY\ÎÁœ9•=bÙÞh‡Ú2/†„²)±Ø“ûXâ lË (KFYÞâh®^¦( „©ëÉéÉ)û*¿ eÀŠ-%(ôW…R¡VmÙK†‹Qû8n£kVW_½Å†¦mí‹…™KÈ)ÈÉ]“ýAC‘Žñdv’kgêFâGõ$rQGEi¹Lù†Øò)Vµò\·¬EDèœ!AŠ¢›Ôµ m$ÌÑGn%•Zi%O‡àp§‘¦ËüßF¾I¸¡h"‚7…ž TÐÕ‰?Ëû<޲PPCj‘!Ží8[‰¨Ç’‚‚œÙáÆwDÆÔ«Ê?]-ÊF ¿¦èÏEâJÓ§Ùï‘Vz¤‘h zð±õPû,CCïíð–ÈHÐ-€n„täVõ Gu3C¥9.æ¤ ºœ¶ú÷Eª”®f•! ™äN1 Ô¿ÃÍ{|%~5Æ"ͤ“TÿÿÒ†EÓ…ôw)$n :oß圅ÓÖQè‹Ôç•f‰ä¢K ’Šq–&5VÛs׋ÿ“ÆNÑR†K ’*V0¯Ä…*V¿i@¡Ûù²?Ä“É8igG™CxðqÊŒ q!ÿkeÙ²Á³YÝ.s÷7ÐÈQø)TÙš¨Yõnoò•2–ý²QÝy-½ÍÕ´±´jº‚}^ꢂ+†bzü¿Fgžb$œ§rù¨[xfÌò«H=Xš€z‹Åª¯_„ü-‡kÙh׸ ï ŽyUd¢•J–äA¨5û90NÌHtÔ èqÊ©Ê[9$A2S˜Ο`ÀòÆ@ø×þùc*Æšjom˜‡Žc üH =D µ?²+ÿÈÄU„ȃ¸[wè¨hX±‘UdAâ?¼PAä•í•ÙË¥  UkÙÀŒ¬Ä T?ޤM÷Z&ZG¤y w®ð›Ë Å/üVòÕ—Q΄U ~/åÊïql­¾ <Âx–‹KÛ?'SÈz‹"©SþP?c-nO{T®‘v'ž›pDŠYAecRÛŠm»¯ùY ”¶xíOIt:rúŠ­É}nU!Á$’¤×ŽK/6䣼Š_ÐoQ €šÎü±MÑÔ[HR*‡ªÚ€ßáì:e@nÈ‘>¯{m ÊdnSZS¹­>X±dy„ìˆ.%ŸUädSö‹Š€H¯ñørXï’&ŠÔ.‚ÚC 1ðå,®£áU¨ãOååRvÁŽ;’VRØ·IZÜDQ‰Uå‘i°©øUAûM¶ ‡bÊmõÉkûÄhL ‹Yx’IôÀâ„®ÍÍÅ_³‡Ø9 •2ÚØ¼q±¬…†¤K ÑiO~ÎH-M"Å- yÞoݳö¡}Áý¦åBµÉò‹vXŸ›Ì$Q$AȪ֫ÀšuøᲩ%˜Ù ~·¼ŠË:£(Iødo¶ßå}•ä2@ÐbouS+‰œªGÖ£,¾²·¤>Ý®ìkŇía|Wš”$¨Hkð"Š”HÕº©cÛþ5ÀJ…ÒÉÊP?¦¨=0­=JÓâ®D;¹chW‡FPêBÇáþeøØáµFĤz"5bÀoðÔo÷²[#l©;•„üä2únû¾U(Ø/ùUï”un¤!Ê·ä$yýâ ‰ ßÍÉ›—úÙxúGÅ¨ÊØ[É0F0*HÕä* SÛâ+ñQ°ÁÝ=ÓìÖ8UÒŽœÆÃþï­C€½T÷²Ýž8¥×O9¿qÉšXؤ…– j1l0úV\ÒÛ×Å<ÈP3ªÓ<•9nŠ;eðØ´žJ×üdDB¡C*· ÕVðvWlÏ †Ž9 ¬eØ‚î@ê  ãô-2G›É{†kèV:¡PÆD4Ø Ãôd9 Ù]•kuîn.V_!2:©¨£µv;c!éLNå-ˆ¤wG$@´…\ÆG*«Mzý¬°r,O4F±uêNÑ¢ñYˆ'öž›ïÔ€Ø1 žiÉ+;#4€ÈÓ:ƒqqHü,ÅWâ;ý„øwʲrl€¤®9’xA‘ Ä$ø"ª ŽÿËð…áþV]Ty•pR¶ˆ†UtViWÜÉWþqñþjI舷F3Gmndˆ•®vø>ÊÔñ4øß"µ¹BëW1•·XՓгÃâ©5߯† [î³u‚Þ[¹QѱäbªžiÇ‹•÷U ï’LoušP­˜Ò’Åbµ¯!Ì û%‡ï þ–0»TžYÉ$hŒ¼ mÑÁÜцըý¯Ú\ë+½–YX,Ö·vÉU3-y’GG­:pWø¶û8™Q04×NÝßO¼”}Zê!™qIÖ¡”n¥_”r§ò¾¾ã½1ÛŸU t’Yì¥2GŠw³¸V (J—ª2µU±–äùŽ$ ¾…ÒFˤNjQ£zlH5#ÜdL£I\mõ×åô$‰ÏÀPГЖ¿güç0ÛˆÃOq-íý£FʱÃë­?É`¤Òµ-Bøü_µû9= Û3!ÅN°*ð1 Ë'ör+ ëð½ú°U`¤(RhV å‚í¯mɦV‡`¨yUÜ¿zÕ°H¤ÓJ”¤S/?ï*ŽÁ¨ËBzWvä?körg-z"m(®7¼jƧˆ‡z~Ø\HÎcnj7ÉtʈB$5Ù ÓùxýŸåÉÕjV6œõ!&ܸ-*Ô†b€*C•ÿ'-º‰a[§º€’ =Ò:¥â†V (GÅ^'–êÇ1Aõ9QInäuÓÚ&v·:Ì@t 0©átaþ¶^¤ÖŸé£HDHÐ}QU`‡â¼Iá½I üLÿË“ÍËâÃ5 5®†­m*ÇêI ³ÌÒH)…»¡ =pLzQÅêkSŒ.®³,d¤w¢ÈŸÉNªß̸ãŸÇ{,‡4ÒòÕÓù2†Gà9lÒr^@­~ÉÇ)‰ú›+`Þ™,ÓXêrÄ´šh$?Ú£œGÙf8rŠ1Ây”%ªÇ46ÑUyCu/©( ~Ú |;røìü9>R>æä×[Ñ+ WV1²wø—â§ÙÜ•bú›gô¡|¶²¸x_Ó‘x•%×à^ ¡ñ¦Y›—›^;´^²ïoië$‚ PĈ`<†S‹›tù%E"ŠõRGp©ˆ‘˜/Ú¢úŠÝwR[¯Ų̂œY Ë ÒÑLq$IµjÁA©?µâ£12srp­Õ}oBRkEENk@Äv¨4? Ƴ)”¦ÄÏ3Ãoê:å–¡O'’.C‘4ßoö<²éW2Ò,«À¨ÂG”£¸4Ö-ûm¿ÃËŽ ¹B>Á®K\±-èKE.äfÝ—ívÁ1A”ê:ŠÜCõk•vgƒ“BðŒiûC~ª*2ÁȰ‘Ý…Ú §¹Iœ˜EJ3Tñ–ÀŸ|»«CIi'é­Ê]Uâ4ˆÅT7*=‡Å\q¤ò6ºA!Óèc*÷²š·x¸®ýWßr/¢?L.Œ]$ôà 4P Ù4øÿËÈÌl(ËpC ÜÇ!àÑ¢3$ˆj%p òâ[ö¿Ùd$Î={’Å §‘V¡‘_Œh͹Rhy3ÙË"XÈ+\‹Ä0Γ¤±A î¨ÔbYøFÂ?dvÈŠ®\é&Üñ‰äñF¨dÜ©f §qÿ„Ç7-[]´Š³\éÅq<R9X¨ÇíñøvÉJ b$jÕµI­dY «~òq‚w5ã¹éÈ&ç!ô³É·É Bu“Ô>”Êu¿$mƒ(Ú²|*ÓÙ~y{3å»NÌ$€Ü$–©TíóáÓâǘAæÓÀËZ¢¨‰H zOÙïË®ßËîŠÙZÝ• ˆ+ƒP™i°àß³þV°¶DYMÑCP¤„$üdÙ'¥(s’Þ9Éõ%'‘<¸2•N@íãL¼}!ªB‰({ãmÅùHWˆøâ£)¡䦿Ýrp rOìLOeXWÓSV«Ä© _€?êåíØÇr_꟮Ԋº`­QÉTU—n‚‡á®N½,O4¾oIí9”ÊÏðžàoA¿ìצ[m¬Õ+^¡”ÛªSÓø&+RNÔÛødG2Ë CE¶¶àá¤ì¿kuaJ÷é“êãA‡Ö¦å!ø±¯Ïìü†ØÕ…½×["6™rzò%£nTvZwÈä;{8RÅÈšä¡sJ°!Ob«ß'.[5Îè³o%Ýã¤J˜¹ Æ ×á?êåbT¹*úPEeÎè? ±3€OÅ$²PiУ`³³2(n‡¶h®^«!ÛBVn…V”«Òœr÷ĵD‚¾æìÌž¬ÉÅçz[ÓqÁþ;ý8ï’ˆ¦&VÕmÔý^â7pÒq¤„Ò¥‰èG!B9*‡# G-™ƒÞ§}fdŽfä;IXÊîX"|tß}Û|0Ûܧ{u¼ÑÛØ+ÊÀ|I”­H44=A5®øL¶XšŽë,u¶½[wZÄÌK¥pËýà (~ÈåþK.Jbãh©R*þ×ЖN¾œ€°’›î~%;u_Úÿ‚ÈÀØeQ[¤´nßg’hR@oîµ1Ò!ÍzY¡‘nb,Z)*Ôš´n¬>6ȄȨC/Ö šFN1αÊJ“B@ôùqßcÿä¤7 AÙZþA²3IÁȦåƒöv‰›‹ ‘ ¨Ç¼·’É㯤ÁwâJ‚jƒüÃ18xª¤Ž°¾ñÄ7ëz¥–CÂK‰#pG2nHy/ÅŽâ™Oµè}_X““¯Æ8-(VVýÔOìþËbwŠò’häŽÝÑÑTÙJöí~UožÙ!¿V'b³BšÓÕ{(ƒ‡²–F™iñ5PzeJžÑ=ëËþ¬Fáè´vÊ€üJT¡ §fèzælˆïe䦜¦qĽÕ›©$v=8Ó–)uöœ­¥Ø¢H±3*¹z€ ëãY0sQµ¦z|Q‘8†¸‹ 0 hTŸå®ëÉ"Ï]ª³-¡“‰UåZÆ+Äñ¥OnF¹SdÅ„¸úq™NAcø 9|*Àr §Û,æo£Qî[¦5¢ê\}bO…ª ¡N\š”þm¹©“•ð°^éÞ¬óGd<‹¯‰Ÿµ7ø¿›1á¹r%É-»œ}NÕjÐÊÒH×ìî¥=ª7ÿ„Éõ?²Ö–Öé{rcäX…„QA¡b> þ%šøwaޏ¶AéÑÎo-I<žy$¥c&„-~.xäÏ"Ä“k®ìƒë¢X‰OªÒIJ% 7ø¾þÇrôÂo¬H)dì´Š9Œ‚2OÚUª°ñþV\Ƈ_s|¹¶ÒÆöúµÄ*Öîò‘Q–¤%Y©þQ?g%—£CšS¦F‘\}_'P‡<S°?klº[‹òjòN<ÌÑ2ÝL_ 22¢Ñš6ëBIêxü?Í”bÜÓvM£j~^ŠQ3 PñÆb©ãÄB•cµ+–gÙ¯4~¿I@±ÊÏËjqÚŽÛï^E~ÏúÙN.mÙ9”E,³Ë(á X…y0 +@ÿ°?âY“ œrë)À´…¡W€(Ür IÙ~G‘Ì\›ÜŒGmš¿–iQ0TV©?Üçö±ˆk"IIàŽ!}‰ ( š£Ó¢ò=¨Ã¿ÙÌËvŽE{ nŽ8I#4¿º•&¨ËÇí',~/µË ÚØiµœAZê’sŒªà+ñhÌ ¥Wc•d-ØÃzƒ,–\n\¼Mð“@9— ÿU.9sg>[¥‘~æ‰E¯¦Ìxì6¥:’¯Lº[–¡°[(oNg¶šCè´EW°,Ävðo‰±½id6œ5©[÷þœQ¸XM$%ƒ€ßê/Ùá’œ½„G©6ŒÃõuõ.9úª«PExþ™_³[I¾<˜Þ¢):M 澡y£$”â7 QñWàø³'€ SÕ&ó—tTý-ÀbE*ÝI=zÆ!‰ê˜ùx”µF…ÒVŽ$¨•¼‡™>=ÙqÊó þ-˜ŽÛ eyãæE="çÑ(yªÿÃ|_ÍËüœ"˜Èî©5‘eâ¯bò*¨âTž´ßjá®HïQ‚C¹›Š’kÜü°îçáM’€Sˆg’æ>.”™Çæ8ü"¼¹õ¶þ\¦\Û vKg’gx’ZÞ#@Õ!’…úìÇÇ,¡^ö›()n%!s"ÆO  Ó“xàä¨ÁRÝ¢[ë¹`-)ôIû¨ `ÍN"»p‘鍿J”©Ú„†SõS4HÒñÝ$Uª€ÿw̲ŸçãË&>Ö ­Q¢ÒPCÉ ävãÆ‡íWâû'ëˆ2ˆ ÂЬ3_…} ¡:ž iMú  ¿ÚÊg»lJÄ’X@ª¬&–o„oÄsÙI"¤2ä£ÎÑ!ɶnWW€-#U]©@²ÑÅÍñªó|2DB”d‰O¡YœÇ$ÑŽ’%Yk_··ØÆév_©#Ã=ÀŠU(…”ŠqEgvìr@Þì@¥×rD…Ã"¯*±2ÕUP:C!»)Õ!ã‚7d˜–ç̨C±@vÛÿWíe¤ôk¤mÌ®.å™]V1ní"¾%£ÿV¹MtóoåòJ¯ÕšâžEô£‚3!Z”iYy©ö}òè÷ùµOô+Á"Éwm)Vçl… ª•1ü-ÉUúü{Sþ°(u@"É/ÿÔŠhò=ÊÙú`3ü•>.‰·üÕ—Gzi•‹]§r¸ƒÓ’C´*ª?"ܽúþÎG+,dì嶊ߊ0ˆO(Zìª(ÃÙÜû‚‚”­ÅåõJÇ6 f£uuñá‚ P)‘Ü£.a•„ú^©Uú •iÀŠí±ø›ö±WÅLMüqÛ¤:¤÷>«t9޼@+Sï]¾e+šÆ5% ©a{¨èTÁ!Q“cÍÁ*j:ñ4Œ˜º=ì Ü"íº×T0uŽ"£„µ¥Qvùònƒ+ú`Ïœ“Y¤Z'¦­ê"“ÇpÃrÄþZ/>Mñe1‹t¤’Ù,Ò›GNi8Yå ªj%7ãS™…ÅævTŠqk¸Cž»‰½RŠ1(kãö›íd§(îÆ ¢¯‘Á‘$+ûÇDE-EEZOÓ¹Ìpl×@äWÚ…}Åíã,Qµ …våÆÎ‡aû;V¿²¸D€±¢J£Kõg‰ÚQ#AȤˆ_áPFÁ‚S—üGi[/¥`µ¤h¥<½&aPh>"*6åA„±c†[Ñ ?¥Wâ¡]Ýy*Ð’MxþÖ0ïG’„cý7ãL]ÂôEø”-M7êÙveüEtQ󟓇1g+³-FÃpXûàºZµYVÝH;ŸO€`Ì ñìŠ||+µ§ˆUäH ÆêÆ^5;ø!þZ}‘”Iº)=ÌqEwvòUŠ (X“Ä!44ÜÄrèÝ‹ Ê S•c²ŽC Y €–føM$ ÁMIøõ²xã¾Ç£T{!Ó¸ÍgÆT84‘:ú‹@EÞ¥kþW,¢|öo‚Yq'úO3Ô P8ѿžZß&šå¥ú€õ‡c2ñh pj~É'mg’&ç‚E‰*§Šl9Ûnç+êYŽA ‡ÒI(¬í7ÁAñ'³µ~y9sø0XÀDì]A‰–1ÜjÜö={6K¹"=è 68íb•®ÌS8°û$’UhzSùñ‘²) ¬‹úB®¡äP]Uj$ôѨ@ÇáÃ!èDO©  •®®d û(à–ø›â £ùr9vÏæÑ:ĵ·¹hA`À+5j(X-Xnªûø—!Š<™ä’Ç3 ÉaY8˜ÐH¬9üNÞÌ E‹qŒJ*Ö^êÖhÔp†$`$à¬Ì«ñŠÿ ¹„U&©È®­ÈUä]åjÔ“ÝTüKqþUʉ°KmVÉt©$7VҦ—sË 2ŒòôÕOƒã _æËblþÅþɇ#¿RˆU&ÂÞy!€• £PŠ»_ò?Ê^/Ô’ m:S¬¢‰øÂ®.aþË«)e¿ï•¯ódâE±D´þîAw¤ƒcu ˜1 / }#Cöꘙ¾×4_æÊ£ïm&Òý6J»Ioð¡Ov°ü©ðäå°Ý„M•חѱoIÇ4ûFÝP»0'°û/_³Ž8ßÉg$º}X^¤p¿(¥.³6ÁÔñ%·Àÿe×ìúŸµ–LØ "(”ÂònR£ÑE¼ªÑªFTzdƒöJôòþ,†ÕLù¡-§¸´/"¿Á^?ÈÍðhH`ãoÚã^Ê66ß„žÑŒJ=h‰Œ°§0åð²R…«Ë(Ç/µ· Ù/°ÈY•U }’xÓ¨­GpË–LlÕk/¡$ª­ÉÞg|L²Æ8Õu+û_µË3²gͧEqõÅý«™íã ÙÅžœ£~$qÉNUÿœÆõíܾwš9%¸z«G"±Š•Z…¨ä:qøE2ßdÏe—S\Av /ïãè†:Íb©Ëþ-ˆ°ÖNû«ÝÛÀ$¶õWšÊÊÊä|MP .û½2¸H‚YÌX ç¸,Ž­ê”"6]ª Jr ³üÙ(†dØ-iÿ‚1¯ó•~Ë)¥šüöpì>lÿ%«fúœë"úRñ–Ø’Zœ6ð¦-ׇgÖ lÆO­Æ…£VÙOqÝ·§òà;ȧ”@BÃ2%Û(,Ęd’š3PónÔá’”nAŒe@§Z2G„rÉ^LÌÌäT­…æNÊ´Ê3ni»¡hk×a5ªBYêò?d)UfꢥwËq† „I$1Y´ŠÿVõù„E_q¯Å·ÅL¼pïmECg9K¹¢4§…CJœƒwAJŸÚʧ]¶Â$ì¡=§*£‹Q.äµø'ÚæG{n×O¹¶Š+™[ÐøPq‘¹–y6÷âÇù±œÁù¢<Ö ·àÄ[ŸQч-å5;ý¢´øcBï½IÛܯ6C<”*ô*  Cñ ÍWírÈóRé!"Í™¤«¹uš=Ë"µOFé“;RÕ‚ÐíÔVZ˜ÑT( h£sZå}SÑ^áXIC†xË8,¤Xˆ‘Ê­MÆ î¨­+ÒG‘CP(FfRKŽJÛ¨û.¸%¸e-_S‹×Ò¥vä’4l²šñ@½þ•?CÖ=í‡é@†„ÜÅÀΤ€åX†e©!EOí°É³Q;íä¡£ÜFúÌÐ…T côÖ¿´ÈAÑiBk,œj!„NìƒP¡·›ÌÀmÄr Ò•4ø¡»“>I-L@± xbŠç’ÉJ•RÍ^}ˆË«sþkI¿½WM&ãV¼idä¡ +3q ÐmÅ»Eù¡¢2.©sÆ)œzŒ6f¡.» ª£þ%c†ü˜ËêD_<‰¬2#,A*AV!þÍx“öKsÿUxäqW gv‹×ÚFµÍê¸q!™>Ó(R¬øî9åXG©ºgҾŦšÆîBä–PìhÅvŒ§Ýƒ.Äbê•ÃXoÌ,D”‘eVR9ª²†RÕþRxTe÷µù4ži¾º¥¬m•Ieœ†­OOÙý¥ß1ñm"ädúBCiL—%"V@™A¨4$rU;|²ìã`Ñ„›(ûØD¨Ç«XdýÙ$0(#±÷\£©9”‘Ì©oó¼‚&~? TÌC)'ü“ʹ“bëÎN9}ÌŽ×ë"õjÆFf ­CÓvQ×GC˜³«oÇËu·Lð:…Fu¤¬7¯Â¿?ø\TʘúDL¨Áhß ‘BËCüûûfP§•H½A¨G,Šoz¯§ÄUY¿˜nÕÆ\«ÍˆæžY£E9IdS Y’´@Ç‘æÂŸk_³”e=ÍøÂž¥FXP±V ÔF`êйïÉpc¶rªJÔq¶“˜YÚ›ïðÄ mºƒ—uÝ òS y ‘‚Ѳ#Ë(41ÈÔ ÙXråþVDõ;-Y,cÕyÅwY¿uFX¯î˜××fèm5Ã0L)5;òN HäˆÊŽË/« Š‚c5äµ=h¿ì³’ p¢î¦;»rÒ2¥ ZóŽ›ÖŸ³û/Ëö³*kïi‘Ý$©OŒŠH4 Ƙ)QB¼Q¬R!Œ0nH(GîÅ TÒ¿qSÍ\Ùá䂞-âÅ]Úª­PX6çÔ"›¸ü'ü¬˜4» ) ¬â@Qd ,9>ÍÉéþR²ñ8Hõ"<—ÛHÑ*˜UźÈU%ˆòø{šrý¬½&ºŽäÛך^lmãä¼ “·©Î | Ñ@¯L¢Qón)eÒÿ¥ºZIHE<@mÖ„ö}’2í©«½4­êG1Èc ÁMUNã~”ä[ýl‘äX µ‚Yâ‚þ:‘"ÉéNX,8ñ}¶êä¥Ðù/GLq )ZÍ,¨ôlºÄoýVRŒKVEPÈ<8ñ?óa$K›£ŠiïÉUëÁ•Iýå’EwSài†E1S…ÄÓ³Ñhˆ'oö8e¶Ìaºæ¹·’Ø2<ëºE åÅW¸6ƪ!Ñ P² Ê Q tû[Š€¿g"?JJÑi¯›ÖˆóIË¢†’~ÃV¥¶ËIjZòXÕndBYÒ «Uù!W¯O ¤cÞä²Q„´‚8Qʺü2½j¡E8oä8W‘bú˘37¢ ° Pµ[Ú¿µˆä-‰ÚéÿÕŒÙÛÅÉn#hBò–ˆá% ²o¾ãžÿÅÇ8ì†÷zÜb•¯#¹´ÕäI¦çªI"C‰ÓíxüUìÈš’­ƒú–Àz~‘¡V*B¸ÜôtßâÈOšqòq¥ÛÅ §÷Ü}gSdf ޱñ¿ÈÉÄ1‘½•ç«E5ˆË²Ì`A*ë]ˆÝàr­™!ºZ1h˜rWÖ‘²Ô×è®OžÌ­Ñ´_W›Õá9[ˆØ·?N§Ó îBŸ MìØ"—E ^¬°¼ÅaÅÁÝj ¿ê¼XYm]¥k;Xÿ94ð—R]zûÑ–*ò&HþdíSÿʸìVÙÑù©êÒs€N®dtr+ÕQƒž^?›=‹ î7FéþŠ,Eṽ‰¢ÐH´$/ò׋åFFí¶#d²(ܵ²š3’7Œ± ¯FV?ÊOØÿW2nšê×ê@㈼2+’ K+FGÚ"†´l s=í§é-–I`‚²4ÑÆ œ ¥C °4#fç_ÚËêZë¹WOŸ–˜ÒÁ%.UÝQš¦¯Ó€ß¡®ÙÃÔË ÙBÔÅõY^Ô‘Py6ßÿ F Ý®:¥•žwPƒ“ºúl«0¨'ü¡CÃŽNf3æ­r®Úªp°Ì‘Å3ñ âh(?Ê9},¥ÍRÊyýK©€ôİöG'mÉÛ­ÂU·›8ƒgÜ„‰¥ŠìÁOYEKÊMJ@Ü}š“¶Ln-¯‘¤FŸqÔ&¸òXÜ¦Ì qR?–§nY=ÈU­õ%Ä!yK6êUC·í}ŠÑ²r€ócE•ºtj°\Ï#\JiÓÔ 2ñÿ%GO‡&NãɈdºš;U@”º·¢ÜRŒÇýÙ@:(éLÑ4jÓS˜!jÊ8™½);/ÙíWíe2Ø{Û#ºLIâå¤HüÅ´NXP0%¾øª¿ðÙdèþ™ˆµ÷Ööâfx˜*³ÎÁ¨%…k±daÃ!²Ì4KFÃŽQÊt¤îHŸ¥g òS€ql(¦%ž2Jª‚x íʧÇ=%bw»º%ÓV²%›‰n’)÷ec“2ÔQRsv¯7Pi+R ö¥T×ê‚·×Wš2¬lÅÚ!RÅѨÍ_²¦J¶÷1½Óè$YJ£ÈN:©5]ˆð¯ío˜òo%WJ{ynѨýâ)˜% Yzòø–™8ÞÄ¢@rPš9šHÓôË´’F¦ŒH«Ðßíö—,ÆÕ$×OX£µ7f `ÈRI§AN>9^Nm˜Ð37«<k!häá-h~Àju<—,‡É; ¥dÄT¿­*8ò éï“¥‚¼å=@€£¥ (¿.{÷¨ÊÇ2ÌrK!¼ˆEBI4ŠZ»¯ù5­rÉrk5¶ÂE7!¢å„qûg‘ =¶8F@n«ôÖŒMq'BÆ´kþ¯Å€Á¾(K[— )e#SÂ}Û™ãZxŠmörR0‰Ýc0ŠÆëwzU9sW‘Þ¿³_±€îBFÀ¨\1KFüù̈eñfôùóâ?•¹|9fÜCÜŽQT@ðih`¬—39*üE¸*wù™*ú¡³š6[µÑÄhÃà`€*  ´NnÖª‘Ó"È—N³Û¯¤'+ÅÕ©SðïÛáÿW*ä@m«¥^kkK“ †ñYî–>udéÌVŸÞÿörðjÀåô´èžR&C6‘3[IÆQ+DÍ» oµ_æŸþâÈ ¥æÙÎ%orÇêüÁDÏ`@ô¹Q[o„ŠŸ³“çL8®­0iLeèÐ:˜¦ZŠñqñ ɯ ‚È?—ör -¶Fš³A[¶d1òT¸2!Øò¨èwZäçÜÂíNk§2[Ì@bH^DnÜ»Ù"ªØÄÖág4¾Ð¬“¯Ö$âˆ})††R³Nÿ²Ø‚cÍ {bÌܾ«ÌÄÑ–"‡.…¶oõ±4HP¥D²¶»†â6”°™3*R7ˆe~¿«LhÿI@5Þ«¨ŠYþ'*—²Iç^¥¨ßð-•G4ª©æy;ÂŽ› ²Ün]¢ŽRÄPV´jŠq©ªd²˜c¤+,ü'©¢ü?ˈ5²d^áÍ›ÍXávXQUW§Ge?|°UÖNàªj®‚DŽ@$€cP á-jÉ׺ÿÃe8Ç6Ü„PkPK˜ÕÃq+E±q¯^)@Ø#Ì2—%(h/˜ÑRTdˆ ½Oåå¹ã’Èw xú©$·0Ù \ž7áé‘@¡$$ü°-ct¯¨,«oo”¢ÛƬÁŽåÜÐòïÿŒ¹ù–r¹õ‰ÉKÆ"iø7?ò­k¸ø¾,”Å ì‹2¡±³$DUL¬ •âõj0=yÛ8Š2%éxÒ«'Ùý¿SöØÕÿ)‡_ÚÉÇ™>h—A䎜³1"”`>Öýs›‘1ujªž¯­Pî P «qo‡öjçqö²Üå«·¯HÐ$¦®fš0ˆC]Ûˆmì;~Î #s<¼’©Ë|u+ŤHQ!HxZ}åe÷n;!ÓaQc•ÄhÉB<ÜŽQÞ¿ßì³'ÔäãúWÜ DG‘d&â*4Ç}ËŽTâ?Éø°s ¬±âd)(_TÔ±«-FÙ“vÑHˆÌqú@â ²Ôâ xqÀmE'0ƒÇâáÈÉ(”€OîÀÓí”Ê›b„Ô„vÒ¢Ä\¼ ò]‰äFÜiû4n_äãl¥°Bž +`WàT¡µê1*ô"¿³ñ|_³–mdµni.,M‰¥=%ØSÀPä„~åµRi:%ä@øŠµ$p(AR$ ³’œ¸bÆË'{U‡Ôx¬d$Dˆ$Ö€ý®ßðM˜‚V\ƒ 3Ó’MK#ÃAI>*Ž? "µâ»ÿ3eñ=ä:·´`E?¨Ïún ì*6%•²@ýŒ*‘pÛ]-Ô±3§6‹”®‹ÈüjZƒ/ÕN¨6c½Ò™mZK©ÉXÇ>2ލGN½朻 rÜ–íÖ)$fÜÊÜV&Qû"¬FßÙkcÌF̰:¼ŒìŠiéìK¥@­ZòLáŽAn‰,‚ ÃÖŽP?š„oüµÌysr!Ëtš@ÐÅ,²Íé*žu$È?õÿc™˜ G«k&‰RCÀ•RXp ¥XS­H\dÀ!á´ÿB–à—Hšsè ÏÛ!9µ:Ð.JrÞ¼˜²è+FWK GÑG^t«ø¯‰ÿc„ú¨$mº#Nš9%ôÝH<]Ðü#“HBŽ^“þN œ“Œó¶â¸Xà¹++€PÔS¿Ùìƒö²²‰]pH¼^(ÈÑ8†¡Ô #ù©Ò˜Æ¸Ry¡íç†5ŽEVB<Îjµj¼ÇýW#¸÷¢+¢Ex®}.(œ]Cû ŠTÓ‰UÈKêÈIR„¤bÎ(êzŽ*¨øûtݶËgÈ–¸óGÏtÃO_‰…c:§@^"†…BŽ_ø~._k+ue!µ ´ù£º_ÞÈš(À¥Mü”oü¹dÇ °‰µ}CŸ£rÁþ(9Z©‘@þ}Å?›*pÜNÍkW²}a#’VI-b `‚­ºÉP?l‹ùpãŽÌrKt Ü…/N=W4S¸ ª>šôÉ ¬¿ÿÖ‹[Ã%m]QJSŸ~,v-üÔpÉðÿ*çy­êz³[Þé±ÞÄŒg·Áu²@å=Fßì_#F»ÙHño܈¶Á½G¬ªÁ$#—2¤½|JÕZÙÈHîÊ"‚ÏuŒÀ±t¨`HfZÑh)Mþ¸ ‚HN!±ŽXnŠ#FÁ#•ž¥ƒ ‘Å©ÐÑ©ü¹H?{’EŸ‚Á‚’ÄZ'øZ›Àm»|é’%¬?—áGÓ®l®ä¹¶p¶­RI‚CZ?íÃú­¤°äGX¡ä³ˆÊ±NÍÄó·Ú„Q„¾4¨£Wâ\<Ó%{'Ž–ú¬B1¹’»ñäÀ£Å>Þß͉䑵"/×Ò–Y#výò¨((µ«½V¿ì²°ÉNJÒWbÝÙœt$ ¯NSË“ÿ.TX÷!î®!mjÎ6CšÕý8ÅAø8©-^¯Aö¾ÖZÀÿZ,?ˆ{‹$·oQC, ˜Ó‚£xR;U»ŒÅŸ6øòJõC%ÕÈS «$_XP~"Lt^k¿cð·ídÅÐõê—Þs)–T„1Ž®ÎXܪÈßâå—ã Î9ÜS!°ˆ raT<½@Fì¼+CF=¿—1òÛ 6JÌ’E¨™cu@‰!âÜO5+JTw>Ùg †ÑJå ‘¤ÀòŠo†3öYhz56Þ´Ë6’2øFlmÇEIÜ€Ûþ ¨³þ5ƒÄ²FîjyP £ ëþUzýœœ·a[haKiUËIÇ—f ¢–;п«þÇå³(RµÌb+{uˆ±8?¡ãÁƒ“QïÛ*…’[%°J£0›öœÑ^E&W ¨ö.•ØŽ¡ÉuŠÒB¡pi)t!È…(BšüK!¢úŸµ’Ÿ1ä€hR&ΚÆ&vP¬ÓÜ4Q© (4P ûLÔþÖFgsð‹8‹ ^tMZ³Ç)2AU y D +ðÓ‡òÿ±Éì9µ›èèæšÖ:°d’N%B‚±DIV|D«× 7,¥²9ÌŸ£âST’`ï- ¢ ÔãOµ‘êYt Q¤†ˆ ¡1ŠÕƒÆì}ÕkÓâørØÕ0h*â . zŒ¶¬þ„Íÿ n( u*kÄÿ•ŒãróXÊ‚„Vkª\Ú!£åFVK!ªìÓ᳉•Æ×ƒÕH­@ž42¸(är+AFqå¿Qö²0e‘uœQÉk2H¢e,ź©ÙâO ·%Éå–áŽ(óFjve% F"dG ¼€øM>—ìäAûÙJ;’jÈðIm a¸·ý`VŠñž£À‹|œ7±ÞÆf·îLµ[H¬Ö……¸âÔèyÔð#`´Ê loÍœ€éÉ*FŽÁ­îã`bID7 9 DLÇOÙ2…þ\¸Ü¬yqœÓýÇýŠkqÂáçVjIéòˆT2‘üB£¿ÿ˜âè7È‹ZK¼ïqn=+z(–âÎá(„uø‡%ß&G§vî¶úvõÄj§ˆt–¿ºNµeî1Æ!F[R*ÊeާâW¡*Ê |@-xø–Fi…sAú6íqq¬‹$…Š;ó$–,9»×§ù9.t‰ojfh¥±¶õ2-a`iBEOOÙâ­^xj‰cvCÇЉ¹À‰¨†ŒAZ#×âëþËw²ÉÊ•oda#'#E1Ôølh:üTÁ™rjÐÀÐ]CÈ»H•äŠEhAükÃù°Hrc‹Hm¥HVBÒ»=eœ5KܫҫûÈå‘gŽ4·V.تÉ»7Ä*íC¿Ù%pb>?¡9è £µ¶1¨T¼_N¥Œhƒ­”}¬²6e¿âMf©tÞ¤Zp‰’:Û +)OŽPMdßn Bðÿc’Õ}åIÚ‘÷PˆƒJÓ X‚B’2ˆB|Lz·û+•Cr9¨yŸÔ’e‹™1Ê8Âü÷œhQ]ÿi²r!„Aä¿ë3ÅÆÕC4Š Jõ$nR+qèµ±E‘ù¢µ_µÅXˆà+Å4/Ä9txýœ„Þör;´8 9)““°¶†ç! € C/ÃËþ#†\Ñ‚Ú"×’Ðñ2|Q“ׂÐ1 E@Û¹&<ÖZ”úÔW,æ4Vi¡Š¡ ªi¿&þï$O{€šZ"Oa8õ)$Îòª€)BÂZ»6ÞžU6ØòR·<®ŠuDˆ¬q’+ð( wøv¯Ú'Þî´séüHYæ…Ô DË|@÷ ø_ "ÐË|«u ØA:bñ•æÕ$D½w-ËídóÇÔGš1räßRX×L–)m×ꬔ•‰øGÄ)Ìö£S|ÆÆM‚Ï"É’X¯gZ¤s¯7àd˜°2HNr¢¸–µ§*P…¯^=K768O4ºÀ—Õ⣿ªU^¿h*Ç@ª?gƒo—¥¨ŸRq­ÝF$µŽ.|ã̼t „a¿ÂÀVÌl@—#!ÙGËïÊÙQ¹Û’x—®ÄŸbª;ý¬ža»VÚÕÖßë+@žš’…M?xÌx°¦áyWáÁˆólÈ„ŽE[ £‘Œ‹q,mË•kÁ7 ö«ÿÀ啽Ž)Ƙíú2üH†6ª×–ü½Šå9O¨·b*\ºú2\´kR>Ø<†ÛPŠÑ¶®&]å% ŽŠÈ 5˜¥x•ìÃü‘ñåѦƒv‹š6[[?LÓoPƒÔ¿ zxTãe$Rc§Ë#GFon%e‘é½h¤¯ˆéÄeSÙ·ëf‰ÅÕºÐìHiX– )°ë‘K)%%Ì“")4n<ãsESˉíCð×ý–^Z/ÚIZV) nMÓ}öã×z­{[ƒsrPF-#‡‹\3*ÌÃâ(ÅWÓøá²R„{ØÄú¾ ¢!’6#ƒÄz€~ïõ kPŠÃùs Ü™;v‘@êAWå1€ýIoò™AÌ¡½4‰TÓãˆ$@#ô!§ªÂ †`T¯ùGìá–ÌFêþ›I¨ÈêTrƒeŒv JÓìW*þØ9”ç¨Í#CORE‘ ÙxìCoÔrñË@äÖO5ÜŠÙÚGªÛ#JÅwf.Ü@â?”t䯬›ïGG0&h‹+2ÈÌ äÿ O¸#ý^8“Í4…ÓêÜŠòŸÓx¡‹G@zxæ9·Äì”Ih^•ÂÀ$ž¨Ø–?§‰#àËÁõ5K’„,¼chTò´ ’O€ZíÄ50Öÿ&’æöT³[`µ¼¨èK•? ¨à}ž\²ÁMÿ9ŒåB»”¡Öd¹ƒý§–v¤j€¬›ŸjŸÙÉm~àǧÅ2Ó š@÷ã…b†¸æFÛÔ³ðZo•ä Ù¨¯ªHl-£EA²ó£TƒÇn@ ëÑ›+‘ܳˆä§1‚[«© $¼^b”, ø²OÅ’`O4žVŒ#d*h8·'T,Iþ²Jņ$"­"´r¢FPã!c«rj§ì… r¹WdFÍÙn¶Èè9ÂY‚€µvê~ÈþOòrr; î ‹v‘\ÇÈNAH£5Mû<‡ŽF7a2ª(m2Ö(¥‘Äj­™J- <‚oÑY¿à›'’DìÂj÷‘‡ŽbÅ“œ±ôØq3+€}£ö¾×ìåxù·K’ò5¹¿‘Qh¨ž¦üUOZïAöئX,D0‘Ü®h•tÒŒ¿éÝsŒ»W‚R¤7€¢®FÍíÜÄU?ÿ×"ŠÝຸ³¸Olþ´e`IÕ‡Ù=©üùÆJ[[ØÑ¥ èLWS"NÏ ÒV9Uv4^`2169rD†þôËJŽÑ℉Ç"*ŽyüB¡”÷ááü¹\ɲË!-hý;9Ÿ^&SÅ_ &¾ öãCÿ–†©iµ®§&Ÿ©ÖU3ÙIï#cûº;q+·^¼Ö¿UÁqø·ñÑø,½´±;ĆkIUŒ,»TÇðûíOĹ8’v-g„ /ÚÉ4‘‚j‚Šº°,¿îÁŽFìµFü‘¼“Çã¨ʲr«GÃZU²f5°Q+ÝtVʶ3N±8–UŒ‚•P¿¨@û=æ¬6BÄP*ÆåcÓìu_Ó,²¨j ž%Ãð´ey>Ø ‘5knî¹ÚIé¡%™YAÜlz•§^Ç#»9‹¡Yf™BÑ—€xùìrø“ç¿Ãñd¶¦1”ÂõY,§x£ôÝòqZ•"”ä?bZ}–Ê¢l€ÚFÆ’kÈ’[xÙOÖJ?Äl£æÈfF1ÍÆ™åÞ¹«õkˆÊ…G¶bªÀ(ëÈ?»þaüß s áȪÛú%äQ5"e¢Gö¨JnÄ“ö\ýœ„î‚ÙKã·’0;¼^À/ÚßÀ|”Êhe0\§n5®W=ù6DX¢ƒ½0üRE[·`èAû\EK¨é@vÿ+' åÑ®uÍpÞ´±†Œ¿UiORMù€iÔž8ED›§H!XãXæwW2³r@wêOj-r Y'àÈš ¯ QÄ’ÌÑqõÒp„³6ßdWì’FGs·rj·ï@ÖÜ“o&Á!AÖª|9ü-K]Š¥è"úX€ ,M ?”UÏù!˜Œc@YYï%Ò¤Ik´|牅P=õûLªqŽüÓ+VÕÜ$…¹rÀ\[ímNãc´Ëô©]Ã:]#NC-¤¢„*:…âÕýŒ1Þ&»ÐMÔ'õ¥Õ•å^m Áb´æÀº¥UŽËþVÿZ£ß(µ“êøOiʬÒHƽäIª€Eiß|Ä–ÅÉŽéeÌMõ‰Û•™¢_ŒÑ€§• 6øºä†à"]Rûˆ#X#äÊb2}N+@~5§-»›fF#»D¹'–<~  uõ#R¼X’‡‰¨eö|Wös|Û¡É%ºHäž>Q«´Q±Fæ@2q¹­Ÿõ³"šgÍFàCõk0༅ƒéT`iÄ÷5Æ<ÊžA^ö–Ö¹r*Ç`¤íSÜd.³d-”o/4*©jø×¯]ùdäXDn¯¥ >½ iŠÈíÈ“×nY š‹j{eGb@ïl«¢—§¤—P hÊoÆáX׊ÈiŇì×íQrîwmj¥båî^H´œèµ DÛ¦ãÙ'r’rn£TŽ8Ùdßl)¡þ€›=Y“ºý”ÑiÉ-²úmnEÁ?iA&ŠXüÅ6ÃYÝLvÙl–ðMg(·Ÿ€•EÄq}°IÞE}µøyaß’xvçÍ fÉ-ÜO3·ªÑº*¹¥ G‰ä´¦J{DÓ×´ÇQ‚b’¤ŒDe„­Ìñ GêXÙÌ Ý`¬!!•7åZü;°¯Oäl3élqmt™[ÝÁªiPZ]GÇRHÕb ^oê|^™'j«qáOø– IeÄ$ ZÒÚh]½3ËÓç( 0râÿ §Øåö›%uE‰ØSžiÖx,¸|~í…)Æ€‘E#­qŒnÏùËÅT?ÍC½²LÑ—œLެ@w ’Ìwªwý¬$nÄŽˆØÝ“\‚1qš€@Ä)pV¼“ª–4⟲ÙUm„Ԕ⹎ö '£«Z?aÅzçæô%«(wJ¯,…z"©5_‡’ÿ6‘Éš#KvžÚgª„¢˜Ô ©(*Õ'ü­ò35ïÝ1óòR´Ë4p0W1«SˆAB@é^gí`• ´‹%e£¼vééÈS± ³>þ⦙9GÔÆö_å´h´ûEÚlŒNɉec@ ʧâä0çÞDùþ…ÃÈ{“½VÙVÂP“PÈ„´uªnBüu§UèFc@î-¼¶J®!mÈ_M€VZµ@_ˆÐïMòÈ5N”ôÕHõG%Ó˜Ç(‡:‚¿û+‰~Æ]“è cêMõN1ú| s'¦v©«”ÿ“ÿ Ùmù9$¶PÂ.-B¡&šr¥Ùþ##oö{ÀæFBHù4@oóDypEõë‰#øaB¾”¤–R UMå©Ê¡²ù2Æ7´$VÄ4n™ JP±,Qù(ÜS¾õýœ"«¸"|Ó+÷c¨C Àéñ’Wb+·m²8¶‹,œÕ5é¹, ›±´Ü6.Ÿåîßk+Â76Ë)ÛeúpZ¹1V0,ˆÛ7_‰ˆä8òÇ/0œEb­=ú²TËT$mÈšÓáäüÝ–ÈÐݧ™T×ÖS::÷HU.A!vׯ¤ex[³‘š,r fŠOI‘ÏïjkGØHz+rÇ70ÇT>¤Öo/U¤©EG¤G §Ú?ñŽ.EžP†bõŠ/ÝÈb ,8ŽG¯#Ð_g.¤§:TKon¬D²e ¡vPj‡ùrŒÇrÝ„mº›È¤K$n~eP£u ñW¸¯ø+ÔÈ’ÖŠ7”Aê9«Š¡€¨œû…§Åû9{ŽˆHÖImR^Hâ+†„°`/NCþ dB2Ú°™"u’$«H«P¥ùq1ñöÿ›òæ-œ9.½ŸÕu '«éJg%»((+‘€e4»˜–ÚÊÉ$„‰®1!oÓCeÍVé`OLËÖ—GÒˆ«WáÙ˜ÿköp$¡¦àÕËúVv‘˜3Dr^ÿ4ý¬™jþsŸWÁ;•©ojë"oÀ…k!… €iU4¦ÿì³ sr$ƒU±Ïf‹$d²¬qÐðT‘zTþñNfcä\Yݦˆë‚„$L¨]€«Øn€oðí« {Ò¢+ý~딋+ÛGåP¥–@FÀ÷ Uÿ›r¸ChÊîGôç•d"Etb%TUÍI¯·Ùã—d’z¶²/Õ£ŠÝ”J±3¼‡j®õ Ûì&éþVDs²¤­‹ÐYc#ËÏî”2Ó’‚ì+üØJbì>©;Ä£œ‹ö–¡•È¡§.ÔíüÙW2Ü6;¿«‹{q(a~T5¢(Û,ܱ˜Ø%°5¨t‘™!X÷qPÄÐøPÓ&O{]hMBÜ^ßÅ aZÝäK¹h ²C`Ÿˆ}ª9n)ToÉ« ÉÜóÈ»1Ëà„»º%xB¥²4aHêåI'§Â~YdK\†Ê܈£W®ƒê4â+_„!ãÅW!~m”jOqÄnbî¦Rï'Ø‘jÍÁk°fAþË-Ï.‰É°¤-âhij,nÒ?ÙFøÑ(£¦ÅxÿÁdâM˜FÑÉ$34õ/„|M±[åBßËÅps+ÑFÒ5Qq?û²áBÊ›€mÓß›ÿ²Ä’@ ª.D«f¾¥L’¼¯ $– ¨Üÿ7ÙÊÀæÙwIv¤Rfo«QAÁÅHäMe­?b¿ù9|6Ú¤w-[­Ú"« æ="V¼H¡ú¦ ²ÿÐ"–_­ÜYÜÎY802”Š_´Ý¿å&quÍì.éSV¹¸:}º9¥Åº´”€[÷nk°ý¸_§óDë‡wY–Ã4VéÎ V ÈÊÇ÷dïð2ý’£djä ÔT¦V’(îÖ!$¾‘H¥Hõ(?hx­e?g&0&ÑrÏo!QéÅÎ4ød$˜êçâV_»¯Ùå ’è²ÜÇ-™ŽX£hƒ£“ÔŽ4 6óXO ,@øÿxTŽ«_‰?ᲩnÝ%¼KeummY£†OU[aXÜÉTþÕGÄ¿´¿êá2ÞË.éßTDexŸÕ…R‡—"ªÛåÓá9 }§éø(P6ÖDgi"~&.MñFZœÈû4凩ì+M‹Ô ‘©*KÔ«±]¾‡ù~ÖSnÛåUI\J«Õ¡5h&µCuñB´ýœÉnâžä=¥¹šÖG*U£‰ØÑ‰F€ C¹ÿ/ù0L²€îDé~•8…Wt Œ›‰¥u*Ÿµ\¯! 3…ZœBid“Ó)âÅ]‡sÅE+ü¸Ø&Gré˜&¢Í¸³„‹€#z€WOŠŸ‹‰A5 šß¯©g0ߌœW‹Pq‡Ä›ƒ¶Q ‹tŽÉD4v7“*¥R1#„+lkþ¡ß/5a¦7º”Ñ*éà]RF4ôã]¾&¯'ù@ø‹dÈõµ”ÞKP°ž0#0nD€Íðl¾ÕÌs-Ûâ6JKuxUÈaj$dû"FbÅU˜ôÿ‚Ì6¶ƒ+ "¼f *ÎãÖQPhŠOò§òäjì­Ò*U’xÕ$â²™7}ªYMÛö8ìŸêäc 6 ˆ'š"â@‘JâVÞ"Þ’¥PÍ%8‚ÀSü¯æFÈÀmýfsçî_£3´aaJT}®'ºÖ¹+>òˆ‚RC5*Îy¤KÇ“1RÕfåÛáÜ–ÿc—m5MHâ)Ñ`bÊV¯F-@͹bIß,ߘèÊ*Ó,ÒG ¹F ªH˜Š‘Zõ¯í±l¹Iä ÈýRˆŠ&uSiJÄ|;þïü6F"‚dm-Ò}Eå)ÍV̓Ôp¡þ5EîGìäø¶¯é1­Ï¹<‚Ku·0#“?)URKT ¹õ¯üW˜Ò¾$rKÞGu(Zó’6…€â pH茭˗ídÀäÆEA¬ÞcfïÑ!”™”U>!Õ¶]ÎÕËñK}¼Úf€Ò%„jc&sW jhÃöi˜²¹1;$sFìOWâj©©Ø€:Ǿd‚ãËšâ(½;3Ë‹ª¤\É­±pwöÂ:¢‘“ÈBD%EI Ó« þ̨ó¦ÈòAY‰=f;@¤ÑjE2sæÂ%Úc»(ÌYŠ–ïFQ°&½)_‡‘¸ì˜d*êñó‚|œ+3§ï*(8ìk¸Üä1lçÉqÄztª…y¥v©4 ÊHwç\º4eðk6"¹á·kËd“÷Ó’~.‹Ákñ)ñà ½ÈäÄtEêvÄ[»ñ êˆI#³+¹©í×l¦'ÕMÒÐ"hâgARîÂÝœ**3W}©Ò™‘T{²ˆŠI£ŸÑ…•4- ª’ìíšõß“Àådme&öE,~­Ô,¡WŠoÛ«¹ÿ+â£c)lC8Çpª÷,Ž8O$‘]1A JFÑDŸkqñö ‚¶£ýd‰n‡Ñ ¶¦&´ŒŸ½_MÈ1¸jŸAº€¯ñ"ÿ+pÃ_ãñêX!¡rú„ö¬ÊˆâB8S‰öø[ý\œö "I(—¸Rl=BÀËmƒÛn­ÅÛö—ýLŒ"ÊrnËýââ)UK@ì¾”†„2T žœ¿eÿ›c±+YâVƒÑ‰eJ’àý®,OÚS‰óQ²/‚‹Ÿ­FÑÃ%~ȵfIOÅU?e€??òp€ Í!õKG™£hfôæjQG÷ƒƒBµøMT²eǨ±Ë¤‡œà*—¹1 Qƒ±¯*tâ~%u\'’ƒeSU ·}ÖKv‹oûÀ7jÙ)û?ónB §ÉmÝ­Êj‚å£nãe`*­J~'¯Ä?›ãÃÅéù-z½ë.`Ž z/M#b8-X¬¼«·ÅðÄr`ÜKêVÒ–D¼¹}IP0ôeä[’È >#ÛÚÈOp 8uPÔ”„’tj\@ÅøРКïU¯ÿ'â\–0y1Ë\–¡Á¯b’ç ÃzªËVU )Ë—/„ü9míMU¸*SÛÇÀdÞ&€³+žmñ £Ïÿää×{3Ët]Û‚#>$¯)A©üÕý¬«œ›vXQi_Q~8×Ó¢î±n£¦ß'cñcþJÚ,€ÛȨ^¨ÁM7àÀT…'¨5øðg$â•„>³k¦*¥œ¢¢0 ÅJеx­pâ;.Nm^G0Ô–+Á'—ÃĶÊ|Iá\ž0(Û „ìØCluÌhYã›ò ó$ž)OÙðØ ðuê%´±™)D’V]Ù˺’8ÿ6çâÈcßfy !íÖˆDT)³) lª(Š-ñºV94Ei=ÄŒ}N÷¢9!JQ@@ýžkü•Èd !j$žåÜ,dò$E\€P×vû?kâÈÈñÙV[DÝ$>«™RÝžYe‘Îëô/Ù¯ÅþëÃ3·ûô¨ˆ[uÃgI‰jÝWá¡ý½¶®Á~,8ä¹—¦‹ ´œÈÕ##’£ŽÂzü_ónaMÙK!y#rd@Òñ✒€V‡ü£Ãöò²6¶ÁÍ¥ b–I& Šüuoîö¯Q±lÒÄÒÃ$Nñ­rƒNlµz/^?JЫ£Û[ÁofdQ%²:…bÉé«Tâÿkö°e$ßõ“Œ_ÕFêÜ.-Ȉ™U T’ÔqŒññÊ =T[ …Zî6úä‚6 Ƽª6-Ç‹ ÿ(J.J;Â\ʦjñ^Ö]I·y‹9*r1Äð­_Qtæ’0vpMMhY©-±’8© zwK žy-la,LŽ×5wàI¯\»ˆî}Í46R„´±A# -cFið1⤕þW@>,7Í]'üa@.Q‰ñW*%P»6;¶QîäcmJV nRÈ dÜA F¦åk\q‹NIW$–X@væä…b ò ¥>×&ËÆíSsúáí£QY+,Žk%E7åáñÈíÿ †=PO%×M$V”C$èÍSôºü#ád4î?—.@/DzÊÍmbü%W1Å$±ˆö×zrðfû+˜äQ>÷$Jn¢»»Ôâd‰fxØÊ¯^%R4e?ø[Àƒð®e@Ç{‹ x“[¤[€ï¼Q ¸*@¯Ø¯ZÑK.ùOM™ûÛš;Æy$¢I}2»ÌıSij·û@ØnxÕŒ»Æ^ð¢‘Z’Ê+Öƒ‹/Zåãîh6Ò–„¿–¼59ZJ7µGüG#·Ú’%hàyO§ð˜í# #êâ Á&OÚÈЂQm<ÇNhVHÈ–¸i|*KQTò©çÄ|-þVWÂ.üÛA5HMN0líÔMÈ! êÞJŠ÷aÙ?k3êFNIc”‚.%¸§ ePnXSÛfû9hþ-%v›:IªG1V– ˆ¶â@¥Aß’³œÅD¢;È/’ÍÜS£ú¶ÜÊýV •‘Z…`­³/ü-«ªHê©mõZJ¾¤’DÈÒwˆåΫ֔4_ål9v+“vÆâ…Á÷äO%b~*ƒÈôï,…)„3X¤†?„N*Тެzµzõp‰s÷#‡’µœ’¼’ú±¢ÄIôÔ·d¨ ŸÚãà~Î ŽäÀß5]B7uŠÞJ-ÅÀn ö#1Ï}¶û<°búOšäçîCI>ö²G4 ¼€QÚÜ€~Í?kþ $„Öê±È.¬9¶Ó;îP žÿµ­ZŸÍ‰Ø£˜PÒoâ’\H HŽTÓùÉ<;uïöqÍ`&™WœÏjšµ¿*E ÏCÈÿ±#½ î=ÉmÍ܆kšGÅ–²#Š.Àñ¡¨ïOŽZ ÖNåRà<1#z„*P- |HHëŽü“7ÿÑŽÛÅ$wðhd‘%ªËNCˆÿ"¼¶oæÎ6Å[×QºRÕn`ˆ4†`Öjñ¼Î~&‰“f¨Ú¥ÐpsO³‡O*Ýfw挅ÞKk#¬nŒcàkVŒ—ÀòSËýo‹+¡lø¶Pº’ä2[²Y@%FÄmÈö-– -r°Œ™#ãÁù% j °êw »-~9óe-Ô’)ešT‘2šñ·ZŒ˜ýl/’gp^ÂHžH®QZ9mè lÔôø¹lಛ¼‹J¥YV2ü4U_Q@Z2ü@ÐåÔÓarjŤV±LyCp§ˆYW‰ôÖ½Gí¹ FÙF@÷ϵÌaP®ã¤‘¶ÅÜòSQÓÝkƒ |”Ð#¸·¤B’i÷6â¯BÁU+éžO×âWáør'i‹äÊ"âPð !´pÀ"ŽÁ‰E§J±jìÜ©Æ=²±a™ªJ 퉺V¸³YŒf«0PÀðè>,ºÍlZȈHžæ+SàЖÛj>?óaØZ´|7*·ï™˜Ï'BšÕ)þËrŸg1å­ñ=À½–É®RUS,æ?R*íñ'áøQ8¿Ãþ®@Ñî@î‹™fg‘Óâr‹=A¶ý79È„ £\Çyu*‡V@*¤ÈêO´ò4ÔâÖÍèO ¢R"¶ · [‡ÓUÁŒÃþ)3dLˆœ=8%a¦•P¿ 5?f ü[ü8/©dFá»»ˆ¥î %aé jÁWû[Õ9dxHPH;„!2꼊XÒÜ[¬»«vø¦Õoæ?kŠå¢Œ+ú_ïX“êø~–Mo襪Ĩd5C•!›ˆžÕQÿ˜²»rºöPðÝÛ÷’¡ŽSJ0E©44û<²QïîDù{к‘¬Ê¢ˆêV64ûÎKCß’£~ÏÚFËq€íRòNã¼Ê¼™Áf* ¿F$ŠýºW(‘nˆI'[§ 9BòqSÙEÀZvüœ¸U´’PòǤ‚ƒPYÉây&æ¿FIŠ*w…â/(ŽEþ×_†Ÿå.C«dy íÙ Üq™JE!Jê7g§sÓ%-ƒóUÓæ%ÃUHBÌÛüLiàÝj:­†cÒˆ“j7Ï$QáÂfoÝPx½KNÄñ߀h)$ÝòCÆÝ®á//x¡Bª¥.mÓÃ|8åDÒÌXÝd“Ä/!@„ ~?¼=K2Wjü[ü8€HA(«ËÀ!„•-èŠÛ‘à«C_°»¿ùYƉ,ŒÉ“Guh¼ãŽÌ}m"†Vq]Ûˆ |»eÆÍo±k-0uTº{ɧ0ÂP«6èÄü5ø¿Öþ\úTGt\—“,.ñÒ|ýI јU•ÛbžÉ”po¿ñ7ñm·D=ý´ÑAdïCúd²UPÀ!§"Fäµ2q ’Æ·RŒ"X²M8F¡ #UhNëËßáªI“‘ß`ˆý;”w¬.®kE¹õ"k•¼c€¸=ù¿ÄÊÉJ>Ÿ&1–þiÀ"àÒe#&쀒B¨`OÂOÙþVÈG“d®Ôtù%iXÝ æÃ®ÅEym_ò°Ì Ù„Nû·$b4hƒàI$)ÜV‘…Fßküœ7ÖEZ:Á£¶–i$æ-g+Éè )]¼i¶Fc`ÎÊå§¡"/Úåñ`$mKP÷qÜ…‰‘~? lŪ*©öN$nÂA}½ÉHò»r’@éˉHøÉ?ËAL»Lâ¡¥ÛÛGk<¬ÏÂYPRLÎ]X8ûDVŸêäòHŸÇóXÀ½’„Ša#¼“\F‰ÂGÄH,j6ëFS"ù FÜÔ&ä-îHj±¸PFä¯Ë±*Ãö±Ô½Z-â“’Çkq¤ $1Q^ŸëO‹ndù®.CÜšjN­o+Gn[“ * ,.ý)^UÊ"H –ýŠ I„ºœ×BéJUx7“PÕøº2²ä¸j5mdÙµ=9gý%pgo² CÄ(Q $«’ß«Çìe³#…„A´ËVŽá^9#HâÜ##¯!V U~/µ˜ð­Û²]$Ü$2M ”e’Hwpz|$òxåãÉ ÙWÒMª}b9Dj×FêÔUO¾ÂÜ–™ÀË5+H@ôBÉžjòT‘+S˹ýŸÙÉ’ÄßÚ¯sk­ÀRQÓ8-†%h¤#r'í²ýœŒ ¦cp­¯Ķ¬Ò£G£F”¦îÜAc_Ú?ù9^Ÿ›fnHe·UÑ%‰¤c‘ƒ¨OŠ¢• kN]vý¬œþ°Ç"·Gô?J# 8ZØñ¢© QB ‘ãö¸ýœ²dpîÕx¶_« —R<ÜPCÇ‹ Q¢䓵r¼o‹n`S}&Ù~¨8ü Är<º8ÛŠ…ø•…)•ežì±Gd°k–+,®$eµk½xíJV¿ñ®]ÜÆ@*9Š%š6€1ôcRü˜îàŠíÓIŒÀMDŒ–ð: Vz"B Ü ±4 nM”U–àvV¼hVÊA"ª)A#1©-ÄÔG¾ÞMŒ£²‘WÐM̘ŒP¤0•gnA‡¨Qˆ}ÇÅ^?Í‘Œ~öÎ+IxšK‹`ʲB¬ñÊ€‚xŸ€¾ük,‘êÒìé£vžåHàåገ—ભ:Ÿå?ùXWÁIVB!("u0¼€:ÐÒEJìGùR-Xýœ}Ì­ÅÌWϱÆTU5u*:(³^™XlçjZÂÊè*0U‰jÀ–¡æçùË qäÝ }gp†y'‰„B&õŸ²Y‡qûD 6]¾Ýí$W>ä™ÉÔíÝO§4ð3†ª–“uøÍz›æAÄù­ì&ÒYÌ𺡉VIx²ñ¯êé_³”ÄîÊBÂËXä‹O=> ‹C‘&!ñ0öUo²NÙAmi!EаˆàÇ%„@×½wýœ„¤€¹båµ¼%”L¶ì”¨f ü^»/óa‘³gñºÇm‚ÛkxåÁ[w±Aw!j¼µñ‘þËŽÁ1 ®œ'A,$«|D†¡Ý‹tðÚ¹dI!¬Ð+5¶Ša$K郄]ÉIIû\~cË≠ßÿÒÚÿlrÓeXKÚF˜† W’¢)E€q¿úí–‘MHÈCÉy±•Yš%Dw,\UK¿‡ý–tAB¬ó»],"`…åíðnhEOroFâ) \­ñ³|z`FßnDWÊKml–j(÷3ÞȼVsðÆ´á4kÂ064û_k v÷¢|‚S5Ì©k4WèË–'¢€SnϽrøÆËI•nÈ-åÿqìÌTµ U§"MùLsCvøòJ•‚LÛ+»Ë½Àå¥> ¹¨©Kh-hjß»…HÔûXB &æ)%ŠU4EOÅCS·…r¶a osšM”U_‹•Ú;ýÔÉË“óCC,üùªi˜«DµR¨€´AZ×üL°cukïãy#P“¬2©A$€4„"µܪßdc{¬¹l³[šÝ.c‰å)ûµõVŒP´Á¿gâåŽ0MŸ5ŸswÈ–w@™ ª• äñv;1¡ýæßêâÈ—7@‘È¥mÉ(‘ $.I¦þµÇíd¤° ÛÚªéò\G0†I7FaÈðã(iUåÑ—!Årò ¸j;uP…­fÓ'‘ϤŒîðÕšOˆ)\Ú¡ävÉ“D·(¹Òà„]î®êg~•áµ;‘Êœi‘£løv¥ÚŽ¡Ö!‘ãÿFrñ´#ìˆÉáìOÅ‚!‘ îú¡:s¢ºU8ÄËŠÊž`ïJˆáã¹(¤¥F)Zå£,¶³¥hKfP8¸ª—è?“Uw¦š’J³3FTÆÄ³"xÊ6äÃVZ•š(œ€é/*|$°è±ªo•㺦̜íZ˜˜f+$–áýg/M™ª‡ZŽŸË‚_rÄ!Ä4¼Gš,rQ‡%cR köª*˜cÉÜ ÞÞ9Ss5Ê2.Ñ€‘Éûµÿ%¨ÝN[s]n‰¿·¸hÒJÂÌœpõH=ÁþK|9GÚÎ\•f·g´·ž\jÁ Sj—íegêgéBAêÁ§´ª‹,ŽXz@“W&ˆ —ƹ9o C‘]bó (Êñ§Q9HK=kö¾/´ßñ®J{Ùb © Eõ;i#˜J’aDgõ$?ÅMéË#`È‚HP€Û]k&)`d~(´‡§" jw²~ׇ  ”Ã[¬¾ŒÒž2åð€¡y‡_p+öÊÉõbUfPöÆRÒwjU…OÇÇoÚ©ýœ‰æ6oPHì,coTP}xQÙÍx‚àtQƒ«“)úvmøD¶N¯Âî>*GÄôDV,»ýš–ûGùp™Y,Dv¶q_¬ÒF ‰–Í7,)Ëü®ùÈ®ö|¢Ì‘-¥Äå=IŸÔj•äKnè+U¯ÙÊ©³¢…äÉ«k½0↛N§·ì¯” „LR¡*]Htz|=Å~#¯#öàpz0‘v¼áÓ–’( S‹Ê€x/lw6ËËb¸˜¤…g%Èd*9)êoò “üß³ƒnKÒО«I§^Ê[hí^Eu•¡'ü…b)ü¹!õ{…1Ód‘¢Š&PZ+x „¸gš·ÌV¿³‘˜çïgЙêƒô È‹ÂÉúÓê¢QèŠü<Êl¨ 4Ù]m#¿ŠòÚáØ­ Ì Ð#u«ûñ49l7©þ.Ó.¹êÍéʲ£Ð‘ê%CÐû·ÅÅ¿ÉÉN>”DÙ¤ÓT™ ͼ*U£~!M –?² § [fm/€ƒ+Dîa`%W ðªü;ûñ Ë R'D¨ŽáÖqI°†d?þÊ¿ëdr²ÅÍ o ¿ZŠ_Rk¡žjôN¤§]×ì僕÷ÖI´V¥>¡jR2ìX1¢Ñ¥&ªTxo•ã#€¶L úµ´ìx›p€ ¥EëÐðcË!†[³Ê6@XEq‹x…M"j«PŽcí Ö¿žO¨0Åô•MÞXµTyPX™æE$1ù¾×ÂW%”ú~,1ýKï-åMVà­#R® –Žçþýl†-¢Û“šcb¦ x•G)aDgU4_PЇ«}¦Û—òä&,”ãä’=§%†™n¼ŒÕ⌲r‰ù¹e㕵KšµË!†[Qf32•n‘Zlxý“ˆæÇ¢{æIÀÈm¾Ôv͘²æåE rQì%/p©!û;|$Qð•ãüßk,ÔÀò´§Ð¶0\,/ATyÇÔÓn¿ÌÀœ¸ÿ6’íŒw~›iZÆ…@ã°+þ²ÿ; ¯ntm5‰"š}UsÂ0ÎÁXŠºå2;·Dl›³f÷ÌìİPŽ•âáZ‚µ_²¾[Œ‘ÜîÚËm";M«VÝwrT±’„¯ò–^‹öÙb|{бÍ¢Ö8-Õ\<…¹2nH¯·r\²¶ÝƒlÓÍe®™8z©“¸¢pe EE#›mòT¢ óGêOÊÌI"/$1…Fâå‘I w^œ›þ1aÌüK|¹%JeÖ­fH¼ bÎ@⥇ù&½3+”~N?Ud¾’6Áa…ŸŒAyqÐr®Ý°Ÿ{&§s˜¼Õ}BÆà|Róä)òÛáÈDz©¸#jß\½hÝÌGÔâ ÂÆEGÆtþQOøŽNTÖö’0xxHà<’‡-ÊŠŠ‘‚B”R³p—Aþ@xqbÌÀ‚ÔUþQÄí·ÅûXO#H6†'¿X@#–ë÷†PZ¡I¥É,¢™I=¢:÷¡u‰èñI zQ90«‚wGﱧž1ï\²Kõ›˜máÔAé,k$jÕgTñä?oü¿å˱P÷þ–™rAZÚºǣQ#…^)‹…r«÷¨§ö,¹dåé÷ɈòDIGgn#þúZú®>É.EEO·P2±Õ‘è‰6àZ— ô" ¤u$( §‘?µV®2<“»€bH–%{…Y —#xÊ¿À7,€Õ¸ˆÈ¾¢˜nV¶ÁÍS”½öiÿ7`þhºEAe›÷4Ìú‘1#qåä"„zš–v=ûF¼‚ªÿ²ÊÌl³ƒwÈ\X¡‰š[tErT°ýØ ä×—ù91?Q(#`¡=¥Ä‘"¹Éèújµ¿ÆOòñ®wD†ÊöÖ×þ¬‘8Š3ó,«²€+¶ý~‚dA”"mxK‹{_F(ã4Fî£÷äQØÑ~.¹ê7Ñ” AÜ-ÚX%1LÁ]È Îx„ªŸÚâµýœ´UÐj7VŒ1„Shn£õDLþ¸ä̬©µ [û,=ÙUlˆ‚Ú%eˆ¸pŠ) Vk³ò«\ªy-¶¥f[Ci*¹jÈÆU ¿ð¢|¨2$Ëée5>¤‹-epaƒáÙyQ”µ5ø¸÷É ÷óa!ÑBÞe[˜iËë*K)d*T {ðÛ-—^æ±Ñ^ñmRâå@gxÀRA/4¨ö? Êbl6j%m¾6taé¦2­@¨È¡•+W§_µ’ý%‰Q‘¸jw*°õa†e—íé–!I5øxµÙÉGxŠ%Ìù²ˆVRª‘ƒÁx&€w4?i¸æ1–î@ .¤6÷ þ”f"=c >Ñ-55ÝNÙ¦£|Æ”woŒ¬%SjË ž¢Æ€±’€TV¤ûT˸ZìÇÒ‚EbøOH¯¸®+E;1ƒ1NЧ¡Øÿ6D†q*V5he—aãñ0­[•jz°Zñ’Çš[k!xn}QÀnJ°àWá?ê¥ÉËÌhIFp™ÉeަYÅXªó4¯WÊãÎËdŽÔïÐÜjÍl^O÷e ¨V¦ÿʦ‹ÇËeÝdö·r]3ÇY}S#=V‰ðü4ìvø²Q=ìdEHlïeµhÂÈÉ^j ®å{~ÏÄ+‘œÀ#}™Â%RçÕ1¬VÁ5伃ëcO‡oµ lzÊ]ÈgŠíæ²Y8}hÐ'&SHÀäåE6ßoÚl°g¹®$QD¸¬XDR"3(f2)äÌ oøl†Ãv{–¯ã„Ú;Š`à)Bbæ•øµâ0Bw&F EÖ·ÉVæuv‚V 2°cW©§k’²QYõtMaí ™ ‰$-º·_Š„qã’ô–7!Ü­«À•õBHOM‰¨1°ªPƒñ<-Ê?õxä1Hþ?ÄÙ’!AãMCLžYA $Ýþ>r´?ì¸äÉ ŽæýË58ÖHRh’H–î6@Y°åAÜrßí}–ÉGc_欷ݦ¼29õa”£w¡‡ Ü©ÿ ”å[ý­¸±?Fa0Kî=D£q#•=0ßÍûjßä°ðã–@1¡îþ‘¼·C͘Æo‹Ý­Lr 9’»R‘á’ ˆ—“½¿¨É@çr‡Ï#Ì&gkL%"=:Cž ƾ£Ä¯N£¯²2£¼›FÑB\ ãÒ¤>$w>‚M(ÅjÀl…¾, ÿ„¨YÈ¢ g¦Æ6–2C#9¡ŒTu¥¿ÖËr a4u˜’ÚhÙÁXá½G¼9È’?j„|?³þ¶UÈòÙ{Žàƒ´·™$>¹]ä ·Æë°%º¿ÚÉÊ[1u4±¼þì*(5ÉC]«^ãêÆDaµ•Ö‰QL>›Êhà€kDjÍ•Y#üÖà6²ÕË^½Ú°XÚ1"T RÀHÓáãðŽœÙd  s$©A Æöä\\GˆŸ›ÅØŸ¶ÀºŽM’?Jß܉g[Ÿ¬"V6EQ˜+— Ÿ~C¶DË…Õ0”Œ ¡vV  ügz÷a”Ýî¶uÇÔLòάÊ=.[ÝÐñ4þÚ|8Žî¶§½ 9µYcÞ#cäü u-Ì×ýUËcÈ–™ ¤BúT’¹eŠ$5%kÄ¿M¿›®ÿêä'Ì2‡"§'¢­ ´q9 ç ä­ÈuWìá纎Jwp[~޹Ž(ÜR×…š¿ & ¾Ç™Ãn=ìkbŽÑ¤[’n ŠË?Š@ Áh7û+ÇýlŽQB¼ÙCsðM¯"Ž[vEH‚²Ž$žL½6;unÙGéT×LŠ"ÈO¯0"($«ÂB‰Ì€â•&à.»p6iÚä1pV „1b~ƒÅ~%ûY9ÇÐz“{ÛÿL èÏE„*òRÆŒ{&cÀü‰r]z¥-Þd’YMÀDÿuðqJ?Êí–‘M<×i÷.-*Ò0xÕ¸4ª¬Ÿ ¨¦ £tã; `ºYe¶IIð0-O2Ðû/‹-"Úø“-VR·ð†fi‘ð‘^¼a¡/Sð× ÀåÁá-Ùáf»}p×0bÈ$ŠÇB§åíŽó´å; DiÑô«º²‘ÅÖ&»ò§Âvoþ¯‹O¨#"Ñ‘ÄñŠä#FŠI,¥HÛoõ¿Ù.[—é,#|H‹ùÊ_•J~ÿt$|5ŒKÊŸh1ûY^!QlÊ}_ÎÓÔbê(–1ú…§ÓjòݾL«':eŠéŽA'©p— æYâ‘–%4âK1!n<¼3 š¯wCê*H±˜¤£DH¿éðþÖ'š&O“ ´êF¢Ž6Ø S1%ÍÉ€Ù©±[(Õ£,°•@ Ç¢ÿ1,‡ÔÆ_J¤JÚ©ÌE"ÆECV@ºüOÖþÖ¤U”·3]É(@Y$ ̦ܪøQÝWDR-<Žfx¡- $‰YÓzHG#þK}®™1»‘‰$艨W‡ªEéBAdù(Ë`},f=M’^Ê‚%”²*’ €§Šzýë’äú©i÷JM˜yãoZv Ug`Ìkü£‡&GÞÄ~†µ/Mô˧?3úËl†!ù"Ôm°ä~ò¹a…‰„ÁEkHD°F²bs,rqøI¸^GýlÆÄyûœ™ŽI[Ýz:ÌQ’ae“‹HÊÊ¿ñŒtã™<#‡âãñz—zRÃcÄj­00~Ø¢°Üžã yÓ ­Va&›++Ãî@#~v©­9‹+&¤p–´¹­L®Áˆ‰“вÔVBM+]÷8fÄ)Àc7*±ó½ž,¤ò©­î1DH]jD×·5C] ÅGÙèØMˆ¢<Óh`U¶‡”•Š9PŸØ¯Ú,ì×ø¤îÞ6 o˜ ¢yKÖB+ð#aÇ¿ÿÌÙ<XFa±B_B$gõTžhã@> C+6ݺ|\²Pý R; ôÊÍ©^ÎY½#i ‚’ °š¼…1ÍÜr.8ü`ä¯|ú³š­­±õÃ:$‹+I“àø Bî®iöÓ‹9&W7W)ŒÊ9$D€­°U·4Û‘-ö²7¶è$p\¥Â ag†8U#â¤1‘¤ccƦ¿dËbÑÑBÞâ5Ò,íÍK·«²ŠrY‹IŨÏËìòâÙ"=D±½€Djh‡N1ÔýXºRmê§’“½GÃÈ\rþ¡îg.T«g _L4ˆà¤Ûr*ïÇò^X &Ò#lãôR5BE¤ ñVåVv?Ì9ql®GvÁÉ+–eR¹·h4b„WáõÈvßög.­i<ÊË ú°Ùã…Ö:õBhG‡ÆpÅŒƒÿÔ"zWh«Á£Ž«!¬ «Vhj­OÙÎ8ž¸sW½»ô®-õD Ó[n\ —âî;2ËÚSŽ1{,ÍnˆìahU䥬ŒLs­y¢µBL¢½ Ký‹!(’YFB¾+/E²^¥Áí`õ 7JÔÅ@T·Æ¿µÇ&ÞðÀýÅ2³»‚ èb¸U’ ´x&‘U¸üT ¿ìƒüßÍ”Ñ#g"À;¤ÚͲZ_[Ⱦ¯¤Å­d¦ËWb¿n6l9+e°•‚?Îh˜¢Á$mpH2Âx@qÚŸiNüvø—ŽWbÙÑákTx š9«<ñ9fõªÄ=x¸¯Ú!‡|œ91Ÿ4F˦útõdôÞHš´V!ôúw¡)™©3€ô â[y£2+kRÄ+ú›Õ û,Œ¿gí~ÎLuk<‘pÁKËD¯ðB1$ð­XÔÖ¹\©²1ô¥úx<ä.€üT—o„"’]¹rû99†¸ôl—Ò Õ·‘„‚*M} ûe?iÛâoø\¯‡kl'zAÝÖKKÈfP²¬Ä"…VAÉy!ðê?ÖË`M†²,-"èM]¤gëN=+ˆ˜r Ç¡àßf#¸G_öXæ"—¢4û«¬D3À ;Èšíü¾ßk+È6ejæì~–æ•’2: ×bƒn ÿ±À§vR>¤º{éç{’æY©HÊ!p$ ßå°?à²Á¦<ÖIðŠ5¸uŸŒšqv©nŸÙ,@°ºñÝØ§3ñ¤uPIÛÄ7Vè¿å`ŠeÉB9Z(Ú8Y¢f$«¹äH©æŽ´?Jº–;ôOtËX¿e}2ȪÞ‹Z‚ÊÛ—ÆœœŒa)’îyY#PÁ%/ ܈ªòÜÐ}žTøy~Îd ¹D;(!%â‹PTò5»ÔÂãt€4=K§©I$"…YvÛºŸrD|›(.·–dŠQ|Q±1¨nC÷Tb*7é½0pî8¶(¥WšÝÙPJvp«T…êÆ¿Êäi¶Ò™Ý;‹…f&ã‰VuÚ'ˆñDíµrÐ*‡s eoi#ÏÃÒÌóC¼BÕP•IGi !•Ä‚¬~Ò0m²]áYim ww—Tnj¾“½* ˜êz| Ÿ‹ùr|D€Ã[²hC½S™Ä‚@Gìò³ÜÉ.¾ŠY.®G¦²@±©‰[ãäδ Ó‰j/‰ÉÀ±ÈË÷êMêo ’5«Ã0 ʾ?OÙËñŸSD¹'KB}Xd7è«©YB¹#£€üNNCkòbº(øä³žÍÑbiîdAÆäªò·Ápªß²Ô1ʃì>B1?c9H)ižÊ}6*à©RS  x¯í×I].!Vm¨é0³ÄVêØµ´ŠŠìÌ‹½*YAôÿàrƒ¿Vfˆ®ä›BRÄÍ'©fÆϽC|JÌwØû_³—e7¿óšqìk¹2µŒ*Ïnå‘ѹˆö ÁKriWöy}œ¤±l Ù+9¯á„z‰$2372\ Å ÿ'áö9l¹¸îB7QH¢6Ó¬_ºdõ=2ÇÔ.Ÿj1_å9~Ó•DìCdù©Ãk]ÆbHÛ›4d³Z­W’×gAüßk'"@ø1Š–®€z`ÇD-ñ¸Þµ:uæ+Þ„ñ"Fû²¶P’ñžÇ׊4eI¹À޼kFêßÌ0ˆÑ¦26-ªMo¨Q‘šÖè˜'4á ¡ûL˸‡~_ðt#oë5Ì€Qw76ñÇé)¼a›ŠóR¤ ûkûAò‘D–rÚ(´¸hôð*I‹Æü@SJV‡ Ûl¬‹“dk… ڔ˥G%»<~»tbNôîÇvÿ+,áTÂÏ O©,l41Åú<€¼XÒ‚ PòÿS&9îºQጭ^. e‰*Wv<~Ë|T\‰;S 7´4 ´‚BZFR¾–ôRTñ üò`w0EZ·Öff$´J‡ÑS·¦¿µ×Ãì.BtDÇQam ©Zñb#zŽ)·.ã®Ë•bGv܆‚RæHýgÕ½8Ô‘Ð5kÈR®ßj¿ìs € Fô‰‰’£ìªÁšìÄqVöðY&`w«Jô<•xÌeân-¹ “ýfqæB½è“4)£"t§ì•/ì‹7ùY²»%OT„¸0Læ\‰‰G$ I8šSíÓþ#ŒÙ¿æ¶HmWÍ?Ò/LE}1ÁZUœdQâÝ `ØoÞÒwL¬í¥uÓ8S5Š»+È'íw9TŽí‘䆊Åä„I#Äáâð‘ªô+ºñïÁ‡Ä¿eŽHùt!²…ðŽKiâ–7QJÉ·)UZ³ÜdâH`E„ëI‡Ñ¸†Ù*=™iöVœÏ‹Ø¿³•äÜ[<{mà•të†Hø?h Tý òÊ#][è¥3Æðº³/Jsõ#‘“•JMr? eà¸ån•,I¯\F«LUMJ´jÜUkÕ¤o¶¿g,'ÐêGjØL@_VeàáÀ§P(¥Oìò¯åÊ¡{¶ä 0Ž31yJŠ$’Ȫ@f<É)Éz~ÉJe‡f±¹Ýk:þ†’Fˆ+MP X©Ð’Mò3‰0; ìbd¼ŠPÍê|jxŠŽ4û"»jñø²ù #še{:ŒmPT”NjÕ$ïÐoðæ<9ädè·Zç.£j‘QªNÊÝH¨éƒ"œ§’­¢Ìº$†=É3!È øˆ&Ÿ;Œþ°ŒIPÐXAªFD‚‹ïiÔI=»’Éô1õ;T{´t^*­$¬Ñ‡ãðp¡&µØ2× Rs]§h¥4†’4iˆ^,ì+ðÅQ?®›±ý)Q¥2’¤µJԀɠûTé¸Ìš½œs*joR8#uXݽUTmÇÃJì*¹ vFá’ÜÜ ŒÆMdAVh»ƒJ·€Ì07r¯eé%ô­Ô©’F$ŠЍÿ$Ðo’ÇÍgÉ-$·äÒrŒ[¤l>ÑXþÕz† Ë/òhDisÒBŠ?~ŒJ«G¦•5cûX&EZc¶É• ?VY’1H×ÖUbIî”ä>¦è ’­Bpn•·sµGÙ,ÍBM?›§–cäÃ/5žœP´vëX[J[ãY)SÈ«ÄÒ¿ðY3ͬ ¶aãp’EmF‘ƒ†îŸ '2rçñb;•¯›œ0ü/ ªÝÛGM¨ž©ãÖ›s_Þqÿ["6>|%û-«NàÛŸ¾2„ŒîX¡5·Ùë˜øƒ‘3I“´Úœ ü~;!W ÙÏÅÓ3Ñÿ88•rø*HÜ †&Nn£zÖ ò_ÙÆ'tH MJÖé( ÇE¹­…aÐôÿ+1¥´œ˜ý)BEèÏf¦¦A""ñß ûãÿ4åÄìZyt´n­ #’##¹‰=DkSÕM{äd-FË4å.©+­b¢…åj*Ä;ü\y}®8dEºµ¯¨&³Ž¡&IçäHPâdüTä~&ÈK‘>æèÃZôDJ~®wQN2ËÑ[ùjÙ\÷NNHKBqjU½K¯_ÔYJÒ”òk³•Ç'.­QóJìä2‹ÉË´’Ëxñ«P\ì9tåQÓýŸÙ̉íCú-`#¡‰çמÉ O€äZ}²° ä’h¦z@Š™·/ÏŠs£°/Æ›uØdrÛ1¯‘¡Œ–©ð¹G¹oR€pPQ` {þßÅö¿Øä!ô²Ÿ5<™Ù_B>ôY ò+¿_°7ÉD±Š»î2å¢))ÊK1â´e#¿O‡Äep!ï “Ú%% µ‡æÑITóæ°·Ø…?Ú¦_ÎVÑÑeÉi,R0 Io@’n1¨ Ekû\›_z-RõýH¹–·Cp¯P*Gñ•`~ÊIljÆ_ù©$×ÅUÝ£K^&‰òõ fM…:~Ïòä+Ÿ™fMîLcº&U…ÒµäendäÚ®ß,¨ìÛI Á?¤¥rÄ/¨ ‘û²Àt陊qä7DjAEÛ£­fBÉ9 â«^ jNû\Œ6 w/ÿÕ‹Ç<–Ú­´R3L¬¶òG²ÖˆTmº‘Vÿ'–qäzK× â›µŠsw¹¥â¼ÖQW’‡¯ï!ä:p%øWí&B†‰L½V;Ñ’@ךy‘J« 3Ĩ8ª*Š•ª2±nF­Ë–Dí&qr]`g{§µyR0A~„r §Äoõrr-q Åįl°‘é¬H…A#ÕQGJ{oÿàˆ£ïe)X÷#µ»µÔ`G ÓzéêÈV´P­YÔ ×ÕENCù—#^T²6U[&k›•ܱ’טNœ¸QÁÛ¸þ_õ²2Ú[÷³ˆ±ðJe2Ḇ»\h 7+þRóè?—/¯üÖ„Ö܆²A**#äI,ª ¢µ>ÇùY#rn„vÝ uÕîØ4lw£"JaC½+Åÿárg“Xئ„Ž{DtR<¯éµ+¿*‘NK¶T|›ÆÃt £¬7ó ãÂCé‚Õo¶S¶ÍFPyeÆé¦ýJÍõdŠ+²&i 3:}²X€÷eú~öYlpÿœÎ@ иô.^BM'T=jµê°®µ1¾j>[A4n±"ú­É'˜š©•â®Ã'›jc‹™UÓåˆÜÉn¨ÈGï*—¼9 mã”O ²‰HĆ3¨ó•yò-Y q-ÃrÍñd%±eÂhähPB#.¢6©ET…cüÄ9l@`¥§]Cy£¬Q§fÿFgpšAC^ÒÇXŸü¥\3­b}(‹Ië‚éY^ÞâGgZ:IÈs]þÃìË_ÚÁ!é!#êOWµ¹³—ÔW¬œCÅ-8ZÑá4ê«É¿›âǶNH|›Yží/T C¼e£EèˆÃû|kñà὇šA­Ñš]ï§=ÄÌÅnÔ t$2ɬ%@Ñ¿ÿ+·dGiU¡mä“ô™q‰¯O]hB—ˆðb+óå’ÛñüHñ"µxO$YX:À³‰‡ÅS *A¯·Âßìr8Ïãú̲G`„²‘ßPQÁ–>mI9£'“`×e0»„Ì®Ô$ E.M šÐ«Ï"C|_ËÃ*l˜PÒÂÉ ýߨ£?©FWØ…e§ÅÊŸðÅ’Éç‰'YdZ<ŠÒEÇâpEˆíW!ý6ql‡¶žÝSÕ‘‰YZF椰4Rª¿e¶n¹dö £ÕfÂ+K’ö¥XÔâýâþl¬óf9-ɯgŽqÄñ!E M¾/‰¿—÷,Š–§)¸´»sÎI.£"7cÃì• Jwœ1&Ó‹&{Çtï,e@4 |H~ÿ­1¸lÊ2õ7}pÒé×k0¤rÚÈHèxRµ¯•ÇêðÛРÒÓå’>Ÿ›.Mδv¡¤‚jÔˆT£¾Ü²ý ä¤n¨IÇ”FNL ÔmÈ~ÐëörDnÀ3~ˆ,ê“ Â¼:ª´…žMû4Â~¯ÇrÇ—Ám±X¯­Ù¤ ÂJ¾ÍÄ©5o‡ú~Î[-âÕÕ,‰6«nÕ æÃ @¨?ÊÌxŠƒvM䥫§©¨»‚9Bñ)Œ©¡î}28ö ò+¼¬šÓH)ÆãÓ'pv5P+â«öòDzƒIw–Z3zéǵy5Ifj´øDc~?µƒ5ð£q)êŸU’þãð+½d§ÛbäŠý•Çô²˜õ'ws4LüTPŠ,ˆi@Ý ¯~ü2ƒ¼› =,R„LÑVE–3nÜv%IÙ‡Ú´œy¸É€1G}lÍ'Ž‘ŽmÆ¬Š¼ªW~ ZåW²z§³¬ÑA'5Që ;‚ 5{.ôã˜ÀîäÑ¥+òÑÍoj ¤€,5$rPBÿÊ4ãŽ:LÎÉj/úÕž‘÷¨CP+7l¸þm _ØÓ­ÐêRLáó!CÌ"‚¥]ø3+.ÙM U£æ¡E‘tH•ǦaZpbNàÐtþ\¬Ñ-ñ%2Í:Þˆ£ZÌŠëB½Í/.íñS–@d&ГI,…(3ñš„åƒ#qOÚý¬³“UÛVÓK70æ±Ö9c§x¯F]è¸I³Jq‰þ¦Ï9V{¨D±-O©,lx¨­xƒ×—ù9yùÊ5±EêîâöÂG!‘¥ü5^@Æã ÷é”âêß‘)°ºŽI¬éU¸6ñH®ãX•‡ÂTu¨ûNFeN&u¸ òFHÞ˜ˆ10¯¤Él€lkU ¨ûj%•¤»‘”¼^šzÀš°f ?iË£1e&›öFUyl5¥»+—I‹bLl’¨*Þ;§í 30•ºú6êG¥$Ó6ì‘‚€îSÓö•±‘ãxvCjé.-Ò% m0gND( ¹EZõ¨f\²Ó» s]£ÍéÇq?I„ˆ¯Âàß‹oµ•eŽãÌ3ÆE}JÝVDC²ºÁGÆ7JŠü=V¿êcbÑ1H{K©ÞÁEÑw…‰UIwߦ3ˆÖ̇Ҽ)´ÕYT €àûGày ö^&>ŸìpËpÀlUB$òOl¥ã¬­•ˆ©ãñ©é°nŸìpr«dwºQ·GKž’Ê ¸Hä!r¼ºz€üi‡£6äI:ó—Ú PЕª€(‹öÊÉf;&8¶‘EØGp·ò¬­Í½BT‘Ð2¹}-€z•Ño¥rÅÀÍ(B¹5ãþ©Š}œäÊîI{B$¬ŒC†AÉjAZþlK™jáÞ…F%Ú” Söß~`×`£¹ä-b zÂYXÆÁϬŸï°´Ûéý¬åA”z­²Em6àÈ̛ᠤ²:%-k1iZ•HéÑUÔ…íßâÃȦ3M Ü(Š·¦ÑíJ)'bz7í>ì,©Ü·#¬÷ˆèWÑæ¼B›ˆ cËzœ7A2‰‹ÐäXÕˆ¹c`7Ùàµä¾ì?ÖÈŽ—ü)÷u[é¼r Ф ›ìÌ§ŠšmZÙ"Elˆ÷Vµ’8â $U .@³H9;ž»Ôìr,üÛ E¡f’;5?vÁâG"„qPÂ}ö8‹¥—4Eª8¼ GÃ$‘ÑÈ„ ··LŽj¦#5üò · àŠ BK|‰ú[:¬ºR²‚\“HÞGU iÓáFHšåÍ ŠK˘Zjs‰_K)CYx…gäýP¿´[íIä¶4Qape,0¤.üZA¾ýÇú¿Í‡ø“Ñ–ÖeÙýU<‰aCÉ·=|(yäFä¤ì˜ ´…Ü´À‰$ z0ãʃÅ~.ø“±­”HH. úÑ›Ô>ŽòÝ$S§ÄTþÍ0òÕ½mª#ÎÍ58pbS²ÔÔßžäDw¢¡Uô~¦Šåè%/ÈG'á=˜ÆØÐ»]ê—×-mnó°Fø‡’–G0¸ê+¶å–¹d7’Á¢»Û5õP7‘}6Ú­ê)`AïCö[áþ\9ØõX˘VÑàÔ¦ýáÌ9($qiª‚8®ÃOÚÃú=Ìaõ{Ó©¥K­6NAPDåíØB†ÞE'²Óã_öY ‹‘=ÁAhð\ÅÌ2U–9խ‰biâ;ÿ6[—¡kÇÔ)Ïs—.Â!;Œ¨ªúŸiP}øÿÀàÛÜÄËuyc]SMS+V²(v˜ô#o€’8ÿ­€O†LÀ°¨·2^F±ÙnHúÁn?¾Ý>Í9«ƒ„ħˆ$m-Ñ.f¢Ë¢J‚¨GÅ^?úÙyk½ Õd â` %ÉD "ª(µ&§’ÿÀæ$vçÕÊ´ŸœÝ@ÑPò/“|TQN@PmÅÏÙË¥ô›i‰Ü"gŒM üŠñD 6ìÓ°è‰ÛüœŒy²›£œ7x˜Ê ºÈ„ € !ñ ¿iqëä€vnîܵnár}FO‰¨ÊR8íö‡†1­‚È µÊéOQ£ªê“J¨å(E?ÊL¶‹^Aawõ™ìQâ•KL¹RiZx}¯øl¤}T[yÅÊNšÇ˜‰~ØmÁøkJŽ¥jhÙõ2‰¨©]Kh…2£”† PW’ïµ0 ÎËÊ(f†(ј8û—«–CÇ‘ý…{åĵÑS‘$bád?f%ú¿FzSöp ¥+®#SofQÜK#²ñ5×Oˆÿ.D²ÈŽH»…Svü]•¥EޤPîB-}Éÿ…Á\”îU/ÞÞNnHD,ve,„ò볚¶;½å ¨¶ò¯0ìÿ»ˆ6ߥHãÝ?ÊÉ^è­›†Þ9-äY õ$~(à… ª|(>ÖF÷÷ ©dY£3 1ÇoÉXš< +üÞ!pIJ²µÅ*ú‘)dgárHõ ÷ꜰq2 ·@`2ËÀ*ò©VVr ÜmìÙ]nKeŽKr‘Ž.‰À¨œ–B š~Ù=òdî×Ñ1šÂSǃ4” ·ÂUhÕï×!Ô3–Ã;1912P8¸Ã}ù(ø°êSô ¯ K‘$”wŒ#/#Z¶Y”Ö˜XÝÍ3ÝZÜVIíJH­PJy ÷#áø±—*Hú‘—“Û$pP&2Îw$©_ˆ€:ñÊcmÒ"ŠXãÒBŒ8q2ÒŠõ¼uË=í%VÆöÝ5yXHácš"êàÞTjSˆ&˜LO ûÔHZ”¤¤’ cŠàCN$\‰!kü±¾ 3º‰‚Ynb‡‘27¢ŽAýáo±RØòlœ˜™œè©ð*G4ïB@䮽 §µÙcü_Âݳܦ¨’Ç NF5Œ CQ½vþoåÉËxîÖ9¢’']RÙÐð0idCÝ»š§ø tÇ©NâDžø¡<;€ÏJH:ü;±Æ œ§t}Õ¬‰£È¬ËGujžÁøìw³¯û,¬›šÄz[ÐF…ÙÙTLBÅ—ìˆttÿ†Ã”ìŒcÔ„Ô\£ð¸AH=U%Hâ9=w5ðøÆ5K”îm9¸·iŠ‘¸ãÄVF¥Ö¡¼2‹©|[‡Ò”´PE½»WmÜ/J¸ mþO"3'´rTŠ yî°g´¬˜ìU]·¦ßÎ.6ŠO&œ>§ªÁßÓZ‰¹HßݾÛ£¶b íÊ;%ÒªÞ[U›à¥U"ß´A;SˆøGùY(Š&—Ä!ŽKQ(i¤«&ëJHE:ñø—ù³ ‹8;¢tÙB¬îQf”#@™”–ûuåö† rø¬FÿÎããåRzÈÜ ŠœCmáF1ê‹‘ibÌ‚ògà2¶ שAÒ• —Är sRúÜ +ݘϧ莉U%{oµ@l<;0'u [¸þ) Tô Ôƒ^cP6ZÕNH„‰º±œ^Ø?¤­Üõj~ð‰+°>'áÿ'+2Ø–pŽèË«çŽêÁÀ¯ xJxÔ74dRµÙHí•Â7~æé…~»±mÕ0G{D…R[§ÝðÕ¥…@_A¢¸‡û©ê¬§}ú²qôƒßþõŒNôÈoÇ=>R(²¡ ãìIâ¶û§®cDî‰ #¿ºyíb…W’Û1¸ÉãAZ:ó]ÿk2b7h&ǻԋ·Š t³$\gBŽ„n$•CW¹®U2y2ŒG4\h—%4YaUhääÐÇ·í9Vÿ„ã‚;™oïBK 1Û˜Ò2ŠÒÉÅjX˜¤ÁßÅ—‘_ÙÉ`žàT¶TôõBA¤†ÜoÅvÜ?ÁÇⳆö^ªúŒ,ð·> )¡ä S‘ÿ*žËñä#T™s]4^ƒÉ;+Ir´`  TЬ/û ÚCYÄ­«Ý¼|ã¶œ$¦%5ø7/ÜŽTðXròˆU«Æi¨ºW·"vßÝi¾V~–ÁÍNØ­Lð·+Åãóf45=¶9)H@ú¶[kn²4í°‰Z2$Aб?ËÌ}¬Ÿ 7jØ• ”™î³G I¥ |1­JñÚ½êßë`S)sT´‹)%Yšz@Hkð"Ÿ‰kÐ…`•qäUn`htè¨dô©+mN5'ŽÇöŽá¿Øä"wø¦B¾MÛ‘ýNÞ& [œò05·ªÔ€'ía”¶6Å!íCDÒÉ/Å,Mƪ¼ö ³|Úƒíd‰º¦1Ö¬±Å #sT£+F‘@û+Ù~…²|Óáû8#˼ÿ¹[jI½ 'µZ6$¸Ðpý®Yg3^E¯ÏÍA¢R/Šc’:õjÛÿ'ú¹ƒ"7VÒ£y-€T¤¾ñe«JŸøVl;¬Ô£gm,°Oø£bµˆ&¢½7ZqýŒ$€PË51¶ۈϨñ$¶óFÊ*¤üMíûTÇ‹uV´6¶A¹ºF§€m¤–v ° &¿ìpÕŸû(Ø|?Ý*FâìNò1R#ýç ë6åÀ5ä:GO‡!#[3Â&åaÑ´Q’ïOJÝÉ5( Zæo‡‘Êëv]ñÚ@–Ôo´Î‹/¨+¿ûcqÇãßíaãõ1áÙ ɧ4þ"Yä}‰ïÈš|Dör3;¶@mHhæiìî¥ãj,p¨Øo³“A×ùps’/Ò‡’Y›ÆÁLwn%襂³…ÿeMòÁа¾hØ(!æ‡÷°óŽ2j~+¹éñäd˜ó-ÞÉ<–ñI “$hœ$¡à…ÈŸå?³‘ˆ»9rZ¼ŒUÅrA§¤¼~=ëê sÉ›%¯’F¹µX–Õµ´Š¨Œ¿¹4^_=•¾.?Y;!„(môä5¹¯«pKHjƒËöiû9\9|ÏšœŠÓ€ÎêXe4«$û°Ù‡íd¹–7A²çôùçÊEHѾÕNãâö«rÛ zöQô­µZ\DT‰#ô T’8©Z0¯ÚÚ†gÒÆ#Ô;FiõxœšÈ¾˜©ªU©®Ýr‘´¥¼Ðw™õ)#b>³êr’Q@Hí“þ°©®Y¥†Ni†£,_¢çY RÜC ‚HÛ^ÌNÃ)…ñ3Ú—è…ˆx>ŽôQ±Z>ô P¼ÖÇ7.]Q‹ŸÁ.1-ÄäÎÀŒÌ±€@%‡~Ëñ¦Y茆Ê{2Èú7¦ˆ®¯©U5-ÈV„ qÛùr€*Ø})Éu2ýUPñ®" ¨ˆÅ½s(D Ürz]¬r-ÜqHà+,]wá¹ò¨îv_öYY[+OšX$‘mÖ@¬Ç÷„ò!BnJŠ´͘ÔC“a)ÔJ8‘íÄ‚$ARå >ÿ³¿Å–b 2žäËiéY²p|TŒ…k^"¼ö³ o»Žm4€2]ÚNMõTPFÈc5%êvýß|ª¶-ƒš2VY‡:’5•i6g/@áTmÈqWn_òåuÞÚé,¦# ¼˜°¢‚ëQ¸$)>Õáý¦Ë`7a“pU%„Èè‰H߈Çû >:´h>ÈÄHh ¶)Ò*Çë€Îáiï¹ê[%Ä…IÖ·ÓÖæ5–/¬®â¾¢0‰eeh7ì7ÙçË#uuüßÒÌo^õ÷ŸS›ê-2rD—f%TV+Z~×NÈâO¹–MëÞ%Òò7aê"Ä`,h¿ìi_³—]Ä÷´ÿ]nó$Öí ÁæÈV0ª'ûð==OÚÆ…‘ø’,ó ‰À’##”)- ®¡»¸—ë¿ÖÚª9bNßûJ¹oCäépYè¢â-„(GÈ©àáOÚ~ÿ‚ÉH¢<í«q.­nCUÚ7>Îq6½~A\”ï}^ÞBÕˆU«Eb[ùw¿Ùa†ä¢|‚¨ŽÚ]%Yn :ø\e´Ó ¨eHƒ#FQhðòVÙ–•WbAí’½Úâ@NYU"äf"?„‘Ç›P7ÙªÛüY[ìÎŽÉ[[¹Õm.mSÖZ4755 ´¸ý ¯û ßådÁ¸‘ñbES¸ Uˆ|2Cq«äó!Е`¬>;226bÖäõAä•jFÒ XOôÁô¥PJ°/†›|A‡Ú̘’Z$(å!ÓÌ^—¬ð|2®W‹m×o²¼ûÎú3Áô×2‚h㸆¤úJ\0ÛuVZÔSü¬O$º6tuW\M*ñ’!öQO*rCü¦™HgD„"Æ>½QåZ§2 +} ¢Ÿd0匶 G6õ)Ú)£5$‰8Ä„òRÕ#åÈeÆdÏ›Ir‡R A _•Sr>$$í@~ÉÙîÔ“’VbÔ)B¼\U‰åAÌ×âoæû90/æÆ[k0Ï,«ÉãŽÝjÊBŽ5-Ùr¹¶ãèT´s,ë PÌG& ôSZukM²Y#°c¹]p»¿£ÅÛë E…G¥‰­*>ÍOÅ’&‡Á€~)eܶò³Ê‹ëUê®E @¨®ìrQ)ÙGzK¤ð õ{‡D,ÀyTïû#ù~ÖS·'qû@Ú•5iXK:ÛŽrFP*TqŒsjtª~Ù凨_šä;Ÿ‚û;BT JF”UªÓÕVñ4è>ÎJ@ÑÝŒHµ+KpmžŒ Ý aÜŸŒ¤¶ßúÙY»òf)BKV’æèâÏ›'‚e‰è?»eËá°¾­2çJñ ¥¼/ËÔ¸–IBºF²Šô«pfâßË‘âçå€6÷¬´ŽÖîæJ%•eÑ8žšZ™(z)ãÓ„€JqdtÌAnf¬.T% WpÙOM›@³º XØL ,bIÚ¤2êÊ:mÕ2` Ý®DÞÍÙבÝrŠ ä†y¸Ì²äf<Ÿˆä J€Fý{ÙËSQ&Û³uw1Ò$2‡“­C×áo³’"–í2Ž Êà«tø¶"‡Çß1ÉÙ¸¼²j3eä‰Ï™'›)n_³™ƒG2ŠœÁ‘%a*[Bfì^@#`U~Яîê¹Oû/øó#CäÜP[J—ªY–Uø£nQ9ø§.[«°Ê1­²ns(Wna «ì(~ìì¿c ù1‡Ô¡oèÇzŠòˆÅxò±!û+O‰hL‰báÚ´QEtZ?ôËàЕ’6ûò÷œ kôçŽYKe0FT'^C•â;£(;~ËbBƒÜ«7 ñŽbªÊjeˆdaZ}œIH ^_´º[hì¥%ÔKRX™2ÆA?m]~5ÇQÎûé–Ó¹tË5—ÖIPÒp"±¢³tä¡Äß³ÆxM&{‹HÌÖ‹} ¼H{gdu¯4d’Œ Ö»­?k2(˜ŸÇÓÿi4$?Wüy;¿ºQé2ÄÀDˆÇ«*ÕY¿ÉÚü¹‹äMÖ%ZÞE²˜bqjé×§ídˆëæÆ'zTÔ®#³Œ H -9„ìµþlŽ1d¶LÔUoP-¤o'ÂXJ§sV£’AøEN0¢gÒuJ(åŒDyŒP¨Z32€O/¿¾¹¶<‚Æ.z€ô ¤ ZI:*½PS¶¹î°ÚcGŒßË,Å£ôaXÑ¢® ªÐ|Clª \Gô¤ØNÄÿEdœ\Îþˆôâ‰å€P–Ó v£7ü.Y`wµ“Eté*[Äh°Âïë=H^"›ô¨å¿Ä2$›ó,…Sw6ì$OILõ¢Äè“3±'ˆê§)Ÿ$%£‡ÔfY àÏv@ ±Æ‹QŽÜ¾×ºr¦¨‹T[0Fuø¦•½´4#ù Þ¸ÿ±ÿtT×Ûþåb”rÅ ;"ÈÀpy ¨ÜV»||¸åS•ËvÐ=;&7°@'"”‘‹(*ƒˆÛ¿ µÙ° ÊNÁ-^q Icç+#¼¼‰Y>ѯíÍ9:¬Ò2J^NV P_©mí}¬ªFäÝ¥A½6aÅÑG'â$'*¿N_k HæÀ‚‡–îE€H¥„ÑIÅI.ÁBž«Nhÿ7Å–F –D&P@­ «2îÀ°5$¼”tÛÃ!3ÉœG5Ú«œÏ pS%ÐLè:t¨ãþ®GÔÎw[(ÙÈ‘BªÌ¥'·© V '#Þ£í±É‘»_D—<‡YF«¬f6j¤9$ríË,˜ôÛŸVÈÛ¨¯&䌣²Ä>Áa_ˆ«ö¸¨?ëd#È&|Ô ôј2!i*¨ãzW‰§^Ÿ ?k$ë° VÎòYÊŽÀ±dz ñWv?å¶jj7‹QÉWŒFCÁNêUÒµ£½òFéŽÖŽ´–ºúD«Dª+?G*kCôòŸòvÛ/­ 4±Eª\´EˆŒ‰HÜ®àôïö¹û9lEÄ1™¢‰• Z! e22ÂÄ´æbýŽûñ%ÿÊÈïÄ‘TQ:X¦ž)÷ÀTÙƒ5¨Ü7l†sµ®.h ©di]AžŸ¬€²°b¿ò¯*|?ì²Q 3ºow : n/õpï{/“ žXÒÒkÏWŒˆQ$~Sˆ¢ ÓoÝ×ö>Îaó;¹^iJqèi _SÖ ·îÛáVüKrý¬¾è4ÊŠ™áç[€mÃd­KðjÐS`ÜET}œ—,nš±·I¤gIRHø†~ß%‰ Ý¸ý—åñü8O$ŒÑ$F„ð+êN¦PÄT!m¶ý ‹”åoƃÖ> 5S ¯«õCIAbŠ¡UåÝ›þ#“Ç|ç#%qš§-ÜÉi2D]UH+܇QÑ;®ÃŸ/ÚÉ-®Ê 8!†Ù’KK"ËPUx ×aºò=¿›-â¶¹ FIqYÙEø ’AáVâS˯\¬ Í3%bîýEnTv<ŠñÔñ¨¯Ël9Bâ*w­q*°`•ߊ€)ño_ù«![2—=ÕU [©–"=ÞG*[ö* Üí‰åº*Šëÿ­þ’³·–UU·‰žÚUÑÊ­H;Õy3ÿ2à%œÁ$ džAªÄU ¬VcJOöæ¿mIÿ'&9óZÏJSKåYB±>¤^ݨ ªúÄP«Ä/Ây&'tì€ÜÈèÁ¢D-,ŒÀ?&e#ñ|\g,îÍ;ÜZ]FXF‘Û!iAžINË«CÓ1¡·Å¼ËŸ¸.º¶-e7!žਣá«T€ÃÝ{àŒŠYŠ´3›•~>‘’Ü™r 72þË‚)\·¦ÝídÑ6†W’p¤¹F£¬¬ÁýNGÄþÍrtÁÿÑŒol)-£ŠIDoN•Ù¿k‰ÿ‰.qÀo¿W­'mº+ß[³[ú ,hŒ¢HB~/urà²0 §È",¤2i†ÜÑ^FŽ$‘@ òôË+~Åpdú­8¾’ ‚h‘\}dª•¾  îÊ ü,½:|IÇöùe†UèÂ0ßÍ]®-íçž§«Îí J qtaByŠ~ÏÂßDUŸôÉ£A+Õ­ƒ[úÂqÁ*Êò%]Š© ⃖™H60\L¥—‹ó!TÈv^*?`ÖŸëe€´•úeš†¾›ÜÇ·. UOEø×âuLò Ôä&Óe.b¬‹ZòR¥xTíØãÂÇd8–3gëÀB£­¥GWf§sü­–uæÀî‹0ѲªËîT²¨û"ˆ¯ÚÊ¥ÏvÜgm–Ø I/˜ XˆR UO„°å9ÿ''Ý0Ä” õç@ŸiQM+šžKJìÿ“ûrcn€­ÅôhÁW+wé ÑwbGo§!Ê,†æÑiwê™.&gˆG"Ïn•ªóQÊ:š†£âSñq\@uesµ=Z9¤LïÜÉ$Íö*oÙ@kñü?ð8qÑ?ÕDÎÞôH ½ú¼²»QÈ Õa¨Ž¦¾?F|‹(sjÖöÞHÝ¡RÑÌ$¬Õ(ä U¸Po¸Ÿk âc±DOã’‹™SEU$¢€ Z@Aø–¿j”ÙWþ:óAHREšè˜„ˆÊ%(x·+…â)¯6N_þÂüYdGFó)–š$úäÏ(Vx@†Üs&99xåSÜ{Û#·Áh¦5 2¹dðñ©4;ƒöò¹rd9”ªC,~›²ÔEXä ¯&çZWÁë·òåµÎ˜Þ‰³¹ºº¿…A.ЭWxÔµýŸõqœ@ÞÆ’ÍÄr\]0ƒ˜ñ5 Ö-ùµû'ý‹dØ[dÎé}¼l[š‚ìŒACöU˜Wˆ#åþÇ&×H›9%šR8 9„VÒTqaNnJ×ân%ñ4÷'}Ó”Ç3‚ Ê#¡SºîÔØûå#vä –ôº¹žˆÜ>Gmë_šœ˜;š„ñÖ4 NeV½¾?,²%®•ä…½5P9DƒuÜüü2= f`‹/*9oAPzïóÉØò[)HÄ}=7qÛ­hwî7(±(¹ðâòS‹‚Í×f$‚GN¹Tv-§’€>žûà9©)§ÄI#nÿË“—ÔÀW .m²(‰…A@Æ• ¥’Ãã5ŠëYc2Ít£÷j¡£ ýë|uøE ÉÆ]-B¼Ý»;›§F…ü—Ù©A×’¥ýlŒ†ätel¦ñJ÷ðÄîèðq`¨B±!yÞîËþ¾J$Q=ìNæ•až·¸žiàà²:ütjJu<‹õÈdÌJ%XJ$·ô•8Á…-Ên<~Óbv*9 IJ(¢5,”‰~"¢6¢×r[¿|‘ÞØòR…}]á*¼™=3ñB¬y! ?ì¿íäÎß>]ëžYâ³·ºU´“3Íé€üR`(¬:‡FôÊG«­–X§›¸ZH™(ËÄ‚90? >Ë’Äî§é´7¾¯ ëB …kT?³ã“èÖy£µHc»i^@L û™Õ¾Qñ5(hËáþVW‹fì»­Kìob<ˆ²ºCøÇ%&iQûÏIÿäžJFíŒcTÔ¶òF¼]¢åpôÃ×ãSPOcðÿÁcvƈBéZR6£{\“t«õ›%§ÁU(@}þÚòaÇ“ôƒ_Ñ—ãú)„l‘ÒNa1ÝÆíŠœæ·4$ák¿Àþìÿ6Uɳïc³Ù¬«tV`$ôiÌ£zlU«°¨T„ÿ±Ì¡-¿ÎqÌ~äÇ”¢ö[PÆb`(T®Ò@~ÿìŒÇ¡ÍºÕ4çôåŠ&¨‘ÃM 0øØò£-G@SâßAµ®3½+]˜âW ¢A0OL*> î½y?ù9”Ë`ë8¿u;[ò±ê¬*‰cOõ|8&yZÀsBÛª¹r1¬d– P Ð/Úè2RèÆ!H\Ç[t+rz}>É*Jö2Dy"üûÕmеò[£z#Ó;T(h}Ôqjÿ.2>’õ]E$’?…”±@.æ_ s`Äh–y7½VEQj±„fe&²Äoâ~<üs+>A ̰ÙÇ0Ö’1âÒLVœPWù—ìò_ò[ ù±Jè${}Ù ÕY_—ìÿ.14VCd ÌÅ t›ÓhÉ =A5t âØ“Ëìÿ«’ˆº,dy…Ð5Ä0•i‘Q4U¹<,FÌ›rOÙø—$j¿ÀÏÜœ¤Ja¶ ,hCzC8Rµë¶QÕ³£WÍ'¥làrEF Nܹwu?k‹xce2; a»{Bë$LÜDÉ#« F²°ïË–Zccý+Uî>(Ȥž= ÔLežˆªÀ)©j*Sb§‹!1ëÙž3éÝCQ‘Y-œ' ¥CzÉVäËð)ßnÔâ¿1 JÉf¹Óàõ¢ƒÔš'+ -!áNMÓŠ¿.Í’ˆTy/!·4æÎÔÆ“_«+·Cñ¦Ä×âZÛö²©ÊÃdFè]J1&—*FÞ«Éz +MúŸµUÆH{ÙO’Ôµ–â„¢,ƒƒ± NZ7ÃÜrÿc’«QîQÒm‹kL¬3¨ôãP s,ÝýòÉÃñc©^úÖa,¢„+¬ŸÜµÙ~/!ÊCu!jEÓ‘´°A)?òZƒÞÅrC›6hz_W‘BrZEÀ%`­ËnÔ¯Ùûx?‹æÈ}*Áé4EK,MFÅ(Ü ëSOòrø¯6b¯j¦9-PÖIæê%©Pz‹írÊÒCa'ˆÙak¹™Ô¯ÕÏN5¨@jÀŽ»”9Ln©{ÈéiQ’f`XQ€+RTÙm™ÊÆÇ(”_—ø¿ÖGX‰If‘À£S¹ý“±\†s˹qsA J™-à BGc*\Üo\ç¿zÈ&ºÌ°.™ ®Js „ÙÏzq®ÕðÌx]7¥+y-×#NˆÐ± * òe´ÇþiËÇ&ƒÍ&Ô:úiÈ—$qf$òG*;qMY öøz÷1—YyÌ’ADâ v¨ºÕ©–Ù¬R®“õ´”õTW¾×BÇöEHþlrr(‡4ÁUày#%…)3×tˆÿ'pܳòrG4>£ÎÚéJJ9"–øö"3BÆ») Ôé–cÜ0˱BµÅ¼sµÁõÇ(Æ:·/YþT{äÀ5_K]×"?§jÜ$"np¨ -AOÛQßùqæ>*‰e{KIž4B³ QRXˆÕŠîkþ©Æ·?ÕH6½¨$ˆ–‹,rPÍ#É/ÄÌE~'áø˜ŸÚÉcæ}Ë“P½†ö+اš#ñÆb2 TŠNÛS“œMĆ©X!^iVIV1¼‘Èà–©UÞ§ìŽ8­N餗K¦ å^QÐ’CÃâ5øOÅöÜ|?µ˜¼>§&ì%mkKˆÔº3OñȼǦì²PƤ ü?ËÇ/'fš¥­j>ª©ðÅ,¬Ì“?+éÑÅ)UåÃ=÷è±®·1E$ÐÅ*ÆbrI¯¦OÃCQÑxÐá;îPDn‹%³Ä&€;«/¤IŒ­}2jüjJÖ¦™NXwn }ÄQ˪]»3ÅŽ0D jìsÓn\r`Ô¼±;Èû•¯çb ÊèUZhŸŠ•ª- e—þ%Ðy0;n—Ouj°Û$)7ï¢_\1N"%˜‚G"¿ßg-€ÞÚæ©[Ù©ÒG +zŽõV/W¼±1°¾’ÛHe13Y=e@(OÀM8…EZmüßÍ‘‘±t˜Š("b{ˆÔ)@ª¢¢€G1ÈÚ¯ŒŸñ¶ZlD›Ý„hÉ1’(îÜÀO ŠÎ_ 4^û}žG)¡þ™´‹?%ºš‡¶3»³JªÃƒOV:-ÿTä`h€™ Š]rKCn‘’DezìXFy§">Ñi[.ˆ!ªD´ÿHˆ8/:ˆý²*+Sö†HrDŸÿÒŽ<1ÍÄšu›O¼j.¢p¼KHßfŠEï GÛ_îß 9³'ÓîA[]Zú-§É -Ì‹Î7šÇåÈ~"‹ðÓ%1×£ò¥+«Ë‹6[äâïDõX9,> Çmù/ÃþVYÍS¾iÊ[Ú}Vèz`H.#–`UTL¤ÝNêÜ×þ (;ñ½ ¤ŽvBƒš\„¡!øZ»Õ¹ÃdÍXokýh˜·hÜ›0%DÐËzl75ø¿ÊȽ÷²‰Ú–ê–ó¤-jÁå·ˆò…ö©YT2s#Ãt§ú¹(ý¬e’çç-‰†/ˆIbd9Ð1¯.?Ãü­‰;ïÞ±l…VŽHÐJ…Þ¼ø“S¨À>ËñåÇíd‹¦º£ì -¼fƒ€e µ­ôßý\§ 6[àG \}GwÁG¤]Ós@ëǧ쓗[´ÈôLïÉ•­²lî_˜ø915%¿iU‚ñʱ»nCÉê¹¼§¦†â´ {|‡/³’ß„±±ÄÝ­º›f†Ž' çn0¬eòŸåûYl¾¦»ÛdTLÏ 7«ã(hô5`¾›ìŒ«&ü»Ùc=ýËl_Ó±™„Ä…f¼ÿd|4øpdF̱žeCOhîݽI^OQTÖ¯ÐxíO³’ŸÒÆÔ­V+g¹•ÈánJ„—?ÅûC"MÐeÊ×zðÈ… ‰b…½YœÔ(fS½çfýœ²1`KW3YÍzòȦR3 ̃˜©ãOµ€]|VÅîžHLw—¯é$q¥OÀw$Ä·ì󝨸2®áæÜ ÙC‹hÞ¸…©nü’wçðÎÀ´¼~”Îû±¶[5܉÷\œ—V1Æ6œÑŸ—Ú¯ÚÉDo]ZÏ+X²B·ž‹F¡Ô‰eŒ˜$Žô!Я’:ÞQ\\ž§%–7ýŸT*iȱâNS>áѲ<íÈT™h†8"T*Êyä$Ur3&Q;%ö÷Vä@dj3ÊÌ`’Š} 6’§í޵ø²Ë, ÆþÆ9ž)d2Qª’à ~ÉæÆ¼~ÖÆR12ŒeºÉ ç4þ›<нájSMÇ!Üb̉RA!H}GTæG&"¬§¹ÿ[#í"GëÆÍ³¬LàŽ'ˆ ­NÞ§B~æÈD›ø3—&æÍ"`žJ@ Ïs¿ÚåŠiDK$·×,ŠI"R[í…w¯Â7Ã[w¡š)dä­ðf b *7$ƒá–taÕ1n,*Fj9 PtÛü¢½r5²P ËpÆ”_„RŸ «ü>y1Ì0½ŠãeæR5u,ä– :Ôûä£AŒ›¸&KVi%%Û›}¤€¬+Õzdõ3½‹§jé¨0 ౨#eß½êE½èž3@cš9"ÐñŠ1RÜŽÝGa¹ÃµW›MÛw ,ÑRV,®´” …@âþ|-•ãêYÏ ê2D.bõf-êʼiÉFäPÿ•û9CæË!ù!§Dm*߈¢¤ ä(¼M¾Ÿ‹%u%«‹rÜ[[¤Q4¼L(²^U'ìì:QÍq€³h™èºK˜bŠèËTy–R¬yÑœSm•êi“1äÇ‹›vomµÊ¢þðGÇÕ©äÊàüOÃE'—,„¬›él¢@ ÷ÛB;(ÁõÀ òff£øíñ6A=ìæ(€¢@*ô,B€•e*òuåJü\Ü[]©Ï8«Ç*™`µ‰K³»äO•íüÙlzWV³j‘2ÍkÄqGIÞzoD!É+Jn¡ÿÈn˜ ±ÐÿÑ¢d•¤Ú­M¿káÊ@²ØNÍj3ZÖ7!yɃÅíÈÖ•hmð`‡TÉH]Z›I™f^"Bé(£s@@äWo²9vý¬™&ù5(®’öÖê)~®Äsuiô % …Vø–¢Ÿ2•„Ø)3zwÂb’R­ ¤šµRWâc³²ÄŠƒkí`¹õbˆ y¬”Y¸ªÓ§,„ŽÖÊ4š"CõC,Q¦OQ%^,̬jPÐíÇÓû4ø?Ù`&©”G4§,Ñi@‡i.-VŒ’9Ü“Më·,8Ǩ{Ö|•eŽwµ•[Ó ¤HGƒ…b‡ÚÆØÉ ¼±k?Z æœÙ(8¨~Eƒ˫q²¹i£aÕ^åH¹ž9Jz`ÊU$p dãñ VŸåíœö4²êÙÑA,³zÈ«áZ)Ø›ÆØÆ‰c+jqhíä`yúŠnd¹ 7F |M]öÃ>k¥­1 w1ü+ HX‰Àb VzòMMö²säÂ'Ô¶ÖH丷™¥,d(šrT†k–Ê«‘ C>¡CV‚¼Is"ÊåÐH«Z„4©Õ61oPn¨OÆÛRŠiÜýšå>²ß^”’[4¼RÔrŒÃ¬$*)*U”ÐmÉ—›7ù?,H½”Ú„¤²’î s«(£üÜs#â'¾ ˜‰nšé °¬Å92ÉÄ¡ŒqËâ Õ Bœ©Ë)Èx›á²Vg»Ô([êé:,ÿ4ëÆ~ÆL ŒPM’‡iÇÄ·Rº¤P²É £íZ‡óÐ|#í}Œ™òk½ÈÌ“I+24#€T寴©U_‰¿—,Ûf»UIifÂ*óåq– reÝëA^• ÿ€lVÑ2þ¦‘pV.Z6©4Ž:(¢þÍIø± sHîïDÜ[:™6fxâŒM Š ­Wæ¹H<›S·9G,­é,µ(UkÁ¸Ô)"¬k†ú"··jð'éˆø9b±ÿxá%Z¼×õï‡*\€sw¢’«³»ÇE2,dqp9” ½jÏÓöyc×’“²œJ«$r¹ô–FTõ^´U?õ<)’—$Dú­ óÕYäef ¼ˆÝ'á>0?k%?¡æœ]M ÕåÔZ‰£UR•¹}¦âÇ(ŽÔ{Ám?¥Ï(x§ñúÓ<ÅÀT ªËN\«€cÜ“@”›UibŽ3X$@ÊÈ¥KJÁ‹ Ó•~å÷ÞÓîn4%­˜—‹…õºUÚ½öðW4ß'ÿÓŽÛÇRÈ… + Œ±dXØqøj:P†ÿWü¬ãº[×l¯z'N6òFWÑb É@À¸£oJG_ò¸ä#Lçh}kT¿·Žð‚FÍY&IôOÚÿ'K«ÄE±–ÖækkØÀµG öAñüã\0•îÆp­º+I[už­íHGÆ Å¹W?ê÷Èw³ˆÚÒß¬Û Ò§àd/4#£$‡¬dT·/Ú¯Ùl³‡f¢wDC}5Ä6†sIlnÎT šüMü…K0jäDEÿX6J[UÖÍcêX¼ÑÝ-¡&ÉÁøeZP'í ¹ða„×ûXÖÔÝ›??…ŠL ¼@ÊÄSšŠmñFkÏ*™¦ÈoïBc’â9ªë‹QËžá©AÈ/Ùÿe“Þ˜meY­ßÓ†0Òº¬vð³}¾?"€mOù§#w͘·’„ÜIë œŠ®ŽÌSÕ.Çn¼‘k–ÊÚ¥½Ò+S´¸k†A²©W±§$r SËíe0Ù¶jrÚ½ÝäIU ñ¨ @ܧn3¶HlÊ]7‹ ¼C«}ŸˆŠ»Su®ZX#,­ä’ÆH`–1!pªä׌ ©ßj•Uý¬¯'0K<{‚©hQá¾Fu™™C3q¨5Ý€þm«ûX䓌óRÒ-ãŽWc$LâP­Ë‘;ßOù2›Æ7E_Z[ŠjÒGY-د%^'Žàuä~,†9e· ½’õ0YX•™Ù¾¹!"¯ÆT6ÀîV?dY?Š­ûÔ¬&°[‰%ºY&‘¢%׈V¿ÄmÅâXÊêƒî™<Œ4ˆ¤ V’aÁê4u!/ûyQ?pm£ïA[]­Õ½¤c(쎊H@wåV;ssþêì¦XbCX•®{…úÀ†Þû¶bd‘ÙE:@E¢à;\TßAÑ]%·€Ò2ˆØKñz”o²h~ÖDÙH¡ïFZI,vË«—ÀgQÊ(¥Go„ˆdf7òeJ“Ëõ‹îe¡ÈʼO.$Òµý® ˆæÏ¢ ú;é-‚@©õ‚±øco‰XÅS‰ûYm“5ëÅq9“âtXê9¹kñ:§f?µ“Ý­Žá%œ²ÅÆ ©f2w ŸÚÈ×¥»6«R´‚5Šà/*Ò±ý®Uëö¶ÿcËïäšÛeú³E%¤ªÅ,J\¨¥~Ûm½+ÕqÆ Ó#ÉÖõEi"F>‘´&’}žUÿ(Á­†^k¾áÝdõBªð~aÓ‹Ëÿ'ŸìÙfÉ a"™ÛAÆŠ^ÍÉi#%ÈP ¿ÂGQû#+² ÒŽËm!ŠI€’%Yœp˜×s×4ëí“‘Ù¬ ÷[zé d\st ²Íðþñ8ÕIPM”=ð¸e=”,õCdö÷,B`’˜Ç%ôeøw€]ÿÖÆP³^H„«p‹‚ÒQòÁqÜiÓ1‚:þñá“vU^…P­ÙñÃC†ÊÕAt¬=AèÑÑË! HªÕx²ôþÖB“Õ×¾·ÔUábaSêú2“ýòW¿_øl®'zg )LÕâŒLqzeTGËí¤UH¨b2FD1®%£ãˆI N Èµ`ÜAYV(¹mŒE”¶DZÚN¶ÎÜ‚ œÊÉÈËíUÆëƒ!.1ºŒÏ‘ž6‹Ô¡":ö ø‚ÔrÄôPƒ–ÊXí­î#™ˆôÈ  í@ße=òÀw ÷0=ákE0ž/YÑQ"r%O2ÝíuÂ’ŒÔâ•Y¤.ž“ɤ‚$@jNßÂÜy³•âîlÈ·Y†9¤Ä±ñ1†~|É4ص¦õý¦ÁVœ‚ÂamonÑÇYJ|@ 4«ËímöGÅþW,¦dÛl¤ª]=g™=à ò‰þ$;0±?±þH̘ʾ 2ÿœ‡¿½µ¹–BAm#*  ð*’MûdŃe¬î¶rY;YA5ve-^/]Joð\„‰Y6[yèjü›ì´ì†åŽÞ¨PŸ§ñž;ü?µ‘ÅÂ+¹–I‹id…"{—IZ“| ÍI)¹¡U§?1’­¸Xßñ-Š^pðGIwH¹3/ÃíE_³€š+VŠùJ ¯ÕÕŠO‹NCm“sÅG[~Ö4wïdkà˜¹ ¾”q# ‰—‘+Zzd’´ý¡ö~,§£gU“ý5Ò3#@ÁÜ!*yT úжÕ W½H¥ó~‘ vĬv÷H‹ CqÙdT¨é_ÛoÛËà#Câqåv}ɫܘ£MiE^ï¿ürNNh8Þà¸X{©dø€;ÑwíáAðþÖX¶¢œ:ÛÛ ÕD)J¿CÀnzÛŸüVh’=ì£t«¢ÃuêÅÅ3é0cðº×‘R¬ x©g%”ŠaŽín²ÏªÄP?ÂÄ%wbèÔ,)PMµÁ-¢Yó!ª¿û“WY@¡¨"´,³/,Ž?¡–AêkUžK­0]’?ZU–&(!œšÿ’žÊá†Ó®kÑ[C<…Ì’†ar ¬ìhêá €u©ªœŽq@# ‰’^#uy1Î[R¡Å~*ñ§!]ÏÏ-FMu4¥D6ÇÆŽ­B¡EMù©ÉJOwè …þ%rR<ÅlÖ=ý«-oí&WGS Eª‘ ø”oBFN¨ögÉÿÔÞDöZ”vÊVâÞPðTÔºDÆ¿gfed?gŽqÃp|ž¾ªAt‘ÝGúЗ–x\HY‰Pô'ù œG%(oF9mÁ R –hßfF!öU¿k%ëɬßDÌMs:ÉháL–äXò¢Š­?› £ÿÁd|Ù’n‘Ös yca$pDܽRÁ[…H }2ôÊAß½´ŽãIDKpuÄoÆ¥ÖUZr“§¦c$ð׫qËè›h6&)8Ž+k¤œE1úÇØx\tøÃÇØ· €o½'°ºŠ9¯¬¹Ïk,R:qáðÉöJ5OVC_øŽdLmw÷-ÚÁüq&1 쥷 hËNjÀRžŽßñ®R%ê¶Á©Cë‚[$iݾ§0¨”€ìD(¥GÙeæ@8}Ü ¯r®¢Ñ„,¾¬ÛÆ&Œ‡æ¨pâ© ñ`PÊU±Bú%µ) ”’7›’üT¯¿‡ù²]ýüÑZ©iŒrµ‚GÉØt#±Q±:×+mŸ …õÜOn ”H¨0¢+*– 2Ô(ãöÓý’å Y;¨X,1G$dòIÞvëSÉé!­~È»ÿ'%ßÀ1« ±A§\I ²(È6­:{0¯\Œ…˜šNÞáÚÂs𫇤Aã¾ço™ûX2 Âq‘:`†)äbˆˆ‘äj¤T§Û#šÙ0çkµÙI"½Ub¯*yñS_øÓ#Ž=ì§+äƒGO®ˆb2œî: þÓ‹ŽX~–êAÀêಂÍÙ §%PIbGó3t9aÙ€ßtÂé‘tû9ä…d™yúlƤú›='á9$È*«§Š»©[aðÛ)?lŽ\ÈëñÃo‹ 7d( £–³ÜÈÑŽ!—«rì»Ù›áƹ ŠšØI,L©é$P,y($žÿ³ö²=P´mÌs²¤TŠ>Q8¤d±Ü´þ^[òž‹Íª~·‚9ƒr>™Üqб®ËÇìí‘$‚Ìn¥=â;×ÕtŽõuPj¥WpÔî­’`ÈîÖžJLâQ@®§’mUQBHø[Ÿòáɽ{‘Lœ„þš’ªG';š°?Ëö²¤óQ/ Xþê51õ ¨wä±Äj¬¨—¥%–&U%My;¶ÝW䨶1B®àPä½w \…lÙ{¥â57`ÂÄP ÆÕäw-î?g,þ³Íu ?X˜ÅRUªìÇz‚ŠwÛ ª@»uÇÚõ8†älj?*½Õ8"YÃVpÕPñðRß !ÍíS~1ÑZ†·ôÝ«éªPûq*¤vßOùY)6Är_u/¥§Bˆ6¨ið•=Nÿ³þND •²;Eg:ÚÆBZOÞPnê6Ú˜4ŽH‹)AE^lü»w#©ñÈä²S`ÝÄŽÅ’¡£ykJ Ó·-ðDS"mfYmîÉÜ w-R}ÅLº· WÍd/PŽ6gØÔŽ*ÌOn› OrÕWQXö8–NcIjM@«^¿^˜ã&¯ Dã½"ÞhRyî‰=hÊGC´jÙÿcÿ€Û=v²~íyÆJP’)Wc]†æœ¿glØãsrÒ¢ªzÒúªŒO 4 VEš¥å¹™dy ¤Õƒ/n×%µŒJH°–X=̶«!‹ÛÉõ{‚¤­WÔÇÆrÙÇÕïõ"›œ*αÉ„ÝG½Nâ¿ä0Ä1¥XŒ–-Ê©SDõ¿xxA*ôý€Üÿ›B‹L"NW +„U’Œ¯M‘Žãäµðû9\Í3†íß\´–p+ÉhÞ†Þ€Œ7øÿlrìßepCÜ™o×e-9ŠÙ)¼qG%Zh€ãñÄRŽáéû9,Â¥aŽ/¦‹^cEµ´7â^vÐ*³¸@Y• v¡§=ˆå‡O¹£×eÌ6°‰ŽhžRñÊhÜ’ˆ]Y(6=‹.ÿ·•‚v%J^K©£#wŠ rPŽª£×ubL–×ÜRc÷+Z\C%ÃÏ$£ë ‰ë[·Â\ïíñdø¿•ry&'4 ¡ÚÞóÐfhaG }ž\ZªËN½hßÍ“æA=@aÊÀèJ3L(´‘°Ï-v ¨õHíþNC#<|þD-o+°J0R?´¤€¿jº®Jí$4 J½;5õ[:þ˜šÑ¤icX£LvusR t©ø/ÙÉc›÷®C½7s²^M#õÛ;¼AGå·Ù<Ú‡ù¾ˆ;2—7EÎ[˜cz³q‰Ð[ÐW¡ZS“³‘)@Ø,,æ9$y®œÍðWáâ+Òj¹nS·À0Æ;щ³-«ÄNé „tàÍP)J7 —*‘Üû›åï_"E-„Î~!1f¥@¤“ˆ øž«€ý@y$}6¡$óÄðJi#²¤EBþð1ZíÜ÷É¡(îˆSÔõ 9u#fÚ»¨ìy9aaÿÕ‹Èc»Óå–EJqâK)<ºþÇjçJž¸“V˜4ðsmt¼Ã²Mip>.vxú>¬`p'áä˜#|6:2<7GªÊÙ–xÊ7êáX"Ð-OÛ¨è§âé†RÙ„cº½ÄV/ª,ð»[HT3ÇqôY(dý¥·ÇI2ËÍsD—Xø=BTPšo´£íd ÎK-p¬Ò¡.Ä($«l)Ýr|šÎê¦é ¼úÒ;Å,ÒíÛä•zÖíK€ÈÅ~ÇN”jS>hI‹©Y€i'BCÒ”aJ~,j`yÚ’M"Îd•”ÄuìAöS†¶bêóÆ$`8±MÍÒˆ@ý'âÁ (k£é–iT¢È¼T1Øê÷Ü®Hy#“Mê}U‚N B¤ ‹¦Ý^óôb©f  HE }¡ï¶Dse/¥ޱÙqãĵZšrÜ>y"7@;#,Ô‚+•FV ¯F ;ý¯£!.iŠœ°DíËšHªŒL‡aÈ’Wå\6BÒ%„XIO‹ÔeB\ʃ‘ø·ÙþlžöÂön 5¼Äe«·SRh:ni\{Hè´=ÿªò|½deûCcÄií’;EWË, œY)"ÆUäîI¯zžçéºw•=w1•B´ïÄŠ üOì൤\í¹•JðV î¨FÊþoøŽ²Jž§$1$¨¬òÐÆEM _°Fßóc›PDh®¯Z"›ŒÈÀl]i^>  ‘ä ǨT¼k[™–Kxý’Œñ0¨G+ûÅ5ÍSÈ}¤l–àÓDZ"à —ŒL¥#‘€ ¨ÛuVþï I½™§wiPƶêFà/I. |$Ú¬(W†ÑŒJ€!ŒÈ«VÞ0ËPG…>Ïòã[ ÖÂ!Ki@bÀ&Tý–­Azİț ±VY#¸³¸Ó sŽHä1‚zs²Š‹‹/$ÈA¾äƒ{)iBÖÐÛ oTÆ¥„ŸmÚ1éš‘Uã±ÿ…Ç,ù#4!c¸ ?M î~=c§ÃþNN}S‹ÏYtcñÄœ8·n€W(Çɰ})Lír|c“‹/”5I¯÷kô4Yp­šî˜éqE#±…Ý!œ¨ÊIS³i·?ÈeØ'å;+IQø (ã•TšíZõªîߢÎUn‘n7AŠHò:2ìÉJŽý>É8òÍVæW tˆòRæ.L 㿊šý£ÿጶ¯$÷£-R@·j‘"¸“âŒÈüv<¹rÞ ¯û%|¯%lÏTF¹ÄYHʪ¾4 L€ "ƒné^C#›9 ’èêm–/^Y[ÕS@*£áu?³ö—'[±% AÍ8˜¤`ôaFbÎGûþÖH“»X òwƒ¯ÂžMAÄÆ Z ëO±OöY+ÝHÙ #"K'­$ êZ°ª,jJ£nRÕþl¬ßÚÎ<þ =éôïሳ+$EUvÜÔŠÖ›¶ëþÇ-Ä}%Fê‘—["…F‡.:ü(8€Oí)8“b˜ºøÖY­ÂOQï´qSXÅx«æø¿Ù6˜Ä#oãEE¤´·"È%Z‰±éUøY@Ê€Ûß&à~ä„·Ù‚¿¾švIä´¨ûMû?óNY*òkÒ…ÛÓV+Rd–b£~HãËqÔŸö8ìÑïb–×%Ã@ÆV_Œ$uZWvþ!#CfP«î-,æ2¥%S$É,ÉÌÕ¸IAʼiñd%¹m†Á.Y¬ôøK4n ”í¹äU˜~¿XHâ>özBI™1ì_î·PÀ/ÂO‹GN¹`¨·ÄsÛC Ï-¸–YUš (é¸÷ÿe€Ç}ú­÷6Y’ÖÍŠŠÈ²K!"ƒˆ÷ï¾ÌûÕ|ò)ŽÝG<Üëâ°¡Š¨?µ¿\¾,œŽÖÆ#zU¿ThØ—p’3•¶,¤5h¼yT|A²¨òm#vËpîáHDbÊôQh܉§~œpÄXc"ïôh/䔯奋÷¤–_I“qðذãǾj@¶¥iQ&â{€òº°åÅj@‡u pr±Ñ‘Ýb#‹çhßš¬!S©  VŠ?™²'aºÉS°°µbÒ 8Q: ð! .Çö¸þÖK,½^V¸ã²c§ØËMð«D‹ (hOŠGòü?ñ,®sæÌDìŠXÒÑÈ)Þ:’9ªÎJ¥?—€§/‡'^¯r?… × ðYÛ¤á–Õfø9q(ìÁ«QR܉_Oö²B;ûËQ’‹ýÇËâ2Ç2!¨u4*Ô"¤O„ ìŠÝÿÖ†iÊ‘N#rì3²ò© ‚ýOóärGÉê 9ŽòŽM.n³§ÃBWŠ\…öÊãd6JDX5´—–41Ý@ÓK%î€Kæâ~Òã!±ò+¸óYmkê¹h€V€‚á£5- J©øzd¬Õ"·Ù8²xf„Ú¸£Ïò6 Í_õY“Ì)µÔO:™Mbe(Á!Èî¨Â74eÉÍ £nØGÄQ9$ýÉJ½> A—±Ê w¶ÙòS†E2Û—vƒÄÒRˆ´ÜnO&y±Ñ …mnapÐÉÅC‚=@¼y;W—ÃþSa?Wz#É"–mnU‚‚ˆW‰ªÛ’›í¯í`‘²Ê#jP‚݆Ÿq<îË!‚”cR$÷8L»˜ˆí»zt² ¬Cã) ÇãjËjq >×í6 ö¬I ʬ—PËœƒJËÌ~×ìÕöø¸ðã‘ABØ.¡Øª˜Š×í!p ôÛ–`9©As1ÅÎ@û©~ QªV¦ £—ÓâêZêÝ5ÀúóÐU¨ Z(ؽ~œŒAág)nˆOVQàddY::ÐR•©ð·üm€ÈºcVg‹ÛF3MZD”õ\ U¿i›þ"%I¡ïG]Ù5³,é?®Ä© …x*±<¹/‹%8ò\cÑN n$££ñŠ>/3³œy0$þ˸ÿ6F5Õ&ú5¥HÓ[ÝÞ:±õgxbõ Ò¸qìÆ¿pd»ñêg«tó‹¹ëOEQ‘HêUH݇ðŒP2²TtÈ 6våð½$ëUZ‚Ã}댤l’±ÒíUJ-¿@†®ì ‘^_:×àïü؃¹L…RØ35b·‡Úßp~˜›bÔ)¸ˆ¥=U ºƒ½ ¦‘7/ Ó,ˆÕ}–:’Ü«¶EK½fFjHË詯o“æÆE¨d‰æ #Ð!—€ZšÕh o¶S˜îÛˆso\š©ð¨«È 7CÁ~©Ú¿€Èã»¶Sä–Åmë >2Ušs»pXÈgméÛìþ¶]ÄÔme´Ê†Ýý@ì}^B£’“N5ñªüX+šß%Ïè½²¢·6’@À!B­GümûXw²ƒT)ËÛÊŒ*ÍÅ91©©cÃá¯ÙÊFØÖé%üö¿¥–5r³.?Íö°ä.äã—4mÅÔqhW àú†9>-É$©ý£ðýŸ|®½_Û(K‰4Û$Š2@¶ˆŠ¶ä7ZûïUËõúµHš *Ô3ÉéŽ(õŽÅª@,iNµÉ5›¤õ´·š(ýGæJih­Ì“öi–Hò÷ uVx®¸*P[Û±4‚©Àž&` 6ã】²€UaEŽâ/Å)¨ ÌU…[á>4ðøp“a#bvÒÞáåËÌÃP>-Øò¹×ö¿g1ùnév±õfˆU}IÍj‘q$,¿ Ä/ÚËMÕÌ.âÏy#,…dšåÄ%z2Ų¸'¢µ ÂhD"É%r†b)…}H•€nj!JÒŒO-²¹Ͻ¶¹ ®_ÒŽB®Þ¢–3••ІQ½Ÿõ²@Yªa檋ÃMw ÃÔŒz Px¹U Rà×þpKê¦P;Z:¬Ü$"8RAUj„%X}–Þ•+<›:¤ò4uýÛµꢠÈÌT>Â~ʶ_^£øîkè©è F"TD^´ª­jX|_jƒ{ø± T¥iØÀHd!®€¡ÜüGýRßý¯ÙÃÕÿ׊?+iä^Ú ÁHâÅTÜ{•eoö9ÈǽëyÑš‰•#W–@‹éª€ Añp,{ƒ¿ñq|¯s<ŽòôN÷¯f%¤Hé8¦;Škû"2Èáÿ'%“—/ÄXÀn€¼–æÚf”òYâ—‹B¨,x±=¸qÛ wD…Ó3Äÿ[ŽVõ-Ù]UD•?>}öYa'e÷FlÅö ¼…c Às#Õ§´Å×þ#‡&[¬€«BÞ̒Ƴ¤l¦@³o‰qO†Ÿ³NJßµËí`†Éžêð„EKxÇ÷à²ËØôt Þ•—,Ÿ’€÷µËU#f£Æ»ÉƃÓz¯Ã^«È|9wÑ•ì†6Ë-ĪAôC¢q.P…¯ù-˳ö²@µÝͼɨðÜ€NÇrªef;ñ_Ù¨ÄHp² ªÙÅ,ðJ>0ª|y)%Nû<‡Å‚袶DJÄÛÉé²À9õ%‘J©`FßÇ®B<÷l‘ôÚÈbpõ/é"ÆüJ‘ðÛšþ×ü,“Búœc¸ÜSÓ,²6ìá›`GÙä´­k–W&£Ã룣T†Ue'âÜ‘¾U-‹dy;WdƒOû$#°H¸·E~¿›ù¹rÈãܳžÁoÊ8ßÓe5II¥AqÈÓìò^9+›ŒvDHBi6röXãºæ HcÌm!¼¹ÉJ“±ÿY¾ÖËÿ²[ º@¸Kâ. ÍX¥aVvª#N5ëþ®Brlã5û!½‚$S‘†iÈZópOH¢ò퓉ôÙkõlè#Ÿë ÀV7õ+]¹ÉRAojö8$@ ˆäÝÄ,­ŏa ÕkOŠ´^½V¸¹Ÿ4˜ò càŸXŸ…†:í¿3B)â)\,|Õ`h丣–Ý‚±4Чm¿–¸ò æÛ ýÍkV­O_Çlê$#´©<…€ ñæ#u©ÉŽLe̪-"5UÙ•zmJ“ý˜žHneskJ²±Ûõ À•…HŠRÌU€*G#Aß·|!‰B3²EW(¼e`GÂEkM«\µ‡Dkñá°$tû[ ¥´n/\“hHøZJЦƒlœ:±’ãÕ1ÄœÔÜkNCñxŒ°SY´l²z‘€†¼Õ—˜Ø“Ò¾Ô÷Ê¢ÚRøÄ¥à™@­ÆQ^§§Åá“$nXvW‰™¾²ŠxÊÃÓäEOÂý?ápHì;™ºÒ9®Q¹(R¨ßjTôä¤y0#Ñ`t¶‚iŒl±×’G*š†î¿F.ÊIª úf¡q§Ü,­ MÄ.¬DCÛoÛSN¿L‚ Šœïêú^¸! 3J«Zì~šxe^æÂ§¨¨’Т–æ¥dæjÉR~ß0ã;¬†Ëtæc,¦?€ÉûèXÑ…%ûi¿ùUÊÃ4Úã”–JÊÖò+¬oAÈ)§ ¾Ï~*äÆáS+˜%M>7úªIø@ 🉅kßör»ÝzPv2Ìhƒ2$,®­Ëã`”ý–ÉɈL ¤‚ÆzIȲÀÄšƒ¥>Ëpf^9_¹Sõ^;©,$Œ¼:ãöIUŽ¢Ÿe€ë’—V¢jÉè;NGø+G 4P  ~¾9Y6dv*RÇ'ÖÊ *€ ¢r,¥…OÄ1éh<è)Ïð[Cñ‰F>•ãZ†ëµ?»ý¬œy–2.ITαNM W‘¡þfZÓ †ÅAä˜@ƒÖ`”n4h¤ÿ$ìÕüYA4ÝÒ‹çG¿œ(ãõzŽC ¯Çô—C—½«'4L§éxËŽ#¥‹Q·% Ôc–„QŽø×ŒŸ[d0ׄեHFZmɇÃUûXGÒ!ºì“›·RåÑU8Šl¢œ¨ ý¯ÙßP ;´UÉ-¥Ù*‘ÁYäz•/]ùw¡?o¨–dzkÍN i¤’Þ"ñ’2€¡W&t=pñP4ÀG’8Ëmy<æÞcõ¸äôãŽn"&Â+z„~ÅYÈÙÉCóDòúŠko­\Yh·š,ÖéU¸ybº*¦@Ì8±WZ|—Á‚r<Š#|ID ]M<íû¶SPR‘ýÈHÑf…å„×–N”Ž-rcVMÕK‘×r_‰û<²=(¶WPšM ë]'©mÂb EPñzòZöûM•‰YÙœ†Û¤vÚn\‰“Ö”ìêO ŽÇ-‘Ó”ÂÎÚé¢Ö;,s,’0âÕ jP~Èêßµ•Nu`E²ÚÐB%6Þ™Uw“' ¾æƒùG™,ÙVN €rS+€T’–*[æqRvLì&ŽiK+Uœ8'b8Št¯€>ÖBgfP«Y$¤Â7àc³1­ Žã•árø› Ù ‘¾•,^šÄæ"‰‡Ù©-ÐwlÈ•ñ|ZR¦š¡®m8ÑY…‘° NŸ³\Œ¹C˜_ziÍÄQ±‘âÛŽÜ…~Ö0Rå* è¶ñV&s" ,~H⟱Äí–U–«]EÅ•¡ ôuÜîreï¿^9LH·HŽFŠ‘¿)%,ï1V *«ü*iû5ì§dbBZsKÅNE’õ-C×mÖŸ2TxQ#R¥{«Yî/î„|¤”L²uªP—üŃ “r£,„h-B¥ÚjÔ5îìþÖKøØÃéEèäªÜ¨„HcŽ%B J­Ajÿ5:þÎW˜láæRÿRYàø}8=IŸaÉQ•jV¤òø·¦Yc2y'"i4{t`ˆ&ôø˜þ0~*©þCÿå5ëmБ‰#oœåvëSË‹-OííL¿„Ú !4òô šõd(Ž-Ù¨¨FÁŽÿý¬¯9 Ë4ÖàÆYYþAå Å SO^™ŽäõHQ,žDˆò g£»W–Çìñ§Že^Î5n¹Â$I+z¼LP Ñ›g©j¶zy©¿’u¢+ÑbœF¥Êþ×Â)ñG¿ìåY>¦èr-j‚Ú˜’â&a$bðV©¯Óü¸1›ºNA¾ég8WP ñ*fäÄØmÏírþl»™iUeú¿¤æ5yâ hGÙjlÙ÷ÈÝ„‘E Í kVô›‹:|[ƤÔmþ²¶ÙelX¦7¼ínj²8©’ìàíCû<k(â½¼›áAj–ñ‹äuW7"4²“@ž¡!xøe˜¤÷[ ƒÔ=ËÖ^㪪ÕÈ’Š!ºÿ’8äݯšûqÎúÈŒ%°ŒLIâÁ5`ÇÞŸg®öLy+\–†êgY ±…qº ¯Â¬EOÅüÍ€r}èG^¥¸”•õÙú€PÔê>Èä[åÉwµžŽ„Ü­Õ·/îP¼ÅÅPG Íx6FQ°SÉVÝcAqêL”‘GD:°nAéËÃNa0äUµ9is‰'UYQêÀÕ\ý ¢¢‚xÿ«€õíÞÎgo‚ùÙ‡Å'ÅÅH4¡Q¾ãn'–N#ïa2‡’%áè쾬Χ‘øvü“×'-C[-¨‚Y@¥Ùeu¢mد_Š™)s÷0&¤ ñÌì Dúq­h¼hG*øpû?Í„}Èý(«NK‹‡GyŠ€°¿Ùfjq@½¶ï‰h¹-mà†E+“)*Asn[ô§ÃL¤SiRÞÝKC @!%KÊ6uC'Ç× }¼²ùµ€‰¸¿/r·0Ö`ŠXÉȇaê •ø½:dz2<öè¾x"[h¢–SÕƒÓnUq%C}ì20½ÍlÊ}7@ß16“,'ý ¿§Ôä ì” ˜·‹-Ä=^L$OÜѶP¼q”/@²¢Y*;‘Óâ#*ɹø3Ç`*ÛÝFóÃfèE¹Œ»Ê)ÄQªBìyÍy6'Í>ªòK– ¿£Õ2†©©•ˆä)@ße¿ØåÜɯǥ‡@£+/£)%—÷d1vø‹|Àøq¶t±0ú¡”=Záƒ(ÝW~<¨)ñ¿ö—ìâåOGÿÐŽ#ººŽK“Æá½)9«šµAIUV§ÁŸÚÎuÆDý¬¢Ø©bÖ1"Û*ÉÆÇ‹È°þR6ùÿÀã”Xã»È ÖR¬qvusFßIÛ‘í”DÑÝÉ4FÉ3£ú%ÙyÂÅQÈ$Ô@¿ q¯ÇðfD{œbzôLe`4¸~®LÌUØ>ãÔj0èÛñû9XúÉfO§e–¶~¡02׌‰ð3ð*Ö„ݱ‘Ó«¦ËܹU>§8W~ ö›•@^¹ He¹QŠßÐÒUœ­ÅãøŽÍAǵ½2ü˜òŠˆe¸©"¿î‹Çë(ýÙ;Uœ´µo‚Ÿc%ulU´Ú«[Mo'.Üwä\5hjGÆ¿g ¦E†$]ÑÏÊòú¦@8†sðÆ¼”žT¥AøvQ‘;ôHØóS‰žú(æv…’(Q™¸“$Í]ìíß6®ÿìTKs¿âH»j%¤òEËÓAEvb¤Sá,+Ö„ñY6@fÅBiÂLR.”@Y[•*ä+×¹ XfŒK bÕ…¤d"€“Q¾Ýý°Vħ¹^ê5’êne$LW¡“ZÐl?ÖÈG£9n±$ŽXd!jæ¨6-ðõÞŸOùY-Ác²¹*ÍPžªq*ªk³|G~0•E'¤÷¤ñ©’´5]öÿ+™ve[¥òHƒœ„€9ÔƒSñnÿ‚ɆRÖN2+2¨j•$g¡ÿ+Ç äÍt5Ûa(¡…I¡ï‘fBdB®‰É£4.ÍJŠÐíãñ ²-eÓÇ–ÒF¼„i)(«ö…+ÛØát¥s$:’@CÓsü2² ìØÊ7L C%+ûÀE¡©ø@è‚v@L² QØñê]Sû;e±-E7ã@°~Ê  TŽ ô¯}²‘Õ¹ kõ’0“™pÑÍ)Çá=68r#X,SU“Ô¡2 ÁåB +å¯\$nÉlÑ}^Ñ n 2 v¥x§RvêÜ©äekyyVU0ƒ¿Â[¡ª³þ×ób¡d r¨eU(xñ?k”Eš»J…QÖµûY²IfÓ)&’3RkðÇ@¦µr¯ú¸ˆeÑJÁ *^Û~l@V<•FƇ¹£W'‘Œ…àšW[‚ez­E:×nTØá†Èžé«LZ†t&P¡ö¢:9mÑM8ºÿ²ÊëvÂv8RòÉãZÉÍÙhc#u£wëðäëbÀÂ#U·$†ÝÜÇ!g·evte±ˆ±a5$ Š*s£‰‹J¯:Žý\°MTsúêÞò~Lb@£CMÈþÕÁh¦U²2ÞHZ0Q 9£2Ô( îiþEOúÙD¢[a Õ-dmE¢Îžš³ËžÕ¦ÿ²9d±›ø.F¬LcSá>.UbÍ@B ¾ü«×‚äòIk‡Õ»w‹3O; ˆâ%cŠÌ ,¾-×Ð •’U/ tUç4ÀFK×e÷î?k!&™Ë`¯ukÒéÑĨV'ô“r9.çe'®þp@óL·¤<“ú:ˆ`9|\}¤·ÃZkÔ³ÿ±Ééa#êCC¡ q)•ŠÅ!«ì -°ýâ¨?XO4#FŽÁ£–ëàFŽ œM€øh§ìbgdX`#·5;۸ಜ3ºK ±Ž0i#‘ÑžŸg®F1¹2ÊR¡î æ^S«3¼“GVà)42ðæOöv?oO&H«×HÙ–C^ Ìšò©çOp¿ð9n/Í3ç^H[{¦äŽkD’> ð‘ökʧÛþáɳÍi,CJ™À@YÈâNâ•ý–Ûaö¸ås†p;,eŠßÑ>š75T~?h¾1ö¿ËÄY h®ˆ‰•¢=4B ¿%SAö¾Ðø‡ù_µ’h®ä|iéZÜ2p©´`šÆŒ»oZ†ß!)r¶p;¶ôt ŠAvâzÓŠ)·Ž1;”Èl†[e Ê {”er~Ðm˜öÀ`¼—öY²ù -ÈL`{§žÞ6A"! "CªÀæoÚÛáÊÈÏ{YÝ‹‹Å•8¢™TTÏ-…ExÔÀá‚eÕ *Ü‘"*Àò¯ª«!îÂ$VFê‘Ü}VÏ‹$‰9ñ•f ¬Õ=y ª?Ql?HMl ^›ÂÎ^T%d¸zTƒö¶‹Sþör,›N:䓨ˆã½©wçêÄA FÀÆiÜ· òoµ—}Mß!¼í²¸S꫊׈‰'ü®-þ¶GÒ-99Ò&ìÓË’C2Uu`ªUµØË—&ÁÏ"Çè[¤Ê’½à5bð+-U”4/·Åü•û?åc—¥Çõ%SBŸW·&Vev&.b¡JÚ®ý7\œz¢A:¹·tˆ»¦7·5$o½~Ðÿe”®ÛaôÒWgÄúaŠÕ„,ëḧÆ0èµ¥#oj| –0)Ë]GpòÈ‚Þs †µ B­½È¯û&ÌyF«Ì7ÄÝûÐW¼½R8q6ô‘{Ö3Eü¿æì²@ø°ŸÔPÑ»ÆÖÑÚÄ)(üB‚ §áøºŸ‹³“<‰ktc·)®gX‹*ó*6âX€hÜ:¶‰*—2(¹»HÀô¾0yqZ…GìÿÆßìr¸òç6ò¿‚ ì[e¨!¢>³ÿ:4ðÿ',ïj#’„a®-fi—ˆT‘[˜ %È·Ú¿ää¹IXVAjm¥‰Ô#2/§VâY9ÑV¬(>.X%Ì3ÒS[¥–[8m•˜DþšÊ«¬hUA'íý¯‡)Æ}VÛ!²O¨N¬LÞ¢)ã“Èqûµz|òÌ|šæ7Q¹Yšñך$Å£¡Øñ>'¥çü¬˜ªÙÒ¨g‘`Žä€å”•äÀ¯*#öG!–Ë›TFȈ„©n-fä¬åäzî¥ØÓí`'ªk’)'µv•¢ î̤¬`€ Ž mÕŽ 5¿s..äÞô©¹´K’V:0xÆ6Q°§oÚ\Æ Òuõb¿IißÖOˆ‚ÌcF*B€j“ö2ð,4rF»Ãuæ!X¤jÄñž? Iêßñ‘þ_ÄÝò°½µ  ¯H&£ã_S§Z„dcô’Ê\З‘$šmÅË0¦oNEBÊ…:ñjtÉÃbÄî eV>^j"ô«)'¨NÝÏOÚÈJ ƒ!-Ôãå#Auæ*>&V"•§EðǦéꃔFÖöÓ[ˆØ*ÀK,ËF j :Iˉ?ëäø½Dé"¶Ûɶ*ó¹,ž›ÈdHØòuPx´`þÖÅ¿äž$lÀsRšZš‡ë*M^¢ªA5Ù0‚w]ŸÿÑ@^+¨íäÚ8—Ö2 B§€5§Ä¬ß þdãœ}zIzÝì×·.Á"o(´@>¾ Ó¨ƒ±ÈÀ™’Tô놊Y¢šJ,²(I ׋€WñQ†uH…ÚÉ.Ù.•¥äm¤™@¥T­œªFûü?ì¿ÊÉ …Žæ'sE¨ØÜ<–­´DËê‡"†@Ÿ)¯C@28ä ß»þ<Êq l£û¡sÍȸ«·> Uhå9—N<¿Øá´W{p‹O«\[ÝÍɘ#Ž"(ä4Œ+Ô– ë¿üdÄžUÜÈGc}íY[F—Ÿ[à~®Ñ¯¯n/¼ø–áÔ³Wí}ž8 ¸yßû1?%ká0¬¼=@×Q©åO…xÀ¥WöwÈc—ª¼‹fHÔoÌ)[4kjËÈA<2ó£ Õ ×­iûKþV$ÙbiT=IJGH Šô­G!P?^‘fdZ±–8çY Wd£#˜ø²|T ÷â{d¥ï`=È˘&1ú€ Љ(jñ*iüŸdeQ“t£²ÚK‰&‹Ñ`ߺ`åw5SÇ…hý¬´Šiæ© ,ž ‡sMˆ v€öÌíñXóø.µŽ4‹Ó’ftîO!Ó·Ü·ù9d¥ÜÖæQ·r‰¢åJ›è€E‡Ã1À¤BÙ'/2¹hÛ€åˈ-Rvñþ\Ê«§y£þÑÖ&)Aœ2×s_‰Gó–ßl¬ï"Ù~•4ÛD†å'"CÌÈT“½:5®Þ?k+É;4ÙŠ4iÓB-nfºæÖę́QðšÐÐ(§û!ûY<‚èe„ ]ôS’xÅœ*ÒË!Ž.ÅÚ=vØöÂâ%L‡ í5¦‚ÚÖâq¡®§PTi]™b2n?o â $WúÊ$E’M¤¾’7¦AôÔ€ð«mÓˆ¯ cêÆDt^e¶f•'Œ5¼m¨o±Eø‰=û.ø Ð=V D[\ ÒÄQT’³7çÊ™˜W;a¹{6½£#Fc@Gïæøã šª!}‰ý“Üÿ6WçäØ9|ZŽ+u±Iߊƒ(D4Ø¥: øø, ›¦$lºÌ ¼*¡]ÁSá*äÍÈõU’kdŽj³É¼âàÖF©N ‚@ ä~þøÒHQµ”›ŠRèÑ–YÜÖ¢‡¦J|ØN` ˆŠ j¥E(jÇåû8‚’„á]˜µSƒ-w V»ÿ\‰ Ø!ØJa€„È·Zøa KqIÉ•*Ìʵn¿ 4§Ý†J9¢}'Ž'b;oÐ5ýŸžFÛ+d/§+=ÄjÁã¡E)°­OÓ“Ê•-YRBîd=Îû äú±è‰ HÖµy Ó·ìþ=r Ϋ$B9V«#òøTšñoÇæƒÉ ©"Ò-FS$•$5ø}©üÙ`®lGÊÄò*yGBà®çéâ?›*l½”-£3r]Tì@ *v5§ÅŒÖ8R3e$íÅe4R´å»xöí“<éˆäºíãaknÏýâ~ônFç‚…ÿ*§–J1êÄÉ,”’òê¶ác„ø…øhõ­2r÷³šÔ«ÔeãÅPB®ìù‰8X…ñ¼'ª†ó+&ë^M²Sµ?˜`69+ê,îYr0#ࢊ æÿ[ù°cK)öAéóVÛÕ Y™¸RŸ «·íV¿ëe™9Ó|­ {É •’O¶Õ«~ˆÃ¸D¢Œžu–Ûš7ï ~ñxý–4©Ì ÈG›"voJÿHYP+5ǫŖ¼ †ƒ¥Jÿ²Ã9U"1µ‘ cæÓÊdŠijýßiHþ8hP¤ofÖ²ÃIX–+…H¤?¦‘‰týå>ÖwMtU»ŠÖæYiHãž¼^Ÿ UkíÒ£!I”µh~¢¶ò+Ep=N.Ô5Ò¯MÛM¥Þ-0„ºt[ù¿pÛ]V”謀iAã„Jâ“ƤQò}]LÉ ýeX !@»Šöj•ðÿ2åe˜æƒfŽ5û¬Ü{‹zW}Šýœ˜¢X‘\“ORY!XB€Z°fø•>=«•LÕ[d:¡n}H®Ö‘K0dæÕ%—EAëÐñþ\œy1˜SX¯%´„¹¥Q…6øy«T~ŸHP%…*Ó|þÆ@‹" ’¥ê=µ½´i+9’nBB£á=28–yv ×2ÁÕ²F[ë* HH;ó%v5)Z`ˆ$Ñe*!8ͪÅè–h­¦yÌ´QOE RŒhÜäeUË*¢Aç_î˜_ªÇz+ëÉMs‹y#1u4øÄ‰RÇÂÙØrO‹(f¸ ÒýàO¶Û’F­xýšöÿW,êÏ%u6'P†±›ÔäUÍT…]œŽê[ââr$îfb ›‰ZêrîO)8»•¥9WrŠ´Ûp…»Qi>·2–á#5Ä‘ÆBДB©E>W–Gø3;—]­ªKq2Ò jAÛ€ xᕵ×4tE›L+¢Æå}@>%rOÄáf„Ñr2‘¶È€B[¸ê´™‘Ú7j0ødež üÿØä¨Ñ´XÚ—™}Qäy$%ÙZŒ-B:uû9Bí>f·ŒürÆ’ ]– -@V¿f¼¾f/vP4i}ZD³謒³1¨‚£¡ÈGvrB3´·bY tš'ø Ó¢Óvýž[|?Í–Å £ ™e(a,¥²0@3üÌ£âÀFÅ•î5³¢Ý$cŠsi~&­Uäâ¥Ê o·ÚÆ$mîNA¹R¦XÞ%SDUþñ±F¯Àš4„ìá7÷! ëZjÑÒ5¢3BYÛ}º7ËörȆïHæ‚.“£BÀšžCzöb7Ê&~æè~•6e–æé¤hÃÇ4|ØÌÕ‚œØv¡ãFÉÇhŠüz‘?¨¡,IÈv’D·%#]”:ò%)ðnÜéñeœöþ“Oš>Æ fi§1 W#ãRhÄ¥+^+Óö°Hì˜Û¾â—2qHý33€8±~\vû\kör¨ò¯{qKØúbÝg»f P§ˆé×ý\˜åmt È¦ØÕ9n…”1^^µT’Ú€S–J<ص¢ÒŒHaø"Ž5. † µñm^'Ž&tœ^4Êc‚Ý&Á3/VP92r]þË|;e<Éón>I-î÷A$#5QSQÇ¥zåÑ5ºÙ1ÜÝ$qú³ /5 0çò þ_æÉA JLWO·gd›×xUƒm€?. x¶ÿ³ûy‘ëåɪ[E4¸A%ã˜Èe–N‘ʲ˜x´/Sº6ÅX±éÇýVÊL·ÝœcéÙf—ú„’£„¬dLT‘Rp”v%¿êå²Þ-p°QÓ•fîÓÔ!âaB+Z0 ÷5ÈG“9ÖéÊc2Ã%(܃Ô:{vÿe‚fÂ`7QU¸ŽÖÜІd(z“XÙ¨ÿ»>p“º‘܉·™Þ@kÈÆÜhiOøoÈ7e’QÇJPŤ¹‹âf4 º€MOr´Étby_Uh¹©Œº–ç%܆!É#z~ÕHÈH²uˆVH¢POXÂГO³ËÜåÂ9Ò:"íäýúŠ=È;ãSöWŽÙP¥-aèþ§¡-2ƒñsØ0¯JL8Ë›n…cõ+Ú3ûÔ`TVµøE@#ß$ ɉØ-4k{f, XyíN=Ð五_¤*és8sÁ( ø™©Fރå7Èd2Æw[®úÀÅm\”§Ã½NÝ;ÿ­ƒ sNnå6VMF7pVEB„Rª@ T×ì·!C–NèµÇbˆ±½ýà÷jv,}ûíþ¶S1Q¶'ÔQórº†rBVR*JÖ¿Ž A9 •ÄÖóÞD}B"Ñε<”ÓìŠõÛŽÿÍ“ˆ¨ìÆFÊ]¤.^Dä¡Û€äÕ‡“Wo…ÙË%* VžCÅÙùQ¹*³µ^„Žrû[qâ£=›G¶y`SiÃǵ@,{2ánµ{+Oõgq(iZX’TP*|G‚’ÞËñþ˰9.Ç—š:Ð|hïÀª­ÄP ‹ ñxWü¬†BËRÑ­¤úõ¼w5¶dŠij1§£oð…#‘Á’ºy&6~Ô4мtfa»„•ytêÜAþ`8üXX›G[H}ÈU æ6dJ…tj(?Ãídf6gme¼SÄ‘%Û/«e ãîh¼Aߘ©Än¹‘_íj©o#//FŽW¥Kÿ5{Óìâ/Ÿ›‘q 0³²žJ¾¢”áJ©S»©¯Q•’@¦qÜÚxŒpƒÍvô—Ó´ê{Pmö°Çšd†·š ‰!¸(Sˆd >Žœ8€|8ý¯æl¸Š4Ò7Eé7Xá HÄ2¾ü¤nŒôèê€FBCbÈH·†4‚áVœ½U+Ô!'mØIÈGô3Ÿ4«VI$¸¸ Y¦b/ÊŸ vQâ>¾³D­¬¬Ñ¥IÀŠ 7aOÙëËŽS ¤}Ͳ>‹ÐŠÇ³+H$rÍ #ˆfn5¯ð9ÃpœrAÛÈcÔ¾¤œcôd/Ág4 +û'~Y0.6‰ýKµ43Þ4XÖ1$àŠÕy*ñßzŠü8pUnŒ¦ˆE¯§6Š© XøµKP–¼½¤KôÀuM˜!y•s_Õÿcñe]þæc¢ Ì NO–5¢òãZ/wâÿ)qÄœˆ$?YPRUž^tüJ ~G¦XîšK¢ ž‚9ÕC€kÌ•<×ùxøbóR²krì+!H Z‚j…Šõ4ÿvd¢n?Dû‘—R˜’À€H,’r?âyW?k)<äÛAf¦%Y+ä«â¯JþÓã“ÇTOª…¬‰$ÖhËÈ´eAS±åÈ1ÿcðÿ“’–ÀŸ61Ü¢-ýf³º·O€((Á~6ÙÚµÜPa$sULÜÉ<ŽÔSÈ$¤0mÑ(…kñöK‚?k)-¹h¢¸ªª±‚İoŒ¨©ö@5øq°&”Üñ%¬n?´UPs¨¨¦ÿ³Ëæ¤ì‹FI,¢â•®"Vµc$ïìÿk".$ÊúRD†‘Q«Ý¤&¨ÕÛâQû9DKyD†õ•59P³DRGžP ø¶¡­:åàzZNÆÐ²zÑ,—ZI4%Û‡ÆQ~Ó©ý±û;üY:‡›Y@\­µ¾‘o²¸ "’3)àÁ]ýÞ¼ÊeÂÌÏÅ„¶Šio'§4Bå)FI¦¢×·XÙ("ÆÝYÝ:È‚kTµãèÉ;;Ùˆ?d÷*Ÿ&åðþÆ[[A;„T.ÖàHd3Iržœ’¢¼PnÅÅ¿,®c§óYG’ ›šE´…ŠŽÑd4<ª6û5 hZ)o$Ow;²µV¦¿¼h»6ßBº$+jìD`àÅ9RB eÞªßû,1Y%°Â­rDŸ¼ >ñB(~ÄÆOJ%*Øg`WôSÍù¢R[‰¦”]+IYÔ)邽ûqáÉ~ÖJ_ïXGô·ñÔΡ¶>¢ÇCð‚Õ,Ä”þ_åʼ¼Û:Úö‰Žçárh»ä+ã^ëöqÕódy KäQX£3È€Ð.Û“q¯Â2}KR”‹ãbí;F¢’Yo²Ûdï’ÿÓ!Šê‰í¤”£–#Ð(¨Û¨¡PÀ«/,ã+¯úg°‰éjŽæÍƒ©P³ÛFkPÀòeØ¡åÇüŒ—:,Hæ4ãg¼IT¯ˆ4F€©£|JƒrMx•Ž^Apó7ä›j3Ï.š-§YMý¨P²°–Ê:“ñ û/ü¹TO«ú-„mËtª ¯!©’6o„ “}·û?ÕO_åÀhrZD–·k`åÈcjEVn{w<~õrô³iåV·_Hr„¢z{Sö‹ ‹wã–êke±GVAɃÀmÚ»ú‘Jd‹1™c,}IXºT­Ä¶Àõ®D}M‡’ƒJ«R>Ê-Oˆ€?ÊðÙ9m`òEÁ$.Ž#fåE`8–‡|‰;2 $gUV;Œ±Þ´>#ä•;ˆ õ I¥KÐu(çþäc «n€ÝF¬àÔ5JíÅ)ABkã€òH挃‹"¬Œ@i'RÐ×ÀÓzeg›`úR¡û»ÆVO¹±j|E¨vÌ>,¿øZ:¬…UK$ª£–¥>#·Ï¦rQÍuÖÑÆ@äàÌ +RO^Ç)_„ØF!À4؃þIR£©ÈË›!ÉsèB>άjBwØšSÄäÎÌ!ueVT+ ı¦Æ¬Vµïû# åkº¾–èòJÓÖ biC¸¦à}2Ú©œ7-êá‡Ôp’—@ìkÉUÞ…ªzWÙ1Zr JÚY^I[ÒS)rˆ|¿ÿ!_‹.ºÓÌ£#ú0FññGv _ýö>%íÒ›Ôä‹à˧ÅBÚ\Éþìujmöwø‹v¯A’<Ø„TW +ˆ¨‘­{ÔM||…ml½–Þ ah˜­Â•1 $)äÃòv8`w)"‚ù”] íƒ|D0|JOÚ'jï\²j(‘Þ×\\ÓÔœ„‰Ìñú1ìHÆ’$v,ŠÝž¼jXq-*!§(ØT‘û<ªyq?µ˜å¸rK¦eK–™IX e+JTïQÿþÖX7°&ŽÜ–Ý[‰$ŽE䑱, ËÇ£z³É[J‘8ÚûUîÙÛí?/[z Onë‚|™Dú—Ä“E5ż„˜’A2HÄU*+Ë~ÊÖ‡þ£ÍG"GùÈ4HUÔ°•hOÃS¿z?±†g’ê&tT·dÙ"õ3Ý}E$ò…+ƒ»ÝþåO#ïW´S,–Ñ–p„(~‰OMþÏLy ÓÑÛ¢ÍÂhø‰•FÉ=I¯°¥pžWLzÒ*9ssuÊÒG:°px«ÐÔ {7ÙÀE<™Äó-ê–Dy9 ºv* o¿*ä!°²œœöKÑ"fÌ Møq¾_m*òÃÇJŒ)` p2¡* T7óŽ,GódNÓHúW[đ˪Ì"ËE'ì¸4 iû=¿“–ÛÖ+sV&5C±ñéû[ôÊñslʆ¶¢A |J†‘‹°#räWuùÿÀå’-`9n[‹ãúÎer6û@ µŽîi*—W&ŒDC´Jµb>c·:í_ò°c5™ä¸H‹4— м£”5-QE=>.MÛ²› ·n1¡öh;¶A¯ìŒ™–»Ù¹ ÐDnUåZ‚Ý*hi¿ú§«Ù‘ºU*%“á H2­w ¯Ãâ§aÄ`)Ь‚fG å*±ˆï³5MxþÎJB¹¢ï’µ¬©¾¬Ž2e2È+AMÇù=rßos!±mþ­Þœny$E-ÿh€‰G5¯Úbjq‚²Ø„$ˆò3HUTD·p¦€oÙ¶›ö±¦(»bœÄ0B$çë|;éQɲäm²À]!1´÷pb™]R0V¡” ¤’ÇnJÛqø²PŸˆDϪûÚKˆ¤õ# ^¢0$ZýÞá¾ãâȶšØ[ ³‘c“š¨oQÔ@ýiÓl®gpÏCÚ´l Läp ú•£+ž¨èpÝ“[ ‚£#óY¥'ö‚ò£íFaÿ—ÑÑ¢µÇÖ.b‰$2[²P|UÝ™j¼•y~ÏÃVÛÿ9² ìš ë}jÆVžV@â.ìíÇ"û–SüRë¸Þi$5 †7p* 4§MÅ)³e ÓL·VÔåz@Ìy"•–Úª£zŒ¦#rÚO¤+h!åK©‰¦#@jZ»Ò¿²>ssèÅö,Ô&¼ÂEZщøœ°©N-ROòáÇôÒrÛÖ%ßMÀ“q†jÈúŠ‘¥Õ§/æÉaÇ{»ÉZ Bˆ°ƒÅ´êY‰©ÜõÈKëeèPÒm" |MÒÜü-Z¯ï)ðÓÄ 9ŽÁG©,‘Ao0ZªF¼fzT€î:Ðõñ³™`vMä–$Ñmèû/ß»„÷ø¨Ürƒõ·GéBDÍ%ùUâ‘(QÏfú[—û™ ÀnŽÑà—Ö’^U ‹)’ ö]ûã\ŽYlœctN¢°ÇbѼ‹µB<´´¨5Wß+‰¹6ÿ C3lî㋺ÓrYÇUð©û'/i<Ñ·SË ‘>p°³“B¢Çù¿›íd`>å'têÚX¦@ð·¥!›Â‡âE]…[*˜«mÆy õïLÜñu0HÜcS@~`(þoò°â&¼— Ý-+o'2J±er¡šˆ mðÖ¾k–»U4óqãR~$u*Nû¯*š÷S€sIuÕÔ)9 =K+V„¬<ž ôNY8Ç`?œPe¿¹³i OO‡2,&†•nK”“¼½íÀlõ»„‰¤FbË(ª1â´=Âõ-“ø¶¼¢ŠY¸Çi:HŽÙ¤i(J­H§_lsùÌ/¯’Ë5w*‹O«ÌcyÛ†éB~ÏÆ\“k¯¤œ©¤Ó\5d­*VS‹ŒŒz{™‘ÏÞ¶)ÌÓÞ0¹Hʵ ÐSÛqO‹&ESPê…‰ci ,ôBÛÈ¢•5©âµû8:¯DÂÆÖ7šiKJŠU™wæþ×Å^¿ì°HÐ!#r mI¨ÙGëz”cv‹B«ë/ÂWüŽôûYO O“9üØÕÊ(½¹™úÔ«EJíP¢‚£rrñt2„–6KÁRµŽ2ýv~@oô.NPa-Áuý¼šVXÄL­GlªCxý–_Ú\ž3÷3 ÖÌÉt‘£24ŠÌäTUߥiM¹ ä/fTµG¾²SÅj?xC(RÛ’$ÿ%rdTI@#Š‘k$CD*&ŠX‹µbà@RÙâÿ²¿ääŠÙUÑßWHîn-ãAÂÊxž,Cu®Êk‘`’9Òë$Œˆî'FÒËTŽÐü$ø‡ùXžh茾ºç¨¬ÒÄT)OJµaNeëÉ~Ïù-‚¶Ù$ﺫÇcSÆBüÔ ¨¶Ìzõÿ‚Ã=ÉQ° ‘•e¡‘’²cJ|EO@(Bƒö©ûX PÓ v’é*"SÓ!…ƒÐ²ä䣰A$uÄžŒ–Q˜—ÓÊV4]"ø*IÚ¿/±•±=ãýói;€‘EDŽe V4sB*¨?²@ß/<ËH;UÌL.^HR€[’ꛪj¦ÿޤ?ÿÔŽE#\‹zH‰qi'w £#ɵ*ß)_åÎ.«äö›’þ9î.)‚{F–%Ue‰'¦ì†§“yñrÉÐ4œ‹;÷…{'šÖâð29‘% }%$ÿ´Ê»Ò¿ðØÏpˆ“¬u XîÔ IèKZVš4í»b¹˜Ì¢ ½ŽÖØI+ñ¶½a¨غš•âNÎA ‡ü–Leé8ÎÖ‚ºÒæn)¦†ž• ÏúÙ8Ë«YgOBú‘ó©NJhŠžëËà+‘ˆá—¹2 Or€¥pÁ'•‚ˆŒµ-ɶø×¿}Ûn{ÆÅ‚iÂD¥XYdNd—cJƒî¤þÏÚÊgõ6ÃéKæ†T±´’@#w‘øýŽJiÄÄ›,Œ½EŒ†Áõ‹©cêÊ^Fz£|%zPTtý¬•XñTVµK“ˆõšG¢³P©«Mó¦faE¡m$O[Ы‡’A·biö½ÛsÇ,—/&æŠqš„Éõ#¹Èuà†´> •¢-³œ&L1­ä¾ $¥â„1«q¨÷¨ ¦Ã,ct6Ÿrðj2Éb’°w $ vë–UÄ|uPÛÝQ]½dNr0`ªœ˜- ~.N?—$§ÞŠÝ½6vú°ž'ÆòIèšòËZZoEßöpdhôLy|Uµ/],î61¼Ï@9pX7ùüY [È[9šQÕDëëÅŽL ‘ðÐPå‰$±¥©2X»;¢—fæHÜÙÛE##gJÇÒDyZFÐƧ¿ÃZå`[iÙL')Œ­8ÇËcB¢€» õa]‚?UPŽ< ÑXÔ7ÄÔzdˆ½çõÅýÙ1´ucJüJiׯl„FÌä¡;QÕÅ\>/£%Í¢#GúÒЊÊ”a¿¶6)º2#ð9øY(¡êöNW.m£’Xíû÷©%Ô¤ì»Sá®]Ñ¥ k#Z€’j¼v¯`?O\”¹15[ÆQ$1¨ø=U†=ÇÙ>îÈ«¯8à”SVäèiµ)Ðrï—6qä•Ï iYQ8 ÷€ý’TT¨ë¹é–Ð`‰õ VÐ`¤¯¨ÍJqý ¤õéAL@¾Lmn‘#Ÿ[Ÿdzñ ØT*Šø×N‰ƒZ¯§"JŠü¸»5(¥IØ/ÚâI¯,`™›@HP"¨’5¥$5¡¾Þß´rÁ¹k<“ŸNRË) ð¯ï¸ÕmÕ@; ¤J¹um"Ðut³™b(ªE¾Ä*ŠÒ´ÛsVËz† ‰‰žíL…öo„¿òŽõÈÈìÎ#teû0¡aIRZRƒì =ÆÙó-¨#pâH§P$äZ´#’vñøN[Ì5×Í q$­“¯ïìzn_NW¨³—Ò¥$’O§Z,Åa†gr K‹aQöE+–D×V¾ˆ#;²ˆ9‰¹¬°ÂÎ9l¥ŽÊ)ÈŸúë,<ɘ‹  bÞ¡†XJ‡XAN"•.Îsñf=òmTŸë/©_9nq«PÕZ…”•ãé“–  <ØåîkÔ‰-ùrušI‘h¡ý£Ó‹~ÎDsA"­Y]£áýï/T’ S¤dr·gŒokÚVxD¬?xð³U:–^ž;à˜§zÈÖ²H‘ñ Ñ˜Ž†Ÿk§íesäÙi`?q#gáÈ ¿R>uÉ ®ô’àÀ’nSÔö€j±û®øFÌNèÝZLcàfbXÌçx×z¨PG.H~Û}ÙÁ”lÊu;‡‡â Ì.¥F¨øø•Ú¿ðÇpYkug½¸š†d.|`²‚~a¾*¶Y©nÕRfµ…‡ÀÉìj8T0øH><~,†?¨²ŸÒ‹ÐáÃ(séF¨5vZ|†RœaNðHuÇ”pÀIFP:ìû|°ãúS—šíVu“UN+ÅD\]M÷[¢Óù‰r¿årÿ'CÓþr2ŸUù:4wòð^2 ¥Сî'ûÄÆøÚG$1^Æ„›Ž'‹ƒNè̼MI¨Ã“cºQ-¼©k8‘,΋·Â¿j SöFX©„¹'þ“K¤ÂŽ8%·ÊgÌüab”µ¹ob,¢i‚—«©¡P¥T1ëLq.P’º/Ôß“2JŠ©<öûþËeí(‹§Icæy>£4„Šñ_MXlÔZä@¥µ·0Æñȧ3-¼±Ê’žEåÑ4î§á<¸äÁª¾ðµÎ“OMQ,"J7£l¿»r9€µ:ûf,Í“ïr#È{’›çtÔ&g“š¢1ln¨FÛzrëþV_é5Lú‹VÉÂÔ (èÞHÉâ ‚ ÿŸ ™ú¾-céVdsmŠ>JªL`õ)Tç½9q;/òअ7<¡–X ,ñÝg e'cÀw¢±ÈĶtø¡®%/%ÍjÜäÊ~Î íÔ}¬º íîi%dR)·yZE‰Ç@Ubßo¦ÜV‡n½=qAk#ñ¶³PìÜ Y˜5;÷Èe¶ÈU*X7Ö5{vnS<–ï,Ò±5Bû´vîõgèGâœRòå'júÅ@Ÿ2Oòï†Kæ—Ò·˜ ³Œ¡sÌnª~?©å–€/É­f£ÀK ,9H$@#— ‚µ‘9Ö¼X­ðãŽÀ¿%4J-mcúï>TUƒÓkñ|=ÚûBµÈ¥O4º[ØíôÌ´0£SvÐÜŒ7,¶‰ïG„€XXò‡á H%’Hb½(ª¿kö²£v["îZ2×3HIW‘#€ äSpíö¿âX"9$!¬d’c<Ïꀴ6…OÙQ»«ûC—&Ë%_ÒcgäŠk=ì,?¦K"GEjÙ·Â6ó66¤Žõ–`”³Ö3•ê¯/±ãðâû©TÓM4aø,ŠXV»P¹Û•>Õ2#A–3»§~w,h@õÄazŽ:(} >XÆ«àž¿W–V{ueUi.eA‘ö$0&¬8×ão‡áÈí¿õbÌ_Ú‡³’UxHã1@ó !ÚH¤Œ% 'ö’•û99gàÖ™M³[©e²KàsåÞŸ³ûYlE£º"9;‹¶Zs‘‚£0 Ž+Òƒöh25éd9Úó+Q2©˜´ÊµoûUÀ;…%¶ž]2ÞV©V’޵¥w¦çÃo‡ Ž2šô¦*-ͼÒÉ"±¸a lªœ¬Dì—Í’·Ç<…ûBÜÐðªåÀîÔy&¶ð²£µÊ4M¸2•pW§Â@â2™óm…p¬×8¥œR•<­Ï$R:¾z¯,8¹–Rä‚kv”…8¼-QCƒ’|^ ýœ˜,ÙÁQš5pVI FÀšÀŠoÝXŠd‡íbQ,"•$ˆFc‘dgG½¾ÍOõ² +vÙn)BÆ`'8˜Ørx›­WábíÿË$6jt\ï$7„¥=)¡gÓšºÑƒ¿$5ÊãËâÛ.kg¿¹à—qÒÅ:­ÔJAN+±`¿*°½¯¹r8ŠëÔ‰™Ô- Øñ¦ÿË\FGš­¥¿R*ts.¢ òJý¼°J[Ü©´‘r1Ê• ÁbV44­(>mðᢋ‰…Äwµ¸ZLÊή@5,´¦ß.-€ÑŠ@õ n¡+$êJ#:z•è¥ET©=›¡ÉDúXÌz­f±d4¡Y) ?ijkÅOòøl„ƒ8j¹y!PTªz‘µGzš=¿“Á C vªü;ñ¯@vS]ÎX7-%RU´”È Œž ZðOc׆áœy É PZSBUEHþØ'ÆŠ0Ë‘aŠeª…F…Ì~ÊhOTt®Svü›%¬VxÝ«‚Ó+Ú´¢“߯l¶\©®<ÕlbU¾ÈO`»žF¬O_ÙÁ3饈Ý@˜žxÊ¡X°‘OÚZìÄuËLPbNêòÛ´öñÆbeyÉ‘ QFÅiürFÙUìšÎå§hÞ¡!‰UA?8 ¼{å|[6îÞ«q Ö³EPÌ©U¾jÕâR¿ŽQ ‹DÈ!Jeyã’2ÁR@±ºu¢D´â|>×ùLÙ!Ì$­+n—L! Ô4U¡R½IëÈ©€Y©®ˆÛ†U K3Qe?¶GF O°‡jäf(2@+ú·7Îd3 B¨BŽ +ÅÿmA¯û,²@pÄy0ÉV £i¶pÅS…7g xï·0rL†êé)—rÈ… †#éÆHgTq êûY y²„·]ŒLR¿ò”íÄ"°_Ù§ÅÇý\][ZšE¨(®Ð+p§%©GÓL?{LôIJÂÊÁŒe^NUåñ9û<}†Êù œ­–>t‚Œ§®±º1ëË`àTSn›.I ¹©‰¦x^2UVµQÉ_•;•Â轑4·/y(N-üo %ªŒi¹'¥d`˜ÛtÆÉZòJoLqôÚFwFÌIå]¹Ðìãl…'rÕµë:– Ny0-ðñßnœ²R `®Õeh da$FDxÀ^Ãâoø‰®FÏ›9©¢-ɽ» %B¬RFœHeØò¤Ÿ´/Ù8åúB!õ[ëy›Ph¤Þ¢) ™TT‚½¿‹!a³9 ®D©Þ\\$lh T²q¡öøzåÐ×3rG9žÛI‚1/äb¼ËÔ š¨íåT ÙÇèÝf›é»ÝÎ+L¡h~Ó*ü.þGí}¬r“Aù dŽf³•æ@ÎÒ¬qñ£ÐGQð²<èw0<¾)ÌLÏ¡s–Aêúj¼Ü†mÅzŽ?cLúÛñý)=ªÄ ‡Ô5–NKV£qQ%hrÔë™ͨÂu¤I‚i\‘$…Z£ŠÅEF™NQ³žàŽ<~Àÿc¿ù9o ÓÌ®ª‹ph«I*¨¯/ñV»²H§àþ\•1tn”&[€©WŒÛ–$šú`°,wùä2Lñ“nÖmãŠ`$°‘ 0­j´Ý8×—,qo³)¡4YÙi'¤Äg$_ÀíÉJðÿ.LMµõnîco²ˆR27«4‚‹B~–oÙÀ4ÒT’Uµ¹Ä£ÑF•£©Ž¥þZÿÆFá_åË ,€ÆE‘%»¬QÇp«HàEçZr ¸žõÛ0älìå²Ha‘ï/ä4{që/SñF¨ý¡¿ü.dƒéÇÜ©K¨H&$(RPz-º[`[Ä(å†!‰V¹Ib‰?î¤xeˆ‡ ‚ŽXl6VEÿ#wZ W¸ky=50Æ' áhWíxý£ZþÖ@Pþ«1Ë‹µbgŠ6!`!Ël8Е^$wËD¾Ö£ImÝÑmÙ¸4Ò3‘Æ¿»@*XÈí^™hÛ","!@ÓÚ…$h“ÇJc!!ðV?o<þ ·De…¢¤åI"P¬ ùq@À)¡êµ.Ffþm°w"I-SÉÊ“¹mÉåJ”ÊNöc#²KxœA„U9¿§3S·ÄÇ'Dn×v²ñã–òÝ­âëÉðÏW‘# I‘kýß#ñWö“,…€AîbjÚÐŽá¥\U„ÖŠy¿eëÄa®þäXP¼Ls+îG(ÕH ¤%”«ªÿ6…—$Õe‰ô½1R­jÁ]HÙ]T’ì9ýŸ³”Èn[bA¥ ÙC8F`Âð*9Ve¦ê ?k±•©ivO nDêC"3ücŒ¦¡¨¿Íºò?µ“”ޠ¸D ÝMtñŠQ*ìQPO÷üCžÃ› v%9‰šÚ´æ6õ^CŸÉ‚ýÿÊÃwÍiÁÖÙÕN­"Æ¥H‘Aý² 0óù)5ó_m!Ç8¤WÉ;³ €âŠƒ€Ûü®¸²‚vF[ž2Ú‰£½5’h©ö‚³Ðž]>%ë\ªg7EÎ9§·†*rå;RÇÃö ýŒ·` ÷4ѰçŠ(Y.c’¨î¬s^ÔøŠý“\6ŠÿÖŠ Üõˆ*AÔ“TêÊi࿱þNq z¼×zŒn·©*ü2ÛÔE+N…X 8ùd»Lío,¤ÓãE6„ž8è;î;ïM©ÿÈLe)¨3\_‹“ [ãP*i¹*6©î£&Ì%ͽ5šm6å¬ñ†xâG­B¯ª¯uÿ…ør9¨xÎÔ†€À³zk 2’ªU[0âÈx¯ >%É“½ÿ›/ó˜Tš-´Ó¼ôrÑͺšUAQÉY[íx-2’hy‚ÛV}áktUÉJ8”)‘_f¢OO–L ÚízÛ?¥+4*ˆáJ¨¯-öo‡!Ù!²IØIÂ@Y.‘hTr© ÅA£PŽY0øŠ,0È’BªHp¦†Œ:59o•Yâ¿6À=(5X r]/ÅÅÐý]Û~(ZŽ£©ØþÖZzÊ¥møú|˜‚­&íÉÆëZ÷ÊŽöÛ°B±fŒ°@‘8@&5X5HãÈŸ´¿g'TÒE’ƒžáäôÚ X¬~‘` –J¨(«_óûYp0çÉuÔö’$ìQ%4„L…Kq­MwÙ©AËŽF„ȃºk`’&*̇ÓUZ®àŸ‰ò®cåÜìÝ‹`“HLÊZ(½*RI­ˆ©Û²Š®_Ô4•MZ†šÙãfA[ÈOh7®GÀ¶r‹W–ζ–ð)T`Áããñ–sûºå‘ÄIæ‚6ˬìçõäŠàúôPEʤ¹§qÄÓ ä*€mõXY>« á£GB%—êvä*å6FÿÎmòîRyçëIš…ˆn+¿BÃá¥Û_æÉðì×{¥é#‹—£)‰¤,ΫJvðÙwË J'Ö·ZÜ ¬Õw!Uœ‘Þœ¿•r dJûyf’ñ^®¨#/(E­ylT§—%ƪ>õv¹'¨úpHÙ•ä—š}–v ĵÛ *Dþ7NNaNòâÅBd.í^D(%?V0ì‰eªÛ(âVc`6ZR¢»×jŸÅ=RG,ѬD‚Á*ª£`ˆ#¯k!×fg’ŒEG9H Lt ö¢Ðmí×%·&óh¹Xñ-颀OM¼¹ßR­uE1FÀ©E BI­wÛ½F,¦âüB©ªý£)pÜj+â Ä)Rh¸Gâ øƒJ§3Q÷a¶%7„Gõ8£‰£wPj@£q¥ ¤ón’‰ k‰H„ e­¨FüºøÕs&Å4uSŠGõ&ž]¹IèC4åáðü8˹½FäqŠ ÕhÁºô#j`4Èl¯Á>¨Ü#ÅñP~íJíL;²e'„à0þ”,¥ƒP>+Ň|;ÚíJÌñ»AFT°fv}•w$Nƒöàrq;ßs ”#$ÿW«r»šqîy7íÿ&Jú†$tW¾™¤š`¨pà(ÙWjöY gÒ•o&¹[H-¢/ëÈ€E(K.Õ$}¥ý•ÁŒ âLÉúZ¹%lÒ8ÔrZD¤îy”ö±ŽæÑ#²EÄ!ÍUU[à§Â}J€Î§}À9;Øy&2ÞHóEê–˜É2ÅÒ¹/%M\±=OÚÿc‰ø³»ÙÚ”ñH="Å£pJ9øiƼw>#8–ÂA@Ø…0¢•вÉÖ»n¯CÕOü.Y.mc’³0ýÔ†Œ" á*[n¿5V®jU%~ 1‚FUF!¿™OÙ¨ý¬E$•U‚ê ˆY[÷l9+ 8'§Ðqæ)ˆ*×öÜr)ø¨oCÉB‘Öž­‚S>ô=£zÍt¢RÜ÷áËþO-þ,'¡îô uû¢/-Ú4™ˆ2‚¤Ð‰NÍO٨Ȃ’6Rú‘1`(Ž›ãÛÀï‚\“ B\$üæF~lñšÉPYøŸˆÔþ×òáŠ$mç ³2±j‘EFÝj>Œ²`m»ãoL³2É@®Z)_ˆïðÕv5ÁT™s^¥"º’*†?Þ,€ÕZ‹A_zâNÈÝ+‚ ‘„ªÊH˜Pƒ¾Í2;(1nP€¨ l ÝA®þ<þÖZ YC[J«o'¯ð±Ñå@ëÄw¯/ø3…ŽËãU7çŒax W`¿hµ{î6þVÆöbèÝ^DI#3CÉÊ–%~£Ö™F+oÈPök"Ï-z”ã›ö²r;0ˆÝ §[Ÿ¯Gë†eŒ—E§@A®Þù)ÊÆÈÝM`½g–rü^5e•×áF'²ûS%c“(ø¡XãK¯N­c‹Ö‰¢×Àlª[š[#°µk¨ã‹×S¹‘¹\®À?²Œ+ñTÿ²ÈÃtͨQ¢P¬(xÐ7Ä[¾Õû)ÿ4å‘Ù®FÖÁ/%á7Ûv/PXàAæGòpËÉbUEÈ^Pª€Bú’J]™…GMè9u y&ÑÚ\Ž±Â³z#Ñ—áP[ˆù6C'6pKt¶JÎòÆßî#d5ž¦ÄH¡§ÙÉå«ù¬"y·e0–ê5ôÀôѦb€ª¯Eëûdý¬ŽÖ±æ˜Z<¢è´DGB¿âIçñ¿ëûÂBòýœŒ¾ÙÇ›¦µ`µjzwQ²ò¡#áÙ½·o‡–F&’w^­ÄÁ ÆQ 9:‘Í™Ԛ툣¿›B‘:;§©<"QRäe=^ª w¯!þ® ƒkóe,„#(y”4‚/´dZý¢»¼}˜Ä–áúܶéNRqDWUâ8Ö´c¹û"›c:dFÈEyy©+T$#ÈëC°š”NÄòûK‘ËÉ”>¤5̼²ÉÉÁ¹‘b P;p4 ¡À_‡ e÷,Âân"TGu…Þ¦‚¬ÊjèXe´Õiž°Ó¼+ÍÌf8‹z€P¸cÅy/ƒW(‡ÔÝ#é_`¶ÍqrÑ3Q"Žkv$(e$­>Ï<”É ×7T¾×´H¢GŠ.C—ÀHjü@ý#lŒ:³— „ÕVDÕ^ˆJ·8€£p 0çN•ý¯ÚÉã>–9©Rí"‡O³%dX˜Rœ”·`Uj{ü%r1Þe—ð+i’D4ûŽ,J¤`¼‹@ÛìÔû#ùr9%Æw(+-œhÊbP­$àÜ<*ØeµÍ=f7ÒZfàL°–T ŽB•]½ó{MÈÇ\)äk"YÑb oñ6îßäñc—ã7iÉÍ1ÑH³¿©Ä „ŽƒˆUGÇÞ¼[r¼Ã“,gtÃQ"Kf üT"ž$HTø·ñÿ…ÊG6ûÙ(P™AP¼-HŒš‚¼¸«HOù^‘¶Î1½Õ/-L— ©ÇªçãPT0äÔø›“mÇìà‰¡ºH³²e£4n×nG)Õk$ŒhD‡}è@«tÈå=Ìñš*zßOK„N[Z–y8öTyþVGVY GµúŒkÄD-œÖ¥ˆø‚!?µMòcf³»™ÁlUÀå#HÔP¡ 7bI øqïP†/·RËê¬Q²ŠH^öfaCÓØËFÌ n /¦Êô”šQÁZíÛÖù„C˜$’Réê¬d³M3˜øG„šÈøOùY“ËÜãÈó÷©JðKéÐÆ±ÀQ’¤…â«u¤•ñû\òQk!ZÊâ5•©dUyŠn­Oö8DO:S-‘RÇéYz’ȳ¸›‘**ê+^çÀ  ¨o* ¼£e+B­,‹,QHGÂ|!SʦŒÇjþÖZNÖÔE÷hfT‰’ËÁ+^G“ €{¡"œ±?Ë’Ù¤’+.rÆÞ¼Ð°‰ †ñâßÊ ‚kö²Cr}è–Á0Ò¡OT¯ (Q7n\ÿj‚Šwʲw†ìuÉt&äŠÜ ld&mýPY€ #öÿ%pÄìQ.h8nníÅÚµà‘ª EHAE¯Q7ýŸõ²Ñµ×sIék­ã¶W´i¸´…HHÉÙ•Rj‹ßör2³a”hnTÌUA#¡.ÎÄq4D(cdï·æÃE‰{ˆfú¤U3EnYk²)ñ(n5§ü[ø±;Ÿrmk ¼pºH"n%$+µJ¿9wIå^j'Õ­š/ÝÆ±¤lì+@­R§¿Û™dì&U_Gê3(Cr®]A¡pÛUX܉ãûX |—z¥Öé)hˆnLüûªÓ›åeã‘<™+{,bMÅÚIÑ…Ekð€Æ¿eÏ%¦Hš(!pWˆ§E&9]° â íÔþÁVTšDXÂÞº†`_êãŠòƒ²Ö„öñãüÙ^FÈî…‘0ÚòÏ)$PžQš…ùqÉîl°º )Úz ’“肆E4øKÄ×öŽød ¢ÿÿ׋k’Û²-å¢z2DZPvYâá¸ÛÚ¿³œ|;ž»!½ú®I!»ƒ5J"Mg\Q°Ü/íq§äÙ·éI7²Û$Ž)æõ¤e@’4›($U[Ä0\”¨˜ÂÁò_hP§T³:°jãC°'ƒ7üK%»Kdg¨±Ú©1”šd^k¸%…~6§û¶¿ ?k( [h&·K]£çˆ¥ž#ñ¨Ú V”ìù9msíw×¹9‚Vµ0$aŒ¬ä»P±„‚áNê:mû9A<Ûª©q [êÉ$*!zúQ†æ ’y(98–¹ (›HÄ:È=»’êÊÆ¾™*Lj­Ôø²DíÔ7nB[r޶¶SíHÛƒF x‚ݘv!…?káËGV‰tEÆÓqô˜r™-É€¥Ð,H^l¿´yef#˜ïl()c†V‚âej°vøª”·M›ìÿ.[@ 5Kr MoQ$‚+–B’Z´lIá¦Äü—ör¸Ê¬9´ò É •½Jz² šZŽ'vUëݨkÇö—ýH—2…¸‚‡ú¸eIXý@ÜêÀìE(O7vËc"(µðݺú;ƒy õ *"™>áððjø1ë‚<ŠÈrMlŒñÙ:ÃzA••ª®õ­ >ÙFO¨7cØ$qÜD†CÊGŒªdÜò­9¯Eý•ÌŠäÒ:§—¼pºAU•“pß=2*x²?ÖÌXÛ¤6¤Ç^ÀÏBß“Uy5Sö#“»‘[„„ðBTýâÍ -cñȈžGÀ¹lãqk‰Ý¦¹¦8®ÅÃMtò‘O´Ç|Ùy¢µJ¬¨äEG§]öˆl„5(å`䕸êC­y³ÐûþÎØi²€J¬#V×w¡ïïí“¶=ShUb1ºF ”*¦@7SA·S×)$7—\Ç#I;ÆBÄÜyGÇbj•k·V`;5ש¨P. g!ªj+Çõe„°|Ñr˜µ­z ·¨ðÛí`‰e ªåΞfF¡  Þ¡w>ÕÁÕw¤##}XIÌqg-@I%‹{mÅ».=RÍ_*IÊyHü¹–Bð5QO|#bXÈX tïEïQU•ËFJH‘ZnÅþ®J[ ÑÖb9Z ÕWgid¡Ürøi_ø*äršN0¶ø=¤AƒÌ$D‚G §ý_³Zä 8NýÈ‘¿›oqÆÌªTÜ4Òr 5Ü0?´j9`}ùRÞß5À‘!¨JJÅc•gvjÐWöGüK'bS A•D–êÆ5o„s’‘¨r:|LËÏ!Î4Ë‘¶îäŠKŽÆm⪢7 J¸ø…OpÃ\`Yä£K“"±WŒš)ý’­½òûd§ÊØÇ™W¹rB¤ú3«ràø_~ ¬*0E2*îKZ#Þ”EØŽ?eþxõQô®²tw‰H •Aˆ vñùƒ†cdDÙYq83´Dš/ØZ»W|,ŽîÒá§Ð*n€/ý–éŒÎÉ€ÝpÒ\ÛÌ>E˜%Xð–R~ÒšôÊÁfBÙ€´ «ÇÓzJXðôÜé^ù9 c­&©Z ÕkÔü'¾D ,ɰ¿MU€L#‹šJTT¼‰MϸÃ;<ØãÛ’øãM5²µbyVv©¯!Ë¡û<\à‘¶AÒ+A2ƒð—êkOßáÂ9°;…övåRYn>¢˜O Q¸Ûã\e$Ä)i«*™÷~U õ£ëNƒ ÿC¢õ·es$¥W‰ µ˜ö]²¼M™KVAe‘”–%QC0ØÔŸ´XíÛŽ2ä :åKÎİáÁDdƒÞ‹Zþ¦Èƒ²HÝ 1ˆiÅEIõ 8¹j¨  Y—ö›ˆ5§ù5ýœœ’ÀXdc´šyëꣾ™5@(ƒ‰›ìœŒìĦHØÚû­Wª,¢TIdâs×]ˆ üœ‰‘¦Q ®¥ °Ô¢ÆG @&•c÷`¡jyl /Äm¦‡‚¡H™B³ |MPÀòÜd£2(íäŠöWH¬Qº7íž\*wà{.FM6Cš<1‰$< |Á/]¹Þ¤|ðù1^—rnó¯­Êü‡"B©ÓùX|8Ê6Äþ_â±”tâUœ©`*y·>þÏÛÇ)'vPضU$½ŽÞ…Œ´…ëBX‘Ä7ìïJ³\¢“Ídô-Ú ŽRŠuB>ÉZ°9iݤËT‘Ý#¥Q*¬m¡™ (ü¹W–S¨·Oé i¯èßÜ$ôLêPƒ•X¨ßz³Ù9›®"­Vèˈúï+˜¡ Ð0v4¥;/ŽW¿Íœ¾¡æ¦}O€««„Z z-:šPò<;ÅFè¹-¥k6 =6!•^´W<~–SÜd/ÖY -òôñ{êÄfq䆬*“AþHÞ¿ìkqɆÍ+‚eŽ7ãPŒ•-ZSßìÿ —½0=ì¢ÆÓÔÑÒ6”<6W£H( µ7Ì<¦¤äá8I#¢’U~C%)¢/mfFæ«ÎU}2•øÕÂ…‹õ—&.˜a3úÑòtŒ³ôäC/¦†›ýª¶c ÎÍò±¹ÚÊ8\y„ªcïÔÍYxÜ´‚áVñFø$'n(Ù§úÔ\”d D ‚ÖG’Iði*T¹l)#âUû+öpÆAHL´eEI+îüøÅÕ (D.zñ¡!9ÐeŽ6QšŽœÁÔ+~áØ õ kRM(zöÊ1I· Q…8±““˜âøÕ¬yíMòÓ¾ÍCîFÞÀÜQÞOÝ–I(Û·z|²=K•¯‡Ž{„CW"&¦-ØR›lÌWl›¦@m²ÚL B5 En­ðîTƒÛù—&?r)]¬ÌŸª™‚„^„to»" G]Ë–wã½Þ€Ÿ–Ù fJí”/©´aÕ)˸oÚùÔd¬±mªCEj7$¥©(e·oµE@AÜmíöre4£•ª 3R€GÚ@Ë9SF1ÄBÑÈ&Øà0¡7Œ™møGFDÔUh~Ñ_  óoEØÊÈ~ ÒdMÐ…ZôýYgF²„·Ÿ«¿а,Û‘ñ*>œ²]CÍBõe<•‡Äë&˳T/Â+¶ØB ¹åú ¨a üõßn™õ2þ)‰’;egfI=Ehè9sŽ…þì““<Ê‚ÝNfŽki\lŠÃ˜%…:wcOÚÆ"Á¦24„Ò,Ým˜s#…É`ßâ ½«–e˜&ØÀ&6“Ë™êµ º…Ø %I5u¯\¦BæÛ ¢Ô¬©tZUúvªV0=4õ]B¢ìOím²ræ}íc’Ú éÑÌjÕgv}'i ú†žw8Ìú© zmV±µ·+R -Jô%êOÙåLorŽ‹ôñ$W>¹s%½Ü~Š»©Ä9'—SZÇ6®ïRG¥O[ŠTX hÞ¤œÜ+lôlW°â1ÄAÙ”Å.SÖ2Uˆìh]@ú7Äž‹Õc™I(BœMZ ŸðîÍîT ,VÑLªBQ‹#К0ìµÿǫɭ%™oZ_ªÁ 9]ê uéŒÅÅ0>¥{µ+,¼þÐ@ÄJ‡oøl;&CwiAVpò ` sZUjEÓþ gÉaÍ1š;LFJ š‘ÉáéÇŽVÈ¡‚‘Ñ *ì9öhÀTu¨áµ2Àh‹aM´å®mär~YU6E5º…xÔñ¾ßÕcá¶ù&dÑ2N¯»“!`P— Э:XþÖJò`m_LyDÒ^O²™Ž">DQGoƒüŸõy`ÈCš­à2ÞÛÛÇé™X…„¹•È/UÒmˆ¾‹ÖZ† Ÿmÿಸ›’OÒ£¦¬Lš‡0ÑÛP$Æ2Cz70G‡ù?k,ËÓ½†!¹Kc3Ÿq¨f‹5*RÔ¯/Ù\³›_`¬ÍÎV™H¯ ÐÑ·bÊÌ,ÒÜ—'Ú’[ö(!pIvš o²’øTŠƒOÚ˱^My@¶­cy>»ëšÛ f>¢šÑzÐôc’‘ØÆ#rž^:ÃÃz'—e<à ^[ìbÄÙQ g¸Rc`Â2Æ26æ7‹}¸WãþlË6qMsnÔŠÌ3±n)Z½{Ç#>¡bQSD'‰šPÿZq‰éM’®PËà åÇù²99{™Â­¨zH¤™Aâ2 r÷aáüÙc›9”$sÂácRÉ uY‚Œ Ô¶ý×cðœ´KH4PÓüe’"ÈüÝÃĨn=k»†êàKjBî{~sɩВ#â–¨µ;òC}œ´ "ØA?‚XÅç³F¬ÒŒ€iUíS¾aÈŠrâRíg{Jª¡,Řո©§ÿ\娅šiÈvBÅ1”GmQK1 A*X·Ñöxáªø–.ŠI>"¯VP¿¹;#Rh{é&Ù`–îŠÕ™E”EãÇy¹%Í~—íf>1»‘ì—Û˜?yÁD8ÆWsñÔ|G~ƒ—ú¹q¶’TÒXÞÕ”:r* BK°û\©ÄþÎJ·[F¯v#¬‹*ª‰NÇ—ûêÿ̹{rYnŠÒY¸Ìˆä„u J‚ª8ô©yoÿ•ææÛ‹’Y~ÏõÝQCH hžj|<êvQû?ëeä9˜dæ~JÆ—HÏ'‚7YcR䜂Ҽ~øÆL]6²­s)¤qäñ§©êrQ€~4$„ Ý›%.²aqpà+-]`MØñÔ ’|,²{ƒî~(äôVw ª¬j“H â#b˜?ÈÞß,ÃKÕ¥ÃÓå–h}' èHÜM ²9§^î7ä29¾ Ëد¦àÉ÷pEô¤Z¨;s#ßâ#Çör«¢‘h;“-Ì…DCŒqrà "–â*H¯cþɲÁ°k<Ê´s‘2Á2 z1˜þv1òÚ›{¯í|X z†Vy.’ô Ñ’7*”Tš‹¹öÁ åLçÉ_Põ"’T‡bU¥A&2ßuÿ~Síd1÷NC² âD–?M]¾¸= ±€ÄÉzÖŠÊÃàËù4 Ñš+«Æb ÅŸZpFå·ãÄü Ž…‡ÄÙNCÉ»è%ýäòȬ #Èb(J’û“_ù»'tŠÝIJ‘wA‰^5âsµIýµß,#‘j½‹ÿшhª²iñ¬j+e+¬–îÕ¨&­Ç§âãû\¹6r9Nöõ°6M-pXH¿ZÜÈÂGRYÐq%$)þIøvÊ¥-Ç“8Š÷ªiqÌÜæXTBõ{ˆísO‰U¿gÔûQŸæÆf‚ =IuÔ ¯½x2†åÄmÝZŸm2we‰ æœ%6«]£ŠÕIÙ‡íÕCFùL¹ïѺmº¤sFVÝè7j³1¦û Šv4p-)²¼r´QÏ;¯8ÂqoÙvû íT|_ërÊ$ š £´pÅ ^ZNÜ&£Ð4­Z´û Ùq‚Ì+@÷qYËrß¼&BÑÄ åÈ“Ø û9 Ä(‡¹ž FX™ÄjeSN,ÜÊ(ÂõÞ€vYc™ U˜Õ™¿x̻ДUý¯æÂwÝ‹I+¥œóFŸ´j äÝO¿‰;€YŽ¥&•‚¢DÕ_Šd, šô ~ËsUëO‡.½©UL³D«û³q3RÒ£‹)C·ÃN[ÿÄr «dËJµU’_€JÖäE5¯Âió«<»›pŠæ­u,¤²£/8ÒW§%éßÄü[dcÑ2@E-ä7L*xܘ$·¨ØÐñí\²¬0×,·+qlòÌ$pXH*€"W`ÕÛvør@ ;r OO5ÑÊ^VUsH‘@jGcN´ÿ' E}[·³ˆ_X´¬KiT~X ÓÅ÷Ç‹b‘¬·PÉ*˜‹ÖYŒ’)Vßv œ—Ùkå±h̄» ¥hTqjoQþ¯ìà$›R*G5•jÑðR@§Ãû=©¶ò‹¥3µ¢'yUU¤#‰<—§^”njäOs¨€¡mnZðFP*BÂ…ø_7í“'bÆ·oÌ%ËC3³JÑ7—z©}Жé‘Á×ͳ'Ü #. ‡DÅOÈÔ"žë˾Ln atB¤þš‰¡•i"UЃÀrÿWìõÈÇ¡Lº‚ІÞâKx£ ,Yʰـ#@)Ðöþl[¦1Ù ˆnà–"#8bmNûdØr!4¾ˆ›¨œ«éû©%¸1=OUÊàvmŸ4¨ôoQðV”ïÂÄñoÄdä,S\MHMúÈö†H›œÐº¤ËÔÕjC påþ®W¿½œØäh8¤±(xÕ‚›IÔnU¿ár^ô%Ü\%eb ÇCʃf]©Aû$ÿÍXÚD†õ^Þury(e IÜW¨§ú¸摽ר®9%Ù`ÛlÄÀœNù–Rn7ãªúœˆ‘AŠBA&´5ú)ñaèâYpñ¤“Î2YœT€I ¬†è˜äú“H$¬Lß÷ØüJ{oã–ŨÚ&¤NZ¯ (ØiÜú²fqC“4¯'¦Ä3º“)øOÀ*¿Ëû',ÚÚÍ£®gáeV¬w Ör˜‹d¡äµÊÒ6oŠ2ʧb$'·Ïþ NÊT/=¡RyHK”5”ÉD×&:îf¢È‡„DV„’´ß;ÂdÑ’_X+À\rðÞƒå]ë’¡H[éø‚… B"·Çã½~ØAÙHÝ:–ÒQC¨u©sÔþ_ÈlvX …¤Pd(jR«°ÿ5ÂÌ5ÒË;^JJ#$“`L„R£  í’ŒFÛ –ôa,WÜþòn û*XF;Sø\–Cabh«O ÝÊÊæ5¬ÃfåÍDDªÃö\¾ßËûY\6 åvµ^üP2•2”­kZŽujþϺäök6©«\+ÃoÆeäÑD E¯ >*Šý³ËáÈc–súB'Ly¥õCcdHÚOµB¼‡ÒJÓí`È.+‹ê*7ÊðÚˆ\̰гnNDS·Áí’‰õbAá¥bNSÍÁæ’2ŒÕe–ƒß츠ý¬8¢ irH‚ÔÑÆ•§Ô•/0 j ñ$þÈ?g–W â,Íð… .Xš+–ވŮÇvF*Ìýz}…ýœž[ÇPRªÂcˆª«FH悬Yœ¯ß´»Óüœßv%˜épªÚ$PÇËŠr–5@GÙ5ëÈ )Ì<‡Ôäc1»²ev™brÎ"wr*X)ãöAîvË¡´XÏš3N2ò»FBê&Hçâ9½ ý³Óàâ+à ª…w0ˆ6_-,n%–J…Uzôbl)öCöàcG˜rO$ŠÎH¢†sõæ<@ý‚Æ økÿÙGsmÉÇÕ­‚¿¦×^Zqåé‰hjFÿü.y …‘§9t“Ä\¥»c,[€ñ€O@WÓ~?/‡ 5{“dn‹Ön\ ICM~À ÅxÀ’´ûY TC<œÐ蒘롛”rÔÕM7øzÓüºñýŒ°5ª Ä6E #N `zq§Ûÿ[¤•Ï­ ð Ì·ƒRNßkâþl•õE'P˜¾°ó´§ˆP°R)Çj.âµ9‚nœÁLjhÜéM4Òr•ÊÇëFð¢“E@ô ñe$nÚ>” »ºÝ³• ŠÄ˜ä4Šñ§sñW,<šîÊ‚+ýFaû  ž<ž€ííño–lbUµ‰¯ ¬÷Àu Õª j:dqÕŸ{)ÞÊ6×2%•ÓR¬ëÅxŸ‹#£|9(Bè•ÊKx⃋Æñ|3H¼Ç9PPŸˆ7Ä¿$Ô’k`fbn%’HãˆÆ\WŽêÑË'nÄÕD šS!,¢I?h€Z‹×è' MÈ3¯IB’ˆé†WKw‘å_ø×áýœ¶üÚꑺb¼·23Dq<Ì6aÁ~ÖõÜr¹rÙœ¾ŸuV º·Ä†I[©–õîL#iSi9‡„Äb±ôù4…‰u¯ƒ?a‡†} ÉtNO—’´?T öØ ûî[–$QÙAÙtÒ‰.cŠ´D‘Ñ©ê̱¯…pÇhŸ5‘²Vê~³$q7D ê{ÔµMé•LãÍtȃáEe’™[‘©¡ ¿¿|)˜PhÙZ0DíjŠö€ßCËþ&w`´Uh>²´U¸fsBH SÓ½pO¹1ïjg]Ü’¨Iô•A RFì+ŠõV!$“ÔÑÈ«ÓbJ‘í‘,‚*ì/§¸²z@Ö”¯Ä¤{äC"¢ 5³ؾʄþ"våuÃ[°è¡<¢©Q½J“±!z“Ût&åô]‰i(v"¤ÓÇ·Ë)—6ÑÈ%äp‚í& ÷½¾ì°Ã6AÛˆø"€žÔMrÆ &âR5©Ý˜+lÄS}†²\¯ é*²FìI¸¥[jWÃ¥N}K¥tŒV+oH) jd­ ¥¡­Ö»äy“lÁ €sQCö ).7$ÓâØô5âNX\‘kn=;×Ð’YAUzÕø²$ï·BȹÖÔä¤Rì¬Zr]ö¦Âª2GhÛ¹Q&Wµ—ÓÞœc’ª8 ýòƒÈïñdÆÇv)½à·”ÚBMBBšñHöãßâo†™Ž –ý¶C¹š{¸c·P8¢L?yJ³x•4Ë*ƒUÙDÄ£^G„2È¡øZ…wÜù”Tõ æŸ)ÄÜew-Uæ—ù ?Øá¤†G{C–MŒÔ¬@+wÚ›°?µÇl P,Iº]2%-%‘–Hd ´­iÙ[¯l)EÁ,_Vt¹ }£3©ÉªŒ€~<¿ÉÀo¢ERŠÃ[†ø(„¬@-„Ò•î*Åþ®X95šù«ê)áö¢_kÍH¨öÈD6K’…¼Q<¥iSRTBÁ¼{S%.LÝÜZWV¨[„-R;ˆ¨ïÓ*ý … dZH– XH†EW]ªFü@=wýœœ†èƒZ˜YçB‘ЏÖ”ÓíPv-‘‚Íд©k<Œ’£ŸŠ„–V¢ïûÿìä4r‹‘ê$B¦­ñªT ¡þ íŽÉ"ÖYŸôàÍðz‚?‰ûq%™VŸÌ½kû9#ô sQÔ#ôä’ªb%¸šuPw¡ýX emÛ‡·¯©ê¹g¤Prqc!²½§:ÍB*±*H† µW•E~yòg.šFv”;ˆþ%©¡"ŸGù¶Z)¤£î%ˆÞĬÀðRQ€ÝºrSÒ½r‘È–Þ¡Jñ¸3ÕQT Uã×f¥Iö˜cºÉ ˆÏ$ ?‚±õ-]Éñ>öU®bâììÀði šƒF¦Ãç¾B$Ó)NZ3@¬( ØûŒ™`£#5aXŸ”ÊH¦Â´ë»`ïe܉žhÞ@Q ‘81ß™4þ\® ³$!ƒ—”Ì©Q¡©D¨«üÔË8z5Ú1åH&ši[ã ªš¯ÆÀñß!DÐf ,XDÌá¾*L…I 4,k’™²ÄrFB¤G¯Éãxð¢‘ËÄJå2æÛJ" TNh©Éhxñ©©£vožYmd!Ù9­d,L²…‰Æ {Ÿ‹ÚÈS½"fiH‡¬Ì)ÈÆ„×Àtãñel”"#ˆ ÏQ@9nMNä’wÿÆØK™i‰Ìʼ¹²ü!AàH&¤Ò¿t;ddvlˆyˆv–@x Õ”ŸŠ3@+SÐ ®:1%lQÛÆÊ´J?d«5jSá;ïŠtPRBÆRË<ï1*ËDn*‡‰þZއâÉd;W’cͧ†a ÛôÌ2\ËÆNÎîv>ç~8?ÍL¯u–rËq¨?;+1*ÁU“pÙý¬‘ vUõ!d¡ ÌèÁ]8¡uÛÅ‚ñÿ'#«)‚¶™5³Þ¤P`’ `Ã"+’ÔñãOò²bxYb—©¸¯%–ÊѦC! Ť¦Û°”^I„Š‘[ô¡u»Id½¸V…¢HÔ¨¢N½ÿW'‡a—šk¬'+kZþøÆÂW1€ ‚´£r?ã¿úÙN8›-¹%°QÓ‘Œz„‹¸ 8 ¢ÔÔ¬?]0æþaæPDN~°Å^%™‚«Tï'6%ªWz¦ßg&7`C"Òî%{8î)$"ah ]7¯OøÆÊ*G«~"LRgÀ“Gª¬§âä “@7=rø šò×é-uO&’âY#i@&ŒGÄàÓ«ªüK_µŽMØãS«•S`Ê…Ï`ÕbM:lxæ%â9ò²ú­š ‹L’=×4¬5[q%C*Ž<ÀülxÓ™§<–°Ø]ÒÜ#FL¤»b¼ùž }¬"É òd X˜Í%âC±4ø‡2h|s Ü´“U·µ†+dˆÇR7y7;;Èõø~ËÇ2Iütqg KsIǪ–Z‚ÄÔq?ÍñcÔ)YÚ%½‹ý^é^5?UeV„vý±þËO ,.Ö^R RÜwwU;S‡ÃU§_j}œ†­žCÉ:^›´\¤3Ë"ø_¹ãÕr@±<ó<ïqi#;›uõ’¥+ž'ºõ¯ÙÉt,{•"¸e¹õºÅÕ\ü%¥iÐsデj^.©µ…ÂdsÆ9gb#Y+ñïÒ‡¢ŠÿÀåSèJÅ¥W­ëLÓ¢Ž&fGe$‡’?„É¿ØfZrþe\»<4Âct9‘ WŠã‹¢È–„°!Ô2ÈÇâßàÂ,±‘ ¦À·úRúhÑ)¨‹|CùŸâZ ‘îb6ÝJb‘¼•WÔe”|niW FÛö99ÑixKYáæå}Eø9@•ÿ»¡&«€š!yÚ3Ë’ÅYeXAh‰5o´Î…Žû@Ëð¯ù+‘Î6óN¹(Bf’üEëì8úHE$vrÕ²ªüÛ•±l'pƒ,ce2ÒGœ28^T1nä¶O{>æV6f[ÛÆ(À%Hb‡Ôï^ÊzŸåÁ)ДcÍG”†ØÎ"õIu…$Sû¥Š·Þžåau<–jвjÆ)R,Õ pEhâA^ÿ´ßÍŒ6…ÿIrn~ ž;…ŽH8[€ª8Wàëðø6X|šFÉžˆó<ªqP”WaPzï¸#)Ï!» Ø¥÷ MFUBs4s0Ü|jJÓ· (¿ää¡ôüV|× Uníå¨XÝNëñÑOYÛ%äŸÿӈ͎Ú{b¤´, …¹‡lãÁ²{Ö@…h¸ð½‡‚3FP…«su5äÀŸgÀG&@ìT,ÅÇ£z"*œ™ñ†è(±þq’äXDó ‘ýfÞQ4(*M_€JÈVíZq+þ¶@N.ß@ušI‚ÜMncXÁV þÑ]ƒ&Pv4wn‹ |‘¢Á ¶ê¦¨XS¢25Zü[6ÿÅ–YêÖè®®ööHØ:7(¥pH`zŠx‘ÛìðÊä7¦À}*ú¼riðÆ¤´eY­¤féEp;P†äcº'¸ %€µŠD’ãõôðåÛì‚ZŸÊ¹õ[8ý(-þ"¿Y·Ui ŠÆ~Ò©!OÅÔo–[Zcb£êʵFŽj« p©=Ãuø²¹–Ìa vÅ#¸BTÆ!1·ÆA$cÅ—,F©¢}]$FAV–Bi±b,Ç‹°ÊÏÔÛ¥@ªÉ{™^2µTò¦ÄÓ¾Lr¶³Ü²xUmÁ(ÒÇ9 FV=€ñ¡ûCì¶O‹“nò摤蜣#¡ÝÉrFÀmÐwû8"/dÈд-”EíäW1“sCSE¢ŠWÇþ säˆD¢ú‘ B`¢Ž4›© :5:`‘}éˆØ{’æY¡½8>ñʼn©û |U9kPGI ­§Ç«É#äPl+ÈrOÿ6UüGɰý(Qgu$1ÂÑ·ªÍUÙ#¨Þ¼¶²Â@bLä·h㹕AOFBý²H> ¦'í-¤±BÆ=`ŒÔ%Oú0 ìÛ(4¯* ™,"¾íÒ¥‘š3é…ÕÉXµO—üB'džjVŠÝ \sŒ¢»˜û²gv1#ôëK9m¥f3‡ )û´øT噋Ÿø×!)™Æ#rºÁ*Ó:È8À‚¿Ñö½éþ¶W#³(+Ø©4‹'0A爴Wi@öþl” ä¬@e"eoK“1%jMAµ‹.å×Q·"iêŸܵd]ùSØ÷íþÇ,”mí¥e’N$£òX”ÐoÐì{ü°H¬B)­ÝnbPßòg-öy «MÏ\±MrE„_ªÉ#È =P±?Îj r=YžHdŽp€–ãÀ×›@ż:×,š•Äk#§¬é)˜¨w"´íl|üÕƒŠ™U£o!¶Hãur¯0 ˰J’FV ,ˆTš6[e^F¨ªÌcUøBµFéÿÈŽm•²}gä âÄ ìH«T°é¿Úåö²gpÔd#bŠjkÌo^øO_z÷"ác=2c”ŠÉZñR ߪšW+=ì­E}4RüDmR¢¢‡r7þZ×®JÑIŽ“ÂkÚ‚`gQûµ©—&¡‰ñäfvg ÊîB¬’zj¼è¥¿ù"­d’ðWÂúѱàx’µuäë¶ß³„1-iukåA’I%fSÔaB=:mÁ{/Ã’œ¶ø,Fê·’N°^ºÔÊÑšÑ@T+ &µ¯  rvÈãGã£,„î¥Ä‹éÈÅÊ: 4U£ž>ܲUa¬óLµ;© úŠ/¨³*Ò'Ø(äB v¡ï•cžæÉ‚I{dýÄ2*¨›ÑVx²Œø¹oòrYl‹=ߥŽ*^ÁJÁeè»"CpëÇ‘PAI#ƽxäe|_q4µNiuq½е÷%Y@ëʹ,_HFNjš»4–v¦&_M FçRI%‚íÓjҟɃõä«¥•X/6$g›7 8uV 7,Žn‹‡™J­ÝœvU‘y0•¨ß¹â'‰âÄþÖ]Ã×£Y;Ó(Ðn@¶è ˆiÏn*ÇáE'Àþ×ÚÌ\ñõ[v mI^«j"f2•ä^>J7ª8%xÿ2Ð7û,–²ss]¥Ê—¶ñGÂE¸•Þ‡âøî¼T|Y,¢¢Xb6Bwwë=«qªÈ§áÚîûL|s.IH¥ar<‘LqÇpÕoˆíµMfÌãÞ¬ÒÛM+°U2iBÎÀ#öÚ¿,$Ž^H¾ÑÝî-eE á¥ïÁùzeýµŸg€,¡vÕÅ#å°%Ï (Àz‚{nr¸P-“6R¯ ÏaáOT !CTùlÕ#öÙeÞí$m²Ó$KsB1 + , *¯ïvø¸Ÿ—ù8v¿ÇóQtiELŸUšúIƒ¿ª¢5§*ó§Cñt&«üœ²\¤"Å”ïR¸š=4˜ï=99hèÊ+¿ Ä}½éÇösä©‹‘$mB+~`4Qzª’·.c&€Öø³.; h"Ê«¤¨T±PÀ!N • jkØî­ŒK­íÜú24Ÿ¼šJ£0-EP:Úâ ?Õû8™lQ[„ÃStkSê(_T«1§T§ìåX‡VéžT‡I¤/Î6ãB>>´  ZøäÈÝ…ìQ,By”¿$Tõ$ubª9}¤oóûY+$ lWÊ_Õ%Yþ¸Œ©<‡ì…”„%>/„ÓJsbŠª´€›t 8¯}ö ·Ã\§ ݶ’KX$–Þ0àÈÓË$°ª»)‘ˆm¿dr^ËOɉæán=s¤v$Nò1(dâ j¼‡ÚeÉDìÂC¢ßIV1ÌDòDõ£ñ£q;Ù§ÚÄó@hGq'¢Š 4¾Ÿ)h¨Ÿ»ýïþ¯Å’B«©]>ædãÃŽ4URÜ÷™dnå~Î5êEÐ¥ú=§£§îåxcIQ_™<¹W­(Û/ùXr›)Æ(‰hSѹ’I”zn«5ÃŽ¥’‘öûmËáà2“d†d€—V—<)Kp3V¿ÊöɃ[±)Å…¤æ9,¢HÈ„ìÍÆµâ¤ÖŸñ®S>mÐä…·µD¨äº,@!ëP ]» ‡ÙûY;²Â\”¥·ï&‚)(G¨Çáø‰>?köMr1äÊ}od‘¬Ò*…Œ¤Ÿ&©ãÚŸ´û²ç—‰~†‚ŒÑ ˜ÝÔ<¬nÝ”G'¥åoæÊó é· uÒYµâÏïT#•f”½)JøW—û?òr0S)pXHaÊFą̃ ±@ƒ^-ñeZú?ÿÔ Ÿ¬¤‚7D6÷›Ô[hàã”jû1§#ßäÛoö—"e{ F—ÙD†ÊXÝŠ†þòÕ;%Ûàn´û<òîÊ#b½%wÑ£¶1—Xä’knEwé¨ CÕ‘ÀÛaáÞÐÔ…‹ÁÀ‡J;²ß¼GÄd³F9~ÔûørB©‰çJO…XBÈÞ‘–2çf*)¾û3á'o’+u-U§2A${ðßzŠ’µ©ürQ"ÈD†Á©.e68ÜÁÜ}ªPÏAF?ë`áÝodu»K“ÀHÊþ—"íDé_zýœª{ËÊÛc´|é%•]B,…‰àYË7v¡þ^Ù’ãoÕ={Ø ˜…Œ2U¾U¹öˆ9X¶×$ËN‚×Ðub¥Ba^'˜UP”ÿ+)œ‰¦Ø€…ºz·Ò™~x} ‘È%d¯òŽ\9å ]œÖNÅhÎ×/EÆJsƒ)è*M\¶TÔ Fê™Ì‚6h%,ü˜…½095ÛQ‡\«Ä6OÉÄÅÊ9šOOÕHíP F á¥yTí„Z ø®­Â0D2œñmˆ òÿe‘á•›V£.Êôf•j~Ó…|Ct ÿ+! èsþÄÈÓµ0ÂN?y)å*¯cû=k¶õÆ“>hbÁcP’¯¦¬ê_šökÔ-~-ŽLsch…ôÑàV‹ÑTÃ’(ª£¨ïLˆä“ÍÇ‘.#£1f [`ÊM;~€…IMºÂ!þñÍ’ÀDmí’ÔrL.§N1VFôœ°åP(GZý9P –¡5Ûà/M©ßcã’aM;/8ï#Åè>Œ"ØšMmÝ~¯  ÏÅÕ·ÿ5Êåͺ<’©3Hµ0R¡iPy9kþ¶Z ²,¡‡ªôb@dpÍÄ| „íürgfeëºH$*p âzŸžn™µ/¨ †MöÏ.•#¢î^`€yJ‘3TyV=[l„G©³¢W#¼¥ÑMV”Š äÀñžôpÓ%ò¹}.gšN/+TFwš.Õ÷ïˆç²et£Jb)êªT,®•=#“Wö7' ŽöˆŠ –¡ãº *í'.(§b*[™?Ê£tÀh¤XFÞÍ"Æ…—›ªÒŠ´ß`_b8Ñü6BYOpÂIB³ ~–«ÄÅ­ìÕIÉýì%u·+5AæŸ -ðÿx x| òq‘½™º¤ìܤœ”ÛHÒF[–Ô"£®ýp²ot¾Î'cÄpžÙ#ɯ’&SGŠD$ú„:ºSb?¢ýªÿ.Fº2=êE‘®¤jSÖV‘#©­v²ýÈÂv£r†x³j_‹|F Ón¿/öX’…f¹fº6ÜÐOS~F•ðÀÖÈ÷.™‚(^¤”5%XõÛA áF`r—…â³^ _£MZË›¤x¦€:T‚+ÈÅGSÿ¸FÅ䄊C-¡RPʬ¦TñcQ_§§ú¹#´˜±U²WâUÛJûT+ lÏêAåê|=9>Í}†J\‘ÕiëÔSPcçPI ƵkñS hcš¶¡,¦àÔÒ1­JÓöè´#þ âÈã2ÈRôy€2)æéZ€ÆŠ‡að÷?Zi¨Z¥ÔH±Û y‰¦õ&‚€ôßÛJ«pƒêÎ"‘YèÈM:ìŸÛ©ÈÇžì¤Ò1WxÆì¬CÄåõåC„ ­IÝU¤âÌ2T°äT ˆè+_NŠNêpÆí"Æî}9€Z( 1$’w×$NÈ­Õ àsby‡p~(¼¶Û–FA1Ù]ƒÉkWPÎ7k@:SÚ½rb˜¢ ­ dTŒÊ½0ªü¹W¦=ÉC •Èa#„@4§ê]°ž ‹ûË’Â æ(ÌiÅxPkÄ~ÏO$…ÊÑ5·ÃEf8€Ó욎_-°º/eD¥á`ªÉ_ÝŠÔŽTa¹^8G$VdŽòe’à!=(‘«F*IØö ü?̓%òg ·LDñM¿x¥„þ$  @†¼÷̰z—÷.‘éüä”—ró;ÖŠÀÕò–” ÿ[çÉä¯m G¨X‘VŸŒüyŸ´œúm]›íþVFgbÏå¨Ç iä4½dY¹©¡Kmû‡ÙÊcͼ”/ÕQÕ p ÃY>+(°ùåÎ9Cɧ$wBîð,Šó‰U¸€ÛíõWû9!-¨ Ðì^Ü%´ À$±!‹HF¡jF>'oò²{]” äšêÓ,§s‘ž+Gç@x—©T“ÿö³õ&gb•Ü]!Ô!™}6‰-åàIfŽ"õíñr ™0§âdM¢ç’ÙØMm Ýáõpå"4Ø ñ­àr t(=ë%Žkym}.?VdˆC”cÂYËÔôåýÝ~‡AH …K«ÉOpÄ·¢ò¬`Ñ–E‹5*>/—Ñ€€Ì•‹4ŸWÓ„®%º–$’áƒ_Š|,~Õ~µÇ$(Pc!°Ýi»ÜL«4~“@TȪÍVø›:SsËöòd°dIŽÞÍ¥œ²žp$ÜëðÆ¢”Ðÿ/üÙLj”« ¥)¬LÒ‡û ÄÙÞ¿i#*1Ktz5/Õ¹Ç ª± ñ¯´†+^«öxÿ²Æ$Òf­s5µª´¤%ʆp¤F$$¢ªŸ±ðï×,«÷5–÷a.n (’Y JŽÊ b@* ìz·í/Úo‹ Ürºêõgdâ²ÈrzpTqæhÕßnoÜÿ±ûXb)ZMHÌ#ŸÕãT[bÈÕ•nàu¢Ôª«ÿ“„ G5ynæFK )(ôã.Ä(Z¶Ü;PSk¡ºXío=uG2?«†/ñý‘¹ûù¿ÉÊHÜSwE,¦î/V$ŸÔøãŠJ²µP ;(åÛùrpúZä7M-áŽÝë*$iû‚8ÈÅk³¦ÿ§ör“¿>­Ãdº;¶¸dgCÅIhMH`>Õzò q˯›ºØ»¨bcárÜx’ ôž‡””Ø20ÿ\aK>ˆI.%ºýÛOð4Å£˜oDaÅ_méÄe ZIÙ§Jñ±ŒÈ¤…Xœ¡ mé·z|+•æÝ³Û-ÖŒÿ»›Ô2Æü¡5v¢š‚á£qû[ã‹—Å–^ï$¢á˜À#Ýùz|c'á" ÕOr@¡ÿ'-í$tÿÕ šèzíè«¢L¾Ÿ¢Á Ic?µNÀÿviû9ųØnèe›ÐƒàuaÉÉ^ƒ UÄxßµJÙ¡³ZSBÚ½¹œ†BÑÜE–Ŷ®ßg'?¤°‰ÜeìBK“ D‹¶?¨Êy”Üš¯Âå—âö×!z³Ýy­¥MÆÜ³BÁ¤`AZ7½ûõýœæ-ÑÙQnVbÔ‹Ò7u%ä öo×oÝ®G‡dñ_$\àÛÉÐá!=Q·:ßqʃ·Ùl„ä/fPzC+ÝÚîbˆ9~.ñ-²D¼ò˜‹ô̈€hŸï¿ãÍ;‚™F«$ˆ°’Ñל!~@|GOn_gö³^m°È[x$o®"ƒ-(ì+ñ#‰?=þ,‘<‰c\ÑÚL­-¥U)'Æ’FÀ&Ãe nßµƒ1Ý–.H/I~$‘þ5Y€ßˆØŸÕ–@µÍæFç 0U•]„NŨƒÔÿ«ÌŒˆ›8ß%$ýíËJ®Í6Õá¡ûa<˜Šµ˜„Žd’(Ø¿3È). Ò¾ÄuÉKé@æ4$XWâ0 aÈô©èß?ØÈ^ì€ÙMaQ§r,}2’„Ƭ(Û~ЯvÂM– PE¤1ýKЊ0$1€8f4BÝWݾÖW}O{`rXšyº”F ŒË…ÊT— «—™ð†¡Juym"Ç$‹¡1­Ld´¤ è>ù§1a!ĉDÑ.”2Y´6ÇÒ2#¡cð²»xí¿Áÿ–FEµÊT(%·´RIäÊœ|)VwU&¼¾Wÿ'-‰Ý®Ce±…õà¨-NŸådK'\p{SÄþéÝQ‚‰—s±?dÿÄpGêIä—r…d§ÂjV r`j7¦YÄÖcÉqÿPu–%È¡˜tà§ ùºd`wÙ”†Û hàÆâ‘³q$nx“UŽÿä圷 ·—O)n+è‡QχÀ¨ìü8# ‘²²þVyíVPÇ`zŠÿ3Ó|°™ã äÒŪTV=Méö°Ý±;+A'¡,“ª$Ц¤ Ôƒßâ® °Ë“WñH¶à´MÎѵ+¸ Æ¿ë·ùXbŠæÔJ“\/Í©ó]ù’ ‡cQ±ÿcŒ®“ Ê…êN‡öƒ¥$¡§ÂËÔÓ¥N5H)½œ‚[X/ÀÍñÄkÒµØÐì§ör™6Ç’Íg´†j„4Š3Þ6Ú¦”¡©Ë$v `n©p….™ …$lÃìò©ßé­2yµh \o²2%c<7ë!=}€Ú¸Àì² vÎÌsšV%-Òª (XáüÙ) ˜‚ÜLËt’2)øtÆ¿ƒ³rù“†\êLÄž¶«7!S¿@iíöW‰\Öò5ǧñ…[‹õ©í¿ôƒµ£­+Z‰=3Â3%]“ˆ@©ð_òpH%°H±‘hÌ„‰Þ”éÓz`½ÓÑlVbY–w1Ä´¢‚:»û ÿØã.A¥hà‚ „Y eRdeaÃöKŽƒ—ì®C¥²ëMˆæiÔÌÿ ”cR ï`µã¶J ImV„:ÀH†e¨ØöþŸ³ñc}V«eéo›â9>Ÿ*žƒ©ÿd¹Z(˜mš=E¹Bˆ~?` ^Uý§oøUÈ’ YÖë#[YRX¥nr=^CðÒ•¡Ü òìá¾JG5CD© ÊÑ/Åêñ`¡Èæ8÷ªÿÀâ<Ø• 7d+' LHØ’®¢MCTHM GÚlœ‘F¯Ä~‘Ý~«VŽFÜž ’ðn_êä 9ÇÔÏ%ŠÛ¤Pì°F[á #]ØSöŸìÿ.ZNÿšû‘3Í ÜÂ$åz ¬ˆ¤Z) ð²…%~ÙÊãȶˣzp'¡#-c„ÈŽÍö¶ hFÃn§ü—Ée=G›^1_bVhmÖƒƒq’y±ÛýQ×ìäÑEª\¯ÖÚ&„²Hª¾³mð3(;ü,¥²¬CfyêÚô‘ÚYÀãÔçÆC" *Ý@æHe.A¡][»˜ƒé(! OR>ÇÅÇoøÛ~AªÊ^g¬yst†&±‰˜òcV©¡ßvþ\³=ØeÓH¥Ó iPÂjY•hÕäÕ$µ?—ìÿ“˜ùǨ·`>• bP÷RĦI’U ö™> mÇâáÈÿ±\8Žßœ¡¦ÊÒÞZJäµ"3:ÕR€G2sðäòm× Ê|kèU†EgiC1 °£/^‡~¹Š)Ê!$‰¤Žá$#÷Ið£²óûFHߊýœÉ—*qº©™œ::p0–¤dT3( MÈáÆ¼²¬…·L@ ‘ù,£e “ºPûíÏ)æÜ))ºŒIñ•g”áØÐ°Z/ZµüÙ|KDÂGŽ% „G%=AɤŒ+ü£öWöÕÉKi qkéRææyG$#ˆ–â~J¿g,«ú!ˆ5ñO5øæ’Ë‚+I! °\ÛZòØüóÔä䔪ñÚŒÁƒ´n©@…ˆ<ºñ>Öd@‘“T†êR™Ì-O…y  {ž‡nßk$äQFk{kë)ÞØÜqŽ©  ¬œ9(wÉ¶È ãA”¹«_ÌLJcXÕ!ŽN,v *Qy%>%!ïñl‘Ù«°eh9/6ŽÜÎ#F­Üv¢ÔˆëýdKô!bYçäLdòoV„pø@`«üµ93VÂÈ_´×¥y«F«¹¨eT«½8©ß #dQÝj}KâabȱˆÖB˜8šW¥k€ý?Qú›¼,“ÈÌ+8cWvåÞ•éÕr¨›ºH+ËHæ¹µ´šp8 M$øG2¾-©¾\ N<·;©ÜÏÊÊãB‚8ÔE þU¿g%²$ZY´·ep¬"•ÑÀ©E… ´OĘ3ïSËà„´€3[1I=GZ+ËâäªÖŸµ–Ï•1‡;Upò#"°­ÔŨIåé3|ðb¿µöq䣢1WÕ‰®\‘ (ƒmг7Â;•_‡(<ÛG$/³ð¯òåŸÂÄsM$X›;FÑú‚ƒe4€¢Ô“þ^ùGVÑÉ,gxî(‰o‹öŠ×#×݆[·Å;«7¨Ñ­Ù}*Ö äŠÈj"ž<™[ö°G–ë>ihR˜jîêŽEøhj¿ŽG¶Y{Û_JMôµŒÛ¤,Ä7(¹@ŒÐОë_ø–cd%È… 5yãŽò>)?ø¤%¶)·µþÇ.ø¯6¼Ô>H)‘® ÊòZ3Ñ„jÕQN›þÍ2aªßÿÖOfìÜ+!Jð‘·.œÚ2(—8è’õÓêX†[‚8*(ŒÕ Ss¥§ò?Äl&ý#u‰§×9µË*"dV‹Æ€ñ%y|_±Ë%/§“ý\Ó M-¦‚9}vʳ:Í#¸ˆÔ*ÐT¤ßh'&ÈãêË"LšÞ{9ÚÕÐ2‘ÊŽ(U–´`NÁH+J`˵ŠAPÕ>ª¤O§!ÅHõ‘~Ó…,2DÖètWÖ›âã ­¼ˆÑHÄ“Å)ÇàåÊ¿ådwPÈ(O}pÌGéPx·U #$ÖÆ]Á^;Ö¬~¹ rõ#^;…E¨&´¡¨ÙÚȘ÷$K½l\#HcoŠ(ø‘Þiœó§ûÙ3¾ßŽ wþ=HýQ’5µ…çeÊÑ.ÂMûíör¬[ÊÛ2l)΢Úg£;sæžiãQüØ@ÝäºÈ":¬ŒZ×Ó%‚Ô3T‰=°ži–¤“M"š– 1﹩ãB}²$ D«Sí°f+ð±Zq}›â퇢B¬Š?GFä/$äwFÄ×ÈŸ©ä†·,YÕ«&ÔŽ‚‡§_¼äˆØ1tê4P–˜rY ¡4ÿ¬FŠ’³PÖ‚B ’ÔRÀR£­Oe푟ÔÎ72fuZ%éþ쨯¸#®Y³ ³KÄ‹ÏzåØmZ{áb9¬˜­Ý‘ô¥iÛª¸€‚Â6«µMGŸ>UÀÉtªÆÙOW+Zôïòëƒø™ æeˆ¥9U0 °âđ֞ y°#’"úR(Á`Ñ1¥YýÉ€Ù{NæW÷ޝòAZ‚Xäi“­¥ºãðÆ¼ˆQ”\¾NTÂ6½Š¸©«ftdóAZÓç‘6E§”(SáXzÑC0øØüŽ ²‡4<$™¸ÊZ’©‡ˆ"«ïã\'h†#r°ˆÚZ«qpÅ–2 qÜÿÁøôGUW˜-¬[·¬éI'ìñª¨ §!‘Ý‘r~ð KÌÄŠ G¶¯ep'»RFÜÈ©<”§€SÕHeÉ#§½Fô¼È-ÈC±SJž´¡ë°ß# êÓ?'3³Ýš«tr¬wß¶ø‘÷­©iüX¤U2]UcpCo·qñril9Ò:õãˆ\QÊg µ8ó jÜ;U|r˜ ¦Ù”¤· VõÓŒ–*@;l: ¾C›E슺ˆµÔnñ¬k`…V õ$ò©\z¶A_M[qÉ ¼\U`ìËÃÚ¼»a˜äÂ=T4Õw¼ ê‹,®% Þ¨ŒV ü€õ%#±P7VÕšu¾0ÊT &`#šÉN\H&µûYVílóMFGŠp –bøcä†F ZM0L¹ËHF†ÖuO…h"N#íTrpIñíü¹^IX ±Æ‰Jm¢‰åœ/#fœ˜;ÕV0¤ìÙþJÿ•™=üÚ¦œhŠòX¼ŽÁÄMéªôÁ;| þÙ˜[q-bq-óp%QU ]èò2š*Óý÷ñò̭ң­#:†d&d%híñnzÕüK'$Cšg,!¡•QL± xËŠPWâ¥zµ{e½(Y¸ÀŽª)òIrÄÉðª†ü3(Ž÷줂T¶€ÉñiÐf ²’7¥à°:'m£PHËIäD©PŸ´iMÐtje%»|ÈæxÙÆ3ÄPP3§`»w9XÙ°î)&_MdãD‹âõÍIp$¦àôß윾š Yšg bÄ2²F“ô?µÄ éÅL7ëcG€!ÞY!õ% I(‚) Yw'}»Ÿ‡ö“%]¶èíL½¬‚[Fãm YöZpuÙÐîwvÛN9T{›e±´v‘om/¢’YŠFÅUw „õßéÊæÙy’H¤hänJ¬CñãN^+Õi—ƒaÇ1¢·J\iÍN@Éêw¨ßâØVœ ñÁ’Ä ±ï¯}m4\6Î^Ú3¹b 4|h6üª)\”grâ®g‰Œ¢Djݧ.¬VÙ£ŠE’¶b8¸$î8íß!˜+e‡é¦ïc0[ÅsêÅñQˆ`W–Ç`(¿ädžäJÀÝSMQ-ÔµŒÖR­§öwûA¹tß*ÉÈ6cæVÈÉõ‰xÕUˆŒììOJuåí’‹j¯i%ºV“Œ´å‡_@>ÆFÎé4žE˜‡^HІñm¨zdë`Xß6­®Z)@™Ã|ºs@¤þÐ=)·ü6:y#‰~žìÀ@2îx’hTž¼GMÍâX$,ZA¢ëé8´OÁXТ¢­à¬:W£d`,ÒfigïÄW˜zo@¥Mh‡À~T¦9,IÝêú:`™Áf˜©+ÙýG§AþOa‘ä“´VêÍñª€@êäŠqRkAó¦Cddæ”B_‘wR®háFÛ“²‚:|;åå¤'­’pPçý9²–¯Äûݺÿ.b S—V‡X®­§_L ¨,I$òû{ÿÂ墈k6 ò¯)MÁ𬿽+¹ª7e>Ÿ¹4èÔ‘|+oÓžÕJ5jw¬(½}·5ÄVêG%î“%„Ê#ã‰X«ûMP¤w*Ù(ÐFÈ:Ü/&"Fä†>ü©Ð·Úë’Èva³[M)…$^.Xz¥ßŽÀû?°«€Dn½Vxux¤ $pËöâ 6¡}ò\űäéùÛúÅYVãá fJAÉE„Ð÷ª÷6NÈË)]ø©ýà›ä¡±;‡YÝ´ñ%Â9E¢Hø€åJPŠäe»–&÷W€RBJ¿ ¡ãÈOlä˜ó+ …JªýÓ½HARµÃ0±.ƒÔõå“€ ”’+N/Ð2¯N9¨$óLYn¤’(ÅH9Æ£~Ø{14ÊâÛ;ÙѿקTV  @Šš¶øûÑÓeK[hxÍIÃ*PIJž4<Ú¿<Œ‰eˆ™•b@²)iñwR¨=˜üûb9©u‹²ZË#qnlÂ(Õi@½>“N§!cÉ?WY¹*±ø€Fô FÕ ƒña’²À²ÊÌŒO%qö¨ÍPNÙvd9¯˜½¼qËJñn-_†¤|_êš÷Á–ÍBÑ# SËŒœ¤Z’x²R‹ÿ  tGëÓÈ5»ÎdhÀ Ý ÛùNJR±^JW\j $‚Qbn• $’Gó.DrI(hn‡¨ŽÚAœ×í!Ãn‚˜e½ºÀÊ· $qñIe½¿ ]ÕH<+“4Fìw˜êm!i}8Q¿v™¾-œ·Šò¨ì+Ͷ{¥V°ÝK!ç,r•zúnMMiÔeÓØüÚB"þä ƒŠ—¨1”ÙKîkÓ‰ìÙT’Îgemc7®Ü(ÎHôú©,*>/ö9,€F>e¢C!¼YM^8ÙÀ=÷P­S¹ø[®Jgf1…[øRkÙîeg_IÕMK0;¿ËO‰—ü¬†ƒ,£umnÛÖucÆ)c„@O‡~´øp@Ñ,¤6 µœånÚ6P³y95Ô+SѸøe96ÙÃrHI^D’+˜åb±ÝH‘̱ïËbw¡¨Xئdçjšsåè=!˜ä™eýÛ±ä~[òñÊ3óm„Õá xf¸™c£;%ì8öªÇpâ;.Jµ}.ù5G(Üü2-v~Ÿ©½NËöòSäÂ<Ó cg†`%hÙgŒÓfUÝGºƒ\ÇoI­â(-ƒT½Ô€”öëÿeü\ÚLVÀ‘ˆcâ• •~:Ç«)?ÍM¿àrDîŠÙ4±{jÌñVTz9,=5,¬Ýwÿ…ʲ éž3µ¢ÚUFÊp~2µ ñÜ®ßïÏ*nI ª* ýÕUȯ!AÅiðð,yò?ì³#£Ž¥$n®"u(U¶äJòb ”2qbT,_ÔÕlåô¡â1!ä 8Vb?ÕãŒÏ¤¬¨'ÁáfÙÖHÉbß) éöi˜Ø÷?霉¡gk„¹¹Øª¨.ËöXW¨. (?àòq7G«r)[Í,×IB#1D#t5UrH;o_‡/ƒŽI´ÎÆõí®eY™%Ž7f$Æh9æ#µBTb¢¯|ÊDr¡@¯$|¹Õ•Nõ:ÆÙ \ëȶd;|RûßM.®nû•.€Åxª¬7 oµ’Ç|!†M¤Uîe$bRJ£*š ¹$ÑMOÁ¶>䀒ð(21#¸f¥WjÀxÖƒ&Gͬw¦új4Iêe“áU!ºT×o‡ª¶C) ¸B¥Ìñ¤¶Á‡%yy4 E.dQ^<¾œ¦™n—D¡Œ“ ¶Aéþãx€û¤?g¶d ©Ææ¹"Aê) ú„+E¯îËS™û58AäÄ„HžŒåZ£ôSaVp> kû;d©Q—,mv`TR$CR Ä‚>]0–šçH{§•/-¢†e-**?:§ÙãA·Å“‡-ØËžÈ¡pí2Ê«ÂÞÄ(ĹãR+ã^ŸË”¶ÚÊ,£†îP Òúuà»á¶Þ«ñ”A•€ÄšÝ;³g1r ’DøT äµ°#â ½Y²¹ól‰Ù/½Eši •U ô€øTuèMhÛ}Ÿ²Ù>*¤U•²GÍáYiFJ¹V,c@­¿p¸ë4¾ Ü ƈ’ ·¨xÔÖƒ‰©ñ²Ë¹5i­¼‘cHá-3DÏ.N‹Fâ;òì2ŒœÛ …¸qêUÁ"Y™dg£^"€ðÐ.N$Pc1Í Ð-Ø¢ô—˜$Á¯ü÷É[ÿЉ}amµ!ÇêE1- ܾ€Äµ®qü7îzã*•w¦vð­Õ´vÓOV6xI¥ ‰öQÚ †§Àüßk!#EœEăÓênÊC>"ã`Ó‡Ä?›&y[TGª•î͵Ç !Ú{e%xµ:ÆOì2ïö»ÈÂË)ðµcÃk{g9>Ÿ7Š3N%£°E?àE0dEsÿ|˱ºÂX綨`̧ї¡`@4åàE7Ëf(ûÚÅÓ¡)4¤)ŽW*Êãìì(·_µûK”åÜÌ\Ñ“4Ö<+é‡ïŒW‹x²û}¤ã‚;ïLû’ý Ti' +èµZ¯ðªµ`Mòyz0ÇÔ5=ÀšÕI ¼bIø•ëÄ·ú§j`ˆ¥‘µ[ r’¿K ƒÒfý Ë¸PÚß~_êäg¸óe ŠI³H«Åå•c ƒÃˆ#“ŸÇâý¬1‘抸ô¦’ÞXz&¯Ä ©Jštr;îz îYäø8µvðj–î/ù98±<Ѻ¬kê4e’Pþ­Û0ýŸ‰±¡;!þ³*2V,ɱ$¨`vØÔŒ#’È›T»Mr#Z€Ã’5C7Ú‹JõÈE”ͺ8ýb:~è5§öKö|VÃ3É܆_F4ãÌךµkJ=6\<ÊI½”§’IîeÇÒ Yµ4QȲüÇÃ’ŽÀ_6%,™¸‹ÕP 01¡>ÔÓ©Ëy¾¬ŽI]ÚõÉWN*}B[’ü; ûþÖb× äƒÌ .šj€ì=pDj9r'ÓåôŽ9l{ÚÊ¥äH¡•Ù„ì‘þù[`£zS¹ëöqûÑ:Cñån¶á(–ãÔb‚…@ õ¢­Ù6Híˆ.„ƒ<†FYŒ±Ð^(9=ÏÅá€H¦C™Fi°ƒq1œRN*#”ž¿´Ãˆé×áÿ+#“`˜îQ6¤K‡‹ñTš‰è§°ÈDÐ-“PŠTNÑú|J¾è»°;«Üáèê6&XR‘Ô¹Er%hkʤv»>ˆBÕun** ¯Wªk*ß%vPÄ/Õ‹H4ëö|p ­š4´éŒ~V&!v;–Ør=}›V˲¡1É(¡¢!·©­mF¦% i Þ¤%«ÆiM™W¢óÉRN-ÞÅebμMd‡jT®U>m°ä—];=Ñ·;¡>%ªHö)J¶Y³ ÔÙneI7oŒ)4¸ôùŒ'“ÍFY_Š)5§ìjïµJºfõ ]è­Ç~› «ôäBd¹DeS!•¸15*i×Ú½r2ú™Ç’„æxš"K+ª° ç—:¨!ý†ÿHìܲ¸¤åÉ¢y.´fÜñÛl<Êÿ Jp5:“̆/@FÅJü tS’ɼi„hV²2ŽRr 3ÃØÑ™G·|Œª¶æÎ7{¨¥Ä³jU ñÌ!dARŒÒÊZO‡e:¨ùZ/uDµGwº—‘ˆ¼¬é¹RõøEnÿñ5²$¤Ê‘ñQöÍÁy}ê#¹a½]©ð°«‚[|Yö+?··YÊüjñÉÈî}A»>JõÆšHªÝcj&uÁ{uÝÕƒòP ¯Jð;sþFË%³›<Ö¬ˆ×aUôÉôª§sêñ.Þ>Ù) ˜‰n޲qH¬æÙ‡ÄUš¥Fà}¤<_oØÊ¦,ìÏ¡º“‘™Ô0p}e ,­öÀF楗$9 ‘hûøÚ;ïZbd(z…ø]X|Tßâ Ö™ˆg>{® Hú‹ÂÌÀ‡—ùo²ñjËF67T‘Ì|X£ÂÒÆH¦ ñ2.ø³}œ®"É‘;y¥“ÈmÞ[Z4@«?¢ Š€hûÓfÿ'%Ïv<‘Ww5Hn$„|G9ž$²Ò‡n¤ƒþËö[5ºQ–`ð°UzÁ5Sðÿ”1?RŽK&Šy¬Œ2€÷(}zk_ÀþU_ /$LQ^,¬ÐLQƒ¨O ÐpcÞ€¯ 22´=¼f)§Œª7û¨ –D®êkü¾9;äÇ«zy—ÔaÍC…'âU©×ᨥW‡ü¬ ¢H'S=ɨR•â@§m¨?g†Á”åxÔk¾\iIJEŸì¤Ô~=0Hë^W2úÏË•¨4bXŽA~gáȂ˚*æ+—XãõœÌ%AÉ ›W¾Ü@þeÊáÏ—FÙÝ%³Èë;)cvŒÉ”ª„7rصM¬ÌH•ì‹R q!¶øGv>'1iȇ±¤Z|ë&F)Äo¹BH-]«¾ù9ï&Ø*Ú½ÂÚË)%î$‘a`QüÃn'¾FU~L…ÒÖc$WrÄÎa‘®ÒjÐ-B|$÷Øäç@ÿEAæ¼[EÕ¤¯ˆÄ×*7bØñXaM»ú•ž"îU^@•Ái·£ˆl˜Ì"UîÌrâMðPí]ò1 $LPFÞ”P#pPÄ: òï_l‰êÊ* $8ªÁMIø +_ 2; Dá#³¨EjÐñÞ”¦Û“€”Å}ÌÅ”!åéV2zÐÓÇßìãæ²S´b.µBjv? káÔµ‚\‘M=”I‹É&£ Ô·þoÚɾä÷*޻ǷâÚY*vãL„y&\Ð7‡ÐR¼¹‹ª 1,jâ½Ù8îÂH.êþ;µ·Ò92¿iJ '*Uv8*ÓÄn‘ZŒ÷1Da–^(Á@¯ÂŒx¨¦ß ñÿW—,®þm³4– ºú“ˆ]yË蛘â I<ˆ'¯Åö¾Î^yüÚ7«UÔ=a ³ÄÌFÜ€;,ê¼zñÊàEYËé t¢°Gt®YÓÓDf€zžžù,Ýâæ‰Ñƒ‹ ª€¸ŽŸ!_ˆvß¾C ÚÓšë÷>½ÀVu¯¦J‚£ñ±þuå]Î8†ÉËÍvª¹‰¤âÊ‘“Èt2#Q@ñ;~ÐÁÍ”¹^‰MÙ r`\ï¸5#áÑrº.#Í(1êB 5Y%@CP?”røòàzù0—s"Ñ!•-¦(kûÉÊ·Âè(Cò=èO9VmÀïg„QKµBRáØ xÌL‹]ˆæFÆ»¯µŽ3²rj¶¢ËVø“”¦F†n‚¨‡® 0tâfEbdä#1Ñ’AÉ—jrâ:òöÊ ‘„Í]"±1,aA¡*ãZûT‘—MEAVCLõ%OUy n@÷ë^UÃa‚qco'(¦Qט#f4àêv¦õ!2Î1–àRdôÀ?º‰–‡ˆ¨]É©Zʈnºú’3Hž˜æM²…Qk]»oO‹/fž«mÑä¹åTÊÄŽ@4gгw “Mð‹ŠzJ“{e$“µÀ@X ýÕP±7¢·í~ÎO(ô‘ýT@ï~ôÚñg†ÚXÂñ™> ¼}@©ñ}’sYݼ„Üe./bD(Ü‘«J³¨#®ãnYf3É Ú[KˆPñcv[œŒ …VÐSÏm›ù~¿Šâ\p=Acy|Ãxìý8•RN± §Â»ƒJSý–UuïfÈ¢5™šÌ³HÄœˆjÑ€Û·ÚÊñõ?Ñn˜äzqOqpU?{"ÁÃ%Vµm†ÿd­–ÃMy9ÛWknÉor†%}bµÙv /úÝÎL_6³JÅo2à 8‚)$@Í&ÌN懹n+’vƒUIÜ dfDÊ*Uœn:­ =×(Ê[ñ€ (\µ¹ºµgz$>¡† +ÆB(½·$òÈÆ÷ófk䔬ʗ3<›­Å¹ Q€i)È–Ù1î?¡Ç¥á‡2°»HÔhv?ñ®J˜Z„P²'ªÈ¾²ÈV5 ´ZÓjTý¡×?s 6T’ 94•a+(B­ÔºûmL2û‘jíÉndd·&y\*¢Ó™rÀ5;b9UôRwT¼ŽÔ+*²¨,À=TJ'åP* ~ ~ÖUÛ$%ÄK$ÐÅ2Nˆ¦áUˆ$Ó¦Þ ñmÇ,‰îk–üÓ Y§¹¶Ž8U]Â+;„úkÌú Ó!!ÌÛ!.ˆ¦¶ÿr1z1+óU@ÄQZ‘_¿Š·ÚÊŒ¬7ºW©w¤ˆÑTUT u5©¥Xü'-ÄVR "ƒ'%`¨yBEUh*ýš±âÊŸX@¦°H(覔[[4’Ÿ[Õuc¤† Ú鯵û9D€²ßiw+3J^@}9O"…Du‹r÷¥~ÒäñŠæÆ{¨˜eýÑI$'Ô(Cêl´cû,~µSÿч^[]M¤@Jˆ¯-}‘@P9àCµÞ¹ÈD/'¬È ‚ãë¢4N~‹[‰RðV•$£)>íÿƒ†¾K"lWI <Œyü1—áê(ÍþŪ¯‘'e­ì¨ÜRº¹õÓ–ÎXlËÖ§àÞ¹ 6¶$î¯cr]$úÀgh9F­^¨(ÃýP)Mò2&@ìݤVÖSÏ{l‡ësÈŒÀŸƒŠ)S^=¹|l>ÒåœD€ Öæ9¦0«Û4SIû¶b £ƒ‚~-×áŠ×örŒ€Û~>õMH<(¢Y)¿ve·ãA2ôÝ øò0–ɘ¢•ilÖú„õnIP Ûf)U¯^Gù²Ì›þ•„6%|±€—¶êªÜÁ€©MŽy#˜EB¥½A,N²H哎çµ:uû4ÈÈ!g•d¸JDQ·Rq<ÛŽù8ì@a.¥2â¹ ÄóhËNEh@¡¡ØÓéÉÇv2Ø5ª,bh6,¤š%‹TöEc#’rsU¸ DªÀëµkô „y²—'iŠ$†f`#Vâ]«O„ ÿ r.5d2:N¡· ƒ±¯íTòf€`¶ê‰õÖ ÉÙø£¿Â8®â¾?êÿ.#zMP@[V9R±ó¿¼ÝBµ7=+á–ÚÂk ýedŒÌÜ.gôÉ®ÁGQÿ ”Ëc}ÍÑîCn.–èKÆw0»‘BhO~Õr`íLOz´ÑE=˱¯¢Ÿ?N”N¾9i$)E$¤¸ H¨ŽõêBò­ =«’#dZ¥¡„Mø¤âRŒÔ2žµ? y|9)d rDÁ$P´AÝ—€‘Ø×jACØeRÛ0Fʼ–k‰¡‰9D ~.L„žJ~Ê­kþV ¨„ìJÏ‚9‡"ÂXn|7 _ÚÀ½QQÜ:A>1Eà»òRõj‚<>ÖD†`ì¼ß›= Ð f&•ð]òtÖ¾ÝeˆÄ¦Œ~²ÞŽ©Pwßzí€î™#òÒãp…Ì¿¼RÀŽGöýòæÈ /*zjšÔ”2É$Š€â`,…j[ìăàr[ñbM…;ÂE••¼h¼*=`õÞ»l>´¹(nIYlkIÚ ‰áé’·5ØŸöTí“`©i)ggŽWoÜs v©äTŠRƒ¦DŠæ ¢m}¹õ‰–di(w¨@J¯Ë–DŸK!V½,ã‚Ð\²ŸVæÊ‚hIæÝ‡N¿g"'½w2#e;A*A,’:ÇÊñÆB†ß‘¡¡òäåDýrÞ«=ì\Es¡‚â2¼@æÇÔbãv§%ÿWŽ/ÇôQc´éeµ½¹õ)#Büãæ~Bµj0ý–¯Åÿ‚[Ä&“j–âßT¤¾¯7(¾3Røã£¼áå—c•Ç~a« £·"pcfŽ9@‘‚•¡£tz\ª[mˆô¨K$Ð$wqJ¨ŽaèyÄÇŒ‚´ûIÿ ¼2pÇãùÑa2EàKo%¼6TtX[b#©òÙ¿rŽM×°C3As„„†fÒ+È29ø¶øüYa¹U0®Ñ:«‹‰–õ%n>ñÐÿªÜ™r‘±¶Ùn),>­ÛCqVqQ0#™mˆzöËö—/Ø[@½•¤ìÝó8¼nFÜ\íÄùmʹwfy5=^ÍÙ:| ÀSj1©>5Ûh¢"Å­·–0OÎe Ž\U9„üÁ¿à±"ÂÄ×ÅMûõ`'Ž`ñ ÐÈÚŸä¶"[1Ý #L®% Z§ã#©.½ëàNL° pª%ÌÞ¢™CÂý z®F\™h‹1Ì­Ä„£Ô*“Äòf§ù8&hŽæVHË:Àve‚“Ñ—‘4ÛÜm†[„ntrÑ»1¯Ú)^ª¤m·^½DRæ›_ 0J\βW§R³鼟B1²}Í’5óAH¬ÎtREÂ+ˆ÷N(+Ë~í†&¹w0–çu-XËq¨KU_I"¬g‘æ ‘ÈW¨ÿTåDy£!³îCÇxRÚ¯)Õ*ä ©±¥Ùyd¸z5Úµ³·aê8C3!ê z×s_õ°Kô2V4‰m¤·„³RHâ#½]¹1¯¹§O³‘‘ºH×ö©inðÆ)*™˜ïP:°¯Zã qUù&B— B7¹j=B ±JOìñÃÌ’zÒhžU`j$wtn!\,† P`•¨ —%Ì l|NW@v‹¡ðÿ_{ù(;|ÕÞ"‘ú…Ha@Xî–ä¨h.C™eÑ»Y;„4¡äµê( iÖƒ-c³¦šC V4$£0¨4MêiÙ[²RôåwT¡¨¤véñ¸ÃcÉË Yç·M¿~ZBŠ+YÐ’ÕÝglº…K¾Oz$E òõê úÓí­‘‚H@2½ŠJñ²( ¯O_ŸŽI‚:Ò«ðó“áy8­Y*üþ&^”ÖíêÚôÛ‚UZ#¸Ú¬Zœiû?åd"j6Îcp”…ÚDŒ|VQË +Oÿåe÷dÛJ:òxŒV~¹àDoö¾ÌýŸšøåp‰â,¤GRµ·d¶¹(ñö·jSaû;øá™ºD9”F–!‡P˜™/M«ß‰è Ÿå4û82_ ÚÝLB·ó$lÏñÉ£åð•æ?i|?ÊÇÙ–NkõVwxÛÔ% :UKSa¾X°“¸ý&hxÜ-÷tÔpkÒ¤Ô4Vé•ådã#t¯ÑH$yÇ9CÄP’µ–Œi–GqHžÆÓ}õ+ê·…h(¬~Ÿå~ÎC*ãæ¿V–—ñG,,a¸ Ô'z–£÷âª20lÎGp†[©ÍÙšXª%yBÍÅT)¢Ñz©Tÿ6[1³P6S óÉ©ÄIèÓ›»€V›lFüi¾bÓ” E= xÚCW‘Yý1ZžûW½GZåÀµH9®Äi8e@ðiUB…_Q™«ZôÜäÀ²ÎÈ6î)dC«sB²¼«È`9 ¥OEjñ¢ý¬ ÓZuÉÃ+¹^|H§ª6 ‚ŠüC1ÈÙ¾<Ò7HcãÍTH j‘óòãúJ9™-ZPÒ*5ã®ÄZT½[&Fè[+UW…$oVXÛ×µ(ÚÈx)ÿ†ÉÌ›ø0ÇUñNõ ël²– ‘^¥x©qÛþ1aΜ’½@zŒê>'`I 7 «Ò„Ÿø\»ٌˆßS²‡á˜š† Ÿ„¥j}þ,Ÿ µW¨+X³^N(z€Íñ¤ ;Ó— ?Ö\g°D74˜ßڤזª5%œ7¨±îÄ´¬OL£ôŸstÆãÞ‚ôÖXÉ]"2únGÇTiþÈôËAa „ˆ<·i31ºï²€8ƒøS$NÔÀsµúËãRúˆ¶òÔÔU«Rwø›òCo’ódÖÁ½`•Ù0 ³ г9ëÈ~ÈÌYrDJS»XCo¬*iœŠÐ±ªúk×,Å Y4 —<ø7¡F‘ˆ4Ryñ+¾Ýþ,²&ÇùÌfxâYò^\Sàî jðãßáÉE¨·k,M%¸’NÉ tô¥H«ÓzŽ8%Ȥ/Ó⹞Xظ—n'Š.õ OÙUl9Ü,jÞPY`_†?Q¥rÊÊÔVä7§Šœ2º‚Œ½‡ÖÖ¨ }4’!Ö¼~?&QF›d/t,ÚhVV,¨ ”à>.;Ð.Ãã<²p5ÉŒ·V¶‚O¯±aé©ZÆÁCßžÝ)ö°ÈÜP©5-RúˆKñj£¨ Ñ‚ƒÅ:¿µ˜üÛî¹¥ÑòFB¯¦¯5ÛŠšíßzeÐ;[TÂߘ†?¼l£á✨Õ¶ÇþnÉvÀžHØah´ø#šÌ(kðÔ5zÿ7NYI6K|c°KçÊ0ËÀڻƼ”TÅɨTÃù²Àvø5Ln´´é6Oˆ1âû)WFäj_€¯“›_ÿÒŒÝ2Gé²(Z¡I: 5hµ>ã!Õì'É» 6Þ-6ka1wæÍhبûq;Šó\9$LÿLˆDQéUt‰’n1¸å룢šžÿhS®Î6oåoòpNën‰-eÝ”–üªžKŠmJWÞ½?×\0•„J]¡Cj×mêUŒê±2jü*ÃÝ·òã?§ÜŒWõ—˜ÖÙ¦‡æcÂhH÷yE2EÕŒÂF£Bwò§ À‡#¢¯ÙÈYñüM”TiVxZåÝyI)äLtä üND *N΂r—ií CrÄ‘B êí|?g$~šcv¾êi ¼ãÁ½G€­ÇP£ŽÝ—¦D ‹"H’ëU$!˜­(x)?‘^U>üR„²†s!©/ÌÙŽçoµ¾L &$ýYy”©V¡âh>Þ?ñ,ˆ6R6Š …ü–üùÆ =#B9Ãýa‡d². ˆC¨¤¨ TŠ€­@((E+–Ç«\º:ô¯®Ï°Â"µÞ›Ñ·9 “:µyy´y\©©Ù™övë€Í$ò !E³¹`UILêBŠT‘ƒ‡p ìPu 7¨Å:Ææ„ÑzöTÉõc{y£/tðʤ7©NRL¤t+OÇ+Œ÷l1Ù.š#or'ŒÊ”JTŠÔœ´JÚˆFÚ¼ey.È‘7jV¬´Zx“\„Ág.‚¥ÍºÊ`6¯Ù4é†#ÒQ#¸G²Ã‡¢*ÒYI"ŠAâh)ôdå‘RG$âBòã“Èý¯»¾N"ÈcÞ¹mäúËWR8G!¢«œ@¡ øpñl‚TY!¸Ž6XÔ"¢ž?rFÀõ­r!’¢ÎÞ¬²d‘ùP©UãıÛ!\ƒ+êÔþ§ªÈzjœA¨¡#©È‚¤wgŽÞ>UV¤  ñÞ˜ðïId,‚VŽJ³‰%Biâ Ñ˜Twc’Ûf4¾’V> Ž$Z|@3PU‡o³‡ª$ÒÛm6'i]ö`ƽÀܧ+—6È’¿Aœ·¦ FhCö`MEØdí­XÛRì44êAæiðü² îË¢c"éì¬á‚³“±¡o_c‘—6pä—]À¨,J9/¤²kµ}²q;[PÒ©aHÊ‘'~¤öÉò 5)…$92ÐŽœ«Ç¦!Jû¥K€æ•PPW§§MÅ0ɶb,a•ìÊ«QÐýŸž5ºôC+ ¾®ˆH´¥6<©P§¾5ÎÔ‚&æÐ=âȼpŽ2ÜÜU~°DÐ>iÝ-™Œ\cp\ÊÍR£ryPoü»Óý\´ rتÂålîGâZ>´µ Øäd7 Ü-\OëFcô"s!¯Ã!¡ŸŠqÿ+ ã°é²|“=F[X­,з9+HA%½0¿j”­{•DK)@(,¢Ubj:;ºSB¤…PI?×%½’Q{‚¨ðÁ à—(ñÌŽ4•Èåðÿ+qa“¯±­iÚXî˜úœ‘zÕq$mþIøq!#™÷)\[Á ÂÌ Å¸ˆzO_…ŠlExõÛùxáôÙ…î«Ä‘“¡há§ ÀßiXöcö¿—–7PvV·6ñÎ-þÜs,†9 ) ö©Ó•@4þeÿ+&ÖÀó½sn“C|×·>5åC¾ùH;·VÖ†Š÷ë0Ìó¨I] SÕߢïßÀä¤(ìÆ;ûšwmíÄÜZOMYÊî)âxÿ7ùYs5É#¶´»€зîøÄÄ!dø¹/ùHÙ)tPnÑ|Y=h‘Gã*dO/ŠŽìLÍ5U”fP>Ò@M”㇠ät=¤Ô»XƒRD.em¨È´áÖÏÇ„ŠݯLágpóÅ3«Ö¿e¾=ÀþS·/òp{™K¢;S™VX^ªb$$ÊsRÛüœ„Å2æ¶Ö“ê|¤b#Rd%Ö„qZzü?ìpW¥$ú”^Ùý+‹‚ìáDb>~uøŽJèÜ‚,” ïûãnÈ@„ Toû[øÿ6YæÕä¯êKõkJ*zв#t@Ä€E7òr5r?dÐUÓzr0¸UŽ"hR‹ºüϵŽA¿ÁaôüQů×$1ÓˆJ)Ý€“sCJmóÈãä"Ô¥ 3ÍéõE‰£U%@åÄ·ÚZá!}è—7H–iM@\%@%·Ó‰î@ÙVd0P#rGŠ0êE Ÿ¶ymûKL'½#•+‰ŠFÄ 9 ]šŸ:åUL­NÌ0¢’y•nŽÜji„¨jC4•…y„   oJnÂ@©ÄmºÔœ»\ ϢЌƃˆ£-[ù°Ž¾ö'¢6Ú4]BÞ(ätU$Q‹ñnzŠrû8ËpYu]ªñ'‡Äì¼ÈBMHz¸20Y‰jü”4`ƒJŽGi^´>9"X€Šµ‚8ïöuZ=…@ xÿ/ìd2ò닚_wêUJrú¹"‡‰Ýkñ ޽9&NHÉÍ8Ò•„2Ä€ÇZòq¿7ù|©ÿ‘ÍÞ¸”õ\À³î[×–ò5Iaãþ®0l™sAZ;­ÂGTV‘À‘ÇVVäÜA”­–HXk‹#¢5¹RJÇŠ³0¯*utªí˜¥Ê ºÒ*µ"t-ñE6R¬ü®¼ÉËG0ÂCb‡žkS…ÔqC+¨!ˆ S—ºœy EióZ Ž0oëšMÄÞ0QGed~Ï%þUÈäºeN n#”1¤dÈc4?»¡ÿX‹”Sx)M¼Í5u ”—íQÀ€Nõ?å–H_&±²v­œ£Ó+ ÎPQ7ÛúdÇ67²Ë8¤ií¢DxŸÐ-q"‚bõ¹•î+_…rS<÷P6 –¬ qÌm+: •#¨‚«@vÛw\ÆÇ;7Hk…"îPç‹:…aÈô¯ ¡{rS³d¢vø¦V…™ã—Ueˆ¯ª‘ŸD¨ UkBv*å—DzZÔ·Jfk¶ôÁa1Q+×à+ã]Í:WìòÇ'$Gšm}$jü%™–¥ä]¾Ñ¶âŸÃ)€æ[¤€r°Àè^#íPÿXå½XIÒQ #M¢OR›Èßü®ÿg ¸[Æ—*˜¬$ÔÚ…‘(€ì0ƒé'ú(ª?çOcõwôTqæÇâmÊÖ¬T´ÞÇ)ÉÏvè—A†NeD]3iR[IFe‘éÑ]Vü*Ê?ÕËcWmR;?ÿÓŒ]H†7_FNpsÍ”Tâ¥z¨ÿ³½ëä|—¬Ñ´0:ÄçŠ+FUŠ‚TGO¡?k–$nw[ô…ö‰®hâ Ê^G I¢È8=h9#µT«ýòpÈmHŒ®V‰½æ¼"HUåAJK˜€¨ë¥[üøä"ÎV¡g¿¦"ŽHfR~!ËáåBk± và Æ$Û® Ã38¬‘Œâ¾£EB9­hX)ãËíqÉF©»CÙ1[‹ËwÙUvâÀ«Sûr2Šby…IŽH§‰èxpb T€­¸1ÁÎÖ©ZÞ7E‘*îˆvS@i¿ìÓp+׈,€*Ü\­Ôf9&‹x¤éT'¥>_k%)‰'‰MÁEJ¢TTü*vÛÅGÙÿ' Y¼:˜CÉ F-J)®ßêµ{á¶4§4®4æ2òåPBîNà¾Ò‘_öXb=AìPÒ++Lž˜u”–Wä»SNƒç„rRh¸¤oõ`@ý÷&ä~Ò€:ïZŠ}¬"÷Aèºé=iGì•â ìôÝ[Äxwq"[¼–E†+¾Õö#¶Dudy¢Y’Ò”¢ܹ@ê$Q@Yyè³Q Ç‘ñ^#¿_¶vÿWhì 7L'ä–lZÔ%ÏZ{.UËd¹%W#›Äxî€ÆAOCL¾-2_is$°Êá5øGR¡~!ŒÀ½“U,ãŽæSpTîU×}éJŒŽCB™@YµÂ@æJ)c#TÑÒ¼)þN [S¹OMáŒGe%ÈÔ­Nçmúd I²‰6DUy#£òV@ál£¿ä|?$ì´äfDÃrå]ÆÔ¢×¦ÝA¦F‚Zâígi«4”a±#rXÓùzSr=Êyrâ^@SÓP«’A5 U»{d:²E;~éÑâô߉Œ¥)ÄŠÓåL‰»eÑ ó±’~!BC$mþcPµ=¿ãl•lÀ#0'£C4£ù‘~kñu8I꣹2õDz1“ðŠ­(B’|?árz™ƒéKÉ© ¸ÿ?‹ „±Ä3-Ñ[§r¢†B£§ÝJчzåÚ› (4XÖÚPŽüäA# yúœ^›l´íüÙ9VÅ®7¸UõYP°d|KþNFBd ¶×Ò3',§!P]IÛ¾3‰²º 5I•eA2—t•I<ÕÊôìáã“—&1¡-ÕªªšTbä Ý”Ž@#|TÉI6iÑÁ'Ö~°u«¡*cøGÄßg–VO¦™ÕÊÛµŽ5šè<­×ãÀ‡n? ì~ò£ÉLòDFåq#ZÜòäÅY‹*ïZ¬|Gìý’Ç&¶2ØÒë•F6ÑÜðÍ@À~ÛHÃïö¯û –>eŒ†Ô™RÒ!+©Ut¨`€"§¿¾Qdȶš $á4Âc ¸¡iø‚«ÌÕû4ÉÝlƯt>šï'¨ÆY#b²8etIj¢«“¢Æ;¯sð¸GÂrh@™Hú{ÿÃdRUEÃ5ú0—“ü;BE|>€ìvVâóȨ~[)¯V§m»bEŽ¥5@œãUY+Ó¨ëҹϪۉ½0îÅS¸è|ñÆ J‹4ƒ‰%P¬ ´³Éè¿vÙ ƒÉhÄÞÆÌ rÈK¸4¨ Ñ@=:ÓëIê¿R’·Ì¨YYÒ¼Ÿ`kþVF#dÌî„…œ¡%ýASðAZïÛ}°±´E«¨¼ŽBYI#Ó ϒЃ^ÆF$lS{„eøâ„·‘ÓŠ I"­ñWÛ¶V-’4•”ØÊQJ$Ë#"•!ÃR¢½¾ù‘µ´›¥iài´ÈPEP¦œÀ¯ÆÔ"¿äµ2°jL¿…M%QazÒtyQ™—rÄnGÚØuÉHnDìU,mBÞFÜ ~ïŒtû$’HVð¥—ñ‘¬. ¼e‰”£@;Çsö–ƒµŒJf-«LJÎ5šš®æ”'¹;ò 锎ËtÒb7AE‹"~ÑR*@]«Ó}ðäÞ˜ãæ²)&tH£ =j@êx…ûÎ5Õ”¹£4™SêðGɹÈ?6 5ïŽ@ÝxÒeBxV@±*þÈZ9ßñ äÊjPÇp³,Š•¹2ŽiÔÑ–†»}§92G ^öŸ[4^›“EP6­I`¤ÿ Å“”¹QQîy(¤“ñÈr ŸÙÉã<‘4¶öy#·ß³Çé€9hÏ2 -ÆšláÌgšÅé³GQN }!¡ûMÓ+âÌÑòò™ZMŠðn5¨Ý@Qû^ùY;¶ŽI7 …^&,,ìþ¢ƒPȵ4©¡å^ ¹eîÖFÊ|VÙÅ Z8ÁW…/@ÌGÏÇ M”²­£šÚÛánJʨÕÓ›5~À`#rR6+_ÉÆ>H8r’ ¬¯B*p£xo’1<•cRÑ‚´¥“EJ·&¨ £ 'oµ‰²ÚgyÄðBfŒú‹Q¸ 'u㑪Ù)DªÒ–™¹ *–jU¨¼Ujl tY-o¬†0·¦a¥2(-¸ê>‘Óýl”z1<Û?º²V>%U‚+EŸ|®­¶Ô¸½ºQŸiVFjR¡bzí¿Ùÿe–õüw5[éÊ%1É¥‡.Qž­·Ù |8@ mÿÔŠÅyëØ«M Šd@ ¸£)AGSî­G_ò³Ž0á4õüV²  åJ·nĹ,»¤¯Û®âb¥w—ÉKÉÖQÈNtÄ­y)¯óÿØã“éF3êV¿÷銬–Ó¨‡á¥}©CþRòÈÄlÎ|Õ`–U€Hc ÑŽQ/*«ª6Ãû$õÿe‚D€!õ‹`ñ;°¬‚XÉýëGZw¡=ÿgB‰¨ØàWVÈ4n½hhÔÉ0=ȸ ¤ò©þëÓYQA4<·ú8°ãÇä7ø%w’)]‘%ãQJ…}ëòëÓ%±c.i¢K$r( ʃq¸íÓáÿ…ÈHÙlˆÙ}1™W÷lB¹§‹ï±>ov(¨Œ´–™ r CÅŠŠN܀剖à a u)£GÒcP’.áZ×§@iË&$TæhÔÚ¡ÛÒ&Œ§jµFøí¨.½,$‰ª  €‚+EØnBôåc³*÷ˆòÇyíþ«~c!i—%9 Ž5ev¬ ó”½Ä•¶ŽKcŒªP0Ìì7j’hi_a‰dŒ¾ä ˆÈG#V®ÿ³_zä"74ÎG`‡¾€µ¨ …$޾º8èÃcïÒ‡%EÜRÕ]â4Œ„5ŒÂ»ý¹a MàXì fU •b7oQ¨y/Q”HÙ Ã`T~¬ÕN ®Ë#·Ú-½*a„É!µ)#" ¤‘MR1Uâ[µMžYÆEH¨Œˆ¼ãÇ}”ƒZ7ò­>ÎI‚½º#zJ¿¹g'ŽÁKT“^µ¦@þ–ÀªyˆÃ,¬#=Tü5bož@rIj7Ž5~G}‹æ¥Í¥*|2ÎA¯™YÈýkfraÌ’*Çz z-îºâ&–RÕ¢±<˜ „uð8"’ é  Õâ#R¬E'ùi\“UcˆÇ›7U¡ý¯ olº&1< Ô¨"ŽT&%¨Šë@Oû,¤‹‘- Ð¤§'”Ú5äâ*GªÜB†,w 2ÃFšÂRÙ/T3Hë³:5iêøˆøUƒWaðäÅÒ W°ƒ,PHÌÏp’Olì8xØÑKŽò(ýÛþÓcÌ©î-Jœmf‘G(bÈÕ%…]¹r5Väà±½ÂG_r¾·,3][jhXAve*…Š:ërãö»KöpÀtYî‚Ûë‹‹8c¸°*÷0ÍÎ4á*‰zPrFn£0 ¨õY’#aV6¯b™zW ÂVû&@þ,€ñøÇÙÇp+Ì‚9/’`þ¤&BiA¸ivâvöåþVÞ’Þ–èò?»–±Ür •BAÚ7ø°Oq·5Æh«Ü"ÚÝ4l¬R2b;ñÍHe§ì‘öÿ“•‹e(€i-Ž4AÀ’#i¢<‰&:ÿ“µz‡ää‰,_u7ú5»ðPìjâHäqR½ž†#håµ$±; Ükû_³Ž[ÅÈ„F¦Ì—êöxÈG¦ƒj5?‘Ù”ù­«5笈P0¥´¬)ÓâÛÑdZ–æWQ96ˆ4r†O…èñ׸©ÿ†ÉTÇõ,õcúëLƒ÷(µ01#•*-)ð…¹Y@ÙÖ!^\fŒiþ¶G°ÈZ""Æñò b€ørüreMƶîñȺTªÆEÂiV¥iÇù° 8É´°.…Žà÷I>ÃTH%X€²…•&`]ÅUì;º`¹&»Ö<Ñ?ƈ #ŽÃr Ø“à1«é‘†ºŠ9äà‰±zHuÛud¿Ve7L„UoðïJŒy&J5¥" ²…ÖD ™Èî¿Vhš3l 5$ ªµ?É­1ÂwµÉËf´‰eh˜ò•Þ¬jE:úxclŒ|Ð’‰$+òˆ‹Px×âS’Ø ¦:EÊF²¬aGÕéÀuVØîH§ûsc*w‰´ó*’Ë"ÆkN4¥Fßµ¸Û#AœÆë½õ•µØ0oy0¨?µÿ †2ô±”wNãâT,«²‘° CQ[jí”Hø• YÆ ·_bh E6=OOø,æ™rHî„p}\"bx‹ÄÄÔ/"=÷̘~‡Òaï+˜gr Ìoët¨@kû½¿goø,ɽÓd-¢!(£¨4¡ëJ³JïüÙKjJÍÕ+ĉ̖=Û B{í—Ž&³Ë槩ȶÑLWy qCJš¯ÄGzÿ­Œ‰«ÀËúQV:´¼JCP]MxoVÀ~”Žj—Ó«”T`ÒMe¨Û‰qXÆßì·,>i;–¥‘˺·Ã5V¯Ã½h}®?,ˆÌ (ñß¼ž4W ö«Rå—µh2Ñô†©s¥{9dÿ¤CQ_·ñ3V»íŒÂD\0ŽT`‘€…>×ÄgöH9\†ã±CÜ6Ê$„ب¢J|B½(pÅŒ…­š £ò}4  ôa;µ€ÜGÔŠÛÓÒäG)6ýá°8o«óL ú¢ž-ðq_A$|'ãñÿ'*%´Û—ëñ{ÎâW$†¢Š QÙq¾ %÷SI‡Ôy ¼”ä ñ;$lj)“6(EYù/¨z…ZPÕ$¹øšµðËeMA¾4(å8ú’Œ0.Uߥj;cßî^åiÄŒ já[áˆ(ZŸ‚¤ l¥¸}T¼R¤<•Tz ÐSÄRŸåcÌ$£®hd”ÐíöU)P ö=27l’ÕShª-!ZÒ¼hŠOˆoµC“Xžˆ‹‰/¢iH¹§×”„ЃM‡ÃöH©øœ7ìãAئ3´n¦VâÌ1é×p:³}Ÿò›ý\®%´„¢âÝ¥„Š¥V*rÜÓ7ëJöÉÄÐ`BÌrË!ã'7 ³QNÝ7ÉŠÂA»xØÜ0¨õ¦âœwÛ©éÒ»d/fÂÜKÌ!š­zk²Š…æÄ)Ûíd¤Eyy!×â–7 W~Ÿ Wp+ÇbÿÿÕ‹ÜúñÅ)åÌjY[uavø“ìòþ\ãëŒH Ö—?X²˜ÁO¯Û×ëvÒQ%E^LcíÍSâ\NÇÉ"ÈÛš„ ÓÔGÇ8jÄ—^tý“SFÿc†\˜Gê]v·2s’wÓÑ€0åCüÁ«ðœb̤IFiu–È“NvïéÈ)ñéQ¿Äþó+”wg²æG•þ®´p£š• å)A]¾ÈSÈdÁäKYÂ#Ke†Ú4G~Q±ÌCÑFâµÞŠr9w“,|‚ËÆŽ9¦t>¤oVB­ARxÊ žÜ²1Ý2æºÔ ‹… ÅöXƒÓå]Ž€‚Ôq’•9‚;-:¨NJŒÑÚl Á*È­YQy|D}­ùõø†BcvÈ­N?Gê£}¯ˆ!ì(iʇç„ýLzDs–‚Þd½7(UÅÔrþLª‚€F“÷)éñ›Ó`‹@w@F纕 Ç,®lmN.^œ „í)1½IZÊ…›RµÁ¼h‚KȦ”Dø¨+×wÁI’´®ÀÄ ?{²<~ÏÄ:nvÈÈ–]JòÙØ=IÝô©ÿdwÃÄ›[4* Y$!J²üJ›µ8€qt‘³wÊŠ ÜzÀ¯¡ˆØžÿFF»)VΜð´,¨ûMË“5äAQÉj"ÀŒ7¨±ã%ÆäP[äßk')YaARæGú¤G‘^líÍ©ÈÔô\€²‘Ù¯V7€ýW- “MÇím‰¨;)OwFQy$ êËSEP @ì~ÖN&˜‘{9‡¶<™ùžU­>Èý_µƒªŽHØ]d˜±#‚…ˆ…xƒ°¯ŽG£!ÍtòÇ,ÉEø*Ђzwß¶ $±Œ\L¡ªp•(»vë‚(*Í3qPHâܾ+àüŸ³‘­Ò§l¬fqpåHæºZNýxá(µõ \Dž¨'j ¹_|B|“9¾ >g¶'bEA7¬óg²Z¡6%ª¬ÕQÈŠƒ¹Ûç“-kgW¤dÀ8åOÚµܲQê‚›Ù"-”f0C8jÊ”ʤwm€Ù¨+ò(¨Xƒ±RR•?Ù–EŒ’ûUå3"ˆWâ5 '¥}¼2räÖ9·Z\HåxªÀ¼6þ˜ÖÉ<×´®®À0Yc«1 7ˆ4ÈÒJ›–3‘ð’z L[xU.á`Ô‘Ã…ê­ 4ÿˆäس­ÂŒ©êNS%uvPÃXO™øNJ ð„Hî‰ÔT2E ýÈvûqÔ²½üù gÕl¦=4¡q)ÛÖ`ÅýF䫸iŒWüºÃ&å‰äÖ¡<ÑÊ6…Dh Ó­Iü4댖ÄÖ¤'vŠfÙ8 oJmT?d`"ŠofæŽCuqy1J4i;=¥)¶ü*ý¬åH<íKV©XýÜF‰œ%yòyUZ|8q›²{× åîv˜ÞÄé5~£sK²EYEj¼PoÏâåþÃáÆtFÜí” t6w0™lâC<‰p¬œ Zz†é·ìÿ.‹"Â"x©PòQm!%@RJ…Uú@ÿ‚ÈÇŸ›)r[j&šC¬ĦEn&ƒ 5¯?ÖOõp˜Ç}•ïl} ›‹y&I’7øZU£­G¦äîüK ©\1ˆuHxôK¥1È܂չmðŸ´x×–A‰ï¤<ÓžFµúäznR(ÞœŒ€rMÀØ0•r÷6mÉJ)Õ€Ç7$?»SBÜÁ¢qꦼ¿k%[66_#X@aÝ×y#c¸aö‚íӉ©lRH—Ò4Q¯ÕY™#©øÐUKeÉ |ØÄÔ“«Ùa‘,ÙJÄìÌ\‘Æ¡äìÙTG6ÉMMq jhc%eD.V¼«³ñZŠ6 XY()¤ž9ã‹ÑFT’o@øRDð;Šrcô5“Jr<²ÉdÈŒ#/ñ¢Ž5q³ØÁøi’­Iä©j¾Ÿ‹z|ŠF¥ºØ-~Ó6Ü«“ ¿Nõ*5Ò1`›ÁIAAÛ‡õ±š`«³p¯ðÌÀ:-R£ˆáSNKJd@Ü ®³NLª¦6PÕ ZLÉO‡â÷û?ëc3²cÍm¼1¤—±óP¿je/Ì*˜ê)J7mò²ã«8Ð%GGEVxÃó 1qs£•@*zWÓ­ErÌçù­pîóTÔj׆’z8ÊŽ"ªüþÈŸaðäqm{<œÜd嫲+z”u ²Æ¡R¤Ó÷tÿ‡Â ʼnء מ7¸™ƒ¤|@4?̹!˜“º*)aY(ÁÕV2Ë!;’A¨¡ý–¯ÅûY d£kjb0¬°üÈŽP½ +·oÙË%/°1ˆ_ä4ŽïÉÜŽê$$žµã°û9äÞŽŠh¢…WŠòä¨Êܘ@rNF‰e°R˜Æ“ÌŸøOƻб©¥ÈÊ[’ņO¯…Få$AnT¡#¹¯o³ûYx®“õ#-ÕMúƒé,µFf"­öAü{deÑ!Vî8Þ9‘Ø3FQ$YPO*ò4ýªþÎô¯6EÓ¤u Fj hµKø›nLú…Ë'R¨B…ù1Æ–\Û˜s‹uWu w«Zø…„H“HerµägéÊ¿Žþ9;ÝDL H˜€ ,µ”×áÛÀ×ò²³@h÷þ~Uê =þYS(މ >»rY*H Šõwë’`£z·à ‚òó‘$T9¿'lS›f•£X5YýJÐm½²™ÐmKîÝEÑ2’¡×€ß¥zþÎù`0(EÞ2!¥y¥ iØÓæ2]õR¸P²JŸi*v§%=@úi†'¹dÕÇ5gä(KYuZ }Ç<Ýt‘r2)fˆ@¢›’G*øåÄ%X¬_Ô~ð+˜zxÓ—ú»d:3ê„EŽ]EáøÛš3z¤”-ÊŽv På±úZåÍSV†öK8•SjnM9ÔWËÅ¿Øä @“)‚BÔËÒà F¨^B9!§ÅAJ*š¶J"ű‘è£q$æoGhßÓDj±m… ï÷dÉXáDúÌdàQ[âN"»õÅvʶ¦ h„Ouu”E+qjƒÇƒPBÉAÑ¿ÊþÁ$UYdAi Rf4UH¾ŸØø‡Fà§oÚÁÄ’I;wþ"£¦Ç%ÍÑBDÐa@eÊÿ™yö9ÐÙŒ7î]pðÝÜEw7¨I&;‡5.Äl§áý¥øwÆ;X"÷*ò«ˆá+$±¨nMN.¤“Ï}ÿÉ®B$[26[§µ²NÜ›„Gj¹`*i±aû]¿ÊørR;1ˆÝ~¡uoèí+}Qœ,“-W÷ce)Ê£áÿ[ Ù3;­‚(„‘9PmÝÈ3ÞÕ9P|#ºm¿ÚãÞÈ®¾h}F9Ä7À‘¤±È¤šµ BÜÖö¨ÛáÆE‹DÇ:Eií–Ks‚¥ÕèªÄÍFnÿ¼Qñ±ÆC„ÒblZ“úé©ÏD"õ¹0J<…E ô¯õ°é¾å?U.Ó!upÓ#DB‰I?hmCÄñ‘Ùb7[iq#B-•ÈXÙdŒÓnDö;qdâÿ'n›°¾í.Œò~õô¹-X”!€ >‘T³­Ôí¦qo:„4sG͸©Pjh­7*2q4wa-Â…üPÒ3”ŽÞY"hªy~ ÄxS¾1'tHlˆ°Y&n"3lŘ¯#Ÿ#¿‡íårœIRµJŽ…V`ò@ qþðR>ßkùðÈØ=Û,yŽöà)Äksû¥`K¦æ¥‡ +Nå¸âGr"{Õíc†Ä,ÌÁ‹b(¡V ˜û9 rgaSÓ?H¢òŸŠ\‹)uø(ôø2&ög]šJ‰UÚ0èðMð†R’oHŸæøz._1¶ýÍ1;ì©}k,ºäMq-ªÌ‹N[VþѦÊãl¯€‰®m“‰2Ý ×9¤GXù3†¯ÆäT¯&¥yûdêƒUÚ”iÞ’•žTõ; µïêP(Tqæ7ÉIl±ŽEJs§îÓ~f¤îkö”ô ]0¥Ú‡v«'*ö 6Æö^¨˜"¡ñ0‘Ÿ€Ò8ýã"Ê‘º½ûÐó<ÂCï¸î)¶B™M û¹ Q;&ã¹"ŸFç&ÖÖžò6£<ŒÁC§;òˇ Òy²J¤f%N"ŒÁjxò_³ó ”Ì·A ªM,PÄ*8ŽLœR µ8–5ùÒŸg#e”ö ³m#O—Ÿ0x€¬ÄÛwû9‘aÇ‘Ù/-‡bÑ»TÖ½+^„‹áÁÍõ¬Í,jjî@©jV¡véñeRlŠOQ^3"3"Hö«£àã÷ï’Q$%à …шÃ#²õ!‚ñ§N>ù8ó¶%Z;‹¹o#/…k°.ëþÛSˆ¥Ýl<’æQ*²š³ÅûUr‰ÆCÒ}Jéíu7%%}7-Ò€QJþ@6:—ŠâRT'¡±û]ÉèÇ윳øG½¬ó_ $R| 4¡‰$òëJš~Îà`'šÒëð Á>«\Çê*ƒö«SÛm±/Iý*·ÅžÚ_ùúh¢¦•qZŸÕü¹ýAœ¹ ©$Sz’žœB›µS•:U®LîÕÕBf€ÌzÒ&§ÂZµbÕ5§/„d‡6%oõ3ñÆ¥ÜÕê­B´5XÍ:r«‘7LãV¯uÖb~JÄ0‹ÜS©êÔï½Û: nÊ’’=J«…ŒWˆoR=FÙdCT´/y,꥛… Øqå½E~YpäŠË£nQȺ«IåB§÷dŽûo†*S wFú½!@Ìê´-Å•(¤/Èerf¡Œ‹w~*$@¥æK|[l(EÜ¢c–&dR¿ÇºŠÿ’–V 6ÒÆ¸vy¥Š%- ,h °Rl€<±PægvC ž5PUTqpÀÓí¿Í“#bÀsû§*("7á@¯sNþÊ¢ÚV\Ës[ž½‘@ iJ ¡{m¶ÖÈ•Òå$’gË9U¸åö‰ U§…\°HPk#uH‡¨ÐªDŽ%H,”£?ûÿ+#{3!ÑL­fbk#ñP$^™#úXRäQ-‚G RñȤ¨í¿Ù£b6*y?ÿ׋<^Œqº)ŒÆÃz¸ø…~Ï´”Î;co\vT²¶¹GhÕ½I„ödÒ«µV:ŸöÊÆD÷+Q0\È >è±–U.>Àb«'N%¶+öp˜ÚšÖXÐ)€º…&ŠÃöwûK½ã™§i¼¥âGI¶ãššUè)Œ¹1©1gcÁB,ÔäªÀ+É{/ùY*chû5¸}>@Rep»ÔPסʧͶғC)‘%P­ˆVwãÔšïðŠ†ø²@ÐbE•Öޥ‚Y•ã<£$( =@ýªý– U&*2ÈÌxÊ»°ä@ûU¥>ÕA¯\b)+®Q茠¨£DMIøÓâªÿ/%§û, WÙ´p<—ü'ÙvÚ¿êü_ëc1t¥h¸’ έÄót“ŸVˆøè¥?ÕÉó f Ìñì$ _ǨB^XôÙ'š~'ÓÍ,jà¬n”Ùƒõ-NþVS öm—D$lM¡™?wÆ””øš ì9raöru\ØÑ7ô£&9#Ó”íV§V¨¯Ä?k+®ö~åw‘~¢²ˆù70}#B*i]úSþ#å&qúP¢åâÕ£HÙÁsÆU@EC‚ûnrxãqa3E|Š“éÍ -Ã2¯ÄjQwëòø°Y÷.Ô‡»ŸÓŽ(øpÅWîTð®ýéö²Q‚T ÔÉgiM+*ú®ÀSäüX>¢m‡JDZ1)ëÝÑQêU,Á-h:|Yw2 ·ÄÅë\€¼ä¤uäCz|¸}ŸÐda¾Ì§¶è˜íZ(E!cg!e©51ÑFÞÇ O4€¥n¯ÀXs& ${­r@ík] ŒµÒÊY‡*@¥OQþO\ŒÎ˺떋˜@Iš à•ñkÉ$7 Aõ(EàU= w˜ ´ 2)äî ©'¦!Z%·î[ˆXT|@Ðí_sÛ …º²i Ê*X6ËM‰nOÏ!*¶ÈòK¤ON•§JPØ™1»Z„¡•(«·"ÌøB’)¹ê+’§VMõ(b¿ÄD@wmêÑ•ä;¶c%÷q¬·Ur Œ•SJ–Zd¤KšÚ&úôÌ×ÔaJ| xxœ´òø5Žjw«ÅåB(‚˜Ÿ‹ßÇ! ÙIÒ-R#È#¨Þ Ô©øˆû?Ë’bµç5䀭 «ÅQF]öê“‚·M순…x8'>hG"+Äúéáö²¡È¶”­Ýî>nmørâµ ÍZ‘þtÍ&[Ò½ô°¶ŒÇê4E%§#NM°>ýr‘–räZ…Ó¼Î# •*6fV݉=û#,ÆOªÛ»Ù¯¡ B%!ƒÎõÿ‚®ô÷4H÷&E`”%ÕŒŽ€æ}4æzž_¶BGfq¡¦T·1ÀT*Ë#Ë3£’j I^¿³»m†>¡}È•Ц©kskomû³¢ªS‰©^Bµß~­Ðý¥ÃÔJd)_Oy,..ÞB¬,Ì¡ ñpAöjqÆbÀµ¢iF_¬$ðL…=@‰Çð)©R6û¶Ä‰Ͻ!¹¼°Aép¸²åõ„fåDB~Ò¸þñ?›"øCDÑHh)$u +RÛõ#áS–ÿk%{|Zù•×pÝ42,ñ„šE'Óq'v§Oæ_öXÆ–^jºW¨ë ¥S›€(~ ~4VÜÖ… ö>ÿ¥$…k˜¦[¸Þâ0²:'ª Q_ˆ´¯‡ò²±È³#•¡!µ¸Š?ªÍû¹“’rUÙY:qÞŒ´?iŸ,‘Ý„ED‘\%¼Sá™U}Fe~”(Æ›Tø¯«a-µx¥”ÈÈÜd „)"†J€Àÿ:IÛìä¤& ‹Ý "ÞXîÓmã¨;q`©ãïü¸ƒÜÄŽˆéçp‘ÛÉRÉ*ßnqàÀvåörù¶dä„’G’ÚH&et³‡ OÉ?»4þVû'ü¬³«_E0ð±„YÙÀ+ºÈOMš‡¯/†¸@7H5Kôe’UÉ*• 2mùT)Û•8oþNG.Á8¹¡MÇï¢SûÈ–F ÐTPñe¥6bÔÃÃ`­¢c Çc'¥ÀñmØ-QU!{7ûòQæ­k3}l ŸE‰eJŠÆüªOùJr¹K8ŸPuü¨¢ðãѽR I¡â<Õl„wál—U >åç†Ú'gf˜à.H¤deëF4̉ŠßÉ¢&Í.•cý#%éáXÝ ò&ˆ›zÔñP>šf~«@%É7Qúˆ8ˆÝ¤Š€P1T²#“eÇ‘kîh\K5Ó$Ë0ȬŒaAÊ”'¨ß‹R˜j‚9”Ť¶’Øªî±ÆÀ$RíȃØ|9Tl%(b7¢Ô !=8á@ä†Fí½OÙ)Α ,íñsÊø‰fØoJ²»gNâ-É,üƒPŠÈëã¿û,™"ë¹D[F#µHêìâ¾›Sì ‘·NµÊºÛ1È!’ÆXãnë0¼ŠÁûÉÜ("¼R@_¶Ei÷6B™äjà9¿‹âj–m‰®ÀS·Z÷ÉGé,eÍVNÅÃŽ@7"…M¡ÿ$ã.J9©Í5»YÜr L }ªT;ñÿe‚· ¯b©a$ 1_îøÆ‘ÄX¤PTÝâX&]ÒÀ“|#™åÉœš)ã]ÿàFB#fÉsKÄ$„DŠÒšQЕ(­GbÛåôÐK €úˆ§í«||º+SÛºæ<ù¹0äƒÕçhí• BÎËFÜ-S—Ä@?ŽbÊ2 g¨òÛ³*r£~ìP^G•Gj~Ï,¸lCA䪟¼¸Œ6êáiÄî@Rzvø»Œ#’O4]£z• RÊÈÕ§âƒÃ*›8!ï®'úå·*±PÏ"ƒ¾Û©Û¯Zc±LÎá ÅÞ>R1nR¨NËñ5hÕýœ² [\‰§z£ë¶±±âáÜ»Seª …0t)ê«‘ÑDUR$oSŠ|[lWò 2ˆ¡’êuW¢¤Hªðîæ¢„erÚ­²&Ð3L«<¼ ’N@('á Ó–Y³\Žêºy¤0qþù ëNC•?V ½¹Þ"êÅÜñ“”dV¬ÜOìôï„*·äGlΡEXnkVæBÔåP[eÉ.žì§¬ Qx[€ç³S¯ù4Ë© •ZœcåÄFC±;ÒƒqVý“¶Þ„ÆÄ$м‹×“¢”øI ¯Ïùi•Ìî 3D‹c!ô•·ŒþRHëñ~ÎDe,¹ŠT)WwuôÅ jS¾Z Q+e™Öx¸V @N'~-VÜw$e—É®•DR­nT*Ê~  ·Èÿ•‚é(¨Ì• ƒHŹ bÄ/ ¶Ýñ˜LJ™<'duU‹˜©¨b¢€ ýð¤‚-vÌÒ@y$tuÉ!¹v7^ÙX …LEyÃ(£rýâîVíû_ÙÉsajj¶M ¸•VBX‰•ò=@éÆŸëdìòcC›wsÛ=³ÁʦON6b e,(jO‡j|Yƒv̾öf…Ydyˆ55q“¿Š7vþ\a¹ISžbyI’«ÀŠ š)CÚ­ñcÞ¤÷5 !c’âDWn*  O†7I•MÛåŒl£¡‘³:OŸ£kM¾Ù Ä7¿Êi™–Î&+&’%EqI,7bOÅÏÀ ÿˆå€\O“w * FUeDB¶|=zÈí.«È"´•wŽW`VUfVbvn;QJü_µ‘ËCdáæ„oJFÒN)C³E9‚ÄTnNßgö²@Èç»p™Œ®óþéÔ (¼TìXoöÏÚ @ÖíäqδU5Fµ*ÅkÑH¨Êɸ¶EZé\Ú\”5D‰GRj ?k‡ó„v!²\†òÖSiJcŠÒ7Rèy”’\Ðü\¶§ùYo¯WÇÉm¥»GmtÒÀô(ŠLŒ>MPš“Ó#>cvqruÃDe”[ñçF}a»·JØßý–t-ëlbî]ÀuX¨ì’ÔA^½¾0Î[昹-Ä^”ÃŒÓ!šb qïðŠe\·îdMìÒß,T *ä+(¥ ý£û_ä䈶JÓßEµ´Dó¿r‘ª‘F£)¥w§@Ùc&DôüE”§B”®®fnUˆbô¹T“û#öpÁfmÑ Z‡ÕãÃ=”?Äx¯ümþÇ+Kg2«r‘Å'ÄŨíÓ‘v­:€£z9ÒŒïÎÔe â*•©Ütâw® 1*B`95Bw ÑŽâ}òD1Âe[¸èiEõ¯Âäï·°ã\seÜ­©´HªÄU‰UØR«Èƒ·ˆÊàÎi2e,©ÄƒÅÒ¿´)–ôjê­¦*ú€¤”Θ©¯²“½)í“'oƒ;õoBFÿu²röwã@?¢>Må*•Ö[yBSâ’€1? u¦Ý2ѱùµ²ÎJöW‘£ŒšÔøs4]ú?à±—EU[D[‹ä…~¾›1­kóíL·PS Æñ: ½Sê‰Ô¨9ßþiÂy·s1\*ÐÉr`HúHÚ›ŽÙ›2h…M­¼±°å¦›—=÷ïAL‰4JˆØhHd½!5.êEwìÙ/áGñ-šŠÌ‹¡©â§-é·† ²’ èñ7Œ‚Ò)R悤F§Ø9 híI}&žVSÀ=”'ã¨Sb+•Gpe²]fªdX$h—%8ÚF’0£Ó^L‚+QEÿ›köralË—‰•=A'¦d®Üÿ”Ÿ‡ídh²·N(ß ZX›˜-R¼œq©ýÇÄ?kÕ$lºŽZÍr+O…EA *Å}ü0EJš"2Õd8¡R~ ÆŸÿ­ˆL–$~ ¸ª¯–¿iZ”_Úɵ•¬°,ÑJÅ}ܘTŠïð€6¯Â?âXƒaH¢ÿÿÑŒÌ} -¥ŠÅ ÅêTžá–£ö‡Oõ8ç±zés Gõ¬H½"!fDd,r¯ü­ö·Ã{"·m$E꬀'¨¡&´l%ˆ¦ýó"HÌ¡‘Š€ŸfªÍÜm²WÁ™6ˆÝŒ5ˆü™ã‹àeuV§³ šEÒ…Ý$•¢©1ÊJD*ÇOòˆ9(òc% i'#U.e‡íÔõEØ|G‡ú¸Ê‰cB÷Csh¤y4OêFƒÄÉþE?où±‰¦EFs; X ÈiöèOG øqYA5HçŸë Ë©õºTN `¿=¹d"*ÙNWHIžæÖXe,$–" !¡£Pxo\v6Š"‘vò[¤…¹|}–”?á¼Oòñý¬d})5°ÚýbinÕÊIxÆ•õ#.J¶ÇoOö±^jE›CY·N¬ÑÛ†&6_‰Cב`?csñ/òäåöÓ·ÍHŽ6Ž*&øU©Bß°Aöû÷ûJ+P· â”U~/мª8Ÿå¯,«›flo4p«OGW vØd®È÷0"DŒ§Šüª©•º¢½¾Îßk!TY_5ÂPÑújÅdn ŒM8ö'§n]0€Pú€nîù¡pµ;€àtaþOÚÉa;.Nj¶1z®@WÐôøÇÐÓí}*7lŒ¥Ýæ± D·W1ÍAm_P¿í––ý~Zrÿ/'@Í>ªèˆÓm¥~/äŒÚ¤BÂŒkì½ò$Åž8÷/i,®J7ª“1? §zx‡Á[­¡’KÉåBÛ\+¬K@5jþövËH5‹%^H'šV]XqcAER*k·Ú=ò#´õ¦Ò8£ŽÞÌ:zcÓŒÈ7š$þЮØÌñJÔl)VµXJò¡ "%Czœ®wm¤R…“™!È'?æ¿ñ!‘ªevTî%RPG¯…cV6ª÷#¯ód€®mdìºQ!–…kÄr%@5¾ËL@ÙIÝuŠ,1»qø'åįV(ïÏùpM0GéÍ[WEf^=˜ìWà „ùÛ8l÷+|!~2[šV¡ˆÙ¹& l#0;IN $|k°äŸ#§ÚÉÇ›É4Ó¤W€tf•@øhOû¯éÈÌS8üµ»œ /Â7ÚaFÐ;ä‡$heìáZ«A VéÄŽ%Aú9.H˜»®“Ô™¡YÏFoã¿,ŒN̈Ý’˜Òܨ!ž¿hýi’«% ¹Žœ—&Nä±íMšƒìäy]mœË4KÌòšg—z+ÇÆL WE⟺-'¨¡XuäÝŠÿÃrêå úZ¥ÍhƒÑk¢I’E‘AR»ø.¤.U3½{›b*UíL“†.IoǺ·Â S~mOøº«—Ũæ™Cnñ[Êò7t-_³D§Í{e$7ÄPS¹šh­­"ãt%ÖN›°êÊ{¢ä¢7`NÛtS€Os!~<½TinR†„q<©ñd§@S©H‹èGj\EØ‘^ò|\wÿ''½ ÷;L?D¶ì˜J®ÕW¥5øiûXgõ&;Å ëˆõtD-r¡ySb xŠôo´ßëdùGÈ0Ó;µ_R5U"€ öoïòåq æQZs8•¸ŽVì[È⌄“]¿•¨R¿e¸àŸÒ˜}MÍ,²DX¯ ÉþôQ•ÀíOã‚!$ ¢ÜÅ|q€½µÈFI£o·ÚßáY`F»÷ÿ9¯{^ÑÈ$ìE¼Ufâ­µx„ÿ“ñed6 _5ÖÜC3+H ˆ¨X™wPjHëzOûXfQâXùÇ)U±¼yp5dpGmÁÑúåÇ$EÕqÌüÒƒÁ¨æz*·ï@eùþÞ PX‚JÖîAòGûÈj7a"ÕñãǶ$ P{ÑrÉjm£ôQš)b!íäâX©CÍE:l~ò2ú™ŽHk›&´1$­pQÛIOH±¥CSüÜzüYw’Z¸hšF?W³¿¨LéÇQBwÇ_ò“#ú’|×ièæ;¡)æbÅëÄ—jƒQîŸk!—¥3Æ7([˜URwš§ƒÆxÅRµ©JÒ€dÄ· 8UwY'æµäY@TƒBÑQþ¶V#`2'r¼HÁÌ¡ø’8ÆÁ@ <è­ñTãâ2¾r²ZÝ:"šÅÞˆÚ5þjäjˆe{0Ê(¨Þ™%—u ž#Ã*Ó‹eäÝ4ŽhËØÖÚÁÄur]d b‡ü­”å17!m‡`Pâ4ya.GÖe*ÒªŸƒ÷`‚VŸ²ørÉ÷0óæŒkyÖšCÊÊ#mØž¤±xŠõʬ[ ¥}{p.Ýâ@C¸+N}ƒËlž8Ц¹ÉOê%¼Š(Q¸BZ›UGÅ·l‘;„²"±LÐ^zˆÞŒn±ÆMI$€µSJü8ƒ@„Uî×ú?#<ΪOMŽü©Ätÿ[!DW½£ˆ^Ĉ84h¦€ñ©ë^•ʪù¶ÝZÅ é·÷EVaVeë°<¿g‚£ HU¸ÆíÉ(¨¾. ﺒrdXZÏCÖxã"¥¤ ŠÄ é×Çéý¬PŒ2§(ä AÛaB?³ïg܉ԑœF+Vœyí¶ÝÆã†F2™K”šp.)ßjü!ǶL5•hZõ]‡7 -7zÆœvðø‡Å“«½Ó;Ééìî ‚ ­^Êßåÿ•ÄîØy$sVÊRÎ#$eôw öã–‹Qä‰c"Á'ÄeQ*’(TÈ+áɲ£ ¶ÙÓb!T‘C¨P*ÔU«øá‘Ùš$’ây7÷KG#ö¸’yPí¹?ð¹ (e|²}h:¨ ;0D@ßözexË<mÊKv«sØi^Dý¦§õr›(’ï‹ëó"ÈBˆØIŽ[ü!¬ŸR9£õ-Q¤PÁã|Dš Àb õ_ ®&¤ÙVzdJoyËš*[CÉ©O³°åñe™ \éž =8æô€á@œ)ÑkÈÖQÒ 4Jæ@¯º¼eب¥HØ(}¸·‹eàìÐC$·‰VØFú‘Ñ[‘oò¦cÌÙ¶øª¡áZTñe€ $·Oö=k‡2œ•IeÉ™£šI*]Àˆöp8ïJî—2ÝÇ'eóH¦(—6ŒT ÐíSüµß,‘úsÆeRNnœ˜7J àOŽÿgù²œœ›`wSq š‰°~6ä©SJ‚M:|+LFÑø²<þ)ªÒ,-Nk0y¶;RŠ=²Á³L—¤~œ°Uƒ4e‰¯Âá\îIï¹ïöpä¾Ö5hËbdEI‹Ó•’R˱ êÛž_FS!¾í Ø@K 2†AS+–&€nª  xå®ABÆ4ˆ*òbêŒó;LHJõïÊ»e³Ü–¨òDYò“V¶å*Å#ëVø˜PoÐíðäg´ 8ï$n¦¢È±ƒ ÔŒTš“@Ô§ó}£”ãçæÛ>IZÉjЈ¤¤‚’)©<›•T“à2íÁiè£3¤BGáY}$rÄ’y‚KóÂè!7Ó½AcôøtfÈõ ±÷öʲQn‡Ò5 ;ÑàŠª6ç·/¼ä£É„¹¡Á-ØjX©G` ¯Zšõ¦Hô@­ÐÑ Þ2D²GêÉð³P“ÅA&òû99uh$1É }AT¶ÃqRà~Ób76ªº{ÊÊ%dd_OýRÕ® ”À7jˆÀ,t1§6/BFÌ—ÈdIdÜ7 ×r)^aÓ““ñ[⩱¤ÚÕÊ7*”ñjšÕwÞŸHâ1%WÐÊòôÙaW2 ÐÖùrÿšrBLHS‰ƒ[Zñ¢‰d?hC•i_‹v}Ìä©"HªÎwªˆM8±¦ëÚ½y` «dMï6Fød6¶°M«]ÊÖ÷µä«߉«ò¥KÔW v²–å5HbH\$U’(Q§u¨þʨï˜ç¿Í¶% ¦*\Ûzj…Jp@©$rôäç³(!+%ÌðÂ΋V:n~;ï±%°÷¥«ø%¸[‹_‘ãgi„rìkJŠö^oþOÓߚ'ä¥OL¢Æ¡¡Eݨ:°$|;Šdy¯$ÊÊx$²dv é3³ÂiRê8ó ?eº*ä2Eœ$ºp‘ÀEÛ”HP,¬ %A‚òåzÒG%ö†³¹õ€[}Y¶ØU@&‚œ~ÏÀOÞ€>å°ÑÉ_SŠE@+BÙ'·\ óRŒ²f²Â5Wtꊛ•¯í~Ó`—rÅh iÆ6![öI4$À‡*Ÿ6Ø„®HÓÒj+¨,Ácj’(á¨GVÿ+-½Ú©dªÂ(Þ«£ p äÕÛÂOTÑ2µ†‹²ª;+T1!‰RÀŠ|¨r$²ŠRƒ‹ÈÈÀÊ@RäoAºŠ}8c+÷,¢—–A1Æ\6ÄŸbCeÄlÔ.¾±#£ü~•¡ÛéÊÇ&R懚1$1F•䃃;õ!ʼªrÚ4ÀÒ¶™W1Ûš„u.ÑH ¦•UîÏ‘È)0;º ešìÀÖ«™Ð7Âx/ÖT䥰DwL/Ößê,ÑB” ;òj²óØnXdˆó[,qª‡Âc¯Ð1øwîª~ßê61LƒzKñ¸©&8®VyTGE<Ø‚~?ËŒ¹"<ÐWð}^W‚¼XTwê({r!»)UÖpÖž‚0à¤ÝG. »‘_·Ààça#¡Q„Ÿ©WS •õý¦§2Ãö•Àÿ‚Ây±d}­Èr%HƒNòQ¿E*9(4ÿ~rý¯ÚÊæÙi}Ø&’[pZ‘TKZª« íðõÉD÷¢]HG=ͺúké™#‰éÁ©^&¤n6„ä Û-©;3C5°fclæK@{DÛš/Úÿ‚ÉŽŒV®Þ8ŒL8s%ÕêO^Hyåÿ†ÄiHÙ­#ÓšK” ÈõäšOížÀžù½ qó+.#dI9ÊxšI7 óýÛrÇÄ~ÎNlÆD›],FK…™ze«éµæ‡r6 ?U¶g-÷^öü%Œƒ…½ý™5ÿ²é’ÙŒ‚÷‘M•áTâQÑŒe·<”¢ª:~ÎF‹d¤Ò]töÄ£þò*ÕHnK!'“Wn½²ãwMgnHèžV‚g nM¯ÂŠüš­AP•WŽW^ªdÅn˜ñL9Í"€ó4«žŠGl9;“F¢Þ„ð1…ƒz|•A$e ¢½¾ÖBrHò]©ÁÃUZ–`±èеq7hÚ–*§Ž‚5Yœ€¤;’\þ¨¢®°¥-™nVîUc+ÉK5íÇ’óþl°Ëjì)}´¾›Ãë-t ~€OÀæ§âE"¹çºm6rgž)Íå™M+Ïaðÿ•ü£)Ý!Ý ŠYÉÆàDË階!ˆwSð×$9)Ezd[@Ô4´.ÄSábi·~Dœó÷­mðAÙ±2¨ZŒZ¾›/%ˆcµToË%{°L”2½¨bFÜŠž¤“@ß#ïl õEŒÍ!«È ƒNys>õûYue1É+•PH ¬T-H¥8ʵÛàËG&¢vê—•¤ŽT±߆ÄíÊ„Óp_E¤ÂHÙ·6AGº¯Ä8’)4í_öY*-€l’ΈœÑè!U¨Jò=)ÄeÐ-S óWŽåZ?M™SêàîÆ†­þM+Œ…"%§FÀÆ8– õGÚ¨c±SüµÈÌìS¸@DÕ‘O_ƒ¨Sñ Tý1÷ …]^9=vPwbÃmÀèËìåxˆ¦Ì¡7´ej;‚™‡Ú­kÓùzesú™C’[ -Øß‘X¦µ, þÏ_õríè4õ(û^Ä*Éç×â-¸Z}Ã)Ôß^”œ‘ýt« •aÍ nhƒóËfviˆÝ3Ô73Ó‘ø{µ4 f<'"I *+1%ªÊ²9MÇÄGÓÓ2G'ódš|§Ðr[Ô«ÃQð±jîGóS(Ÿ6ørKõÙLmV;ä6? ŸöXqF×$²IãP\ÈüZ‹Ê»†ÿ'‹eÛI6ÕŒüYbøÊа'íu®Ø"¢¬c‘dŽZ3Æ$*µïÈû„÷ÙºŒÍ}z*hb…E!Š•.µ¨§Ùû+‰Ú÷•êP‹ÙâËõ%WôÇŠßܰUµò¤ÆõQv¾š¢;P’xT×Ã_åȳ"wUÓ½ #š%p}>£†«ŸT’>ÏÄ>99RǘDéŠ#·ºä¤î]‘H „Ztý€r¬ƒqîm‡$ÒÍØ7s%Fèw;ö5n=ùµÏe–ÍK1p•dÚ¦„| q~"•¡ê¹9s`9/´’{Yåd’HК•.ä ¨Þ öq˜Ú»–|¯%‡íßíLÀ‚ >ÖÇe|ÇDZnŸÒ“‹X¢Že¬ÁðZòcñPV›(ï—»Pä²ûMÅäR$ö ¿ù«µ’ˆË’wm§ »²ºÆVÙ d“ZБË|Ç‘²{­Èˆ =È)„SNZO†HÌl@ ýžOZ|'ŽY¸Ôy¨ÉÀÛ,¥Yd˜ƒ^„–Üqû*Nù8ݱ<‘—xIÇúLªDR"²0j€~Ôšœªü˜‹t¶8'íÃ2µ+ñ»„è~1«AëI"Ÿ“FŽmÏ‘±^4`Ƕâ¹\Å6@­^q"¬e)É9+(©=Ùø± Vª)TBA_L(YAt$uåû8ô^¨i$-0ú¸T·*êyð’íÀ«]û((…•ãq8oR?„;ÔpæCQMGNé0‚‡²¹”Øiß¿5aû õß䊃’ŸÔSÙ|³Ë pÓ¹  ýˆ}¦§ñûYI%yÊ‚ »(BA;¹“}â¹SgräQær ®E jP’6ïþÇ'汤D½ø—‘YG*{oñm·_‡ w% Š®ÜÕ‰`@( EiøÙå„ÿÓŠ]ZÆ÷…âDU—ìÄ ETr"iü­œ„%éÝër@[v¾šMq¨!”z ñû ­Oö$W®LHµC$v—Fh-·ÄXl­ðíÈ£‰ÃÌSFú".)š&ø׬rªÓ‰aÜx|$7ÅVräúÈŽÝ“£«}…Ü8¥(OËý—ü$Yµ…,™ígå-¹>‹)x î«öÆÞÃýeÃLI äEéOpò€Ð–4ß‘ZÐîvèz6GzÿbÌÒ8ŠÝBQùÆüÕ¤¦ß ¨Àøbwb6!uý^Æ›º$S¯%öS‚%2ŽÈ5"ÚæÞñ”e!Á­(væH¯Ù§Å“çaomj6òGg%ÚOë[KsX˜Z%+^½hX·ù<²1 ÐëL¥µžˆ™½.wNŽÄ4"â<[— «xу«ƒ•(ü|`hQ·è©#Û…Ô4r þ*7ÃLÍ¡bRn-»3²„“¥=CB©^„r¦O¡`A°ÛºŒ"—†9 MÊ´Æ´4ù«ˆÙeº/S‘¾®ê¨TeQCB­µT¯ñq9^=Ùä!¾ºðݼî¢K{1 Y(MIÛÃ%(Øvˆš%ÐÊÔ´•ÍVf•ãæxêy~×/ølNÆ‘ŵmlÈ$“’ómñÕ~ÝííÁðCeˆ²»P–1¬ò‰ÂGÉŒŠ8†€ ë¿ØÈÃè®ör>¥%¹T–9øð,ò*³Aµï^;äÌ,SX•7qõ˜5f³it±‹€KFCR õ©åÿ‰”Ésj·1¤ˆ TŽ!h¢Œwyž=× rOˆCV:ƒÅ`ãÓa%ÃË6û~í~U=zümþO2ˆ'ú´ Ð÷«ÈåP;‰¿²x¢T)aû,Ç"› ¸¶¤,K?Õ1¨vN.Å‚ã^¾ª’OìäåÏÉ®<¼ÑÖ|#Šòì°¤qñPã‘!€ åPe2èA­ÖC¦ýRÚÖI=ÅÚ$ŠÀTúMWMÿÿ+,œùŽˆ†Ã½$Žmžâf2@fXⵑ+ú”!œƒÄ-rºÜWÔÌ÷!m nrreeEBÁ˜³ôÛù@ø¤ý•ÉlHÙZKgúÓÖŒµ`Ãr+¸-Z÷ûUýœ‡D“º¾Ÿ,ïJ»ñR†Ÿ qñŒO$Žhñ)6sò¨Ü’¢½Oð¯üÛ•HoM€¥Ór¸årëD`Kv¢ïJmÈÿ“—pìÓj/ ëÊ¢€î…Wa·Ï‘ÿc†#zA;&S´”W F£Aw¥jzü+ɳ<{ì³PDúÀhË|cˆaÝT‚Ü—©W&\Òs"}}8R_‰Nä(åÒ‡.šz¢åf{¡ÈrþQÄëߨÉœ†è;‹Î—•J™ýXU¶'r7÷­2\>¤é\K’9Œc˜ôÜT;tå‘+F—é‹ Ü#ÈjÜÊlxQÇÙä¸2™c "”¬Óúnh=$ãוyAËáþc“æ,/š&Ã…ÅÙ·[‘®I+l‚µ'‘ê©Äqÿ+¨¾ˆ[K»© ¥ÖŽ¥®å™‰§ÃãO|LB‚WÞj×Udø¥P\ÊCn(^«¿Å†8ŦY "ÒõÖkA%#f2äÏï׌êàØú’Ml¥xÒ,EB•‚ñ‰É¤zž^à8âz½Yʤa­ÌP¥Ì` ]& 3Í„·Åðã¸)iJÝæM2{€Ä ’Dªœpü2rC¹<>5ÉÈYñêc±+â»'†¼æ¶a$dדÄÿeŠŸÛŽ›q6ƒê™[ßÌ-àÓ®ŠËáäÒ¢V^)"ÿ+r ÍkâÈHnOs(Ëak¬ÕÀÜŸÝHÄQÔS¸âÜ•›ùðÍb£w{jÌÉ!o­HÜlØRÕ-"ò¡\0ŽÈ‘Ým²Ò)½P<^¬,wãCG üÑïü؈´Æ®½‚Óë­kÀ"EY•†ÊæU!€ ºî¥¸ÿÀã¸ä?ç.ÑÔ2[‰TüÆDèxP¨S_æ¨ÿc‘˜ûYDíî(SkûßE€,y,‚»Õjz0ãß&%³Ú¶{%Ó–qmuŠa›KüLC{1\¬ô¦#b6•J^jvÒ1Y£øÒ!N/é0'm>Ïl žd"âxRe©i"6áÞ-¹qäAþW5Êä/æÎ;‚ Ö4ºdi$|—’ЗP£×}ú}œ·£]nÕ±Hí£’bÔŽOLV›2…i×ìö8‘¿ÁG-Ñ:q’38h©qR›òê Ú‹\„ÎÁœåq;ÄndA¼vä"€jÁ˜7Yd0—VÒæOZ ¼.=EéN¾ }Ö‡+Ë"y2ü­Çƒ'ÃRY%¿×tÄ!«j–¤ WXÌÔw%¿˜“^G!"xƒ8í¼íõuç «9.Ü~Í6R ŠW-;›a{Uwm:âXgã%¿ï=4ä²?¦8Sí:®íè²VAw2Ûz !ŒD"–pª§ªòpp H‘«[=ýÅÕÝ´MÉ”ÉdQW*›¹'aVÂ"" S#"5¯žòRR6D‘jœEUšHì~×ùYD¬¡æb÷1¦áYŸÔgb¦$ä_óûY8Äæ‚l¸‰::zMÁWа`?ÃÆ€äJ€Ž¸ÓÞêöÓNŒ©[xYè?Ýj>0Oí7ǶB,ˆ² bŠëh†6æ«p¢^œy|;a;•ruüé2Ã3Éd¹aI$øyàoòÈ «èÈ…ë›o„;„4ŒÅ “¯Úû_l~ßÃ’#ï,v¯‚™µ”AF"âI$Jü!…hzvþlˆæ©¢Èërpây€Ì)¿ÉøOø–D†È›Ôe"f€}p¼ý+JþÖ ar½àj”§)SñV”!B·]Û§ 5ÛJ÷6×"±òêRŸÍŒ4¦&–œzØ@ÿ™XƒQ·‰éüÙ}†‘j×ë‡I'¨²|C’ÇBÍ÷QÊÇ$IfãÔ’nFC ”Ú›šÖ™V^@6ãæJœIõ}IãäËqw “<”l*»üUãö‡ÃŒÒ;¢È~ô*ɉ«#ÜIB¯M‰cM¾@(l´ Ú[keу¼¨ÈÂE*ÉÁ*¥}НûmUlb6Ó[ĉÄ:ñˆ§Ä¡iêSó0Á-Âbiv•§bêªX‰¦@õ5jµ{‡®G$·g²Û®*·#ÂÃ#û ɺWùpâ'Í nìÑZ/Ã5kê¹"Œ@«So²{dähŸ{ƒÜ¦ƒŸ˜c’gElÊ’U© Kö¸¯EÉ_ ù–5êNµ ™Å™„Ò5/ØÑ%b tûf,yÛn©*OY¢ÝÒ¢oMHZ€YhGNÃoåËL¹µÉ}!šc-Á6dŒ7Á5à:³|9n>àÂ[„ÔF TŽXÔðù÷ø¿–ŸcÒÞ—]\Í öðÄÏñ3«'@¼¶?>¹}s-gš¥W,ŽÎô”ÇꆨXR ñ4ØcÂw®ä_+tòTHK•øBDíCAWS½†‡¯ù_ŽNm˜ù)(CVÉA„E¯§ªÎ RVë º…H Sü ¨ÿ‚\†Mƒ8nwD­Ô(X½"À;š¥FÇnÛàI®NW„ÄdWF, Ü’(¦¨Àÿ/,<˜óBúáÞTB"d‘wÐqnHéFo…©“=ì-^ãŒNÑP½½Ü` ßd~ɩވy.Wdü eU{”l/žæ˜’"d 8 ºJ§‰ß¿LžHÕÇ©„%¸V¹”£¹pÄ@ªW¡Û£x°ÈÄ$˚ǵ•„¨Â¼ˆyA<8–øzm^_ÍŠô]mÌvÓ[MxÂ$oKá@Ä| y~Çì­‘$qlÏzÝ[Eô؈^:\´aaJ)RV ºöÝ>Ðþl36\|÷UôZ+3g"©žxWêrn8°nKõøZ¯Ã«°£ð¨œ4syQ]Õ›—:*« pW·ìäェ–Êž.ÙªC‘R³70ŒÚd§-ð$‘·ÑÅ2ò.6Œ2JÁ›—Ä*¦Ÿg¯LªÛ²ná=K¥µ«ê­eR+P(9Írr>›`ô¯5¤B+HZfURÁƒ‘R¼…n@åw¹,«eHié¿)RxÏÅN!«F ¸tÏ“‘ý,b9:.¬÷$ˆƒú2mÁv$íöÿh}¯‡ú)'ê´½™Úh¤LÓsRµ ÍB>2ÊÀl|¾#v“ɦ"™`a“ÔõK»/"ʬOմʲ^å³0±íXY•…^@’=@ܪ9Bž€rÙq°eðOD~Ÿ Ò0ˆ ”¤!‰äbRìÛž­#Âà‘<>õÉBþYä’AI™Šš©<~-ù|lO/å\– #&÷Jñ$, ¥gñ»*‡fJ­µœcþUûY  €³MHκ}Õ£‘ÉÌ@KƤ‡êô |1–ø¸àÈ´‘V§¤gXn$^,ÅêÉxª=-Z\ò™(ŽL\[‘Á Nò«.{ÓîD†dš;¨å£¤‘Ê ±Z-±ØŒñã^-€u”‰N%æy$ŽGÌÔÔr+ðûø†$îÄK_«Á«$eƒÇ#QO„Dy7eãŒvâjGí.Ty¶Hy®ýOV ªBcå¹TÈ”â|-@”ªåÛˆ†®d µT€Äì '¤¥}2Çö™AfÅ85rP;±#dÚˈ3(éËbƒz„ÿª2™ò ±æ¥{3Gp¯éò´T“sS߀\0"e*·rep슕j«1$î:m–žMCš*D_­Iñ€UÃBMHî;ž™vl#u'®ÅʱÇ^Õ!©²×¶$ïh­q<²3L}EE4`ò€ydõQç*ð¯¨ìã‰1•«3 ø’ G\´lÂ,:·~L/`,KlK‰Wâ*µ?hî[ù¹3dE2Ý« k8™‚Ëö”Üü"»‚ªk ÷+éR·hfÔ¸[*Ì ¥Ø¯¤H«š|_´?ß‹–Cáa{í½¢îlÐb˜Ð|MŠœC£PÔëѹsÊ¢wl!}ÇÄöw$,¥Ü³)¡» V«ßÚnXÉb—ëKs2ÐÉoF†»'BµÜO.ÇÍ«!Ù¤Çõ‘p©)õ¸;[…oÙ3©§XÝ~.Ÿk+ÈH ñ‹(+ÍHÛ2ÊÜEõv—ír’ ]n_gåÉÂ&tõ°”†ßéQòä·V"FU7 GÁ…R”܇ùr²=L¸½* ‰a,å™›â’^µMÕ«óld€A•µ-ÉŸë5n1™$ú”©éñ}¬ª™ µ÷« ¹‚G¹<$LI·H>+ÉÿkörÓËæXjïë¼"è`1D ÀЯÂ+ôýœª÷¦À6·_1›PšXÜ0â‘Ðõ€,GUz/ûcT‚Ô70G WqºÉ3:¯ÀZœyPÿ³Ûþ ¬ö«»Âó¨bB+|E˜py7óô8&vä˜sUŒ³G¤Ä´jÒ)(¼[‚»êݹ0\IѹۢæXeÒ´P‡UuªªsïÊ»ÿ•‘$*ÚÜBö6 #9‘Ø4’R„+„÷/OÙÁ1¹LNÊ×÷1Û,·ÄÏéÄY~*rø¹ãöƒmö“-ȦY9(»Òyx%`TTñ*s¯^ë_ÚÉ“¹j®I}œqÅ;rÂ!ïAåUgbXµFöý¦ÉžŸJ$1ÂÆ8ˆ¨¾äîÑEÌR,¹ÐcÚãCj¨Äþ‰,M z¬{7íq&¹“·\•èc‚á½hËÅé~ñáõ8€ š|\Tà—0˜“M0HcFWب/PyIøAè*Ë”ä-° DÏ0‚Ý¥õ'V¸)$h ‰kC_ÙBF[ŒÕjɱ –¬“©õ ¬n\"S¥G#SAßl¯èmÉÉv‹Qo3º)i†V€ý­¶¦§pÇT¡gÖ¹—'ãÇ—Ú‘Jíð“—Žö©4›j.!·†6I ÄåÀujo×1#ÍÊ#Ò¡an^qЕç@ÕŠì7Ëfn-1¤UóNòJІ  ñPÔíC˜â‹‘µL/Ëšp=Iäç­v4¦eÄ8³;Ó ±¸åoÆ(èI \Ä tâ8å9EÌgeº«qž4J¢š+PIs¸ñ.G&sJb‰¹ of¾ÑâÔjš÷y- æÛÖ–8Á’gPB¼Z7bÜ‹áŽÈ!3Ó"˜dÌœý•u£˜ùI¦üjZr²‘Ui#K9=EX±äÄŽ*#ÜÉk¢´‡ÓeõVXÓ‰Ü5:£/ òZ n"‘JÈ(¬êPž5§_å|5º/eé?¢…‰F‹„,»Ë(^¿²»|_ëa«òEÒ/H2›QUi$ŠfŒj *yü¨ÍþìÊrÕ·Àl§«¼@J²šƒ’ìE9¢„tþUÿ[%”Æct=¬ÐqµRB[˜™ù¢•RÄ€*‡ö~ÎÙ) ¿{ ¥=*YSPiŸ’XLjìðcFP½µê~Çìä§ômÞˆý[£fÿI³rªÜÚVx¤? jýšÅ|k)ª?˰–Åp Üú*êÅÄšV½ùe„lZÁ¢²þ@Üá ñLŸN =)È{~ÎJnƒ¾É¼jÈÒýMɱ´âXŠR¾çjåÍ[pç²X‘#á >˜‘7†îEkMöË(ú‘ÊlƒòŠfy¥+Bb Ô‘N@SáÉ Qcfƒóa1¹\ò‘ùTŠtäë‡ËÉrÉ‘½[†ô‘\1>‘b=j”? ‚™EÉnVB܈UMc_‹n§ìåS-° FŸU‘—xÀ‘¡åö( ø²]È=WÜC4R[Ëé*JG!=\UjŠSâ®FÂËe—êxG >£F¨#ìÑAð-ñá艫o!®žb‰¤”¬c¢•2ŠWÙí·ÅÇ%½¢]ÍÛ¨yYÜäHh×uâ»Sö¶à–ÉŽíViÖ@j Áj@ P¨¯jÆØn—šã(¬,íÄH‹ à¯ù_ääi—U*Á%ü®µP€ˆÚ»´„ûSð±"ä²ßŒ•]ÄœUH5aðÐ’„—V=Äñ9œMÛñ޼©Å>!þ¨Èõ÷&ö÷¿ÿÕŒÎ'hRæ8ÊÜF jþñì½ö¡_æÎ:<Þ¾JP¸¸¼7>ƒ%»/'‹žôêRµÉKaL"lÝ7 sÍÔ¼hA,ì°=ûÙÁ#²Žjó@#z ¢>gŽàlÛѺ÷é‚É?ŸÒˆBÛÓ÷w€OÅUSðöî¿kù±‘½ÔTd™'/Æ_N*‚‚€Ó ÜöqR¯m%Ä–Ìÿ»1LU!KTT|ÙIìäeWL…¾k{xyÅð5»ªÉ4 H~ÑRh³²Ë&¿¤?ܰ‘îÿ|Ž“”,ö¼˜¼I â²·®íضF'ke= .š3uP°e…¹ö岺ððƘìšÂ¥îAc+Â#@zsÊ¢´û<[á|¤÷ù·oö ,cb÷1ÛŠó KSü¢ëJqbwQüÙ9žæª¼ò°úô|Ê+F«]Š».Ϋµáø¿e[žõŸ;r˜ŒÐIƒqº“ñs _µFøÿÕÉW¤°'}𽉾¦ÉEBKT+qj«¹­?Øà‡6S#&ýÌ1†1¹Q”š ú…«•G™l7A zì8+:MÔ•Z±äþÏ,œï…„O©u-Ý­”A]QR*+ÔÑB¢“ã^YdYÈÔBÚFx-âg¸TÈT¨ûL„xwý¬œ¶'ÜÆ=jœ§šåÙcFB„-YdM¹^$¶üŽ8¶®Q{ þ»2Ng{‰i„R :Tõÿ+-ÁÓÆnÑ::´nó1rH`¬_ýØ:ž½öÜþÎU—}›!¶ë­­RKf>¥ÏîÖ$oM^›ü]¸­ù_µ‡ø’O$lh¦ëÕU¬(¥mÖP†ƒ¿íãû<²¹Ojeî„7Ïtê–•_P•‹rV¼ÏuŒ0ÿfÙ1Û!|‘ºk­ÍøoMÓJxTšðƒNGÛMƒ,{•“4’ͨÉÒ¢¹"¡xÑ( ÷ê~˶°äË­(ò *ÜJ‹jÕÐõ^o˜îÜàòtFÌ8º®´¸‚6˜@À g™Õ¶nNhŸjƒ¶<$‹,xÅìÕ®© Û³~ñ ã(&¿†'ˆÛ ®'¨É{+Ü\c E Z†è]òþ×Lª›-ZÎ ƒ«n­ ¯45 ðr(h~Ðþ]ùa$ü– “óMbôBÇ J#‘0œYÁ­C7¶ÙDÎíÑ%ó–2úq7úö¾Ö@ó‹dy¶st1YZáCLqPT ¸©'‘.ó\yy“Jó„‚9žHâ`¥ôêhS oÞ Úeéó›O·ñýàpÇ–äw÷ïÿ ”t%´t  Í4MÎN~„SÊü›’È"u§ÅÇ|‘5Íu×Ek¦ªÁ¢ðäB™9nC/úÙê“)mÔã¸ôÒI ´q´ŒÈ†„Šqtßà^ÈÙ:óahËŽ0hŠ~Œµ, Zmû^ÿ³•Çëlþ+‘sïúÁ ,mJ*9ëÖŸg E†3$;=”pÇÑE¼‹(P6X³r?ÉÈÕÉl–çãécÄ5[M­–YÕ™i+q ò©•FÛ‡l‘Çf˜Ç- WK˜œ<ÑôËÂ=ʆ? j| d$7¤Ä‚- ÒM$¤ $EKŸˆ Dï¿ýªä›;Géð‡LšáDÅc‘¢ ÕWSR+JxýŸ…—’¢Y@MÒ9¤¹Š•âö‘ µ qð¿ìåP¶É¥WÈ‘»H‰'ïM~6;€Ù;ý¬²-G½B;{‰¥t’¤O´Â#U¯Oö?êò˃YdñI:Û)&¬¢‹]©± ¯Zæ!¹1ºc:œw2¤°;nш NRÀûìÙ•£$DkHÙ8i¤Pxòa%RÉýŸÙÈŦ<ëÉ1Ò¥dî} %Jü<ù âWªþÎS——›f.imåÔgIô¤/ëG,rW§#MÈôý“—ã+ïjÈodv±éH†%pÖ_Ýò†~²šÒ€ø7Úû9^#RmÈ.+ôÞƒL‰¹+ºrâDM ìeÈ—%;YõdnD¢Óˆ yµ+µ7¯,²CÒ×Õ1¸·fy$f¬J´¨Ø×„õ…~,ǶúcÒ*‘ýõ(Á;q«oâ~.êædy8²æžij¦Ì¡%J¬î(¨ÜíðœÇË´›±rkWŒKf©$š*šT1#ÛìàÇÍ”ù%“7ÀlYcU~¤V#ç^¹x *ÌÚÜz*óFVïlj¢ŽýIÀ©ŽšNBߌ|æ A°ãÞš¹NaÞÛ‰ n i÷­Ásܪ ntcZ·P›'.bÿšРLN÷hTêê¶ÔBc‚ˆ)B(~c!ßïf„ZN2£:$8Ž5 ü©¶YTÎë Ñ1Eéòeª¿uå^?Àã‹ÙÒˆÂÄš¥I?…5ÛÁ°Ž«ÕÿÖ!¶šÞæI ‚è7¤•YÆÌž‚_µOÙo³œi^Ãô -!’™¬ÆòFyÅ!]ÇÅC¿J}ŸæË'ȸÝÛ)P“Ðñ,}]úÔvíÄøâ4Lv¦q« -_N§¸55ÿ‰`ÈIWGoTÈŽ;ñ ÿ¯½ŸP„`"’FFÀ¿ÐI¸ß½—ú¹>a"ÐíÕ"º·æ^ ¥2ÂÜEU”î´ù÷ÿ+üœ¯)äz³Æ:t@^zÜ'€Êœ@Ø‘Ãu^GÁ‡ÃüÙ(팇N¨û‹‚ºeò1¡Gu€r‰$¡N,: —þNd`*D¥ÿ5œ·ˆ)n¥ ¢£J\ÅÎ9*¬C4aªÔ¤¨]ê¿êå˜Îå« Ù3õ ‡‘¹Æð4®àš¥MU©ÿŸ´?—–PÔÜif™êe\‘Ðòªm‰öÉd;#5 xôÙ£‰€˜©p(´1Hxžáz0ÉÐ2Žâ%«xÒ#e`Ñ‹•©±GRßñCö>/…ѰžÀr]}+}]CóJŸPƒÛ~T¯‚éƒZgt¯;¨´´æ $ÊRH†»tRµÿc”Ä-¤úBÅI%ÔZ5•_÷’ QTòû‡áøÐýªü9oðÓP;·«»-ºóB¬}5á¹ ¯-áÓí.SŒîÛmH5 ¶ö"³”¸W‡â M*ª:å½O¹¬]H]YÄÞŠ)yK#L?¼U-P‹Ëj3õÛ6YB_{¬Á…( $hI© *vß®_ hಉÒÅbEiÃ<>×$j“ZñZåf‰¶ÍÀ®öæŸâuUˆ'§ÄB•êvûMñ`­2æ«kÁ§‘ç¬Ñ@Ñ£ž„»rf~ Õ?ØäeU_Î)„U´ñ“u6aé«*´oµê/#@?kâÁG˜ïÿrB'F‚…¦oÞv!þ&‡ácû$åye{p7A\ ͬs·.wëOHÁÕü>8Í“îYŠ{Y$¶I<27ÖmÂ)‘è„Ô #¨b8­“z貯ª]¤—³Bî’ÊP†µ'~]¾Ë íû9!ȵ]Ò§¡Ð4c¤•]èñ¦ßðXïVÈŠ4˜éIé$®«H.S‰’‚®­Ø|_ «d2ŽL±y¡¯Ö'•QA‹â)@_ˆ4p9õø+“ƒ y!.-#¹–¢aÌË-œ Ÿ©¯Jî¸A®h4yšy€¼A¡xÖ9Ô€ ²Ãañâþ\ÇÇ̇#&à“8ý8†Fhá4èàôϬŸÊÈÜüŸ‹,˜ôùÿÅ5ã5//ø—H&iîìX©–ÒF Ãì´I§`ë&¤Á‰øÈg °¢ü&¿Ê ü'_¤Rãú·sH¦;‰Är „¬¿m*ÊX|›‰8"ÞäÌó÷¢l#¸[~]~Ú9-öìCBÜ©^_ÍË÷²Çþå-%¤Ô¦ UÀ§N5 ׯ²'fæ¯g râ«:ÈÌÇbéCðöþS\„ÍW¹œcÍ Ïq,“#ưú("‚$û¤±¯/±ñþÖ^(4È ¡…U®åIâEH$²|pÊVˆ@„ÛÔ?Sõ“’$‘HçpÒJ+µvãü¹WFËæP°Ë(… rSÑäZT‘SÀö¾µOæÂhš@°‹qµ´qs º€by/Û"½Ù›oø‡Ôo¬‹>CÜ­v>²Ð f¬ˆ9“²3võ~m¶ÿ'jÖ®‘ב<‰mh‚ž£1•§ÃäÁ€è¿µ×âÊàM’Ù!Ñ)•^Y¤©eF‘HïEøA¯û,´lÒw(ëK41 0‡gc±¡ÏT ®W92„{Õâ´i&·X£!áC$lxQO!ÄQ¾Ë{OÔ…’K~/ñ4E™–:/…kðæùpîQ²!OÁ,Ä…w aW=j½6ö†{-uGXÀ‹i§•äòEs2rÚ»ŸÙjWìý¬®fÉ-°Z¯¨×6¼É1³PÔŠÿ­ÿ6㇑\ƒ’[=’¼å'(k½9¯ÅNßåe Øi!q`Ô¯®¤œaQ}2äÊŠô¬w7=2Ä? ‘V'²ñflvÁÇ;ÉêÐF–ó—j7¨µh30¢š÷åJòÿc˜XϨ9S’¥åç&Òà=ŠîH UâWŠÿŸ,–q½°ÂPú­º¿Õäbèn…ŽÌ®HT{ï¿ùYf³ ãtV·ê>–¥\*ÇÀS‘4ûUqc]†Q©´ý t¨¸j6…Aýô`uêxüDü²S>’ÄPN¥Fbx­~j¤Ò•ð@ݼ±¦¯¹P¨LŸ|Cˆ¯óU|s0ˆqNò)ž•{aÒV †r–ê9†áµNÿGÅö²¬¡³ÝÚ±ŒÅ**H (~1Óà·^Ù|ÙÏ’Y£FÑ€ÀÅ(o†§‘’«ñt©å—mWÔ1à ÂAŒ’A¥ynWìàˆ»L¶GèREq Œw–è†`G2û[Ÿøl†aêlÇɸí^=!dÌâ6!ÇÅ'ÚªÑ[+ÏýŽ dÈÇdºH™SÑPÊÑ’8õŒÚ„6Y{µVÊEV «‡$[,qú¶ÀLE?káøÿà²cyr¿W w9+’ß”D0‹‚¹RÔ_çÿ‚ÇÂÖi½„ ;ªË)nuéV éÈÿ6cJV\€6Aêb'–5åU--K‚­Ä[•väI§üG,†uôDÍ,œx[ÄÎ$Õ¤øE?›~˜‹¯62æ·Lø¾¸ÅVVwR‡?*?Êÿc’žàˆóFê 4v…d&‘É#7øÜx¸Ð|Yw åôüRx•¢‹ÕqÔfäÊQ€~erέJö…cœI!,æ)Jÿ)bJoúøäOw›(¦Úz:!m½@_©m·¼xœ®MH¦ž0ÅŠyT…5 *iÄõø©—²¦"ýé.²M4ã"h#V4eb>öTû91¸Ûa[î©s4~™œQd”??²Ìi¸5?°¹7I¥ ±¶†Ù±ÌÊZ£–þwZí\49õPon‰®œ„Bï;Æ6¡ýáâ9äåyy¶bä…"±¬RÆPÜNîÐ/ÄCñÿ—ðÓ ×Éhk”¹ŠÈÜæ˜íöWM¨¬Gò¯ü6Hº+eK¨–(!…U9ŒœYéêÄ5þ_øß 3æ²u¿©$Ê“ ŽPòQyjÃÝy}œÉ#ª[‘$dT™Øz„€Ô¥Ï “Ør îh­Ì²˜ãZ=jÕ ýL€dPöj8 yJ©â( ä*Û’ݲɞlBüMo;j$>—*8Öµÿ*¸z¢¶VIKÜÁ 7.•¤`kÄ|}º{±[äÿÿׇéK4÷*íÆHÜp…W¥¿Ì­O‹9 b<Þº$Gr;TšÒñ¤¼· È4‘šPËWÄ2ý¡ö¹dq‚­o/§ `ѳ”` ‰‰d/áÇ¥êÙ0Ðm·—Œà´kCðÖ¬„ö>+_‡$Æ·O/_ÖžiT†j¨‘…9–U»ug\ª#fÙŽýdí¯ âëx¸8#}ƒ¶_ &‹Lö›Y}fx` g·Mit­»ª¯Ød?¶ÿkùx|FBqÄÄꨪ³ÒpÈy!~Å6§ìñÆjDùÚP™aÓ'´.ÍÂ6žj`h@—Ùä™8˜—¹Œ¯„zëÅf{fX¦„ŽßsüBZvPÅ•Æ W?Ç I±ö¡­Zò+XÕ£y)$ݘ™¸šn[áÿ+€NÈ4- Û%éVW…g ðÂhàHj•÷2©³djÐöil‹u,ÄÜ–g'z»’AZû³–^ãú,;üÔ- Ü’›z“pJÊãn,Oܯ†Y>fšáÈ*ÜKê[r >!©ÎëJSü×+‡6Räˆ1·² ûÔ1Ž$ ÿ²Ù«û9¼‹?ák">®%ž7që‰R8X-Z3öG:ü+׎Y~¯ƒXŸŠ6ùaõª\žl S¾Ç­EhFQ nšácµ U€.ãÇìiŽÇ-Ë ¤F®çÖ·372áÁPßd.ôdûUOÙ9ceÈwCé:t³Ü_…9…PO]“a^¸rËj ÇK‹m~­˜Å»r™È+OTq¡ØÔqÁŽDÙOžË=Cê½ ò~Õ$’+]†ÜFÿË„°+§p *Ô±U·ŒUh(1§j‚¿åd„{Øñ"ê©RꮬˆF—á_„S+kg^ªG"ÂÂFnFfPU ßÍ¿Úo‡"“.‰eÓH"t…c—¡ÜöÛ½K¼±‘䯥•X„ÕE”•ø[‘äz/ù4Äó¥›`ÿR¸ºM=´µãLjÛb *~ÊäeÏܘ½ëZò—wŒºÈQ†§Ÿ‡$#fU_±ûXÈQ¤FW»L -,d«Ö V› ºŸ¶Ø6eºc§E Ä tã#FóI*ÔÕZ¼iËì®Õâ~Ï,ŒûÙc;¢mŠÅ¤20`ª¥TèãâŒW¯\ª[É´rÝŒÆËõë´ê´€[î®U–}ÍØãÞ£ ?W¸’D~H=RJò1ßáZ×ìåƒp/ñÄÀötµU!YTµP_ O¤ù«Íн»VæÑ L¤»LëQÄQЧá.+ÏýfÁ +e½99!Œ‡—•w¤…;õø°Om“ ÔüÌ$šÅ^p-åe ‡o‰Jî>ž·þ$d6?ª‹¶¾¶M>KYî)@‘YTú„¨ðn?ò>@Á/ÓE úGÒPdW¬‘8Ù‰*YoÇ/'mÚjÈ¥{ûDw–kv.$‚ ²†e§Ì·û„eÞÙ8÷*éS¶×q± Ȉ¬Z…Hg9׃}¶þ\è¸ú·qç麯ÅP ô­:ÙÄl¼Òëºn#,¦KGW´ŠCE6òQ€ü’?àÛ-•P?éš…ÙéSð“\Å-º [kŽW0BÎ ÄëNjý® :þßÛÌKÛ’AJ­v¬Ë'¦ñ¹™J€xŠoþÀ‘û9tŽÞö¡äµo :£ÍÄH$‚9©Ncƒ2ÉV8«ì¸D}5ý.ôÈâõ_—û• ­u mV$´uš¤SÃjº5[œdž?õ¯üK®|ÐIÉY8Ëo4!ßv„íð«üUý“B›d+«#GfïOº³…‹ÈÑú‚JƒF&5ëN€†È⸖Y7Šž¤ò:E*šÄ©IBŽÈTƒâ´'¦[‹h×îÅ$ê©3’ÉrÀÆHž †«2'ô$~–­EÔÇ HJ³’V¤Q¹2šŽ£ßëc|jwLîÑ$aë5Ã7ÅQ½j8¬Å\1 -æ˜Z²ú³ˆÕêíêJY”‡|LÕðdд‘ÀQ §$#ŠPOQ½Xl™‡-Ë•Lzå"·Apõ R 0NE¸“â§û,É‹D‚è\»™wŽoI¤PäÕ*‚ü?o¯_ÙÆ\‘a5±YÈ1‘BF… Å*K0ìj:•eضbc¢'¿³‰è†GV*ŽLwÙûqãûñ<̈Ûàãžlž÷Ӟɔ3< 8° &ûOÅöiCûƒêQ>•ãNXžIñ|}?eÿ+Ö¬›}‘‡r—jòÇp©/¬òD®ÜY7¢Ò>JÊzýžY~.MYy”òõem ‰>'À{)<˜NýTæ0úÛÀô!-BËq`誄RPwvýœŸI5‘¸Nԕ̨e~;þè"mCó­?à³܆%rªO¢Ÿ»q.Ôª[“cÇl̉Ø8³æSÍ0J–µ·Uf$ðYGâ~Øóòœ¼é· Òü7|ÕV4<}HІâOe;üF• 0©eÖоš“é°<…Ô§"¥É¥XÛâørÁÞÒzK¨K°Ž€±…Ð’jY€RGjÓý–’>ÖDšZ…Ž€JB±H´ý¢ÕcOöYQ;ß“emK¤IÚÌ‚À·¦ ¥C)^­·Ú7Á9“$´ ¯‹›!5øýGHcû™‘]\r]'jQ!Wy™Œ*êK¢Ÿ…”ÿ;ø#ê^ŠW 7¥quô¤'œ€È´(Y8x²Ä}žXc±¡ÞƒD N4Ùmæ·Žè,Þ‹30‰Ø1³î®ßïͺf,ÅäDØ q¦–~|hŒÓxéZ%oò›ù¿ÊËc³\…”-õ±>¬jHV¯Pܺü@1é’ÇÐûØdæVéK‹«‡<¢2A ÈÛO‰¶PÃÿ\”þ‘þt˜Ç™ø#/’âM%Œ¨LMU G%ôÙÍ vøv^ƒáÈëÙ°ý)b‡ŽÜEÄdƒ0«QíËc\³œš¨©’â{(¿w6*ïÊŸÞ;þÅ*9|G—/³Ãм¤ÙMíL'û­‚5p£"?欠·A&½Þá– Ê*Ò«_ýrÈ f7C@^K’‘ˆ˜Ë±*eßâQ׊òã–‘ßÔµZ«q0pII0ø7`ŠÕéÛ$ª¤¼¯+pÞ¤|Áö‰@T탂Åño²6ÍÚßN•ʰ…ບ]éRÇ+Ê.^öÜJ„ BZÇÅ¥03´‘#T©Ií¹Üÿ6$ݤ-xã+×ÅO„å ß½´Äú(Ì“XÞÉ ^[9’X&¨$ê;ü1 äŽñÛ¯ûßø¥KuÑ¡¶–æá\ŠOXC+¨zW¿oø\Ë™X-ÒYã`‚>p‘™¸‚*y ׎Jöa!º¥ê$¶RË"˜Õ‰™Žœ[|zŒ„,Î\Š&Ýëci;‘¢j72MOt»dÔYGx¹šh-ÇÕÑT\ÌÛ:‚BÈOÂ6<6û_ËŒ%¹¾äLzVêòE,Q^MN MJGJ°4« Á¶Y*76æTE'ÉudAö¾'®ÞÝ9e îj «jƒBÅÀ+±E,\ÐÔÿ•û9)‘Ý=Ó!† u^&´(ÊÕ6$©9t\Ç™ÝÈ…RM¨Lêxx–NaIk”;s§Åÿ]eðúZ'õ(5¼ %¸Xœ¤* –äÝÉb’»Ÿö9"líüHåðD$rÌÐD}f!Õ‰b¦†´P6?gàåö°J\ü“ÞŸm,—s x$Ÿ Ú¦½·û4øpHФFî»ÌòYË c¸`"Œ0gv¡V ÒÿkÉØînÐò ‚P¢ôQ½”]Çòò+ …zÀ,¥v¨e·ŽÚÜÆhʧâ,Ôý¯ àì’i^V¸šàÁë…ˆа¨è*×Å\ŒH¤Ê;£y4d¢…’T¶dÝiéíÉiûF˜N×}ÜKvж_Ž45’RÆ3 êͺú›ÿ587ú¹Åmti›{(}^·±4-ÉÑXJËРméAZ6Jö¦º!tÑzš‹¡$‡tA³ÁvëOø,AæÉ#­·©Z0©^í·í?ÅrES&;ŽH²4`ñFŽ9?6âÄ*Ýþ×˧šâ \Í*'§$Ÿd±!ToOæ#âUÄòR®Ñ±–Yœa+|Lô JuZ3²Ø ¶UA~Ÿ°ZÉuÄ%øƒQ‰=…hׯòà•H¬l÷s<°Åg#q”£ú1¨.*¤¼híreø~!’­ííE*ž6ZOFD–z¬Cuä«CB?ÊËh[ øWD‹}§ü\ë¥ ·%ê•ãñ~×|G¤ ÊÓ+=BæÏŠ\ƦŽ·P°xú0S×§ïù?ÕÈŠ"‡ù¬¤Hÿ|Ñ´ù/ôæŽh¨dô\Ö7%£`jU“oƒý–$ £³ w±º7Rº·y$Alm&ˆG$kZ‰ao´Áȧª$ÿ„Êâ6¶F[×TRT·Ômîù´1LžŠ3…Ç5ZtN]¿™¿ÖËãô‘ÜÓ#ê½VÃQŸër[;`‘JÍ»’©U#ÖS,b¬uü²mã苊٦¶[Ž YVJ„È9‚T~ËPòÿ+ ¹ü‘ ÂKr³Ggè-}y ëñI”žKþIØ×-€°GùßéZ¤j¿Ry «À‹ ü«E!Y¿oÙlªR£äÙØó¤Ö³'é„ÈZÁÖxÑ62DX¿Ì?g *ÇŸ¥e{´ñ‰-ç¶H'Y£Fz%™”mN#® žæ_ò´Ñ™ ’.BVAÂïBË(*iô¨Øâ•¶$+tT¤Š¨ü ¬Åzq á†vJ"ÜõÄwKµ­•‡cY¥F’‡âU`v>ÌN]ˆØòkÌ7O5¯U,¡†)” Š SÄo×í/ÿÙf4@âo¿BO’Auoé†xíÌ…TR¦¼›ˆÿ‚Ze’›U›N̰ýUÚfu@*( R 7þ|Ær»£½Ämä&v©5§j Zæl"œIš6È´Ûxâ²XíÒI0S+/ÆäSò[üŸåʲï&Ì[Ú¢9€2Ibv,êj­ÅkÓ+„ìÑmœXìaeX½EX½#T©ªÌ?æ–oÙøs 4uD]È’ê,ÑŽ9 KËÎD‘­ 3²‚w;R›Wáã–Ìý>æ (÷r)ÏÌ€#HäU  Ž5s‚=TºÍnÕ*n˜J®¦àÑjcô̇‘þfaöídø‡sÞ™#]&êÏ+2rD}Ù·-Hû=¿Êl¯%6cºS/4R &gg @ J 1b¼¿õ²5f™],»ÝÚHSà¢Ô)$FijrããOˆ`½¼ÒB­‹G-ÔÆ8” «*©Þ Ÿ‹s×—óaÈycKd`÷帑$ˆ!‰ž™P “_Úû·”GŬó>õ{…¤¯qúÒŠzjEjìv¿²wÈÄÒHÙHÀ Åê9ˆhfn*O6øIã¸Z7/òW$<˜”$²LÖ·aÑáRÃ3¹ýrBõ¾~ä\d;Æ®yznY‡ @ë_Ùa…¿ÿÑ‹XÏ'ª yCÆíÓ™-Qö¿û,ãä>箉û Wö76z›0yGFX$ªq·³r û¦þ‹%Š[1Íi¬@úaÁ5 ¿«BBTr#‡ëOÙÊ6ѸAÇqw±s¨·¸-¡i 5îµûJÃ,#ÒÖ»G_¡ô&Xg䲫Dh¬‚TpkÀ•ª¿a¿oìeq“i,‰sg"Ê.ÑRFû%â)¹`?ݱ²_åå›YiÞ‚.æËë0M ª4eÈ#Zs|2»Ò•GøY¹|_k#ÆE±,„w#¡Ž"ÍdìP:+A",@ø)üÔøW%Äy±•g˜ÌœäBÅ]‘ø±j­r6¢ïñðÿÈum#d§ îÖ Š5Çï¡ãÐH«ñµÂà¯ì~ÖY)Øü?îZ¢*_ÖNRæÒ{s"áB±ãñ©;nµpüy~Êå4D©·b-BÊqslѵÌjBÂV¾ªF*:õ,FêrÉzw`=[u¥¸åŽú%‚'Õ_ŽÞMCð~¡Oòpé!dwId»Kˆn#n1 …‚p;Š>/æÉšaº&V•!”É,s·¨±Ô0pß.ÄÆƒ+pØwVÚæTÓ#0¨iTI@©ŒHø‡dmùý¬ JÖŠS¾ÔòÄLIi®IygW¡wB™«üÔe;~ÖF©re3qWÕáúÌò¡ª€§ÂX ’B‹,‚ÂVÊóEDʲ³Ä¡j*M5þZPüY?[M#o•Õ¼ $m$`Ƚ’+·qÇoÙÊø@¶WÉ9´š)¡Œ²ŸN@Ð ¿g¦Ù [àE$*öëÒ34ò¼Ÿ ˆ»Ô—n ß§\Êè{Ýyv–'rÏ'ªR8ùû[¨Þ€F£ã啎~æråïVÓ™aV‘…Mªã1*¼UÁ?µC\–MÊ")#©FÖ¶î®ò"ÈÌÅO¤¤“Å{œæm…Ùhím$w?WS!#ÑV!¸´•©Ó·|‡ ìÌl-FiÙYfšQ}_ß4câø˜NƵl”`dhsc)VåHíÚftF„7ªT·L ãFþ!~ödjPHË0½ÄÆ­F廓¶ÍvQ·EŠfŽ¢G#PTv¥:'‹}¬&Î剮JÐLQb•äXÖ’ƵVz• ¥k^Çìÿ²Ã[§‰[KtõÊú®$ô}&X/%^5åû\«ñdgtÊ]'Vô’Ê4_„a#T kPI­wê¹A·[7™šÞ@Üõ#^@üR-hV „佟2+`ZIU¸Žo«ÊŸv`æƒw+QÁ¿Ø•Á„m€ge!ºÁ‰\€Æ09ŽÄtÁ’¬û×!îQ¿–EšP‘U¹q˜TtqCMŠÐö゜Êñ¦)'© Ìjâ#REvý¯æ®]tÓ.JϨÍlðʤ)ôϬwèÛ6âŸlmLáäïn]Z…NPj¿‘¸ïñY cbÊ|ÂS‡Ñ¸øÑ$^›ÕÊ×µ9R¸`odLn£%¯­ØJ©§äE‰PH¯ù_[±¶°)X\9Ô¦˜”>›9Fn@|#½?g–VcB™ÞéÅÜÑ}NiTúàby"P±ñëÓ)Øn$REWåp¯!{u&Y8Ô–v•§¶dÍ¢—MÏnj͊Lö:¥œW<515èݪ8˜pnYæáÍfŸ?=Bà°¯¨hçýÙe!”9 ñc/¤R"}E/šBæA']¤FÂ0,ü2p<‹ Žjö ðÉ{)ž2Š…bg¡,}0NÃ~˜eb¯£L^R*¸‘¸˜Á ñ“Ú½IÊòp(fQ¤e%hYš§nE€…_5ëü¹#Õ»,§d¹Qc…¥…äH® T:¬J|G~§âË›÷N¼nB+é¯ÕÝNÀòPŠnV:|-‡*D†öˆ½ôkklcwãȺ¡Û”” M7SANYز™t +Ë]J-þ0B¤k¶çö²Â c½”Sܸ¶[T‰#†+!QRîw¨=z>@½ìÉè¥l©,sÄðúrÂêxìS $ÔüCâÿc„ÄŠ= Gn¨‰¤Wš8X fýåÌœ©Z *Ð×üm‘<¶g·%À“Ĥ…+FE¡«Q¹)ñ-ñc¸ôl½%~P•ªîdYOZP€6<}þÖ<;"÷i¥A DòdŽe@[‹H@V}ªwý…Âi½Œ¼M¤‹/Ä‘ºüAÇÄ~"h?gö²™õ Ð-k$¬°& Î$¯ã!©Ê¼w©Ã„nŒœ’èKJž¨çJ©- Ì•ã¿Ä tÉrÙ…î½}Xï¥åÎI= QâÙQ·ƒø$7ûú~!çóN$ b‡êÊ-uU¯iñu¯.?c܈ì{‰.ø]Å+êu@ ×Ó%¤nññeÑ­‹Lùà]/eàÈZ7©D(Ô¦ü5?Í“¯G>¬¢\™m¡Qr²ôæ£N[r¡~"rœì±1ÍVX/¯&^Ky§—Œ_XÕ™\/ù,¼©™0Øs nK&î[OpÉ,#”Ì¡K¥hw=›1H[w¶Äš´¿L•㵘–Ô©R£r7b|*>ÈÉå¦8ù¡#õ§¼]¥W[Ÿ‚BªEz#û_g-GàÃ&擽|Ëõx¡"M€0G¯¡1a\MçéA[ oÒÊz‰Æ Qˆ­(hÿO,º_Ní#êÙ>u‘mæ/#†Rü | (,Y˶b Ü¢X¤¢ ˆÛ(õd‡×¸bM7$±ZrÍ€'«„Féæ˜’L$Q¼Q°^L\’@k“Ó†ßëf>Yo»~+[¬3½¸r†•Tx $q½ó1Øep4[$6Kìí¹§¥è+G$ÍðÉ! 5¯Jï—׫EtmãV1Ì¡MâX!JŠ~Î ›I“^Ú8­Ì’6ã”|6@(A'ö›ž@õHÂ&p¾™"U îTîÊòu~¿ð?ðÙX;·’[ܼw•ÄŠ~!_L’YÏÙåþV_.M=iw:IúÅå2°%ãRíSìŠn8å°úš¤vFÝÓÓ´[qȱá`*8™¹šŸðM‰ôîÈÓ-5šK œ”º’>s;);ÔÑZ½<:f<Å_u¹ÙKw1Ñ i%›¡R*f'c¿Á–Æ&Úç$Ç!ô˜ÀÍ£áÜüTÚ·®\ I戰ž6MI­Ð~ê@Žì ,)öHßãßnXÌPåQº¯$µ‚(Ù¾64$AÐ~×òÿ“˜øù—#!Ù-v¹3ËqXÑÊ/3»( >Ë?|¿`жSj¤‰’ÙEO#ÕveµÍÍWÄÕ„ Ý6¶š-1¹©6áO0 € þ#þ¶U’Û±Òz‚x¡gPLd‡'¨f<ª)özÓ ì§š€h$ÓÄ«2¬“HkPÀˆÔ•Y*vø˜ï—FûƒUò÷¯œ£ÆD¤<« <ãHÑx¨-ïLòA=èyVáÀ/(¡‘¥áÑ µB…?k% M’š#}bÁ#I%]Vbx€k &¼¶nŸVG«}¶oŒ¶]ªÏ3Èa;ÌÒ¹š3¹fQð‚FôQË!9¦V¥e 7lŸXãR8–ÙAH¸·ÎŒÄ Ä?Ži«µÖ.VÖãŒlÔTCÙA,KR>ûX2lQ’Qc 4WÍ)>¬Í bH¬M'‹OõW/Ù̉J¨wE¤ ³æŠ{¸ ·Y¹ú/,œŽON,KqïñqUÈD\ŠIÙÏbJ²ƒX¤õ@_…ÔË->&ÉBhY½$R¬"™Š˜eì½XŽçÀ7Úøp‚:­"ÖKqe<²¡‘Hr¬ >H5ªH<¿ÉÀy€ž–„±a#°n+”–ةھ;S%1·Å÷Ÿ¸ühÄnÞ¦Ôò•~Ë)¬¿ÿÒˆÛqK–‘KF’b> Ù×Ùåñg NßcÖŽi…ìŠöá£..a^µÚHÅYwo²õÛ‡ÙÈ@ïäÊbÇš²Dín+‹Ëˆe&…¾" rÿ•‘$[ ,%×6ÒFÞ"òªCÝMAÜ|ÑòËïj®äÊ»ôdh‡(& Š&møº†¡_æä Äßäåti7ɾœb!@Z)}D,ß$×`veß•“òkºNíâ°’â!1ç26èΧ­wãð¿õ²±*o1‹ÔšKK‘’4– _³Î3¹=×ù‡ìüY`òÐvj#tlü£YWô˜Ä “šÑu4¯ý•ýŸø,€îÌm/÷pò È Ò ÒŠ:4ùä3¹8J’'=íDk1šY¶  Qðý“¶ÕÃ^ o R}'n¥~¨Qì­¸*b 7!Ç]¾&®í2§x®†)€çŽ9À ˆ¨ =9)ÿ†ËGèkDO;zȨ k ¡RÙUSSS¿ü.LŠuo,ߺ†RФÒYQWãP(@5û7üG(”E’Ùh†Ê_ô¿QY­Ö®±¨áÇh(½vËÏ-Ú†çdV¬Óm­Â:4ÍQñòa± ý)Äÿ6C«,§¹p ß]ª34mú šÑNÃm—ìþÖB<ƒ9s)têËq¬q —ˆv,>œvâå–ƒm|+VÊé’&б„_]PŠñþdffÛù~Ö!º@;*YÍ,[D‘ú¿ú¦„Í8«V‡~ÈQüØÕ‚XõVí”Ù75 ,Ž@h€ ¥k·ÚÈ‚m™ªT‚C=ÁHˆ«¬hTp$½Wåߣu‹8î&†Þiþ0Z¡¯'R^(üM)¾J­Ñ(^Êìòþð4~“7ýBâ€Wþºþ\ƒ$u“r–ûQ·}ˆ¸ U§í'n_Å‚[Qæ˜ÆÐÇmê"·9“„Dx¨û-ô¶PKjP¨Æ%º. Âá­Ö ¸•APâ£qâßd^ÔÑ[Ú‹±62I1’8£v«´/ ÛíÚ…†1©ä›i­#¡(àµU¡¡ãR)ßù›#”'©]ZË"‡Zf4¸"ž4>ù3šW!oRu¯ÄCK±øJîÛáðÌ€"«,aa¼T$‘¶Û×oøæ}ìÇ/‚ÛÂÇêÊñ€` ò¹ju&…HìAÃŒnwFBh!õ$Y/ƒáÁå@W“R~Âà‡$äæ—Ú¿b2LUƧ›!ŽþÿØåíH˜§ïä£ñ 34lÈ8²ƒV«ð·òÿ—‘U2'tÎörÖW>º(H¢ä!¢²V€¶ýjrˆÇpCd¥²[¤4‚B¦WW~%£<Ï ¨ËrU5ÂûÕ­ÚI5øÑÔ¤0$‹à€U@_²kö¹`;CÞÈo%TÚƒ< rœ9‘µE>öçCÇõòR€t+Pê²k£³‚Cv%©â;.Xßì˜ÕÕ¬Ê °`Ãh_£¬¨}Wå]¨Aá†ëøþjd$^™q F¬Å¥„=×÷NÂ:ýOµ‚l VÄ¥/Ësn‚±9î*^ ïÓ Üo«´¶úWÞ[ÑŸÔIXƒÁ·$“ÆŒ)JWºÿ2àÙ9"„µ‚ée+fExdåE,ñòðVCÈ×ì¾ü~?‰4ºIı¼Ê[Ð )äInr>Ñâkþ¦14² ºs[ÖUfDŒ¿>|ª¿âÄwßàªÿ­•Ó8j×Ö° 5n# “Û»Ãsš©.k-ô¦Š’ñܧ®Q]Á䊆AÑXQ¾ˆ|eB¶¶1–ÇuY¦v<Äêí8E"ŽIZq )ÛŒ˜@YÑô·º··d(!•n PI,«BöjÛ.Dš4{¸V6Eù¡µ%õ-Š=X‡‘91t˜JÖ‡Ó—1Æ)rÙm#ÛÚ%ÂWÓsB§ìЀ Ѿ×%9 ,¡°K^K9ÕPÉNíð¸Þœ·éÀäÁßͬš±‚ªNázIò_ˆ-6$Ãø¨k ¹ó@÷*MûËÐULl$}6oˆ |f´Ù›ù¿i[̧Ñz¥þ®¨¡&S£eöÛ¶S¶…¶GaïT‚HäÕq$l$ˆo„’ÄÝz×$G£›}iEÚÕæ‘ YŒšíÎJñ»±¦Nƒ ó]i(nC…w¢ú‘©à…ãÛ•Nü”pÂy~;Ѻ'I–ä°&ŒU@’Œo]ÁœqG ÊØTÖ¦/k ²óå(¼Žñý_ådqÆŠrJÅ»Mr-¾ÛN"Ì%U­9JšSƒu†Ë4 óC¨IrXHiQǦô åÚ¿gCT 6+æå%´&_ï~­^lÅ\˜3Ëz5?ÉÄù¤‚P« K*ÇÀ‡uy–â«E©Þ‰¿óqÉJT-ˆ\¶ÓÇ$rÎÔŽY=nHm4BužhO¦à:EFÀJ°ÿ¸;Ò6Í I14#“ *ÿ!{r®Bì†g’6!nGUx‘Ù+QPH=~ÈðÉŽcÞÀò(POïT¨HãMˆ ü®_µ—VÍ}_ÿÓ†Ã1·ÔÊKÍ„Ë,A¨>×µ?೑ ½`ÚJ²¬«8GiKoˆÔ«ZþÏ._dsY²õ!†'X^hV1õ…”xŽÛŠý¨˜}¯öX&w,£Q»¶H®šHIhZ“#ÄöƒlkÈŠÿ­ñaŒ‰ L@*ͦ2BÊð¨?1×–à“³ûUæ«û8ì²0Bza¤¡ EdaF¨î­Ô•îÆ¶FÜ]Ío¨Z4Y%J<&Ÿ Æ9†§íRœ[ýŽWì¢ÚeÈw»Ì Ü/5‹˜ýR†@YjÝÚâÇþ3ÂEôc“Ô£§±¹¹GTi¬ù©b9«¡© ~ÏQ¿üJ[FCºLæ'¼.³xÌÜ”‡!8¸@cÒƒü ½ RA ?QôyAÉ„ªÉÈ@JnhwøZ‡)6ãɦHž«N±ñç^¡ì:?¿@Oû,žF¸l[Ôù}|@dL‚ î”…ðdã²gÍFãÔ–úÐ…1Ìxz•ØÔšTÿ7åÉaÔ.¾’G:2$P G7cn\OÂxì(éû9FÄ27{ªØŽhh£I.QÁ€o„×l†èÆvrFŒbF(ˆnä‘RjPŽ´ý¯õ°_éC)~”F¦)µmBÀ#'Œ»¢ü¤ŠòÈÇ™I䢿\TY$¯¨¯ o‡fp@ø˜Ärè6Ó!ceMQ&7eјH*ëWܰRÈyáƒ)¢={‰â‘"U‡Ô“ÉÈž%ÙÁjOúÍ€€*Ö$”¥¤)}Ì €hPÈ)Ù·&Š£')ìÆ1Ý7ŠÒQ¨}hºúJæGp ¯±ñ¥cqíæäº9ýK}Bå¤h½Y©+± À[‰û&¹. 0'™CÉÎUã+G[xÈø¸MŸ´G°ŠÄnmy7¤©m'˜ ´„t?GÅ•ErQCwPz+T¶Yâ ’¼ô(Ýið•ëL>ÿ‹ýê q: íc’áÍb‘*yò AÜ7-©ã’­é…õFY‹Xä7BEyðRO"ìÜ—Çsü´eÊåflˆ«oJ1ÉsÒDªƒ÷¬‡uZx@¦Fb1"ì©FdšDhÐ}¡ËáÜð Ä_øl$±L,Þ¸[›Ê ïÓ~zíûYtYŠ´êÔ˜ãð²·%þU*A­64Ê7ocr»z€+®Ôf]ß}‹†"”®Ù‘EJYžX$J5ø2ŠÑX©^ýÎN{bNÉÆ˜±Ñ£ å×7 APPÄu­29yüÙâv¥$>ªÆT#DwCRyÔÔW¸#ŽDRH$2™¢š>=@ärÛeàïM•”AJ…u|_“ñ TÇÇ FçÞÈ‚î)ëFZ„E ªDEOÂjiãZò\1ý+$-ñ\Ë4mΑ­¨Vn 5pÜ~0䳿£k–ú+V…ÄhƒâcÐqÝr`ÔO›]Y ÕŠðȃšòÑ(=7%X¾ÕÉG—ÁeÍtn.-HXQýùHÜ{’ySIw!OG‚n%$ÖR†’ѨF܉݋/oæÿ'IlËwFÛÅ6ŸÄ䦊0ƒâ'kN5ÿ‚ÊŒ®ƒ` C´¾Ž™hQ‹«GÐú’>Àu4`@å’äCh8–6‘ùiL¿é V€ÿÀä¦z"+õE¸™e•œˆšEŠ0 ÑA§ì×ì㊪™N<Ê…•Ó\épÈ*In=)•ê*âCR@g·“˜LbO vqò™ +»Åê*£1« ¸wä’«a'bÆ·L&„Mfö× ëqú°LäÖHGN[îуÿÈ Ù™ŽÔPvöRKê/¦>Y‰j,8s¡4nŸ¯ÛÉJtÆ0½—]Û,NÌc Pa½QO¥ißÙ*štIIðXÍ^1A^€qìßådr›1ìU´‹ñ>-µðäÒJ£’³¡1ÔžÁÁÿbØÎ4Ù¦Q0A¿ê¥Ž’ǨÜE$…’â7D"мâû²ü<g%ÎÕ,õ{ÑMðXØÈÌ“jO‡Ü€Û­Œ÷‘¤CéÓUJÅü%@TãSU=ωï•dæÙ•%ú›F÷’rŒ²42G4!䦣¯í&øqì-gÍ0I X9¥Q jK) 4íö¿â9 ݘ;%Öe‘ ó‹+¨« ãѪzòß-;´…¶å,&’5|D,-¹pW‘ßµ)öq‘-b [ •o‹ÏÇ›ä{u¨*çZaQDºZ:h‡AE+ëÆc]ŽÊ[¥Myåê·XûQhˆ<Ò´€<Ò±yQ92‡ß§ò²ü-’Ÿ-˜Ã¥LÓ@jÔEiXÉ@>LÓp{*ܲ@lÄóÝ}µ¿/¤,ÒæŠÿeUk¸ýª¶NG`"9Ú•“Ë ²8õ#p\ž}XŠ*ô«©àpÕ†7E½B+›ƒ’²§$F¥¨§íuêýžX"@´È¶Ÿm ÓŒQO5øˆ*¬•ä8ŠíÄÏÙÈdžöÙì©yê[éig3Ó̬ãaÅi·2š½2 ܽÉ;E­FiVñâFå ŽXU#•&»ò–›'ŒÅo;scÇÌrâJ¹¯6ûK˜ƒ¹Êcš£Ç"¸ >±3«M"Ö€ @>e¿iÈwjÞ‰ ¤¬áâÖJ¨U<Ö•«Ï—ìa”¬XcR¥}9…¬«ñ«Fì‰Íùì¼”µ>ÕWeÈfg‰(¿¸ŒêlóÕä•X$¼‡!T(n»}¯òrøGÒèÕ)nm?7‘ Ò…dX¸þ j¿:oðæ)ñ>-ðà@hÅ9b~H’F ñ&ª(Êz֪ͷ§–ÌU{Ú¡¹ø(iÆáx¤n)è—šŸH1øXœ~²y:û=njÝ-§–€õc"ÀƒÝOLÇÄ-¿.À)Yüw©"¯ÕÚ8Ö9$ò#fÿ(U{6Y.TÐ7)µû˜¬hhc PÉöTxïâ~ÖcÇír½"ž%·³h]C³Ü$ÉЗVhÄ™kö?k2â 7äážI¶—ŽÞ7õ]ê(Ã쪅%Jô¯.?QšV\Œ1Ù_P!€ÇûƸ‘IMj«â§áj‡*,äÇhßVžµŽ5oÛ@ø{šÓù³+¹Ç!= Z‡dzGËŽK$îÆf‚¥ú[ÍhQê²Íˆ9-TÕx*-O÷•É@Ð÷,‡ÞšÙmmi<8ÜqãöP Ç^'ö¹~Òæ>N­°A^I$zƒI¦X¬²×•v @Ú¥~Ïùk,†ÿ62AJn>’€ÔñWùAíü¸EÓµ](ïžwK'-ÀâŽA@ îjOÙ?e°æ?M#úŠ+U„qúq8䤊T Ù54ør¨ÙÏ’[kmýÀG,Kêy`–¯º9a—Þ׺H{ÇrÎÍ#¢¨¡”T‚mWQ–˧’,îi‘K¼AÙ¸Õ…ˆjQhNÍÛ1òŠnÅhMiY„±«‘,áCð¨y?6((KOõ.k¥!’,fCm 0íY¡î·A†7Í«P·dyÀfTô‘Úm€âà\‰Ù: ”­ˆ¥ˆöಇärŸ4-M¸ÿ1ä÷¦6ik,~”#‰x¢$˜«ß…*Iß™bÙLÆíÐäºB¼Í~5•– T¨ (þþjÊäÙ²è@‰>>r¯?)–%¾q~ÅrèØÿJÕ*ûWÚEÊÂWY*dgxÉ&„ñ¢)+î|pKêcô” µi% ôvT-ép`{xï“;–°vjo¬Û1r«q€€V¾ y}¡þËô²vîŒQ$¯±š ÄÅË'%jô4¦J;±*3GÉ•ø¤³“+„ÕP†ªŸˆÿ”ì®Ôù,]v‰-²p­Y‚¨Ø‡n¿ŽÊžJ£Êìh!ŒÄ«M©E¨;õß$FÃâ½ÿ’ÕZD¬K8†«R¬OÂZ‹ã–L:¿ÿÔˆÞ[ÖæÙ‰EhßÔyª Æ@qßí)RŸëg!¾ç¬ÜF©§¥ªà•™Št¡RjÑÔÔÕYkù²0;y!\‘VW¿U1\…aNHÀ¨uñ‘+JUú¸%Xʾ %QÇ …npìXd¯$ßíaÊŸ²¼°ÇtKb‹…!’ÕRшæŒ†Š *õ`woõ—!!E˜ Å/¼†4˜RYCr\P2°ëàrÊÞšz2î ð4ñ¡™coLŠÓ‚ž54û-¿Ú_òr¸’ófb (ÞËBÑ=ºÆÌ‚¥> \øßÍþV!IW0B–Öoj®ŒÈá‚üJM6oÛŒ¿óc#wøüzR"P´‹ƒâN䀢€*ÛuøºaŸ$Gi#¹"Ý,sIÖüDì~3Eý¼¤Ñ´ÕnƒÒˆen%deP-AÚ;2å“åmP«¥]I扒âB–@åÇÅ'0x|uþj†ÿ„Èb³fSÕCSy?J«ñ)ê#J‘¨Œf„ß©èµn ŒùrbvGëÑ?¦¼KüÖAB•#ámº©gùr¼gvÉ’cs¿¦D‚œaU_„0û1±ë—ˆ–‚2ú[¸ÚâR·‘·¤ 7Äœ@Ü€(8ýžYlKšÛiZkMFalÕa4aø‘ÝEzûœ3@X¯Ó"Ä·†µ…Œb!SÈþÊzü\yd2s¡üLáßܾќC%ĬËus'œ-"`‚‚¦ƒV¼g €\˜íR*ÚZÄ+yf/*ŠžŠ¼ÈýŠ åÈÕÉ™5_h!K/Ås;0I*” ã3½"1ꩊ ¦¸± 22ÑHç*ÃQz•ëð® wµšƒ$3P(õBR†ªÆOŒmú× lÄ¥âÞ{x¥£Y;sà”E U©þXɱ=Q[Òw£”¶—÷„–š¥UA;Ÿ²¬;GÊ•ÌyH’Ü P/ÁpÓô•6ãö¾×& WâþBrD2¥lcu­¯G¨ B֋ﱤ.u $XÕ2–jr¦Â•è[öÉÆ{E1ÞL‚I•mØ&4¯"904­>Õ:f1ܹ’%Žf±iŸ‹›™Þ”ZoþÇ/5tÓ\ÊŒµÒ@ŒÞ¤’Oóœ·þ«þ¦óAäœZĬò°<Ý›“)Ø€GÃVéACUýŒrtN0—Ï(ŸP¸iš”z²Sá%G–­3;¥¡X$J~è¹W4 êxÿk.SIú]që*[DA1MVVøW߯ùX¹Rv ¡,ÆÐìYI#ä7íR)þ¶G©îOrRR—!èáGr"¼vïÏ®J 45Œ²\^F"õ~°XÈ«° Syj×,”MîÓ²Aq$ÈÆyÙCʊĆäiÀý?ሽvݹ‹þ…¶u…˜4²H²s ý¢iÔ`ç6CéE"Íkhn‘é%©*£nRPÿ“E\®[Ê Ìl/©[éúv1Ú/©ÒGêO Éby»Rœ—%.l%iåkp!HÑxGP3(»w*Gí—ë‘€²K)’ ± h¢ôÖž³5Ã8ƒ8±ßzŒÚDiÐÛ(@’+Â%”\Uÿy!hú¥ø«®¹"~刴&‡¦ÛKКVƒ‘y•iË‚8ôܺ ³,ªˆßøQˆs½–ÇZêi2´œ Ç* Ôø^D"§ŠŠ5pí!a†ñ;¦2\É-«[³¥ØHÒÇ)Zs]ê´y}—_øÛ+¨÷¶Ýì¡jÐ ¸¸oªžaïAä ÿ}ï^_ñ¶NCf¸ÈZ"îÙ8µ~7E /*—E ¿ÍÄÀäcÉ”ÂIН"*)¢ñtbhUêKm¸&¿³ûXÏ’!VëhíÒÙ½ d–&F,¬H?'lj¯Ä¸ÈÙXƇ'X´êM$JcCY €Ývb+½Jž\¾ÒñÆèRìH+."ôbx…Ò‘‘Z€­Nà¡÷û\©öp™ GZ»¼>¢Ñ~Û&ËRß& ñ§Ç•䳯l ï$êÖ3BC˜Èõ¶éS^5ýªÇ¿ódã{†3®i„IjA ìÍëAHKidh¯m‚U¶žœOÀiÈ•¥: ÿ­ö²êÜ4ß=–,ÈÆáÙf§,$TO‹Ûö2dnÄ•oåÔòh¡1Ê´Vä­Ñ–µÆßFšÏš†©q3R«Ì[HŒ@¤37ûB9¶8â>ae#i•‚(šp6‰@? 9×`Äÿ7ö²©rl>I%Óµ¼²™î º©âÍñŸø–Ãq³\ù«Øz²$ïHBÅs#°ãûÃUZþÍGía䈞h7x µxbå,Z2ÜyiöêrÀ/v$ÖÈÝOÖ]J%Û„q™  E ;åpÜÙ.Š—vóÅztutw ¬A¥MvŸdqŽ#e”ö™#¸¼„+1·¶” €H1žKεä)ƻཾÖežD!‘ÏÖ¨õy;U‡ú¡vÆ Ú$lÒ´ÑÙÏk-¼MÂJH£h¶v(‡ìŠwcÓN÷Lˆ¤JI[žgÕHÇ­*ŠÞ˜âÔ'—üxb÷þjIè”ÈŸ¢Ä ‰Üt+וz·—&¶ìmHùn· #z®z²Çö(pd•{™B6œ^Î’Y[´`K„³%z¯™TAg") {ƒ ±£$\KǸڊ ÷rOû,7¾è!««ˆR*HŠðÊ©ø·fðé„nvAäÈ4ÄH-‘¨¦›ªìǦÊËüÝë”ä;·c(ë#ÜCrI9‚ìÛž Ž5Ûèþ\‡R¹OD ä<.%WP¿>òV À@kƦ¢™0v¶oKâ"k›·‘ØCÉC3[Dä•?Í·ü[[5ËršjÁg,`ÐÝ/¦M*NÁ”²:uû-˜Ãr=îO j’"ÚÅ3/§1T./Zµ´âs"qåÞˆK¦ÔdR \¼R-¯ÄÊvbMiöß (ú—yiØBï= ŽJ4|¸Ÿ…(Gû†ze‰#4·‡D‘í£`ù(ÏP”áß•~,ËEÇ–ò¶U3´v–Œð˜ÒªÀ*íMÉê{®`Ñ3rÅp%ºJ R{fQ­û5 ?`:üC.ÌzùµcÒ•»È—·jä…‘£« ’®¯ÓᯆN@Pa½¢µ‘ —í ·$Œ<*Õ$Øñ;ì)Zæ>=ƒ‘=é»#¾—„¥&V/Ù Æ‚²~NËËãå–¥§ø“ZÝ”àGÁWƒÔ·)ìvéÔæ4¨921“MÁëðI+M+Z1jŠU€šî! ‚̵ŠUjŠVc¹RTs?M[1r÷oĈ¼ ;q.­"«P­Eh´?ËáŽÁ²Ct†HâXÁG-/J‘C̪Ó2:4k¤”¼¢9åJ.(PX³Ëírk BéÌ\eÔl RRÚ5c4”Ùj7¡è e@ì[Hõ>¨îmBs¢4Šd@¨©Ò¥O|«¶rä—JÈðâà±zˆÒ7Nj…ñ?kÖ\íJhÚãëB)U*xKNA¹|L€}–;}œ” sc!kŒëËA §@5%IAÍ+û>%²5éH;¦örl’¬i"úh zœOڦ˿k*;î[BYy é8‚Œœ?Øøë¹ýª/íoö²ÈÐD·(d x©bªëÄ€(P}º×·òä†ÍG¹ZÎ;§Ónfn4–Š0†¢ ê>×óÔWŽP÷$]‰Õ£–ÞhíÚA2²²‚Û©®U»9(ÍnîiD+rߟ'P>#ÙKõrgpr(;61¥ÏÕxËäYÉûK3J“àrÙ è°d÷KW{eRœPM8¨ÌiÜŒa ®",œ#>œ2:Xü…i¿*dðšß¹7CB¤\ÉrQ(hc°¯|4×"„ ‰Ìì¤4,̈)Ô€¤ϵwË+}˜“³q¬K#¤‘•çÄÈà‡äInF›¼xä«`Å8ÑÒÉg\™=8%6äŽïJPïʦ”ÿe”Îïfì`UžJ÷2-±yGJÅÔ5Bžeþ ³Lî’‰TKnLÒŠ‰8³T|S|NE@ÿ*«—©¤ì Š-$Bª2H}Bz–n(ýò$\ÙƒQC,NܽoÝ1Œ´Íöx¡SFöé–Ò×%D–Ax·m"úÁЊ®ÃüŒÈóy§”­  ºž˜˜1'’•Fj¨úrv‚u 1ºåðŸ4 [ý‰Ét,G0¾á#KT;"Æþ MÍT ùäG2ÈòQP¾“0P‹ÉB·Qñš‘·òŠuŠZÆ’)âŒ37ÀØS$FÌCÿÕ‡©‘Å´ R'%OA¥I©4ÿ®²°([2wEXÇ:h· È%Ç*879}²9O¨2Ä6+Õ¸Ù˜V‚ÞÖ7¹A,>%zõ/Sþ® ½JA­Ž6K„i i `ÉF¢rE¬|T~ÉbŠÃ'l@´}àeµ,ÔªÇê]9 RSCCÜ|]²¨d¶HlGi4QDâxÖPú€‹±â”44þl =ê.¯½ p³Ks;ÄÒ[e>¡P€ÈÕ-ÕxÓ–Lu<Çâ,áTE JŽä?¨zB¯FáO—Ùã‘>L€®k˜!¿h$JK%#Q =5QO‡¡¯ pØdÞ²HIåiEt1Ä%ƒ7W¦Ã‡ÃLjÿ[+Ü\ÊâýYX™%ø&/P0á£jä¸RÝsúo!2,`Hôð ãÀÚ뀴u±·~„lÝc$SŠÔ‚ÊŸÚÈoÂÏkO0ŽrÁRÝ ü*A]ÃߎëOµ”–Ú)†3mê'j·/òqˆS¸L®"fӴ覓÷^—9D{I –Rv‘¦èM®˜Ï:+ü:ºZ ªü*daNßÙÂE^ÍX« YâåëJ¢"djþîV&P{T%8ÿ­’‘ï@Š#QEæ¡(¼¾œ%ˆðîTüò¼gfSçkÚÚâxùG:òC¨ìH¥Z•â;ü8 Aß’dÙ“Ô>®ò[•xÃÔQB=Îãâ@7Ëv¿Ç¥;ÒëI®`IddÿJIO¨^Aш‘7û\‡,eF‡DÂÅ÷þ?Ý+\ÌL¶:•±ôâ•ÌR‡¥+ö\rý”e£/òºãV %Èú´§OºƒP }"ËÌP« K ‘áZ·ü8÷5¿ãÔœ›%ö–ó\\¯©H•¥6Üž„Ç:òÞ›vxÿ•‚DÐ¿Ç b‘?R鯥0'­/íäR†2«ðSÒ~fŸbh¶oò“ 9íü_÷K-‡?¥FÆßÑ¿`$øã%QÔÑ£¦â¸©§úØe+ DjJ·ð%»9 ‹ʰøA ÈžG€åÈÆVÎPúdó˜ePi aEäãˆaí».rcmOmÖÄHÌ'Ž Ud©v!AôÈ?ä|Cý\ºü¦L€µökÇLF$†!P@âû•=™Oò°dçIÇÊÔïdV°­H¼gpµÝPý a·\1X“²$M/èéãtPöïR#Ünv§Cð×þ+˜²)³ØÛvÓ‘zÒÂJ •ž3JoC±ý“\ m»;!4ø9GrªGm:™jOP>Í=¿g-‘šëš•àã%ÓIÄ9Z’7n¼{dq©–MŠPÈ•—àZ„‚T»ñËqÇ“TŽå=Ñ“É#$ «JÀ“ì–ßàå˜ù6»ä±íRi$»Ÿ˜£re ÑWbMk_‹ùrì|ƒ Ê"…tâ%zL¡QNÀº®ü¶ÿ'%8Ùóa²Y¾­ R®$Dfu¡û_ä£Â{ÑMbIÜú†¤#~$(ÜO‡Å[1àIDöPgvÍGž1<êñ~ùŠ‚­Ðt\œv>ïKtE骀¡ú±g¸˜T’d T±CVÿ[#”íI€Ý¡o$×ë 2¤¼‘³}¯ˆ mLáòXÇzs¬é £’EB ±³ˆÅz}£ÑÉ÷E$¡­¢,¬ï)á#I8ö„… e›áÂv¯ÇÔÄ %Y"E´”Ʊ¯ìHíöÕ~Éã½9Wý—‡™JèV)m}H‹CZ$K)¡ENàV€üF˜Ï›!@#®á¶x`·HQw2&Á–µvr¡«ðÿ•‚ͨ…n!F YP¤j¥‚ ¢‚^]+‰ß›ÉYµ$šFbL-5XXž vbMr&Ù NôælÒ§ â¿©h;}‘E]òæÙn²§Õ†9Is¸øÈ4VjqnÃâØ“ƒ.O4ÈŠpœO®ì(Jòneˆ R~þPûYajk‰ïæ…·¸?Zú¼…„nUÞJupG>:Œ°WÜÄè§·“ªÆå”¡ø”Û¯ì¶ûŸ³•æ<™ã¤vΟ\¹Y£ã<±³Ä²ræ¬O&§O‹ŠÛáÌáj<Ù-Ù™´¨NlQhÔ¡êW??³˜¤¾?BAƒý*ç‰á"GHKP(øëÄw÷ûY<ßHc„zK§»†f„D÷\øZ¦Cê öäW. U4“Õ0Õãš}S÷T%­Ý”Ž©¶Â£À|\³*r2òµ] Õ–YŒÁ¤K’â…h¦›ßß|9ɯéž­0†ÊY–LF¡ÉØqû vßö²œCÔ-ÈŸ-˜õ¬|¡‰”M$yR3AVà8ï¸ñ¯ófUÑqhRy§¢¥²¹ZMh 7û1òé»VDŒIäÒ>à|;¼ß+–ᳪVì¡"2–eDýïñ=¸S°Üæ@ ­°Uf&’©1•cƼÀ ¯ù?µ’™åïX÷#¤¹ôoÒY9ÿ.TǽI`†;b‹1[ti»£ÔŦKXíï#O@Ç9VøQÇÅ_÷âüEFW I!°lKu+H㸺 Uã<ÖE`GĤÐ)¡¥ye±6 Êÿ®ÄÂ'~kjÎ`Š€>Sµyq%xäD(¤Ïd$%ýW­ ЕG¡^_´­×ùòE€Ûšc E4Æf*Ï+.Õ;2|½O†¿³Ï*7UMÕ½­Ó¢å2µÃÚ'T¸rFÛ•«öZ)Ã"Â!I’QûРB¥ã¹`EQãj-îëâ?—%Ç»Õÿ™Ø+µ1'Õ’`ÜdµXäxÈý£ËnéÓ62jBòÚÌKš4œ~Ð<ƒ.ßdT*×ör5D2‰ÙJ%ˆ5· JÆŠÁ*7%£¨®ÿ íe÷½´²…’~ÿš;HMÔî &§b‹Ë¥@ßdþö8ní2É3™jT’Ms¶aqS™@¤—k½ì²ZƸF"G~Ù£ÐWù{æN3éÝÇÈ7Sp«4©¿¢™ˆo‹ÓAáþÈäØ4ˆ‹’hrÈ~Ò:²ñ;!(ƒïC\®[ÈÈ}%Jâh.äœJåcXЫ†-ü£n £ì ™<ƒ9¯±åtp!õP9oÍ+ÅUiÖ¸ ZAÚ‘ºÄ—MÊ(ãå( ÇÇ‹JÔ…í ídqD.R~H½FÞ!{*,ãO±¸5¦¾Ü(£ö²¸HOñ6Lr¹½t’kô%•#twpA¬…T|è åÀôkªèˆ¼b«M¢A$ÌJ«ìyóµ÷Ác‹ÉhJʆ-1$#Š<²LÆ´-ÃÐ׎FÇ*ô¢t¹.¤"êR‹<†…:• ß¨ Íü¸ä=è²§©Û[zò}i”¹-4¬µ ÅM åJo‚4)f›Czs´Mê=3S@HðZÒd–kåÈšÔ£->ÒÈzÄõeßgùs‘·#’Y¡“BJ+»é¹ ÑR”ÿ‚ý¬º7~MR¯ŠÔe–ÒWRh]¸ƒ@H °§¹ý¬ú©M>0ò3E[U@¢ª³ïÿ5`Ê{Óˆ‰\…e•‹3GêHç©4úü‡òá*Ls¤eçYM 2¹<ŠqØì?Wíe±-R ]¸5ˆS˜å^Çoæ9*çHîn ©I–B”ÜR” 5=29ɇ4uÄ·Å;!UQ£þj¼z6Re[7€HUcĪ rJâaѦéþ®d^Î1¨Ær!£U¶id5ä}•E2HFÞ—K;¬KºqõFà…$’íË*È·¤!厧$‚9^âY™£<É@s'ö˜ïÏùrÀn_·Å0Ó”‰£·n+ÂN&“•*ïOjåf¨–`î#2ÝêÖæx‹ÀÒñ”e‰y.ƒì· 1ú`k#œ·ï_("îæg`¼ô8n@;/JÕ¾×,Œ>‘IžäÚ[.“4¶Så+ êÓ ˜òXò®Z'¸GÅi5Åõ½ÁvV–x̾¨4äÐÒ†Oå…¾/ø,Œ¶¤Ã{CÛ"LM•®C°jÿêV¿Y-šâ¯w/%Hb¨&Td^%ÕOBÉÉ_ù²0ïe.Jº%¤VÑ2ÌñÄ«õYw "ŠÖžÃáãŽCÅ+\Q¡N¸€5üï<^µ¥í“C*Eõ‘ë…¯À8ו0Dúvçq2—Õå(˜ÉRÚ/Q¢T‰¦¦Üâ!9ö—~UÃ>Dù°‡0ÝØsayk"€–ò ¸iÉd %Ý–¿äòÈÀÔ‡úVrÿ9/£³¹1¢0Xãp 8øMWß'(Ø®¬¨©ÞOX]”ÖêÝÜ:ÉRYªÑ;r\`>H‘Ý^Ýø FdYƒ4qŽ-’•Tn“áoø,„ºp­Âë…Q±FV…Ñž:q t •¾ÐÇ{*E¯$¥¼I#îóäS³(™ Oü—|‰–ö(”ìÌn~°¦9’72¤€FÁ¿ie¿ÕÉärê×z¡—Õ·¹–Ý[˜‘£•8¸†€ô1šüy",[«æ‰?H21rLQ8Üâ¥M˜­ØàÄv¦Y7! p#ú¤_¿;¹eál_ä;呿åI¶ˆþEg@à¾"GÚµñÌ|ä[v!Þ¥¨XÚˆîäàY¤B袭Àõ¥?gÃ! ²`R\7€ÄœDqª]OóÐÉ_È'wšR^[v?0繪¤A„_òŽ)¥}]™oîsQNL€K?jü:}¬¯+lÈw[um»†¢•™b_¬’¿ òvJöíÇ$Å;„ÊÊá„3\D„2”;!?aß¾B`lÆ\Êí*9 Åä³Ä Édnž«9 éÇeÇ1¨ŠäŒCrO4?¶ª$ÞÊ߼⠇Q¿ÃÈü;ä‰ùSßÕ âJ‹+ÚAN(w&b ,)ñOû ‘ ß™@¨á’k›hn$OÝ‚y4€|Ný)ðžÇ+¿MõeDܓܵï¡ ×3 “ñ*üEk±é³?Ãö¿k%‚Æd„ÏÓg±ôåt¤K8)Fâ­È éZþÉ9P—©²½4”,1¤ƒÐ%dqÎRI%ô?FH“[°¡jÑÚ“oq,„8Š(÷5i>?Réͤž™ŒÇ  ‘ÂÐ)%Av+¿ÄiΘ3YeŠRÔÑÞ'$UÁâ­E4+ËÁB2,ä7—0K#ÆÊÂVU_OâØ?CíOÚÿ+&FÛýMb¯nHŠB·SsÖV ƒS€fa±ÿW%¥ŒÀ½ÑÚŒmÂYÙ¿6R~ÏÛ¦Ý?c1áÍÉ#dŽñôSĨÕ*.MiÁß~XSö[2 jM+Á%¸ºyRŽ’FÈ®‡àP~ ݶ_l”†Û±‰ßeO/LÆâà²q–~œ¿”Øx·Ç*̓¡îBj©]@L±·@@å@>×âa‡$ÍE.€ˆÅ`PŒAxƒÉ˜ Ò£-1i½–Û Î–ü”½Ïf-²©Bh_õ±kSÎs4rjŒ¾œnM£ê¨yOÀÿ²å–Q¿6#ê¯$îΰˆÐšÆ¡dö9%T½7ø³&û÷·ã Eë ‹TCEè•J²‘^uaB8åÑÉŒ·*s‹OŠVˆ™C·%ß•GcNÙdG6™/Ñ£r}i3ÌR z‚Ä)ÐÈd4?Í  /æ¯¨ÌæúPIô”‚T÷㻞ù›%Í Ê@Õƒ\ÊÆ€´hÉèì×&?SY«QI­¬ÙT¬+ôÆêø˜Ó~üÉÉe¢mfÒGú2ªµJªôfBHøO…ÿW)˜²Ý€ÔyÇz¥A- Š]Eƒ‰J1CË,Ävc‘:Æœ:´eØéñUïµ0– x* ¥cèúj TNDÐ{aæQѸÒÈŠ`Gïw=\ò=;Wéæ©‰ä [£2òØ)-ñP~Õk–G!û™Cô¯fúĉÍKBBJ„ZðÚ­­ÙÞÉSJ>àD@rT11ùòý’Ôã–G¨¾mrè­3ø'¨ »u¥@åÇn›ò L@¢žŠlñrœD „¤Ô×u«s8Ò¿åa­¿ª‚wX….VRGŒF UØ(­;Ïû5KÍ©^9/?¼ &$´¥V½OüGãduC‡C4¬›”Ȫ âXÆœð4冑mê!CpfVpÇ¡ðàwÆkYw!ù\*¸DýÒøQzOzœŸF=KwRU$h›ã ìϹ‹@*ÛšÓK'ÿ׆Ç'©õK¥ chÊ ˆ•ßýlä«Z ÑF]Æ £IÅ,CÕfÜóˆšTöZ6]Ùdbwe4Mˆ‚M1¥V2#Þ¼ÙÅ Ð÷ãö¿ÕÁ3êL#² #Iš0 Tò†J° Ò¿ ~œŸ0Ôv(ëÉR%ŒH ªU™B•b:n™TClŠ áä‰Ñá,1É ‘Õ¶øz|Y`°´kµøƒÖt pš€Ñ±ãAþë+Ö™X«fI®Il÷¥Ä¬8†{g¢ò‘I^h5¢õ\¼î)¨ )Ž›k–—Q‰Ô+Þ€ËÝYOŒ}$Uý–Êåþ䲦@)–0b+­©Å¶húÿ6ù*ýûæM$nÜÓp€:¯µ,ìÀÓí¨Û¹ÿÈÇš¢´%Ô–ÖtÅn¢ÞCN—APvR§þ %ž„# Z›nÜ,ª­)pªA2‘ØxR¿ìáÆ,2™ÝFõKÝLá=BP†4Ù…ïja€Ù®N’Þå37N0 Ò¬[`«¶ÀŠäñÍ¢wAg,ß莈+鲓û5$µ=¶Á0 ¦7²sÇnŸ¼õ!«Â¬I§&f'ö@þ_µ˜æ$Ûx SxngæäI-PíZ±ý:ì?k2ªâsÍ`P°)jÄ«Î@OZü¦Èõ[Ù_Q¶1Çoñ‡Û£•FãW}Ô¿¯lqÍ&b†ëåY’ÂÆÝP…“b¤Òƒ«UÆØ¹’j!l@¾™ÄË$Q+úR€vøØý¢GÙÈËéHæÕ˜•e{€TTf-PKq¡.á› ‡NôDžj·¨øGËŒR²¬\,¼6,õéðÿ“‚;EO44SIݽ¥Á)st¯ „6Þ»WQÄP†FÝ~ÖY(Ý‘ü?÷K\ú·¥# 6òFd’Ýù5±n "#üQ†Zq~ë_´ø'ÞÊ \G¼VÇ÷°Ü2Og ªóí)íñŠÿÁ.N'ÓæÂC"­¯E\1…ÉßšªõY:ÉûÝò¼gfy":7§É…š8ÀE<ÞäjTѸƒö~9 E d˦ޠÞIRv­}ò@$•; ¯ýI√ oIÚŸ vëÀýšþ׋DPXÈÞÊ×r5¼ÅnÀ„£"ƒÉŸá`)û ^XaäÆ~{%väI @wžÕ=4^xÂõJœ”ñ ‰Æ·i ×[¸f×1€C5)Z²@øX?,†àû’NÖ‚ÒašãM´y£kkûUMv~$²ïöhÃ'–„ˆ¤ŽÌ|ÁT’xgÒ¯Se‹ŒüÀ§Á%kOeb[l®#pÌòVuÙú¨ÕŽUŠVø¨Ä²‚ê|H㾪¢œé%p9G_²´¦õûH|…Xd%E/º`k&#z&;†Y|ãê \[;M‚5ùÀ^Gp~-þDrørYÉüØaçðUÑ¡ëÑjHªJÔºò Ø·•ä>–qú’˺Gæn~œ2¬É$$ÿ»)¸}¥+Í2ÜgÑòc1ºw3=¼ ÁHvõ>.Ž øt#¹þ\Ç#ÖÛèQÓäFŽý¥RŽñ¥ Rœ‘FíSöV› –auïcˆÑ@]YC§DZ1.YkÉ„†…È"”S±Ž¹x67i)¾½(‰à•¨ã’ƒàäx//mùŒÆÃΜœ¼þYk˜î©êG8ø¾É.I#­Ãö—,Ô_œ6 g«z­dÔ5`E[¸ƒV»f¦cãܹ340 ’é—âøýZ” ]‰cZ÷Ù³'qªË!·ôäRîЩ~þ¿·qÓ1ç±o‡$=ëDÖ²E&íB#oÙæX}Û 9¬Çè,Å”¸w‹‘Dd²ŸOÖDßɨíówÜÌΔ•eVB(§‰ À{ãîîO¿½#Ü]O¤ÑÐe9StßzdOÒÊ?R†©ë®¡éÉJÃQORNäö9{cpÊe Rг(å 2#(©káZŸ§,âݪ”b!#äT•W è¨@*zÿ5r©ˆçñCNï§^~‹…` ‘ñrŒîxìzÿ3|90ymÕYNmI„ÉF%*@ ý*f&Cɾí«GFð‚#1²ˆBõ¬Š€Nû·ìÓíeØ…±Èh¨;º<ÑQ!QÄÝvÉE¬ªé„‰ËÆxzb‘íU.iS½z×#“’aͻ乸Ԫäquƒa@>àßF;D³—4(`ÑVWvoH„*ý–µÇ%ÃE…·;ŸJ%ÛÔŽ6CP.¢øœ1ê²GÚ*H‚ÊkDîx¶õÄ2¹6D)_Ä„\=)„ž™'aF–z‘† 4 „ˆ PÅO‘šš/FùV‚™ X,¼*#”G&ò¿¦#=J§ÏörQXÈÐTŽe|·(ª ¡¨ATPˆì |J1`¤îWiê8ÔJåBšR•åP¼¨{“ðpþ_‹DÁ< -&aQ_´j@#ºd:†}»¹¥’ Yˆ£qAAO‡oÚÜÓ%-„Êé9O £HU=FÙ€—…H*~ž;á­]4eXí¢ò’'ÝT ÐàAΏ‘âä…crÓ3¿–”ø—$|û‘jlëT‰h€UiT€Ã ’Òœ1He§4Œà}ª1øHQ¾Ô§ùXÈí²€z­¹zÈ…jÑmÎÿgìý?äâÔ¥ í0v©Žœ¨zUÚÉÇ“͹èm@•ˆÜ©“± –¥q=’|ßÿЄéÓ*ˆcŸLñ­9Q«^4ìÛüœŒ£wæõq—$Tó$mÍ—uSð«~ÌÑ·Ù «d"Îh2þÅ Üš/²Ñ¶åI$q'Ãz†ÿ'#’ ±ÎÐKÂÚå•CIé31Œž,þ%e®Ô*ye„ím`n˜]¡k8$oFŒ#í» ª™i0ªj©§R€±øxñúrmiÁy_E„\ª—€¢–ŒòSÅO:ÿTåT¶äÛdÇ~iõ³z¼¢Qê¢Óöãj©êYIZ._4È'PÚ"Æ¢å!Œ² €Àê3EP~ ÙÊL©º1´=Ë\HétèI•™}P>Ý ]»­„W&êÚ¾F™ã/¢‰9Œ\Sã"òà³³‘e1ܾêâ'ÕàkdŽ»4D`ǯ"Jä£ÉŒ¹ªÞYH£TV/½)F ýŽ5ÈÄm»)ù!žåb0O ¿õ캟Þ1w­üœ°²WèÜcˆIZ…•M9ÍF54åã¶C3<\×<Æ+‡–Ã÷l‚`*ÅkÔh7y‘lzÇ,m1õ ŠEYšE óªÐ rBˆù±’tï‚(>^]j*ÍüÝjùLw“t¶ŠSª¬²;ˆÔzh2 %úr {µ~/òrXÎÅŒ‚Äî’¢X†ÜøQ½éðÓý–H‚ bñ´VvIé»2±{›rB¡¢“NG§¦@Qe^–­™â°Æ¼D’žLâ¿?ønÇálHBÔ(Øp:„r·9C9 Ÿ²ß² éòÃ.H}ÑÊ.‰¹ø¹Hâ§ÓCQ¸"Õ~ÑŒµ~ÖÕ I&ʃ…hí@ýÜD•^ÊJCðï×aƒ©O@¼%£ßñ@e’w3Ô‚8©ÙEzjto…q2<*è˜#KŸU#OU" aB]Ú¼Bÿ±?ÈQ ®Ð‘¼Q\É#/ ‘Vb”; È~ï_ø\‘Ý…Q]§°ÔzŒÁT’@©™ZžßY;%ŒH dC³*²ñ4ÜŠŠ°ß§\¯›%e™dh~*?ª\7 ^&£b{äkdÞèËb6«!ÖI[ÓC^4­~î‹„HƒKÂ):N.QBŸ§Â•ÜmO‡þ1íÈ -ͨá%â·R,k ­G€f?ñ¶ZÔÒFè@fPâ7âï6Ëä§NÇùI®XìS:PñÁ#IêòFf}¨Ç˜ø¶ùÕÈfæS‡J.ƒÉ!F§.oûÁ]Õ†À퓇%—5'wY. §a½*ÈM ¯Ë'É®MÝKp‘~ê7ød>‘SÑ·̲<‚…ºHa†7,dàx‚I?ì†LÓÆáØÍ@-RƒÄŠÓ¿Ñ‰m—0‘Ü$Òʲ=9JuîoòVŸL ¹)‹y§HÞ%V!Ö£qãP{Ó¯,•€Ä‹Luy8£Ël UND)JÔòÌMáÊñŸ›9‡M,ÙÛÇýÔj…‰#rÇu`Oò­6ÄeI4é Ä&1òõ½*©|‘½h| Á“ô¬6V‘]lhÿQ³sZZP9©Uì¶öfÙ£? ¤¡àò¸^=eåOSþ .ÊüÃ_ &–Ò¤‘‡8Ä¥}?UE}ZÐm‹|CíÙnY í²jC\\AÌ_XvH—â·˜’L~ &H˜Œb@ÜrB6QDkrØÜÚÅ=Z9,ÜKq'òÆÂʆ¼cå×#Šø«ùÌòý>åšK»Ê–Ę̀Ň¦äŸ¼Ó|eHˆCJ€;2¡ ¨5ÜTô þÍrQ6Kb©§<ñêQOR¯¼Í>Íè:ìÞ°PŽwý¦ÙÊäævü},!ÎÓfI–8 ‚0ÐݧGhØŠô^2†ø\e“K¸¶ÝYå ñ³È÷Ç9;·Å@¥Fô‹òL¹¯Ôåy%hÚª¬Ê±Æ£â;çìòÁ)3²UmÔ¶š"‹uišGP]ÔŽ\½Í>åÀ~¥þvõêݤV•@Œõø™ „J» \¿3»dƒYDèã‰[a/ïæð*ü*7 Wùª¦W“•²‡5·L·7¢ï³z|"•;õåÿ6á`’y¡ ðÊÜh*ÌH û’i¶HsaJ²,ˆÍ xáQíQ@¤!Ûí+{â)JacÌÅêóUUP92õañŸg*Ÿst'˜5½Ê²4¤Ì­ h¦½»Wìá’„Ïž ­Ìd‘ª+×$¦2;©]4[I'šRJ-9ð ’µL”bwîc"6Yr±‰å ÅU£ôØý’A#°?Ùé’ÇÑæU´ßYÑ"Dôù(¡  hä7Ò£À²˜ôEÝÎJ,HbIIb â§f¯ó1ò ^ì‰K%1\\ñˆQ]UƒrZ© w# 98ìÂFÔ K!‰ZŠ‹ÉãZOíÙÝk’­˜«Æ9V&J .ê>æz?dR™AJŒs5ÈsRHø¹×ðã’#îHm‰MFI ŠŽà7.$UjÓ·ùX+e½Ö[˜Q¡‚Fe*»õ¦ÄŸŠ˜ž©jàÆ÷ ÉŠ·$Š.åvòQäÄóKæeãÂ6!CÄ€Ãz޽¹tËG›YZìÆ(QÁìf=ëý#­$—ÿÑç°3ÁÉ(I3ªòâ$}ªS¦r„]{ž¨ù£'Ž$¹š0ãíIP§á«uÜþËø¬r ¥Ì«Çomû–¸rÐN±³ûAÐÒ÷¯Mß¹—õ”c“МE+’5*¤þÓ)âjNHrCpƒÍ4³‰e†K@Yý'!kAñnFõßù²‚:·Âœ©û§2«2DWÔèICð·ëË<Úr"Ib*°U]Z¯ÍÅ>4Z¾ë°ÈÇ}Û Ú’Û‰$€ ‚ÕíG"hÝ+C½BõË!λڤvMÚHž8ÜFpÕ: sñqøji"×áÊkrÚ9!'2]Ydi +cTØÒ¤Úàß Áä€ *÷¢QñB=%­kÍiFãâBû}¥ÈG¹œ¤¾o@[Ï ÆÅÉ^&<¸òZ|_“Lºù4×0™0”zæ…ˆý÷ j :ñtcû\—*ŽÍ§t5Ì…ô‹_M”º³V%‰ªÔ õèÌÉË!Vm®\¶[oG³žX€•1Å&ûý£Ûìõã‘–Ä[(nÜþ›Å<‘°ôÔ,”tø 1š¿ßµˆ<˜žE >¡‘p’ÆA¨(!üÄöû8o`:Úk$Îð£YZpªI@Gý·Üý +C•R-„\BêÂR?MÜIIÍO¨J€ÉW›oŒz©è—ÞCfèÉ@jˆ¡¥zWìÿ.K°LnQrIþã-£2ºÉ"7Ʀ›T÷Øs=Éþfä‚(àé…Ýøq©¨§>üpHoiÅ(BÆ0Š•©ýãTq@)½7 ]ÿÖÃ{±‘§Gñ#B²EDjÏR ¡gS·V$|KüØdE棊(ªÇÕ"Xr-^œƒíbŠM­çPЩZ•œªµ©vn›(H ¶¢“q%ù˜ç‘ä`£aEØ/ ~‰¹Ó&7Ø” ßñÎ*õF¸håg²Ü\]«Èå«a.JѼQ+²‚–F`jhç—*ËöK` բũܪs!¾È"ª'ü¢rîÉð!ÏRKPÕ¶ðä?ÖøxäOs"¶ÙX%³P[q2íñKFTuø0ž¨¦MiB5PPV#B•#·"+Ç1¤ä„ŠêØým®ƒØD•„„€ÕkùGü\ÕæÒFêR]Q Š5fn HV^b… "¼hzd¢ËJ·…-"9Í’€O$.h8IJ9IgˆlZš´·ˆC$òâ>–\¸m‡Ò‰óKÛáä%•^g¢ˆÿeR¤ó¶\×Þ1ÛÊÎ8TSüÕ ¥|Bò nRy(á"ÛÕFIAU?S×µÙa<þ‘— Ÿ¤DsÅ‚s#f5;-¸‰É©!’ >Ñã²–=²¼CklÈ]rò]Ñè&–ON¬9 ¯SU§üF«tƒjAùÂñHÅS_‰ëZ¬h}•L²1<ÚÉ ÅYˆƒJÑ “VâGÿdPäl_žÌÀ5ºòe’ìJ‘˜Ôd³Ò´ZÚ‡cðaQDwPóP6ñ¤[Æ“„XÆü•Bƒ×»ä´ÛFn[75ݽòÊ}9 ‘ “Èñ? (” xºö8+†¼ÙŸU¬ŠÖ;Ò`W1I"KÇ–à0‚¤ø1ÿe’‡~êa\[.¸´êfâ%cp…°>¨kM™{Œc*4¤Xu¥ÄE!¹Y)È9%C¯ƒ/5ë†qè°’>kL4ñƒW$H•Œw#ùXn¯_ò²¸w6Lu[†9¦YP’Q€*Ñ5r:Q°ÈÖÌ#ºÃqpÔ–2(û\O¸øzüI†¶I;ÚŽsé\µ¬ˆ `,âP2rb9•¿Âßñ®K&ñüÖú‘r¦Å!fhƒ‘,{†W§ |9q‡â^YXïl’ÈZVžædØpY_yKub{9¨ê>Ö2lˆÝ¡ïI¶˜Ü¹þé–x£§.K#2:üU<ÑÏÿÙlž37h³ÝG „R‰:MiÈ”Sið·û,‰ºÍ”y£OOS´2†—âÀ7f¬»ŸÙq;…ÚÒÙØ¥äèß¼ø]+E žµûQðo‹-æ gcº.ç„R<|‚§¤²E2­[šµ ì6Ê [%Éqýa¡fe„¨%~!ʈ Óíôâ8ü\pÄòò,HçîDè Ås–¬D|  ?PZѹþÇ!“pÊÂø<ñ¸i`$±Š>®ƒ1ùdI°)˜ §‰eŽy«`ÁWãfø–§öV´9"w @ô–´à³ ¨u%*Ƶ Ú‚¿³Jä¥ô1ú‚¼7]4ѹaÃŒa‡Eå»W©mñáô¤Ýr­,¯q̨ŽS|GÃÄH§ýr°+fDÞëeLbv¬eDœ"Þ¼H o£ý×–M|ù*àO(3J”5,ˆnCûº.Bg-•4ÐcœÉ:ƒÈ`iûµ ô`[ö²3蘄kÈÒÛ[ÄA¬Œ¼å¯@kâ{WŽDíl¹¡®$7M q–’.â:P(]øñûq]þ&Ë hÐaÌ!]¢–þ{†<Ùš±ôz¥›WqÓ'^^è–(Ì‘°$4ŒÝx“N`޽Ùd$eS´½2ƒP@(†£~D¨ðØ|TÈ–AQQkh££#†)Oˆ*B bGq‚ù”È&š¸çAÅÚªbWûÊ0û!oÚÈä ˜Ñz”ìÚ*)YVEb7(M~–S›dÆÉ:µŠ4õKºÊõ©êÕþzÿƹq6m¦¶nêB]‚[¼„Æ£,€—U§ÙãñqûY=øKâ åÌqGhŠ&U)È*óPþÈlÇç'"½,vx.VÒY"™bÞNS1ø×äÁzñãö³#kw4•m2hÙkwVµxT,ïRÊÀô~C–K04Çôó(Ô"ŠâbÒ¡a-†? AfêvÝ[ýŽDM¦îMê¶É©3ú‚IÀEx’AI;†CÐ,ŸU¢o¤E‹MURÆÞ‹Ê»21§B§âûc̯ð…KQh‰©,\å }1Ue$ý°?kû9€íÜœ}P–Œ.%ÓcY …%@§ÄCïC“³Ra.‰Ö¬±\YJ–eRȆ€p F®çââk˜øv–íù7ŽÉV†l̤ópJ…f£ oË—Ü2ì€Ñ ´ËS(4ÚFÅI7u, da”ÃräK`‘DX­§—‘]Ö†´%‰û-»sßös(uq4þÚtôËÆ¾¢"‚=F4,»Ñ‡PÙ9‹wÆE¼¬  å# j" íbÊE.ôUY`GÍûL)Ïsó?k, eH±XÌ’;‰ Ñ©Cšºqp~°û_i²Rëîc‡Í2Š.7S3hÜQ[âTjTšÙ?ñ,„ùqæTµXY¦ŒˆÈ¥OÊiMŽÆ¿µŽ"™ÚÖÈE$Ï<ÑÜ5Lp A^õo´”ý•_µ–Šj!…™.(!J²±Ü©sÀü;vÃÈZ:ºúI¬¯Ìs (&OÚÕ\¡?É×îv(ûgpdô¦wæîAj¬ÿùT‡&Èò(]fy+-+êªq5â TS¹4÷Ë1ŽŒf Èã“S“2,µèƈE »á ´XÑIbU –‘˜€“í7#û_ 1ÊI˜ +ççõÛ…_ÞôI¡-Ó­W$¶¥×Ñb(¤’¨>Øö>öÀì£/ªUÕœx²ô m˜|¿—&Å1ŒÁÇ—ªa+ö•~ÏJr'zšþÊå&ÛE!oÿÞêÏ9¥j(ª@0‰(ƒn.é&0® x8N,h}ð€X!."“ÖŽ¼€H—ÇŽÝ·É¥ĽÉ7HÄ/Ô³°4ÿ*¸z!a$тѳÏš1¨y‘Ü þ,H»ténÂñ·4}ÓjžÿµÌÕr š´5¼¿U‘§áð0p¢‡‘·L•YcÑFh¸·âÌѪqRv ³WþŽLmUÖUXCJœä”= ÔJV›/ódd šGñGF¢ñ E K_¸ XG"Ž¡FaÌ]¸N%@……Mxñð’B±DäT ýÚ€JÑxÔ{×"’†,ÐOuu˜‚9j–H1<з‰$®Yê>±+<¤ÐÉøzÁeÂ]ZÈQšIUHSVâÀŽ„øU‡lb-IÙÿÒçœ^dŒÇ YJÆÑ£PT©5íû=ó•Þ¤òG_NÆâ)%>›2‡W= ­7§ÏâÊà6ÙœùªÜK‘–ƒì3.ê¡ɦõ)úVÊ©-ðõ~$J:H•Üqè{ÓÇhU£žÞâ’ö6`ì€qÙš«Ô©=è9/ó.DŒépðM}¡N7ª"ž¢%eÜŸòez2‘öy`ÜD„È*DÿSµ-*³$m·Ä¼[`AñS¶#š+oqBOÍ2«ÊãƒùPUìzdí)%ý4„u@Ïlò •)Ìp#ŽÂŸSþ–‰Ýj%PL¯‘"¸·v2ÇÈñ (€ŠõR¡ˆ¯üDm²Iv® \LNXÈ]0§x»K^Ù»#ÒÐQªýrP¬FÔ?Ooöh¹aúG“¿ÒXV98 ·6ÊK Ç*Û¿>ÎW{üYVߦ_Z1E¥íÞ®7E‘T©ÿ(³—F¹µ›Eر}>à °•KPŠôÛùÊÊòP!–5=1ÐéêU¹/¤Ç‘$8&¤©ßŽO'60ä¥2//E½F„P€†æ§Þ¸ '½Zðk EPõPŒÅwì2°7dNÈ£­wmʨÜ(¦»¢ìMiÛ6,4ìˆ.$›UÝ‘i˜TJÿ‡;䉢¯î‚ÛE )Ç’*Êê6UR•éʸ1É+)l[¤©7ðbQD’ºÒ”©øUAûM¶ ‡b˜—÷ßÝ¡„¨+- $ú`qBFÇ“й,CkFCeaU·¶.‘“Y ¥ H–%¢Òž$ôÂãùÈ&‘Çåyž_ݳv§=ÁîܱïZ䊒Q,Rriy¨’G äUkUâM?Éÿ†Êäl³ªB^¬ÿ Y•X½ Oo´ßåt^Y h1<ÕLÍë¹QsZB°¡eõ”úb¼èJîÆ¼Hý¬#aïG5(›kð"Š”Hü_²XöÀJŽk¤4|ÃpU˜Vž¥ ÓqA×"à p Áˆ*mBÇoæ_‡ýŽFD `$„RHQ]‰µùð“‘´Òs,‚~r}7 ýß*Ð(Øò«ß(n’0åMÛòó£‰E@ A¿›“7/õ²áô†£ÍJäz°<¡Ĩì-Ö„{|D|[ä¢ÄîžXÛ,p£  œPƹþï©£€½WÇ!”îËKndœß8ä[â¬dµ< -@ßl”>”Ëš_xâX¦•J‡uâ’¯-ÑGlºƒÉ^ô¬‘ªñâ «rªÞîÈG›3È!£ŽSl…ˆXÉ«½ÜAÇî¦Í’£òkèV:§ÅÔÓ`7 OÑ‘ª ¯uh7¹žåeø"îªj(Äí]ŽØÈl˜ÒØJ%ÄQ¼@´…\ÆG*ºlk×ídÇ&'š#Wºõ&hÑJÀ¬ÄûNFûõ"´¦ B£gšflìŒÑÃ#Lê ñ§ÂXªüG°ŸùVNM \s$ñèV!'Á¨ Pdwì¿^}PiæUÔ¤/m ÑY¤þæJ¼‡¤žˆˆŒÑÛ[—˜H×;U)AÈ…4Žøù­sBëW(VÝc œC0 öªMwëჽÓ7X-ݱº•PLŒjbª’éÇ‹‘îªAß%:5hïK4 ßZ(„I!ˆëÉyÄ?d°ø× þ”Cš¤òÉÎI#P$eàÑ·G©¡V£ö¿ipDw©µ¶v+5µÕ²ULÊO"Hâøtà¯ñmöpÊ[‚˜Çšk§nï§^JµÌE3'“­B;(Ü~qÊŸÊù¾ã½ÛŸT=º<³ÙJdŽßÓ™­'V ´%Kmº0j«c*$ù‹b6øž2±˜ÉâhÑÐt$‘î2@¦Q«K#h­/ln¸ï/¡$nG‡ªzËÛöpïÀC ¸Lt÷^ßÚ4lªúëOòX)4­KQ‚¿‹ö²m™â¦¬J¼ C2ÏjòqQ½SiðqÛü¬;Æ7C_­¼ñLƒÆâ2ÑÈìëO²jÜ~!’‚ÄÑÍ:Ý/#j(E’Ù‹ªdBš7åöׇÚÁ/MûÙCÕ^岯ÖM«‡Ý=3øG¨À´=›äBÖâ’ȧ™žÐÈ ˜‘˜IÔš“ÅŽÕ#á/#£J;Tn­¡ä†' •K¸øwý‘_³•b"ˆ ™:;PX›„€ˆšàhyr"‚£ª‘‚!dºÎ"•UÔ”T&ö%ƒnMfŸ n‹VÍK›¹9o´`±¢Žb”Øï‘­€ê˜žj†:k•c/Ö.8"tÜ6çn»xã.i‰ÙKIšÝn™],Q²ó¢‘Sźò.8r_ E¨I9žñ^j‰ ¥UG/²;° 2R)ÙLäƒA&X½Ràrj‚3µþwÛ*;ͳqD¹x½`D“*/#õŠ åþJø,´šjutx帚)­À?ž·*w§ì+bb´ƒf‘ä¸vá,Vð*ÅèŠEh ©•ø‹ÍZ`.•„òHÒMV(dg”nRÃù¬ è²'m6ï$K5ÀC*˜ŒH’5¶õ6êGÄyd¹šÿ9Ò«–_D!ŒÆ±Œz|_™!*YI/·N_ar\H"›Žà'My°,§o‡¥@ê¾ÿ³)Z!>¿Y~¬X) ŸÚ§JòÅiZדM^-°T£UÜ¿zÕ²2)Ó]*R‘J¼öz£°j2€OJý®Cö¿g!‘œµØ‹ZÏòäé®Ô¬m9êB6. ¿0ZE©ˆf©zWüŸò²Û¨°­ÓÍ@IžéV€qC+(#â¯Ëuc˜£êr*¢“]Èë§¼EÜzüë0Ѐ¤}—Fxj“Z¦†B"FƒêŠ«%‡*O š’AÝŸùrY¹|Xb桦›¡«[J±ú’Bìó4„‰BÝÐиÈzP©­N0ººÌ³HIïÅdO޽>ê¬?ocÒÊg{êš^[(:&Utbƒ–Í'%ä ×ìšøå1<Û+`Þ™$ÓXêsD´šh$?Ú£7N#ì±Ã˜b„ó(KUŽhm¢ªòŠê_RPnh)¶Ü¾#û9>R>æpšé0À•++Ý{üKñRŸ³¸Ê±sm‘ô¡|¸²¿8Óq*Y×à^ R‡Ç,ÍËÍ«Ý"õ—{{OX±$@J†$ìCà|2œ\ÛçÉ*áWª’3HTD…‚ýª/¨×u«uûy—³‹!º}¦¢˜âHÓá­X1¨;ŸÚñQ˜™9¹8–jž·£%AQSšÐ9ª Âq‚f•Ù4ó¡õ”qÛÛªïö²¾#·“esóZ\Ë¥4|Ï woº¬r¨<‡ò€Ýqämˆ6y£L 0$Ú¹§Ä†ÿóP®7!7°)t³ZZ]Ã-Â3$¬D¯pÝÏíqmOÚË` y0‘tÞ0”³õU˜†_P.á‹©$¨9LºÓ`ä-.1Ú+É$FoNMÃq? ÿ%¸å‚í¬Òµ´)B¢!ô”T±âÌÀî<8ƒÉ›#/Ò˜ó[-dá·â[n¼¶"ž ~ÖõrŽGÞÔ‘Ã5+ŠÓu,`!͹¦Ëjñ*ˆe¡ °ŠÝòU²ànå£s@¥y‡ã­IßÀ­23ØS(Õ Ú99L”¨ >&¹!Ëdm|²Jâ ´ŒF:ž Èw¦ôé‰e.ŠÐZÝѽ>a&˜SáHÅh´ÿ(Ól‰“`!’kiçKx‹ï7© îµ?ë|Kß'D i±t^èñeuWJ†þñO2Ôñ¨ã’ˆÞÖRè±dHøº†ëEµE=™‡Å€Žä…@&Ymý4BL ¹ÄŽ;uîYr#Í=UZòKI„ž°VDy'š%I@<9\—ýl2Ûä±Ü|PR0I$<9<•«RyT“··ÙÇ£¨˜¼Þ ¢U¾ÿ‚×Ç#Ïf\·iäoSѸÉ'$Œnµ;|øtÃ[)æé!(@*¦¤¦ÀÒ»w¯ük‚ÐB)‘áW*b…Qêž<˜°àÝ¿ÊÄl-$YM‚“Ĥ`«R§â ~Ïm¨s–ð“MËœÄò'—RÕÉjøeÃj#rTn͸æB Ž:2ì@Üü_\”òÓÓ{@b_MIä+^%h8ï×àU3»lÛ%þ£º‘WRÌ•Fë¶ÀoðŒlÄó@Ì#kbÅBHÏðžàÐoÚ½2È“mg’µà2›uP8Q2V¤ô¦Ý2™eÌ9T[{nÄ»/ÚR¿FO«Ž>³7') F5ùôù ±­¨-îºÝU´ëƒâI«Äqû4Ú¸2ǽœ) bç׆7ÝÈ݀ﰧ±Q’—-šÇš)­äº¼`ß»PäÇÈ€V5¿ ÿW %Qlç%aY—¹è,Lý~)$šƒNÁ~,ˆ•™¶êÍËÕd2hŠÌvâ´ 5^”ã–× 닳2z³'™éõá ¿ÙŽJ"˜™[U·êóÆî ñ¤„Ò¥‰èG!B9*‡# G&`÷©ÞÚ#™ª3IXÊîX*|tß}Û⦠÷#ïjÞd·±G•€ø‘¥jA¡¡ê ­wÄ‚eAc´wjÆý-¯E»­bf%þðëöG/õ²SD IkèM!ßÓ¾çâS·U?kþ #cÜÏ$h­ÒLn~Ï$%¨R@oþZ³†`Ò wÙz'Y¢‘n",Z)*Ôš²:‘ðɶ@&G»’„2ýb ät —9IRH$O—ù§%!¸ AÙZþ@ŽÈHv“ƒÚGd ýŸuþlb6L‰µâvòY<`ú,áOwAߎᘜ7TQÃv/a¿[Õ,²O$äAíÉ/åø²ÜS)÷´`ú¾±''_Œzj@ ÊÕŠ@ìölNñ^RÝ4rGnèèÙÈð4`ù|_=²@_&'b³BšÓÕ{(•ùÙK#L´øš¨=2¥O(Ÿÿ‘ö²y¹qtcŒï]È«˜íh¿ ³‹§•ª0 <—Ç*ßÁ²@Râ+EÔdFÓÀQÝ ©çñ)SþËü6Yf·j Z½ÔAÙ‹-âà‘RMI4`>Á+ñ?ÙÁ¬¥È:æÙžYDMv¡*ÿŽB'`ÊCrÜOÞÈѹ’!mñ7£(+Jwå’­¾(Ы"‹IY“˜1¡$‚hB÷Û¦ÞÃïDßÂÃO´²©UbMwµÇéß*»–ý͇éÙ­:e¬ÄFXƦŠRÃCó<²Y-j;%F•ÚDŽ@¤fvãó ˜ Œm~Ööê²KXî=a訑Æ6cû$¸19¬·cŽKø+"»‘ b.WŠÐþË-NO{¦Šµ’žrJ°¸˜&ä”jܳ °°cÅj‘Éo,¼xñ™™e•«@~߸qö™¾,¦Vؾ ©l ŽU"Y"„å$’ר©_€pÿŠù|_k$2ÄžK.0Ì\s"Vh—`q! î©í‘¼¿Ý2RŽe£(„WµGÚ'½kÿ V!è´vÊ€Õ”©B6e;7CÔ3dG{.”¤œ¦qÄ¿5fûD‘ØôãJá"ªZò·—b©"Ä̩ܽ@õñ¬˜ÔuLôøc "Ð5ÄĶ̯^5Ýr$Yã ê¬ËhÒq*¼«XÅxž4 SàÆ¹ |Û&,%íé¡‘dä?€È¿ °€Sí–s>MEn˜Ö«©paõ‰>PM äÔ§ómËýLœ‰á`9§Z³Ï†,~7?jÚþlÆ…äK’]u8úªV†V’@Æ¿cud ö¨ßþ,ê~ e­1­ã½¹1ò ¬BÂ( X€‚ƒEÿÉf¾Øc®-zts›ÛRM^y\$¬±ˆZü\iÇ&w I6ºîÈ>º$ˆ”ú­R‰CF Ç/ƒÄ±Ç½;§'4ßXRÉÙxÅÆOL“ö‚ÕXWþ—1 7>æùlÛi£{m^âkwyXhËR¬Ôÿ(ž™,‡“CšS¦F‘\}_…N¡*ðuNÀý­²én/ɧÉ8ó3ÆtËu1í …Œ¨´fFëJ“ßÃüÙF#e¿%U©y~)B#:f*žD ÈÛá}ùeY7g‘]'rÃ…$n^˜Ø…zIôàkSÍ42TZƒ‘º€¼xÿ”ʺ¶ÞÉL…d%xùI‚°îU”U^´ø¿Ê9|våÕ¤îŽVvõ"Ù½N/ÉÇÄP¯ÄAñ7ó.V”2'©+Ä(I+ÖƒjøÆg{ˆÚŠuopeä.]Éò(:|.ÃnÜyÓâÊeÏý“tNÉ|«I t $Ú0jÀz v?åe£v’«#…¢¯¦þcR)ñ©ªtúEr±ÍŸD Õ±–+†§Ѥ °Ù x½T~ÉçË.k"Á(ˉ.ø$ß»€Æ©â¤nV£öOTÊ®ËePPS,FuÜ¢©(¾-·§²åƒpÎÖÝ·)FšÀ«é¨ Z§Äõû8&˜•KY!Ž"…HùWfÿ_‡ŽF{Ÿ‚c²“³JAÆA©É¨Ý}Ïù8РTÊ.xd"‚s(±ØP*•àE|ÀKe¤2À‘ê3J²†5!Š€#Õðœe+ŠRP’H¤¸B¤4L@_¯" ]ÇÚ¡Ú£'ÞÆÑ)Æ}l,±ÅÄ– |"£þ Ž@m\ä˜ލPè*TTR[ì-*¶Ti)m²HÒ@êY%UrÒ j-;o™+vÒ’Ýa+ŽWõN*iÃâ¯Jý¦ûY)H1¢ïQ¸òvEU­U@?ur€lû›ˆC}R[›‡àŒj¡ùq£ø¶§üEp‰‘eqŸÐec G—JÐøT°!zà¡$Ý,HÐÕfÜ£V‚ ÐoJÚ ÂFè“Â[¡·§#zûKÈ-*I¨_ÚÆ#ª¨Ã_­’à~ø*ÈüGØ_ˆÈÒ§«`<“[·-0v càìV¡–£a¸$֛ຠV«;@ Ebâx€Ÿå<Ó…é1.¬ ’ž'öWüš}œ¤†à•\Žâå¤ýã0E*X’!ßcß,`ÂE {*$ þ‘\Ŷþð ïö~œû5’žY2ÉoäW˜$H¿Ì»J÷+þË–S ݲi«?>9¬ŠAµÌ×-f³Í ;Iõ1ê¬æ6aÆ«@[‹SµH ز*n+ "6<‚’PHm»œ‡RÌrkwoI^ŠÌføh7NÿgjüòRçðb9+˜œ–ÄËC);TÕ¹ìzölL»’"‚°Hí¡•§wôæpkR¢‡þ'†FȤDP+-$_¯‚à;¨.ªµpSB?J"}H­D¯us''4%UÁ-ñ7ÄGqË´iž.d¢uY?qrЂÁ€RÀÔP°_ˆn¶+·òäqÇ“9ÉéÌÂîHV@¥:°ägßs·…s$bÜbDU¬"k«YQGbFBªÌÊ>1@Èä1ªLY uh‘Èy#òµjIîª~%©þNUv mªÙ.•«bÀÆ—sË 2ˆòôÕOƒã _æË¢lþkD_R®ŠM¼òD=" Fø…\пäÿ”¼27êM,Út§XEñ…\\C;}—VRÊÞ)+þ¶N2?ìXm^H.´¡À±¹‰PJ>‘¡ûaÕLLßkš•”GÞÜwKôÙ*æK…J|(Ã`Iãcß•>œ¶°‰Ýuíò1oIÇ4ûFß²]Ø}—åöqÇù,ä‚·_« ÔŽå…ÖfØ2ž$¡íð5xºýŸS,™°DQ(ûÉ‹L’QE¼ªÑª Z0£*~É_²ôý¿‹!µS?45´óÚ3È®0E–ŸÈÍðÐÁÆßµÇ½”lm:¿ÍhÆ5¬D¡aN`Ëá [—,§û[2 ’ûÊBÌ¡Q¯Ø':ZÔwä2s5Àî²úY%TnLð«4ƒâe–1Ƥÿ)_Úý®Xq“>jtWßÜ_Ú0‰žÝR»#8£W§(߉rs—§ç1€¹íܾw™[‡ª˜äV1R«P»rËðŠepßdÏe—S\Av _߯ãSå™ &¨ÔWaצW Q,æ,IîË+«z…ÆÕ¥9#ßìÿ6B"ˆfNÅ«ŠAáW€s‘iÅ”ÓbkðÙÉl>lÿ%»fú•ÂȾƒr/mK}¼)ÿ‡‹uáÙÃ…µ‚[1ÝF…£ +²žã»n)OåÀw‘îO(„,3"YÞ2ŽM¼2I Iähy·jp9) ¶1–Å:Ñ’8,#–MÙ™™œŠ•¢9“²­2œÛšnŰ´-ë°šÕÈ!,õày²ª³uQR»å˜Ã …F$’(¬ÙÕÅ·¯È"*ü~#Mé—LJ{h ¢¡³œ¥ÜÈUR ŽJ¼ƒ~À 'ö²¬™Ûd"y(ÏFk‚âÔBš’BÔàŸhd;™ó·Zé÷6ÑÅs+}_áAÆFæX*† mïÅ›ù±œÁÛ͉æ°ÈM¿~"Üúެ9o)®Çí§À£²=;•â†Òn$¡Nb š?ÜÐ5~×,5§I lÍ%YˬÑîÌŠ>Õ< ¦LíK[^Ù@e©B€¡€nk•õOEX…$8fŒ³†e ’ÀQ‰ªÔÜcÌ­lŠÒ½$yT7¡ÙMI¨ä mº²ãŽÌ 7WÔâõô¹Yª’4l²šñ@½ú÷Sñd1ýCÞØ~”hMÄQ,,êHU&Z’TþÛ ˜nÔyì¡£Ü#ëB oO‚ÔlÌ”M”+×ö²ÉŠˆ` Ô)õ`Qy¼ÌVÜG éJš|@ЌƇ7&|’J™ b@ðÅÏ!%*UK5yö#.®æ´›Ûâ­¦“q«^4²r P« ÌÜB†4QpåÚ(ÇÍ ‘uH,ƒž1LãÔ`(Æ•uØmðõ¾,®c/©|ò&°ÈŒ±q@©Z’}š*ñ'ì–çþÇŽGp¦whÏ04j°•Ç3'Úe C>;ŽyV©ºgҺťšÆîBä—ØÑŠí O»^`#T®Ã~ab$¤‹*²‘É”2–¯ò“¹Kòi<þ)¶º¥¬m•Ie˜†­OOÙý¥ß1ñ‘r2HBèm)’ä¤JÈj ŽJ§o–]œl0“e{ª[÷¿¹“÷dÑ@ ú¹F3RoŸÒ’±‘ ‰ùÞA8O†ªf!”“þIåQ™6 ¯2ÐAû“ø À½J±vf JQ×G|Æ[t9)ͯ¯èÌ ì7®Ëóÿ…ÆÓ[¤k2#q¡ø\ŠrZݳ$Ví%¨ùýv9U¥ø÷ªðâ*¬Þ#s\2äêkjs”–E1ÇIJôPƧ‘ëÆ2¬‡m›q©_QÚ%©åÄÑX׸ÝrËŒ-‘ª@°+lûF`´?Ê›îß#“v©rC¬wQˆÕSšðVwiˆ vR9rÿ+&(„rXLÞ™â®8£.ÿÝĬ~†@ƒ · —Á£˜õV© þñTíðw_žV6-œÂþ±ÊŽeôÌO@­V?Õ®ÍË'H©¢8F‘bЬGb[ßå’ÙW²&Lr7ÇŠ¨è8}£_ò3æÊš…K‡ ±'ˆùõåOæÉb‡•#Jxú¬‘RÍÆ ‘_æɃÜÄŽõË,q ôfEbªÂ¤@íµph)‚ª4ŒŒŠ¬¢5g§Ú-û]{ör¢B”ˆ=jÏ)jó¥ ?‡L—¹ 9 ¢&9JÅx¨$¼ò„×&gà‰I;³v=òUjM +ôÄ‘‘P—‰¢žra­ZHÂ3HµMj -àÊÁ#ºE9çøO_† ­vQMëû'O%9îdHÕR³· ¿²¢0ýOíuÆd ¼½xÔñ@ʼk±#‘'‘Ü1䉹œÇo+S`ŽXìj[¥)ÛL‡ /d9•$ôfBÞ©<@E3tÀsT‰‹Å#ÍB—â@4'¥=é¶@³ ¦yæO"Šö=~}qBTòr·gbÛÈåØ×§ GÑ–Öû0'eÓÈ&‘‡Óª»ì‚€Š/ŽÞ8Ü•5ô=DQAÆ$ ‡• ‘PI;qö\™$‹ ÿÿÕçð‹xá(9¹…ðåBh øúÙÉÙ2ø=P|Q"(ÒÒHËÖD£· 2š¯%¡;ŠüKü¸ ßfC’íž[E·{yâjÓp{vûX3sÿeÅÉZS9ŽZ)Á5SEåJŸñŠóÙ<쨈è9¡ Æý©‘sg"iHBŠE ûÚ‡ê*?˜n’òc[Ú ªÂ¨¬ßJUC’[*”ÿcûY¶DU!mR2ÒFòqFôʹéFëA^Ç$G&#ª'ÒôîZ@j& ­šÕÅUYAþoø–@æDRÍC÷–LÁ‰u#° §ýañmûY(lCr*ñ”‚î:8uýàb>Ü…y(þRhÙÕ褣0ž@]Y\š0ý¤oòOÅL˜bZ¼¯¬žš–IQŠù/u;‘jO&¢wWx¢nEÕ™oŠ„*AÜÚ¯ídýìU-&cj^6¤¨ìz“Чûy‚Ê`VÀÑ(gTu!Jד ;íA‚I‚a!»ø™‡äî |…xäãÉ„¹ªÈ%7ÊÀñŠDD’N#fèüB#fRæ« ·i¥ OI è*Çí‘5LÇ4,ã¸ÿxµ&I ¯Ý×,½­¯ª¼2ƒ¨¼¿4,§~T'ˆ¥~ÉÊÿ…Ÿñ[JJ<γ¬oÉ…G\õû=$y .²U¥Ä…Án"5¦ÿhŠ­?ɉ¦j¥Yä1sdfR#$/M~=¿”b ‘Õ’FŸnˆe¿@½ÅÞ¿k*;{dy ´þOs4’‘ˈ#<ˆ$ž?ñ]rÙjjÓÃehŽlA­A-J8äAdBÞLÖz²ÈO]vnŸ:b¡bÑdˆÌš´›¼FÊ7ïS†¶@DÊÜe«‚üw+ZXR»wÿˆåtÌ•ËÇ ’’0%Øn$,*§JlØŽªz)Ç'9€«É‹2ò,­F5éñ&H¡9BÒ*†Ú§‡øOÙØû•¾P[G$ºr¦æxJÁÖ²ñÔ âZî(rc½Œ«’ÆŽS2­}GE4$Ô’+þ®N0)•Ÿ‰šr¥+ÓýŽW>m@JâYb¡äÅ„•¡ÝiCNõ`ºRžš°f*B+Ö«P@íï“ %ʈmÑvRhi·Ã^B½ê2¾¥˜ä„³åXG¡ ,i^+^ãÚµ®N\˜Dîëq"™êkÇ$CÛßâùuÀy2uT3½ƒîc3ÉÀî‹Ñkþ®ø ü·ÅipÊ%,£„jxM»saGò·/‡&yr9ER5xtÄ0~òæi …_ˆ·ÅNõñ2U†ÎdDËéj;Ñ>ôLV¦m&V¶“Œ¢Vˆš’œ¶jÿ4lßð?WÊ[¶éCÁrÄÛ—A’äâF²íÓùWý\¯‹p sAG únV§ Õ¤åöh§"ÂÜßU@ήMÄti[}Ë@qäüX;“Ô¤Œd ´/¨jØüK^™}´µHÃð ŠAö”ò¥ÿc’6ÄRa;3q@î² hØZç•Ê›"¡x#ŠtXÈÊÃŽÆ„ô§µ/òq‰Iä¡&¨#©©¯Ë©¥O·ß Ô!"€­6 Þ¤ ±¤»êÿ ’©‰C£1¨«|kL•ôA!ØGÉ Y׈eZSˆ45ö®Y6É^5Mèq© þðt íC·ó`'eÔ§AoÞ.ƃ•(@ÿ•ßlB­¸—@âèY‘Iwð ýœ1ÄÊÛ€,ìŽeB~··Q“—$iŒŒÅx…VpOÃP8ÑIß(–ãÉïÛ øqŒ¨j‚¦¦›S­rÓÜÀ#SÓHãHAfT`O…Hûò®e³¢[‚°3!@uZÑM©²îMr@nÄwJîÕd^HßhÐ}¯~Y0?CTn›Ô±0ºžr PÔ-YíMëãLœ>«AåNõUc"JSã.TIJ’ÝÖ…E0ž^lG2ÿÿÖ€º(y!AøÕzÓzü5ýž$ÿÀç&9=QT™!C r nhI ò'£§Ú@[¥H ¸½ˆU£tW ‚k±YÓýZã›qœ[<^K Ñòi‹°aRÅhàYOúØÙÎÈù¡‰á.#a*ÓÕª•©ïÐïL®%¶BÐÖ¡0*hw©öèÏìä‰`Ù˜¥²’#W’ÒO€ƒË÷Aß¹ \|¤ž‡¾*Á\5³’à’€Wb´Ü5}º•„’C@ªÇ;K¥:Ym]£“‰«P‡ü W½ úk¹\z&)x'¨ã¡øIý¥>䕉»^‹_ÔL€R#v(*íNØ“³„rÉÉš€—©­î(Çªä¾æUkHŽf¦'Tªð$|wþ6Ád2‘Ø{Ôãt7ªÑVæ3ðž!A?ñ§ìâG¥U2G­êFW“ŽGz×ã¶å_ø,&+’Qé:+’áèw§]ö8JAÝDzK!¡TW‚‚Fæ´/lO&#š+íJ§„ÔâŒh @ÿ#í`šHºV’ͬ¼øÐ±©=z·\¦'pÚP–í]rn<Õˆ+M ùÕ²éXÔ9·k‹§‘&U4æ>ÞN üËO³‘<ƒ!ÍZÝ]¥ž(HDç#»1j±fð|{á<‚5ј#gHÈ+ÁT€C ñ1§Vþ_åÀyZº’»Ã<²ÁZ¾™îÅö'}þ%ÃJ¯ Ü€É)PZªªMI'§OÊ0j Õ•eãÉ( ºJA¨$|KSã’’sPó‚5ªF(Zò öª{Ší‘óKR9dXɨrJ ­*<#b•KWWŽ8ƒ’±Öf_ Óá^ßÚÄ…»•’v ’ÅyräÀÕ€Í\aµ‘U²¼\Ø–0³Ôw*6ÿ[zÕ² m²z©Í0:…¤e(ãJŠñ 5¯VÉé>ö'˜÷'M1x”¢¨q5Ý©_§üœ Ûº%WeYä›ì?8ù*ËqøyõNX;˜žõ'y9€Ò,hÂ>LX1äÙ¿ÕÉÆƒ_4æÞvÕd¡aÄÏmò’Û»Öôî‹+ðšCÈx{·†Ã]Ñ@8`@AŽ@B“³-~ÞÙ1͇DuÀCiñ­jMH‚)ÿ •¨¶ Å£G Ûžt*ã·ã_õrrkмF‘:92q¯Xü+^»;5Øäe-™Äz•nbÁŒ±¿sClj M|k•Ãr}Í’Ø%ñzFÒb83°œ Uè:Ø ¶Wa¨.±J@êW÷3±RˆV„)¯Ä$4_Sö°ÏŸ¹ADÙÄÓÙF]”#§h£Z€ Ñ@'í3SÚÈÌïò ¢,4Ó£úh²Už9I’¨'¤`Ò»S‡òäöü˜oѨæšÖ:°d’N% Ç%Y@ø¹+W 7,¥·4s™>¡‘Áæò€X•ZƒRó`êJo`•0 $4@] kVçS±÷UåþWÖF©Žö‰Òç‚ςޣ-«?¡+&ôVÜ8í©S^?ëc8ܼÖ2 ¡£Ûjw6¥hùqeaIJÆH=©°ÂeéµàÞ‘Z%hepQˆ4©Z [õk!Y²Š7¶™$Q2³1nªv@8“ãB­UÉå–áŽÍ©Ùð”5‰‘\2ò)§ÃÿäAe(ì IµUhd¶¿Š±OŸ¿¢¼gg¨ð#âß' ìw±™ª=ÉŽ«i‘f´, D~§CÈr§ƒ*Ó*„¬oÍœ€½ŽÉRêiZdUˆ$ #!¤'ÄÇ«qO²™\w ÎB·CÍ'©$Â.DÇ(áSðÞq q]þ.M’‘×y/ÅÆÕC4‚©(¼‘¹H­Ç¢ÔrÆ=ý$V«ö¸†! +Åj⺞è]æ…Ô DËnz…ðžh­–yZê°‚xÃ1xÊsjšÄ½w-_µ’ÏQ÷£ ›êB5ÓeŠkuú±JJÄü#âækµ›åɰCyåI\É4w“À¤s¯¨üJ5j}žÌrq§²Ý!#–úNRFîdJFK_„Ô•0&»—NC‡æÂ1Ý;ÔÕŲ‰R"aEª‚Iå^´ì3ݺcd”‡²±±õÔ·ï„'ˆ*Ôzw^¨~Ö]@}ÍVNÞõÞ]â×~›Æ¤Ud‹«5åÀŸ¿ü¬soÅõ!ä‚ݵ%-Çêíq»«| 3txŒ0'…„ÀâFj6mfÍØVT”¹0â®ÌŸ5?Ͱc5Œ²É¼‚c¬¤i‚YÖBSÓ~¢Ñ~Ëo·ùYF/©» (}1a:d,¼åEq)5§*B×íqèry†ìpža-°<õh„¨ï겫×íqXèÙàÛåÇéj'ÔœkwQ‰mc‹Ÿ8ãs/#Á!oð°•³%ÈÈvQÐ$çnª¨ÜíÉL¼Ò©Ô»"•ZŠÍƼHìGù#ãËG-šJé#?V´ Üz7.O_¼á‰Ü©›IIŒraÅn$e‘©SZ)*~ìŒÅmäÊ;´ËK¸ÐH¯9H ½‘Kî 3­*Uˆæ¬vPt#¦XŠ€c»—wø´åV'zü²]è*lŒ%y*D"I_Úä7âO@Ã$y|P Í$Øšz­õ«ü]…Sîl%vè†"ʬ΄DŠÛƒM·=Jäâ‰!ã 3ÂË@ÆI$W¾Ý¶Ë9¾k„¬òÊæ@Pñ3†WÛcÿ ‚¶ D´’·&ZzüCmúŸóeD6ƒ˜°·‹…y« Áƒö ~¿Ú\´sk%¿Vg‘%HÉÉ©(iâ0ðÐEîŒ€Ë —4Eé¨Ùx±m”wè?g C8•V…ä ÕE4^n ³ô#¯ÚÀì‰ÙMãcjŠy5†"žèxâ s+HZÞø–PòÔØn¡«J†1ëäÆg¢„‘ÝÅ#ž%ç'Ô2rà;Ùwâ?Ê˶#à×ÉojèU¦š(Èdø™‰ìMXŠòÈH¤k¬jnc¨Ó¨g VâFÿ§&û8Ý‚¼;„!‰&ç"(LäU€©ª©j|M¾Ç-`¶Í`n._›ÎÒŠÁNü˜ÿ6F{Qæ–¥¡NjÕ~,¢:bµâ£º*ïË!{†s+}b4Ep"@q&´ÂNè ‰'ÅYj²I AQ¿V­9‘ñd@Ý—Dä©aL|ּʆ+ñðTŸÙÿ‰dàH¡Ý-ƒ…xKÎd7§Æâ»(©N?Ë’f4ŒªÉ *…1’:°n¬iñ§ç†Žá>jrM$¶Æ8Öi˜òBK(&O‹¯¶HP—“Ùÿ×缑død‹HwãMˆþÆý¬åk¹êIèQ7lá÷‘5C^¼·~ÏJdc½²–ÔŠ‹Óúé’€†R¡A¡5ìùtÈHúS©Nú|>'…¸Ž;Ж£Ãƒa¤i¥Ü]úŸ´¥:•øÇ§Ü}®_µ”Ñ«mâè…‘½;ðíR¡”~Òü&¿êŒ³˜kªEO*ÛÜG2u‘ 3²2¿ faþŲqM„Ñ´2Ïs;ÛÜHÊ·£‚ –RV¢¿káðÙ3,0‰äWÌ‚3ê¢ñYÕjA¨ÄÓp+öNDn’zºÁ£k0(}HÝÔ’jä>GmðËš"²iƒ´Œ»«•4© 5j~¼RUHyŒ ˜Áôyr¡äPýáÄl’-¶Aõ;Mwgçê ‹»Šøqpµ±B²ú‰ D´!8WmOòöÝr`s`O%Ò/ˆX} h´ T‚MN¹‡Œ÷aOÂTz nM{rû'È$s-¤.d2Pô ®Ô Ûojá‘ä€7k›5ÔQÕ*æ»î›“û?<ˆØ'ªa¨üPðXž"ƒ©«o°§@*ƒlù!mQË;5)ðƒÐ†'Ãå“‘4ÅZèÑÌG…#bÁG.)_l».Špò`±>Ë •Y€_’ûwÉùù0«káUy&J^„š ÚŸ…r'¹>mÈZY9H‡ˆUÅIIÉòbœŽjcãÇ•yV žÛšli€uO¹RÞÔAo+HYkû¦ ñ5FüA=*k6)EQ£¼¸Å ¹ø˜vØí‘) åY#‘’5¢€·„3b<ÒZÁ$iIé·AS˧óPõÂ7Anè[1”Ê9)&…Hæh9ÓìŸÚÆ7A–ÌÌ·iybª«U ¨øqˆl¤îºgg¼IXñÃ'-åÈ…¨¯L@ôüTÓ6”:;3òàÀ> <BU[¶ÞÈKŠÇ+JBµBõ #áÞ´=«†"öbPñGZ… ¡ãRÔèjÔZ壣XMbsésb*±‘ÄšA(<Û£É+¸ AUŠ…b@zS–ÝvËâÐT§ èÁÈ76!¸ƒØ¸×©Äs*y"n´jZ­RОB÷l”-c’#ñ)êAÚ§zxý99–WÓy›Ç«…⪈ì 'Û–B{Eœ©WSà LÏðüd¨%¨BÐV9ƒ9 Ô‰4¹@bÀÈ ªîJÊ)×&oˆ0ؤ`–X­ÿ|"‰÷¾Ã‘$¿áÿ+%arÑCq x¤X< zÅAšœ¬÷ö`]zis·OLÔ$êÆ¼VCJ7…~ÖÙo>m$W%nEî^H´…¨µ UÛ#q “Í$äΰŤqÆÊáÛí…"´#¿ÃÓdódNë/ì§‹NIm”ÆÐpOÚPI ,~b”ÿ[% YÝ&46Y%¼YÊ-æôÄŠ.#‹í‚Nò(?²¿,x¨òOÈK6InãidoTÆê¡Í(b–Ç×IŒpjšU½­ÌtÔR5XƒW›‰>/L“µCqáOø–Dƒ\B@ZÚÛK ±C^¥9qsÄÐü¾Ïód‰"‹œÓγÁeÃáݸ#E÷®"7güäqUóTÕf hËÎ&GV u–c¿Áÿ’¬‡DdnÉ­Á¤Ü% 1 \¯$ꤚqOÙlª‡6dÔ¹)ÅsEì¸óhž±Ì¤þò2j*´øY~Ï/çÉH Œ{©cÍ$—³pÙC!;ò<{žü†6L‘¶«¬tM–‡âûHÃníöpLîÊÛu;òWQhæZ[š‚£Š;x²Ó‰Û~›DùïÉ/†Ýã»”%¬Å q#`Aý‚@ß2%ù4»w ŒHß ¿TˆBî •`Çã`:ªôÊáÏâÛ®Õ-ÄþƒÆyhÃ/ˆ‚Ó‘‰£ºH°Õª8IÔ–› ®Çâݨ6ø©Ðü_µŒú1ŽÖйW,ë¼®îƒá,Kv' ¦W˜îÛ‹pT5/EnåW•XN¤Ÿ„¨Bî»ñãº\€Z†¦Ec±p¨ïÖ†GØ98“eª ô’§W·½¸Ž> '¢’­hý‡é·\O0еeNêTªñÂÈW¢*“U?%þlfG$Bù¢4·ií¦jªÇE1¨ARTUªOù[ägµ|S>[(Ú ‰åš8,‚&$µ8„$Ÿlý¬…ZE’¶ÑÞ;t)d©ØYŸqSLœ£êc{.òâ4Z}¢vkdbvHØK+<ªw¨ÃŸyzá;ëT·U±”,´2!åj»¿|Gq˜ð;‹n#d®âfÞ‹éµ–¦ /Ähw\Öiª±jlK§1!ŽQ|OÃ_‡Ã¯ûKö2éý¬}I¶¦V1“'¦~б4Pkíÿ Ùmù9$¶PÂ.-B©DtšiÊ’îÏñ³Ûþ22&ˆ ÇÅåÏKë×GðÀ…}9I,¤øv–§.A²ù2Æ7÷!!¶!£t„ÈZR¥ˆ ±GªŠ}ëû9 EW’'Í2¿v:„Qð¬=>2JìEví‘Çô²ËÌ*kÓrX>&/NMë§ù{·ÚÊðË,§aKôà²Z¹1V0,ˆßk€¯ÄÄr9cQ ˆÚ Ä4÷êÈ KÊ6äMOÙä ?ãl¶FƒW2©¯¬¦dtžˆU.jBì ¯HÊðìÇd^‚Ý£“ÒdsûÊšû 9SsÑ[–9¹†8Ú›Z4¼d û¥¢TTzDqj }£×ý\Ž.Lò„1-X£ý܆0ÒaÄr=y€rû9}4Úi¦Á$@¬ÂW*ËÈB̵ªåÊrÛq ”ãirIîü¨¥PÔj÷¦7¤ŽI{¢´‚.lÕb(n®z÷ö²æ•Ñ"M-° ŽqÆQ òìïÓ¥W óZ_nc2Î1RBýž\éÄŽ¿wúØ%Í”WM29-7>f7-½zŠÓm¶È™$ò)}HÏ'?íâ{£,f¹ÖIéìÈ1È¥Tò¯ö¾æÂ ¤þ“%Ë"?H= j54ïÇqÔaßd µaʸ²%ì‹ñq$ß:Š|Y س¤6¦eUPÑ@BA (*Û—\”ÉÞ¼‘ÏøGØõZTòØ é’­˜^ëíšè\ȬÀ‡^N GBGM°ÂBò² `O$PE ßa÷äO6qä…k™ž&FWjºž•£Wá|Qkâµ4¸!¢X¥fˆ×p(*MlIg0ÛÆ³'©E»r¯@=²#›$Oú2F¨&bd*%¸ 6d,öQ©—˜¤åÉÈ$ÐÛþ6'Ø)æ–Žæ3<<Œl£e­hZŒNÝéÿ–[¹o»NKÓE<•ð4^e˜"ükmøœÚ,I´T÷~ŒRÕò_T€À»ŠPTîwÈË$rjM&åRFG/€!{Ÿ„o¶.i#pƒ½´x¦kD2§20¡;oöI\¶2½ÚÌit6òÅ#0‘¡¡£MÀ ïï‚l iVYœ^ðgʨ[ŠP…åàOÂ+ðôÇlZä4²H?Ð-áB¿¼`%e$¤W¯N¿ßµ€u)#’¡\r Ѻ…?Ê ]¿á‰ÈšdS{H%¼Ž&œŽDoÊ›ŸõB¯Ù ÐÙe ²ÄŒ²ˆÕxNLäž²ý w?òäé‚„éF(ݘ,hI4GâG~_óN÷¤òBH*¤Jï»*¨iËnôË"k~æ·ÿÐç78¹pÔfõCŽ'b$ëÓÃíg*ÏRy¦71Èús£)‰bH¹Œê>‘•R¶Â Ör™.CHG(ò³R”qBÓj`Ú‚ÀÙµ!›œ‘¢S<ŠšµZÐ÷ɳÝ#É40ÈÑ,)êGQ»ÄÆŒ£ö£?ð­›9^Ë.Į¨À½O">SÛ¦1Y"" 8h&â#™i° DÙTPíÏ|óJO`­ÄÖ¯!ë2°?Ì8=ÿ!—Ïp— Lv$yñ&Ìíãd$ ‚v;wÿ…Ì~­Ý¬ ?X1…‘d %7"´n•¦õ,í.™bE$P€ÊõjQ½Ç¿ü60ܬ¹:íb0ÛH…•ãpX–ªÈ¢£ û6$²'“š8ÍÛʇÕ‚*½hô¯ÅƒóøŽ7µ)¢=x¢F„"ÌTž B*NÝ»Ÿ÷ÞTmšŒ²3 üA@,xí@|)ßJš$Ò:D&ôZ¨ÄÇð2®ÿ fÛ~¹lM}­dšVOª†â}p´jn ®ùÕ¼rIävjåFÍÄíP¿§áLÈh*39·.çÔ@©Ìž„C$:¡<¼aç6~GmØÎS[¶²„ý&sÓ—ÄäÑ{Œœ¹±‹¬ KÀ„–b -+B£`MzuøpL\Sº®©hcçÉø³TøöSn¹ e”вÇp4øP(Y$•ÍI gSAQß•rÀ—Á'…tÄ×vÈÿ½”–!º/­XûGr/’'Q¶e·w !¬bI‘Åw5?NÙTO©´òÝ&…ç™T»°·f¢‚*3W}©á—Õ›²ˆŠI£ŸÑ…•5- Iv hæ½My7üVFÖR ½‘K–ê@«Å7mÕ€Üÿ•ñQ±”¶!œc¸U{–G'’H®˜ ˆ¥#h¢N»Š¯þÁ°VÕþrD·´6Še¶15¤|d¬«é¹7 î¨ ÿ/ò· –Ah‚/#BA¶`&PÔGÃìŸo…¿ÕÉK`Æ$™"$¸Rn=BÀù;!¶Ü7oÚOõ20‹)ËÉ»/ô‹ˆ¤U- ²úNhAJ^Ü¿e¿›Ø•¥¢W‡ÑeZ’àý®,OÚŸ5"„j.~³G •ýû"Õ™%?Aû$·óóÿ'äG3H}RÕæ1¼Szs5>öÇ …kðš¨ÿe‡¨£,lRœgœà/!rc¡ Ƽ©Ó‰Ý]F$l€wTÕTGñ,–íXH¯ïݨd§où·!säÕÝ­Âê‹rѰG$l¬*i@@¯Äÿ´¿Íñáâôû©kÔ²âà×¢ôÑÒ6 ¢Àqeå]¾/ƒþ#“Á„¾¥m)dK˘×Ô™F^E¹,€Óâ=·ïžôYꆤ¤Fó¡¥Ä _®Â´cSZ­x·ù?䱎ŒrÕÚŽ¡éµìRB Ã;zœªËVU ·.\¾ðå½)«¨*sÁBd5‰ ,Êÿø†Ñçÿrrk½™åº.í‚Á×+Å€ GŽTþjåCy6ì"±Rak_Q~8×Ó èìÅºŽ›|8ÅŒwù+h²o*!z«4ß‹Rž ×ãÁž4|“ˆ’:¨k0»bªYÊ*¡Q³€ü@Wv¯®G`¹ÞG8ÔR+Á'—ÃĶÊ|Iá\ž0(–/`¾ÂfÔg1¡/ß‘™$ñJvðÙ_é—_"[KIHÕIYwg.àù·?Gû3Èkt=ºÂш @¬ÊJ•vE“ñ¹|¶h‰EÚÏq#| eôäˆq*FÄÙçö¿É\ˆ $"-B¤³Ü³…޼‰‘W 5ݾÏÚø²2<@6DU•Êõ¤‡Õs"[³Êì„2Èçuúì×âÿuã3·Øˆ…·P<6qp™‹u]¨om«Ñ>,8ä³ >š$.ï̈ÝR?´ˆã‡Åðž¿üÛ†ØRë)]žHÜ™iÄ/ÚZZòÚȵ¶h­/ÔŽI$˜m@1_Ž­ýÞÕëݲ2KKLE"qN<ÑâŽPiÌŠŽµ¢õãðä­ ºE´[Ù™F‰lŒ¡X²pV¨Åþ×í`ÊIºþrqНr/U)qnÂ"dY2…I!1­GöÊ =T[ Ù u ¹l-yÔ%¸ñ"¿Ê‹’ ÂGr«£Ú¼W†a?®’I!ú¹â¡S€jÓí+=xÿÄr̦âcÔJ¶¨^R hâ ª– $òÜ|?³”âÝ“p€µP—1;ËÊ5Kˆ¨Ná$R¬¤mКå§pÑÕ—4Ö6j Œ€SÖ½›}ÙbBÜ<§Ó#ÍS _ââÎJ‚•4øQ¾XcT}ÌfM¢.•äÖ"X‡‚’2 +±ñf'`¿d’ܰcú7e;â¯æCwgÍ\Ë91„BHûDûSá§üC3L²rÒ%…tëˆåW0îÆ•VéB¤×âUþc‡7Ô)NÅ£ÌMâ±%Z@ ³°RÁV¢Ÿ%`6ý¬»'ÒZc|HÝaÂÜ\úѧŠ`´º¨FƼ¾,§JoËËum̘҆–²ÊKHãz7"x€ÕçðässF.¨MRdMFFkqJzfw4Z…ç¿úÄòþ\–8ì%Z=Y‰c›ãíU:ÐÓ—Q–ŪIí¢?èätb¢‡á J³84â;0ùæ<È2§"<*q‰WOiª ;5MH4,A©å¶2#Š’Ý/If{{HÙ&3Ž@ïÆ¤uñËoŸÁªÑ|pÂí@G2 $ÑX•ì8þÐÉß6˜F±„B¬Ñ£s*ž¦ÇŠ‘Çoúë+™Ý²Jr#æyÊëB¢¦÷h×ýŽ l’i/¹HT‚]˜¬yÀ ¶9dwjYpŠ=&nG‹9%kZ ®äöú0„ÓI µ—‘fâ9@ÌG•­_‡öª¼ÒI!1»GÙ¯ÅÈ×v¯J¶G•³•+ø›ÔEi6& AâZwå_ø”mP´V §÷l¤” éJõ¥zäËXWT”Kp‰iRs“È3WÛþ#æÈû‘•»’UU²nÔV”ÜuíþVCvb\®£›à¶d‘Øìh~ÎÇ|žÔÀóT¶Šá®yC zV°E@‹î[â?l³„Õ1ˆß›f•ÊÆì„ T@ßÍñ*ü9Ñ•vey>­ð`¨*S(øcÛ"m…³Ãê´s ¬ŒÄq©§*ýšâT í®¨¸àþ”|PŸ‡€@:Ógû9> fK ô%ÔžQr¡é§¬ßÆMIZ·ó×'-£Hí|±ZŠ3pÞGTæµj –&ƒùºEþ® æ«-^Ú8滂Vžõ™yÛÌ”qXÒ¤?Ùa"ö<˜ƒÔsAjoõ‰L±Iª?zI ÿû­*Ù<|öD¼ÕbžÛÕ“ÑŽOŽF.h*ƒP)îyYr²˜š4½)KSIU‹+• j%?Ê'ö²ºl•+^GÉoP"¼‚µ*„|\˜3S óB’N²F¦(Á`¢‘³ 5K31m˜†û?³$óAS±%h=È kÊ¿?ÚɆk×´1ÞJmÓ›µV"MbEPz`7°Q[–ä™’H5AwF¨Qñ²ÉD]÷±‘ í$ܨˆåtíÉðŽÇá<²T¯ÿÑç—vÓ3³sŽ2±zm~„?vÿr±;|^¦\þ ÔjU%æz´e¨Ì¿e—ý<Ö¹LvÙ²]ê:rú*lJjðÀ!”…ÜÕYYªËOµR;9eÞÉO'rÂ;d;³(á*íµ+·û»âÑk$½%´#âzÐÕjE}¼0Ú*ICDÍ95  Ôí¦ÀvC[±æ¿Ÿˆ þ¹§BrRcj¶S?ªPÊ„ž»¼ìÓJƒºË·’4fãÂFqÃrW©`‡|b.”’º˜àk¨‹IFhâJ) ´ø¹4M&BÆëhþ·!`â9žä©h+ño¶ %qtpžý± =3ÈðU¡¯Ø]ßü¬ŒcD”™’JcºµRñÇh Ò*Ç ŒÂ»·@ùe¦Ï]˜ ˜2¬w/y"”à 1*ͺØš-~/õ¸ýœúV1Ý%äË ¼aaô#åêHVŒÂ¬¶.)áü™GûÿÞä=õ¬ñAdïCúlY *¨`Ó‘#r^™8IaÃ[©D,&œFÔ!ª´'uå^§á¬rdå¼¶ b6Ü £½auqÈ…¹õ"k”¡c€°=>7øùY9Go$FIÀ"r=e#¦ìªB¨ Ÿ„Ÿ³ü­•ƒ9]¨iï+JÆèðž‰ñ°ë±A^BŒ»Wü¬3¶cz®–14aËpbIâMEiÉXTmö¿É ¤m“Go$²8qkpS“Ð0R»xÒ£#1°geNîÔC"¼s=Ô\xuþÑ‘°ìq‰µ®e ÑL"NQÈ(DgrdSO†›ïJ«’,–÷ ~%2F±ÊŸ«3 ,ª °Zx)ãÇ+#…²Ä’æš)»PÛ:ÛH¦¦¬(O³ðž›ýžNQçæFCäSNصݥÊî\ Y ñ$T!ãM¹#Zä`},² TÓ$o¬ÿ ,Jò9râJNäŽÿÍ‚co‹(ëÉÙK‰Ù§qé£ãñ« ÷¦êµåö•°ÄìÂ|ÐÃÅ­¹|Q:A PµJt^£  ûYoRÀr îR/^)H[v–5–RäUiUävuÊÁ Ó) ‚&õã6¶±ÈJÅ2!رZ‚WoÙÙß+­Û.âvW Ð^ÊÓ7ªH!¢…$]ÆßëþVJcaÍi$o/F.«Q¡Øu£¯¨MYÿ›ƒp±‘¢‡’IRò¡NNw•we¨F#Ãåe$ƒrCf57Œó«ªÍ2P¤(b´Û•N8Dª4‚=KlîÕî$˜"ÄÏN‡%øÔþJâc¶èâÝv«uK!19æC*¸þê„0&§÷ÿ ‚ƒ)ž$%…Ý´’Eõ[E‰‹Hóâ¤/JíüßðYa¾§“Xå²&Ð m˜2ÏrË#$aw¢Úøxüƒ LTT³Í3BŽ$¸˜ …ˆ?n\S‡Sðü?UÃÑ Ò6©wb{˜¤”š2F±’ʼÅX¸îOírø°Ú– ¨]Çr'Eøxü+±-PkU>ÃâÉÄØH.·¹"ÍWnO tåÄŽ$|u?ËALæ° 2 hí£W•™øÉ*+ýó—V:éþ®O$‰û>ôJJ©ÁݤšxÑ!H$5ôe9/—DÄ×5K yÂHvG ¯RWåÛ’·ób9¯DN† x¤ä±ÛGiŠ^›÷§Å‡72|× ™j.o+GnL8Ä•PI`ߥ+ʹLv;·ìP’L²ê3\ˆ§' Ô©5m_‹¡V\<4)¬íONYŽ£9¶%B…J¹'~!Wˆ_ØËfGÍ„Fé–¬“«Å$iU! 1ZòÝ•ÚÊ![·dä“ðts$ЯY$‰Õ˜×qW§ÂGo‡/Mʾ’mSëÊ#V¸2Þ­ETøÛáü-Éâ9 ÀË5H@ôBÉžjòTÇ‘+S˹ޟ³“%‰¿µr‘®·IDSLà˜Ð1+@B7"~Û/ÙÈ@ú f7 Úðeµf•#thÒݸ©c_Ú?ù9 Û3rC%º®‰4FF1 :„Þ«J…$Ó—ÚÛö²súƒ\ŠÝÐý(Œ$hâkcÄSÊ£pTµO³–d#‡v¨RýYºæâ¢6FûÙRR—ësX"V„q>ìv¡û>eß›_UÓEA!j%4›Š¥‹q©ëðñãÙµè¶J;©ne^hAh#øJrÜQ…MZ»Ž_µ’²4 CH¬$Eà"Ãê‘]ýZ)þX¯5|#•ù¤ßÿÒç²Ä¬#”ÂéGèHE> —úŒÔä¿ì³”pz™EÔ$†Šd&" 2ž›ä"E³•ÒËfG$œ!*9ºmñ†{16QWñÉ,²\XZ¦ƒ•lÇVÿe‰µ‰‘b P§¨e™•¤ ÚFÈòg䄾ú˜pÉ8©TEí^#¡ä÷-DÔiÖ¡’DhSj5RÄ“ðž£ý–= ºèM½fU‰áoïCr!\¤Ž•^Œ®‚cV©Æ’¹0´¬áwÜVmRvÈL¥Í«Hdô'"§~(y+²ÔüKã¿üLòbëV ¥v oé¼YiG$t©ì»ý¬cT‚J"T™ б3MÓÁ½Eý¬®ÙÏ’„‹©Ò" I1*¬¼x±»ïðzdî4Ãv”ܘÒpÉè•/' )T©©§d­ ŒŽ]SVÑæ¸]JÚqqñ9·©OÝ>$õq'örØ€Öm2Öf„V±ýl·yäº.Ÿ?PìI?Ä?g!3^öq–Å 2Ïq—ˆ¢*RBXóä7^U§Â¾;rO^j‘­´ÒÜKÛPÇú|@7-¿~?g ØrLE— ³•á…å`±Œ¡iÈ¥)ÓÆ§ãþl„™ ÖMšÃ2F 0œ…jAùªÿ6ÖC¹|ÿPe‘!ÖÞÝdŠ4E+·-«Ë'e…i ›Õ"‰ÃÆx³58µ7åOµÛüœ®6ÌÒô ߤã"õ¹ñ. æEÄà ;[ÝlrÑ$>šQù‡ïµõýš d:2µi]!ž¿APª³u©©þ­;µ‘Å$î­õ¹at¡ LjW fñ aZÿÆØÄYY”¢¼”Ã'¦ê§Ö%Ð ‡0iÀŸÙß´—sK7ÆÌQŒ€QTqaÐ ù øÿ6[íæÖeºm­¤u5,®MiÈô¾QVChعå“ÓE- b¼‚‚¦µZx“–5­c#G †pÕŸ Çbßk ¢f‰ä·uôÊÐT…©Û!Õ—E(b«0MÍ^C‹¯êÉK’#ÍN38n^˜F Æ¿  ‘SÓ¿L$‹!Rõ%u_NEР&…W¡îkÓj÷L¹l§ªÈ©pˆÒp¨ª(Ükö˜7o‹—òá†û¢}˯Z\ÎUT¨P-R¡'©¡øÍ?ÕÀÊWÛ*:²ÀID*A|U=ÿ—¿µ“DWEl¢ÆKˆ§XdqTf>2†•^_³ü¹_ʺ|5” {YôÉäsé£3¼5f“â cGíPò;dÏ0 6‹!¸‚vj®êf~•áµÜŽTãLˆ•gòíGP‡ëÈñÿ£9xÞöDdƒðö ùD„’í}T9ÑYAN1²ðøYC“ÍNô§Ú9./U¤GÒR“«­@ò€QÖKiÒ´54*Ì qqT®\ ´×ªT×QYVfhÊ´ly2¡'Œ£cÄÿ+Ÿ‰ùYL lÇUÐ8KÄ3ÑwLä >ëð5)ö¹mû\°Ë–ÝQ[-ãBœ&%šCÆ*mÅÔ•e5ê8}šb7RæçˆÜ[ÜE,Á¢u*(ÃvŒòå þÎ$›õoºõ¹+[ÌÒ!U3EÑzqåNÍËcüØ+¨OB¥m0’ðBîdG§65è¯NÌ¿ñ®6a{£ÄJ—ðLÅR™¡u C_¶¥øïÍɪåWcÜÛ$™ígŠûP¶u³e–âÔb€ Ø€/»ŒO™j"‰L5e¬ÑÄäIy„²ô Ûtß*ÇÊ›2s°­LL3’K`¬MÏB6f¨Viöøÿ. ,CKÅy¡Ç qrV5 Ö¿j¢©†<˜ÏsÉöñÊ…9™®P¡•vŒ*G'î×ü–£}¬¶ØVè­B vŒüR°³g=ROO±þK|9GÚÎ\•f·2Z[ÈO. à)áòß–V~¢Î#Ò„ƒÕƒOiUY°ô­_¢)¯òÚ®N`ÆŠë˜H°¡ ðH Eå#z×í|_i¿ãL”…Ù` © Eõ;i#˜J’aDg2H~"9ЛӖFÅ‘d(@m®µŸ@J\‚-aéȃZÆò~ׇ $)ƒn’z3JxÊ´P/ C0ëî~ÏùY.¬J¬ÊØÊCzNíJ°ü|Ö©ýœbˇfõã°±Œ Æ úðÙÍx‚àtQ‘Çê³òLý4?VÉÕø]ÇÅHøžˆŠÅ–§ìÔ·Ú9"l– lYÇ|³Hš™`Œ÷,)Ëß…{äyŠgËtQx…¥Äå}IŸ›TŽD±àZýœª›o&H¥¢ïEŒ8¡¦Ûºžß²´ÉÀÛ+RTº°tb>î+ðÐ}®GìâAèÄ]·(táGU‚5E q`*@ ÛùpeÝ”6[ÄÆ7"oÜ«FWâÔßéŸø\Hè…õL–’Ö‚;g‘YE%x“þ¢±êòɨ{Øô(ý:I(¢* EpÄ¡ àñ|År3{8~„Æþô~„x]&Y#?Zb=D@ÀzB¿ò›+ˆ³Mƒ½&¾ŽîÞáØ€ Íþ’)¸«ûÐÐå‘Ü|‰ûݦ]5CÂZ–Tz=E¯0úÛñl”ãéDNôšjs!¹·‰J´oÄ.Är?² ªm™´¾ ­¹…€•\7«ðìCïÄ|4&Z‘:%Dw±sŠAA°Bxïáü«þ¶G+,\ÐÐC/Ö¢×ÔšèFçšµ• 5=×쌰r¾àZÍÚ/RŸP´ã; h´iIª<7ÊàG lÈ !_V¶@à)µEëÐðcË!†[Û<£d„7è·ˆPÒ7ªµær£1Éäúà _I_¢[˪*â&y€;…¨bó}¯‡ŽK)ô°Çõ/½·‘u[‚´Y\,*£søÿ­Å´[2óL,TÁo¨å,HŒê­ðú„T?ÅNMµ—!=Ée’I%¯%Š™\’FjñFY9‡mÈû+üÙ|y_F©sUœ£E,þ ”ÊS «p5"´Ûáû'V=xˆj~$q.¬ÍñɨìrÊ`±dsÁp«âbr($ð©ÿd(pžaG"­É,RHPFj Ûl*:-rfcu9Œ©É“·Â®«ñoQïÔSRQË0hfÃÉw &µ?NO¼5_V­‰|ʧáHø‚òbı?Ëû9#Ü€›@<˜òî ­FÄöÊ$[àöibD™›y Cõê+íÓ,Žå„¹(È^I9³lÕ$u ì¿-è¹ Zb²‹Ç“˜Qò?id 4‹¿p£|2‰Ý}ª¼œ r7ïO'wøMk]ý™¿kö²© Û M)8? oÔʜ5éáN˜ò6Ë¢LñŠp¿Få½U4Zïñûkí™[‡E¤lb·,¾³1ãˆãDáV­kÆ236JcÑiYLé'%›NÑ.ûrøFÿj”Âã¨Jf‰íáÂÔ»²•èyH9ñ¯Û%eÈk“wss3Èê&D#œ€?¦Y†åa´Qú±9• —^ w!Fé^9VO6È,³·y%µ’"Z9›²òøÉð܃S¶J‚e02@d•Š<ˆ&büEC•iOˆŸÙÈS+C¬)m±GtVU<œ1jR͹äq'ˆ¤m¾BîòóúÔ®e5ÚœIâKr¯ú¹d¿Øµµ|K(NRÒJ“ÄWpPVŸEZ˜õSô¨ú>˜‘‘qPª®i»«âF$ôXŽ«‘¸¹iÌa1Á‰ ¨ã¶ã– )7ÞÿÿÓçŠÕ‰i)YÕ¥æ¥köMl/Æ£ö³•ëþkÔžGÞŒ¹’Hž¬‘H¨ ¹¯=«Ò«û?ð9Tôl—rÍ8Bd<=2^$2•`hGüpä&‹ \Ñ­#¹ŽÉâ•xÌ*rˆð$Ö |4æ˜!dX¿ß2žÇ~¿ïQvr«K,¯$2˜¬h‘‘ÉÊ l+¾ß´Ù`<ÈaG’(¢\V?¬"ˆ¤DfPÌdSɘ6¿åd6 ÷+oÒhìjÓóY ‹šWâ45¯Œ&L™Zß,1@gÐÈÁ&V c ãu4ñãÍpÈKÏ«¢êè7x™‚d2$¶êÝ~*ÇŽHKÒPcrÊÚ¬(O¨• éšÔaT¡âx›’«ÆK<‘ ±ßé²Ë "àz‘Èïñpx›u¡ÿeÇ,$ƒä ¿¹f£É KE#¼ku@J9aËoõ·ëö[ó¯óV]è­9¡va,!›€w¡‡ Ü©ÿ •ävxÊ2ôz¶é¨újM>­2ñÂ9ÿÆhèéŒ{–r'á©EÈ—ª# ¶ÅjC{üGùòF¨°Â*îG–i∪ÉNq¨øPx~ÓFÕ?Í•Ämm“;ìÔ·_\ÔbºâüQDIÄõe^$©½~, cvACjM4w,j&° âMÈZmÈn´ÈÃÍ3îÝ8Ê£„\Z%­(~ ® _†»¶ÜZ¸'ö¦( Q(x„Êœ0ûaò‘“ƒ¡®þ‘»·CɘÆo‹ÝŠ˜äu+õ))-î#^R=¿¨RœÏP8ì8žya3;Za)éÒ4lxƒór•éÔuáöWüœ¨ï&Ñ´P—xô©£ñ³ŸE&”bµ`>Áo‹'@ʘoÂT,ä g¦Æ6–2C#>Æ1QÖ”Vÿ[-Ê*ÚáæŽ³[K8"8`oQÁ¯`r$Ú¡û?iÖʹÞYÞ㸠í-çI£nTV@ÈÛ|n¿©êük$ean¦–7câ·÷aA¨JíZ÷ G2ÆDgÕet†âUV€Fò8 у³eF[?ªÚÖVܵãÝ+qH•PÁƒÊX |<~ÓŽJøÿLÂd©C ÆöçëƆ ^~l cûl*wQɲDìͪ³:\ú蜣gô•‚¹r+ïÈvÈ“ÂĉŽ( Bì*‚iÇã4>ì2ž"w ´ë©¤Y”z|¶»¡âiý´øpÇ»­©=T'ke–4VwÑc,c€¯:ü u¯#Ëý\²<­®Cpº"}2I•Ž$%ª×‰~Ÿìºïþ®F\ÀL9,“ÑVqeLq9äç·%jÞ mü¸ó^‹.a¶ú…ÌQÆà rÂ"Õ+׌4%ê~òx~ÖQŒÝÑ uÛ놺€) ‚HåNÿËÛçiË-‚#NˆG¥]Õ”Ž,±0%Û•>°øõxüX2}AùŒ®'ˆ”B2"’K)R6¨ùÿ²\³/ÒXCêDj”¿!)ûýã$|$Æ%åO´¬~ÖCô¶e7/‚eiê 1uK‰}BˆÇÓéµy}¯„S+ÉΙbºc‘Hán̳Æì±)§Y‰öã_ ¼š¹—@U¸º¡ŠJ1q,A5~Ïo‡ö°Ë›ÈV ÎÜÑEl°¦bžnHä„¿%lãVŒ”ˆ¨BT)=>ÖÙ8ýLeô ÊD#ÉCäÒµ&@»Ó§ú§-j¶¢i¤¹•רr¦E r©è¿,‘!0G`°³DUЇaÛt¥Õï•Ë›dz UBÎÀ&òlzrjÔÿ«ß$M„Rœ‘¡º25$`åA¥8©´'ö²@±’„<ˆ±@éÄÜö í½ÈÉÄ(~ëê×fˆ#sHÁm÷#¢öZýŸò²G˜cТmÄb`‘È„3r‰¨H¯E¯N‡í6TN̓›SIlHuRK©BŪ xðÄ,4½£‰afcÅ”:Ä€Wì€â>ûå€îÔ[/ˆBÖJw¡$V»Ö¡vû?k%S(Z2ü³ ØØ.ûÓø,¢Mñ(káo,ðAÉ›ã#‚Ò„u“‘÷¦Ü~ÖY‘-yT`dúʳ!)ÄIÉè +TÔӢН“;6ŠÈdg·ŠgS1¬†$SRʼnvgÛíTðÂwPQ´cmÄ¢'ÂYiñ3pm—ü†ä~×ûªGÔÛ²­ÄDY4þ)ÍZx(½ÿk¾F;–RØ$…¶‘*¼89 K3Jx¯Â~ÍAÇ2a¼ƒA+ErÊ‘ H  xæ(j?o…7þ#€‹P±g‘fpc_Mc§ w ùW»}¡€¨ê¾I/ÞÂè¬Hx®ÁO"TSíæÆÆáwÙJA+Ýýnic"CõE§yoþQÿ…ÉžUÕˆç䀺Y;UÇ?PH|5a¸ î>Î Ù’a°TÓÙ}[UXý) òTRW~I#ß®Fc¥³‹Qs{eŽ"væj>C±â{ñÙW ±ææˆ5”®¿ 2#*¹+Š0ô ý¬ˆ;³­’´ŽVn*Õ¸r#èy€Hjäîrëß&¢ó0°;TꃭzFÛS!Œõer]imm#²³ñˆKw§ÅZ~Ïìäg-Ó쇶Ž1jÒq,&2u#á<†ÛþɦLØ¿ÿÔçQ7©nÕœ)–5™Ö¥á<ðÞ3±ÎTÿÄõ”c,Q\ÛO, Æ9#‚]›ˆ;ÿ%XåqÜ%ÌX˜–àÇëÈÄn6$?ÉڸϒÇêæ™Mk1,•B’Égq2š ›Ó=·½Að·íd`v>î/µ–AËý*…»$–>’»FêÄ"ÐQ€aчò·íc+âDG¥OKŠ(î¯" ^ MU`ê\Q.µ¯·ÙÉÈÜAÿ5HDjM ^ÚȥɄÉœ6*d‡àoõC®ë•ã<ÿIl˜ä¥ ÆCÝ…fBâOHVŸ½?Ç×ã±’é_æµõ´QL¯¨z2ЀN1­±ƒì…èßÍñe’ð’:±Œw(û«ÉN+FŒP€dˆ@:|_aOÅ•ÊÁÛ£8Q ø’èòI`¢²ïö¼×,Œè°œoÉ5kY&¤Fš-ÝII†î ÿÃeѦÀ,Z•ÜÒ<«ürFª‡Jéö¼yÙå„ Â åºgfV¬/•ROÛR„íÒ«\2äˆ÷,Òœ±Žê2§Ôwä¨ÐR‡Çì+¹cͽJwK”uv ‰Ø…oƒòii20锺/†cws$åÕ^x„²KlàåZ62·qX›6¥õ¦29bY q"±ª…øOT|-ÿ–Q«èZÕoUÌÆç”<A<…x[ç¾U ¶Êè!%1<÷#“4 "Õ­R´ë¿‡,ä{Wzc!¸6U†­)Œ)‘êÃqBƦS8¾mÄúR«U 8H—’¨Òjȃ_Óö²òhš_yêÍ4®Ñ¨%™#’¢Œzl;P`€¡ÍeÍtN%,Ѻ„bŠnƒ€?¥|pI ÙÁ|_½qF¦ÌXŽ ¡OPò©µ·q¶Š6%XÐH@Þ¤ÔQzq 7?µ‘[)lbÌòL±bQ/ð’ÊOÄ7þn›/ÙÉÈTwDNë ˜É,±M%쪴gˆmØrâø˜Õ1rŠú±1™åjöN«ÅÈcáÿ‚ÊúìØ¨=#9¢´vŽîF* R)÷øl4‹n¦(דÕAV¢´áQÿ'M“{îÑŒz²ñoŒC-Ž@q¥9!Þ ‡uòI¥[ÂEäIêñ•…$ßâàV¤|‹`ˆØ¦\Œϳ@ܧÆûš£ˆ ¯Ùbi„”$žƒ…OZ Ç~u}ΞÎY[±'zòL‡£&žêS’2òj«ZÇùYT‰¶q '~&n@1g£N‡ÆŸ³’‰rpIÆX©Œ0­6f;Ö½6ðÂw@oë?xŨX«Ž´ÒŸÓ i3,S%Z"}ú ˆðÆ\Ö=PâV’2„²³·)Ô\~Hë·Ú:ÝŠ«úê³HÀF* ’µì‡ D!œ‡ÙÙä?ÂiZ~#$?B5bîÞœ=# =XÿšŸf‡§Åƒ—½<Êd‹éXNéö““šRµ4]«Ûü¬¤ï*m"—%¸‘£o†¢e,kRáG†^bhRÔ9xùüÖ®Õ À)ê½d«€”ÇÍ=!^§§Ê2~‚IááOÛ?åd ±^löYvâKhRÓøË9®ÎÜõ)lç´eXÚ{‰$ñ‰y"´­ð\*·f§§*°ùX‰l”‚Žè€ÐÔ”‘J•%GBˆý¬9 ÒâZ5šÛPÒâwŒ‹›rÖî¡H¯ÚeZ¤­xdƒ¿Vfˆ®ä¯Dk´œíO¢Y÷¨o‰Xö÷ýœ³!¿óš¡¶ÝÈëT ³[9tuna6 ÁK¸ûJ¿³Ëìä,lYw jê×°Ä=D’ t!ÇQBÉø_ýŽXy°,€Ô8šÞaô™=N¨üÓ¬cä<e¿ÉÊ¢v!²}ᶉ®£1,mÌ´d³_†«ÉAÙÐ7ÚÉ@bÿ-Uà |Pµ]†õ© e5 1“ƒ$䘥žX™`ž0ª£â§^b½èMÈÖû²”$¼f²õâxRngp#'Žáº·ó á£Ldot©4jf6F6·DÃ9§ ÌYwo_ø º‘þÉ®D‹¸¸¹‚4ô”‰Z0ÍÅy‚¤ >ÚþÐ|¤Q%™Ú(¤¸hôúr$ÇÅãz¦”­A¶ÙY¦ÈЊµ—KíÙãõÛ£w§v;·ùYoâk¿JO©,l4QÅú<… x±¥7z‡—ú™!ɉæÜ>¢-Ãz­^. IR»±ãö[â¢äIØ@n‡”‘d%äe+éoE%Aê+ó0;˜"­›ë1'œJ‡Ñ^ž˜ï×Ãì.FTD˜j õh-Š×‹ãÔqM«ÜuÙr¬@H›mÈH O+‰#õœVô£RG@Õ¯-ªçíWýŽ^@ Q1"ÒTsDVµ¡,ÌGÞÃþ K ;եРR_SAâÛšzŸë0ë3ðIWi¥dd¤RéOÙ* 0^Ç«7ùYÈÊÍR2Êa™Ì^°ŽH‰éöéOöX1ŸUÿ5œ¹WzÒ.Ìdz`ª´ª8:Ð(ɆíGtÆÖÞU°¹.˜„ECAa© ,?½¨*8’{w¦K&ða ¤Öª÷hè¥UZI™£Oƒ… 5®Á–¸á™e&Ó¤RšA–4iAˆ8P°>ü'qL¢]6ãúRø¥2¤š•€É ûTïQ™5{4SVèÞª@Ž«°‘U[¥•ØT1®; XO®îFÈO'Qñ4^ x Æw$”îÞON ñG%MH¢ª«ò>8aÍä–rgRÅëQˆÜªu>à×/ =VÙȦF ¿½FØ1N¦•ï„ò´åx•Å#+“V-°ë\„¹³”câî„)f%‹œ˜šíàØmHSž?IáUcGqö—ˆ>=ãl”PB[+ÒG¬ut±­‘ñ°™>Ê,EE¨ óûMö²Dî}èØîÿÕæµ[[9IéI(JŠ€…(ǯ Y¾,幓îzŽA0¸ú´°"–µ"“ðH«@èýVª7ûª7m²ªm.D—¢TPŠP¬ñ;´bŽûWÿ[ ätÙ'/5¼2TKðŠTþ8›´µ4ÈÌr%˜&ÈTµåi³ƒPÕh@&¤EiöjFã úƒȬ…#¹ã}kRÐ_M©Hß~*ùö°½È#¢,OÊôÊ^>f €A„‘½Oˆ9A™–è+N+ê3,ÁžMú«PNßmÂÙ,€±EIn‘ýi•=6™¹\òaWÚ¨»ôéPØ8ÜšJ3:éÎÛ…·¾2T†Û…ùXMqé1ðŸèª] ORKz+Íny\L¬Áš;O_Øÿ'$eÈþ8¢¦<ÇãÔ©*ýYÒ’Ÿª¨1µ&¯ÈÜÍj¿úÙ ²{ÓÈå=[›€}2.ìjH5ïôãT‹PµhYG•Bˆ dæ‹û _°ê ]irSûìYIá<¢9#䫎JK7*­;²ý¬Œ‡rcÍ^úD71 B@àŠ8‚µˆ©éÈm‡{,Š6±Ãgr FcƒÐ"5!y€@ßö<¦ØãÑLJŠÕNR,¡Ñˆb*U¶jŠ…e²`lÀóDM X’}”¥yžZ >!Q¶SüM§éKmdÃpñ¡8æÛ–eo„ÁoþN_!È5Í;„I"!h£ Eâ§€d¡âÊ;·üK13îo ·‰*ŒÔ¬¬ª«ÔÛ,À×á_ÙþlœŽß±Ïâ†ä3Ž"’9áAÐèÛr2c“UÜÜÆ‘Ž—<¹Çġ֔û9lª‘3ÝO=Ô@7¬9¢™·¨Ø7@+Aþ®2ê réD4ÓâŒ|kPÛÓvm_‹)î ¥ ¢Û¼Ñïm4üùH9;4@ÄŠQiÿ—H|ÚÁù%ö¥çÓRYV…K:¨ø9zŽB÷åÍ—ö²r5*c²:Þbñ9¯y–5,"! öâß³Ë*û™‚¨#f¢%BÒ¡DŒI SöÆFú­"ˆ¼-G‘ã4;·ì6iðäÈd^Ö¹QÅÔv¬hÏj²H@'Ôp&a_òºä-¿œÌy÷*H—àp@#*}a·&ñohdTdB¼@§'Œ¹SÐscJûä…±*2ÏöbŽ’P-T£R¡@¯/ò¿—íe‘º`iÍVÍ•¥ãû ·TÛa•mœNÈ)]DŒêAA ”&†½I9`5’²C+£V§"=Ž€¬JÍXþÑNÕìǧLbȵnR;{…"„ý—m÷ðýx%Í#ªŠÒ«ð³€Ü€å°Aè)ZeŒÌÞ²–¨,á£Vî)½?ÕÊÃ2²(ådä¿ Â7©*G*+{å\“BÄÆÑû¹ùRFøXnWèÈ^ìëdÎEŒÛ4jàÇÄ+n8ì7 Sñ¿ëe}YÞÉ`FYˆÕYÄ`™6rw‡Ž]ѫܬ¬ÑEHéé+¨¿jƒù¼NE´U¿­·çÄ0Èãt¨,ì7äßF[QÜ!.#äjÌmR „…cãO‡,‹:ê+½$D‹ÅÙ¿pÎÔ"hIwí$uÿÊã‡$}KéW¶‘>¶.UƒÁq £3-æ¿ä0¡_ò±ôÒ¨=VÞâÕÄŠÿ¼ x¥§ËZ+|&‡p¼› rEp•ãŽÒð(wBÈ€íÊŠßíq¯Ç ìuº/O¾M<ÊJÝ)NjH!ÐÖ"‡ 1µü¬Ü ”—44âý]«™W~%£!hÚÛþ '×"€1óP#`vâ² ¨Eön´.*cMɉøñ<ªôéðÃù$thðÇÉ(â«1n'Àí•ÌÛ8ì—G_Ñ𰯪ì!o´ÊK9¯ºÒ¼²Úõ–»ô…á\\H«  raÅTÿ-á´u¦âŽæk‰LmèÅ.›Þ”câÄ·ó}¬Z%n‘ú0Tj–(¢•ïJ|?êå2;·D!u99^… c.ŒÒ€xµ±nz~Ïìå°äXd胖I4y^«ÑÀ5ByS‘¯òþÑþ\•^Ì8«w4h·1[M‘Áwaöy>äŸõ¿—'È1êš\4.R!0 @­^¬#Zqå¶c×W"ív¦$™íÕ™@ $¤²’Ç¢·o³·ù8ƒK!²MtäTžZ\B²ÍSº­ÛöظËÇRÓäÜE.#+¬“-ÈSàOÚ 4äEpHRÝ9 $VFÁŒEcƤU¾ÈíËùWÍIÙÙDñ˜î* ü'•;ð=²ÉsÛ“”î’5Hae”±øg5mÄ«U ¯ù?k$²‚6Ë¡è5¨µejñ)¿¯T<ŽSwvÚHBI ¤ÈªYǯ2ò7îÏ/aÿ ‘ÙVËõ—P±,U«±€ò=Њ?ì僓Yæ§©Cq¬®}Ew!j>LcB8|°c!œ‚Ø0’ TFŠŽ£á%z±¨öˆÃ-Ábá<·1Á(çU%}B¢¿»}Á+û*ÔøN1Y(ÞK9jÄ0FVŸ5à¿…1€I¢¡#¬~œ-WÚ% ½5 4ß'Nì%CgÿÖ€Z2…2FBºXž%9)­fŒ§ýŽrvAÿ5êö#âŠ?X"©’9}hXÐTW„R”ŽyX!™“V ,ñÚ*.c—ÓSÔJô 5;o’Ÿ3ÝL"9wÚ9ä†U”rDxI]ŠŠÓb:4G$©Ø¦6²Fb”á%,9©«É+ÐÉyo\„ÙCªœ0½™Š7?èÓ*‡ì (|8zã)qÆ#„!–.ž¢0i>Äÿ-xŸnC¥VKk¸ìf”ÉÍ£nqr5$(çÅ€û,«Ë'Ä kš=ý7W„¡.J•j– à#‰eB˜o²ÿg"l ¤?Õã“OoU·Á+0 H'訪ÿ•ˆ•N™UÆÐ÷D/ÔHªKFõ«ü¤”ô¤!$Pc(n)Z·ù#1‰EÈð¡­åæG·Ò~èìUözòÉÈlÖîŽÍ=H#â@,T íR{‘ûX ½6žéKÔ¶¸žW¹y#T,!‘5Ûì-;š|9*¡H&ÎèÛ$­ @¬ñ– P½ìä rLAtós‡ˆ˜¢`‰>>D\oN ·Å\E”¹(Èè–“©fN¡“Fg`iü¿´rÀl†=VÓÁ Ìh~u•ÕÈfV¨E¡øýœ”¢lûØ‚ {‘€ÛCol'ï@å"2š’Ô»ÿÂåSðôÈÙmóp¹È‘ â@ø8’ÄП‡âÊÆöžˆD‘Z8£a/uK°#ßíd¤7DU#Ejb7 UÞ´]ɦç$s[0"XØ? rädñïÞ¹ÊE)´•]›”$qP †ÿ|nÇ¢c a«·2ꥉaCÉ·=|)ñeCr[Áx õXù˜ÎT×z¯*|¾,'¯DD!áš¹i¹ŸL! $Ðtø¸ŸÙ¦'•(ï[j±¼Å¦¥8’PôÍ=¶ÆHš.‰µUbh$gä £“ðžÇçüØív»Õ µ –‚;„o„ú5RÊÆ'ý¡]·,¹f=ä‰ltv{w¼AµyG±'Ôªz²ßìpäTÆ\¦$ƒP—>œÛБŜh Š ‡-þÖ×}^ôÞyãN~@*Ç#PËyûqø×ý–Q ‹|·-*;ˆ¢ž *ÞœêÐ V>%‰#ÄwËrt-pêšhIbÇÓ0ÐUyý¥O¦†Ÿð8Ùî©*KO_P‘Pë"†#“„mðÔŠ`á,À°¨·]Æ#VãûâiBC(Wë·ÙûXxJ8¬%,÷^˜žZ,‘È$¨<Šñ`a¿*|C."Ͻ¬äüñ›Õ¡'Š—¢ÐU'~Kÿ˜±Û›E¥fI!»…£ Î'—„SéÅÿg-#ÒZ£ÍsÊ“T¯@ëC»+v¡Û#Ri%ÿ@5F2‚®Ž†›Íz…_´¸G?$³® ä Ô-_Q—â4e ƒ‰v;ŒcÐ"A ¨Q¬â0«Í#Ô&•¿”¡ÿ)2È,&›¯¬ObªXúeÊÖ•¨ñ§üR>­ÛyÅÊNšÄ?¦+Ì0¨? h|HÞ€ýI‰¨©\r[h …~) @¡ 6ûC}°eNÑCú1¢3…ÁnKðÔþιi,)NU™È~ÌkG·FzSöp ¥<×LªÐÚgõdb¼hOÉê)×ü¯òpÍ$rEܪýnN.ÊeU‘ØîBŠûÿƸ#É2¾ùáß›Ô*r;2–Sñ{9¨cG`¼ £•ÚQÈ;9ôâ ·Â)]‡uÿ+%{±­›†ž ±2;Ð5BNÛŸaö²7¿¹@Ù,‚H½UÊI¡SÄÐ’?›Ä 1)²¦9Ç(ç–Œ¼­$PÐ-?Ôåˆ)Tžh)q!ˆ¯Ù ¶çqøäæYؤ4AdŒ"Ž,‰Bý äiû~ÿµ†Vâ9HkI:g l@¡÷ë‘êÈrj(Õ­ÌŒA&@?e¸¸jÿ­ðõÄÓ.H[–…Àg àI-ö©‡ñÉ&ë ©¢†ââÞzÉ-¹I» ;ï܇âÁ.IÔˆ¹žÞ1U ÌÇrJ•¡ ¼r±m„ŠC:Æ#g‰+Ä7`jï໌ŸV³²­Ü)ªH}F)±—VŽdR•4ÄÄðß½D…©ÌYd€Æ8îT ×—#P+ü˜cËà³;©z2ËpÂ(y#QÈ4rßbµÿcɲE€Q¸™ÿC â#ŽiÞ•’ºô$jÿ²Çøþ ¿…u³Ü&¨²Æ”…9Ô 0%Û×oæþ\œ¾ÚÇ4RDë©Û <«"žíÜÐå?À[¥´”î]'¾(O'péGïðíþÇF‚rÑ÷V²¦"³,eÕª{ã×zöuÿe•“sXKzÇgeb#'‹/ÙŽŽŸðør‘Œzš‹²IÂâ1H}U%Hâ9=w5ðøÆUK”îm8¸€M¦ªFà¯YŠq­C{eRmJPñAöì]·p:`·ù<ˆÌ«¶ŽK↠æRÁž×÷˜íEfÞ›8pZ)5xÇÏÔnoé‹v«Ñ¶è@ޙܒ¡p\ÂK1 û*k_Ú¡;SÙÄì³KPD3VŽ’GíÓÆ›/ófAÝu“«¸aXƒÄëñoE©#âû@×¶H±ugÛ‘Þ¦†„ñ檽Êé²Ô¬Šü ¨ U$ÉáNçþ#’—5è¡vê²:¨:~ÈþV¨þ(°’&AG*RZDÉîQN‹üØMÒpàÀª}ORRÌZœªÄŠPtâÇáÄõH莎9ŒOÈòXZ¬à‚92qVï^#þ!#»(ÚXÍoš¬áÓ‘Y$Q±4,XWØe‡s*aÐ(É4¿V™Ø’Ìh 7ÃR(G]ÊÔäÀÀ•ðÊIÍͬƤÑö­/nDcJJkl!IG ¬ŠDn!Q_´ÕëÐå*ÍrnÇuºö2n xÑVåDu¦ü½²xþ“ïFN`ù í})e/$t‚Ë9Py0_‹—°÷lŸ*jçj–ne»äû3,‚•øˆ'¶ËöÛìá$îš“&ÉéV‘)ä¢%Jp Ð>Õ{eòn‚ ^¹Ih@‚9yB|(¨>ï ž1¾èÉÊ‚‹É« zMÆíöŽÇ‘$žˆÜ+ðüYmú<í«ªÔi “"”a°hÀã騯ó‚µÄ×D}êb8±C(V¬'šuV"”W?³×í}œ³¸bH곓z, œ“?Fäô«æTAÛ FþK{)˜ÚE d¢Ýyq>«šPø{áh¤ÒU’9$ŒpP©É90ä[eâIÛáé·íe#½¸÷([ÌâKHÑSH܈ •ØŠŸæÄŽg¹# k÷Òj‹4µ–6Œ ¬>j´väÄôý¥ËeUA¬s_«J¯Hú(ÃÔ¦¾Ôñ®UŒnÎFÒû6{è° ªvøD·¾Y/¦ØŽh«˜å—7çêH¦d¯A(B~ÅJüX"ÖA©ê1£D°P:Ë*òÞ¿û](˜ã4m”¨…®ñÜz‹þéc!Îä©SÅ:ôn9 j˜K{ÿ×çñs窈ıÇ(…AaðÑM>ËPŸò³“?sÕ_Ú­<—â#÷€ú[ž¨}¸åp‘üEœî”íÖòD–Ât *~2Ld×q·²\ò`zŒ›îHPÅz=`( D•Û®äò50Ï <_ÖUÒ Ýö“èm,ÖaàŒ³/7ü`·.@0åû8æ¾ÿRqÙ´hÚ“t¼jUr öû4dJ¶¥²K±–Yšk{È™«ÆT~@«Sì:2²Œ™–þðLJoŠû Z+¯QÙå,¬ñI)Ɔ´ÛîÀNÁ1ŽåuÌ Ì®e”Àê²A#sQþÉ ŸæØäD¬&QÜ¿K\ ã%Ñž>V`y¡Ø xþÊã‘ÉaNèé'%Zû{ÐÐб«ÔüK’$– MôÀ j(=ÐÇ:1à8©¢7ÓÓs·®|Û"—ÞT}]㌙"cû冚ו~Òòûy‘}ÝZ+e£ÔkÈçŠ0í,-ÆA_M‘¾vSAö²³ô¶êušÌQ’rÇ©$jòî~3äÆ?R­Ðhn˜ˆÊ»Š"¶?]…|?g+&É=Í« mÕƒ‚GZ ;{ S–YMmª—º@ÃÆoݲDGP}¹£.NÅù1éæšjn>¦Â-éY$›“1‘IIÓoõro`ÚFÛ¤ö³IÉ;¨ JøH¥;Ô|²r‡{X)”,ïoe'0 ³<Ž TRz‚ÔÕr™Ë|9 !ÒÕÃ3¹d|U©*›õå’ÉʘcçhεijÉð†aÆ hÔ^‚âÊÏ@Ø:”©T³ººÑ=Pý(E:õ®]úš 6 "R-¤@ÍZ“Û(G]Û+œƒl#j«m¬¨“»úˆ@Ø…MhJž¹(¹Œ·¡æí@*$‘Â~¬Ãq8jܨ£ ö@j©üÙ,{‘h—UY ’YQLÓÁé—™…*Žwb~žE?e°qVþõ¶å1K}4€¼¸-Ñ@ ÜŠô¥NW¤Dz­3(šEYQ‰B­ÀªüEÕh@­n8a~ H¥'›ÔŽ4‰Š % !ü1äÞy ÀºØÊÜÕ¥-È•âw«:a*¡? wü«†]QÉ©³AjÒ…  ÈOvL”#f˜‚e¥J*¹>ƒ2½i²¤‹]ý¹eræÙJWrIk~Îñ‚ EOÂiÓÜ+/ÀÕÆÂÌQÙ ‰ïÛšqŠà™“zñ,<=·Ë y†ÅxÃqö¡‹ÓpFÔû,ÄW¯VÊy³_=¬A ”äºKéò5BÆÄ´Ücü¬˜Üדä‡ôѾµÄ|7Jžžj:oü¿êà%§+In´OÞú`uä> )Sý~Ë6 sLPö–òI ðÁY¨#¯MEw³û8I±eº‡§%”°ˆÏ¨cY`” zÔÛþ#’…¢H‚¤i¼Ü´’ð …·Ø T¿.tÿc•©œ~•’•k/P ô4Ûñé$ÜTîƒýM±ª§ì†ÙVŸdQ²QÞL%ô«–È ¤q9Ô„nG ŠYUw 1'·V®R~–î¨a 5ú ÉXáøÖwâ»ëñmÿ ’'¹…50¬R`Àò‘ÙØô4߈ý¬ Ž$áuÊ  «°ND*'Ú Ž]Î0&½ë=š³M+žL*ܨB-BÒ§âß$aɈ;«5©·´FwäÈ«ð³É+ùtqæžA¸™nÃÉU áH!oÚ÷³‚F¶ ´ޘŒ4`ÔÂÙ*•©w©Ú¿Í‘­ÓÑIm¢ŠÕà dVæ+û Ÿ‹¨¦ø8¬£†‚.¢kŒ·ÅÈ–n»“Z’çn™ÙÀmJ)2ÅjYÁe$*ÄÙ4¯#°ë‰æ·²‹ÈÿU˜=e?Ê^ŠHRà}9.æ óGBO¡ÈêÇÉ"4ýšWX$‘ÍlÍ4¶ÑÉüqÄœ_p¨X÷>¶Dl&—„$À1==5 VÞ¼ú¶HîÃ’GšÞ=M­×‹ÛÈŠ‡ÄwbH^_=¹|\rÌ›†0 QW“w›—©9%÷Jµ_‹öwû9\y|Oš œŠf”¸,ÊiVSîÃfµ“«,/fùзçŸ)#FûU;‹Ú­ËlOÖ=-[-.c`CÇèêT“ð©Z0¯ÚÚ†gÒÆ#tÊÑš}Z''÷‹éŠ‘º€•B*k·\¤mé šö>¥$lGÖ=@Ï( $öÉùŠšå‘úXdܦ:Œ±þ‹œHO)ypä6á#lw£‹”Âø™íKô2Hx}ÈZ(Ø­„µ ÇýlsråÕ¹üÓÜLLàžÌÂ0° OÙ~4Ë" 2ÓÙ„£úhŠêñªq¥¹ ÐN#þiÊ+ÖÛ¥ s*ýYPñ®±F„×Ó±Aï_Êwžj’-ÂÅ# ŹÜ#†çÊ«Üì¿ì²²6d k$°¼‰ ¸V-ñב&ä¾§)ªo»(â…] Õ>Еå³oÛ‹'=É|U &VBX­~Ï쌸8ûª²Èe÷‹n”™*jÕè8à“Õ|ÏÈ;°,ñFÊ\ìO*Nܶà•©QDú‡EäÕ#‘é_“öplÏ%·jŃ(ã"/¨Ú”û[õ?Ì2Qa$+H"¤<UÊnµûòCf œEÈ•æcU5p©ö©ó§ÙÄóø2µÊP´]!RYH+ÈŠíCN[by¨¹*Ä!ê ªHõEžÜPx`Žö™rU*ÔY$ådŠÓ…îÛö§ìäî‹_5Ö°ñ‚Cîd<þV4‰Gnƒâ®Hîc¹Lã ¬ ,I(e# âxž†ŒÙf1r$«RuK‘I" iB‰åÈõø©QÇ.‡ÒÇ"È8ÛhÄÍqJÛ€­ñ|•V¿Í„oðkä©k$PÔzGÔBÊ9qØÜü8`h¹Dµ½L¨x5£:údŠ«ÈšoÈ7À?g.‘°<Ú«rßÕBZÚ<¡¤¬DJ£pÌÌÀT^'à;ý¬ó®ôÖ ¦ÞîC4Fdä-â’ª*¦Žê)Ýcü¿N˜HQP•Dó@•[t·‚I'êI,ÛGó¡ªá‰ {íd:-Óñ,ŒeR§bJöðø~3ú}ëhùa…YÙeæÄ AZñ^$Šx¬vû-• Ç&Óïw¤?JÛn Ø5ÁˆÖçl°Mg‘ÿÐç(•ŽÚF†)½„ÐôeÀ3Ê÷ù½B:æÝýOH58¹˜Me„îÚÿ‚Êâ~öÙ)éªÍ)åF¡ŽXÔµ(äqtrËü«‡ Ù¯éýÌ&U†³a½Z7r(AêÈNU¿õœ‰›ÕRÑä†ÓÔqÎ0¬“ÄÔ©`ÔRTïö©ñWö²Y7¯ô­xÈ«jVƒQ’h@’'/Ê)ð9;¯ìŸˆýŒcÉ2ú¶Eé¶"åu Z™$Žê^ªÇ„„ÜFqþNFf¨ùð¬6?œ8’_TC¨G Q$we–âðׯ™eÆêA=úÄ76Ï úëwŽZ±á¡Ø¯ï>¬l|™ÝŠê§b¯ ¦î?ܲqxÞƒˆ ’:1ñÿ'%““{&¢åd‘‚,1OIV/٦߻þEn¼r0L×'“N ¬ÜÑšHš”j€Š*¿ÿ”¸IÝb R$ŠY22»R QÅ>!óŽkf'{(mc¼|B)Ú$”ŽJ”|&µßùryGwPÇûÕ¡žiµ) ¯ïJ«È„š5>€û*r$zwãY<²ÜÜÈ" Æûa ‰ïÉkƃ)ÊÑ‚åxÛÐF(bOV, Hë’"Ä‘h9ǧ8–6-'ª‚:=|kß/’%ÞŠ¼§ÔmÃ1 Fb 9­)ÈøoÅ2›2vJ¢•ViJ?rTz‚¥¶à£îø†ZwjºM⌥´ TR+Y(z³ 0?.^LùŸxnÙ¢«G©*Fæ±þñ˜ ËÒœIûòYw‹cÔÃo<’+$­Tlªåök+#ƒj ’+AEweW¬å¨[n”éÉ‚Hj;ÎÂt–ΰG=>Ú´@”ÞR¼Kø„ñÑg ØB3<7¦9ZÛ"ñ^#ìº÷ëL=6þ%½ï¹NâÞ9ÞÚ)Ï$ƒáRM\)r«nâ¦O«þ«\£uïLí'™cš{PÖª-H5¢€wö+ÇŽQ3зGÉBÖÕ…Ô Ç”¬Àº®ßh‚w;’±ðaKnä—ÒN2f™‘CR†¦¾ 4ëðÓ%¥Tiæå~®Ž‰df?dÉéÊ‚Š•‚2¡e'žÉ„z¢(Q’)ÞfæhâÙ ]†D’íJ{¨jZ2 õ `¡ÕCFG#Ü7ú¸òINä{”¹Hú€28‘eg/-Aä¼kO‡Å6ÿ' nPBVÚÄÂ…íœI¸â(*k±Z…§íå X>ö¹Ò&´õ``êåœÇB¬”P8Ðÿ/ódIÝ”FÅ ª#‘‰jÆà÷ØšƒQúŽ>HSV¹o€ru`;5Aê~ì’ÏÆÚI(ä2‘¸GôÁ[²µU‘]˜·¤Ô5 QP7ÉL1(`V2„F‰šVïÇ•Ýí‰Ü*Ûí¦RÎ--Ö£o‹çˆRºy[Æ®<ã§^ V­7ܶDŽlV»äå‚¥RIB1#c^ôê8ûàtȯ¶¥Ò¨%ˆ*Ú¡_½zô®3è˜m´1HÓ—.@4¬y( j~CpYmH@…$v‘AédQƒÜ“þË–][4Ú:_Kƒ+‘!ˆ ˜t,à# µO±ðäßÅ…‘H·<˜¬¡ª´<W—Šòå¶H¶ËyHVbȬ¡ê(åñ¦íû8gÉæ£¹@Ò…`õ­EØw26%î­v±Ãqê(õÇ*€Nä8öë•ÇqLå@ÚÛVŽI ë UTnYj)¹û,£þ R›wƒ‹î ò¯bhC),dŽH}" ŪڽVhC‹fåF•dB ûUssµÆ:#õGµ[–EQ"«¿x‚Ô zU~/µ•ÀѦSÜZQŰ¹ŠR ˜‘€<—‹nµù7L¼ãékXü}I½ôàúl±€ÉI#nåEC!j~ÏfÊ Û6íˆ6ÒF•ãc0Û÷JÔO<_ ú¨±«Š„ß3D~ É *|M¿JƒþËLŠ¥²´P0 Á”ž$= °Ûþ ýl‰æ‘É.„I"ärV ’d'pô¡£{e„nÖMq;.›û<'4cºŽÔj½TäG6|ÂɱÔâ¤râh{u¡µ„ǯ›•÷— ‰h 1,ŠYiV …EküØ ,²™ôªÝ…¨Îx–#ÒÞ¤’ÔbHû;ãêD¤)\úq‰c$m)Ž  2¨'—ßÐáæm‚Ù^þîD y: (ìÃèÃ#·5ˆÝu{¹$—”bÕV¢® øiÓcF®W6e²þä40–Gô€HâibÚ¤qÛâ?ð¹8šäwDÜ8– xÏÃ;zŒ ›{TWÄdMÛ1TÕÔ#Ô^È‹'*±f$ÒžØ"%!l¢¡d$Hf¬·D«T–¡=úñˤÔÁ`OÄ;¯Z.WA”ù©Áè5©!•IQXoZâi×Û$9£¢»´–’$Œ è+Ä_ˆŸò‰øq&¦‘¼\’VDXèPÅ0S^%]+ûC¯|'“­g5uä‰V‰TV~ŽTÖ‡é;å'è¶Ó\hYeŠ-Rå¢,D`4JFåw§µÈÙËb."ØOb‰‘-…2™ayhÇû÷âKõø²ñ2QDè4Ži¢sY”T؆ yÔn¶G?%ÅÍ/¹’F™Ô‰éúÁè +r+¿ò¯/Ùÿe’ˆ\…7¹7¢¨©"´©ïQ\§øé¶E¥R~îÝÝ¢¬{5X¬Ô¥:‹ù²øîÓ!JÖ¬„DQIû‚§årHM½d}…‹Ð‚¼ª7¦ãÄü?äå èI–E¸¹¡ îZ-è—Mÿ›%MxöêÎc¸B¯RÕ^Ùx:ØšYdäàÑWÒ@Iª“‡¢Žj÷3ÆÐÌ˼Oð; |;S©î)ˆÝš÷ŠXE ’ª‘µ(J¶ý{ „M³!/”,¯ÊÆÌÌ#B}:­~M–‚× „T2WŠ«a^­¹Ø|Èɘh‰Äh±E)?hª݉ @bµÖÄ$®¹2<Çú$†1#sFZòGÚÄW»ýë+ô¨êNír±B ¨VŸdð ÚÇÛuÉÍ +qIÁJú‘W?4þQ“v´T.!‚Ü|ì¯&܃–'u䎵3Jª ¤’’HP½zðùD†ÖÝÑ,½y¤¾dŽA,`¬gáäT©ÜTuF¯ÃÇü¬²ÂÆ|Û¼Qõ™#§&iR4§Äz{(Û|œ.¾ rçñ_+~¬=GVf*ájÎ*¥”î7þ_²«‡G2šò‰¥Ë鬻¨D€ nsœ”›Tç ¼ùxÓŒdüd»š'-ˆ¶©‘Ä'³(ÙAÅ!ê€[jüKÝrRر«µ³õ ò o –?³é·zŸ‹y©;ù)ZGÚtÉ*ƒssvR5²w?óvJFº,c¸ø¨º€nÑ•c—œ¼¨*È䂈ÝÙá²b¶ø ’´0²ýˆ!Jz‘þ×M)M÷ÿ‚ã‘«e Ô¥1Ã\ƒ«Üˆýq# %?ÉÆ÷®äÒ× ŠæéÛÕ’#‚T–&ƒr~tlAº$s(;8f3À (ó‘À¢šÒ€ïöFNd5Æí5IâŠÜ²ž1Päðï·¥†NôLWÆ=AÞÒG:—ä„r䦿M+ÓùydO$ž{+@lîo$xá·¹F$€šJ /mÕ›–ì+¹›A9;ÈŸ·¥!mÍ)ð¶þã‰À”bz¶št¤:‹ë ,èò^ÿb¿5r7Ü£h졲[ ¨×———û”© ãTb8ýœ‘–Ê%„iê]¤µ>© ªMRŠ)% ÓzaÉÈ汀܅H~º®Žôe µ7=Í{ýŸŒÅGÔ±…ó¤Ñ–‰y4'á +‡Ák%[§™FXÜÜI§]Z>…à +â8¹ø¸'&¬uÿ+ —¡Þˆ‹(ue‰^… ÊŠQ€ ªôÞ¸"çôÚÎÖ ¬rY**9òªø|_ðY̧¢Œ°Áùà”P*«]Ï>dÐäÈܱeKI‹ZÜ<•f[J:‚ÎQž¦•~\‡!‚Q =é6í¹R„G%­AüŸÚÿ+ìã?§s²`7EIJ´ XFÏð“¿ÃZÐþWÅ”H‹mˆ4Ž(8Æd&hVF‰Þ¡LŒÇ¢°øFZ –²6%bcú´Ñðäg'"8"ª|TìGÆßådgÞÊ$rZ‘úÑ§Ö %¬JÑIrA÷ÿ…ÀO/ôÌ›ú­/¬ä½6‹Ô˜\¯@Ü(TŸÚå\c-uÙròU±ÿGÒ,èF¿  îÝ“•*Ø$.éAÝb8[¦P¬ÑÇäpãAλ—•1 U^ æä9PÇ—AËWÇõäAÌÖ–‚D¹‘]x;úIZ}–ûdöNNªƒ_Kl$&úöÖ8xCo#Ânj/µôa™ä|“Ì+ÞFß\çÅÈਠž²1r#ùi”ÄìÛ ±£iê  @˜ZtåÒ£&íG’ˆ·t·F؉·dêû2šþV-ÊðìŒcKiRŠÍñqn ”ü U†QäRÓÈGEpZ0¾£u%·¥+Ö•Éõ`·ˆTHÙj@^äÕI¯¾6ª({F2}¤`9§ïÄsI丼­§¢Ê@ôkÆ‚›7Åñx’OÃ\”ŽôÄE hí¸ÄmˉTÐöÿ†ÈôJ"C·2I¸Œ` AVž>¥o5SRçÖ ¨¦Äòûehù8)•ìºA$œê‰²®ÇZüGµHÉlÇš­«¢ÙÍ,‚*A© ¾Ôïʹ 3‰ J»³=¹JzaT05®äw¯b:ä žˆ@üG0¨ %aSRl¼I4ß'Í%Ñ*zPz\hÀºh[Ó©ÝHÙ_öíbvG’Ä’EempzÒLÒËÄ¢ËöU»t`7!2;[¡yRâwZ™#㸂>*ø °ËXÔZ/Nc*"ñ}À­T£¯ WùzdØܬLD¡½i¤ž ‰©C¸§ü6S ›§EN+1gyIÓ©€š‚U@¯ÚâOüLÊí€J²À`*K§ޙ쬤ËèÁvµHM:À5ÝÐYI­§Â€üëR8᜶éV#r›FVêDu%jí®Õ§  î ßTv,ØùÖÐÉG1‚¬TðcZ£7®Ù“{{En™ ™­]šBðñ› }žÿRe®¶q„<ÜRkʵÝj?ÉßÂ`U$ô‘ʸÏí𠂃‰=+ö›IèÜq1[…JúÀŽ,¬;¡cOšŒIäThVQ b7AÆ £qAÖ´\‘æÄ¦x¢É_Óù Ju Ã[¯@º ÆU…[âü Ó£Pûű</C¼kÀŽl´T?¯0 ü¹­ƒÉɸ_«Kñ[²ðgu©,(»u¥~q"w+.A¬q$´ nϱcɸñâ»øŽœ†'š&ác *OªìB‘·îì5e$ÐD!«4P³»3¬³­7¨hE)LJ¿µìÉè†Ô/-Ç6'Š£…4Jßð^#ör{Mc}ÑbX–PjÏ3V5=&¤þÈß#[“ÜÎèë™y¤rñRQªAøˆ^”!«û8"wY S8Hš9x‘ÈzûT–Z|"Ÿµ¾N"÷c"¾ádA:ݤ”ºµü2z²lB2I¿PJß²ïñdbS1º’Û‘tÄ*³ª b†SPô¢ ÷£QrA9 BPµGÃ`­ËnÝ~ÏÚÁüIÒ¥>—ïbâYa–TDb”n$õ©ÿc“æ+͈آ-Æöªk$Óu’üB’T¸øºòÊÈôØO¨É!k¹Y”¯ x"q­B Ø×c†‚'Í}÷#¤ú²£$ÌÚ°£EIþËlËþV˜‰œGÁÉwøküµÆ©gÍZwŒ'Œ¢¥¶ ó¨®ÿä¯ü6XЬÑ|‚±ªZÆÒ'Š–&ª¤¿üD™‘¿¹7YæYšÝ$Š9Èu±]öý“Ë|Ç—+o:IQæŽè8gX¢•ÿtÃ÷”¥+ ýÛü>ždí^M$ïkfdãÂÜ‘™,ÏÎmÑM~צ¨9Ÿö8@ïb|•,&zÉ0^.c +µ\mV£ÿ×9,ƒm‘-4- c*ÒÜÜ 4Qvd†bÆ€õû9"K|k¢SsèÁwêI oY‚„àß5§"e·òuKuHUqR$éA&¼øWãoø–JÁ²îfW" ŽS¨yldâwßözá¡K¦y[Pñ$ˆ¯ðÔ! >*íÉ÷ÿ'$v±æŒ¸úÂÙÈħ¨À‚5 ûòr­·¢ c·†§Tª¿f©©úGü6LnKòS··•æž2ü"QË‚íË~¼h;å³äÕ{· ’&§+™KÇÄ¥m”ÒˆÁ¤3–Å/OVk(^*èÇÒ~D{Sǯìý½ògcA¬ ÿÒG õ.¹«1”FÎÃöJš0´'Läÿ…êúÚ&ä­Ûsˆ°š„“ÖUý–N= 2°Mf¶jÓÑk›€8ÉAÀÝ9Ž'½vaÏü–匯„,>§$áH2FVFPo‰»;÷ûHÉø±£Ñ:¦Ñ´1*ÉIèLY ÅþXËwªóÿ›Nl±ò´¨‰ë´ŽüYÍ&—p_oˆøuݲX÷¦3jñÈÉo=¼À<-)X® <’¡‚+_”Ó§/åÈgn¬ùnB.^Xä¤Xš9R¤š„⵪ü4—ö¾ÖA²iFúÝ"š;ëcI½(RXUIãA+á \6 ÷”UîrÜ» dÓ4Ð/§èÈ«Í#“ ¡¯:Á›íÀàä@=Sæn#(rÀ R9ÈIâí®ü‡ Ò$ˆ"2ÔZ!žico«ŠÊÇâde¥X!t¼²¼lŽÊUöSÍÿdõø~×ù<²$Ümj¥Kæ5ßÕ˜HøÛ¬cnnH«‡â¦1&“!ºûpɧ5“âi¾!¶3>Lb6AÞZÛ¥€š6 Òñ­H!pjôû'Ã%º%“{¨LËl ®ˆÈ ýß±?e2¸Ë9 /“ÖI§ƒ­Š%$»q©"E¨*¼rÓÏvKYÌR¸`@UŠ2Yˆá_ˆòÛàþ\„ºÀõ[n¾•¤ëûÓ7ŽZñˆž#Ûìã-ȾIŽÀ¢™˜X©‘8<’»p©âÁ]€ÜPÁdHõ|>Ÿ‹®í-Γª¤nÊD­Ä“¸´GúLJó.F3³nÒ»¬và±€š±e*/B͆"˜È’îåŠk¨bk€Ò<"g‡€Ò­þ|°Äп‚ËE„‡áNHQ€›º– àìÈ»œ@ J<•z¿¸<ÄŒ EQN P´R6Zï¾G–éê¾(aæ±ÇQË+½p}©ñ’÷cK®&”ÜOH?{+³úlJš·Eû,ˆIUºªÎ!cFPŽ­PYMhM)þNB"‹9· 2ÚýY!#š«ºƒM…~5|Exå‘çvÖyR¤q´·’¡ŒB¨’uEjÇï‡ZÝVkÖSÛp«ƒÌÀ‡ vür5½¦ö!Ë+¬ð€¥›ìî¢_öY.äy(ú2"jWáØ¶äPQßý–bÓkgFz²±.´Uwýœ=RNËñ 중ö{ŠR—"O©@Ùcà ^F¸ Sñ‡áè¤xä¯eê®ð«±­y•øž´!€4­:šàe …K‚Ádj|,MI ­Ù,Õÿ‰d©®ÚFä±äÒ³33#ìŸòœÿÀäK!ÉUä-"âæòI)cZƒP8ò6¼¾ ɨª\GÀ¢µ˜Ô¸$ìmZmüÙw%O x’AËâã·ì…ãþŠ&[ÜA%Ç(E_NµãEèxþ9"ˆ¬¼Œ}F;`À–ä¿‘¯Â§Z`‰ÞÙT¶ÆQÈ\*y,Êw¢¯zœ3{Q¹hÀQJÇ´`7!ÄEGfQû8G4¯$±LX“÷S! †´eQN[ í‘ª,‰ÙÖ3‰ƒÛÈ£”<$ŠJ“F½÷eÕwýœ™ZãÜÔ#ë""¬JÔtïCñ#Å9|?äåQ4Û!h(¤ea5I–ÙTü&#]é·AÓ'&Ø¢žPf–â%*ëÆB«¸!©Tí×í €24T# Ãú ƒ,/j5oˆmÔŸXM0Í©K1†oVAXÊÈÙ§*Hãþ® )+–:LªJñNO ö*ƪTÿªzÈ)«+Ö¬G'Pj¿f´§Nݲ‘W´ª~õ‰^j¼^B±©%@þZc$Ç š±Û ÔHã¥XƒûUýY"ZœAZÚÚVÜÂì ]•Oúô¦K©G@ˆ@ðƳ#ª7§Æ%Ü·"×ù8Ä óP†âÜÛ™QFbêz–PA©Þ9ØR $ŒuŒ’=JoÄ1ä@­[|e;¬M–R1,lQц8Hý£â7ÿƒÀR« sT*ììá¹è¼þÉþ¸$vLQ‘0ôÒ./FVyJìzŽ'lŒ™GšñåwÓrϧʼn’7­7íË 9¢\—J'xL¡ © È øiBz rÆ(“PÂðêèQWšT¯P¹¼»ÑrgqL:ªÝTÜÌˆŽ®Ud`7’†¢?ÊÈEœ¹ÒÍ´¡yUd"²*±n²jé·üm†<Ø›[HÂŒ$Pf.Kèĉ»ã.k¥½=Lw1Š+ñ‰¬P•-Ä“±¥[íe’– ú›´xžky^RÅÊä…\†êû\¶ ¹ 3½ÂT‚ .ä\H²»:‡QRBV€ücé nÔÞݴзa¡eˆ%•i¸ ‡§Â¿Í€õw²'Ò¯åù¢2Þi©~åØêÄT{ÀòÈç‚àæRùžÑTdh•ˆõ644SµÉË`K›&šˆ‰ô˜˜ò7E'ãm©E4ñû5ÌxŸSuzRùd·iKZ2¢‘„„m"U”Ðmȯ&lº'ÒÒ~¥{ ÖV‰¢Œ*1gfväÄ׎ßð;`˜¥†é¤ÊÒ+óERDk>-ú³T×éÊlS}BÜHŸ\i"VŽ@H5,Øôø€ëüÙ!É(,Ë úPƬҥ”nµzU»¶ZE–‘É«ff¿%V,”ŠSŸE ÉK’#ÍRy}Kgµüw+M–”î~ÎF<Ù¢eõø·9 !ˆ4€e-Ä•­}ÇL¬3"Ò¥.LKë"YZ:Ôñì4Ü“Ë.ým%sÈVÜ;Ó Ïʤñ Ýi¶ )+Öµá3JÅ‘*{W¯O‹¶7iä£umèýP2«0“ñ;²¿'jrþ/‡‰{—†ˆoV1µÀ£|-ðzöG!Æ”ê k¿í. wIŸ’Œv±”š@Õu)ûJƒåQÓíÙÉÀ;0÷RHVe’g êz´nC˜’FäEi²ü-ñe†©€´Ê>+k°å/U_€çµAâ~_f¿k1¥Üä@u@\$2I9F’5ƒC0çÈ÷Û’í×áË¡.VÕ8ó¤DÉ µXŠþèÇ ÍÈÿ”[àÀÿºÉCI#Fÿ…3ñ¢U¥C íÈ·\žNLb7EȆ'ŒÆ¼DÞ6øjê´§Výªf9¢ßÉ-žaõ¨b-ËœÈÈ7-öo€®]D†¹Õ¡,ßÓá$N†r‘ÆìàªÄóþfÿ+%#l"¹ZW†W„FÆi½$·'¨ˆûMö¥Y°.”Ø{iš+i¢=•U0²0ûA—ò²Éöÿ9Œ*·ÿ5 §ƒ"‰-eôÁC'Bˆb ƒSÖY.ma2••D 9ñyèÆYBÇ—JÙkþ¶ceÉî^.UgxY¨ð¯òäZ²×¥9S¶ (;¬f>¸% ’GP)BOòAø~׿‰rCYÝ#½Ì9ª£ÑNÁ\„mÛ†J`°##wô 3Æd”»P QÛ“qʤ ü[‡$=ÄÐGu „Ep~%5ÚŠA  Ñ><ž8’òºy•ÀihÍ'}¢Ü«ÄöE2Y˜ã6Tï%“ýÈα¤~¤ä=bwZÔþÖY´B'ÌÒo_œV*DÂ?Œ(˜Ö† ÿ."·’›°ÿÓ PÝ.Ò y\Šr¥­7øs’£^竽íSQdŽ(Ʊp3•ØŽ ‰[# ÙM^É#:ƒE3"½Ê©V÷a˜n9” ౟Óc¢Ãy ê¶Ò_¬"@áZdb#Z¨͵Gz2Ón$ÎÚXÊ$±ŸÝ+!¡ûR)ÈH–™ ÙÇ’ž²¶Õ‰’m‰'“*A%¾*ø/ÃþÇ|“‘ ¨OÃs gE’ÝY«Éàñ#ûÅä(¼²Ìq©ý&2#„è¦6š‚´ÓÄ ‹˜ÑVvd§:Ž!é±€?ädLy{Óww!ネ4r†(BÆvª³’R¼—Æ(’ÕåKõŒ‡ú½Ê3»GBHÏÂiÛÁ[ù²rŸê÷L#õY2ÖJ£»hØI::ž z¡¸VŸÏN_ëä"w5ÞÎ`дVÎ( d‰®2- †#»ì•ò¼†íž1²[zÞµ=$Suq•6àõ§ìq#í•–ØÛºšÈ[Ⱥ}!€qn ·ÇAÝ[öqþêo¬µÌqÎÊΊfU¦Ò,£âeèk·Ù dê¶`Qƒ~sÕ€OJQÁA~”å·_‡íöM•Žï6dÞþMÙ%ÅÌ3/8êÇãd+Ç~œmü>Ï,MRq‹ {4Uu¹š5ha¤´ä7oˆ®À-?ÙdãöúX’i ³¶—ÔP² 9âH öiËjåFÄ‹`7•²ƒ3=Žë½j §;ð¯~?ì²ÐZ¤vçM–²L…B“²µC~¬O׿±•Swo ÄY6@Î B¯Nÿh·í~Î@D’ /š[p‰‰9¼a¥ @‚ôtåµi’<ϽŒyîîRå`‡ˆŒº¤r$mZË^€þÊ ß‹#Õ©7²²[iæxà04¯m$nÒTR»óQàÅwVÁÆDIïg‚wG­ÁUž‘zKôÔˆC²¥Nõjñþo‹+Œn™qsJ.$p#F¶Ñ+4Ê ((A#¯ÙãÇýl¶"Ék‘ªD ê’¼q,®Æ(¡Ÿò»à¶^­\G$VÈÈhuQÑi׋Û NêFÍÂ’ËdœpÛSsCOׂ_S(ï ‰­ ÆÅÐò”*¢‚G"BýýÿÉÉ–*§‰î:ißÇ/´È7ÆÕbˆc'©ð5 ã·Ù?:uÈž¬€ —7IéÛÆ Ô)n#ˆgäI¯ðÁÙ%”åB—µÌ\r@î±T9!H­Ö`ƒì“ûX€PZõ#º»¢© ×â$ñÛsØóÈý!nͫۋgoR)"«z©øª­×þ¹ÆDõd§jò,–Vä›° Ùºr;vߦbŠÈ쇴aéú‘ò Ĭ)ʬiC_’—=Ö(I‹ËÄ* ýïEU«ZŠ•û9 À”r˜ÛMŠ{`¥¢vI×`T°äGëÊÿŠ‹3\6¾Ùa2T¢†’¨Z»št¨=pžLG4K´J®³³d`GÆMYæÂ€¶»ú»‹€ÄAÊŠÛ|@‰|rf6Â&•#`¦k•–¾‚Š"Õ™£c]«ü„ =??VÝÈ×¹ŒÆ ¥9Õ⻑ò_ø\äÉp­”FIŒn+Ö´ø€>Äcm‰ä¯dVx€‘“Fc‘:pmèEGìÓ—ú¸ÌÑL©v•%Dd)a¸cJ8ÛüÿÊÄ)G•xí‘ DU e5 TþmŽDîÅ2 ‰ˆ`Hßàz)ö;á=÷¨2I ½´ˆª ’® ”ÙwÉŽeEŠŽ¬èT(©ý®[ö¯\4€QWâDükÁݰääm¿^?ääq²šýJ?Þ$ÆHøp«‡­M:Vƒjøä Ê}-ÜÜF‹*— PÊеµ)¶F`îÊ¡5²Hèý(ÞOPìIØ|Eòû ²&˜J6ƒ¹–d›ÑëÉ‚í° ½)Þ™cYD!´õ"HÁ,QVJƒÅªh¯òød,Ó0®žú?Òlæ¼y02ÔlÔqãñíá‘„=)œ½MCs–‘Ø36ÎÔn»-Ê[öð˜’)A­ÖDÈñÉ4¨qäx“ôÓ§LI¢Ä FÄbJÉ!Q¤øÕÇfíÓ"w;¶l9"n.̱ˆUqPExÓ~4?j¹6¶DïH†žDªuhÊ*šcJר©=²Ê¦Û˜Þ<÷’¢E(DбSß¾øÂ¨Z îyeú›4TCR€x³Ÿ‹ÞÙ O•ã„%ÙUõ°` GϦLE­å)+HÎJ´q#7í“¿fm_ÚÄÚ6ÀIåäA 3;ENÔêµñÈI” âž‚;]£aPE>ž‡ö¶ßóY!Ä“5¢ÈÊ]ž6`‹TÐäëv²&ÞÜ6 &cñ´Q]‰­7t«be²kÔºí¢šG¢ðäÂ:¨E¦Ã»œLù¨DÓr>—ÇÍwÄ%Bh¿}m sZQAAÏ ©âþ%’;ˆôS»1­Ã´Lweq55'6ý¾ø#É”ªÕm½i%.­Ï‹Ê臢 åØž¸žæ¦GXf&2eŒ¤àü,I5øîWíeÓ%„y¦â{. ñ"· (“íw­|Y‹ mÈ 3\G$ST¢*+”©êUÀAÜ\àµLó ïsФaÂB#,!Æ´f¡§Äõ0T·jšt‘ò#ÅIžÈžJÛ´¼rRäQb+?Ãê2¬e‚ĪšïÉ‹uö†cì9·Ò¹&¸3^_%]ÔGžœFÆ»*3& P¢\Í(«‘#þòÙ˜´ü¶j(4ëþ®\ú¦+Qîáõ´1Š˜CQÑ^¥CâJü?k%ÈÄÀ(;¹=?M' ÃŒ vEÙ zt^K–Cse‰5Éu±âÐV P_oŠ%'’>øIbèí"ORê88`’Ê9ƒðs¨ kþJÑWù²‰ŠæäÇš¡’ݨa«4¨Ñ±u£RZ øòr@¢TnR5•E°IA]Þ45+þMY6ÿ',¶3C }Q´œ*¤q­·6'uß‹Q¶ÿ#'[€X´™MkªŸ3ô•Wá5åñŸõ@Gž·KõG‘ÒúpèöŠD\,ÆG °•Wáß/żÚ2öjÎw´9_L¡p§0è‡åö±É¹N#F×Å›I–è€$‡]éRÀVŸ?ø/µ“€õp±‘ÚÔà†iï­‹ŸŠ@œ¨$TIþlrH1ƒoÿÔ缡ŠúÁš6ü£vjq,j¼¨v?g9MÌM=X« ÁOª¼+ z¡DÖëðÄ&åÖˆ·5ÊcÎÛ/÷+tÎ ŒèÍcXåf%eGZ²ÿ­·Â“™ÛŸ©†>~MÚ[Eõ¹í«Gâ} *~)VŽŒÔr_ö8(‘kÈ£cÖÛ„P…œ¯ #ª×¡aÒ¬—ö¿ÖÊÏ6È’Ê–7&æ¨É ú r·”U•xŠŽJʨÉðs¦ÙÌcUño‡¹ l±Û_]1N//€ì|(?š´S–LØ `(•"¶ë ­V/D*š­ñïãºã¾Èºqh²4Ê J«H­EZºøšq惖ÙD¾­›¡Êk8K¦õŸŒ|d‰¢•$*•'~Dý¬¿¥{šŽÇæ…„¤6­".¢€ Í·c]°Hïh€Ø…=]­âYϦ­rT´f1@Ê«· ¾Ýµ7¦ÕäJqäw>ƹ.LíBé+葹G$Eý]ÁøB©çñdêàš9J¼œ“qÓÌŒv”,|…I*>"§‡,M¨AÎÄM8mËнz|D í„!IcU–¾¡’D¥+³tªïü¹3É€EKS¦©APÕ ßíV£ßâû9Xú›$5¸m µxÈ@zuZï_£%#º#ɰʞ›B9<’òT0¯«Ý±<þ 6 „¡„OÀÚ û§zµe1ضÂ\Ò¤–÷+3g*â€PƒFn»¯¿»É¤õjþáZœèx’GÌ|;äOT°*fÓë0F ycIÅH Ú¿ñ]rpº>âÆui„W–‘O<ò(ar$H©ûÃ!F™ŠBErV J”âzT“÷¶ ØÞÈÚ¸âc)Ì¢¤„U­@&•ä”d@½ÙžKoáicIrI@€š—)Vÿ’§—ùX`y ¥º\%˜>›4;Ç5 œÅñfQê÷¬97vÈ.A1…ŽE4b>ÄÑÔÓü±¾1c4LÈbC+ YÑPN¡ÉSû5éö¾ü°]“F·D¨)Š©×÷ŒkDum¼ÉÈËdÇu×W“ñ‰¨Ÿ»„qÛgl”eDû˜¥\$Lµ'¡,m7öëÐà%1 µ5 *$ );Ãö²8ÅZf¶é¢`€ý•ˆ;Sµ 4®óLù"à‘„KEbâÆ‚£ŽõÛÃ! O͘4²æI•-™@»‚û~¸b²(‰­­È©r4¢Ö€oßo‹-­ËUìà*g`êC³(Øqþ\¬™ºÖ[TÔ]’5X¢ŠGG© f`¤ïû`òÓ|?&±Vˆ’h"±kOOÔœHŽí×—=Èï‘M²5MGqVUtdGê¤4ÜŸ ÑQú«0Œ2ðŒz·Æ¢¥7 âpt¶]Zs(¸A%¥Œ´\NÅ^»ŠôÂ9"÷j)a…¾²Pa³´9ŠrÛ²˜ÐS‘Ëz|doÝ3( Û+§p»á|PJ"æUŠ )/+ñãU¨§ÿe¾ø#Í'’â$±r}@¼PŽœƒÿ Ó"UOÑ,¥TÇÈH:V¯ð=wÅQ–E"µ¸bÔ’•²šUÅ8òxœŒ÷¦pÚÖ\ú&R(À"•U¦ßñµpŬ0 ±•$v!¸Õ†Ü©ÔmÓü‘†ýLkeuiÙíšEøæEøí¿ìÑJš$UÒ÷-žB%vAFE%7ˆ ~/ÚÀ9,ù ¾NNŽÐ¦ÈÄV¥˜T¶õãðïðå Yk(é‘aøD‘¤ŠY…hJŠ) ;ò™Xû[9¢mmåa¤RA YXվׯ½¨J2® ‘H€6¡il±ÝB€˜mÉqéÈe5¨¥6o³×ü¬^’šÜ7vÁ®íÑÔ!QÎÄž$¹ZØS>“Ižå×1ÿ •I=p]~ôæO Gq\GÔËøUtHÊÍ<‰(Z VP¬œ~žÝ›s³ #t©‘¤žy9C…X€ýšûŸõwËbv &7)üžŸèÈÔ8*¢·¸&”{f/ñ7ÄzR‘>q}šªSnJ9Sr{l·ËÁäÒy¢¬x;0?zÆ®zTÓé®Blà‹T_Y[NÇoÙU¯ü1ÊËm(ž¤}Øü]hÿ/³’˜É«¸äŽ«•ô¸Ñà ¤³WfµÐo“{aÒ©SÆ2´Zþí‰4¨ØÔÚö8“µ¢<×j”Y zh²q$‘Zô¦ÃèåŒK"ÔÑ¢¨J0ÔÄÛ}ßÍŠžh{ÐÅŒŒ9ÆXl•'«m¿JþÇ%L%ÍA§_Ý…äYÝ Q…ý•ؓ߾øÖåxšžG.f2¹º ‘‡Ù+R2@tEõDY†ŸPŽIc”-¼|=$RA'âP¢ƒLŽ]‡Å–=ÏÁkX+jÈcˆpê‰åSÿÒ¸/ÒÈÖHÒfoˆ»IêPöÙ—mÎû®ù:ݯ¢’Å"Y§¬ ÕÌ¢O´I§ás’ïèh£U‰¸F…W j*Ìàü#ƒM²®­Ñä—ObÉr?JJÁ€ý¯ŽA·W­>Æ[a¦\Ösl%!‘iLDÉBq¬”µa_Ùû9!GäÀìŽÑdº„/3z€|%®¼©¿ÇUåË#•ž>hÛ˜$t,èÍ*ÊGª£rÆ›U{øf=·¥†Öî[i’RƘɔåÒ§²ü#áß2y h6VI¦Í,Æå%'ÓŒ¢ŽP øªNDJ…y¤Çu­ákð­Fú‘È¡Õd‘‚Ò€T?Ë’ŽÑþ³¼½ÈI-%‘L±þæÞ7NLý7jÇùÙÈLº'½…ˆÛ7ôÔ-QyFóÜA]ê* ü"ª´ãN+•Oö3€Ü*X•,è”ýØG“ryý ~ËPí•Lôlй²o\Š"†2?ÀÞ" ªO§í`»Žå- [{¯P˜âšGŸˆ©_p6Ë`wÛ¹¯ Ú–ÀSë0@«Æ$äëlj+é¥Û¯Äù,Ka8’4ôQܪ+|1©â¢ÐÍÚÿÌ{.BMu*+ñp©/¨îû+^  | ÉÇ_å̈S5 ]ã´ºµü sä4¢¾*Ÿ„乑ïQµ®½x[L’N/rUÊëÉÈÛs#–n?ÏŒ/Šýÿì‘>Uîÿb§dKF)f©QRKpBXM*ž¿Í‘Ș?ÿÕçw 9F²¯4ŽáfCX(áͨÿëg)ÝÝÂõD¦â# ñƒ¤±¾äUÀðê[)‰m&ÀEhàH³F¯B[H¨(òþËw©Á‘qŽkH‹ô”k11D¬ÖÒ—ø@S¿ÂÃâZ2q&˜È Ýt‘šÉ@Í<ÔâEwެzF\Òëùd6âê2Þµ¹WV'«é֤帇ªº5dåiÜmÃNpPðiŒˆ•¨QOˆ/ùkû_äå=[‡Ò[HgÔí¥9×—Úä(×½i’Ø&¾ǽµ“„¼¦Œ•‘/Ž¿(áIû/ßíb7¦Geö!I‚¢HÜö%Á¥Hð™iêòq;„m^<–WòŽ:«ƒJrý¤Ö©ö€ÁI˜¢Üòȶ2A!µ$2±PÄHâz tÆ…¯0i Û4ÖrO'¦±RØÂT1¢–쮋ö›-Œyýf¾.DòDÁ ŠéÓ•}2P• r ÔcÓ§ÚoåÊÉÙ˜Vê ;!åÍÜtv#£ ø3}¿ø<”E"FÕ ô‡Õ‰Z*T²žg‹sñ?Rz¶C¢ViECJ ^F»#Ô¥2ɘD.A¦èÉS4=?j¯VXíñqÚ¿êâ9 ¦–/Ãi±zˆÈ$ªz{+ür©‚6l…ºUEšé˜úÍwJ.È]¨¥küµä2Ø^æýíÇ=½´7,¡J5i Á "ŸëÈd8I!”NÅeÔ¾»Ånv9$oP|aJlªz6Ôÿ‚Ëc°k;óWqh hФž³B¨dØ| ÁGtQðå@ž-·d,æŒÜFkjÌÞŠ’@zTÐüGo‹&9Õn×.I•õ©úµŠÌ#"î¤F "CPÏÆ‡ã?güŸ‡ z²”v®‹Z[XæiRe‘ʬ"ªÈÊ äõ?Ýž qÙn¶Þ4ŠÕÂ1ŽG0Ç'â«=E>/ƒú«‘6OÍ—!K­ÖÅä¼K²ñŽ6]f$W‰?ä©É Å Õ©›ƒ«$©ÈŠIê9ìѹU†ÆÊÊT¶ãÁ§¥BÞ’GR©Êª±†Þ´?i¾Ö$Ý•L–HÖâ A-@ âÈ»Ô üMCË*<™Öêžµ¹X’~Owqp¬B((f'½JŠa£Ó )l¬³¸’ž@¶åEZ*‘Ò¼… pyy,šá:°hÑšnEÆÔ£¥šŸŸa Qe êÞI{<ñÚð~+êþÑnnG¿î¶«–PáæÆÍ£ œ²ÙÚìÜÇ&^g…‚Uð4ç\‰4‘¶ÏȾËðÕTž‚´${1µ­Ü‰šBªŠ$ußâØŸ–KÉm̼­8r£ÒœIâ8Ѫ¾ÈlÏ$ >¬àP–*Ì7ºÔ{6Y.aŒy+ÆÑÆËXùääŠûšõãþND ^H˜¢G¶¨ebbÝÈ4æIߨœ;³ˆ—!€[r Êdq€ Z•ÿdÙvû†¢©ÑG¼æK(R¿ozþ5¦B¬’Ë ‰ïŒ¬à,RF s$T‚A§Ï&v G5òIeD±*˜£´Ÿµ¹ÙGúÍö¿ÉÈ‹,öZ‘°¹d?Bž´"ƒØ{c}ÌktmôJ/ž9ó˜îU]¨8€?ikþÇ46L…ÐÚ¸ôVFI$+êÇ"“µhBþýµ’r Ñ–;»³”wf•vPá=>ÖLåVâHÁЍƒ•#e,u©ð#í.h•Æ@‹hdz˜éé£qAS߯¨Ûô¨YEÔ„aÉ*J´Uè£ì’½¾<œŽì#–JÁZ€ŸMÏiv"ƒùp¥JÈžHV¥AI”î¬k·Ì¨ÉË,cÌ£îäýhMYX1¾.µÛ¨#þ +6Kt-ŒKˆ†>LL„QšÈ…k’ɼ˜Ã’Ùe†¤ ç¿†ôÞŸ°èÃý–„È£‚mÍ ^Q¨'†æ¼¾!Jî”ø›#.l£É ă x•®þÙ&µo;Ò§Sãõpì› ­€·øÜÎðHŸ£1qZ—'.þö#î]+•Š8¤j2¸fåJ ä@Ý7²ñÈÜDk̂ƎiN§‰^ôÄŸJÿ•á ¦•>#be\гˆš8!+ÇáY 4êÆ¥¶ùq9`¾l ²]'­#( "GZ¥OzoôP ŒF̉ÝBÒ5`ò“Q* €+έúºdæXÅRImÝÿsIžQÃíZ³ºƒ#»-•´˜‹ÞVVrA$ô_¯Å€òòDFþmÛ¤2Ja©!ez†ÀžÜ*Ùa'`æºpˆïD aKƒU.6u<Üq»M/¼Tå7b±2ª‚+SÇâßýl¯“.kn£Eš(ãŒÒ0‚A©`>úWl™Ùˆm¥Ws"B¡‡SË^_ ×vz±Á[(-ÛñôúVb¢½›m«þNR")« Z„W~nÔÐ6ô'­i\T«G(h. q‘éñnß­xžÂ@ìÈ–¼jð4(ÔS!Ú¯P;uëˆACÉq/ÕE!åŒòƒã4§ntɈ‹ø±%l“µÜI"¸U^©ÔÕAf?ê/À¯Pé`à’ ä 2Tü T“_mþÎm”£HH¹ÆÔUPTÔïPÄÿ$þÎLskL.LZZÄP,M> ÇuSìzåCsm§`¾Ì÷.ð±2HSÜà VïÇoÙÂy1ê« #ô¨cõ9'„lÄŠW"y2( ©©©^*¨e^ªjOZxô¢_R½Ìdiõ♾"åðÐ|G,êMÐoBfåp]‡ª¿.v]˜=ñÎÇ4¾RΔd* PUOZî´ÿÉã䓪u0˜hå¾Òˆ%ÛŠWúW1öâmÒ’Oë ¼1ɲÑåSSR>:w2lÒm2´Ž*HQ™S‚r¡ªv%{’k¶W6p TM '$aSJÖ£¯ˆÊù†Þª* 3©àKP‚§¦ß«  Ú¹L 3Yi!R*{—·ùY8˜HR•£"Í4jœD dã×â¡a¸¯üÕ†aŒJÛé£P nedoVŒªP©îyd¡¾ÊUd+T‰‰þ&$Åb :²ž9uQ»¸ƒÕŒFAû-ÈÔ U¶ tÉÑbJŸŽæ;™PIÅþ&ãñѸ×íoQóP9),¥ÄJXýf6?? ÝM{7üKö±BÛ{Û›­EŸ”ŒÒİ!\O&'n?¡Ç ôüY@Ùø#}P×óF‰tàXŸ‹£oèip¸,«9>\ 3¡ø€jQ™xÐ.[]ZI\³D#cÏ“†õš‚……MGJÑi€¤r; {©¸" $üGpï@ª6ø7Ú¿W/©º’û™¦úâ"žQ‰èÈ+z  Áê8üU§Ú\´ ¶îj'}Ð×,g›ë ‘#*¥JTÈI ãöWþ5ÉÄÖÍd#4ÕAè²ñ+DoHn¼¸ŠíOø—ŽJ4έ2–i×à>‹šE È­›~Órý¿ø¦»ÛÙŽM4‘Ú••ù#HÄSáV`8ÔSí:ׇLÉÇ'uìòY +Tyj®8" âŽÔ<Õȃ÷%t·Q_rWVø#G™”;s}È Ç,°¯R­ãÇ=Äq¡1#2«¿'vä ÷ÛùW=†é—’*Â%’g•c,è 5I#©¯si”r–êdbÎòD­ê8«PV5ªü4Û!{]JKp4h–Ñúò¤¦Yꬨ%<¢_‹â^?j/Å™b…}B'IW{»Â‰ÌYļT³9fëÔ(GÅÊvgýËf!Í07”)o’3"òI(Õ`8¢Ó¯ÿÊAl) ăû¤%Ú2*<Ü>çìåàS{·+ ¢VQ<ÑF±ðâ´KáÐÓâÊÉE²<í$¥þ°°¬Dû‚P:=<[nXDv¢WŠŠÉ…Â[ðt µbÕ+^a¶?d”íe¤F~«I ,³2´± äTñªÝÖŠÌÿÉ‘2€Ù }ja²ËŧrOÛãŨ>Õ<~Êa…õY®µ·1Àâ5 ·ŠüI<>ÏzP)êßå`‘³îXŠõ3 ¦âH§ %Ç$Љ4oté·ÙÃ9©¾K®UÚK‰:ˆT-…¢µJór㦿œ™s÷.¸P$Åæ!~ ®¡…: ¦16X»´0ÞÇ$÷*¾Œ/Æ3Z~(W­J'üBÇ et6¼lºDrDAUšDØ|\óbOsIŽihYT#4Q€¦JþÛSàû_ûŒ,ƒ9Ñ*ÞŒf(¸’PËÅ€U)TŽ›-|)ס²Õ•+û[U´p²«\1PÌx•OR‡Šµh9Tþï 'ä‰Dwª]ËÊ®ˆáâð­q£P³ñÉý¬ˆ;)¢ÆÒúq©"wP@z¡I¡P¿3ß#[2½Ü>©$–i üVàŽNÌÌ@ä E6ݾæÆDÑe6BßN!ŒÇ$Ë,®ê"i9¨˜|\FÆAýÚäà,üä¾{…á:´¿ÉÃÑTMÝ»KlT±¨r& |'r´ŽÇ#…²]B XD“¢çÀ*Ä> xý¢ýšødÁ¦r­2Ê-ždP¨P¥(Xv§°=ÿk ;“æ±HŽÞV¡Cð©f¥BW“ »á#@ä©2Ç)WoL*‚Haû[€Ißìã3i¢+M„O$Ò¡0Ò1YâCÈìŠí¾$mº=”à‚U[kX¥"€òHÕ åVbÀüØc".ÓF©+$lB+¤ (Ø+T’û_ Ÿ‡öræC­«(Š›FýØh~#Ù›j}ðuP·Ð‰¤ç3”!ܳì­65Þµû8™½|Ä—3úT^* ü$jG]úá””MØ 4 Ú…ªOå¦kH´’#I¥VsÄmMÚƒáý¬ŽéªÚ…KgâÁFb€) ×±?ñ²¤)u"W‹‹* äIäîÄÿ6K¹zŸ¨œÒDj'ÕØž#pÏÄôÚŸìr@}ìIÝ}„£ë6ÄÈò#©õM@;|Uø¸ñßoµ‰/UYX¤ÒS쬈:0í˪„ÓÖp‘‹à†¼U‰­)ñxdÃYhÎÏÛ_kÄR€<:qÈÓ.ˆ‹Ü\sÍXRI*)ı÷ø\äê– …ب4RUXlB“Ö¸   n…¼<ïe.Å‘+Ôšq«¾Ã%¦‘.h‰æ¢äxÈvA¾\AR6î*pDzÒ~•_/[HJÊü½E_µ±*EF Ò\QJ§—ƒzõṡ5Û?–™d †Aué6˜ÌŒÀ¬Èv„…®ÙümÑúR8¥y-æGJFΈÜösÃnÝÿ›2NÅ£¢e,T–$€¡Z*„éÐýùI<›"7W™ P¥X(Ýj  ÿW#ÑŸUb^läÕÁ襨5þ\%šþycz’)f#¢ñ­£Þ¿N<ËruŒÍ¦R̈6èT0ÞBEvQã’!€<Ð÷RIéÛ¢³7¨ëÀF>2 V„¸šoŒTÉ1¶’äÄÒ’Éñ!«JîEiÔø†à2ꃙ9b§“1q©P¡j6"`f/@?eü-——õÎjBT®ÐȱƒpÜäà‡â]øÇ¸ûT¯û&ørqÙ¾pÉ;¼æ`؆aA·SãþN&ÀÛÉ]œClò‰?y'‹¨$±`xí¶V‘ïlº·ÿ׃ÝB¯,æ¯ïÂ) 1•YiX5?ÉÎJ&€¿ê½\·ºþ²7S´G³Y7Å9Œ Ûö•»Ñ²¸ÏÕïg(zT™Lºy‘‚ÆYD7$n® £u?»doò¾,;KîÑœE*G̲Fé?*r`8ñ=ùrUøÃŒvÛÍtM¢ÿ¢G*³§:F¿ Ψ* UÔ·ŽFVÌáôî¾xîÞ[ƒ 2+z®Çâ`_iK ê¾¢Ô•þlbid,[…·­SzíúQ¨u,¾$žT§†$×E­¹µ@³Åââeâø…(ßiY~‹Ž,Ml‡º[G*cgOJN1™ø}ž OŠ‹²ÿÀþÖK’­VÒåQ½f^KöÕ©öJõ ø& &¥i4.—Q¨f•e('5ƒÑÔ56e _ý׀دrv6»Mõ¤™IŠ&%V„q H<‡/æ?Í’‘ÜWw ‹ïä&à)yŽJ k_Ùm°ÆÑ.{©DVK˜ ’2 å*p¥hÈD‘Ò½Cü¬‰ƒ¸S.͇ ¬ÑI»rü4'©ãO›âÉŽaŒº¢$¸h¢‹aD‘êÄPµaÌïÆ´ßŽUüMƒéoÓI!ÀHáUº‰AEê|r[r+Ëcûy wßú¬km¿¬‡žYd²4  @džŽ§þ|#bôFésW„°*AåÆª&•ú?›#oólÙx—Izþ£«rñÄĶÍ@*µ+µYk“„‡÷1Ö[A‘÷µš ç–æ)¥«~1ÄÌ¥I<öo…«ZåqÉ$¬aIÒ=ŒqÇð*üjzºþÒ‘–[±_$s%žÜŠ–@ïÆ¬´>6c’Î E"QÑT²ZP(,{ûâóAH³$LYð‘ÁŸñۧ^Yhk­‘W ŒŽeXÜ…‹_¿+m‡’›»°õ‡1ŸE¥­*@¶Lu`P÷‚Y ¼láXsND…¿˜øx~ÖJÐz&ó´ö£ÑsñòN] •&µÛ®Tv7îm‰Ù-³ŽVºŠ+‰ƒWâTWbz|[ü9nI %®6Wæd½‘á1y6樤réáÓ ~Ÿ&_Ä„ÓRD{–FåéÇéÄTüczºšö#¿ûœ÷¯{íh¨ãIa·ON*Çš€jTš†¥8õ¥2$óMrS·¹–)`uŒJ¤H7 ¢)P7 ¹uc“áØ°´E×ÃcÜ #ÒXÐÔ•Øž?ë.W«fÉòÝf¢Kbœ™\”‘*IŒ_ äFÜ@ýeÉOMZ\I"ô‘’XX°%D­ñ c¶ÍËc’™Ú–#{ÿ9E¡—òÆPÊÙ^7!I}¼i†&À,d(Š12Í$eįé²*‘ÇCÉ åvÈ~¶[ýŠV‚E»¥p癫/ AQþQ·ÂÜrG‘b9„z·éð¹ì ©ºTŸ!_ò²¶Õ¢ßÑ¿ú¹+èÊ):Ž$S•rdØcTV%º)Q$¦U*ÎYÕAØü\wâF î¡Þ¸O Û¬ÄVBÜÔìGí&ÿ³û_ë`)‰…>šú‰±Wcéí@Q€vÜäû˜l©wq[+•*RDycëP¤þ¯ZdMÓ;ÙFð5F¼*Š &Š»ŠÕJþÑÉÀß69re!pe@¡Ð¯.U<ƒW• “CZòÊâI”†çÍ$%¹FWâCJ©¨5'£tÉô`9ì¶RŸQY#®]Ö3B´Fäѧìb9©>•Týt·%nF3éíÆ¤”§Ð?ÖÀG¥AÝR9”È߬°–š4¢Óˆù}¬ˆ%™Ü¨\z‰910e^MÖ”,ÛdãT>L%Ík¿æœÉTE& ºPû\«ö°ÿ #­¢ï½i!""VGãZ(^â ÷¿Í•ÃbÙ=ÂÈ¿)egäñ/%eêÕݾ#×§|2èTÝD–.Äh„3Ó®ä+á\‘>¤±Y™tå%Àõ%/$‹NÚŒÕÿ'¯òá?WÁodUÒD^i½ZH(`›šƒËüŸò² ],ºµ Õ àò$ÆD¬1`*Ü8Ð×%!³óÙZç„zŠÆÕg ûšÐP°ð¯L¬_ ³—Ô) °u,À³ëR¨ ü7ùYÉ ‰¢™ñj„U4÷éÇö±‰S 9Á¹3#·­Ù ¨e¡©“лüÔ-8,ÇÓ`ŸÞsš”äWáÚ¾õZa‘@pŸ„Q· €6àš²¸w0„ÇŠÎR5@(Å©ðTû·ö9‹LsTÁûŸX*iÅ}í•€’m48ËRöH¤¨BQËl ¨ ñ¥rRæ-±lJÍ ‹@­|cV4j†äõÙŽHl Ù'#J‡+³„“Ð{);à) —„óò_€FoµÆ•®Ã®ã"d”.ôP€~5ˆ’~Éßä¡Ëݤ•eYcLd‚Ê)Ö†¤{da]Ry$•¹eP+@9l>ú`’…x•‡÷•e$P»xƒí€òHæ²!4×W%åçê0©Z»Âï’ªÙCÍ+>œcáÅ pêR»o\1ÚôGhc÷2“’Š´Üíð ÷4Êóte‡š]+;… Â6‘™_j„`*zšŠå°c’Óyù6—oÈQ¨œJÐí^õëÇ(?Sl>”ˆ2|*µø65§p+_æ‘[¸ä§‰È7©ñ±âüŸ»í¦m°S@³˜‘J èÂ3*¨*­Z3vzb1J„ˆŽìÒ ¸ˆª>õØòØwåO‹—ÙÉDôD¹,†I$(}F@E1ÝtcûC|'f 4õŽò.Èð†(Tu$N8ƒ²Öë¯ïÀJC@²¯^\Mã× y"\Ôn‡W“áõ#â£mÓ}Èÿ‚Är÷)Z(#Nz¯/¨M”oOTÉ·äÊFä2F´¨øG ?”Sð[ÙVÀE%ü²$…#EQêSª¯&â½k¹2W{( ×\(Xe† I1AÄ?ǰPâYU²šWyahVEâÒ,nŽ$± Zeðçm2ä­c;È!‘Û„M+!¨F'ÅPw ñ+d¥¶Áˆçi›,m ý¦*Ìî~&-Ê 0´Tæ1«rB],ðÛBö±JŒÌ}F}êc¡yÕIû'2‰< y8ÕºØ^Ùâ¢Ä%š”=@(@ãâ  å]Y¶è»”$ФE9?©Ãc!û¦çâÆ{’˜ôjõ#ŽÁîŒ.åPfÝÂËðon¼í|Yo*g=‚W±ž8RAÄ´Ûâ*¿ÅLºF¹´n¾ba^T£í;¬Ô¯øà¹`ˆÚÓ.t†9\ÙḠg©'ˆÙ¾«Z|9tÈݨ^Ëù<³ÃRÊíéˆÇìÔ»> dEpÎ÷6 ‹c;¼|¥‘¸-X”Ži^Z¹\Îáœ9︭œP'ïV4õP‘½MC{ûÿ/ÕÀîÎj0[z2Ò8ÄnÏÈXŽm²WŸóäéH(¤™åY[’̪¥Õ©]êH?.9)lÀnS=/èÄ}Š5]«U,T–ìAݲ¼†ä[qŠmÜÿº.ÌVUzj¼MP‘£cº2¦èB#Uª%y#mϨxª«ðÖ¿Ë—G‘ø‹QëÜ–GôaH‹EâYUX®æ•ø¾&ÉDúwëldÕ²‘,×D¥>®®ß¡o‘Á3° áÔªß?)â‘Ø" Ñ­>"FçC‚;Hl¸ÿЃj êK¼È™˜xQ]A­{õý×ùYÉãäõy9£`ŠiQ ëв£¸!ª›ÄOü[Äq§û¤š7æÙb:l3=ì"b`Ò.¤²ŽoÄû©®Yò-xÇ0º #¨Œ´°0ARUdW†ý9ÆÏû%îL.-Ùlí5£*;üGV>'‹ÒªãeÈño^L¸v¿4]¥ý¥¬Òʱ ÁÚ*ü?»œnGˆWa²<= .*6û4²¨!IëCµtbwÈãþ¶2X¥$W‘ÆÑ+2¹x¹€Ôæ„a±£ÿ)ÁЯP…Õf…Ñ"J˜ÃülPƒ')Ìt¯Øl”9î™òEAj±K$À4*~(¹QÝU÷Tç4û\FFG¢"7´6š©©4p¼’©¥Â)ªqÙ*{Ù?ðXÌØ¬E¹¢œSjTŸÓYXðW +Hñ⎹>Øó!AÝNýÄ2˜ã¬lÌ+ïÄ0ýŸ¤Ãa„Å=šE-Ü$%iY½2M:µÜ2Óý^\q‘戋S±µO©B`ò³$SØF¿k|”Jü˜UŠGÈ8ý^;“ÍNAöÀp)]þ{噦øÝ Qi`6— £÷q/ ԃȚxþÎXbva7CNÒe“Нe×ìQ—Ütfl ¦zRÉqúÜXLD´Z3p Jòö¦C!õÌce˜È¼’S"ÉJƒ‹ÕJ³¸äƒã§Q‰>µêæÝû¨"³ª0 cõj)ñ#ö›öW§É3¥ƒ4·ŸÚti ¸?äÃjé»S|‘AÌ«Y<+ihÞ§)*^…@‘W“&ûºÅðŒH¾h $p}i‚=X'NLߟ,04-f4Œ·úôÖ—[L#‚Þ"¡ç œ‚Ý?”'Ãþ¶vP ª ‰Â¥”ÜC Ò(c¹w /!Ô7 ò›çßm l —(Ô±DÁ¹$lM*«Ë‰4­ÿr]X[‹Øí%K†ä!Œ˜‹0#”ÌJ¯ ¶FdÄ({µU1ÂüÌD¨E@äf,{öÁ±+.}Ë+OìA=¡§ú¿k è×½”l_¹`št÷¹ž%k…b»$Š ÊãÉW‰çéEHy„~ƒÏ4›FbW“3ÕA_~#„öAä°4‘›˜¹õ‰eÛã(àmQü¤±ÉIn‰µ¶:?2ÇÒGš65¡EaÀxí¾G'&pCPq–4,`޾³µâăÇâ!Éæ†’8L3zEÕBÑ7]¶ù!͉ä¯q鈕¦eMÐìAGÑ•Ž{6ÞÛ¡ÞdãœCó”q‡‘ð¯|ŸÜÂÐW -a§ÍÈªŠ–رý¶ËbÖS«t)Õä¥cN ËMš½ ïðåî[‡$”l.CÈÂ_ZGH*²Püµþ _’1‚¤·&ÙÓÔăpI¡_Žß wcûY#º™„ÛY-Åîx,²IHÅI57¿²·@# ‘Bq%#‰?$bhÜeœ/Å‘;sæ±=È(’2YוŠqQº…5䈎¹`;0¡hÉZúk%¸õ…å2Md‘jʨߗ!ÉÿÉÈU[+°ÝôREõµrWxÂ(<‡P+àW“5p@òlæ–éÉŽpòæKÆÊû©N§—½~Çù9nNMXùµª¤íµÙ<%âcfê+ ý¹t¯ü8Ï0œƒ‘EÏýrnIB¯ ¤› ö¡åC#ÑÚ\qÏ5œ<™DQU(P²ž ^ãbrR5l@ºT*a76ά&I}dR(êñ’oþOìä9€YD„d·PÎm#kzð©¨+ZÔWÀvÂ[¶®V_RUc,C|'¨¨éB>!üË‘dWFÑ< ¤‰yxÒˆÊíÓ~…GÚáüØÈ•}©l ³K£J¬¾ oݯU¡ý®TâÙ#ÊØu¤EôQ¢ŠOîTüqöPÀ;dD½VÈM*±D†6¬d„»—·©aûKö†‹%eÉl ,v÷~®é¤ÅCW£ÿÀ?gü–Él(Žªw4•—ÓL¿"Ô©éþ³IJU³Y;­6ð¿Õ:ÉšJ°¯#ðÈöáɾå!L'YÔ·%jPÜšñȵ,A» ,–Ê…ÈGz™hµZ"•Û|ŒA¶ÂTïÉYÝüM 9‘݈#aîú¸b>ö2?rÈ¢–MHÆ8‚:VŠH4Zý )“±L9”ÊåùÛ;«˜Ø18]‰è¿ýNßäåXÛeº„1¼6Ò à%DF.Z’ÿÙÁüA= ·;eŠ&’EÀàOÄƵ¦Ls݇Eì±ÛÜÁoZG,B}IY¶ùtø¿g²"-RèÀñÈåI¤­± üKðû¨§ÃЍDâÞ1"ÈÁ”3‰NOûùW쌴ï³XÛtÃн„ ;+7ÞŠ°¨*IgfìÓÓ®S*l“º‚)ŽLêÌêŒIþõH a<Í)U€Üimëµ,Ê¡€äI©ëZ×|U÷­J‡ÔŽ~Fa †•!˜íQØÐW+æ=峯ÁNÝ¡[{‚‡÷C£HåRXšu]òdnÖ9-vN †ª2"h‹©ëôã!½ rU½"â솢ªÖœ«ÑÖ­ü¸#°dw(Ç•D’€-ý:ÆàìEA ÿ5d{Ù_%²Çnšl PN^Y–Ÿi‡Ã¸þf88¬ïѲ`G©°2«,Œ8üi¿ÚÜQ²ÐXec<ÁYÿt"eä*(¼j>{ü9•ibhSÔpkÉ™BО´¡ë6É ·5"ÍU’ªcâC¶5>·«R³£›µ I_¶äuÜŽ&§!ÑŸUs,a¥‹’´¼‹M(xšõKW#Dî¹5„Æì…¨âF©ØÕvñ<†%¡í Ù ñ¾àô%‰ÿ[&yuT»Pº|ÑÅñE“eBÔ©=?k–1ܦ["t•.nFÜÌjM7ìWâo †^‹‹šQr•x‚±hÛ‘JŽœ6$ûøe˜ÎÌrsO%ŽÕƒ"†ê(µêßåxŒ ýMÐúRkXô,¢„xA4­GÅV;S©Ì‡“˜” ˜Ä@!Nçsñ^»™L·¦è¥îBáöZnJµècPk]ë_³“çLР.UxÐ|MiÔxÓ+=íˆÄ2ÎJ†ãND ômGQLœM1’”)# &ª¢•¯°d¥Ñ®<Š R.måXùƒàbØ®-©™Q´£’Fd‘‚€w$W‰ä§ö²ìÊ[”¾íg²…û$Ð÷#¥ ÿ'.v¢C:Æ@4«’(*vd¾†K´„’±‚ÈGX Wö«¾ ¥ÕtÄTYg@QLjÑr`yЕ@~~Ö †ögõ É@³‰¸’yr$ [©¯…NøaÍ œÄ­¼Ávv&8HiW øhÛ7òrPµÈì¶4ŽF¤a½("õ˜½>2qÄwnª¿³“>hˆOã•RÚPAøj¦•äªÞ ?kö³ïrÔQ ‰QÀRò1$I^D•~”en£€\/„…øØm¶R~¦Èò[,Áíe¤É3Ÿ@ìª*:šŸ°¥g#nÙHÖÈk×U³h‘=IgæTñÛö1þ_„ÿÄrÈýÌdTRH’æiƒú(æyIØ0ÿÆÙ)A€;ËM…$²³‡‰wWj‘P?ój¶Q“ê%È€Ø)ß· IäpΕ"%<€ ¨ÌE2X·4ò¥w™eHÁ !YbW‚Ì;r?arþ.¥¨¯ÞM2"šÒ5aÐ'*Pݶ§#ör@ÐAÝ1Šà¹1ZÜýrÊ7_NáÓÓ_Þ€ô*Ǫ7$åû\yd'WðgáBÝ¥mÇ üZuuw ™7¨ØñrÿˆâçÈ(å»ÿхꆭmXä‰$ôÈŽZR›Óoaü¹É€ÓÕÈ“HÃ,¨hŒ/꤫؆OÚÚÊxͶðl„´ô£rg`Šg MH ¤8?±Fø¿à²rÞ!„v–î[Kqym ÔONI™ëV^œ©ÐìØƒ`¢·Gýjò(V< •Z ý6qQÈVÏ%l‡2ËzXu $Ku­ÔOÂ8ÉP®Œ9©ß§!ÿ’;Ñv6æÝ¥ÜRÙ Œ«ÈÃ@¸ƒGŽ„oN<¿Él‰÷e±(Ý]%ª¬òY"¨p*ÆŠwØü[¡ªÿ”¹,q'`ÆH›¦âº›‹üRD¼ÈHñÓù”quý¯µ‘`dû‘~I°òäÚv©õÿÕoí¨ö¬=CQNªÃùrÍE V+²:%öï-½õÜÑrGôäq "qü®¦Šr¯á¦Óõ"!ŠÚHÛãÈwUä¿‚ÐŽ+Uÿ[H¯$ µ}nÆiVç3@³A°ÑX×cö¸£þÖ{ŠÌ~ijKµ…ùÖN$ñ(fåJ©ÿ7ØÉÌ×ãñýf0»N”ˆ¥·*ÿ 傆J×ájöïÅ~ÎJ{ü˜ƒ¿Å1˜"ÍnZHâ½>éïÈ©ÿ…Ì`Þz! }`ÑÕâ°«r­d¾oý\´ôkTcrã†31ʤŠj)ïü§%³ LíË• †¬Uàßp´¦ÿ²Tòÿ'+žçfpä„›Q³É«ðòŒÑH©<—í˜kÒªƒÂ.5yK…Y"ráŽìBÝý–š…)ú”L¾–™!VEy¥hx¨ ¹ä>Í(¹>`IÿÝÅqeƒV ¢i¤‚G'k±@?ÉÈO‘¶PŠR¸ÛJ *¾¡`(=Vb(™ýšüeg èÕöÏ¢RJÜzDúŠT£F)ϲÈA­p…²šEê’WÒô¥(®bSµ~—=ØïÃör˜Dõg9%76³Kx)/cáJUIj–n³ÄønYp GúM{“ä•{ç\ „È ðòš m¶ãíÿ²Êþ’|‡û¦ÁêÞ§~¿é3ÉøÐrÞž£/ÄwaÅ{“Õ&uhQjbä0+$ÎY“2F(¶NŸk,2Ì=ë"Ö°ivõ%““IPhÆN Z~ÏËáý¬dhÒÙ1…ãœ\Ã) Ì"UUÔòjýž|y2®G•3;ÛfᬮnSë<¥áF„†ôÛ…IrÀ*£ö›&7J MéÂÒ|5pFÛ€ÜW–ÿËÒ˜ QÞÔ²¤ÂVäʯ R;Pª9aªO2™ÙDRØ£´Ž‚9ŠoO‡üþ†Cm%šD‘Õ­@;}9!ÉæP+1[^H”—õ*)êPÐw£ ·«Z¼„˜.Â"Bµ+@w¾Ç+6g’$F·i]yXHܾf¨Vñï×üœ·«‹%"âÆPÉ!&B>jWál"†çÍ#÷#ã@BÙ"µý'ùYQ»ld.ž$Ye›ÕEmˆ ¬$•<ˆÃ•Òëx”ÚÍsDY)Å–œ·íZš™i=…išôY% /ïˆ$äPƒùùo·ÚÂ#Õ‰(©\ú×ÖéQiXâñ!~!ÎÿVzc«QHU-~Ó:… J¡‚ƒV ד7ü6Í¢-LBxÖDn¥Ø= ’«éñýš7F³‘ïe ÛÔ½F’ê0Y6ÝqJÇ—v^? ·ócŠ;n™K}’Ý)•¡g"®%¯$Œ ”ÑcŠq8ôHçJòºHüÔˆâ“d§ÙPœj¢„#0È”Ò+¨ZÚêÑ£e“‚—ãO²XWâéTqUÉA͈äTu± jä¬Im7)GȨäÊÙåÿ “ÂAÛ¤˜å±ðdi±Ñ`†!¤Ý˜åŽ7xèHŽFùoÅ«ÇÚÌq±òmFéP´¶ò½"HƒÆZ¼’ñ%EOÛø×ýn91ÎØžHÏ«3¬ë Ÿ]£c2P°ePAJÅ+•™rf#¾ÜÒmF8›ÑubñLÖQ¸5QËqNÿðÙi=íßEéE ¨û«©w_°­½jÿ¼³û_Ó!²aïžFÆNêObzSúeSÙ”wQ’Qè;¢€Í)RY€¡#á;ub*¸b¥Jî,‚1À r3nBÔ²õkÿ †=Q5Ö…™Ä†ÄU‘WzüTø‡nÿg&h0¤MÈ’HH#í¿íÄ+Ní•G›l²;þ‰vSêuõ¥ t;øq¦#êþqÇmÀ¥$S¡§Ã±¥~.ßóNNì±<•á6“êó _’[ð­IbÑ-I'ƒ‘_øŽJ¨Z9•‚I¦´·’z—õIŠlí°ý ?á²5R¤ž_C°’IÐóbè}WA@Õ Pƒ P8âѶ’K,¥LsN8¹Uø¤ÜÔÖŸÝÿ6U“¹²è)dwIdY9$ ÙHféðöðÉÖÌ µÚTsÛú‘´‚Y¥"Å8“ÜÔ~ÈíËýŽJd^Û¬oâQï kgw4Ž¥¦`h•­RœAÃeD¿¢Ú£}PÒÚÉ!hÃúA%@îO A‘‰§OòpÝØRŒŒ­‰GÄ…ˆÜ‘×lªvÙò@]†t% |dÓâ•ØoÛáËZ–-Ì’^Ä¥‹GÀð (5û üK  k¤2z­QH‹Í7v¨½ÿÙdG$žhÕ…µ´kÇ0yê™x¶FGvQ!QIoe¶‘ý2 ë°<©Ø×z6Jö°ëkdXÚÌe9™ôdiˇAØš };vÌsõ7ÃéHc ž‚ZŠOÄ+ )öMs+ qTæg–8äŽ%,%NN(û\Oó/l¢­¹ëÎx’04£Ž[ »ò!rqØ0—4Éeâ*ˆ`ÜSâÞ¾ßV6m¤ úŽ*«Â±—â6$1õ?ÊÉÁ„Ó„'&™GÀ;×”Û%l)V5ß[™8 êèAÝjަ‡þKeÖ—Çh÷7…U/14Fê‚=Ð5?˜þÖj+ÕBV!7¨‚9*H#âg Ûì®HŠ4Äw®…â1ÄÅG'•¤a°Hnß=1¤ßF u`ŽiÍÈÚ§©øh:7Â?epK¹bí&7Ž)Ÿ•\òªîvÛ =ÁxàÊweQ½´K!å^&%y³râ+×>/åÁv™÷%×rF×:X‰L‹#É%ÖÕXÑ;vøOÙl¿)5K˜DA*Ü܆ªÜOlÀÇJPýžK‘%bB})T!ddBñ`0¨'³0å\Ç“9$ž·¦œ‚"†P8ÕCåzfAÝÇ­ÓϪüšWF Zr%˜Ÿ~?óNJ·AäœC24q¬|=UCB‚£âUMkÛŽÿåer<ÙÇ¢ÍW‘xˆ #T) +Ñî S¾8™d@ëFÿ²ÈDs=HôïTåYçRQ≇ÕR)Ê€@ `~,ˆäõC«Ù¢DÇ‘™ƒ9ü x(~Á/µ– ²TÖÁ6Ž.Çî¤ Ã®ê«Eä…Œø¬T¯ù_ëeÙ¶•ìËp«+}`²‹€(5Aª€>ϰANåLÊLâVâc‘¥u~‹‚¨­þStÛ%õ>H‘QH£6ðÑ„÷-êK:N$…HÏúÕl;“ÜÄ‹ Ÿ¬ÎgY Æ¾š¨¢£Ë©ëP)”ó¦þIF¡os‰Ÿ’GtшM¤`ŽGü®Gqû9d9[\¹ ç©Ôe,•Š2v&»r©zu9(ò ;Ð1d’áTª†vI€ eE¡f'â⥲ÓÈöª­ª…¶·hy1ê#<CÃv¯-þÎDï"“ÉvЭޟQí¾*€»5f=ÇÚíˆ5"ØNáÿÒƒßNïae3JÓÜBY%v$WƒçÅ~¹É¹ózÉr÷/ºõo¥µ0FSÔrÏn§‚³ êž«•ÄðݶÀ¥úh¬¹0YÑÄq»ðbŽ*T;•Œï…„>°¥v’lL…7æÈÀ±BµßÙ­rXÈûM=¼…L&wä2Ÿ¹b4ej@§‡Ú(7"@RIg,få¾2¦Î^ #|!MBiJ®íþÇ2%cüàÐ>âœÉon}_HˆÝÄœöKµ ¿˜}ŸæÊLÏ_Ç hˆ²ƒô£¼°’ *MhÔäÕÒZÑHáŶzdî½L9ì­K-‰0C#Q”ÿ*d" r"Ô´õÄUÝá°¢” âÞgÈ2>¼D¥'¸€*Färtµu«n»ñ«~Ï,A¯û¤sÛ¹*Ó¥ ,†R8Teqݸroj§ìüY9raRC¿¨šÔu‘¼Ì¨?ß QÇL³œ|Øß«É6ž(ÝR@)Ñ„n„réÝ…>×írÌh7Ìl§KÊ€™¸îKÒ€kð±ÿ'%#ȰU "òJÌQ£èe쵨>öÿe’–ÌcºªN9‘UÄ’qŠ5]ÆàüE¶Þ€…<Õ|$·Ks$|]Œ"´¬ µïþ²ã>_Q;…ÓÙË·7-ÄÈÜiÌ•R¤Ðý‘Ñ«•BWA²@‹)I•Wêñ±>„rT—P+É)ðÔ7/ʯ¹Æ'ïFG$’Ü\8“"2 ÜA¢ñ*½vE2¹ï³dTôÉ…ÕÜ/M¨Ò}®J Yš»ý¯ 26Qé$s]\qæ‰c@I‘½5AoÉÐ6AOP7܈IeáCƒÆ´'~ÜyþlAÆŠÈC™¦ˆÈì‘ru¶éÁ–?‰÷wä¿êá;€žD£í`)õañJyO!,9´P)ê«ûReyE3ÆPö’ÏuõF,©%Ä’\3®áAb«È W'#½t Xù÷µIžæåbN*)2A ˆö=¸×èÕu¸˜ÜDаÈ¢Ž(•Q˜¯V1AØÿ¯ûxή–<­[O.CÎF¬‹À¿û@²ôý“ü¼r$nDó+‹B5L.) K*î§•hŠÃù”Wâ¦LÁn!œMÆI¨í(fåñ©E­Ë¥¶Vy$sr+ÊÂiÊePÛ¨#Žÿ2;ZÇsIµ§ÂÒûfß—Am_òr¹JÛ¢6J‡/ÝÖFG$’íÞ¢„WaÓ.ÂÔjÒøÝ‰áÄÑcB½BÕÿ‚ø·¦Xy0Ñ÷`$hêz!•Z¨>ÿüU»d¹(E![+|L¬ ûU^¬7ðø¨2GêbÊ6êY•nJÆk»q ¿$J=oJ(‚#3!iYiðŽª¨=Ç:Ǫlwvp¡n'B%ßeµM?š¿³Ëɲt-Í™‚ÇÓ4ýã1røê(G~¯Ùø°ÀÙù"B‚+¡õá+šXª´j€p§á^<½§ªîmŒ²³ÑVN ¹øøŠì;••r œDéRG,“\ºzi¾’’>?´8«-Zœ”ƒº"À™ãYRF @<·;–ûÿâY ŸS8òC ¹¡ï#Go4¨½YãÀ{/%|ÞýÊ66ƒ±˜Es5´‹È;Þîx²’µöåûY)‚E¬(RN-fwçÎg<$ R=>¨}€8x¬€‰høâå¥Z~aj‹"±eâ <ê?Öÿ'+'Öm z6oGIkº³;H¡Ë.ÔZñ¯#ööû,œ‚1s-kFsÈ”W^•%$£â£oÚníû+‘á°C+Ýt*}RE¬Òó”3U}8”¿¦jïÇ!DžàÊ[€³Iú=çj»M! ½Ä7c·‹ŽJ˜Ûk+ÅIQ É+*³Õ(Ü•Ø$ueø¿gTW¹§W¥]ĉ¿% BDZ=ÿÕÿe€è™#šõ%D”Œtbßá>ÙA—2—YÃ>=q€Ù;¦2ÎRß”j¿º§w±"”9\Fí„샰 RÁàÓqâÆœ‰ eñ¨ï“—è`Þ±à-jK|<¹¼G­U_ÃÞ‡µî’¯¢4¼¥(GÕ¸ü tRToO¦˜ç pó@GÍ^IVZOBl”z™æž^p]9IeçÍy=O"BµE|Çvñô¤¨¬o£°„r ¥*X™”ylãuM.9­±>§¤ŠHª‰&•Å~ÖP9¶¡]Ä×)Àqà¡E;w5éñdê€cÌ”{qâ¼·FäÇ…l)Cúò¦ä ëÜKq"*•«õ;îwù™dE a%!è»ÑI?|[¨âO§ Z¥¼2-Û„¢ _‰ hô¦ÿ´»c#²bHÐÛÝÇ/¥I^FôÛ øX 6ø„a¸¢FŠ&*ÁŠ#Fy@õ ÷ûX“º¯EˆÍkÃìGnï(I«J÷©Æ¾Ù/ê^R8ây(þŸ.ÃsB|§ï*H8ÚMS´Ò­Ukn]Z9»Šƒ¿† –6õ©é2nPŽP>*l¥Jÿ-kw,Ð0\J×±@–ѨõÐ’CWr?ËåMøå¼¢{ÉkÉZÙS(‰Dpžs±jì( H?°6Ûˆ¦W!Ò)L‘°ôÁ ‡âÿ"MÈøsso;$KnáãoÞÈÜœ¢±Å:žKÝrýí£Éa·S誴&>œ‘w h+×¾o’H¤ÆÞ`on'*mU·5à@'cðìË‘;QçhmA¸ÊT¯¨@äC Àán½«\ÂfÇPÙ[ÓìüŽÄïðð¨ßìå€]µ›&­Â’ñô¢ƒÔp 3o]·,Ié„}'ÍÄ¢LrÜ:ÈÑhUrK(cZ|\¾ÎL<Õ,lS’”`Ó¤j ‘ ©¢³ñlJ®%­Ó5¢Ìв  "Œz ›â?åqÌYsr!° rd’+ˆ¾¦#Œ<ªã²o¶îX5?›-—“\z¯çI$”È ¿b kVi—;uôËrÃY:ÑÄ’ÙZD}%†r%®Í#($»ƒö@-û?Ë‚[DŸ&QÜ„ÕÀôÚ²T®ÅWoÜ©Bš|öÌpÚR‹¹ev…KŽBe«ž¯!UGvþP3*ãH›@@“´s3/9Bq†}üA¯ ‹rk$@@-³´.aW£ÈÆyÓáeBÀ•&ŠxÿÀ䮪ÿ„)ëH˜£bëÄÅ Kl¬®Áˆ ·ÀH²°i2è§vLí4‚U¥¼U`”,B¬`vR?â9(©=_ÿÓ‚O 5…À*ΆZÝéU±âWo²vøÎJêC¾ž³˜>ô=– ñY ™>]ø«ÿ ý±ÄÉ?gŽNpõmü_î˜Æwê§°]Ëy'ÖLAx"Ë€/¯qN‡ýúŸ³öòƒ3ÔíF$käd c¸ø”W—Aª:ÿ/ü]2Z+Ô75œ }hnŒ ÕÑcøySº­x·ù?FR£}?ß2Œn4’½»þ–i 2ýn(Çìz±Ô•jt愬e¿ÕÌø?¨Z?‹úÁ9’v±Î£*:#Óˆu%þÐÌ~-ÛøvA:”¾·rÅd«¨ >kC×ãjdÁص˚?IÓ&[€n%šH%UÝáÆ¿j65ßù²3'áþɘ‰¯ŠÇMk‹ƒm3=´±=Y}Ê5«Ð)§=¹e†~’Ä_qDrÌ£â³"An禞åO¡¾†n71–ŽÞé ±ÀhBNTz‚µ§ÁþKe2 în°M¡­Ú¼·¼AzR4mFÍbùçö[üœ–õLv´ ”«gõèÀÆ64R=&n5$î¬?ãlœ¬ÕuaGÜÛÁo>¹ˆðK€êö!ÀÕAÚ„ï’¦$ªÀÎÚŸ+@އb j‡½rÂÙüIŽª lÀüI· S^*YBƒ²Ðƒñ7ÚÊàI“dù1æaÍ‚Ïp«£îy1í¿ÚøV™’ |ÜbV¿[†Îy¸BiöD»‡ãMþÿª¹ îGŲ<Šè YŽÜ(EÈ]”åækþÇ&NÌÞ–[^ºÂ"÷ÒÈí3ÐÑÏ#ÇåJäLl¤ÿ¨†m•ÇÆ«•ûE›ÜåFe·ƒ¢…¯îçi¤­]‚«U‰z„¾?Ó–á‡TF¡s$:³Ï!v@ÒPì¢5 ¨ ô§ü61ÈEv¢T­!·ŽÞÖ ~ªJ–Pš¼…7øiEÁ~¢|Ðy©m¸ne­Q¿Úî}¦È–CšØ*4„£€ éJµ*ddãPa_³’—[`:&Öv“ÛÂB #äB•õ‹Â¾'•_ˆ=FûÐ~’¶¡Q¹ L“)^¡˜¨¦ÃnK¾ Ù•-Ž(d•d)[u ÄV†¸‚>g|Ib·‹…Ê«Êኂð²SJüYYºacB~.áåæ È V¡ÿ(M•Ë›l9$±¿§¨:”ª¿¨ÆR>6z‡ù.¿d¤44TWô”†‘U˜š”ø‰§±ÝpžHu{öâ±|ž•fV¤ïSѽ²#™dVÀaýÍ\‰44!«O„¸Ô}£Œ¹…$':Á\R@Æ 'sJÒŸÌrGf;¯ÕÑJ£,ƒ• 6<˜¯^ÿ²>Î(Z"wWÒišã• Šä‘C¸¦àx|=24nÙ Êíicã’@“@ìÕ,ªÏFnG¥xýöpaꜢ҆’WyXB­7©é¥j@]¹oþ¨¯Å—Ø­¢¬£âYD6ÐËXݘ“o݃Í~ŠoVûYâ÷ÃôûÊ fú•äÛ ¥F iÐñ3}\™çL:" n-’°ÂˆqAÄ Ÿæ§Å•‘VYÇz Z”RmLG„âE(BÑTò=ÉÙòXÎæùRd(ªýÚU%†'ýìŠU£aVä7©ß·ìåÐĆ©J¤ 6ßTxžkHãY]•œ*×›ªš—ìóOÙ_Úû9 £þk+æœC6òA@¾¢z°Óá4?Àÿ1o³û/”Ë›d>”%‹Çi™@QÏ“Š€¤M}›ídåtÂ5kµ[ynᙂ³C©DfŽAB­U `zSù‡ó|X1ÎõK<‘ÛúÊz*4«•ty£(ylÉ4j9)-üÄU?Ÿ–K6İŽ"%‰–I1ÌiZ°ßöý“ü¹Y„´´yVØ@ü½ÐtVQ̪±VŒ“@¬ÕË ‡^æ§z?V´–8–xâal>!þH=?ÍûoäÊàwe’&Š•Îš©o‚Vdß•w ZØþχ?Ûå’”¬üÆ4tÉbŽííÜ=ÄjREëЫÝ|8$ ܘW.ô|·iéÇÈzµ'ÔÃZîkˉÊêË; €¾†8tët*ZâÖN7!šªÈÀ€V½ úÜrÈØHl©,Ö²A%£)øD TŪܜ ·þlEݤT³Jˆ.Ÿ Àò σ©gSPÕꌩ㲓M3J¨´å$:št4ãCö—ÃÌr%[RôÄ)èšzœAZPv¡z;t¦BÙÌlî´Bõ­Ic©ä^´Ú§íSöGìdÇ:aÑY¥¢<‘…©Ï©$µ@`¤î)ö›*–%¥pú¤{(J*ƒNñoû5_´NUîÛ’RdKç12–H¤ì¯ég?¸-.#‚Î6PñúܦQZ6ß ÿÉ_6$rV†W¼W™JHØž‹É{ðþ+>–Áê]wlT–RH–Ew•¢Æ+A¿’eE£8x"…Ù ±õ]i°5Qx•QÊŸìpò,y„-ÃÆúîãà‚?\°¡^©òøŠ–醽ò›õ*˜¢xÀWâq‚MT š‡á‹qÛöWôcMO‰™”1Y 1VŒÇá§mÇ~'y•[H í™h^$€*$õZþÖÜqZ²‡HÑç¸GjÄ›±;Wá¦Ùîgñ@ÛD«inŽÅÉab!Häw Ùk’'rŠT†Ù}Zq‘YÍO.Ô{Sâ¯ìà%@ÙhˆÖü§JsêÜ…Û‹€;ƒ\Œ¹&Â#U[Lo÷ᘅ†€…$tâ ?Ù6 Gvy9%@ò†’ YKÓeFãN;™iæi«˜åK)¥šduUD1„mËŠÐ_¿ü¼Ö;©¬BMI§úpÉ5j‚¼AÛþ%YóLõ&ƒÑykê¢*»3)4D9Ód«… a¬¶Êœ¢gNåØR§ß‰9õÿJˆJ$Lbôª£ÓæT) V£ÿ1§ÙÉ,š*º U.UG>Bˆø†Ôù Žtá@:ÅGv &ãRiÖ”'-‰a0›ê Ç °”Š0䨥6ÛsË(‡6ó´RÔ‰†¢•P¤H9ìAŽÃ¦Ì2ãô´iäHñÄ\žAöæz0!y:•øÖʆŴòAÆ®¦G.²:¼Ôq^»×µre€MU@ LB¥š¤·ŸCÕFÚµ4¨;ôø™—ìà–ÑHܬ£'¬W”N´äã‰í@¹8Ý bkt90Jb „uOŒnÌ,äû[oÇ ?JJë2 ­ÌÈc7¼X©­O‡|2  ìÕåE¼œª%2ªFþì(@WÔ§ù\@ÉCš$zÌØEsô—¦¤Ž2V7a$œGóJTåzD‚Ù‡qj„ÇW+Ì8 C²„«Uø©¿ùY(1Ÿ4-šÃ èNB4Š?Q㨣z€Ñ›Ø0¦Hî=åš³³"<ÝÔT–+¯ÃB2R†ÑG]†M8 jAD5Þ¡CxÓöw þ\ }MÃ’TÓªˆØcôž"Ç—Â]«SáËl´õj""à5~Í"°-ÁÒŠ}%Z•Ûá§¡pqÙo}ÑV˜ã›„h· Æ42LÖµoÙãÿÁ9lÎÛ¯`±v"/…‹KZ)Zƒ@Ôä9Shš_tÈ‘ÇÉTú°)Ç—ÃI)#1=ëö2q¾a„¼ÝhEÃ4Nþœ’“Œ/—âmš‹öWü¬”ÍDPê€.ýÉsƒGôД¯ãö¤qÓw—ýl”~Ö*Ë¥r-y»'Œ1$)C’Iìxœµªfï#?¤kÊ0Â)w5'¿ó7ÅVÊvoAúX´uø™Â©Xä5À`Cñ9§ùY#*“ °¦;…u³…Ê¥o‡Ô~AMTŸ‡âÚ‹ö²FÇ4 ÙmëÍ®OpŸÜ¢1 DÒ’Z¿®ü†FB¢(ÉWº5²v*ª/ß?"€;PÇâÊ¢-’Ø%·á%¼º™£yRФH4$0ðg¦dT;ÚH´4«\42‚ÌÉ iF!ˆZ°›§1ñ·òâ9„M@'Kd$î[„oé+ ¿¢ âcjõ¨åTøäByòPxÖyCË7¤„r”Ï’$„íû-ü¯†è1æTà™…ÌªÎH•ÔTQZ§s¹ØòÉW¥I©|Uµ{†Hƒ(aÎ6ïñ#+UOÚìåX¹Ó<‡d]º2EêñQÑ(ÔÓš¯ÛéÈu<ŽFl —Ïs^"8¸ÍÌ’Weã²òo×¶XêÀžt«cXìäj·é…¥v_´Ûöf=qçïcÉe¤²Iª0.2±ËBy²ÌÇoÙZí†[E溜Én⟾U,µ.çCö™”epÛe$•c1Ãð;½9Pl)¢ü¦]vÒ5[žmlÄrî0Wáî­¹,Ù •÷3Žñ¥Ž4‘¾®T('íÕþ&UrÃp r|v=ÈêßÍŒ¤@îÓÍ”zh°y]ZÖFôhÈ‘8äHb?›f_³é¶ o+ïe²;iÖù[È¡¤¯À~5=ø• örsè îµÜÓ)iQÏ”þÎõ´øhr<)µštÊ·’¡ÚY¹3¡õê”~y)‹ˆt™^5ª¢Fí Å$±²Ò@¼qÚ¯ñâùuòe-ù:ÊitÉmf‘$WC&ÄúJJôí^9õ[(I*¡k+@î’|@?ZPø²=2áô–ž©³K­EUæPe R²)øÔÓù“ìòû9UËP»ÜÊ¢f‘.‘ŒýYXV>D”ðã“÷±(u VRd~(ð€HÁ•ûOSÅ¿à°ÞêÜÑZ\ªöÊœX-Jv}>9^nvËÚ–’=ÍÓFWâÔ<“’°¿Ù¯_åÉÈlÆ÷¤}Ü=’5<8¤€ÔäZµè?då0¶O’YÎI$R«ÅZP±rê íʃ²üòê fÑz„Ì‹*FT8ƤlÔƒ­8òÄ“Q|ª,UÜ«/ 2ßá©c·h›p¯7§É‘L„ò]Ø+– ïMw",Õ’åûJë€~ó$Šôû±Ÿ%‡4N ÅmP¨Cå~*‚ ;Q†Wlæ‘ÝÈ}U£¤§%cñËr»0Þ¹xú‹IäˆÓx£H~QrÚµøˆöþlŒÊb²@P\!3JÊÂ Ñ”Ž´öïŒNɘݬ«Ã¦GT »rNë·ˆùåxþ¶rúØ4-m¦¼oÊ/E‹©ƒŠñUù3|X&*Ó‰[Ï€2!Fß iVŽS¸¯óøeÕ»Y)†§ÁApü•HÛ‹5Ië¿ò¿g!›šá)|‹@ðšzÅ”£x“N}NôãL²« ¦wÈäÛP7ÀA•M>öh[µNSmÒä‚ ¯Äª¯"¤­)QO¶ê-D\•õ)’;¸LßQ¸ #}¯»¦B›dù)GTM^O,»€>Vj¯:dùl×Í4!9*/*ÈʯÃöºm”áÉ-ÔÚHõus]‰m©ñtø®[ âÆ|Ün˜‚•ôå (ß‘$ oJ|XÐûXZû 7 )ý∈hÚ¤€ôð;ddvgŠ¥Ï¬°à="’Óc$Е¥(Ã,Ú˜VåBh WP°—…i™kÈŸÊäA)­ÐÆ\úM%Q¸€Àñ_„еk¿òä‡ÜƒÜŠº„‹I=3HäªòÁDsP¿h¯J‹# åøîe-‚+H·Š hD *•FÕ¯T ÇÄïÇü¬Žsre‡’SHä’(þ!Ä4„—cµæ¥Ã“ óA´ðVæàÆÞ²¢V26 ÅÂ@w¥ydá{|Q*ÝjLZ|Hâ4±¦«ƒÊ¯Ôòo‰¾ÏÙã’™c²&î`ÖÔ`É”]¹ŸÙe9H¾-›‰ôî•<¶óC+äÀ+äO.%BÐmö›®Ye©gÖ¤7w.PI©"B 3Q·û QvÉD÷M-# ‘—C5WŠ´UEÛ„äƒûY\ŽÍ±kÚ}qÙÉ ª¬²V5Fÿ€(ŸK г*úF! uä CQš¬Ëß“ô_„d¢×%$2˜oæúÅ$ƒ}*«Æ8S$H¸…Ñ-Cê\0¬d…[ šgýãT~¯ÛÂy"·n1ÇP(XƒzŠÆ9 OZóo‡üœwáA戺‚ck#Ð4óP´¬w$Ò¥h>ÐáL Ÿ&éí­Ì ’ʨ©<ÁCÈ SÏ—û*bw+È gŒ¡P*,JÔO…yŒIå]òëݪ“ 6[_ÞJÇ4„p"¡xŠQjw¥?Წ„ß¹»+ÝË¿oT½ò¡ø…. øCu=>®#äÊF½é\W yyq, «]JÌ¡vZÿW—T9|àÔ ¨§(¡ø]œBï"Þ€„c·ìõ'%̱äc‹ÕšÍÿ¤FÌÓ9KsýBGTQÿ ’”ª'ÍŒE‹·h„ê"G¢ÄÛ§ÂK1Z¯û,„¶öC™¥ íå6óIê:‰&jCû4 U5®ÇjÔòÂ'ÑL_ÿÕƒ¬QˆÙ"ßô|ŠÄ’>$r@NÕâÙÈoâzÚû?D5½Äzc[g¹xÍGÁ"N¼Fÿ~Î  ˆš!N cŽêÚãí‡á•4 ¼+Oö8˜Ø!04©ªÃrÄñ9U¸Rñ»mɯB?g£c‹š2޽è³t³DˆBЧ6tb@qñå5zþÖG†¹"VÒÝÈ:«ÂÀªNŒ8žKÓr•­“'±=Ì èz«Íu,÷& Šò™£6ÝüÑü[äc®¹6È·n‘}`'VR¼xÚ­WÇ¡¯/ò[Á^ú[‹kˆ¦‡âž"²(=:€;§eÿÈbŠfj©Ð]­Ö§q$ü*[’ tuäGŠ|@ñA‚@ðîÈo-›‘ÖòÒ)Å,cH‘O^¤Qã„l}è6B&Ñ­¤Hà•}(%_J5¯À$PU[‘ûèÄã#k¶K£µ/chëOVe¶ž6ªÐ¸4(Ö¯í`â‘”¬eu†Ýh^? ñê±øã_æÉHscÉ l’,à¡aÄŽB¼Aui‡ ƒ™PAq/._W’¨ èWÁ«Zý•ÉîH 6Lt[+È–§FŽ0vB«)‘ªJmñý¦ø¿ÉÈêÚË&ÆhàÓæ•y$ –õXTlÔ'juÿ[(äq5RÅ\ÜÞ@Ü#æÀò5Ü€ið‚Ùh+h½öV3Û]uÙÜ Ç%‰HPŒGj8IH[ EãäTHÏ(ܸ¥.ÛÿÅŸc @¶@-HÇÕ vª4Ì¢‚Á[jš56ýœ=ꨑ7Õ‹3$†4äëCÑŽÅE;P ‰"é )X3ImjÌ©T2U ¯©RE Pýœ”ù–1F[E´Üäs àb~íd”?~²[ö²»Üué¶¾ÚD¿p‡Š Ô’ÈÕ«q¯òœ(uÍÒÑ9ôù³ÉÅ[tÜŽ=ÇØ"˜@Ù™ÛÆßWneDNˆÖ•ØoJü\)•mÑä’K*x8©VßbM TeR«Ì¿åeã•´jGTT˜–qRhŽ5êšä¤Qºë‰ž><‰‘ˆ4íô oˆÝ‘;*Z[ó³hÍJ‡ï@ZµbzÐÂáŸ5€Ù.1ý&1üä4&•5¢mþË%½­l§x]íãâ9*ž?W”læ£ã¯z~Ïíe‘صsDÇ"ÅsvËÄ<Œq^”³ÄdkÓL‡;P¿!ˆ ¨ˆTÎÚeZ€7ýªöÀˆ¶š].Þf¯ H®ôÜø.eéLBÛ5µÄòȬ×+£ö£"¨Gˆ9g’[wnfmY.åô¯!Å…jîT/ÚlºÕîi—$öÎ9‚M-â< «©G^ Sà qÛü¬ÇÉΛñ‘Â¥æZ%œ¥f&4jUªé¾Àÿ«‡ Ü„ä©m]n«¨ë< 2Õ{|CoæË„»ÚåæîV·ÒzÊaKÁÜz‚ªGû&_õ—–F?NÝ.{¢4ÕŠæÕ­–745«l•§J/þÿ´­‘á6Î;ŠCéSˆæ?ðe £54øj¿ëWŽY(úm¦2£H¿VOQ.¢¢J–޵"¿JµQÿ •ÖÔÏ{S´Ô¤’ÝïR –;„æ h‘µk^©ÿË2F¥_R1›ÝÃ„Ñ h ’§ˆâQ^ÕÙN+e»ÝfíäuåJôܰ]¿ØG©þ®@žL£Í 56‚Òæ !BβÀ+¸5£QÿÕê?oû £ º{1o?¦j©,pÈÔB°2]†bÀ)Go{GW‘h¤ sPv­zdĶk!Vå­ŒÖeˆ©†é©ñ†`n?å_ídK??4¾[im.¢á-ÒÆ¥*y ›zý–âßì— ‰‚$*wdÉR¥YÑ©ïñÿý\”yÛ¸Di†jqåPßXÔ“Çá¥?j†™¼Ó‹’IƲq „l_ÒpÂ*Iû_êäãLeÍ1Õ`iíCªòI™ËPHPW¿UʱݶLXAH±Å;ñF¢ªn­ñ…U ÔlK6Ù(nÆ{rj®5‘ø¸âì*¿4_²çþÇ'· 0Õ¬]#¶†!À£H#Z’E{rb0LYLM¾õØRD*"˜ãQñ2³Tµ|~x`;Ñ4\Ð=µürÈÜUbª^+Ú´ú~,€7Ù!D+]Go¤Qz€\#3;v¤€q`zƸǙ(—$"ÛOúFmLÐEõ†‰ÊüˆáA@y«7*e±äZ¤i?´‡„P‰jÓ³) ½T$Ùøs›6äô zåêˆçˆ’\¢1Š”;“¹©¦ç'Ž6-ŽYo¿r”‘Ï'ŠÆZH¢ª(wRZ¼¿—ýŽY {–ï=W¸š QA ­º®à­K>E•:xO«Å#° Y¹l‹Ä®Àý¿·‘IݶP.Ù¹÷f,ä³pO…Uv§ÃJá%iN~pÞÛÆµ«ÄçÔJñ`Ê/¶ãâ8#¸*v*¼Óã0»sZ¨5ä¿0z+ÙÀy¬B*é«;–åÌ£s,/U—«ÿ»+ö²1;R´†wa»J£Ô~+ÄÙ@]¸ÔŒi›²˜Ü\3ÄAf^d­7߯n^'ìá˜æ°(ÍX ÎÊÌ ç'." ò-“ TE.Öž$áÇԸܨQÛ §Å±ÿg™bZ'YÈñM†0dü ]€=~‘•Ë{H5M\ЫüiНƒE4oþ8ÁrsGj éi’£Mé„HµaÄWp6©éÏfdú4ÀÑIoo2xÕÑÊx¹@Ô5Ù¿”ÿ.½i8º)T\¤æâ7hZ‚%åØƒÔPW,»£YóDùyмìõ8ÒŒE8GÃOò«•ê9'4¿œñªr+*™?½?­OŒFÜ¡ÿ'-‹”ÇQoRQŸú`-¿#¸¥?hS(€Ý¶Gd”ó5ôAÏ%âÉB8€h9Så–θKT~ ‰½£Ý¹dôãõ¥k²“Ä_å?ì²²eFœGj ª‰&j®Ì­¸âOn½²ÂjÚÀäœ@À©”5=?ˆªŠ|²Ôÿ‰f<œˆ¥—¼éOˆ¨çµCH¼*Äõke§û,¶NÜÚ§Ïu%-íQ|L Fõa·ZïL#se䋲c'—ï ÆuÙyùñÈM 5ãLò¼¥¦sˆƒ]‘Mû×jå² Ö ¥Ê¾‹ÆXÊF, *µðøxÿ«ódÝżu‚F!ªkÈlü’¾|¤…‰V_«,²",d¬Jãš–vÜ„ÿ²Ë£Õ„·¤×M24mm,)êÙ¯¦ØSÇsAß—UÊsn[0ì7|Úy‹reoÝ*¸1`{Ô|9(ìNèi¤w¶žN,¯X–B…,¢«íû_ðXÄz©“ŒR:ÍQ®X§:ÑH'ÂßFõË@k%so$QóÛ‚²ö†ä³”­¸J¼‘ÞÇj€–šcM€âÿ'‘Ë+kku­ˆÇ£Ã÷nìÓ¶Ì#n ÿ”N Rki;4pBýäŸ MvU6wÊòÈ+Äb“³ÈdXäXÊŽJ\òµ’I’^ <‰—…Z„‘¿Äûr¦Y{5Ñg¥9´K”BˆBµ ÕЊ҃Ã~Xx(!Y« ê‰+<¡ƒÈiñ+ƒDÜ«Þ7ùYÞ™Š?-64úâÇn¢#qûµ·‚‘ÈUw?Ãðÿ“–N豈Ü#ؽԶÏH¨¬â¬B¢FäÀßâ-ö›âÌqµ·é,½)õb‰d+@@p[‹tìT¶[ŸÅ„¿B­ÁŠ’“/j¥WC8­cÛ`¦vµ².Õx›d-+–ôšŸ…X@À|9Õ°rW»¹‘¤ŠÁßÒ™ÍbÕ*§sˆëÉ'êèAgÞa"öoŒ‚¤Ž»í—LT¾M ú~j’·hmšwå*rŸ‚‚?ß„{p}™r¯+Ñ£uŒ“úi1¬`G.k¹?åc“’!Íešñj¡dø‚ÈUUW¥;ôã†lbƒµžMêÈ^I+ð«–âTlÉLr¥‹ÿÖ‡Ê-Úñ&J*ί̉˜Ä‘û‡ý¬ãú=|ªÑöspµrÀ#ˆ¹²’¿iM:÷ä>ø,„ù¦ |º§õ‹F䪑²ò S¶ÄŽ4l¶2º%¬Š% Myü,Ziàa,J/ݤ]úp?iÙeCjüU™ÞÇ_Ç­¤]Û[ÆŸÞF… ®G+ÅCõ7D?ì1ÞÊŠ $Ú›MlqPIÜ)Knkû!ƒuË`/oç5Ïmÿš™®Ÿ“űB’ü 7Éã*¡‰4d{ý¯‡#ÐøÊ7ö:Ö Rd5ufáÅH Ðßåb H6š´)!F^*á"V‹¯o¶(?Í—+6Éî<ÒÝ2BšÕÄO&Δ£PΦ›~ß©–äÞ«ÓLcXÿG5ÓMÉí˜Ã;F -"†žÌ>ç\¨sl<– —Å+F"z;¯û±NÕ!¶¼?ÉÁ#ºaÉ q<(—ŒÕ’P#š>A·`àJ¦¿ ’W$á{RÃõyç´Œº1p^& , ûºõû_³’Û›¢ëÈ‚êÉ!‚¸ä¤Z8ß…*¬OÊ¿µËn;¢½B•oâD•}0òƒÈA ¿FSJlÀeP-³ l!ŒÛÅé…’OMЂA,¿þ%3» —[IÚ¼kÆÒDÒ ’¬È„þ!· r$–Q 7·h4‘XI,U â´”Tõÿ‰eƒsLÙTª"¨VŽEôÑÔÔêP0¯ìŽé’»,j‘sŸF8­¡©únÊ9NHc_ÿ ‘ç¹d6ÙR+‡¶Óþ?Ø!@P­E>Éû,Ù“"xbÕ°’'Y”jeµ)½zÔt †[ÊÐ6…‚€ÊÌC(õy‰â_æ¦Xk“hßÒ7?£WëÉ4ÃÊI$ŸHŽE#‹ùR‡ ý¼qKýŒYB‘zœêºLp‡tyLQJ©¹NKÉØ¶Ã¾WŒ\ï¦òÿJÎ{B’ÝæUsêŸN4”8Ñ•Z.<…:¹#-–ÔÀsE´eíÖ$¼Ô>áÉ’Àø†£*&™Rµ¹»<œqPe;r@MvéñScƒ£+Ý<‘ð[vÄ_™Z¤2žç—ÃOåã’ˆêÆG£NÂY]e eXåäK|44jmû[â#rímÚü1Kâ09 hÁƒEꟋáÁ#ºŽJ—VeæW„* [â% S·~-ÜûÙÏDŠ017"Òʪ¸JŽ`ý zb‚¡$/õu¬hy@6@Û†þ\•óE'vk é–ÑA$rI#Ê”z°²‰Û£É#’¦òpª F¡J“ÅZŒ7ä|~.K™[W›GU8]ùÍq1¡%-¹+4åàxü8˹¼¨]«$1 W‹Zô¡é‘6R+Óê­é –*5'á.Ô®ÔÆGue)'ŒAB"¡e,z€1ñ^,;áÞÓB”5™ãv‚7Œ©`îîû*îH• ýŸø²'{þk ½ê ’«È ܃®æœGÀ{·'ý¿äÃ}X­}3I4Á áÔ(û+µû,…2éJ׳\‹H-b/ëȃ⢔%–£r6eý•ÁŒ âóe2~•·D‹$Ž4€%w<ÛˆÇ (‘Ú»ünbY(€5R›V¡ZE;î õËl+jL§¾žkˆ}fy̳¬pÏ,„É5Z®d=[£õr±ÈÈóú™ÝíÑ~±qk1ŠØ³iŽW8îYÂWUnQ-¯DÚ_DŽ*À­ao°Àïñ'Z“Œy,¶*7ÁP\#Nî~ÐBÂükö²6Î|÷ opÓº+zqÇí"[›Ž,˜ñ;Ž+L²;0µñ"3ÉéÚ›qSþV7ÝÕè̲\@e,€ >#öˆÛ¾@ì²ï%šâõQCz0y€§Ã_²z”f¹aF>ôdVßó–u‹Ä«Hõ&2;‘A¿ì㠌ͺÎ{«Y¡c;@B¸g·r’ˆ¸|1ÔoÅÃt¯$Ð4£¥£¬îÙµõ•ô¦XL²ª1!˜*£ùŽBb£C½²Ý”³Z¹”ßÏ$EØÆâ%,  U*L‚¿^CýŽ[Š4úf6JeÈ7‘¹z³¼tø§’òÿZ»ÿ*åG’A[^’Ìd+ðô’2vVåJ|+‘½ÙJêÑ*Fà—àÞ*U›ˆ  mÐWý—Nû&ö´'†!^2 J’zŸò¸äÈ n»w7-I’ôѵe}åþJŽ+¶=>ôžhø}?®+…Ù"‘©¨ÚŸivä2©›!ÍB׈cɽhÀV•Ú¬¥‰Nç—ôÉǪµÌnFáØÊŽp¸ÕHê¿ñOU ºDQ¦­ÊÉŒ’¡†Ò øü¿â9‡dÀnŒÖH[ix‹0‡AÈÒ£­M28·,òòI]îV€QVD‰‰ìƒZ~ÏÅŇó6d²ZÕ"KŸÒP@Ó6Ë!™‰ õÐkûyôß{.¾ä,RRö1OÝ$"ÅÕUÍWŽý}òPä‰Ñ`”%•¹hé:(25~ ­6¦Cä²É´BËiy’)=HÁYB“ýòƒBû7|raqžEJéLM ÊåÖui¡ ±%iþ¯jdàXÈ#4?@ú„Ž ©´4©TCØï•æe‹ô e‰JÀÐHíöXCJGê m½qã—ÓVNhÝEd%ÃŽ‘-@«¹¯/ö_Í”ãæÝ>H]:8þ°Y‹ ]bA¯?›rË2š 7nñîäº7 Éé³ÞJÔTצFÎvinÜòäÜŠˆNô °ØÓìµ2RêÀtO¤•x!x"MÏÚâ §üÌg$%zˆ¬ó’`P"„-kE¥*>öYn>_¬œÔHôâ—å#zaM ’YÁé¿òäúµ££`©*™}'”$°qØ÷ʈnj,·‰É§ *¡¡˜øäo•2ÓͬrY<Š“RVoD3#)<È&•5¥9)?gü¥ÄTšDC3‹™•ŸŠÊvëOÝ•ÿ)—¹Ž¥®-RÞ5f?°Sö˜ô¡‹‡–Ì ìšÚNÓií/Ã'ªäUº…©øGïÛc•d*lÅôÚñƒ\[2‚Èœ‹cÐ7üH.Lr!‰æ ÃzL­6÷’HWˆ•QZµø¾'Ëmî`m±˜Ú¬‘«J¡J†RkJ“·ÄÍöiöq½7Â4Ó’*”`ø€r ¡9D>¢Ý/¤ }^w2ÉÈËjÒ;…#—Ò½,=Í`õB¤MwvQ“é:<×1«à­i¸ å±mßdòÞFu¤äúQ01+­ˆ§CU ”Ï“l7)k™ N’B¤LÊÍBï_ö#íeƒ<ÊY§ÈÑ$ôø´ }–ìĶø~Ú\•}ìßL»D´©FâåITµX*iSö±âæ¤rF…º’  –ˆíp óØ/*Ž<Æ1áB%+Ýgýe"<¤’@Z.„ “ÓåûXeȬ~ ˜Êƒë*ª±[ÃBÊ»£HhÛ{š~×óe€=í´€GfB%ýÚ±Z¼iR µÙį\²!‰+g·.$t%@5ôùq†íNÇöqâZLa’1z–ïÎE·BÈþ§. JF‚™P6’¶rÊñ¢þéQP*ÅÝK2{ªþíà²Q<¼ØÈn|’ö‚ka-›ñåh± Pj¥d!é4û"ŸórËdAßùÖÖ;¨HÃYçn3γmñU ‰&|–#éÿK3üÔã‰Ü·D c/*ÐCFÜšÿª¹wfËÖ;¢²ÑDq;³,¬hE> ¦JT×PÓ½)¥õejDÈ‘¼Ôïȯ?kÌ¡ÞÿÿׄLªLŽü%‘ý^‡„„n»~ÃqåCœˆ7·pzÉwù£×ìȲÀ梵N!Z‡Á²š²Ú ¶2ú´i$rï§ ñhÛŠŸBŽ/’7É„jí©§6º‹½Ï(AB’PÒ¡Å9†°ôäØ# 9QÝRöF¶ÓH™G¢YI JGPÌö}þÖJ©oÕe°Ù r`ìÅ^9””^4®*x‘û'$,{ØÓ@±ÁaSX˜Ô'òªB±èßä×+”½M‘‘Ü¢$‘5SošcêEÞ‘=ŧ¨ácu"DZ•añ?›!sDÛ*½¼±¬Ÿ¹T($þW€m×® }A sE;´Yc×pEãöYi×ùpJ¬2…Ñ[È :C5XžšAF¨c]¹xá#pŽ`¡b[xš(ÃFBÈcãZŽ@Šýy"O6UÈ ypªÅåSj}Çâ J¯Ãöâ8%ô¦<×_‘K+,~šÅSZTü}^™½ì¦EÒ•£ H$IUÒT·‰R-¹ÒI5äŠÝ?ÊË%¹ÿ9Œvù(Q“Õš:•øÌŒÊ ôߊ±ñÄWDn¬ÛO°·¸J%ç¦MR‡.Fž+éŠñÂM]Áy#\Hä…cVfšiÑÃŽ.>Rw£+Hr Aø6ß{ÖÆ¡LäI5ç#ŽÁ¾Öœˆ26ĪZ×µ@@ZQ@¼oŠŸ …‚ŒMnžY‚@«%Cüµ“…1 ¦RsªDQÖ¨íz ç%"@äVŸ2ó¸×¥–àÚÍM’{îZB¾œq²²’®•` èB·Ã_Ú\qšé™K.H;A(2¯&Y#n,”éFý‘üƒ%>Lb7(‰äEšR#¸WVôÆþœ•*Ÿ>c’dÚÙÊ[«7¨öÔ4ô‰DÌ)µ)ñõh~Ï,I¹"#Ò·M¸ŠF¶^cÖ¶øhÃ’…riÄñ­zᯊ"oà£$ò ©ì¹Ó€«pRAáâ»×þ$Ö‚h»M·…ï•‹"È«ÅfápJñ¯ØÆRÙ Œ»ghî˜D]"ø®w£­Ç•zÎWÙ'BÒM¤Ï"†­hèÍÄ¢ÔQ7Ýë· dçÌ1†à ¦ø£fB}(¸Éød@ÛýöAZ´¸ôc{«\[É„^ c43–äßè¿ }–ÆDšH eròIÊI%Žbž¤4IÈõ"Ÿð9)Ž^aˆ?aFÈoVÖâu„¼[%ÉU ±ø(I®Ì§ýŽWɶd¡´ù‹fO×ýþ‚yQð×’¶JCka½)NÍ$6Ñàð™–•ñ4£÷¹GDn–’Gk–9ˆ|;†Ãý\„Îåž1²ÄF#4£ëŠV¤‚hG}‡L™cH½L¼f6/OR#Ñÿ­¸¡=9‡$ÎíNé%Št õ~4P µw#ö›ùˆÁ ÙÏeõµ7å‰Fȹ"¾¥+Oå¡ÉBé„À¶¡áú:핲|-"÷c@t<_öpǘAˆ}5õäUcIHh"H&¾5é•Èk½œH´ÌS=Ñ~,ZÞÝãvÝ•v ñVð9ly{Ë_èV¼ŸÔh¡·äñˆ×›|%X_†›ñ§Ùÿ'"zIû–[G#j0F‘,$•‘V¥P´ÀÍw|žÕîbFiS¹žàÄ®Í Y£åÀ„EJ±á#€þÎC Ûáþéœv*q©xžáÙmÝ™äxŽà­K /& ç³.¯ÍZBª[ªÊ­ÇªÑÏ"Õ²m² s,I]9d±ƒöjõI ìI%¾*õêóI䉱¶´”ñ’Ew†Ü;§í«W¡¢ÔŽ?ëdI­Ç$Ðä Îw(Oô~5bŠ9pu¯JšÿÃa#d^ë¥ôVí&ä#:¨ê>#ðÕ©üØÇ’J.É Ò\zkFxÊ23ToSJžƒ€åŸ0έ++Hð”‰A¥XãÐoûGù[${Õ&CtSÎ8¦!·f 6£R¼:c½£¢¦Ÿ ýmLŸð2=)ÕÉ5ößoæÁ2)”èûî-h°R0ûŽ"Œl‘;ñCÿ•ÀîÙ0’Ëm24Z”¿M%`œKä@íÓöòùe¢<‚‰i®œl}IEoñT¶äöí_ÙÇ'$A§I=Xâz…nk šrVFç½)ÉGA†×"¦¹¥c.¾šð ‚ »…+‘Óùõg”zG¹¾1C¤Dìå%“‰ãË­›žÛã3s+Q RMrVhÁFJhUx”ø«„ þ(—èVÒÝE½Äƒà$0UbXr‡ìñµü¸2ŽHÂPŠVxà…ÉH„ˆßƒ•×Ù¿g-‹a"›\úw¬V²•D’}ƒµJ1@Û1ã°°Ý!{.•A /&WoSPzÐxÓö²Ü¼šá±S×ý_öÖ8é5P“¿,Žyy,´”µÂ\ȅ،Ħ†Œ* ŸæOƒâýœ‘6aÔ'°Í‘+É>Ï*×áÎsšr#ºîè™IeKFHä¤SúçáÉÄPa>h%+#é´j® 7¢€  ;ŸÙã—_ˆ…-湺˜!dxÚ4¡r޼WnÕ¨øÿÉÈË£.›©[HÇ”{„¯©(^ ž¤²ÜB}ýÛ©àÃ5ëMù²É@ÑD¬¦í=ŒR¹ã¨¥#䣽ø«ådT6]…+’?HÅð*1’µ¥’œ‚í³|KOÚË«âÀí²f5„‘,jhU–W¢•+½%äœrƒÎÛ£Ê/êÈ­ê,ƒýŠXCN.M6C“›T…‡™¢IÆì nn‚ƒš14n¤ž2S¿ù/…%cDŸ£4kꕯ 볩Û<䱫VÕ>®n>»2«0r” ZÔßÍö²8ÉÙLÉFUD³ºâ zr*s ©Œ±*§örR»ŒhÚõ„Vw"ÖF2‘i+Ô·$tåNG¶à£­“‘6}ìhP÷(Úƒ ¾œ®KÉÆJ­X-+É~˧òà•YXò zr(Õ.“€!$%(Mi^US^µgô„ëDê’{yYSƒ5Tî>ÙøˆþSÿexú³È¿GÚbeuS3-PÕ¾Ð"µÛãÿ'áUÇ'0V'b¡rGc<æb”’6aJNG+!S׸匨‘Õ`*ÊûÐ˦„áð$Š@$Ôoß°åü‹†<þ‘Ù§Ân5˜¤ò«;S`ˆ,ý)¿,²R sí3Ó}OVêD…:½r©*+ÓÃ1ònté$7Õ§QKs –Dø‡'.I¯ÂŒ>,°÷,?ZRêP]•øéV‘cøúØÌÐŽö¦†µ–RI˜ÈÄp ;ÿÁdˆ¢ލ™ ØÔ#¾I^_©Ì¦`¬ «úd-XÔSoŒÓí`æ5êHïþj`ÖÐJüš1é»ÇhŒMX”?¶:e2• o„\¡ÕaFCí²¯%ªŠSöN7Lµ¶Laq$P†fôê€*ÌK;ž¿a>Ïòáý¨ô)Ie #“‚¤î¦U"µD5#‰ý¢>a!Ϲ3;Õ®fwºOR¿X BiB ¯ ìª{~ÖÇo%‘ÝcÛĈfix§£€ÛÈB¨ï»2–ÆÉER´kÜLŽÒƒBHnDq"éðàè˪+P¢Ž¼UPRÛ «T|›÷m•ÇfsKÙ%q,Žã‹Gñp¦õ Jû}¯òrþM¤q¨K79V3SV Ä’?Â26É7´oRØÃï"Dç'Šü_h®ÙLù·C’Gv’HÍ<œÚ45J(¯N¹e0)}ºFVÙ™7äÁØîVŽTmòËeÔ5ŽaBøJP«/Æê⋳T/µÛlG5*ÿèŠ=Cj¡OîÈ ë¾Ý0©?Â…1:Gj¬ìé)•^:\ã¡Eÿ€û,rGrTlêsªHúmVÙ’&´ô‰Z•ô\€ ½¿"ßd7øNıeM;Õ†óë̶·ú*ìÁ¨’nkUW6®£Ô‘ßüïJÌË6­MêÈÏ!GøX-@¨­Ž" ®ŒòõT”m##3)*é6ÇfAÓ­8ž¿Í‘‘ä Às*W24Áª¾™ $‚E?°MVµþW\”A´LôV†YRÒÔQX;´f”·âZ§û?òp‘»“¡¦¬±jn‘ü)s$ üL~0@ߺ¨Ã-à°ÚHÖâ¿Zr ‘.„pxØ0# øBü_ÙÈÄžVÈ‹7Mi„*’àGfjT–¡'ÛŸUÆckD9£oRSu'¤VÚi–‹5©’-"’Ó—•ŽM²ï@@c{XÛÔd<ùA)J”’vAN?üZmª*ê&_DŒèÀ+ F$ýž4Üsp)ü¸û‘ËšslЛŽà8•ã Â1Pš‘C^þ´¹L®ömHQ‰ jðŠE“™<—ÒrCÞ«_õ²àO>¡ª@ Š´¶-qs{%Lmok%ÁáVª…~Òw'ý–F7Eœ¾ €…#úÝ”ñ $hâDpjQ”‚ƒü±¿æÉ(†±Ì§zGèɨŒwDcІîÛãL1ú¾ ~’™Ø¸ŽÙ4œr^»”R½‡|«!ݳ$¤(«Xî´¨AË«2‰·?\Ô™êhò¤\9¬œèTx”JŽ4ë×—û,§¦Ì›´ÊÑê2 “Ôô}6¾ÈTt Ê£µ±QûXŽWïe$¯WIníˆ n]ÅÓb=¾ ž9n-¨ô‹Lù®ÐºéÆp@&Pɬнê~ÎßDÂxvMžY}K`J.fš¸•øþÈ#•û?Í•b’|Ûr«Ü”_J©¦Ý’Åg–b OÝ £•SüîÜ—-€A®Gb«¨[EÊ’#,d„â£eD*¾˜§ˆíû+ƒ´äÛJ#*e1ƒÔdâC%#¥wvø@â.¹ 숱Kˆ-î,gFyÒJ€sÊCƱ §!@7fÁ:;ÿšÎ Ýœ‰k{h„ÊV,`,¤;¨7ʸ‰6Øb)eÔjÂ>q -cSP}‘¶Å~/ø,=Íd+I÷z ©Ô`@sÀbiןÂ0TÈjv^¤pÏ3žBJ¤Å±¢PMÉg<©†@lÔÿš§ i"åÁDR5E8†bÝzSìâv(…ñEÜGl\4€FÏQ²QLŠcLŽãrÈ&sž/*!wbÇÐ Ö¥x²ƒµ~Ë!0Ï ád–5‘UÈ?Uî?âY8‹k–Ê~‹erO£We4äßðù+ûÑ_r:ÆEŠQX¬±ŠÆøË¢ë¾ôýŸåÈK“8óLuP@Œ/0êøˆåS·{ÿ.U»" é-äm*’“NàÈM*œ Ñ›¾ã,E«ª Âzl‹é³OûÑM©Åxò¯óŽ[“{÷5Cj ÛÅ{.ª~‰7©#S`§zÓáÿ+ ádA%O[’D„Ìc@ªÔrXb¯EæŽÿç'<¶ø"¤Uý°7Á$n#š."ƒ¹ß—ü& ÞÊÐÒåi PdU}Ò«^¢¾ÿðÙ`ý-RMÞH¡œ:†õW”œ˜RQ|:sä2¹nCe.I¬Z7BÈ R­ð!¡£Tx‘þVN¹–¾à§j—_^-Õ؋Ëâ¦ûá•PßdF÷ts¢i’[[#³±«÷)°°åûEÕúþÆO­–!AnDñ£IÂ䞀|lûô(?ŸC³(ìTÿÑdIMÛ¿ U˜ð e%éßÙkÇ*öm5JM+Éhó\°–ŠÅjÇ“Q ý#áÉÄo³õÏ ­­Ö^"aÕ‰øƒíðÓ©åü¹wž«/$p‹™¥RG*À²o°OüG![SeîƒÕcô}(ªÍTX¹ÊE¡Uný›'ŠVIazPöž§Õî ¼±R0Û 0,XÚ«ö¾ÖHŸ½‚ûX%™¤AÇY›á&‹V ýµJñb¸ÈúGã«(R…ÑŠ8 ôùȤÔ x§é\0ÝŽE;ƒZ¤j…d„ ã¢ºŠÀ§Ú%y~ÏódãwðcúÑsµÄP<|,¤ÌNÌw’â€o•@ul‘ÿуE‘4ÌñŸN1OrÛé³&ëÍëyªè[ÁyqI'„Pšº2_µ·ÛSñÂã*#¡PI÷*B#ý.¢ÕÂÆH™¸0¢b+éÐ÷Á¿ hæ¶U‰MÂp¬É¶ÈÁˆ+·e<€þ\€—s27ݽ1ÚëAš`ZÅÝ—Žß»n"Œ6ÿ[–K&Ò qïOkð@·L$„ÆÑ,‡sf⼩B}9GOålbhØÿ¤j…«éS\6¬²«z†ÖâE` b £o²²}¾_ëdgVßÖg zwþª¸“P™n%GgBµPÜyÆ>ËŽ5哪ÞgâéÑ .#OMá“ *üÐ0*@ß?kù°^ÃÜÈŽnÑgDw…–¬Â¥ˆ&¡©°¦Å¼ ›±Æ)RØ+±¶™¹JY½jP—+à)År'–ÌãÍ_Òg–äˆg¸b˜Wz…9}¯‹Ïܰ·CÌçÓ·.û¥1HZµ¢ýŽ5¯À>ÏÙl•’XU+Hïam§ã#ÉÁª¤"u4æ>..½Y>,–׿sé’Ê5¢îx4޼‚Ñc¬€–4ýš6M_ªÑWìæT¢ÌQIb{ÝÀÍ•Dì[d97`@k¡6Îè²ñ&€ðPz’’"bHÜðž¿ Iø¹dkÔ<™^ÇÍl†Ž¨öôú²‚ªîOÛñ·Úë’öêÇßÑ¥4Qé÷ˆªË+äàQ‡Ùø‡‹WýŽW”\„Kn3é%«)iW =&~*à| †£vmðÊ7 90¤‡{G/.¡^gGwV"¢@X¹è7U«e‘•oÝþõŒ£{'S,fÚ$`V­€n.ÿåðæ-›%Èè!#ib¤9,}Êíþ¯§–‘EªöDiÆe½RÆŽ‰^d2ÐÄì»7ò`˜ôØeêQ¹)6±h “ÊÆ‘¨ÎüO~dü?³‚"÷2»Ýq¨÷ 3*¢Æ@¡ ÀruRzq”äbX˪‹ÃrÒˆ¦§î¡†‹ÐSá_øWøOìá½Fèˆ –×RF&2$*+UABAðôÅF[‹dèA"•­¦,V0¥"B+@XŽ¿¶|p Q;&A/ýAâ“XÿpI”V*ÀŽžçŽK‰‡ žIZée ´¨$w¥w\m)ÅN éû¶'ÙÉQ· E(7m²©óm‡$ ¸ã,fEcV;ŠÓ(?k³örÐ;ÚÉ6—@Þœ0ÑI‘C´‘ƒ]É®ÃÇ,k*NJ•° 2…«¹4ø¼k‚í'“‘Qt¢¼‘·Rw4$þ «ÉcÉrRÊÚ!ð©/D Š„Ðû6$Ñ,£¸Cj¾œ–°ž,¤Æ¬ÈOFaRµëÒ‡%FÚä6P´X ³6ñÆâÜ!à\R‚J‡•~œ”ýR¿4G`‰pcgo†—,²V´4Ûã'"(’Y {• -É…£cXÕTó(¢‹AZ|5ø2q°bMn™a±Ñc‰_Q«§aÌð=©ßüœ§yL–Ó´tÞ¹Ó죌+¼¨¨ÒÅ%é×§á’«‘=Ìn¢•½’¾ ‘²*¥¸ÝyŸœBïÛ¨3""|ØVû*ùŸœ‰åšW‰¸I-Ϻ;.þßgö²¬ÝíÙy_r^>µÊAöJ†[®'ˆdzW³å–€-vA ¼pŠͬ +FLКÁ£‚¿Éö[âÿc€Y¢hX(­>‰í¢ ñú’3«lYK%B… ýÛ¯/öX2Rã§ÊÐÒ\%í•ÔQĈd ØïË#½ƒÜÆ[U&³@ÑjÊÑIÀ̾¤aÂVNDÆO}ƒ&R ÇvéU¥ñB¶÷¶r[„›êב¿í$»ÄÕÞ›9i²- €AíN[±m OŠXåX§~&(•ÕE4‹?ò®WŽ×ó›'*ø(‡,â‘£õ’GŽNCI¸r’z‚2cê ?„¡/áú­ÓÇ^qÃ#»qnàÓÖŒ‘Ý0¸˜Émo44B„|#4б޵ÿ…È»aä¹cõQZÔ#ÛÊJÊòm"’LŠÃ—í/.ŸµŽû©è»÷isÊ4’ÄA‚d•ÇPËC¹Q¿*ü.;…¡²]"ÔÆ²7¤QÈ‘Ñy€¤Ð^»äÀ½Ú5Ú‘ÔÀ••â©à„QÕâßá§Âr‹í¶VË+ݽ=ËXH¤4œyF¼Îâ«^MNŸÊ¹^M‹læ-)Ö ¶¸ºâáݨ¬§â44^jOÙR<~Î]Š\!¦bʬŒ%Š$te¤‹Ç ,øiðïî2"¿&^H‹¹TÞ5ÄQ$±ÁóPÔe‘ªyŽ´áŒb8wD¤nÐF8äxlÚ6¥Ã†“¸'©©­j•éûY0MqˆÚé1ÕeQwkm•Xý7 C!ýª}¡·Ã”á ›3niÚ‚É5Û¨‰'¯Â´û5!¶¯Ä•ÿ‚l8Å ¾h™³]ýK‰®Túr†xã`æ£aȨ5îxáË/H Œz­|©ßGèÓ÷ìòHüJü* ~ßì׈-ÿ€Ûú¡œÞéÄÏrÏrFN*@äæƒâøöÈÄŠ¾ösÞH/5ÖdVøˆÖVNTàÙGÛÞ«ÓáÉéE”gä˜JeýV䙤F±!þ_\®½lÇÒ¥*\Ã¥éÒ¸>›{T’Êi’tÖv™Jc6ÒGñzL}N¤… uïþCew¸lŠO¥'9bhÉ«Hvf£`¬<+JeÓêÔ:"õ¹’pƒ›'Ù*jWˆ&„~Ê·üW€nÙ˜ìÖ*L·.¼}FŽª(ªñ¯Ù-ßö°åÙŽ>k59ž(¸#ī†cîz7óàÇȲšîVâ3U¹8z!¸ü%XõøXmü¹iÜ4‹!Id`ÇŸÛ‘kðš×Ä{S1‰TE$ÅÖI¤ˆ³²4Ò¹c@ aS_„²À([n@j)Üp)ÈÌ#Û¥@í_‡%.æ ¯ÉýŠ8‚ÊUÀGBÆ0w¨Û=T’vµŽøIXåV¦üJ „âßdŸæÂ7äÐÚݤpC^JA$9â6¯ŽØšwDHOÕã,€c÷~Ê¿ð¹È¥QM3^ÆÑ?¥¤„W‘vøëĹxš>Mf[§·‰o>*´JÄßöiû'â_öYŒŸâß*à4„»ŠÜ^Èà^4;ŸL×}©L1&¾(ðJCIH#«)øZ…E#v ý–è?á²ûØûšˆÜ#ìc rÕ"&6&‹RiÈõ®Wb™‘º¾©?Ä`PyÝÚFßfÚ›}žTûY^1ÕžR•Ä$–>Jê… YK åñôøWŽYÖš/5‹q2Òt™Ë»YIÙ€^mñwÍ)–ÐÜ0³²u¢[Þ 4Þf0€K7G%b?—íS)ÍWðoÃ{ûÒëé$fC;ú®ÎÒqª(„¨ù|8Ç›¨­ËEmÆ/ŠT4ŠÛñ⣷ì“]²U{0ä·ý>ÒšÏ6¡ u;:úÇ÷ƒÄ2¨çþË&ð¢èmüJf9Œ¥ôäÀ°Rüv© ñµ–½&Ksõfn-û±ÁE(ÄDmÛeoõ~ŽcÑ–5%ˆËd’ÇÁ¥ôT2¯SV'á'³Ãd õSa5:ڽ܉m)2¬„²Kû±@¨Zì[íKö~"øX{(ZðIÞuýÔä:€I%ªüF¦¼€(ÕèxTˆô§ùM’<ØïK•!Xdg‘¥^RqQñ(æ ¿êÓ³‰<»ÙDsQ¼”B±ò–3·-Ã*°øMQ×á\0Æf—OÆ `õe’HbWŽ%ïÊVQF=:¥i“æ T§¨úR´)ž ´!슿ëep4ÈzŸÿÒ‹KÊ+ÝV߉æ—;‚+¸p7eûq¿òç€{‹Ø“ê7Ü»KŒK$Vk2…¸‰”,›­BUÓáûB‹û8r,÷0…‘HK^ %¹oÙSo85åMøíþ§Ã’,Bi«(ui ¬ma–5»Žd ßà8º•Ï+lw«ZÂ’ xÆ=)Rœ br´vHäFü¿g%.TÇ}I ‘ÈÔúð¹#‘ò–&µ Êâëä†à¢B¹P,k$dQnèüËWô·íÓc·ù9Y¦Q~h@c”D€DŸqŠ’HÓ§ì'¾ô–&¸‚:eŽ!x ´–÷ѬÖÎc™MYËãÕÊÇOè–ÃÏúÁ.†B BÔÀ§‚«óâh çoÕѼ2â‰øwÅ“•ó\;ž2+I+((ßÓSÁ”üYVÔÙ¹Uº‚FÓʆbÓÆ¯ QB¿ðT‹›ûÏø\ú÷P=Õç£5™šÎ.|ÉÞ‹ê ²ïÐò•‘=Ôî6Cé“ÛÅ"z˄ь> X2.Õßvø[örrmÜXÇô„%ª…»v’Š„Çû€jUZƒ£Tüy"l1ª’;Tô” -ö=@ Tž WqÈeQ7m³š²[xžöE¬ÊVŽ@V”´?Ê;|?Ë’™°ÀU¯‹‚é<«rbhÜwÃþ%’5ºˆ”Eäfih¼ÈÖ¿ '§ý“”Ï·C’\êÔWX¸ :­_cí–DòbFÅ,¶  ~& QI߉¥FZÕKe´QLAg âŒGͶwI佤e˜ÔS‘Ú•ðéSðã/©cô¶íÂ_HÔÉZJR†´c^[àæM²¢“}Ø,¤¸Ü–¥Pô`B“–×"‹ŽÜzw¨ ’¨ ‚©% ŠïJü_ëd$wÛ¡dÜ‚VõµI"i»+œBV‚› ¨É£l² ZY-¤h$ªLö*§ùA/ö¾,°lwciÅê[ÌÖP–âHø˜)¨Hãýž‡ão†™e¾¤;z÷ÖñZ…„»ŠIJ³’w*ÔËH5eÈc$žH Æ¡øZ…~&¶ÙQYªntyšÞ7(ʳK' Ëêýš…î²?ÉûMŒG îÁAM ž{iËð«áJó}ª|5ʹ1„¥t¾à«ØÞJë$RzÖóñ¯ ÀIZÔq*ê+‘˜ —yDhþŒv®—$'Kv¸QSvýÜŠ”KÇÕÿ#ßE…¿%4‰–ækiT£q äöXS$-õ…–cÆœØ|Kñ ¾Í|9/ódãÌ5ÈsG\={Hʪ¢§Á'R~ ´4ùòþuäÙXê[%Ñ»Æd»’**ª…˜5yqc¹ëðQ÷¦BúIœÏ@ƒŒ)‘=PU¯5R÷mļrá¾íGš,Å$6ÉÊEFŠIŒ,ÅIW**½:•9]Ù¶]ËvWµšE*‚ˆÂ¥‰û5¡Þ”í–`wµ²½™‘¯l¤°2#H “N¡iB ±¯ù8e´JbwÖ[fÔ¤”î°ú@¥äÎĸb¿Ê»e1&€m•J^G¹œR¨ $ŒÜQxÚZ-á²ÃѪ(þFÜ+]½}'â˰bŸ£?/‡—óAœM T“—ÖUcømR&HãsÍÄaø‚Õ ÿš°u,º)[‰š™b&æcTe éÜüÔÙkù·™GK¿èëdçêC/¥9R‹B>  ø5S|ŒŽò®¬ã¸”)À¶Hìet0ÈV‚CÖAAÑ«Ëâûl…üU«ˆHÃú·¦IS骰ÂJ¹nùV’,7n§Ô*L’pqéÇZޤ)¦ü”0I!fJ#<!v‚ ¢({ø·,®fËlE ä†r-ârÎLrè}2ãíFÿ‰d¢-¬ºî­1x×áUQÌ5>$UýÛáûUÃ[ óEéÁŒŒ¥Ï)9É4jM?OjÿÃc*LFö‰¿Š±UBY–ˆ“}¡Ç·ß”ÄîÜB]©D%¿‰¤nnj’‘NE»oÛ.‰ñj Ú e^ZDÖ(ä>›Ô«Vª~œ°ý%«¨VI-ZY‘U9ÌËÆª¡!øxòfýœ€Ƽ™ÈÑSó$Ü5 k•â·-eJzŠ8’Ô+ЊTdôÂöóFs÷*Ïm%ÖžeŒŠiäµ(D T©ùuÈì'¿F@\E!CÍ7Õ ÁÕ”¯EÜ©-]?Í–õj2Ù;Ôa)fÜ£%"Ä✃)ø‡ú´ë˜Ð> ä¤¥Z{2ÜEFI)4*n+^¿¾\‹@;ªkO/ÖÌþCû¶>4Ý›éÿš²8†YŽîÑI$àÓ+! @ô¯÷j>ÃwÖ©ù­Õc)b­ÍM@©Å˜~ÑoÚ¦ |‹9ôjÚp‰eTFI¤ˆH44ÿ‚ÿ+'")ª<Ó»o¬2üt»| )aöV¿³×1däA!“žR#$Þ'â*QZŽÆƒöwâ2b,©Ê°Xn¤Š>kĽ U˜EÄT{¯*ÿ6FèrÝÔlîK§¦ÁUX2†¡–0Þ›n?n»ñɘº<{¼×v˜*´m)øM††Ÿ´?â8ß$±W†4DŽÜŠ»¤mÄÐWÓ«oøo™¶q§ËÔe‘c(²‹‘%¹±§þÄQFHìÄnèDŽx£€V¥w ¤õ~!w\•ZƒÑVe- hØ ã-İ<‡0²Õø²¸ý{2?AoSf}I ª±—&_Ýׄ`-Uv]ýò"ªƒ#Íiy1¼3N„ñÊÒqPhñ­M>ÐjŠeÜ"¨tk&Í•kSê]HÒ <•ä6ãP©#v²4> ˆ´N¦“Z^\CD@eM”+Ž‚•§¶C»fO$¤ú­ oR«R¬@ZŽcq_Ù¦Ymd!—Ô”4šHãgXÙE[ˆP TøÿIJÉP,¶K¢Æ"´Y]ý5à. h}e0§*·Ã˜Ù—#h$¦fŽÕcEX¡ŒòQñ|`ï@[ù•²â–®ˆhE!23s‚PÒ¤9&Û©û;ä¤X…]N'õÂWˆX•ÐÒ‚”a^›×ŽFƒ) ÊËoPv³p@€@BäC054TÚËÖM•kn+§Lì (­øK"¦ÎFwaœw6ò»†E=:l@àŠh€uÊÁ»2ò(K¥YÕTH¾¤„câoSÓtùþËd¥ËbÆ#½.¢K»µB>E0} ŽY·Zÿ(Û‰ËH4ìŸ?ÂlŒÅc<•A]Ìq<{š­˜ã¯¹´ò+³mI¤27^JÜxÆ€)ÜŸø” Û¹š(€ƒÒ™*!xÅwª“þÄ“¹då#Ñ„@nÎÞ1jÑ QËÉA`FìAñßì¶ ‡tÀ]únŽdæêî„’V½6þn9pˆ¦›Ým£D‚EäÒ£À|,zïñnßË”ña·‡p¬ÒúE˜r$–URò]–€õND|8mðeuoÿÓ‰ÝËrÒ,’¯ªÐÆ«*Wí¤±Ÿ‰IÝ ¾Ë6q±“×Èžkê¤Uf Óš ‚HùplNòGðþ=*>›<Âr¤Ãr©4kS×~b¾+ñqoõrtĦ·×0¤wƒzéÂé¸ÕT à=Uo‡’åpólÈ~åâ`öÎä±å)+íR«^$ ŽôÄóXî\'ļeE ¹¡ÙHê¼[ƒ³û(Ù8ua3É1 F…ãY Œq¯¨»-É l«¥w¶Ð±ä‘Ë naTÂ#˜4r ­d©ùÿÀå°®]í2¿’>öö^dXò  €põÙãö”:üM•ÄX-’•l«nâ;›Gî–RPÉ *M "´ kŰÈó b9{ÐI kpñ Ù‰­ké°*È+ö™—ö±%ktfŸÊh’RÒÕ¥BWâøîŸ§îÿ—–G%^챋 Vй¹’Ä©)v Æ:RU<”‘Ó~Òœ—Os©} TºQ*s²€À‚XâÀ)ëAþË-±a€çEdQ¤š­âsP‹'­(øG"§¸ø[¾ z¹3>¤e÷Ås)uTX¢•y37ë<¸åb©²v±$EÚÈ9ÙÉ‘FÁÓ´wU*Ü–ŸkrÆ!‘ÒÂQÈ@¯ÅÒ@ÀVßõ ®\Ãd7 ª–Z0¼€ Ô£þe e^ÂÙ "K…<^”<¨é×cL„r@Ù,)<“J‚VvàRáQ×-<šîÕ­íÚ>S‚ŠBA¨&¤qJ}¦ßâÈȳ4¶·XZYM(T„¯ªkÈ'SZ÷_‹áʲo+ïm†Áeôe&‰­@v‰Ê¢‰‡¦µçÀÚÿˆäà:Ó2…‚I%R8á+s’"~MNç¢õøk’;-Úcio Ψæ3êDYÐ) Øµ>ÖU"kfqýë¢ú·ÖžíYÈ%@n(v#‡òq ìR•œÑ Y$õ$žYCèO’F>¡*Æ[á­OØË+q³«Ý~¥As ;þéaLÄ–‘€çÃ݇vû“ïl˜¢mH©H¤¤€’Rï¹_øH¶*ñEõ›‹·q*#ÄÏ+!ê¨Áy  UmZÞc„d¸ @ êlÔ¯JTÄ«ëÖül¢›ªHÄqáWpG_ÙÅË ¦HH¿{ ýÝ"cHþ²±¯ÄÄx’EÉÃl)³é,2­Â†b(‚„%J„Uñ¡>8ÚS«~b%¯Ä#áïü:)þ\ªg}›aÉ+žFvâŠÜ–d`@è> G~û´ &²wBFU¦Z2€8ÔPú€@ß,° ˜¹AŸQºñGf”*õ§^Ý6Çd•°³>(ÙITeàht}Æÿµñxýœ2ú6‘7§j‡gRAˆ —!H ¾þùõ3Ò–Ü™e¹+*,ƒbätÿ«–³Q(Å„ZÙN²*ú *CÌ”ãËâ½2°I4Èì-*Hdrô$F}c–Û°èÄþÎZKXÝú>i!ô:MrÀfâJò Èÿ*×ìà£løm;a ÷*óKXѦOV£rá·íxæ5ë –Ý¢šIaãÁ㤣⠮~É?²)²œÈˆnÐMDÏ"§)ƒˆˆôâzB7ÿ(š‘Œ‡E ×.öé#@À„z‘Æ`Õ û\[í“îØ6º@[s‚á…^ÂÔ‚¦7`@=w§Ù9i¢=ì5Ó¡vžÆ/ï%æà “ÔA¹~ñpG•¤îHEèÊî] ‚— Æxßq  )±ä­ýÛõpN<“ŒîWAypóydg™cdCÇãtSDç]É#ì·ù?6Ùî©z9¸hØ/¨ªÇbj‚>ÕrŸ-–ØzLòÑ5VJ ­Ò¿ë}–²ßk'ra™jþ(…œ1@}&hÅGRÅ‚òß³qÿÈÝ›dyR†“!¶K$gŠI žSE…GÄ+ö~ΛÕ~?šÇ«µö2Ë,¢‰È29RM ri±;ñ  ó~Ö'k>KwMJRM&2Är¶˜ñ@´` †¡ Ôú”ÿ‚\o‚±÷­ˆ˜äÖ¾˜v“ဈlýS³Çü­€r(ê7vÍ%²KS›r”PþìÜ~%ÿe‘Ù’; µ’kK{ऻo"±ÝÝSÐð QüÙl*éªVBìBtIU«™#*Õ*TÔ+Sj7fø±¦}%j8ØÏ<Ï«évb©§nUéŒÀ'êDÆ?N6P²š@+Üž;õUÜrÀE‰ç%ÌêÆ*KÄ ¡hÈÔj*öÛj}¬nm—@ŒG¯<•æjxQV«ŸõÃL®©²}éL\]Τ%À}ÅGß ¡¦äåÒFå}ÄYÛFª®A›© 15à|{ÿ«‘ܦf’ø­§’1Jðv"(B¦€õjd­ˆ «-ä*Z«;ž[+H¡xŸæê9ÿ/,‰–ÇÍœcÉ0 zÒÉ úÄ’’)΀HHùe1›dŽÉSÓ÷'àåb¤l§ ãíR§ždP>ö€QPƒ<…å•&i”ú’H¡¾ÈœGòWà K /š.X­þ¦ŒM^äæ½Ô1ÛâèƒÃý\Ž÷îfNÊS´Q¥µºNc þªH(C2¥#Äœ˜èÂ\ʹ„¬TUàvŽ'rBµV¿ÍOµ‚Ö‘v zÍo¨OßT‚Ì̃û¡Àyn˜óÙ2ºdú¸4¨½TV…hzõñ唂ÜBR·Œm˜Ic‚c*Ó‘^‡aöœôËåSH;;ÇêMmÅ’µËÄš· ¿È§oµð䈠Xƒe“NnlãÔ³ªÆz¦ŸŠ%ͯGz³]­}AWbW‡÷]Å0é÷¹ê÷GN³ (MH#ƒ¨âH x¤½j¥ŽùT+Œ¶ %V†@±2ïB#£Ô¯ÀÊ;o—’ÒE2 I‘`%ÉzrhÊTšý‘û]Ç,ÄÇõ&_IJô›yùeHÌÊcà%@IâIå@væA¦dd;ˆvÞ¯ µ¥Ä²76õhÉ]ý:ÓqFÁ€ôe˜*èñ¯ ` D&ÍJЊÐæÛ®G'/šã楫E_Dœdi“jméSc^¼¹ø}¬ìƒL§µZËf¶žx£“—ÈêÁVù+ŸÚË9ÕÔ'Q[ïÚ•PI§'Ø’½MWí”H·Àl“ݘ®nŒpÆxÄœR>伜ŽãöI¦[¯(Y`®â6£…¤=•Z¤mOõ©þ¶þ¥€+ ‚+x*“Ð%Ê0*Ü=@ËM¿^XI"‘BÕn„K=ÔH¥¦¸gäè¼hÜhÄÿ­¶ÐÈ}íà (¬ªYHUÓ¿í@ßñ*årJš"¤ !cÍг7E;Qiòßâɺ$!GPDçÅš|I¥d#öìÖŸñ˜>–$n¹•bÒmc´Š‹=ÄKoBŒ¾¥K{÷ãË(ÖIî?spú(w¨jk#Otœ&TILdqoQŠ‚›m‡ ‰ƒj==bVˆ/£p…HTT=è¹hÞÞCR®àWÚÜ*ÜH.#ø˜ŽRrömÉ_‡ì®Fcm [Û«§˜´Ä/QÃP)Ð ù푌[$P\£@¹i6œGþûù“ð÷oõrÈ]Û\ÚŠè໸UŠa yãJ°‰~ÑAüá+Z~ÖHÂåþåìšXz÷F2 ¾¯!ZȯuýÞS!êø·DØBLäñØz*ÌÜö¨Pÿ^˜ÞÖïQ’I%Ô-^8=Ò¤AÏ…I ¿*å”(ÿU¤ó /$gúìŽkSÈGJ¼„“áÄ·*qÃܽ¹Ê•Š)yJ´ýß »•ðËýl”Mü˜Œ†(dh­äf(äz²1#OÛj|LWáµöq%1M¤’a£ªòKðÕ‹“½vè*Œ[IîQ¾¶o¬Í NoŠñ ¥~Ê'ór§û°ØVÍZC0¹ÜÓ÷a¦š5ûA†Åw c_ÚÁ2*‚Ä#á®’=E·£[°ø¿zýyŸÚøxñìr³ÈûÛ;hE¸šOL7):Ÿˆ „+üÁCrÉÐîa-í~nã„zÊ]]Ñd+_Q裩¥8ÿ““€°$€­%VÚvõYj(> €µý•ï‘;ɘúPÚ'î½B©V¥Z2“NÕk,2jE¥àº½·y%â}ÝúKÄ>ȧAñ• }íÑTÕ uš\XFÛ¨¡mé]ÿÕÈcI‘«ÿÔ‡]Èï¤áU¥…LoñâM@åÿOò³„hõ’–Ö­pmЀ u$ÊŸ°TÓùpDo²O% ;‹'îãø ‘CS‘øŠÔ­Nßkö²É³X½Ó„• i¡V²"´Gí/î¶eñ‘ZÚÊ#ßæäy!ã¸X¤†Ùݽ#EªÄ¢òäkû!OÅL2’QQeÛ:ÉĈÜÄy|;rC׋V„0û ‡c4DW rcx q@v }2ÛšŸ‰—üœ5ÍÐVû-ûK’Ç.d«“–i¡Grà-Ê7¡âwGaþ§íõ[ 7,Í‹mä·c×?Q\bËâ © ïÓ’z"Þ%3„–B¬¥‘ä U–Y(y>!3¾Ìà6¢ºþáâ!%<šV¬¿dT$Û±4ÿ+‹dâ,lÂ\÷J希ê±Ê«ÀÈ:ÓâEGΔ¦OøXên`¿_”ì¢`­o<{vªµzæþ\côû“?©wÉ,LP:ÊF¦ä…èwÛ‰é•c,æ¥ò† O¤býë¡cËš·…8ª‘¿üÓ‡½ˆL9ÜG¤»–6¹5b8ì)Ó‹¼r£dat„¸™¾°Ȩ§‰˜«ž`7ÃóéL¶¶k.Ó¤”,Æfh$â‰RÕ }A×í' êÐ.’ë%†YUnQ«)5nb´_zxdæ|¹0ˆûUDn ›zЌԱü·-ÿy‘ç³:­Ó»‡+eFQé©ä" SÆ»ÇþWÆ¡k•Gëf~”²æmÐ2¿¦âCBBú´ñøø÷Ë \|•…¼’ˆäò`ÂHØ*• M6¯þnXñoº²gmfx$.«é"´â¢ª(j¤l+BÙPl<Ôm%:”ó²†h±>'ÐÓù·#ü¬˜èǾù*AGè[»§.CÔDb8ñ¯>Õ_ÚÿW ;| ",®Õ-ÂÑ̨PÑ*š!¸‚wâkV_ÙʱìÙ“š YXñI›ž"¤´ý•ä%Fé…òEÚLcŠâ¬ìí)Ž$¡—ÒàËA×þjÄÆëÜyûÕ4øÇžJ–¼…[íòmÛzôZm•̳Ʋþfôƒ32+©Zl’D yw¦1Š’²Ñ‘ ÅFÒTñÜ’Ô?äœ,W<Šc‘ŒA^âTdTpZ•Aü´; @ûÂoi"mÂÇð„€’ÜY&bENãä\®\ÛcÉ&ºOÞÉÇ÷2cáBAõ$*É]¾.[òËbh5‘e/VAñ%†NM@8 4¼²ÞM]W_9FèªC +ö¿hïÔ×# ÙIczŠŸ´01îh ’ äv«Ø÷$"§y—ê㊧)c‰˜’Aä YŽíð×"¨³½’Édy„ˆ­UâD0+KƒÀ}¼rÐ7 2]<ÌÚ<¯4¼^f?»mÀ­½v¯zc«dÊé A¡hÄÊœ‚ÌñÔ#“r¯Á¹99ïüÖ1R&Ñ^;òÓ%VJðMAÜ·2Oì-*™D2„~«4‰Q#ªñâ©O‹`_b8Ñü6C2Ë' ƒY§ !Er…—¢ƒÌÆ¥M?d”®O¯›É]m\OUøãäŒÍ¶Ò0ªöÑ­GSÊ ±Êfvl€Ýs*\Ü&¥cõ£¢„CU$eWÄ;}¬”ÎÁÑkrCi3Æ9«:2CöëAÚ»‘Þ®¹3ò%lUh¼¿u%f†,ŽhÜ[þ'‰; #mâ kE²!„§Ê¤44míe`ú·m±²âõ&ŽàH¼‹í 5¡* WÁ”ïþRåÔAi4BÙŒºT¯ ¨0.~T೑ôÒÎÝÚkfI[„ròRÍE<*> e²—0Zë’c«È#ž…Ï)9zŸv?z|&¹›|¹!tGåp~*ìcqÉE\šÐl>eÙFŧ0†¹õ]CÆŠL’ ƒÉ MñSü“˦0'!Ý4Ñ*ö3¢ÇV,”èªñ§VñÊòžŒ± ЈòkœÌhµ¥"I5¯LÁ26æF"’S¶ñÎÈh¨]j òw   W2 94ä%iƒ”L•J5ºrZŠnæ¾üÓX€Ü“s˜HdWŽJýXÊBÉõu!Pçâåü¹*5^Lv·DòK jxF’ €[’°O!¹âÞßgºù2ŽëaoRS’’øEÝZ›6ãz- ‰Û“%WE «ôxDI#U¨Ey×ù=±y/%lå[–• ñ«Y(\†`y/˨_åÉÆWêÀÇ{艾 laä¬án-Ù‚ԉ›íGNêÇ“/ìå<ä}Ÿm$¤×¥XL†d$‰j]ªxïðÿIJp&…°Ÿ4$ÉML-8%À‘ÝTQHu ÝE>/õ²q•A„£ëEÚÛºÞ?¤ ‘,u òéÓn”ÿ+"y$ Û»´Ò;¨QH‰Pƨ€Óˆ=ùÐ`ˆfy!®-® ²Ê¬e4l acì'„›Ö­’Œ…0ÝCT†Ña[%)ô(XlO&«1 äÇý“d£#Æm"‚{ dÒLp1Œ¸fxšxŽÿg1Á©Ùr:RQIDlxˆÙ <¨À%jP_Ù¯üm‡c‘uE6öð§+˜â’2 9ºðìŠNù|;ûÚ$³ëKmZ4\‚Å¢±S…H襷Ƈôuì“ܲU ´’S°âËJÜÿ”pÀ £#¹Ž+·¢Ï*c-ð©jô¥~&lr„â ‡á»yÜä8”Œì ­ý¬…³ €O«ŽOX„’n( ý˜ÁãSۑߦþô¶ÒFÈ`U2¯5rK=\3 è1™ÞÖ#dÝyƲHýk$‹ö-½hZ6Tw´¢ßÔô”–'jNʘ3¿3EËd'ɪÏÍd°M=ͼ*1‘˜3X/Èÿ®AÉ@Ÿ$V¬¦í&Š¿/F@jÅ:¯ÃãJbcÂ+ +îø\ŸßÉ/ÂÅ_‘ã‡{Ù«t`‰#uáPÂ1åOˆ âMÉjå;Ÿ›w_‚ ¥¸FfYæ™P—ªVµ-ô/_öYuŽ#ä…ð¿ÿÕ…©‰RpÕeãÑÀõGì|7do´¹Èîõgd\Ö¯»<|¸JJ:å]ϸn?ë.W»d£²ž—#G#Ú0ú‘@ Öƒ©ßuþ\”Ñeª}` ¿¢ÊÅn¥Úž™oˆÔU¹}œŽ>Yy"Ln¶¡]ýQ(’ s£ž`}¡ûY+Ü/ Ê_<*Ѫ¦&S ÔŠŠ<+Õ2@õcHçK2ÌñÛÏ4 STU•€¢J­ÓuZ8ãöñ'ÔQBÐlÈ“ÄêÚHAä$ñ ôJ1ŒJ’¿S·0ºÄç„~š•Œ’§Zš †ü†1´Ï¢.Þ$–Þæ)6u!„]>2¤Sýš~×ídÌ£ÕA6™£ ¶S¥WøÀYzðü[üM“‘¹_{r!RÎ(®à‹ë®c†7«”§ªª§vlkí}œØíÜÊ…Ú»??ØFÊ)*P5Qª:>ܱÅÊÑôKî&ÝÛÜÍ$SqyjÜyTŸò¸ò%úrËÖÎôZ¹)í”°«Ï°*¨ fÜžCüž?Í‘Æ=$2ÉõTñΠ7£E94$ÖŒBPì«Zí‘‹)5jŒtÉ”’@W7þò„þHø†2;¬FÈï‚åH­Ñ‰}Ê‚â]ÿkÇ(­ÃhäR™-U#f@U(””fV¡;SöOüåæ[µVÈ«¬˜¥>Š”11ˆì(~-ÉiˆJ¡PŒ´Jª€TŠ} bìŽùq6Ö6L½P-"³·PðG õ#jìŽK<´4ä|r’YK¸.¸¹acSW™EOÄh&þTBkˆÕâ97 “ÉÂEˆGë x/#Ô,aGJ5ý¦ÉHîÄ •`â°Â܇)Ø· È £VŸ3çî /yLt§ nVG(Abß TÔÔ ”¾9TƒdJÛб¤4jú<›‹/ÀjŪyƇâÈ‚´„㌜óâX†¦ôRßÿ'öxäû˜Iô¾­l š±‘Ȩ 2¨4é€õd$uŠ*ļ€b¡Кª²ò?ƒW!>m‘Ø%÷­ê]ÎŽ„+Èï^AŽü‡íd‡&%pdYæˆ+z”@Õ¡6#j¨Õ˺4õSÔÑšV.ÑÜ Á©èzšc “.JæšÚªÌ0-ÐñJÕ©Óü¬,‡&¦1½©£V]#`Ÿm—r8Ýÿg~¤Ÿ¥,š/MU¶âjÈH™wh•–¹ ‘W)qú2Eš%Qê¥XÕ oŠ”ÈÀú¶L…ÒèâŽ@c•HG< 7Œ'jà "¦”äÊË$v5€lî¯uÔUU“¢–$žCÃíQ×!e$-=»dx„‹,2G4QÚœ‡ª8Æ‚ëÖ‘‚˜á@jõbh ŠüUÛý\¦MŠz’+˜ãf%DfX„tY›ÇËí)þ_øqš99 LrÇqÁ=]Ç !–»ïã“Ã7TÕÒB¶Üã â7âÄÈHßÛúØqËš'K4é!Šâ;–Z<*óG@HäT‚À¿ìß͆wÈ,J*ÚiMÜ2H«^?»pM%@vfjÿ3Œl°;c,Œ,‚¬¯S»râÚì/ód£°Ýܪ-°3¦fxø°+ö+_Oâ,*~×Ä;eÓÚ5æÖ,›òEZ£JÑ8«z³¢° ²‘üÆ¿VYMßDMÌPÆÕIß÷ŽëÄÐ|*Ç©_æZdA«gWH;¿Vy"e#ÒŒUbj·¨À²ûwûµÇ.ˆ5I[ªÀ†ÎÑd…äWàÒñz“ñxeÈã>¢}ì¥È&­I-¯Àþ©œ´L¢ŒÁ¹Ìe l[‡Eú¼NË0ÈîdUæM B 4éÓ¿,qóDù%3-Üš æœT#úJ…@P¤ –«™;píäãŽ{­ˆÖѧY¨Ì(êT) ¢½M9dorž~omFÓL‰ T,r8sÆ¥Ù:ý‘“<ØŠ#šû ÂêÓBHbP¼›àQ]ÆÛïƒ'$ÃbŠfã)"'¦Ì€Ô“^›S›‘ûYY3âÜ¡# »§(ÙÕÞOMC1P^ݰÔlŠ5a‘爬±ÂJÁZ57¥Go÷â·Å’žÅDÝ?¯e ))N Á‰øj2¸ÄØ®‰3'b¡ÔàhCEiß‘…Wொñïû9#gÞÀÐBÈ!ˆJÐ)2r%#zÊŸñaÙrq;ù ŽJ¨–´R°2?&©bv©ãáârwh²’øb¥å­´äHx‚Òª U‚–ö4é–Ë©kzUº¤=ÓÊ}ff†‚ (]©ðÐÔà„½4Èí¯$× !`ìJ†F&E— vßí— êi:EYÑyK’O'Q·ÃØ7òœª7m’C/Ö¸‰ÑT,P‹%›ì3ƒðòû+örb¨± ì‹0Ü<6öJ¥%¡‰©å)©äIø@Q$l€½–ó·ôÒX²ÈÏ%±#‘9¦ß *tÉn?ß1^îÚÚ¥*ñq ø‰«*Hß ç²-ZâÐ,ÛÛšD ñ¨?»^üƒþÍà²$‚(!X™…)y(£«·TôĨU˜ÊÒ8RÌÔà†•`Éð«ŠïAJm‘Hd[ÕÂæRÁeSU•G€ö;ŸƒÐd)j™ŸLˆÊT¤FFœjOÞw¯Å;`ì¡il‚bx ‰R›r¢öø›â¦Xy®ª³\4¢ 9V–"¤Q@'ÁÊäDv)'’;N ¿­ÉY–®>iö«àŸ³Ÿ6Ø ’ë™k3£ì† O)§NêGÚ\²#f*W†—R¨ ¨å˜¯ª(;Óß$*šú¨\ª²É«IŒ„lÕ: î«¢NðòPÉlu¦Â»îµÀy²—ήö±âR"pì;ü#}üÈÿ/á@^Ú†žLŽCÓX‚À«W¯Ë,‰æÂC’2ú××¶”ÆÂ2<.~Ï‹ ~×ù94S!¶Èk­}sð‚ðrâÅW‰e;…&µ`j˜eô±5dµ‰SÕiçœz“ PJxžC¡åðòrÎ+ù­RÛ–kŠ+0â•â$ób<ëÿ0O’#Írð‡¨8*Dîä†Üïüݹ.B,¥Ía‚ò¾‚ª—•É’”gôÉUqÙ?묑"‘Fʽéyn‡HüPÔ¨œ(Íû\©ÿÀ̹”²É=8œ7#BR ƒAÞ½¸Tå™ núqpž¤€VJ Ðìz§uþ^XÄRÈÚ¾Ÿ3-©I4cŠÆáA|"‹CÄ/û>_9þõÙFÅ']O‰ˆzr«!c·á^^ÿi?› ·ãé@Ú^ôÇQÓ£Œ mÜKk0åo"›jQ«ö&Ê~Úå1‘<Ûg9!-=t¾DH¶èÝj:Öœ*rÉr-bø‚8¾©¬H#ÿJµf·¯íµ½yÆiÜÆù`XÿªÝ1;OÞVÓ$õ?LTµRÔ¢¸çü¼¿ËÊŽä3€æ¨ò[ª)N"òÇÄœ$l„tVŽöÉne¬3D^܃]×â Vø?±ÿ•nÙíÍ nðÜ,Ëq#˜™ LRÊËöd¯Éz}œ·p¹ì®.e +wBÑr)*y’ kʪ‰ûYX[xº 5¹ÖÖuÔ#ˆ7ª”PsQ9 *:r—Ù9v8ñ™ž®[w[ÈÜF­Y¸™˜ð^/ðÈBŠÒ’ü^žD“ȪÚÊcá‚FÎP·ï•“nŸ>9‚è¦îy •V‰x²°%ñ5 Çù𼩒" ÷ ‚”Žé¹ ueNËgâÁŽÕëû9H ÝÔM%ÜR²'¤È±‡©n\’½É®Ø!°,² ­­×ô›¿ì²ÈÒ-6<:’k'ü!¢­}hàÅp\'ßÖGÞª@íð‹–AJÒ#.˜JEç‘cw*ÕXˆxÚœpÈÔ»Ö"Â…ÅÄqŸ«Ã!1GEõH+J$´L›,y+ép”‚A• 1€½ ±þ_øl†Sºq¹Ùœ¬q3'õ×aÜY¿dÙlÞ‘ÍZÏë r’×Ñ´^eWà<ÑE}Fý®G%:?FÂå„—Býež?$”êxýœîk£"6÷¯´1}rTF’‘Ôq^}$wí7ÃÇý\cÖÕ,)]˜}¸ØK ô?iÉ qþl‰Ø(Ü¡äŠ_AM+ÍÍ"=HZž@ø­ûX©TRxáôÖƵ£ü|HË×–$Úèy|O#pŒ…Gb+¬O‰FGt†C¨êó\¦“AVx%ó+HÙWâœOòƒ‚FþÛ’G}gdª†`X¥MOªÛôðíƒ\ˆ«vô='ˆ•K³ÊOV6 ²÷à«ÿŒƒ• n3K ©aîF”#›@öR#†CšÇ¢q}Æ+J/ÆR¤« U[—OØoÙ9Lyîä–¬Á¬f*º$\Wv%H&>É¿ŸáËö î‡ŠiZVn>ŒÐ£B7$úuø‰ý­¿Øãų7µmèêR U’38„ôÜ)Nnm¸NÉV¥ĺ•Ê<€ VâB’ô©^†„dñí97+-’¹‚4•¤v—¨ ¶ü¸Öœš«öNXw @‹dQ€"g! ø(C…'â5ëþÃ0äws"6I C"ÇÊRn ‡Ô…=0*i¿ÃòÌš« 6¾íO¦š¡L‘‡ZÑ ACN^k;±¦že¤ºs( $hB ÌC€x ¯Ä¿åc· +Ô{é™EÄTbάSöñSöÇþ®WÙѨk0´˜<¤f¯"¥øPô^,0ó%jA}aeôÈ£P±ÅV§^T*>Ð$¶Nƒ 6©@< ~90 ȪÓÇa¿Ãˆ)(ÃrGÃ* ËBdQÄ8aUaOÙýœ…#øèÈ»¾¹±¼žî4T‘/5Tæ <êAø¾?‡#ˆA–KÜ¥èÒ­äñ±vv¶!ðü%ZS¿l³øAó`yŸr½›<™d6ò p@ õ¡üX“ÏdR#P¸–âX•Y`|NI5èZ´íáör°ÝI.¡,«n”«B™JÈênõ?³ÿ—ÄØÝ ìvE;J5[PH^ÎvdV¯ѽ:üYI,ÉÞ“Cn%¾´¢‚Äå«^AœÔzk_²ÁᲑôŸ{unƒÖ á¢LïÅä’P©]úQO&\–!ͯ"QéÈ“ÞHÀи„Õ4ø˜–ý¿åÌ‹¡þsW4m¤Ò›{x˜€R VŒ~1E]éÊ›ÿ«•Þ÷ý$Я‚(åXê?z€Ç>ô@¯M;’¹uî×Ñ ©‚ÒâæUæâ¬Æ¡J° éö†ÿÿG)ºž1V]pªÜ+¯ï‚2’vDfÜÔòâeÈÈïiˆè¡sÅpÓ*·Ö•=u*j¤š2Óᨋìd‡:èǧš¤˜´H¤‘K‘$‚€Í·beÚÊÛÕÒ sU­yü±¨®ôøyWáà $¦G`†¹ži®áuýÃB–×á~Îàrâ«L îÔ.C J;·JÛFB7 Nœ¾‡ö²ÈQldOÈÙ&1ÙÄ\ Ã0¦ä/:SÿÊb.F›%ô­È‘‰¤o YCr5QÏ´ÉÖÝÖÂú®¸sú5®Ç‚˜ÍiÄìµ]þx"=TÈòµ Òg¶ŠNb#ö‹H qQðŽ›•ðãûY1_ø¿ÿ׊Éq …ŽX%ŽHåið0(ëJøª¾qÝ^ºý.œ¼3Ç8dfˆBþØ;PSí×öpEd7[i²kÁ„²µ9R±ÈÀƒ¶ëö²Vi VºˆÃrȬLd‘V% P×Ùq„¶e1ºËXncµìîž»¬\ iÄT-=ÔòÉHïðahûÑ÷1FBHããŒñ‘NF€«ÿÏEê™rl’K‹[›­œ¦âÍøšpcñðnükñ¯û,”úç"Gr ¶1Û«$gú°Q¼;òUPzƒÙ©ðå†Vo­nÔ!B‘—Éf¯m4 ñ;“ÔJ”V.„#ø±äŸû®ÓtéÖ‹þ—é†q<@•KÐtûcö©€˜Ža^{‹{›&ޤÉT+”’¦‚¦Ÿi_µör1îfH*V ”x—š;lÊCõâ@äIåðýœ&íAð†I-ÚQ=+°¡g¤MJô5§%ý¬™Ò eíµ;‹7ø}jL“(<Ë/ÀÊOÙÝiÇìå’Þ"]Þ” w¦W,^4/'%Œ¨%¸ü[ñR£¨jý¥Ê#ͲUN»…âÛmÑC¨UÝy“¿]ÁuÆb™žJr£ú0·²K?&nŠ )¨ üßêà‚ôø¦Vm,q…UoÞïP ·;³eSòmÇhkû{ƒ§3N…¤foˆ þÕˆxôc–8ƒY„£4¸©#<éX[âY$;¨aUä7ØR›dx·ÍŽÅ(µ¶™¯}IÑÄ©!r»Ó“}•_£|¸òjêëÈf+0?r æÁ~ÀŸP¿Ã¾F”ÂÉmæ¶6~€B\ž›Þ¤µIø™Ç‹%wcÞÆ©*¨'™Ô†‹+1 «öª;Sá©Á{ôŽaj2N–Æêâ8%,÷½™Ëj@HÏv `°—2¤ 9²/*PîBŸµ’'aly’‡`ŸS’_F“DCnì×ù*Ü¿ÕÉbvpFúEQižæP–ýêö zך³ª™9€Ç’’7§Ú r £Ì¨[Û'‰T˜d’­N´Ù•”œœ˜ÅVßÔ3LÈ(³ 4)'Eu^œãl†Ô=ÌÏ4ÉÅÜ­cuq¨ß…6ÌÛ«•C™míïK^ >¿2ÆŒª6À„!O&«mÛþ#– F;¢µ¸˜XÛ¢ÇÄ«Öè%K q ލÇáÃŒÚäHíeŠËÓ…Îe§j?h1;râj7Ä‘{¢!B;1%ë±EX’ÕzšñøG±”ý­þ˜•4©`·n³Û±’£* цÀŠà=’Eòu¼©@ˆÊboSÕ Ç‘R(j*k&øv'tCdU•µ««­xäQ0PO½nDŠï^ù “W_¥œ@´Âì¯(Éž3+«ñ’D €¤Àž„Wá§üiVS<’«xÊÇ+«´Á™’(JñR½XŸ´iö²á¹i范ÑM:Bí'%£q§§Ê¡x•â¼²»g½(•QU¾&jÕ‡*TsûJ˜Y‘E@oU‹r±°‘ˆ,‚¥GÂÚÛ¹#~kcd("ŽH½PòÊÅ›ˆpʪ¡Žÿ%eþ~ÒÚnòHޝpÛ„ˆ*ŠÖF‘Íïû4ʇ"ÚI±îPÔe··Œ–¨ÄÒ#U§ÂEKn~›.8ŠäC=å³€ÅPCÃÔ#ˆãóÔÒ¼”Ÿ ²¬µÝx&º’ú&‡÷Tf–7U@¥¢-Jmßá ¿Ë‘•Ê'tÞK¹î`_ŠNÚ9ŸH›uéôeË“}’’Ý«,o*É8HŽÅƒUãUÞ”å¿ü_‰5 ë,ò•fLDºŸˆÊ有'¶Çý™äÀ5ì÷ßÜ©ûC1/w( %±OÜò•K, qn$V¤´ý:æD¥š¥Í•$5•Ý9GJƒ]Åܾ/hÖ]Iu¦£Ñ–Fi&ªÕ—ÓBßËZø•·ê Ú‡©,Ïäy1kuf®Ä~!û?Gìäb:³µ¤Æ@…þˆ7ªËðŸQÐß§eaÇù±óþr$~Ä< -ÄJK[p9ŸrxWnçþ%-˜DZ.ÒIå1G!¸vG@¥QI-Æ¿3Ë“~ÖMUÍ^î~6ÖïȘƒ(PÒ¡Œ†Oå§å\ª#sî,ú_ËÀ'3-%š…ИãO°Wíq ScšrÂV2ßJ¦RËézD‘"©åÄ‘AöÇÄrùF„E´‚nF‘UÊ„TrA<ÈÔür¢6ø³Õ®ìžtŽW†Ücqö|HŸù·)3èÄvHp/Á™C‚ jÊÖPÿ»`vã²ÿ²ÌÈOã¹Å;•SmQ%`Ò‰Y¢5¯.ì<¾}$oiü+,µôÙý"¤sZUÔJ0oˆ/Ë1v·&·ÛS›újÞ˜^ž¡Z±5ÛìíþVYŒ5dK„ÎxIâ(ãBMTq'ì-6û])— ÄZŽÖ¶tX#ä²–¢/0>4â;€6ß"¤¯5™…®#šFP"K½8¸PGN„ãn>*c±kO„O¥HXGyÀ­x¨ôúlŸAéñe™6•w"z­á† hãbÆG‘NL#r¾–ƒÚÊae™+5fœúfKeRYÐĆ¢ªµz2Ÿµ’ÇToª'Ò‘¢"Ö¢)xq,i𱈩?û€;‚;Ùô(+‰Z[Ç€Y}4“‘&?BU J„j$”¡çðýªgêõ²!»¨•´ad˜W‹R 9¥TÒ…FÍËì䡹D¶u°Sè Ð^É,_¬GuRF傳"ì€6n›äD@u¶R‘¿‚Ê[ctД ê­Á‹Ù4'­j8ÿ«Œ· G:Q‘¦ŽþI6ôš ˜Z¼kBbfañ| Ë× &WÄÜ->Ÿqpj‰ ´R¥þk"µ~ÉcÍkz€¥‡¤–µXEÕ²Ïܨõ%D–hÈ=Í(ÔþNK©ŒÁ!»Ù9ÍÀ ©(.êª(YR(jßkp§ØR%ÎÕofd·ƒÕuhÜ¡.BB;/Äy|\r–S;k½A¡µš8‡9Z.HÀ×n[ lwÛ#-œ‰¦žâCnc^\ úƒâåöÏ·e_óør$n¿Â­fòn.V(ÈK)ا´c+ÈÏê)¢‚Vg‘ÓÖ,“3Uj$!¡ î?oùrÁÓnŸ£êbz…m:w[霳§Õô©U^Ô¯Ù4ûGsäRµô¥¹ˆ!béEŒv¡Ø¼†X6 D E]´³êb2ͼÓ~õÀä忘PrlŒ@Í™$•ºá{ëdoRܥ˼oKà¹T }¦o²ØqGcýTÈýí›Yng«–S q ô*O&$ô?óVi/X‘5¯¦Q[÷Ñ+ÈÀ@Œ5~$àÌÎÌ¿m°žÿÇ©cܲ–uÉuäŒ ½0£’ûTû?ì²¹Q³e €žU9d é¾Äч.*6ß&MûšÀÙ´CéÚ?%àdn¼QÈ$ñ÷ÉEjÂes,pÛÊÄpkG¡¯ÙFƼk¾S¶g’ 6¾·XÅ»1¼C»ø#Œ¯Æw­~×k&(óäÀØä‡žb‹ G,ð…@Ý<¾&>=x±þl5½)N4é¡6® ¥¸µ&jš× =£ÿ“”ÌQmQË8Òî%:7% PûTûCzÿ6FUtÊ&…¤öû¬²¬e˜BÉ%MIf?fã–Kjj‘À‰f âa€q P7 ‘¶Þi|±,WFÝÉ< ,lH«p? ;}éË-«K¯åoE#Q¸œ¤¬M*XR¾Ô= BO&§‘™ŠñWâ9¾„Ÿõ²!'’¤fW³'Õ`²FÞ™'tøM^¿åS–B_S8ò@Ý‹ˆ³¬¡+Hy U+ Ë¿ÃþNZ9–¹rDË*.‰rí’Þ)Kuø˜ÔñþUÁW"žQ-1×ëíp…‹ÆMˆ¨âWᢞMÅ5ƵÚyszÍ)a¼M$0¨©`(죮ÄïûX%U·6P»ÝI.e›S&²E0‚$•LlÒÊ^O†Šƒ®K†¡åŲÞê±Z«¼—“òh™åfr¼ëð€nÿñ$l¤/ŽX%Ž0ª#¸µn Êœª’1añUÚŸ»o²«‚[|YD}Šòpx-–à¯Æ¼ÍXú‚…€öW傈&”Un—YZ CH Û¯Å"°~j<ºWÛŸò2å²Ù„w-$ª×¢7•}:úA”ý¯P‰vñë¶JCf"BѶ2£E2bf•fåÈÔnÍã&ßî¼®bÉ ÙŒÐÝaÄÎëÈ>ó!¡âÁ‡Æ;®çí.lM&7±:_´Ó—ÕA2ñRVDaGâkñêÃ!µ3˜7ezL8Ké7ª†:[ÎÁC#rá=è‹&+æÆÆýÍ\B9FöòMyaƒ2|/Äÿ3= íÇ#dËñÂÈ!.YØÜiËÎ É$ž…VŒ+ûÁR>ÿ' ·ÞØÆÆÊ÷×FXã¼–Y¸¨þJЭ)öª¬ÖÂjö@&·Sà“KFAX$ ²îM7(vñ+¿úÙ=I‰ôì…{{«›6†ZIyîZR¤±«’q­=5OûY1 %}?L I#aÔ=r ¸hÝ]8éíÊ€FÝAدò¹e|5»a„¤-ÍÌL „Ñãð¬‘r¡S_åÛâÿrÒn¿SX•M5¥õY}EYv«*–¡ø¨»Rª+ðÿ•‘Èm8ö*¶· n.I¬l¨Ù\œ!©Œ:•RhYˆÝ…v!›‰Zà"Ťli<šDibTbîYSPmóåû[råör˜¶Èn‡×¥_™ˆŽt¯ÄX© ×áãû4È \‡u;v…ŽDZ”C×_5å_‹DØÆk:³ËÎ0+Ç•8•jveý¬IHNnQÖÙB+ \I¨©jƒÛâ9väS¹¶µžÝ§·‘¦xY *Å]8É×v×—,Ë.,·Ým¼H[Õ’–BôÜ3‡!h{ UëüÜqe#t3Úĺ•תvYBÀF܉=ý4åüØbv˜Ýeøyu37¨œXWˆ,OÂY;|8aô£&åVHUŒh¬‘$-#œÌq†×ù”툖ì¸v¥ºaTž3¼ò9xÂÔ(ª+Ö¯^?äá™Ø°¬¾õÌîcpã`] g_¡~ÎSˆsnËÑ«‰~UD²ÙV4Øôû9€k‡;B^þâ[ˆÀ#(ª†j% Ò§–Ù`,Ý;ÒäŒYò#”Z€SkOø˜ùFíøŽÉN¥X5'Ÿ•O&!ˆ¨ ˆÆžO¸±È(»IxÅÉŠO落è@Ûo>k'-âÖ6!:ÜDä°@cgw<€tÙ†ôåNÿëf9·&!$¶²”ܘ'WA*<Œ 4SN>õÿ…̃0A’« 1ލ’Æ{Q‚D¨Ãüù`<©¨ZJ³\Ú­#'%åbd5pß;|!rS<ÈDG$EÌ2­+ÅB¨SMEwl¬K›hQîm­-Ù–h‹LIRÄÕ⥺røPò\²«ä×ÏæŠŠ!»¬m̈•#ˆ£ƒÊã¿Ã‘f¨/{tŠ‡Ô‘ÞY)ñ¨o²+ÓìÿÀ¶OjaÕ##ÏnðÂ×HÖŒI Àíµ‡l«pÍlGÅOT‰äE£òã)‡âugu;cˆ8`z¬ªÐ×,!ºº †£*æÐDy}ŸåaL”~‘ßûX‰V¶Aõ×V‰xñ@(Þ‘$òÞ¡zí†ö@ £ˆý8Ì#UN\TÖjK5:Õ|>Öb—$1¸øO­-ÄÊb…¹qæ(YU |<Å9rÌÒ=üN0;ªD%Ã\È k8Z–eŽJrQÕ¾/‚™᥽Ù Ȭ³-dU;*¹Ž{œ R}OÓæ&äÁx´ž›P7Úâ #nßì²Ü|‹FD¢Õ˜Ax. ˆ²9rðãZeÒ<½Í`lˆ™"M3‚gYŒ(”So‹ŠrD·iãÓîØóª¿dø‰ “×ü ym‰ÞC¹FÑDA -ä¢$œ‹V‰ Æ=4*MvçñİäóÝ`´Ï,¯ªƒ”nÊÕ ¸äÔjSáS°ã#u! š¶÷z¯5x°© ýº·µk‘·èÈ‹Ù0YbrE¬Œb`=„-V5vCWíã1Ï¢ÆÖ n_PhXõbˆ§pP÷­|?gc°!”åÍ+ŠiÔž¡™¡jz¤×§óârÆ U4鄳ÆÐ]¢˜lÀúkð·…½²åG¹²Zú ½X¾ÔP—Û•"ïRJ×á?̓"ŒjI¦Veˆ,¯»r>£¡ÿ[.ý-D«ÜÇu8xÝÖáÛâWA±,åÈëö”]ò¹H]†è…BìÎ#A%¡Ü•jü¸ä£[[Yä_ÿÑ‹ÎeñsÎÚTŽ@+_Lý†âÉn?ìsŽ7­—/r¶µ½Þœ±•âО+隃  ’ ÿ~%aðý¤ÈÂF%œãaå³,£”Õ*©˜¥≂5o¶¿9v`:riÄI?Žô´g‘j y î+û\EGùiÇ)æÜB#E»žÞYI–CjZ悊}&£DFÛ6ÝÇù9,Â÷a†U²"IžÚöÖÝM+$ˆŽ Â’ïü’}¥Í„¨Î{‹T±¾V¶»·]¤Œ˜dvVS,$pßý‹|ör‰¦ØÈ|’„•Vf³zˆ§BI$•.£ˆ,>Ъ;³ö²Øî=ÍÚ^õh¢º¶µ„³sôCª 3AÈÑk߉oOüœ ŸzEÒôTŠþE ÁÛzÒ‹É?š¿´zÃ~”ê@ß* û¨¥2ÇͨÅÁ¨dcدfÁŒì ܦRÊÒ¢ÜHºwfB ÛØäa´©”·K/¡ešH½:¤1’J’£—í~×Ó‡Ól%õ%Ó‰ZÐ+Ô›-J¦¢Ž¨èˆžh#ŒzQ0AzqÓ­¼Ô˜#¼“#Qä³T¶X¸\Æ¿»xå^%b 5}ºd`z&c«™¡‰C~íÒ¥†ÇŠŠPƒ½E;`äY Â/D‹á<äÎûŽ4,j}€+AÈœj\åu`ˆžåƒ)$H¢B$ µÛ‘ wÂE¥Pl|V™dHº0 Í#°çð‚+Ü›eï’ @5æ—ŽPÌpUIØñ‚›Ž¿åœ÷k*‚çÖÔ"UÙ…Å*ì*92€)¶À3aågÉöW¬,ÑÏ;±•F¬Mh[b}Ïö9ØÚ™Ø(Øìc’âKéV‹Ì‘ÆXñôè6GÅüÙW<™ðýè;T®¥e $­Üôm‰aò¢±3ÍICCPŠx—/¬ˆf(•ñØÇof.I–æ¸Õˆ$ónç_³€LÙÉ1ÙJÍfH%’FXáYž8ÈP¼>.rs¢@þŠ*÷ªÜ^Á=Ä7Q± .P¯9±õX¸û\y/ú¼pþŸÄQc´éeµ¼¹õ)#Büãæh¬Œ*Ôaû-_‹þ ·0Ø”“U·[}Vrú´¥¢øÚ¤ñÆU‡_MþC/Ç+ŽÿPü¹jÈ(íȧž™6Q¸ä G@@¢²ÐцÎA²™li¶;„<ÒM GyÈ‚2‰(yÄÇŒ¢´ûIÿ œ2pc¿ñ±E<ŠâÝà‚ÂjŽ‹nÛ ÕŸ-Ÿö]sжá-€üYgkHœÍ Ú^JÉ!ø¶Zþí[â_òrÃrªb Ú¾»'Ö$'š*øéþŹ”9\,g0¤¹šòkKÈš·#Xs.!×´$_‹ö~/‡.•Ai‰&»Õ6ki¡úˆ´1IMйøxÓ~{rå‘«#ȇ\žzKº—t ®ßÄA-NÇÄ`‘©n±¤•6XÿR<¨‘ÉÌV:n9«Sýl3=È£²4DÅ.•B²:)Õ‚;´6—ÙWÀ%t“a+L’$áKFvkãëØ–æ°z­#ŽòãœfI0ˆ'Ú¡ ö¦B\™Æ¸‘‹ ÔíĪRBB£ÌÔðQ‚F€%c¹!fŒ³¤fHØ)'fND‘·ù@ñÃ-Â6Ý$/³ý¢•êªFÛ|ÎÃ"̤kâ!‚YÌë%zqE! ¿gy>„c¹þ«dŠ Ef•VtRVáÖ=ЈÅyoÜቡ·s nwRÕš[BRB˜’*ÆÜ0T€Â¿hòOóe1÷£!²‡KÖŽÚ¯1Õ+!à*A,i@v^G%ÃÑ®Õ,Ý’Ù—›ˆÌ€(ã×–ç—úØ'½{™DÒºG ÛÉmbDÑDÃjÕÚ¬kîÜ~ÏÙÈ“ÊÙ _¨ÙÇim%´JˆnÕ‹Sr V¾Ø1KНú)˜¯ŠcjÉtÀr_Qã€Ô0­^#Ü“æ‚(·ë‘=ë²°?XwhÓà겆«öh¸ÈlŽ JŒAÎÝ‘y7ƒ]¨áŠñ?ñ«ÿ•’Øÿšˆþ´kÂÑ[Se‘B†}ˆnu$¨¨_|¬nC#ÉRDZ‹Jc*#hË*š×`w$R¼W,(懭¿ö";rêI<ËzÒµ5ûY)6ÄlM¼±^Ù«FæEFº™d…JT)§ZÕ1„ò)ƒ“V‚0Ÿ :³â †×yDv ¼Ê¶¡n¾¹!(®€±çQ»QA¤÷®Ì%±“ R\ 1²/‹ÿKrï–-|­jµôBb UW44¬œT-zTý•ÈžIÚÓ°…¬n¹2ÑÑÄ„6Ç•@øOÙ¦QÊ›Æé †1 ŽÝ‘b‹ð?ï´ >B¢¿íåÄØóiª>H+k¦¸d9{°CÌŠJ9r`=öËçjµgfÒ ª?~ «ñ! øŽÁhiþË+ÇÉžMІ¥ RZ?6pc`ÿZ:’ŸçËüœž¥ŽNh嘭^,ë똌4\5zïûyXúþ „Ô~(,Ÿ­Z³’è²8N é°=W²°k,˜ôŸsP;‹ïFêà4ÓU\¬l…•ˆ÷_zG)Æß¢­ˆ•uДJ?Þ” R¯Úë†v)†>e)¹in¯LoÇ$Aýš|f€fE4[ °ZÇÓZq^Û›ž9‰”oAÉÄvIµ´ŒH’ŠMH&Ÿü ]€l{Øf;…ÚO?^I„r’cf¨SU M:…ãÄ®L"wOg™’ÒNœ[–¾Ñ €8ò"‰ã˜¤9@ü’Wº‘ÔËUe“0ø@©`#ù¨6is"1ä –,’‘ÎW0£uuÐ#î9P~Î#1+‘Ž;¶<$+ñ2ŠŠEc5Ü|\¸ä¤~ôŠ(\MHc%FÊ­üͽG¹ð›¶ÎAh¥¡·ü£D¬ˆWy‚;µË–_“ê6ÓAÖî!XYý/OpñiÄ¿ÙeL€¦àYÑÉu™‘ÕúR¦¦")¿ÃȆ©ûY#ѪÑz·Ú|¬-í¤•ÄlüO"WöþÓü_e2› {Í6˹e˘æV2"­Z¤ ‹nA ¡^‡'æ2«Q‰_®;IÕS™MÀ=ˆußsä_Xâ·wÞNQʨÂPå…#ZŸvÛýUÀÀ óFz(©Í®Ói–¬‚ÔÊ9—#£²´yµ).•ÚI"‰ˆ‰#u ø¶‰lÌ—ÓN4yÚ'LGk‡‚jËê2½³‚ÃâY‡Åö8ñåUûY#i”ÚÅI0Šïðžœ@è(3«g n—êPs¹”šs*rÿW,‘¿“ÆÊq-»2¢™$ÜË V òqj*7вipõŽkßZ'w,>åȯ®ʉî "Â>–ðÄX-B@‘s äÌO%èvg|e¹Xòm~¯ëFÖä „;˜™¨Ä8«ÙwÜeRêÛñEõk»8Ú%væô^F?RªÔTü\¿— M‹e[«[[o#‹€6Ñ¡ŽF,sæYQWù8§ÄWáÃ3bú¦ SkîRdÝ¿¾Øš°£*ñø~’0)|“·ªÌP+ªª#©¡öRµûY$R*Êeo§*œø• דTò™ªrîy³ˆ§\Ì ’E`²¹VjòãÇýz7ícìÆdZõmx,`13É n¦¦®S†§mº6]¾ë`c½#m9‘†8]ƒ‰-U¢Ô²Ðe3æl×É+žy”+VR7“ùÈz- ¯ÃǧíeÕ»EÐÿÒŠ­×(ƒ3U¦áºš|vû£šõåî¹ÇS×lºHÓ\RBeôTZU“«0éÈ+.à`¥™çðPŠOA–±ñ•Sðòæ_~;ì©(ßÌ¿êä·<ÚØE‰Â°æ’@K*6ÇZàþÍ?ÊÁ©”‘ö ÄU8 ˜pÔäÄ0ãƒ%¸‹BKt¶òýUSýኹ'uxÎßû_Ì?ÕÁWê“´«¢·©?é'–>&3kÆdûL7GNŸ5y­ ÙÚÛ+UZ{•Uèso§|FÒ%yÄ!¯‹[É,ßiWÓTÚ¤+ •ʦí“èÆ}ê:sºäB˜åõ}R+Ç€ ~׎ò+nýI­a’6_Q•’zò œ‰(Z›3R¿äá1¨’Æ&än²Z&‹9òH–è[rkLJOòy3µ”ðž!în$Q÷¡Vâ -äŠ7*$à¡ø1`àÕª+º?kùrtLƒXª+åF43r‹Õ’520]ÀŒýƒô÷ľj|Ý¢–¹…$ô^ÒÜè¿’f"JõeðÃbÏU<ýÊÖÓòÛâõÓ1(ðå¹;vPzü9Y d¬íqXÈŠyÑX’I¢Ópü·Äl™]tÀ\¹Q'§<\cUX’;d·"h*Acy\…ÝÄH ÐÑaF+ZØ´…/²‹‘=/½«¦ Ñu*qéGéÖ¤†W¯UäáŸ5ÇÉ2¶E¦+E#LJК?Ì7éû\²™ƒm±)|ö’ðXíR?FWbHûD‰ ƒöTׯó|9dZФÖÓ£Tr!u§rH¨íðà”£´¨£[#Þ‚ÌÌ‚”¨ÌÑú.§!ðŽØ 9,”n£—í·hìc>ÝIþ\#˜S¸*ÊåtäôÊ,ÉÅGFÝ>ñ®»¦öBI ¸Khâ¨WE‰|Tä÷¦õÄD‚mI)ql³j (rÐAéÇ ðú’Wýˆ¦íæ™nBS<T ¹›‘P*Hn¤ôá½?ÕËE×-Šè¥•Ðâ¼+‹Œ…þ*žŸg #Þ Ð+àxžyýxÌfÞ2ü2‘N$|H)Çü¬g€¾iÆw'¹4Ô¦µŠÎɽIV”‚Kza~Ý)^G \ª16K)W (”@°µÝ©©!TOÀõÿ²[Ù'ɨR…Ë*<0H8%ÊJš6ø·Ã1ȬMÚ2J¬×1ĠƈLnÓ‘ê»v*ÿ±‘ai<ÐЋֶ•£À±½4/é;Žü‡|”¢/äÆ5ó@Â} øb^RÇ5P²Wuü2Gqîb6#Í‘Yª4‘½ èb<Å SSÆ¢¿µ”qݺ¬¤·¼q ,AÒªhüñø«ßÞŸ,¾Úk§q]6¡tõj¼`?!\ŠÝ(9ñÈŸ§â‘Ïà¾ÉÔÝ4Ü•BŽÉCñ)Z*Hn4ãƒ'*L9ÚÖz]¬A©*2¶Ô(´)ÖÏÇ’1رpïLä`óÅ3«Ö¿e¾=ÀþS·/òp{™ˆýNeYaz©ˆ“(mÍHpÔÿ'!±L¹…–ÔŸSå#ŠL„ºî 8Šzü?ìpW¥$ú”šÙý+›‚î$¸F‘€¤†Ý~#†èÜ‚7( ‰?zmʱîx€Jÿkzuþl·~m^JÞ¬¿U³SÔUŽ Ñ1Šnÿäÿ6 ¹ƒ2h|ÕôÏ«ÉéJ­ÚK¥X¡cBœWqóò‰Õn¬Åüœ(USˆ"¬¢Z“ÄÒŸøœ†8d –¥ç4“4\¤ ‹‘ªŽª 7Uµ4ÿ[ ¡}è‘ßnå“ÐÜÝòíZB€€J>þ±¦;Øèåºùa6b…Óêà”aFVaÌ×nêËÇ|‘ßtäK9(}'(„Þ1ãÊ‘ÒJòOÙÊ«“;îRµÞÒueoVPdˆrè*±•ïQð“•ã®Ì·i–”’&–)ˆ†%egZ V•R>ÎG)åiÆ7%+Õîâ–0Ò;§¢¦:†2©ãÚJÓ2"\rF“(–ÙVEM·Xb ×ìƒÕºå–íøÆÌwSu‘ÂES"ŸÝ†Py(©J¹йÓýl”d÷1”Kr[ñX"%$2 „j˜ÆÆ®êÿ«„¨#zF´1z« tä,)°4Ø|<¿Ù+ciꫦ-ºÞ¼Ò2ÜÈbD1¸#—Ž€€~7n=>×9TÍíý&ØŠßɤ÷Yažáys‘I’*Åv æÿgˆþïìäå 5\ší1SÔ’NAX$a¸‚*)ñ†,kû\r™oA»)}ÁSш&‰œÏ(¢ Y¿áx¯œHæXHoXV¶ŽbVôÁç%V%•BÄT4`ÿºþ×,ad¬¨M£ÁéFˆdQ hO7<Øn7jŸŒ¹³k—¶s+IðEXÕ !˜3}‘ÞµûMö°ÀžLf‘¸i®WÔ 4ÌFzÿvè ) ð‚«“;FÇ”Xó;ÿYZÕeH µgBÌÛ>‘¨&ZþÕGÃüßðX•½“m9I‚¼ÕB± À¥Ev8ò'áÊæÛ’ö@— Ïa¤’×ââä~8ÀmïY”ªüÎ÷P™UUý8ÁQP*WbGúÝÆ]³LŽëî`gW“‡Ää:ÆM*È¦ß áŠ”=Üp›‹”ªHB¨¡Ø° à¼q·"]2(ldWoÞ9åBGB»Ó @&—M²¤øCÛ•âIR%á _÷^DKrÌÄÐ\Ч×ቃ–¼d ÑveâB>%Ùoƒú/¨!õBa˜Î‘Õ…J%UUB±¥z±Z ¿›%Ô7DÅ)³»Ø´ÕŒT­Ycõ§Ú?i¸äªˆa½#lc°‡Oi¢Œ,@$ޤC•¯!Ø‹ý\ŽbL€gŒ«rÑN‚8ÓÕ•Š7k vrìÙ\BÑÍ ¼µ XbÒQ܃S»_ÞdȱlAÝ­cÔ[…‰›Õ‘žHdyiÌɨZÿ*þÍ?gŽ16ÈŠæºÒÆ[‚ÑÂß¾´€ñUY(9C´à¢ü_ÃŒ¥Þ±šKD‰=/Mj¤–~*y·.‚Š{þÒå£µÕ Lmì䘴èãÔŠÑ™¿iª¬A®ßd—\„¥W}ìãªî[eê>¡€˜äü5R@â«ü¬$Ä_DN·\/ÙD7-&ۣЩa]è¿ìrP-‡¹ B–óÝÃJ‚GZV2q~;l´§ÃüÙ9ÖŪ7¸Tõ¤Ž2ÀñŒäŽÌ{ÐWoæÈlËzC½“MËÃQ"ÇÁH;†-Éž›6ŲbCkï@Ÿr½ãß¡.ŠZT áT–W¶¨?gµ™ÛÍ0†[g¶†ôÇXÜ4wT¿÷ŠUþ!]ò±"?ÑmP?é%ÐÀÍv‘Ë!ŽTaÄí¹ZûšäÁÚÚä7ø¦Ww~œið€¤…j· €æy9H‰-²%“¨¹¾¹† î#d`ÎÊYÖPOn…Y{eÃé´‘¹ åd–ð:hB¨©j…¡¥?ÊSÉÉÈB™ƒd,µôšäúÅ=2[’.ã¨.¤Ó¾3y¬MÛ†ÍRe ™yÈ“)'šÈWìö ððÉÈžšÝZª³JŒ^¨7e#…GÑQLTÉI<Ûj©OQ¸ s8hLo½?zôì>#þOòà€4‰ÐM+ñyä&6âO´$vÝÙTdÀah«GšMF&s'.4NŒXí]ÿ{§’ÆG$¨ôä,¦Š ô ì¿ÙÌz$¹7²T×å7¯ÄŽAG :~×L¼4HóKtøîJ4)¨%‘RFòÈFÛ‚µ®[(õ-Q—D\áUo¤&EåFR7ü©ðž¿ iþ¶COrr!¼Áfߤb’>HÍ"VQ·UýÚÓÁÿhåš§æŒÿ©^ÒÖh­cŠ ·2ÈòF(ŒŠGÅB~Ól¦Sßó[@ôÓ´á4ZªPæ9?v„W÷ޤ ` jÕÿ²Ùò-BíNào.£Žà%ݬ¦URhJ®ÎaÇþ¹ÁÜ|‹,‡tvæÖF·”*;ÓbU5W¥;eyHÚÙa¢P‘nnÌò“ É;†Œª€š×—òïÈeñŦgtæÎ ÖÑ€A*@MŽÄššÓsËösgw"`•j6±¥ëÝz«èˆ‚+Ô’¤‚ŒÎµÚZS-Än5æÃ(Þ×iQ™P$1 ø%¡mÇ#CÓ|r”c¦w“Ì–3N½h£¡pµ¡¨£÷ß1èNPIŠÇp Y ““q^;ˆÔ-E~-¿›2œRREj· ÄrnC‹TÇUä§Ç×ü–ÈÀÙYçGx£zŸ€­Ê'Õå¿Åî¼;"®c•Õ0—åF¨¨= í•Dî=íÇ‘A–HdS &8às7ÄX^L!r`Õ$nVØÈ-åSŸ‘ä•NÎ}A@97ísÁ+!yó5ðŠÉL/$Þ¯&5ÅZ@ Ð|%•AÉD ,dMÃPCjò;ð‰øò`ø+û }•ZeçæäLlǬbá{ *Æ’ÇÆ‡‘,ÈÍÍqÑÉg2dO 8ã¢Ð´× ‘ÊŸ ´¦æ•r]÷éöOüG"FËÕ7YX›fT)2¿N‹ß‰ÿ~7L¢¨·ôIV Inœ!X”ÛàÄÓ¦Üþ×?ÙË®ƒ7CÄçûË© Ì9'À9 zÓì×,èÓhiýbñŽ Ž*¬½?hÓìäâ(0–åÑ¥ÅÄi ¹W ¡$HG4Øþ×Oø³‘ŽÑfw“¤‚7YäˆÂr@$“¿OÙ÷É™1tPÚÌ“•/U>îyl ÿTÛÊwÙ´Ò”o Nèå˜,œ^EbÅ™ñþ_ò—â哾¬i4·gÝLÇÕ’ZPÔ*E´œ˜ôéNð9Iç¿si䇇……ªMXy4 ±ª¶ÏO|0't5ìM>8bDgnn¿e@ä N?ß‘·¹^Ò6ŒÈY˜F¿ ¼‹_²¡A}øødeÍœ\þ·$UFW(òP.幊ï¿ÉNN#›\ù ´´)w}¬ÔŠ[`¿Ø)Sµz—©Édä=åŽ>µÜ¯iR+`TJ"*¨Ì(í¹—ù]—+—2[U%ì³4÷BPP¤tQʤ«ÇjŠ€k°ËÅPh7eÿÔŠC>™žV9Qe„râèÒÉOGJ|kœyØîõ›U„ÂÛŒ‡RÑÙB]LÂH>½DSQCûO#ü×+`[z˜”.ЭÊx¸žW}7,mŠÐŠþ׆YFí®û“^„Ø"IQŒH ŠŠZ¤Óü¬¤‹‘- Ôindå$ ­DkÈ0fà*k+q ±Ü(Ë jPë´wФuÙ´õ">`ÕØ|9 vAuìË1g¸I'¶v¼l~㼊+þÓa€æT÷²¡[Y¤QÊ„nÕ%…\òä(j­Èã{„޾å}nXfº¶Ôа·» ²•BÅõ¹qû]¥é‡è³ÜZÛû››(c¸ÓʽÌ3s…œ%@ ñæGɾÐÇU%™"6ckv¾†d é\+|&E|]ãñ±ƒp(æD‡%G˜?« ”šQH W’šq;mÓ—ù_ë`é-é,ªä»~êjÇqÈ‚U jtþö8'¸Ûšqš;¢'D´¼xdWhâ&¼AsRxþË·ü˜¬J )\qÇûÅ(j"ibnD“?äí·G_òrd°»™C[[–Q_H#±¨¡+ÈxŒnÉFÔò÷¤ðKe²M3‘Z}Á¿·û3m {Ùa6VÕ]ãÔG=‚”Ž%I QG§üKgdd·3+›ò‹WCV”P)Ì0§OˆS 6¦r<Ôä¼–@'1¢ÆÑŠaðÉUzÍr©Kt~¦´’Ì—£(•RâT±—¹gÛáþEË2BÈMp•oæƒÔ¬ýO“ÇC*ÕSr:øí¶R°¹v(£h{é¼<²£µ+¸@‘j¼y# ¿.L¿òäêƒYÜù¡,äEºÔ&e&$–Hí•iSéüîy) †_Â?Óœ˜ò.YV$P˜ãVm]¯§·Â*Îy±Ã‚h Bz¯'.ŠÔFby9'Š–§Š¶Né¬?ÿÕ„4RH²F€Ž*¦¼Z”§#üÌ®r&z°[àgkmI˜-ôMÝ °—‹tbSáoò—*†Ö:6L“Gªµµ¼êí'A¹Èöï&á£ä[·ìógr e $xxܤÂ) ZHÊ6Å{Pu§ÙÛâý¬•^Ì£h÷Ó¥ŽÀ] ãEG„ˆ˜VR’/òŠ+¢Ÿï½”@ n£d’C")f¹åe«€hÊw¡ä0ÆtE¢Q´Fu!ŠÎãÕh§›÷3:•tVû5'¾í\„ãDïe`µdG‘ħָ\Ô#•xÌ¡ˆ £üJHÆÙl©o%«%¹ºW½2°ORœ7Ù#ü“³±Ã[–P(IQ•’Ý"3 »9ªò†?Þ(©Hêã˜ÿ_íƒñe¦W& =<Úši’ÒÝÕ™A.ÆCı4è»ÿÀ×öq­íIڔไÀeYçE"@怅IŠ…°Î;¢%Zâ5™íÚiºz®]¨±Ð’:oð±ø?—š´é¹Ÿ ˜I?®ÅëÍ/#ÞŠ~ÏíäG?‡üy=<ím%±ºBÀzK •âµáÛöºàܹ•ÚÑ$–fP°£¤ªÊ„R^%x×~ÔrW7“2¨øB+¢­äbà %Ì–drC[Ý)•€£ TŽJ8¢ÈOØãü½áÉÕµ£lç’·/{/¦ª®¼ø•QȲ)Uû=¿ÖÈ:2Õm›\=¼È¬üÕ BïΊÀÖ€o€šeÊ瘵‰ r4V ” £kU÷Í1ä”\%G0½@éö·;µ“ vºhÙEX¡8‚zò¨;òŸü¯å“kX’;H‚”?vbS÷›ýéð×+”·lŒvBjßÕŒF8¬¬èNÄ”øûïþNL¤vãÖs7'Vo‰«Ç“PŠÿƹZmU¤ýíÄÅx *»òT }ݲ°gÕRI$_\$± 8ý¥¯íS/%$ReîØ°­%܆;üéUû9a4À/𣠇 +#ªSg+Ä– ôÿ&™P'„smn†8ÓVŸ„Æ>hêÌ¡ÇLNœ›àl²#Ò=ì$GGjà!„³Ž K Ðþ®çùr¼GÔK<ƒÓH;ÉJÇj`ìÞ«–U #ÑŠÓn|Tp9dNå®C`³Q¸ž)vvDq…ãÇ:ÔOÃüØÀ"r\“Zžš»E3ÌÆ…7¥6ªxŒQH;7Lª¦6@vj‘3%>‹ßìÿ­‚gdÇšØ!$½š…ûS/>aÇQJQ»o‘•?YÆ*Z2"³Æ˜Y‹ˆÛªSÒ¾AûYfO÷­pîóUÔÉkÒžŽ2£ˆª¿1Äò'Ø|[D³ÉÍkH[Yd êQÔ(@a…@I#÷tíüøA¸±;]ñ¸ãs+ˆ™ßÔHø¹¦ç§5ë’Œv¦š”+EŽ2Ë-~&$©öZ¿íd)©Ù[žžÜÏ4nÑ´”.®HRýØlœ¥¶Ý"7÷•Ë9õ$y”ά£‘©Q+30¯…iÇ#[øô¤õ(ûiíÒÝUc^Já[‘fHÀíóÀANÁÒ´isx „Gñ0–1P¼÷,´ñÈLšeŠËÇô¤á šCȲ¯Â ³É¾ÑÃÅÜÄűsrÖñ´‰øRe#‘Û‘øX m_µñaªæ‹¾H‹Ù-² Ï$‰Œñ€CQÇ%'¶ÜØÿe‘£c[—rÅLlé•‚îjA¥v¨E&öRÔ$dº`´ZP¯@Å×C¹ø°E2@Å##©*…Tå׸®Àòmh­>žÿ„ò"q䯀ÐÄñm«±¿—âÄš «)ン$…Uf#1%˜«TT°§*èÙ@Ý¿“ÖJÂë<œ`åqÍ“íU‹åøxTצdâ×2ãO“_Ý[Ë/ðÑT€5‘O'5?Jõq'u¡UçX5Ž@‰L¦å¤/ï7çý•ÿ[ceÈTµT•u$·oQ¢pbäxªÔT¶ý‘ö~<žŸ’3þH­M[Û*¯¥¤”  ÜxпC·Ä¹D Û?¥GFT7ÀÉê2!R|<\1äÛWfeÿdÙ<»Gf¸o-ÖÞ¡}^y•®ëêréÀâôå·!¶ÿË“¨€Œ‚ͦ:l~¦ÀBÜ[ƒZt?´HèÙÌ|§ÔÛ„l”\\Éw>¢¥¹‰‘VDP¥”JT=?h/Ù̈Šç×õ4ÌßÁ“ f€üuõ¥¶ãPOÃÓfÌI€äÂù1Ë»¯TK…""!Qdç±?@ËáƒVInS5bŠÕ¤ŒVTªòT°nUíц §tc-Ä-›ðRÒ±äˆâ»‘ÐÐ’E_1Ï7$$¶‚à#½Ë¹<ˆY#<êÜÇ¡âܳ*C¹Å ¶HÖâxªHy¸»± Á¾Cü¢ÞžØIßàÉNš9RK’Ï+¿ï)P ’[§Ýþ®2#p;“¸´ÃR¸1ÙpEô™æ"Úƒ™hÔõQNgíeïŠüœ‰× !6ò\L$å NëÁ–‡ã#áJvîÙi½ƒI<Ðé(Ží$P¦(ÑT+7$/JÔíñ|C äÄs+Z)êV—’8E1ŒÔ·¬„©ì#È  ?OVùLÊa*Z¼Ç* ¶'áöÌ|œ¾-ð@²¹HùHÃÖ˜‡ZräC¸k]ÿÉËa[û˜O˜X°0’ù™(à—„Cñ>Ë}ÉZa4+ÝÄǺå-æ‹êß#’8ŽÅ÷]Û—Ãü™(í¿“¿Í3ÕfÀ«!t ¹XÀãÊŸh)ß—ü.cF<œ‰¢9…¢Êƒ*2J*ÉÃá¿óæD®í¦…R²×ý%ؼÈ"à«ƕ¡Ü»däy°DÔÄÍpªíVH^MÛpd–%zrí” n£ª#à–•ÉHÑÖr"´ä˜Ô¤mÃàä8üd_Œ{esäÊÑimmÑ=5y(ñN*~ ħÂ}@kùr½‰l;‡Žîf‘'•ž'°·QP&Äô¶õ»+îýh”E!PxÇ©o‚”ÎÕ;ö8Äík%)îíçi–'¬na‘OA#pÛkdžíŲ\<#ÜÂì¡uYD×Zwv&Ð.Ê¥ ›}¾<²X… µœ¬¦`»Û Œf‹Y_¨ Û¶Ãýõ•»hä§è\.£ 1‹VãÊ09Qâ¼™i“; kÐÚcú0ÍtÜ‚Ì^AU£ íJSn]9c1r÷2‰ÛÞ¥1˜Dh¨±Aób7jmO„ü906¦³ÍKLˆEv ¼UvE*U™¨¤oƽ[÷DvÿÖ‰Þ1I ¸áHï#æÑF¿q»qSö[’/óg!ù=dÉîú“Ä6÷W:|Åæ¶»nQñ FÜ–¨Ýèr˜ï¿PÙ!½t*zâª,’*ÆËsƤZ,¢»l¥y7ÙÉäÝÅ~?Ù)J±¯C3rªjH&´Ûö¨9#abbš™mZÍUeVšdˆrø”oA]‘Ã|Cü–Êú¶ ]o$tZ™¯c.&…ß‹RŸ/µðýœ²B½ÍqÝVXbú„oé£9”Äà©R Z£ |.{ÿ6 7iáÙ hìu飸1¡¸­[ÉÇšÖJG,eNË¿Ä ÿ²Ë náÛýó*–ÿÖFj±Ì,œEmOF^`‹ƒ(xüAÊ×þ+„¬‹l”M$áçŠÜñ¬r !ø€ÕëÅ–€«xרӏ´]ýÑ‚êÚòQdŽ?MWÄÇDå§…éûY.ýìøª•}+™RA µIÔ–eäX¨ÝTŸåÀH‘¿ÅFÝ^qp±‘$l¢nH=?„ì℞ 7íe§›XPÓ­–ë+F†IäH1!DËZ¹ßÇö—å`yDn}èK0ðzj>:IéÉ9ø©È²þnχ µ¢™^[´s[ÛKðšž{q)ƒË®ïN\²¡.d6W TˆÛAÇŒ–ʤ¤¨¼iSÀž#–ßÃü«’#sÞÆÍå˼öвJL [‚îh 0î½r&Ã-­2Z¾›2ŸEdC]žˆ¥{šþÖW½šlÚ·BêÒqÕáw4Ìé"(ê¨ã°§Ÿìå˜w‰a”ÑFÜÁs‘]1ˆû”þ”l’HñÄ ZYxÆÍÀªˆÃWìþÖD±A艾‚Ev-7 KðïU‡à òåËŠµ¶KšR¬• éÕÅ#•Háßl eqˆµ¥ËµÃ–¨av RÅd®ÿkrÿådïÕÉñh”Ƥ@#RP‘^<ÉRÀô_øß)l ±F©¢ÎÞ½KR@ÎMiþQ§Œ¾¦Q”Ñ"³€Ì¥©eaı ]φM¨•×jjѪýa¥•Á%qINÿÙþ\ýM,ÞS"âÏ#J†ŸìAùr©€>M'íAßÍÆW2±_Ý3/¦>.KJMvÜS'÷¢isŠÝµ¼g‹e~„ìkÄÓØäÇ Öz­¿@a#Uáȱtmˆ§COøl`wÙ2ä²ð:©äѸ¤¢¦ª”ÿ±?ì± ¤›jHíêfGfˆ4Q݉¾MትÑ"F5;YT~÷‹ú5£)©þ¨Wðù6íiL º¬¶ÿ¼>²;ˆ-ÄÕC°ø‰µ™1úAóh‘õR+_†ú[ dT45 äи#e§‡ùCýL«ˆ‘lÈ ŠöU†õa ‰#Tç)“o‹ˆ¥3Sñdâ,[ s¥ —¶Y'"N"HÚ¬Xq*k÷dÇ{ÜŠX > h³=3¶éÄTÐÿ¬~#ݲ­©Öï…î£n²ú2·­xðqT,œG핇}ƒ-•U%•œI˜JÑ´‘}?±ñÁz~ÖPø~$“gnÿÄT4Øåº±º(HžÜ#l—Xܩ޿iy/û žJÂoܺw†òâ+¹½Bjb¹s^lFÊßí ®ÿ1Û`¤¹Ý^eG•Y%Crjq‘jO=÷ÿ&£ ìä 5¦½´w Èúqt%ËSM‹ÚýŸò—ŽJFà ×ê7vÑ\$+}L¿'J¯îº*¸§.Kðÿ­Œò\†‹PC’) lîA˜~ôåAðŽéQ¿ÚãôR:ù¡uH®Ð[¤qÌ’+V­BöïÍ~*ò£|XqHX'ñü(Ét‹Ó^ ´èîâPU\P$…žŒÝÿz òêã0c*LeÄ-@ýa5iã0ˆLáœFGÁÈTP¹ÙIR¿ëb+„䪕4•Ïá§C ìÈ[ö†ÔßkùðËp{¶Xów1­×Òny€©In8HîDOz"Ò(!½BÌ̬[Ób(¡R ˜û#+™4ΡŽ4ý&‹Ê6p©rj )uªQéñxd ìÙ\ÂFQ2»F7‚z(e!I`zDÿ0ãZ.ddýbѾÝê×öÓK¯Â×1²Z¡WdZr®þÑ"Чþ6Êá k›9Ä™o²ÞãÔžA$@ÇÉœ7/ÊÕ—“R¼Á퓪¯™P‰!¸Æ"FySÔem¸…›“Vœv®Hš´sEÉ5³'ª¬ ÛF$‘ºý¯µÈw4û+ˆ?6}Bê`Ž8 ýäBXh rë^•Í#¼©‰Þí#jV’V(ð'UYÜ€„Mé·L‡›/%K;‰$º›`ªÍÆW Ɉ ­?g ‹7ŽHÛ(¥¹õ¸JD«ºSñu¡ ÙT¨ÆÈ%AØÊ­7¯ûÔ ¡PXh*0Öèµ2…¤p²Ð3€aMÖC¿ d;äÆÁ‚!(õ vf‰Yc-ðÆ|XÖ›uÿe€‚z•oIžkt‘Ìr®[öYBŽÃªØÈgš®«Iy*‚²Ö4ar­ö¨wwû8!É96CE,îÍ` cs l@äXSzžs“©RÁÉ¿vwÉqêr$@bV¬Ûücád/äz'--ÓÚ31Gw'‹u¯ÅE³JV¹F׳w0“´öïig`±úfW*ÅûÉJÔSñm—RÿLÔOèQµŽIm¦vrÈPŒhUz)$uø©þW”Í1®cmNG”úŽü)ǹð­~,ì²]LJ·ÂîÕ)zˆ”Š’µ*Óí/ÚûY<<©y¦š²7¡ eçˆ$@µJ†Rí×oøŽQŽ[žöìƒdœò®¥ –DñPHe ¸véÏ—í6[:á>æ˜ýA½F÷';%Y#Y@c”q¨âôå‡Òœ¼Ñ–W¦€+B#.Ð1 w;ÿ)m²œ£ÔÙˆØJî•E*‚¬x(‘OÂì}J©Ø”ãörá.MrÙ4åšÕ„;¸BV «A³°û[Q¿ÉÌBwr"Æç¹\ÏÈ*¸ -»#r sZŠí^9“`8ù9”ÇI‹’¨*cæÌ¨µQ¤`T TËâ^`PàNèhU£ÔÕRªüe0mÇ0Ôâ¼kûÂruqÛ›*)´–÷-`ÑÉ EþpŒ²|%»rÞ¹Q–öØä—5µÃ'T ¨ZdQVfz: ŽÊx¿ÇN9eÐ,+’&ÞÚYžC2‰¢ éUT-[â uo‰•ÿÉå“8ŽŠ+º²Î¿ŸwªŽA±âU·?±'½v§x£d^ –†bÕ#Õâ¿ÉÍxÖŸ´¿íÍ2åh‹9>¯)¹Áޱ‰”Š)P¥ÊOŠ¿Ì¹ ‹Ù–3Ì¡^ò[R.ÑŠ1y"˜IR^&aû¦íöxïþF\7 GcjL‹˜‡(F=(õ²‰nØ9„õ¤<ï`64QµV'N5V-N%9²ûY`5Èï²aª´‘O©ð³1çÁw]ëN4øWù_(‡stº !v6"XϥŠð»òòW—&áoµ–UØ]‘r¿ý(XÇ$dˆ¦"•‰¥*i]þÎçþ+å6Ð})sÝI¸©º³³"rWH§ýÄrÜ1¸5e•IVEŽ}Ò T¹gTÎñ®ôÛüŸ‹$Nû”W êá`†(Œ~˜ŠOµJ†R7ïJó#%ϼ •¹”YD‰ &RŠ%wPÛñ ðUý¯æÉ¨›aÐlˆ´qÁnA¬¬ª’+*…RÎ"@• ÙO< +jDB÷7j€Èüb ̆â§Ù­> xÿ²Èã¹lÎdjö¶’Ej’F¼"’BDå‰%£1PkÐŽ?Ñœ·)ˆYõw˜*š °RI©+†JÊ;€Œ´ŽY/ã™Ýš‹Å—`:î¾Ûž”Êæv¦XÆê“HX•‰IÂÏ1¿$Š ÇÄÄqþlv?µohLÁœ2úGƒ#ÔŠ ÷íÓ®Hšêׯ¬ld%¿z¼UˆèÇ‘=¿—ߦ[mŒsGô€˜Ö%`ÄA¸ý“ój·Œ²Tu²2h^ª€ ˆõTµ#®ç¡­2¹U¶G’W<›G¸«ª/PvaZü]¾ËAj!AÆêJbHáWâ?hrÉ0´ïK¶¸[(-ÏÅ%Y„aA©&¥•¼*?ØüY^R-³( J(¥¹œ’\s`Š{¸ )’‰Ùd- 2®£$!-ê(ñ _òªå×Á§’ž¢¥Lñ‘E(„¡ëñs߯ó® æçRR ¹Urအ :R§â#ìþÒä© –#F …d‡owØmð•'¦5gu½‘—N«5°E2B uâ)ÛÇm>ÖcŽEÈêkKÒ ä\Ý­x–( ͘WmëÄf` â™nŒÔíÖu´ˆÇê<^œ´ä~Óì§)Œˆ$¶K ~¡xÍ+ˆÂ‚f#¨Ù_v©ý~Êå¸ÇüS žko/d)‚–%<Ô” þ ÿ­]øá€Ûš$˜X”‚`#c"9‘ðϦœÏ_‹âvÈLìÊ ZuKsB¬²I,ÎŽIªÒJîgím’¨_rÈ×Å[Uµº´¶µ¤f©N,I^Bµß~­Ñ¾ÒãŒñ³Ûà­§I%…ÅÛÃ(U‰˜ÐІx¸ßÙ©Ç ¦ŽÊ2ýe.-æR‘Ǩ8âO5+AO»áÄH‘(¿FêóN÷\.,yýe¹R1@­?i\Þ'ó/,ˆ°[á °¬ÐÊÔ^=™kRÛ÷aN[ý¥É^ÃÞÔ9ü^AvÐH“ÆgB}07q·Oç_öXÆ“+*ú?¨ñÂH^1òpĦ’"¶äšoæÃ1Gßô¢Â¥ÔSGy ·‘ÑÈè­+¶Û×ü¬€äY‘ÊÐZ\ÃZKû©Ó’UÙ^>œw£'í/óääwa숖+¤†!̈¾£2¿J21§ÃUoø ¬Õ¶µºÖHe™¥toN`¨x’2T+׳¤¾ÎJ@Õ1Z8~9ã¹aÇ)U5)pùe3 Z¨äÔV¡œÅ:·ðœ´5M* †¿†D¨ô$äÕø˜|? ½T´¹#\¼˜Žôþæ'úŒ í ¬“ˆ£5¢Q\Æw&¶c×R5‘ô$ôÖQl®Ì¤Š1©AÈïV‘ú¿Ó8ò‰¯’ @c‚x£RÜý5U¶?~Òÿ. ý!0ú‹v–Ѧ© ÊHé4«QñHš‰¼Xò“Ó¨¨Øƒ°å_³‚<Òy!ôùÅ$“…tBKð (Iæyö_G/6Xù ¦äþVµm¥-Ži]Ëš)÷¢ü9h¼>ö>€ˆºˆ1¶‰#âüÑC³¨Jª¨ñZà‡ÓhÉΔ­„²YD±“ÜÊÌ‚íÇÓ#°4ÀM{“Ð?ÿЈÛÝÛ¾ ±-$ðú®’C"б4­hÔoöYÈJÄ}Åë"l¢&¿m?Wµ½/鯢¥€R °âAþn5âÊÇìäq‹Ë!¢ vóʶŽÈ ¤nÏ6ì–§þ !.æAYu(u;WN5 6áG§RÆô$þOÚZd¸LHî›Db˜™h®cvÊ¥nJžb• §qË~K\¬Ëcº«H¶é$34fÚPΈ›†SÖªËÔ“™Ƚÿ‹Òãäº2½íÄfÕ¢æ$·¨©©»”bzl­éæ.Mœ¬Lré&K…Š)•§:7ÄÊÀ… :r|H¦‰É”ž­¼#¤7@´,Oû°|¿dÿ(ÈDï¿&É ¶æíU iæ(Ý(?}8`$PU_ìÿ“Ž-‘—xD<Y¶–)kµÿH„ª…â§/šº“Ûáeþ\®&½ÌÍ]R}2¾±©Ú†ôYØÏd ‚È+íñrÿW–_“”KN0lŽJ—«$±Ü£ÈÚH㞊kC">*«X"k’dIü¦Q´“ë–V7Rq’Ia{YÇ"^±¡ÅFÏN4òpäHÿ9Œ €Íh[hÝÄlUX¡¨$/ZS¯l—Kc.tÔÛÓ’2TÔ_µÈ± Ç}«J±Ê .Ûæy%¥8 1ñtæâá€$ ®Ô'¡n$2.[dŸ€j"‚.X'eõ"ø¸Zš:úŸÌGì2°y[*Ø¢âDú”BÆGéé» ‚šMß“eDnÛ²kÈlµ;ÉY²º4V‡• v@ §…ø¹±Ëq‚bדi ~¯êEB²Èˆ 7EPY€@~lL™=XѨhÍëM£€ªmä4«l¬Òßñ¶CJe>¨ åsê‚AŒHxתƒM†ëZlk,Æy1Lf+¢’ 0‹%É 'œ`­:cÛ(»ß½»“r$PJ%ãV¹C°,¢›úz6N'§sYÙZÎö9\ú­ÂÚ%+"(¬a¥`ö ÿesŽÌ£%(õEºÉ cY=¯ÂUiàvª±¯íd冿“ŠÊû7÷>¯$…Ã|e„L¨´ä+Å[Çör2ÚA”2˜XÂÐL´Qéñ[â û¾U#m€R•ăêÿ8Mýá­$ Ôoãðµ–mu°A?§Â@üßÔ~a‚²Óf*|z.L´u´òõ …'“'%,GÛ§O†¿ìr¹ ›#Íbì¨ê˳!N?°ƒbµöø²¹ìYÃ’W4ÖÌ쪅øÍé­Â¨o†´þÐÿ²Ð¤¶f«Z‚xÍêàV£Šü\ëØ‚~ÎJ'r‚kSê««Y"wa½Ê‡æÆ")àª? „)n¤ÈÃêáhÖë¼lµ©`8‘SÔ+}“’%ŠÉ!aûâ«$öˆèBü4aüÝðÞåk’h±¯ÖcTz"ï)méEšöä~+˜õ³ H·p&Ÿ-‘ˆýfâD–g 9¬KR¡Ø©nƒþ 2Åì\SÔ"- ‘õT•b–XÁ<@Á÷”ÿ.W:gkkjÙQ¤’Vâ•4Ž€Ð/ó0¯û;Ñ÷)« ‘K-í¯&õ²‘E¨’IÙAà¿kùrFUî@Œ‚D³¼cÓçèÚÐSíÌC|»ª› ›>•“I ¢¿¥SW±'âçNƒÛù²@Øk;(ê7b[S$²ÊÑH]bä¼¢AÕO‰âi’Æ(¦ge¶2­Öž%„‰=X•wàiMþáþV›JŠãöš›5½’¹’kI̱*›¯z2Ó'1[°‰è‹›Zm*Q4‘ú«!•jvWmèQCÇý_µ•Â{¬å.ѱEkÕÔhYì¦pð²èGÙ#aðòãþ®FɈ¾iqä²þi ‰¦““Æ8s†U©¢·írM¿ØáŽË#inꦫt’Jòp¬Öî“`>ÿ'šýŸò²Ü›Ày5@zÈdЂ{+KˆÑ`Pœ8¨ aÓÕhG¹¹r2 Iô¨n.@ÄH„)¨+é²ÔR‡ø|9lÍrj€ÛtÊÊéfI=QÎÚ@#Œ ä©r ê)²7Ä».VFÃùßï[6Oðÿ¹’ʈï2ˆHåPvSÅ»Çñsþ|–MÀòaŒz½êf´”À×V`È&hî¢V;‰Qé*©5­G*/òä°ÕÑFnVç¼ 5½À+5¿©9„ð•`•>#¦@UïÞÈòçÑÒ”×-–Fuh'¤J¼Ö¼j*ÿË@¸Ÿ&»¢?Sj…eGA$D¡Ú@áëÖ@ß·ü¹¿$ò½3Ç4Œ ʬÊX˜®àTR¿ídsw'z ½) »H QÌž„Pº–"£rvû?´Ù-úw#có_˜Êï0ô@¥Š‹.ÿlý¥þlò¤ÑinÑ_$W EST`{S“2“ÑH¨Êä}-€T•îÑþ§tPòZ"D£bI#`O_Où›!a²[„ ½´™¬ã…LqYÆÈ]%iI&COµË`§ù³ ƒ×«Žù7gm$vwf[w¡TViH¢<£-NŸL„þ¡»8rðúÒ b¾¤iõÆìjÝ8ŸØßý—ÚÉt‚²ÆÊéÜ bâÍBªIz"ÔÐöø@ÆrØ4Ä"à‰.¢0N¼g™ óøE8ÔwøGå\·è̛٤¿H8°EJ(¡R>ÍêÇö¿ÉÉÈXk¥yõ{kkhI2jR²FŠÂñŸXÐéÀP„1™Hžƒþ‘g)Юª7s1„o뽨øˆ‹|DþÈg%ÆFÑÍo²¤¼Oª#SÔÙCÈñOsûuÿ'*¿My·ó!Wô!†Z;VG¥˜×ö¿Õ€ý•Äu(;ÒàGq)õR¥”re*>#¸ûσ`jyf49Ž÷ Žid×ßY‚T‰/õSkÌŸŠ$aÕvýšå¼4Ó5q_؆IU¾øšÏ"ÔW÷†‹¿~ÿ­“˜ôÅ„¨¢ô¸ëV±¶B#&$ú»9¨%ªhkÒª8••žD²#’S1Ei-³\¿®frkÇ™ Ì’(Gòÿ“–àèÇ/2©ªCmor¨+-»àt5b”FÿʹV3càÙWÍ2ÓbSje ±‰Êý§#‰§À¼r9 q‹·TË~±ÄÔd;qqETת¾ü²ÜF¢Ç(õ"Ý#‡A‹ŒLáTôØ–¦û7#N)ß"Iã+PKìÉwhK4Îk1ã³/*2­i_ˆåGùÍ} "Ô‚}QË’™J$WáAMºŒÂsGšCOVY#pDÅ•€)àÞßÍðæX°âÊŠq£Éqsb¢vpéUXè@@:Pl´S^™Fj³àªë¬:wÑŸPŠUy’r¤cÉÊÈb¶ääÇíä˜ÀY•šãêÕ?k¥òÓ2¥ÍÅ苆â#d"P¢ty˜*ÑyP5:ü­0Q)ºu´i%ú…oYÌÕŠ”2%‰ôÿW#3±¶P‘zœ!µÛò”híî¤kQ²´h_‘íÅÂ>ÖGÑ/|[f=Câ•,dÇ3AŒ+ ¯Ú^'çÿ –“Mj‘Dd¹[b 9‘åd;²Ò:_ø9<Ôô¾Oz°ŠÊ •£‘O(⤵NÄíö›íáÚÔni3Òä/s¬’9R%ðÑ‚‚ìt¦ÜrŒ=Íðä—Êbá,ÕT<]}7±“Šòùo·òå‘f"Õ"OFòÖÔ­f¶ˆ#HE¤P‚MHn926÷–±ÍA%hïtøÄ|Êš#ÐGÀGSÕ‹7%Â@¢ › ¦¡3G,WS·?F=‚€H ~{rÿ[ìæ<òæß#I1€‰.UWf“•I4 1-ö«ÈåäôhBIfø‰ø^  p'㪑¿O³’ÑÑ1ÑŠI§ÙMñõ€vû#³ð¥2ŒÃÔ[±‚Ž®Ñ9 ,£“£AOÄÊ势-Ë-(8üf0@ 2(4¸> ºN&Då0,h®ÕŸì•zäøm…¡ìÒí äÏ%­Ó¿Ÿ»QÇ0«ÿÍ><œˆîÜ0Š6á 3ļÉH¢žµÌ«MéZ³db9&Gª"Í×”9âÛ¹)SÉ~Úð=ù/Ń+ Iøh?hѾ&À64·µ©ÜZ+jW‘0²*8¢(M>Æÿ œ1Ûu–û! õex}(„|ÙøÆäZ´-°^Ûü9e‹káµ+xb{ëÆõIõPÖ0ëEéöxíLIÚ*:¦·¡1¢d&»© eSü»íÇö—#«vgéXªé ¢(Èðãð–+@¤Ÿ´Ô¤·(—•ø¥¼`šFÀ5~ ;«éñ~ÎJ2õJ>¿X“Ó—ë 3µ²ú´ n!7åBOù8⌇{R’ t‚Þ'`®}&ƒ¾ç—Ó€´ÈtÿÑ…Å .¥jUƒå½:9Q¾Ô¦r'éz±Î•õ”ˆ‹ˆz±5]U¡$Ði°jü-ƒÔS”oJ¶µÆžòñVA ýšWnÍ_…°Hz½É‰Ù´äÖ Çp§”fƒ‰Nå˜tU¯Ûý¥Â6!B›É3¨Ñ —µ‰Zm@kû'â_ù»)ÜI –Ïñ¿ÕäýäWU€)¢ÊÙiã–ŽwÕ¬ýŽŠââÞÞÞdúͨ¤’1hÓá@Ì)ñPÿÄpJ¥"QD@Uqõ“öò$n$á1”Ò%©œ°‘êXÌŒVœCV††’S û“9B=î>¸ ¸žlŒ'¥H&Ÿ¼y²ÈÄUù&RºAÜÉwg433†!Í @#44zåÞ¸Š6)Š(Ëi- ï s¬q“ËÄñü\Ïsü¼kí`—ÒÊ<ÔRÓëSIxŽRX­ø+êF\•}ºz<”d¯4J6m §¸bš+`Å£eÔH"ÀoÃvø×ùrSßßL#·ºÔÔÜ…³qPÉ?À­Jýƒ_o±;þª‘÷¢µ+r¢¨µñוGf¼¿ã\«›rÍÆ“ÑĆ•ä¶+²=Ì*WyšP~UTÊÝEäzSŽÛ6B¨²½•DÜ¢ôÕÊ»pTb~(âØž¹}œ&+…Ôbúðº Iø¨àtoõ~ÖKÙyªØD&pÒ‚¦ßÓáØÓížÜ9¹ HôóX… f»ºŠb©oP¾Þ¡`yï×áU—ùydDÍ>ªèˆÓ-¦p­ ä¥]Ø qf1&½—¾W’C‘lÇåòÊ‘Ø]zdÍîFõV §zx‡8Ü Ëd:Ë{s*rºWX€ îõÿ$}²Ò bÉW·E‚yà%`úÒ0àÆ”¤o]¾Ûulˆ“Ζ£‰mlUÐÀžœm(ÜÔ,ÄÖ¬+†gŠD¨ØR"Ùí’ÔÆæ"n žÇáQ¾ÔZµOìåS»m‚`‡šÌå\йøw5÷]U3Êúbá}4hÄp©1+ D)É}ÊÒ­ûYhϽ¦GeYDïÖÿÙË.¢Gû¦º&@þ8Q_ÞœìE¼¯U,+Á[jðöøOù?WM‚DóäºÊ˜$uiÍ"¢r&]ÐÄ÷[zOûXr…¨h73ÅÎ9Š­…ãȃ«$€Ž2·I;ÿ.9b9õ¤c™ëÉO"¦ôss@¯IB²ŸÛÁ:b (k;ÉEd"I"ýä%†î$V½Ï?³‰öPOTd²Z›X½fŠhHx%âX‚‡˜é±øÈÈKêg¤ î¬Ë꤭pQÚËOH±ã@ÈkOÚã×â˸ĉ-<< 9¤b-³»™ ¸B¼w ÛŠ|Cí”™ÔËßÞ¿OŽCЗãÎ\½x’íPj=Óíeyz3Ä7(Kˆáçäx&â9H;·^ÉÁiÓaë.¾žáx|D)TñˆÒùµJËã8戓¢Ü)cºrøÂ9oÚ^l+ûX ä,ºÖ§S²™£â³*I °AÈU».ýÿÕÁ!Q!AÜ n¥sÎ¥‰1/ ù¸šú”;rfoµþNOÀ0ɹ)Ž¡ áq†[‚è±R º¨cûMÔñʱËfÜ‚“ z¶‘2R£XÐdñûšþÎW—šq ’-I˜j3ˆXp·Ç+²Š’W¦í¸9‘é y¨§~“I££2sçHœ‰åÆ„TŠÿœ¤ÈØÁ#°b5ýáS**#â[‘éÓaû_dL´Åê.ñÙ0ێʱ•¨ "ÆŸdŽÿðY„7!ËÆ¿y$œez c21J|N ü<¶ãö¾&̨—Iý”n¶¢6 fJ *@^b„PöN9VCe³ ³W•ž(Äþ–îʨ,Zô,¿Í‘‡Vs"‚Y–®óQe’±_ˆ*ÀV­Vû?³™o·“}ë%ºoJÕL&Rœ„„ì^§¡Ûì¹Ãh(Í8§Ö­i({ˆÐ¼„VŠH#Ó'»q+ðÿ3eY6Ží°æ« Š]uÖcÎ8lxD«± 4„4Œ{UWŽDGùßîbÚG«àWgœZÌ>#7©tNô Z~Îß<°ì- óiWƒÂÁhËòZ”p’r$òüI†ö@TÑnKܲU–̯l¦>|ù Ç¿Åãöpå'„[(WabÆV¼Â!ÃGqÉ@R‰·<©öy˜Ó/st òKn¢†jªnpÛlPSrØrk˜Ý ¦ÆŠ21eG’v5v'jTÖ¼‰øN]Ùi%{ÓjpЃ"BÌ";¹ ßö¶Û‰øpeÚPÞI¦ª£„ʱò€)B«_‰ÏÄuû][1ñwunšLÒÚÏ ¤Õyê(kɹü$·€¡ûYx°|šI°¡pcÊžb$v>2)%Â|”J$ý5d]>ß÷L@& úž£Q…ióíðý¬ÆÍ¼ääcú[¬ ¢5Wˆ¦Þ¡â$¯ˆý‘—Æé¢\п`ã>lü„W 5ì±ÿ~“0åȰ¥{ µ’ˆ­Ø’£st…œ¬«B>>D‚Pì_´GÃTÆEtaÖ1Îs ‘@­õ†è¼èjiö¹Â<˜Ÿz•‹G=°`8µÓÓÕ €}2jz¶O¿g%+Ü 2ý'kh®9ˆ£G(!“Eøƒ7Øä¡~?‹! mŸDI˜TIXa<òŸˆúñž5Þ›ñ9wdv ~¥Ï+#÷fâ)ërY)·ÃUQË%Ž·>HŸ@ÕØšà†¤M(QN Ü·.Ÿµ¾ßkäƒv¶ò)æ’(bЍ…}>$TÑ:q;³·Ú³ña‡ÒQ?©ÿÒ‹K`ãPŒDL’ÛÏF—ܺ+Ò¨à—8øJã_Î](€oͨqmE"K›z†ãþùœÇÁ.ÐÀ¸úíˆQÑüqøfä*h{·Ã\žQ@I¯ä„\rIƒ@¬a‘ÀØ+Š8aÑ•–¼‡ú­ŽêŽš3Y@ Éó”"‡šÿ“Eu9XæØFÈ b *Ã^*YH¯T`FëJü5âÊÿË–‚× Ô®,"¼’¢e.³Bâœ[¯Øxþ%åþVB;3½ÒûRò3QJØÔ µ;ŽõÃ+ÎØ@ Y^G%“\ë ²s!”†'ƒÔ2|-ûXHçH'•¢ ’$ŸêŽqêŠß…FÊOV Ù.É;ª_:Ím4a$g¢G_‰–CGV®ÿ ÿ¾WAg*¥=>䯨' ’Fæ>-A@À)çÞ„¦Ù) ¶D9î¸ÝR+˜U£– ÌPÎ;ƒÓøžn²4¶Ý#Žé£R} Á¢;УÕCpÛö¸ÿÕÉ¿&<"Ðó„B'¼õ+ê¯ÂŒWŸ³øý eúS=BÓVF£)eV;r¦ÇÅzå8‡{nNHe¤‚xÏ'¸‘–^L>,¤QAê¥FÁkíd¦(07n6¬¶F´Wä#ñäÎ:þ/{ZÙXíäXœ =)bàÐr-ñÖªK}‘†Vy";sR½höá$£\«Hr’8³wn.Øqíe0 ö2´oÊ2ÃÕ‘UjÌ=Bý~ÎÝqÙ€&Õnæ{{Ö€ZrU‰„oÄÕùS‘`~Я†J;FÓ.iÂE pÈ/ÞC m4‹Pý•U¯Ä3]þmÑ=º`ŽêßÓT*ÉÂ0îj9Èÿe–OfCÆÜ%¹žYÑ*ñ'zŸûìIl=Á©[¨[½Ôw6¬‘»¼ÎBIÉhW²òÙãðäà@7æ‚-A‚ÆcXÐ<*„3P~Õ X>Ö˜7,y&ºuͼºqŽFã"\3<;dAØq¿û*§áÊòŶæ«pc†Ü­ã•Š )©fZ©e@Ãü£‘«•$ru¡&yX:˜~«õF¨Ø@ }Ÿ³Å°ÈÿºbÜ£xZ)!’ú¡)ȃËì“ôÿ±\oš”u‹HJH€wCòDÍG§ìò§ÅûMŒºŠ6ܧ˜˜q!Øò= 5 ñ |9DÛâ“Íz-Æ6_ÀêH£†¥?›«ÿ——ÞíݤÉ--Çõ¥F˜P-5j|HÝ@dÂÊNU™[ÔäO2U›’Ÿö4ÿˆà‘Ù1¡µB¼®® ¥B3•¸ÔSý–1•û™J?4ºI#qŠ2èû5|!—Æòâ6h îb­I,oTãD„ÐíÛ®B#fdïh{ˆÖKhcŒ7(þwêÁO_2ÚEšîmí ´‚È9ëE@Gµ?ã\A¢¤m²µŒ¨×(ª-¡$åAðѹS¯%_ÚÁ’èüc«KKcîöš…fâÕd ß ø‡.\ªrÓt{]uDi€°ŽØ–èYáM*«ÝŸ¦C ®IÝm¬ÒÏvmÚÑ#v¸@Éà¼ÆU¿â99ìÊe~-Ń$‡&§n_cýVÉDî[ôhÚÅ&3Ÿôv•„ŒÄ2ñ‘jËOÙô™REoÚ^\2Y=TzÿÄ®?M„¿[V´sq邊DÁˆ%U«ñ|ÁÉãõmþk^AÿùÉœÑÑ`¹ƒC:€n9WqÛ‹r¨s!¶C`Uì½~m ksÆ8ä@®yû!p>ØnxgÉæ²hÑTÄ* {#è¬~žè­ð3¨ØÅ2 ´‡+sÈ“7«<ˆ*#O`v Ÿ…Ïòá—/r#Ínmçx W’÷uPöä2Cv ì·í=`IºŽ^š®ì+öø‡; †ÔB„ýDüA9 ó59–^Œ¯Oø,‘±“ K äJ‘ä<¢~ŠTrPiÚN_µûY\Ãd ¥÷èNòÛÐÇ*¢ÍZª« {‡®J&ù¢}HG5Ͳ×Ó2EÓÓzW‰©ê6âøNW½³ÚÓ±h¦µ äÚ¹’ÌÑ6æŸÉÆŸó}¬´5ž¡«„i#…¢#‡2\=OÂÉÉ*þÏü6~tµ³´Ny.£ÈÕäšNÜÏ`MwÿW#—,±s*SÂñ¬…å>™Y¸WŸîÛØ~Éñirpf½Õ%‹ÔºYãOÝ“ËÓn šéµÚÿ'*ŽÛ6K}×=·§<íêÔZÓöØÔoþ˦JfUd‘M…ïø”xØÆ[¯%T“QZ~ÎF‹fá)mÛ[KoÞCË’Ü–BO&$®Õ¯l»{¦¿r9co;…7Mjx¢?&¨ ùQxå`z€H>’Ö“$S/9àão ¹æÜjÄ1è¤~νɀê‰Ô¤óÛ±…•Œ|•’:„AÈôÙŽWd†s<›Õ-àX Ë›…—pе·“v‰ ¨,/"§IcU¸r¼JÈä—ÿª8ªáe(kK´¾•@•àP#¯$ä¬vãÑiÉCÿ6Zeµö¾§¹»Yýmýhø¯¨š‹QRLo¹ø‘J×âÈ×5´öFV¸–æ)9ÎI¦SÄø?ËðEU·“t…žkxæ™CÒëÑed¡P¼™B]Ѩ•ɵ¢\Ñb7Xmƒ2kÀ_  Ä‘Pzò,Çýlýè€÷ l¤f–1‘€Gåé²Ff!ŽÜ•kþ%l)7š½¨?‰„œk¹5Ù{㕞­¡ÚªÄfŠ·÷Š O¯.gÄ×fÈc<Ùd’‰iÒ…\¨ Šp§*×áªxe׳IGÆ‘Þ9¸(¾œ²•&”«zd¯-¹ñ-N°Y“A0h•ìJ»¢Æñ€U~5àÆŒ„… ÿe•™QmŒl$ò¬)Î'4!B[„PT »Pªåð'›LÀSYŒv­£#¢ u À‘¿ÃAJᯛŸµ¦DêÑBmÔI°58ä¯ü6BgbÊ#p•’ JÊ †™c` âjâ€õ?,²'ìûJ+[YÍÉŒ$bI%v ä£`¾ôøFU†ªýÍ™o’u¤J«`®àðdidã³ò Ê´=]»Ó*Ì7eˆì’ÝG“ê ¨Ì¼c•]A'™aÍÑOìöýœÉ…ÐhŸTêtWÒÑW‡Á–§#ʦ¡h<(¹‹gâäÄT> ¥º~–á"ÔÆü*µ&H;þÖdÌìãVì‹QަR+Qf4Úƒ¨é˜q;‡,òb¢ORfoQÝø¼´ªüB¦‡·ÅÓlÌgŠ,—HžE›ŠŸW“ÃÈlK…w<2œ¿Sn.H=vG‚@Í´l¼•z¯Ù}¯õpb²Èv¤¾ÍàåÉ— 4¹nüž,7#.iÕ¡D†ÙU˜‰b€³0UȵU'®ß2ã[ßš¢l “ëqB²ËËÄ‚„9éNtÈL\C8ÝÀϪj™Vhâ¶BcŸ-"ò4¦Éº¥ÊÄí×S&Cê(+{{ Á„'œÉ!ACB w÷è?k,-.¸·‘®Ê(©…cŽV¡äJÔ×°ä6_åÆ#jI;Ú'Iô>¯ ÐFêD^ˆZ‰‚äLÅ‡Øø‡Ãƒ/š`ªEèQÅѤÞJñ«(øT"Óª)îrœ×·”[qòKï’x#õ(¡ŠHþ­A% ©5èmŽ[‹~}ì2X;)[IM8Ý(R¯7jñ“€¡4$ò\²[ʯ«X;/±’âÉÍÚðI$‚8¡¬Ë͈ÑûªüKþÇAuäˆmïLo–IlíÜRK‡R +Ëá?e¿âYbäOéIÒÒz5Y¸Gð)%¾"iPƒ¾Ze¸i›ZŠ  '„“«zÒŸÙ F?šªÇ—,œ*ØÉ?·ŒÇ±VI¤XƒÛFÄ€±—aÉ«˜Ò7#ÝnLvˆ÷%3ÇÓ™'%‰¢z Ž<¤©ÞvàSA懛{5™•’K’7BYÏÃÀöUˆ®[x½Ìô©De’ͤ¹ëRÆV #BŒ­°j êI Œªöåk¦¦±’xÆÅ­àvF¡?½*§ì ùq? ý¬1«bFÉ•ƒÅ0vE“êîB¤ PáB¬zˆrÿ²¹†Ø7ÆKu Œ£ùŠBª¤@;PüääG›#Í úþ·¢ÕVR…J'⌑·Åû+ر­ÐË+K7§mÁm¸H¥\ì§ÕbG/†JþÎHþ¤"cõ¨²£ £P Ò¹1#ràœXl¦¬cãþ·Ãƒ˜E-&êYtû× ,Ëû¸˜¢ƒN+Jq§ žZâ+  ©u,Vî®Ht ¿ð‚ê?ü_åex÷³Èh« u¶,'^rÇGPă3(…zoFÈdç³(rÝ} [›>R<²ˆÍ¦¡M"•]—òrÈr>âÂgu’\ÛMrCBIŽaÎEn\nC•FÔ,´ÃTìÒ`‘ÄuÃ!VVôätg4E»5:ül¼–:ü9áHº0 åCðÊ­·o‡ŽŽì"=^D"Dö÷ÒC#ª¨¼ —¨â­",ÊGØ?JÁ¿ÊãŒGØÊF÷UžfŠSñ»|,¤ÈB¤o²—ý\„E–RØ%Ï%˼¶Eší "iãÅNZbm«jG]ˆ…½ÝÄ“Sêâ+ˆ!5çÇ£|GfZ7Ùl®7·úFÙWûäQ,wÐIž¤R†F—°âvŽ›†¿Ë’;ó`6 ¢om—ê¶ç(dFbGórE¯j+d`we8íøþ$gê·0^”X0iC·2wûø«“&ì0p]©[ËŒ—‰qëÛKsX˜Ê%e¯^´,[¯ÃË! µêe;ß¹1‹Ü‰#ð‹ˆ…na€b­ãF *÷¨ü¿ôÞ§¢$ŽOÛ…Ô4rþ"­ðàÆÚ%&æØ+³;’tÔ4*•û%ySþ 'а£a{ºyÃ…&-ZcZ|¿ÕÄl²ÝªHÞƒª Q•E _ºÿoââr¼{–̃d?מ·×Ô¶³zS¹ÛÃ%(ØlbjÚ†f¥¤®ÕYšW›qò24 ,E×j2Åúk”N#Œ³Hà>‡Zïö2ú+½œ©H\¢J’<…}2Ï*ÆÃAµß—.&¿Ë“á±MbN¸úÌ»Y4‘ÎÖ1p hÈaêTµ%¿à± R‚W¶«sHŠZ¬8ˆÝh¢Œwyž;Upxc`ËÄ!mޤñX:úL$¸y¦ßoݯˆ§¯ÚøÛüž9)DýZ@•z&IPI'ª€Ö½TñHùq,?eÉÿ\„E› ø¶¤$IqõP}5Weã Y# ©^5ëê«þÎ[1¿“\yy£løÅíÛ8¤qñQ äJ°5Q!t¥¶ÚX³´´’tux‰"0úOWMÿÿ+'’|ÇH±Ž=êQòÈÆÙîgf’ÜΑCg"(G2ІƒƒÄ-roo©˜ßŸ$ §œ¡Ä•ee#g ÌÏÓo_Š_Ù\”yüC6D=«‹²Ñ¡~K¹´¥«^ÿj¿³•ôI;¢´ØÙ.$ˆ¥YøCO…éâ ÷Á.I‰Ýòò²š ¯,€øvýÿ³•‘½7 %ó–¹ tËDj³r;|&´¦Üù9wÎ=¨¼7 ’¨Z("³J(6ùò?ìp½ ‘úK™~V‰¢äGW¥jÝ~Èdïg-ÔQ×8KÈaÝUƒ1e¥H  Ëre.i+H‡RBŒ%•¾*(åÒ‡où·/š:£%v{¥ä«ž§aU^ š×¿P2“9 З7Å"g•YZq,(ÛWv>àÓ%ÃêEúZrÂYc–NˆcÓqPg§< JºRÀ.#’SÉ„nþžÇˆjdW’ÿ­‘ÊO̱ó@C)Y®8:²…$¦Ä½KAÈPþÑûYaÜÂù¢,Dw7W[¡®(åo…5cÈõTâ͉T_D-ÝÔ­1‘hê5w,ÌOƒÆŸåbb _{¬\}U“â•ArC! *(¯Uø¾,1Æ Yd4ŠKé+k1“ Ťlí!^Nôïü©þ® ÕïMÖÊw*ÂT+<¬Œ.LhÍ#×â§u†8£½ôÿ{œ¬R¤a͵ÌP¥Ôt;Æ 3Í„·Åðã¸;¤u¥+y'M2âäñ$‘*†ç? œîOiü¹27ñêDÄ©µÌ7v2BœÖÌ%CI ý–*n:rlEÄÛz…&vú„âÞ :쬰^JM*%eâ’/ò·%^kûY Éîe°¾«¬Än‚à“û©\‚@u;Ž-ÉY¿Ÿ Ó Ï¹BîöÕ‹$¥¾´íÆÍ€ –©iõw_ø\0ŽÌdw[l€E7ÕÉ@ðú±ß£†þaÈ÷þlb-1­×_Aiõ×µŽä*,êÃes*ºÿÀáÜw¥}ë´u –âU?»“Œ‘ô<*òþnCýŽFcíe^ä+ZþûÑu›’ȵޫí·Ä8÷ɉm³ Ú¶ 5šiË8µºŠU1M½]KüLC’ÅNV úShÍÊ¥/uKi¬ÑüiãÅý& vØR¼xä@Ø<ÈEÄð¤ëRÒÄmƒÉܸr ÛípS\„…íæÎ;|.±¥Ó#ÈÜ# ¼… uz&‡òM>Æ[Ñ®·nÕ’+h䘷—Óìê>¯Ù¦Ç7ø,yn‰ÓXýpÑRæ6÷äZƒÒ‹_öY^C°g¹COpðµÌ‰Ö;b#P X3¯u¦[d5ž«ãº—ÖƒO c¹õv¥7> | Ðåb Yg#t}@ÖËÁ¥øyÌy( þ¸¦!©h–ŸŸ'XÌäÐ’[ù‹òÈLž Ù¢Rûi›êÊ$Uœ—n?b„… ¨ã^Ÿêå²Ü’×{ª­#i×Ãp[Þ˜XÓšÈþ˜áO´ê¦¯ EÚËk¹–×Õâc*æ"Kºª©ûJ<{qÁÀ-‘¦®5 ‹»ËX›“)’:È¢¬U7“@*؈€ dd@FBKéIHÙE%B…šJö ¿kü¬Œ¢eYP‹ÝGijú#1' €¢ÿŸÚË!#]ß1”¬­a5‘L,Wаa@G.ž;‰P·:k^_Ùi‘²¶·igâ+û¥Z¸?ÌßÙf„¥Õ‘@Tý5u²CsTŠŠ8|w=8òvø°s;¨Û“Z„_é3[Çþ‘-´¡$ºqI$!yôø½År"øodFþmÇj¦Ø®á#@Í#9Œ°©`µÙ¾Öî¿·ðäécú–›YV׋X¸±©îOaZPz6DsODå%eŠ9=:75 ›ñݾ×oø–VAl‰S¿œ­ËÀ&p¼ºìhNçö±ÇFI Ùù2S‹•«Õ¥U wëö}?æÉÓ h½Õ­È-6àDO½áZÓÄr¯,˜^ì‰"‡êaAçÌ…HÞ‡j=:ü\³\ܨòc×>ŸÕLo/§n0ú…=$!¨ê>Ë1Ì‘ÎûÜr„ÒçØJêªÈūв S’‚k]÷ý¬žNl`ÈtÓ>”€°€«¬]–g`6ã¶ËüÙ>E¶R@Ü ñú¯L°Î„A,a×/‡ŸsTùüSFå‘&yšB&‘0$)ûE@ñÒ FÞ-ÓùòñTwµMLB#e’iy‰JñAÎŽ‰Bç§aÅiö[{“$u¬ƒë3\34ªªˆ@A5é½r¬¿H ˜¹’§§A·Õf„³-Íä«(‘HuQÄUwøÉãö‡Á3ôŽè³ˆæ|ÐÐKjˆA’i.¦èà™¦Þê¡U²Úii­C4$JóDñ°™J²â%YiMНûÉaEKšÙí£Ž>AÆŸ§©Ð~Ó.F[ÚA¥m"%†ÁÄjÌDÓ'©V«U«Øü ×!’[¶Àl¶ô¨[ V—‡3¿¦)ÄP’9"§öpãäË™@[K#Ah«Â~UõÒŒ#P*ÔÛì©–LÔ½€ä=ÊI7™b–gElÁ& ²Õˆý®*6\˜?»#¼±#ÔÍBêäZ<$¬@¼gcHåb „íLĈÛ“+ªJaõÚ(¤‘ã%gôÔ…¨—qöz·òå¦\Ç“HÚŒ­qpe¹p* å|øÆ åÀuføze¸öØ5ËtãÑP¥ ðõ¢Cé©=_r¯¿ú¹Šwù¹<’›Ë»ˆ&µ‚’¥3²¯2GÓ×2»-2çHg‘$a»ÉI}!7.J°%*>-Çáhï]ȾV©s;„ÌÏ@$NÔ4p;ññÄD‚{Ô¦›`VEWHÁE*đжHw¢IƘ 6°pðJà•;0£-_ò¾.9^]Ën1AJUWxV&@ÒVikÁ–55¨#öz„—ˆçkÑj%^!>’ŠÊ6,e‘‡û,<ñBÉoèbŽOÞ[Äнw©w ˉݹ·íŒ•ß½Œº{•Riþ§é<„+|Š_³^o·ÃÇù¿gÖE}´O J;eU@((XTtß›$÷¦"¨,Ôd·2z<Íh‘Ê8…æHø‘R¥i‘ÅiËVëk§º·Ô}HÑb@ô¹š;Qz‡¡A†Q <ýI‰jGC­¸ñTR¥˜U=V-_µ·.Ÿð8cô1—ÕHr)p²GÆ’ÈQ¸­+BOÆ9rÀG¥#êDÞ]“w~Êca‹ÓV¡öµ'í;Ã`ºSµ¿ÿÔŒX+½Ô º’¨ÌU‡™þ*OÂ~ Ç8ãT^¸`/¿ºµ{r†‹$@7¢Ƶ ê>×Úþñe_q<ú''ÚÓíà[óQ \!XÒP£€+XÔšž ÿ6B{yÒãßsÕ ¢[Y½^4d"Uj)ÜPý’* ´‹“%oñFÜË‘¬¨À¬Ëñ©cPª²šS?ÙûK‘ˆ¦R) .éw%°IVE* ñ”o·ƒ«åç>\-™iÖ¡HÀ+5­í¨¼Ût_ÙjžÑ·%¥s2'~é~?Ó7U£j wl— µ»§+•UÝ% ÀÔÏ2ÜÑ"ÇŸû¦¬RÜ~>•sõ+Fîdäk0°,ƒc·F§V\„G&F[•%¶šU™]I/Åæð·Ã°Ú¼¿›ü¬4¶«mÊZËm<¤"Fô¾ GîØ×ö+ð­5ų=ë~åmÓj@ñÒå¢ tR¤­AuíB¿h6‹ºD9î©è˜¬ÍœŠ ÷¯ÔäÜq`Ü–7ÿ%ªü0» 9R A8h$ò¢³«\読«‚½¿g'mtÔ©épìÍRŠ•™¹€´`>Ó%9o‘¦D쎾Ž9—‘pid•ƒ7/ˆUM>Ï^™\í¹7p¾¥ÒÚFܽU&@µJù®JGÓl"7¥y­"ÚBÓ:,h +QCÛ9 Ü–U° ¤"4ôÜ4©Èþ|œqcɪ@º³Ü’ “ƒú2~ õ'o·ûCí|8?‚’~«KÙÝæŠXÍ7¨¬»jñ’¤ €ï—D4ŒÓLÐF°Éêz¦Fe YU‰à£ö€^Kܶãæ=« 6XIJ_Ô Ê£‘)ËeÆÁ=Û$‘ú|Vå¤a!H9“ÉÄ…ØîjFÿ„Á"xT ’ü³Ë$‚>2#25ñø·åñµy*áÄ*¯úÈɽ«Â¶è¥.¼nʡ٣ªÑkQÁ)Æ?å_µ™¦QilÌé§ÝZ;r€—Iæ>'¡ሷÅÇîE¤ŠYnbõ’ ™ƒ±z¼q€‡ú¡¸áæ-i{Jd ¡‚Å ¦"§‘Á Nò£.{×܈äÉ4wqJ²£¤±J¥XŠ-E;WöYvâ ù´ó%«%»DîªÒR¾—"6f@Y&…iÁ«’‡=ØÈlšØÑZeãÊD‘éÌPª7¨øOú£*Ÿ ÛeNöwŽå_Óä#J"K¹«µá@ò&m)·™[›"qeZ…<™‰'qÓl´òkÑn€ÝÉñ…*Çá¡&¤wÎã ÌÈÝI k©_»Œ6Ü56Zöùá2ÞÐËn¡I&‘ÌÇÔ„‚£­iV¯ò‘ÓS%°}]e…¢£ÇèÈ­êu*)éƒOò¾Ù§ìã3¶ëº ´Œ$0Ë#¨”ôæ)B©Çù:|9d·#ɇ Pe_“ˆ¢2#ÄË+ cC_Ý·BNÿêå±ók%PËor¼Q-±G™M• b¨*´ëüÙI°Gõ›c×ÜÔ¶Îe¶f‰½%äM "Y¿ÕÄtµÊÓ Am…ÂÅØi§­+ÎF$¢µz*Jär÷'Rydõ‘ç)$ ê;8âLe*Y üIP#å–·Ê,9ëòbx¢b[bXOˆù5?hî[ù¹3dcL…®³amg8YH䣎çâøÁÜSûXg¹Ù` »C6§ÂÔ™’`].Ô¾‰"¬jBü_´?ß‹–C~a…ï¶ö‹º°?PŠV £4RªqŒ U©öº7.yTNí’…}•ÅìîˆYK¹fSB waJò^ü~ÓrÆ^K»Yr-ÌëC-½Z3]’”+]ÁôòìGv¬‡dVކä\*L}pŽÖá[ö@êiö£uø¿ÖÊò3Æ,”椦ö̲ª}b#nÒý®RD £qíΜwþ\œ"h×B$ÂR¥L$3In ÌVBªnT‚¡•…R”Ü5GÃü¹Y©>„<ÿY–"ÎYÙ¾)%àjJ}–¯Ì}±’VÔÖw&¬¬JÜc2H æÜ(xöø¾ÖUL…ÚûÕ“ë0Jð77„‰T¶ãi§ÃÇ‹ü¼°F©O4ÄÀ."¶¸µâ"T’²2Ž,xÒJÓ~&´é‘"®ÙŽ”…¼K{¶y@ôax3/ˆ\EIJ~WB?ÉÉ šå¿û”2Dïá¢+Ê6ëª\eÿ/öÖÂQNšBK<ÙœJ9T“ÄÓ€o‰r¼qÊ™‚ù0aÄ¢¹Œ+6é¾ÔR:~ÖJ2a(«iÐ4Æ ösQP² ¥,OíuÈHÕ†pÞŠ­íóyدªáŠ…!º ÿ•Ä“ü¸bXÈyªÈ©èÞF¼B´ªU¶äµ@da]¶?a—îé(7x"Ó­mâr‘…$[ÕX5:ÿ+ö²Í̉¦³°B CqkÆD“ââT Èyñ//³\™ú|Ø~HónÚ),Gë%’xWáû;îV•fÿc•]?¢Û[|Td…’k–’&á(¤U%x‰HO„w*¥Ÿ w¥;ZkuéCk"À¢Ú© h ªìªhHQ²ÿ•ú¤Èm Ípéq»¹U‰€Ïá2Þ‡xø¯)?i¾ÎZy|åþõ¬sù+Éë¼"éB• ÌcJî ü Ÿzýœ¦÷¦Á­móõ)¦ƒ/„Æ€¯¨„Äq¥Wì¯û"«Þ‰lWCsnÃy¤“4Š>ÔãʇýŸÃÿ†@‚¢ŠëUþò¸ äª#Ž\˜py7óüOú¹¹2‡5H¹²Ag9å”^-Á]½:­HíÉÂä‰Ç“ÝÑ{G À¨f•â€:£Šª¡qU§ù@ü_åä-$+Ú\Àö!UÜ»º´²Ò…VFôØíQð¯AöpLnYDì¾þî;a5ı;úq_Š…þ.A8ý®_ÚOÙÈâ²E'"›È~±+O û“R=û/ìæ%YrA Çµ÷·´DHau€–cÄ·¬Æ¢Ž>××2 ¸ÒV*b‚å„ñ‹Ò"D_‡ÔâA$|\Tà<ÓIΙë4(Ë%AU/PyT“ðƒJNµÊ2è’âY¾«lÓz·*÷\$Ž0PÔK^;þʱ-Æ.ÿªÓ“b=鞨·(Ë0˜Ùý8ÀÜr^F¤ßl¯ènÉÉv„ÄE+îé’AMÕ–½?koÙþl9y†º¤o<~½ËFÏsñãÌ@ò )M‡ýœÈV™š)åü¢ aqXÜ AZð[ý–a äæQBYÚ…ó;ˆW‰)êP6ÜŠü#|¾Rô8â>¤ÎîK–g‰P‚ª9q|\¨¨sÑrãÉJ@µ• †gjq#£ò$³‘½iÈ9›âd;§Úuã=¨Xb§"ª\‡˜Œkü«Ç*Ì(²Ä]«µ.¢HÁE¤RŒßîÜ£5[‘Œkr©+QbW&F"œ™h«ðŽŸÈ¿ëd¡{R&7Ý i4%m‘±…ÜÈŠQKTJÙÝE2r~ö«¯’ž‘<Ñß´ïÀÉ4F5W'’èxý¯Sö>9)FÝë©/úU¤…UüÌÑÈ~n_g„|k(ª#ÜØ „¶¥Sn }un i¹4­{òé¾ZE‚ÀÖj2ƒÎJ¼ÌXFA@zSÿˆä£¶å‰ßdá£2ýMÉ ±§ò³JwûGjœ oVÝË’SÀ•‘¸ð•[Ó&à°ÝÈ­i¿Ãþ®Z YQç’X,œ¢œ¼Ò²Sˆ,Vµ$} ´ør@$P°ÒIͽsŹ]r—ÑR)Ó®>^H™ÏrÞ’,‰ô‹ÊGtâ~2;ÿ““‹™ÅÉjD¥‚?j¦±¯ÇÄŸ‡©û9NI7ÀsP¸ ”±‰ID/îÈ©©ø°Ž`¢¹ªÜEq ÚËè„FDR1ë ªÕå\Ž3cšÍ | E’%hÀUä>Å7Pò–øØ7œژÌu]}nçKkx"všà$4¨B¦qN_ìÓf§ÅÇ?ªû½HŸ*]l¾¬ÒÚI1³Â3F ·@ Œ ™Gr¡,-%ãJ·"p,À³_³ðŽŸëe€Ó»­fVXšBi. fZT݃·Û| †QoÓ¶–öé•™U„;‚^J|Lið÷ÿ…Éé#uC-Ò¬lC„1QI‗QÔÐ «ña5ö y)@±’Gãþ•:ª R±=ÿj¸¿¸);|_ÿÕ ¶w]#ª(n1«‚hyúŠHjq üûYÆÈVï^9¨ÜEjp^Hpa5X0á"ÑÔïËn«þ®“ÂGV&ŒDXÎ"Uèþ›Hµy<”єרeÙFbË(lˆG’‹ÓXä*…*+ÄU¯¶Yúšöè™_¢˜!hT[_ne ñ‚Ê(»RŠÌZŸk!s¶sy¥—7\‹0Ž.A£øFÍЃAÓ–JØm¤×hÖ÷ ‚à$É@xz€©_´êYWì.W*¦Ñf>ieì–Ö‘‡àkwU–4 Hvr¤Óãäßì¾Î[D×ô‡û†¢hŸèÿ¾L§/ IkV-Y <VGkQМ„93È(Ò[rѨ¤¡`Ë sê9l§oµÇà “hT½Ó¨,exDhB®yTT —‹|/”žÿ6ë?b_c3ÜÄcb«Ì1-N£‘u¥8±;¨þlœs Õ^yX}z0æ5hÑk±WeÙÕ{/Ãñ~ʶ0=ë>÷)ˆÍ¡ ±;©?€˜P~×øÿÕÉUݽöjö&ú˜oSŠÆC)m•¸·%cÔÖŸìpC›)‘³~êÃ4F.D2“@Dƒ~‡ájåQ;¶K@B¡¯]‡gB)º’¢¬ÕýžC';áaêE]KwkeWUT€• êhQIñ¯,„2,äj! m+=½¼LâV¢™J•i‚Ðÿµ“;|˜Ç¢ÝS”óܤnË2p!jË${r´$ïÈã‹` å‚úìÉ9î$I¤ #R ]ªzÿ•–Œv)§ˆ¢tpñ³ÌåÉ£bÿ·Üý;ng*˾ͰÛuÖö©%Š3%ÏîÖ$oM^›ü]¸­ùXˆù/@ÝUk )[t„Ô! ïû@øÿ••Ê[y²ŒwBˆçºdK?‡Ô¥bÜU¯3ûKaþͲb ¶Bù#´×[›ðÂ4OM)áRh ·ÚÈäËåNᤖ}JXøˆ-¥ErEB…¢PïÔý—l`=Ì¥Ö»ÔC„™n%DŽ5[¡êœÿ¼æ;·ø<²ˆøº¯³¹·‰¦2ð óº¾ÍÊCð½>Õ<$‹,LÅ€µÕ£˜foÞFO Tšüjž#nƒ–'n£%ìU®.xD±…¢„‰…Ct.Ǻî[¦UM–ˆ²†äëíey¡$ƒé¹Øý¡ü¿,&„~K¿šk„èqÛÄ‚90Âu$³ƒZ†þo»(œ·o$ºrÍ'§VÞ )“ÇãuR@cO‹l°sݨïÉ.¸R¢hÉWܤ¨Ô¡§Ä ?Éÿ†l²«Üšé^C3I hÄà9¯pvãʧùUr9c°eŒî[Õ¤¸§%øUPÑFâ¬w?<e‘)”»3³Kž FëH€ñø­rÒv¦¢7´dÌRB]£c$e”ƒÈ§UçL¬~–fþÅÔ±¦Õ­ åCɘß¡Ùh¸O5”õk‹´¯¬±òu YTµ,O…G– !6©k*½ìLÃáHžF4*HVª=ü>ÎB_K(sJä{ŠÅr$`èÎ#â…jŽwF5û5m¸åàm]í3=PÿY•àúĆIy£5^‡z0ý¡Ó'Â9ô bG’(+E£Ì›ó~sÈ,?f¿²?g*ç Ü6ïªÛý|,Ÿ½ôO$.übPÔQ¶ß1ÛŽF$ðÚeΗÛ~å%žei]ø³ºW‹F¥ÿð?k#)]ÄP²ƒ´¸Vã0³XÒ4ä®~:‚ô(Õ 3·û)þV[ÁG›_’ù¤_ª› œ¦p-ðŽ4äOe¶VÿWFìº"$eaʱªÿ!N ñaÓoå|züTòKìb[hmb/Æh¥*˜ŽF%éPPIÈ“–ÈÙ>ï÷,"çºGK4¨Œˆ$ø¨K ]™M.Ť0J¼¹(íõ *GüÝ’=Ì´Ò#ŠåzCU`+VZr®ãùNëäپʺœn–6²(gHU#JJ>ÕMHâOÙû9VáeÑsÉéB£‹«ÍRµ< ž¼[þ£Á×âËøZfXe–Öp£n j®ÒP4±µ~ÐVR¹erkï]jN)"JËMÈ)ÄÜ«Õ[® €_½0·XÄé7ïBH}B9Zž‹_ø–G!ô„ãµzÁ’h‘X¨mùq5a_åaË®0è²<íWM‰ù[¼D‘°ŒÆiERªh§Àƒ•äëlñôAÍyrnàÌ *ÖH’5êåê›(QþVX¥>¤CJü‡áfD¥A?*š…>ÝòCdy¶àÝ$“•Õ®T4ÁG  UÅI<ˆ?ñ,¼Íqå·.ª-3Ωs<±ÆÁP¡ GÃÔЦÝÚfSÔ›N·ñýèpÇ—Ä@~ÕOüQЖñÐ.·Š0³Mó”¿¡įɃ!‚'Z|\wÉE1·s$6ºjÆÐ<€ÑxD•ˆ'ËöÅ·ÙÌ\|Ë“.JVòDú¬O—c}• yµ+·zòËkÒÒy¦óÛg•š±*î<…~,Å2r€c3…J6cëqâÊŸ³Ä–¼[ãôÿÕÌè× ‰?¨§z:ÖÈ£r^$#I ¥EhkðÑO|£7ÔÙ„lí^ZÌF@T±­M*‘íörù¶O’WpÇÑ ¢ŒÉ«“R «ùòûYA*¯êYýP¼ã`àéÄñP>Õ åƒÍS-;„¼¾­Æ6’påH%ZÓ³Wµ2ŒÃ½·Ý8é·Ïc†;›ƒMÁ-ÎŒkVêóe’>¡Í‹!È×zÒ‘®ÂÆ©ôÕwÜ£ûY2vh¥;‡å Ìp±,“ûÐäÐ÷û9(ó‘_u27£q ôB¡Býþ*Sù±ˆ;÷ i¦-Ì–òÈdcd“˜#ZQQP;oO‡ù¿k*˜¦ØîíjI'a ŠyªRBЍ)ñè x­†RËt­ È¨äñhܹ4#á"§nçÛ,½ùÿYr­¯ÕþB.Е'MÈàähÏðü'ô×ùȯU¦»Ëe3,m³É^+N*(BøS¾W^¡m¿Âi"ôÇÖT…QdÞ­ERæƒæwÿW-½šˆD*$ŒÒÊ ¢8dbÜC71Åxöäj˜ƒ±^âšÆ¡­£­gÞ¸vsuä®â½þ9KpH$w @e$äT}¶§JìeÜÚJ­‡Çª¬lÔô žJÉÓ›GB*6 è¿Ë‰6>)‹™ÚÚ$IxÒA!„ ©uU ¿¯ÚÃØÛq$B–]øIÆIôç]БËâ_‚kd^—?;:ñi`ýã*ç¥>-ꮪy0û83F‹,D‘kVÙê$åÊ1¤ŒWã Ü ¯vãMþß,…íLøwµ—7³\»I+s$1ˆ”“Mû¨Lïav„¸%m¿d‰ ¸Rj¬¼váŽåeѦ@lÈy!¹IIëBÜx|h½–›oü¹8ó>æ'`ö© x8 0öËb:ua/±¦%¼qX´q€‹l8®ü@+FM:2©Íÿ9²?¡ l—m$žº7•Ñbˆ?À7ÿ‹:²Ëåþɯ™S·»š;Ðë[˜Ô¨Vî²IãZ÷ûpö¦'orä:CmqP#³ÔÑ‚Ù÷8FöPMÿÖŽé‰m*#ÌY±zS-}J°~<ä,;ÙÎ:{rzøoÍOPµ6ÓIxÕϦ%jчöb îÄí²È£Ò–6ŽUwY‰;·Fôâßñ,‘æ€6µD‡Ô˜¨Dõ% B TŸøñPS[é ”b”n05B•¢°ìwý¬¦·L¥¯9¢uV0ÁG /ÙiÖʵË{PL|·j‹eymêr·¾S5»pZÆêwJniËö¿Êÿ'*Ìy¡³QÐ¥WfãÓ¹·`ÅWbwñ*r#³‡%½°éÕ3º¹)¤Ø_£ïDwpÈ8’Z2paÕ½?ã.F¤G—§üÖÉoÓœ•êPU2—ôƒÇ%U˜3FØJ…øª¿êå¸ÎíYɧ¯dwç4¯"Ò¦ªôÿŠÚœ‡úÙŽÔÝ"ôßQãr#äUË–‡5^uèNK!Ùæ¡e#ǦÍNÀKBÐÅ!*{…èÃý\ Xߤµn‰²°xÅÊ„TøYK|CÅØø¾VÂyŸs‹¯¥o«ª¸t©õ žÛò¥{´ÁŽ­3ºW¸p--9‚c’@Òšn¡®Ý•ÿc”Ä"ÚO¤,D’]EÑ%W¤’ QTòûðüh~ÕrÏᦠw]«»‹uæ„1ôÔ&悼x·‡Oµü¹V3»nNTƒP F‘YÙ.áø‚Ÿ*ª:ï–õ>æ°5!sgz(…å,0ûj¥ªymF~»`ÂAe”%÷°(”0¥ jB®ûo×/Œ…4pÙDé ¬J¬ìážy(%ªH5âµÊÎæÛ7»Ûšb/¹òUˆ'§Æ¦œ+öŽßi¨Ã"9_zeÍVÚ9•ç’Iÿ}4sЙ“0ãðn©þǪ½å!oqn£äÍû Å@à"«Å¶oQy7OÚÁG˜ïÿrB'Fƒ‰30õ »QÏMÂÇöIʲÊö à(n¸›Xç~aï\ÌIn‘‚xÔ/òŒ»¯¹„¹:ÎÛ”åÌ~«³1ªV¤†Ü QZ¸“³ÅmÒ.Rˆˆ#‚«ÅªdSáñŒ§ˆ–Þ¶Kqm´,¥TÕ£ !* Ž_øÄ?k&eb˜pŽj²MÍ!nQ°¹l¡¤ÇSöªÇáÄì¼Ó ‰õvffhV*š»V­ûBE? ÿ“ŸÓçlà7GÛ¬‘Ù,iPy+.ä¯ú½}¬¦\ÛG$–0¿U„·fFå3AÊOJSòs(ÜzÙBîÝ®4ˈ«;¼cÕ¨ Z*k³W¦š,H¸Òme$k<± W1')V!€Bûð×ö¿ÉÈe"™ãÖê í?BÁZ¦”B>i·.[ä`ÊiLÎÆå¤”±? ‡R(§ÜöËÇ&£h×ýqýÕ`]2Þ![5ÆÓKXÙx–hZ1+­8¤nß Üwj¶RhnÛÔ:É3ËpoÞJÜ•ÂŪK µ{P.@ƒd¢í”¬%ýZ4÷ʤ1/…U²C,Hkçu‰åDU1|E( ñN}~rqa/$$ö‘\Ë P°Šfa-¤ Ÿ©¯Ù¯Ù þ*Gw4ëÌä‚ øE ƱΦŠ}’6p>/åÌ||Ènɸ¤ÏþçÈZ8fU 4aGLñ éü¬­é¿ù9dÅÇ͆3EÒ‰Œ÷vLA–ÒF Ãì´£}dYòø+ݬµºnR¥\•š»zŠ»+mµ?gj×#¯"’T¶³O¦Ÿ C“¢þ×_‹+6Kd‡DžUy¦’¥‚4Š@å½á½¾ÖZ6i;”ÂÎÉ ( º„4ÇcB;ž©Aþ¶W93„{Õâ´gžÝbŒ†=HØ„øO!ÄQ¾5ÄJ•1Ú’ÉoG<Ú"ÌËnàü#ù…FI6Š‘*IIf$+¸S¹è«Pé°?´¸9ì´±ÓN+ÍäŠ6æd4åµw=›~ÏÚÊæl’Û@-ÕLskêcf$¡¨7Šÿ­ÿ6㇪ä’ÛŠR_°) C]À©ØïOÙÿ+-ÃQÙ`Ôïîä# ƒÓ %а¢½ SþáÉÆ@D_6ŽþIòÏÂÀP5ehÏ%Ûñjîvû4ÌSõ*<’Ká2ÛÌ”*d©pO#éšqØÐr§Ù̈sh’¥’[™NDGñ +@GJý°{}œ“ïXŸVéžœÀY ? Ñ·Äv­(;?ì§(g‰ŠÝñº»‰}V+›„ýÛ1¤U˜öJ‡ö³6;GàãËy2-Z’Úà»Q* 30¢šÿ•Jòÿc˜XϨ9R’£åÇåkr¯Fâ»–^%J¯á¿ÚÉç°ÀPú¼ÿV‘™ãk„§>Œ®HT{ïÿ–`-yÆèÝs›éÊáDeÒœ‰¯!· ì¹D>¶ÿàSÒãXõK6@@– ýI_ˆŸ•)†Dðê û|9rBÇË÷dòV4¥E7ØwÌq»Ådï]œ€ªL¿G!ÁA§Úø|s6&¢I ‘Lt‹ä‹’LÌ(ÒzvʼÃpÚ­¿Ññ}¬¯(gˆÑ]«4F(¹PG*–PükÒ¨:=rù¶O’UG£Ueô¥ xüAýJ®õ§&å—žm ë+C ¼Ë c,ÌŸkp¤m_³€ ¿zdi ¸ÈԻ¼·g“È#ínᲇª›1ò]¤‘è´âG38ˆÏöª´VãJóÿc‘âLÌM%¯ªz)ÉZ2Wˆ­Fµoø\¶÷i­”.¨°]Ü3«ªGê¶¡äÄqý£ÇãÉÇyÀìë¯'%c`²[Ö*0‹ÓW*[Šûþßù?8ö³ ÆŸE`§uYe,Pî€=*Ô97óf4¥eÉd¨!yb^`©iwpU¸€ rnU4ÿˆdãcìk;¡ÛÐ4²ôíâgjÒ|;6ý0‹5Þ‰s-i£»b«+;©Œ–áã%Gù_ìrS6±4eúÍ™Y ¤rHÕžo·_å ø² î=Ì¥É'‰LQz«'½F!™@cÉGŸÙ\·«Z½£$W $„´ ¥û%˜”ßmûž9ÝæÊ)¾ž®Š[a%_˜©m·CC•ɶ Ó"’Ž8Ѫ@5+·×â¦\¤¤!bÒ,“Mp¼yV‚5cFV#áÿeO³“ç¹¾ê·Gé™À ‹$¡Ãî®Æ›ƒSû Lˆih,maµE¬s2–$sßÃoå¯|49õPon‰¶š¤@ï91¡‰v£~ð•‡RNW—›n.HN±,RÆPÜNîÐ.áÔ1ûåü4Ãu¿EZé.£r²¹y¦;…wôÚŠÄÙ^”ý¬•ØÖËî¢Ûà *xDµŽ¢!ñ.õ¦Ô¤…RfUUŽâ8˜C(V’ž¡U˜–þ_çÁÍ2äës$“ ‡÷F(•D’…džaÀëTçöp_$Ǫ\à8ž9Z5Iäâfbq—bE|8'ùYtM–¢(#!`ܹ·iC¹f«| õr“{ÁΔôÈB@‘™ÙÂPG#"îxŸå5ÿr̲²M5Æ;R#«I"ò 9E2±[•Ú©Äó¥þe¡¾²É Dг‘_WÔ<eyVŠØGÒTóÿÙmoderngl-moderngl-773b733/examples/data/textures/xneg.jpg000066400000000000000000000554031470420062000234660ustar00rootroot00000000000000ÿØÿàJFIFHHÿâ@ICC_PROFILE0appl mntrRGB XYZ Ù  acspAPPLapplöÖÓ-appl dscmòdescüogXYZlwtpt€rXYZ”bXYZ¨rTRC¼cprtÌ8chad,gTRC¼bTRC¼mluc enUS&~esES&‚daDK.êdeDE,¨fiFI(ÜfrFU(*itIT(VnlNL(nbNO&ptBR&‚svSE&jaJPRkoKR@zhTWlzhCNÔruRU"¤plPL,ÆYleinen RGB-profiiliGenerisk RGB-profilProfil Générique RVBN‚, RGB 0×0í0Õ0¡0¤0ëu( RGB ‚r_icÏðPerfil RGB GenéricoAllgemeines RGB-Profilfn RGB cÏðe‡NöGenerel RGB-beskrivelseAlgemeen RGB-profielÇ|¼ RGB Õ¸\Ó Ç|Profilo RGB GenericoGeneric RGB Profile1I89 ?@>D8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zu¬s4XYZ óRÏXYZ tM=îÐXYZ (Ÿ¸6curvÍtextCopyright 2007 Apple Inc., all rights reserved.sf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlÿá€ExifMM*JR(‡iZ;ø];ø]  ÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?üµ’Ñ&É€#H$u>ù«Z]“Û,±É(`žHúPl/žDÉ`°Îï/žsШ®jêx*C‘»Çÿ[ó¯M£æ¥"®ƒª%‘¥H§PÄa‡õäôê9®®ßP‰àEV ȇpfê ãÏZØ:ée|ù@d¶2éŒõ¸§µåÓjH|³ ìL ç¨>¾¸¬ír¢x²rÖ.-äi÷¾Tƒ÷@<¡ÈÈõ®]ìÜÆ­æ!‹óƒþ8ã¯NµÒ\É$ñ6Âä;’S©÷?çúVf¥áø¯”¬D|Û{6}¿ÏZiXÒ -ÊúŒeŠ'TS*‚3Ô2úçg¯^µ×éÒY Hºä~ópqéÇB9üëÎf²›K¸T“97{žk¨ÐuÆk9~ÖËä|®œgØÊ¦K±¤¢·F…ĸ¹‘÷j€|Û¾b=?—ó¡ÅqL~W1$dŒ7TôçÞ¢´eWŒ¥ÃÈ»‹ïÏÍÆGáíïOÕOúj!U*ØwÌ2{{}i\V*êw7cR f®Öë†WÝŒV÷ÍO£ë·‘(T.dVxey9ÆGOÃ¥Eyp¿aW¸"I8,ÊO×$|ÊM^[9¤ó•ÕXrØùœõ/T›z6pT©Ž™¸ëSÙê |$YƒlŒn%Wn7g'ÿÄÕí>ÓlÑ›¤p›3ÊàñÏzc½•гN“äF|Æ ø-ƒ¹wpÝ=zt²Ån•F, úúàzÖ†©Då¡ûÒB©ù@`è s¥î/ ј¥’4$±E“Û»ôJV¹»-E«¤’+\2Œ¯§89—ZdÚÜ×Hÿ2H7ÄwîGj«wþ<›·Bdu’>£Š³¢À‘ïIÆp,©ÉíŽôì‡æEyp×hí1Df%Aúõ«”%!†) ]ƒçܸäþ¿J»ogic,Ïmç°#q9íŽÜV­·†F¸Œò(‡xÙœ|Ä÷‡¯^?Z’äŽBÞcl̮Ӱ#s`HóÏJ–ÖäI IpåFè_®Hè¯çéSµ‚ËrÂÅœ, «¹9»t?NÕˆ5 âRªÒçÎܧ©à{®iÖ¾eÔû"mªƒ«(ÚÃëéï[0Ï5´B˜Û>¤éI¦Ìœ¬:ÇÃ6Z&›ÿ)¢{—,¿0‹8$(Þ½Jeæ“e ¿öh$0Ë6ÜÈv=*)—7Žr?Ú,{¯5›­ëÞ\¯Ÿó1;L˜$¯=©ý(Ql”Û5—Xöùˆ$j a[¼žã®}W›Ty¤eT;s¸ñÞ±`Œêþ]ý× p!ÚǨ9Ï ­kgy6  ’€ü£¿ZÑ$‘¤;¹Ëb «úb¡Fº½º3B±…ÏúÆ!XqÔvôíߥj_kbúܘ>Gm®HØÁ针秵PÖ|BÊ¡.‰Â±ÁholQÊZl£hßÙ0³Ý(nb˸¹É?x“ÏSéRÞxºâÎ5þÍ&<7…,Χ¯ FðG-Á¹™•"-ŒõÇN:qRiº„s[Q•#ÁÆ9çê(±~l†?Î,ÂZ[ZJìa*áF:LŽùªÐéO€_¿Ke£Áç'ííü«ZßHb¬· ¹`A<Ÿ\ŒqPø‹Jº!òâÄKŒ«r}Î8Iy¥ØŠÊ(íf‰•LœÇƒ´çןJÖÒ¯þÑ"ª|Ø\®fÞyäÔ¢šáYcÙ‚6ü«õ>ƶ­u‘};îO³…ËÏß=8Sh‰Üì’ÚðöÈìH XŸ”þ¿­E{}$æQ(ê:IÎ8—oz¤u6kã8Wm¥ŽqÉ·åV¶â·´wÔå*©ÐÇßõ¢ÆdzÄpÌÌ`vcÛÔúžkJyØCˆÃÆYCëŠå¿á"¶]I ÆÒHÃ’N:ûçëš–ÿÇÉÂ-PnÇ>aÈ5\Œm6h\Ù‹‰U-Üo~æê}ý=sZ ¤Á¤éÁç‘|0Iþè÷湸¼SåÖˆÈØä©ù³Ó¯AÚ’iO™|¥¹vuÛ=—ïšj,M6tZe¢ Y#9=rWŽõNâF·y–6;dÈoV™ª7óMiÖßåå Âîǯ¯ëIg7ïΞt„ä–è?úõ\½ÄŽÁ¡ŠÎàÏhÏØ¸]Àñ–ýrëI}¥@èIÚ®yŒóÜdŒÔf›æ,¤w\ ú:}GVž›¨†‡÷¾Y‘ Ý·§së[Xɳ™Ôì&Š)Réíl‹óœ~¿ÏÊ]Eå\HÐ|¦TÃå°01ÏdÌ»H]LÁÚEÆ>ƒéùÖ·“sk,%ýÖWÓ×éÖ±om[¯7÷ž\€0#w¯ãÛÙÊ0o`A\ž8î?ýu6±³Š’Ðì5†Š(œ,‘¸#jn Žå»Ÿ~õÇÞÞËnùE*rƒõõêk[N¿1„‰2@ÆæÂþ\ý{b¹é缕eØ‘#lî$òMˆÂ×.Yø¿Éeó„Q¾r:ô뎾Õˆ|V¯kæi‘Å©Ö\|ò+ÓøÚ‚ËœŒ¸à\÷48%ÕÓéS@†+½©† Ã;ŽqÇ= =#‰òÑ*¾à~nNóý=1Ú³Ööç]•Äx/»æ.¸Ú1ëÜñéZö‘ÄwŒÀc=i8î…´±º»ꮡp»÷—ð=ºÔZµ÷Ù®ˆžá±‘´@öàçŒ gÿÕW/˜Ï½P,qªƒÙÏ=ýk6ÏÃßm¹$‹òÈ%‹<ÊZÞì}¼ms€±Û“‘·†s§NjHô³Îžv ¸üܰ4Ë馵xÒM’a¶ü¸Øc­Y·:“*°Ž^ n£Û­$&O.¤ºl -6Jå¾ú‚3Ÿ\U;û¡q1pTùƒ xüê)®d‹1º·3ŸóïT®.Z Uy £ bšDØ”Iög3+:†'=¾™«šŸ¡©o• 1ÃÎÓðÍeIùIJ³ÿx£>œw«–:ÄpËœtýáŒ1ª³c~Fö§¤Æ’…‡)PHÏá׊¡šdÔ\©mcÐCõ¤°žïM@O•™ø'Ü ñøTÑê[“%cùŽwc§áÓñªQ3½‹ñ=½ªlgˆìlna’F8Æ;dÔ]™Ïî|Ü7ÊNÏ”ëŸçÖ±c¸’úáP;>O$ôµg†e";@îÇÑväc®j­b_™ÑÙk1ÞiÒH»D§ ä¦;îzt¨Zët )¼Ã*å£c¡éíý*{‰Ñ%í¼PÉ“Èo~¼àõ=ɬ+Ã$q,â`~U_vôªH|šÜß{Ó&’ÑÊÄ¢/ñ©“g©äõÍR•ÆŸ ˜ã„ 0Q’bêG·Lsž X±œÜÎ-Ô4.ê0CŠäÛ§Zv­j“íF*B¨HÛ»Üb…í£)j:b^'œØ ~`HC׿½$V¿aµ&7’PFAfê1üªäÐí³0§–XýÝçòæ¨ß±·Ó’9òª¨B9úƒÍ %¸ã+õ,iå&±Ê¨a¼£–>ÿZ«¨\4:Œhª¾C à ‚éÓúÔZz¼×ªfŽFUQ–Ï ×ô"­j;%™N^_»¼ðÇ¡ÈÇ×ô¨v-hÈSPq{#ÈrŠ:ƒŒú´ûTZÅмI•K0Gݰ㌼´É.̤*: -ÜnìqÚ«iº‹Ã0ŸÌ<ŒdžØéïRâ·.=Ë-’9˜ƒƒ¼œ1Ó½dëzx$|¸îÙ)z ŒTš¦©2I½Ž$Ý»$.߯+;Qñ\lbw(Fä–ã¸?ÐæŸ'™i»ÞÄ—›7’íË8()ØõëÈþf³à½†(™[ælgæÇáV®—ÍhüÐe;ð ®2^( 5ôs: 0*Ï>‡ÒŽ[—VAkp“®†Æ\|Þ㯭T´ÑáÉœ1;¹PãœœŠ”Ù¶˜CÍRló· «NÎxm§Üʨümm¼òsÖ—-‡ÍØ¥©ø5H¾ÍtY¦¶2áSÛ<ñÆ¡‹I[HäŽá£x”ðO̹ãŠë"œÞ[³\³ƒ }k6xšå&X[X66ŽN:zPĦÊÑ[yHžLƒæù[Øõÿ†ônš8íKÈò ¿8PGþ½k=¨ºj‚ ÷9Çÿ‘M·ÓMì…e¸ Ã`P=SÚ•ÔŒ³·R¨–]ƒo ‹ýOJÖ´ðåÝÃF–†(a €0]ÏüÔ—¶PÙ_ (R6™ –fÏLœ€=•YSŽ-0ª5É•IÚ3éœQÊUÛØM7ÃÍB—ÍjìX‘µäzžIõè* JÎkMD˜ ¨gÚç8ãëÐUçÔ.¥"pFcƒ+gœcüz­q©¤ë#N¿3¶P•<}GLÿ.)Åw3•Ð×Ðã˜!HÊ8ÚïÇ·ãY7Z[Åvé4Eœž ÈÎLÿJÐMfKKcnƒšCãؤm‡‘‹yÇëœÖŠ7Ø‹²×‡n®!Q ‚Øž<ÂK2ޏµ>ÇA{HólÅÆçcò¿áéZ|fŒK;c ’ÞþôØ%xÙ%9ˆ¤øý*Ô%ÍìA¦éOw$ŠîÌsŒ®yö'Ò¤Ôtµ‚ÕÚwHÈÈA´ž}*±-ÕËLRÙ‚DÃï0ßJ‹P³Q$I˜»¥i6…>€§SUÊJwe ?J{)m䞨2¸'ÐX]%̪³Ü¤dK7ÎÜžÁzþ•—m¢›€ŽÆFÃJ Ù#¦OLr}+sNŠÕ?0ÜBËœUè?­>TŠ›]Mû¨¦Ñß);¤|æ£ó#R} oA׊ÎÕ ¶ÒÇ=îäl™-×rªƒÆ? èÌ6níïl„EÊwè¡õ¬y éʱ<2ìO0:‚™êN0rzƒøSJìÓc˜¿WÐReI6*˜Ø߃Û#œñÓò«ºeâKo‘]n§°Ç<þTÝF|Z³¾¥<ë" Æð8ãü+:M*}2O2Êx¤ P óÉõ­”ZFR´ŽƒSP°ŒHpTçÔÖ|—R5—q~RGðûþxª:¤—z…Œ$@Z2AèO¯ÿ^¨Eq,÷Ã,x@Øçöæ¥ÓêD#æmͬEk`•˜“òáÎÞ{ç1»1Z9¶¸rŒƒ»ÇbG§Ïsã‡Eb#„Šše–Í–hLJ¼‚Ä®îßË)ìÍyR)Í×SNåÃ2|ÙÉǽQÒoÕfÌ™…É}ÓߟƵ•ZIÆà!Ô¬>¼qžj´šé _8@Iöü~´½µ°ù–Ì­ªF—·/µüÌ`äŒ:LHãÆX•ƒFÀƒ‚0Îkfáí¢Ar‰/9玙ÅSÕ•¼üÈÍ/<‘Îú—M0UGi—«4(ìAt'$Œ–Éç¯áM´Õ¤Y$s|Ù'“Y’Üïcä«(ªàQ’>•rÌëûÍŽÝN3Ÿ^)ªml]Y±~‚Þ(œHÁO`£œ÷þªÎe–öBQeØ,Äa1Žþô²i´E–dóÉý;Tš-¼·¹Wp6݆9þ^´r°‹ìY–õ!ˆÅo Ó<‹€Èw¡=É^=9ÅKap÷ªÞ`xäù@EÛƒŽ§žsžÀ•ÓøkÂ:O”óê— <,¢_,íõâ¢Õ`±C<ö3œ‚xcûÌdO$ZÎÚèT›ZXƒJ™m¦è>æ8,T z«¨Þ*LÞB.ßw¦Ñœ©-ô2MŽùyùóÏ¿'“þE7UÔåU h® û£èE_$™W¹^ú왼¸Ö<ޭ޾¿—ëC8¸…"Ž5uU%†áƒîyªì&6eÌ8R1–ÉãÔZ»a¦OmnÐF“²I‚Q·=Ë7ÿXPá¦Æ°k£&:¼VB¶±y‡Ë—]§éÇùâ›5ÕÅÕ·—Ï#FJ0 zŽ~µ±iáiÝ$Öº¨û›ÈË3Ÿö½3œz’ëG±‰äŽ™#¸nà+Ÿ1+•댊•åÊÖ8‹PÔ]VI ÑF8îia²[(þvf•p1×mt“iÑ}šYµöü‹²`¡¿ï¬^@5A,~Ócþƒ¼oà£0m¿Râº#˜Jf\s‘(23?—À³ú÷Å]VXâýêHÁ=Æ¡ºÓ Î ŒÝ0¸ >½qW%Gh‘c 2>ûu> n?ÌUòXÎè¹¤Ý —@©xÎrcÇ¡'¯æ+Jöþ-5Y4“Ï!å­âL–>á{ p3ŒqY:~‰}¬[î†9ä‰s‘ü¿èôßÜZŒÉ¨[[Ìc¼Hמ˜b ^¿Ý-]ˆ zެªº«Ïol0ʇ±ÔƒßäšuÕ†¡›k¹ ±ˆá·ó@ê;g¹íõ­'N´¼œEžq ê¦ON]ð¿÷ÊûŠªmü3iq‹û›‰"‰È*Ò¨Æ;mA“ëÉ'¥ "ågcÛJf±šâÉ‚™ÁäƒóøÖ>¡Íô22 ‰¢8l¯Ùää`ƒÛõ®¾KéŒa'K Œ€x’$„t8§­UÖt‘­Å³OtŠB›¶ÈÙ;³ÓŽ ֈŧcvîyn½j4ûµ†Å&³”ýèÆÖã±ä5d^hîÑ8E'Ì~ªp8>Øèx®ãQ·{Yvߨjiå ¸’çj²åÉ5s©³\Ä´;¡ò¼¯9§Nk²4û£&µG5»ÅnQ¦Â¾q9 uÈã­Gög’ek™¥‘ l]íœޤŽkJâƒJì»òóíÚ®iÖÑCK 2,¤³± ƒù÷ªöv'˜¡5¸·"9ä ŽDg•=»~•NY…¤Œsî<À ŽßþªÛ»·†$f¼š#‚cÙ/Ê£¶æÇòªCŸ)UäO•¡”o÷3ÆzT:c‹v3âÔL[cxö“¹”œtÇN}h¾žßU…clq–Þ»³×ç‚8>•µH`žà¶à6£Û6à}7c,Z´%ÓP™Õya±/N›°9Õ‹ 6eØxbkˆÖ].V ǤÀ2–è1Ÿ|Ô^!´—JºT¾]²Uð»£#Ž?=+¬Ò¤Ã3B!šm¹häó2}Àã§ëYþ!ðÝÌö~} ™ZsŠp v8#ïqÓŽ½+>MB-õ8öu–WY!ɰŒ’=úSô¨­lÙ\yÄKœ³&áN{UëË –]²©ws§ŸNœÖÞŸ¡Ï}fÎÜ[ `-¤.=†õÿ ¹BËRÔ®dêWºdVH"ŽV™À'-Æ ý:Ó%XVX œl8œnßϧ­ißøem‘ÛQ…fq½IÀõùFž´ÔÑÞÛM2ÅÕqDer}I9'|Ön*)DÓðÆö˜¥)&øŸåØÌ ’}ÀúV7të{±›Œ¦ ²·‘Ó8ÇáüúÖ½ô6Ì¢çÌa”,*σ×'8ÁÇøÔZ•üS@UƒIæe˜c=2O=©FƒnåJªHç`·Û.bB2 Ý/Nž‚®gõ™ÁUUL·&¬¥Ì5[–Xöƒ´²±#ñïVâÑm®-"™ w ̸vÜp?ZÒT¬dª\n–m¬V6ób; bŒ¦N½zÓ:Ë-”‰²3+„8-'' ÀÉäÖpÒÞæâUYm-‘zobÈ<ƒÏ¿#ó®¶ÛK¶•-‹ÞÂæ0C̸éÏøþ5œé•¯©o¢.²Q5X䊂Uw!ú“žÞ•#ü?ŠIÄtŠY–I¹P1€£iç“õ®…4ø-ÁþS³¶ØÈ‰¸P=1“ÎúÕ´–æÌF²9CÈ˱Üdœ}GƲ屣wÑv›à‡¶µýó½ã.â¦8EQŽŒwéÕk÷C’xÜ^Èa –(ß)88 c#óÇC^¯uu!²2Gtà2ü‰4›ñ‚zªrÝIíÉÎ+”×¼œ-õ½§ï 1D³9Ý×;™~Síøæ¶¤®sÔ‹GoV%U*y%Ãä}jí½¤Œ3‚>lñšI¡f”­Ä­$„ß{y9䀩ëD.…NÔ™•{™1ø`rkµSV9µ¹¾°IfòZ?0aó]ËŽ‡ß¥jجÌQCs»:ÄŠ£×fнnk¡Ðks?oçqdöŤT™»Ô£Ø“õªrÁ&͘™“®B`Šî®t™mâp¡ÝHè§å'Ó§zʺÑäA2ª;¥99>£8®˜R0^§3k¡=Õ½³sœä¦@¨®ÃBÓЦɋ6ÖÀÝÛüzú㚆×Oi•¬gTíö'O¥zƒ´qu`‘Ékm+Ž„ ãœîñèk,E%Ütª¶ìsøgÏœá’í“tqyJÝø!?nÚé-hŒ.¼«yw"C¼ ï†)Œý3ÓŠé®´ë{MÒ¤ê·,­‘¸ú‚½¿:¥q/ ÛÑŠÙó0sŽ9ïÇʸ”ý ܬìPþÎŽ<%Á»ŒL aGSêØ<“ùй—¨ÆîgŽXÈ1ª…ÆÑ€qƒÉ듚ɓV–e” ä¡ôç“Üf¬C;yi%¡x˜°Ë¯ÌG\ñŒúSžI\¨NýKwu¶¥û¹bM¬Â4Ž¸ä• íéŒöëXš¦‡*ÙÉöMEa”…‘¨ã‡çì“[VqIx6¾Ìå‰#äç‚TAÁ¨¥ðë^JÏ æÝ×”0"¤}#õ皘Òqf·MoâMJÌ5ÝÌR̤aäù²>›T¡ÎzÖRÛ´’2ÇqnÊcÊN~ˆ?,×wªøjs4z®Ž,ÛÎÖ?O^§­c¾ƒ<’Hí1F§1‚Ùú‘Ï5éÒ§¡Ç9+˜¦ÝPlÜÎô* ‡ô©¢\ŠÞ ¸ëêO=ÏOJSd'9¸‰›Ž>?iézc— 49n 2àzsŸzRÃ$(×»=ò Oº5ôVRx]w¨SW,¾NÙ?³5=ë$æ5ºÈ=¹S] ¯ìÏñ.ÑîTðι,'>ZÚéSï_@Û”ç§lUXÿg¯ˆWò˜ôÿ ê±ÈÃîÜéw”û(QҼʴjÔv§7éú¢©bhE^i5ê×èÎ{Qø%¬<¥c³µi‚æö®Øë‚¸ãÓŠæ|WðËÄ–ñ˜%ÑÈØ_Þ\¤~oûC)À=;½KHø9ãÿݬéºÍ©`t»¤ßÏN‘íÅ[ÖþxX°ó_Ã~$ÔC 2®›q1èÉ×õ¯:¶0OøÑkÍ•ÎúX¼ Wöm|ÿÎÇÊZŽ„žÖÂÞxz+{Ë–ÞÍmp£Î9Û…ùÀsëÇ¿J±ªü=Ôåµ0éºn¤\È ëc?ì“‘ÓŒgë_B¿Á=~îæÊ4ð7Š–X0±¤ÚdÛÕHÇa#ªIúV¦—ð"òâí¤ñÃ_LÐÃyc·á¸Ç~**å3£¬½åýÛ~­~EC3¥=·­ÿDÿ3åï|$»Õ¬`ÿ„²óRöäÄìÕœa‰ç® À5Ðj ,`²ómáó$F;™îÃ{x_ çôø-ÍÄ‘/‚µ»2NÔ’tILŽî„òqí\®¿û=k6šŒòh7Šü©Ÿq€éóÊÁ:`o|JëÁF”ZNƒõ|¿æe‰¨ÚmV_&Ï·Ñ$±·Hãà…Ecò }sùÖv£m'ÙPÀqÁ\’G8ëúWº¯ÀÍ•‹Ã:ñd°}&ä÷lÇÅ<þÏ+]$}›Ã:›,„à¶—pH tÎÐÔf¾®›¡ +¥ó±óÓ©)_©óö™hb¸o>'ùØöÎ>¹­Û/G¨!ÝGŠxŽ_‘ºtÏ¥zr~Ï^(–2ÿð‹jeTÏ1vù¶ñIkû=k†ÆK¹4]cË€üïŸ3ÈèNεÕV4Üy”Ò9©Ö÷¬ÑÁh¾´¼†#{¦Çq'Èžbƒ¥— wïÚ­j¾‚ßIŒËq¥Û$LÉÇ~Ó°¡ä@'õâ½LøªÚX´Ð/L1¹—MŸ ’ûUÝමBY\é:„-(VBöœçŒçËþ¼Wƒ:Uå>o¬{¿áZ~g±Ô#{=}Yá÷vP´Kn!–]­óL¤ˆÊÿÀ±ÇáTõ/ B–êÖ’Æûp¡q¸É÷Èæ½â/ÙSÄVÂú¾—0ˆ¶kg9bsÁÁ¿qSxçög×ìÒš± ŒÆ ¬æ7<"ª“œ™®ÚXŠ¥:¼Þvÿ$rIJ¤\”måø'Í«ö§`¾M«"ž06ƒÇå]G‡õ! Óì°;™&ET `3ϩϥzF£û,ø¦Þ8›SÐu…ir¤–r‚¼Úpiñ~Ïþ&Ñ 0A¡k)4܈—O¸`Ã×nÏÖºq‘Ã×§Ë©?&®c†­*ræäº<Ã_ñV³œæÃÃs\ÈÁQü…=NàÄžŸ®+š¶ñN òK­ êvK ¹Aô%ÉJú‚?ÙÛÅF™çk%à‰z²YÎÊ«êT&áô®_VøC¯Ø¤²[xw^½€’±XJsé"+c¿¼j0Pº…vüÚOô=9׌­'÷Ûõ<&+ûIåL—_3æÄY©ã‚W<×Em§D©ò¸o$0㩚ô;/ÙçÅšº‰,¼/¯ÈC:}Æ@í‘³ŠœþÏ>%Ó‘…ï†õè„}qa>Õ>ùJ÷#…—*u*Eü­ÿ·L±ôù­´ýSýa‰ tÄ¥ÜYð¸=ùæ®é–0¼-äùIòmåÏÌ:ð@®í>k“iÂ[ ø«dgi˜é®qþè( V®ƒð—WÒÑ£ÿ„sÄrªv4«‚ÀzP?ƹjûÇMÿ¯3¦•iÉêÑåéᇸWhí#˜¨ÆæË’zÏ·áT¿á{4›í‘²îù@X‰*ØÀÉÝkÔn~øŸíìºW‡|M–c$GÃó^ßÞ ïNÁ:ÄÚ[yžñPÝ““£HyÆæÏAŸZÊx7dk'¥Û)hž!%rHþ˹-Œ{ÅYúÇÃZ1iÉþ<í6é‡p¹‡ôëYâ+R§»ûµ.‹”öÿ#öÛGhâqä–b 0ŸJ½}j$·`—ñígfk˦ñD€Ÿ4ỆàþF­Ø­î¨›­Ì!1L€ä{“^}L’ ©¹¤x3жt•þmiýz½žŸoug$SÞÛÆsÌO?™ªz•´v÷1-µâ]|¬Œr¸=¹ª>ƒLñD[O•‡càŸÚÜ®hw3D‡”‚åKÈç]=҆`°xÏIÔt]€ ×3‘ÛÐ~OáSR†”¬½ûÿ-¿Îæ”(ã«Bò÷-‰Ëü¬¬G†«d%¾ÔœìÅNP`ŸÆ´Ïƒol­ö$±ºýåvºÚ }6çY‘_øZ.c¦Ûi3ÆvK>ùýôIïŠó 'ãøIJÌPGâQ’?l})ÐË*c9ý’zkf¿ZØŠ9³öÖ|ÚsE»ù·§ùyx–P8ÕµDK xˆ\6âsÐ þNêi|´{Øï|²~V’7PIÿhŠè<ñ‚À#ÓtÔµ»ŒòK 09ã)ݾ™â¬øßG¶Ô¬üÿë×–ÖÖãpU·0ÇûLy8ük8¿aSÙV§g÷¿•‘u²¸âé{Z­èŸ«f½Îkh]KØå †ØÓèrxÍKoqáÿ1ZÓR¸µ8É ìû9®O_×ü5¤µÔ¼[=ý¼gÍ n€€XdÃ;¿Æ°üCâ¿ /„ÖëÚóê•òf ¾ämþF½*y\k[Iê÷³¶¾¨òêW­‡z{7e³~öŸázþ½Fµñ6–÷Sy“Cl™ÂÉ9i9ëZÒMÚxZCìáŽñ,б+ƒîü¸¯I<ÿg8q?Ü "'¸ÆhxsöŽÕ|9pˆ/ÚKxÁ_-ðÊ3‘‘ëŠé¯ÃS”o‡zõOþ†=Q—.2tiiø³×5È.tÙtÛ™‹Ê~Kd¸Èìã øRZÇ4Ò(ñ6—0mó¦†ESî\p+/ôAñµ€‹CðíýÝì[C\@Ñœö݃‚9íT~)üaÑ4] ö<ëòG—Rέkœœ}Òzð+̆»¨°ò¥ïyZþ®ÏoSÙ›ÃrKÆÛ4ìý.µ~‡gsáýV)ChvðMi€v‰ËcŒóÅ7QÒbq:„ŸÙ­;²F7ÈÙþÏLûWŠü1øÛ§èšú¿‹gÔVßÛNÊ`'Œã8Æ í]‡Æ¯x_H‚+„ñ&§¬^ÞB%¶Dž9%<Ä/œóÍtUÉjÐÄF„“×f£¿âÖYËC0£[ ÕRh4bRoµBÿhb2 Ü£ ::ך°¥Uáë&­£v²]¬µMv¹èNJÔ¾·‡åwÕGFß«|­5ä^ÖtK-:ú΢D²1-çpc!Žß_­A©kI,ÿdšêÎHÈ•bôÎ3Ö¼‚ïÇ—~òöw”;>ïnæ¥Ò~+Ë£Ì^ÑÐî!— Šö£Ã²äRæækÑk÷;<Ù{GNH=÷nßzß¹ëÚ'Ú5rãBu¸x¨A¸ õ\‘ž†µŒ–=™}kVhBÞ‰WçR{cu¯"¶øÿwk`±Z´1L½'UúçéÿÖ¯VøGñ*Oh¿lš÷IŠ[61]G%¶e˜žU² `ƒ±¯2Ê+á"êÎíúoùu>‡)Æa±RTa&çn«OÏu×RäImªZ‰4-JÒ`Ã*'L1¸ôô¬Í^kÍãÜ@RBT”QÏnj_x[Yñõå­ç†aÒ/ôèØ‡÷S¸Ï9ã¯ãPø›Áö¶ÞšêßOÕ­®@&âtX³Ó9+Š*pæw¾ëM=vüŽÌ] Dã>HÚËGv“êí¿æHž’âêA%Å”jpω9B3Š·§økû5.~ô ÊŸ?q×GèMsWŸm¼cä]éQ‰DCÉ—ÁŸ¿Ì9ëÍdë´Uþ»¥ 4Û–l™#–#Óšë†QŠÄëû½ôûô8ªcðX&ÛŸm_ËS~rúÿ»w†*7±>çµ&¯ákUõBŠà”·ôÍè>1—ƺœv3jIl÷l¿3/¨îsÆ}}qGŒïeðì«ÒÆß›*=y'Šê†^ãV4[³íg¯Ìò«Î3£Ën¯«ÆBØc ª³ß4ÛPº‡ˆ.F`2¢ä}lø&÷ÇÞXj­ªX[Å&Pÿ/q¼Oâ*Æ£ƒƒúX·æ›û®}uLÇIðLJ…Þ½¬ÛÍrÈÄ[Ø[™%Þ¼2Ÿ•³Ç8ú×ÏŸoü} –~ŠæÂйl²fG\q€8^ù?ZÖÃ<”cV…’ûNé}Ú_ägˀɥF¶¯ì«7÷ëøžâÿÚï\ð]æß²é0[—ùg7 F2A`0sê+É~&þÒº×ÄÙÀ×®¢[dmÉI±ãëÏÔ׈ÞxÆK¹ \ÎÒ1îÌXþ´ý#[·º‘¤ÕnÖ¡ ”þ)µ}†"Â`©ì×2ëoøsåñ™–/0n››ä}/ÿ zg…$ü.ø«6ŽñëzŒšt¼–Yn’!댒¥yW†?चî‰hañ‘£jò£.b­ €S’Ç#9Èë\çÅoÛ{Åß4xôh­m¬¬üÂòEcV¹•Èì:àuï\\§6¥Z>ÑC•?‰¤þ}ïêz8Œf[V“Ps»û)µòíoC®Ð´Ï Åg4Þ5ñlxÁ-¾ íÈlzú¥pÿì¿´d]æ6¨qKî=N8¬ ;áŒr¶­ZiCÊ»ÙÝú¶iAã}—Á™¶œ§ZÖÔUR:ŸÃù§ŒÆ*5©Å«Eý««z4à –ûZ3{µÒÌÅðçÆ­wÃŒ·^²1 ¡@¬Fs‚sƒœwÑêüeñZÒK;½;ûI%päAãŒ#ŠðkÏkÖú¯Ø–ÆúYs·+m&Ò{ã+]÷ƒ¾ |Fðý¸Ö¼3Ý´‘㾡lŒùÔbÖ ªÜ9ú7þkSl5 \¯Oßåê—ù=Fñ´ÞÑ~ÙO6•­é¾#2;”tso 'ñnèrxwç¥yCxÓc9çÛ­cxÏ㦿wg6‰â›¸.`K§žXÐÉèÄvgy®FïÆ‹q#4PÁGÝ\?3šëËhÔ¥íîÛÞútµõ93 tëM{4•’[[òÐôøMOi ¯XýŸ~5Øø~)-¼cá赋6“zÜUÅêzûzw¯ž4›û?5µ†-ïæÕ§;Wtˆ®>ž•öì³ãKï…:Åí"9Ó¥G–‘>bØ$½_Jóx‹aœ/'Òö~ªÇ~E—Kë jVK­®½…ñóö§Ñu=5´¯„þ±Óí¥@&Ô>ȱLOuEåÇ÷³ôõ¯Óþ*_iÑIŸ}4K *Ê­Øõ}»s˨c‹KÑ´‹Ûœˆca¤#’@#${ž=ëŽñ7ìW/5¶¼»Ž; ņÕc×6}ëæ²Þ#Â`©{)вÞíÝ¿¾ÿä{¹‡b1µ}¬k]öJÉ}Ö>P²ñsÜ]"E¾bÌEÎæöõêð=޾°Eâñ&“tøÜ¦‘[<ü¼gëŒ× ø‡ö*ÿ„nÿí~]NÍÂGæ3zoÉ#׊ã¼e{ñgáÕÚÝèV2 ;Nù¢šúÝg’lrA$Áé×§zô+ñqÉG Ô_›·ùþG†·ˆ\ß/ëóâχ߆`1èF¯¨Y¹æålS~ß|6{tã5ƒ£é’ÙIåø¢ßÅtÒ.øÌ6Õû €r;ó]Áø(þ¹¦x¢ö×ãç‡îolgB4û5G€‚r6³ ãïž+ÙôÛÏáÕî¨k6Ÿ‡¤´8Š;Í;2Ü)y<¼ƒÏðç5ÅS4ÌðËÙû%-µ‹½ïýv:ã’åÕß´såò’µ¿¯Sü ñÓÄ !¿Ó´IÙ-¶;âæÜ,°ÁaÈÁxÍjh_´V‘âÇáïŽ6Iö¸$+´NðA,IÉüGQPüfý¿¼7ão^ØxoH“íw .é`L*çæ HëÇlõú×Îú§Ä†ÖUƒÃkcÑ VïÁÇùâ½¼YŠu1Xg+­SÖë®Ç‹¯©á«sÆÏF®¬ún{>%éÒ¯…!ºŠ(™‡›<ÅÚoFÇlXñøÌ“ÌזÇâfÄjxüP½_KG 0PNúŸ3ˆŒ«ÍÎKWÛCÔâñ–?Œþ»/ø;_ñõ‘ºðð¶š%f’ä)\qÈ<ׂ[x±Q”¸VõµÒøkã-ÿ‡fš? Þ6“Úˆå1á‰R? åÆQ¬áþÏe.ïUøji„¡AKý¢î=“³üt>º‹Ç_®¶È¾Òч&{ùe•‡ü¸Çå_;~Õ?´·ŠüE#èZÕÕ•´ÇǧÆQz‚ÛÎ~˜éÖÿ´V½ñí.e±ñxOOÚbXìÐ<„ 2¿SôQŽÞµçÚ·ì·áZYfY¼K®_6KI$H}YÚ¿<ÊÕ ¾¿>. Il’nÏÕé÷§f ¶6—&NÏ«v¿Éj|òºÍ±'íw'¦Ø÷gÛ¯Fï]]Ø·feõa‚kK㯃íþøû/lð^í<J¡S÷wc¡#·Zóéµsž^¿EÃâ#ˆ‚«£ØøªØWBnœ–¨é%×[»U¤ÖÏy?ZæåÕûÌj¼š¨=Zµs!RGK&»Î|Þ¹ÍV“]ÿj¹Éulô'Šè|;£hzÕ´m¨ø…lå(^HÚ²ã°ÉÇêj*b5yÃê;")5ÒŠŸeã;*_3N¸x_QÈÐö©/<9 ÅqˆüB8b6‚¿†y®W_¿³¶Ôe‹E–iàFÚ$| Þøœq1­î¥ø<,©ëÄú·öQÿ‚€7Âè_Kø-ÝÕ›9x®•‹¼C!ÉÈPGÏZçÿi¿ÛÛÄ_ 6z¡Ñü60â7ˆI,ìßwÆ;Ï®sÓæˆõájw‰rC ~ Öψ>4j> ðu¶‹t¶Éonû̉Iè»^SÊp°Ä¬Ti''Ýè¼Òîz+^T=„ª;~/ɱéâi!ŸÌŠWg;³Îkß?f¯Û´|4·Iø‡¸Ò¡G%¼ Ë’Œî_”zò}«åVÔù婪ïWv7 GOÙÖW_‰Ë…«W >zoSô;ÆðR_'†.eðų6¢ÇÙË;ƒÁäü«Žq’sŠò‹ÿðR=kÇ?fð÷„ ¹ÒÅÓmšõ§ÄÂ!Ñ#ÚxÏv'#µ|œuPO\×µ|ý•.>4øjÚ÷AÕ­cšsÌRHÇnõâ,§-ÊÒ«Q^ÏFõ=O¯c±íÓƒµ×M]_êy˜Es>챩mÞ§=ê›ë-aΡâ¾äøQÿýÔ|9ág´Õ®MËr­åFSÌSêzûW…þÔ¿³_ü* K»4Y¯raÆ#U<³ äz× ÄÔ1ýŒ>DVÈ*R¥í%¿SÅtïÜi7ðÝi³¼βÅ"66SAö"½¢ãöÿñF¥¥Úím¹žÚÛÊyÎÄy› ?*€£“œxé_5Ϩ$r•I7c©Ç…"ê˜èõìb0ô1vu`¶<Ê5*ᮩÊ×= þÕ~*xK ç[ÁqöˆîT€ñ²Ûí^—¥ÁM>,Üiº~‘¨Y³Ú¶b‘,Fò»pVNv¸ç#´Žjù[K×’ÃQ†Y‘gŽ7ãb@w×èÿìsàO†ß~C¨xrÂÀݔĉ'‰»‡RsøŠñ3¹àðã9á”—¢²=L®ž'7Öqùîy€ÿ੟þÛÚØx®ËLÖm`u.Ó£ÇsÙ`6ÒHÎ7üä û/àïíéðÇã&™¡Ãs¯i–¶¼ÿg‹J¾‘~Гc˜Ýz„8 Æ:טüQý€4Ÿ[É6eR•# æ¼^ãþ “¨ØË%íö¦-a‹-°¯§=kåkÏ&Ìãv½”ûǯÈ÷éS̰2²—<|ÿÌý¿ø_á]@ùך.—#þJõ÷5òßíÕûQx#áÇ០éºv§«¼FIºÆðÚv .r±ÎvàqÎkÈ¿j?Ú¯Æ>ø1ƒ§kJÓÌ‚ÎæîäF£nî8È$('=kã5Ǹ•¤¸•žG9f'$šìáîud±š—Šz%}|ßùÙÎuì×±¡ 7»ìwšçŒ^ÔÄv”å×~åSìp>¼ÕcOÔ<8Ê5«K‹rÀÅ~RÈæ¼ñ5SÝÅ{7ÀÚ*×O¹ƒÃÿ-á¼Ñn@€I b$ñ»wnq‘Œq_ˆ¯S MJŒy’Ýu·‘ñÔpôñj¬¬ß_?3”«Ç;7Êý9©#×›ûõövûü5ñâÇ>’Z ßë#†Lòzc<Š×Ö¿à”~ÕmCøgR¸…˜dë^ãL§'èz«…qÖ-3â(µöÏެí–V,Àmíž¿JúæÇþ TÚLÄÝÝ}º<çhm¤LúÔ·?ðNoJÞZI¨Ø\¯ð?̤ýkOõË}.føSÖÇ[ðãáS鲉4{}Ê(GAuã×n3ùÔ?´ŸíDß ¼y¦xêÒóÄåv'“fRÛO䑉<€rzò?‹_ðR#ÛðvÚib†-«·òâcØHzàz/¥|§ñköŠñ'Å å*™aYÎébŒm}ëå°%|]UW´]ÿ3éqY•*Ý:^èÍñ§Š¯|Aâ›ïj/©ßÝHdžåسHǹ'éXrjDÿg}¡æÿV¬Ùöª’ê'?/ZûøÍA(®‡É:|ͶjɨŸSPI¨{ÖT—äõjï9剤ꔩ#ZMG9ç¥A&£þÕgÛ u Š4’1À Z^&ð>£áÔÕD³¦ñå”{ÖRÄE4›ÔÖ4WH®úŽO š†MJ³n'xßlªÀúUä¾Ç ùU{KS5_Rç­DúŽOSY/¨ýj7¿Ç\Ôó•ìÍfÔ=óL7þ†²üžôÏ·ú“ùRöìÍs]¯ÀïÚYøã[MWÃsM$17ï­<öŽ;„Ï*qÐ÷Î:Šó/·}i é=sYÕå­ «¦T9©ÉJ:4~¯þÍ¿ðX_x¶a¥üG·¿ðÕûBî—!ÍŠŒì2©ùX‘‘‚xÎq_þÖ_µæ¿ûXøþðxzÈ[im1HE¹wó£XŒßŠù§íxë]ŸÁ‹KðÓÇwZœiq§™Wí ÈY•sÉ\ƒüëÃÃäØl¾¤±!y[DÞÞ‡§W2­‹ŒhÕ•—VjAðwÄ3I´Ú2`d“ÀÓëTu/‡ºÞ’OÚí$±ƒ__øöâøE¯^ʼnm¿²BoG„°qضÕ$~5SÆ´ÃV "ÐeÓï⹄t!0ŸÞÉê;qR³œ\giÑe<· ãxÔ>1¹y,äÛr¥Ðצ|ý«uŸ€Z°½ðx\*…H(ØÉãŒ÷÷ª_<<]âU“À^T–Ó1ÀS„ÿ=j7ö_ñä©Fê#¯N¦/ ˆ¥Ë^Ö{¦qC ZŒïK§Sêß„_ð[¿ÙëOÇi·ú\€æÒÁqn{–Fb²a´ýk§ý§¿à®zˆ~ÁÁg¹¿¿‘£˜]Fö²Y ± ’Ht85òÿ…¿a_kkÍs)SÀ=~Ÿýzä¾%þÌúßÃË·²Xgøq^,rüž­u(+5Ñ=Èô^+1§IÆNéõê/Ä/Žü@‰Vqo-Æ誩3°ã¯zåMôºt»n£b9 ?¥dØ@öú‚­ë¬@n'#>ÔíRÞæÎfk¿2AŸõ‡½}MNŠP†Ç…V2©ïKsQ50Çïb¶ÿ²$¹Ó¢ºÒ]¦Y,ƒ–O\ŠâóÜÖ¦…⣣¼›âIÒEÛ†$cÜÈ­å9Zñf1¦¯i¥ð§ÄÞ3ð¿‰ôýGÂ/|ÒX:ˆÌÁS8B ŽOú‹û/~Ôöÿl#¶¸Ak¨A2ÛÈÁ^3ŽFç¯Ö¿t/ˆÚ¦ƒ©¥Öw(xÏ ÌYHô#5ß·í‡â›}9cðüÑé—k·mä#téî–/å_9äÒÍmd“]Ϲìe™Œp»víþGë§íûWxkövð,ºÿŒ®PåEinÀÏw'8`gòHu¯ Ó?à°?|EvÆÿIÖtôHZRnR0K‘©W;˜úð+óKÆßuωºÑÔ~ j·ºµé]‚[‡ÉQè }¬Ô¾ôjåÂpn­ˆnSî±IˆœïIZ=ž§Úþ(ýšµ-Ý­¼¥Û[Å!ù¥hd\cŒ×ì{ò¼ŒóI!ÉÝžkô+NÑmµBIŽ6Û÷™ëX?üiá߇–>~±©i1ì2e]¼tÇZùŠYî&/’³Þ©•Ñ~ô¶>Ö?c›Í/Ef°³ó>W;¶¨õÉ5óŸÅo°økS—JÒ‚K4L ³ù@Ç ¤óøâ¾ƒý§¿à¢-â-'QÒ~Kipí4Q’6ç–>ݯ§¾y¤-+3³–<’~µõùRÄÉ{LN‘àcù(–^ñ½yúWEà?†:ÇÄKщo+‚À”ô®F Õ‚á^å|ÄS’»¶çñ¯§ÿeŽúEŸú>¢VÍ­þlgŽMvc±5(Sr§³Ÿ Bgi»#Ó>þÇ3éºK’Ç#.d‘׿cõ5Ñ_þÉöÚ/qâ@’7}ãÿ×®ÆÛOÀ÷z –ë¨Îubò¢…Ø»zd £ñ5ä^6ý¥µÏ\Ü[i0ZØÀŠàÜ8 ÐwëÿU|b©Œ­Q¹éê}&œRZžgû@|+ð÷‚-¤¼¸VI›aŠ9ë†ôû£zWϾ!Òïf¹ÍíªZDrÊÇËØŸ_­w^=ø±£ZÙMä\¦­v²òXœÿ{°ëÒ¼æãTÖ>#êNöÊI^#lj;gÚ¾ŸêR‡¾þlñ± —º¾á·1iÚ]™k‹upGËÚôÅb=ç$¯­û„zÄ,Ž™ßÈ‘ëU5߇Wº›ö‹¡&ìd®ÚëŽ&s\çt%½Œv¼#Òš×™îjŒ“y#>ئ<ûFH<Ö¼þd{2ñ»#©4䕤ùˆ,8õÕZÂÚK÷HÃa¤#å_Æ­êºÕ¿’R=Ï:e7Ž™â¥ÕèŠöCã·v Ӳª3óœô«:$º|ÑÜ.ªeŒˆ`¯9®yïÚ@³½3Ú–9w«1ÎÕëÆy¡ÊëV t=^óÀ:l^[ýhîÜY";ñ‘ш¬máÖ£â+ȾËjâ,ýÇ?t÷¬¿ üQ—Â’Ä µYlÀ9Œ|¢B@äœsƒ^½ðÇö–ÑåÓDÞ-‰,î,æ24qŸÜ'û'×¶+‚¥ZÔSåW:cN•F¯¡î_²À¹,txFªaÊH0ã#'°5õ>‘ðãM)õAl¦rw£ŽƾpøuûMhÞ)²ˆè¿º‹–ˆöä†êÎ:ŸJÕøÁ©ë>:ÐWKѵµ²o•¶1/¨ šù-øo<×Ú^¤—RÆR"ªã‚œóÅxö§àxü-¨Í'‰g/o?<Òeøê<‘^ñâlþ1Õ&KBaÓ#}¶ðÈ:îz×±ÊèÉÅÆîÛ»ž~'R)§×¡[QÕ~Ûxò@ÄHÇZì~ü@¶çOñ«›‹I 朄ã±í^j—œ ’jE¹#ïd{ú‰¥8ò³Á‹p|ǨxËNðí–ýö ‰„SóèMqBðùx«!.º{TðÜ $ðLþU¥&é«7r*.wt¬j¥ÞjTº÷5”“€ä;`àf¤ •²+uU¸ÉuÏZ•/¯åY t}jTºÿ&µU!Àõ˜mÿ‰–WrÜYx¢þ9§ˆC#Ã(Ïz çú×kÿuŸ,k¯jW—~Và¦I nNNOSÉ?a½À A-Ï¡¯&iRw„RôG¡*“š´¤Ù;Ï»¡éQ=×=*­%ÎzœÔ-qž†´sd¨—Ví 7†i OaëD¾"¹û2ÄÓ·–ƒ =+5ç<äŸÎºohöš»I<óD©oc!ŒV¨¡¬¡ôEoêZm‹Ãis4Aßy;Ž[?Zš_ˆzêÙ<·”ÍÂùK9 1•^ƒßjV¶R,`ŽWa—“9+íõ®RK—X8=+4ã5{ï:_øhø¯QÌì7…(œ³f¾¸ýž¿eÙ–×ÏûXØ`«œœù›öm¼·—Ç6Ö·“‹y@c'€Hç“úWéÇÀ¯xpx6ÞK뻸ܶ$æŸL×…œã*R÷bz¹uOYîƒû¦©R^À‰›häãÒ¹Oÿ²æ›¢h ú¼‘B’•[œzý«ßµ:F–Ñhl*ü…ÇAëŠùÏã&ñf¯+\K¿¯Ì͵ó´+WœîÝ^¥*j6Hù¯â­ÜÿľÝäò†2@þä~6ðý–‹xô®Å\€¼=+ܾ)j±év’aÀ` Îz×Í>=ÕîuíT¼›ŒiÂüñ_O©:W¡ãb©Æ+E¨ÍSÅshÖv8ŠÈB…lçõ¬³8ÿ" ¹ë\SâUÛÔ+Ó< ¨Ç£Ëmq#¥³Y‚ïæà«þzVuª;hiNz•5†X]ùP¾_úÀ퀣ֵaðÖ‹§hÊöz½›OŒ´aÁ&¹?о=ÿ„›Ä—Ùs3Zžg|ŸóÚ¹Q?P ç®ZˆóÎ)ÉŽN1vHöχ¿,ü+w6z¬°+?c*:zgʽ¦?ÚßA‚ÒÚùnÍÓTárpA ¿ÃÓ¯½|V'ç­=n8Á&³©‚§YÞL¨bgMYçñûöŒÓ~*^1±¶– ®¼Ãø†:ŠñÈn>eÎ3ÐU=•ÍQ4¼òjŠQlšIÉïQùì Ä<õ¨š`:sLi 5-–¢HÒ\“Li¹¨ÙñZžðߊ'Ûd¤Пâ5¨¢®ËQ¾ˆ_ Xê–µðêÈg†Aµï?gïj·3Myq{W ºa¼7ü+©ý•?gûÍ>Ö;½^ÈïA‘ï_^øcÀðZé‘ì„+c'±5óÙ†gÊÜ z¸\×43Ò4KJðÌva·Hƒ‰凮k„ñŒr‰Ù·’äí^÷ãíâ‘aÂñÛŠñ¿iëö‰ )`Üg±¯•^gsÑ”,¬x_ĦþÐi"ÚxãÛé^k€äÕ^âGSûµ'ØWЗ¿®5ëÖ1DJöT? ŸCÒg‰bîpìGjôéby4G%J<îìùKXÐRÚóuñ"ʆÇÞ9ö¨€—swÁ¿ÛS€ÜÞ Û;íï^ÅðÂi>³ ztQ¸„”¨ûµà+¹fœÍy4(à‘m´1úWÒ_²Ž£k Üµö âU¸P˜fàû‘Üæ¼üd¤ Û:ðé9$}·ðc±ÁáÛX¢PæEœt¯K·ð¬VÖáæ “ÂO­q? üOg¬‡ Fl¨gÚ^ø‡íp4Vª2ãï_YÉÉŸCI$‘Ã|Bò˜¼VÈXž2?ˆ×ž7ûbïuÒò ¥zóxmî¯Ødry'°®›@øz"‹ÍºŒ(÷ô§íyýŸ3<£BøSŸù°€ÍÉ tZç¼á+e#—È]Î?¥{޾VÎÎG‰F>â’9oZù{ö¯øß§üðu­þ¸¥~ÝvȨ¿~`ªØñÇ=«\;•i¤Œë%Üùöºø™aáïi¶åi£f‘•N!ƒÏçù×ÌÚö½?ˆµi¯5-,Í¸äæ§ñ×ï~ øžëV×X}¢é·„öŽ_Ô×Ùaà¨E.§ÏV›©&úùžôyžõ qG˜=ë§ÚØ›Ì÷¥ó A¼´?h'ó=iDžø¨CžÆ”IëO1r¢q&}éÁÁªáÅ89ª)`1éDžµÉŠx“=h¹$ë!9§‰³UÃzp“Öšb±idô©_Z¨¯èiË%R‘<¥Õ›§&¥YsÞ¨¬µ"Ëžõ¢¨K‰ÿÙmoderngl-moderngl-773b733/examples/data/textures/xpos.jpg000066400000000000000000000741651470420062000235240ustar00rootroot00000000000000ÿØÿàJFIFHHÿâ@ICC_PROFILE0appl mntrRGB XYZ Ù  acspAPPLapplöÖÓ-appl dscmòdescüogXYZlwtpt€rXYZ”bXYZ¨rTRC¼cprtÌ8chad,gTRC¼bTRC¼mluc enUS&~esES&‚daDK.êdeDE,¨fiFI(ÜfrFU(*itIT(VnlNL(nbNO&ptBR&‚svSE&jaJPRkoKR@zhTWlzhCNÔruRU"¤plPL,ÆYleinen RGB-profiiliGenerisk RGB-profilProfil Générique RVBN‚, RGB 0×0í0Õ0¡0¤0ëu( RGB ‚r_icÏðPerfil RGB GenéricoAllgemeines RGB-Profilfn RGB cÏðe‡NöGenerel RGB-beskrivelseAlgemeen RGB-profielÇ|¼ RGB Õ¸\Ó Ç|Profilo RGB GenericoGeneric RGB Profile1I89 ?@>D8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zu¬s4XYZ óRÏXYZ tM=îÐXYZ (Ÿ¸6curvÍtextCopyright 2007 Apple Inc., all rights reserved.sf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlÿá€ExifMM*JR(‡iZ;ø];ø]  ÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?øê £Þ0–!µˆ8,TöÃóÞµ<Õ¶ ^_:'=ÀßÈéžœ`ý}ª‰ì]lã”…(¿+Œî` õ*Ö‡m¾ÈIß›# Iìsï]ÛŸ4ÊºŽ• õºÈDjGñÁ sŽ;µÌÉj ÎÅÓàœô#·NqÈ­ßé—ÑËéž`ò“Ìo˜mê22OÍœž1XºJáü™‹«Ÿ¼›9ltAëE®\]‡ø2úX¯Ò;pÒ0 ´7=ýO=kª½°K//ÊØÎùpK|©îyíÎ¥`ÁéÓÃ+b>£„ÜHÆGáþ5°²2xq¤šIß9ryì}¿C]A¾¥†ÐÿLùÜ!PXy)¼1=$ýâsùæ³5 (cÚË$©6ã¾6Ûéž9«½šÁÔE<¦ €yåp{ñ]5Ö© ÌAü¿œŸ0Á>Ÿ'¯¥EÅv?Ö¬¢Ô5½r¤ðTœ}7£Œb©..™o¾é`·Ì7,kœï\döãŠì5 Xµ îÖá®ùy ÓÄÿJ±ý‚mí.YÉ‚wýïnqíNåóXãæÒùd©oIpTs“øz×7âÉo¨©Ó™ž&냯ÝïÉ®ëRÒ/#¶‘tï±P« N:öíÆ?:K8ÅûÁæË*ÊS÷ñº:cÚšbæêygˆ¥“LºpÌñƒžqœÈíõæ´ü)«Çha’æM¹ãs“½‰õ=ÏCùÔž0Ð!iåxÑ0Ò”©8Ï éœ É†xÙàk¢DjÙ9R|³Œ1õ;Š­Í.šÔí ójN†ß,ýâNsž™?‡>õSQÖRÆxÈ–=ŒI%rv‡ ýq@ÒäÓÑŒ¬íÄŠýÜu#88éYiË™LåŠÌÄ.ySÎx>•63Ð~­âæ€Cgßb`1œûûι½jîâkimÕ÷,£æb¸8ô­'ÒœñN9Îp1ÏB:©mje¹Ýva$«qÎlÿ*´¬\JGKµ„ ¼‡g瓜õüëV+³³ÅœP™©/03úsõüOÙóC}b?±k"²±ðö£ãû8¢’Fû&œc`²Æ’à!æB¯üáø1ðÛÅ?¶Å(lYtýrÿÄ:Ü·ºõÝÆ£q.©ª+Ò™çØï¾ÙnÜÊ¡(¨Ù%ÔUæãh#µý“?f­cö®°o‰Ú‹ØhþÐu ;EŠÎÊî<^È—ßÏ,~kF¢Y'žGYr±¸°?HþþÒ~(ø£dž ý—­üai Í[ë_uÝ"yî­<~N›e Ë=æ¯rÑ›„-%Ê AØ`(3þÄ?± ·íF<=«üjûuÏÃo‡þn‘eák¿ DÔÄ"X")oq¾ib’GšéÚGÌ’5»2)@Õ¶þ ŸÃ^$ÿ„á Ÿ‚4ï éË{Üš¯ÚÉφݠ²)DžfYŠï †Ïe)\Ò&•Ö‰že«x«Ã?³€¯›ÇšçŽ4‰¬u+yN¥{¥¾±©ÜYÛ¢æK¨bYM´ JýÒF‘¢…‰GlO‰ðX„Ÿn|Q«xOLñ׋®4Û„•&²´3ip¥ÆòÌ“—Ù ÊîKóè0ªT/¡ëþ.Ôõ?‡·Ãû/Ýø³LÕ㻵›Wñ†¯k‘»²ÎÃ=ÂÊÆB íDO˜È8Qóƒà™<'âqeñàºøÂï[0Þ\êz…êJtXã%4¹+(VåÇ ¤nP³I™ -I[©«sM(aûO~Ûi߇—ß>Cáö—àÛK»ý/OºÓ®DSL³G K䱤 sq®Ñ°.]X•X†Z¿<|YâÏ|Lø…ªx¯â…ã6³«@5ûGT‰]A1ÎÒÈÀš%DÈ-”\-~›~Ö¿µ‹ðãáMŽ™'íôkýBêóÃðMõïÛ4å(´¹•E¸kh#„»œ/ÎÈñ«üÒSá‚ uχ߶†¥x‹ÀVž,Ô5î.,lVî+!ÌÒ7†Õ%1#ÀÌë ³¶ÄUG»…#XlrÕNëR¿ü*Âÿ±"øúÿÅ6ðš&¥$6VsÌò‡¶xdi”0_´$±«p„…`æO—‰¶øqñƒÇlhy–M„VwlNÐ?‡í ‰Vq#Ìå7–ŒÙÜ_qu±ÿý¢µŒ_´=ͼqj:]—… /J³¸¸–(àX?hŽÛË-ÒGEmªÌ7«À|Nø¨øÏK·»ø¥âWYñï‡ E,W $vZm˜f¸3ÜÝ‘™¦i_*‘í '´Œ]ˆo¡w©}šÇŸ´)Ü’̪1Æ ê²¬®Å˜tË»rœ®É©b@á8? ÷éX·šàµ‰ÃÈÄð1¸äƒÐŠˆØ¯öt a#ï.FJ¯âjùlq­µ4§Ö®lEÍ­â¿’ÁƒFç$cû§žR±V‚´1°còmÝÜqÈëP[ZÝ$éŒd·è…›y<üßÒ·aÒD©3¨Ê6Òq¹Ôg©Ͻ¡è¶!ÔÛù¤Äò€Àã߯~+¡²ÒYü8åNå”pà?­s:¡I—ÏUq´d>ÿV_\úuüësÃzÒÙ\*߸^|´;sƒƒ÷€àƒÓ8öÍ&®®„*Z*",xÔ0åGâ:g?¥KðKŸ/iwÆ{õ¬ÝBóìã!™¶ ò¡'‚§<®së‚+6ÊyÄr^H%t8g_áçéœjV¹J'Pö²ÂÅã*Ì>âmÉrb;cñ«·rbÈ‹„ä ¸@~RqžãŸRkòîYUrBwFÞ­×드{USšæ9¦Û¹ÎÃ1ÓúT4ïo!²¹ÜŽ€9n'éëèqÚ²5 aÄÛ¹Rƒ×=‰ô´žøa}â ™/¯f[xË0ÝpÀr#\ß–ü=:ßøj].U´Â6;]Ì_¼þ÷1×§?J³a§IªÛZ@¶×bâíËÃå»aÆÑƒÐa§½#hIÚçIðûÅr|$ñ^wð*{¥ñsý£i®JB5Ç’Fà~è#/´ w9šû‡þ ¦xà—ŽSâ·ŠþüHø»ñí5WAÕMí·—oË>«¨Úý²h­ÖSw+Zƒ¹å æ»2¬#|aðƒBÿ„ÛPx ²ðxÿWŽîîÏNh笠&0a¡äóü»V•ØIBbà+ï¢ðM?ø&„þ|ѯ5½ ĺÿˆ¿–=VìÚ!<Ñ ¥ÌeGóZImùÉ ¡Øß"ø;öÔõÚËÃ? ¯üY¥êð¾©{ªøg]“NXgÓ·H÷W(‹<â8¢‚?1@"Q†È8ýøkûR/Ç¿‚IªøRׯíw.«{o}amk+‹Òv“In“µTpqóg&ö7¥ó9=YëŸ~#§Â_‡·Òø³Vµ¸ÕMšÜ&—§˜í˜ˆB‰ÙY„žRªìÄm™O>.ë~?ñ_Ç…³×| ñsÁ±x–ÓLfŸH¸ƒÄ‡SŽKª¼qÂÉi-¬³ež`wç ³Þµ¿_|-:d´V« xT× "ê÷‘Ë …Eô© ´Ef‘\+E&㸖!3Yÿ¢ð§ÇŸK®x _ˆ¾…w,Ö­ö£|ö¶:õÃ.ÆlI*¨¹Ù¼j –g˶§D—>‡#û1| ½¿ø Ú÷Å­Cź<ݽÕüšcµÛÜj¸SOYº“íF8s„°„ZÛ(÷FÀ…LÛWÆ>³ñ~¡|Ön¼Mªj7vÖßgº“ûwBѮЋ˜ÍÖ›l†g¹ºTP"8WŒ3€3W¨~ØZ†þ/øKľñ G¬øDÒ®æÕt.9wÝH˜IáeŠ'BÇË$3H@Mµ“àÏÚÁþ*øGúö›¦é!Õc¸´Óáмqyw!@Òù“ÙÇäBòVfv!IŒŸššî+%î£ãÚ›öEŸÆ?ðRo‡ÉðkRñ¦“'…´Ôu¨4ëtò2ÌðÛÛÛÈ«k§Kr>ÖØ’r¡"MÊÄšðÏü2øIà].÷Æþøgâ#¥ës[éö÷×nÐÙ]ß\‰LÚ}µõÂ}¢Y|»wYn"€ÞíÌaDaWëOÚ›öŒøcð_ÁW‚î/¬,®á¸ÿ„ŽæE´ŠÎçMÌN£väÉ\Ê«#æ@ò?±cRÅæÆOÛsÄþ>Õ´›-'Uñ_Œ¼5à;Ó&òG ½šdeíáS¶g‘£E.HRб¢¶íÛÓ‹ŸCž£Œ_™Üü|øi¬|0øñ'Kø+«Ãâ†ÿZÅÝ´&k½&Ê{ÆYEÃ’&û(ÌLå™Õù`Šs^OâM/ÀZUºÍe&Ÿ£é«¨-”¶-k=üøf’æóz+˜ß(°³n/°å G­xëãÅÿ„>.Óü ¦hžøcy¨½Ç‰1mæéÐÏ1iV;™ÙŒó²˜ZO$¹C!Fu'hiñóÃð­›_kš…d»…5 Kû¢Ú®¢‚ åüÐΖvø1*À# €ryØ5Qés.©.êW¦K°³m\ç+¿‰ë[:7ˆbžÌyÛcòå Àv#8?\vªa{qþ N¯^™àðÒ¦·ðü3ÆJ,‘àd1úqëÞºšRÜå½ñvóG#$¬ †‘•>hÿAàu®³ÂÚ´Z¤RÊÈ¹Ë ƒëþµÃÅðò÷WÃZÝE?—Ž0'¸ãæê1ï[^Óïôa}Œ‰6sƒz޽}«9A¡J)­ z…‡öLóHd£·É°ÚO 8ÿëæ³.¯./—ÉgòpáË*à¶OnãüúVÍâG­\ƒ9ŽXºüøÊ¯­Q¼–ø€e˜Ý”ãýî1׿j„…dÕ.¦µ¯LùÙ·nà§õ>¦ªßÞ>¨©"æ&xÆ$î8$wúýjΡe ¥üVö$‚{ÏVééùUk ê÷RyãÞÑd"ùgÆ óƒŽÀÔòÛcdÓE« ö丙$ÖPVÃ=$ž•­§ø¢«G–ÐÜÙ1'‡ö'ž?ZÂ_Í4F>¨ØóÏV8úöïW4¯ <2”Ó$ B[,3cßüúRµÄãg[ßsiö–ò¤# ÃctÇ^ù¬u‚;ežõ¢ŽG\í—aÓ?ýsÏOÇ~ãFºxQðÝu ç>Ü>õRþÅ&€&¥h¥²ã©uö¼v¤JvÐäÒI 2¼r¨eÈ/¸m=_cþ5Ðh: µíºÿhFßhdfÌmާ9 }ï§l ÆÓ´£§j¤ikö’îgGù$Qƒòÿü+¤ð{£ÜÇ•sòË(<ÙìOZ¤‘5DVÕtæ°Ü#(q·wÿ>õE.£,åØQTwÆk¥ñ†îù´@7Ì ì3íÞ¹ókmrË—·Ì{ƒßÛ¦h侦G5«ë—(ÈÖ32evüÜÃÖµüãyn!k;µv2ŸÕ@ $ާ‘Ó¿=k#إޤö‘ªy˜äÀ=ºtÁ÷¬'RþÎÕ#–Úhâ˹(>¸ äûSå¹´b¤µ;Èôh¤ñ“ø…i·3•Y@/8-ÔaA9'°é]Ƶáqá}XÅc,B íÝ8a$`è]ÊÅ‹+‚¥y¿‚n Ö´Šh¤ûsù+\2LPȤ Œ€§æpN3ÉÏ×_ðO¿Žúìã㥸ð¿‚m5 [{g×äK¨ê…®—j’Ü,ÐA4»Š c lS¾~"K©¤ôg¾~ÇŸ±T? >ê:Wí7ð“Å«ÝÉsm ê6šB_ëZ\$ —wRnŽEó%‰q"’díT?d|ø0b 3χöùÐþ.ëzV•ñgNñ§ÂH,§k©.¸•GËbs"°B¥œªõ>åðâO€þ#¾½¦ü-Õ=ý®nßü[ñ¼ße†úþ§£\Ø&¯â™u Û=ëÜùr Ë¡tH¶‚xÌ¥Öt,pŠU íÉ»Ûï0©8ÚÉýÇ”|Mÿ‚wXøB |cÿøá>»}«Zbùo%–Éõxã¸H£6öÛ>Ñ34[|´_%¶Ž4"¼æÛDøoð†=3Ný¯ä×þ"jë ÃÉ¡»ê§ÜLŽ ­…ÛÄ-#•`{‹©‡’ò›H ŸEü,ÿ‚wøVñœ^"ÿ‚–x›\øâ¸t—M/À—/-¾—am“å=Ôìè‘[Ç +‹d‘P+³‘!d æÖ,¼yâet;ýâ þ³™.îí¤¶Ó<á­AG²(¨ÇMvˆ™¥’æwŒ¯Ï¹ïÌå¥ïø#›•Cú»>}ø­ñžùþZü?Ô5ð^n´Ñt‹©¯fÕ®1ÏvQ–ÞÜ&Ôd¡pÄÏzæ·ouá»(õ8/þÚ\ͺIÛivgËûÎÕÞåHÜ¢½Âÿ µÚƒãþƒáéôY|Ù&}BæÖHdD>Z$,Ѝ¸Ž *"´„”f7†tm>ÓS’ãÄGqk`òGö¶¸)66ìEE-ƒ– ¹àòp¼ôF<º®jZž|]mX£ÆHrYwsœ’;×Aá¹l¢•·ù(’.Ý’¹PøõÇÿZ¹¹ug å´Ð:öÚw/ê:ÿ*½¥\Ío ‚Qr¸}àäö®©S¹ÍÐëe醕`ß¼*yÁr*m8ÚþöuBî͵OšÊTç±êë×Ò¹‡Y¯¡ÙlR݉V1’‹ì{ç­O¢é¶^`’öÊáá0Cg98sÔV. n4•ir _>5‘Õ”»/›¸Ž?Qß‘\ôv±ÜA*<Œ2]ƒy™îÇÐ éìõYä·I…`Z&àô88¥–âT” bÚ"ÁÜñœw< {EN¨iôf‡<7uu~’Ýv‚ŠŽyÛœ~=+±´Ð¿²¬dšêFv—å&p;cÔsÚ±4¡%ÍÄŠZhä\ƒ¸gŠvE•XyˆÊû—×nGùzÄ–If$Î àçØ}é5p~gpMÐ 0ÎI^œrsôÏôº•Ÿ™1[H1ïüÄg¯ëU`Ö…´†"×à+6©ëÉê~µm,¦»ˆ4+(Ù¼!ùyôzÿž)Y’rÚ’‹}Ji-²§¸r£ôý*ž…ªˆ¬ÙìÙVô3Ÿ0nî~œþ­ªÁ5´2&åœn Üôï\qÞ±­ô?³Ï,·’IhÌÂXË|ÞrAÏ¡î=é¨Ü§d‹úŒsAÐÎç©íÿLW5y¨iÙ~Òä ª¦9ÿ>õÐÝ,ÒY£Hqc• Ã$䃎àç¥PEòïf}A!E îVÇ8Î2zÁ¥W+èBÐÁ˜Bxäd“ÏL.8QÏ#©?ýjÐO ¹‰àGIS,n.Ë øÏȸå¸éÞº .Æqkm¯ß09\Sž1‘Ïÿª®x‚/øG-<¹šÚîâRD±lËôÇ$œvúQcHµ²3.ô{^"Új-Ô…fºž_-#<Ž  §¡'às]þ§Å$‰b²+Üý{ˆÓsÕIfTã+”?Þf-‘šó»kךh£³27–w ˆ»p1Ô’+­ðLJÿ³-®nÅÀ‰§ — ®Ñ©ËÀ’p9äzô¤âUú=Gð÷Š ÑìäÒYÝÌ‹½YG˜KµÞ ( m ïwúƒà7Ä/~Êß-ô_ÚNËÂz¦…ª›KûÛ:9_PÒ¥dWXäÔBb”&À‹1•,só¤Ô!¼·Y-u­:Q'ÙŸz|ƒ†Â¾$”gÐ׺|ñŸ 5kˆ? uCud±Yj0jq[¬F9_}ÃHYni:³Fƒiùó„’7¦µ>ì»ø¹àˆóÍâ¿Ù³Æwöwã}¬Wú› úÞB.<ñkyew*¼!·((Ρ— ’ ý«þ iZµþ©ü]ý¤ìüÚP’k­B9ÚsCcpæX¸ 1l>àü€W$.ìóû8ÚŸÙƒVñìÅeðëZE™uMsOñM¼m¸Ä®“Ý,ó&@%Lí¬©¹p:Ï ÿÁ5u¿ŒµÏ‰þ,|q¿ñG•å_YizljßÙq|¥a·Ô5hÙ÷Çó\ј®N͸¬U—Sµ&úkð÷ÇŸlÿ~)|w²žé%¿×4ÛwÊ’}ªâT¶•LjìbD}žxÈèO§üvý”!ñ”÷:ˆ‰K|pÛÀ„3 ƒ!9< €>Aø‹ûþÊ¿ !ñ—Œ¾ü9ð'ÅÍRyïûoݶž|é|À¿ÙÖ±ý‰fÜñf’9[‡vÉɨ´ÝÕï÷«+3Üüû*øWàæ†ºGÃÍFÕcÐ.žæílmtè.®(Im4PY™&‘'/u|$l¾Q·\n¯ƒ?±.›©Yü6Ò,îüau"ë^&Ò<¥X]ÚYÜÌpO{©Ë¶‘d ŽnvùL|¥fãã_ þÇÿ¥Ñ4«üLÖ4/]ݵ½®«‰¬“M½v;åDÓRBn]%Ü!PÌÅQFÂYzÿÁ744I×PøÁâ‹’m¡½³×uÝ?O»lULV"ÑÅ»pÅ,žaÚ1´1ÕB?jW1u$¾žKûPþÕÞ5ý¤5[ï~Ð^1ƒÃöº“>œ¾ ÓjW¦XÐ¥ô˜„K8/¾á»Hê‘í,x;NŠÂ}FðwöwöóêSÆ`¿’ÒÜ-¼B8ÙßêKo*W ¤y×<௅_Jhþ¹Ñ4»}"çuäg¾´`uP’\¿ÚRöçc0d‰fÈÁžµó»ãý ÃÁךo‚ü%¤ÙM¨\Êךœ×Ww¯Œ@ÅÊ Ù’d.201¹º!f—*9j]»¶o§Å{¯\j:oÀm[P—L v¶Ñé0ý«\2È<Ønîm™JFFÔÚfÉùÐîµrÖšnƒ»]Pi3\ÎöQÁcÙéR–;öÂŽJªì*»µ¶°Á'káöµ£è×þÃI2êk®x‡Ã×ZÔ7E%Ûä" räçbÊ¡ \³cæ®oƾ Õ|cãGXÓ¬nµH g–=GX³‚‰â$æYmíÃÌFÔÊÈ­Fvb°!qÉ_Ƴ­<ËYTm¡ƒÆr3Zvwö÷®Ô(N™†X{Ž}k9ShFµ—Ú,£+k‘ò«¼í`{sßœæžúĶèâè`û²§88éŒdñ“ÇI™ãhægå€ÜŽ9ããU5ÛÈ/¯#7u;ªŒG:VžºM+]Iîâu…ew+™ ©Ü¼rqøvô«6 {l®|¤X‚†bpç8ùŽy8ⳬôȧO2ÆyÖe\r9_|zVŠÝÝC!MZQ)grü¸õÜ+7°Õ¥³(^èm˜XÞÖWBKneBF20à cÜsX÷H_N†cjÒ.Fó€w«müÓPosžÉ‰jó¸ˆÓT{ûôïïVÚoí9R8%ÎÓód ¿§Ó¿5ƒu+Z^šöˆèOøééWlm຺&Hä~T²Æý}8ü?J®A4t©¨‰¯ÚßeÔÈË»'ÉWè1Æ@ã­Rñ]_U{[»½4Ü8+yiÜ‚ÿÃÏžô—7wwúÃÁ¥ÅšUQ2ùó¸œõüê̾µóí·XÉdÈ#‘fT=ˆ<‚·\ñÍfâiÔ£b–ÐB‘jW¶)gjÇLæOeä¯^Nìšïm|Ei5œ‘ZfñÒ(áYó—fâU$FM²Ç·# ñ\Þàж‚kv·HãoœÀ :ú/ëê0ztÇ=¯…um6ÛG¹ƒÄ—3Àß5³}ž3-¼à„+&_rr£!±÷¹ÂhÖ+]N£áOˆ×E’{«=^{KWg¶™,–Ù¥ÚåäŠU #9 ìmücnÒsí¿³ŸŠ4ícZÕ|ãÿ?EÕ<·ÓÞìØA§;)eÎùÞ6ŠU‰ÉX|ìÙVU*ÿ3ézTþ¶ sðL“yŤ™[(JùK³aÚ0~npÙçƒî&ømñ®ÓV²ý¡µù<=âë©Òâ=VâöQcªeðmä•[ʱp¸ÌÅd >BA¬¥Nú›FJçÐÿþZ~Î’‡:ÿÁÍnëP¿k­GKÖ5ÛJÚùÞ?&)îM©[(ghÖ5çIlRC‚§·ñìWñ'Nð?ü,O ë? áÓM”×–Z'ƒÛR¸ÖaU –¶ïsn¾ì<„…TgpÎkÆþ#~Å3øW@½Õ| ð£â]ŒRÃq5ÌÚn£g‡ž%•£ýä¯,weª»%ÎÅbØa\?…4üøŸ§Ið†Ãƺe¥“jW¤r4Gs4rÒм<þñ¢s€Ûœâ¡G›gý}å¹r»S§ñwìËñGöäø¥6¥â½KÅv~Ò`yã¹Öü*¶‘ïV`¶ºbÇý¥°ŽLÑ"Ãʪ4£æ¢ý–¾/x'Ápë?Í-­î…Æ“i¢ø&{û›™ a –hô»6¸Š40°©0„9*X—üIÿ ý 4Ï_ê·Z¥iÚ,XÁw®bƒ–1¸ßå@™\¬òÄÎÒ®C`ð:—ÆOÝéz~«â?Ž?¼+k¬ÝI£ÞOªx®ûO´kòɹmàŠ Ê¨$ýâ¥J¨6 mË-´±Ÿ4z^æ·ÅKOšwí[wá¯i¾ðÃü9×¾ ZxÆúXäºÔ¯õ=;LÓà;–Äû®%À™—zº‚d'km5p’º&Sog¡™gá_‰ßuØ-ôý ZŽóÆ×“ÙèÁô¤ŸZ¹3 $ò–x÷Êy<¢2)à†”ñìí{¤[Í?µ BÔ­'u¼´Ô5XÞW¹RX&ä¹AÊü„×hÉØñ§Ä-G^×nõío^»—Åúuªý«T´¼1„·óA’Ý·#7˜È0…#Ú~ã|ƪßè¾%ñ‚,çñV¹mucæãNÑ來[‹(¼Øìƒæ8Ë3å‚©ÜHÆ1Z¨µ«±“mè®ržK?ì¿/Ä¡]ÆëÍÖã–æuB‰Å $›ÂÂÂÀ3}ÑM»Óõ].=B=2âÊÚÞîD•…’:ÇpUkJªJç W¡l“À5~êÖß·X½ƒJ¶'bmXüˆ%‰ù¤9ëÉ"™¨Å‰¯XmÝ-Õê³}ÐÊ®ÅQÉ®0»gœ¸»ýý®¥ È"$½ÇÁl=Ï.•T½Ñì剄'pL’7…Ž1œ¦Ó]Î¥á¹æbob‚GÜÛÑÇÍë°ãŽù¬ÛÝ Z²Än2îv3ºîõüÿîŠOb‡4¨ D6¡ v•)Ÿ\çõ¤1¬­™>^:9ö?mµ¼Iy¡Y†ï™d9 Ç\©õªö²—1ìVS¹,Ï¿×Ö¶ö^F\öe[/2Ê'[–ŽI>R#~è{U‡-!E™UFÐäåyÿkð« dó$†IQ |)iqÛ¯ÿ®´²€zöÖ˜bº9ÈÃ3ÛŽqN‹K¶²ŽFÓ¯C«bÁÇ~ ¯¥u0hk¨Æ^êØI ;ÑÜc¡ã®8æ´ÆÒ$®© µ‘]Yº}ÇN ¨å[¹æzšÝ]ÇpÛ]yŒÀ¬ŒŒLg“É=}jm3IºHú\ ³1;$ÁCÇÿZ»B+ÄqÛM:ÉuÆ÷$ƒ•ç°•gs4°H“Âê·Énü`1ÛÜqÉàzp½šz”´Ü÷j¿ºÐ ¼]N+XDÖ–×ÒË«yD.Õò· (TË0òÔ}k×fŒ>"xZÔí< §üK¸¾šXd¸Ô|K>™u ¡…º[È…£Ü0¹Œ¨*H*‰_&xÁâ}nöž]É ˆï¡eö<p½Ïcǽ›@øqðÞ]KLƒÄ:OÅIB;™tëç2Ù-[í RÄeÃ|ËüG%N?×ü9¬]¯¸í>*|Køñ;CXÔïþé í|Ú¢øÚûZ JëoöuºÍïÝ.q³ÎI Íj´wâÐmãøyñ#ÆúÿŠïÚ5²6—–Vó˜ÒE1-w#4 ¹dØÉ\4›Éñ]-wKÕ®gñ~•¥ÎÚ ‹æizýÌ(2ç¸{'*T|¤dŒU/iòÅâã%´ºe­ÌéÈ‘é©Å”1×tRá¹$š¥El'6ºž¥â |Wñ_€¯uÚ Ç> ƒCÓî ŽîÃT×¥‹ûCˆä\G4îæRdo“Ëùv–à+À<á&ÃV¹³‡]ðõôW.ñ^Øé·h’áÆp*ª .ã´¶IÀ⻟xfÚÖþÊ1«é³…†æöÏÉy€'{"˸I‡iy$’>cŧê&Ÿ%ºj·zš–ýèò„q§o˜“Ó¤²±Ç#£¥jA“ƒmà·YaÓ-tå¹$¾ñç\1?w!Nìs×9îzÕ=CÃzd&¨O1š5Wi¶¶’ÝÀ‘Î?‹¹ãŠë£ðî¸ÐFu+Ë©ЇŽ×OX” tå€ÇR8õçJDr©æ»\…™œF2£€ûcQ’cïéN*âvE)ì™ d•ÚaýΤÀzûW9â==²­ŒF]ØcŸwÏ9+ÈÿõWh$‘A2"J®kÀìžãµeø‚{jÒGYÚpåTnø=1×µwÓ‚æG4æìy±±iý !ËÀ(öÉPiÒ}¤,`6ìC!ëéùWks¤@"Exbä²HqÛ?_ëTnô‡•6Æw.v¤ ~zœG­wÆØåsîs·\°K‚‘÷®üþµnÃF¸•KÛG*“ò–‰Š0îœ{Ö¼ž‘cV•Ãíæ3æ’cç°éü«{Ãz\¥Àq¼m ËÈÇN;uMMh{º¡Óž§¯ÛÉ%þÉz #—Ô:qT,´Çµ„<,ŠIÎ •ÏÓ¾•0IFö*nò±“§Ý\K$aƒHI'O=¾÷Jé¼?q’/™+D$cž7Ç $g®:Vki óâ8æ+|²?tÆÞÿLÖmÖÞeÃÄÑœ(ûÀ½5Ë¡tÛØÑŠþ8â?d’&.N@õõçðJ– ›«Swû·3žcV'RÙà÷ÿΖÀÁ(‹g)À«’À‰d#‹ÏBðJã'ñü8é\‹+­ ¹Ò3õ½! ç‡p ÿËo¸Ç¡ÛÛð¬é­¢*….ãió³hƒê[8©u+Vó„²giÁrÄH ç«.9ééY2iÑÔ.¬O&02=Á~U× 2±Ë9³A.ãìµwts¹Œh $ ‡ó4ÝCHþѱó"Y%úœFGÊN@ïéþoLÒ€;åL€`ûôéÛŸZÛK›i¬¡ˆl f·\:çžq×dcó¨>Y$˃ºº<ïH³û1ÈŠO”yƒ'þŒãÿ×]-±†Üó‘\¢á†òëqœg=ÔUÈ4›kkËhoÚØº‚ÅåÛÆ}AïIâ+«;¨ÒÕ£‚X3¸Šsž pÍ“Ôv¢¬"Ý™¥9;]¬­ 0ÆÖP¼±ûÀ$ 8ÉëМš¬#{„W[}©Än—ç¦rÇ1ÏaãM>O‘r¤º‘ Õ˜àN==«gA¼†0ÒZjª‚¬¯;'Ê:vÎW‘|W©(í±º•Ù+Fê ‡Mxá¬$@w)o¾2zƒ×¦8ÎrqW´èZßP†ã[´†t‹åK;íiÞI,G={ðzŠÁÖ|eá›HSíºæ—vÎþ[™• žŽd’ß{ž„â©éß4Ó<©áÍ^ÝÁòä‹÷OÈ[w–AÕàp>µ &ítiª[ xH×­q¦êæV M§IÞ£~M’È«åą̈ê÷Máí'Qðÿˆþ°×­ìbš;ĵW³YÐ Ìd,Åßb•&Pq…cšóÏ ø‚G¼ûJ$½È¯î_?)b¹ÁLv‘Î;×§Ûiòéö°G YZ[]E –;É!cr€.Ö-‰6ÌKp›GS©JKrcR,ÏÔµk¿k6Ú—…‰³BßhŽÒÊG·µ‚önàM»B²Ò3± Š©%Ô2^˩؉oÞa*ÞÊáZÞA‚çlJÁÜ0ä0C¸pzÕëoIugtÁ ·˜–α¯9Èl`‚#©ãœÖ¾›à[]N;‰¯d›Ãe¿ÕÚEi5ݼ /ÞÊ–+Й¹Î|fãm 湊֩¬Ø¥‡†¯oõNè:›XB1’$ʲ̻‰$<€¹Ç\Éçn´9¿á*¿MOG[î#Uº‚åÞ6ïHB¤Çæ W×h ‘ÑÏáÛ¦–lãˆLC<1An&èC²œ±c’G“Ðiø§ÁÐiZ„AŒÚܬ’Ý,vñ,ßÅå F8P9çp¹Ajyµ§„dµ{…° |Çu0É4-ŸÝ…pWXjÓÑ4;Òñ­°‡Ê\1ýã-×;OãÛJÞÔY­õF•ý£*ŠÍ-ÌÐK$ƒà¬q®ÒzN1œÕ‹ íp&…¢?ß”ž™ wã¥]®'¡‹oáY[æÔb™álîÞèý[¶0: ç­ek0Em öñ‹«bªÊäaa†q…RO=ÍvR­öeŠð]¬¤ä<àz‚Ö¹}OÃæ{c,ÓKs$ÜÈAÊ’8bÄ`ä0+jq»»"r±çòüpðäv,²ßìB¢Ãçdg…^¿–)—ßü#©ÃöUº¹€ÌÀeíX#8ÝÛ¸ÀÇlÕíkö>ø£¤ìšïÀ~'˜JÄ–·ð¼Æ2ÞXøääô«GìÅñsÃVÆ]+àߊî,O´Aáò›[סsŒt#’GASNµtýå§§üe/`Ö’üPÝÃúwŠ”ËáÛÑ{Ÿ5£~9ç!—¯=)÷Þ•õ –q,ƒ ²‚vñŒ`qƒì}jo xoãl—n–ß|RÑD>o;J½‰”žlEÛ5èøeñ ì¢>2ð—‹ÖV/lÔ$Œ7\oÝ^•ëRÄsoþGH¨ì×ßșðuÂ]mxÚ»i2Á‘ÙA8í[ÞøvÿhK*Ê…r] ç¶ã¡é^‰yà}jˆâ—Þ%F-³Ê“ÃתÙõU#?§ÙøCöwñV¬Òÿfx;ÄîO$"XÈüXŠÒ¤”¡º"5e«<+Ä~‘ehˆDˆráŠqÛåíéšÏµð%¼±'—%¹%g%¸ï’?¦+×þ*ü&ñŸ‚VG½ømã[˜@o“¤Ï"óÓ ·i?Bk‘ÑtŸêW+ø5ñJæIÁ³ÃòH~#oëPêB1I²ÔœŸ2Øã.¼0,-Ï‘Äc™È2Œ©#Ï56›c ”rBhmâ ž\*È@äçñ‘ǵoüNø¬kšD{ð«Å–wœ5-þÒR1Ö7¶F=Ç\}kÃõ?ØûÆþ"Ÿþ$? ~"Û0—vø,5 ´$u+æÛzò}+Ÿ]¤¹RùÐŒdõ•¾ïó=ͧÜݘ­n-ŸÊå‚̽CþzUûû –ñŸ”$Ÿ0>ƒà×-á¯ø%ÿŽõÄqàωâ,4|="78>tH Œô}«s]ÿ‚rê>û9Ö´‹¥Øb°Ðf›ËÏv)>ß*UäÚ|‹ÿASÙê¹ïò,¯„¾ÒbG´Y¢•AFCó(ÿ:¡à±O eAŽA$çéŒsùâ½£á×ìë hö°é~ øÁ+œ*ý¿ÃÚ¬¾o¦íÊWñÀ®¹?eŸk·ÂÒÓÀ^27j°ÚTð¨SßæA޽3]´«A·ÌÒùœudã±óþƒá–²!¢„Ê®2?wÀéøUŠ~ø.•r>&› «¡(±£-ÏLçsg9éœúWÒ×_³o‰<?—«ø+ÆNSvÈ4»†Ûê<¸ÛòÔZƒõíE$Oxâ>«t±å­G…µrøëµž ¿­qâù*;s[Í3¯ W–*V¹ðŠþ|[µ†K­p_]Ûˆ÷î´t•‚œpUàIç¡ vãçòé³éh‹âK­B)½.÷îö'€AÏUü«î¿ØüK±Õ'·Ó~ xúÒúßj(¹ÐîeHȆO”ž•¡§~ÊµŽž2ß¬í¡˜y‹6³¤ÌwýQw2‚?½ƒÒ¼zøXÝ%U¿SÑ¥‹i^PHüö]^+ûy®£pfÜQ7LìOõçyëÍ-ׇ®u¨ì7p˜g“Ëcæã·Sއ©Î+ô Ä_±Oí# ”“Ä¿ <w ¡$èÓoÀì¯åà úr+Oð·ÇGÑÅøs,Ònf×DïЮG>‡¯jÁàíöÿhã¶Kï>›Â÷–QVÞH„ÀnxÝ IÇBøëSµUØÞiºž!çåó<„ NUˆ óЍSÄGgú‘*”[Ô“áí³Wöúï…§¸–õü˜þÁ9&^p\ vàp[ã€3šú@Ô­üO Iy®£låaºQË÷€Ém¼Ž¸Ï5åø7ñ¿Àæ|?øe±Ñ^C¢ÞÊJŒä‰[æ=ë£Ñt/ڋŪO‡¾ê×P’Öš%Ó#±i O¥G¹­jN³FQ¼tl絟iÉ"¼––²áYãB ç‚20}3PÁሤ 5¸¸ÜIlu½3×ã½\Õ¼)ñßí±}›à/‰â²Ýs470óû£Ÿ¦zWuáÏž6ñ†Ðø³Á$±yœ'“{z…³Ñ™­TÀé“UŸQNVG—øƒ[Ñ| GÄ×ö:sL6Ç’ªÇËœd äüEñCÁð§—&»£¾IÈK’ÿ/\*ªO°äúšô?þÃzŸ‰/æUøO­Ü_F ´ÆÏR±)œ’ÛÅ®~µäž)ý>$Írãá—ÁÿÞ¸RÂm/W’çiô+qn§ð¬§Vž°å·©”]9é&ÏÛØ-ç*MÌÖáq€É1ù¿N?:‚o ÚGr×G+IÊÎBõ좹/ |Išî`5íGÄdá‡I•AüJcô®úNÂúÙ'¸›V  Íncoý4TÃÊ„¬×ÝsË„!^7[ùØ|vcÊP+(È{òÉëP3ªNx59²,–ï€?Þ^? Ž-LëÏŸg¨ªóûé r0ɯµiØéSi„,ºµ×˜àü†%~™Î+RŒ7ßúísxEÏe§øÅ(Õ®²šdz’’Âm õ.FG½,ú`†<ÞêEeQÌm 3:9ükGQÔåÓcD†ìÍ4‡åY\þ< H·ÔU&žú >9f2'ŒqÍO-•Þß×tT°ñ—»k¿Ãó!ˆ[Ù̳ܱ8üùâ­gO4[”O¯$ÈÃ}rk[ømá½umu;¹%‚\ÅPŽ\š­Æ/U¾ÝŨýœŒÙ;‰íÏë]+.¬Ò’ƒ¶÷þ¬r瘹Ï=ÜÔKáïKEç§år¡ˆOr*ïû½=obýšOu6t³4±±ë4mÜ|¼ÖˆZ:ý²à´¤qJFïιkÆfÅ–Ç_Õ<é™M´jv' tÅ`ø—ÅZn…olún¤o.¥bYVEe}ûœÕÒËf“뵓üô"¾`¨E¸Çmî×àµ=4À"µ¼l€Ç-œ~=*ÚD¬ª#HÝœøŠål5sáx¯õíN(¬Ù7V³c…ã©ö®VëâÆ—¾Q-¼RŸ‘¤B²2txü…E,±âŒ7Oäñ‹iÎö’¾_úg¥'Ùá•~Ípè ˪)ÃiËn 2;.pW®GÖ¼ÃÃÚõ¿Œ%U‹T¿ÓÎ6–XàbU’Äž§ØZîí­ï泃û¦·‰”™..0Xú|¡°8ükŸƒòËGçý~W;°ueZŸ´I5å¿ãúØÐ²±û-ÈF"HÊ|çlç¯×§áWÏ’°<Ñ&øÔd¸?5Ã\ø«TÓVUƒQ²¸DRùƒI°g¾”š/ÄëM~ib¾Kùn-æÚém ©-Žî=+9åús7CJXÇ)Z1·¯ùÿÀ;‹›iC‰ìÚ†ªŒ ý}jð‘à¶Qzòd¶ôÏë\5ÍÞ«;£k–q£/u4wáÉ´4ÿjO¦¥Ò®îÄ%‚$R* ßkrO§Lⱞ)$šqÓN­I7Í/¿úûŽ‘â¸‘¼è‹î2µ¿1Wœ‹"ù®Àlž=½kíW:½…¿Û'K ©×Ì3,…~êäzš³.¤šœ±x—Qo6PB2®Óצ@ÏJçx{è·ìŽŸiÊÛz.í›7×qéöÁä•€AÇL~›u.¦!“sØü¡²3ôÉÍg.­iy ²XêpùN»ŒLwœsëÈ5bÉ,àœk7pˆº êSå#Øœ~•.‚JÖÔqß75×ÊÆ•Ô.Ú¼Šck‚G×­TT»½™–ìmX×åe-—=ÆJÉðòi3kjú<¡îbJá[Ž˜cг©‹«­A›UŽk;h”e¹p‡9ìöüèxuf¾õfRšœy“ºòwC§‰¦b·V€9åÉã±?/–¶ s)6¦5‘F~W [óNß]Ó´˜výªiæC™óì[85£w­Ã¦éßhñ{|¥TÈÄw SÃÊ=?¯C5VvNïúëЋPÓ§Ko6<¼¹ÚOújTû\Â+)ÄÀääÂê@ïóTeñÝœVlãÌ{Iz6×?!ÇJ­¦üGÑ´Éd·(dl,“Äë}XŸä*þ¬Úk”Ÿh“M»|ΩÖe‰™ w !šªc¸¾Á¹Ý‘ÈÞ};Ö:ø§íôûˆn2I ‹ ?LV´ÿ"Ìc¿F”?'*}1Ò©àd•Ö§2ÇBü²Vü!Ô¿i #OœÉ}©ÛÄ2Dq©i•‡ûEÇ~‚¹Ï‰ÿµÖŸŒPü9›í`Ë3£"Æ1ÐNx¯ÒþÜx–d¼¸7ä¶a“ìk_þÊ(¶¶iÍÕšÛ¢ïg‘]¯Ö¿@¥–äôg:·}žßu¿SåkcsŠÔåS²}Vÿ}ÿC½OÛBeÑcŽ[&  †”ɶ2}vãô®ŽšÄÚÃßFhç•÷’‡…>Àð+†¸‡Ãúw›o¨ë·|²yJ‰oû¾¼±oOÄf³õíKAÒ%t³Õo/™Tc‰B±î ŸQš÷pÙn ‹~ΖþOõèx˜œN7£íjíæ¿N§£j_nüQqGR‘[·šøO^1Ò»OÞø³âö˜,ì5[‹8¶Ç"‰ÄL c‡SÛ§Zù’o†•¾ÌÒì Éüq]?€ñÁÍ;Áž7ž$ÔoMØÆÕŽ0–Ï`G5[ÀŸüàkEÄÖ—ñ\+q-Í¿#U=†;g¯jù³â7ÄOøÃĪøÎ+ôº+±v@ѤKýÕ úõï\ûxþò-%¬§š1 mø` ƒè_¼Úyñ4T1Uy›ìío$z’Ìc†¬ç…¥Ê¼Öþlú‡Ä~0Ö?h§¹ðíÖ¦h¶Ïˆb¹¹T“ãpLàVç„þ xš+vh¼PF`A1t?ŽzašøÄx°âýkÕ¾üsð¶‘r,¾.&¤b‘ò—q\¾È°>]Èxç‘üÍ,vY_ BØg¢›ü^¬¬&&Ž&¿6%{Ïí94¿¢;ïˆ>Ô<9x[NÔ\$ísk ³ïž¹úÖ÷õÍ?Kû.£kskoÃ|Öf-YxÿP—Oð÷‚¼.o Œ4R̼qõ“ÉɯTÖ™|gw¤Gyz¢Þd"íÙÔóÔ Ã`Ž=kÉÆcU:ª÷.›6¼ô½G —9Sr…d—]Òô9ßë¾ £\É­_A¨^I™m÷HHÛ,›@ëÏPk¿ø¥âý?á}’ÉákŸA{;3´L ó!*È€ÅÇ~kãÏøƒN·×nbðÅÍÆŸ…a’à.ù;xÁëøÒØø„¶6:ƒõÆh«“F½HՔݻ?Ëåçr©fÃÓ•(A&ú«ôê}¿´Ö§6•åÄ"Šýßs]&Ëp#ÆLé]‡ÃÿŠúÞ©¤<×Ú6§­ÄG—$ ªBNy$œ|Ý9ú+Áôÿ„¾#Ô|!µ¡-ž«m$¢1•À–e8<²ñ€1×§¥tߺ†"SiEñ1cóùœ“€NÐW¬ëzÍ꛽VÂîÞ3}™’5÷éúW¤øwöˆð—'Óítè,ïgAq]&Ãfç# OätÎG­yÇňþ#ø}⻽ ÆZjštÒyËʪ¤ŠˆˆŽPîœö8¯+ê{OgìTeÙÝ;uµ÷= unþÕÉ?F¯Òý¾âžŸãG´¸I!eܧ8*À×aiñtøY²·ñs m&`‰*ǘ×ù8Ï$+Ï<á‡ø­â±x%,ld(Ó˜žìÈsÀȺú⽯Oø1u¬ü1M7Ä~!AfÙŠQdZíà¦Xä¨öëžµ¾a[ I¥SâüUúè™ÍÂâ*'ìþÁÛ£»DÓx:Îéí®|5½³‘ˆ3Z\°d ãŽHÈã·~Õ«{áÄm"H¼ÛÝZ K6ëѺFz{æ¼ïá§ÄሯtÛÝbMGN¹…eŠö+VDßÎF $ƒ€¹­uß >!øKÆ7³ ¶š&«+Å,JpƒÙÎÖïžs^>&ž"•ß¼â¬Ó³üz¯ê糇xz–VŠ“ºjÿ—GsÎ"ø‡lÞ"{I´}~ÙG‚H¦È…'zgšõ ÝÜø’Á ×Ṛ7åEí¡‚P=ðH?Ž*®—áßøK$Ô1yl+Zý¨6Ë+©œ*1 Œîä`dz‘]þ§¡Ãö<òÛ¢¯2$~ج±xµ5Êk„ÁF›r‹ûŽ+ÆÞÔìôuÿ„Bàùþx¶&ÜvÀ#ðª>[¶¶¸?nôÛh¼¸ã—ËÉ÷ ŸLt­Ûm=4n&Ö¼OäÃ+y‘–¼hP9ûÝj‡~ÇâÉ~Õ'Ÿçd*K  \g;_*síŒÔÒ©îTv]í©¥jrKž’»í} ßøL<+§$ðF¥š@Hí†À1‚ÀõÀçÞ}ñOð[ìÓå]RIP²:ÎJD§ >þÕƒ?ìݪ2–°Ô¢Á<-Å»F@÷ ‘ùWãïë_¡Šmqc’Úcµf…‹ oFÈõèapu䣷ò}#ÄÄb1ÔbÜ©ÛÍ-¿3¸ñgÄ áÆŒ×…+%`´‡Ì•±ÙQy5ñí7û_ø“↱s¤ø%5M3A ²H º­ÅËšT¶`õô]·ÃíNêLÝÛÜ^Èü—šFT?÷ÑüªmOàü7ºiÄ2ØXÚã/2ÃÜ÷­ò¬V.©í*Cž^}>ZêtflF6—,|ºüÏÏ{Ë»»2Ü2ÆÏÐ2àŸÃ­Zд=gÄ×)‰§^Ü4Ÿtˆˆ_®ãÅ}ñÇâ·Âÿ€B{oi6:¿ˆ—íU@Ò’ÞªržHâ¼»Pñµö««ý»Yº’öè¶òóŸ7?PÜcÛ¥t_¼iqâ °Ý_—s–p Y˜ô<(ç¶+С„x2¥·õærUª±uÝI­Ï§t/ÙF²ðµ¾³¯ø†g[¨CEo i4ŽXp@Ç^}0*=3ö7“Ä·FQsªÛØ'ʆxà·oÄõb}…hü?ñßÄOé¶1Øèý¼ vÕCÅqr£…ѰNHíÞ½Ä|R×üQ¡àÙY]á{˰ÐцC:z÷¯ŽÅfxúv¨úÝh}% ¿V*ôÚ·“Ôâ~~Êðn«ößÚ·º”L KorÇË#ûÜ?B®ÿãÃCªxVy¼_âëïèÖÐbàÅ~-¢1‚@>RsÜäžžÕ‹ñ³ö¤»ø!à Gû­'ˆT$VñÂ…¡Üà4à:ìê}{׃|9øñã¿w6Ÿ¼ ÿ t›¦º¹so´$²$ŠT88ä× :xÜcúÕI躶¯ò¾‡]IapËêôã«ì¾vÔ†…ß õ½,ÜøTñðC/ÙåžK)¥|Œ¼j‰÷yêÀ dŒâ¹½sà±>·ö?…Ðk^"DÌœØ5´+ß òmÞ@ë_KxçöÄøSðCHWÕuÈ¢Üt?÷’BǤ’#ŒCÉÇJÃð§ü×áŒðÅuâ?]µ’@Å­R;DC7Â6W`ž¸ë^•Ë0KžIt¾¿¢¡Ã<¿ß,êE?/øv|Õ?€|aáƒ4×Ú¹j¶«æJæÙö¢ú’8ǯ·ZŶ×IlïÉÇÃü+׿hÿø(m¿ÆŸ‡wÚ„4‰´¨ogÙó•$Û†ÎâÊAW8o# sÛ?:Á«àòkßÁׯZ›–" 2ìy8š©Ï–Œ¹‘ôÿìuáMâ&«ªÆ÷ZŽ«{ %†ÇˆpNÆâB ¯¡ü;á kvóǨxLû-´¤Íq,+«žz“ëéÍ|}ðÿàÿÄ?xJOˆz´Ú]ž]Å9ýä“+cˆ”#®ì u¯o‡þ —ö? ­¶…àkÔd¶T–InØÚù¸Ã·–ç^˜ƒëÒ¾k6£‰ÅUæÂK™m¤­ÊþóÛ˧B…>\Dl÷Õ^èö þο 5tbjÞñjˆU±Ïóî{Wñgâï‹?eMvÿƃi§jp™tÉáÞh£$‚ÆG;š@OFÈàOøwûxü=ƒÀºÆ­>•6“â 8‰´ÑäÌÑßJGTÊ¿"î#;°@â¼7âwÇëßÚ/ÄÖ7þ3Òá]Nbc§;FרcrÃx%Žþ§ À® V»X¸·MoÌúî­®¾ºXº¸zt—ÕšSËÛÌŸ]ø‹uâùÒmUm’SÌ*†fþó94 rkɼ˩¥™Ûi³'žƒÎjé—ª´/1Eä™Jg2„ºF}óÒ»‡Ÿ¼UñÕgðFq¨Û°oÞDèPÕXîù[Ðgµ} ªÒ£&Ò_qâ*S©+Y¶?OÖåµ=¬²E&Ö]ÈÅN ŒŽÄ±¯}ø'ã/‰ß|1 ·Ã»%tý;ý Þm¢;r®Ã–?\Nx¯$°ýš¾ \´¡<)«ƒËoELÿºK߆j_üOñ_ìÿâ+È4–›O¸Ï—wewä-Ž !þ!œ‚æ+ÍÆûP1õ® YV+7K>­íòÿ¡Ý<ÃF)ó]tKŸüé=wA´ŸA¼oˆWWzAS#yÈ£FrÜðq¼ËMý­tõÔcÑü£Ä4ø$H-Œ÷"ñœ í íÁ'>žµó«â«Ýi›ûNâiÄ’™¶3ÏR =¸êcßøûOKíb[]Öer|ÉHÈ;Tð1ê õVS‡ÁÓoSNýÕžcÌ+⦾« >½_ßÐú§Äís:xVÚÙµks9a¾8-·ŸÊ¼gâí â‡:;iŸ<9¦É«]ÆZÞX¦W·xÎA,œGýkBÿÁ¼3áè´¯xÏD¾·€â;©âÞ",³R¾ädz×üQømñÆùîþ"Xë‹Ä»~ٸݡAÓ¹8úW6UÃÎv©8ItÕ©~Ÿq¶eŠ­ÞœdŸÊ߯Þ|£ñ[þ -㟈·QÿcOhwÇiµ¤˜ïJÊ[€b¸{ö»ñî¿i%µÏˆï9ÐFÞYa°s–ö"¼ËK½Ó–7“Y’YFV$ùwß7ÿZ»O†>ðO†/7xšÒúàŸ˜?—»Ó×ò¯Ô>©…ÂÂÔ¨'o#ã=½|D¯:¶¿™‰m§jþ$¼cigy<§s7–ÌXú–=ÿé´O€>1×.WIžÝgÌ”aGÿ^½¿áçǯjÑC‚„Kzóùp[à,Ós×}kÝ|9ðû]Ö"O´Žã–yÏA“À¯'ŸÕÃhà£êz8l¢mT¯è|÷áïØa‡‡Lþ&Ô#·¸)½®ãžù yÕÉßþÆÚ½Þ¿2iZ…¤Zz}ÉdS½ý~QÀ}ƒâ¯xCá>dñôWwˆ>ìd6Þ;“À¯ñí}ñ.òM;á†ò™~V¹“ûåG?‰¯&†w¨Ü“Ó»ÙL« ¢Ö§ŸÁûÙiq üI­¿–{wç+Ô~ |>´ðé[ Ùå3µ¥‰w;{–®‡à÷ìyâÿη¾9v¶FäÎqõ?Ò¾¡øcû>é_íWpûDÀrOL×™˜g“’pNoMŽì&W¾hÂÇ?à„1ɧGuyn$¹Àaæ¶@ú×Aw¬éÞ/±¨éö~Jd@êbŒ³dòIÀ¯“ÿà£ßðP‹ÿ†^4oüÔ­í§Ó•¢×'HwKŒ2 Fa…°$¯9#‘Šøÿƺž§uwsur׊Rg3;4Šq•f',8ôX­‚­Z|©ê–ïþ8¬ÖžN8Ý­ûrþÔ_ðRßFúwÀ«Oí)[rË©N¯ )!ÈiêmÇZù[WøÝâ]yúž»©v”&9š-ÀõÎÂ3ž:úW) ø+^ñ$>f‰¥_\§PÉݸõë_A|ÿ‚qø³âZM♓Jµ™<ÇSþ²1èsëí_MN,¦›^¯Vx“–';ÛüþÚ’âR÷<Œç,ÌÅ™©'­XƒQÎ2Mz§Å¿Ø²óá4÷kªë–)$(³Å¬ž&p¿»Y²Gæ+ÊÝ΋-Ťzt¿lI k,¬Dªx#lcŒãžýA®ºxÊuãÍMÜÆXiÒvš±z+¶GÃîv#WAàCá¿ÙÞêz}¶­onû¤´¸ÿW8ÁXõAÈäb¸Á=˱yRä–V8úç§zµkyœsD¥Îš{…ÑúÓû.øæ/Ÿ³Dzþ…ƒ¥_Ùp-çÜ&…R®9'>¨øöøEpÂÂ=PwMÃÎk™ ?ð-Ý»WÅ¿±í­uû5ëriÞ%ŠMKš¤«ö¨rÎö#Ò[¦@Üß( àwë×ôGÁ_´_ÃKám—Ž¢ñ¾qo5Ä1ÜÈ‘^‰XÉ[q‘|¶FZüó2¡ŠËkKض¡'¥›ßüÏ­ÁÔ¡Œ§kg(­ob–…ÿóøW¥Xùmáùî˰m÷R»éEwZ'ìµà_xRmÃþ°µ²¹`ò€„ÈÄƒæ¸ØçŠø¯â_ü‹Æ>#ñZÉð~ÖÏ@Ðà*c‚öÙ.n.Ü1Ý€7d€„ÆI«^ÿ‚¢|@µÓuÖ ÑïîîU ¤¦Ü¤v®–ÊË)VÆ3ÆÑïYTËsZ±Rœüìäÿ኎3 5|ì}fŸ±¿ÃŸkêÑhÉöòX³BN~elƒùw®›Jñ„¾X\ÛøRÎÖÆ&c;ÅmdsÔð1ž+çÙƒöåÔ>.xê_ üoþÏKmqÜØ\ÛÇä‹Y1•¹9R;¸$äcß«§\ZÏOÏp­–)ulà¨,£>¤W™Œ§ˆ¥/gŠ“o¦·LïÃNŒ×=—æ;ßo<[rí§Yº@­…c†WÈ5ûR|3ÑüCðëPñ.¡¢E{­éöacw‘ЪîçpF±“ŽüÖ§¾5x7àxKM]fk¹š;kk}Ï"¶O˜ ÂíÈÆsÖ¼ƒã'íƒwã[¬þ-öýòÎÄ$펊 ±Nyvî <=iU…JQiwÛBqU©*r…GwÛ}OŸã·%F}èhê­Y,Úyå%™ÉbzdžMG%“(é_j«0é³&BTã5ŠÐ¹µ=Æ? £,]-œ0ö]BbJOú¹O'9' xÇWÍw ´Ú¨—Q'ï·íç;zþµž+ OOÙÔÿ‚™XjóÂOÚ@ýŸÀã^Aá‹ËY­.@’)!ĉ"žêÀò1O±ðN³¥N[OÔ[‘I’?Gð7ÿßé:¬CAñ5ÿ‡®ƒâÝâ™Ò=ÍÆ ÜsÓ$c¦k×|7¬|Eø`÷¾"ñ¯â {ûRX–[:þ#’â@ êOc½|å|š¥'eU>É«_óûÏn–išºoÎÌü…7Eˆ ’OOzô‡?®ük¥%ñ¸‰T¹_)¹ãŸjòÅÔžÙ³»Œ óŠÒ±ø£­é‘[iºÂÛA'š‘çåÝŒdާé_«×u$­MÙŸ F0‹¼Õϰg¿Ù€ø[T·½µ”}­È+p‡æSè‡ü+ë ü:+kxŠîêò">hÞf¹ÎOã_–¾ ý±¼oà–µû¨nÒ@è%ÃÝN=Fy9ë]WÄOø)ÄoˆeÕ¹±Ó-® ¤8•œã{’Gàqšù<~UŒÆTMÍ[¹ïáqØl<,¢î}›ñgâÃ?øœÉâýÞÒÊÄ3´^|RmïŽsV¼5ÿøOá _Þ|:IkH–l4 jscsÇ€ç qÏáÍ~_kž7Õ|Eq,Úö¡ytÓ¿™+>Ás€8Ú³ æqŒ:{Vßêí)A*“nÞzý­R2nGíg…¿à¡ÿ ßB¶“Äþ?ðµÃD<Ñßð P¼œóÓ­q¿¶ïü£Ãÿ¼ö 5=7Xñ–¢©ö{eo0YÄùi6ýÒ*§’qÆ9¯È_·°ï¥\д«zäC¥FÒ30ª®j|/„¥QT”›K£ØÞYÕyÁÅ$Ÿthßk—ZÖ£5Þ±s=ååÔ†Yç™ËË;±Ë;1ä’I$š÷¯Ù—öYÿ„áSTñøž+& Ån?x½É"°~~Èzþ¸ò^x¦ÅÔǘŒ¯·Ýz×Ñ>Ô­þxj 1¥5¢l*§r¥vf9$9(=N|š\ÕV‡ºü,Óü9ðïF‚ÓG±Eb ÄdþgŸÆ½g¾;ÓÔŠ4n '8ò=‡Žïõû€¶>dh8ãô«Ò¾ê7:eÒF_7§Þ9 _ˆ¦äܤõ>’Œ”U¢´=¯Ä?|?ñ¦õ¥ñ%¸Ž@#ù‰(þŽƒé^WûEü1Ó>è¶ö¿<3¦^^éè×¶Lг…V˜r­ÜsÐs^ûð–[­rÙ ‚fy||µáðU¿ŽëðSàµÆ•£Moý¹âÃö(‰p&‚²J Œ@8ÆOµg«V¦"Sºí}ЧN4¥Q­{Ÿ|Cý§¼Oã];QÑ5[}M²º›ÛÙÙˆØ|í2’X€W¦k‰µ»Æ2y®jÚèZ¶W[¹¯Ð#ÒV‚±ò­ÊzÈèìî÷ãÚ¶´Éƒ¸f HïŽk–±ŸæÖî6ÕÖrÊQ:ý._˜WQ£¾v×£ÌJ­}Aûþʺ¯ÆO}z$°Ót–ä•ùg2¨ëÈ1àŽ•çâ±1ÃÁÎnÉ4(J¬”c¹¥û+~ÊzÇí xÒÃ,znjAžêT,Îp"N7çÎp+î¿„ÿ³G„>Û§ü"Ú\ox¡»¹>tÄ’oº3Ù@®[Å_´Oƒÿf¿ZÙE©Ûx‡SV -,f‡Î“,w¹ ò¢›Ó°ï^uñKöÎÕuÏCÿ cP6ú4VéóKf¥ç‘¹mÂA…?‹®A¯ÄÕÆfr|¾ì:t_3è¨SÃ࣮²=ÇâŸìéᯋÉw®[I¦b%ä2t  ¯Ý dðE|»­|Ö<)ww«§\ˆ¬f0¼ëh‰ê|`‚0s^·û8üoÖµ¯Imã»Ñu°Æ(±ˆæUpÇ®×è'A"àx ÷®Xâ«å²örÕ[:±«ž:3á1áâÝj¯s¡V¾¹øð#OñœæïJX_1ùØ'É7»(þ/qø×œx‹ögÖl¢f²ŽÚôg†L1¸l:ôhæÔ绳8ª`'•Ïïôƒ8õ‰¨X˜÷¸¯^ñ·Ã{ï ]uË9-¤uÞ¡ñó/L‚+†Ö´]Œx5êÑÄ©«¦pÔ¡ÊõG{à@ïYk´Ÿzêu]<ÄÄŠçµ(618ÆkЧS˜ã;÷o´qQßø£Q»³†Þæþõà·CQ™Ûj)9*zfŸ|—r~c]p’v¹Ï(µ±ùôg½4ÜU6¸ÅF÷'×Ó:‡”¢\{½½ëL7‡×5I®ww¤ó½ÍfårÔK¿hÉäÒ}£ÔЧöŽ3šè|áy5“öÉc2Á€ÈÈ©ô¨œùÙ¬ió3{á'Â-Sâ–±v0ʶ™ÃLWå'ÐúŸà×ìÃcðºÜjZã>è~be`W®sÿÖ©>MiàŸ Ù>8J2eJ‘OõÅzýÇ‹æD¸Rðç«p¿—zùlvcR£qZDö°Ø8A&õf7ˆ<{yâ{“oák{nNÐU i>ž‚¢Ð¼©ê‚OÝ‹x|ï Éÿõ×®xCáé¶Ä<˜HÃ4kŒv?ʺ[}ÊÒïì6P†ÁùŽ2 ô¦¼9b’Ñ#Ô¬óøT‘!¶y· ÌW ù×Ò_ þY<Ójqù¥0I=Ô>øW ²#¬<“Ââ½gOÐd’Þ·Š09cµWÒ¼ÜN%ËDÎÊ4TL¯Ž¿¡ýœ~Çuá¿ßøR‘•-´½?j»p\³pª¹ÉÏ^Õø·ûIüVñ7ÅïŽî·ñvçÏ×f›Ê• f‹÷-Ð ÆÜz䜒M~¥þÞµ·‡¿c¯Û^ë{5êð²éúqš`FþìjXdû€3_ŽºÇˆ¥ñ/ˆ/µ ßõÚ…Ì·R “†w.FO'–ï_AÔ9!*®;õïÿòszœÒPæÛ¡£m?#šÒ´¸Á¬yºsšÐ´¸%ºžµônW<˜£§°›*ÎkwM¹ÜFy®WOŸ 1[º]Ç̼Ö2•‘I•ð£ÁšŸÄ¿Xè^·7Z† åbŒp8$žÀI5ú·û~Êëû=ü%¾Ó¼G§à}jüGk$J““Fr’àõFúz×Ó#¥TÕ4+MeámR˜Û¶øÃgôéßñ«```W6#ñosj4U¤ã­"¸pvœö¦ÏŸ(”ê9¬‡Õ$·†k®jÝŠ¿¾Ù|CÓ•/‹Es>L«ü9ìGqÀ¯š>#ü0Ô|%.5ËG€>B?„úëë{I¼ûusÔŽi—úm¾«nbÔà†â#Õ%@ëùëÃc'†Óts×ÃF¶½OÏßi;K¸ÝfȦxä~µ÷¯‹ÿe¿ x­&hìäÓç• «ÛHUQ»6Ï»øWƒü[ýˆÎæb“Ò–÷õÇÉ%Ô²ƒ ɽ!FI"»o†_ 5½sYµ¸KwŠÝ_,݇ úÖ¦¢½æoN.úXþÍžÿ„’+avÒÉü(ŒHPs_Xø/á}¼*0@^ð§­yìÍàã០FÚÚªÉ'αùd1Ó5ô'†uawl† $*0Ì¥|.>³”ݶ>› MF*æö™àø¢DX÷ÌÊ8SÀÐxSᵪ_µÞ°à àgßÖ“ÀörëW ÁJÀ§Œñ»Þµ¾2øßNø9ðËW×u§"Ó­$•ÿËY’ª1ÉÉâ¼—')(Gvw¤’æ{'íÿøoû ”Ó¼U9}mái£±·Ì•°¬ÊwqP/Ø^éwHÒXƒå¬`ü¼§ñ5è×zÃCm±OoʳôÝ$fšãåsÉëï\”›„¹Þæó\ë—¡ñ-ßüïNÒµBÍ#´•·`F£’1êMSý¡?d[KŸ ý»J²­-ÓdJe¾]‡w'¿½}µ¯hâ{Û{dŒK ò7e_­q¿¯t ÙÛYëw"ÅY—imœŒ c©Ü+Ó§˜U”“½Î)á`“GÁ¿dk#\ÞèxŸÉùãsò«w ÷éP|@ý‘eÐõDñ‡vË¥1ë¾øqöm+ÈÓâ×õ&3̬‘p3ü$õJô(âªÖ¨’{÷9'Fãv|Ññ¿\Òõ¯4ÞÌŒa_¶Ü ÍÎNö 8q\Õ¬¸nõ“Á•ËÈIf9'Ôžjí¼™ï^äW*Hóß½©¿a?Nõ±§ÜáÁ¹Û)ð£šÕ²Ÿ 9¬å©j6; ï$k¬Ñ/v²œšà4»¬Íu:5îq“\ò-hÏQð¾£´(ÏJõOkž[ÇóW…øoSÁ<ŠôO ëa |Ý+Ьo¡Ñ}MðÃÅ~KEóàWÒ? D8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zu¬s4XYZ óRÏXYZ tM=îÐXYZ (Ÿ¸6curvÍtextCopyright 2007 Apple Inc., all rights reserved.sf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlÿá€ExifMM*JR(‡iZ;ø];ø]  ÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?øA›4ÆJ³Ò›_¸6~l‘µáG–rànAÔW{¤ü7%·K«0LÛ¾d^¬>•Ãx'S:n¥åÜ¡hØá—Ó=ëÙ¾h÷š½­Õƒm·‚BòGá\x‰¸êŽºR<ßâOÂËŸé­p-Y0Á³ŒdóÖbƒÁú)⯂'â7€nÁæ3@]Ü â¾ø££/‡üewkÆØtþë g‚Ū÷‹Ý‰¡ììÑ€[i¥óÒš_Òäõ®×4¶9’[M!“Ò˜\ isXÊm–¢H\ÓY›Ö˜[ÔÑQr…Þù£yõ4”U]åZvqQç»Ï­ñ0piÊØ¨<ÏZpoCK™ŽÄáƒ}jH³#Q’xX?­zgÃ/„ÑëºTWšƒíg ¯¾j'S‘]•9hŽRÇÂ×SÆžKƒ'#Š‹RÑfÒfdœ“ÇJú«BøL.,`tƒý ³.KƼÿÆŸ Z[«”‘rTc¥säìk* +ž9ŽqOSò×Yªø^­ÙéÊÁå.Ûžœw¥ñoÃÉþÏ_0²å€í]*¬Y#9uíRSn-e±“Ë»F UlzÕ4g$9>õMìäT(2jTëŠÑ2lZŽNž‡¥[ÓˆûlaÔ¸,0 ãqíŸlÕ=*ì2•’å%’ÀSæÐ,t§…¦!_p’YâS•Õn_…š½®’·R@ÿ2ï)ŽTW£~Î^›âD‚á¡-mnÛãÌÇSô÷ú×ÑÿVöÂO·yih£k’G'Ò¼ú¸ïbùN˜aý¢¹ùºN:Ó³HÍ“Mvì+Òg ¹àéÕµ[uçæy¯©¾ 5±¹a‰ÁB d í_&xjñm/чßVWÖ?³ž§¥¨Ã& ¡cd cšó3 #sÐÂ^øöÎÛDì:¸ù†pTý+ó7öÒðÙðÏíâ8â•%¶¹¸óà+Œ*°_Àçó¯Ò? xináS¦>$ÆpQŠüûÿ‚‰èw^ý¢.á¾òü©àKˆŠc<0>„ýEy9T”kK]ÑÙŽW¦ /éMfõ4Òþ”ÒsÖ½öîyIXq“Ò±4†¸†-.ò;ÔeɤÉ=jn;2Mù=hÉõ¨éC‘JãH‘_iàç¥B$õ¥ "‰hÎ)"Ì’ªçï+nçÁ71Ì‹ œžÔsXvlÇžµíÿ/†© Hë 8äWºþDùzn=+Ú>xlÜZG´1‘‚;ýkŸ5Ésj1|ÇÓ¾Ö#Âì°´r2Ø–¯1ñå‹ê“ȱly\³¸<`;WYá]&}>ŽPêHÎJÙºÑm®"e¸„™Êãóï^D'É#ºQæGοü7m7Å+v¼E–+åv Á?JõX<m«ÜÝM`©y+öã¿Ò™'À{yo%“t±!ç•9ë“ë^‡ðƒáº¿ÚÍ^X  ¡AÆÐ{ã𮊵Ó\×2…;icÀFŒó[þð„Þ,ÕvÆŒÐÅËã¹ìµ£¬ü-»²¹tT*AÈ8¯IøðÛS³ ¾FèK Êí`Hõú:ô§]BLå…6ä“!Ñ>-åÀ’H°q€1Þº|0é¢êúÝÝaR#‡ 'Üwí^ŸáÛN Ê” ñëŠîô? GâK•ûa,«Â‚8¯2XÙ'¹Ö°éèq?³ÀíOHðäwSùÖí;–l vŒðzŽ¼Ï¦é†ÂÊy$‘œõ¿ÿZ½;Â: Á¢¥¼ì‘D‰‚«ÂãëZú€të˜Zô$^Jä&z·¿5çOÏ')Q¡Ê”Qø–ÍïQ3v®ß­FN5öˆùÔ®Ikp-n£w…9À<×Ó¿³o‹-µy ¶·‘L»p;I¯–Ù»šô?€¾+m [•±±ù¿ã\8¸ûH»xyòÈý@ø#·µ„^«;ã¡ê?ƾÿ‚´i>_Ç›-J+ÑßÚämÇ”Ê@,ûCnG¨÷¯©þüQOi¶ÛnLR è{ŸJù/þ }¨µ÷ÅM<}®9¶FæHA¡s‚=ðF}¸¯V½™éâštO˜i b‘›Ó­4·­} v<¤…,Zœu¦—ô¦“žµ.) ž”ÍÜñJ3Þ‹Øy†0Óh¥Ì€x|ÒƒƒQƒƒOó¯4œ€™«AW®øvñŽ•ý˜îpYGq^=þLŠx M}­ûø'KñŸƒÄ–‘Å+£m!FHÏO­qâê*q»:0Ðç•:Ò>Ük„Ž&E ‘Çzôÿƒ? çÑ'u¸]NFG&½ãDø7“|–À®9$pk Ñ>*ÜoH¶èé^=Lg2±éCgs±ðd³…I}£ðâ‰>Ì·z_äkÙô_}²Ê§´~žk‚8‡ãéõ¢8‹û¢tz£—³Ôíµ_ÃV ¾â¨ åIÒÕÝb‘Nÿ”àô»?ym¥ÇöP²¶?‡§Ò«àÕñ2ø«à­Ö«ãg[[Wkuo¿·€=O½{O…>.‹ A »ÄUâßxûœ×¶ø;Á6šóG+Û(ÏðtÁî}ëÕ¥ø+ö™Ñ )VÇ»(±ÓÃ-YòV¡ð€OnÀ¡—‚@ïY¶šMÏ…®Ç™xlt¯ª¯þIœGìGfÊø£àÄwò£ »¾õœ17ÜÑѶ¨òK¡ ž¨ç¨'­t:®Lb-F`Ðç!SŒŒþµâ_„/mrZÚ7;ëLÑ´9Ò3ò:¨àsýk[Å«£'Ç2rriŒÙ4®{TnÝ«ï&í¡ó"1Ük£øe|ëËÈù O¥sNqSèú™Ò¯–P ƒŽµÍ5̬kuŸp|(×!¶Ó•ôù°c…ïÿõó_3~Õ35ñp¹w/*3!?Ü WØgž8¯Mø#ñcA·ðÚµíä2\óÀͶE zã=«À>,^y¾;ÕvJ'ŽÏüäƒÈϽyØz|µ[geYÞ #›fÅ0œžh''š+¹³•  œu¦´—ó¦“ÝKcdô£ÌÅQ³úS Š‹ŽÄÆqØiœú Nî”ñŸOÒ™VC„縣~zŠàñPØYVìkéÿø'Åá› Ç•íîHCÇ9XÓœçµ|¾§»?€¦ø;ñ[I×­L–òlž3üq· øŽ£é\õãíi¸šÑ—³šgìþ :ŒMd£rFßÖ¶t­'Ï”¹ÉãÖ¸/ƒ¿l|}à»=[ÃHÍbʽGÌp0v‘Ôg#ð¯Wð%õ–­p“ØÍnç€rzc±¯’¨¥f}Z–Ävž·|G©& äàúJ°ºaÓ®|¹rá{žâºËï §—çîesØvúW9ñ D¸kx®4×*~gSŒýk$î]¬hØD³:îOjwL á{¨Ihˆ<àþµáúçÅ­SÃwRÃip\Ž>a¸“×Zå¼[ñ¯Äþ"°ûÆ$WÎ\'ÌöMo2m39TKC'ùñ[Š5Ž`ð[ý;Ž=«Õ´ Åi ¥rÜ5ó׃îõY¼}å>-ñ*HÓGÕÔA϶kë hÚP#H@#±Ä†±Ç†™ïwðs†éô¢3iŠ{Îk6Nj2sɧ9â£sÅ~‘'sãâ!94ÇltïN¨ÉÉÍAA½8Å1˜¹ËO½Ù4• Ü´±~¥9Û°¦3b¡² LfîhëÖšò÷5R’°‡æ4 ®=i¨|ÃÍ?RnÃ_œÒùõ& Œ°ÁƒÍGRRW&ó(2zTJØÈ¥¦‘›k¨®1’Ê_qç ò®NÛãrë^¹P¸†{Så;íÚ“Г^?oñNî ÝCpc‘¡‘]Xl:dãål*ùGâWíoáMf[)¢’y÷±’Ì’™à–Þµt[”•‰«¢Ôù/ö”ñ‹á¸uRfxuI¡Œn&<á¹údtÍ}û!Þè_ü'­àû7‹C™ˆ!»!Û“žH ü+âoÚ³@ÔÓ@ΗæEj$gŸÌožO íôï_`ÿÁ&¼r~)|>h"¶†ÖÇà „Bä¹ùrìëª^rNM{Xª|¸e5ÐóhJõlÏ©<=qs¤Ü¬Vqoœ3wúWso4‚!LR2k>8mâvX<…Q’½ji±:Dã€>èö÷¯ž–§¬—Cùžc–¨Ûïy8¨ëô–|rΣ'Ÿ!éQÈj[*Ãi À¥¦ÈyÅfËO­FNM9Ïja;FMCe$$’mu¨Âî9jBKžiÇŽNÅ !¤YCH<ÜìÏ8ëjGáiµ%$>L Ê,S<9#Þ¦Š’ÀÉç/Ÿæª,8ùŠ‘÷¿>*·^µ"â2®¥_%O¯§½Kv)áЮã¸ÈÝ‚싸(ü+ºø}ð–OjRûY ÜúÜ‚힘úb¹ßøì¯%hÝȧý&zséú׳|!Õnïuûœ½¤‘0vȶ3ëÅsU©$mN)ž=âÿ…z¿†nn[P³0¤d¾ÑÎÑžÕ“á«û‹=E?³"K/ɳnâßOzûÛÄ_ 4ÍoÁWz¥øApT¤ŒÇä^zŸSÖ¼÷Á<àÍAõMAá;î|™eÏ?î¯=kâÓNè·BÍY?ì¡ñcYðÆŽÃU†)p)k÷^¼Ô¡K+$© Ùò”t׃_üaÐíµà ¿mÍ ö¨ø`ñh·‹¦øŠhž9,à<©ŽÛ>ŸJøÛö‰øyªøoûBâÿR¸ŒÛÆÃ!ÆpwžõàáòøÎ|µthôªâšà}íá¿ø+7€õOˆÒøgÄšœ’¼LÂöaå[y€Ú\ð28©5ÖxwÆ>øÙ=ç†u 3RŠØæ VM…†TLŽkñJòIîo]µ"Í9?¼-ÔŸzô/ÙïöŒñìíâS¨x5ÖhœbKI–NF㜌u¯NyD½'©Ç|›´Ö‡Ú?·gÃgÔtëÜ@m-ö‘æEÍ!ê@=ξyøû`|Gý”m†“ðök }%d7’ØÜ[+4ƒ?Å èÍžHÏOjëu_ø)­ïÄqomñ ÃÑý”gÌM¸·¦ Wžü×9©›/ŽZ«¯„´™RhŒ“Þ\vÉÎLŒ9bO@9?­tP§(Söu£¡•I©Kš›Ôý"ÿ‚z|}Ôÿj?„çÅZþ“i¦MÓÛK K!ŽR§ï‡só HsÛôDöþz ip¿ýzüˆø5û[x“öJðÜ:/…5;K½*âçr؈Îèƒ\!ÎKîGõGÂ/ÛïÆ¾8ºŽKHþÉÒÐ&–,Š6烒Iöï^>/.š›œåèwÐÅÇ•F[Ÿ‹¯Ò™Ö'jm}©óƒïTo÷ªFûÆ£=MCw) QçsRÅD8Z†XÖ95íÀ´úŠn^£vX‹Âæ”þ´? FnÂ¥°ÜG9jJ(©nÆETkC˜A¬[;(p$)<ôM']ž‰ö;™V)Y7À’úʼÉ~ðÅ[Óµ°Ô¢¹W}èá·gžµœãrâì}{㟌_ðxVƒ˜­äp-í]÷çï9·9Ç·­|µâoÞkš•ËKw4±I+2üÌ£öRxÕéO§j¼'{w¤Ì¶ñÃ2$qJëæNÀr}@åºï†¯<9wåê‘2çø%O>½;t¬(Æ1õ4«&õ[­§{yCÄJ·­}û8x²ÓO[q®¿ú¼D7CIÁ8*{°Éö5óâsZ6¿s¤H¢ÚYD>bÈÑ*®GLâ´œ=¢±åÊî{÷í[w&ñ,üf™Š¯šÎ2Ù òxô¯ñM¸¶¹Dš)a¸Q‰UÀÝ»<Ž1éZ~9ø±?Ž®à¹}ŽóÊò§™$'Íü£°3Ï\“\ô÷òê 뼎£˜ä‘NŒ"“I)7a±Z³TP¦MYkc#GÃ~"¿ðž­÷†/ntûØ <RE‚2;Jõ¯ |zñÅ2ÓÂ>,»µ’ÚMåïfé:à·BqÀÿñ¸cïV¡zÒ•5=ÊMÄè|uáQá­m–ÙƒÛË“y›Éçֲ⎑ Ë5™±Ó'8­+}ñìEÒÚ\›sŸÞˆØ§yÅh´Z™µwtA cê¿ u‹Í Q†/Ýiúƒ_Çþm$n‚5î÷2=kÌ ‹$Uë?2Ú@öîÈëÝN )G™XIÙÜôŸkw¾0ñê6Sý…ÉHc‡äv_¼~\F+Ñþ|Oñ†õÝ>ØÝÜÅ9T’Ê_fO\É䓊òÏž7¶ðwŒà›ÄæöKdò$ @`GÍr¹äÉÀÍ}!£þ×~ØYÇá &kËõäš Sv{3‡ŒcÍ[™{ª77§gï7cóeÇzm=úS+×<ò3ɦ¦ŸLn¦³4x_£<%KQ?CQ "sÍ#.Xg4²u¡‡ Ô#A%P¢©äZ€ŒjJˆQEkø"ÆÃQñ)â)ŒÙËTJE¥r¥¾‘,’E¾7*Ü’¼œzÓµ¿Üè*ê‘w#Ãé__ü?ø[á-7Ã7úBæ+ÇP2 †õëÖ¼ßã?‡WSñ\–ÚU´š€Š-¬°Bƒ‚~RÄûç‘Ð WÄÞV±³£d|ø©ù†)è2kwÄþÔôq6¡¢+¿d¼½ÝÇOLÖ"Œ ß››R-cCGñ%þ†ãû&îx6íªØý+éoÙËEƒö•ÒŽŸ©$RߨÆ^} )+Ÿ¼s_. üÍzŸìñ"?…¿ìµ ¶‘”Æ\·¶±¯âÜw.œ­+=Ž‹ãìm¯xGÄRÂ1žÎFbŽÓê>£ë^9{¦Í¥_Km¨Fbž(èz©E~©k^:Ñ>/xB9<3´š›Ûïl•-!*qߊüäøÿáÍSFø{/Šl­¬f¹‘,¤w sùÖ8LDª{³5­ICXœTIV¡Ž¢={Õ¸—šî¹Ì‘$Qb§Š>i¨¾•b(ñŠWI b­CqŠd䊻o1šqv%»‹5é ërÁ§Þ¬öZ‚o4ª Ùä©ÀëùW‘ý™¢b²)Óß¾¹ýîñÎÑàÒ™R0àÔuØsŸ¼i÷ªtŒ;‘#„È$f®YØ[]ªl33ó fݦØåùžYèÛ úÔki$îË1`7c5êz.Žþ"!ÐçŠ1µ%LŒúc¥hø‡àˆd….-–˜–?Þ:/)ßò÷®iVIÙ›*Mêxœ¨TÜHå¯BñßÂëÏøtMâEŠÝˆV1ó9ìH=? àñÍ8ÉI] ÅÇr6n¢˜ËžjISœŠ—L€^ݤ @0ïI»,gº%´2ÈÄàBI©’ÕôR%Õ¢’-Ž7+ WÑþé—vÒ«üÖɇÉà}3Ö¢øµðCþωÂÍ#H¡0Æ?|Äœ±ü€®O¬.k3uIÚçOðßÄÏ/ÂitÝ#Ì’hÊ}$@‚Ü–=1ÎkÌÅ÷Ñücª\x§O)þÏ$q•"Lg1ǨÅtÖ^Öþ[Ïem¨A&Ÿ2™¢’6ýè$gk!èç½xn©aw¬ß\\yA#w.í‚7Â…¨‘ì?²ÿÆ'ð†¶öZÕÌâ+¦ýÃç&9HÂã¸Éz~uÇ/éüK¨M©\]Ûêúy(DSç9#å?)3Þ¼¶ÖêXl,T»ZšÏ'$·95Ÿ²\ÜÆœîÖ$…r=3V¡LS!=jÄi’+R$1æ­ÃO5)À8«¶ÉÈêE+Üûh²x«öñdÔVñ“Wííð5^¢å±Å]‚ߎi°A“šÔ´Ó‘­YÌ H=§-îJAÊ}Mû~ÓºoÃÝRÐüy-ĤY ¾Vì€cÊ*GEê:õçµx·í â”ñçÆ-cRµº¹»·š\B÷¢8AÐa8ÀÉ篭}qûÿÁ7¿áoü?†û↗©é¶ú†ë¨/$ °ÍÀ ™pá<…Û…ÎkÇnÙHý<}‡…/Öäd‘ ùÉÎCJá£Z‹ÄJ1~ñÓ:u$å±àÚcUÈm9æ¬[Zc¶j彩î3^Ÿ1Èp_´ìM⯂ÚÑ‹N²ÔµÛcå][ZV^¼…ÉSŽÄ}+ˆÒ~ j²Ù,Ú…Õ³»`y‘0DZÖ¿n—áÜZ†UØÃ戴À× ãO‚zd—Ÿ§YÍÓ‡òpsêØåÓΤҌ–§l²ÔÓ?&îÿf=_VÓ Æ„¥¦IòJù¿NÃñ¯=Ô­/ü!uö]NmpœòAÈü+öWMømáëKvÓíƒí¡ ûg·Ö¾ÿ‚›~ÎKà?Áâ X²Xj…ɈHX`/„zcšêÂæÞ|’FðžÊ<ÈùïÀž&ž×QY®vÇÕö_À_[ø×DHu/³ß)FN£é_XËäÞFÙÀ 3Î2+èÏÙÛâ ¾›}²™à 9ùEk¥x݆™ôÏÄOÙƒNø¥¤Gg©F‹¸2«ÆÚ¤ˆðÇŸ„×¾!ÜéRÁ,iÈ/Ó<ä{ty¯Ó¿‡^8Ò×MŠòá“ pHl•úÞ¼söªø à/‹š›ë6M2jD:$åR^ÛÀÏ Ó8ë^n*SåžÇez*qºÜüòa¸U¯Ãæë–ŠÄ&d\±8ÀÏ&·+½Óà†yÄlÉêz{ô§hŸ 爛 ®ž_Íbl—sŸn•빦=E¦zO¸ïµ_Eh€ÛØFIöÃ/¾+ê]à s¦XX³ƒ.“yŠ ‘Žƒ'5òÇ…S]Ð/?âqhÞA`]ÎIŒ‡Î8¯¤~é·šÿñÈU. Ê©úõåbS¾‰Óxÿö|‡ÆþÕ-o–ÌÚÌ‹‚©ûèöò60Æ?>çé_ü{³¸ðn¶tK»h  ”–1>‰Áþ/SŸzýMðwÂ{kâ+øHŒ.K¯P3þM|ÿûF~ʺ‰5ÍFæ{IÍÜ|àI»ÌfãvÞ@à {ä×>£+HÖµ&ÕÑùÔÑä*¬¯Ž7†ž‹Ú·<{áqàïÞ鳩Õ¶SÊñÐûúÖ:Œ-{ ]6Ú…KSRÚ©ÚNǧ:S±Cá'š· y¨¡U¸#çšC%‰8Çó_íÓ<©ñBú õ[ r;©Œ¨V,IdT*‡û§¯9äšâ¾|kÕ¾Ãse \Gio¨Ÿß³©häãH£ªQÈçÖ·ÿh¿ºxÂËWÓ®-ï¬5»hæŽ{c›u“2.IÛêÁ¯:J»Ÿs¦uyé¨ö<’ÚÄCW Ó‰í^£«üQƒÄ ´ŸÝi+öý6#oöÁ°+Æ(p;€ã9ížæ¹+m23]Ñ›{£™Ùl~©éZ2Wr¤vþUjïÂz´E'J8Ã)¬ kÏ ¢–èFkmõˆ°$YUy8<“è+äÏ¡V<ãÇ×À÷>f›ÛÙ*3Hà3yg<`Šùsã·ˆ´ÿiwþñ ÜÞé×°…UêI=·qŒWÝüL²|3ÖXí?èîQI'sc€qÍ~qjìó$×7òáÁÂÆùQ´ž W«÷ÕÞèàÄÙ;.§Æ>\ü?ñEäGq>š’•·ºòŽÉP7r =ª¿€üC>“«F¨ìŸ6y8}-ñ[OM{É¡*-‚Kæï‰@çxžµó—ŒlãЮöbÜHÝOá_IN¯µžç‘8{7t{_‚>"jW±‰.%ŽÕº•n? õæ-OL/,áäçkäšù#Â^6¾û:Ä›vƒÇjöo‡šÅÔÖˆ%”²ãެOjà¯G”ê£S›C¤ñÃIóÒ£=jÌ)ÅnÑ’wd±'ÿZ¬ÄœS"ÍX…rj¹,çêÜ|Õ1ç¥]¶‘Fã,ÚCÈÍhÛCš¯iy­+8yéIjÎ šÖ²¶Î*µŒ8­:ÛqT®àZÓ¬úšÚ°²Üzf¢Ó­zq[ú^Ÿ’2:Ò¸ímCOÓ7`c­w>ñv¥áÿ ê=ˆ¶’ÏRfY¡çåÝÂóÎ@Îk#KÒ²Öº-7EÞ³“OFR¹i¤ã/éZ–š#¿ÝJÞÓ|<a&·l|4[SPê”ú_þe¶“ŠþátPNÒªé’ÿPw†ee/§­|©ñãÌ1ÜËko –f}«µ³V&¶¾|I˜èò9 ²çæ#¿=«Ìx+FìïúÍݤZŠ,Ã;Ù-ñÄø‚âD¹•á³nv‚Àtú{WŸøãP]_Y3ØG0ÀÛ¿’Md´…±¸“Ž™=*ĺ¬Ó[¬s`¢ò¸ýkè%¡å9¹n_ð]³Ow‚ \×½|°kÙJa}Íx7ƒ¯Å¦¦ôn•ô/Âjnˆ¬«89Á®<]ìtaísÚ<3á¶÷¨;Ž:×}á]ígjíõ=ë–ð$òÞl7?w¿¥z~ˆbºÄR.Áü,:ƒ^VÏR.éÚ\°H’Z¦TõpÕÕidÃ4M Ãü*ž…lÖ³,såÀ<£Öiþ7Нm‚:œuZä“¶æñGQámnq - ©Ͻz„5kk¸vßÅî+Ët?MnÈû ä`k­Ñ¯N}ŽÊ®nõÍ4¥±´Yæÿ´Ÿì‡eñ+ćS†¢)¹å;X˜ gƒŸN¸¯ÈoÚ»Â)ðÛö†×lt…hÒÚT%IÜ¡ˆÉÿwŒÛ¥~ñj:¢ÏáæYETÈ`qÏOë_˜ÿðR‡ñgˆ§Ùm¯l¤ÂÞ=9÷9=zâ½<²¼”ùe±ÅŒ¤œy‘ðjîXõcšž%äR¶¹pq‘V"N+è%F¹f⢅7U¨’³,±mUøcÆ0*½¬}=êý¼y?J)Ü·j˜ZÓ²‹¥R·N•«cLÔ½J4,!äf·´Û~k/O‹%k Ó!äR`jiv»ˆÈ®ŸG°ÜWþµdèöùÛ]n…j ¯=j$ìŠF¦¦WŠë´=¹UéûÊ]߇40 Û\Ò‘ªA¢øsvÝ‹Åu:W„·ã(MkøgÃ^`_–½þ óBíCÏë\“­Êm\ü‘ÒüY>§¬]\\\«nrP»}áÛÓøWâÁÒuøƒ]4ÅHÞ¨Nµ|ÿ³q Åwºï†—0Ŭ›ëé ŒûÉ'ÓÞ¾¢­–§‘N«¹õeßÇø47ûFefœ.Ô¸ÀÇ¥|ëûQü]‰FÜjKx”˜2ÃÔûU¯j¾+žKÝÕv²/Í8TìNßþµy§ö»‹Ù¼Äiä9ÕKgHö®l>1|ÝMjÖ”•ºxfêÚp-Þ3,£hv|× xöt‡Ä²™ofx´øþweB΢Ÿñ®–-m©,ב0XŽ0ß(júsàeá¾ÐÙgx’ÙþâgÕâfé«ÄTb¤ýã€Ðÿb;ýORûf•¨¼VLÆ åÛïƒ×¹¡|1¾ð«3*½Ô6ò.ÃcR§šúŸá,ÖúaŠKPòSò(Îßz¿ãßi>9hÛ .€³íP ‡®[Üb¼™ã&åË-ŽèÐŒUÑæþµÜøw\:kniW®¼Ú‰‘glBä²É :V%íä&êUå Æ:ƒíL¾ñLWó\Ë’3É®']ñu¶ƒwö«ùˆEȹÏëÒ³Œ\Š”¬Qý >4Ká/ Î#™c6ÑeÔ¶ÌŒw?¯á_šßk ˆ“j¶²Á,ët›gæê9ïŸC^­ûbþÒ±kš¾¯<—‡ËF (ÆÞÝ…|^©–'Ô×Ð`0Š1æ’Ôò±5ÜE©Õy’4©cšõÆKâ­À*WŠ·n¼ŒQʘÛ-[&­ tÈVÙ:UèîÔ=Ø‹–±p>µ«d+>Õ8«d¹Å+Ím5>a]˜™Åaé©Òº0g¨Ó:=ã"» ”Êè«È®ÃÃÿ4«XÍ·ð½°Ü§é°óyMp>_™}z‚cÇïŠã©¡´OEðN†%dk×|á1(O—5Á|>·Y Uî¿4Õ/å¯;#º”S?šýx¬nÃ_ ¡#Œv®óFÕ¬–â6ÓP$¸ë³ÿ®kšÑ<u¯ÜFá6i>_^k×<áëK9-w¬›j¦íØõ5÷؉$|åÉ‚ü9kâ 2DŽÚy®&|¥èã§9é]®›û5ÙI¥¥´öÆÕ§YÓÀþèǯ©®—á´ë— ÷iöTAÑ~R~µîŸ ¼¤ßº6 ²HðD‡æú׃_éìzt©)h|oãØÄþ-Ôœx`lmH¢^5ï–é+ž j¿µÛ[FvN˜†SÂÉëÇo_¡¯Ô‹¯øGû (áD(Ã~­|û|ü1»´²°º¿‰ ˆÎÎXóaÿ¨Vxl{¯% ìU\2¤¹ã¹Êø?ãDð¸šÖ/6WBr>”ÛŸˆÓÍk3Y$à˜¤‘μZ=liMe¦V(#‹~yêr§LšŸÄŸ!ð¢Ý´y‘:ùq&wOÞϰ®§†×Dbª÷e¿éSøž!t—RÆ–È ºg‚çø­`|'øóªišÍÍ–½säÛÁ!ýáÿ–˜8öúVF·ñ¢ÎÌĶŒe‰bÑ9U'úúúWœxëÄñx‹TŽM1 iòGŽ§Ó Ë–KCU¶©ŸpøöŸ´Óž H&ó%7’OOzõÏüfKŸ³¸21ùÝÀQÜ“_™:?Ä›Í! ’4On6†v8aï]§ƒÿj­g@–s¨¢Ê².i9Aéú“\urëìoOÜû‡âím§ø>IÆ¡;@¶‰ ~_Zóÿˆ?´í¾¥àÑåÞ‰c™°HÉÂç'ó¯Ž>%|N¸ñõÛy…¼¯4ºç°ÇAXpë÷°Ä±­Ä†5þ~ZpËà’oqKÛ/xïÅoâï\\#±œì푟JÈŽ>ióL×W $¡C7`0=Sz 6VG+•ÄUÀ©¢JliÏ5b$¡¡Ü’êÜ Ò¡…3Í[(e‹pAïZÃUmPäb¯[¦ KWeëEâ´ì‡Jδ^Õ«f¿8üêm©¤Y­¦ö®ƒMàŒÖÓñ­í5º{Ör@·:¾u®ÃAp³%qz3ò¹®·G—…ç½c%tZzž‹á‰pë“^ເ>zW’xnè|½ó^áC '¿5ÉR&ñg¾|=¼ãɯ}øiz?u“_1xVÙå’zq^ïð·X{«ˆ!µ $®p¨¼³a^.*ô$~Þïtx`Òâ’L ¿xš»àÄ¿°ŸÊ*Ñí8'çÓ>µ.ž‹áøJ¹izú°í].­ÉH£RûÕöµ%e±àB7{ž…ðniµ ¿øšÎñœôÏÌ=3_U|’%º‚(€s»¯'ŽÄ×È>Ö }acÒWdc–8å½ÏøW×ß³[ÛL°«n@籯 ¬®zxmYô–‘á©5 >7P œqéôûB|ƒâ—»Ë;ÔHçò‰ŠF@ûXFG¦yí]Ç‚SìðÇ·æP3ì+­’Ô-H8ï_:êºRM¯"’³?Ž77ÚÆ-jËR»[¹ô›Ù-˦B’­Œcן|úW«_¾«zóMÁcœvöüöM‹àÆOøI|:E§ø–f3 r]®[s³œñÎONkゃ5ú¤kÒHõGÊ׌©Mň®Ù‘Tnb>ojeK³=¨ÙíZò™]‘lõ§ô(OAJÖ¥¢“©Žµ"ÇŸZrÇéOUõ¨°Æ¤~µ2®G…^x=¾Õ•L«¹Aägªå- *Ì—`KØ “W­´¿½µ["¡.ȉÂÂIÆ >•õ/ÁÿÙWL𵆹«J²_YÃ0x‰ÊHÍ÷Xú3\õkF’»4„ö¹si½ýôJAº nÏ<Ž¢»ó wÕ©sÓÕ½Ž\&ÕŸ,¶?'þ+üñWìýãË ücÑn´=jÕD†°Ë,d$×å‘®§¤f¿¾6~Í>ý«<;mgñŸÃö:¿Ù2ö“¸ÙqhÌ&9W ¹ÏLàñ‘Å~WþÚðJþÍ>$»Ô~ÛÝx§ÁwÁu wg“*xÇ$ŽÒ/pzòà3ŠX·ÉSÝŸàý ñ Ñ÷£¬Oœ´™0ËšêtyøÇ鯱€`A{WK¤M†ê5cƒ›[߇o1³&¾Íÿ‚~ɺí àïj¾6Ô§Sg2ÙÚÁcr{g+¸Ë*• ‚ 샇Èàcâ ç £=kîø#÷‹£³øŸâ=2êëcêz|mãÌhœ’ÃÔ€çõ¯+4S†R¦ìÑ݃q•X©+¦}S¢þÃ~Ñ´¬ÖÎúYãñønØNÄ€ $|¸ÈÈ dö⻿‡? ´Ÿ†:)±ÐRYÉæ™.H屌瀮›½ñs¯R¢´¤Ùô1¥ê‘ü¤[xÞ{«…[Ç`§Þº}õå‘|¹c=py>Õç J8=Åt¼Æd ÄÁû-Z*׉ð4ê>§¸ü:;nÑ­Ÿ%ˆäõÏ¥}qð S:tP=Á9\t¯~Ýù·ÑI¼B0Oƾ£ø=â/´Ë,p1ž+ç3^篆žÇÛ¿|y å¤JíÛ×¥è·)%¶øØ6E|ßðÛ}¼(áÉ¡¯UÑ|RÖù‘ÝÏÒ¾Zµ=ljÓSæÏø*ßÂÛ‹ ÉÔ-ÌÓéìÒ@UöüóŸÀþuøë=«ÛÊñÜ.Ù#b¬¾„pE~À~Þ>>އÅä® ´ÌpOBAþ|Æ¿!™Ýž^YÉcŸSÍ}~Fš ÓØð36½¥ÑCK°Ô»½(OA^ÃGžB#¥ Š›ÊÏQ@ˆw¥k”ˆÕw6?ÊÁã&¤Dô©U3I¢ˆcO^õ:'ÿZ9ÆK~µjÚêq[xzKk29šE—~}=oþµv>ý¢ÉýŠl[kâ RôÛ-È ÄÙlsõ¯½~ |[²øŸ z†ƒr“ÞY(zÏ5ø•(À¡!ÎG5õ·ü÷ö­±øc«[è¾)šKu™‚Fä’19ôè1êkÇÌ2å(ºÜîÂâÜZ„¶?\<5â8áØêÊÒc ÏZê¬ïÄO5]@B88 }+å/ üI–êâêÿLŸÎ²f¿ÝÏ\~b½—áÆKvGMBU}¸Rå}Ï·|×ËÕøêjdôgñïö{»øŸ¡kñ¼¾M­Ôf)áÇN8`B­y/ì£/Ä?ëSYxî).4ǓȂè+Œ 'Œ`©àô8¯¶ü=q§x¢Ûåu´¤g‚1íZ¶? ­7ü›M¸@¢ ¯âšÇ{8:sBxni)Å“|ñ<ºÇ† ¸¾ ¯!û¤tÇÒøËA)ÑZÖ1‰ð²Ç ùdOâ•pÓëÏà¿Çiv›`“„Âãüýk¾³»ûE€#æTMK™qÕYŸ”¿ðQïØ o€þ7Õ¼_áFuð®¦ñ©þÍr[ Ÿáï+¤yÆ~\°- ¨qƒ××#ÔWïÖ½áÍ3â'‡çÓUÜyÎ9!»dúšûKá¯ü#Fñ_ÒÇÅ:Ci-Ë*G}$ûšG&T¦xÊ“Ç5óXÜš­·I^?‰ìaóN)TvgÿÙmoderngl-moderngl-773b733/examples/data/textures/zneg.jpg000066400000000000000000000575221470420062000234740ustar00rootroot00000000000000ÿØÿàJFIFHHÿâ@ICC_PROFILE0appl mntrRGB XYZ Ù  acspAPPLapplöÖÓ-appl dscmòdescüogXYZlwtpt€rXYZ”bXYZ¨rTRC¼cprtÌ8chad,gTRC¼bTRC¼mluc enUS&~esES&‚daDK.êdeDE,¨fiFI(ÜfrFU(*itIT(VnlNL(nbNO&ptBR&‚svSE&jaJPRkoKR@zhTWlzhCNÔruRU"¤plPL,ÆYleinen RGB-profiiliGenerisk RGB-profilProfil Générique RVBN‚, RGB 0×0í0Õ0¡0¤0ëu( RGB ‚r_icÏðPerfil RGB GenéricoAllgemeines RGB-Profilfn RGB cÏðe‡NöGenerel RGB-beskrivelseAlgemeen RGB-profielÇ|¼ RGB Õ¸\Ó Ç|Profilo RGB GenericoGeneric RGB Profile1I89 ?@>D8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zu¬s4XYZ óRÏXYZ tM=îÐXYZ (Ÿ¸6curvÍtextCopyright 2007 Apple Inc., all rights reserved.sf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlÿá€ExifMM*JR(‡iZ;ø];ø]  ÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ù÷ö×ðÇÂÄøuàKïÞ(Öu|Ù¢j¶ËöfÒ¬£o2e„O × XnŒ.@Yö ø–•Z’—Vþl±”IþЀy™,CÏ~#<޵ÄÝüBÕï­u;[Vêæ]Ä—QË#4sK° —Ë?*¾Àràíã8'.ðäB+‹Oµj?`Yeq8Uò…o+£¹ÈÎ:Šô=›Š<)ÚNèîm¬~Ï1†“UiÄ$…T €ùŽ8äõëÈÔ³éÿkÒôÛ‹w†ÞVób9i nZ3± Œçœ{sŽ­´Ï Xéé:Æ£©OšâÝ­<¤µÉÛÎ~mÊû‘¸«FMA7Øïí-¤È¨7<$ÿw©$a¹è ›\ÅÅ¢KÝP»µ’K9 ‘§BÃnJ?898àòxü«xVâÒ5MFt ìÊ%ÛŸ,ž0AûçÖé%à‘áܯµóŒ¨˜`¤vn:}jÕôqjvïı0›s+€Øì89ç¿Ö–ÃŒÚV8Yü5"L±èÑCgW¦á×Ó¿éN¹ðSÝAû©UÏ+Ã}@=Gn=úÕŸhw3ØIýš¾hEnóÔ€ò9<Ó4MJ]7LT”,ŠŽØ,Œ{uôúR6»j÷9½}6UEÌÁOîÃAÏ?S€:lÑâ’V1n;zõ*zpsÇjëuq¼µÅ gò×sªK>Gõâ²´¶…Dgçè§©ã±â€½÷9}OF˜Jr¿4NTt ‘Ðd;u• šÌcFfù‰<‚z_¥h½ó¥†?Ý3œ´Ž>ètÇCÓÿ­Pܧ—|‚ÆI¦°béÁ °'ŸNZ{’äÌÝ5¼Mã–3Jpr¿†Ó­M­K•ÉùŠ]Yyî¾sÏçVµSöirª ä€;Hþ]ëR¸yCdŽœÿ8¡+ŠüÆn¿jå|ø™™±œœt?OJņ ÖvkG r7ç· ÿëVÛ«MòJÈ6åvŒÑ‹”޶åX1æ¨Ö2åV}zæxŒsF‘®3³o·­T ÍpÂñ†UsŒŽ¿çõ«:¬bÇy‘‹Îî£Ó4š4¢;iZÕ³#®ÒYrœ€Gn˜¢Äè•Ñ«õÖ™+Íe I# ÁÀïŸP?Î+SC¾Šÿ/…óY‰U'æÉö>üæ°£»¹óg{–Uˆ¨veqއ<ôþ•‘¬/äØA‹ªqœñý9©å¹7Líô«{wkvºmÒ['t!›¾:œÕæ¾[ËYVåÊÜrœôÏ@ÞõÊê-pQB~ën2‚sާÔÔ1x™ÓM˜+•Øœr0§= \¬žV΂ß[Ðo0’ ïçÞ9ëÓŽ¿JÅÕ¯êB×;X³+€G^98èx5Ÿ¥ê7‘3Ý–òåÁ̈˜Ç0ê3žÔøm¤º»‘“q‹8-”}?AT•‡k2äo&±qÊ„ ùbÛÀ=0@Ïá]]¾œL7ä*á*;’0à+'HÒA“d@ªÆêÏø“Û#5Ó^F–Ò,­€6…“ªÝsúRk¡—b‡ˆf6¶KË”’=ÎAÉÏëÔVUÑ0ß6éS)†ÃO¿?*5É~Ñ)1ÞH›q ™#ŽÍž˜ªšõØ»X"…‹¤’¾Àÿ*¨Ç¸Ò#Ö[í“.¯ðçw^µ¨àxä÷±[–±´Oö­»QVéœâ÷¨- Š[ÌïF‰rKœ/”zf­h V0ƘòNvÆ»‡EQ¯­kéÚ>V-¼œc¿SÏò«ÒÅ\m¶R|¾Ëœ7Óóêjµ’ Ü—p$gÛÄÕn>{“‡K†•í ò¥VØù½»V«È°ÜAñ‹€ÝztÁÏ\U­nÜ´픃ÆÜvëFû’æÎ7Äz\×N"D,r ü N­$ZŒê»@b7œ9éŽõyÕ­ñ:„s¶ïÜ`g‘ž})×"XUåµPÌG ù‡LqÞ™§3ÙR[?–ÿf—Œígà YÖnmïŒoÉ7L·éøóSí»•%•Ic¹T¡yþ}@úU»»(m‚Én¬dsœ“œœN)—{hÊûç÷6îÇòÅKg N×ìÀ™&$mééW- FšßÌ2'p+‘ø*×´—ÈŸ}’Èø9S·Û‚~™4½s¶Ãnt¶‚ßcI–9bÝG·5nY2@Ç–Þ1ÔóžU]NéšÉ“|‹Ÿ›ŸçE·žîÃιtQ·*ªØúŸÇÖš‹2mÛS*ÿVºŠáÒSøÉÆqÿêúá½³X.ËKƒ’ª0?ŸáTµ‹}²˜Ù›†>çñéR[ZÉ=¢µ¢´„ç?sßÓš®DZÓSzÁ¢ÔbX!s•ÛÎ?§ãVWFŠÚ’á\NT4«Ù,­ÄΛ¼Â»uÇ\NOò5fæúêï Ê]†å*C}ôJ9LÜšzº•ÌÒŠ]È¥ˆÁ‘ž¤×ÐTö¤Æâ;t+#aC/ß?CÐ}i4­[‰ÂÜùï"388ÆóëÇõ«¶škÛß Éœ2©ãñôÏò¦[i­tŸ³Æ¢è«63€ã8éÉÿZ¯Ea•ج;’î@Ç^üÿ ±§éždìÉ€Àr ã¥#=A_¯ÖèZœw¸]2áÌ_)Êw˜¹èNr:v¬Ú±Ÿ)«k¬H-c“Ã$ñÛ¯bΞªÀ ޾øÕzîñ¡˜‰FUÛë–ôí3×Ú¹ûÍ=oõ–køã¶¸UÛ¼3ž¤·v#žßZWÔ$±µhgÅÜÊ«7:ޏÇSï‚*^ãäè‹þ$°ZEöy”»ôuäü稯;ñW‡d‰úÍCy$™6“àçðçó¯F°×të«iQá6˜•r ϯ¯Ö¹\ ±òl|§‚Ë!ºž¤»’8=)7ZXóÛÍVk›‘ ñíy¹äm˜õÈɬËæ’i"ʲ¦ ‘´ö÷&º?«NVÞâ"­Ü !ÉÏ\g§¹¬‹»(í$–êMòC2yhÏÿ\cše«XÒ½ùô8Šœ|Àpqè1PÁªÝ_Ü*Kå4aWî®2sè9ü=ª·ü,õëx£¦0Õãäœÿ:’ÿi‹„Ø@p>Ÿ­4¯¹ksGPq£)®s“ÔŸAUU™ÛfÃåŽpÜOq“V&E½Õ©Vãú¸÷¬+û¿²lŽá[Ì.OþŸ•+ *æÆ¥dºÌ¢L1Œ®vïÛ¸zg·A\åþ–dœ$8òÄIús]—tÆÁD_3p -ï[i£ÛÞÛ°ºX›Ê«:a¿i0çä<Þ÷ÀâfÌR2HØ;Šü§‡¿v×6·Ÿg¼q&Á‚û†I<€}ý«¯ŸM7î¤|Fì‹‘“èN•›ªGÈe ¨Y·p2PMCEQ½Ì‰KÃqFpÙÄ~yïÖ§mfv»H‹äc~ryàã¿N•ªÛlȵɔ?Ëïõ¬ˆåžÚå&‘Ý@ä;pj”[+â:K™˜ÜÕ®¬Ìîwe¹~Oq•ÇêDh§¾Î…8gÉýAéÏsÖŸe¤]\i±Ëþí‡Ì_€OnIæ­ÛhpXÚ+<ß¼Î|Å1úgóâŸ) ™–·?Ù¬«rU “Âä÷nXý›ÍðÄW9á·ŽœtüMeÝ_o•RÒVTûsß“Ÿÿ]Ko¦;Ý·2ÈÝ#óqؘàSµ„Ú5õ‹{ÍT—‘Üç–¾K¼‘¬lrY (m„󒸬½Fap<Óo¼ü¹Á`}xøõ®X‚ÖávÝ5ŒOå™!0ÜŽl`³(ÚXg ¼`gŽ•‡«hrh²ºòHW I·  ÃÚ߯ÐÖªÇD¡­Èìì`¼X–Ê4‰Øsµ·í'ƒ€ÀuÏO¨F[O‘Ò+­«2ydP8ë´‘Ó×ùŠÐ‚O&ßdˆw·¿O^GZlºZ\]~êÝpƒ<1Þ‡$ŽHàþ4B“Z ÔX'‰Ä{Y0»ˆaŽ3Ûò«=Ù¶¾ˆžœUϳ¿ÙË@r²c– ¸v,9ë'_Rñ‰îEÒž;y0 (pHî éÐÀÖ¨ªÌ¾cHˆÄ°Qó}1ŸÿUL“Ot6Þ[3 ü›a^ä·f‡úVn±|ÐN µîG–μ’¼ñ»üér4;’.© ˜Ñ˜:ƒÃÄ gééïÞ¨ÜÜZ`ï†%-’§h\úJ†æÖW2IÈÑä¢eðò7¨9ǯ›?™%»—]² ‘æÈ_åþEQ«r²@¿ÚR*ÆÍE`UOÌ=ûTí¤,wy÷.I ÔdãòÏÒ³£¿—ÍQ³[#Œ~5lßÉw…Üþcp«–'ßÒ–ã³+k3‹HXW†îÎ=½cÝ$úƒ§—4¥[‚»HQßÿZÙ¾Òîf“p-Qóyƒ¹Çò¬ûM"ðE¾â)Q7üŒã úŠ|¥EÙ\¸u!6²ÕŽä;ÒA Ÿ|Vä¾#‘`ŒG&Ü.éAe‡'$õôÉÜZµ¬¿_-Ÿ »!¹÷ÅYM%î­FÕ%¤çå={ô¤â&“6£×”BNC–nª3Áÿ=« UÔfºK!*W$ìàväÓM£Ù DóA ¹ƒtCëþ4°Yýµ˜íRW…ȧv %©A%ivá›(Ø=Gã‘SÉ šÛ÷q¦â8ËGãR§‡e*LH’mlÝJš-;È”ŽlnT} <ÕÙƒileÞxMæ“ÎY0îíúÔ2FlÒ0T$“¼ÿx•tW0ìa c|¯Ê"–f8à8è3VôÝOÚU# »úœùž(³SK³MÓî›ÜIGïmã=W=}*Öšnnb+ $yÚWƒïW®¬–óX”¯2„ýä„«ÁÈôéÓùPמLþEÊlãjÆŸ6=Î?úâ„É2æáûÄ·V¾kHFÏÍþ°Ž¡ëоÖÐè×H÷&{û™f›7“Ó©Æ1éÜb³æ0†›W3½ö"Ó´{V¹ÍôWr&Y”FžZŽxÇROµ7Rñv.Ê8aÞc([sÄŒŸåSÜÞÞ5²ý–Ýç~„ä®F:ŸN”ø£aW—NY§ŠAÌ®Bcø¯'voÍg6 otûy&ˆ‘ºaÁᱞÙÃ/\ó“X>&Ñít™Œ·vÒØ"àÆ¯ò$cí‚s“ô¯DÖ¾ÃìrZ]ÜÇ$+ûÇ·ˆ€§#€ÀãÓ¥QšÛZ´‚iΧm©už¸ŽHã¨î9údÖܦ×q<Ôùt f¢òÜ€ßlã¿5p±·• î…ÏïcýêžØsÔƶn"Ó¯a‘¬a}:f9@ñø 瓞AJÍ]6â¶ýžÆæë"vWã¸é¥_#D¹&J’µÄ¬“A…Pì‘!ǨÁàà:ŠCˆ”ØE¾rØ °¶Î;ÿB*h¥ŸNaý›-Èr¹a·q8î$Äfms£ C<òK4ÌcHJ´OدAéÁ¨ä±)_S>ÎúþâgÙ|–òÇÉ“åg8èJ¹u{§Ín<Éá‚h”+Äò2Ëžç$aâ*ËxbÅàiõ;é¼Éw‰mX à…#+סü3ë•y¥Á4#qäb†M¬D=³ÓƒŸb>•œÛ~†¶F¨¸²‚Î1¢$Œœ„ÿXàãû gèJæu¹ÒrûÑnIÀTÀQŒd žžõ4–ÃMo-剥Cþ¶)xpF; Í»¿¹R3>ØF䀈}¨P$V"Í-æåB–~£Ý*9 º¨U†/7Ë$ ¨Aaëžý¸>µÆ5kxüÔJĨtbAÏLƒéEµÍ…öb•®B¶x‰#è <«PÒûŒÔÅå¬p¬ÐÚKjÙU[…VTãdò:V`Ö™õ0Ò)Ž#Á Û³î=´ðNêZlΧå)!`0~Ÿ_J|^Û»½½­»/Ë…fmÀúáü}iXjIÛ Ò‘»åP6¶w°ã§=±Šµs«'Ùã9À’Ååõæ¡Õ¼:l•–kUC(ðÊÙ_¨<ÇŽµ”t÷³»;K`mŒd{óÓéME’⯹oT½2ŸôN>Gê}jXÚS¹£”©'.£Ž:r*Åž#FæpIÈqïVü¸mm|©ÙQ˜îãŒýOΟ'qs%¡Šó3¸2ª­†fÁ)ϧãL7lºAÀmü·áŽ*kë f’O³,‰]ðBŽÆiÉ¢ÚṎvg<Ÿ\ŸÖŽKlWAºUòªH¯.ÈÁbT“ÇåO·¹Ä˜†)$Ë|ª£qûTºv6à±Ão ³\£íü[ò­h`Öì©2´–0³/>ý úÓP3o²3$’e”*Dë3§Ê¸Ü[Ûžý+FÝKÀŸo‰FA cíÑIÁíÛ½Amm Wx»žÝí%–I7°Ïb;uþµ¤Ÿ`6ûç”…\* –ç§`:žNiò0eÝ3UŠð˜¤K‰#2Á² 9%Aþuhëqé7Å^tEçç.sÈä““øsSé%¤VW·óHùK1bH<úqúÕÛŸYÜ۫ê³ø(Xžx9“Ÿ çÚ—+!ÊÇ%¬j‘ÝÆÀFò.NÒc  ÉéÓÒ£²k†Š7º€Hœ6ÄŸÓÔ›X dó_y‚v$ò>žõ%ûØ ,Ðù{9Þ¾a'×ãðÅR¦W´¾‡9>·*£yJ‹åãå‰‰Ï äqÇ>•bÜÜ]~öèHˆIb Po™™ºwç'ŠÙµû*«9ãóJäH¨ÍÏ m`vägúÔë§À‘–yŸæ ÌçƒÛ'­.Bã%Ð];»«ʲ[[“ÃîS»èG¯°üiöš §Ë”D× A, –NN;œvïÇZа³¹–4]Aq˘YØ·¦òzñÆ09©Ä2JXê72]mÇ ¬åßóãŽ8©°·:[Öka¡ßßÛ4{P®‚sœ†÷¬[¶Ô¡‚âHäµÔT’©]²ºž™Œ±>Ì}«¸’5o0Ah„09•Y×$g9¯$g§^kÄö±Ý¢~æpŠÀ>=Km#ð÷æ»U2œ‘Ä^ˆ¦š3k¶¡€dFÏrzw¦ÆŒü‡PqAwÏîh\hÆ÷“ÌžOx¥ƒð”­c=ªFÒÉ€.Yf‰ŽÁØnÆ={Ö®Éêfǧ,“F†0ørUbÈcßøX~u«ªYº€oäee7–.êü €àr{æ£[ [ûXÞ])aÞÄ ˆï#äã¦ÖÛúUû_j:b:úõ$ ŒHâ<ôÈî?à=«SHqÔçÃ4zȸò¢ m.'Ÿ•>`ùVeλ¶t»©Ù\°[ˆ×Ì'¾O''±çô®£TŠþÊRºÅÓ]£­$`\ŒñÝ@e<Ï5Jþkr­#­ºº‘ÿ-¦·‘ñÜM¤‘ëSìÓ.í¶ÓÁª¡‹{Û¨ä8?CÔóíUæ³OÞÅ ŠÇ Ìù(}ˆÀSîEm/‡­ï@?lØî ¸ˆí?F^IíVJY-ßí7‰"*2“*£¶à8äw4{?"yõ8—¶’óhRÅ$nOç[V0.•Ÿs‰œ‚C0Çðœ×¯­.«¥-ƒìy€r €ëÙ·ßÞ¯øG†y"Ý5ôî1唘Œ7 vàñŒÓ•4s\ŽÞÖËS²’X„‘‰r)bIÎ dœôõÏJ‚ânJÚ4C‚Kd¡#×Ç~õ«u¢Í^òÝ6•“y!‹d•'…õÉRËG\x¤°å#ùÆ äpxëךÏ>f6¡j—]$<ÀL¥²¡‡LrG§OZ ‘+„[n†7„\úu=…Yñ•ö9L–.‹¹Žèö‘"`ðíǽ7ö÷R»-£†f#p#¹8î1úÖŠD”]"ge±˜J@û­9ÁíƒÇéP\i“\ Ä‘¢ç8 ~\×C&•%ÕÑû+ÍwxX‚2Á‚Û×µAo+}½£‰¿…K»cñÛõ¦¢¶ÜuFE¿…¬eFe’óÍÈÙ6!úÏçùTÑéæÙ±ŏD%‰ç¨ù‰ç¿ø­ËKI/Ý¢,26@x®$^öþupèWPÃæ¥åäòmæ(å WÓ°'éÅ' h8·#’¿Ñ|ðÄê»-(‘›ÔmÏcžM6ºÝMRwÊX‘ž@QŒ~9éï])±–þhËï†Vgbï$mã$>µnm5c;”NøytmÊÜò­ÀÁ$pKT¸Ø¸¦ÑÈŸ ¼Ò)a³72MˆPŒ`aAçžÕ§£i–Í‹q,¸ù† ~NqVO4Û22¶<ÌìÜIéŒåéQØ+c.o.ä9O‘† ÏBs’=ªäPM;˜mm™[$=ÃôÎîOlô¬¹ ;écŽHÙc”GÞ+ÎíØÆðXŒƒÇ¡¬ K͉$V»È6Èæû}À8=; {×Ww¢46ϳ]ÁŒÈÁ €y]Ìy^zÄóY·V`^±¼%ãËAtÓ µÝ¥ÐÍÊç!sáöÕgÅ¥¸}‡;üœmƒÌÙúÕhü/.+y–Í»ÝÈ>€€§Ÿzé ѼÙe}2Úá™sbvàãÏéøÕŸì–ŽÖSg½gÜ<¬”ú09ý \—BS¹ƒý;Ç ‰/­c•””†FP9ä¦xÉ知^·ðoùï.Œäª…Ö?®Ò9ëӊщÈk–Ìp«÷vÇ~3œö®’×FžïJŒ=²¼h27¶æÝþ×'8ÈéÿÖ¬*DÒ2±æº„.®äxÞ_6hÎÉH熡$û}y¨Ï„5®Q­a2ˆ†s0Ëz‚ƒù Ww¬[ýŽI$™Vb„ù·sÜ` `žÍP¾¾ÆæÂà’òÄJÏà8à{µ+hR’¹Ã§†ÞÛz5ŠÛH»½ÚÀöa‘øóM·Òd6Û–òXçj¤¹ÝÓ„éŽÇÓ {i2²«ÙÄ­°n]F}7t˜5e¬mþÎßé¸l…g>¸'>Ýû•¢Èmk­ÛßÜ]:ºÆç å¬L8ô!üêOÛ¾6;̪2G˜A$ãœöê+_Uð¯™4’ÛÛ¤{ "D JÇè*Αá÷[¤Šˆ0N7½Oÿ«¯ötýÛ¦›(ê,örÂeXËã JCmÛyõŸan×—de^xÔ¶FeÛî8éêk²Ô4oµÙÊ‹$ŒPd((?Þè;{óTt ¼’ «#mm® ›ˆè$öÎÎkÓ|¬¶ãt`ë^Èi'…£DNe1ï~\cß úšÇÒìâI¼¹—O1·U<žyÆÒ ?^+Òo|€™!·„©\Ÿ,”.{’ûš§£xI‘•²v‘‹Hƒäñ»ŽƒÖ”º6•Î^=& ø~Î'(mÂ8ç n€œàÖÆžÚ?²Îmåîgu síÏzõáh^ µBŒp}ëÿÀ‚Ý’].vF8EU$ç©Á_óô§ê'dpö:#<ÜÅ$&#U8ëëØÔ÷ .ÉnF68¬rÿè­tuŽåØÁ"!lìP˜”ñŒòüªÝÖ‚ÙrL$Ÿy9\õ\ý_²ÔŽuc˜±ˆÜ@ÆÞ7‘™€21Û‚~„Ƶïa’ÓNh’WûPF ž0ƒéÒµô ‹™ÛOºH-ÛG8 ‚´ï<3ö;6ó|ôíhIï‚9¨•=EíU´gu£O,~Töê2Çãü€€OÔqY×ZzA!"$—PÈY£÷ÁÆ+Õl|8’,«g®b³p#’ÓÏšç/ü=q-çïíå… HWz Òœz“:–ZLè"³f¼’3e“ ã©8üª ­..À¨;`3°9÷?ÈWcuá¢åÖàÀn(þñ=:õNO ²”…V^¹ ³w× +²—c™Õg7†öÀ ŒKüÛ¦¯N¹¼b´­4`" $/Ф!UàúŒçøýkgHðÔjÌ®vüÙP#/Ó­§øitý¬¬ñïl)Žà,¦•JVÑ"¡Vç'g¡=¬‘ÊFvÿBªGâ3úçéZúvŒòÆÒȉ"ËÀÏÌØþð=ã‘[6:$VÛÃ}¥Žp ¶;Ÿ”ñê{õëJßGÝ+†”ï&Hñ°úÁ÷Î+@µT˶´}å.grˆ6ˆ•°èª8Ö®ÙèMŠû÷à#rpO~r{Ö–£™UÚ¶É"©R}sƒ×δÖÕä1î* ’0Sþy¬%Jû*–Ðܸø£àÙ.ä„kv1N$óÇ qƒÓëHdðö¨Áã×´{œ<`LÊ_§÷”d~°­?d/Z½èÓõ¯…¾>.ŽIn´ܸà’ÿfcøÂ½OKÿ‚iø¯Qðäo7†|wix˵>ÍáË«¨³ß$AÏÓŠâXÜGXÇïÿ‚t¼=¾&s:Â+½mckI¬KN¿¹tº\ê22r?n?Â+ë-4Ã{¥¤Ó"ª ë*FIÁÉü@¬íöø™¤ø‹ÊÓ|9¨•¶«·µD”GËì;»žknËöAøáuvgÒ¼#$e±"k‡ðÞ·ˆq;›>™=:ÖROÞŠ_2 –“¿ÈÄá”–lD–q!HTpONÄž¤`×W‡`M615ŒV¬Ät# Ó9Æpzu®Ößöø¯-¼w‘è~4{o+r-ž™x’G$Óœ}sŽ¢£‹àÇŽ4‡‡Ã_¯5yhWîÑ>GÎñ•?÷Õ9TæKüУ$®y}掩z^ÏìêûˆÜ„³ÉéþMIoṄ®£`²ÆÜyŠÁ°:õ®÷NO^GrÒü#ø¹:EyôŒíÎ8ÛÝüÅfx¯Ã>0m1eÑü1ñÃåÎÝ—º½Ï Ž<þ´§]5kjT ¯{èpÿÃèam¬Y“ž½Fp+ü8·˜2Db.Äî {aX?OÆ»=kö`øóâ %ué~(Õ,”ž#ðuÕ¬¡{.DÏ·^}+™€ŸÓX›Oñ»;¨Æ<9q”É>PöÝD1´â¹fý?àŠT\›q’ûÎ_]ø¨ÃM{¸ !ϵŠ÷íÓ?Ÿ?ï­¤SsŠ®…‹y¿"öOoø_Zí?ážþ4Á¬ÙØEá_|ÀÿÈ¿x>|"“ŒXsÎ@®‹Lý›üocª;xãÀ<˜UŒB/Þ;ÊGRÇæTP;wÉ®ˆc©KMWÈÎt%y—ÞyÁð<¶úak¸Üevá\e³ÛÈ÷üúU/|5¼“QR‘\)Còãh²8ëõÅ{¾ð?[ñ}¼±x{ÀÞ=–hØ#ïð½ÚÉ8Æã©§ø›öø‡ðªÎ;É>xÛPF;J[X?˜yà`¯Q[¹SPo˜ÃÚ75=®øSW¶¾™àŒ°‹îßÇ'ž ëôÍgøkB¾Šs#M r˜+Ê÷$¶>˜ïÅ{KøÅzµŒwzɶFEq o M+HTrAAÿ"¹Û„ßoÄ÷~ð_ŒÛnÕ[ï]Èò¾x¤cÔgð®_oJ1±¾²•î’8eÐÞ{ôÇ…I~ÀŸ¯8Å>÷ÂfŒ˜¼©v¹u##=qÚ½7³gÅ=RþQqàmyLjY¡—@¹…•ˆÉrTsŸ_αuo…Ÿ£Ô'ῌ¼ÓЮ¥!†ÊB…#óÍ[ÄRSI_îdk(ÞëïGŸZèñ0o9`Ž&?)XöŽG?•X×ü0¶–ª#† € ³“Üð1Œv®ßþ·‹â™›\ð÷¬g†@¯dž.qƒÐnXŠ‘žùö®¡?fŸÚ[Hú®‹®I,˘•¼;2)þéO_ð­ùÔš’_Šÿ3e§%Ÿù,ºÔƒ6btΟ›ß=qíS-Ô)‚ÛX1á”qôúäW¯ÛþÍž9²´7Z‡‚¼`ÑÐhsäŒõÀRØü*¥ŸÀM~è’¾ñR«? ÚLûsÓ÷DƒŸn+hòÎîëO4bê¨Ù\ó(ᙬäYÕš0vàò[°£ïÖ³.lŒXEH¤Sò’wpøÈ9àW¬ø›ö{ñç‡íMÍ—ÃÿjÑàfÞÒgeÏ/Ùóõ¬9~xõm事៎b„ }šE9¡zÖ.¥;Ù¿ÌÖ.û5÷£Ì/䕬ÂClRaɹpüö éYòØOshn!…ÈÌŽ%ÜÌ;”8ÀíÆ~½½ZËà÷uÆim|ã{@†it²0C8òÏJÉÕþ øÚ9ÖO ø…å›îùÚ|ªúîHHüñŠ¿g†²”§/”¦Ú«vJ?tO9Ò4Ym扮.§¹±óósÆu#8­»?ÍRh7r‡'ž3Óô®–Óà§Ä˜Ty^×®<ÆÙ¸Ù\ùyŸÞ6Öº}öñÜ6F]{ÀúíªËÉxl.&òǾaéÔñWa—Á7órýH”êý´¾\¿¡åúm›GvÂâ9Šï$n]ÁÛ·Oê*ž3Ý Žâ*NÕÇåì1ÇõÍv~+ø®ÁT³ø‡¦É&-—‡ž^süY‹§äô5wÁŸ³¿o`2Úh.`“r”ŸJžÕObÈv;v汫ŠÖÐþküÍa­g$¾ó‚ÎæBáÒO›•&2g¶;þµwI¶fI~Ñö“†àœqéÏÒ»y?fOÇo0´Ð|W ±b|éòMŸì”ERÀb °ý˜~$}®ޝr£“J¾ÁôÜÝ=ñNW=ãø£:Ž U4~üêRßé¶ìÖø‘‹D6O?ïT3E¨ÝZ~|³&FÐ6œtÎy÷â®M5œódßàkO·ðÓéÖ¡›VL³o³N·2HPÛ=É=>•òQ£{%}bsŒo)KO&AmÜ "Ê7q.0?ÝÇõ«r¤’fYθíY7ŠÒêðÇ}q*îfÆÆXöÍ^×¢ªÜÜG "ÄñÇýæLΰu]Nû@´›Qþß²žKh™^6ebqÛ¹9ük+µ_ê)q{húŽœ’UTˆ÷23뎵ßO-拨¬Òßu¯mO2¦.ÒT_2rÛDì»»juwZ¥š8ó®Tƒò·õ¤k«kˆÃEu8!ç y5­x£Ã¶·6ðǤG=ü‘nû:Aº(îAõWJøÅáÖ‘ôùŒZhBȱí#9ÎO+9Âð¦ÿ 9éB|µ*Ç_U¯«Ó\é\¨aŽC'—'${ Öt—‘Ú0MRíÃeoϦs\w„üU>¥ãCq£Þ[ÍeæÿÖ‚\sÁŒ¶qšÞñÖ¡¬Íqg.›¦…9%šœ“ÓýnkYeþʤiK[¯=<¿¤Dq/JU ­gn–~zôù£ZïM6Ñæu ýÖRcßo5\@–È’ ¨V7Èe‘™?ŸZóëÿŠ·¾¿]2Z;øÚ¹­$Òä¹Ó’{)¥2ˆ•üs|ðž©v«é~CŒî˜ ã…yæ¥Õüe¦ÛÏ,¾»ÔfwE’5†áÞ93Ùó§§h©¬š‹¤âüõ_yá_5EUIvWM|ºÒg´¹Y ŽâT<0‡ýõŸÒª\Ý[%á[7Y%$‰XOû›«(Ñ î£+Itwÿ†%áñ^ï´‡<Ý$´ôÜм´ŠÜñ#ñЂj¹1Èp Üݳִ™lïÆíKÃ>*†cŒ•´“oþ:ƸÝvöïMÕ¥k bÚ×î ¸·}Þä’8­°”)×÷:ùÚߙǘá«aš«ö;F÷üQÖ¼w.­tÓ]ºîoټVûõÄÍâ,³Õ{ÇztºUµ¾‡¦­¼ë9w‘û•ç ?õÕ"…£éù‹›©yJZþg¥ü2ŠÛÅšÛ¦´$kuŒ”Á!Kö GNÿZê|KàÛ„ÓXè—ñÚ@±ü»­c™qÔ[·½|Ô|[%¤…íçxÛÊ9ô­Ÿ~њυ´¹lÄ–÷ö®ÁÄw¨eUç'©ÉМW3)ÄUŸ=)üG˜aèÃÙՇϩìkðþïQÒMÄš†u(4ië¶3ýÒ¡°OדPðÝÒø\Ácssiz²+‰~Åä þåûóœ×•øëÇ:Ž­6· ºéV÷{\ߙ˅6ûp3Œ€y¯Kð·‹|yâBxå¿ð¥æ—g•¹¹Šdó3þ­J09údcÔ×#[ïíbí¯§–Ö=*(bU½”“zi×Î÷¹Îjß|Ká¹®cºÖt¢cOž9Ÿ,½y”6O>ÕÑ|#øŒþ?ðì–…ΓwªB¥¢ŠQ¸´c©eÇbGNÕäþ%øc¬|@ñÕɸ×tY5 ÉN"Š)T:*©¯j»£|ñ€|Kkq£kòé·Ø!¬\G'®wüËŽ¹®ÚÔpU(r¹ÅTÑèžÿvÇã(×çP“‚ÓWÓïÜôŸh~%ñlði>&“BŽÖy Ä-Äê>Pq»§ojáüOð¦ÎÂá¬ìüK¦Mæ¥gúîRqß5ÀüJý¤¼àŸ^èwÞ ¶¸¹‹÷LÖÖ±‚wŒŒ¹V‡CÇ¿ ÿk}+á§ÃÙ¬¼M£_^kŸj‘Œ‘HÈidnY·ŽEo‡Àc°´”é4Óµ”zß®«b18Œ.£X´ú¹t·Ef%§Æ{át÷š}…ÂÆ¦O$ˆH¡†FWpã¯QT4_ˆÓ|Bñ¥…¿‹õél#”˜–äå–sŒ‚ÜdñŸ¥y‹>&^x§XžûZŸÌžv,FNÔÉûª;žaÏâ’߯«†]œœR›Z´ºŸ5:ÓºÛ‚z&ݬ}§®~Ë XDtÌ›rò½ÙMÇÔ.Â~µ…à=:ßá§Œ-­.¼Oooq¨\›VÜÇ,2:õRp ¶r??ZùÏCý£üoaàÙô¿ jz™Ó£“Íw‰K´ÐI‚TƒŒŠ‹à¼7$_á­/Vð;ÿ£Ë»;¤ óIä󎦼—–ã#JªÄUæŠè•Ûù?ÈõV'êSt)rË»vKîüÏ­¾*ø'ZÕ5Ä–ËG‡p,–ׯÜÉž ?+}:cšóÏ |ñ’x²×RÐ4Ä„Å0µÞ¡± “¸I…Ý´àŽ™æ§ø­ûjè? ÅÅ—„5µñÔE e ¼—Þ`«®x$§zò‡ÿðP¿ø#Y•õ =?PÒålý/”ѯ<,€ry°==ëÎÀàóIa߲е´NêëÑþ§£Œ«–ûdê]»îµ³õG¯ø‹Ãž6¼{ý3ÄZo†í¢»˜L×IsäÉ)ŒOåð¿w—çÓ­Y·ø(të8üAâ«»oOAç²µâM¯®ðÃ#ÓŸJÌøAñµls¥x¶òÖÍŒ2í³…8^¤4Øäc ¹AàZÿí9«x#CÖ|à­K힊îE‚i™QAÁT'¤yãO§Õ…Ãã«JXxµÆÜÊÚYétûéÓï9±/«Ê.Qw³¾·ZíÛ^¿qôG‡þ4ü8°ñ`‹@Үˢk›[vdD#œíù±Ï<_jËñßíá= ¯ è×R]½â±’hž¨1»i'q§­|}ÄK»kÆžÚîužQ†pçsgÞøJ¾Çˆží’_å!óFü+ÜPSSœ¤ôêÛ¹äË8¯ÈáÅz$¬}wgñXøú“ÜøZK{K !šÞ)–)Û'‡ÁS—#¯$WM/ì¿¢ÝÛ$ö¥üQ ìfŠ@¹ç,20?ùá—Ä_øBÖíµk¹u ‰6 A+Û¬êyea‚^~c·Û5£ñãµM×ÂvzÌ;dÆ—ª9_ºXço®1œWL"_g„r„/Ò?Þ¾§L*ЩOÚbÔg?7ùi¡ôÿìy|,DþÔ-µ ødY&h7ɇë\t¿›öfñ[Zj:|ðß4a¦·[ôž)9àç©ÆzÿõëÊ>þÝ~'øW§ÝXFßÚ¶Nì±^ÈYíXŽ>|n`8ùIÇÒ¼ÏÅo|câ­O_¸ÝÞHe€B‚yÂŒª;ÕÙƒÊqµjNž>jTºyüº[þåÅc0t¡ ˜|µ?/ëþúâOí_{ã«ÈŽŸÓá„`m#Ì'=wœvçÊÛ|V{¥{N>s!ÞsÜ‚y¯OŸï‘R'ŠyÈ×»C+Ãáà©ÓŠHð«â1‰ûJ’mžÉoñˆ]50Äàìtb>˜¥Ó~ Ok&Äžê;yNcb7§CY_³/Ä¿ Ùx¼X|I±Ó¦µ¼Rêåwy-Øtà÷KÿŒ¿-šæÎilÒQÉ‚i0ǸESÏ^£ßë^N;,WF8iK®›ø<ª8ªj¬«Æ/ÏsÎ|ñÒûÀ~!ŽóNš]Ñä2;6¡—8?}áÚsÃ^-ðø¸¾Ö¿³nËûSî=ʾ~ø£eðÖ÷DŸXÐ5[³“ˆ– Å“qéŒ>{ñÅxcø¦3!6ìásÆìúW<ò¬/ETp”$´z[åætÒÆb²:q”g­¯øŸmZþÓ ËÁcq§jp IœFÜú:~¹íSh_´M®½{<#±€ $pJ²™WýâFå_!èóhúâ ‡V–Òf8hæŒÝAãŠô¿þÌš×´ÅÔ<¯YM?yÁRL×+$˰±~Ö\¾m?ÓC³šæ8™/go$×ë©éZň´/6¥w£iWi'Þ·h±ûªôü+›ñO‹âÕõ{‰ìbŠÖ”Š1´ ôëYK¡k‚–±ÒõYÀêRÎF¢Öo‰aÔ´‰—þ;;»7q…ÀaÜ  TÓ§INñßmΙ)¸Ù­= W:çRN*”ºó#G!”äÚ°îµ2zœÕ ­Tóƒ]Š(çpgeâ_Šz¯ˆž&ñ6«{<—•¶*á Âöô¯§ü/ñãá߀|/kw¥x‡J‡L¾„FúdCæ‚Uå›n7ç0p1šøjïTÚOÌk6çXäqë\xܪ–:1ƒm%Ñ[_ë¹Û…ÆÔÂIÍ+·ÕŸa|]ý¹ÔäáÚI é†3æÚ×rPÎ6`óœ×Î÷Z¾O-Ÿ­g^k=sO ’`ðî2ä»]^¿OM_3ÅWRNVO¢þ®{_ÁMOáÍÜßÇ-OQûdjfŠˆ“i;ÁùÙ³÷O'½?á_„þþÐ?µ+ kJêí`o íãs§–NÇ_zøÎçY<äÕ&×崗̳šXœdnG*Ãñ5ÕˆËå]ÊP«(·¶º/DcC©r©S‹K}5g¤|z“@ðçÄý[Oøeq-Εe)…erN÷>Üó´¨Ï\VÿÀÙ·ÄaTÒ.­ôí5âñ‡›µÔò6ŽãÓóáSëq²±¸gWÃãÍÛ ôõí?±ím«|ñTú4vÇWÓ5xåh,LñÀ¦ðªˆØÉ!©ۂ?6y­qCÖÞinú÷ò¹ž¸„ë+E¾£>%|[·ý—>ù݆“«Ï2Qü¡ç B±‹;œgï|¾ñoÄ+Ÿëw†¬Ñ îX»,I²4öUìjö/Œ³ÅŸ/¾ñO‹†Ÿss|T„‚LGn¸ùcŒ €‹ë“““Þ¹¯ø`¶‘ö™~Ä%'˜Ã1=Kã€Ç•UÁà!Ï:±u%»¹Ù¥ˆÅÊѦùÈò‰|A€ßýjÖð…uŸŠ¬ö^ µk˘!3´a‚’ ààžüÕOŠVÎ99+Ìü;ãÍ?Ac{Û#ÔbmÑ ØÐÈ;«‚1´û—Æ^/Ó>1øæïTñŸ‹M›_©™¼ËyV®8òÕ0It=zÖn•áO5¬k>/$Msä0‚߈Ç]ç'pãÛƒÅcBQ§í¯Ì÷²wæiR›œ—³Ùmv¾óë_Ùcâ¿ÃÿQâø×HÒôßÛ4Ạp¹žAàcŠõï‰_²‹av[k[uA2±àÐäúzüëÔ>-i~Ò5=ÚÞ vÜÜù–ú™&)†Þ˜`¨È«V¶÷Ä­6Dû/‹u ÂK0 ·Éɯ’bjÕö¸Zœ«³oðëòg©C2£NŸ³¯gÝ[ñÿ€}Ëaû0 i¡‡_ŸÂwv×MåÛ‹›@ÆaŒä:‘“Œôæ·.?d{m'OvðäzE å›ì™B?9Å~lêÿ´O‹õíBÚçXñ&©pöR,°+Íû¸™zŸwô¯z¶ÿ‚•Ϭèzd~7Žýî ‡eÄ–$Ç™GåÆå<}kŸ’æ0Qp«ÍÞßÖ¦ô3ÛR§n×>‰»øc∗Lñ…ׇRIÆó ü1Çtv3”*ÊObkÊþ)þÁSiÒÉ/ÃÛèncÁe'óc¯^qø×ÉŸ¾+/üKq{göÕiœî–{ÉfyFIÞÍÏLñ^Ùû(xÏÆŸã¶ÓS’×LÓãdµ¸òùBOEeä°ëódWjÁc2Ê~Þ‹.©­?6rJ¾?e*:ôiÿÀGŸxÇÃZßÃkóˆa{w P0éÇ­b®¼Ò’AÉë_[|EýœµoèæÏÇZ¤·j˜άD­î݉ü+ÉüIûÅej[FÕ/7Ç÷÷ÆW«„â<<â•Y{ÞIØó±XË÷qÓñ¢¹9d¹´›eÄr+ôÆÞ¿J÷hã)×W„“<Џ9Òvœl}/û5i¿|s!‹ÇòEk|ͱ"k¢ÿ´7p~•ôPý†ü+âŸÃ­¡€Û¹SÿV¯Î}qnÊæ9P©6Ò0{kºøwûJx×Àž#¶Ô´-oT¸’ÐåÏ3ÍAü%Xœ¥x9žW‹¯7W ‰qòoO‘ë`q˜z1TñóKSîû$Má{cŽ— Äkœ($SŸgÿ­¥ø;Çÿ ®_xrU…›2Çn…Or#r3ïŠå~ÿÁW­¦‚Öˆz& 'mšX¸C¼Œ•'¶2+¥×ਫ਼kÉlô-;Qšåc–LGo1ÀÂî#zžH9A‚;×ÈTÂæüÎiswê¿3é![-QR§>_Ïò>êI×EY/,ŸîÆI_Ã¥pß´–á»?†—ïñšâÎXš&håÍà ݶ&oBqø×ʺ§üâeÂܤz¦™˜Sœ¡Ïtbsô'5ä?>(ëßµy/¼y«_j·.Û³<¤¤|cåAÀá@ãàø{‘Y¤—mÿ$zX¬âŒ ã6ß}ˆnµû•Œv,TÌYwÌXˆøÂc¦züߥbøƒZ†ïP™ô«±Û³~î/0ÈQ{eÞ>§¥Rº» ’ç¥}[ðþ ݧëÿáñ7Æ«ë¨ Ä?kK(ˆT‚,nÌÔ¼à` úÌV:Ž*uŸ’êÙàað•1o–š>VÒôKß<ƒODXâžY¤BƒÝÛ >™®nú𤌥ÚHÊœƒô>•ÝüqøÇa¯]^h  þÏð\r£[BbÙ-ÞÁ,½ù$½¸ïÓʯ/<×u “šæ’µúuù˜T§»-Inõ<3Y×:–s“Ç­V¼½ÀêsUmÕo<öžxb[tó6;açä ‰Ç-Î~€šèç±"luÖ¨{ƺ/|ñ7Ä u¹Ó->Í`ûȺ¹qghËmå¿\Ň‹¬ô}Næk"ÒòÞt(–ó;0‡$r¯×8gÞ«xßâ•ïŒ4ý>Òx­lìôÈÞ8!¶RªNrI=_J™T¨ô†žl¸Ó‚ÖEÛÍZð\‰©ËhV;VW6Éd•RÀ0N@õ®Xø‚{{Õ¹†gŽâ9«"œ2¸9 ïžj ñŬñZO$q\ H€ü²c8Èèq“Lšúƒà7ìá$ñ/ƒïd–[Ky#½7‹òÛ\åvg'®Aî:Tb1ÂGš¯].‘T°Ò®íLó¯ ~ßß¼£®ý½ý§d²‰v^DÆ3ò Óž‡=? öOÙÛþ ¿.¬5Æ>$²»‘.í Ùn `™‰;@ ’ û§¹Å|K®7öv§so©2Á+Ä$L…}¤ŒŒö8¬Ù¯y<⳯•á11jTÖ½V…ÒÆb(4ÔÞϺÿoŸÛá/Äß /‡ªþ"Ô/7Á­ÒÔŒŒ±ep1Èç¥|?>§‡&2BöÏZË–øç–ªÏ}ÏS[à0ËéªTÛkÌÏZX¹óÉ+ù¯©8-R\x–gÒ£µ—g“™¼±»'ŒnëŽ:V-¶­¼¥§fR¤Ýc]ÿƒ>,økKŽéu»–*ÚÇn%ó?1Ç容ÖqWQ¹„i)=]Ž1µ.Ù¤:‡ûUcƾ4Óµ]l¿‡lŒV! ”Ç“†èqƹ£xCeN+hVrWfr¤“±¶Ú‡©£íÀôjÄ7çA¤‰#šÕT»2tΟH¼´–ᆭs%°ÆREÌú2õǽ}ûþÔ:ÃßXi~4·™í¦–;cØáRXáåä98>õògÛêHuw€“²nNQèkŸ††6M™­ ²ÃMN'î%ÿ†´ÏhËqg›ˆe@ÂH_ÌŒŒׯZóíkáí…ÔÒ-¦ªm¤a“–@?_*ÿÁ8?à ?Ãý2ü[¹þΈ´i«ÜL«màˆd•ïƒÓŽq_R|mø¥¢ >¯¦kºq –YÓmȳrÇ/ð„:”VÌ¥îa€99ùIg߬ÿ Á@¾kösÇão *þÎ2Æ+»ó'¯–Øä÷ǽkŠ©iJ ú;œnž’rKÕXâ¡€ßݤ"h ó<ÉŸb/¹=…[Ñüîµ kº¾kb3$÷ï*ˆ:Ž;‰à:‘Ú±o¤ëƒY7’ðq^“nZ'c…E-Z,øÝôûoßGáfyt䘋y·3(ïŸsžÕÚÞþÜßÂY<šµºi’ÀÖ’L-—íOüÎÃ6;×–_ÍÖ±ï'ÎrM¡Nª´IÛ¸Bs¦ÛƒµûÝÜ02ô¬Û‰žw ³»$“À©/.1_JÁ2þxSâÿ.¯j“iɯZýŽï`+œ†\ý×€Ã×ßÿðPŸ[ø?àªÚŠ"%ò‹HÚÄŒîzíÆrkóâçÒ¾·.ż‡5X¯ó<ô¢ãžµ|×ÜžSIo¯Z•/:dò:VP¸æœ·'µhª™ºg©þÏ¿´Ç‰?fÿ®©à „doõös³}žä´ƒž:Žkô›àí³§üqøi¦j“Égi«L¥n¬a¸ó~Ë(à®ÍÏQ‘Ð×ä\Š$x,¹äŠè|3PÞ‰ìõ -n Ä‘Jc’!ž¡†=ºò3Lª†aïËIwýè`qÕpžêÖ=Ù­hÞ9´œJÐ9L :õæ_dý7Å6òNúm¥Ô`v Þ¾üs_ŸVŸoÞ «k‘O¸Â.†ÝÎ>ðÏ99ë_zþÇ_Äß ½½Ö¤&ºµ “f]Îä½CŠù|V][+J­9éèÑíÐÅÓÇ>IÇSË/[$ÖEëòkVøáš±¯ßó^‚•Î7*þLdÖ5äy­-B_˜Ö-üÛTšÚ2º3qÔÎÔ&<óÅ\ø_ñgUø+ñKñ?‚¦0ê:T¾bó…•Ocª°àð¬›ÉK“LðÆ‰¼_¦é×—ÚÛ„ŠIˆÈ‰Iå°«›Œ¢Ô¶š’åÜý•ýÿi8?jÿ€úˆà¶û ¬öÚ…§˜$̇ƒÝ[ï ààŒŠ‹â¦ƒ¦ÎmàI%Ï`*Çì§ðÃ_ <¿Ã !mes;J¬H¹`¸.}Ï­uzþ€·úeRªqœ f¿1«(S¯/e¤o¡ö”ÔåIsî|õ©hw äl±”$ýàr]•¯‚ÓV²¶’8fnÇ–ÞºŸˆzàÍ ïXÕÝ’Œ­ƒ’qØg¹8÷¯–>/ÁNçýœüQiaâÍ¥´ÕlüاŒ‡6RnQó¨ä¨ sƒœ®æ»(Ò«‹ÒŠ»0©:xèyÏüSÃÒè t/¶OµÚùv‚°Úq‘œwÍ~o\ÜsÞ½ûöêý»µŸÚßÅTµðÝœŠÖy{dr ·s“UeŸ'šlÓUg—'­z|çW%’bSUäŸÞ™,ØúUyfùîKD9Ï$SL÷ªòMïQ§­51r–YñÓô¦sЬ×'½3í?Þ5JBä.yÞ§4Ö—wN*¡¸àíÎ~´Ãp}_1.-ùÛ4 ¼uª‚çŽÜÒsÓ¥Z•ɵËëw‘ɧ zÎàðM=g=Îj®Ñ.&€¸§ zÏõ§‹zµ6ˆq4àõ§¬»†sYëqŽôñp}Ej§rMœŽâº/|YñÃML]ø#T»Ó®*Z'ûÀö#¸®AnˆûÜÓã¹ß,Õ¤®‰W‹º?E5Ã7QÍ`êM‚Nx­ÝT/Zçu9€Ýœñ_ŸSè\lcj|äV§7$v­]B\æ¶< û;xßâìŸñAøwQ¾—p˜FV6¦ðsíZûHÁ^NÈ•7d8½›ëW|u«xKT´ñE†“-õ†™t‹+Énd·’?v݉=õÅ}ëû,ÿÁ á›LþÑý¨P=ÁpñiÖ³¡qÈ•ÇSžÃõ¯oø«û.h¾ð®ð×ö)¥Bw-’þíAQÁÏ®{ûו_=éû({ÝßCºžYUÇžZ~gqû:|I³ñ÷ý%ô;¥ïµŠã줂 ¡ŒyîTžqÒ»U<²»<ä¾ ø^/xRÆ3l-nbŒ,¨§p`|§¸ô®»Xx™PpF8àׯV·´|»CNü‹˜ø‡þ û]ëŸ mî4O h«ªÆ|¶‘åsó8l•ß)Ϩ<_˜ß¾1xŸâ‡ˆ$›âò‰[|mH‰þêö¯Ùÿ‹ t­_]óuÛ4ž6R )¸©ú×ç/üö_±ðç‹`×ü2 ªê!‘¢UÊ| `àtà{æ¾·$ÄÑ…©¨ëÜðó5å};Í1$’jœòÔ×2ryÏáT'–¾²ú\ñ\n‚i?:­#úšl³T/)ÆMÄØY%ªòÉšIeªÒÏŽ†‹‹”t’àõ¨žZ忢y=jÓ‰nzÓZLr DÓc¥#d b¬ô8ãó«R(ó7<“G»½@N{Æ›æœU§rZ,y¸ëüèóýÿZ®$ô…Ïj¤ìE‹^w½o¹ª¾g¸®¿á¿Â»¯ˆŸò d6ÖAÔZr¨ ®Ø(s;#œý)Ë)º|Ö|+¨=½Ìe™Oõ®ZóO¹Ó™…ìOSƒžÔáZ3Ù“*n;¢Qq‘×ó§‹ïU&b­‰2½lt&¶½ÌÜM¸õ§¬ßZÎsÖ¤YñÞ©JÛ™¸Ÿ¥z»»'½rú¼¸-ï]·/^{×)«Ë†a_!ß‘“záöƹ=õ'Ò¿`?b¯ Ç¢~ÏÞûA‚I¢01Ååª)^zzó_—Ÿ³×ÃÅñ¯´Éïí¥Ôìc¿†ÚæÚÞ&–HÖF %‘W¤j̹>þÕûðûÃòx_@†ÊXâ-ÔF‹Â…Šùî!®¹#Mzž¦SMó9›‚>èàVMýºÝ7ï—#“Ú¶&É_“¿zÃñtE01AŸ˜ú ùˆjÏnEkhà±…»F›nI«Ðíµ,N@X'K¸ŠÕç¹—…mÈBàãñ­M V[¶xüÄ/å 0ÏÔZIu!3ˆñ½„·¶2ù!K™óGí!ðê Cúÿ‰­b½û-»Qù@ÿJû[ÒÑ­Üž8ã5óíY£êÄé¾MÌÒdÁ.s…ÏŽkÐÀÔ|É'c›wSò³âßì¡}áßÝkšlᢈ&ŒØ$ðÔ+õM6çNŠ7½†HÒl”b8luÅ~žê>†iÿ°õ[)>Ç7ï·•ÊÈtú×Ë¿µ/ìÕªj jvp¤+k$’[ÅýèÈÎßLýÚûL.?›Ý›>z¶Êñ>OšJæÿ ’|ÄÌ%Yx ŽAô"©NûO¿ò¯U;èqn:Y{gš­+ÒI'&£¸*òßxÆOÁô¦¥bl#½DÎM#ÉÍ4¿yªR¸Ò/[j6æÀÁ¼yyhÊœžÇÚ¦>0)¡­£C…ƒ,1Œž1jÆç¡¨Y±õ¦­Ô!“>¦“}D\šBsÖ´L›\ÈW«ÎÜ7r)„ã–¦ÏZ´ÈjÆŽg&­x#¶Bí‘Àú××±ÿÁé­uDº å:˜¤yM|£ð×[‹Bñe´×ÅV$±nƒ?Ò¿I?eØíü]á­?TÓDrA4cËu£ú×—šW•8[¡Ùƒ¦§+—üqû>Úø‚ç’ÝeA†QÐ×Ë_?g©´ ZH-Ë&Hn9¿Iìü6§EX^>ÝÇ_ƼÏã¨u]:qs`ààÍxLÂT¥¾‡§[¦®Ë/øçHe•rF6íÆ®Y‹FÅdaÔ¢¾Âø»ð¶Õ£òðé‘÷Zù»â€ÚÍžt7RFûÀWÖa1ªª³D8;L RGBUniwersalny profil RGBdescGeneric RGB ProfileGeneric RGB ProfileXYZ Zu¬s4XYZ óRÏXYZ tM=îÐXYZ (Ÿ¸6curvÍtextCopyright 2007 Apple Inc., all rights reserved.sf32 BÞÿÿó&’ý‘ÿÿû¢ÿÿý£ÜÀlÿá€ExifMM*JR(‡iZ;ø];ø]  ÿÛC      ÿÛC  ÿÀ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?üë—PÛÃyL2 °ÊŸL޵¨mŠêgÛ½à¢ýæãwô­ ëSç$¯Ý%½{ ʸE:†áuþƒèAé׊ô÷>b$žcÞ¬ÓÆ_wÞˆöÏ9Ç=óR˜!» &ža`ÿ~<åøö=ýéº}ä¦9Zè«;ä) †üÇ_Æ©êÍk/™k”žz‚:çúÔ¸ö.æ”s£X‘;(;Ht ñO^¼S’Ú ±oÈÂEù·${3ìGsî*¶ª Ëô·E¸˜€£æÉöúT«'“qå mÀ€BEN¨fÌ´ö#›³Øñ׿ó«̺“µ‚ÛÃ#ŒâNqȨ¡a4q,ëæ·FäŒuç¯Þž±½¬jÌÙ‰9 Ü c’9<Ô¸ö%;™Ú†™%ÀT–2¹ùÆõaÐà†p}) Ðf´½Uu`ç9·Q׃׵oÙ_—œ™wÈ»r˜ã>½ºÔn;‰|ñƒŒáFäòONZ›”¥Ð™töm‹²¼)#9?ÞïTãðŠ]K"ß £Ú¸WGà.yܽý«KJÔ¡o‘·FÀäŸóŠÔ7q¶#´Â³I^:T=™£>ÞÚ;;!aR ·œðôÆ=º×Oä¢Åå¬jcUÎãœ`þ¿aÃe-̦9ÕX@àþØiÓ$ZzáT•ÇQI¢&ì`Z¶˜NÊáÚŠ2=kAõï±¢5Ó8ù<ïSßo庰Ø:©Ú>•«h«w Œ©•S‚1Ÿ§ó¤Õk¹bâh|÷¸hÿz%FîþÕÇø¢!w«Æ`ÜÎxüGÿZ¯Gç‹_³[Àªì~l.FzÖ[ÌÒݨº‰7 _O^¦š.(Õð¬v±ÉåÏ+&õÝ“Ð`ÿÕ¤%² 'bq×ôâ¹½= J»Qg§&¶†º‚ЋWQŒüÄN•2e©BòàÅ1L`9ÃÔ~5JÂå´öÜrÂRr¹'¶â¶|„[E™Ô;?ÌN2r~½+3Udû10¶§ È>¸ëE1ú–¼4»ekuŠr¹älÒxN­PÉ5Â:-Ë™®26Ž0£´œz¡ó4eÚ¤hO˜»°O'ééô÷¦ËÞ6Œ`1L|U·Ó—–³$H¼ŽÅºûñU§K5ƒÝ£ÃPÜ} éQf4îOoe6—*É4°Ê’±9ù8èOëZ¶·âÐ-Ðý☣ž9ôÍfEªCpªÎåHã!FA#bîôZZ=å- [¦Æþu-ô5Û@û.ÜuÉë“ùzÒéÖy AǯJDzñK%ÔvÞbll²Þ½;•z[øÐùÖÄ©„µ9WNOR}¿J—Ù—5"ÆÍ[if¸çÿ­ÍiéºÃ¥œ+.ÅYOCúÕdMA Y¾YX÷ãÿ­Yóëm­á‘ñ–@ÝüʢµÎÂ퀀H˜ýâàdàåT V¸+±ýÆù@ oïÏ­gh«jú{Å#á¡1 3SÔßOU >æ6‘É?ZV¸’6SHh¬çžUŒàv\r8ëí\]òHø/Ð\¶HÚŠ]CâTÐÛù ¹[Ÿ”’ø#è=r1QèÞ!MZÉío#Rìw†s˜ÿ>´ÔXÒ±ÒG©Ç2—‚'våäÔ ÉÕ.·@²Àá•·žs­a˪—¾’+Y‹;9l!!PôQT/[{uFfIª½‚zŽ:|¶)Díü)ª>¹1Ì\Eò¯Ëzÿ‘F¿¦D·»ç‡aþ«œÐõ¼=c²Û&í­Ç_è+kEÖ×W–Q2p‡ F3ÚŸ+Z‰­M;)Ý--Z5C¸ã’G\šÃÔ¼B—GìÈLŠ[ªô\^Ÿ…;XÕ³´I9!¡Vä@þF¸£®,PÂaY]IÈUQ†õúÞÔÔJŒnjxƒ^¸:ŠFê›r±à©Ï\ðWðëÇ­2Æð]8 5_,ÁIÀõ¸ªZv¨×ú‘[€¯#ƒò Â¯ãÔýkwKð²ZÊ÷×ñ,{QX‚#<äiا¦…cNWÔ,š<,HlŒóžœzÿZÔšh»*à)cüÏùíXzƽåà—‰Šäžïþ5¯¦ËæÚ™<ÌGÑW¥>S7¡RÓÀq­ÓÞ]¼ˆë€ sÓ“Ç­_´øwm#¾>\¯ÊG;9É#>ç>µxkpÛi²¥Æp>Q³î¯ãY‘^jW¬åf—ç;–8Ða@ãæ=¿ÆŸ+%É&? ^2#\Íƒ× qþqMFòèÜDÏ >YÂí»ôâ–vg…-.C+ ÌO9׿_Â[SHcd•\ ½y?ST¢MÙçIåï"qœcgô¥Ó/ßO»`ÒHS$Üà}FqPÙ–æß4HŠB±|óèôª×úLöϾyƒuH$ŽsÇzë·‘*Û6k]xž}>Dctc”ܻD޵ièþ ƒS…á/ó¨'cHúd~¹®5ü˧‰™˜sÐg#=F:íSÚÃ’YÖLr„0Ç‘ƒœúþ%r«ÒÙ´nžFÒàaL`{‡ò­Am$J†3’1h#ОÕÄ[ê“hÖŠm®Kà‚AÏaÁÎGåZÛ´ñD÷‘‘ŒR)Î1ØãÔ~•Ÿ#[fÍØ®ài€òäŠBv²݃ëœÔZ¢°y2ñ²üÀÇ€§þëô8¬éµ„šE%G|d¯!~ ŒŒÕ¥[‰bºXZ2S¬yÇqþqKQê·+y±]]m‘6ïõŸtŸËúU÷±–$œ8e%†IëŠÄ´¬˜‹Èe<óµF#ç©ølè—VÒãcB{âF±Ç|žÔ¬¤hÚès÷þYoã¹ß,ocåõïZÞ¾s¦ÝÅpR±Ì;É%†1ÐðFsÅmêPÚË ,¬"C»$Ž"¹ÍgD›N„¾›*Ø]0TöëÁúÔò”΋H¶Aa7Œ4h âEôõìJ."ŠÅ$šÖGƒp .y# öϧֹíçQ"8îaŒÂ͸±^ÂHý+BóWV¼dÔ`fGÆÇàäÐSÊUÎ[Å~.¾·Ömf±ÙUC89?NÿDž1½“Pcª,$ åNT¶FsŽÿNkOP³·Ö.n­ÂìmˆÙ @Ï9ÅWû5¼R˜œm *0QA’z¥UÉZÖ.è–p\irJË4²4ÿ}†dôÓ§^•B A!ÕåXÕÏ—¼²ò0Hü±õ­bM;,oÇÊß6 tÏJÈÕ.,Ò+‰ SçH~bob)(Ü”Ðß_\Ü–r0gF ’HÏnù¨Úsh’‰^@\£ tǯj«.¥y¥Ä|˜Sþ4ëv?Z°”ùR 9Úùþ¸íMBÛXÔÓ|BúÕ¼¿Ùè!EbFìÌ=NÕj^æÙdžÁ›Î,b ÿ_zç›OŠÂb¶Såçq=O+_Mñ6Vq„Pãå!8Î;QÊÈÞÖm¥…öܱR üÙ>œû×/¨XþýäfFÊôÇ\rk]õ/=ZäòH ¾sŒtÆOZ“ÃöqL'–åãºÄeÈecciüãB]ÄŠ¾Ñ›N¿-z¢9%$…Îì¨ïžß…uZ•ËChŒ|§9ÇϦª‘N’HU¤T*3Æ=zRMpd%’f§, >¿ÌÆšˆžº³Z×Ö×P4—NÎKäDŸ!'©ÍW´­çxâ¸ù •cbËÉéžÿ•WÓµ¨ìà?oW§lÈ!àyúÖ¬Û±]³Û´™ló÷A`õéØÛ-Vkï5¼1PÃxRrêxzæ»;_&ÙÞ(P.›ž¸ë›±Ötýð4H’–ÆçCãºõö§ëŸb´¥±DbçgιÝîGoΛèDµcu^kén/qn»@P¹>Ã=ýkš¸Õò6bŽŽæÚzýIïÅU»×SV=Û¤jžëÏù_AôŽ–ËæmºÌr?Ê2:ï ~U-3X;¢Ñ¿“W–Ö(ÙÙ•ù7{òqœñš·&¢–ò¹2ƒ åÝ÷ÎSüê’ÛýŒ¼[&R<1o霚œéŸÚd<‰1ÙÀbÃÆH>œt¨qE›-AmlžK'[†s‚ `Ûo=~µ³e¯“Úݲ'HÊ`œz~••áûe·Ô.ÑË¡9,Ä.=Çž•Òi–‹ö§,£hrUŸ ö]ÝAéYJ:ƒ’°Ó²òh¥Xúò@]øôõ«¶×/2i­ÒE$ëÆ>¿¯¢-’ÖÞaiW“‚6î9Çl~<ÔÚm”W;ê(“`æãÌÈÏJ—nŒœ“WESn°[½ØåˆÙµ¯8ÅT×,LvY·ÃÇ!ùW# Ç8t­=JÄ-üs"FWGÈëÀàÖ<š<÷ÆðÍnä) + È<ÓäO©1ªÓm|ú}‹*G˜ØU˜ðOlúS¼›mBÙ£¸ÆBP¹=A^Ýj)ä’Í@Ô!bH æFÄgü8¬-v{¡+Ð0 §Ëù˜Œœ“ŠŽS®2æCõt‚Ù%Áƒ¼¦Hç¸à{u®~ë\h$”ìåHÜrWÓŠ·qm"ǘdhÙÏ—’wäzœÿúë/Å7Ú°«Hàe÷q’­Z‚&ãeÕn.!ón& –ÃxôàzTQ”‘?zX)—;½ªª]¼’æH« 9©Úâ[’«$Jm€åJîïëO”iØVÙwmÎ_NN* (^K*Û³dH0O G^x¨O™i©G$\K2ªð=óŸóššOÇjÁL8w]Ù'å99ã(ä4»èC#Gš¤ÞH$ôÇ þtë}V;th-ɉpq“Ò§Ô;éÜÆ63|ÇË}:ÿ.k8‰ef‰ ‡…ùz1õÅW%ÆÑÖC{™a-‰¨ 1ȹàûTÚGŒ®oíÙE¼26Eù¸ôúÿ“\ÆfUDR3§ñý†AßéW¯­gûbQxAûÉe¯ÕÉêjyP¬¶6šæ9d)ò vަµt»Híí¤*@rÝö9 Ù 61€£ß?ãZþ ­ïmWM–w¹”Â,ËÛ•éòk*K’æT¼†Ø89c½Î¸ÁjÄÃQçß0ŒdqÇáYÒ^Írd/"g{2ÆqŒ ôÿõÕé´(ͱ{©¨žàäý:ñÒ­ZØÙ[Âp. 1´è÷5j=ˆºEk²ÝjG͵b0 v9íÇ3Vîn2XCÝ’C7°lïÆ*{©ì­mö@ï·<±ÈÆF8_onµVY”Æ̬ rÒÌáú)ç>Þ*Ô æ¹«>¡ˆ$ÅÌðDÊII®!òŸ§FÚH?çéNÓn¥>f­W1î²Ã2¸LàòáÞ¶l|/áŸ:Ǧê1ÛÛUgeFryÀ ¯ø$zU}wáyÒaŠ]Dàe·–^˜ÈʘÎOn¸õ®›kcºœî§®Å߸TÉy‰Cg×pÇ8ôªROý· ¶Ü”rqíëZsiPL寡šmw.áØdúÕyô…KÛÂR<ä„%‚ãØò?¯fÒ3S[i%³< <«.¿EœWEá½·Q¤q%¹( vöUÙÚ&>g?yŽïijÛ@Êö/€hÀìžzVr¤_´æÜêmôëXí’v^:‘žœõÀ%¼®^ŽdPKZN: r bÝë³ÜÇÆå¯Î‹q9þ"½ys@)t»¼ù"ea´¬·úŠç” IØè^Æ+ȤóX;E…#aÞƒÞ>µ‘}mv"óì#Ë`1ü]?J»D-ŒŠæY$ÏŠö¹ôÇñ-²A"]nxãÜÆ0P‘þ4£fôDšv¥}{6¤‘#B =:†[æW-{v”*yük3þ‹[ˆYˆ\màÿÏb;Ô:ž¸Ô:»í\-Æ?:¯ec+¶XŸÄý Ç4s@3‚ÄeH÷çŽMSšÅ'{ ÈäqÑrqùšÇÔ|CåÇ™Uä#çQµBã?‰<Ôqx±gˆG/Ù…o^O—'ct¥±¥DŠó•ö硇nqï\®¿§‹‰¡› q¿#5jóV–@åo—ƒŽ€óÞ±n¯ÜN¡òˆÆìýﯥZ¦nå«_-cÄGj‘–8ãÛ¯Ö›=¬o3ºí;—#çÓŽ•:©yR]ÄAôÕ&J«­‡iZ»x¡P~L°-Œc$‘ÇQïVl’¾ûh'›oÊ­ïÃ7ËúÖZ2# †9䘜×Wg¦ËkûèÙbòÊÝ ð@íÀéJTìk \µ¤Ú:Yù±+C¼ÅÈ‘›²={õ­KxÚôm•ŽÏUÎÓðÏ"³-ôø£„ =K†ùG®¿JžIü»m°\4§ ) ¸dxÈžõ£prÔn·©.–ˆö±¸ã”E;=:çëÍP½Ô¤HósÃm…l)ÏS“’sÀçò¥¿’YÂKw3”S Âõ8àî<ûâ«ý˜Ç¸Ç»ËeÏÏ“¸ç Åj©²R#ßÚR…²ˆ\EŸº‰²%ÏbÇ~5^[yt颎Þ9Y³ÏN?úþ‡š½g¢£n.ï2‰YwŸLg¿oZ¶öVÈg7e_â›ÊV9èÙl‘Œdcµh¢'®†oü#7z䥦†U1“óAAîX©©-¼=§ ÅäöÒ\ª‘µ›ÌpNG̤€=q“øô§¥Ü7ê‡ûN-ªÀ˜‘ÞP ë€{3õ«ŸðŒ@'+ª]ˆ£,qª»6:mò?|©Lê,#¶·Õ%ûi³˜Ÿ•]“Ì ¼`Îxõ曩ÚiRj‘Ëkf!V_–{G–'N¼žƒuǧJ³§[ íå1IÖÀ Éåªc¯r1r3íÒ¦¹ðü’«l©Úx/½=@C‘ž™ÇõÒéÙîaΤµFkYŪÛG©$¥„3H˜=GoëUfÑåxŶšXÇÊÉ/ÊGNqŽ¿SÖµ@’ ³¨Ëe;¶ ‰Ç›Ÿ«1œbš^óB.—w‹mƒ¸ÚÉ+)ÈÉÎÇ^„õY£&“Øã5[ ˆçsÇHw Ÿn99EPŸgÝÕ5(ÕŽr¿ebÀö?'8®åÄÄËq¨[Ü3‡>blÇ© Û#‚1Y·z,ð›0Ÿh$¸¨шÝÔý ÌÒZ3'FÒáó"mV`в¯$4`ëœûz޵ØYé¶×p$sLc8À‚P}ŸoιôµK›èÍÔP$Ì0JÂw¾Þ*Fz÷Çã]ij˨ZÍ$nÛ·¤YGÈÏoÏ=« Âæ–$ò!²ÄW¢È)UÇó‚sXÚîû„!6™$÷qŒŽþÜô®“PÔm¯¢· ˜b¿gê—"õZ8äŒ(%y=Oµh¡v+³›Ö˜Zì"`瀻qÍUÑ\ArZUi3üEwlö­c§Ü\¶Ë ¢êG¿cRýšu@“Jáˆå› }³Š¯fRzXÈÔ`€Ç¾)~^HŸ¨5•s &$Æöf$áx+éŠØÕtÕ.K29e,}5œ-’7!ÝÐú’OòªTÛAtJÒL×%®ZHë×ëZ…^Ú"†(Ýáw6@ϱã¿õ¨¡¶hJ; Yvõ!‡_¨ç5u-d~y±èqIѹ~Ñõ*ÛÂöó£b.2T Æ}ªÝÝÌáÊîÇè§ñ ,ãå&d~AùÕr†|~þÆæá¾O­_±V1MɕžDÚUäGóªW{Hv-p3žjä¶©.EÕÍ·^»ºŸlg4Ö³}¡’ï t%íþŸ•ÈÑ;i­vI&5Îàî1»èZî4™¾Ì Ôžîç\•½”Ž€÷Á<ãŠäÒ, ³ÉdŽGúçß“õb–vˆ-¼^T$»!fd·T¨ÀÈ ×ëß©¬ªS±¼,HRÆÙ¯n|Ö€‹ wp{ çn>•$Ö«eš=> ¡%®ÐÄ1鹈8Ç8ÒµlÔå Ùx‹… Üÿ±SAv~ÌaA¸33HÞbã‘´œóŽzq\î:›o¡Ì¶žÖ¦'µšÞ([;‘2ÿN¸üûVmÓl³¾ 3*©‘¯9#šè5ÙäW.#’¨I\åy žpyû½ Ca§My4>UÖ›o0Ü‹“!~UÁý9ô­ã jÈo¢*hßl»%$h#‹©ß’sí“ÏnÝêÂÛÙˆœÜ\ÉtÃ'm¬,ð~îí¼úÕË”»‘‘nïf¸#*¨±º ¿ÝÉ;ô­k ª”ˆ‘pX ¶ù‡û¼QëéMÆÂF\+5õÂ.›§6øFcóØ6:;¸ÁéÅ=ôKÛEMFXÂ"|ÑÆL¹ìŰ õ®† âþ·:œ‘ˆò<´œ¦SÓäPG__Z¿¦ø[`FÞ÷|nåÉR8çxÎúVnÈ­YÍÁv±ù‰w'›±]§æÜO¯^£Zµ§4ôÙöá%—…* ½yéÁ«£$s:Oî»`+ëÈæ¢‹K†V›JÍíŸJ÷^ýå¬B¾¡Kst$Ž!îXÊ1Œò\t«O%ªpcOÊÅðWï)ÇðF3RÃlR8‡–HNpË»wü ?«:yð‚)Žáó×`ÝÓƒƒé\5)8Pq—C m:Ú{—þÒ‚y y?2£¾Çñõâ¦k'ÔZB ¶@–4ùsœ }:Ù­Y%³Ž&’^JžU—ã¯ÿ®¥–öÖ6Škuã÷hT+Щ9ÇjÉÄÑ$` E]C0œF¨wC‘€Iéõ­hËsfWí¼H3ûËpF3ÈáNqíÏ>Õ–DÝÝ´`ä»#§ûò \†ÐMmåڬ̮JÆÁH>¸Î1ê)楄 •u›¸î-˜^8ÄA@©B{’qŽÜW6ÑRöe±d˾k° Û9ǰõ­­rÝ®!ع_(a|Å,=³ž=kLÒÚÐ\®È°œîMÃ=yãðéZBŠHÎNï@¹Ó.ìcud‡Ì8_™N'ëÐ Â×-ViÿÑÊ£ttUTý:þ•ßZùX[Íl" @g*ÌÀóÈÏ +ëCóîÏ›m@÷xÈ9ÏÝ9Çê)–·hR—Dq–‘Ï4»P1 à~@¥š ‰7d’Wq_ϧֺ OÃí‚Æ Xÿ–êªW³š¬4ÜLR4ØÈÏáÿꮯaͪF*¯+0/­Q6’’VER Qb9&12ç’þ=Ïò®º÷HÖmÜ ñ×¹ žˆÍ"´!¦~nZp£¦¡*—z–šwœSdÌ®È !‰ã©*54– DRYÊ–À !+ƒéÀëÿ×®óCðh»¼¤‘°F›°gžË×9öéëÅWÔ<+%Ð&Ü $ÉÀ;ò>˜çük5M9Yçevp3hÆfmîn6á[vÓùÔë¥Ãö,¤S±br®H}A®º- <þZDPŽ ¿îÂûÿõŽji4É$]¾L±(çxÈqÐ;~'ð¢TÒÐq“’¹Á5„èEö˜Âœª/Ê öùzûÓF‘;Ǹ,ªáÕ¥|cÜäW[{ Ü@¡ˆ–Sž V {üÔ‰ ÝÜ„€Œò!ÉöóZª:í5ܰÐå ^Ê+1 $‚äË‘ì¤6Muz¤¶Pÿ¥Ë4’`"«ôw›áùíUcœ;8\‚Ì \ôÈÏóÍsÖ§ÐÞ”­­ÆXi¨_%›|Ä!¶=r9­ÓZR¬…`LߺR ‘‚ySì;õ¨E¤“Ì«8Û·+ó¡ü;ö®šÛDûNš<…… ˜Bçè{×J\º›ÂwV¹ÄßiW­û©þÊíÃ:2®Ts‚6Ö©Ÿ\ÎØ/s3ñ–’Y {áSæÇN¢»}GÁ7q‰a‘·om%±ÔîèÝ?J£†õ-®Ó¬#.qôr9àÁúdUÃmõf%¿‚ã7<‘,’ÛU”©ÇbñõÅX±Ðñqb8flù¹>ØÇëÈ®‚ÓÂ÷ˆ ÁI#ò>v ÞàÏéÒkg,JÆs¤¶’{z¥R…Äçb¥†˜cf2¤“d`g'¶3œVÌ:l¦–ヰn*sèO½E2>âÎH9RP*¶NFÿ&´´ë)[q•¢’/EÊíêÄpsýj%NÃŒîqwšlNîªeÞÍÔ‚2=»S-´Á;”.¡åwüß­z®Ÿð'Æz´bOøF¼PÈXå“H“bî@?L ZýŸ¼[£²Ì4?y’­¤3ºprPóÇ ú׳ý©‡ƒåj_ø Ïaëõ­­òÇdeãŸ+qïÏjè­þøÓW¾áo´L2óË¥ÉoÑÔª[9õŽõ¥§| ñ…²ÆÃÆt]&é¤aê¬ôôÚz×=LM:±n ¿•¿3j~ã´¦¾ûþG ©é‰#cÞ=»þ´¶þ·i­"ó ùYÀ$þ=k®öoø‰­Íss¦hú§Ù ¤Ù4jTœ`ˆ0Æ:ž}«—¾5¥ÎØ4 õA*b²–mã·"€~™àŠãxÊs÷TýÒ áy:‹ïe9´ %æÝ3g%Îsëžß¯JxðlSmì̤¹âŒóœœt«á¿Äûfi/|=©^63ò Äg “ëíZö>ø­¨ÅÚx\hÉPâ[3l$àñÞù ©V„t’iù¯ò¸¢ïª’k×üìs> ðâ›'Æh]pwo;qÓÎyïU¤ðdÖKu"Ð[€ÝºcnkÔl>øëXÓüÍ{¾'S#X×I˜ý³ã?í‡Røã{}Ó@ðÅýâ¦Öíöò'lœÄr}²+XÖ‡%×äÌäù¥k¯½9»¦ ‰–ÁÖQ ï•`Œj9ôuÈ"±î>!é12‹«mNeßÕc*ñœ| g•'€ 8í^™©þÎßµ{%—Nð^¿i9-„’6Üà«–Fôã¿8®oXý—|{.«ö—õÙUãâdÓæE“ŽØŒýF+ÍÅck-(ê¿Â×êÎʨÿËÙYÿ‰?ÐàõïˆqÅj³YiÃçJÈAä…Üç#ÎÙx†óR•Ķ(¦3",’7<ð¹ Ì×´Ïû5üAší#Ò¾j×*ªÛôkÔb¤w 7NAÅki_±F·áû¾ñ‡‚|I¥É#í" ™du•9'ÐtÇ5Ï øê–Jvù?òf²úœ5µþküÏ$ð»M¬é“¼×:]³@̸aÁ ØÛúö®Æ?†·ö"ÖHn4Viâ"‹†®9ãoËŒô8>€×y£~ÏZ–œ’ØxKÆŒ…ž8:äŽx9O'=sœf®]|Öt)V$ðwŒ$‘ˆ SF¸d'¯22Œ}k®±mÞX¤—’OüŽi×Ãl¨¶ýmú²…Ÿ…m¬-d 47®Éó,*Í'žhzrsœâ¸¯è“CtÅàòQŽT(Çääצ5Ï‹¼3¦ª†ž6gfûïa(CéŒFÙôúÖ5÷ƒ|mã6–âO†¾&´H[¾Âä³wÜ”3Û°ë]8Zñ¡;Õ›k½¿Dˆ­8þí$û_üÙÄø[Â2_Mq)nwȱôõçŠÝÖ<2ã+ˆü£{~|ý+¸°øãè´ÙeÓ¼â'¶#z°Òn^QòOLãŠáükû5|CñÝÉ“M·ñÝ»(Ï—u¥H®m¾P‘ÊsïW_;Ó‹&¿1QŠå´æ—Í?Èä|Emok+}ªîÖC˜‰éמ•KMÕ´Û¨äˆ]Û¼€“夻ˆã¾[‘ôª·_°_Å=nüµ·†5ýN@@búMã2ó†Àhx<ôÎ;sŠëô?Øâ5‰"ïÁúÝ™Æýòh×Y)Ü„x§Ryæ²y•gh—ÞËxz îUH¼¢®¼Ò 4dºªåŽ^‡*Ú—ÁÓÊ${¤ 4CyS*Iãp `ð;šÊŸöjø££^Ë&à½vmè»™4ùZ$LmÝå˜÷3wŸ\V÷‚~ |J‚ ø7Æ’I#üë-•ß–„œò>Ì6¯Ò¦éÊ_¼§oÇôéB1÷*'ýz™¥¸Ý‘±³€üsÿÖ®»ÂÚs̤–bÏÌ`ý=9ë]U‡ìïã{¸"kÏ ê++íM2é‡á”SŸÀVŽ»ð³Å¾ÓQï|㉜á^- ñãLr74hØõéâc AYœ1óæfÒÂá g\eÎíýߥ1¼; lÃk‡„žºŸÄôúÕ}WKñÕœ ðü5Õï Æåq§j/î௒¾y®cÄ~ø•âí)Îà_éR3n-ká뻥Z ϯ¯6mCdþã¾3RZÉ}çI{¦@–.ÍK¿!°À·=NÒ¹x‚ÃÃË'ÚÒé‰û¦ÞÒIsÆ~ò‚£#×šå¥øñÂým‘|9ãI£oÝÀÇDšÃ<€<±ƒÛ$U›_Ùgãmíü–÷Šà¹‰K¢Ïi4E¸*¯—ó“Éð),L Ÿ,ý?àÂkškï/§Å=hÖFšæ7j–ÊrAÉç׎µj×〶ÞlÓÎмÆÅrû,ÙÇëŽqNÓ?dï‹FþÔðŸŒæx²gš=.âa1Á3××»¤þÊŸüSCáïjnì/u¦Í$™^K„h²¾˜-ƒŠâ©ŠÄIÙGÿ%ÿ‚m xxëÍÿ“/ò?dRßíwÒ–\ãø[~µ¶¶ÿÙºjŸ}¸4­ûÖá}HÍqþø­oáû¯/T%mÁ.óŒôªRüR}{]I5 M”b&b©·=8éÇzúº™MiÍÇ—ÝZß«?5ÃchS¥sÞ¤´jÚ/;~GGvÖévíc¼F¼«#o¹­{óÄ%­àÔ! Ì%”çAWuïø~Æê=.Òm.Í–?1Ƙ.q€ ¬Ÿ øO@׬ZVÔ¯LÀ¹ëäÆpOÝÊž1ÐúW ¢é©N.=¯óþ™Þ²éB´•))Þ÷\ܶòV¿~Åã¤ÛheaÔ5œË 1Ú3ëÏJÈŠêÚÆå1ιÆXœ0þ• èþ›Y·²}rd{ÄyR+ç%08ñžÕÏüHÔtŸ j­iáÍA§h“s4²†ßì¸f»0¸*5gÈù›júÆËÔáÇýj>zjQvÒ\ÏmµZ÷;HüK§$ŠÊNã!,sVá×´‰VFµ’{y{o`7QÒ¼¿Â²Þx—[·³‹î1™cÜ@àdçòÆk¿¶ø)ªÃ#]xÊò;[~K]db=2ž)c0,4¹g;;w¹®[S3ÄÁÉSO^©+~FƒëúC$./¤Ÿi¾ ƒíŽÙ¥Ðµ á¿TöR/;‹¼FCÓ bê¿#[ëx|5ªËhfbžmØÜ›»´ õ«Åš¿Á6¡âGO¿º$P*²´…ˆ1=‡=:W ðøyrÓ Û”ž‰èÿ+­x¨óUÅ$£ïeuß½ô.&•-Ùoì{?83®†d$ õÃüW½ðä7½ü–ÑJøI6¶}kËïié羞æÒµ–X¼¡å¹!y$~µNñíߎ~Á'ü#V·ÒH§}©aó°Ø$ß7ã]2ɱUí*¤—Êûy³®aqÿº£yK~©oä®wÏ¡é¾Þ,Ô,f“ ,0»Sžüš›OÐdšãí¶÷°é%K¸•¥NQÎ?åtÏí…ˆuëëXMP'œ3Œž¡ c×Ú²|QûNE}©JÍp&¶ 6éò“Ÿ›qa–8ç°¬ã–ÕÄËýŸß]ÿK[Gó/ÚaðpKFž‹òmÝ6¼­ò;‹¯éÖö„é¦(¤/³))ÊRùæ“G[¿#‹Þî ÙgY~d<3ëï\5÷Æÿ 뾿EŽ -I6‹yk òU…ãÖ¨7í)4 ÚXEgRíV’ܘd'€J°©ÿé†KZPjš•þÓþ¯÷ô9*chûhʵdámV÷ï«íÛ®‡«ê:Uç‡ìæêÕ¡ŽÎèî¹î0xª\–Z±‰>Ór·;°HRãã9«~Ñtox}n¶x»QYWÌT»–G[¾ =ëÎþ(ø®Ûáÿ‰aMÖ}>{vo”0—¾N Æ:W& \Ÿ´×[%÷êÙÕ˜Q– ,FŽ–š]·¯U¢üÏG—Ã÷/8þŶ»½AÉrW>‡s ¿cák™‘§×¬ÚÂ8†YÄà;‚œƒ^Qàÿ‰>%ñ)¹mêî§“{´6îë¿Ó*§L×cu­K°]üVÓ."ÒDO;3)/ž)<æ§—NŒ½œšoËâôè›ûÍpU(Õ‡´9(ùü>½Z^¶:7žÞ=ï¡•½ï°;V.8ïÍM‚SÌÕìÌŒ ì|€¿ˆ.o2.åþÌç#ÌutÒáú•àš¿u¯Ïþ⯜CQ­%nÏO’ºÓÕ»3Ú.4…i–{ߨ ùT’OÓ;¿¥IrŸ¿DÓ®~ÕÜí$uy®Gà¶µ®jׂ ˦꺒 . N‡Ÿ@}?Zî5ý;X“K¸°ÚéâWcòOæe`Hãÿ­^U|:ÃÖöR’vþ¶µÏf…?­aý´`Ózé×ç{úØ@$ó¡yóÌExJ¢[Ëv—ÉÄH9a• =Ey{øþãÂzì–ÂX$¸…ö¹W%[ØçØjuïi‚ÛÃÚêFü;"ÝônÙ_)tœZ·+êݬ7ŽUã%>nxý˜¦îü÷ùíätKö´ÂÞ SýùJâ¬[ø~i®C<öÓ+Ï™ þMƹOh^)Žä.£áýKÈ#…„Ÿý5×Ãá {¤óu{m^Ñc0uHÓÿä×&2åŒÓ^V•Žì µcÏ:Zö•×çrSìö·~Y˜¸²qù楆ꊋE#p'òªvZ·…M­ÄÒL6ä®çŸ,ßLrsL¶ø¥áè )¤ÞÝ!-´G#P=rAâ¥á•¡JM­ôÿ"£% ·R¼z¤­ÄØÛgÍrÈ?ƒ•#ðÍUšqs+›9壬Hú.Œu‡Q=“¸ã¼—qÀᓞxãÖ²üEâ yǧê±È 4ºÆGpŠHúUOJJêZ¾ÿªO)¥(¥­ÖþGÎÞ5Ó.<kê·¶4·ÉŽMì£N+—9Y ç9®CÆ>!¶†ügj"ø8Ž;’zæ³4¯á¹üp?µèÞ3ø©cáÖÇÚkZ‚Ã÷ÌWË'Õ“Ÿ^+Åþ>þךL;´¿†~n§*Ã'ÚHD'¨;†âG×ëé^LÏœF4)QP]ÓÓïÑ}ç·G(¡”ÊUçUÉíf¯þlë|S⟇ÚUúT†[ýݦ9*·÷K«aˆÁé‘Ö¹ ßÚOM×¼¹ÞÿÄm– Ã@Ä.åè‘Ø÷s_'‹‹w,—R[ÄÛ‹2¸gÝžHÈÖ–›âˆ Œëy¢K{3q†9#Œz–ý¸¯r9&ŠJU\ߪӿ—žç˜ó UfÚ¤¢½½¿È÷?ü&þ¶ uVïT½•&¼{‰eÄE9‡À-ž€¯'7Æ›¿É%ÏÄ+[ýzd‡m»ùì‹û«À¹ÆkδO ø—Æ÷ñ øs"ݵ£ÚŽbXó^µûx÷À~&ñ^£á&ƒk3¹kI'Éf˜­ “Çb@ú×MXÐ˰®Tcíu~òrIù­méÑÔéUÇb­.E-–‹kÉÝuûÙç/â羿xì÷3°®]—ÛÔ×­üý­5ƒ>šËYÑe¹¶†9ɤ¶1•Žá¹Êò¹ÝÇ^x¯}¼Ð~üðî£â Ú¶—Ü4{øg’Ic¹Å|ñ—ö¬Ö~4CZÚÛÛÁÏ:Çm9l€ Ï qëYaq«‰“¥,?î“WrzßËþ©u²ßõ}ûXWýãNÉ%kyÿ]\ø«ûjx—âR][Þ}ŸNÓ®QcÑ);qÉ;$“ÔôÇçÚG‹©©EíèµINÓ+©eOLÛµy~›w{­ÜÅ“³É)Â*Œî>Õ¹ÿ¶£moq¦\Û›·Ø’J»S=9=¹"½êT0™|=•;CîûõÜò*ÃŽš«Vòõü´;ÏkÑøz÷ìÑê÷ügt9¡÷ö«º|9-ŘפԣBËö†²w `ŸJã¼oð7Å’Xõ‹Ie–<ò@u{ç¥p?ð‘´R•w*AÁÏ8ª¤ébéþî¥üÖ„Ï <4ýêvòjçè'Àÿ‰¾ÿ„~m;Gø‡5µ„ ÒÇk|ˆ›QO̤Æ[îç=Hâ¼ö‡ø•áÝoQ^Ö£¾•%1º%±\¯÷ÚCצòçü$Å'#ÜWeð£ãì¿ ¯¥il¬oà¸]޳Â$eççü+È¥‘, ib©IÎ]•ûÝØõjæ/F8j‘Q}]»Y\öOŸ´…ïív?ìl¦iVS#„.™ìO¹ Ð⽇⎥â/‹÷©câ9á³µpn­m,åVgÇÌ-ÁÀ<{×Èþ4ý¡!ñ5À—GÑ´ëíaî¦*O^¼VGˆ¾,êúù·}Vy£Ž1˜vå@ÏR¤};R­”¼Mxâc õoWä±kFXiIζG¸xÅtïÆmîåº]La„&tpAõÚ1޵·¢|XÕõŸ;º¤’©ßË6:|»Žy'ŸÓó¾.–òf’îy%‘ÎYÝ‹3}IäÕÍ;ÇWZl›ôë¹ r1º9 ÌW¡<»ÚSJošK]okú\à…eN£t×,^šZÿ}¬­glV#gFê u“ßä_мHuIò~Ñ0ecÁcϹ¯GðgÇýcá¼w¾‚â+W$/Ûíådx`dQœW‡cAo« ðÅö®ä’['„®©Qȯ®~ |{Õî¼5§‹ô˜u[»eT[¨CN8ù¤Ü8lzuö¯3<ÆSPN1S‹èô·ž§vM–J3|Òp—u¯Ë¹á¿Û:8–(<]d—wq%©8orŒϰâ¯j´-ÏU"Ò´#Œ€¬Áål¿QØ{s^¡®êñn†é¬‹[, Ìd ‘RXc˜¯:ð¿€|ã^[ü4ñ5•íõ‘ÿHµ‰Ñž1Ÿ¼v®HÏñ ŠùxŒ4¯Wêî-z´¾í¨©…®’¦ëÝ?Dßù•o‡´_ ý§SðÔßiÀÂFÞ`Ó=@+Ë'ñÕõ[D±¹Žø ÜTzÚ½çZø_«øzÄÿÂ= Z‰v׺x™½²ÿeãÒ¼oÇZŠ´ÞY|«I"“»ì· ‘Ç÷ð ü«ÕÊó:qræw¿y~žFi’Ê¢*JßÝýR3ãø£¨iv­c ÄñC¿q†@Òz•éŸÿi{m:´ÍmD.fœísœà†)÷ÍxV£¤H µ÷„¼i§IœE[‘Ÿ¡9§é:Vp̺„þ"±|ü¾n–Ã^Q^Æ&ž_Ž¥jŠÞk¿}7<Œ-,ÇUJ›ºìÞ–í®ÇËÚ²—:¼k#᳕ ›ÔŸq_H|‹UÕ´Ø ¹Ðt[û<ŒáZû±Ÿ§î?¿àŸ> Ð ŽmjÐÜνKàæ½ Ǻ¯ÃÏÙƒÁÇRñ¬ÖE’~î#1dÌBF½Y¸è+Ë͸ž9EN„è—ù[Sè²ÞúŒ9êÉ.ìã´ h¾ð›]ÛéÞÓoÄ~t€©cÐØçéX>µñg†îïuíróI²Òä,× ¢í*3È`xúœ×ÌŸ?ॷ>ñ™Ó†—áûiA¶`Š·rür^„tõ®+ã§ü Äß>ÛøZ tû”µÔÑÊ ·È>ê6mQÔ㯪Ãðî>£´ŠJ[ß[/ó ÙÆ ò6ùv·V}7¡þоñŸÄfÓ5ï.&X‚´¤A#·4 €ONkØcð/ÂH5Ù4ÛËÏÏ«ªym%Ôbp9ê™Ïcǵ~F q£Q@Çaê½9éõæ»?~Ó?ðΜÖ>ñN¹ko0Ã$sýå#n2Ù cŽ1^n+ƒ&ÒöX|ÿáÙ݇âh¦ùèýÇéÿÇ¿Ú[áwÁ 5ñN¡§Ç¯GÈì,—Í»veʆ‰Ú3`kò÷\ñÁ¼ñ<×ú9–ÕäœËÆÃFIÈÛŽ˜è+µðìó¬øö?íMR[©&¸c$ÌÎÓÀÉ$Ÿsšó¿Œ0EáO˧ÛY5“Û>NæÇPÄ ýqŠõò &-”©R›œÚÕ½´ì¿áÏ?7«_£R¤Tb¶]uó=áσôø~âÿÇ~$ŸKK&g’÷Äò~bzð:÷­ z/†Z‚<ÿj—W:Œ¬Ê|ì«ÄÈ!:œý?­r6?´Þ›‚ì4íSÃw·VØY%vÀâÏRÇÐð*VøÍà-SMûF³ OÛ9V¶AÈmmíò¯~®©Ëæå%+_Dš±„!C•(òÞÛ´ËhɾêK-¼Z„á™bx×trãåub2=ü†kn_ÚÇ?ô™#–æÐÁ¥£ßÌؼààœ×x×VðüðÅ7ƒÚñ'w>lR¨ÚƒØŽµ¢>=_Çð– [‚;Ƹkž<„ ¨^NOn•ÑV…:²U¡Ms6¯~žÖæTç:kÙÊo•moÈë¾!übñ¬²-—õ[Ô`¿qd ¹qŒe{`tüëˆÑÆYˆ¹«zkÙÞO$¯ŒìIÓš¹¡øÅ´YИm®¢WÑL™{Ô¥vSµZ _ËC–puey7óÔÜÑ#!‰ÅLúÇ•°¬¥· žÇçPø{âf•¦êfmSA¶<ß1cFà ýÜžHÆkÛ#ÖtÈõ‰G„Þñ¬‡×8ß‚öªðkè$S6æAÔ‚ãF®N7N•$z¶>óV±Ÿ*µîg*Ww±Þi>1›EÔ#ºÒg{yá;‘ת×Úÿ³/ü_Âמ‡Køæ#°¿³ þŸ%¹™n—•SÛzs_ž‘jøêÙô¯ìÕðgFñ~ƒk{¬Gå­àùÄ‘ñžŸ!ϯc^G ˆ ž)=6ksÕÊ%ˆ£UûêžÇÚ_ ?mo†Ÿ5©¬ô[ˆí¤‰˜"j¬:ц9#õëÓ|eñ'Â_ ü&³­\i¶öi Y˜œGÈ ÇКù/Ã_³7…¬u_2 4¢ÅÊIàã¨î^UûS]M¤Íog¤è׺–‰d¬#ifw9èÊ™ ½GÐ×ÄÃ)Âcq… ÉG­íùè}D±øŒ-*±N]-È¿ûJ~Û·Ÿõ·‹ÂöÐézOˆ 7.:Èz`ÿwµy̵x¯ìîôû÷³¼±]°ÜÚ"d﮵y¸ñ$ÊÍulªq€±±@¿Zž JÖá€Id€ç˜~•ú>‡ÂRT¡ %óûψ¯V¶&n¤çvÏf¸ýªüw¨K¾Ojñ·0Íå’Gñ|¸çÖ½oàüóÁVWvŸV÷ÄÊ»í]ïÏ*îHÈ>§8®àìh¿ü!¥á­~ÍÚ@w*J Œƒƒ¹O#‘^¿áø'LÅÔî­$šŸ0£.ïʾw2ÆäÎ2¡V*é앚ùž¾™)*Ôäõîî <ñãá×ÅHa¹ÐÛí3Æ”«Y{Xkäø;ÿyð—|x4¿é·>±¹ŸËµ¼¸‘Z¸àË·î{“´w5òïücöÅÿ†’ø´l|#r“xGÃnÑiîŠ1{!IqžàýÕéòŒ÷¯˜Þôwj†MDI$þ5ú– ‡°Y~'ë4V©Y+Ý/?Sáñ9¾'GØTz_ÒþF«êgÖ¢}Džæ²dÔ½0*/Ëuj÷]Fyj™®ú‡{õ¥°¾ïâòùpîcm'¿°žôžõ^dòk7;šF™õ—ìËðCÀ߯gEºfxdT+!h= çÒ½ÿPý<à´2K†ŽÕ2ìø£_›žñÞ£àn-GÂדÙ]ÃÒHŸi#Ðú­{^…ûIÜxÇJ°´ø—­ÊÑF7ˆLì¤>üŽ $“Èϯòyžês³äíÔú&‚‡,©®cì…Ÿ¶Â?ý§Ã÷·—¶‰lŽRwµóa,¿y®X‘ôÇ¥|ûo|hðçÄoŠ—IðêÜ=…²ô¼”3HFOËè2çIâo‹š Æ“"ø?Lº‘cᥑyè=»õ¯Ó|1âýuÝâ*&rHUéùTå˜*8Z²ÄI´üÙxÚõkÁQVkÉPÏSDw4Šå™Žzšôm?ö{o¿ž%ø‰'"µmÿeûmF3.“­Á ª2¤¾Âã^´³Š³gËjö<–âY` \$ˆO@F*6½hø|ŒôÏõÇ€?fHëyª=ž¥wƒÎ;ûÖOí%ðGѾÂÜ]ò".DŒz’æ:×$3êS¨©¤o,ªq‡5Ï—?´=éñÞ4¶0Ìǰ泯ôËÍ.@·ÑJ¤ŒŽ85§¡x¾-,,¥œ2 pD›ø×¸¿z²¯¥ã©Â©k¨èZkŒùÈäu“Ši¾ØpÙzƒÅwž ý t#X¶UÒ!ûqm’UL»Çp:`þ&¶üoñÇáö·,°¦{,r)_>U*{6 œÿ:äxʪVönÆë MÆêzžc§Gq©Ì#°ŽId=zššæ «þ›Ñö”Šö_Ù7ãƒ,¼R°|@·†ÏÌb°]Àñ›Ž8GZõÚÆ¿ <áu¡5ޱu1GGûXð˼ é\õsZ”«*^Éêm ¾§í9Ñò]³M4nñ¤Œ±Œ± N­*_çø…zÝ¿Ç^i$C§Ì—)GR¸t\9‡­x÷‹5KKiÛD"µÆSkn.=[Þ»(âçUµ(´rUÃF 8Êæ¾‡ ëŒVñ8V”à3øWݰ,–‚1à߉–÷–²ážÃT·ÊÄýÂIŸº}û×Âÿ ¾&ÏàÍzÒR`hc~L±òóüC¿žõú/û:||ðO‹>ǨÜ\Zý£Mˆ¥åÑMA9ÀÁ¯8í^/U©*<œ·OªèÏO'¥>nk?Ðîüsð·Æ~Õdÿ„jWÕìã;á(ñ³àv#åoç^7ñ+Lñ‹>Óg¯G5­¼‹…Qeå¼gÔ:óùæ¸ßÁS®~øª„izæ‰nD$…Õ\“’¨Ä“|pM}!û*ÁE¼ûKÝÛhÚ½¯ö?‰&‰¤{)¢ó#}¤gË—n¹Ç_jùÏ«ã²új»¥uߪõ]cÚáqst”ìÿ‘ñ®¯ûk+K£^ eÎLSFUã\ˆþø“Â7±¦\ü‡£ÔûñÍ~ÀÝø{ÃZ–âÖvÂAÆ@Û\'Ä/‡¾[/2âÚßwVhçžõÙ…âúéÚ¤.sb8v•¯ Xüîý–?j}OökñÒ]Ä$›I¸%/­<°YǪîÆ`w¯¦¼gÿlÓm¢H| £]Ë ¼žF ¼àÁÎAõâ©üdýŸþxšÙþËs°%œ4s*ôë×þµòÄχ¶ž ¼šMW¶ºµ,LJOÎðÏBk×…<¿;¨ªÕ¦Ô¿?¸ó¤ñyd:sN'Ø:Ïü®¤Û&‹¡_]\Äí-À‡{aNr3ÐŒ`W=¢ÿÁX¼Oa4âãC°»ä-Ëp|ÈPޏO›ÔWÆ0ê<šµ¡Ÿâ"»¡ÃÙtU½’~­œsÍñߞǙ=Þîæ¢k¬Ž¼U3rNpzuïPµÑ=ëÜu8 ÏwïQ5穪OuïQ5Ídêö-@Òµ—í7qÆÄáÛk´Ñ¼,$ÝY+;õ’“øW3ðžKk¿éÐj{\J#VvÚNM~‚ø[öD±Ô¬í¦k"³J€’À÷ô¯5Ìþ¨Ò}O[/Á}a6|3kð£PÖnäŠÎÝÉÆjůÀÍNµ[øeLµú]à¯Ø¾ÆÆÔo·Dã$‘Í:ßöpÓ´¿‹XbŠBÿ2‚™ð¯ |LåtV9*Vlùá'ÁšsG¨FeϬ¼þµß\üŸÂv‰uáËew_õn™#ðÇ5õÞ“û3CÝ%¼xê2ÚºÝᥜ>]Ä19A“¿þ5âVÍÜÛw=:xT‘ù÷~ש-¾¥¥Æ‚Aµ†9õÅCÃv½M¡±ì¹ãè }§ñörÑ|\]ô"‚í0¯„ãóÅpGö}½ð®¨©w òÈr™J#‹ZhÂXVž§…h^Õl`H,žu@p7.?zwÃÿ…ïâ}1-|E b…a^íàŸ„:uðS¨¤ex*?¥iÞü(oÝ,úõU9 Ðc\óÇßE£5Žڳ䟳“¦iß^[[Y¤'Ì#_bIþUðÄ­>MÅ÷VÓº1VÈØá€ö¯¯?à¦_¼e«ëš –°è¶ˆ`‘cMÒ6NOÌÝ:vÇzøVîúY.Þ4†B~bçŸÖ¾Ç$öžËÚNW¿Cçs.G>X£D\ç¹üéßléÖ²EÎzš‘n=½Î3Ëä5¢¿hØf :pEIöó6<çvÇ$œVBÍÏZzÜã©üió‡!¯æÖʱ¥[ØÖDw#Ö¦IˆMÇ;IÆ}MÑ!ª—'Ö­ÚëÛA,VóËW Q\…‘¸¸>µÔxpbsü'VªÙÝA ŠY`¥”9lúÒö‹¨(%Ñ=êöâ½ Q†ïE¹žÒîÝйI#>ªÃk.=êd¸÷«çº±Ë‰LYû¤.F¥sq]dõ©ã¼#æºIZ:8¶îÎ¥ìç·…¥ 4Hp\vü 2;ΜÖZ“Û#¶ßLœU˜.¼Âv@ÍRŸr%O±£á hR4¨ÒNØáøÏ¾=+€’ã yé]ĈÃYu·ÑÜù*€;Œüçñ®9ç=ÍsÑrµç»:ªÆ-Ú%–ºçÖ™%ã2žJ®Å¼­ø;IÆ}MBóã©ÅhäJdÝr¬Aõ‘_­ðL¿Ú·GøßðŽÚÏâ«¥Çâ?"x^uI&8YJ“Üùg¥~C5ÈìI©´¿]èW«s¢\ÏipªTK ”`ÁQ^Vi€†eKÙ·f¶g~ðsæJëª?¡]GÆZ%¦˜ÒK©Z´as”‘X~•ðwí'ÿXÓþütm7áå‚j–ÚyU{Ï1LeòAg•÷#9¯Ïˆþ9øÊßÃͤÅâ}qt×>ØûH#g9Æ;g å^\±.NOZñp|9N„›­.cÒÄfóª’¦¬~Çüÿ‚Æ|;øN›â¯tJÝÌó¢ˆ$bpDG9 uæ—ö ÿ‚˜ø/á†sŸv——ën&†ßçmÄÀê{í_ž~ÜäžjMGY¸Õ®Ú}Jgšgc’p ªÿVðʧ:nÝ…ý±YÕ¥~çé—ìÓÿðÔúͤ.eÓZâ7ûEÔ°‰ o¹ùvä’qŽ;×ß~ñ–ƒñ#ÃÉs¥Ïem"Žbp㑞£ë_Î_ïŠõoÙ×öÒñŸìÅk«§Ã‹Ò_RX –i"¶1¾ãµ3™r„d`V‡B¯½‡v}ºásiCݪ®Ý›ŸZøV9o¬ž(-£GVÆO5óçíSûvh ¼/4‘M<«ìi-×’pr£×Ó==ëãÿ‚Õø¯Çž}âF‘§Y!•fûeƒ>d‚cxÎ@zgÈ®Sö…ý¬¼3ñÖ%Ó´?-’ña0>ñ Ç;¿Jòðù%ZuÖ#uävÕÌ©ÎÙ2Œÿ·‡ãŸ\[I¤JöÉ1ÌáÃ+£‘ÉÎM|óñÅÐx«^yô»hímúª¨Æ}k;Åš:éúŒ²iûZÑ›äe<÷Õ“¿ }†…* r?V¤ê;L²$÷§ MUžô»ˆîk«˜Ã¶'Å=n=ꘔ÷&ž$õ£˜|ˆº—õb;ædìJçAY«/­H²ÓRS­ÃK=œ mynf˜ª'œöúfª\ÛÜèÓí¼áqÖ°ã¸*À© Žà×C7ŽTðúXêñ$>\ü™³ÿZ›µæ©•ãºÀ©£¸¬¸ç©Vr:´Ú3p5£¸÷©£¸ÏSY]zÕˆîê”Ù.´sûÔñÏïY)sž‡šž;œô5jd8ÑÜñÖ§ŽàJÊŽzš9ùëUÎO)´ƣy±×š¦$ñL'49¶iÊL÷'±¨‹’iŒázšcÜzT9‘1p<Óp>ïéP4ÇÔÔm/½fæZ‰;OŸja—Ôš¦ô¤2gÖ³u Q&i‡ji—ëQy”†_¥K“cØ—ÌÏZ<Îy 2ýhó=ÍMî=IüÏJ_4úŸÎ«ùƒÞ0{Ð2ùÕçkO!¤c/ãš„KïU¼ÏsJ$ÏzWCÕ–D¼ö§‰j¦üúp–Ž`å-‰3JÐÕe“õ—&Ž`jÅäiÉ/5]dÏzPÄU)…®\IjU–¨¤¾µ*KÏZ¤ÂÅ䚦I} PIjd“ ûS¸­ròÊ NžŸ•g‰ ¶ Š™&§r\MsëR£žõB9Ïsš±Á½éó^Žà‚2x©âºÕ$—õ§‡¸4ÔˆqLã £To95Kèj6—Ò‡P¥F—Þ˜ÒóE¼ u U8ÏzY,%GÚòr¹j$m!4ÒÞ¦˜Ä‚FzSKQr­bMâšdæ£2zñL/øÑ¨™s×4†JˆÉëH_ÔÑ{‰|ߥ'›žõ™éG˜j]DR‹&ó=èó=ê0ÓL¬:YóܵÈ“=éDžµUn<Šp¸-O˜|¥ô¢N:Õo;=GäiÂN8&Ô²%æœ&ãžj²¶ï­=_֕Ô´²ûþtô›ûÕU[ž”ðØéEÑ2ØpiÊøª‹&:Ô‹'­5&…Ê\Y=jXä$Õ5’ž%"©LM– ב‹æe‰ŽƒÈ÷©¯"wLˆþbƒÃâ²’ãš²“oÎj“¸­Ø¶’{ÔÑËÏ^”íòÒ9dX|S.±ŸZ}Õ”hK –XÁéüBŽn„¸Ý\|Sqþy« .zÖrIÎ9©ãŸŽNER‘<§ÿÙmoderngl-moderngl-773b733/examples/external_buffer.py000066400000000000000000000062411470420062000227500ustar00rootroot00000000000000import math import os import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = in_vertex; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core uniform sampler2D Texture; uniform vec3 light_direction; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { float lum = max(dot(normalize(v_normal), normalize(light_direction)), 0.0) * 0.5 + 0.5; out_color = texture(Texture, v_uv) * lum; } ''', ) self.texture = self.load_texture('examples/data/textures/crate.png') self.vertex_buffer = self.load_model('examples/data/models/crate.obj') self.sampler = self.ctx.sampler(texture=self.texture) self.vertex_array = self.ctx.vertex_array(self.program, [ (self.vertex_buffer, '3f 3f 2f', 'in_vertex', 'in_normal', 'in_uv'), ]) def load_model(self, path): from OpenGL import GL obj = Obj.open(path) data = obj.pack('vx vy vz nx ny nz tx ty') buffer = GL.glGenBuffers(1) GL.glBindBuffer(GL.GL_ARRAY_BUFFER, buffer) GL.glBufferData(GL.GL_ARRAY_BUFFER, data, GL.GL_STATIC_DRAW) return self.ctx.external_buffer(buffer, len(data)) def load_texture(self, path): img = Image.open(path).convert('RGBA') return self.ctx.texture(img.size, 4, img.tobytes()) def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now) * 3.0, math.sin(now) * 3.0, 1.75) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0)) return proj * look def render(self): self.ctx.clear() self.ctx.enable_only(self.ctx.DEPTH_TEST) self.program['light_direction'] = (1.0, 2.0, 3.0) self.program['camera'].write(self.camera_matrix()) self.sampler.use() self.vertex_array.render() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/external_texture.py000066400000000000000000000064471470420062000232070ustar00rootroot00000000000000import math import os import sys import glm import moderngl import pygame from objloader import Obj from PIL import Image os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((800, 800), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class Scene: def __init__(self): self.ctx = moderngl.get_context() self.program = self.ctx.program( vertex_shader=''' #version 330 core uniform mat4 camera; layout (location = 0) in vec3 in_vertex; layout (location = 1) in vec3 in_normal; layout (location = 2) in vec2 in_uv; out vec3 v_vertex; out vec3 v_normal; out vec2 v_uv; void main() { v_vertex = in_vertex; v_normal = in_normal; v_uv = in_uv; gl_Position = camera * vec4(v_vertex, 1.0); } ''', fragment_shader=''' #version 330 core uniform sampler2D Texture; uniform vec3 light_direction; in vec3 v_vertex; in vec3 v_normal; in vec2 v_uv; layout (location = 0) out vec4 out_color; void main() { float lum = max(dot(normalize(v_normal), normalize(light_direction)), 0.0) * 0.5 + 0.5; out_color = texture(Texture, v_uv) * lum; } ''', ) self.texture = self.load_texture('examples/data/textures/crate.png') self.vertex_buffer = self.load_model('examples/data/models/crate.obj') self.sampler = self.ctx.sampler(texture=self.texture) self.vertex_array = self.ctx.vertex_array(self.program, [ (self.vertex_buffer, '3f 3f 2f', 'in_vertex', 'in_normal', 'in_uv'), ]) def load_model(self, path): obj = Obj.open(path) return self.ctx.buffer(obj.pack('vx vy vz nx ny nz tx ty')) def load_texture(self, path): from OpenGL import GL img = Image.open(path).convert('RGBA') width, height = img.size pixels = img.tobytes() texture = GL.glGenTextures(1) GL.glActiveTexture(GL.GL_TEXTURE0) GL.glBindTexture(GL.GL_TEXTURE_2D, texture) GL.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA8, width, height, 0, GL.GL_RGBA, GL.GL_UNSIGNED_BYTE, pixels) return self.ctx.external_texture(texture, (width, height), 4, 0, 'f1') def camera_matrix(self): now = pygame.time.get_ticks() / 1000.0 eye = (math.cos(now) * 3.0, math.sin(now) * 3.0, 1.75) proj = glm.perspective(45.0, 1.0, 0.1, 1000.0) look = glm.lookAt(eye, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0)) return proj * look def render(self): self.ctx.clear() self.ctx.enable_only(self.ctx.DEPTH_TEST) self.program['light_direction'] = (1.0, 2.0, 3.0) self.program['camera'].write(self.camera_matrix()) self.sampler.use() self.vertex_array.render() scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() scene.render() pygame.display.flip() moderngl-moderngl-773b733/examples/headless_moderngl_logo.py000066400000000000000000000025211470420062000242710ustar00rootroot00000000000000import moderngl from PIL import Image ctx = moderngl.create_standalone_context() fbo = ctx.framebuffer([ctx.renderbuffer((800, 800), components=4, samples=16)]) output = ctx.framebuffer([ctx.renderbuffer((800, 800), components=4)]) prog = ctx.program( vertex_shader=''' #version 330 core vec2 vertex[3] = vec2[]( vec2(1.0, 0.0), vec2(-0.5, -0.86), vec2(-0.5, 0.86) ); vec3 color[3] = vec3[]( vec3(0.0, 0.0, 1.0), vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0) ); out vec3 v_color; void main() { v_color = color[gl_VertexID]; float r = (gl_InstanceID - 4) * 0.15; mat2 rot = mat2(cos(r), sin(r), -sin(r), cos(r)); gl_Position = vec4(rot * vertex[gl_VertexID] * 0.95, 0.0, 1.0); } ''', fragment_shader=''' #version 330 core in vec3 v_color; out vec4 f_color; void main() { f_color = vec4(pow(v_color, vec3(1.0 / 2.2)), 1.0); } ''', ) vao = ctx.vertex_array(prog, []) vao.instances = 9 vao.vertices = 3 fbo.use() ctx.clear() vao.render() ctx.copy_framebuffer(output, fbo) img = Image.frombuffer('RGBA', output.size, output.read(components=4)).transpose(Image.Transpose.FLIP_TOP_BOTTOM) img.save('logo.png') moderngl-moderngl-773b733/examples/imgui_integration.py000066400000000000000000000023521470420062000233110ustar00rootroot00000000000000import math import os import sys import imgui import moderngl import pygame from zengl_imgui import PygameBackend os.environ['SDL_WINDOWS_DPI_AWARENESS'] = 'permonitorv2' pygame.init() pygame.display.set_mode((1280, 720), flags=pygame.OPENGL | pygame.DOUBLEBUF, vsync=True) class MGLBackend(PygameBackend): def __init__(self): super().__init__() self.renderer.ctx.end_frame(flush=False) def render(self): self.renderer.ctx.new_frame(clear=False) super().render() self.renderer.ctx.end_frame() impl = MGLBackend() class Scene: def __init__(self): self.ctx = moderngl.get_context() def render(self): now = pygame.time.get_ticks() / 1000.0 r = math.sin(now + 0.0) * 0.5 + 0.5 g = math.sin(now + 2.1) * 0.5 + 0.5 b = math.sin(now + 4.2) * 0.5 + 0.5 self.ctx.clear(r, g, b) scene = Scene() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() sys.exit() impl.process_event(event) impl.process_inputs() imgui.new_frame() imgui.show_test_window() imgui.end_frame() imgui.render() scene.render() impl.render() pygame.display.flip() moderngl-moderngl-773b733/examples/moderngl_window_empty.py000066400000000000000000000076171470420062000242210ustar00rootroot00000000000000import os import math import moderngl_window as mglw class Example(mglw.WindowConfig): title = "ModernGL Window" resizable = False gl_version = (3, 3) window_size = (800, 800) aspect_ratio = 1.0 resource_dir = os.path.normpath(os.path.join(__file__, '../data')) def __init__(self, **kwargs): super().__init__(**kwargs) def render(self, time: float, frame_time: float): self.ctx.clear( (math.sin(time) + 1.0) / 2, (math.sin(time + 2) + 1.0) / 2, (math.sin(time + 3) + 1.0) / 2, ) def resize(self, width: int, heigh: int): """ Pick window resizes in case we need yo update internal states when this happens. """ print("Window resized to", width, heigh) def iconify(self, iconify: bool): """Window hide/minimize and restore""" print("Window was iconified:", iconify) def key_event(self, key, action, modifiers): keys = self.wnd.keys # Key presses if action == keys.ACTION_PRESS: if key == keys.SPACE: print("SPACE key was pressed") # Using modifiers (shift and ctrl) if key == keys.Z and modifiers.shift: print("Shift + Z was pressed") if key == keys.Z and modifiers.ctrl: print("ctrl + Z was pressed") # Key releases elif action == self.wnd.keys.ACTION_RELEASE: if key == keys.SPACE: print("SPACE key was released") if action == keys.ACTION_PRESS: # Move the window around with AWSD if key == keys.A: self.wnd.position = self.wnd.position[0] - 20, self.wnd.position[1] if key == keys.D: self.wnd.position = self.wnd.position[0] + 20, self.wnd.position[1] if key == keys.W: self.wnd.position = self.wnd.position[0], self.wnd.position[1] - 20 if key == keys.S: self.wnd.position = self.wnd.position[0], self.wnd.position[1] + 20 # Resize window around with Shift + AWSD if self.wnd.modifiers.shift and key == keys.A: self.wnd.size = self.wnd.size[0] - 50, self.wnd.size[1] if self.wnd.modifiers.shift and key == keys.D: self.wnd.size = self.wnd.size[0] + 50, self.wnd.size[1] if self.wnd.modifiers.shift and key == keys.W: self.wnd.size = self.wnd.size[0], self.wnd.size[1] - 50 if self.wnd.modifiers.shift and key == keys.S: self.wnd.size = self.wnd.size[0], self.wnd.size[1] + 50 # toggle cursor if key == keys.C: self.wnd.cursor = not self.wnd.cursor # Shuffle window title if key == keys.T: title = list(self.wnd.title) random.shuffle(title) self.wnd.title = ''.join(title) # Toggle mouse exclusivity if key == keys.M: self.wnd.mouse_exclusivity = not self.wnd.mouse_exclusivity def mouse_position_event(self, x, y, dx, dy): print("Mouse position pos={} {} delta={} {}".format(x, y, dx, dy)) def mouse_drag_event(self, x, y, dx, dy): print("Mouse drag pos={} {} delta={} {}".format(x, y, dx, dy)) def mouse_scroll_event(self, x_offset, y_offet): print("mouse_scroll_event", x_offset, y_offet) def mouse_press_event(self, x, y, button): print("Mouse button {} pressed at {}, {}".format(button, x, y)) print("Mouse states:", self.wnd.mouse_states) def mouse_release_event(self, x: int, y: int, button: int): print("Mouse button {} released at {}, {}".format(button, x, y)) print("Mouse states:", self.wnd.mouse_states) def unicode_char_entered(self, char): print("unicode_char_entered:", char) if __name__ == '__main__': Example.run() moderngl-moderngl-773b733/examples/moderngl_window_fractal.py000066400000000000000000000043501470420062000244660ustar00rootroot00000000000000import os import glm import moderngl import moderngl_window as mglw class Example(mglw.WindowConfig): title = 'Resource Loading with ModernGL Window' resizable = False gl_version = (3, 3) window_size = (800, 800) aspect_ratio = 1.0 resource_dir = os.path.normpath(os.path.join(__file__, '../data')) def __init__(self, **kwargs): super().__init__(**kwargs) self.program = self.ctx.program( vertex_shader=''' #version 330 core vec2 positions[3] = vec2[]( vec2(-1.0, -1.0), vec2(3.0, -1.0), vec2(-1.0, 3.0) ); out vec2 v_uv; void main() { gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0); v_uv = positions[gl_VertexID]; } ''', fragment_shader=''' #version 330 in vec2 v_uv; out vec4 f_color; uniform sampler2D Texture; uniform vec2 seed; uniform int iter; void main() { vec2 c = seed; int i; vec2 z = v_uv * vec2(2.0, 2.0); for (i = 0; i < iter; i++) { float x = (z.x * z.x - z.y * z.y) + c.x; float y = (z.y * z.x + z.x * z.y) + c.y; if ((x * x + y * y) > 4.0) { break; } z.x = x; z.y = y; } f_color = texture(Texture, vec2((i == iter ? 0.0 : float(i)) / 100.0, 0.0)); } ''', ) self.texture = self.load_texture_2d('colormaps/fractal.png') self.sampler = self.ctx.sampler(texture=self.texture) self.vao = self.ctx.vertex_array(self.program, []) self.vao.vertices = 3 def render(self, time, frame_time): self.ctx.clear() self.program['seed'] = (-0.8, 0.156) self.program['iter'] = 100 self.sampler.use() self.vao.render() if __name__ == '__main__': Example.run() moderngl-moderngl-773b733/examples/moderngl_window_resources.py000066400000000000000000000054351470420062000250710ustar00rootroot00000000000000import os import glm import moderngl import moderngl_window as mglw class Example(mglw.WindowConfig): title = 'Resource Loading with ModernGL Window' resizable = False gl_version = (3, 3) window_size = (800, 800) aspect_ratio = 1.0 resource_dir = os.path.normpath(os.path.join(__file__, '../data')) def __init__(self, **kwargs): super().__init__(**kwargs) self.obj = self.load_scene('models/sitting_dummy.obj') self.texture = self.load_texture_2d('textures/wood.jpg') self.program = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; gl_Position = Mvp * vec4(in_position, 1.0); } ''', fragment_shader=''' #version 330 uniform sampler2D Texture; uniform vec4 Color; uniform vec3 Light; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color; void main() { float lum = dot(normalize(v_norm), normalize(v_vert - Light)); lum = acos(lum) / 3.14159265; lum = clamp(lum, 0.0, 1.0); lum = lum * lum; lum = smoothstep(0.0, 1.0, lum); lum *= smoothstep(0.0, 80.0, v_vert.z) * 0.3 + 0.7; lum = lum * 0.8 + 0.2; vec3 color = texture(Texture, v_text).rgb; color = color * (1.0 - Color.a) + Color.rgb * Color.a; f_color = vec4(color * lum, 1.0); } ''', ) # Create a vao from the first root node (attribs are auto mapped) self.vao = self.obj.root_nodes[0].mesh.vao.instance(self.program) def camera_matrix(self): proj = glm.perspective(45.0, self.aspect_ratio, 0.1, 1000.0) look = glm.lookAt((-85.0, -180.0, 140.0), (0.0, 0.0, 65.0), (0.0, 0.0, 1.0)) return proj * look def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) self.program['Light'] = (-140.0, -300.0, 350.0) self.program['Color'] = (1.0, 1.0, 1.0, 0.25) self.program['Mvp'].write(self.camera_matrix()) self.texture.use() self.vao.render() if __name__ == '__main__': Example.run() moderngl-moderngl-773b733/examples/old/000077500000000000000000000000001470420062000177765ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/old/README.md000066400000000000000000000044451470420062000212640ustar00rootroot00000000000000# ModernGL Examples Before running examples make sure you install the requirements: ```bash pip install -r examples/requirements.txt ``` ## Running Examples All examples should use [moderngl-window] to make window creation and resource loading as simple as possible and ensures all supported platforms and covered. **Examples should work out of the box on Windows, Linux and OS X.** ## Options ``` optional arguments: -h, --help show this help message and exit -wnd {glfw,headless,pygame2,pyglet,pyqt5,pyside2,sdl2,tk}, --window {glfw,headless,pygame2,pyglet,pyqt5,pyside2,sdl2,tk} Name for the window type to use -fs, --fullscreen Open the window in fullscreen mode -vs VSYNC, --vsync VSYNC Enable or disable vsync -r RESIZABLE, --resizable RESIZABLE Enable/disable window resize -s SAMPLES, --samples SAMPLES Specify the desired number of samples to use for multisampling -c CURSOR, --cursor CURSOR Enable or disable displaying the mouse cursor --size SIZE Window size --size_mult SIZE_MULT Multiplier for the window size making it easy scale the window ``` For example: ```bash # Run example in fullscreen with 8 x MSAA, vsync and no visible mouse cursor python 03_alpha_blending.py --fullscreen --samples 8 --cursor off --vsync on # Run example using pyglet python 03_alpha_blending.py --window pyglet # Run example using pygame python 03_alpha_blending.py --window pygame # Run example using SDL2 python 03_alpha_blending.py --window sdl2 # Run example using PySide2 python 03_alpha_blending.py --window pyside2 # Run example using PyQt5 python 03_alpha_blending.py --window pyqt5 # Run example using glfw python 03_alpha_blending.py --window glfw # Run example using tkinter (no osx support yet) python 03_alpha_blending.py --window tk ``` ## Other Examples The examples directory also contains a **large amount of examples** contributed by various people over time. Browse around and see what you can find :) [moderngl-window] also has various examples. ## Old examples Also see the [old examples](old-examples). [moderngl-window]: https://github.com/moderngl/moderngl-window moderngl-moderngl-773b733/examples/old/_example.py000066400000000000000000000004351470420062000221440ustar00rootroot00000000000000import os import moderngl_window as mglw class Example(mglw.WindowConfig): gl_version = (3, 3) title = "ModernGL Example" window_size = (1280, 720) aspect_ratio = 16 / 9 resizable = True resource_dir = os.path.normpath(os.path.join(__file__, '../../data')) moderngl-moderngl-773b733/examples/old/attribute_locations.py000066400000000000000000000025271470420062000244340ustar00rootroot00000000000000''' Renders a blue triangle ''' import numpy as np from _example import Example class HelloWorld(Example): gl_version = (3, 3) title = "Hello World" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 layout (location = 3) in vec2 in_vert; layout (location = 7) in vec3 in_color; out vec3 v_color; void main() { v_color = in_color; gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 in vec3 v_color; out vec4 f_color; void main() { f_color = vec4(v_color, 1.0); } ''', ) vertices = np.array([ 0.0, 0.8, 0.3, 0.5, 1.0, -0.6, -0.8, 0.3, 0.5, 1.0, 0.6, -0.8, 0.3, 0.5, 1.0, ], dtype='f4') self.vbo = self.ctx.buffer(vertices) self.vao = self.ctx.vertex_array(self.prog, [ self.vbo.bind(3, 7), ]) def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render() if __name__ == '__main__': HelloWorld.run() moderngl-moderngl-773b733/examples/old/basic_alpha_blending.py000066400000000000000000000035421470420062000244440ustar00rootroot00000000000000''' Alpha blending ''' import numpy as np import moderngl from _example import Example class AlphaBlending(Example): gl_version = (3, 3) title = "Alpha Blending" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 vert; in vec4 vert_color; out vec4 frag_color; uniform vec2 scale; uniform float rotation; void main() { frag_color = vert_color; float r = rotation * (0.5 + gl_InstanceID * 0.05); mat2 rot = mat2(cos(r), sin(r), -sin(r), cos(r)); gl_Position = vec4((rot * vert) * scale, 0.0, 1.0); } ''', fragment_shader=''' #version 330 in vec4 frag_color; out vec4 color; void main() { color = vec4(frag_color); } ''', ) self.scale = self.prog['scale'] self.rotation = self.prog['rotation'] self.scale.value = (0.5, self.aspect_ratio * 0.5) vertices = np.array([ 1.0, 0.0, 1.0, 0.0, 0.0, 0.5, -0.5, 0.86, 0.0, 1.0, 0.0, 0.5, -0.5, -0.86, 0.0, 0.0, 1.0, 0.5, ], dtype='f4') self.vbo = self.ctx.buffer(vertices) self.vao = self.ctx.vertex_array(self.prog, [ self.vbo.bind('vert', 'vert_color'), ]) def render(self, time: float, frame_time: float): self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.BLEND) self.rotation.value = time self.vao.render(instances=10) if __name__ == '__main__': AlphaBlending.run() moderngl-moderngl-773b733/examples/old/basic_colors_and_texture.py000066400000000000000000000077351470420062000254300ustar00rootroot00000000000000''' Renders a floating, oscillating, 3d islans with lights ''' import numpy as np from pyrr import Matrix44 import moderngl from _example import Example class ColorsAndTexture(Example): gl_version = (3, 3) title = "Colors and Textures" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { gl_Position = Mvp * vec4(in_position, 1.0); v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; } ''', fragment_shader=''' #version 330 uniform vec3 Light; uniform vec3 Color; uniform bool UseTexture; uniform sampler2D Texture; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color; void main() { float lum = clamp(dot(normalize(Light - v_vert), normalize(v_norm)), 0.0, 1.0) * 0.8 + 0.2; if (UseTexture) { f_color = vec4(texture(Texture, v_text).rgb * lum, 1.0); } else { f_color = vec4(Color * lum, 1.0); } } ''', ) self.mvp = self.prog['Mvp'] self.light = self.prog['Light'] self.color = self.prog['Color'] self.use_texture = self.prog['UseTexture'] # Note: This is a fairly manual way to loading and rendering wavefront files. # There are easier ways when loading multiple objects in a single obj file. # Load obj files self.scene_ground = self.load_scene('scene-1-ground.obj') self.scene_grass = self.load_scene('scene-1-grass.obj') self.scene_billboard = self.load_scene('scene-1-billboard.obj') self.scene_holder = self.load_scene('scene-1-billboard-holder.obj') self.scene_image = self.load_scene('scene-1-billboard-image.obj') # Extract the VAOs from the scene self.vao_ground = self.scene_ground.root_nodes[0].mesh.vao.instance(self.prog) self.vao_grass = self.scene_grass.root_nodes[0].mesh.vao.instance(self.prog) self.vao_billboard = self.scene_billboard.root_nodes[0].mesh.vao.instance(self.prog) self.vao_holder = self.scene_holder.root_nodes[0].mesh.vao.instance(self.prog) self.vao_image = self.scene_image.root_nodes[0].mesh.vao.instance(self.prog) # texture on billboard self.texture = self.load_texture_2d('infographic-1.jpg') def render(self, time: float, frame_time: float): self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST | moderngl.CULL_FACE) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0) lookat = Matrix44.look_at( (47.697, -8.147, 24.498), (0.0, 0.0, 8.0), (0.0, 0.0, 1.0), ) rotate = Matrix44.from_z_rotation(np.sin(time) * 0.5 + 0.2) self.use_texture.value = False self.light.value = (67.69, -8.14, 52.49) self.mvp.write((proj * lookat * rotate).astype('f4')) self.color.value = (0.67, 0.49, 0.29) self.vao_ground.render() self.color.value = (0.46, 0.67, 0.29) self.vao_grass.render() self.color.value = (1.0, 1.0, 1.0) self.vao_billboard.render() self.color.value = (0.2, 0.2, 0.2) self.vao_holder.render() self.use_texture.value = True self.texture.use() self.vao_image.render() if __name__ == '__main__': ColorsAndTexture.run() moderngl-moderngl-773b733/examples/old/basic_empty_window.py000066400000000000000000000075101470420062000242410ustar00rootroot00000000000000import math import random from _example import Example class EmptyWindow(Example): gl_version = (3, 3) title = "Empty Window" window_size = (1280, 720) aspect_ratio = 16 / 9 resizable = True def __init__(self, **kwargs): super().__init__(**kwargs) def render(self, time: float, frame_time: float): self.ctx.clear( (math.sin(time) + 1.0) / 2, (math.sin(time + 2) + 1.0) / 2, (math.sin(time + 3) + 1.0) / 2, ) def resize(self, width: int, heigh: int): """ Pick window resizes in case we need yo update internal states when this happens. """ print("Window resized to", width, heigh) def iconify(self, iconify: bool): """Window hide/minimize and restore""" print("Window was iconified:", iconify) def key_event(self, key, action, modifiers): keys = self.wnd.keys # Key presses if action == keys.ACTION_PRESS: if key == keys.SPACE: print("SPACE key was pressed") # Using modifiers (shift and ctrl) if key == keys.Z and modifiers.shift: print("Shift + Z was pressed") if key == keys.Z and modifiers.ctrl: print("ctrl + Z was pressed") # Key releases elif action == self.wnd.keys.ACTION_RELEASE: if key == keys.SPACE: print("SPACE key was released") if action == keys.ACTION_PRESS: # Move the window around with AWSD if key == keys.A: self.wnd.position = self.wnd.position[0] - 20, self.wnd.position[1] if key == keys.D: self.wnd.position = self.wnd.position[0] + 20, self.wnd.position[1] if key == keys.W: self.wnd.position = self.wnd.position[0], self.wnd.position[1] - 20 if key == keys.S: self.wnd.position = self.wnd.position[0], self.wnd.position[1] + 20 # Resize window around with Shift + AWSD if self.wnd.modifiers.shift and key == keys.A: self.wnd.size = self.wnd.size[0] - 50, self.wnd.size[1] if self.wnd.modifiers.shift and key == keys.D: self.wnd.size = self.wnd.size[0] + 50, self.wnd.size[1] if self.wnd.modifiers.shift and key == keys.W: self.wnd.size = self.wnd.size[0], self.wnd.size[1] - 50 if self.wnd.modifiers.shift and key == keys.S: self.wnd.size = self.wnd.size[0], self.wnd.size[1] + 50 # toggle cursor if key == keys.C: self.wnd.cursor = not self.wnd.cursor # Shuffle window title if key == keys.T: title = list(self.wnd.title) random.shuffle(title) self.wnd.title = ''.join(title) # Toggle mouse exclusivity if key == keys.M: self.wnd.mouse_exclusivity = not self.wnd.mouse_exclusivity def mouse_position_event(self, x, y, dx, dy): print("Mouse position pos={} {} delta={} {}".format(x, y, dx, dy)) def mouse_drag_event(self, x, y, dx, dy): print("Mouse drag pos={} {} delta={} {}".format(x, y, dx, dy)) def mouse_scroll_event(self, x_offset, y_offet): print("mouse_scroll_event", x_offset, y_offet) def mouse_press_event(self, x, y, button): print("Mouse button {} pressed at {}, {}".format(button, x, y)) print("Mouse states:", self.wnd.mouse_states) def mouse_release_event(self, x: int, y: int, button: int): print("Mouse button {} released at {}, {}".format(button, x, y)) print("Mouse states:", self.wnd.mouse_states) def unicode_char_entered(self, char): print("unicode_char_entered:", char) if __name__ == '__main__': EmptyWindow.run() moderngl-moderngl-773b733/examples/old/basic_index_buffer.py000066400000000000000000000031311470420062000241470ustar00rootroot00000000000000''' Renders 2 triangles that share the same head using index buffers (ibo) ''' import numpy as np from _example import Example class IndexBuffer(Example): gl_version = (3, 3) title = "Index Buffer" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 f_color; void main() { f_color = vec4(0.3, 0.5, 1.0, 1.0); } ''', ) # 2 triangles sharing the head vertex (0,0) vertices = np.array([ 0.0, 0.0, -0.6, -0.8, 0.6, -0.8, 0.6, 0.8, -0.6, 0.8, ], dtype='f4') # Indices are given to specify the order of drawing indices = np.array([0, 1, 2, 0, 3, 4], dtype='i4') self.vbo = self.ctx.buffer(vertices) self.ibo = self.ctx.buffer(indices) vao_content = [ # 2 floats are assigned to the 'in' variable named 'in_vert' in the shader code self.vbo.bind('in_vert', layout='2f'), ] self.vao = self.ctx.vertex_array(self.prog, vao_content, self.ibo) def render(self, time: float, frame_time: float): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render() if __name__ == '__main__': IndexBuffer.run() moderngl-moderngl-773b733/examples/old/basic_perspective_projection.py000066400000000000000000000055241470420062000263040ustar00rootroot00000000000000''' Renders a blue triangle ''' import numpy as np import moderngl from _example import Example class PerspectiveProjection(Example): gl_version = (3, 3) title = "Perspective Projection" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec3 vert; uniform float z_near; uniform float z_far; uniform float fovy; uniform float ratio; uniform vec3 center; uniform vec3 eye; uniform vec3 up; mat4 perspective() { float zmul = (-2.0 * z_near * z_far) / (z_far - z_near); float ymul = 1.0 / tan(fovy * 3.14159265 / 360); float xmul = ymul / ratio; return mat4( xmul, 0.0, 0.0, 0.0, 0.0, ymul, 0.0, 0.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, zmul, 0.0 ); } mat4 lookat() { vec3 forward = normalize(center - eye); vec3 side = normalize(cross(forward, up)); vec3 upward = cross(side, forward); return mat4( side.x, upward.x, -forward.x, 0, side.y, upward.y, -forward.y, 0, side.z, upward.z, -forward.z, 0, -dot(eye, side), -dot(eye, upward), dot(eye, forward), 1 ); } void main() { gl_Position = perspective() * lookat() * vec4(vert, 1.0); } ''', fragment_shader=''' #version 330 out vec4 color; void main() { color = vec4(0.04, 0.04, 0.04, 1.0); } ''', ) self.prog['z_near'].value = 0.1 self.prog['z_far'].value = 1000.0 self.prog['ratio'].value = self.aspect_ratio self.prog['fovy'].value = 60 self.prog['eye'].value = (3, 3, 3) self.prog['center'].value = (0, 0, 0) self.prog['up'].value = (0, 0, 1) grid = [] for i in range(65): grid.append([i - 32, -32.0, 0.0, i - 32, 32.0, 0.0]) grid.append([-32.0, i - 32, 0.0, 32.0, i - 32, 0.0]) grid = np.array(grid, dtype='f4') self.vbo = self.ctx.buffer(grid) self.vao = self.ctx.vertex_array(self.prog, [self.vbo.bind('vert')]) def render(self, time: float, frame_time: float): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render(moderngl.LINES, 65 * 4) if __name__ == '__main__': PerspectiveProjection.run() moderngl-moderngl-773b733/examples/old/basic_simple_color_triangle.py000066400000000000000000000036231470420062000260710ustar00rootroot00000000000000''' Renders a triangle that has all RGB combinations ''' import numpy as np from _example import Example class SimpleColorTriangle(Example): gl_version = (3, 3) aspect_ratio = 16 / 9 title = "Simple Color Triangle" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; in vec3 in_color; out vec3 v_color; // Goes to the fragment shader void main() { gl_Position = vec4(in_vert, 0.0, 1.0); v_color = in_color; } ''', fragment_shader=''' #version 330 in vec3 v_color; out vec4 f_color; void main() { // We're not interested in changing the alpha value f_color = vec4(v_color, 1.0); f_color.rgb = pow(f_color.rgb, vec3(1.0 / 2.2)); } ''', ) # Point coordinates are put followed by the vec3 color values vertices = np.array([ # x, y, red, green, blue 0.0, 0.8, 1.0, 0.0, 0.0, -0.6, -0.8, 0.0, 1.0, 0.0, 0.6, -0.8, 0.0, 0.0, 1.0, ], dtype='f4') self.vbo = self.ctx.buffer(vertices) # We control the 'in_vert' and `in_color' variables self.vao = self.ctx.vertex_array( self.prog, [ # Map in_vert to the first 2 floats # Map in_color to the next 3 floats self.vbo.bind('in_vert', 'in_color', layout='2f 3f'), ], ) def render(self, time: float, frame_time: float): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render() if __name__ == '__main__': SimpleColorTriangle.run() moderngl-moderngl-773b733/examples/old/basic_uniforms_and_attributes.py000066400000000000000000000033271470420062000264500ustar00rootroot00000000000000''' Renders a rotating and scaling triangle ''' import numpy as np from _example import Example class UniformsAndAttributes(Example): gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 vert; uniform vec2 scale; uniform float rotation; void main() { mat2 rot = mat2( cos(rotation), sin(rotation), -sin(rotation), cos(rotation) ); gl_Position = vec4((rot * vert) * scale, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 color; void main() { color = vec4(0.3, 0.5, 1.0, 1.0); } ''', ) self.scale = self.prog['scale'] self.rotation = self.prog['rotation'] self.scale.value = (self.wnd.width / self.wnd.height * 0.75, 0.25) vertices = np.array([ 1.0, 0.0, -0.5, 0.86, -0.5, -0.86, ], dtype='f4') self.vbo = self.ctx.buffer(vertices) self.vao = self.ctx.vertex_array(self.prog, [self.vbo.bind('vert')]) def render(self, time: float, frame_time: float): sin_scale = np.sin(np.deg2rad(time * 60)) self.ctx.clear(1.0, 1.0, 1.0) self.vao.render() self.rotation.value = time # Change the scale of the triangle sin-ly self.scale.value = (sin_scale * 0.75, 0.75) if __name__ == '__main__': UniformsAndAttributes.run() moderngl-moderngl-773b733/examples/old/bind_frag_data_location.py000066400000000000000000000051351470420062000251500ustar00rootroot00000000000000import moderngl import numpy as np from pyrr import Matrix44 from _example import Example class CrateExample(Example): title = "Crate" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { gl_Position = Mvp * vec4(in_position, 1.0); v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; } ''', fragment_shader=''' #version 330 uniform vec3 Light; uniform sampler2D Texture; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color_a; out vec4 f_color_b; out vec4 f_color_c; void main() { float lum = clamp(dot(normalize(Light - v_vert), normalize(v_norm)), 0.0, 1.0) * 0.8 + 0.2; f_color_a = vec4(texture(Texture, v_text).rgb * lum, 1.0); f_color_b = vec4(texture(Texture, v_text).rgb * lum * vec3(0.5, 1.1, 0.6), 1.0); f_color_c = vec4(texture(Texture, v_text).rgb * lum * vec3(0.5, 0.6, 1.1), 1.0); } ''', fragment_outputs={ 'f_color_a': 2, 'f_color_b': 1, 'f_color_c': 0, }, ) self.mvp = self.prog['Mvp'] self.light = self.prog['Light'] self.scene = self.load_scene('crate.obj') self.vao = self.scene.root_nodes[0].mesh.vao.instance(self.prog) self.texture = self.load_texture_2d('crate.png') def render(self, time, frame_time): angle = time self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) camera_pos = (np.cos(angle) * 3.0, np.sin(angle) * 3.0, 2.0) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 100.0) lookat = Matrix44.look_at( camera_pos, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0), ) self.mvp.write((proj * lookat).astype('f4')) self.light.value = camera_pos self.texture.use() self.vao.render() if __name__ == '__main__': CrateExample.run() moderngl-moderngl-773b733/examples/old/bindless_textures.py000066400000000000000000000046331470420062000241240ustar00rootroot00000000000000import moderngl import numpy as np from pyrr import Matrix44 from _example import Example class CrateExample(Example): title = "Crate" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { gl_Position = Mvp * vec4(in_position, 1.0); v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; } ''', fragment_shader=''' #version 330 // #extension GL_ARB_explicit_uniform_location : require #extension GL_ARB_bindless_texture : enable uniform vec3 Light; layout (bindless_sampler) uniform sampler2D Texture; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color; void main() { float lum = clamp(dot(normalize(Light - v_vert), normalize(v_norm)), 0.0, 1.0) * 0.8 + 0.2; f_color = vec4(texture(Texture, v_text).rgb * lum, 1.0); } ''', ) self.mvp = self.prog['Mvp'] self.light = self.prog['Light'] self.scene = self.load_scene('crate.obj') self.vao = self.scene.root_nodes[0].mesh.vao.instance(self.prog) self.texture = self.load_texture_2d('crate.png') self.prog['Texture'].handle = self.texture.get_handle() def render(self, time, frame_time): angle = time self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) camera_pos = (np.cos(angle) * 3.0, np.sin(angle) * 3.0, 2.0) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 100.0) lookat = Matrix44.look_at( camera_pos, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0), ) self.mvp.write((proj * lookat).astype('f4')) self.light.value = camera_pos # self.texture.use() self.vao.render() if __name__ == '__main__': CrateExample.run() moderngl-moderngl-773b733/examples/old/compute_shader_render_texture.py000066400000000000000000000056721470420062000265030ustar00rootroot00000000000000""" Compute shader renders a 32 x 32 grid to a 512, 512 texture """ import moderngl as mgl from _example import Example from moderngl_window import geometry class RenderTextureCompute(Example): title = "Render Texture Using Compute Shader" gl_version = (4, 3) aspect_ratio = 1.0 def __init__(self, **kwargs): super().__init__(**kwargs) # reference compute shader: http://wili.cc/blog/opengl-cs.html self.compute = self.ctx.compute_shader(''' #version 430 layout (local_size_x = 16, local_size_y = 16) in; // match the input texture format! layout(rgba8, location=0) writeonly uniform image2D destTex; uniform float time; void main() { // texel coordinate we are writing to ivec2 texelPos = ivec2(gl_GlobalInvocationID.xy); // Calculate 1.0 - distance from the center in each work group float local = 1.0 - length(vec2(ivec2(gl_LocalInvocationID.xy) - 8) / 8.0); // Wave covering the screen diagonally float global = sin(float(gl_WorkGroupID.x + gl_WorkGroupID.y) * 0.1 + time) / 2.0 + 0.5; imageStore( destTex, texelPos, vec4( local, global, 0.0, 1.0 ) ); } ''') self.compute['destTex'] = 0 # For rendering a simple textured quad self.quad_program = self.ctx.program( vertex_shader=""" #version 330 in vec3 in_position; in vec2 in_texcoord_0; out vec2 uv; void main() { gl_Position = vec4(in_position, 1.0); uv = in_texcoord_0; } """, fragment_shader=""" #version 330 uniform sampler2D texture0; out vec4 fragColor; in vec2 uv; void main() { fragColor = texture(texture0, uv); } """, ) # RGB_8 texture self.texture = self.ctx.texture((256, 256), 4) self.texture.filter = mgl.NEAREST, mgl.NEAREST self.quad_fs = geometry.quad_fs() def render(self, time, frame_time): self.ctx.clear(0.3, 0.3, 0.3) w, h = self.texture.size gw, gh = 16, 16 nx, ny, nz = int(w/gw), int(h/gh), 1 try: self.compute['time'] = time except Exception: pass # Automatically binds as a GL_R32F / r32f (read from the texture) self.texture.bind_to_image(0, read=False, write=True) self.compute.run(nx, ny, nz) # Render texture self.texture.use(location=0) self.quad_fs.render(self.quad_program) if __name__ == '__main__': RenderTextureCompute.run() moderngl-moderngl-773b733/examples/old/compute_shader_ssbo.py000066400000000000000000000153321470420062000244040ustar00rootroot00000000000000 ''' Example of using shader storage buffer in compute shader. We read from a buffer and write the result to another buffer. Every frame we swap the buffers around transforming positions of balls. Buffer.bind_to_storage_buffer is used to bind a buffer as storage buffer to a specific binding point specified in the compute program. In addition we render the balls using a geometry shader to easily batch draw them all in one render call. author: minu jeong modified by: einarf ''' import math import random import numpy as np from _example import Example items_vertex_shader_code = """ #version 430 in vec4 in_vert; in vec4 in_col; out vec4 v_color; void main() { gl_Position = in_vert; // x, y, 0, radius v_color = in_col; } """ # Geometry shader turning the points into triangle strips. # This can also be done with point sprites. items_geo_shader = """ #version 330 layout(points) in; layout(triangle_strip, max_vertices=4) out; in vec4 v_color[]; out vec2 uv; out vec4 color; void main() { float radius = gl_in[0].gl_Position.w; vec2 pos = gl_in[0].gl_Position.xy; // Emit the triangle strip creating a "quad" // Lower left gl_Position = vec4(pos + vec2(-radius, -radius), 0, 1); color = v_color[0]; uv = vec2(0, 0); EmitVertex(); // upper left gl_Position = vec4(pos + vec2(-radius, radius), 0, 1); color = v_color[0]; uv = vec2(0, 1); EmitVertex(); // lower right gl_Position = vec4(pos + vec2(radius, -radius), 0, 1); color = v_color[0]; uv = vec2(1, 0); EmitVertex(); // upper right gl_Position = vec4(pos + vec2(radius, radius), 0, 1); color = v_color[0]; uv = vec2(1, 1); EmitVertex(); EndPrimitive(); } """ items_fragment_shader_code = """ #version 430 in vec2 uv; in vec4 color; out vec4 out_color; void main() { // Calculate the length from the center of the "quad" // using texture coordinates discarding fragments // further away than 0.5 creating a circle. if (length(vec2(0.5, 0.5) - uv.xy) > 0.5) { discard; } out_color = color; } """ # calc position with compute shader compute_worker_shader_code = """ #version 430 #define GROUP_SIZE %COMPUTE_SIZE% layout(local_size_x=GROUP_SIZE) in; // All values are vec4s because of block alignment rules (keep it simple). // We could also declare all values as floats to make it tightly packed. // See : https://www.khronos.org/opengl/wiki/Interface_Block_(GLSL)#Memory_layout struct Ball { vec4 pos; // x, y, 0, radius vec4 vel; // x, y (velocity) vec4 col; // r, g, b (color) }; layout(std430, binding=0) buffer balls_in { Ball balls[]; } In; layout(std430, binding=1) buffer balls_out { Ball balls[]; } Out; void main() { int x = int(gl_GlobalInvocationID); Ball in_ball = In.balls[x]; vec4 p = in_ball.pos.xyzw; vec4 v = in_ball.vel.xyzw; p.xy += v.xy; float rad = p.w * 0.5; if (p.x - rad <= -1.0) { p.x = -1.0 + rad; v.x *= -0.98; } else if (p.x + rad >= 1.0) { p.x = 1.0 - rad; v.x *= -0.98; } if (p.y - rad <= -1.0) { p.y = -1.0 + rad; v.y *= -0.98; } else if (p.y + rad >= 1.0) { p.y = 1.0 - rad; v.y *= -0.98; } v.y += -0.001; Ball out_ball; out_ball.pos.xyzw = p.xyzw; out_ball.vel.xyzw = v.xyzw; vec4 c = in_ball.col.xyzw; out_ball.col.xyzw = c.xyzw; Out.balls[x] = out_ball; } """ class ComputeShaderSSBO(Example): title = "Compute Shader SSBO" gl_version = 4, 3 # Required opengl version window_size = 600, 600 # Initial window size aspect_ratio = 1.0 # Force viewport aspect ratio (regardless of window size) def __init__(self, **kwargs): super().__init__(**kwargs) self.COUNT = 256 # number of balls self.STRUCT_SIZE = 12 # number of floats per item/ball # Program for drawing the balls / items self.program = self.ctx.program( vertex_shader=items_vertex_shader_code, geometry_shader=items_geo_shader, fragment_shader=items_fragment_shader_code ) # Load compute shader compute_shader_code_parsed = compute_worker_shader_code.replace("%COMPUTE_SIZE%", str(self.COUNT)) self.compute_shader = self.ctx.compute_shader(compute_shader_code_parsed) # Create the two buffers the compute shader will write and read from compute_data = np.fromiter(self.gen_initial_data(), dtype="f4") self.compute_buffer_a = self.ctx.buffer(compute_data) self.compute_buffer_b = self.ctx.buffer(compute_data) # Prepare vertex arrays to drawing balls using the compute shader buffers are input # We use 4x4 (padding format) to skip the velocity data (not needed for drawing the balls) self.balls_a = self.ctx.vertex_array( self.program, [self.compute_buffer_a.bind('in_vert', 'in_col', layout='4f 4x4 4f')], ) self.balls_b = self.ctx.vertex_array( self.program, [self.compute_buffer_b.bind('in_vert', 'in_col', layout='4f 4x4 4f')], ) def gen_initial_data(self): """Generator function creating the initial buffer data""" for i in range(self.COUNT): _angle = (i / self.COUNT) * math.pi * 2.0 _dist = 0.125 radius = random.random() * 0.01 + 0.01 # position and radius (vec4) yield math.cos(_angle) * _dist yield math.sin(_angle) * _dist yield 0.0 yield radius # velocity (vec4) _v = random.random() * 0.005 + 0.01 yield math.cos(_angle) * _v yield math.sin(_angle) * _v yield 0.0 yield 0.0 # color (vec4) yield 1.0 * random.random() yield 1.0 * random.random() yield 1.0 * random.random() yield 1.0 def render(self, time, frame_time): # Calculate the next position of the balls with compute shader self.compute_buffer_a.bind_to_storage_buffer(0) self.compute_buffer_b.bind_to_storage_buffer(1) self.compute_shader.run(group_x=self.STRUCT_SIZE) # Batch draw the balls self.balls_b.render(mode=self.ctx.POINTS) # Swap the buffers and vertex arrays around for next frame self.compute_buffer_a, self.compute_buffer_b = self.compute_buffer_b, self.compute_buffer_a self.balls_a, self.balls_b = self.balls_b, self.balls_a if __name__ == "__main__": ComputeShaderSSBO.run() moderngl-moderngl-773b733/examples/old/conways_game_of_life.py000066400000000000000000000127401470420062000245130ustar00rootroot00000000000000""" A Game of Life implementation using transform feedback. We calculate the next state of the map with transform() meaning a vertex shader will generate the new state into a buffer. This buffer is then written into the texture we display. This is a fast vram to vram copy. Comments: Another way to do this is simply rendering to Framebuffers. """ import numpy as np import moderngl from _example import Example class Conway(Example): title = "Conway's Game of Life" window_size = 800, 800 def __init__(self, **kwargs): super().__init__(**kwargs) # How often the map should be updated self.update_delay = 1 / 60 # updates per second self.last_updated = 0 # size of the map self.width, self.height = 400, 400 # Force the window to calculate black borders if needed to retain the aspect ratio self.wnd.fixed_aspect_ratio = self.width / self.height # Initial state of the map (random) pixels = np.round(np.random.rand(self.width, self.height)).astype('f4') # Program drawing the result to the screen. # This is rendered simply using a textured screen aligned triangle strip self.display_prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; in vec2 in_texcoord; out vec2 v_text; void main() { v_text = in_texcoord; gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 // Will read from texture bound to channel / locaton 0 by default uniform sampler2D Texture; // Interpolated texture coordinate from vertex shader in vec2 v_text; // The fragment ending up on the screen out vec4 f_color; void main() { f_color = texture(Texture, v_text); } ''', ) # Program calculating the next state of the map self.transform_prog = self.ctx.program( vertex_shader=''' #version 330 uniform sampler2D Texture; out float out_vert; #define LIVING 0.0 #define DEAD 1.0 bool cell(int x, int y) { // get the texture size ivec2 tSize = textureSize(Texture, 0).xy; // Ensure lookups are not going outside the texture area because // texelFetch do not support texture repeat / wrap modes return texelFetch(Texture, ivec2((x + tSize.x) % tSize.x, (y + tSize.y) % tSize.y), 0).r < 0.5; } void main() { int width = textureSize(Texture, 0).x; ivec2 in_text = ivec2(gl_VertexID % width, gl_VertexID / width); bool living = cell(in_text.x, in_text.y); int neighbours = 0; if (cell(in_text.x - 1, in_text.y - 1)) neighbours++; if (cell(in_text.x - 1, in_text.y + 0)) neighbours++; if (cell(in_text.x - 1, in_text.y + 1)) neighbours++; if (cell(in_text.x + 1, in_text.y - 1)) neighbours++; if (cell(in_text.x + 1, in_text.y + 0)) neighbours++; if (cell(in_text.x + 1, in_text.y + 1)) neighbours++; if (cell(in_text.x + 0, in_text.y + 1)) neighbours++; if (cell(in_text.x + 0, in_text.y - 1)) neighbours++; if (living) { out_vert = (neighbours == 2 || neighbours == 3) ? LIVING : DEAD; } else { out_vert = (neighbours == 3) ? LIVING : DEAD; } } ''', varyings=['out_vert'] ) # Create the map texture self.texture = self.ctx.texture((self.width, self.height), 1, pixels.tobytes(), dtype='f4') self.texture.filter = moderngl.NEAREST, moderngl.NEAREST self.texture.swizzle = 'RRR1' # What components texelFetch will get from the texture (in shader) # A quad covering the screen with texture coordinates self.vbo = self.ctx.buffer(np.array([ # x y u v -1.0, -1.0, 0, 0, # lower left -1.0, 1.0, 0, 1, # upper left 1.0, -1.0, 1, 0, # lower right 1.0, 1.0, 1, 1, # upper right ], dtype="f4")) self.vao = self.ctx.vertex_array(self.display_prog, [self.vbo.bind('in_vert', 'in_texcoord')]) # Transform vertex array to generate new map state self.tao = self.ctx.vertex_array(self.transform_prog, []) self.pbo = self.ctx.buffer(reserve=pixels.nbytes) # buffer to store the result def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) # Bind texture to channel 0 self.texture.use(location=0) if time - self.last_updated > self.update_delay: # Generate the new map and write that to the pbo buffer self.tao.transform(self.pbo, vertices=self.width * self.height) # Copy the pbo into the texture self.texture.write(self.pbo) self.last_updated = time # Render the texture self.vao.render(moderngl.TRIANGLE_STRIP) if __name__ == '__main__': Conway.run() moderngl-moderngl-773b733/examples/old/crate.py000066400000000000000000000042711470420062000214520ustar00rootroot00000000000000import moderngl import numpy as np from pyrr import Matrix44 from _example import Example class CrateExample(Example): title = "Crate" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { gl_Position = Mvp * vec4(in_position, 1.0); v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; } ''', fragment_shader=''' #version 330 uniform vec3 Light; uniform sampler2D Texture; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color; void main() { float lum = clamp(dot(normalize(Light - v_vert), normalize(v_norm)), 0.0, 1.0) * 0.8 + 0.2; f_color = vec4(texture(Texture, v_text).rgb * lum, 1.0); } ''', ) self.mvp = self.prog['Mvp'] self.light = self.prog['Light'] self.scene = self.load_scene('crate.obj') self.vao = self.scene.root_nodes[0].mesh.vao.instance(self.prog) self.texture = self.load_texture_2d('crate.png') def render(self, time, frame_time): angle = time self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) camera_pos = (np.cos(angle) * 3.0, np.sin(angle) * 3.0, 2.0) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 100.0) lookat = Matrix44.look_at( camera_pos, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0), ) self.mvp.write((proj * lookat).astype('f4')) self.light.value = camera_pos self.texture.use() self.vao.render() if __name__ == '__main__': CrateExample.run() moderngl-moderngl-773b733/examples/old/crate_uniform_buffer.py000066400000000000000000000047741470420062000245520ustar00rootroot00000000000000import struct import moderngl import numpy as np from pyrr import Matrix44 from _example import Example class CrateExample(Example): title = "Crate" def __init__(self, **kwargs): super().__init__(**kwargs) self.uniform_buffer = self.ctx.buffer(reserve=256) self.prog = self.ctx.program( vertex_shader=''' #version 330 layout (std140) uniform Common { mat4 Mvp; vec3 Light; }; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { gl_Position = Mvp * vec4(in_position, 1.0); v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; } ''', fragment_shader=''' #version 330 layout (std140) uniform Common { mat4 Mvp; vec3 Light; }; uniform sampler2D Texture; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color; void main() { float lum = clamp(dot(normalize(Light - v_vert), normalize(v_norm)), 0.0, 1.0) * 0.8 + 0.2; f_color = vec4(texture(Texture, v_text).rgb * lum, 1.0); } ''', ) self.prog['Common'].binding = 2 self.uniform_buffer.bind_to_uniform_block(2) self.scene = self.load_scene('crate.obj') self.vao = self.scene.root_nodes[0].mesh.vao.instance(self.prog) self.texture = self.load_texture_2d('crate.png') def render(self, time, frame_time): angle = time self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) camera_pos = (np.cos(angle) * 3.0, np.sin(angle) * 3.0, 2.0) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 100.0) lookat = Matrix44.look_at( camera_pos, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0), ) mvp = (proj * lookat).astype('f4').tobytes() self.uniform_buffer.write(struct.pack('=64s3f4x', mvp, *camera_pos)) self.texture.use() self.vao.render() if __name__ == '__main__': CrateExample.run() moderngl-moderngl-773b733/examples/old/custom_window/000077500000000000000000000000001470420062000226775ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/old/custom_window/creating_separate_window.py000066400000000000000000000031151470420062000303200ustar00rootroot00000000000000# Example of creating a window without # enclosing code in modengl_window.WindowConfig class # Description: This example shows how to create a window as a separate object. # Note: Only one window can be used. import moderngl as gl import moderngl_window as glw import struct # Create window window_cls = glw.get_local_window_cls('pyglet') window = window_cls( size=(1024, 512), fullscreen=False, title='Separate window', resizable=False, vsync=True, gl_version=(3, 3)) ctx = window.ctx glw.activate_context(window, ctx=ctx) window.clear() window.swap_buffers() # Window prog prog = ctx.program( vertex_shader=''' #version 330 in vec3 in_vert; in vec4 in_color; uniform mat4 prj; out vec4 o_color; void main() { gl_Position = prj*vec4(in_vert.xyz, 1.0); o_color = in_color; } ''', fragment_shader=''' #version 330 in vec4 o_color; out vec4 f_color; void main() { f_color = o_color; } ''') # Preparing content = [ .3, .3, -.5, 1, 0, 0, 1, .3, -.3, -.5, 1, 0, 0, 1, -.3, .3, -.4, 1, 0, 0, 1, .3, .4, -.5, 0, 0, 1, 1, .3, -.2, -.5, 0, 0, 1, 1, -.3, .4, -.45, 0, 0, 1, 1 ] buf = ctx.buffer(struct.pack(f'{len(content)}f', *content)) vao = ctx.vertex_array(prog, buf, 'in_vert', 'in_color') f = 1 n = 0.1 prj = ( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, -(f+n)/(f-n), -1, 0, 0, -(2*f*n)/(f-n), 0 ) vao.program['prj'] = prj # Render loop ctx.enable(gl.DEPTH_TEST) while not window.is_closing: window.fbo.use() window.fbo.clear() vao.render() window.swap_buffers() moderngl-moderngl-773b733/examples/old/custom_window/qtmoderngl.py000066400000000000000000000026411470420062000254300ustar00rootroot00000000000000from PyQt5 import QtGui, QtWidgets, QtCore, QtOpenGL import moderngl # pylint: disable=E0202 class QModernGLWidget(QtOpenGL.QGLWidget): def __init__(self): fmt = QtOpenGL.QGLFormat() fmt.setVersion(3, 3) fmt.setProfile(QtOpenGL.QGLFormat.CoreProfile) fmt.setSampleBuffers(True) self.timer = QtCore.QElapsedTimer() super(QModernGLWidget, self).__init__(fmt, None) def initializeGL(self): pass def paintGL(self): self.ctx = moderngl.create_context() self.screen = self.ctx.detect_framebuffer() self.init() self.render() self.paintGL = self.render def init(self): pass def render(self): pass class QModernGLWidgetOld(QtWidgets.QOpenGLWidget): def __init__(self): super(QModernGLWidgetOld, self).__init__() fmt = QtGui.QSurfaceFormat() fmt.setVersion(3, 3) fmt.setProfile(QtGui.QSurfaceFormat.CoreProfile) fmt.setDepthBufferSize(24) fmt.setSwapInterval(0) fmt.setSamples(8) self.setFormat(fmt) def initializeGL(self): pass def paintGL(self): self.ctx = moderngl.create_context() self.screen = self.ctx.detect_framebuffer(self.defaultFramebufferObject()) self.init() self.render() self.paintGL = self.render def init(self): pass def render(self): pass moderngl-moderngl-773b733/examples/old/empty_framebuffer.py000066400000000000000000000036761470420062000240660ustar00rootroot00000000000000''' Renders a color triangle with imageStore ''' from _example import Example class HelloWorld(Example): gl_version = (4, 5) title = "Empty Framebuffer" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 450 core out vec3 v_color; vec2 positions[3] = vec2[]( vec2(0.0, 0.8), vec2(-0.6, -0.8), vec2(0.6, -0.8) ); vec3 colors[3] = vec3[]( vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0) ); void main() { gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0); v_color = colors[gl_VertexID]; } ''', fragment_shader=''' #version 450 core in vec3 v_color; layout(rgba8, binding = 0) writeonly uniform image2D output_image; void main() { imageStore(output_image, ivec2(gl_FragCoord.xy), vec4(v_color, 1.0)); } ''', ) self.prog['output_image'] = 0 self.texture = self.ctx.texture(self.window_size, components=4) self.texture.bind_to_image(0, read=False, write=True) self.empty_framebuffer = self.ctx.empty_framebuffer(self.window_size) self.vao = self.ctx.vertex_array(self.prog, []) self.vao.scope = self.ctx.scope(self.empty_framebuffer) self.vao.vertices = 3 self.fbo = self.ctx.framebuffer([self.texture]) def render(self, time, frame_time): self.fbo.clear(1.0, 1.0, 1.0, 1.0) self.vao.render() self.ctx.memory_barrier() self.ctx.copy_framebuffer(self.ctx.screen, self.fbo) if __name__ == '__main__': HelloWorld.run() moderngl-moderngl-773b733/examples/old/empty_vertex_array.py000066400000000000000000000026141470420062000243040ustar00rootroot00000000000000''' Renders a blue triangle ''' from _example import Example class HelloWorld(Example): gl_version = (3, 3) title = "Hello World" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 out vec3 v_color; vec2 positions[3] = vec2[]( vec2(0.0, 0.8), vec2(-0.6, -0.8), vec2(0.6, -0.8) ); vec3 colors[3] = vec3[]( vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0) ); void main() { gl_Position = vec4(positions[gl_VertexID], 0.0, 1.0); v_color = colors[gl_VertexID]; } ''', fragment_shader=''' #version 330 in vec3 v_color; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(v_color, 1.0); } ''', ) self.vao = self.ctx.vertex_array(self.prog, []) self.vao.vertices = 3 def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render() if __name__ == '__main__': HelloWorld.run() moderngl-moderngl-773b733/examples/old/empty_vertexbuffer.py000066400000000000000000000035271470420062000243040ustar00rootroot00000000000000""" Render using empty Vertexbuffer. Renders 100 triangels emitted by a geometry shaders. In addition we test if instancing is working passing gl_InstanceID from the vertex shader. """ import moderngl from _example import Example class HelloWorld(Example): gl_version = (3, 3) title = "Empty Vertexbuffer" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 out int inst; void main() { inst = gl_InstanceID; } ''', geometry_shader=''' #version 330 layout (points) in; layout (triangle_strip, max_vertices = 3) out; in int inst[1]; void main() { float x = float(gl_PrimitiveIDIn / 10) / 9 - 0.5 + inst[0] / 20.0; float y = float(gl_PrimitiveIDIn % 10) / 9 - 0.5 + inst[0] / 20.0; gl_Position = vec4(x - 0.03, y - 0.03, 0.0, 1.0); EmitVertex(); gl_Position = vec4(x + 0.03, y - 0.03, 0.0, 1.0); EmitVertex(); gl_Position = vec4(x, y + 0.03, 0.0, 1.0); EmitVertex(); EndPrimitive(); } ''', fragment_shader=''' #version 330 out vec4 f_color; void main() { f_color = vec4(0.3, 0.5, 1.0, 1.0); } ''', ) self.vao = self.ctx.vertex_array(self.prog, []) def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render(mode=moderngl.POINTS, vertices=100, instances=2) if __name__ == '__main__': HelloWorld.run() moderngl-moderngl-773b733/examples/old/fragment_output.py000066400000000000000000000051351470420062000235770ustar00rootroot00000000000000import moderngl import numpy as np from pyrr import Matrix44 from _example import Example class CrateExample(Example): title = "Crate" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { gl_Position = Mvp * vec4(in_position, 1.0); v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; } ''', fragment_shader=''' #version 330 uniform vec3 Light; uniform sampler2D Texture; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color_a; out vec4 f_color_b; out vec4 f_color_c; void main() { float lum = clamp(dot(normalize(Light - v_vert), normalize(v_norm)), 0.0, 1.0) * 0.8 + 0.2; f_color_a = vec4(texture(Texture, v_text).rgb * lum, 1.0); f_color_b = vec4(texture(Texture, v_text).rgb * lum * vec3(0.5, 1.1, 0.6), 1.0); f_color_c = vec4(texture(Texture, v_text).rgb * lum * vec3(0.5, 0.6, 1.1), 1.0); } ''', fragment_outputs={ 'f_color_a': 1, 'f_color_b': 0, 'f_color_c': 2, }, ) self.mvp = self.prog['Mvp'] self.light = self.prog['Light'] self.scene = self.load_scene('crate.obj') self.vao = self.scene.root_nodes[0].mesh.vao.instance(self.prog) self.texture = self.load_texture_2d('crate.png') def render(self, time, frame_time): angle = time self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) camera_pos = (np.cos(angle) * 3.0, np.sin(angle) * 3.0, 2.0) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 100.0) lookat = Matrix44.look_at( camera_pos, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0), ) self.mvp.write((proj * lookat).astype('f4')) self.light.value = camera_pos self.texture.use() self.vao.render() if __name__ == '__main__': CrateExample.run() moderngl-moderngl-773b733/examples/old/geometry_shader_sprites.py000066400000000000000000000155061470420062000253110ustar00rootroot00000000000000""" Quick and dirty example showing how sprites can be rendered using a geometry shader. We also show simple scrolling with projection matrix. The goal is to redice the sprite data on the client as much as possible. We can define a sprite by its position, size and rotation. This can be expressed in 5 32 bit floats. This also opens up for individually rotating each sprite in the shader itself. This technique can be extended with more sprite parameters. Other optimizations that can be done: * Cull sprites outside the viewport in geo shader """ import math import moderngl from _example import Example from pyrr import Matrix44 from array import array class GeoSprites(Example): def __init__(self, **kwargs): super().__init__(**kwargs) self.ball_texture = self.load_texture_2d("ball.png") # Sprite shader using geometry shader self.program = self.ctx.program( vertex_shader=""" #version 330 // The per sprite input data in vec2 in_position; in vec2 in_size; in float in_rotation; out vec2 size; out float rotation; void main() { // We just pass the values unmodified to the geometry shader gl_Position = vec4(in_position, 0, 1); size = in_size; rotation = in_rotation; } """, geometry_shader=""" #version 330 // We are taking single points form the vertex shader // and emitting 4 new vertices creating a quad/sprites layout (points) in; layout (triangle_strip, max_vertices = 4) out; uniform mat4 projection; // Since geometry shader can take multiple values from a vertex // shader we need to define the inputs from it as arrays. // In our instance we just take single values (points) in vec2 size[]; in float rotation[]; out vec2 uv; void main() { // We grab the position value from the vertex shader vec2 center = gl_in[0].gl_Position.xy; // Calculate the half size of the sprites for easier calculations vec2 hsize = size[0] / 2.0; // Convert the rotation to radians float angle = radians(rotation[0]); // Create a 2d rotation matrix mat2 rot = mat2( cos(angle), sin(angle), -sin(angle), cos(angle) ); // Emit a triangle strip creating a quad (4 vertices). // Here we need to make sure the rotation is applied before we position the sprite. // We just use hardcoded texture coordinates here. If an atlas is used we // can pass an additional vec4 for specific texture coordinates. // Each EmitVertex() emits values down the shader pipeline just like a single // run of a vertex shader, but in geomtry shaders we can do it multiple times! // Upper left gl_Position = projection * vec4(rot * vec2(-hsize.x, hsize.y) + center, 0.0, 1.0); uv = vec2(0, 1); EmitVertex(); // lower left gl_Position = projection * vec4(rot * vec2(-hsize.x, -hsize.y) + center, 0.0, 1.0); uv = vec2(0, 0); EmitVertex(); // upper right gl_Position = projection * vec4(rot * vec2(hsize.x, hsize.y) + center, 0.0, 1.0); uv = vec2(1, 1); EmitVertex(); // lower right gl_Position = projection * vec4(rot * vec2(hsize.x, -hsize.y) + center, 0.0, 1.0); uv = vec2(1, 0); EmitVertex(); // We are done with this triangle strip now EndPrimitive(); } """, fragment_shader=""" #version 330 uniform sampler2D sprite_texture; in vec2 uv; out vec4 fragColor; void main() { fragColor = texture(sprite_texture, uv); } """, ) self.sprite_data_size = 5 * 4 # 5 32 bit floats self.sprite_data = self.ctx.buffer(reserve=1000 * self.sprite_data_size) # Capacity for 1000 sprites self.vao = self.ctx.vertex_array( self.program, [ (self.sprite_data, "2f 2f 1f", "in_position", "in_size", "in_rotation"), ] ) def render(self, time, frame_time): self.ctx.clear() self.ctx.enable(moderngl.BLEND) num_sprites = 16 # We'll just generate some sprite data on the fly here. # This should only be necessary every time the sprite data changes (in a prefect wold) # Grab the size of the screen or current render target width, height = self.ctx.fbo.size # We just create a generator function instead of def gen_sprites(time): rot_step = math.pi * 2 / num_sprites for i in range(num_sprites): # Position yield width / 2 + math.sin(time + rot_step * i) * 300 yield height / 2 + math.cos(time + rot_step * i) * 300 # size yield 100 yield 100 # rotation yield math.sin(time + i) * 200 self.sprite_data.write(array("f", gen_sprites(time))) # calculate scroll offsets. We truncate to integers here. # This depends what "look" you want for your game. scroll_x, scroll_y = int(math.sin(time) * 100), int(math.cos(time) * 100) # Create a orthogonal projection matrix # Let's also modify the projection to scroll the entire screen. projection = Matrix44.orthogonal_projection( scroll_x, # left width + scroll_x, # right height + scroll_y, # top scroll_y, # bottom 1, # near -1, # far dtype="f4", # ensure we create 32 bit value (64 bit is default) ) # Update the projection uniform self.program["projection"].write(projection) # Configure the sprite_texture uniform to read from texture channel 0 self.program["sprite_texture"] = 0 # Bind the texture to channel 0 self.ball_texture.use(0) # Since we have overallocated the buffer (room for 1000 sprites) we # need to specify how many we actually want to render passing number of vertices. # Also the mode needs to be the same as the geometry shader input type (points!) self.vao.render(mode=moderngl.POINTS, vertices=num_sprites) if __name__ == "__main__": GeoSprites.run() moderngl-moderngl-773b733/examples/old/growing_buffers.py000066400000000000000000000067241470420062000235510ustar00rootroot00000000000000""" Example showing how to resize Buffers with orphan() This can be useful for batch drawing an arbitrary amount of geometry over time. We just render a growing amount of random points. """ import struct import random import moderngl from pyrr import matrix44 from _example import Example class Points: """Simple point batching. The point set is created using an initial buffer allocation. When the buffer is to small we double the size. When the buffer do not need resizing we only do a partial buffer update. """ def __init__(self, ctx, num_points): """ Args: ctx: moderngl context num_points: Initial number of points to allocate """ self.points = [] self.ctx = ctx self.buffer = self.ctx.buffer(reserve=num_points * 12) # 12 bytes for a 3f self.program = self.ctx.program( vertex_shader=""" #version 330 in vec3 in_position; uniform mat4 model_matrix; void main() { gl_Position = model_matrix * vec4(in_position, 1.0); } """, fragment_shader=""" #version 330 out vec4 outColor; void main() { outColor = vec4(1.0); } """, ) self.vao = self.ctx.vertex_array( self.program, [(self.buffer, '3f', 'in_position')], ) def render(self, time): self.program['model_matrix'].write(matrix44.create_from_eulers((0, time / 8, 0), dtype='f4')) self.vao.render(vertices=self.count, mode=moderngl.POINTS) @property def count(self): return len(self.points) // 3 @property def byte_size(self): """int: Byte size of the point data""" return len(self.points) * 4 # 4 byte per float def add(self, num): """Adds num points random points""" resized = False old_points_size = self.byte_size new = list(self._gen_random_points(num)) self.points = self.points + new # Keep doubling the buffer size until we reach an acceptable size while self.byte_size > self.buffer.size: resized = True print("Buffer resized {} -> {}".format(self.buffer.size, self.buffer.size * 2)) print("New capacity is {} points".format(self.buffer.size * 2 // 12)) self.buffer.orphan(self.buffer.size * 2) if resized: # Re-write the entire buffer self.buffer.write(struct.pack('{}f'.format(len(self.points)), *self.points)) else: # Partial buffer update print("Partial buffer update adding {} points".format(len(new) // 3)) self.buffer.write(struct.pack('{}f'.format(len(new)), *new), offset=old_points_size) def _gen_random_points(self, num): for _ in range(num * 3): yield random.uniform(-1.5, 1.5) class GrowingBuffers(Example): """Growing buffers""" gl_version = (3, 3) title = "Buffer Resize / Batch Draw" window_size = 720, 720 aspect_ratio = 1.0 def __init__(self, **kwargs): super().__init__(**kwargs) self.points = Points(self.ctx, 12 * 10) self.points.add(10) def render(self, time, frametime): self.points.render(time) # Add more points every 60 frames if self.wnd.frames % 60 == 0: self.points.add(5000) if __name__ == '__main__': GrowingBuffers.run() moderngl-moderngl-773b733/examples/old/headless/000077500000000000000000000000001470420062000215665ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/old/headless/compute_shader.py000066400000000000000000000073221470420062000251460ustar00rootroot00000000000000''' example of using compute shader. requirements: - numpy - pillow (for output) ''' from string import Template import moderngl import numpy as np import PIL.Image COMPUTE_SOURCE = """ // author: minu jeong #version 430 #define X $X #define Y $Y #define Z $Z #define W $W #define H $H layout(local_size_x=X, local_size_y=Y, local_size_z=Z) in; layout (std430, binding=0) buffer in_0 { vec4 inxs[1]; }; layout (std430, binding=1) buffer out_0 { vec4 outxs[1]; }; layout (std430, binding=2) buffer uv_0 { vec2 uvs[1]; }; #define win_width 5 #define win_height 5 #define win_wh 25 vec4 window[win_wh] = { // should manually initialize this vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0), vec4(0) }; void main() { // define consts const int x = int(gl_LocalInvocationID.x); const int y = int(gl_WorkGroupID.x); const int frag_i = x + y * W; int ignored = 0; // read window for (int win_x = 0; win_x < win_width; win_x++) { for (int win_y = 0; win_y < win_height; win_y++) { int win_i = win_y * win_width + win_x; int wox = win_x - win_width / 2; int woy = win_y - win_height / 2; int src_i = x + wox + (y + woy) * W; if (src_i < 0 || src_i > W * H) { window[win_i] = vec4(0, 0, 0, 0); ignored++; continue; } window[win_i] = inxs[src_i]; } } // simple bubble sort to find median while(true) { bool is_swapped = false; for (int win_ii = win_wh - 1; win_ii > 1; win_ii--) { vec4 now = window[win_ii]; if (now.w == 0.0) { continue; } if (length(window[win_ii - 1]) > length(now)) { // swap window[win_ii] = window[win_ii - 1]; window[win_ii - 1] = now; is_swapped = true; } } if (!is_swapped) { break; } } int median_i = win_wh / 2 + ignored / 2; vec4 median = window[median_i]; // write to buffer outxs[frag_i] = vec4(median.xyz, 1.0); } """ # W = X * Y // for each run, handles a row of pixels # execute compute shader for H times to complete W = 512 H = 256 X = W Y = 1 Z = 1 FRAMES = 50 context = moderngl.create_standalone_context(require=430) compute_shader = context.compute_shader( Template(COMPUTE_SOURCE).substitute( W=W, H=H, X=X + 1, Y=Y, Z=Z, ) ) # init buffers buffer_a = context.buffer(data=np.random.uniform(0.0, 1.0, (H, W, 4)).astype("f4")) buffer_b = context.buffer(data=np.zeros((H, W, 4)).astype('f4')) imgs = [] last_buffer = buffer_b for i in range(FRAMES): toggle = True if i % 2 else False buffer_a.bind_to_storage_buffer(1 if toggle else 0) buffer_b.bind_to_storage_buffer(0 if toggle else 1) # toggle 2 buffers as input and output last_buffer = buffer_a if toggle else buffer_b # local invocation id x -> pixel x # work group_id x -> pixel y # eg) buffer[x, y] = gl_LocalInvocationID.x + gl_WorkGroupID.x * W compute_shader.run(group_x=H, group_y=1) # print out output = np.frombuffer(last_buffer.read(), dtype=np.float32) # output = output.reshape((H, W, 4)) output = np.multiply(output, 255).astype(np.uint8) imgs.append(PIL.Image.frombuffer("RGBA", (W, H), output)) out_path = "debug.gif" print("saving to", out_path) imgs[0].save(out_path, save_all=True, append_images=imgs[1:], duration=15, loop=0) moderngl-moderngl-773b733/examples/old/headless/headless_egl.py000066400000000000000000000017131470420062000245610ustar00rootroot00000000000000""" Example headless EGL rendering on linux in a VM """ import numpy as np from PIL import Image import moderngl ctx = moderngl.create_context(standalone=True, backend='egl') fbo = ctx.simple_framebuffer((512, 512), components=4) fbo.use() vertices = np.array([ -1.0, -1.0, 1.0, 0.0, 0.0, 1.0, -1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0], dtype='f4', ) prog = ctx.program(vertex_shader=""" #version 330 in vec2 in_vert; in vec3 in_color; out vec3 color; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); color = in_color; } """, fragment_shader=""" #version 330 out vec4 fragColor; in vec3 color; void main() { fragColor = vec4(color, 1.0); } """, ) vao = ctx.simple_vertex_array(prog, ctx.buffer(vertices), 'in_vert', 'in_color') vao.render(mode=moderngl.TRIANGLES) image = Image.frombytes('RGBA', (512, 512), fbo.read(components=4)) image = image.transpose(Image.FLIP_TOP_BOTTOM) image.save('triangle.png', format='png')moderngl-moderngl-773b733/examples/old/headless/moderngl_logo_spv.py000066400000000000000000000012641470420062000256620ustar00rootroot00000000000000import moderngl from PIL import Image ctx = moderngl.create_standalone_context() fbo1 = ctx.framebuffer([ctx.renderbuffer((800, 800), components=4, samples=16)]) fbo2 = ctx.framebuffer([ctx.renderbuffer((800, 800), components=4)]) prog = ctx.program( vertex_shader=open('examples/data/logo.vert.spv', 'rb').read(), fragment_shader=open('examples/data/logo.frag.spv', 'rb').read(), ) vao = ctx.vertex_array(prog, []) vao.scope = ctx.scope(fbo1) vao.instances = 9 vao.vertices = 3 fbo1.clear(0.0, 0.0, 0.0, 0.0) vao.render() ctx.copy_framebuffer(fbo2, fbo1) img = Image.frombuffer('RGBA', fbo2.size, fbo2.read(components=4)).transpose(Image.Transpose.FLIP_TOP_BOTTOM) img.show() moderngl-moderngl-773b733/examples/old/heightmap_on_the_fly.py000066400000000000000000000137141470420062000245320ustar00rootroot00000000000000""" Demonstrates redering a terrain/height map on the fly without any pre-generated geometry. """ import numpy as np from pyrr import Matrix44, Matrix33 import moderngl from _example import Example class HeightmapOnTheFly(Example): title = "Heightmap - On the fly" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=""" #version 330 uniform int dim; out vec2 uv; void main() { // grid position from gl_VertexID normalized vec2 pos = vec2(gl_VertexID % dim, gl_VertexID / dim) / dim; gl_Position = vec4(pos, 0.0, 1.0); } """, geometry_shader=""" #version 330 uniform sampler2D heightmap; uniform mat4 projection; uniform mat4 modelview; uniform mat3 normal_matrix; uniform int dim; uniform float terrain_size; out vec2 g_uv; // out vec3 g_pos; out vec3 normal; layout(points) in; layout(triangle_strip, max_vertices = 4) out; const float scale = 0.5; const float height = -0.15; float calculateHeight(float h) { return h * scale + height; } vec3 calculateNormal(vec2 uv, float step, float size) { float hl = calculateHeight(texture(heightmap, uv + vec2(-step, 0.0)).r); float hr = calculateHeight(texture(heightmap, uv + vec2(step, 0.0)).r); float hu = calculateHeight(texture(heightmap, uv + vec2(0.0, step)).r); float hd = calculateHeight(texture(heightmap, uv + vec2(0.0, -step)).r); return normalize(vec3(hl - hr, hd - hu, size)); } void main() { // width and height of a quad float size = terrain_size / dim; // lower left corner of the quad vec2 pos = gl_in[0].gl_Position.xy * terrain_size - terrain_size / 2.0; vec2 uv = gl_in[0].gl_Position.xy; float uv_step = 1.0 / dim; // Calculate mvp mat4 mvp = projection * modelview; // Read heights for each corner vec2 uv1 = uv + vec2(0.0, uv_step); float h1 = calculateHeight(texture(heightmap, uv1).r); vec2 uv2 = uv; float h2 = calculateHeight(texture(heightmap, uv2).r); vec2 uv3 = uv + vec2(uv_step, uv_step); float h3 = calculateHeight(texture(heightmap, uv3).r); vec2 uv4 = uv + vec2(uv_step, 0.0); float h4 = calculateHeight(texture(heightmap, uv4).r); // Upper left vec4 pos1 = vec4(pos + vec2(0.0, size), h1, 1.0); gl_Position = mvp * pos1; g_uv = uv1; normal = normal_matrix * calculateNormal(uv1, uv_step, size); // g_pos = (modelview * pos1).xyz; EmitVertex(); // Lower left vec4 pos2 = vec4(pos, h2, 1.0); gl_Position = mvp * pos2; g_uv = uv2; normal = normal_matrix * calculateNormal(uv2, uv_step, size); // g_pos = (modelview * pos2).xyz; EmitVertex(); // Upper right vec4 pos3 = vec4(pos + vec2(size, size), h3, 1.0); gl_Position = mvp * pos3; g_uv = uv3; normal = normal_matrix * calculateNormal(uv3, uv_step, size); // g_pos = (modelview * pos3).xyz; EmitVertex(); // Lower right vec4 pos4 = vec4(pos + vec2(size, 0.0), h4, 1.0); gl_Position = mvp * pos4; g_uv = uv4; normal = normal_matrix * calculateNormal(uv4, uv_step, size); // g_pos = (modelview * pos4).xyz; EmitVertex(); EndPrimitive(); } """, fragment_shader=""" #version 330 uniform sampler2D heightmap; out vec4 fragColor; in vec2 g_uv; // in vec3 g_pos; in vec3 normal; void main() { // vec3 normal = normalize(cross(dFdx(g_pos), dFdy(g_pos))); float l = abs(dot(vec3(0, 0, 1), normal)); // fragColor = vec4(vec3(texture(heightmap, g_uv).r) * l, 1.0); // fragColor = vec4(normal * l, 1.0); fragColor = vec4(vec3(1.0) * l, 1.0); } """, ) self.heightmap = self.load_texture_2d('heightmap_detailed.png') self.heightmap.repeat_x = False self.heightmap.repeat_y = False self.dim = self.heightmap.width self.vao = self.ctx.vertex_array(self.prog, []) projection = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0, dtype='f4') self.prog['projection'].write(projection) self.prog['dim'] = self.dim - 1 self.prog['terrain_size'] = 1.0 def render(self, time, frame_time): self.ctx.clear() self.ctx.enable(moderngl.DEPTH_TEST | moderngl.CULL_FACE) angle = time * 0.2 lookat = Matrix44.look_at( (np.cos(angle), np.sin(angle), 0.4), (0.0, 0.0, 0.0), (0.0, 0.0, 1.0), dtype='f4', ) normal_matrix = Matrix33.from_matrix44(lookat).inverse.transpose() self.prog['modelview'].write(lookat) self.prog['normal_matrix'].write(normal_matrix.astype('f4').tobytes()) self.heightmap.use(0) self.vao.render(moderngl.POINTS, vertices=(self.dim - 1) ** 2) if __name__ == '__main__': HeightmapOnTheFly.run() moderngl-moderngl-773b733/examples/old/hello_world.py000066400000000000000000000021441470420062000226630ustar00rootroot00000000000000''' Renders a blue triangle ''' import numpy as np from _example import Example class HelloWorld(Example): gl_version = (3, 3) title = "Hello World" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 f_color; void main() { f_color = vec4(0.3, 0.5, 1.0, 1.0); } ''', ) vertices = np.array([ 0.0, 0.8, -0.6, -0.8, 0.6, -0.8, ], dtype='f4') self.vbo = self.ctx.buffer(vertices) self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert') def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render() if __name__ == '__main__': HelloWorld.run() moderngl-moderngl-773b733/examples/old/image_shader_example.py000066400000000000000000000065761470420062000245110ustar00rootroot00000000000000# This example opens an image, and offsets the red, green, and blue channels to create a glitchy RGB split effect. from pathlib import Path from array import array from PIL import Image import moderngl import moderngl_window class ImageProcessing(moderngl_window.WindowConfig): window_size = 3840 // 2, 2160 // 2 resource_dir = Path(__file__).parent.resolve() aspect_ratio = None def __init__(self, **kwargs): super().__init__(**kwargs) self.image_processing = ImageTransformer(self.ctx, self.window_size) self.texture = self.load_texture_2d("data/ball.png") def render(self, time, frame_time): self.image_processing.render(self.texture, target=self.ctx.screen) # Headless self.image_processing.render(self.texture) self.image_processing.write("output.png") class ImageTransformer: def __init__(self, ctx, size, program=None): self.ctx = ctx self.size = size self.program = None self.fbo = self.ctx.framebuffer( color_attachments=[self.ctx.texture(self.size, 4)] ) # Create some default program if needed if not program: self.program = self.ctx.program( vertex_shader=""" #version 330 in vec2 in_position; in vec2 in_uv; out vec2 uv; void main() { gl_Position = vec4(in_position, 0.0, 1.0); uv = in_uv; } """, fragment_shader = """ #version 330 uniform sampler2D image; in vec2 uv; out vec4 out_color; void main() { // Get the Red, green, blue values from the image float red = texture(image, uv).r; // Offset green and blue float green = texture(image, uv+(1.0/20.0)).g; float blue = texture(image, uv+(2.0/20.0)).b; float alpha = texture(image, uv).a; out_color = vec4(red, green, blue, alpha); } """, ) # Fullscreen quad in NDC self.vertices = self.ctx.buffer( array( 'f', [ # Triangle strip creating a fullscreen quad # x, y, u, v -1, 1, 0, 1, # upper left -1, -1, 0, 0, # lower left 1, 1, 1, 1, # upper right 1, -1, 1, 0, # lower right ] ) ) self.quad = self.ctx.vertex_array( self.program, [ (self.vertices, '2f 2f', 'in_position', 'in_uv'), ] ) def render(self, texture, target=None): if target: target.use() else: self.fbo.use() texture.use(0) self.quad.render(mode=moderngl.TRIANGLE_STRIP) def write(self, name): image = Image.frombytes("RGBA", self.fbo.size, self.fbo.read(components=4)) image = image.transpose(Image.FLIP_TOP_BOTTOM) image.save(name, format="png") if __name__ == "__main__": ImageProcessing.run() moderngl-moderngl-773b733/examples/old/instance_only_vertex_attribute.py000066400000000000000000000032251470420062000266770ustar00rootroot00000000000000''' Renders a blue triangle ''' import numpy as np from _example import Example class HelloWorld(Example): gl_version = (3, 3) title = "Hello World" def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 out vec3 v_color; in vec2 in_position; vec2 positions[3] = vec2[]( vec2(0.0, 0.08), vec2(-0.06, -0.08), vec2(0.06, -0.08) ); vec3 colors[3] = vec3[]( vec3(1.0, 0.0, 0.0), vec3(0.0, 1.0, 0.0), vec3(0.0, 0.0, 1.0) ); void main() { gl_Position = vec4(in_position + positions[gl_VertexID], 0.0, 1.0); v_color = colors[gl_VertexID]; } ''', fragment_shader=''' #version 330 in vec3 v_color; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(v_color, 1.0); } ''', ) positions = np.random.uniform(-1.0, 1.0, (100, 2)).astype('f4') self.vbo = self.ctx.buffer(positions) self.vao = self.ctx.vertex_array(self.prog, [ (self.vbo, '2f/i', 'in_position'), ]) self.vao.vertices = 3 def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render(instances=100) if __name__ == '__main__': HelloWorld.run() moderngl-moderngl-773b733/examples/old/instanced_rendering.py000066400000000000000000000041031470420062000243530ustar00rootroot00000000000000""" Instanced rendering without supplying per instance data doing offsets with gl_InstanceID in vertex shader. """ import numpy as np import moderngl from _example import Example class InstancedRendering(Example): title = "Instanced Rendering" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) # gl_InstanceID offsets rotation per instance self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; in vec4 in_color; out vec4 v_color; uniform float Rotation; uniform vec2 Scale; void main() { v_color = in_color; float r = Rotation * (0.5 + gl_InstanceID * 0.05); mat2 rot = mat2(cos(r), sin(r), -sin(r), cos(r)); gl_Position = vec4((rot * in_vert) * Scale, 0.0, 1.0); } ''', fragment_shader=''' #version 330 in vec4 v_color; out vec4 f_color; void main() { f_color = v_color; } ''', ) self.scale = self.prog['Scale'] self.rotation = self.prog['Rotation'] vertices = np.array([ # x, y, red, green, blue, alpha 1.0, 0.0, 1.0, 0.0, 0.0, 0.5, -0.5, 0.86, 0.0, 1.0, 0.0, 0.5, -0.5, -0.86, 0.0, 0.0, 1.0, 0.5, ], dtype='f4') self.vbo = self.ctx.buffer(vertices) self.vao = self.ctx.vertex_array( self.prog, [(self.vbo, '2f 4f', 'in_vert', 'in_color')], ) def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.BLEND) self.scale.value = (0.5, self.aspect_ratio * 0.5) self.rotation.value = time # For every instanced rendered gl_InstanceID increments by 1 self.vao.render(instances=10) if __name__ == '__main__': InstancedRendering.run() moderngl-moderngl-773b733/examples/old/instanced_rendering_crates.py000066400000000000000000000067071470420062000257300ustar00rootroot00000000000000import numpy as np from pyrr import Matrix44 import moderngl from _example import Example class InstancedCrates(Example): ''' This example renders 32x32 crates. For each crate the location is [x, y, sin(a * time + b)] There are 1024 crates aligned in a grid. ''' title = "Instanced Crates" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_move; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { gl_Position = Mvp * vec4(in_position + in_move, 1.0); v_vert = in_position + in_move; v_norm = in_normal; v_text = in_texcoord_0; } ''', fragment_shader=''' #version 330 uniform vec3 Light; uniform sampler2D Texture; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color; void main() { float lum = clamp(dot(normalize(Light - v_vert), normalize(v_norm)), 0.0, 1.0) * 0.8 + 0.2; f_color = vec4(texture(Texture, v_text).rgb * lum, 1.0); } ''', ) self.mvp = self.prog['Mvp'] self.light = self.prog['Light'] self.scene = self.load_scene('crate.obj') self.texture = self.load_texture_2d('crate.png') # Add a new buffer into the VAO wrapper in the scene. # This is simply a collection of named buffers that is auto mapped # to attributes in the vertex shader with the same name. self.instance_data = self.ctx.buffer(reserve=12 * 1024) vao_wrapper = self.scene.root_nodes[0].mesh.vao vao_wrapper.buffer(self.instance_data, '3f/i', 'in_move') # Create the actual vao instance (auto mapping in action) self.vao = vao_wrapper.instance(self.prog) self.crate_a = np.random.uniform(0.7, 0.8, 32 * 32) self.crate_b = np.random.uniform(0.0, 6.3, 32 * 32) self.crate_x = (np.tile(np.arange(32), 32) - 16) * 1.5 self.crate_y = (np.repeat(np.arange(32), 32) - 16) * 1.5 self.crate_x += np.random.uniform(-0.2, 0.2, 32 * 32) self.crate_y += np.random.uniform(-0.2, 0.2, 32 * 32) def render(self, time, frame_time): angle = time * 0.2 self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) camera_pos = (np.cos(angle) * 5.0, np.sin(angle) * 5.0, 2.0) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0) lookat = Matrix44.look_at( camera_pos, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0), ) self.mvp.write((proj * lookat).astype('f4')) self.light.value = camera_pos crate_z = np.sin(self.crate_a * time + self.crate_b) * 0.2 coordinates = np.dstack([self.crate_x, self.crate_y, crate_z]) self.instance_data.write(coordinates.astype('f4')) self.texture.use() self.vao.render(instances=1024) if __name__ == '__main__': InstancedCrates.run() moderngl-moderngl-773b733/examples/old/integration_pycairo.py000066400000000000000000000055461470420062000244330ustar00rootroot00000000000000""" Using pycairo with moderngl. We simply create a screen aligned quad with texture coordinates to render the uploaded texture from cairo. Textures in OpenGL are stored "upside-down" so we build a vertex array with inverted y coordinates """ import math from array import array import cairo import moderngl from _example import Example class CairoExample(Example): title = "Cairo Integration" aspect_ratio = 1.0 def __init__(self, **kwargs): super().__init__(**kwargs) self.texture = self.render_cairo_to_texture(512, 512) self.prog = self.ctx.program( vertex_shader=""" #version 330 in vec3 in_position; in vec2 in_texcoord_0; out vec2 uv; void main() { gl_Position = vec4(in_position, 1.0); uv = in_texcoord_0; } """, fragment_shader=""" #version 330 uniform sampler2D texture0; in vec2 uv; out vec4 outColor; void main() { outColor = texture(texture0, uv); } """, ) # Create a simple screen rectangle. The texture coordinates # are reverted on the y axis here to make the cairo texture appear correctly. vertices = [ # x, y | u, v -1, 1, 0, 0, -1, -1, 0, 1, 1, 1, 1, 0, 1, -1, 1, 1, ] self.screen_rectangle = self.ctx.vertex_array( self.prog, [ ( self.ctx.buffer(array('f', vertices)), '2f 2f', 'in_position', 'in_texcoord_0', ) ], ) def render(self, time, frame_time): self.texture.use(location=0) self.screen_rectangle.render(mode=moderngl.TRIANGLE_STRIP) def render_cairo_to_texture(self, width, height): # Draw with cairo to surface x, y, radius = (250, 250, 200) surface = cairo.ImageSurface(cairo.FORMAT_ARGB32, width, height) ctx = cairo.Context(surface) ctx.set_line_width(15) ctx.arc(x, y, radius, 0, 2.0 * math.pi) ctx.set_source_rgb(0.8, 0.8, 0.8) ctx.fill_preserve() ctx.set_source_rgb(1, 1, 0) ctx.stroke() ctx.move_to(20, 30) ctx.select_font_face("Purisa", cairo.FONT_SLANT_NORMAL, cairo.FONT_WEIGHT_NORMAL) ctx.set_font_size(13) ctx.set_source_rgb(0.8, 0.8, 0.8) ctx.show_text("Example Text") # Copy surface to texture texture = self.ctx.texture((width, height), 4, data=surface.get_data()) texture.swizzle = 'BGRA' # use Cairo channel order (alternatively, the shader could do the swizzle) return texture if __name__ == "__main__": CairoExample.run() moderngl-moderngl-773b733/examples/old/integration_skia_wxpython.py000066400000000000000000000101701470420062000256610ustar00rootroot00000000000000import wx import skia import moderngl from wx import glcanvas GL_RGBA8 = 0x8058 class DrawCanvas(glcanvas.GLCanvas): def __init__(self, parent, size): glcanvas.GLCanvas.__init__(self, parent, -1, size=size) self.size = None self.init = False self.ctx = None self.glcanvas = glcanvas.GLContext(self) self.size = (800, 800) self.x_pos = 0 self.y_pos = 0 self.Bind(wx.EVT_SIZE, self.OnSize) self.Bind(wx.EVT_PAINT, self.OnPaint) def OnEraseBackground(self, event): pass # Do nothing, to avoid flashing on MSW. def OnSize(self, event): wx.CallAfter(self.DoSetViewport) event.Skip() def DoSetViewport(self): # Set the viewport size self.size = self.GetClientSize() self.SetCurrent(self.glcanvas) if not self.ctx is None: self.ctx.set_viewport(0, 0, self.Size.width, self.Size.height) def InitGL(self): # Initialize the skia context with the moderngl context self.ctx = moderngl.create_context() context = skia.GrDirectContext.MakeGL() backend_render_target = skia.GrBackendRenderTarget( self.size[0], self.size[1], 0, # sampleCnt 0, # stencilBits skia.GrGLFramebufferInfo(0, GL_RGBA8)) self.surface = skia.Surface.MakeFromBackendRenderTarget( context, backend_render_target, skia.kBottomLeft_GrSurfaceOrigin, skia.kRGBA_8888_ColorType, skia.ColorSpace.MakeSRGB()) self.canvas = self.surface.getCanvas() def OnPaint(self, event): dc = wx.PaintDC(self) self.SetCurrent(self.glcanvas) if not self.init: self.InitGL() self.init = True self.OnDraw() def OnDraw(self): self.SetContextViewport(0, 0, self.Size.width, self.Size.height) self.ctx.clear(255.0, 255.0, 255.0, 0.0) self.DrawContext() self.SwapBuffers() def DrawContext(self): # Do your drawing with skia here paint = skia.Paint(Color=skia.ColorGREEN) paint.setAntiAlias(True) self.canvas.drawCircle(self.x_pos, self.y_pos, 40, paint) self.canvas.drawSimpleText("Hello ModernGL, Skia & wxPython!", 90, 200, skia.Font(skia.Typeface("Arial"), 40), skia.Paint(Color=skia.ColorBLUE)) self.surface.flushAndSubmit() def SetContextViewport(self, x, y, width, height): self.ctx.viewport = (x, y, width, height) def SetXPos(self, x_pos): self.x_pos = x_pos self.Refresh(False) def SetYPos(self, y_pos): self.y_pos = y_pos self.Refresh(False) class Frame(wx.Frame): def __init__(self, parent, title): super(Frame, self).__init__(parent, title=title, size=(900, 800)) self.SetBackgroundColour(wx.Colour("#eee")) main_sz = wx.BoxSizer(wx.HORIZONTAL) sz = wx.BoxSizer(wx.VERTICAL) panel = wx.Panel(self) panel.SetBackgroundColour(wx.Colour("#eee")) self.canvas = DrawCanvas(panel, size=(800, 800)) self.slider_y = wx.Slider(self, 100, 25, 1, 800, size=(50, -1), style=wx.SL_VERTICAL) self.slider_x = wx.Slider(panel, 100, 25, 1, 800, size=(50, -1), style=wx.SL_HORIZONTAL) panel.SetSizer(sz) sz.Add(self.slider_x, 0, flag=wx.EXPAND|wx.ALL) sz.Add(self.canvas, 0, flag=wx.EXPAND|wx.ALL) main_sz.Add(self.slider_y, 0, flag=wx.EXPAND|wx.ALL) main_sz.Add(panel, 0, flag=wx.EXPAND|wx.ALL) self.SetSizer(main_sz) self.slider_x.Bind(wx.EVT_SLIDER, self.OnChangeX) self.slider_y.Bind(wx.EVT_SLIDER, self.OnChangeY) self.Center() def OnChangeX(self, event): self.canvas.SetXPos(self.slider_x.GetValue()) event.Skip() def OnChangeY(self, event): self.canvas.SetYPos(self.slider_y.GetValue()) event.Skip() ex = wx.App() win = Frame(None, "ModernGL + Skia Python + wxPython") win.Show(True) ex.MainLoop() moderngl-moderngl-773b733/examples/old/julia_fractal.py000066400000000000000000000041651470420062000231560ustar00rootroot00000000000000import numpy as np import moderngl from _example import Example class Fractal(Example): title = "Julia Fractal" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; out vec2 v_text; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); v_text = in_vert / 2.0 + 0.5; } ''', fragment_shader=''' #version 330 in vec2 v_text; out vec4 f_color; uniform vec2 Center; uniform int Iter; void main() { vec2 z = vec2(5.0 * (v_text.x - 0.5), 3.0 * (v_text.y - 0.5)); vec2 c = Center; int i; for(i = 0; i < Iter; i++) { vec2 v = vec2( (z.x * z.x - z.y * z.y) + c.x, (z.y * z.x + z.x * z.y) + c.y ); if (dot(v, v) > 4.0) break; z = v; } float cm = fract((i == Iter ? 0.0 : float(i)) * 10 / Iter); f_color = vec4( fract(cm + 0.0 / 3.0), fract(cm + 1.0 / 3.0), fract(cm + 2.0 / 3.0), 1.0 ); } ''', ) self.center = self.prog['Center'] self.iter = self.prog['Iter'] vertices = np.array([-1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0]) self.vbo = self.ctx.buffer(vertices.astype('f4')) self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert') def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.center.value = (0.49, 0.32) self.iter.value = 100 self.vao.render(moderngl.TRIANGLE_STRIP) if __name__ == '__main__': Fractal.run() moderngl-moderngl-773b733/examples/old/julia_set.py000066400000000000000000000040471470420062000223340ustar00rootroot00000000000000import numpy as np import moderngl from _example import Example class Fractal(Example): title = "Julia Set" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; out vec2 v_text; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); v_text = in_vert; } ''', fragment_shader=''' #version 330 in vec2 v_text; out vec4 f_color; uniform sampler2D Texture; uniform vec2 Seed; uniform int Iter; void main() { vec2 c = Seed; int i; vec2 z = vec2(3.0 * v_text.x, 2.0 * v_text.y); for (i = 0; i < Iter; i++) { float x = (z.x * z.x - z.y * z.y) + c.x; float y = (z.y * z.x + z.x * z.y) + c.y; if ((x * x + y * y) > 4.0) { break; } z.x = x; z.y = y; } f_color = texture(Texture, vec2((i == Iter ? 0.0 : float(i)) / 100.0, 0.0)); } ''', ) self.seed = self.prog['Seed'] self.iter = self.prog['Iter'] self.texture = self.load_texture_2d('pal.png') vertices = np.array([-1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0]) self.vbo = self.ctx.buffer(vertices.astype('f4')) self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert') def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.seed.value = (-0.8, 0.156) self.iter.value = 100 self.texture.use() self.vao.render(moderngl.TRIANGLE_STRIP) if __name__ == '__main__': Fractal.run() moderngl-moderngl-773b733/examples/old/layered_window_with_alpha.py000066400000000000000000000036011470420062000255640ustar00rootroot00000000000000import array import time import layered_window import moderngl mem = layered_window.init((400, 400), title='Animation') # mem = layered_window.init((400, 400), title='Animation', tool_window=True, always_on_top=True) ctx = moderngl.create_context(standalone=True) image = ctx.texture((400, 400), components=4) framebuffer = ctx.framebuffer(color_attachments=[image]) triangle = array.array('f', [ 1.0, 0.0, 1.0, 0.0, 0.0, 0.5, -0.5, 0.86, 0.0, 1.0, 0.0, 0.5, -0.5, -0.86, 0.0, 0.0, 1.0, 0.5, ]) vertex_buffer = ctx.buffer(triangle) program = ctx.program( vertex_shader=''' #version 330 core uniform vec2 scale; uniform float rotation; layout (location = 0) in vec2 in_vertex; layout (location = 1) in vec4 in_color; out vec4 v_color; void main() { float r = rotation * (0.5 + float(gl_InstanceID) * 0.05); mat2 rot = mat2(cos(r), sin(r), -sin(r), cos(r)); gl_Position = vec4((rot * in_vertex) * scale, 0.0, 1.0); v_color = in_color; } ''', fragment_shader=''' #version 330 core in vec4 v_color; layout (location = 0) out vec4 out_color; void main() { out_color = vec4(v_color); out_color.rgb = pow(out_color.rgb, vec3(1.0 / 2.2)); } ''', ) ctx.enable_only(moderngl.BLEND) ctx.blend_func = (ctx.SRC_ALPHA, ctx.ONE_MINUS_SRC_ALPHA, ctx.SRC_ALPHA, ctx.ONE) vao = ctx.vertex_array(program, [ (vertex_buffer, '2f 4f', 'in_vertex', 'in_color'), ]) vao.vertices = 3 vao.instances = 10 start_time = time.perf_counter() while True: now = time.perf_counter() - start_time framebuffer.use() framebuffer.clear(0.0, 0.0, 0.0, 0.0) program['scale'].value = (0.8, 0.8) program['rotation'].value = now vao.render() framebuffer.read_into(mem, components=4) layered_window.update() moderngl-moderngl-773b733/examples/old/loading_obj_files.py000066400000000000000000000053141470420062000240040ustar00rootroot00000000000000from pyrr import Matrix44 import moderngl from _example import Example class LoadingOBJ(Example): title = "Loading OBJ" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.obj = self.load_scene('sitting_dummy.obj') self.texture = self.load_texture_2d('wood.jpg') self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; void main() { v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; gl_Position = Mvp * vec4(in_position, 1.0); } ''', fragment_shader=''' #version 330 uniform sampler2D Texture; uniform vec4 Color; uniform vec3 Light; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; out vec4 f_color; void main() { float lum = dot(normalize(v_norm), normalize(v_vert - Light)); lum = acos(lum) / 3.14159265; lum = clamp(lum, 0.0, 1.0); lum = lum * lum; lum = smoothstep(0.0, 1.0, lum); lum *= smoothstep(0.0, 80.0, v_vert.z) * 0.3 + 0.7; lum = lum * 0.8 + 0.2; vec3 color = texture(Texture, v_text).rgb; color = color * (1.0 - Color.a) + Color.rgb * Color.a; f_color = vec4(color * lum, 1.0); } ''', ) self.light = self.prog['Light'] self.color = self.prog['Color'] self.mvp = self.prog['Mvp'] # Create a vao from the first root node (attribs are auto mapped) self.vao = self.obj.root_nodes[0].mesh.vao.instance(self.prog) def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0) lookat = Matrix44.look_at( (-85, -180, 140), (0.0, 0.0, 65.0), (0.0, 0.0, 1.0), ) self.light.value = (-140.0, -300.0, 350.0) self.color.value = (1.0, 1.0, 1.0, 0.25) self.mvp.write((proj * lookat).astype('f4')) self.texture.use() self.vao.render() if __name__ == '__main__': LoadingOBJ.run() moderngl-moderngl-773b733/examples/old/mandelbrot_set.py000066400000000000000000000045371470420062000233630ustar00rootroot00000000000000import numpy as np import moderngl from _example import Example class Fractal(Example): title = "Mandelbrot" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; out vec2 v_text; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); v_text = in_vert; } ''', fragment_shader=''' #version 330 in vec2 v_text; out vec4 f_color; uniform sampler2D Texture; uniform vec2 Center; uniform float Scale; uniform float Ratio; uniform int Iter; void main() { vec2 c; int i; c.x = Ratio * v_text.x * Scale - Center.x; c.y = v_text.y * Scale - Center.y; vec2 z = c; for (i = 0; i < Iter; i++) { float x = (z.x * z.x - z.y * z.y) + c.x; float y = (z.y * z.x + z.x * z.y) + c.y; if ((x * x + y * y) > 4.0) { break; } z.x = x; z.y = y; } f_color = texture(Texture, vec2((i == Iter ? 0.0 : float(i)) / 100.0, 0.0)); } ''' ) self.center = self.prog['Center'] self.scale = self.prog['Scale'] self.ratio = self.prog['Ratio'] self.iter = self.prog['Iter'] self.texture = self.load_texture_2d('pal.png') vertices = np.array([-1.0, -1.0, -1.0, 1.0, 1.0, -1.0, 1.0, 1.0]) self.vbo = self.ctx.buffer(vertices.astype('f4')) self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert') def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.center.value = (0.5, 0.0) self.iter.value = 100 self.scale.value = 1.5 self.ratio.value = self.aspect_ratio self.texture.use() self.vao.render(moderngl.TRIANGLE_STRIP) if __name__ == '__main__': Fractal.run() moderngl-moderngl-773b733/examples/old/matplotlib_as_texture.py000066400000000000000000000020361470420062000247630ustar00rootroot00000000000000import io import numpy as np from PIL import Image from basic_colors_and_texture import ColorsAndTexture import matplotlib matplotlib.use('svg') import matplotlib.pyplot as plt class MatplotlibTexture(ColorsAndTexture): title = "Matplotlib as Texture" def __init__(self, **kwargs): super().__init__(**kwargs) figure_size = (640, 360) temp = io.BytesIO() plt.figure(0, figsize=(figure_size[0] / 72, figure_size[1] / 72)) mu, sigma = 100, 15 x = mu + sigma * np.random.randn(10000) n, bins, patches = plt.hist(x, 50, density=True, facecolor='r', alpha=0.75) plt.axis([40, 160, 0, 0.03]) plt.grid(True) plt.show() plt.savefig(temp, format='raw', dpi=72) temp.seek(0) img = Image.frombytes('RGBA', figure_size, temp.read()).transpose(Image.FLIP_TOP_BOTTOM).convert('RGB') self.texture = self.ctx.texture(img.size, 3, img.tobytes()) self.texture.build_mipmaps() if __name__ == '__main__': MatplotlibTexture.run() moderngl-moderngl-773b733/examples/old/multi_texture_terrain.py000066400000000000000000000072201470420062000250070ustar00rootroot00000000000000import numpy as np from pyrr import Matrix44 import moderngl from _example import Example def terrain(size): vertices = np.dstack(np.mgrid[0:size, 0:size][::-1]) / size temp = np.dstack([np.arange(0, size * size - size), np.arange(size, size * size)]) index = np.pad(temp.reshape(size - 1, 2 * size), [[0, 0], [0, 1]], 'constant', constant_values=-1) return vertices, index class MultiTextireTerrain(Example): title = "Multitexture Terrain" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; uniform sampler2D Heightmap; in vec2 in_vert; out vec2 v_text; void main() { vec4 vertex = vec4(in_vert - 0.5, texture(Heightmap, in_vert).r * 0.2, 1.0); gl_Position = Mvp * vertex; v_text = in_vert; } ''', fragment_shader=''' #version 330 uniform sampler2D Heightmap; uniform sampler2D Color1; uniform sampler2D Color2; uniform sampler2D Cracks; uniform sampler2D Darken; in vec2 v_text; out vec4 f_color; void main() { float height = texture(Heightmap, v_text).r; float border = smoothstep(0.5, 0.7, height); vec3 color1 = texture(Color1, v_text * 7.0).rgb; vec3 color2 = texture(Color2, v_text * 6.0).rgb; vec3 color = color1 * (1.0 - border) + color2 * border; color *= 0.8 + 0.2 * texture(Darken, v_text * 3.0).r; color *= 0.5 + 0.5 * texture(Cracks, v_text * 5.0).r; color *= 0.5 + 0.5 * height; f_color = vec4(color, 1.0); } ''', ) self.mvp = self.prog['Mvp'] vertices, index = terrain(32) self.vbo = self.ctx.buffer(vertices.astype('f4')) self.ibo = self.ctx.buffer(index.astype('i4')) vao_content = [ (self.vbo, '2f', 'in_vert'), ] self.vao = self.ctx.vertex_array(self.prog, vao_content, self.ibo) self.tex0 = self.load_texture_2d('heightmap.jpg') self.tex0.build_mipmaps() self.tex1 = self.load_texture_2d('grass.jpg') self.tex1.build_mipmaps() self.tex2 = self.load_texture_2d('rock.jpg') self.tex2.build_mipmaps() self.tex3 = self.load_texture_2d('cracks.jpg') self.tex3.build_mipmaps() self.tex4 = self.load_texture_2d('checked.jpg') self.tex4.build_mipmaps() self.prog['Heightmap'].value = 0 self.prog['Color1'].value = 1 self.prog['Color2'].value = 2 self.prog['Cracks'].value = 3 self.prog['Darken'].value = 4 def render(self, time, frame_time): angle = time * 0.2 self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) self.tex0.use(0) self.tex1.use(1) self.tex2.use(2) self.tex3.use(3) self.tex4.use(4) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0) lookat = Matrix44.look_at( (np.cos(angle), np.sin(angle), 0.8), (0.0, 0.0, 0.1), (0.0, 0.0, 1.0), ) self.mvp.write((proj * lookat).astype('f4')) self.vao.render(moderngl.TRIANGLE_STRIP) if __name__ == '__main__': MultiTextireTerrain.run() moderngl-moderngl-773b733/examples/old/multiple_instance_rendering.py000066400000000000000000000065011470420062000261260ustar00rootroot00000000000000''' This examples renders 8 clones of a rectangle with different sizes and positions and having the same color ''' import numpy as np from _example import Example class InstancedRendering(Example): gl_version = (3, 3) title = "Instanced Rendering" aspect_ratio = 1.0 window_size = (640, 640) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; in vec2 in_pos; in float in_scale; in vec3 in_color; out vec3 v_color; void main() { gl_Position = vec4(in_pos + (in_vert * in_scale), 0.0, 1.0); v_color = in_color; } ''', fragment_shader=''' #version 330 in vec3 v_color; out vec4 f_color; void main() { f_color = vec4(v_color, 1.0); } ''', ) # Vertex coordinates stored in position_vertex_buffer # # B------D # | | # A------C vertices = np.array([ -0.5, -0.5, -0.5, 0.5, 0.5, -0.5, 0.5, 0.5, ]) self.position_vertex_buffer = self.ctx.buffer(vertices.astype('f4')) # Vertex colors stored in color_buffer # # A, B are green # C, D are blue colors = np.array([ 0.0, 1.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 1.0, ]) self.color_buffer = self.ctx.buffer(colors.astype('f4')) # (Per instance) positions and scales stored in pos_scale_buffer # There are 8 (x_position, y_position, scale) pairs position_scale = np.array([ 0.5, 0.0, 0.3, 0.35, 0.35, 0.2, 0.0, 0.5, 0.3, -0.35, 0.35, 0.2, -0.5, 0.0, 0.3, -0.35, -0.35, 0.2, 0.0, -0.5, 0.3, 0.35, -0.35, 0.2, ]) self.pos_scale_buffer = self.ctx.buffer(position_scale.astype('f4')) # Index buffer (also called element buffer) # There are 2 trianges to render # # A, B, C # B, C, D render_indicies = np.array([ 0, 1, 2, 1, 2, 3 ]) self.index_buffer = self.ctx.buffer(render_indicies.astype('i4')) # The vao_content is a list of 3-tuples (buffer, format, attribs) # the format can have an empty or '/v', '/i', '/r' ending. # '/v' attributes are the default # '/i` attributes are per instance attributes # '/r' attributes are default values for the attributes (per render attributes) vao_content = [ (self.position_vertex_buffer, '2f', 'in_vert'), (self.color_buffer, '3f', 'in_color'), (self.pos_scale_buffer, '2f 1f/i', 'in_pos', 'in_scale'), ] self.vao = self.ctx.vertex_array(self.prog, vao_content, self.index_buffer) def render(self, time: float, frame_time: float): self.ctx.clear(1.0, 1.0, 1.0) self.vao.render(instances=8) if __name__ == '__main__': InstancedRendering.run() moderngl-moderngl-773b733/examples/old/particle_system.py000066400000000000000000000045561470420062000235710ustar00rootroot00000000000000import numpy as np import moderngl from _example import Example def particle(): a = np.random.uniform(0.0, np.pi * 2.0) r = np.random.uniform(0.0, 0.001) return np.array([0.0, 0.0, np.cos(a) * r - 0.003, np.sin(a) * r - 0.008]).astype('f4') class Particles(Example): title = "Particle System" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 f_color; void main() { f_color = vec4(0.30, 0.50, 1.00, 1.0); } ''', ) self.transform = self.ctx.program( vertex_shader=''' #version 330 uniform vec2 Acc; in vec2 in_pos; in vec2 in_prev; out vec2 out_pos; out vec2 out_prev; void main() { vec2 velocity = in_pos - in_prev; out_pos = in_pos + velocity + Acc; out_prev = in_pos; } ''', varyings=['out_pos', 'out_prev'] ) self.acc = self.transform['Acc'] self.acc.value = (0.0, -0.0001) self.vbo1 = self.ctx.buffer(b''.join(particle() for i in range(1024))) self.vbo2 = self.ctx.buffer(reserve=self.vbo1.size) self.vao1 = self.ctx.simple_vertex_array(self.transform, self.vbo1, 'in_pos', 'in_prev') self.vao2 = self.ctx.simple_vertex_array(self.transform, self.vbo2, 'in_pos', 'in_prev') self.render_vao = self.ctx.vertex_array(self.prog, [ (self.vbo1, '2f 2x4', 'in_vert'), ]) self.idx = 0 def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.ctx.point_size = 2.0 for i in range(8): self.vbo1.write(particle(), offset=self.idx * 16) self.idx = (self.idx + 1) % 1024 self.render_vao.render(moderngl.POINTS, 1024) self.vao1.transform(self.vbo2, moderngl.POINTS, 1024) self.ctx.copy_buffer(self.vbo1, self.vbo2) if __name__ == '__main__': Particles.run() moderngl-moderngl-773b733/examples/old/particle_system_advanced.py000066400000000000000000000167441470420062000254200ustar00rootroot00000000000000from typing import Optional, Tuple, Final import moderngl import numpy as np from _example import Example NB_PARTICLES: Final[int] = 2 << 10 # 1024 POINT_SIZE: Final[int] = 2 << 3 # 16 # https://www.toutes-les-couleurs.com/code-couleur-rvb.php CHAMPAGNE_COLOR: Final[Tuple[float, float, float, float]] = (251 / 255., 242 / 255., 183 / 255., 1.0) class Particles(Example): title = "Particle System - Champagne Bubbles" gl_version = (3, 3) def __init__( self, shader_transform: Optional[moderngl.Program] = None, nb_max_particles: int = NB_PARTICLES, **kwargs ): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; in float in_hot; out float out_hot; void main() { out_hot = in_hot; gl_Position = vec4(in_vert.xy, 0.0, 1.0); } ''', fragment_shader=''' #version 330 uniform vec4 u_color_particle; in float out_hot; out vec4 f_color; void main() { float d_to_center = distance(gl_PointCoord.xy, vec2(0.5, 0.5)); if (d_to_center > out_hot*0.5) discard; f_color = vec4(1.0 - vec3(d_to_center), 1.0); f_color *= u_color_particle; } ''', ) if shader_transform is None: self.transform = self.ctx.program( vertex_shader=''' #version 330 #define M_PI 3.14159265358979323846264 // Golden Ratio #define PHI 1.61803398874989484820459 * 00000.1 #define PI M_PI * 00000.1 #define SQ2 1.41421356237309504880169 * 10000.0 // Gravity factor #define G 0.980 // Rate of Decline (particle life) #define ROD 0.006 uniform vec2 u_acc; uniform float u_time; in vec2 in_pos; in float in_hot; in vec2 in_vel; in float in_id; out vec2 out_pos; out float out_hot; out vec2 out_vel; out float out_id; // https://www.shadertoy.com/view/ltB3zD float gold_noise(in vec2 coordinate, in float seed){ return fract(sin(dot(coordinate*(seed+PHI), vec2(PHI, PI)))*SQ2); } float map(float value, float inMin, float inMax, float outMin, float outMax) { return outMin + (outMax - outMin) * (value - inMin) / (inMax - inMin); } void respawn() { out_hot = map(gold_noise(vec2(in_id, u_time), 25), 0.0, 1.0, 0.4, 1.0); out_pos = vec2( map(gold_noise(vec2(in_id, u_time), 0), 0, 1, -1, +1), map(gold_noise(vec2(in_id, u_time), 50), 0, 1, -1, +1) ); float r = gold_noise(vec2(in_id, u_time), 100) * 0.015; out_vel = vec2(0.0, r); } void update() { out_hot = in_hot - ROD; out_pos = in_pos + in_vel + u_acc; out_vel = in_vel * G; } void main() { // particle is "dead" (out of life) -> respawn if(in_hot <= 0.0) respawn(); // particle is out of screen -> respawn else if(abs(in_pos.x) > 1.0) respawn(); else if(abs(in_pos.y) > 1.0) respawn(); // otherwise -> update particle: position, velocity, live, ... else update(); out_id = in_id; } ''', varyings=['out_pos', 'out_hot', 'out_vel', 'out_id'] ) else: self.transform = shader_transform self.color_particle = self.prog['u_color_particle'] # https://www.toutes-les-couleurs.com/code-couleur-rvb.php self.color_particle.value = CHAMPAGNE_COLOR self.nb_particles = nb_max_particles self.acc = self.transform['u_acc'] self.acc.value = (0.0, -0.0001) # at init => particles at center with random velocities self.vbo1 = self.ctx.buffer( b''.join( Particles.gen_particle(range_angle_axis=np.pi * 2.0, id_particle=i) for i in range(self.nb_particles) ) ) # vertex buffer/array object use for updating particles system self.vbo2 = self.ctx.buffer(reserve=self.vbo1.size) self.vao1 = self.ctx.simple_vertex_array( self.transform, self.vbo1, 'in_pos', 'in_hot', 'in_vel', 'in_id' ) self.render_vao = self.ctx.vertex_array(self.prog, [ # - '2f' => 2 floats ~ vec2: in_vert # - '1f' => 1 float: in_hot # - '3x4' => drop 3 * 4bytes = 3 floats ~ vec2 + float: in_vel, in_id (self.vbo1, '2f 1f 3x4', 'in_vert', 'in_hot'), ], skip_errors=False) self.u_time = self.transform['u_time'] self.u_time.value = 0.0 self.ctx.point_size = float(POINT_SIZE) @staticmethod def gen_particle( position: Tuple[float, float] = (0.0, 0.0), angle_main_axis: float = np.pi / 2.0, range_angle_axis: float = np.pi / 8.0, id_particle: int = 0, ) -> bytes: """ Generate particle with random velocity (describe by a random (non unit) vector) """ # random velocity (orientation and velocity) a = np.random.uniform(angle_main_axis - range_angle_axis, angle_main_axis + range_angle_axis) r = np.random.uniform(0.0, 0.02) velocity_x = np.cos(a) * r velocity_y = np.sin(a) * r # particle at center with a random velocity return np.array( [ *position, # position[vec2] 1.0, # hotness[float] velocity_x, velocity_y, # velocity[vec2] float(id_particle) # id particle[float] ] ).astype('f4').tobytes() # encoded float32 def render_particles(self) -> None: """ Render particles system. Using a static vertex array object and rendering point sprites. """ self.render_vao.render(moderngl.POINTS, self.nb_particles) def update_particles(self, time) -> None: """ Update particles system on GPU """ self.u_time.value = time self.vao1.transform(self.vbo2, moderngl.POINTS, self.nb_particles) self.ctx.copy_buffer(self.vbo1, self.vbo2) def render(self, time, _frame_time) -> None: # Physic pass: update particles system self.update_particles(time) # Rendering pass: render particles system self.ctx.clear(*CHAMPAGNE_COLOR) self.render_particles() if __name__ == '__main__': Particles.run() moderngl-moderngl-773b733/examples/old/particle_system_emit.py000066400000000000000000000336251470420062000246060ustar00rootroot00000000000000""" Emit particles from mouse positions with random velocities adding the current velocity of the mouse pointer. Shows how you can use transform feedback with custom emitting. You can emit with the gpu or cpu. The main trick is to use transform() with the buffer_offset parameter writing to be back of the buffer. We use a query object in this example that can potentially stall rendering a bit, but it's still orders of magnitude faster than doing everything on the cpu. using transform() with a buffer offset can be used in many creative ways. This is similar to pausing and resuming transform feedbacks, but works in GL 3.3 core. * The geometry shader is used to destroy geometry for expired particles. * We use a query to count how many primitives the geometry shader actually emitted so we can know how many new particles we should emit. We show 3 different emit methods: * Method #1: CPU emitting by manually writing new particles to the end of the buffer. This will probably stream up the entire buffer per frame, but is acceptable for smaller amount of data. * Method #2: CPU emitting by filling a smaller emit buffer to reduce the amount of data we stream per frame Here we fill a smaller emit buffer and render that to the end of the output buffer to greatly reduce the amount of data we stream to the gpu per frame. * Method #3: GPU emitting. A shader simply calculates the new values. No buffer streaming. All is on the gpu side. This method is orders of magnitude faster than method 1 and 2 Emit particles from mouse positions: mouse_control = True Emit particles from a predetermined path: mouse_control = False """ import numpy as np import moderngl from moderngl_window import screenshot from _example import Example from pyrr import matrix44 class Particles(Example): title = "Particle System Emitter" gl_version = (3, 3) aspect_ratio = None mouse_control = False def __init__(self, **kwargs): super().__init__(**kwargs) # Renders particles to the screen self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 projection; in vec2 in_pos; in vec3 in_color; out vec3 color; void main() { gl_Position = projection * vec4(in_pos, 0.0, 1.0); color = in_color; } ''', fragment_shader=''' #version 330 out vec4 f_color; in vec3 color; void main() { f_color = vec4(color, 1.0); } ''', ) # Animates / transforms the particles per frame self.transform = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_pos; in vec2 in_vel; in vec3 in_color; out vec2 vs_vel; out vec3 vs_color; void main() { gl_Position = vec4(in_pos, 0.0, 1.0); vs_vel = in_vel; vs_color = in_color; } ''', geometry_shader=''' #version 330 layout(points) in; layout(points, max_vertices = 1) out; uniform float gravity; uniform float ft; in vec2 vs_vel[1]; in vec3 vs_color[1]; out vec2 out_pos; out vec2 out_vel; out vec3 out_color; void main() { vec2 pos = gl_in[0].gl_Position.xy; vec2 velocity = vs_vel[0]; if (pos.y > -1.0) { vec2 vel = velocity + vec2(0.0, gravity); out_pos = pos + vel * ft; out_vel = vel; out_color = vs_color[0]; EmitVertex(); EndPrimitive(); } } ''', varyings=['out_pos', 'out_vel', 'out_color'], ) self.mouse_pos = 0, 0 self.mouse_velocity = 0.001, 0.001 # default value must not be 0. any number is fine self.prog['projection'].write(self.projection) self.transform['gravity'].value = -.01 # affects the velocity of the particles over time self.ctx.point_size = self.wnd.pixel_ratio * 2 # point size self.N = 25_000 # particle count self.active_particles = self.N // 100 # Initial / current number of active particles self.max_emit_count = self.N // 100 # Maximum number of particles to emit per frame self.stride = 28 # byte stride for each vertex self.floats = 7 # Note that passing dynamic=True probably doesn't mean anything to most drivers today self.vbo1 = self.ctx.buffer(reserve=self.N * self.stride) self.vbo2 = self.ctx.buffer(reserve=self.N * self.stride) # Write some initial particles self.vbo1.write( np.fromiter( self.gen_particles(self.active_particles), count=self.active_particles * self.floats, dtype='f4', ) ) # Transform vaos. We transform data back and forth to avoid buffer copy self.transform_vao1 = self.ctx.vertex_array( self.transform, [(self.vbo1, '2f 2f 3f', 'in_pos', 'in_vel', 'in_color')], ) self.transform_vao2 = self.ctx.vertex_array( self.transform, [(self.vbo2, '2f 2f 3f', 'in_pos', 'in_vel', 'in_color')], ) # Render vaos. The render to screen version of the transform vaos above self.render_vao1 = self.ctx.vertex_array( self.prog, [(self.vbo1, '2f 2x4 3f', 'in_pos', 'in_color')], ) self.render_vao2 = self.ctx.vertex_array( self.prog, [(self.vbo2, '2f 2x4 3f', 'in_pos', 'in_color')], ) # Setup for emit method #2. The emit buffer size is only max_emit_count. self.emit_buffer_elements = self.max_emit_count self.emit_buffer = self.ctx.buffer(reserve=self.emit_buffer_elements * self.stride) self.emit_buffer_prog = self.ctx.program( # Siple shader just emitting a buffer vertex_shader=''' # version 330 in vec2 in_pos; in vec2 in_vel; in vec3 in_color; out vec2 out_pos; out vec2 out_vel; out vec3 out_color; void main() { out_pos = in_pos; out_vel = in_vel; out_color = in_color; } ''', varyings=['out_pos', 'out_vel', 'out_color'], ) self.emit_buffer_vao = self.ctx.vertex_array( self.emit_buffer_prog, [(self.emit_buffer, '2f 2f 3f', 'in_pos', 'in_vel', 'in_color')], ) # Setup for method #3: GPU emitting self.gpu_emitter_prog = self.ctx.program( vertex_shader=''' # version 330 #define M_PI 3.1415926535897932384626433832795 uniform vec2 mouse_pos; uniform vec2 mouse_vel; uniform float time; out vec2 out_pos; out vec2 out_vel; out vec3 out_color; float rand(float n){return fract(sin(n) * 43758.5453123);} void main() { float a = mod(time * gl_VertexID, M_PI * 2); float r = clamp(rand(time + gl_VertexID), 0.1, 0.9); out_pos = mouse_pos; out_vel = vec2(sin(a), cos(a)) * r + mouse_vel; out_color = vec3( rand(time * 1.3 + gl_VertexID), rand(time * 3.4 + gl_VertexID), rand(time * 2.0 + gl_VertexID) ); } ''', varyings=['out_pos', 'out_vel', 'out_color'], ) self.gpu_emitter_vao = self.ctx._vertex_array(self.gpu_emitter_prog, []) # Query object to inspect render calls self.query = self.ctx.query(primitives=True) def render(self, time, frame_time): self.transform['ft'].value = max(frame_time, 0.02) if not self.mouse_control: self.move_mouse(time) # Cycle emit methods per frame method = self.wnd.frames % 3 + 1 # ---> HARDCODE METHOD HERE <--- # method = 3 if method == 1: self.emit_cpu_simple(time, frame_time) elif method == 2: self.emit_cpu_buffer(time, frame_time) elif method == 3: self.emit_gpu(time, frame_time) # Swap around objects for next frame self.transform_vao1, self.transform_vao2 = self.transform_vao2, self.transform_vao1 self.render_vao1, self.render_vao2 = self.render_vao2, self.render_vao1 self.vbo1, self.vbo2 = self.vbo2, self.vbo1 err = self.ctx.error if err != "GL_NO_ERROR": print(err) def emit_cpu_simple(self, time, frame_time): """Method #1 Emit new particles simply by writing new particles to to the end of the buffer. This will most likely cause the entire buffer to be re-written to the gpu, but is probably acceptable for smaller particle amounts. """ # Transform all particles recoding how many elements were emitted by geometry shader with self.query: self.transform_vao1.transform(self.vbo2, moderngl.POINTS, vertices=self.active_particles) # Emit new particles if needed simply by writing to the end of the buffer (cpu) emit_count = min(self.N - self.query.primitives, self.max_emit_count) if emit_count > 0: self.vbo2.write( np.fromiter(self.gen_particles(emit_count), 'f4', count=emit_count * self.floats), offset=self.query.primitives * self.stride, ) self.active_particles = self.query.primitives + emit_count self.render_vao2.render(moderngl.POINTS, vertices=self.active_particles) def emit_cpu_buffer(self, time, frame_time): """Method #2 Emit new particles by writing new ones with the cpu to a separate emit buffer. This buffer can be smaller than the main particle buffer meaning less buffer data to stream to the gpu per frame. """ # Transform all particles recoding how many elements were emitted by geometry shader with self.query: self.transform_vao1.transform(self.vbo2, moderngl.POINTS, vertices=self.active_particles) emit_count = min(self.N - self.query.primitives, self.emit_buffer_elements, self.max_emit_count) if emit_count > 0: self.emit_buffer.write( np.fromiter(self.gen_particles(emit_count), 'f4', count=emit_count * self.floats) ) self.emit_buffer_vao.transform( self.vbo2, vertices=emit_count, buffer_offset=self.query.primitives * self.stride, ) self.active_particles = self.query.primitives + emit_count self.render_vao2.render(moderngl.POINTS, vertices=self.active_particles) def emit_gpu(self, time, frame_time): """Method #3 Emit new particles using a shader. """ # Transform all particles recoding how many elements were emitted by geometry shader with self.query: self.transform_vao1.transform(self.vbo2, moderngl.POINTS, vertices=self.active_particles) emit_count = min(self.N - self.query.primitives, self.emit_buffer_elements, self.max_emit_count) if emit_count > 0: self.gpu_emitter_prog['mouse_pos'].value = self.mouse_pos self.gpu_emitter_prog['mouse_vel'].value = self.mouse_velocity self.gpu_emitter_prog['time'].value = max(time, 0) self.gpu_emitter_vao.transform( self.vbo2, vertices=emit_count, buffer_offset=self.query.primitives * self.stride, ) self.active_particles = self.query.primitives + emit_count self.render_vao2.render(moderngl.POINTS, vertices=self.active_particles) def gen_particles(self, n): for _ in range(n): # Current mouse position (2 floats) yield self.mouse_pos[0] yield self.mouse_pos[1] # Random velocity (2 floats) a = np.random.uniform(0.0, np.pi * 2.0) r = np.random.uniform(0.1, 0.9) yield np.cos(a) * r + self.mouse_velocity[0] yield np.sin(a) * r + self.mouse_velocity[1] # Random color (3 floats) yield np.random.uniform(0.0, 1.0) yield np.random.uniform(0.0, 1.0) yield np.random.uniform(0.0, 1.0) @property def projection(self): return matrix44.create_orthogonal_projection( -self.wnd.aspect_ratio, self.wnd.aspect_ratio, -1, 1, -1, 1, dtype='f4', ) def resize(self, width, height): """Handle window resizing""" self.prog['projection'].write(self.projection) def mouse_position_event(self, x, y, dx, dy): if not self.mouse_control: return self.mouse_pos = ( (x / self.wnd.width * 2 - 1) * self.wnd.aspect_ratio, -(y / self.wnd.height * 2 - 1), ) self.mouse_velocity = dx / 25, -dy / 25 def move_mouse(self, time): new_pos = ( np.sin(time * 2.0) * self.wnd.aspect_ratio * 0.9, np.cos(time * 2.0) * 0.15, ) self.mouse_velocity = ( (new_pos[0] - self.mouse_pos[0]) * 10, (new_pos[1] - self.mouse_pos[1]) * 10, ) self.mouse_pos = new_pos def key_event(self, key, action, modifiers): keys = self.wnd.keys if action == keys.ACTION_PRESS and key == keys.F1: screenshot.create(self.wnd.fbo) if __name__ == '__main__': Particles.run() moderngl-moderngl-773b733/examples/old/points_variable_size.py000066400000000000000000000056121470420062000245670ustar00rootroot00000000000000""" Example showing the use of PROGRAM_POINT_SIZE were we modify point sizes int the vertex shader making us able to specify a unique size per point. Without PROGRAM_POINT_SIZE enabled the point size will be static and obtained from ctx.point_size. We also show the use of gl_PointCoord making us able to fill the point with any data we want just like a quad. """ import numpy as np from pyrr import Matrix44 import moderngl from _example import Example class Particles(Example): title = "Particle System" gl_version = (3, 3) aspect_ratio = None def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=""" #version 330 in vec3 in_position; uniform mat4 projection; uniform mat4 modelview; uniform float time; out vec3 color; void main() { gl_Position = projection * modelview * vec4(in_position, 1.0); // Set the point size gl_PointSize = 25 - gl_Position.z + sin((time + gl_VertexID) * 7.0) * 10.0; // Calculate a random color based on the vertex index color = vec3(mod(gl_VertexID * 432.43, 1.0), mod(gl_VertexID * 6654.32, 1.0), mod(gl_VertexID * 6544.11, 1.0)); } """, fragment_shader=""" #version 330 in vec3 color; out vec4 outColor; void main() { // Calculate the distance from the center of the point // gl_PointCoord is available when redering points. It's basically an uv coordinate. float dist = step(length(gl_PointCoord.xy - vec2(0.5)), 0.5); // .. an use to render a circle! outColor = vec4(dist * color, dist); } """, ) positions = np.random.random_sample((1000,)) * 10 - 5 self.pos_buffer = self.ctx.buffer(positions.astype('f4')) self.vao = self.ctx.vertex_array( self.prog, [(self.pos_buffer, '3f', 'in_position')], ) self.resize(*self.wnd.buffer_size) def render(self, time, frame_time): self.ctx.enable_only(moderngl.PROGRAM_POINT_SIZE | moderngl.BLEND) self.ctx.blend_func = moderngl.ADDITIVE_BLENDING rotation = Matrix44.from_eulers((time, time / 2 , time / 3), dtype='f4') translation = Matrix44.from_translation((0, 0, -10), dtype='f4') modelview = translation * rotation self.prog['modelview'].write(modelview) self.prog['time'].value = time self.vao.render(mode=moderngl.POINTS) def resize(self, width, height): self.projection = Matrix44.perspective_projection(60, self.wnd.aspect_ratio, 1, 100, dtype='f4') self.prog['projection'].write(self.projection) if __name__ == '__main__': Particles.run() moderngl-moderngl-773b733/examples/old/polygon_offset.py000066400000000000000000000060761470420062000234160ustar00rootroot00000000000000import moderngl_window from moderngl_window import geometry from pyrr import Matrix44 class PolygonOffset(moderngl_window.WindowConfig): title = "Polygon Offset" samples = 4 def __init__(self, **kwargs): super().__init__(**kwargs) self.program_sphere = self.ctx.program( vertex_shader=""" #version 330 uniform mat4 m_model; uniform mat4 m_proj; in vec3 in_position; in vec3 in_normal; out vec3 pos; out vec3 normal; void main() { vec4 p = m_model * vec4(in_position, 1.0); gl_Position = m_proj * p; mat3 m_normal = inverse(transpose(mat3(m_model))); normal = m_normal * normalize(in_normal); pos = p.xyz; } """, fragment_shader=""" #version 330 out vec4 fragColor; uniform vec4 color = vec4(1.0, 0.0, 0.0, 1.0); in vec3 pos; in vec3 normal; void main() { float l = dot(normalize(-pos), normalize(normal)); fragColor = color * (0.25 + abs(l) * 0.75); } """, ) self.program_lines = self.ctx.program( vertex_shader=""" #version 330 uniform mat4 m_model; uniform mat4 m_proj; in vec3 in_position; void main() { gl_Position = m_proj * m_model * vec4(in_position, 1.0); } """, fragment_shader=""" #version 330 out vec4 fragColor; void main() { fragColor = vec4(0.7, 0.7, 0.7, 1.0); } """, ) self.sphere = geometry.sphere(radius=2.0, sectors=32, rings=16) self.projection = Matrix44.perspective_projection(60, self.wnd.aspect_ratio, 1, 100, dtype="f4") self.poly_offset_enabled = True def render(self, time: float, frame_time: float): self.ctx.clear() self.ctx.enable(self.ctx.DEPTH_TEST | self.ctx.CULL_FACE) self.program_lines["m_proj"].write(self.projection) self.program_sphere["m_proj"].write(self.projection) trans = Matrix44.from_translation((0, 0, -4.5), dtype="f4") rot = Matrix44.from_eulers((time/2, time/12.33, time/11.94), dtype="f4") matrix = rot @ trans self.program_lines["m_model"].write(matrix) self.program_sphere["m_model"].write(matrix) self.sphere.render(self.program_sphere) if self.poly_offset_enabled: self.ctx.polygon_offset = -1, -1 self.ctx.wireframe = True self.sphere.render(self.program_lines) if self.poly_offset_enabled: self.ctx.polygon_offset = 0, 0 self.ctx.wireframe = False def key_event(self, key, action, modifiers): keys = self.wnd.keys if action == keys.ACTION_PRESS and key == keys.SPACE: self.poly_offset_enabled = not self.poly_offset_enabled PolygonOffset.run() moderngl-moderngl-773b733/examples/old/pygame_hello_world.py000066400000000000000000000026321470420062000242270ustar00rootroot00000000000000import pygame import moderngl pygame.init() pygame.display.set_mode((400, 400), flags=pygame.OPENGL | pygame.DOUBLEBUF) # ctx = moderngl.create_context() ctx = moderngl.get_context() prog = ctx.program( vertex_shader=''' #version 330 core uniform float time; vec2 vertex[3] = vec2[]( vec2(1.0, 0.0), vec2(-0.5, -0.86), vec2(-0.5, 0.86) ); vec3 color[3] = vec3[]( vec3(0.0, 0.0, 1.0), vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0) ); out vec3 v_color; void main() { v_color = color[gl_VertexID]; float r = float(gl_InstanceID - 4) * 0.15 * (0.8 + sin(time) * 0.2); mat2 rot = mat2(cos(r), sin(r), -sin(r), cos(r)); gl_Position = vec4(rot * vertex[gl_VertexID] * 0.95, 0.0, 1.0); } ''', fragment_shader=''' #version 330 core in vec3 v_color; out vec4 f_color; void main() { f_color = vec4(pow(v_color, vec3(1.0 / 2.2)), 1.0); } ''', ) vao = ctx.vertex_array(prog, []) vao.instances = 9 vao.vertices = 3 clock = pygame.Clock() while True: for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() quit() prog["time"].value += 1.0 / 60.0 ctx.clear() vao.render() pygame.display.flip() clock.tick(60) moderngl-moderngl-773b733/examples/old/raymarching.py000066400000000000000000000135601470420062000226610ustar00rootroot00000000000000''' simple raymarching demo with moderngl author: minu jeong ''' import numpy as np from _example import Example class Raymarching(Example): gl_version = (3, 3) window_size = (500, 500) aspect_ratio = 1.0 def __init__(self, **kwargs): super().__init__(**kwargs) self.vaos = [] program = self.ctx.program( vertex_shader=VERTEX_SHADER, fragment_shader=FRAGMENT_SHADER ) vertex_data = np.array([ # x, y, z, u, v -1.0, -1.0, 0.0, 0.0, 0.0, +1.0, -1.0, 0.0, 1.0, 0.0, -1.0, +1.0, 0.0, 0.0, 1.0, +1.0, +1.0, 0.0, 1.0, 1.0, ]).astype(np.float32) content = [( self.ctx.buffer(vertex_data), '3f 2f', 'in_vert', 'in_uv' )] idx_data = np.array([ 0, 1, 2, 1, 2, 3 ]).astype(np.int32) idx_buffer = self.ctx.buffer(idx_data) self.vao = self.ctx.vertex_array(program, content, idx_buffer) self.u_time = program.get("T", 0.0) def render(self, time: float, frame_time: float): self.u_time.value = time self.vao.render() VERTEX_SHADER = ''' #version 430 in vec3 in_vert; in vec2 in_uv; out vec2 v_uv; void main() { gl_Position = vec4(in_vert.xyz, 1.0); v_uv = in_uv; } ''' FRAGMENT_SHADER = ''' #version 430 #define FAR 80.0 #define MARCHING_MINSTEP 0 #define MARCHING_STEPS 128 #define MARCHING_CLAMP 0.000001 #define NRM_OFS 0.001 #define AO_OFS 0.01 #define PI 3.141592 #define FOG_DIST 2.5 #define FOG_DENSITY 0.32 #define FOG_COLOR vec3(0.35, 0.37, 0.42) layout(location=0) uniform float T; // in vec2 v_uv: screen space coordniate in vec2 v_uv; // out color out vec4 out_color; // p: sample position // r: rotation in Euler angles (radian) vec3 rotate(vec3 p, vec3 r) { vec3 c = cos(r); vec3 s = sin(r); mat3 rx = mat3( 1, 0, 0, 0, c.x, -s.x, 0, s.x, c.s ); mat3 ry = mat3( c.y, 0, s.y, 0, 1, 0, -s.y, 0, c.y ); mat3 rz = mat3( c.z, -s.z, 0, s.z, c.z, 0, 0, 0, 1 ); return rz * ry * rx * p; } // p: sample position // t: tiling distance vec3 tile(vec3 p, vec3 t) { return mod(p, t) - 0.5 * t; } // p: sample position // r: radius float sphere(vec3 p, float r) { return length(p) - r; } // p: sample position // b: width, height, length (scalar along x, y, z axis) float box(vec3 p, vec3 b) { return length(max(abs(p) - b, 0.0)); } // c.x, c.y: offset // c.z: radius float cylinder(vec3 p, vec3 c) { return length(p.xz - c.xy) - c.z; } // a, b: capsule position from - to // r: radius r float capsule(vec3 p, vec3 a, vec3 b, float r) { vec3 dp = p - a; vec3 db = b - a; float h = clamp(dot(dp, db) / dot(db, db), 0.0, 1.0); return length(dp - db * h) - r; } // p: sample position // c: cylinder c // b: box b float clamp_cylinder(vec3 p, vec3 c, vec3 b) { return max(cylinder(p, c), box(p, b)); } // a: primitive a // b: primitive b // k: blending amount float blend(float a, float b, float k) { float h = clamp(0.5 + 0.5 * (a - b) / k, 0.0, 1.0); return mix(a, b, h) - k * h * (1.0 - h); } float displace(vec3 p, float m, float s) { return sin(p.x * m) * sin(p.y * m) * sin(p.z * m) * s; } // world float sample_world(vec3 p, inout vec3 c) { vec3 b_left_pos = p - vec3(-0.8, -0.25, 0.0); b_left_pos = rotate(b_left_pos, vec3(T, 0.0, 0.0)); float d_box_left = box(b_left_pos, vec3(0.4)); vec3 b_right_pos = p - vec3(+0.8, -0.25, 0.0); b_right_pos = rotate(b_right_pos, vec3(0.0, 0.0, T)); float d_box_right = box(b_right_pos, vec3(0.4)); vec3 b_up_pos = p - vec3(0.0, 1.05, 0.0); b_up_pos = rotate(b_up_pos, vec3(0.0, T, 0.0)); float d_box_up = box(b_up_pos, vec3(0.4)); float d_box = FAR; d_box = min(d_box, d_box_left); d_box = min(d_box, d_box_right); d_box = min(d_box, d_box_up); vec3 s_pos = p - vec3(0.0, 0.2, 0.0); float d_sphere = sphere(s_pos, 0.65); float result = blend(d_sphere, d_box, 0.3); if (result < FAR) { c.x = 0.5; c.y = 0.75; c.z = 0.25; } return result; } // o: origin // r: ray // c: color float raymarch(vec3 o, vec3 r, inout vec3 c) { float t = 0.0; vec3 p = vec3(0); float d = 0.0; for (int i = MARCHING_MINSTEP; i < MARCHING_STEPS; i++) { p = o + r * t; d = sample_world(p, c); if (abs(d) < MARCHING_CLAMP) { return t; } t += d; } return FAR; } // p: sample surface vec3 norm(vec3 p) { vec2 o = vec2(NRM_OFS, 0.0); vec3 dump_c = vec3(0); return normalize(vec3( sample_world(p + o.xyy, dump_c) - sample_world(p - o.xyy, dump_c), sample_world(p + o.yxy, dump_c) - sample_world(p - o.yxy, dump_c), sample_world(p + o.yyx, dump_c) - sample_world(p - o.yyx, dump_c) )); } void main() { // o: origin vec3 o = vec3(0.0, 0.5, -6.0); // r: ray vec3 r = normalize(vec3(v_uv - vec2(0.5, 0.5), 1.001)); // l: light vec3 l = normalize(vec3(-0.5, -0.2, 0.1)); // c: albedo vec3 c = vec3(0.125); float d = raymarch(o, r, c); // pixel color vec3 color = vec3(0); if (d < FAR) { vec3 p = o + r * d; vec3 n = norm(p); float lambert = dot(n, l); lambert = clamp(lambert, 0.1, 1.0); #define SPEC_COLOR vec3(0.85, 0.75, 0.5) vec3 h = normalize(o + l); float ndh = clamp(dot(n, h), 0.0, 1.0); float ndv = clamp(dot(n, -o), 0.0, 1.0); float spec = pow((ndh + ndv) + 0.01, 64.0) * 0.25; color = c * lambert + SPEC_COLOR * spec; } // add simple fog color = mix(FOG_COLOR, color, clamp(pow(FOG_DIST / abs(d), FOG_DENSITY), 0.0, 1.0)); out_color = vec4(color, 1.0); } ''' if __name__ == '__main__': Raymarching.run() moderngl-moderngl-773b733/examples/old/render_to_texture.py000066400000000000000000000016661470420062000241220ustar00rootroot00000000000000import moderngl from basic_colors_and_texture import ColorsAndTexture class RenderToTexture(ColorsAndTexture): title = "Render to Texture" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.texture1 = self.texture self.texture2 = self.ctx.texture(self.wnd.size, 3) depth_attachment = self.ctx.depth_renderbuffer(self.wnd.size) self.fbo = self.ctx.framebuffer(self.texture2, depth_attachment) def render(self, time, frame_time): for mode in ['render_to_texture', 'render_to_window']: if mode == 'render_to_texture': self.texture = self.texture1 self.fbo.clear(1.0, 1.0, 1.0) self.fbo.use() else: self.texture = self.texture2 self.ctx.screen.use() super().render(time, frame_time) if __name__ == '__main__': RenderToTexture.run() moderngl-moderngl-773b733/examples/old/requirements.txt000066400000000000000000000002341470420062000232610ustar00rootroot00000000000000moderngl_window>=2 pymunk matplotlib imageio # Window types glfw<2.0 pyglet>1.4.2<2.0 PySDL2 PyQt5<6 PySide2<6 # Resource loaders pywavefront>=1.3.0<2.0 moderngl-moderngl-773b733/examples/old/rich_lines.py000066400000000000000000000062111470420062000224670ustar00rootroot00000000000000"""This example is a port to ModernGL of code by Nicolas P. Rougier from his "Python & OpenGL for Scientific Visualization" free online book. Available under the (new) BSD License. Book is available here: https://github.com/rougier/python-opengl Background information on this code: https://github.com/rougier/python-opengl/blob/master/09-lines.rst Original code on which this example is based: https://github.com/rougier/python-opengl/blob/master/code/chapter-09/geom-path.py """ import numpy as np from pyrr import Matrix44 import moderngl from _example import Example # prepare geometry def star(inner=0.45, outer=1.0, n=5): R = np.array([inner, outer] * n) T = np.linspace(-0.5 * np.pi, 1.5 * np.pi, 2 * n, endpoint=False) P = np.zeros((2 * n, 2)) P[:, 0] = R * np.cos(T) P[:, 1] = R * np.sin(T) return np.vstack([P, P[0]]) def rect(x, y, w, h): return np.array([(x, y), (x + w, y), (x + w, y + h), (x, y + h), (x, y)]) def build_buffers(lines): """Prepare the buffers for multi-polyline rendering. Closed polyline must have their last point identical to their first point.""" lines = [np.array(line, dtype="f4") for line in lines] indices = [] reset_index = [-1] start_index = 0 for line in lines: if np.all(line[0] == line[-1]): # closed path idx = np.arange(len(line) + 3) - 1 idx[0], idx[-2], idx[-1] = len(line) - 1, 0, 1 else: idx = np.arange(len(line) + 2) - 1 idx[0], idx[-1] = 0, len(line) - 1 indices.append(idx + start_index) start_index += len(line) indices.append(reset_index) return np.vstack(lines).astype("f4"), np.concatenate(indices).astype("i4") class RichLines(Example): title = "Rich Lines" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.line_prog = self.load_program("rich_lines.glsl") lines = [ star(n=5) * 300 + (400, 400), star(n=8) * 150 + (900, 200), rect(900, 600, 150, 50), [(1200, 100), (1400, 200), (1300, 100)], ] vertex, index = build_buffers(lines) vbo = self.ctx.buffer(vertex) ibo = self.ctx.buffer(index) self.vao = self.ctx.simple_vertex_array(self.line_prog, vbo, "position", index_buffer=ibo) # Set the desired properties for the lines. # Note: # - round cap/ends are used if miter_limit < 0 # - antialias value is in model space and should probably be scaled to be ~1.5px in # screen space self.line_prog["linewidth"].value = 15 self.line_prog["antialias"].value = 1.5 self.line_prog["miter_limit"].value = -1 self.line_prog["color"].value = 0, 0, 1, 1 self.line_prog["projection"].write( Matrix44.orthogonal_projection(0, 1600, 800, 0, 0.5, -0.5, dtype="f4") ) def render(self, time, frame_time): self.ctx.clear(1, 1, 1, 1) self.ctx.enable(moderngl.BLEND) self.vao.render(moderngl.LINE_STRIP_ADJACENCY) if __name__ == '__main__': RichLines.run() moderngl-moderngl-773b733/examples/old/scissor.py000066400000000000000000000061071470420062000220410ustar00rootroot00000000000000''' Framebuffer scissoring. Renders a fullscreen quad four times with different scissor values filling each quadrant of the screen with a different color. We swap between rendering geometry and using clear. ''' import numpy as np import moderngl from _example import Example class Scissor(Example): gl_version = (3, 3) title = "Scissor" resizable = True aspect_ratio = None def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 fragColor; uniform vec4 color; void main() { fragColor = color; } ''', ) quad = [ -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0, -1.0, ] vbo = self.ctx.buffer(np.array(quad, dtype='f4')) self.vao = self.ctx.simple_vertex_array(self.prog, vbo, 'in_vert') def render(self, time: float, frame_time: float): """Swap between rendering geometry and using clear""" fb_width_half = self.wnd.buffer_width // 2 fb_height_half = self.wnd.buffer_height // 2 if self.wnd.frames % 2 == 0: # upper left (red) self.ctx.scissor = 0, fb_height_half, fb_width_half, fb_height_half self.prog['color'].value = 1.0, 0.0, 0.0, 0.0 self.vao.render(mode=moderngl.TRIANGLE_STRIP) # upper right (green) self.ctx.scissor = fb_width_half, fb_height_half, fb_width_half, fb_height_half self.prog['color'].value = 0.0, 1.0, 0.0, 0.0 self.vao.render(mode=moderngl.TRIANGLE_STRIP) # Lower left self.ctx.scissor = 0, 0, fb_width_half, fb_height_half self.prog['color'].value = 0.0, 0.0, 1.0, 0.0 self.vao.render(mode=moderngl.TRIANGLE_STRIP) # Lower right self.ctx.scissor = fb_width_half, 0, fb_width_half, fb_height_half self.prog['color'].value = 1.0, 1.0, 1.0, 1.0 self.vao.render(mode=moderngl.TRIANGLE_STRIP) else: # upper left (red) self.ctx.scissor = 0, fb_height_half, fb_width_half, fb_height_half self.ctx.clear(1.0, 0.0, 0.0, 0.0) # upper right (green) self.ctx.scissor = fb_width_half, fb_height_half, fb_width_half, fb_height_half self.ctx.clear(0.0, 1.0, 0.0, 0.0) # Lower left self.ctx.scissor = 0, 0, fb_width_half, fb_height_half self.ctx.clear(0.0, 0.0, 1.0, 0.0) # Lower right self.ctx.scissor = fb_width_half, 0, fb_width_half, fb_height_half self.ctx.clear(1.0, 1.0, 1.0, 1.0) # Reset scissor self.ctx.scissor = None if __name__ == '__main__': Scissor.run() moderngl-moderngl-773b733/examples/old/shadow_mapping_example.py000066400000000000000000000230161470420062000250650ustar00rootroot00000000000000# Example of shadow rendering (shadow mapping) # Description: This example shows how you can draw a shadow # from a single light source. # Note: The left-hand rule coordinate system is used. import moderngl as gl import moderngl_window as glw import struct import math # Create window window_cls = glw.get_local_window_cls('pyglet') window = window_cls( size=(1024, 512), fullscreen=False, title='Shadow rendering (shadow mapping) example', resizable=False, vsync=True, gl_version=(3, 3) ) ctx = window.ctx glw.activate_context(window, ctx=ctx) window.clear() window.swap_buffers() # Window program window_program = ctx.program( vertex_shader=''' #version 330 in vec3 in_vert; in vec4 in_color; uniform float camera_aspect_ratio; uniform vec3 camera_position; uniform mat3 camera_rotation_matrix; uniform mat4 camera_projection_matrix; out vec3 o_vert; out vec4 o_color; void main() { vec3 new_position = camera_rotation_matrix*(in_vert-camera_position); gl_Position = camera_projection_matrix*vec4( new_position.x, new_position.y*camera_aspect_ratio, new_position.z, 1.0 ); o_vert = new_position; o_color = in_color; } ''', fragment_shader=''' #version 330 in vec3 o_vert; in vec4 o_color; uniform float light_aspect_ratio; uniform vec2 light_clip_space; uniform float light_perspective; uniform vec3 light_position; uniform mat3 light_rotation_matrix; uniform vec3 camera_position; uniform mat3 camera_revers_rotation_matrix; uniform float shadow_bias; uniform sampler2D light_depthI; out vec4 f_color; void main() { f_color = o_color; // Camera pixels position // vec3 pixel_coords = o_vert; //////////// // ROTATION 3D PROG moving prog // // Convert to light pixel coords // pixel_coords = camera_revers_rotation_matrix* pixel_coords; pixel_coords += camera_position; vec3 pixel_world_coords = pixel_coords; // Pixel world coordinates pixel_coords -= light_position; pixel_coords = light_rotation_matrix* pixel_coords; ///////////////// // Convert .xy to 2D coords // float distance = length(pixel_coords); // ^^ From light to pixel 3D distance ^^ pixel_coords.y*=light_aspect_ratio; pixel_coords.xy = vec2(pixel_coords.xy/ (pixel_coords.z+(1.0-pixel_coords.z)*(1.0-light_perspective))+1.0)/2.0; /////////// // Get depth float depth = texture(light_depthI, pixel_coords.xy).x; depth = 2.0 * depth - 1.0; vec2 lcs = light_clip_space; depth = ( (2.0*lcs.x*lcs.y/(lcs.y+lcs.x-depth*(lcs.y-lcs.x)))* light_perspective+ ((depth+(lcs.y+lcs.x)/(lcs.y-lcs.x))*(lcs.y - lcs.x))/2* (1.0-light_perspective) ); // Compare depth if (!( pixel_coords.x > 0.0 && pixel_coords.y > 0.0 && pixel_coords.x < 1.0 && pixel_coords.y < 1.0 && pixel_coords.z > 0.0 && pixel_coords.z < depth+shadow_bias )) { f_color.xyz = f_color.xyz*0.3; } } ''' ) # Light program light_program = ctx.program( vertex_shader=''' #version 330 in vec3 in_vert; in vec4 in_color; uniform float light_aspect_ratio; uniform vec3 light_position; uniform mat3 light_rotation_matrix; uniform mat4 light_projection_matrix; out vec4 o_color; void main() { vec3 new_position = light_rotation_matrix*(in_vert-light_position); gl_Position = light_projection_matrix*vec4( new_position.x, new_position.y*light_aspect_ratio, new_position.z, 1.0 ); o_color = in_color; } ''', fragment_shader=''' #version 330 in vec4 o_color; out vec4 f_color; void main() { f_color = o_color; } ''' ) # Preparing scene vertex = [ -.5, -.1, -.5, -.5, -.1, .5, .5, -.1, .5, .5, -.1, -.5, .5, -.1, .5, -.5, -.1, -.5, .2, -.1, -.2, .2, -.1, .2, -.2, .05, .2, ] vertex_buf = ctx.buffer(struct.pack(f'{len(vertex)}f', *vertex)) colors = [ .5, .5, .5, 1, .5, .5, .5, 1, .5, .5, .5, 1, .5, .5, .5, 1, .5, .5, .5, 1, .5, .5, .5, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, ] colors_buf = ctx.buffer(struct.pack(f'{len(colors)}f', *colors)) # Prepair render window_vao = ctx.vertex_array(window_program, [ (vertex_buf, '3f', 'in_vert'), (colors_buf, '4f', 'in_color') ]) window_fbo = ctx.framebuffer( color_attachments=[ctx.texture(window.size, 4)], depth_attachment=ctx.depth_texture(window.size) ) window_fbo.color_attachments[0].repeat_x = False window_fbo.color_attachments[0].repeat_y = False window_fbo.depth_attachment.repeat_x = False window_fbo.depth_attachment.repeat_y = False window_fbo.depth_attachment.compare_func = '' light_vao = ctx.vertex_array(light_program, [ (vertex_buf, '3f', 'in_vert'), (colors_buf, '4f', 'in_color') ]) light_fbo = ctx.framebuffer( color_attachments=[ctx.texture(window.size, 4)], depth_attachment=ctx.depth_texture(window.size) ) light_fbo.color_attachments[0].repeat_x = False light_fbo.color_attachments[0].repeat_y = False light_fbo.depth_attachment.repeat_x = False light_fbo.depth_attachment.repeat_y = False light_fbo.depth_attachment.filter = gl.LINEAR, gl.LINEAR_MIPMAP_LINEAR light_fbo.depth_attachment.compare_func = '' # Define matrix methods def get_projection_matrix(near, far, perspective=1): perspective_projection = ( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, (far+near)/(far-near), 1, 0, 0, -(2*far*near)/(far-near), 0 ) orthographic_projection = ( 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 2/(far-near), 0, 0, 0, -(far+near)/(far-near), 1 ) result_projection = [] for x, y in zip(perspective_projection, orthographic_projection): result_projection.append(x*perspective+y*(1-perspective)) return result_projection def get_rotation_matrix(rx, ry, rz, revers=True): rx *= (math.pi / 180) ry *= (math.pi / 180) rz *= (math.pi / 180) if not revers: srx, crx = math.sin(rx), math.cos(rx) sry, cry = math.sin(-ry), math.cos(-ry) srz, crz = math.sin(-rz), math.cos(-rz) rotation_matrix = ( cry * crz - sry * srx * srz, cry * srz + sry * srx * crz, -sry * crx, -crx * srz, crx * crz, srx, sry * crz + cry * srx * srz, sry * srz - cry * srx * crz, cry * crx ) else: srx, crx = math.sin(-rx), math.cos(-rx) sry, cry = math.sin(ry), math.cos(ry) srz, crz = math.sin(rz), math.cos(rz) rotation_matrix = ( crz * cry + srz * srx * sry, srz * crx, srz * srx * cry - crz * sry, crz * srx * sry - srz * cry, crz * crx, srz * sry + crz * srx * cry, crx * sry, -srx, crx * cry ) return rotation_matrix ##################################################################### # Define constants far = 10 # Camera projection far near = 0.001 # Camera projection near perpective = 1 # Select perpective/orthographic projection position = [0., 0.1, -0.4] # Camera position rotate = [-20, 0, 0] # Camera angle light_far = 10 # Light projection far light_near = 0.001 # Light projection near light_perspective = 0 # Select perpective/orthographic projection light_position = [0, 0.4, 0] # Light position light_rotate = [-90, 0, 0] # Light angle shadow_bias = 0.001 # Allowed shadow offset view_as_light = False # Show what the light sees ##################################################################### # Filling uniforms window_vao.program['camera_aspect_ratio'] = \ window_fbo.size[0]/window_fbo.size[1] window_vao.program['camera_position'] = position window_vao.program['camera_projection_matrix'] = \ get_projection_matrix(near, far, perpective) window_vao.program['camera_rotation_matrix'] = \ get_rotation_matrix(*rotate, revers=False) window_vao.program['light_aspect_ratio'] = light_fbo.size[0]/light_fbo.size[1] window_vao.program['light_clip_space'] = light_near, light_far window_vao.program['light_perspective'] = light_perspective window_vao.program['light_position'] = light_position window_vao.program['light_rotation_matrix'] = \ get_rotation_matrix(*light_rotate, revers=False) window_vao.program['camera_revers_rotation_matrix'] = \ get_rotation_matrix(*rotate, revers=True) light_vao.program['light_aspect_ratio'] = light_fbo.size[0]/light_fbo.size[1] light_vao.program['light_position'] = light_position light_vao.program['light_projection_matrix'] = \ get_projection_matrix(light_near, light_far, light_perspective) light_vao.program['light_rotation_matrix'] = \ get_rotation_matrix(*light_rotate, revers=False) window_vao.program['shadow_bias'] = shadow_bias # Render loop ctx.enable(gl.DEPTH_TEST) ctx.depth_func = '<' while not window.is_closing: light_fbo.use() light_fbo.clear() light_vao.render(vertices=vertex_buf.size // 4 // 3) window_fbo.use() window_fbo.clear() light_fbo.depth_attachment.use(location=0) window_vao.render(vertices=vertex_buf.size // 4 // 3) ctx.copy_framebuffer( window.fbo, light_fbo if view_as_light else window_fbo ) window.swap_buffers() moderngl-moderngl-773b733/examples/old/shadowmapping.py000066400000000000000000000215351470420062000232170ustar00rootroot00000000000000""" Links: - http://www.opengl-tutorial.org/fr/intermediate-tutorials/tutorial-16-shadow-mapping/#shadowmap-basique - https://learnopengl.com/Advanced-Lighting/Shadows/Shadow-Mapping - https://learnopengl.com/Advanced-OpenGL/Depth-testing """ from typing import Final, Dict import numpy as np from moderngl_window.scene import Scene from pyrr import Matrix44 from pyrr import Vector3 import moderngl # from _example import Example SHADOW_SIZE: Final[int] = 2 << 7 # 512² class ShadowMappingSample(Example): title = "ShadowMapping" window_size = (1280, 720) gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog_render_scene_with_sm = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 u_mvp; uniform mat4 u_depth_bias_mvp; in vec3 in_position; in vec3 in_normal; in vec2 in_texcoord_0; out vec3 v_vert; out vec3 v_norm; out vec2 v_text; out vec4 v_shadow_coord; void main() { gl_Position = u_mvp * vec4(in_position, 1.0); v_shadow_coord = u_depth_bias_mvp * vec4(in_position, 1.0); v_vert = in_position; v_norm = in_normal; v_text = in_texcoord_0; } ''', fragment_shader=''' #version 330 uniform vec3 u_light; uniform vec3 u_color; uniform sampler2DShadow u_sampler_shadow; uniform bool u_use_color_texture; uniform sampler2D u_sampler_billboard; in vec3 v_vert; in vec3 v_norm; in vec2 v_text; in vec4 v_shadow_coord; out vec4 f_color; const float LIGHT_AMBIENT = 0.20; float compute_visibility(in float cos_theta) { // shadow coordinates in light space vec2 shadow_coord_ls = v_shadow_coord.xy / v_shadow_coord.w; // bias according to the slope float bias = 0.005 * tan(acos(cos_theta)); bias = clamp(bias, 0, 0.01); float z_from_cam = v_shadow_coord.z / v_shadow_coord.w - bias; vec3 shadow_coord = vec3(shadow_coord_ls, z_from_cam); float shadow_value = texture(u_sampler_shadow, shadow_coord); return 1.0 - shadow_value; } void main() { // Lighting // Diffuse lighting + ambient vec3 light_vector_obj_space = normalize(u_light - v_vert); vec3 normal_obj_space = normalize(v_norm); float cos_theta = dot(light_vector_obj_space, normal_obj_space); float diffuse = clamp(cos_theta, 0.0, 1.0); // Shadow component float lum = mix(LIGHT_AMBIENT, 1.0, diffuse * compute_visibility(cos_theta)); // Color object (color or texture) vec4 object_color = u_use_color_texture ? vec4(texture(u_sampler_billboard, v_text).rgb, 1.0) : vec4(u_color, 1.0); // Final pixel color f_color = object_color * lum; } ''', ) self.prog_depth = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 u_mvp; in vec3 in_position; void main() { gl_Position = u_mvp * vec4(in_position, 1.0); } ''', fragment_shader=''' #version 330 void main() { } ''', ) # textures unit self.prog_render_scene_with_sm['u_sampler_shadow'].value = 0 self.prog_render_scene_with_sm['u_sampler_billboard'].value = 1 # uniforms self.mvp = self.prog_render_scene_with_sm['u_mvp'] self.mvp_depth = self.prog_render_scene_with_sm['u_depth_bias_mvp'] self.light = self.prog_render_scene_with_sm['u_light'] self.color = self.prog_render_scene_with_sm['u_color'] self.use_color_texture = self.prog_render_scene_with_sm['u_use_color_texture'] self.mvp_shadow = self.prog_depth['u_mvp'] self.objects: Dict[str, moderngl.VertexArray] = {} self.objects_shadow: Dict[str, moderngl.VertexArray] = {} for name in {'ground', 'grass', 'billboard', 'billboard-holder', 'billboard-image'}: scene: Scene = self.load_scene(f'scene-1-{name}.obj') vao = scene.root_nodes[0].mesh.vao self.objects[name] = vao.instance(self.prog_render_scene_with_sm) self.objects_shadow[name] = vao.instance(self.prog_depth) # texture on billboard self.texture_on_billboard = self.load_texture_2d('infographic-1.jpg') self.texture_on_billboard.use(location=1) shadow_size = (SHADOW_SIZE, SHADOW_SIZE,) self.tex_depth = self.ctx.depth_texture(shadow_size) self.tex_color_depth = self.ctx.texture(shadow_size, components=1, dtype='f4') self.fbo_depth = self.ctx.framebuffer( color_attachments=[self.tex_color_depth], depth_attachment=self.tex_depth ) self.sampler_depth = self.ctx.sampler( # bi-linear interpolation on depth fetch -> Percentage Close Filtering (2x2) filter=(moderngl.LINEAR, moderngl.LINEAR), compare_func='>=', # enable depth func repeat_x=False, repeat_y=False, ) self.ctx.enable(moderngl.CULL_FACE) def render(self, time: float, _frame_time: float): # pass 0: clear buffers self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) cam_proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0) cam_look_at = Matrix44.look_at( (47.697, -8.147, 24.498), (0.0, 0.0, 8.0), (0.0, 0.0, 1.0), ) cam_rotate = Matrix44.from_z_rotation(np.sin(time) * 0.5 + 0.2) cam_mvp = cam_proj * cam_look_at * cam_rotate self.mvp.write(cam_mvp.astype('f4').tobytes()) # build light camera light_rotate = Matrix44.from_z_rotation(time) light_pos = light_rotate * Vector3((-60.69, -40.14, 52.49)) self.light.value = tuple(light_pos) light_look_at = Matrix44.look_at( light_pos, target=(0, 0, 0), up=(0.0, 0.0, 1.0), ) # light projection matrix (scene dependent) light_proj = Matrix44.perspective_projection( fovy=90.0 / 4, # smaller value increase shadow precision aspect=self.wnd.aspect_ratio, near=60.0, far=100.0 ) # light model view projection matrix mvp_light = light_proj * light_look_at bias_matrix = ( Matrix44.from_translation((0.5, 0.5, 0.5), dtype='f4') * Matrix44.from_scale((0.5, 0.5, 0.5), dtype='f4') ) mvp_depth_bias = bias_matrix * mvp_light # send uniforms to shaders self.mvp_depth.write(mvp_depth_bias.astype('f4').tobytes()) self.mvp_shadow.write(mvp_light.astype('f4').tobytes()) # pass 1: render shadow-map (depth framebuffer -> texture) from light view self.fbo_depth.use() self.fbo_depth.clear(1.0, 1.0, 1.0) # https://moderngl.readthedocs.io/en/stable/reference/context.html?highlight=culling#moderngl.Context.front_face # clock wise -> render back faces self.ctx.front_face = 'cw' for vao_shadow in self.objects_shadow.values(): vao_shadow.render() # pass 2: render the scene and retro project depth shadow-map # counter clock wise -> render front faces self.ctx.front_face = 'ccw' self.use_color_texture.value = False self.ctx.screen.use() self.sampler_depth.use(location=0) self.tex_depth.use(location=0) # pass 2a: render colored scene with shadow for object_name, object_color in ( ("ground", (0.67, 0.49, 0.29)), ("grass", (0.46, 0.67, 0.29)), ("billboard", (1.0, 1.0, 1.0)), ("billboard-holder", (0.2, 0.2, 0.2)), ): self.color.value = object_color self.objects[object_name].render() # pass 2b: render textured scene with shadow self.use_color_texture.value = True self.objects['billboard-image'].render() if __name__ == '__main__': ShadowMappingSample.run() moderngl-moderngl-773b733/examples/old/simple_camera.py000066400000000000000000000150511470420062000231530ustar00rootroot00000000000000''' Added a simple camera class to an existing example. The camera class is built using following tutorials: https://learnopengl.com/Getting-started/Camera http://in2gpu.com/2016/03/14/opengl-fps-camera-quaternion/ Controls: Move: Forward - W Backwards - S Strafe: Up - up arrow Down - down arrow Left - A Right - D Rotate: Left - Q Right - E Zoom: In - X Out - Z adopted by: Alex Zakrividoroga ''' import numpy as np from pyrr import Matrix44, Quaternion, Vector3, vector import moderngl from _example import Example class Camera(): def __init__(self, ratio): self._zoom_step = 0.1 self._move_vertically = 0.1 self._move_horizontally = 0.1 self._rotate_horizontally = 0.1 self._rotate_vertically = 0.1 self._field_of_view_degrees = 60.0 self._z_near = 0.1 self._z_far = 100 self._ratio = ratio self.build_projection() self._camera_position = Vector3([0.0, 0.0, -40.0]) self._camera_front = Vector3([0.0, 0.0, 1.0]) self._camera_up = Vector3([0.0, 1.0, 0.0]) self._cameras_target = (self._camera_position + self._camera_front) self.build_look_at() def zoom_in(self): self._field_of_view_degrees = self._field_of_view_degrees - self._zoom_step self.build_projection() def zoom_out(self): self._field_of_view_degrees = self._field_of_view_degrees + self._zoom_step self.build_projection() def move_forward(self): self._camera_position = self._camera_position + self._camera_front * self._move_horizontally self.build_look_at() def move_backwards(self): self._camera_position = self._camera_position - self._camera_front * self._move_horizontally self.build_look_at() def strafe_left(self): self._camera_position = self._camera_position - vector.normalize(self._camera_front ^ self._camera_up) * self._move_horizontally self.build_look_at() def strafe_right(self): self._camera_position = self._camera_position + vector.normalize(self._camera_front ^ self._camera_up) * self._move_horizontally self.build_look_at() def strafe_up(self): self._camera_position = self._camera_position + self._camera_up * self._move_vertically self.build_look_at() def strafe_down(self): self._camera_position = self._camera_position - self._camera_up * self._move_vertically self.build_look_at() def rotate_left(self): rotation = Quaternion.from_y_rotation(2 * float(self._rotate_horizontally) * np.pi / 180) self._camera_front = rotation * self._camera_front self.build_look_at() def rotate_right(self): rotation = Quaternion.from_y_rotation(-2 * float(self._rotate_horizontally) * np.pi / 180) self._camera_front = rotation * self._camera_front self.build_look_at() def build_look_at(self): self._cameras_target = (self._camera_position + self._camera_front) self.mat_lookat = Matrix44.look_at( self._camera_position, self._cameras_target, self._camera_up) def build_projection(self): self.mat_projection = Matrix44.perspective_projection( self._field_of_view_degrees, self._ratio, self._z_near, self._z_far) def grid(size, steps): u = np.repeat(np.linspace(-size, size, steps), 2) v = np.tile([-size, size], steps) w = np.zeros(steps * 2) return np.concatenate([np.dstack([u, v, w]), np.dstack([v, u, w])]) class PerspectiveProjection(Example): gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_vert; void main() { gl_Position = Mvp * vec4(in_vert, 1.0); } ''', fragment_shader=''' #version 330 out vec4 f_color; void main() { f_color = vec4(0.1, 0.1, 0.1, 1.0); } ''', ) self.camera = Camera(self.aspect_ratio) self.mvp = self.prog['Mvp'] self.vbo = self.ctx.buffer(grid(15, 10).astype('f4')) self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert') self.states = { self.wnd.keys.W: False, # forward self.wnd.keys.S: False, # backwards self.wnd.keys.UP: False, # strafe Up self.wnd.keys.DOWN: False, # strafe Down self.wnd.keys.A: False, # strafe left self.wnd.keys.D: False, # strafe right self.wnd.keys.Q: False, # rotate left self.wnd.keys.E: False, # rotare right self.wnd.keys.Z: False, # zoom in self.wnd.keys.X: False, # zoom out } def move_camera(self): if self.states.get(self.wnd.keys.W): self.camera.move_forward() if self.states.get(self.wnd.keys.S): self.camera.move_backwards() if self.states.get(self.wnd.keys.UP): self.camera.strafe_up() if self.states.get(self.wnd.keys.DOWN): self.camera.strafe_down() if self.states.get(self.wnd.keys.A): self.camera.strafe_left() if self.states.get(self.wnd.keys.D): self.camera.strafe_right() if self.states.get(self.wnd.keys.Q): self.camera.rotate_left() if self.states.get(self.wnd.keys.E): self.camera.rotate_right() if self.states.get(self.wnd.keys.Z): self.camera.zoom_in() if self.states.get(self.wnd.keys.X): self.camera.zoom_out() def key_event(self, key, action, modifiers): if key not in self.states: print(key, action) return if action == self.wnd.keys.ACTION_PRESS: self.states[key] = True else: self.states[key] = False def render(self, time, frame_time): self.move_camera() self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) self.mvp.write((self.camera.mat_projection * self.camera.mat_lookat).astype('f4')) self.vao.render(moderngl.LINES) if __name__ == '__main__': PerspectiveProjection.run() moderngl-moderngl-773b733/examples/old/simple_grid.py000066400000000000000000000031571470420062000226540ustar00rootroot00000000000000import numpy as np from pyrr import Matrix44 import moderngl from _example import Example def grid(size, steps): u = np.repeat(np.linspace(-size, size, steps), 2) v = np.tile([-size, size], steps) w = np.zeros(steps * 2) return np.concatenate([np.dstack([u, v, w]), np.dstack([v, u, w])]) class SimpleGrid(Example): title = "Simple Grid" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_vert; void main() { gl_Position = Mvp * vec4(in_vert, 1.0); } ''', fragment_shader=''' #version 330 out vec4 f_color; void main() { f_color = vec4(0.1, 0.1, 0.1, 1.0); } ''', ) self.mvp = self.prog['Mvp'] self.vbo = self.ctx.buffer(grid(15, 10).astype('f4')) self.vao = self.ctx.simple_vertex_array(self.prog, self.vbo, 'in_vert') def render(self, time, frame_time): self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0) lookat = Matrix44.look_at( (40.0, 30.0, 30.0), (0.0, 0.0, 0.0), (0.0, 0.0, 1.0), ) self.mvp.write((proj * lookat).astype('f4')) self.vao.render(moderngl.LINES) if __name__ == '__main__': SimpleGrid.run() moderngl-moderngl-773b733/examples/old/subprocess_texture.py000066400000000000000000000062431470420062000243250ustar00rootroot00000000000000""" Using a subprocess in python to calculate data on a separate core. Threads in python are not really suitable for this task because of the GIL and we would just be slowing down the main thread. This is a fairly simple example spawning a deamon thread that throws new random textures on a queue that can be read back by the main process. There are probably better ways of doing this, but this is a good start. For example: We might want spawn multiple processes that writes to the same queue. """ from time import sleep import multiprocessing as mp from queue import Empty import struct import random import moderngl_window from moderngl_window import geometry from pyrr import matrix44 class SubprocessTest(moderngl_window.WindowConfig): window_size = 512, 512 aspect_ratio = 1.0 def __init__(self, **kwargs): super().__init__(**kwargs) self.texture = self.ctx.texture((100, 100), 3, data=gen_texture()) self.texture.filter = self.ctx.NEAREST, self.ctx.NEAREST self.quad = geometry.quad_2d(size=(1.3, 1.3)) self.program = self.ctx.program( vertex_shader=""" #version 330 uniform mat4 model; in vec2 in_position; in vec2 in_texcoord_0; out vec2 uv; void main () { gl_Position = model * vec4(in_position, 0.0, 1.0); uv = in_texcoord_0; } """, fragment_shader=""" #version 330 uniform sampler2D tex; in vec2 uv; out vec4 f_color; void main() { f_color = texture(tex, uv); } """, ) self.generator = TextureGenerator() self.generator.start() def next_texture(self): """Attempt to get a new texture from the queue""" try: data = self.generator.queue.get(block=False) self.texture.write(data) except Empty: pass def render(self, time: float, frame_time: float): self.ctx.clear() self.texture.use() self.program["model"].write(matrix44.create_from_axis_rotation([0.0, 0.0, 1.0], time, dtype="f4")) self.quad.render(self.program) self.next_texture() def close(self): self.generator.stop() class TextureGenerator: def __init__(self): self.queue = mp.Queue() self.process = mp.Process( target=self.do_work, args=(self.queue,), daemon=True, ) def do_work(self, queue): while True: # Back off a little bit to avoid overloading the queue if self.queue.qsize() > 60: sleep(0.5) queue.put(gen_texture(), block=False) def start(self): self.process.start() def stop(self): self.process.terminate() def gen_texture(): """ An inefficient way of generating random texture. The goal is to make the process reasonably busy. """ num_frags = 100 * 100 * 3 data = [random.randint(0, 255) for _ in range(num_frags)] return struct.pack(f"{num_frags}B", *data) if __name__ == "__main__": SubprocessTest.run() moderngl-moderngl-773b733/examples/old/tesselation.py000066400000000000000000000052621470420062000227070ustar00rootroot00000000000000#!/usr/bin/env python3 '''Simple example of using tessellation to render a cubic Bézier curve''' import numpy as np import moderngl from _example import Example class Tessellation(Example): title = "Tessellation" gl_version = (4, 0) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 400 core in vec2 in_pos; void main() { gl_Position = vec4(in_pos, 0.0, 1.0); } ''', tess_control_shader=''' #version 400 core layout(vertices = 4) out; void main() { // set tessellation levels, TODO compute dynamically gl_TessLevelOuter[0] = 1; gl_TessLevelOuter[1] = 32; // pass through vertex positions gl_out[gl_InvocationID].gl_Position = gl_in[gl_InvocationID].gl_Position; } ''', tess_evaluation_shader=''' #version 400 core layout(isolines, fractional_even_spacing, ccw) in; // compute a point on a bezier curve with the points p0, p1, p2, p3 // the parameter u is in [0, 1] and determines the position on the curve vec3 bezier(float u, vec3 p0, vec3 p1, vec3 p2, vec3 p3) { float B0 = (1.0 - u) * (1.0 - u) * (1.0 - u); float B1 = 3.0 * (1.0 - u) * (1.0 - u) * u; float B2 = 3.0 * (1.0 - u) * u * u; float B3 = u * u * u; return B0 * p0 + B1 * p1 + B2 * p2 + B3 * p3; } void main() { float u = gl_TessCoord.x; vec3 p0 = vec3(gl_in[0].gl_Position); vec3 p1 = vec3(gl_in[1].gl_Position); vec3 p2 = vec3(gl_in[2].gl_Position); vec3 p3 = vec3(gl_in[3].gl_Position); gl_Position = vec4(bezier(u, p0, p1, p2, p3), 1.0); } ''', fragment_shader=''' #version 400 core out vec4 frag_color; void main() { frag_color = vec4(1.0); } ''' ) # four vertices define a cubic Bézier curve; has to match the shaders self.ctx.patch_vertices = 4 self.ctx.line_width = 5.0 vertices = np.array([ [-1.0, 0.0], [-0.5, 1.0], [0.5, -1.0], [1.0, 0.0], ]) vbo = self.ctx.buffer(vertices.astype('f4')) self.vao = self.ctx.simple_vertex_array(self.prog, vbo, 'in_pos') def render(self, time, frame_time): self.ctx.clear(0.2, 0.4, 0.7) self.vao.render(mode=moderngl.PATCHES) if __name__ == '__main__': Tessellation.run() moderngl-moderngl-773b733/examples/old/toy_cars_with_vector_shadow.py000066400000000000000000000067471470420062000261730ustar00rootroot00000000000000import struct from colorsys import hls_to_rgb as hls from random import uniform import numpy as np from pyrr import Matrix44 import moderngl from _example import Example def random_color(): return hls(uniform(0.0, 1.0), 0.5, 0.5) cars = [] cars += [{'color': random_color(), 'pos': (1.5, i * 2.0 - 9.0, 0.0), 'angle': uniform(-0.5, 0.5)} for i in range(10)] cars += [{'color': random_color(), 'pos': (-1.5, i * 2.0 - 9.0, 0.0), 'angle': uniform(-0.5, 0.5)} for i in range(10)] class ToyCars(Example): title = "Toy Cars With Vector Shadow" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; in vec3 in_position; in vec3 in_normal; in vec3 in_color; in vec3 in_origin; in mat3 in_basis; out vec3 v_vert; out vec3 v_norm; out vec3 v_color; void main() { v_vert = in_origin + in_basis * in_position; v_norm = in_basis * in_normal; v_color = in_color; gl_Position = Mvp * vec4(v_vert, 1.0); } ''', fragment_shader=''' #version 330 uniform vec3 Light; uniform sampler2D Texture; in vec3 v_vert; in vec3 v_norm; in vec3 v_color; out vec4 f_color; void main() { float lum = clamp(dot(normalize(Light - v_vert), normalize(v_norm)), 0.0, 1.0) * 0.8 + 0.2; f_color = vec4(v_color * lum, 1.0); } ''', ) self.mvp = self.prog['Mvp'] self.light = self.prog['Light'] obj = self.load_scene('lowpoly_toy_car.obj') self.vbo = self.ctx.buffer(struct.pack( '15f', 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, ) * len(cars)) vao_wrapper = obj.root_nodes[0].mesh.vao vao_wrapper.buffer(self.vbo, '3f 3f 9f/i', ['in_color', 'in_origin', 'in_basis']) self.vao = vao_wrapper.instance(self.prog) def render(self, time, frame_time): angle = time self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) camera_pos = (np.cos(angle) * 20.0, np.sin(angle) * 20.0, 5.0) proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0) lookat = Matrix44.look_at( camera_pos, (0.0, 0.0, 0.5), (0.0, 0.0, 1.0), ) self.mvp.write((proj * lookat).astype('f4')) self.light.value = camera_pos self.vbo.write(b''.join(struct.pack( '15f', *car['color'], *car['pos'], 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, ) for car in cars)) self.vao.render(instances=len(cars)) self.vbo.write(b''.join(struct.pack( '15f', 0.0, 0.0, 0.0, *car['pos'], 1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.3, 0.6, 0.0, ) for car in cars)) self.vao.render(instances=len(cars)) if __name__ == '__main__': ToyCars.run() moderngl-moderngl-773b733/examples/old/transform_feedback_changing_primitive.py000066400000000000000000000053001470420062000301130ustar00rootroot00000000000000""" Shows transform feedback with geometry shaders were the input and output primitive is different. We have a list of points and emit triangle data to a buffer It creates a quads per point using two triangles. """ import struct from _example import Example import moderngl class GenerateData(Example): title = "Transform Feedback Geometry shader" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in vec3 in_vert; void main() { gl_Position = vec4(in_vert, 1.0); } ''', fragment_shader=''' #version 330 out vec4 f_color; void main() { f_color = vec4(1.0); } ''', ) # Transform program with geo shader self.transform_prog = self.ctx.program( vertex_shader=''' #version 330 void main() { gl_Position = vec4(gl_VertexID/5.0 - 0.9, 0.0, 0.0, 1.0); } ''', geometry_shader=""" #version 330 layout(points) in; layout(triangle_strip, max_vertices = 6) out; out vec3 pos; const float SIZE = 0.05; void main() { vec3 center = gl_in[0].gl_Position.xyz; // First triangle pos = center + vec3(-SIZE, SIZE, 0.0); EmitVertex(); pos = center + vec3(-SIZE, -SIZE, 0.0); EmitVertex(); pos = center + vec3(SIZE, SIZE, 0.0); EmitVertex(); EndPrimitive(); // Second triangle pos = center + vec3(SIZE, SIZE, 0.0); EmitVertex(); pos = center + vec3(-SIZE, -SIZE, 0.0); EmitVertex(); pos = center + vec3(SIZE, -SIZE, 0.0); EmitVertex(); EndPrimitive(); } """, varyings=['pos'], ) N = 10 self.buffer = self.ctx.buffer(reserve=N * 12 * 6) # N * 6 x vec3 self.transform_vao = self.ctx.vertex_array(self.transform_prog, []) self.transform_vao.transform(self.buffer, mode=moderngl.POINTS, vertices=N) self.vao = self.ctx.vertex_array( self.prog, [(self.buffer, '3f', 'in_vert')] ) def render(self, time, frame_time): self.wnd.clear() self.vao.render(mode=moderngl.TRIANGLES) if __name__ == '__main__': GenerateData.run() moderngl-moderngl-773b733/examples/old/transform_feedback_gen_buffer.py000066400000000000000000000025211470420062000263510ustar00rootroot00000000000000""" Generates buffer data on the gpu using transform feedback. We use an empty VertexArray running it vertices times outputting data to the buffer. More fancy calculations can of course be done. This example just shows the concept. """ import struct from _example import Example class GenerateData(Example): title = "Generate Data" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 out vec3 pos; out vec3 color; void main() { pos = vec3(gl_VertexID * 2, gl_VertexID * 2, gl_VertexID * 2); color = vec3(fract(gl_VertexID * 12.344), fract(gl_VertexID * 34.111), fract(gl_VertexID * 7.244)); } ''', varyings=['pos', 'color'], ) N = 4 self.buffer = self.ctx.buffer(reserve=N * 4 * 6) self.vao = self.ctx.vertex_array(self.prog, []) self.vao.transform(self.buffer, vertices=N) data = struct.unpack('{}f'.format(N * 6), self.buffer.read()) for i in range(0, N * 6, 6): print(data[i:i + 3], data[i + 3:i + 6]) def render(self, time, frame_time): exit(0) if __name__ == '__main__': GenerateData.run() moderngl-moderngl-773b733/examples/old/transform_feedback_multiple_buffers.py000066400000000000000000000032771470420062000276270ustar00rootroot00000000000000""" Generates buffer data on the gpu using transform feedback. We use an empty VertexArray running it vertices times outputting data to the buffer. More fancy calculations can of course be done. This example just shows the concept. """ import struct import numpy as np from _example import Example class GenerateData(Example): title = "Generate Data" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 in float number; out float times_two; out float times_three; void main() { times_two = number * 2.0; times_three = number * 3.0; } ''', varyings=['times_two', 'times_three'], varyings_capture_mode='separate', ) input_array = np.array([1.0, 2.0, 3.0, 4.0, 5.0], 'f4') self.input_buffer = self.ctx.buffer(input_array.tobytes()) self.output_buffer_0 = self.ctx.buffer(reserve=self.input_buffer.size) self.output_buffer_1 = self.ctx.buffer(reserve=self.input_buffer.size) self.vao = self.ctx.vertex_array(self.prog, [(self.input_buffer, '1f', 'number')]) self.vao.transform([self.output_buffer_0, self.output_buffer_1], vertices=len(input_array)) output_array_0 = np.frombuffer(self.output_buffer_0.read(), 'f4') output_array_1 = np.frombuffer(self.output_buffer_1.read(), 'f4') print(output_array_0) print(output_array_1) def render(self, time, frame_time): exit(0) if __name__ == '__main__': GenerateData.run() moderngl-moderngl-773b733/examples/old/using_pymunk.py000066400000000000000000000111111470420062000230730ustar00rootroot00000000000000import numpy as np import pymunk from pymunk import Vec2d import moderngl from _example import Example class PymunkExample(Example): title = "Using PyMunk" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform vec4 Camera; // Per vertex in vec2 in_vert; in vec2 in_texture; // Per instance in vec3 in_pos; in vec2 in_size; in vec4 in_tint; out vec2 v_vert; out vec2 v_texture; out vec4 v_tint; void main() { mat2 rotate = mat2( cos(in_pos.z), sin(in_pos.z), -sin(in_pos.z), cos(in_pos.z) ); v_vert = rotate * (in_vert * in_size) + in_pos.xy; gl_Position = vec4((v_vert - Camera.xy) / Camera.zw, 0.0, 1.0); v_texture = in_texture; v_tint = in_tint; } ''', fragment_shader=''' #version 330 uniform sampler2D Texture; in vec2 v_vert; in vec2 v_texture; in vec4 v_tint; out vec4 f_color; void main() { vec4 tex = texture(Texture, v_texture); vec3 color = tex.rgb * (1.0 - v_tint.a) + v_tint.rgb * v_tint.a; f_color = vec4(color, tex.a); } ''', ) self.tex1 = self.load_texture_2d('crate.png') self.tex1.use(0) self.tex2 = self.load_texture_2d('ball.png') self.tex2.use(1) vertices = np.array([ -1.0, -1.0, 0.0, 0.0, -1.0, 1.0, 0.0, 1.0, 1.0, -1.0, 1.0, 0.0, 1.0, 1.0, 1.0, 1.0, ]) vbo1 = self.ctx.buffer(vertices.astype('f4')) self.vbo2 = self.ctx.buffer(reserve=1024 * 1024) vao_content = [ (vbo1, '2f 2f', 'in_vert', 'in_texture'), (self.vbo2, '3f 2f 4f/i', 'in_pos', 'in_size', 'in_tint'), ] self.vao = self.ctx.vertex_array(self.prog, vao_content) self.space = pymunk.Space() self.space.gravity = (0.0, -900.0) shape = pymunk.Segment(self.space.static_body, (5, 100), (595, 100), 1.0) shape.friction = 1.0 self.space.add(shape) self.bodies = [] self.balls = [] for x in range(5): for y in range(10): size = 20 mass = 10.0 moment = pymunk.moment_for_box(mass, (size, size)) body = pymunk.Body(mass, moment) body.position = Vec2d(300 + x * 50, 105 + y * (size + 0.1)) shape = pymunk.Poly.create_box(body, (size, size)) shape.friction = 0.3 self.space.add(body, shape) self.bodies.append(body) def shoot(self): mass = 100 r = 15 moment = pymunk.moment_for_circle(mass, 0, r, (0, 0)) body = pymunk.Body(mass, moment) body.position = (0, 165) shape = pymunk.Circle(body, r, (0, 0)) shape.friction = 0.3 self.space.add(body, shape) f = 50000 body.apply_impulse_at_local_point((f, 0), (0, 0)) self.balls.append(body) def mouse_press_event(self, x: int, y: int, button: int): self.shoot() def key_event(self, key, action, modifiers): if action == self.wnd.keys.ACTION_PRESS: self.shoot() def render(self, time, frame_time): width, height = self.wnd.size self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.BLEND) for i in range(10): self.space.step(1 / 60 / 10) self.prog['Camera'].value = (200, 300, width / 2, height / 2) bodies = np.array([(b.position.x, b.position.y, b.angle, 10, 10, 1, 1, 1, 0) for b in self.bodies], dtype='f4') self.vbo2.write(bodies) self.prog['Texture'].value = 0 self.vao.render(moderngl.TRIANGLE_STRIP, instances=len(self.bodies)) self.vbo2.orphan() balls = np.array([(b.position.x, b.position.y, b.angle, 15, 15, 1, 1, 1, 0) for b in self.balls], dtype='f4') self.vbo2.write(balls) self.prog['Texture'].value = 1 self.vao.render(moderngl.TRIANGLE_STRIP, instances=len(self.balls)) if __name__ == '__main__': PymunkExample.run() moderngl-moderngl-773b733/examples/old/wireframe_terrain.py000066400000000000000000000045001470420062000240540ustar00rootroot00000000000000import os import numpy as np from pyrr import Matrix44 import moderngl from _example import Example def terrain(size): vertices = np.dstack(np.mgrid[0:size, 0:size][::-1]) / size temp = np.dstack([np.arange(0, size * size - size), np.arange(size, size * size)]) index = np.pad(temp.reshape(size - 1, 2 * size), [[0, 0], [0, 1]], 'constant', constant_values=-1) return vertices, index class WireframeTerrain(Example): title = "Wireframe Terrain" gl_version = (3, 3) def __init__(self, **kwargs): super().__init__(**kwargs) self.prog = self.ctx.program( vertex_shader=''' #version 330 uniform mat4 Mvp; uniform sampler2D Heightmap; in vec2 in_vert; in vec3 in_color; out vec3 v_color; void main() { v_color = in_color; float height = texture(Heightmap, in_vert.xy).r * 0.5; gl_Position = Mvp * vec4(in_vert.xy - 0.5, height, 1.0); } ''', fragment_shader=''' #version 330 in vec3 v_color; out vec4 f_color; void main() { f_color = vec4(v_color, 1.0); } ''', ) self.mvp = self.prog['Mvp'] vertices, index = terrain(32) self.vbo = self.ctx.buffer(vertices.astype('f4')) self.ibo = self.ctx.buffer(index.astype('i4')) vao_content = [ (self.vbo, '2f', 'in_vert'), ] self.vao = self.ctx.vertex_array(self.prog, vao_content, self.ibo) self.texture = self.load_texture_2d('noise.jpg') def render(self, time, frame_time): angle = time * 0.2 self.ctx.clear(1.0, 1.0, 1.0) self.ctx.enable(moderngl.DEPTH_TEST) self.ctx.wireframe = True proj = Matrix44.perspective_projection(45.0, self.aspect_ratio, 0.1, 1000.0) lookat = Matrix44.look_at( (np.cos(angle), np.sin(angle), 0.8), (0.0, 0.0, 0.1), (0.0, 0.0, 1.0), ) self.texture.use() self.mvp.write((proj * lookat).astype('f4')) self.vao.render(moderngl.TRIANGLE_STRIP) if __name__ == '__main__': WireframeTerrain.run() moderngl-moderngl-773b733/examples/water/000077500000000000000000000000001470420062000203425ustar00rootroot00000000000000moderngl-moderngl-773b733/examples/water/light_gl.py000066400000000000000000000375751470420062000225260ustar00rootroot00000000000000# WebGL Water # https://madebyevan.com/webgl-water/ # Copyright 2011 Evan Wallace # Released under the MIT license import re import moderngl from typing import Self from PIL import Image import numpy as np import glm from typing import Iterator class Matrices: def __init__(self, model: glm.mat4 = None, view: glm.mat4 = None, projection: glm.mat4 = None) -> None: self._model = model or glm.identity(glm.mat4) self.view = view or glm.lookAt( (1.0, 1.0, 1.0), (0.0, 0.0, 0.0), (0.0, 1.0, 0.0)) self.projection = projection or glm.perspective(45.0, 1.0, 0.1, 1000.0) @property def normal(self) -> glm.mat4: return glm.transpose(glm.inverse(self._model)) @property def model_view(self) -> glm.mat4: return self.view * self._model @property def model_view_proj(self) -> glm.mat4: return self.projection * self.model_view @property def eye(self) -> glm.vec3: m = np.array(self.model_view).T axis_x: np.ndarray = m[0] axis_y: np.ndarray = m[1] axis_z: np.ndarray = m[2] offset: np.ndarray = m[3] return glm.vec3( -offset.dot(axis_x), -offset.dot(axis_y), -offset.dot(axis_z)) def get(self, cap_name: str) -> glm.mat4: match cap_name: case "MVM": return self.model_view case "MVMI": return glm.inverse(self.model_view) case "PM": return self.projection case "PMI": return glm.inverse(self.projection) case "MVPM": return self.model_view_proj case "MVPMI": return glm.inverse(self.model_view_proj) case "NM": return self.normal class MeshData: def __init__(self, vertices: np.ndarray, triangles: np.ndarray, coords: np.ndarray = None, normals: np.ndarray = None, color: np.ndarray = None, lines: np.ndarray = None) -> None: self.vertices = vertices self.triangles = triangles self.coords = coords self.normals = normals self.color = color self.lines = lines class Mesh: def __init__(self, data: MeshData, ctx: moderngl.Context = None) -> None: ctx = ctx or moderngl.get_context() self.vbos = { "gl_Vertex": Mesh.layout(ctx, data.vertices, '3f'), "gl_TexCoord": Mesh.layout(ctx, data.coords, '2f'), "gl_Normal": Mesh.layout(ctx, data.normals, '3f'), "gl_Color": Mesh.layout(ctx, data.color, '4f'), } self.lines_ibo = ctx.buffer(data.lines.astype("i4").tobytes()) if data.triangles is not None: self.triangles_ibo = ctx.buffer( data.triangles.astype("i4").tobytes()) self.vaos: dict[int, tuple[moderngl.VertexArray, int]] = {} def layout(ctx: moderngl.Context, array: np.ndarray, t: str) -> bytes: if array is not None: return (ctx.buffer(array.astype("f4").tobytes()), t) return None def _layouts(self, prefix: str, used_attributes: set[str]) -> Iterator[tuple]: for attr_name in self.vbos: if self.vbos[attr_name] is None: continue prefixed_name = prefix + attr_name if prefixed_name in used_attributes: yield (*self.vbos[attr_name], prefixed_name) def build_vao(self, ctx: moderngl.Context, program: moderngl.Program, layouts: list, mode=moderngl.TRIANGLES): if mode == moderngl.TRIANGLES: vao = ctx.vertex_array( program, layouts, self.triangles_ibo, mode=moderngl.TRIANGLES) else: vao = ctx.vertex_array( program, layouts, self.lines_ibo, mode=moderngl.LINES) self.vaos[program.glo] = (vao, mode) return vao def vertex_array(self, ctx: moderngl.Context, program: moderngl.Program, prefix: str, used_attributes: dict[str, moderngl.Attribute], mode=moderngl.TRIANGLES) -> moderngl.VertexArray: vao, vao_mode = self.vaos.get(program.glo, (None, None)) if vao is not None: if vao_mode == mode: return vao else: vao.release() layouts = list(self._layouts(prefix, used_attributes)) vao = self.build_vao(ctx, program, layouts, mode) return vao class MeshBuilder(MeshData): def __init__(self, vertices: np.ndarray, triangles: np.ndarray, coords: np.ndarray = None, normals: np.ndarray = None, lines: np.ndarray = None) -> None: super().__init__(vertices, triangles, coords, normals, None, lines) if self.normals is None: self.compute_normals() if self.lines is None: self.compute_wireframe() def compute_normals(self): self.normals = np.zeros(np.shape(self.vertices)) pass def compute_wireframe(self): lines = {} for i in range(len(self.triangles)): t = self.triangles[i] for j in range(3): a = t[j] b = t[(j+1) % 3] l = (min(a, b), max(a, b)) k = (l[0] << 16) + l[1] lines[k] = l lines = list(lines.values()) self.lines = np.array(lines, dtype=np.int32) def build(self, ctx: moderngl.Context = None) -> Mesh: return Mesh(self, ctx) def seg_lines(*points: glm.vec3): vertices = list(points) num_vertices = len(vertices) num_vertices = num_vertices - (num_vertices % 2) vertices = np.array(vertices[0:num_vertices]) lines = np.arange(num_vertices, dtype=np.int32) return MeshBuilder(vertices, None, normals=np.zeros(vertices.shape), lines=lines) def panel(detail: int = 1, detail_x: int = None, detail_y: int = None) -> Self: detail_x = detail_x or detail detail_y = detail_y or detail vertices = [] coords = [] normals = [] triangles = [] for y in range(detail_y + 1): t = y / detail_y for x in range(detail_x + 1): s = x / detail_x vertices.append((2.0 * s - 1.0, 2.0 * t - 1.0, 0.0)) coords.append((s, t)) normals.append((0.0, 0.0, 1.0)) if x < detail_x and y < detail_y: i = x + y * (detail_y + 1) triangles.append((i, i + 1, i + detail_x + 1)) triangles.append( (i + detail_x + 1, i + 1, i + detail_x + 2)) return MeshBuilder(np.array(vertices), np.array(triangles, dtype=np.int32), np.array(coords), np.array(normals)) cube_data = [ [0, 4, 2, 6, -1, 0, 0], [1, 3, 5, 7, +1, 0, 0], [0, 1, 4, 5, 0, -1, 0], [2, 6, 3, 7, 0, +1, 0], [0, 2, 1, 3, 0, 0, -1], [4, 5, 6, 7, 0, 0, +1] ] def _pick_octant(i) -> tuple[int, int, int]: return ((i & 1) * 2 - 1, (i & 2) - 1, (i & 4) / 2 - 1) def cube() -> Self: vertices = [] coords = [] normals = [] triangles = [] for i in range(len(MeshBuilder.cube_data)): data = MeshBuilder.cube_data[i] v = i * 4 for j in range(4): d = data[j] vertices.append(MeshBuilder._pick_octant(d)) coords.append((j & 1, (j & 2) / 2)) normals.append((data[4:7])) triangles.append((v, v+1, v+2)) triangles.append((v+2, v+1, v+3)) return MeshBuilder(np.array(vertices), np.array(triangles, dtype=np.int32), np.array(coords), np.array(normals)) def _tri(flip: bool, a, b, c): return (a, c, b) if flip else (a, b, c) def _fix(x: np.ndarray) -> np.ndarray: return x + (x - x * x) / 2.0 def _tri_idx(d: int, i: int, j: int) -> int: return i * d + (i - i * i) // 2 + j def sphere(detail: int = 6): detail_2 = detail * 2 detail_22 = detail_2 * detail_2 raw_vertices = [] raw_abc = [] vertices = [] coords = [] unique_map = {} for i in range(detail + 1): for j in range(detail - i + 1): raw_abc.append((i, j, detail - i - j)) raw_vertices = MeshBuilder._fix((np.array(raw_abc) / detail)) raw_normal = np.linalg.norm(raw_vertices, axis=1) raw_vertices = raw_vertices / raw_normal[:, np.newaxis] triangles = [] for octant in range(8): scale = MeshBuilder._pick_octant(octant) flip = scale[0] * scale[1] * scale[2] data = [] for abc, rv in zip(raw_abc, raw_vertices): a, b, c = abc k = a * scale[0] * detail_22 + b * \ scale[1] * detail_2 + c * scale[2] if k not in unique_map: unique_map[k] = len(vertices) vertex = rv * np.array(scale) coord = (1 - a, c) if scale[1] > 0 else (c, 1 - a) vertices.append(vertex) coords.append(coord) data.append(unique_map[k]) for i in range(1, detail + 1): for j in range(detail - i + 1): a = MeshBuilder._tri_idx(detail + 1, i-1, j) b = MeshBuilder._tri_idx(detail + 1, i, j) triangles.append(MeshBuilder._tri( flip, data[a], data[a + 1], data[b])) if (i + j < detail): triangles.append(MeshBuilder._tri( flip, data[b], data[a + 1], data[b+1])) return MeshBuilder(np.array(vertices), np.array(triangles, dtype=np.int32), np.array(coords)) class Shader: header = """ uniform mat3 gl_NormalMatrix; uniform mat4 gl_ModelViewMatrix; uniform mat4 gl_ProjectionMatrix; uniform mat4 gl_ModelViewProjectionMatrix; uniform mat4 gl_ModelViewMatrixInverse; uniform mat4 gl_ProjectionMatrixInverse; uniform mat4 gl_ModelViewProjectionMatrixInverse; """ _vert_header = """ attribute vec4 gl_Vertex; attribute vec2 gl_TexCoord; attribute vec3 gl_Normal; attribute vec4 gl_Color; vec4 ftransform() { return gl_ModelViewProjectionMatrix * gl_Vertex; } """ vert_header = "#version 130\n" + header + _vert_header frag_header = """ #version 130 precision highp float; """ + header matrices_name = list( map(lambda m: m.groups()[0], re.finditer(r"\b(gl_[^;]*)\b;", header))) attributes_name = list( map(lambda m: m.groups()[0], re.finditer(r"\b(gl_[^;]*)\b;", _vert_header))) def dump_source(emsg: str, vert_shader: str, frag_shader: str): if emsg.find("vertex_shader") != -1: lines = vert_shader.splitlines() for num, line in enumerate(lines): print(f"{num+1:4d}", line) if emsg.find("fragment_shader") != -1: lines = frag_shader.splitlines() for num, line in enumerate(lines): print(f"{num+1:4d}", line) def fix(header: str, source: str, prefix: str) -> str: replace = {} source = header + re.sub(r"#extension.*\n", '', source) all_gl_vars = list( map(lambda m: m.groups()[0], re.finditer(r"\b(gl_\w+)\b;", header))) for gl_var_name in all_gl_vars: if gl_var_name not in replace: source = re.sub('\\b' + gl_var_name + '\\b', prefix + gl_var_name, source) return source def __init__(self, vert_shader: str, frag_shader: str, ctx: moderngl.Context = None, prefix="LIGHTGL") -> None: self.ctx = ctx or moderngl.get_context() source: str = vert_shader + frag_shader self.use_matrices: dict[str, str] = {} for name in Shader.matrices_name: if source.find(name) != -1: # gl_NormalMatrix -> NM capitalLetters = re.sub(r"[a-z_]", '', name) self.use_matrices[capitalLetters] = prefix + name if source.find('ftransform') != -1: self.use_matrices['MVPM'] = prefix + "gl_ModelViewProjectionMatrix" self.prefix = prefix vertex_shader = Shader.fix(Shader.vert_header, vert_shader, prefix) fragment_shader = Shader.fix(Shader.frag_header, frag_shader, prefix) try: self.program = self.ctx.program(vertex_shader, fragment_shader) except moderngl.Error as e: Shader.dump_source(e.args[0], vertex_shader, fragment_shader) print(e) exit(-1) self.use_attributes = {name: self.program[name] for name in self.program if isinstance(self.program[name], moderngl.Attribute)} def draw_mesh(self, mesh: Mesh, matrices: Matrices = None, unifroms: dict = {}, mode=moderngl.TRIANGLES): if matrices is not None: for m_cap_name in self.use_matrices: self.program[self.use_matrices[m_cap_name]].write( matrices.get(m_cap_name)) for k in unifroms: self.program[k] = unifroms[k] vao = mesh.vertex_array(self.ctx, self.program, self.prefix, self.use_attributes, mode) vao.render(mode) class Texture: def __init__(self, texture: moderngl.Texture = None, sampler: moderngl.Sampler = None) -> None: self.texture: moderngl.Texture = texture self.sampler: moderngl.Sampler = sampler self.framebuffer: moderngl.Framebuffer = None def use(self, location=0): if self.sampler: self.sampler.use(location) else: self.texture.use(location) def draw_to(self, ctx: moderngl.Context = None): if self.framebuffer is None: ctx = ctx or moderngl.get_context() self.framebuffer = ctx.framebuffer( self.texture, ctx.depth_renderbuffer(self.texture.size)) self.framebuffer.use() def swap_with(self, other: Self): tmp_texture = self.texture tmp_sampler = self.sampler tmp_framebuffer = self.framebuffer self.texture = other.texture self.sampler = other.sampler self.framebuffer = other.framebuffer other.texture = tmp_texture other.sampler = tmp_sampler other.framebuffer = tmp_framebuffer class RawTexture(Texture): def __init__(self, size: tuple[int, int], data: bytes = None, pixel_fmt='RGBA', ctx: moderngl.Context = None, repeat=(False, False, False), filter=(moderngl.LINEAR, moderngl.LINEAR), mipmaps=False, dtype="f1") -> None: ctx = ctx or moderngl.get_context() texture = ctx.texture(size, len(pixel_fmt), data, dtype=dtype) sampler = ctx.sampler( repeat_x=repeat[0], repeat_y=repeat[1], repeat_z=repeat[2], filter=filter, texture=texture) if mipmaps: texture.build_mipmaps() super().__init__(texture, sampler) class ImageTexture(RawTexture): def __init__(self, image_path: str, pixel_fmt='RGBA', ctx: moderngl.Context = None, repeat=(False, False, False), filter=(moderngl.LINEAR, moderngl.LINEAR), mipmaps=False) -> None: img = Image.open(image_path).transpose( Image.FLIP_TOP_BOTTOM).convert(pixel_fmt) super().__init__(img.size, img.tobytes(), pixel_fmt, ctx, repeat, filter, mipmaps) def Cubemap(pos_x: str, neg_x: str, pos_y: str, neg_y: str, pos_z: str, neg_z: str, ctx: moderngl.Context = None) -> moderngl.TextureCube: ctx = ctx or moderngl.get_context() images_path = (pos_x, neg_x, pos_y, neg_y, pos_z, neg_z) images: list[Image.Image] = list(map(lambda p: Image.open(p).transpose( Image.FLIP_TOP_BOTTOM).convert("RGB"), images_path)) image_size = images[0].size image_len = image_size[0] * image_size[1] * 3 data = bytearray(image_len * 6) for i in range(6): data[i * image_len:] = images[i].tobytes() return ctx.texture_cube(image_size, 3, data) moderngl-moderngl-773b733/examples/water/light_raytracer.py000066400000000000000000000062411470420062000241020ustar00rootroot00000000000000# WebGL Water # https://madebyevan.com/webgl-water/ # Copyright 2011 Evan Wallace # Released under the MIT license from typing import Self import glm import math from light_gl import Matrices class HitTest: def __init__(self, t: float, hit: glm.vec3, normal: glm.vec3) -> None: self.t = t self.hit = hit self.normal = normal def merge_with(self, other: Self): if other.t > 0 and other.t < self.t: self.t = other.t self.hit = other.hit self.normal = other.normal def __repr__(self) -> str: return f"t: {self.t} hit: {self.hit} norm: {self.normal}" class RayTracer: def __init__(self, viewport: tuple[float], matrices: Matrices) -> None: model_view_matrix = matrices.model_view self.eye = matrices.eye self.viewport = viewport min_x = viewport[0] max_x = min_x + viewport[2] min_y = viewport[1] max_y = min_y + viewport[3] self.ray00 = glm.unProject( (min_x, min_y, 1), model_view_matrix, matrices.projection, viewport) - self.eye self.ray10 = glm.unProject( (max_x, min_y, 1), model_view_matrix, matrices.projection, viewport) - self.eye self.ray01 = glm.unProject( (min_x, max_y, 1), model_view_matrix, matrices.projection, viewport) - self.eye self.ray11 = glm.unProject( (max_x, max_y, 1), model_view_matrix, matrices.projection, viewport) - self.eye def get_ray_for_pixel(self, x, y) -> glm.vec3: x = (x - self.viewport[0]) / self.viewport[2] y = 1.0 - (y - self.viewport[1]) / self.viewport[3] ray0 = glm.lerp(self.ray00, self.ray10, x) ray1 = glm.lerp(self.ray01, self.ray11, x) return glm.normalize(glm.lerp(ray0, ray1, y)) def hit_test_sphere(origin: glm.vec3, ray: glm.vec3, center: glm.vec3, radius: float) -> HitTest: offset = origin - center a = glm.dot(ray, ray) b = 2 * glm.dot(ray, offset) c = glm.dot(offset, offset) - radius * radius discriminant = b * b - 4 * a * c if discriminant > 0: t = (-b - math.sqrt(discriminant)) / (2*a) hit = origin + ray * t return HitTest(t, hit, (hit - center) / radius) return None def hit_test_triangle(origin: glm.vec3, ray: glm.vec3, vert: tuple[glm.vec3]): ab = vert[1] - vert[0] ac = vert[2] - vert[0] normal = glm.normalize(glm.cross(ab, ac)) t = glm.dot(normal, vert[0] - origin) / glm.dot(normal, ray) if t > 0: hit = origin + (ray * t) to_hit = hit - vert[0] # uv = glm.inverse((glm.mat3(ac, ab, normal))) * to_hit dot00 = glm.dot(ac, ac) dot01 = glm.dot(ab, ac) dot11 = glm.dot(ab, ab) dot02 = glm.dot(ac, to_hit) dot12 = glm.dot(ab, to_hit) divide = dot00 * dot11 - dot01 * dot01 u = (dot11 * dot02 - dot01 * dot12) / divide v = (dot00 * dot12 - dot01 * dot02) / divide print("uv", u, v) if u >= 0 and v >= 0 and (u + v) <= 1: return HitTest(t, hit, normal) return None moderngl-moderngl-773b733/examples/water/renderer.py000066400000000000000000000363231470420062000225310ustar00rootroot00000000000000# WebGL Water # https://madebyevan.com/webgl-water/ # Copyright 2011 Evan Wallace # Released under the MIT license import os import glm from light_gl import * from water import Water import moderngl def local(*path): return os.path.join(os.path.dirname(__file__), *path) def local_textures(path): return local("../data/textures", path) class Renderer(): _helper_functions = """ const float IOR_AIR = 1.0; const float IOR_WATER = 1.333; const vec3 abovewaterColor = vec3(0.25, 1.0, 1.25); const vec3 underwaterColor = vec3(0.4, 0.9, 1.0); const float poolHeight = 1.0; uniform vec3 light; uniform vec3 sphereCenter; uniform float sphereRadius; uniform sampler2D tiles; uniform sampler2D causticTex; uniform sampler2D water; vec2 intersectCube(vec3 origin, vec3 ray, vec3 cubeMin, vec3 cubeMax) { vec3 tMin = (cubeMin - origin) / ray; vec3 tMax = (cubeMax - origin) / ray; vec3 t1 = min(tMin, tMax); vec3 t2 = max(tMin, tMax); float tNear = max(max(t1.x, t1.y), t1.z); float tFar = min(min(t2.x, t2.y), t2.z); return vec2(tNear, tFar); } float intersectSphere(vec3 origin, vec3 ray, vec3 sphereCenter, float sphereRadius) { vec3 toSphere = origin - sphereCenter; float a = dot(ray, ray); float b = 2.0 * dot(toSphere, ray); float c = dot(toSphere, toSphere) - sphereRadius * sphereRadius; float discriminant = b*b - 4.0*a*c; if (discriminant > 0.0) { float t = (-b - sqrt(discriminant)) / (2.0 * a); if (t > 0.0) return t; } return 1.0e6; } vec3 getSphereColor(vec3 point) { vec3 color = vec3(0.5); /* ambient occlusion with walls */ color *= 1.0 - 0.9 / pow((1.0 + sphereRadius - abs(point.x)) / sphereRadius, 3.0); color *= 1.0 - 0.9 / pow((1.0 + sphereRadius - abs(point.z)) / sphereRadius, 3.0); color *= 1.0 - 0.9 / pow((point.y + 1.0 + sphereRadius) / sphereRadius, 3.0); /* caustics */ vec3 sphereNormal = (point - sphereCenter) / sphereRadius; vec3 refractedLight = refract(-light, vec3(0.0, 1.0, 0.0), IOR_AIR / IOR_WATER); float diffuse = max(0.0, dot(-refractedLight, sphereNormal)) * 0.5; vec4 info = texture2D(water, point.xz * 0.5 + 0.5); if (point.y < info.r) { vec4 caustic = texture2D(causticTex, 0.75 * (point.xz - point.y * refractedLight.xz / refractedLight.y) * 0.5 + 0.5); diffuse *= caustic.r * 4.0; } color += diffuse; return color; } vec3 getWallColor(vec3 point) { float scale = 0.5; vec3 wallColor; vec3 normal; if (abs(point.x) > 0.999) { wallColor = texture2D(tiles, point.yz * 0.5 + vec2(1.0, 0.5)).rgb; normal = vec3(-point.x, 0.0, 0.0); } else if (abs(point.z) > 0.999) { wallColor = texture2D(tiles, point.yx * 0.5 + vec2(1.0, 0.5)).rgb; normal = vec3(0.0, 0.0, -point.z); } else { wallColor = texture2D(tiles, point.xz * 0.5 + 0.5).rgb; normal = vec3(0.0, 1.0, 0.0); } scale /= length(point); /* pool ambient occlusion */ scale *= 1.0 - 0.9 / pow(length(point - sphereCenter) / sphereRadius, 4.0); /* sphere ambient occlusion */ /* caustics */ vec3 refractedLight = -refract(-light, vec3(0.0, 1.0, 0.0), IOR_AIR / IOR_WATER); float diffuse = max(0.0, dot(refractedLight, normal)); vec4 info = texture2D(water, point.xz * 0.5 + 0.5); if (point.y < info.r) { vec4 caustic = texture2D(causticTex, 0.75 * (point.xz - point.y * refractedLight.xz / refractedLight.y) * 0.5 + 0.5); scale += diffuse * caustic.r * 2.0 * caustic.g; } else { /* shadow for the rim of the pool */ vec2 t = intersectCube(point, refractedLight, vec3(-1.0, -poolHeight, -1.0), vec3(1.0, 2.0, 1.0)); diffuse *= 1.0 / (1.0 + exp(-200.0 / (1.0 + 10.0 * (t.y - t.x)) * (point.y + refractedLight.y * t.y - 2.0 / 12.0))); scale += diffuse * 0.5; } return wallColor * scale; } """ def _splice(array: list, start: int, num: int): new_array = [] exclude_range = range(start, start + num) for idx, elem in enumerate(array): if idx not in exclude_range: new_array.append(elem) return new_array def _water_shader(ctx: moderngl.Context, under_water: bool): vert_shader = """ uniform sampler2D water; varying vec3 position; void main() { vec4 info = texture2D(water, gl_Vertex.xy * 0.5 + 0.5); position = gl_Vertex.xzy; position.y += info.r; gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 1.0); } """ if under_water: water_frag_shader = """ /* underwater */ normal = -normal; vec3 reflectedRay = reflect(incomingRay, normal); vec3 refractedRay = refract(incomingRay, normal, IOR_WATER / IOR_AIR); float fresnel = mix(0.5, 1.0, pow(1.0 - dot(normal, -incomingRay), 3.0)); vec3 reflectedColor = getSurfaceRayColor(position, reflectedRay, underwaterColor); vec3 refractedColor = getSurfaceRayColor(position, refractedRay, vec3(1.0)) * vec3(0.8, 1.0, 1.1); gl_FragColor = vec4(mix(reflectedColor, refractedColor, (1.0 - fresnel) * length(refractedRay)), 1.0); """ else: water_frag_shader = """ /* above water */ vec3 reflectedRay = reflect(incomingRay, normal); vec3 refractedRay = refract(incomingRay, normal, IOR_AIR / IOR_WATER); float fresnel = mix(0.25, 1.0, pow(1.0 - dot(normal, -incomingRay), 3.0)); vec3 reflectedColor = getSurfaceRayColor(position, reflectedRay, abovewaterColor); vec3 refractedColor = getSurfaceRayColor(position, refractedRay, abovewaterColor); gl_FragColor = vec4(mix(refractedColor, reflectedColor, fresnel), 1.0); """ frag_shader = """ uniform vec3 eye; varying vec3 position; uniform samplerCube sky; vec3 getSurfaceRayColor(vec3 origin, vec3 ray, vec3 waterColor) { vec3 color; float q = intersectSphere(origin, ray, sphereCenter, sphereRadius); if (q < 1.0e6) { color = getSphereColor(origin + ray * q); } else if (ray.y < 0.0) { vec2 t = intersectCube(origin, ray, vec3(-1.0, -poolHeight, -1.0), vec3(1.0, 2.0, 1.0)); color = getWallColor(origin + ray * t.y); } else { vec2 t = intersectCube(origin, ray, vec3(-1.0, -poolHeight, -1.0), vec3(1.0, 2.0, 1.0)); vec3 hit = origin + ray * t.y; if (hit.y < 2.0 / 12.0) { color = getWallColor(hit); } else { color = textureCube(sky, ray).rgb; color += vec3(pow(max(0.0, dot(light, ray)), 5000.0)) * vec3(10.0, 8.0, 6.0); } } if (ray.y < 0.0) color *= waterColor; return color; } void main() { vec2 coord = position.xz * 0.5 + 0.5; vec4 info = texture2D(water, coord); /* make water look more "peaked" */ for (int i = 0; i < 5; i++) { coord += info.ba * 0.005; info = texture2D(water, coord); } vec3 normal = vec3(info.b, sqrt(1.0 - dot(info.ba, info.ba)), info.a); vec3 incomingRay = normalize(position - eye); """ + water_frag_shader + """}""" return Shader(vert_shader, Renderer._helper_functions + frag_shader, ctx) def __init__(self, ctx: moderngl.Context) -> None: self.ctx = ctx self.tile_texture = ImageTexture( local_textures("tiles.jpg"), "RGB", ctx, (True, True, True), mipmaps=True) self.light_dir = glm.normalize(glm.vec3(2.0, 2.0, -1.0)) # water self.water_mesh = MeshBuilder.panel(detail=200).build(ctx) self.water_shaders: list[Shader] = [] for under_water in (False, True): self.water_shaders.append(Renderer._water_shader(ctx, under_water)) # sphere self.sphere_mesh = MeshBuilder.sphere(detail=10).build(ctx) self.sphere_shader = Shader(Renderer._helper_functions + """ varying vec3 position; void main() { position = sphereCenter + gl_Vertex.xyz * sphereRadius; gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 1.0); } """, Renderer._helper_functions + """ varying vec3 position; void main() { gl_FragColor = vec4(getSphereColor(position), 1.0); vec4 info = texture2D(water, position.xz * 0.5 + 0.5); if (position.y < info.r) { gl_FragColor.rgb *= underwaterColor * 1.2; } }""", ctx) self.sphere_center = glm.vec3(0.0) self.sphere_radius = 0 # cude cude_mesh_builder = MeshBuilder.cube() # remove cude top cude_mesh_builder.triangles = np.array(Renderer._splice( cude_mesh_builder.triangles, 4, 2), dtype=np.int32) self.cube_mesh = cude_mesh_builder.build(ctx) self.cude_shader = Shader(Renderer._helper_functions + """ varying vec3 position; void main() { position = gl_Vertex.xyz; position.y = ((1.0 - position.y) * (7.0 / 12.0) - 1.0) * poolHeight; gl_Position = gl_ModelViewProjectionMatrix * vec4(position, 1.0); }""", Renderer._helper_functions + """ varying vec3 position; void main() { gl_FragColor = vec4(getWallColor(position), 1.0); vec4 info = texture2D(water, position.xz * 0.5 + 0.5); if (position.y < info.r) { gl_FragColor.rgb *= underwaterColor * 1.2; } }""", ctx) self.caustic_texture = RawTexture((1024, 1024), ctx=ctx) self.caustics_shader = Shader(Renderer._helper_functions + """ varying vec3 oldPos; varying vec3 newPos; varying vec3 ray; /* project the ray onto the plane */ vec3 project(vec3 origin, vec3 ray, vec3 refractedLight) { vec2 tcube = intersectCube(origin, ray, vec3(-1.0, -poolHeight, -1.0), vec3(1.0, 2.0, 1.0)); origin += ray * tcube.y; float tplane = (-origin.y - 1.0) / refractedLight.y; return origin + refractedLight * tplane; } void main() { vec4 info = texture2D(water, gl_Vertex.xy * 0.5 + 0.5); info.ba *= 0.5; vec3 normal = vec3(info.b, sqrt(1.0 - dot(info.ba, info.ba)), info.a); /* project the vertices along the refracted vertex ray */ vec3 refractedLight = refract(-light, vec3(0.0, 1.0, 0.0), IOR_AIR / IOR_WATER); ray = refract(-light, normal, IOR_AIR / IOR_WATER); oldPos = project(gl_Vertex.xzy, refractedLight, refractedLight); newPos = project(gl_Vertex.xzy + vec3(0.0, info.r, 0.0), ray, refractedLight); gl_Position = vec4(0.75 * (newPos.xz + refractedLight.xz / refractedLight.y), 0.0, 1.0); }""", Renderer._helper_functions + """ varying vec3 oldPos; varying vec3 newPos; varying vec3 ray; void main() { /* if the triangle gets smaller, it gets brighter, and vice versa */ float oldArea = length(dFdx(oldPos)) * length(dFdy(oldPos)); float newArea = length(dFdx(newPos)) * length(dFdy(newPos)); gl_FragColor = vec4(oldArea / newArea * 0.2, 1.0, 0.0, 0.0); vec3 refractedLight = refract(-light, vec3(0.0, 1.0, 0.0), IOR_AIR / IOR_WATER); /* compute a blob shadow and make sure we only draw a shadow if the player is blocking the light */ vec3 dir = (sphereCenter - newPos) / sphereRadius; vec3 area = cross(dir, refractedLight); float shadow = dot(area, area); float dist = dot(dir, -refractedLight); shadow = 1.0 + (shadow - 1.0) / (0.05 + dist * 0.025); shadow = clamp(1.0 / (1.0 + exp(-shadow)), 0.0, 1.0); shadow = mix(1.0, shadow, clamp(dist * 2.0, 0.0, 1.0)); gl_FragColor.g = shadow; /* shadow for the rim of the pool */ vec2 t = intersectCube(newPos, -refractedLight, vec3(-1.0, -poolHeight, -1.0), vec3(1.0, 2.0, 1.0)); gl_FragColor.r *= 1.0 / (1.0 + exp(-200.0 / (1.0 + 10.0 * (t.y - t.x)) * (newPos.y - refractedLight.y * t.y - 2.0 / 12.0))); }""", ctx) self.sky = Cubemap(local_textures("xpos.jpg"), local_textures("xneg.jpg"), local_textures("ypos.jpg"), local_textures("ypos.jpg"), local_textures("zpos.jpg"), local_textures("zneg.jpg"), ctx) def update_caustics(self, matrices: Matrices, water: Water): self.caustic_texture.draw_to(self.ctx) self.ctx.clear() water.texture_a.use(0) self.caustics_shader.draw_mesh(self.water_mesh, matrices, unifroms={ "light": self.light_dir, "water": 0, "sphereCenter": self.sphere_center, "sphereRadius": self.sphere_radius, }) def render_water(self, matrices: Matrices, water: Water): water.texture_a.use(0) self.tile_texture.use(1) self.sky.use(2) self.caustic_texture.use(3) self.ctx.enable(moderngl.CULL_FACE) cull_face = ("front", "back") for idx in range(2): self.ctx.cull_face = cull_face[idx] self.water_shaders[idx].draw_mesh(self.water_mesh, matrices, unifroms={ "light": self.light_dir, "water": 0, "tiles": 1, "sky": 2, "causticTex": 3, "eye": matrices.eye, "sphereCenter": self.sphere_center, "sphereRadius": self.sphere_radius, }) self.ctx.disable(moderngl.CULL_FACE) def render_sphere(self, matrices: Matrices, water: Water): water.texture_a.use(0) self.caustic_texture.use(1) self.sphere_shader.draw_mesh(self.sphere_mesh, matrices, unifroms={ "light": self.light_dir, "water": 0, "causticTex": 1, "sphereCenter": self.sphere_center, "sphereRadius": self.sphere_radius }) def render_cude(self, matrices: Matrices, water: Water): self.ctx.enable(moderngl.CULL_FACE) water.texture_a.use(0) self.tile_texture.use(1) self.caustic_texture.use(2) self.cude_shader.draw_mesh(self.cube_mesh, matrices, unifroms={ "light": self.light_dir, "water": 0, "tiles": 1, "causticTex": 2, "sphereCenter": self.sphere_center, "sphereRadius": self.sphere_radius }) self.ctx.disable(moderngl.CULL_FACE) moderngl-moderngl-773b733/examples/water/water.py000066400000000000000000000130021470420062000220320ustar00rootroot00000000000000# WebGL Water # https://madebyevan.com/webgl-water/ # Copyright 2011 Evan Wallace # Released under the MIT license import moderngl from light_gl import * class Water: _vert_shader = """ varying vec2 coord; void main() { coord = gl_Vertex.xy * 0.5 + 0.5; gl_Position = vec4(gl_Vertex.xyz, 1.0); } """ _drop_frag_shader = """ const float PI = 3.141592653589793; uniform sampler2D texture; uniform vec2 center; uniform float radius; uniform float strength; varying vec2 coord; void main() { /* get vertex info */ vec4 info = texture2D(texture, coord); /* add the drop to the height */ float drop = max(0.0, 1.0 - length(center * 0.5 + 0.5 - coord) / radius); drop = 0.5 - cos(drop * PI) * 0.5; info.r += drop * strength; gl_FragColor = info; } """ _update_frag_shader = """ uniform sampler2D texture; uniform vec2 delta; varying vec2 coord; vec4 water_sample(vec2 coord, vec4 info) { // vec2 center = vec2(0.5, 0.4); // float radius = 0.10; // if (length(coord.xy - center) < radius) { // return info; // } return texture2D(texture, coord); } void main() { /* get vertex info */ vec4 info = water_sample(coord, vec4(0.5)); /* calculate average neighbor height */ vec2 dx = vec2(delta.x, 0.0); vec2 dy = vec2(0.0, delta.y); float average = ( water_sample(coord - dx, info).r + water_sample(coord - dy, info).r + water_sample(coord + dx, info).r + water_sample(coord + dy, info).r ) * 0.25; /* change the velocity to move toward the average */ info.g += (average - info.r) * 2.0; /* attenuate the velocity a little so waves do not last forever */ info.g *= 0.995; /* move the vertex along the velocity */ info.r += info.g; gl_FragColor = vec4(info.rg, 0.0, 0.0); } """ _normal_frag_shader = """ uniform sampler2D texture; uniform vec2 delta; varying vec2 coord; void main() { /* get vertex info */ vec4 info = texture2D(texture, coord); /* update the normal */ vec3 dx = vec3(delta.x, texture2D(texture, vec2(coord.x + delta.x, coord.y)).r - info.r, 0.0); vec3 dy = vec3(0.0, texture2D(texture, vec2(coord.x, coord.y + delta.y)).r - info.r, delta.y); info.ba = normalize(cross(dy, dx)).xz; gl_FragColor = info; } """ _sphere_frag_shader = """ uniform sampler2D texture; uniform vec3 oldCenter; uniform vec3 newCenter; uniform float radius; varying vec2 coord; float volumeInSphere(vec3 center) { vec3 toCenter = vec3(coord.x * 2.0 - 1.0, 0.0, coord.y * 2.0 - 1.0) - center; float t = length(toCenter) / radius; float dy = exp(-pow(t * 1.5, 6.0)); float ymin = min(0.0, center.y - dy); float ymax = min(max(0.0, center.y + dy), ymin + 2.0 * dy); return (ymax - ymin) * 0.1; } void main() { /* get vertex info */ vec4 info = texture2D(texture, coord); /* add the old volume */ info.r += volumeInSphere(oldCenter); /* subtract the new volume */ info.r -= volumeInSphere(newCenter); gl_FragColor = info; } """ def __init__(self, texture_size=(256, 256), ctx: moderngl.Context = None) -> None: self.ctx = ctx or None self.panel = MeshBuilder.panel().build(self.ctx) self.texture_a = RawTexture( texture_size, pixel_fmt="RGBA", ctx=self.ctx, dtype="f4") self.texture_b = RawTexture( texture_size, pixel_fmt="RGBA", ctx=self.ctx, dtype="f4") self.delta = glm.vec2( 1.0 / texture_size[0], 1.0 / texture_size[1]) self.drop_shader = Shader( Water._vert_shader, Water._drop_frag_shader, self.ctx) self.update_shader = Shader( Water._vert_shader, Water._update_frag_shader, self.ctx) self.normal_shader = Shader( Water._vert_shader, Water._normal_frag_shader, self.ctx) self.sphere_shader = Shader( Water._vert_shader, Water._sphere_frag_shader, self.ctx) def swap(self): temp_texture = self.texture_b self.texture_b = self.texture_a self.texture_a = temp_texture def add_drop(self, x: float, y: float, radius: float, strength: float): self.texture_b.draw_to(self.ctx) self.texture_a.use() self.drop_shader.draw_mesh(self.panel, unifroms={ "center": glm.vec2(x, y), "radius": radius, "strength": strength }) self.swap() def move_sphere(self, old_center, new_center, radius): self.texture_b.draw_to(self.ctx) self.texture_a.use() self.sphere_shader.draw_mesh(self.panel, unifroms={ "oldCenter": old_center, "newCenter": new_center, "radius": radius }) self.swap() def step_simulation(self): self.texture_b.draw_to(self.ctx) self.texture_a.use() self.update_shader.draw_mesh(self.panel, unifroms={ "delta": self.delta }) self.swap() def update_normals(self): self.texture_b.draw_to(self.ctx) self.texture_a.use() self.normal_shader.draw_mesh(self.panel, unifroms={ "delta": self.delta }) self.swap() moderngl-moderngl-773b733/examples/water/water_main.py000066400000000000000000000167101470420062000230470ustar00rootroot00000000000000# WebGL Water # https://madebyevan.com/webgl-water/ # Copyright 2011 Evan Wallace # Released under the MIT license import random import math import moderngl import moderngl_window as mglw from light_gl import * from light_raytracer import * from water import * from renderer import * from enum import IntEnum class EventMode(IntEnum): NoEvent = 0, MoveCamera = 1, MoveSpahere = 2, AddDrop = 3, class WaterMain(mglw.WindowConfig): """ coordinate | y | | x +-------- / /z """ title = "ModernGL Water" gl_version = (3, 3) window_size = (1280, 720) aspect_ratio = 16 / 9 resizable = True @property def angle_y(self): return self._angle_y @angle_y.setter def angle_y(self, value: float): self._angle_y = min(89.99, max(-89.99, value)) @property def eye(self) -> glm.vec3: rad = glm.vec2(self.angle_x, self.angle_y) / 180 * math.pi cos_y = math.cos(rad[1]) return glm.normalize(glm.vec3(math.cos(rad[0])*cos_y, math.sin(rad[1]), math.sin(rad[0])*cos_y)) * self.eye_distance def dbg_tracer_mesh(ctx: moderngl.Context, tracer: RayTracer, ray: glm.vec3) -> Mesh: a = tracer.eye + tracer.ray00 * 0.01 b = tracer.eye + tracer.ray01 * 0.01 c = tracer.eye + tracer.ray11 * 0.01 d = tracer.eye + tracer.ray10 * 0.01 return MeshBuilder.seg_lines(tracer.eye, a, tracer.eye, b, tracer.eye, c, tracer.eye, d, tracer.eye, ray, a, b, b, c, c, d, d, a, ).build(ctx) def __init__(self, **kwargs): super().__init__(**kwargs) self.lines_shader = Shader(""" void main() { gl_Position = ftransform(); } """, """ void main() { gl_FragColor = vec4(0.3, 0.7, 0.4, 1.0); } """, self.ctx) self.coord_y = MeshBuilder.seg_lines( glm.vec3(0.0, 0.0, 0.0), glm.vec3(0.0, 1.0, 0.0)).build(self.ctx) self.eye_distance = 3.0 self.angle_x = 30 self.angle_y = 30 self.matrices = Matrices(glm.translate((0.0, 0.5, 0.0)), glm.lookAt(self.eye, (0.0, 0.0, 0.0), (0.0, 1.0, 0.0)), glm.perspective( 45, self.aspect_ratio, 0.01, 100)) self.renderer = Renderer(self.ctx) self.water = Water(ctx=self.ctx) self.center = glm.vec3(-0.4, -0.75, 0.2) self.old_center = self.center self.velocity = glm.vec3(0.0) self.gravity = glm.vec3(0.0, -4.0, 0.0) self.radius = 0.25 self.use_gravity = False self.mode: EventMode = EventMode.NoEvent self.tracer: RayTracer = None self.tracer_mesh: Mesh = None for i in range(20): self.water.add_drop(random.random() * 2.0 - 1.0, random.random() * 2.0 - 1.0, 0.03, 0.01 if i % 1 else -0.01) def add_drop(self, x: float, y: float): ray = self.tracer.get_ray_for_pixel(x, y) point_on_panel = self.tracer.eye + (ray * (-self.tracer.eye.y / ray.y)) self.water.add_drop(point_on_panel.x, point_on_panel.z, 0.03, 0.01) def move_sphere(self, x: int, y: int): ray = self.tracer.get_ray_for_pixel(x, y) t = glm.dot(self.plane_normal, self.prev_hit - self.tracer.eye) / glm.dot(self.plane_normal, ray) next_hit = self.tracer.eye + (ray * t) center = self.center + (next_hit - self.prev_hit) center.x = max(self.radius - 1, min(1 - self.radius, center.x)) center.z = max(self.radius - 1, min(1 - self.radius, center.z)) center.y = max(self.radius - 1, min(10, center.y)) self.center = center self.prev_hit = next_hit def mouse_release_event(self, x: int, y: int, button: int): if button == 1: self.mode = EventMode.NoEvent self.tracer = None def mouse_press_event(self, x: int, y: int, button: int): self.tracer = RayTracer(self.ctx.viewport, self.matrices) ray = self.tracer.get_ray_for_pixel(x, y) sphere_hit_test: HitTest = RayTracer.hit_test_sphere( self.tracer.eye, ray, self.center, self.radius) point_on_panel = self.tracer.eye + (ray * (-self.tracer.eye.y / ray.y)) if button == 1: if sphere_hit_test is not None: self.mode = EventMode.MoveSpahere self.prev_hit = sphere_hit_test.hit self.plane_normal = -self.tracer.get_ray_for_pixel( self.ctx.viewport[2] / 2, self.ctx.viewport[3] / 2) elif abs(point_on_panel.x) < 1 and abs(point_on_panel.z) < 1: self.mode = EventMode.AddDrop self.add_drop(x, y) else: self.mode = EventMode.MoveCamera else: self.tracer_mesh = WaterMain.dbg_tracer_mesh( self.ctx, self.tracer, point_on_panel) def mouse_drag_event(self, x: int, y: int, dx: int, dy: int): match self.mode: case EventMode.AddDrop: self.add_drop(x, y) case EventMode.MoveCamera: self.angle_x += dx self.angle_y += dy case EventMode.MoveSpahere: self.move_sphere(x, y) def key_event(self, key, action, modifiers): if key == ord('G') and action == 1: self.use_gravity = not self.use_gravity def update(self, seconds): if seconds > 1: return if self.mode == EventMode.MoveSpahere: self.velocity = glm.vec3(0.0) elif self.use_gravity: precent_under_water = max( 0, min(1, (self.radius - self.center.y) / (2*self.radius))) self.velocity = self.velocity + \ (self.gravity * (seconds - 1.1 * seconds * precent_under_water)) self.velocity = self.velocity - \ (glm.normalize(self.velocity) * (precent_under_water * seconds * glm.dot(self.velocity, self.velocity))) self.center = self.center + self.velocity * seconds if self.center.y < self.radius - 1: self.center.y = self.radius - 1 self.velocity.y = abs(self.velocity.y) * 0.7 self.water.move_sphere(self.old_center, self.center, self.radius) self.old_center = self.center self.water.step_simulation() self.water.step_simulation() self.water.update_normals() self.renderer.update_caustics(self.matrices, self.water) def render(self, time, frame_time): self.matrices.view = glm.lookAt( self.eye, (0.0, 0.0, 0.0), (0.0, 1.0, 0.0)) self.update(frame_time) self.ctx.enable(moderngl.DEPTH_TEST) self.ctx.screen.use() self.renderer.sphere_center = self.center self.renderer.sphere_radius = self.radius self.renderer.render_cude(self.matrices, self.water) self.renderer.render_water(self.matrices, self.water) self.renderer.render_sphere(self.matrices, self.water) self.ctx.disable(moderngl.DEPTH_TEST) if self.tracer_mesh is not None: self.lines_shader.draw_mesh( self.tracer_mesh, self.matrices, mode=moderngl.LINES) mglw.run_window_config(WaterMain, args=["--window", "glfw"]) moderngl-moderngl-773b733/examples/water/water_sim.py000066400000000000000000000047701470420062000227160ustar00rootroot00000000000000import random import numpy as np import moderngl import moderngl_window as mglw from light_gl import * from water import * from renderer import * class WaterSimulation(mglw.WindowConfig): title = "WaterSimulation" gl_version = (3, 3) window_size = (1280, 720) aspect_ratio = 16 / 9 resizable = True def __init__(self, **kwargs): super().__init__(**kwargs) self.matrix = Matrices() self.shader = Shader(""" uniform sampler2D Heightmap; void main() { vec2 coord = gl_Vertex.xy * 0.5 + 0.5; float height = texture(Heightmap, coord).r * 0.5; gl_Position = gl_ModelViewProjectionMatrix * vec4(gl_Vertex.xy, height, 1.0); } """, """ uniform vec3 w_volor; void main() { gl_FragColor = vec4(w_volor, 1.0); } """) self.shader.program["w_volor"] = glm.vec3(0.3, 0.5, 0.7) self.panel = MeshBuilder.panel(detail=64).build(self.ctx) self.water = Water() self._heavy = 5 @property def heavy(self): return self._heavy @heavy.setter def heavy(self, value): self._heavy = min(10, max(0, value)) def key_event(self, key, action, modifiers): if action == 1: if key == 265: # up arrow self.heavy += 1 elif key == 264: # down arrow self.heavy -= 1 def render(self, time, frame_time): angle = time * 0.2 self.matrix.projection = glm.perspective( 45.0, self.aspect_ratio, 0.1, 1000.0) self.matrix.view = glm.lookAt((np.cos(angle), np.sin(angle), 2.2), (0.0, 0.0, 0.0), (0.0, 0.0, 1.0),) if random.randint(0, 50) < self._heavy: strength = random.choice([1, -1]) * 0.4 self.water.add_drop(random.random() * 2.0 - 1.0, random.random() * 2.0 - 1.0, 0.04, strength) self.water.step_simulation() self.water.step_simulation() self.water.update_normals() self.ctx.enable(moderngl.DEPTH_TEST) self.ctx.screen.use() self.water.texture_a.use() self.shader.draw_mesh(self.panel, self.matrix, mode=moderngl.LINES) self.ctx.disable(moderngl.DEPTH_TEST) if __name__ == '__main__': mglw.run_window_config(WaterSimulation, args=["--window", "glfw"]) moderngl-moderngl-773b733/moderngl-stubs/000077500000000000000000000000001470420062000203475ustar00rootroot00000000000000moderngl-moderngl-773b733/moderngl-stubs/__init__.pyi000066400000000000000000004361771470420062000226530ustar00rootroot00000000000000from __future__ import annotations from contextlib import AbstractContextManager from typing import Any, Deque, Dict, Generator, List, Optional, Protocol, Set, Tuple, Union class ConvertibleToShaderSource(Protocol): def to_shader_source(self) -> str | bytes: ... POINTS: int """ctx.POINTS""" LINES: int """ctx.LINES""" LINE_LOOP: int """ctx.LINE_LOOP""" LINE_STRIP: int """ctx.LINE_STRIP""" TRIANGLES: int """ctx.TRIANGLES""" TRIANGLE_STRIP: int """ctx.TRIANGLE_STRIP""" TRIANGLE_FAN: int """ctx.TRIANGLE_FAN""" LINES_ADJACENCY: int """ctx.LINES_ADJACENCY""" LINE_STRIP_ADJACENCY: int """ctx.LINE_STRIP_ADJACENCY""" TRIANGLES_ADJACENCY: int """ctx.TRIANGLES_ADJACENCY""" TRIANGLE_STRIP_ADJACENCY: int """ctx.TRIANGLE_STRIP_ADJACENCY""" PATCHES: int """ctx.PATCHES""" NEAREST: int """ctx.NEAREST""" LINEAR: int """ctx.LINEAR""" NEAREST_MIPMAP_NEAREST: int """ctx.NEAREST_MIPMAP_NEAREST""" LINEAR_MIPMAP_NEAREST: int """ctx.LINEAR_MIPMAP_NEAREST""" NEAREST_MIPMAP_LINEAR: int """ctx.NEAREST_MIPMAP_LINEAR""" LINEAR_MIPMAP_LINEAR: int """ctx.LINEAR_MIPMAP_LINEAR""" NOTHING: int """ctx.NOTHING""" BLEND: int """ctx.BLEND""" DEPTH_TEST: int """ctx.DEPTH_TEST""" CULL_FACE: int """ctx.CULL_FACE""" RASTERIZER_DISCARD: int """ctx.RASTERIZER_DISCARD""" PROGRAM_POINT_SIZE: int """ctx.PROGRAM_POINT_SIZE""" ZERO: int """ctx.ZERO""" ONE: int """ctx.ONE""" SRC_COLOR: int """ctx.SRC_COLOR""" ONE_MINUS_SRC_COLOR: int """ctx.ONE_MINUS_SRC_COLOR""" SRC_ALPHA: int """ctx.SRC_ALPHA""" ONE_MINUS_SRC_ALPHA: int """ctx.ONE_MINUS_SRC_ALPHA""" DST_ALPHA: int """ctx.DST_ALPHA""" ONE_MINUS_DST_ALPHA: int """ctx.ONE_MINUS_DST_ALPHA""" DST_COLOR: int """ctx.DST_COLOR""" ONE_MINUS_DST_COLOR: int """ctx.ONE_MINUS_DST_COLOR""" FUNC_ADD: int """ctx.FUNC_ADD""" FUNC_SUBTRACT: int """ctx.FUNC_SUBTRACT""" FUNC_REVERSE_SUBTRACT: int """ctx.FUNC_REVERSE_SUBTRACT""" MIN: int """ctx.MIN""" MAX: int """ctx.MAX""" DEFAULT_BLENDING: int """ctx.DEFAULT_BLENDING""" ADDITIVE_BLENDING: int """ctx.ADDITIVE_BLENDING""" PREMULTIPLIED_ALPHA: int """ctx.PREMULTIPLIED_ALPHA""" FIRST_VERTEX_CONVENTION: int """ctx.FIRST_VERTEX_CONVENTION""" LAST_VERTEX_CONVENTION: int """ctx.LAST_VERTEX_CONVENTION""" VERTEX_ATTRIB_ARRAY_BARRIER_BIT: int """ctx.VERTEX_ATTRIB_ARRAY_BARRIER_BIT""" ELEMENT_ARRAY_BARRIER_BIT: int """ctx.ELEMENT_ARRAY_BARRIER_BIT""" UNIFORM_BARRIER_BIT: int """ctx.UNIFORM_BARRIER_BIT""" TEXTURE_FETCH_BARRIER_BIT: int """ctx.TEXTURE_FETCH_BARRIER_BIT""" SHADER_IMAGE_ACCESS_BARRIER_BIT: int """ctx.SHADER_IMAGE_ACCESS_BARRIER_BIT""" COMMAND_BARRIER_BIT: int """ctx.COMMAND_BARRIER_BIT""" PIXEL_BUFFER_BARRIER_BIT: int """ctx.PIXEL_BUFFER_BARRIER_BIT""" TEXTURE_UPDATE_BARRIER_BIT: int """ctx.TEXTURE_UPDATE_BARRIER_BIT""" BUFFER_UPDATE_BARRIER_BIT: int """ctx.BUFFER_UPDATE_BARRIER_BIT""" FRAMEBUFFER_BARRIER_BIT: int """ctx.FRAMEBUFFER_BARRIER_BIT""" TRANSFORM_FEEDBACK_BARRIER_BIT: int """ctx.TRANSFORM_FEEDBACK_BARRIER_BIT""" ATOMIC_COUNTER_BARRIER_BIT: int """ctx.ATOMIC_COUNTER_BARRIER_BIT""" SHADER_STORAGE_BARRIER_BIT: int """ctx.SHADER_STORAGE_BARRIER_BIT""" ALL_BARRIER_BITS: int """ctx.ALL_BARRIER_BITS""" class Attribute: """ Represents a program attribute. """ location: int """ The location of the attribute. The result of the glGetAttribLocation. """ array_length: int """ The length of the array and `1` for scalars. """ dimension: int """ The attribute dimension. """ shape: int """ A single character, representing the scalar type of the attribute. """ name: str """ The Attribute name without array index suffixes. """ extra: Any """ User Data """ mglo: Any """ Internal moderngl core object """ class Uniform: """ A uniform is a global GLSL variable declared with the 'uniform' storage qualifier. These act as parameters that the user of a shader program can pass to that program. In ModernGL, Uniforms can be accessed using :py:meth:`Program.__getitem__` or :py:meth:`Program.__iter__` """ location: int """ The location of the uniform. """ dimension: int """ The dimension of the uniform. """ array_length: int """ The length of the array of the uniform. The array_length is `1` for non array uniforms. """ name: str """ The name of the uniform. The name does not contain leading `[0]`. The name may contain `[ ]` when the uniform is part of a struct. """ value: Any """ The value of the uniform. Reading the value of the uniform may force the GPU to sync. The value must be a tuple for non array uniforms. The value must be a list of tuples for array uniforms. """ handle: int """ The handle of the uniform. Only valid for uniform textures when using Bindless Textures. """ extra: Any """ Attribute for storing user defined objects """ mglo: Any """ Internal moderngl core object """ def read(self) -> bytes: """ Read the value of the uniform. """ def write(self, data: Any) -> None: """ Write the value of the uniform. """ class UniformBlock: """ Uniform Block metadata """ binding: int """ The binding of the uniform block. """ value: int """ The value of the uniform block. """ name: str """ The name of the uniform block. """ index: int """ The index of the uniform block. """ size: int """ The size of the uniform block. """ extra: Any """ Attribute for storing user defined objects """ mglo: Any """ Internal moderngl core object """ class StorageBlock: """ Storage Block metadata """ binding: int """ The binding of the storage block """ value: int """ The value of the storage block. """ name: str """ The name of the storage block. """ index: int """ The index of the storage block. """ extra: Any """ Attribute for storing user defined objects """ mglo: Any """ Internal moderngl core object """ class Varying: """ This class represents a program varying. """ number: int """ The number of the varying. """ name: str """ The name of the varying. """ extra: Any """ Attribute for storing user defined objects """ mglo: Any """ Internal moderngl core object """ class Error(Exception): """ Generic moderngl error. """ class InvalidObject: """ DEPRECATED """ class Buffer: """ Buffer objects are OpenGL objects that store an array of unformatted memory \ allocated by the OpenGL context, (data allocated on the GPU). These can be used to store vertex data, pixel data retrieved from images or the framebuffer, and a variety of other things. A Buffer object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.buffer` to create one. Copy buffer content using :py:meth:`Context.copy_buffer`. """ size: int """The size of the buffer in bytes.""" dynamic: bool """Is the buffer created with the dynamic flag?.""" mglo: Any """Internal representation for debug purposes only.""" ctx: Context """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def write(self, data: Any, offset: int = 0) -> None: """ Write the content. Args: data (bytes): The data. Keyword Args: offset (int): The offset in bytes. """ def write_chunks(self, data: Any, start: int, step: int, count: int) -> None: """ Split data to count equal parts. Write the chunks using offsets calculated from start, step and stop. Args: data (bytes): The data. start (int): First offset in bytes. step (int): Offset increment in bytes. count (int): The number of offsets. """ def read(self, size: int = -1, offset: int = 0) -> bytes: """ Read the content. Args: size (int): The size in bytes. Value ``-1`` means all. Keyword Args: offset (int): The offset in bytes. Returns: bytes """ def read_into(self, buffer: Any, size: int = -1, offset: int = 0, write_offset: int = 0) -> None: """ Read the content into a buffer. Args: buffer (bytearray): The buffer that will receive the content. size (int): The size in bytes. Value ``-1`` means all. Keyword Args: offset (int): The read offset in bytes. write_offset (int): The write offset in bytes. """ def read_chunks(self, chunk_size: int, start: int, step: int, count: int) -> bytes: """ Read the content. Read and concatenate the chunks of size chunk_size using offsets calculated from start, step and stop. Args: chunk_size (int): The chunk size in bytes. start (int): First offset in bytes. step (int): Offset increment in bytes. count (int): The number of offsets. Returns: bytes """ def read_chunks_into( self, buffer: Any, chunk_size: int, start: int, step: int, count: int, write_offset: int = 0, ) -> None: """ Read the content. Read and concatenate the chunks of size chunk_size using offsets calculated from start, step and stop. Args: buffer (bytearray): The buffer that will receive the content. chunk_size (int): The chunk size. start (int): First offset. step (int): Offset increment. count (int): The number of offsets. Keyword Args: write_offset (int): The write offset. """ def clear(self, size: int = -1, offset: int = 0, chunk: Any = None) -> None: """ Clear the content. Args: size (int): The size. Value ``-1`` means all. Keyword Args: offset (int): The offset. chunk (bytes): The chunk to use repeatedly. """ def bind_to_uniform_block(self, binding: int = 0, offset: int = 0, size: int = -1) -> None: """ Bind the buffer to a uniform block. Args: binding (int): The uniform block binding. Keyword Args: offset (int): The offset. size (int): The size. Value ``-1`` means all. """ def bind_to_storage_buffer(self, binding: int = 0, offset: int = 0, size: int = -1) -> None: """ Bind the buffer to a shader storage buffer. Args: binding (int): The shader storage binding. Keyword Args: offset (int): The offset. size (int): The size. Value ``-1`` means all. """ def orphan(self, size: int = -1) -> None: """ Orphan the buffer with the option to specify a new size. It is also called buffer re-specification. Reallocate the buffer object before you start modifying it. Since allocating storage is likely faster than the implicit synchronization, you gain significant performance advantages over synchronization. The old storage will still be used by the OpenGL commands that have been sent previously. It is likely that the GL driver will not be doing any allocation at all, but will just be pulling an old free block off the unused buffer queue and use it, so it is likely to be very efficient. Keyword Args: size (int): The new byte size if the buffer. If not supplied the buffer size will be unchanged. .. rubric:: Example .. code-block:: python # For simplicity the VertexArray creation is omitted >>> vbo = ctx.buffer(reserve=1024) # Fill the buffer >>> vbo.write(some_temporary_data) # Issue a render call that uses the vbo >>> vao.render(...) # Orphan the buffer >>> vbo.orphan() # Issue another render call without waiting for the previous one >>> vbo.write(some_temporary_data) >>> vao.render(...) # We can also resize the buffer. In this case we double the size >> vbo.orphan(vbo.size * 2) """ def release(self) -> None: """Release the ModernGL object.""" def bind(self, *attribs, layout=None): """ Helper method for binding a buffer. Returns: (self, layout, attribs) tuple """ def assign(self, index: int) -> Tuple[Buffer, int]: """ Helper method for assigning a buffer. Returns: (self, index) tuple """ class ComputeShader: """ A Compute Shader is a Shader Stage that is used entirely for computing arbitrary information. While it can do rendering, it is generally used for tasks not directly related to drawing. - Compute shaders support uniforms are other member object just like a :py:class:`moderngl.Program`. - Storage buffers can be bound using :py:meth:`Buffer.bind_to_storage_buffer`. - Uniform buffers can be bound using :py:meth:`Buffer.bind_to_uniform_block`. - Images can be bound using :py:meth:`Texture.bind_to_image`. """ mglo: Any """Internal representation for debug purposes only.""" ctx: Context """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def __getitem__(self, key: str) -> Union[Uniform, UniformBlock, StorageBlock]: """ Get a member such as uniforms, uniform blocks and storage blocks. .. code-block:: python # Get a uniform uniform = program['color'] # Uniform values can be set on the returned object # or the `__setitem__` shortcut can be used. program['color'].value = 1.0, 1.0, 1.0, 1.0 # Still when writing byte data we need to use the `write()` method program['color'].write(buffer) # Set binding for a storage block (if supported) program['DataBlock'].binding = 0 """ def __setitem__(self, key: str, value: Any): """ Set a value of uniform or uniform block. .. code-block:: python # Set a vec4 uniform uniform['color'] = 1.0, 1.0, 1.0, 1.0 # Optionally we can store references to a member and set the value directly uniform = program['color'] uniform.value = 1.0, 0.0, 0.0, 0.0 uniform = program['cameraMatrix'] uniform.write(camera_matrix) # Set binding for a storage block (if supported) program['DataBlock'].binding = 0 """ def __iter__(self) -> Generator[str, None, None]: """ Yields the internal members names as strings. Example:: for member in program: obj = program[member] print(member, obj) if isinstance(obj, moderngl.StorageBlock): print('This is a storage block member') This includes all members such as uniforms, uniform blocks and storage blocks. """ def run(self, group_x: int = 1, group_y: int = 1, group_z: int = 1) -> None: """ Run the compute shader. Args: group_x (int): The number of work groups to be launched in the X dimension. group_y (int): The number of work groups to be launched in the Y dimension. group_z (int): The number of work groups to be launched in the Z dimension. """ def run_indirect(self, buffer: Buffer, offset: int = 0) -> None: """ Run the compute shader. """ def get(self, key: str, default: Any) -> Union[Uniform, UniformBlock, Attribute, Varying]: """ Returns a Uniform, UniformBlock, Attribute or Varying. Args: default: This is the value to be returned in case key does not exist. Returns: :py:class:`Uniform`, :py:class:`UniformBlock`, :py:class:`Attribute` or :py:class:`Varying` """ def release(self) -> None: """Release the ModernGL object.""" class ConditionalRender: """ This class represents a ConditionalRender object. ConditionalRender objects can only be accessed from :py:class:`Query` objects. """ mglo: Any """Internal representation for debug purposes only.""" extra: Any """Attribute for storing user defined objects""" def __enter__(self): ... def __exit__(self, *args): ... class Context: """ Class exposing OpenGL features. ModernGL objects can be created from this class. """ NOTHING: int """Represents no states. Can be used with :py:meth:`Context.enable_only` to disable all states.""" BLEND: int """Enable/disable blending""" DEPTH_TEST: int """Enable/disable depth testing""" CULL_FACE: int """Enable/disable face culling""" RASTERIZER_DISCARD: int """Enable/disable rasterization Context flag: Enables ``gl_PointSize`` in vertex or geometry shaders. When enabled we can write to ``gl_PointSize`` in the vertex shader to specify the point size for each individual point. If this value is not set in the shader the behavior is undefined. This means the points may or may not appear depending if the drivers enforce some default value for ``gl_PointSize``.""" PROGRAM_POINT_SIZE: int """When disabled :py:attr:`Context.point_size` is used.""" POINTS: int """Each vertex represents a point""" LINES: int """Vertices 0 and 1 are considered a line. Vertices 2 and 3 are considered a line. And so on. If the user specifies a non-even number of vertices, then the extra vertex is ignored.""" LINE_LOOP: int """As line strips, except that the first and last vertices are also used as a line. Thus, you get n lines for n input vertices. If the user only specifies 1 vertex, the drawing command is ignored. The line between the first and last vertices happens after all of the previous lines in the sequence.""" LINE_STRIP: int """The adjacent vertices are considered lines. Thus, if you pass n vertices, you will get n-1 lines. If the user only specifies 1 vertex, the drawing command is ignored.""" TRIANGLES: int """Vertices 0, 1, and 2 form a triangle. Vertices 3, 4, and 5 form a triangle. And so on.""" TRIANGLE_STRIP: int """Every group of 3 adjacent vertices forms a triangle. The face direction of the strip is determined by the winding of the first triangle. Each successive triangle will have its effective face order reversed, so the system compensates for that by testing it in the opposite way. A vertex stream of n length will generate n-2 triangles.""" TRIANGLE_FAN: int """The first vertex is always held fixed. From there on, every group of 2 adjacent vertices form a triangle with the first. So with a vertex stream, you get a list of triangles like so: (0, 1, 2) (0, 2, 3), (0, 3, 4), etc. A vertex stream of n length will generate n-2 triangles.""" LINES_ADJACENCY: int """These are special primitives that are expected to be used specifically with geomtry shaders. These primitives give the geometry shader more vertices to work with for each input primitive. Data needs to be duplicated in buffers.""" LINE_STRIP_ADJACENCY: int """These are special primitives that are expected to be used specifically with geomtry shaders. These primitives give the geometry shader more vertices to work with for each input primitive. Data needs to be duplicated in buffers.""" TRIANGLES_ADJACENCY: int """These are special primitives that are expected to be used specifically with geomtry shaders. These primitives give the geometry shader more vertices to work with for each input primitive. Data needs to be duplicated in buffers.""" TRIANGLE_STRIP_ADJACENCY: int """These are special primitives that are expected to be used specifically with geomtry shaders. These primitives give the geometry shader more vertices to work with for each input primitive. Data needs to be duplicated in buffers.""" PATCHES: int """primitive type can only be used when Tessellation is active. It is a primitive with a user-defined number of vertices, which is then tessellated based on the control and evaluation shaders into regular points, lines, or triangles, depending on the TES's settings.""" NEAREST: int """Returns the value of the texture element that is nearest (in Manhattan distance) to the specified texture coordinates.""" LINEAR: int """Returns the weighted average of the four texture elements that are closest to the specified texture coordinates. These can include items wrapped or repeated from other parts of a texture, depending on the values of texture repeat mode, and on the exact mapping.""" NEAREST_MIPMAP_NEAREST: int """Chooses the mipmap that most closely matches the size of the pixel being textured and uses the ``NEAREST`` criterion (the texture element closest to the specified texture coordinates) to produce a texture value.""" LINEAR_MIPMAP_NEAREST: int """Chooses the mipmap that most closely matches the size of the pixel being textured and uses the ``LINEAR`` criterion (a weighted average of the four texture elements that are closest to the specified texture coordinates) to produce a texture value.""" NEAREST_MIPMAP_LINEAR: int """Chooses the two mipmaps that most closely match the size of the pixel being textured and uses the ``NEAREST`` criterion (the texture element closest to the specified texture coordinates ) to produce a texture value from each mipmap. The final texture value is a weighted average of those two values.""" LINEAR_MIPMAP_LINEAR: int """Chooses the two mipmaps that most closely match the size of the pixel being textured and uses the ``LINEAR`` criterion (a weighted average of the texture elements that are closest to the specified texture coordinates) to produce a texture value from each mipmap. The final texture value is a weighted average of those two values.""" ZERO: int """(0,0,0,0)""" ONE: int """(1,1,1,1)""" SRC_COLOR: int """(Rs0/kR,Gs0/kG,Bs0/kB,As0/kA)""" ONE_MINUS_SRC_COLOR: int """(1,1,1,1) - (Rs0/kR,Gs0/kG,Bs0/kB,As0/kA)""" SRC_ALPHA: int """(As0/kA,As0/kA,As0/kA,As0/kA)""" ONE_MINUS_SRC_ALPHA: int """(1,1,1,1) - (As0/kA,As0/kA,As0/kA,As0/kA)""" DST_ALPHA: int """(Ad/kA,Ad/kA,Ad/kA,Ad/kA)""" ONE_MINUS_DST_ALPHA: int """(1,1,1,1) - (Ad/kA,Ad/kA,Ad/kA,Ad/kA)""" DST_COLOR: int """(Rd/kR,Gd/kG,Bd/kB,Ad/kA)""" ONE_MINUS_DST_COLOR: int """(1,1,1,1) - (Rd/kR,Gd/kG,Bd/kB,Ad/kA)""" DEFAULT_BLENDING: int """Shotcut for the default blending ``SRC_ALPHA, ONE_MINUS_SRC_ALPHA``""" ADDITIVE_BLENDING: int """Shotcut for additive blending ``ONE, ONE``""" PREMULTIPLIED_ALPHA: int """Shotcut for blend mode when using premultiplied alpha ``SRC_ALPHA, ONE``""" FUNC_ADD: int """source + destination""" FUNC_SUBTRACT: int """source - destination""" FUNC_REVERSE_SUBTRACT: int """destination - source""" MIN: int """Minimum of source and destination""" MAX: int """Maximum of source and destination""" FIRST_VERTEX_CONVENTION: int """Specifies the first vertex should be used as the source of data for flat shaded varyings. Used with :py:attr:`Context.provoking_vertex`.""" LAST_VERTEX_CONVENTION: int """Specifies the last vertex should be used as the source of data for flat shaded varyings. Used with :py:attr:`Context.provoking_vertex`.""" VERTEX_ATTRIB_ARRAY_BARRIER_BIT: int """ VERTEX_ATTRIB_ARRAY_BARRIER_BIT """ ELEMENT_ARRAY_BARRIER_BIT: int """ ELEMENT_ARRAY_BARRIER_BIT """ UNIFORM_BARRIER_BIT: int """ UNIFORM_BARRIER_BIT """ TEXTURE_FETCH_BARRIER_BIT: int """ TEXTURE_FETCH_BARRIER_BIT """ SHADER_IMAGE_ACCESS_BARRIER_BIT: int """ SHADER_IMAGE_ACCESS_BARRIER_BIT """ COMMAND_BARRIER_BIT: int """ COMMAND_BARRIER_BIT """ PIXEL_BUFFER_BARRIER_BIT: int """ PIXEL_BUFFER_BARRIER_BIT """ TEXTURE_UPDATE_BARRIER_BIT: int """ TEXTURE_UPDATE_BARRIER_BIT """ BUFFER_UPDATE_BARRIER_BIT: int """ BUFFER_UPDATE_BARRIER_BIT """ FRAMEBUFFER_BARRIER_BIT: int """ FRAMEBUFFER_BARRIER_BIT """ TRANSFORM_FEEDBACK_BARRIER_BIT: int """ TRANSFORM_FEEDBACK_BARRIER_BIT """ ATOMIC_COUNTER_BARRIER_BIT: int """ ATOMIC_COUNTER_BARRIER_BIT """ SHADER_STORAGE_BARRIER_BIT: int """ SHADER_STORAGE_BARRIER_BIT """ ALL_BARRIER_BITS: int """ ALL_BARRIER_BITS """ version_code: int """The OpenGL version code. Reports ``410`` for OpenGL 4.1""" gc_mode: str """ The garbage collection mode. The default mode is ``None`` meaning no automatic garbage collection is done. Other modes are ``auto`` and ``context_gc``. Please see documentation for the appropriate configuration. Examples:: # Disable automatic garbage collection. # Each objects needs to be explicitly released. ctx.gc_mode = None # Collect all dead objects in the context and # release them by calling Context.gc() ctx.gc_mode = 'context_gc' ctx.gc() # Deletes the collected objects # Enable automatic garbage collection like # we normally expect in python. ctx.gc_mode = 'auto' """ objects: Deque[Any] """ Moderngl objects scheduled for deletion. These are deleted when calling :py:meth:`Context.gc`. """ def gc(self) -> int: """ Deletes OpenGL objects. This method must be called to garbage collect OpenGL resources when ``gc_mode`` is ``'context_gc'```. Calling this method with any other ``gc_mode`` configuration has no effect and is perfectly safe. Returns: int: Number of objects deleted """ line_width: float """ Set the default line width. .. Warning:: A line width other than 1.0 is not guaranteed to work across different OpenGL implementations. For wide lines you should be using geometry shaders. """ point_size: float """ Set/get the point size. Point size changes the pixel size of rendered points. The min and max values are limited by ``POINT_SIZE_RANGE``. This value usually at least ``(1, 100)``, but this depends on the drivers/vendors. If variable point size is needed you can enable ``PROGRAM_POINT_SIZE`` and write to ``gl_PointSize`` in the vertex or geometry shader. .. Note:: Using a geometry shader to create triangle strips from points is often a safer way to render large points since you don't have have any size restrictions. """ depth_func: str """ Set the default depth func. Example:: ctx.depth_func = '<=' # GL_LEQUAL ctx.depth_func = '<' # GL_LESS ctx.depth_func = '>=' # GL_GEQUAL ctx.depth_func = '>' # GL_GREATER ctx.depth_func = '==' # GL_EQUAL ctx.depth_func = '!=' # GL_NOTEQUAL ctx.depth_func = '0' # GL_NEVER ctx.depth_func = '1' # GL_ALWAYS """ depth_clamp_range: Union[Tuple[float, float], None] """ Setting up depth clamp range (write only, by default ``None``). ``ctx.depth_clamp_range`` offers uniform use of GL_DEPTH_CLAMP and glDepthRange. ``GL_DEPTH_CLAMP`` is needed to disable clipping of fragments outside near limit of projection matrix. For example, this will allow you to draw between 0 and 1 in the Z (depth) coordinate, even if ``near`` is set to 0.5 in the projection matrix. .. note:: All fragments outside the ``near`` of the projection matrix will have a depth of ``near``. See https://www.khronos.org/opengl/wiki/Vertex_Post-Processing#Depth_clamping for more info. ``glDepthRange(nearVal, farVal)`` is needed to specify mapping of depth values from normalized device coordinates to window coordinates. See https://registry.khronos.org/OpenGL-Refpages/gl4/html/glDepthRange.xhtml for more info. Example:: # For glDisable(GL_DEPTH_CLAMP) and glDepthRange(0, 1) ctx.depth_clamp_range = None # For glEnable(GL_DEPTH_CLAMP) and glDepthRange(near, far) ctx.depth_clamp_range = (near, far) """ blend_func: Tuple[int, int] """ tuple: Set the blend func (write only). Blend func can be set for rgb and alpha separately if needed. Supported blend functions are:: moderngl.ZERO moderngl.ONE moderngl.SRC_COLOR moderngl.ONE_MINUS_SRC_COLOR moderngl.DST_COLOR moderngl.ONE_MINUS_DST_COLOR moderngl.SRC_ALPHA moderngl.ONE_MINUS_SRC_ALPHA moderngl.DST_ALPHA moderngl.ONE_MINUS_DST_ALPHA # Shortcuts moderngl.DEFAULT_BLENDING # (SRC_ALPHA, ONE_MINUS_SRC_ALPHA) moderngl.ADDITIVE_BLENDING # (ONE, ONE) moderngl.PREMULTIPLIED_ALPHA # (SRC_ALPHA, ONE) Example:: # For both rgb and alpha ctx.blend_func = moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA # Separate for rgb and alpha ctx.blend_func = ( moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, moderngl.ONE, moderngl.ONE ) """ blend_equation: Tuple[int, int] """ tuple: Set the blend equation (write only). Blend equations specify how source and destination colors are combined in blending operations. By default ``FUNC_ADD`` is used. Blend equation can be set for rgb and alpha separately if needed. Supported functions are:: moderngl.FUNC_ADD # source + destination moderngl.FUNC_SUBTRACT # source - destination moderngl.FUNC_REVERSE_SUBTRACT # destination - source moderngl.MIN # Minimum of source and destination moderngl.MAX # Maximum of source and destination Example:: # For both rgb and alpha channel ctx.blend_equation = moderngl.FUNC_ADD # Separate for rgb and alpha channel ctx.blend_equation = moderngl.FUNC_ADD, moderngl.MAX """ multisample: bool """ bool: Enable/disable multisample mode (``GL_MULTISAMPLE``). This property is write only. Example:: # Enable ctx.multisample = True # Disable ctx.multisample = False """ provoking_vertex: int """ Specifies the vertex to be used as the source of data for flat shaded varyings. Flatshading a vertex shader varying output (ie. ``flat out vec3 pos``) means to assign all vetices of the primitive the same value for that output. The vertex from which these values is derived is known as the provoking vertex. It can be configured to be the first or the last vertex. This property is write only. Example:: # Use first vertex ctx.provoking_vertex = moderngl.FIRST_VERTEX_CONVENTION # Use last vertex ctx.provoking_vertex = moderngl.LAST_VERTEX_CONVENTION """ polygon_offset: Tuple[float, float] """ tuple: Get or set the current polygon offset. The tuple values represents two float values: ``unit`` and a ``factor``:: ctx.polygon_offset = unit, factor When drawing polygons, lines or points directly on top of exiting geometry the result is often not visually pleasant. We can experience z-fighting or partially fading fragments due to different primitives not being rasterized in the exact same way or simply depth buffer precision issues. For example when visualizing polygons drawing a wireframe version on top of the original mesh, these issues are immediately apparent. Applying decals to surfaces is another common example. The official documentation states the following:: When enabled, the depth value of each fragment is added to a calculated offset value. The offset is added before the depth test is performed and before the depth value is written into the depth buffer. The offset value o is calculated by: o = m * factor + r * units where m is the maximum depth slope of the polygon and r is the smallest value guaranteed to produce a resolvable difference in window coordinate depth values. The value r is an implementation-specific int. In simpler terms: We use polygon offset to either add a positive offset to the geometry (push it away from you) or a negative offset to geometry (pull it towards you). * ``units`` is a int offset to depth and will do the job alone if we are working with geometry parallel to the near/far plane. * The ``factor`` helps you handle sloped geometry (not parallel to near/far plane). In most cases you can get away with ``[-1.0, 1.0]`` for both factor and units, but definitely play around with the values. When both values are set to ``0`` polygon offset is disabled internally. To just get started with something you can try:: # Either push the geomtry away or pull it towards you # with support for handling small to medium sloped geometry ctx.polygon_offset = 1.0, 1.0 ctx.polygon_offset = -1.0, -1.0 # Disable polygon offset ctx.polygon_offset = 0, 0 """ viewport: Tuple[int, int, int, int] """ tuple: Get or set the viewport of the active framebuffer. Example:: >>> ctx.viewport (0, 0, 1280, 720) >>> ctx.viewport = (0, 0, 640, 360) >>> ctx.viewport (0, 0, 640, 360) If no framebuffer is bound ``(0, 0, 0, 0)`` will be returned. """ scissor: Optional[Tuple[int, int, int, int]] """ tuple: Get or set the scissor box for the active framebuffer. When scissor testing is enabled fragments outside the defined scissor box will be discarded. This applies to rendered geometry or :py:meth:`Context.clear`. Setting is value enables scissor testing in the framebuffer. Setting the scissor to ``None`` disables scissor testing and reverts the scissor box to match the framebuffer size. Example:: # Enable scissor testing >>> ctx.scissor = 100, 100, 200, 100 # Disable scissor testing >>> ctx.scissor = None If no framebuffer is bound ``(0, 0, 0, 0)`` will be returned. """ max_samples: int """The maximum supported number of samples for multisampling.""" max_integer_samples: int """The max integer samples.""" max_texture_units: int """The max texture units.""" max_label_length: int | None """The max label length. May be None if not supported.""" max_debug_message_length: int | None """The max debug message length. May be None if not supported.""" max_debug_group_stack_depth: int | None """The max debug group stack depth. May be None if not supported.""" max_anisotropy: float """The maximum value supported for anisotropic filtering.""" default_texture_unit: int """The default texture unit.""" screen: Framebuffer """ Framebuffer: A Framebuffer instance representing the screen. Normally set when creating a context with ``create_context()`` attaching to an existing context. This is the special system framebuffer represented by framebuffer ``id=0``. When creating a standalone context this property is not set since there are no default framebuffer. """ wireframe: bool """Wireframe settings for debugging.""" front_face: str """ The front_face. Acceptable values are ``'ccw'`` (default) or ``'cw'``. Face culling must be enabled for this to have any effect: ``ctx.enable(moderngl.CULL_FACE)``. Example:: # Triangles winded counter-clockwise considered front facing ctx.front_face = 'ccw' # Triangles winded clockwise considered front facing ctx.front_face = 'cw' """ cull_face: str """ The face side to cull. Acceptable values are ``'back'`` (default) ``'front'`` or ``'front_and_back'``. This is similar to :py:meth:`Context.front_face` Face culling must be enabled for this to have any effect: ``ctx.enable(moderngl.CULL_FACE)``. Example:: ctx.cull_face = 'front' ctx.cull_face = 'back' ctx.cull_face = 'front_and_back' """ patch_vertices: int """The number of vertices that will be used to make up a single patch primitive.""" error: str """ The result of ``glGetError()`` but human readable. This values is provided for debug purposes only and is likely to reduce performace when used in a draw loop. """ extensions: Set[str] """ Set[str]: The extensions supported by the context. All extensions names have a ``GL_`` prefix, so if the spec refers to ``ARB_compute_shader`` we need to look for ``GL_ARB_compute_shader``:: # If compute shaders are supported ... >> 'GL_ARB_compute_shader' in ctx.extensions True Example data:: { 'GL_ARB_multi_bind', 'GL_ARB_shader_objects', 'GL_ARB_half_float_vertex', 'GL_ARB_map_buffer_alignment', 'GL_ARB_arrays_of_arrays', 'GL_ARB_pipeline_statistics_query', 'GL_ARB_provoking_vertex', 'GL_ARB_gpu_shader5', 'GL_ARB_uniform_buffer_object', 'GL_EXT_blend_equation_separate', 'GL_ARB_tessellation_shader', 'GL_ARB_multi_draw_indirect', 'GL_ARB_multisample', .. etc .. } """ info: Dict[str, Any] """ dict: OpenGL Limits and information about the context. Example:: # The maximum width and height of a texture >> ctx.info['GL_MAX_TEXTURE_SIZE'] 16384 # Vendor and renderer >> ctx.info['GL_VENDOR'] NVIDIA Corporation >> ctx.info['GL_RENDERER'] NVIDIA GeForce GT 650M OpenGL Engine Example data:: { 'GL_VENDOR': 'NVIDIA Corporation', 'GL_RENDERER': 'NVIDIA GeForce GT 650M OpenGL Engine', 'GL_VERSION': '4.1 NVIDIA-10.32.0 355.11.10.10.40.102', 'GL_POINT_SIZE_RANGE': (1.0, 2047.0), 'GL_SMOOTH_LINE_WIDTH_RANGE': (0.5, 1.0), 'GL_ALIASED_LINE_WIDTH_RANGE': (1.0, 1.0), 'GL_POINT_FADE_THRESHOLD_SIZE': 1.0, 'GL_POINT_SIZE_GRANULARITY': 0.125, 'GL_SMOOTH_LINE_WIDTH_GRANULARITY': 0.125, 'GL_MIN_PROGRAM_TEXEL_OFFSET': -8.0, 'GL_MAX_PROGRAM_TEXEL_OFFSET': 7.0, 'GL_MINOR_VERSION': 1, 'GL_MAJOR_VERSION': 4, 'GL_SAMPLE_BUFFERS': 0, 'GL_SUBPIXEL_BITS': 8, 'GL_CONTEXT_PROFILE_MASK': 1, 'GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT': 256, 'GL_DOUBLEBUFFER': False, 'GL_STEREO': False, 'GL_MAX_VIEWPORT_DIMS': (16384, 16384), 'GL_MAX_3D_TEXTURE_SIZE': 2048, 'GL_MAX_ARRAY_TEXTURE_LAYERS': 2048, 'GL_MAX_CLIP_DISTANCES': 8, 'GL_MAX_COLOR_ATTACHMENTS': 8, 'GL_MAX_COLOR_TEXTURE_SAMPLES': 8, 'GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS': 233472, 'GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS': 231424, 'GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS': 80, 'GL_MAX_COMBINED_UNIFORM_BLOCKS': 70, 'GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS': 233472, 'GL_MAX_CUBE_MAP_TEXTURE_SIZE': 16384, 'GL_MAX_DEPTH_TEXTURE_SAMPLES': 8, 'GL_MAX_DRAW_BUFFERS': 8, 'GL_MAX_DUAL_SOURCE_DRAW_BUFFERS': 1, 'GL_MAX_ELEMENTS_INDICES': 150000, 'GL_MAX_ELEMENTS_VERTICES': 1048575, 'GL_MAX_FRAGMENT_INPUT_COMPONENTS': 128, 'GL_MAX_FRAGMENT_UNIFORM_COMPONENTS': 4096, 'GL_MAX_FRAGMENT_UNIFORM_VECTORS': 1024, 'GL_MAX_FRAGMENT_UNIFORM_BLOCKS': 14, 'GL_MAX_GEOMETRY_INPUT_COMPONENTS': 128, 'GL_MAX_GEOMETRY_OUTPUT_COMPONENTS': 128, 'GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_GEOMETRY_UNIFORM_BLOCKS': 14, 'GL_MAX_GEOMETRY_UNIFORM_COMPONENTS': 2048, 'GL_MAX_INTEGER_SAMPLES': 1, 'GL_MAX_SAMPLES': 8, 'GL_MAX_RECTANGLE_TEXTURE_SIZE': 16384, 'GL_MAX_RENDERBUFFER_SIZE': 16384, 'GL_MAX_SAMPLE_MASK_WORDS': 1, 'GL_MAX_SERVER_WAIT_TIMEOUT': -1, 'GL_MAX_TEXTURE_BUFFER_SIZE': 134217728, 'GL_MAX_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_TEXTURE_LOD_BIAS': 15, 'GL_MAX_TEXTURE_SIZE': 16384, 'GL_MAX_UNIFORM_BUFFER_BINDINGS': 70, 'GL_MAX_UNIFORM_BLOCK_SIZE': 65536, 'GL_MAX_VARYING_COMPONENTS': 0, 'GL_MAX_VARYING_VECTORS': 31, 'GL_MAX_VARYING_FLOATS': 0, 'GL_MAX_VERTEX_ATTRIBS': 16, 'GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS': 16, 'GL_MAX_VERTEX_UNIFORM_COMPONENTS': 4096, 'GL_MAX_VERTEX_UNIFORM_VECTORS': 1024, 'GL_MAX_VERTEX_OUTPUT_COMPONENTS': 128, 'GL_MAX_VERTEX_UNIFORM_BLOCKS': 14, 'GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET': 0, 'GL_MAX_VERTEX_ATTRIB_BINDINGS': 0, 'GL_VIEWPORT_BOUNDS_RANGE': (-32768, 32768), 'GL_VIEWPORT_SUBPIXEL_BITS': 0, 'GL_MAX_VIEWPORTS': 16 } """ includes: Dict[str, str] """Mapping used for include statements.""" mglo: Any """Internal representation for debug purposes only.""" extra: Any """Attribute for storing user defined objects""" fbo: Framebuffer """The active framebuffer. Set every time :py:meth:`Framebuffer.use()` is called.""" supports_labels: bool """True if this context supports object labels via OpenGL 4.3, KHR_debug, or EXT_debug_label.""" supports_debug_scopes: bool """True if this context supports debug scopes via OpenGL 4.3, KHR_debug, or EXT_debug_marker.""" def clear( self, red: float = 0.0, green: float = 0.0, blue: float = 0.0, alpha: float = 0.0, depth: float = 1.0, viewport: Optional[Union[Tuple[int, int], Tuple[int, int, int, int]]] = None, color: Optional[Tuple[float, float, float, float]] = None, ) -> None: """ Clear the bound framebuffer. If a `viewport` passed in, a scissor test will be used to clear the given viewport. This viewport take prescense over the framebuffers :py:attr:`~moderngl.Framebuffer.scissor`. Clearing can still be done with scissor if no viewport is passed in. This method also respects the :py:attr:`~moderngl.Framebuffer.color_mask` and :py:attr:`~moderngl.Framebuffer.depth_mask`. It can for example be used to only clear the depth or color buffer or specific components in the color buffer. If the `viewport` is a 2-tuple it will clear the ``(0, 0, width, height)`` where ``(width, height)`` is the 2-tuple. If the `viewport` is a 4-tuple it will clear the given viewport. Args: red (float): color component. green (float): color component. blue (float): color component. alpha (float): alpha component. depth (float): depth value. Keyword Args: viewport (tuple): The viewport. color (tuple): Optional rgba color tuple """ def enable_only(self, flags: int) -> None: """ Clears all existing flags applying new ones. Note that the enum values defined in moderngl are not the same as the ones in opengl. These are defined as bit flags so we can logical `or` them together. Available flags: - :py:data:`moderngl.NOTHING` - :py:data:`moderngl.BLEND` - :py:data:`moderngl.DEPTH_TEST` - :py:data:`moderngl.CULL_FACE` - :py:data:`moderngl.RASTERIZER_DISCARD` - :py:data:`moderngl.PROGRAM_POINT_SIZE` Examples:: # Disable all flags ctx.enable_only(moderngl.NOTHING) # Ensure only depth testing and face culling is enabled ctx.enable_only(moderngl.DEPTH_TEST | moderngl.CULL_FACE) Args: flags (EnableFlag): The flags to enable """ def enable(self, flags: int) -> None: """ Enable flags. Note that the enum values defined in moderngl are not the same as the ones in opengl. These are defined as bit flags so we can logical `or` them together. For valid flags, please see :py:meth:`enable_only`. Examples:: # Enable a single flag ctx.enable(moderngl.DEPTH_TEST) # Enable multiple flags ctx.enable(moderngl.DEPTH_TEST | moderngl.CULL_FACE | moderngl.BLEND) Args: flag (int): The flags to enable. """ def disable(self, flags: int) -> None: """ Disable flags. For valid flags, please see :py:meth:`enable_only`. Examples:: # Only disable depth testing ctx.disable(moderngl.DEPTH_TEST) # Disable depth testing and face culling ctx.disable(moderngl.DEPTH_TEST | moderngl.CULL_FACE) Args: flag (int): The flags to disable. """ def enable_direct(self, enum: int) -> None: """ Gives direct access to ``glEnable`` so unsupported capabilities in ModernGL can be enabled. Do not use this to set already supported context flags. Example:: # Enum value from the opengl registry GL_CONSERVATIVE_RASTERIZATION_NV = 0x9346 ctx.enable_direct(GL_CONSERVATIVE_RASTERIZATION_NV) """ def disable_direct(self, enum: int) -> None: """ Gives direct access to ``glDisable`` so unsupported capabilities in ModernGL can be disabled. Do not use this to set already supported context flags. Example:: # Enum value from the opengl registry GL_CONSERVATIVE_RASTERIZATION_NV = 0x9346 ctx.disable_direct(GL_CONSERVATIVE_RASTERIZATION_NV) """ def finish(self) -> None: """Wait for all drawing commands to finish.""" def copy_buffer( self, dst: Buffer, src: Buffer, size: int = -1, read_offset: int = 0, write_offset: int = 0, ) -> None: """ Copy buffer content. Args: dst (Buffer): The destination buffer. src (Buffer): The source buffer. size (int): The number of bytes to copy. Keyword Args: read_offset (int): The read offset. write_offset (int): The write offset. """ def copy_framebuffer(self, dst: Union[Framebuffer, Texture], src: Framebuffer) -> None: """ Copy framebuffer content. Use this method to: - blit framebuffers. - copy framebuffer content into a texture. - downsample framebuffers. (it will allow to read the framebuffer's content) - downsample a framebuffer directly to a texture. Args: dst (Framebuffer or Texture): Destination framebuffer or texture. src (Framebuffer): Source framebuffer. """ def detect_framebuffer(self, glo: Optional[int] = None) -> Framebuffer: """ Detect a framebuffer. This is already done when creating a context, but if the underlying window library for some changes the default framebuffer during the lifetime of the application this might be necessary. Args: glo (int): Framebuffer object. Returns: :py:class:`Framebuffer` object """ def memory_barrier(self, barriers: Optional[int] = None, by_region: Optional[bool] = False) -> None: """ Applying a memory barrier. The memory barrier is needed in particular to correctly change buffers or textures between each shader. If the same buffer is changed in two shaders, it can cause an effect like 'depth fighting' on a buffer or texture. The method should be used between :py:class:`Program` -s, between :py:class:`ComputeShader` -s, and between :py:class:`Program` -s and :py:class:`ComputeShader` -s. Keyword Args: barriers (int): Affected barriers, default moderngl.ALL_BARRIER_BITS. by_region (bool): Memory barrier mode by region. More read on https://registry.khronos.org/OpenGL-Refpages/gl4/html/glMemoryBarrier.xhtml """ def buffer(self, data: Any = None, reserve: int = 0, dynamic: bool = False) -> Buffer: """ Create a :py:class:`Buffer` object. Args: data (bytes): Content of the new buffer. Keyword Args: reserve (int): The number of bytes to reserve. dynamic (bool): Treat buffer as dynamic. Returns: :py:class:`Buffer` object """ def external_buffer(self, glo: int, size: int) -> Buffer: """ Create a :py:class:`Buffer` object. """ def external_texture( self, glo: int, size: Tuple[int, int], components: int, samples: int, dtype: str, ) -> Texture: """ Create a :py:class:`Texture` object from an existing OpenGL texture object. Args: glo (int): External OpenGL texture object. size (tuple): The width and height of the texture. components (int): The number of components 1, 2, 3 or 4. samples (int): The number of samples. Value 0 means no multisample format. dtype (str): Data type. """ def texture( self, size: Tuple[int, int], components: int, data: Optional[Any] = None, samples: int = 0, alignment: int = 1, dtype: str = "f1", internal_format: Optional[int] = None, ) -> Texture: """ Create a :py:class:`Texture` object. .. Warning:: Do not play with ``internal_format`` unless you know exactly you are doing. This is an override to support sRGB and compressed textures if needed. Args: size (tuple): The width and height of the texture. components (int): The number of components 1, 2, 3 or 4. data (bytes): Content of the texture. Keyword Args: samples (int): The number of samples. Value 0 means no multisample format. alignment (int): The byte alignment 1, 2, 4 or 8. dtype (str): Data type. internal_format (int): Override the internalformat of the texture (IF needed) Returns: :py:class:`Texture` object """ def texture_array( self, size: Tuple[int, int, int], components: int, data: Optional[Any] = None, alignment: int = 1, dtype: str = "f1", ) -> TextureArray: """ Create a :py:class:`TextureArray` object. Args: size (tuple): The ``(width, height, layers)`` of the texture. components (int): The number of components 1, 2, 3 or 4. data (bytes): Content of the texture. The size must be ``(width, height * layers)`` so each layer is stacked vertically. Keyword Args: alignment (int): The byte alignment 1, 2, 4 or 8. dtype (str): Data type. Returns: :py:class:`Texture3D` object """ def texture3d( self, size: Tuple[int, int, int], components: int, data: Optional[Any] = None, alignment: int = 1, dtype: str = "f1", ) -> Texture3D: """ Create a :py:class:`Texture3D` object. Args: size (tuple): The width, height and depth of the texture. components (int): The number of components 1, 2, 3 or 4. data (bytes): Content of the texture. Keyword Args: alignment (int): The byte alignment 1, 2, 4 or 8. dtype (str): Data type. Returns: :py:class:`Texture3D` object """ def texture_cube( self, size: Tuple[int, int], components: int, data: Optional[Any] = None, alignment: int = 1, dtype: str = "f1", internal_format: Optional[int] = None, ) -> TextureCube: """ Create a :py:class:`TextureCube` object. Note that the width and height of the cubemap must be the same unless you are using a non-standard extension. Args: size (tuple): The width, height of the texture. Each side of the cube will have this size. components (int): The number of components 1, 2, 3 or 4. data (bytes): Content of the texture. The data should be have the following ordering: positive_x, negative_x, positive_y, negative_y, positive_z, negative_z Keyword Args: alignment (int): The byte alignment 1, 2, 4 or 8. dtype (str): Data type. internal_format (int): Override the internalformat of the texture (IF needed) Returns: :py:class:`TextureCube` object """ def depth_texture( self, size: Tuple[int, int], data: Optional[Any] = None, samples: int = 0, alignment: int = 4, ) -> Texture: """ Create a :py:class:`Texture` object. Args: size (tuple): The width and height of the texture. data (bytes): Content of the texture. Keyword Args: samples (int): The number of samples. Value 0 means no multisample format. alignment (int): The byte alignment 1, 2, 4 or 8. Returns: :py:class:`Texture` object """ def depth_texture_cube( self, size: Tuple[int, int], data: Optional[Any] = None, alignment: int = 4, ) -> TextureCube: """ Create a :py:class:`TextureCube` object Args: size (tuple): The width and height of the texture. data (bytes): Content of the texture. Keyword Args: alignment (int): The byte alignment 1, 2, 4 or 8. Returns: :py:class:`TextureCube` object """ def vertex_array(self, *args, **kwargs) -> "VertexArray": """ Create a :py:class:`VertexArray` object. The vertex array describes how buffers are read by a shader program. We need to supply buffer formats and attributes names. The attribute names are defined by the user in the glsl code and can be anything. Examples:: # Empty vertext array (no attribute input) vao = ctx.vertex_array(program) # Simple version with a single buffer vao = ctx.vertex_array(program, buffer, 'in_position', 'in_normal') vao = ctx.vertex_array(program, buffer, 'in_position', 'in_normal', index_buffer=ibo) # Multiple buffers vao = ctx.vertex_array(program, [ (buffer1, '3f', 'in_position'), (buffer2, '3f', 'in_normal'), ]) vao = ctx.vertex_array(program, [ (buffer1, '3f', 'in_position'), (buffer2, '3f', 'in_normal'), ], index_buffer=ibo, index_element_size=2, # 16 bit / 'u2' index buffer ) This method also supports arguments for :py:meth:`Context.simple_vertex_array`. Args: program (Program): The program used when rendering content (list): A list of (buffer, format, attributes). See :ref:`buffer-format-label`. Keyword Args: index_buffer (Buffer): An index buffer (optional) index_element_size (int): byte size of each index element, 1, 2 or 4. skip_errors (bool): Ignore errors during creation mode (int): The default draw mode (for example: ``TRIANGLES``) Returns: :py:class:`VertexArray` object """ def _vertex_array( self, program: Program, content: Any, index_buffer: Optional[Buffer] = None, index_element_size: int = 4, skip_errors: bool = False, mode: Optional[int] = None, ) -> "VertexArray": """ Create a :py:class:`VertexArray` object. Args: program (Program): The program used when rendering. content (list): A list of (buffer, format, attributes). See :ref:`buffer-format-label`. index_buffer (Buffer): An index buffer. Keyword Args: index_element_size (int): byte size of each index element, 1, 2 or 4. skip_errors (bool): Ignore skip_errors varyings. mode (int): The default draw mode (for example: ``TRIANGLES``) Returns: :py:class:`VertexArray` object """ def simple_vertex_array( self, program: Program, buffer: Buffer, *attributes: str, index_buffer: Optional[Buffer] = None, index_element_size: int = 4, mode: Optional[int] = None, ) -> "VertexArray": """ Create a :py:class:`VertexArray` object. .. Warning:: This method is deprecated and may be removed in the future. Use :py:meth:`Context.vertex_array` instead. It also supports the argument format this method describes. Args: program (Program): The program used when rendering. buffer (Buffer): The buffer. attributes (list): A list of attribute names. Keyword Args: index_element_size (int): byte size of each index element, 1, 2 or 4. index_buffer (Buffer): An index buffer. mode (int): The default draw mode (for example: ``TRIANGLES``) Returns: :py:class:`VertexArray` object """ def program( self, vertex_shader: str | bytes | ConvertibleToShaderSource, fragment_shader: str | bytes | ConvertibleToShaderSource | None = None, geometry_shader: str | bytes | ConvertibleToShaderSource | None = None, tess_control_shader: str | bytes | ConvertibleToShaderSource | None = None, tess_evaluation_shader: str | bytes | ConvertibleToShaderSource | None = None, varyings: Tuple[str, ...] = (), fragment_outputs: Optional[Dict[str, int]] = None, varyings_capture_mode: str = "interleaved", ) -> Program: """ Create a :py:class:`Program` object. The ``varyings`` are only used when a transform program is created to specify the names of the output varyings to capture in the output buffer. ``fragment_outputs`` can be used to programmatically map named fragment shader outputs to a framebuffer attachment numbers. This can also be done by using ``layout(location=N)`` in the fragment shader. Args: vertex_shader (str): The vertex shader source. fragment_shader (str): The fragment shader source. geometry_shader (str): The geometry shader source. tess_control_shader (str): The tessellation control shader source. tess_evaluation_shader (str): The tessellation evaluation shader source. varyings (list): A list of varyings. fragment_outputs (dict): A dictionary of fragment outputs. Returns: :py:class:`Program` object """ def query( self, samples: bool = False, any_samples: bool = False, time: bool = False, primitives: bool = False, ) -> "Query": """ Create a :py:class:`Query` object. Keyword Args: samples (bool): Query ``GL_SAMPLES_PASSED`` or not. any_samples (bool): Query ``GL_ANY_SAMPLES_PASSED`` or not. time (bool): Query ``GL_TIME_ELAPSED`` or not. primitives (bool): Query ``GL_PRIMITIVES_GENERATED`` or not. """ def scope( self, framebuffer: Optional[Framebuffer] = None, enable_only: Optional[int] = None, textures: Tuple[Tuple[Texture, int], ...] = (), uniform_buffers: Tuple[Tuple[Buffer, int], ...] = (), storage_buffers: Tuple[Tuple[Buffer, int], ...] = (), samplers: Tuple[Tuple["Sampler", int], ...] = (), enable: Optional[int] = None, ) -> "Scope": """ Create a :py:class:`Scope` object. Args: framebuffer (Framebuffer): The framebuffer to use when entering. enable_only (int): The enable_only flags to set when entering. Keyword Args: textures (tuple): List of (texture, binding) tuples. uniform_buffers (tuple): Tuple of (buffer, binding) tuples. storage_buffers (tuple): Tuple of (buffer, binding) tuples. samplers (tuple): Tuple of sampler bindings enable (int): Flags to enable for this vao such as depth testing and blending """ def simple_framebuffer( self, size: Tuple[int, int], components: int = 4, samples: int = 0, dtype: str = "f1", ) -> Framebuffer: """ Creates a :py:class:`Framebuffer` with a single color attachment \ and depth buffer using :py:class:`moderngl.Renderbuffer` attachments. Args: size (tuple): The width and height of the renderbuffer. components (int): The number of components 1, 2, 3 or 4. Keyword Args: samples (int): The number of samples. Value 0 means no multisample format. dtype (str): Data type. Returns: :py:class:`Framebuffer` object """ def framebuffer( self, color_attachments: Any = (), depth_attachment: Optional[Union[Texture, "Renderbuffer"]] = None, ) -> Framebuffer: """ A :py:class:`Framebuffer` is a collection of buffers that can be \ used as the destination for rendering. The buffers for Framebuffer \ objects reference images from either Textures or Renderbuffers. Args: color_attachments (list): A list of :py:class:`Texture` or :py:class:`Renderbuffer` objects. depth_attachment (Renderbuffer or Texture): The depth attachment. Returns: :py:class:`Framebuffer` object """ def empty_framebuffer( self, size: Tuple[int, int], layers: Optional[int] = 0, samples: Optional[int] = 0, ) -> Framebuffer: """ Empty Framebuffer """ def renderbuffer( self, size: Tuple[int, int], components: int = 4, samples: int = 0, dtype: str = "f1", ) -> "Renderbuffer": """ :py:class:`Renderbuffer` objects are OpenGL objects that contain images. \ They are created and used specifically with :py:class:`Framebuffer` objects. Args: size (tuple): The width and height of the renderbuffer. components (int): The number of components 1, 2, 3 or 4. Keyword Args: samples (int): The number of samples. Value 0 means no multisample format. dtype (str): Data type. Returns: :py:class:`Renderbuffer` object """ def depth_renderbuffer(self, size: Tuple[int, int], samples: int = 0) -> "Renderbuffer": """ :py:class:`Renderbuffer` objects are OpenGL objects that contain images. \ They are created and used specifically with :py:class:`Framebuffer` objects. Args: size (tuple): The width and height of the renderbuffer. Keyword Args: samples (int): The number of samples. Value 0 means no multisample format. Returns: :py:class:`Renderbuffer` object """ def compute_shader(self, source: str | bytes | ConvertibleToShaderSource) -> "ComputeShader": """ A :py:class:`ComputeShader` is a Shader Stage that is used entirely \ for computing arbitrary information. While it can do rendering, it \ is generally used for tasks not directly related to drawing. Args: source (str): The source of the compute shader. Returns: :py:class:`ComputeShader` object """ def sampler( self, repeat_x: bool = True, repeat_y: bool = True, repeat_z: bool = True, filter: Optional[Tuple[int, int]] = None, anisotropy: float = 1.0, compare_func: str = "?", border_color: Optional[Tuple[float, float, float, float]] = None, min_lod: float = -1000.0, max_lod: float = 1000.0, texture: Optional[Texture] = None, ) -> "Sampler": """ Create a :py:class:`Sampler` object. Keyword Arguments: repeat_x (bool): Repeat texture on x repeat_y (bool): Repeat texture on y repeat_z (bool): Repeat texture on z filter (tuple): The min and max filter anisotropy (float): Number of samples for anisotropic filtering. Any value greater than 1.0 counts as a use of anisotropic filtering compare_func: Compare function for depth textures border_color (tuple): The (r, g, b, a) color for the texture border. When this value is set the ``repeat_`` values are overridden setting the texture wrap to return the border color when outside ``[0, 1]`` range. min_lod (float): Minimum level-of-detail parameter (Default ``-1000.0``). This floating-point value limits the selection of highest resolution mipmap (lowest mipmap level) max_lod (float): Minimum level-of-detail parameter (Default ``1000.0``). This floating-point value limits the selection of the lowest resolution mipmap (highest mipmap level) texture (Texture): The texture for this sampler """ def clear_samplers(self, start: int = 0, end: int = -1) -> None: """ Unbinds samplers from texture units. Sampler bindings do clear automatically between every frame, but lingering samplers can still be a source of weird bugs during the frame rendering. This methods provides a fairly brute force and efficient way to ensure texture units are clear. Keyword Arguments: start (int): The texture unit index to start the clearing samplers stop (int): The texture unit index to stop clearing samplers Example:: # Clear texture unit 0, 1, 2, 3, 4 ctx.clear_samplers(start=0, end=5) # Clear texture unit 4, 5, 6, 7 ctx.clear_samplers(start=4, end=8) """ def core_profile_check(self) -> None: """ Core profile check. FOR DEBUG PURPOSES ONLY """ def __enter__(self): """ Enters the context. This should ideally be used with the ``with`` statement:: with other_context as ctx: # Do something in this context When exiting the context the previously bound context is activated again. .. Warning:: Context switching can be risky unless you know what you are doing. Use with care. """ def __exit__(self, exc_type, exc_val, exc_tb): """ Exit the context. See :py:meth:`Context.__enter__` """ def release(self) -> None: """ Release the ModernGL context. If the context is not standalone the standard backends in ``glcontext`` will not do anything because the context was not created by moderngl. Standalone contexts can normally be released. """ def clear_errors(self) -> None: """ Clears all outstanding OpenGL errors, such that calling :py:meth:`Context.error` immediately afterward will return ``"GL_NO_ERROR"``. This method is intended for applications that use additional OpenGL libraries to access this context. It should be used immediately before calling any such libraries, so as not to impact their own error-reporting. Because the same error flag is shared by all OpenGL functions, an error originating in ``moderngl`` may inadvertently be reported by another library when it calls ``glGetError``. This complicates debugging. .. code-block:: python from OpenGL import GL ctx = moderngl.create_context() # 1 is not a valid value for glEnable, so this will set GL_INVALID_ENUM. ctx.enable_direct(1) # But if not for this method... ctx.clear_errors() # ...then this unrelated PyOpenGL call will raise an exception # for the error that was actually set by moderngl. # It will look like this method caused the error, despite being used correctly! GL.glHint(GL.GL_LINE_SMOOTH_HINT, GL.GL_NICEST) :: tip .. If your application only uses OpenGL through moderngl, then you most likely won't need this method. """ def debug_scope( self, label: str, group_id: Optional[int] = None, source: str = "application" ) -> AbstractContextManager: """ Applies a name to the group of OpenGL API calls that occur within the returned context manager's scope, which can be useful in third-party tools like RenderDoc that highlight these scopes. Equivalent to ``glPushDebugGroup`` when entering this scope and ``glPopDebugGroup`` when exiting. Uses standard OpenGL debug groups if available, falling back to GL_EXT_debug_marker if necessary. If no debug functionality is available in the context, this method's scope has no effect. If an exception is raised, the debug group will be popped unless the exception originates from pushing the group. Args: label (str): Should be any name that makes sense to you, e.g. a function name or a summary of the operation group_id (int): A numeric ID for the scope. Can be any number; if not provided, autogenerated from the message's hash. source (str): "application" or "external"; use "external" if using moderngl as part of a library. .. tip:: This function is unrelated to :py:class:`moderngl.Scope`. """ def create_context( require: Optional[int] = None, standalone: bool = False, share: bool = False, **settings: Dict[str, Any], ) -> Context: """ Create a ModernGL context by loading OpenGL functions from an existing OpenGL context. \ An OpenGL context must exists. Example:: # Accept the current context version ctx = moderngl.create_context() # Require at least OpenGL 4.3 ctx = moderngl.create_context(require=430) # Create a headless context requiring OpenGL 4.3 ctx = moderngl.create_context(require=430, standalone=True) Keyword Arguments: require (int): OpenGL version code (default: 330) standalone (bool): Headless flag share (bool): Attempt to create a shared context **settings: Other backend specific settings Returns: :py:class:`Context` object """ def create_standalone_context( require: Optional[int] = None, share: bool = False, **settings: Dict[str, Any], ) -> "Context": """ Create a standalone/headless ModernGL context. The preferred way of making a context is through :py:func:`moderngl.create_context`. Example:: # Create a context with highest possible supported version ctx = moderngl.create_context() # Require at least OpenGL 4.3 ctx = moderngl.create_context(require=430) Keyword Arguments: require (int): OpenGL version code. share (bool): Attempt to create a shared context settings: keyword config values for the context backend Returns: :py:class:`Context` object """ def init_context(loader=None) -> None: """ Initialize the default moderngl context """ def get_context() -> Context: """ Return the previously created context """ class Framebuffer: """ A :py:class:`Framebuffer` is a collection of buffers that can be used as the destination for rendering. The buffers for Framebuffer objects reference images from either Textures or Renderbuffers. Create a :py:class:`Framebuffer` using :py:meth:`Context.framebuffer`. """ viewport: Tuple[int, int, int, int] """Get or set the viewport of the framebuffer.""" scissor: Tuple[int, int, int, int] """ Get or set the scissor box of the framebuffer. When scissor testing is enabled fragments outside the defined scissor box will be discarded. This applies to rendered geometry or :py:meth:`Framebuffer.clear`. Setting is value enables scissor testing in the framebuffer. Setting the scissor to ``None`` disables scissor testing and reverts the scissor box to match the framebuffer size. Example:: # Enable scissor testing >>> ctx.scissor = 100, 100, 200, 100 # Disable scissor testing >>> ctx.scissor = None """ color_mask: Tuple[bool, bool, bool, bool] """ The color mask of the framebuffer. Color masking controls what components in color attachments will be affected by fragment write operations. This includes rendering geometry and clearing the framebuffer. Default value: ``(True, True, True, True)``. Examples:: # Block writing to all color components (rgba) in color attachments fbo.color_mask = False, False, False, False # Re-enable writing to color attachments fbo.color_mask = True, True, True, True # Block fragment writes to alpha channel fbo.color_mask = True, True, True, False """ depth_mask: bool """ The depth mask of the framebuffer. Depth mask enables or disables write operations to the depth buffer. This also applies when clearing the framebuffer. If depth testing is enabled fragments will still be culled, but the depth buffer will not be updated with new values. This is a very useful tool in many rendering techniques. Default value: ``True`` """ width: int """ The width of the framebuffer. Framebuffers created by a window will only report its initial size. It's better get size information from the window itself. """ height: int """ The height of the framebuffer. Framebuffers created by a window will only report its initial size. It's better get size information from the window itself. """ size: Tuple[int, int] """ Tuple[int, int]: The size of the framebuffer. Framebuffers created by a window will only report its initial size. It's better get size information from the window itself. """ samples: int """The samples of the framebuffer.""" bits: Dict[str, str] """The bits of the framebuffer.""" color_attachments: Tuple[Union[Texture, Renderbuffer], ...] """The color attachments of the framebuffer.""" depth_attachment: Union[Texture, Renderbuffer] """The depth attachment of the framebuffer.""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def clear( self, red: float = 0.0, green: float = 0.0, blue: float = 0.0, alpha: float = 0.0, depth: float = 1.0, viewport: Optional[Union[Tuple[int, int], Tuple[int, int, int, int]]] = None, color: Optional[Tuple[float, float, float, float]] = None, ) -> None: """ Clear the framebuffer. If a `viewport` passed in, a scissor test will be used to clear the given viewport. This viewport take presence over the framebuffers :py:attr:`~moderngl.Framebuffer.scissor`. Clearing can still be done with scissor if no viewport is passed in. This method also respects the :py:attr:`~moderngl.Framebuffer.color_mask` and :py:attr:`~moderngl.Framebuffer.depth_mask`. It can for example be used to only clear the depth or color buffer or specific components in the color buffer. If the `viewport` is a 2-tuple it will clear the ``(0, 0, width, height)`` where ``(width, height)`` is the 2-tuple. If the `viewport` is a 4-tuple it will clear the given viewport. Args: red (float): color component. green (float): color component. blue (float): color component. alpha (float): alpha component. depth (float): depth value. Keyword Args: viewport (tuple): The viewport. color (tuple): Optional tuple replacing the red, green, blue and alpha arguments """ def use(self) -> None: """Bind the framebuffer. Sets the target for rendering commands.""" def read( self, viewport: Optional[Union[Tuple[int, int], Tuple[int, int, int, int]]] = None, components: int = 3, attachment: int = 0, alignment: int = 1, dtype: str = "f1", clamp: bool = False, ) -> bytes: """ Read the content of the framebuffer. .. code:: python # Read the first color attachment's RGBA data data = fbo.read(components=4) # Read the second color attachment's RGB data data = fbo.read(attachment=1) # Read the depth attachment data = fbo.read(attachment=-1) # Read the lower left 10 x 10 pixels from the first color attachment data = fbo.read(viewport=(0, 0, 10, 10)) Args: viewport (tuple): The viewport. components (int): The number of components to read. Keyword Args: attachment (int): The color attachment number. -1 for the depth attachment alignment (int): The byte alignment of the pixels. dtype (str): Data type. clamp (bool): Clamps floating point values to ``[0.0, 1.0]`` Returns: bytes """ def read_into( self, buffer: Any, viewport: Optional[Union[Tuple[int, int], Tuple[int, int, int, int]]] = None, components: int = 3, attachment: int = 0, alignment: int = 1, dtype: str = "f1", write_offset: int = 0, ) -> None: """ Read the content of the framebuffer into a buffer. Args: buffer (bytearray): The buffer that will receive the pixels. viewport (tuple): The viewport. components (int): The number of components to read. Keyword Args: attachment (int): The color attachment. alignment (int): The byte alignment of the pixels. dtype (str): Data type. write_offset (int): The write offset. """ def release(self) -> None: """Release the ModernGL object.""" class Program: """ A Program object represents fully processed executable code in the OpenGL Shading Language, \ for one or more Shader stages. In ModernGL, a Program object can be assigned to :py:class:`VertexArray` objects. The VertexArray object is capable of binding the Program object once the :py:meth:`VertexArray.render` or :py:meth:`VertexArray.transform` is called. Program objects has no method called ``use()``, VertexArrays encapsulate this mechanism. A Program object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.program` to create one. Uniform buffers can be bound using :py:meth:`Buffer.bind_to_uniform_block` or can be set individually. For more complex binding yielding higher performance consider using :py:class:`moderngl.Scope`. """ def __getitem__(self, key: str) -> Union[Uniform, UniformBlock, Attribute, Varying]: """ Get a member such as uniforms, uniform blocks, attributes and varyings by name. .. code-block:: python # Get a uniform uniform = program['color'] # Uniform values can be set on the returned object # or the `__setitem__` shortcut can be used. program['color'].value = 1.0, 1.0, 1.0, 1.0 # Still when writing byte data we need to use the `write()` method program['color'].write(buffer) """ def __setitem__(self, key: str, value: Any) -> None: """ Set a value of uniform or uniform block. .. code-block:: python # Set a vec4 uniform uniform['color'] = 1.0, 1.0, 1.0, 1.0 # Optionally we can store references to a member and set the value directly uniform = program['color'] uniform.value = 1.0, 0.0, 0.0, 0.0 uniform = program['cameraMatrix'] uniform.write(camera_matrix) """ def __iter__(self) -> Generator[str, None, None]: """ Yields the internal members names as strings. This includes all members such as uniforms, attributes etc. Example:: # Print member information for name in program: member = program[name] print(name, type(member), member) Output:: vert vert_color gl_InstanceID rotation scale We can filter on member type if needed:: for name in prog: member = prog[name] if isinstance(member, moderngl.Uniform): print('Uniform', name, member) or a less verbose version using dict comprehensions:: uniforms = {name: self.prog[name] for name in self.prog if isinstance(self.prog[name], moderngl.Uniform)} print(uniforms) Output:: {'rotation': , 'scale': } """ is_transform: bool """If this is a tranform program (no fragment shader).""" geometry_input: int """ The geometry input primitive. The GeometryShader's input primitive if the GeometryShader exists. The geometry input primitive will be used for validation. (from ``layout(input_primitive) in;``) This can only be ``POINTS``, ``LINES``, ``LINES_ADJACENCY``, ``TRIANGLES``, ``TRIANGLE_ADJACENCY``. """ geometry_output: int """ The geometry output primitive. The GeometryShader's output primitive if the GeometryShader exists. This can only be ``POINTS``, ``LINE_STRIP`` and ``TRIANGLE_STRIP`` (from ``layout(output_primitive, max_vertices = vert_count) out;``) """ geometry_vertices: int """ The maximum number of vertices that. the geometry shader will output. (from ``layout(output_primitive, max_vertices = vert_count) out;``) """ mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def get(self, key: str, default: Any) -> Union[Uniform, UniformBlock, Attribute, Varying]: """ Returns a Uniform, UniformBlock, Attribute or Varying. Args: default: This is the value to be returned in case key does not exist. Returns: :py:class:`Uniform`, :py:class:`UniformBlock`, :py:class:`Attribute` or :py:class:`Varying` """ def release(self) -> None: """Release the ModernGL object.""" def detect_format( program: Program, attributes: Any, mode: str = "mgl", ) -> str: """ Detect format for vertex attributes. The format returned does not contain padding. Args: program (Program): The program. attributes (list): A list of attribute names. Returns: str """ class Query: """This class represents a Query object.""" crender: Optional["ConditionalRender"] """Can be used in a ``with`` statement.""" samples: int """The number of samples passed.""" primitives: int """The number of primitives generated.""" elapsed: int """The time elapsed in nanoseconds.""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" def __enter__(self): ... def __exit__(self, *args: Tuple[Any]): ... class Renderbuffer: """ Renderbuffer objects are OpenGL objects that contain images. They are created and used specifically with :py:class:`Framebuffer` objects. They are optimized for use as render targets, while :py:class:`Texture` objects may not be, and are the logical choice when you do not need to sample from the produced image. If you need to resample, use Textures instead. Renderbuffer objects also natively accommodate multisampling. A Renderbuffer object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.renderbuffer` or :py:meth:`Context.depth_renderbuffer` to create one. """ width: int """The width of the renderbuffer.""" height: int """The height of the renderbuffer.""" size: tuple """The size of the renderbuffer.""" samples: int """The samples of the renderbuffer.""" components: int """The components of the renderbuffer.""" depth: bool """Is the renderbuffer a depth renderbuffer?.""" dtype: str """Data type.""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def release(self) -> None: """Release the ModernGL object.""" class Sampler: """ A Sampler Object is an OpenGL Object that stores the sampling parameters for a Texture access inside of a shader. When a sampler object is bound to a texture image unit, the internal sampling parameters for a texture bound to the same image unit are all ignored. Instead, the sampling parameters are taken from this sampler object. Unlike textures, a samplers state can also be changed freely be at any time without the sampler object being bound/in use. Samplers are bound to a texture unit and not a texture itself. Be careful with leaving samplers bound to texture units as it can cause texture incompleteness issues (the texture bind is ignored). Sampler bindings do clear automatically between every frame so a texture unit need at least one bind/use per frame. """ repeat_x: bool """ bool: The x repeat flag for the sampler (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) sampler.repeat_x = True # Disable texture repeat (GL_CLAMP_TO_EDGE) sampler.repeat_x = False """ repeat_y: bool """ bool: The y repeat flag for the sampler (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) sampler.repeat_y = True # Disable texture repeat (GL_CLAMP_TO_EDGE) sampler.repeat_y = False """ repeat_z: bool """ bool: The z repeat flag for the sampler (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) sampler.repeat_z = True # Disable texture repeat (GL_CLAMP_TO_EDGE) sampler.repeat_z = False """ filter: Tuple[int, int] """ tuple: The minification and magnification filter for the sampler. (Default ``(moderngl.LINEAR. moderngl.LINEAR)``) Example:: sampler.filter == (moderngl.NEAREST, moderngl.NEAREST) sampler.filter == (moderngl.LINEAR_MIPMAP_LINEAR, moderngl.LINEAR) sampler.filter == (moderngl.NEAREST_MIPMAP_LINEAR, moderngl.NEAREST) sampler.filter == (moderngl.LINEAR_MIPMAP_NEAREST, moderngl.NEAREST) """ compare_func: str """ tuple: The compare function for a depth textures (Default ``'?'``). By default samplers don't have depth comparison mode enabled. This means that depth texture values can be read as a ``sampler2D`` using ``texture()`` in a GLSL shader by default. When setting this property to a valid compare mode, ``GL_TEXTURE_COMPARE_MODE`` is set to ``GL_COMPARE_REF_TO_TEXTURE`` so that texture lookup functions in GLSL will return a depth comparison result instead of the actual depth value. Accepted compare functions:: .compare_func = '' # Disale depth comparison completely sampler.compare_func = '<=' # GL_LEQUAL sampler.compare_func = '<' # GL_LESS sampler.compare_func = '>=' # GL_GEQUAL sampler.compare_func = '>' # GL_GREATER sampler.compare_func = '==' # GL_EQUAL sampler.compare_func = '!=' # GL_NOTEQUAL sampler.compare_func = '0' # GL_NEVER sampler.compare_func = '1' # GL_ALWAYS """ anisotropy: float """ Number of samples for anisotropic filtering (Default ``1.0``). The value will be clamped in range ``1.0`` and ``ctx.max_anisotropy``. Any value greater than 1.0 counts as a use of anisotropic filtering:: # Disable anisotropic filtering sampler.anisotropy = 1.0 # Enable anisotropic filtering suggesting 16 samples as a maximum sampler.anisotropy = 16.0 """ border_color: Tuple[float, float, float, float] """ tuple: The (r, g, b, a) color for the texture border (Default ``(0.0, 0.0, 0.0, 0.0)``). When setting this value the ``repeat_`` values are overridden setting the texture wrap to return the border color when outside [0, 1] range. Example:: # Red border color sampler.border_color = (1.0, 0.0, 0.0, 0.0) """ min_lod: float """ Minimum level-of-detail parameter (Default ``-1000.0``). This floating-point value limits the selection of highest resolution mipmap (lowest mipmap level) """ max_lod: float """ Minimum level-of-detail parameter (Default ``1000.0``). This floating-point value limits the selection of the lowest resolution mipmap (highest mipmap level) """ texture: Any """texture""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def use(self, location: int = 0) -> None: """ Bind the sampler to a texture unit. Args: location (int): The texture unit """ def clear(self, location: int = 0) -> None: """ Clear the sampler binding on a texture unit. Args: location (int): The texture unit """ def release(self) -> None: """Release/destroy the ModernGL object.""" def assign(self, index: int) -> Tuple["Sampler", int]: """ Helper method for assigning samplers to scopes. Example:: s1 = ctx.sampler(...) s2 = ctx.sampler(...) ctx.scope(samplers=(s1.assign(0), s1.assign(1)), ...) Returns: (self, index) tuple """ class Scope: """ This class represents a Scope object. Responsibilities on enter: - Set the enable flags. - Bind the framebuffer. - Assigning textures to texture locations. - Assigning buffers to uniform buffers. - Assigning buffers to shader storage buffers. Responsibilities on exit: - Restore the enable flags. - Restore the framebuffer. """ def __enter__(self): ... def __exit__(self, *args: Tuple[Any]): ... def release(self) -> None: """Destroy the Scope object.""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" class Texture3D: """ A Texture is an OpenGL object that contains one or more images that all have the same image format. A texture can be used in two ways. It can be the source of a texture access from a Shader, or it can be used as a render target. A Texture3D object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.texture3d` to create one. """ repeat_x: bool """ bool: The x repeat flag for the texture (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) texture.repeat_x = True # Disable texture repeat (GL_CLAMP_TO_EDGE) texture.repeat_x = False """ repeat_y: bool """ bool: The y repeat flag for the texture (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) texture.repeat_y = True # Disable texture repeat (GL_CLAMP_TO_EDGE) texture.repeat_y = False """ repeat_z: bool """ bool: The z repeat flag for the texture (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) texture.repeat_z = True # Disable texture repeat (GL_CLAMP_TO_EDGE) texture.repeat_z = False """ filter: Tuple[int, int] """The filter of the texture.""" swizzle: str """ str: The swizzle mask of the texture (Default ``'RGBA'``). The swizzle mask change/reorder the ``vec4`` value returned by the ``texture()`` function in a GLSL shaders. This is represented by a 4 character string were each character can be:: 'R' GL_RED 'G' GL_GREEN 'B' GL_BLUE 'A' GL_ALPHA '0' GL_ZERO '1' GL_ONE Example:: # Alpha channel will always return 1.0 texture.swizzle = 'RGB1' # Only return the red component. The rest is masked to 0.0 texture.swizzle = 'R000' # Reverse the components texture.swizzle = 'ABGR' """ width: int """The width of the texture.""" height: int """The height of the texture.""" depth: int """The depth of the texture.""" size: tuple """The size of the texture.""" components: int """The number of components of the texture.""" dtype: str """Data type.""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def read(self, alignment: int = 1) -> bytes: """ Read the pixel data as bytes into system memory. Keyword Args: alignment (int): The byte alignment of the pixels. Returns: bytes """ def read_into( self, buffer: Any, alignment: int = 1, write_offset: int = 0, ) -> None: """ Read the content of the texture into a bytearray or :py:class:`~moderngl.Buffer`. The advantage of reading into a :py:class:`~moderngl.Buffer` is that pixel data does not need to travel all the way to system memory:: # Reading pixel data into a bytearray data = bytearray(8) texture = ctx.texture3d((2, 2, 2), 1) texture.read_into(data) # Reading pixel data into a buffer data = ctx.buffer(reserve=8) texture = ctx.texture3d((2, 2, 2), 1) texture.read_into(data) Args: buffer (Union[bytearray, Buffer]): The buffer that will receive the pixels. Keyword Args: alignment (int): The byte alignment of the pixels. write_offset (int): The write offset. """ def write( self, data: Any, viewport: Optional[Union[Tuple[int, int, int], Tuple[int, int, int, int, int, int]]] = None, alignment: int = 1, ) -> None: r""" Update the content of the texture from byte data or a moderngl :py:class:`~moderngl.Buffer`. Examples:: # Write data from a moderngl Buffer data = ctx.buffer(reserve=8) texture = ctx.texture3d((2, 2, 2), 1) texture.write(data) # Write data from bytes data = b'\xff\xff\xff\xff\xff\xff\xff\xff' texture = ctx.texture3d((2, 2), 1) texture.write(data) Args: data (bytes): The pixel data. viewport (tuple): The viewport. Keyword Args: alignment (int): The byte alignment of the pixels. """ def build_mipmaps(self, base: int = 0, max_level: int = 1000) -> None: """ Generate mipmaps. This also changes the texture filter to ``LINEAR_MIPMAP_LINEAR, LINEAR`` (Will be removed in ``6.x``) Keyword Args: base (int): The base level max_level (int): The maximum levels to generate """ def use(self, location: int = 0) -> None: """ Bind the texture to a texture unit. The location is the texture unit we want to bind the texture. This should correspond with the value of the ``sampler3D`` uniform in the shader because samplers read from the texture unit we assign to them:: # Define what texture unit our two sampler3D uniforms should represent program['texture_a'] = 0 program['texture_b'] = 1 # Bind textures to the texture units first_texture.use(location=0) second_texture.use(location=1) Args: location (int): The texture location/unit. """ def bind_to_image( self, unit: int, read: bool = True, write: bool = True, level: int = 0, format: int = 0, ) -> None: """ Bind a texture to an image unit (OpenGL 4.2 required). This is used to bind textures to image units for shaders. The idea with image load/store is that the user can bind one of the images in a Texture to a number of image binding points (which are separate from texture image units). Shaders can read information from these images and write information to them, in ways that they cannot with textures. It's important to specify the right access type for the image. This can be set with the ``read`` and ``write`` arguments. Allowed combinations are: - **Read-only**: ``read=True`` and ``write=False`` - **Write-only**: ``read=False`` and ``write=True`` - **Read-write**: ``read=True`` and ``write=True`` ``format`` specifies the format that is to be used when performing formatted stores into the image from shaders. ``format`` must be compatible with the texture's internal format. **By default the format of the texture is passed in. The format parameter is only needed when overriding this behavior.** Note that we bind the 3D textured layered making the entire texture readable and writable. It is possible to bind a specific 2D section in the future. More information: - https://www.khronos.org/opengl/wiki/Image_Load_Store - https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBindImageTexture.xhtml Args: unit (int): Specifies the index of the image unit to which to bind the texture texture (:py:class:`moderngl.Texture`): The texture to bind Keyword Args: read (bool): Allows the shader to read the image (default: ``True``) write (bool): Allows the shader to write to the image (default: ``True``) level (int): Level of the texture to bind (default: ``0``). format (int): (optional) The OpenGL enum value representing the format (defaults to the texture's format) """ def get_handle(self, resident: bool = True) -> int: """ Handle for Bindless Textures. Once a handle is created its parameters cannot be changed. Attempting to do so will have no effect. (filter, wrap etc). There is no way to undo this immutability. Handles cannot be used by shaders until they are resident. This method can be called multiple times to move a texture in and out of residency:: >> texture.get_handle(resident=False) 4294969856 >> texture.get_handle(resident=True) 4294969856 Ths same handle is returned if the handle already exists. .. note:: Limitations from the OpenGL wiki The amount of storage available for resident images/textures may be less than the total storage for textures that is available. As such, you should attempt to minimize the time a texture spends being resident. Do not attempt to take steps like making textures resident/unresident every frame or something. But if you are finished using a texture for some time, make it unresident. Keyword Args: resident (bool): Make the texture resident. """ def release(self) -> None: """Release the ModernGL object.""" class TextureArray: """ An Array Texture is a Texture where each mipmap level contains an array of images of the same size. Array textures may have Mipmaps, but each mipmap in the texture has the same number of levels. A TextureArray object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.texture_array` to create one. """ repeat_x: bool """ bool: The x repeat flag for the texture (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) texture.repeat_x = True # Disable texture repeat (GL_CLAMP_TO_EDGE) texture.repeat_x = False """ repeat_y: bool """ bool: The y repeat flag for the texture (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) texture.repeat_y = True # Disable texture repeat (GL_CLAMP_TO_EDGE) texture.repeat_y = False """ filter: Tuple[int, int] """ tuple: The minification and magnification filter for the texture. (Default ``(moderngl.LINEAR. moderngl.LINEAR)``) Example:: texture.filter == (moderngl.NEAREST, moderngl.NEAREST) texture.filter == (moderngl.LINEAR_MIPMAP_LINEAR, moderngl.LINEAR) texture.filter == (moderngl.NEAREST_MIPMAP_LINEAR, moderngl.NEAREST) texture.filter == (moderngl.LINEAR_MIPMAP_NEAREST, moderngl.NEAREST) """ swizzle: str """ str: The swizzle mask of the texture (Default ``'RGBA'``). The swizzle mask change/reorder the ``vec4`` value returned by the ``texture()`` function in a GLSL shaders. This is represented by a 4 character string were each character can be:: 'R' GL_RED 'G' GL_GREEN 'B' GL_BLUE 'A' GL_ALPHA '0' GL_ZERO '1' GL_ONE Example:: # Alpha channel will always return 1.0 texture.swizzle = 'RGB1' # Only return the red component. The rest is masked to 0.0 texture.swizzle = 'R000' # Reverse the components texture.swizzle = 'ABGR' """ anisotropy: float """ Number of samples for anisotropic filtering (Default ``1.0``). The value will be clamped in range ``1.0`` and ``ctx.max_anisotropy``. Any value greater than 1.0 counts as a use of anisotropic filtering:: # Disable anisotropic filtering texture.anisotropy = 1.0 # Enable anisotropic filtering suggesting 16 samples as a maximum texture.anisotropy = 16.0 """ width: int """The width of the texture array.""" height: int """The height of the texture array.""" layers: int """The number of layers of the texture array.""" size: tuple """The size of the texture array.""" components: int """The number of components of the texture array.""" dtype: str """Data type.""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def read(self, alignment: int = 1) -> bytes: """ Read the pixel data as bytes into system memory. Keyword Args: alignment (int): The byte alignment of the pixels. Returns: bytes """ def read_into( self, buffer: Any, alignment: int = 1, write_offset: int = 0, ) -> None: """ Read the content of the texture array into a bytearray or :py:class:`~moderngl.Buffer`. The advantage of reading into a :py:class:`~moderngl.Buffer` is that pixel data does not need to travel all the way to system memory:: # Reading pixel data into a bytearray data = bytearray(8) texture = ctx.texture((2, 2, 2), 1) texture.read_into(data) # Reading pixel data into a buffer data = ctx.buffer(reserve=8) texture = ctx.texture((2, 2, 2), 1) texture.read_into(data) Args: buffer (Union[bytearray, Buffer]): The buffer that will receive the pixels. Keyword Args: alignment (int): The byte alignment of the pixels. write_offset (int): The write offset. """ def write( self, data: Any, viewport: Optional[Union[Tuple[int, int, int], Tuple[int, int, int, int, int, int]]] = None, alignment: int = 1, ) -> None: r""" Update the content of the texture array from byte data or a moderngl :py:class:`~moderngl.Buffer`. The ``viewport`` can be used for finer control of where the data should be written in the array. The valid versions are:: # Writing multiple layers from the begining of the texture texture.write(data, viewport=(width, hight, num_layers)) # Writing sub-sections of the array texture.write(data, viewport=(x, y, layer, width, height, num_layers)) Like with other texture types we can also use bytes or :py:class:`~moderngl.Buffer` as a source:: # Using a moderngl buffer data = ctx.buffer(reserve=8) texture = ctx.texture_array((2, 2, 2), 1) texture.write(data) # Using byte data from system memory data = b'\xff\xff\xff\xff\xff\xff\xff\xff' texture = ctx.texture_array((2, 2, 2), 1) texture.write(data) Args: data (bytes): The pixel data. viewport (tuple): The viewport. Keyword Args: alignment (int): The byte alignment of the pixels. """ def build_mipmaps(self, base: int = 0, max_level: int = 1000) -> None: """ Generate mipmaps. This also changes the texture filter to ``LINEAR_MIPMAP_LINEAR, LINEAR`` (Will be removed in ``6.x``) Keyword Args: base (int): The base level max_level (int): The maximum levels to generate """ def use(self, location: int = 0) -> None: """ Bind the texture to a texture unit. The location is the texture unit we want to bind the texture. This should correspond with the value of the ``sampler2DArray`` uniform in the shader because samplers read from the texture unit we assign to them:: # Define what texture unit our two sampler2DArray uniforms should represent program['texture_a'] = 0 program['texture_b'] = 1 # Bind textures to the texture units first_texture.use(location=0) second_texture.use(location=1) Args: location (int): The texture location/unit. """ def bind_to_image( self, unit: int, read: bool = True, write: bool = True, level: int = 0, format: int = 0, ) -> None: """ Bind a texture to an image unit (OpenGL 4.2 required). This is used to bind textures to image units for shaders. The idea with image load/store is that the user can bind one of the images in a Texture to a number of image binding points (which are separate from texture image units). Shaders can read information from these images and write information to them, in ways that they cannot with textures. It's important to specify the right access type for the image. This can be set with the ``read`` and ``write`` arguments. Allowed combinations are: - **Read-only**: ``read=True`` and ``write=False`` - **Write-only**: ``read=False`` and ``write=True`` - **Read-write**: ``read=True`` and ``write=True`` ``format`` specifies the format that is to be used when performing formatted stores into the image from shaders. ``format`` must be compatible with the texture's internal format. **By default the format of the texture is passed in. The format parameter is only needed when overriding this behavior.** Note that we bind the texture array as layered to make all the layers accessible. This can be updated to map single layers in the future. More information: - https://www.khronos.org/opengl/wiki/Image_Load_Store - https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBindImageTexture.xhtml Args: unit (int): Specifies the index of the image unit to which to bind the texture texture (:py:class:`moderngl.Texture`): The texture to bind Keyword Args: read (bool): Allows the shader to read the image (default: ``True``) write (bool): Allows the shader to write to the image (default: ``True``) level (int): Level of the texture to bind (default: ``0``). format (int): (optional) The OpenGL enum value representing the format (defaults to the texture's format) """ def get_handle(self, resident: bool = True) -> int: """ Handle for Bindless Textures. Once a handle is created its parameters cannot be changed. Attempting to do so will have no effect. (filter, wrap etc). There is no way to undo this immutability. Handles cannot be used by shaders until they are resident. This method can be called multiple times to move a texture in and out of residency:: >> texture.get_handle(resident=False) 4294969856 >> texture.get_handle(resident=True) 4294969856 Ths same handle is returned if the handle already exists. .. note:: Limitations from the OpenGL wiki The amount of storage available for resident images/textures may be less than the total storage for textures that is available. As such, you should attempt to minimize the time a texture spends being resident. Do not attempt to take steps like making textures resident/unresident every frame or something. But if you are finished using a texture for some time, make it unresident. Keyword Args: resident (bool): Make the texture resident. """ def release(self) -> None: """Release the ModernGL object.""" class TextureCube: """ Cubemaps are a texture using the type GL_TEXTURE_CUBE_MAP. They are similar to 2D textures in that they have two dimensions. However, each mipmap level has 6 faces, with each face having the same size as the other faces. The width and height of a cubemap must be the same (ie: cubemaps are squares), but these sizes need not be powers of two. .. Note:: ModernGL enables ``GL_TEXTURE_CUBE_MAP_SEAMLESS`` globally to ensure filtering will be done across the cube faces. A Texture3D object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.texture_cube` to create one. """ size: Tuple[int, int] """The size of the texture cube (single face).""" components: int """The number of components of the texture.""" dtype: str """Data type.""" filter: Tuple[int, int] """ tuple: The minification and magnification filter for the texture. (Default ``(moderngl.LINEAR. moderngl.LINEAR)``) Example:: texture.filter == (moderngl.NEAREST, moderngl.NEAREST) texture.filter == (moderngl.LINEAR_MIPMAP_LINEAR, moderngl.LINEAR) texture.filter == (moderngl.NEAREST_MIPMAP_LINEAR, moderngl.NEAREST) texture.filter == (moderngl.LINEAR_MIPMAP_NEAREST, moderngl.NEAREST) """ swizzle: str """ str: The swizzle mask of the texture (Default ``'RGBA'``). The swizzle mask change/reorder the ``vec4`` value returned by the ``texture()`` function in a GLSL shaders. This is represented by a 4 character string were each character can be:: 'R' GL_RED 'G' GL_GREEN 'B' GL_BLUE 'A' GL_ALPHA '0' GL_ZERO '1' GL_ONE Example:: # Alpha channel will always return 1.0 texture.swizzle = 'RGB1' # Only return the red component. The rest is masked to 0.0 texture.swizzle = 'R000' # Reverse the components texture.swizzle = 'ABGR' """ compare_func: str """ tuple: The compare function of the depth texture (Default ``'<='``). By default depth textures have ``GL_TEXTURE_COMPARE_MODE`` set to ``GL_COMPARE_REF_TO_TEXTURE``, meaning any texture lookup will return a depth comparison value. If you need to read the actual depth value in shaders, setting ``compare_func`` to a blank string will set ``GL_TEXTURE_COMPARE_MODE`` to ``GL_NONE`` making you able to read the depth texture as a ``sampler2D``:: uniform sampler2D depth; out vec4 fragColor; in vec2 uv; void main() { float raw_depth_nonlinear = texture(depth, uv); fragColor = vec4(raw_depth_nonlinear); } Accepted compare functions:: texture.compare_func = '' # Disable depth comparison completely texture.compare_func = '<=' # GL_LEQUAL texture.compare_func = '<' # GL_LESS texture.compare_func = '>=' # GL_GEQUAL texture.compare_func = '>' # GL_GREATER texture.compare_func = '==' # GL_EQUAL texture.compare_func = '!=' # GL_NOTEQUAL texture.compare_func = '0' # GL_NEVER texture.compare_func = '1' # GL_ALWAYS """ anisotropy: float """ Number of samples for anisotropic filtering (Default ``1.0``). The value will be clamped in range ``1.0`` and ``ctx.max_anisotropy``. Any value greater than 1.0 counts as a use of anisotropic filtering:: # Disable anisotropic filtering texture.anisotropy = 1.0 # Enable anisotropic filtering suggesting 16 samples as a maximum texture.anisotropy = 16.0 """ mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" depth: bool """Is the texture a depth texture?.""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def read(self, face: int, alignment: int = 1) -> bytes: """ Read a face from the cubemap as bytes into system memory. Face values are:: 0: Positive X 1: Negative X 2: Positive Y 3: Negative Y 4: Positive Z 5: Negative Z Args: face (int): The face to read. Keyword Args: alignment (int): The byte alignment of the pixels. """ def read_into( self, buffer: Any, face: int, alignment: int = 1, write_offset: int = 0, ) -> None: """ Read a face from the cubemap texture. Read a face of the cubemap into a bytearray or :py:class:`~moderngl.Buffer`. The advantage of reading into a :py:class:`~moderngl.Buffer` is that pixel data does not need to travel all the way to system memory:: # Reading pixel data into a bytearray data = bytearray(4) texture = ctx.texture_cube((2, 2), 1) texture.read_into(data, 0) # Reading pixel data into a buffer data = ctx.buffer(reserve=4) texture = ctx.texture_cube((2, 2), 1) texture.read_into(data, 0) Args: buffer (bytearray): The buffer that will receive the pixels. face (int): The face to read. Keyword Args: alignment (int): The byte alignment of the pixels. write_offset (int): The write offset. """ def write( self, face: int, data: Any, viewport: Optional[Union[Tuple[int, int], Tuple[int, int, int, int]]] = None, alignment: int = 1, ) -> None: r""" Update the content of the texture. Update the content of a face in the cubemap from byte data or a moderngl :py:class:`~moderngl.Buffer`:: # Write data from a moderngl Buffer data = ctx.buffer(reserve=4) texture = ctx.texture_cube((2, 2), 1) texture.write(0, data) # Write data from bytes data = b'\xff\xff\xff\xff' texture = ctx.texture_cube((2, 2), 1) texture.write(0, data) Args: face (int): The face to update. data (bytes): The pixel data. viewport (tuple): The viewport. Keyword Args: alignment (int): The byte alignment of the pixels. """ def build_mipmaps(self, base: int = 0, max_level: int = 1000) -> None: """ Generate mipmaps. This also changes the texture filter to ``LINEAR_MIPMAP_LINEAR, LINEAR`` (Will be removed in ``6.x``) Keyword Args: base (int): The base level max_level (int): The maximum levels to generate """ def use(self, location: int = 0) -> None: """ Bind the texture to a texture unit. The location is the texture unit we want to bind the texture. This should correspond with the value of the ``samplerCube`` uniform in the shader because samplers read from the texture unit we assign to them:: # Define what texture unit our two samplerCube uniforms should represent program['texture_a'] = 0 program['texture_b'] = 1 # Bind textures to the texture units first_texture.use(location=0) second_texture.use(location=1) Args: location (int): The texture location/unit. """ def bind_to_image( self, unit: int, read: bool = True, write: bool = True, level: int = 0, format: int = 0, ) -> None: """ Bind a texture to an image unit (OpenGL 4.2 required). This is used to bind textures to image units for shaders. The idea with image load/store is that the user can bind one of the images in a Texture to a number of image binding points (which are separate from texture image units). Shaders can read information from these images and write information to them, in ways that they cannot with textures. It's important to specify the right access type for the image. This can be set with the ``read`` and ``write`` arguments. Allowed combinations are: - **Read-only**: ``read=True`` and ``write=False`` - **Write-only**: ``read=False`` and ``write=True`` - **Read-write**: ``read=True`` and ``write=True`` ``format`` specifies the format that is to be used when performing formatted stores into the image from shaders. ``format`` must be compatible with the texture's internal format. **By default the format of the texture is passed in. The format parameter is only needed when overriding this behavior.** Note that we bind the texture cube as layered to make all the faces accessible. This can be updated to map single faces in the future. The Z component in imageLoad/Store represents the face id we are writing to (0-5). More information: - https://www.khronos.org/opengl/wiki/Image_Load_Store - https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBindImageTexture.xhtml Args: unit (int): Specifies the index of the image unit to which to bind the texture texture (:py:class:`moderngl.Texture`): The texture to bind Keyword Args: read (bool): Allows the shader to read the image (default: ``True``) write (bool): Allows the shader to write to the image (default: ``True``) level (int): Level of the texture to bind (default: ``0``). format (int): (optional) The OpenGL enum value representing the format (defaults to the texture's format) """ def get_handle(self, resident: bool = True) -> int: """ Handle for Bindless Textures. Once a handle is created its parameters cannot be changed. Attempting to do so will have no effect. (filter, wrap etc). There is no way to undo this immutability. Handles cannot be used by shaders until they are resident. This method can be called multiple times to move a texture in and out of residency:: >> texture.get_handle(resident=False) 4294969856 >> texture.get_handle(resident=True) 4294969856 Ths same handle is returned if the handle already exists. .. note:: Limitations from the OpenGL wiki The amount of storage available for resident images/textures may be less than the total storage for textures that is available. As such, you should attempt to minimize the time a texture spends being resident. Do not attempt to take steps like making textures resident/unresident every frame or something. But if you are finished using a texture for some time, make it unresident. Keyword Args: resident (bool): Make the texture resident. """ def release(self) -> None: """Release the ModernGL object.""" class Texture: """ A Texture is an OpenGL object that contains one or more images that all have the same image format. A texture can be used in two ways. It can be the source of a texture access from a Shader, or it can be used as a render target. A Texture object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.texture` or :py:meth:`Context.depth_texture` to create one. """ repeat_x: bool """ bool: The x repeat flag for the texture (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) texture.repeat_x = True # Disable texture repeat (GL_CLAMP_TO_EDGE) texture.repeat_x = False """ repeat_y: bool """ bool: The y repeat flag for the texture (Default ``True``). Example:: # Enable texture repeat (GL_REPEAT) texture.repeat_y = True # Disable texture repeat (GL_CLAMP_TO_EDGE) texture.repeat_y = False """ filter: Tuple[int, int] """ tuple: The minification and magnification filter for the texture. (Default ``(moderngl.LINEAR. moderngl.LINEAR)``) Example:: texture.filter == (moderngl.NEAREST, moderngl.NEAREST) texture.filter == (moderngl.LINEAR_MIPMAP_LINEAR, moderngl.LINEAR) texture.filter == (moderngl.NEAREST_MIPMAP_LINEAR, moderngl.NEAREST) texture.filter == (moderngl.LINEAR_MIPMAP_NEAREST, moderngl.NEAREST) """ anisotropy: float """ Number of samples for anisotropic filtering (Default ``1.0``). The value will be clamped in range ``1.0`` and ``ctx.max_anisotropy``. Any value greater than 1.0 counts as a use of anisotropic filtering:: # Disable anisotropic filtering texture.anisotropy = 1.0 # Enable anisotropic filtering suggesting 16 samples as a maximum texture.anisotropy = 16.0 """ swizzle: str """ str: The swizzle mask of the texture (Default ``'RGBA'``). The swizzle mask change/reorder the ``vec4`` value returned by the ``texture()`` function in a GLSL shaders. This is represented by a 4 character string were each character can be:: 'R' GL_RED 'G' GL_GREEN 'B' GL_BLUE 'A' GL_ALPHA '0' GL_ZERO '1' GL_ONE Example:: # Alpha channel will always return 1.0 texture.swizzle = 'RGB1' # Only return the red component. The rest is masked to 0.0 texture.swizzle = 'R000' # Reverse the components texture.swizzle = 'ABGR' """ compare_func: str """ tuple: The compare function of the depth texture (Default ``'<='``). By default depth textures have ``GL_TEXTURE_COMPARE_MODE`` set to ``GL_COMPARE_REF_TO_TEXTURE``, meaning any texture lookup will return a depth comparison value. If you need to read the actual depth value in shaders, setting ``compare_func`` to a blank string will set ``GL_TEXTURE_COMPARE_MODE`` to ``GL_NONE`` making you able to read the depth texture as a ``sampler2D``:: uniform sampler2D depth; out vec4 fragColor; in vec2 uv; void main() { float raw_depth_nonlinear = texture(depth, uv); fragColor = vec4(raw_depth_nonlinear); } Accepted compare functions:: texture.compare_func = '' # Disable depth comparison completely texture.compare_func = '<=' # GL_LEQUAL texture.compare_func = '<' # GL_LESS texture.compare_func = '>=' # GL_GEQUAL texture.compare_func = '>' # GL_GREATER texture.compare_func = '==' # GL_EQUAL texture.compare_func = '!=' # GL_NOTEQUAL texture.compare_func = '0' # GL_NEVER texture.compare_func = '1' # GL_ALWAYS """ width: int """The width of the texture.""" height: int """The height of the texture.""" size: tuple """The size of the texture.""" components: int """The number of components of the texture.""" samples: int """The number of samples set for the texture used in multisampling.""" dtype: str """Data type.""" depth: bool """Is the texture a depth texture?.""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def read(self, level: int = 0, alignment: int = 1) -> bytes: """ Read the pixel data as bytes into system memory. The texture can also be attached to a :py:class:`Framebuffer` to gain access to :py:meth:`Framebuffer.read` for additional features such ad reading a subsection or converting to another ``dtype``. Keyword Args: level (int): The mipmap level. alignment (int): The byte alignment of the pixels. Returns: bytes """ def read_into( self, buffer: Any, level: int = 0, alignment: int = 1, write_offset: int = 0, ) -> None: """ Read the content of the texture into a bytearray or :py:class:`~moderngl.Buffer`. The advantage of reading into a :py:class:`~moderngl.Buffer` is that pixel data does not need to travel all the way to system memory:: # Reading pixel data into a bytearray data = bytearray(4) texture = ctx.texture((2, 2), 1) texture.read_into(data) # Reading pixel data into a buffer data = ctx.buffer(reserve=4) texture = ctx.texture((2, 2), 1) texture.read_into(data) Args: buffer (Union[bytearray, Buffer]): The buffer that will receive the pixels. Keyword Args: level (int): The mipmap level. alignment (int): The byte alignment of the pixels. write_offset (int): The write offset. """ def write( self, data: Any, viewport: Optional[Union[Tuple[int, int], Tuple[int, int, int, int]]] = None, level: int = 0, alignment: int = 1, ) -> None: r""" Update the content of the texture from byte data or a moderngl :py:class:`~moderngl.Buffer`. Examples:: # Write data from a moderngl Buffer data = ctx.buffer(reserve=4) texture = ctx.texture((2, 2), 1) texture.write(data) # Write data from bytes data = b'\xff\xff\xff\xff' texture = ctx.texture((2, 2), 1) texture.write(data) # Write to a sub-section of the texture using viewport texture = ctx.texture((100, 100), 4) # Fill the lower left 50x50 pixels with new data texture.write(data, viewport=(0, 0, 50, 50)) Args: data (Union[bytes, Buffer]): The pixel data. viewport (tuple): The sub-section of the texture to update in viewport coordinates. The data size must match the size of the area. Keyword Args: level (int): The mipmap level. alignment (int): The byte alignment of the pixels. """ def build_mipmaps(self, base: int = 0, max_level: int = 1000) -> None: """ Generate mipmaps. This also changes the texture filter to ``LINEAR_MIPMAP_LINEAR, LINEAR`` (Will be removed in ``6.x``) Keyword Args: base (int): The base level max_level (int): The maximum levels to generate """ def use(self, location: int = 0) -> None: """ Bind the texture to a texture unit. The location is the texture unit we want to bind the texture. This should correspond with the value of the ``sampler2D`` uniform in the shader because samplers read from the texture unit we assign to them:: # Define what texture unit our two sampler2D uniforms should represent program['texture_a'] = 0 program['texture_b'] = 1 # Bind textures to the texture units first_texture.use(location=0) second_texture.use(location=1) Args: location (int): The texture location/unit. """ def bind_to_image( self, unit: int, read: bool = True, write: bool = True, level: int = 0, format: int = 0, ) -> None: """ Bind a texture to an image unit (OpenGL 4.2 required). This is used to bind textures to image units for shaders. The idea with image load/store is that the user can bind one of the images in a Texture to a number of image binding points (which are separate from texture image units). Shaders can read information from these images and write information to them, in ways that they cannot with textures. It's important to specify the right access type for the image. This can be set with the ``read`` and ``write`` arguments. Allowed combinations are: - **Read-only**: ``read=True`` and ``write=False`` - **Write-only**: ``read=False`` and ``write=True`` - **Read-write**: ``read=True`` and ``write=True`` ``format`` specifies the format that is to be used when performing formatted stores into the image from shaders. ``format`` must be compatible with the texture's internal format. **By default the format of the texture is passed in. The format parameter is only needed when overriding this behavior.** More information: - https://www.khronos.org/opengl/wiki/Image_Load_Store - https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glBindImageTexture.xhtml Args: unit (int): Specifies the index of the image unit to which to bind the texture texture (:py:class:`moderngl.Texture`): The texture to bind Keyword Args: read (bool): Allows the shader to read the image (default: ``True``) write (bool): Allows the shader to write to the image (default: ``True``) level (int): Level of the texture to bind (default: ``0``). format (int): (optional) The OpenGL enum value representing the format (defaults to the texture's format) """ def get_handle(self, resident: bool = True) -> int: """ Handle for Bindless Textures. Once a handle is created its parameters cannot be changed. Attempting to do so will have no effect. (filter, wrap etc). There is no way to undo this immutability. Handles cannot be used by shaders until they are resident. This method can be called multiple times to move a texture in and out of residency:: >> texture.get_handle(resident=False) 4294969856 >> texture.get_handle(resident=True) 4294969856 Ths same handle is returned if the handle already exists. .. note:: Limitations from the OpenGL wiki The amount of storage available for resident images/textures may be less than the total storage for textures that is available. As such, you should attempt to minimize the time a texture spends being resident. Do not attempt to take steps like making textures resident/unresident every frame or something. But if you are finished using a texture for some time, make it unresident. Keyword Args: resident (bool): Make the texture resident. """ def release(self) -> None: """Release the ModernGL object.""" class VertexArray: """ A VertexArray object is an OpenGL object that stores all of the state needed to supply vertex data. It stores the format of the vertex data as well as the Buffer objects providing the vertex data arrays. In ModernGL, the VertexArray object also stores a reference for a :py:class:`Program` object. A VertexArray object cannot be instantiated directly, it requires a context. Use :py:meth:`Context.vertex_array` or :py:meth:`Context.simple_vertex_array` to create one. """ scope: Optional["Scope"] """The scope to use while rendering.""" mode: int """ Get or set the default rendering mode. This value is used when ``mode`` is not passed in rendering calls. Examples:: vao.mode = moderngl.TRIANGLE_STRIPS """ program: Program """ Program: The program assigned to the VertexArray. The program used when rendering or transforming primitives. """ index_buffer: Buffer """Index buffer""" index_element_size: int """The size of an index in bytes""" vertices: int """ The number of vertices detected. This is the minimum of the number of vertices possible per Buffer. The size of the index_buffer determines the number of vertices. Per instance vertex attributes does not affect this number. """ instances: int """Get or set the number of instances to render.""" mglo: Any """Internal representation for debug purposes only.""" ctx: "Context" """The context this object belongs to""" extra: Any """Attribute for storing user defined objects""" glo: int """ The internal OpenGL object. This values is provided for debug purposes only. """ label: str | None """ A human-readable name for this object, intended for debugging tools. Will be set or fetched with OpenGL label calls if available, or kept within the Python object if not. """ def render( self, mode: Optional[int] = None, vertices: int = -1, first: int = 0, instances: int = -1, ) -> None: """ The render primitive (mode) must be the same as the input primitive of the GeometryShader. Args: mode (int): By default :py:data:`TRIANGLES` will be used. vertices (int): The number of vertices to transform. Keyword Args: first (int): The index of the first vertex to start with. instances (int): The number of instances. """ def render_indirect( self, buffer: Buffer, mode: Optional[int] = None, count: int = -1, first: int = 0, ) -> None: """ The render primitive (mode) must be the same as the input primitive of the GeometryShader. The draw commands are 5 integers: (count, instanceCount, firstIndex, baseVertex, baseInstance). Args: buffer (Buffer): Indirect drawing commands. mode (int): By default :py:data:`TRIANGLES` will be used. count (int): The number of draws. Keyword Args: first (int): The index of the first indirect draw command. """ def transform( self, buffer: Union[Buffer, List[Buffer]], mode: Optional[int] = None, vertices: int = -1, first: int = 0, instances: int = -1, buffer_offset: int = 0, ) -> None: """ Transform vertices. Stores the output in a single buffer. The transform primitive (mode) must be the same as the input primitive of the GeometryShader. Args: buffer (Buffer): The buffer to store the output. mode (int): By default :py:data:`POINTS` will be used. vertices (int): The number of vertices to transform. Keyword Args: first (int): The index of the first vertex to start with. instances (int): The number of instances. buffer_offset (int): Byte offset for the output buffer """ def bind( self, attribute: int, cls: str, buffer: Buffer, fmt: str, offset: int = 0, stride: int = 0, divisor: int = 0, normalize: bool = False, ) -> None: """ Bind individual attributes to buffers. Args: location (int): The attribute location. cls (str): The attribute class. Valid values are ``f``, ``i`` or ``d``. buffer (Buffer): The buffer. format (str): The buffer format. Keyword Args: offset (int): The offset. stride (int): The stride. divisor (int): The divisor. normalize (bool): The normalize parameter, if applicable. """ def release(self) -> None: """Release the ModernGL object.""" moderngl-moderngl-773b733/moderngl/000077500000000000000000000000001470420062000172115ustar00rootroot00000000000000moderngl-moderngl-773b733/moderngl/__init__.py000066400000000000000000001761321470420062000213340ustar00rootroot00000000000000import warnings from collections import deque from contextlib import contextmanager from _moderngl import Attribute, Error, InvalidObject, StorageBlock, Subroutine, Uniform, UniformBlock, Varying from _moderngl import parse_spv_inputs as _parse_spv try: from moderngl import mgl except ImportError: pass __version__ = "5.12.0" _GL_DEBUG_SOURCE_THIRD_PARTY = 0x8249 _GL_DEBUG_SOURCE_APPLICATION = 0x824A def packager_imports(): """some additional imports that code freezers (Pyinstaller,etc) should see.""" import glcontext class _store: default_context = None # OpenGL Object type constants _BUFFER = 0x82E0 _PROGRAM = 0x82E2 _QUERY = 0x82E3 _SAMPLER = 0x82E6 _TEXTURE = 0x1702 _VERTEX_ARRAY = 0x8074 _FRAMEBUFFER = 0x8D40 _RENDERBUFFER = 0x8D41 class Buffer: def __init__(self): self.mglo = None self._size = None self._dynamic = None self._glo = None self.ctx = None self.extra = None self._label = None # Used only if no OpenGL label functions are available raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) @property def size(self): return self.mglo.size() @property def dynamic(self): return self._dynamic @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_BUFFER, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_BUFFER, self._glo, value) else: self._label = value def write(self, data, offset=0): self.mglo.write(data, offset) def write_chunks(self, data, start, step, count): self.mglo.write_chunks(data, start, step, count) def read(self, size=-1, offset=0): return self.mglo.read(size, offset) def read_into(self, buffer, size=-1, offset=0, write_offset=0): return self.mglo.read_into(buffer, size, offset, write_offset) def read_chunks(self, chunk_size, start, step, count): return self.mglo.read_chunks(chunk_size, start, step, count) def read_chunks_into(self, buffer, chunk_size, start, step, count, write_offset=0): return self.mglo.read(buffer, chunk_size, start, step, count, write_offset) def clear(self, size=-1, offset=0, chunk=None): self.mglo.clear(size, offset, chunk) def bind_to_uniform_block(self, binding=0, offset=0, size=-1): self.mglo.bind_to_uniform_block(binding, offset, size) def bind_to_storage_buffer(self, binding=0, offset=0, size=-1): self.mglo.bind_to_storage_buffer(binding, offset, size) def orphan(self, size=-1): self.mglo.orphan(size) def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() def bind(self, *attribs, layout=None): return (self, layout, *attribs) def assign(self, index): return (self, index) class ConditionalRender: def __init__(self): self.mglo = None raise TypeError() def __enter__(self): self.mglo.begin_render() return self def __exit__(self, *args): self.mglo.end_render() class Query: def __init__(self): self.mglo = None self.crender = None self.ctx = None self.extra = None self._label = None raise TypeError() def __enter__(self): self.mglo.begin() return self def __exit__(self, *args): self.mglo.end() @property def samples(self): return self.mglo.samples @property def primitives(self): return self.mglo.primitives @property def elapsed(self): return self.mglo.elapsed class ComputeShader: def __init__(self): self.mglo = None self._members = {} self._glo = None self.ctx = None self.extra = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) def __getitem__(self, key): return self._members[key] def __setitem__(self, key, value): self._members[key].value = value def __iter__(self): yield from self._members @property def glo(self): return self._glo def run(self, group_x=1, group_y=1, group_z=1): return self.mglo.run(group_x, group_y, group_z) def run_indirect(self, buffer, offset=0): return self.mglo.run_indirect(buffer.mglo, offset) def get(self, key, default): return self._members.get(key, default) def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_PROGRAM, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_PROGRAM, self._glo, value) else: self._label = value class Framebuffer: def __init__(self): self.mglo = None self._color_attachments = None self._depth_attachment = None self._size = (None, None) self._samples = None self._glo = None self.ctx = None self._is_reference = None self.extra = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return # Don't delete default framebuffer or a reference if self._is_reference: return # If object was initialized properly (ctx present) and gc_mode is auto if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) @property def viewport(self): return self.mglo.viewport @viewport.setter def viewport(self, value): x, y, w, h = value self.mglo.viewport = (int(x), int(y), int(w), int(h)) @property def scissor(self): return self.mglo.scissor @scissor.setter def scissor(self, value): if value is None: self.mglo.scissor = None else: x, y, w, h = value self.mglo.scissor = (int(x), int(y), int(w), int(h)) @property def color_mask(self): return self.mglo.color_mask @color_mask.setter def color_mask(self, value): self.mglo.color_mask = value @property def depth_mask(self): return self.mglo.depth_mask @depth_mask.setter def depth_mask(self, value): self.mglo.depth_mask = value @property def width(self): return self._size[0] @property def height(self): return self._size[1] @property def size(self): return self._size @property def samples(self): return self._samples @property def bits(self): return self.mglo.bits @property def color_attachments(self): return self._color_attachments @property def depth_attachment(self): return self._depth_attachment @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_FRAMEBUFFER, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_FRAMEBUFFER, self._glo, value) else: self._label = value def clear(self, red=0.0, green=0.0, blue=0.0, alpha=0.0, depth=1.0, viewport=None, color=None): if color is not None: red, green, blue, alpha, *_ = tuple(color) + (0.0, 0.0, 0.0, 0.0) if viewport is not None: viewport = tuple(viewport) self.mglo.clear(red, green, blue, alpha, depth, viewport) def use(self): self.ctx.fbo = self self.mglo.use() def read(self, viewport=None, components=3, attachment=0, alignment=1, dtype="f1", clamp=False): if viewport is None: viewport = (0, 0, self.width, self.height) if len(viewport) == 2: viewport = (0, 0, *viewport) res, mem = mgl.writable_bytes(mgl.expected_size(viewport[2], viewport[3], 1, components, alignment, dtype)) self.mglo.read_into(mem, viewport, components, attachment, alignment, clamp, dtype, 0) return res def read_into( self, buffer, viewport=None, components=3, attachment=0, alignment=1, dtype="f1", clamp=False, write_offset=0 ): if type(buffer) is Buffer: buffer = buffer.mglo return self.mglo.read_into(buffer, viewport, components, attachment, alignment, clamp, dtype, write_offset) def release(self): if not isinstance(self.mglo, InvalidObject): self._color_attachments = None self._depth_attachment = None self.mglo.release() self.mglo = InvalidObject() class Program: def __init__(self): self.mglo = None self._members = {} self._subroutines = None self._geom = (None, None, None) self._glo = None self._is_transform = None self._attribute_locations = None self._attribute_types = None self.ctx = None self.extra = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) def __getitem__(self, key): return self._members[key] def __setitem__(self, key, value): self._members[key].value = value def __iter__(self): yield from self._members @property def is_transform(self): return self._is_transform @property def geometry_input(self): return self._geom[0] @property def geometry_output(self): return self._geom[1] @property def geometry_vertices(self): return self._geom[2] @property def subroutines(self): return self._subroutines @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_PROGRAM, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_PROGRAM, self._glo, value) else: self._label = value def get(self, key, default): return self._members.get(key, default) def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() class Renderbuffer: def __init__(self): self.mglo = None self._size = (None, None) self._components = None self._samples = None self._depth = None self._dtype = None self._glo = None self.ctx = None self.extra = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) @property def width(self): return self._size[0] @property def height(self): return self._size[1] @property def size(self): return self._size @property def samples(self): return self._samples @property def components(self): return self._components @property def depth(self): return self._depth @property def dtype(self): return self._dtype @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_RENDERBUFFER, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_RENDERBUFFER, self._glo, value) else: self._label = value def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() class Sampler: def __init__(self): self.mglo = None self._glo = None self.ctx = None self.extra = None self.texture = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) def use(self, location=0): if self.texture is not None: self.texture.use(location) self.mglo.use(location) def clear(self, location=0): self.mglo.clear(location) def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() @property def repeat_x(self): return self.mglo.repeat_x @repeat_x.setter def repeat_x(self, value): self.mglo.repeat_x = value @property def repeat_y(self): return self.mglo.repeat_y @repeat_y.setter def repeat_y(self, value): self.mglo.repeat_y = value @property def repeat_z(self): return self.mglo.repeat_z @repeat_z.setter def repeat_z(self, value): self.mglo.repeat_z = value @property def filter(self): return self.mglo.filter @filter.setter def filter(self, value): self.mglo.filter = value @property def compare_func(self): return self.mglo.compare_func @compare_func.setter def compare_func(self, value): self.mglo.compare_func = value @property def anisotropy(self): return self.mglo.anisotropy @anisotropy.setter def anisotropy(self, value): self.mglo.anisotropy = value @property def border_color(self): return self.mglo.border_color @border_color.setter def border_color(self, value): self.mglo.border_color = value @property def min_lod(self): return self.mglo.min_lod @min_lod.setter def min_lod(self, value): self.mglo.min_lod = value @property def max_lod(self): return self.mglo.max_lod @max_lod.setter def max_lod(self, value): self.mglo.max_lod = value @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_SAMPLER, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_SAMPLER, self._glo, value) else: self._label = value def assign(self, index): return (self, index) class Scope: def __init__(self): self.mglo = None self.ctx = None self._framebuffer = None self._textures = None self._uniform_buffers = None self._storage_buffers = None self._samplers = None self.extra = None raise TypeError() def __enter__(self): self.mglo.begin() return self def __exit__(self, *args): self.mglo.end() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) def release(self): if not isinstance(self.mglo, InvalidObject): self._framebuffer = None self._textures = None self._uniform_buffers = None self._storage_buffers = None self._samplers = None self.mglo.release() self.mglo = InvalidObject() class Texture: def __init__(self): self.mglo = None self._size = (None, None) self._components = None self._samples = None self._dtype = None self._depth = None self._glo = None self.ctx = None self.extra = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) @property def repeat_x(self): return self.mglo.repeat_x @repeat_x.setter def repeat_x(self, value): self.mglo.repeat_x = value @property def repeat_y(self): return self.mglo.repeat_y @repeat_y.setter def repeat_y(self, value): self.mglo.repeat_y = value @property def filter(self): return self.mglo.filter @filter.setter def filter(self, value): self.mglo.filter = value @property def anisotropy(self): return self.mglo.anisotropy @anisotropy.setter def anisotropy(self, value): self.mglo.anisotropy = value @property def swizzle(self): return self.mglo.swizzle @swizzle.setter def swizzle(self, value): self.mglo.swizzle = value @property def compare_func(self): return self.mglo.compare_func @compare_func.setter def compare_func(self, value): self.mglo.compare_func = value @property def width(self): return self._size[0] @property def height(self): return self._size[1] @property def size(self): return self._size @property def components(self): return self._components @property def samples(self): return self._samples @property def dtype(self): return self._dtype @property def depth(self): return self._depth @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_TEXTURE, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_TEXTURE, self._glo, value) else: self._label = value def read(self, level=0, alignment=1): return self.mglo.read(level, alignment) def read_into(self, buffer, level=0, alignment=1, write_offset=0): if type(buffer) is Buffer: buffer = buffer.mglo return self.mglo.read_into(buffer, level, alignment, write_offset) def write(self, data, viewport=None, level=0, alignment=1): if type(data) is Buffer: data = data.mglo self.mglo.write(data, viewport, level, alignment) def build_mipmaps(self, base=0, max_level=1000): self.mglo.build_mipmaps(base, max_level) def use(self, location=0): self.mglo.use(location) def bind_to_image(self, unit, read=True, write=True, level=0, format=0): self.mglo.bind(unit, read, write, level, format) def get_handle(self, resident=True): return self.mglo.get_handle(resident) def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() class Texture3D: def __init__(self): self.mglo = None self._size = (None, None, None) self._components = None self._samples = None self._dtype = None self._glo = None self.ctx = None self.extra = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) @property def repeat_x(self): return self.mglo.repeat_x @repeat_x.setter def repeat_x(self, value): self.mglo.repeat_x = value @property def repeat_y(self): return self.mglo.repeat_y @repeat_y.setter def repeat_y(self, value): self.mglo.repeat_y = value @property def repeat_z(self): return self.mglo.repeat_z @repeat_z.setter def repeat_z(self, value): self.mglo.repeat_z = value @property def filter(self): return self.mglo.filter @filter.setter def filter(self, value): self.mglo.filter = value @property def swizzle(self): return self.mglo.swizzle @swizzle.setter def swizzle(self, value): self.mglo.swizzle = value @property def width(self): return self._size[0] @property def height(self): return self._size[1] @property def depth(self): return self._size[2] @property def size(self): return self._size @property def components(self): return self._components @property def dtype(self): return self._dtype @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_TEXTURE, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_TEXTURE, self._glo, value) else: self._label = value def read(self, alignment=1): return self.mglo.read(alignment) def read_into(self, buffer, alignment=1, write_offset=0): if type(buffer) is Buffer: buffer = buffer.mglo return self.mglo.read_into(buffer, alignment, write_offset) def write(self, data, viewport=None, alignment=1): if type(data) is Buffer: data = data.mglo self.mglo.write(data, viewport, alignment) def build_mipmaps(self, base=0, max_level=1000): self.mglo.build_mipmaps(base, max_level) def use(self, location=0): self.mglo.use(location) def bind_to_image(self, unit, read=True, write=True, level=0, format=0): self.mglo.bind(unit, read, write, level, format) def get_handle(self, resident=True): return self.mglo.get_handle(resident) def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() class TextureCube: def __init__(self): self.mglo = None self._size = (None, None) self._components = None self._depth = None self._dtype = None self._glo = None self.ctx = None self.extra = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) @property def size(self): return self._size @property def components(self): return self._components @property def dtype(self): return self._dtype @property def filter(self): return self.mglo.filter @filter.setter def filter(self, value): self.mglo.filter = value @property def swizzle(self): return self.mglo.swizzle @swizzle.setter def swizzle(self, value): self.mglo.swizzle = value @property def compare_func(self): return self.mglo.compare_func @compare_func.setter def compare_func(self, value): self.mglo.compare_func = value @property def anisotropy(self): return self.mglo.anisotropy @anisotropy.setter def anisotropy(self, value): self.mglo.anisotropy = value @property def depth(self): return self._depth @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_TEXTURE, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_TEXTURE, self._glo, value) else: self._label = value def read(self, face, alignment=1): return self.mglo.read(face, alignment) def read_into(self, buffer, face, alignment=1, write_offset=0): if type(buffer) is Buffer: buffer = buffer.mglo return self.mglo.read_into(buffer, face, alignment, write_offset) def write(self, face, data, viewport=None, alignment=1): if type(data) is Buffer: data = data.mglo self.mglo.write(face, data, viewport, alignment) def build_mipmaps(self, base=0, max_level=1000): self.mglo.build_mipmaps(base, max_level) def use(self, location=0): self.mglo.use(location) def bind_to_image(self, unit, read=True, write=True, level=0, format=0): self.mglo.bind(unit, read, write, level, format) def get_handle(self, resident=True): return self.mglo.get_handle(resident) def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() class TextureArray: def __init__(self): self.mglo = None self._size = (None, None, None) self._components = None self._samples = None self._dtype = None self._depth = None self._glo = None self.ctx = None self.extra = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) @property def repeat_x(self): return self.mglo.repeat_x @repeat_x.setter def repeat_x(self, value): self.mglo.repeat_x = value @property def repeat_y(self): return self.mglo.repeat_y @repeat_y.setter def repeat_y(self, value): self.mglo.repeat_y = value @property def filter(self): return self.mglo.filter @filter.setter def filter(self, value): self.mglo.filter = value @property def swizzle(self): return self.mglo.swizzle @swizzle.setter def swizzle(self, value): self.mglo.swizzle = value @property def anisotropy(self): return self.mglo.anisotropy @anisotropy.setter def anisotropy(self, value): self.mglo.anisotropy = value @property def width(self): return self._size[0] @property def height(self): return self._size[1] @property def layers(self): return self._size[2] @property def size(self): return self._size @property def components(self): return self._components @property def dtype(self): return self._dtype @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_TEXTURE, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_TEXTURE, self._glo, value) else: self._label = value def read(self, alignment=1): return self.mglo.read(alignment) def read_into(self, buffer, alignment=1, write_offset=0): if type(buffer) is Buffer: buffer = buffer.mglo return self.mglo.read_into(buffer, alignment, write_offset) def write(self, data, viewport=None, alignment=1): if type(data) is Buffer: data = data.mglo self.mglo.write(data, viewport, alignment) def build_mipmaps(self, base=0, max_level=1000): self.mglo.build_mipmaps(base, max_level) def use(self, location=0): self.mglo.use(location) def bind_to_image(self, unit, read=True, write=True, level=0, format=0): self.mglo.bind(unit, read, write, level, format) def get_handle(self, resident=True): return self.mglo.get_handle(resident) def release(self): if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() class VertexArray: def __init__(self): self.mglo = None self._program = None self._index_buffer = None self._content = None self._index_element_size = None self._glo = None self._mode = None self.ctx = None self.extra = None self.scope = None self._label = None raise TypeError() def __del__(self): if not hasattr(self, "ctx"): return if self.ctx.gc_mode == "auto": self.release() elif self.ctx.gc_mode == "context_gc": self.ctx.objects.append(self.mglo) @property def mode(self): return self._mode @mode.setter def mode(self, value): self._mode = value @property def program(self): return self._program @property def index_buffer(self): return self._index_buffer @property def index_element_size(self): return self._index_element_size @property def vertices(self): return self.mglo.vertices @vertices.setter def vertices(self, value): self.mglo.vertices = int(value) @property def instances(self): return self.mglo.instances @instances.setter def instances(self, value): self.mglo.instances = int(value) @property def subroutines(self): return self.mglo.subroutines @subroutines.setter def subroutines(self, value): self.mglo.subroutines = tuple(value) @property def glo(self): return self._glo @property def label(self): if self.ctx.supports_labels: return self.ctx.mglo.get_label(_VERTEX_ARRAY, self._glo) else: return self._label @label.setter def label(self, value): if not (isinstance(value, str) or value is None): raise TypeError(f"Expected value to be a str or None, got {type(value).__name__}") if self.ctx.supports_labels: self.ctx.mglo.set_label(_VERTEX_ARRAY, self._glo, value) else: self._label = value def render(self, mode=None, vertices=-1, first=0, instances=-1): if mode is None: mode = self._mode if self.scope: with self.scope: self.mglo.render(mode, vertices, first, instances) else: self.mglo.render(mode, vertices, first, instances) def render_indirect(self, buffer, mode=None, count=-1, first=0): if mode is None: mode = self._mode if self.scope: with self.scope: self.mglo.render_indirect(buffer.mglo, mode, count, first) else: self.mglo.render_indirect(buffer.mglo, mode, count, first) def transform(self, buffer, mode=None, vertices=-1, first=0, instances=-1, buffer_offset=0): if mode is None: mode = self._mode if isinstance(buffer, (list, tuple)): outputs = [buf.mglo for buf in buffer] else: outputs = [buffer.mglo] if self.scope: with self.scope: self.mglo.transform(outputs, mode, vertices, first, instances, buffer_offset) else: self.mglo.transform(outputs, mode, vertices, first, instances, buffer_offset) def bind(self, attribute, cls, buffer, fmt, offset=0, stride=0, divisor=0, normalize=False): self.mglo.bind(attribute, cls, buffer.mglo, fmt, offset, stride, divisor, normalize) def release(self): if not isinstance(self.mglo, InvalidObject): self._program = None self._index_buffer = None self._content = None self.mglo.release() self.mglo = InvalidObject() class Context: _valid_gc_modes = [None, "context_gc", "auto"] # Context Flags NOTHING = 0 BLEND = 1 DEPTH_TEST = 2 CULL_FACE = 4 RASTERIZER_DISCARD = 8 PROGRAM_POINT_SIZE = 16 # Primitive modes POINTS = 0x0000 LINES = 0x0001 LINE_LOOP = 0x0002 LINE_STRIP = 0x0003 TRIANGLES = 0x0004 TRIANGLE_STRIP = 0x0005 TRIANGLE_FAN = 0x0006 LINES_ADJACENCY = 0x000A LINE_STRIP_ADJACENCY = 0x000B TRIANGLES_ADJACENCY = 0x000C TRIANGLE_STRIP_ADJACENCY = 0x0000D PATCHES = 0x000E # Texture filters NEAREST = 0x2600 LINEAR = 0x2601 NEAREST_MIPMAP_NEAREST = 0x2700 LINEAR_MIPMAP_NEAREST = 0x2701 NEAREST_MIPMAP_LINEAR = 0x2702 LINEAR_MIPMAP_LINEAR = 0x2703 # Blend function constants ZERO = 0x0000 ONE = 0x0001 SRC_COLOR = 0x0300 ONE_MINUS_SRC_COLOR = 0x0301 SRC_ALPHA = 0x0302 ONE_MINUS_SRC_ALPHA = 0x0303 DST_ALPHA = 0x0304 ONE_MINUS_DST_ALPHA = 0x0305 DST_COLOR = 0x0306 ONE_MINUS_DST_COLOR = 0x0307 DEFAULT_BLENDING = (SRC_ALPHA, ONE_MINUS_SRC_ALPHA) ADDITIVE_BLENDING = (ONE, ONE) PREMULTIPLIED_ALPHA = (SRC_ALPHA, ONE) # Blend equations FUNC_ADD = 0x8006 FUNC_SUBTRACT = 0x800A FUNC_REVERSE_SUBTRACT = 0x800B MIN = 0x8007 MAX = 0x8008 # Provoking vertex FIRST_VERTEX_CONVENTION = 0x8E4D LAST_VERTEX_CONVENTION = 0x8E4E # Memory barrier VERTEX_ATTRIB_ARRAY_BARRIER_BIT = 0x00000001 ELEMENT_ARRAY_BARRIER_BIT = 0x00000002 UNIFORM_BARRIER_BIT = 0x00000004 TEXTURE_FETCH_BARRIER_BIT = 0x00000008 SHADER_IMAGE_ACCESS_BARRIER_BIT = 0x00000020 COMMAND_BARRIER_BIT = 0x00000040 PIXEL_BUFFER_BARRIER_BIT = 0x00000080 TEXTURE_UPDATE_BARRIER_BIT = 0x00000100 BUFFER_UPDATE_BARRIER_BIT = 0x00000200 FRAMEBUFFER_BARRIER_BIT = 0x00000400 TRANSFORM_FEEDBACK_BARRIER_BIT = 0x00000800 ATOMIC_COUNTER_BARRIER_BIT = 0x00001000 SHADER_STORAGE_BARRIER_BIT = 0x00002000 ALL_BARRIER_BITS = 0xFFFFFFFF def __init__(self): self.mglo = None self._screen = None self._info = None self._extensions = None self.version_code = None self.fbo = None self.extra = None self._gc_mode = None self._objects = deque() raise TypeError() def __del__(self): if hasattr(self, "_gc_mode") and self._gc_mode == "auto": self.release() @property def gc_mode(self): return self._gc_mode @gc_mode.setter def gc_mode(self, value): if value not in self._valid_gc_modes: raise ValueError("Valid gc modes:", self._valid_gc_modes) self._gc_mode = value @property def objects(self): return self._objects def gc(self): count = 0 # Keep iterating until there are no more objects. # An object deletion can trigger new objects to be added while self._objects: # Remove the oldest objects first obj = self._objects.popleft() obj.release() count += 1 return count @property def line_width(self): return self.mglo.line_width @line_width.setter def line_width(self, value): self.mglo.line_width = value @property def point_size(self): return self.mglo.point_size @point_size.setter def point_size(self, value): self.mglo.point_size = value @property def depth_func(self): raise NotImplementedError() @depth_func.setter def depth_func(self, value): self.mglo.depth_func = value @property def blend_func(self): raise NotImplementedError() @blend_func.setter def blend_func(self, value): self.mglo.blend_func = tuple(value) @property def blend_equation(self): raise NotImplementedError() @blend_equation.setter def blend_equation(self, value): if not isinstance(value, tuple): self.mglo.blend_equation = tuple([value]) else: self.mglo.blend_equation = tuple(value) @property def depth_clamp_range(self): raise NotImplementedError() @depth_clamp_range.setter def depth_clamp_range(self, value): self.mglo.depth_clamp_range = value @property def multisample(self): raise NotImplementedError() @multisample.setter def multisample(self, value): self.mglo.multisample = value @property def provoking_vertex(self): raise NotImplementedError() @provoking_vertex.setter def provoking_vertex(self, value): self.mglo.provoking_vertex = value @property def polygon_offset(self): return self.mglo.polygon_offset @polygon_offset.setter def polygon_offset(self, value): factor, units = value self.mglo.polygon_offset = (float(factor), float(units)) @property def viewport(self): return self.mglo.fbo.viewport @viewport.setter def viewport(self, value): x, y, w, h = value self.mglo.fbo.viewport = (int(x), int(y), int(w), int(h)) @property def scissor(self): return self.mglo.fbo.scissor @scissor.setter def scissor(self, value): if value is None: self.mglo.fbo.scissor = None else: x, y, w, h = value self.mglo.fbo.scissor = (int(x), int(y), int(w), int(h)) @property def max_samples(self): return self.mglo.max_samples @property def max_integer_samples(self): return self.mglo.max_integer_samples @property def max_texture_units(self): return self.mglo.max_texture_units @property def max_label_length(self): return self.mglo.max_label_length @property def max_debug_message_length(self): return self.mglo.max_debug_message_length @property def max_debug_group_stack_depth(self): return self.mglo.max_debug_group_stack_depth @property def default_texture_unit(self): return self.mglo.default_texture_unit @default_texture_unit.setter def default_texture_unit(self, value): self.mglo.default_texture_unit = value @property def max_anisotropy(self): return self.mglo.max_anisotropy @property def screen(self): return self._screen @property def wireframe(self): return self.mglo.wireframe @wireframe.setter def wireframe(self, value): self.mglo.wireframe = value @property def front_face(self): return self.mglo.front_face @front_face.setter def front_face(self, value): self.mglo.front_face = str(value) @property def cull_face(self): return self.mglo.cull_face @cull_face.setter def cull_face(self, value): self.mglo.cull_face = str(value) @property def patch_vertices(self): return self.mglo.patch_vertices @patch_vertices.setter def patch_vertices(self, value): self.mglo.patch_vertices = value @property def error(self): return self.mglo.error @property def extensions(self): if self._extensions is None: self._extensions = self.mglo.extensions return self._extensions @property def supports_labels(self): if self.version_code >= 430: return True if "GL_KHR_debug" in self.extensions: return True if "GL_EXT_debug_label" in self.extensions: return True return False @property def supports_debug_scopes(self): if self.version_code >= 430: return True if "GL_KHR_debug" in self.extensions: return True if "GL_EXT_debug_marker" in self.extensions: return True return False @property def info(self): if self._info is None: self._info = self.mglo.info return self._info @property def includes(self): return self.mglo.includes def clear(self, red=0.0, green=0.0, blue=0.0, alpha=0.0, depth=1.0, viewport=None, color=None): if color is not None: red, green, blue, alpha, *_ = tuple(color) + (0.0, 0.0, 0.0, 0.0) self.mglo.fbo.clear(red, green, blue, alpha, depth, viewport) def enable_only(self, flags): self.mglo.enable_only(flags) def enable(self, flags): self.mglo.enable(flags) def disable(self, flags): self.mglo.disable(flags) def enable_direct(self, enum): self.mglo.enable_direct(enum) def disable_direct(self, enum): self.mglo.disable_direct(enum) def finish(self): self.mglo.finish() def copy_buffer(self, dst: Buffer, src: Buffer, size=-1, read_offset=0, write_offset=0): self.mglo.copy_buffer(dst.mglo, src.mglo, size, read_offset, write_offset) def copy_framebuffer(self, dst, src): self.mglo.copy_framebuffer(dst.mglo, src.mglo) def detect_framebuffer(self, glo=None): res = Framebuffer.__new__(Framebuffer) res.mglo, res._size, res._samples, res._glo = self.mglo.detect_framebuffer(glo) res._color_attachments = None res._depth_attachment = None res.ctx = self res._is_reference = True res.extra = None return res def buffer(self, data=None, reserve=0, dynamic=False): if type(reserve) is str: reserve = mgl.strsize(reserve) res = Buffer.__new__(Buffer) res.mglo, res._size, res._glo = self.mglo.buffer(data, reserve, dynamic) res._dynamic = dynamic res.ctx = self res.extra = None return res def external_buffer(self, glo, size): res = Buffer.__new__(Buffer) res.mglo, res._size, res._glo = self.mglo.external_buffer(glo, size) res._dynamic = False res.ctx = self res.extra = None return res def external_texture(self, glo, size, components, samples, dtype): res = Texture.__new__(Texture) res.mglo, res._glo = self.mglo.external_texture(glo, size, components, samples, dtype) res._size = size res._components = components res._samples = samples res._dtype = dtype res._depth = False res.ctx = self res.extra = None return res def texture( self, size, components, data=None, samples=0, alignment=1, dtype="f1", internal_format=None, renderbuffer=False, ): res = Texture.__new__(Texture) res.mglo, res._glo = self.mglo.texture( size, components, data, samples, alignment, dtype, internal_format or 0, renderbuffer ) res._size = size res._components = components res._samples = samples res._dtype = dtype res._depth = False res.ctx = self res.extra = None return res def texture_array(self, size, components, data=None, alignment=1, dtype="f1"): res = TextureArray.__new__(TextureArray) res.mglo, res._glo = self.mglo.texture_array(size, components, data, alignment, dtype) res._size = size res._components = components res._dtype = dtype res.ctx = self res.extra = None return res def texture3d(self, size, components, data=None, alignment=1, dtype="f1"): res = Texture3D.__new__(Texture3D) res._size = size res._components = components res._dtype = dtype res.mglo, res._glo = self.mglo.texture3d(size, components, data, alignment, dtype) res.ctx = self res.extra = None return res def texture_cube(self, size, components, data=None, alignment=1, dtype="f1", internal_format=None): res = TextureCube.__new__(TextureCube) res.mglo, res._glo = self.mglo.texture_cube(size, components, data, alignment, dtype, internal_format or 0) res._size = size res._components = components res._dtype = dtype res.ctx = self res.extra = None return res def depth_texture(self, size, data=None, samples=0, alignment=4, renderbuffer=False): res = Texture.__new__(Texture) res.mglo, res._glo = self.mglo.depth_texture(size, data, samples, alignment, renderbuffer) res._size = size res._components = 1 res._samples = samples res._dtype = "f4" res._depth = True res.ctx = self res.extra = None return res def depth_texture_cube(self, size, data=None, alignment=4): res = TextureCube.__new__(TextureCube) res.mglo, res._glo = self.mglo.depth_texture_cube(size, data, alignment) res._size = size res._components = 1 res._dtype = "f4" res._depth = True res.ctx = self res.extra = None return res def vertex_array(self, *args, **kwargs): if len(args) > 2 and type(args[1]) is Buffer: return self.simple_vertex_array(*args, **kwargs) return self._vertex_array(*args, **kwargs) def _vertex_array(self, program, content, index_buffer=None, index_element_size=4, skip_errors=False, mode=None): locations = program._attribute_locations types = program._attribute_types index_buffer_mglo = None if index_buffer is None else index_buffer.mglo mgl_content = [] for buffer, layout, *attribs in content: if layout is None: layout = detect_format(program, attribs) if skip_errors: attribs = [ types.get(x, None) if type(x) is int else types.get(locations.get(x, -1), None) for x in attribs ] else: attribs = [types[x] if type(x) is int else types[locations[x]] for x in attribs] mgl_content.append((buffer.mglo, layout, *attribs)) res = VertexArray.__new__(VertexArray) res.mglo, res._glo = self.mglo.vertex_array( program.mglo, tuple(mgl_content), index_buffer_mglo, index_element_size, ) res._program = program res._index_buffer = index_buffer res._content = content res._index_element_size = index_element_size if mode is not None: res._mode = mode else: res._mode = self.POINTS if program.is_transform else self.TRIANGLES res.ctx = self res.extra = None res.scope = None return res def simple_vertex_array(self, program, buffer, *attributes, index_buffer=None, index_element_size=4, mode=None): if type(buffer) is list: raise SyntaxError("Change simple_vertex_array to vertex_array") content = [(buffer, detect_format(program, attributes)) + attributes] return self._vertex_array(program, content, index_buffer, index_element_size, mode=mode) def program( self, vertex_shader=None, fragment_shader=None, geometry_shader=None, tess_control_shader=None, tess_evaluation_shader=None, varyings=(), fragment_outputs=None, attributes=None, varyings_capture_mode="interleaved", ): if varyings_capture_mode not in ("interleaved", "separate"): raise ValueError("varyings_capture_mode must be interleaved or separate") if type(varyings) is str: varyings = (varyings,) varyings = tuple(varyings) if fragment_outputs is None: fragment_outputs = {} if isinstance(vertex_shader, str): vertex_shader = vertex_shader.strip() if isinstance(fragment_shader, str): fragment_shader = fragment_shader.strip() res = Program.__new__(Program) res.mglo, _members, res._subroutines, res._geom, res._glo = self.mglo.program( vertex_shader, fragment_shader, geometry_shader, tess_control_shader, tess_evaluation_shader, None, varyings, fragment_outputs, varyings_capture_mode == "interleaved", ) res._members, res._attribute_locations, res._attribute_types = _members if isinstance(vertex_shader, bytes) and int.from_bytes(vertex_shader[:4], "little") == 0x07230203: res._attribute_types = _parse_spv(res._glo, vertex_shader) for info in res._attribute_types.values(): res._attribute_locations[info.name] = info.location if attributes is not None: res._attribute_locations = {} for i, name in enumerate(attributes): res._attribute_locations[name] = i res._is_transform = fragment_shader is None res.ctx = self res.extra = None return res def query(self, samples=False, any_samples=False, time=False, primitives=False): res = Query.__new__(Query) res.mglo = self.mglo.query(samples, any_samples, time, primitives) res.crender = None if samples or any_samples: res.crender = ConditionalRender.__new__(ConditionalRender) res.crender.mglo = res.mglo res.ctx = self res.extra = None return res def scope( self, framebuffer=None, enable_only=None, textures=(), uniform_buffers=(), storage_buffers=(), samplers=(), enable=None, ): if enable is not None: enable_only = enable if framebuffer is None: framebuffer = self.screen if framebuffer is None: raise RuntimeError("A framebuffer must be specified") mgl_textures = tuple((tex.mglo, idx) for tex, idx in textures) mgl_uniform_buffers = tuple((buf.mglo, idx) for buf, idx in uniform_buffers) mgl_storage_buffers = tuple((buf.mglo, idx) for buf, idx in storage_buffers) res = Scope.__new__(Scope) res.mglo = self.mglo.scope( framebuffer.mglo, enable_only, mgl_textures, mgl_uniform_buffers, mgl_storage_buffers, samplers, ) res.ctx = self res._framebuffer = framebuffer res._textures = textures res._uniform_buffers = uniform_buffers res._storage_buffers = storage_buffers res._samplers = samplers res.extra = None return res def simple_framebuffer(self, size, components=4, samples=0, dtype="f1"): return self.framebuffer( self.renderbuffer(size, components, samples=samples, dtype=dtype), self.depth_renderbuffer(size, samples=samples), ) def framebuffer(self, color_attachments=(), depth_attachment=None): if type(color_attachments) is Texture or type(color_attachments) is Renderbuffer: color_attachments = (color_attachments,) ca_mglo = tuple(x.mglo for x in color_attachments) da_mglo = None if depth_attachment is None else depth_attachment.mglo res = Framebuffer.__new__(Framebuffer) res.mglo, res._size, res._samples, res._glo = self.mglo.framebuffer(ca_mglo, da_mglo) res._color_attachments = tuple(color_attachments) res._depth_attachment = depth_attachment res.ctx = self res._is_reference = False res.extra = None return res def empty_framebuffer(self, size, layers=0, samples=0): res = Framebuffer.__new__(Framebuffer) res.mglo, res._size, res._samples, res._glo = self.mglo.empty_framebuffer(size, layers, samples) res._color_attachments = () res._depth_attachment = None res.ctx = self res._is_reference = False res.extra = None return res def renderbuffer(self, size, components=4, samples=0, dtype="f1"): res = Renderbuffer.__new__(Renderbuffer) res.mglo, res._glo = self.mglo.texture(size, components, None, samples, 1, dtype, 0, True) res._size = size res._components = components res._samples = samples res._dtype = dtype res._depth = False res.ctx = self res.extra = None return res def depth_renderbuffer(self, size, samples=0): res = Renderbuffer.__new__(Renderbuffer) res.mglo, res._glo = self.mglo.depth_texture(size, None, samples, 1, True) res._size = size res._components = 1 res._samples = samples res._dtype = "f4" res._depth = True res.ctx = self res.extra = None return res def compute_shader(self, source): res = ComputeShader.__new__(ComputeShader) res.mglo, _members, _, _, res._glo = self.mglo.program( None, None, None, None, None, source, (), {}, False, ) res._members = _members[0] res.ctx = self res.extra = None return res def sampler( self, repeat_x=True, repeat_y=True, repeat_z=True, filter=None, anisotropy=1.0, compare_func="?", border_color=None, min_lod=-1000.0, max_lod=1000.0, texture=None, ): res = Sampler.__new__(Sampler) res.mglo, res._glo = self.mglo.sampler() res.ctx = self res.repeat_x = repeat_x res.repeat_y = repeat_y res.repeat_z = repeat_z res.filter = filter or (9729, 9729) res.anisotropy = anisotropy res.compare_func = compare_func if border_color: res.border_color = border_color res.min_lod = min_lod res.max_lod = max_lod res.extra = None res.texture = texture return res def memory_barrier(self, barriers=ALL_BARRIER_BITS, by_region=False): self.mglo.memory_barrier(barriers, by_region) def clear_samplers(self, start=0, end=-1): self.mglo.clear_samplers(start, end) def core_profile_check(self): profile_mask = self.info["GL_CONTEXT_PROFILE_MASK"] if profile_mask != 1: warnings.warn("The window should request a CORE OpenGL profile") version_code = self.version_code if not version_code: major, minor = map(int, self.info["GL_VERSION"].split(".", 2)[:2]) version_code = major * 100 + minor * 10 if version_code < 330: warnings.warn("The window should support OpenGL 3.3+ (version_code=%d)" % version_code) def __enter__(self): self.mglo.__enter__() return self def __exit__(self, exc_type, exc_val, exc_tb): self.mglo.__exit__(exc_type, exc_val, exc_tb) def release(self): if _store.default_context is self: _store.default_context = None if not isinstance(self.mglo, InvalidObject): self.mglo.release() self.mglo = InvalidObject() def clear_errors(self): if not isinstance(self.mglo, InvalidObject): self.mglo.clear_errors() @contextmanager def debug_scope(self, label, group_id = None, source = "application"): if not isinstance(label, str): raise TypeError(f"Expected label to be a string, got {type(label).__name__}") if not isinstance(group_id, (int, type(None))): raise TypeError(f"Expected group_id to be an int or None, got {type(group_id).__name__}") if source == "application": source_id = _GL_DEBUG_SOURCE_APPLICATION elif source == "external": source_id = _GL_DEBUG_SOURCE_THIRD_PARTY else: raise ValueError(f"source must be 'application' or 'external', got '{source}'") if not self.supports_debug_scopes: # If we don't support debug scopes, silently do nothing # so that client code doesn't have to check for support yield return group_pushed = False try: group_id = hash(label) if group_id is None else group_id self.mglo.push_debug_scope(source_id, group_id, label) group_pushed = True yield finally: if group_pushed: # We raise an exception if glPushDebugGroup (or equivalent) fails, # so we only want to pop the group if it was successfully pushed. # Otherwise, could pop a scope that was pushed somewhere else # and debugging that would be a pain in the ass. self.mglo.pop_debug_scope() def create_context(require=None, standalone=False, share=False, **settings): if require is None: require = 330 if not standalone and not share and not settings and _store.default_context is None: ctx = get_context() if ctx.version_code < require: raise ValueError("Requested OpenGL version {0}, got version {1}".format(require, ctx.version_code)) return ctx mode = "standalone" if standalone else "detect" if share: mode = "share" ctx = Context.__new__(Context) ctx.mglo, ctx.version_code = mgl.create_context(glversion=require, mode=mode, **settings) ctx._info = None ctx._extensions = None ctx.extra = None ctx._gc_mode = None ctx._objects = deque() if ctx.version_code < require: raise ValueError("Requested OpenGL version {0}, got version {1}".format(require, ctx.version_code)) if standalone: ctx._screen = None ctx.fbo = None else: # Default framebuffer ctx._screen = ctx.detect_framebuffer(0) # Currently bound framebuffer ctx.fbo = ctx.detect_framebuffer() ctx.mglo.fbo = ctx.fbo.mglo _store.default_context = ctx return ctx def init_context(loader=None): if loader is None: from _moderngl import DefaultLoader loader = DefaultLoader() ctx = Context.__new__(Context) ctx.mglo, ctx.version_code = mgl.create_context(context=loader) ctx._info = None ctx._extensions = None ctx.extra = None ctx._gc_mode = None ctx._objects = deque() ctx._screen = ctx.detect_framebuffer(0) ctx.fbo = ctx.detect_framebuffer() ctx.mglo.fbo = ctx.fbo.mglo _store.default_context = ctx def get_context(): if _store.default_context is None: init_context() return _store.default_context def create_standalone_context(**kwargs): return create_context(standalone=True, **kwargs) def detect_format(program, attributes, mode="mgl"): def fmt(attr): # Translate shape format into attribute format mgl_fmt = {"d": "f8", "I": "u"} # moderngl attribute format uses f, i and u if mode == "mgl": return ( attr.array_length * attr.dimension, mgl_fmt.get(attr.shape) or attr.shape, ) # struct attribute format uses f, d, i and I elif mode == "struct": return attr.array_length * attr.dimension, attr.shape else: raise ValueError("invalid format mode: {0}".format(mode)) locations = program._attribute_locations types = program._attribute_types return " ".join("%d%s" % fmt(types[x] if type(x) is int else types[locations[x]]) for x in attributes) def _resolve_module_constants(scope): _constants = [ "NOTHING", "BLEND", "DEPTH_TEST", "CULL_FACE", "RASTERIZER_DISCARD", "PROGRAM_POINT_SIZE", "POINTS", "LINES", "LINE_LOOP", "LINE_STRIP", "TRIANGLES", "TRIANGLE_STRIP", "TRIANGLE_FAN", "LINES_ADJACENCY", "LINE_STRIP_ADJACENCY", "TRIANGLES_ADJACENCY", "TRIANGLE_STRIP_ADJACENCY", "PATCHES", "NEAREST", "LINEAR", "NEAREST_MIPMAP_NEAREST", "LINEAR_MIPMAP_NEAREST", "NEAREST_MIPMAP_LINEAR", "LINEAR_MIPMAP_LINEAR", "ZERO", "ONE", "SRC_COLOR", "ONE_MINUS_SRC_COLOR", "SRC_ALPHA", "ONE_MINUS_SRC_ALPHA", "DST_ALPHA", "ONE_MINUS_DST_ALPHA", "DST_COLOR", "ONE_MINUS_DST_COLOR", "DEFAULT_BLENDING", "ADDITIVE_BLENDING", "PREMULTIPLIED_ALPHA", "FUNC_ADD", "FUNC_SUBTRACT", "FUNC_REVERSE_SUBTRACT", "MIN", "MAX", "FIRST_VERTEX_CONVENTION", "LAST_VERTEX_CONVENTION", "VERTEX_ATTRIB_ARRAY_BARRIER_BIT", "ELEMENT_ARRAY_BARRIER_BIT", "UNIFORM_BARRIER_BIT", "TEXTURE_FETCH_BARRIER_BIT", "SHADER_IMAGE_ACCESS_BARRIER_BIT", "COMMAND_BARRIER_BIT", "PIXEL_BUFFER_BARRIER_BIT", "TEXTURE_UPDATE_BARRIER_BIT", "BUFFER_UPDATE_BARRIER_BIT", "FRAMEBUFFER_BARRIER_BIT", "TRANSFORM_FEEDBACK_BARRIER_BIT", "ATOMIC_COUNTER_BARRIER_BIT", "SHADER_STORAGE_BARRIER_BIT", "ALL_BARRIER_BITS", ] for c in _constants: scope[c] = getattr(Context, c) _resolve_module_constants(locals()) moderngl-moderngl-773b733/pyproject.toml000066400000000000000000000001711470420062000203150ustar00rootroot00000000000000[build-system] requires = [ "setuptools >= 40.6.2", "wheel >= 0.30.0", ] build-backend = "setuptools.build_meta" moderngl-moderngl-773b733/setup.py000077500000000000000000000055231470420062000171240ustar00rootroot00000000000000import os import platform import re import sys from setuptools import Extension, setup PLATFORMS = {"windows", "linux", "darwin", "cygwin", "android"} target = platform.system().lower() if "pydroid3" in sys.executable.lower(): target = "android" for known in PLATFORMS: if target.startswith(known): target = known if target not in PLATFORMS: target = "linux" libraries = { "windows": [], "linux": [], "cygwin": [], "darwin": [], "android": [], } extra_compile_args = { "windows": ["-fpermissive"], "linux": ["-fpermissive"], "cygwin": ["-fpermissive"], "darwin": ["-Wno-deprecated-declarations"], "android": ["-fpermissive"], } extra_linker_args = { "windows": [], "linux": [], "cygwin": [], "darwin": [], "android": [], } if os.getenv("MODERNGL_COVERAGE"): extra_compile_args[target] += ["-O0", "--coverage"] extra_linker_args[target] += ["-O0", "--coverage"] mgl = Extension( name="moderngl.mgl", libraries=libraries[target], extra_compile_args=extra_compile_args[target], extra_link_args=extra_linker_args[target], sources=["src/moderngl.cpp"], ) short_description = "ModernGL: High performance rendering for Python 3" with open("README.md") as f: long_description = re.sub(r"]*>|\r", "", f.read(), flags=re.M) keywords = [ "ModernGL", "OpenGL", "PyOpenGL", "rendering", "graphics", "shader", "GLSL", "GPU", "visualization", "2D", "3D", ] classifiers = [ "Development Status :: 5 - Production/Stable", "License :: OSI Approved", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Topic :: Games/Entertainment", "Topic :: Multimedia :: Graphics", "Topic :: Multimedia :: Graphics :: 3D Rendering", "Topic :: Scientific/Engineering :: Visualization", "Programming Language :: Python :: 3 :: Only", ] project_urls = { "Documentation": "https://moderngl.readthedocs.io/", "Source": "https://github.com/moderngl/moderngl/", "Bug Tracker": "https://github.com/moderngl/moderngl/issues/", } setup( name="moderngl", version="5.12.0", description=short_description, long_description=long_description, long_description_content_type="text/markdown", url="https://github.com/moderngl/moderngl", author="Szabolcs Dombi", author_email="szabolcs@szabolcsdombi.com", license="MIT", project_urls=project_urls, classifiers=classifiers, keywords=keywords, include_package_data=True, package_data={"moderngl-stubs": ["__init__.pyi"]}, packages=["moderngl", "moderngl-stubs"], py_modules=["_moderngl"], ext_modules=[mgl], platforms=["any"], extras_require={ "headless": ["glcontext>=3.0.0"], }, install_requires=["glcontext>=3.0.0"], python_requires=">=3.7", ) moderngl-moderngl-773b733/src/000077500000000000000000000000001470420062000161715ustar00rootroot00000000000000moderngl-moderngl-773b733/src/gl_methods.hpp000066400000000000000000003405021470420062000210330ustar00rootroot00000000000000#pragma once #include "glcorearb.h" #ifdef MemoryBarrier #undef MemoryBarrier #endif struct GLMethods { PFNGLCULLFACEPROC CullFace; PFNGLFRONTFACEPROC FrontFace; PFNGLHINTPROC Hint; PFNGLLINEWIDTHPROC LineWidth; PFNGLPOINTSIZEPROC PointSize; PFNGLPOLYGONMODEPROC PolygonMode; PFNGLSCISSORPROC Scissor; PFNGLTEXPARAMETERFPROC TexParameterf; PFNGLTEXPARAMETERFVPROC TexParameterfv; PFNGLTEXPARAMETERIPROC TexParameteri; PFNGLTEXPARAMETERIVPROC TexParameteriv; PFNGLTEXIMAGE1DPROC TexImage1D; PFNGLTEXIMAGE2DPROC TexImage2D; PFNGLDRAWBUFFERPROC DrawBuffer; PFNGLCLEARPROC Clear; PFNGLCLEARCOLORPROC ClearColor; PFNGLCLEARSTENCILPROC ClearStencil; PFNGLCLEARDEPTHPROC ClearDepth; PFNGLSTENCILMASKPROC StencilMask; PFNGLCOLORMASKPROC ColorMask; PFNGLDEPTHMASKPROC DepthMask; PFNGLDISABLEPROC Disable; PFNGLENABLEPROC Enable; PFNGLFINISHPROC Finish; PFNGLFLUSHPROC Flush; PFNGLBLENDFUNCPROC BlendFunc; PFNGLLOGICOPPROC LogicOp; PFNGLSTENCILFUNCPROC StencilFunc; PFNGLSTENCILOPPROC StencilOp; PFNGLDEPTHFUNCPROC DepthFunc; PFNGLPIXELSTOREFPROC PixelStoref; PFNGLPIXELSTOREIPROC PixelStorei; PFNGLREADBUFFERPROC ReadBuffer; PFNGLREADPIXELSPROC ReadPixels; PFNGLGETBOOLEANVPROC GetBooleanv; PFNGLGETDOUBLEVPROC GetDoublev; PFNGLGETERRORPROC GetError; PFNGLGETFLOATVPROC GetFloatv; PFNGLGETINTEGERVPROC GetIntegerv; PFNGLGETSTRINGPROC GetString; PFNGLGETTEXIMAGEPROC GetTexImage; PFNGLGETTEXPARAMETERFVPROC GetTexParameterfv; PFNGLGETTEXPARAMETERIVPROC GetTexParameteriv; PFNGLGETTEXLEVELPARAMETERFVPROC GetTexLevelParameterfv; PFNGLGETTEXLEVELPARAMETERIVPROC GetTexLevelParameteriv; PFNGLISENABLEDPROC IsEnabled; PFNGLDEPTHRANGEPROC DepthRange; PFNGLVIEWPORTPROC Viewport; PFNGLDRAWARRAYSPROC DrawArrays; PFNGLDRAWELEMENTSPROC DrawElements; PFNGLGETPOINTERVPROC GetPointerv; PFNGLPOLYGONOFFSETPROC PolygonOffset; PFNGLCOPYTEXIMAGE1DPROC CopyTexImage1D; PFNGLCOPYTEXIMAGE2DPROC CopyTexImage2D; PFNGLCOPYTEXSUBIMAGE1DPROC CopyTexSubImage1D; PFNGLCOPYTEXSUBIMAGE2DPROC CopyTexSubImage2D; PFNGLTEXSUBIMAGE1DPROC TexSubImage1D; PFNGLTEXSUBIMAGE2DPROC TexSubImage2D; PFNGLBINDTEXTUREPROC BindTexture; PFNGLDELETETEXTURESPROC DeleteTextures; PFNGLGENTEXTURESPROC GenTextures; PFNGLISTEXTUREPROC IsTexture; PFNGLDRAWRANGEELEMENTSPROC DrawRangeElements; PFNGLTEXIMAGE3DPROC TexImage3D; PFNGLTEXSUBIMAGE3DPROC TexSubImage3D; PFNGLCOPYTEXSUBIMAGE3DPROC CopyTexSubImage3D; PFNGLACTIVETEXTUREPROC ActiveTexture; PFNGLSAMPLECOVERAGEPROC SampleCoverage; PFNGLCOMPRESSEDTEXIMAGE3DPROC CompressedTexImage3D; PFNGLCOMPRESSEDTEXIMAGE2DPROC CompressedTexImage2D; PFNGLCOMPRESSEDTEXIMAGE1DPROC CompressedTexImage1D; PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC CompressedTexSubImage3D; PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC CompressedTexSubImage2D; PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC CompressedTexSubImage1D; PFNGLGETCOMPRESSEDTEXIMAGEPROC GetCompressedTexImage; PFNGLBLENDFUNCSEPARATEPROC BlendFuncSeparate; PFNGLMULTIDRAWARRAYSPROC MultiDrawArrays; PFNGLMULTIDRAWELEMENTSPROC MultiDrawElements; PFNGLPOINTPARAMETERFPROC PointParameterf; PFNGLPOINTPARAMETERFVPROC PointParameterfv; PFNGLPOINTPARAMETERIPROC PointParameteri; PFNGLPOINTPARAMETERIVPROC PointParameteriv; PFNGLBLENDCOLORPROC BlendColor; PFNGLBLENDEQUATIONPROC BlendEquation; PFNGLGENQUERIESPROC GenQueries; PFNGLDELETEQUERIESPROC DeleteQueries; PFNGLISQUERYPROC IsQuery; PFNGLBEGINQUERYPROC BeginQuery; PFNGLENDQUERYPROC EndQuery; PFNGLGETQUERYIVPROC GetQueryiv; PFNGLGETQUERYOBJECTIVPROC GetQueryObjectiv; PFNGLGETQUERYOBJECTUIVPROC GetQueryObjectuiv; PFNGLBINDBUFFERPROC BindBuffer; PFNGLDELETEBUFFERSPROC DeleteBuffers; PFNGLGENBUFFERSPROC GenBuffers; PFNGLISBUFFERPROC IsBuffer; PFNGLBUFFERDATAPROC BufferData; PFNGLBUFFERSUBDATAPROC BufferSubData; PFNGLGETBUFFERSUBDATAPROC GetBufferSubData; PFNGLMAPBUFFERPROC MapBuffer; PFNGLUNMAPBUFFERPROC UnmapBuffer; PFNGLGETBUFFERPARAMETERIVPROC GetBufferParameteriv; PFNGLGETBUFFERPOINTERVPROC GetBufferPointerv; PFNGLBLENDEQUATIONSEPARATEPROC BlendEquationSeparate; PFNGLDRAWBUFFERSPROC DrawBuffers; PFNGLSTENCILOPSEPARATEPROC StencilOpSeparate; PFNGLSTENCILFUNCSEPARATEPROC StencilFuncSeparate; PFNGLSTENCILMASKSEPARATEPROC StencilMaskSeparate; PFNGLATTACHSHADERPROC AttachShader; PFNGLBINDATTRIBLOCATIONPROC BindAttribLocation; PFNGLCOMPILESHADERPROC CompileShader; PFNGLCREATEPROGRAMPROC CreateProgram; PFNGLCREATESHADERPROC CreateShader; PFNGLDELETEPROGRAMPROC DeleteProgram; PFNGLDELETESHADERPROC DeleteShader; PFNGLDETACHSHADERPROC DetachShader; PFNGLDISABLEVERTEXATTRIBARRAYPROC DisableVertexAttribArray; PFNGLENABLEVERTEXATTRIBARRAYPROC EnableVertexAttribArray; PFNGLGETACTIVEATTRIBPROC GetActiveAttrib; PFNGLGETACTIVEUNIFORMPROC GetActiveUniform; PFNGLGETATTACHEDSHADERSPROC GetAttachedShaders; PFNGLGETATTRIBLOCATIONPROC GetAttribLocation; PFNGLGETPROGRAMIVPROC GetProgramiv; PFNGLGETPROGRAMINFOLOGPROC GetProgramInfoLog; PFNGLGETSHADERIVPROC GetShaderiv; PFNGLGETSHADERINFOLOGPROC GetShaderInfoLog; PFNGLGETSHADERSOURCEPROC GetShaderSource; PFNGLGETUNIFORMLOCATIONPROC GetUniformLocation; PFNGLGETUNIFORMFVPROC GetUniformfv; PFNGLGETUNIFORMIVPROC GetUniformiv; PFNGLGETVERTEXATTRIBDVPROC GetVertexAttribdv; PFNGLGETVERTEXATTRIBFVPROC GetVertexAttribfv; PFNGLGETVERTEXATTRIBIVPROC GetVertexAttribiv; PFNGLGETVERTEXATTRIBPOINTERVPROC GetVertexAttribPointerv; PFNGLISPROGRAMPROC IsProgram; PFNGLISSHADERPROC IsShader; PFNGLLINKPROGRAMPROC LinkProgram; PFNGLSHADERSOURCEPROC ShaderSource; PFNGLUSEPROGRAMPROC UseProgram; PFNGLUNIFORM1FPROC Uniform1f; PFNGLUNIFORM2FPROC Uniform2f; PFNGLUNIFORM3FPROC Uniform3f; PFNGLUNIFORM4FPROC Uniform4f; PFNGLUNIFORM1IPROC Uniform1i; PFNGLUNIFORM2IPROC Uniform2i; PFNGLUNIFORM3IPROC Uniform3i; PFNGLUNIFORM4IPROC Uniform4i; PFNGLUNIFORM1FVPROC Uniform1fv; PFNGLUNIFORM2FVPROC Uniform2fv; PFNGLUNIFORM3FVPROC Uniform3fv; PFNGLUNIFORM4FVPROC Uniform4fv; PFNGLUNIFORM1IVPROC Uniform1iv; PFNGLUNIFORM2IVPROC Uniform2iv; PFNGLUNIFORM3IVPROC Uniform3iv; PFNGLUNIFORM4IVPROC Uniform4iv; PFNGLUNIFORMMATRIX2FVPROC UniformMatrix2fv; PFNGLUNIFORMMATRIX3FVPROC UniformMatrix3fv; PFNGLUNIFORMMATRIX4FVPROC UniformMatrix4fv; PFNGLVALIDATEPROGRAMPROC ValidateProgram; PFNGLVERTEXATTRIB1DPROC VertexAttrib1d; PFNGLVERTEXATTRIB1DVPROC VertexAttrib1dv; PFNGLVERTEXATTRIB1FPROC VertexAttrib1f; PFNGLVERTEXATTRIB1FVPROC VertexAttrib1fv; PFNGLVERTEXATTRIB1SPROC VertexAttrib1s; PFNGLVERTEXATTRIB1SVPROC VertexAttrib1sv; PFNGLVERTEXATTRIB2DPROC VertexAttrib2d; PFNGLVERTEXATTRIB2DVPROC VertexAttrib2dv; PFNGLVERTEXATTRIB2FPROC VertexAttrib2f; PFNGLVERTEXATTRIB2FVPROC VertexAttrib2fv; PFNGLVERTEXATTRIB2SPROC VertexAttrib2s; PFNGLVERTEXATTRIB2SVPROC VertexAttrib2sv; PFNGLVERTEXATTRIB3DPROC VertexAttrib3d; PFNGLVERTEXATTRIB3DVPROC VertexAttrib3dv; PFNGLVERTEXATTRIB3FPROC VertexAttrib3f; PFNGLVERTEXATTRIB3FVPROC VertexAttrib3fv; PFNGLVERTEXATTRIB3SPROC VertexAttrib3s; PFNGLVERTEXATTRIB3SVPROC VertexAttrib3sv; PFNGLVERTEXATTRIB4NBVPROC VertexAttrib4Nbv; PFNGLVERTEXATTRIB4NIVPROC VertexAttrib4Niv; PFNGLVERTEXATTRIB4NSVPROC VertexAttrib4Nsv; PFNGLVERTEXATTRIB4NUBPROC VertexAttrib4Nub; PFNGLVERTEXATTRIB4NUBVPROC VertexAttrib4Nubv; PFNGLVERTEXATTRIB4NUIVPROC VertexAttrib4Nuiv; PFNGLVERTEXATTRIB4NUSVPROC VertexAttrib4Nusv; PFNGLVERTEXATTRIB4BVPROC VertexAttrib4bv; PFNGLVERTEXATTRIB4DPROC VertexAttrib4d; PFNGLVERTEXATTRIB4DVPROC VertexAttrib4dv; PFNGLVERTEXATTRIB4FPROC VertexAttrib4f; PFNGLVERTEXATTRIB4FVPROC VertexAttrib4fv; PFNGLVERTEXATTRIB4IVPROC VertexAttrib4iv; PFNGLVERTEXATTRIB4SPROC VertexAttrib4s; PFNGLVERTEXATTRIB4SVPROC VertexAttrib4sv; PFNGLVERTEXATTRIB4UBVPROC VertexAttrib4ubv; PFNGLVERTEXATTRIB4UIVPROC VertexAttrib4uiv; PFNGLVERTEXATTRIB4USVPROC VertexAttrib4usv; PFNGLVERTEXATTRIBPOINTERPROC VertexAttribPointer; PFNGLUNIFORMMATRIX2X3FVPROC UniformMatrix2x3fv; PFNGLUNIFORMMATRIX3X2FVPROC UniformMatrix3x2fv; PFNGLUNIFORMMATRIX2X4FVPROC UniformMatrix2x4fv; PFNGLUNIFORMMATRIX4X2FVPROC UniformMatrix4x2fv; PFNGLUNIFORMMATRIX3X4FVPROC UniformMatrix3x4fv; PFNGLUNIFORMMATRIX4X3FVPROC UniformMatrix4x3fv; PFNGLCOLORMASKIPROC ColorMaski; PFNGLGETBOOLEANI_VPROC GetBooleani_v; PFNGLGETINTEGERI_VPROC GetIntegeri_v; PFNGLENABLEIPROC Enablei; PFNGLDISABLEIPROC Disablei; PFNGLISENABLEDIPROC IsEnabledi; PFNGLBEGINTRANSFORMFEEDBACKPROC BeginTransformFeedback; PFNGLENDTRANSFORMFEEDBACKPROC EndTransformFeedback; PFNGLBINDBUFFERRANGEPROC BindBufferRange; PFNGLBINDBUFFERBASEPROC BindBufferBase; PFNGLTRANSFORMFEEDBACKVARYINGSPROC TransformFeedbackVaryings; PFNGLGETTRANSFORMFEEDBACKVARYINGPROC GetTransformFeedbackVarying; PFNGLCLAMPCOLORPROC ClampColor; PFNGLBEGINCONDITIONALRENDERPROC BeginConditionalRender; PFNGLENDCONDITIONALRENDERPROC EndConditionalRender; PFNGLVERTEXATTRIBIPOINTERPROC VertexAttribIPointer; PFNGLGETVERTEXATTRIBIIVPROC GetVertexAttribIiv; PFNGLGETVERTEXATTRIBIUIVPROC GetVertexAttribIuiv; PFNGLVERTEXATTRIBI1IPROC VertexAttribI1i; PFNGLVERTEXATTRIBI2IPROC VertexAttribI2i; PFNGLVERTEXATTRIBI3IPROC VertexAttribI3i; PFNGLVERTEXATTRIBI4IPROC VertexAttribI4i; PFNGLVERTEXATTRIBI1UIPROC VertexAttribI1ui; PFNGLVERTEXATTRIBI2UIPROC VertexAttribI2ui; PFNGLVERTEXATTRIBI3UIPROC VertexAttribI3ui; PFNGLVERTEXATTRIBI4UIPROC VertexAttribI4ui; PFNGLVERTEXATTRIBI1IVPROC VertexAttribI1iv; PFNGLVERTEXATTRIBI2IVPROC VertexAttribI2iv; PFNGLVERTEXATTRIBI3IVPROC VertexAttribI3iv; PFNGLVERTEXATTRIBI4IVPROC VertexAttribI4iv; PFNGLVERTEXATTRIBI1UIVPROC VertexAttribI1uiv; PFNGLVERTEXATTRIBI2UIVPROC VertexAttribI2uiv; PFNGLVERTEXATTRIBI3UIVPROC VertexAttribI3uiv; PFNGLVERTEXATTRIBI4UIVPROC VertexAttribI4uiv; PFNGLVERTEXATTRIBI4BVPROC VertexAttribI4bv; PFNGLVERTEXATTRIBI4SVPROC VertexAttribI4sv; PFNGLVERTEXATTRIBI4UBVPROC VertexAttribI4ubv; PFNGLVERTEXATTRIBI4USVPROC VertexAttribI4usv; PFNGLGETUNIFORMUIVPROC GetUniformuiv; PFNGLBINDFRAGDATALOCATIONPROC BindFragDataLocation; PFNGLGETFRAGDATALOCATIONPROC GetFragDataLocation; PFNGLUNIFORM1UIPROC Uniform1ui; PFNGLUNIFORM2UIPROC Uniform2ui; PFNGLUNIFORM3UIPROC Uniform3ui; PFNGLUNIFORM4UIPROC Uniform4ui; PFNGLUNIFORM1UIVPROC Uniform1uiv; PFNGLUNIFORM2UIVPROC Uniform2uiv; PFNGLUNIFORM3UIVPROC Uniform3uiv; PFNGLUNIFORM4UIVPROC Uniform4uiv; PFNGLTEXPARAMETERIIVPROC TexParameterIiv; PFNGLTEXPARAMETERIUIVPROC TexParameterIuiv; PFNGLGETTEXPARAMETERIIVPROC GetTexParameterIiv; PFNGLGETTEXPARAMETERIUIVPROC GetTexParameterIuiv; PFNGLCLEARBUFFERIVPROC ClearBufferiv; PFNGLCLEARBUFFERUIVPROC ClearBufferuiv; PFNGLCLEARBUFFERFVPROC ClearBufferfv; PFNGLCLEARBUFFERFIPROC ClearBufferfi; PFNGLGETSTRINGIPROC GetStringi; PFNGLISRENDERBUFFERPROC IsRenderbuffer; PFNGLBINDRENDERBUFFERPROC BindRenderbuffer; PFNGLDELETERENDERBUFFERSPROC DeleteRenderbuffers; PFNGLGENRENDERBUFFERSPROC GenRenderbuffers; PFNGLRENDERBUFFERSTORAGEPROC RenderbufferStorage; PFNGLGETRENDERBUFFERPARAMETERIVPROC GetRenderbufferParameteriv; PFNGLISFRAMEBUFFERPROC IsFramebuffer; PFNGLBINDFRAMEBUFFERPROC BindFramebuffer; PFNGLDELETEFRAMEBUFFERSPROC DeleteFramebuffers; PFNGLGENFRAMEBUFFERSPROC GenFramebuffers; PFNGLCHECKFRAMEBUFFERSTATUSPROC CheckFramebufferStatus; PFNGLFRAMEBUFFERTEXTURE1DPROC FramebufferTexture1D; PFNGLFRAMEBUFFERTEXTURE2DPROC FramebufferTexture2D; PFNGLFRAMEBUFFERTEXTURE3DPROC FramebufferTexture3D; PFNGLFRAMEBUFFERRENDERBUFFERPROC FramebufferRenderbuffer; PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetFramebufferAttachmentParameteriv; PFNGLGENERATEMIPMAPPROC GenerateMipmap; PFNGLBLITFRAMEBUFFERPROC BlitFramebuffer; PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC RenderbufferStorageMultisample; PFNGLFRAMEBUFFERTEXTURELAYERPROC FramebufferTextureLayer; PFNGLMAPBUFFERRANGEPROC MapBufferRange; PFNGLFLUSHMAPPEDBUFFERRANGEPROC FlushMappedBufferRange; PFNGLBINDVERTEXARRAYPROC BindVertexArray; PFNGLDELETEVERTEXARRAYSPROC DeleteVertexArrays; PFNGLGENVERTEXARRAYSPROC GenVertexArrays; PFNGLISVERTEXARRAYPROC IsVertexArray; PFNGLDRAWARRAYSINSTANCEDPROC DrawArraysInstanced; PFNGLDRAWELEMENTSINSTANCEDPROC DrawElementsInstanced; PFNGLTEXBUFFERPROC TexBuffer; PFNGLPRIMITIVERESTARTINDEXPROC PrimitiveRestartIndex; PFNGLCOPYBUFFERSUBDATAPROC CopyBufferSubData; PFNGLGETUNIFORMINDICESPROC GetUniformIndices; PFNGLGETACTIVEUNIFORMSIVPROC GetActiveUniformsiv; PFNGLGETACTIVEUNIFORMNAMEPROC GetActiveUniformName; PFNGLGETUNIFORMBLOCKINDEXPROC GetUniformBlockIndex; PFNGLGETACTIVEUNIFORMBLOCKIVPROC GetActiveUniformBlockiv; PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC GetActiveUniformBlockName; PFNGLUNIFORMBLOCKBINDINGPROC UniformBlockBinding; PFNGLDRAWELEMENTSBASEVERTEXPROC DrawElementsBaseVertex; PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC DrawRangeElementsBaseVertex; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC DrawElementsInstancedBaseVertex; PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC MultiDrawElementsBaseVertex; PFNGLPROVOKINGVERTEXPROC ProvokingVertex; PFNGLFENCESYNCPROC FenceSync; PFNGLISSYNCPROC IsSync; PFNGLDELETESYNCPROC DeleteSync; PFNGLCLIENTWAITSYNCPROC ClientWaitSync; PFNGLWAITSYNCPROC WaitSync; PFNGLGETINTEGER64VPROC GetInteger64v; PFNGLGETSYNCIVPROC GetSynciv; PFNGLGETINTEGER64I_VPROC GetInteger64i_v; PFNGLGETBUFFERPARAMETERI64VPROC GetBufferParameteri64v; PFNGLFRAMEBUFFERTEXTUREPROC FramebufferTexture; PFNGLTEXIMAGE2DMULTISAMPLEPROC TexImage2DMultisample; PFNGLTEXIMAGE3DMULTISAMPLEPROC TexImage3DMultisample; PFNGLGETMULTISAMPLEFVPROC GetMultisamplefv; PFNGLSAMPLEMASKIPROC SampleMaski; PFNGLBINDFRAGDATALOCATIONINDEXEDPROC BindFragDataLocationIndexed; PFNGLGETFRAGDATAINDEXPROC GetFragDataIndex; PFNGLGENSAMPLERSPROC GenSamplers; PFNGLDELETESAMPLERSPROC DeleteSamplers; PFNGLISSAMPLERPROC IsSampler; PFNGLBINDSAMPLERPROC BindSampler; PFNGLSAMPLERPARAMETERIPROC SamplerParameteri; PFNGLSAMPLERPARAMETERIVPROC SamplerParameteriv; PFNGLSAMPLERPARAMETERFPROC SamplerParameterf; PFNGLSAMPLERPARAMETERFVPROC SamplerParameterfv; PFNGLSAMPLERPARAMETERIIVPROC SamplerParameterIiv; PFNGLSAMPLERPARAMETERIUIVPROC SamplerParameterIuiv; PFNGLGETSAMPLERPARAMETERIVPROC GetSamplerParameteriv; PFNGLGETSAMPLERPARAMETERIIVPROC GetSamplerParameterIiv; PFNGLGETSAMPLERPARAMETERFVPROC GetSamplerParameterfv; PFNGLGETSAMPLERPARAMETERIUIVPROC GetSamplerParameterIuiv; PFNGLQUERYCOUNTERPROC QueryCounter; PFNGLGETQUERYOBJECTI64VPROC GetQueryObjecti64v; PFNGLGETQUERYOBJECTUI64VPROC GetQueryObjectui64v; PFNGLVERTEXATTRIBDIVISORPROC VertexAttribDivisor; PFNGLVERTEXATTRIBP1UIPROC VertexAttribP1ui; PFNGLVERTEXATTRIBP1UIVPROC VertexAttribP1uiv; PFNGLVERTEXATTRIBP2UIPROC VertexAttribP2ui; PFNGLVERTEXATTRIBP2UIVPROC VertexAttribP2uiv; PFNGLVERTEXATTRIBP3UIPROC VertexAttribP3ui; PFNGLVERTEXATTRIBP3UIVPROC VertexAttribP3uiv; PFNGLVERTEXATTRIBP4UIPROC VertexAttribP4ui; PFNGLVERTEXATTRIBP4UIVPROC VertexAttribP4uiv; PFNGLMINSAMPLESHADINGPROC MinSampleShading; PFNGLBLENDEQUATIONIPROC BlendEquationi; PFNGLBLENDEQUATIONSEPARATEIPROC BlendEquationSeparatei; PFNGLBLENDFUNCIPROC BlendFunci; PFNGLBLENDFUNCSEPARATEIPROC BlendFuncSeparatei; PFNGLDRAWARRAYSINDIRECTPROC DrawArraysIndirect; PFNGLDRAWELEMENTSINDIRECTPROC DrawElementsIndirect; PFNGLUNIFORM1DPROC Uniform1d; PFNGLUNIFORM2DPROC Uniform2d; PFNGLUNIFORM3DPROC Uniform3d; PFNGLUNIFORM4DPROC Uniform4d; PFNGLUNIFORM1DVPROC Uniform1dv; PFNGLUNIFORM2DVPROC Uniform2dv; PFNGLUNIFORM3DVPROC Uniform3dv; PFNGLUNIFORM4DVPROC Uniform4dv; PFNGLUNIFORMMATRIX2DVPROC UniformMatrix2dv; PFNGLUNIFORMMATRIX3DVPROC UniformMatrix3dv; PFNGLUNIFORMMATRIX4DVPROC UniformMatrix4dv; PFNGLUNIFORMMATRIX2X3DVPROC UniformMatrix2x3dv; PFNGLUNIFORMMATRIX2X4DVPROC UniformMatrix2x4dv; PFNGLUNIFORMMATRIX3X2DVPROC UniformMatrix3x2dv; PFNGLUNIFORMMATRIX3X4DVPROC UniformMatrix3x4dv; PFNGLUNIFORMMATRIX4X2DVPROC UniformMatrix4x2dv; PFNGLUNIFORMMATRIX4X3DVPROC UniformMatrix4x3dv; PFNGLGETUNIFORMDVPROC GetUniformdv; PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC GetSubroutineUniformLocation; PFNGLGETSUBROUTINEINDEXPROC GetSubroutineIndex; PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC GetActiveSubroutineUniformiv; PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC GetActiveSubroutineUniformName; PFNGLGETACTIVESUBROUTINENAMEPROC GetActiveSubroutineName; PFNGLUNIFORMSUBROUTINESUIVPROC UniformSubroutinesuiv; PFNGLGETUNIFORMSUBROUTINEUIVPROC GetUniformSubroutineuiv; PFNGLGETPROGRAMSTAGEIVPROC GetProgramStageiv; PFNGLPATCHPARAMETERIPROC PatchParameteri; PFNGLPATCHPARAMETERFVPROC PatchParameterfv; PFNGLBINDTRANSFORMFEEDBACKPROC BindTransformFeedback; PFNGLDELETETRANSFORMFEEDBACKSPROC DeleteTransformFeedbacks; PFNGLGENTRANSFORMFEEDBACKSPROC GenTransformFeedbacks; PFNGLISTRANSFORMFEEDBACKPROC IsTransformFeedback; PFNGLPAUSETRANSFORMFEEDBACKPROC PauseTransformFeedback; PFNGLRESUMETRANSFORMFEEDBACKPROC ResumeTransformFeedback; PFNGLDRAWTRANSFORMFEEDBACKPROC DrawTransformFeedback; PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC DrawTransformFeedbackStream; PFNGLBEGINQUERYINDEXEDPROC BeginQueryIndexed; PFNGLENDQUERYINDEXEDPROC EndQueryIndexed; PFNGLGETQUERYINDEXEDIVPROC GetQueryIndexediv; PFNGLRELEASESHADERCOMPILERPROC ReleaseShaderCompiler; PFNGLSHADERBINARYPROC ShaderBinary; PFNGLGETSHADERPRECISIONFORMATPROC GetShaderPrecisionFormat; PFNGLDEPTHRANGEFPROC DepthRangef; PFNGLCLEARDEPTHFPROC ClearDepthf; PFNGLGETPROGRAMBINARYPROC GetProgramBinary; PFNGLPROGRAMBINARYPROC ProgramBinary; PFNGLPROGRAMPARAMETERIPROC ProgramParameteri; PFNGLUSEPROGRAMSTAGESPROC UseProgramStages; PFNGLACTIVESHADERPROGRAMPROC ActiveShaderProgram; PFNGLCREATESHADERPROGRAMVPROC CreateShaderProgramv; PFNGLBINDPROGRAMPIPELINEPROC BindProgramPipeline; PFNGLDELETEPROGRAMPIPELINESPROC DeleteProgramPipelines; PFNGLGENPROGRAMPIPELINESPROC GenProgramPipelines; PFNGLISPROGRAMPIPELINEPROC IsProgramPipeline; PFNGLGETPROGRAMPIPELINEIVPROC GetProgramPipelineiv; PFNGLPROGRAMUNIFORM1IPROC ProgramUniform1i; PFNGLPROGRAMUNIFORM1IVPROC ProgramUniform1iv; PFNGLPROGRAMUNIFORM1FPROC ProgramUniform1f; PFNGLPROGRAMUNIFORM1FVPROC ProgramUniform1fv; PFNGLPROGRAMUNIFORM1DPROC ProgramUniform1d; PFNGLPROGRAMUNIFORM1DVPROC ProgramUniform1dv; PFNGLPROGRAMUNIFORM1UIPROC ProgramUniform1ui; PFNGLPROGRAMUNIFORM1UIVPROC ProgramUniform1uiv; PFNGLPROGRAMUNIFORM2IPROC ProgramUniform2i; PFNGLPROGRAMUNIFORM2IVPROC ProgramUniform2iv; PFNGLPROGRAMUNIFORM2FPROC ProgramUniform2f; PFNGLPROGRAMUNIFORM2FVPROC ProgramUniform2fv; PFNGLPROGRAMUNIFORM2DPROC ProgramUniform2d; PFNGLPROGRAMUNIFORM2DVPROC ProgramUniform2dv; PFNGLPROGRAMUNIFORM2UIPROC ProgramUniform2ui; PFNGLPROGRAMUNIFORM2UIVPROC ProgramUniform2uiv; PFNGLPROGRAMUNIFORM3IPROC ProgramUniform3i; PFNGLPROGRAMUNIFORM3IVPROC ProgramUniform3iv; PFNGLPROGRAMUNIFORM3FPROC ProgramUniform3f; PFNGLPROGRAMUNIFORM3FVPROC ProgramUniform3fv; PFNGLPROGRAMUNIFORM3DPROC ProgramUniform3d; PFNGLPROGRAMUNIFORM3DVPROC ProgramUniform3dv; PFNGLPROGRAMUNIFORM3UIPROC ProgramUniform3ui; PFNGLPROGRAMUNIFORM3UIVPROC ProgramUniform3uiv; PFNGLPROGRAMUNIFORM4IPROC ProgramUniform4i; PFNGLPROGRAMUNIFORM4IVPROC ProgramUniform4iv; PFNGLPROGRAMUNIFORM4FPROC ProgramUniform4f; PFNGLPROGRAMUNIFORM4FVPROC ProgramUniform4fv; PFNGLPROGRAMUNIFORM4DPROC ProgramUniform4d; PFNGLPROGRAMUNIFORM4DVPROC ProgramUniform4dv; PFNGLPROGRAMUNIFORM4UIPROC ProgramUniform4ui; PFNGLPROGRAMUNIFORM4UIVPROC ProgramUniform4uiv; PFNGLPROGRAMUNIFORMMATRIX2FVPROC ProgramUniformMatrix2fv; PFNGLPROGRAMUNIFORMMATRIX3FVPROC ProgramUniformMatrix3fv; PFNGLPROGRAMUNIFORMMATRIX4FVPROC ProgramUniformMatrix4fv; PFNGLPROGRAMUNIFORMMATRIX2DVPROC ProgramUniformMatrix2dv; PFNGLPROGRAMUNIFORMMATRIX3DVPROC ProgramUniformMatrix3dv; PFNGLPROGRAMUNIFORMMATRIX4DVPROC ProgramUniformMatrix4dv; PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC ProgramUniformMatrix2x3fv; PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC ProgramUniformMatrix3x2fv; PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC ProgramUniformMatrix2x4fv; PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC ProgramUniformMatrix4x2fv; PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC ProgramUniformMatrix3x4fv; PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC ProgramUniformMatrix4x3fv; PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC ProgramUniformMatrix2x3dv; PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC ProgramUniformMatrix3x2dv; PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC ProgramUniformMatrix2x4dv; PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC ProgramUniformMatrix4x2dv; PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC ProgramUniformMatrix3x4dv; PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC ProgramUniformMatrix4x3dv; PFNGLVALIDATEPROGRAMPIPELINEPROC ValidateProgramPipeline; PFNGLGETPROGRAMPIPELINEINFOLOGPROC GetProgramPipelineInfoLog; PFNGLVERTEXATTRIBL1DPROC VertexAttribL1d; PFNGLVERTEXATTRIBL2DPROC VertexAttribL2d; PFNGLVERTEXATTRIBL3DPROC VertexAttribL3d; PFNGLVERTEXATTRIBL4DPROC VertexAttribL4d; PFNGLVERTEXATTRIBL1DVPROC VertexAttribL1dv; PFNGLVERTEXATTRIBL2DVPROC VertexAttribL2dv; PFNGLVERTEXATTRIBL3DVPROC VertexAttribL3dv; PFNGLVERTEXATTRIBL4DVPROC VertexAttribL4dv; PFNGLVERTEXATTRIBLPOINTERPROC VertexAttribLPointer; PFNGLGETVERTEXATTRIBLDVPROC GetVertexAttribLdv; PFNGLVIEWPORTARRAYVPROC ViewportArrayv; PFNGLVIEWPORTINDEXEDFPROC ViewportIndexedf; PFNGLVIEWPORTINDEXEDFVPROC ViewportIndexedfv; PFNGLSCISSORARRAYVPROC ScissorArrayv; PFNGLSCISSORINDEXEDPROC ScissorIndexed; PFNGLSCISSORINDEXEDVPROC ScissorIndexedv; PFNGLDEPTHRANGEARRAYVPROC DepthRangeArrayv; PFNGLDEPTHRANGEINDEXEDPROC DepthRangeIndexed; PFNGLGETFLOATI_VPROC GetFloati_v; PFNGLGETDOUBLEI_VPROC GetDoublei_v; PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC DrawArraysInstancedBaseInstance; PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC DrawElementsInstancedBaseInstance; PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC DrawElementsInstancedBaseVertexBaseInstance; PFNGLGETINTERNALFORMATIVPROC GetInternalformativ; PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC GetActiveAtomicCounterBufferiv; PFNGLBINDIMAGETEXTUREPROC BindImageTexture; PFNGLMEMORYBARRIERPROC MemoryBarrier; PFNGLTEXSTORAGE1DPROC TexStorage1D; PFNGLTEXSTORAGE2DPROC TexStorage2D; PFNGLTEXSTORAGE3DPROC TexStorage3D; PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC DrawTransformFeedbackInstanced; PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC DrawTransformFeedbackStreamInstanced; PFNGLCLEARBUFFERDATAPROC ClearBufferData; PFNGLCLEARBUFFERSUBDATAPROC ClearBufferSubData; PFNGLDISPATCHCOMPUTEPROC DispatchCompute; PFNGLDISPATCHCOMPUTEINDIRECTPROC DispatchComputeIndirect; PFNGLCOPYIMAGESUBDATAPROC CopyImageSubData; PFNGLFRAMEBUFFERPARAMETERIPROC FramebufferParameteri; PFNGLGETFRAMEBUFFERPARAMETERIVPROC GetFramebufferParameteriv; PFNGLGETINTERNALFORMATI64VPROC GetInternalformati64v; PFNGLINVALIDATETEXSUBIMAGEPROC InvalidateTexSubImage; PFNGLINVALIDATETEXIMAGEPROC InvalidateTexImage; PFNGLINVALIDATEBUFFERSUBDATAPROC InvalidateBufferSubData; PFNGLINVALIDATEBUFFERDATAPROC InvalidateBufferData; PFNGLINVALIDATEFRAMEBUFFERPROC InvalidateFramebuffer; PFNGLINVALIDATESUBFRAMEBUFFERPROC InvalidateSubFramebuffer; PFNGLMULTIDRAWARRAYSINDIRECTPROC MultiDrawArraysIndirect; PFNGLMULTIDRAWELEMENTSINDIRECTPROC MultiDrawElementsIndirect; PFNGLGETPROGRAMINTERFACEIVPROC GetProgramInterfaceiv; PFNGLGETPROGRAMRESOURCEINDEXPROC GetProgramResourceIndex; PFNGLGETPROGRAMRESOURCENAMEPROC GetProgramResourceName; PFNGLGETPROGRAMRESOURCEIVPROC GetProgramResourceiv; PFNGLGETPROGRAMRESOURCELOCATIONPROC GetProgramResourceLocation; PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC GetProgramResourceLocationIndex; PFNGLSHADERSTORAGEBLOCKBINDINGPROC ShaderStorageBlockBinding; PFNGLTEXBUFFERRANGEPROC TexBufferRange; PFNGLTEXSTORAGE2DMULTISAMPLEPROC TexStorage2DMultisample; PFNGLTEXSTORAGE3DMULTISAMPLEPROC TexStorage3DMultisample; PFNGLTEXTUREVIEWPROC TextureView; PFNGLBINDVERTEXBUFFERPROC BindVertexBuffer; PFNGLVERTEXATTRIBFORMATPROC VertexAttribFormat; PFNGLVERTEXATTRIBIFORMATPROC VertexAttribIFormat; PFNGLVERTEXATTRIBLFORMATPROC VertexAttribLFormat; PFNGLVERTEXATTRIBBINDINGPROC VertexAttribBinding; PFNGLVERTEXBINDINGDIVISORPROC VertexBindingDivisor; PFNGLDEBUGMESSAGECONTROLPROC DebugMessageControl; PFNGLDEBUGMESSAGEINSERTPROC DebugMessageInsert; PFNGLDEBUGMESSAGECALLBACKPROC DebugMessageCallback; PFNGLGETDEBUGMESSAGELOGPROC GetDebugMessageLog; PFNGLPUSHDEBUGGROUPPROC PushDebugGroup; PFNGLPOPDEBUGGROUPPROC PopDebugGroup; PFNGLOBJECTLABELPROC ObjectLabel; PFNGLGETOBJECTLABELPROC GetObjectLabel; PFNGLOBJECTPTRLABELPROC ObjectPtrLabel; PFNGLGETOBJECTPTRLABELPROC GetObjectPtrLabel; PFNGLBUFFERSTORAGEPROC BufferStorage; PFNGLCLEARTEXIMAGEPROC ClearTexImage; PFNGLCLEARTEXSUBIMAGEPROC ClearTexSubImage; PFNGLBINDBUFFERSBASEPROC BindBuffersBase; PFNGLBINDBUFFERSRANGEPROC BindBuffersRange; PFNGLBINDTEXTURESPROC BindTextures; PFNGLBINDSAMPLERSPROC BindSamplers; PFNGLBINDIMAGETEXTURESPROC BindImageTextures; PFNGLBINDVERTEXBUFFERSPROC BindVertexBuffers; PFNGLCLIPCONTROLPROC ClipControl; PFNGLCREATETRANSFORMFEEDBACKSPROC CreateTransformFeedbacks; PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC TransformFeedbackBufferBase; PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC TransformFeedbackBufferRange; PFNGLGETTRANSFORMFEEDBACKIVPROC GetTransformFeedbackiv; PFNGLGETTRANSFORMFEEDBACKI_VPROC GetTransformFeedbacki_v; PFNGLGETTRANSFORMFEEDBACKI64_VPROC GetTransformFeedbacki64_v; PFNGLCREATEBUFFERSPROC CreateBuffers; PFNGLNAMEDBUFFERSTORAGEPROC NamedBufferStorage; PFNGLNAMEDBUFFERDATAPROC NamedBufferData; PFNGLNAMEDBUFFERSUBDATAPROC NamedBufferSubData; PFNGLCOPYNAMEDBUFFERSUBDATAPROC CopyNamedBufferSubData; PFNGLCLEARNAMEDBUFFERDATAPROC ClearNamedBufferData; PFNGLCLEARNAMEDBUFFERSUBDATAPROC ClearNamedBufferSubData; PFNGLMAPNAMEDBUFFERPROC MapNamedBuffer; PFNGLMAPNAMEDBUFFERRANGEPROC MapNamedBufferRange; PFNGLUNMAPNAMEDBUFFERPROC UnmapNamedBuffer; PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC FlushMappedNamedBufferRange; PFNGLGETNAMEDBUFFERPARAMETERIVPROC GetNamedBufferParameteriv; PFNGLGETNAMEDBUFFERPARAMETERI64VPROC GetNamedBufferParameteri64v; PFNGLGETNAMEDBUFFERPOINTERVPROC GetNamedBufferPointerv; PFNGLGETNAMEDBUFFERSUBDATAPROC GetNamedBufferSubData; PFNGLCREATEFRAMEBUFFERSPROC CreateFramebuffers; PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC NamedFramebufferRenderbuffer; PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC NamedFramebufferParameteri; PFNGLNAMEDFRAMEBUFFERTEXTUREPROC NamedFramebufferTexture; PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC NamedFramebufferTextureLayer; PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC NamedFramebufferDrawBuffer; PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC NamedFramebufferDrawBuffers; PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC NamedFramebufferReadBuffer; PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC InvalidateNamedFramebufferData; PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC InvalidateNamedFramebufferSubData; PFNGLCLEARNAMEDFRAMEBUFFERIVPROC ClearNamedFramebufferiv; PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC ClearNamedFramebufferuiv; PFNGLCLEARNAMEDFRAMEBUFFERFVPROC ClearNamedFramebufferfv; PFNGLCLEARNAMEDFRAMEBUFFERFIPROC ClearNamedFramebufferfi; PFNGLBLITNAMEDFRAMEBUFFERPROC BlitNamedFramebuffer; PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC CheckNamedFramebufferStatus; PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC GetNamedFramebufferParameteriv; PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC GetNamedFramebufferAttachmentParameteriv; PFNGLCREATERENDERBUFFERSPROC CreateRenderbuffers; PFNGLNAMEDRENDERBUFFERSTORAGEPROC NamedRenderbufferStorage; PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC NamedRenderbufferStorageMultisample; PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC GetNamedRenderbufferParameteriv; PFNGLCREATETEXTURESPROC CreateTextures; PFNGLTEXTUREBUFFERPROC TextureBuffer; PFNGLTEXTUREBUFFERRANGEPROC TextureBufferRange; PFNGLTEXTURESTORAGE1DPROC TextureStorage1D; PFNGLTEXTURESTORAGE2DPROC TextureStorage2D; PFNGLTEXTURESTORAGE3DPROC TextureStorage3D; PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC TextureStorage2DMultisample; PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC TextureStorage3DMultisample; PFNGLTEXTURESUBIMAGE1DPROC TextureSubImage1D; PFNGLTEXTURESUBIMAGE2DPROC TextureSubImage2D; PFNGLTEXTURESUBIMAGE3DPROC TextureSubImage3D; PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC CompressedTextureSubImage1D; PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC CompressedTextureSubImage2D; PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC CompressedTextureSubImage3D; PFNGLCOPYTEXTURESUBIMAGE1DPROC CopyTextureSubImage1D; PFNGLCOPYTEXTURESUBIMAGE2DPROC CopyTextureSubImage2D; PFNGLCOPYTEXTURESUBIMAGE3DPROC CopyTextureSubImage3D; PFNGLTEXTUREPARAMETERFPROC TextureParameterf; PFNGLTEXTUREPARAMETERFVPROC TextureParameterfv; PFNGLTEXTUREPARAMETERIPROC TextureParameteri; PFNGLTEXTUREPARAMETERIIVPROC TextureParameterIiv; PFNGLTEXTUREPARAMETERIUIVPROC TextureParameterIuiv; PFNGLTEXTUREPARAMETERIVPROC TextureParameteriv; PFNGLGENERATETEXTUREMIPMAPPROC GenerateTextureMipmap; PFNGLBINDTEXTUREUNITPROC BindTextureUnit; PFNGLGETTEXTUREIMAGEPROC GetTextureImage; PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC GetCompressedTextureImage; PFNGLGETTEXTURELEVELPARAMETERFVPROC GetTextureLevelParameterfv; PFNGLGETTEXTURELEVELPARAMETERIVPROC GetTextureLevelParameteriv; PFNGLGETTEXTUREPARAMETERFVPROC GetTextureParameterfv; PFNGLGETTEXTUREPARAMETERIIVPROC GetTextureParameterIiv; PFNGLGETTEXTUREPARAMETERIUIVPROC GetTextureParameterIuiv; PFNGLGETTEXTUREPARAMETERIVPROC GetTextureParameteriv; PFNGLCREATEVERTEXARRAYSPROC CreateVertexArrays; PFNGLDISABLEVERTEXARRAYATTRIBPROC DisableVertexArrayAttrib; PFNGLENABLEVERTEXARRAYATTRIBPROC EnableVertexArrayAttrib; PFNGLVERTEXARRAYELEMENTBUFFERPROC VertexArrayElementBuffer; PFNGLVERTEXARRAYVERTEXBUFFERPROC VertexArrayVertexBuffer; PFNGLVERTEXARRAYVERTEXBUFFERSPROC VertexArrayVertexBuffers; PFNGLVERTEXARRAYATTRIBBINDINGPROC VertexArrayAttribBinding; PFNGLVERTEXARRAYATTRIBFORMATPROC VertexArrayAttribFormat; PFNGLVERTEXARRAYATTRIBIFORMATPROC VertexArrayAttribIFormat; PFNGLVERTEXARRAYATTRIBLFORMATPROC VertexArrayAttribLFormat; PFNGLVERTEXARRAYBINDINGDIVISORPROC VertexArrayBindingDivisor; PFNGLGETVERTEXARRAYIVPROC GetVertexArrayiv; PFNGLGETVERTEXARRAYINDEXEDIVPROC GetVertexArrayIndexediv; PFNGLGETVERTEXARRAYINDEXED64IVPROC GetVertexArrayIndexed64iv; PFNGLCREATESAMPLERSPROC CreateSamplers; PFNGLCREATEPROGRAMPIPELINESPROC CreateProgramPipelines; PFNGLCREATEQUERIESPROC CreateQueries; PFNGLGETQUERYBUFFEROBJECTI64VPROC GetQueryBufferObjecti64v; PFNGLGETQUERYBUFFEROBJECTIVPROC GetQueryBufferObjectiv; PFNGLGETQUERYBUFFEROBJECTUI64VPROC GetQueryBufferObjectui64v; PFNGLGETQUERYBUFFEROBJECTUIVPROC GetQueryBufferObjectuiv; PFNGLMEMORYBARRIERBYREGIONPROC MemoryBarrierByRegion; PFNGLGETTEXTURESUBIMAGEPROC GetTextureSubImage; PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC GetCompressedTextureSubImage; PFNGLGETGRAPHICSRESETSTATUSPROC GetGraphicsResetStatus; PFNGLGETNCOMPRESSEDTEXIMAGEPROC GetnCompressedTexImage; PFNGLGETNTEXIMAGEPROC GetnTexImage; PFNGLGETNUNIFORMDVPROC GetnUniformdv; PFNGLGETNUNIFORMFVPROC GetnUniformfv; PFNGLGETNUNIFORMIVPROC GetnUniformiv; PFNGLGETNUNIFORMUIVPROC GetnUniformuiv; PFNGLREADNPIXELSPROC ReadnPixels; PFNGLTEXTUREBARRIERPROC TextureBarrier; PFNGLSPECIALIZESHADERPROC SpecializeShader; PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC MultiDrawArraysIndirectCount; PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC MultiDrawElementsIndirectCount; PFNGLPOLYGONOFFSETCLAMPPROC PolygonOffsetClamp; // PFNGLPRIMITIVEBOUNDINGBOXARBPROC PrimitiveBoundingBoxARB; PFNGLGETTEXTUREHANDLEARBPROC GetTextureHandleARB; // PFNGLGETTEXTURESAMPLERHANDLEARBPROC GetTextureSamplerHandleARB; PFNGLMAKETEXTUREHANDLERESIDENTARBPROC MakeTextureHandleResidentARB; PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC MakeTextureHandleNonResidentARB; // PFNGLGETIMAGEHANDLEARBPROC GetImageHandleARB; // PFNGLMAKEIMAGEHANDLERESIDENTARBPROC MakeImageHandleResidentARB; // PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC MakeImageHandleNonResidentARB; // PFNGLUNIFORMHANDLEUI64ARBPROC UniformHandleui64ARB; // PFNGLUNIFORMHANDLEUI64VARBPROC UniformHandleui64vARB; PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC ProgramUniformHandleui64ARB; // PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC ProgramUniformHandleui64vARB; // PFNGLISTEXTUREHANDLERESIDENTARBPROC IsTextureHandleResidentARB; // PFNGLISIMAGEHANDLERESIDENTARBPROC IsImageHandleResidentARB; // PFNGLVERTEXATTRIBL1UI64ARBPROC VertexAttribL1ui64ARB; // PFNGLVERTEXATTRIBL1UI64VARBPROC VertexAttribL1ui64vARB; // PFNGLGETVERTEXATTRIBLUI64VARBPROC GetVertexAttribLui64vARB; // PFNGLCREATESYNCFROMCLEVENTARBPROC CreateSyncFromCLeventARB; // PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC DispatchComputeGroupSizeARB; // PFNGLDEBUGMESSAGECONTROLARBPROC DebugMessageControlARB; // PFNGLDEBUGMESSAGEINSERTARBPROC DebugMessageInsertARB; // PFNGLDEBUGMESSAGECALLBACKARBPROC DebugMessageCallbackARB; // PFNGLGETDEBUGMESSAGELOGARBPROC GetDebugMessageLogARB; // PFNGLBLENDEQUATIONIARBPROC BlendEquationiARB; // PFNGLBLENDEQUATIONSEPARATEIARBPROC BlendEquationSeparateiARB; // PFNGLBLENDFUNCIARBPROC BlendFunciARB; // PFNGLBLENDFUNCSEPARATEIARBPROC BlendFuncSeparateiARB; // PFNGLDRAWARRAYSINSTANCEDARBPROC DrawArraysInstancedARB; // PFNGLDRAWELEMENTSINSTANCEDARBPROC DrawElementsInstancedARB; // PFNGLPROGRAMPARAMETERIARBPROC ProgramParameteriARB; // PFNGLFRAMEBUFFERTEXTUREARBPROC FramebufferTextureARB; // PFNGLFRAMEBUFFERTEXTURELAYERARBPROC FramebufferTextureLayerARB; // PFNGLFRAMEBUFFERTEXTUREFACEARBPROC FramebufferTextureFaceARB; // PFNGLSPECIALIZESHADERARBPROC SpecializeShaderARB; // PFNGLUNIFORM1I64ARBPROC Uniform1i64ARB; // PFNGLUNIFORM2I64ARBPROC Uniform2i64ARB; // PFNGLUNIFORM3I64ARBPROC Uniform3i64ARB; // PFNGLUNIFORM4I64ARBPROC Uniform4i64ARB; // PFNGLUNIFORM1I64VARBPROC Uniform1i64vARB; // PFNGLUNIFORM2I64VARBPROC Uniform2i64vARB; // PFNGLUNIFORM3I64VARBPROC Uniform3i64vARB; // PFNGLUNIFORM4I64VARBPROC Uniform4i64vARB; // PFNGLUNIFORM1UI64ARBPROC Uniform1ui64ARB; // PFNGLUNIFORM2UI64ARBPROC Uniform2ui64ARB; // PFNGLUNIFORM3UI64ARBPROC Uniform3ui64ARB; // PFNGLUNIFORM4UI64ARBPROC Uniform4ui64ARB; // PFNGLUNIFORM1UI64VARBPROC Uniform1ui64vARB; // PFNGLUNIFORM2UI64VARBPROC Uniform2ui64vARB; // PFNGLUNIFORM3UI64VARBPROC Uniform3ui64vARB; // PFNGLUNIFORM4UI64VARBPROC Uniform4ui64vARB; // PFNGLGETUNIFORMI64VARBPROC GetUniformi64vARB; // PFNGLGETUNIFORMUI64VARBPROC GetUniformui64vARB; // PFNGLGETNUNIFORMI64VARBPROC GetnUniformi64vARB; // PFNGLGETNUNIFORMUI64VARBPROC GetnUniformui64vARB; // PFNGLPROGRAMUNIFORM1I64ARBPROC ProgramUniform1i64ARB; // PFNGLPROGRAMUNIFORM2I64ARBPROC ProgramUniform2i64ARB; // PFNGLPROGRAMUNIFORM3I64ARBPROC ProgramUniform3i64ARB; // PFNGLPROGRAMUNIFORM4I64ARBPROC ProgramUniform4i64ARB; // PFNGLPROGRAMUNIFORM1I64VARBPROC ProgramUniform1i64vARB; // PFNGLPROGRAMUNIFORM2I64VARBPROC ProgramUniform2i64vARB; // PFNGLPROGRAMUNIFORM3I64VARBPROC ProgramUniform3i64vARB; // PFNGLPROGRAMUNIFORM4I64VARBPROC ProgramUniform4i64vARB; // PFNGLPROGRAMUNIFORM1UI64ARBPROC ProgramUniform1ui64ARB; // PFNGLPROGRAMUNIFORM2UI64ARBPROC ProgramUniform2ui64ARB; // PFNGLPROGRAMUNIFORM3UI64ARBPROC ProgramUniform3ui64ARB; // PFNGLPROGRAMUNIFORM4UI64ARBPROC ProgramUniform4ui64ARB; // PFNGLPROGRAMUNIFORM1UI64VARBPROC ProgramUniform1ui64vARB; // PFNGLPROGRAMUNIFORM2UI64VARBPROC ProgramUniform2ui64vARB; // PFNGLPROGRAMUNIFORM3UI64VARBPROC ProgramUniform3ui64vARB; // PFNGLPROGRAMUNIFORM4UI64VARBPROC ProgramUniform4ui64vARB; // PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC MultiDrawArraysIndirectCountARB; // PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC MultiDrawElementsIndirectCountARB; // PFNGLVERTEXATTRIBDIVISORARBPROC VertexAttribDivisorARB; // PFNGLMAXSHADERCOMPILERTHREADSARBPROC MaxShaderCompilerThreadsARB; // PFNGLGETGRAPHICSRESETSTATUSARBPROC GetGraphicsResetStatusARB; // PFNGLGETNTEXIMAGEARBPROC GetnTexImageARB; // PFNGLREADNPIXELSARBPROC ReadnPixelsARB; // PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC GetnCompressedTexImageARB; // PFNGLGETNUNIFORMFVARBPROC GetnUniformfvARB; // PFNGLGETNUNIFORMIVARBPROC GetnUniformivARB; // PFNGLGETNUNIFORMUIVARBPROC GetnUniformuivARB; // PFNGLGETNUNIFORMDVARBPROC GetnUniformdvARB; // PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC FramebufferSampleLocationsfvARB; // PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC NamedFramebufferSampleLocationsfvARB; // PFNGLEVALUATEDEPTHVALUESARBPROC EvaluateDepthValuesARB; // PFNGLMINSAMPLESHADINGARBPROC MinSampleShadingARB; // PFNGLNAMEDSTRINGARBPROC NamedStringARB; // PFNGLDELETENAMEDSTRINGARBPROC DeleteNamedStringARB; // PFNGLCOMPILESHADERINCLUDEARBPROC CompileShaderIncludeARB; // PFNGLISNAMEDSTRINGARBPROC IsNamedStringARB; // PFNGLGETNAMEDSTRINGARBPROC GetNamedStringARB; // PFNGLGETNAMEDSTRINGIVARBPROC GetNamedStringivARB; // PFNGLBUFFERPAGECOMMITMENTARBPROC BufferPageCommitmentARB; // PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC NamedBufferPageCommitmentEXT; // PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC NamedBufferPageCommitmentARB; // PFNGLTEXPAGECOMMITMENTARBPROC TexPageCommitmentARB; // PFNGLTEXBUFFERARBPROC TexBufferARB; // PFNGLDEPTHRANGEARRAYDVNVPROC DepthRangeArraydvNV; // PFNGLDEPTHRANGEINDEXEDDNVPROC DepthRangeIndexeddNV; // PFNGLBLENDBARRIERKHRPROC BlendBarrierKHR; // PFNGLMAXSHADERCOMPILERTHREADSKHRPROC MaxShaderCompilerThreadsKHR; // PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC RenderbufferStorageMultisampleAdvancedAMD; // PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC NamedRenderbufferStorageMultisampleAdvancedAMD; // PFNGLGETPERFMONITORGROUPSAMDPROC GetPerfMonitorGroupsAMD; // PFNGLGETPERFMONITORCOUNTERSAMDPROC GetPerfMonitorCountersAMD; // PFNGLGETPERFMONITORGROUPSTRINGAMDPROC GetPerfMonitorGroupStringAMD; // PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC GetPerfMonitorCounterStringAMD; // PFNGLGETPERFMONITORCOUNTERINFOAMDPROC GetPerfMonitorCounterInfoAMD; // PFNGLGENPERFMONITORSAMDPROC GenPerfMonitorsAMD; // PFNGLDELETEPERFMONITORSAMDPROC DeletePerfMonitorsAMD; // PFNGLSELECTPERFMONITORCOUNTERSAMDPROC SelectPerfMonitorCountersAMD; // PFNGLBEGINPERFMONITORAMDPROC BeginPerfMonitorAMD; // PFNGLENDPERFMONITORAMDPROC EndPerfMonitorAMD; // PFNGLGETPERFMONITORCOUNTERDATAAMDPROC GetPerfMonitorCounterDataAMD; // PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC EGLImageTargetTexStorageEXT; // PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC EGLImageTargetTextureStorageEXT; PFNGLLABELOBJECTEXTPROC LabelObjectEXT; PFNGLGETOBJECTLABELEXTPROC GetObjectLabelEXT; // PFNGLINSERTEVENTMARKEREXTPROC InsertEventMarkerEXT; PFNGLPUSHGROUPMARKEREXTPROC PushGroupMarkerEXT; PFNGLPOPGROUPMARKEREXTPROC PopGroupMarkerEXT; // PFNGLMATRIXLOADFEXTPROC MatrixLoadfEXT; // PFNGLMATRIXLOADDEXTPROC MatrixLoaddEXT; // PFNGLMATRIXMULTFEXTPROC MatrixMultfEXT; // PFNGLMATRIXMULTDEXTPROC MatrixMultdEXT; // PFNGLMATRIXLOADIDENTITYEXTPROC MatrixLoadIdentityEXT; // PFNGLMATRIXROTATEFEXTPROC MatrixRotatefEXT; // PFNGLMATRIXROTATEDEXTPROC MatrixRotatedEXT; // PFNGLMATRIXSCALEFEXTPROC MatrixScalefEXT; // PFNGLMATRIXSCALEDEXTPROC MatrixScaledEXT; // PFNGLMATRIXTRANSLATEFEXTPROC MatrixTranslatefEXT; // PFNGLMATRIXTRANSLATEDEXTPROC MatrixTranslatedEXT; // PFNGLMATRIXFRUSTUMEXTPROC MatrixFrustumEXT; // PFNGLMATRIXORTHOEXTPROC MatrixOrthoEXT; // PFNGLMATRIXPOPEXTPROC MatrixPopEXT; // PFNGLMATRIXPUSHEXTPROC MatrixPushEXT; // PFNGLCLIENTATTRIBDEFAULTEXTPROC ClientAttribDefaultEXT; // PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC PushClientAttribDefaultEXT; // PFNGLTEXTUREPARAMETERFEXTPROC TextureParameterfEXT; // PFNGLTEXTUREPARAMETERFVEXTPROC TextureParameterfvEXT; // PFNGLTEXTUREPARAMETERIEXTPROC TextureParameteriEXT; // PFNGLTEXTUREPARAMETERIVEXTPROC TextureParameterivEXT; // PFNGLTEXTUREIMAGE1DEXTPROC TextureImage1DEXT; // PFNGLTEXTUREIMAGE2DEXTPROC TextureImage2DEXT; // PFNGLTEXTURESUBIMAGE1DEXTPROC TextureSubImage1DEXT; // PFNGLTEXTURESUBIMAGE2DEXTPROC TextureSubImage2DEXT; // PFNGLCOPYTEXTUREIMAGE1DEXTPROC CopyTextureImage1DEXT; // PFNGLCOPYTEXTUREIMAGE2DEXTPROC CopyTextureImage2DEXT; // PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC CopyTextureSubImage1DEXT; // PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC CopyTextureSubImage2DEXT; // PFNGLGETTEXTUREIMAGEEXTPROC GetTextureImageEXT; // PFNGLGETTEXTUREPARAMETERFVEXTPROC GetTextureParameterfvEXT; // PFNGLGETTEXTUREPARAMETERIVEXTPROC GetTextureParameterivEXT; // PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC GetTextureLevelParameterfvEXT; // PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC GetTextureLevelParameterivEXT; // PFNGLTEXTUREIMAGE3DEXTPROC TextureImage3DEXT; // PFNGLTEXTURESUBIMAGE3DEXTPROC TextureSubImage3DEXT; // PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC CopyTextureSubImage3DEXT; // PFNGLBINDMULTITEXTUREEXTPROC BindMultiTextureEXT; // PFNGLMULTITEXCOORDPOINTEREXTPROC MultiTexCoordPointerEXT; // PFNGLMULTITEXENVFEXTPROC MultiTexEnvfEXT; // PFNGLMULTITEXENVFVEXTPROC MultiTexEnvfvEXT; // PFNGLMULTITEXENVIEXTPROC MultiTexEnviEXT; // PFNGLMULTITEXENVIVEXTPROC MultiTexEnvivEXT; // PFNGLMULTITEXGENDEXTPROC MultiTexGendEXT; // PFNGLMULTITEXGENDVEXTPROC MultiTexGendvEXT; // PFNGLMULTITEXGENFEXTPROC MultiTexGenfEXT; // PFNGLMULTITEXGENFVEXTPROC MultiTexGenfvEXT; // PFNGLMULTITEXGENIEXTPROC MultiTexGeniEXT; // PFNGLMULTITEXGENIVEXTPROC MultiTexGenivEXT; // PFNGLGETMULTITEXENVFVEXTPROC GetMultiTexEnvfvEXT; // PFNGLGETMULTITEXENVIVEXTPROC GetMultiTexEnvivEXT; // PFNGLGETMULTITEXGENDVEXTPROC GetMultiTexGendvEXT; // PFNGLGETMULTITEXGENFVEXTPROC GetMultiTexGenfvEXT; // PFNGLGETMULTITEXGENIVEXTPROC GetMultiTexGenivEXT; // PFNGLMULTITEXPARAMETERIEXTPROC MultiTexParameteriEXT; // PFNGLMULTITEXPARAMETERIVEXTPROC MultiTexParameterivEXT; // PFNGLMULTITEXPARAMETERFEXTPROC MultiTexParameterfEXT; // PFNGLMULTITEXPARAMETERFVEXTPROC MultiTexParameterfvEXT; // PFNGLMULTITEXIMAGE1DEXTPROC MultiTexImage1DEXT; // PFNGLMULTITEXIMAGE2DEXTPROC MultiTexImage2DEXT; // PFNGLMULTITEXSUBIMAGE1DEXTPROC MultiTexSubImage1DEXT; // PFNGLMULTITEXSUBIMAGE2DEXTPROC MultiTexSubImage2DEXT; // PFNGLCOPYMULTITEXIMAGE1DEXTPROC CopyMultiTexImage1DEXT; // PFNGLCOPYMULTITEXIMAGE2DEXTPROC CopyMultiTexImage2DEXT; // PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC CopyMultiTexSubImage1DEXT; // PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC CopyMultiTexSubImage2DEXT; // PFNGLGETMULTITEXIMAGEEXTPROC GetMultiTexImageEXT; // PFNGLGETMULTITEXPARAMETERFVEXTPROC GetMultiTexParameterfvEXT; // PFNGLGETMULTITEXPARAMETERIVEXTPROC GetMultiTexParameterivEXT; // PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC GetMultiTexLevelParameterfvEXT; // PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC GetMultiTexLevelParameterivEXT; // PFNGLMULTITEXIMAGE3DEXTPROC MultiTexImage3DEXT; // PFNGLMULTITEXSUBIMAGE3DEXTPROC MultiTexSubImage3DEXT; // PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC CopyMultiTexSubImage3DEXT; // PFNGLENABLECLIENTSTATEINDEXEDEXTPROC EnableClientStateIndexedEXT; // PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC DisableClientStateIndexedEXT; // PFNGLGETFLOATINDEXEDVEXTPROC GetFloatIndexedvEXT; // PFNGLGETDOUBLEINDEXEDVEXTPROC GetDoubleIndexedvEXT; // PFNGLGETPOINTERINDEXEDVEXTPROC GetPointerIndexedvEXT; // PFNGLENABLEINDEXEDEXTPROC EnableIndexedEXT; // PFNGLDISABLEINDEXEDEXTPROC DisableIndexedEXT; // PFNGLISENABLEDINDEXEDEXTPROC IsEnabledIndexedEXT; // PFNGLGETINTEGERINDEXEDVEXTPROC GetIntegerIndexedvEXT; // PFNGLGETBOOLEANINDEXEDVEXTPROC GetBooleanIndexedvEXT; // PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC CompressedTextureImage3DEXT; // PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC CompressedTextureImage2DEXT; // PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC CompressedTextureImage1DEXT; // PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC CompressedTextureSubImage3DEXT; // PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC CompressedTextureSubImage2DEXT; // PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC CompressedTextureSubImage1DEXT; // PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC GetCompressedTextureImageEXT; // PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC CompressedMultiTexImage3DEXT; // PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC CompressedMultiTexImage2DEXT; // PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC CompressedMultiTexImage1DEXT; // PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC CompressedMultiTexSubImage3DEXT; // PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC CompressedMultiTexSubImage2DEXT; // PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC CompressedMultiTexSubImage1DEXT; // PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC GetCompressedMultiTexImageEXT; // PFNGLMATRIXLOADTRANSPOSEFEXTPROC MatrixLoadTransposefEXT; // PFNGLMATRIXLOADTRANSPOSEDEXTPROC MatrixLoadTransposedEXT; // PFNGLMATRIXMULTTRANSPOSEFEXTPROC MatrixMultTransposefEXT; // PFNGLMATRIXMULTTRANSPOSEDEXTPROC MatrixMultTransposedEXT; // PFNGLNAMEDBUFFERDATAEXTPROC NamedBufferDataEXT; // PFNGLNAMEDBUFFERSUBDATAEXTPROC NamedBufferSubDataEXT; // PFNGLMAPNAMEDBUFFEREXTPROC MapNamedBufferEXT; // PFNGLUNMAPNAMEDBUFFEREXTPROC UnmapNamedBufferEXT; // PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC GetNamedBufferParameterivEXT; // PFNGLGETNAMEDBUFFERPOINTERVEXTPROC GetNamedBufferPointervEXT; // PFNGLGETNAMEDBUFFERSUBDATAEXTPROC GetNamedBufferSubDataEXT; // PFNGLPROGRAMUNIFORM1FEXTPROC ProgramUniform1fEXT; // PFNGLPROGRAMUNIFORM2FEXTPROC ProgramUniform2fEXT; // PFNGLPROGRAMUNIFORM3FEXTPROC ProgramUniform3fEXT; // PFNGLPROGRAMUNIFORM4FEXTPROC ProgramUniform4fEXT; // PFNGLPROGRAMUNIFORM1IEXTPROC ProgramUniform1iEXT; // PFNGLPROGRAMUNIFORM2IEXTPROC ProgramUniform2iEXT; // PFNGLPROGRAMUNIFORM3IEXTPROC ProgramUniform3iEXT; // PFNGLPROGRAMUNIFORM4IEXTPROC ProgramUniform4iEXT; // PFNGLPROGRAMUNIFORM1FVEXTPROC ProgramUniform1fvEXT; // PFNGLPROGRAMUNIFORM2FVEXTPROC ProgramUniform2fvEXT; // PFNGLPROGRAMUNIFORM3FVEXTPROC ProgramUniform3fvEXT; // PFNGLPROGRAMUNIFORM4FVEXTPROC ProgramUniform4fvEXT; // PFNGLPROGRAMUNIFORM1IVEXTPROC ProgramUniform1ivEXT; // PFNGLPROGRAMUNIFORM2IVEXTPROC ProgramUniform2ivEXT; // PFNGLPROGRAMUNIFORM3IVEXTPROC ProgramUniform3ivEXT; // PFNGLPROGRAMUNIFORM4IVEXTPROC ProgramUniform4ivEXT; // PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC ProgramUniformMatrix2fvEXT; // PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC ProgramUniformMatrix3fvEXT; // PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC ProgramUniformMatrix4fvEXT; // PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC ProgramUniformMatrix2x3fvEXT; // PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC ProgramUniformMatrix3x2fvEXT; // PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC ProgramUniformMatrix2x4fvEXT; // PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC ProgramUniformMatrix4x2fvEXT; // PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC ProgramUniformMatrix3x4fvEXT; // PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC ProgramUniformMatrix4x3fvEXT; // PFNGLTEXTUREBUFFEREXTPROC TextureBufferEXT; // PFNGLMULTITEXBUFFEREXTPROC MultiTexBufferEXT; // PFNGLTEXTUREPARAMETERIIVEXTPROC TextureParameterIivEXT; // PFNGLTEXTUREPARAMETERIUIVEXTPROC TextureParameterIuivEXT; // PFNGLGETTEXTUREPARAMETERIIVEXTPROC GetTextureParameterIivEXT; // PFNGLGETTEXTUREPARAMETERIUIVEXTPROC GetTextureParameterIuivEXT; // PFNGLMULTITEXPARAMETERIIVEXTPROC MultiTexParameterIivEXT; // PFNGLMULTITEXPARAMETERIUIVEXTPROC MultiTexParameterIuivEXT; // PFNGLGETMULTITEXPARAMETERIIVEXTPROC GetMultiTexParameterIivEXT; // PFNGLGETMULTITEXPARAMETERIUIVEXTPROC GetMultiTexParameterIuivEXT; // PFNGLPROGRAMUNIFORM1UIEXTPROC ProgramUniform1uiEXT; // PFNGLPROGRAMUNIFORM2UIEXTPROC ProgramUniform2uiEXT; // PFNGLPROGRAMUNIFORM3UIEXTPROC ProgramUniform3uiEXT; // PFNGLPROGRAMUNIFORM4UIEXTPROC ProgramUniform4uiEXT; // PFNGLPROGRAMUNIFORM1UIVEXTPROC ProgramUniform1uivEXT; // PFNGLPROGRAMUNIFORM2UIVEXTPROC ProgramUniform2uivEXT; // PFNGLPROGRAMUNIFORM3UIVEXTPROC ProgramUniform3uivEXT; // PFNGLPROGRAMUNIFORM4UIVEXTPROC ProgramUniform4uivEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC NamedProgramLocalParameters4fvEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC NamedProgramLocalParameterI4iEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC NamedProgramLocalParameterI4ivEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC NamedProgramLocalParametersI4ivEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC NamedProgramLocalParameterI4uiEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC NamedProgramLocalParameterI4uivEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC NamedProgramLocalParametersI4uivEXT; // PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC GetNamedProgramLocalParameterIivEXT; // PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC GetNamedProgramLocalParameterIuivEXT; // PFNGLENABLECLIENTSTATEIEXTPROC EnableClientStateiEXT; // PFNGLDISABLECLIENTSTATEIEXTPROC DisableClientStateiEXT; // PFNGLGETFLOATI_VEXTPROC GetFloati_vEXT; // PFNGLGETDOUBLEI_VEXTPROC GetDoublei_vEXT; // PFNGLGETPOINTERI_VEXTPROC GetPointeri_vEXT; // PFNGLNAMEDPROGRAMSTRINGEXTPROC NamedProgramStringEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC NamedProgramLocalParameter4dEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC NamedProgramLocalParameter4dvEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC NamedProgramLocalParameter4fEXT; // PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC NamedProgramLocalParameter4fvEXT; // PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC GetNamedProgramLocalParameterdvEXT; // PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC GetNamedProgramLocalParameterfvEXT; // PFNGLGETNAMEDPROGRAMIVEXTPROC GetNamedProgramivEXT; // PFNGLGETNAMEDPROGRAMSTRINGEXTPROC GetNamedProgramStringEXT; // PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC NamedRenderbufferStorageEXT; // PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC GetNamedRenderbufferParameterivEXT; // PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC NamedRenderbufferStorageMultisampleEXT; // PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC NamedRenderbufferStorageMultisampleCoverageEXT; // PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC CheckNamedFramebufferStatusEXT; // PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC NamedFramebufferTexture1DEXT; // PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC NamedFramebufferTexture2DEXT; // PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC NamedFramebufferTexture3DEXT; // PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC NamedFramebufferRenderbufferEXT; // PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC GetNamedFramebufferAttachmentParameterivEXT; // PFNGLGENERATETEXTUREMIPMAPEXTPROC GenerateTextureMipmapEXT; // PFNGLGENERATEMULTITEXMIPMAPEXTPROC GenerateMultiTexMipmapEXT; // PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC FramebufferDrawBufferEXT; // PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC FramebufferDrawBuffersEXT; // PFNGLFRAMEBUFFERREADBUFFEREXTPROC FramebufferReadBufferEXT; // PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC GetFramebufferParameterivEXT; // PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC NamedCopyBufferSubDataEXT; // PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC NamedFramebufferTextureEXT; // PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC NamedFramebufferTextureLayerEXT; // PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC NamedFramebufferTextureFaceEXT; // PFNGLTEXTURERENDERBUFFEREXTPROC TextureRenderbufferEXT; // PFNGLMULTITEXRENDERBUFFEREXTPROC MultiTexRenderbufferEXT; // PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC VertexArrayVertexOffsetEXT; // PFNGLVERTEXARRAYCOLOROFFSETEXTPROC VertexArrayColorOffsetEXT; // PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC VertexArrayEdgeFlagOffsetEXT; // PFNGLVERTEXARRAYINDEXOFFSETEXTPROC VertexArrayIndexOffsetEXT; // PFNGLVERTEXARRAYNORMALOFFSETEXTPROC VertexArrayNormalOffsetEXT; // PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC VertexArrayTexCoordOffsetEXT; // PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC VertexArrayMultiTexCoordOffsetEXT; // PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC VertexArrayFogCoordOffsetEXT; // PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC VertexArraySecondaryColorOffsetEXT; // PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC VertexArrayVertexAttribOffsetEXT; // PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC VertexArrayVertexAttribIOffsetEXT; // PFNGLENABLEVERTEXARRAYEXTPROC EnableVertexArrayEXT; // PFNGLDISABLEVERTEXARRAYEXTPROC DisableVertexArrayEXT; // PFNGLENABLEVERTEXARRAYATTRIBEXTPROC EnableVertexArrayAttribEXT; // PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC DisableVertexArrayAttribEXT; // PFNGLGETVERTEXARRAYINTEGERVEXTPROC GetVertexArrayIntegervEXT; // PFNGLGETVERTEXARRAYPOINTERVEXTPROC GetVertexArrayPointervEXT; // PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC GetVertexArrayIntegeri_vEXT; // PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC GetVertexArrayPointeri_vEXT; // PFNGLMAPNAMEDBUFFERRANGEEXTPROC MapNamedBufferRangeEXT; // PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC FlushMappedNamedBufferRangeEXT; // PFNGLNAMEDBUFFERSTORAGEEXTPROC NamedBufferStorageEXT; // PFNGLCLEARNAMEDBUFFERDATAEXTPROC ClearNamedBufferDataEXT; // PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC ClearNamedBufferSubDataEXT; // PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC NamedFramebufferParameteriEXT; // PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC GetNamedFramebufferParameterivEXT; // PFNGLPROGRAMUNIFORM1DEXTPROC ProgramUniform1dEXT; // PFNGLPROGRAMUNIFORM2DEXTPROC ProgramUniform2dEXT; // PFNGLPROGRAMUNIFORM3DEXTPROC ProgramUniform3dEXT; // PFNGLPROGRAMUNIFORM4DEXTPROC ProgramUniform4dEXT; // PFNGLPROGRAMUNIFORM1DVEXTPROC ProgramUniform1dvEXT; // PFNGLPROGRAMUNIFORM2DVEXTPROC ProgramUniform2dvEXT; // PFNGLPROGRAMUNIFORM3DVEXTPROC ProgramUniform3dvEXT; // PFNGLPROGRAMUNIFORM4DVEXTPROC ProgramUniform4dvEXT; // PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC ProgramUniformMatrix2dvEXT; // PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC ProgramUniformMatrix3dvEXT; // PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC ProgramUniformMatrix4dvEXT; // PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC ProgramUniformMatrix2x3dvEXT; // PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC ProgramUniformMatrix2x4dvEXT; // PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC ProgramUniformMatrix3x2dvEXT; // PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC ProgramUniformMatrix3x4dvEXT; // PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC ProgramUniformMatrix4x2dvEXT; // PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC ProgramUniformMatrix4x3dvEXT; // PFNGLTEXTUREBUFFERRANGEEXTPROC TextureBufferRangeEXT; // PFNGLTEXTURESTORAGE1DEXTPROC TextureStorage1DEXT; // PFNGLTEXTURESTORAGE2DEXTPROC TextureStorage2DEXT; // PFNGLTEXTURESTORAGE3DEXTPROC TextureStorage3DEXT; // PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC TextureStorage2DMultisampleEXT; // PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC TextureStorage3DMultisampleEXT; // PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC VertexArrayBindVertexBufferEXT; // PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC VertexArrayVertexAttribFormatEXT; // PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC VertexArrayVertexAttribIFormatEXT; // PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC VertexArrayVertexAttribLFormatEXT; // PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC VertexArrayVertexAttribBindingEXT; // PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC VertexArrayVertexBindingDivisorEXT; // PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC VertexArrayVertexAttribLOffsetEXT; // PFNGLTEXTUREPAGECOMMITMENTEXTPROC TexturePageCommitmentEXT; // PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC VertexArrayVertexAttribDivisorEXT; // PFNGLDRAWARRAYSINSTANCEDEXTPROC DrawArraysInstancedEXT; // PFNGLDRAWELEMENTSINSTANCEDEXTPROC DrawElementsInstancedEXT; // PFNGLPOLYGONOFFSETCLAMPEXTPROC PolygonOffsetClampEXT; // PFNGLRASTERSAMPLESEXTPROC RasterSamplesEXT; // PFNGLUSESHADERPROGRAMEXTPROC UseShaderProgramEXT; // PFNGLACTIVEPROGRAMEXTPROC ActiveProgramEXT; // PFNGLCREATESHADERPROGRAMEXTPROC CreateShaderProgramEXT; // PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC FramebufferFetchBarrierEXT; // PFNGLTEXSTORAGE1DEXTPROC TexStorage1DEXT; // PFNGLTEXSTORAGE2DEXTPROC TexStorage2DEXT; // PFNGLTEXSTORAGE3DEXTPROC TexStorage3DEXT; // PFNGLWINDOWRECTANGLESEXTPROC WindowRectanglesEXT; // PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC ApplyFramebufferAttachmentCMAAINTEL; // PFNGLBEGINPERFQUERYINTELPROC BeginPerfQueryINTEL; // PFNGLCREATEPERFQUERYINTELPROC CreatePerfQueryINTEL; // PFNGLDELETEPERFQUERYINTELPROC DeletePerfQueryINTEL; // PFNGLENDPERFQUERYINTELPROC EndPerfQueryINTEL; // PFNGLGETFIRSTPERFQUERYIDINTELPROC GetFirstPerfQueryIdINTEL; // PFNGLGETNEXTPERFQUERYIDINTELPROC GetNextPerfQueryIdINTEL; // PFNGLGETPERFCOUNTERINFOINTELPROC GetPerfCounterInfoINTEL; // PFNGLGETPERFQUERYDATAINTELPROC GetPerfQueryDataINTEL; // PFNGLGETPERFQUERYIDBYNAMEINTELPROC GetPerfQueryIdByNameINTEL; // PFNGLGETPERFQUERYINFOINTELPROC GetPerfQueryInfoINTEL; // PFNGLFRAMEBUFFERPARAMETERIMESAPROC FramebufferParameteriMESA; // PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC GetFramebufferParameterivMESA; // PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC MultiDrawArraysIndirectBindlessNV; // PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC MultiDrawElementsIndirectBindlessNV; // PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC MultiDrawArraysIndirectBindlessCountNV; // PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC MultiDrawElementsIndirectBindlessCountNV; // PFNGLGETTEXTUREHANDLENVPROC GetTextureHandleNV; // PFNGLGETTEXTURESAMPLERHANDLENVPROC GetTextureSamplerHandleNV; // PFNGLMAKETEXTUREHANDLERESIDENTNVPROC MakeTextureHandleResidentNV; // PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC MakeTextureHandleNonResidentNV; // PFNGLGETIMAGEHANDLENVPROC GetImageHandleNV; // PFNGLMAKEIMAGEHANDLERESIDENTNVPROC MakeImageHandleResidentNV; // PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC MakeImageHandleNonResidentNV; // PFNGLUNIFORMHANDLEUI64NVPROC UniformHandleui64NV; // PFNGLUNIFORMHANDLEUI64VNVPROC UniformHandleui64vNV; // PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC ProgramUniformHandleui64NV; // PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC ProgramUniformHandleui64vNV; // PFNGLISTEXTUREHANDLERESIDENTNVPROC IsTextureHandleResidentNV; // PFNGLISIMAGEHANDLERESIDENTNVPROC IsImageHandleResidentNV; // PFNGLBLENDPARAMETERINVPROC BlendParameteriNV; // PFNGLBLENDBARRIERNVPROC BlendBarrierNV; // PFNGLVIEWPORTPOSITIONWSCALENVPROC ViewportPositionWScaleNV; // PFNGLCREATESTATESNVPROC CreateStatesNV; // PFNGLDELETESTATESNVPROC DeleteStatesNV; // PFNGLISSTATENVPROC IsStateNV; // PFNGLSTATECAPTURENVPROC StateCaptureNV; // PFNGLGETCOMMANDHEADERNVPROC GetCommandHeaderNV; // PFNGLGETSTAGEINDEXNVPROC GetStageIndexNV; // PFNGLDRAWCOMMANDSNVPROC DrawCommandsNV; // PFNGLDRAWCOMMANDSADDRESSNVPROC DrawCommandsAddressNV; // PFNGLDRAWCOMMANDSSTATESNVPROC DrawCommandsStatesNV; // PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC DrawCommandsStatesAddressNV; // PFNGLCREATECOMMANDLISTSNVPROC CreateCommandListsNV; // PFNGLDELETECOMMANDLISTSNVPROC DeleteCommandListsNV; // PFNGLISCOMMANDLISTNVPROC IsCommandListNV; // PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC ListDrawCommandsStatesClientNV; // PFNGLCOMMANDLISTSEGMENTSNVPROC CommandListSegmentsNV; // PFNGLCOMPILECOMMANDLISTNVPROC CompileCommandListNV; // PFNGLCALLCOMMANDLISTNVPROC CallCommandListNV; // PFNGLBEGINCONDITIONALRENDERNVPROC BeginConditionalRenderNV; // PFNGLENDCONDITIONALRENDERNVPROC EndConditionalRenderNV; // PFNGLSUBPIXELPRECISIONBIASNVPROC SubpixelPrecisionBiasNV; // PFNGLCONSERVATIVERASTERPARAMETERFNVPROC ConservativeRasterParameterfNV; // PFNGLCONSERVATIVERASTERPARAMETERINVPROC ConservativeRasterParameteriNV; // PFNGLDEPTHRANGEDNVPROC DepthRangedNV; // PFNGLCLEARDEPTHDNVPROC ClearDepthdNV; // PFNGLDEPTHBOUNDSDNVPROC DepthBoundsdNV; // PFNGLDRAWVKIMAGENVPROC DrawVkImageNV; // PFNGLGETVKPROCADDRNVPROC GetVkProcAddrNV; // PFNGLWAITVKSEMAPHORENVPROC WaitVkSemaphoreNV; // PFNGLSIGNALVKSEMAPHORENVPROC SignalVkSemaphoreNV; // PFNGLSIGNALVKFENCENVPROC SignalVkFenceNV; // PFNGLFRAGMENTCOVERAGECOLORNVPROC FragmentCoverageColorNV; // PFNGLCOVERAGEMODULATIONTABLENVPROC CoverageModulationTableNV; // PFNGLGETCOVERAGEMODULATIONTABLENVPROC GetCoverageModulationTableNV; // PFNGLCOVERAGEMODULATIONNVPROC CoverageModulationNV; // PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC RenderbufferStorageMultisampleCoverageNV; // PFNGLUNIFORM1I64NVPROC Uniform1i64NV; // PFNGLUNIFORM2I64NVPROC Uniform2i64NV; // PFNGLUNIFORM3I64NVPROC Uniform3i64NV; // PFNGLUNIFORM4I64NVPROC Uniform4i64NV; // PFNGLUNIFORM1I64VNVPROC Uniform1i64vNV; // PFNGLUNIFORM2I64VNVPROC Uniform2i64vNV; // PFNGLUNIFORM3I64VNVPROC Uniform3i64vNV; // PFNGLUNIFORM4I64VNVPROC Uniform4i64vNV; // PFNGLUNIFORM1UI64NVPROC Uniform1ui64NV; // PFNGLUNIFORM2UI64NVPROC Uniform2ui64NV; // PFNGLUNIFORM3UI64NVPROC Uniform3ui64NV; // PFNGLUNIFORM4UI64NVPROC Uniform4ui64NV; // PFNGLUNIFORM1UI64VNVPROC Uniform1ui64vNV; // PFNGLUNIFORM2UI64VNVPROC Uniform2ui64vNV; // PFNGLUNIFORM3UI64VNVPROC Uniform3ui64vNV; // PFNGLUNIFORM4UI64VNVPROC Uniform4ui64vNV; // PFNGLGETUNIFORMI64VNVPROC GetUniformi64vNV; // PFNGLPROGRAMUNIFORM1I64NVPROC ProgramUniform1i64NV; // PFNGLPROGRAMUNIFORM2I64NVPROC ProgramUniform2i64NV; // PFNGLPROGRAMUNIFORM3I64NVPROC ProgramUniform3i64NV; // PFNGLPROGRAMUNIFORM4I64NVPROC ProgramUniform4i64NV; // PFNGLPROGRAMUNIFORM1I64VNVPROC ProgramUniform1i64vNV; // PFNGLPROGRAMUNIFORM2I64VNVPROC ProgramUniform2i64vNV; // PFNGLPROGRAMUNIFORM3I64VNVPROC ProgramUniform3i64vNV; // PFNGLPROGRAMUNIFORM4I64VNVPROC ProgramUniform4i64vNV; // PFNGLPROGRAMUNIFORM1UI64NVPROC ProgramUniform1ui64NV; // PFNGLPROGRAMUNIFORM2UI64NVPROC ProgramUniform2ui64NV; // PFNGLPROGRAMUNIFORM3UI64NVPROC ProgramUniform3ui64NV; // PFNGLPROGRAMUNIFORM4UI64NVPROC ProgramUniform4ui64NV; // PFNGLPROGRAMUNIFORM1UI64VNVPROC ProgramUniform1ui64vNV; // PFNGLPROGRAMUNIFORM2UI64VNVPROC ProgramUniform2ui64vNV; // PFNGLPROGRAMUNIFORM3UI64VNVPROC ProgramUniform3ui64vNV; // PFNGLPROGRAMUNIFORM4UI64VNVPROC ProgramUniform4ui64vNV; // PFNGLGETINTERNALFORMATSAMPLEIVNVPROC GetInternalformatSampleivNV; // PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC GetMemoryObjectDetachedResourcesuivNV; // PFNGLRESETMEMORYOBJECTPARAMETERNVPROC ResetMemoryObjectParameterNV; // PFNGLTEXATTACHMEMORYNVPROC TexAttachMemoryNV; // PFNGLBUFFERATTACHMEMORYNVPROC BufferAttachMemoryNV; // PFNGLTEXTUREATTACHMEMORYNVPROC TextureAttachMemoryNV; // PFNGLNAMEDBUFFERATTACHMEMORYNVPROC NamedBufferAttachMemoryNV; // PFNGLBUFFERPAGECOMMITMENTMEMNVPROC BufferPageCommitmentMemNV; // PFNGLTEXPAGECOMMITMENTMEMNVPROC TexPageCommitmentMemNV; // PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC NamedBufferPageCommitmentMemNV; // PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC TexturePageCommitmentMemNV; // PFNGLDRAWMESHTASKSNVPROC DrawMeshTasksNV; // PFNGLDRAWMESHTASKSINDIRECTNVPROC DrawMeshTasksIndirectNV; // PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC MultiDrawMeshTasksIndirectNV; // PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC MultiDrawMeshTasksIndirectCountNV; // PFNGLGENPATHSNVPROC GenPathsNV; // PFNGLDELETEPATHSNVPROC DeletePathsNV; // PFNGLISPATHNVPROC IsPathNV; // PFNGLPATHCOMMANDSNVPROC PathCommandsNV; // PFNGLPATHCOORDSNVPROC PathCoordsNV; // PFNGLPATHSUBCOMMANDSNVPROC PathSubCommandsNV; // PFNGLPATHSUBCOORDSNVPROC PathSubCoordsNV; // PFNGLPATHSTRINGNVPROC PathStringNV; // PFNGLPATHGLYPHSNVPROC PathGlyphsNV; // PFNGLPATHGLYPHRANGENVPROC PathGlyphRangeNV; // PFNGLWEIGHTPATHSNVPROC WeightPathsNV; // PFNGLCOPYPATHNVPROC CopyPathNV; // PFNGLINTERPOLATEPATHSNVPROC InterpolatePathsNV; // PFNGLTRANSFORMPATHNVPROC TransformPathNV; // PFNGLPATHPARAMETERIVNVPROC PathParameterivNV; // PFNGLPATHPARAMETERINVPROC PathParameteriNV; // PFNGLPATHPARAMETERFVNVPROC PathParameterfvNV; // PFNGLPATHPARAMETERFNVPROC PathParameterfNV; // PFNGLPATHDASHARRAYNVPROC PathDashArrayNV; // PFNGLPATHSTENCILFUNCNVPROC PathStencilFuncNV; // PFNGLPATHSTENCILDEPTHOFFSETNVPROC PathStencilDepthOffsetNV; // PFNGLSTENCILFILLPATHNVPROC StencilFillPathNV; // PFNGLSTENCILSTROKEPATHNVPROC StencilStrokePathNV; // PFNGLSTENCILFILLPATHINSTANCEDNVPROC StencilFillPathInstancedNV; // PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC StencilStrokePathInstancedNV; // PFNGLPATHCOVERDEPTHFUNCNVPROC PathCoverDepthFuncNV; // PFNGLCOVERFILLPATHNVPROC CoverFillPathNV; // PFNGLCOVERSTROKEPATHNVPROC CoverStrokePathNV; // PFNGLCOVERFILLPATHINSTANCEDNVPROC CoverFillPathInstancedNV; // PFNGLCOVERSTROKEPATHINSTANCEDNVPROC CoverStrokePathInstancedNV; // PFNGLGETPATHPARAMETERIVNVPROC GetPathParameterivNV; // PFNGLGETPATHPARAMETERFVNVPROC GetPathParameterfvNV; // PFNGLGETPATHCOMMANDSNVPROC GetPathCommandsNV; // PFNGLGETPATHCOORDSNVPROC GetPathCoordsNV; // PFNGLGETPATHDASHARRAYNVPROC GetPathDashArrayNV; // PFNGLGETPATHMETRICSNVPROC GetPathMetricsNV; // PFNGLGETPATHMETRICRANGENVPROC GetPathMetricRangeNV; // PFNGLGETPATHSPACINGNVPROC GetPathSpacingNV; // PFNGLISPOINTINFILLPATHNVPROC IsPointInFillPathNV; // PFNGLISPOINTINSTROKEPATHNVPROC IsPointInStrokePathNV; // PFNGLGETPATHLENGTHNVPROC GetPathLengthNV; // PFNGLPOINTALONGPATHNVPROC PointAlongPathNV; // PFNGLMATRIXLOAD3X2FNVPROC MatrixLoad3x2fNV; // PFNGLMATRIXLOAD3X3FNVPROC MatrixLoad3x3fNV; // PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC MatrixLoadTranspose3x3fNV; // PFNGLMATRIXMULT3X2FNVPROC MatrixMult3x2fNV; // PFNGLMATRIXMULT3X3FNVPROC MatrixMult3x3fNV; // PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC MatrixMultTranspose3x3fNV; // PFNGLSTENCILTHENCOVERFILLPATHNVPROC StencilThenCoverFillPathNV; // PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC StencilThenCoverStrokePathNV; // PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC StencilThenCoverFillPathInstancedNV; // PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC StencilThenCoverStrokePathInstancedNV; // PFNGLPATHGLYPHINDEXRANGENVPROC PathGlyphIndexRangeNV; // PFNGLPATHGLYPHINDEXARRAYNVPROC PathGlyphIndexArrayNV; // PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC PathMemoryGlyphIndexArrayNV; // PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC ProgramPathFragmentInputGenNV; // PFNGLGETPROGRAMRESOURCEFVNVPROC GetProgramResourcefvNV; // PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC FramebufferSampleLocationsfvNV; // PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC NamedFramebufferSampleLocationsfvNV; // PFNGLRESOLVEDEPTHVALUESNVPROC ResolveDepthValuesNV; // PFNGLSCISSOREXCLUSIVENVPROC ScissorExclusiveNV; // PFNGLSCISSOREXCLUSIVEARRAYVNVPROC ScissorExclusiveArrayvNV; // PFNGLMAKEBUFFERRESIDENTNVPROC MakeBufferResidentNV; // PFNGLMAKEBUFFERNONRESIDENTNVPROC MakeBufferNonResidentNV; // PFNGLISBUFFERRESIDENTNVPROC IsBufferResidentNV; // PFNGLMAKENAMEDBUFFERRESIDENTNVPROC MakeNamedBufferResidentNV; // PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC MakeNamedBufferNonResidentNV; // PFNGLISNAMEDBUFFERRESIDENTNVPROC IsNamedBufferResidentNV; // PFNGLGETBUFFERPARAMETERUI64VNVPROC GetBufferParameterui64vNV; // PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC GetNamedBufferParameterui64vNV; // PFNGLGETINTEGERUI64VNVPROC GetIntegerui64vNV; // PFNGLUNIFORMUI64NVPROC Uniformui64NV; // PFNGLUNIFORMUI64VNVPROC Uniformui64vNV; // PFNGLGETUNIFORMUI64VNVPROC GetUniformui64vNV; // PFNGLPROGRAMUNIFORMUI64NVPROC ProgramUniformui64NV; // PFNGLPROGRAMUNIFORMUI64VNVPROC ProgramUniformui64vNV; // PFNGLBINDSHADINGRATEIMAGENVPROC BindShadingRateImageNV; // PFNGLGETSHADINGRATEIMAGEPALETTENVPROC GetShadingRateImagePaletteNV; // PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC GetShadingRateSampleLocationivNV; // PFNGLSHADINGRATEIMAGEBARRIERNVPROC ShadingRateImageBarrierNV; // PFNGLSHADINGRATEIMAGEPALETTENVPROC ShadingRateImagePaletteNV; // PFNGLSHADINGRATESAMPLEORDERNVPROC ShadingRateSampleOrderNV; // PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC ShadingRateSampleOrderCustomNV; // PFNGLTEXTUREBARRIERNVPROC TextureBarrierNV; // PFNGLVERTEXATTRIBL1I64NVPROC VertexAttribL1i64NV; // PFNGLVERTEXATTRIBL2I64NVPROC VertexAttribL2i64NV; // PFNGLVERTEXATTRIBL3I64NVPROC VertexAttribL3i64NV; // PFNGLVERTEXATTRIBL4I64NVPROC VertexAttribL4i64NV; // PFNGLVERTEXATTRIBL1I64VNVPROC VertexAttribL1i64vNV; // PFNGLVERTEXATTRIBL2I64VNVPROC VertexAttribL2i64vNV; // PFNGLVERTEXATTRIBL3I64VNVPROC VertexAttribL3i64vNV; // PFNGLVERTEXATTRIBL4I64VNVPROC VertexAttribL4i64vNV; // PFNGLVERTEXATTRIBL1UI64NVPROC VertexAttribL1ui64NV; // PFNGLVERTEXATTRIBL2UI64NVPROC VertexAttribL2ui64NV; // PFNGLVERTEXATTRIBL3UI64NVPROC VertexAttribL3ui64NV; // PFNGLVERTEXATTRIBL4UI64NVPROC VertexAttribL4ui64NV; // PFNGLVERTEXATTRIBL1UI64VNVPROC VertexAttribL1ui64vNV; // PFNGLVERTEXATTRIBL2UI64VNVPROC VertexAttribL2ui64vNV; // PFNGLVERTEXATTRIBL3UI64VNVPROC VertexAttribL3ui64vNV; // PFNGLVERTEXATTRIBL4UI64VNVPROC VertexAttribL4ui64vNV; // PFNGLGETVERTEXATTRIBLI64VNVPROC GetVertexAttribLi64vNV; // PFNGLGETVERTEXATTRIBLUI64VNVPROC GetVertexAttribLui64vNV; // PFNGLVERTEXATTRIBLFORMATNVPROC VertexAttribLFormatNV; // PFNGLBUFFERADDRESSRANGENVPROC BufferAddressRangeNV; // PFNGLVERTEXFORMATNVPROC VertexFormatNV; // PFNGLNORMALFORMATNVPROC NormalFormatNV; // PFNGLCOLORFORMATNVPROC ColorFormatNV; // PFNGLINDEXFORMATNVPROC IndexFormatNV; // PFNGLTEXCOORDFORMATNVPROC TexCoordFormatNV; // PFNGLEDGEFLAGFORMATNVPROC EdgeFlagFormatNV; // PFNGLSECONDARYCOLORFORMATNVPROC SecondaryColorFormatNV; // PFNGLFOGCOORDFORMATNVPROC FogCoordFormatNV; // PFNGLVERTEXATTRIBFORMATNVPROC VertexAttribFormatNV; // PFNGLVERTEXATTRIBIFORMATNVPROC VertexAttribIFormatNV; // PFNGLGETINTEGERUI64I_VNVPROC GetIntegerui64i_vNV; // PFNGLVIEWPORTSWIZZLENVPROC ViewportSwizzleNV; // PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC FramebufferTextureMultiviewOVR; }; void * load_opengl_function(PyObject * loader, const char * method, const char * name) { if (PyErr_Occurred()) { return NULL; } PyObject * res = PyObject_CallMethod(loader, method, "s", name); if (!res) { return NULL; } return PyLong_AsVoidPtr(res); } GLMethods load_gl_methods(PyObject * loader) { GLMethods res = {}; const char * method = PyObject_HasAttrString(loader, "load_opengl_function") ? "load_opengl_function" : "load"; #define load(name) res.name = (decltype(res.name))load_opengl_function(loader, method, "gl" # name); load(CullFace); load(FrontFace); load(Hint); load(LineWidth); load(PointSize); load(PolygonMode); load(Scissor); load(TexParameterf); load(TexParameterfv); load(TexParameteri); load(TexParameteriv); load(TexImage1D); load(TexImage2D); load(DrawBuffer); load(Clear); load(ClearColor); load(ClearStencil); load(ClearDepth); load(StencilMask); load(ColorMask); load(DepthMask); load(Disable); load(Enable); load(Finish); load(Flush); load(BlendFunc); load(LogicOp); load(StencilFunc); load(StencilOp); load(DepthFunc); load(PixelStoref); load(PixelStorei); load(ReadBuffer); load(ReadPixels); load(GetBooleanv); load(GetDoublev); load(GetError); load(GetFloatv); load(GetIntegerv); load(GetString); load(GetTexImage); load(GetTexParameterfv); load(GetTexParameteriv); load(GetTexLevelParameterfv); load(GetTexLevelParameteriv); load(IsEnabled); load(DepthRange); load(Viewport); load(DrawArrays); load(DrawElements); load(GetPointerv); load(PolygonOffset); load(CopyTexImage1D); load(CopyTexImage2D); load(CopyTexSubImage1D); load(CopyTexSubImage2D); load(TexSubImage1D); load(TexSubImage2D); load(BindTexture); load(DeleteTextures); load(GenTextures); load(IsTexture); load(DrawRangeElements); load(TexImage3D); load(TexSubImage3D); load(CopyTexSubImage3D); load(ActiveTexture); load(SampleCoverage); load(CompressedTexImage3D); load(CompressedTexImage2D); load(CompressedTexImage1D); load(CompressedTexSubImage3D); load(CompressedTexSubImage2D); load(CompressedTexSubImage1D); load(GetCompressedTexImage); load(BlendFuncSeparate); load(MultiDrawArrays); load(MultiDrawElements); load(PointParameterf); load(PointParameterfv); load(PointParameteri); load(PointParameteriv); load(BlendColor); load(BlendEquation); load(GenQueries); load(DeleteQueries); load(IsQuery); load(BeginQuery); load(EndQuery); load(GetQueryiv); load(GetQueryObjectiv); load(GetQueryObjectuiv); load(BindBuffer); load(DeleteBuffers); load(GenBuffers); load(IsBuffer); load(BufferData); load(BufferSubData); load(GetBufferSubData); load(MapBuffer); load(UnmapBuffer); load(GetBufferParameteriv); load(GetBufferPointerv); load(BlendEquationSeparate); load(DrawBuffers); load(StencilOpSeparate); load(StencilFuncSeparate); load(StencilMaskSeparate); load(AttachShader); load(BindAttribLocation); load(CompileShader); load(CreateProgram); load(CreateShader); load(DeleteProgram); load(DeleteShader); load(DetachShader); load(DisableVertexAttribArray); load(EnableVertexAttribArray); load(GetActiveAttrib); load(GetActiveUniform); load(GetAttachedShaders); load(GetAttribLocation); load(GetProgramiv); load(GetProgramInfoLog); load(GetShaderiv); load(GetShaderInfoLog); load(GetShaderSource); load(GetUniformLocation); load(GetUniformfv); load(GetUniformiv); load(GetVertexAttribdv); load(GetVertexAttribfv); load(GetVertexAttribiv); load(GetVertexAttribPointerv); load(IsProgram); load(IsShader); load(LinkProgram); load(ShaderSource); load(UseProgram); load(Uniform1f); load(Uniform2f); load(Uniform3f); load(Uniform4f); load(Uniform1i); load(Uniform2i); load(Uniform3i); load(Uniform4i); load(Uniform1fv); load(Uniform2fv); load(Uniform3fv); load(Uniform4fv); load(Uniform1iv); load(Uniform2iv); load(Uniform3iv); load(Uniform4iv); load(UniformMatrix2fv); load(UniformMatrix3fv); load(UniformMatrix4fv); load(ValidateProgram); load(VertexAttrib1d); load(VertexAttrib1dv); load(VertexAttrib1f); load(VertexAttrib1fv); load(VertexAttrib1s); load(VertexAttrib1sv); load(VertexAttrib2d); load(VertexAttrib2dv); load(VertexAttrib2f); load(VertexAttrib2fv); load(VertexAttrib2s); load(VertexAttrib2sv); load(VertexAttrib3d); load(VertexAttrib3dv); load(VertexAttrib3f); load(VertexAttrib3fv); load(VertexAttrib3s); load(VertexAttrib3sv); load(VertexAttrib4Nbv); load(VertexAttrib4Niv); load(VertexAttrib4Nsv); load(VertexAttrib4Nub); load(VertexAttrib4Nubv); load(VertexAttrib4Nuiv); load(VertexAttrib4Nusv); load(VertexAttrib4bv); load(VertexAttrib4d); load(VertexAttrib4dv); load(VertexAttrib4f); load(VertexAttrib4fv); load(VertexAttrib4iv); load(VertexAttrib4s); load(VertexAttrib4sv); load(VertexAttrib4ubv); load(VertexAttrib4uiv); load(VertexAttrib4usv); load(VertexAttribPointer); load(UniformMatrix2x3fv); load(UniformMatrix3x2fv); load(UniformMatrix2x4fv); load(UniformMatrix4x2fv); load(UniformMatrix3x4fv); load(UniformMatrix4x3fv); load(ColorMaski); load(GetBooleani_v); load(GetIntegeri_v); load(Enablei); load(Disablei); load(IsEnabledi); load(BeginTransformFeedback); load(EndTransformFeedback); load(BindBufferRange); load(BindBufferBase); load(TransformFeedbackVaryings); load(GetTransformFeedbackVarying); load(ClampColor); load(BeginConditionalRender); load(EndConditionalRender); load(VertexAttribIPointer); load(GetVertexAttribIiv); load(GetVertexAttribIuiv); load(VertexAttribI1i); load(VertexAttribI2i); load(VertexAttribI3i); load(VertexAttribI4i); load(VertexAttribI1ui); load(VertexAttribI2ui); load(VertexAttribI3ui); load(VertexAttribI4ui); load(VertexAttribI1iv); load(VertexAttribI2iv); load(VertexAttribI3iv); load(VertexAttribI4iv); load(VertexAttribI1uiv); load(VertexAttribI2uiv); load(VertexAttribI3uiv); load(VertexAttribI4uiv); load(VertexAttribI4bv); load(VertexAttribI4sv); load(VertexAttribI4ubv); load(VertexAttribI4usv); load(GetUniformuiv); load(BindFragDataLocation); load(GetFragDataLocation); load(Uniform1ui); load(Uniform2ui); load(Uniform3ui); load(Uniform4ui); load(Uniform1uiv); load(Uniform2uiv); load(Uniform3uiv); load(Uniform4uiv); load(TexParameterIiv); load(TexParameterIuiv); load(GetTexParameterIiv); load(GetTexParameterIuiv); load(ClearBufferiv); load(ClearBufferuiv); load(ClearBufferfv); load(ClearBufferfi); load(GetStringi); load(IsRenderbuffer); load(BindRenderbuffer); load(DeleteRenderbuffers); load(GenRenderbuffers); load(RenderbufferStorage); load(GetRenderbufferParameteriv); load(IsFramebuffer); load(BindFramebuffer); load(DeleteFramebuffers); load(GenFramebuffers); load(CheckFramebufferStatus); load(FramebufferTexture1D); load(FramebufferTexture2D); load(FramebufferTexture3D); load(FramebufferRenderbuffer); load(GetFramebufferAttachmentParameteriv); load(GenerateMipmap); load(BlitFramebuffer); load(RenderbufferStorageMultisample); load(FramebufferTextureLayer); load(MapBufferRange); load(FlushMappedBufferRange); load(BindVertexArray); load(DeleteVertexArrays); load(GenVertexArrays); load(IsVertexArray); load(DrawArraysInstanced); load(DrawElementsInstanced); load(TexBuffer); load(PrimitiveRestartIndex); load(CopyBufferSubData); load(GetUniformIndices); load(GetActiveUniformsiv); load(GetActiveUniformName); load(GetUniformBlockIndex); load(GetActiveUniformBlockiv); load(GetActiveUniformBlockName); load(UniformBlockBinding); load(DrawElementsBaseVertex); load(DrawRangeElementsBaseVertex); load(DrawElementsInstancedBaseVertex); load(MultiDrawElementsBaseVertex); load(ProvokingVertex); load(FenceSync); load(IsSync); load(DeleteSync); load(ClientWaitSync); load(WaitSync); load(GetInteger64v); load(GetSynciv); load(GetInteger64i_v); load(GetBufferParameteri64v); load(FramebufferTexture); load(TexImage2DMultisample); load(TexImage3DMultisample); load(GetMultisamplefv); load(SampleMaski); load(BindFragDataLocationIndexed); load(GetFragDataIndex); load(GenSamplers); load(DeleteSamplers); load(IsSampler); load(BindSampler); load(SamplerParameteri); load(SamplerParameteriv); load(SamplerParameterf); load(SamplerParameterfv); load(SamplerParameterIiv); load(SamplerParameterIuiv); load(GetSamplerParameteriv); load(GetSamplerParameterIiv); load(GetSamplerParameterfv); load(GetSamplerParameterIuiv); load(QueryCounter); load(GetQueryObjecti64v); load(GetQueryObjectui64v); load(VertexAttribDivisor); load(VertexAttribP1ui); load(VertexAttribP1uiv); load(VertexAttribP2ui); load(VertexAttribP2uiv); load(VertexAttribP3ui); load(VertexAttribP3uiv); load(VertexAttribP4ui); load(VertexAttribP4uiv); load(MinSampleShading); load(BlendEquationi); load(BlendEquationSeparatei); load(BlendFunci); load(BlendFuncSeparatei); load(DrawArraysIndirect); load(DrawElementsIndirect); load(Uniform1d); load(Uniform2d); load(Uniform3d); load(Uniform4d); load(Uniform1dv); load(Uniform2dv); load(Uniform3dv); load(Uniform4dv); load(UniformMatrix2dv); load(UniformMatrix3dv); load(UniformMatrix4dv); load(UniformMatrix2x3dv); load(UniformMatrix2x4dv); load(UniformMatrix3x2dv); load(UniformMatrix3x4dv); load(UniformMatrix4x2dv); load(UniformMatrix4x3dv); load(GetUniformdv); load(GetSubroutineUniformLocation); load(GetSubroutineIndex); load(GetActiveSubroutineUniformiv); load(GetActiveSubroutineUniformName); load(GetActiveSubroutineName); load(UniformSubroutinesuiv); load(GetUniformSubroutineuiv); load(GetProgramStageiv); load(PatchParameteri); load(PatchParameterfv); load(BindTransformFeedback); load(DeleteTransformFeedbacks); load(GenTransformFeedbacks); load(IsTransformFeedback); load(PauseTransformFeedback); load(ResumeTransformFeedback); load(DrawTransformFeedback); load(DrawTransformFeedbackStream); load(BeginQueryIndexed); load(EndQueryIndexed); load(GetQueryIndexediv); load(ReleaseShaderCompiler); load(ShaderBinary); load(GetShaderPrecisionFormat); load(DepthRangef); load(ClearDepthf); load(GetProgramBinary); load(ProgramBinary); load(ProgramParameteri); load(UseProgramStages); load(ActiveShaderProgram); load(CreateShaderProgramv); load(BindProgramPipeline); load(DeleteProgramPipelines); load(GenProgramPipelines); load(IsProgramPipeline); load(GetProgramPipelineiv); load(ProgramUniform1i); load(ProgramUniform1iv); load(ProgramUniform1f); load(ProgramUniform1fv); load(ProgramUniform1d); load(ProgramUniform1dv); load(ProgramUniform1ui); load(ProgramUniform1uiv); load(ProgramUniform2i); load(ProgramUniform2iv); load(ProgramUniform2f); load(ProgramUniform2fv); load(ProgramUniform2d); load(ProgramUniform2dv); load(ProgramUniform2ui); load(ProgramUniform2uiv); load(ProgramUniform3i); load(ProgramUniform3iv); load(ProgramUniform3f); load(ProgramUniform3fv); load(ProgramUniform3d); load(ProgramUniform3dv); load(ProgramUniform3ui); load(ProgramUniform3uiv); load(ProgramUniform4i); load(ProgramUniform4iv); load(ProgramUniform4f); load(ProgramUniform4fv); load(ProgramUniform4d); load(ProgramUniform4dv); load(ProgramUniform4ui); load(ProgramUniform4uiv); load(ProgramUniformMatrix2fv); load(ProgramUniformMatrix3fv); load(ProgramUniformMatrix4fv); load(ProgramUniformMatrix2dv); load(ProgramUniformMatrix3dv); load(ProgramUniformMatrix4dv); load(ProgramUniformMatrix2x3fv); load(ProgramUniformMatrix3x2fv); load(ProgramUniformMatrix2x4fv); load(ProgramUniformMatrix4x2fv); load(ProgramUniformMatrix3x4fv); load(ProgramUniformMatrix4x3fv); load(ProgramUniformMatrix2x3dv); load(ProgramUniformMatrix3x2dv); load(ProgramUniformMatrix2x4dv); load(ProgramUniformMatrix4x2dv); load(ProgramUniformMatrix3x4dv); load(ProgramUniformMatrix4x3dv); load(ValidateProgramPipeline); load(GetProgramPipelineInfoLog); load(VertexAttribL1d); load(VertexAttribL2d); load(VertexAttribL3d); load(VertexAttribL4d); load(VertexAttribL1dv); load(VertexAttribL2dv); load(VertexAttribL3dv); load(VertexAttribL4dv); load(VertexAttribLPointer); load(GetVertexAttribLdv); load(ViewportArrayv); load(ViewportIndexedf); load(ViewportIndexedfv); load(ScissorArrayv); load(ScissorIndexed); load(ScissorIndexedv); load(DepthRangeArrayv); load(DepthRangeIndexed); load(GetFloati_v); load(GetDoublei_v); load(DrawArraysInstancedBaseInstance); load(DrawElementsInstancedBaseInstance); load(DrawElementsInstancedBaseVertexBaseInstance); load(GetInternalformativ); load(GetActiveAtomicCounterBufferiv); load(BindImageTexture); load(MemoryBarrier); load(TexStorage1D); load(TexStorage2D); load(TexStorage3D); load(DrawTransformFeedbackInstanced); load(DrawTransformFeedbackStreamInstanced); load(ClearBufferData); load(ClearBufferSubData); load(DispatchCompute); load(DispatchComputeIndirect); load(CopyImageSubData); load(FramebufferParameteri); load(GetFramebufferParameteriv); load(GetInternalformati64v); load(InvalidateTexSubImage); load(InvalidateTexImage); load(InvalidateBufferSubData); load(InvalidateBufferData); load(InvalidateFramebuffer); load(InvalidateSubFramebuffer); load(MultiDrawArraysIndirect); load(MultiDrawElementsIndirect); load(GetProgramInterfaceiv); load(GetProgramResourceIndex); load(GetProgramResourceName); load(GetProgramResourceiv); load(GetProgramResourceLocation); load(GetProgramResourceLocationIndex); load(ShaderStorageBlockBinding); load(TexBufferRange); load(TexStorage2DMultisample); load(TexStorage3DMultisample); load(TextureView); load(BindVertexBuffer); load(VertexAttribFormat); load(VertexAttribIFormat); load(VertexAttribLFormat); load(VertexAttribBinding); load(VertexBindingDivisor); load(DebugMessageControl); load(DebugMessageInsert); load(DebugMessageCallback); load(GetDebugMessageLog); load(PushDebugGroup); load(PopDebugGroup); load(ObjectLabel); load(GetObjectLabel); load(ObjectPtrLabel); load(GetObjectPtrLabel); load(BufferStorage); load(ClearTexImage); load(ClearTexSubImage); load(BindBuffersBase); load(BindBuffersRange); load(BindTextures); load(BindSamplers); load(BindImageTextures); load(BindVertexBuffers); load(ClipControl); load(CreateTransformFeedbacks); load(TransformFeedbackBufferBase); load(TransformFeedbackBufferRange); load(GetTransformFeedbackiv); load(GetTransformFeedbacki_v); load(GetTransformFeedbacki64_v); load(CreateBuffers); load(NamedBufferStorage); load(NamedBufferData); load(NamedBufferSubData); load(CopyNamedBufferSubData); load(ClearNamedBufferData); load(ClearNamedBufferSubData); load(MapNamedBuffer); load(MapNamedBufferRange); load(UnmapNamedBuffer); load(FlushMappedNamedBufferRange); load(GetNamedBufferParameteriv); load(GetNamedBufferParameteri64v); load(GetNamedBufferPointerv); load(GetNamedBufferSubData); load(CreateFramebuffers); load(NamedFramebufferRenderbuffer); load(NamedFramebufferParameteri); load(NamedFramebufferTexture); load(NamedFramebufferTextureLayer); load(NamedFramebufferDrawBuffer); load(NamedFramebufferDrawBuffers); load(NamedFramebufferReadBuffer); load(InvalidateNamedFramebufferData); load(InvalidateNamedFramebufferSubData); load(ClearNamedFramebufferiv); load(ClearNamedFramebufferuiv); load(ClearNamedFramebufferfv); load(ClearNamedFramebufferfi); load(BlitNamedFramebuffer); load(CheckNamedFramebufferStatus); load(GetNamedFramebufferParameteriv); load(GetNamedFramebufferAttachmentParameteriv); load(CreateRenderbuffers); load(NamedRenderbufferStorage); load(NamedRenderbufferStorageMultisample); load(GetNamedRenderbufferParameteriv); load(CreateTextures); load(TextureBuffer); load(TextureBufferRange); load(TextureStorage1D); load(TextureStorage2D); load(TextureStorage3D); load(TextureStorage2DMultisample); load(TextureStorage3DMultisample); load(TextureSubImage1D); load(TextureSubImage2D); load(TextureSubImage3D); load(CompressedTextureSubImage1D); load(CompressedTextureSubImage2D); load(CompressedTextureSubImage3D); load(CopyTextureSubImage1D); load(CopyTextureSubImage2D); load(CopyTextureSubImage3D); load(TextureParameterf); load(TextureParameterfv); load(TextureParameteri); load(TextureParameterIiv); load(TextureParameterIuiv); load(TextureParameteriv); load(GenerateTextureMipmap); load(BindTextureUnit); load(GetTextureImage); load(GetCompressedTextureImage); load(GetTextureLevelParameterfv); load(GetTextureLevelParameteriv); load(GetTextureParameterfv); load(GetTextureParameterIiv); load(GetTextureParameterIuiv); load(GetTextureParameteriv); load(CreateVertexArrays); load(DisableVertexArrayAttrib); load(EnableVertexArrayAttrib); load(VertexArrayElementBuffer); load(VertexArrayVertexBuffer); load(VertexArrayVertexBuffers); load(VertexArrayAttribBinding); load(VertexArrayAttribFormat); load(VertexArrayAttribIFormat); load(VertexArrayAttribLFormat); load(VertexArrayBindingDivisor); load(GetVertexArrayiv); load(GetVertexArrayIndexediv); load(GetVertexArrayIndexed64iv); load(CreateSamplers); load(CreateProgramPipelines); load(CreateQueries); load(GetQueryBufferObjecti64v); load(GetQueryBufferObjectiv); load(GetQueryBufferObjectui64v); load(GetQueryBufferObjectuiv); load(MemoryBarrierByRegion); load(GetTextureSubImage); load(GetCompressedTextureSubImage); load(GetGraphicsResetStatus); load(GetnCompressedTexImage); load(GetnTexImage); load(GetnUniformdv); load(GetnUniformfv); load(GetnUniformiv); load(GetnUniformuiv); load(ReadnPixels); load(TextureBarrier); load(SpecializeShader); load(MultiDrawArraysIndirectCount); load(MultiDrawElementsIndirectCount); load(PolygonOffsetClamp); // load(PrimitiveBoundingBoxARB); load(GetTextureHandleARB); // load(GetTextureSamplerHandleARB); load(MakeTextureHandleResidentARB); load(MakeTextureHandleNonResidentARB); // load(GetImageHandleARB); // load(MakeImageHandleResidentARB); // load(MakeImageHandleNonResidentARB); // load(UniformHandleui64ARB); // load(UniformHandleui64vARB); load(ProgramUniformHandleui64ARB); // load(ProgramUniformHandleui64vARB); // load(IsTextureHandleResidentARB); // load(IsImageHandleResidentARB); // load(VertexAttribL1ui64ARB); // load(VertexAttribL1ui64vARB); // load(GetVertexAttribLui64vARB); // load(CreateSyncFromCLeventARB); // load(DispatchComputeGroupSizeARB); // load(DebugMessageControlARB); // load(DebugMessageInsertARB); // load(DebugMessageCallbackARB); // load(GetDebugMessageLogARB); // load(BlendEquationiARB); // load(BlendEquationSeparateiARB); // load(BlendFunciARB); // load(BlendFuncSeparateiARB); // load(DrawArraysInstancedARB); // load(DrawElementsInstancedARB); // load(ProgramParameteriARB); // load(FramebufferTextureARB); // load(FramebufferTextureLayerARB); // load(FramebufferTextureFaceARB); // load(SpecializeShaderARB); // load(Uniform1i64ARB); // load(Uniform2i64ARB); // load(Uniform3i64ARB); // load(Uniform4i64ARB); // load(Uniform1i64vARB); // load(Uniform2i64vARB); // load(Uniform3i64vARB); // load(Uniform4i64vARB); // load(Uniform1ui64ARB); // load(Uniform2ui64ARB); // load(Uniform3ui64ARB); // load(Uniform4ui64ARB); // load(Uniform1ui64vARB); // load(Uniform2ui64vARB); // load(Uniform3ui64vARB); // load(Uniform4ui64vARB); // load(GetUniformi64vARB); // load(GetUniformui64vARB); // load(GetnUniformi64vARB); // load(GetnUniformui64vARB); // load(ProgramUniform1i64ARB); // load(ProgramUniform2i64ARB); // load(ProgramUniform3i64ARB); // load(ProgramUniform4i64ARB); // load(ProgramUniform1i64vARB); // load(ProgramUniform2i64vARB); // load(ProgramUniform3i64vARB); // load(ProgramUniform4i64vARB); // load(ProgramUniform1ui64ARB); // load(ProgramUniform2ui64ARB); // load(ProgramUniform3ui64ARB); // load(ProgramUniform4ui64ARB); // load(ProgramUniform1ui64vARB); // load(ProgramUniform2ui64vARB); // load(ProgramUniform3ui64vARB); // load(ProgramUniform4ui64vARB); // load(MultiDrawArraysIndirectCountARB); // load(MultiDrawElementsIndirectCountARB); // load(VertexAttribDivisorARB); // load(MaxShaderCompilerThreadsARB); // load(GetGraphicsResetStatusARB); // load(GetnTexImageARB); // load(ReadnPixelsARB); // load(GetnCompressedTexImageARB); // load(GetnUniformfvARB); // load(GetnUniformivARB); // load(GetnUniformuivARB); // load(GetnUniformdvARB); // load(FramebufferSampleLocationsfvARB); // load(NamedFramebufferSampleLocationsfvARB); // load(EvaluateDepthValuesARB); // load(MinSampleShadingARB); // load(NamedStringARB); // load(DeleteNamedStringARB); // load(CompileShaderIncludeARB); // load(IsNamedStringARB); // load(GetNamedStringARB); // load(GetNamedStringivARB); // load(BufferPageCommitmentARB); // load(NamedBufferPageCommitmentEXT); // load(NamedBufferPageCommitmentARB); // load(TexPageCommitmentARB); // load(TexBufferARB); // load(DepthRangeArraydvNV); // load(DepthRangeIndexeddNV); // load(BlendBarrierKHR); // load(MaxShaderCompilerThreadsKHR); // load(RenderbufferStorageMultisampleAdvancedAMD); // load(NamedRenderbufferStorageMultisampleAdvancedAMD); // load(GetPerfMonitorGroupsAMD); // load(GetPerfMonitorCountersAMD); // load(GetPerfMonitorGroupStringAMD); // load(GetPerfMonitorCounterStringAMD); // load(GetPerfMonitorCounterInfoAMD); // load(GenPerfMonitorsAMD); // load(DeletePerfMonitorsAMD); // load(SelectPerfMonitorCountersAMD); // load(BeginPerfMonitorAMD); // load(EndPerfMonitorAMD); // load(GetPerfMonitorCounterDataAMD); // load(EGLImageTargetTexStorageEXT); // load(EGLImageTargetTextureStorageEXT); load(LabelObjectEXT); load(GetObjectLabelEXT); // load(InsertEventMarkerEXT); load(PushGroupMarkerEXT); load(PopGroupMarkerEXT); // load(MatrixLoadfEXT); // load(MatrixLoaddEXT); // load(MatrixMultfEXT); // load(MatrixMultdEXT); // load(MatrixLoadIdentityEXT); // load(MatrixRotatefEXT); // load(MatrixRotatedEXT); // load(MatrixScalefEXT); // load(MatrixScaledEXT); // load(MatrixTranslatefEXT); // load(MatrixTranslatedEXT); // load(MatrixFrustumEXT); // load(MatrixOrthoEXT); // load(MatrixPopEXT); // load(MatrixPushEXT); // load(ClientAttribDefaultEXT); // load(PushClientAttribDefaultEXT); // load(TextureParameterfEXT); // load(TextureParameterfvEXT); // load(TextureParameteriEXT); // load(TextureParameterivEXT); // load(TextureImage1DEXT); // load(TextureImage2DEXT); // load(TextureSubImage1DEXT); // load(TextureSubImage2DEXT); // load(CopyTextureImage1DEXT); // load(CopyTextureImage2DEXT); // load(CopyTextureSubImage1DEXT); // load(CopyTextureSubImage2DEXT); // load(GetTextureImageEXT); // load(GetTextureParameterfvEXT); // load(GetTextureParameterivEXT); // load(GetTextureLevelParameterfvEXT); // load(GetTextureLevelParameterivEXT); // load(TextureImage3DEXT); // load(TextureSubImage3DEXT); // load(CopyTextureSubImage3DEXT); // load(BindMultiTextureEXT); // load(MultiTexCoordPointerEXT); // load(MultiTexEnvfEXT); // load(MultiTexEnvfvEXT); // load(MultiTexEnviEXT); // load(MultiTexEnvivEXT); // load(MultiTexGendEXT); // load(MultiTexGendvEXT); // load(MultiTexGenfEXT); // load(MultiTexGenfvEXT); // load(MultiTexGeniEXT); // load(MultiTexGenivEXT); // load(GetMultiTexEnvfvEXT); // load(GetMultiTexEnvivEXT); // load(GetMultiTexGendvEXT); // load(GetMultiTexGenfvEXT); // load(GetMultiTexGenivEXT); // load(MultiTexParameteriEXT); // load(MultiTexParameterivEXT); // load(MultiTexParameterfEXT); // load(MultiTexParameterfvEXT); // load(MultiTexImage1DEXT); // load(MultiTexImage2DEXT); // load(MultiTexSubImage1DEXT); // load(MultiTexSubImage2DEXT); // load(CopyMultiTexImage1DEXT); // load(CopyMultiTexImage2DEXT); // load(CopyMultiTexSubImage1DEXT); // load(CopyMultiTexSubImage2DEXT); // load(GetMultiTexImageEXT); // load(GetMultiTexParameterfvEXT); // load(GetMultiTexParameterivEXT); // load(GetMultiTexLevelParameterfvEXT); // load(GetMultiTexLevelParameterivEXT); // load(MultiTexImage3DEXT); // load(MultiTexSubImage3DEXT); // load(CopyMultiTexSubImage3DEXT); // load(EnableClientStateIndexedEXT); // load(DisableClientStateIndexedEXT); // load(GetFloatIndexedvEXT); // load(GetDoubleIndexedvEXT); // load(GetPointerIndexedvEXT); // load(EnableIndexedEXT); // load(DisableIndexedEXT); // load(IsEnabledIndexedEXT); // load(GetIntegerIndexedvEXT); // load(GetBooleanIndexedvEXT); // load(CompressedTextureImage3DEXT); // load(CompressedTextureImage2DEXT); // load(CompressedTextureImage1DEXT); // load(CompressedTextureSubImage3DEXT); // load(CompressedTextureSubImage2DEXT); // load(CompressedTextureSubImage1DEXT); // load(GetCompressedTextureImageEXT); // load(CompressedMultiTexImage3DEXT); // load(CompressedMultiTexImage2DEXT); // load(CompressedMultiTexImage1DEXT); // load(CompressedMultiTexSubImage3DEXT); // load(CompressedMultiTexSubImage2DEXT); // load(CompressedMultiTexSubImage1DEXT); // load(GetCompressedMultiTexImageEXT); // load(MatrixLoadTransposefEXT); // load(MatrixLoadTransposedEXT); // load(MatrixMultTransposefEXT); // load(MatrixMultTransposedEXT); // load(NamedBufferDataEXT); // load(NamedBufferSubDataEXT); // load(MapNamedBufferEXT); // load(UnmapNamedBufferEXT); // load(GetNamedBufferParameterivEXT); // load(GetNamedBufferPointervEXT); // load(GetNamedBufferSubDataEXT); // load(ProgramUniform1fEXT); // load(ProgramUniform2fEXT); // load(ProgramUniform3fEXT); // load(ProgramUniform4fEXT); // load(ProgramUniform1iEXT); // load(ProgramUniform2iEXT); // load(ProgramUniform3iEXT); // load(ProgramUniform4iEXT); // load(ProgramUniform1fvEXT); // load(ProgramUniform2fvEXT); // load(ProgramUniform3fvEXT); // load(ProgramUniform4fvEXT); // load(ProgramUniform1ivEXT); // load(ProgramUniform2ivEXT); // load(ProgramUniform3ivEXT); // load(ProgramUniform4ivEXT); // load(ProgramUniformMatrix2fvEXT); // load(ProgramUniformMatrix3fvEXT); // load(ProgramUniformMatrix4fvEXT); // load(ProgramUniformMatrix2x3fvEXT); // load(ProgramUniformMatrix3x2fvEXT); // load(ProgramUniformMatrix2x4fvEXT); // load(ProgramUniformMatrix4x2fvEXT); // load(ProgramUniformMatrix3x4fvEXT); // load(ProgramUniformMatrix4x3fvEXT); // load(TextureBufferEXT); // load(MultiTexBufferEXT); // load(TextureParameterIivEXT); // load(TextureParameterIuivEXT); // load(GetTextureParameterIivEXT); // load(GetTextureParameterIuivEXT); // load(MultiTexParameterIivEXT); // load(MultiTexParameterIuivEXT); // load(GetMultiTexParameterIivEXT); // load(GetMultiTexParameterIuivEXT); // load(ProgramUniform1uiEXT); // load(ProgramUniform2uiEXT); // load(ProgramUniform3uiEXT); // load(ProgramUniform4uiEXT); // load(ProgramUniform1uivEXT); // load(ProgramUniform2uivEXT); // load(ProgramUniform3uivEXT); // load(ProgramUniform4uivEXT); // load(NamedProgramLocalParameters4fvEXT); // load(NamedProgramLocalParameterI4iEXT); // load(NamedProgramLocalParameterI4ivEXT); // load(NamedProgramLocalParametersI4ivEXT); // load(NamedProgramLocalParameterI4uiEXT); // load(NamedProgramLocalParameterI4uivEXT); // load(NamedProgramLocalParametersI4uivEXT); // load(GetNamedProgramLocalParameterIivEXT); // load(GetNamedProgramLocalParameterIuivEXT); // load(EnableClientStateiEXT); // load(DisableClientStateiEXT); // load(GetFloati_vEXT); // load(GetDoublei_vEXT); // load(GetPointeri_vEXT); // load(NamedProgramStringEXT); // load(NamedProgramLocalParameter4dEXT); // load(NamedProgramLocalParameter4dvEXT); // load(NamedProgramLocalParameter4fEXT); // load(NamedProgramLocalParameter4fvEXT); // load(GetNamedProgramLocalParameterdvEXT); // load(GetNamedProgramLocalParameterfvEXT); // load(GetNamedProgramivEXT); // load(GetNamedProgramStringEXT); // load(NamedRenderbufferStorageEXT); // load(GetNamedRenderbufferParameterivEXT); // load(NamedRenderbufferStorageMultisampleEXT); // load(NamedRenderbufferStorageMultisampleCoverageEXT); // load(CheckNamedFramebufferStatusEXT); // load(NamedFramebufferTexture1DEXT); // load(NamedFramebufferTexture2DEXT); // load(NamedFramebufferTexture3DEXT); // load(NamedFramebufferRenderbufferEXT); // load(GetNamedFramebufferAttachmentParameterivEXT); // load(GenerateTextureMipmapEXT); // load(GenerateMultiTexMipmapEXT); // load(FramebufferDrawBufferEXT); // load(FramebufferDrawBuffersEXT); // load(FramebufferReadBufferEXT); // load(GetFramebufferParameterivEXT); // load(NamedCopyBufferSubDataEXT); // load(NamedFramebufferTextureEXT); // load(NamedFramebufferTextureLayerEXT); // load(NamedFramebufferTextureFaceEXT); // load(TextureRenderbufferEXT); // load(MultiTexRenderbufferEXT); // load(VertexArrayVertexOffsetEXT); // load(VertexArrayColorOffsetEXT); // load(VertexArrayEdgeFlagOffsetEXT); // load(VertexArrayIndexOffsetEXT); // load(VertexArrayNormalOffsetEXT); // load(VertexArrayTexCoordOffsetEXT); // load(VertexArrayMultiTexCoordOffsetEXT); // load(VertexArrayFogCoordOffsetEXT); // load(VertexArraySecondaryColorOffsetEXT); // load(VertexArrayVertexAttribOffsetEXT); // load(VertexArrayVertexAttribIOffsetEXT); // load(EnableVertexArrayEXT); // load(DisableVertexArrayEXT); // load(EnableVertexArrayAttribEXT); // load(DisableVertexArrayAttribEXT); // load(GetVertexArrayIntegervEXT); // load(GetVertexArrayPointervEXT); // load(GetVertexArrayIntegeri_vEXT); // load(GetVertexArrayPointeri_vEXT); // load(MapNamedBufferRangeEXT); // load(FlushMappedNamedBufferRangeEXT); // load(NamedBufferStorageEXT); // load(ClearNamedBufferDataEXT); // load(ClearNamedBufferSubDataEXT); // load(NamedFramebufferParameteriEXT); // load(GetNamedFramebufferParameterivEXT); // load(ProgramUniform1dEXT); // load(ProgramUniform2dEXT); // load(ProgramUniform3dEXT); // load(ProgramUniform4dEXT); // load(ProgramUniform1dvEXT); // load(ProgramUniform2dvEXT); // load(ProgramUniform3dvEXT); // load(ProgramUniform4dvEXT); // load(ProgramUniformMatrix2dvEXT); // load(ProgramUniformMatrix3dvEXT); // load(ProgramUniformMatrix4dvEXT); // load(ProgramUniformMatrix2x3dvEXT); // load(ProgramUniformMatrix2x4dvEXT); // load(ProgramUniformMatrix3x2dvEXT); // load(ProgramUniformMatrix3x4dvEXT); // load(ProgramUniformMatrix4x2dvEXT); // load(ProgramUniformMatrix4x3dvEXT); // load(TextureBufferRangeEXT); // load(TextureStorage1DEXT); // load(TextureStorage2DEXT); // load(TextureStorage3DEXT); // load(TextureStorage2DMultisampleEXT); // load(TextureStorage3DMultisampleEXT); // load(VertexArrayBindVertexBufferEXT); // load(VertexArrayVertexAttribFormatEXT); // load(VertexArrayVertexAttribIFormatEXT); // load(VertexArrayVertexAttribLFormatEXT); // load(VertexArrayVertexAttribBindingEXT); // load(VertexArrayVertexBindingDivisorEXT); // load(VertexArrayVertexAttribLOffsetEXT); // load(TexturePageCommitmentEXT); // load(VertexArrayVertexAttribDivisorEXT); // load(DrawArraysInstancedEXT); // load(DrawElementsInstancedEXT); // load(PolygonOffsetClampEXT); // load(RasterSamplesEXT); // load(UseShaderProgramEXT); // load(ActiveProgramEXT); // load(CreateShaderProgramEXT); // load(FramebufferFetchBarrierEXT); // load(TexStorage1DEXT); // load(TexStorage2DEXT); // load(TexStorage3DEXT); // load(WindowRectanglesEXT); // load(ApplyFramebufferAttachmentCMAAINTEL); // load(BeginPerfQueryINTEL); // load(CreatePerfQueryINTEL); // load(DeletePerfQueryINTEL); // load(EndPerfQueryINTEL); // load(GetFirstPerfQueryIdINTEL); // load(GetNextPerfQueryIdINTEL); // load(GetPerfCounterInfoINTEL); // load(GetPerfQueryDataINTEL); // load(GetPerfQueryIdByNameINTEL); // load(GetPerfQueryInfoINTEL); // load(FramebufferParameteriMESA); // load(GetFramebufferParameterivMESA); // load(MultiDrawArraysIndirectBindlessNV); // load(MultiDrawElementsIndirectBindlessNV); // load(MultiDrawArraysIndirectBindlessCountNV); // load(MultiDrawElementsIndirectBindlessCountNV); // load(GetTextureHandleNV); // load(GetTextureSamplerHandleNV); // load(MakeTextureHandleResidentNV); // load(MakeTextureHandleNonResidentNV); // load(GetImageHandleNV); // load(MakeImageHandleResidentNV); // load(MakeImageHandleNonResidentNV); // load(UniformHandleui64NV); // load(UniformHandleui64vNV); // load(ProgramUniformHandleui64NV); // load(ProgramUniformHandleui64vNV); // load(IsTextureHandleResidentNV); // load(IsImageHandleResidentNV); // load(BlendParameteriNV); // load(BlendBarrierNV); // load(ViewportPositionWScaleNV); // load(CreateStatesNV); // load(DeleteStatesNV); // load(IsStateNV); // load(StateCaptureNV); // load(GetCommandHeaderNV); // load(GetStageIndexNV); // load(DrawCommandsNV); // load(DrawCommandsAddressNV); // load(DrawCommandsStatesNV); // load(DrawCommandsStatesAddressNV); // load(CreateCommandListsNV); // load(DeleteCommandListsNV); // load(IsCommandListNV); // load(ListDrawCommandsStatesClientNV); // load(CommandListSegmentsNV); // load(CompileCommandListNV); // load(CallCommandListNV); // load(BeginConditionalRenderNV); // load(EndConditionalRenderNV); // load(SubpixelPrecisionBiasNV); // load(ConservativeRasterParameterfNV); // load(ConservativeRasterParameteriNV); // load(DepthRangedNV); // load(ClearDepthdNV); // load(DepthBoundsdNV); // load(DrawVkImageNV); // load(GetVkProcAddrNV); // load(WaitVkSemaphoreNV); // load(SignalVkSemaphoreNV); // load(SignalVkFenceNV); // load(FragmentCoverageColorNV); // load(CoverageModulationTableNV); // load(GetCoverageModulationTableNV); // load(CoverageModulationNV); // load(RenderbufferStorageMultisampleCoverageNV); // load(Uniform1i64NV); // load(Uniform2i64NV); // load(Uniform3i64NV); // load(Uniform4i64NV); // load(Uniform1i64vNV); // load(Uniform2i64vNV); // load(Uniform3i64vNV); // load(Uniform4i64vNV); // load(Uniform1ui64NV); // load(Uniform2ui64NV); // load(Uniform3ui64NV); // load(Uniform4ui64NV); // load(Uniform1ui64vNV); // load(Uniform2ui64vNV); // load(Uniform3ui64vNV); // load(Uniform4ui64vNV); // load(GetUniformi64vNV); // load(ProgramUniform1i64NV); // load(ProgramUniform2i64NV); // load(ProgramUniform3i64NV); // load(ProgramUniform4i64NV); // load(ProgramUniform1i64vNV); // load(ProgramUniform2i64vNV); // load(ProgramUniform3i64vNV); // load(ProgramUniform4i64vNV); // load(ProgramUniform1ui64NV); // load(ProgramUniform2ui64NV); // load(ProgramUniform3ui64NV); // load(ProgramUniform4ui64NV); // load(ProgramUniform1ui64vNV); // load(ProgramUniform2ui64vNV); // load(ProgramUniform3ui64vNV); // load(ProgramUniform4ui64vNV); // load(GetInternalformatSampleivNV); // load(GetMemoryObjectDetachedResourcesuivNV); // load(ResetMemoryObjectParameterNV); // load(TexAttachMemoryNV); // load(BufferAttachMemoryNV); // load(TextureAttachMemoryNV); // load(NamedBufferAttachMemoryNV); // load(BufferPageCommitmentMemNV); // load(TexPageCommitmentMemNV); // load(NamedBufferPageCommitmentMemNV); // load(TexturePageCommitmentMemNV); // load(DrawMeshTasksNV); // load(DrawMeshTasksIndirectNV); // load(MultiDrawMeshTasksIndirectNV); // load(MultiDrawMeshTasksIndirectCountNV); // load(GenPathsNV); // load(DeletePathsNV); // load(IsPathNV); // load(PathCommandsNV); // load(PathCoordsNV); // load(PathSubCommandsNV); // load(PathSubCoordsNV); // load(PathStringNV); // load(PathGlyphsNV); // load(PathGlyphRangeNV); // load(WeightPathsNV); // load(CopyPathNV); // load(InterpolatePathsNV); // load(TransformPathNV); // load(PathParameterivNV); // load(PathParameteriNV); // load(PathParameterfvNV); // load(PathParameterfNV); // load(PathDashArrayNV); // load(PathStencilFuncNV); // load(PathStencilDepthOffsetNV); // load(StencilFillPathNV); // load(StencilStrokePathNV); // load(StencilFillPathInstancedNV); // load(StencilStrokePathInstancedNV); // load(PathCoverDepthFuncNV); // load(CoverFillPathNV); // load(CoverStrokePathNV); // load(CoverFillPathInstancedNV); // load(CoverStrokePathInstancedNV); // load(GetPathParameterivNV); // load(GetPathParameterfvNV); // load(GetPathCommandsNV); // load(GetPathCoordsNV); // load(GetPathDashArrayNV); // load(GetPathMetricsNV); // load(GetPathMetricRangeNV); // load(GetPathSpacingNV); // load(IsPointInFillPathNV); // load(IsPointInStrokePathNV); // load(GetPathLengthNV); // load(PointAlongPathNV); // load(MatrixLoad3x2fNV); // load(MatrixLoad3x3fNV); // load(MatrixLoadTranspose3x3fNV); // load(MatrixMult3x2fNV); // load(MatrixMult3x3fNV); // load(MatrixMultTranspose3x3fNV); // load(StencilThenCoverFillPathNV); // load(StencilThenCoverStrokePathNV); // load(StencilThenCoverFillPathInstancedNV); // load(StencilThenCoverStrokePathInstancedNV); // load(PathGlyphIndexRangeNV); // load(PathGlyphIndexArrayNV); // load(PathMemoryGlyphIndexArrayNV); // load(ProgramPathFragmentInputGenNV); // load(GetProgramResourcefvNV); // load(FramebufferSampleLocationsfvNV); // load(NamedFramebufferSampleLocationsfvNV); // load(ResolveDepthValuesNV); // load(ScissorExclusiveNV); // load(ScissorExclusiveArrayvNV); // load(MakeBufferResidentNV); // load(MakeBufferNonResidentNV); // load(IsBufferResidentNV); // load(MakeNamedBufferResidentNV); // load(MakeNamedBufferNonResidentNV); // load(IsNamedBufferResidentNV); // load(GetBufferParameterui64vNV); // load(GetNamedBufferParameterui64vNV); // load(GetIntegerui64vNV); // load(Uniformui64NV); // load(Uniformui64vNV); // load(GetUniformui64vNV); // load(ProgramUniformui64NV); // load(ProgramUniformui64vNV); // load(BindShadingRateImageNV); // load(GetShadingRateImagePaletteNV); // load(GetShadingRateSampleLocationivNV); // load(ShadingRateImageBarrierNV); // load(ShadingRateImagePaletteNV); // load(ShadingRateSampleOrderNV); // load(ShadingRateSampleOrderCustomNV); // load(TextureBarrierNV); // load(VertexAttribL1i64NV); // load(VertexAttribL2i64NV); // load(VertexAttribL3i64NV); // load(VertexAttribL4i64NV); // load(VertexAttribL1i64vNV); // load(VertexAttribL2i64vNV); // load(VertexAttribL3i64vNV); // load(VertexAttribL4i64vNV); // load(VertexAttribL1ui64NV); // load(VertexAttribL2ui64NV); // load(VertexAttribL3ui64NV); // load(VertexAttribL4ui64NV); // load(VertexAttribL1ui64vNV); // load(VertexAttribL2ui64vNV); // load(VertexAttribL3ui64vNV); // load(VertexAttribL4ui64vNV); // load(GetVertexAttribLi64vNV); // load(GetVertexAttribLui64vNV); // load(VertexAttribLFormatNV); // load(BufferAddressRangeNV); // load(VertexFormatNV); // load(NormalFormatNV); // load(ColorFormatNV); // load(IndexFormatNV); // load(TexCoordFormatNV); // load(EdgeFlagFormatNV); // load(SecondaryColorFormatNV); // load(FogCoordFormatNV); // load(VertexAttribFormatNV); // load(VertexAttribIFormatNV); // load(GetIntegerui64i_vNV); // load(ViewportSwizzleNV); // load(FramebufferTextureMultiviewOVR); #undef load return res; }; moderngl-moderngl-773b733/src/glcorearb.h000066400000000000000000014777751470420062000203360ustar00rootroot00000000000000#ifndef __gl_glcorearb_h_ #define __gl_glcorearb_h_ 1 #ifdef __cplusplus extern "C" { #endif /* ** Copyright 2013-2020 The Khronos Group Inc. ** SPDX-License-Identifier: MIT ** ** This header is generated from the Khronos OpenGL / OpenGL ES XML ** API Registry. The current version of the Registry, generator scripts ** used to make the header, and the header can be found at ** https://github.com/KhronosGroup/OpenGL-Registry */ #if defined(_WIN32) && !defined(APIENTRY) && !defined(__CYGWIN__) && !defined(__SCITECH_SNAP__) #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN 1 #endif #include #endif #ifndef APIENTRY #define APIENTRY #endif #ifndef APIENTRYP #define APIENTRYP APIENTRY * #endif #ifndef GLAPI #define GLAPI extern #endif /* glcorearb.h is for use with OpenGL core profile implementations. ** It should should be placed in the same directory as gl.h and ** included as . ** ** glcorearb.h includes only APIs in the latest OpenGL core profile ** implementation together with APIs in newer ARB extensions which ** can be supported by the core profile. It does not, and never will ** include functionality removed from the core profile, such as ** fixed-function vertex and fragment processing. ** ** Do not #include both and either of or ** in the same source file. */ /* Generated C header for: * API: gl * Profile: core * Versions considered: .* * Versions emitted: .* * Default extensions included: glcore * Additional extensions included: _nomatch_^ * Extensions removed: _nomatch_^ */ #ifndef GL_VERSION_1_0 #define GL_VERSION_1_0 1 typedef void GLvoid; typedef unsigned int GLenum; #include "khrplatform.h" typedef khronos_float_t GLfloat; typedef int GLint; typedef int GLsizei; typedef unsigned int GLbitfield; typedef double GLdouble; typedef unsigned int GLuint; typedef unsigned char GLboolean; typedef khronos_uint8_t GLubyte; #define GL_DEPTH_BUFFER_BIT 0x00000100 #define GL_STENCIL_BUFFER_BIT 0x00000400 #define GL_COLOR_BUFFER_BIT 0x00004000 #define GL_FALSE 0 #define GL_TRUE 1 #define GL_POINTS 0x0000 #define GL_LINES 0x0001 #define GL_LINE_LOOP 0x0002 #define GL_LINE_STRIP 0x0003 #define GL_TRIANGLES 0x0004 #define GL_TRIANGLE_STRIP 0x0005 #define GL_TRIANGLE_FAN 0x0006 #define GL_QUADS 0x0007 #define GL_NEVER 0x0200 #define GL_LESS 0x0201 #define GL_EQUAL 0x0202 #define GL_LEQUAL 0x0203 #define GL_GREATER 0x0204 #define GL_NOTEQUAL 0x0205 #define GL_GEQUAL 0x0206 #define GL_ALWAYS 0x0207 #define GL_ZERO 0 #define GL_ONE 1 #define GL_SRC_COLOR 0x0300 #define GL_ONE_MINUS_SRC_COLOR 0x0301 #define GL_SRC_ALPHA 0x0302 #define GL_ONE_MINUS_SRC_ALPHA 0x0303 #define GL_DST_ALPHA 0x0304 #define GL_ONE_MINUS_DST_ALPHA 0x0305 #define GL_DST_COLOR 0x0306 #define GL_ONE_MINUS_DST_COLOR 0x0307 #define GL_SRC_ALPHA_SATURATE 0x0308 #define GL_NONE 0 #define GL_FRONT_LEFT 0x0400 #define GL_FRONT_RIGHT 0x0401 #define GL_BACK_LEFT 0x0402 #define GL_BACK_RIGHT 0x0403 #define GL_FRONT 0x0404 #define GL_BACK 0x0405 #define GL_LEFT 0x0406 #define GL_RIGHT 0x0407 #define GL_FRONT_AND_BACK 0x0408 #define GL_NO_ERROR 0 #define GL_INVALID_ENUM 0x0500 #define GL_INVALID_VALUE 0x0501 #define GL_INVALID_OPERATION 0x0502 #define GL_OUT_OF_MEMORY 0x0505 #define GL_CW 0x0900 #define GL_CCW 0x0901 #define GL_POINT_SIZE 0x0B11 #define GL_POINT_SIZE_RANGE 0x0B12 #define GL_POINT_SIZE_GRANULARITY 0x0B13 #define GL_LINE_SMOOTH 0x0B20 #define GL_LINE_WIDTH 0x0B21 #define GL_LINE_WIDTH_RANGE 0x0B22 #define GL_LINE_WIDTH_GRANULARITY 0x0B23 #define GL_POLYGON_MODE 0x0B40 #define GL_POLYGON_SMOOTH 0x0B41 #define GL_CULL_FACE 0x0B44 #define GL_CULL_FACE_MODE 0x0B45 #define GL_FRONT_FACE 0x0B46 #define GL_DEPTH_RANGE 0x0B70 #define GL_DEPTH_TEST 0x0B71 #define GL_DEPTH_WRITEMASK 0x0B72 #define GL_DEPTH_CLEAR_VALUE 0x0B73 #define GL_DEPTH_FUNC 0x0B74 #define GL_STENCIL_TEST 0x0B90 #define GL_STENCIL_CLEAR_VALUE 0x0B91 #define GL_STENCIL_FUNC 0x0B92 #define GL_STENCIL_VALUE_MASK 0x0B93 #define GL_STENCIL_FAIL 0x0B94 #define GL_STENCIL_PASS_DEPTH_FAIL 0x0B95 #define GL_STENCIL_PASS_DEPTH_PASS 0x0B96 #define GL_STENCIL_REF 0x0B97 #define GL_STENCIL_WRITEMASK 0x0B98 #define GL_VIEWPORT 0x0BA2 #define GL_DITHER 0x0BD0 #define GL_BLEND_DST 0x0BE0 #define GL_BLEND_SRC 0x0BE1 #define GL_BLEND 0x0BE2 #define GL_LOGIC_OP_MODE 0x0BF0 #define GL_DRAW_BUFFER 0x0C01 #define GL_READ_BUFFER 0x0C02 #define GL_SCISSOR_BOX 0x0C10 #define GL_SCISSOR_TEST 0x0C11 #define GL_COLOR_CLEAR_VALUE 0x0C22 #define GL_COLOR_WRITEMASK 0x0C23 #define GL_DOUBLEBUFFER 0x0C32 #define GL_STEREO 0x0C33 #define GL_LINE_SMOOTH_HINT 0x0C52 #define GL_POLYGON_SMOOTH_HINT 0x0C53 #define GL_UNPACK_SWAP_BYTES 0x0CF0 #define GL_UNPACK_LSB_FIRST 0x0CF1 #define GL_UNPACK_ROW_LENGTH 0x0CF2 #define GL_UNPACK_SKIP_ROWS 0x0CF3 #define GL_UNPACK_SKIP_PIXELS 0x0CF4 #define GL_UNPACK_ALIGNMENT 0x0CF5 #define GL_PACK_SWAP_BYTES 0x0D00 #define GL_PACK_LSB_FIRST 0x0D01 #define GL_PACK_ROW_LENGTH 0x0D02 #define GL_PACK_SKIP_ROWS 0x0D03 #define GL_PACK_SKIP_PIXELS 0x0D04 #define GL_PACK_ALIGNMENT 0x0D05 #define GL_MAX_TEXTURE_SIZE 0x0D33 #define GL_MAX_VIEWPORT_DIMS 0x0D3A #define GL_SUBPIXEL_BITS 0x0D50 #define GL_TEXTURE_1D 0x0DE0 #define GL_TEXTURE_2D 0x0DE1 #define GL_TEXTURE_WIDTH 0x1000 #define GL_TEXTURE_HEIGHT 0x1001 #define GL_TEXTURE_BORDER_COLOR 0x1004 #define GL_DONT_CARE 0x1100 #define GL_FASTEST 0x1101 #define GL_NICEST 0x1102 #define GL_BYTE 0x1400 #define GL_UNSIGNED_BYTE 0x1401 #define GL_SHORT 0x1402 #define GL_UNSIGNED_SHORT 0x1403 #define GL_INT 0x1404 #define GL_UNSIGNED_INT 0x1405 #define GL_FLOAT 0x1406 #define GL_STACK_OVERFLOW 0x0503 #define GL_STACK_UNDERFLOW 0x0504 #define GL_CLEAR 0x1500 #define GL_AND 0x1501 #define GL_AND_REVERSE 0x1502 #define GL_COPY 0x1503 #define GL_AND_INVERTED 0x1504 #define GL_NOOP 0x1505 #define GL_XOR 0x1506 #define GL_OR 0x1507 #define GL_NOR 0x1508 #define GL_EQUIV 0x1509 #define GL_INVERT 0x150A #define GL_OR_REVERSE 0x150B #define GL_COPY_INVERTED 0x150C #define GL_OR_INVERTED 0x150D #define GL_NAND 0x150E #define GL_SET 0x150F #define GL_TEXTURE 0x1702 #define GL_COLOR 0x1800 #define GL_DEPTH 0x1801 #define GL_STENCIL 0x1802 #define GL_STENCIL_INDEX 0x1901 #define GL_DEPTH_COMPONENT 0x1902 #define GL_RED 0x1903 #define GL_GREEN 0x1904 #define GL_BLUE 0x1905 #define GL_ALPHA 0x1906 #define GL_RGB 0x1907 #define GL_RGBA 0x1908 #define GL_POINT 0x1B00 #define GL_LINE 0x1B01 #define GL_FILL 0x1B02 #define GL_KEEP 0x1E00 #define GL_REPLACE 0x1E01 #define GL_INCR 0x1E02 #define GL_DECR 0x1E03 #define GL_VENDOR 0x1F00 #define GL_RENDERER 0x1F01 #define GL_VERSION 0x1F02 #define GL_EXTENSIONS 0x1F03 #define GL_NEAREST 0x2600 #define GL_LINEAR 0x2601 #define GL_NEAREST_MIPMAP_NEAREST 0x2700 #define GL_LINEAR_MIPMAP_NEAREST 0x2701 #define GL_NEAREST_MIPMAP_LINEAR 0x2702 #define GL_LINEAR_MIPMAP_LINEAR 0x2703 #define GL_TEXTURE_MAG_FILTER 0x2800 #define GL_TEXTURE_MIN_FILTER 0x2801 #define GL_TEXTURE_WRAP_S 0x2802 #define GL_TEXTURE_WRAP_T 0x2803 #define GL_REPEAT 0x2901 typedef void (APIENTRYP PFNGLCULLFACEPROC) (GLenum mode); typedef void (APIENTRYP PFNGLFRONTFACEPROC) (GLenum mode); typedef void (APIENTRYP PFNGLHINTPROC) (GLenum target, GLenum mode); typedef void (APIENTRYP PFNGLLINEWIDTHPROC) (GLfloat width); typedef void (APIENTRYP PFNGLPOINTSIZEPROC) (GLfloat size); typedef void (APIENTRYP PFNGLPOLYGONMODEPROC) (GLenum face, GLenum mode); typedef void (APIENTRYP PFNGLSCISSORPROC) (GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLTEXPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLTEXPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXIMAGE1DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXIMAGE2DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLDRAWBUFFERPROC) (GLenum buf); typedef void (APIENTRYP PFNGLCLEARPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLCLEARCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (APIENTRYP PFNGLCLEARSTENCILPROC) (GLint s); typedef void (APIENTRYP PFNGLCLEARDEPTHPROC) (GLdouble depth); typedef void (APIENTRYP PFNGLSTENCILMASKPROC) (GLuint mask); typedef void (APIENTRYP PFNGLCOLORMASKPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); typedef void (APIENTRYP PFNGLDEPTHMASKPROC) (GLboolean flag); typedef void (APIENTRYP PFNGLDISABLEPROC) (GLenum cap); typedef void (APIENTRYP PFNGLENABLEPROC) (GLenum cap); typedef void (APIENTRYP PFNGLFINISHPROC) (void); typedef void (APIENTRYP PFNGLFLUSHPROC) (void); typedef void (APIENTRYP PFNGLBLENDFUNCPROC) (GLenum sfactor, GLenum dfactor); typedef void (APIENTRYP PFNGLLOGICOPPROC) (GLenum opcode); typedef void (APIENTRYP PFNGLSTENCILFUNCPROC) (GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILOPPROC) (GLenum fail, GLenum zfail, GLenum zpass); typedef void (APIENTRYP PFNGLDEPTHFUNCPROC) (GLenum func); typedef void (APIENTRYP PFNGLPIXELSTOREFPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPIXELSTOREIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLREADBUFFERPROC) (GLenum src); typedef void (APIENTRYP PFNGLREADPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); typedef void (APIENTRYP PFNGLGETBOOLEANVPROC) (GLenum pname, GLboolean *data); typedef void (APIENTRYP PFNGLGETDOUBLEVPROC) (GLenum pname, GLdouble *data); typedef GLenum (APIENTRYP PFNGLGETERRORPROC) (void); typedef void (APIENTRYP PFNGLGETFLOATVPROC) (GLenum pname, GLfloat *data); typedef void (APIENTRYP PFNGLGETINTEGERVPROC) (GLenum pname, GLint *data); typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGPROC) (GLenum name); typedef void (APIENTRYP PFNGLGETTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, void *pixels); typedef void (APIENTRYP PFNGLGETTEXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERFVPROC) (GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXLEVELPARAMETERIVPROC) (GLenum target, GLint level, GLenum pname, GLint *params); typedef GLboolean (APIENTRYP PFNGLISENABLEDPROC) (GLenum cap); typedef void (APIENTRYP PFNGLDEPTHRANGEPROC) (GLdouble n, GLdouble f); typedef void (APIENTRYP PFNGLVIEWPORTPROC) (GLint x, GLint y, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCullFace (GLenum mode); GLAPI void APIENTRY glFrontFace (GLenum mode); GLAPI void APIENTRY glHint (GLenum target, GLenum mode); GLAPI void APIENTRY glLineWidth (GLfloat width); GLAPI void APIENTRY glPointSize (GLfloat size); GLAPI void APIENTRY glPolygonMode (GLenum face, GLenum mode); GLAPI void APIENTRY glScissor (GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glTexParameterf (GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glTexParameterfv (GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glTexParameteri (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glTexParameteriv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexImage1D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glDrawBuffer (GLenum buf); GLAPI void APIENTRY glClear (GLbitfield mask); GLAPI void APIENTRY glClearColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void APIENTRY glClearStencil (GLint s); GLAPI void APIENTRY glClearDepth (GLdouble depth); GLAPI void APIENTRY glStencilMask (GLuint mask); GLAPI void APIENTRY glColorMask (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha); GLAPI void APIENTRY glDepthMask (GLboolean flag); GLAPI void APIENTRY glDisable (GLenum cap); GLAPI void APIENTRY glEnable (GLenum cap); GLAPI void APIENTRY glFinish (void); GLAPI void APIENTRY glFlush (void); GLAPI void APIENTRY glBlendFunc (GLenum sfactor, GLenum dfactor); GLAPI void APIENTRY glLogicOp (GLenum opcode); GLAPI void APIENTRY glStencilFunc (GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glStencilOp (GLenum fail, GLenum zfail, GLenum zpass); GLAPI void APIENTRY glDepthFunc (GLenum func); GLAPI void APIENTRY glPixelStoref (GLenum pname, GLfloat param); GLAPI void APIENTRY glPixelStorei (GLenum pname, GLint param); GLAPI void APIENTRY glReadBuffer (GLenum src); GLAPI void APIENTRY glReadPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, void *pixels); GLAPI void APIENTRY glGetBooleanv (GLenum pname, GLboolean *data); GLAPI void APIENTRY glGetDoublev (GLenum pname, GLdouble *data); GLAPI GLenum APIENTRY glGetError (void); GLAPI void APIENTRY glGetFloatv (GLenum pname, GLfloat *data); GLAPI void APIENTRY glGetIntegerv (GLenum pname, GLint *data); GLAPI const GLubyte *APIENTRY glGetString (GLenum name); GLAPI void APIENTRY glGetTexImage (GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI void APIENTRY glGetTexParameterfv (GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTexParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexLevelParameterfv (GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTexLevelParameteriv (GLenum target, GLint level, GLenum pname, GLint *params); GLAPI GLboolean APIENTRY glIsEnabled (GLenum cap); GLAPI void APIENTRY glDepthRange (GLdouble n, GLdouble f); GLAPI void APIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei height); #endif #endif /* GL_VERSION_1_0 */ #ifndef GL_VERSION_1_1 #define GL_VERSION_1_1 1 typedef khronos_float_t GLclampf; typedef double GLclampd; #define GL_COLOR_LOGIC_OP 0x0BF2 #define GL_POLYGON_OFFSET_UNITS 0x2A00 #define GL_POLYGON_OFFSET_POINT 0x2A01 #define GL_POLYGON_OFFSET_LINE 0x2A02 #define GL_POLYGON_OFFSET_FILL 0x8037 #define GL_POLYGON_OFFSET_FACTOR 0x8038 #define GL_TEXTURE_BINDING_1D 0x8068 #define GL_TEXTURE_BINDING_2D 0x8069 #define GL_TEXTURE_INTERNAL_FORMAT 0x1003 #define GL_TEXTURE_RED_SIZE 0x805C #define GL_TEXTURE_GREEN_SIZE 0x805D #define GL_TEXTURE_BLUE_SIZE 0x805E #define GL_TEXTURE_ALPHA_SIZE 0x805F #define GL_DOUBLE 0x140A #define GL_PROXY_TEXTURE_1D 0x8063 #define GL_PROXY_TEXTURE_2D 0x8064 #define GL_R3_G3_B2 0x2A10 #define GL_RGB4 0x804F #define GL_RGB5 0x8050 #define GL_RGB8 0x8051 #define GL_RGB10 0x8052 #define GL_RGB12 0x8053 #define GL_RGB16 0x8054 #define GL_RGBA2 0x8055 #define GL_RGBA4 0x8056 #define GL_RGB5_A1 0x8057 #define GL_RGBA8 0x8058 #define GL_RGB10_A2 0x8059 #define GL_RGBA12 0x805A #define GL_RGBA16 0x805B #define GL_VERTEX_ARRAY 0x8074 typedef void (APIENTRYP PFNGLDRAWARRAYSPROC) (GLenum mode, GLint first, GLsizei count); typedef void (APIENTRYP PFNGLDRAWELEMENTSPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices); typedef void (APIENTRYP PFNGLGETPOINTERVPROC) (GLenum pname, void **params); typedef void (APIENTRYP PFNGLPOLYGONOFFSETPROC) (GLfloat factor, GLfloat units); typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLBINDTEXTUREPROC) (GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLDELETETEXTURESPROC) (GLsizei n, const GLuint *textures); typedef void (APIENTRYP PFNGLGENTEXTURESPROC) (GLsizei n, GLuint *textures); typedef GLboolean (APIENTRYP PFNGLISTEXTUREPROC) (GLuint texture); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArrays (GLenum mode, GLint first, GLsizei count); GLAPI void APIENTRY glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices); GLAPI void APIENTRY glGetPointerv (GLenum pname, void **params); GLAPI void APIENTRY glPolygonOffset (GLfloat factor, GLfloat units); GLAPI void APIENTRY glCopyTexImage1D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTexImage2D (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glBindTexture (GLenum target, GLuint texture); GLAPI void APIENTRY glDeleteTextures (GLsizei n, const GLuint *textures); GLAPI void APIENTRY glGenTextures (GLsizei n, GLuint *textures); GLAPI GLboolean APIENTRY glIsTexture (GLuint texture); #endif #endif /* GL_VERSION_1_1 */ #ifndef GL_VERSION_1_2 #define GL_VERSION_1_2 1 #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 typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawRangeElements (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices); GLAPI void APIENTRY glTexImage3D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); #endif #endif /* GL_VERSION_1_2 */ #ifndef GL_VERSION_1_3 #define GL_VERSION_1_3 1 #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 typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture); typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLfloat value, GLboolean invert); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, void *img); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glActiveTexture (GLenum texture); GLAPI void APIENTRY glSampleCoverage (GLfloat value, GLboolean invert); GLAPI void APIENTRY glCompressedTexImage3D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage2D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexImage1D (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage3D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage2D (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTexSubImage1D (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glGetCompressedTexImage (GLenum target, GLint level, void *img); #endif #endif /* GL_VERSION_1_3 */ #ifndef GL_VERSION_1_4 #define GL_VERSION_1_4 1 #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_BLEND_COLOR 0x8005 #define GL_BLEND_EQUATION 0x8009 #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_FUNC_ADD 0x8006 #define GL_FUNC_REVERSE_SUBTRACT 0x800B #define GL_FUNC_SUBTRACT 0x800A #define GL_MIN 0x8007 #define GL_MAX 0x8008 typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param); typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendFuncSeparate (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha); GLAPI void APIENTRY glMultiDrawArrays (GLenum mode, const GLint *first, const GLsizei *count, GLsizei drawcount); GLAPI void APIENTRY glMultiDrawElements (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount); GLAPI void APIENTRY glPointParameterf (GLenum pname, GLfloat param); GLAPI void APIENTRY glPointParameterfv (GLenum pname, const GLfloat *params); GLAPI void APIENTRY glPointParameteri (GLenum pname, GLint param); GLAPI void APIENTRY glPointParameteriv (GLenum pname, const GLint *params); GLAPI void APIENTRY glBlendColor (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); GLAPI void APIENTRY glBlendEquation (GLenum mode); #endif #endif /* GL_VERSION_1_4 */ #ifndef GL_VERSION_1_5 #define GL_VERSION_1_5 1 typedef khronos_ssize_t GLsizeiptr; typedef khronos_intptr_t GLintptr; #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 typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id); typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer); typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers); typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, void *data); typedef void *(APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, void **params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGenQueries (GLsizei n, GLuint *ids); GLAPI void APIENTRY glDeleteQueries (GLsizei n, const GLuint *ids); GLAPI GLboolean APIENTRY glIsQuery (GLuint id); GLAPI void APIENTRY glBeginQuery (GLenum target, GLuint id); GLAPI void APIENTRY glEndQuery (GLenum target); GLAPI void APIENTRY glGetQueryiv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectiv (GLuint id, GLenum pname, GLint *params); GLAPI void APIENTRY glGetQueryObjectuiv (GLuint id, GLenum pname, GLuint *params); GLAPI void APIENTRY glBindBuffer (GLenum target, GLuint buffer); GLAPI void APIENTRY glDeleteBuffers (GLsizei n, const GLuint *buffers); GLAPI void APIENTRY glGenBuffers (GLsizei n, GLuint *buffers); GLAPI GLboolean APIENTRY glIsBuffer (GLuint buffer); GLAPI void APIENTRY glBufferData (GLenum target, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void APIENTRY glGetBufferSubData (GLenum target, GLintptr offset, GLsizeiptr size, void *data); GLAPI void *APIENTRY glMapBuffer (GLenum target, GLenum access); GLAPI GLboolean APIENTRY glUnmapBuffer (GLenum target); GLAPI void APIENTRY glGetBufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetBufferPointerv (GLenum target, GLenum pname, void **params); #endif #endif /* GL_VERSION_1_5 */ #ifndef GL_VERSION_2_0 #define GL_VERSION_2_0 1 typedef char GLchar; typedef khronos_int16_t GLshort; typedef khronos_int8_t GLbyte; typedef khronos_uint16_t GLushort; #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 typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum face, GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, void **pointer); typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationSeparate (GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glDrawBuffers (GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glStencilOpSeparate (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); GLAPI void APIENTRY glStencilFuncSeparate (GLenum face, GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glStencilMaskSeparate (GLenum face, GLuint mask); GLAPI void APIENTRY glAttachShader (GLuint program, GLuint shader); GLAPI void APIENTRY glBindAttribLocation (GLuint program, GLuint index, const GLchar *name); GLAPI void APIENTRY glCompileShader (GLuint shader); GLAPI GLuint APIENTRY glCreateProgram (void); GLAPI GLuint APIENTRY glCreateShader (GLenum type); GLAPI void APIENTRY glDeleteProgram (GLuint program); GLAPI void APIENTRY glDeleteShader (GLuint shader); GLAPI void APIENTRY glDetachShader (GLuint program, GLuint shader); GLAPI void APIENTRY glDisableVertexAttribArray (GLuint index); GLAPI void APIENTRY glEnableVertexAttribArray (GLuint index); GLAPI void APIENTRY glGetActiveAttrib (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetActiveUniform (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glGetAttachedShaders (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *shaders); GLAPI GLint APIENTRY glGetAttribLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetProgramiv (GLuint program, GLenum pname, GLint *params); GLAPI void APIENTRY glGetProgramInfoLog (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glGetShaderiv (GLuint shader, GLenum pname, GLint *params); GLAPI void APIENTRY glGetShaderInfoLog (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glGetShaderSource (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); GLAPI GLint APIENTRY glGetUniformLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glGetUniformfv (GLuint program, GLint location, GLfloat *params); GLAPI void APIENTRY glGetUniformiv (GLuint program, GLint location, GLint *params); GLAPI void APIENTRY glGetVertexAttribdv (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetVertexAttribfv (GLuint index, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetVertexAttribiv (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint index, GLenum pname, void **pointer); GLAPI GLboolean APIENTRY glIsProgram (GLuint program); GLAPI GLboolean APIENTRY glIsShader (GLuint shader); GLAPI void APIENTRY glLinkProgram (GLuint program); GLAPI void APIENTRY glShaderSource (GLuint shader, GLsizei count, const GLchar *const*string, const GLint *length); GLAPI void APIENTRY glUseProgram (GLuint program); GLAPI void APIENTRY glUniform1f (GLint location, GLfloat v0); GLAPI void APIENTRY glUniform2f (GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glUniform3f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glUniform4f (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glUniform1i (GLint location, GLint v0); GLAPI void APIENTRY glUniform2i (GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glUniform3i (GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glUniform4i (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glUniform1fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform2fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform3fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform4fv (GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glUniform1iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform2iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform3iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniform4iv (GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glUniformMatrix2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glValidateProgram (GLuint program); GLAPI void APIENTRY glVertexAttrib1d (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttrib1dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib1f (GLuint index, GLfloat x); GLAPI void APIENTRY glVertexAttrib1fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib1s (GLuint index, GLshort x); GLAPI void APIENTRY glVertexAttrib1sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib2d (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttrib2dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib2f (GLuint index, GLfloat x, GLfloat y); GLAPI void APIENTRY glVertexAttrib2fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib2s (GLuint index, GLshort x, GLshort y); GLAPI void APIENTRY glVertexAttrib2sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttrib3dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib3f (GLuint index, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glVertexAttrib3fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib3s (GLuint index, GLshort x, GLshort y, GLshort z); GLAPI void APIENTRY glVertexAttrib3sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4Niv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4Nub (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttrib4bv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttrib4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttrib4dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttrib4f (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glVertexAttrib4fv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glVertexAttrib4iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttrib4s (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); GLAPI void APIENTRY glVertexAttrib4sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttrib4ubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttrib4uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttrib4usv (GLuint index, const GLushort *v); GLAPI void APIENTRY glVertexAttribPointer (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void *pointer); #endif #endif /* GL_VERSION_2_0 */ #ifndef GL_VERSION_2_1 #define GL_VERSION_2_1 1 #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 typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniformMatrix2x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix2x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4x2fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix3x4fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glUniformMatrix4x3fv (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); #endif #endif /* GL_VERSION_2_1 */ #ifndef GL_VERSION_3_0 #define GL_VERSION_3_0 1 typedef khronos_uint16_t GLhalf; #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 0x00000001 #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_DEPTH_COMPONENT32F 0x8CAC #define GL_DEPTH32F_STENCIL8 0x8CAD #define GL_FLOAT_32_UNSIGNED_INT_24_8_REV 0x8DAD #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 0x8CA6 #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_COLOR_ATTACHMENT16 0x8CF0 #define GL_COLOR_ATTACHMENT17 0x8CF1 #define GL_COLOR_ATTACHMENT18 0x8CF2 #define GL_COLOR_ATTACHMENT19 0x8CF3 #define GL_COLOR_ATTACHMENT20 0x8CF4 #define GL_COLOR_ATTACHMENT21 0x8CF5 #define GL_COLOR_ATTACHMENT22 0x8CF6 #define GL_COLOR_ATTACHMENT23 0x8CF7 #define GL_COLOR_ATTACHMENT24 0x8CF8 #define GL_COLOR_ATTACHMENT25 0x8CF9 #define GL_COLOR_ATTACHMENT26 0x8CFA #define GL_COLOR_ATTACHMENT27 0x8CFB #define GL_COLOR_ATTACHMENT28 0x8CFC #define GL_COLOR_ATTACHMENT29 0x8CFD #define GL_COLOR_ATTACHMENT30 0x8CFE #define GL_COLOR_ATTACHMENT31 0x8CFF #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_FRAMEBUFFER_SRGB 0x8DB9 #define GL_HALF_FLOAT 0x140B #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 #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 #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 #define GL_VERTEX_ARRAY_BINDING 0x85B5 typedef void (APIENTRYP PFNGLCOLORMASKIPROC) (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); typedef void (APIENTRYP PFNGLGETBOOLEANI_VPROC) (GLenum target, GLuint index, GLboolean *data); typedef void (APIENTRYP PFNGLGETINTEGERI_VPROC) (GLenum target, GLuint index, GLint *data); typedef void (APIENTRYP PFNGLENABLEIPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLDISABLEIPROC) (GLenum target, GLuint index); typedef GLboolean (APIENTRYP PFNGLISENABLEDIPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLBEGINTRANSFORMFEEDBACKPROC) (GLenum primitiveMode); typedef void (APIENTRYP PFNGLENDTRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLBINDBUFFERRANGEPROC) (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLBINDBUFFERBASEPROC) (GLenum target, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKVARYINGSPROC) (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKVARYINGPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); typedef void (APIENTRYP PFNGLCLAMPCOLORPROC) (GLenum target, GLenum clamp); typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERPROC) (void); typedef void (APIENTRYP PFNGLVERTEXATTRIBIPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIIVPROC) (GLuint index, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIUIVPROC) (GLuint index, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IPROC) (GLuint index, GLint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IPROC) (GLuint index, GLint x, GLint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IPROC) (GLuint index, GLint x, GLint y, GLint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IPROC) (GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIPROC) (GLuint index, GLuint x); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIPROC) (GLuint index, GLuint x, GLuint y); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIPROC) (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4IVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI1UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI2UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI3UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UIVPROC) (GLuint index, const GLuint *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4BVPROC) (GLuint index, const GLbyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4SVPROC) (GLuint index, const GLshort *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4UBVPROC) (GLuint index, const GLubyte *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBI4USVPROC) (GLuint index, const GLushort *v); typedef void (APIENTRYP PFNGLGETUNIFORMUIVPROC) (GLuint program, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONPROC) (GLuint program, GLuint color, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATALOCATIONPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLUNIFORM1UIPROC) (GLint location, GLuint v0); typedef void (APIENTRYP PFNGLUNIFORM2UIPROC) (GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLUNIFORM3UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLUNIFORM4UIPROC) (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLUNIFORM1UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM2UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM3UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLUNIFORM4UIVPROC) (GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXPARAMETERIUIVPROC) (GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLCLEARBUFFERIVPROC) (GLenum buffer, GLint drawbuffer, const GLint *value); typedef void (APIENTRYP PFNGLCLEARBUFFERUIVPROC) (GLenum buffer, GLint drawbuffer, const GLuint *value); typedef void (APIENTRYP PFNGLCLEARBUFFERFVPROC) (GLenum buffer, GLint drawbuffer, const GLfloat *value); typedef void (APIENTRYP PFNGLCLEARBUFFERFIPROC) (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); typedef const GLubyte *(APIENTRYP PFNGLGETSTRINGIPROC) (GLenum name, GLuint index); typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFERPROC) (GLuint renderbuffer); typedef void (APIENTRYP PFNGLBINDRENDERBUFFERPROC) (GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSPROC) (GLsizei n, const GLuint *renderbuffers); typedef void (APIENTRYP PFNGLGENRENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFERPROC) (GLuint framebuffer); typedef void (APIENTRYP PFNGLBINDFRAMEBUFFERPROC) (GLenum target, GLuint framebuffer); typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSPROC) (GLsizei n, const GLuint *framebuffers); typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSPROC) (GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFERPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATEMIPMAPPROC) (GLenum target); typedef void (APIENTRYP PFNGLBLITFRAMEBUFFERPROC) (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void *(APIENTRYP PFNGLMAPBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDBUFFERRANGEPROC) (GLenum target, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLBINDVERTEXARRAYPROC) (GLuint array); typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSPROC) (GLsizei n, const GLuint *arrays); typedef void (APIENTRYP PFNGLGENVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYPROC) (GLuint array); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glColorMaski (GLuint index, GLboolean r, GLboolean g, GLboolean b, GLboolean a); GLAPI void APIENTRY glGetBooleani_v (GLenum target, GLuint index, GLboolean *data); GLAPI void APIENTRY glGetIntegeri_v (GLenum target, GLuint index, GLint *data); GLAPI void APIENTRY glEnablei (GLenum target, GLuint index); GLAPI void APIENTRY glDisablei (GLenum target, GLuint index); GLAPI GLboolean APIENTRY glIsEnabledi (GLenum target, GLuint index); GLAPI void APIENTRY glBeginTransformFeedback (GLenum primitiveMode); GLAPI void APIENTRY glEndTransformFeedback (void); GLAPI void APIENTRY glBindBufferRange (GLenum target, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glBindBufferBase (GLenum target, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackVaryings (GLuint program, GLsizei count, const GLchar *const*varyings, GLenum bufferMode); GLAPI void APIENTRY glGetTransformFeedbackVarying (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLsizei *size, GLenum *type, GLchar *name); GLAPI void APIENTRY glClampColor (GLenum target, GLenum clamp); GLAPI void APIENTRY glBeginConditionalRender (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRender (void); GLAPI void APIENTRY glVertexAttribIPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribIiv (GLuint index, GLenum pname, GLint *params); GLAPI void APIENTRY glGetVertexAttribIuiv (GLuint index, GLenum pname, GLuint *params); GLAPI void APIENTRY glVertexAttribI1i (GLuint index, GLint x); GLAPI void APIENTRY glVertexAttribI2i (GLuint index, GLint x, GLint y); GLAPI void APIENTRY glVertexAttribI3i (GLuint index, GLint x, GLint y, GLint z); GLAPI void APIENTRY glVertexAttribI4i (GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glVertexAttribI1ui (GLuint index, GLuint x); GLAPI void APIENTRY glVertexAttribI2ui (GLuint index, GLuint x, GLuint y); GLAPI void APIENTRY glVertexAttribI3ui (GLuint index, GLuint x, GLuint y, GLuint z); GLAPI void APIENTRY glVertexAttribI4ui (GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glVertexAttribI1iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI2iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI3iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI4iv (GLuint index, const GLint *v); GLAPI void APIENTRY glVertexAttribI1uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI2uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI3uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4uiv (GLuint index, const GLuint *v); GLAPI void APIENTRY glVertexAttribI4bv (GLuint index, const GLbyte *v); GLAPI void APIENTRY glVertexAttribI4sv (GLuint index, const GLshort *v); GLAPI void APIENTRY glVertexAttribI4ubv (GLuint index, const GLubyte *v); GLAPI void APIENTRY glVertexAttribI4usv (GLuint index, const GLushort *v); GLAPI void APIENTRY glGetUniformuiv (GLuint program, GLint location, GLuint *params); GLAPI void APIENTRY glBindFragDataLocation (GLuint program, GLuint color, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataLocation (GLuint program, const GLchar *name); GLAPI void APIENTRY glUniform1ui (GLint location, GLuint v0); GLAPI void APIENTRY glUniform2ui (GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glUniform3ui (GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glUniform4ui (GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glUniform1uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform2uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform3uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glUniform4uiv (GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glTexParameterIiv (GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTexParameterIuiv (GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTexParameterIiv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTexParameterIuiv (GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glClearBufferiv (GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI void APIENTRY glClearBufferuiv (GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI void APIENTRY glClearBufferfv (GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI void APIENTRY glClearBufferfi (GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI const GLubyte *APIENTRY glGetStringi (GLenum name, GLuint index); GLAPI GLboolean APIENTRY glIsRenderbuffer (GLuint renderbuffer); GLAPI void APIENTRY glBindRenderbuffer (GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glDeleteRenderbuffers (GLsizei n, const GLuint *renderbuffers); GLAPI void APIENTRY glGenRenderbuffers (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glRenderbufferStorage (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetRenderbufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI GLboolean APIENTRY glIsFramebuffer (GLuint framebuffer); GLAPI void APIENTRY glBindFramebuffer (GLenum target, GLuint framebuffer); GLAPI void APIENTRY glDeleteFramebuffers (GLsizei n, const GLuint *framebuffers); GLAPI void APIENTRY glGenFramebuffers (GLsizei n, GLuint *framebuffers); GLAPI GLenum APIENTRY glCheckFramebufferStatus (GLenum target); GLAPI void APIENTRY glFramebufferTexture1D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture2D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTexture3D (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glFramebufferRenderbuffer (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetFramebufferAttachmentParameteriv (GLenum target, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateMipmap (GLenum target); GLAPI void APIENTRY glBlitFramebuffer (GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI void APIENTRY glRenderbufferStorageMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glFramebufferTextureLayer (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void *APIENTRY glMapBufferRange (GLenum target, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI void APIENTRY glFlushMappedBufferRange (GLenum target, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glBindVertexArray (GLuint array); GLAPI void APIENTRY glDeleteVertexArrays (GLsizei n, const GLuint *arrays); GLAPI void APIENTRY glGenVertexArrays (GLsizei n, GLuint *arrays); GLAPI GLboolean APIENTRY glIsVertexArray (GLuint array); #endif #endif /* GL_VERSION_3_0 */ #ifndef GL_VERSION_3_1 #define GL_VERSION_3_1 1 #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_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 #define GL_COPY_READ_BUFFER 0x8F36 #define GL_COPY_WRITE_BUFFER 0x8F37 #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 typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); typedef void (APIENTRYP PFNGLTEXBUFFERPROC) (GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXPROC) (GLuint index); typedef void (APIENTRYP PFNGLCOPYBUFFERSUBDATAPROC) (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLGETUNIFORMINDICESPROC) (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMSIVPROC) (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMNAMEPROC) (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); typedef GLuint (APIENTRYP PFNGLGETUNIFORMBLOCKINDEXPROC) (GLuint program, const GLchar *uniformBlockName); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKIVPROC) (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC) (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); typedef void (APIENTRYP PFNGLUNIFORMBLOCKBINDINGPROC) (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstanced (GLenum mode, GLint first, GLsizei count, GLsizei instancecount); GLAPI void APIENTRY glDrawElementsInstanced (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount); GLAPI void APIENTRY glTexBuffer (GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glPrimitiveRestartIndex (GLuint index); GLAPI void APIENTRY glCopyBufferSubData (GLenum readTarget, GLenum writeTarget, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glGetUniformIndices (GLuint program, GLsizei uniformCount, const GLchar *const*uniformNames, GLuint *uniformIndices); GLAPI void APIENTRY glGetActiveUniformsiv (GLuint program, GLsizei uniformCount, const GLuint *uniformIndices, GLenum pname, GLint *params); GLAPI void APIENTRY glGetActiveUniformName (GLuint program, GLuint uniformIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformName); GLAPI GLuint APIENTRY glGetUniformBlockIndex (GLuint program, const GLchar *uniformBlockName); GLAPI void APIENTRY glGetActiveUniformBlockiv (GLuint program, GLuint uniformBlockIndex, GLenum pname, GLint *params); GLAPI void APIENTRY glGetActiveUniformBlockName (GLuint program, GLuint uniformBlockIndex, GLsizei bufSize, GLsizei *length, GLchar *uniformBlockName); GLAPI void APIENTRY glUniformBlockBinding (GLuint program, GLuint uniformBlockIndex, GLuint uniformBlockBinding); #endif #endif /* GL_VERSION_3_1 */ #ifndef GL_VERSION_3_2 #define GL_VERSION_3_2 1 typedef struct __GLsync *GLsync; typedef khronos_uint64_t GLuint64; typedef khronos_int64_t GLint64; #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 #define GL_DEPTH_CLAMP 0x864F #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 #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F #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_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull #define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001 #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 typedef void (APIENTRYP PFNGLDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC) (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); typedef void (APIENTRYP PFNGLPROVOKINGVERTEXPROC) (GLenum mode); typedef GLsync (APIENTRYP PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags); typedef GLboolean (APIENTRYP PFNGLISSYNCPROC) (GLsync sync); typedef void (APIENTRYP PFNGLDELETESYNCPROC) (GLsync sync); typedef GLenum (APIENTRYP PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (APIENTRYP PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout); typedef void (APIENTRYP PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *data); typedef void (APIENTRYP PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); typedef void (APIENTRYP PFNGLGETINTEGER64I_VPROC) (GLenum target, GLuint index, GLint64 *data); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERI64VPROC) (GLenum target, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLTEXIMAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXIMAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLGETMULTISAMPLEFVPROC) (GLenum pname, GLuint index, GLfloat *val); typedef void (APIENTRYP PFNGLSAMPLEMASKIPROC) (GLuint maskNumber, GLbitfield mask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawElementsBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI void APIENTRY glDrawRangeElementsBaseVertex (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const void *indices, GLint basevertex); GLAPI void APIENTRY glDrawElementsInstancedBaseVertex (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex); GLAPI void APIENTRY glMultiDrawElementsBaseVertex (GLenum mode, const GLsizei *count, GLenum type, const void *const*indices, GLsizei drawcount, const GLint *basevertex); GLAPI void APIENTRY glProvokingVertex (GLenum mode); GLAPI GLsync APIENTRY glFenceSync (GLenum condition, GLbitfield flags); GLAPI GLboolean APIENTRY glIsSync (GLsync sync); GLAPI void APIENTRY glDeleteSync (GLsync sync); GLAPI GLenum APIENTRY glClientWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI void APIENTRY glWaitSync (GLsync sync, GLbitfield flags, GLuint64 timeout); GLAPI void APIENTRY glGetInteger64v (GLenum pname, GLint64 *data); GLAPI void APIENTRY glGetSynciv (GLsync sync, GLenum pname, GLsizei count, GLsizei *length, GLint *values); GLAPI void APIENTRY glGetInteger64i_v (GLenum target, GLuint index, GLint64 *data); GLAPI void APIENTRY glGetBufferParameteri64v (GLenum target, GLenum pname, GLint64 *params); GLAPI void APIENTRY glFramebufferTexture (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glTexImage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTexImage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glGetMultisamplefv (GLenum pname, GLuint index, GLfloat *val); GLAPI void APIENTRY glSampleMaski (GLuint maskNumber, GLbitfield mask); #endif #endif /* GL_VERSION_3_2 */ #ifndef GL_VERSION_3_3 #define GL_VERSION_3_3 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR 0x88FE #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 #define GL_ANY_SAMPLES_PASSED 0x8C2F #define GL_SAMPLER_BINDING 0x8919 #define GL_RGB10_A2UI 0x906F #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 #define GL_TIME_ELAPSED 0x88BF #define GL_TIMESTAMP 0x8E28 #define GL_INT_2_10_10_10_REV 0x8D9F typedef void (APIENTRYP PFNGLBINDFRAGDATALOCATIONINDEXEDPROC) (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETFRAGDATAINDEXPROC) (GLuint program, const GLchar *name); typedef void (APIENTRYP PFNGLGENSAMPLERSPROC) (GLsizei count, GLuint *samplers); typedef void (APIENTRYP PFNGLDELETESAMPLERSPROC) (GLsizei count, const GLuint *samplers); typedef GLboolean (APIENTRYP PFNGLISSAMPLERPROC) (GLuint sampler); typedef void (APIENTRYP PFNGLBINDSAMPLERPROC) (GLuint unit, GLuint sampler); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIPROC) (GLuint sampler, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFPROC) (GLuint sampler, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, const GLuint *param); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIVPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIIVPROC) (GLuint sampler, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERFVPROC) (GLuint sampler, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETSAMPLERPARAMETERIUIVPROC) (GLuint sampler, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLQUERYCOUNTERPROC) (GLuint id, GLenum target); typedef void (APIENTRYP PFNGLGETQUERYOBJECTI64VPROC) (GLuint id, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETQUERYOBJECTUI64VPROC) (GLuint id, GLenum pname, GLuint64 *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORPROC) (GLuint index, GLuint divisor); typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP1UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP2UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP3UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIPROC) (GLuint index, GLenum type, GLboolean normalized, GLuint value); typedef void (APIENTRYP PFNGLVERTEXATTRIBP4UIVPROC) (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindFragDataLocationIndexed (GLuint program, GLuint colorNumber, GLuint index, const GLchar *name); GLAPI GLint APIENTRY glGetFragDataIndex (GLuint program, const GLchar *name); GLAPI void APIENTRY glGenSamplers (GLsizei count, GLuint *samplers); GLAPI void APIENTRY glDeleteSamplers (GLsizei count, const GLuint *samplers); GLAPI GLboolean APIENTRY glIsSampler (GLuint sampler); GLAPI void APIENTRY glBindSampler (GLuint unit, GLuint sampler); GLAPI void APIENTRY glSamplerParameteri (GLuint sampler, GLenum pname, GLint param); GLAPI void APIENTRY glSamplerParameteriv (GLuint sampler, GLenum pname, const GLint *param); GLAPI void APIENTRY glSamplerParameterf (GLuint sampler, GLenum pname, GLfloat param); GLAPI void APIENTRY glSamplerParameterfv (GLuint sampler, GLenum pname, const GLfloat *param); GLAPI void APIENTRY glSamplerParameterIiv (GLuint sampler, GLenum pname, const GLint *param); GLAPI void APIENTRY glSamplerParameterIuiv (GLuint sampler, GLenum pname, const GLuint *param); GLAPI void APIENTRY glGetSamplerParameteriv (GLuint sampler, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSamplerParameterIiv (GLuint sampler, GLenum pname, GLint *params); GLAPI void APIENTRY glGetSamplerParameterfv (GLuint sampler, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetSamplerParameterIuiv (GLuint sampler, GLenum pname, GLuint *params); GLAPI void APIENTRY glQueryCounter (GLuint id, GLenum target); GLAPI void APIENTRY glGetQueryObjecti64v (GLuint id, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetQueryObjectui64v (GLuint id, GLenum pname, GLuint64 *params); GLAPI void APIENTRY glVertexAttribDivisor (GLuint index, GLuint divisor); GLAPI void APIENTRY glVertexAttribP1ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP1uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP2ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP2uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP3ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP3uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); GLAPI void APIENTRY glVertexAttribP4ui (GLuint index, GLenum type, GLboolean normalized, GLuint value); GLAPI void APIENTRY glVertexAttribP4uiv (GLuint index, GLenum type, GLboolean normalized, const GLuint *value); #endif #endif /* GL_VERSION_3_3 */ #ifndef GL_VERSION_4_0 #define GL_VERSION_4_0 1 #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 #define GL_DRAW_INDIRECT_BUFFER 0x8F3F #define GL_DRAW_INDIRECT_BUFFER_BINDING 0x8F43 #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 #define GL_MAX_VERTEX_STREAMS 0x8E71 #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 #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 #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 #define GL_TRANSFORM_FEEDBACK 0x8E22 #define GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED 0x8E23 #define GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_BINDING 0x8E25 #define GL_MAX_TRANSFORM_FEEDBACK_BUFFERS 0x8E70 typedef void (APIENTRYP PFNGLMINSAMPLESHADINGPROC) (GLfloat value); typedef void (APIENTRYP PFNGLBLENDEQUATIONIPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLBLENDFUNCIPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); typedef void (APIENTRYP PFNGLDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect); typedef void (APIENTRYP PFNGLDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect); typedef void (APIENTRYP PFNGLUNIFORM1DPROC) (GLint location, GLdouble x); typedef void (APIENTRYP PFNGLUNIFORM2DPROC) (GLint location, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLUNIFORM3DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLUNIFORM4DPROC) (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLUNIFORM1DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM2DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM3DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORM4DVPROC) (GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX2X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX3X4DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X2DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLUNIFORMMATRIX4X3DVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLGETUNIFORMDVPROC) (GLuint program, GLint location, GLdouble *params); typedef GLint (APIENTRYP PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC) (GLuint program, GLenum shadertype, const GLchar *name); typedef GLuint (APIENTRYP PFNGLGETSUBROUTINEINDEXPROC) (GLuint program, GLenum shadertype, const GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC) (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLGETACTIVESUBROUTINENAMEPROC) (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLUNIFORMSUBROUTINESUIVPROC) (GLenum shadertype, GLsizei count, const GLuint *indices); typedef void (APIENTRYP PFNGLGETUNIFORMSUBROUTINEUIVPROC) (GLenum shadertype, GLint location, GLuint *params); typedef void (APIENTRYP PFNGLGETPROGRAMSTAGEIVPROC) (GLuint program, GLenum shadertype, GLenum pname, GLint *values); typedef void (APIENTRYP PFNGLPATCHPARAMETERIPROC) (GLenum pname, GLint value); typedef void (APIENTRYP PFNGLPATCHPARAMETERFVPROC) (GLenum pname, const GLfloat *values); typedef void (APIENTRYP PFNGLBINDTRANSFORMFEEDBACKPROC) (GLenum target, GLuint id); typedef void (APIENTRYP PFNGLDELETETRANSFORMFEEDBACKSPROC) (GLsizei n, const GLuint *ids); typedef void (APIENTRYP PFNGLGENTRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); typedef GLboolean (APIENTRYP PFNGLISTRANSFORMFEEDBACKPROC) (GLuint id); typedef void (APIENTRYP PFNGLPAUSETRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLRESUMETRANSFORMFEEDBACKPROC) (void); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKPROC) (GLenum mode, GLuint id); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC) (GLenum mode, GLuint id, GLuint stream); typedef void (APIENTRYP PFNGLBEGINQUERYINDEXEDPROC) (GLenum target, GLuint index, GLuint id); typedef void (APIENTRYP PFNGLENDQUERYINDEXEDPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLGETQUERYINDEXEDIVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMinSampleShading (GLfloat value); GLAPI void APIENTRY glBlendEquationi (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparatei (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glBlendFunci (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparatei (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); GLAPI void APIENTRY glDrawArraysIndirect (GLenum mode, const void *indirect); GLAPI void APIENTRY glDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect); GLAPI void APIENTRY glUniform1d (GLint location, GLdouble x); GLAPI void APIENTRY glUniform2d (GLint location, GLdouble x, GLdouble y); GLAPI void APIENTRY glUniform3d (GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glUniform4d (GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glUniform1dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform2dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform3dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniform4dv (GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix2x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix3x4dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4x2dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glUniformMatrix4x3dv (GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glGetUniformdv (GLuint program, GLint location, GLdouble *params); GLAPI GLint APIENTRY glGetSubroutineUniformLocation (GLuint program, GLenum shadertype, const GLchar *name); GLAPI GLuint APIENTRY glGetSubroutineIndex (GLuint program, GLenum shadertype, const GLchar *name); GLAPI void APIENTRY glGetActiveSubroutineUniformiv (GLuint program, GLenum shadertype, GLuint index, GLenum pname, GLint *values); GLAPI void APIENTRY glGetActiveSubroutineUniformName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glGetActiveSubroutineName (GLuint program, GLenum shadertype, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glUniformSubroutinesuiv (GLenum shadertype, GLsizei count, const GLuint *indices); GLAPI void APIENTRY glGetUniformSubroutineuiv (GLenum shadertype, GLint location, GLuint *params); GLAPI void APIENTRY glGetProgramStageiv (GLuint program, GLenum shadertype, GLenum pname, GLint *values); GLAPI void APIENTRY glPatchParameteri (GLenum pname, GLint value); GLAPI void APIENTRY glPatchParameterfv (GLenum pname, const GLfloat *values); GLAPI void APIENTRY glBindTransformFeedback (GLenum target, GLuint id); GLAPI void APIENTRY glDeleteTransformFeedbacks (GLsizei n, const GLuint *ids); GLAPI void APIENTRY glGenTransformFeedbacks (GLsizei n, GLuint *ids); GLAPI GLboolean APIENTRY glIsTransformFeedback (GLuint id); GLAPI void APIENTRY glPauseTransformFeedback (void); GLAPI void APIENTRY glResumeTransformFeedback (void); GLAPI void APIENTRY glDrawTransformFeedback (GLenum mode, GLuint id); GLAPI void APIENTRY glDrawTransformFeedbackStream (GLenum mode, GLuint id, GLuint stream); GLAPI void APIENTRY glBeginQueryIndexed (GLenum target, GLuint index, GLuint id); GLAPI void APIENTRY glEndQueryIndexed (GLenum target, GLuint index); GLAPI void APIENTRY glGetQueryIndexediv (GLenum target, GLuint index, GLenum pname, GLint *params); #endif #endif /* GL_VERSION_4_0 */ #ifndef GL_VERSION_4_1 #define GL_VERSION_4_1 1 #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 #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 #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 #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 typedef void (APIENTRYP PFNGLRELEASESHADERCOMPILERPROC) (void); typedef void (APIENTRYP PFNGLSHADERBINARYPROC) (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); typedef void (APIENTRYP PFNGLGETSHADERPRECISIONFORMATPROC) (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); typedef void (APIENTRYP PFNGLDEPTHRANGEFPROC) (GLfloat n, GLfloat f); typedef void (APIENTRYP PFNGLCLEARDEPTHFPROC) (GLfloat d); typedef void (APIENTRYP PFNGLGETPROGRAMBINARYPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); typedef void (APIENTRYP PFNGLPROGRAMBINARYPROC) (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIPROC) (GLuint program, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLUSEPROGRAMSTAGESPROC) (GLuint pipeline, GLbitfield stages, GLuint program); typedef void (APIENTRYP PFNGLACTIVESHADERPROGRAMPROC) (GLuint pipeline, GLuint program); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMVPROC) (GLenum type, GLsizei count, const GLchar *const*strings); typedef void (APIENTRYP PFNGLBINDPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLDELETEPROGRAMPIPELINESPROC) (GLsizei n, const GLuint *pipelines); typedef void (APIENTRYP PFNGLGENPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); typedef GLboolean (APIENTRYP PFNGLISPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEIVPROC) (GLuint pipeline, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IPROC) (GLuint program, GLint location, GLint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FPROC) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DPROC) (GLuint program, GLint location, GLdouble v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIPROC) (GLuint program, GLint location, GLuint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DPROC) (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPIPELINEPROC) (GLuint pipeline); typedef void (APIENTRYP PFNGLGETPROGRAMPIPELINEINFOLOGPROC) (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DPROC) (GLuint index, GLdouble x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DPROC) (GLuint index, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4DVPROC) (GLuint index, const GLdouble *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLDVPROC) (GLuint index, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLVIEWPORTARRAYVPROC) (GLuint first, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); typedef void (APIENTRYP PFNGLVIEWPORTINDEXEDFVPROC) (GLuint index, const GLfloat *v); typedef void (APIENTRYP PFNGLSCISSORARRAYVPROC) (GLuint first, GLsizei count, const GLint *v); typedef void (APIENTRYP PFNGLSCISSORINDEXEDPROC) (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLSCISSORINDEXEDVPROC) (GLuint index, const GLint *v); typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYVPROC) (GLuint first, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDPROC) (GLuint index, GLdouble n, GLdouble f); typedef void (APIENTRYP PFNGLGETFLOATI_VPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (APIENTRYP PFNGLGETDOUBLEI_VPROC) (GLenum target, GLuint index, GLdouble *data); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glReleaseShaderCompiler (void); GLAPI void APIENTRY glShaderBinary (GLsizei count, const GLuint *shaders, GLenum binaryFormat, const void *binary, GLsizei length); GLAPI void APIENTRY glGetShaderPrecisionFormat (GLenum shadertype, GLenum precisiontype, GLint *range, GLint *precision); GLAPI void APIENTRY glDepthRangef (GLfloat n, GLfloat f); GLAPI void APIENTRY glClearDepthf (GLfloat d); GLAPI void APIENTRY glGetProgramBinary (GLuint program, GLsizei bufSize, GLsizei *length, GLenum *binaryFormat, void *binary); GLAPI void APIENTRY glProgramBinary (GLuint program, GLenum binaryFormat, const void *binary, GLsizei length); GLAPI void APIENTRY glProgramParameteri (GLuint program, GLenum pname, GLint value); GLAPI void APIENTRY glUseProgramStages (GLuint pipeline, GLbitfield stages, GLuint program); GLAPI void APIENTRY glActiveShaderProgram (GLuint pipeline, GLuint program); GLAPI GLuint APIENTRY glCreateShaderProgramv (GLenum type, GLsizei count, const GLchar *const*strings); GLAPI void APIENTRY glBindProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glDeleteProgramPipelines (GLsizei n, const GLuint *pipelines); GLAPI void APIENTRY glGenProgramPipelines (GLsizei n, GLuint *pipelines); GLAPI GLboolean APIENTRY glIsProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glGetProgramPipelineiv (GLuint pipeline, GLenum pname, GLint *params); GLAPI void APIENTRY glProgramUniform1i (GLuint program, GLint location, GLint v0); GLAPI void APIENTRY glProgramUniform1iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform1f (GLuint program, GLint location, GLfloat v0); GLAPI void APIENTRY glProgramUniform1fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1d (GLuint program, GLint location, GLdouble v0); GLAPI void APIENTRY glProgramUniform1dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform1ui (GLuint program, GLint location, GLuint v0); GLAPI void APIENTRY glProgramUniform1uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform2i (GLuint program, GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glProgramUniform2iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform2f (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glProgramUniform2fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform2d (GLuint program, GLint location, GLdouble v0, GLdouble v1); GLAPI void APIENTRY glProgramUniform2dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform2ui (GLuint program, GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glProgramUniform2uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform3i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glProgramUniform3iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform3f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glProgramUniform3fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform3d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2); GLAPI void APIENTRY glProgramUniform3dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform3ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glProgramUniform3uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform4i (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glProgramUniform4iv (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform4f (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glProgramUniform4fv (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform4d (GLuint program, GLint location, GLdouble v0, GLdouble v1, GLdouble v2, GLdouble v3); GLAPI void APIENTRY glProgramUniform4dv (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform4ui (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glProgramUniform4uiv (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniformMatrix2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x2fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x4fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x3fv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x2dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x4dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x3dv (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glValidateProgramPipeline (GLuint pipeline); GLAPI void APIENTRY glGetProgramPipelineInfoLog (GLuint pipeline, GLsizei bufSize, GLsizei *length, GLchar *infoLog); GLAPI void APIENTRY glVertexAttribL1d (GLuint index, GLdouble x); GLAPI void APIENTRY glVertexAttribL2d (GLuint index, GLdouble x, GLdouble y); GLAPI void APIENTRY glVertexAttribL3d (GLuint index, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glVertexAttribL4d (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glVertexAttribL1dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL2dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL3dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribL4dv (GLuint index, const GLdouble *v); GLAPI void APIENTRY glVertexAttribLPointer (GLuint index, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glGetVertexAttribLdv (GLuint index, GLenum pname, GLdouble *params); GLAPI void APIENTRY glViewportArrayv (GLuint first, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glViewportIndexedf (GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h); GLAPI void APIENTRY glViewportIndexedfv (GLuint index, const GLfloat *v); GLAPI void APIENTRY glScissorArrayv (GLuint first, GLsizei count, const GLint *v); GLAPI void APIENTRY glScissorIndexed (GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height); GLAPI void APIENTRY glScissorIndexedv (GLuint index, const GLint *v); GLAPI void APIENTRY glDepthRangeArrayv (GLuint first, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glDepthRangeIndexed (GLuint index, GLdouble n, GLdouble f); GLAPI void APIENTRY glGetFloati_v (GLenum target, GLuint index, GLfloat *data); GLAPI void APIENTRY glGetDoublei_v (GLenum target, GLuint index, GLdouble *data); #endif #endif /* GL_VERSION_4_1 */ #ifndef GL_VERSION_4_2 #define GL_VERSION_4_2 1 #define GL_COPY_READ_BUFFER_BINDING 0x8F36 #define GL_COPY_WRITE_BUFFER_BINDING 0x8F37 #define GL_TRANSFORM_FEEDBACK_ACTIVE 0x8E24 #define GL_TRANSFORM_FEEDBACK_PAUSED 0x8E23 #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 #define GL_NUM_SAMPLE_COUNTS 0x9380 #define GL_MIN_MAP_BUFFER_ALIGNMENT 0x90BC #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 #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 #define GL_COMPRESSED_RGBA_BPTC_UNORM 0x8E8C #define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM 0x8E8D #define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT 0x8E8E #define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT 0x8E8F #define GL_TEXTURE_IMMUTABLE_FORMAT 0x912F typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); typedef void (APIENTRYP PFNGLGETINTERNALFORMATIVPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); typedef void (APIENTRYP PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC) (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLBINDIMAGETEXTUREPROC) (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); typedef void (APIENTRYP PFNGLMEMORYBARRIERPROC) (GLbitfield barriers); typedef void (APIENTRYP PFNGLTEXSTORAGE1DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXSTORAGE2DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXSTORAGE3DPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC) (GLenum mode, GLuint id, GLsizei instancecount); typedef void (APIENTRYP PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC) (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedBaseInstance (GLenum mode, GLint first, GLsizei count, GLsizei instancecount, GLuint baseinstance); GLAPI void APIENTRY glDrawElementsInstancedBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLuint baseinstance); GLAPI void APIENTRY glDrawElementsInstancedBaseVertexBaseInstance (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei instancecount, GLint basevertex, GLuint baseinstance); GLAPI void APIENTRY glGetInternalformativ (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint *params); GLAPI void APIENTRY glGetActiveAtomicCounterBufferiv (GLuint program, GLuint bufferIndex, GLenum pname, GLint *params); GLAPI void APIENTRY glBindImageTexture (GLuint unit, GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum access, GLenum format); GLAPI void APIENTRY glMemoryBarrier (GLbitfield barriers); GLAPI void APIENTRY glTexStorage1D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTexStorage2D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTexStorage3D (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glDrawTransformFeedbackInstanced (GLenum mode, GLuint id, GLsizei instancecount); GLAPI void APIENTRY glDrawTransformFeedbackStreamInstanced (GLenum mode, GLuint id, GLuint stream, GLsizei instancecount); #endif #endif /* GL_VERSION_4_2 */ #ifndef GL_VERSION_4_3 #define GL_VERSION_4_3 1 typedef void (APIENTRY *GLDEBUGPROC)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #define GL_NUM_SHADING_LANGUAGE_VERSIONS 0x82E9 #define GL_VERTEX_ATTRIB_ARRAY_LONG 0x874E #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 #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_WORK_GROUP_INVOCATIONS 0x90EB #define GL_MAX_COMPUTE_WORK_GROUP_COUNT 0x91BE #define GL_MAX_COMPUTE_WORK_GROUP_SIZE 0x91BF #define GL_COMPUTE_WORK_GROUP_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 #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_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_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_MAX_LABEL_LENGTH 0x82E8 #define GL_DEBUG_OUTPUT 0x92E0 #define GL_CONTEXT_FLAG_DEBUG_BIT 0x00000002 #define GL_MAX_UNIFORM_LOCATIONS 0x826E #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 #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_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 #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 #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 0x00002000 #define GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES 0x8F39 #define GL_DEPTH_STENCIL_TEXTURE_MODE 0x90EA #define GL_TEXTURE_BUFFER_OFFSET 0x919D #define GL_TEXTURE_BUFFER_SIZE 0x919E #define GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT 0x919F #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 #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 #define GL_VERTEX_BINDING_BUFFER 0x8F4F typedef void (APIENTRYP PFNGLCLEARBUFFERDATAPROC) (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARBUFFERSUBDATAPROC) (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEINDIRECTPROC) (GLintptr indirect); typedef void (APIENTRYP PFNGLCOPYIMAGESUBDATAPROC) (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); typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETINTERNALFORMATI64VPROC) (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); typedef void (APIENTRYP PFNGLINVALIDATETEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLINVALIDATETEXIMAGEPROC) (GLuint texture, GLint level); typedef void (APIENTRYP PFNGLINVALIDATEBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLINVALIDATEBUFFERDATAPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLINVALIDATEFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments); typedef void (APIENTRYP PFNGLINVALIDATESUBFRAMEBUFFERPROC) (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTPROC) (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLGETPROGRAMINTERFACEIVPROC) (GLuint program, GLenum programInterface, GLenum pname, GLint *params); typedef GLuint (APIENTRYP PFNGLGETPROGRAMRESOURCEINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCENAMEPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEIVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef GLint (APIENTRYP PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC) (GLuint program, GLenum programInterface, const GLchar *name); typedef void (APIENTRYP PFNGLSHADERSTORAGEBLOCKBINDINGPROC) (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); typedef void (APIENTRYP PFNGLTEXBUFFERRANGEPROC) (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXSTORAGE2DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXSTORAGE3DMULTISAMPLEPROC) (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTUREVIEWPROC) (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATPROC) (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXATTRIBBINDINGPROC) (GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXBINDINGDIVISORPROC) (GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKPROC) (GLDEBUGPROC callback, const void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); typedef void (APIENTRYP PFNGLPUSHDEBUGGROUPPROC) (GLenum source, GLuint id, GLsizei length, const GLchar *message); typedef void (APIENTRYP PFNGLPOPDEBUGGROUPPROC) (void); typedef void (APIENTRYP PFNGLOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTLABELPROC) (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); typedef void (APIENTRYP PFNGLOBJECTPTRLABELPROC) (const void *ptr, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTPTRLABELPROC) (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClearBufferData (GLenum target, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearBufferSubData (GLenum target, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glDispatchCompute (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z); GLAPI void APIENTRY glDispatchComputeIndirect (GLintptr indirect); GLAPI void APIENTRY 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); GLAPI void APIENTRY glFramebufferParameteri (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glGetFramebufferParameteriv (GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetInternalformati64v (GLenum target, GLenum internalformat, GLenum pname, GLsizei count, GLint64 *params); GLAPI void APIENTRY glInvalidateTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glInvalidateTexImage (GLuint texture, GLint level); GLAPI void APIENTRY glInvalidateBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glInvalidateBufferData (GLuint buffer); GLAPI void APIENTRY glInvalidateFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments); GLAPI void APIENTRY glInvalidateSubFramebuffer (GLenum target, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glMultiDrawArraysIndirect (GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirect (GLenum mode, GLenum type, const void *indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glGetProgramInterfaceiv (GLuint program, GLenum programInterface, GLenum pname, GLint *params); GLAPI GLuint APIENTRY glGetProgramResourceIndex (GLuint program, GLenum programInterface, const GLchar *name); GLAPI void APIENTRY glGetProgramResourceName (GLuint program, GLenum programInterface, GLuint index, GLsizei bufSize, GLsizei *length, GLchar *name); GLAPI void APIENTRY glGetProgramResourceiv (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLint *params); GLAPI GLint APIENTRY glGetProgramResourceLocation (GLuint program, GLenum programInterface, const GLchar *name); GLAPI GLint APIENTRY glGetProgramResourceLocationIndex (GLuint program, GLenum programInterface, const GLchar *name); GLAPI void APIENTRY glShaderStorageBlockBinding (GLuint program, GLuint storageBlockIndex, GLuint storageBlockBinding); GLAPI void APIENTRY glTexBufferRange (GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTexStorage2DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTexStorage3DMultisample (GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureView (GLuint texture, GLenum target, GLuint origtexture, GLenum internalformat, GLuint minlevel, GLuint numlevels, GLuint minlayer, GLuint numlayers); GLAPI void APIENTRY glBindVertexBuffer (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexAttribFormat (GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribIFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribLFormat (GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexAttribBinding (GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexBindingDivisor (GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glDebugMessageControl (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsert (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallback (GLDEBUGPROC callback, const void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLog (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); GLAPI void APIENTRY glPushDebugGroup (GLenum source, GLuint id, GLsizei length, const GLchar *message); GLAPI void APIENTRY glPopDebugGroup (void); GLAPI void APIENTRY glObjectLabel (GLenum identifier, GLuint name, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectLabel (GLenum identifier, GLuint name, GLsizei bufSize, GLsizei *length, GLchar *label); GLAPI void APIENTRY glObjectPtrLabel (const void *ptr, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectPtrLabel (const void *ptr, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #endif /* GL_VERSION_4_3 */ #ifndef GL_VERSION_4_4 #define GL_VERSION_4_4 1 #define GL_MAX_VERTEX_ATTRIB_STRIDE 0x82E5 #define GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED 0x8221 #define GL_TEXTURE_BUFFER_BINDING 0x8C2A #define GL_MAP_PERSISTENT_BIT 0x0040 #define GL_MAP_COHERENT_BIT 0x0080 #define GL_DYNAMIC_STORAGE_BIT 0x0100 #define GL_CLIENT_STORAGE_BIT 0x0200 #define GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT 0x00004000 #define GL_BUFFER_IMMUTABLE_STORAGE 0x821F #define GL_BUFFER_STORAGE_FLAGS 0x8220 #define GL_CLEAR_TEXTURE 0x9365 #define GL_LOCATION_COMPONENT 0x934A #define GL_TRANSFORM_FEEDBACK_BUFFER_INDEX 0x934B #define GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE 0x934C #define GL_QUERY_BUFFER 0x9192 #define GL_QUERY_BUFFER_BARRIER_BIT 0x00008000 #define GL_QUERY_BUFFER_BINDING 0x9193 #define GL_QUERY_RESULT_NO_WAIT 0x9194 #define GL_MIRROR_CLAMP_TO_EDGE 0x8743 typedef void (APIENTRYP PFNGLBUFFERSTORAGEPROC) (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLCLEARTEXIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARTEXSUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLBINDBUFFERSBASEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); typedef void (APIENTRYP PFNGLBINDBUFFERSRANGEPROC) (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); typedef void (APIENTRYP PFNGLBINDTEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); typedef void (APIENTRYP PFNGLBINDSAMPLERSPROC) (GLuint first, GLsizei count, const GLuint *samplers); typedef void (APIENTRYP PFNGLBINDIMAGETEXTURESPROC) (GLuint first, GLsizei count, const GLuint *textures); typedef void (APIENTRYP PFNGLBINDVERTEXBUFFERSPROC) (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferStorage (GLenum target, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glClearTexImage (GLuint texture, GLint level, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearTexSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glBindBuffersBase (GLenum target, GLuint first, GLsizei count, const GLuint *buffers); GLAPI void APIENTRY glBindBuffersRange (GLenum target, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizeiptr *sizes); GLAPI void APIENTRY glBindTextures (GLuint first, GLsizei count, const GLuint *textures); GLAPI void APIENTRY glBindSamplers (GLuint first, GLsizei count, const GLuint *samplers); GLAPI void APIENTRY glBindImageTextures (GLuint first, GLsizei count, const GLuint *textures); GLAPI void APIENTRY glBindVertexBuffers (GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); #endif #endif /* GL_VERSION_4_4 */ #ifndef GL_VERSION_4_5 #define GL_VERSION_4_5 1 #define GL_CONTEXT_LOST 0x0507 #define GL_NEGATIVE_ONE_TO_ONE 0x935E #define GL_ZERO_TO_ONE 0x935F #define GL_CLIP_ORIGIN 0x935C #define GL_CLIP_DEPTH_MODE 0x935D #define GL_QUERY_WAIT_INVERTED 0x8E17 #define GL_QUERY_NO_WAIT_INVERTED 0x8E18 #define GL_QUERY_BY_REGION_WAIT_INVERTED 0x8E19 #define GL_QUERY_BY_REGION_NO_WAIT_INVERTED 0x8E1A #define GL_MAX_CULL_DISTANCES 0x82F9 #define GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES 0x82FA #define GL_TEXTURE_TARGET 0x1006 #define GL_QUERY_TARGET 0x82EA #define GL_GUILTY_CONTEXT_RESET 0x8253 #define GL_INNOCENT_CONTEXT_RESET 0x8254 #define GL_UNKNOWN_CONTEXT_RESET 0x8255 #define GL_RESET_NOTIFICATION_STRATEGY 0x8256 #define GL_LOSE_CONTEXT_ON_RESET 0x8252 #define GL_NO_RESET_NOTIFICATION 0x8261 #define GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT 0x00000004 #define GL_CONTEXT_RELEASE_BEHAVIOR 0x82FB #define GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH 0x82FC typedef void (APIENTRYP PFNGLCLIPCONTROLPROC) (GLenum origin, GLenum depth); typedef void (APIENTRYP PFNGLCREATETRANSFORMFEEDBACKSPROC) (GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC) (GLuint xfb, GLuint index, GLuint buffer); typedef void (APIENTRYP PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC) (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKIVPROC) (GLuint xfb, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint *param); typedef void (APIENTRYP PFNGLGETTRANSFORMFEEDBACKI64_VPROC) (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); typedef void (APIENTRYP PFNGLCREATEBUFFERSPROC) (GLsizei n, GLuint *buffers); typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void (APIENTRYP PFNGLCOPYNAMEDBUFFERSUBDATAPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERPROC) (GLuint buffer, GLenum access); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFERPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERI64VPROC) (GLuint buffer, GLenum pname, GLint64 *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVPROC) (GLuint buffer, GLenum pname, void **params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); typedef void (APIENTRYP PFNGLCREATEFRAMEBUFFERSPROC) (GLsizei n, GLuint *framebuffers); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC) (GLuint framebuffer, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC) (GLuint framebuffer, GLenum buf); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC) (GLuint framebuffer, GLenum src); typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); typedef void (APIENTRYP PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC) (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFVPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); typedef void (APIENTRYP PFNGLCLEARNAMEDFRAMEBUFFERFIPROC) (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); typedef void (APIENTRYP PFNGLBLITNAMEDFRAMEBUFFERPROC) (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC) (GLuint framebuffer, GLenum target); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC) (GLuint framebuffer, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATERENDERBUFFERSPROC) (GLsizei n, GLuint *renderbuffers); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC) (GLuint renderbuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATETEXTURESPROC) (GLenum target, GLsizei n, GLuint *textures); typedef void (APIENTRYP PFNGLTEXTUREBUFFERPROC) (GLuint texture, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEPROC) (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DPROC) (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC) (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DPROC) (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFPROC) (GLuint texture, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, const GLfloat *param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIPROC) (GLuint texture, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, const GLint *param); typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPPROC) (GLuint texture); typedef void (APIENTRYP PFNGLBINDTEXTUREUNITPROC) (GLuint unit, GLuint texture); typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC) (GLuint texture, GLint level, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVPROC) (GLuint texture, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVPROC) (GLuint texture, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVPROC) (GLuint texture, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVPROC) (GLuint texture, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVPROC) (GLuint texture, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVPROC) (GLuint texture, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLCREATEVERTEXARRAYSPROC) (GLsizei n, GLuint *arrays); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLVERTEXARRAYELEMENTBUFFERPROC) (GLuint vaobj, GLuint buffer); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBUFFERSPROC) (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBBINDINGPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBIFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYATTRIBLFORMATPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYBINDINGDIVISORPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLGETVERTEXARRAYIVPROC) (GLuint vaobj, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXEDIVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINDEXED64IVPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); typedef void (APIENTRYP PFNGLCREATESAMPLERSPROC) (GLsizei n, GLuint *samplers); typedef void (APIENTRYP PFNGLCREATEPROGRAMPIPELINESPROC) (GLsizei n, GLuint *pipelines); typedef void (APIENTRYP PFNGLCREATEQUERIESPROC) (GLenum target, GLsizei n, GLuint *ids); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUI64VPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLGETQUERYBUFFEROBJECTUIVPROC) (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); typedef void (APIENTRYP PFNGLMEMORYBARRIERBYREGIONPROC) (GLbitfield barriers); typedef void (APIENTRYP PFNGLGETTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSPROC) (void); typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint lod, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETNTEXIMAGEPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); typedef void (APIENTRYP PFNGLGETNUNIFORMDVPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); typedef void (APIENTRYP PFNGLGETNUNIFORMFVPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (APIENTRYP PFNGLGETNUNIFORMIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUIVPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); typedef void (APIENTRYP PFNGLREADNPIXELSPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (APIENTRYP PFNGLTEXTUREBARRIERPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glClipControl (GLenum origin, GLenum depth); GLAPI void APIENTRY glCreateTransformFeedbacks (GLsizei n, GLuint *ids); GLAPI void APIENTRY glTransformFeedbackBufferBase (GLuint xfb, GLuint index, GLuint buffer); GLAPI void APIENTRY glTransformFeedbackBufferRange (GLuint xfb, GLuint index, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glGetTransformFeedbackiv (GLuint xfb, GLenum pname, GLint *param); GLAPI void APIENTRY glGetTransformFeedbacki_v (GLuint xfb, GLenum pname, GLuint index, GLint *param); GLAPI void APIENTRY glGetTransformFeedbacki64_v (GLuint xfb, GLenum pname, GLuint index, GLint64 *param); GLAPI void APIENTRY glCreateBuffers (GLsizei n, GLuint *buffers); GLAPI void APIENTRY glNamedBufferStorage (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glNamedBufferData (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void APIENTRY glCopyNamedBufferSubData (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glClearNamedBufferData (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearNamedBufferSubData (GLuint buffer, GLenum internalformat, GLintptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void *APIENTRY glMapNamedBuffer (GLuint buffer, GLenum access); GLAPI void *APIENTRY glMapNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI GLboolean APIENTRY glUnmapNamedBuffer (GLuint buffer); GLAPI void APIENTRY glFlushMappedNamedBufferRange (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glGetNamedBufferParameteriv (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedBufferParameteri64v (GLuint buffer, GLenum pname, GLint64 *params); GLAPI void APIENTRY glGetNamedBufferPointerv (GLuint buffer, GLenum pname, void **params); GLAPI void APIENTRY glGetNamedBufferSubData (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); GLAPI void APIENTRY glCreateFramebuffers (GLsizei n, GLuint *framebuffers); GLAPI void APIENTRY glNamedFramebufferRenderbuffer (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glNamedFramebufferParameteri (GLuint framebuffer, GLenum pname, GLint param); GLAPI void APIENTRY glNamedFramebufferTexture (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTextureLayer (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glNamedFramebufferDrawBuffer (GLuint framebuffer, GLenum buf); GLAPI void APIENTRY glNamedFramebufferDrawBuffers (GLuint framebuffer, GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glNamedFramebufferReadBuffer (GLuint framebuffer, GLenum src); GLAPI void APIENTRY glInvalidateNamedFramebufferData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments); GLAPI void APIENTRY glInvalidateNamedFramebufferSubData (GLuint framebuffer, GLsizei numAttachments, const GLenum *attachments, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glClearNamedFramebufferiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLint *value); GLAPI void APIENTRY glClearNamedFramebufferuiv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLuint *value); GLAPI void APIENTRY glClearNamedFramebufferfv (GLuint framebuffer, GLenum buffer, GLint drawbuffer, const GLfloat *value); GLAPI void APIENTRY glClearNamedFramebufferfi (GLuint framebuffer, GLenum buffer, GLint drawbuffer, GLfloat depth, GLint stencil); GLAPI void APIENTRY glBlitNamedFramebuffer (GLuint readFramebuffer, GLuint drawFramebuffer, GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter); GLAPI GLenum APIENTRY glCheckNamedFramebufferStatus (GLuint framebuffer, GLenum target); GLAPI void APIENTRY glGetNamedFramebufferParameteriv (GLuint framebuffer, GLenum pname, GLint *param); GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameteriv (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateRenderbuffers (GLsizei n, GLuint *renderbuffers); GLAPI void APIENTRY glNamedRenderbufferStorage (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisample (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetNamedRenderbufferParameteriv (GLuint renderbuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateTextures (GLenum target, GLsizei n, GLuint *textures); GLAPI void APIENTRY glTextureBuffer (GLuint texture, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glTextureBufferRange (GLuint texture, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTextureStorage1D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTextureStorage2D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureStorage3D (GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glTextureStorage2DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureStorage3DMultisample (GLuint texture, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCompressedTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCompressedTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *data); GLAPI void APIENTRY glCopyTextureSubImage1D (GLuint texture, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTextureSubImage2D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glCopyTextureSubImage3D (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureParameterf (GLuint texture, GLenum pname, GLfloat param); GLAPI void APIENTRY glTextureParameterfv (GLuint texture, GLenum pname, const GLfloat *param); GLAPI void APIENTRY glTextureParameteri (GLuint texture, GLenum pname, GLint param); GLAPI void APIENTRY glTextureParameterIiv (GLuint texture, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureParameterIuiv (GLuint texture, GLenum pname, const GLuint *params); GLAPI void APIENTRY glTextureParameteriv (GLuint texture, GLenum pname, const GLint *param); GLAPI void APIENTRY glGenerateTextureMipmap (GLuint texture); GLAPI void APIENTRY glBindTextureUnit (GLuint unit, GLuint texture); GLAPI void APIENTRY glGetTextureImage (GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetCompressedTextureImage (GLuint texture, GLint level, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetTextureLevelParameterfv (GLuint texture, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureLevelParameteriv (GLuint texture, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterfv (GLuint texture, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureParameterIiv (GLuint texture, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterIuiv (GLuint texture, GLenum pname, GLuint *params); GLAPI void APIENTRY glGetTextureParameteriv (GLuint texture, GLenum pname, GLint *params); GLAPI void APIENTRY glCreateVertexArrays (GLsizei n, GLuint *arrays); GLAPI void APIENTRY glDisableVertexArrayAttrib (GLuint vaobj, GLuint index); GLAPI void APIENTRY glEnableVertexArrayAttrib (GLuint vaobj, GLuint index); GLAPI void APIENTRY glVertexArrayElementBuffer (GLuint vaobj, GLuint buffer); GLAPI void APIENTRY glVertexArrayVertexBuffer (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexArrayVertexBuffers (GLuint vaobj, GLuint first, GLsizei count, const GLuint *buffers, const GLintptr *offsets, const GLsizei *strides); GLAPI void APIENTRY glVertexArrayAttribBinding (GLuint vaobj, GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexArrayAttribFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayAttribIFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayAttribLFormat (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayBindingDivisor (GLuint vaobj, GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glGetVertexArrayiv (GLuint vaobj, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayIndexediv (GLuint vaobj, GLuint index, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayIndexed64iv (GLuint vaobj, GLuint index, GLenum pname, GLint64 *param); GLAPI void APIENTRY glCreateSamplers (GLsizei n, GLuint *samplers); GLAPI void APIENTRY glCreateProgramPipelines (GLsizei n, GLuint *pipelines); GLAPI void APIENTRY glCreateQueries (GLenum target, GLsizei n, GLuint *ids); GLAPI void APIENTRY glGetQueryBufferObjecti64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectui64v (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glGetQueryBufferObjectuiv (GLuint id, GLuint buffer, GLenum pname, GLintptr offset); GLAPI void APIENTRY glMemoryBarrierByRegion (GLbitfield barriers); GLAPI void APIENTRY glGetTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetCompressedTextureSubImage (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei bufSize, void *pixels); GLAPI GLenum APIENTRY glGetGraphicsResetStatus (void); GLAPI void APIENTRY glGetnCompressedTexImage (GLenum target, GLint lod, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetnTexImage (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *pixels); GLAPI void APIENTRY glGetnUniformdv (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); GLAPI void APIENTRY glGetnUniformfv (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GLAPI void APIENTRY glGetnUniformiv (GLuint program, GLint location, GLsizei bufSize, GLint *params); GLAPI void APIENTRY glGetnUniformuiv (GLuint program, GLint location, GLsizei bufSize, GLuint *params); GLAPI void APIENTRY glReadnPixels (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GLAPI void APIENTRY glTextureBarrier (void); #endif #endif /* GL_VERSION_4_5 */ #ifndef GL_VERSION_4_6 #define GL_VERSION_4_6 1 #define GL_SHADER_BINARY_FORMAT_SPIR_V 0x9551 #define GL_SPIR_V_BINARY 0x9552 #define GL_PARAMETER_BUFFER 0x80EE #define GL_PARAMETER_BUFFER_BINDING 0x80EF #define GL_CONTEXT_FLAG_NO_ERROR_BIT 0x00000008 #define GL_VERTICES_SUBMITTED 0x82EE #define GL_PRIMITIVES_SUBMITTED 0x82EF #define GL_VERTEX_SHADER_INVOCATIONS 0x82F0 #define GL_TESS_CONTROL_SHADER_PATCHES 0x82F1 #define GL_TESS_EVALUATION_SHADER_INVOCATIONS 0x82F2 #define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED 0x82F3 #define GL_FRAGMENT_SHADER_INVOCATIONS 0x82F4 #define GL_COMPUTE_SHADER_INVOCATIONS 0x82F5 #define GL_CLIPPING_INPUT_PRIMITIVES 0x82F6 #define GL_CLIPPING_OUTPUT_PRIMITIVES 0x82F7 #define GL_POLYGON_OFFSET_CLAMP 0x8E1B #define GL_SPIR_V_EXTENSIONS 0x9553 #define GL_NUM_SPIR_V_EXTENSIONS 0x9554 #define GL_TEXTURE_MAX_ANISOTROPY 0x84FE #define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF #define GL_TRANSFORM_FEEDBACK_OVERFLOW 0x82EC #define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW 0x82ED typedef void (APIENTRYP PFNGLSPECIALIZESHADERPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPPROC) (GLfloat factor, GLfloat units, GLfloat clamp); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSpecializeShader (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); GLAPI void APIENTRY glMultiDrawArraysIndirectCount (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirectCount (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); GLAPI void APIENTRY glPolygonOffsetClamp (GLfloat factor, GLfloat units, GLfloat clamp); #endif #endif /* GL_VERSION_4_6 */ #ifndef GL_ARB_ES2_compatibility #define GL_ARB_ES2_compatibility 1 #endif /* GL_ARB_ES2_compatibility */ #ifndef GL_ARB_ES3_1_compatibility #define GL_ARB_ES3_1_compatibility 1 #endif /* GL_ARB_ES3_1_compatibility */ #ifndef GL_ARB_ES3_2_compatibility #define GL_ARB_ES3_2_compatibility 1 #define GL_PRIMITIVE_BOUNDING_BOX_ARB 0x92BE #define GL_MULTISAMPLE_LINE_WIDTH_RANGE_ARB 0x9381 #define GL_MULTISAMPLE_LINE_WIDTH_GRANULARITY_ARB 0x9382 typedef void (APIENTRYP PFNGLPRIMITIVEBOUNDINGBOXARBPROC) (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPrimitiveBoundingBoxARB (GLfloat minX, GLfloat minY, GLfloat minZ, GLfloat minW, GLfloat maxX, GLfloat maxY, GLfloat maxZ, GLfloat maxW); #endif #endif /* GL_ARB_ES3_2_compatibility */ #ifndef GL_ARB_ES3_compatibility #define GL_ARB_ES3_compatibility 1 #endif /* GL_ARB_ES3_compatibility */ #ifndef GL_ARB_arrays_of_arrays #define GL_ARB_arrays_of_arrays 1 #endif /* GL_ARB_arrays_of_arrays */ #ifndef GL_ARB_base_instance #define GL_ARB_base_instance 1 #endif /* GL_ARB_base_instance */ #ifndef GL_ARB_bindless_texture #define GL_ARB_bindless_texture 1 typedef khronos_uint64_t GLuint64EXT; #define GL_UNSIGNED_INT64_ARB 0x140F typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLEARBPROC) (GLuint texture); typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLEARBPROC) (GLuint texture, GLuint sampler); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTARBPROC) (GLuint64 handle); typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLEARBPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle, GLenum access); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64ARBPROC) (GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64ARBPROC) (GLuint program, GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTARBPROC) (GLuint64 handle); typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTARBPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64ARBPROC) (GLuint index, GLuint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VARBPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VARBPROC) (GLuint index, GLenum pname, GLuint64EXT *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint64 APIENTRY glGetTextureHandleARB (GLuint texture); GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleARB (GLuint texture, GLuint sampler); GLAPI void APIENTRY glMakeTextureHandleResidentARB (GLuint64 handle); GLAPI void APIENTRY glMakeTextureHandleNonResidentARB (GLuint64 handle); GLAPI GLuint64 APIENTRY glGetImageHandleARB (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GLAPI void APIENTRY glMakeImageHandleResidentARB (GLuint64 handle, GLenum access); GLAPI void APIENTRY glMakeImageHandleNonResidentARB (GLuint64 handle); GLAPI void APIENTRY glUniformHandleui64ARB (GLint location, GLuint64 value); GLAPI void APIENTRY glUniformHandleui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniformHandleui64ARB (GLuint program, GLint location, GLuint64 value); GLAPI void APIENTRY glProgramUniformHandleui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GLAPI GLboolean APIENTRY glIsTextureHandleResidentARB (GLuint64 handle); GLAPI GLboolean APIENTRY glIsImageHandleResidentARB (GLuint64 handle); GLAPI void APIENTRY glVertexAttribL1ui64ARB (GLuint index, GLuint64EXT x); GLAPI void APIENTRY glVertexAttribL1ui64vARB (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glGetVertexAttribLui64vARB (GLuint index, GLenum pname, GLuint64EXT *params); #endif #endif /* GL_ARB_bindless_texture */ #ifndef GL_ARB_blend_func_extended #define GL_ARB_blend_func_extended 1 #endif /* GL_ARB_blend_func_extended */ #ifndef GL_ARB_buffer_storage #define GL_ARB_buffer_storage 1 #endif /* GL_ARB_buffer_storage */ #ifndef GL_ARB_cl_event #define GL_ARB_cl_event 1 struct _cl_context; struct _cl_event; #define GL_SYNC_CL_EVENT_ARB 0x8240 #define GL_SYNC_CL_EVENT_COMPLETE_ARB 0x8241 typedef GLsync (APIENTRYP PFNGLCREATESYNCFROMCLEVENTARBPROC) (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLsync APIENTRY glCreateSyncFromCLeventARB (struct _cl_context *context, struct _cl_event *event, GLbitfield flags); #endif #endif /* GL_ARB_cl_event */ #ifndef GL_ARB_clear_buffer_object #define GL_ARB_clear_buffer_object 1 #endif /* GL_ARB_clear_buffer_object */ #ifndef GL_ARB_clear_texture #define GL_ARB_clear_texture 1 #endif /* GL_ARB_clear_texture */ #ifndef GL_ARB_clip_control #define GL_ARB_clip_control 1 #endif /* GL_ARB_clip_control */ #ifndef GL_ARB_compressed_texture_pixel_storage #define GL_ARB_compressed_texture_pixel_storage 1 #endif /* GL_ARB_compressed_texture_pixel_storage */ #ifndef GL_ARB_compute_shader #define GL_ARB_compute_shader 1 #endif /* GL_ARB_compute_shader */ #ifndef GL_ARB_compute_variable_group_size #define GL_ARB_compute_variable_group_size 1 #define GL_MAX_COMPUTE_VARIABLE_GROUP_INVOCATIONS_ARB 0x9344 #define GL_MAX_COMPUTE_FIXED_GROUP_INVOCATIONS_ARB 0x90EB #define GL_MAX_COMPUTE_VARIABLE_GROUP_SIZE_ARB 0x9345 #define GL_MAX_COMPUTE_FIXED_GROUP_SIZE_ARB 0x91BF typedef void (APIENTRYP PFNGLDISPATCHCOMPUTEGROUPSIZEARBPROC) (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDispatchComputeGroupSizeARB (GLuint num_groups_x, GLuint num_groups_y, GLuint num_groups_z, GLuint group_size_x, GLuint group_size_y, GLuint group_size_z); #endif #endif /* GL_ARB_compute_variable_group_size */ #ifndef GL_ARB_conditional_render_inverted #define GL_ARB_conditional_render_inverted 1 #endif /* GL_ARB_conditional_render_inverted */ #ifndef GL_ARB_conservative_depth #define GL_ARB_conservative_depth 1 #endif /* GL_ARB_conservative_depth */ #ifndef GL_ARB_copy_buffer #define GL_ARB_copy_buffer 1 #endif /* GL_ARB_copy_buffer */ #ifndef GL_ARB_copy_image #define GL_ARB_copy_image 1 #endif /* GL_ARB_copy_image */ #ifndef GL_ARB_cull_distance #define GL_ARB_cull_distance 1 #endif /* GL_ARB_cull_distance */ #ifndef GL_ARB_debug_output #define GL_ARB_debug_output 1 typedef void (APIENTRY *GLDEBUGPROCARB)(GLenum source,GLenum type,GLuint id,GLenum severity,GLsizei length,const GLchar *message,const void *userParam); #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 typedef void (APIENTRYP PFNGLDEBUGMESSAGECONTROLARBPROC) (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); typedef void (APIENTRYP PFNGLDEBUGMESSAGEINSERTARBPROC) (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); typedef void (APIENTRYP PFNGLDEBUGMESSAGECALLBACKARBPROC) (GLDEBUGPROCARB callback, const void *userParam); typedef GLuint (APIENTRYP PFNGLGETDEBUGMESSAGELOGARBPROC) (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDebugMessageControlARB (GLenum source, GLenum type, GLenum severity, GLsizei count, const GLuint *ids, GLboolean enabled); GLAPI void APIENTRY glDebugMessageInsertARB (GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const GLchar *buf); GLAPI void APIENTRY glDebugMessageCallbackARB (GLDEBUGPROCARB callback, const void *userParam); GLAPI GLuint APIENTRY glGetDebugMessageLogARB (GLuint count, GLsizei bufSize, GLenum *sources, GLenum *types, GLuint *ids, GLenum *severities, GLsizei *lengths, GLchar *messageLog); #endif #endif /* GL_ARB_debug_output */ #ifndef GL_ARB_depth_buffer_float #define GL_ARB_depth_buffer_float 1 #endif /* GL_ARB_depth_buffer_float */ #ifndef GL_ARB_depth_clamp #define GL_ARB_depth_clamp 1 #endif /* GL_ARB_depth_clamp */ #ifndef GL_ARB_derivative_control #define GL_ARB_derivative_control 1 #endif /* GL_ARB_derivative_control */ #ifndef GL_ARB_direct_state_access #define GL_ARB_direct_state_access 1 #endif /* GL_ARB_direct_state_access */ #ifndef GL_ARB_draw_buffers_blend #define GL_ARB_draw_buffers_blend 1 typedef void (APIENTRYP PFNGLBLENDEQUATIONIARBPROC) (GLuint buf, GLenum mode); typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEIARBPROC) (GLuint buf, GLenum modeRGB, GLenum modeAlpha); typedef void (APIENTRYP PFNGLBLENDFUNCIARBPROC) (GLuint buf, GLenum src, GLenum dst); typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEIARBPROC) (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendEquationiARB (GLuint buf, GLenum mode); GLAPI void APIENTRY glBlendEquationSeparateiARB (GLuint buf, GLenum modeRGB, GLenum modeAlpha); GLAPI void APIENTRY glBlendFunciARB (GLuint buf, GLenum src, GLenum dst); GLAPI void APIENTRY glBlendFuncSeparateiARB (GLuint buf, GLenum srcRGB, GLenum dstRGB, GLenum srcAlpha, GLenum dstAlpha); #endif #endif /* GL_ARB_draw_buffers_blend */ #ifndef GL_ARB_draw_elements_base_vertex #define GL_ARB_draw_elements_base_vertex 1 #endif /* GL_ARB_draw_elements_base_vertex */ #ifndef GL_ARB_draw_indirect #define GL_ARB_draw_indirect 1 #endif /* GL_ARB_draw_indirect */ #ifndef GL_ARB_draw_instanced #define GL_ARB_draw_instanced 1 typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDARBPROC) (GLenum mode, GLint first, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDARBPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedARB (GLenum mode, GLint first, GLsizei count, GLsizei primcount); GLAPI void APIENTRY glDrawElementsInstancedARB (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_ARB_draw_instanced */ #ifndef GL_ARB_enhanced_layouts #define GL_ARB_enhanced_layouts 1 #endif /* GL_ARB_enhanced_layouts */ #ifndef GL_ARB_explicit_attrib_location #define GL_ARB_explicit_attrib_location 1 #endif /* GL_ARB_explicit_attrib_location */ #ifndef GL_ARB_explicit_uniform_location #define GL_ARB_explicit_uniform_location 1 #endif /* GL_ARB_explicit_uniform_location */ #ifndef GL_ARB_fragment_coord_conventions #define GL_ARB_fragment_coord_conventions 1 #endif /* GL_ARB_fragment_coord_conventions */ #ifndef GL_ARB_fragment_layer_viewport #define GL_ARB_fragment_layer_viewport 1 #endif /* GL_ARB_fragment_layer_viewport */ #ifndef GL_ARB_fragment_shader_interlock #define GL_ARB_fragment_shader_interlock 1 #endif /* GL_ARB_fragment_shader_interlock */ #ifndef GL_ARB_framebuffer_no_attachments #define GL_ARB_framebuffer_no_attachments 1 #endif /* GL_ARB_framebuffer_no_attachments */ #ifndef GL_ARB_framebuffer_object #define GL_ARB_framebuffer_object 1 #endif /* GL_ARB_framebuffer_object */ #ifndef GL_ARB_framebuffer_sRGB #define GL_ARB_framebuffer_sRGB 1 #endif /* GL_ARB_framebuffer_sRGB */ #ifndef GL_ARB_geometry_shader4 #define GL_ARB_geometry_shader4 1 #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 typedef void (APIENTRYP PFNGLPROGRAMPARAMETERIARBPROC) (GLuint program, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURELAYERARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREFACEARBPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glProgramParameteriARB (GLuint program, GLenum pname, GLint value); GLAPI void APIENTRY glFramebufferTextureARB (GLenum target, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glFramebufferTextureLayerARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glFramebufferTextureFaceARB (GLenum target, GLenum attachment, GLuint texture, GLint level, GLenum face); #endif #endif /* GL_ARB_geometry_shader4 */ #ifndef GL_ARB_get_program_binary #define GL_ARB_get_program_binary 1 #endif /* GL_ARB_get_program_binary */ #ifndef GL_ARB_get_texture_sub_image #define GL_ARB_get_texture_sub_image 1 #endif /* GL_ARB_get_texture_sub_image */ #ifndef GL_ARB_gl_spirv #define GL_ARB_gl_spirv 1 #define GL_SHADER_BINARY_FORMAT_SPIR_V_ARB 0x9551 #define GL_SPIR_V_BINARY_ARB 0x9552 typedef void (APIENTRYP PFNGLSPECIALIZESHADERARBPROC) (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSpecializeShaderARB (GLuint shader, const GLchar *pEntryPoint, GLuint numSpecializationConstants, const GLuint *pConstantIndex, const GLuint *pConstantValue); #endif #endif /* GL_ARB_gl_spirv */ #ifndef GL_ARB_gpu_shader5 #define GL_ARB_gpu_shader5 1 #endif /* GL_ARB_gpu_shader5 */ #ifndef GL_ARB_gpu_shader_fp64 #define GL_ARB_gpu_shader_fp64 1 #endif /* GL_ARB_gpu_shader_fp64 */ #ifndef GL_ARB_gpu_shader_int64 #define GL_ARB_gpu_shader_int64 1 #define GL_INT64_ARB 0x140E #define GL_INT64_VEC2_ARB 0x8FE9 #define GL_INT64_VEC3_ARB 0x8FEA #define GL_INT64_VEC4_ARB 0x8FEB #define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 #define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 #define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 typedef void (APIENTRYP PFNGLUNIFORM1I64ARBPROC) (GLint location, GLint64 x); typedef void (APIENTRYP PFNGLUNIFORM2I64ARBPROC) (GLint location, GLint64 x, GLint64 y); typedef void (APIENTRYP PFNGLUNIFORM3I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z); typedef void (APIENTRYP PFNGLUNIFORM4I64ARBPROC) (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); typedef void (APIENTRYP PFNGLUNIFORM1I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLUNIFORM2I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLUNIFORM3I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLUNIFORM4I64VARBPROC) (GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLUNIFORM1UI64ARBPROC) (GLint location, GLuint64 x); typedef void (APIENTRYP PFNGLUNIFORM2UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y); typedef void (APIENTRYP PFNGLUNIFORM3UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); typedef void (APIENTRYP PFNGLUNIFORM4UI64ARBPROC) (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); typedef void (APIENTRYP PFNGLUNIFORM1UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLUNIFORM2UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLUNIFORM3UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLUNIFORM4UI64VARBPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLGETUNIFORMI64VARBPROC) (GLuint program, GLint location, GLint64 *params); typedef void (APIENTRYP PFNGLGETUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLuint64 *params); typedef void (APIENTRYP PFNGLGETNUNIFORMI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUI64VARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64ARBPROC) (GLuint program, GLint location, GLint64 x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64ARBPROC) (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64ARBPROC) (GLuint program, GLint location, GLuint64 x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64ARBPROC) (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VARBPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniform1i64ARB (GLint location, GLint64 x); GLAPI void APIENTRY glUniform2i64ARB (GLint location, GLint64 x, GLint64 y); GLAPI void APIENTRY glUniform3i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z); GLAPI void APIENTRY glUniform4i64ARB (GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); GLAPI void APIENTRY glUniform1i64vARB (GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glUniform2i64vARB (GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glUniform3i64vARB (GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glUniform4i64vARB (GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glUniform1ui64ARB (GLint location, GLuint64 x); GLAPI void APIENTRY glUniform2ui64ARB (GLint location, GLuint64 x, GLuint64 y); GLAPI void APIENTRY glUniform3ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z); GLAPI void APIENTRY glUniform4ui64ARB (GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); GLAPI void APIENTRY glUniform1ui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glUniform2ui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glUniform3ui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glUniform4ui64vARB (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glGetUniformi64vARB (GLuint program, GLint location, GLint64 *params); GLAPI void APIENTRY glGetUniformui64vARB (GLuint program, GLint location, GLuint64 *params); GLAPI void APIENTRY glGetnUniformi64vARB (GLuint program, GLint location, GLsizei bufSize, GLint64 *params); GLAPI void APIENTRY glGetnUniformui64vARB (GLuint program, GLint location, GLsizei bufSize, GLuint64 *params); GLAPI void APIENTRY glProgramUniform1i64ARB (GLuint program, GLint location, GLint64 x); GLAPI void APIENTRY glProgramUniform2i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y); GLAPI void APIENTRY glProgramUniform3i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z); GLAPI void APIENTRY glProgramUniform4i64ARB (GLuint program, GLint location, GLint64 x, GLint64 y, GLint64 z, GLint64 w); GLAPI void APIENTRY glProgramUniform1i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glProgramUniform2i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glProgramUniform3i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glProgramUniform4i64vARB (GLuint program, GLint location, GLsizei count, const GLint64 *value); GLAPI void APIENTRY glProgramUniform1ui64ARB (GLuint program, GLint location, GLuint64 x); GLAPI void APIENTRY glProgramUniform2ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y); GLAPI void APIENTRY glProgramUniform3ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z); GLAPI void APIENTRY glProgramUniform4ui64ARB (GLuint program, GLint location, GLuint64 x, GLuint64 y, GLuint64 z, GLuint64 w); GLAPI void APIENTRY glProgramUniform1ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniform2ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniform3ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniform4ui64vARB (GLuint program, GLint location, GLsizei count, const GLuint64 *value); #endif #endif /* GL_ARB_gpu_shader_int64 */ #ifndef GL_ARB_half_float_vertex #define GL_ARB_half_float_vertex 1 #endif /* GL_ARB_half_float_vertex */ #ifndef GL_ARB_imaging #define GL_ARB_imaging 1 #endif /* GL_ARB_imaging */ #ifndef GL_ARB_indirect_parameters #define GL_ARB_indirect_parameters 1 #define GL_PARAMETER_BUFFER_ARB 0x80EE #define GL_PARAMETER_BUFFER_BINDING_ARB 0x80EF typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTCOUNTARBPROC) (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTARBPROC) (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectCountARB (GLenum mode, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawElementsIndirectCountARB (GLenum mode, GLenum type, const void *indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #endif #endif /* GL_ARB_indirect_parameters */ #ifndef GL_ARB_instanced_arrays #define GL_ARB_instanced_arrays 1 #define GL_VERTEX_ATTRIB_ARRAY_DIVISOR_ARB 0x88FE typedef void (APIENTRYP PFNGLVERTEXATTRIBDIVISORARBPROC) (GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribDivisorARB (GLuint index, GLuint divisor); #endif #endif /* GL_ARB_instanced_arrays */ #ifndef GL_ARB_internalformat_query #define GL_ARB_internalformat_query 1 #endif /* GL_ARB_internalformat_query */ #ifndef GL_ARB_internalformat_query2 #define GL_ARB_internalformat_query2 1 #define GL_SRGB_DECODE_ARB 0x8299 #define GL_VIEW_CLASS_EAC_R11 0x9383 #define GL_VIEW_CLASS_EAC_RG11 0x9384 #define GL_VIEW_CLASS_ETC2_RGB 0x9385 #define GL_VIEW_CLASS_ETC2_RGBA 0x9386 #define GL_VIEW_CLASS_ETC2_EAC_RGBA 0x9387 #define GL_VIEW_CLASS_ASTC_4x4_RGBA 0x9388 #define GL_VIEW_CLASS_ASTC_5x4_RGBA 0x9389 #define GL_VIEW_CLASS_ASTC_5x5_RGBA 0x938A #define GL_VIEW_CLASS_ASTC_6x5_RGBA 0x938B #define GL_VIEW_CLASS_ASTC_6x6_RGBA 0x938C #define GL_VIEW_CLASS_ASTC_8x5_RGBA 0x938D #define GL_VIEW_CLASS_ASTC_8x6_RGBA 0x938E #define GL_VIEW_CLASS_ASTC_8x8_RGBA 0x938F #define GL_VIEW_CLASS_ASTC_10x5_RGBA 0x9390 #define GL_VIEW_CLASS_ASTC_10x6_RGBA 0x9391 #define GL_VIEW_CLASS_ASTC_10x8_RGBA 0x9392 #define GL_VIEW_CLASS_ASTC_10x10_RGBA 0x9393 #define GL_VIEW_CLASS_ASTC_12x10_RGBA 0x9394 #define GL_VIEW_CLASS_ASTC_12x12_RGBA 0x9395 #endif /* GL_ARB_internalformat_query2 */ #ifndef GL_ARB_invalidate_subdata #define GL_ARB_invalidate_subdata 1 #endif /* GL_ARB_invalidate_subdata */ #ifndef GL_ARB_map_buffer_alignment #define GL_ARB_map_buffer_alignment 1 #endif /* GL_ARB_map_buffer_alignment */ #ifndef GL_ARB_map_buffer_range #define GL_ARB_map_buffer_range 1 #endif /* GL_ARB_map_buffer_range */ #ifndef GL_ARB_multi_bind #define GL_ARB_multi_bind 1 #endif /* GL_ARB_multi_bind */ #ifndef GL_ARB_multi_draw_indirect #define GL_ARB_multi_draw_indirect 1 #endif /* GL_ARB_multi_draw_indirect */ #ifndef GL_ARB_occlusion_query2 #define GL_ARB_occlusion_query2 1 #endif /* GL_ARB_occlusion_query2 */ #ifndef GL_ARB_parallel_shader_compile #define GL_ARB_parallel_shader_compile 1 #define GL_MAX_SHADER_COMPILER_THREADS_ARB 0x91B0 #define GL_COMPLETION_STATUS_ARB 0x91B1 typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSARBPROC) (GLuint count); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMaxShaderCompilerThreadsARB (GLuint count); #endif #endif /* GL_ARB_parallel_shader_compile */ #ifndef GL_ARB_pipeline_statistics_query #define GL_ARB_pipeline_statistics_query 1 #define GL_VERTICES_SUBMITTED_ARB 0x82EE #define GL_PRIMITIVES_SUBMITTED_ARB 0x82EF #define GL_VERTEX_SHADER_INVOCATIONS_ARB 0x82F0 #define GL_TESS_CONTROL_SHADER_PATCHES_ARB 0x82F1 #define GL_TESS_EVALUATION_SHADER_INVOCATIONS_ARB 0x82F2 #define GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED_ARB 0x82F3 #define GL_FRAGMENT_SHADER_INVOCATIONS_ARB 0x82F4 #define GL_COMPUTE_SHADER_INVOCATIONS_ARB 0x82F5 #define GL_CLIPPING_INPUT_PRIMITIVES_ARB 0x82F6 #define GL_CLIPPING_OUTPUT_PRIMITIVES_ARB 0x82F7 #endif /* GL_ARB_pipeline_statistics_query */ #ifndef GL_ARB_pixel_buffer_object #define GL_ARB_pixel_buffer_object 1 #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_pixel_buffer_object */ #ifndef GL_ARB_polygon_offset_clamp #define GL_ARB_polygon_offset_clamp 1 #endif /* GL_ARB_polygon_offset_clamp */ #ifndef GL_ARB_post_depth_coverage #define GL_ARB_post_depth_coverage 1 #endif /* GL_ARB_post_depth_coverage */ #ifndef GL_ARB_program_interface_query #define GL_ARB_program_interface_query 1 #endif /* GL_ARB_program_interface_query */ #ifndef GL_ARB_provoking_vertex #define GL_ARB_provoking_vertex 1 #endif /* GL_ARB_provoking_vertex */ #ifndef GL_ARB_query_buffer_object #define GL_ARB_query_buffer_object 1 #endif /* GL_ARB_query_buffer_object */ #ifndef GL_ARB_robust_buffer_access_behavior #define GL_ARB_robust_buffer_access_behavior 1 #endif /* GL_ARB_robust_buffer_access_behavior */ #ifndef GL_ARB_robustness #define GL_ARB_robustness 1 #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 typedef GLenum (APIENTRYP PFNGLGETGRAPHICSRESETSTATUSARBPROC) (void); typedef void (APIENTRYP PFNGLGETNTEXIMAGEARBPROC) (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); typedef void (APIENTRYP PFNGLREADNPIXELSARBPROC) (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); typedef void (APIENTRYP PFNGLGETNCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint lod, GLsizei bufSize, void *img); typedef void (APIENTRYP PFNGLGETNUNIFORMFVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); typedef void (APIENTRYP PFNGLGETNUNIFORMIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMUIVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLuint *params); typedef void (APIENTRYP PFNGLGETNUNIFORMDVARBPROC) (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLenum APIENTRY glGetGraphicsResetStatusARB (void); GLAPI void APIENTRY glGetnTexImageARB (GLenum target, GLint level, GLenum format, GLenum type, GLsizei bufSize, void *img); GLAPI void APIENTRY glReadnPixelsARB (GLint x, GLint y, GLsizei width, GLsizei height, GLenum format, GLenum type, GLsizei bufSize, void *data); GLAPI void APIENTRY glGetnCompressedTexImageARB (GLenum target, GLint lod, GLsizei bufSize, void *img); GLAPI void APIENTRY glGetnUniformfvARB (GLuint program, GLint location, GLsizei bufSize, GLfloat *params); GLAPI void APIENTRY glGetnUniformivARB (GLuint program, GLint location, GLsizei bufSize, GLint *params); GLAPI void APIENTRY glGetnUniformuivARB (GLuint program, GLint location, GLsizei bufSize, GLuint *params); GLAPI void APIENTRY glGetnUniformdvARB (GLuint program, GLint location, GLsizei bufSize, GLdouble *params); #endif #endif /* GL_ARB_robustness */ #ifndef GL_ARB_robustness_isolation #define GL_ARB_robustness_isolation 1 #endif /* GL_ARB_robustness_isolation */ #ifndef GL_ARB_sample_locations #define GL_ARB_sample_locations 1 #define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_ARB 0x933D #define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_ARB 0x933E #define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_ARB 0x933F #define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_ARB 0x9340 #define GL_SAMPLE_LOCATION_ARB 0x8E50 #define GL_PROGRAMMABLE_SAMPLE_LOCATION_ARB 0x9341 #define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_ARB 0x9342 #define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_ARB 0x9343 typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVARBPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLEVALUATEDEPTHVALUESARBPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferSampleLocationsfvARB (GLenum target, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvARB (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glEvaluateDepthValuesARB (void); #endif #endif /* GL_ARB_sample_locations */ #ifndef GL_ARB_sample_shading #define GL_ARB_sample_shading 1 #define GL_SAMPLE_SHADING_ARB 0x8C36 #define GL_MIN_SAMPLE_SHADING_VALUE_ARB 0x8C37 typedef void (APIENTRYP PFNGLMINSAMPLESHADINGARBPROC) (GLfloat value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMinSampleShadingARB (GLfloat value); #endif #endif /* GL_ARB_sample_shading */ #ifndef GL_ARB_sampler_objects #define GL_ARB_sampler_objects 1 #endif /* GL_ARB_sampler_objects */ #ifndef GL_ARB_seamless_cube_map #define GL_ARB_seamless_cube_map 1 #endif /* GL_ARB_seamless_cube_map */ #ifndef GL_ARB_seamless_cubemap_per_texture #define GL_ARB_seamless_cubemap_per_texture 1 #endif /* GL_ARB_seamless_cubemap_per_texture */ #ifndef GL_ARB_separate_shader_objects #define GL_ARB_separate_shader_objects 1 #endif /* GL_ARB_separate_shader_objects */ #ifndef GL_ARB_shader_atomic_counter_ops #define GL_ARB_shader_atomic_counter_ops 1 #endif /* GL_ARB_shader_atomic_counter_ops */ #ifndef GL_ARB_shader_atomic_counters #define GL_ARB_shader_atomic_counters 1 #endif /* GL_ARB_shader_atomic_counters */ #ifndef GL_ARB_shader_ballot #define GL_ARB_shader_ballot 1 #endif /* GL_ARB_shader_ballot */ #ifndef GL_ARB_shader_bit_encoding #define GL_ARB_shader_bit_encoding 1 #endif /* GL_ARB_shader_bit_encoding */ #ifndef GL_ARB_shader_clock #define GL_ARB_shader_clock 1 #endif /* GL_ARB_shader_clock */ #ifndef GL_ARB_shader_draw_parameters #define GL_ARB_shader_draw_parameters 1 #endif /* GL_ARB_shader_draw_parameters */ #ifndef GL_ARB_shader_group_vote #define GL_ARB_shader_group_vote 1 #endif /* GL_ARB_shader_group_vote */ #ifndef GL_ARB_shader_image_load_store #define GL_ARB_shader_image_load_store 1 #endif /* GL_ARB_shader_image_load_store */ #ifndef GL_ARB_shader_image_size #define GL_ARB_shader_image_size 1 #endif /* GL_ARB_shader_image_size */ #ifndef GL_ARB_shader_precision #define GL_ARB_shader_precision 1 #endif /* GL_ARB_shader_precision */ #ifndef GL_ARB_shader_stencil_export #define GL_ARB_shader_stencil_export 1 #endif /* GL_ARB_shader_stencil_export */ #ifndef GL_ARB_shader_storage_buffer_object #define GL_ARB_shader_storage_buffer_object 1 #endif /* GL_ARB_shader_storage_buffer_object */ #ifndef GL_ARB_shader_subroutine #define GL_ARB_shader_subroutine 1 #endif /* GL_ARB_shader_subroutine */ #ifndef GL_ARB_shader_texture_image_samples #define GL_ARB_shader_texture_image_samples 1 #endif /* GL_ARB_shader_texture_image_samples */ #ifndef GL_ARB_shader_viewport_layer_array #define GL_ARB_shader_viewport_layer_array 1 #endif /* GL_ARB_shader_viewport_layer_array */ #ifndef GL_ARB_shading_language_420pack #define GL_ARB_shading_language_420pack 1 #endif /* GL_ARB_shading_language_420pack */ #ifndef GL_ARB_shading_language_include #define GL_ARB_shading_language_include 1 #define GL_SHADER_INCLUDE_ARB 0x8DAE #define GL_NAMED_STRING_LENGTH_ARB 0x8DE9 #define GL_NAMED_STRING_TYPE_ARB 0x8DEA typedef void (APIENTRYP PFNGLNAMEDSTRINGARBPROC) (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); typedef void (APIENTRYP PFNGLDELETENAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); typedef void (APIENTRYP PFNGLCOMPILESHADERINCLUDEARBPROC) (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); typedef GLboolean (APIENTRYP PFNGLISNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name); typedef void (APIENTRYP PFNGLGETNAMEDSTRINGARBPROC) (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); typedef void (APIENTRYP PFNGLGETNAMEDSTRINGIVARBPROC) (GLint namelen, const GLchar *name, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glNamedStringARB (GLenum type, GLint namelen, const GLchar *name, GLint stringlen, const GLchar *string); GLAPI void APIENTRY glDeleteNamedStringARB (GLint namelen, const GLchar *name); GLAPI void APIENTRY glCompileShaderIncludeARB (GLuint shader, GLsizei count, const GLchar *const*path, const GLint *length); GLAPI GLboolean APIENTRY glIsNamedStringARB (GLint namelen, const GLchar *name); GLAPI void APIENTRY glGetNamedStringARB (GLint namelen, const GLchar *name, GLsizei bufSize, GLint *stringlen, GLchar *string); GLAPI void APIENTRY glGetNamedStringivARB (GLint namelen, const GLchar *name, GLenum pname, GLint *params); #endif #endif /* GL_ARB_shading_language_include */ #ifndef GL_ARB_shading_language_packing #define GL_ARB_shading_language_packing 1 #endif /* GL_ARB_shading_language_packing */ #ifndef GL_ARB_sparse_buffer #define GL_ARB_sparse_buffer 1 #define GL_SPARSE_STORAGE_BIT_ARB 0x0400 #define GL_SPARSE_BUFFER_PAGE_SIZE_ARB 0x82F8 typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTARBPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTARBPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferPageCommitmentARB (GLenum target, GLintptr offset, GLsizeiptr size, GLboolean commit); GLAPI void APIENTRY glNamedBufferPageCommitmentEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); GLAPI void APIENTRY glNamedBufferPageCommitmentARB (GLuint buffer, GLintptr offset, GLsizeiptr size, GLboolean commit); #endif #endif /* GL_ARB_sparse_buffer */ #ifndef GL_ARB_sparse_texture #define GL_ARB_sparse_texture 1 #define GL_TEXTURE_SPARSE_ARB 0x91A6 #define GL_VIRTUAL_PAGE_SIZE_INDEX_ARB 0x91A7 #define GL_NUM_SPARSE_LEVELS_ARB 0x91AA #define GL_NUM_VIRTUAL_PAGE_SIZES_ARB 0x91A8 #define GL_VIRTUAL_PAGE_SIZE_X_ARB 0x9195 #define GL_VIRTUAL_PAGE_SIZE_Y_ARB 0x9196 #define GL_VIRTUAL_PAGE_SIZE_Z_ARB 0x9197 #define GL_MAX_SPARSE_TEXTURE_SIZE_ARB 0x9198 #define GL_MAX_SPARSE_3D_TEXTURE_SIZE_ARB 0x9199 #define GL_MAX_SPARSE_ARRAY_TEXTURE_LAYERS_ARB 0x919A #define GL_SPARSE_TEXTURE_FULL_ARRAY_CUBE_MIPMAPS_ARB 0x91A9 typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexPageCommitmentARB (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); #endif #endif /* GL_ARB_sparse_texture */ #ifndef GL_ARB_sparse_texture2 #define GL_ARB_sparse_texture2 1 #endif /* GL_ARB_sparse_texture2 */ #ifndef GL_ARB_sparse_texture_clamp #define GL_ARB_sparse_texture_clamp 1 #endif /* GL_ARB_sparse_texture_clamp */ #ifndef GL_ARB_spirv_extensions #define GL_ARB_spirv_extensions 1 #endif /* GL_ARB_spirv_extensions */ #ifndef GL_ARB_stencil_texturing #define GL_ARB_stencil_texturing 1 #endif /* GL_ARB_stencil_texturing */ #ifndef GL_ARB_sync #define GL_ARB_sync 1 #endif /* GL_ARB_sync */ #ifndef GL_ARB_tessellation_shader #define GL_ARB_tessellation_shader 1 #endif /* GL_ARB_tessellation_shader */ #ifndef GL_ARB_texture_barrier #define GL_ARB_texture_barrier 1 #endif /* GL_ARB_texture_barrier */ #ifndef GL_ARB_texture_border_clamp #define GL_ARB_texture_border_clamp 1 #define GL_CLAMP_TO_BORDER_ARB 0x812D #endif /* GL_ARB_texture_border_clamp */ #ifndef GL_ARB_texture_buffer_object #define GL_ARB_texture_buffer_object 1 #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 typedef void (APIENTRYP PFNGLTEXBUFFERARBPROC) (GLenum target, GLenum internalformat, GLuint buffer); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexBufferARB (GLenum target, GLenum internalformat, GLuint buffer); #endif #endif /* GL_ARB_texture_buffer_object */ #ifndef GL_ARB_texture_buffer_object_rgb32 #define GL_ARB_texture_buffer_object_rgb32 1 #endif /* GL_ARB_texture_buffer_object_rgb32 */ #ifndef GL_ARB_texture_buffer_range #define GL_ARB_texture_buffer_range 1 #endif /* GL_ARB_texture_buffer_range */ #ifndef GL_ARB_texture_compression_bptc #define GL_ARB_texture_compression_bptc 1 #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_texture_compression_bptc */ #ifndef GL_ARB_texture_compression_rgtc #define GL_ARB_texture_compression_rgtc 1 #endif /* GL_ARB_texture_compression_rgtc */ #ifndef GL_ARB_texture_cube_map_array #define GL_ARB_texture_cube_map_array 1 #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_cube_map_array */ #ifndef GL_ARB_texture_filter_anisotropic #define GL_ARB_texture_filter_anisotropic 1 #endif /* GL_ARB_texture_filter_anisotropic */ #ifndef GL_ARB_texture_filter_minmax #define GL_ARB_texture_filter_minmax 1 #define GL_TEXTURE_REDUCTION_MODE_ARB 0x9366 #define GL_WEIGHTED_AVERAGE_ARB 0x9367 #endif /* GL_ARB_texture_filter_minmax */ #ifndef GL_ARB_texture_gather #define GL_ARB_texture_gather 1 #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_gather */ #ifndef GL_ARB_texture_mirror_clamp_to_edge #define GL_ARB_texture_mirror_clamp_to_edge 1 #endif /* GL_ARB_texture_mirror_clamp_to_edge */ #ifndef GL_ARB_texture_mirrored_repeat #define GL_ARB_texture_mirrored_repeat 1 #define GL_MIRRORED_REPEAT_ARB 0x8370 #endif /* GL_ARB_texture_mirrored_repeat */ #ifndef GL_ARB_texture_multisample #define GL_ARB_texture_multisample 1 #endif /* GL_ARB_texture_multisample */ #ifndef GL_ARB_texture_non_power_of_two #define GL_ARB_texture_non_power_of_two 1 #endif /* GL_ARB_texture_non_power_of_two */ #ifndef GL_ARB_texture_query_levels #define GL_ARB_texture_query_levels 1 #endif /* GL_ARB_texture_query_levels */ #ifndef GL_ARB_texture_query_lod #define GL_ARB_texture_query_lod 1 #endif /* GL_ARB_texture_query_lod */ #ifndef GL_ARB_texture_rg #define GL_ARB_texture_rg 1 #endif /* GL_ARB_texture_rg */ #ifndef GL_ARB_texture_rgb10_a2ui #define GL_ARB_texture_rgb10_a2ui 1 #endif /* GL_ARB_texture_rgb10_a2ui */ #ifndef GL_ARB_texture_stencil8 #define GL_ARB_texture_stencil8 1 #endif /* GL_ARB_texture_stencil8 */ #ifndef GL_ARB_texture_storage #define GL_ARB_texture_storage 1 #endif /* GL_ARB_texture_storage */ #ifndef GL_ARB_texture_storage_multisample #define GL_ARB_texture_storage_multisample 1 #endif /* GL_ARB_texture_storage_multisample */ #ifndef GL_ARB_texture_swizzle #define GL_ARB_texture_swizzle 1 #endif /* GL_ARB_texture_swizzle */ #ifndef GL_ARB_texture_view #define GL_ARB_texture_view 1 #endif /* GL_ARB_texture_view */ #ifndef GL_ARB_timer_query #define GL_ARB_timer_query 1 #endif /* GL_ARB_timer_query */ #ifndef GL_ARB_transform_feedback2 #define GL_ARB_transform_feedback2 1 #endif /* GL_ARB_transform_feedback2 */ #ifndef GL_ARB_transform_feedback3 #define GL_ARB_transform_feedback3 1 #endif /* GL_ARB_transform_feedback3 */ #ifndef GL_ARB_transform_feedback_instanced #define GL_ARB_transform_feedback_instanced 1 #endif /* GL_ARB_transform_feedback_instanced */ #ifndef GL_ARB_transform_feedback_overflow_query #define GL_ARB_transform_feedback_overflow_query 1 #define GL_TRANSFORM_FEEDBACK_OVERFLOW_ARB 0x82EC #define GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW_ARB 0x82ED #endif /* GL_ARB_transform_feedback_overflow_query */ #ifndef GL_ARB_uniform_buffer_object #define GL_ARB_uniform_buffer_object 1 #endif /* GL_ARB_uniform_buffer_object */ #ifndef GL_ARB_vertex_array_bgra #define GL_ARB_vertex_array_bgra 1 #endif /* GL_ARB_vertex_array_bgra */ #ifndef GL_ARB_vertex_array_object #define GL_ARB_vertex_array_object 1 #endif /* GL_ARB_vertex_array_object */ #ifndef GL_ARB_vertex_attrib_64bit #define GL_ARB_vertex_attrib_64bit 1 #endif /* GL_ARB_vertex_attrib_64bit */ #ifndef GL_ARB_vertex_attrib_binding #define GL_ARB_vertex_attrib_binding 1 #endif /* GL_ARB_vertex_attrib_binding */ #ifndef GL_ARB_vertex_type_10f_11f_11f_rev #define GL_ARB_vertex_type_10f_11f_11f_rev 1 #endif /* GL_ARB_vertex_type_10f_11f_11f_rev */ #ifndef GL_ARB_vertex_type_2_10_10_10_rev #define GL_ARB_vertex_type_2_10_10_10_rev 1 #endif /* GL_ARB_vertex_type_2_10_10_10_rev */ #ifndef GL_ARB_viewport_array #define GL_ARB_viewport_array 1 typedef void (APIENTRYP PFNGLDEPTHRANGEARRAYDVNVPROC) (GLuint first, GLsizei count, const GLdouble *v); typedef void (APIENTRYP PFNGLDEPTHRANGEINDEXEDDNVPROC) (GLuint index, GLdouble n, GLdouble f); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthRangeArraydvNV (GLuint first, GLsizei count, const GLdouble *v); GLAPI void APIENTRY glDepthRangeIndexeddNV (GLuint index, GLdouble n, GLdouble f); #endif #endif /* GL_ARB_viewport_array */ #ifndef GL_KHR_blend_equation_advanced #define GL_KHR_blend_equation_advanced 1 #define GL_MULTIPLY_KHR 0x9294 #define GL_SCREEN_KHR 0x9295 #define GL_OVERLAY_KHR 0x9296 #define GL_DARKEN_KHR 0x9297 #define GL_LIGHTEN_KHR 0x9298 #define GL_COLORDODGE_KHR 0x9299 #define GL_COLORBURN_KHR 0x929A #define GL_HARDLIGHT_KHR 0x929B #define GL_SOFTLIGHT_KHR 0x929C #define GL_DIFFERENCE_KHR 0x929E #define GL_EXCLUSION_KHR 0x92A0 #define GL_HSL_HUE_KHR 0x92AD #define GL_HSL_SATURATION_KHR 0x92AE #define GL_HSL_COLOR_KHR 0x92AF #define GL_HSL_LUMINOSITY_KHR 0x92B0 typedef void (APIENTRYP PFNGLBLENDBARRIERKHRPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendBarrierKHR (void); #endif #endif /* GL_KHR_blend_equation_advanced */ #ifndef GL_KHR_blend_equation_advanced_coherent #define GL_KHR_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_KHR 0x9285 #endif /* GL_KHR_blend_equation_advanced_coherent */ #ifndef GL_KHR_context_flush_control #define GL_KHR_context_flush_control 1 #endif /* GL_KHR_context_flush_control */ #ifndef GL_KHR_debug #define GL_KHR_debug 1 #endif /* GL_KHR_debug */ #ifndef GL_KHR_no_error #define GL_KHR_no_error 1 #define GL_CONTEXT_FLAG_NO_ERROR_BIT_KHR 0x00000008 #endif /* GL_KHR_no_error */ #ifndef GL_KHR_parallel_shader_compile #define GL_KHR_parallel_shader_compile 1 #define GL_MAX_SHADER_COMPILER_THREADS_KHR 0x91B0 #define GL_COMPLETION_STATUS_KHR 0x91B1 typedef void (APIENTRYP PFNGLMAXSHADERCOMPILERTHREADSKHRPROC) (GLuint count); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMaxShaderCompilerThreadsKHR (GLuint count); #endif #endif /* GL_KHR_parallel_shader_compile */ #ifndef GL_KHR_robust_buffer_access_behavior #define GL_KHR_robust_buffer_access_behavior 1 #endif /* GL_KHR_robust_buffer_access_behavior */ #ifndef GL_KHR_robustness #define GL_KHR_robustness 1 #define GL_CONTEXT_ROBUST_ACCESS 0x90F3 #endif /* GL_KHR_robustness */ #ifndef GL_KHR_shader_subgroup #define GL_KHR_shader_subgroup 1 #define GL_SUBGROUP_SIZE_KHR 0x9532 #define GL_SUBGROUP_SUPPORTED_STAGES_KHR 0x9533 #define GL_SUBGROUP_SUPPORTED_FEATURES_KHR 0x9534 #define GL_SUBGROUP_QUAD_ALL_STAGES_KHR 0x9535 #define GL_SUBGROUP_FEATURE_BASIC_BIT_KHR 0x00000001 #define GL_SUBGROUP_FEATURE_VOTE_BIT_KHR 0x00000002 #define GL_SUBGROUP_FEATURE_ARITHMETIC_BIT_KHR 0x00000004 #define GL_SUBGROUP_FEATURE_BALLOT_BIT_KHR 0x00000008 #define GL_SUBGROUP_FEATURE_SHUFFLE_BIT_KHR 0x00000010 #define GL_SUBGROUP_FEATURE_SHUFFLE_RELATIVE_BIT_KHR 0x00000020 #define GL_SUBGROUP_FEATURE_CLUSTERED_BIT_KHR 0x00000040 #define GL_SUBGROUP_FEATURE_QUAD_BIT_KHR 0x00000080 #endif /* GL_KHR_shader_subgroup */ #ifndef GL_KHR_texture_compression_astc_hdr #define GL_KHR_texture_compression_astc_hdr 1 #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_texture_compression_astc_hdr */ #ifndef GL_KHR_texture_compression_astc_ldr #define GL_KHR_texture_compression_astc_ldr 1 #endif /* GL_KHR_texture_compression_astc_ldr */ #ifndef GL_KHR_texture_compression_astc_sliced_3d #define GL_KHR_texture_compression_astc_sliced_3d 1 #endif /* GL_KHR_texture_compression_astc_sliced_3d */ #ifndef GL_AMD_framebuffer_multisample_advanced #define GL_AMD_framebuffer_multisample_advanced 1 #define GL_RENDERBUFFER_STORAGE_SAMPLES_AMD 0x91B2 #define GL_MAX_COLOR_FRAMEBUFFER_SAMPLES_AMD 0x91B3 #define GL_MAX_COLOR_FRAMEBUFFER_STORAGE_SAMPLES_AMD 0x91B4 #define GL_MAX_DEPTH_STENCIL_FRAMEBUFFER_SAMPLES_AMD 0x91B5 #define GL_NUM_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B6 #define GL_SUPPORTED_MULTISAMPLE_MODES_AMD 0x91B7 typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEADVANCEDAMDPROC) (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleAdvancedAMD (GLenum target, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleAdvancedAMD (GLuint renderbuffer, GLsizei samples, GLsizei storageSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_AMD_framebuffer_multisample_advanced */ #ifndef GL_AMD_performance_monitor #define GL_AMD_performance_monitor 1 #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 typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSAMDPROC) (GLint *numGroups, GLsizei groupsSize, GLuint *groups); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSAMDPROC) (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); typedef void (APIENTRYP PFNGLGETPERFMONITORGROUPSTRINGAMDPROC) (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERSTRINGAMDPROC) (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERINFOAMDPROC) (GLuint group, GLuint counter, GLenum pname, void *data); typedef void (APIENTRYP PFNGLGENPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (APIENTRYP PFNGLDELETEPERFMONITORSAMDPROC) (GLsizei n, GLuint *monitors); typedef void (APIENTRYP PFNGLSELECTPERFMONITORCOUNTERSAMDPROC) (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); typedef void (APIENTRYP PFNGLBEGINPERFMONITORAMDPROC) (GLuint monitor); typedef void (APIENTRYP PFNGLENDPERFMONITORAMDPROC) (GLuint monitor); typedef void (APIENTRYP PFNGLGETPERFMONITORCOUNTERDATAAMDPROC) (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetPerfMonitorGroupsAMD (GLint *numGroups, GLsizei groupsSize, GLuint *groups); GLAPI void APIENTRY glGetPerfMonitorCountersAMD (GLuint group, GLint *numCounters, GLint *maxActiveCounters, GLsizei counterSize, GLuint *counters); GLAPI void APIENTRY glGetPerfMonitorGroupStringAMD (GLuint group, GLsizei bufSize, GLsizei *length, GLchar *groupString); GLAPI void APIENTRY glGetPerfMonitorCounterStringAMD (GLuint group, GLuint counter, GLsizei bufSize, GLsizei *length, GLchar *counterString); GLAPI void APIENTRY glGetPerfMonitorCounterInfoAMD (GLuint group, GLuint counter, GLenum pname, void *data); GLAPI void APIENTRY glGenPerfMonitorsAMD (GLsizei n, GLuint *monitors); GLAPI void APIENTRY glDeletePerfMonitorsAMD (GLsizei n, GLuint *monitors); GLAPI void APIENTRY glSelectPerfMonitorCountersAMD (GLuint monitor, GLboolean enable, GLuint group, GLint numCounters, GLuint *counterList); GLAPI void APIENTRY glBeginPerfMonitorAMD (GLuint monitor); GLAPI void APIENTRY glEndPerfMonitorAMD (GLuint monitor); GLAPI void APIENTRY glGetPerfMonitorCounterDataAMD (GLuint monitor, GLenum pname, GLsizei dataSize, GLuint *data, GLint *bytesWritten); #endif #endif /* GL_AMD_performance_monitor */ #ifndef GL_APPLE_rgb_422 #define GL_APPLE_rgb_422 1 #define GL_RGB_422_APPLE 0x8A1F #define GL_UNSIGNED_SHORT_8_8_APPLE 0x85BA #define GL_UNSIGNED_SHORT_8_8_REV_APPLE 0x85BB #define GL_RGB_RAW_422_APPLE 0x8A51 #endif /* GL_APPLE_rgb_422 */ #ifndef GL_EXT_EGL_image_storage #define GL_EXT_EGL_image_storage 1 typedef void *GLeglImageOES; typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXSTORAGEEXTPROC) (GLenum target, GLeglImageOES image, const GLint* attrib_list); typedef void (APIENTRYP PFNGLEGLIMAGETARGETTEXTURESTORAGEEXTPROC) (GLuint texture, GLeglImageOES image, const GLint* attrib_list); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glEGLImageTargetTexStorageEXT (GLenum target, GLeglImageOES image, const GLint* attrib_list); GLAPI void APIENTRY glEGLImageTargetTextureStorageEXT (GLuint texture, GLeglImageOES image, const GLint* attrib_list); #endif #endif /* GL_EXT_EGL_image_storage */ #ifndef GL_EXT_EGL_sync #define GL_EXT_EGL_sync 1 #endif /* GL_EXT_EGL_sync */ #ifndef GL_EXT_debug_label #define GL_EXT_debug_label 1 #define GL_PROGRAM_PIPELINE_OBJECT_EXT 0x8A4F #define GL_PROGRAM_OBJECT_EXT 0x8B40 #define GL_SHADER_OBJECT_EXT 0x8B48 #define GL_BUFFER_OBJECT_EXT 0x9151 #define GL_QUERY_OBJECT_EXT 0x9153 #define GL_VERTEX_ARRAY_OBJECT_EXT 0x9154 typedef void (APIENTRYP PFNGLLABELOBJECTEXTPROC) (GLenum type, GLuint object, GLsizei length, const GLchar *label); typedef void (APIENTRYP PFNGLGETOBJECTLABELEXTPROC) (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glLabelObjectEXT (GLenum type, GLuint object, GLsizei length, const GLchar *label); GLAPI void APIENTRY glGetObjectLabelEXT (GLenum type, GLuint object, GLsizei bufSize, GLsizei *length, GLchar *label); #endif #endif /* GL_EXT_debug_label */ #ifndef GL_EXT_debug_marker #define GL_EXT_debug_marker 1 typedef void (APIENTRYP PFNGLINSERTEVENTMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (APIENTRYP PFNGLPUSHGROUPMARKEREXTPROC) (GLsizei length, const GLchar *marker); typedef void (APIENTRYP PFNGLPOPGROUPMARKEREXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glInsertEventMarkerEXT (GLsizei length, const GLchar *marker); GLAPI void APIENTRY glPushGroupMarkerEXT (GLsizei length, const GLchar *marker); GLAPI void APIENTRY glPopGroupMarkerEXT (void); #endif #endif /* GL_EXT_debug_marker */ #ifndef GL_EXT_direct_state_access #define GL_EXT_direct_state_access 1 #define GL_PROGRAM_MATRIX_EXT 0x8E2D #define GL_TRANSPOSE_PROGRAM_MATRIX_EXT 0x8E2E #define GL_PROGRAM_MATRIX_STACK_DEPTH_EXT 0x8E2F typedef void (APIENTRYP PFNGLMATRIXLOADFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXMULTFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXLOADIDENTITYEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXROTATEFEXTPROC) (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXROTATEDEXTPROC) (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXSCALEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXSCALEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXTRANSLATEFEXTPROC) (GLenum mode, GLfloat x, GLfloat y, GLfloat z); typedef void (APIENTRYP PFNGLMATRIXTRANSLATEDEXTPROC) (GLenum mode, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLMATRIXFRUSTUMEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLMATRIXORTHOEXTPROC) (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLMATRIXPOPEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLMATRIXPUSHEXTPROC) (GLenum mode); typedef void (APIENTRYP PFNGLCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLPUSHCLIENTATTRIBDEFAULTEXTPROC) (GLbitfield mask); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERFVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETTEXTURELEVELPARAMETERIVEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLBINDMULTITEXTUREEXTPROC) (GLenum texunit, GLenum target, GLuint texture); typedef void (APIENTRYP PFNGLMULTITEXCOORDPOINTEREXTPROC) (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); typedef void (APIENTRYP PFNGLMULTITEXENVFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXENVIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXGENDEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); typedef void (APIENTRYP PFNGLMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); typedef void (APIENTRYP PFNGLMULTITEXGENFEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXGENIEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXENVFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXENVIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENDVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENFVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXGENIVEXTPROC) (GLenum texunit, GLenum coord, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat param); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); typedef void (APIENTRYP PFNGLMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); typedef void (APIENTRYP PFNGLCOPYMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERFVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); typedef void (APIENTRYP PFNGLGETMULTITEXLEVELPARAMETERIVEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); typedef void (APIENTRYP PFNGLCOPYMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLENABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEINDEXEDEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLGETFLOATINDEXEDVEXTPROC) (GLenum target, GLuint index, GLfloat *data); typedef void (APIENTRYP PFNGLGETDOUBLEINDEXEDVEXTPROC) (GLenum target, GLuint index, GLdouble *data); typedef void (APIENTRYP PFNGLGETPOINTERINDEXEDVEXTPROC) (GLenum target, GLuint index, void **data); typedef void (APIENTRYP PFNGLENABLEINDEXEDEXTPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLDISABLEINDEXEDEXTPROC) (GLenum target, GLuint index); typedef GLboolean (APIENTRYP PFNGLISENABLEDINDEXEDEXTPROC) (GLenum target, GLuint index); typedef void (APIENTRYP PFNGLGETINTEGERINDEXEDVEXTPROC) (GLenum target, GLuint index, GLint *data); typedef void (APIENTRYP PFNGLGETBOOLEANINDEXEDVEXTPROC) (GLenum target, GLuint index, GLboolean *data); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTUREIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE3DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE2DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDTEXTURESUBIMAGE1DEXTPROC) (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXTUREIMAGEEXTPROC) (GLuint texture, GLenum target, GLint lod, void *img); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE3DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE2DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLCOMPRESSEDMULTITEXSUBIMAGE1DEXTPROC) (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); typedef void (APIENTRYP PFNGLGETCOMPRESSEDMULTITEXIMAGEEXTPROC) (GLenum texunit, GLenum target, GLint lod, void *img); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEFEXTPROC) (GLenum mode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSEDEXTPROC) (GLenum mode, const GLdouble *m); typedef void (APIENTRYP PFNGLNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); typedef void (APIENTRYP PFNGLNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFEREXTPROC) (GLuint buffer, GLenum access); typedef GLboolean (APIENTRYP PFNGLUNMAPNAMEDBUFFEREXTPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERIVEXTPROC) (GLuint buffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPOINTERVEXTPROC) (GLuint buffer, GLenum pname, void **params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FEXTPROC) (GLuint program, GLint location, GLfloat v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FEXTPROC) (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IEXTPROC) (GLuint program, GLint location, GLint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IEXTPROC) (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4FVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4IVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3FVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); typedef void (APIENTRYP PFNGLTEXTUREBUFFEREXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLMULTITEXBUFFEREXTPROC) (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETTEXTUREPARAMETERIUIVEXTPROC) (GLuint texture, GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLint *params); typedef void (APIENTRYP PFNGLMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETMULTITEXPARAMETERIUIVEXTPROC) (GLenum texunit, GLenum target, GLenum pname, GLuint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIEXTPROC) (GLuint program, GLint location, GLuint v0); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIEXTPROC) (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UIVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLuint *value); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERS4FVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IEXTPROC) (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4IVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLuint *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETERSI4UIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERIUIVEXTPROC) (GLuint program, GLenum target, GLuint index, GLuint *params); typedef void (APIENTRYP PFNGLENABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLDISABLECLIENTSTATEIEXTPROC) (GLenum array, GLuint index); typedef void (APIENTRYP PFNGLGETFLOATI_VEXTPROC) (GLenum pname, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETDOUBLEI_VEXTPROC) (GLenum pname, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETPOINTERI_VEXTPROC) (GLenum pname, GLuint index, void **params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4DVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLdouble *params); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); typedef void (APIENTRYP PFNGLNAMEDPROGRAMLOCALPARAMETER4FVEXTPROC) (GLuint program, GLenum target, GLuint index, const GLfloat *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERDVEXTPROC) (GLuint program, GLenum target, GLuint index, GLdouble *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMLOCALPARAMETERFVEXTPROC) (GLuint program, GLenum target, GLuint index, GLfloat *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMIVEXTPROC) (GLuint program, GLenum target, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGETNAMEDPROGRAMSTRINGEXTPROC) (GLuint program, GLenum target, GLenum pname, void *string); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEEXTPROC) (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLGETNAMEDRENDERBUFFERPARAMETERIVEXTPROC) (GLuint renderbuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEEXTPROC) (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLECOVERAGEEXTPROC) (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); typedef GLenum (APIENTRYP PFNGLCHECKNAMEDFRAMEBUFFERSTATUSEXTPROC) (GLuint framebuffer, GLenum target); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE1DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE2DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURE3DEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERRENDERBUFFEREXTPROC) (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLGENERATETEXTUREMIPMAPEXTPROC) (GLuint texture, GLenum target); typedef void (APIENTRYP PFNGLGENERATEMULTITEXMIPMAPEXTPROC) (GLenum texunit, GLenum target); typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (APIENTRYP PFNGLFRAMEBUFFERDRAWBUFFERSEXTPROC) (GLuint framebuffer, GLsizei n, const GLenum *bufs); typedef void (APIENTRYP PFNGLFRAMEBUFFERREADBUFFEREXTPROC) (GLuint framebuffer, GLenum mode); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLNAMEDCOPYBUFFERSUBDATAEXTPROC) (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTURELAYEREXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERTEXTUREFACEEXTPROC) (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); typedef void (APIENTRYP PFNGLTEXTURERENDERBUFFEREXTPROC) (GLuint texture, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLMULTITEXRENDERBUFFEREXTPROC) (GLenum texunit, GLenum target, GLuint renderbuffer); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYEDGEFLAGOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYINDEXOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYNORMALOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYTEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYMULTITEXCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYFOGCOORDOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYSECONDARYCOLOROFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYEXTPROC) (GLuint vaobj, GLenum array); typedef void (APIENTRYP PFNGLENABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLDISABLEVERTEXARRAYATTRIBEXTPROC) (GLuint vaobj, GLuint index); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERVEXTPROC) (GLuint vaobj, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERVEXTPROC) (GLuint vaobj, GLenum pname, void **param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYINTEGERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, GLint *param); typedef void (APIENTRYP PFNGLGETVERTEXARRAYPOINTERI_VEXTPROC) (GLuint vaobj, GLuint index, GLenum pname, void **param); typedef void *(APIENTRYP PFNGLMAPNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); typedef void (APIENTRYP PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEEXTPROC) (GLuint buffer, GLintptr offset, GLsizeiptr length); typedef void (APIENTRYP PFNGLNAMEDBUFFERSTORAGEEXTPROC) (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLCLEARNAMEDBUFFERSUBDATAEXTPROC) (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint framebuffer, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVEXTPROC) (GLuint framebuffer, GLenum pname, GLint *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DEXTPROC) (GLuint program, GLint location, GLdouble x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DEXTPROC) (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4DVEXTPROC) (GLuint program, GLint location, GLsizei count, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX2X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX3X4DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X2DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMMATRIX4X3DVEXTPROC) (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); typedef void (APIENTRYP PFNGLTEXTUREBUFFERRANGEEXTPROC) (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); typedef void (APIENTRYP PFNGLTEXTURESTORAGE1DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DEXTPROC) (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); typedef void (APIENTRYP PFNGLTEXTURESTORAGE2DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLTEXTURESTORAGE3DMULTISAMPLEEXTPROC) (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); typedef void (APIENTRYP PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBIFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLFORMATEXTPROC) (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBBINDINGEXTPROC) (GLuint vaobj, GLuint attribindex, GLuint bindingindex); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXBINDINGDIVISOREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint divisor); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBLOFFSETEXTPROC) (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTEXTPROC) (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); typedef void (APIENTRYP PFNGLVERTEXARRAYVERTEXATTRIBDIVISOREXTPROC) (GLuint vaobj, GLuint index, GLuint divisor); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMatrixLoadfEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoaddEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixMultfEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultdEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixLoadIdentityEXT (GLenum mode); GLAPI void APIENTRY glMatrixRotatefEXT (GLenum mode, GLfloat angle, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixRotatedEXT (GLenum mode, GLdouble angle, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixScalefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixScaledEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixTranslatefEXT (GLenum mode, GLfloat x, GLfloat y, GLfloat z); GLAPI void APIENTRY glMatrixTranslatedEXT (GLenum mode, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glMatrixFrustumEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glMatrixOrthoEXT (GLenum mode, GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glMatrixPopEXT (GLenum mode); GLAPI void APIENTRY glMatrixPushEXT (GLenum mode); GLAPI void APIENTRY glClientAttribDefaultEXT (GLbitfield mask); GLAPI void APIENTRY glPushClientAttribDefaultEXT (GLbitfield mask); GLAPI void APIENTRY glTextureParameterfEXT (GLuint texture, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glTextureParameteriEXT (GLuint texture, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetTextureImageEXT (GLuint texture, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI void APIENTRY glGetTextureParameterfvEXT (GLuint texture, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureParameterivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureLevelParameterfvEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetTextureLevelParameterivEXT (GLuint texture, GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glBindMultiTextureEXT (GLenum texunit, GLenum target, GLuint texture); GLAPI void APIENTRY glMultiTexCoordPointerEXT (GLenum texunit, GLint size, GLenum type, GLsizei stride, const void *pointer); GLAPI void APIENTRY glMultiTexEnvfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexEnviEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexGendEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble param); GLAPI void APIENTRY glMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLdouble *params); GLAPI void APIENTRY glMultiTexGenfEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexGeniEXT (GLenum texunit, GLenum coord, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, const GLint *params); GLAPI void APIENTRY glGetMultiTexEnvfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexEnvivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexGendvEXT (GLenum texunit, GLenum coord, GLenum pname, GLdouble *params); GLAPI void APIENTRY glGetMultiTexGenfvEXT (GLenum texunit, GLenum coord, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexGenivEXT (GLenum texunit, GLenum coord, GLenum pname, GLint *params); GLAPI void APIENTRY glMultiTexParameteriEXT (GLenum texunit, GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexParameterfEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat param); GLAPI void APIENTRY glMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, const GLfloat *params); GLAPI void APIENTRY glMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border); GLAPI void APIENTRY glCopyMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border); GLAPI void APIENTRY glCopyMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width); GLAPI void APIENTRY glCopyMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetMultiTexImageEXT (GLenum texunit, GLenum target, GLint level, GLenum format, GLenum type, void *pixels); GLAPI void APIENTRY glGetMultiTexParameterfvEXT (GLenum texunit, GLenum target, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexParameterivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexLevelParameterfvEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLfloat *params); GLAPI void APIENTRY glGetMultiTexLevelParameterivEXT (GLenum texunit, GLenum target, GLint level, GLenum pname, GLint *params); GLAPI void APIENTRY glMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const void *pixels); GLAPI void APIENTRY glCopyMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glEnableClientStateIndexedEXT (GLenum array, GLuint index); GLAPI void APIENTRY glDisableClientStateIndexedEXT (GLenum array, GLuint index); GLAPI void APIENTRY glGetFloatIndexedvEXT (GLenum target, GLuint index, GLfloat *data); GLAPI void APIENTRY glGetDoubleIndexedvEXT (GLenum target, GLuint index, GLdouble *data); GLAPI void APIENTRY glGetPointerIndexedvEXT (GLenum target, GLuint index, void **data); GLAPI void APIENTRY glEnableIndexedEXT (GLenum target, GLuint index); GLAPI void APIENTRY glDisableIndexedEXT (GLenum target, GLuint index); GLAPI GLboolean APIENTRY glIsEnabledIndexedEXT (GLenum target, GLuint index); GLAPI void APIENTRY glGetIntegerIndexedvEXT (GLenum target, GLuint index, GLint *data); GLAPI void APIENTRY glGetBooleanIndexedvEXT (GLenum target, GLuint index, GLboolean *data); GLAPI void APIENTRY glCompressedTextureImage3DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureImage2DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureImage1DEXT (GLuint texture, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage3DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage2DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedTextureSubImage1DEXT (GLuint texture, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glGetCompressedTextureImageEXT (GLuint texture, GLenum target, GLint lod, void *img); GLAPI void APIENTRY glCompressedMultiTexImage3DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexImage2DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexImage1DEXT (GLenum texunit, GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage3DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage2DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glCompressedMultiTexSubImage1DEXT (GLenum texunit, GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const void *bits); GLAPI void APIENTRY glGetCompressedMultiTexImageEXT (GLenum texunit, GLenum target, GLint lod, void *img); GLAPI void APIENTRY glMatrixLoadTransposefEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoadTransposedEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glMatrixMultTransposefEXT (GLenum mode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultTransposedEXT (GLenum mode, const GLdouble *m); GLAPI void APIENTRY glNamedBufferDataEXT (GLuint buffer, GLsizeiptr size, const void *data, GLenum usage); GLAPI void APIENTRY glNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, const void *data); GLAPI void *APIENTRY glMapNamedBufferEXT (GLuint buffer, GLenum access); GLAPI GLboolean APIENTRY glUnmapNamedBufferEXT (GLuint buffer); GLAPI void APIENTRY glGetNamedBufferParameterivEXT (GLuint buffer, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedBufferPointervEXT (GLuint buffer, GLenum pname, void **params); GLAPI void APIENTRY glGetNamedBufferSubDataEXT (GLuint buffer, GLintptr offset, GLsizeiptr size, void *data); GLAPI void APIENTRY glProgramUniform1fEXT (GLuint program, GLint location, GLfloat v0); GLAPI void APIENTRY glProgramUniform2fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1); GLAPI void APIENTRY glProgramUniform3fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2); GLAPI void APIENTRY glProgramUniform4fEXT (GLuint program, GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); GLAPI void APIENTRY glProgramUniform1iEXT (GLuint program, GLint location, GLint v0); GLAPI void APIENTRY glProgramUniform2iEXT (GLuint program, GLint location, GLint v0, GLint v1); GLAPI void APIENTRY glProgramUniform3iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2); GLAPI void APIENTRY glProgramUniform4iEXT (GLuint program, GLint location, GLint v0, GLint v1, GLint v2, GLint v3); GLAPI void APIENTRY glProgramUniform1fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform2fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform3fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform4fvEXT (GLuint program, GLint location, GLsizei count, const GLfloat *value); GLAPI void APIENTRY glProgramUniform1ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform2ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform3ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniform4ivEXT (GLuint program, GLint location, GLsizei count, const GLint *value); GLAPI void APIENTRY glProgramUniformMatrix2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix2x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x2fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix3x4fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glProgramUniformMatrix4x3fvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); GLAPI void APIENTRY glTextureBufferEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glMultiTexBufferEXT (GLenum texunit, GLenum target, GLenum internalformat, GLuint buffer); GLAPI void APIENTRY glTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetTextureParameterIivEXT (GLuint texture, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetTextureParameterIuivEXT (GLuint texture, GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, const GLint *params); GLAPI void APIENTRY glMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, const GLuint *params); GLAPI void APIENTRY glGetMultiTexParameterIivEXT (GLenum texunit, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetMultiTexParameterIuivEXT (GLenum texunit, GLenum target, GLenum pname, GLuint *params); GLAPI void APIENTRY glProgramUniform1uiEXT (GLuint program, GLint location, GLuint v0); GLAPI void APIENTRY glProgramUniform2uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1); GLAPI void APIENTRY glProgramUniform3uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2); GLAPI void APIENTRY glProgramUniform4uiEXT (GLuint program, GLint location, GLuint v0, GLuint v1, GLuint v2, GLuint v3); GLAPI void APIENTRY glProgramUniform1uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform2uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform3uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glProgramUniform4uivEXT (GLuint program, GLint location, GLsizei count, const GLuint *value); GLAPI void APIENTRY glNamedProgramLocalParameters4fvEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLfloat *params); GLAPI void APIENTRY glNamedProgramLocalParameterI4iEXT (GLuint program, GLenum target, GLuint index, GLint x, GLint y, GLint z, GLint w); GLAPI void APIENTRY glNamedProgramLocalParameterI4ivEXT (GLuint program, GLenum target, GLuint index, const GLint *params); GLAPI void APIENTRY glNamedProgramLocalParametersI4ivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLint *params); GLAPI void APIENTRY glNamedProgramLocalParameterI4uiEXT (GLuint program, GLenum target, GLuint index, GLuint x, GLuint y, GLuint z, GLuint w); GLAPI void APIENTRY glNamedProgramLocalParameterI4uivEXT (GLuint program, GLenum target, GLuint index, const GLuint *params); GLAPI void APIENTRY glNamedProgramLocalParametersI4uivEXT (GLuint program, GLenum target, GLuint index, GLsizei count, const GLuint *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterIivEXT (GLuint program, GLenum target, GLuint index, GLint *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterIuivEXT (GLuint program, GLenum target, GLuint index, GLuint *params); GLAPI void APIENTRY glEnableClientStateiEXT (GLenum array, GLuint index); GLAPI void APIENTRY glDisableClientStateiEXT (GLenum array, GLuint index); GLAPI void APIENTRY glGetFloati_vEXT (GLenum pname, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetDoublei_vEXT (GLenum pname, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetPointeri_vEXT (GLenum pname, GLuint index, void **params); GLAPI void APIENTRY glNamedProgramStringEXT (GLuint program, GLenum target, GLenum format, GLsizei len, const void *string); GLAPI void APIENTRY glNamedProgramLocalParameter4dEXT (GLuint program, GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glNamedProgramLocalParameter4dvEXT (GLuint program, GLenum target, GLuint index, const GLdouble *params); GLAPI void APIENTRY glNamedProgramLocalParameter4fEXT (GLuint program, GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); GLAPI void APIENTRY glNamedProgramLocalParameter4fvEXT (GLuint program, GLenum target, GLuint index, const GLfloat *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterdvEXT (GLuint program, GLenum target, GLuint index, GLdouble *params); GLAPI void APIENTRY glGetNamedProgramLocalParameterfvEXT (GLuint program, GLenum target, GLuint index, GLfloat *params); GLAPI void APIENTRY glGetNamedProgramivEXT (GLuint program, GLenum target, GLenum pname, GLint *params); GLAPI void APIENTRY glGetNamedProgramStringEXT (GLuint program, GLenum target, GLenum pname, void *string); GLAPI void APIENTRY glNamedRenderbufferStorageEXT (GLuint renderbuffer, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glGetNamedRenderbufferParameterivEXT (GLuint renderbuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleEXT (GLuint renderbuffer, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glNamedRenderbufferStorageMultisampleCoverageEXT (GLuint renderbuffer, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); GLAPI GLenum APIENTRY glCheckNamedFramebufferStatusEXT (GLuint framebuffer, GLenum target); GLAPI void APIENTRY glNamedFramebufferTexture1DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTexture2DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTexture3DEXT (GLuint framebuffer, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); GLAPI void APIENTRY glNamedFramebufferRenderbufferEXT (GLuint framebuffer, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); GLAPI void APIENTRY glGetNamedFramebufferAttachmentParameterivEXT (GLuint framebuffer, GLenum attachment, GLenum pname, GLint *params); GLAPI void APIENTRY glGenerateTextureMipmapEXT (GLuint texture, GLenum target); GLAPI void APIENTRY glGenerateMultiTexMipmapEXT (GLenum texunit, GLenum target); GLAPI void APIENTRY glFramebufferDrawBufferEXT (GLuint framebuffer, GLenum mode); GLAPI void APIENTRY glFramebufferDrawBuffersEXT (GLuint framebuffer, GLsizei n, const GLenum *bufs); GLAPI void APIENTRY glFramebufferReadBufferEXT (GLuint framebuffer, GLenum mode); GLAPI void APIENTRY glGetFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glNamedCopyBufferSubDataEXT (GLuint readBuffer, GLuint writeBuffer, GLintptr readOffset, GLintptr writeOffset, GLsizeiptr size); GLAPI void APIENTRY glNamedFramebufferTextureEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level); GLAPI void APIENTRY glNamedFramebufferTextureLayerEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLint layer); GLAPI void APIENTRY glNamedFramebufferTextureFaceEXT (GLuint framebuffer, GLenum attachment, GLuint texture, GLint level, GLenum face); GLAPI void APIENTRY glTextureRenderbufferEXT (GLuint texture, GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glMultiTexRenderbufferEXT (GLenum texunit, GLenum target, GLuint renderbuffer); GLAPI void APIENTRY glVertexArrayVertexOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayEdgeFlagOffsetEXT (GLuint vaobj, GLuint buffer, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayIndexOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayNormalOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayMultiTexCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum texunit, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayFogCoordOffsetEXT (GLuint vaobj, GLuint buffer, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArraySecondaryColorOffsetEXT (GLuint vaobj, GLuint buffer, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayVertexAttribOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glVertexArrayVertexAttribIOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glEnableVertexArrayEXT (GLuint vaobj, GLenum array); GLAPI void APIENTRY glDisableVertexArrayEXT (GLuint vaobj, GLenum array); GLAPI void APIENTRY glEnableVertexArrayAttribEXT (GLuint vaobj, GLuint index); GLAPI void APIENTRY glDisableVertexArrayAttribEXT (GLuint vaobj, GLuint index); GLAPI void APIENTRY glGetVertexArrayIntegervEXT (GLuint vaobj, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayPointervEXT (GLuint vaobj, GLenum pname, void **param); GLAPI void APIENTRY glGetVertexArrayIntegeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, GLint *param); GLAPI void APIENTRY glGetVertexArrayPointeri_vEXT (GLuint vaobj, GLuint index, GLenum pname, void **param); GLAPI void *APIENTRY glMapNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length, GLbitfield access); GLAPI void APIENTRY glFlushMappedNamedBufferRangeEXT (GLuint buffer, GLintptr offset, GLsizeiptr length); GLAPI void APIENTRY glNamedBufferStorageEXT (GLuint buffer, GLsizeiptr size, const void *data, GLbitfield flags); GLAPI void APIENTRY glClearNamedBufferDataEXT (GLuint buffer, GLenum internalformat, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glClearNamedBufferSubDataEXT (GLuint buffer, GLenum internalformat, GLsizeiptr offset, GLsizeiptr size, GLenum format, GLenum type, const void *data); GLAPI void APIENTRY glNamedFramebufferParameteriEXT (GLuint framebuffer, GLenum pname, GLint param); GLAPI void APIENTRY glGetNamedFramebufferParameterivEXT (GLuint framebuffer, GLenum pname, GLint *params); GLAPI void APIENTRY glProgramUniform1dEXT (GLuint program, GLint location, GLdouble x); GLAPI void APIENTRY glProgramUniform2dEXT (GLuint program, GLint location, GLdouble x, GLdouble y); GLAPI void APIENTRY glProgramUniform3dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z); GLAPI void APIENTRY glProgramUniform4dEXT (GLuint program, GLint location, GLdouble x, GLdouble y, GLdouble z, GLdouble w); GLAPI void APIENTRY glProgramUniform1dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform2dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform3dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniform4dvEXT (GLuint program, GLint location, GLsizei count, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix2x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix3x4dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x2dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glProgramUniformMatrix4x3dvEXT (GLuint program, GLint location, GLsizei count, GLboolean transpose, const GLdouble *value); GLAPI void APIENTRY glTextureBufferRangeEXT (GLuint texture, GLenum target, GLenum internalformat, GLuint buffer, GLintptr offset, GLsizeiptr size); GLAPI void APIENTRY glTextureStorage1DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTextureStorage2DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTextureStorage3DEXT (GLuint texture, GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); GLAPI void APIENTRY glTextureStorage2DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLboolean fixedsamplelocations); GLAPI void APIENTRY glTextureStorage3DMultisampleEXT (GLuint texture, GLenum target, GLsizei samples, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLboolean fixedsamplelocations); GLAPI void APIENTRY glVertexArrayBindVertexBufferEXT (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); GLAPI void APIENTRY glVertexArrayVertexAttribFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLboolean normalized, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribIFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribLFormatEXT (GLuint vaobj, GLuint attribindex, GLint size, GLenum type, GLuint relativeoffset); GLAPI void APIENTRY glVertexArrayVertexAttribBindingEXT (GLuint vaobj, GLuint attribindex, GLuint bindingindex); GLAPI void APIENTRY glVertexArrayVertexBindingDivisorEXT (GLuint vaobj, GLuint bindingindex, GLuint divisor); GLAPI void APIENTRY glVertexArrayVertexAttribLOffsetEXT (GLuint vaobj, GLuint buffer, GLuint index, GLint size, GLenum type, GLsizei stride, GLintptr offset); GLAPI void APIENTRY glTexturePageCommitmentEXT (GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLboolean commit); GLAPI void APIENTRY glVertexArrayVertexAttribDivisorEXT (GLuint vaobj, GLuint index, GLuint divisor); #endif #endif /* GL_EXT_direct_state_access */ #ifndef GL_EXT_draw_instanced #define GL_EXT_draw_instanced 1 typedef void (APIENTRYP PFNGLDRAWARRAYSINSTANCEDEXTPROC) (GLenum mode, GLint start, GLsizei count, GLsizei primcount); typedef void (APIENTRYP PFNGLDRAWELEMENTSINSTANCEDEXTPROC) (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawArraysInstancedEXT (GLenum mode, GLint start, GLsizei count, GLsizei primcount); GLAPI void APIENTRY glDrawElementsInstancedEXT (GLenum mode, GLsizei count, GLenum type, const void *indices, GLsizei primcount); #endif #endif /* GL_EXT_draw_instanced */ #ifndef GL_EXT_multiview_tessellation_geometry_shader #define GL_EXT_multiview_tessellation_geometry_shader 1 #endif /* GL_EXT_multiview_tessellation_geometry_shader */ #ifndef GL_EXT_multiview_texture_multisample #define GL_EXT_multiview_texture_multisample 1 #endif /* GL_EXT_multiview_texture_multisample */ #ifndef GL_EXT_multiview_timer_query #define GL_EXT_multiview_timer_query 1 #endif /* GL_EXT_multiview_timer_query */ #ifndef GL_EXT_polygon_offset_clamp #define GL_EXT_polygon_offset_clamp 1 #define GL_POLYGON_OFFSET_CLAMP_EXT 0x8E1B typedef void (APIENTRYP PFNGLPOLYGONOFFSETCLAMPEXTPROC) (GLfloat factor, GLfloat units, GLfloat clamp); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glPolygonOffsetClampEXT (GLfloat factor, GLfloat units, GLfloat clamp); #endif #endif /* GL_EXT_polygon_offset_clamp */ #ifndef GL_EXT_post_depth_coverage #define GL_EXT_post_depth_coverage 1 #endif /* GL_EXT_post_depth_coverage */ #ifndef GL_EXT_raster_multisample #define GL_EXT_raster_multisample 1 #define GL_RASTER_MULTISAMPLE_EXT 0x9327 #define GL_RASTER_SAMPLES_EXT 0x9328 #define GL_MAX_RASTER_SAMPLES_EXT 0x9329 #define GL_RASTER_FIXED_SAMPLE_LOCATIONS_EXT 0x932A #define GL_MULTISAMPLE_RASTERIZATION_ALLOWED_EXT 0x932B #define GL_EFFECTIVE_RASTER_SAMPLES_EXT 0x932C typedef void (APIENTRYP PFNGLRASTERSAMPLESEXTPROC) (GLuint samples, GLboolean fixedsamplelocations); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRasterSamplesEXT (GLuint samples, GLboolean fixedsamplelocations); #endif #endif /* GL_EXT_raster_multisample */ #ifndef GL_EXT_separate_shader_objects #define GL_EXT_separate_shader_objects 1 #define GL_ACTIVE_PROGRAM_EXT 0x8B8D typedef void (APIENTRYP PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint program); typedef void (APIENTRYP PFNGLACTIVEPROGRAMEXTPROC) (GLuint program); typedef GLuint (APIENTRYP PFNGLCREATESHADERPROGRAMEXTPROC) (GLenum type, const GLchar *string); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUseShaderProgramEXT (GLenum type, GLuint program); GLAPI void APIENTRY glActiveProgramEXT (GLuint program); GLAPI GLuint APIENTRY glCreateShaderProgramEXT (GLenum type, const GLchar *string); #endif #endif /* GL_EXT_separate_shader_objects */ #ifndef GL_EXT_shader_framebuffer_fetch #define GL_EXT_shader_framebuffer_fetch 1 #define GL_FRAGMENT_SHADER_DISCARDS_SAMPLES_EXT 0x8A52 #endif /* GL_EXT_shader_framebuffer_fetch */ #ifndef GL_EXT_shader_framebuffer_fetch_non_coherent #define GL_EXT_shader_framebuffer_fetch_non_coherent 1 typedef void (APIENTRYP PFNGLFRAMEBUFFERFETCHBARRIEREXTPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferFetchBarrierEXT (void); #endif #endif /* GL_EXT_shader_framebuffer_fetch_non_coherent */ #ifndef GL_EXT_shader_integer_mix #define GL_EXT_shader_integer_mix 1 #endif /* GL_EXT_shader_integer_mix */ #ifndef GL_EXT_texture_compression_s3tc #define GL_EXT_texture_compression_s3tc 1 #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_EXT_texture_compression_s3tc */ #ifndef GL_EXT_texture_filter_minmax #define GL_EXT_texture_filter_minmax 1 #define GL_TEXTURE_REDUCTION_MODE_EXT 0x9366 #define GL_WEIGHTED_AVERAGE_EXT 0x9367 #endif /* GL_EXT_texture_filter_minmax */ #ifndef GL_EXT_texture_sRGB_R8 #define GL_EXT_texture_sRGB_R8 1 #define GL_SR8_EXT 0x8FBD #endif /* GL_EXT_texture_sRGB_R8 */ #ifndef GL_EXT_texture_sRGB_RG8 #define GL_EXT_texture_sRGB_RG8 1 #define GL_SRG8_EXT 0x8FBE #endif /* GL_EXT_texture_sRGB_RG8 */ #ifndef GL_EXT_texture_sRGB_decode #define GL_EXT_texture_sRGB_decode 1 #define GL_TEXTURE_SRGB_DECODE_EXT 0x8A48 #define GL_DECODE_EXT 0x8A49 #define GL_SKIP_DECODE_EXT 0x8A4A #endif /* GL_EXT_texture_sRGB_decode */ #ifndef GL_EXT_texture_shadow_lod #define GL_EXT_texture_shadow_lod 1 #endif /* GL_EXT_texture_shadow_lod */ #ifndef GL_EXT_texture_storage #define GL_EXT_texture_storage 1 #define GL_TEXTURE_IMMUTABLE_FORMAT_EXT 0x912F #define GL_ALPHA8_EXT 0x803C #define GL_LUMINANCE8_EXT 0x8040 #define GL_LUMINANCE8_ALPHA8_EXT 0x8045 #define GL_RGBA32F_EXT 0x8814 #define GL_RGB32F_EXT 0x8815 #define GL_ALPHA32F_EXT 0x8816 #define GL_LUMINANCE32F_EXT 0x8818 #define GL_LUMINANCE_ALPHA32F_EXT 0x8819 #define GL_RGBA16F_EXT 0x881A #define GL_RGB16F_EXT 0x881B #define GL_ALPHA16F_EXT 0x881C #define GL_LUMINANCE16F_EXT 0x881E #define GL_LUMINANCE_ALPHA16F_EXT 0x881F #define GL_RGB10_A2_EXT 0x8059 #define GL_RGB10_EXT 0x8052 #define GL_BGRA8_EXT 0x93A1 #define GL_R8_EXT 0x8229 #define GL_RG8_EXT 0x822B #define GL_R32F_EXT 0x822E #define GL_RG32F_EXT 0x8230 #define GL_R16F_EXT 0x822D #define GL_RG16F_EXT 0x822F typedef void (APIENTRYP PFNGLTEXSTORAGE1DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); typedef void (APIENTRYP PFNGLTEXSTORAGE2DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLTEXSTORAGE3DEXTPROC) (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTexStorage1DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width); GLAPI void APIENTRY glTexStorage2DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height); GLAPI void APIENTRY glTexStorage3DEXT (GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth); #endif #endif /* GL_EXT_texture_storage */ #ifndef GL_EXT_window_rectangles #define GL_EXT_window_rectangles 1 #define GL_INCLUSIVE_EXT 0x8F10 #define GL_EXCLUSIVE_EXT 0x8F11 #define GL_WINDOW_RECTANGLE_EXT 0x8F12 #define GL_WINDOW_RECTANGLE_MODE_EXT 0x8F13 #define GL_MAX_WINDOW_RECTANGLES_EXT 0x8F14 #define GL_NUM_WINDOW_RECTANGLES_EXT 0x8F15 typedef void (APIENTRYP PFNGLWINDOWRECTANGLESEXTPROC) (GLenum mode, GLsizei count, const GLint *box); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glWindowRectanglesEXT (GLenum mode, GLsizei count, const GLint *box); #endif #endif /* GL_EXT_window_rectangles */ #ifndef GL_INTEL_blackhole_render #define GL_INTEL_blackhole_render 1 #define GL_BLACKHOLE_RENDER_INTEL 0x83FC #endif /* GL_INTEL_blackhole_render */ #ifndef GL_INTEL_conservative_rasterization #define GL_INTEL_conservative_rasterization 1 #define GL_CONSERVATIVE_RASTERIZATION_INTEL 0x83FE #endif /* GL_INTEL_conservative_rasterization */ #ifndef GL_INTEL_framebuffer_CMAA #define GL_INTEL_framebuffer_CMAA 1 typedef void (APIENTRYP PFNGLAPPLYFRAMEBUFFERATTACHMENTCMAAINTELPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glApplyFramebufferAttachmentCMAAINTEL (void); #endif #endif /* GL_INTEL_framebuffer_CMAA */ #ifndef GL_INTEL_performance_query #define GL_INTEL_performance_query 1 #define GL_PERFQUERY_SINGLE_CONTEXT_INTEL 0x00000000 #define GL_PERFQUERY_GLOBAL_CONTEXT_INTEL 0x00000001 #define GL_PERFQUERY_WAIT_INTEL 0x83FB #define GL_PERFQUERY_FLUSH_INTEL 0x83FA #define GL_PERFQUERY_DONOT_FLUSH_INTEL 0x83F9 #define GL_PERFQUERY_COUNTER_EVENT_INTEL 0x94F0 #define GL_PERFQUERY_COUNTER_DURATION_NORM_INTEL 0x94F1 #define GL_PERFQUERY_COUNTER_DURATION_RAW_INTEL 0x94F2 #define GL_PERFQUERY_COUNTER_THROUGHPUT_INTEL 0x94F3 #define GL_PERFQUERY_COUNTER_RAW_INTEL 0x94F4 #define GL_PERFQUERY_COUNTER_TIMESTAMP_INTEL 0x94F5 #define GL_PERFQUERY_COUNTER_DATA_UINT32_INTEL 0x94F8 #define GL_PERFQUERY_COUNTER_DATA_UINT64_INTEL 0x94F9 #define GL_PERFQUERY_COUNTER_DATA_FLOAT_INTEL 0x94FA #define GL_PERFQUERY_COUNTER_DATA_DOUBLE_INTEL 0x94FB #define GL_PERFQUERY_COUNTER_DATA_BOOL32_INTEL 0x94FC #define GL_PERFQUERY_QUERY_NAME_LENGTH_MAX_INTEL 0x94FD #define GL_PERFQUERY_COUNTER_NAME_LENGTH_MAX_INTEL 0x94FE #define GL_PERFQUERY_COUNTER_DESC_LENGTH_MAX_INTEL 0x94FF #define GL_PERFQUERY_GPA_EXTENDED_COUNTERS_INTEL 0x9500 typedef void (APIENTRYP PFNGLBEGINPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLCREATEPERFQUERYINTELPROC) (GLuint queryId, GLuint *queryHandle); typedef void (APIENTRYP PFNGLDELETEPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLENDPERFQUERYINTELPROC) (GLuint queryHandle); typedef void (APIENTRYP PFNGLGETFIRSTPERFQUERYIDINTELPROC) (GLuint *queryId); typedef void (APIENTRYP PFNGLGETNEXTPERFQUERYIDINTELPROC) (GLuint queryId, GLuint *nextQueryId); typedef void (APIENTRYP PFNGLGETPERFCOUNTERINFOINTELPROC) (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); typedef void (APIENTRYP PFNGLGETPERFQUERYDATAINTELPROC) (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); typedef void (APIENTRYP PFNGLGETPERFQUERYIDBYNAMEINTELPROC) (GLchar *queryName, GLuint *queryId); typedef void (APIENTRYP PFNGLGETPERFQUERYINFOINTELPROC) (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginPerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glCreatePerfQueryINTEL (GLuint queryId, GLuint *queryHandle); GLAPI void APIENTRY glDeletePerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glEndPerfQueryINTEL (GLuint queryHandle); GLAPI void APIENTRY glGetFirstPerfQueryIdINTEL (GLuint *queryId); GLAPI void APIENTRY glGetNextPerfQueryIdINTEL (GLuint queryId, GLuint *nextQueryId); GLAPI void APIENTRY glGetPerfCounterInfoINTEL (GLuint queryId, GLuint counterId, GLuint counterNameLength, GLchar *counterName, GLuint counterDescLength, GLchar *counterDesc, GLuint *counterOffset, GLuint *counterDataSize, GLuint *counterTypeEnum, GLuint *counterDataTypeEnum, GLuint64 *rawCounterMaxValue); GLAPI void APIENTRY glGetPerfQueryDataINTEL (GLuint queryHandle, GLuint flags, GLsizei dataSize, void *data, GLuint *bytesWritten); GLAPI void APIENTRY glGetPerfQueryIdByNameINTEL (GLchar *queryName, GLuint *queryId); GLAPI void APIENTRY glGetPerfQueryInfoINTEL (GLuint queryId, GLuint queryNameLength, GLchar *queryName, GLuint *dataSize, GLuint *noCounters, GLuint *noInstances, GLuint *capsMask); #endif #endif /* GL_INTEL_performance_query */ #ifndef GL_MESA_framebuffer_flip_x #define GL_MESA_framebuffer_flip_x 1 #define GL_FRAMEBUFFER_FLIP_X_MESA 0x8BBC #endif /* GL_MESA_framebuffer_flip_x */ #ifndef GL_MESA_framebuffer_flip_y #define GL_MESA_framebuffer_flip_y 1 #define GL_FRAMEBUFFER_FLIP_Y_MESA 0x8BBB typedef void (APIENTRYP PFNGLFRAMEBUFFERPARAMETERIMESAPROC) (GLenum target, GLenum pname, GLint param); typedef void (APIENTRYP PFNGLGETFRAMEBUFFERPARAMETERIVMESAPROC) (GLenum target, GLenum pname, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferParameteriMESA (GLenum target, GLenum pname, GLint param); GLAPI void APIENTRY glGetFramebufferParameterivMESA (GLenum target, GLenum pname, GLint *params); #endif #endif /* GL_MESA_framebuffer_flip_y */ #ifndef GL_MESA_framebuffer_swap_xy #define GL_MESA_framebuffer_swap_xy 1 #define GL_FRAMEBUFFER_SWAP_XY_MESA 0x8BBD #endif /* GL_MESA_framebuffer_swap_xy */ #ifndef GL_NV_bindless_multi_draw_indirect #define GL_NV_bindless_multi_draw_indirect 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei stride, GLint vertexBufferCount); #endif #endif /* GL_NV_bindless_multi_draw_indirect */ #ifndef GL_NV_bindless_multi_draw_indirect_count #define GL_NV_bindless_multi_draw_indirect_count 1 typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSINDIRECTBINDLESSCOUNTNVPROC) (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMultiDrawArraysIndirectBindlessCountNV (GLenum mode, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); GLAPI void APIENTRY glMultiDrawElementsIndirectBindlessCountNV (GLenum mode, GLenum type, const void *indirect, GLsizei drawCount, GLsizei maxDrawCount, GLsizei stride, GLint vertexBufferCount); #endif #endif /* GL_NV_bindless_multi_draw_indirect_count */ #ifndef GL_NV_bindless_texture #define GL_NV_bindless_texture 1 typedef GLuint64 (APIENTRYP PFNGLGETTEXTUREHANDLENVPROC) (GLuint texture); typedef GLuint64 (APIENTRYP PFNGLGETTEXTURESAMPLERHANDLENVPROC) (GLuint texture, GLuint sampler); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLMAKETEXTUREHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef GLuint64 (APIENTRYP PFNGLGETIMAGEHANDLENVPROC) (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle, GLenum access); typedef void (APIENTRYP PFNGLMAKEIMAGEHANDLENONRESIDENTNVPROC) (GLuint64 handle); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64NVPROC) (GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLUNIFORMHANDLEUI64VNVPROC) (GLint location, GLsizei count, const GLuint64 *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64NVPROC) (GLuint program, GLint location, GLuint64 value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMHANDLEUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64 *values); typedef GLboolean (APIENTRYP PFNGLISTEXTUREHANDLERESIDENTNVPROC) (GLuint64 handle); typedef GLboolean (APIENTRYP PFNGLISIMAGEHANDLERESIDENTNVPROC) (GLuint64 handle); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint64 APIENTRY glGetTextureHandleNV (GLuint texture); GLAPI GLuint64 APIENTRY glGetTextureSamplerHandleNV (GLuint texture, GLuint sampler); GLAPI void APIENTRY glMakeTextureHandleResidentNV (GLuint64 handle); GLAPI void APIENTRY glMakeTextureHandleNonResidentNV (GLuint64 handle); GLAPI GLuint64 APIENTRY glGetImageHandleNV (GLuint texture, GLint level, GLboolean layered, GLint layer, GLenum format); GLAPI void APIENTRY glMakeImageHandleResidentNV (GLuint64 handle, GLenum access); GLAPI void APIENTRY glMakeImageHandleNonResidentNV (GLuint64 handle); GLAPI void APIENTRY glUniformHandleui64NV (GLint location, GLuint64 value); GLAPI void APIENTRY glUniformHandleui64vNV (GLint location, GLsizei count, const GLuint64 *value); GLAPI void APIENTRY glProgramUniformHandleui64NV (GLuint program, GLint location, GLuint64 value); GLAPI void APIENTRY glProgramUniformHandleui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64 *values); GLAPI GLboolean APIENTRY glIsTextureHandleResidentNV (GLuint64 handle); GLAPI GLboolean APIENTRY glIsImageHandleResidentNV (GLuint64 handle); #endif #endif /* GL_NV_bindless_texture */ #ifndef GL_NV_blend_equation_advanced #define GL_NV_blend_equation_advanced 1 #define GL_BLEND_OVERLAP_NV 0x9281 #define GL_BLEND_PREMULTIPLIED_SRC_NV 0x9280 #define GL_BLUE_NV 0x1905 #define GL_COLORBURN_NV 0x929A #define GL_COLORDODGE_NV 0x9299 #define GL_CONJOINT_NV 0x9284 #define GL_CONTRAST_NV 0x92A1 #define GL_DARKEN_NV 0x9297 #define GL_DIFFERENCE_NV 0x929E #define GL_DISJOINT_NV 0x9283 #define GL_DST_ATOP_NV 0x928F #define GL_DST_IN_NV 0x928B #define GL_DST_NV 0x9287 #define GL_DST_OUT_NV 0x928D #define GL_DST_OVER_NV 0x9289 #define GL_EXCLUSION_NV 0x92A0 #define GL_GREEN_NV 0x1904 #define GL_HARDLIGHT_NV 0x929B #define GL_HARDMIX_NV 0x92A9 #define GL_HSL_COLOR_NV 0x92AF #define GL_HSL_HUE_NV 0x92AD #define GL_HSL_LUMINOSITY_NV 0x92B0 #define GL_HSL_SATURATION_NV 0x92AE #define GL_INVERT_OVG_NV 0x92B4 #define GL_INVERT_RGB_NV 0x92A3 #define GL_LIGHTEN_NV 0x9298 #define GL_LINEARBURN_NV 0x92A5 #define GL_LINEARDODGE_NV 0x92A4 #define GL_LINEARLIGHT_NV 0x92A7 #define GL_MINUS_CLAMPED_NV 0x92B3 #define GL_MINUS_NV 0x929F #define GL_MULTIPLY_NV 0x9294 #define GL_OVERLAY_NV 0x9296 #define GL_PINLIGHT_NV 0x92A8 #define GL_PLUS_CLAMPED_ALPHA_NV 0x92B2 #define GL_PLUS_CLAMPED_NV 0x92B1 #define GL_PLUS_DARKER_NV 0x9292 #define GL_PLUS_NV 0x9291 #define GL_RED_NV 0x1903 #define GL_SCREEN_NV 0x9295 #define GL_SOFTLIGHT_NV 0x929C #define GL_SRC_ATOP_NV 0x928E #define GL_SRC_IN_NV 0x928A #define GL_SRC_NV 0x9286 #define GL_SRC_OUT_NV 0x928C #define GL_SRC_OVER_NV 0x9288 #define GL_UNCORRELATED_NV 0x9282 #define GL_VIVIDLIGHT_NV 0x92A6 #define GL_XOR_NV 0x1506 typedef void (APIENTRYP PFNGLBLENDPARAMETERINVPROC) (GLenum pname, GLint value); typedef void (APIENTRYP PFNGLBLENDBARRIERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBlendParameteriNV (GLenum pname, GLint value); GLAPI void APIENTRY glBlendBarrierNV (void); #endif #endif /* GL_NV_blend_equation_advanced */ #ifndef GL_NV_blend_equation_advanced_coherent #define GL_NV_blend_equation_advanced_coherent 1 #define GL_BLEND_ADVANCED_COHERENT_NV 0x9285 #endif /* GL_NV_blend_equation_advanced_coherent */ #ifndef GL_NV_blend_minmax_factor #define GL_NV_blend_minmax_factor 1 #define GL_FACTOR_MIN_AMD 0x901C #define GL_FACTOR_MAX_AMD 0x901D #endif /* GL_NV_blend_minmax_factor */ #ifndef GL_NV_clip_space_w_scaling #define GL_NV_clip_space_w_scaling 1 #define GL_VIEWPORT_POSITION_W_SCALE_NV 0x937C #define GL_VIEWPORT_POSITION_W_SCALE_X_COEFF_NV 0x937D #define GL_VIEWPORT_POSITION_W_SCALE_Y_COEFF_NV 0x937E typedef void (APIENTRYP PFNGLVIEWPORTPOSITIONWSCALENVPROC) (GLuint index, GLfloat xcoeff, GLfloat ycoeff); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glViewportPositionWScaleNV (GLuint index, GLfloat xcoeff, GLfloat ycoeff); #endif #endif /* GL_NV_clip_space_w_scaling */ #ifndef GL_NV_command_list #define GL_NV_command_list 1 #define GL_TERMINATE_SEQUENCE_COMMAND_NV 0x0000 #define GL_NOP_COMMAND_NV 0x0001 #define GL_DRAW_ELEMENTS_COMMAND_NV 0x0002 #define GL_DRAW_ARRAYS_COMMAND_NV 0x0003 #define GL_DRAW_ELEMENTS_STRIP_COMMAND_NV 0x0004 #define GL_DRAW_ARRAYS_STRIP_COMMAND_NV 0x0005 #define GL_DRAW_ELEMENTS_INSTANCED_COMMAND_NV 0x0006 #define GL_DRAW_ARRAYS_INSTANCED_COMMAND_NV 0x0007 #define GL_ELEMENT_ADDRESS_COMMAND_NV 0x0008 #define GL_ATTRIBUTE_ADDRESS_COMMAND_NV 0x0009 #define GL_UNIFORM_ADDRESS_COMMAND_NV 0x000A #define GL_BLEND_COLOR_COMMAND_NV 0x000B #define GL_STENCIL_REF_COMMAND_NV 0x000C #define GL_LINE_WIDTH_COMMAND_NV 0x000D #define GL_POLYGON_OFFSET_COMMAND_NV 0x000E #define GL_ALPHA_REF_COMMAND_NV 0x000F #define GL_VIEWPORT_COMMAND_NV 0x0010 #define GL_SCISSOR_COMMAND_NV 0x0011 #define GL_FRONT_FACE_COMMAND_NV 0x0012 typedef void (APIENTRYP PFNGLCREATESTATESNVPROC) (GLsizei n, GLuint *states); typedef void (APIENTRYP PFNGLDELETESTATESNVPROC) (GLsizei n, const GLuint *states); typedef GLboolean (APIENTRYP PFNGLISSTATENVPROC) (GLuint state); typedef void (APIENTRYP PFNGLSTATECAPTURENVPROC) (GLuint state, GLenum mode); typedef GLuint (APIENTRYP PFNGLGETCOMMANDHEADERNVPROC) (GLenum tokenID, GLuint size); typedef GLushort (APIENTRYP PFNGLGETSTAGEINDEXNVPROC) (GLenum shadertype); typedef void (APIENTRYP PFNGLDRAWCOMMANDSNVPROC) (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSADDRESSNVPROC) (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESNVPROC) (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLDRAWCOMMANDSSTATESADDRESSNVPROC) (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLCREATECOMMANDLISTSNVPROC) (GLsizei n, GLuint *lists); typedef void (APIENTRYP PFNGLDELETECOMMANDLISTSNVPROC) (GLsizei n, const GLuint *lists); typedef GLboolean (APIENTRYP PFNGLISCOMMANDLISTNVPROC) (GLuint list); typedef void (APIENTRYP PFNGLLISTDRAWCOMMANDSSTATESCLIENTNVPROC) (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); typedef void (APIENTRYP PFNGLCOMMANDLISTSEGMENTSNVPROC) (GLuint list, GLuint segments); typedef void (APIENTRYP PFNGLCOMPILECOMMANDLISTNVPROC) (GLuint list); typedef void (APIENTRYP PFNGLCALLCOMMANDLISTNVPROC) (GLuint list); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCreateStatesNV (GLsizei n, GLuint *states); GLAPI void APIENTRY glDeleteStatesNV (GLsizei n, const GLuint *states); GLAPI GLboolean APIENTRY glIsStateNV (GLuint state); GLAPI void APIENTRY glStateCaptureNV (GLuint state, GLenum mode); GLAPI GLuint APIENTRY glGetCommandHeaderNV (GLenum tokenID, GLuint size); GLAPI GLushort APIENTRY glGetStageIndexNV (GLenum shadertype); GLAPI void APIENTRY glDrawCommandsNV (GLenum primitiveMode, GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, GLuint count); GLAPI void APIENTRY glDrawCommandsAddressNV (GLenum primitiveMode, const GLuint64 *indirects, const GLsizei *sizes, GLuint count); GLAPI void APIENTRY glDrawCommandsStatesNV (GLuint buffer, const GLintptr *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glDrawCommandsStatesAddressNV (const GLuint64 *indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glCreateCommandListsNV (GLsizei n, GLuint *lists); GLAPI void APIENTRY glDeleteCommandListsNV (GLsizei n, const GLuint *lists); GLAPI GLboolean APIENTRY glIsCommandListNV (GLuint list); GLAPI void APIENTRY glListDrawCommandsStatesClientNV (GLuint list, GLuint segment, const void **indirects, const GLsizei *sizes, const GLuint *states, const GLuint *fbos, GLuint count); GLAPI void APIENTRY glCommandListSegmentsNV (GLuint list, GLuint segments); GLAPI void APIENTRY glCompileCommandListNV (GLuint list); GLAPI void APIENTRY glCallCommandListNV (GLuint list); #endif #endif /* GL_NV_command_list */ #ifndef GL_NV_compute_shader_derivatives #define GL_NV_compute_shader_derivatives 1 #endif /* GL_NV_compute_shader_derivatives */ #ifndef GL_NV_conditional_render #define GL_NV_conditional_render 1 #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 typedef void (APIENTRYP PFNGLBEGINCONDITIONALRENDERNVPROC) (GLuint id, GLenum mode); typedef void (APIENTRYP PFNGLENDCONDITIONALRENDERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBeginConditionalRenderNV (GLuint id, GLenum mode); GLAPI void APIENTRY glEndConditionalRenderNV (void); #endif #endif /* GL_NV_conditional_render */ #ifndef GL_NV_conservative_raster #define GL_NV_conservative_raster 1 #define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346 #define GL_SUBPIXEL_PRECISION_BIAS_X_BITS_NV 0x9347 #define GL_SUBPIXEL_PRECISION_BIAS_Y_BITS_NV 0x9348 #define GL_MAX_SUBPIXEL_PRECISION_BIAS_BITS_NV 0x9349 typedef void (APIENTRYP PFNGLSUBPIXELPRECISIONBIASNVPROC) (GLuint xbits, GLuint ybits); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glSubpixelPrecisionBiasNV (GLuint xbits, GLuint ybits); #endif #endif /* GL_NV_conservative_raster */ #ifndef GL_NV_conservative_raster_dilate #define GL_NV_conservative_raster_dilate 1 #define GL_CONSERVATIVE_RASTER_DILATE_NV 0x9379 #define GL_CONSERVATIVE_RASTER_DILATE_RANGE_NV 0x937A #define GL_CONSERVATIVE_RASTER_DILATE_GRANULARITY_NV 0x937B typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERFNVPROC) (GLenum pname, GLfloat value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glConservativeRasterParameterfNV (GLenum pname, GLfloat value); #endif #endif /* GL_NV_conservative_raster_dilate */ #ifndef GL_NV_conservative_raster_pre_snap #define GL_NV_conservative_raster_pre_snap 1 #define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_NV 0x9550 #endif /* GL_NV_conservative_raster_pre_snap */ #ifndef GL_NV_conservative_raster_pre_snap_triangles #define GL_NV_conservative_raster_pre_snap_triangles 1 #define GL_CONSERVATIVE_RASTER_MODE_NV 0x954D #define GL_CONSERVATIVE_RASTER_MODE_POST_SNAP_NV 0x954E #define GL_CONSERVATIVE_RASTER_MODE_PRE_SNAP_TRIANGLES_NV 0x954F typedef void (APIENTRYP PFNGLCONSERVATIVERASTERPARAMETERINVPROC) (GLenum pname, GLint param); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glConservativeRasterParameteriNV (GLenum pname, GLint param); #endif #endif /* GL_NV_conservative_raster_pre_snap_triangles */ #ifndef GL_NV_conservative_raster_underestimation #define GL_NV_conservative_raster_underestimation 1 #endif /* GL_NV_conservative_raster_underestimation */ #ifndef GL_NV_depth_buffer_float #define GL_NV_depth_buffer_float 1 #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 typedef void (APIENTRYP PFNGLDEPTHRANGEDNVPROC) (GLdouble zNear, GLdouble zFar); typedef void (APIENTRYP PFNGLCLEARDEPTHDNVPROC) (GLdouble depth); typedef void (APIENTRYP PFNGLDEPTHBOUNDSDNVPROC) (GLdouble zmin, GLdouble zmax); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDepthRangedNV (GLdouble zNear, GLdouble zFar); GLAPI void APIENTRY glClearDepthdNV (GLdouble depth); GLAPI void APIENTRY glDepthBoundsdNV (GLdouble zmin, GLdouble zmax); #endif #endif /* GL_NV_depth_buffer_float */ #ifndef GL_NV_draw_vulkan_image #define GL_NV_draw_vulkan_image 1 typedef void (APIENTRY *GLVULKANPROCNV)(void); typedef void (APIENTRYP PFNGLDRAWVKIMAGENVPROC) (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); typedef GLVULKANPROCNV (APIENTRYP PFNGLGETVKPROCADDRNVPROC) (const GLchar *name); typedef void (APIENTRYP PFNGLWAITVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); typedef void (APIENTRYP PFNGLSIGNALVKSEMAPHORENVPROC) (GLuint64 vkSemaphore); typedef void (APIENTRYP PFNGLSIGNALVKFENCENVPROC) (GLuint64 vkFence); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawVkImageNV (GLuint64 vkImage, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1); GLAPI GLVULKANPROCNV APIENTRY glGetVkProcAddrNV (const GLchar *name); GLAPI void APIENTRY glWaitVkSemaphoreNV (GLuint64 vkSemaphore); GLAPI void APIENTRY glSignalVkSemaphoreNV (GLuint64 vkSemaphore); GLAPI void APIENTRY glSignalVkFenceNV (GLuint64 vkFence); #endif #endif /* GL_NV_draw_vulkan_image */ #ifndef GL_NV_fill_rectangle #define GL_NV_fill_rectangle 1 #define GL_FILL_RECTANGLE_NV 0x933C #endif /* GL_NV_fill_rectangle */ #ifndef GL_NV_fragment_coverage_to_color #define GL_NV_fragment_coverage_to_color 1 #define GL_FRAGMENT_COVERAGE_TO_COLOR_NV 0x92DD #define GL_FRAGMENT_COVERAGE_COLOR_NV 0x92DE typedef void (APIENTRYP PFNGLFRAGMENTCOVERAGECOLORNVPROC) (GLuint color); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFragmentCoverageColorNV (GLuint color); #endif #endif /* GL_NV_fragment_coverage_to_color */ #ifndef GL_NV_fragment_shader_barycentric #define GL_NV_fragment_shader_barycentric 1 #endif /* GL_NV_fragment_shader_barycentric */ #ifndef GL_NV_fragment_shader_interlock #define GL_NV_fragment_shader_interlock 1 #endif /* GL_NV_fragment_shader_interlock */ #ifndef GL_NV_framebuffer_mixed_samples #define GL_NV_framebuffer_mixed_samples 1 #define GL_COVERAGE_MODULATION_TABLE_NV 0x9331 #define GL_COLOR_SAMPLES_NV 0x8E20 #define GL_DEPTH_SAMPLES_NV 0x932D #define GL_STENCIL_SAMPLES_NV 0x932E #define GL_MIXED_DEPTH_SAMPLES_SUPPORTED_NV 0x932F #define GL_MIXED_STENCIL_SAMPLES_SUPPORTED_NV 0x9330 #define GL_COVERAGE_MODULATION_NV 0x9332 #define GL_COVERAGE_MODULATION_TABLE_SIZE_NV 0x9333 typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONTABLENVPROC) (GLsizei n, const GLfloat *v); typedef void (APIENTRYP PFNGLGETCOVERAGEMODULATIONTABLENVPROC) (GLsizei bufSize, GLfloat *v); typedef void (APIENTRYP PFNGLCOVERAGEMODULATIONNVPROC) (GLenum components); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glCoverageModulationTableNV (GLsizei n, const GLfloat *v); GLAPI void APIENTRY glGetCoverageModulationTableNV (GLsizei bufSize, GLfloat *v); GLAPI void APIENTRY glCoverageModulationNV (GLenum components); #endif #endif /* GL_NV_framebuffer_mixed_samples */ #ifndef GL_NV_framebuffer_multisample_coverage #define GL_NV_framebuffer_multisample_coverage 1 #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 typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEMULTISAMPLECOVERAGENVPROC) (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glRenderbufferStorageMultisampleCoverageNV (GLenum target, GLsizei coverageSamples, GLsizei colorSamples, GLenum internalformat, GLsizei width, GLsizei height); #endif #endif /* GL_NV_framebuffer_multisample_coverage */ #ifndef GL_NV_geometry_shader_passthrough #define GL_NV_geometry_shader_passthrough 1 #endif /* GL_NV_geometry_shader_passthrough */ #ifndef GL_NV_gpu_shader5 #define GL_NV_gpu_shader5 1 typedef khronos_int64_t GLint64EXT; #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 typedef void (APIENTRYP PFNGLUNIFORM1I64NVPROC) (GLint location, GLint64EXT x); typedef void (APIENTRYP PFNGLUNIFORM2I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLUNIFORM3I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLUNIFORM4I64NVPROC) (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLUNIFORM1I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM2I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM3I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM4I64VNVPROC) (GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM1UI64NVPROC) (GLint location, GLuint64EXT x); typedef void (APIENTRYP PFNGLUNIFORM2UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLUNIFORM3UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLUNIFORM4UI64NVPROC) (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLUNIFORM1UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM2UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM3UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLUNIFORM4UI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLGETUNIFORMI64VNVPROC) (GLuint program, GLint location, GLint64EXT *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64NVPROC) (GLuint program, GLint location, GLint64EXT x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64NVPROC) (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4I64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64NVPROC) (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM1UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM2UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM3UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORM4UI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glUniform1i64NV (GLint location, GLint64EXT x); GLAPI void APIENTRY glUniform2i64NV (GLint location, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glUniform3i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glUniform4i64NV (GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glUniform1i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform2i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform3i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform4i64vNV (GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glUniform1ui64NV (GLint location, GLuint64EXT x); GLAPI void APIENTRY glUniform2ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glUniform3ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glUniform4ui64NV (GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glUniform1ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform2ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform3ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glUniform4ui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glGetUniformi64vNV (GLuint program, GLint location, GLint64EXT *params); GLAPI void APIENTRY glProgramUniform1i64NV (GLuint program, GLint location, GLint64EXT x); GLAPI void APIENTRY glProgramUniform2i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glProgramUniform3i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glProgramUniform4i64NV (GLuint program, GLint location, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glProgramUniform1i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform2i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform3i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform4i64vNV (GLuint program, GLint location, GLsizei count, const GLint64EXT *value); GLAPI void APIENTRY glProgramUniform1ui64NV (GLuint program, GLint location, GLuint64EXT x); GLAPI void APIENTRY glProgramUniform2ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glProgramUniform3ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glProgramUniform4ui64NV (GLuint program, GLint location, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glProgramUniform1ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform2ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform3ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glProgramUniform4ui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #endif /* GL_NV_gpu_shader5 */ #ifndef GL_NV_internalformat_sample_query #define GL_NV_internalformat_sample_query 1 #define GL_MULTISAMPLES_NV 0x9371 #define GL_SUPERSAMPLE_SCALE_X_NV 0x9372 #define GL_SUPERSAMPLE_SCALE_Y_NV 0x9373 #define GL_CONFORMANT_NV 0x9374 typedef void (APIENTRYP PFNGLGETINTERNALFORMATSAMPLEIVNVPROC) (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetInternalformatSampleivNV (GLenum target, GLenum internalformat, GLsizei samples, GLenum pname, GLsizei count, GLint *params); #endif #endif /* GL_NV_internalformat_sample_query */ #ifndef GL_NV_memory_attachment #define GL_NV_memory_attachment 1 #define GL_ATTACHED_MEMORY_OBJECT_NV 0x95A4 #define GL_ATTACHED_MEMORY_OFFSET_NV 0x95A5 #define GL_MEMORY_ATTACHABLE_ALIGNMENT_NV 0x95A6 #define GL_MEMORY_ATTACHABLE_SIZE_NV 0x95A7 #define GL_MEMORY_ATTACHABLE_NV 0x95A8 #define GL_DETACHED_MEMORY_INCARNATION_NV 0x95A9 #define GL_DETACHED_TEXTURES_NV 0x95AA #define GL_DETACHED_BUFFERS_NV 0x95AB #define GL_MAX_DETACHED_TEXTURES_NV 0x95AC #define GL_MAX_DETACHED_BUFFERS_NV 0x95AD typedef void (APIENTRYP PFNGLGETMEMORYOBJECTDETACHEDRESOURCESUIVNVPROC) (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); typedef void (APIENTRYP PFNGLRESETMEMORYOBJECTPARAMETERNVPROC) (GLuint memory, GLenum pname); typedef void (APIENTRYP PFNGLTEXATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLBUFFERATTACHMEMORYNVPROC) (GLenum target, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLTEXTUREATTACHMEMORYNVPROC) (GLuint texture, GLuint memory, GLuint64 offset); typedef void (APIENTRYP PFNGLNAMEDBUFFERATTACHMEMORYNVPROC) (GLuint buffer, GLuint memory, GLuint64 offset); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glGetMemoryObjectDetachedResourcesuivNV (GLuint memory, GLenum pname, GLint first, GLsizei count, GLuint *params); GLAPI void APIENTRY glResetMemoryObjectParameterNV (GLuint memory, GLenum pname); GLAPI void APIENTRY glTexAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glBufferAttachMemoryNV (GLenum target, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glTextureAttachMemoryNV (GLuint texture, GLuint memory, GLuint64 offset); GLAPI void APIENTRY glNamedBufferAttachMemoryNV (GLuint buffer, GLuint memory, GLuint64 offset); #endif #endif /* GL_NV_memory_attachment */ #ifndef GL_NV_memory_object_sparse #define GL_NV_memory_object_sparse 1 typedef void (APIENTRYP PFNGLBUFFERPAGECOMMITMENTMEMNVPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); typedef void (APIENTRYP PFNGLTEXPAGECOMMITMENTMEMNVPROC) (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); typedef void (APIENTRYP PFNGLNAMEDBUFFERPAGECOMMITMENTMEMNVPROC) (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); typedef void (APIENTRYP PFNGLTEXTUREPAGECOMMITMENTMEMNVPROC) (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferPageCommitmentMemNV (GLenum target, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); GLAPI void APIENTRY glTexPageCommitmentMemNV (GLenum target, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); GLAPI void APIENTRY glNamedBufferPageCommitmentMemNV (GLuint buffer, GLintptr offset, GLsizeiptr size, GLuint memory, GLuint64 memOffset, GLboolean commit); GLAPI void APIENTRY glTexturePageCommitmentMemNV (GLuint texture, GLint layer, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLuint memory, GLuint64 offset, GLboolean commit); #endif #endif /* GL_NV_memory_object_sparse */ #ifndef GL_NV_mesh_shader #define GL_NV_mesh_shader 1 #define GL_MESH_SHADER_NV 0x9559 #define GL_TASK_SHADER_NV 0x955A #define GL_MAX_MESH_UNIFORM_BLOCKS_NV 0x8E60 #define GL_MAX_MESH_TEXTURE_IMAGE_UNITS_NV 0x8E61 #define GL_MAX_MESH_IMAGE_UNIFORMS_NV 0x8E62 #define GL_MAX_MESH_UNIFORM_COMPONENTS_NV 0x8E63 #define GL_MAX_MESH_ATOMIC_COUNTER_BUFFERS_NV 0x8E64 #define GL_MAX_MESH_ATOMIC_COUNTERS_NV 0x8E65 #define GL_MAX_MESH_SHADER_STORAGE_BLOCKS_NV 0x8E66 #define GL_MAX_COMBINED_MESH_UNIFORM_COMPONENTS_NV 0x8E67 #define GL_MAX_TASK_UNIFORM_BLOCKS_NV 0x8E68 #define GL_MAX_TASK_TEXTURE_IMAGE_UNITS_NV 0x8E69 #define GL_MAX_TASK_IMAGE_UNIFORMS_NV 0x8E6A #define GL_MAX_TASK_UNIFORM_COMPONENTS_NV 0x8E6B #define GL_MAX_TASK_ATOMIC_COUNTER_BUFFERS_NV 0x8E6C #define GL_MAX_TASK_ATOMIC_COUNTERS_NV 0x8E6D #define GL_MAX_TASK_SHADER_STORAGE_BLOCKS_NV 0x8E6E #define GL_MAX_COMBINED_TASK_UNIFORM_COMPONENTS_NV 0x8E6F #define GL_MAX_MESH_WORK_GROUP_INVOCATIONS_NV 0x95A2 #define GL_MAX_TASK_WORK_GROUP_INVOCATIONS_NV 0x95A3 #define GL_MAX_MESH_TOTAL_MEMORY_SIZE_NV 0x9536 #define GL_MAX_TASK_TOTAL_MEMORY_SIZE_NV 0x9537 #define GL_MAX_MESH_OUTPUT_VERTICES_NV 0x9538 #define GL_MAX_MESH_OUTPUT_PRIMITIVES_NV 0x9539 #define GL_MAX_TASK_OUTPUT_COUNT_NV 0x953A #define GL_MAX_DRAW_MESH_TASKS_COUNT_NV 0x953D #define GL_MAX_MESH_VIEWS_NV 0x9557 #define GL_MESH_OUTPUT_PER_VERTEX_GRANULARITY_NV 0x92DF #define GL_MESH_OUTPUT_PER_PRIMITIVE_GRANULARITY_NV 0x9543 #define GL_MAX_MESH_WORK_GROUP_SIZE_NV 0x953B #define GL_MAX_TASK_WORK_GROUP_SIZE_NV 0x953C #define GL_MESH_WORK_GROUP_SIZE_NV 0x953E #define GL_TASK_WORK_GROUP_SIZE_NV 0x953F #define GL_MESH_VERTICES_OUT_NV 0x9579 #define GL_MESH_PRIMITIVES_OUT_NV 0x957A #define GL_MESH_OUTPUT_TYPE_NV 0x957B #define GL_UNIFORM_BLOCK_REFERENCED_BY_MESH_SHADER_NV 0x959C #define GL_UNIFORM_BLOCK_REFERENCED_BY_TASK_SHADER_NV 0x959D #define GL_REFERENCED_BY_MESH_SHADER_NV 0x95A0 #define GL_REFERENCED_BY_TASK_SHADER_NV 0x95A1 #define GL_MESH_SHADER_BIT_NV 0x00000040 #define GL_TASK_SHADER_BIT_NV 0x00000080 #define GL_MESH_SUBROUTINE_NV 0x957C #define GL_TASK_SUBROUTINE_NV 0x957D #define GL_MESH_SUBROUTINE_UNIFORM_NV 0x957E #define GL_TASK_SUBROUTINE_UNIFORM_NV 0x957F #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_MESH_SHADER_NV 0x959E #define GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TASK_SHADER_NV 0x959F typedef void (APIENTRYP PFNGLDRAWMESHTASKSNVPROC) (GLuint first, GLuint count); typedef void (APIENTRYP PFNGLDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect); typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTNVPROC) (GLintptr indirect, GLsizei drawcount, GLsizei stride); typedef void (APIENTRYP PFNGLMULTIDRAWMESHTASKSINDIRECTCOUNTNVPROC) (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glDrawMeshTasksNV (GLuint first, GLuint count); GLAPI void APIENTRY glDrawMeshTasksIndirectNV (GLintptr indirect); GLAPI void APIENTRY glMultiDrawMeshTasksIndirectNV (GLintptr indirect, GLsizei drawcount, GLsizei stride); GLAPI void APIENTRY glMultiDrawMeshTasksIndirectCountNV (GLintptr indirect, GLintptr drawcount, GLsizei maxdrawcount, GLsizei stride); #endif #endif /* GL_NV_mesh_shader */ #ifndef GL_NV_path_rendering #define GL_NV_path_rendering 1 #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_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_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 #define GL_ROUNDED_RECT_NV 0xE8 #define GL_RELATIVE_ROUNDED_RECT_NV 0xE9 #define GL_ROUNDED_RECT2_NV 0xEA #define GL_RELATIVE_ROUNDED_RECT2_NV 0xEB #define GL_ROUNDED_RECT4_NV 0xEC #define GL_RELATIVE_ROUNDED_RECT4_NV 0xED #define GL_ROUNDED_RECT8_NV 0xEE #define GL_RELATIVE_ROUNDED_RECT8_NV 0xEF #define GL_RELATIVE_RECT_NV 0xF7 #define GL_FONT_GLYPHS_AVAILABLE_NV 0x9368 #define GL_FONT_TARGET_UNAVAILABLE_NV 0x9369 #define GL_FONT_UNAVAILABLE_NV 0x936A #define GL_FONT_UNINTELLIGIBLE_NV 0x936B #define GL_CONIC_CURVE_TO_NV 0x1A #define GL_RELATIVE_CONIC_CURVE_TO_NV 0x1B #define GL_FONT_NUM_GLYPH_INDICES_BIT_NV 0x20000000 #define GL_STANDARD_FONT_FORMAT_NV 0x936C #define GL_PATH_PROJECTION_NV 0x1701 #define GL_PATH_MODELVIEW_NV 0x1700 #define GL_PATH_MODELVIEW_STACK_DEPTH_NV 0x0BA3 #define GL_PATH_MODELVIEW_MATRIX_NV 0x0BA6 #define GL_PATH_MAX_MODELVIEW_STACK_DEPTH_NV 0x0D36 #define GL_PATH_TRANSPOSE_MODELVIEW_MATRIX_NV 0x84E3 #define GL_PATH_PROJECTION_STACK_DEPTH_NV 0x0BA4 #define GL_PATH_PROJECTION_MATRIX_NV 0x0BA7 #define GL_PATH_MAX_PROJECTION_STACK_DEPTH_NV 0x0D38 #define GL_PATH_TRANSPOSE_PROJECTION_MATRIX_NV 0x84E4 #define GL_FRAGMENT_INPUT_NV 0x936D typedef GLuint (APIENTRYP PFNGLGENPATHSNVPROC) (GLsizei range); typedef void (APIENTRYP PFNGLDELETEPATHSNVPROC) (GLuint path, GLsizei range); typedef GLboolean (APIENTRYP PFNGLISPATHNVPROC) (GLuint path); typedef void (APIENTRYP PFNGLPATHCOMMANDSNVPROC) (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHCOORDSNVPROC) (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSUBCOMMANDSNVPROC) (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSUBCOORDSNVPROC) (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); typedef void (APIENTRYP PFNGLPATHSTRINGNVPROC) (GLuint path, GLenum format, GLsizei length, const void *pathString); typedef void (APIENTRYP PFNGLPATHGLYPHSNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLPATHGLYPHRANGENVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLWEIGHTPATHSNVPROC) (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); typedef void (APIENTRYP PFNGLCOPYPATHNVPROC) (GLuint resultPath, GLuint srcPath); typedef void (APIENTRYP PFNGLINTERPOLATEPATHSNVPROC) (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); typedef void (APIENTRYP PFNGLTRANSFORMPATHNVPROC) (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, const GLint *value); typedef void (APIENTRYP PFNGLPATHPARAMETERINVPROC) (GLuint path, GLenum pname, GLint value); typedef void (APIENTRYP PFNGLPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, const GLfloat *value); typedef void (APIENTRYP PFNGLPATHPARAMETERFNVPROC) (GLuint path, GLenum pname, GLfloat value); typedef void (APIENTRYP PFNGLPATHDASHARRAYNVPROC) (GLuint path, GLsizei dashCount, const GLfloat *dashArray); typedef void (APIENTRYP PFNGLPATHSTENCILFUNCNVPROC) (GLenum func, GLint ref, GLuint mask); typedef void (APIENTRYP PFNGLPATHSTENCILDEPTHOFFSETNVPROC) (GLfloat factor, GLfloat units); typedef void (APIENTRYP PFNGLSTENCILFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask); typedef void (APIENTRYP PFNGLSTENCILFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLSTENCILSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLPATHCOVERDEPTHFUNCNVPROC) (GLenum func); typedef void (APIENTRYP PFNGLCOVERFILLPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (APIENTRYP PFNGLCOVERSTROKEPATHNVPROC) (GLuint path, GLenum coverMode); typedef void (APIENTRYP PFNGLCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLGETPATHPARAMETERIVNVPROC) (GLuint path, GLenum pname, GLint *value); typedef void (APIENTRYP PFNGLGETPATHPARAMETERFVNVPROC) (GLuint path, GLenum pname, GLfloat *value); typedef void (APIENTRYP PFNGLGETPATHCOMMANDSNVPROC) (GLuint path, GLubyte *commands); typedef void (APIENTRYP PFNGLGETPATHCOORDSNVPROC) (GLuint path, GLfloat *coords); typedef void (APIENTRYP PFNGLGETPATHDASHARRAYNVPROC) (GLuint path, GLfloat *dashArray); typedef void (APIENTRYP PFNGLGETPATHMETRICSNVPROC) (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); typedef void (APIENTRYP PFNGLGETPATHMETRICRANGENVPROC) (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); typedef void (APIENTRYP PFNGLGETPATHSPACINGNVPROC) (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); typedef GLboolean (APIENTRYP PFNGLISPOINTINFILLPATHNVPROC) (GLuint path, GLuint mask, GLfloat x, GLfloat y); typedef GLboolean (APIENTRYP PFNGLISPOINTINSTROKEPATHNVPROC) (GLuint path, GLfloat x, GLfloat y); typedef GLfloat (APIENTRYP PFNGLGETPATHLENGTHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments); typedef GLboolean (APIENTRYP PFNGLPOINTALONGPATHNVPROC) (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); typedef void (APIENTRYP PFNGLMATRIXLOAD3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOAD3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXLOADTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULT3X2FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULT3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLMATRIXMULTTRANSPOSE3X3FNVPROC) (GLenum matrixMode, const GLfloat *m); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHNVPROC) (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHNVPROC) (GLuint path, GLint reference, GLuint mask, GLenum coverMode); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERFILLPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef void (APIENTRYP PFNGLSTENCILTHENCOVERSTROKEPATHINSTANCEDNVPROC) (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXRANGENVPROC) (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); typedef GLenum (APIENTRYP PFNGLPATHGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef GLenum (APIENTRYP PFNGLPATHMEMORYGLYPHINDEXARRAYNVPROC) (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); typedef void (APIENTRYP PFNGLPROGRAMPATHFRAGMENTINPUTGENNVPROC) (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); typedef void (APIENTRYP PFNGLGETPROGRAMRESOURCEFVNVPROC) (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); #ifdef GL_GLEXT_PROTOTYPES GLAPI GLuint APIENTRY glGenPathsNV (GLsizei range); GLAPI void APIENTRY glDeletePathsNV (GLuint path, GLsizei range); GLAPI GLboolean APIENTRY glIsPathNV (GLuint path); GLAPI void APIENTRY glPathCommandsNV (GLuint path, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathCoordsNV (GLuint path, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathSubCommandsNV (GLuint path, GLsizei commandStart, GLsizei commandsToDelete, GLsizei numCommands, const GLubyte *commands, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathSubCoordsNV (GLuint path, GLsizei coordStart, GLsizei numCoords, GLenum coordType, const void *coords); GLAPI void APIENTRY glPathStringNV (GLuint path, GLenum format, GLsizei length, const void *pathString); GLAPI void APIENTRY glPathGlyphsNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLsizei numGlyphs, GLenum type, const void *charcodes, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glPathGlyphRangeNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyph, GLsizei numGlyphs, GLenum handleMissingGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glWeightPathsNV (GLuint resultPath, GLsizei numPaths, const GLuint *paths, const GLfloat *weights); GLAPI void APIENTRY glCopyPathNV (GLuint resultPath, GLuint srcPath); GLAPI void APIENTRY glInterpolatePathsNV (GLuint resultPath, GLuint pathA, GLuint pathB, GLfloat weight); GLAPI void APIENTRY glTransformPathNV (GLuint resultPath, GLuint srcPath, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glPathParameterivNV (GLuint path, GLenum pname, const GLint *value); GLAPI void APIENTRY glPathParameteriNV (GLuint path, GLenum pname, GLint value); GLAPI void APIENTRY glPathParameterfvNV (GLuint path, GLenum pname, const GLfloat *value); GLAPI void APIENTRY glPathParameterfNV (GLuint path, GLenum pname, GLfloat value); GLAPI void APIENTRY glPathDashArrayNV (GLuint path, GLsizei dashCount, const GLfloat *dashArray); GLAPI void APIENTRY glPathStencilFuncNV (GLenum func, GLint ref, GLuint mask); GLAPI void APIENTRY glPathStencilDepthOffsetNV (GLfloat factor, GLfloat units); GLAPI void APIENTRY glStencilFillPathNV (GLuint path, GLenum fillMode, GLuint mask); GLAPI void APIENTRY glStencilStrokePathNV (GLuint path, GLint reference, GLuint mask); GLAPI void APIENTRY glStencilFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glStencilStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glPathCoverDepthFuncNV (GLenum func); GLAPI void APIENTRY glCoverFillPathNV (GLuint path, GLenum coverMode); GLAPI void APIENTRY glCoverStrokePathNV (GLuint path, GLenum coverMode); GLAPI void APIENTRY glCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glGetPathParameterivNV (GLuint path, GLenum pname, GLint *value); GLAPI void APIENTRY glGetPathParameterfvNV (GLuint path, GLenum pname, GLfloat *value); GLAPI void APIENTRY glGetPathCommandsNV (GLuint path, GLubyte *commands); GLAPI void APIENTRY glGetPathCoordsNV (GLuint path, GLfloat *coords); GLAPI void APIENTRY glGetPathDashArrayNV (GLuint path, GLfloat *dashArray); GLAPI void APIENTRY glGetPathMetricsNV (GLbitfield metricQueryMask, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLsizei stride, GLfloat *metrics); GLAPI void APIENTRY glGetPathMetricRangeNV (GLbitfield metricQueryMask, GLuint firstPathName, GLsizei numPaths, GLsizei stride, GLfloat *metrics); GLAPI void APIENTRY glGetPathSpacingNV (GLenum pathListMode, GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLfloat advanceScale, GLfloat kerningScale, GLenum transformType, GLfloat *returnedSpacing); GLAPI GLboolean APIENTRY glIsPointInFillPathNV (GLuint path, GLuint mask, GLfloat x, GLfloat y); GLAPI GLboolean APIENTRY glIsPointInStrokePathNV (GLuint path, GLfloat x, GLfloat y); GLAPI GLfloat APIENTRY glGetPathLengthNV (GLuint path, GLsizei startSegment, GLsizei numSegments); GLAPI GLboolean APIENTRY glPointAlongPathNV (GLuint path, GLsizei startSegment, GLsizei numSegments, GLfloat distance, GLfloat *x, GLfloat *y, GLfloat *tangentX, GLfloat *tangentY); GLAPI void APIENTRY glMatrixLoad3x2fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoad3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixLoadTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMult3x2fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMult3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glMatrixMultTranspose3x3fNV (GLenum matrixMode, const GLfloat *m); GLAPI void APIENTRY glStencilThenCoverFillPathNV (GLuint path, GLenum fillMode, GLuint mask, GLenum coverMode); GLAPI void APIENTRY glStencilThenCoverStrokePathNV (GLuint path, GLint reference, GLuint mask, GLenum coverMode); GLAPI void APIENTRY glStencilThenCoverFillPathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLenum fillMode, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI void APIENTRY glStencilThenCoverStrokePathInstancedNV (GLsizei numPaths, GLenum pathNameType, const void *paths, GLuint pathBase, GLint reference, GLuint mask, GLenum coverMode, GLenum transformType, const GLfloat *transformValues); GLAPI GLenum APIENTRY glPathGlyphIndexRangeNV (GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint pathParameterTemplate, GLfloat emScale, GLuint *baseAndCount); GLAPI GLenum APIENTRY glPathGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, const void *fontName, GLbitfield fontStyle, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI GLenum APIENTRY glPathMemoryGlyphIndexArrayNV (GLuint firstPathName, GLenum fontTarget, GLsizeiptr fontSize, const void *fontData, GLsizei faceIndex, GLuint firstGlyphIndex, GLsizei numGlyphs, GLuint pathParameterTemplate, GLfloat emScale); GLAPI void APIENTRY glProgramPathFragmentInputGenNV (GLuint program, GLint location, GLenum genMode, GLint components, const GLfloat *coeffs); GLAPI void APIENTRY glGetProgramResourcefvNV (GLuint program, GLenum programInterface, GLuint index, GLsizei propCount, const GLenum *props, GLsizei count, GLsizei *length, GLfloat *params); #endif #endif /* GL_NV_path_rendering */ #ifndef GL_NV_path_rendering_shared_edge #define GL_NV_path_rendering_shared_edge 1 #define GL_SHARED_EDGE_NV 0xC0 #endif /* GL_NV_path_rendering_shared_edge */ #ifndef GL_NV_primitive_shading_rate #define GL_NV_primitive_shading_rate 1 #define GL_SHADING_RATE_IMAGE_PER_PRIMITIVE_NV 0x95B1 #define GL_SHADING_RATE_IMAGE_PALETTE_COUNT_NV 0x95B2 #endif /* GL_NV_primitive_shading_rate */ #ifndef GL_NV_representative_fragment_test #define GL_NV_representative_fragment_test 1 #define GL_REPRESENTATIVE_FRAGMENT_TEST_NV 0x937F #endif /* GL_NV_representative_fragment_test */ #ifndef GL_NV_sample_locations #define GL_NV_sample_locations 1 #define GL_SAMPLE_LOCATION_SUBPIXEL_BITS_NV 0x933D #define GL_SAMPLE_LOCATION_PIXEL_GRID_WIDTH_NV 0x933E #define GL_SAMPLE_LOCATION_PIXEL_GRID_HEIGHT_NV 0x933F #define GL_PROGRAMMABLE_SAMPLE_LOCATION_TABLE_SIZE_NV 0x9340 #define GL_SAMPLE_LOCATION_NV 0x8E50 #define GL_PROGRAMMABLE_SAMPLE_LOCATION_NV 0x9341 #define GL_FRAMEBUFFER_PROGRAMMABLE_SAMPLE_LOCATIONS_NV 0x9342 #define GL_FRAMEBUFFER_SAMPLE_LOCATION_PIXEL_GRID_NV 0x9343 typedef void (APIENTRYP PFNGLFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLenum target, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLNAMEDFRAMEBUFFERSAMPLELOCATIONSFVNVPROC) (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); typedef void (APIENTRYP PFNGLRESOLVEDEPTHVALUESNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferSampleLocationsfvNV (GLenum target, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glNamedFramebufferSampleLocationsfvNV (GLuint framebuffer, GLuint start, GLsizei count, const GLfloat *v); GLAPI void APIENTRY glResolveDepthValuesNV (void); #endif #endif /* GL_NV_sample_locations */ #ifndef GL_NV_sample_mask_override_coverage #define GL_NV_sample_mask_override_coverage 1 #endif /* GL_NV_sample_mask_override_coverage */ #ifndef GL_NV_scissor_exclusive #define GL_NV_scissor_exclusive 1 #define GL_SCISSOR_TEST_EXCLUSIVE_NV 0x9555 #define GL_SCISSOR_BOX_EXCLUSIVE_NV 0x9556 typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVENVPROC) (GLint x, GLint y, GLsizei width, GLsizei height); typedef void (APIENTRYP PFNGLSCISSOREXCLUSIVEARRAYVNVPROC) (GLuint first, GLsizei count, const GLint *v); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glScissorExclusiveNV (GLint x, GLint y, GLsizei width, GLsizei height); GLAPI void APIENTRY glScissorExclusiveArrayvNV (GLuint first, GLsizei count, const GLint *v); #endif #endif /* GL_NV_scissor_exclusive */ #ifndef GL_NV_shader_atomic_counters #define GL_NV_shader_atomic_counters 1 #endif /* GL_NV_shader_atomic_counters */ #ifndef GL_NV_shader_atomic_float #define GL_NV_shader_atomic_float 1 #endif /* GL_NV_shader_atomic_float */ #ifndef GL_NV_shader_atomic_float64 #define GL_NV_shader_atomic_float64 1 #endif /* GL_NV_shader_atomic_float64 */ #ifndef GL_NV_shader_atomic_fp16_vector #define GL_NV_shader_atomic_fp16_vector 1 #endif /* GL_NV_shader_atomic_fp16_vector */ #ifndef GL_NV_shader_atomic_int64 #define GL_NV_shader_atomic_int64 1 #endif /* GL_NV_shader_atomic_int64 */ #ifndef GL_NV_shader_buffer_load #define GL_NV_shader_buffer_load 1 #define GL_BUFFER_GPU_ADDRESS_NV 0x8F1D #define GL_GPU_ADDRESS_NV 0x8F34 #define GL_MAX_SHADER_BUFFER_ADDRESS_NV 0x8F35 typedef void (APIENTRYP PFNGLMAKEBUFFERRESIDENTNVPROC) (GLenum target, GLenum access); typedef void (APIENTRYP PFNGLMAKEBUFFERNONRESIDENTNVPROC) (GLenum target); typedef GLboolean (APIENTRYP PFNGLISBUFFERRESIDENTNVPROC) (GLenum target); typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERRESIDENTNVPROC) (GLuint buffer, GLenum access); typedef void (APIENTRYP PFNGLMAKENAMEDBUFFERNONRESIDENTNVPROC) (GLuint buffer); typedef GLboolean (APIENTRYP PFNGLISNAMEDBUFFERRESIDENTNVPROC) (GLuint buffer); typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERUI64VNVPROC) (GLenum target, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLGETNAMEDBUFFERPARAMETERUI64VNVPROC) (GLuint buffer, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLGETINTEGERUI64VNVPROC) (GLenum value, GLuint64EXT *result); typedef void (APIENTRYP PFNGLUNIFORMUI64NVPROC) (GLint location, GLuint64EXT value); typedef void (APIENTRYP PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei count, const GLuint64EXT *value); typedef void (APIENTRYP PFNGLGETUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLuint64EXT *params); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64NVPROC) (GLuint program, GLint location, GLuint64EXT value); typedef void (APIENTRYP PFNGLPROGRAMUNIFORMUI64VNVPROC) (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glMakeBufferResidentNV (GLenum target, GLenum access); GLAPI void APIENTRY glMakeBufferNonResidentNV (GLenum target); GLAPI GLboolean APIENTRY glIsBufferResidentNV (GLenum target); GLAPI void APIENTRY glMakeNamedBufferResidentNV (GLuint buffer, GLenum access); GLAPI void APIENTRY glMakeNamedBufferNonResidentNV (GLuint buffer); GLAPI GLboolean APIENTRY glIsNamedBufferResidentNV (GLuint buffer); GLAPI void APIENTRY glGetBufferParameterui64vNV (GLenum target, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glGetNamedBufferParameterui64vNV (GLuint buffer, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glGetIntegerui64vNV (GLenum value, GLuint64EXT *result); GLAPI void APIENTRY glUniformui64NV (GLint location, GLuint64EXT value); GLAPI void APIENTRY glUniformui64vNV (GLint location, GLsizei count, const GLuint64EXT *value); GLAPI void APIENTRY glGetUniformui64vNV (GLuint program, GLint location, GLuint64EXT *params); GLAPI void APIENTRY glProgramUniformui64NV (GLuint program, GLint location, GLuint64EXT value); GLAPI void APIENTRY glProgramUniformui64vNV (GLuint program, GLint location, GLsizei count, const GLuint64EXT *value); #endif #endif /* GL_NV_shader_buffer_load */ #ifndef GL_NV_shader_buffer_store #define GL_NV_shader_buffer_store 1 #define GL_SHADER_GLOBAL_ACCESS_BARRIER_BIT_NV 0x00000010 #endif /* GL_NV_shader_buffer_store */ #ifndef GL_NV_shader_subgroup_partitioned #define GL_NV_shader_subgroup_partitioned 1 #define GL_SUBGROUP_FEATURE_PARTITIONED_BIT_NV 0x00000100 #endif /* GL_NV_shader_subgroup_partitioned */ #ifndef GL_NV_shader_texture_footprint #define GL_NV_shader_texture_footprint 1 #endif /* GL_NV_shader_texture_footprint */ #ifndef GL_NV_shader_thread_group #define GL_NV_shader_thread_group 1 #define GL_WARP_SIZE_NV 0x9339 #define GL_WARPS_PER_SM_NV 0x933A #define GL_SM_COUNT_NV 0x933B #endif /* GL_NV_shader_thread_group */ #ifndef GL_NV_shader_thread_shuffle #define GL_NV_shader_thread_shuffle 1 #endif /* GL_NV_shader_thread_shuffle */ #ifndef GL_NV_shading_rate_image #define GL_NV_shading_rate_image 1 #define GL_SHADING_RATE_IMAGE_NV 0x9563 #define GL_SHADING_RATE_NO_INVOCATIONS_NV 0x9564 #define GL_SHADING_RATE_1_INVOCATION_PER_PIXEL_NV 0x9565 #define GL_SHADING_RATE_1_INVOCATION_PER_1X2_PIXELS_NV 0x9566 #define GL_SHADING_RATE_1_INVOCATION_PER_2X1_PIXELS_NV 0x9567 #define GL_SHADING_RATE_1_INVOCATION_PER_2X2_PIXELS_NV 0x9568 #define GL_SHADING_RATE_1_INVOCATION_PER_2X4_PIXELS_NV 0x9569 #define GL_SHADING_RATE_1_INVOCATION_PER_4X2_PIXELS_NV 0x956A #define GL_SHADING_RATE_1_INVOCATION_PER_4X4_PIXELS_NV 0x956B #define GL_SHADING_RATE_2_INVOCATIONS_PER_PIXEL_NV 0x956C #define GL_SHADING_RATE_4_INVOCATIONS_PER_PIXEL_NV 0x956D #define GL_SHADING_RATE_8_INVOCATIONS_PER_PIXEL_NV 0x956E #define GL_SHADING_RATE_16_INVOCATIONS_PER_PIXEL_NV 0x956F #define GL_SHADING_RATE_IMAGE_BINDING_NV 0x955B #define GL_SHADING_RATE_IMAGE_TEXEL_WIDTH_NV 0x955C #define GL_SHADING_RATE_IMAGE_TEXEL_HEIGHT_NV 0x955D #define GL_SHADING_RATE_IMAGE_PALETTE_SIZE_NV 0x955E #define GL_MAX_COARSE_FRAGMENT_SAMPLES_NV 0x955F #define GL_SHADING_RATE_SAMPLE_ORDER_DEFAULT_NV 0x95AE #define GL_SHADING_RATE_SAMPLE_ORDER_PIXEL_MAJOR_NV 0x95AF #define GL_SHADING_RATE_SAMPLE_ORDER_SAMPLE_MAJOR_NV 0x95B0 typedef void (APIENTRYP PFNGLBINDSHADINGRATEIMAGENVPROC) (GLuint texture); typedef void (APIENTRYP PFNGLGETSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint entry, GLenum *rate); typedef void (APIENTRYP PFNGLGETSHADINGRATESAMPLELOCATIONIVNVPROC) (GLenum rate, GLuint samples, GLuint index, GLint *location); typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEBARRIERNVPROC) (GLboolean synchronize); typedef void (APIENTRYP PFNGLSHADINGRATEIMAGEPALETTENVPROC) (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERNVPROC) (GLenum order); typedef void (APIENTRYP PFNGLSHADINGRATESAMPLEORDERCUSTOMNVPROC) (GLenum rate, GLuint samples, const GLint *locations); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBindShadingRateImageNV (GLuint texture); GLAPI void APIENTRY glGetShadingRateImagePaletteNV (GLuint viewport, GLuint entry, GLenum *rate); GLAPI void APIENTRY glGetShadingRateSampleLocationivNV (GLenum rate, GLuint samples, GLuint index, GLint *location); GLAPI void APIENTRY glShadingRateImageBarrierNV (GLboolean synchronize); GLAPI void APIENTRY glShadingRateImagePaletteNV (GLuint viewport, GLuint first, GLsizei count, const GLenum *rates); GLAPI void APIENTRY glShadingRateSampleOrderNV (GLenum order); GLAPI void APIENTRY glShadingRateSampleOrderCustomNV (GLenum rate, GLuint samples, const GLint *locations); #endif #endif /* GL_NV_shading_rate_image */ #ifndef GL_NV_stereo_view_rendering #define GL_NV_stereo_view_rendering 1 #endif /* GL_NV_stereo_view_rendering */ #ifndef GL_NV_texture_barrier #define GL_NV_texture_barrier 1 typedef void (APIENTRYP PFNGLTEXTUREBARRIERNVPROC) (void); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glTextureBarrierNV (void); #endif #endif /* GL_NV_texture_barrier */ #ifndef GL_NV_texture_rectangle_compressed #define GL_NV_texture_rectangle_compressed 1 #endif /* GL_NV_texture_rectangle_compressed */ #ifndef GL_NV_uniform_buffer_unified_memory #define GL_NV_uniform_buffer_unified_memory 1 #define GL_UNIFORM_BUFFER_UNIFIED_NV 0x936E #define GL_UNIFORM_BUFFER_ADDRESS_NV 0x936F #define GL_UNIFORM_BUFFER_LENGTH_NV 0x9370 #endif /* GL_NV_uniform_buffer_unified_memory */ #ifndef GL_NV_vertex_attrib_integer_64bit #define GL_NV_vertex_attrib_integer_64bit 1 typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64NVPROC) (GLuint index, GLint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64NVPROC) (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4I64VNVPROC) (GLuint index, const GLint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64NVPROC) (GLuint index, GLuint64EXT x); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64NVPROC) (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); typedef void (APIENTRYP PFNGLVERTEXATTRIBL1UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL2UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL3UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLVERTEXATTRIBL4UI64VNVPROC) (GLuint index, const GLuint64EXT *v); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLI64VNVPROC) (GLuint index, GLenum pname, GLint64EXT *params); typedef void (APIENTRYP PFNGLGETVERTEXATTRIBLUI64VNVPROC) (GLuint index, GLenum pname, GLuint64EXT *params); typedef void (APIENTRYP PFNGLVERTEXATTRIBLFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glVertexAttribL1i64NV (GLuint index, GLint64EXT x); GLAPI void APIENTRY glVertexAttribL2i64NV (GLuint index, GLint64EXT x, GLint64EXT y); GLAPI void APIENTRY glVertexAttribL3i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z); GLAPI void APIENTRY glVertexAttribL4i64NV (GLuint index, GLint64EXT x, GLint64EXT y, GLint64EXT z, GLint64EXT w); GLAPI void APIENTRY glVertexAttribL1i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL2i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL3i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL4i64vNV (GLuint index, const GLint64EXT *v); GLAPI void APIENTRY glVertexAttribL1ui64NV (GLuint index, GLuint64EXT x); GLAPI void APIENTRY glVertexAttribL2ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y); GLAPI void APIENTRY glVertexAttribL3ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z); GLAPI void APIENTRY glVertexAttribL4ui64NV (GLuint index, GLuint64EXT x, GLuint64EXT y, GLuint64EXT z, GLuint64EXT w); GLAPI void APIENTRY glVertexAttribL1ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL2ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL3ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glVertexAttribL4ui64vNV (GLuint index, const GLuint64EXT *v); GLAPI void APIENTRY glGetVertexAttribLi64vNV (GLuint index, GLenum pname, GLint64EXT *params); GLAPI void APIENTRY glGetVertexAttribLui64vNV (GLuint index, GLenum pname, GLuint64EXT *params); GLAPI void APIENTRY glVertexAttribLFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); #endif #endif /* GL_NV_vertex_attrib_integer_64bit */ #ifndef GL_NV_vertex_buffer_unified_memory #define GL_NV_vertex_buffer_unified_memory 1 #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 typedef void (APIENTRYP PFNGLBUFFERADDRESSRANGENVPROC) (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); typedef void (APIENTRYP PFNGLVERTEXFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLNORMALFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLINDEXFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLTEXCOORDFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLEDGEFLAGFORMATNVPROC) (GLsizei stride); typedef void (APIENTRYP PFNGLSECONDARYCOLORFORMATNVPROC) (GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLFOGCOORDFORMATNVPROC) (GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); typedef void (APIENTRYP PFNGLVERTEXATTRIBIFORMATNVPROC) (GLuint index, GLint size, GLenum type, GLsizei stride); typedef void (APIENTRYP PFNGLGETINTEGERUI64I_VNVPROC) (GLenum value, GLuint index, GLuint64EXT *result); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glBufferAddressRangeNV (GLenum pname, GLuint index, GLuint64EXT address, GLsizeiptr length); GLAPI void APIENTRY glVertexFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glNormalFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glColorFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glIndexFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glTexCoordFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glEdgeFlagFormatNV (GLsizei stride); GLAPI void APIENTRY glSecondaryColorFormatNV (GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glFogCoordFormatNV (GLenum type, GLsizei stride); GLAPI void APIENTRY glVertexAttribFormatNV (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride); GLAPI void APIENTRY glVertexAttribIFormatNV (GLuint index, GLint size, GLenum type, GLsizei stride); GLAPI void APIENTRY glGetIntegerui64i_vNV (GLenum value, GLuint index, GLuint64EXT *result); #endif #endif /* GL_NV_vertex_buffer_unified_memory */ #ifndef GL_NV_viewport_array2 #define GL_NV_viewport_array2 1 #endif /* GL_NV_viewport_array2 */ #ifndef GL_NV_viewport_swizzle #define GL_NV_viewport_swizzle 1 #define GL_VIEWPORT_SWIZZLE_POSITIVE_X_NV 0x9350 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_X_NV 0x9351 #define GL_VIEWPORT_SWIZZLE_POSITIVE_Y_NV 0x9352 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_Y_NV 0x9353 #define GL_VIEWPORT_SWIZZLE_POSITIVE_Z_NV 0x9354 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_Z_NV 0x9355 #define GL_VIEWPORT_SWIZZLE_POSITIVE_W_NV 0x9356 #define GL_VIEWPORT_SWIZZLE_NEGATIVE_W_NV 0x9357 #define GL_VIEWPORT_SWIZZLE_X_NV 0x9358 #define GL_VIEWPORT_SWIZZLE_Y_NV 0x9359 #define GL_VIEWPORT_SWIZZLE_Z_NV 0x935A #define GL_VIEWPORT_SWIZZLE_W_NV 0x935B typedef void (APIENTRYP PFNGLVIEWPORTSWIZZLENVPROC) (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glViewportSwizzleNV (GLuint index, GLenum swizzlex, GLenum swizzley, GLenum swizzlez, GLenum swizzlew); #endif #endif /* GL_NV_viewport_swizzle */ #ifndef GL_OVR_multiview #define GL_OVR_multiview 1 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_NUM_VIEWS_OVR 0x9630 #define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_BASE_VIEW_INDEX_OVR 0x9632 #define GL_MAX_VIEWS_OVR 0x9631 #define GL_FRAMEBUFFER_INCOMPLETE_VIEW_TARGETS_OVR 0x9633 typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREMULTIVIEWOVRPROC) (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #ifdef GL_GLEXT_PROTOTYPES GLAPI void APIENTRY glFramebufferTextureMultiviewOVR (GLenum target, GLenum attachment, GLuint texture, GLint level, GLint baseViewIndex, GLsizei numViews); #endif #endif /* GL_OVR_multiview */ #ifndef GL_OVR_multiview2 #define GL_OVR_multiview2 1 #endif /* GL_OVR_multiview2 */ #ifdef __cplusplus } #endif #endif moderngl-moderngl-773b733/src/khrplatform.h000066400000000000000000000255731470420062000207070ustar00rootroot00000000000000#ifndef __khrplatform_h_ #define __khrplatform_h_ /* ** Copyright (c) 2008-2018 The Khronos Group Inc. ** ** Permission is hereby granted, free of charge, to any person obtaining a ** copy of this software and/or associated documentation files (the ** "Materials"), to deal in the Materials without restriction, including ** without limitation the rights to use, copy, modify, merge, publish, ** distribute, sublicense, and/or sell copies of the Materials, and to ** permit persons to whom the Materials are furnished to do so, subject to ** the following conditions: ** ** The above copyright notice and this permission notice shall be included ** in all copies or substantial portions of the Materials. ** ** THE MATERIALS ARE 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 AND NONINFRINGEMENT. ** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY ** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, ** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE ** MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS. */ /* Khronos platform-specific types and definitions. * * The master copy of khrplatform.h is maintained in the Khronos EGL * Registry repository at https://github.com/KhronosGroup/EGL-Registry * The last semantic modification to khrplatform.h was at commit ID: * 67a3e0864c2d75ea5287b9f3d2eb74a745936692 * * Adopters may modify this file to suit their platform. Adopters are * encouraged to submit platform specific modifications to the Khronos * group so that they can be included in future versions of this file. * Please submit changes by filing pull requests or issues on * the EGL Registry repository linked above. * * * See the Implementer's Guidelines for information about where this file * should be located on your system and for more details of its use: * http://www.khronos.org/registry/implementers_guide.pdf * * This file should be included as * #include * by Khronos client API header files that use its types and defines. * * The types in khrplatform.h should only be used to define API-specific types. * * Types defined in khrplatform.h: * khronos_int8_t signed 8 bit * khronos_uint8_t unsigned 8 bit * khronos_int16_t signed 16 bit * khronos_uint16_t unsigned 16 bit * khronos_int32_t signed 32 bit * khronos_uint32_t unsigned 32 bit * khronos_int64_t signed 64 bit * khronos_uint64_t unsigned 64 bit * khronos_intptr_t signed same number of bits as a pointer * khronos_uintptr_t unsigned same number of bits as a pointer * khronos_ssize_t signed size * khronos_usize_t unsigned size * khronos_float_t signed 32 bit floating point * khronos_time_ns_t unsigned 64 bit time in nanoseconds * khronos_utime_nanoseconds_t unsigned time interval or absolute time in * nanoseconds * khronos_stime_nanoseconds_t signed time interval in nanoseconds * khronos_boolean_enum_t enumerated boolean type. This should * only be used as a base type when a client API's boolean type is * an enum. Client APIs which use an integer or other type for * booleans cannot use this as the base type for their boolean. * * Tokens defined in khrplatform.h: * * KHRONOS_FALSE, KHRONOS_TRUE Enumerated boolean false/true values. * * KHRONOS_SUPPORT_INT64 is 1 if 64 bit integers are supported; otherwise 0. * KHRONOS_SUPPORT_FLOAT is 1 if floats are supported; otherwise 0. * * Calling convention macros defined in this file: * KHRONOS_APICALL * KHRONOS_APIENTRY * KHRONOS_APIATTRIBUTES * * These may be used in function prototypes as: * * KHRONOS_APICALL void KHRONOS_APIENTRY funcname( * int arg1, * int arg2) KHRONOS_APIATTRIBUTES; */ #if defined(__SCITECH_SNAP__) && !defined(KHRONOS_STATIC) # define KHRONOS_STATIC 1 #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APICALL *------------------------------------------------------------------------- * This precedes the return type of the function in the function prototype. */ #if defined(KHRONOS_STATIC) /* If the preprocessor constant KHRONOS_STATIC is defined, make the * header compatible with static linking. */ # define KHRONOS_APICALL #elif defined(_WIN32) # define KHRONOS_APICALL __declspec(dllimport) #elif defined (__SYMBIAN32__) # define KHRONOS_APICALL IMPORT_C #elif defined(__ANDROID__) # define KHRONOS_APICALL __attribute__((visibility("default"))) #else # define KHRONOS_APICALL #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIENTRY *------------------------------------------------------------------------- * This follows the return type of the function and precedes the function * name in the function prototype. */ #if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) /* Win32 but not WinCE */ # define KHRONOS_APIENTRY __stdcall #else # define KHRONOS_APIENTRY #endif /*------------------------------------------------------------------------- * Definition of KHRONOS_APIATTRIBUTES *------------------------------------------------------------------------- * This follows the closing parenthesis of the function prototype arguments. */ #if defined (__ARMCC_2__) #define KHRONOS_APIATTRIBUTES __softfp #else #define KHRONOS_APIATTRIBUTES #endif /*------------------------------------------------------------------------- * basic type definitions *-----------------------------------------------------------------------*/ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) || defined(__GNUC__) || defined(__SCO__) || defined(__USLC__) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 /* * To support platform where unsigned long cannot be used interchangeably with * inptr_t (e.g. CHERI-extended ISAs), we can use the stdint.h intptr_t. * Ideally, we could just use (u)intptr_t everywhere, but this could result in * ABI breakage if khronos_uintptr_t is changed from unsigned long to * unsigned long long or similar (this results in different C++ name mangling). * To avoid changes for existing platforms, we restrict usage of intptr_t to * platforms where the size of a pointer is larger than the size of long. */ #if defined(__SIZEOF_LONG__) && defined(__SIZEOF_POINTER__) #if __SIZEOF_POINTER__ > __SIZEOF_LONG__ #define KHRONOS_USE_INTPTR_T #endif #endif #elif defined(__VMS ) || defined(__sgi) /* * Using */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(_WIN32) && !defined(__SCITECH_SNAP__) /* * Win32 */ typedef __int32 khronos_int32_t; typedef unsigned __int32 khronos_uint32_t; typedef __int64 khronos_int64_t; typedef unsigned __int64 khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif defined(__sun__) || defined(__digital__) /* * Sun or Digital */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #if defined(__arch64__) || defined(_LP64) typedef long int khronos_int64_t; typedef unsigned long int khronos_uint64_t; #else typedef long long int khronos_int64_t; typedef unsigned long long int khronos_uint64_t; #endif /* __arch64__ */ #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #elif 0 /* * Hypothetical platform with no float or int64 support */ typedef int khronos_int32_t; typedef unsigned int khronos_uint32_t; #define KHRONOS_SUPPORT_INT64 0 #define KHRONOS_SUPPORT_FLOAT 0 #else /* * Generic fallback */ #include typedef int32_t khronos_int32_t; typedef uint32_t khronos_uint32_t; typedef int64_t khronos_int64_t; typedef uint64_t khronos_uint64_t; #define KHRONOS_SUPPORT_INT64 1 #define KHRONOS_SUPPORT_FLOAT 1 #endif /* * Types that are (so far) the same on all platforms */ typedef signed char khronos_int8_t; typedef unsigned char khronos_uint8_t; typedef signed short int khronos_int16_t; typedef unsigned short int khronos_uint16_t; /* * Types that differ between LLP64 and LP64 architectures - in LLP64, * pointers are 64 bits, but 'long' is still 32 bits. Win64 appears * to be the only LLP64 architecture in current use. */ #ifdef KHRONOS_USE_INTPTR_T typedef intptr_t khronos_intptr_t; typedef uintptr_t khronos_uintptr_t; #elif defined(_WIN64) typedef signed long long int khronos_intptr_t; typedef unsigned long long int khronos_uintptr_t; #else typedef signed long int khronos_intptr_t; typedef unsigned long int khronos_uintptr_t; #endif #if defined(_WIN64) typedef signed long long int khronos_ssize_t; typedef unsigned long long int khronos_usize_t; #else typedef signed long int khronos_ssize_t; typedef unsigned long int khronos_usize_t; #endif #if KHRONOS_SUPPORT_FLOAT /* * Float type */ typedef float khronos_float_t; #endif #if KHRONOS_SUPPORT_INT64 /* Time types * * These types can be used to represent a time interval in nanoseconds or * an absolute Unadjusted System Time. Unadjusted System Time is the number * of nanoseconds since some arbitrary system event (e.g. since the last * time the system booted). The Unadjusted System Time is an unsigned * 64 bit value that wraps back to 0 every 584 years. Time intervals * may be either signed or unsigned. */ typedef khronos_uint64_t khronos_utime_nanoseconds_t; typedef khronos_int64_t khronos_stime_nanoseconds_t; #endif /* * Dummy value used to pad enum types to 32 bits. */ #ifndef KHRONOS_MAX_ENUM #define KHRONOS_MAX_ENUM 0x7FFFFFFF #endif /* * Enumerated boolean type * * Values other than zero should be considered to be true. Therefore * comparisons should not be made against KHRONOS_TRUE. */ typedef enum { KHRONOS_FALSE = 0, KHRONOS_TRUE = 1, KHRONOS_BOOLEAN_ENUM_FORCE_SIZE = KHRONOS_MAX_ENUM } khronos_boolean_enum_t; #endif /* __khrplatform_h_ */ moderngl-moderngl-773b733/src/moderngl.cpp000066400000000000000000011267701470420062000205220ustar00rootroot00000000000000#define PY_SSIZE_T_CLEAN #include #include "gl_methods.hpp" #define MGLError_Set(...) PyErr_Format(moderngl_error, __VA_ARGS__) #define MGL_MAX(a, b) (((a) > (b)) ? (a) : (b)) #define MGL_MIN(a, b) (((a) < (b)) ? (a) : (b)) static PyObject * helper; static PyObject * moderngl_error; static PyTypeObject * MGLBuffer_type; static PyTypeObject * MGLContext_type; static PyTypeObject * MGLFramebuffer_type; static PyTypeObject * MGLProgram_type; static PyTypeObject * MGLQuery_type; static PyTypeObject * MGLRenderbuffer_type; static PyTypeObject * MGLScope_type; static PyTypeObject * MGLTexture_type; static PyTypeObject * MGLTextureArray_type; static PyTypeObject * MGLTextureCube_type; static PyTypeObject * MGLTexture3D_type; static PyTypeObject * MGLVertexArray_type; static PyTypeObject * MGLSampler_type; enum MGLEnableFlag { MGL_NOTHING = 0, MGL_BLEND = 1, MGL_DEPTH_TEST = 2, MGL_CULL_FACE = 4, MGL_RASTERIZER_DISCARD = 8, MGL_PROGRAM_POINT_SIZE = 16, MGL_INVALID = 0x40000000, }; enum SHADER_SLOT_ENUM { VERTEX_SHADER_SLOT, FRAGMENT_SHADER_SLOT, GEOMETRY_SHADER_SLOT, TESS_EVALUATION_SHADER_SLOT, TESS_CONTROL_SHADER_SLOT, COMPUTE_SHADER_SLOT, NUM_SHADER_SLOTS, }; static const int SHADER_TYPE[] = { GL_VERTEX_SHADER, GL_FRAGMENT_SHADER, GL_GEOMETRY_SHADER, GL_TESS_CONTROL_SHADER, GL_TESS_EVALUATION_SHADER, GL_COMPUTE_SHADER, }; struct MGLBuffer; struct MGLContext; struct MGLFramebuffer; struct MGLProgram; struct MGLRenderbuffer; struct MGLTexture; struct MGLTexture3D; struct MGLTextureArray; struct MGLTextureCube; struct MGLVertexArray; struct MGLSampler; struct MGLDataType { int * base_format; int * internal_format; int gl_type; int size; bool float_type; }; struct MGLBuffer { PyObject_HEAD MGLContext * context; int buffer_obj; Py_ssize_t size; bool dynamic; bool released; bool external; }; struct MGLContext { PyObject_HEAD PyObject * ctx; PyObject * extensions; MGLFramebuffer * default_framebuffer; MGLFramebuffer * bound_framebuffer; PyObject * includes; int version_code; int max_samples; int max_integer_samples; int max_color_attachments; int max_texture_units; int max_label_length; int max_debug_message_length; int max_debug_group_stack_depth; int default_texture_unit; float max_anisotropy; int enable_flags; int front_face; int cull_face; int depth_func; bool depth_clamp; double depth_range[2]; int blend_func_src; int blend_func_dst; bool wireframe; bool multisample; int provoking_vertex; float polygon_offset_factor; float polygon_offset_units; GLMethods gl; bool released; }; struct Rect { int x, y, width, height; }; static Rect rect(int x, int y, int width, int height) { Rect rect; rect.x = x; rect.y = y; rect.width = width; rect.height = height; return rect; } static int parse_rect(PyObject * arg, Rect * rect) { arg = PySequence_Tuple(arg); if (!arg) { PyErr_Clear(); return 0; } int size = (int)PyTuple_Size(arg); if (size == 4) { rect->x = PyLong_AsLong(PyTuple_GetItem(arg, 0)); rect->y = PyLong_AsLong(PyTuple_GetItem(arg, 1)); rect->width = PyLong_AsLong(PyTuple_GetItem(arg, 2)); rect->height = PyLong_AsLong(PyTuple_GetItem(arg, 3)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } } else if (size == 2) { rect->width = PyLong_AsLong(PyTuple_GetItem(arg, 0)); rect->height = PyLong_AsLong(PyTuple_GetItem(arg, 1)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } } else { return 0; } Py_DECREF(arg); return 1; } struct Cube { int x, y, z, width, height, depth; }; static Cube cube(int x, int y, int z, int width, int height, int depth) { Cube cube; cube.x = x; cube.y = y; cube.z = z; cube.width = width; cube.height = height; cube.depth = depth; return cube; } static int parse_cube(PyObject * arg, Cube * cube) { arg = PySequence_Tuple(arg); if (!arg) { PyErr_Clear(); return 0; } int size = (int)PyTuple_Size(arg); if (size == 6) { cube->x = PyLong_AsLong(PyTuple_GetItem(arg, 0)); cube->y = PyLong_AsLong(PyTuple_GetItem(arg, 1)); cube->z = PyLong_AsLong(PyTuple_GetItem(arg, 2)); cube->width = PyLong_AsLong(PyTuple_GetItem(arg, 3)); cube->height = PyLong_AsLong(PyTuple_GetItem(arg, 4)); cube->depth = PyLong_AsLong(PyTuple_GetItem(arg, 5)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } } else if (size == 3) { cube->width = PyLong_AsLong(PyTuple_GetItem(arg, 0)); cube->height = PyLong_AsLong(PyTuple_GetItem(arg, 1)); cube->depth = PyLong_AsLong(PyTuple_GetItem(arg, 2)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } } else { return 0; } Py_DECREF(arg); return 1; } struct MGLFramebuffer { PyObject_HEAD MGLContext * context; char color_mask[64]; unsigned draw_buffers[64]; int draw_buffers_len; int framebuffer_obj; Rect viewport; Rect scissor; bool scissor_enabled; // Flags this as a detected framebuffer we don't control the size of bool dynamic; int width; int height; int samples; bool depth_mask; bool released; }; struct MGLProgram { PyObject_HEAD MGLContext * context; int geometry_input; int geometry_output; int program_obj; int geometry_vertices; int num_varyings; bool compute; bool released; }; enum MGLQueryKeys { SAMPLES_PASSED, ANY_SAMPLES_PASSED, TIME_ELAPSED, PRIMITIVES_GENERATED, }; enum MGLQueryState { QUERY_INACTIVE, QUERY_ACTIVE, QUERY_CONDITIONAL_RENDER, }; struct MGLQuery { PyObject_HEAD MGLContext * context; int query_obj[4]; MGLQueryState state; bool ended; bool released; }; struct MGLRenderbuffer { PyObject_HEAD MGLContext * context; MGLDataType * data_type; int renderbuffer_obj; int width; int height; int components; int samples; bool depth; bool released; }; struct TextureBinding { int location; int type; int glo; }; struct SamplerBinding { int location; // MGLSampler * sampler; PyObject * sampler; }; struct BufferBinding { int location; int glo; }; struct MGLScope { PyObject_HEAD MGLContext * context; MGLFramebuffer * framebuffer; MGLFramebuffer * old_framebuffer; TextureBinding * textures; BufferBinding * uniform_buffers; BufferBinding * storage_buffers; SamplerBinding * samplers; int num_textures; int num_uniform_buffers; int num_storage_buffers; int num_samplers; int enable_flags; int old_enable_flags; bool released; }; struct MGLTexture { PyObject_HEAD MGLContext * context; MGLDataType * data_type; int texture_obj; int width; int height; int components; int samples; int min_filter; int mag_filter; int max_level; int compare_func; float anisotropy; bool depth; bool repeat_x; bool repeat_y; bool external; bool released; }; struct MGLTexture3D { PyObject_HEAD MGLContext * context; MGLDataType * data_type; int texture_obj; int width; int height; int depth; int components; int min_filter; int mag_filter; int max_level; bool repeat_x; bool repeat_y; bool repeat_z; bool released; }; struct MGLTextureArray { PyObject_HEAD MGLContext * context; MGLDataType * data_type; int texture_obj; int width; int height; int layers; int components; int min_filter; int mag_filter; int max_level; bool repeat_x; bool repeat_y; float anisotropy; bool released; }; struct MGLTextureCube { PyObject_HEAD MGLContext * context; MGLDataType * data_type; int texture_obj; int width; int height; int depth; int components; int min_filter; int mag_filter; int max_level; int compare_func; float anisotropy; bool released; }; struct MGLVertexArray { PyObject_HEAD MGLContext * context; MGLProgram * program; MGLBuffer * index_buffer; int index_element_size; int index_element_type; int vertex_array_obj; int num_vertices; int num_instances; bool released; }; struct MGLSampler { PyObject_HEAD MGLContext * context; int sampler_obj; int min_filter; int mag_filter; float anisotropy; int compare_func; bool repeat_x; bool repeat_y; bool repeat_z; float border_color[4]; float min_lod; float max_lod; bool released; }; static void clean_glsl_name(char * name, int & name_len) { if (name_len && name[name_len - 1] == ']') { name_len -= 1; while (name_len && name[name_len] != '[') { name_len -= 1; } } name[name_len] = 0; } static int swizzle_from_char(char c) { switch (c) { case 'R': return GL_RED; case 'r': return GL_RED; case 'G': return GL_GREEN; case 'g': return GL_GREEN; case 'B': return GL_BLUE; case 'b': return GL_BLUE; case 'A': return GL_ALPHA; case 'a': return GL_ALPHA; case '0': return GL_ZERO; case '1': return GL_ONE; } return -1; } static char char_from_swizzle(int c) { switch (c) { case GL_RED: return 'R'; case GL_GREEN: return 'G'; case GL_BLUE: return 'B'; case GL_ALPHA: return 'A'; case GL_ZERO: return '0'; case GL_ONE: return '1'; } return '?'; } static int compare_func_from_string(const char * str) { if (!strcmp(str, "<=")) return GL_LEQUAL; if (!strcmp(str, "<")) return GL_LESS; if (!strcmp(str, ">=")) return GL_GEQUAL; if (!strcmp(str, ">")) return GL_GREATER; if (!strcmp(str, "==")) return GL_EQUAL; if (!strcmp(str, "!=")) return GL_NOTEQUAL; if (!strcmp(str, "0")) return GL_NEVER; if (!strcmp(str, "1")) return GL_ALWAYS; return 0; } static PyObject * compare_func_to_string(int func) { switch (func) { case GL_LEQUAL: return PyUnicode_FromString("<="); case GL_LESS: return PyUnicode_FromString("<"); case GL_GEQUAL: return PyUnicode_FromString(">="); case GL_GREATER: return PyUnicode_FromString(">"); case GL_EQUAL: return PyUnicode_FromString("=="); case GL_NOTEQUAL: return PyUnicode_FromString("!="); case GL_NEVER: return PyUnicode_FromString("0"); case GL_ALWAYS: return PyUnicode_FromString("1"); } return PyUnicode_FromString("?"); } struct FormatNode { int size; int count; int type; bool normalize; }; struct FormatInfo { int size; int nodes; int divisor; bool valid; static FormatInfo invalid() { FormatInfo invalid; invalid.size = 0; invalid.nodes = 0; invalid.divisor = 0; invalid.valid = false; return invalid; } }; struct FormatIterator { const char * ptr; FormatNode node; FormatIterator(const char * str); FormatInfo info(); FormatNode * next(); }; static FormatNode * InvalidFormat = (FormatNode *)(-1); FormatIterator::FormatIterator(const char * str) : ptr(str) { } FormatInfo FormatIterator::info() { FormatInfo info; info.size = 0; info.nodes = 0; info.divisor = 0; info.valid = true; FormatIterator it = FormatIterator(ptr); while (FormatNode * node = it.next()) { if (node == InvalidFormat) { return FormatInfo::invalid(); } info.size += node->size; if (node->type) { ++info.nodes; } } char post_chr = *it.ptr++; if (post_chr == '/') { char per_type = *it.ptr++; switch (per_type) { case 'i': info.divisor = 1; break; case 'r': info.divisor = 0x7fffffff; break; case 'v': break; default: return FormatInfo::invalid(); } if (*it.ptr) { return FormatInfo::invalid(); } } return info; } FormatNode * FormatIterator::next() { node.count = 0; while (true) { char chr = *ptr++; switch (chr) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': node.count = node.count * 10 + chr - '0'; break; case 'f': if (node.count == 0) { node.count = 1; } switch (*ptr++) { case '1': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 1 * node.count; node.type = GL_UNSIGNED_BYTE; node.normalize = true; break; case '2': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 2 * node.count; node.type = GL_HALF_FLOAT; node.normalize = false; break; case '4': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 4 * node.count; node.type = GL_FLOAT; node.normalize = false; break; case '8': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 8 * node.count; node.type = GL_DOUBLE; node.normalize = false; break; case 0: case '/': --ptr; case ' ': node.size = 4 * node.count; node.type = GL_FLOAT; node.normalize = false; break; default: return InvalidFormat; } return &node; case 'i': if (node.count == 0) { node.count = 1; } node.normalize = false; switch (*ptr++) { case '1': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 1 * node.count; node.type = GL_BYTE; break; case '2': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 2 * node.count; node.type = GL_SHORT; break; case '4': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 4 * node.count; node.type = GL_INT; break; case 0: case '/': --ptr; case ' ': node.size = 4 * node.count; node.type = GL_INT; break; default: return InvalidFormat; } return &node; case 'u': if (node.count == 0) { node.count = 1; } node.normalize = false; switch (*ptr++) { case '1': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 1 * node.count; node.type = GL_UNSIGNED_BYTE; break; case '2': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 2 * node.count; node.type = GL_UNSIGNED_SHORT; break; case '4': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 4 * node.count; node.type = GL_UNSIGNED_INT; break; case 0: case '/': --ptr; case ' ': node.size = 4 * node.count; node.type = GL_UNSIGNED_INT; break; default: return InvalidFormat; } return &node; case 'x': if (node.count == 0) { node.count = 1; } node.type = 0; node.normalize = false; switch (*ptr++) { case '1': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 1 * node.count; break; case '2': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 2 * node.count; break; case '4': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 4 * node.count; break; case '8': if (*ptr && *ptr != ' ' && *ptr != '/') { return InvalidFormat; } node.size = 8 * node.count; break; case 0: case '/': --ptr; case ' ': node.size = 1 * node.count; break; default: return InvalidFormat; } return &node; case ' ': break; case 0: case '/': --ptr; return node.count ? InvalidFormat : 0; default: return InvalidFormat; } } } static int float_base_format[5] = {0, GL_RED, GL_RG, GL_RGB, GL_RGBA}; static int int_base_format[5] = {0, GL_RED_INTEGER, GL_RG_INTEGER, GL_RGB_INTEGER, GL_RGBA_INTEGER}; static int f1_internal_format[5] = {0, GL_R8, GL_RG8, GL_RGB8, GL_RGBA8}; static int f2_internal_format[5] = {0, GL_R16F, GL_RG16F, GL_RGB16F, GL_RGBA16F}; static int f4_internal_format[5] = {0, GL_R32F, GL_RG32F, GL_RGB32F, GL_RGBA32F}; static int u1_internal_format[5] = {0, GL_R8UI, GL_RG8UI, GL_RGB8UI, GL_RGBA8UI}; static int u2_internal_format[5] = {0, GL_R16UI, GL_RG16UI, GL_RGB16UI, GL_RGBA16UI}; static int u4_internal_format[5] = {0, GL_R32UI, GL_RG32UI, GL_RGB32UI, GL_RGBA32UI}; static int i1_internal_format[5] = {0, GL_R8I, GL_RG8I, GL_RGB8I, GL_RGBA8I}; static int i2_internal_format[5] = {0, GL_R16I, GL_RG16I, GL_RGB16I, GL_RGBA16I}; static int i4_internal_format[5] = {0, GL_R32I, GL_RG32I, GL_RGB32I, GL_RGBA32I}; static int n1_internal_format[5] = {0, GL_R8, GL_RG8, GL_RGB8, GL_RGBA8}; static int n2_internal_format[5] = {0, GL_R16, GL_RG16, GL_RGB16, GL_RGBA16}; static MGLDataType f1 = {float_base_format, f1_internal_format, GL_UNSIGNED_BYTE, 1, true}; static MGLDataType f2 = {float_base_format, f2_internal_format, GL_HALF_FLOAT, 2, true}; static MGLDataType f4 = {float_base_format, f4_internal_format, GL_FLOAT, 4, true}; static MGLDataType u1 = {int_base_format, u1_internal_format, GL_UNSIGNED_BYTE, 1, false}; static MGLDataType u2 = {int_base_format, u2_internal_format, GL_UNSIGNED_SHORT, 2, false}; static MGLDataType u4 = {int_base_format, u4_internal_format, GL_UNSIGNED_INT, 4, false}; static MGLDataType i1 = {int_base_format, i1_internal_format, GL_BYTE, 1, false}; static MGLDataType i2 = {int_base_format, i2_internal_format, GL_SHORT, 2, false}; static MGLDataType i4 = {int_base_format, i4_internal_format, GL_INT, 4, false}; static MGLDataType nu1 = {float_base_format, n1_internal_format, GL_UNSIGNED_BYTE, 1, false}; static MGLDataType nu2 = {float_base_format, n2_internal_format, GL_UNSIGNED_SHORT, 2, false}; static MGLDataType ni1 = {float_base_format, n1_internal_format, GL_BYTE, 1, false}; static MGLDataType ni2 = {float_base_format, n2_internal_format, GL_SHORT, 2, false}; static MGLDataType * from_dtype(const char * dtype) { if (!strcmp(dtype, "f1")) return &f1; if (!strcmp(dtype, "f2")) return &f2; if (!strcmp(dtype, "f4")) return &f4; if (!strcmp(dtype, "u1")) return &u1; if (!strcmp(dtype, "u2")) return &u2; if (!strcmp(dtype, "u4")) return &u4; if (!strcmp(dtype, "i1")) return &i1; if (!strcmp(dtype, "i2")) return &i2; if (!strcmp(dtype, "i4")) return &i4; if (!strcmp(dtype, "ni1")) return &ni1; if (!strcmp(dtype, "ni2")) return &ni2; if (!strcmp(dtype, "nu1")) return &nu1; if (!strcmp(dtype, "nu2")) return &nu2; return NULL; } static PyObject * MGLContext_buffer(MGLContext * self, PyObject * args) { PyObject * data; int reserve; int dynamic; int args_ok = PyArg_ParseTuple( args, "OIp", &data, &reserve, &dynamic ); if (!args_ok) { return 0; } if (data == Py_None && !reserve) { MGLError_Set("missing data or reserve"); return 0; } if (data != Py_None && reserve) { MGLError_Set("data and reserve are mutually exclusive"); return 0; } Py_buffer buffer_view; if (data != Py_None) { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } } else { buffer_view.len = reserve; buffer_view.buf = 0; } if (!buffer_view.len) { if (data != Py_None) { PyBuffer_Release(&buffer_view); } MGLError_Set("the buffer cannot be empty"); return 0; } MGLBuffer * buffer = PyObject_New(MGLBuffer, MGLBuffer_type); buffer->released = false; buffer->external = false; buffer->size = (int)buffer_view.len; buffer->dynamic = dynamic ? true : false; const GLMethods & gl = self->gl; buffer->buffer_obj = 0; gl.GenBuffers(1, (GLuint *)&buffer->buffer_obj); if (!buffer->buffer_obj) { MGLError_Set("cannot create buffer"); Py_DECREF(buffer); return 0; } gl.BindBuffer(GL_ARRAY_BUFFER, buffer->buffer_obj); gl.BufferData(GL_ARRAY_BUFFER, buffer->size, buffer_view.buf, dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW); Py_INCREF(self); buffer->context = self; if (data != Py_None) { PyBuffer_Release(&buffer_view); } return Py_BuildValue("(Oni)", buffer, buffer->size, buffer->buffer_obj); } static PyObject * MGLContext_external_buffer(MGLContext * self, PyObject * args) { int glo; int size; int args_ok = PyArg_ParseTuple(args, "II", &glo, &size); if (!args_ok) { return NULL; } MGLBuffer * buffer = PyObject_New(MGLBuffer, MGLBuffer_type); buffer->released = false; buffer->external = false; buffer->size = size; buffer->dynamic = false; buffer->buffer_obj = glo; Py_INCREF(self); buffer->context = self; return Py_BuildValue("(Oni)", buffer, buffer->size, buffer->buffer_obj); } static PyObject * MGLBuffer_write(MGLBuffer * self, PyObject * args) { PyObject * data; Py_ssize_t offset; int args_ok = PyArg_ParseTuple( args, "On", &data, &offset ); if (!args_ok) { return 0; } Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (offset < 0 || buffer_view.len + offset > self->size) { MGLError_Set("out of range offset = %d or size = %d", offset, buffer_view.len); PyBuffer_Release(&buffer_view); return 0; } const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); gl.BufferSubData(GL_ARRAY_BUFFER, (GLintptr)offset, buffer_view.len, buffer_view.buf); PyBuffer_Release(&buffer_view); Py_RETURN_NONE; } static PyObject * MGLBuffer_read(MGLBuffer * self, PyObject * args) { Py_ssize_t size; Py_ssize_t offset; int args_ok = PyArg_ParseTuple( args, "nn", &size, &offset ); if (!args_ok) { return 0; } if (size < 0) { size = self->size - offset; } if (offset < 0 || offset + size > self->size) { MGLError_Set("out of rangeoffset = %d or size = %d", offset, size); return 0; } const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); void * map = gl.MapBufferRange(GL_ARRAY_BUFFER, offset, size, GL_MAP_READ_BIT); if (!map) { MGLError_Set("cannot map the buffer"); return 0; } PyObject * data = PyBytes_FromStringAndSize((const char *)map, size); gl.UnmapBuffer(GL_ARRAY_BUFFER); return data; } static PyObject * MGLBuffer_read_into(MGLBuffer * self, PyObject * args) { PyObject * data; Py_ssize_t size; Py_ssize_t offset; Py_ssize_t write_offset; int args_ok = PyArg_ParseTuple( args, "Onnn", &data, &size, &offset, &write_offset ); if (!args_ok) { return 0; } if (size < 0) { size = self->size - offset; } if (offset < 0 || write_offset < 0 || offset + size > self->size) { MGLError_Set("out of range"); return 0; } Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_WRITABLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len < write_offset + size) { MGLError_Set("the buffer is too small"); PyBuffer_Release(&buffer_view); return 0; } const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); void * map = gl.MapBufferRange(GL_ARRAY_BUFFER, offset, size, GL_MAP_READ_BIT); char * ptr = (char *)buffer_view.buf + write_offset; memcpy(ptr, map, size); gl.UnmapBuffer(GL_ARRAY_BUFFER); PyBuffer_Release(&buffer_view); Py_RETURN_NONE; } static PyObject * MGLBuffer_write_chunks(MGLBuffer * self, PyObject * args) { PyObject * data; Py_ssize_t start; Py_ssize_t step; Py_ssize_t count; int args_ok = PyArg_ParseTuple( args, "Onnn", &data, &start, &step, &count ); if (!args_ok) { return 0; } Py_ssize_t abs_step = step > 0 ? step : -step; Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); Py_ssize_t chunk_size = buffer_view.len / count; if (buffer_view.len != chunk_size * count) { MGLError_Set("data (%d bytes) cannot be divided to %d equal chunks", buffer_view.len, count); PyBuffer_Release(&buffer_view); return 0; } if (start < 0) { start = self->size + start; } if (start < 0 || chunk_size > abs_step || start + chunk_size > self->size || start + count * step - step < 0 || start + count * step - step + chunk_size > self->size) { MGLError_Set("buffer overflow"); PyBuffer_Release(&buffer_view); return 0; } char * write_ptr = (char *)gl.MapBufferRange(GL_ARRAY_BUFFER, 0, self->size, GL_MAP_WRITE_BIT); char * read_ptr = (char *)buffer_view.buf; if (!write_ptr) { MGLError_Set("cannot map the buffer"); PyBuffer_Release(&buffer_view); return 0; } write_ptr += start; for (Py_ssize_t i = 0; i < count; ++i) { memcpy(write_ptr, read_ptr, chunk_size); read_ptr += chunk_size; write_ptr += step; } gl.UnmapBuffer(GL_ARRAY_BUFFER); PyBuffer_Release(&buffer_view); Py_RETURN_NONE; } static PyObject * MGLBuffer_read_chunks(MGLBuffer * self, PyObject * args) { Py_ssize_t chunk_size; Py_ssize_t start; Py_ssize_t step; Py_ssize_t count; int args_ok = PyArg_ParseTuple( args, "nnnn", &chunk_size, &start, &step, &count ); if (!args_ok) { return 0; } Py_ssize_t abs_step = step > 0 ? step : -step; if (start < 0) { start = self->size + start; } if (start < 0 || chunk_size < 0 || chunk_size > abs_step || start + chunk_size > self->size || start + count * step - step < 0 || start + count * step - step + chunk_size > self->size) { MGLError_Set("size error"); return 0; } const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); char * read_ptr = (char *)gl.MapBufferRange(GL_ARRAY_BUFFER, 0, self->size, GL_MAP_READ_BIT); if (!read_ptr) { MGLError_Set("cannot map the buffer"); return 0; } PyObject * data = PyBytes_FromStringAndSize(0, chunk_size * count); char * write_ptr = PyBytes_AS_STRING(data); read_ptr += start; for (Py_ssize_t i = 0; i < count; ++i) { memcpy(write_ptr, read_ptr, chunk_size); write_ptr += chunk_size; read_ptr += step; } gl.UnmapBuffer(GL_ARRAY_BUFFER); return data; } static PyObject * MGLBuffer_read_chunks_into(MGLBuffer * self, PyObject * args) { PyObject * data; Py_ssize_t chunk_size; Py_ssize_t start; Py_ssize_t step; Py_ssize_t count; Py_ssize_t write_offset; int args_ok = PyArg_ParseTuple( args, "Onnnnn", &data, &chunk_size, &start, &step, &count, &write_offset ); if (!args_ok) { return 0; } Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_WRITABLE); if (get_buffer < 0) { // Propagate the default error return 0; } const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); char * read_ptr = (char *)gl.MapBufferRange(GL_ARRAY_BUFFER, 0, self->size, GL_MAP_READ_BIT); char * write_ptr = (char *)buffer_view.buf + write_offset; if (!read_ptr) { MGLError_Set("cannot map the buffer"); return 0; } read_ptr += start; for (Py_ssize_t i = 0; i < count; ++i) { memcpy(write_ptr, read_ptr, chunk_size); write_ptr += chunk_size; read_ptr += step; } gl.UnmapBuffer(GL_ARRAY_BUFFER); PyBuffer_Release(&buffer_view); Py_RETURN_NONE; } static PyObject * MGLBuffer_clear(MGLBuffer * self, PyObject * args) { Py_ssize_t size; Py_ssize_t offset; PyObject * chunk; int args_ok = PyArg_ParseTuple( args, "nnO", &size, &offset, &chunk ); if (!args_ok) { return 0; } if (size < 0) { size = self->size - offset; } Py_buffer buffer_view; if (chunk != Py_None) { int get_buffer = PyObject_GetBuffer(chunk, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (size % buffer_view.len != 0) { MGLError_Set("the chunk does not fit the size"); PyBuffer_Release(&buffer_view); return 0; } } else { buffer_view.len = 0; buffer_view.buf = 0; } const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); char * map = (char *)gl.MapBufferRange(GL_ARRAY_BUFFER, offset, size, GL_MAP_WRITE_BIT); if (!map) { MGLError_Set("cannot map the buffer"); return 0; } if (buffer_view.len) { char * src = (char *)buffer_view.buf; Py_ssize_t divisor = buffer_view.len; for (Py_ssize_t i = 0; i < size; ++i) { map[i] = src[i % divisor]; } } else { memset(map + offset, 0, size); } gl.UnmapBuffer(GL_ARRAY_BUFFER); if (chunk != Py_None) { PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLBuffer_orphan(MGLBuffer * self, PyObject * args) { Py_ssize_t size; int args_ok = PyArg_ParseTuple( args, "n", &size ); if (!args_ok) { return 0; } if (size > 0) { self->size = size; } const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); gl.BufferData(GL_ARRAY_BUFFER, self->size, 0, self->dynamic ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW); Py_RETURN_NONE; } static PyObject * MGLBuffer_bind_to_uniform_block(MGLBuffer * self, PyObject * args) { int binding; Py_ssize_t offset; Py_ssize_t size; int args_ok = PyArg_ParseTuple( args, "Inn", &binding, &offset, &size ); if (!args_ok) { return 0; } if (size < 0) { size = self->size - offset; } const GLMethods & gl = self->context->gl; gl.BindBufferRange(GL_UNIFORM_BUFFER, binding, self->buffer_obj, offset, size); Py_RETURN_NONE; } static PyObject * MGLBuffer_bind_to_storage_buffer(MGLBuffer * self, PyObject * args) { int binding; Py_ssize_t offset; Py_ssize_t size; int args_ok = PyArg_ParseTuple( args, "Inn", &binding, &offset, &size ); if (!args_ok) { return 0; } if (size < 0) { size = self->size - offset; } const GLMethods & gl = self->context->gl; gl.BindBufferRange(GL_SHADER_STORAGE_BUFFER, binding, self->buffer_obj, offset, size); Py_RETURN_NONE; } static PyObject * MGLBuffer_release(MGLBuffer * self, PyObject * args) { if (self->released || self->external) { Py_RETURN_NONE; } self->released = true; const GLMethods & gl = self->context->gl; gl.DeleteBuffers(1, (GLuint *)&self->buffer_obj); Py_DECREF(self->context); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLBuffer_size(MGLBuffer * self, PyObject * args) { return PyLong_FromSsize_t(self->size); } static int MGLBuffer_tp_as_buffer_get_view(MGLBuffer * self, Py_buffer * view, int flags) { int access = (flags == PyBUF_SIMPLE) ? GL_MAP_READ_BIT : (GL_MAP_READ_BIT | GL_MAP_WRITE_BIT); const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_ARRAY_BUFFER, self->buffer_obj); void * map = gl.MapBufferRange(GL_ARRAY_BUFFER, 0, self->size, access); if (!map) { PyErr_Format(PyExc_BufferError, "Cannot map buffer"); view->obj = 0; return -1; } view->buf = map; view->len = self->size; view->itemsize = 1; view->format = 0; view->ndim = 0; view->shape = 0; view->strides = 0; view->suboffsets = 0; Py_INCREF(self); view->obj = (PyObject *)self; return 0; } static void MGLBuffer_tp_as_buffer_release_view(MGLBuffer * self, Py_buffer * view) { const GLMethods & gl = self->context->gl; gl.UnmapBuffer(GL_ARRAY_BUFFER); } struct AttachmentParameters { int valid; int width; int height; int samples; int renderbuffer; int glo; }; static int attachment_parameters(PyObject * attachment, AttachmentParameters * parameters, int must_be_depth) { int width = 0, height = 0, samples = 0, renderbuffer = 0, glo = 0, depth = 0; if (Py_TYPE(attachment) == MGLTexture_type) { MGLTexture * image = (MGLTexture *)attachment; depth = image->depth; width = image->width; height = image->height; samples = image->samples; glo = image->texture_obj; renderbuffer = 0; } if (Py_TYPE(attachment) == MGLRenderbuffer_type) { MGLRenderbuffer * image = (MGLRenderbuffer *)attachment; depth = image->depth; width = image->width; height = image->height; samples = image->samples; glo = image->renderbuffer_obj; renderbuffer = 1; } if (parameters->valid) { if (parameters->width != width || parameters->height != height || parameters->samples != samples) { return 0; } } if (!width || !height || depth != must_be_depth) { return 0; } parameters->valid = 1; parameters->width = width; parameters->height = height; parameters->samples = samples; parameters->renderbuffer = renderbuffer; parameters->glo = glo; return 1; } static PyObject * MGLContext_framebuffer(MGLContext * self, PyObject * args) { PyObject * color_attachments_arg; PyObject * depth_attachment_arg; if (!PyArg_ParseTuple(args, "OO", &color_attachments_arg, &depth_attachment_arg)) { return 0; } const GLMethods & gl = self->gl; if (!PySequence_Check(color_attachments_arg)) { color_attachments_arg = Py_BuildValue("(O)", color_attachments_arg); } else { color_attachments_arg = PySequence_Tuple(color_attachments_arg); } if (!color_attachments_arg) { MGLError_Set("invalid color attachments"); return NULL; } MGLFramebuffer * framebuffer = PyObject_New(MGLFramebuffer, MGLFramebuffer_type); framebuffer->released = false; framebuffer->framebuffer_obj = 0; gl.GenFramebuffers(1, (GLuint *)&framebuffer->framebuffer_obj); if (!framebuffer->framebuffer_obj) { MGLError_Set("cannot create framebuffer"); return NULL; } gl.BindFramebuffer(GL_FRAMEBUFFER, framebuffer->framebuffer_obj); AttachmentParameters params = {}; int color_attachments_count = (int)PyTuple_Size(color_attachments_arg); for (int i = 0; i < color_attachments_count; ++i) { PyObject * attachment = PyTuple_GetItem(color_attachments_arg, i); if (!attachment_parameters(attachment, ¶ms, false)) { MGLError_Set("invalid color attachment"); return NULL; } if (params.renderbuffer) { gl.FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_RENDERBUFFER, params.glo); } else { int target = params.samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; gl.FramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, target, params.glo, 0); } } if (depth_attachment_arg != Py_None) { if (!attachment_parameters(depth_attachment_arg, ¶ms, true)) { MGLError_Set("invalid depth attachment"); return NULL; } if (params.renderbuffer) { gl.FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, params.glo); } else { int target = params.samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; gl.FramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, target, params.glo, 0); } } if (!params.valid) { MGLError_Set("missing attachments"); return NULL; } if (!color_attachments_count) { gl.DrawBuffer(GL_NONE); } int status = gl.CheckFramebufferStatus(GL_FRAMEBUFFER); gl.BindFramebuffer(GL_FRAMEBUFFER, self->bound_framebuffer->framebuffer_obj); switch (status) { case GL_FRAMEBUFFER_UNDEFINED: MGLError_Set("the framebuffer is not complete (UNDEFINED)"); return NULL; case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: MGLError_Set("the framebuffer is not complete (INCOMPLETE_ATTACHMENT)"); return NULL; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: MGLError_Set("the framebuffer is not complete (INCOMPLETE_MISSING_ATTACHMENT)"); return NULL; case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: MGLError_Set("the framebuffer is not complete (INCOMPLETE_DRAW_BUFFER)"); return NULL; case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: MGLError_Set("the framebuffer is not complete (INCOMPLETE_READ_BUFFER)"); return NULL; case GL_FRAMEBUFFER_UNSUPPORTED: MGLError_Set("the framebuffer is not complete (UNSUPPORTED)"); return NULL; case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: MGLError_Set("the framebuffer is not complete (INCOMPLETE_MULTISAMPLE)"); return NULL; case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: MGLError_Set("the framebuffer is not complete (INCOMPLETE_LAYER_TARGETS)"); return NULL; } framebuffer->draw_buffers_len = color_attachments_count; for (int i = 0; i < color_attachments_count; ++i) { framebuffer->draw_buffers[i] = GL_COLOR_ATTACHMENT0 + i; framebuffer->color_mask[i] = 0xf; } framebuffer->depth_mask = (depth_attachment_arg != Py_None); framebuffer->viewport = rect(0, 0, params.width, params.height); framebuffer->dynamic = false; framebuffer->scissor_enabled = false; framebuffer->scissor = rect(0, 0, params.width, params.height); framebuffer->width = params.width; framebuffer->height = params.height; framebuffer->samples = params.samples; Py_INCREF(self); framebuffer->context = self; Py_DECREF(color_attachments_arg); return Py_BuildValue("(O(ii)ii)", framebuffer, framebuffer->width, framebuffer->height, framebuffer->samples, framebuffer->framebuffer_obj); } static PyObject * MGLContext_empty_framebuffer(MGLContext * self, PyObject * args) { int width; int height; int layers = 0; int samples = 0; if (!PyArg_ParseTuple(args, "(II)|II", &width, &height, &layers, &samples)) { return 0; } const GLMethods & gl = self->gl; MGLFramebuffer * framebuffer = PyObject_New(MGLFramebuffer, MGLFramebuffer_type); framebuffer->released = false; framebuffer->framebuffer_obj = 0; gl.GenFramebuffers(1, (GLuint *)&framebuffer->framebuffer_obj); if (!framebuffer->framebuffer_obj) { MGLError_Set("cannot create framebuffer"); Py_DECREF(framebuffer); return 0; } gl.BindFramebuffer(GL_FRAMEBUFFER, framebuffer->framebuffer_obj); gl.DrawBuffer(GL_NONE); gl.ReadBuffer(GL_NONE); gl.FramebufferParameteri(GL_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_WIDTH, width); gl.FramebufferParameteri(GL_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_HEIGHT, height); if (layers) { gl.FramebufferParameteri(GL_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_LAYERS, layers); } if (samples) { gl.FramebufferParameteri(GL_FRAMEBUFFER, GL_FRAMEBUFFER_DEFAULT_SAMPLES, samples); } int status = gl.CheckFramebufferStatus(GL_FRAMEBUFFER); gl.BindFramebuffer(GL_FRAMEBUFFER, self->bound_framebuffer->framebuffer_obj); if (status != GL_FRAMEBUFFER_COMPLETE) { const char * message = "the framebuffer is not complete"; switch (status) { case GL_FRAMEBUFFER_UNDEFINED: message = "the framebuffer is not complete (UNDEFINED)"; break; case GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: message = "the framebuffer is not complete (INCOMPLETE_ATTACHMENT)"; break; case GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: message = "the framebuffer is not complete (INCOMPLETE_MISSING_ATTACHMENT)"; break; case GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: message = "the framebuffer is not complete (INCOMPLETE_DRAW_BUFFER)"; break; case GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: message = "the framebuffer is not complete (INCOMPLETE_READ_BUFFER)"; break; case GL_FRAMEBUFFER_UNSUPPORTED: message = "the framebuffer is not complete (UNSUPPORTED)"; break; case GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: message = "the framebuffer is not complete (INCOMPLETE_MULTISAMPLE)"; break; case GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: message = "the framebuffer is not complete (INCOMPLETE_LAYER_TARGETS)"; break; } MGLError_Set(message); return 0; } framebuffer->draw_buffers_len = 0; framebuffer->depth_mask = false; framebuffer->viewport = rect(0, 0, width, height); framebuffer->dynamic = false; framebuffer->scissor_enabled = false; framebuffer->scissor = rect(0, 0, width, height); framebuffer->width = width; framebuffer->height = height; framebuffer->samples = samples; Py_INCREF(self); framebuffer->context = self; return Py_BuildValue("(O(ii)ii)", framebuffer, framebuffer->width, framebuffer->height, framebuffer->samples, framebuffer->framebuffer_obj); } static PyObject * MGLFramebuffer_release(MGLFramebuffer * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; if (self->framebuffer_obj) { self->context->gl.DeleteFramebuffers(1, (GLuint *)&self->framebuffer_obj); Py_DECREF(self->context); } Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLFramebuffer_clear(MGLFramebuffer * self, PyObject * args) { float r, g, b, a, depth; PyObject * viewport_arg; if (!PyArg_ParseTuple(args, "fffffO", &r, &g, &b, &a, &depth, &viewport_arg)) { return 0; } Rect viewport_rect = rect(0, 0, self->width, self->height); if (viewport_arg != Py_None) { if (!parse_rect(viewport_arg, &viewport_rect)) { MGLError_Set("wrong values in the viewport"); return NULL; } } const GLMethods & gl = self->context->gl; gl.BindFramebuffer(GL_FRAMEBUFFER, self->framebuffer_obj); if (self->framebuffer_obj) { gl.DrawBuffers(self->draw_buffers_len, self->draw_buffers); } gl.ClearColor(r, g, b, a); gl.ClearDepth(depth); if (self->draw_buffers_len == 1) { gl.ColorMask(self->color_mask[0] & 1, self->color_mask[0] & 2, self->color_mask[0] & 4, self->color_mask[0] & 8); } else { for (int i = 0; i < self->draw_buffers_len; ++i) { gl.ColorMaski(i, self->color_mask[i] & 1, self->color_mask[i] & 2, self->color_mask[i] & 4, self->color_mask[i] & 8); } } gl.DepthMask(self->depth_mask); // Respect the passed in viewport even with scissor enabled if (viewport_arg != Py_None) { gl.Enable(GL_SCISSOR_TEST); gl.Scissor(viewport_rect.x, viewport_rect.y, viewport_rect.width, viewport_rect.height); gl.Clear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); // restore scissor if enabled if (self->scissor_enabled) { gl.Scissor( self->scissor.x, self->scissor.y, self->scissor.width, self->scissor.height ); } else { gl.Disable(GL_SCISSOR_TEST); } } else { // clear with scissor if enabled if (self->scissor_enabled) { gl.Enable(GL_SCISSOR_TEST); gl.Scissor( self->scissor.x, self->scissor.y, self->scissor.width, self->scissor.height ); } gl.Clear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); } gl.BindFramebuffer(GL_FRAMEBUFFER, self->context->bound_framebuffer->framebuffer_obj); Py_RETURN_NONE; } static PyObject * MGLFramebuffer_use(MGLFramebuffer * self, PyObject * args) { const GLMethods & gl = self->context->gl; gl.BindFramebuffer(GL_FRAMEBUFFER, self->framebuffer_obj); if (self->framebuffer_obj) { gl.DrawBuffers(self->draw_buffers_len, self->draw_buffers); } if (self->viewport.width && self->viewport.height) { gl.Viewport( self->viewport.x, self->viewport.y, self->viewport.width, self->viewport.height ); } if (self->scissor_enabled) { gl.Enable(GL_SCISSOR_TEST); gl.Scissor( self->scissor.x, self->scissor.y, self->scissor.width, self->scissor.height ); } else { gl.Disable(GL_SCISSOR_TEST); } for (int i = 0; i < self->draw_buffers_len; ++i) { gl.ColorMaski(i, self->color_mask[i] & 1, self->color_mask[i] & 2, self->color_mask[i] & 4, self->color_mask[i] & 8); } gl.DepthMask(self->depth_mask); Py_INCREF(self); Py_DECREF(self->context->bound_framebuffer); self->context->bound_framebuffer = self; Py_RETURN_NONE; } static PyObject * MGLFramebuffer_read_into(MGLFramebuffer * self, PyObject * args) { PyObject * data; PyObject * viewport_arg; int components; int alignment; int attachment; int clamp; const char * dtype; Py_ssize_t write_offset; int args_ok = PyArg_ParseTuple( args, "OOIIIpsn", &data, &viewport_arg, &components, &attachment, &alignment, &clamp, &dtype, &write_offset ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } MGLDataType * data_type = from_dtype(dtype); if (!data_type) { MGLError_Set("invalid dtype"); return 0; } Rect viewport_rect = rect(0, 0, self->width, self->height); if (viewport_arg != Py_None) { if (!parse_rect(viewport_arg, &viewport_rect)) { MGLError_Set("wrong values in the viewport"); return NULL; } } bool read_depth = false; if (attachment == -1) { components = 1; read_depth = true; } unsigned long long expected_size = (unsigned long long)viewport_rect.width * components * data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * viewport_rect.height; int pixel_type = data_type->gl_type; int base_format = read_depth ? GL_DEPTH_COMPONENT : data_type->base_format[components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; if (clamp) { gl.ClampColor(GL_CLAMP_READ_COLOR, GL_TRUE); } else { gl.ClampColor(GL_CLAMP_READ_COLOR, GL_FIXED_ONLY); } gl.BindBuffer(GL_PIXEL_PACK_BUFFER, buffer->buffer_obj); gl.BindFramebuffer(GL_FRAMEBUFFER, self->framebuffer_obj); gl.ReadBuffer(read_depth ? GL_NONE : (GL_COLOR_ATTACHMENT0 + attachment)); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.ReadPixels(viewport_rect.x, viewport_rect.y, viewport_rect.width, viewport_rect.height, base_format, pixel_type, (void *)write_offset); gl.BindFramebuffer(GL_FRAMEBUFFER, self->context->bound_framebuffer->framebuffer_obj); gl.BindBuffer(GL_PIXEL_PACK_BUFFER, 0); } else { Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_WRITABLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len < write_offset + expected_size) { MGLError_Set("the buffer is too small"); PyBuffer_Release(&buffer_view); return 0; } char * ptr = (char *)buffer_view.buf + write_offset; const GLMethods & gl = self->context->gl; if (clamp) { gl.ClampColor(GL_CLAMP_READ_COLOR, GL_TRUE); } else { gl.ClampColor(GL_CLAMP_READ_COLOR, GL_FIXED_ONLY); } gl.BindFramebuffer(GL_FRAMEBUFFER, self->framebuffer_obj); gl.ReadBuffer(read_depth ? GL_NONE : (GL_COLOR_ATTACHMENT0 + attachment)); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.ReadPixels(viewport_rect.x, viewport_rect.y, viewport_rect.width, viewport_rect.height, base_format, pixel_type, ptr); gl.BindFramebuffer(GL_FRAMEBUFFER, self->context->bound_framebuffer->framebuffer_obj); PyBuffer_Release(&buffer_view); } return PyLong_FromLong(expected_size); } static PyObject * MGLFramebuffer_get_viewport(MGLFramebuffer * self, void * closure) { return Py_BuildValue("(iiii)", self->viewport.x, self->viewport.y, self->viewport.width, self->viewport.height); } static int MGLFramebuffer_set_viewport(MGLFramebuffer * self, PyObject * value, void * closure) { Rect viewport_rect = {}; if (!parse_rect(value, &viewport_rect)) { MGLError_Set("wrong values in the viewport"); return -1; } self->viewport = viewport_rect; if (self->framebuffer_obj == self->context->bound_framebuffer->framebuffer_obj) { const GLMethods & gl = self->context->gl; gl.Viewport( self->viewport.x, self->viewport.y, self->viewport.width, self->viewport.height ); } return 0; } static PyObject * MGLFramebuffer_get_scissor(MGLFramebuffer * self, void * closure) { return Py_BuildValue("(iiii)", self->scissor.x, self->scissor.y, self->scissor.width, self->scissor.height); } static int MGLFramebuffer_set_scissor(MGLFramebuffer * self, PyObject * value, void * closure) { if (value == Py_None) { self->scissor = rect(0, 0, self->width, self->height); self->scissor_enabled = false; } else { Rect scissor_rect = {}; if (!parse_rect(value, &scissor_rect)) { MGLError_Set("wrong values in the scissor"); return -1; } self->scissor = scissor_rect; self->scissor_enabled = true; } if (self->framebuffer_obj == self->context->bound_framebuffer->framebuffer_obj) { const GLMethods & gl = self->context->gl; if (self->scissor_enabled) { gl.Enable(GL_SCISSOR_TEST); } else { gl.Disable(GL_SCISSOR_TEST); } gl.Scissor( self->scissor.x, self->scissor.y, self->scissor.width, self->scissor.height ); } return 0; } static PyObject * py_bool(int x) { return x ? Py_True : Py_False; } static PyObject * MGLFramebuffer_get_color_mask(MGLFramebuffer * self, void * closure) { char * c = self->color_mask; if (self->draw_buffers_len == 1) { return Py_BuildValue("(OOOO)", py_bool(c[0] & 1), py_bool(c[0] & 2), py_bool(c[0] & 4), py_bool(c[0] & 8)); } PyObject * res = PyTuple_New(self->draw_buffers_len); for (int i = 0; i < self->draw_buffers_len; ++i) { PyObject * mask = Py_BuildValue("(OOOO)", py_bool(c[i] & 1), py_bool(c[i] & 2), py_bool(c[i] & 4), py_bool(c[i] & 8)); PyTuple_SetItem(res, i, mask); } return res; } static int parse_mask(PyObject * arg, char * value) { arg = PySequence_Tuple(arg); if (!arg) { PyErr_Clear(); return 0; } if (PyTuple_Size(arg) != 4) { return 0; } char mask = 0; mask |= PyObject_IsTrue(PyTuple_GetItem(arg, 0)) ? 1 : 0; mask |= PyObject_IsTrue(PyTuple_GetItem(arg, 1)) ? 2 : 0; mask |= PyObject_IsTrue(PyTuple_GetItem(arg, 2)) ? 4 : 0; mask |= PyObject_IsTrue(PyTuple_GetItem(arg, 3)) ? 8 : 0; if (PyErr_Occurred()) { PyErr_Clear(); return 0; } *value = mask; Py_DECREF(arg); return 1; } static int MGLFramebuffer_set_color_mask(MGLFramebuffer * self, PyObject * value, void * closure) { if (self->draw_buffers_len == 1) { if (!parse_mask(value, &self->color_mask[0])) { MGLError_Set("invalid color mask"); return -1; } return 0; } else { value = PySequence_Tuple(value); if (!value) { PyErr_Clear(); MGLError_Set("invalid color mask"); return -1; } int count = (int)PyTuple_Size(value); for (int i = 0; i < count; ++i) { PyObject * mask = PyTuple_GetItem(value, i); if (!parse_mask(mask, &self->color_mask[i])) { MGLError_Set("invalid color mask"); return -1; } } Py_DECREF(value); } if (self->framebuffer_obj == self->context->bound_framebuffer->framebuffer_obj) { const GLMethods & gl = self->context->gl; for (int i = 0; i < self->draw_buffers_len; ++i) { gl.ColorMaski(i, self->color_mask[i] & 1, self->color_mask[i] & 2, self->color_mask[i] & 4, self->color_mask[i] & 8); } } return 0; } static PyObject * MGLFramebuffer_get_depth_mask(MGLFramebuffer * self, void * closure) { return PyBool_FromLong(self->depth_mask); } static int MGLFramebuffer_set_depth_mask(MGLFramebuffer * self, PyObject * value, void * closure) { if (value == Py_True) { self->depth_mask = true; } else if (value == Py_False) { self->depth_mask = false; } else { MGLError_Set("the depth_mask must be a bool not %s", Py_TYPE(value)->tp_name); return -1; } if (self->framebuffer_obj == self->context->bound_framebuffer->framebuffer_obj) { const GLMethods & gl = self->context->gl; gl.DepthMask(self->depth_mask); } return 0; } static PyObject * MGLFramebuffer_get_bits(MGLFramebuffer * self, void * closure) { if (self->framebuffer_obj) { MGLError_Set("only the default_framebuffer have bits"); return 0; } int red_bits = 0; int green_bits = 0; int blue_bits = 0; int alpha_bits = 0; int depth_bits = 0; int stencil_bits = 0; const GLMethods & gl = self->context->gl; gl.BindFramebuffer(GL_FRAMEBUFFER, self->framebuffer_obj); gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK_LEFT, GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE, &red_bits); gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK_LEFT, GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE, &green_bits); gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK_LEFT, GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE, &blue_bits); gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_BACK_LEFT, GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE, &alpha_bits); gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_DEPTH, GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE, &depth_bits); gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_STENCIL, GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE, &stencil_bits); gl.BindFramebuffer(GL_FRAMEBUFFER, self->context->bound_framebuffer->framebuffer_obj); PyObject * red_obj = PyLong_FromLong(red_bits); PyObject * green_obj = PyLong_FromLong(green_bits); PyObject * blue_obj = PyLong_FromLong(blue_bits); PyObject * alpha_obj = PyLong_FromLong(alpha_bits); PyObject * depth_obj = PyLong_FromLong(depth_bits); PyObject * stencil_obj = PyLong_FromLong(stencil_bits); PyObject * result = PyDict_New(); PyDict_SetItemString(result, "red", red_obj); PyDict_SetItemString(result, "green", green_obj); PyDict_SetItemString(result, "blue", blue_obj); PyDict_SetItemString(result, "alpha", alpha_obj); PyDict_SetItemString(result, "depth", depth_obj); PyDict_SetItemString(result, "stencil", stencil_obj); Py_DECREF(red_obj); Py_DECREF(green_obj); Py_DECREF(blue_obj); Py_DECREF(alpha_obj); Py_DECREF(depth_obj); Py_DECREF(stencil_obj); return result; } static PyObject * MGLContext_program(MGLContext * self, PyObject * args) { PyObject * shaders[6]; PyObject * varyings_arg; PyObject * fragment_outputs; int interleaved; int args_ok = PyArg_ParseTuple( args, "OOOOOOOOp", &shaders[0], &shaders[1], &shaders[2], &shaders[3], &shaders[4], &shaders[5], &varyings_arg, &fragment_outputs, &interleaved ); if (!args_ok) { return 0; } varyings_arg = PySequence_Tuple(varyings_arg); if (!varyings_arg) { PyErr_Clear(); MGLError_Set("invalid varyings"); return NULL; } int varyings_count = (int)PyTuple_Size(varyings_arg); MGLProgram * program = PyObject_New(MGLProgram, MGLProgram_type); program->released = false; Py_INCREF(self); program->context = self; const GLMethods & gl = program->context->gl; int program_obj = gl.CreateProgram(); if (!program_obj) { MGLError_Set("cannot create program"); return 0; } int shader_objs[] = {0, 0, 0, 0, 0, 0}; for (int i = 0; i < NUM_SHADER_SLOTS; ++i) { if (shaders[i] == Py_None) { continue; } int shader_obj = gl.CreateShader(SHADER_TYPE[i]); if (!shader_obj) { MGLError_Set("cannot create shader"); return 0; } if (PyObject_HasAttrString(shaders[i], "to_shader_source")) { shaders[i] = PyObject_CallMethod(shaders[i], "to_shader_source", NULL); if (!shaders[i]) { return NULL; } } else { Py_INCREF(shaders[i]); } if (PyUnicode_Check(shaders[i])) { shaders[i] = PyObject_CallMethod(helper, "resolve_includes", "(ON)", self, shaders[i]); if (!shaders[i]) { return NULL; } const char * source_str = PyUnicode_AsUTF8(shaders[i]); gl.ShaderSource(shader_obj, 1, &source_str, NULL); gl.CompileShader(shader_obj); } else if (PyBytes_Check(shaders[i])) { unsigned * spv = (unsigned *)PyBytes_AsString(shaders[i]); if (spv[0] == 0x07230203) { int spv_length = (int)PyBytes_Size(shaders[i]); gl.ShaderBinary(1, (unsigned *)&shader_obj, GL_SHADER_BINARY_FORMAT_SPIR_V, spv, spv_length); gl.SpecializeShader(shader_obj, "main", 0, NULL, NULL); } else { const char * source_str = PyBytes_AsString(shaders[i]); gl.ShaderSource(shader_obj, 1, &source_str, NULL); gl.CompileShader(shader_obj); } } else { MGLError_Set("wrong shader source type"); return NULL; } Py_DECREF(shaders[i]); int compiled = GL_FALSE; gl.GetShaderiv(shader_obj, GL_COMPILE_STATUS, &compiled); if (!compiled) { const char * SHADER_NAME[] = { "vertex_shader", "fragment_shader", "geometry_shader", "tess_control_shader", "tess_evaluation_shader", "compute_shader", }; const char * SHADER_NAME_UNDERLINE[] = { "=============", "===============", "===============", "===================", "======================", "==============", }; const char * message = "GLSL Compiler failed"; const char * title = SHADER_NAME[i]; const char * underline = SHADER_NAME_UNDERLINE[i]; int log_len = 0; gl.GetShaderiv(shader_obj, GL_INFO_LOG_LENGTH, &log_len); char * log = new char[log_len]; gl.GetShaderInfoLog(shader_obj, log_len, &log_len, log); gl.DeleteShader(shader_obj); MGLError_Set("%s\n\n%s\n%s\n%s\n", message, title, underline, log); delete[] log; return 0; } shader_objs[i] = shader_obj; gl.AttachShader(program_obj, shader_obj); } if (varyings_count) { const char * varyings_array[64]; for (int i = 0; i < varyings_count; ++i) { PyObject * item = PyTuple_GetItem(varyings_arg, i); if (!PyUnicode_Check(item)) { MGLError_Set("invalid varyings"); return NULL; } varyings_array[i] = PyUnicode_AsUTF8(item); } int capture_mode = interleaved ? GL_INTERLEAVED_ATTRIBS : GL_SEPARATE_ATTRIBS; gl.TransformFeedbackVaryings(program_obj, varyings_count, varyings_array, capture_mode); } { PyObject * key = NULL; PyObject * value = NULL; Py_ssize_t pos = 0; while (PyDict_Next(fragment_outputs, &pos, &key, &value)) { gl.BindFragDataLocation(program_obj, PyLong_AsLong(value), PyUnicode_AsUTF8(key)); } } gl.LinkProgram(program_obj); // Delete the shader objects after the program is linked for (int i = 0; i < NUM_SHADER_SLOTS; ++i) { if (shader_objs[i]) { gl.DeleteShader(shader_objs[i]); } } int linked = GL_FALSE; gl.GetProgramiv(program_obj, GL_LINK_STATUS, &linked); if (!linked) { const char * message = "GLSL Linker failed"; const char * title = "Program"; const char * underline = "======="; int log_len = 0; gl.GetProgramiv(program_obj, GL_INFO_LOG_LENGTH, &log_len); char * log = new char[log_len]; gl.GetProgramInfoLog(program_obj, log_len, &log_len, log); gl.DeleteProgram(program_obj); MGLError_Set("%s\n\n%s\n%s\n%s\n", message, title, underline, log); delete[] log; return 0; } program->program_obj = program_obj; if (shaders[GEOMETRY_SHADER_SLOT] != Py_None) { int geometry_in = 0; int geometry_out = 0; program->geometry_vertices = 0; gl.GetProgramiv(program_obj, GL_GEOMETRY_INPUT_TYPE, &geometry_in); gl.GetProgramiv(program_obj, GL_GEOMETRY_OUTPUT_TYPE, &geometry_out); gl.GetProgramiv(program_obj, GL_GEOMETRY_VERTICES_OUT, &program->geometry_vertices); switch (geometry_in) { case GL_TRIANGLES: program->geometry_input = GL_TRIANGLES; break; case GL_TRIANGLE_STRIP: program->geometry_input = GL_TRIANGLE_STRIP; break; case GL_TRIANGLE_FAN: program->geometry_input = GL_TRIANGLE_FAN; break; case GL_LINES: program->geometry_input = GL_LINES; break; case GL_LINE_STRIP: program->geometry_input = GL_LINE_STRIP; break; case GL_LINE_LOOP: program->geometry_input = GL_LINE_LOOP; break; case GL_POINTS: program->geometry_input = GL_POINTS; break; case GL_LINE_STRIP_ADJACENCY: program->geometry_input = GL_LINE_STRIP_ADJACENCY; break; case GL_LINES_ADJACENCY: program->geometry_input = GL_LINES_ADJACENCY; break; case GL_TRIANGLE_STRIP_ADJACENCY: program->geometry_input = GL_TRIANGLE_STRIP_ADJACENCY; break; case GL_TRIANGLES_ADJACENCY: program->geometry_input = GL_TRIANGLES_ADJACENCY; break; default: program->geometry_input = -1; break; } switch (geometry_out) { case GL_TRIANGLES: program->geometry_output = GL_TRIANGLES; break; case GL_TRIANGLE_STRIP: program->geometry_output = GL_TRIANGLES; break; case GL_TRIANGLE_FAN: program->geometry_output = GL_TRIANGLES; break; case GL_LINES: program->geometry_output = GL_LINES; break; case GL_LINE_STRIP: program->geometry_output = GL_LINES; break; case GL_LINE_LOOP: program->geometry_output = GL_LINES; break; case GL_POINTS: program->geometry_output = GL_POINTS; break; case GL_LINE_STRIP_ADJACENCY: program->geometry_output = GL_LINES; break; case GL_LINES_ADJACENCY: program->geometry_output = GL_LINES; break; case GL_TRIANGLE_STRIP_ADJACENCY: program->geometry_output = GL_TRIANGLES; break; case GL_TRIANGLES_ADJACENCY: program->geometry_output = GL_TRIANGLES; break; default: program->geometry_output = -1; break; } } else { program->geometry_input = -1; program->geometry_output = -1; program->geometry_vertices = 0; } if (PyErr_Occurred()) { Py_DECREF(program); return 0; } Py_INCREF(program); int num_attributes = 0; int num_varyings = 0; int num_uniforms = 0; int num_uniform_blocks = 0; int num_storage_blocks = 0; gl.GetProgramiv(program->program_obj, GL_ACTIVE_ATTRIBUTES, &num_attributes); gl.GetProgramiv(program->program_obj, GL_TRANSFORM_FEEDBACK_VARYINGS, &num_varyings); gl.GetProgramiv(program->program_obj, GL_ACTIVE_UNIFORMS, &num_uniforms); gl.GetProgramiv(program->program_obj, GL_ACTIVE_UNIFORM_BLOCKS, &num_uniform_blocks); if (self->version_code >= 430) { gl.GetProgramInterfaceiv(program->program_obj, GL_SHADER_STORAGE_BLOCK, GL_ACTIVE_RESOURCES, &num_storage_blocks); } program->num_varyings = num_varyings; PyObject * members_dict = PyDict_New(); PyObject * attribute_locations = PyDict_New(); PyObject * attribute_types = PyDict_New(); for (int i = 0; i < num_attributes; ++i) { int type = 0; int array_length = 0; int name_len = 0; char name[256]; gl.GetActiveAttrib(program->program_obj, i, 256, &name_len, &array_length, (GLenum *)&type, name); PyObject * location = PyLong_FromLong(gl.GetAttribLocation(program->program_obj, name)); clean_glsl_name(name, name_len); PyObject * item = PyObject_CallMethod( helper, "make_attribute", "(siiOi)", name, type, program->program_obj, location, array_length ); PyDict_SetItemString(members_dict, name, item); PyDict_SetItemString(attribute_locations, name, location); PyDict_SetItem(attribute_types, location, item); Py_DECREF(item); Py_DECREF(location); } for (int i = 0; i < num_varyings; ++i) { int type = 0; int array_length = 0; int dimension = 0; int name_len = 0; char name[256]; gl.GetTransformFeedbackVarying(program->program_obj, i, 256, &name_len, &array_length, (GLenum *)&type, name); PyObject * item = PyObject_CallMethod(helper, "make_varying", "(siii)", name, i, array_length, dimension); PyDict_SetItemString(members_dict, name, item); Py_DECREF(item); } for (int i = 0; i < num_uniforms; ++i) { int type = 0; int array_length = 0; int name_len = 0; char name[256]; gl.GetActiveUniform(program->program_obj, i, 256, &name_len, &array_length, (GLenum *)&type, name); int location = gl.GetUniformLocation(program->program_obj, name); clean_glsl_name(name, name_len); if (location < 0) { continue; } PyObject * item = PyObject_CallMethod( helper, "make_uniform", "(siiiiO)", name, type, program->program_obj, location, array_length, self ); PyDict_SetItemString(members_dict, name, item); Py_DECREF(item); } for (int i = 0; i < num_uniform_blocks; ++i) { int size = 0; int name_len = 0; char name[256]; gl.GetActiveUniformBlockName(program->program_obj, i, 256, &name_len, name); int index = gl.GetUniformBlockIndex(program->program_obj, name); gl.GetActiveUniformBlockiv(program->program_obj, index, GL_UNIFORM_BLOCK_DATA_SIZE, &size); clean_glsl_name(name, name_len); PyObject * item = PyObject_CallMethod( helper, "make_uniform_block", "(siiiO)", name, program->program_obj, index, size, self ); PyDict_SetItemString(members_dict, name, item); Py_DECREF(item); } for(int i = 0; i < num_storage_blocks; ++i) { int name_len = 0; char name[256]; gl.GetProgramResourceName(program_obj, GL_SHADER_STORAGE_BLOCK, i, 256, &name_len, name); clean_glsl_name(name, name_len); PyObject * item = PyObject_CallMethod( helper, "make_storage_block", "(siiO)", name, program_obj, i, self ); PyDict_SetItemString(members_dict, name, item); Py_DECREF(item); } PyObject * geom_info; if (program->geometry_vertices) { geom_info = Py_BuildValue("(iii)", program->geometry_input, program->geometry_output, program->geometry_vertices); } else { geom_info = Py_BuildValue("(OOi)", Py_None, Py_None, 0); } PyObject * members_and_attributes = Py_BuildValue("(NNN)", members_dict, attribute_locations, attribute_types); return Py_BuildValue("(ONNNi)", program, members_and_attributes, PyTuple_New(0), geom_info, program->program_obj); } static PyObject * MGLProgram_run(MGLProgram * self, PyObject * args) { unsigned x; unsigned y; unsigned z; if (!PyArg_ParseTuple( args, "III", &x, &y, &z)) { return 0; } const GLMethods & gl = self->context->gl; gl.UseProgram(self->program_obj); gl.DispatchCompute(x, y, z); Py_RETURN_NONE; } static PyObject * MGLProgram_run_indirect(MGLProgram * self, PyObject * args) { MGLBuffer * buffer; Py_ssize_t offset = 0; if (!PyArg_ParseTuple(args, "O!|n", MGLBuffer_type, &buffer, &offset)) { return 0; } const GLMethods & gl = self->context->gl; gl.UseProgram(self->program_obj); gl.BindBuffer(GL_DISPATCH_INDIRECT_BUFFER, buffer->buffer_obj); gl.DispatchComputeIndirect((GLintptr)offset); Py_RETURN_NONE; } static PyObject * MGLProgram_release(MGLProgram * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; const GLMethods & gl = self->context->gl; gl.DeleteProgram(self->program_obj); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLContext_query(MGLContext * self, PyObject * args) { int samples_passed; int any_samples_passed; int time_elapsed; int primitives_generated; int args_ok = PyArg_ParseTuple( args, "pppp", &samples_passed, &any_samples_passed, &time_elapsed, &primitives_generated ); if (!args_ok) { return 0; } // If none of them is set, all will be set. if (!(samples_passed + any_samples_passed + time_elapsed + primitives_generated)) { samples_passed = 1; any_samples_passed = 1; time_elapsed = 1; primitives_generated = 1; } MGLQuery * query = PyObject_New(MGLQuery, MGLQuery_type); query->query_obj[SAMPLES_PASSED] = 0; query->query_obj[ANY_SAMPLES_PASSED] = 0; query->query_obj[TIME_ELAPSED] = 0; query->query_obj[PRIMITIVES_GENERATED] = 0; query->released = false; Py_INCREF(self); query->context = self; query->state = QUERY_INACTIVE; query->ended = false; const GLMethods & gl = self->gl; if (samples_passed) { gl.GenQueries(1, (GLuint *)&query->query_obj[SAMPLES_PASSED]); } if (any_samples_passed) { gl.GenQueries(1, (GLuint *)&query->query_obj[ANY_SAMPLES_PASSED]); } if (time_elapsed) { gl.GenQueries(1, (GLuint *)&query->query_obj[TIME_ELAPSED]); } if (primitives_generated) { gl.GenQueries(1, (GLuint *)&query->query_obj[PRIMITIVES_GENERATED]); } return (PyObject *)query; } static PyObject * MGLQuery_begin(MGLQuery * self, PyObject * args) { if (self->state != QUERY_INACTIVE) { MGLError_Set(self->state == QUERY_ACTIVE ? "this query is already running" : "this query is in conditional render mode"); return NULL; } const GLMethods & gl = self->context->gl; if (self->query_obj[SAMPLES_PASSED]) { gl.BeginQuery(GL_SAMPLES_PASSED, self->query_obj[SAMPLES_PASSED]); } if (self->query_obj[ANY_SAMPLES_PASSED]) { gl.BeginQuery(GL_ANY_SAMPLES_PASSED, self->query_obj[ANY_SAMPLES_PASSED]); } if (self->query_obj[TIME_ELAPSED]) { gl.BeginQuery(GL_TIME_ELAPSED, self->query_obj[TIME_ELAPSED]); } if (self->query_obj[PRIMITIVES_GENERATED]) { gl.BeginQuery(GL_PRIMITIVES_GENERATED, self->query_obj[PRIMITIVES_GENERATED]); } self->state = QUERY_ACTIVE; Py_RETURN_NONE; } static PyObject * MGLQuery_end(MGLQuery * self, PyObject * args) { if (self->state != QUERY_ACTIVE) { MGLError_Set(self->state == QUERY_INACTIVE ? "this query was not started" : "this query is in conditional render mode"); return NULL; } const GLMethods & gl = self->context->gl; if (self->query_obj[SAMPLES_PASSED]) { gl.EndQuery(GL_SAMPLES_PASSED); } if (self->query_obj[ANY_SAMPLES_PASSED]) { gl.EndQuery(GL_ANY_SAMPLES_PASSED); } if (self->query_obj[TIME_ELAPSED]) { gl.EndQuery(GL_TIME_ELAPSED); } if (self->query_obj[PRIMITIVES_GENERATED]) { gl.EndQuery(GL_PRIMITIVES_GENERATED); } self->state = QUERY_INACTIVE; self->ended = true; Py_RETURN_NONE; } static PyObject * MGLQuery_begin_render(MGLQuery * self, PyObject * args) { if (self->state != QUERY_INACTIVE) { MGLError_Set(self->state == QUERY_ACTIVE ? "this query was not stopped" : "this query is already in conditional render mode"); return NULL; } const GLMethods & gl = self->context->gl; if (self->query_obj[ANY_SAMPLES_PASSED]) { gl.BeginConditionalRender(self->query_obj[ANY_SAMPLES_PASSED], GL_QUERY_NO_WAIT); } else if (self->query_obj[SAMPLES_PASSED]) { gl.BeginConditionalRender(self->query_obj[SAMPLES_PASSED], GL_QUERY_NO_WAIT); } else { MGLError_Set("no samples"); return NULL; } self->state = QUERY_CONDITIONAL_RENDER; Py_RETURN_NONE; } static PyObject * MGLQuery_end_render(MGLQuery * self, PyObject * args) { if (self->state != QUERY_CONDITIONAL_RENDER) { MGLError_Set("this query is not in conditional render mode"); return NULL; } const GLMethods & gl = self->context->gl; gl.EndConditionalRender(); self->state = QUERY_INACTIVE; Py_RETURN_NONE; } static PyObject * MGLQuery_get_samples(MGLQuery * self, void * closure) { if (!self->query_obj[SAMPLES_PASSED]) { MGLError_Set("query created without the samples_passed flag"); return NULL; } if (self->state == QUERY_ACTIVE) { MGLError_Set("this query was not stopped"); return NULL; } const GLMethods & gl = self->context->gl; unsigned samples = 0; if (self->ended) { gl.GetQueryObjectuiv(self->query_obj[SAMPLES_PASSED], GL_QUERY_RESULT, &samples); } return PyLong_FromUnsignedLong(samples); } static PyObject * MGLQuery_get_primitives(MGLQuery * self, void * closure) { if (!self->query_obj[PRIMITIVES_GENERATED]) { MGLError_Set("query created without the primitives_generated flag"); return NULL; } if (self->state == QUERY_ACTIVE) { MGLError_Set("this query was not stopped"); return NULL; } const GLMethods & gl = self->context->gl; unsigned primitives = 0; if (self->ended) { gl.GetQueryObjectuiv(self->query_obj[PRIMITIVES_GENERATED], GL_QUERY_RESULT, &primitives); } return PyLong_FromUnsignedLong(primitives); } static PyObject * MGLQuery_get_elapsed(MGLQuery * self, void * closure) { if (!self->query_obj[TIME_ELAPSED]) { MGLError_Set("query created without the time_elapsed flag"); return NULL; } if (self->state == QUERY_ACTIVE) { MGLError_Set("this query was not stopped"); return NULL; } const GLMethods & gl = self->context->gl; unsigned elapsed = 0; if (self->ended) { gl.GetQueryObjectuiv(self->query_obj[TIME_ELAPSED], GL_QUERY_RESULT, &elapsed); } return PyLong_FromUnsignedLong(elapsed); } // TODO: Add label support for MGLQuery (it contains multiple OpenGL query objects) static PyObject * MGLRenderbuffer_release(MGLRenderbuffer * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; const GLMethods & gl = self->context->gl; gl.DeleteRenderbuffers(1, (GLuint *)&self->renderbuffer_obj); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLContext_sampler(MGLContext * self, PyObject * args) { int args_ok = PyArg_ParseTuple( args, "" ); if (!args_ok) { return 0; } const GLMethods & gl = self->gl; MGLSampler * sampler = PyObject_New(MGLSampler, MGLSampler_type); sampler->released = false; gl.GenSamplers(1, (GLuint *)&sampler->sampler_obj); sampler->min_filter = GL_LINEAR; sampler->mag_filter = GL_LINEAR; sampler->anisotropy = 0.0; sampler->repeat_x = true; sampler->repeat_y = true; sampler->repeat_z = true; sampler->compare_func = 0; sampler->border_color[0] = 0.0; sampler->border_color[1] = 0.0; sampler->border_color[2] = 0.0; sampler->border_color[3] = 0.0; sampler->min_lod = -1000.0; sampler->max_lod = 1000.0; Py_INCREF(self); sampler->context = self; return Py_BuildValue("(Oi)", sampler, sampler->sampler_obj); } static PyObject * MGLContext_memory_barrier(MGLContext * self, PyObject * args) { unsigned barriers = GL_ALL_BARRIER_BITS; int by_region = false; if (!PyArg_ParseTuple(args, "|Ip", &barriers, &by_region)) { return 0; } if (by_region && !self->gl.MemoryBarrierByRegion) { by_region = false; } if (by_region) { self->gl.MemoryBarrierByRegion(barriers); } else if (self->gl.MemoryBarrier) { self->gl.MemoryBarrier(barriers); } Py_RETURN_NONE; } static PyObject * MGLSampler_use(MGLSampler * self, PyObject * args) { int index; if (!PyArg_ParseTuple(args, "I", &index)) { return 0; } const GLMethods & gl = self->context->gl; gl.BindSampler(index, self->sampler_obj); Py_RETURN_NONE; } static PyObject * MGLSampler_clear(MGLSampler * self, PyObject * args) { int index; int args_ok = PyArg_ParseTuple( args, "I", &index ); if (!args_ok) { return 0; } const GLMethods & gl = self->context->gl; gl.BindSampler(index, 0); Py_RETURN_NONE; } static PyObject * MGLSampler_release(MGLSampler * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; const GLMethods & gl = self->context->gl; gl.DeleteSamplers(1, (GLuint *)&self->sampler_obj); Py_DECREF(self); Py_DECREF(self->context); Py_RETURN_NONE; } static PyObject * MGLSampler_get_repeat_x(MGLSampler * self, void * closure) { return PyBool_FromLong(self->repeat_x); } static int MGLSampler_set_repeat_x(MGLSampler * self, PyObject * value, void * closure) { const GLMethods & gl = self->context->gl; if (value == Py_True) { gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_S, GL_REPEAT); self->repeat_x = true; return 0; } else if (value == Py_False) { gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); self->repeat_x = false; return 0; } else { MGLError_Set("invalid value for texture_x"); return -1; } } static PyObject * MGLSampler_get_repeat_y(MGLSampler * self, void * closure) { return PyBool_FromLong(self->repeat_y); } static int MGLSampler_set_repeat_y(MGLSampler * self, PyObject * value, void * closure) { const GLMethods & gl = self->context->gl; if (value == Py_True) { gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_T, GL_REPEAT); self->repeat_y = true; return 0; } else if (value == Py_False) { gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); self->repeat_y = false; return 0; } else { MGLError_Set("invalid value for texture_y"); return -1; } } static PyObject * MGLSampler_get_repeat_z(MGLSampler * self, void * closure) { return PyBool_FromLong(self->repeat_z); } static int MGLSampler_set_repeat_z(MGLSampler * self, PyObject * value, void * closure) { const GLMethods & gl = self->context->gl; if (value == Py_True) { gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_R, GL_REPEAT); self->repeat_z = true; return 0; } else if (value == Py_False) { gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); self->repeat_z = false; return 0; } else { MGLError_Set("invalid value for texture_z"); return -1; } } static PyObject * MGLSampler_get_filter(MGLSampler * self, void * closure) { return Py_BuildValue("(ii)", self->min_filter, self->mag_filter); } static int parse_filter(PyObject * arg, int * min_filter_value, int * mag_filter_value) { arg = PySequence_Tuple(arg); if (!arg || PyTuple_Size(arg) != 2) { PyErr_Clear(); return 0; } int min_filter = PyLong_AsLong(PyTuple_GetItem(arg, 0)); int mag_filter = PyLong_AsLong(PyTuple_GetItem(arg, 1)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } *min_filter_value = min_filter; *mag_filter_value = mag_filter; Py_DECREF(arg); return 1; } static int MGLSampler_set_filter(MGLSampler * self, PyObject * value, void * closure) { if (!parse_filter(value, &self->min_filter, &self->mag_filter)) { MGLError_Set("invalid filter"); return -1; } const GLMethods & gl = self->context->gl; gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_MIN_FILTER, self->min_filter); gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_MAG_FILTER, self->mag_filter); return 0; } static PyObject * MGLSampler_get_compare_func(MGLSampler * self, void * closure) { return compare_func_to_string(self->compare_func); } static int MGLSampler_set_compare_func(MGLSampler * self, PyObject * value, void * closure) { const char * func = PyUnicode_AsUTF8(value); if (!func) { MGLError_Set("invalid compare function"); return -1; } self->compare_func = compare_func_from_string(func); const GLMethods & gl = self->context->gl; if (self->compare_func == 0) { gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_COMPARE_MODE, GL_NONE); } else { gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_COMPARE_FUNC, self->compare_func); } return 0; } static PyObject * MGLSampler_get_anisotropy(MGLSampler * self, void * closure) { return PyFloat_FromDouble(self->anisotropy); } static int MGLSampler_set_anisotropy(MGLSampler * self, PyObject * value, void * closure) { if (self->context->max_anisotropy == 0) return 0; self->anisotropy = (float)MGL_MIN(MGL_MAX(PyFloat_AsDouble(value), 1.0), self->context->max_anisotropy); const GLMethods & gl = self->context->gl; gl.SamplerParameterf(self->sampler_obj, GL_TEXTURE_MAX_ANISOTROPY, self->anisotropy); return 0; } static PyObject * MGLSampler_get_border_color(MGLSampler * self, void * closure) { return Py_BuildValue("(ffff)", self->border_color[0], self->border_color[1], self->border_color[2], self->border_color[3]); } static int parse_color(PyObject * arg, float * value) { arg = PySequence_Tuple(arg); if (!arg || PyTuple_Size(arg) != 4) { PyErr_Clear(); return 0; } float r = (float)PyFloat_AsDouble(PyTuple_GetItem(arg, 0)); float g = (float)PyFloat_AsDouble(PyTuple_GetItem(arg, 1)); float b = (float)PyFloat_AsDouble(PyTuple_GetItem(arg, 2)); float a = (float)PyFloat_AsDouble(PyTuple_GetItem(arg, 3)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } value[0] = r; value[1] = g; value[2] = b; value[3] = a; Py_DECREF(arg); return 1; } static int MGLSampler_set_border_color(MGLSampler * self, PyObject * value, void * closure) { if (!parse_color(value, self->border_color)) { MGLError_Set("invalid border color"); return -1; } const GLMethods & gl = self->context->gl; gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_BORDER); gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_BORDER); gl.SamplerParameteri(self->sampler_obj, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_BORDER); gl.SamplerParameterfv(self->sampler_obj, GL_TEXTURE_BORDER_COLOR, (GLfloat*)&self->border_color); return 0; } static PyObject * MGLSampler_get_min_lod(MGLSampler * self, void * closure) { return PyFloat_FromDouble(self->min_lod); } static int MGLSampler_set_min_lod(MGLSampler * self, PyObject * value, void * closure) { self->min_lod = (float)PyFloat_AsDouble(value); const GLMethods & gl = self->context->gl; gl.SamplerParameterf(self->sampler_obj, GL_TEXTURE_MIN_LOD, self->min_lod); return 0; } static PyObject * MGLSampler_get_max_lod(MGLSampler * self, void * closure) { return PyFloat_FromDouble(self->max_lod); } static int MGLSampler_set_max_lod(MGLSampler * self, PyObject * value, void * closure) { self->max_lod = (float)PyFloat_AsDouble(value); const GLMethods & gl = self->context->gl; gl.SamplerParameterf(self->sampler_obj, GL_TEXTURE_MAX_LOD, self->max_lod); return 0; } static int parse_texture_binding(PyObject * arg, TextureBinding * value) { arg = PySequence_Tuple(arg); if (!arg || PyTuple_Size(arg) != 2) { PyErr_Clear(); return 0; } PyObject * item = PyTuple_GetItem(arg, 0); int texture_type = 0; int texture_obj = 0; if (Py_TYPE(item) == MGLTexture_type) { MGLTexture * texture = (MGLTexture *)item; texture_type = texture->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; texture_obj = texture->texture_obj; } if (Py_TYPE(item) == MGLTexture3D_type) { MGLTexture3D * texture = (MGLTexture3D *)item; texture_type = GL_TEXTURE_3D; texture_obj = texture->texture_obj; } if (Py_TYPE(item) == MGLTextureCube_type) { MGLTextureCube * texture = (MGLTextureCube *)item; texture_type = GL_TEXTURE_CUBE_MAP; texture_obj = texture->texture_obj; } if (!texture_obj || !texture_obj) { return 0; } int location = PyLong_AsLong(PyTuple_GetItem(arg, 1)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } value->location = location; value->type = texture_type; value->glo = texture_obj; Py_DECREF(arg); return 1; } static int parse_buffer_binding(PyObject * arg, BufferBinding * value) { arg = PySequence_Tuple(arg); if (!arg || PyTuple_Size(arg) != 2) { PyErr_Clear(); return 0; } PyObject * item = PyTuple_GetItem(arg, 0); int buffer_obj = 0; if (Py_TYPE(item) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)item; buffer_obj = buffer->buffer_obj; } if (!buffer_obj) { return 0; } int location = PyLong_AsLong(PyTuple_GetItem(arg, 1)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } value->location = location; value->glo = buffer_obj; Py_DECREF(arg); return 1; } static int parse_sampler_binding(PyObject * arg, SamplerBinding * value) { arg = PySequence_Tuple(arg); if (!arg || PyTuple_Size(arg) != 2) { PyErr_Clear(); return 0; } PyObject * item = PyTuple_GetItem(arg, 0); // MGLSampler * sampler = NULL; // if (Py_TYPE(item) == MGLSampler_type) { // sampler = (MGLSampler *)Py_NewRef(item); // } // if (!sampler) { // return 0; // } int location = PyLong_AsLong(PyTuple_GetItem(arg, 1)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } value->location = location; // value->sampler = sampler; Py_INCREF(item); value->sampler = item; // currently this must be a python layer Sampler instance Py_DECREF(arg); return 1; } static PyObject * MGLContext_scope(MGLContext * self, PyObject * args) { MGLFramebuffer * framebuffer; PyObject * enable_flags; PyObject * textures_arg; PyObject * uniform_buffers_arg; PyObject * storage_buffers_arg; PyObject * samplers_arg; int args_ok = PyArg_ParseTuple( args, "O!OOOOO", MGLFramebuffer_type, &framebuffer, &enable_flags, &textures_arg, &uniform_buffers_arg, &storage_buffers_arg, &samplers_arg ); if (!args_ok) { return 0; } textures_arg = PySequence_Tuple(textures_arg); if (!textures_arg) { PyErr_Clear(); MGLError_Set("invalid textures"); return NULL; } uniform_buffers_arg = PySequence_Tuple(uniform_buffers_arg); if (!uniform_buffers_arg) { PyErr_Clear(); MGLError_Set("invalid uniform buffers"); return NULL; } storage_buffers_arg = PySequence_Tuple(storage_buffers_arg); if (!storage_buffers_arg) { PyErr_Clear(); MGLError_Set("invalid storage buffers"); return NULL; } samplers_arg = PySequence_Tuple(samplers_arg); if (!samplers_arg) { PyErr_Clear(); MGLError_Set("invalid samplers"); return NULL; } int flags = MGL_INVALID; if (enable_flags != Py_None) { flags = PyLong_AsLong(enable_flags); if (PyErr_Occurred()) { MGLError_Set("invalid enable_flags"); return 0; } } MGLScope * scope = PyObject_New(MGLScope, MGLScope_type); scope->released = false; Py_INCREF(self); scope->context = self; scope->enable_flags = flags; Py_INCREF(framebuffer); scope->framebuffer = framebuffer; Py_INCREF(self->bound_framebuffer); scope->old_framebuffer = self->bound_framebuffer; scope->num_textures = (int)PyTuple_Size(textures_arg); scope->num_uniform_buffers = (int)PyTuple_Size(uniform_buffers_arg); scope->num_storage_buffers = (int)PyTuple_Size(storage_buffers_arg); scope->num_samplers = (int)PyTuple_Size(samplers_arg); scope->textures = (TextureBinding *)PyMem_Malloc(scope->num_textures * sizeof(TextureBinding)); scope->uniform_buffers = (BufferBinding *)PyMem_Malloc(scope->num_uniform_buffers * sizeof(BufferBinding)); scope->storage_buffers = (BufferBinding *)PyMem_Malloc(scope->num_storage_buffers * sizeof(BufferBinding)); scope->samplers = (SamplerBinding *)PyMem_Malloc(scope->num_samplers * sizeof(SamplerBinding)); for (int i = 0; i < scope->num_textures; ++i) { if (!parse_texture_binding(PyTuple_GetItem(textures_arg, i), &scope->textures[i])) { MGLError_Set("invalid textures"); return NULL; } } for (int i = 0; i < scope->num_uniform_buffers; ++i) { if (!parse_buffer_binding(PyTuple_GetItem(uniform_buffers_arg, i), &scope->uniform_buffers[i])) { MGLError_Set("invalid uniform buffers"); return NULL; } } for (int i = 0; i < scope->num_storage_buffers; ++i) { if (!parse_buffer_binding(PyTuple_GetItem(storage_buffers_arg, i), &scope->storage_buffers[i])) { MGLError_Set("invalid storage buffers"); return NULL; } } for (int i = 0; i < scope->num_samplers; ++i) { if (!parse_sampler_binding(PyTuple_GetItem(samplers_arg, i), &scope->samplers[i])) { MGLError_Set("invalid samplers"); return NULL; } } Py_DECREF(textures_arg); Py_DECREF(uniform_buffers_arg); Py_DECREF(storage_buffers_arg); Py_DECREF(samplers_arg); Py_INCREF(scope); return (PyObject *)scope; } static PyObject * MGLScope_begin(MGLScope * self, PyObject * args) { const GLMethods & gl = self->context->gl; const int & flags = self->enable_flags; self->old_enable_flags = self->context->enable_flags; self->context->enable_flags = self->enable_flags; Py_XDECREF(MGLFramebuffer_use(self->framebuffer, NULL)); for (int i = 0; i < self->num_textures; ++i) { gl.ActiveTexture(self->textures[i].location); gl.BindTexture(self->textures[i].type, self->textures[i].glo); } for (int i = 0; i < self->num_uniform_buffers; ++i) { gl.BindBufferBase(GL_UNIFORM_BUFFER, self->uniform_buffers[i].location, self->uniform_buffers[i].glo); } for (int i = 0; i < self->num_storage_buffers; ++i) { gl.BindBufferBase(GL_SHADER_STORAGE_BUFFER, self->storage_buffers[i].location, self->storage_buffers[i].glo); } for (int i = 0; i < self->num_samplers; ++i) { PyObject * call = PyObject_CallMethod(self->samplers[i].sampler, "use", "i", self->samplers[i].location); Py_XDECREF(call); if (!call) { return NULL; } } if (flags & MGL_BLEND) { gl.Enable(GL_BLEND); } else { gl.Disable(GL_BLEND); } if (flags & MGL_DEPTH_TEST) { gl.Enable(GL_DEPTH_TEST); } else { gl.Disable(GL_DEPTH_TEST); } if (flags & MGL_CULL_FACE) { gl.Enable(GL_CULL_FACE); } else { gl.Disable(GL_CULL_FACE); } if (flags & MGL_RASTERIZER_DISCARD) { gl.Enable(GL_RASTERIZER_DISCARD); } else { gl.Disable(GL_RASTERIZER_DISCARD); } if (flags & MGL_PROGRAM_POINT_SIZE) { gl.Enable(GL_PROGRAM_POINT_SIZE); } else { gl.Disable(GL_PROGRAM_POINT_SIZE); } Py_RETURN_NONE; } static PyObject * MGLScope_end(MGLScope * self, PyObject * args) { const GLMethods & gl = self->context->gl; const int & flags = self->old_enable_flags; self->context->enable_flags = self->old_enable_flags; Py_XDECREF(MGLFramebuffer_use(self->old_framebuffer, NULL)); if (flags & MGL_BLEND) { gl.Enable(GL_BLEND); } else { gl.Disable(GL_BLEND); } if (flags & MGL_DEPTH_TEST) { gl.Enable(GL_DEPTH_TEST); } else { gl.Disable(GL_DEPTH_TEST); } if (flags & MGL_CULL_FACE) { gl.Enable(GL_CULL_FACE); } else { gl.Disable(GL_CULL_FACE); } if (flags & MGL_RASTERIZER_DISCARD) { gl.Enable(GL_RASTERIZER_DISCARD); } else { gl.Disable(GL_RASTERIZER_DISCARD); } if (flags & MGL_PROGRAM_POINT_SIZE) { gl.Enable(GL_PROGRAM_POINT_SIZE); } else { gl.Disable(GL_PROGRAM_POINT_SIZE); } Py_RETURN_NONE; } static PyObject * MGLScope_release(MGLScope * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; Py_DECREF(self->framebuffer); Py_DECREF(self->old_framebuffer); Py_DECREF(self->context); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLContext_texture(MGLContext * self, PyObject * args) { int width; int height; int components; PyObject * data; int samples; int alignment; const char * dtype; int internal_format_override; int use_renderbuffer; int args_ok = PyArg_ParseTuple( args, "(II)IOIIsIp", &width, &height, &components, &data, &samples, &alignment, &dtype, &internal_format_override, &use_renderbuffer ); if (!args_ok) { return 0; } if (components < 1 || components > 4) { MGLError_Set("the components must be 1, 2, 3 or 4"); return 0; } if ((samples & (samples - 1)) || samples > self->max_samples) { MGLError_Set("the number of samples is invalid"); return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } if (data != Py_None && samples) { MGLError_Set("multisample textures are not writable directly"); return 0; } if (data != Py_None && use_renderbuffer) { MGLError_Set("renderbuffers are not writable directly"); return 0; } MGLDataType * data_type = from_dtype(dtype); if (!data_type) { MGLError_Set("invalid dtype"); return 0; } if (use_renderbuffer) { const GLMethods & gl = self->gl; MGLRenderbuffer * renderbuffer = PyObject_New(MGLRenderbuffer, MGLRenderbuffer_type); renderbuffer->released = false; int format = data_type->internal_format[components]; renderbuffer->renderbuffer_obj = 0; gl.GenRenderbuffers(1, (GLuint *)&renderbuffer->renderbuffer_obj); if (!renderbuffer->renderbuffer_obj) { MGLError_Set("cannot create renderbuffer"); Py_DECREF(renderbuffer); return 0; } gl.BindRenderbuffer(GL_RENDERBUFFER, renderbuffer->renderbuffer_obj); if (samples == 0) { gl.RenderbufferStorage(GL_RENDERBUFFER, format, width, height); } else { gl.RenderbufferStorageMultisample(GL_RENDERBUFFER, samples, format, width, height); } renderbuffer->width = width; renderbuffer->height = height; renderbuffer->components = components; renderbuffer->samples = samples; renderbuffer->data_type = data_type; renderbuffer->depth = false; Py_INCREF(self); renderbuffer->context = self; return Py_BuildValue("(Oi)", renderbuffer, renderbuffer->renderbuffer_obj); } unsigned long long expected_size = (unsigned long long)width * components * data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height; Py_buffer buffer_view; if (data != Py_None) { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } } else { buffer_view.len = expected_size; buffer_view.buf = 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } int texture_target = samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; int pixel_type = data_type->gl_type; int base_format = data_type->base_format[components]; int internal_format = internal_format_override ? internal_format_override : data_type->internal_format[components]; const GLMethods & gl = self->gl; gl.ActiveTexture(GL_TEXTURE0 + self->default_texture_unit); MGLTexture * texture = PyObject_New(MGLTexture, MGLTexture_type); texture->released = false; texture->external = false; texture->texture_obj = 0; gl.GenTextures(1, (GLuint *)&texture->texture_obj); if (!texture->texture_obj) { MGLError_Set("cannot create texture"); Py_DECREF(texture); return 0; } gl.BindTexture(texture_target, texture->texture_obj); if (samples) { gl.TexImage2DMultisample(texture_target, samples, internal_format, width, height, true); } else { gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexImage2D(texture_target, 0, internal_format, width, height, 0, base_format, pixel_type, buffer_view.buf); if (data_type->float_type) { gl.TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl.TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } else { gl.TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_NEAREST); gl.TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } } if (data != Py_None) { PyBuffer_Release(&buffer_view); } texture->width = width; texture->height = height; texture->components = components; texture->samples = samples; texture->data_type = data_type; texture->max_level = 0; texture->compare_func = 0; texture->anisotropy = 0.0; texture->depth = false; texture->min_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->mag_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->repeat_x = true; texture->repeat_y = true; Py_INCREF(self); texture->context = self; return Py_BuildValue("(Oi)", texture, texture->texture_obj); } static PyObject * MGLContext_depth_texture(MGLContext * self, PyObject * args) { int width; int height; PyObject * data; int samples; int alignment; int use_renderbuffer; int args_ok = PyArg_ParseTuple( args, "(II)OIIp", &width, &height, &data, &samples, &alignment, &use_renderbuffer ); if (!args_ok) { return 0; } if ((samples & (samples - 1)) || samples > self->max_samples) { MGLError_Set("the number of samples is invalid"); return 0; } if (data != Py_None && samples) { MGLError_Set("multisample textures are not writable directly"); return 0; } if (data != Py_None && use_renderbuffer) { MGLError_Set("renderbuffers are not writable directly"); return 0; } if (use_renderbuffer) { const GLMethods & gl = self->gl; MGLRenderbuffer * renderbuffer = PyObject_New(MGLRenderbuffer, MGLRenderbuffer_type); renderbuffer->released = false; renderbuffer->renderbuffer_obj = 0; gl.GenRenderbuffers(1, (GLuint *)&renderbuffer->renderbuffer_obj); if (!renderbuffer->renderbuffer_obj) { MGLError_Set("cannot create renderbuffer"); Py_DECREF(renderbuffer); return 0; } gl.BindRenderbuffer(GL_RENDERBUFFER, renderbuffer->renderbuffer_obj); if (samples == 0) { gl.RenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, width, height); } else { gl.RenderbufferStorageMultisample(GL_RENDERBUFFER, samples, GL_DEPTH_COMPONENT24, width, height); } renderbuffer->width = width; renderbuffer->height = height; renderbuffer->components = 1; renderbuffer->samples = samples; renderbuffer->data_type = from_dtype("f4"); renderbuffer->depth = true; Py_INCREF(self); renderbuffer->context = self; return Py_BuildValue("(Oi)", renderbuffer, renderbuffer->renderbuffer_obj); } unsigned long long expected_size = (unsigned long long)width * 4; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height; Py_buffer buffer_view; if (data != Py_None) { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } } else { buffer_view.len = expected_size; buffer_view.buf = 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } int texture_target = samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; int pixel_type = GL_FLOAT; const GLMethods & gl = self->gl; gl.ActiveTexture(GL_TEXTURE0 + self->default_texture_unit); MGLTexture * texture = PyObject_New(MGLTexture, MGLTexture_type); texture->released = false; texture->external = false; texture->texture_obj = 0; gl.GenTextures(1, (GLuint *)&texture->texture_obj); if (!texture->texture_obj) { MGLError_Set("cannot create texture"); Py_DECREF(texture); return 0; } gl.BindTexture(texture_target, texture->texture_obj); if (samples) { gl.TexImage2DMultisample(texture_target, samples, GL_DEPTH_COMPONENT24, width, height, true); } else { gl.TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl.TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexImage2D(texture_target, 0, GL_DEPTH_COMPONENT24, width, height, 0, GL_DEPTH_COMPONENT, pixel_type, buffer_view.buf); gl.TexParameteri(texture_target, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); gl.TexParameteri(texture_target, GL_TEXTURE_COMPARE_FUNC, GL_LEQUAL); } if (data != Py_None) { PyBuffer_Release(&buffer_view); } texture->width = width; texture->height = height; texture->components = 1; texture->samples = samples; texture->data_type = from_dtype("f4"); texture->compare_func = GL_LEQUAL; texture->depth = true; texture->min_filter = GL_LINEAR; texture->mag_filter = GL_LINEAR; texture->max_level = 0; texture->repeat_x = false; texture->repeat_y = false; Py_INCREF(self); texture->context = self; return Py_BuildValue("(Oi)", texture, texture->texture_obj); } static PyObject * MGLContext_external_texture(MGLContext * self, PyObject * args) { int glo; int width; int height; int components; int samples; const char * dtype; int args_ok = PyArg_ParseTuple( args, "I(II)IIs", &glo, &width, &height, &components, &samples, &dtype ); if (!args_ok) { return NULL; } MGLDataType * data_type = from_dtype(dtype); if (!data_type) { MGLError_Set("invalid dtype"); return 0; } MGLTexture * texture = PyObject_New(MGLTexture, MGLTexture_type); texture->released = false; texture->external = true; texture->texture_obj = glo; texture->width = width; texture->height = height; texture->components = components; texture->samples = samples; texture->data_type = data_type; texture->max_level = 0; texture->compare_func = 0; texture->anisotropy = 0.0; texture->depth = false; texture->min_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->mag_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->repeat_x = true; texture->repeat_y = true; Py_INCREF(self); texture->context = self; return Py_BuildValue("(Oi)", texture, texture->texture_obj); } static PyObject * MGLTexture_read(MGLTexture * self, PyObject * args) { int level; int alignment; int args_ok = PyArg_ParseTuple( args, "II", &level, &alignment ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } if (level > self->max_level) { MGLError_Set("invalid level"); return 0; } if (self->samples) { MGLError_Set("multisample textures cannot be read directly"); return 0; } int width = self->width / (1 << level); int height = self->height / (1 << level); width = width > 1 ? width : 1; height = height > 1 ? height : 1; unsigned long long expected_size = (unsigned long long)width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height; PyObject * result = PyBytes_FromStringAndSize(0, expected_size); char * data = PyBytes_AS_STRING(result); int pixel_type = self->data_type->gl_type; int base_format = self->depth ? GL_DEPTH_COMPONENT : self->data_type->base_format[self->components]; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); // To determine the required size of pixels, use glGetTexLevelParameter to determine // the dimensions of the internal texture image, then scale the required number of pixels // by the storage required for each pixel, based on format and type. Be sure to take the // pixel storage parameters into account, especially GL_PACK_ALIGNMENT. // int pack = 0; // gl.GetIntegerv(GL_PACK_ALIGNMENT, &pack); // printf("GL_PACK_ALIGNMENT: %d\n", pack); // glGetTexLevelParameter with argument GL_TEXTURE_WIDTH // glGetTexLevelParameter with argument GL_TEXTURE_HEIGHT // glGetTexLevelParameter with argument GL_TEXTURE_INTERNAL_FORMAT // int level_width = 0; // int level_height = 0; // gl.GetTexLevelParameteriv(texture_target, 0, GL_TEXTURE_WIDTH, &level_width); // gl.GetTexLevelParameteriv(texture_target, 0, GL_TEXTURE_HEIGHT, &level_height); // printf("level_width: %d\n", level_width); // printf("level_height: %d\n", level_height); gl.GetTexImage(GL_TEXTURE_2D, level, base_format, pixel_type, data); return result; } static PyObject * MGLTexture_read_into(MGLTexture * self, PyObject * args) { PyObject * data; int level; int alignment; Py_ssize_t write_offset; int args_ok = PyArg_ParseTuple( args, "OIIn", &data, &level, &alignment, &write_offset ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } if (level > self->max_level) { MGLError_Set("invalid level"); return 0; } if (self->samples) { MGLError_Set("multisample textures cannot be read directly"); return 0; } int width = self->width / (1 << level); int height = self->height / (1 << level); width = width > 1 ? width : 1; height = height > 1 ? height : 1; unsigned long long expected_size = (unsigned long long)width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height; int pixel_type = self->data_type->gl_type; int base_format = self->depth ? GL_DEPTH_COMPONENT : self->data_type->base_format[self->components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_PIXEL_PACK_BUFFER, buffer->buffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_2D, level, base_format, pixel_type, (void *)write_offset); gl.BindBuffer(GL_PIXEL_PACK_BUFFER, 0); } else { Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_WRITABLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len < write_offset + expected_size) { MGLError_Set("the buffer is too small"); PyBuffer_Release(&buffer_view); return 0; } char * ptr = (char *)buffer_view.buf + write_offset; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_2D, level, base_format, pixel_type, ptr); PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLTexture_write(MGLTexture * self, PyObject * args) { PyObject * data; PyObject * viewport_arg; int level; int alignment; int args_ok = PyArg_ParseTuple( args, "OOII", &data, &viewport_arg, &level, &alignment ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } if (level > self->max_level) { MGLError_Set("invalid level"); return 0; } if (self->samples) { MGLError_Set("multisample textures cannot be written directly"); return 0; } Py_buffer buffer_view; int default_width = self->width / (1 << level); int default_height = self->height / (1 << level); Rect viewport_rect = rect(0, 0, default_width > 1 ? default_width : 1, default_height > 1 ? default_height : 1); if (viewport_arg != Py_None) { if (!parse_rect(viewport_arg, &viewport_rect)) { MGLError_Set("wrong values in the viewport"); return NULL; } } unsigned long long expected_size = (unsigned long long)viewport_rect.width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * viewport_rect.height; int pixel_type = self->data_type->gl_type; int format = self->depth ? GL_DEPTH_COMPONENT : self->data_type->base_format[self->components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer->buffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexSubImage2D(GL_TEXTURE_2D, level, viewport_rect.x, viewport_rect.y, viewport_rect.width, viewport_rect.height, format, pixel_type, 0); gl.BindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); } else { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexSubImage2D(GL_TEXTURE_2D, level, viewport_rect.x, viewport_rect.y, viewport_rect.width, viewport_rect.height, format, pixel_type, buffer_view.buf); PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLTexture_meth_bind(MGLTexture * self, PyObject * args) { int unit; int read; int write; int level; int format; int args_ok = PyArg_ParseTuple( args, "IppII", &unit, &read, &write, &level, &format ); if (!args_ok) { return NULL; } int access = GL_READ_WRITE; if (read && !write) access = GL_READ_ONLY; else if (!read && write) access = GL_WRITE_ONLY; else if (!read && !write) { MGLError_Set("Illegal access mode. Read or write needs to be enabled."); return NULL; } int frmt = format ? format : self->data_type->internal_format[self->components]; const GLMethods & gl = self->context->gl; gl.BindImageTexture(unit, self->texture_obj, level, 0, 0, access, frmt); Py_RETURN_NONE; } static PyObject * MGLTexture_use(MGLTexture * self, PyObject * args) { int index; int args_ok = PyArg_ParseTuple( args, "I", &index ); if (!args_ok) { return 0; } int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + index); gl.BindTexture(texture_target, self->texture_obj); Py_RETURN_NONE; } static PyObject * MGLTexture_build_mipmaps(MGLTexture * self, PyObject * args) { int base = 0; int max = 1000; int args_ok = PyArg_ParseTuple( args, "II", &base, &max ); if (!args_ok) { return 0; } if (base > self->max_level) { MGLError_Set("invalid base"); return 0; } int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); gl.TexParameteri(texture_target, GL_TEXTURE_BASE_LEVEL, base); gl.TexParameteri(texture_target, GL_TEXTURE_MAX_LEVEL, max); gl.GenerateMipmap(texture_target); gl.TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); gl.TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); self->min_filter = GL_LINEAR_MIPMAP_LINEAR; self->mag_filter = GL_LINEAR; self->max_level = max; Py_RETURN_NONE; } static PyObject * MGLTexture_get_handle(MGLTexture * self, PyObject * args) { int resident = true; if(!PyArg_ParseTuple(args, "|p", &resident)) { return NULL; } const GLMethods & gl = self->context->gl; unsigned long long handle = gl.GetTextureHandleARB(self->texture_obj); if (resident) { gl.MakeTextureHandleResidentARB(handle); } else { gl.MakeTextureHandleNonResidentARB(handle); } return PyLong_FromUnsignedLongLong(handle); } static PyObject * MGLTexture_release(MGLTexture * self, PyObject * args) { if (self->released || self->external) { Py_RETURN_NONE; } self->released = true; const GLMethods & gl = self->context->gl; gl.DeleteTextures(1, (GLuint *)&self->texture_obj); Py_DECREF(self->context); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLTexture_get_repeat_x(MGLTexture * self, void * closure) { return PyBool_FromLong(self->repeat_x); } static int MGLTexture_set_repeat_x(MGLTexture * self, PyObject * value, void * closure) { int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); if (value == Py_True) { gl.TexParameteri(texture_target, GL_TEXTURE_WRAP_S, GL_REPEAT); self->repeat_x = true; return 0; } else if (value == Py_False) { gl.TexParameteri(texture_target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); self->repeat_x = false; return 0; } else { MGLError_Set("invalid value for texture_x"); return -1; } } static PyObject * MGLTexture_get_repeat_y(MGLTexture * self, void * closure) { return PyBool_FromLong(self->repeat_y); } static int MGLTexture_set_repeat_y(MGLTexture * self, PyObject * value, void * closure) { int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); if (value == Py_True) { gl.TexParameteri(texture_target, GL_TEXTURE_WRAP_T, GL_REPEAT); self->repeat_y = true; return 0; } else if (value == Py_False) { gl.TexParameteri(texture_target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); self->repeat_y = false; return 0; } else { MGLError_Set("invalid value for texture_y"); return -1; } } static PyObject * MGLTexture_get_filter(MGLTexture * self, void * closure) { return Py_BuildValue("(ii)", self->min_filter, self->mag_filter); } static int MGLTexture_set_filter(MGLTexture * self, PyObject * value, void * closure) { if (!parse_filter(value, &self->min_filter, &self->mag_filter)) { MGLError_Set("invalid filter"); return -1; } int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); gl.TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, self->min_filter); gl.TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, self->mag_filter); return 0; } static PyObject * MGLTexture_get_swizzle(MGLTexture * self, void * closure) { if (self->depth) { MGLError_Set("cannot get swizzle of depth textures"); return 0; } int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); int swizzle_r = 0; int swizzle_g = 0; int swizzle_b = 0; int swizzle_a = 0; gl.GetTexParameteriv(texture_target, GL_TEXTURE_SWIZZLE_R, &swizzle_r); gl.GetTexParameteriv(texture_target, GL_TEXTURE_SWIZZLE_G, &swizzle_g); gl.GetTexParameteriv(texture_target, GL_TEXTURE_SWIZZLE_B, &swizzle_b); gl.GetTexParameteriv(texture_target, GL_TEXTURE_SWIZZLE_A, &swizzle_a); char swizzle[5] = { char_from_swizzle(swizzle_r), char_from_swizzle(swizzle_g), char_from_swizzle(swizzle_b), char_from_swizzle(swizzle_a), 0, }; return PyUnicode_FromStringAndSize(swizzle, 4); } static int MGLTexture_set_swizzle(MGLTexture * self, PyObject * value, void * closure) { const char * swizzle = PyUnicode_AsUTF8(value); if (self->depth) { MGLError_Set("cannot set swizzle for depth textures"); return -1; } if (!swizzle[0]) { MGLError_Set("the swizzle is empty"); return -1; } int tex_swizzle[4] = {-1, -1, -1, -1}; for (int i = 0; swizzle[i]; ++i) { if (i > 3) { MGLError_Set("the swizzle is too long"); return -1; } tex_swizzle[i] = swizzle_from_char(swizzle[i]); if (tex_swizzle[i] == -1) { MGLError_Set("'%c' is not a valid swizzle parameter", swizzle[i]); return -1; } } int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); gl.TexParameteri(texture_target, GL_TEXTURE_SWIZZLE_R, tex_swizzle[0]); if (tex_swizzle[1] != -1) { gl.TexParameteri(texture_target, GL_TEXTURE_SWIZZLE_G, tex_swizzle[1]); if (tex_swizzle[2] != -1) { gl.TexParameteri(texture_target, GL_TEXTURE_SWIZZLE_B, tex_swizzle[2]); if (tex_swizzle[3] != -1) { gl.TexParameteri(texture_target, GL_TEXTURE_SWIZZLE_A, tex_swizzle[3]); } } } return 0; } static PyObject * MGLTexture_get_compare_func(MGLTexture * self, void * closure) { if (!self->depth) { MGLError_Set("only depth textures have compare_func"); return 0; } return compare_func_to_string(self->compare_func); } static int MGLTexture_set_compare_func(MGLTexture * self, PyObject * value, void * closure) { if (!self->depth) { MGLError_Set("only depth textures have compare_func"); return -1; } int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const char * func = PyUnicode_AsUTF8(value); if (PyErr_Occurred()) { return -1; } self->compare_func = compare_func_from_string(func); const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); if (self->compare_func == 0) { gl.TexParameteri(texture_target, GL_TEXTURE_COMPARE_MODE, GL_NONE); } else { gl.TexParameteri(texture_target, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); gl.TexParameteri(texture_target, GL_TEXTURE_COMPARE_FUNC, self->compare_func); } return 0; } static PyObject * MGLTexture_get_anisotropy(MGLTexture * self, void * closure) { return PyFloat_FromDouble(self->anisotropy); } static int MGLTexture_set_anisotropy(MGLTexture * self, PyObject * value, void * closure) { if (self->context->max_anisotropy == 0) return 0; self->anisotropy = (float)MGL_MIN(MGL_MAX(PyFloat_AsDouble(value), 1.0), self->context->max_anisotropy); int texture_target = self->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); gl.TexParameterf(texture_target, GL_TEXTURE_MAX_ANISOTROPY, self->anisotropy); return 0; } static PyObject * MGLContext_texture3d(MGLContext * self, PyObject * args) { int width; int height; int depth; int components; PyObject * data; int alignment; const char * dtype; int args_ok = PyArg_ParseTuple( args, "(III)IOIs", &width, &height, &depth, &components, &data, &alignment, &dtype ); if (!args_ok) { return 0; } if (components < 1 || components > 4) { MGLError_Set("the components must be 1, 2, 3 or 4"); return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } MGLDataType * data_type = from_dtype(dtype); if (!data_type) { MGLError_Set("invalid dtype"); return 0; } unsigned long long expected_size = (unsigned long long)width * components * data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height * depth; Py_buffer buffer_view; if (data != Py_None) { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } } else { buffer_view.len = expected_size; buffer_view.buf = 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } int pixel_type = data_type->gl_type; int base_format = data_type->base_format[components]; int internal_format = data_type->internal_format[components]; const GLMethods & gl = self->gl; MGLTexture3D * texture = PyObject_New(MGLTexture3D, MGLTexture3D_type); texture->released = false; texture->texture_obj = 0; gl.GenTextures(1, (GLuint *)&texture->texture_obj); if (!texture->texture_obj) { MGLError_Set("cannot create texture"); Py_DECREF(texture); return 0; } gl.ActiveTexture(GL_TEXTURE0 + self->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, texture->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexImage3D(GL_TEXTURE_3D, 0, internal_format, width, height, depth, 0, base_format, pixel_type, buffer_view.buf); if (data_type->float_type) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } else { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } if (data != Py_None) { PyBuffer_Release(&buffer_view); } texture->width = width; texture->height = height; texture->depth = depth; texture->components = components; texture->data_type = data_type; texture->min_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->mag_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->max_level = 0; texture->repeat_x = true; texture->repeat_y = true; texture->repeat_z = true; Py_INCREF(self); texture->context = self; return Py_BuildValue("(Oi)", texture, texture->texture_obj); } static PyObject * MGLTexture3D_read(MGLTexture3D * self, PyObject * args) { int alignment; int args_ok = PyArg_ParseTuple( args, "I", &alignment ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } unsigned long long expected_size = (unsigned long long)self->width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * self->height * self->depth; PyObject * result = PyBytes_FromStringAndSize(0, expected_size); char * data = PyBytes_AS_STRING(result); int pixel_type = self->data_type->gl_type; int base_format = self->data_type->base_format[self->components]; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_3D, 0, base_format, pixel_type, data); return result; } static PyObject * MGLTexture3D_read_into(MGLTexture3D * self, PyObject * args) { PyObject * data; int alignment; Py_ssize_t write_offset; int args_ok = PyArg_ParseTuple( args, "OIn", &data, &alignment, &write_offset ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } unsigned long long expected_size = (unsigned long long)self->width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * self->height * self->depth; int pixel_type = self->data_type->gl_type; int format = self->data_type->base_format[self->components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_PIXEL_PACK_BUFFER, buffer->buffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_3D, 0, format, pixel_type, (void *)write_offset); gl.BindBuffer(GL_PIXEL_PACK_BUFFER, 0); } else { Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_WRITABLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len < write_offset + expected_size) { MGLError_Set("the buffer is too small"); PyBuffer_Release(&buffer_view); return 0; } char * ptr = (char *)buffer_view.buf + write_offset; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_3D, 0, format, pixel_type, ptr); PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLTexture3D_write(MGLTexture3D * self, PyObject * args) { PyObject * data; PyObject * viewport_arg; int alignment; int args_ok = PyArg_ParseTuple( args, "OOI", &data, &viewport_arg, &alignment ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } Py_buffer buffer_view; Cube viewport_cube = cube(0, 0, 0, self->width, self->height, self->depth); if (viewport_arg != Py_None) { if (!parse_cube(viewport_arg, &viewport_cube)) { MGLError_Set("wrong values in the viewport"); return NULL; } } unsigned long long expected_size = (unsigned long long)viewport_cube.width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * viewport_cube.height * viewport_cube.depth; int pixel_type = self->data_type->gl_type; int format = self->data_type->base_format[self->components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer->buffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexSubImage3D(GL_TEXTURE_3D, 0, viewport_cube.x, viewport_cube.y, viewport_cube.z, viewport_cube.width, viewport_cube.height, viewport_cube.depth, format, pixel_type, 0); gl.BindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); } else { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexSubImage3D(GL_TEXTURE_3D, 0, viewport_cube.x, viewport_cube.y, viewport_cube.z, viewport_cube.width, viewport_cube.height, viewport_cube.depth, format, pixel_type, buffer_view.buf); PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLTexture3D_meth_bind(MGLTexture3D * self, PyObject * args) { int unit; int read; int write; int level; int format; int args_ok = PyArg_ParseTuple( args, "IppII", &unit, &read, &write, &level, &format ); if (!args_ok) { return NULL; } int access = GL_READ_WRITE; if (read && !write) access = GL_READ_ONLY; else if (!read && write) access = GL_WRITE_ONLY; else if (!read && !write) { MGLError_Set("Illegal access mode. Read or write needs to be enabled."); return NULL; } int frmt = format ? format : self->data_type->internal_format[self->components]; const GLMethods & gl = self->context->gl; // NOTE: 3D textures must be bound as layered to access the outside z=0 gl.BindImageTexture(unit, self->texture_obj, level, GL_TRUE, 0, access, frmt); Py_RETURN_NONE; } static PyObject * MGLTexture3D_use(MGLTexture3D * self, PyObject * args) { int index; int args_ok = PyArg_ParseTuple( args, "I", &index ); if (!args_ok) { return 0; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + index); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); Py_RETURN_NONE; } static PyObject * MGLTexture3D_build_mipmaps(MGLTexture3D * self, PyObject * args) { int base = 0; int max = 1000; int args_ok = PyArg_ParseTuple( args, "II", &base, &max ); if (!args_ok) { return 0; } if (base > self->max_level) { MGLError_Set("invalid base"); return 0; } int texture_target = GL_TEXTURE_3D; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); gl.TexParameteri(texture_target, GL_TEXTURE_BASE_LEVEL, base); gl.TexParameteri(texture_target, GL_TEXTURE_MAX_LEVEL, max); gl.GenerateMipmap(texture_target); gl.TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); gl.TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); self->min_filter = GL_LINEAR_MIPMAP_LINEAR; self->mag_filter = GL_LINEAR; self->max_level = max; Py_RETURN_NONE; } static PyObject * MGLTexture3D_get_handle(MGLTexture3D * self, PyObject * args) { int resident = true; if(!PyArg_ParseTuple(args, "|p", &resident)) { return NULL; } const GLMethods & gl = self->context->gl; unsigned long long handle = gl.GetTextureHandleARB(self->texture_obj); if (resident) { gl.MakeTextureHandleResidentARB(handle); } else { gl.MakeTextureHandleNonResidentARB(handle); } return PyLong_FromUnsignedLongLong(handle); } static PyObject * MGLTexture3D_release(MGLTexture3D * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; const GLMethods & gl = self->context->gl; gl.DeleteTextures(1, (GLuint *)&self->texture_obj); Py_DECREF(self->context); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLTexture3D_get_repeat_x(MGLTexture3D * self, void * closure) { return PyBool_FromLong(self->repeat_x); } static int MGLTexture3D_set_repeat_x(MGLTexture3D * self, PyObject * value, void * closure) { const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); if (value == Py_True) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_REPEAT); self->repeat_x = true; return 0; } else if (value == Py_False) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); self->repeat_x = false; return 0; } else { MGLError_Set("invalid value for texture_x"); return -1; } } static PyObject * MGLTexture3D_get_repeat_y(MGLTexture3D * self, void * closure) { return PyBool_FromLong(self->repeat_y); } static int MGLTexture3D_set_repeat_y(MGLTexture3D * self, PyObject * value, void * closure) { const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); if (value == Py_True) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_REPEAT); self->repeat_y = true; return 0; } else if (value == Py_False) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); self->repeat_y = false; return 0; } else { MGLError_Set("invalid value for texture_y"); return -1; } } static PyObject * MGLTexture3D_get_repeat_z(MGLTexture3D * self, void * closure) { return PyBool_FromLong(self->repeat_z); } static int MGLTexture3D_set_repeat_z(MGLTexture3D * self, PyObject * value, void * closure) { const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); if (value == Py_True) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_REPEAT); self->repeat_z = true; return 0; } else if (value == Py_False) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); self->repeat_z = false; return 0; } else { MGLError_Set("invalid value for texture_z"); return -1; } } static PyObject * MGLTexture3D_get_filter(MGLTexture3D * self, void * closure) { return Py_BuildValue("(ii)", self->min_filter, self->mag_filter); } static int MGLTexture3D_set_filter(MGLTexture3D * self, PyObject * value, void * closure) { if (!parse_filter(value, &self->min_filter, &self->mag_filter)) { MGLError_Set("invalid filter"); return -1; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, self->min_filter); gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, self->mag_filter); return 0; } static PyObject * MGLTexture3D_get_swizzle(MGLTexture3D * self, void * closure) { const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); int swizzle_r = 0; int swizzle_g = 0; int swizzle_b = 0; int swizzle_a = 0; gl.GetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_R, &swizzle_r); gl.GetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_G, &swizzle_g); gl.GetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_B, &swizzle_b); gl.GetTexParameteriv(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_A, &swizzle_a); char swizzle[5] = { char_from_swizzle(swizzle_r), char_from_swizzle(swizzle_g), char_from_swizzle(swizzle_b), char_from_swizzle(swizzle_a), 0, }; return PyUnicode_FromStringAndSize(swizzle, 4); } static int MGLTexture3D_set_swizzle(MGLTexture3D * self, PyObject * value, void * closure) { const char * swizzle = PyUnicode_AsUTF8(value); if (!swizzle[0]) { MGLError_Set("the swizzle is empty"); return -1; } int tex_swizzle[4] = {-1, -1, -1, -1}; for (int i = 0; swizzle[i]; ++i) { if (i > 3) { MGLError_Set("the swizzle is too long"); return -1; } tex_swizzle[i] = swizzle_from_char(swizzle[i]); if (tex_swizzle[i] == -1) { MGLError_Set("'%c' is not a valid swizzle parameter", swizzle[i]); return -1; } } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_3D, self->texture_obj); gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_R, tex_swizzle[0]); if (tex_swizzle[1] != -1) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_G, tex_swizzle[1]); if (tex_swizzle[2] != -1) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_B, tex_swizzle[2]); if (tex_swizzle[3] != -1) { gl.TexParameteri(GL_TEXTURE_3D, GL_TEXTURE_SWIZZLE_A, tex_swizzle[3]); } } } return 0; } static PyObject * MGLContext_texture_array(MGLContext * self, PyObject * args) { int width; int height; int layers; int components; PyObject * data; int alignment; const char * dtype; int args_ok = PyArg_ParseTuple( args, "(III)IOIs", &width, &height, &layers, &components, &data, &alignment, &dtype ); if (!args_ok) { return 0; } if (components < 1 || components > 4) { MGLError_Set("the components must be 1, 2, 3 or 4"); return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } MGLDataType * data_type = from_dtype(dtype); if (!data_type) { MGLError_Set("invalid dtype"); return 0; } unsigned long long expected_size = (unsigned long long)width * components * data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height * layers; Py_buffer buffer_view; if (data != Py_None) { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } } else { buffer_view.len = expected_size; buffer_view.buf = 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } int pixel_type = data_type->gl_type; int base_format = data_type->base_format[components]; int internal_format = data_type->internal_format[components]; const GLMethods & gl = self->gl; gl.ActiveTexture(GL_TEXTURE0 + self->default_texture_unit); MGLTextureArray * texture = PyObject_New(MGLTextureArray, MGLTextureArray_type); texture->released = false; texture->texture_obj = 0; gl.GenTextures(1, (GLuint *)&texture->texture_obj); if (!texture->texture_obj) { MGLError_Set("cannot create texture"); Py_DECREF(texture); return 0; } gl.BindTexture(GL_TEXTURE_2D_ARRAY, texture->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexImage3D(GL_TEXTURE_2D_ARRAY, 0, internal_format, width, height, layers, 0, base_format, pixel_type, buffer_view.buf); if (data_type->float_type) { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } else { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_NEAREST); gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } if (data != Py_None) { PyBuffer_Release(&buffer_view); } texture->width = width; texture->height = height; texture->layers = layers; texture->components = components; texture->data_type = data_type; texture->min_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->mag_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->repeat_x = true; texture->repeat_y = true; texture->anisotropy = 0.0; texture->max_level = 0; Py_INCREF(self); texture->context = self; return Py_BuildValue("(Oi)", texture, texture->texture_obj); } static PyObject * MGLTextureArray_read(MGLTextureArray * self, PyObject * args) { int alignment; int args_ok = PyArg_ParseTuple( args, "I", &alignment ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } unsigned long long expected_size = (unsigned long long)self->width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * self->height * self->layers; PyObject * result = PyBytes_FromStringAndSize(0, expected_size); char * data = PyBytes_AS_STRING(result); int pixel_type = self->data_type->gl_type; int base_format = self->data_type->base_format[self->components]; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); // To determine the required size of pixels, use glGetTexLevelParameter to determine // the dimensions of the internal texture image, then scale the required number of pixels // by the storage required for each pixel, based on format and type. Be sure to take the // pixel storage parameters into account, especially GL_PACK_ALIGNMENT. // int pack = 0; // gl.GetIntegerv(GL_PACK_ALIGNMENT, &pack); // printf("GL_PACK_ALIGNMENT: %d\n", pack); // glGetTexLevelParameter with argument GL_TEXTURE_WIDTH // glGetTexLevelParameter with argument GL_TEXTURE_HEIGHT // glGetTexLevelParameter with argument GL_TEXTURE_INTERNAL_FORMAT // int level_width = 0; // int level_height = 0; // gl.GetTexLevelParameteriv(GL_TEXTURE_2D_ARRAY, 0, GL_TEXTURE_WIDTH, &level_width); // gl.GetTexLevelParameteriv(GL_TEXTURE_2D_ARRAY, 0, GL_TEXTURE_HEIGHT, &level_height); // printf("level_width: %d\n", level_width); // printf("level_height: %d\n", level_height); gl.GetTexImage(GL_TEXTURE_2D_ARRAY, 0, base_format, pixel_type, data); return result; } static PyObject * MGLTextureArray_read_into(MGLTextureArray * self, PyObject * args) { PyObject * data; int alignment; Py_ssize_t write_offset; int args_ok = PyArg_ParseTuple( args, "OIn", &data, &alignment, &write_offset ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } unsigned long long expected_size = (unsigned long long)self->width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * self->height * self->layers; int pixel_type = self->data_type->gl_type; int format = self->data_type->base_format[self->components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_PIXEL_PACK_BUFFER, buffer->buffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_2D_ARRAY, 0, format, pixel_type, (void *)write_offset); gl.BindBuffer(GL_PIXEL_PACK_BUFFER, 0); } else { Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_WRITABLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len < write_offset + expected_size) { MGLError_Set("the buffer is too small"); PyBuffer_Release(&buffer_view); return 0; } char * ptr = (char *)buffer_view.buf + write_offset; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_2D_ARRAY, 0, format, pixel_type, ptr); PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLTextureArray_write(MGLTextureArray * self, PyObject * args) { PyObject * data; PyObject * viewport_arg; int alignment; int args_ok = PyArg_ParseTuple( args, "OOI", &data, &viewport_arg, &alignment ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } Py_buffer buffer_view; Cube viewport_cube = cube(0, 0, 0, self->width, self->height, self->layers); if (viewport_arg != Py_None) { if (!parse_cube(viewport_arg, &viewport_cube)) { MGLError_Set("wrong values in the viewport"); return NULL; } } unsigned long long expected_size = (unsigned long long)viewport_cube.width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * viewport_cube.height * viewport_cube.depth; int pixel_type = self->data_type->gl_type; int format = self->data_type->base_format[self->components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer->buffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, viewport_cube.x, viewport_cube.y, viewport_cube.z, viewport_cube.width, viewport_cube.height, viewport_cube.depth, format, pixel_type, 0); gl.BindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); } else { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, viewport_cube.x, viewport_cube.y, viewport_cube.z, viewport_cube.width, viewport_cube.height, viewport_cube.depth, format, pixel_type, buffer_view.buf); PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLTextureArray_meth_bind(MGLTextureArray * self, PyObject * args) { int unit; int read; int write; int level; int format; int args_ok = PyArg_ParseTuple( args, "IppII", &unit, &read, &write, &level, &format ); if (!args_ok) { return NULL; } int access = GL_READ_WRITE; if (read && !write) access = GL_READ_ONLY; else if (!read && write) access = GL_WRITE_ONLY; else if (!read && !write) { MGLError_Set("Illegal access mode. Read or write needs to be enabled."); return NULL; } int frmt = format ? format : self->data_type->internal_format[self->components]; const GLMethods & gl = self->context->gl; // NOTE: Texture array must be bound as layered to expose all layers gl.BindImageTexture(unit, self->texture_obj, level, GL_TRUE, 0, access, frmt); Py_RETURN_NONE; } static PyObject * MGLTextureArray_use(MGLTextureArray * self, PyObject * args) { int index; int args_ok = PyArg_ParseTuple( args, "I", &index ); if (!args_ok) { return 0; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + index); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); Py_RETURN_NONE; } static PyObject * MGLTextureArray_build_mipmaps(MGLTextureArray * self, PyObject * args) { int base = 0; int max = 1000; int args_ok = PyArg_ParseTuple( args, "II", &base, &max ); if (!args_ok) { return 0; } if (base > self->max_level) { MGLError_Set("invalid base"); return 0; } int texture_target = GL_TEXTURE_2D_ARRAY; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); gl.TexParameteri(texture_target, GL_TEXTURE_BASE_LEVEL, base); gl.TexParameteri(texture_target, GL_TEXTURE_MAX_LEVEL, max); gl.GenerateMipmap(texture_target); gl.TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); gl.TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); self->min_filter = GL_LINEAR_MIPMAP_LINEAR; self->mag_filter = GL_LINEAR; self->max_level = max; Py_RETURN_NONE; } static PyObject * MGLTextureArray_get_handle(MGLTextureArray * self, PyObject * args) { int resident = true; if(!PyArg_ParseTuple(args, "|p", &resident)) { return NULL; } const GLMethods & gl = self->context->gl; unsigned long long handle = gl.GetTextureHandleARB(self->texture_obj); if (resident) { gl.MakeTextureHandleResidentARB(handle); } else { gl.MakeTextureHandleNonResidentARB(handle); } return PyLong_FromUnsignedLongLong(handle); } static PyObject * MGLTextureArray_release(MGLTextureArray * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; const GLMethods & gl = self->context->gl; gl.DeleteTextures(1, (GLuint *)&self->texture_obj); Py_DECREF(self->context); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLTextureArray_get_repeat_x(MGLTextureArray * self, void * closure) { return PyBool_FromLong(self->repeat_x); } static int MGLTextureArray_set_repeat_x(MGLTextureArray * self, PyObject * value, void * closure) { const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); if (value == Py_True) { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT); self->repeat_x = true; return 0; } else if (value == Py_False) { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); self->repeat_x = false; return 0; } else { MGLError_Set("invalid value for texture_x"); return -1; } } static PyObject * MGLTextureArray_get_repeat_y(MGLTextureArray * self, void * closure) { return PyBool_FromLong(self->repeat_y); } static int MGLTextureArray_set_repeat_y(MGLTextureArray * self, PyObject * value, void * closure) { const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); if (value == Py_True) { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_REPEAT); self->repeat_y = true; return 0; } else if (value == Py_False) { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); self->repeat_y = false; return 0; } else { MGLError_Set("invalid value for texture_y"); return -1; } } static PyObject * MGLTextureArray_get_filter(MGLTextureArray * self, void * closure) { return Py_BuildValue("(ii)", self->min_filter, self->mag_filter); } static int MGLTextureArray_set_filter(MGLTextureArray * self, PyObject * value, void * closure) { if (!parse_filter(value, &self->min_filter, &self->mag_filter)) { MGLError_Set("invalid filter"); return -1; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, self->min_filter); gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, self->mag_filter); return 0; } static PyObject * MGLTextureArray_get_swizzle(MGLTextureArray * self, void * closure) { const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); int swizzle_r = 0; int swizzle_g = 0; int swizzle_b = 0; int swizzle_a = 0; gl.GetTexParameteriv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_SWIZZLE_R, &swizzle_r); gl.GetTexParameteriv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_SWIZZLE_G, &swizzle_g); gl.GetTexParameteriv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_SWIZZLE_B, &swizzle_b); gl.GetTexParameteriv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_SWIZZLE_A, &swizzle_a); char swizzle[5] = { char_from_swizzle(swizzle_r), char_from_swizzle(swizzle_g), char_from_swizzle(swizzle_b), char_from_swizzle(swizzle_a), 0, }; return PyUnicode_FromStringAndSize(swizzle, 4); } static int MGLTextureArray_set_swizzle(MGLTextureArray * self, PyObject * value, void * closure) { const char * swizzle = PyUnicode_AsUTF8(value); if (!swizzle[0]) { MGLError_Set("the swizzle is empty"); return -1; } int tex_swizzle[4] = {-1, -1, -1, -1}; for (int i = 0; swizzle[i]; ++i) { if (i > 3) { MGLError_Set("the swizzle is too long"); return -1; } tex_swizzle[i] = swizzle_from_char(swizzle[i]); if (tex_swizzle[i] == -1) { MGLError_Set("'%c' is not a valid swizzle parameter", swizzle[i]); return -1; } } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_SWIZZLE_R, tex_swizzle[0]); if (tex_swizzle[1] != -1) { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_SWIZZLE_G, tex_swizzle[1]); if (tex_swizzle[2] != -1) { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_SWIZZLE_B, tex_swizzle[2]); if (tex_swizzle[3] != -1) { gl.TexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_SWIZZLE_A, tex_swizzle[3]); } } } return 0; } static PyObject * MGLTextureArray_get_anisotropy(MGLTextureArray * self, void * closure) { return PyFloat_FromDouble(self->anisotropy); } static int MGLTextureArray_set_anisotropy(MGLTextureArray * self, PyObject * value, void * closure) { if (self->context->max_anisotropy == 0) return 0; self->anisotropy = (float)MGL_MIN(MGL_MAX(PyFloat_AsDouble(value), 1.0), self->context->max_anisotropy); const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D_ARRAY, self->texture_obj); gl.TexParameterf(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAX_ANISOTROPY, self->anisotropy); return 0; } static PyObject * MGLContext_texture_cube(MGLContext * self, PyObject * args) { int width; int height; int components; PyObject * data; int alignment; const char * dtype; int internal_format_override; int args_ok = PyArg_ParseTuple( args, "(II)IOIsI", &width, &height, &components, &data, &alignment, &dtype, &internal_format_override ); if (!args_ok) { return 0; } if (components < 1 || components > 4) { MGLError_Set("the components must be 1, 2, 3 or 4"); return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } MGLDataType * data_type = from_dtype(dtype); if (!data_type) { MGLError_Set("invalid dtype"); return 0; } unsigned long long expected_size = (unsigned long long)width * components * data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height * 6; Py_buffer buffer_view; if (data != Py_None) { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } } else { buffer_view.len = expected_size; buffer_view.buf = 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } int pixel_type = data_type->gl_type; int base_format = data_type->base_format[components]; int internal_format = internal_format_override ? internal_format_override : data_type->internal_format[components]; const GLMethods & gl = self->gl; MGLTextureCube * texture = PyObject_New(MGLTextureCube, MGLTextureCube_type); texture->released = false; texture->texture_obj = 0; gl.GenTextures(1, (GLuint *)&texture->texture_obj); if (!texture->texture_obj) { MGLError_Set("cannot create texture"); Py_DECREF(texture); return 0; } gl.ActiveTexture(GL_TEXTURE0 + self->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, texture->texture_obj); if (data == Py_None) { expected_size = 0; } const char * ptr[6] = { (const char *)buffer_view.buf + expected_size * 0 / 6, (const char *)buffer_view.buf + expected_size * 1 / 6, (const char *)buffer_view.buf + expected_size * 2 / 6, (const char *)buffer_view.buf + expected_size * 3 / 6, (const char *)buffer_view.buf + expected_size * 4 / 6, (const char *)buffer_view.buf + expected_size * 5 / 6, }; gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[0]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[1]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[2]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[3]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[4]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[5]); if (data_type->float_type) { gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); } else { gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_NEAREST); gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_NEAREST); } if (data != Py_None) { PyBuffer_Release(&buffer_view); } texture->width = width; texture->height = height; texture->components = components; texture->data_type = data_type; texture->depth = false; texture->min_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->mag_filter = data_type->float_type ? GL_LINEAR : GL_NEAREST; texture->max_level = 0; texture->anisotropy = 0.0; Py_INCREF(self); texture->context = self; return Py_BuildValue("(Oi)", texture, texture->texture_obj); } static PyObject * MGLContext_depth_texture_cube(MGLContext * self, PyObject * args) { int width; int height; PyObject * data; int alignment; int args_ok = PyArg_ParseTuple( args, "(II)OI", &width, &height, &data, &alignment ); if (!args_ok) { return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } unsigned long long expected_size = (unsigned long long)width * 4; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height * 6; Py_buffer buffer_view; if (data != Py_None) { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } } else { buffer_view.len = expected_size; buffer_view.buf = 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); if (data != Py_None) { PyBuffer_Release(&buffer_view); } return 0; } int pixel_type = GL_FLOAT; int base_format = GL_DEPTH_COMPONENT; int internal_format = GL_DEPTH_COMPONENT; const GLMethods & gl = self->gl; MGLTextureCube * texture = PyObject_New(MGLTextureCube, MGLTextureCube_type); texture->released = false; texture->texture_obj = 0; gl.GenTextures(1, (GLuint *)&texture->texture_obj); if (!texture->texture_obj) { MGLError_Set("cannot create texture"); Py_DECREF(texture); return 0; } gl.ActiveTexture(GL_TEXTURE0 + self->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, texture->texture_obj); if (data == Py_None) { expected_size = 0; } const char * ptr[6] = { (const char *)buffer_view.buf + expected_size * 0 / 6, (const char *)buffer_view.buf + expected_size * 1 / 6, (const char *)buffer_view.buf + expected_size * 2 / 6, (const char *)buffer_view.buf + expected_size * 3 / 6, (const char *)buffer_view.buf + expected_size * 4 / 6, (const char *)buffer_view.buf + expected_size * 5 / 6, }; gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[0]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_X, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[1]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Y, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[2]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Y, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[3]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_Z, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[4]); gl.TexImage2D(GL_TEXTURE_CUBE_MAP_NEGATIVE_Z, 0, internal_format, width, height, 0, base_format, pixel_type, ptr[5]); gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, GL_LINEAR); gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR); if (data != Py_None) { PyBuffer_Release(&buffer_view); } texture->depth = true; texture->width = width; texture->height = height; texture->components = 1; texture->data_type = from_dtype("f4"); texture->compare_func = GL_LEQUAL; texture->min_filter = GL_LINEAR; texture->mag_filter = GL_LINEAR; texture->max_level = 0; Py_INCREF(self); texture->context = self; return Py_BuildValue("(Oi)", texture, texture->texture_obj); } static PyObject * MGLTextureCube_read(MGLTextureCube * self, PyObject * args) { int face; int alignment; int args_ok = PyArg_ParseTuple( args, "iI", &face, &alignment ); if (!args_ok) { return 0; } if (face < 0 || face > 5) { MGLError_Set("the face must be 0, 1, 2, 3, 4 or 5"); return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } unsigned long long expected_size = (unsigned long long)self->width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * self->height; PyObject * result = PyBytes_FromStringAndSize(0, expected_size); char * data = PyBytes_AS_STRING(result); int pixel_type = self->data_type->gl_type; int format = self->depth ? GL_DEPTH_COMPONENT : self->data_type->base_format[self->components]; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, format, pixel_type, data); return result; } static PyObject * MGLTextureCube_read_into(MGLTextureCube * self, PyObject * args) { PyObject * data; int face; int alignment; Py_ssize_t write_offset; int args_ok = PyArg_ParseTuple( args, "OiIn", &data, &face, &alignment, &write_offset ); if (!args_ok) { return 0; } if (face < 0 || face > 5) { MGLError_Set("the face must be 0, 1, 2, 3, 4 or 5"); return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } unsigned long long expected_size = (unsigned long long)self->width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * self->height; int pixel_type = self->data_type->gl_type; int format = self->depth ? GL_DEPTH_COMPONENT : self->data_type->base_format[self->components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_PIXEL_PACK_BUFFER, buffer->buffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, format, pixel_type, (char *)write_offset); gl.BindBuffer(GL_PIXEL_PACK_BUFFER, 0); } else { Py_buffer buffer_view; int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_WRITABLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len < write_offset + expected_size) { MGLError_Set("the buffer is too small"); PyBuffer_Release(&buffer_view); return 0; } char * ptr = (char *)buffer_view.buf + write_offset; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.GetTexImage(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, format, pixel_type, ptr); PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLTextureCube_write(MGLTextureCube * self, PyObject * args) { int face; PyObject * data; PyObject * viewport_arg; int alignment; int args_ok = PyArg_ParseTuple( args, "iOOI", &face, &data, &viewport_arg, &alignment ); if (!args_ok) { return 0; } if (face < 0 || face > 5) { MGLError_Set("the face must be 0, 1, 2, 3, 4 or 5"); return 0; } if (alignment != 1 && alignment != 2 && alignment != 4 && alignment != 8) { MGLError_Set("the alignment must be 1, 2, 4 or 8"); return 0; } Py_buffer buffer_view; Rect viewport_rect = rect(0, 0, self->width, self->height); if (viewport_arg != Py_None) { if (!parse_rect(viewport_arg, &viewport_rect)) { MGLError_Set("wrong values in the viewport"); return NULL; } } unsigned long long expected_size = (unsigned long long)viewport_rect.width * self->components * self->data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * viewport_rect.height; // GL_TEXTURE_CUBE_MAP_POSITIVE_X = GL_TEXTURE_CUBE_MAP_POSITIVE_X + 0 // GL_TEXTURE_CUBE_MAP_NEGATIVE_X = GL_TEXTURE_CUBE_MAP_POSITIVE_X + 1 // GL_TEXTURE_CUBE_MAP_POSITIVE_Y = GL_TEXTURE_CUBE_MAP_POSITIVE_X + 2 // GL_TEXTURE_CUBE_MAP_NEGATIVE_Y = GL_TEXTURE_CUBE_MAP_POSITIVE_X + 3 // GL_TEXTURE_CUBE_MAP_POSITIVE_Z = GL_TEXTURE_CUBE_MAP_POSITIVE_X + 4 // GL_TEXTURE_CUBE_MAP_NEGATIVE_Z = GL_TEXTURE_CUBE_MAP_POSITIVE_X + 5 int pixel_type = self->data_type->gl_type; int format = self->depth ? GL_DEPTH_COMPONENT : self->data_type->base_format[self->components]; if (Py_TYPE(data) == MGLBuffer_type) { MGLBuffer * buffer = (MGLBuffer *)data; const GLMethods & gl = self->context->gl; gl.BindBuffer(GL_PIXEL_UNPACK_BUFFER, buffer->buffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, viewport_rect.x, viewport_rect.y, viewport_rect.width, viewport_rect.height, format, pixel_type, 0); gl.BindBuffer(GL_PIXEL_UNPACK_BUFFER, 0); } else { int get_buffer = PyObject_GetBuffer(data, &buffer_view, PyBUF_SIMPLE); if (get_buffer < 0) { // Propagate the default error return 0; } if (buffer_view.len != expected_size) { MGLError_Set("data size mismatch %d != %d", buffer_view.len, expected_size); PyBuffer_Release(&buffer_view); return 0; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); gl.PixelStorei(GL_PACK_ALIGNMENT, alignment); gl.PixelStorei(GL_UNPACK_ALIGNMENT, alignment); gl.TexSubImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + face, 0, viewport_rect.x, viewport_rect.y, viewport_rect.width, viewport_rect.height, format, pixel_type, buffer_view.buf); PyBuffer_Release(&buffer_view); } Py_RETURN_NONE; } static PyObject * MGLTextureCube_meth_bind(MGLTextureCube * self, PyObject * args) { int unit; int read; int write; int level; int format; int args_ok = PyArg_ParseTuple( args, "IppII", &unit, &read, &write, &level, &format ); if (!args_ok) { return NULL; } int access = GL_READ_WRITE; if (read && !write) access = GL_READ_ONLY; else if (!read && write) access = GL_WRITE_ONLY; else if (!read && !write) { MGLError_Set("Illegal access mode. Read or write needs to be enabled."); return NULL; } int frmt = format ? format : self->data_type->internal_format[self->components]; const GLMethods & gl = self->context->gl; // NOTE: Texture cube must be bound as layered to expose all layers gl.BindImageTexture(unit, self->texture_obj, level, GL_TRUE, 0, access, frmt); Py_RETURN_NONE; } static PyObject * MGLTextureCube_use(MGLTextureCube * self, PyObject * args) { int index; int args_ok = PyArg_ParseTuple( args, "I", &index ); if (!args_ok) { return 0; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + index); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); Py_RETURN_NONE; } static PyObject * MGLTextureCube_get_handle(MGLTextureCube * self, PyObject * args) { int resident = true; if(!PyArg_ParseTuple(args, "|p", &resident)) { return NULL; } const GLMethods & gl = self->context->gl; unsigned long long handle = gl.GetTextureHandleARB(self->texture_obj); if (resident) { gl.MakeTextureHandleResidentARB(handle); } else { gl.MakeTextureHandleNonResidentARB(handle); } return PyLong_FromUnsignedLongLong(handle); } static PyObject * MGLTextureCube_build_mipmaps(MGLTextureCube * self, PyObject * args) { int base = 0; int max = 1000; int args_ok = PyArg_ParseTuple( args, "II", &base, &max ); if (!args_ok) { return 0; } if (base > self->max_level) { MGLError_Set("invalid base"); return 0; } int texture_target = GL_TEXTURE_CUBE_MAP; const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(texture_target, self->texture_obj); gl.TexParameteri(texture_target, GL_TEXTURE_BASE_LEVEL, base); gl.TexParameteri(texture_target, GL_TEXTURE_MAX_LEVEL, max); gl.GenerateMipmap(texture_target); gl.TexParameteri(texture_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); gl.TexParameteri(texture_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR); self->min_filter = GL_LINEAR_MIPMAP_LINEAR; self->mag_filter = GL_LINEAR; self->max_level = max; Py_RETURN_NONE; } static PyObject * MGLTextureCube_release(MGLTextureCube * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; // TODO: decref const GLMethods & gl = self->context->gl; gl.DeleteTextures(1, (GLuint *)&self->texture_obj); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLTextureCube_get_filter(MGLTextureCube * self, void * closure) { return Py_BuildValue("(ii)", self->min_filter, self->mag_filter); } static int MGLTextureCube_set_filter(MGLTextureCube * self, PyObject * value, void * closure) { if (!parse_filter(value, &self->min_filter, &self->mag_filter)) { MGLError_Set("invalid filter"); return -1; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MIN_FILTER, self->min_filter); gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, self->mag_filter); return 0; } static PyObject * MGLTextureCube_get_swizzle(MGLTextureCube * self, void * closure) { if (self->depth) { MGLError_Set("cannot get swizzle of depth textures"); return 0; } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); int swizzle_r = 0; int swizzle_g = 0; int swizzle_b = 0; int swizzle_a = 0; gl.GetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_R, &swizzle_r); gl.GetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_G, &swizzle_g); gl.GetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_B, &swizzle_b); gl.GetTexParameteriv(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_A, &swizzle_a); char swizzle[5] = { char_from_swizzle(swizzle_r), char_from_swizzle(swizzle_g), char_from_swizzle(swizzle_b), char_from_swizzle(swizzle_a), 0, }; return PyUnicode_FromStringAndSize(swizzle, 4); } static int MGLTextureCube_set_swizzle(MGLTextureCube * self, PyObject * value, void * closure) { const char * swizzle = PyUnicode_AsUTF8(value); if (self->depth) { MGLError_Set("cannot set swizzle for depth textures"); return -1; } if (!swizzle[0]) { MGLError_Set("the swizzle is empty"); return -1; } int tex_swizzle[4] = {-1, -1, -1, -1}; for (int i = 0; swizzle[i]; ++i) { if (i > 3) { MGLError_Set("the swizzle is too long"); return -1; } tex_swizzle[i] = swizzle_from_char(swizzle[i]); if (tex_swizzle[i] == -1) { MGLError_Set("'%c' is not a valid swizzle parameter", swizzle[i]); return -1; } } const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_R, tex_swizzle[0]); if (tex_swizzle[1] != -1) { gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_G, tex_swizzle[1]); if (tex_swizzle[2] != -1) { gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_B, tex_swizzle[2]); if (tex_swizzle[3] != -1) { gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_SWIZZLE_A, tex_swizzle[3]); } } } return 0; } static PyObject * MGLTextureCube_get_compare_func(MGLTextureCube * self, void * closure) { if (!self->depth) { MGLError_Set("only depth textures have compare_func"); return 0; } return compare_func_to_string(self->compare_func); } static int MGLTextureCube_set_compare_func(MGLTextureCube * self, PyObject * value, void * closure) { if (!self->depth) { MGLError_Set("only depth textures have compare_func"); return -1; } const char * func = PyUnicode_AsUTF8(value); if (PyErr_Occurred()) { return -1; } self->compare_func = compare_func_from_string(func); const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); if (self->compare_func == 0) { gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_COMPARE_MODE, GL_NONE); } else { gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_COMPARE_MODE, GL_COMPARE_REF_TO_TEXTURE); gl.TexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_COMPARE_FUNC, self->compare_func); } return 0; } static PyObject * MGLTextureCube_get_anisotropy(MGLTextureCube * self, void * closure) { return PyFloat_FromDouble(self->anisotropy); } static int MGLTextureCube_set_anisotropy(MGLTextureCube * self, PyObject * value, void * closure) { if (self->context->max_anisotropy == 0) return 0; self->anisotropy = (float)MGL_MIN(MGL_MAX(PyFloat_AsDouble(value), 1.0), self->context->max_anisotropy); const GLMethods & gl = self->context->gl; gl.ActiveTexture(GL_TEXTURE0 + self->context->default_texture_unit); gl.BindTexture(GL_TEXTURE_CUBE_MAP, self->texture_obj); gl.TexParameterf(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAX_ANISOTROPY, self->anisotropy); return 0; } static PyObject * MGLContext_vertex_array(MGLContext * self, PyObject * args) { MGLProgram * program; PyObject * content; MGLBuffer * index_buffer; int index_element_size; int args_ok = PyArg_ParseTuple( args, "O!OOI", MGLProgram_type, &program, &content, &index_buffer, &index_element_size ); if (!args_ok) { return 0; } if (program->context != self) { MGLError_Set("the program belongs to a different context"); return 0; } if (index_buffer != (MGLBuffer *)Py_None && index_buffer->context != self) { MGLError_Set("the index_buffer belongs to a different context"); return 0; } int content_len = (int)PyTuple_GET_SIZE(content); // Allow empty vertextbuffers: https://github.com/moderngl/moderngl/issues/321 // if (!content_len) { // MGLError_Set("the content must not be emtpy"); // return 0; // } for (int i = 0; i < content_len; ++i) { PyObject * tuple = PyTuple_GET_ITEM(content, i); PyObject * buffer = PyTuple_GET_ITEM(tuple, 0); PyObject * format = PyTuple_GET_ITEM(tuple, 1); if (Py_TYPE(buffer) != MGLBuffer_type) { MGLError_Set("content[%d][0] must be a Buffer not %s", i, Py_TYPE(buffer)->tp_name); return 0; } if (Py_TYPE(format) != &PyUnicode_Type) { MGLError_Set("content[%d][1] must be a string not %s", i, Py_TYPE(format)->tp_name); return 0; } if (((MGLBuffer *)buffer)->context != self) { MGLError_Set("content[%d][0] belongs to a different context", i); return 0; } FormatIterator it = FormatIterator(PyUnicode_AsUTF8(format)); FormatInfo format_info = it.info(); if (!format_info.valid) { MGLError_Set("content[%d][1] is an invalid format", i); return 0; } int attributes_len = (int)PyTuple_GET_SIZE(tuple) - 2; if (!attributes_len) { MGLError_Set("content[%d][2] must not be empty", i); return 0; } if (attributes_len != format_info.nodes) { MGLError_Set("content[%d][1] and content[%d][2] size mismatch %d != %d", i, i, format_info.nodes, attributes_len); return 0; } } if (index_buffer != (MGLBuffer *)Py_None && Py_TYPE(index_buffer) != MGLBuffer_type) { MGLError_Set("the index_buffer must be a Buffer not %s", Py_TYPE(index_buffer)->tp_name); return 0; } if (index_element_size != 1 && index_element_size != 2 && index_element_size != 4) { MGLError_Set("index_element_size must be 1, 2, or 4, not %d", index_element_size); return 0; } const GLMethods & gl = self->gl; MGLVertexArray * array = PyObject_New(MGLVertexArray, MGLVertexArray_type); array->released = false; array->num_vertices = 0; array->num_instances = 1; Py_INCREF(program); array->program = program; array->vertex_array_obj = 0; gl.GenVertexArrays(1, (GLuint *)&array->vertex_array_obj); if (!array->vertex_array_obj) { MGLError_Set("cannot create vertex array"); Py_DECREF(array); return 0; } gl.BindVertexArray(array->vertex_array_obj); Py_INCREF(index_buffer); array->index_buffer = index_buffer; array->index_element_size = index_element_size; const int element_types[5] = {0, GL_UNSIGNED_BYTE, GL_UNSIGNED_SHORT, 0, GL_UNSIGNED_INT}; array->index_element_type = element_types[index_element_size]; if (index_buffer != (MGLBuffer *)Py_None) { array->num_vertices = (int)(index_buffer->size / index_element_size); gl.BindBuffer(GL_ELEMENT_ARRAY_BUFFER, index_buffer->buffer_obj); } else { array->num_vertices = -1; } for (int i = 0; i < content_len; ++i) { PyObject * tuple = PyTuple_GET_ITEM(content, i); MGLBuffer * buffer = (MGLBuffer *)PyTuple_GET_ITEM(tuple, 0); const char * format = PyUnicode_AsUTF8(PyTuple_GET_ITEM(tuple, 1)); FormatIterator it = FormatIterator(format); FormatInfo format_info = it.info(); int buf_vertices = (int)(buffer->size / format_info.size); if (!format_info.divisor && array->index_buffer == (MGLBuffer *)Py_None && (!i || array->num_vertices > buf_vertices)) { array->num_vertices = buf_vertices; } gl.BindBuffer(GL_ARRAY_BUFFER, buffer->buffer_obj); char * ptr = 0; int attributes_len = (int)PyTuple_GET_SIZE(tuple) - 2; for (int j = 0; j < attributes_len; ++j) { FormatNode * node = it.next(); while (!node->type) { ptr += node->size; node = it.next(); } PyObject * attribute = PyTuple_GET_ITEM(tuple, j + 2); if (attribute == Py_None) { ptr += node->size; continue; } PyObject * attribute_location_py = PyObject_GetAttrString(attribute, "location"); PyObject * attribute_rows_length_py = PyObject_GetAttrString(attribute, "rows_length"); PyObject * attribute_scalar_type_py = PyObject_GetAttrString(attribute, "scalar_type"); if (!attribute_location_py || !attribute_rows_length_py || !attribute_scalar_type_py) { return NULL; } int attribute_location = PyLong_AsLong(attribute_location_py); int attribute_rows_length = PyLong_AsLong(attribute_rows_length_py); int attribute_scalar_type = PyLong_AsLong(attribute_scalar_type_py); for (int r = 0; r < attribute_rows_length; ++r) { int location = attribute_location + r; int count = node->count / attribute_rows_length; switch (attribute_scalar_type) { case GL_FLOAT: gl.VertexAttribPointer(location, count, node->type, node->normalize, format_info.size, ptr); break; case GL_DOUBLE: gl.VertexAttribLPointer(location, count, node->type, format_info.size, ptr); break; case GL_INT: gl.VertexAttribIPointer(location, count, node->type, format_info.size, ptr); break; case GL_UNSIGNED_INT: gl.VertexAttribIPointer(location, count, node->type, format_info.size, ptr); break; } gl.VertexAttribDivisor(location, format_info.divisor); gl.EnableVertexAttribArray(location); ptr += node->size / attribute_rows_length; } } } Py_INCREF(self); array->context = self; return Py_BuildValue("(Oi)", array, array->vertex_array_obj); } static PyObject * MGLVertexArray_render(MGLVertexArray * self, PyObject * args) { int mode; int vertices; int first; int instances; int args_ok = PyArg_ParseTuple( args, "IIII", &mode, &vertices, &first, &instances ); if (!args_ok) { return 0; } if (vertices < 0) { if (self->num_vertices < 0) { MGLError_Set("cannot detect the number of vertices"); return 0; } vertices = self->num_vertices; } if (instances < 0) { instances = self->num_instances; } const GLMethods & gl = self->context->gl; gl.UseProgram(self->program->program_obj); gl.BindVertexArray(self->vertex_array_obj); if (self->index_buffer != (MGLBuffer *)Py_None) { const void * ptr = (const void *)((GLintptr)first * self->index_element_size); gl.DrawElementsInstanced(mode, vertices, self->index_element_type, ptr, instances); } else { gl.DrawArraysInstanced(mode, first, vertices, instances); } Py_RETURN_NONE; } static PyObject * MGLVertexArray_render_indirect(MGLVertexArray * self, PyObject * args) { MGLBuffer * buffer; int mode; int count; int first; int args_ok = PyArg_ParseTuple( args, "O!III", MGLBuffer_type, &buffer, &mode, &count, &first ); if (!args_ok) { return 0; } if (count < 0) { count = (int)(buffer->size / 20 - first); } const GLMethods & gl = self->context->gl; gl.UseProgram(self->program->program_obj); gl.BindVertexArray(self->vertex_array_obj); gl.BindBuffer(GL_DRAW_INDIRECT_BUFFER, buffer->buffer_obj); const void * ptr = (const void *)((GLintptr)first * 20); if (self->index_buffer != (MGLBuffer *)Py_None) { gl.MultiDrawElementsIndirect(mode, self->index_element_type, ptr, count, 20); } else { gl.MultiDrawArraysIndirect(mode, ptr, count, 20); } Py_RETURN_NONE; } static PyObject * MGLVertexArray_transform(MGLVertexArray * self, PyObject * args) { PyObject * outputs; int mode; int vertices; int first; int instances; int buffer_offset; int args_ok = PyArg_ParseTuple( args, "O!IIIII", &PyList_Type, &outputs, &mode, &vertices, &first, &instances, &buffer_offset ); if (!args_ok) { return 0; } if (!self->program->num_varyings) { MGLError_Set("the program has no varyings"); return 0; } if (vertices < 0) { if (self->num_vertices < 0) { MGLError_Set("cannot detect the number of vertices"); return 0; } vertices = self->num_vertices; } if (instances < 0) { instances = self->num_instances; } int output_mode = -1; // If a geo shader is present we need to sanity check the the rendering mode if (self->program->geometry_output > -1) { output_mode = self->program->geometry_output; // The rendering mode must match the input type in the geometry shader // points, lines, lines_adjacency, triangles, triangles_adjacency switch (self->program->geometry_input) { case GL_POINTS: if (mode != GL_POINTS) { MGLError_Set("Geometry shader expects POINTS as input. Change the transform mode."); return 0; } break; case GL_LINES: if(mode != GL_LINES && mode != GL_LINE_STRIP && mode != GL_LINE_LOOP && mode != GL_LINES_ADJACENCY) { MGLError_Set("Geometry shader expects LINES, LINE_STRIP, GL_LINE_LOOP or GL_LINES_ADJACENCY as input. Change the rendering mode."); return 0; } break; case GL_LINES_ADJACENCY: if(mode != GL_LINES_ADJACENCY && mode != GL_LINE_STRIP_ADJACENCY) { MGLError_Set("Geometry shader expects LINES_ADJACENCY or LINE_STRIP_ADJACENCY as input. Change the rendering mode."); return 0; } break; case GL_TRIANGLES: if(mode != GL_TRIANGLES && mode != GL_TRIANGLE_STRIP && mode != GL_TRIANGLE_FAN) { MGLError_Set("Geometry shader expects GL_TRIANGLES, GL_TRIANGLE_STRIP or GL_TRIANGLE_FAN as input. Change the rendering mode."); return 0; } break; case GL_TRIANGLES_ADJACENCY: if(mode != GL_TRIANGLES_ADJACENCY && mode != GL_TRIANGLE_STRIP_ADJACENCY) { MGLError_Set("Geometry shader expects GL_TRIANGLES_ADJACENCY or GL_TRIANGLE_STRIP_ADJACENCY as input. Change the rendering mode."); return 0; } break; default: MGLError_Set("Unexpected geometry shader input mode: %d", self->program->geometry_input); return 0; break; } } else { // If no geometry shader is present we need to determine the output mode by looking at the input switch (mode) { case GL_POINTS: output_mode = GL_POINTS; break; case GL_LINES: case GL_LINE_LOOP: case GL_LINE_STRIP: case GL_LINES_ADJACENCY: case GL_LINE_STRIP_ADJACENCY: output_mode = GL_LINES; break; case GL_TRIANGLES: case GL_TRIANGLE_STRIP: case GL_TRIANGLE_FAN: case GL_TRIANGLES_ADJACENCY: case GL_TRIANGLE_STRIP_ADJACENCY: output_mode = GL_TRIANGLES; break; default: MGLError_Set("Primitive mode not supported: %d", mode); return 0; break; } } const GLMethods & gl = self->context->gl; gl.UseProgram(self->program->program_obj); gl.BindVertexArray(self->vertex_array_obj); int num_outputs = (int)PyList_Size(outputs); for (int i = 0; i < num_outputs; ++i) { MGLBuffer * output = (MGLBuffer *)PyList_GET_ITEM(outputs, i); gl.BindBufferRange(GL_TRANSFORM_FEEDBACK_BUFFER, i, output->buffer_obj, buffer_offset, output->size - buffer_offset); } gl.Enable(GL_RASTERIZER_DISCARD); gl.BeginTransformFeedback(output_mode); if (self->index_buffer != (MGLBuffer *)Py_None) { const void * ptr = (const void *)((GLintptr)first * self->index_element_size); gl.DrawElementsInstanced(mode, vertices, self->index_element_type, ptr, instances); } else { gl.DrawArraysInstanced(mode, first, vertices, instances); } gl.EndTransformFeedback(); if (~self->context->enable_flags & MGL_RASTERIZER_DISCARD) { gl.Disable(GL_RASTERIZER_DISCARD); } gl.Flush(); Py_RETURN_NONE; } static PyObject * MGLVertexArray_bind(MGLVertexArray * self, PyObject * args) { int location; const char * type; MGLBuffer * buffer; const char * format; Py_ssize_t offset; int stride; int divisor; int normalize; int args_ok = PyArg_ParseTuple( args, "IsO!snIIp", &location, &type, MGLBuffer_type, &buffer, &format, &offset, &stride, &divisor, &normalize ); if (!args_ok) { return 0; } FormatIterator it = FormatIterator(format); FormatInfo format_info = it.info(); if (type[0] == 'f' && normalize) { MGLError_Set("invalid normalize"); return 0; } if (!format_info.valid || format_info.divisor || format_info.nodes != 1) { MGLError_Set("invalid format"); return 0; } FormatNode * node = it.next(); if (!node->type) { MGLError_Set("invalid format"); return 0; } char * ptr = (char *)offset; const GLMethods & gl = self->context->gl; gl.BindVertexArray(self->vertex_array_obj); gl.BindBuffer(GL_ARRAY_BUFFER, buffer->buffer_obj); switch (type[0]) { case 'f': gl.VertexAttribPointer(location, node->count, node->type, normalize, stride, ptr); break; case 'i': gl.VertexAttribIPointer(location, node->count, node->type, stride, ptr); break; case 'd': gl.VertexAttribLPointer(location, node->count, node->type, stride, ptr); break; default: MGLError_Set("invalid type"); return 0; } gl.VertexAttribDivisor(location, divisor); gl.EnableVertexAttribArray(location); Py_RETURN_NONE; } static PyObject * MGLVertexArray_release(MGLVertexArray * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; const GLMethods & gl = self->context->gl; gl.DeleteVertexArrays(1, (GLuint *)&self->vertex_array_obj); Py_DECREF(self->program); Py_XDECREF(self->index_buffer); Py_DECREF(self); Py_RETURN_NONE; } static int MGLVertexArray_set_index_buffer(MGLVertexArray * self, PyObject * value, void * closure) { if (Py_TYPE(value) != MGLBuffer_type) { MGLError_Set("the index_buffer must be a Buffer not %s", Py_TYPE(value)->tp_name); return -1; } Py_INCREF(value); Py_DECREF(self->index_buffer); self->index_buffer = (MGLBuffer *)value; self->num_vertices = (int)(self->index_buffer->size / 4); return 0; } static PyObject * MGLVertexArray_get_vertices(MGLVertexArray * self, void * closure) { return PyLong_FromLong(self->num_vertices); } static int MGLVertexArray_set_vertices(MGLVertexArray * self, PyObject * value, void * closure) { int vertices = PyLong_AsUnsignedLong(value); if (PyErr_Occurred()) { MGLError_Set("invalid value for vertices"); return -1; } self->num_vertices = vertices; return 0; } static PyObject * MGLVertexArray_get_instances(MGLVertexArray * self, void * closure) { return PyLong_FromLong(self->num_instances); } static int MGLVertexArray_set_instances(MGLVertexArray * self, PyObject * value, void * closure) { int instances = PyLong_AsUnsignedLong(value); if (PyErr_Occurred()) { MGLError_Set("invalid value for instances"); return -1; } self->num_instances = instances; return 0; } static PyObject * MGLContext_set_label(MGLContext * self, PyObject * args) { const GLMethods & gl = self->gl; GLenum type = 0; GLuint object = 0; const char* label = NULL; Py_ssize_t label_length = 0; int args_ok = PyArg_ParseTuple(args, "IIz#", &type, &object, &label, &label_length); if (!args_ok) { return NULL; } if (gl.ObjectLabel) { // OpenGL core 4.3 if (label_length > self->max_label_length) { MGLError_Set("Context's max label length is %d, got one of length %d", self->max_label_length, label_length); return NULL; } gl.ObjectLabel(type, object, label_length, label); GLenum error = gl.GetError(); if (error != GL_NO_ERROR) { MGLError_Set("glObjectLabel failed with 0x%x", error); return NULL; } } else if (gl.LabelObjectEXT) { // GL_EXT_debug_label switch (type) { // GL_EXT_debug_label defines its own type constants for some (not all!) OpenGL types, // and these values are not equal to the standard ones case GL_BUFFER: type = GL_BUFFER_OBJECT_EXT; break; case GL_PROGRAM: type = GL_PROGRAM_OBJECT_EXT; break; case GL_VERTEX_ARRAY: type = GL_VERTEX_ARRAY_OBJECT_EXT; break; case GL_QUERY: type = GL_QUERY_OBJECT_EXT; break; } // GL_EXT_debug_label doesn't define a max label length gl.LabelObjectEXT(type, object, label_length, label); GLenum error = gl.GetError(); if (error != GL_NO_ERROR) { MGLError_Set("glLabelObjectEXT failed with 0x%x", error); return NULL; } } // Are there any environments that support GL_KHR_debug // but not standard glObjectLabel or GL_EXT_debug_label? // If so, we should fall back to it Py_RETURN_NONE; } static PyObject * MGLContext_get_label(MGLContext * ctx, PyObject * args) { const GLMethods & gl = ctx->gl; GLenum type = 0; GLuint object = 0; int args_ok = PyArg_ParseTuple(args, "II", &type, &object); if (!args_ok) { return NULL; } int label_buffer_length = ctx->max_label_length + 1; char * label = new char[label_buffer_length]; GLsizei label_length = 0; if (gl.GetObjectLabel) { // OpenGL core 4.3 gl.GetObjectLabel(type, object, label_buffer_length, &label_length, label); GLenum error = gl.GetError(); if (error != GL_NO_ERROR) { delete[] label; MGLError_Set("glGetObjectLabel failed with 0x%x", error); return NULL; } } else if (gl.GetObjectLabelEXT) { // EXT_debug_label gl.GetObjectLabelEXT(type, object, label_buffer_length, &label_length, label); GLenum error = gl.GetError(); if (error != GL_NO_ERROR) { delete[] label; MGLError_Set("glGetObjectLabelEXT failed with 0x%x", error); return NULL; } } // Are there any environments that support GL_KHR_debug // but not standard glObjectLabel or GL_EXT_debug_label? // If so, we should fall back to it PyObject * result = label_length > 0 ? PyUnicode_FromStringAndSize(label, label_length) : NULL; delete[] label; if (result) { return result; } else { Py_RETURN_NONE; } // If labels aren't supported, this method will return None; // clients that want to know if labels are supported should // use the version number or extension list } static PyObject * MGLContext_push_debug_scope(MGLContext * self, PyObject * args) { const GLMethods& gl = self->gl; GLenum source = 0; GLuint id = 0; const char * message = NULL; Py_ssize_t message_length = 0; int args_ok = PyArg_ParseTuple(args, "IIs#", &source, &id, &message, &message_length); if (!args_ok) { return NULL; } if (gl.PushDebugGroup) { // OpenGL core 4.3 if (message_length >= self->max_debug_message_length) { MGLError_Set("Context's max debug message length is %d, got one of length %d", self->max_debug_message_length, message_length); return NULL; } int scope_stack_depth = 0; gl.GetIntegerv(GL_DEBUG_GROUP_STACK_DEPTH, &scope_stack_depth); if (scope_stack_depth >= self->max_debug_group_stack_depth) { MGLError_Set("Context's max debug group stack depth is %d, cannot push more scopes", self->max_debug_group_stack_depth); return NULL; } gl.PushDebugGroup(source, id, message_length, message); GLenum error = gl.GetError(); if (error != GL_NO_ERROR) { MGLError_Set("glPushDebugGroup failed with 0x%x", error); return NULL; } } else if (gl.PushGroupMarkerEXT) { // GL_EXT_debug_marker gl.PushGroupMarkerEXT(message_length, message); GLenum error = gl.GetError(); if (error != GL_NO_ERROR) { MGLError_Set("glPushGroupMarkerEXT failed with 0x%x", error); return NULL; } } Py_RETURN_NONE; } static PyObject * MGLContext_pop_debug_scope(MGLContext * self, PyObject * args) { const GLMethods& gl = self->gl; if (gl.PopDebugGroup) { gl.PopDebugGroup(); GLenum error = gl.GetError(); if (error != GL_NO_ERROR) { MGLError_Set("glPopDebugGroup failed with 0x%x", error); return NULL; } } else if (gl.PopGroupMarkerEXT) { gl.PopGroupMarkerEXT(); GLenum error = gl.GetError(); if (error != GL_NO_ERROR) { MGLError_Set("glPopGroupMarkerEXT failed with 0x%x", error); return NULL; } } Py_RETURN_NONE; } static PyObject * MGLContext_enable_only(MGLContext * self, PyObject * args) { int flags; int args_ok = PyArg_ParseTuple( args, "i", &flags ); if (!args_ok) { return 0; } self->enable_flags = flags; if (flags & MGL_BLEND) { self->gl.Enable(GL_BLEND); } else { self->gl.Disable(GL_BLEND); } if (flags & MGL_DEPTH_TEST) { self->gl.Enable(GL_DEPTH_TEST); } else { self->gl.Disable(GL_DEPTH_TEST); } if (flags & MGL_CULL_FACE) { self->gl.Enable(GL_CULL_FACE); } else { self->gl.Disable(GL_CULL_FACE); } if (flags & MGL_RASTERIZER_DISCARD) { self->gl.Enable(GL_RASTERIZER_DISCARD); } else { self->gl.Disable(GL_RASTERIZER_DISCARD); } if (flags & MGL_PROGRAM_POINT_SIZE) { self->gl.Enable(GL_PROGRAM_POINT_SIZE); } else { self->gl.Disable(GL_PROGRAM_POINT_SIZE); } Py_RETURN_NONE; } static PyObject * MGLContext_enable(MGLContext * self, PyObject * args) { int flags; int args_ok = PyArg_ParseTuple( args, "i", &flags ); if (!args_ok) { return 0; } self->enable_flags |= flags; if (flags & MGL_BLEND) { self->gl.Enable(GL_BLEND); } if (flags & MGL_DEPTH_TEST) { self->gl.Enable(GL_DEPTH_TEST); } if (flags & MGL_CULL_FACE) { self->gl.Enable(GL_CULL_FACE); } if (flags & MGL_RASTERIZER_DISCARD) { self->gl.Enable(GL_RASTERIZER_DISCARD); } if (flags & MGL_PROGRAM_POINT_SIZE) { self->gl.Enable(GL_PROGRAM_POINT_SIZE); } Py_RETURN_NONE; } static PyObject * MGLContext_disable(MGLContext * self, PyObject * args) { int flags; int args_ok = PyArg_ParseTuple( args, "i", &flags ); if (!args_ok) { return 0; } self->enable_flags &= ~flags; if (flags & MGL_BLEND) { self->gl.Disable(GL_BLEND); } if (flags & MGL_DEPTH_TEST) { self->gl.Disable(GL_DEPTH_TEST); } if (flags & MGL_CULL_FACE) { self->gl.Disable(GL_CULL_FACE); } if (flags & MGL_RASTERIZER_DISCARD) { self->gl.Disable(GL_RASTERIZER_DISCARD); } if (flags & MGL_PROGRAM_POINT_SIZE) { self->gl.Disable(GL_PROGRAM_POINT_SIZE); } Py_RETURN_NONE; } static PyObject * MGLContext_enable_direct(MGLContext * self, PyObject * args) { int value; int args_ok = PyArg_ParseTuple( args, "i", &value ); if (!args_ok) { return 0; } self->gl.Enable(value); Py_RETURN_NONE; } static PyObject * MGLContext_disable_direct(MGLContext * self, PyObject * args) { int value; int args_ok = PyArg_ParseTuple( args, "i", &value ); if (!args_ok) { return 0; } self->gl.Disable(value); Py_RETURN_NONE; } static PyObject * MGLContext_finish(MGLContext * self, PyObject * args) { self->gl.Finish(); Py_RETURN_NONE; } static PyObject * MGLContext_copy_buffer(MGLContext * self, PyObject * args) { MGLBuffer * dst; MGLBuffer * src; Py_ssize_t size; Py_ssize_t read_offset; Py_ssize_t write_offset; int args_ok = PyArg_ParseTuple( args, "O!O!nnn", MGLBuffer_type, &dst, MGLBuffer_type, &src, &size, &read_offset, &write_offset ); if (!args_ok) { return 0; } if (size < 0) { size = src->size - read_offset; } if (read_offset < 0 || write_offset < 0) { MGLError_Set("buffer underflow"); return 0; } if (read_offset + size > src->size || write_offset + size > dst->size) { MGLError_Set("buffer overflow"); return 0; } const GLMethods & gl = self->gl; gl.BindBuffer(GL_COPY_READ_BUFFER, src->buffer_obj); gl.BindBuffer(GL_COPY_WRITE_BUFFER, dst->buffer_obj); gl.CopyBufferSubData(GL_COPY_READ_BUFFER, GL_COPY_WRITE_BUFFER, read_offset, write_offset, size); Py_RETURN_NONE; } static PyObject * MGLContext_copy_framebuffer(MGLContext * self, PyObject * args) { PyObject * dst; MGLFramebuffer * src; int args_ok = PyArg_ParseTuple( args, "OO!", &dst, MGLFramebuffer_type, &src ); if (!args_ok) { return 0; } const GLMethods & gl = self->gl; // If the sizes of the source and destination rectangles are not equal, // filter specifies the interpolation method that will be applied to resize the source image, // and must be GL_NEAREST or GL_LINEAR. GL_LINEAR is only a valid interpolation // method for the color buffer. If filter is not GL_NEAREST and mask includes // GL_DEPTH_BUFFER_BIT or GL_STENCIL_BUFFER_BIT, no data is transferred and a // GL_INVALID_OPERATION error is generated. if (Py_TYPE(dst) == MGLFramebuffer_type) { MGLFramebuffer * dst_framebuffer = (MGLFramebuffer *)dst; int width = 0; int height = 0; if (!dst_framebuffer->framebuffer_obj) { width = src->width; height = src->height; } else if (!src->framebuffer_obj) { width = dst_framebuffer->width; height = dst_framebuffer->height; } else { width = src->width < dst_framebuffer->width ? src->width : dst_framebuffer->width; height = src->height < dst_framebuffer->height ? src->height : dst_framebuffer->height; } if (dst_framebuffer->draw_buffers_len != src->draw_buffers_len) { MGLError_Set("Destination and source framebuffers have different number of color attachments!"); return 0; } int prev_read_buffer = -1; int prev_draw_buffer = -1; int color_attachment_len = dst_framebuffer->draw_buffers_len; gl.GetIntegerv(GL_READ_BUFFER, &prev_read_buffer); gl.GetIntegerv(GL_DRAW_BUFFER, &prev_draw_buffer); gl.BindFramebuffer(GL_READ_FRAMEBUFFER, src->framebuffer_obj); gl.BindFramebuffer(GL_DRAW_FRAMEBUFFER, dst_framebuffer->framebuffer_obj); for (int i = 0; i < color_attachment_len; ++i) { gl.ReadBuffer(src->draw_buffers[i]); gl.DrawBuffer(dst_framebuffer->draw_buffers[i]); gl.BlitFramebuffer( 0, 0, width, height, 0, 0, width, height, GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT, GL_NEAREST ); } gl.BindFramebuffer(GL_FRAMEBUFFER, self->bound_framebuffer->framebuffer_obj); gl.ReadBuffer(prev_read_buffer); gl.DrawBuffer(prev_draw_buffer); gl.DrawBuffers(self->bound_framebuffer->draw_buffers_len, self->bound_framebuffer->draw_buffers); } else if (Py_TYPE(dst) == MGLTexture_type) { MGLTexture * dst_texture = (MGLTexture *)dst; if (dst_texture->samples) { MGLError_Set("multisample texture targets are not accepted"); return 0; } if (src->samples) { MGLError_Set("multisample framebuffer source with texture targets are not accepted"); return 0; } int width = src->width < dst_texture->width ? src->width : dst_texture->width; int height = src->height < dst_texture->height ? src->height : dst_texture->height; if (!src->framebuffer_obj) { width = dst_texture->width; height = dst_texture->height; } else { width = src->width < dst_texture->width ? src->width : dst_texture->width; height = src->height < dst_texture->height ? src->height : dst_texture->height; } const int formats[] = {0, GL_RED, GL_RG, GL_RGB, GL_RGBA}; int texture_target = dst_texture->samples ? GL_TEXTURE_2D_MULTISAMPLE : GL_TEXTURE_2D; int format = formats[dst_texture->components]; gl.BindFramebuffer(GL_READ_FRAMEBUFFER, src->framebuffer_obj); gl.ActiveTexture(GL_TEXTURE0 + self->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D, dst_texture->texture_obj); gl.CopyTexImage2D(texture_target, 0, format, 0, 0, width, height, 0); gl.BindFramebuffer(GL_FRAMEBUFFER, self->bound_framebuffer->framebuffer_obj); } else { MGLError_Set("the dst must be a Framebuffer or Texture"); return 0; } Py_RETURN_NONE; } static PyObject * MGLContext_detect_framebuffer(MGLContext * self, PyObject * args) { PyObject * glo; int args_ok = PyArg_ParseTuple( args, "O", &glo ); if (!args_ok) { return 0; } const GLMethods & gl = self->gl; int bound_framebuffer = 0; gl.GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &bound_framebuffer); int framebuffer_obj = bound_framebuffer; if (glo != Py_None) { framebuffer_obj = PyLong_AsLong(glo); if (PyErr_Occurred()) { MGLError_Set("the glo must be an integer"); return 0; } } if (!framebuffer_obj) { MGLFramebuffer * framebuffer = self->default_framebuffer; return Py_BuildValue("(O(ii)ii)", framebuffer, framebuffer->width, framebuffer->height, framebuffer->samples, framebuffer->framebuffer_obj); } gl.BindFramebuffer(GL_FRAMEBUFFER, framebuffer_obj); int num_color_attachments = self->max_color_attachments; for (int i = 0; i < self->max_color_attachments; ++i) { int color_attachment_type = 0; gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &color_attachment_type); if (!color_attachment_type) { num_color_attachments = i; break; } } int color_attachment_type = 0; gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE, &color_attachment_type); int color_attachment_name = 0; gl.GetFramebufferAttachmentParameteriv(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME, &color_attachment_name); int width = 0; int height = 0; switch (color_attachment_type) { case GL_RENDERBUFFER: { gl.BindRenderbuffer(GL_RENDERBUFFER, color_attachment_name); gl.GetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &width); gl.GetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &height); break; } case GL_TEXTURE: { gl.ActiveTexture(GL_TEXTURE0 + self->default_texture_unit); gl.BindTexture(GL_TEXTURE_2D, color_attachment_name); gl.GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_WIDTH, &width); gl.GetTexLevelParameteriv(GL_TEXTURE_2D, 0, GL_TEXTURE_HEIGHT, &height); break; } } MGLFramebuffer * framebuffer = PyObject_New(MGLFramebuffer, MGLFramebuffer_type); framebuffer->released = false; framebuffer->framebuffer_obj = framebuffer_obj; framebuffer->draw_buffers_len = num_color_attachments; for (int i = 0; i < num_color_attachments; ++i) { framebuffer->draw_buffers[i] = GL_COLOR_ATTACHMENT0 + i; framebuffer->color_mask[i] = 0xf; } framebuffer->depth_mask = true; framebuffer->context = self; framebuffer->viewport = rect(0, 0, width, height); framebuffer->scissor_enabled = false; framebuffer->scissor = rect(0, 0, width, height); framebuffer->width = width; framebuffer->height = height; framebuffer->dynamic = true; gl.BindFramebuffer(GL_FRAMEBUFFER, bound_framebuffer); return Py_BuildValue("(O(ii)ii)", framebuffer, framebuffer->width, framebuffer->height, framebuffer->samples, framebuffer->framebuffer_obj); } static PyObject * MGLContext_clear_samplers(MGLContext * self, PyObject * args) { int start; int end; int args_ok = PyArg_ParseTuple( args, "ii", &start, &end ); if (!args_ok) { return 0; } start = MGL_MAX(start, 0); if (end == -1) { end = self->max_texture_units; } else { end = MGL_MIN(end, self->max_texture_units); } const GLMethods & gl = self->gl; for(int i = start; i < end; i++) { gl.BindSampler(i, 0); } Py_RETURN_NONE; } static PyObject * MGLContext_enter(MGLContext * self, PyObject * args) { return PyObject_CallMethod(self->ctx, "__enter__", NULL); } static PyObject * MGLContext_exit(MGLContext * self, PyObject * args) { return PyObject_CallMethod(self->ctx, "__exit__", NULL); } static PyObject * MGLContext_release(MGLContext * self, PyObject * args) { if (self->released) { Py_RETURN_NONE; } self->released = true; PyObject * temp = PyObject_CallMethod(self->ctx, "release", NULL); if (!temp) { return NULL; } Py_DECREF(temp); Py_DECREF(self); Py_RETURN_NONE; } static PyObject * MGLContext_clear_errors(MGLContext * self, PyObject * args) { // According to the OpenGL wiki, OpenGL can hold multiple error flags. // (Contrast with something like the C stdlib's errno, which is a single global variable.) // Calling glGetError returns one of these error codes and clears it, // but there may still be others. // Therefore, they recommend calling glGetError in a loop until it returns GL_NO_ERROR. // See https://www.khronos.org/opengl/wiki/OpenGL_Error#Catching_errors_(the_hard_way) // See the Python API docs for this method for info about its use case. while (self->gl.GetError() != GL_NO_ERROR); Py_RETURN_NONE; } static PyObject * MGLContext_get_ubo_binding(MGLContext * self, PyObject * args) { int program_obj; int index; if (!PyArg_ParseTuple(args, "II", &program_obj, &index)) { return NULL; } int binding = 0; self->gl.GetActiveUniformBlockiv(program_obj, index, GL_UNIFORM_BLOCK_BINDING, &binding); return PyLong_FromLong(binding); } static PyObject * MGLContext_set_ubo_binding(MGLContext * self, PyObject * args) { int program_obj; int index; int binding; if (!PyArg_ParseTuple(args, "III", &program_obj, &index, &binding)) { return NULL; } self->gl.UniformBlockBinding(program_obj, index, binding); Py_RETURN_NONE; } static PyObject * MGLContext_get_storage_block_binding(MGLContext * self, PyObject * args) { int program_obj; int index; if (!PyArg_ParseTuple(args, "II", &program_obj, &index)) { return NULL; } int binding = 0; GLenum prop = GL_BUFFER_BINDING; self->gl.GetProgramResourceiv(program_obj, GL_SHADER_STORAGE_BLOCK, index, 1, &prop, 1, NULL, &binding); return PyLong_FromLong(binding); } static PyObject * MGLContext_set_storage_block_binding(MGLContext * self, PyObject * args) { int program_obj; int index; int binding; if (!PyArg_ParseTuple(args, "III", &program_obj, &index, &binding)) { return NULL; } self->gl.ShaderStorageBlockBinding(program_obj, index, binding); Py_RETURN_NONE; } static PyObject * MGLContext_read_uniform(MGLContext * self, PyObject * args) { int program_obj; int location; int gl_type; int array_length; int element_size; if (!PyArg_ParseTuple(args, "IIIII", &program_obj, &location, &gl_type, &array_length, &element_size)) { return NULL; } int size = array_length * element_size; PyObject * res = PyBytes_FromStringAndSize(NULL, size); char * ptr = PyBytes_AsString(res); const GLMethods & gl = self->gl; for (int i = 0; i < array_length; ++i) { switch (gl_type) { case GL_BOOL: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_BOOL_VEC2: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_BOOL_VEC3: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_BOOL_VEC4: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_VEC2: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_VEC3: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_VEC4: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT: gl.GetUniformuiv(program_obj, location + i, (unsigned *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_VEC2: gl.GetUniformuiv(program_obj, location + i, (unsigned *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_VEC3: gl.GetUniformuiv(program_obj, location + i, (unsigned *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_VEC4: gl.GetUniformuiv(program_obj, location + i, (unsigned *)(ptr + i * element_size)); break; case GL_FLOAT: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_VEC2: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_VEC3: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_VEC4: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_DOUBLE: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_VEC2: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_VEC3: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_VEC4: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_SAMPLER_1D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_SAMPLER_1D_ARRAY: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_SAMPLER_1D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_SAMPLER_1D_ARRAY: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_SAMPLER_2D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_SAMPLER_2D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_SAMPLER_2D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_SAMPLER_2D_ARRAY: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_SAMPLER_2D_ARRAY: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_SAMPLER_3D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_SAMPLER_3D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_SAMPLER_3D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_SAMPLER_2D_SHADOW: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_SAMPLER_2D_MULTISAMPLE: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_SAMPLER_2D_MULTISAMPLE: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_SAMPLER_2D_MULTISAMPLE_ARRAY: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_SAMPLER_CUBE: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_INT_SAMPLER_CUBE: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_UNSIGNED_INT_SAMPLER_CUBE: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_IMAGE_2D: gl.GetUniformiv(program_obj, location + i, (int *)(ptr + i * element_size)); break; case GL_FLOAT_MAT2: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_MAT2x3: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_MAT2x4: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_MAT3x2: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_MAT3: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_MAT3x4: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_MAT4x2: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_MAT4x3: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_FLOAT_MAT4: gl.GetUniformfv(program_obj, location + i, (float *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT2: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT2x3: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT2x4: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT3x2: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT3: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT3x4: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT4x2: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT4x3: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; case GL_DOUBLE_MAT4: gl.GetUniformdv(program_obj, location + i, (double *)(ptr + i * element_size)); break; } } return res; } static PyObject * MGLContext_write_uniform(MGLContext * self, PyObject * args) { int program_obj; int location; int gl_type; int array_length; int element_size; Py_buffer view = {}; if (!PyArg_ParseTuple(args, "IIIIIy*", &program_obj, &location, &gl_type, &array_length, &element_size, &view)) { return NULL; } if ((int)view.len != array_length * element_size) { MGLError_Set("invalid uniform size"); return NULL; } const GLMethods & gl = self->gl; char * ptr = (char *)view.buf; gl.UseProgram(program_obj); switch (gl_type) { case GL_BOOL: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_BOOL_VEC2: gl.Uniform2iv(location, array_length, (int *)ptr); break; case GL_BOOL_VEC3: gl.Uniform3iv(location, array_length, (int *)ptr); break; case GL_BOOL_VEC4: gl.Uniform4iv(location, array_length, (int *)ptr); break; case GL_INT: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_VEC2: gl.Uniform2iv(location, array_length, (int *)ptr); break; case GL_INT_VEC3: gl.Uniform3iv(location, array_length, (int *)ptr); break; case GL_INT_VEC4: gl.Uniform4iv(location, array_length, (int *)ptr); break; case GL_UNSIGNED_INT: gl.Uniform1uiv(location, array_length, (unsigned *)ptr); break; case GL_UNSIGNED_INT_VEC2: gl.Uniform2uiv(location, array_length, (unsigned *)ptr); break; case GL_UNSIGNED_INT_VEC3: gl.Uniform3uiv(location, array_length, (unsigned *)ptr); break; case GL_UNSIGNED_INT_VEC4: gl.Uniform4uiv(location, array_length, (unsigned *)ptr); break; case GL_FLOAT: gl.Uniform1fv(location, array_length, (float *)ptr); break; case GL_FLOAT_VEC2: gl.Uniform2fv(location, array_length, (float *)ptr); break; case GL_FLOAT_VEC3: gl.Uniform3fv(location, array_length, (float *)ptr); break; case GL_FLOAT_VEC4: gl.Uniform4fv(location, array_length, (float *)ptr); break; case GL_DOUBLE: gl.Uniform1dv(location, array_length, (double *)ptr); break; case GL_DOUBLE_VEC2: gl.Uniform2dv(location, array_length, (double *)ptr); break; case GL_DOUBLE_VEC3: gl.Uniform3dv(location, array_length, (double *)ptr); break; case GL_DOUBLE_VEC4: gl.Uniform4dv(location, array_length, (double *)ptr); break; case GL_SAMPLER_1D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_SAMPLER_1D_ARRAY: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_SAMPLER_1D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_SAMPLER_1D_ARRAY: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_SAMPLER_2D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_SAMPLER_2D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_UNSIGNED_INT_SAMPLER_2D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_SAMPLER_2D_ARRAY: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_SAMPLER_2D_ARRAY: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_SAMPLER_3D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_SAMPLER_3D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_UNSIGNED_INT_SAMPLER_3D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_SAMPLER_2D_SHADOW: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_SAMPLER_2D_MULTISAMPLE: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_SAMPLER_2D_MULTISAMPLE: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_SAMPLER_2D_MULTISAMPLE_ARRAY: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_SAMPLER_CUBE: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_INT_SAMPLER_CUBE: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_UNSIGNED_INT_SAMPLER_CUBE: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_IMAGE_2D: gl.Uniform1iv(location, array_length, (int *)ptr); break; case GL_FLOAT_MAT2: gl.UniformMatrix2fv(location, array_length, false, (float *)ptr); break; case GL_FLOAT_MAT2x3: gl.UniformMatrix2x3fv(location, array_length, false, (float *)ptr); break; case GL_FLOAT_MAT2x4: gl.UniformMatrix2x4fv(location, array_length, false, (float *)ptr); break; case GL_FLOAT_MAT3x2: gl.UniformMatrix3x2fv(location, array_length, false, (float *)ptr); break; case GL_FLOAT_MAT3: gl.UniformMatrix3fv(location, array_length, false, (float *)ptr); break; case GL_FLOAT_MAT3x4: gl.UniformMatrix3x4fv(location, array_length, false, (float *)ptr); break; case GL_FLOAT_MAT4x2: gl.UniformMatrix4x2fv(location, array_length, false, (float *)ptr); break; case GL_FLOAT_MAT4x3: gl.UniformMatrix4x3fv(location, array_length, false, (float *)ptr); break; case GL_FLOAT_MAT4: gl.UniformMatrix4fv(location, array_length, false, (float *)ptr); break; case GL_DOUBLE_MAT2: gl.UniformMatrix2dv(location, array_length, false, (double *)ptr); break; case GL_DOUBLE_MAT2x3: gl.UniformMatrix2x3dv(location, array_length, false, (double *)ptr); break; case GL_DOUBLE_MAT2x4: gl.UniformMatrix2x4dv(location, array_length, false, (double *)ptr); break; case GL_DOUBLE_MAT3x2: gl.UniformMatrix3x2dv(location, array_length, false, (double *)ptr); break; case GL_DOUBLE_MAT3: gl.UniformMatrix3dv(location, array_length, false, (double *)ptr); break; case GL_DOUBLE_MAT3x4: gl.UniformMatrix3x4dv(location, array_length, false, (double *)ptr); break; case GL_DOUBLE_MAT4x2: gl.UniformMatrix4x2dv(location, array_length, false, (double *)ptr); break; case GL_DOUBLE_MAT4x3: gl.UniformMatrix4x3dv(location, array_length, false, (double *)ptr); break; case GL_DOUBLE_MAT4: gl.UniformMatrix4dv(location, array_length, false, (double *)ptr); break; } PyBuffer_Release(&view); Py_RETURN_NONE; } static PyObject * MGLContext_set_uniform_handle(MGLContext * self, PyObject * args) { int program_obj; int location; unsigned long long handle; if (!PyArg_ParseTuple(args, "IIK", &program_obj, &location, &handle)) { return NULL; } self->gl.ProgramUniformHandleui64ARB(program_obj, location, handle); Py_RETURN_NONE; } static PyObject * MGLContext_get_line_width(MGLContext * self, void * closure) { float line_width = 0.0f; self->gl.GetFloatv(GL_LINE_WIDTH, &line_width); return PyFloat_FromDouble(line_width); } static int MGLContext_set_line_width(MGLContext * self, PyObject * value, void * closure) { float line_width = (float)PyFloat_AsDouble(value); if (PyErr_Occurred()) { return -1; } self->gl.LineWidth(line_width); return 0; } static PyObject * MGLContext_get_point_size(MGLContext * self, void * closure) { float point_size = 0.0f; self->gl.GetFloatv(GL_POINT_SIZE, &point_size); return PyFloat_FromDouble(point_size); } static int MGLContext_set_point_size(MGLContext * self, PyObject * value, void * closure) { float point_size = (float)PyFloat_AsDouble(value); if (PyErr_Occurred()) { return -1; } self->gl.PointSize(point_size); return 0; } static int parse_blend_func(PyObject * arg, int * value) { arg = PySequence_Tuple(arg); if (!arg) { PyErr_Clear(); return 0; } int size = (int)PyTuple_Size(arg); if (size == 4) { value[0] = PyLong_AsLong(PyTuple_GetItem(arg, 0)); value[1] = PyLong_AsLong(PyTuple_GetItem(arg, 1)); value[2] = PyLong_AsLong(PyTuple_GetItem(arg, 2)); value[3] = PyLong_AsLong(PyTuple_GetItem(arg, 3)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } } else if (size == 2) { value[0] = PyLong_AsLong(PyTuple_GetItem(arg, 0)); value[1] = PyLong_AsLong(PyTuple_GetItem(arg, 1)); value[2] = value[0]; value[3] = value[1]; if (PyErr_Occurred()) { PyErr_Clear(); return 0; } } else { return 0; } Py_DECREF(arg); return 1; } // NOTE: currently never called from python static PyObject * MGLContext_get_blend_func(MGLContext * self, void * closure) { return Py_BuildValue("(ii)", self->blend_func_src, self->blend_func_dst); } static int MGLContext_set_blend_func(MGLContext * self, PyObject * value, void * closure) { int func[4] = {}; if (!parse_blend_func(value, func)) { MGLError_Set("invalid blend func"); return -1; } self->gl.BlendFuncSeparate(func[0], func[1], func[2], func[3]); return 0; } static int parse_blend_equation(PyObject * arg, int * value) { if (PyLong_Check(arg)) { value[0] = PyLong_AsLong(arg); value[1] = value[0]; if (PyErr_Occurred()) { PyErr_Clear(); return 0; } return 1; } arg = PySequence_Tuple(arg); if (!arg) { PyErr_Clear(); return 0; } int size = (int)PyTuple_Size(arg); if (size == 2) { value[0] = PyLong_AsLong(PyTuple_GetItem(arg, 0)); value[1] = PyLong_AsLong(PyTuple_GetItem(arg, 1)); if (PyErr_Occurred()) { PyErr_Clear(); return 0; } } else if (size == 1) { value[0] = PyLong_AsLong(PyTuple_GetItem(arg, 0)); value[1] = value[0]; if (PyErr_Occurred()) { PyErr_Clear(); return 0; } } else { return 0; } Py_DECREF(arg); return 1; } // NOTE: currently never called from python static PyObject * MGLContext_get_blend_equation(MGLContext * self, void * closure) { return Py_BuildValue("(ii)", GL_FUNC_ADD, GL_FUNC_ADD); } static int MGLContext_set_blend_equation(MGLContext * self, PyObject * value, void * closure) { int equation[2] = {}; if (!parse_blend_equation(value, equation)) { MGLError_Set("invalid blend equation"); return -1; } self->gl.BlendEquationSeparate(equation[0], equation[1]); return 0; } static PyObject * MGLContext_get_depth_func(MGLContext * self, void * closure) { return compare_func_to_string(self->depth_func); } static int MGLContext_set_depth_func(MGLContext * self, PyObject * value, void * closure) { const char * func = PyUnicode_AsUTF8(value); if (PyErr_Occurred()) { return -1; } int depth_func = compare_func_from_string(func); if (!depth_func) { return -1; } self->depth_func = depth_func; self->gl.DepthFunc(self->depth_func); return 0; } static PyObject * MGLContext_get_depth_clamp_range(MGLContext * self, void * closure) { if (self->depth_clamp) { return Py_BuildValue("dd", self->depth_range[0], self->depth_range[1]); } Py_RETURN_NONE; } static int MGLContext_set_depth_clamp_range(MGLContext * self, PyObject * value, void * closure) { if (value == Py_None) { self->depth_clamp = false; self->depth_range[0] = 0.0; self->depth_range[1] = 1.0; self->gl.Disable(GL_DEPTH_CLAMP); self->gl.DepthRange(self->depth_range[0], self->depth_range[1]); return 0; } else if (PyTuple_CheckExact(value) && PyTuple_Size(value) == 2) { self->depth_clamp = true; self->depth_range[0] = PyFloat_AsDouble(PyTuple_GetItem(value, 0)); self->depth_range[1] = PyFloat_AsDouble(PyTuple_GetItem(value, 1)); self->gl.Enable(GL_DEPTH_CLAMP); self->gl.DepthRange(self->depth_range[0], self->depth_range[1]); return 0; } return -1; } static PyObject * MGLContext_get_multisample(MGLContext * self, void * closure) { return PyBool_FromLong(self->multisample); } static int MGLContext_set_multisample(MGLContext * self, PyObject * value, void * closure) { if (value == Py_True) { self->gl.Enable(GL_MULTISAMPLE); self->multisample = true; return 0; } else if (value == Py_False) { self->gl.Disable(GL_MULTISAMPLE); self->multisample = false; return 0; } return -1; } static PyObject * MGLContext_get_provoking_vertex(MGLContext * self, void * closure) { return PyLong_FromLong(self->provoking_vertex); } static int MGLContext_set_provoking_vertex(MGLContext * self, PyObject * value, void * closure) { int provoking_vertex_value = PyLong_AsLong(value); const GLMethods & gl = self->gl; if (provoking_vertex_value == GL_FIRST_VERTEX_CONVENTION || provoking_vertex_value == GL_LAST_VERTEX_CONVENTION) { gl.ProvokingVertex(provoking_vertex_value); self->provoking_vertex = provoking_vertex_value; return 0; } return -1; } static PyObject * MGLContext_get_polygon_offset(MGLContext * self, void * closure) { return Py_BuildValue("ff", self->polygon_offset_factor, self->polygon_offset_units); } static int MGLContext_set_polygon_offset(MGLContext * self, PyObject * value, void * closure) { if (!PyTuple_CheckExact(value) || PyTuple_Size(value) != 2) { return -1; } float polygon_offset_factor = (float)PyFloat_AsDouble(PyTuple_GetItem(value, 0)); float polygon_offset_units = (float)PyFloat_AsDouble(PyTuple_GetItem(value, 1)); const GLMethods & gl = self->gl; if (polygon_offset_factor || polygon_offset_units) { gl.Enable(GL_POLYGON_OFFSET_POINT); gl.Enable(GL_POLYGON_OFFSET_LINE); gl.Enable(GL_POLYGON_OFFSET_FILL); } else { gl.Disable(GL_POLYGON_OFFSET_POINT); gl.Disable(GL_POLYGON_OFFSET_LINE); gl.Disable(GL_POLYGON_OFFSET_FILL); } gl.PolygonOffset(polygon_offset_factor, polygon_offset_units); self->polygon_offset_factor = polygon_offset_factor; self->polygon_offset_units = polygon_offset_units; return 0; } static PyObject * MGLContext_get_includes(MGLContext * self, void * closure) { Py_INCREF(self->includes); return self->includes; } static PyObject * MGLContext_get_default_texture_unit(MGLContext * self, void * closure) { return PyLong_FromLong(self->default_texture_unit); } static int MGLContext_set_default_texture_unit(MGLContext * self, PyObject * value, void * closure) { int default_texture_unit = PyLong_AsLong(value); if (PyErr_Occurred()) { return -1; } self->default_texture_unit = default_texture_unit; return 0; } static PyObject * MGLContext_get_max_samples(MGLContext * self, void * closure) { return PyLong_FromLong(self->max_samples); } static PyObject * MGLContext_get_max_integer_samples(MGLContext * self, void * closure) { return PyLong_FromLong(self->max_integer_samples); } static PyObject * MGLContext_get_max_texture_units(MGLContext * self, void * closure) { return PyLong_FromLong(self->max_texture_units); } static PyObject * MGLContext_get_max_anisotropy(MGLContext * self, void * closure) { return PyFloat_FromDouble(self->max_anisotropy); } static PyObject * MGLContext_get_max_label_length(MGLContext * self, void * closure) { if (self->max_label_length > 0) { return PyLong_FromLong(self->max_label_length); } else { Py_RETURN_NONE; } } static PyObject * MGLContext_get_max_debug_message_length(MGLContext * self, void * closure) { if (self->max_debug_message_length > 0) { return PyLong_FromLong(self->max_debug_message_length); } else { Py_RETURN_NONE; } } static PyObject * MGLContext_get_max_debug_group_stack_depth(MGLContext * self, void * closure) { if (self->max_debug_group_stack_depth > 0) { return PyLong_FromLong(self->max_debug_group_stack_depth); } else { Py_RETURN_NONE; } } static MGLFramebuffer * MGLContext_get_fbo(MGLContext * self, void * closure) { Py_INCREF(self->bound_framebuffer); return self->bound_framebuffer; } static int MGLContext_set_fbo(MGLContext * self, PyObject * value, void * closure) { if (Py_TYPE(value) != MGLFramebuffer_type) { return -1; } Py_INCREF(value); Py_DECREF(self->bound_framebuffer); self->bound_framebuffer = (MGLFramebuffer *)value; return 0; } static PyObject * MGLContext_get_wireframe(MGLContext * self, void * closure) { return PyBool_FromLong(self->wireframe); } static int MGLContext_set_wireframe(MGLContext * self, PyObject * value, void * closure) { if (value == Py_True) { self->gl.PolygonMode(GL_FRONT_AND_BACK, GL_LINE); self->wireframe = true; } else if (value == Py_False) { self->gl.PolygonMode(GL_FRONT_AND_BACK, GL_FILL); self->wireframe = false; } else { MGLError_Set("invalid value for wireframe"); return -1; } return 0; } static PyObject * MGLContext_get_front_face(MGLContext * self, void * closure) { if (self->front_face == GL_CW) { static PyObject * res_cw = PyUnicode_FromString("cw"); Py_INCREF(res_cw); return res_cw; } static PyObject * res_ccw = PyUnicode_FromString("ccw"); Py_INCREF(res_ccw); return res_ccw; } static int MGLContext_set_front_face(MGLContext * self, PyObject * value, void * closure) { const char * str = PyUnicode_AsUTF8(value); if (!strcmp(str, "cw")) { self->front_face = GL_CW; } else if (!strcmp(str, "ccw")) { self->front_face = GL_CCW; } else { MGLError_Set("invalid front_face"); return -1; } self->gl.FrontFace(self->front_face); return 0; } static PyObject * MGLContext_get_cull_face(MGLContext * self, void * closure) { if (self->cull_face == GL_FRONT) { static PyObject * res_cw = PyUnicode_FromString("front"); Py_INCREF(res_cw); return res_cw; } else if (self->cull_face == GL_BACK) { static PyObject * res_cw = PyUnicode_FromString("back"); Py_INCREF(res_cw); return res_cw; } static PyObject * res_ccw = PyUnicode_FromString("front_and_back"); Py_INCREF(res_ccw); return res_ccw; } static int MGLContext_set_cull_face(MGLContext * self, PyObject * value, void * closure) { const char * str = PyUnicode_AsUTF8(value); if (!strcmp(str, "front")) { self->cull_face = GL_FRONT; } else if (!strcmp(str, "back")) { self->cull_face = GL_BACK; } else if (!strcmp(str, "front_and_back")) { self->cull_face = GL_FRONT_AND_BACK; } else { MGLError_Set("invalid cull_face"); return -1; } self->gl.CullFace(self->cull_face); return 0; } static PyObject * MGLContext_get_patch_vertices(MGLContext * self, void * closure) { int patch_vertices = 0; self->gl.GetIntegerv(GL_PATCH_VERTICES, &patch_vertices); return PyLong_FromLong(patch_vertices); } static int MGLContext_set_patch_vertices(MGLContext * self, PyObject * value, void * closure) { int patch_vertices = PyLong_AsLong(value); if (PyErr_Occurred()) { return -1; } if (!patch_vertices) { return -1; } self->gl.PatchParameteri(GL_PATCH_VERTICES, patch_vertices); return 0; } static PyObject * MGLContext_get_error(MGLContext * self, void * closure) { switch (self->gl.GetError()) { case GL_NO_ERROR: return PyUnicode_FromFormat("GL_NO_ERROR"); case GL_INVALID_ENUM: return PyUnicode_FromFormat("GL_INVALID_ENUM"); case GL_INVALID_VALUE: return PyUnicode_FromFormat("GL_INVALID_VALUE"); case GL_INVALID_OPERATION: return PyUnicode_FromFormat("GL_INVALID_OPERATION"); case GL_INVALID_FRAMEBUFFER_OPERATION: return PyUnicode_FromFormat("GL_INVALID_FRAMEBUFFER_OPERATION"); case GL_OUT_OF_MEMORY: return PyUnicode_FromFormat("GL_OUT_OF_MEMORY"); case GL_STACK_UNDERFLOW: return PyUnicode_FromFormat("GL_STACK_UNDERFLOW"); case GL_STACK_OVERFLOW: return PyUnicode_FromFormat("GL_STACK_OVERFLOW"); case GL_CONTEXT_LOST: return PyUnicode_FromFormat("GL_CONTEXT_LOST"); } return PyUnicode_FromFormat("GL_UNKNOWN_ERROR"); } static PyObject * MGLContext_get_extensions(MGLContext * self, void * closure) { Py_INCREF(self->extensions); return self->extensions; } static PyObject * MGLContext_get_context(MGLContext * self, void * closure) { Py_INCREF(self->ctx); return self->ctx; } static void set_key(PyObject * dict, const char * key, PyObject * value) { PyDict_SetItemString(dict, key, value); Py_DECREF(value); } static void set_info_str(MGLContext * self, PyObject * info, const char * name, GLenum param) { const char * ptr = (const char *)self->gl.GetString(param); set_key(info, name, PyUnicode_FromString(ptr ? ptr : "")); } static void set_info_bool(MGLContext * self, PyObject * info, const char * name, GLenum param) { int value = 0; self->gl.GetBooleanv(param, (unsigned char *)&value); PyDict_SetItemString(info, name, value ? Py_True : Py_False); } static void set_info_float(MGLContext * self, PyObject * info, const char * name, GLenum param) { float value = 0.0f; self->gl.GetFloatv(param, &value); set_key(info, name, PyFloat_FromDouble(value)); } static void set_info_int(MGLContext * self, PyObject * info, const char * name, GLenum param) { int value = 0; self->gl.GetIntegerv(param, &value); set_key(info, name, PyLong_FromLong(value)); } static void set_info_int64(MGLContext * self, PyObject * info, const char * name, GLenum param) { long long value = 0; if (self->gl.GetInteger64v) { self->gl.GetInteger64v(param, (GLint64 *)&value); } set_key(info, name, PyLong_FromLongLong(value)); } static void set_info_float_range(MGLContext * self, PyObject * info, const char * name, GLenum param) { float value[2] = {}; self->gl.GetFloatv(param, value); set_key(info, name, Py_BuildValue("(ff)", value[0], value[1])); } static void set_info_int_range(MGLContext * self, PyObject * info, const char * name, GLenum param) { int value[2] = {}; self->gl.GetIntegerv(param, value); set_key(info, name, Py_BuildValue("(ii)", value[0], value[1])); } static void set_info_int_xyz(MGLContext * self, PyObject * info, const char * name, GLenum param) { int value[3] = {}; if (self->gl.GetIntegeri_v) { self->gl.GetIntegeri_v(param, 0, &value[0]); self->gl.GetIntegeri_v(param, 1, &value[1]); self->gl.GetIntegeri_v(param, 2, &value[2]); } set_key(info, name, Py_BuildValue("(iii)", value[0], value[1], value[2])); } static PyObject * MGLContext_get_info(MGLContext * self, void * closure) { PyObject * info = PyDict_New(); set_info_str(self, info, "GL_VENDOR", GL_VENDOR); set_info_str(self, info, "GL_RENDERER", GL_RENDERER); set_info_str(self, info, "GL_VERSION", GL_VERSION); set_info_float_range(self, info, "GL_POINT_SIZE_RANGE", GL_POINT_SIZE_RANGE); set_info_float_range(self, info, "GL_SMOOTH_LINE_WIDTH_RANGE", GL_SMOOTH_LINE_WIDTH_RANGE); set_info_float_range(self, info, "GL_ALIASED_LINE_WIDTH_RANGE", GL_ALIASED_LINE_WIDTH_RANGE); set_info_float(self, info, "GL_POINT_FADE_THRESHOLD_SIZE", GL_POINT_FADE_THRESHOLD_SIZE); set_info_float(self, info, "GL_POINT_SIZE_GRANULARITY", GL_POINT_SIZE_GRANULARITY); set_info_float(self, info, "GL_SMOOTH_LINE_WIDTH_GRANULARITY", GL_SMOOTH_LINE_WIDTH_GRANULARITY); set_info_float(self, info, "GL_MIN_PROGRAM_TEXEL_OFFSET", GL_MIN_PROGRAM_TEXEL_OFFSET); set_info_float(self, info, "GL_MAX_PROGRAM_TEXEL_OFFSET", GL_MAX_PROGRAM_TEXEL_OFFSET); set_info_int(self, info, "GL_MINOR_VERSION", GL_MINOR_VERSION); set_info_int(self, info, "GL_MAJOR_VERSION", GL_MAJOR_VERSION); set_info_int(self, info, "GL_SAMPLE_BUFFERS", GL_SAMPLE_BUFFERS); set_info_int(self, info, "GL_SUBPIXEL_BITS", GL_SUBPIXEL_BITS); set_info_int(self, info, "GL_CONTEXT_PROFILE_MASK", GL_CONTEXT_PROFILE_MASK); set_info_int(self, info, "GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT", GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT); set_info_bool(self, info, "GL_DOUBLEBUFFER", GL_DOUBLEBUFFER); set_info_bool(self, info, "GL_STEREO", GL_STEREO); set_info_int_range(self, info, "GL_MAX_VIEWPORT_DIMS", GL_MAX_VIEWPORT_DIMS); set_info_int(self, info, "GL_MAX_3D_TEXTURE_SIZE", GL_MAX_3D_TEXTURE_SIZE); set_info_int(self, info, "GL_MAX_ARRAY_TEXTURE_LAYERS", GL_MAX_ARRAY_TEXTURE_LAYERS); set_info_int(self, info, "GL_MAX_CLIP_DISTANCES", GL_MAX_CLIP_DISTANCES); set_info_int(self, info, "GL_MAX_COLOR_ATTACHMENTS", GL_MAX_COLOR_ATTACHMENTS); set_info_int(self, info, "GL_MAX_COLOR_TEXTURE_SAMPLES", GL_MAX_COLOR_TEXTURE_SAMPLES); set_info_int(self, info, "GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS", GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS); set_info_int(self, info, "GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS); set_info_int(self, info, "GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS", GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS); set_info_int(self, info, "GL_MAX_COMBINED_UNIFORM_BLOCKS", GL_MAX_COMBINED_UNIFORM_BLOCKS); set_info_int(self, info, "GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS", GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS); set_info_int(self, info, "GL_MAX_CUBE_MAP_TEXTURE_SIZE", GL_MAX_CUBE_MAP_TEXTURE_SIZE); set_info_int(self, info, "GL_MAX_DEPTH_TEXTURE_SAMPLES", GL_MAX_DEPTH_TEXTURE_SAMPLES); set_info_int(self, info, "GL_MAX_DRAW_BUFFERS", GL_MAX_DRAW_BUFFERS); set_info_int(self, info, "GL_MAX_DUAL_SOURCE_DRAW_BUFFERS", GL_MAX_DUAL_SOURCE_DRAW_BUFFERS); set_info_int(self, info, "GL_MAX_ELEMENTS_INDICES", GL_MAX_ELEMENTS_INDICES); set_info_int(self, info, "GL_MAX_ELEMENTS_VERTICES", GL_MAX_ELEMENTS_VERTICES); set_info_int(self, info, "GL_MAX_FRAGMENT_INPUT_COMPONENTS", GL_MAX_FRAGMENT_INPUT_COMPONENTS); set_info_int(self, info, "GL_MAX_FRAGMENT_UNIFORM_COMPONENTS", GL_MAX_FRAGMENT_UNIFORM_COMPONENTS); set_info_int(self, info, "GL_MAX_FRAGMENT_UNIFORM_VECTORS", GL_MAX_FRAGMENT_UNIFORM_VECTORS); set_info_int(self, info, "GL_MAX_FRAGMENT_UNIFORM_BLOCKS", GL_MAX_FRAGMENT_UNIFORM_BLOCKS); set_info_int(self, info, "GL_MAX_GEOMETRY_INPUT_COMPONENTS", GL_MAX_GEOMETRY_INPUT_COMPONENTS); set_info_int(self, info, "GL_MAX_GEOMETRY_OUTPUT_COMPONENTS", GL_MAX_GEOMETRY_OUTPUT_COMPONENTS); set_info_int(self, info, "GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS", GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS); set_info_int(self, info, "GL_MAX_GEOMETRY_UNIFORM_BLOCKS", GL_MAX_GEOMETRY_UNIFORM_BLOCKS); set_info_int(self, info, "GL_MAX_GEOMETRY_UNIFORM_COMPONENTS", GL_MAX_GEOMETRY_UNIFORM_COMPONENTS); set_info_int(self, info, "GL_MAX_GEOMETRY_OUTPUT_VERTICES", GL_MAX_GEOMETRY_OUTPUT_VERTICES); set_info_int(self, info, "GL_MAX_INTEGER_SAMPLES", GL_MAX_INTEGER_SAMPLES); set_info_int(self, info, "GL_MAX_SAMPLES", GL_MAX_SAMPLES); set_info_int(self, info, "GL_MAX_RECTANGLE_TEXTURE_SIZE", GL_MAX_RECTANGLE_TEXTURE_SIZE); set_info_int(self, info, "GL_MAX_RENDERBUFFER_SIZE", GL_MAX_RENDERBUFFER_SIZE); set_info_int(self, info, "GL_MAX_SAMPLE_MASK_WORDS", GL_MAX_SAMPLE_MASK_WORDS); set_info_int(self, info, "GL_MAX_TEXTURE_BUFFER_SIZE", GL_MAX_TEXTURE_BUFFER_SIZE); set_info_int(self, info, "GL_MAX_TEXTURE_IMAGE_UNITS", GL_MAX_TEXTURE_IMAGE_UNITS); set_info_int(self, info, "GL_MAX_TEXTURE_LOD_BIAS", GL_MAX_TEXTURE_LOD_BIAS); set_info_int(self, info, "GL_MAX_TEXTURE_SIZE", GL_MAX_TEXTURE_SIZE); set_info_int(self, info, "GL_MAX_UNIFORM_BUFFER_BINDINGS", GL_MAX_UNIFORM_BUFFER_BINDINGS); set_info_int(self, info, "GL_MAX_UNIFORM_BLOCK_SIZE", GL_MAX_UNIFORM_BLOCK_SIZE); set_info_int(self, info, "GL_MAX_VARYING_VECTORS", GL_MAX_VARYING_VECTORS); set_info_int(self, info, "GL_MAX_VERTEX_ATTRIBS", GL_MAX_VERTEX_ATTRIBS); set_info_int(self, info, "GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS", GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS); set_info_int(self, info, "GL_MAX_VERTEX_UNIFORM_COMPONENTS", GL_MAX_VERTEX_UNIFORM_COMPONENTS); set_info_int(self, info, "GL_MAX_VERTEX_UNIFORM_VECTORS", GL_MAX_VERTEX_UNIFORM_VECTORS); set_info_int(self, info, "GL_MAX_VERTEX_OUTPUT_COMPONENTS", GL_MAX_VERTEX_OUTPUT_COMPONENTS); set_info_int(self, info, "GL_MAX_VERTEX_UNIFORM_BLOCKS", GL_MAX_VERTEX_UNIFORM_BLOCKS); set_info_int64(self, info, "GL_MAX_SERVER_WAIT_TIMEOUT", GL_MAX_SERVER_WAIT_TIMEOUT); if (self->version_code >= 410) { set_info_int_range(self, info, "GL_VIEWPORT_BOUNDS_RANGE", GL_VIEWPORT_BOUNDS_RANGE); set_info_int(self, info, "GL_VIEWPORT_SUBPIXEL_BITS", GL_VIEWPORT_SUBPIXEL_BITS); set_info_int(self, info, "GL_MAX_VIEWPORTS", GL_MAX_VIEWPORTS); } if (self->version_code >= 420) { set_info_int(self, info, "GL_MIN_MAP_BUFFER_ALIGNMENT", GL_MIN_MAP_BUFFER_ALIGNMENT); set_info_int(self, info, "GL_MAX_COMBINED_ATOMIC_COUNTERS", GL_MAX_COMBINED_ATOMIC_COUNTERS); set_info_int(self, info, "GL_MAX_FRAGMENT_ATOMIC_COUNTERS", GL_MAX_FRAGMENT_ATOMIC_COUNTERS); set_info_int(self, info, "GL_MAX_GEOMETRY_ATOMIC_COUNTERS", GL_MAX_GEOMETRY_ATOMIC_COUNTERS); set_info_int(self, info, "GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS", GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS); set_info_int(self, info, "GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS", GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS); set_info_int(self, info, "GL_MAX_VERTEX_ATOMIC_COUNTERS", GL_MAX_VERTEX_ATOMIC_COUNTERS); } if (self->version_code >= 430) { set_info_int_xyz(self, info, "GL_MAX_COMPUTE_WORK_GROUP_COUNT", GL_MAX_COMPUTE_WORK_GROUP_COUNT); set_info_int_xyz(self, info, "GL_MAX_COMPUTE_WORK_GROUP_SIZE", GL_MAX_COMPUTE_WORK_GROUP_SIZE); set_info_int(self, info, "GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET", GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET); set_info_int(self, info, "GL_MAX_VERTEX_ATTRIB_BINDINGS", GL_MAX_VERTEX_ATTRIB_BINDINGS); set_info_int(self, info, "GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS", GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS); set_info_int(self, info, "GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS", GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS); set_info_int(self, info, "GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS", GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS); set_info_int(self, info, "GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS", GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS); set_info_int(self, info, "GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS", GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS); set_info_int(self, info, "GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS", GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS); set_info_int(self, info, "GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS", GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS); set_info_int(self, info, "GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS", GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS); set_info_int(self, info, "GL_MAX_COMPUTE_UNIFORM_COMPONENTS", GL_MAX_COMPUTE_UNIFORM_COMPONENTS); set_info_int(self, info, "GL_MAX_COMPUTE_ATOMIC_COUNTERS", GL_MAX_COMPUTE_ATOMIC_COUNTERS); set_info_int(self, info, "GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS", GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS); set_info_int(self, info, "GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS", GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS); set_info_int(self, info, "GL_MAX_COMPUTE_UNIFORM_BLOCKS", GL_MAX_COMPUTE_UNIFORM_BLOCKS); set_info_int(self, info, "GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS", GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS); set_info_int(self, info, "GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS", GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS); set_info_int(self, info, "GL_MAX_FRAMEBUFFER_WIDTH", GL_MAX_FRAMEBUFFER_WIDTH); set_info_int(self, info, "GL_MAX_FRAMEBUFFER_HEIGHT", GL_MAX_FRAMEBUFFER_HEIGHT); set_info_int(self, info, "GL_MAX_FRAMEBUFFER_LAYERS", GL_MAX_FRAMEBUFFER_LAYERS); set_info_int(self, info, "GL_MAX_FRAMEBUFFER_SAMPLES", GL_MAX_FRAMEBUFFER_SAMPLES); set_info_int(self, info, "GL_MAX_UNIFORM_LOCATIONS", GL_MAX_UNIFORM_LOCATIONS); set_info_int(self, info, "GL_MAX_LABEL_LENGTH", GL_MAX_LABEL_LENGTH); set_info_int64(self, info, "GL_MAX_ELEMENT_INDEX", GL_MAX_ELEMENT_INDEX); set_info_int64(self, info, "GL_MAX_SHADER_STORAGE_BLOCK_SIZE", GL_MAX_SHADER_STORAGE_BLOCK_SIZE); } // GL_EXT_debug_label doesn't define a MAX_LABEL_LENGTH constant return info; } static PyObject * strsize(PyObject * self, PyObject * args) { const char * str; int args_ok = PyArg_ParseTuple( args, "s", &str ); if (!args_ok) { return 0; } char first_chr = *str++; if (first_chr < '1' || first_chr > '9') { return 0; } long long value = first_chr - '0'; while (char chr = *str++) { if (chr < '0' || chr > '9') { switch (chr) { case 'G': value *= 1024; case 'M': value *= 1024; case 'K': value *= 1024; if (*str++ != 'B') { return 0; } case 'B': if (*str++) { return 0; } case 0: break; default: return 0; } break; } value = value * 10 + chr - '0'; } return PyLong_FromLongLong(value); } static PyObject * expected_size(PyObject * self, PyObject * args) { int width; int height; int depth; int components; int alignment; const char * dtype; if (!PyArg_ParseTuple(args, "IIIIIs", &width, &height, &depth, &components, &alignment, &dtype)) { return NULL; } MGLDataType * data_type = from_dtype(dtype); if (!data_type) { MGLError_Set("invalid dtype"); return 0; } unsigned long long expected_size = (unsigned long long)width * components * data_type->size; expected_size = (expected_size + alignment - 1) / alignment * alignment; expected_size = expected_size * height * depth; return PyLong_FromLong(expected_size); } static PyObject * writable_bytes(PyObject * self, PyObject * arg) { PyObject * bytes = PyBytes_FromStringAndSize(NULL, PyLong_AsLong(arg)); PyObject * mem = PyMemoryView_FromMemory(PyBytes_AsString(bytes), PyBytes_Size(bytes), PyBUF_WRITE); return Py_BuildValue("(NN)", bytes, mem); } static PyObject * create_context(PyObject * self, PyObject * args, PyObject * kwargs) { PyObject * context = PyDict_GetItemString(kwargs, "context"); if (!context) { PyObject * glcontext = PyImport_ImportModule("glcontext"); if (!glcontext) { // Displayed to user: ModuleNotFoundError: No module named 'glcontext' return NULL; } PyObject * backend = NULL; PyObject * backend_name = PyDict_GetItemString(kwargs, "backend"); // Use the specified backend if (backend_name) { backend = PyObject_CallMethod(glcontext, "get_backend_by_name", "O", backend_name); if (backend == Py_None || backend == NULL) { return NULL; } // Use default backend } else { backend = PyObject_CallMethod(glcontext, "default_backend", NULL); if (backend == Py_None || backend == NULL) { MGLError_Set("glcontext: Could not get a default backend"); return NULL; } } // Ensure we have a callable if (!PyCallable_Check(backend)) { MGLError_Set("The returned glcontext is not a callable"); return NULL; } // Create context by simply forwarding all arguments context = PyObject_Call(backend, args, kwargs); if (!context) { return NULL; } } else { Py_INCREF(context); } MGLContext * ctx = PyObject_New(MGLContext, MGLContext_type); ctx->released = false; ctx->wireframe = false; ctx->ctx = context; ctx->gl = load_gl_methods(context); if (PyErr_Occurred()) { return NULL; } const GLMethods & gl = ctx->gl; int major = 0; int minor = 0; gl.GetIntegerv(GL_MAJOR_VERSION, &major); gl.GetIntegerv(GL_MINOR_VERSION, &minor); ctx->version_code = major * 100 + minor * 10; // Load extensions int num_extensions = 0; gl.GetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); ctx->extensions = PySet_New(NULL); for(int i = 0; i < num_extensions; i++) { const char * ext = (const char *)gl.GetStringi(GL_EXTENSIONS, i); PyObject * ext_name = PyUnicode_FromString(ext); PySet_Add(ctx->extensions, ext_name); } gl.BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); gl.Enable(GL_TEXTURE_CUBE_MAP_SEAMLESS); if (gl.PrimitiveRestartIndex) { gl.Enable(GL_PRIMITIVE_RESTART); gl.PrimitiveRestartIndex(-1); } else { gl.Enable(GL_PRIMITIVE_RESTART_FIXED_INDEX); } ctx->max_samples = 0; gl.GetIntegerv(GL_MAX_SAMPLES, (GLint *)&ctx->max_samples); ctx->max_integer_samples = 0; gl.GetIntegerv(GL_MAX_INTEGER_SAMPLES, (GLint *)&ctx->max_integer_samples); ctx->max_color_attachments = 0; gl.GetIntegerv(GL_MAX_COLOR_ATTACHMENTS, (GLint *)&ctx->max_color_attachments); ctx->max_texture_units = 0; gl.GetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, (GLint *)&ctx->max_texture_units); ctx->default_texture_unit = ctx->max_texture_units - 1; ctx->max_label_length = 0; gl.GetIntegerv(GL_MAX_LABEL_LENGTH, (GLint *)&ctx->max_label_length); ctx->max_debug_message_length = 0; gl.GetIntegerv(GL_MAX_DEBUG_MESSAGE_LENGTH, (GLint *)&ctx->max_debug_message_length); ctx->max_debug_group_stack_depth = 0; gl.GetIntegerv(GL_MAX_DEBUG_GROUP_STACK_DEPTH, (GLint *)&ctx->max_debug_group_stack_depth); ctx->max_anisotropy = 0.0; gl.GetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY, (GLfloat *)&ctx->max_anisotropy); int bound_framebuffer = 0; gl.GetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, &bound_framebuffer); #ifdef __APPLE__ if (PyObject_HasAttrString(ctx->ctx, "standalone") && PyObject_IsTrue(PyObject_GetAttrString(ctx->ctx, "standalone"))) { int renderbuffer = 0; gl.GenRenderbuffers(1, (GLuint *)&renderbuffer); gl.BindRenderbuffer(GL_RENDERBUFFER, renderbuffer); gl.RenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, 4, 4); int framebuffer = 0; gl.GenFramebuffers(1, (GLuint *)&framebuffer); gl.BindFramebuffer(GL_FRAMEBUFFER, framebuffer); gl.FramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderbuffer); bound_framebuffer = framebuffer; } #endif { MGLFramebuffer * framebuffer = PyObject_New(MGLFramebuffer, MGLFramebuffer_type); framebuffer->released = false; framebuffer->framebuffer_obj = 0; framebuffer->draw_buffers_len = 1; // According to glGet docs: // The initial value is GL_BACK if there are back buffers, otherwise it is GL_FRONT. // According to glDrawBuffer docs: // The symbolic constants GL_FRONT, GL_BACK, GL_LEFT, GL_RIGHT, and GL_FRONT_AND_BACK // are not allowed in the bufs array since they may refer to multiple buffers. // GL_COLOR_ATTACHMENT0 is causes error: 1282 // This value is temporarily ignored // framebuffer->draw_buffers[0] = GL_COLOR_ATTACHMENT0; // framebuffer->draw_buffers[0] = GL_BACK_LEFT; gl.BindFramebuffer(GL_FRAMEBUFFER, 0); gl.GetIntegerv(GL_DRAW_BUFFER, (int *)&framebuffer->draw_buffers[0]); gl.BindFramebuffer(GL_FRAMEBUFFER, bound_framebuffer); framebuffer->color_mask[0] = 0xf; framebuffer->depth_mask = true; framebuffer->context = ctx; Rect scissor_box = {}; gl.GetIntegerv(GL_SCISSOR_BOX, (int *)&scissor_box); framebuffer->viewport = scissor_box; framebuffer->scissor_enabled = false; framebuffer->scissor = scissor_box; framebuffer->width = scissor_box.width; framebuffer->height = scissor_box.height; framebuffer->dynamic = true; Py_INCREF(framebuffer); ctx->default_framebuffer = framebuffer; } Py_INCREF(ctx->default_framebuffer); ctx->bound_framebuffer = ctx->default_framebuffer; ctx->includes = PyDict_New(); ctx->enable_flags = 0; ctx->front_face = GL_CCW; ctx->depth_func = GL_LEQUAL; ctx->depth_clamp = false; ctx->depth_range[0] = 0.0; ctx->depth_range[1] = 1.0; ctx->blend_func_src = GL_SRC_ALPHA; ctx->blend_func_dst = GL_ONE_MINUS_SRC_ALPHA; ctx->wireframe = false; ctx->multisample = true; ctx->provoking_vertex = GL_LAST_VERTEX_CONVENTION; ctx->polygon_offset_factor = 0.0f; ctx->polygon_offset_units = 0.0f; gl.GetError(); // clear errors if (PyErr_Occurred()) { return 0; } return Py_BuildValue("(Oi)", ctx, ctx->version_code); } static void default_dealloc(PyObject * self) { Py_TYPE(self)->tp_free(self); } static PyMethodDef MGL_module_methods[] = { {(char *)"strsize", (PyCFunction)strsize, METH_VARARGS}, {(char *)"create_context", (PyCFunction)create_context, METH_VARARGS | METH_KEYWORDS}, {(char *)"writable_bytes", (PyCFunction)writable_bytes, METH_O}, {(char *)"expected_size", (PyCFunction)expected_size, METH_VARARGS}, {}, }; static PyGetSetDef MGLBuffer_getset[] = { {}, }; static PyMethodDef MGLBuffer_methods[] = { {(char *)"write", (PyCFunction)MGLBuffer_write, METH_VARARGS}, {(char *)"read", (PyCFunction)MGLBuffer_read, METH_VARARGS}, {(char *)"read_into", (PyCFunction)MGLBuffer_read_into, METH_VARARGS}, {(char *)"write_chunks", (PyCFunction)MGLBuffer_write_chunks, METH_VARARGS}, {(char *)"read_chunks", (PyCFunction)MGLBuffer_read_chunks, METH_VARARGS}, {(char *)"read_chunks_into", (PyCFunction)MGLBuffer_read_chunks_into, METH_VARARGS}, {(char *)"clear", (PyCFunction)MGLBuffer_clear, METH_VARARGS}, {(char *)"orphan", (PyCFunction)MGLBuffer_orphan, METH_VARARGS}, {(char *)"bind_to_uniform_block", (PyCFunction)MGLBuffer_bind_to_uniform_block, METH_VARARGS}, {(char *)"bind_to_storage_buffer", (PyCFunction)MGLBuffer_bind_to_storage_buffer, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLBuffer_release, METH_NOARGS}, {(char *)"size", (PyCFunction)MGLBuffer_size, METH_NOARGS}, {}, }; static PyMethodDef MGLContext_methods[] = { {(char *)"enable_only", (PyCFunction)MGLContext_enable_only, METH_VARARGS}, {(char *)"enable", (PyCFunction)MGLContext_enable, METH_VARARGS}, {(char *)"disable", (PyCFunction)MGLContext_disable, METH_VARARGS}, {(char *)"enable_direct", (PyCFunction)MGLContext_enable_direct, METH_VARARGS}, {(char *)"disable_direct", (PyCFunction)MGLContext_disable_direct, METH_VARARGS}, {(char *)"finish", (PyCFunction)MGLContext_finish, METH_NOARGS}, {(char *)"copy_buffer", (PyCFunction)MGLContext_copy_buffer, METH_VARARGS}, {(char *)"copy_framebuffer", (PyCFunction)MGLContext_copy_framebuffer, METH_VARARGS}, {(char *)"detect_framebuffer", (PyCFunction)MGLContext_detect_framebuffer, METH_VARARGS}, {(char *)"clear_samplers", (PyCFunction)MGLContext_clear_samplers, METH_VARARGS}, {(char *)"buffer", (PyCFunction)MGLContext_buffer, METH_VARARGS}, {(char *)"external_buffer", (PyCFunction)MGLContext_external_buffer, METH_VARARGS}, {(char *)"texture", (PyCFunction)MGLContext_texture, METH_VARARGS}, {(char *)"texture3d", (PyCFunction)MGLContext_texture3d, METH_VARARGS}, {(char *)"texture_array", (PyCFunction)MGLContext_texture_array, METH_VARARGS}, {(char *)"texture_cube", (PyCFunction)MGLContext_texture_cube, METH_VARARGS}, {(char *)"depth_texture", (PyCFunction)MGLContext_depth_texture, METH_VARARGS}, {(char *)"depth_texture_cube", (PyCFunction)MGLContext_depth_texture_cube, METH_VARARGS}, {(char *)"external_texture", (PyCFunction)MGLContext_external_texture, METH_VARARGS}, {(char *)"vertex_array", (PyCFunction)MGLContext_vertex_array, METH_VARARGS}, {(char *)"program", (PyCFunction)MGLContext_program, METH_VARARGS}, {(char *)"framebuffer", (PyCFunction)MGLContext_framebuffer, METH_VARARGS}, {(char *)"empty_framebuffer", (PyCFunction)MGLContext_empty_framebuffer, METH_VARARGS}, {(char *)"query", (PyCFunction)MGLContext_query, METH_VARARGS}, {(char *)"scope", (PyCFunction)MGLContext_scope, METH_VARARGS}, {(char *)"sampler", (PyCFunction)MGLContext_sampler, METH_VARARGS}, {(char *)"memory_barrier", (PyCFunction)MGLContext_memory_barrier, METH_VARARGS}, {(char *)"get_label", (PyCFunction)MGLContext_get_label, METH_VARARGS}, {(char *)"set_label", (PyCFunction)MGLContext_set_label, METH_VARARGS}, {(char *)"push_debug_scope", (PyCFunction)MGLContext_push_debug_scope, METH_VARARGS}, {(char *)"pop_debug_scope", (PyCFunction)MGLContext_pop_debug_scope, METH_NOARGS}, {(char *)"__enter__", (PyCFunction)MGLContext_enter, METH_NOARGS}, {(char *)"__exit__", (PyCFunction)MGLContext_exit, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLContext_release, METH_NOARGS}, {(char *)"clear_errors", (PyCFunction)MGLContext_clear_errors, METH_NOARGS}, {(char *)"_get_ubo_binding", (PyCFunction)MGLContext_get_ubo_binding, METH_VARARGS}, {(char *)"_set_ubo_binding", (PyCFunction)MGLContext_set_ubo_binding, METH_VARARGS}, {(char *)"_get_storage_block_binding", (PyCFunction)MGLContext_get_storage_block_binding, METH_VARARGS}, {(char *)"_set_storage_block_binding", (PyCFunction)MGLContext_set_storage_block_binding, METH_VARARGS}, {(char *)"_write_uniform", (PyCFunction)MGLContext_write_uniform, METH_VARARGS}, {(char *)"_read_uniform", (PyCFunction)MGLContext_read_uniform, METH_VARARGS}, {(char *)"_set_uniform_handle", (PyCFunction)MGLContext_set_uniform_handle, METH_VARARGS}, {}, }; static PyGetSetDef MGLContext_getset[] = { {(char *)"line_width", (getter)MGLContext_get_line_width, (setter)MGLContext_set_line_width}, {(char *)"point_size", (getter)MGLContext_get_point_size, (setter)MGLContext_set_point_size}, {(char *)"depth_func", (getter)MGLContext_get_depth_func, (setter)MGLContext_set_depth_func}, {(char *)"depth_clamp_range", (getter)MGLContext_get_depth_clamp_range, (setter)MGLContext_set_depth_clamp_range}, {(char *)"blend_func", (getter)MGLContext_get_blend_func, (setter)MGLContext_set_blend_func}, {(char *)"blend_equation", (getter)MGLContext_get_blend_equation, (setter)MGLContext_set_blend_equation}, {(char *)"multisample", (getter)MGLContext_get_multisample, (setter)MGLContext_set_multisample}, {(char *)"provoking_vertex", (getter)MGLContext_get_provoking_vertex, (setter)MGLContext_set_provoking_vertex}, {(char *)"polygon_offset", (getter)MGLContext_get_polygon_offset, (setter)MGLContext_set_polygon_offset}, {(char *)"default_texture_unit", (getter)MGLContext_get_default_texture_unit, (setter)MGLContext_set_default_texture_unit}, {(char *)"max_samples", (getter)MGLContext_get_max_samples, NULL}, {(char *)"max_integer_samples", (getter)MGLContext_get_max_integer_samples, NULL}, {(char *)"max_texture_units", (getter)MGLContext_get_max_texture_units, NULL}, {(char *)"max_anisotropy", (getter)MGLContext_get_max_anisotropy, NULL}, {(char *)"max_label_length", (getter)MGLContext_get_max_label_length, NULL}, {(char *)"max_debug_message_length", (getter)MGLContext_get_max_debug_message_length, NULL}, {(char *)"max_debug_group_stack_depth", (getter)MGLContext_get_max_debug_group_stack_depth, NULL}, {(char *)"fbo", (getter)MGLContext_get_fbo, (setter)MGLContext_set_fbo}, {(char *)"wireframe", (getter)MGLContext_get_wireframe, (setter)MGLContext_set_wireframe}, {(char *)"front_face", (getter)MGLContext_get_front_face, (setter)MGLContext_set_front_face}, {(char *)"cull_face", (getter)MGLContext_get_cull_face, (setter)MGLContext_set_cull_face}, {(char *)"patch_vertices", (getter)MGLContext_get_patch_vertices, (setter)MGLContext_set_patch_vertices}, {(char *)"includes", (getter)MGLContext_get_includes, NULL}, {(char *)"extensions", (getter)MGLContext_get_extensions, NULL}, {(char *)"info", (getter)MGLContext_get_info, NULL}, {(char *)"error", (getter)MGLContext_get_error, NULL}, {(char *)"_context", (getter)MGLContext_get_context, NULL}, {}, }; static PyGetSetDef MGLFramebuffer_getset[] = { {(char *)"viewport", (getter)MGLFramebuffer_get_viewport, (setter)MGLFramebuffer_set_viewport}, {(char *)"scissor", (getter)MGLFramebuffer_get_scissor, (setter)MGLFramebuffer_set_scissor}, {(char *)"color_mask", (getter)MGLFramebuffer_get_color_mask, (setter)MGLFramebuffer_set_color_mask}, {(char *)"depth_mask", (getter)MGLFramebuffer_get_depth_mask, (setter)MGLFramebuffer_set_depth_mask}, {(char *)"bits", (getter)MGLFramebuffer_get_bits, NULL}, {}, }; static PyMethodDef MGLFramebuffer_methods[] = { {(char *)"clear", (PyCFunction)MGLFramebuffer_clear, METH_VARARGS}, {(char *)"use", (PyCFunction)MGLFramebuffer_use, METH_NOARGS}, {(char *)"read_into", (PyCFunction)MGLFramebuffer_read_into, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLFramebuffer_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLProgram_getset[] = { {}, }; static PyMethodDef MGLProgram_methods[] = { {(char *)"run", (PyCFunction)MGLProgram_run, METH_VARARGS}, {(char *)"run_indirect", (PyCFunction)MGLProgram_run_indirect, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLProgram_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLQuery_getset[] = { {(char *)"samples", (getter)MGLQuery_get_samples, NULL}, {(char *)"primitives", (getter)MGLQuery_get_primitives, NULL}, {(char *)"elapsed", (getter)MGLQuery_get_elapsed, NULL}, {}, }; static PyMethodDef MGLQuery_methods[] = { {(char *)"begin", (PyCFunction)MGLQuery_begin, METH_NOARGS}, {(char *)"end", (PyCFunction)MGLQuery_end, METH_NOARGS}, {(char *)"begin_render", (PyCFunction)MGLQuery_begin_render, METH_NOARGS}, {(char *)"end_render", (PyCFunction)MGLQuery_end_render, METH_NOARGS}, // {(char *)"release", (PyCFunction)MGLQuery_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLRenderbuffer_getset[] = { {}, }; static PyMethodDef MGLRenderbuffer_methods[] = { {(char *)"release", (PyCFunction)MGLRenderbuffer_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLSampler_getset[] = { {(char *)"repeat_x", (getter)MGLSampler_get_repeat_x, (setter)MGLSampler_set_repeat_x}, {(char *)"repeat_y", (getter)MGLSampler_get_repeat_y, (setter)MGLSampler_set_repeat_y}, {(char *)"repeat_z", (getter)MGLSampler_get_repeat_z, (setter)MGLSampler_set_repeat_z}, {(char *)"filter", (getter)MGLSampler_get_filter, (setter)MGLSampler_set_filter}, {(char *)"compare_func", (getter)MGLSampler_get_compare_func, (setter)MGLSampler_set_compare_func}, {(char *)"anisotropy", (getter)MGLSampler_get_anisotropy, (setter)MGLSampler_set_anisotropy}, {(char *)"border_color", (getter)MGLSampler_get_border_color, (setter)MGLSampler_set_border_color}, {(char *)"min_lod", (getter)MGLSampler_get_min_lod, (setter)MGLSampler_set_min_lod}, {(char *)"max_lod", (getter)MGLSampler_get_max_lod, (setter)MGLSampler_set_max_lod}, {}, }; static PyMethodDef MGLSampler_methods[] = { {(char *)"use", (PyCFunction)MGLSampler_use, METH_VARARGS}, {(char *)"clear", (PyCFunction)MGLSampler_clear, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLSampler_release, METH_NOARGS}, {}, }; static PyMethodDef MGLScope_methods[] = { {(char *)"begin", (PyCFunction)MGLScope_begin, METH_NOARGS}, {(char *)"end", (PyCFunction)MGLScope_end, METH_NOARGS}, {(char *)"release", (PyCFunction)MGLScope_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLTexture_getset[] = { {(char *)"repeat_x", (getter)MGLTexture_get_repeat_x, (setter)MGLTexture_set_repeat_x}, {(char *)"repeat_y", (getter)MGLTexture_get_repeat_y, (setter)MGLTexture_set_repeat_y}, {(char *)"filter", (getter)MGLTexture_get_filter, (setter)MGLTexture_set_filter}, {(char *)"swizzle", (getter)MGLTexture_get_swizzle, (setter)MGLTexture_set_swizzle}, {(char *)"compare_func", (getter)MGLTexture_get_compare_func, (setter)MGLTexture_set_compare_func}, {(char *)"anisotropy", (getter)MGLTexture_get_anisotropy, (setter)MGLTexture_set_anisotropy}, {}, }; static PyMethodDef MGLTexture_methods[] = { {(char *)"write", (PyCFunction)MGLTexture_write, METH_VARARGS}, {(char *)"bind", (PyCFunction)MGLTexture_meth_bind, METH_VARARGS}, {(char *)"use", (PyCFunction)MGLTexture_use, METH_VARARGS}, {(char *)"build_mipmaps", (PyCFunction)MGLTexture_build_mipmaps, METH_VARARGS}, {(char *)"read", (PyCFunction)MGLTexture_read, METH_VARARGS}, {(char *)"read_into", (PyCFunction)MGLTexture_read_into, METH_VARARGS}, {(char *)"get_handle", (PyCFunction)MGLTexture_get_handle, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLTexture_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLTexture3D_getset[] = { {(char *)"repeat_x", (getter)MGLTexture3D_get_repeat_x, (setter)MGLTexture3D_set_repeat_x}, {(char *)"repeat_y", (getter)MGLTexture3D_get_repeat_y, (setter)MGLTexture3D_set_repeat_y}, {(char *)"repeat_z", (getter)MGLTexture3D_get_repeat_z, (setter)MGLTexture3D_set_repeat_z}, {(char *)"filter", (getter)MGLTexture3D_get_filter, (setter)MGLTexture3D_set_filter}, {(char *)"swizzle", (getter)MGLTexture3D_get_swizzle, (setter)MGLTexture3D_set_swizzle}, {}, }; static PyMethodDef MGLTexture3D_methods[] = { {(char *)"write", (PyCFunction)MGLTexture3D_write, METH_VARARGS}, {(char *)"bind", (PyCFunction)MGLTexture3D_meth_bind, METH_VARARGS}, {(char *)"use", (PyCFunction)MGLTexture3D_use, METH_VARARGS}, {(char *)"build_mipmaps", (PyCFunction)MGLTexture3D_build_mipmaps, METH_VARARGS}, {(char *)"read", (PyCFunction)MGLTexture3D_read, METH_VARARGS}, {(char *)"read_into", (PyCFunction)MGLTexture3D_read_into, METH_VARARGS}, {(char *)"get_handle", (PyCFunction)MGLTexture3D_get_handle, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLTexture3D_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLTextureArray_getset[] = { {(char *)"repeat_x", (getter)MGLTextureArray_get_repeat_x, (setter)MGLTextureArray_set_repeat_x}, {(char *)"repeat_y", (getter)MGLTextureArray_get_repeat_y, (setter)MGLTextureArray_set_repeat_y}, {(char *)"filter", (getter)MGLTextureArray_get_filter, (setter)MGLTextureArray_set_filter}, {(char *)"swizzle", (getter)MGLTextureArray_get_swizzle, (setter)MGLTextureArray_set_swizzle}, {(char *)"anisotropy", (getter)MGLTextureArray_get_anisotropy, (setter)MGLTextureArray_set_anisotropy}, {}, }; static PyMethodDef MGLTextureArray_methods[] = { {(char *)"write", (PyCFunction)MGLTextureArray_write, METH_VARARGS}, {(char *)"bind", (PyCFunction)MGLTextureArray_meth_bind, METH_VARARGS}, {(char *)"use", (PyCFunction)MGLTextureArray_use, METH_VARARGS}, {(char *)"build_mipmaps", (PyCFunction)MGLTextureArray_build_mipmaps, METH_VARARGS}, {(char *)"read", (PyCFunction)MGLTextureArray_read, METH_VARARGS}, {(char *)"read_into", (PyCFunction)MGLTextureArray_read_into, METH_VARARGS}, {(char *)"get_handle", (PyCFunction)MGLTextureArray_get_handle, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLTextureArray_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLTextureCube_getset[] = { {(char *)"filter", (getter)MGLTextureCube_get_filter, (setter)MGLTextureCube_set_filter}, {(char *)"swizzle", (getter)MGLTextureCube_get_swizzle, (setter)MGLTextureCube_set_swizzle}, {(char *)"compare_func", (getter)MGLTextureCube_get_compare_func, (setter)MGLTextureCube_set_compare_func}, {(char *)"anisotropy", (getter)MGLTextureCube_get_anisotropy, (setter)MGLTextureCube_set_anisotropy}, {}, }; static PyMethodDef MGLTextureCube_methods[] = { {(char *)"write", (PyCFunction)MGLTextureCube_write, METH_VARARGS}, {(char *)"use", (PyCFunction)MGLTextureCube_use, METH_VARARGS}, {(char *)"bind", (PyCFunction)MGLTextureCube_meth_bind, METH_VARARGS}, {(char *)"build_mipmaps", (PyCFunction)MGLTextureCube_build_mipmaps, METH_VARARGS}, {(char *)"read", (PyCFunction)MGLTextureCube_read, METH_VARARGS}, {(char *)"read_into", (PyCFunction)MGLTextureCube_read_into, METH_VARARGS}, {(char *)"get_handle", (PyCFunction)MGLTextureCube_get_handle, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLTextureCube_release, METH_NOARGS}, {}, }; static PyMethodDef MGLVertexArray_methods[] = { {(char *)"render", (PyCFunction)MGLVertexArray_render, METH_VARARGS}, {(char *)"render_indirect", (PyCFunction)MGLVertexArray_render_indirect, METH_VARARGS}, {(char *)"transform", (PyCFunction)MGLVertexArray_transform, METH_VARARGS}, {(char *)"bind", (PyCFunction)MGLVertexArray_bind, METH_VARARGS}, {(char *)"release", (PyCFunction)MGLVertexArray_release, METH_NOARGS}, {}, }; static PyGetSetDef MGLVertexArray_getset[] = { {(char *)"index_buffer", NULL, (setter)MGLVertexArray_set_index_buffer}, {(char *)"vertices", (getter)MGLVertexArray_get_vertices, (setter)MGLVertexArray_set_vertices}, {(char *)"instances", (getter)MGLVertexArray_get_instances, (setter)MGLVertexArray_set_instances}, {}, }; static PyType_Slot MGLBuffer_slots[] = { #if PY_VERSION_HEX >= 0x03090000 {Py_bf_getbuffer, (void *)MGLBuffer_tp_as_buffer_get_view}, {Py_bf_releasebuffer, (void *)MGLBuffer_tp_as_buffer_release_view}, #endif {Py_tp_methods, MGLBuffer_methods}, {Py_tp_getset, MGLBuffer_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLContext_slots[] = { {Py_tp_methods, MGLContext_methods}, {Py_tp_getset, MGLContext_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLFramebuffer_slots[] = { {Py_tp_methods, MGLFramebuffer_methods}, {Py_tp_getset, MGLFramebuffer_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLProgram_slots[] = { {Py_tp_methods, MGLProgram_methods}, {Py_tp_getset, MGLProgram_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLQuery_slots[] = { {Py_tp_methods, MGLQuery_methods}, {Py_tp_getset, MGLQuery_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLRenderbuffer_slots[] = { {Py_tp_methods, MGLRenderbuffer_methods}, {Py_tp_getset, MGLRenderbuffer_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLScope_slots[] = { {Py_tp_methods, MGLScope_methods}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLTexture_slots[] = { {Py_tp_methods, MGLTexture_methods}, {Py_tp_getset, MGLTexture_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLTextureArray_slots[] = { {Py_tp_methods, MGLTextureArray_methods}, {Py_tp_getset, MGLTextureArray_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLTextureCube_slots[] = { {Py_tp_methods, MGLTextureCube_methods}, {Py_tp_getset, MGLTextureCube_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLTexture3D_slots[] = { {Py_tp_methods, MGLTexture3D_methods}, {Py_tp_getset, MGLTexture3D_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLVertexArray_slots[] = { {Py_tp_methods, MGLVertexArray_methods}, {Py_tp_getset, MGLVertexArray_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Slot MGLSampler_slots[] = { {Py_tp_methods, MGLSampler_methods}, {Py_tp_getset, MGLSampler_getset}, {Py_tp_dealloc, (void *)default_dealloc}, {}, }; static PyType_Spec MGLBuffer_spec = {"mgl.Buffer", sizeof(MGLBuffer), 0, Py_TPFLAGS_DEFAULT, MGLBuffer_slots}; static PyType_Spec MGLContext_spec = {"mgl.Context", sizeof(MGLContext), 0, Py_TPFLAGS_DEFAULT, MGLContext_slots}; static PyType_Spec MGLFramebuffer_spec = {"mgl.Framebuffer", sizeof(MGLFramebuffer), 0, Py_TPFLAGS_DEFAULT, MGLFramebuffer_slots}; static PyType_Spec MGLProgram_spec = {"mgl.Program", sizeof(MGLProgram), 0, Py_TPFLAGS_DEFAULT, MGLProgram_slots}; static PyType_Spec MGLQuery_spec = {"mgl.Query", sizeof(MGLQuery), 0, Py_TPFLAGS_DEFAULT, MGLQuery_slots}; static PyType_Spec MGLRenderbuffer_spec = {"mgl.Renderbuffer", sizeof(MGLRenderbuffer), 0, Py_TPFLAGS_DEFAULT, MGLRenderbuffer_slots}; static PyType_Spec MGLScope_spec = {"mgl.Scope", sizeof(MGLScope), 0, Py_TPFLAGS_DEFAULT, MGLScope_slots}; static PyType_Spec MGLTexture_spec = {"mgl.Texture", sizeof(MGLTexture), 0, Py_TPFLAGS_DEFAULT, MGLTexture_slots}; static PyType_Spec MGLTextureArray_spec = {"mgl.TextureArray", sizeof(MGLTextureArray), 0, Py_TPFLAGS_DEFAULT, MGLTextureArray_slots}; static PyType_Spec MGLTextureCube_spec = {"mgl.TextureCube", sizeof(MGLTextureCube), 0, Py_TPFLAGS_DEFAULT, MGLTextureCube_slots}; static PyType_Spec MGLTexture3D_spec = {"mgl.Texture3D", sizeof(MGLTexture3D), 0, Py_TPFLAGS_DEFAULT, MGLTexture3D_slots}; static PyType_Spec MGLVertexArray_spec = {"mgl.VertexArray", sizeof(MGLVertexArray), 0, Py_TPFLAGS_DEFAULT, MGLVertexArray_slots}; static PyType_Spec MGLSampler_spec = {"mgl.Sampler", sizeof(MGLSampler), 0, Py_TPFLAGS_DEFAULT, MGLSampler_slots}; static PyModuleDef MGL_moduledef = { PyModuleDef_HEAD_INIT, "mgl", 0, -1, MGL_module_methods, 0, 0, 0, 0, }; extern "C" PyObject * PyInit_mgl() { PyObject * module = PyModule_Create(&MGL_moduledef); helper = PyImport_ImportModule("_moderngl"); if (!helper) { return NULL; } moderngl_error = PyObject_GetAttrString(helper, "Error"); MGLBuffer_type = (PyTypeObject *)PyType_FromSpec(&MGLBuffer_spec); MGLContext_type = (PyTypeObject *)PyType_FromSpec(&MGLContext_spec); MGLFramebuffer_type = (PyTypeObject *)PyType_FromSpec(&MGLFramebuffer_spec); MGLProgram_type = (PyTypeObject *)PyType_FromSpec(&MGLProgram_spec); MGLQuery_type = (PyTypeObject *)PyType_FromSpec(&MGLQuery_spec); MGLRenderbuffer_type = (PyTypeObject *)PyType_FromSpec(&MGLRenderbuffer_spec); MGLScope_type = (PyTypeObject *)PyType_FromSpec(&MGLScope_spec); MGLTexture_type = (PyTypeObject *)PyType_FromSpec(&MGLTexture_spec); MGLTextureArray_type = (PyTypeObject *)PyType_FromSpec(&MGLTextureArray_spec); MGLTextureCube_type = (PyTypeObject *)PyType_FromSpec(&MGLTextureCube_spec); MGLTexture3D_type = (PyTypeObject *)PyType_FromSpec(&MGLTexture3D_spec); MGLVertexArray_type = (PyTypeObject *)PyType_FromSpec(&MGLVertexArray_spec); MGLSampler_type = (PyTypeObject *)PyType_FromSpec(&MGLSampler_spec); PyObject * InvalidObject = PyObject_GetAttrString(helper, "InvalidObject"); PyModule_AddObject(module, "InvalidObject", InvalidObject); Py_INCREF(InvalidObject); return module; } moderngl-moderngl-773b733/tests/000077500000000000000000000000001470420062000165445ustar00rootroot00000000000000moderngl-moderngl-773b733/tests/Containerfile000066400000000000000000000006261470420062000212550ustar00rootroot00000000000000FROM ubuntu:22.04 RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \ python3 python3-pip libgl1-mesa-dev libegl1-mesa-dev libx11-dev gcovr &&\ python3 -m pip install build glcontext numpy pyopengl pytest scipy WORKDIR /app COPY . . ENV MODERNGL_COVERAGE=yes LIBGL_ALWAYS_SOFTWARE=1 RUN python3 setup.py build_ext --inplace CMD python3 -X dev -m pytest -s -vvv tests && gcovr moderngl-moderngl-773b733/tests/conftest.py000066400000000000000000000061641470420062000207520ustar00rootroot00000000000000""" Global fixtures for moderngl tests. We rely on Context.gc_mode = "auto" to clean up resources. Mainly a global context is used it test, but some test needs a new context * ctx_static: A global context that is reused for all tests * ctx: Also a global context, but it is cleaned before and after each test * ctx_new: A new context for each test Context creation can be refined in _create_context if issues arise """ import pytest import numpy as np import moderngl from glcontext import egl VERSION_CODES = 430, 410, 330 _ctx = None _fbo = None # Fake framebuffer to avoid errors during transforms @pytest.fixture(scope="session") def ctx_static(): """Session context""" return _get_context() @pytest.fixture(scope="function") def ctx(): """ Per function context. The same context is reused, but the context is cleaned before and after each test. """ ctx = _get_context() error = ctx.error if error != "GL_NO_ERROR": raise RuntimeError("Context has error before use: {}".format(error)) _clean_ctx(ctx) yield ctx error = ctx.error if error != "GL_NO_ERROR": raise RuntimeError("Context has error after use: {}".format(error)) _clean_ctx(ctx) @pytest.fixture(scope="function") def ctx_new(): """Returns a new context for each test""" ctx = _create_context() yield ctx ctx.release() def _get_context(): """Get the global test context""" global _ctx, _fbo if _ctx is None: _ctx = _create_context() _ctx.gc_mode = "auto" _fbo = _ctx.simple_framebuffer((2, 2)) _ctx.__enter__() _fbo.use() return _ctx def _create_context(): """ Create a new context. This is the only place context creation should happen. For now we just brute force context creation. """ return moderngl.create_context(standalone=True, context=egl.create_context(glversion=330, mode="standalone")) def _clean_ctx(ctx): """Clean the context""" # Reset the context ctx.blend_func = moderngl.DEFAULT_BLENDING ctx.blend_equation = moderngl.FUNC_ADD ctx.enable_only(moderngl.NOTHING) ctx.point_size = 1.0 ctx.line_width = 1.0 ctx.front_face = 'ccw' ctx.cull_face = 'back' ctx.wireframe = False ctx.provoking_vertex = moderngl.FIRST_VERTEX_CONVENTION ctx.polygon_offset = 0.0, 0.0 ctx.gc() @pytest.fixture(scope="session") def color_prog(ctx_static): """A simple program that renders a solid color.""" return ctx_static.program( vertex_shader=''' #version 330 in vec2 in_vert; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 fragColor; uniform vec4 color; void main() { fragColor = color; } ''', ) @pytest.fixture(scope="session") def ndc_quad(ctx_static): """Creates a buffer with an NDC quad.""" quad = [ -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0, -1.0, ] return ctx_static.buffer(np.array(quad, dtype='f4')) moderngl-moderngl-773b733/tests/gc/000077500000000000000000000000001470420062000171355ustar00rootroot00000000000000moderngl-moderngl-773b733/tests/gc/README.md000066400000000000000000000000711470420062000204120ustar00rootroot00000000000000 # gc Some test scripts related to garbage collection. moderngl-moderngl-773b733/tests/gc/boom.py000066400000000000000000000205351470420062000204500ustar00rootroot00000000000000""" Simple test script for gc * Leak then mgl object fails on creation? * If object doesn't have ctx attribute it's not valid? """ import logging import time from ctypes import c_long import numpy as np import moderngl logging.basicConfig(level=logging.DEBUG) ctx = moderngl.create_context(standalone=True, require=330) print(ctx) ctx.gc_mode = "auto" def ref_count(): """Simple refcount demo""" var1 = [1, 2] print(c_long.from_address(id(var1)).value) # --- Texture --- def test_texture(): return ctx.texture((100, 100), 4, data=np.random.randint(0, 1, 100 * 100 * 4, dtype="u1"), dtype="u1") def test_texture_mass_create(n=1_000): for _ in range(n): texture = ctx.texture((1000, 1000), 4, data=np.random.randint(0, 255, 1000 * 1000 * 4, dtype="u1")) def test_texture_failure(): try: texture = ctx.texture((1000, 1000), 4, data=np.random.randint(0, 255, 1000 * 1001 * 4, dtype="u1")) except Exception as ex: print(ex) def test_texture_failure_mass_create(n=1000): for i in range(n): test_texture_failure() # --- TextureArray --- def test_texture_array(): texture = ctx.texture_array((100, 100, 100), 4, data=np.random.randint(0, 255, 100 * 100 * 100 * 4, dtype="u1")) def test_texture_array_mass_create(n=1000): for _ in range(n): texture = ctx.texture_array((100, 100, 100), 4, data=np.random.randint(0, 255, 100 * 100 * 100 * 4, dtype="u1")) def test_texture_array_failure(): try: texture = ctx.texture_array((100, 100, 10), 4, data=np.random.randint(0, 255, 100 * 100 * 100 * 4, dtype="u1")) except Exception as ex: print(ex) def test_texture_array_failure_mass_create(n=1000): for i in range(n): test_texture_array_failure() # --- Texture3D --- def test_texture_3d(): texture = ctx.texture3d((100, 100, 100), 4, data=np.random.randint(0, 255, 100 * 100 * 100 * 4, dtype="u1")) def test_texture_3d_mass_create(n=1000): for _ in range(n): texture = ctx.texture3d((100, 100, 100), 4, data=np.random.randint(0, 255, 100 * 100 * 100 * 4, dtype="u1")) def test_texture_3d_failure(): try: texture = ctx.texture3d((100, 100, 100), 4, data=np.random.randint(0, 255, 100 * 100 * 101 * 4, dtype="u1")) except Exception as ex: print(ex) def test_texture_3d_failure_mass_create(n=1000): for i in range(n): test_texture_3d_failure() # --- Framebuffer --- def test_framebuffer(): texture = ctx.texture((100, 100), 4) fbo = ctx.framebuffer(color_attachments=[texture]) def test_framebuffer_mass_create(n=1000): for i in range(n): texture = ctx.texture((100, 100), 4) ctx.framebuffer(color_attachments=[texture]) # Depending on drivers FBOs might not release until flush/finish ctx.finish() def test_framebuffer_failure(): try: fbo = ctx.framebuffer(color_attachments=[]) except Exception as ex: print(ex) def test_framebuffer_failure_mass_create(n=1000): for i in range(n): test_framebuffer_failure() # --- RenderBuffer --- def test_renderbuffer_mass_create(n=1000): for i in range(n): rb = ctx.renderbuffer((1000, 1000)) ctx.finish() def test_renderbuffer_failure_mass_create(n=1000): for i in range(n): try: rb = ctx.renderbuffer((1000, 1000), components=4, dtype="moo") except Exception as ex: print(ex) ctx.finish() # --- Buffer --- def test_buffer(): buffer = ctx.buffer(data=np.random.randint(0, 255, 1024 * 1024 * 1024, dtype="u1")) buffer.release() def test_buffer_mass_create(n=1000): for i in range(n): b = ctx.buffer(data=np.random.randint(0, 255, 1024 * 1024, dtype="u1")) def test_buffer_creation_failed(): try: buffer = ctx.buffer(data=None) except Exception as ex: print(ex) def test_buffer_creation_failed_mass_create(n=1000): for i in range(n): test_buffer_creation_failed() # --- Query --- def test_query_mass_create(n=1000): for _ in range(n): q = ctx.query(samples=True, any_samples=True, time=True, primitives=True) # print(c_long.from_address(id(q.mglo))) # --- VertexArray / Program --- prog_src = { "vertex_shader": """ #version 330 in vec2 in_pos; void main() { gl_Position = vec4(in_pos, 0.0, 1.0); } """, "fragment_shader": """ #version 330 out vec4 color; void main() { color = vec4(1.0); } """ } def test_vertex_array(): buffer = ctx.buffer(reserve=1024) prog = ctx.program(**prog_src) vao = ctx.vertex_array(prog, [(buffer, "2f", "in_pos")]) def test_vertex_array_mass_create(n=1000): for i in range(n): prog = ctx.program(**prog_src) vbo = ctx.buffer(reserve=1_000_000) ibo = ctx.buffer(reserve=1_000_000) vao = ctx.vertex_array(prog, [(vbo, "2f", "in_pos")], index_buffer=ibo) def test_vertex_array_creation_failure(): try: buffer = ctx.buffer(reserve=1024) prog = ctx.program(**prog_src) vao = ctx.vertex_array(prog, [(buffer, "2f", "in_pos_invalid")]) except moderngl.Error: pass def test_vertex_array_creation_failure_mass_create(n=1000): for i in range(n): test_vertex_array_creation_failure() # --- ComputeShader --- def test_compute_shader(): compute_shader = ctx.compute_shader(''' #version 430 layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in; void main() { } ''') def test_compute_shader_mass_create(n=1000): for i in range(n): test_compute_shader() print(i) def test_compute_shader_fail(): try: compute_shader = ctx.compute_shader(''' #version 430 layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in; void main() { } ''') except Exception as ex: print(ex) def test_compute_shader_fail_mass_create(n=1000): for i in range(n): test_compute_shader_fail() # --- Sampler --- def test_sampler_mass_create(n=1000): for i in range(n): sampler = ctx.sampler() # --- Scope --- def test_scope(): fbo = ctx.simple_framebuffer((100, 100)) tex1 = ctx.texture((10, 100), 4) tex2 = ctx.texture((10, 100), 4) ubo1 = ctx.buffer(reserve=16000) ubo2 = ctx.buffer(reserve=16000) ssob1 = ctx.buffer(reserve=1024) ssob2 = ctx.buffer(reserve=1024) for i in range(10_000): print(i) scope = ctx.scope( framebuffer=fbo, enable_only=moderngl.NOTHING, textures=[(tex1, 0), (tex2, 1)], uniform_buffers=[(ubo1, 0), (ubo2, 1)], storage_buffers=[(ssob1, 0), (ssob2, 1)], ) # scope = ctx.scope( # framebuffer=ctx.simple_framebuffer((100, 100)), # enable_only=moderngl.NOTHING, # textures=[(ctx.texture((10, 100), 4), 0), (ctx.texture((10, 100), 4), 1)], # uniform_buffers=[(ctx.buffer(reserve=16000), 0), (ctx.buffer(reserve=16000), 1)], # storage_buffers=[(ctx.buffer(reserve=1024), 0), (ctx.buffer(reserve=1024), 1)], # ) # with scope: # pass # ------------------------------------------------------------------------------------------ # ref_count() N = 100 test_texture() test_texture_mass_create(N) test_texture_failure() test_texture_failure_mass_create(N) test_texture_array() test_texture_array_mass_create(N) test_texture_array_failure() test_texture_array_failure_mass_create(N) test_texture_3d() test_texture_3d_mass_create(N) test_texture_3d_failure() test_texture_3d_failure_mass_create(N) test_framebuffer() test_framebuffer_mass_create(N) test_framebuffer_failure() test_framebuffer_failure_mass_create(N) test_renderbuffer_mass_create(N) test_renderbuffer_failure_mass_create(N) test_buffer() test_buffer_mass_create(N) test_buffer_creation_failed() test_buffer_creation_failed_mass_create(N) test_query_mass_create() test_vertex_array() test_vertex_array_mass_create(N) test_vertex_array_creation_failure() test_vertex_array_creation_failure_mass_create(N) if ctx.version_code >= 430: test_compute_shader() test_compute_shader_mass_create(N) test_compute_shader_fail() test_compute_shader_fail_mass_create(N) test_sampler_mass_create(N) # test_scope() print("Done. Waiting") time.sleep(300) moderngl-moderngl-773b733/tests/gc/utils.py000066400000000000000000000011241470420062000206450ustar00rootroot00000000000000""" This modules is really unisable for ref counting. Just an experiment! """ import gc import sys import ctypes def print_referrers(obj): refs = gc.get_referrers(obj) for ref in refs: if is_module(ref): print("-->", is_module(ref)) else: print("--> ", type(ref), ref) def is_module(obj): if isinstance(obj, dict) and obj.get("__name__"): return obj.get("__name__") return None def ref_c_1(obj): """+ 1""" return ctypes.c_long.from_address(id(obj)).value def ref_c_2(obj): """+ 2""" return sys.getrefcount(obj) moderngl-moderngl-773b733/tests/test_blend.py000066400000000000000000000217761470420062000212560ustar00rootroot00000000000000""" Test blending and blend equations with float32 framebuffer. Emulate blend and equation values in python and compare with moderngl. """ import pytest import random import struct import moderngl class TestBlend: @pytest.fixture(autouse=True) def ctx_inject(self, ctx): self.__class__.ctx = ctx @pytest.fixture(autouse=True) def vao_inject(self, ctx, color_prog, ndc_quad): self.__class__.prog = color_prog self.__class__.vao = ctx.simple_vertex_array(color_prog, ndc_quad, 'in_vert') @pytest.fixture(scope="class", autouse=True) def fbo_inject(self, ctx_static): self.__class__.fbo = ctx_static.framebuffer(color_attachments=[ ctx_static.texture((1, 1), 4, dtype='f4'), ]) def unpack_fbo(self): return struct.unpack('4f', self.fbo.read(components=4, dtype='f4')[:16]) def cf(self, blend_func, val, src, dst, src_a, dst_a): """Calculate factor Args: blend_func: The blend func to use src: source value (single r, g, b, or a) dest: dest value (single r, g, b, or a) src_a: alpha value dst_a: alpha value """ result = None if blend_func == moderngl.ZERO: result = 0 if blend_func == moderngl.ONE: result = val if blend_func == moderngl.SRC_COLOR: result = val * src if blend_func == moderngl.ONE_MINUS_SRC_COLOR: result = val * (1.0 - src) if blend_func == moderngl.DST_COLOR: result = val * dst if blend_func == moderngl.ONE_MINUS_DST_COLOR: result = val * (1.0 - dst) if blend_func == moderngl.SRC_ALPHA: result = val * src_a if blend_func == moderngl.ONE_MINUS_SRC_ALPHA: result = val * (1.0 - src_a) if blend_func == moderngl.DST_ALPHA: result = val * dst_a if blend_func == moderngl.ONE_MINUS_DST_ALPHA: result = val * (1.0 - dst_a) if result is None: raise ValueError("Unsupported blend_func") # Don't clamp here. It needs to happen in the combine return result def bleq(self, bsx, bdx, sx, dx, func): """Blend equation. Note that MIN and MAX have special behavior. Args: bsx: blended source value bdx: blended dest value sx: original value from source dx: original value from dest """ if func == moderngl.FUNC_ADD: return bsx + bdx elif func == moderngl.FUNC_SUBTRACT: return bsx - bdx elif func == moderngl.FUNC_REVERSE_SUBTRACT: return bdx - bsx elif func == moderngl.MIN: return min(sx, dx) elif func == moderngl.MAX: return max(sx, dx) else: raise ValueError('Unsupported blend equation: {}'.format(func)) def blend_emulate(self, src, dst, blend_func, blend_equation): """Emulates blending in python""" sr = self.cf(blend_func[0], src[0], src[0], dst[0], src[3], dst[3]) sg = self.cf(blend_func[0], src[1], src[1], dst[1], src[3], dst[3]) sb = self.cf(blend_func[0], src[2], src[2], dst[2], src[3], dst[3]) sa = self.cf(blend_func[2], src[3], src[3], dst[3], src[3], dst[3]) dr = self.cf(blend_func[1], dst[0], src[0], dst[0], src[3], dst[3]) dg = self.cf(blend_func[1], dst[1], src[1], dst[1], src[3], dst[3]) db = self.cf(blend_func[1], dst[2], src[2], dst[2], src[3], dst[3]) da = self.cf(blend_func[3], dst[3], src[3], dst[3], src[3], dst[3]) return ( self.bleq(sr, dr, src[0], dst[0], blend_equation[0]), self.bleq(sg, dg, src[1], dst[1], blend_equation[0]), self.bleq(sb, db, src[2], dst[2], blend_equation[0]), self.bleq(sa, da, src[3], dst[3], blend_equation[1]), ) def blend_moderngl(self, src, dst, blend_func, blend_equation): """Performs blending in moderngl. Args: src (tuple): The source fragment (r, g, b, a) dst (tuple): The destination fragment (r, g, b, a) blend_func (tuple): The blend func blend_func (tuple): The blend equation Returns: The result fragment """ self.fbo.use() self.fbo.clear(red=dst[0], green=dst[1], blue=dst[2], alpha=dst[3]) self.ctx.enable(moderngl.BLEND) self.prog['color'].value = src self.ctx.blend_func = blend_func self.ctx.blend_equation = blend_equation self.vao.render(mode=moderngl.TRIANGLE_STRIP) return self.unpack_fbo() def test_blend_default(self): src = (0.0, 1.0, 0.0, 0.2) dst = (1.0, 0.0, 1.0, 0.3) blend_func = ( moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, ) blend_equation = moderngl.FUNC_ADD, moderngl.FUNC_ADD a = self.blend_emulate(src, dst, blend_func, blend_equation) b = self.blend_moderngl(src, dst, blend_func, blend_equation) assert pytest.approx(a, abs=1.0e-6) == b def test_blend_separate(self): src = (0.2, 0.6, 0.1, 0.3) dst = (0.3, 0.1, 0.4, 0.2) blend_func = ( moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, moderngl.ONE, moderngl.ONE, ) blend_equation = moderngl.FUNC_ADD, moderngl.FUNC_ADD a = self.blend_emulate(src, dst, blend_func, blend_equation) b = self.blend_moderngl(src, dst, blend_func, blend_equation) assert pytest.approx(a, abs=1.0e-6) == b def test_blend_separate_equation(self): src = (0.2, 0.6, 0.1, 0.3) dst = (0.3, 0.1, 0.4, 0.2) blend_func = ( moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, moderngl.ONE, moderngl.ONE, ) blend_equation = moderngl.FUNC_REVERSE_SUBTRACT, moderngl.MAX a = self.blend_emulate(src, dst, blend_func, blend_equation) b = self.blend_moderngl(src, dst, blend_func, blend_equation) assert pytest.approx(a, abs=1.0e-6) == b def test_blend_chaos(self): """Pick N random colors with random blend modes and equations""" bf = [ moderngl.ZERO, moderngl.ONE, moderngl.SRC_COLOR, moderngl.ONE_MINUS_SRC_COLOR, moderngl.DST_COLOR, moderngl.ONE_MINUS_DST_COLOR, moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, moderngl.DST_ALPHA, moderngl.ONE_MINUS_DST_ALPHA, ] eq = [ moderngl.FUNC_ADD, moderngl.FUNC_SUBTRACT, moderngl.FUNC_REVERSE_SUBTRACT, moderngl.MIN, moderngl.MAX, ] for _ in range(100): src = tuple([random.uniform(0, 1) for i in range(4)]) dst = tuple([random.uniform(0, 1) for i in range(4)]) blend_func = tuple([random.choice(bf) for i in range(4)]) blend_equation = random.choice(eq), random.choice(eq) a = self.blend_emulate(src, dst, blend_func, blend_equation) b = self.blend_moderngl(src, dst, blend_func, blend_equation) assert pytest.approx(a, abs=1.0e-6) == b def test_invalid_blend_func(self): # TypeError: Not iterable with pytest.raises(TypeError): self.ctx.blend_func = moderngl.ONE # Incorrect tuple size with pytest.raises(moderngl.Error): self.ctx.blend_func = moderngl.ONE, # TypeError: "Test" is not an integer with pytest.raises(moderngl.Error): self.ctx.blend_func = moderngl.ONE, "Test" # Incorrect tuple size=3 with pytest.raises(moderngl.Error): self.ctx.blend_func = moderngl.ONE, moderngl.ONE, moderngl.ONE # Incorrect tuple size=5 with pytest.raises(moderngl.Error): self.ctx.blend_func = ( moderngl.ONE, moderngl.ONE, moderngl.ONE, moderngl.ONE, moderngl.ONE, ) # Working versions self.ctx.blend_func = moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA self.ctx.blend_func = ( moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, moderngl.SRC_ALPHA, moderngl.ONE_MINUS_SRC_ALPHA, ) def test_invalid_blend_equation(self): with pytest.raises(moderngl.Error): self.ctx.blend_equation = None with pytest.raises(moderngl.Error): self.ctx.blend_equation = moderngl.MAX, moderngl.MAX, moderngl.MAX self.ctx.blend_equation = moderngl.MAX self.ctx.blend_equation = moderngl.MAX, moderngl.MAX def test_get_values(self): with pytest.raises(NotImplementedError): self.ctx.blend_func with pytest.raises(NotImplementedError): self.ctx.blend_equation moderngl-moderngl-773b733/tests/test_buffer.py000066400000000000000000000043651470420062000214360ustar00rootroot00000000000000 def test_glo(ctx): buf = ctx.buffer(reserve=1024) assert buf.glo > 0 def test_buffer_eq(ctx): buf1 = ctx.buffer(reserve=1024) buf2 = ctx.buffer(reserve=1024) assert buf1 != buf2 assert buf1 == buf1 assert buf2 == buf2 def test_bind(ctx): buf = ctx.buffer(reserve=1024) res = buf.bind("in_pos", "in_vel", layout="2f 2f") assert res == (buf, "2f 2f", "in_pos", "in_vel") def test_assign(ctx): buf = ctx.buffer(reserve=1024) assert buf.assign(1) == (buf, 1) def test_buffer_clear_1(ctx): buf = ctx.buffer(data=b'\xAA\x55' * 10) buf.clear(chunk=b'AB') assert buf.read() == b'AB' * 10 def test_buffer_clear_2(ctx): buf = ctx.buffer(data=b'\xAA\x55' * 10) buf.clear(offset=1, size=18, chunk=b'AB') assert buf.read() == b'\xAAABABABABABABABABAB\x55' def test_buffer_create(ctx): buf = ctx.buffer(data=b'\xAA\x55' * 10) assert buf.read() == b'\xAA\x55' * 10 def test_buffer_read_write(ctx): buf = ctx.buffer(reserve=10) buf.write(b'abcd') assert buf.read(4) == b'abcd' buf.write(b'abcd', offset=3) assert buf.read(4, offset=1) == b'bcab' buf.write(b'abcd', offset=6) assert buf.read() == b'abcabcabcd' assert buf.read(offset=3) == b'abcabcd' def test_buffer_read_into_1(ctx): data = b'Hello World!' buf = ctx.buffer(data) res = bytearray(buf.size) buf.read_into(res) assert bytes(res) == data def test_buffer_read_into_2(ctx): data = b'Hello World!' buf = ctx.buffer(data) res = bytearray(10) buf.read_into(res, offset=6, size=5, write_offset=0) buf.read_into(res, offset=0, size=5, write_offset=5) assert bytes(res) == b'WorldHello' def test_buffer_orphan(ctx): buf = ctx.buffer(reserve=1024) buf.orphan() def test_buffer_orphan_resize(ctx): buf = ctx.buffer(reserve=10) assert buf.size == 10 assert len(buf.read()) == 10 buf.orphan(20) assert buf.size == 20 assert len(buf.read()) == 20 buf.orphan(100) assert buf.size == 100 assert len(buf.read()) == 100 buf.orphan(-100) assert buf.size == 100 assert len(buf.read()) == 100 def test_buffer_labels(ctx): buf = ctx.buffer(reserve=1024) buf.label = "test buffer" assert buf.label == "test buffer" moderngl-moderngl-773b733/tests/test_buffer_copy.py000066400000000000000000000010351470420062000224570ustar00rootroot00000000000000 def test_1(ctx): buf1 = ctx.buffer(b'abc') buf2 = ctx.buffer(reserve=3) ctx.copy_buffer(buf2, buf1) assert buf2.read() == b'abc' def test_2(ctx): buf1 = ctx.buffer(b'abcxyz123') buf2 = ctx.buffer(reserve=12) ctx.copy_buffer(buf2, buf1, 3, read_offset=3, write_offset=0) ctx.copy_buffer(buf2, buf1, 3, read_offset=0, write_offset=3) ctx.copy_buffer(buf2, buf1, 3, read_offset=6, write_offset=6) ctx.copy_buffer(buf2, buf1, 3, read_offset=3, write_offset=9) assert buf2.read() == b'xyzabc123xyz' moderngl-moderngl-773b733/tests/test_buffer_new.py000066400000000000000000000030411470420062000222750ustar00rootroot00000000000000 def test_1(ctx): buf = ctx.buffer(b'abc') assert buf.read() == b'abc' buf.write(b'xyz') assert buf.read() == b'xyz' assert buf.read(offset=1) == b'yz' def test_2(ctx): buf = ctx.buffer(reserve=10) assert buf.size == 10 buf.write(b'12345') buf.write(b'abcde', offset=5) assert buf.read(5) == b'12345' assert buf.read(5, offset=5) == b'abcde' def test_3(ctx): buf = ctx.buffer(reserve='1KB') assert buf.size == 1024 buf.clear(chunk=b'u') assert buf.read() == b'u' * 1024 buf.clear(size=10, offset=10, chunk=b'ab') assert buf.read(10, offset=0) == b'uuuuuuuuuu' assert buf.read(10, offset=10) == b'ababababab' assert buf.read(10, offset=20) == b'uuuuuuuuuu' def test_4(ctx): buf = ctx.buffer(reserve=10) buf.write_chunks(b'00000', 0, 2, 5) buf.write_chunks(b'11111', 1, 2, 5) assert buf.read(10, offset=0) == b'0101010101' def test_5(ctx): buf = ctx.buffer(b'123456789') buf.write_chunks(b'AABBCC', 0, 3, 3) assert buf.read() == b'AA3BB6CC9' assert buf.read_chunks(2, 0, 3, 3) == b'AABBCC' def test_6(ctx): buf = ctx.buffer(b'123456789') buf.write_chunks(b'XYZ', -1, -3, 3) assert buf.read() == b'12Z45Y78X' assert buf.read_chunks(1, -1, -3, 3) == b'XYZ' def test_7(ctx): buf = ctx.buffer(b'123456789') assert buf.read_chunks(3, 0, 3, 3) == b'123456789' def test_8(ctx): buf1 = ctx.buffer(b'abc', dynamic=True) buf2 = ctx.buffer(b'abc', dynamic=False) assert buf1.dynamic is True assert buf2.dynamic is False moderngl-moderngl-773b733/tests/test_buffer_read_errors.py000066400000000000000000000016351470420062000240220ustar00rootroot00000000000000import pytest def test_1(ctx): buf = ctx.buffer(b'abc') with pytest.raises(Exception): buf.read(4) with pytest.raises(Exception): buf.read(offset=-1) with pytest.raises(Exception): buf.read(offset=1, size=3) def test_2(ctx): buf = ctx.buffer(b'123456789') with pytest.raises(Exception): buf.read_chunks(1, 4, 1, 6) with pytest.raises(Exception): buf.read_chunks(1, 4, -1, 6) with pytest.raises(Exception): buf.read_chunks(2, -1, 2, 1) def test_3(ctx): buf = ctx.buffer(b'123456789') with pytest.raises(Exception): buf.read_chunks(2, 2, 3, 3) with pytest.raises(Exception): buf.read_chunks(2, -1, -3, 3) with pytest.raises(Exception): buf.read_chunks(2, -4, -3, 3) def test_4(ctx): buf = ctx.buffer(b'123456789') with pytest.raises(Exception): buf.read_chunks(3, 0, 2, 2) moderngl-moderngl-773b733/tests/test_buffer_read_into.py000066400000000000000000000012041470420062000234470ustar00rootroot00000000000000""" Test buffer read_into method """ def test_1(ctx): buf = ctx.buffer(b'abc') data = bytearray(3) buf.read_into(data) assert bytes(data) == b'abc' def test_2(ctx): buf = ctx.buffer(b'abcxyz123') data = bytearray(3) buf.read_into(data, offset=6) assert bytes(data) == b'123' def test_3(ctx): buf = ctx.buffer(b'abcxyz123') data = bytearray(12) buf.read_into(data, 3, offset=3, write_offset=0) buf.read_into(data, 3, offset=0, write_offset=3) buf.read_into(data, 3, offset=6, write_offset=6) buf.read_into(data, 3, offset=3, write_offset=9) assert bytes(data) == b'xyzabc123xyz' moderngl-moderngl-773b733/tests/test_buffer_write_errors.py000066400000000000000000000022071470420062000242350ustar00rootroot00000000000000import pytest def test_1(ctx): buf = ctx.buffer(b'abc') with pytest.raises(Exception): buf.write(b'1234') with pytest.raises(Exception): buf.write(b'u', offset=-1) with pytest.raises(Exception): buf.write(b'abc', offset=1) def test_2(ctx): buf = ctx.buffer(b'123456789') with pytest.raises(Exception): buf.write_chunks(b'12345', 0, 1, 4) with pytest.raises(Exception): buf.write_chunks(b'12345', 0, 1, 6) with pytest.raises(Exception): buf.write_chunks(b'yyyyyn', 4, 1, 6) with pytest.raises(Exception): buf.write_chunks(b'yyyyyn', 4, -1, 6) with pytest.raises(Exception): buf.write_chunks(b'yn', -1, 2, 1) def test_3(ctx): buf = ctx.buffer(b'123456789') with pytest.raises(Exception): buf.write_chunks(b'yyyyyn', 2, 3, 3) with pytest.raises(Exception): buf.write_chunks(b'ynyyyy', -1, -3, 3) with pytest.raises(Exception): buf.write_chunks(b'yyyyny', -4, -3, 3) def test_4(ctx): buf = ctx.buffer(b'123456789') with pytest.raises(Exception): buf.write_chunks(b'yyynyy', 0, 2, 2) moderngl-moderngl-773b733/tests/test_compute_shader.py000066400000000000000000000137351470420062000231700ustar00rootroot00000000000000from array import array import struct import pytest def test_1(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') compute_shader = ctx.compute_shader(''' #version 430 layout (local_size_x = 1, local_size_y = 1) in; layout (std430, binding = 1) buffer Input { float v1[4]; }; layout (std430, binding = 2) buffer Output { float v2[4]; }; void main() { v2[0] = v1[3]; v2[1] = v1[2]; v2[2] = v1[1]; v2[3] = v1[0]; } ''') buf1 = ctx.buffer(struct.pack('4f', 1.0, 2.0, 3.0, 4.0)) buf2 = ctx.buffer(struct.pack('4f', 0.0, 0.0, 0.0, 0.0)) buf1.bind_to_storage_buffer(1) buf2.bind_to_storage_buffer(2) compute_shader.run() a, b, c, d = struct.unpack('4f', buf2.read()) assert pytest.approx(a) == 4.0 assert pytest.approx(b) == 3.0 assert pytest.approx(c) == 2.0 assert pytest.approx(d) == 1.0 def test_image(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') texture = ctx.texture((100, 100), 4) texture.bind_to_image(0, read=True, write=True) assert ctx.error == 'GL_NO_ERROR' texture.release() def test_image_float(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') texture = ctx.texture((100, 100), 4, dtype='f4') texture.bind_to_image(0, read=True, write=True) assert ctx.error == 'GL_NO_ERROR' texture.release() def test_image_wrong_format(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') texture = ctx.texture((100, 100), 4) texture.bind_to_image(0, read=True, write=True, format=13371337) assert ctx.error == 'GL_INVALID_VALUE' texture.release() def test_3d_image(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') program = ctx.compute_shader( """ #version 430 layout(local_size_x=4, local_size_y=4, local_size_z=4) in; layout(rgba32f, binding=0) uniform image3D img_in; layout(rgba32f, binding=1) uniform image3D img_out; void main() { vec4 fragment = imageLoad(img_in, ivec3(gl_LocalInvocationID.xyz)); imageStore(img_out, ivec3(gl_LocalInvocationID.xyz), fragment); } """ ) tex_in = ctx.texture3d((4, 4, 4), 4, data=array('f', [v for v in range(4 * 4 * 4 * 4)]), dtype="f4") tex_out = ctx.texture3d((4, 4, 4), 4, dtype="f4") tex_in.bind_to_image(0, read=True, write=False) tex_out.bind_to_image(1, read=False, write=True) program.run(group_x=1) assert ctx.error == 'GL_NO_ERROR' data_in = struct.unpack("256f", tex_in.read()) data_out = struct.unpack("256f", tex_out.read()) assert data_in == data_out def test_texture_array_image(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') program = ctx.compute_shader( """ #version 430 layout(local_size_x=4, local_size_y=4, local_size_z=4) in; layout(rgba32f, binding=0) uniform image2DArray img_in; layout(rgba32f, binding=1) uniform image2DArray img_out; void main() { vec4 fragment = imageLoad(img_in, ivec3(gl_LocalInvocationID.xyz)); imageStore(img_out, ivec3(gl_LocalInvocationID.xyz), fragment); } """ ) tex_in = ctx.texture_array((4, 4, 4), 4, data=array('f', [v for v in range(4 * 4 * 4 * 4)]), dtype="f4") tex_out = ctx.texture_array((4, 4, 4), 4, dtype="f4") tex_in.bind_to_image(0, read=True, write=False) tex_out.bind_to_image(1, read=False, write=True) program.run(group_x=1) data_in = struct.unpack("256f", tex_in.read()) data_out = struct.unpack("256f", tex_out.read()) assert data_in == data_out def test_texture_cube_image(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') program = ctx.compute_shader( """ #version 450 layout(local_size_x=4, local_size_y=4) in; layout(rgba8, binding=0) uniform imageCube img_in; layout(rgba8, binding=1) uniform imageCube img_out; void main() { for (int i = 0; i < 6; i++) { vec4 fragment = imageLoad(img_in, ivec3(gl_LocalInvocationID.xy, i)); imageStore(img_out, ivec3(gl_LocalInvocationID.xy, i), fragment); } } """ ) data = ([1] * 64) + ([2] * 64) + ([3] * 64) + ([4] * 64) + ([5] * 64) + ([6] * 64) tex_in = ctx.texture_cube((4, 4), 4, data=array('B', data), dtype="f1") tex_out = ctx.texture_cube((4, 4), 4, data=array('B', [0] * 64 * 6), dtype="f1") tex_in.bind_to_image(0, read=True, write=False) tex_out.bind_to_image(1, read=False, write=True) program.run(group_x=1) for face in range(0, 6): assert struct.unpack("64B", tex_in.read(face)) == struct.unpack("64B", tex_out.read(face)) def test_ssbo_binding(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') program = ctx.compute_shader( """ #version 430 layout(local_size_x=1, local_size_y=1, local_size_z=1) in; layout(std430, binding=0) buffer ssbo_in { float data[4]; } in_data; layout(std430, binding=1) buffer ssbo_out { float data[4]; } out_data; void main() { out_data.data[gl_LocalInvocationIndex] = in_data.data[gl_LocalInvocationIndex]; } """ ) ssbo_in = program['ssbo_in'] ssbo_out = program['ssbo_out'] assert ssbo_in.name == 'ssbo_in' assert ssbo_out.name == 'ssbo_out' assert ssbo_in.binding == 0 assert ssbo_in.value == 0 assert ssbo_out.binding == 1 assert ssbo_out.value == 1 ssbo_in.binding = 2 ssbo_out.binding = 3 assert ssbo_in.binding == 2 assert ssbo_in.value == 2 assert ssbo_out.binding == 3 assert ssbo_out.value == 3 moderngl-moderngl-773b733/tests/test_compute_shader_uniform.py000066400000000000000000000023021470420062000247130ustar00rootroot00000000000000import struct import pytest def test_1(ctx): if ctx.version_code < 430: raise pytest.skip('Compute shaders not supported') compute_shader = ctx.compute_shader(''' #version 430 layout (local_size_x = 1, local_size_y = 1) in; layout (std430, binding = 1) buffer Input { float v1[4]; }; layout (std430, binding = 2) buffer Output { float v2[4]; }; uniform float mul; uniform vec4 add; void main() { v2[0] = v1[3] * mul + add.x; v2[1] = v1[2] * mul + add.y; v2[2] = v1[1] * mul + add.z; v2[3] = v1[0] * mul + add.w; } ''') buf1 = ctx.buffer(struct.pack('4f', 1.0, 2.0, 3.0, 4.0)) buf2 = ctx.buffer(struct.pack('4f', 0.0, 0.0, 0.0, 0.0)) buf1.bind_to_storage_buffer(1) buf2.bind_to_storage_buffer(2) compute_shader['add'].value = (10.5, 20.0, 30.5, 40.0) compute_shader['mul'].value = 100.0 compute_shader.run() a, b, c, d = struct.unpack('4f', buf2.read()) assert pytest.approx(a) == 410.5 assert pytest.approx(b) == 320.0 assert pytest.approx(c) == 230.5 assert pytest.approx(d) == 140.0 moderngl-moderngl-773b733/tests/test_context.py000066400000000000000000000230501470420062000216410ustar00rootroot00000000000000import pytest import OpenGL OpenGL.ERROR_CHECKING = False # Don't want PyOpenGL to raise any exceptions from OpenGL import GL def test_create_destroy(ctx_new): """Create and destroy a context""" # Context will destroy itself on exit pass def test_core_profile_check(ctx): ctx.core_profile_check() def test_detect_framebuffer(ctx): # find a randomly active framebuffer. # We just test the call for now ctx.detect_framebuffer() def test_extensions(ctx_new): # self.assertTrue("GL_ARB_vertex_array_object" in ctx.extensions) # self.assertTrue("GL_ARB_transform_feedback2" in ctx.extensions) # self.assertTrue("GL_ARB_shader_subroutine" in ctx.extensions) ctx = ctx_new assert isinstance(ctx.extensions, set) assert len(ctx.extensions) > 0 def test_clear_errors(ctx_new): ctx = ctx_new # Reading the error state should reset it, as with glGetError ctx.enable_direct(1) # Not a valid glEnable value assert ctx.error == "GL_INVALID_ENUM" assert ctx.error == "GL_NO_ERROR" # calling glGetError resets the error state # Clearing the error state should reset it ctx.enable_direct(1) ctx.clear_errors() assert ctx.error == "GL_NO_ERROR" # Ensure PyOpenGL can see errors originating from moderngl ctx.enable_direct(1) assert GL.glGetError() == GL.GL_INVALID_ENUM # Ensure moderngl can see errors originating from PyOpenGL GL.glEnable(1) assert ctx.error == "GL_INVALID_ENUM" # Clearing errors originating from moderngl so PyOpenGL doesn't break ctx.enable_direct(1) ctx.clear_errors() assert GL.glGetError() == GL.GL_NO_ERROR # Clearing errors originating from PyOpenGL so moderngl doesn't break GL.glEnable(1) ctx.clear_errors() assert ctx.error == "GL_NO_ERROR" def test_attributes(ctx_new): """Ensure enums are present in the context instance""" ctx = ctx_new # Flags assert isinstance(ctx.NOTHING, int) assert isinstance(ctx.BLEND, int) assert isinstance(ctx.DEPTH_TEST, int) assert isinstance(ctx.CULL_FACE, int) assert isinstance(ctx.RASTERIZER_DISCARD, int) assert isinstance(ctx.PROGRAM_POINT_SIZE, int) # Primitive modes assert isinstance(ctx.POINTS, int) assert isinstance(ctx.LINES, int) assert isinstance(ctx.LINE_LOOP, int) assert isinstance(ctx.LINE_STRIP, int) assert isinstance(ctx.TRIANGLES, int) assert isinstance(ctx.TRIANGLE_STRIP, int) assert isinstance(ctx.TRIANGLE_FAN, int) assert isinstance(ctx.LINES_ADJACENCY, int) assert isinstance(ctx.LINE_STRIP_ADJACENCY, int) assert isinstance(ctx.TRIANGLES_ADJACENCY, int) assert isinstance(ctx.TRIANGLE_STRIP_ADJACENCY, int) assert isinstance(ctx.PATCHES, int) # Texture filters assert isinstance(ctx.LINEAR, int) assert isinstance(ctx.NEAREST, int) assert isinstance(ctx.NEAREST_MIPMAP_NEAREST, int) assert isinstance(ctx.LINEAR_MIPMAP_LINEAR, int) assert isinstance(ctx.LINEAR_MIPMAP_NEAREST, int) assert isinstance(ctx.NEAREST_MIPMAP_LINEAR, int) # Blend functions assert isinstance(ctx.ZERO, int) assert isinstance(ctx.ONE, int) assert isinstance(ctx.SRC_COLOR, int) assert isinstance(ctx.ONE_MINUS_SRC_COLOR, int) assert isinstance(ctx.SRC_ALPHA, int) assert isinstance(ctx.ONE_MINUS_SRC_ALPHA, int) assert isinstance(ctx.DST_ALPHA, int) assert isinstance(ctx.ONE_MINUS_DST_ALPHA, int) assert isinstance(ctx.DST_COLOR, int) assert isinstance(ctx.ONE_MINUS_DST_COLOR, int) # Blend shortcuts assert isinstance(ctx.DEFAULT_BLENDING, tuple) assert isinstance(ctx.ADDITIVE_BLENDING, tuple) assert isinstance(ctx.PREMULTIPLIED_ALPHA, tuple) # Blend equations assert isinstance(ctx.FUNC_ADD, int) assert isinstance(ctx.FUNC_SUBTRACT, int) assert isinstance(ctx.FUNC_REVERSE_SUBTRACT, int) assert isinstance(ctx.MIN, int) assert isinstance(ctx.MAX, int) # Provoking vertex assert isinstance(ctx.FIRST_VERTEX_CONVENTION, int) assert isinstance(ctx.LAST_VERTEX_CONVENTION, int) assert ctx == ctx assert ctx.line_width == 1.0 assert ctx.point_size == 1.0 assert isinstance(ctx.max_integer_samples, int) assert isinstance(ctx.max_texture_units, int) assert ctx.default_texture_unit == ctx.max_texture_units - 1 assert ctx.screen is None assert ctx.wireframe is False assert ctx.front_face == "ccw" assert ctx.cull_face == "front_and_back" assert ctx.patch_vertices == 3 ctx.enable(ctx.NOTHING) ctx.disable(ctx.NOTHING) ctx.finish() def test_enable_direct(ctx_new): # We already support this, but it's a safe value ctx = ctx_new GL_PROGRAM_POINT_SIZE = 0x8642 ctx.enable_direct(GL_PROGRAM_POINT_SIZE) assert ctx.error == "GL_NO_ERROR" ctx.disable_direct(GL_PROGRAM_POINT_SIZE) assert ctx.error == "GL_NO_ERROR" def test_depth_clamp_range(ctx): ctx.depth_clamp_range = 0, 1 assert ctx.error == "GL_NO_ERROR" ctx.depth_clamp_range = None assert ctx.error == "GL_NO_ERROR" def test_info(ctx): assert isinstance(ctx.info, dict) assert len(ctx.info) > 50 assert ctx.info["GL_MAX_GEOMETRY_OUTPUT_VERTICES"] >= 256 def test_polygon_offset(ctx): ctx.polygon_offset = 0.0, 1.0 assert ctx.polygon_offset == (0.0, 1.0) ctx.polygon_offset = 1.0, 0.0 assert ctx.polygon_offset == (1.0, 0.0) ctx.polygon_offset = -1.0, -1.0 assert ctx.polygon_offset == (-1.0, -1.0) def test_context_gc_modes(ctx_new): """Check gc mode default and set different modes""" ctx = ctx_new # gc mode should be None by default assert ctx.gc_mode is None ctx.gc_mode = None ctx.gc_mode = "context_gc" ctx.gc_mode = "auto" with pytest.raises(ValueError): ctx.gc_mode = "something" def test_context_gc(ctx_new): """Simple usage of context_gc""" ctx = ctx_new ctx.gc_mode = "context_gc" # Buffer buff = ctx.buffer(reserve=1024) buff = None assert ctx.gc() == 1 # Texture tex = ctx.texture((10, 10), 4) tex = None assert ctx.gc() == 1 # Texture Array tex_array = ctx.texture_array((10, 10, 10), 4) tex_array = None assert ctx.gc() == 1 # Texture cube tex_cube = ctx.texture_cube((10, 10), 4) tex_cube = None assert ctx.gc() == 1 # Texture3D tex_3d = ctx.texture3d((10, 10, 10), 4) tex_3d = None assert ctx.gc() == 1 # Sampler sampler = ctx.sampler() sampler = None assert ctx.gc() == 1 # Renderbuffer rb = ctx.renderbuffer((10, 19)) rb = None assert ctx.gc() == 1 # Program prog = ctx.program( vertex_shader=""" #version 330 out float value; void main() { value = float(gl_VertexID); } """ ) prog = None assert ctx.gc() == 1 # Framebuffer fbo = ctx.framebuffer( color_attachments=[ctx.texture((10, 10), 4)], depth_attachment=ctx.depth_texture((10, 10)) ) fbo = None assert ctx.gc() == 3 # # Compute Shader # cs = ctx.compute_shader( # """ # #version 450 # layout(local_size_x=4, local_size_y=4) in; # layout(rgba8, binding=0) uniform imageCube img_in; # layout(rgba8, binding=1) uniform imageCube img_out; # void main() { # for (int i = 0; i < 6; i++) { # vec4 fragment = imageLoad(img_in, ivec3(gl_LocalInvocationID.xy, i)); # imageStore(img_out, ivec3(gl_LocalInvocationID.xy, i), fragment); # } # } # """ # ) # cs = None # self.assertEqual(ctx.gc(), 1) # # --- Too complex to test right now # # def test_context_switch(self): # # """Ensure context switching is working""" # # ctx1 = moderngl.create_context(standalone=True) # # ctx2 = moderngl.create_context(standalone=True) # # with ctx1 as ctx: # # buffer1 = ctx.buffer(reserve=1024) # # with ctx2 as ctx: # # buffer2 = ctx.buffer(reserve=1024) # # self.assertEqual(buffer1.glo, buffer2.glo) # # ctx1.release() # # ctx2.release() # # def test_exit(self): # # """Ensure the previous context was activated on exit""" # # ctx1 = moderngl.create_context(standalone=True) # # ctx2 = moderngl.create_context(standalone=True) # # with ctx1 as ctx: # # ctx.buffer(reserve=1024) # # # Will error out if no context is active "moderngl.Error: cannot create buffer" # # ctx1.buffer(reserve=1024) # # ctx1.release() # # ctx2.release() # # def test_share(self): # # """Create resources with shared context""" # # if platform.system().lower() in ["darwin", "linux"]: # # self.skipTest('Context sharing not supported on darwin') # # data1 = numpy.array([1, 2, 3, 4], dtype='u1') # # data2 = numpy.array([4, 3, 2, 1], dtype='u1') # # ctx1 = moderngl.create_context(standalone=True) # # ctx2 = moderngl.create_context(standalone=True, share=True) # # with ctx1 as ctx: # # b1 = ctx.buffer(data=data1) # # with ctx2 as ctx: # # b2 = ctx.buffer(data=data2) # # # Because the resources are shared the name should increment # # self.assertEqual(b1.glo, 1) # # self.assertEqual(b2.glo, 2) # # # Ensure we can read the same buffer data in both contexts # # with ctx1: # # self.assertEqual(b1.read(), b'\x01\x02\x03\x04') # # self.assertEqual(b2.read(), b'\x04\x03\x02\x01') # # with ctx2: # # self.assertEqual(b1.read(), b'\x01\x02\x03\x04') # # self.assertEqual(b2.read(), b'\x04\x03\x02\x01') # # ctx1.release() # # ctx2.release() moderngl-moderngl-773b733/tests/test_cull_face.py000066400000000000000000000071551470420062000221020ustar00rootroot00000000000000import pytest import numpy as np import moderngl as mgl @pytest.fixture def prog_render_depth_pass(ctx): return ctx.program( vertex_shader=''' #version 330 in vec3 in_vert; void main() { gl_Position = vec4(in_vert, 1.0); } ''', fragment_shader=''' #version 330 void main() { } ''', ) @pytest.fixture def vbo_triangle(ctx): vertices = np.array([[-1, 1, 0.], [-1, -1, 0.], [1, -1, 0.], ]) return ctx.buffer(vertices.astype('f4').tobytes()) @pytest.fixture def fbo_with_rasterised_triangle(ctx, vbo_triangle): def _build_fbo_with_rasterised_triangle(prog, size=(4, 4), depth_clear=1.0): tex_depth = ctx.depth_texture(size) # implicit -> dtype='f4', components=1 fbo_depth = ctx.framebuffer(depth_attachment=tex_depth) fbo_depth.use() fbo_depth.clear(depth=depth_clear) # vertex array object of triangle with depth pass prog vao_triangle = ctx.simple_vertex_array(prog, vbo_triangle, 'in_vert') # Now we render a triangle in there vao_triangle.render() return fbo_depth, tex_depth return _build_fbo_with_rasterised_triangle @pytest.fixture def np_triangle_rasterised(): def _build_np_triangle_rastised(size): # It should have 0.5's where the triangle lies. depth_value_from_triangle_vertices = 0.0 # Map [-1, +1] -> [0, 1] depth_value_in_depthbuffer = (depth_value_from_triangle_vertices + 1) * 0.5 return np.array( [ [depth_value_in_depthbuffer] * (size[0] - (j + 1)) + [1.0] * (j + 1) for j in range(size[1]) ] ) return _build_np_triangle_rastised def test_cull_face(ctx, prog_render_depth_pass, vbo_triangle, fbo_with_rasterised_triangle, np_triangle_rasterised): size = (16,) * 2 ctx.enable(mgl.DEPTH_TEST) ctx.enable(mgl.CULL_FACE) def _do_test_cull_face(cull_face: str, expected_results: np.array): ctx.cull_face = cull_face fbo_depth, tex_depth = fbo_with_rasterised_triangle(prog_render_depth_pass, size) depth_from_dbo = np.frombuffer(tex_depth.read(), dtype=np.dtype('f4')).reshape(size[::-1]) np.testing.assert_array_almost_equal(depth_from_dbo, expected_results) ############################################################################ # EXPECTED DATAS# # It should have 0.5's where the triangle lies. ############################################################################ np_triangle_raster = np_triangle_rasterised(size) ############################################################################ # cull face is set to back, only one 'front' triangle in the scene => no culling _do_test_cull_face('back', np_triangle_raster) ############################################################################ # EXPECTED DATAS # It should have 1.0's everywhere. ############################################################################ np_clear_depth = np.full(size, 1.0) ############################################################################ # cull face is set to front, only one 'front' triangle in the scene => the triangle is culled _do_test_cull_face('front', np_clear_depth) # cull face is set to front_and_back, only one 'front' triangle in the scene => the triangle is culled _do_test_cull_face('front_and_back', np_clear_depth) ctx.enable_only(mgl.NOTHING) moderngl-moderngl-773b733/tests/test_debug_scopes.py000066400000000000000000000021041470420062000226140ustar00rootroot00000000000000from contextlib import ExitStack import pytest from OpenGL import GL import moderngl def test_debug_scope(ctx): with ctx.debug_scope("test scope"): pass def test_debug_scope_error_when_label_is_too_long(ctx): max_label_length = ctx.max_debug_message_length message = "F" * (max_label_length + 1) with pytest.raises(moderngl.Error): with ctx.debug_scope(message): pass def test_debug_scope_error_when_stack_overflow(ctx_new): max_stack_depth = ctx_new.max_debug_group_stack_depth with ExitStack() as stack: with pytest.raises(moderngl.Error): for _ in range(max_stack_depth + 1): stack.enter_context(ctx_new.debug_scope("test scope")) def test_debug_scope_error_when_stack_underflow(ctx_new): if GL.glPopDebugGroup: with pytest.raises(moderngl.Error): with ctx_new.debug_scope("test scope"): GL.glPopDebugGroup() def test_debug_scope_error_when_label_wrong_type(ctx): with pytest.raises(TypeError): with ctx.debug_scope(46): passmoderngl-moderngl-773b733/tests/test_depth_samplers.py000066400000000000000000000302461470420062000231740ustar00rootroot00000000000000import pytest import numpy as np import moderngl import moderngl as mgl from scipy import ndimage # https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html # https://en.wikipedia.org/wiki/Machine_epsilon # binary32 single precision float 2 24 (one bit is implicit) 2−24 ≈ 5.96e-08 2−23 ≈ 1.19e-07 EPSILON_IEEE_754 = 5.96e-08 @pytest.fixture def prog_render_depth_pass(ctx): return ctx.program( vertex_shader=''' #version 330 in vec3 in_vert; void main() { gl_Position = vec4(in_vert, 1.0); } ''', fragment_shader=''' #version 330 void main() { } ''', ) @pytest.fixture def prog_draw_depth(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; out vec2 uv; void main() { uv = in_vert; gl_Position = vec4(in_vert * 2.0 - 1.0, 0.0, 1.0); } ''', # from `texture.py` fragment_shader=''' #version 330 uniform sampler2D depth; in vec2 uv; out float fragColor; void main() { float raw_depth_nonlinear = texture(depth, uv).r; fragColor = raw_depth_nonlinear; } ''', ) prog['depth'].value = 0 return prog @pytest.fixture def vbo_triangle(ctx): vertices = np.array([[-1, 1, 0.], [-1, -1, 0.], [1, -1, 0.], ]) return ctx.buffer(vertices.astype('f4').tobytes()) @pytest.fixture def vbo_quad(ctx): canvas_fs_quad = np.array( [0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, 1.0]).astype('f4') return ctx.buffer(canvas_fs_quad.tobytes()) @pytest.fixture def prog_shadow_test(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; out vec2 uv; void main() { uv = in_vert; gl_Position = vec4(in_vert * 2.0 - 1.0, 0.0, 1.0); } ''', fragment_shader=''' #version 330 uniform sampler2DShadow depth; uniform vec2 u_shadow_coord_offset; uniform float u_depth_bias; uniform float u_depth_triangle; in vec2 uv; out float fragColor; void main() { // Compute depth caster float depth_shadow_caster = u_depth_triangle + u_depth_bias; // Compute shadow coordinates + depth of caster vec3 shadow_coord = vec3(uv, depth_shadow_caster); shadow_coord += vec3(u_shadow_coord_offset, 0.0); // Compute visibility: // -> shadow test: receiver (potential) vs caster float visibility = texture(depth, shadow_coord); // Output the visibility fragColor = visibility; } ''', ) # prog['u_depth_bias'].value = EPSILON_IEEE_754 depth_triangle_in_obj_space = 0 depth_triangle_in_view_space = (depth_triangle_in_obj_space + 1) * 0.5 prog['u_depth_triangle'].value = depth_triangle_in_view_space # return prog @pytest.fixture def fbo_with_rasterized_triangle(ctx, vbo_triangle): def _build_fbo_with_rasterized_triangle(prog, size=(4, 4), depth_clear=1.0): tex_depth = ctx.depth_texture(size) # implicit -> dtype='f4', components=1 fbo_depth = ctx.framebuffer(depth_attachment=tex_depth) fbo_depth.use() fbo_depth.clear(depth=depth_clear) # vertex array object of triangle with depth pass prog vao_triangle = ctx.simple_vertex_array(prog, vbo_triangle, 'in_vert') # Now we render a triangle in there vao_triangle.render() return fbo_depth, tex_depth return _build_fbo_with_rasterized_triangle @pytest.fixture def np_triangle_rasterized(): def _build_np_triangle_rasterized(size): # It should have 0.5's where the triangle lies. depth_value_from_triangle_vertices = 0.0 # Map [-1, +1] -> [0, 1] depth_value_in_depth_buffer = (depth_value_from_triangle_vertices + 1) * 0.5 return np.array( [ [depth_value_in_depth_buffer] * (size[0] - (j + 1)) + [1.0] * (j + 1) for j in range(size[1]) ] ) return _build_np_triangle_rasterized def test_depth_sampler( ctx, prog_render_depth_pass, prog_draw_depth, vbo_triangle, vbo_quad, fbo_with_rasterized_triangle, np_triangle_rasterized, ): ctx.enable(mgl.DEPTH_TEST) size = (16,) * 2 fbo_depth, tex_depth = fbo_with_rasterized_triangle(prog_render_depth_pass, size) depth_from_dbo = np.frombuffer(tex_depth.read(), dtype=np.dtype('f4')).reshape(size[::-1]) ############################################################################ # EXPECTED DATAS # It should have 0.5's where the triangle lies. ############################################################################ np_triangle_raster = np_triangle_rasterized(size) depth_tex_filter = (moderngl.NEAREST, moderngl.NEAREST) compare_func = '' def _do_test(): # some stuff should be 1s and 0.5 where the triangle lies. np.testing.assert_array_almost_equal(depth_from_dbo, np_triangle_raster) fbo_draw_depth = ctx.framebuffer(color_attachments=[ctx.renderbuffer(size, components=1, dtype='f4')]) fbo_draw_depth.use() tex_depth.use(location=0) # vertex array object of (fullscreen) quad with render depth prog vao_quad = ctx.simple_vertex_array(prog_draw_depth, vbo_quad, 'in_vert') vao_quad.render(moderngl.TRIANGLE_STRIP) data = np.frombuffer(fbo_draw_depth.read(components=1, dtype='f4'), dtype=np.dtype('f4')).reshape(size[::-1]) np.testing.assert_array_almost_equal(data, np_triangle_raster) def _with_sampler(): # from: https://github.com/Contraz/demosys-py/blob/master/demosys/opengl/texture.py depth_sampler = ctx.sampler(filter=depth_tex_filter, compare_func=compare_func) # disable depth func depth_sampler.use(location=0) _do_test() def _with_texture_parameters(): tex_depth.filter = depth_tex_filter tex_depth.compare_func = compare_func _do_test() _with_sampler() _with_texture_parameters() def test_sampler_shadow( ctx, prog_render_depth_pass, prog_shadow_test, vbo_triangle, vbo_quad, fbo_with_rasterized_triangle, ): ctx.enable(mgl.DEPTH_TEST) size = (3,) * 2 fbo_depth, tex_depth = fbo_with_rasterized_triangle(prog_render_depth_pass, size) ############################################################################ # EXPECTED DATAS # # It should have 1's where the triangle lies. # ############################################################################ texel_shadowed = 1 np_triangle_raster_visibility = np.array( [ [texel_shadowed] * (size[0] - (j + 1)) + [1 - texel_shadowed] * (j + 1) for j in range(size[1]) ] ) ############################################################################ # No offset - fetch the center pixel (NEAREST) prog_shadow_test['u_shadow_coord_offset'].value = (0,) * 2 depth_tex_filter = (moderngl.NEAREST, moderngl.NEAREST) compare_func = '>=' def _do_test(): fbo_draw_depth = ctx.framebuffer(color_attachments=[ctx.renderbuffer(size, components=1, dtype='f4')]) fbo_draw_depth.use() tex_depth.use(location=0) # https://www.khronos.org/opengl/wiki/Sampler_(GLSL)#Shadow_samplers vao_fs_shadow = ctx.simple_vertex_array(prog_shadow_test, vbo_quad, 'in_vert') vao_fs_shadow.render(moderngl.TRIANGLE_STRIP) data = np.frombuffer(fbo_draw_depth.read(components=1, dtype='f4'), dtype=np.dtype('f4')).reshape(size[::-1]) np.testing.assert_array_almost_equal(data, np_triangle_raster_visibility) def _with_sampler(): # https://github.com/Contraz/demosys-py/blob/01f285cd3a132012e14a51bf0ae9d7aa5a489b55/demosys/opengl/texture.py#L151 shadow_sampler = ctx.sampler(filter=depth_tex_filter, compare_func=compare_func) # enable depth func shadow_sampler.use(location=0) _do_test() shadow_sampler.clear(location=0) def _with_texture_parameters(): tex_depth.filter = depth_tex_filter tex_depth.compare_func = compare_func _do_test() _with_sampler() _with_texture_parameters() def test_sampler_shadow_with_bilinear_interpolation( ctx, prog_render_depth_pass, prog_shadow_test, vbo_triangle, vbo_quad, fbo_with_rasterized_triangle ): ctx.enable(mgl.DEPTH_TEST) size = (7,) * 2 fbo_depth, tex_depth = fbo_with_rasterized_triangle(prog_render_depth_pass, size) ############################################################################ # EXPECTED DATAS # ############################################################################ # Box filter (2x2) on triangle visibility rasterization # is similar to bilinear interpolation with samplerShadow # https://docs.scipy.org/doc/scipy/reference/generated/scipy.ndimage.uniform_filter.html#scipy.ndimage.uniform_filter np_triangle_raster_visibility = np.array( [ [1.0] * (size[0] - (j + 1)) + [0.0] * (j + 1) for j in range(size[1]) ] ) box_filter_on_triangle_raster_visibility = ndimage.uniform_filter( np_triangle_raster_visibility, size=2, mode='constant', cval=0, origin=-1) ############################################################################ half_pixel_size = (1.0 / size[0] * 0.5, 1.0 / size[1] * 0.5) prog_shadow_test['u_shadow_coord_offset'].value = tuple(half_pixel_size) def _do_test(): fbo_draw_depth = ctx.framebuffer( color_attachments=[ctx.renderbuffer(size, components=1, dtype='f4')]) fbo_draw_depth.use() tex_depth.use(location=0) # https://www.khronos.org/opengl/wiki/Sampler_(GLSL)#Shadow_samplers vao_fs_shadow = ctx.simple_vertex_array(prog_shadow_test, vbo_quad, 'in_vert') vao_fs_shadow.render(moderngl.TRIANGLE_STRIP) # data = np.frombuffer(fbo_draw_depth.read(components=1, dtype='f4'), dtype=np.dtype('f4')).reshape(size[::-1]) np.testing.assert_array_almost_equal( data, box_filter_on_triangle_raster_visibility) depth_tex_filter = (moderngl.LINEAR, moderngl.LINEAR) compare_func = '>=' def _with_sampler(): # https://github.com/Contraz/demosys-py/blob/01f285cd3a132012e14a51bf0ae9d7aa5a489b55/demosys/opengl/texture.py#L151 shadow_sampler = ctx.sampler( filter=depth_tex_filter, compare_func=compare_func, # enable depth func # from context.py: # border_color (tuple): The (r, g, b, a) color for the texture border. # When this value is set the ``repeat_`` values are overridden # setting the texture wrap to return the border color when outside ``[0, 1]`` range. # border_color=(0, 0, 0, 0), # seems not to work well ... repeat_x=False, repeat_y=False, ) shadow_sampler.use(location=0) _do_test() shadow_sampler.clear(location=0) def _with_texture_parameters(): tex_depth.filter = depth_tex_filter tex_depth.repeat_x = False tex_depth.repeat_y = False tex_depth.compare_func = compare_func _do_test() _with_sampler() _with_texture_parameters() moderngl-moderngl-773b733/tests/test_framebuffer.py000066400000000000000000000053501470420062000224440ustar00rootroot00000000000000 def test_properties(ctx): fbo = ctx.simple_framebuffer((4, 4)) fbo.label = "my favorite fbo" assert fbo.size == (4, 4) assert fbo == fbo assert fbo.depth_mask is True assert fbo.width == 4 assert fbo.height == 4 assert fbo.size == (4, 4) assert fbo.samples == 0 assert fbo.glo > 0 assert fbo.label == "my favorite fbo" fbo.depth_mask = False assert fbo.depth_mask is False def test_viewport(ctx): fbo = ctx.simple_framebuffer((4, 4)) assert fbo.viewport == (0, 0, 4, 4) fbo.viewport = (1, 2, 3, 4) assert fbo.viewport == (1, 2, 3, 4) def test_1(ctx): rbo1 = ctx.renderbuffer((4, 4), dtype='f1') rbo2 = ctx.renderbuffer((4, 4)) rbo3 = ctx.renderbuffer((4, 4)) fbo1 = ctx.framebuffer(rbo1) fbo2 = ctx.framebuffer(rbo2) fbo3 = ctx.framebuffer(rbo3) fbo4 = ctx.framebuffer([rbo1, rbo2, rbo3]) fbo4.clear(0.0, 1.0, 0.0, 1.0) pixels1 = fbo1.read(components=4, dtype='f1') assert pixels1 == b'\x00\xff\x00\xff' * 16 pixels2 = fbo2.read(components=4, dtype='f1') assert pixels2 == b'\x00\xff\x00\xff' * 16 pixels3 = fbo3.read(components=4, dtype='f1') assert pixels3 == b'\x00\xff\x00\xff' * 16 def test_2(ctx): rbo1 = ctx.renderbuffer((4, 4), dtype='f1') rbo2 = ctx.renderbuffer((4, 4)) rbo3 = ctx.renderbuffer((4, 4)) fbo1 = ctx.framebuffer(rbo1) fbo2 = ctx.framebuffer(rbo2) fbo3 = ctx.framebuffer(rbo3) fbo4 = ctx.framebuffer([rbo1, rbo2, rbo3]) fbo1.clear(1.0, 0.0, 0.0, 1.0) fbo2.clear(0.0, 1.0, 0.0, 1.0) fbo3.clear(0.0, 0.0, 1.0, 1.0) pixels1 = fbo4.read(attachment=0, components=4, dtype='f1') assert pixels1 == b'\xff\x00\x00\xff' * 16 pixels2 = fbo4.read(attachment=1, components=4, dtype='f1') assert pixels2 == b'\x00\xff\x00\xff' * 16 pixels3 = fbo4.read(attachment=2, components=4, dtype='f1') assert pixels3 == b'\x00\x00\xff\xff' * 16 def test_3(ctx): rbo1 = ctx.renderbuffer((4, 4), dtype='f1') rbo2 = ctx.renderbuffer((4, 4)) rbo3 = ctx.renderbuffer((4, 4)) fbo1 = ctx.framebuffer(rbo1) fbo2 = ctx.framebuffer(rbo2) fbo3 = ctx.framebuffer(rbo3) fbo4 = ctx.framebuffer([rbo1, rbo2, rbo3]) fbo1.clear(1.0, 0.0, 0.0, 1.0) fbo2.clear(0.0, 1.0, 0.0, 1.0) fbo3.clear(0.0, 0.0, 1.0, 1.0) pixels1 = bytearray(64) fbo4.read_into(pixels1, attachment=0, components=4, dtype='f1') assert bytes(pixels1) == b'\xff\x00\x00\xff' * 16 pixels2 = bytearray(64) fbo4.read_into(pixels2, attachment=1, components=4, dtype='f1') assert bytes(pixels2) == b'\x00\xff\x00\xff' * 16 pixels3 = bytearray(64) fbo4.read_into(pixels3, attachment=2, components=4, dtype='f1') assert bytes(pixels3) == b'\x00\x00\xff\xff' * 16 moderngl-moderngl-773b733/tests/test_framebuffer_clear.py000066400000000000000000000015421470420062000236110ustar00rootroot00000000000000 def test_1(ctx): fbo1 = ctx.simple_framebuffer((4, 4)) fbo2 = ctx.simple_framebuffer((4, 4)) fbo1.clear(0.0, 0.0, 0.0, 0.0) assert fbo1.read() == b'\x00\x00\x00' * 4 * 4 fbo1.clear(1.0, 0.0, 0.0, 0.0, viewport=(2, 2)) fbo1.clear(0.0, 1.0, 0.0, 0.0, viewport=(2, 0, 2, 2)) fbo1.clear(0.0, 0.0, 1.0, 0.0, viewport=(0, 2, 2, 2)) assert fbo1.read((2, 2)), b'\xff\x00\x00' * 2 * 2 assert fbo1.read((2, 0, 2, 2)), b'\x00\xff\x00' * 2 * 2 assert fbo1.read((0, 2, 2, 2)), b'\x00\x00\xff' * 2 * 2 assert fbo1.read((2, 2, 2, 2)), b'\x00\x00\x00' * 2 * 2 ctx.copy_framebuffer(fbo2, fbo1) assert fbo2.read((2, 2)), b'\xff\x00\x00' * 2 * 2 assert fbo2.read((2, 0, 2, 2)), b'\x00\xff\x00' * 2 * 2 assert fbo2.read((0, 2, 2, 2)), b'\x00\x00\xff' * 2 * 2 assert fbo2.read((2, 2, 2, 2)), b'\x00\x00\x00' * 2 * 2 moderngl-moderngl-773b733/tests/test_framebuffer_half_float.py000066400000000000000000000016111470420062000246170ustar00rootroot00000000000000import numpy as np import numpy.testing as npt import moderngl def test_1(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 f_color; void main() { f_color = vec4(0.0, 0.5, 1.0, 1.0); } ''', ) vbo = ctx.buffer(np.array([-1, -1, -1, 1, 1, -1, 1, 1], dtype='f4')) vao = ctx.simple_vertex_array(prog, vbo, 'in_vert') fbo = ctx.simple_framebuffer((4, 4), dtype='f2') fbo.use() fbo.clear() vao.render(moderngl.TRIANGLE_STRIP) res = np.frombuffer(fbo.read(dtype='f2'), dtype='f2') expected = np.tile([0.0, 0.5, 1.0], 4 * 4) npt.assert_almost_equal(res, expected, decimal=2) moderngl-moderngl-773b733/tests/test_framebuffer_masks.py000066400000000000000000000026661470420062000236510ustar00rootroot00000000000000 def test_1(ctx): fbo = ctx.framebuffer(ctx.renderbuffer((4, 4))) fbo.clear(0.0, 0.0, 0.0, 0.0) assert fbo.read(components=4) == b'\x00\x00\x00\x00' * 16 fbo.color_mask = (True, False, True, False) fbo.clear(0x19 / 255, 0x33 / 255, 0x4c / 255, 0x66 / 255) assert fbo.read(components=4) == b'\x19\x00\x4c\x00' * 16 fbo.color_mask = (False, True, False, True) fbo.clear(0x7f / 255, 0x99 / 255, 0xb2 / 255, 0xcc / 255) assert fbo.read(components=4) == b'\x19\x99\x4c\xcc' * 16 def test_2(ctx): fbo = ctx.framebuffer([ ctx.renderbuffer((4, 4)), ctx.renderbuffer((4, 4)), ]) fbo.clear(1.0, 1.0, 1.0, 1.0) assert fbo.read(components=4, attachment=0) == b'\xff\xff\xff\xff' * 16 assert fbo.read(components=4, attachment=1) == b'\xff\xff\xff\xff' * 16 fbo.color_mask = ( (True, False, True, False), (False, True, False, True), ) fbo.clear(0x19 / 255, 0x33 / 255, 0x4c / 255, 0x66 / 255) assert fbo.read(components=4, attachment=0) == b'\x19\xff\x4c\xff' * 16 assert fbo.read(components=4, attachment=1) == b'\xff\x33\xff\x66' * 16 fbo.color_mask = ( (False, True, False, True), (True, False, True, False), ) fbo.clear(0x7f / 255, 0x99 / 255, 0xb2 / 255, 0xcc / 255) assert fbo.read(components=4, attachment=0) == b'\x19\x99\x4c\xcc' * 16 assert fbo.read(components=4, attachment=1) == b'\x7f\x33\xb2\x66' * 16 moderngl-moderngl-773b733/tests/test_framebuffer_read_channels.py000066400000000000000000000005511470420062000253100ustar00rootroot00000000000000 def test_framebuffer_read_channels(ctx): fbo = ctx.framebuffer([ ctx.renderbuffer((4, 4)), ]) fbo.clear(65 / 255, 66 / 255, 67 / 255, 68 / 255) assert fbo.read(components=1) == b'A' * 16 assert fbo.read(components=2) == b'AB' * 16 assert fbo.read(components=3) == b'ABC' * 16 assert fbo.read(components=4) == b'ABCD' * 16 moderngl-moderngl-773b733/tests/test_labels.py000066400000000000000000000012271470420062000214210ustar00rootroot00000000000000import moderngl import pytest def test_error_when_label_is_too_long(ctx): buf = ctx.buffer(reserve=1024) max_label_length = ctx.max_label_length with pytest.raises(moderngl.Error): buf.label = "F" * (max_label_length + 1) def test_error_with_wrong_type(ctx): buf = ctx.buffer(reserve=1024) with pytest.raises(TypeError): buf.label = 123 def test_no_label_on_creation(ctx): buf = ctx.buffer(reserve=1024) assert buf.label is None def test_clearing_label(ctx): buf = ctx.buffer(reserve=1024) buf.label = "test buffer" assert buf.label is not None buf.label = None assert buf.label is None moderngl-moderngl-773b733/tests/test_local.py000066400000000000000000000004401470420062000212450ustar00rootroot00000000000000import os import moderngl def test_local(): path1 = os.path.normpath(os.path.dirname(os.path.dirname(moderngl.__file__))) path2 = os.path.normpath(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) assert path1.lower() == path2.lower(), 'Using installed moderngl' moderngl-moderngl-773b733/tests/test_module_integrity.py000066400000000000000000000017021470420062000235400ustar00rootroot00000000000000import os import re def read_file(name): f = open(name) res = f.read() f.close() return res here = os.path.dirname(os.path.abspath(__file__)) repo = os.path.dirname(here) # def test_version(): # setup = read_file(os.path.join(repo, 'setup.py')) # init = read_file(os.path.join(repo, 'moderngl', '__init__.py')) # docs = read_file(os.path.join(repo, 'docs', 'conf.py')) # match0 = re.search(r'version=\'(\d+\.\d+\.\d+)\'', setup, flags=re.M) # match1 = re.search(r'__version__ = \'(\d+\.\d+\.\d+)\'', init, flags=re.M) # match2 = re.search(r'version = \'(\d+\.\d+\.\d+)\'', docs, flags=re.M) # match3 = re.search(r'release = \'(\d+\.\d+\.\d+)\'', docs, flags=re.M) # assert match0.group(1) == match1.group(1), 'Version error: moderngl/__init__.py' # assert match0.group(1) == match2.group(1), 'Version error: docs/conf.py' # assert match0.group(1) == match3.group(1), 'Version error: docs/conf.py' moderngl-moderngl-773b733/tests/test_padding.py000066400000000000000000000040721470420062000215660ustar00rootroot00000000000000import struct import pytest import moderngl @pytest.fixture(scope='module') def prog(ctx_static): return ctx_static.program( vertex_shader=''' #version 330 in int a_in; in int b_in; in int c_in; in int d_in; out int a_out; out int b_out; out int c_out; out int d_out; void main() { a_out = a_in * 2; b_out = b_in * 2; c_out = c_in * 2; d_out = d_in * 2; } ''', varyings=['a_out', 'b_out', 'c_out', 'd_out'] ) @pytest.fixture(scope='module', autouse=True) def fbo(ctx_static): """Bind an fbo to avoid GL_INVALID_FRAMEBUFFER_OPERATION with transforms""" fbo = ctx_static.simple_framebuffer((2, 2)) fbo.use() def test_padding_1(ctx, prog): buf = ctx.buffer(struct.pack('=ixi12xii', 1, 2, 3, 4)) res = ctx.buffer(reserve=16) vao = ctx.vertex_array(prog, [ (buf, 'i x i 12x i i', 'a_in', 'b_in', 'c_in', 'd_in'), ]) vao.transform(res, moderngl.POINTS) a, b, c, d = struct.unpack('=iiii', res.read()) assert ctx.error == 'GL_NO_ERROR' assert a == 2 assert b == 4 assert c == 6 assert d == 8 def test_padding_2(ctx, prog): buf = ctx.buffer(struct.pack('=i8xi8xi8xi8x', 1, 2, 3, 4)) res = ctx.buffer(reserve=64) vao = ctx.vertex_array(prog, [ (buf, 'i 8x', 'a_in'), ]) vao.transform(res, moderngl.POINTS) assert vao.vertices == 4 a1, a2, a3, a4 = struct.unpack('=i12xi12xi12xi12x', res.read()) assert a1 == 2 assert a2 == 4 assert a3 == 6 assert a4 == 8 def test_padding_3(ctx, prog): buf = ctx.buffer(struct.pack('=128xiiii', 1, 2, 3, 4)) res = ctx.buffer(reserve=16) vao = ctx.vertex_array(prog, [ (buf, '128x i i i i', 'a_in', 'b_in', 'c_in', 'd_in'), ]) vao.transform(res, moderngl.POINTS) a, b, c, d = struct.unpack('=iiii', res.read()) assert a == 2 assert b == 4 assert c == 6 assert d == 8 moderngl-moderngl-773b733/tests/test_pbo.py000066400000000000000000000036201470420062000207360ustar00rootroot00000000000000import struct def test_1(ctx): size = (4, 4) rbo1 = ctx.renderbuffer(size, dtype='f1') rbo2 = ctx.renderbuffer(size) rbo3 = ctx.renderbuffer(size) fbo1 = ctx.framebuffer(rbo1) fbo2 = ctx.framebuffer(rbo2) fbo3 = ctx.framebuffer(rbo3) fbo4 = ctx.framebuffer([rbo1, rbo2, rbo3]) fbo1.clear(1.0, 0.0, 0.0, 1.0) fbo2.clear(0.0, 1.0, 0.0, 1.0) fbo3.clear(0.0, 0.0, 1.0, 1.0) buf = ctx.buffer(reserve=64) fbo4.read_into(buf, attachment=0, components=4, dtype='f1') assert buf.read() == b'\xff\x00\x00\xff' * 16 fbo4.read_into(buf, attachment=1, components=4, dtype='f1') assert buf.read() == b'\x00\xff\x00\xff' * 16 fbo4.read_into(buf, attachment=2, components=4, dtype='f1') assert buf.read() == b'\x00\x00\xff\xff' * 16 def test_2(ctx): pixels = b'\xFF\x00\x00\xFF\x00\xFF\x00\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF' texture = ctx.texture((2, 2), 4) buf = ctx.buffer(pixels) texture.write(buf) assert texture.read() == pixels def test_3(ctx): pixels = struct.pack( '4f4f4f4f', 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, ) buf = ctx.buffer(pixels) texture = ctx.texture((2, 2), 4, dtype='f4') texture.write(buf) assert texture.read() == pixels def test_4(ctx): pixels = b'\xFF\x00\x00\xFF\x00\xFF\x00\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF' texture = ctx.texture((2, 2), 4, pixels) buf = ctx.buffer(reserve=len(pixels)) texture.read_into(buf) assert buf.read() == pixels def test_5(ctx): pixels = struct.pack( '4f4f4f4f', 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, ) texture = ctx.texture((2, 2), 4, pixels, dtype='f4') buf = ctx.buffer(reserve=len(pixels)) texture.read_into(buf) assert buf.read() == pixels moderngl-moderngl-773b733/tests/test_pbo_new.py000066400000000000000000000036041470420062000216110ustar00rootroot00000000000000import struct def test_1(ctx): rbo1 = ctx.renderbuffer((4, 4), dtype='f1') rbo2 = ctx.renderbuffer((4, 4)) rbo3 = ctx.renderbuffer((4, 4)) fbo1 = ctx.framebuffer(rbo1) fbo2 = ctx.framebuffer(rbo2) fbo3 = ctx.framebuffer(rbo3) fbo4 = ctx.framebuffer([rbo1, rbo2, rbo3]) fbo1.clear(1.0, 0.0, 0.0, 1.0) fbo2.clear(0.0, 1.0, 0.0, 1.0) fbo3.clear(0.0, 0.0, 1.0, 1.0) buf = ctx.buffer(reserve=64) fbo4.read_into(buf, attachment=0, components=4, dtype='f1') assert buf.read() == b'\xff\x00\x00\xff' * 16 fbo4.read_into(buf, attachment=1, components=4, dtype='f1') assert buf.read() == b'\x00\xff\x00\xff' * 16 fbo4.read_into(buf, attachment=2, components=4, dtype='f1') assert buf.read() == b'\x00\x00\xff\xff' * 16 def test_2(ctx): pixels = b'\xFF\x00\x00\xFF\x00\xFF\x00\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF' texture = ctx.texture((2, 2), 4) buf = ctx.buffer(pixels) texture.write(buf) assert texture.read() == pixels def test_3(ctx): pixels = struct.pack( '4f4f4f4f', 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, ) buf = ctx.buffer(pixels) texture = ctx.texture((2, 2), 4, dtype='f4') texture.write(buf) assert texture.read() == pixels def test_4(ctx): pixels = b'\xFF\x00\x00\xFF\x00\xFF\x00\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF' texture = ctx.texture((2, 2), 4, pixels) buf = ctx.buffer(reserve=len(pixels)) texture.read_into(buf) assert buf.read() == pixels def test_5(ctx): pixels = struct.pack( '4f4f4f4f', 1.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, ) texture = ctx.texture((2, 2), 4, pixels, dtype='f4') buf = ctx.buffer(reserve=len(pixels)) texture.read_into(buf) assert buf.read() == pixels moderngl-moderngl-773b733/tests/test_per_instance_attrib.py000066400000000000000000000063111470420062000241750ustar00rootroot00000000000000import struct import pytest import moderngl @pytest.fixture(scope='module') def prog(ctx_static): return ctx_static.program( vertex_shader=''' #version 330 in float v_in_1; in float v_in_2; in float v_in_3; out float v_out; void main() { v_out = v_in_1 + v_in_2 + v_in_3; } ''', varyings=['v_out'] ) @pytest.fixture(scope='module') def vbo1(ctx_static): return ctx_static.buffer(struct.pack('4f', 1.0, 2.0, 3.0, 4.0)) @pytest.fixture(scope='module') def vbo2(ctx_static): return ctx_static.buffer(struct.pack('4f', 10.0, 20.0, 30.0, 40.0)) @pytest.fixture(scope='module') def vbo3(ctx_static): return ctx_static.buffer(struct.pack('4f', 100.0, 200.0, 300.0, 400.0)) @pytest.fixture(scope='module') def vao1(ctx_static, prog, vbo1, vbo2): content = [ (vbo1, 'f', 'v_in_1'), (vbo2, 'f/i', 'v_in_2'), ] return ctx_static.vertex_array(prog, content) @pytest.fixture(scope='module') def vao2(ctx_static, prog, vbo1, vbo2, vbo3): content = [ (vbo1, 'f', 'v_in_1'), (vbo2, 'f/i', 'v_in_2'), (vbo3, 'f/r', 'v_in_3'), ] return ctx_static.vertex_array(prog, content) @pytest.fixture(scope='module') def res(ctx_static): return ctx_static.buffer(reserve=1024) def test_vertex_attrib_per_instance_1(vao1, res): vao1.transform(res, moderngl.POINTS, vertices=4, instances=1) a, b, c, d = struct.unpack('4f', res.read(16)) assert pytest.approx(a) == 11.0 assert pytest.approx(b) == 12.0 assert pytest.approx(c) == 13.0 assert pytest.approx(d) == 14.0 def test_vertex_attrib_per_instance_2(vao1, res): vao1.transform(res, moderngl.POINTS, vertices=2, instances=2) a, b, c, d = struct.unpack('4f', res.read(16)) assert pytest.approx(a) == 11.0 assert pytest.approx(b) == 12.0 assert pytest.approx(c) == 21.0 assert pytest.approx(d) == 22.0 def test_vertex_attrib_per_instance_3(vao1, res): vao1.transform(res, moderngl.POINTS, vertices=1, instances=4) a, b, c, d = struct.unpack('4f', res.read(16)) assert pytest.approx(a) == 11.0 assert pytest.approx(b) == 21.0 assert pytest.approx(c) == 31.0 assert pytest.approx(d) == 41.0 def test_vertex_attrib_per_render_1(vao2, res): vao2.transform(res, moderngl.POINTS, vertices=4, instances=1) a, b, c, d = struct.unpack('4f', res.read(16)) assert pytest.approx(a) == 111.0 assert pytest.approx(b) == 112.0 assert pytest.approx(c) == 113.0 assert pytest.approx(d) == 114.0 def test_vertex_attrib_per_render_2(vao2, res): vao2.transform(res, moderngl.POINTS, vertices=2, instances=2) a, b, c, d = struct.unpack('4f', res.read(16)) assert pytest.approx(a) == 111.0 assert pytest.approx(b) == 112.0 assert pytest.approx(c) == 121.0 assert pytest.approx(d) == 122.0 def test_vertex_attrib_per_render_3(vao2, res): vao2.transform(res, moderngl.POINTS, vertices=1, instances=4) a, b, c, d = struct.unpack('4f', res.read(16)) assert pytest.approx(a) == 111.0 assert pytest.approx(b) == 121.0 assert pytest.approx(c) == 131.0 assert pytest.approx(d) == 141.0 moderngl-moderngl-773b733/tests/test_program.py000066400000000000000000000045531470420062000216330ustar00rootroot00000000000000import moderngl def test_program(ctx): program = ctx.program( vertex_shader=''' #version 330 uniform vec2 pos; uniform float scale; in vec2 vert; out vec2 v_vert; void main() { gl_Position = vec4(pos + vert * scale, 0.0, 1.0); v_vert = vert; } ''', fragment_shader=''' #version 330 in vec2 v_vert; out vec4 color; void main() { color = vec4(v_vert, 0.0, 1.0); } ''', ) program.label = "my favorite program" assert program.glo > 0 assert 'vert' in program assert 'pos' in program assert 'scale' in program assert program.is_transform is False assert program.label == "my favorite program" assert isinstance(program['vert'], moderngl.Attribute) assert isinstance(program['pos'], moderngl.Uniform) assert isinstance(program['scale'], moderngl.Uniform) def test_geo_input_output_primitive(ctx): """Test detection of all geo shader input/output primitives types""" input_types = [ ("points", moderngl.POINTS), ("lines", moderngl.LINES), ("lines_adjacency", moderngl.LINES_ADJACENCY), ("triangles", moderngl.TRIANGLES), ("triangles_adjacency", moderngl.TRIANGLES_ADJACENCY), ] output_types = [ ("points", moderngl.POINTS), ("line_strip", moderngl.LINES), ("triangle_strip", moderngl.TRIANGLES), ] for out_name, out_type in output_types: for in_name, in_type in input_types: p = ctx.program( vertex_shader=""" #version 330 void main() { gl_Position = vec4(1.0); } """, geometry_shader=( "#version 330\n" f"layout({in_name}) in;\n" f"layout({out_name}, max_vertices=6) out;\n" "void main() {\n" " gl_Position = vec4(1.0);\n" " EmitVertex();\n" " EndPrimitive();\n" "}\n" ), ) assert p.geometry_input == in_type assert p.geometry_output == out_type, f"input: {in_name}, output: {out_name}" moderngl-moderngl-773b733/tests/test_release.py000066400000000000000000000021231470420062000215730ustar00rootroot00000000000000""" Test that all objects can be released. """ def test_texture(ctx): tex = ctx.texture((4, 4), 4) tex.release() def test_texture_array(ctx): tex = ctx.texture_array((4, 4, 4), 4) tex.release() def test_texture_cube(ctx): tex = ctx.texture_cube((4, 4), 4) tex.release() def test_texture_3d(ctx): tex = ctx.texture3d((4, 4, 4), 4) tex.release() def test_renderbuffer(ctx): rbo = ctx.renderbuffer((4, 4)) rbo.release() def test_buffer(ctx): buf = ctx.buffer(reserve=4) buf.release() def test_framebuffer(ctx): fbo = ctx.framebuffer(ctx.renderbuffer((4, 4))) fbo.release() def test_vertex_array(ctx): vao = ctx.vertex_array(ctx.program( vertex_shader=""" #version 330 void main() { gl_Position = vec4(0.0, 0.0, 0.0, 1.0); } """, ), []) vao.release() def test_sampler(ctx): smp = ctx.sampler() smp.release() def test_scope(ctx): fbo = ctx.simple_framebuffer((4, 4)) scope = ctx.scope(framebuffer=fbo) fbo.release() scope.release() moderngl-moderngl-773b733/tests/test_renderbuffer.py000066400000000000000000000025611470420062000226320ustar00rootroot00000000000000import pytest def test_renderbuffer(ctx): rbo = ctx.renderbuffer((4, 8)) assert rbo.size == (4, 8) assert rbo.width == 4 assert rbo.height == 8 assert rbo.samples == 0 assert rbo.depth is False assert rbo.components == 4 assert rbo.dtype == 'f1' assert rbo == rbo def test_multisample_renderbuffer(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') rbo = ctx.renderbuffer((4, 4), samples=2) assert rbo.size == (4, 4) assert rbo.samples == 2 assert rbo.depth is False def test_depth_renderbuffer(ctx): rbo = ctx.depth_renderbuffer((4, 4)) assert rbo.size == (4, 4) assert rbo.samples == 0 assert rbo.depth is True def test_multisample_depth_renderbuffer(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') rbo = ctx.depth_renderbuffer((4, 4), samples=2) assert rbo.size == (4, 4) assert rbo.samples == 2 assert rbo.depth is True def test_renderbuffer_invalid_samples(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') with pytest.raises(Exception, match='samples is invalid'): ctx.renderbuffer((4, 4), samples=3) def test_renderbuffer_labels(ctx): rbo = ctx.renderbuffer((4, 8)) rbo.label = "best renderbuffer ever" assert rbo.label == "best renderbuffer ever" moderngl-moderngl-773b733/tests/test_sampler.py000066400000000000000000000042411470420062000216210ustar00rootroot00000000000000import moderngl def test_create(ctx): sampler = ctx.sampler() sampler.use(location=0) sampler.clear(location=0) def test_defaults(ctx): sampler = ctx.sampler() assert sampler.anisotropy <= 1.0 assert sampler.repeat_x is True assert sampler.repeat_y is True assert sampler.repeat_z is True assert sampler.filter == (moderngl.LINEAR, moderngl.LINEAR) assert sampler.compare_func == '?' assert sampler.border_color == (0.0, 0.0, 0.0, 0.0) assert sampler.min_lod == -1000.0 assert sampler.max_lod == 1000.0 def test_prop_changes(ctx): sampler = ctx.sampler() # Change values sampler.anisotropy = ctx.max_anisotropy sampler.filter = (moderngl.NEAREST_MIPMAP_NEAREST, moderngl.NEAREST) sampler.compare_func = "<=" assert sampler.anisotropy == ctx.max_anisotropy assert sampler.filter == (moderngl.NEAREST_MIPMAP_NEAREST, moderngl.NEAREST) assert sampler.compare_func == "<=" # Ensure repeat parameters are set correctly sampler.repeat_x = False assert (sampler.repeat_x, sampler.repeat_y, sampler.repeat_z) == (False, True, True) sampler.repeat_y = False assert (sampler.repeat_x, sampler.repeat_y, sampler.repeat_z) == (False, False, True) sampler.repeat_z = False assert (sampler.repeat_x, sampler.repeat_y, sampler.repeat_z) == (False, False, False) def test_border_color(ctx): sampler = ctx.sampler() # Ensure border color values are set correctly colors = [ (1.0, 0.0, 0.0, 0.0), (0.0, 1.0, 0.0, 0.0), (0.0, 0.0, 1.0, 0.0), (0.0, 0.0, 0.0, 1.0), ] for color in colors: sampler.border_color = color assert sampler.border_color == color def test_lod(ctx): sampler = ctx.sampler() sampler.min_lod = 0.0 assert sampler.min_lod == 0.0 sampler.max_lod = 500.0 assert sampler.max_lod == 500.0 def test_clear_samplers(ctx): ctx.clear_samplers(start=0, end=5) ctx.clear_samplers(start=5, end=10) ctx.clear_samplers(start=10, end=100) def test_sampler_labels(ctx): sampler = ctx.sampler() sampler.label = "sampler of excellence" assert sampler.label == "sampler of excellence" moderngl-moderngl-773b733/tests/test_sampler_uniforms.py000066400000000000000000000016301470420062000235420ustar00rootroot00000000000000 def test_sampler_2D_get_setter(ctx): prog = ctx.program( vertex_shader=''' #version 330 uniform sampler2D Texture2D; void main() { gl_Position = texture(Texture2D, vec2(0.0, 0.0)); } ''' ) sampler_uniform = prog['Texture2D'] sampler_uniform.value = 3 assert sampler_uniform.value == 3 sampler_uniform.value = 1 assert sampler_uniform.value == 1 def test_sampler_3D_get_setter(ctx): prog = ctx.program( vertex_shader=''' #version 330 uniform sampler3D Texture3D; void main() { gl_Position = texture(Texture3D, vec3(0.0, 0.0, 0.0)); } ''' ) sampler_uniform = prog['Texture3D'] sampler_uniform.value = 3 assert sampler_uniform.value == 3 sampler_uniform.value = 1 assert sampler_uniform.value == 1 moderngl-moderngl-773b733/tests/test_scissor.py000066400000000000000000000106141470420062000216440ustar00rootroot00000000000000import moderngl import pytest import numpy as np @pytest.fixture(scope='module') def prog(ctx_static): return ctx_static.program( vertex_shader=''' #version 330 in vec2 in_vert; void main() { gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 out vec4 fragColor; uniform vec4 color; void main() { fragColor = color; } ''', ) @pytest.fixture(scope='module') def vao(ctx_static, prog): quad = [ -1.0, 1.0, -1.0, -1.0, 1.0, 1.0, 1.0, -1.0, ] vbo = ctx_static.buffer(np.array(quad, dtype='f4')) return ctx_static.simple_vertex_array(prog, vbo, 'in_vert') def create_fbo(ctx, size, components=3): fbo = ctx.framebuffer( color_attachments=[ctx.texture(size, components)], ) fbo.clear() return fbo def test_default_value(ctx): """Ensure default value of the scissor matches the framebuffer size""" size = (16, 32) fbo = create_fbo(ctx, size) assert fbo.scissor == (0, 0, *size) def test_reset_scissor(ctx): """We should be able to reset scissor with `None`""" size = (16, 32) fbo = create_fbo(ctx, size) new_val = 2, 2, 14, 30 fbo.scissor = new_val assert fbo.scissor == new_val fbo.scissor = None assert fbo.scissor == (0, 0, *size) def test_render(ctx, prog, vao): """Render different color to the four corners of the fbo using scissor""" size = (4, 4) fbo = create_fbo(ctx, size) fbo.use() # upper left (red) fbo.scissor = 0, 2, 2, 2 prog['color'].value = 1.0, 0.0, 0.0, 0.0 vao.render(mode=moderngl.TRIANGLE_STRIP) # upper right (green) fbo.scissor = 2, 2, 2, 2 prog['color'].value = 0.0, 1.0, 0.0, 0.0 vao.render(mode=moderngl.TRIANGLE_STRIP) # lower left (green) fbo.scissor = 0, 0, 2, 2 prog['color'].value = 0.0, 0.0, 1.0, 0.0 vao.render(mode=moderngl.TRIANGLE_STRIP) # lower right (green) fbo.scissor = 2, 0, 2, 2 prog['color'].value = 1.0, 1.0, 1.0, 1.0 vao.render(mode=moderngl.TRIANGLE_STRIP) data = fbo.read() # Note that the data is flipped horizontally expected = ( b'\x00\x00\xff'b'\x00\x00\xff'b'\xff\xff\xff'b'\xff\xff\xff' b'\x00\x00\xff'b'\x00\x00\xff'b'\xff\xff\xff'b'\xff\xff\xff' b'\xff\x00\x00'b'\xff\x00\x00'b'\x00\xff\x00'b'\x00\xff\x00' b'\xff\x00\x00'b'\xff\x00\x00'b'\x00\xff\x00'b'\x00\xff\x00' ) assert data == expected def test_clear(ctx): """Ensure fbo clearing works with scissoring""" size = (4, 4) fbo = create_fbo(ctx, size) fbo.use() # upper left (red) fbo.scissor = 0, 2, 2, 2 fbo.clear(1.0, 0.0, 0.0, 0.0) # upper right (green) fbo.scissor = 2, 2, 2, 2 fbo.clear(0.0, 1.0, 0.0, 0.0) # lower left (green) fbo.scissor = 0, 0, 2, 2 fbo.clear(0.0, 0.0, 1.0, 0.0) # lower right (green) fbo.scissor = 2, 0, 2, 2 fbo.clear(1.0, 1.0, 1.0, 1.0) data = fbo.read() # Note that the data is flipped horizontally expected = ( b'\x00\x00\xff'b'\x00\x00\xff'b'\xff\xff\xff'b'\xff\xff\xff' b'\x00\x00\xff'b'\x00\x00\xff'b'\xff\xff\xff'b'\xff\xff\xff' b'\xff\x00\x00'b'\xff\x00\x00'b'\x00\xff\x00'b'\x00\xff\x00' b'\xff\x00\x00'b'\xff\x00\x00'b'\x00\xff\x00'b'\x00\xff\x00' ) assert data == expected def test_scissor_leak(ctx): """Make sure we don't leak scissor values to other framebuffers""" size = 2, 2 fbo1 = create_fbo(ctx, size, components=4) fbo2 = create_fbo(ctx, size, components=4) fbo1.scissor = 0, 0, 1, 1 fbo2.scissor = 1, 1, 1, 1 fbo1.clear(color=(1.0, 0.0, 0.0, 0.0)) fbo2.clear(color=(0.0, 1.0, 0.0, 0.0)) assert fbo1.read() == b'\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' assert fbo2.read() == b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00' def test_clear_with_viewport(ctx): """Clearing with viewport take presence over scissor""" size = 2, 1 fbo = create_fbo(ctx, size) fbo.scissor = 1, 0, 1, 1 fbo.clear(color=(1.0, 1.0, 1.0, 1.0), viewport=(0, 0, 1, 1)) assert fbo.read() == b'\xff\xff\xff\x00\x00\x00' moderngl-moderngl-773b733/tests/test_shader_includes.py000066400000000000000000000017661470420062000233230ustar00rootroot00000000000000import moderngl def test_shader_includes(ctx): ctx.includes['uniforms'] = ''' uniform vec2 pos; uniform float scale; ''' program = ctx.program( vertex_shader=''' #version 330 #include "uniforms" in vec2 vert; out vec2 v_vert; void main() { gl_Position = vec4(pos + vert * scale, 0.0, 1.0); v_vert = vert; } ''', fragment_shader=''' #version 330 in vec2 v_vert; out vec4 color; void main() { color = vec4(v_vert, 0.0, 1.0); } ''', ) assert program.glo > 0 assert 'vert' in program assert 'pos' in program assert 'scale' in program assert program.is_transform is False assert isinstance(program['vert'], moderngl.Attribute) assert isinstance(program['pos'], moderngl.Uniform) assert isinstance(program['scale'], moderngl.Uniform) moderngl-moderngl-773b733/tests/test_simple_buffer.py000066400000000000000000000014611470420062000230010ustar00rootroot00000000000000import moderngl import pytest def test_buffer_create_bytes(ctx): ctx.buffer(b'Hello World!') def test_buffer_reserve(ctx): ctx.buffer(reserve=1024) def test_buffer_reserve_human_readable(ctx): buf = ctx.buffer(reserve='2KB') assert buf.size == 2 * 1024 def test_buffer_data_and_reserve(ctx): with pytest.raises(moderngl.Error): ctx.buffer(b'Hello World!', reserve=1024) def test_data_size(ctx): buf = ctx.buffer(b'\x00\x00\x00\x00') assert buf.size == 4 def test_reserve_size(ctx): buf = ctx.buffer(reserve=8) assert buf.size == 8 def test_dynamic(ctx): buf = ctx.buffer(b'\x00\x00\x00\x00', dynamic=False) assert buf.dynamic is False def test_non_dynamic(ctx): buf = ctx.buffer(b'\x00\x00\x00\x00', dynamic=True) assert buf.dynamic is True moderngl-moderngl-773b733/tests/test_simple_compute_shader.py000066400000000000000000000031451470420062000245330ustar00rootroot00000000000000import moderngl import pytest def test_compute_shader(ctx): if ctx.version_code < 430: pytest.skip('OpenGL 4.3 is not supported') src = ''' #version 430 layout (local_size_x = 1, local_size_y = 1, local_size_z = 1) in; struct Something { vec4 pos; }; layout(std430, binding=0) buffer something_in { Something entries[]; } In; // output into the buffer bound to 1 layout(std430, binding=1) buffer something_out { Something entries[]; } Out; uniform float multiplier; void main() { int x = int(gl_GlobalInvocationID); Something entry = In.entries[x]; Out.entries[x] = Something(entry.pos * multiplier); } ''' buffer_in = ctx.buffer(reserve=16) buffer_out = ctx.buffer(reserve=16) buffer_in.bind_to_storage_buffer(binding=0) buffer_out.bind_to_storage_buffer(binding=1) compute_shader = ctx.compute_shader(src) assert isinstance(compute_shader.glo, int) assert compute_shader.mglo is not None compute_shader.extra = {'name': 'test'} assert compute_shader.extra == {'name': 'test'} assert isinstance(compute_shader.ctx, moderngl.Context) compute_shader['multiplier'] = 1.0 compute_shader['multiplier'].value = 1.0 compute_shader.run() assert compute_shader.get('multiplier', None) is not None assert compute_shader == compute_shader assert [i for i in compute_shader] == ['multiplier', 'something_in', 'something_out'] compute_shader.release() moderngl-moderngl-773b733/tests/test_simple_framebuffer.py000066400000000000000000000117351470420062000240210ustar00rootroot00000000000000import moderngl import pytest def test_framebuffer_color_attachment(ctx): rbo = ctx.renderbuffer((16, 16)) ctx.framebuffer(rbo) def test_framebuffer_get_color_attachments(ctx): rbo1 = ctx.renderbuffer((16, 16)) rbo2 = ctx.renderbuffer((16, 16)) rbo3 = ctx.renderbuffer((16, 16)) fbo1 = ctx.framebuffer(rbo1) fbo2 = ctx.framebuffer([rbo2, rbo1]) fbo3 = ctx.framebuffer([rbo1, rbo2, rbo3]) assert len(fbo1.color_attachments) == 1 assert len(fbo2.color_attachments) == 2 assert len(fbo3.color_attachments) == 3 assert isinstance(fbo1.color_attachments[0], moderngl.Renderbuffer) assert isinstance(fbo2.color_attachments[0], moderngl.Renderbuffer) assert isinstance(fbo2.color_attachments[1], moderngl.Renderbuffer) assert isinstance(fbo3.color_attachments[0], moderngl.Renderbuffer) assert isinstance(fbo3.color_attachments[1], moderngl.Renderbuffer) assert isinstance(fbo3.color_attachments[2], moderngl.Renderbuffer) assert rbo1 in fbo1.color_attachments assert rbo2 in fbo2.color_attachments assert rbo2 in fbo3.color_attachments assert rbo2 not in fbo1.color_attachments assert rbo3 not in fbo1.color_attachments assert rbo3 not in fbo2.color_attachments def test_framebuffer_get_depth_attachment(ctx): rbo1 = ctx.renderbuffer((16, 16)) rbo2 = ctx.depth_renderbuffer((16, 16)) fbo1 = ctx.framebuffer(rbo1) fbo2 = ctx.framebuffer(rbo1, rbo2) assert fbo1.depth_attachment is None assert isinstance(fbo2.depth_attachment, moderngl.Renderbuffer) assert fbo1.depth_attachment != rbo2 assert fbo2.depth_attachment == rbo2 def test_framebuffer_color_mask(ctx): fbo = ctx.framebuffer(ctx.renderbuffer((16, 16))) assert fbo.color_mask == (True, True, True, True) def test_framebuffer_single_channel_color_mask(ctx): fbo = ctx.framebuffer(ctx.renderbuffer((16, 16), components=1)) assert fbo.color_mask == (True, True, True, True) def test_framebuffer_mixed_channels_color_mask(ctx): fbo = ctx.framebuffer([ ctx.renderbuffer((16, 16), components=1), ctx.renderbuffer((16, 16), components=2), ctx.renderbuffer((16, 16), components=3), ctx.renderbuffer((16, 16), components=4), ]) expected = ( (True, True, True, True), (True, True, True, True), (True, True, True, True), (True, True, True, True), ) assert fbo.color_mask == expected def test_framebuffer_depth_mask_1(ctx): fbo = ctx.framebuffer( ctx.renderbuffer((16, 16)), ctx.depth_renderbuffer((16, 16)), ) assert fbo.depth_mask is True def test_framebuffer_depth_mask_2(ctx): fbo = ctx.framebuffer( ctx.renderbuffer((16, 16)) ) assert fbo.depth_mask is False def test_framebuffer_color_attachments(ctx): rbo1 = ctx.renderbuffer((16, 16)) rbo2 = ctx.renderbuffer((16, 16)) rbo3 = ctx.renderbuffer((16, 16)) ctx.framebuffer([rbo1, rbo2, rbo3]) def test_framebuffer_multiple_color_masks(ctx): fbo = ctx.framebuffer([ ctx.renderbuffer((16, 16)), ctx.renderbuffer((16, 16)), ]) expected = ((True, True, True, True), (True, True, True, True)) assert fbo.color_mask == expected def test_framebuffer_size_mismatch(ctx): with pytest.raises(moderngl.Error): rbo1 = ctx.renderbuffer((16, 16)) rbo2 = ctx.depth_renderbuffer((32, 32)) ctx.framebuffer(rbo1, rbo2) def test_framebuffer_color_attachments_size_mismatch(ctx): with pytest.raises(moderngl.Error): rbo1 = ctx.renderbuffer((16, 16)) rbo2 = ctx.renderbuffer((32, 32)) ctx.framebuffer([rbo1, rbo2]) def test_depth_framebuffer(ctx): rbo1 = ctx.renderbuffer((16, 16)) rbo2 = ctx.depth_renderbuffer((16, 16)) ctx.framebuffer(rbo1, rbo2) def test_framebuffer_multisample(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') rbo1 = ctx.renderbuffer((16, 16), samples=2) ctx.framebuffer(rbo1) def test_depth_framebuffer_multisample(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') rbo1 = ctx.renderbuffer((16, 16), samples=2) rbo2 = ctx.depth_renderbuffer((16, 16), samples=2) ctx.framebuffer(rbo1, rbo2) def test_framebuffer_multisample_sample_mismatch(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') with pytest.raises(moderngl.Error): rbo1 = ctx.renderbuffer((16, 16)) rbo2 = ctx.depth_renderbuffer((16, 16), samples=2) ctx.framebuffer(rbo1, rbo2) def test_empty_framebuffer(ctx): with pytest.raises(moderngl.Error): ctx.framebuffer([]) def test_framebuffer_having_depth_in_colors(ctx): with pytest.raises(moderngl.Error): ctx.framebuffer(ctx.depth_renderbuffer((16, 16))) def test_framebuffer_having_color_in_depth(ctx): with pytest.raises(moderngl.Error): ctx.framebuffer( ctx.renderbuffer((16, 16)), ctx.renderbuffer((16, 16)), ) moderngl-moderngl-773b733/tests/test_simple_program.py000066400000000000000000000036451470420062000232050ustar00rootroot00000000000000 VERTEX_SHADER = ''' #version 330 uniform mat4 Mvp; in vec4 vertex; uniform Block { mat4 Transform; }; void main() { gl_Position = Mvp * Transform * vertex; } ''' GEOMETRY_SHADER = ''' #version 330 layout(points) in; uniform vec4 Position; layout(line_strip, max_vertices = 2) out; out vec4 color; void main() { gl_Position = gl_in[0].gl_Position + Position; EmitVertex(); gl_Position = gl_in[0].gl_Position - Position; EmitVertex(); EndPrimitive(); } ''' FRAGMENT_SHADER = ''' #version 330 uniform vec4 Color; uniform Lights { uniform vec4 Light[1]; }; out vec4 color; void main() { color = Color * Light[0]; } ''' def test_program_uniforms_1(ctx): program = ctx.program(vertex_shader=VERTEX_SHADER) assert 'Mvp' in program assert 'Block' in program assert 'Transform' not in program def test_program_uniforms_2(ctx): program = ctx.program( vertex_shader=VERTEX_SHADER, geometry_shader=GEOMETRY_SHADER, fragment_shader=FRAGMENT_SHADER, ) assert 'Mvp' in program assert 'Position' in program assert 'Color' in program def test_program_uniform_blocks(ctx): program = ctx.program( vertex_shader=VERTEX_SHADER, fragment_shader=FRAGMENT_SHADER, ) assert 'Block' in program assert 'Lights' in program assert 'Transform' not in program assert 'Light' not in program def test_program_geometry_primitives_1(ctx): program = ctx.program(vertex_shader=VERTEX_SHADER) assert program.geometry_input is None assert program.geometry_output is None assert program.geometry_vertices == 0 def test_program_geometry_primitives_2(ctx): program = ctx.program( vertex_shader=VERTEX_SHADER, geometry_shader=GEOMETRY_SHADER, ) assert program.geometry_vertices == 2 moderngl-moderngl-773b733/tests/test_simple_renderbuffer.py000066400000000000000000000012221470420062000241740ustar00rootroot00000000000000import moderngl import pytest def test_renderbuffer(ctx): ctx.renderbuffer((64, 64)) def test_multisample_renderbuffer(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') ctx.renderbuffer((64, 64), samples=2) def test_depth_renderbuffer(ctx): ctx.depth_renderbuffer((64, 64)) def test_multisample_depth_renderbuffer(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') ctx.depth_renderbuffer((64, 64), samples=2) def test_renderbuffer_invalid_samples(ctx): with pytest.raises(moderngl.Error, match='sample'): ctx.renderbuffer((64, 64), samples=3) moderngl-moderngl-773b733/tests/test_simple_texture.py000066400000000000000000000074071470420062000232360ustar00rootroot00000000000000import moderngl import pytest def test_texture_create_1(ctx): ctx.texture((16, 16), 3) def test_texture_create_2(ctx): pixels = b'\x10\x20\x30' * 16 * 16 ctx.texture((16, 16), 3, pixels) def test_texture_create_string(ctx): pixels = 'abc' * 16 * 16 with pytest.raises(Exception): ctx.texture((16, 16), 3, pixels) def test_multisample_texture(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') ctx.texture((16, 16), 3, samples=2) def test_depth_texture(ctx): ctx.depth_texture((16, 16)) def test_multisample_depth_texture(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') ctx.depth_texture((16, 16), samples=2) def test_texture_invalid_samples(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') with pytest.raises(moderngl.Error, match='sample'): ctx.texture((16, 16), 3, samples=3) def test_texture_get_swizzle(ctx): tex = ctx.texture((16, 16), 4) assert tex.swizzle == 'RGBA' def test_texture_swizzle_1(ctx): tex = ctx.texture((16, 16), 4) tex.swizzle = 'argb' assert tex.swizzle == 'ARGB' def test_texture_swizzle_2(ctx): tex = ctx.texture((16, 16), 1) tex.swizzle = 'RRRR' assert tex.swizzle == 'RRRR' def test_texture_swizzle_3(ctx): tex = ctx.texture((16, 16), 2) tex.swizzle = '01RG' assert tex.swizzle == '01RG' def test_texture_read(ctx): pixels = b'\x10\x20\x30' * 8 * 8 tex = ctx.texture((8, 8), 3, pixels) assert tex.read() == pixels def test_texture_read_into(ctx): pixels = b'\x10\x20\x30' * 8 * 8 tex = ctx.texture((8, 8), 3, pixels) buf = bytearray(8 * 8 * 3) tex.read_into(buf) assert bytes(buf) == pixels def test_texture_read_into_pbo(ctx): pixels = b'\x10\x20\x30' * 8 * 8 tex = ctx.texture((8, 8), 3, pixels) buf = ctx.buffer(reserve=8 * 8 * 3) tex.read_into(buf) assert buf.read() == pixels def test_texture_write_1(ctx): pixels1 = b'\x00\x00\x00' * 8 * 8 pixels2 = b'\xff\xff\xff' * 8 * 8 tex = ctx.texture((8, 8), 3, pixels1) assert tex.read() == pixels1 tex.write(pixels2) assert tex.read() == pixels2 def test_texture_write_2(ctx): pixels1 = b'\x00\x00\x00' * 8 * 8 pixels2 = b'\xff\xff\xff' * 6 * 6 pixels3 = b'\x10\x20\x30' tex = ctx.texture((8, 8), 3) tex.write(pixels1, viewport=(0, 0, 8, 8)) tex.write(pixels2, viewport=(1, 1, 6, 6)) tex.write(pixels3, viewport=(2, 4, 1, 1)) def pixel(x, y): if x == 2 and y == 4: return b'\x10\x20\x30' if x == 0 or y == 0 or x == 7 or y == 7: return b'\x00\x00\x00' return b'\xff\xff\xff' expectation = b''.join(pixel(x, y) for y in range(8) for x in range(8)) assert tex.read() == expectation def test_texture_alignment_1(ctx): tex = ctx.texture((3, 3), 3) assert len(tex.read(alignment=1)) == 27 def test_texture_alignment_2(ctx): tex = ctx.texture((3, 3), 3) assert len(tex.read(alignment=2)) == 30 def test_texture_alignment_3(ctx): tex = ctx.texture((3, 3), 3) assert len(tex.read(alignment=4)) == 36 def test_texture_alignment_4(ctx): tex = ctx.texture((3, 3), 3) assert len(tex.read(alignment=8)) == 48 def test_texture_alignment_5(ctx): pixels = b'\x80\x90\xA0\x80\x90\xA0\x80\x90\xA0\x80\x90\xA0' tex = ctx.texture((2, 2), 3, pixels, alignment=1) assert tex.read(alignment=1) == pixels def test_texture_alignment_6(ctx): pixels = b'\x80\x90\xA0\x80\x90\xA0\x00\x00\x80\x90\xA0\x80\x90\xA0\x00\x00' tex = ctx.texture((2, 2), 3, pixels, alignment=4) result = tex.read(alignment=4) assert result[0:6] == b'\x80\x90\xA0\x80\x90\xA0' assert result[8:14] == b'\x80\x90\xA0\x80\x90\xA0' moderngl-moderngl-773b733/tests/test_simple_texture_3d.py000066400000000000000000000101011470420062000236050ustar00rootroot00000000000000import moderngl import pytest def test_properties(ctx): tex = ctx.texture3d((2, 4, 8), 4) assert tex.size == (2, 4, 8) assert tex.width == 2 assert tex.height == 4 assert tex.depth == 8 assert tex.components == 4 assert tex.dtype == 'f1' assert tex.glo > 0 assert tex.filter == (moderngl.LINEAR, moderngl.LINEAR) assert tex.repeat_x is True assert tex.repeat_y is True assert tex.repeat_z is True assert tex == tex tex.repeat_x = False tex.repeat_y = False tex.repeat_z = False assert tex.repeat_x is False assert tex.repeat_y is False assert tex.repeat_z is False def test_mipmaps(ctx): tex = ctx.texture3d((8, 8, 8), 4) tex.build_mipmaps(max_level=2) tex.filter = moderngl.LINEAR_MIPMAP_LINEAR, moderngl.LINEAR def test_texture_3d_create_1(ctx): ctx.texture3d((8, 8, 8), 3) def test_texture_3d_create_2(ctx): pixels = b'\x10\x20\x30' * 8 * 8 * 8 ctx.texture3d((8, 8, 8), 3, pixels) def test_texture_3d_create_string(ctx): pixels = 'abc' * 8 * 8 with pytest.raises(Exception): ctx.texture3d((8, 8, 8), 3, pixels) def test_texture_3d_create_wrong_size(ctx): with pytest.raises(Exception): ctx.texture3d((8, 8), 3) def test_texture_3d_get_swizzle(ctx): tex = ctx.texture3d((8, 8, 8), 4) assert tex.swizzle == 'RGBA' def test_texture_3d_swizzle_1(ctx): tex = ctx.texture3d((8, 8, 8), 4) tex.swizzle = 'argb' assert tex.swizzle == 'ARGB' def test_texture_3d_swizzle_2(ctx): tex = ctx.texture3d((8, 8, 8), 1) tex.swizzle = 'RRRR' assert tex.swizzle == 'RRRR' def test_texture_3d_swizzle_3(ctx): tex = ctx.texture3d((8, 8, 8), 2) tex.swizzle = '01RG' assert tex.swizzle == '01RG' def test_texture_3d_read(ctx): pixels = b'\x10\x20\x30' * 8 * 8 * 8 tex = ctx.texture3d((8, 8, 8), 3, pixels) assert tex.read() == pixels def test_texture_3d_read_into(ctx): pixels = b'\x10\x20\x30' * 8 * 8 * 8 tex = ctx.texture3d((8, 8, 8), 3, pixels) buf = bytearray(8 * 8 * 8 * 3) tex.read_into(buf) assert bytes(buf) == pixels def test_texture_3d_read_into_pbo(ctx): if ctx.info['GL_VENDOR'].startswith('Intel'): raise pytest.skip('Intel drivers do not support PBO') pixels = b'\x10\x20\x30' * 8 * 8 * 8 tex = ctx.texture3d((8, 8, 8), 3, pixels) buf = ctx.buffer(reserve=8 * 8 * 8 * 3) tex.read_into(buf) assert buf.read() == pixels def test_texture_3d_write_1(ctx): pixels1 = b'\x00\x00\x00' * 8 * 8 * 8 pixels2 = b'\xff\xff\xff' * 8 * 8 * 8 tex = ctx.texture3d((8, 8, 8), 3, pixels1) assert tex.read() == pixels1 tex.write(pixels2) assert tex.read() == pixels2 def test_texture_3d_write_2(ctx): pixels1 = b'\x00\x00\x00' * 8 * 8 * 8 pixels2 = b'\xff\xff\xff' * 6 * 6 * 6 pixels3 = b'\x10\x20\x30' tex = ctx.texture3d((8, 8, 8), 3) tex.write(pixels1, viewport=(0, 0, 0, 8, 8, 8)) tex.write(pixels2, viewport=(1, 1, 1, 6, 6, 6)) tex.write(pixels3, viewport=(2, 4, 6, 1, 1, 1)) def pixel(x, y, z): if x == 2 and y == 4 and z == 6: return b'\x10\x20\x30' if x == 0 or y == 0 or z == 0 or x == 7 or y == 7 or z == 7: return b'\x00\x00\x00' return b'\xff\xff\xff' expectation = b''.join(pixel(x, y, z) for z in range(8) for y in range(8) for x in range(8)) assert tex.read() == expectation def test_texture_default_filter(ctx): """Ensure default filter is correct""" # Float types for dtype in ["f1", "f2", "f4"]: texture = ctx.texture3d((10, 10, 10), 4, dtype=dtype) assert texture.filter == (moderngl.LINEAR, moderngl.LINEAR) for dtype in ["u1", "u2", "u4", "i1", "i2", "i4"]: texture = ctx.texture3d((10, 10, 10), 4, dtype=dtype) assert texture.filter == (moderngl.NEAREST, moderngl.NEAREST) def test_bind_to_image(ctx): if ctx.version_code < 430: pytest.skip('compute shaders not supported') tex = ctx.texture3d((4, 4, 4), 4) tex.bind_to_image(0, read=True, write=False) tex.bind_to_image(1, read=False, write=True) moderngl-moderngl-773b733/tests/test_spirv_parsing.py000066400000000000000000000054121470420062000230450ustar00rootroot00000000000000from _moderngl import parse_spv_inputs, ATTRIBUTE_LOOKUP_TABLE def test_spirv_parsing(): spv = bytes.fromhex(''' 03022307000001000b000d00350000000000000011000200010000000b00060001000000474c534c 2e7374642e343530000000000e00030000000000010000000f000b0000000000040000006d61696e 000000000d0000001200000021000000240000002c0000002f000000480005000b00000000000000 0b00000000000000480005000b000000010000000b00000001000000480005000b00000002000000 0b00000003000000480005000b000000030000000b00000004000000470003000b00000002000000 47000400120000001e0000000000000047000400210000001e000000000000004700040024000000 1e00000001000000470004002c0000001e00000001000000470004002f0000001e00000002000000 13000200020000002100030003000000020000001600030006000000200000001700040007000000 0600000004000000150004000800000020000000000000002b000400080000000900000001000000 1c0004000a00000006000000090000001e0006000b00000007000000060000000a0000000a000000 200004000c000000030000000b0000003b0004000c0000000d00000003000000150004000e000000 20000000010000002b0004000e0000000f0000000000000017000400100000000600000003000000 200004001100000001000000100000003b0004001100000012000000010000002b00040008000000 1300000000000000200004001400000001000000060000002b000400080000001900000002000000 200004001f00000003000000070000003b0004001f00000021000000030000001800040022000000 0700000002000000200004002300000001000000220000003b000400230000002400000001000000 20000400250000000100000007000000200004002b00000003000000060000003b0004002b000000 2c000000030000003b0004002b0000002f0000000300000036000500020000000400000000000000 03000000f80002000500000041000500140000001500000012000000130000003d00040006000000 160000001500000041000500140000001700000012000000090000003d0004000600000018000000 1700000041000500140000001a00000012000000190000003d000400060000001b0000001a000000 50000700070000001e00000016000000180000001b0000001b000000410005001f00000020000000 0d0000000f0000003e000300200000001e000000410005002500000026000000240000000f000000 3d0004000700000027000000260000003e00030021000000270000003e0003002c0000001b000000 8500050006000000340000001b0000001b0000003e0003002f00000034000000fd00010038000100 ''') result = { location: ATTRIBUTE_LOOKUP_TABLE[info.gl_type] for location, info in parse_spv_inputs(0, spv).items() } must_be = [(0, ATTRIBUTE_LOOKUP_TABLE[0x8b51]), (1, ATTRIBUTE_LOOKUP_TABLE[0x8b66])] output = True for x in result.items(): if x not in must_be: output = False break for x in must_be: if x not in result.items(): output = False break assert output moderngl-moderngl-773b733/tests/test_texture.py000066400000000000000000000200071470420062000216540ustar00rootroot00000000000000import struct from array import array import pytest import moderngl @pytest.fixture(scope='module', autouse=True) def vao(ctx_static): prog = ctx_static.program( vertex_shader=''' #version 330 in vec2 vert; out vec2 text; void main() { gl_Position = vec4(vert * 2.0 - 1.0, 0.0, 1.0); text = vert; } ''', fragment_shader=''' #version 330 uniform sampler2D Texture; in vec2 text; out vec4 color; void main() { color = texture(Texture, text); } ''', ) vbo = ctx_static.buffer(struct.pack('8f', 0, 0, 0, 1, 1, 0, 1, 1)) return ctx_static.simple_vertex_array(prog, vbo, 'vert') def test_texture_properties(ctx): tex = ctx.texture((16, 16), 4) assert tex.width == 16 assert tex.height == 16 assert tex.size == (16, 16) assert tex.components == 4 assert tex.depth is False assert tex.samples == 0 assert tex.glo > 0 assert tex.filter == (moderngl.LINEAR, moderngl.LINEAR) assert tex.repeat_x is True assert tex.repeat_y is True assert tex.dtype == 'f1' assert tex.anisotropy == 0.0 tex.label = "wonderful texture" assert tex.label == "wonderful texture" tex.anisotropy = ctx.max_anisotropy assert tex.anisotropy == ctx.max_anisotropy tex.build_mipmaps() assert tex.filter == (moderngl.LINEAR_MIPMAP_LINEAR, moderngl.LINEAR) def test_1(ctx, vao): assert vao.mode == moderngl.TRIANGLES fbo = ctx.framebuffer(ctx.renderbuffer((16, 16))) pixels = struct.pack('16B', 255, 0, 0, 255, 0, 255, 0, 255, 0, 0, 255, 255, 0, 0, 0, 255) texture = ctx.texture((2, 2), 4, pixels) fbo.use() texture.use() texture.filter = (moderngl.LINEAR, moderngl.LINEAR) vao.render(moderngl.TRIANGLE_STRIP) r, g, b = struct.unpack('3B', fbo.read((8, 8, 1, 1))) assert (abs(r - 49) < 8 and abs(g - 63) < 8 and abs(b - 63) < 8) texture.filter = (moderngl.NEAREST, moderngl.NEAREST) vao.render(moderngl.TRIANGLE_STRIP) r, g, b = struct.unpack('3B', fbo.read((6, 6, 1, 1))) assert (abs(r - 255) < 8 and abs(g - 0) < 8 and abs(b - 0) < 8) r, g, b = struct.unpack('3B', fbo.read((9, 6, 1, 1))) assert (abs(r - 0) < 8 and abs(g - 255) < 8 and abs(b - 0) < 8) r, g, b = struct.unpack('3B', fbo.read((6, 9, 1, 1))) assert (abs(r - 0) < 8 and abs(g - 0) < 8 and abs(b - 255) < 8) r, g, b = struct.unpack('3B', fbo.read((9, 9, 1, 1))) assert (abs(r - 0) < 8 and abs(g - 0) < 8 and abs(b - 0) < 8) def test_2(ctx, vao): fbo = ctx.framebuffer(ctx.renderbuffer((16, 16))) pixels1 = struct.pack('16B', 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255) pixels2 = struct.pack('16B', 20, 30, 40, 255, 80, 70, 60, 255, 20, 30, 40, 255, 80, 70, 60, 255) texture = ctx.texture((2, 2), 4, pixels1) fbo.use() texture.use() texture.filter = (moderngl.NEAREST, moderngl.NEAREST) vao.render(moderngl.TRIANGLE_STRIP) r, g, b = struct.unpack('3B', fbo.read((5, 7, 1, 1))) assert (abs(r - 255) < 8 and abs(g - 0) < 8 and abs(b - 0) < 8) r, g, b = struct.unpack('3B', fbo.read((10, 7, 1, 1))) assert (abs(r - 0) < 8 and abs(g - 255) < 8 and abs(b - 0) < 8) texture.write(pixels2) texture.filter = (moderngl.NEAREST, moderngl.NEAREST) vao.render(moderngl.TRIANGLE_STRIP) r, g, b = struct.unpack('3B', fbo.read((5, 7, 1, 1))) assert (abs(r - 20) < 8 and abs(g - 30) < 8 and abs(b - 40) < 8) r, g, b = struct.unpack('3B', fbo.read((10, 7, 1, 1))) assert (abs(r - 80) < 8 and abs(g - 70) < 8 and abs(b - 60) < 8) def test_3(ctx, vao): fbo = ctx.framebuffer(ctx.renderbuffer((16, 16))) pixels1 = struct.pack('16B', 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255) pixels2 = struct.pack('16B', 20, 30, 40, 255, 80, 70, 60, 255, 20, 30, 40, 255, 80, 70, 60, 255) texture = ctx.texture((2, 2), 4) pbo1 = ctx.buffer(pixels1) pbo2 = ctx.buffer(pixels2) fbo.use() texture.use() texture.write(pbo1) texture.filter = (moderngl.NEAREST, moderngl.NEAREST) vao.render(moderngl.TRIANGLE_STRIP) r, g, b = struct.unpack('3B', fbo.read((5, 7, 1, 1))) assert (abs(r - 255) < 8 and abs(g - 0) < 8 and abs(b - 0) < 8) r, g, b = struct.unpack('3B', fbo.read((10, 7, 1, 1))) assert (abs(r - 0) < 8 and abs(g - 255) < 8 and abs(b - 0) < 8) texture.write(pbo2) texture.filter = (moderngl.NEAREST, moderngl.NEAREST) vao.render(moderngl.TRIANGLE_STRIP) r, g, b = struct.unpack('3B', fbo.read((5, 7, 1, 1))) assert (abs(r - 20) < 8 and abs(g - 30) < 8 and abs(b - 40) < 8) r, g, b = struct.unpack('3B', fbo.read((10, 7, 1, 1))) assert (abs(r - 80) < 8 and abs(g - 70) < 8 and abs(b - 60) < 8) def test_4(ctx): pixels = struct.pack('16B', 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255) texture = ctx.texture((2, 2), 4, pixels) assert texture.read() == pixels def test_5(ctx): pixels = struct.pack('16B', 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255) texture = ctx.texture((2, 2), 4, pixels) buf = bytearray(len(pixels)) texture.read_into(buf) assert bytes(buf) == pixels def test_6(ctx): pixels = struct.pack('16B', 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255) texture = ctx.texture((2, 2), 4, pixels) pbo = ctx.buffer(reserve=len(pixels)) texture.read_into(pbo) assert pbo.read() == pixels def test_override_internalformat(ctx): """Ensure no errors occur when overriding internalformat""" if "GL_EXT_texture_sRGB" not in ctx.extensions: pytest.skip('GL_EXT_texture_sRGB extension not supported') GL_SRGB8 = 0x8C41 pixels = struct.pack('16B', 255, 0, 0, 255, 0, 255, 0, 255, 255, 0, 0, 255, 0, 255, 0, 255) texture = ctx.texture((2, 2), 4, pixels, internal_format=GL_SRGB8) _ = texture.read() assert ctx.error == "GL_NO_ERROR" def test_normalized_textures(ctx, vao): """8 and 16 bit normalized integer textures""" ni1 = ctx.texture((4, 4), 4, dtype="ni1") ni2 = ctx.texture((4, 4), 4, dtype="ni2") nu1 = ctx.texture((4, 4), 4, dtype="nu1") nu2 = ctx.texture((4, 4), 4, dtype="nu2") nu1_data = array('B', [255] * 16 * 4).tobytes() nu2_data = array('H', [65535] * 16 * 4).tobytes() ni1_data = array('b', [127] * 16 * 4).tobytes() ni2_data = array('h', [32767] * 16 * 4).tobytes() nu1.write(nu1_data) nu2.write(nu2_data) ni1.write(ni1_data) ni2.write(ni2_data) assert nu1.read() == nu1_data assert nu2.read() == nu2_data assert ni1.read() == ni1_data assert ni2.read() == ni2_data fbo = ctx.simple_framebuffer((4, 4)) fbo.use() # Render these textures to an RGBA8 framebuffer and ensure the result is a pure white color (FF) fbo.clear() nu1.use() vao.render() assert fbo.read(viewport=(0, 0, 1, 1), components=4, dtype="f1") == b'\xff\xff\xff\xff' fbo.clear() nu2.use() vao.render() assert fbo.read(viewport=(0, 0, 1, 1), components=4, dtype="f1") == b'\xff\xff\xff\xff' fbo.clear() ni1.use() vao.render() assert fbo.read(viewport=(0, 0, 1, 1), components=4, dtype="f1") == b'\xff\xff\xff\xff' fbo.clear() ni2.use() vao.render() assert fbo.read(viewport=(0, 0, 1, 1), components=4, dtype="f1") == b'\xff\xff\xff\xff' def test_depth_texture_write(ctx): """Write data into depth texture""" size = 4, 4 fbo = ctx.framebuffer( color_attachments=[ctx.texture(size, 4)], depth_attachment=ctx.depth_texture(size), ) fbo.clear(depth=1.0) first = struct.unpack("16f", fbo.depth_attachment.read()) second = (1.0,) * 16 for a, b in zip(first, second): assert pytest.approx(a, abs=1.0e-6) == b fbo.depth_attachment.write(struct.pack("16f", *([0.5] * 16))) first = struct.unpack("16f", fbo.depth_attachment.read()) second = (0.5,) * 16 for a, b in zip(first, second): assert pytest.approx(a, abs=1.0e-6) == b moderngl-moderngl-773b733/tests/test_texture_array.py000066400000000000000000000033521470420062000230560ustar00rootroot00000000000000import moderngl def test_create(ctx): size = (64, 32, 8) texture = ctx.texture_array(size, 4) # Basic attributes assert texture.size == size assert texture.width == 64 assert texture.height == 32 assert texture.layers == 8 assert texture.dtype == 'f1' assert texture.components == 4 assert texture.anisotropy == 0.0 # Texture parameters assert texture.repeat_x is True assert texture.repeat_y is True assert texture.filter == (moderngl.LINEAR, moderngl.LINEAR) assert texture.swizzle == "RGBA" assert texture == texture texture.repeat_x = False texture.repeat_y = False assert texture.repeat_x is False assert texture.repeat_y is False assert texture.swizzle == "RGBA" texture.swizzle = "RGBA" assert texture.swizzle == "RGBA" texture.anisotropy = ctx.max_anisotropy assert texture.anisotropy == ctx.max_anisotropy assert texture.filter == (moderngl.LINEAR, moderngl.LINEAR) texture.filter = moderngl.NEAREST, moderngl.NEAREST assert texture.filter == (moderngl.NEAREST, moderngl.NEAREST) texture.build_mipmaps() assert texture.filter == (moderngl.LINEAR_MIPMAP_LINEAR, moderngl.LINEAR) texture.label = "best texture array" assert texture.label == "best texture array" def test_texture_default_filter(ctx): """Ensure default filter is correct""" # Float types for dtype in ["f1", "f2", "f4"]: texture = ctx.texture_array((10, 10, 10), 4, dtype=dtype) assert texture.filter == (moderngl.LINEAR, moderngl.LINEAR) for dtype in ["u1", "u2", "u4", "i1", "i2", "i4"]: texture = ctx.texture_array((10, 10, 10), 4, dtype=dtype) assert texture.filter == (moderngl.NEAREST, moderngl.NEAREST) moderngl-moderngl-773b733/tests/test_texture_cube.py000066400000000000000000000053521470420062000226600ustar00rootroot00000000000000import moderngl import pytest def test_0(ctx): texture = ctx.texture_cube((16, 16), 4) assert texture.size == (16, 16) assert texture.components == 4 assert texture.filter == (moderngl.LINEAR, moderngl.LINEAR) assert texture.swizzle == "RGBA" assert texture.glo > 0 assert texture.dtype == "f1" assert texture.filter == (moderngl.LINEAR, moderngl.LINEAR) assert texture.swizzle == "RGBA" assert texture == texture assert texture.anisotropy == 0.0 texture.anisotropy = ctx.max_anisotropy assert texture.anisotropy == ctx.max_anisotropy texture.filter = moderngl.NEAREST, moderngl.NEAREST assert texture.filter == (moderngl.NEAREST, moderngl.NEAREST) texture.swizzle = "BGRA" assert texture.swizzle == "BGRA" texture.anisotropy = ctx.max_anisotropy assert texture.anisotropy == ctx.max_anisotropy texture.label = "six times the faces, six times the fun" assert texture.label == "six times the faces, six times the fun" def test_1(ctx): faces = [ b'\x00\x00\xff' * 4 * 4, b'\x00\xff\x00' * 4 * 4, b'\x00\xff\xff' * 4 * 4, b'\xff\x00\x00' * 4 * 4, b'\xff\x00\xff' * 4 * 4, b'\x00\xff\x00' * 4 * 4, ] tex = ctx.texture_cube((4, 4), 3, b''.join(faces)) assert tex.read(0) == faces[0] assert tex.read(1) == faces[1] assert tex.read(2) == faces[2] assert tex.read(3) == faces[3] assert tex.read(4) == faces[4] assert tex.read(5) == faces[5] tex.write(0, b'\xff\xff\xff' * 4 * 4) assert tex.read(0) == b'\xff\xff\xff' * 4 * 4 tex.write(2, b'\xff\xff\xff' * 4 * 4) assert tex.read(2) == b'\xff\xff\xff' * 4 * 4 tex.write(5, b'\xff\xff\xff' * 4 * 4) assert tex.read(5) == b'\xff\xff\xff' * 4 * 4 def test_2(ctx): tex = ctx.texture_cube((4, 4), 3) with pytest.raises(Exception): tex.write(0, b'\xff\xff\xff' * 4 * 3) with pytest.raises(Exception): tex.write(0, b'\xff\xff\xff' * 4 * 5) with pytest.raises(Exception): tex.write(-1, b'\xff\xff\xff' * 4 * 4) with pytest.raises(Exception): tex.write(6, b'\xff\xff\xff' * 4 * 4) def test_3(ctx): tex = ctx.texture_cube((4, 4), 3) with pytest.raises(Exception): tex.read(-1) with pytest.raises(Exception): tex.read(6) def test_texture_default_filter(ctx): """Ensure default filter is correct""" # Float types for dtype in ["f1", "f2", "f4"]: texture = ctx.texture_cube((10, 10), 4, dtype=dtype) assert texture.filter == (moderngl.LINEAR, moderngl.LINEAR) for dtype in ["u1", "u2", "u4", "i1", "i2", "i4"]: texture = ctx.texture_cube((10, 10), 4, dtype=dtype) assert texture.filter == (moderngl.NEAREST, moderngl.NEAREST) moderngl-moderngl-773b733/tests/test_texture_external.py000066400000000000000000000021501470420062000235550ustar00rootroot00000000000000 def test_init_from_texture_and_params(ctx): params_tex = dict( size=(5, 10), components=4, samples=0, dtype="f1" ) tex = ctx.texture(params_tex["size"], params_tex["components"]) ext = ctx.external_texture(**{**params_tex, **dict(glo=tex.glo)}) assert ext.size == params_tex["size"] assert ext.width == params_tex["size"][0] assert ext.height == params_tex["size"][1] assert ext.components == params_tex["components"] assert ext.glo == tex.glo assert ext.dtype == params_tex["dtype"] assert ext.samples == params_tex["samples"] assert ext.repeat_x is True assert ext.repeat_y is True assert ext.filter == (ctx.LINEAR, ctx.LINEAR) assert ext.swizzle == "RGBA" assert ext.depth is False assert ext.anisotropy == 0.0 assert ext.mglo != tex.mglo assert ext.ctx == ctx assert ext.extra == None if ctx.supports_labels: tex.label = "two objects, one texture" assert tex.label == ext.label # If the current context doesn't support labels, # then labels will fall back to plain Python objects moderngl-moderngl-773b733/tests/test_texture_half_float.py000066400000000000000000000021311470420062000240310ustar00rootroot00000000000000import numpy as np import numpy.testing as npt import moderngl def test_1(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; out vec2 v_text; void main() { v_text = in_vert / 2.0 + 0.5; gl_Position = vec4(in_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 uniform sampler2D Texture; in vec2 v_text; out vec4 f_color; void main() { f_color = texture(Texture, v_text); } ''', ) pixels = np.tile([0.0, 0.5, 1.0], 4 * 4).astype('f2') tex = ctx.texture((4, 4), 3, pixels, dtype='f2') vbo = ctx.buffer(np.array([-1, -1, -1, 1, 1, -1, 1, 1], dtype='f4')) vao = ctx.simple_vertex_array(prog, vbo, 'in_vert') fbo = ctx.simple_framebuffer((4, 4)) fbo.use() fbo.clear() tex.use() vao.render(moderngl.TRIANGLE_STRIP) res = np.frombuffer(fbo.read(dtype='f2'), dtype='f2') npt.assert_almost_equal(res, pixels, decimal=2) moderngl-moderngl-773b733/tests/test_texture_new.py000066400000000000000000000101201470420062000225200ustar00rootroot00000000000000import moderngl import pytest def test_texture_create_1(ctx): ctx.texture((16, 16), 3) def test_texture_create_2(ctx): pixels = b'\x10\x20\x30' * 16 * 16 ctx.texture((16, 16), 3, pixels) def test_texture_create_string(ctx): pixels = 'abc' * 16 * 16 with pytest.raises(Exception): ctx.texture((16, 16), 3, pixels) def test_multisample_texture(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') ctx.texture((16, 16), 3, samples=2) def test_depth_texture(ctx): dt = ctx.depth_texture((16, 16)) assert dt.compare_func == '<=' dt.compare_func = '' assert dt.compare_func == '?' def test_multisample_depth_texture(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') ctx.depth_texture((16, 16), samples=2) def test_texture_invalid_samples(ctx): if ctx.max_samples < 2: pytest.skip('multisampling is not supported') with pytest.raises(moderngl.Error, match='sample'): ctx.texture((16, 16), 3, samples=3) def test_texture_get_swizzle(ctx): tex = ctx.texture((16, 16), 4) assert tex.swizzle == 'RGBA' def test_texture_swizzle_1(ctx): tex = ctx.texture((16, 16), 4) tex.swizzle = 'argb' assert tex.swizzle == 'ARGB' def test_texture_swizzle_2(ctx): tex = ctx.texture((16, 16), 1) tex.swizzle = 'RRRR' assert tex.swizzle == 'RRRR' def test_texture_swizzle_3(ctx): tex = ctx.texture((16, 16), 2) tex.swizzle = '01RG' assert tex.swizzle, '01RG' def test_texture_read(ctx): pixels = b'\x10\x20\x30' * 8 * 8 tex = ctx.texture((8, 8), 3, pixels) assert tex.read(), pixels def test_texture_read_into(ctx): pixels = b'\x10\x20\x30' * 8 * 8 tex = ctx.texture((8, 8), 3, pixels) buf = bytearray(8 * 8 * 3) tex.read_into(buf) assert bytes(buf) == pixels def test_texture_read_into_pbo(ctx): pixels = b'\x10\x20\x30' * 8 * 8 tex = ctx.texture((8, 8), 3, pixels) buf = ctx.buffer(reserve=8 * 8 * 3) tex.read_into(buf) assert buf.read() == pixels def test_texture_write_1(ctx): pixels1 = b'\x00\x00\x00' * 8 * 8 pixels2 = b'\xff\xff\xff' * 8 * 8 tex = ctx.texture((8, 8), 3, pixels1) assert tex.read() == pixels1 tex.write(pixels2) assert tex.read() == pixels2 def test_texture_write_2(ctx): pixels1 = b'\x00\x00\x00' * 8 * 8 pixels2 = b'\xff\xff\xff' * 6 * 6 pixels3 = b'\x10\x20\x30' tex = ctx.texture((8, 8), 3) tex.write(pixels1, viewport=(0, 0, 8, 8)) tex.write(pixels2, viewport=(1, 1, 6, 6)) tex.write(pixels3, viewport=(2, 4, 1, 1)) def pixel(x, y): if x == 2 and y == 4: return b'\x10\x20\x30' if x == 0 or y == 0 or x == 7 or y == 7: return b'\x00\x00\x00' return b'\xff\xff\xff' expectation = b''.join(pixel(x, y) for y in range(8) for x in range(8)) assert tex.read() == expectation def test_texture_alignment_1(ctx): tex = ctx.texture((3, 3), 3) assert len(tex.read(alignment=1)) == 27 assert len(tex.read(alignment=2)) == 30 assert len(tex.read(alignment=4)) == 36 assert len(tex.read(alignment=8)) == 48 def test_texture_alignment_2(ctx): pixels = b'\x80\x90\xA0\x80\x90\xA0\x80\x90\xA0\x80\x90\xA0' tex = ctx.texture((2, 2), 3, pixels, alignment=1) assert tex.read(alignment=1) == pixels def test_texture_alignment_3(ctx): pixels = b'\x80\x90\xA0\x80\x90\xA0\x00\x00\x80\x90\xA0\x80\x90\xA0\x00\x00' tex = ctx.texture((2, 2), 3, pixels, alignment=4) result = tex.read(alignment=4) assert result[0:6] == b'\x80\x90\xA0\x80\x90\xA0' assert result[8:14] == b'\x80\x90\xA0\x80\x90\xA0' def test_texture_default_filter(ctx): """Ensure default filter is correct""" # Float types for dtype in ["f1", "f2", "f4"]: texture = ctx.texture((10, 10), 4, dtype=dtype) assert texture.filter == (moderngl.LINEAR, moderngl.LINEAR) for dtype in ["u1", "u2", "u4", "i1", "i2", "i4"]: texture = ctx.texture((10, 10), 4, dtype=dtype) assert texture.filter == (moderngl.NEAREST, moderngl.NEAREST) moderngl-moderngl-773b733/tests/test_transform.py000066400000000000000000000474051470420062000222020ustar00rootroot00000000000000""" Test transform feedback. Note that some of the tests are commented out because they currently don't work with mesa/lvvmpipe. They are left here for future reference. """ from array import array import struct import numpy as np import moderngl def test_transform(ctx): program = ctx.program( vertex_shader=''' #version 330 in vec4 vert; out float vert_length; void main() { vert_length = length(vert); } ''', varyings=['vert_length'] ) assert program.geometry_input is None assert program.geometry_output is None assert program.is_transform is True assert 'vert' in program assert 'vert_length' in program def test_vertex_points(ctx): """Transform with points""" print(ctx.error) data = (0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0) buffer = ctx.buffer(array('f', data)) program = ctx.program( vertex_shader=""" #version 330 in vec2 in_pos; out vec2 out_pos; void main() { out_pos = in_pos; } """, varyings=["out_pos"], ) vao = ctx.vertex_array(program, [(buffer, "2f", "in_pos"), ]) assert vao.mode == moderngl.POINTS buffer2 = ctx.buffer(reserve=buffer.size) vao.transform(buffer2, mode=ctx.POINTS) assert data == struct.unpack(f"{len(data)}f", buffer.read()) def test_vertex_lines(ctx): data = 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0 buffer = ctx.buffer(array('f', data)) program = ctx.program( vertex_shader=""" #version 330 in vec2 in_pos; out vec2 out_pos; void main() { out_pos = in_pos * 2.0; } """, varyings=["out_pos"], ) vao = ctx.vertex_array(program, [(buffer, "2f", "in_pos"), ]) buffer2 = ctx.buffer(reserve=buffer.size) vao.transform(buffer2, mode=ctx.LINES) assert tuple(v * 2 for v in data) == struct.unpack(f"{len(data)}f", buffer2.read()) # NOTE: This fails in tests and may be non-standard or require higher gl version # def test_vertex_lines_adjacency(ctx): # if platform.system().lower() in ["darwin"]: # self.skipTest('Transforms with adjacency primitives now working on OSX') # data = ( # 1.0, 1.0, # 2.0, 2.0, # 3.0, 3.0, # 4.0, 4.0, # ) # buffer = ctx.buffer(array('f', data)) # program = ctx.program( # vertex_shader=""" # #version 330 # in vec2 in_pos; # out vec2 out_pos; # void main() { # out_pos = in_pos; # } # """, # varyings=["out_pos"], # ) # vao = ctx.vertex_array(program, [(buffer, "2f", "in_pos"),]) # buffer2 = ctx.buffer(reserve=4 * 4) # vao.transform(buffer2, mode=ctx.LINES_ADJACENCY) # # Start end end line is removed # self.assertEqual(tuple(data[2:6]), struct.unpack(f"4f", buffer2.read())) def test_vertex_line_strip(ctx): data = ( 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, ) buffer = ctx.buffer(array('f', data)) program = ctx.program( vertex_shader=""" #version 330 in vec2 in_pos; out vec2 out_pos; void main() { out_pos = in_pos; } """, varyings=["out_pos"], ) vao = ctx.vertex_array(program, [(buffer, "2f", "in_pos"), ]) buffer2 = ctx.buffer(reserve=4 * 12) vao.transform(buffer2, mode=ctx.LINE_STRIP) expected = (1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0) assert expected == struct.unpack("12f", buffer2.read()) # NOTE: Fails in tests and might be non-standard or require higher gl version # def test_vertex_line_strip_adjacency(ctx): # if platform.system().lower() in ["darwin"]: # self.skipTest('Transforms with adjacency primitives now working on OSX') # data = ( # 1.0, 1.0, # 2.0, 2.0, # 3.0, 3.0, # 4.0, 4.0, # 5.0, 5.0, # ) # buffer = ctx.buffer(array('f', data)) # program = ctx.program( # vertex_shader=""" # #version 330 # in vec2 in_pos; # out vec2 out_pos; # void main() { # out_pos = in_pos; # } # """, # varyings=["out_pos"], # ) # vao = ctx.vertex_array(program, [(buffer, "2f", "in_pos"),]) # buffer2 = ctx.buffer(reserve=4 * 8) # vao.transform(buffer2, mode=ctx.LINE_STRIP_ADJACENCY) # self.assertEqual( # (2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0), # struct.unpack("8f", buffer2.read()) # ) def test_vertex_triangles(ctx): data = ( 1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, ) buffer = ctx.buffer(array('f', data)) program = ctx.program( vertex_shader=""" #version 330 in vec2 in_pos; out vec2 out_pos; void main() { out_pos = in_pos * 2; } """, varyings=["out_pos"], ) vao = ctx.vertex_array(program, [(buffer, "2f", "in_pos"), ]) buffer2 = ctx.buffer(reserve=4 * 12) vao.transform(buffer2, mode=ctx.TRIANGLES) assert tuple(v * 2 for v in data) == struct.unpack("12f", buffer2.read()) # def test_vertex_triangles_adjacency(ctx): # if platform.system().lower() in ["darwin"]: # pytest.skip('Transforms with adjacency primitives now working on OSX') # data = ( # 1.0, 1.0, # outer points # 2.0, 2.0, # 3.0, 3.0, # 4.0, 4.0, # 5.0, 5.0, # 6.0, 6.0, # 7.0, 7.0, # inner triangle # 8.0, 8.0, # 9.0, 9.0, # ) # buffer = ctx.buffer(array('f', data)) # program = ctx.program( # vertex_shader=""" # #version 330 # in vec2 in_pos; # out vec2 out_pos; # void main() { # out_pos = in_pos; # } # """, # varyings=["out_pos"], # ) # vao = ctx.vertex_array(program, [(buffer, "2f", "in_pos"),]) # buffer2 = ctx.buffer(reserve=4 * 6) # vao.transform(buffer2, mode=ctx.TRIANGLES_ADJACENCY) # assert (1.0, 1.0, 3.0, 3.0, 5.0, 5.0) == struct.unpack("6f", buffer2.read()) # def test_vertex_triangle_strip(ctx): # data = ( # 1.0, 1.0, # 2.0, 2.0, # 3.0, 3.0, # 4.0, 4.0, # ) # buffer = ctx.buffer(array('f', data)) # program = ctx.program( # vertex_shader=""" # #version 330 # in vec2 in_pos; # out vec2 out_pos; # void main() { # out_pos = in_pos; # } # """, # varyings=["out_pos"], # ) # vao = ctx.vertex_array(program, [(buffer, "2f", "in_pos"),]) # buffer2 = ctx.buffer(reserve=4 * 12) # vao.transform(buffer2, mode=ctx.TRIANGLE_STRIP) # expected = (1.0, 1.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 2.0, 2.0, 4.0, 4.0), # assert expected == struct.unpack("12f", buffer2.read()) # def test_vertex_triangle_fan(ctx): # vertices = np.array( # [ # 0.0, 0.0, # Initial triangle # 1.0, 0.0, # 1.0, 1.0, # 0.0, 1.0, # second triangle # ], # dtype='f4', # ) # prog = ctx.program(vertex_shader= # """ # #version 330 # in vec2 in_vert; # out vec2 out_vert; # void main(void) { # out_vert = in_vert; # } # """, # varyings=['out_vert'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, '2f', 'in_vert')]) # N = 6 # 6 vertices in end buffer # buffer = ctx.buffer(reserve=N * 4 * 2) # vao.transform(buffer, vertices=4, mode=ctx.TRIANGLE_FAN) # data = struct.unpack('{}f'.format(N * 2), buffer.read()) # expected = ( # 0.0, 0.0, # Initial triangle # 1.0, 0.0, # 1.0, 1.0, # 0.0, 0.0, # second triangle # 1.0, 1.0, # 0.0, 1.0, # ) # assert data == expected # # ------ Geometry shader ------- def test_geometry_points(ctx): data = (1.0, 2.0, 3.0, 4.0, 5.0, 6.0) vertices = np.array(data, dtype='f4') prog = ctx.program( vertex_shader=""" #version 330 in float in_value; void main() { gl_Position = vec4(in_value); } """, geometry_shader=""" #version 330 out float out_value; layout(points) in; layout(points, max_vertices=1) out; void main() { out_value = gl_in[0].gl_Position.x * 2; EmitVertex(); } """, varyings=['out_value'], ) vbo = ctx.buffer(vertices) vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) buffer = ctx.buffer(reserve=vbo.size) vao.transform(buffer, mode=moderngl.POINTS) assert tuple(v * 2 for v in data) == struct.unpack('6f', buffer.read()) def test_geometry_lines(ctx): data = ( 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, ) vertices = np.array(data, dtype='f4') prog = ctx.program( vertex_shader=""" #version 330 in float in_value; void main() { gl_Position = vec4(in_value); } """, geometry_shader=""" #version 330 out float out_value; layout(lines) in; layout(line_strip, max_vertices=2) out; void main() { out_value = gl_in[0].gl_Position.x; EmitVertex(); out_value = gl_in[1].gl_Position.x; EmitVertex(); EndPrimitive(); } """, varyings=['out_value'], ) vbo = ctx.buffer(vertices) vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) buffer = ctx.buffer(reserve=vbo.size) vao.transform(buffer, mode=moderngl.LINES) assert data == struct.unpack('6f', buffer.read()) # def test_geometry_line_loop(ctx): # data = ( # 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, # ) # vertices = np.array(data, dtype='f4') # prog = ctx.program( # vertex_shader= # """ # #version 330 # in float in_value; # void main() { # gl_Position = vec4(in_value); # } # """, # geometry_shader=""" # #version 330 # out float out_value; # layout(lines) in; # layout(line_strip, max_vertices=2) out; # void main() { # out_value = gl_in[0].gl_Position.x; # EmitVertex(); # out_value = gl_in[1].gl_Position.x; # EmitVertex(); # EndPrimitive(); # } # """, # varyings=['out_value'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) # buffer = ctx.buffer(reserve=4 * 12) # vao.transform(buffer, mode=moderngl.LINE_LOOP) # expected = (1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0, 5.0, 6.0, 6.0, 1.0), # assert struct.unpack('12f', buffer.read()) == expected # def test_geometry_line_strip(ctx): # data = ( # 1.0, 2.0, 3.0, 4.0, 5.0 # ) # vertices = np.array(data, dtype='f4') # prog = ctx.program( # vertex_shader= # """ # #version 330 # in float in_value; # void main() { # gl_Position = vec4(in_value); # } # """, # geometry_shader=""" # #version 330 # out float out_value; # layout(lines) in; # layout(line_strip, max_vertices=2) out; # void main() { # out_value = gl_in[0].gl_Position.x; # EmitVertex(); # out_value = gl_in[1].gl_Position.x; # EmitVertex(); # EndPrimitive(); # } # """, # varyings=['out_value'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) # buffer = ctx.buffer(reserve=4 * 8) # vao.transform(buffer, mode=moderngl.LINE_LOOP) # expected = (1.0, 2.0, 2.0, 3.0, 3.0, 4.0, 4.0, 5.0), # assert struct.unpack('8f', buffer.read()) == expected # def test_geometry_lines_adjacency(ctx): # data = ( # 1.0, 2.0, 3.0, 4.0, # ) # vertices = np.array(data, dtype='f4') # prog = ctx.program( # vertex_shader= # """ # #version 330 # in float in_value; # void main() { # gl_Position = vec4(in_value); # } # """, # geometry_shader=""" # #version 330 # out float out_value; # layout(lines_adjacency) in; # layout(line_strip, max_vertices=2) out; # void main() { # out_value = gl_in[1].gl_Position.x; # EmitVertex(); # out_value = gl_in[2].gl_Position.x; # EmitVertex(); # EndPrimitive(); # } # """, # varyings=['out_value'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) # buffer = ctx.buffer(reserve=4 * 2) # vao.transform(buffer, mode=moderngl.LINES_ADJACENCY) # assert struct.unpack('2f', buffer.read()) == (2.0, 3.0) # def test_geometry_line_strip_adjacency(ctx): # data = ( # 1.0, 2.0, 3.0, 4.0, 5.0, # ) # vertices = np.array(data, dtype='f4') # prog = ctx.program( # vertex_shader= # """ # #version 330 # in float in_value; # void main() { # gl_Position = vec4(in_value); # } # """, # geometry_shader=""" # #version 330 # out float out_value; # layout(lines_adjacency) in; # layout(line_strip, max_vertices=2) out; # void main() { # out_value = gl_in[1].gl_Position.x; # EmitVertex(); # out_value = gl_in[2].gl_Position.x; # EmitVertex(); # EndPrimitive(); # } # """, # varyings=['out_value'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) # buffer = ctx.buffer(reserve=4 * 4) # vao.transform(buffer, mode=moderngl.LINE_STRIP_ADJACENCY) # assert struct.unpack('4f', buffer.read()) == (2.0, 3.0, 3.0, 4.0) def test_geometry_triangles(ctx): data = ( 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, ) vertices = np.array(data, dtype='f4') prog = ctx.program( vertex_shader=""" #version 330 in float in_value; void main() { gl_Position = vec4(in_value); } """, geometry_shader=""" #version 330 out float out_value; layout(triangles) in; layout(triangle_strip, max_vertices=3) out; void main() { out_value = gl_in[0].gl_Position.x; EmitVertex(); out_value = gl_in[1].gl_Position.x; EmitVertex(); out_value = gl_in[2].gl_Position.x; EmitVertex(); EndPrimitive(); } """, varyings=['out_value'], ) vbo = ctx.buffer(vertices) vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) buffer = ctx.buffer(reserve=vbo.size) vao.transform(buffer, mode=moderngl.TRIANGLES) assert struct.unpack('6f', buffer.read()) == data # def test_geometry_triangle_strip(ctx): # data = ( # 1.0, 2.0, 3.0, 4.0, # ) # vertices = np.array(data, dtype='f4') # prog = ctx.program( # vertex_shader= # """ # #version 330 # in float in_value; # void main() { # gl_Position = vec4(in_value); # } # """, # geometry_shader=""" # #version 330 # out float out_value; # layout(triangles) in; # layout(triangle_strip, max_vertices=3) out; # void main() { # out_value = gl_in[0].gl_Position.x; # EmitVertex(); # out_value = gl_in[1].gl_Position.x; # EmitVertex(); # out_value = gl_in[2].gl_Position.x; # EmitVertex(); # EndPrimitive(); # } # """, # varyings=['out_value'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) # buffer = ctx.buffer(reserve=4 * 6) # vao.transform(buffer, mode=moderngl.TRIANGLE_STRIP) # expected = (1.0, 2.0, 3.0, 3.0, 2.0, 4.0) # assert struct.unpack('6f', buffer.read()) == expected # def test_geometry_triangle_fan(ctx): # data = ( # 0.0, 1.0, 2.0, 3.0, # ) # vertices = np.array(data, dtype='f4') # prog = ctx.program( # vertex_shader= # """ # #version 330 # in float in_value; # void main() { # gl_Position = vec4(in_value); # } # """, # geometry_shader=""" # #version 330 # out float out_value; # layout(triangles) in; # layout(triangle_strip, max_vertices=3) out; # void main() { # out_value = gl_in[0].gl_Position.x; # EmitVertex(); # out_value = gl_in[1].gl_Position.x; # EmitVertex(); # out_value = gl_in[2].gl_Position.x; # EmitVertex(); # EndPrimitive(); # } # """, # varyings=['out_value'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) # buffer = ctx.buffer(reserve=4 * 6) # vao.transform(buffer, mode=moderngl.TRIANGLE_FAN) # expected = (0.0, 1.0, 2.0, 0.0, 2.0, 3.0) # assert struct.unpack('6f', buffer.read()) == expected # def test_geometry_triangles_adjacency(ctx): # data = ( # 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, # ) # vertices = np.array(data, dtype='f4') # prog = ctx.program( # vertex_shader= # """ # #version 330 # in float in_value; # void main() { # gl_Position = vec4(in_value); # } # """, # geometry_shader=""" # #version 330 # out float out_value; # layout(triangles_adjacency) in; # layout(triangle_strip, max_vertices=3) out; # void main() { # out_value = gl_in[0].gl_Position.x; # EmitVertex(); # out_value = gl_in[2].gl_Position.x; # EmitVertex(); # out_value = gl_in[4].gl_Position.x; # EmitVertex(); # EndPrimitive(); # } # """, # varyings=['out_value'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) # buffer = ctx.buffer(reserve=4 * 3) # vao.transform(buffer, mode=moderngl.TRIANGLES_ADJACENCY) # assert struct.unpack('3f', buffer.read()) == (1.0, 3.0, 5.0) # def test_geometry_triangle_strip_adjacency(ctx): # data = ( # 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0, # ) # vertices = np.array(data, dtype='f4') # prog = ctx.program( # vertex_shader= # """ # #version 330 # in float in_value; # void main() { # gl_Position = vec4(in_value); # } # """, # geometry_shader=""" # #version 330 # out float out_value; # layout(triangles_adjacency) in; # layout(triangle_strip, max_vertices=3) out; # void main() { # out_value = gl_in[0].gl_Position.x; # EmitVertex(); # out_value = gl_in[2].gl_Position.x; # EmitVertex(); # out_value = gl_in[4].gl_Position.x; # EmitVertex(); # EndPrimitive(); # } # """, # varyings=['out_value'], # ) # vbo = ctx.buffer(vertices) # vao = ctx.vertex_array(prog, [(vbo, 'f', 'in_value')]) # buffer = ctx.buffer(reserve=4 * 6) # vao.transform(buffer, mode=moderngl.TRIANGLE_STRIP_ADJACENCY) # expected = (1.0, 3.0, 5.0, 5.0, 3.0, 7.0) # assert struct.unpack('6f', buffer.read()) == expected moderngl-moderngl-773b733/tests/test_uniform.py000066400000000000000000000032371470420062000216410ustar00rootroot00000000000000import moderngl def test_1(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; out vec2 v_vert; uniform mat2 Mvp; uniform vec2 Position; uniform float Scale; void main() { v_vert = Position + in_vert * Scale; gl_Position = vec4(Mvp * v_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 uniform bool UseTexture; uniform sampler2D Texture; uniform vec3 Color; uniform float Alpha; in vec2 v_vert; out vec4 f_color; void main() { if (UseTexture) { f_color = texture(Texture, v_vert); f_color.rgb *= Color; f_color.a *= Alpha; } else { f_color = vec4(Color, Alpha); } } ''', ) assert 'in_vert' in prog assert 'Position' in prog assert 'Scale' in prog assert 'Mvp' in prog assert 'UseTexture' in prog assert 'Texture' in prog assert 'Color' in prog assert 'Alpha' in prog assert isinstance(prog['in_vert'], moderngl.Attribute) assert isinstance(prog['Position'], moderngl.Uniform) assert isinstance(prog['Scale'], moderngl.Uniform) assert isinstance(prog['Mvp'], moderngl.Uniform) assert isinstance(prog['UseTexture'], moderngl.Uniform) assert isinstance(prog['Texture'], moderngl.Uniform) assert isinstance(prog['Color'], moderngl.Uniform) assert isinstance(prog['Alpha'], moderngl.Uniform) moderngl-moderngl-773b733/tests/test_uniform_block.py000066400000000000000000000052761470420062000230200ustar00rootroot00000000000000import struct import pytest @pytest.fixture(scope='module', autouse=True) def prog(ctx_static): return ctx_static.program( vertex_shader=''' #version 330 in vec2 in_v; out vec2 out_v; uniform Block1 { float x; }; uniform Block2 { float y; }; uniform Block3 { float z; }; void main() { out_v = in_v * z + vec2(x, y); } ''', varyings=['out_v'] ) def test_1(ctx, prog): buf_v = ctx.buffer(struct.pack('2f', 100.0, 1000.0)) buf_u1 = ctx.buffer(struct.pack('f', 9.5)) buf_u2 = ctx.buffer(struct.pack('f', 4.0)) buf_u3 = ctx.buffer(struct.pack('f', 3.0)) buf_u4 = ctx.buffer(struct.pack('f', 0.0)) buf_r = ctx.buffer(reserve=buf_v.size) vao = ctx.vertex_array(prog, [ (buf_v, '2f', 'in_v'), ]) assert 'Block1' in prog assert 'Block2' in prog assert 'Block3' in prog assert 'x' not in prog assert 'y' not in prog assert 'z' not in prog prog['Block1'].binding = 2 prog['Block2'].binding = 4 prog['Block3'].binding = 1 buf_u1.bind_to_uniform_block(2) buf_u2.bind_to_uniform_block(4) buf_u4.bind_to_uniform_block(1) vao.transform(buf_r) a, b = struct.unpack('2f', buf_r.read()) assert pytest.approx(a) == 9.5 assert pytest.approx(b) == 4.0 buf_u3.bind_to_uniform_block(1) vao.transform(buf_r) a, b = struct.unpack('2f', buf_r.read()) assert pytest.approx(a) == 309.5 assert pytest.approx(b) == 3004.0 def test_2(ctx, prog): min_offset = ctx.info['GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT'] u3_len = (min_offset // 4) + 1 u3_data = list(range(u3_len)) buf_v = ctx.buffer(struct.pack('2f', 100.0, 1000.0)) buf_u1 = ctx.buffer(struct.pack('f', 9.5)) buf_u2 = ctx.buffer(struct.pack('f', 4.0)) buf_u3 = ctx.buffer(struct.pack('{:d}f'.format(u3_len), *u3_data)) buf_r = ctx.buffer(reserve=buf_v.size) vao = ctx.vertex_array(prog, [ (buf_v, '2f', 'in_v'), ]) prog['Block1'].binding = 2 prog['Block2'].binding = 4 prog['Block3'].binding = 1 buf_u1.bind_to_uniform_block(2) buf_u2.bind_to_uniform_block(4) buf_u3.bind_to_uniform_block(1, offset=min_offset) vao.transform(buf_r) a, b = struct.unpack('2f', buf_r.read()) assert pytest.approx(a) == u3_data[-1] * 100 + 9.5 assert pytest.approx(b) == u3_data[-1] * 1000 + 4.0 buf_u3.bind_to_uniform_block(1, offset=0) vao.transform(buf_r) a, b = struct.unpack('2f', buf_r.read()) assert pytest.approx(a) == 9.5 assert pytest.approx(b) == 4.0 moderngl-moderngl-773b733/tests/test_uniform_block_new.py000066400000000000000000000034451470420062000236650ustar00rootroot00000000000000import moderngl def test_1(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec2 in_vert; out vec2 v_vert; uniform mat2 Mvp; uniform VertexShaderUniforms { vec2 Position; float Scale; }; void main() { v_vert = Position + in_vert * Scale; gl_Position = vec4(Mvp * v_vert, 0.0, 1.0); } ''', fragment_shader=''' #version 330 uniform bool UseTexture; uniform sampler2D Texture; uniform FragmentShaderUniforms { vec3 Color; float Alpha; }; in vec2 v_vert; out vec4 f_color; void main() { if (UseTexture) { f_color = texture(Texture, v_vert); f_color.rgb *= Color; f_color.a *= Alpha; } else { f_color = vec4(Color, Alpha); } } ''', ) assert 'in_vert' in prog assert 'Position' not in prog assert 'Scale' not in prog assert 'Mvp' in prog assert 'UseTexture' in prog assert 'Texture' in prog assert 'Color' not in prog assert 'Alpha' not in prog assert 'VertexShaderUniforms' in prog assert 'FragmentShaderUniforms' in prog assert isinstance(prog['in_vert'], moderngl.Attribute) assert isinstance(prog['Mvp'], moderngl.Uniform) assert isinstance(prog['UseTexture'], moderngl.Uniform) assert isinstance(prog['Texture'], moderngl.Uniform) assert isinstance(prog['VertexShaderUniforms'], moderngl.UniformBlock) assert isinstance(prog['FragmentShaderUniforms'], moderngl.UniformBlock) moderngl-moderngl-773b733/tests/test_uniforms.py000066400000000000000000000135431470420062000220250ustar00rootroot00000000000000from array import array import pytest import struct @pytest.fixture(scope='module', autouse=True) def res(ctx_static): """Global buffer we transform results into""" return ctx_static.buffer(reserve=1024) def test_float_uniform(ctx, res): prog = ctx.program( vertex_shader=''' #version 330 uniform float Uniform; in float v_in; out float v_out; void main() { v_out = Uniform * v_in; } ''', varyings=['v_out'] ) vbo = ctx.buffer(struct.pack('f', 1.0)) vao = ctx.simple_vertex_array(prog, vbo, 'v_in') prog['Uniform'].value = 7.0 vao.transform(res) val = struct.unpack('f', res.read(4))[0] assert pytest.approx(val) == 7.0 def test_int_uniform(ctx, res): prog = ctx.program( vertex_shader=''' #version 330 uniform int Uniform; in int v_in; out int v_out; void main() { v_out = Uniform * v_in; } ''', varyings=['v_out'] ) vbo = ctx.buffer(struct.pack('i', 1)) vao = ctx.simple_vertex_array(prog, vbo, 'v_in') prog['Uniform'].value = -2 vao.transform(res) val = struct.unpack('i', res.read(4))[0] assert pytest.approx(val) == -2 def test_vec_uniform(ctx, res): prog = ctx.program( vertex_shader=''' #version 330 uniform vec3 Uniform; in vec3 v_in; out vec3 v_out; void main() { v_out = Uniform * v_in; } ''', varyings=['v_out'] ) vbo = ctx.buffer(struct.pack('3f', 1.0, 1.0, 1.0)) vao = ctx.simple_vertex_array(prog, vbo, 'v_in') prog['Uniform'].value = (0.5, 1.0, 1.5) vao.transform(res) x, y, z = struct.unpack('3f', res.read(12)) assert pytest.approx(x) == 0.5 assert pytest.approx(y) == 1.0 assert pytest.approx(z) == 1.5 def test_mat_uniform(ctx, res): prog = ctx.program( vertex_shader=''' #version 330 uniform mat2x3 Uniform; in float v_in; out mat2x3 v_out; void main() { v_out = Uniform * v_in; } ''', varyings=['v_out'] ) vbo = ctx.buffer(struct.pack('f', 1.0)) vao = ctx.simple_vertex_array(prog, vbo, 'v_in') prog['Uniform'].value = (0.0, 1.0, 2.0, 3.0, 4.0, 5.0) vao.transform(res) m = struct.unpack('6f', res.read(24)) assert pytest.approx(m[0]) == 0.0 assert pytest.approx(m[1]) == 1.0 assert pytest.approx(m[2]) == 2.0 assert pytest.approx(m[3]) == 3.0 assert pytest.approx(m[4]) == 4.0 assert pytest.approx(m[5]) == 5.0 def test_sampler_2d(ctx): """RGBA8 2d sampler""" prog = ctx.program( vertex_shader=""" #version 330 uniform sampler2D tex; out float color; void main() { color = texelFetch(tex, ivec2(gl_VertexID, 0), 0).r; } """, varyings=['color'], ) tex = ctx.texture((4, 1), 1, data=array('B', [127, 0, 255, 64]), dtype='f1') buff = ctx.buffer(reserve=4 * 4) vao = ctx.vertex_array(prog, []) tex.use(0) vao.transform(buff, vertices=4) data = struct.unpack('4f', buff.read()) assert pytest.approx(data[0], abs=1.0e-3) == 0.498 assert pytest.approx(data[1]) == 0.0 assert pytest.approx(data[2]) == 1.0 assert pytest.approx(data[3], abs=1.0e-3) == 0.25 def test_sampler_2d_int(ctx): prog = ctx.program( vertex_shader=""" #version 330 uniform isampler2D tex; out int color; void main() { color = texelFetch(tex, ivec2(gl_VertexID, 0), 0).r; } """, varyings=['color'], ) tex = ctx.texture((4, 1), 1, data=array('i', [-1, 0, 1000, 4353454]), dtype='i4') buff = ctx.buffer(reserve=4 * 4) vao = ctx.vertex_array(prog, []) tex.use(0) vao.transform(buff, vertices=4) data = struct.unpack('4i', buff.read()) assert data[0] == -1 assert data[1] == 0 assert data[2] == 1000 assert data[3] == 4353454 def test_sampler_2d_uint(ctx): prog = ctx.program( vertex_shader=""" #version 330 uniform usampler2D tex; out uint color; void main() { color = texelFetch(tex, ivec2(gl_VertexID, 0), 0).r; } """, varyings=['color'], ) tex = ctx.texture((4, 1), 1, data=array('I', [0, 500, 1000, 4353454]), dtype='u4') buff = ctx.buffer(reserve=4 * 4) vao = ctx.vertex_array(prog, []) tex.use(0) vao.transform(buff, vertices=4) data = struct.unpack('4I', buff.read()) assert data[0] == 0 assert data[1] == 500 assert data[2] == 1000 assert data[3] == 4353454 def test_sampler_2d_array(ctx): """RGBA8 2d array sampler. Read two pixels from two different layers""" prog = ctx.program( vertex_shader=""" #version 330 uniform sampler2DArray tex; out float color; void main() { color = texelFetch(tex, ivec3(gl_VertexID % 2, 0, gl_VertexID / 2), 0).r; } """, varyings=['color'], ) tex = ctx.texture_array((2, 1, 2), 1, data=array('B', [127, 0, 255, 64]), dtype='f1') buff = ctx.buffer(reserve=4 * 4) vao = ctx.vertex_array(prog, []) tex.use(0) vao.transform(buff, vertices=4) data = struct.unpack('4f', buff.read()) assert pytest.approx(data[0], abs=1.0e-3) == 0.498 assert pytest.approx(data[1]) == 0.0 assert pytest.approx(data[2]) == 1.0 assert pytest.approx(data[3], abs=1.0e-3) == 0.25 def test_sampler_1d(ctx): prog = ctx.program( vertex_shader=""" #version 330 uniform sampler1D tex; out vec4 color; void main() { color = texelFetch(tex, 0, 0); } """, varyings=["color"], ) assert "tex" in prog moderngl-moderngl-773b733/tests/test_unnamed_01.py000066400000000000000000000022421470420062000221040ustar00rootroot00000000000000import struct import pytest import moderngl def test_1(ctx): prog = ctx.program( vertex_shader=''' #version 330 in mat2 in_m; in vec2 in_v; out vec2 out_v; uniform float mult; void main() { out_v = in_m * in_v * mult; } ''', varyings=['out_v'] ) buf_m = ctx.buffer(struct.pack('4f', 1, 1, 1, 2)) buf_v = ctx.buffer(struct.pack('2f', 4, 7)) res = ctx.buffer(reserve=buf_v.size) vao = ctx.vertex_array(prog, [ (buf_m, '4f', 'in_m'), (buf_v, '2f', 'in_v'), ]) prog['mult'].value = 0.0 vao.transform(res, moderngl.POINTS) x, y = struct.unpack('2f', res.read()) assert pytest.approx(x) == 0.0 assert pytest.approx(y) == 0.0 prog['mult'].value = 1.0 vao.transform(res, moderngl.POINTS) x, y = struct.unpack('2f', res.read()) assert pytest.approx(x) == 11.0 assert pytest.approx(y) == 18.0 prog['mult'].value = 2.0 vao.transform(res, moderngl.POINTS) x, y = struct.unpack('2f', res.read()) assert pytest.approx(x) == 22.0 assert pytest.approx(y) == 36.0 moderngl-moderngl-773b733/tests/test_unnamed_02.py000066400000000000000000000005671470420062000221150ustar00rootroot00000000000000 def test_1(ctx): buf1 = ctx.buffer(data=b'\xAA\x55' * 10) buf2 = ctx.buffer(reserve=buf1.size) buf2.write(b'Hello World!') assert buf1.read(5, offset=1) == b'\x55\xaa\x55\xaa\x55' assert buf2.read(5, offset=6) == b'World' ctx.copy_buffer(buf2, buf1, read_offset=1, write_offset=6, size=5) assert buf2.read(12) == b'Hello \x55\xaa\x55\xaa\x55!' moderngl-moderngl-773b733/tests/test_unnamed_03.py000066400000000000000000000020141470420062000221030ustar00rootroot00000000000000import struct import pytest import moderngl def test_1(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec2 in_v1; in vec2 in_v2; out vec2 out_v; void main() { out_v = in_v1 + in_v2; } ''', varyings=['out_v'] ) buf_v1 = ctx.buffer(struct.pack('8f', 1, 2, 3, 4, 5, 6, 7, 8)) buf_v2 = ctx.buffer(struct.pack('2f', 10, 100)) res = ctx.buffer(reserve=buf_v1.size) vao = ctx.vertex_array(prog, [ (buf_v1, '2f', 'in_v1'), (buf_v2, '2f/i', 'in_v2'), ]) vao.transform(res, moderngl.POINTS) tup = struct.unpack('8f', res.read()) assert pytest.approx(tup[0]) == 11.0 assert pytest.approx(tup[1]) == 102.0 assert pytest.approx(tup[2]) == 13.0 assert pytest.approx(tup[3]) == 104.0 assert pytest.approx(tup[4]) == 15.0 assert pytest.approx(tup[5]) == 106.0 assert pytest.approx(tup[6]) == 17.0 assert pytest.approx(tup[7]) == 108.0 moderngl-moderngl-773b733/tests/test_vao_attribs.py000066400000000000000000000026611470420062000224770ustar00rootroot00000000000000import struct import pytest import moderngl def test_vao_attribs(ctx): program = ctx.program( vertex_shader=''' #version 330 layout(location = 0) in vec4 in_vert; out vec4 out_vert; void main() { out_vert = in_vert; } ''', varyings=['out_vert'] ) vbo = ctx.buffer(struct.pack('12f', 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12)) res = ctx.buffer(reserve=struct.calcsize('8f')) vao = ctx.simple_vertex_array(program, vbo, 'in_vert') vao.transform(res, moderngl.POINTS, 2) for a, b in zip(struct.unpack('8f', res.read()), (1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0)): assert pytest.approx(a) == b vao.bind(0, 'f', vbo, '4f', offset=4, stride=0, divisor=0) vao.transform(res, moderngl.POINTS, 2) for a, b in zip(struct.unpack('8f', res.read()), (2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0)): assert pytest.approx(a) == b vao.bind(0, 'f', vbo, '4f', offset=8, stride=20, divisor=0) vao.transform(res, moderngl.POINTS, 2) for a, b in zip(struct.unpack('8f', res.read()), (3.0, 4.0, 5.0, 6.0, 8.0, 9.0, 10.0, 11.0)): assert pytest.approx(a) == b vao.bind(0, 'f', vbo, '4f', offset=12, stride=0, divisor=1) vao.transform(res, moderngl.POINTS, 2) for a, b in zip(struct.unpack('8f', res.read()), (4.0, 5.0, 6.0, 7.0, 4.0, 5.0, 6.0, 7.0)): assert pytest.approx(a) == b moderngl-moderngl-773b733/tests/test_vertex_array.py000066400000000000000000000150131470420062000226700ustar00rootroot00000000000000from array import array import numpy as np import numpy.testing as npt import moderngl def test_properties(ctx): prog = ctx.program( vertex_shader=""" #version 330 in vec2 pos; in vec2 velocity; out vec2 out_pos; void main() { out_pos = pos + velocity; } """, varyings=["out_pos"], ) buffer = ctx.buffer(array('f', range(16))) vao = ctx.vertex_array(prog, [(buffer, '2f', 'pos')]) assert vao.program == prog assert vao.vertices == 8 assert vao.index_buffer is None assert vao.index_element_size == 4 assert vao.mode == moderngl.POINTS assert vao.instances == 1 assert vao.glo > 0 vao.mode = moderngl.LINES assert vao.mode == moderngl.LINES vao.vertices = 2 assert vao.vertices == 2 vao.instances = 2 assert vao.instances == 2 def test_padding(ctx): prog = ctx.program( vertex_shader=""" #version 330 in vec2 pos; in vec2 velocity; out vec2 out_pos; void main() { out_pos = pos + velocity; } """, varyings=["out_pos"], ) buffer = ctx.buffer(array('f', range(16))) ctx.vertex_array(prog, [(buffer, '2f 2x4', 'pos')]) ctx.vertex_array(prog, [(buffer, '2f 2f', 'pos', 'velocity')]) def test_empty(ctx): prog = ctx.program( vertex_shader=""" #version 330 in vec2 pos; in vec2 velocity; out vec2 out_pos; void main() { out_pos = pos + velocity; } """, ) ctx.vertex_array(prog, []) # def test_optional(ctx): # prog = ctx.program( # vertex_shader=""" # #version 330 # in vec2 pos; # in vec2 velocity; # in vec4 color; # out vec2 out_pos; # void main() { # out_pos = pos + velocity; # } # """, # ) # buffer = ctx.buffer(array('f', range(16))) # ctx.vertex_array(prog, [(buffer, '2f 2f 4f', 'pos', 'velocity', 'color?')]) def test_1(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec4 in_vert; out vec4 out_vert; void main() { out_vert = in_vert; } ''', varyings=['out_vert'] ) vbo1 = ctx.buffer(np.array([4.0, 2.0, 7.5, 1.8], dtype='f4').tobytes()) vbo2 = ctx.buffer(reserve=vbo1.size) vao = ctx.simple_vertex_array(prog, vbo1, 'in_vert') assert vao.mode == moderngl.POINTS vao.transform(vbo2, moderngl.POINTS) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [4.0, 2.0, 7.5, 1.8]) def test_2(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec4 in_vert; out vec4 out_vert; void main() { out_vert = in_vert; } ''', varyings=['out_vert'] ) vbo1 = ctx.buffer(np.array([4.0, 2.0, 7.5, 1.8], dtype='f4').tobytes()) vbo2 = ctx.buffer(reserve=16) vao = ctx.vertex_array(prog, [(vbo1, '4f', 'in_vert')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [4.0, 2.0, 7.5, 1.8]) vao = ctx.vertex_array(prog, [(vbo1, '3f', 'in_vert')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [4.0, 2.0, 7.5, 1.0]) vao = ctx.vertex_array(prog, [(vbo1, '2f', 'in_vert')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [4.0, 2.0, 0.0, 1.0]) vao = ctx.vertex_array(prog, [(vbo1, '1f', 'in_vert')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [4.0, 0.0, 0.0, 1.0]) def test_3(ctx): prog = ctx.program( vertex_shader=''' #version 330 in mat4 in_mat; out mat4 out_mat; void main() { out_mat = in_mat; } ''', varyings=['out_mat'] ) vbo1 = ctx.buffer(np.arange(1, 17, dtype='f4').tobytes()) vbo2 = ctx.buffer(reserve=64) vao = ctx.vertex_array(prog, [(vbo1, '16f', 'in_mat')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, ]) vao = ctx.vertex_array(prog, [(vbo1, '12f', 'in_mat')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [ 1, 2, 3, 1, 4, 5, 6, 1, 7, 8, 9, 1, 10, 11, 12, 1, ]) vao = ctx.vertex_array(prog, [(vbo1, '8f', 'in_mat')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [ 1, 2, 0, 1, 3, 4, 0, 1, 5, 6, 0, 1, 7, 8, 0, 1, ]) vao = ctx.vertex_array(prog, [(vbo1, '4f', 'in_mat')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [ 1, 0, 0, 1, 2, 0, 0, 1, 3, 0, 0, 1, 4, 0, 0, 1, ]) def test_4(ctx): prog = ctx.program( vertex_shader=''' #version 330 in mat2 in_mat; out mat2 out_mat; void main() { out_mat = in_mat; } ''', varyings=['out_mat'] ) vbo1 = ctx.buffer(np.array([4.0, 2.0, 7.5, 1.8], dtype='f4').tobytes()) vbo2 = ctx.buffer(reserve=16) vao = ctx.vertex_array(prog, [(vbo1, '4f', 'in_mat')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [4.0, 2.0, 7.5, 1.8]) vao = ctx.vertex_array(prog, [(vbo1, '2f', 'in_mat')]) vao.transform(vbo2, moderngl.POINTS, vertices=1) res = np.frombuffer(vbo2.read(), dtype='f4') npt.assert_almost_equal(res, [4.0, 0.0, 2.0, 0.0]) def test_vao_labels(ctx): prog = ctx.program( vertex_shader=""" #version 330 in vec2 pos; in vec2 velocity; out vec2 out_pos; void main() { out_pos = pos + velocity; } """, ) vao = ctx.vertex_array(prog, []) vao.label = "My VAO" assert vao.label == "My VAO" moderngl-moderngl-773b733/tests/test_vertex_array_index.py000066400000000000000000000046601470420062000240650ustar00rootroot00000000000000import moderngl import pytest import numpy as np def test_1(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec4 in_vert; out vec4 out_vert; void main() { out_vert = in_vert; } ''', varyings=['out_vert'] ) vertices = [ 4.0, 2.0, 7.5, 1.8, 3.0, 2.8, 6.0, 10.0 ] count = 10 indices = [0, 1] * 10 # UNSIGNED_INT index vbo1 = ctx.buffer(np.array(vertices, dtype='f4').tobytes()) vbo2 = ctx.buffer(reserve=vbo1.size * count) index = ctx.buffer(np.array(indices, dtype='u4').tobytes()) vao = ctx.simple_vertex_array(prog, vbo1, 'in_vert', index_buffer=index, index_element_size=4) vao.transform(vbo2, moderngl.POINTS) res = np.frombuffer(vbo2.read(), dtype='f4') np.testing.assert_almost_equal(res, vertices * count) # UNSIGNED_SHORT index vbo1 = ctx.buffer(np.array(vertices, dtype='f4').tobytes()) vbo2 = ctx.buffer(reserve=vbo1.size * count) index = ctx.buffer(np.array(indices, dtype='u2').tobytes()) vao = ctx.simple_vertex_array(prog, vbo1, 'in_vert', index_buffer=index, index_element_size=2) vao.transform(vbo2, moderngl.POINTS) res = np.frombuffer(vbo2.read(), dtype='f4') np.testing.assert_almost_equal(res, vertices * count) # UNSIGNED_BYTE index vbo1 = ctx.buffer(np.array(vertices, dtype='f4').tobytes()) vbo2 = ctx.buffer(reserve=vbo1.size * count) index = ctx.buffer(np.array(indices, dtype='u1').tobytes()) vao = ctx.simple_vertex_array(prog, vbo1, 'in_vert', index_buffer=index, index_element_size=1) vao.transform(vbo2, moderngl.POINTS) res = np.frombuffer(vbo2.read(), dtype='f4') np.testing.assert_almost_equal(res, vertices * count) def test_2(ctx): prog = ctx.program( vertex_shader=''' #version 330 in vec4 in_vert; out vec4 out_vert; void main() { out_vert = in_vert; } ''', varyings=['out_vert'] ) vertices = [ 4.0, 2.0, 7.5, 1.8, 3.0, 2.8, 6.0, 10.0 ] indices = [0, 1, 0, 1, 0, 1, 0, 1, 0] vbo1 = ctx.buffer(np.array(vertices, dtype='f4').tobytes()) index_u4 = ctx.buffer(np.array(indices, dtype='u4').tobytes()) with pytest.raises(moderngl.Error): ctx.simple_vertex_array(prog, vbo1, 'in_vert', index_buffer=index_u4, index_element_size=0) moderngl-moderngl-773b733/tests/test_vertex_attribute_double_types.py000066400000000000000000000101341470420062000263320ustar00rootroot00000000000000import struct import pytest import moderngl v_types = [ { 'version': 410, 'type': 'double', 'input': [1.0], 'output': [2.0], }, { 'version': 410, 'type': 'dvec2', 'input': [1.0, 1.0], 'output': [2.0, 2.0], }, { 'version': 410, 'type': 'dvec3', 'input': [1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dvec4', 'input': [1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat2', 'input': [1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat2x3', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat2x4', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat3x2', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat3', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat3x4', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat4x2', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat4x3', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 410, 'type': 'dmat4', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, ] @pytest.mark.parametrize('v_type', v_types) def test_simple(ctx, v_type): vert_src = ''' #version %(version)s in %(type)s v_in; out %(type)s v_out; void main() { v_out = v_in + v_in; } ''' if ctx.version_code < v_type['version']: pytest.skip('skipping version %s' % v_type['version']) prog = ctx.program(vertex_shader=vert_src % v_type, varyings=['v_out']) if prog.get('v_in', None) is None: pytest.skip('skipping %s' % v_type['type']) fmt = moderngl.detect_format(prog, ['v_in'], mode='struct') vbo1 = ctx.buffer(struct.pack(fmt, *v_type['input'])) vbo2 = ctx.buffer(b'\xAA' * struct.calcsize(fmt)) vao = ctx.simple_vertex_array(prog, vbo1, 'v_in') vao.transform(vbo2, moderngl.POINTS, 1) for a, b in zip(struct.unpack(fmt, vbo2.read()), v_type['output']): assert pytest.approx(a) == b @pytest.mark.parametrize('v_type', v_types) def test_arrays(ctx, v_type): vert_src = ''' #version %(version)s in %(type)s v_in[2]; out %(type)s v_out[2]; void main() { v_out[0] = v_in[0] + v_in[0]; v_out[1] = v_in[1] + v_in[1]; } ''' if ctx.version_code < v_type['version']: pytest.skip('skipping version %s' % v_type['version']) prog = ctx.program(vertex_shader=vert_src % v_type, varyings=['v_out']) if prog.get('v_in', None) is None: pytest.skip('skipping %s' % v_type['type']) fmt = moderngl.detect_format(prog, ['v_in'], mode='struct') vbo1 = ctx.buffer(struct.pack(fmt, *(v_type['input'] * 2))) vbo2 = ctx.buffer(b'\xAA' * struct.calcsize(fmt)) vao = ctx.vertex_array(prog, vbo1, 'v_in') vao.transform(vbo2, moderngl.POINTS, 1) for a, b in zip(struct.unpack(fmt, vbo2.read()), v_type['output'] * 2): assert pytest.approx(a) == b moderngl-moderngl-773b733/tests/test_vertex_attribute_types.py000066400000000000000000000120061470420062000250000ustar00rootroot00000000000000import struct import pytest import moderngl v_types = [ { 'version': 330, 'type': 'int', 'input': [-1], 'output': [-2], }, { 'version': 330, 'type': 'ivec2', 'input': [-1, -1], 'output': [-2, -2], }, { 'version': 330, 'type': 'ivec3', 'input': [-1, -1, -1], 'output': [-2, -2, -2], }, { 'version': 330, 'type': 'ivec4', 'input': [-1, -1, -1, -1], 'output': [-2, -2, -2, -2], }, { 'version': 330, 'type': 'uint', 'input': [1], 'output': [2], }, { 'version': 330, 'type': 'uvec2', 'input': [1, 1], 'output': [2, 2], }, { 'version': 330, 'type': 'uvec3', 'input': [1, 1, 1], 'output': [2, 2, 2], }, { 'version': 330, 'type': 'uvec4', 'input': [1, 1, 1, 1], 'output': [2, 2, 2, 2], }, { 'version': 330, 'type': 'float', 'input': [1.0], 'output': [2.0], }, { 'version': 330, 'type': 'vec2', 'input': [1.0, 1.0], 'output': [2.0, 2.0], }, { 'version': 330, 'type': 'vec3', 'input': [1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'vec4', 'input': [1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat2', 'input': [1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat2x3', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat2x4', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat3x2', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat3', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat3x4', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat4x2', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat4x3', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, { 'version': 330, 'type': 'mat4', 'input': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], 'output': [2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0], }, ] @pytest.mark.parametrize('v_type', v_types) def test_simple(ctx, v_type): vert_src = ''' #version %(version)s in %(type)s v_in; out %(type)s v_out; void main() { v_out = v_in + v_in; } ''' if ctx.version_code < v_type['version']: pytest.skip('skipping version %s' % v_type['version']) prog = ctx.program(vertex_shader=vert_src % v_type, varyings=['v_out']) if prog.get('v_in', None) is None: pytest.skip('skipping %s' % v_type['type']) fmt = moderngl.detect_format(prog, ['v_in'], mode='struct') vbo1 = ctx.buffer(struct.pack(fmt, *v_type['input'])) vbo2 = ctx.buffer(b'\xAA' * struct.calcsize(fmt)) vao = ctx.simple_vertex_array(prog, vbo1, 'v_in') vao.transform(vbo2, moderngl.POINTS, 1) for a, b in zip(struct.unpack(fmt, vbo2.read()), v_type['output']): assert pytest.approx(a) == b @pytest.mark.parametrize('v_type', v_types) def test_arrays(ctx, v_type): vert_src = ''' #version %(version)s in %(type)s v_in[2]; out %(type)s v_out[2]; void main() { v_out[0] = v_in[0] + v_in[0]; v_out[1] = v_in[1] + v_in[1]; } ''' if ctx.version_code < v_type['version']: pytest.skip('skipping version %s' % v_type['version']) prog = ctx.program(vertex_shader=vert_src % v_type, varyings=['v_out']) if prog.get('v_in', None) is None: pytest.skip('skipping %s' % v_type['type']) fmt = moderngl.detect_format(prog, ['v_in'], mode='struct') vbo1 = ctx.buffer(struct.pack(fmt, *(v_type['input'] * 2))) vbo2 = ctx.buffer(b'\xAA' * struct.calcsize(fmt)) vao = ctx.simple_vertex_array(prog, vbo1, 'v_in') vao.transform(vbo2, moderngl.POINTS, 1) for a, b in zip(struct.unpack(fmt, vbo2.read()), v_type['output'] * 2): assert pytest.approx(a) == b moderngl-moderngl-773b733/tests/test_viewports.py000066400000000000000000000005001470420062000222120ustar00rootroot00000000000000 def test_viewport(ctx): fbo = ctx.simple_framebuffer((10, 10)) fbo.use() assert ctx.viewport == (0, 0, 10, 10) assert fbo.viewport == (0, 0, 10, 10) ctx.viewport = 2, 3, 7, 8 assert fbo.viewport == (2, 3, 7, 8) assert ctx.viewport == (2, 3, 7, 8) assert ctx.fbo.viewport == (2, 3, 7, 8)