Gauche-gl-0.5.1/0000755000076400007640000000000011617171625012362 5ustar shiroshiroGauche-gl-0.5.1/cg/0000755000076400007640000000000011617171625012753 5ustar shiroshiroGauche-gl-0.5.1/cg/gl/0000755000076400007640000000000011533026402013342 5ustar shiroshiroGauche-gl-0.5.1/cg/gl/cg.scm0000644000076400007640000000142611533026402014442 0ustar shiroshiro;;; ;;; cg.scm - Gauche CG binding ;;; ;;; Copyright(C) 2005 by Issac Trotts (ijtrotts@ucdavis.edu) ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: cg.scm,v 1.1 2005-06-14 21:53:09 shirok Exp $ ;;; (define-module gl.cg (use gl) (use gl.math3d) (export-all) ) (select-module gl.cg) (dynamic-load "libgauche-gl-cg") (provide "gl/cg") Gauche-gl-0.5.1/cg/gauche-cg.c0000644000076400007640000000333511533026402014733 0ustar shiroshiro/* * gauche-cg.c - Gauche Cg binding * * Copyright(C) 2005 by Issac Trotts (ijtrotts@ucdavis.edu) * * Permission to use, copy, modify, distribute this software and * accompanying documentation for any purpose is hereby granted, * provided that existing copyright notices are retained in all * copies and that this notice is included verbatim in all * distributions. * This software is provided as is, without express or implied * warranty. In no circumstances the author(s) shall be liable * for any damages arising out of the use of this software. * * $Id: gauche-cg.c,v 1.2 2005-08-02 04:21:48 shirok Exp $ */ #include #include #include #include "gauche-cg.h" CGcontext gauche_cg_context = NULL; SCM_DEFINE_BUILTIN_CLASS(Scm_CGcontextClass, NULL, NULL, NULL, NULL, NULL); SCM_DEFINE_BUILTIN_CLASS(Scm_CGprogramClass, NULL, NULL, NULL, NULL, NULL); SCM_DEFINE_BUILTIN_CLASS(Scm_CGparameterClass, NULL, NULL, NULL, NULL, NULL); /* Error handling */ static void error_callback(void) { CGerror e = cgGetError(); if(e == CG_COMPILER_ERROR) { Scm_Error("%s",cgGetLastListing(gauche_cg_context)); } else { Scm_Error("%s",cgGetErrorString(e)); } } /* Initialization */ extern void Scm_Init_cg_lib(ScmModule *mod); void Scm_Init_libgauche_gl_cg(void) { ScmModule *mod; SCM_INIT_EXTENSION(libgauche_gl_cg); mod = SCM_MODULE(SCM_FIND_MODULE("gl.cg", TRUE)); Scm_InitBuiltinClass(&Scm_CGcontextClass, "", NULL, 0, mod); Scm_InitBuiltinClass(&Scm_CGprogramClass, "", NULL, 0, mod); Scm_InitBuiltinClass(&Scm_CGparameterClass, "", NULL, 0, mod); Scm_Init_cg_lib(mod); cgSetErrorCallback(error_callback); } Gauche-gl-0.5.1/cg/gauche-cg.h0000644000076400007640000000354711533026402014745 0ustar shiroshiro/* * gauche-cg.h - Gauche CG extension * * Copyright(C) 2005 by Issac Trotts (ijtrotts@ucdavis.edu) * * Permission to use, copy, modify, distribute this software and * accompanying documentation for any purpose is hereby granted, * provided that existing copyright notices are retained in all * copies and that this notice is included verbatim in all * distributions. * This software is provided as is, without express or implied * warranty. In no circumstances the author(s) shall be liable * for any damages arising out of the use of this software. * * $Id: gauche-cg.h,v 1.1 2005-06-14 21:53:09 shirok Exp $ */ #ifndef GAUCHE_CG_H #define GAUCHE_CG_H #include #include /* This is the context that was most recently used during a compilation. */ extern CGcontext gauche_cg_context; /* Context */ typedef struct Scm_CGcontextRec { SCM_HEADER; int is_valid; CGcontext context; } Scm_CGcontext; SCM_CLASS_DECL(Scm_CGcontextClass); #define SCM_CLASS_CG_CONTEXT (&Scm_CGcontextClass) #define SCM_CG_CONTEXT(obj) ((Scm_CGcontext*)(obj)) /* unboxer */ #define SCM_CG_CONTEXT_P(obj) SCM_XTYPEP(obj, SCM_CLASS_CG_CONTEXT) /* Program */ typedef struct Scm_CGprogramRec { SCM_HEADER; int is_valid; CGprogram program; } Scm_CGprogram; SCM_CLASS_DECL(Scm_CGprogramClass); #define SCM_CLASS_CG_PROGRAM (&Scm_CGprogramClass) #define SCM_CG_PROGRAM(obj) ((Scm_CGprogram*)(obj)) #define SCM_CG_PROGRAM_P(obj) SCM_XTYPEP(obj, SCM_CLASS_CG_PROGRAM) /* Parameter */ typedef struct Scm_CGparameterRec { SCM_HEADER; CGparameter parameter; } Scm_CGparameter; SCM_CLASS_DECL(Scm_CGparameterClass); #define SCM_CLASS_CG_PARAMETER (&Scm_CGparameterClass) #define SCM_CG_PARAMETER(obj) ((Scm_CGparameter*)(obj)) #define SCM_CG_PARAMETER_P(obj) SCM_XTYPEP(obj, SCM_CLASS_CG_PARAMETER) #endif /* GAUCHE_CG_H */ Gauche-gl-0.5.1/cg/test.scm0000644000076400007640000000027011533026402014422 0ustar shiroshiro;; test for gl.cg (use gauche.test) (add-load-path "../lib") (add-load-path "../src") (test-start "gl.cg") (test-section "loading cg") (use gl.cg) (test-module 'gl.cg) (test-end) Gauche-gl-0.5.1/cg/Makefile.in0000644000076400007640000000455611533026402015017 0ustar shiroshiro# # Makefile.in for Gauche-gl/src # $Id: Makefile.in,v 1.4 2005-08-31 09:47:25 shirok Exp $ # # prelude --------------------------------------------- SHELL = @SHELL@ srcdir = @srcdir@ VPATH = $(srcdir) top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # These may be overridden by make invocators DESTDIR = # These are set by configure # NB: cc and various flags must match the ones used to compile Gauche, # so the make invocator shouldn't casually override them. CFLAGS = @DEFS@ @CFLAGS@ @X_CFLAGS@ @GLUT_INCDIR@ -I../src LDFLAGS = -I../src @LDFLAGS@ OBJEXT = @OBJEXT@ SOEXT = @SOEXT@ OLIBS = @LIBS@ LIBS = @CG_LIBS@ @GL_EXTRALIBS@ @GL_LIBS@ @LIBS@ \ @X_LIBS@ @X_PRE_LIBS@ @X_EXTRA_LIBS@ @X_LIBS@ GOSH = "@GOSH@" GAUCHE_CONFIG = "@GAUCHE_CONFIG@" GAUCHE_INSTALL = "@GAUCHE_INSTALL@" GAUCHE_PACKAGE = "@GAUCHE_PACKAGE@" HEADER_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --siteincdir`" SCM_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitelibdir`" ARCH_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitearchdir`" # build ----------------------------------------------- ARCHFILES = libgauche-gl-cg.$(SOEXT) SCMFILES = gl/cg.scm HEADERS = TARGET = $(ARCHFILES) cg_SRCS = gauche-cg.c cg-lib.stub CONFIG_GENERATED = Makefile config.cache config.log config.status GENERATED = all : $(TARGET) libgauche-gl-cg.$(SOEXT) : $(cg_SRCS) $(GAUCHE_PACKAGE) compile --verbose \ --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(LIBS)" \ libgauche-gl-cg $(cg_SRCS) # tests ----------------------------------------------- check : all @rm -f test.log $(GOSH) -I. -I../lib test.scm >> test.log # install ---------------------------------------------- install : all $(GAUCHE_INSTALL) -m 444 -T $(HEADER_INSTALL_DIR) $(HEADERS) $(GAUCHE_INSTALL) -m 444 -T $(SCM_INSTALL_DIR) $(SCMFILES) $(GAUCHE_INSTALL) -m 555 -T $(ARCH_INSTALL_DIR) $(ARCHFILES) uninstall : all $(GAUCHE_INSTALL) -U $(HEADER_INSTALL_DIR) $(HEADERS) $(GAUCHE_INSTALL) -U $(SCM_INSTALL_DIR) $(SCMFILES) $(GAUCHE_INSTALL) -U $(ARCH_INSTALL_DIR) $(ARCHFILES) # clean ------------------------------------------------ clean : $(GAUCHE_PACKAGE) compile --clean libgauche-gl-cg $(cg_SRCS) rm -rf core $(TARGET) $(GENERATED) *~ gl/*~ test.log so_locations distclean : clean rm -rf $(CONFIG_GENERATED) maintainer-clean : clean rm -rf $(CONFIG_GENERATED) configure Gauche-gl-0.5.1/cg/cg-lib.stub0000644000076400007640000012414711533026402015005 0ustar shiroshiro;;; ;;; cg-lib.stub - glue functions for Cg ;;; ;;; Copyright(C) 2005 by Issac Trotts (ijtrotts@ucdavis.edu) ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: cg-lib.stub,v 1.4 2007-01-15 10:26:57 shirok Exp $ ;;; " #include \"gauche-gl.h\" #include \"gauche-cg.h\" #include #include #include #include #include " ;; This little section is a stop-gap until Gauche-gl stabilizes again. (define-cproc auto-generate-mipmaps! (yes-or-no::) (body "glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, yes_or_no);")) (define-type "Scm_CGcontext*" #f "SCM_CG_CONTEXT_P" "SCM_CG_CONTEXT") (define-type "Scm_CGprogram*" #f "SCM_CG_PROGRAM_P" "SCM_CG_PROGRAM") (define-type "Scm_CGparameter*" #f "SCM_CG_PARAMETER_P" "SCM_CG_PARAMETER") (define-type "ScmF32Vector*" "f32vector" "SCM_F32VECTORP" "SCM_F32VECTOR") ;; ;; Cg/cg_datatypes.h ;; (define-enum CG_UNKNOWN_TYPE) (define-enum CG_STRUCT) (define-enum CG_ARRAY) (define-enum CG_TYPE_START_ENUM ) (define-enum CG_HALF) (define-enum CG_HALF2) (define-enum CG_HALF3) (define-enum CG_HALF4) (define-enum CG_HALF1x1) (define-enum CG_HALF1x2) (define-enum CG_HALF1x3) (define-enum CG_HALF1x4) (define-enum CG_HALF2x1) (define-enum CG_HALF2x2) (define-enum CG_HALF2x3) (define-enum CG_HALF2x4) (define-enum CG_HALF3x1) (define-enum CG_HALF3x2) (define-enum CG_HALF3x3) (define-enum CG_HALF3x4) (define-enum CG_HALF4x1) (define-enum CG_HALF4x2) (define-enum CG_HALF4x3) (define-enum CG_HALF4x4) (define-enum CG_FLOAT) (define-enum CG_FLOAT2) (define-enum CG_FLOAT3) (define-enum CG_FLOAT4) (define-enum CG_FLOAT1x1) (define-enum CG_FLOAT1x2) (define-enum CG_FLOAT1x3) (define-enum CG_FLOAT1x4) (define-enum CG_FLOAT2x1) (define-enum CG_FLOAT2x2) (define-enum CG_FLOAT2x3) (define-enum CG_FLOAT2x4) (define-enum CG_FLOAT3x1) (define-enum CG_FLOAT3x2) (define-enum CG_FLOAT3x3) (define-enum CG_FLOAT3x4) (define-enum CG_FLOAT4x1) (define-enum CG_FLOAT4x2) (define-enum CG_FLOAT4x3) (define-enum CG_FLOAT4x4) (define-enum CG_SAMPLER1D) (define-enum CG_SAMPLER2D) (define-enum CG_SAMPLER3D) (define-enum CG_SAMPLERRECT) (define-enum CG_SAMPLERCUBE) (define-enum CG_FIXED) (define-enum CG_FIXED2) (define-enum CG_FIXED3) (define-enum CG_FIXED4) (define-enum CG_FIXED1x1) (define-enum CG_FIXED1x2) (define-enum CG_FIXED1x3) (define-enum CG_FIXED1x4) (define-enum CG_FIXED2x1) (define-enum CG_FIXED2x2) (define-enum CG_FIXED2x3) (define-enum CG_FIXED2x4) (define-enum CG_FIXED3x1) (define-enum CG_FIXED3x2) (define-enum CG_FIXED3x3) (define-enum CG_FIXED3x4) (define-enum CG_FIXED4x1) (define-enum CG_FIXED4x2) (define-enum CG_FIXED4x3) (define-enum CG_FIXED4x4) (define-enum CG_HALF1) (define-enum CG_FLOAT1) (define-enum CG_FIXED1) (define-enum CG_INT) (define-enum CG_INT1) (define-enum CG_INT2) (define-enum CG_INT3) (define-enum CG_INT4) (define-enum CG_INT1x1) (define-enum CG_INT1x2) (define-enum CG_INT1x3) (define-enum CG_INT1x4) (define-enum CG_INT2x1) (define-enum CG_INT2x2) (define-enum CG_INT2x3) (define-enum CG_INT2x4) (define-enum CG_INT3x1) (define-enum CG_INT3x2) (define-enum CG_INT3x3) (define-enum CG_INT3x4) (define-enum CG_INT4x1) (define-enum CG_INT4x2) (define-enum CG_INT4x3) (define-enum CG_INT4x4) (define-enum CG_BOOL) (define-enum CG_BOOL1) (define-enum CG_BOOL2) (define-enum CG_BOOL3) (define-enum CG_BOOL4) (define-enum CG_BOOL1x1) (define-enum CG_BOOL1x2) (define-enum CG_BOOL1x3) (define-enum CG_BOOL1x4) (define-enum CG_BOOL2x1) (define-enum CG_BOOL2x2) (define-enum CG_BOOL2x3) (define-enum CG_BOOL2x4) (define-enum CG_BOOL3x1) (define-enum CG_BOOL3x2) (define-enum CG_BOOL3x3) (define-enum CG_BOOL3x4) (define-enum CG_BOOL4x1) (define-enum CG_BOOL4x2) (define-enum CG_BOOL4x3) (define-enum CG_BOOL4x4) ;; ;; Cg/cg_bindlocations.h ;; (define-enum CG_TEXUNIT0) (define-enum CG_TEXUNIT1) (define-enum CG_TEXUNIT2) (define-enum CG_TEXUNIT3) (define-enum CG_TEXUNIT4) (define-enum CG_TEXUNIT5) (define-enum CG_TEXUNIT6) (define-enum CG_TEXUNIT7) (define-enum CG_TEXUNIT8) (define-enum CG_TEXUNIT9) (define-enum CG_TEXUNIT10) (define-enum CG_TEXUNIT11) (define-enum CG_TEXUNIT12) (define-enum CG_TEXUNIT13) (define-enum CG_TEXUNIT14) (define-enum CG_TEXUNIT15) (define-enum CG_ATTR0) (define-enum CG_ATTR1) (define-enum CG_ATTR2) (define-enum CG_ATTR3) (define-enum CG_ATTR4) (define-enum CG_ATTR5) (define-enum CG_ATTR6) (define-enum CG_ATTR7) (define-enum CG_ATTR8) (define-enum CG_ATTR9) (define-enum CG_ATTR10) (define-enum CG_ATTR11) (define-enum CG_ATTR12) (define-enum CG_ATTR13) (define-enum CG_ATTR14) (define-enum CG_ATTR15) (define-enum CG_C) (define-enum CG_TEX0) (define-enum CG_TEX1) (define-enum CG_TEX2) (define-enum CG_TEX3) (define-enum CG_TEX4) (define-enum CG_TEX5) (define-enum CG_TEX6) (define-enum CG_TEX7) (define-enum CG_HPOS) (define-enum CG_COL0) (define-enum CG_COL1) (define-enum CG_COL2) (define-enum CG_COL3) (define-enum CG_PSIZ) (define-enum CG_WPOS) (define-enum CG_POSITION0) (define-enum CG_POSITION1) (define-enum CG_POSITION2) (define-enum CG_POSITION3) (define-enum CG_POSITION4) (define-enum CG_POSITION5) (define-enum CG_POSITION6) (define-enum CG_POSITION7) (define-enum CG_POSITION8) (define-enum CG_POSITION9) (define-enum CG_POSITION10) (define-enum CG_POSITION11) (define-enum CG_POSITION12) (define-enum CG_POSITION13) (define-enum CG_POSITION14) (define-enum CG_POSITION15) (define-enum CG_DIFFUSE0) (define-enum CG_TANGENT0) (define-enum CG_TANGENT1) (define-enum CG_TANGENT2) (define-enum CG_TANGENT3) (define-enum CG_TANGENT4) (define-enum CG_TANGENT5) (define-enum CG_TANGENT6) (define-enum CG_TANGENT7) (define-enum CG_TANGENT8) (define-enum CG_TANGENT9) (define-enum CG_TANGENT10) (define-enum CG_TANGENT11) (define-enum CG_TANGENT12) (define-enum CG_TANGENT13) (define-enum CG_TANGENT14) (define-enum CG_TANGENT15) (define-enum CG_SPECULAR0) (define-enum CG_BLENDINDICES0) (define-enum CG_BLENDINDICES1) (define-enum CG_BLENDINDICES2) (define-enum CG_BLENDINDICES3) (define-enum CG_BLENDINDICES4) (define-enum CG_BLENDINDICES5) (define-enum CG_BLENDINDICES6) (define-enum CG_BLENDINDICES7) (define-enum CG_BLENDINDICES8) (define-enum CG_BLENDINDICES9) (define-enum CG_BLENDINDICES10) (define-enum CG_BLENDINDICES11) (define-enum CG_BLENDINDICES12) (define-enum CG_BLENDINDICES13) (define-enum CG_BLENDINDICES14) (define-enum CG_BLENDINDICES15) (define-enum CG_COLOR0) (define-enum CG_COLOR1) (define-enum CG_COLOR2) (define-enum CG_COLOR3) (define-enum CG_COLOR4) (define-enum CG_COLOR5) (define-enum CG_COLOR6) (define-enum CG_COLOR7) (define-enum CG_COLOR8) (define-enum CG_COLOR9) (define-enum CG_COLOR10) (define-enum CG_COLOR11) (define-enum CG_COLOR12) (define-enum CG_COLOR13) (define-enum CG_COLOR14) (define-enum CG_COLOR15) (define-enum CG_PSIZE0) (define-enum CG_PSIZE1) (define-enum CG_PSIZE2) (define-enum CG_PSIZE3) (define-enum CG_PSIZE4) (define-enum CG_PSIZE5) (define-enum CG_PSIZE6) (define-enum CG_PSIZE7) (define-enum CG_PSIZE8) (define-enum CG_PSIZE9) (define-enum CG_PSIZE10) (define-enum CG_PSIZE11) (define-enum CG_PSIZE12) (define-enum CG_PSIZE13) (define-enum CG_PSIZE14) (define-enum CG_PSIZE15) (define-enum CG_BINORMAL0) (define-enum CG_BINORMAL1) (define-enum CG_BINORMAL2) (define-enum CG_BINORMAL3) (define-enum CG_BINORMAL4) (define-enum CG_BINORMAL5) (define-enum CG_BINORMAL6) (define-enum CG_BINORMAL7) (define-enum CG_BINORMAL8) (define-enum CG_BINORMAL9) (define-enum CG_BINORMAL10) (define-enum CG_BINORMAL11) (define-enum CG_BINORMAL12) (define-enum CG_BINORMAL13) (define-enum CG_BINORMAL14) (define-enum CG_BINORMAL15) (define-enum CG_FOG0) (define-enum CG_FOG1) (define-enum CG_FOG2) (define-enum CG_FOG3) (define-enum CG_FOG4) (define-enum CG_FOG5) (define-enum CG_FOG6) (define-enum CG_FOG7) (define-enum CG_FOG8) (define-enum CG_FOG9) (define-enum CG_FOG10) (define-enum CG_FOG11) (define-enum CG_FOG12) (define-enum CG_FOG13) (define-enum CG_FOG14) (define-enum CG_FOG15) (define-enum CG_DEPTH0) (define-enum CG_DEPTH1) (define-enum CG_DEPTH2) (define-enum CG_DEPTH3) (define-enum CG_DEPTH4) (define-enum CG_DEPTH5) (define-enum CG_DEPTH6) (define-enum CG_DEPTH7) (define-enum CG_DEPTH8) (define-enum CG_DEPTH9) (define-enum CG_DEPTH10) (define-enum CG_DEPTH11) (define-enum CG_DEPTH12) (define-enum CG_DEPTH13) (define-enum CG_DEPTH14) (define-enum CG_DEPTH15) (define-enum CG_SAMPLE0) (define-enum CG_SAMPLE1) (define-enum CG_SAMPLE2) (define-enum CG_SAMPLE3) (define-enum CG_SAMPLE4) (define-enum CG_SAMPLE5) (define-enum CG_SAMPLE6) (define-enum CG_SAMPLE7) (define-enum CG_SAMPLE8) (define-enum CG_SAMPLE9) (define-enum CG_SAMPLE10) (define-enum CG_SAMPLE11) (define-enum CG_SAMPLE12) (define-enum CG_SAMPLE13) (define-enum CG_SAMPLE14) (define-enum CG_SAMPLE15) (define-enum CG_BLENDWEIGHT0) (define-enum CG_BLENDWEIGHT1) (define-enum CG_BLENDWEIGHT2) (define-enum CG_BLENDWEIGHT3) (define-enum CG_BLENDWEIGHT4) (define-enum CG_BLENDWEIGHT5) (define-enum CG_BLENDWEIGHT6) (define-enum CG_BLENDWEIGHT7) (define-enum CG_BLENDWEIGHT8) (define-enum CG_BLENDWEIGHT9) (define-enum CG_BLENDWEIGHT10) (define-enum CG_BLENDWEIGHT11) (define-enum CG_BLENDWEIGHT12) (define-enum CG_BLENDWEIGHT13) (define-enum CG_BLENDWEIGHT14) (define-enum CG_BLENDWEIGHT15) (define-enum CG_NORMAL0) (define-enum CG_NORMAL1) (define-enum CG_NORMAL2) (define-enum CG_NORMAL3) (define-enum CG_NORMAL4) (define-enum CG_NORMAL5) (define-enum CG_NORMAL6) (define-enum CG_NORMAL7) (define-enum CG_NORMAL8) (define-enum CG_NORMAL9) (define-enum CG_NORMAL10) (define-enum CG_NORMAL11) (define-enum CG_NORMAL12) (define-enum CG_NORMAL13) (define-enum CG_NORMAL14) (define-enum CG_NORMAL15) (define-enum CG_FOGCOORD) (define-enum CG_TEXCOORD0) (define-enum CG_TEXCOORD1) (define-enum CG_TEXCOORD2) (define-enum CG_TEXCOORD3) (define-enum CG_TEXCOORD4) (define-enum CG_TEXCOORD5) (define-enum CG_TEXCOORD6) (define-enum CG_TEXCOORD7) (define-enum CG_TEXCOORD8) (define-enum CG_TEXCOORD9) (define-enum CG_TEXCOORD10) (define-enum CG_TEXCOORD11) (define-enum CG_TEXCOORD12) (define-enum CG_TEXCOORD13) (define-enum CG_TEXCOORD14) (define-enum CG_TEXCOORD15) (define-enum CG_COMBINER_CONST0) (define-enum CG_COMBINER_CONST1) (define-enum CG_COMBINER_STAGE_CONST0) (define-enum CG_COMBINER_STAGE_CONST1) (define-enum CG_OFFSET_TEXTURE_MATRIX) (define-enum CG_OFFSET_TEXTURE_SCALE) (define-enum CG_OFFSET_TEXTURE_BIAS) (define-enum CG_CONST_EYE) (define-enum CG_TESSFACTOR) ;; ;; Cg/cg_profiles.h ;; (define-enum CG_PROFILE_START) (define-enum CG_PROFILE_UNKNOWN) (define-enum CG_PROFILE_VS_1_1) (define-enum CG_PROFILE_VS_2_0) (define-enum CG_PROFILE_VS_2_X) (define-enum CG_PROFILE_PS_1_1) (define-enum CG_PROFILE_PS_1_2) (define-enum CG_PROFILE_PS_1_3) (define-enum CG_PROFILE_PS_2_0) (define-enum CG_PROFILE_PS_2_X) (define-enum CG_PROFILE_MAX) ;; ;; Cg/cg_errors.h ;; (define-enum CG_NO_ERROR) (define-enum CG_COMPILER_ERROR) (define-enum CG_INVALID_PARAMETER_ERROR) (define-enum CG_INVALID_PROFILE_ERROR) (define-enum CG_PROGRAM_LOAD_ERROR) (define-enum CG_PROGRAM_BIND_ERROR) (define-enum CG_PROGRAM_NOT_LOADED_ERROR) (define-enum CG_UNSUPPORTED_GL_EXTENSION_ERROR) (define-enum CG_INVALID_VALUE_TYPE_ERROR) (define-enum CG_NOT_MATRIX_PARAM_ERROR) (define-enum CG_INVALID_ENUMERANT_ERROR) (define-enum CG_NOT_4x4_MATRIX_ERROR) (define-enum CG_FILE_READ_ERROR) (define-enum CG_FILE_WRITE_ERROR) (define-enum CG_NVPARSE_ERROR) (define-enum CG_MEMORY_ALLOC_ERROR) (define-enum CG_INVALID_CONTEXT_HANDLE_ERROR) (define-enum CG_INVALID_PROGRAM_HANDLE_ERROR) (define-enum CG_INVALID_PARAM_HANDLE_ERROR) (define-enum CG_UNKNOWN_PROFILE_ERROR) (define-enum CG_VAR_ARG_ERROR) (define-enum CG_INVALID_DIMENSION_ERROR) (define-enum CG_ARRAY_PARAM_ERROR) (define-enum CG_OUT_OF_ARRAY_BOUNDS_ERROR) (define-enum CG_CONFLICTING_TYPES_ERROR) (define-enum CG_CONFLICTING_PARAMETER_TYPES_ERROR) (define-enum CG_PARAMETER_IS_NOT_SHARED_ERROR) (define-enum CG_INVALID_PARAMETER_VARIABILITY_ERROR) (define-enum CG_CANNOT_DESTROY_PARAMETER_ERROR) (define-enum CG_NOT_ROOT_PARAMETER_ERROR) (define-enum CG_PARAMETERS_DO_NOT_MATCH_ERROR) (define-enum CG_IS_NOT_PROGRAM_PARAMETER_ERROR) (define-enum CG_INVALID_PARAMETER_TYPE_ERROR) (define-enum CG_PARAMETER_IS_NOT_RESIZABLE_ARRAY_ERROR) (define-enum CG_INVALID_SIZE_ERROR) (define-enum CG_BIND_CREATES_CYCLE_ERROR) (define-enum CG_ARRAY_TYPES_DO_NOT_MATCH_ERROR) (define-enum CG_ARRAY_DIMENSIONS_DO_NOT_MATCH_ERROR) (define-enum CG_ARRAY_HAS_WRONG_DIMENSION_ERROR) (define-enum CG_TYPE_IS_NOT_DEFINED_IN_PROGRAM_ERROR) ;; ;; Cg/cg_enums.h ;; (define-enum CG_UNKNOWN) (define-enum CG_IN) (define-enum CG_OUT) (define-enum CG_INOUT) (define-enum CG_MIXED) (define-enum CG_VARYING) (define-enum CG_UNIFORM) (define-enum CG_CONSTANT) (define-enum CG_PROGRAM_SOURCE) (define-enum CG_PROGRAM_ENTRY) (define-enum CG_COMPILED_PROGRAM) (define-enum CG_PROGRAM_PROFILE) (define-enum CG_GLOBAL) (define-enum CG_PROGRAM) (define-enum CG_DEFAULT) (define-enum CG_ERROR) (define-enum CG_SOURCE) (define-enum CG_OBJECT) (define-enum CG_COMPILE_MANUAL) (define-enum CG_COMPILE_IMMEDIATE) (define-enum CG_COMPILE_LAZY) (define-enum CG_CURRENT) (define-enum CG_LITERAL) (define-enum CG_VERSION) ;; ;; Cg/cg.h ;; ;;;;; Context ;;;;; " static void context_finalize(ScmObj obj, void* data) { fprintf(stderr,\"context_finalize\\n\"); Scm_CGcontext* c = (Scm_CGcontext*)obj; if(c->is_valid) { cgDestroyContext(c->context); c->is_valid = 0; } } " (define-cproc cg-create-context () "Scm_CGcontext* c = SCM_NEW(Scm_CGcontext); SCM_SET_CLASS(c, SCM_CLASS_CG_CONTEXT); c->context = cgCreateContext(); gauche_cg_context = c->context; c->is_valid = 1; Scm_RegisterFinalizer(SCM_OBJ(c), context_finalize, NULL); SCM_RETURN(SCM_OBJ(c)); ") ;; Calling this is optional, since the garbage collector will eventually ;; call cgDestroyContext() anyway. (define-cproc cg-destroy-context (c::) " if(c->is_valid) { cgDestroyContext(c->context); c->is_valid = 0; } SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-is-context (c::) "SCM_RETURN(SCM_MAKE_BOOL(cgIsContext(c->context)));") (define-cproc cg-get-last-listing (c::) "SCM_RETURN(SCM_MAKE_STR_COPYING(cgGetLastListing(c->context)));") (define-cproc cg-set-auto-compile (c:: flag::) "cgSetAutoCompile(c->context,flag); SCM_RETURN(SCM_UNDEFINED);") ;;;;; Program ;;;;; " static void program_finalize(ScmObj obj, void* data) { Scm_CGprogram* p = (Scm_CGprogram*)obj; if(p->is_valid) { cgDestroyProgram(p->program); p->is_valid = 0; } } " " static const char** convert_compiler_args(ScmObj compiler_arg_list) { int i,n; const char **args; if(SCM_LISTP(compiler_arg_list)) { n = Scm_Length(compiler_arg_list); args = (const char**)malloc((n+1)*sizeof(const char*)); for(i=0;i program-type:: program-string:: profile:: entry-func-name ; #f denotes "main", otherwise pass in a string compiler-arg-list ; #f or a list of strings ) " const char **args = convert_compiler_args(compiler_arg_list); Scm_CGprogram* p = SCM_NEW(Scm_CGprogram); SCM_SET_CLASS(p, SCM_CLASS_CG_PROGRAM); p->is_valid = 1; p->program = cgCreateProgram(c->context, program_type, (char*)SCM_STRING_START(program_string), profile, SCM_STRINGP(entry_func_name)?(char*)SCM_STRING_START(entry_func_name):NULL, args); if(args) { free(args); } Scm_RegisterFinalizer(SCM_OBJ(p), program_finalize, NULL); SCM_RETURN(SCM_OBJ(p)); ") (define-cproc cg-create-program-from-file (c:: program-type:: ; usually CG_SOURCE program-filename:: profile:: ; e.g., CG_PROFILE_VP20 or CG_PROFILE_FP20 entry-func-name ; #f denotes "main", otherwise pass in a string compiler-arg-list ; #f or a list of strings ) " const char **args = convert_compiler_args(compiler_arg_list); Scm_CGprogram* p = SCM_NEW(Scm_CGprogram); SCM_SET_CLASS(p, SCM_CLASS_CG_PROGRAM); p->is_valid = 1; p->program = cgCreateProgramFromFile(c->context, program_type, (char*)SCM_STRING_START(program_filename), profile, SCM_STRINGP(entry_func_name)?(char*)SCM_STRING_START(entry_func_name):NULL, args); if(args) { free(args); } /* Scm_RegisterFinalizer(SCM_OBJ(p), program_finalize, NULL); */ SCM_RETURN(SCM_OBJ(p)); ") ;(define-cproc cg-copy-program (p::) ; (return "cgCopyProgram")) (define-cproc cg-destroy-program (p::) "cgDestroyProgram(p->program); p->is_valid = 0; SCM_RETURN(SCM_UNDEFINED);") ; (define-cproc cg-get-first-program (p::) ; (return "cgGetFirstProgram")) ; (define-cproc cg-get-next-program (p::) ; (return "cgGetNextProgram")) ; (define-cproc cg-get-program-context (p::) ; (return "cgGetProgramContext")) ; (define-cproc cg-is-program (p::) ; (return "cgIsProgram")) (define-cproc cg-compile-program (p::) " cgCompileProgram(p->program); SCM_RETURN(SCM_UNDEFINED); ") (define-cproc cg-is-program-compiled (p::) " SCM_RETURN(SCM_MAKE_BOOL(cgIsProgramCompiled(p->program))); ") (define-cproc cg-get-program-string (p:: pname::) "SCM_RETURN(SCM_OBJ(SCM_MAKE_STR_COPYING( cgGetProgramString(p->program, pname))));") ; (define-cproc cg-get-program-profile (prog:: "cgGetProgramProfile")) ; ;;;; Parameter functions ;;;;; ; (define-cproc cg-create-parameter (ctx:: type::) ; (return "cgCreateParameter")) ; (define-cproc cg-destroy-parameter (p::) ; (return "cgDestroyParameter")) ; (define-cproc cg-create-parameter-array (ctx:: length::) ; (return "cgCreateParameterArray")) ; (define-cproc cg-create-parameter-multi-dim-array ; (ctx:: type:: length-list) ; "CGparameter param; ; int i,dim; ; int* lengths; ; if(!SCM_LISTP(length_list)) { ; Scm_Error(\"Expected a list for third argument\"); ; } ; dim = Scm_Length(length_list); ; lengths = (int*)malloc(dim*sizeof(int)); ; for(i=0;i to::) ; (return "cgConnectParameter")) ; (define-cproc cg-disconnect-parameter (p::) ; (return "cgDisconnectParameter")) ; (define-cproc cg-get-connected-parameter (p::) ; (return "cgGetConnectedParameter")) ; (define-cproc cg-get-num-connected-to-parameters (p::) ; (return "cgGetNumConnectedToParameters")) ; (define-cproc cg-get-connected-to-parameter ; (p:: index::) ; (return "cgGetConnectedToParameter")) ;; The reference document Cg_Toolkit.pdf discusses the cgGLSetParameter functions ;; but does not mention the cgSetParameter functions. So, for now, I'm ;; only binding the cgGLSetParameter functions. -ijt ; ; (define-cproc cg-set-parameter (p:: value &rest args) ; ... ; ; Set a matrix parameter in row order. The caller must make sure the matrix ; ; argument has the right number of elements. ; (define-cproc cg-set-named-matrix-parameter-r (param:: mat) ; "if(SCM_F32VECTORP(mat)) { ; cgSetMatrixParameterfr(param, SCM_F32VECTOR_ELEMENTS(mat)); ; } else if(SCM_F64VECTORP(mat)) { ; cgSetMatrixParameterdr(param, SCM_F64VECTOR_ELEMENTS(mat)); ; } else { ; Scm_Error(\"Bad matrix argument type (expected f32vector or f64vector)\"); ; } ; SCM_RETURN(SCM_UNDEFINED);") ; ; Set a matrix parameter in column order. ; (define-cproc set-matrix-parameter-c (param:: mat) ; "if(SCM_F32VECTORP(mat)) { ; cgSetMatrixParameterfc(param, SCM_F32VECTOR_ELEMENTS(mat)); ; } else if(SCM_F64VECTORP(mat)) { ; cgSetMatrixParameterdc(param, SCM_F64VECTOR_ELEMENTS(mat)); ; } else { ; Scm_Error(\"Bad matrix argument type (expected f32vector or f64vector)\"); ; } ; SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-get-named-parameter (prog:: name::) " Scm_CGparameter* ret = SCM_NEW(Scm_CGparameter); SCM_SET_CLASS(ret, SCM_CLASS_CG_PARAMETER); ret->parameter = cgGetNamedParameter(prog->program, (char*)SCM_STRING_START(name)); SCM_RETURN(SCM_OBJ(ret)); ") (define-cproc cg-get-named-program-parameter (prog:: name-space:: name::) " Scm_CGparameter* ret = SCM_NEW(Scm_CGparameter); SCM_SET_CLASS(ret, SCM_CLASS_CG_PARAMETER); ret->parameter = cgGetNamedProgramParameter(prog->program, name_space, (char*)SCM_STRING_START(name)); SCM_RETURN(SCM_OBJ(ret)); ") ; (define-cproc cg-get-first-parameter ; (prog:: name-space::) ; (return "cgGetFirstParameter")) ; (define-cproc cg-get-next-parameter (current::) ; (return "cgGetNextParameter")) ; (define-cproc cg-get-first-leaf-parameter ; (prog:: name-space::) ; (return "cgGetFirstLeafParameter")) ; (define-cproc cg-get-next-leaf-parameter (current::) ; (return "cgGetNextLeafParameter")) ; (define-cproc cg-get-first-struct-parameter (param::) ; (return "cgGetFirstStructParameter")) ; (define-cproc cg-get-named-struct-parameter ; (param:: name::) ; (return "cgGetNamedStructParameter")) ; (define-cproc cg-get-first-dependent-parameter (param::) ; (return "cgGetFirstDependentParameter")) ; (define-cproc cg-get-array-parameter (aparam:: index::) ; (return "cgGetArrayParameter")) ; (define-cproc cg-get-array-dimension (p::) ; (return "cgGetArrayDimension")) ; (define-cproc cg-get-array-type (p::) ; (return "cgGetArrayType")) ; (define-cproc cg-get-array-size (p:: dimension::) ; (return "cgGetArraySize")) ; (define-cproc cg-set-array-size (p:: size::) ; (return "cgSetArraySize")) ; (define-cproc cg-set-multi-dim-array-size (p:: size-list) ; " ; int i,n; ; int *sizes; ; if(!SCM_LISTP(size_list)) { ; Scm_Error(\"Expected a list for second argument\"); ; } ; n = Scm_Length(list); ; sizes = (int*) malloc(n*sizeof(int)); ; for(i=0;i) ; (return "cgGetParameterProgram")) ; (define-cproc cg-get-parameter-context (p::) ; (return "cgGetParameterContext")) ; (define-cproc cg-is-parameter (p::) ; (return "cgIsParameter")) ; (define-cproc cg-get-parameter-name (p::) ; "SCM_RETURN(SCM_MAKE_STR_COPYING(cgGetParameterName(p)));") ; (define-cproc cg-get-parameter-type (p::) ; (return "cgGetParameterType")) ; (define-cproc cg-get-parameter-named-type (p::) ; (return "cgGetParameterNamedType")) ; (define-cproc cg-get-parameter-semantic (p::) ; "SCM_RETURN(SCM_MAKE_STR_COPYING(cgGetParameterSemantic(p)));") ; (define-cproc cg-get-parameter-resource (p::) ; (return "cgGetParameterResource")) ; (define-cproc cg-get-parameter-base-resource (p::) ; (return "cgGetParameterBaseResource")) ; (define-cproc cg-get-parameter-resource-index (p::) ; (return "cgGetParameterResourceIndex")) ; (define-cproc cg-get-parameter-variability (p::) ; (return "cgGetParameterVariability")) ; (define-cproc cg-get-parameter-direction (p::) ; (return "cgGetParameterDirection")) ; (define-cproc cg-is-parameter-referenced (p::) ; (return "cgIsParameterReferenced")) ; (define-cproc cg-get-parameter-values (p::) ; "int nvals; ; double* vals; ; vals = cgGetParameterValues(p,&nvals); ; SCM_RETURN(Scm_MakeF64VectorFromArray(nvals,vals));") ; (define-cproc cg-get-parameter-ordinal-number (p::) ; (return "cgGetParameterOrdinalNumber")) ; (define-cproc cg-is-parameter-global (p::) ; (return "cgIsParameterGlobal")) ; (define-cproc cg-get-parameter-index (p::) ; (return "cgGetParameterIndex")) ; (define-cproc cg-set-parameter-variability (p:: vary::) ; (return "cgSetParameterVariability")) ; (define-cproc cg-set-parameter-semantic (p:: semantic::) ; (return "cgSetParameterSemantic")) ; ;;;; Type Functions ;;;;; ; (define-cproc cg-get-type-string (t::) ; "SCM_RETURN(SCM_MAKE_STR_COPYING(cgGetTypeString(t)));") ; (define-cproc cg-get-type (s::) ; (return "cgGetType")) ; (define-cproc cg-get-named-user-type (p:: name::) ; (return "cgGetNamedUserType")) ; (define-cproc cg-get-num-user-types (p::) ; (return "cgGetNumUserTypes")) ; (define-cproc cg-get-user-type (p:: index::) ; (return "cgGetUserType")) ; (define-cproc cg-get-num-parent-types (t::) ; (return "cgGetNumParentTypes")) ; (define-cproc cg-get-parent-type (t:: index::) ; (return "cgGetParentType")) ; (define-cproc cg-is-parent-type (parent:: child::) ; (return "cgIsParentType")) ; (define-cproc cg-is-interface-type (type::) ; (return "cgIsInterfaceType")) ; ;;;; Resource Functions ;;;;; ; (define-cproc cg-get-resource-string (resource::) ; "SCM_RETURN(SCM_MAKE_STR_COPYING(cgGetResourceString(resource)));") ; (define-cproc cg-get-resource (s::) ; (return "cgGetResource")) ; ;;;; Enum Functions ;;;;; ; (define-cproc cg-get-enum-string (en::) ; "SCM_RETURN(SCM_MAKE_STR_COPYING(cgGetEnumString(en)));") ; (define-cproc cg-get-enum (enum-string::) ; (return "cgGetEnum")) ; ;;;; Profile Functions ;;;;; ; (define-cproc cg-get-profile-string (profile::) ; "SCM_RETURN(SCM_MAKE_STR_COPYING(cgGetProfileString(profile)));") ; (define-cproc cg-get-profile (profile-string::) ; (return "cgGetProfile")) ;;;; Error Functions ;;;;; (define-cproc cg-get-error () (return "cgGetError")) (define-cproc cg-get-error-string (error::) "SCM_RETURN(SCM_MAKE_STR_COPYING(cgGetErrorString(error)));") (define-cproc cg-get-last-error-string () "CGerror e; const char *s; s=cgGetLastErrorString(&e); SCM_RETURN( SCM_LIST2( SCM_MAKE_STR_COPYING(s), Scm_MakeInteger(e))); ") ; ;; Error callback ----------- "static ScmObj error_fn = SCM_FALSE; static void error_callback(void) { if(SCM_PROCEDUREP(error_fn)) { Scm_ApplyRec(error_fn, SCM_NIL); } }" (define-cproc cg-set-error-callback (fn::) " error_fn = SCM_OBJ(fn); cgSetErrorCallback(error_callback); SCM_RETURN(SCM_UNDEFINED); ") (define-cproc cg-get-error-callback () "SCM_RETURN(SCM_OBJ(error_fn));") ;;;;; Misc Functions ;;;;; (define-cproc cg-get-string (sname::) (return "cgGetString")) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; cgGL ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Cg/cgGL_profiles.h (define-enum CG_PROFILE_VP20) (define-enum CG_PROFILE_FP20) (define-enum CG_PROFILE_VP30) (define-enum CG_PROFILE_FP30) (define-enum CG_PROFILE_ARBVP1) (define-enum CG_PROFILE_FP40) (define-enum CG_PROFILE_ARBFP1) (define-enum CG_PROFILE_VP40) ;; CGGLenum type (define-enum CG_GL_MATRIX_IDENTITY) (define-enum CG_GL_MATRIX_TRANSPOSE) (define-enum CG_GL_MATRIX_INVERSE) (define-enum CG_GL_MATRIX_INVERSE_TRANSPOSE) (define-enum CG_GL_MODELVIEW_MATRIX) (define-enum CG_GL_PROJECTION_MATRIX) (define-enum CG_GL_TEXTURE_MATRIX) (define-enum CG_GL_MODELVIEW_PROJECTION_MATRIX) (define-enum CG_GL_VERTEX) (define-enum CG_GL_FRAGMENT) ;; Profile Functions (define-cproc cg-gl-is-profile-supported (profile::) "SCM_RETURN(SCM_MAKE_BOOL(cgGLIsProfileSupported(profile)));") (define-cproc cg-gl-enable-profile (profile::) (return "cgGLEnableProfile")) (define-cproc cg-gl-disable-profile (profile::) (return "cgGLDisableProfile")) (define-cproc cg-gl-get-latest-profile (profile_type::) (return "cgGLGetLatestProfile")) (define-cproc cg-gl-set-optimal-options (profile::) (return "cgGLSetOptimalOptions")) ;; Program Managment Functions (define-cproc cg-gl-load-program (p::) "cgGLLoadProgram(p->program); SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-gl-is-program-loaded (p::) "SCM_RETURN(SCM_MAKE_BOOL(cgGLIsProgramLoaded(p->program)));") (define-cproc cg-gl-bind-program (p::) "cgGLBindProgram(p->program); SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-gl-unbind-program (profile::) (return "cgGLUnbindProgram")) (define-cproc cg-gl-get-program-id (p::) "SCM_RETURN(SCM_MAKE_INT(cgGLGetProgramID(p->program)));") ;; Parameter Managment Functions (define-cproc cg-gl-set-parameter (p:: value &rest args) " CGparameter param = p->parameter; if (SCM_VECTOR4FP(value)) { cgGLSetParameter4fv(param, SCM_VECTOR4F_D(value)); } else if(SCM_F32VECTORP(value)) { switch(SCM_F32VECTOR_SIZE(value)) { case 1: cgGLSetParameter1fv(param,SCM_F32VECTOR_ELEMENTS(value)); break; case 2: cgGLSetParameter2fv(param,SCM_F32VECTOR_ELEMENTS(value)); break; case 3: cgGLSetParameter3fv(param,SCM_F32VECTOR_ELEMENTS(value)); break; case 4: cgGLSetParameter4fv(param,SCM_F32VECTOR_ELEMENTS(value)); break; default: Scm_Error(\"Bad vector size: %i\",(int)SCM_F32VECTOR_SIZE(value)); break; } } else if(SCM_F64VECTORP(value)) { switch(SCM_F64VECTOR_SIZE(value)) { case 1: cgGLSetParameter1dv(param,SCM_F64VECTOR_ELEMENTS(value)); break; case 2: cgGLSetParameter2dv(param,SCM_F64VECTOR_ELEMENTS(value)); break; case 3: cgGLSetParameter3dv(param,SCM_F64VECTOR_ELEMENTS(value)); break; case 4: cgGLSetParameter4dv(param,SCM_F64VECTOR_ELEMENTS(value)); break; default: Scm_Error(\"Bad vector size: %i\",(int)SCM_F64VECTOR_SIZE(value)); break; } } else if(SCM_MATRIX4FP(value)) { /* Should this be cgGLSetMatrixParameterfr? -ijt */ cgGLSetMatrixParameterfc(param,SCM_MATRIX4F_D(value)); } else { double array[4]; int nvals = Scm_GLGetDoubles(value, args, array, 4, 1); switch(nvals) { case 1: cgGLSetParameter1dv(param,array); break; case 2: cgGLSetParameter2dv(param,array); break; case 3: cgGLSetParameter3dv(param,array); break; case 4: cgGLSetParameter4dv(param,array); break; default: Scm_Error(\"Bad number of args: %i\",nvals); break; } } SCM_RETURN(SCM_UNDEFINED);") ; void cg-gl-set-parameter-array1f(CGparameter param, ; long offset, ; long nelements, ; const float *v); ; void cg-gl-set-parameter-array2f(CGparameter param, ; long offset, ; long nelements, ; const float *v); ; void cg-gl-set-parameter-array3f(CGparameter param, ; long offset, ; long nelements, ; const float *v); ; void cg-gl-set-parameter-array4f(CGparameter param, ; long offset, ; long nelements, ; const float *v); ; void cg-gl-set-parameter-array1d(CGparameter param, ; long offset, ; long nelements, ; const double *v); ; void cg-gl-set-parameter-array2d(CGparameter param, ; long offset, ; long nelements, ; const double *v); ; void cg-gl-set-parameter-array3d(CGparameter param, ; long offset, ; long nelements, ; const double *v); ; void cg-gl-set-parameter-array4d(CGparameter param, ; long offset, ; long nelements, ; const double *v); ; void cg-gl-get-parameter-array1f(CGparameter param, ; long offset, ; long nelements, ; float *v); ; void cg-gl-get-parameter-array2f(CGparameter param, ; long offset, ; long nelements, ; float *v); ; void cg-gl-get-parameter-array3f(CGparameter param, ; long offset, ; long nelements, ; float *v); ; void cg-gl-get-parameter-array4f(CGparameter param, ; long offset, ; long nelements, ; float *v); ; void cg-gl-get-parameter-array1d(CGparameter param, ; long offset, ; long nelements, ; double *v); ; void cg-gl-get-parameter-array2d(CGparameter param, ; long offset, ; long nelements, ; double *v); ; void cg-gl-get-parameter-array3d(CGparameter param, ; long offset, ; long nelements, ; double *v); ; void cg-gl-get-parameter-array4d(CGparameter param, ; long offset, ; long nelements, ; double *v); ;; Please be sure not to pass temporary values to this function since ;; it points to the original data without copying. (Shiro, how can we ;; make sure that the pointer object does not get garbage collected ;; before the parameter object does? -ijt) ;; ;; (define-cproc cg-gl-set-parameter-pointer (p:: fsize:: type:: stride:: pointer::) (body "cgGLSetParameterPointer(p->parameter, (GLint)fsize, (GLenum)type, (GLsizei)stride, SCM_F32VECTOR_ELEMENTS(pointer));")) (define-cproc cg-gl-enable-client-state (p::) "cgGLEnableClientState(p->parameter); SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-gl-disable-client-state (p::) "cgGLDisableClientState(p->parameter); SCM_RETURN(SCM_UNDEFINED);") ;; Matrix Parameter Managment Functions (define-cproc cg-gl-set-named-matrix-parameter-r (p:: mat) "CGparameter param = p->parameter; if(SCM_F32VECTORP(mat)) { cgGLSetMatrixParameterfr(param, SCM_F32VECTOR_ELEMENTS(mat)); } else if(SCM_F64VECTORP(mat)) { cgGLSetMatrixParameterdr(param, SCM_F64VECTOR_ELEMENTS(mat)); } else { Scm_Error(\"Bad matrix argument type (expected f32vector or f64vector)\"); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-gl-set-named-matrix-parameter-c (p:: mat) "CGparameter param = p->parameter; if(SCM_F32VECTORP(mat)) { cgGLSetMatrixParameterfc(param, SCM_F32VECTOR_ELEMENTS(mat)); } else if(SCM_F64VECTORP(mat)) { cgGLSetMatrixParameterdc(param, SCM_F64VECTOR_ELEMENTS(mat)); } else { Scm_Error(\"Bad matrix argument type (expected f32vector or f64vector)\"); } SCM_RETURN(SCM_UNDEFINED);") ; void cg-gl-get-matrix-parameterdr(CGparameter param, double *matrix); ; void cg-gl-get-matrix-parameterfr(CGparameter param, float *matrix); ; void cg-gl-get-matrix-parameterdc(CGparameter param, double *matrix); ; void cg-gl-get-matrix-parameterfc(CGparameter param, float *matrix); (define-cproc cg-gl-set-state-matrix-parameter (p:: matrix-enum:: transform-enum::) "cgGLSetStateMatrixParameter(p->parameter, matrix_enum, transform_enum); SCM_RETURN(SCM_UNDEFINED);") ; void cg-gl-set-matrix-parameter-arrayfc(CGparameter param, ; long offset, ; long nelements, ; const float *matrices); ; void cg-gl-set-matrix-parameter-arrayfr(CGparameter param, ; long offset, ; long nelements, ; const float *matrices); ; void cg-gl-set-matrix-parameter-arraydc(CGparameter param, ; long offset, ; long nelements, ; const double *matrices); ; void cg-gl-set-matrix-parameter-arraydr(CGparameter param, ; long offset, ; long nelements, ; const double *matrices); ; void cg-gl-get-matrix-parameter-arrayfc(CGparameter param, ; long offset, ; long nelements, ; float *matrices); ; void cg-gl-get-matrix-parameter-arrayfr(CGparameter param, ; long offset, ; long nelements, ; float *matrices); ; void cg-gl-get-matrix-parameter-arraydc(CGparameter param, ; long offset, ; long nelements, ; double *matrices); ; void cg-gl-get-matrix-parameter-arraydr(CGparameter param, ; long offset, ; long nelements, ; double *matrices); ;; Texture Parameter Managment Functions (define-cproc cg-gl-set-texture-parameter (param:: texobj::) "cgGLSetTextureParameter(param->parameter, texobj); SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-gl-get-texture-parameter (param::) "SCM_RETURN(SCM_MAKE_INT(cgGLGetTextureParameter(param->parameter)));") (define-cproc cg-gl-enable-texture-parameter (param::) "cgGLEnableTextureParameter(param->parameter); SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-gl-disable-texture-parameter (p::) "cgGLDisableTextureParameter(p->parameter); SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-gl-get-texture-enum (p::) "SCM_RETURN(SCM_MAKE_INT(cgGLGetTextureEnum(p->parameter)));") (define-cproc cg-gl-set-manage-texture-parameters (c:: flag::) "cgGLSetManageTextureParameters(c->context,flag); SCM_RETURN(SCM_UNDEFINED);") (define-cproc cg-gl-get-manage-texture-parameters (c::) "SCM_RETURN(SCM_MAKE_BOOL(cgGLGetManageTextureParameters(c->context)));") ;; Local variables: ;; mode: scheme ;; end: Gauche-gl-0.5.1/doc/0000755000076400007640000000000011617171625013127 5ustar shiroshiroGauche-gl-0.5.1/doc/gauche-gl-refe.html0000644000076400007640000142635511617171617016611 0ustar shiroshiro Gauche-gl : OpenGL binding for Gauche
[Top] [Contents] [Index] [ ? ]

Gauche-gl : OpenGL binding for Gauche

This is a reference manual of Gauche-gl, an OpenGL binding for the Gauche Scheme implementation. This manual is for version 0.5.1.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. Introduction

Gauche-gl is an extension module of Gauche Scheme implementation. It provides the following modules:

gl

This module provides bindings to OpenGL API. It covers most functions in OpenGL 1.0 through 2.0, and GLU. The functions are described in OpenGL API.

gl.glut

This module provides bindings to most functions in GLUT. The functions are described in GLUT API.

gl.math3d

This module provides vector and matrix calculations optimized for 3D homogeneous coordinates. The vector and matrix objects here can be directly passed to Gauche-gl functions. The functions are descrbied in Vectors and matrices.

gl.simple.*

These modules provide simple APIs for programmers to hack up a very simple OpenGL application. They are by no means intended for general application development, but would be handy for throwaway script. See Simple utilities for the details.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. Installation

Installing Gauche-gl is usually straightforward on Unix variants.

You have to have the following programs installed on your machine.

  • Gauche 0.8.5 or later
  • OpenGL 1.1 equivalent library; the auther checked with Mesa 3.4 and NVidia’s GLX driver.
  • GLUT 3.7 or later.

The standard way to compile and install Gauche-gl is as follows:

 
% gzcat Gauche-gl-0.5.1.tgz | tar xf -
% cd Gauche-gl-0.5.1
% ./configure
% make
% make test
% make install

Or you can use ‘gauche-package’ command:

 
% gauche-package install -C=<configure-option> Gauche-gl-0.5.1.tgz

The confiugre script figures out the location Gauche is installed, and install Gauche-gl in the same place.

If you have GLUT installed in non-standard place, you have to tell the configure script where it is.

 
% ./configure --with-glut=DIR

Since version 0.4, Gauche-gl can be configured to include bindings to NVidia’s Cg Toolkit. The binding code is contributed by Issac Trotts. To enable Cg binding, give --enable-cg option to the configure script.

 
% ./configure --enable-cg

It is reported that Mesa in FreeBSD ports is compiled with pthreads enabled, and Gauche-gl can’t be linked unless Gauche itself is compiled with pthreads. The configure script of Gauche prints warning if you specify pthreads, but it is safe as far as you don’t call make-thread in your program.

There are various examples under ‘examples/’ directory. If you want to run the examples before installing Gauche-gl, you have to tell the location of the library to gosh command, e.g. gosh -I../src -I../lib gears.scm. Some demos under subdirectories have a shell script that invokes gosh with proper command-line options.

gears.scm

Brian Paul’s 3D gear wheels.

mandelbrot.scm

Simple calculated texture.

glbook/

This subdirectory contains examples found in "OpenGL Programming Guide", a.k.a. Redbook.

slbook/

This subdirectory contains examples found in "OpenGL Shading Language". Each demo is under its own subdirectories. You need to have proper driver/hardware that supports GLSL to run these demos.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. Getting Started


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 GL calls in Scheme

I assume you have basic knowledge of OpenGL API. Gauche-gl maps OpenGL calls to Scheme procedures pretty straightforwardly. For example, the very first example of "OpenGL Programming Guide", the pseudo code of OpenGL application, can be written in Gauche-gl like this:

 
(use gl)

(define (main args)
  (initialize-a-window-please)

  (gl-clear-color 0.0 0.0 0.0 0.0)
  (gl-clear GL_COLOR_BUFFER_BIT)
  (gl-color 1.0 1.0 1.0)
  (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0)
  (gl-begin* GL_POLYGON
    (gl-vertex 0.25 0.25 0.0)
    (gl-vertex 0.75 0.25 0.0)
    (gl-vertex 0.75 0.75 0.0)
    (gl-vertex 0.25 0.75 0.0)
    )
  (gl-flush)
  (update-the-window-and-check-for-events)
  0)

Note that initialize-a-window-please and update-the-window-and-check-for-events are function calls dependent on the windowing system. Gauche-gl comes with GLUT binding and you can use it to do basic stuff. In the separate package Gauche-gtk, a binding to GtkGLExt is provided, which allows you to do GL rendering inside Gtk widgets.

For the time being, let’s focus on the pure GL part.

The mapping of GL call name is straightforward. The mixed case names in OpenGL C API is expanded to hyphenated name, e.g. glClearColorgl-clear-color. OpenGL enums are mapped as is, e.g. GL_POLYGON. (Note that Gauche is case-sensitive by default. Also note the underscore, not hyphen, in constants).

A few convenience macros, such as gl-begin*, is defined. There are straight bindings of gl-begin and gl-end, so you can write the drawing part in the same way as in C:

 
  (gl-begin GL_POLYGON)
    (gl-vertex 0.25 0.25 0.0)
    (gl-vertex 0.75 0.25 0.0)
    (gl-vertex 0.75 0.75 0.0)
    (gl-vertex 0.25 0.75 0.0)
  (gl-end)

Actually gl-begin* macro expands into the above calls. It’s a matter of taste, but the macro version guarantees begin and end match, and the syntax-aware editor can indent internal calls accordingly.

You might have noticed that the type suffix in C API is not in Gauche binding. The Scheme function figures out the type of passed arguments and calls appropriate C API. SRFI-4 uniform numeric vectors are used to represent arrays of numbers.

 
  (gl-vertex 1.0 2.0 3.0)    ⇒ glVertex3d
  (gl-vertex '#f32(1.0 2.0)) ⇒ glVertex2fv
  (gl-vertex '#s32(3 2 5))   ⇒ glVertex3iv

Generally, passing uniform vectors is much more efficient than giving individual numbers, for the former can eliminate the cost of type checking and unboxing.

Some GL calls can also take gl.math3d primitive objects such as vector4f, point4f or matrix4f (See section Vectors and matrices). For example, you can pass point4f object to gl-vertex, vector4f to gl-normal, and matrix4f to gl-mult-matrix. They are efficient since calculations on those types are defined natively in gl.math3d, and passing it to GL call doesn’t cost unboxing.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 Advanced GL features

Although Gauche-gl supports up to OpenGL 2.0, all functionalities may not be available on the target machine’s driver/hardware. The application needs to check the availability of the extension and/or GL version before using the features that are only supported by the extension/version.

Gauche-gl provides a couple of utility procedures to check the feature sets at runtime. For example, you can switch behavior depending on OpenGL 1.3 feature availability:

 
(if (gl-version>=? "1.3")
  (code-using-features-available-in-OpenGL-1.3-and-later ...)
  (alternative-code ...))

Or you can check the availability of extensions:

 
(unless (gl-extension-supported? 'GL_ARB_shader_objects
                                 'GL_ARB_fragment_shader
                                 'GL_ARB_vertex_shader
                                 'GL_ARB_shading_language_100)
   (error "OpenGL Shading Language extensions not available"))

See GL feature checking for the details.

If the client program calls a GL API that are not supported on the platform, an error is signalled.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.3 Using GLUT

In order to make a runnable script, you need to use some windowing system interface. GLUT binding provides a simple way for it.

Here is a complete runnable Scheme script, ported from Example 1-2 in "OpenGL Programming Guide":

 
(use gl)
(use gl.glut)

(define (disp)
  (gl-clear GL_COLOR_BUFFER_BIT)
  (gl-color '#f32(1.0 1.0 1.0))
  (gl-begin* GL_POLYGON
    (gl-vertex '#f32(0.25 0.25 0.0))
    (gl-vertex '#f32(0.75 0.25 0.0))
    (gl-vertex '#f32(0.75 0.75 0.0))
    (gl-vertex '#f32(0.25 0.75 0.0))
    )
  (gl-flush)
  )

(define (init)
  (gl-clear-color 0.0 0.0 0.0 0.0)
  (gl-matrix-mode GL_PROJECTION)
  (gl-load-identity)
  (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0)
  )

(define (keyboard key x y)
  (cond
   ((= key 27) (exit 0))
   ))

(define (main args)
  (glut-init args)
  (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB))
  (glut-init-window-size 250 250)
  (glut-init-window-position 100 100)
  (glut-create-window "hello")
  (init)
  (glut-display-func disp)
  (glut-keyboard-func keyboard)
  (glut-main-loop)
  0)

The (use gl.glut) form loads GLUT binding. The name mapping is the same as GL’s: mixed case names to hyphenated names.

In order to handle various events, you can pass a closure to glut-display-func etc. In the keyboard and mouse event callback, all arguments are integers.

There are more examples under the ‘examples/’ directory which uses GLUT.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.4 Performance tips

If you want to display millions of polygons in 30 fps, Gauche-gl is not for you. Consider using implementations that compiles into native code. The purpose of Gauche-gl is to provide reasonable performance for interactive development and experiment.

However, if you know some tips, actually you can go quite far, especially with recent processors and graphics chips.

Avoid alocation within the inner loop.

The functional (non-destructive) operations tend to return newly-allocated objects. Use linear-update (destructive) versions instead, such as matrix-mul!, u8vector-add!, etc, whenever possible. Pre-allocating temporary vectors is also effective.

Reduce the number of calls within the inner loop.

Vertex arrays are much better than calling gl-vertex over and over. Also consider using display lists if you’re displaying rigid objects.

Keep numbers within a uniform vector.

Every time you take a number out of a uniform vector (or <vector4f> etc.), Gauche has to wrap the number by a tag (boxing). Also when you store a number into a uniform vector, Gauche has to check the type of the object, then strip a tag (unboxing). Those are all overhead you wouldn’t have if you operate directly on uniform vectors (or <vector4f> etc).

Write extensions to accelerate.

If the above strategies are not enough, consider writing computation-intensive part in C as an extension. The easier way is to make C routines operate on uniform vectors, which is essentially a pointer to an array of numbers from C, and let Scheme handle higher-level data structures. (It could be viewed like relations between a coprocessor and a processor; the former does simple, iterative calculations fast, and the latter handles complicated logic).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4. OpenGL API

In this chapter we list a GL and GLU procedures accessible from Gauche-gl, with brief descriptions to help programmers to remind what the functions are. We don’t intend to make this an OpenGL reference, though; you should look at the OpenGL book for the details of what each API do.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1 GL data types

GL doesn’t define many data structures: some scalar primitives (e.g. GLint) and arrays of them.

For scalar values, Gauche-gl has natural mappings:

GLboolean

Scheme booleans.

GLbyte, GLubyte, GLshort, GLushort, GLint, GLuint, GLenum, GLbitfield

Scheme exact integers.

GLfloat, GLdouble, GLclampf, GLclampd

Scheme real numbers.

For arrays, Gauche-gl uses uniform (srfi-4) vector whenever possible. For float arrays, however, Gauche-gl allows more structured types, such as points or matrices, when they are relevant. Such types are provided in gl.math3d module (see Vectors and matrices), which also provides common arithmetics between those types. Another exception is an array of GLboolean—it doesn’t have corresponding uniform vector representation. Gauche-gl defines a new type, <gl-boolean-vector>, to represent an array of GLboolean. See below for operations provided on it.

GLbyte[]

<s8vector>

GLubyte[]

<u8vector>

GLshort[]

<s16vector>

GLushort[]

<u16vector>

GLint[]

<s32vector>

GLuint[]

<u32vector>

GLfloat[], GLclampf[]

<f32vector>, <point4f>, <vector-4f>, <point4f-array>, <vector4f-array>, <matrix4f>, <quatf>.

GLdouble[], GLclampd[]

<f64vector>

GLboolean[]

<gl-boolean-vector>

GL boolean vectors

Class: <gl-boolean-vector>

A class for an array of boolean values. You can pass its instance to the GL APIs that expect an array of GLbooleans. Its internal representation is bitwise compatible to GLbooean array, so passing it is quite efficient.

This class inherits <sequence>, so you can use generic sequence operations on it.

The external representation of GL boolean vector uses srfi-10 notation, and can be read back. For example, a GL boolean vector of length 5 may be written something like this:

 
#,(gl-boolean-vector #t #f #t #f #t)
Function: make-gl-boolean-vector size &optional init

Returns a GL boolean vector of size elements. Elements are initialized by either #f or #t, according to init.

 
(make-gl-boolean-vector 3 #t) ⇒ #,(gl-boolean-vector #t #t #t)
Function: gl-boolean-vector bool …

Returns a GL boolean vector, whose elements are bool ….

 
(gl-boolean-vector #f #t #t) ⇒ #,(gl-boolean-vector #f #t #t)
Function: gl-boolean-vector? obj

Returns #t if obj is a GL boolean vector, #f otherwise.

Function: gl-boolean-vector-length v

Returns length of a GL boolean vector v. You can also use the sequence generic function size-of.

Function: gl-boolean-vector-fill! v bool

Fills a GL boolean vector v with a boolean value bool.

Function: list->gl-boolean-vector bools

Coerce list of boolean values to a GL boolean vector.

You can also use the coerce-to generic function to convert between GL boolean vectors and other sequences.

Function: gl-boolean-vector-ref v k &optional fallback

Returns k-th element of a GL boolean vector v. If k is out of range and fallback is provided, it is returned. If k is out of range and fallback is omitted, an error is signalled.

You can also use generic function ref to access a GL boolean vector.

Function: gl-boolean-vector-set! v k bool

Sets k-th element of a GL boolean vector v by a boolean value bool.

You can also use generic function (setter ref) to modify a GL boolean vector.

Function: gl-boolean-vector-copy v

Returns a copy of a GL boolean vector v.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.2 GL feature checking

If you want to use a feature that are in OpenGL 1.2 or later, or in a GL extension, you have to check its availability before actually calling the API function. You can use the following utility procedures.

Note that those functions may return #f if the connection to the display subsystem isn’t established yet. Usually you have to initialize and open an window before checking the features.

Function: gl-extension-available? extension-name …

Returns #t if GL extensions listed in extension-name … are all available. Extension-name can be a symbol or a string (e.g. GL_ARB_multisample).

Function: gl-version<? version
Function: gl-version<=? version
Function: gl-version>? version
Function: gl-version>=? version
Function: gl-version=? version

Returns #t if the runtime OpenGL version is less than, less thanor equal to, greater than, greater than or equal to, and equal to, the given version, respectively.

Give version in a string, e.g. "1.3".


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.3 Drawing functions

Macro: gl-begin* mode gl-commands …

Executes gl-commands between (gl-begin mode) and (gl-end). Mode can be one of the following constants.

GL_POINTS

Individual points.

GL_LINES

Pairs of vertices interpreted as individual line segments.

GL_LINE_STRIP

Series of connected line segments.

GL_LINE_LOOP

Same as above, with a segment added between last and first vertices.

GL_TRIANGLES

Triples of vertices interpreted as triangles.

GL_TRIANGLE_STRIP

Linked trip of triangles.

GL_TRIANGLE_FAN

Linked fan of triangles.

GL_QUADS

Quadruples of vertices interpreted as four-sided polygons.

GL_QUAD_STRIP

Linked strip of quadrilaterals.

GL_POLYGON

Boundary of a simple, convex polygon.

Function: gl-begin mode
Function: gl-end

Corresponds to glBegin and glEnd. Use of gl-begin* macro is recommended, though.

Function: gl-flush

Flush the GL command buffer.

Function: gl-finish

Make sure all previously issued GL commands are completed.

Function: gl-rect point1 point2
Function: gl-rect x1 y1 x2 y2

Draws a rectangle. In the first form, point1 and point2 can be either <point4f>, or f32, f64, s32, or s16vector of length 2. Types of both args should match. In the second form, all args should be a real numbers (glRectd is used).

Function: gl-vertex point
Function: gl-vertex x y &optional z w

Specify vertices. In the first form, point can be either <point4f>, or f32, f64, s32 or s16vector of length 2, 3 or 4. In the second form, all args should be a real numbers.

Function: gl-normal vector
Function: gl-normal x y z

Sets vertex normal vector. In the first form, vector can be either <vector4f> (the fourth element is ignored), or f32, f64, s32 ro s16vector of length 3. In the second form, all args should be a real numbers.

Function: gl-color color
Function: gl-color r g b &optional a

Sets the current color. In the first form, color can be either f32, f64, u8, u16, u32, s8, s16, or s32vector of length 3 or 4. In the second form, all args should be a real numbers.

Function: gl-tex-coord coord
Function: gl-tex-coord u v &optional s t

Sets the current texture coordinates. In the first form, coord can be either f32, f64, s32 or s16vector of length 1, 2, 3, or 4. In the second form, all args should be a real numbers.

Function: gl-raster-pos pos
Function: gl-raster-pos x y &optional z w

Sets the current raster position. In the first form, pos can be eitehr f32, f64, s32 or s16vector. In the second form, all args should be a real numbers.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.4 GL state control

Capabilities

Function: gl-enable cap
Function: gl-disable cap

Turns on and off a capability cap. Check out OpenGL reference for the list of capabilities.

Function: gl-is-enabled cap

Returns #t of #f depending on cap is enabled or not.

Function: gl-enable-client-state array
Function: gl-disable-client-state array

Enable/disable a client-side array (e.g. vertex array) specified by array. Array can be one of the following constants.

GL_VERTEX_ARRAY
GL_COLOR_ARRAY
GL_INDEX_ARRAY
GL_NORMAL_ARRAY
GL_TEXTURE_COORD_ARRAY
GL_EDGE_FLAG_ARRAY

State values

Gauche has two variations for each type of OpenGL glGetTYPE APIs; nondestructive version and destructive versions. Nondestructive versions such as gl-get-boolean allocates and returns the vector of appropriate type for the state. For destructive versions such as gl-get-boolean!, you need to pass a vector to be filled in.

The destructive version is non-allocating operation, so it is suitable if you call it within the drawing loop.

If the state has a scalar value, the non-destructive version of query function returns a scalar value, but you need to pass a (uniform) vector of length 1 for the destructive version.

Function: gl-state-vector-size state

[Gauche specific] Returns the required size of the vector to retrieve GL state state. It is useful to prepare the vector to pass to the destructive version of glGetTYPE API.

Function: gl-get-boolean state
Function: gl-get-boolean! gl-boolean-vector state

Get (a) boolean state value(s).

Function: gl-get-integer state
Function: gl-get-integer! s32vector state

Get (an) integer state value(s).

Function: gl-get-float state
Function: gl-get-float! f32vector state

Get (a) single-precision floating-point state value(s).

Function: gl-get-double state
Function: gl-get-double! f64vector state

Get (a) double-precision floating-point state value(s).

Push/pop attributes

Function: gl-push-attrib mask
Function: gl-pop-attrib

Push/pop attributes indicated by mask. Valid mask can be logior of the following bits (GLL_ALL_ATTRIB_BITS is logior of all the bits).

GL_ACCUM_BUFFER_BIT
GL_COLOR_BUFFER_BIT
GL_CURRENT_BIT
GL_DEPTH_BUFFER_BIT
GL_ENABLE_BIT
GL_EVAL_BIT
GL_FOG_BIT
GL_HINT_BIT
GL_LIGHTING_BIT
GL_LINE_BIT
GL_LIST_BIT
GL_PIXEL_MODE_BIT
GL_POINT_BIT
GL_POLYGON_BIT
GL_POLYGON_STIPPLE_BIT
GL_SCISSOR_BIT
GL_STENCIL_BUFFER_BIT
GL_TEXTURE_BIT
GL_TRANSFORM_BIT
GL_VIEWPORT_BIT
GL_ALL_ATTRIB_BITS

All of the above.

Function: gl-push-client-attrib mask
Function: gl-pop-client-attrib

Push/pop client attributes. Valid mask can be logior of the following

GL_CLIENT_PIXEL_STORE_BIT
GL_CLIENT_VERTEX_ARRAY_BIT
GL_ALL_CLIENT_ATTRIB_BITS

All of the above.

Other queries

Function: gl-get-error

Returns the value of the error flag. Returned an integer value. Check out the OpenGL documentation for the possible error values.

This function resets the error flag to GL_NO_ERROR.

Function: glu-error-string error-code

Returns a descriptive string for error-code returned by gl-get-error.

Function: gl-get-string name

Returns informative string about name of the GL library. Name can be one of the following.

GL_VENDOR
GL_RENDERER
GL_VERSION
GL_EXTENSIONS

To check a specific version or extension, you can also use the utility procedure gl-version>? etc. See GL feature checking.

Function: glu-get-string name

Returns informative string about name of the GLU library. Name can be one of the following.

GLU_VERSION
GLU_EXTENSIONS

Hints

Function: gl-hint target hint

Controls quality of target by hint. Target can be one of the following:

GL_POINT_SMOOTH_HINT
GL_LINE_SMOOTH_HINT
GL_POLYGON_SMOOTH_HINT
GL_FOG_HINT
GL_PERSPECTIVE_CORRECTION_HINT

And hint can be one of the following:

GL_FASTEST
GL_NICEST
GL_DONT_CARE

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.5 GL states for drawing

Function: gl-point-size size

Sets the width in pixels for rendered points. The possible range of size on the running GL implementation can be obtained by passing either GL_ALIASED_POINT_SIZE_RANGE or GL_SMOOTH_POINT_SIZE_RANGE to gl-get-float.

Function: gl-line-width width

Sets the width in pixels for rendered lines. The possible range of width on the running GL implementation can be obtained by passing either GL_ALIASED_LINE_WIDTH_RANGE or GL_SMOOTH_LINE_WIDTH_RANGE to gl-get-float.

Function: gl-line-stipple factor pat

Sets the current stippling pattern for lines. pat must be an exact integer, and its lower 16 bits are used to specify the stipple pattern. Factor is an integer factor to specify how many pixels corresponds to one bit in pat.

You have to enable GL_LINE_STIPPLE to use face culling.

Function: gl-polygon-mode face mode

Specifies the drawing mode for a polygon’s front and back faces. Face can be one of the followings:

GL_FRONT_AND_BACK
GL_FRONT
GL_BACK

Mode can be one of the followings:

GL_POINT
GL_LINE
GL_FILL
Function: gl-front-face mode

Controls how OpenGL determine front face of a polygon Mode can be one of the followings:

GL_CCW

Front face is where ordered vertices appear in a counterclockwise orientation (default).

GL_CW

Front face is where ordered vertices appear in a clockwise orientation.

Function: gl-cull-face mode

Indicates which face of polygons should be culled. Mode can be one of the followings:

GL_FRONT
GL_BACK
GL_FRONT_AND_BACK

You have to enable GL_CULL_FACE to use face culling.

Function: gl-polygon-stipple mask

Defines the current stipple pattern for filled polygons. Mask has to be a u8vector of length 128, specifying a 32x32 bitmap pattern. You have to enable GL_POLYGON_STIPPLE to use this feature.

Function: gl-edge-flag flag

Sets the edge flag(s) of vertices. When flag is a GL boolean vector, glEdgeFlagv is called. Otherwise flag is used as a single boolean value for glEdgeFlag.

Function: gl-blend-func sfactor dfactor

Controls how color values in the fragment being processed (the source) are combined with the ones in the framebuffer (the destination).

Possible values for the sfactor and dfactor arguments are as follows.

GL_ZERO
GL_ONE
GL_DST_COLOR
GL_SRC_COLOR
GL_ONE_MINUS_DST_COLOR
GL_ONE_MINUS_SRC_COLOR
GL_SRC_ALPHA
GL_ONE_MINUS_SRC_ALPHA
GL_DST_ALPHA
GL_ONE_MINUS_DST_ALPHA
GL_SRC_ALPHA_SATURATE
GL_CONSTANT_COLOR
GL_ONE_MINUS_CONSTANT_COLOR
GL_CONSTANT_ALPHA
GL_ONE_MINUS_CONSTANT_ALPHA
Function: gl-blend-equation mode

[GL_ARB_imaging] By default, the source and destination colors are added after processed as specified by gl-blend-func. With this extension API you can change the function. Mode can be one of the following values:

GL_FUNC_ADD
GL_FUNC_SUBTRACT
GL_FUNC_REVERSE_SUBTRACT
GL_MIN
GL_MAX
Function: gl-blend-color red green blue alpha

[GL_ARB_imaging] Sets the constant color used in the blending function.

Function: gl-polygon-offset factor units

[GL1.1] Offset the depth value of each fragment. Useful to avoid artifacts when you draw polygon edges over its surfaces, for example.

Function: gl-clip-plane plane equation

Defines a clipping plane. Plane specifies which clipping plane you’re defining. Use GL_MAX_CLIP_PLANES to gl-get-integer to obtain the number of clipping planes you can use. You have to enable the specific clipping plane (e.g. (gl-enable GL_CLIP_PLANE0)) to use the clipping plane.

Equation must be an f64vector of size 4, specifying four coefficients of the plane equation, Ax + By + Cz + D = 0.

Function: gl-get-clip-plane plane

Returns the four coefficients of the equation of clipping plane plane, in f64vector.

Function: gl-fog pname param

Sets the parameters and function for the fog effect. Possible values for pname and accepted param for each pname are shown below.

GL_FOG_MODE

Either GL_EXP, GL_EXP2, GL_LINEAR to select the fog factors.

GL_FOG_DENSITY
GL_FOG_START
GL_FO_END

A real number to specify those parametes.

GL_FOG_COLOR

An f32vector of size 4 to specify the color.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.6 Transformation

Function: gl-matrix-mode mode

Speficies whether the modelview, projection, or texture matrix will be modified. Mode can be one of the followings:

GL_MODELVIEW
GL_PROJECTION
GL_TEXTURE
Function: gl-load-identity

Loads an identity matrix to the current modifiable matrix.

Function: gl-load-matrix mat

Loads the matrix mat to the current modifiable matrix. Mat can be a <matrix4f> instance, or f32 or f64vector of length 16.

Function: gl-mult-matrix mat

Multiplies the matrix mat to the current modifiable matrix. Mat can be a <matrix4f> instance, or f32 or f64vector of length 16.

Function: gl-translate x y z

Multiplies the current matrix by a matrix taht translates an object by (x, y, z). Internally, glTranslated is called.

Function: gl-rotate angle x y z

Multiplies the current matrix by a matrix that rotates an object in a counterclockwise direction about the ray from the origin through the point (x, y, z) by angle degrees. Internally, glRotated is called.

Function: gl-scale x y z

Multiplies the current matrix by a matrix that scales an object by (x, y, z). Internally, glScaled is called.

Function: glu-look-at eyex eyey eyez ctrx ctry ctrz upx upy upz

Defines a viewing matrix and multiplies it to the right of the current matrix.

Function: gl-frustum left right bottom top nearv farv

Creates a matrix for a perspective-view frustum and multiplies the current matrix by it.

Function: glu-perspective fovy aspect znear zfar

Creates a matrix for a symmetrix perspective-view frustum and multiplies the current matrix by it.

Function: gl-ortho left right bottom top nearv farv

Creates a matrix for an orthographic parallel viewing volume nand multiplies the current matrix by it.

Function: glu-ortho-2d left right bottom top

Convenience procedure for 2D drawing; it is the same as gl-ortho except nearv and farv are fixed (along Z axis) to -1.0 and 1.0, respectively.

Function: gl-viewport x y width height

Defines a pixel rectangle in the window into which the final image is mapped.

Function: gl-push-matrix
Function: gl-pop-matrix

Pushes/pops the current matrix.

Macro: gl-push-matrix* expr …

A convenience macro. Pushes the current matrix, executes exprs, then pop the current matrix.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.7 Display lists

Function: gl-gen-lists range

Allocates range number of contiguous display list indices. Returns an integer which is the smallest display list index you can use.

Function: gl-new-list list-no mode

Starts a display list construction. Mode may be one of the constants GL_COMPILE or GL_COMPILE_AND_EXECUTE.

Function: gl-end-list

Ends a display list construction.

Function: gl-call-list list-no

Calls a display list.

Function: gl-is-list list-no

Returns #t if list-no is an already used display list number, #f otherwise.

Function: gl-delete-lists list-no-start range

Deletes range display list, beginning from list-no-start.

Function: gl-list-base base

Specifies the offset that’s added to the display list indices in gl-call-list.

Function: gl-call-lists size type lists
Function: gl-call-lists size lists
Function: gl-call-lists lists

Executes size display list, whose indices are contained in lists. You can pass a u8, s8, u16, s16, u32, s32 or f32vector, or a string, as lists. If it is a string, each byte consists of the string is interpreted as an unsigned integer specifying a display list. It is useful for the technique to display character strings by creating display lists for each ASCII characters. But be aware that it doesn’t work for multibyte characters.

Usually you can use the simplest form (the third form) and Gauche-gl infers the size and type from the passed lists. You can explicitly specify size if you want to use just a beginning portion of lists. An error is signalled if you specify size that is larger than the size of lists.

Specifying type is useful only if lists is a u8vector, and you want to use one of three special types allowed to glCallLists, namely GL_2_BYTES, GL_3_BYTES, and GL_4_BYTES.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.8 Vertex arrays

Scheme version of APIs doesn’t have GLenum type argument in C API, since Gauche-gl can figure out the type by passed vectors.

Scheme API of gl-*-array has offset optional argument, by which you can pass the GL the values beginning from the offset-th element of the passed uniform vector. This isn’t in GL C API, since you can just offset the pointer in C.

NOTE: it is caller’s responsibility to guarantee the passed vector has enough length. GL doesn’t have an interface to specify the boundary, so Gauche can’t detect an invalid length vector.

Function: gl-vertex-pointer size vec &optional stride offset

Sets the vertex array. Size specifies the number of scalar values per vertex (2, 3, or 4), and vec provides the actual value in either f32, f64, s32 or s16vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-normal-pointer vec &optional stride offset

Sets the normal array. Vec should be either a f32, f64, s32 or s16vector, where each consecutive triplet specifies a normal vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-color-pointer size vec &optional stride offset

Sets the color array. Size specifies the number of scalar values per color (3 or 4), and vec provides the actual values in either f32, f64, u32, u16, u8, s32, s16, or s8vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-index-pointer vec &optional stride offset

Sets the index array. Vec can be either s32, s16, u8, f32, or f64vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-tex-coord-pointer size vec &optional stride offset

Sets the texture coordinate array. Size specifies the number of scalar values per texture coordinate (1, 2, 3 or 4), and vec provides the actual values in either f32, f64, s32 or s16vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-edge-flag-pointer vec &optional stride offset

Sets the edge flag array. Vec must be a GL boolean vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-array-element ith

Dereference ith vertex information of the currently enabled arrays.

Function: gl-draw-elements mode indices

Issues geometric primitive calls consists of the vertex information of the currently enabled arrays, each of which is specified by indices, which should be either a u8, u16 or u32vector.

Mode is the same as of gl-begin.

Function: gl-draw-range-elements mode start end indices

[GL1.2] Like gl-draw-elements, but limits the range of indices between start and end, inclusive. GL driver may take advantage of the information for better performance.

Function: gl-draw-arrays mode first count

This is more straightforward. Starting from first index, count vertices is wrtten in the drawing mode mode (same as of gl-begin), taken from the current enabled arrays.

Function: gl-interleaved-arrays format vec &optional stride offset

Vec must be a f32vector. It contains various information (e.g. vertex position, color and texture coordinate) interleaved, in the way specified by format.

In Scheme API, we only allow uniform vector as vec, so you can’t use the format that mixes float and integer, such as GL_C4UB_V2F.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.9 Lighting

Function: gl-shade-model mode

Sets the shading model, either GL_SMOOTH or GL_FLAT.

Function: gl-light light pname param

Creates a light specified by light, which is one of GL_LIGHT0, …, GL_LIGHT7, and sets a characteristics named by pname with the value param.

Possible values as pname and acceptable types of param are as follows.

GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION

Accepts an f32 or s32vector of size 4.

GL_SPOT_DIRECTION

Accepts an f32 or s32vector of size 3.

GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTNAT_ATTENUATION, GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION

Accepts a real number (glLightf is used).

Function: gl-get-light light pname

Returns the value of the property pname of the light light. Returned value can be f32vector or a real number.

Function: gl-light-model pname param

Sets the value of the property pname of the lighting model. Possible pname and its allowed param is as follows.

GL_LIGHT_MODEL_AMBIENT

Accepts f32 or s32vector of size 4.

GL_LIGHT_MODEL_LOCAL_VIEWER, GL_LIGHT_MODEL_TWO_SIDE

Accepts any Scheme value, which is interpreted as a boolean value. (That is, you have to pass #f to turn off these properties, and any other value to turn on.

GL_LIGHT_MODEL_COLOR_CONTROL

Accepts an enum value either GL_SINGLE_COLOR or GL_SEPARATE_SPECULAR_COLOR.

Function: gl-matrial face pname param

Sets the current material property. Face may be either GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK. Possible values of pname and acceptable param types are as follows.

GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE, GL_SPECULAR, GL_EMISSION

Accepts f32 or s32vector of size 4.

GL_SHININESS

Accepts a single real number (glMatrialf is called).

GL_COLOR_INDEXES

Accepts f32 or s32vector of size 3.

Function: gl-get-material face pname

Returns the current material property of face and pname. The type of returned value may be f32vector, s32vector (only for GL_COLOR_INDEXES), or a real number.

Function: gl-color-material face mode

Makes the material property mode (e.g. GL_AMBIENT etc.) of the face face follow the current color set by gl-color.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.10 Pixels, bitmaps and images

Pixel operations

Function: gl-bitmap width height xbo ybo xbi ybi bitmap

Draws a bitmap. Width and height gives the dimension of the bitmap. Xbo, ybo, xbi, and ybi specifies the origin and increment of the current raster position. Bitmap is the actual bitmap data, packed in a u8vector.

Function: gl-read-pixels x y width height format type

Reads pixel data from the framebuffer. Returns the pixel data in a uniform vector of the type determined by format and type (check out OpenGL doc to find out the actual data format).

Function: gl-draw-pixels width height format type pixels

Draws a pixel data pixels at the current raster position. Pixels must be a uniform vector compatible to the specified format and type values.

Function: gl-copy-pixels x y width height buffer

Copies pixel data in a rectangle area of the framebuffer, specified by lower-left corner (x, y) and dimensions (width, height). Buffer specifies which buffer is used, and should be one of GL_COLOR, GL_STENCIL or GL_DEPTH.

Function: gl-pixel-store pname param

Sets the pixel stroage models. Check out the OpenGL doc for the possible pname and param values.

Function: gl-pixel-transfer pname param

Sets the pixel transfer modes. Check out the OpenGL doc for the possible pname and param values.

Function: gl-pixel-map map values

Sets the pixel map table map with values, which must be either u16, u32 or f32vecotor. Check out the OpenGL doc for the possible map values.

Function: gl-pixel-zoom xfactor yfactor

Sets the magnification/reduction factors for pixel-write operations.

Function: gl-get-pixel-map map &optional type

Returns the current pixel map table as an uniform vector specified by type, which must be either a class <u32vector> (default), <u16vector>, or <f32vector>.

Function: gl-get-pixel-map! map values

Like gl-get-pixel-map, but instead of allocating a new vector, it stores the result to a uniform vector passed to values. It is a caller’s responsibility to ensure values has enough size.

Color tables

Function: gl-color-table target internal-format width format type data

[GL_ARB_imaging] Specifies one of the color table target. Data should be a uniform vector compatible to the format and type parameters.

Function: gl-color-table-parameter target pname param

[GL_ARB_imaging] Sets the color table parameter pname (either GL_COLOR_TABLE_SCALE or GL_COLOR_TABLE_BIAS), of the color table target. Param must be an f32 or s32vector of size 4.

Function: gl-copy-color-table target internal-format x y width

[GL_ARB_imaging] Creates a color table target using framebuffer data. The pixels are read from the current buffer for read (specified by glReadBuffer).

Function: gl-color-sub-table target start count format type data

[GL_ARB_imaging] Replaces a part of color table target, starting start and count entries. Values are given in data as a uniform vector compatible to the format and type arguments.

Function: gl-copy-color-sub-table target start x y width

[GL_ARB_imaging] Replaces a part of color table entries using framebuffer data.

Function: gl-get-color-table! target format type data

[GL_ARB_imaging] Reads the color table target and store it in data, in the format specified by format and type. Data must be a uniform vector compatible to the format and type arguments. The caller must ensure that data has enough size to contain the result.

Convolutions

Function: gl-convolution-filter-2d target internal-format width height format type data

[GL_ARB_imaging] Defines a 2D convolution filter. Target must be GL_CONVOLUTION_2D. Data must be a uniform vector compatible to the format and type arguments, and must have enough size.

Function: gl-copy-convolution-filter-2d target internal-format x y width height

[GL_ARB_imaging] Defines a 2D convolution filter, taking the convolution filter data from the current color buffer to read.

Function: gl-separable-filetr-2d target internal-format width height format type row column

[GL_ARB_imaging] Defines a 2D convolution filter by a product of a 1D row vector and 1D column vector. Target must be GL_SEPARABLE_2D. Both row and column must be a uniform vector, compatible with the format and type arguments, and must have enough size.

Function: gl-convolution-filter-1d target internal-format width format type data

[GL_ARB_imaging] Defines 1D convolution filter. Target must be GL_CONVOLUTION_1D. Data must be a uniform vector compatible to the format and type arguments, and must have enough size.

Function: gl-copy-convolution-filter-1d target internal-format x y width

[GL_ARB_imaging] Defines 1D convolution filter, taking the convolution filter data from the current color buffer to read.

Function: gl-convolution-parameter target pname param

[GL_ARB_imaging] Sets a parameter for a convolution filter target, which can be either GL_CONVOLUTION_2D, GL_SEPARABLE_2D, or GL_CONVOLUTION_1D. Possible values of pname and their acceptable param are as follows.

GL_CONVOLUTION_BORDER_MODE

Either one of the constants: GL_REDUCE, GL_CONSTNAT_BORDER, GL_REPLICATE_BORDER

GL_CONVOLUTION_FILTER_SCALE, GL_CONVOLUTION_FILTER_BIAS

An s32 or f32vector of size 4, specifying color values.

Histogram

Function: gl-histogram target width internal-format sink

[GL_ARB_imaging] Specifies the way the histogram data is stored. Target must be either GL_HISTOGRAM or GL_PROXY_HISTOGRAM. Width is the number of entires of the histogram, and has to be a power of 2. Sink is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline.

Function: gl-reset-histogram target

[GL_ARB_imaging] Resets the histogram counters. Target must be GL_HISTOGRAM.

Function: gl-get-histogram target reset format type

[GL_ARB_imaging] Returns histogram data in a uniform vector, whose type and size are determined by format and type. A boolean value reset specifies whether the histogram should be reset or not.

Function: gl-get-histogram-parameter target pname

[GL_ARB_imaging] Returns the parameter value of the histogram. Pname can be either one of GL_HISTOGRAM_WIDTH, GL_HISTOGRAM_FORMAT, GL_HISTOGRAM_RED_SIZE, GL_HISTOGRAM_GREEN_SIZE, GL_HISTOGRAM_BLUE_SIZE, GL_HISTOGRAM_ALPHA_SIZE, GL_HISTOGRAM_LUMINANCE_SIZE, or GL_HISTOGRAM_SINK. The returned value is an integer, except the case of GL_HISTOGRAM_SINK, which returns a boolean value.

Minmax

Function: gl-minmax target internal-format sink

[GL_ARB_imaging] Computes the minimum and maximum pixel values for an image. Target must be GL_MINMAX. Sink is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline.

Function: gl-get-minmax target reset format type

[GL_ARB_imaging] Returns the results of the minmax operation in a uniform vector, whose type and size are determined by the format and type arguments. A boolean value reset specifies whether the histogram should be reset or not.

Function: gl-reset-minmax target

[GL_ARB_imaging] Resets the minmax counter.

Function: gl-get-minmax-parameter target pname

[GL_ARB_imaging] Returns the parameter value of the histogram. Pname can be either GL_MINMAX_SINK (returns a boolean value) or GL_MINMAX_FORMAT (returns an integer).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.11 Texture mapping

Defining textures

Function: gl-tex-image-1d target level internalformat width border format type texels
Function: gl-tex-image-2d target level internalformat width height border format type texels
Function: gl-tex-image-3d target level internalformat width height depth border format type texels

Defines an 1D, 2D or 3D texture. 3D texture is available only if the GL version is 1.2 or later. The target parameter can be GL_TEXTURE_1D or GL_PROXY_TEXTURE_1D for gl-tex-image-1d, etc. The level parameter can be used for multiresolution textures; if this is a single resolution texture, pass 0.

Width, height, and depth specify the dimensions of the texture. Border can be 0 or 1, specifying the border.

The actual texture data is passed to the texels argument in a uniform vector, which should be compatible with the format and type parameters and match the size calculated by width, height and depth (and possibly the pixel store setting).

Function: gl-copy-tex-image-1d target level internal-format x y width border
Function: gl-copy-tex-image-2d target level internal-format x y width height border

Cerates a 1D or 2D texture from the framebuffer data.

Function: gl-tex-sub-image-1d target level xoffset width format type texels
Function: gl-tex-sub-image-2d target level xoffset yoffset width height format type texels
Function: gl-tex-sub-image-3d target level xoffset yoffset zoffset width height depth format type texels

Replaces a part of the current 1D, 2D or 3D texture image by texels. 3D texture is available only if the GL version is 1.2 or later.

Function: gl-copy-tex-sub-image-1d target level xoffset x y width
Function: gl-copy-tex-sub-image-2d target level xoffset yoffset x y width height
Function: gl-copy-tex-sub-image-3d target level xoffset yoffset zoffset x y width height

Replaces a part of the current 1D, 2D or 3D texture image by the data from the framebuffer. 3D texture is available only if the GL version is 1.2 or later.

Texture parameters

Function: gl-tex-parameter target pname param

Sets parameters for the current texture. Target can be either GL_TEXTURE_1D, GL_TEXTURE_2D or GL_TEXTURE_3D. Possible values for pname, and accepted type of param for each pname, are shown below.

GL_TEXTURE_WRAP_S
GL_TEXTURE_WRAP_T
GL_TEXTURE_WRAP_R
GL_TEXTURE_BASE_LEVEL
GL_TEXTURE_MAX_LEVEL
GL_TEXTURE_MAG_FILTER
GL_TEXTURE_MIN_FILTER

Param must be an integer.

GL_TEXTURE_PRIORITY
GL_TEXTURE_MIN_LOD
GL_TEXTURE_MAX_LOD

Param must be a real number.

GL_TEXTURE_BORDER_COLOR

Param must be an f32vector of size 4, representing a color.

Function: gl-get-tex-parameter target pname

Obtains the parameter of the current texture, set by gl-tex-parameter.

Function: gl-get-tex-level-parameter target level pname

Obtains the parameter of the level level of the current texture specified by target, which can be either GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_PROXY_TEXTURE_1D, GL_PROXY_TEXTURE_2D, or GL_PROXY_TEXTURE_3D.

Possible values for pname is either one of the following constants: GL_TEXTURE_WIDTH, GL_TEXTURE_HEIGHT, GL_TEXTURE_DEPTH, GL_TEXTURE_BORDER, GL_TEXTURE_INTERNAL_FORMAT, GL_TEXTURE_RED_SIZE, GL_TEXTURE_GREEN_SIZE, GL_TEXTURE_BLUE_SIZE, GL_TEXTURE_ALPHA_SIZE, GL_TEXTURE_LUMINANCE_SIZE, or GL_TEXTURE_INTENSITY_SIZE. This procedure returns an integer.

Mipmaps

Function: glu-build-1d-mipmaps target internal-format width format type texels
Function: glu-build-2d-mipmaps target internal-format width height format type texels
Function: glu-build-3d-mipmaps target internal-format width height depth format type texels

Constructs a serids of mipmaps and calls gl-tex-image-*d to load the images. Returns 0 on success, or a GLU error code on failure. Texels is a uniform vector, that must be compatible with format and type arguments, and must have the enough length as specified by width, height and depth parameters.

Function: glu-build-1d-mipmap-levels target internal-format width format type level base max texels
Function: glu-build-2d-mipmap-levels target internal-format width height format type level base max texels
Function: glu-build-3d-mipmap-levels target internal-format width height depth format type level base max texels

Like glu-build-*d-mipmaps, but you can specify the level of texels, and the range of levels to be generated by the base and max parameters. It is used to generate a subset of mipmaps.

Returns 0 on success, or a GLU error code on failure. Texels is a uniform vector, that must be compatible with format and type arguments, and must have the enough length as specified by width, height and depth parameters.

Texture objects

Function: gl-gen-textures size

Returns size new names for texture objects in a u32vector.

Function: gl-is-texture name

Returns #t if an integer name is the name of a texture that has been bound and not deleted yet, #f otherwise.

Function: gl-bind-texture target name

Bind the current texture (specified by target, e.g. GL_TEXTURE_2D) to the integer name. If there’s already a texture bound to name, it becomes current. Otherwise a new texture object is created and made current.

Function: gl-delete-textures names

Delets textures. Names must be a u32vector contains integer names of the texture objects to be deleted.

Function: gl-are-textures-resident! names residences

Names must be a u32vector contains integer names of the texture objects, and residences must be a GL boolean vector of the same length as names. If all textures named in names are resident, #t is returned and residences is not modified. Othewise, #f is returned and residences is modified to contain #t if the corresponding texture in names is resident, #f othewise.

Function: gl-prioritize-textures names priorities

Sets the prioridies of texture objects named by names to the corresponding entry of priorities Names must be a u32vectore and priorities must be an f32vector, and the lengths of both vectors must match.

Texture environment and coordinates

Function: gl-tex-env target pname param

Sets the current texturing function. Target must be GL_TEXTURE_ENV. Possible values of pname and accepted param for each value is as follows.

GL_TEXTURE_ENV_MODE

One of GL_DECAL, GL_REPLACE, GL_MODULATE or GL_BLEND.

GL_TEXTURE_ENV_COLOR

f32vector of size 4 to specify the color.

Function: gl-tex-gen coord pname param

Specifies the functions for automatic texture coordinate generation. Coord specifies the coordinates, either one of GL_S, GL_T, GL_R or GL_Q. Possible values of pname and accepted param for each value is as follows.

GL_TEXTURE_GEN_MODE

Either GL_OBJECT_LINEAR, GL_EYE_LINEAR or GL_SPHERE_MAP.

GL_OBJECT_PLANE
GL_EYE_PLANE

An s32, f32 or f64vector of size 4 to specify the plane.

Multitexturing

Function: gl-active-texture-arb texunit

[GL_ARB_multitexture] Selects the texture unit that is currently modified by texturing routines. Texunit is a constant GL_TEXTUREi_ARB, where i is 0 to the maximum number of the supported texture units.

Function: gl-multi-tex-coord-arb texunit coords
Function: gl-multi-tex-coord-arb texunit s &optional t r q

[GL_ARB_multitexture] Specifies the texture coordinate of the texture unit texunit. In the first form, you can pass either an f32, f64, s32, or s16vector of length 1 to 4. In the second form, s, t, r and q must be real numbers.

Function: gl-client-active-texture-arb texunit

Selects the current texture unit for specifying texutre-coordinate data with vertex arrays.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.12 Framebuffers

Clearing buffers

Function: gl-clear-color r g b a

Sets the current clearing color. Each color value sould be a real number, and is clamped to [0.0,1.0].

Function: gl-clear-index c

Sets the current clearing color (in color index mode). c must be a real number.

Function: gl-clear-depth depth

Sets the current clearing depth value. Depth must be a real number and clamped to [0.0,1.0].

Function: gl-clear-stencil s

Sets the current clearing value of the stencil buffer.

Function: gl-clear-accum r g b a

Sets the current clearing value of accumulation buffer.

Function: gl-clear mask

Clears the specified buffer. Mask is a logical-or of the following constants.

GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT
GL_ACCUM_BUFFER_BIT
GL_STENCIL_BUFFER_BIT

Selecting color buffers

Function: gl-draw-buffer mode

Selects (a) buffer(s) to which the image is rendered. Possible mode values are: GL_FRONT, GL_FRONT_LEFT, GL_FRONT_RIGHT, GL_BACK, GL_BACK_LEFT, GL_BACK_RIGHT, GL_LEFT, GL_RIGHT, GL_AUXi, GL_FRONT_AND_BACK, and GL_NONE.

Function: gl-read-buffer mode

Selects a color buffer as the source for reading pixels. Possible mode values are the same as gl-draw-buffer except GL_FRONT_AND_BACK and GL_NONE.

Masking buffers

Function: gl-index-mask mask

In color index mode, sets the mask of the color-index buffer. Mask is an exact integer.

Function: gl-color-mask r g b a

R, g, b and a are boolean values to specify whether the corresponding color channel should be written to the color buffer or not.

Function: gl-depth-mask flag

Flag is a boolean value specifies whether depth buffer should be written or not.

Function: gl-stencil-mask mask

Sets the mask bit pattern for the stencil buffer. Mask is an exact integer.

Testing and operating on fragments

Function: gl-scissor x y width height

Sets the scissor rectangle. If the scissor test is enabled (use (gl-enable GL_SCISSOR_TEST)), only the pixels that lie inside the rectangle are written.

Function: gl-alpha-func func ref

Sets the reference value and comparison function for the alpha test. Func may be either one of GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, or GL_NOTEQUAL. Ref sets the reference value, a real number clamped to be between 0.0 and 1.0.

Function: gl-stencil-func func ref mask

Sets the comparison function, the reference value, and a mask for stencil test. Func specifies the funciton, and its possible value is the same as gl-alpha-func’s. Ref is an integer reference value, and mask is an integer specifying bitwise mask. Before the comparison, the reference value and the fragment value are taken bitwise AND by mask.

Function: gl-stencil-op func zfail zpass

Speficies how the stencil buffer should be modified by the result of the stencil test. Each three parameter can take one of the following values independently: GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, or GL_INVERT.

Function: gl-depth-func func

Sets the comparison function for the depth test. Func may be one of the following constant value: GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, or GL_NOTEQUAL.

Function: gl-depth-range nearv farv

Defines an encoding for z-coordinates. Nearv and farv define the minimum and maximum values that can be stored in the depth buffer. By default, they’re 0.0 and 1.0, respectively.

Function: gl-logic-op opcode

Selects the logical operation to be performed, given an incoming (source) fragment and the pixel currently in the color buffer (destination). Opcode may be one of the following values: GL_CLEAR, GL_COPY, GL_NOOP, GL_SET, GL_COPY_INVERTED, GL_INVERT, GL_AND_REVERSE, GL_OR_REVERSE, GL_AND, GL_OR, GL_NAND, GL_NOR, GL_XOR, GL_EQUIV, GL_AND_INVERTED or GL_OR_INVERTED.

Function: gl-accum op value

Sets the accumulation buffer operation mode. Op may be one of the following values:

GL_ACCUM

Reads each pixel from the current selected buffer to read (by gl-read-buffer), multiplies its values by value, and adds the result into the accumulation buffer.

GL_LOAD

Same as GL_ACCUM but replacing the accumulation buffer by the result of multiplication, instead of adding it.

GL_RETURN

Takes the values from accumulation buffer, multiplies them with value, then write it to the current color buffer to write (by gl-draw-buffer).

GL_ADD

Adds value to each pixel in the accumulation buffer and write it back.

GL_MULT

Multiplies value to each pixel in the accumulation buffer and write it back. The result value is clamped to [-1.0, 1.0].


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.13 Selection and feedback

Function: gl-feedback-buffer type buffer
Function: gl-select-buffer buffer
Function: gl-render-mode mode
Function: gl-pass-through token
Function: gl-init-names
Function: gl-load-name name
Function: gl-push-name name
Function: gl-pop-name

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.14 Projection

Function: glu-pick-matrix x y w h vp
Function: glu-project objx objy objz model-mat proj-mat vp
Function: glu-un-project winx winy winz model-mat proj-mat vp
Function: glu-project! win obj model-mat proj-mat vp
Function: glu-un-project! obj win model-map proj-mat vp

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.15 Quadrics

Class: <glu-quadric>
Function: glu-quadric-draw-style quad style
Constant: GLU_POINT
Constant: GLU_LINE
Constant: GLU_FILL
Constant: GLU_SILHUETTE
Function: glu-quadric-orientation quad orientation
Constant: GLU_OUTSIDE
Constant: GLU_INSIDE
Function: glu-quadric-normals quad normals
Constant: GLU_SMOOTH
Constant: GLU_FLAT
Constant: GLU_NONE
Function: glu-quadric-texture quad texcoords
Function: glu-cylinder quad base-radius top-radius height slices stacks
Function: glu-sphere quad radius slices stacks
Function: glu-disk quad inner-radius outer-radius slices loops
Function: glu-partial-disk quad inner-radius outer-radius slices loops start-angle sweep-angle

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.16 Nurbs

Class: <glu-nurbs>
Function: glu-load-sampling-matrices nurbs model-matrix proj-matrix viewport
Function: glu-nurbs-property nurbs property value
Function: glu-get-nurbs-property nurbs property
Function: glu-begin-curve nurbs
Function: glu-end-curve nurbs
Function: glu-nurbs-curve nurbs knot stride ctlarray order type
Function: glu-begin-surface nurbs
Function: glu-end-surface nurbs

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.17 Polygon tesselation

Class: <glu-tesselator>

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.18 Programmable shaders

Shader objects

Function: gl-create-shader-object-arb type

[GL_ARB_shader_objects] Creates a new shader object and returns its handle. Type can be either GL_VERTEX_SHADER_ARB or GL_FRAGMENT_SHADER_ARB.

Function: gl-shader-source-arb shader strings

[GL_ARB_shader_objects] Sets the source code of the shader, whose handle is shader. You can give the source code as a list of strings to strings. All strings are concatenated internally in the OpenGL driver.

Function: gl-compile-shader-arb shader

[GL_ARB_shader_objects] Compile the source code attached to the shader, whose handle is shader. You can query the result of the compilation by passing GL_OBJECT_COMPILE_STATUS_ARB to gl-get-object-parameter-arb; it returns #t if the compilation succeeded, or #f if failed. The information about the compilation can be obtained by gl-get-info-log-arb.

Function: gl-create-program-object-arb

[GL_ARB_shader_objects] Creates a new program object and returns its handle.

Function: gl-attach-object-arb program shader

[GL_ARB_shader_objects] Attach a shader whose handle is shader to the program whose handle is program.

Function: gl-detach-object-arb program shader

[GL_ARB_shader_objects] Detach a shader from a program.

Function: gl-link-program-arb program

[GL_ARB_shader_objects] Link the program object. The result of linking can be queried by passing GL_OBJECT_LINK_STATUS_ARB to gl-get-object-parameter-arb.

Function: gl-use-program-object-arb program

[GL_ARB_shader_objects] Installs the program to the current rendering state.

Function: gl-delete-object-arb handle

[GL_ARB_shader_objects] Deletes either a shader object or a program object specified by handle.

Function: gl-get-object-parameter-arb object pname

[GL_ARB_shader_objects] Queries the value of pname of the shader or the program specified by object. The following values are accepted as pname: GL_OBJECT_TYPE_ARB, GL_OBJECT_SUBTYPE_ARB, GL_OBJECT_DELETE_STATUS_ARB, GL_OBJECT_COMPILE_STATUS_ARB, GL_OBJECT_LINK_STATUS_ARB, GL_OBJECT_VALIDATE_STATUS_ARB, GL_OBJECT_INFO_LOG_LENGTH_ARB, GL_OBJECT_ATTACHED_OBJECTS_ARB, GL_OBJECT_ACTIVE_ATTRIBUTES_ARB, GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB, GL_OBJECT_ACTIVE_UNIFORMS_ARB, GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB, and GL_OBJECT_SHADER_SOURCE_LENGTH_ARB. The procedure returns an integer value.

Function: gl-get-shader-source-arb shader

[GL_ARB_shader_objects] Returns the shader source code of a shader object shader in a string.

Function: gl-get-info-log-arb handle

[GL_ARB_shader_objects] Returns the information log of an object pointed by handle.

Function: gl-get-handle-arb pname

[GL_ARB_shader_objects] Returns the handle to an object that is used in the current state. The only argument accepted currently as pname is GL_PROGRAM_OBJECT_ARB, which returns the handle to the current program object.

Function: gl-get-attached-objects-arb program

[GL_ARB_shader_objects] Rethrns a vector of GL object handles that are attached to the program.

Function: gl-validate-program-arb program

[GL_ARB_shader_objects] Checks whether the program can execute in the current GL state. The result is stored in program’s log.

Specifying vertex attributes

Function: gl-vertex-attrib-arb index values
Function: gl-vertex-attrib-arb index v0 &rest v1 v2 v3

[GL_ARB_vertex_program] Sets the generic vertex attribute specified by index. In the first form, you can pass f32, f64, or s16vector of size 1 to 4, or u8, s8, u16, s32, or u32vector of size 4. In the second form, you can pass 1 to 4 real numbers (they are interpreted as C doubles and glVertexAttrib4dARB is called).

Function: gl-vertex-attrib-4n-arb index values
Function: gl-vertex-attrib-4n-arb index v0 v1 v2 v3

[GL_ARB_vertex_program] These variations can be used to pass normalized values. The first form accepts s8, u8, s16, u16, s32, u32, f32 and f64vector of size 4. The second value takes four integers, whose lower 8bits are taken as unsigned byte and passed to glVertexAttrib4NubARB.

Function: gl-vertex-attrib-pointer-arb index size vec &optional normalized stride offset

[GL_ARB_vertex_program] This is the generic version of vertex arrays. Index names the attribute, size specifies the number of components (1, 2, 3 or 4), and vec is a uniform vector that contains the array of values.

The optional boolean normalized argument tells whether the passed integer values should be mapped to normalized range (#t or taken as are #f, default). The optional stride argument specifies the gap between each set of values within vec. The optional offset argument tells GL to take values beginning from the offset-th element of vec.

Function: gl-enable-vertex-attrib-array-arb index
Function: gl-disable-vertex-attrib-array-arb index

[GL_ARB_vertex_program] Enable or disable a vertex attribute array specified by index.

Function: gl-bind-attrib-location-arb program index name

[GL_ARB_vertex_shader] Associates a user-defined attribute variable in the program object program with an index-th generic vertex attribute. Name is a string of the name of user-defined attribute as appears in the shader program.

Function: gl-get-attrib-location-arb program name

[GL_ARB_vertex_shader] Returns an integer index of the user-defined attribute name in the program. Must be called after program is linked.

Function: gl-get-active-attrib-arb program index

[GL_ARB_vertex_shader] Obtains information about the index-th user-defined attribute in the program. Must be called after program is linked.

It returns three values: the size of the attribute (1, 2, 3 or 4), the type of the attribute (an integer that matches one of the following constants: GL_FLOAT, GL_FLOAT_VEC2_ARB, GL_FLOAT_VEC3_ARB, GL_FLOAT_VEC4_ARB, GL_FLOAT_MAT2_ARB, GL_FLOAT_MAT3_ARB, or GL_FLOAT_MAT4_ARB.), and the name of the attribute.

Specifying uniform variables

Function: gl-get-uniform-location-arb program name

[GL_ARB_shader_objects] Returns an integer location of the uniform variable name of the program program.

Function: gl-uniform1-arb location vec
Function: gl-uniform1-arb location v0
Function: gl-uniform2-arb location vec
Function: gl-uniform2-arb location v0 v1
Function: gl-uniform3-arb location vec
Function: gl-uniform3-arb location v0 v1 v2
Function: gl-uniform4-arb location vec
Function: gl-uniform4-arb location v0 v1 v1 v3

[GL_ARB_shader_objects] Sets a value of the uniform variable specified by location. gl-uniform1-arb sets a single component value (e.g. float) gl-uniform2-arb sets a double component value (e.g. vec2) etc.

The first form of each function takes either an s32vector or f32vector. It can have a size multiple of the number of components to set an array uniform variable (e.g. you can pass an f32vector of size 8 to fill vec2[2]).

The second form just sets the component(s) of a single uniform variable. The arguments v0 to v3 must be real numbers, and coerced to C float (i.e. glUniform*fARB is used).

Function: gl-uniform-matrix2-arb location transpose v
Function: gl-uniform-matrix3-arb location transpose v
Function: gl-uniform-matrix4-arb location transpose v

[GL_ARB_shader_objects] Sets a matrix uniform variable (or an array of matrix uniform variables) specified by location. A boolean flag transpose specifies whether the matrix should be transposed. The v argument must be a f32vector of size multiple of 4, 9, or 16, respectively.

Function: gl-get-active-uniform-arb program index

[GL_ARB_shader_objects] Returns informaton about the index-th uniform variable of program.

Returns three values. The first one is the size, either 1, 2, 3 or 4. The second value is the type, which is an integer that matches one of the following constants: GL_FLOAT, GL_FLOAT_VEC(1|2|3|4)_ARB, GL_INT, GL_INT_VEC(1|2|3|4)_ARB, GL_BOOL, GL_BOOL_VEC(1|2|3|4)_ARB, GL_FLOAT_MAT(2|3|4)_ARB. And the third value is the name of the uniform variable.

Vertex and fragment programs

These APIs are for low-level vertex/fragment pipeline programming.

Function: gl-gen-programs-arb n

[GL_ARB_vertex_program] Generates N names (integers) for the new programs and returns them in an s32vector.

Function: gl-delete-programs-arb programs

[GL_ARB_vertex_program] Deletes programs whose names are specified by an s32vector programs.

Function: gl-is-program-arb prog-id

[GL_ARB_vertex_program] Returns #t if an integer prog-id refers to a valid program.

Function: gl-bind-program-arb target prog-id

[GL_ARB_vertex_program] Binds a program specified by prog-id to a target, which is either GL_VERTEX_PROGRAM_ARB or GL_FRAGMENT_PROGRAM_ARB.

Function: gl-program-string-arb target format text

[GL_ARB_vertex_program] Sets the source code of the program currently bound to the target (GL_VERTEX_PROGRAM_ARB or GL_FRAGMENT_PROGRAM_ARB).

Format must be GL_PROGRAM_FORMAT_ASCII_ARB. Text is a string for the program source.

Function: gl-program-env-parameter-arb target param-id args
Function: gl-program-env-parameter-arb target param-id arg0 arg1 arg2 arg3
Function: gl-program-local-parameter-arb target param-id args
Function: gl-program-local-parameter-arb target param-id arg0 arg1 arg2 arg3

[GL_ARB_vertex_program] Sets the value of the environment and local parameter specified by param-id of the program currently bount to the target. In the first form of each, args must be either f32 or f64vector of size 4 or <vector4f> object.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5. GLUT API


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1 GLUT window manipulation

Function: glut-init args
Function: glut-init-display-mode mode
Constant: GLUT_RGB
Constant: GLUT_RGBA
Constant: GLUT_INDEX
Constant: GLUT_SINGLE
Constant: GLUT_DOUBLE
Constant: GLUT_ACCUM
Constant: GLUT_ALPHA
Constant: GLUT_DEPTH
Constant: GLUT_STENCIL
Constant: GLUT_MULTISAMPLE
Constant: GLUT_STEREO
Constant: GLUT_LUMINANCE
Function: glut-init-display-string string
Function: glut-init-window-size width height
Function: glut-init-window-position x y
Function: glut-main-loop
Function: glut-create-widnow name
Function: glut-create-sub-window win x y width height
Function: glut-destroy-window win
Function: glut-post-redisplay
Function: glut-post-window-redisplay win
Function: glut-swap-buffers
Function: glut-get-window
Function: glut-set-window win
Function: glut-set-window-title title
Function: glut-set-icon-title title
Function: glut-position-window x y
Function: glut-reshape-window width height
Function: glut-push-window
Function: glut-pop-window
Function: glut-iconify-window
Function: glut-show-window
Function: glut-hide-window
Function: glut-full-screen
Function: glut-set-cursor cursor
Constant: GLUT_CURSOR_RIGHT_ARROW
Constant: GLUT_CURSOR_LEFT_ARROW
Constant: GLUT_CURSOR_INFO
Constant: GLUT_CURSOR_DESTROY
Constant: GLUT_CURSOR_HELP
Constant: GLUT_CURSOR_CYCLE
Constant: GLUT_CURSOR_SPRAY
Constant: GLUT_CURSOR_WAIT
Constant: GLUT_CURSOR_TEXT
Constant: GLUT_CURSOR_CROSSHAIR
Constant: GLUT_CURSOR_UP_DOWN
Constant: GLUT_CURSOR_LEFT_RIGHT
Constant: GLUT_CURSOR_TOP_SIDE
Constant: GLUT_CURSOR_BOTTOM_SIDE
Constant: GLUT_CURSOR_LEFT_SIDE
Constant: GLUT_CURSOR_RIGHT_SIDE
Constant: GLUT_CURSOR_TOP_LEFT_CORNER
Constant: GLUT_CURSOR_TOP_RIGHT_CORNER
Constant: GLUT_CURSOR_BOTTOM_RIGHT_CORNER
Constant: GLUT_CURSOR_BOTTOM_LEFT_CORNER
Constant: GLUT_CURSOR_INHERIT
Constant: GLUT_CURSOR_NONE
Constant: GLUT_CURSOR_FULL_CROSSHAIR
Function: glut-warp-pointer x y

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2 GLUT overlay

Function: glut-establish-overlay
Function: glut-remove-overlay
Function: glut-use-layer layer
Function: glut-post-overlay-redisplay
Function: glut-post-window-overlay-redisplay win
Function: glut-show-overlay
Function: glut-hide-overlay

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3 GLUT menu API

Function: glut-create-menu callback
Function: glut-destroy-menu menu
Function: glut-get-emnu
Function: glut-set-menu menu
Function: glut-add-menu-entry label value
Function: glut-add-sub-menu label submenu
Function: glut-change-to-menu-entry item label value
Function: glut-change-to-sub-menu item label submenu
Function: glut-remove-menu-item item
Function: gult-attach-menu button
Function: glut-detach-menu button

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4 GLUT callbacks

Function: glut-display-func fn
Function: glut-reshape-func fn
Function: glut-keyboard-func fn
Constant: GLUT_KEY_F1
Constant: GLUT_KEY_F2
Constant: GLUT_KEY_F3
Constant: GLUT_KEY_F4
Constant: GLUT_KEY_F5
Constant: GLUT_KEY_F6
Constant: GLUT_KEY_F7
Constant: GLUT_KEY_F8
Constant: GLUT_KEY_F9
Constant: GLUT_KEY_F10
Constant: GLUT_KEY_F11
Constant: GLUT_KEY_F12
Constant: GLUT_KEY_LEFT
Constant: GLUT_KEY_UP
Constant: GLUT_KEY_RIGHT
Constant: GLUT_KEY_DOWN
Constant: GLUT_KEY_PAGE_UP
Constant: GLUT_KEY_PAGE_DOWN
Constant: GLUT_KEY_HOME
Constant: GLUT_KEY_END
Constant: GLUT_KEY_INSERT
Function: glut-mouse-func fn
Constant: GLUT_LEFT_BUTTON
Constant: GLUT_MIDDLE_BUTTON
Constant: GLUT_RIGHT_BUTTON
Constant: GLUT_DOWN
Constant: GLUT_UP
Function: glut-motion-func fn
Function: glut-passive-motion-func fn
Function: glut-entry-func fn
Constant: GLUT_LEFT
Constant: GLUT_ENTERED
Function: glut-visibility-func fn
Constant: GLUT_NOT_VISIBLE
Constant: GLUT_VISIBLE
Function: glut-idle-func fn
Function: glut-timer-func millis fn value
Function: glut-menu-state-func fn
Function: glut-special-func fn
Function: glut-spaceball-motion-func fn
Function: glut-spaceball-rotate-func fn
Function: glut-spaceball-button-func fn
Function: glut-button-box-func fn
Function: glut-dials-func fn
Function: glut-tablet-motion-func fn
Function: glut-tablet-button-func fn
Function: glut-menu-status-func fn
Function: glut-overlay-dislay-func fn
Function: glut-window-status-func fn
Function: glut-keyboard-up-func fn
Function: glut-special-up-func fn
Function: glut-joystick-func fn interval

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5 GLUT colormap

Function: glut-set-color index r g b
Function: glut-get-color index component
Constant: GLUT_RED
Constant: GLUT_GREEN
Constant: GLUT_BLUE
Function: glut-copy-colormap win

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.6 GLUT state retrieval

Function: glut-get type
Constant: GLUT_WINDOW_X
Constant: GLUT_WINDOW_Y
Constant: GLUT_WINDOW_WIDTH
Constant: GLUT_WINDOW_HEIGHT
Constant: GLUT_WINDOW_BUFFER_SIZE
Constant: GLUT_WINDOW_STENCIL_SIZE
Constant: GLUT_WINDOW_DEPTH_SIZE
Constant: GLUT_WINDOW_RED_SIZE
Constant: GLUT_WINDOW_GREEN_SIZE
Constant: GLUT_WINDOW_BLUE_SIZE
Constant: GLUT_WINDOW_ALPHA_SIZE
Constant: GLUT_WINDOW_ACCUM_RED_SIZE
Constant: GLUT_WINDOW_ACCUM_GREEN_SIZE
Constant: GLUT_WINDOW_ACCUM_BLUE_SIZE
Constant: GLUT_WINDOW_ACCUM_ALPHA_SIZE
Constant: GLUT_WINDOW_DOUBLEBUFFER
Constant: GLUT_WINDOW_RGBA
Constant: GLUT_WINDOW_PARENT
Constant: GLUT_WINDOW_NUM_CHILDREN
Constant: GLUT_WINDOW_COLORMAP_SIZE
Constant: GLUT_WINDOW_NUM_SAMPLES
Constant: GLUT_WINDOW_STEREO
Constant: GLUT_WINDOW_CURSOR
Constant: GLUT_SCREEN_WIDTH
Constant: GLUT_SCREEN_HEIGHT
Constant: GLUT_SCREEN_WIDTH_MM
Constant: GLUT_SCREEN_HEIGHT_MM
Constant: GLUT_MENU_NUM_ITEMS
Constant: GLUT_DISPLAY_MODE_POSSIBLE
Constant: GLUT_INIT_WINDOW_X
Constant: GLUT_INIT_WINDOW_Y
Constant: GLUT_INIT_WINDOW_WIDTH
Constant: GLUT_INIT_WINDOW_HEIGHT
Constant: GLUT_INIT_DISPLAY_MODE
Constant: GLUT_ELAPSED_TIME
Constant: GLUT_WINDOW_FORMAT_ID
Function: glut-device-get type
Constant: GLUT_HAS_KEYBOARD
Constant: GLUT_HAS_MOUSE
Constant: GLUT_HAS_SPACEBALL
Constant: GLUT_HAS_DIAL_AND_BUTTON_BOX
Constant: GLUT_HAS_TABLET
Constant: GLUT_NUM_MOUSE_BUTTONS
Constant: GLUT_NUM_SPACEBALL_BUTTONS
Constant: GLUT_NUM_BUTTON_BOX_BUTTONS
Constant: GLUT_NUM_DIALS
Constant: GLUT_NUM_TABLET_BUTTONS
Constant: GLUT_DEVICE_IGNORE_KEY_REPEAT
Constant: GLUT_DEVICE_KEY_REPEAT
Constant: GLUT_HAS_JOYSTICK
Constant: GLUT_OWNS_JOYSTICK
Constant: GLUT_JOYSTICK_BUTTONS
Constant: GLUT_JOYSTICK_AXES
Constant: GLUT_JOYSTICK_POLL_RATE
Function: glut-extension-supported name
Function: glut-get-modifiers
Constant: GLUT_ACTIVE_SHIFT
Constant: GLUT_ACTIVE_CTRL
Constant: GLUT_ACTIVE_ALT
Function: glut-layer-get type
Constant: GLUT_OVERLAY_POSSIBLE
Constant: GLUT_LAYER_IN_USE
Constant: GLUT_HAS_OVERLAY
Constant: GLUT_TRANSPARENT_INDEX
Constant: GLUT_NORMAL_DAMAGED
Constant: GLUT_OVERLAY_DAMAGED

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7 GLUT font

Class: <glut-font>
Function: glut-bitmap-character font character
Function: glut-bitmap-width font character
Function: glut-stroke-character font character
Function: glut-stroke-width font character
Function: glut-bitmap-length font string
Function: glut-stroke-length font string

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.8 GLUT pre-built models

Function: glut-wire-sphere radius slices stacks
Function: glut-solid-sphere radius slices stacks
Function: glut-wire-cone radius height slices stacks
Function: glut-solid-cone radius height slices stacks
Function: glut-wire-cube size
Function: glut-solid-cube size
Function: glut-wire-torus inner outer sides rings
Function: glut-solid-torus inner outer sides rings
Function: glut-wire-dodecahedron
Function: glut-solid-dodecahedron
Function: glut-wire-teapot size
Function: glut-soild-teapot size
Function: glut-wire-octahedron
Function: glut-solid-octahedron
Function: glut-wire-tetrahedron
Function: glut-solid-tetrahedron
Function: glut-wire-icosahedron
Function: glut-solid-icosahedron

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6. Vectors and matrices

Module: gl.math3d

The module provides vector and matrix operations useful for 3D computer graphics.

Actually this module itself doesn’t depend on GL; you can use this module alone to do matrix calculations. However, the structure of objects are designed so that they can be passed directly to Gauche-gl functions, reducing the overhead of type conversions.

The purpose of this module is to provide reasonable performance. So the operations are fixed to 3D homogeneous coordinates, i.e. a vector is 4-element column vector, and a matrix is 4x4 square matrix. If you want more flexibility, <array> class in gauche.array provides much more generic structures, trading performance.

Elements of vectors and matrices are represented in float internally. When you retrieve each element individually, it is converted to double, so you might see some precision errors. There are lots of operations directly manipulate group of elements without retrieving each element to Scheme world, avoiding overhead of conversion.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.1 Vectors and points

Class: <vector4f>
Class: <point4f>

4x1 column vectors. Vector4f is intended to be used to represent a vector, and point4f is to a point, but as far as OpenGL concerns, both are just an array of four floats, x, y, z and w.

These classes inherit <sequence> and <collection> classes. So if you import gauche.sequence module, you can use generic function such as ref and (setter ref) to get/set individual elements. The generic version of map and for-each can also be used on the vector4f and point4f instances.

Aside from the type, the only difference is that the default value of w component— it’s 0.0 for vectors, and 1.0 for points. So usual transformation produces expected results; for example point plus vector becomes point, vector plus vector becomes vector, and translating point changes its coordinates but translating vectors doesn’t, and so on. However, you can set w component to other value to do nontrivial operations.

Reader syntax: #,(vector4f x y z w)
Reader syntax: #,(point4f x y z w)

These SRFI-10 syntax can be used to denote literal <vector4f> and <point4f> instance, respectively.

The write methods are defined so that the instance is written out in this form, and can be read back later.

Function: vector4f? obj
Function: point4f? obj

Returns true iff obj is vector4f and point4f, respectively.

Function: vector4f x y z &optional (w 0.0)
Function: point4f x y z &optional (w 1.0)

Creates a vector4f and point4f instance with given values, respectively.

Function: make-vector4f
Function: make-point4f

Another way to create a vector4f and a point4f. The first returns #,(vector4f 0.0 0.0 0.0 0.0), and the latter returns #,(point4f 0.0 0.0 0.0 1.0).

Function: list->vector4f l
Function: list->point4f l

Convert a list of three or four real numbers to a vector4f and a point4f, respectively. If l is not a list of three or four real numbers, an error is signalled.

 
(list->vector4f l)
  ≡ (apply vector4f l)
  ≡ (coerce-to <vector4f> l)
Function: vector4f->list v
Function: point4f->list p

Convert a vector4f and a point4f to a list of four real numbers, respectively.

 
(vector4f->list v)
  ≡ (coerce-to <list> v)
  ≡ (map (cut ref v <>) (iota 4))
Function: f32vector->vector4f v &optional start
Function: f32vector->point4f v &optional start

Creates a vector4f or a point4f, initializing by the elements of f32vector v. V must be longer than 4, and the first four elements are used to initialize the created vector or point.

If optional start argument is given, it specifies an index of v from which the initial values are taken; that is, start, start+1, start+2 and start+3-th elements are used to create a vector or a point. This allows to create vectors from plain float array:

 
(map (lambda (off) (f32vector->vector4f vec (* off 4)))
     (iota (/ (size-of vec) 4)))

The conversion can be done using coerce-to, as well.

 
(f32vector->vector4f vec)
  ≡ (coerce-to <vector4f> vec)
Function: vector4f->f32vector v
Function: point4f->f32vector p

Convert a vector4f v or a point4f p to four-element f32vector.

 
(vector4f->f32vector v)
 ≡ (coerce-to <f32vector> v)
Function: vector4f-copy v
Function: point4f-copy p

Returns a new copy of vector4f v or point4f p, respectively.

Function: vector4f-copy! dstv srcv
Function: point4f-copy! dstp srcp

Destructively sets the content of srcv or srcp to dstv or dstp, respectively.

Function: vector4f-set! v k value
Function: point4f-set! p k value

Sets a real number value to k-th element of a vector4f v or a point4f p.

 
(vector4f-set! v k value)
  ≡ (set! (ref v k) value)
Function: vector4f-ref v k &optional fallback
Function: point4f-ref p k &optional fallback

Gets a value of k-th element of a vector4f v or a point4f p. If k is out of range, an error is signalled, unless fallback is provided, in such a case fallback is returned.

 
(vector4f-ref v k)
  ≡ (ref v k)
Function: vector4f-dot x y

Returns a dot product of two vector4fs, x and y.

Function: vector4f-cross x y

Returns a cross product of two vector4fs, x and y. (w element is ignored).

Function: vector4f-norm v

Returns the norm (length) of the vector v.

Function: vector4f-normalize x
Function: vector4f-normalize! x

Returns a normalized vector of vector4f x. Vector4f-normalize allocates a new vector, while vector4f-normalize! modifies the original vector.

As a special case, if x is a vector of length 0, a vector of length 0 is returned.

Function: vector4f-add x y
Function: vector4f-sub x y
Function: vector4f-add! x y
Function: vector4f-sub! x y

Returns a sum of two vector4fs, x and y. The destructive version modifies x.

Function: point4f-add x y
Function: point4f-add! x y

Adds a point4f x and a vector4f y, and returns a translated point. The destructive version modifies x.

Function: point4f-sub x y

Subtracts either a vector4f or a point4f y from a point4f x. If y is a vector4f, returns a translated point. If y is a point4f, returns a vector4f from point y to point x.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.2 Vector arrays and point arrays

Class: <vector4f-array>
Class: <point4f-array>

Represents an array of vector4fs and point4fs. This is an efficient way to keep an array of vectors or points, for the elements are packed in a simple float array. They are especially useful to work with GL’s vertex array feature. gl-vertex-pointer can take <point4f-array>, and gl-normal-pointer can take <vector4f-array>.

It is also possible to "view" a plain f32vector as <vector4f-array> or <point4f-array> without copying its content, by f32vector->vector4f-array/shared and f32vector->point4f-array/shared. Combined to read-block!, you can do efficient binary I/O of vertex arrays, for example.

Inherits <sequence> and <collection>. When viewed as a sequence or a collection, they behaves like sequence or collection of vector4f and point4f objects, respectively.

Function: make-vector4f-array len &optional init-vector
Function: make-point4f-array len &optional init-point

Creates a vector4f-array or point4f-array with len elements. Each element is initialized by a vector4f init-vector or a point4f init-point if provided.

Function: vector4f-array? obj
Function: point4f-array? obj

Returns true iff obj is a vector4f-array or a point4f-array, respectively.

Function: vector4f-array-length array
Function: point4f-array-length array

Returns length (number of vectors/points) in array array.

Reader syntax: #,(vector4f-array len elt …)
Reader syntax: #,(point4f-array len elt …)

Vector4f-array and point4f-array have external representation using this SRFI-10 syntax. Len is a length of array, and each elt is a list of four floats representing each element of the array.

 
(f32vector->vector4f-array #f32(1 2 3 4 6 7 4 3))
  ⇒ #,(vector4f-array 2 (1 2 3 4) (6 7 4 3) )
Function: list->vector4f-array list
Function: list->point4f-array list

From given list of vector4fs or point4fs, creates and returns a vector4f-array or point4f-array, respectively.

Function: f32vector->vector4f-array v
Function: f32vector->point4f-array v

Converts f32vector v to a vector4f-array or a point4f-array. The length of v must be multiple of four. The content of v is copied.

 
(f32vector->vector4f-array v)
  ≡ (coerce-to <vector4f-array> v)
Function: f32vector->vector4f-array/shared v
Function: f32vector->point4f-array/shared v

Like above, but the content of v is shared by the result array, instead of being copied. So the modification of result array will be visible from original f32vector v and vice versa. It will allow efficient handling of large vertex arrays.

Function: vector4f-array->f32vector array
Function: point4f-array->f32vector array

Converts a vector4f-array or a point4f-array array to a f32vector.

 
(vector4f-array->f32vector array)
  ≡ (coerce-to <f32vector> array)
Function: vector4f-array-set! array i vector
Function: point4f-array-set! array i point

Sets a vector4f vector or a point4f point to i-th element of vector4f-array or point4f-array array, respectively.

 
(vector4f-array-set! array i vector)
  ≡ (set! (ref array i) vector)
Function: vector4f-array-ref array i &optional fallback
Function: point4f-array-ref array i &optional fallback

Returns a vector4f or a point4f which is the i-th element of array array, respectively. If k is out of range, an error is signalled, unless fallback is provided, in such a case fallback is returned.

 
(vector4f-array-ref array i)
  ≡ (ref array i)

(ref #,(vector4f-array 2 (1 2 3 4) (6 7 4 3))  1)
  ⇒ #,(vector4f 6 7 4 3)
Function: vector4f-array-ref/shared array i &optional fallback
Function: point4f-array-ref/shared array i &optional fallback

Like above, but the returned vector4f or point4f shares the storage with the original array. Thus the modification of the result vector or point will be visible from array, and vice versa.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3 Matrices

Class: <matrix4f>

4x4 matrix. Internally it is represented as an array of 16 floats, stored in column-major order. (It is the same order OpenGL uses, so it can be passed to OpenGL calls without overhead).

Inherits <sequence> and <collection>. When a matrix4f is treated as a sequence, it works as if it is a single sequence of floats in column-major order.

Function: make-matrix4f &optional init

Returns a new matrix4f instance. If init is omitted, the matrix is a unit matrix. Otherwise, init must be a f32vector of length 16, and the elements in the matrix is initialized by ones in f32vector.

 
;; Creates a matrix like this:
;;    1 2 3 4
;;    0 1 0 5
;;    0 0 1 6
;;    0 0 0 1

(make-matrix4f '#f32vector(1 0 0 0
                           2 1 0 0
                           3 0 1 0
                           4 5 6 1))
Function: matrix4f m00 m10 m20 m30 m01 m11 m21 m31 m02 m12 m22 m32 m03 m13 m23 m33

Creates a new matrix4f instance with give values.

Function: matrix4f? obj

Returns true iff obj is a matrix4f.

Reader syntax: #,(matrix4f elt …)

A matrix4f is represented extrenally using SRFI-10 syntax. The elements are listed in column-major order.

Function: list->matrix4f l
Function: matrix4f->list m

Converts between list of 16 real numbers and matrix4f.

Function: f32vector->matrix4f v &optional start

Creates a new matrix4f and initializes it with 16 elements in f32vector v. If optional start is given, it specifies the start offset in vector v to be used as initial values. The f32vector v must have enough length.

Function: f32vector->matrix4f! m v &optional (start 0)

Extract 16 flonums in the f32vector v starting from the index start, and fill the matrix4f m with them. The f32vector v must have enough length.

Function: matrix4f->f32vector m

Returns a new f32vector that has elements from matrix4f m.

Function: matrix4f-copy m

Returns a new copy of m.

Function: matrix4f-copy! dstm srcm

Copies contents of srcm to dstm.

Function: matrix4f-set! m i value

Sets a real number value to i-th element of matrix m. Since the matrix is laid out in column-major order, the one-dimensional index m{i} and two-dimensional index m(i,j) corresponds as follows:

 
  m(0,0) = m{0}   m(0,1) = m{4}   m(0,2) = m{8}   m(0,3) = m{12}
  m(1,0) = m{1}   m(1,1) = m{5}   m(1,2) = m{9}   m(1,3) = m{13}
  m(2,0) = m{2}   m(2,1) = m{6}   m(2,2) = m{10}  m(2,3) = m{14}
  m(3,0) = m{3}   m(3,1) = m{7}   m(3,2) = m{11}  m(3,3) = m{15}
Function: matrix4f-ref m i &optional fallback

Returns the i-th element of matrix m. If i is out of range, an error is signalled, unless fallback is provided, in such a case fallback is returned.

Function: matrix4f-set2! m i j value

Sets value to (i, j) element of matrix m.

Function: matrix4f-ref2 m i j

Returns the (i, j) element of matrix m.

Function: matrix4f-row m i
Function: matrix4f-column m i
Function: matrix4f-column/shared m i

Returns i-th row vector or i-th column vector of matrix m, as a vector4f instance.

Furthermore, the returned vector from matrix4f-column/shared shares the storage with m.

Function: matrix4f-mul m obj

Obj may be a scalar (real number), a vector4f, a point4f, or a matrix4f. Returns m x obj.

Function: matrix4f-mul! m obj

Obj may be a scalar or a matrix4f. Matrix m is multiplied by obj, and the result is set to m destructively.

Function: matrix4f-transpose m
Function: matrix4f-transpose! m

Returns a transposed matrix of m. The destructive version modifies m.

Function: matrix4f-determinant m

Returns a determinant of m.

Function: matrix4f-inverse m &optional (error-on-singular? #t)
Function: matrix4f-inverse! m &optional (error-on-singular? #t)

Returns a inverse matrix of m. The destructive version modifies m. If given m is a singular matrix, an error is signalled by default. However, if #f is given to the optional error-on-singular? argument, #f is returned in such a case.

Function: translation->matrix4f translation-vector
Function: translation->matrix4f! m translation-vector

Returns a matrix which represents a translation by translation-vector, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in translation-vector is used. The destructive version updates m.

Function: rotation->matrix4f axis angle
Function: rotation->matrix4f! m axis angle

Returns a matrix which represents a rotation around axis by angle radian. Axis must be a vector4f or a f32vector of length 3 or 4, and must be normalized. The result is undefined if anormalized vector is passed as axis. The destructive version updates m.

Function: scale->matrix4f scale-vector
Function: scale->matrix4f! m scale-vector

Returns a matrix which represents a scale by scale-vector, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in scale-vector is used. Each element of scale-vector represents the scale factor along x, y, and z axis. The destructive version updates m.

Function: trs->matrix4f translation rotation-axis rotation-angle scale
Function: trs->matrix4f! m translation rotation-axis rotation-angle scale

This combines above three procedure. Returns a matrix that represents translation, rotation and scale, specified by translation, rotation-axis, rotation-angle and scale. The destructive version updates m.

If T, R and S, are the matrices that represent translation, rotation and scale, respectively, then these procedures effectively calculates a matrix TRS.

Function: tqs->matrix4f translation rotation-quat scale
Function: tqs->matrix4f! m translation rotation-quat scale

A variation of trs->matrix4f. Instead of axis and angle, rotation is represented by a quaternion rotation-quat. See section Quaternions, for more details about quaternions.

Function: euler-angle->matrix4f xangle yangle zangle &optional order
Function: euler-angle->matrix4f! m xangle yangle zangle &optional order

Returns a matrix that represents rotation along x, y and z axis by xangle, yangle, and zangle, respectively.

The order of rotation can be specified by the optional argument order, which may be one of the symbols xyz, xzy, yzx, yxz, zxy, or zyx. For example, symbol xyz means rotation around x-axis, then y-axis, then z-axis. Thus, if we write each rotation as Rx, Ry, and Rz, the returned matrix is RzRyRx. The default value of order is xyz.

The desrtuctive version modifies m.

Function: matrix4f-decompose m

Matrix m is a composition of translation, rotation, shear and scale. Suppose transformation is applied in the reverse order. This procedure decompose m into each individual transformation.

Returns five values.

  • A flag to indicate if m is non-singular.
  • A translation vector t, in vector4f. The first three elements of t are for x, y, and z translations.
  • A rotation matrix r, in matrix4f. This is an orthogonal matrix represents rotation component.
  • A shear vector h, in vector4f. The first three elements of h are for xy, xz and yz shear factors.
  • A scale vector s, in vector4f. The first three elements of s are fof x, y, and z scale factors.

If m is singular, certain part of rotation matrix can’t be recovered. In such a case, r becomes also singular matrix.

If the original matrix has negative scale factor in any of x, y, or z scale, the decomposed scale factor will have all negative components. The signs of elements of r are adjusted accordingly.

Due to the precision errors, you will see small values appear in shear component even m is pure TRS matrix.

Function: matrix4f-decompose! m t r h s

Linear update version of matrix4f-decompose. The result vectors and matrices are stored in t, r, h and s. The return value is a boolean value indicates m is non-singular or not.

Function: matrix4f->translation m

Extract the translation component from the given TRS matrix m and returns it as a <vector4f>.

Function: matrix4f->translation! v m

Extract the translation component from the given TRS matrix m and stores the result into a <vector4f> v. Returns v.

Function: matrix4f->rotation m

From given orthogonal matrix m, extracts and returns and rotation axis and angle, as a vector4f and a real number.

Function: matrix4f->rotation! v m

Same as above, except the storage of vector4f v is reused to store the result axis.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.4 Quaternions

Class: <quatf>

Quaternions. Internally quaternions are represented as just an array of four floats; the first three are the vector component and the last is the scalar component.

Inherits <sequence> and <collection>. When viewed as sequence, it is just like a vector of four floats.

Function: quatf? obj

Returns true iff obj is a quaternion.

Reader syntax: #,(quatf x y z w)

External representation of quaternion xi+yj+zk+w.

Function: make-quatf &optional axis (angle 0)

Returns a new unit quaternion that represents a rotation around vector axis by angle radians. Axis can be a vector4f, a point4f or a f32vector (only first three component is used). Axis must be a unit vector; if axis is anormalized, the result is undefined.

If both axis and angle is omitted, #,(quatf 0 0 0 1) is returned.

Function: quatf x y z w

Returns a new quaternion whose elements are initialized by x, y, z, w.

Function: list->quatf l
Function: quatf->list q

Converts between a list of four real numbers and a quaternion.

Function: f32vector->quatf x &optional start

Returns a new quaternion whose elements are initialized by the first four elements of f32vector x. If start is given, the initial value is taken starting from start-th index in x.

Function: quatf->f32vector q

Returns a new f32vector whose contents is the same as a quaternion q.

Function: quatf-copy q

Returns a fresh copy of a quaternion q.

Function: quatf-copy! dstq srcq

Copies contents of a quaternion srcq to a quaternion dstq.

Function: rotation->quatf! quat axis angle

Sets a quaternion quat so that it represents a rotation around a unit vector axis by angle angle radians. Axis can be a vector4f, a point4f or a f32vector (only first three component is used).

Function: vectors->quatf v w
Function: vectors->quatf! q v w

Given two unit vectors v and w, calculates and returns a quaternion that represents a rotation from v to w. The destructive version vectors->quatf! modifies q.

Function: axes->quatf v1 v2 w1 w2
Function: axes->quatf! q v1 v2 w1 w2

The arguments must be all unit vectors, v1 and v2 must be perpendicular, and also w1 and w2 must be perpendicular.

Calculates and returns a quaternion that represents a rotation which transforms v1 to w1, and v2 to w2, respectively. The destructive version stores the result into q.

Function: quatf-add p q
Function: quatf-add! p q
Function: quatf-sub p q
Function: quatf-sub! p q

Addition and subtraction of quaternions. The destructive version modifies the first argument.

Function: quatf-scale q s
Function: quatf-scale! q s

Multiplies a quaternion q by a scalar value s. The destructive version modifies q.

Function: quatf-mul p q
Function: quatf-mul! p q

Multiply two quaternions p and q. The destructive version modifies p as well.

Function: quatf-conjugate p
Function: quatf-conjugate! q p

Returns a conjugate of a quaternion p. The destructive version modifies q as well.

Function: quatf-transform q p

Transforms a vector or a point p by quaternion q, that is, returns qpq*, where q* is a conjugate of q.

This procedure assumes q is normalized.

P can be a vector4f, a point4f or a f32vector (only first three elements are used). Returns the same type of object as p.

Function: quatf-norm q

Returns norm of q.

Function: quatf-normalize q
Function: quatf-normalize! q

Returns normalized quaternion of q. The destructive version modifies q.

Function: quatf->matrix4f q
Function: quatf->matrix4f! m q

Returns a matrix that represents a rotation specified by a unit quaternion q. The behavior is undefined if q is not normalized. The destructive version modifies m.

Function: matrix4f->quatf m
Function: matrix4f->quatf! q m

Extracts the rotation component of a matrix m and returns a quaterion that represents the rotation. Matrix4f->quatf! also uses q as the storage to store the result.

Function: quatf-slerp p q t
Function: quatf-slerp! r p q t

Returns a quaternion that interpolates between two unit quaternions p and q, by a scalar value t. The destructive version modifies r.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7. Simple utilities

This chapter covers gl.simple.* modules. They are provided for the convenience of those who wants quick experiment with Gauche-gl alone, without a hassle to install a bunch of other modules. Their features are pretty limited, but you may find them handy when you need to hack up some throwaway script that need to show some graphics on the screen.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.1 Simple image handling

Module: gl.simple.image

OpenGL doesn’t provide any means of reading/writing image data, and it should be covered by other Gauche extensions. However, it is sometimes handy to have simple means to handle external image data, so that you can do some experiment with Gauche-gl alone.

This module provides a minimal support to handle external image data, so that one can do some experiment in Gauche-gl alone.

The functionality might be extended over time, but this is never intended to be a full featured image library. A separate Gauche extension should be a better place to have it.

Currently, only reading from 8bit SGI image file is supported. It is written in pure Scheme, so don’t expect the performance.

Function: read-sgi-image filename
Function: read-sgi-image-from-port port

Reads an image data in SGI format from the named file or the input port, respectively.

Only 8bit-per-channel, direct color mode is supported.

Returns four values: the image’s width in pixels, its height in pixels, number of channels (e.g. 1 for grayscale, 3 for RGB, 4 for RGBA), and the image data in u8vector. The pixel data is packed, i.e. there’s no padding between each pixel nor each scanline.

Warning: be careful to call this function interactively. The image data vector is usually huge, and you have to wait long for the REPL to display the entire result.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.2 Simple viewer

Module: gl.simple.viewer

This module packages common operations to allow users to view 3D objects, controlling the camera by the mouse, and have some interactions with the keyboard.

A typical way of using the viewer is like the following:

 
(use gl)
(use gl.glut)
(use gl.simple.viewer)

(define (main args)
  (glut-init args)
  (simple-viewer-display <your-display-thunk>)
  (simple-viewer-set-key! <key> <handler> ...)
  (simple-viewer-window <name> :title <title> ...)
  (simple-viewer-run) ; loop forever.  type ESC to exit.
  0)

The viewer handles mouse drag (to move the camera), and also draws reference grid and axes by default for your convenience. You have to provide a thunk, which must draw your 3D object.

For the keyboard events, you can use a convenient API to associate handler to the key (character for normal keys, and constants like GL_LEFT_ARROW for special keys).

The reshape event is handled implicitly, though you can override it.

If you call simple-viewer-run, it enters the event loop and never returns. If you wish to keep REPL and/or other parts of your application run concurrently, the convenient way is to run simple-viewer-run in a separate thread.

 
(use gauche.threads)

(define (run-viewer)
  (thread-start! (make-thread simple-viewer-run #f)))

See also the code under ‘examples/simple’ directory of the source tree for more examples.

Function: simple-viewer-window name &key title mode parent width height x y

Creates a new GL window with name, which must be a symbol to identify the window later in the simple viewer framework. The window won’t be shown until simple-viewer-run is called.

Each window

Function: simple-viewer-display &optional display-thunk

Gets/sets the display thunk, which is called every time the GL window is redrawn. You can change the display thunk any time, even while the viewer thread is running.

If no argument is given, returns the current display thunk. It can be #f if no display thunk is set.

When the display thunk is called, the matrix mode is MODELVIEW and the camera transformation is already applied. The grid and axes are also drawn, unless you’ve customized them.

In the display thunk you can just write your model in the world coordinate system. It is guaranteed that the current color is white and line width is 1.0, but the states of other GL contexts are undefined, so you have to set them explicitly.

Function: simple-viewer-reshape &optional reshape-proc

Gets/sets the reshape procedure which is called every time the GL window configuration is changed. (It is also called when the GL window is shown first time.) You can change the reshape procedure any time, even while the viewer thread is running.

If no argument is given, returns the current reshape proc.

A reshape procedure is called with two arguments, the width and the height (in pixels) of the new GL window configuration. By default, gl.simple.viewer sets a procedure that changes viewport and projection matrix apopropriately; you need to change it only if you want a different behavior.

Function: simple-viewer-grid &optional grid-proc
Function: simple-viewer-axis &optional axis-proc

Gets/sets a procedure to draw a grid and axes. You can change these procedures any time, even while the viewer thread is running.

The grid-proc and axis-proc are called with no arguments every time the GL window is redrawn, before the display thunk is invoked. The matrix mode is MODELVIEW, the camera transformation is already applied, and lighting is disabled.

The default grid proc draws 10x10 grid on X-Z plane centered at the origin. The default axis proc draws a red line from origin to +X, a green line from origin to +Y, and a blue line from origin to +Z.

You can pass #f to disable grid and/or axis display.

If no argument is given, returns the current grid/axis proc, respectively.

Function: simple-viewer-set-key! key handler …

Even number of arguments must be given; the first of every two specifies the key, and the next one specifies the action when the key is pressed.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A. Indices


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.1 Function and Syntax Index

Jump to:   A   E   F   G   L   M   P   Q   R   S   T   V  
Index Entry Section

A
axes->quatf6.4 Quaternions
axes->quatf!6.4 Quaternions

E
euler-angle->matrix4f6.3 Matrices
euler-angle->matrix4f!6.3 Matrices

F
f32vector->matrix4f6.3 Matrices
f32vector->matrix4f!6.3 Matrices
f32vector->point4f6.1 Vectors and points
f32vector->point4f-array6.2 Vector arrays and point arrays
f32vector->point4f-array/shared6.2 Vector arrays and point arrays
f32vector->quatf6.4 Quaternions
f32vector->vector4f6.1 Vectors and points
f32vector->vector4f-array6.2 Vector arrays and point arrays
f32vector->vector4f-array/shared6.2 Vector arrays and point arrays

G
gl-accumTesting and operating on fragments
gl-active-texture-arbMultitexturing
gl-alpha-funcTesting and operating on fragments
gl-are-textures-resident!Texture objects
gl-array-element4.8 Vertex arrays
gl-attach-object-arbShader objects
gl-begin4.3 Drawing functions
gl-begin*4.3 Drawing functions
gl-bind-attrib-location-arbSpecifying vertex attributes
gl-bind-program-arbVertex and fragment programs
gl-bind-textureTexture objects
gl-bitmapPixel operations
gl-blend-color4.5 GL states for drawing
gl-blend-equation4.5 GL states for drawing
gl-blend-func4.5 GL states for drawing
gl-boolean-vectorGL boolean vectors
gl-boolean-vector-copyGL boolean vectors
gl-boolean-vector-fill!GL boolean vectors
gl-boolean-vector-lengthGL boolean vectors
gl-boolean-vector-refGL boolean vectors
gl-boolean-vector-set!GL boolean vectors
gl-boolean-vector?GL boolean vectors
gl-call-list4.7 Display lists
gl-call-lists4.7 Display lists
gl-call-lists4.7 Display lists
gl-call-lists4.7 Display lists
gl-clearClearing buffers
gl-clear-accumClearing buffers
gl-clear-colorClearing buffers
gl-clear-depthClearing buffers
gl-clear-indexClearing buffers
gl-clear-stencilClearing buffers
gl-client-active-texture-arbMultitexturing
gl-clip-plane4.5 GL states for drawing
gl-color4.3 Drawing functions
gl-color4.3 Drawing functions
gl-color-maskMasking buffers
gl-color-material4.9 Lighting
gl-color-pointer4.8 Vertex arrays
gl-color-sub-tableColor tables
gl-color-tableColor tables
gl-color-table-parameterColor tables
gl-compile-shader-arbShader objects
gl-convolution-filter-1dConvolutions
gl-convolution-filter-2dConvolutions
gl-convolution-parameterConvolutions
gl-copy-color-sub-tableColor tables
gl-copy-color-tableColor tables
gl-copy-convolution-filter-1dConvolutions
gl-copy-convolution-filter-2dConvolutions
gl-copy-pixelsPixel operations
gl-copy-tex-image-1dDefining textures
gl-copy-tex-image-2dDefining textures
gl-copy-tex-sub-image-1dDefining textures
gl-copy-tex-sub-image-2dDefining textures
gl-copy-tex-sub-image-3dDefining textures
gl-create-program-object-arbShader objects
gl-create-shader-object-arbShader objects
gl-cull-face4.5 GL states for drawing
gl-delete-lists4.7 Display lists
gl-delete-object-arbShader objects
gl-delete-programs-arbVertex and fragment programs
gl-delete-texturesTexture objects
gl-depth-funcTesting and operating on fragments
gl-depth-maskMasking buffers
gl-depth-rangeTesting and operating on fragments
gl-detach-object-arbShader objects
gl-disableCapabilities
gl-disable-client-stateCapabilities
gl-disable-vertex-attrib-array-arbSpecifying vertex attributes
gl-draw-arrays4.8 Vertex arrays
gl-draw-bufferSelecting color buffers
gl-draw-elements4.8 Vertex arrays
gl-draw-pixelsPixel operations
gl-draw-range-elements4.8 Vertex arrays
gl-edge-flag4.5 GL states for drawing
gl-edge-flag-pointer4.8 Vertex arrays
gl-enableCapabilities
gl-enable-client-stateCapabilities
gl-enable-vertex-attrib-array-arbSpecifying vertex attributes
gl-end4.3 Drawing functions
gl-end-list4.7 Display lists
gl-extension-available?4.2 GL feature checking
gl-feedback-buffer4.13 Selection and feedback
gl-finish4.3 Drawing functions
gl-flush4.3 Drawing functions
gl-fog4.5 GL states for drawing
gl-front-face4.5 GL states for drawing
gl-frustum4.6 Transformation
gl-gen-lists4.7 Display lists
gl-gen-programs-arbVertex and fragment programs
gl-gen-texturesTexture objects
gl-get-active-attrib-arbSpecifying vertex attributes
gl-get-active-uniform-arbSpecifying uniform variables
gl-get-attached-objects-arbShader objects
gl-get-attrib-location-arbSpecifying vertex attributes
gl-get-booleanState values
gl-get-boolean!State values
gl-get-clip-plane4.5 GL states for drawing
gl-get-color-table!Color tables
gl-get-doubleState values
gl-get-double!State values
gl-get-errorOther queries
gl-get-floatState values
gl-get-float!State values
gl-get-handle-arbShader objects
gl-get-histogramHistogram
gl-get-histogram-parameterHistogram
gl-get-info-log-arbShader objects
gl-get-integerState values
gl-get-integer!State values
gl-get-light4.9 Lighting
gl-get-material4.9 Lighting
gl-get-minmaxMinmax
gl-get-minmax-parameterMinmax
gl-get-object-parameter-arbShader objects
gl-get-pixel-mapPixel operations
gl-get-pixel-map!Pixel operations
gl-get-shader-source-arbShader objects
gl-get-stringOther queries
gl-get-tex-level-parameterTexture parameters
gl-get-tex-parameterTexture parameters
gl-get-uniform-location-arbSpecifying uniform variables
gl-hintHints
gl-histogramHistogram
gl-index-maskMasking buffers
gl-index-pointer4.8 Vertex arrays
gl-init-names4.13 Selection and feedback
gl-interleaved-arrays4.8 Vertex arrays
gl-is-enabledCapabilities
gl-is-list4.7 Display lists
gl-is-program-arbVertex and fragment programs
gl-is-textureTexture objects
gl-light4.9 Lighting
gl-light-model4.9 Lighting
gl-line-stipple4.5 GL states for drawing
gl-line-width4.5 GL states for drawing
gl-link-program-arbShader objects
gl-list-base4.7 Display lists
gl-load-identity4.6 Transformation
gl-load-matrix4.6 Transformation
gl-load-name4.13 Selection and feedback
gl-logic-opTesting and operating on fragments
gl-matrial4.9 Lighting
gl-matrix-mode4.6 Transformation
gl-minmaxMinmax
gl-mult-matrix4.6 Transformation
gl-multi-tex-coord-arbMultitexturing
gl-multi-tex-coord-arbMultitexturing
gl-new-list4.7 Display lists
gl-normal4.3 Drawing functions
gl-normal4.3 Drawing functions
gl-normal-pointer4.8 Vertex arrays
gl-ortho4.6 Transformation
gl-pass-through4.13 Selection and feedback
gl-pixel-mapPixel operations
gl-pixel-storePixel operations
gl-pixel-transferPixel operations
gl-pixel-zoomPixel operations
gl-point-size4.5 GL states for drawing
gl-polygon-mode4.5 GL states for drawing
gl-polygon-offset4.5 GL states for drawing
gl-polygon-stipple4.5 GL states for drawing
gl-pop-attribPush/pop attributes
gl-pop-client-attribPush/pop attributes
gl-pop-matrix4.6 Transformation
gl-pop-name4.13 Selection and feedback
gl-prioritize-texturesTexture objects
gl-program-env-parameter-arbVertex and fragment programs
gl-program-env-parameter-arbVertex and fragment programs
gl-program-local-parameter-arbVertex and fragment programs
gl-program-local-parameter-arbVertex and fragment programs
gl-program-string-arbVertex and fragment programs
gl-push-attribPush/pop attributes
gl-push-client-attribPush/pop attributes
gl-push-matrix4.6 Transformation
gl-push-matrix*4.6 Transformation
gl-push-name4.13 Selection and feedback
gl-raster-pos4.3 Drawing functions
gl-raster-pos4.3 Drawing functions
gl-read-bufferSelecting color buffers
gl-read-pixelsPixel operations
gl-rect4.3 Drawing functions
gl-rect4.3 Drawing functions
gl-render-mode4.13 Selection and feedback
gl-reset-histogramHistogram
gl-reset-minmaxMinmax
gl-rotate4.6 Transformation
gl-scale4.6 Transformation
gl-scissorTesting and operating on fragments
gl-select-buffer4.13 Selection and feedback
gl-separable-filetr-2dConvolutions
gl-shade-model4.9 Lighting
gl-shader-source-arbShader objects
gl-state-vector-sizeState values
gl-stencil-funcTesting and operating on fragments
gl-stencil-maskMasking buffers
gl-stencil-opTesting and operating on fragments
gl-tex-coord4.3 Drawing functions
gl-tex-coord4.3 Drawing functions
gl-tex-coord-pointer4.8 Vertex arrays
gl-tex-envTexture environment and coordinates
gl-tex-genTexture environment and coordinates
gl-tex-image-1dDefining textures
gl-tex-image-2dDefining textures
gl-tex-image-3dDefining textures
gl-tex-parameterTexture parameters
gl-tex-sub-image-1dDefining textures
gl-tex-sub-image-2dDefining textures
gl-tex-sub-image-3dDefining textures
gl-translate4.6 Transformation
gl-uniform-matrix2-arbSpecifying uniform variables
gl-uniform-matrix3-arbSpecifying uniform variables
gl-uniform-matrix4-arbSpecifying uniform variables
gl-uniform1-arbSpecifying uniform variables
gl-uniform1-arbSpecifying uniform variables
gl-uniform2-arbSpecifying uniform variables
gl-uniform2-arbSpecifying uniform variables
gl-uniform3-arbSpecifying uniform variables
gl-uniform3-arbSpecifying uniform variables
gl-uniform4-arbSpecifying uniform variables
gl-uniform4-arbSpecifying uniform variables
gl-use-program-object-arbShader objects
gl-validate-program-arbShader objects
gl-version<=?4.2 GL feature checking
gl-version<?4.2 GL feature checking
gl-version=?4.2 GL feature checking
gl-version>=?4.2 GL feature checking
gl-version>?4.2 GL feature checking
gl-vertex4.3 Drawing functions
gl-vertex4.3 Drawing functions
gl-vertex-attrib-4n-arbSpecifying vertex attributes
gl-vertex-attrib-4n-arbSpecifying vertex attributes
gl-vertex-attrib-arbSpecifying vertex attributes
gl-vertex-attrib-arbSpecifying vertex attributes
gl-vertex-attrib-pointer-arbSpecifying vertex attributes
gl-vertex-pointer4.8 Vertex arrays
gl-viewport4.6 Transformation
glu-begin-curve4.16 Nurbs
glu-begin-surface4.16 Nurbs
glu-build-1d-mipmap-levelsMipmaps
glu-build-1d-mipmapsMipmaps
glu-build-2d-mipmap-levelsMipmaps
glu-build-2d-mipmapsMipmaps
glu-build-3d-mipmap-levelsMipmaps
glu-build-3d-mipmapsMipmaps
glu-cylinder4.15 Quadrics
glu-disk4.15 Quadrics
glu-end-curve4.16 Nurbs
glu-end-surface4.16 Nurbs
glu-error-stringOther queries
glu-get-nurbs-property4.16 Nurbs
glu-get-stringOther queries
glu-load-sampling-matrices4.16 Nurbs
glu-look-at4.6 Transformation
glu-nurbs-curve4.16 Nurbs
glu-nurbs-property4.16 Nurbs
glu-ortho-2d4.6 Transformation
glu-partial-disk4.15 Quadrics
glu-perspective4.6 Transformation
glu-pick-matrix4.14 Projection
glu-project4.14 Projection
glu-project!4.14 Projection
glu-quadric-draw-style4.15 Quadrics
glu-quadric-normals4.15 Quadrics
glu-quadric-orientation4.15 Quadrics
glu-quadric-texture4.15 Quadrics
glu-sphere4.15 Quadrics
glu-un-project4.14 Projection
glu-un-project!4.14 Projection
glut-add-menu-entry5.3 GLUT menu API
glut-add-sub-menu5.3 GLUT menu API
glut-bitmap-character5.7 GLUT font
glut-bitmap-length5.7 GLUT font
glut-bitmap-width5.7 GLUT font
glut-button-box-func5.4 GLUT callbacks
glut-change-to-menu-entry5.3 GLUT menu API
glut-change-to-sub-menu5.3 GLUT menu API
glut-copy-colormap5.5 GLUT colormap
glut-create-menu5.3 GLUT menu API
glut-create-sub-window5.1 GLUT window manipulation
glut-create-widnow5.1 GLUT window manipulation
glut-destroy-menu5.3 GLUT menu API
glut-destroy-window5.1 GLUT window manipulation
glut-detach-menu5.3 GLUT menu API
glut-device-get5.6 GLUT state retrieval
glut-dials-func5.4 GLUT callbacks
glut-display-func5.4 GLUT callbacks
glut-entry-func5.4 GLUT callbacks
glut-establish-overlay5.2 GLUT overlay
glut-extension-supported5.6 GLUT state retrieval
glut-full-screen5.1 GLUT window manipulation
glut-get5.6 GLUT state retrieval
glut-get-color5.5 GLUT colormap
glut-get-emnu5.3 GLUT menu API
glut-get-modifiers5.6 GLUT state retrieval
glut-get-window5.1 GLUT window manipulation
glut-hide-overlay5.2 GLUT overlay
glut-hide-window5.1 GLUT window manipulation
glut-iconify-window5.1 GLUT window manipulation
glut-idle-func5.4 GLUT callbacks
glut-init5.1 GLUT window manipulation
glut-init-display-mode5.1 GLUT window manipulation
glut-init-display-string5.1 GLUT window manipulation
glut-init-window-position5.1 GLUT window manipulation
glut-init-window-size5.1 GLUT window manipulation
glut-joystick-func5.4 GLUT callbacks
glut-keyboard-func5.4 GLUT callbacks
glut-keyboard-up-func5.4 GLUT callbacks
glut-layer-get5.6 GLUT state retrieval
glut-main-loop5.1 GLUT window manipulation
glut-menu-state-func5.4 GLUT callbacks
glut-menu-status-func5.4 GLUT callbacks
glut-motion-func5.4 GLUT callbacks
glut-mouse-func5.4 GLUT callbacks
glut-overlay-dislay-func5.4 GLUT callbacks
glut-passive-motion-func5.4 GLUT callbacks
glut-pop-window5.1 GLUT window manipulation
glut-position-window5.1 GLUT window manipulation
glut-post-overlay-redisplay5.2 GLUT overlay
glut-post-redisplay5.1 GLUT window manipulation
glut-post-window-overlay-redisplay5.2 GLUT overlay
glut-post-window-redisplay5.1 GLUT window manipulation
glut-push-window5.1 GLUT window manipulation
glut-remove-menu-item5.3 GLUT menu API
glut-remove-overlay5.2 GLUT overlay
glut-reshape-func5.4 GLUT callbacks
glut-reshape-window5.1 GLUT window manipulation
glut-set-color5.5 GLUT colormap
glut-set-cursor5.1 GLUT window manipulation
glut-set-icon-title5.1 GLUT window manipulation
glut-set-menu5.3 GLUT menu API
glut-set-window5.1 GLUT window manipulation
glut-set-window-title5.1 GLUT window manipulation
glut-show-overlay5.2 GLUT overlay
glut-show-window5.1 GLUT window manipulation
glut-soild-teapot5.8 GLUT pre-built models
glut-solid-cone5.8 GLUT pre-built models
glut-solid-cube5.8 GLUT pre-built models
glut-solid-dodecahedron5.8 GLUT pre-built models
glut-solid-icosahedron5.8 GLUT pre-built models
glut-solid-octahedron5.8 GLUT pre-built models
glut-solid-sphere5.8 GLUT pre-built models
glut-solid-tetrahedron5.8 GLUT pre-built models
glut-solid-torus5.8 GLUT pre-built models
glut-spaceball-button-func5.4 GLUT callbacks
glut-spaceball-motion-func5.4 GLUT callbacks
glut-spaceball-rotate-func5.4 GLUT callbacks
glut-special-func5.4 GLUT callbacks
glut-special-up-func5.4 GLUT callbacks
glut-stroke-character5.7 GLUT font
glut-stroke-length5.7 GLUT font
glut-stroke-width5.7 GLUT font
glut-swap-buffers5.1 GLUT window manipulation
glut-tablet-button-func5.4 GLUT callbacks
glut-tablet-motion-func5.4 GLUT callbacks
glut-timer-func5.4 GLUT callbacks
glut-use-layer5.2 GLUT overlay
glut-visibility-func5.4 GLUT callbacks
glut-warp-pointer5.1 GLUT window manipulation
glut-window-status-func5.4 GLUT callbacks
glut-wire-cone5.8 GLUT pre-built models
glut-wire-cube5.8 GLUT pre-built models
glut-wire-dodecahedron5.8 GLUT pre-built models
glut-wire-icosahedron5.8 GLUT pre-built models
glut-wire-octahedron5.8 GLUT pre-built models
glut-wire-sphere5.8 GLUT pre-built models
glut-wire-teapot5.8 GLUT pre-built models
glut-wire-tetrahedron5.8 GLUT pre-built models
glut-wire-torus5.8 GLUT pre-built models
gult-attach-menu5.3 GLUT menu API

L
list->gl-boolean-vectorGL boolean vectors
list->matrix4f6.3 Matrices
list->point4f6.1 Vectors and points
list->point4f-array6.2 Vector arrays and point arrays
list->quatf6.4 Quaternions
list->vector4f6.1 Vectors and points
list->vector4f-array6.2 Vector arrays and point arrays

M
make-gl-boolean-vectorGL boolean vectors
make-matrix4f6.3 Matrices
make-point4f6.1 Vectors and points
make-point4f-array6.2 Vector arrays and point arrays
make-quatf6.4 Quaternions
make-vector4f6.1 Vectors and points
make-vector4f-array6.2 Vector arrays and point arrays
matrix4f6.3 Matrices
matrix4f->f32vector6.3 Matrices
matrix4f->list6.3 Matrices
matrix4f->quatf6.4 Quaternions
matrix4f->quatf!6.4 Quaternions
matrix4f->rotation6.3 Matrices
matrix4f->rotation!6.3 Matrices
matrix4f->translation6.3 Matrices
matrix4f->translation!6.3 Matrices
matrix4f-column6.3 Matrices
matrix4f-column/shared6.3 Matrices
matrix4f-copy6.3 Matrices
matrix4f-copy!6.3 Matrices
matrix4f-decompose6.3 Matrices
matrix4f-decompose!6.3 Matrices
matrix4f-determinant6.3 Matrices
matrix4f-inverse6.3 Matrices
matrix4f-inverse!6.3 Matrices
matrix4f-mul6.3 Matrices
matrix4f-mul!6.3 Matrices
matrix4f-ref6.3 Matrices
matrix4f-ref26.3 Matrices
matrix4f-row6.3 Matrices
matrix4f-set!6.3 Matrices
matrix4f-set2!6.3 Matrices
matrix4f-transpose6.3 Matrices
matrix4f-transpose!6.3 Matrices
matrix4f?6.3 Matrices

P
point4f6.1 Vectors and points
point4f->f32vector6.1 Vectors and points
point4f->list6.1 Vectors and points
point4f-add6.1 Vectors and points
point4f-add!6.1 Vectors and points
point4f-array->f32vector6.2 Vector arrays and point arrays
point4f-array-length6.2 Vector arrays and point arrays
point4f-array-ref6.2 Vector arrays and point arrays
point4f-array-ref/shared6.2 Vector arrays and point arrays
point4f-array-set!6.2 Vector arrays and point arrays
point4f-array?6.2 Vector arrays and point arrays
point4f-copy6.1 Vectors and points
point4f-copy!6.1 Vectors and points
point4f-ref6.1 Vectors and points
point4f-set!6.1 Vectors and points
point4f-sub6.1 Vectors and points
point4f?6.1 Vectors and points

Q
quatf6.4 Quaternions
quatf->f32vector6.4 Quaternions
quatf->list6.4 Quaternions
quatf->matrix4f6.4 Quaternions
quatf->matrix4f!6.4 Quaternions
quatf-add6.4 Quaternions
quatf-add!6.4 Quaternions
quatf-conjugate6.4 Quaternions
quatf-conjugate!6.4 Quaternions
quatf-copy6.4 Quaternions
quatf-copy!6.4 Quaternions
quatf-mul6.4 Quaternions
quatf-mul!6.4 Quaternions
quatf-norm6.4 Quaternions
quatf-normalize6.4 Quaternions
quatf-normalize!6.4 Quaternions
quatf-scale6.4 Quaternions
quatf-scale!6.4 Quaternions
quatf-slerp6.4 Quaternions
quatf-slerp!6.4 Quaternions
quatf-sub6.4 Quaternions
quatf-sub!6.4 Quaternions
quatf-transform6.4 Quaternions
quatf?6.4 Quaternions

R
read-sgi-image7.1 Simple image handling
read-sgi-image-from-port7.1 Simple image handling
rotation->matrix4f6.3 Matrices
rotation->matrix4f!6.3 Matrices
rotation->quatf!6.4 Quaternions

S
scale->matrix4f6.3 Matrices
scale->matrix4f!6.3 Matrices
simple-viewer-axis7.2 Simple viewer
simple-viewer-display7.2 Simple viewer
simple-viewer-grid7.2 Simple viewer
simple-viewer-reshape7.2 Simple viewer
simple-viewer-set-key!7.2 Simple viewer
simple-viewer-window7.2 Simple viewer

T
tqs->matrix4f6.3 Matrices
tqs->matrix4f!6.3 Matrices
translation->matrix4f6.3 Matrices
translation->matrix4f!6.3 Matrices
trs->matrix4f6.3 Matrices
trs->matrix4f!6.3 Matrices

V
vector4f6.1 Vectors and points
vector4f->f32vector6.1 Vectors and points
vector4f->list6.1 Vectors and points
vector4f-add6.1 Vectors and points
vector4f-add!6.1 Vectors and points
vector4f-array->f32vector6.2 Vector arrays and point arrays
vector4f-array-length6.2 Vector arrays and point arrays
vector4f-array-ref6.2 Vector arrays and point arrays
vector4f-array-ref/shared6.2 Vector arrays and point arrays
vector4f-array-set!6.2 Vector arrays and point arrays
vector4f-array?6.2 Vector arrays and point arrays
vector4f-copy6.1 Vectors and points
vector4f-copy!6.1 Vectors and points
vector4f-cross6.1 Vectors and points
vector4f-dot6.1 Vectors and points
vector4f-norm6.1 Vectors and points
vector4f-normalize6.1 Vectors and points
vector4f-normalize!6.1 Vectors and points
vector4f-ref6.1 Vectors and points
vector4f-set!6.1 Vectors and points
vector4f-sub6.1 Vectors and points
vector4f-sub!6.1 Vectors and points
vector4f?6.1 Vectors and points
vectors->quatf6.4 Quaternions
vectors->quatf!6.4 Quaternions

Jump to:   A   E   F   G   L   M   P   Q   R   S   T   V  

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.2 Module Index

Jump to:   G  
Index Entry Section

G
gl.math3d6. Vectors and matrices
gl.simple.image7.1 Simple image handling
gl.simple.viewer7.2 Simple viewer

Jump to:   G  

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.3 Class Index

For readability, the surrounding < and > are stripped off.

Jump to:   G   M   P   Q   V  
Index Entry Section

G
glut-font5.7 GLUT font

M
matrix4f6.3 Matrices

P
point4f6.1 Vectors and points
point4f-array6.2 Vector arrays and point arrays

Q
quatf6.4 Quaternions

V
vector4f6.1 Vectors and points
vector4f-array6.2 Vector arrays and point arrays

Jump to:   G   M   P   Q   V  

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.4 Variable Index

Jump to:   G  
Index Entry Section

G
GLUT_ACCUM5.1 GLUT window manipulation
GLUT_ACTIVE_ALT5.6 GLUT state retrieval
GLUT_ACTIVE_CTRL5.6 GLUT state retrieval
GLUT_ACTIVE_SHIFT5.6 GLUT state retrieval
GLUT_ALPHA5.1 GLUT window manipulation
GLUT_BLUE5.5 GLUT colormap
GLUT_CURSOR_BOTTOM_LEFT_CORNER5.1 GLUT window manipulation
GLUT_CURSOR_BOTTOM_RIGHT_CORNER5.1 GLUT window manipulation
GLUT_CURSOR_BOTTOM_SIDE5.1 GLUT window manipulation
GLUT_CURSOR_CROSSHAIR5.1 GLUT window manipulation
GLUT_CURSOR_CYCLE5.1 GLUT window manipulation
GLUT_CURSOR_DESTROY5.1 GLUT window manipulation
GLUT_CURSOR_FULL_CROSSHAIR5.1 GLUT window manipulation
GLUT_CURSOR_HELP5.1 GLUT window manipulation
GLUT_CURSOR_INFO5.1 GLUT window manipulation
GLUT_CURSOR_INHERIT5.1 GLUT window manipulation
GLUT_CURSOR_LEFT_ARROW5.1 GLUT window manipulation
GLUT_CURSOR_LEFT_RIGHT5.1 GLUT window manipulation
GLUT_CURSOR_LEFT_SIDE5.1 GLUT window manipulation
GLUT_CURSOR_NONE5.1 GLUT window manipulation
GLUT_CURSOR_RIGHT_ARROW5.1 GLUT window manipulation
GLUT_CURSOR_RIGHT_SIDE5.1 GLUT window manipulation
GLUT_CURSOR_SPRAY5.1 GLUT window manipulation
GLUT_CURSOR_TEXT5.1 GLUT window manipulation
GLUT_CURSOR_TOP_LEFT_CORNER5.1 GLUT window manipulation
GLUT_CURSOR_TOP_RIGHT_CORNER5.1 GLUT window manipulation
GLUT_CURSOR_TOP_SIDE5.1 GLUT window manipulation
GLUT_CURSOR_UP_DOWN5.1 GLUT window manipulation
GLUT_CURSOR_WAIT5.1 GLUT window manipulation
GLUT_DEPTH5.1 GLUT window manipulation
GLUT_DEVICE_IGNORE_KEY_REPEAT5.6 GLUT state retrieval
GLUT_DEVICE_KEY_REPEAT5.6 GLUT state retrieval
GLUT_DISPLAY_MODE_POSSIBLE5.6 GLUT state retrieval
GLUT_DOUBLE5.1 GLUT window manipulation
GLUT_DOWN5.4 GLUT callbacks
GLUT_ELAPSED_TIME5.6 GLUT state retrieval
GLUT_ENTERED5.4 GLUT callbacks
GLUT_GREEN5.5 GLUT colormap
GLUT_HAS_DIAL_AND_BUTTON_BOX5.6 GLUT state retrieval
GLUT_HAS_JOYSTICK5.6 GLUT state retrieval
GLUT_HAS_KEYBOARD5.6 GLUT state retrieval
GLUT_HAS_MOUSE5.6 GLUT state retrieval
GLUT_HAS_OVERLAY5.6 GLUT state retrieval
GLUT_HAS_SPACEBALL5.6 GLUT state retrieval
GLUT_HAS_TABLET5.6 GLUT state retrieval
GLUT_INDEX5.1 GLUT window manipulation
GLUT_INIT_DISPLAY_MODE5.6 GLUT state retrieval
GLUT_INIT_WINDOW_HEIGHT5.6 GLUT state retrieval
GLUT_INIT_WINDOW_WIDTH5.6 GLUT state retrieval
GLUT_INIT_WINDOW_X5.6 GLUT state retrieval
GLUT_INIT_WINDOW_Y5.6 GLUT state retrieval
GLUT_JOYSTICK_AXES5.6 GLUT state retrieval
GLUT_JOYSTICK_BUTTONS5.6 GLUT state retrieval
GLUT_JOYSTICK_POLL_RATE5.6 GLUT state retrieval
GLUT_KEY_DOWN5.4 GLUT callbacks
GLUT_KEY_END5.4 GLUT callbacks
GLUT_KEY_F15.4 GLUT callbacks
GLUT_KEY_F105.4 GLUT callbacks
GLUT_KEY_F115.4 GLUT callbacks
GLUT_KEY_F125.4 GLUT callbacks
GLUT_KEY_F25.4 GLUT callbacks
GLUT_KEY_F35.4 GLUT callbacks
GLUT_KEY_F45.4 GLUT callbacks
GLUT_KEY_F55.4 GLUT callbacks
GLUT_KEY_F65.4 GLUT callbacks
GLUT_KEY_F75.4 GLUT callbacks
GLUT_KEY_F85.4 GLUT callbacks
GLUT_KEY_F95.4 GLUT callbacks
GLUT_KEY_HOME5.4 GLUT callbacks
GLUT_KEY_INSERT5.4 GLUT callbacks
GLUT_KEY_LEFT5.4 GLUT callbacks
GLUT_KEY_PAGE_DOWN5.4 GLUT callbacks
GLUT_KEY_PAGE_UP5.4 GLUT callbacks
GLUT_KEY_RIGHT5.4 GLUT callbacks
GLUT_KEY_UP5.4 GLUT callbacks
GLUT_LAYER_IN_USE5.6 GLUT state retrieval
GLUT_LEFT5.4 GLUT callbacks
GLUT_LEFT_BUTTON5.4 GLUT callbacks
GLUT_LUMINANCE5.1 GLUT window manipulation
GLUT_MENU_NUM_ITEMS5.6 GLUT state retrieval
GLUT_MIDDLE_BUTTON5.4 GLUT callbacks
GLUT_MULTISAMPLE5.1 GLUT window manipulation
GLUT_NORMAL_DAMAGED5.6 GLUT state retrieval
GLUT_NOT_VISIBLE5.4 GLUT callbacks
GLUT_NUM_BUTTON_BOX_BUTTONS5.6 GLUT state retrieval
GLUT_NUM_DIALS5.6 GLUT state retrieval
GLUT_NUM_MOUSE_BUTTONS5.6 GLUT state retrieval
GLUT_NUM_SPACEBALL_BUTTONS5.6 GLUT state retrieval
GLUT_NUM_TABLET_BUTTONS5.6 GLUT state retrieval
GLUT_OVERLAY_DAMAGED5.6 GLUT state retrieval
GLUT_OVERLAY_POSSIBLE5.6 GLUT state retrieval
GLUT_OWNS_JOYSTICK5.6 GLUT state retrieval
GLUT_RED5.5 GLUT colormap
GLUT_RGB5.1 GLUT window manipulation
GLUT_RGBA5.1 GLUT window manipulation
GLUT_RIGHT_BUTTON5.4 GLUT callbacks
GLUT_SCREEN_HEIGHT5.6 GLUT state retrieval
GLUT_SCREEN_HEIGHT_MM5.6 GLUT state retrieval
GLUT_SCREEN_WIDTH5.6 GLUT state retrieval
GLUT_SCREEN_WIDTH_MM5.6 GLUT state retrieval
GLUT_SINGLE5.1 GLUT window manipulation
GLUT_STENCIL5.1 GLUT window manipulation
GLUT_STEREO5.1 GLUT window manipulation
GLUT_TRANSPARENT_INDEX5.6 GLUT state retrieval
GLUT_UP5.4 GLUT callbacks
GLUT_VISIBLE5.4 GLUT callbacks
GLUT_WINDOW_ACCUM_ALPHA_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_ACCUM_BLUE_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_ACCUM_GREEN_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_ACCUM_RED_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_ALPHA_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_BLUE_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_BUFFER_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_COLORMAP_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_CURSOR5.6 GLUT state retrieval
GLUT_WINDOW_DEPTH_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_DOUBLEBUFFER5.6 GLUT state retrieval
GLUT_WINDOW_FORMAT_ID5.6 GLUT state retrieval
GLUT_WINDOW_GREEN_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_HEIGHT5.6 GLUT state retrieval
GLUT_WINDOW_NUM_CHILDREN5.6 GLUT state retrieval
GLUT_WINDOW_NUM_SAMPLES5.6 GLUT state retrieval
GLUT_WINDOW_PARENT5.6 GLUT state retrieval
GLUT_WINDOW_RED_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_RGBA5.6 GLUT state retrieval
GLUT_WINDOW_STENCIL_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_STEREO5.6 GLUT state retrieval
GLUT_WINDOW_WIDTH5.6 GLUT state retrieval
GLUT_WINDOW_X5.6 GLUT state retrieval
GLUT_WINDOW_Y5.6 GLUT state retrieval
GLU_FILL4.15 Quadrics
GLU_FLAT4.15 Quadrics
GLU_INSIDE4.15 Quadrics
GLU_LINE4.15 Quadrics
GLU_NONE4.15 Quadrics
GLU_OUTSIDE4.15 Quadrics
GLU_POINT4.15 Quadrics
GLU_SILHUETTE4.15 Quadrics
GLU_SMOOTH4.15 Quadrics
GL_LINES4.3 Drawing functions
GL_LINE_LOOP4.3 Drawing functions
GL_LINE_STRIP4.3 Drawing functions
GL_POINTS4.3 Drawing functions
GL_POLYGON4.3 Drawing functions
GL_QUADS4.3 Drawing functions
GL_QUAD_STRIP4.3 Drawing functions
GL_TRIANGLES4.3 Drawing functions
GL_TRIANGLE_FAN4.3 Drawing functions
GL_TRIANGLE_STRIP4.3 Drawing functions

Jump to:   G  

[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated by Shiro Kawai on August 5, 2011 using texi2html 1.82.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back Previous section in reading order 1.2.2
[ > ] Forward Next section in reading order 1.2.4
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ Up ] Up Up section 1.2
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

  • 1. Section One
    • 1.1 Subsection One-One
      • ...
    • 1.2 Subsection One-Two
      • 1.2.1 Subsubsection One-Two-One
      • 1.2.2 Subsubsection One-Two-Two
      • 1.2.3 Subsubsection One-Two-Three     <== Current Position
      • 1.2.4 Subsubsection One-Two-Four
    • 1.3 Subsection One-Three
      • ...
    • 1.4 Subsection One-Four

This document was generated by Shiro Kawai on August 5, 2011 using texi2html 1.82.

Gauche-gl-0.5.1/doc/gauche-gl-refe.texi0000644000076400007640000036365511617171615016616 0ustar shiroshiro\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename gauche-gl-refe.info @settitle Gauche-gl : OpenGL binding for Gauche @dircategory The Algorithmic Language Scheme @direntry * Gauche-gl Reference: (gauche-gl-refe.info). Gauche OpenGL binding @end direntry @comment %**end of header @c $Id: gauche-gl-ref.texi,v 1.30 2008-06-05 11:14:46 shirok Exp $ @c module and class index @defcodeindex md @defcodeindex cl @iftex @finalout @parskip 4pt plus 1pt @end iftex @titlepage @title Gauche-gl : OpenGL binding for Gauche @subtitle version 0.5.1 @author Shiro Kawai (shiro@@acm.org) @page @vskip 0pt plus 1filll Copyright @copyright{} 2002-2005 Shiro Kawai (shiro@@acm.org) @end titlepage @node Top, Introduction, (dir), (dir) @ifnottex This is a reference manual of Gauche-gl, an OpenGL binding for the Gauche Scheme implementation. This manual is for version 0.5.1. @end ifnottex @c ====================================================================== @menu * Introduction:: * Installation:: * Getting Started:: * OpenGL API:: * GLUT API:: * Vectors and matrices:: * Simple utilities:: * Indices:: @end menu @node Introduction, Installation, Top, Top @chapter Introduction @c NODE ã¯ã˜ã‚ã« Gauche-gl is an extension module of Gauche Scheme implementation. It provides the following modules: @table @code @item gl This module provides bindings to OpenGL API. It covers most functions in OpenGL 1.0 through 2.0, and GLU. The functions are described in @ref{OpenGL API}. @item gl.glut This module provides bindings to most functions in GLUT. The functions are described in @ref{GLUT API}. @item gl.math3d This module provides vector and matrix calculations optimized for 3D homogeneous coordinates. The vector and matrix objects here can be directly passed to Gauche-gl functions. The functions are descrbied in @ref{Vectors and matrices}. @item gl.simple.* These modules provide simple APIs for programmers to hack up a very simple OpenGL application. They are by no means intended for general application development, but would be handy for throwaway script. See @ref{Simple utilities} for the details. @end table @c ====================================================================== @node Installation, Getting Started, Introduction, Top @chapter Installation Installing Gauche-gl is usually straightforward on Unix variants. You have to have the following programs installed on your machine. @itemize @bullet @item Gauche 0.8.5 or later @item OpenGL 1.1 equivalent library; the auther checked with Mesa 3.4 and NVidia's GLX driver. @item GLUT 3.7 or later. @end itemize The standard way to compile and install Gauche-gl is as follows: @example % gzcat Gauche-gl-0.5.1.tgz | tar xf - % cd Gauche-gl-0.5.1 % ./configure % make % make test % make install @end example Or you can use @file{gauche-package} command: @example % gauche-package install -C= Gauche-gl-0.5.1.tgz @end example The confiugre script figures out the location Gauche is installed, and install Gauche-gl in the same place. If you have GLUT installed in non-standard place, you have to tell the configure script where it is. @example % ./configure --with-glut=DIR @end example Since version 0.4, Gauche-gl can be configured to include bindings to NVidia's Cg Toolkit. The binding code is contributed by Issac Trotts. To enable Cg binding, give @code{--enable-cg} option to the configure script. @example % ./configure --enable-cg @end example It is reported that Mesa in FreeBSD ports is compiled with pthreads enabled, and Gauche-gl can't be linked unless Gauche itself is compiled with pthreads. The configure script of Gauche prints warning if you specify pthreads, but it is safe as far as you don't call make-thread in your program. There are various examples under @file{examples/} directory. If you want to run the examples before installing Gauche-gl, you have to tell the location of the library to @code{gosh} command, e.g. @code{gosh -I../src -I../lib gears.scm}. Some demos under subdirectories have a shell script that invokes @code{gosh} with proper command-line options. @table @file @item gears.scm Brian Paul's 3D gear wheels. @item mandelbrot.scm Simple calculated texture. @item glbook/ This subdirectory contains examples found in "OpenGL Programming Guide", a.k.a. Redbook. @item slbook/ This subdirectory contains examples found in "OpenGL Shading Language". Each demo is under its own subdirectories. You need to have proper driver/hardware that supports GLSL to run these demos. @end table @c ====================================================================== @node Getting Started, OpenGL API, Installation, Top @chapter Getting Started @menu * GL calls in Scheme:: * Advanced GL features:: * Using GLUT:: * Performance tips:: @end menu @c ---------------------------------------------------------------------- @node GL calls in Scheme, Advanced GL features, Getting Started, Getting Started @section GL calls in Scheme I assume you have basic knowledge of OpenGL API. Gauche-gl maps OpenGL calls to Scheme procedures pretty straightforwardly. For example, the very first example of "OpenGL Programming Guide", the pseudo code of OpenGL application, can be written in Gauche-gl like this: @example (use gl) (define (main args) (@i{initialize-a-window-please}) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 1.0 1.0 1.0) (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0) (gl-begin* GL_POLYGON (gl-vertex 0.25 0.25 0.0) (gl-vertex 0.75 0.25 0.0) (gl-vertex 0.75 0.75 0.0) (gl-vertex 0.25 0.75 0.0) ) (gl-flush) (@i{update-the-window-and-check-for-events}) 0) @end example Note that @i{initialize-a-window-please} and @i{update-the-window-and-check-for-events} are function calls dependent on the windowing system. Gauche-gl comes with GLUT binding and you can use it to do basic stuff. In the separate package Gauche-gtk, a binding to GtkGLExt is provided, which allows you to do GL rendering inside Gtk widgets. For the time being, let's focus on the pure GL part. The mapping of GL call name is straightforward. The mixed case names in OpenGL C API is expanded to hyphenated name, e.g. @code{glClearColor} @result{} @code{gl-clear-color}. OpenGL enums are mapped as is, e.g. @code{GL_POLYGON}. (Note that Gauche is case-sensitive by default. Also note the underscore, not hyphen, in constants). A few convenience macros, such as @code{gl-begin*}, is defined. There are straight bindings of @code{gl-begin} and @code{gl-end}, so you can write the drawing part in the same way as in C: @example (gl-begin GL_POLYGON) (gl-vertex 0.25 0.25 0.0) (gl-vertex 0.75 0.25 0.0) (gl-vertex 0.75 0.75 0.0) (gl-vertex 0.25 0.75 0.0) (gl-end) @end example Actually @code{gl-begin*} macro expands into the above calls. It's a matter of taste, but the macro version guarantees begin and end match, and the syntax-aware editor can indent internal calls accordingly. You might have noticed that the type suffix in C API is not in Gauche binding. The Scheme function figures out the type of passed arguments and calls appropriate C API. SRFI-4 uniform numeric vectors are used to represent arrays of numbers. @example (gl-vertex 1.0 2.0 3.0) @result{} glVertex3d (gl-vertex '#f32(1.0 2.0)) @result{} glVertex2fv (gl-vertex '#s32(3 2 5)) @result{} glVertex3iv @end example Generally, passing uniform vectors is much more efficient than giving individual numbers, for the former can eliminate the cost of type checking and unboxing. Some GL calls can also take @code{gl.math3d} primitive objects such as @code{vector4f}, @code{point4f} or @code{matrix4f} (@xref{Vectors and matrices}). For example, you can pass @code{point4f} object to @code{gl-vertex}, @code{vector4f} to @code{gl-normal}, and @code{matrix4f} to @code{gl-mult-matrix}. They are efficient since calculations on those types are defined natively in @code{gl.math3d}, and passing it to GL call doesn't cost unboxing. @c ---------------------------------------------------------------------- @node Advanced GL features, Using GLUT, GL calls in Scheme, Getting Started @section Advanced GL features Although Gauche-gl supports up to OpenGL 2.0, all functionalities may not be available on the target machine's driver/hardware. The application needs to check the availability of the extension and/or GL version before using the features that are only supported by the extension/version. Gauche-gl provides a couple of utility procedures to check the feature sets at runtime. For example, you can switch behavior depending on OpenGL 1.3 feature availability: @example (if (gl-version>=? "1.3") (code-using-features-available-in-OpenGL-1.3-and-later ...) (alternative-code ...)) @end example Or you can check the availability of extensions: @example (unless (gl-extension-supported? 'GL_ARB_shader_objects 'GL_ARB_fragment_shader 'GL_ARB_vertex_shader 'GL_ARB_shading_language_100) (error "OpenGL Shading Language extensions not available")) @end example See @ref{GL feature checking} for the details. If the client program calls a GL API that are not supported on the platform, an error is signalled. @c ---------------------------------------------------------------------- @node Using GLUT, Performance tips, Advanced GL features, Getting Started @section Using GLUT In order to make a runnable script, you need to use some windowing system interface. GLUT binding provides a simple way for it. Here is a complete runnable Scheme script, ported from Example 1-2 in "OpenGL Programming Guide": @example (use gl) (use gl.glut) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-begin* GL_POLYGON (gl-vertex '#f32(0.25 0.25 0.0)) (gl-vertex '#f32(0.75 0.25 0.0)) (gl-vertex '#f32(0.75 0.75 0.0)) (gl-vertex '#f32(0.25 0.75 0.0)) ) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0) ) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window "hello") (init) (glut-display-func disp) (glut-keyboard-func keyboard) (glut-main-loop) 0) @end example The @code{(use gl.glut)} form loads GLUT binding. The name mapping is the same as GL's: mixed case names to hyphenated names. In order to handle various events, you can pass a closure to @code{glut-display-func} etc. In the keyboard and mouse event callback, all arguments are integers. There are more examples under the @file{examples/} directory which uses GLUT. @c ---------------------------------------------------------------------- @node Performance tips, , Using GLUT, Getting Started @section Performance tips If you want to display millions of polygons in 30 fps, Gauche-gl is not for you. Consider using implementations that compiles into native code. The purpose of Gauche-gl is to provide reasonable performance for interactive development and experiment. However, if you know some tips, actually you can go quite far, especially with recent processors and graphics chips. @table @emph @item Avoid alocation within the inner loop. The functional (non-destructive) operations tend to return newly-allocated objects. Use linear-update (destructive) versions instead, such as @code{matrix-mul!}, @code{u8vector-add!}, etc, whenever possible. Pre-allocating temporary vectors is also effective. @item Reduce the number of calls within the inner loop. Vertex arrays are much better than calling @code{gl-vertex} over and over. Also consider using display lists if you're displaying rigid objects. @item Keep numbers within a uniform vector. Every time you take a number out of a uniform vector (or @code{} etc.), Gauche has to wrap the number by a tag (boxing). Also when you store a number into a uniform vector, Gauche has to check the type of the object, then strip a tag (unboxing). Those are all overhead you wouldn't have if you operate directly on uniform vectors (or @code{} etc). @item Write extensions to accelerate. If the above strategies are not enough, consider writing computation-intensive part in C as an extension. The easier way is to make C routines operate on uniform vectors, which is essentially a pointer to an array of numbers from C, and let Scheme handle higher-level data structures. (It could be viewed like relations between a coprocessor and a processor; the former does simple, iterative calculations fast, and the latter handles complicated logic). @end table @c ====================================================================== @node OpenGL API, GLUT API, Getting Started, Top @chapter OpenGL API In this chapter we list a GL and GLU procedures accessible from Gauche-gl, with brief descriptions to help programmers to remind what the functions are. We don't intend to make this an OpenGL reference, though; you should look at the OpenGL book for the details of what each API do. @menu * GL data types:: * GL feature checking:: * Drawing functions:: * GL state control:: * GL states for drawing:: * Transformation:: * Display lists:: * Vertex arrays:: * Lighting:: * Pixels:: * Texture mapping:: * Framebuffers:: * Selection and feedback:: * Projection:: * Quadrics:: * Nurbs:: * Polygon tesselation:: * Programmable shaders:: @end menu @c ---------------------------------------------------------------------- @node GL data types, GL feature checking, OpenGL API, OpenGL API @section GL data types GL doesn't define many data structures: some scalar primitives (e.g. @code{GLint}) and arrays of them. For scalar values, Gauche-gl has natural mappings: @table @code @item GLboolean Scheme booleans. @item GLbyte, GLubyte, GLshort, GLushort, GLint, GLuint, GLenum, GLbitfield Scheme exact integers. @item GLfloat, GLdouble, GLclampf, GLclampd Scheme real numbers. @end table For arrays, Gauche-gl uses uniform (srfi-4) vector whenever possible. For float arrays, however, Gauche-gl allows more structured types, such as points or matrices, when they are relevant. Such types are provided in @code{gl.math3d} module (see @ref{Vectors and matrices}), which also provides common arithmetics between those types. Another exception is an array of GLboolean---it doesn't have corresponding uniform vector representation. Gauche-gl defines a new type, @code{}, to represent an array of GLboolean. See below for operations provided on it. @table @code @item GLbyte[] @code{} @item GLubyte[] @code{} @item GLshort[] @code{} @item GLushort[] @code{} @item GLint[] @code{} @item GLuint[] @code{} @item GLfloat[], GLclampf[] @code{}, @code{}, @code{}, @code{}, @code{}, @code{}, @code{}. @item GLdouble[], GLclampd[] @code{} @item GLboolean[] @code{} @end table @subheading GL boolean vectors @deftp {Class} A class for an array of boolean values. You can pass its instance to the GL APIs that expect an array of GLbooleans. Its internal representation is bitwise compatible to GLbooean array, so passing it is quite efficient. This class inherits @code{}, so you can use generic sequence operations on it. The external representation of GL boolean vector uses srfi-10 notation, and can be read back. For example, a GL boolean vector of length 5 may be written something like this: @example #,(gl-boolean-vector #t #f #t #f #t) @end example @end deftp @defun make-gl-boolean-vector size &optional init Returns a GL boolean vector of @var{size} elements. Elements are initialized by either @code{#f} or @code{#t}, according to @var{init}. @example (make-gl-boolean-vector 3 #t) @result{} #,(gl-boolean-vector #t #t #t) @end example @end defun @defun gl-boolean-vector bool @dots{} Returns a GL boolean vector, whose elements are @var{bool} @dots{}. @example (gl-boolean-vector #f #t #t) @result{} #,(gl-boolean-vector #f #t #t) @end example @end defun @defun gl-boolean-vector? obj Returns @code{#t} if @var{obj} is a GL boolean vector, @code{#f} otherwise. @end defun @defun gl-boolean-vector-length v Returns length of a GL boolean vector @var{v}. You can also use the sequence generic function @code{size-of}. @end defun @defun gl-boolean-vector-fill! v bool Fills a GL boolean vector @var{v} with a boolean value @var{bool}. @end defun @defun list->gl-boolean-vector bools Coerce list of boolean values to a GL boolean vector. You can also use the @code{coerce-to} generic function to convert between GL boolean vectors and other sequences. @end defun @defun gl-boolean-vector-ref v k &optional fallback Returns @var{k}-th element of a GL boolean vector @var{v}. If @var{k} is out of range and @var{fallback} is provided, it is returned. If @var{k} is out of range and @var{fallback} is omitted, an error is signalled. You can also use generic function @code{ref} to access a GL boolean vector. @end defun @defun gl-boolean-vector-set! v k bool Sets @var{k}-th element of a GL boolean vector @var{v} by a boolean value @var{bool}. You can also use generic function @code{(setter ref)} to modify a GL boolean vector. @end defun @defun gl-boolean-vector-copy v Returns a copy of a GL boolean vector @var{v}. @end defun @c ---------------------------------------------------------------------- @node GL feature checking, Drawing functions, GL data types, OpenGL API @section GL feature checking If you want to use a feature that are in OpenGL 1.2 or later, or in a GL extension, you have to check its availability before actually calling the API function. You can use the following utility procedures. Note that those functions may return @code{#f} if the connection to the display subsystem isn't established yet. Usually you have to initialize and open an window before checking the features. @defun gl-extension-available? extension-name @dots{} Returns @code{#t} if GL extensions listed in @var{extension-name} @dots{} are all available. @var{Extension-name} can be a symbol or a string (e.g. @code{GL_ARB_multisample}). @end defun @defun gl-version? version @defunx gl-version>=? version @defunx gl-version=? version Returns @code{#t} if the runtime OpenGL version is less than, less thanor equal to, greater than, greater than or equal to, and equal to, the given @var{version}, respectively. Give @var{version} in a string, e.g. @code{"1.3"}. @end defun @c ---------------------------------------------------------------------- @node Drawing functions, GL state control, GL feature checking, OpenGL API @section Drawing functions @defmac gl-begin* mode gl-commands @dots{} @vindex GL_POINTS @vindex GL_LINES @vindex GL_LINE_STRIP @vindex GL_LINE_LOOP @vindex GL_TRIANGLES @vindex GL_TRIANGLE_STRIP @vindex GL_TRIANGLE_FAN @vindex GL_QUADS @vindex GL_QUAD_STRIP @vindex GL_POLYGON Executes @var{gl-commands} between @code{(gl-begin @var{mode})} and @code{(gl-end)}. @var{Mode} can be one of the following constants. @table @code @item GL_POINTS Individual points. @item GL_LINES Pairs of vertices interpreted as individual line segments. @item GL_LINE_STRIP Series of connected line segments. @item GL_LINE_LOOP Same as above, with a segment added between last and first vertices. @item GL_TRIANGLES Triples of vertices interpreted as triangles. @item GL_TRIANGLE_STRIP Linked trip of triangles. @item GL_TRIANGLE_FAN Linked fan of triangles. @item GL_QUADS Quadruples of vertices interpreted as four-sided polygons. @item GL_QUAD_STRIP Linked strip of quadrilaterals. @item GL_POLYGON Boundary of a simple, convex polygon. @end table @end defmac @defun gl-begin mode @defunx gl-end Corresponds to @code{glBegin} and @code{glEnd}. Use of @code{gl-begin*} macro is recommended, though. @end defun @defun gl-flush Flush the GL command buffer. @end defun @defun gl-finish Make sure all previously issued GL commands are completed. @end defun @defun gl-rect point1 point2 @defunx gl-rect x1 y1 x2 y2 Draws a rectangle. In the first form, @var{point1} and @var{point2} can be either @code{}, or f32, f64, s32, or s16vector of length 2. Types of both args should match. In the second form, all args should be a real numbers (@code{glRectd} is used). @end defun @defun gl-vertex point @defunx gl-vertex x y &optional z w Specify vertices. In the first form, @var{point} can be either @code{}, or f32, f64, s32 or s16vector of length 2, 3 or 4. In the second form, all args should be a real numbers. @end defun @defun gl-normal vector @defunx gl-normal x y z Sets vertex normal vector. In the first form, @var{vector} can be either @code{} (the fourth element is ignored), or f32, f64, s32 ro s16vector of length 3. In the second form, all args should be a real numbers. @end defun @defun gl-color color @defunx gl-color r g b &optional a Sets the current color. In the first form, @var{color} can be either f32, f64, u8, u16, u32, s8, s16, or s32vector of length 3 or 4. In the second form, all args should be a real numbers. @end defun @defun gl-tex-coord coord @defunx gl-tex-coord u v &optional s t Sets the current texture coordinates. In the first form, @var{coord} can be either f32, f64, s32 or s16vector of length 1, 2, 3, or 4. In the second form, all args should be a real numbers. @end defun @defun gl-raster-pos pos @defunx gl-raster-pos x y &optional z w Sets the current raster position. In the first form, @var{pos} can be eitehr f32, f64, s32 or s16vector. In the second form, all args should be a real numbers. @end defun @c ---------------------------------------------------------------------- @node GL state control, GL states for drawing, Drawing functions, OpenGL API @section GL state control @subsubheading Capabilities @defun gl-enable cap @defunx gl-disable cap Turns on and off a capability @var{cap}. Check out OpenGL reference for the list of capabilities. @end defun @defun gl-is-enabled cap Returns @code{#t} of @code{#f} depending on @var{cap} is enabled or not. @end defun @defun gl-enable-client-state array @defunx gl-disable-client-state array Enable/disable a client-side array (e.g. vertex array) specified by @var{array}. @var{Array} can be one of the following constants. @table @code @item GL_VERTEX_ARRAY @item GL_COLOR_ARRAY @item GL_INDEX_ARRAY @item GL_NORMAL_ARRAY @item GL_TEXTURE_COORD_ARRAY @item GL_EDGE_FLAG_ARRAY @end table @end defun @subsubheading State values Gauche has two variations for each type of OpenGL @code{glGetTYPE} APIs; nondestructive version and destructive versions. Nondestructive versions such as @code{gl-get-boolean} allocates and returns the vector of appropriate type for the state. For destructive versions such as @code{gl-get-boolean!}, you need to pass a vector to be filled in. The destructive version is non-allocating operation, so it is suitable if you call it within the drawing loop. If the state has a scalar value, the non-destructive version of query function returns a scalar value, but you need to pass a (uniform) vector of length 1 for the destructive version. @defun gl-state-vector-size state [Gauche specific] Returns the required size of the vector to retrieve GL state @var{state}. It is useful to prepare the vector to pass to the destructive version of @code{glGetTYPE} API. @end defun @defun gl-get-boolean state @defunx gl-get-boolean! gl-boolean-vector state Get (a) boolean state value(s). @end defun @defun gl-get-integer state @defunx gl-get-integer! s32vector state Get (an) integer state value(s). @end defun @defun gl-get-float state @defunx gl-get-float! f32vector state Get (a) single-precision floating-point state value(s). @end defun @defun gl-get-double state @defunx gl-get-double! f64vector state Get (a) double-precision floating-point state value(s). @end defun @subsubheading Push/pop attributes @defun gl-push-attrib mask @defunx gl-pop-attrib Push/pop attributes indicated by @var{mask}. Valid @var{mask} can be @code{logior} of the following bits (GLL_ALL_ATTRIB_BITS is @code{logior} of all the bits). @table @code @item GL_ACCUM_BUFFER_BIT @item GL_COLOR_BUFFER_BIT @item GL_CURRENT_BIT @item GL_DEPTH_BUFFER_BIT @item GL_ENABLE_BIT @item GL_EVAL_BIT @item GL_FOG_BIT @item GL_HINT_BIT @item GL_LIGHTING_BIT @item GL_LINE_BIT @item GL_LIST_BIT @item GL_PIXEL_MODE_BIT @item GL_POINT_BIT @item GL_POLYGON_BIT @item GL_POLYGON_STIPPLE_BIT @item GL_SCISSOR_BIT @item GL_STENCIL_BUFFER_BIT @item GL_TEXTURE_BIT @item GL_TRANSFORM_BIT @item GL_VIEWPORT_BIT @item GL_ALL_ATTRIB_BITS All of the above. @end table @end defun @defun gl-push-client-attrib mask @defunx gl-pop-client-attrib Push/pop client attributes. Valid @var{mask} can be @code{logior} of the following @table @code @item GL_CLIENT_PIXEL_STORE_BIT @item GL_CLIENT_VERTEX_ARRAY_BIT @item GL_ALL_CLIENT_ATTRIB_BITS All of the above. @end table @end defun @subsubheading Other queries @defun gl-get-error Returns the value of the error flag. Returned an integer value. Check out the OpenGL documentation for the possible error values. This function resets the error flag to @code{GL_NO_ERROR}. @end defun @defun glu-error-string error-code Returns a descriptive string for @var{error-code} returned by @code{gl-get-error}. @end defun @defun gl-get-string name Returns informative string about @var{name} of the GL library. @var{Name} can be one of the following. @table @code @item GL_VENDOR @item GL_RENDERER @item GL_VERSION @item GL_EXTENSIONS @end table To check a specific version or extension, you can also use the utility procedure @code{gl-version>?} etc. See @ref{GL feature checking}. @end defun @defun glu-get-string name Returns informative string about @var{name} of the GLU library. @var{Name} can be one of the following. @table @code @item GLU_VERSION @item GLU_EXTENSIONS @end table @end defun @subsubheading Hints @defun gl-hint target hint Controls quality of @var{target} by @var{hint}. @var{Target} can be one of the following: @table @code @item GL_POINT_SMOOTH_HINT @item GL_LINE_SMOOTH_HINT @item GL_POLYGON_SMOOTH_HINT @item GL_FOG_HINT @item GL_PERSPECTIVE_CORRECTION_HINT @end table And @var{hint} can be one of the following: @table @code @item GL_FASTEST @item GL_NICEST @item GL_DONT_CARE @end table @end defun @c ---------------------------------------------------------------------- @node GL states for drawing, Transformation, GL state control, OpenGL API @section GL states for drawing @defun gl-point-size size Sets the width in pixels for rendered points. The possible range of @var{size} on the running GL implementation can be obtained by passing either @code{GL_ALIASED_POINT_SIZE_RANGE} or @code{GL_SMOOTH_POINT_SIZE_RANGE} to @code{gl-get-float}. @end defun @defun gl-line-width width Sets the width in pixels for rendered lines. The possible range of @var{width} on the running GL implementation can be obtained by passing either @code{GL_ALIASED_LINE_WIDTH_RANGE} or @code{GL_SMOOTH_LINE_WIDTH_RANGE} to @code{gl-get-float}. @end defun @defun gl-line-stipple factor pat Sets the current stippling pattern for lines. @code{pat} must be an exact integer, and its lower 16 bits are used to specify the stipple pattern. @var{Factor} is an integer factor to specify how many pixels corresponds to one bit in @var{pat}. You have to enable @var{GL_LINE_STIPPLE} to use face culling. @end defun @defun gl-polygon-mode face mode Specifies the drawing mode for a polygon's front and back faces. @var{Face} can be one of the followings: @table @code @item GL_FRONT_AND_BACK @item GL_FRONT @item GL_BACK @end table @var{Mode} can be one of the followings: @table @code @item GL_POINT @item GL_LINE @item GL_FILL @end table @end defun @defun gl-front-face mode Controls how OpenGL determine front face of a polygon @var{Mode} can be one of the followings: @table @code @item GL_CCW Front face is where ordered vertices appear in a counterclockwise orientation (default). @item GL_CW Front face is where ordered vertices appear in a clockwise orientation. @end table @end defun @defun gl-cull-face mode Indicates which face of polygons should be culled. @var{Mode} can be one of the followings: @table @code @item GL_FRONT @item GL_BACK @item GL_FRONT_AND_BACK @end table You have to enable @var{GL_CULL_FACE} to use face culling. @end defun @defun gl-polygon-stipple mask Defines the current stipple pattern for filled polygons. @var{Mask} has to be a u8vector of length 128, specifying a 32x32 bitmap pattern. You have to enable @var{GL_POLYGON_STIPPLE} to use this feature. @end defun @defun gl-edge-flag flag Sets the edge flag(s) of vertices. When @var{flag} is a GL boolean vector, @code{glEdgeFlagv} is called. Otherwise @var{flag} is used as a single boolean value for @code{glEdgeFlag}. @end defun @defun gl-blend-func sfactor dfactor Controls how color values in the fragment being processed (the source) are combined with the ones in the framebuffer (the destination). Possible values for the @var{sfactor} and @var{dfactor} arguments are as follows. @table @code @item GL_ZERO @item GL_ONE @item GL_DST_COLOR @item GL_SRC_COLOR @item GL_ONE_MINUS_DST_COLOR @item GL_ONE_MINUS_SRC_COLOR @item GL_SRC_ALPHA @item GL_ONE_MINUS_SRC_ALPHA @item GL_DST_ALPHA @item GL_ONE_MINUS_DST_ALPHA @item GL_SRC_ALPHA_SATURATE @item GL_CONSTANT_COLOR @item GL_ONE_MINUS_CONSTANT_COLOR @item GL_CONSTANT_ALPHA @item GL_ONE_MINUS_CONSTANT_ALPHA @end table @end defun @defun gl-blend-equation mode [GL_ARB_imaging] By default, the source and destination colors are added after processed as specified by @var{gl-blend-func}. With this extension API you can change the function. @var{Mode} can be one of the following values: @table @code @item GL_FUNC_ADD @item GL_FUNC_SUBTRACT @item GL_FUNC_REVERSE_SUBTRACT @item GL_MIN @item GL_MAX @end table @end defun @defun gl-blend-color red green blue alpha [GL_ARB_imaging] Sets the constant color used in the blending function. @end defun @defun gl-polygon-offset factor units [GL1.1] Offset the depth value of each fragment. Useful to avoid artifacts when you draw polygon edges over its surfaces, for example. @end defun @defun gl-clip-plane plane equation Defines a clipping plane. @var{Plane} specifies which clipping plane you're defining. Use @code{GL_MAX_CLIP_PLANES} to @code{gl-get-integer} to obtain the number of clipping planes you can use. You have to enable the specific clipping plane (e.g. @code{(gl-enable GL_CLIP_PLANE0)}) to use the clipping plane. @var{Equation} must be an f64vector of size 4, specifying four coefficients of the plane equation, @code{Ax + By + Cz + D = 0}. @end defun @defun gl-get-clip-plane plane Returns the four coefficients of the equation of clipping plane @var{plane}, in f64vector. @end defun @defun gl-fog pname param Sets the parameters and function for the fog effect. Possible values for @var{pname} and accepted @var{param} for each @var{pname} are shown below. @table @code @item GL_FOG_MODE Either @code{GL_EXP}, @code{GL_EXP2}, @code{GL_LINEAR} to select the fog factors. @item GL_FOG_DENSITY @item GL_FOG_START @item GL_FO_END A real number to specify those parametes. @item GL_FOG_COLOR An f32vector of size 4 to specify the color. @end table @end defun @c ---------------------------------------------------------------------- @node Transformation, Display lists, GL states for drawing, OpenGL API @section Transformation @defun gl-matrix-mode mode Speficies whether the modelview, projection, or texture matrix will be modified. @var{Mode} can be one of the followings: @table @code @item GL_MODELVIEW @item GL_PROJECTION @item GL_TEXTURE @end table @end defun @defun gl-load-identity Loads an identity matrix to the current modifiable matrix. @end defun @defun gl-load-matrix mat Loads the matrix @var{mat} to the current modifiable matrix. @var{Mat} can be a @code{} instance, or f32 or f64vector of length 16. @end defun @defun gl-mult-matrix mat Multiplies the matrix @var{mat} to the current modifiable matrix. @var{Mat} can be a @code{} instance, or f32 or f64vector of length 16. @end defun @defun gl-translate x y z Multiplies the current matrix by a matrix taht translates an object by (@var{x}, @var{y}, @var{z}). Internally, @code{glTranslated} is called. @end defun @defun gl-rotate angle x y z Multiplies the current matrix by a matrix that rotates an object in a counterclockwise direction about the ray from the origin through the point (@var{x}, @var{y}, @var{z}) by @var{angle} degrees. Internally, @code{glRotated} is called. @end defun @defun gl-scale x y z Multiplies the current matrix by a matrix that scales an object by (@var{x}, @var{y}, @var{z}). Internally, @code{glScaled} is called. @end defun @defun glu-look-at eyex eyey eyez ctrx ctry ctrz upx upy upz Defines a viewing matrix and multiplies it to the right of the current matrix. @end defun @defun gl-frustum left right bottom top nearv farv Creates a matrix for a perspective-view frustum and multiplies the current matrix by it. @end defun @defun glu-perspective fovy aspect znear zfar Creates a matrix for a symmetrix perspective-view frustum and multiplies the current matrix by it. @end defun @defun gl-ortho left right bottom top nearv farv Creates a matrix for an orthographic parallel viewing volume nand multiplies the current matrix by it. @end defun @defun glu-ortho-2d left right bottom top Convenience procedure for 2D drawing; it is the same as @code{gl-ortho} except nearv and farv are fixed (along Z axis) to -1.0 and 1.0, respectively. @end defun @defun gl-viewport x y width height Defines a pixel rectangle in the window into which the final image is mapped. @end defun @defun gl-push-matrix @defunx gl-pop-matrix Pushes/pops the current matrix. @end defun @defmac gl-push-matrix* expr @dots{} A convenience macro. Pushes the current matrix, executes @var{expr}s, then pop the current matrix. @end defmac @c ---------------------------------------------------------------------- @node Display lists, Vertex arrays, Transformation, OpenGL API @section Display lists @defun gl-gen-lists range Allocates @var{range} number of contiguous display list indices. Returns an integer which is the smallest display list index you can use. @end defun @defun gl-new-list list-no mode Starts a display list construction. @var{Mode} may be one of the constants @code{GL_COMPILE} or @code{GL_COMPILE_AND_EXECUTE}. @end defun @defun gl-end-list Ends a display list construction. @end defun @defun gl-call-list list-no Calls a display list. @end defun @defun gl-is-list list-no Returns @code{#t} if @var{list-no} is an already used display list number, @code{#f} otherwise. @end defun @defun gl-delete-lists list-no-start range Deletes @var{range} display list, beginning from @var{list-no-start}. @end defun @defun gl-list-base base Specifies the offset that's added to the display list indices in @code{gl-call-list}. @end defun @defun gl-call-lists size type lists @defunx gl-call-lists size lists @defunx gl-call-lists lists Executes @var{size} display list, whose indices are contained in @var{lists}. You can pass a u8, s8, u16, s16, u32, s32 or f32vector, or a string, as @var{lists}. If it is a string, each byte consists of the string is interpreted as an unsigned integer specifying a display list. It is useful for the technique to display character strings by creating display lists for each ASCII characters. But be aware that it doesn't work for multibyte characters. Usually you can use the simplest form (the third form) and Gauche-gl infers the @var{size} and @var{type} from the passed @var{lists}. You can explicitly specify @var{size} if you want to use just a beginning portion of @var{lists}. An error is signalled if you specify @var{size} that is larger than the size of @var{lists}. Specifying @var{type} is useful only if @var{lists} is a u8vector, and you want to use one of three special types allowed to @code{glCallLists}, namely @code{GL_2_BYTES}, @code{GL_3_BYTES}, and @code{GL_4_BYTES}. @end defun @c ---------------------------------------------------------------------- @node Vertex arrays, Lighting, Display lists, OpenGL API @section Vertex arrays Scheme version of APIs doesn't have @var{GLenum type} argument in C API, since Gauche-gl can figure out the type by passed vectors. Scheme API of @code{gl-*-array} has @var{offset} optional argument, by which you can pass the GL the values beginning from the @var{offset}-th element of the passed uniform vector. This isn't in GL C API, since you can just offset the pointer in C. NOTE: it is caller's responsibility to guarantee the passed vector has enough length. GL doesn't have an interface to specify the boundary, so Gauche can't detect an invalid length vector. @defun gl-vertex-pointer size vec &optional stride offset Sets the vertex array. @var{Size} specifies the number of scalar values per vertex (2, 3, or 4), and @var{vec} provides the actual value in either f32, f64, s32 or s16vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-normal-pointer vec &optional stride offset Sets the normal array. @var{Vec} should be either a f32, f64, s32 or s16vector, where each consecutive triplet specifies a normal vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-color-pointer size vec &optional stride offset Sets the color array. @var{Size} specifies the number of scalar values per color (3 or 4), and @var{vec} provides the actual values in either f32, f64, u32, u16, u8, s32, s16, or s8vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-index-pointer vec &optional stride offset Sets the index array. @var{Vec} can be either s32, s16, u8, f32, or f64vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-tex-coord-pointer size vec &optional stride offset Sets the texture coordinate array. @var{Size} specifies the number of scalar values per texture coordinate (1, 2, 3 or 4), and @var{vec} provides the actual values in either f32, f64, s32 or s16vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-edge-flag-pointer vec &optional stride offset Sets the edge flag array. @var{Vec} must be a GL boolean vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-array-element ith Dereference @var{ith} vertex information of the currently enabled arrays. @end defun @defun gl-draw-elements mode indices Issues geometric primitive calls consists of the vertex information of the currently enabled arrays, each of which is specified by @var{indices}, which should be either a u8, u16 or u32vector. @var{Mode} is the same as of @code{gl-begin}. @end defun @defun gl-draw-range-elements mode start end indices [GL1.2] Like @code{gl-draw-elements}, but limits the range of indices between @var{start} and @var{end}, inclusive. GL driver may take advantage of the information for better performance. @end defun @defun gl-draw-arrays mode first count This is more straightforward. Starting from @var{first} index, @var{count} vertices is wrtten in the drawing mode @var{mode} (same as of @code{gl-begin}), taken from the current enabled arrays. @end defun @defun gl-interleaved-arrays format vec &optional stride offset @var{Vec} must be a f32vector. It contains various information (e.g. vertex position, color and texture coordinate) interleaved, in the way specified by @var{format}. In Scheme API, we only allow uniform vector as @var{vec}, so you can't use the format that mixes float and integer, such as @code{GL_C4UB_V2F}. @end defun @c ---------------------------------------------------------------------- @node Lighting, Pixels, Vertex arrays, OpenGL API @section Lighting @defun gl-shade-model mode Sets the shading model, either @code{GL_SMOOTH} or @code{GL_FLAT}. @end defun @defun gl-light light pname param Creates a light specified by @var{light}, which is one of @code{GL_LIGHT0}, @dots{}, @code{GL_LIGHT7}, and sets a characteristics named by @var{pname} with the value @var{param}. Possible values as @var{pname} and acceptable types of @var{param} are as follows. @table @asis @item @code{GL_AMBIENT}, @code{GL_DIFFUSE}, @code{GL_SPECULAR}, @code{GL_POSITION} Accepts an f32 or s32vector of size 4. @item @code{GL_SPOT_DIRECTION} Accepts an f32 or s32vector of size 3. @item @code{GL_SPOT_EXPONENT}, @code{GL_SPOT_CUTOFF}, @code{GL_CONSTNAT_ATTENUATION}, @code{GL_LINEAR_ATTENUATION}, @code{GL_QUADRATIC_ATTENUATION} Accepts a real number (@code{glLightf} is used). @end table @end defun @defun gl-get-light light pname Returns the value of the property @var{pname} of the light @var{light}. Returned value can be f32vector or a real number. @end defun @defun gl-light-model pname param Sets the value of the property @var{pname} of the lighting model. Possible @var{pname} and its allowed @var{param} is as follows. @table @asis @item @code{GL_LIGHT_MODEL_AMBIENT} Accepts f32 or s32vector of size 4. @item @code{GL_LIGHT_MODEL_LOCAL_VIEWER}, @code{GL_LIGHT_MODEL_TWO_SIDE} Accepts any Scheme value, which is interpreted as a boolean value. (That is, you have to pass @code{#f} to turn off these properties, and any other value to turn on. @item @code{GL_LIGHT_MODEL_COLOR_CONTROL} Accepts an enum value either @code{GL_SINGLE_COLOR} or @code{GL_SEPARATE_SPECULAR_COLOR}. @end table @end defun @defun gl-matrial face pname param Sets the current material property. @var{Face} may be either @code{GL_FRONT}, @code{GL_BACK}, or @code{GL_FRONT_AND_BACK}. Possible values of @var{pname} and acceptable @var{param} types are as follows. @table @asis @item @code{GL_AMBIENT}, @code{GL_DIFFUSE}, @code{GL_AMBIENT_AND_DIFFUSE}, @code{GL_SPECULAR}, @code{GL_EMISSION} Accepts f32 or s32vector of size 4. @item @code{GL_SHININESS} Accepts a single real number (@code{glMatrialf} is called). @item @code{GL_COLOR_INDEXES} Accepts f32 or s32vector of size 3. @end table @end defun @defun gl-get-material face pname Returns the current material property of @var{face} and @var{pname}. The type of returned value may be f32vector, s32vector (only for @code{GL_COLOR_INDEXES}), or a real number. @end defun @defun gl-color-material face mode Makes the material property @var{mode} (e.g. @code{GL_AMBIENT} etc.) of the face @var{face} follow the current color set by @code{gl-color}. @end defun @c ---------------------------------------------------------------------- @node Pixels, Texture mapping, Lighting, OpenGL API @section Pixels, bitmaps and images @subheading Pixel operations @defun gl-bitmap width height xbo ybo xbi ybi bitmap Draws a bitmap. @var{Width} and @var{height} gives the dimension of the bitmap. @var{Xbo}, @var{ybo}, @var{xbi}, and @var{ybi} specifies the origin and increment of the current raster position. @var{Bitmap} is the actual bitmap data, packed in a u8vector. @end defun @defun gl-read-pixels x y width height format type Reads pixel data from the framebuffer. Returns the pixel data in a uniform vector of the type determined by @var{format} and @var{type} (check out OpenGL doc to find out the actual data format). @end defun @defun gl-draw-pixels width height format type pixels Draws a pixel data @var{pixels} at the current raster position. @var{Pixels} must be a uniform vector compatible to the specified @var{format} and @var{type} values. @end defun @defun gl-copy-pixels x y width height buffer Copies pixel data in a rectangle area of the framebuffer, specified by lower-left corner (@var{x}, @var{y}) and dimensions (@var{width}, @var{height}). @var{Buffer} specifies which buffer is used, and should be one of @code{GL_COLOR}, @code{GL_STENCIL} or @code{GL_DEPTH}. @end defun @defun gl-pixel-store pname param Sets the pixel stroage models. Check out the OpenGL doc for the possible @var{pname} and @var{param} values. @end defun @defun gl-pixel-transfer pname param Sets the pixel transfer modes. Check out the OpenGL doc for the possible @var{pname} and @var{param} values. @end defun @defun gl-pixel-map map values Sets the pixel map table @var{map} with @var{values}, which must be either u16, u32 or f32vecotor. Check out the OpenGL doc for the possible @var{map} values. @end defun @defun gl-pixel-zoom xfactor yfactor Sets the magnification/reduction factors for pixel-write operations. @end defun @defun gl-get-pixel-map map &optional type Returns the current pixel map table as an uniform vector specified by @var{type}, which must be either a class @code{} (default), @code{}, or @code{}. @end defun @defun gl-get-pixel-map! map values Like @code{gl-get-pixel-map}, but instead of allocating a new vector, it stores the result to a uniform vector passed to @var{values}. It is a caller's responsibility to ensure @var{values} has enough size. @end defun @subheading Color tables @defun gl-color-table target internal-format width format type data [GL_ARB_imaging] Specifies one of the color table @var{target}. @var{Data} should be a uniform vector compatible to the @var{format} and @var{type} parameters. @end defun @defun gl-color-table-parameter target pname param [GL_ARB_imaging] Sets the color table parameter @var{pname} (either @code{GL_COLOR_TABLE_SCALE} or @code{GL_COLOR_TABLE_BIAS}), of the color table @var{target}. @var{Param} must be an f32 or s32vector of size 4. @end defun @defun gl-copy-color-table target internal-format x y width [GL_ARB_imaging] Creates a color table @var{target} using framebuffer data. The pixels are read from the current buffer for read (specified by @code{glReadBuffer}). @end defun @defun gl-color-sub-table target start count format type data [GL_ARB_imaging] Replaces a part of color table @var{target}, starting @var{start} and @var{count} entries. Values are given in @var{data} as a uniform vector compatible to the @var{format} and @var{type} arguments. @end defun @defun gl-copy-color-sub-table target start x y width [GL_ARB_imaging] Replaces a part of color table entries using framebuffer data. @end defun @defun gl-get-color-table! target format type data [GL_ARB_imaging] Reads the color table @var{target} and store it in @var{data}, in the format specified by @var{format} and @var{type}. @var{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments. The caller must ensure that @var{data} has enough size to contain the result. @end defun @subheading Convolutions @defun gl-convolution-filter-2d target internal-format width height format type data [GL_ARB_imaging] Defines a 2D convolution filter. @var{Target} must be GL_CONVOLUTION_2D. @code{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-copy-convolution-filter-2d target internal-format x y width height [GL_ARB_imaging] Defines a 2D convolution filter, taking the convolution filter data from the current color buffer to read. @end defun @defun gl-separable-filetr-2d target internal-format width height format type row column [GL_ARB_imaging] Defines a 2D convolution filter by a product of a 1D row vector and 1D column vector. @var{Target} must be GL_SEPARABLE_2D. Both @var{row} and @var{column} must be a uniform vector, compatible with the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-convolution-filter-1d target internal-format width format type data [GL_ARB_imaging] Defines 1D convolution filter. @var{Target} must be GL_CONVOLUTION_1D. @code{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-copy-convolution-filter-1d target internal-format x y width [GL_ARB_imaging] Defines 1D convolution filter, taking the convolution filter data from the current color buffer to read. @end defun @defun gl-convolution-parameter target pname param [GL_ARB_imaging] Sets a parameter for a convolution filter @var{target}, which can be either @code{GL_CONVOLUTION_2D}, @code{GL_SEPARABLE_2D}, or @code{GL_CONVOLUTION_1D}. Possible values of @var{pname} and their acceptable @var{param} are as follows. @table @asis @item @code{GL_CONVOLUTION_BORDER_MODE} Either one of the constants: @code{GL_REDUCE}, @code{GL_CONSTNAT_BORDER}, @code{GL_REPLICATE_BORDER} @item @code{GL_CONVOLUTION_FILTER_SCALE}, @code{GL_CONVOLUTION_FILTER_BIAS} An s32 or f32vector of size 4, specifying color values. @end table @end defun @subheading Histogram @defun gl-histogram target width internal-format sink [GL_ARB_imaging] Specifies the way the histogram data is stored. @var{Target} must be either @code{GL_HISTOGRAM} or @code{GL_PROXY_HISTOGRAM}. @var{Width} is the number of entires of the histogram, and has to be a power of 2. @var{Sink} is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline. @end defun @defun gl-reset-histogram target [GL_ARB_imaging] Resets the histogram counters. @var{Target} must be @code{GL_HISTOGRAM}. @end defun @defun gl-get-histogram target reset format type [GL_ARB_imaging] Returns histogram data in a uniform vector, whose type and size are determined by @var{format} and @var{type}. A boolean value @var{reset} specifies whether the histogram should be reset or not. @end defun @defun gl-get-histogram-parameter target pname [GL_ARB_imaging] Returns the parameter value of the histogram. @var{Pname} can be either one of @code{GL_HISTOGRAM_WIDTH}, @code{GL_HISTOGRAM_FORMAT}, @code{GL_HISTOGRAM_RED_SIZE}, @code{GL_HISTOGRAM_GREEN_SIZE}, @code{GL_HISTOGRAM_BLUE_SIZE}, @code{GL_HISTOGRAM_ALPHA_SIZE}, @code{GL_HISTOGRAM_LUMINANCE_SIZE}, or @code{GL_HISTOGRAM_SINK}. The returned value is an integer, except the case of @code{GL_HISTOGRAM_SINK}, which returns a boolean value. @end defun @subheading Minmax @defun gl-minmax target internal-format sink [GL_ARB_imaging] Computes the minimum and maximum pixel values for an image. @var{Target} must be @code{GL_MINMAX}. @var{Sink} is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline. @end defun @defun gl-get-minmax target reset format type [GL_ARB_imaging] Returns the results of the minmax operation in a uniform vector, whose type and size are determined by the @var{format} and @var{type} arguments. A boolean value @var{reset} specifies whether the histogram should be reset or not. @end defun @defun gl-reset-minmax target [GL_ARB_imaging] Resets the minmax counter. @end defun @defun gl-get-minmax-parameter target pname [GL_ARB_imaging] Returns the parameter value of the histogram. @var{Pname} can be either @code{GL_MINMAX_SINK} (returns a boolean value) or @code{GL_MINMAX_FORMAT} (returns an integer). @end defun @c ---------------------------------------------------------------------- @node Texture mapping, Framebuffers, Pixels, OpenGL API @section Texture mapping @subheading Defining textures @defun gl-tex-image-1d target level internalformat width border format type texels @defunx gl-tex-image-2d target level internalformat width height border format type texels @defunx gl-tex-image-3d target level internalformat width height depth border format type texels Defines an 1D, 2D or 3D texture. 3D texture is available only if the GL version is 1.2 or later. The @var{target} parameter can be @code{GL_TEXTURE_1D} or @code{GL_PROXY_TEXTURE_1D} for @code{gl-tex-image-1d}, etc. The @var{level} parameter can be used for multiresolution textures; if this is a single resolution texture, pass 0. @var{Width}, @var{height}, and @var{depth} specify the dimensions of the texture. @var{Border} can be 0 or 1, specifying the border. The actual texture data is passed to the @var{texels} argument in a uniform vector, which should be compatible with the @var{format} and @var{type} parameters and match the size calculated by @var{width}, @var{height} and @var{depth} (and possibly the pixel store setting). @end defun @defun gl-copy-tex-image-1d target level internal-format x y width border @defunx gl-copy-tex-image-2d target level internal-format x y width height border Cerates a 1D or 2D texture from the framebuffer data. @end defun @defun gl-tex-sub-image-1d target level xoffset width format type texels @defunx gl-tex-sub-image-2d target level xoffset yoffset width height format type texels @defunx gl-tex-sub-image-3d target level xoffset yoffset zoffset width height depth format type texels Replaces a part of the current 1D, 2D or 3D texture image by @var{texels}. 3D texture is available only if the GL version is 1.2 or later. @end defun @defun gl-copy-tex-sub-image-1d target level xoffset x y width @defunx gl-copy-tex-sub-image-2d target level xoffset yoffset x y width height @defunx gl-copy-tex-sub-image-3d target level xoffset yoffset zoffset x y width height Replaces a part of the current 1D, 2D or 3D texture image by the data from the framebuffer. 3D texture is available only if the GL version is 1.2 or later. @end defun @subheading Texture parameters @defun gl-tex-parameter target pname param Sets parameters for the current texture. @var{Target} can be either @var{GL_TEXTURE_1D}, @code{GL_TEXTURE_2D} or @var{GL_TEXTURE_3D}. Possible values for @var{pname}, and accepted type of @var{param} for each @var{pname}, are shown below. @table @code @item GL_TEXTURE_WRAP_S @item GL_TEXTURE_WRAP_T @item GL_TEXTURE_WRAP_R @item GL_TEXTURE_BASE_LEVEL @item GL_TEXTURE_MAX_LEVEL @item GL_TEXTURE_MAG_FILTER @item GL_TEXTURE_MIN_FILTER @var{Param} must be an integer. @item GL_TEXTURE_PRIORITY @item GL_TEXTURE_MIN_LOD @item GL_TEXTURE_MAX_LOD @var{Param} must be a real number. @item GL_TEXTURE_BORDER_COLOR @var{Param} must be an f32vector of size 4, representing a color. @end table @end defun @defun gl-get-tex-parameter target pname Obtains the parameter of the current texture, set by @code{gl-tex-parameter}. @end defun @defun gl-get-tex-level-parameter target level pname Obtains the parameter of the level @var{level} of the current texture specified by @var{target}, which can be either @code{GL_TEXTURE_1D}, @code{GL_TEXTURE_2D}, @code{GL_TEXTURE_3D}, @code{GL_PROXY_TEXTURE_1D}, @code{GL_PROXY_TEXTURE_2D}, or @code{GL_PROXY_TEXTURE_3D}. Possible values for @var{pname} is either one of the following constants: @code{GL_TEXTURE_WIDTH}, @code{GL_TEXTURE_HEIGHT}, @code{GL_TEXTURE_DEPTH}, @code{GL_TEXTURE_BORDER}, @code{GL_TEXTURE_INTERNAL_FORMAT}, @code{GL_TEXTURE_RED_SIZE}, @code{GL_TEXTURE_GREEN_SIZE}, @code{GL_TEXTURE_BLUE_SIZE}, @code{GL_TEXTURE_ALPHA_SIZE}, @code{GL_TEXTURE_LUMINANCE_SIZE}, or @code{GL_TEXTURE_INTENSITY_SIZE}. This procedure returns an integer. @end defun @subheading Mipmaps @defun glu-build-1d-mipmaps target internal-format width format type texels @defunx glu-build-2d-mipmaps target internal-format width height format type texels @defunx glu-build-3d-mipmaps target internal-format width height depth format type texels Constructs a serids of mipmaps and calls @code{gl-tex-image-*d} to load the images. Returns 0 on success, or a GLU error code on failure. @var{Texels} is a uniform vector, that must be compatible with @var{format} and @var{type} arguments, and must have the enough length as specified by @var{width}, @var{height} and @var{depth} parameters. @end defun @defun glu-build-1d-mipmap-levels target internal-format width format type level base max texels @defunx glu-build-2d-mipmap-levels target internal-format width height format type level base max texels @defunx glu-build-3d-mipmap-levels target internal-format width height depth format type level base max texels Like @code{glu-build-*d-mipmaps}, but you can specify the level of @var{texels}, and the range of levels to be generated by the @var{base} and @var{max} parameters. It is used to generate a subset of mipmaps. Returns 0 on success, or a GLU error code on failure. @var{Texels} is a uniform vector, that must be compatible with @var{format} and @var{type} arguments, and must have the enough length as specified by @var{width}, @var{height} and @var{depth} parameters. @end defun @subheading Texture objects @defun gl-gen-textures size Returns @var{size} new names for texture objects in a u32vector. @end defun @defun gl-is-texture name Returns @code{#t} if an integer @var{name} is the name of a texture that has been bound and not deleted yet, @code{#f} otherwise. @end defun @defun gl-bind-texture target name Bind the current texture (specified by @var{target}, e.g. @code{GL_TEXTURE_2D}) to the integer @var{name}. If there's already a texture bound to @var{name}, it becomes current. Otherwise a new texture object is created and made current. @end defun @defun gl-delete-textures names Delets textures. @var{Names} must be a u32vector contains integer names of the texture objects to be deleted. @end defun @defun gl-are-textures-resident! names residences @var{Names} must be a u32vector contains integer names of the texture objects, and @var{residences} must be a GL boolean vector of the same length as @var{names}. If all textures named in @var{names} are resident, @code{#t} is returned and @var{residences} is not modified. Othewise, @code{#f} is returned and @var{residences} is modified to contain @code{#t} if the corresponding texture in @var{names} is resident, @code{#f} othewise. @end defun @defun gl-prioritize-textures names priorities Sets the prioridies of texture objects named by @var{names} to the corresponding entry of @var{priorities} @var{Names} must be a u32vectore and @var{priorities} must be an f32vector, and the lengths of both vectors must match. @end defun @subheading Texture environment and coordinates @defun gl-tex-env target pname param Sets the current texturing function. @var{Target} must be @code{GL_TEXTURE_ENV}. Possible values of @var{pname} and accepted @var{param} for each value is as follows. @table @code @item GL_TEXTURE_ENV_MODE One of @code{GL_DECAL}, @code{GL_REPLACE}, @code{GL_MODULATE} or @code{GL_BLEND}. @item GL_TEXTURE_ENV_COLOR f32vector of size 4 to specify the color. @end table @end defun @defun gl-tex-gen coord pname param Specifies the functions for automatic texture coordinate generation. @var{Coord} specifies the coordinates, either one of @code{GL_S}, @code{GL_T}, @code{GL_R} or @code{GL_Q}. Possible values of @var{pname} and accepted @var{param} for each value is as follows. @table @code @item GL_TEXTURE_GEN_MODE Either @code{GL_OBJECT_LINEAR}, @code{GL_EYE_LINEAR} or @code{GL_SPHERE_MAP}. @item GL_OBJECT_PLANE @item GL_EYE_PLANE An s32, f32 or f64vector of size 4 to specify the plane. @end table @end defun @subheading Multitexturing @defun gl-active-texture-arb texunit [GL_ARB_multitexture] Selects the texture unit that is currently modified by texturing routines. @var{Texunit} is a constant @code{GL_TEXTUREi_ARB}, where @var{i} is 0 to the maximum number of the supported texture units. @end defun @defun gl-multi-tex-coord-arb texunit coords @defunx gl-multi-tex-coord-arb texunit s &optional t r q [GL_ARB_multitexture] Specifies the texture coordinate of the texture unit @var{texunit}. In the first form, you can pass either an f32, f64, s32, or s16vector of length 1 to 4. In the second form, @var{s}, @var{t}, @var{r} and @var{q} must be real numbers. @end defun @defun gl-client-active-texture-arb texunit Selects the current texture unit for specifying texutre-coordinate data with vertex arrays. @end defun @c ---------------------------------------------------------------------- @node Framebuffers, Selection and feedback, Texture mapping, OpenGL API @section Framebuffers @subheading Clearing buffers @defun gl-clear-color r g b a Sets the current clearing color. Each color value sould be a real number, and is clamped to @code{[0.0,1.0]}. @end defun @defun gl-clear-index c Sets the current clearing color (in color index mode). @var{c} must be a real number. @end defun @defun gl-clear-depth depth Sets the current clearing depth value. @var{Depth} must be a real number and clamped to @code{[0.0,1.0]}. @end defun @defun gl-clear-stencil s Sets the current clearing value of the stencil buffer. @end defun @defun gl-clear-accum r g b a Sets the current clearing value of accumulation buffer. @end defun @defun gl-clear mask Clears the specified buffer. @var{Mask} is a logical-or of the following constants. @table @code @item GL_COLOR_BUFFER_BIT @item GL_DEPTH_BUFFER_BIT @item GL_ACCUM_BUFFER_BIT @item GL_STENCIL_BUFFER_BIT @end table @end defun @subheading Selecting color buffers @defun gl-draw-buffer mode Selects (a) buffer(s) to which the image is rendered. Possible @var{mode} values are: @code{GL_FRONT}, @code{GL_FRONT_LEFT}, @code{GL_FRONT_RIGHT}, @code{GL_BACK}, @var{GL_BACK_LEFT}, @var{GL_BACK_RIGHT}, @code{GL_LEFT}, @code{GL_RIGHT}, @code{GL_AUXi}, @code{GL_FRONT_AND_BACK}, and @code{GL_NONE}. @end defun @defun gl-read-buffer mode Selects a color buffer as the source for reading pixels. Possible @var{mode} values are the same as @code{gl-draw-buffer} except @code{GL_FRONT_AND_BACK} and @code{GL_NONE}. @end defun @subheading Masking buffers @defun gl-index-mask mask In color index mode, sets the mask of the color-index buffer. @var{Mask} is an exact integer. @end defun @defun gl-color-mask r g b a @var{R}, @var{g}, @var{b} and @var{a} are boolean values to specify whether the corresponding color channel should be written to the color buffer or not. @end defun @defun gl-depth-mask flag @var{Flag} is a boolean value specifies whether depth buffer should be written or not. @end defun @defun gl-stencil-mask mask Sets the mask bit pattern for the stencil buffer. @var{Mask} is an exact integer. @end defun @subheading Testing and operating on fragments @defun gl-scissor x y width height Sets the scissor rectangle. If the scissor test is enabled (use @code{(gl-enable GL_SCISSOR_TEST)}), only the pixels that lie inside the rectangle are written. @end defun @defun gl-alpha-func func ref Sets the reference value and comparison function for the alpha test. @var{Func} may be either one of @code{GL_NEVER}, @code{GL_ALWAYS}, @code{GL_LESS}, @code{GL_LEQUAL}, @code{GL_EQUAL}, @code{GL_GEQUAL}, @code{GL_GREATER}, or @code{GL_NOTEQUAL}. @var{Ref} sets the reference value, a real number clamped to be between 0.0 and 1.0. @end defun @defun gl-stencil-func func ref mask Sets the comparison function, the reference value, and a mask for stencil test. @var{Func} specifies the funciton, and its possible value is the same as @code{gl-alpha-func}'s. @var{Ref} is an integer reference value, and @var{mask} is an integer specifying bitwise mask. Before the comparison, the reference value and the fragment value are taken bitwise AND by @var{mask}. @end defun @defun gl-stencil-op func zfail zpass Speficies how the stencil buffer should be modified by the result of the stencil test. Each three parameter can take one of the following values independently: @code{GL_KEEP}, @code{GL_ZERO}, @code{GL_REPLACE}, @code{GL_INCR}, @code{GL_DECR}, or @code{GL_INVERT}. @end defun @defun gl-depth-func func Sets the comparison function for the depth test. @var{Func} may be one of the following constant value: @code{GL_NEVER}, @code{GL_ALWAYS}, @code{GL_LESS}, @code{GL_LEQUAL}, @code{GL_EQUAL}, @code{GL_GEQUAL}, @code{GL_GREATER}, or @code{GL_NOTEQUAL}. @end defun @defun gl-depth-range nearv farv Defines an encoding for z-coordinates. @var{Nearv} and @var{farv} define the minimum and maximum values that can be stored in the depth buffer. By default, they're 0.0 and 1.0, respectively. @end defun @defun gl-logic-op opcode Selects the logical operation to be performed, given an incoming (source) fragment and the pixel currently in the color buffer (destination). @var{Opcode} may be one of the following values: @code{GL_CLEAR}, @code{GL_COPY}, @code{GL_NOOP}, @code{GL_SET}, @code{GL_COPY_INVERTED}, @code{GL_INVERT}, @code{GL_AND_REVERSE}, @code{GL_OR_REVERSE}, @code{GL_AND}, @code{GL_OR}, @code{GL_NAND}, @code{GL_NOR}, @code{GL_XOR}, @code{GL_EQUIV}, @code{GL_AND_INVERTED} or @code{GL_OR_INVERTED}. @end defun @defun gl-accum op value Sets the accumulation buffer operation mode. @var{Op} may be one of the following values: @table @code @item GL_ACCUM Reads each pixel from the current selected buffer to read (by @code{gl-read-buffer}), multiplies its values by @var{value}, and adds the result into the accumulation buffer. @item GL_LOAD Same as @code{GL_ACCUM} but replacing the accumulation buffer by the result of multiplication, instead of adding it. @item GL_RETURN Takes the values from accumulation buffer, multiplies them with @var{value}, then write it to the current color buffer to write (by @code{gl-draw-buffer}). @item GL_ADD Adds @var{value} to each pixel in the accumulation buffer and write it back. @item GL_MULT Multiplies @var{value} to each pixel in the accumulation buffer and write it back. The result value is clamped to [-1.0, 1.0]. @end table @end defun @c ---------------------------------------------------------------------- @node Selection and feedback, Projection, Framebuffers, OpenGL API @section Selection and feedback @defun gl-feedback-buffer type buffer @end defun @defun gl-select-buffer buffer @end defun @defun gl-render-mode mode @end defun @defun gl-pass-through token @end defun @defun gl-init-names @end defun @defun gl-load-name name @end defun @defun gl-push-name name @end defun @defun gl-pop-name @end defun @c ---------------------------------------------------------------------- @node Projection, Quadrics, Selection and feedback, OpenGL API @section Projection @defun glu-pick-matrix x y w h vp @end defun @defun glu-project objx objy objz model-mat proj-mat vp @end defun @defun glu-un-project winx winy winz model-mat proj-mat vp @end defun @defun glu-project! win obj model-mat proj-mat vp @end defun @defun glu-un-project! obj win model-map proj-mat vp @end defun @c ---------------------------------------------------------------------- @node Quadrics, Nurbs, Projection, OpenGL API @section Quadrics @deftp {Class} @end deftp @defun glu-quadric-draw-style quad style @defvr {Constant} GLU_POINT @defvrx {Constant} GLU_LINE @defvrx {Constant} GLU_FILL @defvrx {Constant} GLU_SILHUETTE @end defvr @end defun @defun glu-quadric-orientation quad orientation @defvr {Constant} GLU_OUTSIDE @defvrx {Constant} GLU_INSIDE @end defvr @end defun @defun glu-quadric-normals quad normals @defvr {Constant} GLU_SMOOTH @defvrx {Constant} GLU_FLAT @defvrx {Constant} GLU_NONE @end defvr @end defun @defun glu-quadric-texture quad texcoords @end defun @defun glu-cylinder quad base-radius top-radius height slices stacks @end defun @defun glu-sphere quad radius slices stacks @end defun @defun glu-disk quad inner-radius outer-radius slices loops @end defun @defun glu-partial-disk quad inner-radius outer-radius slices loops start-angle sweep-angle @end defun @c ---------------------------------------------------------------------- @node Nurbs, Polygon tesselation, Quadrics, OpenGL API @section Nurbs @deftp {Class} @end deftp @defun glu-load-sampling-matrices nurbs model-matrix proj-matrix viewport @end defun @defun glu-nurbs-property nurbs property value @end defun @defun glu-get-nurbs-property nurbs property @end defun @defun glu-begin-curve nurbs @end defun @defun glu-end-curve nurbs @end defun @defun glu-nurbs-curve nurbs knot stride ctlarray order type @end defun @defun glu-begin-surface nurbs @end defun @defun glu-end-surface nurbs @end defun @c ---------------------------------------------------------------------- @node Polygon tesselation, Programmable shaders, Nurbs, OpenGL API @section Polygon tesselation @deftp {Class} @end deftp @c ---------------------------------------------------------------------- @node Programmable shaders, , Polygon tesselation, OpenGL API @section Programmable shaders @subheading Shader objects @defun gl-create-shader-object-arb type [GL_ARB_shader_objects] Creates a new shader object and returns its handle. @var{Type} can be either @code{GL_VERTEX_SHADER_ARB} or @code{GL_FRAGMENT_SHADER_ARB}. @end defun @defun gl-shader-source-arb shader strings [GL_ARB_shader_objects] Sets the source code of the shader, whose handle is @var{shader}. You can give the source code as a list of strings to @var{strings}. All strings are concatenated internally in the OpenGL driver. @end defun @defun gl-compile-shader-arb shader [GL_ARB_shader_objects] Compile the source code attached to the shader, whose handle is @var{shader}. You can query the result of the compilation by passing @code{GL_OBJECT_COMPILE_STATUS_ARB} to @code{gl-get-object-parameter-arb}; it returns @code{#t} if the compilation succeeded, or @code{#f} if failed. The information about the compilation can be obtained by @code{gl-get-info-log-arb}. @end defun @defun gl-create-program-object-arb [GL_ARB_shader_objects] Creates a new program object and returns its handle. @end defun @defun gl-attach-object-arb program shader [GL_ARB_shader_objects] Attach a shader whose handle is @var{shader} to the program whose handle is @var{program}. @end defun @defun gl-detach-object-arb program shader [GL_ARB_shader_objects] Detach a shader from a program. @end defun @defun gl-link-program-arb program [GL_ARB_shader_objects] Link the program object. The result of linking can be queried by passing @code{GL_OBJECT_LINK_STATUS_ARB} to @code{gl-get-object-parameter-arb}. @end defun @defun gl-use-program-object-arb program [GL_ARB_shader_objects] Installs the program to the current rendering state. @end defun @defun gl-delete-object-arb handle [GL_ARB_shader_objects] Deletes either a shader object or a program object specified by @var{handle}. @end defun @defun gl-get-object-parameter-arb object pname [GL_ARB_shader_objects] Queries the value of @var{pname} of the shader or the program specified by @var{object}. The following values are accepted as @var{pname}: @code{GL_OBJECT_TYPE_ARB}, @code{GL_OBJECT_SUBTYPE_ARB}, @code{GL_OBJECT_DELETE_STATUS_ARB}, @code{GL_OBJECT_COMPILE_STATUS_ARB}, @code{GL_OBJECT_LINK_STATUS_ARB}, @code{GL_OBJECT_VALIDATE_STATUS_ARB}, @code{GL_OBJECT_INFO_LOG_LENGTH_ARB}, @code{GL_OBJECT_ATTACHED_OBJECTS_ARB}, @code{GL_OBJECT_ACTIVE_ATTRIBUTES_ARB}, @code{GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB}, @code{GL_OBJECT_ACTIVE_UNIFORMS_ARB}, @code{GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB}, and @code{GL_OBJECT_SHADER_SOURCE_LENGTH_ARB}. The procedure returns an integer value. @end defun @defun gl-get-shader-source-arb shader [GL_ARB_shader_objects] Returns the shader source code of a shader object @var{shader} in a string. @end defun @defun gl-get-info-log-arb handle [GL_ARB_shader_objects] Returns the information log of an object pointed by @var{handle}. @end defun @defun gl-get-handle-arb pname [GL_ARB_shader_objects] Returns the handle to an object that is used in the current state. The only argument accepted currently as @var{pname} is @code{GL_PROGRAM_OBJECT_ARB}, which returns the handle to the current program object. @end defun @defun gl-get-attached-objects-arb program [GL_ARB_shader_objects] Rethrns a vector of GL object handles that are attached to the @var{program}. @end defun @defun gl-validate-program-arb program [GL_ARB_shader_objects] Checks whether the @var{program} can execute in the current GL state. The result is stored in @var{program}'s log. @end defun @subheading Specifying vertex attributes @defun gl-vertex-attrib-arb index values @defunx gl-vertex-attrib-arb index v0 &rest v1 v2 v3 [GL_ARB_vertex_program] Sets the generic vertex attribute specified by @var{index}. In the first form, you can pass f32, f64, or s16vector of size 1 to 4, or u8, s8, u16, s32, or u32vector of size 4. In the second form, you can pass 1 to 4 real numbers (they are interpreted as C doubles and @code{glVertexAttrib4dARB} is called). @end defun @defun gl-vertex-attrib-4n-arb index values @defunx gl-vertex-attrib-4n-arb index v0 v1 v2 v3 [GL_ARB_vertex_program] These variations can be used to pass normalized values. The first form accepts s8, u8, s16, u16, s32, u32, f32 and f64vector of size 4. The second value takes four integers, whose lower 8bits are taken as unsigned byte and passed to @code{glVertexAttrib4NubARB}. @end defun @defun gl-vertex-attrib-pointer-arb index size vec &optional normalized stride offset [GL_ARB_vertex_program] This is the generic version of vertex arrays. @var{Index} names the attribute, @var{size} specifies the number of components (1, 2, 3 or 4), and @var{vec} is a uniform vector that contains the array of values. The optional boolean @var{normalized} argument tells whether the passed integer values should be mapped to normalized range (@code{#t} or taken as are @code{#f}, default). The optional @var{stride} argument specifies the gap between each set of values within @var{vec}. The optional @var{offset} argument tells GL to take values beginning from the @var{offset}-th element of @var{vec}. @end defun @defun gl-enable-vertex-attrib-array-arb index @defunx gl-disable-vertex-attrib-array-arb index [GL_ARB_vertex_program] Enable or disable a vertex attribute array specified by @var{index}. @end defun @defun gl-bind-attrib-location-arb program index name [GL_ARB_vertex_shader] Associates a user-defined attribute variable in the program object @var{program} with an @var{index}-th generic vertex attribute. @var{Name} is a string of the name of user-defined attribute as appears in the shader program. @end defun @defun gl-get-attrib-location-arb program name [GL_ARB_vertex_shader] Returns an integer index of the user-defined attribute @var{name} in the @var{program}. Must be called after @var{program} is linked. @end defun @defun gl-get-active-attrib-arb program index [GL_ARB_vertex_shader] Obtains information about the @var{index}-th user-defined attribute in the @var{program}. Must be called after @var{program} is linked. It returns three values: the size of the attribute (1, 2, 3 or 4), the type of the attribute (an integer that matches one of the following constants: @code{GL_FLOAT}, @code{GL_FLOAT_VEC2_ARB}, @code{GL_FLOAT_VEC3_ARB}, @code{GL_FLOAT_VEC4_ARB}, @code{GL_FLOAT_MAT2_ARB}, @code{GL_FLOAT_MAT3_ARB}, or @code{GL_FLOAT_MAT4_ARB}.), and the name of the attribute. @end defun @subheading Specifying uniform variables @defun gl-get-uniform-location-arb program name [GL_ARB_shader_objects] Returns an integer location of the uniform variable @var{name} of the program @var{program}. @end defun @defun gl-uniform1-arb location vec @defunx gl-uniform1-arb location v0 @defunx gl-uniform2-arb location vec @defunx gl-uniform2-arb location v0 v1 @defunx gl-uniform3-arb location vec @defunx gl-uniform3-arb location v0 v1 v2 @defunx gl-uniform4-arb location vec @defunx gl-uniform4-arb location v0 v1 v1 v3 [GL_ARB_shader_objects] Sets a value of the uniform variable specified by @var{location}. @var{gl-uniform1-arb} sets a single component value (e.g. @code{float}) @var{gl-uniform2-arb} sets a double component value (e.g. @code{vec2}) etc. The first form of each function takes either an s32vector or f32vector. It can have a size multiple of the number of components to set an array uniform variable (e.g. you can pass an f32vector of size 8 to fill @code{vec2[2]}). The second form just sets the component(s) of a single uniform variable. The arguments @var{v0} to @var{v3} must be real numbers, and coerced to C @code{float} (i.e. @code{glUniform*fARB} is used). @end defun @defun gl-uniform-matrix2-arb location transpose v @defunx gl-uniform-matrix3-arb location transpose v @defunx gl-uniform-matrix4-arb location transpose v [GL_ARB_shader_objects] Sets a matrix uniform variable (or an array of matrix uniform variables) specified by @var{location}. A boolean flag @var{transpose} specifies whether the matrix should be transposed. The @var{v} argument must be a f32vector of size multiple of 4, 9, or 16, respectively. @end defun @defun gl-get-active-uniform-arb program index [GL_ARB_shader_objects] Returns informaton about the @var{index}-th uniform variable of @var{program}. Returns three values. The first one is the size, either 1, 2, 3 or 4. The second value is the type, which is an integer that matches one of the following constants: @code{GL_FLOAT}, @code{GL_FLOAT_VEC(1|2|3|4)_ARB}, @code{GL_INT}, @code{GL_INT_VEC(1|2|3|4)_ARB}, @code{GL_BOOL}, @code{GL_BOOL_VEC(1|2|3|4)_ARB}, @code{GL_FLOAT_MAT(2|3|4)_ARB}. And the third value is the name of the uniform variable. @end defun @subheading Vertex and fragment programs These APIs are for low-level vertex/fragment pipeline programming. @defun gl-gen-programs-arb n [GL_ARB_vertex_program] Generates @var{N} names (integers) for the new programs and returns them in an s32vector. @end defun @defun gl-delete-programs-arb programs [GL_ARB_vertex_program] Deletes programs whose names are specified by an s32vector @var{programs}. @end defun @defun gl-is-program-arb prog-id [GL_ARB_vertex_program] Returns @code{#t} if an integer @var{prog-id} refers to a valid program. @end defun @defun gl-bind-program-arb target prog-id [GL_ARB_vertex_program] Binds a program specified by @var{prog-id} to a @var{target}, which is either @code{GL_VERTEX_PROGRAM_ARB} or @var{GL_FRAGMENT_PROGRAM_ARB}. @end defun @defun gl-program-string-arb target format text [GL_ARB_vertex_program] Sets the source code of the program currently bound to the @var{target} (@code{GL_VERTEX_PROGRAM_ARB} or @var{GL_FRAGMENT_PROGRAM_ARB}). @var{Format} must be @code{GL_PROGRAM_FORMAT_ASCII_ARB}. @var{Text} is a string for the program source. @end defun @defun gl-program-env-parameter-arb target param-id args @defunx gl-program-env-parameter-arb target param-id arg0 arg1 arg2 arg3 @defunx gl-program-local-parameter-arb target param-id args @defunx gl-program-local-parameter-arb target param-id arg0 arg1 arg2 arg3 [GL_ARB_vertex_program] Sets the value of the environment and local parameter specified by @var{param-id} of the program currently bount to the @var{target}. In the first form of each, @var{args} must be either f32 or f64vector of size 4 or @code{} object. @end defun @c ====================================================================== @node GLUT API, Vectors and matrices, OpenGL API, Top @chapter GLUT API @c ---------------------------------------------------------------------- @menu * GLUT window manipulation:: * GLUT overlay:: * GLUT menu API:: * GLUT callbacks:: * GLUT colormap:: * GLUT state retrieval:: * GLUT font:: * GLUT pre-built models:: @end menu @node GLUT window manipulation, GLUT overlay, GLUT API, GLUT API @section GLUT window manipulation @defun glut-init args @end defun @defun glut-init-display-mode mode @end defun @defvr {Constant} GLUT_RGB @defvrx {Constant} GLUT_RGBA @defvrx {Constant} GLUT_INDEX @defvrx {Constant} GLUT_SINGLE @defvrx {Constant} GLUT_DOUBLE @defvrx {Constant} GLUT_ACCUM @defvrx {Constant} GLUT_ALPHA @defvrx {Constant} GLUT_DEPTH @defvrx {Constant} GLUT_STENCIL @defvrx {Constant} GLUT_MULTISAMPLE @defvrx {Constant} GLUT_STEREO @defvrx {Constant} GLUT_LUMINANCE @end defvr @defun glut-init-display-string string @end defun @defun glut-init-window-size width height @end defun @defun glut-init-window-position x y @end defun @defun glut-main-loop @end defun @defun glut-create-widnow name @end defun @defun glut-create-sub-window win x y width height @end defun @defun glut-destroy-window win @end defun @defun glut-post-redisplay @end defun @defun glut-post-window-redisplay win @end defun @defun glut-swap-buffers @end defun @defun glut-get-window @end defun @defun glut-set-window win @end defun @defun glut-set-window-title title @end defun @defun glut-set-icon-title title @end defun @defun glut-position-window x y @end defun @defun glut-reshape-window width height @end defun @defun glut-push-window @defunx glut-pop-window @end defun @defun glut-iconify-window @end defun @defun glut-show-window @defunx glut-hide-window @end defun @defun glut-full-screen @end defun @defun glut-set-cursor cursor @end defun @defvr {Constant} GLUT_CURSOR_RIGHT_ARROW @defvrx {Constant} GLUT_CURSOR_LEFT_ARROW @defvrx {Constant} GLUT_CURSOR_INFO @defvrx {Constant} GLUT_CURSOR_DESTROY @defvrx {Constant} GLUT_CURSOR_HELP @defvrx {Constant} GLUT_CURSOR_CYCLE @defvrx {Constant} GLUT_CURSOR_SPRAY @defvrx {Constant} GLUT_CURSOR_WAIT @defvrx {Constant} GLUT_CURSOR_TEXT @defvrx {Constant} GLUT_CURSOR_CROSSHAIR @defvrx {Constant} GLUT_CURSOR_UP_DOWN @defvrx {Constant} GLUT_CURSOR_LEFT_RIGHT @defvrx {Constant} GLUT_CURSOR_TOP_SIDE @defvrx {Constant} GLUT_CURSOR_BOTTOM_SIDE @defvrx {Constant} GLUT_CURSOR_LEFT_SIDE @defvrx {Constant} GLUT_CURSOR_RIGHT_SIDE @defvrx {Constant} GLUT_CURSOR_TOP_LEFT_CORNER @defvrx {Constant} GLUT_CURSOR_TOP_RIGHT_CORNER @defvrx {Constant} GLUT_CURSOR_BOTTOM_RIGHT_CORNER @defvrx {Constant} GLUT_CURSOR_BOTTOM_LEFT_CORNER @defvrx {Constant} GLUT_CURSOR_INHERIT @defvrx {Constant} GLUT_CURSOR_NONE @defvrx {Constant} GLUT_CURSOR_FULL_CROSSHAIR @end defvr @defun glut-warp-pointer x y @end defun @c ---------------------------------------------------------------------- @node GLUT overlay, GLUT menu API, GLUT window manipulation, GLUT API @section GLUT overlay @defun glut-establish-overlay @end defun @defun glut-remove-overlay @end defun @defun glut-use-layer layer @end defun @defun glut-post-overlay-redisplay @end defun @defun glut-post-window-overlay-redisplay win @end defun @defun glut-show-overlay @end defun @defun glut-hide-overlay @end defun @c ---------------------------------------------------------------------- @node GLUT menu API, GLUT callbacks, GLUT overlay, GLUT API @section GLUT menu API @defun glut-create-menu callback @end defun @defun glut-destroy-menu menu @end defun @defun glut-get-emnu @end defun @defun glut-set-menu menu @end defun @defun glut-add-menu-entry label value @end defun @defun glut-add-sub-menu label submenu @end defun @defun glut-change-to-menu-entry item label value @end defun @defun glut-change-to-sub-menu item label submenu @end defun @defun glut-remove-menu-item item @end defun @defun gult-attach-menu button @end defun @defun glut-detach-menu button @end defun @c ---------------------------------------------------------------------- @node GLUT callbacks, GLUT colormap, GLUT menu API, GLUT API @section GLUT callbacks @defun glut-display-func fn @end defun @defun glut-reshape-func fn @end defun @defun glut-keyboard-func fn @end defun @defvr {Constant} GLUT_KEY_F1 @defvrx {Constant} GLUT_KEY_F2 @defvrx {Constant} GLUT_KEY_F3 @defvrx {Constant} GLUT_KEY_F4 @defvrx {Constant} GLUT_KEY_F5 @defvrx {Constant} GLUT_KEY_F6 @defvrx {Constant} GLUT_KEY_F7 @defvrx {Constant} GLUT_KEY_F8 @defvrx {Constant} GLUT_KEY_F9 @defvrx {Constant} GLUT_KEY_F10 @defvrx {Constant} GLUT_KEY_F11 @defvrx {Constant} GLUT_KEY_F12 @defvrx {Constant} GLUT_KEY_LEFT @defvrx {Constant} GLUT_KEY_UP @defvrx {Constant} GLUT_KEY_RIGHT @defvrx {Constant} GLUT_KEY_DOWN @defvrx {Constant} GLUT_KEY_PAGE_UP @defvrx {Constant} GLUT_KEY_PAGE_DOWN @defvrx {Constant} GLUT_KEY_HOME @defvrx {Constant} GLUT_KEY_END @defvrx {Constant} GLUT_KEY_INSERT @end defvr @defun glut-mouse-func fn @end defun @defvr {Constant} GLUT_LEFT_BUTTON @defvrx {Constant} GLUT_MIDDLE_BUTTON @defvrx {Constant} GLUT_RIGHT_BUTTON @defvrx {Constant} GLUT_DOWN @defvrx {Constant} GLUT_UP @end defvr @defun glut-motion-func fn @end defun @defun glut-passive-motion-func fn @end defun @defun glut-entry-func fn @end defun @defvr {Constant} GLUT_LEFT @defvrx {Constant} GLUT_ENTERED @end defvr @defun glut-visibility-func fn @end defun @defvr {Constant} GLUT_NOT_VISIBLE @defvrx {Constant} GLUT_VISIBLE @end defvr @defun glut-idle-func fn @end defun @defun glut-timer-func millis fn value @end defun @defun glut-menu-state-func fn @end defun @defun glut-special-func fn @end defun @defun glut-spaceball-motion-func fn @end defun @defun glut-spaceball-rotate-func fn @end defun @defun glut-spaceball-button-func fn @end defun @defun glut-button-box-func fn @end defun @defun glut-dials-func fn @end defun @defun glut-tablet-motion-func fn @end defun @defun glut-tablet-button-func fn @end defun @defun glut-menu-status-func fn @end defun @defun glut-overlay-dislay-func fn @end defun @defun glut-window-status-func fn @end defun @defun glut-keyboard-up-func fn @end defun @defun glut-special-up-func fn @end defun @defun glut-joystick-func fn interval @end defun @c ---------------------------------------------------------------------- @node GLUT colormap, GLUT state retrieval, GLUT callbacks, GLUT API @section GLUT colormap @defun glut-set-color index r g b @end defun @defun glut-get-color index component @end defun @defvr {Constant} GLUT_RED @defvrx {Constant} GLUT_GREEN @defvrx {Constant} GLUT_BLUE @end defvr @defun glut-copy-colormap win @end defun @c ---------------------------------------------------------------------- @node GLUT state retrieval, GLUT font, GLUT colormap, GLUT API @section GLUT state retrieval @defun glut-get type @end defun @defvr {Constant} GLUT_WINDOW_X @defvrx {Constant} GLUT_WINDOW_Y @defvrx {Constant} GLUT_WINDOW_WIDTH @defvrx {Constant} GLUT_WINDOW_HEIGHT @defvrx {Constant} GLUT_WINDOW_BUFFER_SIZE @defvrx {Constant} GLUT_WINDOW_STENCIL_SIZE @defvrx {Constant} GLUT_WINDOW_DEPTH_SIZE @defvrx {Constant} GLUT_WINDOW_RED_SIZE @defvrx {Constant} GLUT_WINDOW_GREEN_SIZE @defvrx {Constant} GLUT_WINDOW_BLUE_SIZE @defvrx {Constant} GLUT_WINDOW_ALPHA_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_RED_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_GREEN_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_BLUE_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_ALPHA_SIZE @defvrx {Constant} GLUT_WINDOW_DOUBLEBUFFER @defvrx {Constant} GLUT_WINDOW_RGBA @defvrx {Constant} GLUT_WINDOW_PARENT @defvrx {Constant} GLUT_WINDOW_NUM_CHILDREN @defvrx {Constant} GLUT_WINDOW_COLORMAP_SIZE @defvrx {Constant} GLUT_WINDOW_NUM_SAMPLES @defvrx {Constant} GLUT_WINDOW_STEREO @defvrx {Constant} GLUT_WINDOW_CURSOR @defvrx {Constant} GLUT_SCREEN_WIDTH @defvrx {Constant} GLUT_SCREEN_HEIGHT @defvrx {Constant} GLUT_SCREEN_WIDTH_MM @defvrx {Constant} GLUT_SCREEN_HEIGHT_MM @defvrx {Constant} GLUT_MENU_NUM_ITEMS @defvrx {Constant} GLUT_DISPLAY_MODE_POSSIBLE @defvrx {Constant} GLUT_INIT_WINDOW_X @defvrx {Constant} GLUT_INIT_WINDOW_Y @defvrx {Constant} GLUT_INIT_WINDOW_WIDTH @defvrx {Constant} GLUT_INIT_WINDOW_HEIGHT @defvrx {Constant} GLUT_INIT_DISPLAY_MODE @defvrx {Constant} GLUT_ELAPSED_TIME @defvrx {Constant} GLUT_WINDOW_FORMAT_ID @end defvr @defun glut-device-get type @end defun @defvr {Constant} GLUT_HAS_KEYBOARD @defvrx {Constant} GLUT_HAS_MOUSE @defvrx {Constant} GLUT_HAS_SPACEBALL @defvrx {Constant} GLUT_HAS_DIAL_AND_BUTTON_BOX @defvrx {Constant} GLUT_HAS_TABLET @defvrx {Constant} GLUT_NUM_MOUSE_BUTTONS @defvrx {Constant} GLUT_NUM_SPACEBALL_BUTTONS @defvrx {Constant} GLUT_NUM_BUTTON_BOX_BUTTONS @defvrx {Constant} GLUT_NUM_DIALS @defvrx {Constant} GLUT_NUM_TABLET_BUTTONS @defvrx {Constant} GLUT_DEVICE_IGNORE_KEY_REPEAT @defvrx {Constant} GLUT_DEVICE_KEY_REPEAT @defvrx {Constant} GLUT_HAS_JOYSTICK @defvrx {Constant} GLUT_OWNS_JOYSTICK @defvrx {Constant} GLUT_JOYSTICK_BUTTONS @defvrx {Constant} GLUT_JOYSTICK_AXES @defvrx {Constant} GLUT_JOYSTICK_POLL_RATE @end defvr @defun glut-extension-supported name @end defun @defun glut-get-modifiers @end defun @defvr {Constant} GLUT_ACTIVE_SHIFT @defvrx {Constant} GLUT_ACTIVE_CTRL @defvrx {Constant} GLUT_ACTIVE_ALT @end defvr @defun glut-layer-get type @end defun @defvr {Constant} GLUT_OVERLAY_POSSIBLE @defvrx {Constant} GLUT_LAYER_IN_USE @defvrx {Constant} GLUT_HAS_OVERLAY @defvrx {Constant} GLUT_TRANSPARENT_INDEX @defvrx {Constant} GLUT_NORMAL_DAMAGED @defvrx {Constant} GLUT_OVERLAY_DAMAGED @end defvr @c ---------------------------------------------------------------------- @node GLUT font, GLUT pre-built models, GLUT state retrieval, GLUT API @section GLUT font @deftp {Class} @clindex glut-font @end deftp @defun glut-bitmap-character font character @end defun @defun glut-bitmap-width font character @end defun @defun glut-stroke-character font character @end defun @defun glut-stroke-width font character @end defun @defun glut-bitmap-length font string @end defun @defun glut-stroke-length font string @end defun @c ---------------------------------------------------------------------- @node GLUT pre-built models, , GLUT font, GLUT API @section GLUT pre-built models @defun glut-wire-sphere radius slices stacks @defunx glut-solid-sphere radius slices stacks @end defun @defun glut-wire-cone radius height slices stacks @defunx glut-solid-cone radius height slices stacks @end defun @defun glut-wire-cube size @defunx glut-solid-cube size @end defun @defun glut-wire-torus inner outer sides rings @defunx glut-solid-torus inner outer sides rings @end defun @defun glut-wire-dodecahedron @defunx glut-solid-dodecahedron @end defun @defun glut-wire-teapot size @defunx glut-soild-teapot size @end defun @defun glut-wire-octahedron @defunx glut-solid-octahedron @end defun @defun glut-wire-tetrahedron @defunx glut-solid-tetrahedron @end defun @defun glut-wire-icosahedron @defunx glut-solid-icosahedron @end defun @c ====================================================================== @node Vectors and matrices, Simple utilities, GLUT API, Top @chapter Vectors and matrices @deftp {Module} gl.math3d @mdindex gl.math3d The module provides vector and matrix operations useful for 3D computer graphics. Actually this module itself doesn't depend on GL; you can use this module alone to do matrix calculations. However, the structure of objects are designed so that they can be passed directly to Gauche-gl functions, reducing the overhead of type conversions. The purpose of this module is to provide reasonable performance. So the operations are fixed to 3D homogeneous coordinates, i.e. a vector is 4-element column vector, and a matrix is 4x4 square matrix. If you want more flexibility, @code{} class in @code{gauche.array} provides much more generic structures, trading performance. Elements of vectors and matrices are represented in @code{float} internally. When you retrieve each element individually, it is converted to @code{double}, so you might see some precision errors. There are lots of operations directly manipulate group of elements without retrieving each element to Scheme world, avoiding overhead of conversion. @end deftp @c ---------------------------------------------------------------------- @menu * Vectors and points:: * Vector arrays and point arrays:: * Matrices:: * Quaternions:: @end menu @node Vectors and points, Vector arrays and point arrays, Vectors and matrices, Vectors and matrices @section Vectors and points @deftp {Class} @deftpx {Class} @clindex vector4f @clindex point4f 4x1 column vectors. @code{Vector4f} is intended to be used to represent a vector, and @code{point4f} is to a point, but as far as OpenGL concerns, both are just an array of four floats, @var{x}, @var{y}, @var{z} and @var{w}. These classes inherit @code{} and @code{} classes. So if you import @code{gauche.sequence} module, you can use generic function such as @code{ref} and @code{(setter ref)} to get/set individual elements. The generic version of @code{map} and @code{for-each} can also be used on the vector4f and point4f instances. Aside from the type, the only difference is that the default value of @var{w} component--- it's 0.0 for vectors, and 1.0 for points. So usual transformation produces expected results; for example point plus vector becomes point, vector plus vector becomes vector, and translating point changes its coordinates but translating vectors doesn't, and so on. However, you can set @var{w} component to other value to do nontrivial operations. @end deftp @deftp {Reader syntax} @code{#,(vector4f @var{x} @var{y} @var{z} @var{w})} @deftpx {Reader syntax} @code{#,(point4f @var{x} @var{y} @var{z} @var{w})} These SRFI-10 syntax can be used to denote literal @code{} and @code{} instance, respectively. The write methods are defined so that the instance is written out in this form, and can be read back later. @end deftp @defun vector4f? obj @defunx point4f? obj Returns true iff @var{obj} is vector4f and point4f, respectively. @end defun @defun vector4f x y z &optional (w 0.0) @defunx point4f x y z &optional (w 1.0) Creates a vector4f and point4f instance with given values, respectively. @end defun @defun make-vector4f @defunx make-point4f Another way to create a vector4f and a point4f. The first returns @code{#,(vector4f 0.0 0.0 0.0 0.0)}, and the latter returns @code{#,(point4f 0.0 0.0 0.0 1.0)}. @end defun @defun list->vector4f l @defunx list->point4f l Convert a list of three or four real numbers to a vector4f and a point4f, respectively. If @var{l} is not a list of three or four real numbers, an error is signalled. @example (list->vector4f l) @equiv{} (apply vector4f l) @equiv{} (coerce-to l) @end example @end defun @defun vector4f->list v @defunx point4f->list p Convert a vector4f and a point4f to a list of four real numbers, respectively. @example (vector4f->list v) @equiv{} (coerce-to v) @equiv{} (map (cut ref v <>) (iota 4)) @end example @end defun @defun f32vector->vector4f v &optional start @defunx f32vector->point4f v &optional start Creates a vector4f or a point4f, initializing by the elements of f32vector @var{v}. @var{V} must be longer than 4, and the first four elements are used to initialize the created vector or point. If optional @var{start} argument is given, it specifies an index of @var{v} from which the initial values are taken; that is, @var{start}, @var{start+1}, @var{start+2} and @var{start+3}-th elements are used to create a vector or a point. This allows to create vectors from plain float array: @example (map (lambda (off) (f32vector->vector4f vec (* off 4))) (iota (/ (size-of vec) 4))) @end example The conversion can be done using @code{coerce-to}, as well. @example (f32vector->vector4f vec) @equiv{} (coerce-to vec) @end example @end defun @defun vector4f->f32vector v @defunx point4f->f32vector p Convert a vector4f @var{v} or a point4f @var{p} to four-element f32vector. @example (vector4f->f32vector v) @equiv{} (coerce-to v) @end example @end defun @defun vector4f-copy v @defunx point4f-copy p Returns a new copy of vector4f @var{v} or point4f @var{p}, respectively. @end defun @defun vector4f-copy! dstv srcv @defunx point4f-copy! dstp srcp Destructively sets the content of @var{srcv} or @var{srcp} to @var{dstv} or @var{dstp}, respectively. @end defun @defun vector4f-set! v k value @defunx point4f-set! p k value Sets a real number @var{value} to @var{k}-th element of a vector4f @var{v} or a point4f @var{p}. @example (vector4f-set! v k value) @equiv{} (set! (ref v k) value) @end example @end defun @defun vector4f-ref v k &optional fallback @defunx point4f-ref p k &optional fallback Gets a value of @var{k}-th element of a vector4f @var{v} or a point4f @var{p}. If @var{k} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @example (vector4f-ref v k) @equiv{} (ref v k) @end example @end defun @defun vector4f-dot x y Returns a dot product of two vector4fs, @var{x} and @var{y}. @end defun @defun vector4f-cross x y Returns a cross product of two vector4fs, @var{x} and @var{y}. (@var{w} element is ignored). @end defun @defun vector4f-norm v Returns the norm (length) of the vector @var{v}. @end defun @defun vector4f-normalize x @defunx vector4f-normalize! x Returns a normalized vector of vector4f @var{x}. @code{Vector4f-normalize} allocates a new vector, while @code{vector4f-normalize!} modifies the original vector. As a special case, if @var{x} is a vector of length 0, a vector of length 0 is returned. @end defun @defun vector4f-add x y @defunx vector4f-sub x y @defunx vector4f-add! x y @defunx vector4f-sub! x y Returns a sum of two vector4fs, @var{x} and @var{y}. The destructive version modifies @var{x}. @end defun @defun point4f-add x y @defunx point4f-add! x y Adds a point4f @var{x} and a vector4f @var{y}, and returns a translated point. The destructive version modifies @var{x}. @end defun @defun point4f-sub x y Subtracts either a vector4f or a point4f @var{y} from a point4f @var{x}. If @var{y} is a vector4f, returns a translated point. If @var{y} is a point4f, returns a vector4f from point @var{y} to point @var{x}. @end defun @c ---------------------------------------------------------------------- @node Vector arrays and point arrays, Matrices, Vectors and points, Vectors and matrices @section Vector arrays and point arrays @deftp {Class} @deftpx {Class} @clindex vector4f-array @clindex point4f-array Represents an array of vector4fs and point4fs. This is an efficient way to keep an array of vectors or points, for the elements are packed in a simple float array. They are especially useful to work with GL's vertex array feature. @code{gl-vertex-pointer} can take @code{}, and @code{gl-normal-pointer} can take @code{}. It is also possible to "view" a plain f32vector as @code{} or @code{} without copying its content, by @code{f32vector->vector4f-array/shared} and @code{f32vector->point4f-array/shared}. Combined to @code{read-block!}, you can do efficient binary I/O of vertex arrays, for example. Inherits @code{} and @code{}. When viewed as a sequence or a collection, they behaves like sequence or collection of @code{vector4f} and @code{point4f} objects, respectively. @end deftp @defun make-vector4f-array len &optional init-vector @defunx make-point4f-array len &optional init-point Creates a vector4f-array or point4f-array with @var{len} elements. Each element is initialized by a vector4f @var{init-vector} or a point4f @var{init-point} if provided. @end defun @defun vector4f-array? obj @defunx point4f-array? obj Returns true iff @var{obj} is a vector4f-array or a point4f-array, respectively. @end defun @defun vector4f-array-length array @defunx point4f-array-length array Returns length (number of vectors/points) in array @var{array}. @end defun @deftp {Reader syntax} @code{#,(vector4f-array @var{len} @var{elt} @dots{})} @deftpx {Reader syntax} @code{#,(point4f-array @var{len} @var{elt} @dots{})} Vector4f-array and point4f-array have external representation using this SRFI-10 syntax. @var{Len} is a length of array, and each @var{elt} is a list of four floats representing each element of the array. @example (f32vector->vector4f-array #f32(1 2 3 4 6 7 4 3)) @result{} #,(vector4f-array 2 (1 2 3 4) (6 7 4 3) ) @end example @end deftp @defun list->vector4f-array list @defunx list->point4f-array list From given list of vector4fs or point4fs, creates and returns a vector4f-array or point4f-array, respectively. @end defun @defun f32vector->vector4f-array v @defunx f32vector->point4f-array v Converts f32vector @var{v} to a vector4f-array or a point4f-array. The length of @var{v} must be multiple of four. The content of @var{v} is copied. @example (f32vector->vector4f-array v) @equiv{} (coerce-to v) @end example @end defun @defun f32vector->vector4f-array/shared v @defunx f32vector->point4f-array/shared v Like above, but the content of @var{v} is shared by the result array, instead of being copied. So the modification of result array will be visible from original f32vector @var{v} and vice versa. It will allow efficient handling of large vertex arrays. @end defun @defun vector4f-array->f32vector array @defunx point4f-array->f32vector array Converts a vector4f-array or a point4f-array @var{array} to a f32vector. @example (vector4f-array->f32vector array) @equiv{} (coerce-to array) @end example @end defun @defun vector4f-array-set! array i vector @defunx point4f-array-set! array i point Sets a vector4f @var{vector} or a point4f @var{point} to @var{i}-th element of vector4f-array or point4f-array @var{array}, respectively. @example (vector4f-array-set! array i vector) @equiv{} (set! (ref array i) vector) @end example @end defun @defun vector4f-array-ref array i &optional fallback @defunx point4f-array-ref array i &optional fallback Returns a vector4f or a point4f which is the @var{i}-th element of array @var{array}, respectively. If @var{k} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @example (vector4f-array-ref array i) @equiv{} (ref array i) (ref #,(vector4f-array 2 (1 2 3 4) (6 7 4 3)) 1) @result{} #,(vector4f 6 7 4 3) @end example @end defun @defun vector4f-array-ref/shared array i &optional fallback @defunx point4f-array-ref/shared array i &optional fallback Like above, but the returned vector4f or point4f shares the storage with the original array. Thus the modification of the result vector or point will be visible from @var{array}, and vice versa. @end defun @c ---------------------------------------------------------------------- @node Matrices, Quaternions, Vector arrays and point arrays, Vectors and matrices @section Matrices @deftp {Class} @clindex matrix4f 4x4 matrix. Internally it is represented as an array of 16 floats, stored in column-major order. (It is the same order OpenGL uses, so it can be passed to OpenGL calls without overhead). Inherits @code{} and @code{}. When a matrix4f is treated as a sequence, it works as if it is a single sequence of floats in column-major order. @end deftp @defun make-matrix4f &optional init Returns a new matrix4f instance. If @var{init} is omitted, the matrix is a unit matrix. Otherwise, @var{init} must be a f32vector of length 16, and the elements in the matrix is initialized by ones in f32vector. @example ;; Creates a matrix like this: ;; 1 2 3 4 ;; 0 1 0 5 ;; 0 0 1 6 ;; 0 0 0 1 (make-matrix4f '#f32vector(1 0 0 0 2 1 0 0 3 0 1 0 4 5 6 1)) @end example @end defun @defun matrix4f m00 m10 m20 m30 m01 m11 m21 m31 m02 m12 m22 m32 m03 m13 m23 m33 Creates a new matrix4f instance with give values. @end defun @defun matrix4f? obj Returns true iff @var{obj} is a matrix4f. @end defun @deftp {Reader syntax} @code{#,(matrix4f @var{elt} @dots{})} A matrix4f is represented extrenally using SRFI-10 syntax. The elements are listed in column-major order. @end deftp @defun list->matrix4f l @defunx matrix4f->list m Converts between list of 16 real numbers and matrix4f. @end defun @defun f32vector->matrix4f v &optional start Creates a new matrix4f and initializes it with 16 elements in f32vector @var{v}. If optional @var{start} is given, it specifies the start offset in vector @var{v} to be used as initial values. The f32vector @var{v} must have enough length. @end defun @defun f32vector->matrix4f! m v &optional (start 0) Extract 16 flonums in the f32vector @var{v} starting from the index @var{start}, and fill the matrix4f @var{m} with them. The f32vector @var{v} must have enough length. @end defun @defun matrix4f->f32vector m Returns a new f32vector that has elements from matrix4f @var{m}. @end defun @defun matrix4f-copy m Returns a new copy of @var{m}. @end defun @defun matrix4f-copy! dstm srcm Copies contents of @var{srcm} to @var{dstm}. @end defun @defun matrix4f-set! m i value Sets a real number @var{value} to @var{i}-th element of matrix @var{m}. Since the matrix is laid out in column-major order, the one-dimensional index @code{m@{@var{i}@}} and two-dimensional index @code{m(@var{i},@var{j})} corresponds as follows: @example m(0,0) = m@{0@} m(0,1) = m@{4@} m(0,2) = m@{8@} m(0,3) = m@{12@} m(1,0) = m@{1@} m(1,1) = m@{5@} m(1,2) = m@{9@} m(1,3) = m@{13@} m(2,0) = m@{2@} m(2,1) = m@{6@} m(2,2) = m@{10@} m(2,3) = m@{14@} m(3,0) = m@{3@} m(3,1) = m@{7@} m(3,2) = m@{11@} m(3,3) = m@{15@} @end example @end defun @defun matrix4f-ref m i &optional fallback Returns the @var{i}-th element of matrix @var{m}. If @var{i} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @end defun @defun matrix4f-set2! m i j value Sets @var{value} to @code{(@var{i}, @var{j})} element of matrix @var{m}. @end defun @defun matrix4f-ref2 m i j Returns the @code{(@var{i}, @var{j})} element of matrix @var{m}. @end defun @defun matrix4f-row m i @defunx matrix4f-column m i @defunx matrix4f-column/shared m i Returns @var{i}-th row vector or @var{i}-th column vector of matrix @var{m}, as a vector4f instance. Furthermore, the returned vector from @code{matrix4f-column/shared} shares the storage with @code{m}. @end defun @defun matrix4f-mul m obj @var{Obj} may be a scalar (real number), a vector4f, a point4f, or a matrix4f. Returns @var{m} x @var{obj}. @end defun @defun matrix4f-mul! m obj @var{Obj} may be a scalar or a matrix4f. Matrix @var{m} is multiplied by @var{obj}, and the result is set to @var{m} destructively. @end defun @defun matrix4f-transpose m @defunx matrix4f-transpose! m Returns a transposed matrix of @var{m}. The destructive version modifies @var{m}. @end defun @defun matrix4f-determinant m Returns a determinant of @var{m}. @end defun @defun matrix4f-inverse m &optional (error-on-singular? #t) @defunx matrix4f-inverse! m &optional (error-on-singular? #t) Returns a inverse matrix of @var{m}. The destructive version modifies @var{m}. If given @var{m} is a singular matrix, an error is signalled by default. However, if @code{#f} is given to the optional @var{error-on-singular?} argument, @code{#f} is returned in such a case. @end defun @defun translation->matrix4f translation-vector @defunx translation->matrix4f! m translation-vector Returns a matrix which represents a translation by @var{translation-vector}, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in @var{translation-vector} is used. The destructive version updates @var{m}. @end defun @defun rotation->matrix4f axis angle @defunx rotation->matrix4f! m axis angle Returns a matrix which represents a rotation around @var{axis} by @var{angle} radian. @var{Axis} must be a vector4f or a f32vector of length 3 or 4, and must be normalized. The result is undefined if anormalized vector is passed as @var{axis}. The destructive version updates @var{m}. @end defun @defun scale->matrix4f scale-vector @defunx scale->matrix4f! m scale-vector Returns a matrix which represents a scale by @var{scale-vector}, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in @var{scale-vector} is used. Each element of @var{scale-vector} represents the scale factor along x, y, and z axis. The destructive version updates @var{m}. @end defun @defun trs->matrix4f translation rotation-axis rotation-angle scale @defunx trs->matrix4f! m translation rotation-axis rotation-angle scale This combines above three procedure. Returns a matrix that represents translation, rotation and scale, specified by @var{translation}, @var{rotation-axis}, @var{rotation-angle} and @var{scale}. The destructive version updates @var{m}. If @code{@i{T}}, @code{@i{R}} and @code{@i{S}}, are the matrices that represent translation, rotation and scale, respectively, then these procedures effectively calculates a matrix @code{@i{TRS}}. @end defun @defun tqs->matrix4f translation rotation-quat scale @defunx tqs->matrix4f! m translation rotation-quat scale A variation of @code{trs->matrix4f}. Instead of axis and angle, rotation is represented by a quaternion @var{rotation-quat}. @xref{Quaternions}, for more details about quaternions. @end defun @defun euler-angle->matrix4f xangle yangle zangle &optional order @defunx euler-angle->matrix4f! m xangle yangle zangle &optional order Returns a matrix that represents rotation along x, y and z axis by @var{xangle}, @var{yangle}, and @var{zangle}, respectively. The order of rotation can be specified by the optional argument @var{order}, which may be one of the symbols @code{xyz}, @code{xzy}, @code{yzx}, @code{yxz}, @code{zxy}, or @code{zyx}. For example, symbol @code{xyz} means rotation around x-axis, then y-axis, then z-axis. Thus, if we write each rotation as @i{Rx}, @i{Ry}, and @i{Rz}, the returned matrix is @i{RzRyRx}. The default value of @var{order} is @code{xyz}. The desrtuctive version modifies @var{m}. @end defun @defun matrix4f-decompose m Matrix @var{m} is a composition of translation, rotation, shear and scale. Suppose transformation is applied in the reverse order. This procedure decompose @var{m} into each individual transformation. Returns five values. @itemize @bullet @item A flag to indicate if @var{m} is non-singular. @item A translation vector @var{t}, in vector4f. The first three elements of @var{t} are for x, y, and z translations. @item A rotation matrix @var{r}, in matrix4f. This is an orthogonal matrix represents rotation component. @item A shear vector @var{h}, in vector4f. The first three elements of @var{h} are for xy, xz and yz shear factors. @item A scale vector @var{s}, in vector4f. The first three elements of @var{s} are fof x, y, and z scale factors. @end itemize If @var{m} is singular, certain part of rotation matrix can't be recovered. In such a case, @var{r} becomes also singular matrix. If the original matrix has negative scale factor in any of x, y, or z scale, the decomposed scale factor will have all negative components. The signs of elements of @var{r} are adjusted accordingly. Due to the precision errors, you will see small values appear in shear component even @var{m} is pure TRS matrix. @end defun @defun matrix4f-decompose! m t r h s Linear update version of @code{matrix4f-decompose}. The result vectors and matrices are stored in @var{t}, @var{r}, @var{h} and @var{s}. The return value is a boolean value indicates @var{m} is non-singular or not. @end defun @defun matrix4f->translation m Extract the translation component from the given TRS matrix @var{m} and returns it as a @code{}. @end defun @defun matrix4f->translation! v m Extract the translation component from the given TRS matrix @var{m} and stores the result into a @code{} @var{v}. Returns @var{v}. @end defun @defun matrix4f->rotation m From given orthogonal matrix @var{m}, extracts and returns and rotation axis and angle, as a vector4f and a real number. @end defun @defun matrix4f->rotation! v m Same as above, except the storage of vector4f @var{v} is reused to store the result axis. @end defun @c ---------------------------------------------------------------------- @node Quaternions, , Matrices, Vectors and matrices @section Quaternions @deftp {Class} @clindex quatf Quaternions. Internally quaternions are represented as just an array of four floats; the first three are the vector component and the last is the scalar component. Inherits @code{} and @code{}. When viewed as sequence, it is just like a vector of four floats. @end deftp @defun quatf? obj Returns true iff @var{obj} is a quaternion. @end defun @deftp {Reader syntax} @code{#,(quatf @var{x} @var{y} @var{z} @var{w})} External representation of quaternion @i{x}@b{i}+@i{y}@b{j}+@i{z}@b{k}+@i{w}. @end deftp @defun make-quatf &optional axis (angle 0) Returns a new unit quaternion that represents a rotation around vector @var{axis} by @var{angle} radians. @var{Axis} can be a vector4f, a point4f or a f32vector (only first three component is used). @var{Axis} must be a unit vector; if @var{axis} is anormalized, the result is undefined. If both @var{axis} and @var{angle} is omitted, @code{#,(quatf 0 0 0 1)} is returned. @end defun @defun quatf x y z w Returns a new quaternion whose elements are initialized by @var{x}, @var{y}, @var{z}, @var{w}. @end defun @defun list->quatf l @defunx quatf->list q Converts between a list of four real numbers and a quaternion. @end defun @defun f32vector->quatf x &optional start Returns a new quaternion whose elements are initialized by the first four elements of f32vector @var{x}. If @var{start} is given, the initial value is taken starting from @var{start}-th index in @var{x}. @end defun @defun quatf->f32vector q Returns a new f32vector whose contents is the same as a quaternion @var{q}. @end defun @defun quatf-copy q Returns a fresh copy of a quaternion @var{q}. @end defun @defun quatf-copy! dstq srcq Copies contents of a quaternion @var{srcq} to a quaternion @var{dstq}. @end defun @defun rotation->quatf! quat axis angle Sets a quaternion @var{quat} so that it represents a rotation around a unit vector @var{axis} by angle @var{angle} radians. @var{Axis} can be a vector4f, a point4f or a f32vector (only first three component is used). @end defun @defun vectors->quatf v w @defunx vectors->quatf! q v w Given two unit vectors @var{v} and @var{w}, calculates and returns a quaternion that represents a rotation from @var{v} to @var{w}. The destructive version @code{vectors->quatf!} modifies @var{q}. @end defun @defun axes->quatf v1 v2 w1 w2 @defunx axes->quatf! q v1 v2 w1 w2 The arguments must be all unit vectors, @var{v1} and @var{v2} must be perpendicular, and also @var{w1} and @var{w2} must be perpendicular. Calculates and returns a quaternion that represents a rotation which transforms @var{v1} to @var{w1}, and @var{v2} to @var{w2}, respectively. The destructive version stores the result into @var{q}. @end defun @defun quatf-add p q @defunx quatf-add! p q @defunx quatf-sub p q @defunx quatf-sub! p q Addition and subtraction of quaternions. The destructive version modifies the first argument. @end defun @defun quatf-scale q s @defunx quatf-scale! q s Multiplies a quaternion @var{q} by a scalar value @var{s}. The destructive version modifies @var{q}. @end defun @defun quatf-mul p q @defunx quatf-mul! p q Multiply two quaternions @var{p} and @var{q}. The destructive version modifies @var{p} as well. @end defun @defun quatf-conjugate p @defunx quatf-conjugate! q p Returns a conjugate of a quaternion @var{p}. The destructive version modifies @var{q} as well. @end defun @defun quatf-transform q p Transforms a vector or a point @var{p} by quaternion @var{q}, that is, returns @var{qpq*}, where @var{q*} is a conjugate of @var{q}. This procedure assumes @var{q} is normalized. @var{P} can be a vector4f, a point4f or a f32vector (only first three elements are used). Returns the same type of object as @var{p}. @end defun @defun quatf-norm q Returns norm of @var{q}. @end defun @defun quatf-normalize q @defunx quatf-normalize! q Returns normalized quaternion of @var{q}. The destructive version modifies @var{q}. @end defun @defun quatf->matrix4f q @defunx quatf->matrix4f! m q Returns a matrix that represents a rotation specified by a unit quaternion @var{q}. The behavior is undefined if @var{q} is not normalized. The destructive version modifies @var{m}. @end defun @defun matrix4f->quatf m @defunx matrix4f->quatf! q m Extracts the rotation component of a matrix @var{m} and returns a quaterion that represents the rotation. @code{Matrix4f->quatf!} also uses @var{q} as the storage to store the result. @end defun @defun quatf-slerp p q t @defunx quatf-slerp! r p q t Returns a quaternion that interpolates between two unit quaternions @var{p} and @var{q}, by a scalar value @var{t}. The destructive version modifies @var{r}. @end defun @c ====================================================================== @node Simple utilities, Indices, Vectors and matrices, Top @chapter Simple utilities This chapter covers @code{gl.simple.*} modules. They are provided for the convenience of those who wants quick experiment with Gauche-gl alone, without a hassle to install a bunch of other modules. Their features are pretty limited, but you may find them handy when you need to hack up some throwaway script that need to show some graphics on the screen. @menu * Simple image handling:: * Simple viewer:: @end menu @node Simple image handling, Simple viewer, Simple utilities, Simple utilities @section Simple image handling @deftp {Module} gl.simple.image @mdindex gl.simple.image OpenGL doesn't provide any means of reading/writing image data, and it should be covered by other Gauche extensions. However, it is sometimes handy to have simple means to handle external image data, so that you can do some experiment with Gauche-gl alone. This module provides a minimal support to handle external image data, so that one can do some experiment in Gauche-gl alone. The functionality might be extended over time, but this is never intended to be a full featured image library. A separate Gauche extension should be a better place to have it. @end deftp Currently, only reading from 8bit SGI image file is supported. It is written in pure Scheme, so don't expect the performance. @defun read-sgi-image filename @defunx read-sgi-image-from-port port Reads an image data in SGI format from the named file or the input port, respectively. Only 8bit-per-channel, direct color mode is supported. Returns four values: the image's width in pixels, its height in pixels, number of channels (e.g. 1 for grayscale, 3 for RGB, 4 for RGBA), and the image data in u8vector. The pixel data is packed, i.e. there's no padding between each pixel nor each scanline. Warning: be careful to call this function interactively. The image data vector is usually huge, and you have to wait long for the REPL to display the entire result. @end defun @node Simple viewer, , Simple image handling, Simple utilities @section Simple viewer @deftp {Module} gl.simple.viewer @mdindex gl.simple.viewer This module packages common operations to allow users to view 3D objects, controlling the camera by the mouse, and have some interactions with the keyboard. A typical way of using the viewer is like the following: @example (use gl) (use gl.glut) (use gl.simple.viewer) (define (main args) (glut-init args) (simple-viewer-display ) (simple-viewer-set-key! ...) (simple-viewer-window :title ...) (simple-viewer-run) ; loop forever. type ESC to exit. 0) @end example The viewer handles mouse drag (to move the camera), and also draws reference grid and axes by default for your convenience. You have to provide a thunk, which must draw your 3D object. For the keyboard events, you can use a convenient API to associate handler to the key (character for normal keys, and constants like @code{GL_LEFT_ARROW} for special keys). The reshape event is handled implicitly, though you can override it. If you call @code{simple-viewer-run}, it enters the event loop and never returns. If you wish to keep REPL and/or other parts of your application run concurrently, the convenient way is to run @code{simple-viewer-run} in a separate thread. @example (use gauche.threads) (define (run-viewer) (thread-start! (make-thread simple-viewer-run #f))) @end example See also the code under @file{examples/simple} directory of the source tree for more examples. @end deftp @defun simple-viewer-window name &key title mode parent width height x y Creates a new GL window with @var{name}, which must be a symbol to identify the window later in the simple viewer framework. The window won't be shown until @code{simple-viewer-run} is called. Each window @end defun @defun simple-viewer-display &optional display-thunk Gets/sets the display thunk, which is called every time the GL window is redrawn. You can change the display thunk any time, even while the viewer thread is running. If no argument is given, returns the current display thunk. It can be @code{#f} if no display thunk is set. When the display thunk is called, the matrix mode is @code{MODELVIEW} and the camera transformation is already applied. The grid and axes are also drawn, unless you've customized them. In the display thunk you can just write your model in the world coordinate system. It is guaranteed that the current color is white and line width is 1.0, but the states of other GL contexts are undefined, so you have to set them explicitly. @end defun @defun simple-viewer-reshape &optional reshape-proc Gets/sets the reshape procedure which is called every time the GL window configuration is changed. (It is also called when the GL window is shown first time.) You can change the reshape procedure any time, even while the viewer thread is running. If no argument is given, returns the current reshape proc. A reshape procedure is called with two arguments, the width and the height (in pixels) of the new GL window configuration. By default, @code{gl.simple.viewer} sets a procedure that changes viewport and projection matrix apopropriately; you need to change it only if you want a different behavior. @end defun @defun simple-viewer-grid &optional grid-proc @defunx simple-viewer-axis &optional axis-proc Gets/sets a procedure to draw a grid and axes. You can change these procedures any time, even while the viewer thread is running. The @var{grid-proc} and @var{axis-proc} are called with no arguments every time the GL window is redrawn, before the display thunk is invoked. The matrix mode is @code{MODELVIEW}, the camera transformation is already applied, and lighting is disabled. The default grid proc draws 10x10 grid on X-Z plane centered at the origin. The default axis proc draws a red line from origin to +X, a green line from origin to +Y, and a blue line from origin to +Z. You can pass @code{#f} to disable grid and/or axis display. If no argument is given, returns the current grid/axis proc, respectively. @end defun @defun simple-viewer-set-key! key handler @dots{} Even number of arguments must be given; the first of every two specifies the key, and the next one specifies the action when the key is pressed. @end defun @c ====================================================================== @node Indices, , Simple utilities, Top @appendix Indices @c NODE 索引 @menu * Function and Syntax Index:: * Module Index:: * Class Index:: * Variable Index:: @end menu @node Function and Syntax Index, Module Index, Indices, Indices @appendixsec Function and Syntax Index @c NODE 手続ãã¨æ§‹æ–‡ç´¢å¼• @printindex fn @node Module Index, Class Index, Function and Syntax Index, Indices @appendixsec Module Index @c NODE モジュール索引 @printindex md @node Class Index, Variable Index, Module Index, Indices @appendixsec Class Index @c NODE クラス索引 For readability, the surrounding @code{<} and @code{>} are stripped off. @printindex cl @node Variable Index, , Class Index, Indices @appendixsec Variable Index @c NODE 変数索引 @printindex vr @contents @bye @c Local variables: @c outline-regexp: "@chap\\|@unnu\\|@\\(sub\\)*section" @c end: �����������������������������������������������������������������������������������Gauche-gl-0.5.1/doc/gauche-gl-refj.html�������������������������������������������������������������0000644�0000764�0000764�00001435577�11617171621�016617� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html401/loose.dtd"> <html> <!-- Created on August 5, 2011 by texi2html 1.82 texi2html was written by: Lionel Cons <Lionel.Cons@cern.ch> (original author) Karl Berry <karl@freefriends.org> Olaf Bachmann <obachman@mathematik.uni-kl.de> and many others. Maintained by: Many creative people. Send bugs and suggestions to <texi2html-bug@nongnu.org> --> <head> <title>Gauche-gl : OpenGL binding for Gauche
[Top] [Contents] [Index] [ ? ]

Gauche-gl : OpenGL binding for Gauche

This is a reference manual of Gauche-gl, an OpenGL binding for the Gauche Scheme implementation. This manual is for version 0.5.1.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

1. ¤Ï¤¸¤á¤Ë

Gauche-gl is an extension module of Gauche Scheme implementation. It provides the following modules:

gl

This module provides bindings to OpenGL API. It covers most functions in OpenGL 1.0 through 2.0, and GLU. The functions are described in OpenGL API.

gl.glut

This module provides bindings to most functions in GLUT. The functions are described in GLUT API.

gl.math3d

This module provides vector and matrix calculations optimized for 3D homogeneous coordinates. The vector and matrix objects here can be directly passed to Gauche-gl functions. The functions are descrbied in Vectors and matrices.

gl.simple.*

These modules provide simple APIs for programmers to hack up a very simple OpenGL application. They are by no means intended for general application development, but would be handy for throwaway script. See Simple utilities for the details.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2. Installation

Installing Gauche-gl is usually straightforward on Unix variants.

You have to have the following programs installed on your machine.

  • Gauche 0.8.5 or later
  • OpenGL 1.1 equivalent library; the auther checked with Mesa 3.4 and NVidia’s GLX driver.
  • GLUT 3.7 or later.

The standard way to compile and install Gauche-gl is as follows:

 
% gzcat Gauche-gl-0.5.1.tgz | tar xf -
% cd Gauche-gl-0.5.1
% ./configure
% make
% make test
% make install

Or you can use ‘gauche-package’ command:

 
% gauche-package install -C=<configure-option> Gauche-gl-0.5.1.tgz

The confiugre script figures out the location Gauche is installed, and install Gauche-gl in the same place.

If you have GLUT installed in non-standard place, you have to tell the configure script where it is.

 
% ./configure --with-glut=DIR

Since version 0.4, Gauche-gl can be configured to include bindings to NVidia’s Cg Toolkit. The binding code is contributed by Issac Trotts. To enable Cg binding, give --enable-cg option to the configure script.

 
% ./configure --enable-cg

It is reported that Mesa in FreeBSD ports is compiled with pthreads enabled, and Gauche-gl can’t be linked unless Gauche itself is compiled with pthreads. The configure script of Gauche prints warning if you specify pthreads, but it is safe as far as you don’t call make-thread in your program.

There are various examples under ‘examples/’ directory. If you want to run the examples before installing Gauche-gl, you have to tell the location of the library to gosh command, e.g. gosh -I../src -I../lib gears.scm. Some demos under subdirectories have a shell script that invokes gosh with proper command-line options.

gears.scm

Brian Paul’s 3D gear wheels.

mandelbrot.scm

Simple calculated texture.

glbook/

This subdirectory contains examples found in "OpenGL Programming Guide", a.k.a. Redbook.

slbook/

This subdirectory contains examples found in "OpenGL Shading Language". Each demo is under its own subdirectories. You need to have proper driver/hardware that supports GLSL to run these demos.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3. Getting Started


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.1 GL calls in Scheme

I assume you have basic knowledge of OpenGL API. Gauche-gl maps OpenGL calls to Scheme procedures pretty straightforwardly. For example, the very first example of "OpenGL Programming Guide", the pseudo code of OpenGL application, can be written in Gauche-gl like this:

 
(use gl)

(define (main args)
  (initialize-a-window-please)

  (gl-clear-color 0.0 0.0 0.0 0.0)
  (gl-clear GL_COLOR_BUFFER_BIT)
  (gl-color 1.0 1.0 1.0)
  (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0)
  (gl-begin* GL_POLYGON
    (gl-vertex 0.25 0.25 0.0)
    (gl-vertex 0.75 0.25 0.0)
    (gl-vertex 0.75 0.75 0.0)
    (gl-vertex 0.25 0.75 0.0)
    )
  (gl-flush)
  (update-the-window-and-check-for-events)
  0)

Note that initialize-a-window-please and update-the-window-and-check-for-events are function calls dependent on the windowing system. Gauche-gl comes with GLUT binding and you can use it to do basic stuff. In the separate package Gauche-gtk, a binding to GtkGLExt is provided, which allows you to do GL rendering inside Gtk widgets.

For the time being, let’s focus on the pure GL part.

The mapping of GL call name is straightforward. The mixed case names in OpenGL C API is expanded to hyphenated name, e.g. glClearColorgl-clear-color. OpenGL enums are mapped as is, e.g. GL_POLYGON. (Note that Gauche is case-sensitive by default. Also note the underscore, not hyphen, in constants).

A few convenience macros, such as gl-begin*, is defined. There are straight bindings of gl-begin and gl-end, so you can write the drawing part in the same way as in C:

 
  (gl-begin GL_POLYGON)
    (gl-vertex 0.25 0.25 0.0)
    (gl-vertex 0.75 0.25 0.0)
    (gl-vertex 0.75 0.75 0.0)
    (gl-vertex 0.25 0.75 0.0)
  (gl-end)

Actually gl-begin* macro expands into the above calls. It’s a matter of taste, but the macro version guarantees begin and end match, and the syntax-aware editor can indent internal calls accordingly.

You might have noticed that the type suffix in C API is not in Gauche binding. The Scheme function figures out the type of passed arguments and calls appropriate C API. SRFI-4 uniform numeric vectors are used to represent arrays of numbers.

 
  (gl-vertex 1.0 2.0 3.0)    ⇒ glVertex3d
  (gl-vertex '#f32(1.0 2.0)) ⇒ glVertex2fv
  (gl-vertex '#s32(3 2 5))   ⇒ glVertex3iv

Generally, passing uniform vectors is much more efficient than giving individual numbers, for the former can eliminate the cost of type checking and unboxing.

Some GL calls can also take gl.math3d primitive objects such as vector4f, point4f or matrix4f (See section Vectors and matrices). For example, you can pass point4f object to gl-vertex, vector4f to gl-normal, and matrix4f to gl-mult-matrix. They are efficient since calculations on those types are defined natively in gl.math3d, and passing it to GL call doesn’t cost unboxing.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.2 Advanced GL features

Although Gauche-gl supports up to OpenGL 2.0, all functionalities may not be available on the target machine’s driver/hardware. The application needs to check the availability of the extension and/or GL version before using the features that are only supported by the extension/version.

Gauche-gl provides a couple of utility procedures to check the feature sets at runtime. For example, you can switch behavior depending on OpenGL 1.3 feature availability:

 
(if (gl-version>=? "1.3")
  (code-using-features-available-in-OpenGL-1.3-and-later ...)
  (alternative-code ...))

Or you can check the availability of extensions:

 
(unless (gl-extension-supported? 'GL_ARB_shader_objects
                                 'GL_ARB_fragment_shader
                                 'GL_ARB_vertex_shader
                                 'GL_ARB_shading_language_100)
   (error "OpenGL Shading Language extensions not available"))

See GL feature checking for the details.

If the client program calls a GL API that are not supported on the platform, an error is signalled.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.3 Using GLUT

In order to make a runnable script, you need to use some windowing system interface. GLUT binding provides a simple way for it.

Here is a complete runnable Scheme script, ported from Example 1-2 in "OpenGL Programming Guide":

 
(use gl)
(use gl.glut)

(define (disp)
  (gl-clear GL_COLOR_BUFFER_BIT)
  (gl-color '#f32(1.0 1.0 1.0))
  (gl-begin* GL_POLYGON
    (gl-vertex '#f32(0.25 0.25 0.0))
    (gl-vertex '#f32(0.75 0.25 0.0))
    (gl-vertex '#f32(0.75 0.75 0.0))
    (gl-vertex '#f32(0.25 0.75 0.0))
    )
  (gl-flush)
  )

(define (init)
  (gl-clear-color 0.0 0.0 0.0 0.0)
  (gl-matrix-mode GL_PROJECTION)
  (gl-load-identity)
  (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0)
  )

(define (keyboard key x y)
  (cond
   ((= key 27) (exit 0))
   ))

(define (main args)
  (glut-init args)
  (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB))
  (glut-init-window-size 250 250)
  (glut-init-window-position 100 100)
  (glut-create-window "hello")
  (init)
  (glut-display-func disp)
  (glut-keyboard-func keyboard)
  (glut-main-loop)
  0)

The (use gl.glut) form loads GLUT binding. The name mapping is the same as GL’s: mixed case names to hyphenated names.

In order to handle various events, you can pass a closure to glut-display-func etc. In the keyboard and mouse event callback, all arguments are integers.

There are more examples under the ‘examples/’ directory which uses GLUT.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

3.4 Performance tips

If you want to display millions of polygons in 30 fps, Gauche-gl is not for you. Consider using implementations that compiles into native code. The purpose of Gauche-gl is to provide reasonable performance for interactive development and experiment.

However, if you know some tips, actually you can go quite far, especially with recent processors and graphics chips.

Avoid alocation within the inner loop.

The functional (non-destructive) operations tend to return newly-allocated objects. Use linear-update (destructive) versions instead, such as matrix-mul!, u8vector-add!, etc, whenever possible. Pre-allocating temporary vectors is also effective.

Reduce the number of calls within the inner loop.

Vertex arrays are much better than calling gl-vertex over and over. Also consider using display lists if you’re displaying rigid objects.

Keep numbers within a uniform vector.

Every time you take a number out of a uniform vector (or <vector4f> etc.), Gauche has to wrap the number by a tag (boxing). Also when you store a number into a uniform vector, Gauche has to check the type of the object, then strip a tag (unboxing). Those are all overhead you wouldn’t have if you operate directly on uniform vectors (or <vector4f> etc).

Write extensions to accelerate.

If the above strategies are not enough, consider writing computation-intensive part in C as an extension. The easier way is to make C routines operate on uniform vectors, which is essentially a pointer to an array of numbers from C, and let Scheme handle higher-level data structures. (It could be viewed like relations between a coprocessor and a processor; the former does simple, iterative calculations fast, and the latter handles complicated logic).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4. OpenGL API

In this chapter we list a GL and GLU procedures accessible from Gauche-gl, with brief descriptions to help programmers to remind what the functions are. We don’t intend to make this an OpenGL reference, though; you should look at the OpenGL book for the details of what each API do.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.1 GL data types

GL doesn’t define many data structures: some scalar primitives (e.g. GLint) and arrays of them.

For scalar values, Gauche-gl has natural mappings:

GLboolean

Scheme booleans.

GLbyte, GLubyte, GLshort, GLushort, GLint, GLuint, GLenum, GLbitfield

Scheme exact integers.

GLfloat, GLdouble, GLclampf, GLclampd

Scheme real numbers.

For arrays, Gauche-gl uses uniform (srfi-4) vector whenever possible. For float arrays, however, Gauche-gl allows more structured types, such as points or matrices, when they are relevant. Such types are provided in gl.math3d module (see Vectors and matrices), which also provides common arithmetics between those types. Another exception is an array of GLboolean—it doesn’t have corresponding uniform vector representation. Gauche-gl defines a new type, <gl-boolean-vector>, to represent an array of GLboolean. See below for operations provided on it.

GLbyte[]

<s8vector>

GLubyte[]

<u8vector>

GLshort[]

<s16vector>

GLushort[]

<u16vector>

GLint[]

<s32vector>

GLuint[]

<u32vector>

GLfloat[], GLclampf[]

<f32vector>, <point4f>, <vector-4f>, <point4f-array>, <vector4f-array>, <matrix4f>, <quatf>.

GLdouble[], GLclampd[]

<f64vector>

GLboolean[]

<gl-boolean-vector>

GL boolean vectors

Class: <gl-boolean-vector>

A class for an array of boolean values. You can pass its instance to the GL APIs that expect an array of GLbooleans. Its internal representation is bitwise compatible to GLbooean array, so passing it is quite efficient.

This class inherits <sequence>, so you can use generic sequence operations on it.

The external representation of GL boolean vector uses srfi-10 notation, and can be read back. For example, a GL boolean vector of length 5 may be written something like this:

 
#,(gl-boolean-vector #t #f #t #f #t)
Function: make-gl-boolean-vector size &optional init

Returns a GL boolean vector of size elements. Elements are initialized by either #f or #t, according to init.

 
(make-gl-boolean-vector 3 #t) ⇒ #,(gl-boolean-vector #t #t #t)
Function: gl-boolean-vector bool …

Returns a GL boolean vector, whose elements are bool ….

 
(gl-boolean-vector #f #t #t) ⇒ #,(gl-boolean-vector #f #t #t)
Function: gl-boolean-vector? obj

Returns #t if obj is a GL boolean vector, #f otherwise.

Function: gl-boolean-vector-length v

Returns length of a GL boolean vector v. You can also use the sequence generic function size-of.

Function: gl-boolean-vector-fill! v bool

Fills a GL boolean vector v with a boolean value bool.

Function: list->gl-boolean-vector bools

Coerce list of boolean values to a GL boolean vector.

You can also use the coerce-to generic function to convert between GL boolean vectors and other sequences.

Function: gl-boolean-vector-ref v k &optional fallback

Returns k-th element of a GL boolean vector v. If k is out of range and fallback is provided, it is returned. If k is out of range and fallback is omitted, an error is signalled.

You can also use generic function ref to access a GL boolean vector.

Function: gl-boolean-vector-set! v k bool

Sets k-th element of a GL boolean vector v by a boolean value bool.

You can also use generic function (setter ref) to modify a GL boolean vector.

Function: gl-boolean-vector-copy v

Returns a copy of a GL boolean vector v.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.2 GL feature checking

If you want to use a feature that are in OpenGL 1.2 or later, or in a GL extension, you have to check its availability before actually calling the API function. You can use the following utility procedures.

Note that those functions may return #f if the connection to the display subsystem isn’t established yet. Usually you have to initialize and open an window before checking the features.

Function: gl-extension-available? extension-name …

Returns #t if GL extensions listed in extension-name … are all available. Extension-name can be a symbol or a string (e.g. GL_ARB_multisample).

Function: gl-version<? version
Function: gl-version<=? version
Function: gl-version>? version
Function: gl-version>=? version
Function: gl-version=? version

Returns #t if the runtime OpenGL version is less than, less thanor equal to, greater than, greater than or equal to, and equal to, the given version, respectively.

Give version in a string, e.g. "1.3".


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.3 Drawing functions

Macro: gl-begin* mode gl-commands …

Executes gl-commands between (gl-begin mode) and (gl-end). Mode can be one of the following constants.

GL_POINTS

Individual points.

GL_LINES

Pairs of vertices interpreted as individual line segments.

GL_LINE_STRIP

Series of connected line segments.

GL_LINE_LOOP

Same as above, with a segment added between last and first vertices.

GL_TRIANGLES

Triples of vertices interpreted as triangles.

GL_TRIANGLE_STRIP

Linked trip of triangles.

GL_TRIANGLE_FAN

Linked fan of triangles.

GL_QUADS

Quadruples of vertices interpreted as four-sided polygons.

GL_QUAD_STRIP

Linked strip of quadrilaterals.

GL_POLYGON

Boundary of a simple, convex polygon.

Function: gl-begin mode
Function: gl-end

Corresponds to glBegin and glEnd. Use of gl-begin* macro is recommended, though.

Function: gl-flush

Flush the GL command buffer.

Function: gl-finish

Make sure all previously issued GL commands are completed.

Function: gl-rect point1 point2
Function: gl-rect x1 y1 x2 y2

Draws a rectangle. In the first form, point1 and point2 can be either <point4f>, or f32, f64, s32, or s16vector of length 2. Types of both args should match. In the second form, all args should be a real numbers (glRectd is used).

Function: gl-vertex point
Function: gl-vertex x y &optional z w

Specify vertices. In the first form, point can be either <point4f>, or f32, f64, s32 or s16vector of length 2, 3 or 4. In the second form, all args should be a real numbers.

Function: gl-normal vector
Function: gl-normal x y z

Sets vertex normal vector. In the first form, vector can be either <vector4f> (the fourth element is ignored), or f32, f64, s32 ro s16vector of length 3. In the second form, all args should be a real numbers.

Function: gl-color color
Function: gl-color r g b &optional a

Sets the current color. In the first form, color can be either f32, f64, u8, u16, u32, s8, s16, or s32vector of length 3 or 4. In the second form, all args should be a real numbers.

Function: gl-tex-coord coord
Function: gl-tex-coord u v &optional s t

Sets the current texture coordinates. In the first form, coord can be either f32, f64, s32 or s16vector of length 1, 2, 3, or 4. In the second form, all args should be a real numbers.

Function: gl-raster-pos pos
Function: gl-raster-pos x y &optional z w

Sets the current raster position. In the first form, pos can be eitehr f32, f64, s32 or s16vector. In the second form, all args should be a real numbers.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.4 GL state control

Capabilities

Function: gl-enable cap
Function: gl-disable cap

Turns on and off a capability cap. Check out OpenGL reference for the list of capabilities.

Function: gl-is-enabled cap

Returns #t of #f depending on cap is enabled or not.

Function: gl-enable-client-state array
Function: gl-disable-client-state array

Enable/disable a client-side array (e.g. vertex array) specified by array. Array can be one of the following constants.

GL_VERTEX_ARRAY
GL_COLOR_ARRAY
GL_INDEX_ARRAY
GL_NORMAL_ARRAY
GL_TEXTURE_COORD_ARRAY
GL_EDGE_FLAG_ARRAY

State values

Gauche has two variations for each type of OpenGL glGetTYPE APIs; nondestructive version and destructive versions. Nondestructive versions such as gl-get-boolean allocates and returns the vector of appropriate type for the state. For destructive versions such as gl-get-boolean!, you need to pass a vector to be filled in.

The destructive version is non-allocating operation, so it is suitable if you call it within the drawing loop.

If the state has a scalar value, the non-destructive version of query function returns a scalar value, but you need to pass a (uniform) vector of length 1 for the destructive version.

Function: gl-state-vector-size state

[Gauche specific] Returns the required size of the vector to retrieve GL state state. It is useful to prepare the vector to pass to the destructive version of glGetTYPE API.

Function: gl-get-boolean state
Function: gl-get-boolean! gl-boolean-vector state

Get (a) boolean state value(s).

Function: gl-get-integer state
Function: gl-get-integer! s32vector state

Get (an) integer state value(s).

Function: gl-get-float state
Function: gl-get-float! f32vector state

Get (a) single-precision floating-point state value(s).

Function: gl-get-double state
Function: gl-get-double! f64vector state

Get (a) double-precision floating-point state value(s).

Push/pop attributes

Function: gl-push-attrib mask
Function: gl-pop-attrib

Push/pop attributes indicated by mask. Valid mask can be logior of the following bits (GLL_ALL_ATTRIB_BITS is logior of all the bits).

GL_ACCUM_BUFFER_BIT
GL_COLOR_BUFFER_BIT
GL_CURRENT_BIT
GL_DEPTH_BUFFER_BIT
GL_ENABLE_BIT
GL_EVAL_BIT
GL_FOG_BIT
GL_HINT_BIT
GL_LIGHTING_BIT
GL_LINE_BIT
GL_LIST_BIT
GL_PIXEL_MODE_BIT
GL_POINT_BIT
GL_POLYGON_BIT
GL_POLYGON_STIPPLE_BIT
GL_SCISSOR_BIT
GL_STENCIL_BUFFER_BIT
GL_TEXTURE_BIT
GL_TRANSFORM_BIT
GL_VIEWPORT_BIT
GL_ALL_ATTRIB_BITS

All of the above.

Function: gl-push-client-attrib mask
Function: gl-pop-client-attrib

Push/pop client attributes. Valid mask can be logior of the following

GL_CLIENT_PIXEL_STORE_BIT
GL_CLIENT_VERTEX_ARRAY_BIT
GL_ALL_CLIENT_ATTRIB_BITS

All of the above.

Other queries

Function: gl-get-error

Returns the value of the error flag. Returned an integer value. Check out the OpenGL documentation for the possible error values.

This function resets the error flag to GL_NO_ERROR.

Function: glu-error-string error-code

Returns a descriptive string for error-code returned by gl-get-error.

Function: gl-get-string name

Returns informative string about name of the GL library. Name can be one of the following.

GL_VENDOR
GL_RENDERER
GL_VERSION
GL_EXTENSIONS

To check a specific version or extension, you can also use the utility procedure gl-version>? etc. See GL feature checking.

Function: glu-get-string name

Returns informative string about name of the GLU library. Name can be one of the following.

GLU_VERSION
GLU_EXTENSIONS

Hints

Function: gl-hint target hint

Controls quality of target by hint. Target can be one of the following:

GL_POINT_SMOOTH_HINT
GL_LINE_SMOOTH_HINT
GL_POLYGON_SMOOTH_HINT
GL_FOG_HINT
GL_PERSPECTIVE_CORRECTION_HINT

And hint can be one of the following:

GL_FASTEST
GL_NICEST
GL_DONT_CARE

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.5 GL states for drawing

Function: gl-point-size size

Sets the width in pixels for rendered points. The possible range of size on the running GL implementation can be obtained by passing either GL_ALIASED_POINT_SIZE_RANGE or GL_SMOOTH_POINT_SIZE_RANGE to gl-get-float.

Function: gl-line-width width

Sets the width in pixels for rendered lines. The possible range of width on the running GL implementation can be obtained by passing either GL_ALIASED_LINE_WIDTH_RANGE or GL_SMOOTH_LINE_WIDTH_RANGE to gl-get-float.

Function: gl-line-stipple factor pat

Sets the current stippling pattern for lines. pat must be an exact integer, and its lower 16 bits are used to specify the stipple pattern. Factor is an integer factor to specify how many pixels corresponds to one bit in pat.

You have to enable GL_LINE_STIPPLE to use face culling.

Function: gl-polygon-mode face mode

Specifies the drawing mode for a polygon’s front and back faces. Face can be one of the followings:

GL_FRONT_AND_BACK
GL_FRONT
GL_BACK

Mode can be one of the followings:

GL_POINT
GL_LINE
GL_FILL
Function: gl-front-face mode

Controls how OpenGL determine front face of a polygon Mode can be one of the followings:

GL_CCW

Front face is where ordered vertices appear in a counterclockwise orientation (default).

GL_CW

Front face is where ordered vertices appear in a clockwise orientation.

Function: gl-cull-face mode

Indicates which face of polygons should be culled. Mode can be one of the followings:

GL_FRONT
GL_BACK
GL_FRONT_AND_BACK

You have to enable GL_CULL_FACE to use face culling.

Function: gl-polygon-stipple mask

Defines the current stipple pattern for filled polygons. Mask has to be a u8vector of length 128, specifying a 32x32 bitmap pattern. You have to enable GL_POLYGON_STIPPLE to use this feature.

Function: gl-edge-flag flag

Sets the edge flag(s) of vertices. When flag is a GL boolean vector, glEdgeFlagv is called. Otherwise flag is used as a single boolean value for glEdgeFlag.

Function: gl-blend-func sfactor dfactor

Controls how color values in the fragment being processed (the source) are combined with the ones in the framebuffer (the destination).

Possible values for the sfactor and dfactor arguments are as follows.

GL_ZERO
GL_ONE
GL_DST_COLOR
GL_SRC_COLOR
GL_ONE_MINUS_DST_COLOR
GL_ONE_MINUS_SRC_COLOR
GL_SRC_ALPHA
GL_ONE_MINUS_SRC_ALPHA
GL_DST_ALPHA
GL_ONE_MINUS_DST_ALPHA
GL_SRC_ALPHA_SATURATE
GL_CONSTANT_COLOR
GL_ONE_MINUS_CONSTANT_COLOR
GL_CONSTANT_ALPHA
GL_ONE_MINUS_CONSTANT_ALPHA
Function: gl-blend-equation mode

[GL_ARB_imaging] By default, the source and destination colors are added after processed as specified by gl-blend-func. With this extension API you can change the function. Mode can be one of the following values:

GL_FUNC_ADD
GL_FUNC_SUBTRACT
GL_FUNC_REVERSE_SUBTRACT
GL_MIN
GL_MAX
Function: gl-blend-color red green blue alpha

[GL_ARB_imaging] Sets the constant color used in the blending function.

Function: gl-polygon-offset factor units

[GL1.1] Offset the depth value of each fragment. Useful to avoid artifacts when you draw polygon edges over its surfaces, for example.

Function: gl-clip-plane plane equation

Defines a clipping plane. Plane specifies which clipping plane you’re defining. Use GL_MAX_CLIP_PLANES to gl-get-integer to obtain the number of clipping planes you can use. You have to enable the specific clipping plane (e.g. (gl-enable GL_CLIP_PLANE0)) to use the clipping plane.

Equation must be an f64vector of size 4, specifying four coefficients of the plane equation, Ax + By + Cz + D = 0.

Function: gl-get-clip-plane plane

Returns the four coefficients of the equation of clipping plane plane, in f64vector.

Function: gl-fog pname param

Sets the parameters and function for the fog effect. Possible values for pname and accepted param for each pname are shown below.

GL_FOG_MODE

Either GL_EXP, GL_EXP2, GL_LINEAR to select the fog factors.

GL_FOG_DENSITY
GL_FOG_START
GL_FO_END

A real number to specify those parametes.

GL_FOG_COLOR

An f32vector of size 4 to specify the color.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.6 Transformation

Function: gl-matrix-mode mode

Speficies whether the modelview, projection, or texture matrix will be modified. Mode can be one of the followings:

GL_MODELVIEW
GL_PROJECTION
GL_TEXTURE
Function: gl-load-identity

Loads an identity matrix to the current modifiable matrix.

Function: gl-load-matrix mat

Loads the matrix mat to the current modifiable matrix. Mat can be a <matrix4f> instance, or f32 or f64vector of length 16.

Function: gl-mult-matrix mat

Multiplies the matrix mat to the current modifiable matrix. Mat can be a <matrix4f> instance, or f32 or f64vector of length 16.

Function: gl-translate x y z

Multiplies the current matrix by a matrix taht translates an object by (x, y, z). Internally, glTranslated is called.

Function: gl-rotate angle x y z

Multiplies the current matrix by a matrix that rotates an object in a counterclockwise direction about the ray from the origin through the point (x, y, z) by angle degrees. Internally, glRotated is called.

Function: gl-scale x y z

Multiplies the current matrix by a matrix that scales an object by (x, y, z). Internally, glScaled is called.

Function: glu-look-at eyex eyey eyez ctrx ctry ctrz upx upy upz

Defines a viewing matrix and multiplies it to the right of the current matrix.

Function: gl-frustum left right bottom top nearv farv

Creates a matrix for a perspective-view frustum and multiplies the current matrix by it.

Function: glu-perspective fovy aspect znear zfar

Creates a matrix for a symmetrix perspective-view frustum and multiplies the current matrix by it.

Function: gl-ortho left right bottom top nearv farv

Creates a matrix for an orthographic parallel viewing volume nand multiplies the current matrix by it.

Function: glu-ortho-2d left right bottom top

Convenience procedure for 2D drawing; it is the same as gl-ortho except nearv and farv are fixed (along Z axis) to -1.0 and 1.0, respectively.

Function: gl-viewport x y width height

Defines a pixel rectangle in the window into which the final image is mapped.

Function: gl-push-matrix
Function: gl-pop-matrix

Pushes/pops the current matrix.

Macro: gl-push-matrix* expr …

A convenience macro. Pushes the current matrix, executes exprs, then pop the current matrix.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.7 Display lists

Function: gl-gen-lists range

Allocates range number of contiguous display list indices. Returns an integer which is the smallest display list index you can use.

Function: gl-new-list list-no mode

Starts a display list construction. Mode may be one of the constants GL_COMPILE or GL_COMPILE_AND_EXECUTE.

Function: gl-end-list

Ends a display list construction.

Function: gl-call-list list-no

Calls a display list.

Function: gl-is-list list-no

Returns #t if list-no is an already used display list number, #f otherwise.

Function: gl-delete-lists list-no-start range

Deletes range display list, beginning from list-no-start.

Function: gl-list-base base

Specifies the offset that’s added to the display list indices in gl-call-list.

Function: gl-call-lists size type lists
Function: gl-call-lists size lists
Function: gl-call-lists lists

Executes size display list, whose indices are contained in lists. You can pass a u8, s8, u16, s16, u32, s32 or f32vector, or a string, as lists. If it is a string, each byte consists of the string is interpreted as an unsigned integer specifying a display list. It is useful for the technique to display character strings by creating display lists for each ASCII characters. But be aware that it doesn’t work for multibyte characters.

Usually you can use the simplest form (the third form) and Gauche-gl infers the size and type from the passed lists. You can explicitly specify size if you want to use just a beginning portion of lists. An error is signalled if you specify size that is larger than the size of lists.

Specifying type is useful only if lists is a u8vector, and you want to use one of three special types allowed to glCallLists, namely GL_2_BYTES, GL_3_BYTES, and GL_4_BYTES.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.8 Vertex arrays

Scheme version of APIs doesn’t have GLenum type argument in C API, since Gauche-gl can figure out the type by passed vectors.

Scheme API of gl-*-array has offset optional argument, by which you can pass the GL the values beginning from the offset-th element of the passed uniform vector. This isn’t in GL C API, since you can just offset the pointer in C.

NOTE: it is caller’s responsibility to guarantee the passed vector has enough length. GL doesn’t have an interface to specify the boundary, so Gauche can’t detect an invalid length vector.

Function: gl-vertex-pointer size vec &optional stride offset

Sets the vertex array. Size specifies the number of scalar values per vertex (2, 3, or 4), and vec provides the actual value in either f32, f64, s32 or s16vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-normal-pointer vec &optional stride offset

Sets the normal array. Vec should be either a f32, f64, s32 or s16vector, where each consecutive triplet specifies a normal vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-color-pointer size vec &optional stride offset

Sets the color array. Size specifies the number of scalar values per color (3 or 4), and vec provides the actual values in either f32, f64, u32, u16, u8, s32, s16, or s8vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-index-pointer vec &optional stride offset

Sets the index array. Vec can be either s32, s16, u8, f32, or f64vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-tex-coord-pointer size vec &optional stride offset

Sets the texture coordinate array. Size specifies the number of scalar values per texture coordinate (1, 2, 3 or 4), and vec provides the actual values in either f32, f64, s32 or s16vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-edge-flag-pointer vec &optional stride offset

Sets the edge flag array. Vec must be a GL boolean vector. Stride and offset can be used to tell GL to access vec sparsely.

Function: gl-array-element ith

Dereference ith vertex information of the currently enabled arrays.

Function: gl-draw-elements mode indices

Issues geometric primitive calls consists of the vertex information of the currently enabled arrays, each of which is specified by indices, which should be either a u8, u16 or u32vector.

Mode is the same as of gl-begin.

Function: gl-draw-range-elements mode start end indices

[GL1.2] Like gl-draw-elements, but limits the range of indices between start and end, inclusive. GL driver may take advantage of the information for better performance.

Function: gl-draw-arrays mode first count

This is more straightforward. Starting from first index, count vertices is wrtten in the drawing mode mode (same as of gl-begin), taken from the current enabled arrays.

Function: gl-interleaved-arrays format vec &optional stride offset

Vec must be a f32vector. It contains various information (e.g. vertex position, color and texture coordinate) interleaved, in the way specified by format.

In Scheme API, we only allow uniform vector as vec, so you can’t use the format that mixes float and integer, such as GL_C4UB_V2F.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.9 Lighting

Function: gl-shade-model mode

Sets the shading model, either GL_SMOOTH or GL_FLAT.

Function: gl-light light pname param

Creates a light specified by light, which is one of GL_LIGHT0, …, GL_LIGHT7, and sets a characteristics named by pname with the value param.

Possible values as pname and acceptable types of param are as follows.

GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR, GL_POSITION

Accepts an f32 or s32vector of size 4.

GL_SPOT_DIRECTION

Accepts an f32 or s32vector of size 3.

GL_SPOT_EXPONENT, GL_SPOT_CUTOFF, GL_CONSTNAT_ATTENUATION, GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION

Accepts a real number (glLightf is used).

Function: gl-get-light light pname

Returns the value of the property pname of the light light. Returned value can be f32vector or a real number.

Function: gl-light-model pname param

Sets the value of the property pname of the lighting model. Possible pname and its allowed param is as follows.

GL_LIGHT_MODEL_AMBIENT

Accepts f32 or s32vector of size 4.

GL_LIGHT_MODEL_LOCAL_VIEWER, GL_LIGHT_MODEL_TWO_SIDE

Accepts any Scheme value, which is interpreted as a boolean value. (That is, you have to pass #f to turn off these properties, and any other value to turn on.

GL_LIGHT_MODEL_COLOR_CONTROL

Accepts an enum value either GL_SINGLE_COLOR or GL_SEPARATE_SPECULAR_COLOR.

Function: gl-matrial face pname param

Sets the current material property. Face may be either GL_FRONT, GL_BACK, or GL_FRONT_AND_BACK. Possible values of pname and acceptable param types are as follows.

GL_AMBIENT, GL_DIFFUSE, GL_AMBIENT_AND_DIFFUSE, GL_SPECULAR, GL_EMISSION

Accepts f32 or s32vector of size 4.

GL_SHININESS

Accepts a single real number (glMatrialf is called).

GL_COLOR_INDEXES

Accepts f32 or s32vector of size 3.

Function: gl-get-material face pname

Returns the current material property of face and pname. The type of returned value may be f32vector, s32vector (only for GL_COLOR_INDEXES), or a real number.

Function: gl-color-material face mode

Makes the material property mode (e.g. GL_AMBIENT etc.) of the face face follow the current color set by gl-color.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.10 Pixels, bitmaps and images

Pixel operations

Function: gl-bitmap width height xbo ybo xbi ybi bitmap

Draws a bitmap. Width and height gives the dimension of the bitmap. Xbo, ybo, xbi, and ybi specifies the origin and increment of the current raster position. Bitmap is the actual bitmap data, packed in a u8vector.

Function: gl-read-pixels x y width height format type

Reads pixel data from the framebuffer. Returns the pixel data in a uniform vector of the type determined by format and type (check out OpenGL doc to find out the actual data format).

Function: gl-draw-pixels width height format type pixels

Draws a pixel data pixels at the current raster position. Pixels must be a uniform vector compatible to the specified format and type values.

Function: gl-copy-pixels x y width height buffer

Copies pixel data in a rectangle area of the framebuffer, specified by lower-left corner (x, y) and dimensions (width, height). Buffer specifies which buffer is used, and should be one of GL_COLOR, GL_STENCIL or GL_DEPTH.

Function: gl-pixel-store pname param

Sets the pixel stroage models. Check out the OpenGL doc for the possible pname and param values.

Function: gl-pixel-transfer pname param

Sets the pixel transfer modes. Check out the OpenGL doc for the possible pname and param values.

Function: gl-pixel-map map values

Sets the pixel map table map with values, which must be either u16, u32 or f32vecotor. Check out the OpenGL doc for the possible map values.

Function: gl-pixel-zoom xfactor yfactor

Sets the magnification/reduction factors for pixel-write operations.

Function: gl-get-pixel-map map &optional type

Returns the current pixel map table as an uniform vector specified by type, which must be either a class <u32vector> (default), <u16vector>, or <f32vector>.

Function: gl-get-pixel-map! map values

Like gl-get-pixel-map, but instead of allocating a new vector, it stores the result to a uniform vector passed to values. It is a caller’s responsibility to ensure values has enough size.

Color tables

Function: gl-color-table target internal-format width format type data

[GL_ARB_imaging] Specifies one of the color table target. Data should be a uniform vector compatible to the format and type parameters.

Function: gl-color-table-parameter target pname param

[GL_ARB_imaging] Sets the color table parameter pname (either GL_COLOR_TABLE_SCALE or GL_COLOR_TABLE_BIAS), of the color table target. Param must be an f32 or s32vector of size 4.

Function: gl-copy-color-table target internal-format x y width

[GL_ARB_imaging] Creates a color table target using framebuffer data. The pixels are read from the current buffer for read (specified by glReadBuffer).

Function: gl-color-sub-table target start count format type data

[GL_ARB_imaging] Replaces a part of color table target, starting start and count entries. Values are given in data as a uniform vector compatible to the format and type arguments.

Function: gl-copy-color-sub-table target start x y width

[GL_ARB_imaging] Replaces a part of color table entries using framebuffer data.

Function: gl-get-color-table! target format type data

[GL_ARB_imaging] Reads the color table target and store it in data, in the format specified by format and type. Data must be a uniform vector compatible to the format and type arguments. The caller must ensure that data has enough size to contain the result.

Convolutions

Function: gl-convolution-filter-2d target internal-format width height format type data

[GL_ARB_imaging] Defines a 2D convolution filter. Target must be GL_CONVOLUTION_2D. Data must be a uniform vector compatible to the format and type arguments, and must have enough size.

Function: gl-copy-convolution-filter-2d target internal-format x y width height

[GL_ARB_imaging] Defines a 2D convolution filter, taking the convolution filter data from the current color buffer to read.

Function: gl-separable-filetr-2d target internal-format width height format type row column

[GL_ARB_imaging] Defines a 2D convolution filter by a product of a 1D row vector and 1D column vector. Target must be GL_SEPARABLE_2D. Both row and column must be a uniform vector, compatible with the format and type arguments, and must have enough size.

Function: gl-convolution-filter-1d target internal-format width format type data

[GL_ARB_imaging] Defines 1D convolution filter. Target must be GL_CONVOLUTION_1D. Data must be a uniform vector compatible to the format and type arguments, and must have enough size.

Function: gl-copy-convolution-filter-1d target internal-format x y width

[GL_ARB_imaging] Defines 1D convolution filter, taking the convolution filter data from the current color buffer to read.

Function: gl-convolution-parameter target pname param

[GL_ARB_imaging] Sets a parameter for a convolution filter target, which can be either GL_CONVOLUTION_2D, GL_SEPARABLE_2D, or GL_CONVOLUTION_1D. Possible values of pname and their acceptable param are as follows.

GL_CONVOLUTION_BORDER_MODE

Either one of the constants: GL_REDUCE, GL_CONSTNAT_BORDER, GL_REPLICATE_BORDER

GL_CONVOLUTION_FILTER_SCALE, GL_CONVOLUTION_FILTER_BIAS

An s32 or f32vector of size 4, specifying color values.

Histogram

Function: gl-histogram target width internal-format sink

[GL_ARB_imaging] Specifies the way the histogram data is stored. Target must be either GL_HISTOGRAM or GL_PROXY_HISTOGRAM. Width is the number of entires of the histogram, and has to be a power of 2. Sink is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline.

Function: gl-reset-histogram target

[GL_ARB_imaging] Resets the histogram counters. Target must be GL_HISTOGRAM.

Function: gl-get-histogram target reset format type

[GL_ARB_imaging] Returns histogram data in a uniform vector, whose type and size are determined by format and type. A boolean value reset specifies whether the histogram should be reset or not.

Function: gl-get-histogram-parameter target pname

[GL_ARB_imaging] Returns the parameter value of the histogram. Pname can be either one of GL_HISTOGRAM_WIDTH, GL_HISTOGRAM_FORMAT, GL_HISTOGRAM_RED_SIZE, GL_HISTOGRAM_GREEN_SIZE, GL_HISTOGRAM_BLUE_SIZE, GL_HISTOGRAM_ALPHA_SIZE, GL_HISTOGRAM_LUMINANCE_SIZE, or GL_HISTOGRAM_SINK. The returned value is an integer, except the case of GL_HISTOGRAM_SINK, which returns a boolean value.

Minmax

Function: gl-minmax target internal-format sink

[GL_ARB_imaging] Computes the minimum and maximum pixel values for an image. Target must be GL_MINMAX. Sink is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline.

Function: gl-get-minmax target reset format type

[GL_ARB_imaging] Returns the results of the minmax operation in a uniform vector, whose type and size are determined by the format and type arguments. A boolean value reset specifies whether the histogram should be reset or not.

Function: gl-reset-minmax target

[GL_ARB_imaging] Resets the minmax counter.

Function: gl-get-minmax-parameter target pname

[GL_ARB_imaging] Returns the parameter value of the histogram. Pname can be either GL_MINMAX_SINK (returns a boolean value) or GL_MINMAX_FORMAT (returns an integer).


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.11 Texture mapping

Defining textures

Function: gl-tex-image-1d target level internalformat width border format type texels
Function: gl-tex-image-2d target level internalformat width height border format type texels
Function: gl-tex-image-3d target level internalformat width height depth border format type texels

Defines an 1D, 2D or 3D texture. 3D texture is available only if the GL version is 1.2 or later. The target parameter can be GL_TEXTURE_1D or GL_PROXY_TEXTURE_1D for gl-tex-image-1d, etc. The level parameter can be used for multiresolution textures; if this is a single resolution texture, pass 0.

Width, height, and depth specify the dimensions of the texture. Border can be 0 or 1, specifying the border.

The actual texture data is passed to the texels argument in a uniform vector, which should be compatible with the format and type parameters and match the size calculated by width, height and depth (and possibly the pixel store setting).

Function: gl-copy-tex-image-1d target level internal-format x y width border
Function: gl-copy-tex-image-2d target level internal-format x y width height border

Cerates a 1D or 2D texture from the framebuffer data.

Function: gl-tex-sub-image-1d target level xoffset width format type texels
Function: gl-tex-sub-image-2d target level xoffset yoffset width height format type texels
Function: gl-tex-sub-image-3d target level xoffset yoffset zoffset width height depth format type texels

Replaces a part of the current 1D, 2D or 3D texture image by texels. 3D texture is available only if the GL version is 1.2 or later.

Function: gl-copy-tex-sub-image-1d target level xoffset x y width
Function: gl-copy-tex-sub-image-2d target level xoffset yoffset x y width height
Function: gl-copy-tex-sub-image-3d target level xoffset yoffset zoffset x y width height

Replaces a part of the current 1D, 2D or 3D texture image by the data from the framebuffer. 3D texture is available only if the GL version is 1.2 or later.

Texture parameters

Function: gl-tex-parameter target pname param

Sets parameters for the current texture. Target can be either GL_TEXTURE_1D, GL_TEXTURE_2D or GL_TEXTURE_3D. Possible values for pname, and accepted type of param for each pname, are shown below.

GL_TEXTURE_WRAP_S
GL_TEXTURE_WRAP_T
GL_TEXTURE_WRAP_R
GL_TEXTURE_BASE_LEVEL
GL_TEXTURE_MAX_LEVEL
GL_TEXTURE_MAG_FILTER
GL_TEXTURE_MIN_FILTER

Param must be an integer.

GL_TEXTURE_PRIORITY
GL_TEXTURE_MIN_LOD
GL_TEXTURE_MAX_LOD

Param must be a real number.

GL_TEXTURE_BORDER_COLOR

Param must be an f32vector of size 4, representing a color.

Function: gl-get-tex-parameter target pname

Obtains the parameter of the current texture, set by gl-tex-parameter.

Function: gl-get-tex-level-parameter target level pname

Obtains the parameter of the level level of the current texture specified by target, which can be either GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_PROXY_TEXTURE_1D, GL_PROXY_TEXTURE_2D, or GL_PROXY_TEXTURE_3D.

Possible values for pname is either one of the following constants: GL_TEXTURE_WIDTH, GL_TEXTURE_HEIGHT, GL_TEXTURE_DEPTH, GL_TEXTURE_BORDER, GL_TEXTURE_INTERNAL_FORMAT, GL_TEXTURE_RED_SIZE, GL_TEXTURE_GREEN_SIZE, GL_TEXTURE_BLUE_SIZE, GL_TEXTURE_ALPHA_SIZE, GL_TEXTURE_LUMINANCE_SIZE, or GL_TEXTURE_INTENSITY_SIZE. This procedure returns an integer.

Mipmaps

Function: glu-build-1d-mipmaps target internal-format width format type texels
Function: glu-build-2d-mipmaps target internal-format width height format type texels
Function: glu-build-3d-mipmaps target internal-format width height depth format type texels

Constructs a serids of mipmaps and calls gl-tex-image-*d to load the images. Returns 0 on success, or a GLU error code on failure. Texels is a uniform vector, that must be compatible with format and type arguments, and must have the enough length as specified by width, height and depth parameters.

Function: glu-build-1d-mipmap-levels target internal-format width format type level base max texels
Function: glu-build-2d-mipmap-levels target internal-format width height format type level base max texels
Function: glu-build-3d-mipmap-levels target internal-format width height depth format type level base max texels

Like glu-build-*d-mipmaps, but you can specify the level of texels, and the range of levels to be generated by the base and max parameters. It is used to generate a subset of mipmaps.

Returns 0 on success, or a GLU error code on failure. Texels is a uniform vector, that must be compatible with format and type arguments, and must have the enough length as specified by width, height and depth parameters.

Texture objects

Function: gl-gen-textures size

Returns size new names for texture objects in a u32vector.

Function: gl-is-texture name

Returns #t if an integer name is the name of a texture that has been bound and not deleted yet, #f otherwise.

Function: gl-bind-texture target name

Bind the current texture (specified by target, e.g. GL_TEXTURE_2D) to the integer name. If there’s already a texture bound to name, it becomes current. Otherwise a new texture object is created and made current.

Function: gl-delete-textures names

Delets textures. Names must be a u32vector contains integer names of the texture objects to be deleted.

Function: gl-are-textures-resident! names residences

Names must be a u32vector contains integer names of the texture objects, and residences must be a GL boolean vector of the same length as names. If all textures named in names are resident, #t is returned and residences is not modified. Othewise, #f is returned and residences is modified to contain #t if the corresponding texture in names is resident, #f othewise.

Function: gl-prioritize-textures names priorities

Sets the prioridies of texture objects named by names to the corresponding entry of priorities Names must be a u32vectore and priorities must be an f32vector, and the lengths of both vectors must match.

Texture environment and coordinates

Function: gl-tex-env target pname param

Sets the current texturing function. Target must be GL_TEXTURE_ENV. Possible values of pname and accepted param for each value is as follows.

GL_TEXTURE_ENV_MODE

One of GL_DECAL, GL_REPLACE, GL_MODULATE or GL_BLEND.

GL_TEXTURE_ENV_COLOR

f32vector of size 4 to specify the color.

Function: gl-tex-gen coord pname param

Specifies the functions for automatic texture coordinate generation. Coord specifies the coordinates, either one of GL_S, GL_T, GL_R or GL_Q. Possible values of pname and accepted param for each value is as follows.

GL_TEXTURE_GEN_MODE

Either GL_OBJECT_LINEAR, GL_EYE_LINEAR or GL_SPHERE_MAP.

GL_OBJECT_PLANE
GL_EYE_PLANE

An s32, f32 or f64vector of size 4 to specify the plane.

Multitexturing

Function: gl-active-texture-arb texunit

[GL_ARB_multitexture] Selects the texture unit that is currently modified by texturing routines. Texunit is a constant GL_TEXTUREi_ARB, where i is 0 to the maximum number of the supported texture units.

Function: gl-multi-tex-coord-arb texunit coords
Function: gl-multi-tex-coord-arb texunit s &optional t r q

[GL_ARB_multitexture] Specifies the texture coordinate of the texture unit texunit. In the first form, you can pass either an f32, f64, s32, or s16vector of length 1 to 4. In the second form, s, t, r and q must be real numbers.

Function: gl-client-active-texture-arb texunit

Selects the current texture unit for specifying texutre-coordinate data with vertex arrays.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.12 Framebuffers

Clearing buffers

Function: gl-clear-color r g b a

Sets the current clearing color. Each color value sould be a real number, and is clamped to [0.0,1.0].

Function: gl-clear-index c

Sets the current clearing color (in color index mode). c must be a real number.

Function: gl-clear-depth depth

Sets the current clearing depth value. Depth must be a real number and clamped to [0.0,1.0].

Function: gl-clear-stencil s

Sets the current clearing value of the stencil buffer.

Function: gl-clear-accum r g b a

Sets the current clearing value of accumulation buffer.

Function: gl-clear mask

Clears the specified buffer. Mask is a logical-or of the following constants.

GL_COLOR_BUFFER_BIT
GL_DEPTH_BUFFER_BIT
GL_ACCUM_BUFFER_BIT
GL_STENCIL_BUFFER_BIT

Selecting color buffers

Function: gl-draw-buffer mode

Selects (a) buffer(s) to which the image is rendered. Possible mode values are: GL_FRONT, GL_FRONT_LEFT, GL_FRONT_RIGHT, GL_BACK, GL_BACK_LEFT, GL_BACK_RIGHT, GL_LEFT, GL_RIGHT, GL_AUXi, GL_FRONT_AND_BACK, and GL_NONE.

Function: gl-read-buffer mode

Selects a color buffer as the source for reading pixels. Possible mode values are the same as gl-draw-buffer except GL_FRONT_AND_BACK and GL_NONE.

Masking buffers

Function: gl-index-mask mask

In color index mode, sets the mask of the color-index buffer. Mask is an exact integer.

Function: gl-color-mask r g b a

R, g, b and a are boolean values to specify whether the corresponding color channel should be written to the color buffer or not.

Function: gl-depth-mask flag

Flag is a boolean value specifies whether depth buffer should be written or not.

Function: gl-stencil-mask mask

Sets the mask bit pattern for the stencil buffer. Mask is an exact integer.

Testing and operating on fragments

Function: gl-scissor x y width height

Sets the scissor rectangle. If the scissor test is enabled (use (gl-enable GL_SCISSOR_TEST)), only the pixels that lie inside the rectangle are written.

Function: gl-alpha-func func ref

Sets the reference value and comparison function for the alpha test. Func may be either one of GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, or GL_NOTEQUAL. Ref sets the reference value, a real number clamped to be between 0.0 and 1.0.

Function: gl-stencil-func func ref mask

Sets the comparison function, the reference value, and a mask for stencil test. Func specifies the funciton, and its possible value is the same as gl-alpha-func’s. Ref is an integer reference value, and mask is an integer specifying bitwise mask. Before the comparison, the reference value and the fragment value are taken bitwise AND by mask.

Function: gl-stencil-op func zfail zpass

Speficies how the stencil buffer should be modified by the result of the stencil test. Each three parameter can take one of the following values independently: GL_KEEP, GL_ZERO, GL_REPLACE, GL_INCR, GL_DECR, or GL_INVERT.

Function: gl-depth-func func

Sets the comparison function for the depth test. Func may be one of the following constant value: GL_NEVER, GL_ALWAYS, GL_LESS, GL_LEQUAL, GL_EQUAL, GL_GEQUAL, GL_GREATER, or GL_NOTEQUAL.

Function: gl-depth-range nearv farv

Defines an encoding for z-coordinates. Nearv and farv define the minimum and maximum values that can be stored in the depth buffer. By default, they’re 0.0 and 1.0, respectively.

Function: gl-logic-op opcode

Selects the logical operation to be performed, given an incoming (source) fragment and the pixel currently in the color buffer (destination). Opcode may be one of the following values: GL_CLEAR, GL_COPY, GL_NOOP, GL_SET, GL_COPY_INVERTED, GL_INVERT, GL_AND_REVERSE, GL_OR_REVERSE, GL_AND, GL_OR, GL_NAND, GL_NOR, GL_XOR, GL_EQUIV, GL_AND_INVERTED or GL_OR_INVERTED.

Function: gl-accum op value

Sets the accumulation buffer operation mode. Op may be one of the following values:

GL_ACCUM

Reads each pixel from the current selected buffer to read (by gl-read-buffer), multiplies its values by value, and adds the result into the accumulation buffer.

GL_LOAD

Same as GL_ACCUM but replacing the accumulation buffer by the result of multiplication, instead of adding it.

GL_RETURN

Takes the values from accumulation buffer, multiplies them with value, then write it to the current color buffer to write (by gl-draw-buffer).

GL_ADD

Adds value to each pixel in the accumulation buffer and write it back.

GL_MULT

Multiplies value to each pixel in the accumulation buffer and write it back. The result value is clamped to [-1.0, 1.0].


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.13 Selection and feedback

Function: gl-feedback-buffer type buffer
Function: gl-select-buffer buffer
Function: gl-render-mode mode
Function: gl-pass-through token
Function: gl-init-names
Function: gl-load-name name
Function: gl-push-name name
Function: gl-pop-name

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.14 Projection

Function: glu-pick-matrix x y w h vp
Function: glu-project objx objy objz model-mat proj-mat vp
Function: glu-un-project winx winy winz model-mat proj-mat vp
Function: glu-project! win obj model-mat proj-mat vp
Function: glu-un-project! obj win model-map proj-mat vp

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.15 Quadrics

Class: <glu-quadric>
Function: glu-quadric-draw-style quad style
Constant: GLU_POINT
Constant: GLU_LINE
Constant: GLU_FILL
Constant: GLU_SILHUETTE
Function: glu-quadric-orientation quad orientation
Constant: GLU_OUTSIDE
Constant: GLU_INSIDE
Function: glu-quadric-normals quad normals
Constant: GLU_SMOOTH
Constant: GLU_FLAT
Constant: GLU_NONE
Function: glu-quadric-texture quad texcoords
Function: glu-cylinder quad base-radius top-radius height slices stacks
Function: glu-sphere quad radius slices stacks
Function: glu-disk quad inner-radius outer-radius slices loops
Function: glu-partial-disk quad inner-radius outer-radius slices loops start-angle sweep-angle

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.16 Nurbs

Class: <glu-nurbs>
Function: glu-load-sampling-matrices nurbs model-matrix proj-matrix viewport
Function: glu-nurbs-property nurbs property value
Function: glu-get-nurbs-property nurbs property
Function: glu-begin-curve nurbs
Function: glu-end-curve nurbs
Function: glu-nurbs-curve nurbs knot stride ctlarray order type
Function: glu-begin-surface nurbs
Function: glu-end-surface nurbs

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.17 Polygon tesselation

Class: <glu-tesselator>

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

4.18 Programmable shaders

Shader objects

Function: gl-create-shader-object-arb type

[GL_ARB_shader_objects] Creates a new shader object and returns its handle. Type can be either GL_VERTEX_SHADER_ARB or GL_FRAGMENT_SHADER_ARB.

Function: gl-shader-source-arb shader strings

[GL_ARB_shader_objects] Sets the source code of the shader, whose handle is shader. You can give the source code as a list of strings to strings. All strings are concatenated internally in the OpenGL driver.

Function: gl-compile-shader-arb shader

[GL_ARB_shader_objects] Compile the source code attached to the shader, whose handle is shader. You can query the result of the compilation by passing GL_OBJECT_COMPILE_STATUS_ARB to gl-get-object-parameter-arb; it returns #t if the compilation succeeded, or #f if failed. The information about the compilation can be obtained by gl-get-info-log-arb.

Function: gl-create-program-object-arb

[GL_ARB_shader_objects] Creates a new program object and returns its handle.

Function: gl-attach-object-arb program shader

[GL_ARB_shader_objects] Attach a shader whose handle is shader to the program whose handle is program.

Function: gl-detach-object-arb program shader

[GL_ARB_shader_objects] Detach a shader from a program.

Function: gl-link-program-arb program

[GL_ARB_shader_objects] Link the program object. The result of linking can be queried by passing GL_OBJECT_LINK_STATUS_ARB to gl-get-object-parameter-arb.

Function: gl-use-program-object-arb program

[GL_ARB_shader_objects] Installs the program to the current rendering state.

Function: gl-delete-object-arb handle

[GL_ARB_shader_objects] Deletes either a shader object or a program object specified by handle.

Function: gl-get-object-parameter-arb object pname

[GL_ARB_shader_objects] Queries the value of pname of the shader or the program specified by object. The following values are accepted as pname: GL_OBJECT_TYPE_ARB, GL_OBJECT_SUBTYPE_ARB, GL_OBJECT_DELETE_STATUS_ARB, GL_OBJECT_COMPILE_STATUS_ARB, GL_OBJECT_LINK_STATUS_ARB, GL_OBJECT_VALIDATE_STATUS_ARB, GL_OBJECT_INFO_LOG_LENGTH_ARB, GL_OBJECT_ATTACHED_OBJECTS_ARB, GL_OBJECT_ACTIVE_ATTRIBUTES_ARB, GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB, GL_OBJECT_ACTIVE_UNIFORMS_ARB, GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB, and GL_OBJECT_SHADER_SOURCE_LENGTH_ARB. The procedure returns an integer value.

Function: gl-get-shader-source-arb shader

[GL_ARB_shader_objects] Returns the shader source code of a shader object shader in a string.

Function: gl-get-info-log-arb handle

[GL_ARB_shader_objects] Returns the information log of an object pointed by handle.

Function: gl-get-handle-arb pname

[GL_ARB_shader_objects] Returns the handle to an object that is used in the current state. The only argument accepted currently as pname is GL_PROGRAM_OBJECT_ARB, which returns the handle to the current program object.

Function: gl-get-attached-objects-arb program

[GL_ARB_shader_objects] Rethrns a vector of GL object handles that are attached to the program.

Function: gl-validate-program-arb program

[GL_ARB_shader_objects] Checks whether the program can execute in the current GL state. The result is stored in program’s log.

Specifying vertex attributes

Function: gl-vertex-attrib-arb index values
Function: gl-vertex-attrib-arb index v0 &rest v1 v2 v3

[GL_ARB_vertex_program] Sets the generic vertex attribute specified by index. In the first form, you can pass f32, f64, or s16vector of size 1 to 4, or u8, s8, u16, s32, or u32vector of size 4. In the second form, you can pass 1 to 4 real numbers (they are interpreted as C doubles and glVertexAttrib4dARB is called).

Function: gl-vertex-attrib-4n-arb index values
Function: gl-vertex-attrib-4n-arb index v0 v1 v2 v3

[GL_ARB_vertex_program] These variations can be used to pass normalized values. The first form accepts s8, u8, s16, u16, s32, u32, f32 and f64vector of size 4. The second value takes four integers, whose lower 8bits are taken as unsigned byte and passed to glVertexAttrib4NubARB.

Function: gl-vertex-attrib-pointer-arb index size vec &optional normalized stride offset

[GL_ARB_vertex_program] This is the generic version of vertex arrays. Index names the attribute, size specifies the number of components (1, 2, 3 or 4), and vec is a uniform vector that contains the array of values.

The optional boolean normalized argument tells whether the passed integer values should be mapped to normalized range (#t or taken as are #f, default). The optional stride argument specifies the gap between each set of values within vec. The optional offset argument tells GL to take values beginning from the offset-th element of vec.

Function: gl-enable-vertex-attrib-array-arb index
Function: gl-disable-vertex-attrib-array-arb index

[GL_ARB_vertex_program] Enable or disable a vertex attribute array specified by index.

Function: gl-bind-attrib-location-arb program index name

[GL_ARB_vertex_shader] Associates a user-defined attribute variable in the program object program with an index-th generic vertex attribute. Name is a string of the name of user-defined attribute as appears in the shader program.

Function: gl-get-attrib-location-arb program name

[GL_ARB_vertex_shader] Returns an integer index of the user-defined attribute name in the program. Must be called after program is linked.

Function: gl-get-active-attrib-arb program index

[GL_ARB_vertex_shader] Obtains information about the index-th user-defined attribute in the program. Must be called after program is linked.

It returns three values: the size of the attribute (1, 2, 3 or 4), the type of the attribute (an integer that matches one of the following constants: GL_FLOAT, GL_FLOAT_VEC2_ARB, GL_FLOAT_VEC3_ARB, GL_FLOAT_VEC4_ARB, GL_FLOAT_MAT2_ARB, GL_FLOAT_MAT3_ARB, or GL_FLOAT_MAT4_ARB.), and the name of the attribute.

Specifying uniform variables

Function: gl-get-uniform-location-arb program name

[GL_ARB_shader_objects] Returns an integer location of the uniform variable name of the program program.

Function: gl-uniform1-arb location vec
Function: gl-uniform1-arb location v0
Function: gl-uniform2-arb location vec
Function: gl-uniform2-arb location v0 v1
Function: gl-uniform3-arb location vec
Function: gl-uniform3-arb location v0 v1 v2
Function: gl-uniform4-arb location vec
Function: gl-uniform4-arb location v0 v1 v1 v3

[GL_ARB_shader_objects] Sets a value of the uniform variable specified by location. gl-uniform1-arb sets a single component value (e.g. float) gl-uniform2-arb sets a double component value (e.g. vec2) etc.

The first form of each function takes either an s32vector or f32vector. It can have a size multiple of the number of components to set an array uniform variable (e.g. you can pass an f32vector of size 8 to fill vec2[2]).

The second form just sets the component(s) of a single uniform variable. The arguments v0 to v3 must be real numbers, and coerced to C float (i.e. glUniform*fARB is used).

Function: gl-uniform-matrix2-arb location transpose v
Function: gl-uniform-matrix3-arb location transpose v
Function: gl-uniform-matrix4-arb location transpose v

[GL_ARB_shader_objects] Sets a matrix uniform variable (or an array of matrix uniform variables) specified by location. A boolean flag transpose specifies whether the matrix should be transposed. The v argument must be a f32vector of size multiple of 4, 9, or 16, respectively.

Function: gl-get-active-uniform-arb program index

[GL_ARB_shader_objects] Returns informaton about the index-th uniform variable of program.

Returns three values. The first one is the size, either 1, 2, 3 or 4. The second value is the type, which is an integer that matches one of the following constants: GL_FLOAT, GL_FLOAT_VEC(1|2|3|4)_ARB, GL_INT, GL_INT_VEC(1|2|3|4)_ARB, GL_BOOL, GL_BOOL_VEC(1|2|3|4)_ARB, GL_FLOAT_MAT(2|3|4)_ARB. And the third value is the name of the uniform variable.

Vertex and fragment programs

These APIs are for low-level vertex/fragment pipeline programming.

Function: gl-gen-programs-arb n

[GL_ARB_vertex_program] Generates N names (integers) for the new programs and returns them in an s32vector.

Function: gl-delete-programs-arb programs

[GL_ARB_vertex_program] Deletes programs whose names are specified by an s32vector programs.

Function: gl-is-program-arb prog-id

[GL_ARB_vertex_program] Returns #t if an integer prog-id refers to a valid program.

Function: gl-bind-program-arb target prog-id

[GL_ARB_vertex_program] Binds a program specified by prog-id to a target, which is either GL_VERTEX_PROGRAM_ARB or GL_FRAGMENT_PROGRAM_ARB.

Function: gl-program-string-arb target format text

[GL_ARB_vertex_program] Sets the source code of the program currently bound to the target (GL_VERTEX_PROGRAM_ARB or GL_FRAGMENT_PROGRAM_ARB).

Format must be GL_PROGRAM_FORMAT_ASCII_ARB. Text is a string for the program source.

Function: gl-program-env-parameter-arb target param-id args
Function: gl-program-env-parameter-arb target param-id arg0 arg1 arg2 arg3
Function: gl-program-local-parameter-arb target param-id args
Function: gl-program-local-parameter-arb target param-id arg0 arg1 arg2 arg3

[GL_ARB_vertex_program] Sets the value of the environment and local parameter specified by param-id of the program currently bount to the target. In the first form of each, args must be either f32 or f64vector of size 4 or <vector4f> object.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5. GLUT API


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.1 GLUT window manipulation

Function: glut-init args
Function: glut-init-display-mode mode
Constant: GLUT_RGB
Constant: GLUT_RGBA
Constant: GLUT_INDEX
Constant: GLUT_SINGLE
Constant: GLUT_DOUBLE
Constant: GLUT_ACCUM
Constant: GLUT_ALPHA
Constant: GLUT_DEPTH
Constant: GLUT_STENCIL
Constant: GLUT_MULTISAMPLE
Constant: GLUT_STEREO
Constant: GLUT_LUMINANCE
Function: glut-init-display-string string
Function: glut-init-window-size width height
Function: glut-init-window-position x y
Function: glut-main-loop
Function: glut-create-widnow name
Function: glut-create-sub-window win x y width height
Function: glut-destroy-window win
Function: glut-post-redisplay
Function: glut-post-window-redisplay win
Function: glut-swap-buffers
Function: glut-get-window
Function: glut-set-window win
Function: glut-set-window-title title
Function: glut-set-icon-title title
Function: glut-position-window x y
Function: glut-reshape-window width height
Function: glut-push-window
Function: glut-pop-window
Function: glut-iconify-window
Function: glut-show-window
Function: glut-hide-window
Function: glut-full-screen
Function: glut-set-cursor cursor
Constant: GLUT_CURSOR_RIGHT_ARROW
Constant: GLUT_CURSOR_LEFT_ARROW
Constant: GLUT_CURSOR_INFO
Constant: GLUT_CURSOR_DESTROY
Constant: GLUT_CURSOR_HELP
Constant: GLUT_CURSOR_CYCLE
Constant: GLUT_CURSOR_SPRAY
Constant: GLUT_CURSOR_WAIT
Constant: GLUT_CURSOR_TEXT
Constant: GLUT_CURSOR_CROSSHAIR
Constant: GLUT_CURSOR_UP_DOWN
Constant: GLUT_CURSOR_LEFT_RIGHT
Constant: GLUT_CURSOR_TOP_SIDE
Constant: GLUT_CURSOR_BOTTOM_SIDE
Constant: GLUT_CURSOR_LEFT_SIDE
Constant: GLUT_CURSOR_RIGHT_SIDE
Constant: GLUT_CURSOR_TOP_LEFT_CORNER
Constant: GLUT_CURSOR_TOP_RIGHT_CORNER
Constant: GLUT_CURSOR_BOTTOM_RIGHT_CORNER
Constant: GLUT_CURSOR_BOTTOM_LEFT_CORNER
Constant: GLUT_CURSOR_INHERIT
Constant: GLUT_CURSOR_NONE
Constant: GLUT_CURSOR_FULL_CROSSHAIR
Function: glut-warp-pointer x y

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.2 GLUT overlay

Function: glut-establish-overlay
Function: glut-remove-overlay
Function: glut-use-layer layer
Function: glut-post-overlay-redisplay
Function: glut-post-window-overlay-redisplay win
Function: glut-show-overlay
Function: glut-hide-overlay

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.3 GLUT menu API

Function: glut-create-menu callback
Function: glut-destroy-menu menu
Function: glut-get-emnu
Function: glut-set-menu menu
Function: glut-add-menu-entry label value
Function: glut-add-sub-menu label submenu
Function: glut-change-to-menu-entry item label value
Function: glut-change-to-sub-menu item label submenu
Function: glut-remove-menu-item item
Function: gult-attach-menu button
Function: glut-detach-menu button

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.4 GLUT callbacks

Function: glut-display-func fn
Function: glut-reshape-func fn
Function: glut-keyboard-func fn
Constant: GLUT_KEY_F1
Constant: GLUT_KEY_F2
Constant: GLUT_KEY_F3
Constant: GLUT_KEY_F4
Constant: GLUT_KEY_F5
Constant: GLUT_KEY_F6
Constant: GLUT_KEY_F7
Constant: GLUT_KEY_F8
Constant: GLUT_KEY_F9
Constant: GLUT_KEY_F10
Constant: GLUT_KEY_F11
Constant: GLUT_KEY_F12
Constant: GLUT_KEY_LEFT
Constant: GLUT_KEY_UP
Constant: GLUT_KEY_RIGHT
Constant: GLUT_KEY_DOWN
Constant: GLUT_KEY_PAGE_UP
Constant: GLUT_KEY_PAGE_DOWN
Constant: GLUT_KEY_HOME
Constant: GLUT_KEY_END
Constant: GLUT_KEY_INSERT
Function: glut-mouse-func fn
Constant: GLUT_LEFT_BUTTON
Constant: GLUT_MIDDLE_BUTTON
Constant: GLUT_RIGHT_BUTTON
Constant: GLUT_DOWN
Constant: GLUT_UP
Function: glut-motion-func fn
Function: glut-passive-motion-func fn
Function: glut-entry-func fn
Constant: GLUT_LEFT
Constant: GLUT_ENTERED
Function: glut-visibility-func fn
Constant: GLUT_NOT_VISIBLE
Constant: GLUT_VISIBLE
Function: glut-idle-func fn
Function: glut-timer-func millis fn value
Function: glut-menu-state-func fn
Function: glut-special-func fn
Function: glut-spaceball-motion-func fn
Function: glut-spaceball-rotate-func fn
Function: glut-spaceball-button-func fn
Function: glut-button-box-func fn
Function: glut-dials-func fn
Function: glut-tablet-motion-func fn
Function: glut-tablet-button-func fn
Function: glut-menu-status-func fn
Function: glut-overlay-dislay-func fn
Function: glut-window-status-func fn
Function: glut-keyboard-up-func fn
Function: glut-special-up-func fn
Function: glut-joystick-func fn interval

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.5 GLUT colormap

Function: glut-set-color index r g b
Function: glut-get-color index component
Constant: GLUT_RED
Constant: GLUT_GREEN
Constant: GLUT_BLUE
Function: glut-copy-colormap win

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.6 GLUT state retrieval

Function: glut-get type
Constant: GLUT_WINDOW_X
Constant: GLUT_WINDOW_Y
Constant: GLUT_WINDOW_WIDTH
Constant: GLUT_WINDOW_HEIGHT
Constant: GLUT_WINDOW_BUFFER_SIZE
Constant: GLUT_WINDOW_STENCIL_SIZE
Constant: GLUT_WINDOW_DEPTH_SIZE
Constant: GLUT_WINDOW_RED_SIZE
Constant: GLUT_WINDOW_GREEN_SIZE
Constant: GLUT_WINDOW_BLUE_SIZE
Constant: GLUT_WINDOW_ALPHA_SIZE
Constant: GLUT_WINDOW_ACCUM_RED_SIZE
Constant: GLUT_WINDOW_ACCUM_GREEN_SIZE
Constant: GLUT_WINDOW_ACCUM_BLUE_SIZE
Constant: GLUT_WINDOW_ACCUM_ALPHA_SIZE
Constant: GLUT_WINDOW_DOUBLEBUFFER
Constant: GLUT_WINDOW_RGBA
Constant: GLUT_WINDOW_PARENT
Constant: GLUT_WINDOW_NUM_CHILDREN
Constant: GLUT_WINDOW_COLORMAP_SIZE
Constant: GLUT_WINDOW_NUM_SAMPLES
Constant: GLUT_WINDOW_STEREO
Constant: GLUT_WINDOW_CURSOR
Constant: GLUT_SCREEN_WIDTH
Constant: GLUT_SCREEN_HEIGHT
Constant: GLUT_SCREEN_WIDTH_MM
Constant: GLUT_SCREEN_HEIGHT_MM
Constant: GLUT_MENU_NUM_ITEMS
Constant: GLUT_DISPLAY_MODE_POSSIBLE
Constant: GLUT_INIT_WINDOW_X
Constant: GLUT_INIT_WINDOW_Y
Constant: GLUT_INIT_WINDOW_WIDTH
Constant: GLUT_INIT_WINDOW_HEIGHT
Constant: GLUT_INIT_DISPLAY_MODE
Constant: GLUT_ELAPSED_TIME
Constant: GLUT_WINDOW_FORMAT_ID
Function: glut-device-get type
Constant: GLUT_HAS_KEYBOARD
Constant: GLUT_HAS_MOUSE
Constant: GLUT_HAS_SPACEBALL
Constant: GLUT_HAS_DIAL_AND_BUTTON_BOX
Constant: GLUT_HAS_TABLET
Constant: GLUT_NUM_MOUSE_BUTTONS
Constant: GLUT_NUM_SPACEBALL_BUTTONS
Constant: GLUT_NUM_BUTTON_BOX_BUTTONS
Constant: GLUT_NUM_DIALS
Constant: GLUT_NUM_TABLET_BUTTONS
Constant: GLUT_DEVICE_IGNORE_KEY_REPEAT
Constant: GLUT_DEVICE_KEY_REPEAT
Constant: GLUT_HAS_JOYSTICK
Constant: GLUT_OWNS_JOYSTICK
Constant: GLUT_JOYSTICK_BUTTONS
Constant: GLUT_JOYSTICK_AXES
Constant: GLUT_JOYSTICK_POLL_RATE
Function: glut-extension-supported name
Function: glut-get-modifiers
Constant: GLUT_ACTIVE_SHIFT
Constant: GLUT_ACTIVE_CTRL
Constant: GLUT_ACTIVE_ALT
Function: glut-layer-get type
Constant: GLUT_OVERLAY_POSSIBLE
Constant: GLUT_LAYER_IN_USE
Constant: GLUT_HAS_OVERLAY
Constant: GLUT_TRANSPARENT_INDEX
Constant: GLUT_NORMAL_DAMAGED
Constant: GLUT_OVERLAY_DAMAGED

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.7 GLUT font

Class: <glut-font>
Function: glut-bitmap-character font character
Function: glut-bitmap-width font character
Function: glut-stroke-character font character
Function: glut-stroke-width font character
Function: glut-bitmap-length font string
Function: glut-stroke-length font string

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

5.8 GLUT pre-built models

Function: glut-wire-sphere radius slices stacks
Function: glut-solid-sphere radius slices stacks
Function: glut-wire-cone radius height slices stacks
Function: glut-solid-cone radius height slices stacks
Function: glut-wire-cube size
Function: glut-solid-cube size
Function: glut-wire-torus inner outer sides rings
Function: glut-solid-torus inner outer sides rings
Function: glut-wire-dodecahedron
Function: glut-solid-dodecahedron
Function: glut-wire-teapot size
Function: glut-soild-teapot size
Function: glut-wire-octahedron
Function: glut-solid-octahedron
Function: glut-wire-tetrahedron
Function: glut-solid-tetrahedron
Function: glut-wire-icosahedron
Function: glut-solid-icosahedron

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6. Vectors and matrices

Module: gl.math3d

The module provides vector and matrix operations useful for 3D computer graphics.

Actually this module itself doesn’t depend on GL; you can use this module alone to do matrix calculations. However, the structure of objects are designed so that they can be passed directly to Gauche-gl functions, reducing the overhead of type conversions.

The purpose of this module is to provide reasonable performance. So the operations are fixed to 3D homogeneous coordinates, i.e. a vector is 4-element column vector, and a matrix is 4x4 square matrix. If you want more flexibility, <array> class in gauche.array provides much more generic structures, trading performance.

Elements of vectors and matrices are represented in float internally. When you retrieve each element individually, it is converted to double, so you might see some precision errors. There are lots of operations directly manipulate group of elements without retrieving each element to Scheme world, avoiding overhead of conversion.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.1 Vectors and points

Class: <vector4f>
Class: <point4f>

4x1 column vectors. Vector4f is intended to be used to represent a vector, and point4f is to a point, but as far as OpenGL concerns, both are just an array of four floats, x, y, z and w.

These classes inherit <sequence> and <collection> classes. So if you import gauche.sequence module, you can use generic function such as ref and (setter ref) to get/set individual elements. The generic version of map and for-each can also be used on the vector4f and point4f instances.

Aside from the type, the only difference is that the default value of w component— it’s 0.0 for vectors, and 1.0 for points. So usual transformation produces expected results; for example point plus vector becomes point, vector plus vector becomes vector, and translating point changes its coordinates but translating vectors doesn’t, and so on. However, you can set w component to other value to do nontrivial operations.

Reader syntax: #,(vector4f x y z w)
Reader syntax: #,(point4f x y z w)

These SRFI-10 syntax can be used to denote literal <vector4f> and <point4f> instance, respectively.

The write methods are defined so that the instance is written out in this form, and can be read back later.

Function: vector4f? obj
Function: point4f? obj

Returns true iff obj is vector4f and point4f, respectively.

Function: vector4f x y z &optional (w 0.0)
Function: point4f x y z &optional (w 1.0)

Creates a vector4f and point4f instance with given values, respectively.

Function: make-vector4f
Function: make-point4f

Another way to create a vector4f and a point4f. The first returns #,(vector4f 0.0 0.0 0.0 0.0), and the latter returns #,(point4f 0.0 0.0 0.0 1.0).

Function: list->vector4f l
Function: list->point4f l

Convert a list of three or four real numbers to a vector4f and a point4f, respectively. If l is not a list of three or four real numbers, an error is signalled.

 
(list->vector4f l)
  ≡ (apply vector4f l)
  ≡ (coerce-to <vector4f> l)
Function: vector4f->list v
Function: point4f->list p

Convert a vector4f and a point4f to a list of four real numbers, respectively.

 
(vector4f->list v)
  ≡ (coerce-to <list> v)
  ≡ (map (cut ref v <>) (iota 4))
Function: f32vector->vector4f v &optional start
Function: f32vector->point4f v &optional start

Creates a vector4f or a point4f, initializing by the elements of f32vector v. V must be longer than 4, and the first four elements are used to initialize the created vector or point.

If optional start argument is given, it specifies an index of v from which the initial values are taken; that is, start, start+1, start+2 and start+3-th elements are used to create a vector or a point. This allows to create vectors from plain float array:

 
(map (lambda (off) (f32vector->vector4f vec (* off 4)))
     (iota (/ (size-of vec) 4)))

The conversion can be done using coerce-to, as well.

 
(f32vector->vector4f vec)
  ≡ (coerce-to <vector4f> vec)
Function: vector4f->f32vector v
Function: point4f->f32vector p

Convert a vector4f v or a point4f p to four-element f32vector.

 
(vector4f->f32vector v)
 ≡ (coerce-to <f32vector> v)
Function: vector4f-copy v
Function: point4f-copy p

Returns a new copy of vector4f v or point4f p, respectively.

Function: vector4f-copy! dstv srcv
Function: point4f-copy! dstp srcp

Destructively sets the content of srcv or srcp to dstv or dstp, respectively.

Function: vector4f-set! v k value
Function: point4f-set! p k value

Sets a real number value to k-th element of a vector4f v or a point4f p.

 
(vector4f-set! v k value)
  ≡ (set! (ref v k) value)
Function: vector4f-ref v k &optional fallback
Function: point4f-ref p k &optional fallback

Gets a value of k-th element of a vector4f v or a point4f p. If k is out of range, an error is signalled, unless fallback is provided, in such a case fallback is returned.

 
(vector4f-ref v k)
  ≡ (ref v k)
Function: vector4f-dot x y

Returns a dot product of two vector4fs, x and y.

Function: vector4f-cross x y

Returns a cross product of two vector4fs, x and y. (w element is ignored).

Function: vector4f-norm v

Returns the norm (length) of the vector v.

Function: vector4f-normalize x
Function: vector4f-normalize! x

Returns a normalized vector of vector4f x. Vector4f-normalize allocates a new vector, while vector4f-normalize! modifies the original vector.

As a special case, if x is a vector of length 0, a vector of length 0 is returned.

Function: vector4f-add x y
Function: vector4f-sub x y
Function: vector4f-add! x y
Function: vector4f-sub! x y

Returns a sum of two vector4fs, x and y. The destructive version modifies x.

Function: point4f-add x y
Function: point4f-add! x y

Adds a point4f x and a vector4f y, and returns a translated point. The destructive version modifies x.

Function: point4f-sub x y

Subtracts either a vector4f or a point4f y from a point4f x. If y is a vector4f, returns a translated point. If y is a point4f, returns a vector4f from point y to point x.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.2 Vector arrays and point arrays

Class: <vector4f-array>
Class: <point4f-array>

Represents an array of vector4fs and point4fs. This is an efficient way to keep an array of vectors or points, for the elements are packed in a simple float array. They are especially useful to work with GL’s vertex array feature. gl-vertex-pointer can take <point4f-array>, and gl-normal-pointer can take <vector4f-array>.

It is also possible to "view" a plain f32vector as <vector4f-array> or <point4f-array> without copying its content, by f32vector->vector4f-array/shared and f32vector->point4f-array/shared. Combined to read-block!, you can do efficient binary I/O of vertex arrays, for example.

Inherits <sequence> and <collection>. When viewed as a sequence or a collection, they behaves like sequence or collection of vector4f and point4f objects, respectively.

Function: make-vector4f-array len &optional init-vector
Function: make-point4f-array len &optional init-point

Creates a vector4f-array or point4f-array with len elements. Each element is initialized by a vector4f init-vector or a point4f init-point if provided.

Function: vector4f-array? obj
Function: point4f-array? obj

Returns true iff obj is a vector4f-array or a point4f-array, respectively.

Function: vector4f-array-length array
Function: point4f-array-length array

Returns length (number of vectors/points) in array array.

Reader syntax: #,(vector4f-array len elt …)
Reader syntax: #,(point4f-array len elt …)

Vector4f-array and point4f-array have external representation using this SRFI-10 syntax. Len is a length of array, and each elt is a list of four floats representing each element of the array.

 
(f32vector->vector4f-array #f32(1 2 3 4 6 7 4 3))
  ⇒ #,(vector4f-array 2 (1 2 3 4) (6 7 4 3) )
Function: list->vector4f-array list
Function: list->point4f-array list

From given list of vector4fs or point4fs, creates and returns a vector4f-array or point4f-array, respectively.

Function: f32vector->vector4f-array v
Function: f32vector->point4f-array v

Converts f32vector v to a vector4f-array or a point4f-array. The length of v must be multiple of four. The content of v is copied.

 
(f32vector->vector4f-array v)
  ≡ (coerce-to <vector4f-array> v)
Function: f32vector->vector4f-array/shared v
Function: f32vector->point4f-array/shared v

Like above, but the content of v is shared by the result array, instead of being copied. So the modification of result array will be visible from original f32vector v and vice versa. It will allow efficient handling of large vertex arrays.

Function: vector4f-array->f32vector array
Function: point4f-array->f32vector array

Converts a vector4f-array or a point4f-array array to a f32vector.

 
(vector4f-array->f32vector array)
  ≡ (coerce-to <f32vector> array)
Function: vector4f-array-set! array i vector
Function: point4f-array-set! array i point

Sets a vector4f vector or a point4f point to i-th element of vector4f-array or point4f-array array, respectively.

 
(vector4f-array-set! array i vector)
  ≡ (set! (ref array i) vector)
Function: vector4f-array-ref array i &optional fallback
Function: point4f-array-ref array i &optional fallback

Returns a vector4f or a point4f which is the i-th element of array array, respectively. If k is out of range, an error is signalled, unless fallback is provided, in such a case fallback is returned.

 
(vector4f-array-ref array i)
  ≡ (ref array i)

(ref #,(vector4f-array 2 (1 2 3 4) (6 7 4 3))  1)
  ⇒ #,(vector4f 6 7 4 3)
Function: vector4f-array-ref/shared array i &optional fallback
Function: point4f-array-ref/shared array i &optional fallback

Like above, but the returned vector4f or point4f shares the storage with the original array. Thus the modification of the result vector or point will be visible from array, and vice versa.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.3 Matrices

Class: <matrix4f>

4x4 matrix. Internally it is represented as an array of 16 floats, stored in column-major order. (It is the same order OpenGL uses, so it can be passed to OpenGL calls without overhead).

Inherits <sequence> and <collection>. When a matrix4f is treated as a sequence, it works as if it is a single sequence of floats in column-major order.

Function: make-matrix4f &optional init

Returns a new matrix4f instance. If init is omitted, the matrix is a unit matrix. Otherwise, init must be a f32vector of length 16, and the elements in the matrix is initialized by ones in f32vector.

 
;; Creates a matrix like this:
;;    1 2 3 4
;;    0 1 0 5
;;    0 0 1 6
;;    0 0 0 1

(make-matrix4f '#f32vector(1 0 0 0
                           2 1 0 0
                           3 0 1 0
                           4 5 6 1))
Function: matrix4f m00 m10 m20 m30 m01 m11 m21 m31 m02 m12 m22 m32 m03 m13 m23 m33

Creates a new matrix4f instance with give values.

Function: matrix4f? obj

Returns true iff obj is a matrix4f.

Reader syntax: #,(matrix4f elt …)

A matrix4f is represented extrenally using SRFI-10 syntax. The elements are listed in column-major order.

Function: list->matrix4f l
Function: matrix4f->list m

Converts between list of 16 real numbers and matrix4f.

Function: f32vector->matrix4f v &optional start

Creates a new matrix4f and initializes it with 16 elements in f32vector v. If optional start is given, it specifies the start offset in vector v to be used as initial values. The f32vector v must have enough length.

Function: f32vector->matrix4f! m v &optional (start 0)

Extract 16 flonums in the f32vector v starting from the index start, and fill the matrix4f m with them. The f32vector v must have enough length.

Function: matrix4f->f32vector m

Returns a new f32vector that has elements from matrix4f m.

Function: matrix4f-copy m

Returns a new copy of m.

Function: matrix4f-copy! dstm srcm

Copies contents of srcm to dstm.

Function: matrix4f-set! m i value

Sets a real number value to i-th element of matrix m. Since the matrix is laid out in column-major order, the one-dimensional index m{i} and two-dimensional index m(i,j) corresponds as follows:

 
  m(0,0) = m{0}   m(0,1) = m{4}   m(0,2) = m{8}   m(0,3) = m{12}
  m(1,0) = m{1}   m(1,1) = m{5}   m(1,2) = m{9}   m(1,3) = m{13}
  m(2,0) = m{2}   m(2,1) = m{6}   m(2,2) = m{10}  m(2,3) = m{14}
  m(3,0) = m{3}   m(3,1) = m{7}   m(3,2) = m{11}  m(3,3) = m{15}
Function: matrix4f-ref m i &optional fallback

Returns the i-th element of matrix m. If i is out of range, an error is signalled, unless fallback is provided, in such a case fallback is returned.

Function: matrix4f-set2! m i j value

Sets value to (i, j) element of matrix m.

Function: matrix4f-ref2 m i j

Returns the (i, j) element of matrix m.

Function: matrix4f-row m i
Function: matrix4f-column m i
Function: matrix4f-column/shared m i

Returns i-th row vector or i-th column vector of matrix m, as a vector4f instance.

Furthermore, the returned vector from matrix4f-column/shared shares the storage with m.

Function: matrix4f-mul m obj

Obj may be a scalar (real number), a vector4f, a point4f, or a matrix4f. Returns m x obj.

Function: matrix4f-mul! m obj

Obj may be a scalar or a matrix4f. Matrix m is multiplied by obj, and the result is set to m destructively.

Function: matrix4f-transpose m
Function: matrix4f-transpose! m

Returns a transposed matrix of m. The destructive version modifies m.

Function: matrix4f-determinant m

Returns a determinant of m.

Function: matrix4f-inverse m &optional (error-on-singular? #t)
Function: matrix4f-inverse! m &optional (error-on-singular? #t)

Returns a inverse matrix of m. The destructive version modifies m. If given m is a singular matrix, an error is signalled by default. However, if #f is given to the optional error-on-singular? argument, #f is returned in such a case.

Function: translation->matrix4f translation-vector
Function: translation->matrix4f! m translation-vector

Returns a matrix which represents a translation by translation-vector, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in translation-vector is used. The destructive version updates m.

Function: rotation->matrix4f axis angle
Function: rotation->matrix4f! m axis angle

Returns a matrix which represents a rotation around axis by angle radian. Axis must be a vector4f or a f32vector of length 3 or 4, and must be normalized. The result is undefined if anormalized vector is passed as axis. The destructive version updates m.

Function: scale->matrix4f scale-vector
Function: scale->matrix4f! m scale-vector

Returns a matrix which represents a scale by scale-vector, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in scale-vector is used. Each element of scale-vector represents the scale factor along x, y, and z axis. The destructive version updates m.

Function: trs->matrix4f translation rotation-axis rotation-angle scale
Function: trs->matrix4f! m translation rotation-axis rotation-angle scale

This combines above three procedure. Returns a matrix that represents translation, rotation and scale, specified by translation, rotation-axis, rotation-angle and scale. The destructive version updates m.

If T, R and S, are the matrices that represent translation, rotation and scale, respectively, then these procedures effectively calculates a matrix TRS.

Function: tqs->matrix4f translation rotation-quat scale
Function: tqs->matrix4f! m translation rotation-quat scale

A variation of trs->matrix4f. Instead of axis and angle, rotation is represented by a quaternion rotation-quat. See section Quaternions, for more details about quaternions.

Function: euler-angle->matrix4f xangle yangle zangle &optional order
Function: euler-angle->matrix4f! m xangle yangle zangle &optional order

Returns a matrix that represents rotation along x, y and z axis by xangle, yangle, and zangle, respectively.

The order of rotation can be specified by the optional argument order, which may be one of the symbols xyz, xzy, yzx, yxz, zxy, or zyx. For example, symbol xyz means rotation around x-axis, then y-axis, then z-axis. Thus, if we write each rotation as Rx, Ry, and Rz, the returned matrix is RzRyRx. The default value of order is xyz.

The desrtuctive version modifies m.

Function: matrix4f-decompose m

Matrix m is a composition of translation, rotation, shear and scale. Suppose transformation is applied in the reverse order. This procedure decompose m into each individual transformation.

Returns five values.

  • A flag to indicate if m is non-singular.
  • A translation vector t, in vector4f. The first three elements of t are for x, y, and z translations.
  • A rotation matrix r, in matrix4f. This is an orthogonal matrix represents rotation component.
  • A shear vector h, in vector4f. The first three elements of h are for xy, xz and yz shear factors.
  • A scale vector s, in vector4f. The first three elements of s are fof x, y, and z scale factors.

If m is singular, certain part of rotation matrix can’t be recovered. In such a case, r becomes also singular matrix.

If the original matrix has negative scale factor in any of x, y, or z scale, the decomposed scale factor will have all negative components. The signs of elements of r are adjusted accordingly.

Due to the precision errors, you will see small values appear in shear component even m is pure TRS matrix.

Function: matrix4f-decompose! m t r h s

Linear update version of matrix4f-decompose. The result vectors and matrices are stored in t, r, h and s. The return value is a boolean value indicates m is non-singular or not.

Function: matrix4f->translation m

Extract the translation component from the given TRS matrix m and returns it as a <vector4f>.

Function: matrix4f->translation! v m

Extract the translation component from the given TRS matrix m and stores the result into a <vector4f> v. Returns v.

Function: matrix4f->rotation m

From given orthogonal matrix m, extracts and returns and rotation axis and angle, as a vector4f and a real number.

Function: matrix4f->rotation! v m

Same as above, except the storage of vector4f v is reused to store the result axis.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

6.4 Quaternions

Class: <quatf>

Quaternions. Internally quaternions are represented as just an array of four floats; the first three are the vector component and the last is the scalar component.

Inherits <sequence> and <collection>. When viewed as sequence, it is just like a vector of four floats.

Function: quatf? obj

Returns true iff obj is a quaternion.

Reader syntax: #,(quatf x y z w)

External representation of quaternion xi+yj+zk+w.

Function: make-quatf &optional axis (angle 0)

Returns a new unit quaternion that represents a rotation around vector axis by angle radians. Axis can be a vector4f, a point4f or a f32vector (only first three component is used). Axis must be a unit vector; if axis is anormalized, the result is undefined.

If both axis and angle is omitted, #,(quatf 0 0 0 1) is returned.

Function: quatf x y z w

Returns a new quaternion whose elements are initialized by x, y, z, w.

Function: list->quatf l
Function: quatf->list q

Converts between a list of four real numbers and a quaternion.

Function: f32vector->quatf x &optional start

Returns a new quaternion whose elements are initialized by the first four elements of f32vector x. If start is given, the initial value is taken starting from start-th index in x.

Function: quatf->f32vector q

Returns a new f32vector whose contents is the same as a quaternion q.

Function: quatf-copy q

Returns a fresh copy of a quaternion q.

Function: quatf-copy! dstq srcq

Copies contents of a quaternion srcq to a quaternion dstq.

Function: rotation->quatf! quat axis angle

Sets a quaternion quat so that it represents a rotation around a unit vector axis by angle angle radians. Axis can be a vector4f, a point4f or a f32vector (only first three component is used).

Function: vectors->quatf v w
Function: vectors->quatf! q v w

Given two unit vectors v and w, calculates and returns a quaternion that represents a rotation from v to w. The destructive version vectors->quatf! modifies q.

Function: axes->quatf v1 v2 w1 w2
Function: axes->quatf! q v1 v2 w1 w2

The arguments must be all unit vectors, v1 and v2 must be perpendicular, and also w1 and w2 must be perpendicular.

Calculates and returns a quaternion that represents a rotation which transforms v1 to w1, and v2 to w2, respectively. The destructive version stores the result into q.

Function: quatf-add p q
Function: quatf-add! p q
Function: quatf-sub p q
Function: quatf-sub! p q

Addition and subtraction of quaternions. The destructive version modifies the first argument.

Function: quatf-scale q s
Function: quatf-scale! q s

Multiplies a quaternion q by a scalar value s. The destructive version modifies q.

Function: quatf-mul p q
Function: quatf-mul! p q

Multiply two quaternions p and q. The destructive version modifies p as well.

Function: quatf-conjugate p
Function: quatf-conjugate! q p

Returns a conjugate of a quaternion p. The destructive version modifies q as well.

Function: quatf-transform q p

Transforms a vector or a point p by quaternion q, that is, returns qpq*, where q* is a conjugate of q.

This procedure assumes q is normalized.

P can be a vector4f, a point4f or a f32vector (only first three elements are used). Returns the same type of object as p.

Function: quatf-norm q

Returns norm of q.

Function: quatf-normalize q
Function: quatf-normalize! q

Returns normalized quaternion of q. The destructive version modifies q.

Function: quatf->matrix4f q
Function: quatf->matrix4f! m q

Returns a matrix that represents a rotation specified by a unit quaternion q. The behavior is undefined if q is not normalized. The destructive version modifies m.

Function: matrix4f->quatf m
Function: matrix4f->quatf! q m

Extracts the rotation component of a matrix m and returns a quaterion that represents the rotation. Matrix4f->quatf! also uses q as the storage to store the result.

Function: quatf-slerp p q t
Function: quatf-slerp! r p q t

Returns a quaternion that interpolates between two unit quaternions p and q, by a scalar value t. The destructive version modifies r.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7. Simple utilities

This chapter covers gl.simple.* modules. They are provided for the convenience of those who wants quick experiment with Gauche-gl alone, without a hassle to install a bunch of other modules. Their features are pretty limited, but you may find them handy when you need to hack up some throwaway script that need to show some graphics on the screen.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.1 Simple image handling

Module: gl.simple.image

OpenGL doesn’t provide any means of reading/writing image data, and it should be covered by other Gauche extensions. However, it is sometimes handy to have simple means to handle external image data, so that you can do some experiment with Gauche-gl alone.

This module provides a minimal support to handle external image data, so that one can do some experiment in Gauche-gl alone.

The functionality might be extended over time, but this is never intended to be a full featured image library. A separate Gauche extension should be a better place to have it.

Currently, only reading from 8bit SGI image file is supported. It is written in pure Scheme, so don’t expect the performance.

Function: read-sgi-image filename
Function: read-sgi-image-from-port port

Reads an image data in SGI format from the named file or the input port, respectively.

Only 8bit-per-channel, direct color mode is supported.

Returns four values: the image’s width in pixels, its height in pixels, number of channels (e.g. 1 for grayscale, 3 for RGB, 4 for RGBA), and the image data in u8vector. The pixel data is packed, i.e. there’s no padding between each pixel nor each scanline.

Warning: be careful to call this function interactively. The image data vector is usually huge, and you have to wait long for the REPL to display the entire result.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

7.2 Simple viewer

Module: gl.simple.viewer

This module packages common operations to allow users to view 3D objects, controlling the camera by the mouse, and have some interactions with the keyboard.

A typical way of using the viewer is like the following:

 
(use gl)
(use gl.glut)
(use gl.simple.viewer)

(define (main args)
  (glut-init args)
  (simple-viewer-display <your-display-thunk>)
  (simple-viewer-set-key! <key> <handler> ...)
  (simple-viewer-window <name> :title <title> ...)
  (simple-viewer-run) ; loop forever.  type ESC to exit.
  0)

The viewer handles mouse drag (to move the camera), and also draws reference grid and axes by default for your convenience. You have to provide a thunk, which must draw your 3D object.

For the keyboard events, you can use a convenient API to associate handler to the key (character for normal keys, and constants like GL_LEFT_ARROW for special keys).

The reshape event is handled implicitly, though you can override it.

If you call simple-viewer-run, it enters the event loop and never returns. If you wish to keep REPL and/or other parts of your application run concurrently, the convenient way is to run simple-viewer-run in a separate thread.

 
(use gauche.threads)

(define (run-viewer)
  (thread-start! (make-thread simple-viewer-run #f)))

See also the code under ‘examples/simple’ directory of the source tree for more examples.

Function: simple-viewer-window name &key title mode parent width height x y

Creates a new GL window with name, which must be a symbol to identify the window later in the simple viewer framework. The window won’t be shown until simple-viewer-run is called.

Each window

Function: simple-viewer-display &optional display-thunk

Gets/sets the display thunk, which is called every time the GL window is redrawn. You can change the display thunk any time, even while the viewer thread is running.

If no argument is given, returns the current display thunk. It can be #f if no display thunk is set.

When the display thunk is called, the matrix mode is MODELVIEW and the camera transformation is already applied. The grid and axes are also drawn, unless you’ve customized them.

In the display thunk you can just write your model in the world coordinate system. It is guaranteed that the current color is white and line width is 1.0, but the states of other GL contexts are undefined, so you have to set them explicitly.

Function: simple-viewer-reshape &optional reshape-proc

Gets/sets the reshape procedure which is called every time the GL window configuration is changed. (It is also called when the GL window is shown first time.) You can change the reshape procedure any time, even while the viewer thread is running.

If no argument is given, returns the current reshape proc.

A reshape procedure is called with two arguments, the width and the height (in pixels) of the new GL window configuration. By default, gl.simple.viewer sets a procedure that changes viewport and projection matrix apopropriately; you need to change it only if you want a different behavior.

Function: simple-viewer-grid &optional grid-proc
Function: simple-viewer-axis &optional axis-proc

Gets/sets a procedure to draw a grid and axes. You can change these procedures any time, even while the viewer thread is running.

The grid-proc and axis-proc are called with no arguments every time the GL window is redrawn, before the display thunk is invoked. The matrix mode is MODELVIEW, the camera transformation is already applied, and lighting is disabled.

The default grid proc draws 10x10 grid on X-Z plane centered at the origin. The default axis proc draws a red line from origin to +X, a green line from origin to +Y, and a blue line from origin to +Z.

You can pass #f to disable grid and/or axis display.

If no argument is given, returns the current grid/axis proc, respectively.

Function: simple-viewer-set-key! key handler …

Even number of arguments must be given; the first of every two specifies the key, and the next one specifies the action when the key is pressed.


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A. º÷°ú


[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.1 ¼ê³¤­¤È¹½Ê¸º÷°ú

Jump to:   A   E   F   G   L   M   P   Q   R   S   T   V  
Index Entry Section

A
axes->quatf6.4 Quaternions
axes->quatf!6.4 Quaternions

E
euler-angle->matrix4f6.3 Matrices
euler-angle->matrix4f!6.3 Matrices

F
f32vector->matrix4f6.3 Matrices
f32vector->matrix4f!6.3 Matrices
f32vector->point4f6.1 Vectors and points
f32vector->point4f-array6.2 Vector arrays and point arrays
f32vector->point4f-array/shared6.2 Vector arrays and point arrays
f32vector->quatf6.4 Quaternions
f32vector->vector4f6.1 Vectors and points
f32vector->vector4f-array6.2 Vector arrays and point arrays
f32vector->vector4f-array/shared6.2 Vector arrays and point arrays

G
gl-accumTesting and operating on fragments
gl-active-texture-arbMultitexturing
gl-alpha-funcTesting and operating on fragments
gl-are-textures-resident!Texture objects
gl-array-element4.8 Vertex arrays
gl-attach-object-arbShader objects
gl-begin4.3 Drawing functions
gl-begin*4.3 Drawing functions
gl-bind-attrib-location-arbSpecifying vertex attributes
gl-bind-program-arbVertex and fragment programs
gl-bind-textureTexture objects
gl-bitmapPixel operations
gl-blend-color4.5 GL states for drawing
gl-blend-equation4.5 GL states for drawing
gl-blend-func4.5 GL states for drawing
gl-boolean-vectorGL boolean vectors
gl-boolean-vector-copyGL boolean vectors
gl-boolean-vector-fill!GL boolean vectors
gl-boolean-vector-lengthGL boolean vectors
gl-boolean-vector-refGL boolean vectors
gl-boolean-vector-set!GL boolean vectors
gl-boolean-vector?GL boolean vectors
gl-call-list4.7 Display lists
gl-call-lists4.7 Display lists
gl-call-lists4.7 Display lists
gl-call-lists4.7 Display lists
gl-clearClearing buffers
gl-clear-accumClearing buffers
gl-clear-colorClearing buffers
gl-clear-depthClearing buffers
gl-clear-indexClearing buffers
gl-clear-stencilClearing buffers
gl-client-active-texture-arbMultitexturing
gl-clip-plane4.5 GL states for drawing
gl-color4.3 Drawing functions
gl-color4.3 Drawing functions
gl-color-maskMasking buffers
gl-color-material4.9 Lighting
gl-color-pointer4.8 Vertex arrays
gl-color-sub-tableColor tables
gl-color-tableColor tables
gl-color-table-parameterColor tables
gl-compile-shader-arbShader objects
gl-convolution-filter-1dConvolutions
gl-convolution-filter-2dConvolutions
gl-convolution-parameterConvolutions
gl-copy-color-sub-tableColor tables
gl-copy-color-tableColor tables
gl-copy-convolution-filter-1dConvolutions
gl-copy-convolution-filter-2dConvolutions
gl-copy-pixelsPixel operations
gl-copy-tex-image-1dDefining textures
gl-copy-tex-image-2dDefining textures
gl-copy-tex-sub-image-1dDefining textures
gl-copy-tex-sub-image-2dDefining textures
gl-copy-tex-sub-image-3dDefining textures
gl-create-program-object-arbShader objects
gl-create-shader-object-arbShader objects
gl-cull-face4.5 GL states for drawing
gl-delete-lists4.7 Display lists
gl-delete-object-arbShader objects
gl-delete-programs-arbVertex and fragment programs
gl-delete-texturesTexture objects
gl-depth-funcTesting and operating on fragments
gl-depth-maskMasking buffers
gl-depth-rangeTesting and operating on fragments
gl-detach-object-arbShader objects
gl-disableCapabilities
gl-disable-client-stateCapabilities
gl-disable-vertex-attrib-array-arbSpecifying vertex attributes
gl-draw-arrays4.8 Vertex arrays
gl-draw-bufferSelecting color buffers
gl-draw-elements4.8 Vertex arrays
gl-draw-pixelsPixel operations
gl-draw-range-elements4.8 Vertex arrays
gl-edge-flag4.5 GL states for drawing
gl-edge-flag-pointer4.8 Vertex arrays
gl-enableCapabilities
gl-enable-client-stateCapabilities
gl-enable-vertex-attrib-array-arbSpecifying vertex attributes
gl-end4.3 Drawing functions
gl-end-list4.7 Display lists
gl-extension-available?4.2 GL feature checking
gl-feedback-buffer4.13 Selection and feedback
gl-finish4.3 Drawing functions
gl-flush4.3 Drawing functions
gl-fog4.5 GL states for drawing
gl-front-face4.5 GL states for drawing
gl-frustum4.6 Transformation
gl-gen-lists4.7 Display lists
gl-gen-programs-arbVertex and fragment programs
gl-gen-texturesTexture objects
gl-get-active-attrib-arbSpecifying vertex attributes
gl-get-active-uniform-arbSpecifying uniform variables
gl-get-attached-objects-arbShader objects
gl-get-attrib-location-arbSpecifying vertex attributes
gl-get-booleanState values
gl-get-boolean!State values
gl-get-clip-plane4.5 GL states for drawing
gl-get-color-table!Color tables
gl-get-doubleState values
gl-get-double!State values
gl-get-errorOther queries
gl-get-floatState values
gl-get-float!State values
gl-get-handle-arbShader objects
gl-get-histogramHistogram
gl-get-histogram-parameterHistogram
gl-get-info-log-arbShader objects
gl-get-integerState values
gl-get-integer!State values
gl-get-light4.9 Lighting
gl-get-material4.9 Lighting
gl-get-minmaxMinmax
gl-get-minmax-parameterMinmax
gl-get-object-parameter-arbShader objects
gl-get-pixel-mapPixel operations
gl-get-pixel-map!Pixel operations
gl-get-shader-source-arbShader objects
gl-get-stringOther queries
gl-get-tex-level-parameterTexture parameters
gl-get-tex-parameterTexture parameters
gl-get-uniform-location-arbSpecifying uniform variables
gl-hintHints
gl-histogramHistogram
gl-index-maskMasking buffers
gl-index-pointer4.8 Vertex arrays
gl-init-names4.13 Selection and feedback
gl-interleaved-arrays4.8 Vertex arrays
gl-is-enabledCapabilities
gl-is-list4.7 Display lists
gl-is-program-arbVertex and fragment programs
gl-is-textureTexture objects
gl-light4.9 Lighting
gl-light-model4.9 Lighting
gl-line-stipple4.5 GL states for drawing
gl-line-width4.5 GL states for drawing
gl-link-program-arbShader objects
gl-list-base4.7 Display lists
gl-load-identity4.6 Transformation
gl-load-matrix4.6 Transformation
gl-load-name4.13 Selection and feedback
gl-logic-opTesting and operating on fragments
gl-matrial4.9 Lighting
gl-matrix-mode4.6 Transformation
gl-minmaxMinmax
gl-mult-matrix4.6 Transformation
gl-multi-tex-coord-arbMultitexturing
gl-multi-tex-coord-arbMultitexturing
gl-new-list4.7 Display lists
gl-normal4.3 Drawing functions
gl-normal4.3 Drawing functions
gl-normal-pointer4.8 Vertex arrays
gl-ortho4.6 Transformation
gl-pass-through4.13 Selection and feedback
gl-pixel-mapPixel operations
gl-pixel-storePixel operations
gl-pixel-transferPixel operations
gl-pixel-zoomPixel operations
gl-point-size4.5 GL states for drawing
gl-polygon-mode4.5 GL states for drawing
gl-polygon-offset4.5 GL states for drawing
gl-polygon-stipple4.5 GL states for drawing
gl-pop-attribPush/pop attributes
gl-pop-client-attribPush/pop attributes
gl-pop-matrix4.6 Transformation
gl-pop-name4.13 Selection and feedback
gl-prioritize-texturesTexture objects
gl-program-env-parameter-arbVertex and fragment programs
gl-program-env-parameter-arbVertex and fragment programs
gl-program-local-parameter-arbVertex and fragment programs
gl-program-local-parameter-arbVertex and fragment programs
gl-program-string-arbVertex and fragment programs
gl-push-attribPush/pop attributes
gl-push-client-attribPush/pop attributes
gl-push-matrix4.6 Transformation
gl-push-matrix*4.6 Transformation
gl-push-name4.13 Selection and feedback
gl-raster-pos4.3 Drawing functions
gl-raster-pos4.3 Drawing functions
gl-read-bufferSelecting color buffers
gl-read-pixelsPixel operations
gl-rect4.3 Drawing functions
gl-rect4.3 Drawing functions
gl-render-mode4.13 Selection and feedback
gl-reset-histogramHistogram
gl-reset-minmaxMinmax
gl-rotate4.6 Transformation
gl-scale4.6 Transformation
gl-scissorTesting and operating on fragments
gl-select-buffer4.13 Selection and feedback
gl-separable-filetr-2dConvolutions
gl-shade-model4.9 Lighting
gl-shader-source-arbShader objects
gl-state-vector-sizeState values
gl-stencil-funcTesting and operating on fragments
gl-stencil-maskMasking buffers
gl-stencil-opTesting and operating on fragments
gl-tex-coord4.3 Drawing functions
gl-tex-coord4.3 Drawing functions
gl-tex-coord-pointer4.8 Vertex arrays
gl-tex-envTexture environment and coordinates
gl-tex-genTexture environment and coordinates
gl-tex-image-1dDefining textures
gl-tex-image-2dDefining textures
gl-tex-image-3dDefining textures
gl-tex-parameterTexture parameters
gl-tex-sub-image-1dDefining textures
gl-tex-sub-image-2dDefining textures
gl-tex-sub-image-3dDefining textures
gl-translate4.6 Transformation
gl-uniform-matrix2-arbSpecifying uniform variables
gl-uniform-matrix3-arbSpecifying uniform variables
gl-uniform-matrix4-arbSpecifying uniform variables
gl-uniform1-arbSpecifying uniform variables
gl-uniform1-arbSpecifying uniform variables
gl-uniform2-arbSpecifying uniform variables
gl-uniform2-arbSpecifying uniform variables
gl-uniform3-arbSpecifying uniform variables
gl-uniform3-arbSpecifying uniform variables
gl-uniform4-arbSpecifying uniform variables
gl-uniform4-arbSpecifying uniform variables
gl-use-program-object-arbShader objects
gl-validate-program-arbShader objects
gl-version<=?4.2 GL feature checking
gl-version<?4.2 GL feature checking
gl-version=?4.2 GL feature checking
gl-version>=?4.2 GL feature checking
gl-version>?4.2 GL feature checking
gl-vertex4.3 Drawing functions
gl-vertex4.3 Drawing functions
gl-vertex-attrib-4n-arbSpecifying vertex attributes
gl-vertex-attrib-4n-arbSpecifying vertex attributes
gl-vertex-attrib-arbSpecifying vertex attributes
gl-vertex-attrib-arbSpecifying vertex attributes
gl-vertex-attrib-pointer-arbSpecifying vertex attributes
gl-vertex-pointer4.8 Vertex arrays
gl-viewport4.6 Transformation
glu-begin-curve4.16 Nurbs
glu-begin-surface4.16 Nurbs
glu-build-1d-mipmap-levelsMipmaps
glu-build-1d-mipmapsMipmaps
glu-build-2d-mipmap-levelsMipmaps
glu-build-2d-mipmapsMipmaps
glu-build-3d-mipmap-levelsMipmaps
glu-build-3d-mipmapsMipmaps
glu-cylinder4.15 Quadrics
glu-disk4.15 Quadrics
glu-end-curve4.16 Nurbs
glu-end-surface4.16 Nurbs
glu-error-stringOther queries
glu-get-nurbs-property4.16 Nurbs
glu-get-stringOther queries
glu-load-sampling-matrices4.16 Nurbs
glu-look-at4.6 Transformation
glu-nurbs-curve4.16 Nurbs
glu-nurbs-property4.16 Nurbs
glu-ortho-2d4.6 Transformation
glu-partial-disk4.15 Quadrics
glu-perspective4.6 Transformation
glu-pick-matrix4.14 Projection
glu-project4.14 Projection
glu-project!4.14 Projection
glu-quadric-draw-style4.15 Quadrics
glu-quadric-normals4.15 Quadrics
glu-quadric-orientation4.15 Quadrics
glu-quadric-texture4.15 Quadrics
glu-sphere4.15 Quadrics
glu-un-project4.14 Projection
glu-un-project!4.14 Projection
glut-add-menu-entry5.3 GLUT menu API
glut-add-sub-menu5.3 GLUT menu API
glut-bitmap-character5.7 GLUT font
glut-bitmap-length5.7 GLUT font
glut-bitmap-width5.7 GLUT font
glut-button-box-func5.4 GLUT callbacks
glut-change-to-menu-entry5.3 GLUT menu API
glut-change-to-sub-menu5.3 GLUT menu API
glut-copy-colormap5.5 GLUT colormap
glut-create-menu5.3 GLUT menu API
glut-create-sub-window5.1 GLUT window manipulation
glut-create-widnow5.1 GLUT window manipulation
glut-destroy-menu5.3 GLUT menu API
glut-destroy-window5.1 GLUT window manipulation
glut-detach-menu5.3 GLUT menu API
glut-device-get5.6 GLUT state retrieval
glut-dials-func5.4 GLUT callbacks
glut-display-func5.4 GLUT callbacks
glut-entry-func5.4 GLUT callbacks
glut-establish-overlay5.2 GLUT overlay
glut-extension-supported5.6 GLUT state retrieval
glut-full-screen5.1 GLUT window manipulation
glut-get5.6 GLUT state retrieval
glut-get-color5.5 GLUT colormap
glut-get-emnu5.3 GLUT menu API
glut-get-modifiers5.6 GLUT state retrieval
glut-get-window5.1 GLUT window manipulation
glut-hide-overlay5.2 GLUT overlay
glut-hide-window5.1 GLUT window manipulation
glut-iconify-window5.1 GLUT window manipulation
glut-idle-func5.4 GLUT callbacks
glut-init5.1 GLUT window manipulation
glut-init-display-mode5.1 GLUT window manipulation
glut-init-display-string5.1 GLUT window manipulation
glut-init-window-position5.1 GLUT window manipulation
glut-init-window-size5.1 GLUT window manipulation
glut-joystick-func5.4 GLUT callbacks
glut-keyboard-func5.4 GLUT callbacks
glut-keyboard-up-func5.4 GLUT callbacks
glut-layer-get5.6 GLUT state retrieval
glut-main-loop5.1 GLUT window manipulation
glut-menu-state-func5.4 GLUT callbacks
glut-menu-status-func5.4 GLUT callbacks
glut-motion-func5.4 GLUT callbacks
glut-mouse-func5.4 GLUT callbacks
glut-overlay-dislay-func5.4 GLUT callbacks
glut-passive-motion-func5.4 GLUT callbacks
glut-pop-window5.1 GLUT window manipulation
glut-position-window5.1 GLUT window manipulation
glut-post-overlay-redisplay5.2 GLUT overlay
glut-post-redisplay5.1 GLUT window manipulation
glut-post-window-overlay-redisplay5.2 GLUT overlay
glut-post-window-redisplay5.1 GLUT window manipulation
glut-push-window5.1 GLUT window manipulation
glut-remove-menu-item5.3 GLUT menu API
glut-remove-overlay5.2 GLUT overlay
glut-reshape-func5.4 GLUT callbacks
glut-reshape-window5.1 GLUT window manipulation
glut-set-color5.5 GLUT colormap
glut-set-cursor5.1 GLUT window manipulation
glut-set-icon-title5.1 GLUT window manipulation
glut-set-menu5.3 GLUT menu API
glut-set-window5.1 GLUT window manipulation
glut-set-window-title5.1 GLUT window manipulation
glut-show-overlay5.2 GLUT overlay
glut-show-window5.1 GLUT window manipulation
glut-soild-teapot5.8 GLUT pre-built models
glut-solid-cone5.8 GLUT pre-built models
glut-solid-cube5.8 GLUT pre-built models
glut-solid-dodecahedron5.8 GLUT pre-built models
glut-solid-icosahedron5.8 GLUT pre-built models
glut-solid-octahedron5.8 GLUT pre-built models
glut-solid-sphere5.8 GLUT pre-built models
glut-solid-tetrahedron5.8 GLUT pre-built models
glut-solid-torus5.8 GLUT pre-built models
glut-spaceball-button-func5.4 GLUT callbacks
glut-spaceball-motion-func5.4 GLUT callbacks
glut-spaceball-rotate-func5.4 GLUT callbacks
glut-special-func5.4 GLUT callbacks
glut-special-up-func5.4 GLUT callbacks
glut-stroke-character5.7 GLUT font
glut-stroke-length5.7 GLUT font
glut-stroke-width5.7 GLUT font
glut-swap-buffers5.1 GLUT window manipulation
glut-tablet-button-func5.4 GLUT callbacks
glut-tablet-motion-func5.4 GLUT callbacks
glut-timer-func5.4 GLUT callbacks
glut-use-layer5.2 GLUT overlay
glut-visibility-func5.4 GLUT callbacks
glut-warp-pointer5.1 GLUT window manipulation
glut-window-status-func5.4 GLUT callbacks
glut-wire-cone5.8 GLUT pre-built models
glut-wire-cube5.8 GLUT pre-built models
glut-wire-dodecahedron5.8 GLUT pre-built models
glut-wire-icosahedron5.8 GLUT pre-built models
glut-wire-octahedron5.8 GLUT pre-built models
glut-wire-sphere5.8 GLUT pre-built models
glut-wire-teapot5.8 GLUT pre-built models
glut-wire-tetrahedron5.8 GLUT pre-built models
glut-wire-torus5.8 GLUT pre-built models
gult-attach-menu5.3 GLUT menu API

L
list->gl-boolean-vectorGL boolean vectors
list->matrix4f6.3 Matrices
list->point4f6.1 Vectors and points
list->point4f-array6.2 Vector arrays and point arrays
list->quatf6.4 Quaternions
list->vector4f6.1 Vectors and points
list->vector4f-array6.2 Vector arrays and point arrays

M
make-gl-boolean-vectorGL boolean vectors
make-matrix4f6.3 Matrices
make-point4f6.1 Vectors and points
make-point4f-array6.2 Vector arrays and point arrays
make-quatf6.4 Quaternions
make-vector4f6.1 Vectors and points
make-vector4f-array6.2 Vector arrays and point arrays
matrix4f6.3 Matrices
matrix4f->f32vector6.3 Matrices
matrix4f->list6.3 Matrices
matrix4f->quatf6.4 Quaternions
matrix4f->quatf!6.4 Quaternions
matrix4f->rotation6.3 Matrices
matrix4f->rotation!6.3 Matrices
matrix4f->translation6.3 Matrices
matrix4f->translation!6.3 Matrices
matrix4f-column6.3 Matrices
matrix4f-column/shared6.3 Matrices
matrix4f-copy6.3 Matrices
matrix4f-copy!6.3 Matrices
matrix4f-decompose6.3 Matrices
matrix4f-decompose!6.3 Matrices
matrix4f-determinant6.3 Matrices
matrix4f-inverse6.3 Matrices
matrix4f-inverse!6.3 Matrices
matrix4f-mul6.3 Matrices
matrix4f-mul!6.3 Matrices
matrix4f-ref6.3 Matrices
matrix4f-ref26.3 Matrices
matrix4f-row6.3 Matrices
matrix4f-set!6.3 Matrices
matrix4f-set2!6.3 Matrices
matrix4f-transpose6.3 Matrices
matrix4f-transpose!6.3 Matrices
matrix4f?6.3 Matrices

P
point4f6.1 Vectors and points
point4f->f32vector6.1 Vectors and points
point4f->list6.1 Vectors and points
point4f-add6.1 Vectors and points
point4f-add!6.1 Vectors and points
point4f-array->f32vector6.2 Vector arrays and point arrays
point4f-array-length6.2 Vector arrays and point arrays
point4f-array-ref6.2 Vector arrays and point arrays
point4f-array-ref/shared6.2 Vector arrays and point arrays
point4f-array-set!6.2 Vector arrays and point arrays
point4f-array?6.2 Vector arrays and point arrays
point4f-copy6.1 Vectors and points
point4f-copy!6.1 Vectors and points
point4f-ref6.1 Vectors and points
point4f-set!6.1 Vectors and points
point4f-sub6.1 Vectors and points
point4f?6.1 Vectors and points

Q
quatf6.4 Quaternions
quatf->f32vector6.4 Quaternions
quatf->list6.4 Quaternions
quatf->matrix4f6.4 Quaternions
quatf->matrix4f!6.4 Quaternions
quatf-add6.4 Quaternions
quatf-add!6.4 Quaternions
quatf-conjugate6.4 Quaternions
quatf-conjugate!6.4 Quaternions
quatf-copy6.4 Quaternions
quatf-copy!6.4 Quaternions
quatf-mul6.4 Quaternions
quatf-mul!6.4 Quaternions
quatf-norm6.4 Quaternions
quatf-normalize6.4 Quaternions
quatf-normalize!6.4 Quaternions
quatf-scale6.4 Quaternions
quatf-scale!6.4 Quaternions
quatf-slerp6.4 Quaternions
quatf-slerp!6.4 Quaternions
quatf-sub6.4 Quaternions
quatf-sub!6.4 Quaternions
quatf-transform6.4 Quaternions
quatf?6.4 Quaternions

R
read-sgi-image7.1 Simple image handling
read-sgi-image-from-port7.1 Simple image handling
rotation->matrix4f6.3 Matrices
rotation->matrix4f!6.3 Matrices
rotation->quatf!6.4 Quaternions

S
scale->matrix4f6.3 Matrices
scale->matrix4f!6.3 Matrices
simple-viewer-axis7.2 Simple viewer
simple-viewer-display7.2 Simple viewer
simple-viewer-grid7.2 Simple viewer
simple-viewer-reshape7.2 Simple viewer
simple-viewer-set-key!7.2 Simple viewer
simple-viewer-window7.2 Simple viewer

T
tqs->matrix4f6.3 Matrices
tqs->matrix4f!6.3 Matrices
translation->matrix4f6.3 Matrices
translation->matrix4f!6.3 Matrices
trs->matrix4f6.3 Matrices
trs->matrix4f!6.3 Matrices

V
vector4f6.1 Vectors and points
vector4f->f32vector6.1 Vectors and points
vector4f->list6.1 Vectors and points
vector4f-add6.1 Vectors and points
vector4f-add!6.1 Vectors and points
vector4f-array->f32vector6.2 Vector arrays and point arrays
vector4f-array-length6.2 Vector arrays and point arrays
vector4f-array-ref6.2 Vector arrays and point arrays
vector4f-array-ref/shared6.2 Vector arrays and point arrays
vector4f-array-set!6.2 Vector arrays and point arrays
vector4f-array?6.2 Vector arrays and point arrays
vector4f-copy6.1 Vectors and points
vector4f-copy!6.1 Vectors and points
vector4f-cross6.1 Vectors and points
vector4f-dot6.1 Vectors and points
vector4f-norm6.1 Vectors and points
vector4f-normalize6.1 Vectors and points
vector4f-normalize!6.1 Vectors and points
vector4f-ref6.1 Vectors and points
vector4f-set!6.1 Vectors and points
vector4f-sub6.1 Vectors and points
vector4f-sub!6.1 Vectors and points
vector4f?6.1 Vectors and points
vectors->quatf6.4 Quaternions
vectors->quatf!6.4 Quaternions

Jump to:   A   E   F   G   L   M   P   Q   R   S   T   V  

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.2 ¥â¥¸¥å¡¼¥ëº÷°ú

Jump to:   G  
Index Entry Section

G
gl.math3d6. Vectors and matrices
gl.simple.image7.1 Simple image handling
gl.simple.viewer7.2 Simple viewer

Jump to:   G  

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.3 ¥¯¥é¥¹º÷°ú

For readability, the surrounding < and > are stripped off.

Jump to:   G   M   P   Q   V  
Index Entry Section

G
glut-font5.7 GLUT font

M
matrix4f6.3 Matrices

P
point4f6.1 Vectors and points
point4f-array6.2 Vector arrays and point arrays

Q
quatf6.4 Quaternions

V
vector4f6.1 Vectors and points
vector4f-array6.2 Vector arrays and point arrays

Jump to:   G   M   P   Q   V  

[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

A.4 ÊÑ¿ôº÷°ú

Jump to:   G  
Index Entry Section

G
GLUT_ACCUM5.1 GLUT window manipulation
GLUT_ACTIVE_ALT5.6 GLUT state retrieval
GLUT_ACTIVE_CTRL5.6 GLUT state retrieval
GLUT_ACTIVE_SHIFT5.6 GLUT state retrieval
GLUT_ALPHA5.1 GLUT window manipulation
GLUT_BLUE5.5 GLUT colormap
GLUT_CURSOR_BOTTOM_LEFT_CORNER5.1 GLUT window manipulation
GLUT_CURSOR_BOTTOM_RIGHT_CORNER5.1 GLUT window manipulation
GLUT_CURSOR_BOTTOM_SIDE5.1 GLUT window manipulation
GLUT_CURSOR_CROSSHAIR5.1 GLUT window manipulation
GLUT_CURSOR_CYCLE5.1 GLUT window manipulation
GLUT_CURSOR_DESTROY5.1 GLUT window manipulation
GLUT_CURSOR_FULL_CROSSHAIR5.1 GLUT window manipulation
GLUT_CURSOR_HELP5.1 GLUT window manipulation
GLUT_CURSOR_INFO5.1 GLUT window manipulation
GLUT_CURSOR_INHERIT5.1 GLUT window manipulation
GLUT_CURSOR_LEFT_ARROW5.1 GLUT window manipulation
GLUT_CURSOR_LEFT_RIGHT5.1 GLUT window manipulation
GLUT_CURSOR_LEFT_SIDE5.1 GLUT window manipulation
GLUT_CURSOR_NONE5.1 GLUT window manipulation
GLUT_CURSOR_RIGHT_ARROW5.1 GLUT window manipulation
GLUT_CURSOR_RIGHT_SIDE5.1 GLUT window manipulation
GLUT_CURSOR_SPRAY5.1 GLUT window manipulation
GLUT_CURSOR_TEXT5.1 GLUT window manipulation
GLUT_CURSOR_TOP_LEFT_CORNER5.1 GLUT window manipulation
GLUT_CURSOR_TOP_RIGHT_CORNER5.1 GLUT window manipulation
GLUT_CURSOR_TOP_SIDE5.1 GLUT window manipulation
GLUT_CURSOR_UP_DOWN5.1 GLUT window manipulation
GLUT_CURSOR_WAIT5.1 GLUT window manipulation
GLUT_DEPTH5.1 GLUT window manipulation
GLUT_DEVICE_IGNORE_KEY_REPEAT5.6 GLUT state retrieval
GLUT_DEVICE_KEY_REPEAT5.6 GLUT state retrieval
GLUT_DISPLAY_MODE_POSSIBLE5.6 GLUT state retrieval
GLUT_DOUBLE5.1 GLUT window manipulation
GLUT_DOWN5.4 GLUT callbacks
GLUT_ELAPSED_TIME5.6 GLUT state retrieval
GLUT_ENTERED5.4 GLUT callbacks
GLUT_GREEN5.5 GLUT colormap
GLUT_HAS_DIAL_AND_BUTTON_BOX5.6 GLUT state retrieval
GLUT_HAS_JOYSTICK5.6 GLUT state retrieval
GLUT_HAS_KEYBOARD5.6 GLUT state retrieval
GLUT_HAS_MOUSE5.6 GLUT state retrieval
GLUT_HAS_OVERLAY5.6 GLUT state retrieval
GLUT_HAS_SPACEBALL5.6 GLUT state retrieval
GLUT_HAS_TABLET5.6 GLUT state retrieval
GLUT_INDEX5.1 GLUT window manipulation
GLUT_INIT_DISPLAY_MODE5.6 GLUT state retrieval
GLUT_INIT_WINDOW_HEIGHT5.6 GLUT state retrieval
GLUT_INIT_WINDOW_WIDTH5.6 GLUT state retrieval
GLUT_INIT_WINDOW_X5.6 GLUT state retrieval
GLUT_INIT_WINDOW_Y5.6 GLUT state retrieval
GLUT_JOYSTICK_AXES5.6 GLUT state retrieval
GLUT_JOYSTICK_BUTTONS5.6 GLUT state retrieval
GLUT_JOYSTICK_POLL_RATE5.6 GLUT state retrieval
GLUT_KEY_DOWN5.4 GLUT callbacks
GLUT_KEY_END5.4 GLUT callbacks
GLUT_KEY_F15.4 GLUT callbacks
GLUT_KEY_F105.4 GLUT callbacks
GLUT_KEY_F115.4 GLUT callbacks
GLUT_KEY_F125.4 GLUT callbacks
GLUT_KEY_F25.4 GLUT callbacks
GLUT_KEY_F35.4 GLUT callbacks
GLUT_KEY_F45.4 GLUT callbacks
GLUT_KEY_F55.4 GLUT callbacks
GLUT_KEY_F65.4 GLUT callbacks
GLUT_KEY_F75.4 GLUT callbacks
GLUT_KEY_F85.4 GLUT callbacks
GLUT_KEY_F95.4 GLUT callbacks
GLUT_KEY_HOME5.4 GLUT callbacks
GLUT_KEY_INSERT5.4 GLUT callbacks
GLUT_KEY_LEFT5.4 GLUT callbacks
GLUT_KEY_PAGE_DOWN5.4 GLUT callbacks
GLUT_KEY_PAGE_UP5.4 GLUT callbacks
GLUT_KEY_RIGHT5.4 GLUT callbacks
GLUT_KEY_UP5.4 GLUT callbacks
GLUT_LAYER_IN_USE5.6 GLUT state retrieval
GLUT_LEFT5.4 GLUT callbacks
GLUT_LEFT_BUTTON5.4 GLUT callbacks
GLUT_LUMINANCE5.1 GLUT window manipulation
GLUT_MENU_NUM_ITEMS5.6 GLUT state retrieval
GLUT_MIDDLE_BUTTON5.4 GLUT callbacks
GLUT_MULTISAMPLE5.1 GLUT window manipulation
GLUT_NORMAL_DAMAGED5.6 GLUT state retrieval
GLUT_NOT_VISIBLE5.4 GLUT callbacks
GLUT_NUM_BUTTON_BOX_BUTTONS5.6 GLUT state retrieval
GLUT_NUM_DIALS5.6 GLUT state retrieval
GLUT_NUM_MOUSE_BUTTONS5.6 GLUT state retrieval
GLUT_NUM_SPACEBALL_BUTTONS5.6 GLUT state retrieval
GLUT_NUM_TABLET_BUTTONS5.6 GLUT state retrieval
GLUT_OVERLAY_DAMAGED5.6 GLUT state retrieval
GLUT_OVERLAY_POSSIBLE5.6 GLUT state retrieval
GLUT_OWNS_JOYSTICK5.6 GLUT state retrieval
GLUT_RED5.5 GLUT colormap
GLUT_RGB5.1 GLUT window manipulation
GLUT_RGBA5.1 GLUT window manipulation
GLUT_RIGHT_BUTTON5.4 GLUT callbacks
GLUT_SCREEN_HEIGHT5.6 GLUT state retrieval
GLUT_SCREEN_HEIGHT_MM5.6 GLUT state retrieval
GLUT_SCREEN_WIDTH5.6 GLUT state retrieval
GLUT_SCREEN_WIDTH_MM5.6 GLUT state retrieval
GLUT_SINGLE5.1 GLUT window manipulation
GLUT_STENCIL5.1 GLUT window manipulation
GLUT_STEREO5.1 GLUT window manipulation
GLUT_TRANSPARENT_INDEX5.6 GLUT state retrieval
GLUT_UP5.4 GLUT callbacks
GLUT_VISIBLE5.4 GLUT callbacks
GLUT_WINDOW_ACCUM_ALPHA_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_ACCUM_BLUE_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_ACCUM_GREEN_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_ACCUM_RED_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_ALPHA_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_BLUE_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_BUFFER_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_COLORMAP_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_CURSOR5.6 GLUT state retrieval
GLUT_WINDOW_DEPTH_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_DOUBLEBUFFER5.6 GLUT state retrieval
GLUT_WINDOW_FORMAT_ID5.6 GLUT state retrieval
GLUT_WINDOW_GREEN_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_HEIGHT5.6 GLUT state retrieval
GLUT_WINDOW_NUM_CHILDREN5.6 GLUT state retrieval
GLUT_WINDOW_NUM_SAMPLES5.6 GLUT state retrieval
GLUT_WINDOW_PARENT5.6 GLUT state retrieval
GLUT_WINDOW_RED_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_RGBA5.6 GLUT state retrieval
GLUT_WINDOW_STENCIL_SIZE5.6 GLUT state retrieval
GLUT_WINDOW_STEREO5.6 GLUT state retrieval
GLUT_WINDOW_WIDTH5.6 GLUT state retrieval
GLUT_WINDOW_X5.6 GLUT state retrieval
GLUT_WINDOW_Y5.6 GLUT state retrieval
GLU_FILL4.15 Quadrics
GLU_FLAT4.15 Quadrics
GLU_INSIDE4.15 Quadrics
GLU_LINE4.15 Quadrics
GLU_NONE4.15 Quadrics
GLU_OUTSIDE4.15 Quadrics
GLU_POINT4.15 Quadrics
GLU_SILHUETTE4.15 Quadrics
GLU_SMOOTH4.15 Quadrics
GL_LINES4.3 Drawing functions
GL_LINE_LOOP4.3 Drawing functions
GL_LINE_STRIP4.3 Drawing functions
GL_POINTS4.3 Drawing functions
GL_POLYGON4.3 Drawing functions
GL_QUADS4.3 Drawing functions
GL_QUAD_STRIP4.3 Drawing functions
GL_TRIANGLES4.3 Drawing functions
GL_TRIANGLE_FAN4.3 Drawing functions
GL_TRIANGLE_STRIP4.3 Drawing functions

Jump to:   G  

[Top] [Contents] [Index] [ ? ]

Table of Contents


[Top] [Contents] [Index] [ ? ]

About This Document

This document was generated by Shiro Kawai on August 5, 2011 using texi2html 1.82.

The buttons in the navigation panels have the following meaning:

Button Name Go to From 1.2.3 go to
[ < ] Back Previous section in reading order 1.2.2
[ > ] Forward Next section in reading order 1.2.4
[ << ] FastBack Beginning of this chapter or previous chapter 1
[ Up ] Up Up section 1.2
[ >> ] FastForward Next chapter 2
[Top] Top Cover (top) of document  
[Contents] Contents Table of contents  
[Index] Index Index  
[ ? ] About About (help)  

where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:

  • 1. Section One
    • 1.1 Subsection One-One
      • ...
    • 1.2 Subsection One-Two
      • 1.2.1 Subsubsection One-Two-One
      • 1.2.2 Subsubsection One-Two-Two
      • 1.2.3 Subsubsection One-Two-Three     <== Current Position
      • 1.2.4 Subsubsection One-Two-Four
    • 1.3 Subsection One-Three
      • ...
    • 1.4 Subsection One-Four

This document was generated by Shiro Kawai on August 5, 2011 using texi2html 1.82.

Gauche-gl-0.5.1/doc/gauche-gl-refj.texi0000644000076400007640000036262011617171620016606 0ustar shiroshiro\input texinfo @c -*-texinfo-*- @comment %**start of header @setfilename gauche-gl-refj.info @settitle Gauche-gl : OpenGL binding for Gauche @dircategory The Algorithmic Language Scheme @direntry * Gauche-gl Reference (ja): (gauche-gl-refj.info). Gauche OpenGL binding @end direntry @comment %**end of header @c $Id: gauche-gl-ref.texi,v 1.30 2008-06-05 11:14:46 shirok Exp $ @c module and class index @defcodeindex md @defcodeindex cl @iftex @finalout @parskip 4pt plus 1pt @end iftex @titlepage @title Gauche-gl : OpenGL binding for Gauche @subtitle version 0.5.1 @author Shiro Kawai (shiro@@acm.org) @page @vskip 0pt plus 1filll Copyright @copyright{} 2002-2005 Shiro Kawai (shiro@@acm.org) @end titlepage @node Top, ¤Ï¤¸¤á¤Ë, (dir), (dir) @ifnottex This is a reference manual of Gauche-gl, an OpenGL binding for the Gauche Scheme implementation. This manual is for version 0.5.1. @end ifnottex @c ====================================================================== @menu * ¤Ï¤¸¤á¤Ë:: * Installation:: * Getting Started:: * OpenGL API:: * GLUT API:: * Vectors and matrices:: * Simple utilities:: * º÷°ú:: @end menu @node ¤Ï¤¸¤á¤Ë, Installation, Top, Top @chapter ¤Ï¤¸¤á¤Ë @c NODE ¤Ï¤¸¤á¤Ë Gauche-gl is an extension module of Gauche Scheme implementation. It provides the following modules: @table @code @item gl This module provides bindings to OpenGL API. It covers most functions in OpenGL 1.0 through 2.0, and GLU. The functions are described in @ref{OpenGL API}. @item gl.glut This module provides bindings to most functions in GLUT. The functions are described in @ref{GLUT API}. @item gl.math3d This module provides vector and matrix calculations optimized for 3D homogeneous coordinates. The vector and matrix objects here can be directly passed to Gauche-gl functions. The functions are descrbied in @ref{Vectors and matrices}. @item gl.simple.* These modules provide simple APIs for programmers to hack up a very simple OpenGL application. They are by no means intended for general application development, but would be handy for throwaway script. See @ref{Simple utilities} for the details. @end table @c ====================================================================== @node Installation, Getting Started, ¤Ï¤¸¤á¤Ë, Top @chapter Installation Installing Gauche-gl is usually straightforward on Unix variants. You have to have the following programs installed on your machine. @itemize @bullet @item Gauche 0.8.5 or later @item OpenGL 1.1 equivalent library; the auther checked with Mesa 3.4 and NVidia's GLX driver. @item GLUT 3.7 or later. @end itemize The standard way to compile and install Gauche-gl is as follows: @example % gzcat Gauche-gl-0.5.1.tgz | tar xf - % cd Gauche-gl-0.5.1 % ./configure % make % make test % make install @end example Or you can use @file{gauche-package} command: @example % gauche-package install -C= Gauche-gl-0.5.1.tgz @end example The confiugre script figures out the location Gauche is installed, and install Gauche-gl in the same place. If you have GLUT installed in non-standard place, you have to tell the configure script where it is. @example % ./configure --with-glut=DIR @end example Since version 0.4, Gauche-gl can be configured to include bindings to NVidia's Cg Toolkit. The binding code is contributed by Issac Trotts. To enable Cg binding, give @code{--enable-cg} option to the configure script. @example % ./configure --enable-cg @end example It is reported that Mesa in FreeBSD ports is compiled with pthreads enabled, and Gauche-gl can't be linked unless Gauche itself is compiled with pthreads. The configure script of Gauche prints warning if you specify pthreads, but it is safe as far as you don't call make-thread in your program. There are various examples under @file{examples/} directory. If you want to run the examples before installing Gauche-gl, you have to tell the location of the library to @code{gosh} command, e.g. @code{gosh -I../src -I../lib gears.scm}. Some demos under subdirectories have a shell script that invokes @code{gosh} with proper command-line options. @table @file @item gears.scm Brian Paul's 3D gear wheels. @item mandelbrot.scm Simple calculated texture. @item glbook/ This subdirectory contains examples found in "OpenGL Programming Guide", a.k.a. Redbook. @item slbook/ This subdirectory contains examples found in "OpenGL Shading Language". Each demo is under its own subdirectories. You need to have proper driver/hardware that supports GLSL to run these demos. @end table @c ====================================================================== @node Getting Started, OpenGL API, Installation, Top @chapter Getting Started @menu * GL calls in Scheme:: * Advanced GL features:: * Using GLUT:: * Performance tips:: @end menu @c ---------------------------------------------------------------------- @node GL calls in Scheme, Advanced GL features, Getting Started, Getting Started @section GL calls in Scheme I assume you have basic knowledge of OpenGL API. Gauche-gl maps OpenGL calls to Scheme procedures pretty straightforwardly. For example, the very first example of "OpenGL Programming Guide", the pseudo code of OpenGL application, can be written in Gauche-gl like this: @example (use gl) (define (main args) (@i{initialize-a-window-please}) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 1.0 1.0 1.0) (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0) (gl-begin* GL_POLYGON (gl-vertex 0.25 0.25 0.0) (gl-vertex 0.75 0.25 0.0) (gl-vertex 0.75 0.75 0.0) (gl-vertex 0.25 0.75 0.0) ) (gl-flush) (@i{update-the-window-and-check-for-events}) 0) @end example Note that @i{initialize-a-window-please} and @i{update-the-window-and-check-for-events} are function calls dependent on the windowing system. Gauche-gl comes with GLUT binding and you can use it to do basic stuff. In the separate package Gauche-gtk, a binding to GtkGLExt is provided, which allows you to do GL rendering inside Gtk widgets. For the time being, let's focus on the pure GL part. The mapping of GL call name is straightforward. The mixed case names in OpenGL C API is expanded to hyphenated name, e.g. @code{glClearColor} @result{} @code{gl-clear-color}. OpenGL enums are mapped as is, e.g. @code{GL_POLYGON}. (Note that Gauche is case-sensitive by default. Also note the underscore, not hyphen, in constants). A few convenience macros, such as @code{gl-begin*}, is defined. There are straight bindings of @code{gl-begin} and @code{gl-end}, so you can write the drawing part in the same way as in C: @example (gl-begin GL_POLYGON) (gl-vertex 0.25 0.25 0.0) (gl-vertex 0.75 0.25 0.0) (gl-vertex 0.75 0.75 0.0) (gl-vertex 0.25 0.75 0.0) (gl-end) @end example Actually @code{gl-begin*} macro expands into the above calls. It's a matter of taste, but the macro version guarantees begin and end match, and the syntax-aware editor can indent internal calls accordingly. You might have noticed that the type suffix in C API is not in Gauche binding. The Scheme function figures out the type of passed arguments and calls appropriate C API. SRFI-4 uniform numeric vectors are used to represent arrays of numbers. @example (gl-vertex 1.0 2.0 3.0) @result{} glVertex3d (gl-vertex '#f32(1.0 2.0)) @result{} glVertex2fv (gl-vertex '#s32(3 2 5)) @result{} glVertex3iv @end example Generally, passing uniform vectors is much more efficient than giving individual numbers, for the former can eliminate the cost of type checking and unboxing. Some GL calls can also take @code{gl.math3d} primitive objects such as @code{vector4f}, @code{point4f} or @code{matrix4f} (@xref{Vectors and matrices}). For example, you can pass @code{point4f} object to @code{gl-vertex}, @code{vector4f} to @code{gl-normal}, and @code{matrix4f} to @code{gl-mult-matrix}. They are efficient since calculations on those types are defined natively in @code{gl.math3d}, and passing it to GL call doesn't cost unboxing. @c ---------------------------------------------------------------------- @node Advanced GL features, Using GLUT, GL calls in Scheme, Getting Started @section Advanced GL features Although Gauche-gl supports up to OpenGL 2.0, all functionalities may not be available on the target machine's driver/hardware. The application needs to check the availability of the extension and/or GL version before using the features that are only supported by the extension/version. Gauche-gl provides a couple of utility procedures to check the feature sets at runtime. For example, you can switch behavior depending on OpenGL 1.3 feature availability: @example (if (gl-version>=? "1.3") (code-using-features-available-in-OpenGL-1.3-and-later ...) (alternative-code ...)) @end example Or you can check the availability of extensions: @example (unless (gl-extension-supported? 'GL_ARB_shader_objects 'GL_ARB_fragment_shader 'GL_ARB_vertex_shader 'GL_ARB_shading_language_100) (error "OpenGL Shading Language extensions not available")) @end example See @ref{GL feature checking} for the details. If the client program calls a GL API that are not supported on the platform, an error is signalled. @c ---------------------------------------------------------------------- @node Using GLUT, Performance tips, Advanced GL features, Getting Started @section Using GLUT In order to make a runnable script, you need to use some windowing system interface. GLUT binding provides a simple way for it. Here is a complete runnable Scheme script, ported from Example 1-2 in "OpenGL Programming Guide": @example (use gl) (use gl.glut) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-begin* GL_POLYGON (gl-vertex '#f32(0.25 0.25 0.0)) (gl-vertex '#f32(0.75 0.25 0.0)) (gl-vertex '#f32(0.75 0.75 0.0)) (gl-vertex '#f32(0.25 0.75 0.0)) ) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0) ) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window "hello") (init) (glut-display-func disp) (glut-keyboard-func keyboard) (glut-main-loop) 0) @end example The @code{(use gl.glut)} form loads GLUT binding. The name mapping is the same as GL's: mixed case names to hyphenated names. In order to handle various events, you can pass a closure to @code{glut-display-func} etc. In the keyboard and mouse event callback, all arguments are integers. There are more examples under the @file{examples/} directory which uses GLUT. @c ---------------------------------------------------------------------- @node Performance tips, , Using GLUT, Getting Started @section Performance tips If you want to display millions of polygons in 30 fps, Gauche-gl is not for you. Consider using implementations that compiles into native code. The purpose of Gauche-gl is to provide reasonable performance for interactive development and experiment. However, if you know some tips, actually you can go quite far, especially with recent processors and graphics chips. @table @emph @item Avoid alocation within the inner loop. The functional (non-destructive) operations tend to return newly-allocated objects. Use linear-update (destructive) versions instead, such as @code{matrix-mul!}, @code{u8vector-add!}, etc, whenever possible. Pre-allocating temporary vectors is also effective. @item Reduce the number of calls within the inner loop. Vertex arrays are much better than calling @code{gl-vertex} over and over. Also consider using display lists if you're displaying rigid objects. @item Keep numbers within a uniform vector. Every time you take a number out of a uniform vector (or @code{} etc.), Gauche has to wrap the number by a tag (boxing). Also when you store a number into a uniform vector, Gauche has to check the type of the object, then strip a tag (unboxing). Those are all overhead you wouldn't have if you operate directly on uniform vectors (or @code{} etc). @item Write extensions to accelerate. If the above strategies are not enough, consider writing computation-intensive part in C as an extension. The easier way is to make C routines operate on uniform vectors, which is essentially a pointer to an array of numbers from C, and let Scheme handle higher-level data structures. (It could be viewed like relations between a coprocessor and a processor; the former does simple, iterative calculations fast, and the latter handles complicated logic). @end table @c ====================================================================== @node OpenGL API, GLUT API, Getting Started, Top @chapter OpenGL API In this chapter we list a GL and GLU procedures accessible from Gauche-gl, with brief descriptions to help programmers to remind what the functions are. We don't intend to make this an OpenGL reference, though; you should look at the OpenGL book for the details of what each API do. @menu * GL data types:: * GL feature checking:: * Drawing functions:: * GL state control:: * GL states for drawing:: * Transformation:: * Display lists:: * Vertex arrays:: * Lighting:: * Pixels:: * Texture mapping:: * Framebuffers:: * Selection and feedback:: * Projection:: * Quadrics:: * Nurbs:: * Polygon tesselation:: * Programmable shaders:: @end menu @c ---------------------------------------------------------------------- @node GL data types, GL feature checking, OpenGL API, OpenGL API @section GL data types GL doesn't define many data structures: some scalar primitives (e.g. @code{GLint}) and arrays of them. For scalar values, Gauche-gl has natural mappings: @table @code @item GLboolean Scheme booleans. @item GLbyte, GLubyte, GLshort, GLushort, GLint, GLuint, GLenum, GLbitfield Scheme exact integers. @item GLfloat, GLdouble, GLclampf, GLclampd Scheme real numbers. @end table For arrays, Gauche-gl uses uniform (srfi-4) vector whenever possible. For float arrays, however, Gauche-gl allows more structured types, such as points or matrices, when they are relevant. Such types are provided in @code{gl.math3d} module (see @ref{Vectors and matrices}), which also provides common arithmetics between those types. Another exception is an array of GLboolean---it doesn't have corresponding uniform vector representation. Gauche-gl defines a new type, @code{}, to represent an array of GLboolean. See below for operations provided on it. @table @code @item GLbyte[] @code{} @item GLubyte[] @code{} @item GLshort[] @code{} @item GLushort[] @code{} @item GLint[] @code{} @item GLuint[] @code{} @item GLfloat[], GLclampf[] @code{}, @code{}, @code{}, @code{}, @code{}, @code{}, @code{}. @item GLdouble[], GLclampd[] @code{} @item GLboolean[] @code{} @end table @subheading GL boolean vectors @deftp {Class} A class for an array of boolean values. You can pass its instance to the GL APIs that expect an array of GLbooleans. Its internal representation is bitwise compatible to GLbooean array, so passing it is quite efficient. This class inherits @code{}, so you can use generic sequence operations on it. The external representation of GL boolean vector uses srfi-10 notation, and can be read back. For example, a GL boolean vector of length 5 may be written something like this: @example #,(gl-boolean-vector #t #f #t #f #t) @end example @end deftp @defun make-gl-boolean-vector size &optional init Returns a GL boolean vector of @var{size} elements. Elements are initialized by either @code{#f} or @code{#t}, according to @var{init}. @example (make-gl-boolean-vector 3 #t) @result{} #,(gl-boolean-vector #t #t #t) @end example @end defun @defun gl-boolean-vector bool @dots{} Returns a GL boolean vector, whose elements are @var{bool} @dots{}. @example (gl-boolean-vector #f #t #t) @result{} #,(gl-boolean-vector #f #t #t) @end example @end defun @defun gl-boolean-vector? obj Returns @code{#t} if @var{obj} is a GL boolean vector, @code{#f} otherwise. @end defun @defun gl-boolean-vector-length v Returns length of a GL boolean vector @var{v}. You can also use the sequence generic function @code{size-of}. @end defun @defun gl-boolean-vector-fill! v bool Fills a GL boolean vector @var{v} with a boolean value @var{bool}. @end defun @defun list->gl-boolean-vector bools Coerce list of boolean values to a GL boolean vector. You can also use the @code{coerce-to} generic function to convert between GL boolean vectors and other sequences. @end defun @defun gl-boolean-vector-ref v k &optional fallback Returns @var{k}-th element of a GL boolean vector @var{v}. If @var{k} is out of range and @var{fallback} is provided, it is returned. If @var{k} is out of range and @var{fallback} is omitted, an error is signalled. You can also use generic function @code{ref} to access a GL boolean vector. @end defun @defun gl-boolean-vector-set! v k bool Sets @var{k}-th element of a GL boolean vector @var{v} by a boolean value @var{bool}. You can also use generic function @code{(setter ref)} to modify a GL boolean vector. @end defun @defun gl-boolean-vector-copy v Returns a copy of a GL boolean vector @var{v}. @end defun @c ---------------------------------------------------------------------- @node GL feature checking, Drawing functions, GL data types, OpenGL API @section GL feature checking If you want to use a feature that are in OpenGL 1.2 or later, or in a GL extension, you have to check its availability before actually calling the API function. You can use the following utility procedures. Note that those functions may return @code{#f} if the connection to the display subsystem isn't established yet. Usually you have to initialize and open an window before checking the features. @defun gl-extension-available? extension-name @dots{} Returns @code{#t} if GL extensions listed in @var{extension-name} @dots{} are all available. @var{Extension-name} can be a symbol or a string (e.g. @code{GL_ARB_multisample}). @end defun @defun gl-version? version @defunx gl-version>=? version @defunx gl-version=? version Returns @code{#t} if the runtime OpenGL version is less than, less thanor equal to, greater than, greater than or equal to, and equal to, the given @var{version}, respectively. Give @var{version} in a string, e.g. @code{"1.3"}. @end defun @c ---------------------------------------------------------------------- @node Drawing functions, GL state control, GL feature checking, OpenGL API @section Drawing functions @defmac gl-begin* mode gl-commands @dots{} @vindex GL_POINTS @vindex GL_LINES @vindex GL_LINE_STRIP @vindex GL_LINE_LOOP @vindex GL_TRIANGLES @vindex GL_TRIANGLE_STRIP @vindex GL_TRIANGLE_FAN @vindex GL_QUADS @vindex GL_QUAD_STRIP @vindex GL_POLYGON Executes @var{gl-commands} between @code{(gl-begin @var{mode})} and @code{(gl-end)}. @var{Mode} can be one of the following constants. @table @code @item GL_POINTS Individual points. @item GL_LINES Pairs of vertices interpreted as individual line segments. @item GL_LINE_STRIP Series of connected line segments. @item GL_LINE_LOOP Same as above, with a segment added between last and first vertices. @item GL_TRIANGLES Triples of vertices interpreted as triangles. @item GL_TRIANGLE_STRIP Linked trip of triangles. @item GL_TRIANGLE_FAN Linked fan of triangles. @item GL_QUADS Quadruples of vertices interpreted as four-sided polygons. @item GL_QUAD_STRIP Linked strip of quadrilaterals. @item GL_POLYGON Boundary of a simple, convex polygon. @end table @end defmac @defun gl-begin mode @defunx gl-end Corresponds to @code{glBegin} and @code{glEnd}. Use of @code{gl-begin*} macro is recommended, though. @end defun @defun gl-flush Flush the GL command buffer. @end defun @defun gl-finish Make sure all previously issued GL commands are completed. @end defun @defun gl-rect point1 point2 @defunx gl-rect x1 y1 x2 y2 Draws a rectangle. In the first form, @var{point1} and @var{point2} can be either @code{}, or f32, f64, s32, or s16vector of length 2. Types of both args should match. In the second form, all args should be a real numbers (@code{glRectd} is used). @end defun @defun gl-vertex point @defunx gl-vertex x y &optional z w Specify vertices. In the first form, @var{point} can be either @code{}, or f32, f64, s32 or s16vector of length 2, 3 or 4. In the second form, all args should be a real numbers. @end defun @defun gl-normal vector @defunx gl-normal x y z Sets vertex normal vector. In the first form, @var{vector} can be either @code{} (the fourth element is ignored), or f32, f64, s32 ro s16vector of length 3. In the second form, all args should be a real numbers. @end defun @defun gl-color color @defunx gl-color r g b &optional a Sets the current color. In the first form, @var{color} can be either f32, f64, u8, u16, u32, s8, s16, or s32vector of length 3 or 4. In the second form, all args should be a real numbers. @end defun @defun gl-tex-coord coord @defunx gl-tex-coord u v &optional s t Sets the current texture coordinates. In the first form, @var{coord} can be either f32, f64, s32 or s16vector of length 1, 2, 3, or 4. In the second form, all args should be a real numbers. @end defun @defun gl-raster-pos pos @defunx gl-raster-pos x y &optional z w Sets the current raster position. In the first form, @var{pos} can be eitehr f32, f64, s32 or s16vector. In the second form, all args should be a real numbers. @end defun @c ---------------------------------------------------------------------- @node GL state control, GL states for drawing, Drawing functions, OpenGL API @section GL state control @subsubheading Capabilities @defun gl-enable cap @defunx gl-disable cap Turns on and off a capability @var{cap}. Check out OpenGL reference for the list of capabilities. @end defun @defun gl-is-enabled cap Returns @code{#t} of @code{#f} depending on @var{cap} is enabled or not. @end defun @defun gl-enable-client-state array @defunx gl-disable-client-state array Enable/disable a client-side array (e.g. vertex array) specified by @var{array}. @var{Array} can be one of the following constants. @table @code @item GL_VERTEX_ARRAY @item GL_COLOR_ARRAY @item GL_INDEX_ARRAY @item GL_NORMAL_ARRAY @item GL_TEXTURE_COORD_ARRAY @item GL_EDGE_FLAG_ARRAY @end table @end defun @subsubheading State values Gauche has two variations for each type of OpenGL @code{glGetTYPE} APIs; nondestructive version and destructive versions. Nondestructive versions such as @code{gl-get-boolean} allocates and returns the vector of appropriate type for the state. For destructive versions such as @code{gl-get-boolean!}, you need to pass a vector to be filled in. The destructive version is non-allocating operation, so it is suitable if you call it within the drawing loop. If the state has a scalar value, the non-destructive version of query function returns a scalar value, but you need to pass a (uniform) vector of length 1 for the destructive version. @defun gl-state-vector-size state [Gauche specific] Returns the required size of the vector to retrieve GL state @var{state}. It is useful to prepare the vector to pass to the destructive version of @code{glGetTYPE} API. @end defun @defun gl-get-boolean state @defunx gl-get-boolean! gl-boolean-vector state Get (a) boolean state value(s). @end defun @defun gl-get-integer state @defunx gl-get-integer! s32vector state Get (an) integer state value(s). @end defun @defun gl-get-float state @defunx gl-get-float! f32vector state Get (a) single-precision floating-point state value(s). @end defun @defun gl-get-double state @defunx gl-get-double! f64vector state Get (a) double-precision floating-point state value(s). @end defun @subsubheading Push/pop attributes @defun gl-push-attrib mask @defunx gl-pop-attrib Push/pop attributes indicated by @var{mask}. Valid @var{mask} can be @code{logior} of the following bits (GLL_ALL_ATTRIB_BITS is @code{logior} of all the bits). @table @code @item GL_ACCUM_BUFFER_BIT @item GL_COLOR_BUFFER_BIT @item GL_CURRENT_BIT @item GL_DEPTH_BUFFER_BIT @item GL_ENABLE_BIT @item GL_EVAL_BIT @item GL_FOG_BIT @item GL_HINT_BIT @item GL_LIGHTING_BIT @item GL_LINE_BIT @item GL_LIST_BIT @item GL_PIXEL_MODE_BIT @item GL_POINT_BIT @item GL_POLYGON_BIT @item GL_POLYGON_STIPPLE_BIT @item GL_SCISSOR_BIT @item GL_STENCIL_BUFFER_BIT @item GL_TEXTURE_BIT @item GL_TRANSFORM_BIT @item GL_VIEWPORT_BIT @item GL_ALL_ATTRIB_BITS All of the above. @end table @end defun @defun gl-push-client-attrib mask @defunx gl-pop-client-attrib Push/pop client attributes. Valid @var{mask} can be @code{logior} of the following @table @code @item GL_CLIENT_PIXEL_STORE_BIT @item GL_CLIENT_VERTEX_ARRAY_BIT @item GL_ALL_CLIENT_ATTRIB_BITS All of the above. @end table @end defun @subsubheading Other queries @defun gl-get-error Returns the value of the error flag. Returned an integer value. Check out the OpenGL documentation for the possible error values. This function resets the error flag to @code{GL_NO_ERROR}. @end defun @defun glu-error-string error-code Returns a descriptive string for @var{error-code} returned by @code{gl-get-error}. @end defun @defun gl-get-string name Returns informative string about @var{name} of the GL library. @var{Name} can be one of the following. @table @code @item GL_VENDOR @item GL_RENDERER @item GL_VERSION @item GL_EXTENSIONS @end table To check a specific version or extension, you can also use the utility procedure @code{gl-version>?} etc. See @ref{GL feature checking}. @end defun @defun glu-get-string name Returns informative string about @var{name} of the GLU library. @var{Name} can be one of the following. @table @code @item GLU_VERSION @item GLU_EXTENSIONS @end table @end defun @subsubheading Hints @defun gl-hint target hint Controls quality of @var{target} by @var{hint}. @var{Target} can be one of the following: @table @code @item GL_POINT_SMOOTH_HINT @item GL_LINE_SMOOTH_HINT @item GL_POLYGON_SMOOTH_HINT @item GL_FOG_HINT @item GL_PERSPECTIVE_CORRECTION_HINT @end table And @var{hint} can be one of the following: @table @code @item GL_FASTEST @item GL_NICEST @item GL_DONT_CARE @end table @end defun @c ---------------------------------------------------------------------- @node GL states for drawing, Transformation, GL state control, OpenGL API @section GL states for drawing @defun gl-point-size size Sets the width in pixels for rendered points. The possible range of @var{size} on the running GL implementation can be obtained by passing either @code{GL_ALIASED_POINT_SIZE_RANGE} or @code{GL_SMOOTH_POINT_SIZE_RANGE} to @code{gl-get-float}. @end defun @defun gl-line-width width Sets the width in pixels for rendered lines. The possible range of @var{width} on the running GL implementation can be obtained by passing either @code{GL_ALIASED_LINE_WIDTH_RANGE} or @code{GL_SMOOTH_LINE_WIDTH_RANGE} to @code{gl-get-float}. @end defun @defun gl-line-stipple factor pat Sets the current stippling pattern for lines. @code{pat} must be an exact integer, and its lower 16 bits are used to specify the stipple pattern. @var{Factor} is an integer factor to specify how many pixels corresponds to one bit in @var{pat}. You have to enable @var{GL_LINE_STIPPLE} to use face culling. @end defun @defun gl-polygon-mode face mode Specifies the drawing mode for a polygon's front and back faces. @var{Face} can be one of the followings: @table @code @item GL_FRONT_AND_BACK @item GL_FRONT @item GL_BACK @end table @var{Mode} can be one of the followings: @table @code @item GL_POINT @item GL_LINE @item GL_FILL @end table @end defun @defun gl-front-face mode Controls how OpenGL determine front face of a polygon @var{Mode} can be one of the followings: @table @code @item GL_CCW Front face is where ordered vertices appear in a counterclockwise orientation (default). @item GL_CW Front face is where ordered vertices appear in a clockwise orientation. @end table @end defun @defun gl-cull-face mode Indicates which face of polygons should be culled. @var{Mode} can be one of the followings: @table @code @item GL_FRONT @item GL_BACK @item GL_FRONT_AND_BACK @end table You have to enable @var{GL_CULL_FACE} to use face culling. @end defun @defun gl-polygon-stipple mask Defines the current stipple pattern for filled polygons. @var{Mask} has to be a u8vector of length 128, specifying a 32x32 bitmap pattern. You have to enable @var{GL_POLYGON_STIPPLE} to use this feature. @end defun @defun gl-edge-flag flag Sets the edge flag(s) of vertices. When @var{flag} is a GL boolean vector, @code{glEdgeFlagv} is called. Otherwise @var{flag} is used as a single boolean value for @code{glEdgeFlag}. @end defun @defun gl-blend-func sfactor dfactor Controls how color values in the fragment being processed (the source) are combined with the ones in the framebuffer (the destination). Possible values for the @var{sfactor} and @var{dfactor} arguments are as follows. @table @code @item GL_ZERO @item GL_ONE @item GL_DST_COLOR @item GL_SRC_COLOR @item GL_ONE_MINUS_DST_COLOR @item GL_ONE_MINUS_SRC_COLOR @item GL_SRC_ALPHA @item GL_ONE_MINUS_SRC_ALPHA @item GL_DST_ALPHA @item GL_ONE_MINUS_DST_ALPHA @item GL_SRC_ALPHA_SATURATE @item GL_CONSTANT_COLOR @item GL_ONE_MINUS_CONSTANT_COLOR @item GL_CONSTANT_ALPHA @item GL_ONE_MINUS_CONSTANT_ALPHA @end table @end defun @defun gl-blend-equation mode [GL_ARB_imaging] By default, the source and destination colors are added after processed as specified by @var{gl-blend-func}. With this extension API you can change the function. @var{Mode} can be one of the following values: @table @code @item GL_FUNC_ADD @item GL_FUNC_SUBTRACT @item GL_FUNC_REVERSE_SUBTRACT @item GL_MIN @item GL_MAX @end table @end defun @defun gl-blend-color red green blue alpha [GL_ARB_imaging] Sets the constant color used in the blending function. @end defun @defun gl-polygon-offset factor units [GL1.1] Offset the depth value of each fragment. Useful to avoid artifacts when you draw polygon edges over its surfaces, for example. @end defun @defun gl-clip-plane plane equation Defines a clipping plane. @var{Plane} specifies which clipping plane you're defining. Use @code{GL_MAX_CLIP_PLANES} to @code{gl-get-integer} to obtain the number of clipping planes you can use. You have to enable the specific clipping plane (e.g. @code{(gl-enable GL_CLIP_PLANE0)}) to use the clipping plane. @var{Equation} must be an f64vector of size 4, specifying four coefficients of the plane equation, @code{Ax + By + Cz + D = 0}. @end defun @defun gl-get-clip-plane plane Returns the four coefficients of the equation of clipping plane @var{plane}, in f64vector. @end defun @defun gl-fog pname param Sets the parameters and function for the fog effect. Possible values for @var{pname} and accepted @var{param} for each @var{pname} are shown below. @table @code @item GL_FOG_MODE Either @code{GL_EXP}, @code{GL_EXP2}, @code{GL_LINEAR} to select the fog factors. @item GL_FOG_DENSITY @item GL_FOG_START @item GL_FO_END A real number to specify those parametes. @item GL_FOG_COLOR An f32vector of size 4 to specify the color. @end table @end defun @c ---------------------------------------------------------------------- @node Transformation, Display lists, GL states for drawing, OpenGL API @section Transformation @defun gl-matrix-mode mode Speficies whether the modelview, projection, or texture matrix will be modified. @var{Mode} can be one of the followings: @table @code @item GL_MODELVIEW @item GL_PROJECTION @item GL_TEXTURE @end table @end defun @defun gl-load-identity Loads an identity matrix to the current modifiable matrix. @end defun @defun gl-load-matrix mat Loads the matrix @var{mat} to the current modifiable matrix. @var{Mat} can be a @code{} instance, or f32 or f64vector of length 16. @end defun @defun gl-mult-matrix mat Multiplies the matrix @var{mat} to the current modifiable matrix. @var{Mat} can be a @code{} instance, or f32 or f64vector of length 16. @end defun @defun gl-translate x y z Multiplies the current matrix by a matrix taht translates an object by (@var{x}, @var{y}, @var{z}). Internally, @code{glTranslated} is called. @end defun @defun gl-rotate angle x y z Multiplies the current matrix by a matrix that rotates an object in a counterclockwise direction about the ray from the origin through the point (@var{x}, @var{y}, @var{z}) by @var{angle} degrees. Internally, @code{glRotated} is called. @end defun @defun gl-scale x y z Multiplies the current matrix by a matrix that scales an object by (@var{x}, @var{y}, @var{z}). Internally, @code{glScaled} is called. @end defun @defun glu-look-at eyex eyey eyez ctrx ctry ctrz upx upy upz Defines a viewing matrix and multiplies it to the right of the current matrix. @end defun @defun gl-frustum left right bottom top nearv farv Creates a matrix for a perspective-view frustum and multiplies the current matrix by it. @end defun @defun glu-perspective fovy aspect znear zfar Creates a matrix for a symmetrix perspective-view frustum and multiplies the current matrix by it. @end defun @defun gl-ortho left right bottom top nearv farv Creates a matrix for an orthographic parallel viewing volume nand multiplies the current matrix by it. @end defun @defun glu-ortho-2d left right bottom top Convenience procedure for 2D drawing; it is the same as @code{gl-ortho} except nearv and farv are fixed (along Z axis) to -1.0 and 1.0, respectively. @end defun @defun gl-viewport x y width height Defines a pixel rectangle in the window into which the final image is mapped. @end defun @defun gl-push-matrix @defunx gl-pop-matrix Pushes/pops the current matrix. @end defun @defmac gl-push-matrix* expr @dots{} A convenience macro. Pushes the current matrix, executes @var{expr}s, then pop the current matrix. @end defmac @c ---------------------------------------------------------------------- @node Display lists, Vertex arrays, Transformation, OpenGL API @section Display lists @defun gl-gen-lists range Allocates @var{range} number of contiguous display list indices. Returns an integer which is the smallest display list index you can use. @end defun @defun gl-new-list list-no mode Starts a display list construction. @var{Mode} may be one of the constants @code{GL_COMPILE} or @code{GL_COMPILE_AND_EXECUTE}. @end defun @defun gl-end-list Ends a display list construction. @end defun @defun gl-call-list list-no Calls a display list. @end defun @defun gl-is-list list-no Returns @code{#t} if @var{list-no} is an already used display list number, @code{#f} otherwise. @end defun @defun gl-delete-lists list-no-start range Deletes @var{range} display list, beginning from @var{list-no-start}. @end defun @defun gl-list-base base Specifies the offset that's added to the display list indices in @code{gl-call-list}. @end defun @defun gl-call-lists size type lists @defunx gl-call-lists size lists @defunx gl-call-lists lists Executes @var{size} display list, whose indices are contained in @var{lists}. You can pass a u8, s8, u16, s16, u32, s32 or f32vector, or a string, as @var{lists}. If it is a string, each byte consists of the string is interpreted as an unsigned integer specifying a display list. It is useful for the technique to display character strings by creating display lists for each ASCII characters. But be aware that it doesn't work for multibyte characters. Usually you can use the simplest form (the third form) and Gauche-gl infers the @var{size} and @var{type} from the passed @var{lists}. You can explicitly specify @var{size} if you want to use just a beginning portion of @var{lists}. An error is signalled if you specify @var{size} that is larger than the size of @var{lists}. Specifying @var{type} is useful only if @var{lists} is a u8vector, and you want to use one of three special types allowed to @code{glCallLists}, namely @code{GL_2_BYTES}, @code{GL_3_BYTES}, and @code{GL_4_BYTES}. @end defun @c ---------------------------------------------------------------------- @node Vertex arrays, Lighting, Display lists, OpenGL API @section Vertex arrays Scheme version of APIs doesn't have @var{GLenum type} argument in C API, since Gauche-gl can figure out the type by passed vectors. Scheme API of @code{gl-*-array} has @var{offset} optional argument, by which you can pass the GL the values beginning from the @var{offset}-th element of the passed uniform vector. This isn't in GL C API, since you can just offset the pointer in C. NOTE: it is caller's responsibility to guarantee the passed vector has enough length. GL doesn't have an interface to specify the boundary, so Gauche can't detect an invalid length vector. @defun gl-vertex-pointer size vec &optional stride offset Sets the vertex array. @var{Size} specifies the number of scalar values per vertex (2, 3, or 4), and @var{vec} provides the actual value in either f32, f64, s32 or s16vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-normal-pointer vec &optional stride offset Sets the normal array. @var{Vec} should be either a f32, f64, s32 or s16vector, where each consecutive triplet specifies a normal vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-color-pointer size vec &optional stride offset Sets the color array. @var{Size} specifies the number of scalar values per color (3 or 4), and @var{vec} provides the actual values in either f32, f64, u32, u16, u8, s32, s16, or s8vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-index-pointer vec &optional stride offset Sets the index array. @var{Vec} can be either s32, s16, u8, f32, or f64vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-tex-coord-pointer size vec &optional stride offset Sets the texture coordinate array. @var{Size} specifies the number of scalar values per texture coordinate (1, 2, 3 or 4), and @var{vec} provides the actual values in either f32, f64, s32 or s16vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-edge-flag-pointer vec &optional stride offset Sets the edge flag array. @var{Vec} must be a GL boolean vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-array-element ith Dereference @var{ith} vertex information of the currently enabled arrays. @end defun @defun gl-draw-elements mode indices Issues geometric primitive calls consists of the vertex information of the currently enabled arrays, each of which is specified by @var{indices}, which should be either a u8, u16 or u32vector. @var{Mode} is the same as of @code{gl-begin}. @end defun @defun gl-draw-range-elements mode start end indices [GL1.2] Like @code{gl-draw-elements}, but limits the range of indices between @var{start} and @var{end}, inclusive. GL driver may take advantage of the information for better performance. @end defun @defun gl-draw-arrays mode first count This is more straightforward. Starting from @var{first} index, @var{count} vertices is wrtten in the drawing mode @var{mode} (same as of @code{gl-begin}), taken from the current enabled arrays. @end defun @defun gl-interleaved-arrays format vec &optional stride offset @var{Vec} must be a f32vector. It contains various information (e.g. vertex position, color and texture coordinate) interleaved, in the way specified by @var{format}. In Scheme API, we only allow uniform vector as @var{vec}, so you can't use the format that mixes float and integer, such as @code{GL_C4UB_V2F}. @end defun @c ---------------------------------------------------------------------- @node Lighting, Pixels, Vertex arrays, OpenGL API @section Lighting @defun gl-shade-model mode Sets the shading model, either @code{GL_SMOOTH} or @code{GL_FLAT}. @end defun @defun gl-light light pname param Creates a light specified by @var{light}, which is one of @code{GL_LIGHT0}, @dots{}, @code{GL_LIGHT7}, and sets a characteristics named by @var{pname} with the value @var{param}. Possible values as @var{pname} and acceptable types of @var{param} are as follows. @table @asis @item @code{GL_AMBIENT}, @code{GL_DIFFUSE}, @code{GL_SPECULAR}, @code{GL_POSITION} Accepts an f32 or s32vector of size 4. @item @code{GL_SPOT_DIRECTION} Accepts an f32 or s32vector of size 3. @item @code{GL_SPOT_EXPONENT}, @code{GL_SPOT_CUTOFF}, @code{GL_CONSTNAT_ATTENUATION}, @code{GL_LINEAR_ATTENUATION}, @code{GL_QUADRATIC_ATTENUATION} Accepts a real number (@code{glLightf} is used). @end table @end defun @defun gl-get-light light pname Returns the value of the property @var{pname} of the light @var{light}. Returned value can be f32vector or a real number. @end defun @defun gl-light-model pname param Sets the value of the property @var{pname} of the lighting model. Possible @var{pname} and its allowed @var{param} is as follows. @table @asis @item @code{GL_LIGHT_MODEL_AMBIENT} Accepts f32 or s32vector of size 4. @item @code{GL_LIGHT_MODEL_LOCAL_VIEWER}, @code{GL_LIGHT_MODEL_TWO_SIDE} Accepts any Scheme value, which is interpreted as a boolean value. (That is, you have to pass @code{#f} to turn off these properties, and any other value to turn on. @item @code{GL_LIGHT_MODEL_COLOR_CONTROL} Accepts an enum value either @code{GL_SINGLE_COLOR} or @code{GL_SEPARATE_SPECULAR_COLOR}. @end table @end defun @defun gl-matrial face pname param Sets the current material property. @var{Face} may be either @code{GL_FRONT}, @code{GL_BACK}, or @code{GL_FRONT_AND_BACK}. Possible values of @var{pname} and acceptable @var{param} types are as follows. @table @asis @item @code{GL_AMBIENT}, @code{GL_DIFFUSE}, @code{GL_AMBIENT_AND_DIFFUSE}, @code{GL_SPECULAR}, @code{GL_EMISSION} Accepts f32 or s32vector of size 4. @item @code{GL_SHININESS} Accepts a single real number (@code{glMatrialf} is called). @item @code{GL_COLOR_INDEXES} Accepts f32 or s32vector of size 3. @end table @end defun @defun gl-get-material face pname Returns the current material property of @var{face} and @var{pname}. The type of returned value may be f32vector, s32vector (only for @code{GL_COLOR_INDEXES}), or a real number. @end defun @defun gl-color-material face mode Makes the material property @var{mode} (e.g. @code{GL_AMBIENT} etc.) of the face @var{face} follow the current color set by @code{gl-color}. @end defun @c ---------------------------------------------------------------------- @node Pixels, Texture mapping, Lighting, OpenGL API @section Pixels, bitmaps and images @subheading Pixel operations @defun gl-bitmap width height xbo ybo xbi ybi bitmap Draws a bitmap. @var{Width} and @var{height} gives the dimension of the bitmap. @var{Xbo}, @var{ybo}, @var{xbi}, and @var{ybi} specifies the origin and increment of the current raster position. @var{Bitmap} is the actual bitmap data, packed in a u8vector. @end defun @defun gl-read-pixels x y width height format type Reads pixel data from the framebuffer. Returns the pixel data in a uniform vector of the type determined by @var{format} and @var{type} (check out OpenGL doc to find out the actual data format). @end defun @defun gl-draw-pixels width height format type pixels Draws a pixel data @var{pixels} at the current raster position. @var{Pixels} must be a uniform vector compatible to the specified @var{format} and @var{type} values. @end defun @defun gl-copy-pixels x y width height buffer Copies pixel data in a rectangle area of the framebuffer, specified by lower-left corner (@var{x}, @var{y}) and dimensions (@var{width}, @var{height}). @var{Buffer} specifies which buffer is used, and should be one of @code{GL_COLOR}, @code{GL_STENCIL} or @code{GL_DEPTH}. @end defun @defun gl-pixel-store pname param Sets the pixel stroage models. Check out the OpenGL doc for the possible @var{pname} and @var{param} values. @end defun @defun gl-pixel-transfer pname param Sets the pixel transfer modes. Check out the OpenGL doc for the possible @var{pname} and @var{param} values. @end defun @defun gl-pixel-map map values Sets the pixel map table @var{map} with @var{values}, which must be either u16, u32 or f32vecotor. Check out the OpenGL doc for the possible @var{map} values. @end defun @defun gl-pixel-zoom xfactor yfactor Sets the magnification/reduction factors for pixel-write operations. @end defun @defun gl-get-pixel-map map &optional type Returns the current pixel map table as an uniform vector specified by @var{type}, which must be either a class @code{} (default), @code{}, or @code{}. @end defun @defun gl-get-pixel-map! map values Like @code{gl-get-pixel-map}, but instead of allocating a new vector, it stores the result to a uniform vector passed to @var{values}. It is a caller's responsibility to ensure @var{values} has enough size. @end defun @subheading Color tables @defun gl-color-table target internal-format width format type data [GL_ARB_imaging] Specifies one of the color table @var{target}. @var{Data} should be a uniform vector compatible to the @var{format} and @var{type} parameters. @end defun @defun gl-color-table-parameter target pname param [GL_ARB_imaging] Sets the color table parameter @var{pname} (either @code{GL_COLOR_TABLE_SCALE} or @code{GL_COLOR_TABLE_BIAS}), of the color table @var{target}. @var{Param} must be an f32 or s32vector of size 4. @end defun @defun gl-copy-color-table target internal-format x y width [GL_ARB_imaging] Creates a color table @var{target} using framebuffer data. The pixels are read from the current buffer for read (specified by @code{glReadBuffer}). @end defun @defun gl-color-sub-table target start count format type data [GL_ARB_imaging] Replaces a part of color table @var{target}, starting @var{start} and @var{count} entries. Values are given in @var{data} as a uniform vector compatible to the @var{format} and @var{type} arguments. @end defun @defun gl-copy-color-sub-table target start x y width [GL_ARB_imaging] Replaces a part of color table entries using framebuffer data. @end defun @defun gl-get-color-table! target format type data [GL_ARB_imaging] Reads the color table @var{target} and store it in @var{data}, in the format specified by @var{format} and @var{type}. @var{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments. The caller must ensure that @var{data} has enough size to contain the result. @end defun @subheading Convolutions @defun gl-convolution-filter-2d target internal-format width height format type data [GL_ARB_imaging] Defines a 2D convolution filter. @var{Target} must be GL_CONVOLUTION_2D. @code{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-copy-convolution-filter-2d target internal-format x y width height [GL_ARB_imaging] Defines a 2D convolution filter, taking the convolution filter data from the current color buffer to read. @end defun @defun gl-separable-filetr-2d target internal-format width height format type row column [GL_ARB_imaging] Defines a 2D convolution filter by a product of a 1D row vector and 1D column vector. @var{Target} must be GL_SEPARABLE_2D. Both @var{row} and @var{column} must be a uniform vector, compatible with the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-convolution-filter-1d target internal-format width format type data [GL_ARB_imaging] Defines 1D convolution filter. @var{Target} must be GL_CONVOLUTION_1D. @code{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-copy-convolution-filter-1d target internal-format x y width [GL_ARB_imaging] Defines 1D convolution filter, taking the convolution filter data from the current color buffer to read. @end defun @defun gl-convolution-parameter target pname param [GL_ARB_imaging] Sets a parameter for a convolution filter @var{target}, which can be either @code{GL_CONVOLUTION_2D}, @code{GL_SEPARABLE_2D}, or @code{GL_CONVOLUTION_1D}. Possible values of @var{pname} and their acceptable @var{param} are as follows. @table @asis @item @code{GL_CONVOLUTION_BORDER_MODE} Either one of the constants: @code{GL_REDUCE}, @code{GL_CONSTNAT_BORDER}, @code{GL_REPLICATE_BORDER} @item @code{GL_CONVOLUTION_FILTER_SCALE}, @code{GL_CONVOLUTION_FILTER_BIAS} An s32 or f32vector of size 4, specifying color values. @end table @end defun @subheading Histogram @defun gl-histogram target width internal-format sink [GL_ARB_imaging] Specifies the way the histogram data is stored. @var{Target} must be either @code{GL_HISTOGRAM} or @code{GL_PROXY_HISTOGRAM}. @var{Width} is the number of entires of the histogram, and has to be a power of 2. @var{Sink} is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline. @end defun @defun gl-reset-histogram target [GL_ARB_imaging] Resets the histogram counters. @var{Target} must be @code{GL_HISTOGRAM}. @end defun @defun gl-get-histogram target reset format type [GL_ARB_imaging] Returns histogram data in a uniform vector, whose type and size are determined by @var{format} and @var{type}. A boolean value @var{reset} specifies whether the histogram should be reset or not. @end defun @defun gl-get-histogram-parameter target pname [GL_ARB_imaging] Returns the parameter value of the histogram. @var{Pname} can be either one of @code{GL_HISTOGRAM_WIDTH}, @code{GL_HISTOGRAM_FORMAT}, @code{GL_HISTOGRAM_RED_SIZE}, @code{GL_HISTOGRAM_GREEN_SIZE}, @code{GL_HISTOGRAM_BLUE_SIZE}, @code{GL_HISTOGRAM_ALPHA_SIZE}, @code{GL_HISTOGRAM_LUMINANCE_SIZE}, or @code{GL_HISTOGRAM_SINK}. The returned value is an integer, except the case of @code{GL_HISTOGRAM_SINK}, which returns a boolean value. @end defun @subheading Minmax @defun gl-minmax target internal-format sink [GL_ARB_imaging] Computes the minimum and maximum pixel values for an image. @var{Target} must be @code{GL_MINMAX}. @var{Sink} is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline. @end defun @defun gl-get-minmax target reset format type [GL_ARB_imaging] Returns the results of the minmax operation in a uniform vector, whose type and size are determined by the @var{format} and @var{type} arguments. A boolean value @var{reset} specifies whether the histogram should be reset or not. @end defun @defun gl-reset-minmax target [GL_ARB_imaging] Resets the minmax counter. @end defun @defun gl-get-minmax-parameter target pname [GL_ARB_imaging] Returns the parameter value of the histogram. @var{Pname} can be either @code{GL_MINMAX_SINK} (returns a boolean value) or @code{GL_MINMAX_FORMAT} (returns an integer). @end defun @c ---------------------------------------------------------------------- @node Texture mapping, Framebuffers, Pixels, OpenGL API @section Texture mapping @subheading Defining textures @defun gl-tex-image-1d target level internalformat width border format type texels @defunx gl-tex-image-2d target level internalformat width height border format type texels @defunx gl-tex-image-3d target level internalformat width height depth border format type texels Defines an 1D, 2D or 3D texture. 3D texture is available only if the GL version is 1.2 or later. The @var{target} parameter can be @code{GL_TEXTURE_1D} or @code{GL_PROXY_TEXTURE_1D} for @code{gl-tex-image-1d}, etc. The @var{level} parameter can be used for multiresolution textures; if this is a single resolution texture, pass 0. @var{Width}, @var{height}, and @var{depth} specify the dimensions of the texture. @var{Border} can be 0 or 1, specifying the border. The actual texture data is passed to the @var{texels} argument in a uniform vector, which should be compatible with the @var{format} and @var{type} parameters and match the size calculated by @var{width}, @var{height} and @var{depth} (and possibly the pixel store setting). @end defun @defun gl-copy-tex-image-1d target level internal-format x y width border @defunx gl-copy-tex-image-2d target level internal-format x y width height border Cerates a 1D or 2D texture from the framebuffer data. @end defun @defun gl-tex-sub-image-1d target level xoffset width format type texels @defunx gl-tex-sub-image-2d target level xoffset yoffset width height format type texels @defunx gl-tex-sub-image-3d target level xoffset yoffset zoffset width height depth format type texels Replaces a part of the current 1D, 2D or 3D texture image by @var{texels}. 3D texture is available only if the GL version is 1.2 or later. @end defun @defun gl-copy-tex-sub-image-1d target level xoffset x y width @defunx gl-copy-tex-sub-image-2d target level xoffset yoffset x y width height @defunx gl-copy-tex-sub-image-3d target level xoffset yoffset zoffset x y width height Replaces a part of the current 1D, 2D or 3D texture image by the data from the framebuffer. 3D texture is available only if the GL version is 1.2 or later. @end defun @subheading Texture parameters @defun gl-tex-parameter target pname param Sets parameters for the current texture. @var{Target} can be either @var{GL_TEXTURE_1D}, @code{GL_TEXTURE_2D} or @var{GL_TEXTURE_3D}. Possible values for @var{pname}, and accepted type of @var{param} for each @var{pname}, are shown below. @table @code @item GL_TEXTURE_WRAP_S @item GL_TEXTURE_WRAP_T @item GL_TEXTURE_WRAP_R @item GL_TEXTURE_BASE_LEVEL @item GL_TEXTURE_MAX_LEVEL @item GL_TEXTURE_MAG_FILTER @item GL_TEXTURE_MIN_FILTER @var{Param} must be an integer. @item GL_TEXTURE_PRIORITY @item GL_TEXTURE_MIN_LOD @item GL_TEXTURE_MAX_LOD @var{Param} must be a real number. @item GL_TEXTURE_BORDER_COLOR @var{Param} must be an f32vector of size 4, representing a color. @end table @end defun @defun gl-get-tex-parameter target pname Obtains the parameter of the current texture, set by @code{gl-tex-parameter}. @end defun @defun gl-get-tex-level-parameter target level pname Obtains the parameter of the level @var{level} of the current texture specified by @var{target}, which can be either @code{GL_TEXTURE_1D}, @code{GL_TEXTURE_2D}, @code{GL_TEXTURE_3D}, @code{GL_PROXY_TEXTURE_1D}, @code{GL_PROXY_TEXTURE_2D}, or @code{GL_PROXY_TEXTURE_3D}. Possible values for @var{pname} is either one of the following constants: @code{GL_TEXTURE_WIDTH}, @code{GL_TEXTURE_HEIGHT}, @code{GL_TEXTURE_DEPTH}, @code{GL_TEXTURE_BORDER}, @code{GL_TEXTURE_INTERNAL_FORMAT}, @code{GL_TEXTURE_RED_SIZE}, @code{GL_TEXTURE_GREEN_SIZE}, @code{GL_TEXTURE_BLUE_SIZE}, @code{GL_TEXTURE_ALPHA_SIZE}, @code{GL_TEXTURE_LUMINANCE_SIZE}, or @code{GL_TEXTURE_INTENSITY_SIZE}. This procedure returns an integer. @end defun @subheading Mipmaps @defun glu-build-1d-mipmaps target internal-format width format type texels @defunx glu-build-2d-mipmaps target internal-format width height format type texels @defunx glu-build-3d-mipmaps target internal-format width height depth format type texels Constructs a serids of mipmaps and calls @code{gl-tex-image-*d} to load the images. Returns 0 on success, or a GLU error code on failure. @var{Texels} is a uniform vector, that must be compatible with @var{format} and @var{type} arguments, and must have the enough length as specified by @var{width}, @var{height} and @var{depth} parameters. @end defun @defun glu-build-1d-mipmap-levels target internal-format width format type level base max texels @defunx glu-build-2d-mipmap-levels target internal-format width height format type level base max texels @defunx glu-build-3d-mipmap-levels target internal-format width height depth format type level base max texels Like @code{glu-build-*d-mipmaps}, but you can specify the level of @var{texels}, and the range of levels to be generated by the @var{base} and @var{max} parameters. It is used to generate a subset of mipmaps. Returns 0 on success, or a GLU error code on failure. @var{Texels} is a uniform vector, that must be compatible with @var{format} and @var{type} arguments, and must have the enough length as specified by @var{width}, @var{height} and @var{depth} parameters. @end defun @subheading Texture objects @defun gl-gen-textures size Returns @var{size} new names for texture objects in a u32vector. @end defun @defun gl-is-texture name Returns @code{#t} if an integer @var{name} is the name of a texture that has been bound and not deleted yet, @code{#f} otherwise. @end defun @defun gl-bind-texture target name Bind the current texture (specified by @var{target}, e.g. @code{GL_TEXTURE_2D}) to the integer @var{name}. If there's already a texture bound to @var{name}, it becomes current. Otherwise a new texture object is created and made current. @end defun @defun gl-delete-textures names Delets textures. @var{Names} must be a u32vector contains integer names of the texture objects to be deleted. @end defun @defun gl-are-textures-resident! names residences @var{Names} must be a u32vector contains integer names of the texture objects, and @var{residences} must be a GL boolean vector of the same length as @var{names}. If all textures named in @var{names} are resident, @code{#t} is returned and @var{residences} is not modified. Othewise, @code{#f} is returned and @var{residences} is modified to contain @code{#t} if the corresponding texture in @var{names} is resident, @code{#f} othewise. @end defun @defun gl-prioritize-textures names priorities Sets the prioridies of texture objects named by @var{names} to the corresponding entry of @var{priorities} @var{Names} must be a u32vectore and @var{priorities} must be an f32vector, and the lengths of both vectors must match. @end defun @subheading Texture environment and coordinates @defun gl-tex-env target pname param Sets the current texturing function. @var{Target} must be @code{GL_TEXTURE_ENV}. Possible values of @var{pname} and accepted @var{param} for each value is as follows. @table @code @item GL_TEXTURE_ENV_MODE One of @code{GL_DECAL}, @code{GL_REPLACE}, @code{GL_MODULATE} or @code{GL_BLEND}. @item GL_TEXTURE_ENV_COLOR f32vector of size 4 to specify the color. @end table @end defun @defun gl-tex-gen coord pname param Specifies the functions for automatic texture coordinate generation. @var{Coord} specifies the coordinates, either one of @code{GL_S}, @code{GL_T}, @code{GL_R} or @code{GL_Q}. Possible values of @var{pname} and accepted @var{param} for each value is as follows. @table @code @item GL_TEXTURE_GEN_MODE Either @code{GL_OBJECT_LINEAR}, @code{GL_EYE_LINEAR} or @code{GL_SPHERE_MAP}. @item GL_OBJECT_PLANE @item GL_EYE_PLANE An s32, f32 or f64vector of size 4 to specify the plane. @end table @end defun @subheading Multitexturing @defun gl-active-texture-arb texunit [GL_ARB_multitexture] Selects the texture unit that is currently modified by texturing routines. @var{Texunit} is a constant @code{GL_TEXTUREi_ARB}, where @var{i} is 0 to the maximum number of the supported texture units. @end defun @defun gl-multi-tex-coord-arb texunit coords @defunx gl-multi-tex-coord-arb texunit s &optional t r q [GL_ARB_multitexture] Specifies the texture coordinate of the texture unit @var{texunit}. In the first form, you can pass either an f32, f64, s32, or s16vector of length 1 to 4. In the second form, @var{s}, @var{t}, @var{r} and @var{q} must be real numbers. @end defun @defun gl-client-active-texture-arb texunit Selects the current texture unit for specifying texutre-coordinate data with vertex arrays. @end defun @c ---------------------------------------------------------------------- @node Framebuffers, Selection and feedback, Texture mapping, OpenGL API @section Framebuffers @subheading Clearing buffers @defun gl-clear-color r g b a Sets the current clearing color. Each color value sould be a real number, and is clamped to @code{[0.0,1.0]}. @end defun @defun gl-clear-index c Sets the current clearing color (in color index mode). @var{c} must be a real number. @end defun @defun gl-clear-depth depth Sets the current clearing depth value. @var{Depth} must be a real number and clamped to @code{[0.0,1.0]}. @end defun @defun gl-clear-stencil s Sets the current clearing value of the stencil buffer. @end defun @defun gl-clear-accum r g b a Sets the current clearing value of accumulation buffer. @end defun @defun gl-clear mask Clears the specified buffer. @var{Mask} is a logical-or of the following constants. @table @code @item GL_COLOR_BUFFER_BIT @item GL_DEPTH_BUFFER_BIT @item GL_ACCUM_BUFFER_BIT @item GL_STENCIL_BUFFER_BIT @end table @end defun @subheading Selecting color buffers @defun gl-draw-buffer mode Selects (a) buffer(s) to which the image is rendered. Possible @var{mode} values are: @code{GL_FRONT}, @code{GL_FRONT_LEFT}, @code{GL_FRONT_RIGHT}, @code{GL_BACK}, @var{GL_BACK_LEFT}, @var{GL_BACK_RIGHT}, @code{GL_LEFT}, @code{GL_RIGHT}, @code{GL_AUXi}, @code{GL_FRONT_AND_BACK}, and @code{GL_NONE}. @end defun @defun gl-read-buffer mode Selects a color buffer as the source for reading pixels. Possible @var{mode} values are the same as @code{gl-draw-buffer} except @code{GL_FRONT_AND_BACK} and @code{GL_NONE}. @end defun @subheading Masking buffers @defun gl-index-mask mask In color index mode, sets the mask of the color-index buffer. @var{Mask} is an exact integer. @end defun @defun gl-color-mask r g b a @var{R}, @var{g}, @var{b} and @var{a} are boolean values to specify whether the corresponding color channel should be written to the color buffer or not. @end defun @defun gl-depth-mask flag @var{Flag} is a boolean value specifies whether depth buffer should be written or not. @end defun @defun gl-stencil-mask mask Sets the mask bit pattern for the stencil buffer. @var{Mask} is an exact integer. @end defun @subheading Testing and operating on fragments @defun gl-scissor x y width height Sets the scissor rectangle. If the scissor test is enabled (use @code{(gl-enable GL_SCISSOR_TEST)}), only the pixels that lie inside the rectangle are written. @end defun @defun gl-alpha-func func ref Sets the reference value and comparison function for the alpha test. @var{Func} may be either one of @code{GL_NEVER}, @code{GL_ALWAYS}, @code{GL_LESS}, @code{GL_LEQUAL}, @code{GL_EQUAL}, @code{GL_GEQUAL}, @code{GL_GREATER}, or @code{GL_NOTEQUAL}. @var{Ref} sets the reference value, a real number clamped to be between 0.0 and 1.0. @end defun @defun gl-stencil-func func ref mask Sets the comparison function, the reference value, and a mask for stencil test. @var{Func} specifies the funciton, and its possible value is the same as @code{gl-alpha-func}'s. @var{Ref} is an integer reference value, and @var{mask} is an integer specifying bitwise mask. Before the comparison, the reference value and the fragment value are taken bitwise AND by @var{mask}. @end defun @defun gl-stencil-op func zfail zpass Speficies how the stencil buffer should be modified by the result of the stencil test. Each three parameter can take one of the following values independently: @code{GL_KEEP}, @code{GL_ZERO}, @code{GL_REPLACE}, @code{GL_INCR}, @code{GL_DECR}, or @code{GL_INVERT}. @end defun @defun gl-depth-func func Sets the comparison function for the depth test. @var{Func} may be one of the following constant value: @code{GL_NEVER}, @code{GL_ALWAYS}, @code{GL_LESS}, @code{GL_LEQUAL}, @code{GL_EQUAL}, @code{GL_GEQUAL}, @code{GL_GREATER}, or @code{GL_NOTEQUAL}. @end defun @defun gl-depth-range nearv farv Defines an encoding for z-coordinates. @var{Nearv} and @var{farv} define the minimum and maximum values that can be stored in the depth buffer. By default, they're 0.0 and 1.0, respectively. @end defun @defun gl-logic-op opcode Selects the logical operation to be performed, given an incoming (source) fragment and the pixel currently in the color buffer (destination). @var{Opcode} may be one of the following values: @code{GL_CLEAR}, @code{GL_COPY}, @code{GL_NOOP}, @code{GL_SET}, @code{GL_COPY_INVERTED}, @code{GL_INVERT}, @code{GL_AND_REVERSE}, @code{GL_OR_REVERSE}, @code{GL_AND}, @code{GL_OR}, @code{GL_NAND}, @code{GL_NOR}, @code{GL_XOR}, @code{GL_EQUIV}, @code{GL_AND_INVERTED} or @code{GL_OR_INVERTED}. @end defun @defun gl-accum op value Sets the accumulation buffer operation mode. @var{Op} may be one of the following values: @table @code @item GL_ACCUM Reads each pixel from the current selected buffer to read (by @code{gl-read-buffer}), multiplies its values by @var{value}, and adds the result into the accumulation buffer. @item GL_LOAD Same as @code{GL_ACCUM} but replacing the accumulation buffer by the result of multiplication, instead of adding it. @item GL_RETURN Takes the values from accumulation buffer, multiplies them with @var{value}, then write it to the current color buffer to write (by @code{gl-draw-buffer}). @item GL_ADD Adds @var{value} to each pixel in the accumulation buffer and write it back. @item GL_MULT Multiplies @var{value} to each pixel in the accumulation buffer and write it back. The result value is clamped to [-1.0, 1.0]. @end table @end defun @c ---------------------------------------------------------------------- @node Selection and feedback, Projection, Framebuffers, OpenGL API @section Selection and feedback @defun gl-feedback-buffer type buffer @end defun @defun gl-select-buffer buffer @end defun @defun gl-render-mode mode @end defun @defun gl-pass-through token @end defun @defun gl-init-names @end defun @defun gl-load-name name @end defun @defun gl-push-name name @end defun @defun gl-pop-name @end defun @c ---------------------------------------------------------------------- @node Projection, Quadrics, Selection and feedback, OpenGL API @section Projection @defun glu-pick-matrix x y w h vp @end defun @defun glu-project objx objy objz model-mat proj-mat vp @end defun @defun glu-un-project winx winy winz model-mat proj-mat vp @end defun @defun glu-project! win obj model-mat proj-mat vp @end defun @defun glu-un-project! obj win model-map proj-mat vp @end defun @c ---------------------------------------------------------------------- @node Quadrics, Nurbs, Projection, OpenGL API @section Quadrics @deftp {Class} @end deftp @defun glu-quadric-draw-style quad style @defvr {Constant} GLU_POINT @defvrx {Constant} GLU_LINE @defvrx {Constant} GLU_FILL @defvrx {Constant} GLU_SILHUETTE @end defvr @end defun @defun glu-quadric-orientation quad orientation @defvr {Constant} GLU_OUTSIDE @defvrx {Constant} GLU_INSIDE @end defvr @end defun @defun glu-quadric-normals quad normals @defvr {Constant} GLU_SMOOTH @defvrx {Constant} GLU_FLAT @defvrx {Constant} GLU_NONE @end defvr @end defun @defun glu-quadric-texture quad texcoords @end defun @defun glu-cylinder quad base-radius top-radius height slices stacks @end defun @defun glu-sphere quad radius slices stacks @end defun @defun glu-disk quad inner-radius outer-radius slices loops @end defun @defun glu-partial-disk quad inner-radius outer-radius slices loops start-angle sweep-angle @end defun @c ---------------------------------------------------------------------- @node Nurbs, Polygon tesselation, Quadrics, OpenGL API @section Nurbs @deftp {Class} @end deftp @defun glu-load-sampling-matrices nurbs model-matrix proj-matrix viewport @end defun @defun glu-nurbs-property nurbs property value @end defun @defun glu-get-nurbs-property nurbs property @end defun @defun glu-begin-curve nurbs @end defun @defun glu-end-curve nurbs @end defun @defun glu-nurbs-curve nurbs knot stride ctlarray order type @end defun @defun glu-begin-surface nurbs @end defun @defun glu-end-surface nurbs @end defun @c ---------------------------------------------------------------------- @node Polygon tesselation, Programmable shaders, Nurbs, OpenGL API @section Polygon tesselation @deftp {Class} @end deftp @c ---------------------------------------------------------------------- @node Programmable shaders, , Polygon tesselation, OpenGL API @section Programmable shaders @subheading Shader objects @defun gl-create-shader-object-arb type [GL_ARB_shader_objects] Creates a new shader object and returns its handle. @var{Type} can be either @code{GL_VERTEX_SHADER_ARB} or @code{GL_FRAGMENT_SHADER_ARB}. @end defun @defun gl-shader-source-arb shader strings [GL_ARB_shader_objects] Sets the source code of the shader, whose handle is @var{shader}. You can give the source code as a list of strings to @var{strings}. All strings are concatenated internally in the OpenGL driver. @end defun @defun gl-compile-shader-arb shader [GL_ARB_shader_objects] Compile the source code attached to the shader, whose handle is @var{shader}. You can query the result of the compilation by passing @code{GL_OBJECT_COMPILE_STATUS_ARB} to @code{gl-get-object-parameter-arb}; it returns @code{#t} if the compilation succeeded, or @code{#f} if failed. The information about the compilation can be obtained by @code{gl-get-info-log-arb}. @end defun @defun gl-create-program-object-arb [GL_ARB_shader_objects] Creates a new program object and returns its handle. @end defun @defun gl-attach-object-arb program shader [GL_ARB_shader_objects] Attach a shader whose handle is @var{shader} to the program whose handle is @var{program}. @end defun @defun gl-detach-object-arb program shader [GL_ARB_shader_objects] Detach a shader from a program. @end defun @defun gl-link-program-arb program [GL_ARB_shader_objects] Link the program object. The result of linking can be queried by passing @code{GL_OBJECT_LINK_STATUS_ARB} to @code{gl-get-object-parameter-arb}. @end defun @defun gl-use-program-object-arb program [GL_ARB_shader_objects] Installs the program to the current rendering state. @end defun @defun gl-delete-object-arb handle [GL_ARB_shader_objects] Deletes either a shader object or a program object specified by @var{handle}. @end defun @defun gl-get-object-parameter-arb object pname [GL_ARB_shader_objects] Queries the value of @var{pname} of the shader or the program specified by @var{object}. The following values are accepted as @var{pname}: @code{GL_OBJECT_TYPE_ARB}, @code{GL_OBJECT_SUBTYPE_ARB}, @code{GL_OBJECT_DELETE_STATUS_ARB}, @code{GL_OBJECT_COMPILE_STATUS_ARB}, @code{GL_OBJECT_LINK_STATUS_ARB}, @code{GL_OBJECT_VALIDATE_STATUS_ARB}, @code{GL_OBJECT_INFO_LOG_LENGTH_ARB}, @code{GL_OBJECT_ATTACHED_OBJECTS_ARB}, @code{GL_OBJECT_ACTIVE_ATTRIBUTES_ARB}, @code{GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB}, @code{GL_OBJECT_ACTIVE_UNIFORMS_ARB}, @code{GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB}, and @code{GL_OBJECT_SHADER_SOURCE_LENGTH_ARB}. The procedure returns an integer value. @end defun @defun gl-get-shader-source-arb shader [GL_ARB_shader_objects] Returns the shader source code of a shader object @var{shader} in a string. @end defun @defun gl-get-info-log-arb handle [GL_ARB_shader_objects] Returns the information log of an object pointed by @var{handle}. @end defun @defun gl-get-handle-arb pname [GL_ARB_shader_objects] Returns the handle to an object that is used in the current state. The only argument accepted currently as @var{pname} is @code{GL_PROGRAM_OBJECT_ARB}, which returns the handle to the current program object. @end defun @defun gl-get-attached-objects-arb program [GL_ARB_shader_objects] Rethrns a vector of GL object handles that are attached to the @var{program}. @end defun @defun gl-validate-program-arb program [GL_ARB_shader_objects] Checks whether the @var{program} can execute in the current GL state. The result is stored in @var{program}'s log. @end defun @subheading Specifying vertex attributes @defun gl-vertex-attrib-arb index values @defunx gl-vertex-attrib-arb index v0 &rest v1 v2 v3 [GL_ARB_vertex_program] Sets the generic vertex attribute specified by @var{index}. In the first form, you can pass f32, f64, or s16vector of size 1 to 4, or u8, s8, u16, s32, or u32vector of size 4. In the second form, you can pass 1 to 4 real numbers (they are interpreted as C doubles and @code{glVertexAttrib4dARB} is called). @end defun @defun gl-vertex-attrib-4n-arb index values @defunx gl-vertex-attrib-4n-arb index v0 v1 v2 v3 [GL_ARB_vertex_program] These variations can be used to pass normalized values. The first form accepts s8, u8, s16, u16, s32, u32, f32 and f64vector of size 4. The second value takes four integers, whose lower 8bits are taken as unsigned byte and passed to @code{glVertexAttrib4NubARB}. @end defun @defun gl-vertex-attrib-pointer-arb index size vec &optional normalized stride offset [GL_ARB_vertex_program] This is the generic version of vertex arrays. @var{Index} names the attribute, @var{size} specifies the number of components (1, 2, 3 or 4), and @var{vec} is a uniform vector that contains the array of values. The optional boolean @var{normalized} argument tells whether the passed integer values should be mapped to normalized range (@code{#t} or taken as are @code{#f}, default). The optional @var{stride} argument specifies the gap between each set of values within @var{vec}. The optional @var{offset} argument tells GL to take values beginning from the @var{offset}-th element of @var{vec}. @end defun @defun gl-enable-vertex-attrib-array-arb index @defunx gl-disable-vertex-attrib-array-arb index [GL_ARB_vertex_program] Enable or disable a vertex attribute array specified by @var{index}. @end defun @defun gl-bind-attrib-location-arb program index name [GL_ARB_vertex_shader] Associates a user-defined attribute variable in the program object @var{program} with an @var{index}-th generic vertex attribute. @var{Name} is a string of the name of user-defined attribute as appears in the shader program. @end defun @defun gl-get-attrib-location-arb program name [GL_ARB_vertex_shader] Returns an integer index of the user-defined attribute @var{name} in the @var{program}. Must be called after @var{program} is linked. @end defun @defun gl-get-active-attrib-arb program index [GL_ARB_vertex_shader] Obtains information about the @var{index}-th user-defined attribute in the @var{program}. Must be called after @var{program} is linked. It returns three values: the size of the attribute (1, 2, 3 or 4), the type of the attribute (an integer that matches one of the following constants: @code{GL_FLOAT}, @code{GL_FLOAT_VEC2_ARB}, @code{GL_FLOAT_VEC3_ARB}, @code{GL_FLOAT_VEC4_ARB}, @code{GL_FLOAT_MAT2_ARB}, @code{GL_FLOAT_MAT3_ARB}, or @code{GL_FLOAT_MAT4_ARB}.), and the name of the attribute. @end defun @subheading Specifying uniform variables @defun gl-get-uniform-location-arb program name [GL_ARB_shader_objects] Returns an integer location of the uniform variable @var{name} of the program @var{program}. @end defun @defun gl-uniform1-arb location vec @defunx gl-uniform1-arb location v0 @defunx gl-uniform2-arb location vec @defunx gl-uniform2-arb location v0 v1 @defunx gl-uniform3-arb location vec @defunx gl-uniform3-arb location v0 v1 v2 @defunx gl-uniform4-arb location vec @defunx gl-uniform4-arb location v0 v1 v1 v3 [GL_ARB_shader_objects] Sets a value of the uniform variable specified by @var{location}. @var{gl-uniform1-arb} sets a single component value (e.g. @code{float}) @var{gl-uniform2-arb} sets a double component value (e.g. @code{vec2}) etc. The first form of each function takes either an s32vector or f32vector. It can have a size multiple of the number of components to set an array uniform variable (e.g. you can pass an f32vector of size 8 to fill @code{vec2[2]}). The second form just sets the component(s) of a single uniform variable. The arguments @var{v0} to @var{v3} must be real numbers, and coerced to C @code{float} (i.e. @code{glUniform*fARB} is used). @end defun @defun gl-uniform-matrix2-arb location transpose v @defunx gl-uniform-matrix3-arb location transpose v @defunx gl-uniform-matrix4-arb location transpose v [GL_ARB_shader_objects] Sets a matrix uniform variable (or an array of matrix uniform variables) specified by @var{location}. A boolean flag @var{transpose} specifies whether the matrix should be transposed. The @var{v} argument must be a f32vector of size multiple of 4, 9, or 16, respectively. @end defun @defun gl-get-active-uniform-arb program index [GL_ARB_shader_objects] Returns informaton about the @var{index}-th uniform variable of @var{program}. Returns three values. The first one is the size, either 1, 2, 3 or 4. The second value is the type, which is an integer that matches one of the following constants: @code{GL_FLOAT}, @code{GL_FLOAT_VEC(1|2|3|4)_ARB}, @code{GL_INT}, @code{GL_INT_VEC(1|2|3|4)_ARB}, @code{GL_BOOL}, @code{GL_BOOL_VEC(1|2|3|4)_ARB}, @code{GL_FLOAT_MAT(2|3|4)_ARB}. And the third value is the name of the uniform variable. @end defun @subheading Vertex and fragment programs These APIs are for low-level vertex/fragment pipeline programming. @defun gl-gen-programs-arb n [GL_ARB_vertex_program] Generates @var{N} names (integers) for the new programs and returns them in an s32vector. @end defun @defun gl-delete-programs-arb programs [GL_ARB_vertex_program] Deletes programs whose names are specified by an s32vector @var{programs}. @end defun @defun gl-is-program-arb prog-id [GL_ARB_vertex_program] Returns @code{#t} if an integer @var{prog-id} refers to a valid program. @end defun @defun gl-bind-program-arb target prog-id [GL_ARB_vertex_program] Binds a program specified by @var{prog-id} to a @var{target}, which is either @code{GL_VERTEX_PROGRAM_ARB} or @var{GL_FRAGMENT_PROGRAM_ARB}. @end defun @defun gl-program-string-arb target format text [GL_ARB_vertex_program] Sets the source code of the program currently bound to the @var{target} (@code{GL_VERTEX_PROGRAM_ARB} or @var{GL_FRAGMENT_PROGRAM_ARB}). @var{Format} must be @code{GL_PROGRAM_FORMAT_ASCII_ARB}. @var{Text} is a string for the program source. @end defun @defun gl-program-env-parameter-arb target param-id args @defunx gl-program-env-parameter-arb target param-id arg0 arg1 arg2 arg3 @defunx gl-program-local-parameter-arb target param-id args @defunx gl-program-local-parameter-arb target param-id arg0 arg1 arg2 arg3 [GL_ARB_vertex_program] Sets the value of the environment and local parameter specified by @var{param-id} of the program currently bount to the @var{target}. In the first form of each, @var{args} must be either f32 or f64vector of size 4 or @code{} object. @end defun @c ====================================================================== @node GLUT API, Vectors and matrices, OpenGL API, Top @chapter GLUT API @c ---------------------------------------------------------------------- @menu * GLUT window manipulation:: * GLUT overlay:: * GLUT menu API:: * GLUT callbacks:: * GLUT colormap:: * GLUT state retrieval:: * GLUT font:: * GLUT pre-built models:: @end menu @node GLUT window manipulation, GLUT overlay, GLUT API, GLUT API @section GLUT window manipulation @defun glut-init args @end defun @defun glut-init-display-mode mode @end defun @defvr {Constant} GLUT_RGB @defvrx {Constant} GLUT_RGBA @defvrx {Constant} GLUT_INDEX @defvrx {Constant} GLUT_SINGLE @defvrx {Constant} GLUT_DOUBLE @defvrx {Constant} GLUT_ACCUM @defvrx {Constant} GLUT_ALPHA @defvrx {Constant} GLUT_DEPTH @defvrx {Constant} GLUT_STENCIL @defvrx {Constant} GLUT_MULTISAMPLE @defvrx {Constant} GLUT_STEREO @defvrx {Constant} GLUT_LUMINANCE @end defvr @defun glut-init-display-string string @end defun @defun glut-init-window-size width height @end defun @defun glut-init-window-position x y @end defun @defun glut-main-loop @end defun @defun glut-create-widnow name @end defun @defun glut-create-sub-window win x y width height @end defun @defun glut-destroy-window win @end defun @defun glut-post-redisplay @end defun @defun glut-post-window-redisplay win @end defun @defun glut-swap-buffers @end defun @defun glut-get-window @end defun @defun glut-set-window win @end defun @defun glut-set-window-title title @end defun @defun glut-set-icon-title title @end defun @defun glut-position-window x y @end defun @defun glut-reshape-window width height @end defun @defun glut-push-window @defunx glut-pop-window @end defun @defun glut-iconify-window @end defun @defun glut-show-window @defunx glut-hide-window @end defun @defun glut-full-screen @end defun @defun glut-set-cursor cursor @end defun @defvr {Constant} GLUT_CURSOR_RIGHT_ARROW @defvrx {Constant} GLUT_CURSOR_LEFT_ARROW @defvrx {Constant} GLUT_CURSOR_INFO @defvrx {Constant} GLUT_CURSOR_DESTROY @defvrx {Constant} GLUT_CURSOR_HELP @defvrx {Constant} GLUT_CURSOR_CYCLE @defvrx {Constant} GLUT_CURSOR_SPRAY @defvrx {Constant} GLUT_CURSOR_WAIT @defvrx {Constant} GLUT_CURSOR_TEXT @defvrx {Constant} GLUT_CURSOR_CROSSHAIR @defvrx {Constant} GLUT_CURSOR_UP_DOWN @defvrx {Constant} GLUT_CURSOR_LEFT_RIGHT @defvrx {Constant} GLUT_CURSOR_TOP_SIDE @defvrx {Constant} GLUT_CURSOR_BOTTOM_SIDE @defvrx {Constant} GLUT_CURSOR_LEFT_SIDE @defvrx {Constant} GLUT_CURSOR_RIGHT_SIDE @defvrx {Constant} GLUT_CURSOR_TOP_LEFT_CORNER @defvrx {Constant} GLUT_CURSOR_TOP_RIGHT_CORNER @defvrx {Constant} GLUT_CURSOR_BOTTOM_RIGHT_CORNER @defvrx {Constant} GLUT_CURSOR_BOTTOM_LEFT_CORNER @defvrx {Constant} GLUT_CURSOR_INHERIT @defvrx {Constant} GLUT_CURSOR_NONE @defvrx {Constant} GLUT_CURSOR_FULL_CROSSHAIR @end defvr @defun glut-warp-pointer x y @end defun @c ---------------------------------------------------------------------- @node GLUT overlay, GLUT menu API, GLUT window manipulation, GLUT API @section GLUT overlay @defun glut-establish-overlay @end defun @defun glut-remove-overlay @end defun @defun glut-use-layer layer @end defun @defun glut-post-overlay-redisplay @end defun @defun glut-post-window-overlay-redisplay win @end defun @defun glut-show-overlay @end defun @defun glut-hide-overlay @end defun @c ---------------------------------------------------------------------- @node GLUT menu API, GLUT callbacks, GLUT overlay, GLUT API @section GLUT menu API @defun glut-create-menu callback @end defun @defun glut-destroy-menu menu @end defun @defun glut-get-emnu @end defun @defun glut-set-menu menu @end defun @defun glut-add-menu-entry label value @end defun @defun glut-add-sub-menu label submenu @end defun @defun glut-change-to-menu-entry item label value @end defun @defun glut-change-to-sub-menu item label submenu @end defun @defun glut-remove-menu-item item @end defun @defun gult-attach-menu button @end defun @defun glut-detach-menu button @end defun @c ---------------------------------------------------------------------- @node GLUT callbacks, GLUT colormap, GLUT menu API, GLUT API @section GLUT callbacks @defun glut-display-func fn @end defun @defun glut-reshape-func fn @end defun @defun glut-keyboard-func fn @end defun @defvr {Constant} GLUT_KEY_F1 @defvrx {Constant} GLUT_KEY_F2 @defvrx {Constant} GLUT_KEY_F3 @defvrx {Constant} GLUT_KEY_F4 @defvrx {Constant} GLUT_KEY_F5 @defvrx {Constant} GLUT_KEY_F6 @defvrx {Constant} GLUT_KEY_F7 @defvrx {Constant} GLUT_KEY_F8 @defvrx {Constant} GLUT_KEY_F9 @defvrx {Constant} GLUT_KEY_F10 @defvrx {Constant} GLUT_KEY_F11 @defvrx {Constant} GLUT_KEY_F12 @defvrx {Constant} GLUT_KEY_LEFT @defvrx {Constant} GLUT_KEY_UP @defvrx {Constant} GLUT_KEY_RIGHT @defvrx {Constant} GLUT_KEY_DOWN @defvrx {Constant} GLUT_KEY_PAGE_UP @defvrx {Constant} GLUT_KEY_PAGE_DOWN @defvrx {Constant} GLUT_KEY_HOME @defvrx {Constant} GLUT_KEY_END @defvrx {Constant} GLUT_KEY_INSERT @end defvr @defun glut-mouse-func fn @end defun @defvr {Constant} GLUT_LEFT_BUTTON @defvrx {Constant} GLUT_MIDDLE_BUTTON @defvrx {Constant} GLUT_RIGHT_BUTTON @defvrx {Constant} GLUT_DOWN @defvrx {Constant} GLUT_UP @end defvr @defun glut-motion-func fn @end defun @defun glut-passive-motion-func fn @end defun @defun glut-entry-func fn @end defun @defvr {Constant} GLUT_LEFT @defvrx {Constant} GLUT_ENTERED @end defvr @defun glut-visibility-func fn @end defun @defvr {Constant} GLUT_NOT_VISIBLE @defvrx {Constant} GLUT_VISIBLE @end defvr @defun glut-idle-func fn @end defun @defun glut-timer-func millis fn value @end defun @defun glut-menu-state-func fn @end defun @defun glut-special-func fn @end defun @defun glut-spaceball-motion-func fn @end defun @defun glut-spaceball-rotate-func fn @end defun @defun glut-spaceball-button-func fn @end defun @defun glut-button-box-func fn @end defun @defun glut-dials-func fn @end defun @defun glut-tablet-motion-func fn @end defun @defun glut-tablet-button-func fn @end defun @defun glut-menu-status-func fn @end defun @defun glut-overlay-dislay-func fn @end defun @defun glut-window-status-func fn @end defun @defun glut-keyboard-up-func fn @end defun @defun glut-special-up-func fn @end defun @defun glut-joystick-func fn interval @end defun @c ---------------------------------------------------------------------- @node GLUT colormap, GLUT state retrieval, GLUT callbacks, GLUT API @section GLUT colormap @defun glut-set-color index r g b @end defun @defun glut-get-color index component @end defun @defvr {Constant} GLUT_RED @defvrx {Constant} GLUT_GREEN @defvrx {Constant} GLUT_BLUE @end defvr @defun glut-copy-colormap win @end defun @c ---------------------------------------------------------------------- @node GLUT state retrieval, GLUT font, GLUT colormap, GLUT API @section GLUT state retrieval @defun glut-get type @end defun @defvr {Constant} GLUT_WINDOW_X @defvrx {Constant} GLUT_WINDOW_Y @defvrx {Constant} GLUT_WINDOW_WIDTH @defvrx {Constant} GLUT_WINDOW_HEIGHT @defvrx {Constant} GLUT_WINDOW_BUFFER_SIZE @defvrx {Constant} GLUT_WINDOW_STENCIL_SIZE @defvrx {Constant} GLUT_WINDOW_DEPTH_SIZE @defvrx {Constant} GLUT_WINDOW_RED_SIZE @defvrx {Constant} GLUT_WINDOW_GREEN_SIZE @defvrx {Constant} GLUT_WINDOW_BLUE_SIZE @defvrx {Constant} GLUT_WINDOW_ALPHA_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_RED_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_GREEN_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_BLUE_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_ALPHA_SIZE @defvrx {Constant} GLUT_WINDOW_DOUBLEBUFFER @defvrx {Constant} GLUT_WINDOW_RGBA @defvrx {Constant} GLUT_WINDOW_PARENT @defvrx {Constant} GLUT_WINDOW_NUM_CHILDREN @defvrx {Constant} GLUT_WINDOW_COLORMAP_SIZE @defvrx {Constant} GLUT_WINDOW_NUM_SAMPLES @defvrx {Constant} GLUT_WINDOW_STEREO @defvrx {Constant} GLUT_WINDOW_CURSOR @defvrx {Constant} GLUT_SCREEN_WIDTH @defvrx {Constant} GLUT_SCREEN_HEIGHT @defvrx {Constant} GLUT_SCREEN_WIDTH_MM @defvrx {Constant} GLUT_SCREEN_HEIGHT_MM @defvrx {Constant} GLUT_MENU_NUM_ITEMS @defvrx {Constant} GLUT_DISPLAY_MODE_POSSIBLE @defvrx {Constant} GLUT_INIT_WINDOW_X @defvrx {Constant} GLUT_INIT_WINDOW_Y @defvrx {Constant} GLUT_INIT_WINDOW_WIDTH @defvrx {Constant} GLUT_INIT_WINDOW_HEIGHT @defvrx {Constant} GLUT_INIT_DISPLAY_MODE @defvrx {Constant} GLUT_ELAPSED_TIME @defvrx {Constant} GLUT_WINDOW_FORMAT_ID @end defvr @defun glut-device-get type @end defun @defvr {Constant} GLUT_HAS_KEYBOARD @defvrx {Constant} GLUT_HAS_MOUSE @defvrx {Constant} GLUT_HAS_SPACEBALL @defvrx {Constant} GLUT_HAS_DIAL_AND_BUTTON_BOX @defvrx {Constant} GLUT_HAS_TABLET @defvrx {Constant} GLUT_NUM_MOUSE_BUTTONS @defvrx {Constant} GLUT_NUM_SPACEBALL_BUTTONS @defvrx {Constant} GLUT_NUM_BUTTON_BOX_BUTTONS @defvrx {Constant} GLUT_NUM_DIALS @defvrx {Constant} GLUT_NUM_TABLET_BUTTONS @defvrx {Constant} GLUT_DEVICE_IGNORE_KEY_REPEAT @defvrx {Constant} GLUT_DEVICE_KEY_REPEAT @defvrx {Constant} GLUT_HAS_JOYSTICK @defvrx {Constant} GLUT_OWNS_JOYSTICK @defvrx {Constant} GLUT_JOYSTICK_BUTTONS @defvrx {Constant} GLUT_JOYSTICK_AXES @defvrx {Constant} GLUT_JOYSTICK_POLL_RATE @end defvr @defun glut-extension-supported name @end defun @defun glut-get-modifiers @end defun @defvr {Constant} GLUT_ACTIVE_SHIFT @defvrx {Constant} GLUT_ACTIVE_CTRL @defvrx {Constant} GLUT_ACTIVE_ALT @end defvr @defun glut-layer-get type @end defun @defvr {Constant} GLUT_OVERLAY_POSSIBLE @defvrx {Constant} GLUT_LAYER_IN_USE @defvrx {Constant} GLUT_HAS_OVERLAY @defvrx {Constant} GLUT_TRANSPARENT_INDEX @defvrx {Constant} GLUT_NORMAL_DAMAGED @defvrx {Constant} GLUT_OVERLAY_DAMAGED @end defvr @c ---------------------------------------------------------------------- @node GLUT font, GLUT pre-built models, GLUT state retrieval, GLUT API @section GLUT font @deftp {Class} @clindex glut-font @end deftp @defun glut-bitmap-character font character @end defun @defun glut-bitmap-width font character @end defun @defun glut-stroke-character font character @end defun @defun glut-stroke-width font character @end defun @defun glut-bitmap-length font string @end defun @defun glut-stroke-length font string @end defun @c ---------------------------------------------------------------------- @node GLUT pre-built models, , GLUT font, GLUT API @section GLUT pre-built models @defun glut-wire-sphere radius slices stacks @defunx glut-solid-sphere radius slices stacks @end defun @defun glut-wire-cone radius height slices stacks @defunx glut-solid-cone radius height slices stacks @end defun @defun glut-wire-cube size @defunx glut-solid-cube size @end defun @defun glut-wire-torus inner outer sides rings @defunx glut-solid-torus inner outer sides rings @end defun @defun glut-wire-dodecahedron @defunx glut-solid-dodecahedron @end defun @defun glut-wire-teapot size @defunx glut-soild-teapot size @end defun @defun glut-wire-octahedron @defunx glut-solid-octahedron @end defun @defun glut-wire-tetrahedron @defunx glut-solid-tetrahedron @end defun @defun glut-wire-icosahedron @defunx glut-solid-icosahedron @end defun @c ====================================================================== @node Vectors and matrices, Simple utilities, GLUT API, Top @chapter Vectors and matrices @deftp {Module} gl.math3d @mdindex gl.math3d The module provides vector and matrix operations useful for 3D computer graphics. Actually this module itself doesn't depend on GL; you can use this module alone to do matrix calculations. However, the structure of objects are designed so that they can be passed directly to Gauche-gl functions, reducing the overhead of type conversions. The purpose of this module is to provide reasonable performance. So the operations are fixed to 3D homogeneous coordinates, i.e. a vector is 4-element column vector, and a matrix is 4x4 square matrix. If you want more flexibility, @code{} class in @code{gauche.array} provides much more generic structures, trading performance. Elements of vectors and matrices are represented in @code{float} internally. When you retrieve each element individually, it is converted to @code{double}, so you might see some precision errors. There are lots of operations directly manipulate group of elements without retrieving each element to Scheme world, avoiding overhead of conversion. @end deftp @c ---------------------------------------------------------------------- @menu * Vectors and points:: * Vector arrays and point arrays:: * Matrices:: * Quaternions:: @end menu @node Vectors and points, Vector arrays and point arrays, Vectors and matrices, Vectors and matrices @section Vectors and points @deftp {Class} @deftpx {Class} @clindex vector4f @clindex point4f 4x1 column vectors. @code{Vector4f} is intended to be used to represent a vector, and @code{point4f} is to a point, but as far as OpenGL concerns, both are just an array of four floats, @var{x}, @var{y}, @var{z} and @var{w}. These classes inherit @code{} and @code{} classes. So if you import @code{gauche.sequence} module, you can use generic function such as @code{ref} and @code{(setter ref)} to get/set individual elements. The generic version of @code{map} and @code{for-each} can also be used on the vector4f and point4f instances. Aside from the type, the only difference is that the default value of @var{w} component--- it's 0.0 for vectors, and 1.0 for points. So usual transformation produces expected results; for example point plus vector becomes point, vector plus vector becomes vector, and translating point changes its coordinates but translating vectors doesn't, and so on. However, you can set @var{w} component to other value to do nontrivial operations. @end deftp @deftp {Reader syntax} @code{#,(vector4f @var{x} @var{y} @var{z} @var{w})} @deftpx {Reader syntax} @code{#,(point4f @var{x} @var{y} @var{z} @var{w})} These SRFI-10 syntax can be used to denote literal @code{} and @code{} instance, respectively. The write methods are defined so that the instance is written out in this form, and can be read back later. @end deftp @defun vector4f? obj @defunx point4f? obj Returns true iff @var{obj} is vector4f and point4f, respectively. @end defun @defun vector4f x y z &optional (w 0.0) @defunx point4f x y z &optional (w 1.0) Creates a vector4f and point4f instance with given values, respectively. @end defun @defun make-vector4f @defunx make-point4f Another way to create a vector4f and a point4f. The first returns @code{#,(vector4f 0.0 0.0 0.0 0.0)}, and the latter returns @code{#,(point4f 0.0 0.0 0.0 1.0)}. @end defun @defun list->vector4f l @defunx list->point4f l Convert a list of three or four real numbers to a vector4f and a point4f, respectively. If @var{l} is not a list of three or four real numbers, an error is signalled. @example (list->vector4f l) @equiv{} (apply vector4f l) @equiv{} (coerce-to l) @end example @end defun @defun vector4f->list v @defunx point4f->list p Convert a vector4f and a point4f to a list of four real numbers, respectively. @example (vector4f->list v) @equiv{} (coerce-to v) @equiv{} (map (cut ref v <>) (iota 4)) @end example @end defun @defun f32vector->vector4f v &optional start @defunx f32vector->point4f v &optional start Creates a vector4f or a point4f, initializing by the elements of f32vector @var{v}. @var{V} must be longer than 4, and the first four elements are used to initialize the created vector or point. If optional @var{start} argument is given, it specifies an index of @var{v} from which the initial values are taken; that is, @var{start}, @var{start+1}, @var{start+2} and @var{start+3}-th elements are used to create a vector or a point. This allows to create vectors from plain float array: @example (map (lambda (off) (f32vector->vector4f vec (* off 4))) (iota (/ (size-of vec) 4))) @end example The conversion can be done using @code{coerce-to}, as well. @example (f32vector->vector4f vec) @equiv{} (coerce-to vec) @end example @end defun @defun vector4f->f32vector v @defunx point4f->f32vector p Convert a vector4f @var{v} or a point4f @var{p} to four-element f32vector. @example (vector4f->f32vector v) @equiv{} (coerce-to v) @end example @end defun @defun vector4f-copy v @defunx point4f-copy p Returns a new copy of vector4f @var{v} or point4f @var{p}, respectively. @end defun @defun vector4f-copy! dstv srcv @defunx point4f-copy! dstp srcp Destructively sets the content of @var{srcv} or @var{srcp} to @var{dstv} or @var{dstp}, respectively. @end defun @defun vector4f-set! v k value @defunx point4f-set! p k value Sets a real number @var{value} to @var{k}-th element of a vector4f @var{v} or a point4f @var{p}. @example (vector4f-set! v k value) @equiv{} (set! (ref v k) value) @end example @end defun @defun vector4f-ref v k &optional fallback @defunx point4f-ref p k &optional fallback Gets a value of @var{k}-th element of a vector4f @var{v} or a point4f @var{p}. If @var{k} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @example (vector4f-ref v k) @equiv{} (ref v k) @end example @end defun @defun vector4f-dot x y Returns a dot product of two vector4fs, @var{x} and @var{y}. @end defun @defun vector4f-cross x y Returns a cross product of two vector4fs, @var{x} and @var{y}. (@var{w} element is ignored). @end defun @defun vector4f-norm v Returns the norm (length) of the vector @var{v}. @end defun @defun vector4f-normalize x @defunx vector4f-normalize! x Returns a normalized vector of vector4f @var{x}. @code{Vector4f-normalize} allocates a new vector, while @code{vector4f-normalize!} modifies the original vector. As a special case, if @var{x} is a vector of length 0, a vector of length 0 is returned. @end defun @defun vector4f-add x y @defunx vector4f-sub x y @defunx vector4f-add! x y @defunx vector4f-sub! x y Returns a sum of two vector4fs, @var{x} and @var{y}. The destructive version modifies @var{x}. @end defun @defun point4f-add x y @defunx point4f-add! x y Adds a point4f @var{x} and a vector4f @var{y}, and returns a translated point. The destructive version modifies @var{x}. @end defun @defun point4f-sub x y Subtracts either a vector4f or a point4f @var{y} from a point4f @var{x}. If @var{y} is a vector4f, returns a translated point. If @var{y} is a point4f, returns a vector4f from point @var{y} to point @var{x}. @end defun @c ---------------------------------------------------------------------- @node Vector arrays and point arrays, Matrices, Vectors and points, Vectors and matrices @section Vector arrays and point arrays @deftp {Class} @deftpx {Class} @clindex vector4f-array @clindex point4f-array Represents an array of vector4fs and point4fs. This is an efficient way to keep an array of vectors or points, for the elements are packed in a simple float array. They are especially useful to work with GL's vertex array feature. @code{gl-vertex-pointer} can take @code{}, and @code{gl-normal-pointer} can take @code{}. It is also possible to "view" a plain f32vector as @code{} or @code{} without copying its content, by @code{f32vector->vector4f-array/shared} and @code{f32vector->point4f-array/shared}. Combined to @code{read-block!}, you can do efficient binary I/O of vertex arrays, for example. Inherits @code{} and @code{}. When viewed as a sequence or a collection, they behaves like sequence or collection of @code{vector4f} and @code{point4f} objects, respectively. @end deftp @defun make-vector4f-array len &optional init-vector @defunx make-point4f-array len &optional init-point Creates a vector4f-array or point4f-array with @var{len} elements. Each element is initialized by a vector4f @var{init-vector} or a point4f @var{init-point} if provided. @end defun @defun vector4f-array? obj @defunx point4f-array? obj Returns true iff @var{obj} is a vector4f-array or a point4f-array, respectively. @end defun @defun vector4f-array-length array @defunx point4f-array-length array Returns length (number of vectors/points) in array @var{array}. @end defun @deftp {Reader syntax} @code{#,(vector4f-array @var{len} @var{elt} @dots{})} @deftpx {Reader syntax} @code{#,(point4f-array @var{len} @var{elt} @dots{})} Vector4f-array and point4f-array have external representation using this SRFI-10 syntax. @var{Len} is a length of array, and each @var{elt} is a list of four floats representing each element of the array. @example (f32vector->vector4f-array #f32(1 2 3 4 6 7 4 3)) @result{} #,(vector4f-array 2 (1 2 3 4) (6 7 4 3) ) @end example @end deftp @defun list->vector4f-array list @defunx list->point4f-array list From given list of vector4fs or point4fs, creates and returns a vector4f-array or point4f-array, respectively. @end defun @defun f32vector->vector4f-array v @defunx f32vector->point4f-array v Converts f32vector @var{v} to a vector4f-array or a point4f-array. The length of @var{v} must be multiple of four. The content of @var{v} is copied. @example (f32vector->vector4f-array v) @equiv{} (coerce-to v) @end example @end defun @defun f32vector->vector4f-array/shared v @defunx f32vector->point4f-array/shared v Like above, but the content of @var{v} is shared by the result array, instead of being copied. So the modification of result array will be visible from original f32vector @var{v} and vice versa. It will allow efficient handling of large vertex arrays. @end defun @defun vector4f-array->f32vector array @defunx point4f-array->f32vector array Converts a vector4f-array or a point4f-array @var{array} to a f32vector. @example (vector4f-array->f32vector array) @equiv{} (coerce-to array) @end example @end defun @defun vector4f-array-set! array i vector @defunx point4f-array-set! array i point Sets a vector4f @var{vector} or a point4f @var{point} to @var{i}-th element of vector4f-array or point4f-array @var{array}, respectively. @example (vector4f-array-set! array i vector) @equiv{} (set! (ref array i) vector) @end example @end defun @defun vector4f-array-ref array i &optional fallback @defunx point4f-array-ref array i &optional fallback Returns a vector4f or a point4f which is the @var{i}-th element of array @var{array}, respectively. If @var{k} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @example (vector4f-array-ref array i) @equiv{} (ref array i) (ref #,(vector4f-array 2 (1 2 3 4) (6 7 4 3)) 1) @result{} #,(vector4f 6 7 4 3) @end example @end defun @defun vector4f-array-ref/shared array i &optional fallback @defunx point4f-array-ref/shared array i &optional fallback Like above, but the returned vector4f or point4f shares the storage with the original array. Thus the modification of the result vector or point will be visible from @var{array}, and vice versa. @end defun @c ---------------------------------------------------------------------- @node Matrices, Quaternions, Vector arrays and point arrays, Vectors and matrices @section Matrices @deftp {Class} @clindex matrix4f 4x4 matrix. Internally it is represented as an array of 16 floats, stored in column-major order. (It is the same order OpenGL uses, so it can be passed to OpenGL calls without overhead). Inherits @code{} and @code{}. When a matrix4f is treated as a sequence, it works as if it is a single sequence of floats in column-major order. @end deftp @defun make-matrix4f &optional init Returns a new matrix4f instance. If @var{init} is omitted, the matrix is a unit matrix. Otherwise, @var{init} must be a f32vector of length 16, and the elements in the matrix is initialized by ones in f32vector. @example ;; Creates a matrix like this: ;; 1 2 3 4 ;; 0 1 0 5 ;; 0 0 1 6 ;; 0 0 0 1 (make-matrix4f '#f32vector(1 0 0 0 2 1 0 0 3 0 1 0 4 5 6 1)) @end example @end defun @defun matrix4f m00 m10 m20 m30 m01 m11 m21 m31 m02 m12 m22 m32 m03 m13 m23 m33 Creates a new matrix4f instance with give values. @end defun @defun matrix4f? obj Returns true iff @var{obj} is a matrix4f. @end defun @deftp {Reader syntax} @code{#,(matrix4f @var{elt} @dots{})} A matrix4f is represented extrenally using SRFI-10 syntax. The elements are listed in column-major order. @end deftp @defun list->matrix4f l @defunx matrix4f->list m Converts between list of 16 real numbers and matrix4f. @end defun @defun f32vector->matrix4f v &optional start Creates a new matrix4f and initializes it with 16 elements in f32vector @var{v}. If optional @var{start} is given, it specifies the start offset in vector @var{v} to be used as initial values. The f32vector @var{v} must have enough length. @end defun @defun f32vector->matrix4f! m v &optional (start 0) Extract 16 flonums in the f32vector @var{v} starting from the index @var{start}, and fill the matrix4f @var{m} with them. The f32vector @var{v} must have enough length. @end defun @defun matrix4f->f32vector m Returns a new f32vector that has elements from matrix4f @var{m}. @end defun @defun matrix4f-copy m Returns a new copy of @var{m}. @end defun @defun matrix4f-copy! dstm srcm Copies contents of @var{srcm} to @var{dstm}. @end defun @defun matrix4f-set! m i value Sets a real number @var{value} to @var{i}-th element of matrix @var{m}. Since the matrix is laid out in column-major order, the one-dimensional index @code{m@{@var{i}@}} and two-dimensional index @code{m(@var{i},@var{j})} corresponds as follows: @example m(0,0) = m@{0@} m(0,1) = m@{4@} m(0,2) = m@{8@} m(0,3) = m@{12@} m(1,0) = m@{1@} m(1,1) = m@{5@} m(1,2) = m@{9@} m(1,3) = m@{13@} m(2,0) = m@{2@} m(2,1) = m@{6@} m(2,2) = m@{10@} m(2,3) = m@{14@} m(3,0) = m@{3@} m(3,1) = m@{7@} m(3,2) = m@{11@} m(3,3) = m@{15@} @end example @end defun @defun matrix4f-ref m i &optional fallback Returns the @var{i}-th element of matrix @var{m}. If @var{i} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @end defun @defun matrix4f-set2! m i j value Sets @var{value} to @code{(@var{i}, @var{j})} element of matrix @var{m}. @end defun @defun matrix4f-ref2 m i j Returns the @code{(@var{i}, @var{j})} element of matrix @var{m}. @end defun @defun matrix4f-row m i @defunx matrix4f-column m i @defunx matrix4f-column/shared m i Returns @var{i}-th row vector or @var{i}-th column vector of matrix @var{m}, as a vector4f instance. Furthermore, the returned vector from @code{matrix4f-column/shared} shares the storage with @code{m}. @end defun @defun matrix4f-mul m obj @var{Obj} may be a scalar (real number), a vector4f, a point4f, or a matrix4f. Returns @var{m} x @var{obj}. @end defun @defun matrix4f-mul! m obj @var{Obj} may be a scalar or a matrix4f. Matrix @var{m} is multiplied by @var{obj}, and the result is set to @var{m} destructively. @end defun @defun matrix4f-transpose m @defunx matrix4f-transpose! m Returns a transposed matrix of @var{m}. The destructive version modifies @var{m}. @end defun @defun matrix4f-determinant m Returns a determinant of @var{m}. @end defun @defun matrix4f-inverse m &optional (error-on-singular? #t) @defunx matrix4f-inverse! m &optional (error-on-singular? #t) Returns a inverse matrix of @var{m}. The destructive version modifies @var{m}. If given @var{m} is a singular matrix, an error is signalled by default. However, if @code{#f} is given to the optional @var{error-on-singular?} argument, @code{#f} is returned in such a case. @end defun @defun translation->matrix4f translation-vector @defunx translation->matrix4f! m translation-vector Returns a matrix which represents a translation by @var{translation-vector}, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in @var{translation-vector} is used. The destructive version updates @var{m}. @end defun @defun rotation->matrix4f axis angle @defunx rotation->matrix4f! m axis angle Returns a matrix which represents a rotation around @var{axis} by @var{angle} radian. @var{Axis} must be a vector4f or a f32vector of length 3 or 4, and must be normalized. The result is undefined if anormalized vector is passed as @var{axis}. The destructive version updates @var{m}. @end defun @defun scale->matrix4f scale-vector @defunx scale->matrix4f! m scale-vector Returns a matrix which represents a scale by @var{scale-vector}, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in @var{scale-vector} is used. Each element of @var{scale-vector} represents the scale factor along x, y, and z axis. The destructive version updates @var{m}. @end defun @defun trs->matrix4f translation rotation-axis rotation-angle scale @defunx trs->matrix4f! m translation rotation-axis rotation-angle scale This combines above three procedure. Returns a matrix that represents translation, rotation and scale, specified by @var{translation}, @var{rotation-axis}, @var{rotation-angle} and @var{scale}. The destructive version updates @var{m}. If @code{@i{T}}, @code{@i{R}} and @code{@i{S}}, are the matrices that represent translation, rotation and scale, respectively, then these procedures effectively calculates a matrix @code{@i{TRS}}. @end defun @defun tqs->matrix4f translation rotation-quat scale @defunx tqs->matrix4f! m translation rotation-quat scale A variation of @code{trs->matrix4f}. Instead of axis and angle, rotation is represented by a quaternion @var{rotation-quat}. @xref{Quaternions}, for more details about quaternions. @end defun @defun euler-angle->matrix4f xangle yangle zangle &optional order @defunx euler-angle->matrix4f! m xangle yangle zangle &optional order Returns a matrix that represents rotation along x, y and z axis by @var{xangle}, @var{yangle}, and @var{zangle}, respectively. The order of rotation can be specified by the optional argument @var{order}, which may be one of the symbols @code{xyz}, @code{xzy}, @code{yzx}, @code{yxz}, @code{zxy}, or @code{zyx}. For example, symbol @code{xyz} means rotation around x-axis, then y-axis, then z-axis. Thus, if we write each rotation as @i{Rx}, @i{Ry}, and @i{Rz}, the returned matrix is @i{RzRyRx}. The default value of @var{order} is @code{xyz}. The desrtuctive version modifies @var{m}. @end defun @defun matrix4f-decompose m Matrix @var{m} is a composition of translation, rotation, shear and scale. Suppose transformation is applied in the reverse order. This procedure decompose @var{m} into each individual transformation. Returns five values. @itemize @bullet @item A flag to indicate if @var{m} is non-singular. @item A translation vector @var{t}, in vector4f. The first three elements of @var{t} are for x, y, and z translations. @item A rotation matrix @var{r}, in matrix4f. This is an orthogonal matrix represents rotation component. @item A shear vector @var{h}, in vector4f. The first three elements of @var{h} are for xy, xz and yz shear factors. @item A scale vector @var{s}, in vector4f. The first three elements of @var{s} are fof x, y, and z scale factors. @end itemize If @var{m} is singular, certain part of rotation matrix can't be recovered. In such a case, @var{r} becomes also singular matrix. If the original matrix has negative scale factor in any of x, y, or z scale, the decomposed scale factor will have all negative components. The signs of elements of @var{r} are adjusted accordingly. Due to the precision errors, you will see small values appear in shear component even @var{m} is pure TRS matrix. @end defun @defun matrix4f-decompose! m t r h s Linear update version of @code{matrix4f-decompose}. The result vectors and matrices are stored in @var{t}, @var{r}, @var{h} and @var{s}. The return value is a boolean value indicates @var{m} is non-singular or not. @end defun @defun matrix4f->translation m Extract the translation component from the given TRS matrix @var{m} and returns it as a @code{}. @end defun @defun matrix4f->translation! v m Extract the translation component from the given TRS matrix @var{m} and stores the result into a @code{} @var{v}. Returns @var{v}. @end defun @defun matrix4f->rotation m From given orthogonal matrix @var{m}, extracts and returns and rotation axis and angle, as a vector4f and a real number. @end defun @defun matrix4f->rotation! v m Same as above, except the storage of vector4f @var{v} is reused to store the result axis. @end defun @c ---------------------------------------------------------------------- @node Quaternions, , Matrices, Vectors and matrices @section Quaternions @deftp {Class} @clindex quatf Quaternions. Internally quaternions are represented as just an array of four floats; the first three are the vector component and the last is the scalar component. Inherits @code{} and @code{}. When viewed as sequence, it is just like a vector of four floats. @end deftp @defun quatf? obj Returns true iff @var{obj} is a quaternion. @end defun @deftp {Reader syntax} @code{#,(quatf @var{x} @var{y} @var{z} @var{w})} External representation of quaternion @i{x}@b{i}+@i{y}@b{j}+@i{z}@b{k}+@i{w}. @end deftp @defun make-quatf &optional axis (angle 0) Returns a new unit quaternion that represents a rotation around vector @var{axis} by @var{angle} radians. @var{Axis} can be a vector4f, a point4f or a f32vector (only first three component is used). @var{Axis} must be a unit vector; if @var{axis} is anormalized, the result is undefined. If both @var{axis} and @var{angle} is omitted, @code{#,(quatf 0 0 0 1)} is returned. @end defun @defun quatf x y z w Returns a new quaternion whose elements are initialized by @var{x}, @var{y}, @var{z}, @var{w}. @end defun @defun list->quatf l @defunx quatf->list q Converts between a list of four real numbers and a quaternion. @end defun @defun f32vector->quatf x &optional start Returns a new quaternion whose elements are initialized by the first four elements of f32vector @var{x}. If @var{start} is given, the initial value is taken starting from @var{start}-th index in @var{x}. @end defun @defun quatf->f32vector q Returns a new f32vector whose contents is the same as a quaternion @var{q}. @end defun @defun quatf-copy q Returns a fresh copy of a quaternion @var{q}. @end defun @defun quatf-copy! dstq srcq Copies contents of a quaternion @var{srcq} to a quaternion @var{dstq}. @end defun @defun rotation->quatf! quat axis angle Sets a quaternion @var{quat} so that it represents a rotation around a unit vector @var{axis} by angle @var{angle} radians. @var{Axis} can be a vector4f, a point4f or a f32vector (only first three component is used). @end defun @defun vectors->quatf v w @defunx vectors->quatf! q v w Given two unit vectors @var{v} and @var{w}, calculates and returns a quaternion that represents a rotation from @var{v} to @var{w}. The destructive version @code{vectors->quatf!} modifies @var{q}. @end defun @defun axes->quatf v1 v2 w1 w2 @defunx axes->quatf! q v1 v2 w1 w2 The arguments must be all unit vectors, @var{v1} and @var{v2} must be perpendicular, and also @var{w1} and @var{w2} must be perpendicular. Calculates and returns a quaternion that represents a rotation which transforms @var{v1} to @var{w1}, and @var{v2} to @var{w2}, respectively. The destructive version stores the result into @var{q}. @end defun @defun quatf-add p q @defunx quatf-add! p q @defunx quatf-sub p q @defunx quatf-sub! p q Addition and subtraction of quaternions. The destructive version modifies the first argument. @end defun @defun quatf-scale q s @defunx quatf-scale! q s Multiplies a quaternion @var{q} by a scalar value @var{s}. The destructive version modifies @var{q}. @end defun @defun quatf-mul p q @defunx quatf-mul! p q Multiply two quaternions @var{p} and @var{q}. The destructive version modifies @var{p} as well. @end defun @defun quatf-conjugate p @defunx quatf-conjugate! q p Returns a conjugate of a quaternion @var{p}. The destructive version modifies @var{q} as well. @end defun @defun quatf-transform q p Transforms a vector or a point @var{p} by quaternion @var{q}, that is, returns @var{qpq*}, where @var{q*} is a conjugate of @var{q}. This procedure assumes @var{q} is normalized. @var{P} can be a vector4f, a point4f or a f32vector (only first three elements are used). Returns the same type of object as @var{p}. @end defun @defun quatf-norm q Returns norm of @var{q}. @end defun @defun quatf-normalize q @defunx quatf-normalize! q Returns normalized quaternion of @var{q}. The destructive version modifies @var{q}. @end defun @defun quatf->matrix4f q @defunx quatf->matrix4f! m q Returns a matrix that represents a rotation specified by a unit quaternion @var{q}. The behavior is undefined if @var{q} is not normalized. The destructive version modifies @var{m}. @end defun @defun matrix4f->quatf m @defunx matrix4f->quatf! q m Extracts the rotation component of a matrix @var{m} and returns a quaterion that represents the rotation. @code{Matrix4f->quatf!} also uses @var{q} as the storage to store the result. @end defun @defun quatf-slerp p q t @defunx quatf-slerp! r p q t Returns a quaternion that interpolates between two unit quaternions @var{p} and @var{q}, by a scalar value @var{t}. The destructive version modifies @var{r}. @end defun @c ====================================================================== @node Simple utilities, º÷°ú, Vectors and matrices, Top @chapter Simple utilities This chapter covers @code{gl.simple.*} modules. They are provided for the convenience of those who wants quick experiment with Gauche-gl alone, without a hassle to install a bunch of other modules. Their features are pretty limited, but you may find them handy when you need to hack up some throwaway script that need to show some graphics on the screen. @menu * Simple image handling:: * Simple viewer:: @end menu @node Simple image handling, Simple viewer, Simple utilities, Simple utilities @section Simple image handling @deftp {Module} gl.simple.image @mdindex gl.simple.image OpenGL doesn't provide any means of reading/writing image data, and it should be covered by other Gauche extensions. However, it is sometimes handy to have simple means to handle external image data, so that you can do some experiment with Gauche-gl alone. This module provides a minimal support to handle external image data, so that one can do some experiment in Gauche-gl alone. The functionality might be extended over time, but this is never intended to be a full featured image library. A separate Gauche extension should be a better place to have it. @end deftp Currently, only reading from 8bit SGI image file is supported. It is written in pure Scheme, so don't expect the performance. @defun read-sgi-image filename @defunx read-sgi-image-from-port port Reads an image data in SGI format from the named file or the input port, respectively. Only 8bit-per-channel, direct color mode is supported. Returns four values: the image's width in pixels, its height in pixels, number of channels (e.g. 1 for grayscale, 3 for RGB, 4 for RGBA), and the image data in u8vector. The pixel data is packed, i.e. there's no padding between each pixel nor each scanline. Warning: be careful to call this function interactively. The image data vector is usually huge, and you have to wait long for the REPL to display the entire result. @end defun @node Simple viewer, , Simple image handling, Simple utilities @section Simple viewer @deftp {Module} gl.simple.viewer @mdindex gl.simple.viewer This module packages common operations to allow users to view 3D objects, controlling the camera by the mouse, and have some interactions with the keyboard. A typical way of using the viewer is like the following: @example (use gl) (use gl.glut) (use gl.simple.viewer) (define (main args) (glut-init args) (simple-viewer-display ) (simple-viewer-set-key! ...) (simple-viewer-window :title ...) (simple-viewer-run) ; loop forever. type ESC to exit. 0) @end example The viewer handles mouse drag (to move the camera), and also draws reference grid and axes by default for your convenience. You have to provide a thunk, which must draw your 3D object. For the keyboard events, you can use a convenient API to associate handler to the key (character for normal keys, and constants like @code{GL_LEFT_ARROW} for special keys). The reshape event is handled implicitly, though you can override it. If you call @code{simple-viewer-run}, it enters the event loop and never returns. If you wish to keep REPL and/or other parts of your application run concurrently, the convenient way is to run @code{simple-viewer-run} in a separate thread. @example (use gauche.threads) (define (run-viewer) (thread-start! (make-thread simple-viewer-run #f))) @end example See also the code under @file{examples/simple} directory of the source tree for more examples. @end deftp @defun simple-viewer-window name &key title mode parent width height x y Creates a new GL window with @var{name}, which must be a symbol to identify the window later in the simple viewer framework. The window won't be shown until @code{simple-viewer-run} is called. Each window @end defun @defun simple-viewer-display &optional display-thunk Gets/sets the display thunk, which is called every time the GL window is redrawn. You can change the display thunk any time, even while the viewer thread is running. If no argument is given, returns the current display thunk. It can be @code{#f} if no display thunk is set. When the display thunk is called, the matrix mode is @code{MODELVIEW} and the camera transformation is already applied. The grid and axes are also drawn, unless you've customized them. In the display thunk you can just write your model in the world coordinate system. It is guaranteed that the current color is white and line width is 1.0, but the states of other GL contexts are undefined, so you have to set them explicitly. @end defun @defun simple-viewer-reshape &optional reshape-proc Gets/sets the reshape procedure which is called every time the GL window configuration is changed. (It is also called when the GL window is shown first time.) You can change the reshape procedure any time, even while the viewer thread is running. If no argument is given, returns the current reshape proc. A reshape procedure is called with two arguments, the width and the height (in pixels) of the new GL window configuration. By default, @code{gl.simple.viewer} sets a procedure that changes viewport and projection matrix apopropriately; you need to change it only if you want a different behavior. @end defun @defun simple-viewer-grid &optional grid-proc @defunx simple-viewer-axis &optional axis-proc Gets/sets a procedure to draw a grid and axes. You can change these procedures any time, even while the viewer thread is running. The @var{grid-proc} and @var{axis-proc} are called with no arguments every time the GL window is redrawn, before the display thunk is invoked. The matrix mode is @code{MODELVIEW}, the camera transformation is already applied, and lighting is disabled. The default grid proc draws 10x10 grid on X-Z plane centered at the origin. The default axis proc draws a red line from origin to +X, a green line from origin to +Y, and a blue line from origin to +Z. You can pass @code{#f} to disable grid and/or axis display. If no argument is given, returns the current grid/axis proc, respectively. @end defun @defun simple-viewer-set-key! key handler @dots{} Even number of arguments must be given; the first of every two specifies the key, and the next one specifies the action when the key is pressed. @end defun @c ====================================================================== @node º÷°ú, , Simple utilities, Top @appendix º÷°ú @c NODE º÷°ú @menu * ¼ê³¤­¤È¹½Ê¸º÷°ú:: * ¥â¥¸¥å¡¼¥ëº÷°ú:: * ¥¯¥é¥¹º÷°ú:: * ÊÑ¿ôº÷°ú:: @end menu @node ¼ê³¤­¤È¹½Ê¸º÷°ú, ¥â¥¸¥å¡¼¥ëº÷°ú, º÷°ú, º÷°ú @appendixsec ¼ê³¤­¤È¹½Ê¸º÷°ú @c NODE ¼ê³¤­¤È¹½Ê¸º÷°ú @printindex fn @node ¥â¥¸¥å¡¼¥ëº÷°ú, ¥¯¥é¥¹º÷°ú, ¼ê³¤­¤È¹½Ê¸º÷°ú, º÷°ú @appendixsec ¥â¥¸¥å¡¼¥ëº÷°ú @c NODE ¥â¥¸¥å¡¼¥ëº÷°ú @printindex md @node ¥¯¥é¥¹º÷°ú, ÊÑ¿ôº÷°ú, ¥â¥¸¥å¡¼¥ëº÷°ú, º÷°ú @appendixsec ¥¯¥é¥¹º÷°ú @c NODE ¥¯¥é¥¹º÷°ú For readability, the surrounding @code{<} and @code{>} are stripped off. @printindex cl @node ÊÑ¿ôº÷°ú, , ¥¯¥é¥¹º÷°ú, º÷°ú @appendixsec ÊÑ¿ôº÷°ú @c NODE ÊÑ¿ôº÷°ú @printindex vr @contents @bye @c Local variables: @c outline-regexp: "@chap\\|@unnu\\|@\\(sub\\)*section" @c end: ����������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/doc/extract�������������������������������������������������������������������������0000755�0000764�0000764�00000012664�11533026402�014525� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; extract - filter bilingual texinfo document ;;; ;;; Copyright(C) 2001-2003 by Shiro Kawai (shiro@acm.org) ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: extract,v 1.5 2006-11-09 23:56:20 shirok Exp $ ;;; (use gauche.parseopt) (use gauche.charconv) (use srfi-1) (use srfi-13) (use file.util) (define *outfile* #f) (define *lang* 'en) (define *version* (string-trim-both (file->string (or (find (cut sys-access <> R_OK) '("../VERSION" "./VERSION")) (error "No VERSION file?"))))) (define *node-table* '()) (define *header-table* '()) (define (scan-nodes) (let ((current-node #f) (current-header #f)) (port-for-each (lambda (line) (rxmatch-case line (#/^@node\s+([^,]+)/ (#f node) (set! current-node (string-trim-right node))) (#/^@(chapter|(sub)*section|appendix\w*)\s+(.*)/ (#f #f #f header) (set! current-header (string-trim-right header))) (#/^@c NODE\s+([^,]*)(,(.*))?/ (#f jnode #f jheader) (let* ((jn (string-trim-right jnode)) (jh (if jheader (string-trim-both jheader) jn))) (push! *node-table* (cons current-node jn)) (push! *header-table* (cons current-header jh)))) (#/^@include\s+(\S+)/ (#f file) (with-input-from-file file (cut scan-nodes) :encoding 'euc-jp)) )) read-line))) (define (filter pattern-in pattern-out) (define (in line) (rxmatch-case line (test eof-object?) (pattern-in () (in (read-line))) (pattern-out () (out (read-line))) (#/^@include\s+(\S+)/ (#f file) (with-input-from-file file (cut filter pattern-in pattern-out) :encoding 'euc-jp) (in (read-line))) (#/^@c COMMON$/ () (in (read-line))) (test (lambda _ (eq? *lang* 'en)) (display (regexp-replace-all #/@VERSION@/ line *version*)) (newline) (in (read-line))) (#/^@node\s+(.*)$/ (#f nodedesc) (process-node nodedesc) (in (read-line))) (#/^@(chapter|(sub)*section|appendix\w*)\s+(.*)/ (#f cmd #f header) (process-header cmd header) (in (read-line))) (#/^\* ([^:]+)::(.*)?/ (#f node desc) (process-menu node #f desc) (in (read-line))) (#/^\* ([^:]+):\s+([^)]+\))\.(.*)?/ (#f tag node desc) (process-menu node tag desc) (in (read-line))) (else (display (regexp-replace-all #/@VERSION@/ (regexp-replace-all #/(@x?ref)\{([^\}]+)\}/ line process-ref) *version*)) (newline) (in (read-line))))) (define (out line) (rxmatch-case line (test eof-object?) (pattern-in () (in (read-line))) (#/^@c COMMON$/ () (in (read-line))) (else (out (read-line))))) (in (read-line))) (define (process-node nodedesc) (display "@node ") (display (string-join (map (lambda (name) (cond ((assoc (string-trim-both name) *node-table*) => cdr) (else name))) (string-split nodedesc #\,)) ", ")) (newline)) (define (process-header cmd header) (format #t "@~a ~a\n" cmd (cond ((assoc (string-trim-both header) *header-table*) => cdr) (else header)))) (define (process-menu node tag desc) (if tag (format #t "* ~a: ~a. ~a\n" tag (cond ((assoc (string-trim-both node) *node-table*) => cdr) (else node)) (string-trim-both (or desc ""))) (format #t "* ~a:: ~a\n" (cond ((assoc (string-trim-both node) *node-table*) => cdr) (else node)) (string-trim-both (or desc ""))))) (define (process-ref match) (let ((cmd (rxmatch-substring match 1)) (node (rxmatch-substring match 2))) (format #f "~a{~a}" cmd (cond ((assoc (string-trim-both node) *node-table*) => cdr) (else node))))) (define (usage) (display "Usage: extract [-en|-jp][-o outfile] infile\n") (exit 1)) (define (main args) (let ((a (parse-options (cdr args) (("o=s" (outfile) (set! *outfile* outfile)) ("en" () (set! *lang* 'en)) ("jp" () (set! *lang* 'jp)) (else _ (usage)))))) (define (do-it) (case *lang* ((en) (filter #/^@c EN$/ #/^@c JP$/)) ((jp) (filter #/^@c JP$/ #/^@c EN$/)))) (define outenc (if (eq? *lang* 'jp) 'euc-jp 'utf8)) (unless (= (length a) 1) (usage)) (when (eq? *lang* 'jp) (with-input-from-file (car a) scan-nodes :encoding 'euc-jp)) (with-input-from-file (car a) (lambda () (if *outfile* (with-output-to-file *outfile* do-it :encoding outenc) (let1 out (open-output-conversion-port (current-output-port) outenc) (with-output-to-port out do-it) (close-output-port out)))) :encoding 'euc-jp) 0)) ;; Local variables: ;; mode: Scheme ;; end: ����������������������������������������������������������������������������Gauche-gl-0.5.1/doc/Makefile.in���������������������������������������������������������������������0000644�0000764�0000764�00000005446�11533026402�015172� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������SHELL = @SHELL@ srcdir = @srcdir@ VPATH = $(srcdir) top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ MANPAGES = EXTRACTED = gauche-gl-refe.texi gauche-gl-refj.texi GENERATED = Makefile $(MANPAGES) GOSH = "@GOSH@" GAUCHE_CONFIG = "@GAUCHE_CONFIG@" INSTALL = "@GAUCHE_INSTALL@" MAKEINFO = "@MAKEINFO@" GZIP_PROGRAM = "@GZIP_PROGRAM@" # Manual page destination. mandir = "$(DESTDIR)`$(GAUCHE_CONFIG) --mandir`" infodir = "$(DESTDIR)`$(GAUCHE_CONFIG) --infodir`" all: info install: all if test -f gauche-gl-refe.info.gz -o -f gauche-gl-refj.info.gz; then \ for info in *.info*; do \ $(INSTALL) -m 444 -T $(infodir) $$info; \ done; \ fi uninstall: (cd $(infodir); \ if test -f gauche-gl-refe.info -o -f gauche-gl-refe.info.gz; \ then rm -rf gauche-gl-refe.*; \ fi; \ if test -f gauche-gl-refj.info -o -f gauche-gl-refj.info.gz; \ then rm -rf gauche-gl-refj.*; \ fi) texi : gauche-gl-refe.texi gauche-gl-refj.texi html : gauche-gl-refe.html gauche-gl-refj.html htmls : gauche-gl-refe_toc.html gauche-gl-refj_toc.html dvi : gauche-gl-refe.dvi pdf : gauche-gl-refe.pdf info : gauche-gl-refe.info.gz gauche-gl-refj.info.gz gauche-gl-refe.html : gauche-gl-refe.texi texi2html -number gauche-gl-refe.texi gauche-gl-refe_toc.html : gauche-gl-refe.texi texi2html -split section -number gauche-gl-refe.texi gauche-gl-refe.dvi : gauche-gl-refe.texi texi2dvi gauche-gl-refe.texi gauche-gl-refe.pdf : gauche-gl-refe.texi texi2pdf gauche-gl-refe.texi gauche-gl-refe.texi : gauche-gl-ref.texi extract gosh ./extract -en -o gauche-gl-refe.texi gauche-gl-ref.texi gauche-gl-refe.info.gz : gauche-gl-refe.texi if test "X$(MAKEINFO)" != X -a "X$(GZIP_PROGRAM)" != X; then \ $(MAKEINFO) --no-warn gauche-gl-refe.texi; \ rm -rf gauche-gl-refe.info*.gz; \ $(GZIP_PROGRAM) gauche-gl-refe.info; \ fi gauche-gl-refj.html : gauche-gl-refj.texi texi2html -number gauche-gl-refj.texi gauche-gl-refj_toc.html : gauche-gl-refj.texi texi2html -split section -number gauche-gl-refj.texi gauche-gl-refj.dvi : gauche-gl-refj.texi texi2dvi gauche-gl-refj.texi gauche-gl-refj.pdf : gauche-gl-refj.texi texi2pdf gauche-gl-refj.texi gauche-gl-refj.texi : gauche-gl-ref.texi extract gosh ./extract -jp -o gauche-gl-refj.texi gauche-gl-ref.texi gauche-gl-refj.info.gz : gauche-gl-refj.texi if test "X$(MAKEINFO)" != X -a "X$(GZIP_PROGRAM)" != X; then \ $(MAKEINFO) --no-warn gauche-gl-refj.texi; \ rm -rf gauche-gl-refj.info*.gz; \ $(GZIP_PROGRAM) gauche-gl-refj.info ; \ fi clean: rm -rf core *~ *.aux *.cl *.cls *.cp *.fn *.fns *.ky *.log *.md *.mds \ *.pg *.toc *.tp *.tps *.vr *.vrs *.pdf *.dvi *.info* distclean : clean rm -rf $(GENERATED) maintainer-clean : clean rm -f gauche-gl-ref*.html gauche-gl-ref.dvi Makefile $(GENERATED) $(EXTRACTED) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/doc/gauche-gl-ref.texi��������������������������������������������������������������0000644�0000764�0000764�00000364333�11533026402�016431� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������\input texinfo @c -*-texinfo-*- @comment %**start of header @c EN @setfilename gauche-gl-refe.info @settitle Gauche-gl : OpenGL binding for Gauche @dircategory The Algorithmic Language Scheme @direntry * Gauche-gl Reference: (gauche-gl-refe.info). Gauche OpenGL binding @end direntry @c JP @setfilename gauche-gl-refj.info @settitle Gauche-gl : OpenGL binding for Gauche @dircategory The Algorithmic Language Scheme @direntry * Gauche-gl Reference (ja): (gauche-gl-refj.info). Gauche OpenGL binding @end direntry @c COMMON @comment %**end of header @c $Id: gauche-gl-ref.texi,v 1.30 2008-06-05 11:14:46 shirok Exp $ @c module and class index @defcodeindex md @defcodeindex cl @iftex @finalout @parskip 4pt plus 1pt @end iftex @titlepage @c EN @title Gauche-gl : OpenGL binding for Gauche @c JP @title Gauche-gl : OpenGL binding for Gauche @c COMMON @subtitle version @VERSION@ @author Shiro Kawai (shiro@@acm.org) @page @vskip 0pt plus 1filll Copyright @copyright{} 2002-2005 Shiro Kawai (shiro@@acm.org) @end titlepage @node Top, Introduction, (dir), (dir) @ifnottex This is a reference manual of Gauche-gl, an OpenGL binding for the Gauche Scheme implementation. This manual is for version @VERSION@. @end ifnottex @c ====================================================================== @menu * Introduction:: * Installation:: * Getting Started:: * OpenGL API:: * GLUT API:: * Vectors and matrices:: * Simple utilities:: * Indices:: @end menu @node Introduction, Installation, Top, Top @chapter Introduction @c NODE ¤Ï¤¸¤á¤Ë Gauche-gl is an extension module of Gauche Scheme implementation. It provides the following modules: @table @code @item gl This module provides bindings to OpenGL API. It covers most functions in OpenGL 1.0 through 2.0, and GLU. The functions are described in @ref{OpenGL API}. @item gl.glut This module provides bindings to most functions in GLUT. The functions are described in @ref{GLUT API}. @item gl.math3d This module provides vector and matrix calculations optimized for 3D homogeneous coordinates. The vector and matrix objects here can be directly passed to Gauche-gl functions. The functions are descrbied in @ref{Vectors and matrices}. @item gl.simple.* These modules provide simple APIs for programmers to hack up a very simple OpenGL application. They are by no means intended for general application development, but would be handy for throwaway script. See @ref{Simple utilities} for the details. @end table @c ====================================================================== @node Installation, Getting Started, Introduction, Top @chapter Installation Installing Gauche-gl is usually straightforward on Unix variants. You have to have the following programs installed on your machine. @itemize @bullet @item Gauche 0.8.5 or later @item OpenGL 1.1 equivalent library; the auther checked with Mesa 3.4 and NVidia's GLX driver. @item GLUT 3.7 or later. @end itemize The standard way to compile and install Gauche-gl is as follows: @example % gzcat Gauche-gl-@VERSION@.tgz | tar xf - % cd Gauche-gl-@VERSION@ % ./configure % make % make test % make install @end example Or you can use @file{gauche-package} command: @example % gauche-package install -C=<configure-option> Gauche-gl-@VERSION@.tgz @end example The confiugre script figures out the location Gauche is installed, and install Gauche-gl in the same place. If you have GLUT installed in non-standard place, you have to tell the configure script where it is. @example % ./configure --with-glut=DIR @end example Since version 0.4, Gauche-gl can be configured to include bindings to NVidia's Cg Toolkit. The binding code is contributed by Issac Trotts. To enable Cg binding, give @code{--enable-cg} option to the configure script. @example % ./configure --enable-cg @end example It is reported that Mesa in FreeBSD ports is compiled with pthreads enabled, and Gauche-gl can't be linked unless Gauche itself is compiled with pthreads. The configure script of Gauche prints warning if you specify pthreads, but it is safe as far as you don't call make-thread in your program. There are various examples under @file{examples/} directory. If you want to run the examples before installing Gauche-gl, you have to tell the location of the library to @code{gosh} command, e.g. @code{gosh -I../src -I../lib gears.scm}. Some demos under subdirectories have a shell script that invokes @code{gosh} with proper command-line options. @table @file @item gears.scm Brian Paul's 3D gear wheels. @item mandelbrot.scm Simple calculated texture. @item glbook/ This subdirectory contains examples found in "OpenGL Programming Guide", a.k.a. Redbook. @item slbook/ This subdirectory contains examples found in "OpenGL Shading Language". Each demo is under its own subdirectories. You need to have proper driver/hardware that supports GLSL to run these demos. @end table @c ====================================================================== @node Getting Started, OpenGL API, Installation, Top @chapter Getting Started @menu * GL calls in Scheme:: * Advanced GL features:: * Using GLUT:: * Performance tips:: @end menu @c ---------------------------------------------------------------------- @node GL calls in Scheme, Advanced GL features, Getting Started, Getting Started @section GL calls in Scheme I assume you have basic knowledge of OpenGL API. Gauche-gl maps OpenGL calls to Scheme procedures pretty straightforwardly. For example, the very first example of "OpenGL Programming Guide", the pseudo code of OpenGL application, can be written in Gauche-gl like this: @example (use gl) (define (main args) (@i{initialize-a-window-please}) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 1.0 1.0 1.0) (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0) (gl-begin* GL_POLYGON (gl-vertex 0.25 0.25 0.0) (gl-vertex 0.75 0.25 0.0) (gl-vertex 0.75 0.75 0.0) (gl-vertex 0.25 0.75 0.0) ) (gl-flush) (@i{update-the-window-and-check-for-events}) 0) @end example Note that @i{initialize-a-window-please} and @i{update-the-window-and-check-for-events} are function calls dependent on the windowing system. Gauche-gl comes with GLUT binding and you can use it to do basic stuff. In the separate package Gauche-gtk, a binding to GtkGLExt is provided, which allows you to do GL rendering inside Gtk widgets. For the time being, let's focus on the pure GL part. The mapping of GL call name is straightforward. The mixed case names in OpenGL C API is expanded to hyphenated name, e.g. @code{glClearColor} @result{} @code{gl-clear-color}. OpenGL enums are mapped as is, e.g. @code{GL_POLYGON}. (Note that Gauche is case-sensitive by default. Also note the underscore, not hyphen, in constants). A few convenience macros, such as @code{gl-begin*}, is defined. There are straight bindings of @code{gl-begin} and @code{gl-end}, so you can write the drawing part in the same way as in C: @example (gl-begin GL_POLYGON) (gl-vertex 0.25 0.25 0.0) (gl-vertex 0.75 0.25 0.0) (gl-vertex 0.75 0.75 0.0) (gl-vertex 0.25 0.75 0.0) (gl-end) @end example Actually @code{gl-begin*} macro expands into the above calls. It's a matter of taste, but the macro version guarantees begin and end match, and the syntax-aware editor can indent internal calls accordingly. You might have noticed that the type suffix in C API is not in Gauche binding. The Scheme function figures out the type of passed arguments and calls appropriate C API. SRFI-4 uniform numeric vectors are used to represent arrays of numbers. @example (gl-vertex 1.0 2.0 3.0) @result{} glVertex3d (gl-vertex '#f32(1.0 2.0)) @result{} glVertex2fv (gl-vertex '#s32(3 2 5)) @result{} glVertex3iv @end example Generally, passing uniform vectors is much more efficient than giving individual numbers, for the former can eliminate the cost of type checking and unboxing. Some GL calls can also take @code{gl.math3d} primitive objects such as @code{vector4f}, @code{point4f} or @code{matrix4f} (@xref{Vectors and matrices}). For example, you can pass @code{point4f} object to @code{gl-vertex}, @code{vector4f} to @code{gl-normal}, and @code{matrix4f} to @code{gl-mult-matrix}. They are efficient since calculations on those types are defined natively in @code{gl.math3d}, and passing it to GL call doesn't cost unboxing. @c ---------------------------------------------------------------------- @node Advanced GL features, Using GLUT, GL calls in Scheme, Getting Started @section Advanced GL features Although Gauche-gl supports up to OpenGL 2.0, all functionalities may not be available on the target machine's driver/hardware. The application needs to check the availability of the extension and/or GL version before using the features that are only supported by the extension/version. Gauche-gl provides a couple of utility procedures to check the feature sets at runtime. For example, you can switch behavior depending on OpenGL 1.3 feature availability: @example (if (gl-version>=? "1.3") (code-using-features-available-in-OpenGL-1.3-and-later ...) (alternative-code ...)) @end example Or you can check the availability of extensions: @example (unless (gl-extension-supported? 'GL_ARB_shader_objects 'GL_ARB_fragment_shader 'GL_ARB_vertex_shader 'GL_ARB_shading_language_100) (error "OpenGL Shading Language extensions not available")) @end example See @ref{GL feature checking} for the details. If the client program calls a GL API that are not supported on the platform, an error is signalled. @c ---------------------------------------------------------------------- @node Using GLUT, Performance tips, Advanced GL features, Getting Started @section Using GLUT In order to make a runnable script, you need to use some windowing system interface. GLUT binding provides a simple way for it. Here is a complete runnable Scheme script, ported from Example 1-2 in "OpenGL Programming Guide": @example (use gl) (use gl.glut) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-begin* GL_POLYGON (gl-vertex '#f32(0.25 0.25 0.0)) (gl-vertex '#f32(0.75 0.25 0.0)) (gl-vertex '#f32(0.75 0.75 0.0)) (gl-vertex '#f32(0.25 0.75 0.0)) ) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0) ) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window "hello") (init) (glut-display-func disp) (glut-keyboard-func keyboard) (glut-main-loop) 0) @end example The @code{(use gl.glut)} form loads GLUT binding. The name mapping is the same as GL's: mixed case names to hyphenated names. In order to handle various events, you can pass a closure to @code{glut-display-func} etc. In the keyboard and mouse event callback, all arguments are integers. There are more examples under the @file{examples/} directory which uses GLUT. @c ---------------------------------------------------------------------- @node Performance tips, , Using GLUT, Getting Started @section Performance tips If you want to display millions of polygons in 30 fps, Gauche-gl is not for you. Consider using implementations that compiles into native code. The purpose of Gauche-gl is to provide reasonable performance for interactive development and experiment. However, if you know some tips, actually you can go quite far, especially with recent processors and graphics chips. @table @emph @item Avoid alocation within the inner loop. The functional (non-destructive) operations tend to return newly-allocated objects. Use linear-update (destructive) versions instead, such as @code{matrix-mul!}, @code{u8vector-add!}, etc, whenever possible. Pre-allocating temporary vectors is also effective. @item Reduce the number of calls within the inner loop. Vertex arrays are much better than calling @code{gl-vertex} over and over. Also consider using display lists if you're displaying rigid objects. @item Keep numbers within a uniform vector. Every time you take a number out of a uniform vector (or @code{<vector4f>} etc.), Gauche has to wrap the number by a tag (boxing). Also when you store a number into a uniform vector, Gauche has to check the type of the object, then strip a tag (unboxing). Those are all overhead you wouldn't have if you operate directly on uniform vectors (or @code{<vector4f>} etc). @item Write extensions to accelerate. If the above strategies are not enough, consider writing computation-intensive part in C as an extension. The easier way is to make C routines operate on uniform vectors, which is essentially a pointer to an array of numbers from C, and let Scheme handle higher-level data structures. (It could be viewed like relations between a coprocessor and a processor; the former does simple, iterative calculations fast, and the latter handles complicated logic). @end table @c ====================================================================== @node OpenGL API, GLUT API, Getting Started, Top @chapter OpenGL API In this chapter we list a GL and GLU procedures accessible from Gauche-gl, with brief descriptions to help programmers to remind what the functions are. We don't intend to make this an OpenGL reference, though; you should look at the OpenGL book for the details of what each API do. @menu * GL data types:: * GL feature checking:: * Drawing functions:: * GL state control:: * GL states for drawing:: * Transformation:: * Display lists:: * Vertex arrays:: * Lighting:: * Pixels:: * Texture mapping:: * Framebuffers:: * Selection and feedback:: * Projection:: * Quadrics:: * Nurbs:: * Polygon tesselation:: * Programmable shaders:: @end menu @c ---------------------------------------------------------------------- @node GL data types, GL feature checking, OpenGL API, OpenGL API @section GL data types GL doesn't define many data structures: some scalar primitives (e.g. @code{GLint}) and arrays of them. For scalar values, Gauche-gl has natural mappings: @table @code @item GLboolean Scheme booleans. @item GLbyte, GLubyte, GLshort, GLushort, GLint, GLuint, GLenum, GLbitfield Scheme exact integers. @item GLfloat, GLdouble, GLclampf, GLclampd Scheme real numbers. @end table For arrays, Gauche-gl uses uniform (srfi-4) vector whenever possible. For float arrays, however, Gauche-gl allows more structured types, such as points or matrices, when they are relevant. Such types are provided in @code{gl.math3d} module (see @ref{Vectors and matrices}), which also provides common arithmetics between those types. Another exception is an array of GLboolean---it doesn't have corresponding uniform vector representation. Gauche-gl defines a new type, @code{<gl-boolean-vector>}, to represent an array of GLboolean. See below for operations provided on it. @table @code @item GLbyte[] @code{<s8vector>} @item GLubyte[] @code{<u8vector>} @item GLshort[] @code{<s16vector>} @item GLushort[] @code{<u16vector>} @item GLint[] @code{<s32vector>} @item GLuint[] @code{<u32vector>} @item GLfloat[], GLclampf[] @code{<f32vector>}, @code{<point4f>}, @code{<vector-4f>}, @code{<point4f-array>}, @code{<vector4f-array>}, @code{<matrix4f>}, @code{<quatf>}. @item GLdouble[], GLclampd[] @code{<f64vector>} @item GLboolean[] @code{<gl-boolean-vector>} @end table @subheading GL boolean vectors @deftp {Class} <gl-boolean-vector> A class for an array of boolean values. You can pass its instance to the GL APIs that expect an array of GLbooleans. Its internal representation is bitwise compatible to GLbooean array, so passing it is quite efficient. This class inherits @code{<sequence>}, so you can use generic sequence operations on it. The external representation of GL boolean vector uses srfi-10 notation, and can be read back. For example, a GL boolean vector of length 5 may be written something like this: @example #,(gl-boolean-vector #t #f #t #f #t) @end example @end deftp @defun make-gl-boolean-vector size &optional init Returns a GL boolean vector of @var{size} elements. Elements are initialized by either @code{#f} or @code{#t}, according to @var{init}. @example (make-gl-boolean-vector 3 #t) @result{} #,(gl-boolean-vector #t #t #t) @end example @end defun @defun gl-boolean-vector bool @dots{} Returns a GL boolean vector, whose elements are @var{bool} @dots{}. @example (gl-boolean-vector #f #t #t) @result{} #,(gl-boolean-vector #f #t #t) @end example @end defun @defun gl-boolean-vector? obj Returns @code{#t} if @var{obj} is a GL boolean vector, @code{#f} otherwise. @end defun @defun gl-boolean-vector-length v Returns length of a GL boolean vector @var{v}. You can also use the sequence generic function @code{size-of}. @end defun @defun gl-boolean-vector-fill! v bool Fills a GL boolean vector @var{v} with a boolean value @var{bool}. @end defun @defun list->gl-boolean-vector bools Coerce list of boolean values to a GL boolean vector. You can also use the @code{coerce-to} generic function to convert between GL boolean vectors and other sequences. @end defun @defun gl-boolean-vector-ref v k &optional fallback Returns @var{k}-th element of a GL boolean vector @var{v}. If @var{k} is out of range and @var{fallback} is provided, it is returned. If @var{k} is out of range and @var{fallback} is omitted, an error is signalled. You can also use generic function @code{ref} to access a GL boolean vector. @end defun @defun gl-boolean-vector-set! v k bool Sets @var{k}-th element of a GL boolean vector @var{v} by a boolean value @var{bool}. You can also use generic function @code{(setter ref)} to modify a GL boolean vector. @end defun @defun gl-boolean-vector-copy v Returns a copy of a GL boolean vector @var{v}. @end defun @c ---------------------------------------------------------------------- @node GL feature checking, Drawing functions, GL data types, OpenGL API @section GL feature checking If you want to use a feature that are in OpenGL 1.2 or later, or in a GL extension, you have to check its availability before actually calling the API function. You can use the following utility procedures. Note that those functions may return @code{#f} if the connection to the display subsystem isn't established yet. Usually you have to initialize and open an window before checking the features. @defun gl-extension-available? extension-name @dots{} Returns @code{#t} if GL extensions listed in @var{extension-name} @dots{} are all available. @var{Extension-name} can be a symbol or a string (e.g. @code{GL_ARB_multisample}). @end defun @defun gl-version<? version @defunx gl-version<=? version @defunx gl-version>? version @defunx gl-version>=? version @defunx gl-version=? version Returns @code{#t} if the runtime OpenGL version is less than, less thanor equal to, greater than, greater than or equal to, and equal to, the given @var{version}, respectively. Give @var{version} in a string, e.g. @code{"1.3"}. @end defun @c ---------------------------------------------------------------------- @node Drawing functions, GL state control, GL feature checking, OpenGL API @section Drawing functions @defmac gl-begin* mode gl-commands @dots{} @vindex GL_POINTS @vindex GL_LINES @vindex GL_LINE_STRIP @vindex GL_LINE_LOOP @vindex GL_TRIANGLES @vindex GL_TRIANGLE_STRIP @vindex GL_TRIANGLE_FAN @vindex GL_QUADS @vindex GL_QUAD_STRIP @vindex GL_POLYGON Executes @var{gl-commands} between @code{(gl-begin @var{mode})} and @code{(gl-end)}. @var{Mode} can be one of the following constants. @table @code @item GL_POINTS Individual points. @item GL_LINES Pairs of vertices interpreted as individual line segments. @item GL_LINE_STRIP Series of connected line segments. @item GL_LINE_LOOP Same as above, with a segment added between last and first vertices. @item GL_TRIANGLES Triples of vertices interpreted as triangles. @item GL_TRIANGLE_STRIP Linked trip of triangles. @item GL_TRIANGLE_FAN Linked fan of triangles. @item GL_QUADS Quadruples of vertices interpreted as four-sided polygons. @item GL_QUAD_STRIP Linked strip of quadrilaterals. @item GL_POLYGON Boundary of a simple, convex polygon. @end table @end defmac @defun gl-begin mode @defunx gl-end Corresponds to @code{glBegin} and @code{glEnd}. Use of @code{gl-begin*} macro is recommended, though. @end defun @defun gl-flush Flush the GL command buffer. @end defun @defun gl-finish Make sure all previously issued GL commands are completed. @end defun @defun gl-rect point1 point2 @defunx gl-rect x1 y1 x2 y2 Draws a rectangle. In the first form, @var{point1} and @var{point2} can be either @code{<point4f>}, or f32, f64, s32, or s16vector of length 2. Types of both args should match. In the second form, all args should be a real numbers (@code{glRectd} is used). @end defun @defun gl-vertex point @defunx gl-vertex x y &optional z w Specify vertices. In the first form, @var{point} can be either @code{<point4f>}, or f32, f64, s32 or s16vector of length 2, 3 or 4. In the second form, all args should be a real numbers. @end defun @defun gl-normal vector @defunx gl-normal x y z Sets vertex normal vector. In the first form, @var{vector} can be either @code{<vector4f>} (the fourth element is ignored), or f32, f64, s32 ro s16vector of length 3. In the second form, all args should be a real numbers. @end defun @defun gl-color color @defunx gl-color r g b &optional a Sets the current color. In the first form, @var{color} can be either f32, f64, u8, u16, u32, s8, s16, or s32vector of length 3 or 4. In the second form, all args should be a real numbers. @end defun @defun gl-tex-coord coord @defunx gl-tex-coord u v &optional s t Sets the current texture coordinates. In the first form, @var{coord} can be either f32, f64, s32 or s16vector of length 1, 2, 3, or 4. In the second form, all args should be a real numbers. @end defun @defun gl-raster-pos pos @defunx gl-raster-pos x y &optional z w Sets the current raster position. In the first form, @var{pos} can be eitehr f32, f64, s32 or s16vector. In the second form, all args should be a real numbers. @end defun @c ---------------------------------------------------------------------- @node GL state control, GL states for drawing, Drawing functions, OpenGL API @section GL state control @subsubheading Capabilities @defun gl-enable cap @defunx gl-disable cap Turns on and off a capability @var{cap}. Check out OpenGL reference for the list of capabilities. @end defun @defun gl-is-enabled cap Returns @code{#t} of @code{#f} depending on @var{cap} is enabled or not. @end defun @defun gl-enable-client-state array @defunx gl-disable-client-state array Enable/disable a client-side array (e.g. vertex array) specified by @var{array}. @var{Array} can be one of the following constants. @table @code @item GL_VERTEX_ARRAY @item GL_COLOR_ARRAY @item GL_INDEX_ARRAY @item GL_NORMAL_ARRAY @item GL_TEXTURE_COORD_ARRAY @item GL_EDGE_FLAG_ARRAY @end table @end defun @subsubheading State values Gauche has two variations for each type of OpenGL @code{glGetTYPE} APIs; nondestructive version and destructive versions. Nondestructive versions such as @code{gl-get-boolean} allocates and returns the vector of appropriate type for the state. For destructive versions such as @code{gl-get-boolean!}, you need to pass a vector to be filled in. The destructive version is non-allocating operation, so it is suitable if you call it within the drawing loop. If the state has a scalar value, the non-destructive version of query function returns a scalar value, but you need to pass a (uniform) vector of length 1 for the destructive version. @defun gl-state-vector-size state [Gauche specific] Returns the required size of the vector to retrieve GL state @var{state}. It is useful to prepare the vector to pass to the destructive version of @code{glGetTYPE} API. @end defun @defun gl-get-boolean state @defunx gl-get-boolean! gl-boolean-vector state Get (a) boolean state value(s). @end defun @defun gl-get-integer state @defunx gl-get-integer! s32vector state Get (an) integer state value(s). @end defun @defun gl-get-float state @defunx gl-get-float! f32vector state Get (a) single-precision floating-point state value(s). @end defun @defun gl-get-double state @defunx gl-get-double! f64vector state Get (a) double-precision floating-point state value(s). @end defun @subsubheading Push/pop attributes @defun gl-push-attrib mask @defunx gl-pop-attrib Push/pop attributes indicated by @var{mask}. Valid @var{mask} can be @code{logior} of the following bits (GLL_ALL_ATTRIB_BITS is @code{logior} of all the bits). @table @code @item GL_ACCUM_BUFFER_BIT @item GL_COLOR_BUFFER_BIT @item GL_CURRENT_BIT @item GL_DEPTH_BUFFER_BIT @item GL_ENABLE_BIT @item GL_EVAL_BIT @item GL_FOG_BIT @item GL_HINT_BIT @item GL_LIGHTING_BIT @item GL_LINE_BIT @item GL_LIST_BIT @item GL_PIXEL_MODE_BIT @item GL_POINT_BIT @item GL_POLYGON_BIT @item GL_POLYGON_STIPPLE_BIT @item GL_SCISSOR_BIT @item GL_STENCIL_BUFFER_BIT @item GL_TEXTURE_BIT @item GL_TRANSFORM_BIT @item GL_VIEWPORT_BIT @item GL_ALL_ATTRIB_BITS All of the above. @end table @end defun @defun gl-push-client-attrib mask @defunx gl-pop-client-attrib Push/pop client attributes. Valid @var{mask} can be @code{logior} of the following @table @code @item GL_CLIENT_PIXEL_STORE_BIT @item GL_CLIENT_VERTEX_ARRAY_BIT @item GL_ALL_CLIENT_ATTRIB_BITS All of the above. @end table @end defun @subsubheading Other queries @defun gl-get-error Returns the value of the error flag. Returned an integer value. Check out the OpenGL documentation for the possible error values. This function resets the error flag to @code{GL_NO_ERROR}. @end defun @defun glu-error-string error-code Returns a descriptive string for @var{error-code} returned by @code{gl-get-error}. @end defun @defun gl-get-string name Returns informative string about @var{name} of the GL library. @var{Name} can be one of the following. @table @code @item GL_VENDOR @item GL_RENDERER @item GL_VERSION @item GL_EXTENSIONS @end table To check a specific version or extension, you can also use the utility procedure @code{gl-version>?} etc. See @ref{GL feature checking}. @end defun @defun glu-get-string name Returns informative string about @var{name} of the GLU library. @var{Name} can be one of the following. @table @code @item GLU_VERSION @item GLU_EXTENSIONS @end table @end defun @subsubheading Hints @defun gl-hint target hint Controls quality of @var{target} by @var{hint}. @var{Target} can be one of the following: @table @code @item GL_POINT_SMOOTH_HINT @item GL_LINE_SMOOTH_HINT @item GL_POLYGON_SMOOTH_HINT @item GL_FOG_HINT @item GL_PERSPECTIVE_CORRECTION_HINT @end table And @var{hint} can be one of the following: @table @code @item GL_FASTEST @item GL_NICEST @item GL_DONT_CARE @end table @end defun @c ---------------------------------------------------------------------- @node GL states for drawing, Transformation, GL state control, OpenGL API @section GL states for drawing @defun gl-point-size size Sets the width in pixels for rendered points. The possible range of @var{size} on the running GL implementation can be obtained by passing either @code{GL_ALIASED_POINT_SIZE_RANGE} or @code{GL_SMOOTH_POINT_SIZE_RANGE} to @code{gl-get-float}. @end defun @defun gl-line-width width Sets the width in pixels for rendered lines. The possible range of @var{width} on the running GL implementation can be obtained by passing either @code{GL_ALIASED_LINE_WIDTH_RANGE} or @code{GL_SMOOTH_LINE_WIDTH_RANGE} to @code{gl-get-float}. @end defun @defun gl-line-stipple factor pat Sets the current stippling pattern for lines. @code{pat} must be an exact integer, and its lower 16 bits are used to specify the stipple pattern. @var{Factor} is an integer factor to specify how many pixels corresponds to one bit in @var{pat}. You have to enable @var{GL_LINE_STIPPLE} to use face culling. @end defun @defun gl-polygon-mode face mode Specifies the drawing mode for a polygon's front and back faces. @var{Face} can be one of the followings: @table @code @item GL_FRONT_AND_BACK @item GL_FRONT @item GL_BACK @end table @var{Mode} can be one of the followings: @table @code @item GL_POINT @item GL_LINE @item GL_FILL @end table @end defun @defun gl-front-face mode Controls how OpenGL determine front face of a polygon @var{Mode} can be one of the followings: @table @code @item GL_CCW Front face is where ordered vertices appear in a counterclockwise orientation (default). @item GL_CW Front face is where ordered vertices appear in a clockwise orientation. @end table @end defun @defun gl-cull-face mode Indicates which face of polygons should be culled. @var{Mode} can be one of the followings: @table @code @item GL_FRONT @item GL_BACK @item GL_FRONT_AND_BACK @end table You have to enable @var{GL_CULL_FACE} to use face culling. @end defun @defun gl-polygon-stipple mask Defines the current stipple pattern for filled polygons. @var{Mask} has to be a u8vector of length 128, specifying a 32x32 bitmap pattern. You have to enable @var{GL_POLYGON_STIPPLE} to use this feature. @end defun @defun gl-edge-flag flag Sets the edge flag(s) of vertices. When @var{flag} is a GL boolean vector, @code{glEdgeFlagv} is called. Otherwise @var{flag} is used as a single boolean value for @code{glEdgeFlag}. @end defun @defun gl-blend-func sfactor dfactor Controls how color values in the fragment being processed (the source) are combined with the ones in the framebuffer (the destination). Possible values for the @var{sfactor} and @var{dfactor} arguments are as follows. @table @code @item GL_ZERO @item GL_ONE @item GL_DST_COLOR @item GL_SRC_COLOR @item GL_ONE_MINUS_DST_COLOR @item GL_ONE_MINUS_SRC_COLOR @item GL_SRC_ALPHA @item GL_ONE_MINUS_SRC_ALPHA @item GL_DST_ALPHA @item GL_ONE_MINUS_DST_ALPHA @item GL_SRC_ALPHA_SATURATE @item GL_CONSTANT_COLOR @item GL_ONE_MINUS_CONSTANT_COLOR @item GL_CONSTANT_ALPHA @item GL_ONE_MINUS_CONSTANT_ALPHA @end table @end defun @defun gl-blend-equation mode [GL_ARB_imaging] By default, the source and destination colors are added after processed as specified by @var{gl-blend-func}. With this extension API you can change the function. @var{Mode} can be one of the following values: @table @code @item GL_FUNC_ADD @item GL_FUNC_SUBTRACT @item GL_FUNC_REVERSE_SUBTRACT @item GL_MIN @item GL_MAX @end table @end defun @defun gl-blend-color red green blue alpha [GL_ARB_imaging] Sets the constant color used in the blending function. @end defun @defun gl-polygon-offset factor units [GL1.1] Offset the depth value of each fragment. Useful to avoid artifacts when you draw polygon edges over its surfaces, for example. @end defun @defun gl-clip-plane plane equation Defines a clipping plane. @var{Plane} specifies which clipping plane you're defining. Use @code{GL_MAX_CLIP_PLANES} to @code{gl-get-integer} to obtain the number of clipping planes you can use. You have to enable the specific clipping plane (e.g. @code{(gl-enable GL_CLIP_PLANE0)}) to use the clipping plane. @var{Equation} must be an f64vector of size 4, specifying four coefficients of the plane equation, @code{Ax + By + Cz + D = 0}. @end defun @defun gl-get-clip-plane plane Returns the four coefficients of the equation of clipping plane @var{plane}, in f64vector. @end defun @defun gl-fog pname param Sets the parameters and function for the fog effect. Possible values for @var{pname} and accepted @var{param} for each @var{pname} are shown below. @table @code @item GL_FOG_MODE Either @code{GL_EXP}, @code{GL_EXP2}, @code{GL_LINEAR} to select the fog factors. @item GL_FOG_DENSITY @item GL_FOG_START @item GL_FO_END A real number to specify those parametes. @item GL_FOG_COLOR An f32vector of size 4 to specify the color. @end table @end defun @c ---------------------------------------------------------------------- @node Transformation, Display lists, GL states for drawing, OpenGL API @section Transformation @defun gl-matrix-mode mode Speficies whether the modelview, projection, or texture matrix will be modified. @var{Mode} can be one of the followings: @table @code @item GL_MODELVIEW @item GL_PROJECTION @item GL_TEXTURE @end table @end defun @defun gl-load-identity Loads an identity matrix to the current modifiable matrix. @end defun @defun gl-load-matrix mat Loads the matrix @var{mat} to the current modifiable matrix. @var{Mat} can be a @code{<matrix4f>} instance, or f32 or f64vector of length 16. @end defun @defun gl-mult-matrix mat Multiplies the matrix @var{mat} to the current modifiable matrix. @var{Mat} can be a @code{<matrix4f>} instance, or f32 or f64vector of length 16. @end defun @defun gl-translate x y z Multiplies the current matrix by a matrix taht translates an object by (@var{x}, @var{y}, @var{z}). Internally, @code{glTranslated} is called. @end defun @defun gl-rotate angle x y z Multiplies the current matrix by a matrix that rotates an object in a counterclockwise direction about the ray from the origin through the point (@var{x}, @var{y}, @var{z}) by @var{angle} degrees. Internally, @code{glRotated} is called. @end defun @defun gl-scale x y z Multiplies the current matrix by a matrix that scales an object by (@var{x}, @var{y}, @var{z}). Internally, @code{glScaled} is called. @end defun @defun glu-look-at eyex eyey eyez ctrx ctry ctrz upx upy upz Defines a viewing matrix and multiplies it to the right of the current matrix. @end defun @defun gl-frustum left right bottom top nearv farv Creates a matrix for a perspective-view frustum and multiplies the current matrix by it. @end defun @defun glu-perspective fovy aspect znear zfar Creates a matrix for a symmetrix perspective-view frustum and multiplies the current matrix by it. @end defun @defun gl-ortho left right bottom top nearv farv Creates a matrix for an orthographic parallel viewing volume nand multiplies the current matrix by it. @end defun @defun glu-ortho-2d left right bottom top Convenience procedure for 2D drawing; it is the same as @code{gl-ortho} except nearv and farv are fixed (along Z axis) to -1.0 and 1.0, respectively. @end defun @defun gl-viewport x y width height Defines a pixel rectangle in the window into which the final image is mapped. @end defun @defun gl-push-matrix @defunx gl-pop-matrix Pushes/pops the current matrix. @end defun @defmac gl-push-matrix* expr @dots{} A convenience macro. Pushes the current matrix, executes @var{expr}s, then pop the current matrix. @end defmac @c ---------------------------------------------------------------------- @node Display lists, Vertex arrays, Transformation, OpenGL API @section Display lists @defun gl-gen-lists range Allocates @var{range} number of contiguous display list indices. Returns an integer which is the smallest display list index you can use. @end defun @defun gl-new-list list-no mode Starts a display list construction. @var{Mode} may be one of the constants @code{GL_COMPILE} or @code{GL_COMPILE_AND_EXECUTE}. @end defun @defun gl-end-list Ends a display list construction. @end defun @defun gl-call-list list-no Calls a display list. @end defun @defun gl-is-list list-no Returns @code{#t} if @var{list-no} is an already used display list number, @code{#f} otherwise. @end defun @defun gl-delete-lists list-no-start range Deletes @var{range} display list, beginning from @var{list-no-start}. @end defun @defun gl-list-base base Specifies the offset that's added to the display list indices in @code{gl-call-list}. @end defun @defun gl-call-lists size type lists @defunx gl-call-lists size lists @defunx gl-call-lists lists Executes @var{size} display list, whose indices are contained in @var{lists}. You can pass a u8, s8, u16, s16, u32, s32 or f32vector, or a string, as @var{lists}. If it is a string, each byte consists of the string is interpreted as an unsigned integer specifying a display list. It is useful for the technique to display character strings by creating display lists for each ASCII characters. But be aware that it doesn't work for multibyte characters. Usually you can use the simplest form (the third form) and Gauche-gl infers the @var{size} and @var{type} from the passed @var{lists}. You can explicitly specify @var{size} if you want to use just a beginning portion of @var{lists}. An error is signalled if you specify @var{size} that is larger than the size of @var{lists}. Specifying @var{type} is useful only if @var{lists} is a u8vector, and you want to use one of three special types allowed to @code{glCallLists}, namely @code{GL_2_BYTES}, @code{GL_3_BYTES}, and @code{GL_4_BYTES}. @end defun @c ---------------------------------------------------------------------- @node Vertex arrays, Lighting, Display lists, OpenGL API @section Vertex arrays Scheme version of APIs doesn't have @var{GLenum type} argument in C API, since Gauche-gl can figure out the type by passed vectors. Scheme API of @code{gl-*-array} has @var{offset} optional argument, by which you can pass the GL the values beginning from the @var{offset}-th element of the passed uniform vector. This isn't in GL C API, since you can just offset the pointer in C. NOTE: it is caller's responsibility to guarantee the passed vector has enough length. GL doesn't have an interface to specify the boundary, so Gauche can't detect an invalid length vector. @defun gl-vertex-pointer size vec &optional stride offset Sets the vertex array. @var{Size} specifies the number of scalar values per vertex (2, 3, or 4), and @var{vec} provides the actual value in either f32, f64, s32 or s16vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-normal-pointer vec &optional stride offset Sets the normal array. @var{Vec} should be either a f32, f64, s32 or s16vector, where each consecutive triplet specifies a normal vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-color-pointer size vec &optional stride offset Sets the color array. @var{Size} specifies the number of scalar values per color (3 or 4), and @var{vec} provides the actual values in either f32, f64, u32, u16, u8, s32, s16, or s8vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-index-pointer vec &optional stride offset Sets the index array. @var{Vec} can be either s32, s16, u8, f32, or f64vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-tex-coord-pointer size vec &optional stride offset Sets the texture coordinate array. @var{Size} specifies the number of scalar values per texture coordinate (1, 2, 3 or 4), and @var{vec} provides the actual values in either f32, f64, s32 or s16vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-edge-flag-pointer vec &optional stride offset Sets the edge flag array. @var{Vec} must be a GL boolean vector. @code{Stride} and @var{offset} can be used to tell GL to access @var{vec} sparsely. @end defun @defun gl-array-element ith Dereference @var{ith} vertex information of the currently enabled arrays. @end defun @defun gl-draw-elements mode indices Issues geometric primitive calls consists of the vertex information of the currently enabled arrays, each of which is specified by @var{indices}, which should be either a u8, u16 or u32vector. @var{Mode} is the same as of @code{gl-begin}. @end defun @defun gl-draw-range-elements mode start end indices [GL1.2] Like @code{gl-draw-elements}, but limits the range of indices between @var{start} and @var{end}, inclusive. GL driver may take advantage of the information for better performance. @end defun @defun gl-draw-arrays mode first count This is more straightforward. Starting from @var{first} index, @var{count} vertices is wrtten in the drawing mode @var{mode} (same as of @code{gl-begin}), taken from the current enabled arrays. @end defun @defun gl-interleaved-arrays format vec &optional stride offset @var{Vec} must be a f32vector. It contains various information (e.g. vertex position, color and texture coordinate) interleaved, in the way specified by @var{format}. In Scheme API, we only allow uniform vector as @var{vec}, so you can't use the format that mixes float and integer, such as @code{GL_C4UB_V2F}. @end defun @c ---------------------------------------------------------------------- @node Lighting, Pixels, Vertex arrays, OpenGL API @section Lighting @defun gl-shade-model mode Sets the shading model, either @code{GL_SMOOTH} or @code{GL_FLAT}. @end defun @defun gl-light light pname param Creates a light specified by @var{light}, which is one of @code{GL_LIGHT0}, @dots{}, @code{GL_LIGHT7}, and sets a characteristics named by @var{pname} with the value @var{param}. Possible values as @var{pname} and acceptable types of @var{param} are as follows. @table @asis @item @code{GL_AMBIENT}, @code{GL_DIFFUSE}, @code{GL_SPECULAR}, @code{GL_POSITION} Accepts an f32 or s32vector of size 4. @item @code{GL_SPOT_DIRECTION} Accepts an f32 or s32vector of size 3. @item @code{GL_SPOT_EXPONENT}, @code{GL_SPOT_CUTOFF}, @code{GL_CONSTNAT_ATTENUATION}, @code{GL_LINEAR_ATTENUATION}, @code{GL_QUADRATIC_ATTENUATION} Accepts a real number (@code{glLightf} is used). @end table @end defun @defun gl-get-light light pname Returns the value of the property @var{pname} of the light @var{light}. Returned value can be f32vector or a real number. @end defun @defun gl-light-model pname param Sets the value of the property @var{pname} of the lighting model. Possible @var{pname} and its allowed @var{param} is as follows. @table @asis @item @code{GL_LIGHT_MODEL_AMBIENT} Accepts f32 or s32vector of size 4. @item @code{GL_LIGHT_MODEL_LOCAL_VIEWER}, @code{GL_LIGHT_MODEL_TWO_SIDE} Accepts any Scheme value, which is interpreted as a boolean value. (That is, you have to pass @code{#f} to turn off these properties, and any other value to turn on. @item @code{GL_LIGHT_MODEL_COLOR_CONTROL} Accepts an enum value either @code{GL_SINGLE_COLOR} or @code{GL_SEPARATE_SPECULAR_COLOR}. @end table @end defun @defun gl-matrial face pname param Sets the current material property. @var{Face} may be either @code{GL_FRONT}, @code{GL_BACK}, or @code{GL_FRONT_AND_BACK}. Possible values of @var{pname} and acceptable @var{param} types are as follows. @table @asis @item @code{GL_AMBIENT}, @code{GL_DIFFUSE}, @code{GL_AMBIENT_AND_DIFFUSE}, @code{GL_SPECULAR}, @code{GL_EMISSION} Accepts f32 or s32vector of size 4. @item @code{GL_SHININESS} Accepts a single real number (@code{glMatrialf} is called). @item @code{GL_COLOR_INDEXES} Accepts f32 or s32vector of size 3. @end table @end defun @defun gl-get-material face pname Returns the current material property of @var{face} and @var{pname}. The type of returned value may be f32vector, s32vector (only for @code{GL_COLOR_INDEXES}), or a real number. @end defun @defun gl-color-material face mode Makes the material property @var{mode} (e.g. @code{GL_AMBIENT} etc.) of the face @var{face} follow the current color set by @code{gl-color}. @end defun @c ---------------------------------------------------------------------- @node Pixels, Texture mapping, Lighting, OpenGL API @section Pixels, bitmaps and images @subheading Pixel operations @defun gl-bitmap width height xbo ybo xbi ybi bitmap Draws a bitmap. @var{Width} and @var{height} gives the dimension of the bitmap. @var{Xbo}, @var{ybo}, @var{xbi}, and @var{ybi} specifies the origin and increment of the current raster position. @var{Bitmap} is the actual bitmap data, packed in a u8vector. @end defun @defun gl-read-pixels x y width height format type Reads pixel data from the framebuffer. Returns the pixel data in a uniform vector of the type determined by @var{format} and @var{type} (check out OpenGL doc to find out the actual data format). @end defun @defun gl-draw-pixels width height format type pixels Draws a pixel data @var{pixels} at the current raster position. @var{Pixels} must be a uniform vector compatible to the specified @var{format} and @var{type} values. @end defun @defun gl-copy-pixels x y width height buffer Copies pixel data in a rectangle area of the framebuffer, specified by lower-left corner (@var{x}, @var{y}) and dimensions (@var{width}, @var{height}). @var{Buffer} specifies which buffer is used, and should be one of @code{GL_COLOR}, @code{GL_STENCIL} or @code{GL_DEPTH}. @end defun @defun gl-pixel-store pname param Sets the pixel stroage models. Check out the OpenGL doc for the possible @var{pname} and @var{param} values. @end defun @defun gl-pixel-transfer pname param Sets the pixel transfer modes. Check out the OpenGL doc for the possible @var{pname} and @var{param} values. @end defun @defun gl-pixel-map map values Sets the pixel map table @var{map} with @var{values}, which must be either u16, u32 or f32vecotor. Check out the OpenGL doc for the possible @var{map} values. @end defun @defun gl-pixel-zoom xfactor yfactor Sets the magnification/reduction factors for pixel-write operations. @end defun @defun gl-get-pixel-map map &optional type Returns the current pixel map table as an uniform vector specified by @var{type}, which must be either a class @code{<u32vector>} (default), @code{<u16vector>}, or @code{<f32vector>}. @end defun @defun gl-get-pixel-map! map values Like @code{gl-get-pixel-map}, but instead of allocating a new vector, it stores the result to a uniform vector passed to @var{values}. It is a caller's responsibility to ensure @var{values} has enough size. @end defun @subheading Color tables @defun gl-color-table target internal-format width format type data [GL_ARB_imaging] Specifies one of the color table @var{target}. @var{Data} should be a uniform vector compatible to the @var{format} and @var{type} parameters. @end defun @defun gl-color-table-parameter target pname param [GL_ARB_imaging] Sets the color table parameter @var{pname} (either @code{GL_COLOR_TABLE_SCALE} or @code{GL_COLOR_TABLE_BIAS}), of the color table @var{target}. @var{Param} must be an f32 or s32vector of size 4. @end defun @defun gl-copy-color-table target internal-format x y width [GL_ARB_imaging] Creates a color table @var{target} using framebuffer data. The pixels are read from the current buffer for read (specified by @code{glReadBuffer}). @end defun @defun gl-color-sub-table target start count format type data [GL_ARB_imaging] Replaces a part of color table @var{target}, starting @var{start} and @var{count} entries. Values are given in @var{data} as a uniform vector compatible to the @var{format} and @var{type} arguments. @end defun @defun gl-copy-color-sub-table target start x y width [GL_ARB_imaging] Replaces a part of color table entries using framebuffer data. @end defun @defun gl-get-color-table! target format type data [GL_ARB_imaging] Reads the color table @var{target} and store it in @var{data}, in the format specified by @var{format} and @var{type}. @var{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments. The caller must ensure that @var{data} has enough size to contain the result. @end defun @subheading Convolutions @defun gl-convolution-filter-2d target internal-format width height format type data [GL_ARB_imaging] Defines a 2D convolution filter. @var{Target} must be GL_CONVOLUTION_2D. @code{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-copy-convolution-filter-2d target internal-format x y width height [GL_ARB_imaging] Defines a 2D convolution filter, taking the convolution filter data from the current color buffer to read. @end defun @defun gl-separable-filetr-2d target internal-format width height format type row column [GL_ARB_imaging] Defines a 2D convolution filter by a product of a 1D row vector and 1D column vector. @var{Target} must be GL_SEPARABLE_2D. Both @var{row} and @var{column} must be a uniform vector, compatible with the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-convolution-filter-1d target internal-format width format type data [GL_ARB_imaging] Defines 1D convolution filter. @var{Target} must be GL_CONVOLUTION_1D. @code{Data} must be a uniform vector compatible to the @var{format} and @var{type} arguments, and must have enough size. @end defun @defun gl-copy-convolution-filter-1d target internal-format x y width [GL_ARB_imaging] Defines 1D convolution filter, taking the convolution filter data from the current color buffer to read. @end defun @defun gl-convolution-parameter target pname param [GL_ARB_imaging] Sets a parameter for a convolution filter @var{target}, which can be either @code{GL_CONVOLUTION_2D}, @code{GL_SEPARABLE_2D}, or @code{GL_CONVOLUTION_1D}. Possible values of @var{pname} and their acceptable @var{param} are as follows. @table @asis @item @code{GL_CONVOLUTION_BORDER_MODE} Either one of the constants: @code{GL_REDUCE}, @code{GL_CONSTNAT_BORDER}, @code{GL_REPLICATE_BORDER} @item @code{GL_CONVOLUTION_FILTER_SCALE}, @code{GL_CONVOLUTION_FILTER_BIAS} An s32 or f32vector of size 4, specifying color values. @end table @end defun @subheading Histogram @defun gl-histogram target width internal-format sink [GL_ARB_imaging] Specifies the way the histogram data is stored. @var{Target} must be either @code{GL_HISTOGRAM} or @code{GL_PROXY_HISTOGRAM}. @var{Width} is the number of entires of the histogram, and has to be a power of 2. @var{Sink} is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline. @end defun @defun gl-reset-histogram target [GL_ARB_imaging] Resets the histogram counters. @var{Target} must be @code{GL_HISTOGRAM}. @end defun @defun gl-get-histogram target reset format type [GL_ARB_imaging] Returns histogram data in a uniform vector, whose type and size are determined by @var{format} and @var{type}. A boolean value @var{reset} specifies whether the histogram should be reset or not. @end defun @defun gl-get-histogram-parameter target pname [GL_ARB_imaging] Returns the parameter value of the histogram. @var{Pname} can be either one of @code{GL_HISTOGRAM_WIDTH}, @code{GL_HISTOGRAM_FORMAT}, @code{GL_HISTOGRAM_RED_SIZE}, @code{GL_HISTOGRAM_GREEN_SIZE}, @code{GL_HISTOGRAM_BLUE_SIZE}, @code{GL_HISTOGRAM_ALPHA_SIZE}, @code{GL_HISTOGRAM_LUMINANCE_SIZE}, or @code{GL_HISTOGRAM_SINK}. The returned value is an integer, except the case of @code{GL_HISTOGRAM_SINK}, which returns a boolean value. @end defun @subheading Minmax @defun gl-minmax target internal-format sink [GL_ARB_imaging] Computes the minimum and maximum pixel values for an image. @var{Target} must be @code{GL_MINMAX}. @var{Sink} is a boolean value to indicate whether pixels should be discarded or sent down further to the pipeline. @end defun @defun gl-get-minmax target reset format type [GL_ARB_imaging] Returns the results of the minmax operation in a uniform vector, whose type and size are determined by the @var{format} and @var{type} arguments. A boolean value @var{reset} specifies whether the histogram should be reset or not. @end defun @defun gl-reset-minmax target [GL_ARB_imaging] Resets the minmax counter. @end defun @defun gl-get-minmax-parameter target pname [GL_ARB_imaging] Returns the parameter value of the histogram. @var{Pname} can be either @code{GL_MINMAX_SINK} (returns a boolean value) or @code{GL_MINMAX_FORMAT} (returns an integer). @end defun @c ---------------------------------------------------------------------- @node Texture mapping, Framebuffers, Pixels, OpenGL API @section Texture mapping @subheading Defining textures @defun gl-tex-image-1d target level internalformat width border format type texels @defunx gl-tex-image-2d target level internalformat width height border format type texels @defunx gl-tex-image-3d target level internalformat width height depth border format type texels Defines an 1D, 2D or 3D texture. 3D texture is available only if the GL version is 1.2 or later. The @var{target} parameter can be @code{GL_TEXTURE_1D} or @code{GL_PROXY_TEXTURE_1D} for @code{gl-tex-image-1d}, etc. The @var{level} parameter can be used for multiresolution textures; if this is a single resolution texture, pass 0. @var{Width}, @var{height}, and @var{depth} specify the dimensions of the texture. @var{Border} can be 0 or 1, specifying the border. The actual texture data is passed to the @var{texels} argument in a uniform vector, which should be compatible with the @var{format} and @var{type} parameters and match the size calculated by @var{width}, @var{height} and @var{depth} (and possibly the pixel store setting). @end defun @defun gl-copy-tex-image-1d target level internal-format x y width border @defunx gl-copy-tex-image-2d target level internal-format x y width height border Cerates a 1D or 2D texture from the framebuffer data. @end defun @defun gl-tex-sub-image-1d target level xoffset width format type texels @defunx gl-tex-sub-image-2d target level xoffset yoffset width height format type texels @defunx gl-tex-sub-image-3d target level xoffset yoffset zoffset width height depth format type texels Replaces a part of the current 1D, 2D or 3D texture image by @var{texels}. 3D texture is available only if the GL version is 1.2 or later. @end defun @defun gl-copy-tex-sub-image-1d target level xoffset x y width @defunx gl-copy-tex-sub-image-2d target level xoffset yoffset x y width height @defunx gl-copy-tex-sub-image-3d target level xoffset yoffset zoffset x y width height Replaces a part of the current 1D, 2D or 3D texture image by the data from the framebuffer. 3D texture is available only if the GL version is 1.2 or later. @end defun @subheading Texture parameters @defun gl-tex-parameter target pname param Sets parameters for the current texture. @var{Target} can be either @var{GL_TEXTURE_1D}, @code{GL_TEXTURE_2D} or @var{GL_TEXTURE_3D}. Possible values for @var{pname}, and accepted type of @var{param} for each @var{pname}, are shown below. @table @code @item GL_TEXTURE_WRAP_S @item GL_TEXTURE_WRAP_T @item GL_TEXTURE_WRAP_R @item GL_TEXTURE_BASE_LEVEL @item GL_TEXTURE_MAX_LEVEL @item GL_TEXTURE_MAG_FILTER @item GL_TEXTURE_MIN_FILTER @var{Param} must be an integer. @item GL_TEXTURE_PRIORITY @item GL_TEXTURE_MIN_LOD @item GL_TEXTURE_MAX_LOD @var{Param} must be a real number. @item GL_TEXTURE_BORDER_COLOR @var{Param} must be an f32vector of size 4, representing a color. @end table @end defun @defun gl-get-tex-parameter target pname Obtains the parameter of the current texture, set by @code{gl-tex-parameter}. @end defun @defun gl-get-tex-level-parameter target level pname Obtains the parameter of the level @var{level} of the current texture specified by @var{target}, which can be either @code{GL_TEXTURE_1D}, @code{GL_TEXTURE_2D}, @code{GL_TEXTURE_3D}, @code{GL_PROXY_TEXTURE_1D}, @code{GL_PROXY_TEXTURE_2D}, or @code{GL_PROXY_TEXTURE_3D}. Possible values for @var{pname} is either one of the following constants: @code{GL_TEXTURE_WIDTH}, @code{GL_TEXTURE_HEIGHT}, @code{GL_TEXTURE_DEPTH}, @code{GL_TEXTURE_BORDER}, @code{GL_TEXTURE_INTERNAL_FORMAT}, @code{GL_TEXTURE_RED_SIZE}, @code{GL_TEXTURE_GREEN_SIZE}, @code{GL_TEXTURE_BLUE_SIZE}, @code{GL_TEXTURE_ALPHA_SIZE}, @code{GL_TEXTURE_LUMINANCE_SIZE}, or @code{GL_TEXTURE_INTENSITY_SIZE}. This procedure returns an integer. @end defun @subheading Mipmaps @defun glu-build-1d-mipmaps target internal-format width format type texels @defunx glu-build-2d-mipmaps target internal-format width height format type texels @defunx glu-build-3d-mipmaps target internal-format width height depth format type texels Constructs a serids of mipmaps and calls @code{gl-tex-image-*d} to load the images. Returns 0 on success, or a GLU error code on failure. @var{Texels} is a uniform vector, that must be compatible with @var{format} and @var{type} arguments, and must have the enough length as specified by @var{width}, @var{height} and @var{depth} parameters. @end defun @defun glu-build-1d-mipmap-levels target internal-format width format type level base max texels @defunx glu-build-2d-mipmap-levels target internal-format width height format type level base max texels @defunx glu-build-3d-mipmap-levels target internal-format width height depth format type level base max texels Like @code{glu-build-*d-mipmaps}, but you can specify the level of @var{texels}, and the range of levels to be generated by the @var{base} and @var{max} parameters. It is used to generate a subset of mipmaps. Returns 0 on success, or a GLU error code on failure. @var{Texels} is a uniform vector, that must be compatible with @var{format} and @var{type} arguments, and must have the enough length as specified by @var{width}, @var{height} and @var{depth} parameters. @end defun @subheading Texture objects @defun gl-gen-textures size Returns @var{size} new names for texture objects in a u32vector. @end defun @defun gl-is-texture name Returns @code{#t} if an integer @var{name} is the name of a texture that has been bound and not deleted yet, @code{#f} otherwise. @end defun @defun gl-bind-texture target name Bind the current texture (specified by @var{target}, e.g. @code{GL_TEXTURE_2D}) to the integer @var{name}. If there's already a texture bound to @var{name}, it becomes current. Otherwise a new texture object is created and made current. @end defun @defun gl-delete-textures names Delets textures. @var{Names} must be a u32vector contains integer names of the texture objects to be deleted. @end defun @defun gl-are-textures-resident! names residences @var{Names} must be a u32vector contains integer names of the texture objects, and @var{residences} must be a GL boolean vector of the same length as @var{names}. If all textures named in @var{names} are resident, @code{#t} is returned and @var{residences} is not modified. Othewise, @code{#f} is returned and @var{residences} is modified to contain @code{#t} if the corresponding texture in @var{names} is resident, @code{#f} othewise. @end defun @defun gl-prioritize-textures names priorities Sets the prioridies of texture objects named by @var{names} to the corresponding entry of @var{priorities} @var{Names} must be a u32vectore and @var{priorities} must be an f32vector, and the lengths of both vectors must match. @end defun @subheading Texture environment and coordinates @defun gl-tex-env target pname param Sets the current texturing function. @var{Target} must be @code{GL_TEXTURE_ENV}. Possible values of @var{pname} and accepted @var{param} for each value is as follows. @table @code @item GL_TEXTURE_ENV_MODE One of @code{GL_DECAL}, @code{GL_REPLACE}, @code{GL_MODULATE} or @code{GL_BLEND}. @item GL_TEXTURE_ENV_COLOR f32vector of size 4 to specify the color. @end table @end defun @defun gl-tex-gen coord pname param Specifies the functions for automatic texture coordinate generation. @var{Coord} specifies the coordinates, either one of @code{GL_S}, @code{GL_T}, @code{GL_R} or @code{GL_Q}. Possible values of @var{pname} and accepted @var{param} for each value is as follows. @table @code @item GL_TEXTURE_GEN_MODE Either @code{GL_OBJECT_LINEAR}, @code{GL_EYE_LINEAR} or @code{GL_SPHERE_MAP}. @item GL_OBJECT_PLANE @item GL_EYE_PLANE An s32, f32 or f64vector of size 4 to specify the plane. @end table @end defun @subheading Multitexturing @defun gl-active-texture-arb texunit [GL_ARB_multitexture] Selects the texture unit that is currently modified by texturing routines. @var{Texunit} is a constant @code{GL_TEXTUREi_ARB}, where @var{i} is 0 to the maximum number of the supported texture units. @end defun @defun gl-multi-tex-coord-arb texunit coords @defunx gl-multi-tex-coord-arb texunit s &optional t r q [GL_ARB_multitexture] Specifies the texture coordinate of the texture unit @var{texunit}. In the first form, you can pass either an f32, f64, s32, or s16vector of length 1 to 4. In the second form, @var{s}, @var{t}, @var{r} and @var{q} must be real numbers. @end defun @defun gl-client-active-texture-arb texunit Selects the current texture unit for specifying texutre-coordinate data with vertex arrays. @end defun @c ---------------------------------------------------------------------- @node Framebuffers, Selection and feedback, Texture mapping, OpenGL API @section Framebuffers @subheading Clearing buffers @defun gl-clear-color r g b a Sets the current clearing color. Each color value sould be a real number, and is clamped to @code{[0.0,1.0]}. @end defun @defun gl-clear-index c Sets the current clearing color (in color index mode). @var{c} must be a real number. @end defun @defun gl-clear-depth depth Sets the current clearing depth value. @var{Depth} must be a real number and clamped to @code{[0.0,1.0]}. @end defun @defun gl-clear-stencil s Sets the current clearing value of the stencil buffer. @end defun @defun gl-clear-accum r g b a Sets the current clearing value of accumulation buffer. @end defun @defun gl-clear mask Clears the specified buffer. @var{Mask} is a logical-or of the following constants. @table @code @item GL_COLOR_BUFFER_BIT @item GL_DEPTH_BUFFER_BIT @item GL_ACCUM_BUFFER_BIT @item GL_STENCIL_BUFFER_BIT @end table @end defun @subheading Selecting color buffers @defun gl-draw-buffer mode Selects (a) buffer(s) to which the image is rendered. Possible @var{mode} values are: @code{GL_FRONT}, @code{GL_FRONT_LEFT}, @code{GL_FRONT_RIGHT}, @code{GL_BACK}, @var{GL_BACK_LEFT}, @var{GL_BACK_RIGHT}, @code{GL_LEFT}, @code{GL_RIGHT}, @code{GL_AUXi}, @code{GL_FRONT_AND_BACK}, and @code{GL_NONE}. @end defun @defun gl-read-buffer mode Selects a color buffer as the source for reading pixels. Possible @var{mode} values are the same as @code{gl-draw-buffer} except @code{GL_FRONT_AND_BACK} and @code{GL_NONE}. @end defun @subheading Masking buffers @defun gl-index-mask mask In color index mode, sets the mask of the color-index buffer. @var{Mask} is an exact integer. @end defun @defun gl-color-mask r g b a @var{R}, @var{g}, @var{b} and @var{a} are boolean values to specify whether the corresponding color channel should be written to the color buffer or not. @end defun @defun gl-depth-mask flag @var{Flag} is a boolean value specifies whether depth buffer should be written or not. @end defun @defun gl-stencil-mask mask Sets the mask bit pattern for the stencil buffer. @var{Mask} is an exact integer. @end defun @subheading Testing and operating on fragments @defun gl-scissor x y width height Sets the scissor rectangle. If the scissor test is enabled (use @code{(gl-enable GL_SCISSOR_TEST)}), only the pixels that lie inside the rectangle are written. @end defun @defun gl-alpha-func func ref Sets the reference value and comparison function for the alpha test. @var{Func} may be either one of @code{GL_NEVER}, @code{GL_ALWAYS}, @code{GL_LESS}, @code{GL_LEQUAL}, @code{GL_EQUAL}, @code{GL_GEQUAL}, @code{GL_GREATER}, or @code{GL_NOTEQUAL}. @var{Ref} sets the reference value, a real number clamped to be between 0.0 and 1.0. @end defun @defun gl-stencil-func func ref mask Sets the comparison function, the reference value, and a mask for stencil test. @var{Func} specifies the funciton, and its possible value is the same as @code{gl-alpha-func}'s. @var{Ref} is an integer reference value, and @var{mask} is an integer specifying bitwise mask. Before the comparison, the reference value and the fragment value are taken bitwise AND by @var{mask}. @end defun @defun gl-stencil-op func zfail zpass Speficies how the stencil buffer should be modified by the result of the stencil test. Each three parameter can take one of the following values independently: @code{GL_KEEP}, @code{GL_ZERO}, @code{GL_REPLACE}, @code{GL_INCR}, @code{GL_DECR}, or @code{GL_INVERT}. @end defun @defun gl-depth-func func Sets the comparison function for the depth test. @var{Func} may be one of the following constant value: @code{GL_NEVER}, @code{GL_ALWAYS}, @code{GL_LESS}, @code{GL_LEQUAL}, @code{GL_EQUAL}, @code{GL_GEQUAL}, @code{GL_GREATER}, or @code{GL_NOTEQUAL}. @end defun @defun gl-depth-range nearv farv Defines an encoding for z-coordinates. @var{Nearv} and @var{farv} define the minimum and maximum values that can be stored in the depth buffer. By default, they're 0.0 and 1.0, respectively. @end defun @defun gl-logic-op opcode Selects the logical operation to be performed, given an incoming (source) fragment and the pixel currently in the color buffer (destination). @var{Opcode} may be one of the following values: @code{GL_CLEAR}, @code{GL_COPY}, @code{GL_NOOP}, @code{GL_SET}, @code{GL_COPY_INVERTED}, @code{GL_INVERT}, @code{GL_AND_REVERSE}, @code{GL_OR_REVERSE}, @code{GL_AND}, @code{GL_OR}, @code{GL_NAND}, @code{GL_NOR}, @code{GL_XOR}, @code{GL_EQUIV}, @code{GL_AND_INVERTED} or @code{GL_OR_INVERTED}. @end defun @defun gl-accum op value Sets the accumulation buffer operation mode. @var{Op} may be one of the following values: @table @code @item GL_ACCUM Reads each pixel from the current selected buffer to read (by @code{gl-read-buffer}), multiplies its values by @var{value}, and adds the result into the accumulation buffer. @item GL_LOAD Same as @code{GL_ACCUM} but replacing the accumulation buffer by the result of multiplication, instead of adding it. @item GL_RETURN Takes the values from accumulation buffer, multiplies them with @var{value}, then write it to the current color buffer to write (by @code{gl-draw-buffer}). @item GL_ADD Adds @var{value} to each pixel in the accumulation buffer and write it back. @item GL_MULT Multiplies @var{value} to each pixel in the accumulation buffer and write it back. The result value is clamped to [-1.0, 1.0]. @end table @end defun @c ---------------------------------------------------------------------- @node Selection and feedback, Projection, Framebuffers, OpenGL API @section Selection and feedback @defun gl-feedback-buffer type buffer @end defun @defun gl-select-buffer buffer @end defun @defun gl-render-mode mode @end defun @defun gl-pass-through token @end defun @defun gl-init-names @end defun @defun gl-load-name name @end defun @defun gl-push-name name @end defun @defun gl-pop-name @end defun @c ---------------------------------------------------------------------- @node Projection, Quadrics, Selection and feedback, OpenGL API @section Projection @defun glu-pick-matrix x y w h vp @end defun @defun glu-project objx objy objz model-mat proj-mat vp @end defun @defun glu-un-project winx winy winz model-mat proj-mat vp @end defun @defun glu-project! win obj model-mat proj-mat vp @end defun @defun glu-un-project! obj win model-map proj-mat vp @end defun @c ---------------------------------------------------------------------- @node Quadrics, Nurbs, Projection, OpenGL API @section Quadrics @deftp {Class} <glu-quadric> @end deftp @defun glu-quadric-draw-style quad style @defvr {Constant} GLU_POINT @defvrx {Constant} GLU_LINE @defvrx {Constant} GLU_FILL @defvrx {Constant} GLU_SILHUETTE @end defvr @end defun @defun glu-quadric-orientation quad orientation @defvr {Constant} GLU_OUTSIDE @defvrx {Constant} GLU_INSIDE @end defvr @end defun @defun glu-quadric-normals quad normals @defvr {Constant} GLU_SMOOTH @defvrx {Constant} GLU_FLAT @defvrx {Constant} GLU_NONE @end defvr @end defun @defun glu-quadric-texture quad texcoords @end defun @defun glu-cylinder quad base-radius top-radius height slices stacks @end defun @defun glu-sphere quad radius slices stacks @end defun @defun glu-disk quad inner-radius outer-radius slices loops @end defun @defun glu-partial-disk quad inner-radius outer-radius slices loops start-angle sweep-angle @end defun @c ---------------------------------------------------------------------- @node Nurbs, Polygon tesselation, Quadrics, OpenGL API @section Nurbs @deftp {Class} <glu-nurbs> @end deftp @defun glu-load-sampling-matrices nurbs model-matrix proj-matrix viewport @end defun @defun glu-nurbs-property nurbs property value @end defun @defun glu-get-nurbs-property nurbs property @end defun @defun glu-begin-curve nurbs @end defun @defun glu-end-curve nurbs @end defun @defun glu-nurbs-curve nurbs knot stride ctlarray order type @end defun @defun glu-begin-surface nurbs @end defun @defun glu-end-surface nurbs @end defun @c ---------------------------------------------------------------------- @node Polygon tesselation, Programmable shaders, Nurbs, OpenGL API @section Polygon tesselation @deftp {Class} <glu-tesselator> @end deftp @c ---------------------------------------------------------------------- @node Programmable shaders, , Polygon tesselation, OpenGL API @section Programmable shaders @subheading Shader objects @defun gl-create-shader-object-arb type [GL_ARB_shader_objects] Creates a new shader object and returns its handle. @var{Type} can be either @code{GL_VERTEX_SHADER_ARB} or @code{GL_FRAGMENT_SHADER_ARB}. @end defun @defun gl-shader-source-arb shader strings [GL_ARB_shader_objects] Sets the source code of the shader, whose handle is @var{shader}. You can give the source code as a list of strings to @var{strings}. All strings are concatenated internally in the OpenGL driver. @end defun @defun gl-compile-shader-arb shader [GL_ARB_shader_objects] Compile the source code attached to the shader, whose handle is @var{shader}. You can query the result of the compilation by passing @code{GL_OBJECT_COMPILE_STATUS_ARB} to @code{gl-get-object-parameter-arb}; it returns @code{#t} if the compilation succeeded, or @code{#f} if failed. The information about the compilation can be obtained by @code{gl-get-info-log-arb}. @end defun @defun gl-create-program-object-arb [GL_ARB_shader_objects] Creates a new program object and returns its handle. @end defun @defun gl-attach-object-arb program shader [GL_ARB_shader_objects] Attach a shader whose handle is @var{shader} to the program whose handle is @var{program}. @end defun @defun gl-detach-object-arb program shader [GL_ARB_shader_objects] Detach a shader from a program. @end defun @defun gl-link-program-arb program [GL_ARB_shader_objects] Link the program object. The result of linking can be queried by passing @code{GL_OBJECT_LINK_STATUS_ARB} to @code{gl-get-object-parameter-arb}. @end defun @defun gl-use-program-object-arb program [GL_ARB_shader_objects] Installs the program to the current rendering state. @end defun @defun gl-delete-object-arb handle [GL_ARB_shader_objects] Deletes either a shader object or a program object specified by @var{handle}. @end defun @defun gl-get-object-parameter-arb object pname [GL_ARB_shader_objects] Queries the value of @var{pname} of the shader or the program specified by @var{object}. The following values are accepted as @var{pname}: @code{GL_OBJECT_TYPE_ARB}, @code{GL_OBJECT_SUBTYPE_ARB}, @code{GL_OBJECT_DELETE_STATUS_ARB}, @code{GL_OBJECT_COMPILE_STATUS_ARB}, @code{GL_OBJECT_LINK_STATUS_ARB}, @code{GL_OBJECT_VALIDATE_STATUS_ARB}, @code{GL_OBJECT_INFO_LOG_LENGTH_ARB}, @code{GL_OBJECT_ATTACHED_OBJECTS_ARB}, @code{GL_OBJECT_ACTIVE_ATTRIBUTES_ARB}, @code{GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB}, @code{GL_OBJECT_ACTIVE_UNIFORMS_ARB}, @code{GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB}, and @code{GL_OBJECT_SHADER_SOURCE_LENGTH_ARB}. The procedure returns an integer value. @end defun @defun gl-get-shader-source-arb shader [GL_ARB_shader_objects] Returns the shader source code of a shader object @var{shader} in a string. @end defun @defun gl-get-info-log-arb handle [GL_ARB_shader_objects] Returns the information log of an object pointed by @var{handle}. @end defun @defun gl-get-handle-arb pname [GL_ARB_shader_objects] Returns the handle to an object that is used in the current state. The only argument accepted currently as @var{pname} is @code{GL_PROGRAM_OBJECT_ARB}, which returns the handle to the current program object. @end defun @defun gl-get-attached-objects-arb program [GL_ARB_shader_objects] Rethrns a vector of GL object handles that are attached to the @var{program}. @end defun @defun gl-validate-program-arb program [GL_ARB_shader_objects] Checks whether the @var{program} can execute in the current GL state. The result is stored in @var{program}'s log. @end defun @subheading Specifying vertex attributes @defun gl-vertex-attrib-arb index values @defunx gl-vertex-attrib-arb index v0 &rest v1 v2 v3 [GL_ARB_vertex_program] Sets the generic vertex attribute specified by @var{index}. In the first form, you can pass f32, f64, or s16vector of size 1 to 4, or u8, s8, u16, s32, or u32vector of size 4. In the second form, you can pass 1 to 4 real numbers (they are interpreted as C doubles and @code{glVertexAttrib4dARB} is called). @end defun @defun gl-vertex-attrib-4n-arb index values @defunx gl-vertex-attrib-4n-arb index v0 v1 v2 v3 [GL_ARB_vertex_program] These variations can be used to pass normalized values. The first form accepts s8, u8, s16, u16, s32, u32, f32 and f64vector of size 4. The second value takes four integers, whose lower 8bits are taken as unsigned byte and passed to @code{glVertexAttrib4NubARB}. @end defun @defun gl-vertex-attrib-pointer-arb index size vec &optional normalized stride offset [GL_ARB_vertex_program] This is the generic version of vertex arrays. @var{Index} names the attribute, @var{size} specifies the number of components (1, 2, 3 or 4), and @var{vec} is a uniform vector that contains the array of values. The optional boolean @var{normalized} argument tells whether the passed integer values should be mapped to normalized range (@code{#t} or taken as are @code{#f}, default). The optional @var{stride} argument specifies the gap between each set of values within @var{vec}. The optional @var{offset} argument tells GL to take values beginning from the @var{offset}-th element of @var{vec}. @end defun @defun gl-enable-vertex-attrib-array-arb index @defunx gl-disable-vertex-attrib-array-arb index [GL_ARB_vertex_program] Enable or disable a vertex attribute array specified by @var{index}. @end defun @defun gl-bind-attrib-location-arb program index name [GL_ARB_vertex_shader] Associates a user-defined attribute variable in the program object @var{program} with an @var{index}-th generic vertex attribute. @var{Name} is a string of the name of user-defined attribute as appears in the shader program. @end defun @defun gl-get-attrib-location-arb program name [GL_ARB_vertex_shader] Returns an integer index of the user-defined attribute @var{name} in the @var{program}. Must be called after @var{program} is linked. @end defun @defun gl-get-active-attrib-arb program index [GL_ARB_vertex_shader] Obtains information about the @var{index}-th user-defined attribute in the @var{program}. Must be called after @var{program} is linked. It returns three values: the size of the attribute (1, 2, 3 or 4), the type of the attribute (an integer that matches one of the following constants: @code{GL_FLOAT}, @code{GL_FLOAT_VEC2_ARB}, @code{GL_FLOAT_VEC3_ARB}, @code{GL_FLOAT_VEC4_ARB}, @code{GL_FLOAT_MAT2_ARB}, @code{GL_FLOAT_MAT3_ARB}, or @code{GL_FLOAT_MAT4_ARB}.), and the name of the attribute. @end defun @subheading Specifying uniform variables @defun gl-get-uniform-location-arb program name [GL_ARB_shader_objects] Returns an integer location of the uniform variable @var{name} of the program @var{program}. @end defun @defun gl-uniform1-arb location vec @defunx gl-uniform1-arb location v0 @defunx gl-uniform2-arb location vec @defunx gl-uniform2-arb location v0 v1 @defunx gl-uniform3-arb location vec @defunx gl-uniform3-arb location v0 v1 v2 @defunx gl-uniform4-arb location vec @defunx gl-uniform4-arb location v0 v1 v1 v3 [GL_ARB_shader_objects] Sets a value of the uniform variable specified by @var{location}. @var{gl-uniform1-arb} sets a single component value (e.g. @code{float}) @var{gl-uniform2-arb} sets a double component value (e.g. @code{vec2}) etc. The first form of each function takes either an s32vector or f32vector. It can have a size multiple of the number of components to set an array uniform variable (e.g. you can pass an f32vector of size 8 to fill @code{vec2[2]}). The second form just sets the component(s) of a single uniform variable. The arguments @var{v0} to @var{v3} must be real numbers, and coerced to C @code{float} (i.e. @code{glUniform*fARB} is used). @end defun @defun gl-uniform-matrix2-arb location transpose v @defunx gl-uniform-matrix3-arb location transpose v @defunx gl-uniform-matrix4-arb location transpose v [GL_ARB_shader_objects] Sets a matrix uniform variable (or an array of matrix uniform variables) specified by @var{location}. A boolean flag @var{transpose} specifies whether the matrix should be transposed. The @var{v} argument must be a f32vector of size multiple of 4, 9, or 16, respectively. @end defun @defun gl-get-active-uniform-arb program index [GL_ARB_shader_objects] Returns informaton about the @var{index}-th uniform variable of @var{program}. Returns three values. The first one is the size, either 1, 2, 3 or 4. The second value is the type, which is an integer that matches one of the following constants: @code{GL_FLOAT}, @code{GL_FLOAT_VEC(1|2|3|4)_ARB}, @code{GL_INT}, @code{GL_INT_VEC(1|2|3|4)_ARB}, @code{GL_BOOL}, @code{GL_BOOL_VEC(1|2|3|4)_ARB}, @code{GL_FLOAT_MAT(2|3|4)_ARB}. And the third value is the name of the uniform variable. @end defun @subheading Vertex and fragment programs These APIs are for low-level vertex/fragment pipeline programming. @defun gl-gen-programs-arb n [GL_ARB_vertex_program] Generates @var{N} names (integers) for the new programs and returns them in an s32vector. @end defun @defun gl-delete-programs-arb programs [GL_ARB_vertex_program] Deletes programs whose names are specified by an s32vector @var{programs}. @end defun @defun gl-is-program-arb prog-id [GL_ARB_vertex_program] Returns @code{#t} if an integer @var{prog-id} refers to a valid program. @end defun @defun gl-bind-program-arb target prog-id [GL_ARB_vertex_program] Binds a program specified by @var{prog-id} to a @var{target}, which is either @code{GL_VERTEX_PROGRAM_ARB} or @var{GL_FRAGMENT_PROGRAM_ARB}. @end defun @defun gl-program-string-arb target format text [GL_ARB_vertex_program] Sets the source code of the program currently bound to the @var{target} (@code{GL_VERTEX_PROGRAM_ARB} or @var{GL_FRAGMENT_PROGRAM_ARB}). @var{Format} must be @code{GL_PROGRAM_FORMAT_ASCII_ARB}. @var{Text} is a string for the program source. @end defun @defun gl-program-env-parameter-arb target param-id args @defunx gl-program-env-parameter-arb target param-id arg0 arg1 arg2 arg3 @defunx gl-program-local-parameter-arb target param-id args @defunx gl-program-local-parameter-arb target param-id arg0 arg1 arg2 arg3 [GL_ARB_vertex_program] Sets the value of the environment and local parameter specified by @var{param-id} of the program currently bount to the @var{target}. In the first form of each, @var{args} must be either f32 or f64vector of size 4 or @code{<vector4f>} object. @end defun @c ====================================================================== @node GLUT API, Vectors and matrices, OpenGL API, Top @chapter GLUT API @c ---------------------------------------------------------------------- @menu * GLUT window manipulation:: * GLUT overlay:: * GLUT menu API:: * GLUT callbacks:: * GLUT colormap:: * GLUT state retrieval:: * GLUT font:: * GLUT pre-built models:: @end menu @node GLUT window manipulation, GLUT overlay, GLUT API, GLUT API @section GLUT window manipulation @defun glut-init args @end defun @defun glut-init-display-mode mode @end defun @defvr {Constant} GLUT_RGB @defvrx {Constant} GLUT_RGBA @defvrx {Constant} GLUT_INDEX @defvrx {Constant} GLUT_SINGLE @defvrx {Constant} GLUT_DOUBLE @defvrx {Constant} GLUT_ACCUM @defvrx {Constant} GLUT_ALPHA @defvrx {Constant} GLUT_DEPTH @defvrx {Constant} GLUT_STENCIL @defvrx {Constant} GLUT_MULTISAMPLE @defvrx {Constant} GLUT_STEREO @defvrx {Constant} GLUT_LUMINANCE @end defvr @defun glut-init-display-string string @end defun @defun glut-init-window-size width height @end defun @defun glut-init-window-position x y @end defun @defun glut-main-loop @end defun @defun glut-create-widnow name @end defun @defun glut-create-sub-window win x y width height @end defun @defun glut-destroy-window win @end defun @defun glut-post-redisplay @end defun @defun glut-post-window-redisplay win @end defun @defun glut-swap-buffers @end defun @defun glut-get-window @end defun @defun glut-set-window win @end defun @defun glut-set-window-title title @end defun @defun glut-set-icon-title title @end defun @defun glut-position-window x y @end defun @defun glut-reshape-window width height @end defun @defun glut-push-window @defunx glut-pop-window @end defun @defun glut-iconify-window @end defun @defun glut-show-window @defunx glut-hide-window @end defun @defun glut-full-screen @end defun @defun glut-set-cursor cursor @end defun @defvr {Constant} GLUT_CURSOR_RIGHT_ARROW @defvrx {Constant} GLUT_CURSOR_LEFT_ARROW @defvrx {Constant} GLUT_CURSOR_INFO @defvrx {Constant} GLUT_CURSOR_DESTROY @defvrx {Constant} GLUT_CURSOR_HELP @defvrx {Constant} GLUT_CURSOR_CYCLE @defvrx {Constant} GLUT_CURSOR_SPRAY @defvrx {Constant} GLUT_CURSOR_WAIT @defvrx {Constant} GLUT_CURSOR_TEXT @defvrx {Constant} GLUT_CURSOR_CROSSHAIR @defvrx {Constant} GLUT_CURSOR_UP_DOWN @defvrx {Constant} GLUT_CURSOR_LEFT_RIGHT @defvrx {Constant} GLUT_CURSOR_TOP_SIDE @defvrx {Constant} GLUT_CURSOR_BOTTOM_SIDE @defvrx {Constant} GLUT_CURSOR_LEFT_SIDE @defvrx {Constant} GLUT_CURSOR_RIGHT_SIDE @defvrx {Constant} GLUT_CURSOR_TOP_LEFT_CORNER @defvrx {Constant} GLUT_CURSOR_TOP_RIGHT_CORNER @defvrx {Constant} GLUT_CURSOR_BOTTOM_RIGHT_CORNER @defvrx {Constant} GLUT_CURSOR_BOTTOM_LEFT_CORNER @defvrx {Constant} GLUT_CURSOR_INHERIT @defvrx {Constant} GLUT_CURSOR_NONE @defvrx {Constant} GLUT_CURSOR_FULL_CROSSHAIR @end defvr @defun glut-warp-pointer x y @end defun @c ---------------------------------------------------------------------- @node GLUT overlay, GLUT menu API, GLUT window manipulation, GLUT API @section GLUT overlay @defun glut-establish-overlay @end defun @defun glut-remove-overlay @end defun @defun glut-use-layer layer @end defun @defun glut-post-overlay-redisplay @end defun @defun glut-post-window-overlay-redisplay win @end defun @defun glut-show-overlay @end defun @defun glut-hide-overlay @end defun @c ---------------------------------------------------------------------- @node GLUT menu API, GLUT callbacks, GLUT overlay, GLUT API @section GLUT menu API @defun glut-create-menu callback @end defun @defun glut-destroy-menu menu @end defun @defun glut-get-emnu @end defun @defun glut-set-menu menu @end defun @defun glut-add-menu-entry label value @end defun @defun glut-add-sub-menu label submenu @end defun @defun glut-change-to-menu-entry item label value @end defun @defun glut-change-to-sub-menu item label submenu @end defun @defun glut-remove-menu-item item @end defun @defun gult-attach-menu button @end defun @defun glut-detach-menu button @end defun @c ---------------------------------------------------------------------- @node GLUT callbacks, GLUT colormap, GLUT menu API, GLUT API @section GLUT callbacks @defun glut-display-func fn @end defun @defun glut-reshape-func fn @end defun @defun glut-keyboard-func fn @end defun @defvr {Constant} GLUT_KEY_F1 @defvrx {Constant} GLUT_KEY_F2 @defvrx {Constant} GLUT_KEY_F3 @defvrx {Constant} GLUT_KEY_F4 @defvrx {Constant} GLUT_KEY_F5 @defvrx {Constant} GLUT_KEY_F6 @defvrx {Constant} GLUT_KEY_F7 @defvrx {Constant} GLUT_KEY_F8 @defvrx {Constant} GLUT_KEY_F9 @defvrx {Constant} GLUT_KEY_F10 @defvrx {Constant} GLUT_KEY_F11 @defvrx {Constant} GLUT_KEY_F12 @defvrx {Constant} GLUT_KEY_LEFT @defvrx {Constant} GLUT_KEY_UP @defvrx {Constant} GLUT_KEY_RIGHT @defvrx {Constant} GLUT_KEY_DOWN @defvrx {Constant} GLUT_KEY_PAGE_UP @defvrx {Constant} GLUT_KEY_PAGE_DOWN @defvrx {Constant} GLUT_KEY_HOME @defvrx {Constant} GLUT_KEY_END @defvrx {Constant} GLUT_KEY_INSERT @end defvr @defun glut-mouse-func fn @end defun @defvr {Constant} GLUT_LEFT_BUTTON @defvrx {Constant} GLUT_MIDDLE_BUTTON @defvrx {Constant} GLUT_RIGHT_BUTTON @defvrx {Constant} GLUT_DOWN @defvrx {Constant} GLUT_UP @end defvr @defun glut-motion-func fn @end defun @defun glut-passive-motion-func fn @end defun @defun glut-entry-func fn @end defun @defvr {Constant} GLUT_LEFT @defvrx {Constant} GLUT_ENTERED @end defvr @defun glut-visibility-func fn @end defun @defvr {Constant} GLUT_NOT_VISIBLE @defvrx {Constant} GLUT_VISIBLE @end defvr @defun glut-idle-func fn @end defun @defun glut-timer-func millis fn value @end defun @defun glut-menu-state-func fn @end defun @defun glut-special-func fn @end defun @defun glut-spaceball-motion-func fn @end defun @defun glut-spaceball-rotate-func fn @end defun @defun glut-spaceball-button-func fn @end defun @defun glut-button-box-func fn @end defun @defun glut-dials-func fn @end defun @defun glut-tablet-motion-func fn @end defun @defun glut-tablet-button-func fn @end defun @defun glut-menu-status-func fn @end defun @defun glut-overlay-dislay-func fn @end defun @defun glut-window-status-func fn @end defun @defun glut-keyboard-up-func fn @end defun @defun glut-special-up-func fn @end defun @defun glut-joystick-func fn interval @end defun @c ---------------------------------------------------------------------- @node GLUT colormap, GLUT state retrieval, GLUT callbacks, GLUT API @section GLUT colormap @defun glut-set-color index r g b @end defun @defun glut-get-color index component @end defun @defvr {Constant} GLUT_RED @defvrx {Constant} GLUT_GREEN @defvrx {Constant} GLUT_BLUE @end defvr @defun glut-copy-colormap win @end defun @c ---------------------------------------------------------------------- @node GLUT state retrieval, GLUT font, GLUT colormap, GLUT API @section GLUT state retrieval @defun glut-get type @end defun @defvr {Constant} GLUT_WINDOW_X @defvrx {Constant} GLUT_WINDOW_Y @defvrx {Constant} GLUT_WINDOW_WIDTH @defvrx {Constant} GLUT_WINDOW_HEIGHT @defvrx {Constant} GLUT_WINDOW_BUFFER_SIZE @defvrx {Constant} GLUT_WINDOW_STENCIL_SIZE @defvrx {Constant} GLUT_WINDOW_DEPTH_SIZE @defvrx {Constant} GLUT_WINDOW_RED_SIZE @defvrx {Constant} GLUT_WINDOW_GREEN_SIZE @defvrx {Constant} GLUT_WINDOW_BLUE_SIZE @defvrx {Constant} GLUT_WINDOW_ALPHA_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_RED_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_GREEN_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_BLUE_SIZE @defvrx {Constant} GLUT_WINDOW_ACCUM_ALPHA_SIZE @defvrx {Constant} GLUT_WINDOW_DOUBLEBUFFER @defvrx {Constant} GLUT_WINDOW_RGBA @defvrx {Constant} GLUT_WINDOW_PARENT @defvrx {Constant} GLUT_WINDOW_NUM_CHILDREN @defvrx {Constant} GLUT_WINDOW_COLORMAP_SIZE @defvrx {Constant} GLUT_WINDOW_NUM_SAMPLES @defvrx {Constant} GLUT_WINDOW_STEREO @defvrx {Constant} GLUT_WINDOW_CURSOR @defvrx {Constant} GLUT_SCREEN_WIDTH @defvrx {Constant} GLUT_SCREEN_HEIGHT @defvrx {Constant} GLUT_SCREEN_WIDTH_MM @defvrx {Constant} GLUT_SCREEN_HEIGHT_MM @defvrx {Constant} GLUT_MENU_NUM_ITEMS @defvrx {Constant} GLUT_DISPLAY_MODE_POSSIBLE @defvrx {Constant} GLUT_INIT_WINDOW_X @defvrx {Constant} GLUT_INIT_WINDOW_Y @defvrx {Constant} GLUT_INIT_WINDOW_WIDTH @defvrx {Constant} GLUT_INIT_WINDOW_HEIGHT @defvrx {Constant} GLUT_INIT_DISPLAY_MODE @defvrx {Constant} GLUT_ELAPSED_TIME @defvrx {Constant} GLUT_WINDOW_FORMAT_ID @end defvr @defun glut-device-get type @end defun @defvr {Constant} GLUT_HAS_KEYBOARD @defvrx {Constant} GLUT_HAS_MOUSE @defvrx {Constant} GLUT_HAS_SPACEBALL @defvrx {Constant} GLUT_HAS_DIAL_AND_BUTTON_BOX @defvrx {Constant} GLUT_HAS_TABLET @defvrx {Constant} GLUT_NUM_MOUSE_BUTTONS @defvrx {Constant} GLUT_NUM_SPACEBALL_BUTTONS @defvrx {Constant} GLUT_NUM_BUTTON_BOX_BUTTONS @defvrx {Constant} GLUT_NUM_DIALS @defvrx {Constant} GLUT_NUM_TABLET_BUTTONS @defvrx {Constant} GLUT_DEVICE_IGNORE_KEY_REPEAT @defvrx {Constant} GLUT_DEVICE_KEY_REPEAT @defvrx {Constant} GLUT_HAS_JOYSTICK @defvrx {Constant} GLUT_OWNS_JOYSTICK @defvrx {Constant} GLUT_JOYSTICK_BUTTONS @defvrx {Constant} GLUT_JOYSTICK_AXES @defvrx {Constant} GLUT_JOYSTICK_POLL_RATE @end defvr @defun glut-extension-supported name @end defun @defun glut-get-modifiers @end defun @defvr {Constant} GLUT_ACTIVE_SHIFT @defvrx {Constant} GLUT_ACTIVE_CTRL @defvrx {Constant} GLUT_ACTIVE_ALT @end defvr @defun glut-layer-get type @end defun @defvr {Constant} GLUT_OVERLAY_POSSIBLE @defvrx {Constant} GLUT_LAYER_IN_USE @defvrx {Constant} GLUT_HAS_OVERLAY @defvrx {Constant} GLUT_TRANSPARENT_INDEX @defvrx {Constant} GLUT_NORMAL_DAMAGED @defvrx {Constant} GLUT_OVERLAY_DAMAGED @end defvr @c ---------------------------------------------------------------------- @node GLUT font, GLUT pre-built models, GLUT state retrieval, GLUT API @section GLUT font @deftp {Class} <glut-font> @clindex glut-font @end deftp @defun glut-bitmap-character font character @end defun @defun glut-bitmap-width font character @end defun @defun glut-stroke-character font character @end defun @defun glut-stroke-width font character @end defun @defun glut-bitmap-length font string @end defun @defun glut-stroke-length font string @end defun @c ---------------------------------------------------------------------- @node GLUT pre-built models, , GLUT font, GLUT API @section GLUT pre-built models @defun glut-wire-sphere radius slices stacks @defunx glut-solid-sphere radius slices stacks @end defun @defun glut-wire-cone radius height slices stacks @defunx glut-solid-cone radius height slices stacks @end defun @defun glut-wire-cube size @defunx glut-solid-cube size @end defun @defun glut-wire-torus inner outer sides rings @defunx glut-solid-torus inner outer sides rings @end defun @defun glut-wire-dodecahedron @defunx glut-solid-dodecahedron @end defun @defun glut-wire-teapot size @defunx glut-soild-teapot size @end defun @defun glut-wire-octahedron @defunx glut-solid-octahedron @end defun @defun glut-wire-tetrahedron @defunx glut-solid-tetrahedron @end defun @defun glut-wire-icosahedron @defunx glut-solid-icosahedron @end defun @c ====================================================================== @node Vectors and matrices, Simple utilities, GLUT API, Top @chapter Vectors and matrices @deftp {Module} gl.math3d @mdindex gl.math3d The module provides vector and matrix operations useful for 3D computer graphics. Actually this module itself doesn't depend on GL; you can use this module alone to do matrix calculations. However, the structure of objects are designed so that they can be passed directly to Gauche-gl functions, reducing the overhead of type conversions. The purpose of this module is to provide reasonable performance. So the operations are fixed to 3D homogeneous coordinates, i.e. a vector is 4-element column vector, and a matrix is 4x4 square matrix. If you want more flexibility, @code{<array>} class in @code{gauche.array} provides much more generic structures, trading performance. Elements of vectors and matrices are represented in @code{float} internally. When you retrieve each element individually, it is converted to @code{double}, so you might see some precision errors. There are lots of operations directly manipulate group of elements without retrieving each element to Scheme world, avoiding overhead of conversion. @end deftp @c ---------------------------------------------------------------------- @menu * Vectors and points:: * Vector arrays and point arrays:: * Matrices:: * Quaternions:: @end menu @node Vectors and points, Vector arrays and point arrays, Vectors and matrices, Vectors and matrices @section Vectors and points @deftp {Class} <vector4f> @deftpx {Class} <point4f> @clindex vector4f @clindex point4f 4x1 column vectors. @code{Vector4f} is intended to be used to represent a vector, and @code{point4f} is to a point, but as far as OpenGL concerns, both are just an array of four floats, @var{x}, @var{y}, @var{z} and @var{w}. These classes inherit @code{<sequence>} and @code{<collection>} classes. So if you import @code{gauche.sequence} module, you can use generic function such as @code{ref} and @code{(setter ref)} to get/set individual elements. The generic version of @code{map} and @code{for-each} can also be used on the vector4f and point4f instances. Aside from the type, the only difference is that the default value of @var{w} component--- it's 0.0 for vectors, and 1.0 for points. So usual transformation produces expected results; for example point plus vector becomes point, vector plus vector becomes vector, and translating point changes its coordinates but translating vectors doesn't, and so on. However, you can set @var{w} component to other value to do nontrivial operations. @end deftp @deftp {Reader syntax} @code{#,(vector4f @var{x} @var{y} @var{z} @var{w})} @deftpx {Reader syntax} @code{#,(point4f @var{x} @var{y} @var{z} @var{w})} These SRFI-10 syntax can be used to denote literal @code{<vector4f>} and @code{<point4f>} instance, respectively. The write methods are defined so that the instance is written out in this form, and can be read back later. @end deftp @defun vector4f? obj @defunx point4f? obj Returns true iff @var{obj} is vector4f and point4f, respectively. @end defun @defun vector4f x y z &optional (w 0.0) @defunx point4f x y z &optional (w 1.0) Creates a vector4f and point4f instance with given values, respectively. @end defun @defun make-vector4f @defunx make-point4f Another way to create a vector4f and a point4f. The first returns @code{#,(vector4f 0.0 0.0 0.0 0.0)}, and the latter returns @code{#,(point4f 0.0 0.0 0.0 1.0)}. @end defun @defun list->vector4f l @defunx list->point4f l Convert a list of three or four real numbers to a vector4f and a point4f, respectively. If @var{l} is not a list of three or four real numbers, an error is signalled. @example (list->vector4f l) @equiv{} (apply vector4f l) @equiv{} (coerce-to <vector4f> l) @end example @end defun @defun vector4f->list v @defunx point4f->list p Convert a vector4f and a point4f to a list of four real numbers, respectively. @example (vector4f->list v) @equiv{} (coerce-to <list> v) @equiv{} (map (cut ref v <>) (iota 4)) @end example @end defun @defun f32vector->vector4f v &optional start @defunx f32vector->point4f v &optional start Creates a vector4f or a point4f, initializing by the elements of f32vector @var{v}. @var{V} must be longer than 4, and the first four elements are used to initialize the created vector or point. If optional @var{start} argument is given, it specifies an index of @var{v} from which the initial values are taken; that is, @var{start}, @var{start+1}, @var{start+2} and @var{start+3}-th elements are used to create a vector or a point. This allows to create vectors from plain float array: @example (map (lambda (off) (f32vector->vector4f vec (* off 4))) (iota (/ (size-of vec) 4))) @end example The conversion can be done using @code{coerce-to}, as well. @example (f32vector->vector4f vec) @equiv{} (coerce-to <vector4f> vec) @end example @end defun @defun vector4f->f32vector v @defunx point4f->f32vector p Convert a vector4f @var{v} or a point4f @var{p} to four-element f32vector. @example (vector4f->f32vector v) @equiv{} (coerce-to <f32vector> v) @end example @end defun @defun vector4f-copy v @defunx point4f-copy p Returns a new copy of vector4f @var{v} or point4f @var{p}, respectively. @end defun @defun vector4f-copy! dstv srcv @defunx point4f-copy! dstp srcp Destructively sets the content of @var{srcv} or @var{srcp} to @var{dstv} or @var{dstp}, respectively. @end defun @defun vector4f-set! v k value @defunx point4f-set! p k value Sets a real number @var{value} to @var{k}-th element of a vector4f @var{v} or a point4f @var{p}. @example (vector4f-set! v k value) @equiv{} (set! (ref v k) value) @end example @end defun @defun vector4f-ref v k &optional fallback @defunx point4f-ref p k &optional fallback Gets a value of @var{k}-th element of a vector4f @var{v} or a point4f @var{p}. If @var{k} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @example (vector4f-ref v k) @equiv{} (ref v k) @end example @end defun @defun vector4f-dot x y Returns a dot product of two vector4fs, @var{x} and @var{y}. @end defun @defun vector4f-cross x y Returns a cross product of two vector4fs, @var{x} and @var{y}. (@var{w} element is ignored). @end defun @defun vector4f-norm v Returns the norm (length) of the vector @var{v}. @end defun @defun vector4f-normalize x @defunx vector4f-normalize! x Returns a normalized vector of vector4f @var{x}. @code{Vector4f-normalize} allocates a new vector, while @code{vector4f-normalize!} modifies the original vector. As a special case, if @var{x} is a vector of length 0, a vector of length 0 is returned. @end defun @defun vector4f-add x y @defunx vector4f-sub x y @defunx vector4f-add! x y @defunx vector4f-sub! x y Returns a sum of two vector4fs, @var{x} and @var{y}. The destructive version modifies @var{x}. @end defun @defun point4f-add x y @defunx point4f-add! x y Adds a point4f @var{x} and a vector4f @var{y}, and returns a translated point. The destructive version modifies @var{x}. @end defun @defun point4f-sub x y Subtracts either a vector4f or a point4f @var{y} from a point4f @var{x}. If @var{y} is a vector4f, returns a translated point. If @var{y} is a point4f, returns a vector4f from point @var{y} to point @var{x}. @end defun @c ---------------------------------------------------------------------- @node Vector arrays and point arrays, Matrices, Vectors and points, Vectors and matrices @section Vector arrays and point arrays @deftp {Class} <vector4f-array> @deftpx {Class} <point4f-array> @clindex vector4f-array @clindex point4f-array Represents an array of vector4fs and point4fs. This is an efficient way to keep an array of vectors or points, for the elements are packed in a simple float array. They are especially useful to work with GL's vertex array feature. @code{gl-vertex-pointer} can take @code{<point4f-array>}, and @code{gl-normal-pointer} can take @code{<vector4f-array>}. It is also possible to "view" a plain f32vector as @code{<vector4f-array>} or @code{<point4f-array>} without copying its content, by @code{f32vector->vector4f-array/shared} and @code{f32vector->point4f-array/shared}. Combined to @code{read-block!}, you can do efficient binary I/O of vertex arrays, for example. Inherits @code{<sequence>} and @code{<collection>}. When viewed as a sequence or a collection, they behaves like sequence or collection of @code{vector4f} and @code{point4f} objects, respectively. @end deftp @defun make-vector4f-array len &optional init-vector @defunx make-point4f-array len &optional init-point Creates a vector4f-array or point4f-array with @var{len} elements. Each element is initialized by a vector4f @var{init-vector} or a point4f @var{init-point} if provided. @end defun @defun vector4f-array? obj @defunx point4f-array? obj Returns true iff @var{obj} is a vector4f-array or a point4f-array, respectively. @end defun @defun vector4f-array-length array @defunx point4f-array-length array Returns length (number of vectors/points) in array @var{array}. @end defun @deftp {Reader syntax} @code{#,(vector4f-array @var{len} @var{elt} @dots{})} @deftpx {Reader syntax} @code{#,(point4f-array @var{len} @var{elt} @dots{})} Vector4f-array and point4f-array have external representation using this SRFI-10 syntax. @var{Len} is a length of array, and each @var{elt} is a list of four floats representing each element of the array. @example (f32vector->vector4f-array #f32(1 2 3 4 6 7 4 3)) @result{} #,(vector4f-array 2 (1 2 3 4) (6 7 4 3) ) @end example @end deftp @defun list->vector4f-array list @defunx list->point4f-array list From given list of vector4fs or point4fs, creates and returns a vector4f-array or point4f-array, respectively. @end defun @defun f32vector->vector4f-array v @defunx f32vector->point4f-array v Converts f32vector @var{v} to a vector4f-array or a point4f-array. The length of @var{v} must be multiple of four. The content of @var{v} is copied. @example (f32vector->vector4f-array v) @equiv{} (coerce-to <vector4f-array> v) @end example @end defun @defun f32vector->vector4f-array/shared v @defunx f32vector->point4f-array/shared v Like above, but the content of @var{v} is shared by the result array, instead of being copied. So the modification of result array will be visible from original f32vector @var{v} and vice versa. It will allow efficient handling of large vertex arrays. @end defun @defun vector4f-array->f32vector array @defunx point4f-array->f32vector array Converts a vector4f-array or a point4f-array @var{array} to a f32vector. @example (vector4f-array->f32vector array) @equiv{} (coerce-to <f32vector> array) @end example @end defun @defun vector4f-array-set! array i vector @defunx point4f-array-set! array i point Sets a vector4f @var{vector} or a point4f @var{point} to @var{i}-th element of vector4f-array or point4f-array @var{array}, respectively. @example (vector4f-array-set! array i vector) @equiv{} (set! (ref array i) vector) @end example @end defun @defun vector4f-array-ref array i &optional fallback @defunx point4f-array-ref array i &optional fallback Returns a vector4f or a point4f which is the @var{i}-th element of array @var{array}, respectively. If @var{k} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @example (vector4f-array-ref array i) @equiv{} (ref array i) (ref #,(vector4f-array 2 (1 2 3 4) (6 7 4 3)) 1) @result{} #,(vector4f 6 7 4 3) @end example @end defun @defun vector4f-array-ref/shared array i &optional fallback @defunx point4f-array-ref/shared array i &optional fallback Like above, but the returned vector4f or point4f shares the storage with the original array. Thus the modification of the result vector or point will be visible from @var{array}, and vice versa. @end defun @c ---------------------------------------------------------------------- @node Matrices, Quaternions, Vector arrays and point arrays, Vectors and matrices @section Matrices @deftp {Class} <matrix4f> @clindex matrix4f 4x4 matrix. Internally it is represented as an array of 16 floats, stored in column-major order. (It is the same order OpenGL uses, so it can be passed to OpenGL calls without overhead). Inherits @code{<sequence>} and @code{<collection>}. When a matrix4f is treated as a sequence, it works as if it is a single sequence of floats in column-major order. @end deftp @defun make-matrix4f &optional init Returns a new matrix4f instance. If @var{init} is omitted, the matrix is a unit matrix. Otherwise, @var{init} must be a f32vector of length 16, and the elements in the matrix is initialized by ones in f32vector. @example ;; Creates a matrix like this: ;; 1 2 3 4 ;; 0 1 0 5 ;; 0 0 1 6 ;; 0 0 0 1 (make-matrix4f '#f32vector(1 0 0 0 2 1 0 0 3 0 1 0 4 5 6 1)) @end example @end defun @defun matrix4f m00 m10 m20 m30 m01 m11 m21 m31 m02 m12 m22 m32 m03 m13 m23 m33 Creates a new matrix4f instance with give values. @end defun @defun matrix4f? obj Returns true iff @var{obj} is a matrix4f. @end defun @deftp {Reader syntax} @code{#,(matrix4f @var{elt} @dots{})} A matrix4f is represented extrenally using SRFI-10 syntax. The elements are listed in column-major order. @end deftp @defun list->matrix4f l @defunx matrix4f->list m Converts between list of 16 real numbers and matrix4f. @end defun @defun f32vector->matrix4f v &optional start Creates a new matrix4f and initializes it with 16 elements in f32vector @var{v}. If optional @var{start} is given, it specifies the start offset in vector @var{v} to be used as initial values. The f32vector @var{v} must have enough length. @end defun @defun f32vector->matrix4f! m v &optional (start 0) Extract 16 flonums in the f32vector @var{v} starting from the index @var{start}, and fill the matrix4f @var{m} with them. The f32vector @var{v} must have enough length. @end defun @defun matrix4f->f32vector m Returns a new f32vector that has elements from matrix4f @var{m}. @end defun @defun matrix4f-copy m Returns a new copy of @var{m}. @end defun @defun matrix4f-copy! dstm srcm Copies contents of @var{srcm} to @var{dstm}. @end defun @defun matrix4f-set! m i value Sets a real number @var{value} to @var{i}-th element of matrix @var{m}. Since the matrix is laid out in column-major order, the one-dimensional index @code{m@{@var{i}@}} and two-dimensional index @code{m(@var{i},@var{j})} corresponds as follows: @example m(0,0) = m@{0@} m(0,1) = m@{4@} m(0,2) = m@{8@} m(0,3) = m@{12@} m(1,0) = m@{1@} m(1,1) = m@{5@} m(1,2) = m@{9@} m(1,3) = m@{13@} m(2,0) = m@{2@} m(2,1) = m@{6@} m(2,2) = m@{10@} m(2,3) = m@{14@} m(3,0) = m@{3@} m(3,1) = m@{7@} m(3,2) = m@{11@} m(3,3) = m@{15@} @end example @end defun @defun matrix4f-ref m i &optional fallback Returns the @var{i}-th element of matrix @var{m}. If @var{i} is out of range, an error is signalled, unless @var{fallback} is provided, in such a case @var{fallback} is returned. @end defun @defun matrix4f-set2! m i j value Sets @var{value} to @code{(@var{i}, @var{j})} element of matrix @var{m}. @end defun @defun matrix4f-ref2 m i j Returns the @code{(@var{i}, @var{j})} element of matrix @var{m}. @end defun @defun matrix4f-row m i @defunx matrix4f-column m i @defunx matrix4f-column/shared m i Returns @var{i}-th row vector or @var{i}-th column vector of matrix @var{m}, as a vector4f instance. Furthermore, the returned vector from @code{matrix4f-column/shared} shares the storage with @code{m}. @end defun @defun matrix4f-mul m obj @var{Obj} may be a scalar (real number), a vector4f, a point4f, or a matrix4f. Returns @var{m} x @var{obj}. @end defun @defun matrix4f-mul! m obj @var{Obj} may be a scalar or a matrix4f. Matrix @var{m} is multiplied by @var{obj}, and the result is set to @var{m} destructively. @end defun @defun matrix4f-transpose m @defunx matrix4f-transpose! m Returns a transposed matrix of @var{m}. The destructive version modifies @var{m}. @end defun @defun matrix4f-determinant m Returns a determinant of @var{m}. @end defun @defun matrix4f-inverse m &optional (error-on-singular? #t) @defunx matrix4f-inverse! m &optional (error-on-singular? #t) Returns a inverse matrix of @var{m}. The destructive version modifies @var{m}. If given @var{m} is a singular matrix, an error is signalled by default. However, if @code{#f} is given to the optional @var{error-on-singular?} argument, @code{#f} is returned in such a case. @end defun @defun translation->matrix4f translation-vector @defunx translation->matrix4f! m translation-vector Returns a matrix which represents a translation by @var{translation-vector}, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in @var{translation-vector} is used. The destructive version updates @var{m}. @end defun @defun rotation->matrix4f axis angle @defunx rotation->matrix4f! m axis angle Returns a matrix which represents a rotation around @var{axis} by @var{angle} radian. @var{Axis} must be a vector4f or a f32vector of length 3 or 4, and must be normalized. The result is undefined if anormalized vector is passed as @var{axis}. The destructive version updates @var{m}. @end defun @defun scale->matrix4f scale-vector @defunx scale->matrix4f! m scale-vector Returns a matrix which represents a scale by @var{scale-vector}, which must be either a vector4f, a point4f, or a f32vector of length 3 or 4. Only the first three elements in @var{scale-vector} is used. Each element of @var{scale-vector} represents the scale factor along x, y, and z axis. The destructive version updates @var{m}. @end defun @defun trs->matrix4f translation rotation-axis rotation-angle scale @defunx trs->matrix4f! m translation rotation-axis rotation-angle scale This combines above three procedure. Returns a matrix that represents translation, rotation and scale, specified by @var{translation}, @var{rotation-axis}, @var{rotation-angle} and @var{scale}. The destructive version updates @var{m}. If @code{@i{T}}, @code{@i{R}} and @code{@i{S}}, are the matrices that represent translation, rotation and scale, respectively, then these procedures effectively calculates a matrix @code{@i{TRS}}. @end defun @defun tqs->matrix4f translation rotation-quat scale @defunx tqs->matrix4f! m translation rotation-quat scale A variation of @code{trs->matrix4f}. Instead of axis and angle, rotation is represented by a quaternion @var{rotation-quat}. @xref{Quaternions}, for more details about quaternions. @end defun @defun euler-angle->matrix4f xangle yangle zangle &optional order @defunx euler-angle->matrix4f! m xangle yangle zangle &optional order Returns a matrix that represents rotation along x, y and z axis by @var{xangle}, @var{yangle}, and @var{zangle}, respectively. The order of rotation can be specified by the optional argument @var{order}, which may be one of the symbols @code{xyz}, @code{xzy}, @code{yzx}, @code{yxz}, @code{zxy}, or @code{zyx}. For example, symbol @code{xyz} means rotation around x-axis, then y-axis, then z-axis. Thus, if we write each rotation as @i{Rx}, @i{Ry}, and @i{Rz}, the returned matrix is @i{RzRyRx}. The default value of @var{order} is @code{xyz}. The desrtuctive version modifies @var{m}. @end defun @defun matrix4f-decompose m Matrix @var{m} is a composition of translation, rotation, shear and scale. Suppose transformation is applied in the reverse order. This procedure decompose @var{m} into each individual transformation. Returns five values. @itemize @bullet @item A flag to indicate if @var{m} is non-singular. @item A translation vector @var{t}, in vector4f. The first three elements of @var{t} are for x, y, and z translations. @item A rotation matrix @var{r}, in matrix4f. This is an orthogonal matrix represents rotation component. @item A shear vector @var{h}, in vector4f. The first three elements of @var{h} are for xy, xz and yz shear factors. @item A scale vector @var{s}, in vector4f. The first three elements of @var{s} are fof x, y, and z scale factors. @end itemize If @var{m} is singular, certain part of rotation matrix can't be recovered. In such a case, @var{r} becomes also singular matrix. If the original matrix has negative scale factor in any of x, y, or z scale, the decomposed scale factor will have all negative components. The signs of elements of @var{r} are adjusted accordingly. Due to the precision errors, you will see small values appear in shear component even @var{m} is pure TRS matrix. @end defun @defun matrix4f-decompose! m t r h s Linear update version of @code{matrix4f-decompose}. The result vectors and matrices are stored in @var{t}, @var{r}, @var{h} and @var{s}. The return value is a boolean value indicates @var{m} is non-singular or not. @end defun @defun matrix4f->translation m Extract the translation component from the given TRS matrix @var{m} and returns it as a @code{<vector4f>}. @end defun @defun matrix4f->translation! v m Extract the translation component from the given TRS matrix @var{m} and stores the result into a @code{<vector4f>} @var{v}. Returns @var{v}. @end defun @defun matrix4f->rotation m From given orthogonal matrix @var{m}, extracts and returns and rotation axis and angle, as a vector4f and a real number. @end defun @defun matrix4f->rotation! v m Same as above, except the storage of vector4f @var{v} is reused to store the result axis. @end defun @c ---------------------------------------------------------------------- @node Quaternions, , Matrices, Vectors and matrices @section Quaternions @deftp {Class} <quatf> @clindex quatf Quaternions. Internally quaternions are represented as just an array of four floats; the first three are the vector component and the last is the scalar component. Inherits @code{<sequence>} and @code{<collection>}. When viewed as sequence, it is just like a vector of four floats. @end deftp @defun quatf? obj Returns true iff @var{obj} is a quaternion. @end defun @deftp {Reader syntax} @code{#,(quatf @var{x} @var{y} @var{z} @var{w})} External representation of quaternion @i{x}@b{i}+@i{y}@b{j}+@i{z}@b{k}+@i{w}. @end deftp @defun make-quatf &optional axis (angle 0) Returns a new unit quaternion that represents a rotation around vector @var{axis} by @var{angle} radians. @var{Axis} can be a vector4f, a point4f or a f32vector (only first three component is used). @var{Axis} must be a unit vector; if @var{axis} is anormalized, the result is undefined. If both @var{axis} and @var{angle} is omitted, @code{#,(quatf 0 0 0 1)} is returned. @end defun @defun quatf x y z w Returns a new quaternion whose elements are initialized by @var{x}, @var{y}, @var{z}, @var{w}. @end defun @defun list->quatf l @defunx quatf->list q Converts between a list of four real numbers and a quaternion. @end defun @defun f32vector->quatf x &optional start Returns a new quaternion whose elements are initialized by the first four elements of f32vector @var{x}. If @var{start} is given, the initial value is taken starting from @var{start}-th index in @var{x}. @end defun @defun quatf->f32vector q Returns a new f32vector whose contents is the same as a quaternion @var{q}. @end defun @defun quatf-copy q Returns a fresh copy of a quaternion @var{q}. @end defun @defun quatf-copy! dstq srcq Copies contents of a quaternion @var{srcq} to a quaternion @var{dstq}. @end defun @defun rotation->quatf! quat axis angle Sets a quaternion @var{quat} so that it represents a rotation around a unit vector @var{axis} by angle @var{angle} radians. @var{Axis} can be a vector4f, a point4f or a f32vector (only first three component is used). @end defun @defun vectors->quatf v w @defunx vectors->quatf! q v w Given two unit vectors @var{v} and @var{w}, calculates and returns a quaternion that represents a rotation from @var{v} to @var{w}. The destructive version @code{vectors->quatf!} modifies @var{q}. @end defun @defun axes->quatf v1 v2 w1 w2 @defunx axes->quatf! q v1 v2 w1 w2 The arguments must be all unit vectors, @var{v1} and @var{v2} must be perpendicular, and also @var{w1} and @var{w2} must be perpendicular. Calculates and returns a quaternion that represents a rotation which transforms @var{v1} to @var{w1}, and @var{v2} to @var{w2}, respectively. The destructive version stores the result into @var{q}. @end defun @defun quatf-add p q @defunx quatf-add! p q @defunx quatf-sub p q @defunx quatf-sub! p q Addition and subtraction of quaternions. The destructive version modifies the first argument. @end defun @defun quatf-scale q s @defunx quatf-scale! q s Multiplies a quaternion @var{q} by a scalar value @var{s}. The destructive version modifies @var{q}. @end defun @defun quatf-mul p q @defunx quatf-mul! p q Multiply two quaternions @var{p} and @var{q}. The destructive version modifies @var{p} as well. @end defun @defun quatf-conjugate p @defunx quatf-conjugate! q p Returns a conjugate of a quaternion @var{p}. The destructive version modifies @var{q} as well. @end defun @defun quatf-transform q p Transforms a vector or a point @var{p} by quaternion @var{q}, that is, returns @var{qpq*}, where @var{q*} is a conjugate of @var{q}. This procedure assumes @var{q} is normalized. @var{P} can be a vector4f, a point4f or a f32vector (only first three elements are used). Returns the same type of object as @var{p}. @end defun @defun quatf-norm q Returns norm of @var{q}. @end defun @defun quatf-normalize q @defunx quatf-normalize! q Returns normalized quaternion of @var{q}. The destructive version modifies @var{q}. @end defun @defun quatf->matrix4f q @defunx quatf->matrix4f! m q Returns a matrix that represents a rotation specified by a unit quaternion @var{q}. The behavior is undefined if @var{q} is not normalized. The destructive version modifies @var{m}. @end defun @defun matrix4f->quatf m @defunx matrix4f->quatf! q m Extracts the rotation component of a matrix @var{m} and returns a quaterion that represents the rotation. @code{Matrix4f->quatf!} also uses @var{q} as the storage to store the result. @end defun @defun quatf-slerp p q t @defunx quatf-slerp! r p q t Returns a quaternion that interpolates between two unit quaternions @var{p} and @var{q}, by a scalar value @var{t}. The destructive version modifies @var{r}. @end defun @c ====================================================================== @node Simple utilities, Indices, Vectors and matrices, Top @chapter Simple utilities This chapter covers @code{gl.simple.*} modules. They are provided for the convenience of those who wants quick experiment with Gauche-gl alone, without a hassle to install a bunch of other modules. Their features are pretty limited, but you may find them handy when you need to hack up some throwaway script that need to show some graphics on the screen. @menu * Simple image handling:: * Simple viewer:: @end menu @node Simple image handling, Simple viewer, Simple utilities, Simple utilities @section Simple image handling @deftp {Module} gl.simple.image @mdindex gl.simple.image OpenGL doesn't provide any means of reading/writing image data, and it should be covered by other Gauche extensions. However, it is sometimes handy to have simple means to handle external image data, so that you can do some experiment with Gauche-gl alone. This module provides a minimal support to handle external image data, so that one can do some experiment in Gauche-gl alone. The functionality might be extended over time, but this is never intended to be a full featured image library. A separate Gauche extension should be a better place to have it. @end deftp Currently, only reading from 8bit SGI image file is supported. It is written in pure Scheme, so don't expect the performance. @defun read-sgi-image filename @defunx read-sgi-image-from-port port Reads an image data in SGI format from the named file or the input port, respectively. Only 8bit-per-channel, direct color mode is supported. Returns four values: the image's width in pixels, its height in pixels, number of channels (e.g. 1 for grayscale, 3 for RGB, 4 for RGBA), and the image data in u8vector. The pixel data is packed, i.e. there's no padding between each pixel nor each scanline. Warning: be careful to call this function interactively. The image data vector is usually huge, and you have to wait long for the REPL to display the entire result. @end defun @node Simple viewer, , Simple image handling, Simple utilities @section Simple viewer @deftp {Module} gl.simple.viewer @mdindex gl.simple.viewer This module packages common operations to allow users to view 3D objects, controlling the camera by the mouse, and have some interactions with the keyboard. A typical way of using the viewer is like the following: @example (use gl) (use gl.glut) (use gl.simple.viewer) (define (main args) (glut-init args) (simple-viewer-display <your-display-thunk>) (simple-viewer-set-key! <key> <handler> ...) (simple-viewer-window <name> :title <title> ...) (simple-viewer-run) ; loop forever. type ESC to exit. 0) @end example The viewer handles mouse drag (to move the camera), and also draws reference grid and axes by default for your convenience. You have to provide a thunk, which must draw your 3D object. For the keyboard events, you can use a convenient API to associate handler to the key (character for normal keys, and constants like @code{GL_LEFT_ARROW} for special keys). The reshape event is handled implicitly, though you can override it. If you call @code{simple-viewer-run}, it enters the event loop and never returns. If you wish to keep REPL and/or other parts of your application run concurrently, the convenient way is to run @code{simple-viewer-run} in a separate thread. @example (use gauche.threads) (define (run-viewer) (thread-start! (make-thread simple-viewer-run #f))) @end example See also the code under @file{examples/simple} directory of the source tree for more examples. @end deftp @defun simple-viewer-window name &key title mode parent width height x y Creates a new GL window with @var{name}, which must be a symbol to identify the window later in the simple viewer framework. The window won't be shown until @code{simple-viewer-run} is called. Each window @end defun @defun simple-viewer-display &optional display-thunk Gets/sets the display thunk, which is called every time the GL window is redrawn. You can change the display thunk any time, even while the viewer thread is running. If no argument is given, returns the current display thunk. It can be @code{#f} if no display thunk is set. When the display thunk is called, the matrix mode is @code{MODELVIEW} and the camera transformation is already applied. The grid and axes are also drawn, unless you've customized them. In the display thunk you can just write your model in the world coordinate system. It is guaranteed that the current color is white and line width is 1.0, but the states of other GL contexts are undefined, so you have to set them explicitly. @end defun @defun simple-viewer-reshape &optional reshape-proc Gets/sets the reshape procedure which is called every time the GL window configuration is changed. (It is also called when the GL window is shown first time.) You can change the reshape procedure any time, even while the viewer thread is running. If no argument is given, returns the current reshape proc. A reshape procedure is called with two arguments, the width and the height (in pixels) of the new GL window configuration. By default, @code{gl.simple.viewer} sets a procedure that changes viewport and projection matrix apopropriately; you need to change it only if you want a different behavior. @end defun @defun simple-viewer-grid &optional grid-proc @defunx simple-viewer-axis &optional axis-proc Gets/sets a procedure to draw a grid and axes. You can change these procedures any time, even while the viewer thread is running. The @var{grid-proc} and @var{axis-proc} are called with no arguments every time the GL window is redrawn, before the display thunk is invoked. The matrix mode is @code{MODELVIEW}, the camera transformation is already applied, and lighting is disabled. The default grid proc draws 10x10 grid on X-Z plane centered at the origin. The default axis proc draws a red line from origin to +X, a green line from origin to +Y, and a blue line from origin to +Z. You can pass @code{#f} to disable grid and/or axis display. If no argument is given, returns the current grid/axis proc, respectively. @end defun @defun simple-viewer-set-key! key handler @dots{} Even number of arguments must be given; the first of every two specifies the key, and the next one specifies the action when the key is pressed. @end defun @c ====================================================================== @node Indices, , Simple utilities, Top @appendix Indices @c NODE º÷°ú @menu * Function and Syntax Index:: * Module Index:: * Class Index:: * Variable Index:: @end menu @node Function and Syntax Index, Module Index, Indices, Indices @appendixsec Function and Syntax Index @c NODE ¼ê³¤­¤È¹½Ê¸º÷°ú @printindex fn @node Module Index, Class Index, Function and Syntax Index, Indices @appendixsec Module Index @c NODE ¥â¥¸¥å¡¼¥ëº÷°ú @printindex md @node Class Index, Variable Index, Module Index, Indices @appendixsec Class Index @c NODE ¥¯¥é¥¹º÷°ú For readability, the surrounding @code{<} and @code{>} are stripped off. @printindex cl @node Variable Index, , Class Index, Indices @appendixsec Variable Index @c NODE ÊÑ¿ôº÷°ú @printindex vr @contents @bye @c Local variables: @c outline-regexp: "@chap\\|@unnu\\|@\\(sub\\)*section" @c end: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/��������������������������������������������������������������������������������0000755�0000764�0000764�00000000000�11617171624�013127� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/gl/�����������������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�013517� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/gl/math3d.scm�������������������������������������������������������������������0000644�0000764�0000764�00000024705�11533026402�015413� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; gl/math3d.scm - auxiliary vector arithmetics for 3D graphics ;;; ;;; Copyright (c) 2002-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: math3d.scm,v 1.14 2008-06-06 00:58:26 shirok Exp $ ;;; (define-module gl.math3d (use gauche.uvector) (use gauche.sequence) (export-all) ) (select-module gl.math3d) (dynamic-load "libgauche-math3d" :export-symbols #t) (define-reader-ctor 'vector4f vector4f) (define-reader-ctor 'point4f point4f) (define-reader-ctor 'matrix4f matrix4f) (define-reader-ctor 'quatf quatf) (define-reader-ctor 'vector4f-array (lambda (length . vectors) (let1 arr (make-vector4f-array length) (let loop ((i 0) (v vectors)) (when (< i length) (vector4f-array-set! arr i (list->vector4f (car v))) (loop (+ i 1) (cdr v)))) arr))) (define-reader-ctor 'point4f-array (lambda (length . points) (let1 arr (make-point4f-array length) (let loop ((i 0) (p points)) (when (< i length) (point4f-array-set! arr i (list->point4f (car p))) (loop (+ i 1) (cdr p)))) arr))) ;;================================================================= ;; Auxiliary fns ;; (define (f32vector->vector4f-array v) (check-arg f32vector? v) (f32vector->vector4f-array/shared (f32vector-copy v))) (define (f32vector->point4f-array v) (check-arg f32vector? v) (f32vector->point4f-array/shared (f32vector-copy v))) (define (list->vector4f-array l) (let* ((len (length l)) (a (make-vector4f-array len)) (i 0)) (for-each (lambda (elt) (unless (vector4f? elt) (error "vector4f required, but got" elt)) (vector4f-array-set! a i elt) (inc! i)) l) a)) (define (list->point4f-array l) (let* ((len (length l)) (a (make-point4f-array len)) (i 0)) (for-each (lambda (elt) (unless (point4f? elt) (error "point4f required, but got" elt)) (point4f-array-set! a i elt) (inc! i)) l) a)) ;;================================================================= ;; sequence framework ;; (define-method size-of ((x <vector4f>)) 4) (define-method size-of ((x <point4f>)) 4) (define-method size-of ((x <matrix4f>)) 16) (define-method size-of ((x <quatf>)) 4) (define-method size-of ((x <vector4f-array>)) (vector4f-array-length x)) (define-method size-of ((x <point4f-array>)) (point4f-array-length x)) ;;----------------------------------------------------------------- ;; accessors and modifiers ;; (define-method ref ((x <vector4f>) (i <integer>)) (vector4f-ref x i)) (define-method (setter ref) ((x <vector4f>) (i <integer>) v) (set! (vector4f-ref x i) v)) (define-method ref ((x <point4f>) (i <integer>)) (point4f-ref x i)) (define-method (setter ref) ((x <point4f>) (i <integer>) v) (set! (point4f-ref x i) v)) (define-method ref ((x <matrix4f>) (i <integer>)) (matrix4f-ref x i)) (define-method (setter ref) ((x <matrix4f>) (i <integer>) v) (set! (matrix4f-ref x i) v)) (define-method ref ((x <quatf>) (i <integer>)) (quatf-ref x i)) (define-method (setter ref) ((x <quatf>) (i <integer>) v) (set! (quatf-ref x i) v)) (define-method ref ((x <vector4f-array>) (i <integer>)) (vector4f-array-ref x i)) (define-method (setter ref) ((x <vector4f-array>) (i <integer>) v) (vector4f-array-set! x i v)) (define-method ref ((x <point4f-array>) (i <integer>)) (point4f-array-ref x i)) (define-method (setter ref) ((x <point4f-array>) (i <integer>) v) (point4f-array-set! x i v)) ;;----------------------------------------------------------------- ;; conversions ;; (define-method coerce-to ((c <list-meta>) (v <vector4f>)) (vector4f->list v)) (define-method coerce-to ((c <f32vector-meta>) (v <vector4f>)) (vector4f->f32vector v)) (define-method coerce-to ((c <vector-meta>) (v <vector4f>)) (list->vector (vector4f->list v))) (define-method coerce-to ((c <vector4f-meta>) (v <list>)) (list->vector4f v)) (define-method coerce-to ((c <vector4f-meta>) (v <f32vector>)) (f32vector->vector4f v)) (define-method coerce-to ((c <vector4f-meta>) (v <vector>)) (list->vector4f (vector->list v))) (define-method coerce-to ((c <list-meta>) (v <point4f>)) (point4f->list v)) (define-method coerce-to ((c <f32vector-meta>) (v <point4f>)) (point4f->f32vector v)) (define-method coerce-to ((c <vector-meta>) (v <point4f>)) (list->vector (point4f->list v))) (define-method coerce-to ((c <point4f-meta>) (v <list>)) (list->point4f v)) (define-method coerce-to ((c <point4f-meta>) (v <f32vector>)) (f32vector->point4f v)) (define-method coerce-to ((c <point4f-meta>) (v <vector>)) (list->point4f (vector->list v))) (define-method coerce-to ((c <list-meta>) (v <matrix4f>)) (matrix4f->list v)) (define-method coerce-to ((c <f32vector-meta>) (v <matrix4f>)) (matrix4f->f32vector v)) (define-method coerce-to ((c <vector-meta>) (v <matrix4f>)) (list->vector (matrix4f->list v))) (define-method coerce-to ((c <matrix4f-meta>) (v <list>)) (list->matrix4f v)) (define-method coerce-to ((c <matrix4f-meta>) (v <f32vector>)) (f32vector->matrix4f v)) (define-method coerce-to ((c <matrix4f-meta>) (v <vector>)) (list->matrix4f (vector->list v))) (define-method coerce-to ((c <list-meta>) (v <quatf>)) (quatf->list v)) (define-method coerce-to ((c <f32vector-meta>) (v <quatf>)) (quatf->f32vector v)) (define-method coerce-to ((c <vector-meta>) (v <quatf>)) (list->vector (quatf->list v))) (define-method coerce-to ((c <quatf-meta>) (v <list>)) (list->quatf v)) (define-method coerce-to ((c <quatf-meta>) (v <f32vector>)) (f32vector->quatf v)) (define-method coerce-to ((c <quatf-meta>) (v <vector>)) (list->quatf (vector->list v))) ;;----------------------------------------------------------------- ;; iterators ;; ;; Iterator common pattern. We treat literal length separately, for it would ;; generate more efficient code. (define-syntax %math3dobj-iterator (syntax-rules () ((_ (size-expr . args) ref obj proc) (let ((len (size-expr . args)) (i 0)) (proc (lambda () (>= i len)) (lambda () (begin0 (ref obj i) (inc! i)))))) ((_ len ref obj proc) (let ((i 0)) (proc (lambda () (>= i len)) (lambda () (begin0 (ref obj i) (inc! i)))))) )) (define-method call-with-iterator ((v <vector4f>) proc . args) (%math3dobj-iterator 4 vector4f-ref v proc)) (define-method call-with-iterator ((p <point4f>) proc . args) (%math3dobj-iterator 4 point4f-ref p proc)) (define-method call-with-iterator ((m <matrix4f>) proc . args) (%math3dobj-iterator 16 matrix4f-ref m proc)) (define-method call-with-iterator ((q <quatf>) proc . args) (%math3dobj-iterator 4 quatf-ref q proc)) (define-method call-with-iterator ((a <vector4f-array>) proc . args) (%math3dobj-iterator (vector4f-array-length a) vector4f-array-ref a proc)) (define-method call-with-iterator ((a <point4f-array>) proc . args) (%math3dobj-iterator (point4f-array-length a) point4f-array-ref a proc)) ;; Iterator builder pattern. (define-syntax %math3dobj-builder (syntax-rules () ((_ len new set proc) (let ((v (new)) (i 0)) (proc (lambda (item) (when (>= i len) (set v i item) (inc! i))) (lambda () v)))))) (define-method call-with-builder ((class <vector4f-meta>) proc . args) (%math3dobj-builder 4 make-vector4f vector4f-set! proc)) (define-method call-with-builder ((class <point4f-meta>) proc . args) (%math3dobj-builder 4 make-point4f point4f-set! proc)) (define-method call-with-builder ((class <matrix4f-meta>) proc . args) (%math3dobj-builder 16 make-matrix4f matrix4f-set! proc)) (define-method call-with-builder ((class <quatf-meta>) proc . args) (%math3dobj-builder 4 make-quatf quatf-set! proc)) (define-syntax %math3dobj-builder* (syntax-rules () ((_ new list-> set proc args) (let ((size (get-keyword :size args #f))) (if size (let ((v (new size)) (i 0)) (proc (lambda (item) (when (< i size) (set v i item) (inc! i))) (lambda () v))) (let ((r '())) (proc (lambda (item) (push! r item)) (lambda () (list-> r))))))))) (define-method call-with-builder ((class <vector4f-array-meta>) proc . args) (%math3dobj-builder* make-vector4f-array list->vector4f-array vector4f-array-set! proc args)) (define-method call-with-builder ((class <point4f-array-meta>) proc . args) (%math3dobj-builder* make-point4f-array list->point4f-array point4f-array-set! proc args)) ;;----------------------------------------------------------------- ;; operator overload ;; (define-method object-+ ((x <vector4f>) (y <vector4f>)) (vector4f-add x y)) (define-method object-+ ((x <point4f>) (y <vector4f>)) (point4f-add x y)) (define-method object-+ ((y <vector4f>) (x <point4f>)) (point4f-add x y)) (define-method object-+ ((x <quatf>) (y <quatf>)) (quatf-add x y)) (define-method object-- ((x <vector4f>) (y <vector4f>)) (vector4f-sub x y)) (define-method object-- ((x <point4f>) (y <vector4f>)) (point4f-sub x y)) (define-method object-- ((x <point4f>) (y <point4f>)) (point4f-sub x y)) (define-method object-- ((x <quatf>) (y <quatf>)) (quatf-sub x y)) (define-method object-- ((x <vector4f>)) (vector4f-sub #,(vector4f 0 0 0) x)) (define-method object-* ((v <vector4f>) (f <real>)) (vector4f-mul v f)) (define-method object-* ((f <real>) (v <vector4f>)) (vector4f-mul v f)) (define-method object-/ ((v <vector4f>) (f <real>)) (vector4f-div v f)) (define-method object-* ((m <matrix4f>) (v <vector4f>)) (matrix4f-mul m v)) (define-method object-* ((m <matrix4f>) (v <point4f>)) (matrix4f-mul m v)) (define-method object-* ((m <matrix4f>) (n <matrix4f>)) (matrix4f-mul m n)) (define-method object-* ((m <matrix4f>) (s <real>)) (matrix4f-mul m s)) (define-method object-* ((s <real>) (m <matrix4f>)) (matrix4f-mul m s)) (define-method object-* ((x <quatf>) (y <quatf>)) (quatf-mul x y)) (provide "gl/math3d") �����������������������������������������������������������Gauche-gl-0.5.1/lib/gl/glut.scm���������������������������������������������������������������������0000644�0000764�0000764�00000001400�11533026402�015171� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; glut.scm - Gauche GLUT binding ;;; ;;; Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: glut.scm,v 1.3 2008-06-04 11:46:21 shirok Exp $ ;;; (define-module gl.glut (export-all) ) (select-module gl.glut) (dynamic-load "libgauche-glut") (provide "gl/glut") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/gl/simple/����������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�015010� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/gl/simple/image.scm�������������������������������������������������������������0000644�0000764�0000764�00000012042�11533026402�016575� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; gl.simple.image - simple image I/O ;;; ;;; Copyright (c) 2005-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: ;;; ;;; 1. Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; 2. Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in the ;;; documentation and/or other materials provided with the distribution. ;;; ;;; 3. Neither the name of the authors nor the names of its contributors ;;; may be used to endorse or promote products derived from this ;;; software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; ;;; $Id: simple-image.scm,v 1.2 2008-06-04 11:46:27 shirok Exp $ ;;; ;; For serious image handling, I'd recommend you to use a serious ;; library (Gauche's GD binding sounds nice, though there's no working ;; version yet). This module provides a minimal routines to do ;; some experiment and testing with Gauche-gl alone. (define-module gl.simple.image (export read-sgi-image read-sgi-image-from-port) (use gauche.uvector) (use gauche.sequence) (use util.match) (use binary.pack) (use srfi-42) ) (select-module gl.simple.image) (define (read-sgi-image file) (call-with-input-file file read-sgi-image-from-port)) ;; read-sgi-image-from-port :: port -> (width, height, nchannels, data) (define (read-sgi-image-from-port port) (match-let1 (magic compr bpp dim x y z min max pad1 name cmap . pad2) (unpack "nccnnnnNNNA80Nc404" :input port) (and (= magic 474) (= bpp 1) ;; we only support 8bit/channel for now. (= cmap 0) ;; we only support direct pixel values for now. (if (= compr 1) (read-sgi-rle port dim x y z) (read-sgi-raw port dim x y z))))) (define (read-sgi-raw port dim x y z) (case dim ((1) (let1 v (make-u8vector x) (read-block! v port) (list x 1 1 v))) ((2) (let1 v (make-u8vector (* x y)) (read-block! v port) (list x y 1 v))) ((3) (let ((planes (list-ec (: i z) (let1 v (make-u8vector (* x y)) (read-block! v port) v))) (vec (make-u8vector (* x y z)))) (dotimes (i (* x y)) (for-each-with-index (lambda (j plane) (u8vector-set! vec (+ (* i z) j) (u8vector-ref plane i))) planes)) (list x y z vec))) (else #f))) (define (read-sgi-rle port dim x y z) (let ((starts (make-u32vector (* y z))) ; scan line start indexes (sizes (make-u32vector (* y z))) ; compressed scan line sizes (compressed #f) (offset (+ 512 (* 2 4 y z))) ; offset to the compressed data (vec (make-u8vector (* x y z)))) ; result vector (read-block! starts port 0 -1 'big-endian) (read-block! sizes port 0 -1 'big-endian) (set! compressed (string->u8vector (call-with-output-string (cut copy-port port <>)))) (dotimes (zz z) (dotimes (yy y) (let ((start (- (u32vector-ref starts (+ (* zz y) yy)) offset)) (size (u32vector-ref sizes (+ (* zz y) yy)))) (let1 line (uvector-alias <u8vector> compressed start (+ start size)) (do ((xx (+ (* x yy z) zz) xx) (k 0 k)) ((>= k size)) (let1 b (u8vector-ref line k) (inc! k) (cond ((= b 0)) ((< b 128) ;; repeat next byte to b times (let1 bb (u8vector-ref line k) (inc! k) (dotimes (n b) (u8vector-set! vec xx bb) (inc! xx z)))) (else ;; copy (- b 128) bytes (dotimes (n (- b 128)) (u8vector-set! vec xx (u8vector-ref line k)) (inc! k) (inc! xx z))))) ))))) (list x y z vec))) (provide "gl/simple/image") ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/gl/simple/viewer.scm������������������������������������������������������������0000644�0000764�0000764�00000027013�11533026402�017020� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; simple/viewer.scm - simple viewer ;;; ;;; Copyright (c) 2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: ;;; ;;; 1. Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; 2. Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in the ;;; documentation and/or other materials provided with the distribution. ;;; ;;; 3. Neither the name of the authors nor the names of its contributors ;;; may be used to endorse or promote products derived from this ;;; software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; ;; This is a simple viewer skeleton. It is by no means intended for ;; general applications; it's rather a handy tool to quickly hack up ;; a throwaway script to visualize some data. (define-module gl.simple.viewer (use gl) (use gl.glut) (use gl.math3d) (use util.match) (use util.list) (use srfi-42) (export simple-viewer-window simple-viewer-set-window simple-viewer-get-window simple-viewer-display simple-viewer-reshape simple-viewer-grid simple-viewer-axis simple-viewer-set-key! simple-viewer-run ) ) (select-module gl.simple.viewer) (define *default-key-handlers* (make-hash-table 'eqv?)) (define *default-display-proc* #f) (define *default-grid-proc* (lambda () (default-grid))) (define *default-axis-proc* (lambda () (default-axis))) (define *default-reshape-proc* (lambda (w h) (default-reshape w h))) ;;============================================================= ;; Wrapper of GLUT window ;; ;; We internally maintain <simple-viewer-window> instance to manage ;; GLUT windows created by simple viewer. However, we only expose ;; window names (symbols) to the users. (define-class <simple-viewer-window> () (;; all slots private. use API. (name :init-keyword :name) ; window name (symbol) (id :init-keyword :id) ; GLUT window id (parent :init-keyword :parent) ; parent window, if this is sub (closure :init-keyword :closure) ; a closure to maintain the ; internal state. (name-tab :allocation :class ; name -> window :init-form (make-hash-table 'eq?)) (id-tab :allocation :class ; id -> window :init-form (make-hash-table 'eqv?)) )) (define-method initialize ((win <simple-viewer-window>) args) (next-method) (hash-table-put! (ref win'name-tab) (ref win'name) win) (hash-table-put! (ref win'id-tab) (ref win'id) win)) (define (name->window name) (hash-table-get (class-slot-ref <simple-viewer-window> 'name-tab) name #f)) (define (id->window id) (hash-table-get (class-slot-ref <simple-viewer-window> 'id-tab) id #f)) (define (name->window-id name) (and-let* [(win (name->window name))] (ref win'id))) (define (id->window-name id) (and-let* [(win (id->window id))] (ref win'name))) ;; Creates a GL window. (define (simple-viewer-window name . keys) (let-keywords keys ((parent #f) (mode (logior GLUT_DOUBLE GLUT_DEPTH GLUT_RGB)) (title (x->string name)) (width 300) (height 300) (x #f) (y #f)) ;; Internal state (define prev-x -1) (define prev-y -1) (define prev-b #f) (define rotx 20.0) (define roty -30.0) (define rotz 0.0) (define xlatx 0.0) (define xlaty 0.0) (define zoom 1.0) (define key-handlers (%hash-table-copy *default-key-handlers*)) (define grid-proc *default-grid-proc*) (define axis-proc *default-axis-proc*) (define display-proc *default-display-proc*) (define reshape-proc *default-reshape-proc*) ;; Callback closures (define (display-fn) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-push-matrix) (gl-scale zoom zoom zoom) (gl-translate xlatx xlaty 0.0) (gl-rotate rotx 1.0 0.0 0.0) (gl-rotate roty 0.0 1.0 0.0) (gl-rotate rotz 0.0 0.0 1.0) (gl-disable GL_LIGHTING) (and grid-proc (grid-proc)) (and axis-proc (axis-proc)) (gl-color 1.0 1.0 1.0 0.0) (gl-line-width 1.0) (and display-proc (display-proc)) (gl-pop-matrix) (glut-swap-buffers)) (define (reshape-fn w h) (set! height h) (set! width w) (and reshape-proc (reshape-proc w h))) (define (mouse-fn button state x y) (cond [(= state GLUT_UP) (set! prev-x -1) (set! prev-y -1) (set! prev-b #f)] [else (set! prev-x x) (set! prev-y y) (set! prev-b button)])) (define (motion-fn x y) (cond [(= prev-b GLUT_LEFT_BUTTON) (inc! rotx (* (/. (- y prev-y) height) 90.0)) (inc! roty (* (/. (- x prev-x) width) 90.0))] [(= prev-b GLUT_MIDDLE_BUTTON) (inc! xlatx (* (/. (- x prev-x) width (sqrt zoom)) 12.0)) (inc! xlaty (* (/. (- prev-y y) height (sqrt zoom)) 12.0))] [(= prev-b GLUT_RIGHT_BUTTON) (set! zoom (clamp (* (+ 1.0 (* (/. (- prev-y y) height) 2.0)) zoom) 0.1 1000.0))]) (set! prev-x x) (set! prev-y y) (glut-post-redisplay)) (define (keyboard-fn key x y) (common-keyboard-func key-handlers key x y)) (define (special-fn key x y) (common-special-func key-handlers key x y)) (define (closure . args) (match args [('grid proc) (set! grid-proc proc)] [('axis proc) (set! axis-proc proc)] [('display proc) (set! display-proc proc)] [('reshape proc) (set! reshape-proc proc)] [('key-handlers) key-handlers] [_ (error "unrecognized simple-viewer-window message:" args)])) (glut-init-display-mode mode) ;; Register GLUT window id. (let* ((pwin (and parent (name->window parent))) (id (cond [pwin (glut-create-sub-window (ref pwin'id ) (or x 0) (or y 0) width height)] [else (glut-init-window-size width height) (when (and x y) (glut-init-window-position x y)) (glut-create-window title)]))) (make <simple-viewer-window> :name name :id id :parent pwin :closure closure)) ;; Set up handlers. (glut-display-func display-fn) (glut-reshape-func reshape-fn) (glut-mouse-func mouse-fn) (glut-motion-func motion-fn) (glut-keyboard-func keyboard-fn) (glut-special-func special-fn) ;; Enable some commonly used stuff ;; TODO: make them customizable (gl-enable GL_CULL_FACE) (gl-enable GL_DEPTH_TEST) (gl-enable GL_NORMALIZE) name)) (define (simple-viewer-get-window) (id->window-name (glut-get-window))) (define (simple-viewer-set-window name) (cond [(name->window-id name) => glut-set-window])) ;; Callback registrar. (define-syntax define-registrar (syntax-rules () [(_ varname key default-var) (define (varname proc . opts) (match opts [() (set! default-var proc)] [(name) (cond [(name->window name) => (lambda (win) (ref win'closure) 'key proc)] [else (errorf "~a: no such window with name: ~a" 'varname name)])] ))])) (define-registrar simple-viewer-display display *default-display-proc*) (define-registrar simple-viewer-reshape reshape *default-reshape-proc*) (define-registrar simple-viewer-grid grid *default-grid-proc*) (define-registrar simple-viewer-axis axis *default-axis-proc*) (define (simple-viewer-set-key! window . args) (let1 tab (cond [(not window) *default-key-handlers*] [(name->window window) => (cut ref <> 'key-handlers)] [else (error "simple-viewer-set-key!: no such window:" window)]) (let loop ((args args)) (match args [() '()] [(key proc . rest) (if proc (hash-table-put! tab key proc) (hash-table-delete! tab key)) (loop rest)] [else '()])))) (define (simple-viewer-run . keys) (let-keywords keys ((rescue-errors #t) ) (if rescue-errors (let1 eport (current-error-port) (let loop () (guard (e [else (format eport "*** SIMPLE-VIEWER: ~a\n" (ref e'message))]) (glut-main-loop)) (loop))) (glut-main-loop)) )) ;; ;; Default handlers (private) ;; (define (default-reshape w h) (let1 ratio (/ h w) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-frustum -1.0 1.0 (- ratio) ratio 5.0 10000.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -40.0) )) (define (default-grid) (gl-color 0.5 0.5 0.5 0.0) (gl-line-width 1.0) (gl-begin* GL_LINES (do-ec (: i -5 6) (begin (gl-vertex i 0 -5) (gl-vertex i 0 5) (gl-vertex -5 0 i) (gl-vertex 5 0 i))))) (define (default-axis) (define (axis a b c) (gl-color a b c 0.0) (gl-begin* GL_LINES (gl-vertex 0 0 0) (gl-vertex a b c))) (gl-line-width 3.0) (axis 1.0 0.0 0.0) (axis 0.0 1.0 0.0) (axis 0.0 0.0 1.0)) (define (quit-loop) (cond-expand [gauche.sys.pthreads (thread-terminate! (current-thread))] [else (exit)])) ;; common key handler (define (common-keyboard-func table keycode x y) (cond [(hash-table-get table (integer->char keycode) #f) => (cut <> x y)]) (glut-post-redisplay)) (define (common-special-func table keycode x y) (cond [(hash-table-get table keycode #f) => (cut <> x y)]) (glut-post-redisplay)) ;; ;; Set up default keymaps ;; (simple-viewer-set-key! #f #\escape (lambda _ (quit-loop))) ;; oops, Gauche 0.8.13 is missing hash-table-copy. This is a workaround. (define %hash-table-copy (global-variable-ref (find-module 'gauche) 'hash-table-copy (lambda (src) (rlet1 dst (make-hash-table (hash-table-type src)) (hash-table-for-each src (lambda (k v) (hash-table-put! dst k v))))) )) (provide "gl/simple/viewer") ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/gl/simple-image.scm�������������������������������������������������������������0000644�0000764�0000764�00000000345�11533026402�016576� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; simple-image.scm - simple image I/O ;;; ;;; This is obsoleted. Use gl.simple.image instead. ;;; (define-module gl.simple-image (extend gl.simple.image)) ; for backward compatibility (provide "gl/simple-image") �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/gl.scm��������������������������������������������������������������������������0000644�0000764�0000764�00000007514�11533026402�014232� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; gl.scm - Gauche GL binding ;;; ;;; Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: gl.scm,v 1.11 2008-06-04 11:42:54 shirok Exp $ ;;; (define-module gl (use srfi-1) (use gauche.uvector) (use gauche.version) (use gauche.sequence) (extend gl.math3d) (export-all) ) (select-module gl) (dynamic-load "libgauche-gl") ;;------------------------------------------------------------------- ;; <gl-boolean-vector> stuff ;; (define-method ref ((vec <gl-boolean-vector>) k . maybe-default) (apply gl-boolean-vector-ref vec k maybe-default)) (define-method (setter ref) ((vec <gl-boolean-vector>) k value) (gl-boolean-vector-set! vec k value)) (define-method call-with-iterator ((vec <gl-boolean-vector>) proc . args) (let ((len (gl-boolean-vector-length vec)) (i (get-keyword :start args 0))) (proc (cut >= i len) (lambda () (begin0 (gl-boolean-vector-ref vec i) (inc! i)))))) (define-method call-with-builder ((vec <gl-boolean-vector-meta>) proc . args) (let ((size (get-keyword :size args #f))) (if size (let ((v (make-gl-boolean-vector size)) (i 0)) (proc (lambda (item) (when (< i size) (gl-boolean-vector-set! v i item) (inc! i))) (lambda () v))) (let ((q (make-queue))) (proc (cut enqueue! q <>) (cut list->gl-boolean-vector (dequeue-all! q))))))) (define-method size-of ((vec <gl-boolean-vector>)) (gl-boolean-vector-length vec)) (define-reader-ctor 'gl-boolean-vector gl-boolean-vector) ;;------------------------------------------------------------------- ;; Utilities ;; (define-syntax gl-begin* (syntax-rules () ((_ mode commands ...) (begin (gl-begin mode) commands ... (gl-end))) )) (define-syntax gl-push-matrix* (syntax-rules () ((_ commands ...) (begin (gl-push-matrix) commands ... (gl-pop-matrix))) )) ;; Check GL version and extensions (define-values (gl-extension-available? gl-version<? gl-version<=? gl-version>? gl-version>=? gl-version=?) (let ((gl-vers #f) (gl-exts #f)) (define (ensure-version) (or gl-vers (let1 v (and-let* ((verstr (gl-get-string GL_VERSION)) (m (#/^\d+\.\d+\.\d+/ verstr))) (m 0)) (set! gl-vers v) v))) (define (ensure-extensions) (or gl-exts (let1 exts (and-let* ((extstr (gl-get-string GL_EXTENSIONS))) (string-split extstr #[\s])) (set! gl-exts exts) exts))) (define (gl-extension-available? . required) (and-let* ((exts (ensure-extensions))) (every (cut member <> exts) (map x->string required)))) (define (gl-version<? v) (and-let* ((vers (ensure-version))) (version<? vers v))) (define (gl-version<=? v) (and-let* ((vers (ensure-version))) (version<=? vers v))) (define (gl-version>? v) (and-let* ((vers (ensure-version))) (version>? vers v))) (define (gl-version>=? v) (and-let* ((vers (ensure-version))) (version>=? vers v))) (define (gl-version=? v) (and-let* ((vers (ensure-version))) (version=? vers v))) (values gl-extension-available? gl-version<? gl-version<=? gl-version>? gl-version>=? gl-version=?) )) (provide "gl") ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/lib/Makefile.in���������������������������������������������������������������������0000644�0000764�0000764�00000001425�11533026402�015164� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������.PHONY: all check clean install distclean maintainer-clean SHELL = @SHELL@ srcdir = @srcdir@ VPATH = $(srcdir) top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ GAUCHE_CONFIG = "@GAUCHE_CONFIG@" GAUCHE_INSTALL = "@GAUCHE_INSTALL@" SCM_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitelibdir`" SCMFILES = gl.scm \ gl/math3d.scm \ gl/glut.scm \ gl/simple-image.scm \ gl/simple/viewer.scm \ gl/simple/image.scm CONFIG_GENERATED = Makefile all : check : install : $(GAUCHE_INSTALL) -m 444 -T $(SCM_INSTALL_DIR) $(SCMFILES) uninstall : $(GAUCHE_INSTALL) -U $(SCM_INSTALL_DIR) $(SCMFILES) clean : rm -rf core *~ gl/*~ distclean : clean rm -rf $(CONFIG_GENERATED) maintainer-clean : clean rm -rf $(CONFIG_GENERATED) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/��������������������������������������������������������������������������������0000755�0000764�0000764�00000000000�11617171624�013150� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/glext-lib.stub������������������������������������������������������������������0000644�0000764�0000764�00000207354�11533026402�015737� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; glext-lib.stub - glue functions for GL extensions ;;; ;;; Copyright (c) 2004-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: glext-lib.stub,v 1.20 2008-06-05 09:38:51 shirok Exp $ ;;; " #include \"gauche-gl.h\" #include \"gl-syms.h\" #include \"gl-ptrs.h\" " "#define CHECK_ERROR(msg__) \\ do { \\ GLenum e = glGetError(); \\ if (e != GL_NO_ERROR) { \\ Scm_Error(\"%s: %s\", msg__, gluErrorString(e)); \\ } \\ } while (0) /* GLhandle is (currently) typedef'ed to uint. */ #define SCM_GL_HANDLE_P(obj) SCM_INTEGERP(obj) #define SCM_MAKE_GL_HANDLE(handle) Scm_MakeIntegerU(handle) #define SCM_GL_HANDLE_VALUE(shandle) Scm_GetIntegerU(shandle) " ;; NB: this should be taken care of by genstub. (define-type <uvector> "ScmUVector*" "uniform vector" "SCM_UVECTORP" "SCM_UVECTOR") (define-type <u32vector> "ScmU32Vector*" "u32vector" "SCM_U32VECTORP" "SCM_U32VECTOR") (define-type <s32vector> "ScmS32Vector*" "s32vector" "SCM_S32VECTORP" "SCM_S32VECTOR") (define-type <f32vector> "ScmF32Vector*" "f32vector" "SCM_F32VECTORP" "SCM_F32VECTOR") ;;============================================================= ;; GL 1.2 ;; (define-cproc gl-tex-image-3d (target::<fixnum> level::<fixnum> internal-format::<fixnum> width::<fixnum> height::<fixnum> depth::<fixnum> border::<fixnum> format::<fixnum> type::<fixnum> texels) "int elttype, size; void *texelptr; size = Scm_GLPixelDataSize(width, height, format, type, &elttype, NULL); texelptr = Scm_GLPixelDataCheck(texels, elttype, size*depth); if (texelptr) { ENSURE(glTexImage3D); glTexImage3D(target, level, internal_format, width, height, depth, border, format, type, texelptr); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-tex-sub-image-3d (target::<fixnum> level::<fixnum> xoffset::<fixnum> yoffset::<fixnum> zoffset::<fixnum> width::<fixnum> height::<fixnum> depth::<fixnum> format::<fixnum> type::<fixnum> texels) "int elttype, size; void *texelptr; size = Scm_GLPixelDataSize(width, height, format, type, &elttype, NULL); texelptr = Scm_GLPixelDataCheck(texels, elttype, size*depth); if (texelptr) { ENSURE(glTexSubImage3D); glTexSubImage3D(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type, texelptr); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-copy-tex-sub-image-3d (target::<fixnum> level::<fixnum> xoffset::<fixnum> yoffset::<fixnum> zoffset::<fixnum> x::<fixnum> y::<fixnum> width::<fixnum> height::<fixnum>) "ENSURE(glCopyTexSubImage3D); glCopyTexSubImage3D(target, level, xoffset, yoffset, zoffset, x, y, width, height); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-draw-range-elements (mode::<fixnum> start::<uint> end::<uint> indices) "ENSURE(glDrawRangeElements); if (SCM_U8VECTORP(indices)) { glDrawRangeElements(mode, start, end, SCM_U8VECTOR_SIZE(indices), GL_UNSIGNED_BYTE, SCM_U8VECTOR_ELEMENTS(indices)); } else if (SCM_U16VECTORP(indices)) { glDrawRangeElements(mode, start, end, SCM_U16VECTOR_SIZE(indices), GL_UNSIGNED_SHORT, SCM_U16VECTOR_ELEMENTS(indices)); } else if (SCM_U32VECTORP(indices)) { glDrawRangeElements(mode, start, end, SCM_U32VECTOR_SIZE(indices), GL_UNSIGNED_INT, SCM_U32VECTOR_ELEMENTS(indices)); } else { Scm_Error(\"bad argument for indices: %S, must be u8, u16 or u32vector\", indices); } SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_ARB_imaging ;; (define-cproc gl-color-table (target::<fixnum> internal-format::<fixnum> width::<int> format::<int> type::<int> data) "int elttype, size, packed; size = Scm_GLPixelDataSize(width, 1, format, type, &elttype, &packed); ENSURE(glColorTable); glColorTable(target, internal_format, width, format, type, Scm_GLPixelDataCheck(data, elttype, size)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-color-sub-table (target::<fixnum> start::<int> count::<int> format::<int> type::<int> data) "int elttype, size, packed; size = Scm_GLPixelDataSize(count, 1, format, type, &elttype, &packed); ENSURE(glColorSubTable); glColorSubTable(target, start, count, format, type, Scm_GLPixelDataCheck(data, elttype, size)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-color-table-parameter (target::<fixnum> pname::<fixnum> param) "if (SCM_F32VECTORP(param)) { if (SCM_F32VECTOR_SIZE(param) != 4) goto err; ENSURE(glColorTableParameterfv); glColorTableParameterfv(target, pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param)) { if (SCM_S32VECTOR_SIZE(param) != 4) goto err; ENSURE(glColorTableParameteriv); glColorTableParameteriv(target, pname, SCM_S32VECTOR_ELEMENTS(param)); } else goto err; SCM_RETURN(SCM_UNDEFINED); err: Scm_Error(\"f32 or s32 vector of size 4 required, but got %S\", param); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-copy-color-sub-table (target::<fixnum> start::<fixnum> x::<int> y::<int> width::<int>) "ENSURE(glCopyColorSubTable); glCopyColorSubTable(target, start, x, y, width); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-copy-color-table (target::<fixnum> internal-format::<fixnum> x::<int> y::<int> width::<int>) "ENSURE(glCopyColorTable); glCopyColorTable(target, internal_format, x, y, width); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-color-table! (target::<fixnum> format::<fixnum> type::<fixnum> data::<uvector>) ;; TODO: check the type and size vailidity of data "ENSURE(glGetColorTable); glGetColorTable(target, format, type, SCM_UVECTOR_ELEMENTS(data)); SCM_RETURN(SCM_OBJ(data));") ; gl-get-color-table-parameter (define-cproc gl-blend-equation (mode::<fixnum>) "ENSURE(glBlendEquation); glBlendEquation(mode); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-blend-color (red::<float> green::<float> blue::<float> alpha::<float>) "ENSURE(glBlendColor); glBlendColor(red, green, blue, alpha); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-histogram (target::<fixnum> width::<int> internal-format::<fixnum> sink::<boolean>) "ENSURE(glHistogram); glHistogram(target, width, internal_format, sink); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-reset-histogram (target::<fixnum>) "ENSURE(glResetHistogram); glResetHistogram(target); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-histogram (target::<fixnum> reset::<boolean> format::<fixnum> type::<fixnum>) "int elttype, size; GLint width; ScmObj vec; ENSURE(glGetHistogramParameteriv); ENSURE(glGetHistogram); glGetHistogramParameteriv(GL_HISTOGRAM, GL_HISTOGRAM_WIDTH, &width); size = Scm_GLPixelDataSize(width, 1, format, type, &elttype, NULL); vec = Scm_GLAllocUVector(elttype, size); if (!SCM_UVECTORP(vec)) { Scm_Error(\"invalid format or type (%S, %S)\", format, type); } glGetHistogram(target, reset, format, type, SCM_UVECTOR_ELEMENTS(vec)); SCM_RETURN(vec);") (define-cproc gl-get-histogram-parameter (target::<fixnum> pname::<fixnum>) "GLint param; ENSURE(glGetHistogramParameteriv); switch (pname) { case GL_HISTOGRAM_SINK: glGetHistogramParameteriv(target, pname, ¶m); SCM_RETURN(SCM_MAKE_BOOL(param)); default: glGetHistogramParameteriv(target, pname, ¶m); SCM_RETURN(Scm_MakeInteger(param)); }") (define-cproc gl-minmax (target::<fixnum> internal-format::<fixnum> sink::<boolean>) "ENSURE(glMinmax); glMinmax(target, internal_format, sink); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-reset-minmax (target::<fixnum>) "ENSURE(glResetMinmax); glResetMinmax(target); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-minmax (target::<fixnum> reset::<boolean> format::<fixnum> type::<fixnum>) "int elttype, size; ScmObj vec; ENSURE(glGetMinmax); size = Scm_GLPixelDataSize(2, 1, format, type, &elttype, NULL); vec = Scm_GLAllocUVector(elttype, size); if (!SCM_UVECTORP(vec)) { Scm_Error(\"invalid format or type (%S, %S)\", format, type); } glGetMinmax(target, reset, format, type, SCM_UVECTOR_ELEMENTS(vec)); SCM_RETURN(vec);") (define-cproc gl-get-minmax-parameter (target::<fixnum> pname::<fixnum>) "GLint param; ENSURE(glGetMinmaxParameteriv); switch (pname) { case GL_MINMAX_SINK: glGetMinmaxParameteriv(target, pname, ¶m); SCM_RETURN(SCM_MAKE_BOOL(param)); default: glGetMinmaxParameteriv(target, pname, ¶m); SCM_RETURN(Scm_MakeInteger(param)); }") (define-cproc gl-convolution-filter-2d (target::<fixnum> internal-format::<fixnum> width::<fixnum> height::<fixnum> format::<fixnum> type::<fixnum> data::<uvector>) "int elttype, size; size = Scm_GLPixelDataSize(width, height, format, type, &elttype, NULL); if (SCM_UVECTOR_SIZE(data) < size) { Scm_Error(\"given vector is too short (minimum %d elements): %S\", size, data); } ENSURE(glConvolutionFilter2D); glConvolutionFilter2D(target, internal_format, width, height, format, type, SCM_UVECTOR_ELEMENTS(data)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-copy-convolution-filter-2d (target::<fixnum> internal-format::<fixnum> x::<fixnum> y::<fixnum> width::<fixnum> height::<fixnum>) "ENSURE(glCopyConvolutionFilter2D); glCopyConvolutionFilter2D(target, internal_format, x, y, width, height); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-separable-filter-2d (target::<fixnum> internal-format::<fixnum> width::<fixnum> height::<fixnum> format::<fixnum> type::<fixnum> row::<uvector> column::<uvector>) "ENSURE(glSeparableFilter2D); glSeparableFilter2D(target, internal_format, width, height, format, type, SCM_UVECTOR_ELEMENTS(row), SCM_UVECTOR_ELEMENTS(column)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-convolution-filter-1d (target::<fixnum> internal-format::<fixnum> width::<fixnum> format::<fixnum> type::<fixnum> data::<uvector>) "int elttype, size; size = Scm_GLPixelDataSize(width, 1, format, type, &elttype, NULL); if (SCM_UVECTOR_SIZE(data) < size) { Scm_Error(\"given vector is too short (minimum %d elements): %S\", size, data); } ENSURE(glConvolutionFilter1D); glConvolutionFilter1D(target, internal_format, width, format, type, SCM_UVECTOR_ELEMENTS(data)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-copy-convolution-filter-1d (target::<fixnum> internal-format::<fixnum> x::<fixnum> y::<fixnum> width::<fixnum>) "ENSURE(glCopyConvolutionFilter1D); glCopyConvolutionFilter1D(target, internal_format, x, y, width); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-convolution-parameter (target::<fixnum> pname::<fixnum> param) "switch (pname) { case GL_CONVOLUTION_BORDER_MODE: if (!SCM_INTP(param)) { Scm_Error(\"bad type of param value for GL_CONVOLUTION_BORDER_MODE (enum required): %S\", param); } glConvolutionParameteri(target, pname, SCM_INT_VALUE(param)); break; case GL_CONVOLUTION_FILTER_SCALE:; case GL_CONVOLUTION_FILTER_BIAS: if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 4) { glConvolutionParameterfv(target, pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param) && SCM_S32VECTOR_SIZE(param) == 4) { glConvolutionParameteriv(target, pname, SCM_S32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"bad type of param value for GL_CONVOLUTION_FILTER_SCALE/GL_CONVOLUTION_FILTER_BIAS (s32 or f32vector of size 4 required): %S\", param); } break; } SCM_RETURN(SCM_UNDEFINED);") ; gl-get-convolution-filter ; gl-get-convolution-parameter ; gl-get-separable-filter ;;============================================================= ;; GL_ARB_depth_texture ;; ;;============================================================= ;; GL_ARB_fragment_program ;; ;;============================================================= ;; GL_ARB_fragment_program_shadow ;; ;;============================================================= ;; GL_ARB_fragment_shader ;; ;;============================================================= ;; GL_ARB_matrix_palette ;; ;;============================================================= ;; GL_ARB_multisample ;; (define-cproc gl-sample-coverage-arb (value::<float> invert::<boolean>) "ENSURE(glSampleCoverageARB); glSampleCoverageARB(value, invert); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_ARB_multitexture ;; (define-cproc gl-active-texture-arb (texture::<int>) (body <void> "ENSURE(glActiveTextureARB);" "glActiveTextureARB(texture);")) (define-cproc gl-active-texture (texture::<int>) ; GL 1.3 (body <void> "ENSURE(glActiveTexture);" "glActiveTexture(texture);")) (define-cproc gl-client-active-texture-arb (texture::<int>) (body <void> "ENSURE(glClientActiveTextureARB);" "glClientActiveTextureARB(texture);")) (define-cproc gl-client-active-texture (texture::<int>) ; GL 1.3 (body <void> "ENSURE(glClientActiveTexture);" "glClientActiveTexture(texture);")) (define-cproc gl-multi-tex-coord-arb (texunit::<int> v &rest args) "if (SCM_F32VECTORP(v)) { switch (SCM_F32VECTOR_SIZE(v)) { case 2: ENSURE(glMultiTexCoord2fvARB); glMultiTexCoord2fvARB(texunit, SCM_F32VECTOR_ELEMENTS(v)); break; case 1: ENSURE(glMultiTexCoord1fvARB); glMultiTexCoord1fvARB(texunit, SCM_F32VECTOR_ELEMENTS(v)); break; case 3: ENSURE(glMultiTexCoord3fvARB); glMultiTexCoord3fvARB(texunit, SCM_F32VECTOR_ELEMENTS(v)); break; case 4: ENSURE(glMultiTexCoord4fvARB); glMultiTexCoord4fvARB(texunit, SCM_F32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_F64VECTORP(v)) { switch (SCM_F64VECTOR_SIZE(v)) { case 2: ENSURE(glMultiTexCoord2dvARB); glMultiTexCoord2dvARB(texunit, SCM_F64VECTOR_ELEMENTS(v)); break; case 1: ENSURE(glMultiTexCoord1dvARB); glMultiTexCoord1dvARB(texunit, SCM_F64VECTOR_ELEMENTS(v)); break; case 3: ENSURE(glMultiTexCoord3dvARB); glMultiTexCoord3dvARB(texunit, SCM_F64VECTOR_ELEMENTS(v)); break; case 4: ENSURE(glMultiTexCoord4dvARB); glMultiTexCoord4dvARB(texunit, SCM_F64VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S32VECTORP(v)) { switch (SCM_S32VECTOR_SIZE(v)) { case 2: ENSURE(glMultiTexCoord2ivARB); glMultiTexCoord2ivARB(texunit, SCM_S32VECTOR_ELEMENTS(v)); break; case 1: ENSURE(glMultiTexCoord2ivARB); glMultiTexCoord2ivARB(texunit, SCM_S32VECTOR_ELEMENTS(v)); break; case 3: ENSURE(glMultiTexCoord3ivARB); glMultiTexCoord3ivARB(texunit, SCM_S32VECTOR_ELEMENTS(v)); break; case 4: ENSURE(glMultiTexCoord4ivARB); glMultiTexCoord4ivARB(texunit, SCM_S32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S16VECTORP(v)) { switch (SCM_S16VECTOR_SIZE(v)) { case 2: ENSURE(glMultiTexCoord2svARB); glMultiTexCoord2svARB(texunit, SCM_S16VECTOR_ELEMENTS(v)); break; case 1: ENSURE(glMultiTexCoord1svARB); glMultiTexCoord1svARB(texunit, SCM_S16VECTOR_ELEMENTS(v)); break; case 3: ENSURE(glMultiTexCoord3svARB); glMultiTexCoord3svARB(texunit, SCM_S16VECTOR_ELEMENTS(v)); break; case 4: ENSURE(glMultiTexCoord4svARB); glMultiTexCoord4svARB(texunit, SCM_S16VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else { double val[4]; int nvals = Scm_GLGetDoubles(v, args, val, 4, 1); switch (nvals) { case 2: ENSURE(glMultiTexCoord2dvARB); glMultiTexCoord2dvARB(texunit, val); break; case 1: ENSURE(glMultiTexCoord1dvARB); glMultiTexCoord1dvARB(texunit, val); break; case 3: ENSURE(glMultiTexCoord3dvARB); glMultiTexCoord3dvARB(texunit, val); break; case 4: ENSURE(glMultiTexCoord4dvARB); glMultiTexCoord4dvARB(texunit, val); break; } } SCM_RETURN(SCM_UNDEFINED); badarg: Scm_Error(\"bad argument for v: %S, must be one of f32, f64, s32 or s16 vector of length 1, 2, 3, or 4.\", v); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_ARB_occlusion_query ;; ;; gl-genqueries-arb ;; gl-delete-queries-arb (define-cproc gl-is-query-arb (query::<uint>) "ENSURE(glIsQueryARB); SCM_RETURN(SCM_MAKE_BOOL(glIsQueryARB(query)));") (define-cproc gl-begin-query-arb (op::<uint> query::<uint>) "ENSURE(glBeginQueryARB); glBeginQueryARB(op, query); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-end-query-arb (op::<uint>) "ENSURE(glEndQueryARB); glEndQueryARB(op); SCM_RETURN(SCM_UNDEFINED);") ;; gl-get-query-rab ;; gl-get-query-object-arb ;;============================================================= ;; GL_ARB_point_parameters ;; ;;============================================================= ;; GL_ARB_point_sprite ;; ;;============================================================= ;; GL_ARB_shader_objects ;; (define-type <gl-handle> "GLhandleARB" "glhandle" "SCM_GL_HANDLE_P" "SCM_GL_HANDLE_VALUE" "SCM_MAKE_GL_HANDLE") (define-cproc gl-delete-object-arb (h::<gl-handle>) "ENSURE(glDeleteObjectARB); glDeleteObjectARB(h); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-handle-arb (type::<uint>) "ENSURE(glGetHandleARB); SCM_RETURN(SCM_MAKE_GL_HANDLE(glGetHandleARB(type)));") (define-cproc gl-create-shader-object-arb (type::<uint>) "ENSURE(glCreateShaderObjectARB); SCM_RETURN(SCM_MAKE_GL_HANDLE(glCreateShaderObjectARB(type)));") (define-cproc gl-shader-source-arb (shader::<gl-handle> strings) "GLint nstrings = Scm_Length(strings); int i = 0; GLint *lengths; GLcharARB **ss; ScmObj sp; ENSURE(glShaderSourceARB); if (nstrings < 0) goto einval; lengths = SCM_NEW_ATOMIC2(GLint*, nstrings*sizeof(GLint)); /* NB: we can use atomic here, since all strings are pointed by the input parameter, and we don't need this array after calling glShaderSourceARB. */ ss = SCM_NEW_ATOMIC2(GLcharARB**, nstrings*sizeof(GLcharARB*)); SCM_FOR_EACH(sp, strings) { if (!SCM_STRINGP(SCM_CAR(sp))) goto einval; lengths[i] = SCM_STRING_SIZE(SCM_CAR(sp)); ss[i] = (GLcharARB*)SCM_STRING_START(SCM_CAR(sp)); i++; } glShaderSourceARB(shader, nstrings, (const GLcharARB**)ss, lengths); SCM_RETURN(SCM_UNDEFINED); einval: Scm_Error(\"list of strings required, but got %S\", strings); SCM_RETURN(SCM_UNDEFINED); ") (define-cproc gl-compile-shader-arb (shader::<gl-handle>) "ENSURE(glCompileShaderARB); glCompileShaderARB(shader); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-create-program-object-arb () "ENSURE(glCreateProgramObjectARB); SCM_RETURN(SCM_MAKE_GL_HANDLE(glCreateProgramObjectARB()));") (define-cproc gl-attach-object-arb (program::<gl-handle> shader::<gl-handle>) "ENSURE(glAttachObjectARB); glAttachObjectARB(program, shader); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-detach-object-arb (program::<gl-handle> shader::<gl-handle>) "ENSURE(glDetachObjectARB); glDetachObjectARB(program, shader); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-link-program-arb (program::<gl-handle>) "ENSURE(glLinkProgramARB); glLinkProgramARB(program); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-use-program-object-arb (program::<gl-handle>) "ENSURE(glUseProgramObjectARB); glUseProgramObjectARB(program); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-validate-program-arb (program::<gl-handle>) "ENSURE(glValidateProgramARB); glValidateProgramARB(program); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-uniform1-arb (location::<int> v0) "if (SCM_F32VECTORP(v0)) { int count = SCM_F32VECTOR_SIZE(v0); ENSURE(glUniform1fvARB); glUniform1fvARB(location, count, SCM_F32VECTOR_ELEMENTS(v0)); } else if (SCM_S32VECTORP(v0)) { int count = SCM_S32VECTOR_SIZE(v0); ENSURE(glUniform1ivARB); glUniform1ivARB(location, count, SCM_S32VECTOR_ELEMENTS(v0)); } else { ENSURE(glUniform1fARB); glUniform1fARB(location, (GLfloat)Scm_GetDouble(v0)); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-uniform2-arb (location::<int> v0 &optional v1) "if (SCM_F32VECTORP(v0)) { int count = SCM_F32VECTOR_SIZE(v0)/2; ENSURE(glUniform2fvARB); glUniform2fvARB(location, count, SCM_F32VECTOR_ELEMENTS(v0)); } else if (SCM_S32VECTORP(v0)) { int count = SCM_S32VECTOR_SIZE(v0)/2; ENSURE(glUniform2ivARB); glUniform2ivARB(location, count, SCM_S32VECTOR_ELEMENTS(v0)); } else if (SCM_UNBOUNDP(v1)) { Scm_Error(\"Not enough arguments for gl-uniform2-arb\"); } else { ENSURE(glUniform2fARB); glUniform2fARB(location, (GLfloat)Scm_GetDouble(v0), (GLfloat)Scm_GetDouble(v1)); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-uniform3-arb (location::<int> v0 &optional v1 v2) "if (SCM_F32VECTORP(v0)) { int count = SCM_F32VECTOR_SIZE(v0)/3; ENSURE(glUniform3fvARB); glUniform3fvARB(location, count, SCM_F32VECTOR_ELEMENTS(v0)); } else if (SCM_S32VECTORP(v0)) { int count = SCM_S32VECTOR_SIZE(v0)/3; ENSURE(glUniform3ivARB); glUniform3ivARB(location, count, SCM_S32VECTOR_ELEMENTS(v0)); } else if (SCM_UNBOUNDP(v2)) { Scm_Error(\"Not enough arguments for gl-uniform3-arb\"); } else { ENSURE(glUniform3fARB); glUniform3fARB(location, (GLfloat)Scm_GetDouble(v0), (GLfloat)Scm_GetDouble(v1), (GLfloat)Scm_GetDouble(v2)); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-uniform4-arb (location::<int> v0 &optional v1 v2 v3) "if (SCM_F32VECTORP(v0)) { int count = SCM_F32VECTOR_SIZE(v0)/4; ENSURE(glUniform4fvARB); glUniform4fvARB(location, count, SCM_F32VECTOR_ELEMENTS(v0)); } else if (SCM_S32VECTORP(v0)) { int count = SCM_S32VECTOR_SIZE(v0)/4; ENSURE(glUniform4ivARB); glUniform4ivARB(location, count, SCM_S32VECTOR_ELEMENTS(v0)); } else if (SCM_UNBOUNDP(v3)) { Scm_Error(\"Not enough arguments for gl-uniform4-arb\"); } else { ENSURE(glUniform4fARB); glUniform4fARB(location, (GLfloat)Scm_GetDouble(v0), (GLfloat)Scm_GetDouble(v1), (GLfloat)Scm_GetDouble(v2), (GLfloat)Scm_GetDouble(v3)); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-uniform-matrix2-arb (location::<int> transpose::<boolean> v::<f32vector>) "int count = SCM_F32VECTOR_SIZE(v)/4; ENSURE(glUniformMatrix2fvARB); glUniformMatrix2fvARB(location, count, transpose, SCM_F32VECTOR_ELEMENTS(v)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-uniform-matrix3-arb (location::<int> transpose::<boolean> v::<f32vector>) "int count = SCM_F32VECTOR_SIZE(v)/9; ENSURE(glUniformMatrix3fvARB); glUniformMatrix3fvARB(location, count, transpose, SCM_F32VECTOR_ELEMENTS(v)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-uniform-matrix4-arb (location::<int> transpose::<boolean> v::<f32vector>) "int count = SCM_F32VECTOR_SIZE(v)/16; ENSURE(glUniformMatrix4fvARB); glUniformMatrix4fvARB(location, count, transpose, SCM_F32VECTOR_ELEMENTS(v)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-object-parameter-arb (object::<gl-handle> pname::<uint>) "GLint i; ENSURE(glGetObjectParameterfvARB); ENSURE(glGetObjectParameterivARB); switch (pname) { case GL_OBJECT_TYPE_ARB:; case GL_OBJECT_SUBTYPE_ARB:; case GL_OBJECT_DELETE_STATUS_ARB:; case GL_OBJECT_COMPILE_STATUS_ARB:; case GL_OBJECT_LINK_STATUS_ARB:; case GL_OBJECT_VALIDATE_STATUS_ARB:; case GL_OBJECT_INFO_LOG_LENGTH_ARB:; case GL_OBJECT_ATTACHED_OBJECTS_ARB:; case GL_OBJECT_ACTIVE_ATTRIBUTES_ARB:; case GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB:; case GL_OBJECT_ACTIVE_UNIFORMS_ARB:; case GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB:; case GL_OBJECT_SHADER_SOURCE_LENGTH_ARB:; glGetObjectParameterivARB(object, pname, &i); SCM_RETURN(Scm_MakeInteger(i)); default: Scm_Error(\"invalid pname for gl-get-object-parameter-arb: %d\", pname); SCM_RETURN(SCM_UNDEFINED); }") (define-cproc gl-get-info-log-arb (object::<gl-handle>) "GLint loglen = 0; GLcharARB *logstr; ENSURE(glGetObjectParameterivARB); ENSURE(glGetInfoLogARB); glGetObjectParameterivARB(object, GL_OBJECT_INFO_LOG_LENGTH_ARB, &loglen); logstr = SCM_NEW_ATOMIC2(char*, (loglen+1)*sizeof(GLcharARB)); glGetInfoLogARB(object, loglen, NULL, logstr); CHECK_ERROR(\"glGetInfoLogARB\"); SCM_RETURN(Scm_MakeString((const char*)logstr, loglen-1, -1, 0));") (define-cproc gl-get-attached-objects-arb (program::<gl-handle>) "GLint numobjs = 0; GLhandleARB *objs; ScmObj r; int i; ENSURE(glGetObjectParameterivARB); ENSURE(glGetAttachedObjectsARB); glGetObjectParameterivARB(program, GL_OBJECT_ATTACHED_OBJECTS_ARB, &numobjs); CHECK_ERROR(\"glGetObjectParameterivARB\"); objs = SCM_NEW_ATOMIC2(GLhandleARB*, numobjs * sizeof(GLhandleARB)); glGetAttachedObjectsARB(program, numobjs, NULL, objs); CHECK_ERROR(\"glGetInfoLogARB\"); r = Scm_MakeVector(numobjs, SCM_FALSE); for (i=0; i<numobjs; i++) { SCM_VECTOR_ELEMENT(r, i) = SCM_MAKE_GL_HANDLE(objs[i]); } SCM_RETURN(r);") (define-cproc gl-get-uniform-location-arb (program::<gl-handle> expr::<string>) "GLint r; ENSURE(glGetUniformLocationARB); r = glGetUniformLocationARB(program, (const GLcharARB*)Scm_GetStringConst(expr)); CHECK_ERROR(\"glGetUniformLocationARB\"); SCM_RETURN(Scm_MakeInteger(r));") ;; returns (size, type, name) (define-cproc gl-get-active-uniform-arb (program::<gl-handle> index::<uint>) "GLint maxlen, size; GLsizei len; GLenum type; GLcharARB *namebuf; ENSURE(glGetObjectParameterivARB); ENSURE(glGetActiveUniformARB); glGetObjectParameterivARB(program, GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB, &maxlen); CHECK_ERROR(\"glGetObjectParameterivARB\"); namebuf = SCM_NEW_ATOMIC2(GLcharARB*, (maxlen+1)*sizeof(GLcharARB*)); glGetActiveUniformARB(program, index, maxlen, &len, &size, &type, namebuf); CHECK_ERROR(\"glGetActiveUniformARB\"); SCM_RETURN(Scm_Values3(Scm_MakeInteger(size), Scm_MakeInteger(type), Scm_MakeString(namebuf, len, -1, 0)));") ; get-uniform-f-arb ; get-uniform-i-arb (define-cproc gl-get-shader-source-arb (object::<gl-handle>) "GLint srclen = 0; GLcharARB *srcstr; ENSURE(glGetObjectParameterivARB); ENSURE(glGetShaderSourceARB); glGetObjectParameterivARB(object, GL_OBJECT_SHADER_SOURCE_LENGTH_ARB, &srclen); srcstr = SCM_NEW_ATOMIC2(char*, (srclen+1)*sizeof(GLcharARB)); glGetShaderSourceARB(object, srclen, NULL, srcstr); CHECK_ERROR(\"glGetShaderSourceARB\"); SCM_RETURN(Scm_MakeString((const char*)srcstr, srclen-1, -1, 0));") ;;============================================================= ;; GL_ARB_shading_language_100 ;; ;;============================================================= ;; GL_ARB_shadow ;; ;;============================================================= ;; GL_ARB_shadow_ambient ;; ;;============================================================= ;; GL_ARB_texture_border_clamp ;; ;;============================================================= ;; GL_ARB_texture_compression ;; ; gl-compressed-tex-image-3d-arb ; gl-compressed-tex-image-2d-arb ; gl-compressed-tex-image-1d-arb ; gl-compressed-tex-subimage-3d-arb ; gl-compressed-tex-subimage-2d-arb ; gl-compressed-tex-subimage-1d-arb ; gl-get-compressed-tex-image-arb ;;============================================================= ;; GL_ARB_texture_cube_map ;; ;;============================================================= ;; GL_ARB_texture_env_add ;; ;;============================================================= ;; GL_ARB_texture_env_combine ;; ;;============================================================= ;; GL_ARB_texture_env_dot3 ;; ;;============================================================= ;; GL_ARB_texture_mirrored_repeat ;; ;;============================================================= ;; GL_ARB_texture_non_power_of_two ;; ;;============================================================= ;; GL_ARB_transpose_matrix ;; (define-cproc gl-load-transpose-matrix-arb (m) "if (SCM_MATRIX4FP(m)) { ENSURE(glLoadTransposeMatrixfARB); glLoadTransposeMatrixfARB(SCM_MATRIX4F_D(m)); } else if (SCM_F32VECTORP(m) && SCM_F32VECTOR_SIZE(m) == 16) { ENSURE(glLoadTransposeMatrixfARB); glLoadTransposeMatrixfARB(SCM_F32VECTOR_ELEMENTS(m)); } else if (SCM_F64VECTORP(m) && SCM_F64VECTOR_SIZE(m) == 16) { ENSURE(glLoadTransposeMatrixdARB); glLoadTransposeMatrixdARB(SCM_F64VECTOR_ELEMENTS(m)); } else { Scm_Error(\"3dmatrix, f32vector or f64vector of length 16 is required, but got %S\", m); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-mult-transpose-matrix-arb (m) "if (SCM_MATRIX4FP(m)) { ENSURE(glMultTransposeMatrixfARB); glMultTransposeMatrixfARB(SCM_MATRIX4F_D(m)); } else if (SCM_F32VECTORP(m) && SCM_F32VECTOR_SIZE(m) == 16) { ENSURE(glMultTransposeMatrixfARB); glMultTransposeMatrixfARB(SCM_F32VECTOR_ELEMENTS(m)); } else if (SCM_F64VECTORP(m) && SCM_F64VECTOR_SIZE(m) == 16) { ENSURE(glMultTransposeMatrixdARB); glMultTransposeMatrixdARB(SCM_F64VECTOR_ELEMENTS(m)); } else { Scm_Error(\"3dmatrix, f32vector or f64vector of length 16 is required, but got %S\", m); } SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_ARB_vertex_buffer_object ;; (define-cproc gl-bind-buffer-arb (target::<int> buffer::<uint>) "ENSURE(glBindBufferARB); glBindBufferARB(target, buffer); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-delete-buffers-arb (buffers::<u32vector>) "ENSURE(glDeleteBuffersARB); glDeleteBuffersARB(SCM_U32VECTOR_SIZE(buffers), SCM_U32VECTOR_ELEMENTS(buffers)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-gen-buffers-arb (n::<uint>) "ScmObj v = Scm_MakeU32Vector(n, 0); ENSURE(glGenBuffersARB); glGenBuffersARB(n, SCM_U32VECTOR_ELEMENTS(v)); SCM_RETURN(v);") (define-cproc gl-is-buffer-arb (buffer::<uint>) "ENSURE(glIsBufferARB); SCM_RETURN(SCM_MAKE_BOOL(glIsBufferARB(buffer)));") ; gl-buffer-data-arb ; gl-buffer-sub-data-arb ; gl-get-buffer-sub-data-arb ; gl-map-buffer-arb (define-cproc gl-unmap-buffer-arb (target::<int>) "ENSURE(glUnmapBufferARB); SCM_RETURN(SCM_MAKE_BOOL(glUnmapBufferARB(target)));") ; glGetBufferParameterivARB ; glGetBufferPointervARB ;;============================================================= ;; GL_ARB_vertex_program ;; (define-cproc gl-vertex-attrib-arb (index::<uint> arg0 &rest args) "if (SCM_POINT4FP(arg0) || SCM_VECTOR4FP(arg0)) { ENSURE(glVertexAttrib4fvARB); glVertexAttrib4fvARB(index, SCM_VECTOR4F_D(arg0)); } else if (SCM_F32VECTORP(arg0)) { switch (SCM_F32VECTOR_SIZE(arg0)) { case 1: ENSURE(glVertexAttrib1fvARB); glVertexAttrib1fvARB(index, SCM_F32VECTOR_ELEMENTS(arg0)); break; case 2: ENSURE(glVertexAttrib2fvARB); glVertexAttrib2fvARB(index, SCM_F32VECTOR_ELEMENTS(arg0)); break; case 3: ENSURE(glVertexAttrib3fvARB); glVertexAttrib3fvARB(index, SCM_F32VECTOR_ELEMENTS(arg0)); break; case 4: ENSURE(glVertexAttrib4fvARB); glVertexAttrib4fvARB(index, SCM_F32VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_S16VECTORP(arg0)) { switch (SCM_S16VECTOR_SIZE(arg0)) { case 1: ENSURE(glVertexAttrib1svARB); glVertexAttrib1svARB(index, SCM_S16VECTOR_ELEMENTS(arg0)); break; case 2: ENSURE(glVertexAttrib2svARB); glVertexAttrib2svARB(index, SCM_S16VECTOR_ELEMENTS(arg0)); break; case 3: ENSURE(glVertexAttrib3svARB); glVertexAttrib3svARB(index, SCM_S16VECTOR_ELEMENTS(arg0)); break; case 4: ENSURE(glVertexAttrib4svARB); glVertexAttrib4svARB(index, SCM_S16VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_F64VECTORP(arg0)) { switch (SCM_F64VECTOR_SIZE(arg0)) { case 1: ENSURE(glVertexAttrib1dvARB); glVertexAttrib1dvARB(index, SCM_F64VECTOR_ELEMENTS(arg0)); break; case 2: ENSURE(glVertexAttrib2dvARB); glVertexAttrib2dvARB(index, SCM_F64VECTOR_ELEMENTS(arg0)); break; case 3: ENSURE(glVertexAttrib3dvARB); glVertexAttrib3dvARB(index, SCM_F64VECTOR_ELEMENTS(arg0)); break; case 4: ENSURE(glVertexAttrib4dvARB); glVertexAttrib4dvARB(index, SCM_F64VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_S8VECTORP(arg0)) { switch (SCM_S8VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4bvARB); glVertexAttrib4bvARB(index, SCM_S8VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_U8VECTORP(arg0)) { switch (SCM_U8VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4ubvARB); glVertexAttrib4ubvARB(index, SCM_U8VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_U16VECTORP(arg0)) { switch (SCM_U16VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4usvARB); glVertexAttrib4usvARB(index, SCM_U16VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_S32VECTORP(arg0)) { switch (SCM_S32VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4ivARB); glVertexAttrib4ivARB(index, SCM_S32VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_U32VECTORP(arg0)) { switch (SCM_U32VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4uivARB); glVertexAttrib4uivARB(index, SCM_U32VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else { int count = Scm_Length(args) + 1; switch (count) { case 1: ENSURE(glVertexAttrib1dARB); glVertexAttrib1dARB(index, Scm_GetDouble(arg0)); break; case 2: ENSURE(glVertexAttrib2dARB); glVertexAttrib2dARB(index, Scm_GetDouble(arg0), Scm_GetDouble(SCM_CAR(args))); break; case 3: ENSURE(glVertexAttrib3dARB); glVertexAttrib3dARB(index, Scm_GetDouble(arg0), Scm_GetDouble(SCM_CAR(args)), Scm_GetDouble(SCM_CADR(args))); break; case 4: ENSURE(glVertexAttrib4dARB); glVertexAttrib4dARB(index, Scm_GetDouble(arg0), Scm_GetDouble(SCM_CAR(args)), Scm_GetDouble(SCM_CADR(args)), Scm_GetDouble(SCM_CAR(SCM_CDDR(args)))); break; default: arg0 = Scm_Cons(arg0, args); goto err; } } SCM_RETURN(SCM_UNDEFINED); err: Scm_Error(\"bad argument(s) for gl-vertex-attrib-arb: %S\", arg0); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-vertex-attrib-4n-arb (index::<uint> arg0 &rest args) "if (SCM_POINT4FP(arg0) || SCM_VECTOR4FP(arg0)) { ENSURE(glVertexAttrib4fvARB); glVertexAttrib4fvARB(index, SCM_VECTOR4F_D(arg0)); } else if (SCM_S16VECTORP(arg0)) { switch (SCM_S16VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4NsvARB); glVertexAttrib4NsvARB(index, SCM_S16VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_S8VECTORP(arg0)) { switch (SCM_S8VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4NbvARB); glVertexAttrib4NbvARB(index, SCM_S8VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_U8VECTORP(arg0)) { switch (SCM_U8VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4NubvARB); glVertexAttrib4NubvARB(index, SCM_U8VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_U16VECTORP(arg0)) { switch (SCM_U16VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4NusvARB); glVertexAttrib4NusvARB(index, SCM_U16VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_S32VECTORP(arg0)) { switch (SCM_S32VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4NivARB); glVertexAttrib4NivARB(index, SCM_S32VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_U32VECTORP(arg0)) { switch (SCM_U32VECTOR_SIZE(arg0)) { case 4: ENSURE(glVertexAttrib4NuivARB); glVertexAttrib4NuivARB(index, SCM_U32VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else { int count = Scm_Length(args) + 1; switch (count) { case 4: ENSURE(glVertexAttrib4NubARB); glVertexAttrib4NubARB(index, (GLubyte)Scm_GetIntegerU(arg0), (GLubyte)Scm_GetIntegerU(SCM_CAR(args)), (GLubyte)Scm_GetIntegerU(SCM_CADR(args)), (GLubyte)Scm_GetIntegerU(SCM_CAR(SCM_CDDR(args)))); break; default: arg0 = Scm_Cons(arg0, args); goto err; } } SCM_RETURN(SCM_UNDEFINED); err: Scm_Error(\"bad argument(s) for gl-vertex-attrib-4n-arb: %S\", arg0); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-vertex-attrib-pointer-arb (index::<uint> size::<int> vec &optional (normalized::<boolean> #f) (stride::<fixnum> 0) (offset::<fixnum> 0)) "if (size < 1 || size > 4) { Scm_Error(\"bad argument for size: %d, must be 1, 2, 3 or 4\", size); } if (SCM_POINT4F_ARRAY_P(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_FLOAT, normalized, stride, (const GLvoid*)(SCM_POINT4F_ARRAY_D(vec)+offset)); } else if (SCM_VECTOR4F_ARRAY_P(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_FLOAT, normalized, stride, (const GLvoid*)(SCM_VECTOR4F_ARRAY_D(vec)+offset)); } else if (SCM_F32VECTORP(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_FLOAT, normalized, stride, (const GLvoid*)(SCM_F32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_F64VECTORP(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_DOUBLE, normalized, stride, (const GLvoid*)(SCM_F64VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S32VECTORP(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_INT, normalized, stride, (const GLvoid*)(SCM_S32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_U32VECTORP(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_UNSIGNED_INT, normalized, stride, (const GLvoid*)(SCM_U32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S16VECTORP(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_SHORT, normalized, stride, (const GLvoid*)(SCM_S16VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_U16VECTORP(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_UNSIGNED_SHORT, normalized, stride, (const GLvoid*)(SCM_U16VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S8VECTORP(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_BYTE, normalized, stride, (const GLvoid*)(SCM_S8VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_U8VECTORP(vec)) { ENSURE(glVertexAttribPointerARB); glVertexAttribPointerARB(index, size, GL_UNSIGNED_BYTE, normalized, stride, (const GLvoid*)(SCM_U8VECTOR_ELEMENTS(vec)+offset)); } else { Scm_Error(\"bad argument for vec: %S, must be an uniform vector, <pointer4f-array> or <vector4f-array>\", vec); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-is-program-arb (prog-id::<int>) "ENSURE(glIsProgramARB); SCM_RETURN(SCM_MAKE_BOOL(glIsProgramARB(prog_id)));") (define-cproc gl-enable-vertex-attrib-array-arb (index::<uint>) "ENSURE(glEnableVertexAttribArrayARB); glEnableVertexAttribArrayARB(index); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-disable-vertex-attrib-array-arb (index::<uint>) "ENSURE(glDisableVertexAttribArrayARB); glDisableVertexAttribArrayARB(index); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-program-string-arb (target::<int> format::<int> text::<string>) "GLint errorPos; char* str=(char*)SCM_STRING_START(text); ENSURE(glProgramStringARB); glProgramStringARB(target, format, strlen(str), str); glGetIntegerv(GL_PROGRAM_ERROR_POSITION_ARB, &errorPos); if(errorPos!=-1) { Scm_Error(\"Error in shader: %s\", glGetString(GL_PROGRAM_ERROR_STRING_ARB)); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-bind-program-arb (target::<int> id::<int>) "ENSURE(glBindProgramARB); glBindProgramARB(target, id); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-delete-programs-arb (arg0) "if(SCM_INTEGERP(arg0)) { GLuint prog = Scm_GetInteger(arg0); ENSURE(glDeleteProgramsARB); glDeleteProgramsARB(1,&prog); } else if(SCM_U32VECTORP(arg0)) { ENSURE(glDeleteProgramsARB); glDeleteProgramsARB(SCM_S32VECTOR_SIZE(arg0), SCM_U32VECTOR_ELEMENTS(arg0)); } SCM_RETURN(SCM_UNDEFINED); ") (define-cproc gl-gen-programs-arb (n::<int>) "ScmU32Vector *v = SCM_U32VECTOR(Scm_MakeU32Vector(n, 0)); ENSURE(glGenProgramsARB); glGenProgramsARB(n, SCM_U32VECTOR_ELEMENTS(v)); SCM_RETURN(SCM_OBJ(v));") ; target should be GL_FRAGMENT_PROGRAM_ARB or GL_VERTEX_PROGRAM_ARB (define-cproc gl-program-env-parameter-arb (target::<int> param-id::<int> arg0 &rest args) "if(SCM_VECTOR4FP(arg0)) { ENSURE(glProgramEnvParameter4fvARB); glProgramEnvParameter4fvARB(target, param_id, SCM_VECTOR4F_D(arg0)); } else if(SCM_F32VECTORP(arg0)) { if(SCM_F32VECTOR_SIZE(arg0)!=4) { goto err; } ENSURE(glProgramEnvParameter4fvARB); glProgramEnvParameter4fvARB(target, param_id, SCM_F32VECTOR_ELEMENTS(arg0)); } else if(SCM_F64VECTORP(arg0)) { if(SCM_F64VECTOR_SIZE(arg0)!=4) { goto err; } ENSURE(glProgramEnvParameter4dvARB); glProgramEnvParameter4dvARB(target, param_id, SCM_F64VECTOR_ELEMENTS(arg0)); } else { if(1+Scm_Length(args)!=4) { goto err; } ENSURE(glProgramEnvParameter4dARB); glProgramEnvParameter4dARB(target, param_id, Scm_GetDouble(arg0), Scm_GetDouble(SCM_CAR(args)), Scm_GetDouble(SCM_CADR(args)), Scm_GetDouble(SCM_CAR(SCM_CDDR(args)))); } SCM_RETURN(SCM_UNDEFINED); err: Scm_Error(\"bad arguments for gl-program-env-parameter-arb: %S\", arg0); SCM_RETURN(SCM_UNDEFINED);") ; target should be GL_FRAGMENT_PROGRAM_ARB or GL_VERTEX_PROGRAM_ARB (define-cproc gl-program-local-parameter-arb (target::<int> param-id::<int> arg0 &rest args) "if(SCM_VECTOR4FP(arg0)) { ENSURE(glProgramLocalParameter4fvARB); glProgramLocalParameter4fvARB(target, param_id, SCM_VECTOR4F_D(arg0)); } else if(SCM_F32VECTORP(arg0)) { if(SCM_F32VECTOR_SIZE(arg0)!=4) { goto err; } ENSURE(glProgramLocalParameter4fvARB); glProgramLocalParameter4fvARB(target, param_id, SCM_F32VECTOR_ELEMENTS(arg0)); } else if(SCM_F64VECTORP(arg0)) { if(SCM_F64VECTOR_SIZE(arg0)!=4) { goto err; } ENSURE(glProgramLocalParameter4dvARB); glProgramLocalParameter4dvARB(target, param_id, SCM_F64VECTOR_ELEMENTS(arg0)); } else { if(1+Scm_Length(args)!=4) { goto err; } ENSURE(glProgramLocalParameter4dARB); glProgramLocalParameter4dARB(target, param_id, Scm_GetDouble(arg0), Scm_GetDouble(SCM_CAR(args)), Scm_GetDouble(SCM_CADR(args)), Scm_GetDouble(SCM_CAR(SCM_CDDR(args)))); } SCM_RETURN(SCM_UNDEFINED); err: Scm_Error(\"bad arguments for gl-program-local-parameter-arb: %S\", arg0); SCM_RETURN(SCM_UNDEFINED);") ; gl-get-program-env-parameter-arb ; gl-get-program-local-parameter-arb ; gl-get-program-arb ; gl-get-program-string-arb ; gl-get-vertex-attrib-arb ; gl-get-vertex-attrib-pointer-arb ;;============================================================= ;; GL_ARB_vertex_shader ;; (define-cproc gl-bind-attrib-location-arb (program::<gl-handle> index::<uint> name::<string>) "ENSURE(glBindAttribLocationARB); glBindAttribLocationARB(program, index, Scm_GetStringConst(name)); SCM_RETURN(SCM_UNDEFINED);") ;; returns three values: size, type and name (define-cproc gl-get-active-attrib-arb (program::<gl-handle> index::<uint>) " #define MAXNAMEBUFLEN 1024 /* NB: should be dynamically adjusted, using GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB */ GLcharARB namebuf[MAXNAMEBUFLEN]; GLint attrsize = 0; GLenum attrtype = 0; ENSURE(glGetActiveAttribARB); glGetActiveAttribARB(program, index, MAXNAMEBUFLEN-1, NULL, &attrsize, &attrtype, namebuf); SCM_RETURN(Scm_Values3(Scm_MakeInteger(attrsize), Scm_MakeInteger(attrtype), SCM_MAKE_STR_COPYING(namebuf))); #undef MAXNAMEBUFLEN ") (define-cproc gl-get-attrib-location-arb (program::<gl-handle> name::<string>) "GLint r; ENSURE(glGetAttribLocationARB); r = glGetAttribLocationARB(program, Scm_GetStringConst(name)); SCM_RETURN(Scm_MakeInteger(r));") ;;============================================================= ;; GL_ARB_window_pos ;; (define-cproc gl-window-pos-arb (arg0 &rest args) "if (SCM_F32VECTORP(arg0)) { switch (SCM_F32VECTOR_SIZE(arg0)) { case 2: ENSURE(glWindowPos2fvARB); glWindowPos2fvARB(SCM_F32VECTOR_ELEMENTS(arg0)); break; case 3: ENSURE(glWindowPos3fvARB); glWindowPos3fvARB(SCM_F32VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_S32VECTORP(arg0)) { switch (SCM_S32VECTOR_SIZE(arg0)) { case 2: ENSURE(glWindowPos2ivARB); glWindowPos2ivARB(SCM_S32VECTOR_ELEMENTS(arg0)); break; case 3: ENSURE(glWindowPos3ivARB); glWindowPos3ivARB(SCM_S32VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_S16VECTORP(arg0)) { switch (SCM_S16VECTOR_SIZE(arg0)) { case 2: ENSURE(glWindowPos2svARB); glWindowPos2svARB(SCM_S16VECTOR_ELEMENTS(arg0)); break; case 3: ENSURE(glWindowPos3svARB); glWindowPos3svARB(SCM_S16VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else if (SCM_F64VECTORP(arg0)) { switch (SCM_F64VECTOR_SIZE(arg0)) { case 2: ENSURE(glWindowPos2dvARB); glWindowPos2dvARB(SCM_F64VECTOR_ELEMENTS(arg0)); break; case 3: ENSURE(glWindowPos3dvARB); glWindowPos3dvARB(SCM_F64VECTOR_ELEMENTS(arg0)); break; default: goto err; } } else { int len = Scm_Length(args) + 1; switch (len) { case 2: ENSURE(glWindowPos2dARB); glWindowPos2dARB(Scm_GetDouble(arg0), Scm_GetDouble(SCM_CAR(args))); break; case 3: ENSURE(glWindowPos3dARB); glWindowPos3dARB(Scm_GetDouble(arg0), Scm_GetDouble(SCM_CAR(args)), Scm_GetDouble(SCM_CADR(args))); break; default: arg0 = Scm_Cons(arg0, args); goto err; } } SCM_RETURN(SCM_UNDEFINED); err: Scm_Error(\"bad arguments for gl-window-pos: %S\", arg0); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_ATI_texture_float ;; ;;============================================================= ;; GL_ATI_draw_buffers ;; (define-cproc gl-draw-buffers-ati (bufs::<s32vector>) "ENSURE(glDrawBuffersATI); glDrawBuffersATI(SCM_S32VECTOR_SIZE(bufs), (const GLenum *)SCM_S32VECTOR_ELEMENTS(bufs)); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_EXT_422_pixels ;; ;;============================================================= ;; GL_EXT_abgr ;; ;;============================================================= ;; GL_EXT_bgra ;; ;;============================================================= ;; GL_EXT_blend_color ;; (define-cproc gl-blend-color-ext (red::<float> green::<float> blue::<float> alpha::<float>) "ENSURE(glBlendColorEXT); glBlendColorEXT(red, green, blue, alpha); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_EXT_blend_equation_separate ;; (define-cproc gl-blend-equation-separate-ext (mode-rgb::<int> mode-alpha::<int>) "ENSURE(glBlendEquationSeparateEXT); glBlendEquationSeparateEXT(mode_rgb, mode_alpha); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_EXT_blend_func_separate ;; (define-cproc gl-blend-func-separate-ext (sfactor-rgb::<int> dfactor-rgb::<int> sfactor-alpha::<int> dfactor-alpha::<int>) "ENSURE(glBlendFuncSeparateEXT); glBlendFuncSeparateEXT(sfactor_rgb, dfactor_rgb, sfactor_alpha, dfactor_alpha); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_EXT_blend_logic_op ;; ;;============================================================= ;; GL_EXT_blend_minmax ;; (define-cproc gl-blend-equation-ext (mode::<int>) "ENSURE(glBlendEquationEXT); glBlendEquationEXT(mode); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_EXT_blend_subtract ;; ;;============================================================= ;; GL_EXT_Cg_shader ;; ;;============================================================= ;; GL_EXT_polygon_offset ;; ;;============================================================= ;; GL_EXT_clip_volume_hint ;; ;;============================================================= ;; GL_EXT_cmyka ;; ;;============================================================= ;; GL_EXT_color_subtable ;; ;;============================================================= ;; GL_EXT_compiled_vertex_array ;; (define-cproc gl-lock-arrays-ext (first::<int> count::<uint>) "ENSURE(glLockArraysEXT); glLockArraysEXT(first, count); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-unlock-arrays-ext () "ENSURE(glUnlockArraysEXT); glUnlockArraysEXT(); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_EXT_convolution ;; ;;============================================================= ;; GL_EXT_copy_texture ;; ;;============================================================= ;; GL_EXT_cull_vertex ;; ;;============================================================= ;; GL_EXT_depth_bounds_test ;; (define-cproc gl-depth-bounds-ext (zmin::<double> zmax::<double>) "ENSURE(glDepthBoundsEXT); glDepthBoundsEXT(zmin, zmax); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; GL_EXT_draw_range_elements ;; ; gl-draw-range-elements-ext ;;============================================================= ;; GL_EXT_fog_coord ;; ; gl-fog-coord-ext ; gl-fog-coord-pointer-ext ;;============================================================= ;; GL_EXT_histogram ;; ;;============================================================= ;; GL_EXT_misc_attribute ;; ;;============================================================= ;; GL_EXT_index_array_formats ;; ;;============================================================= ;; GL_EXT_index_func ;; ;;============================================================= ;; GL_EXT_index_material ;; ;;============================================================= ;; GL_EXT_index_texture ;; ;;============================================================= ;; GL_EXT_light_texture ;; ;;============================================================= ;; GL_EXT_multi_draw_arrays ;; ; gl-multi-draw-arrays-ext ; gl-multi-draw-elements-ext ;;============================================================= ;; GL_EXT_packed_pixels ;; ;;============================================================= ;; GL_EXT_paletted_texture ;; ; gl-color-table-ext ; gl-color-sub-table-ext ; gl-get-color-table-ext ; gl-get-color-table-parameter-ext ;;============================================================= ;; GL_EXT_pixel_buffer_object ;; ;;============================================================= ;; GL_EXT_pixel_transform ;; ;;============================================================= ;; GL_EXT_pixel_transform_color_table ;; ;;============================================================= ;; GL_EXT_point_parameters ;; ; gl-point-parameter-ext ;;============================================================= ;; GL_EXT_rescale_normal ;; ;;============================================================= ;; GL_EXT_secondary_color ;; ;;============================================================= ;; GL_EXT_separate_specular_color ;; ;;============================================================= ;; GL_EXT_shadow_funcs ;; ;;============================================================= ;; GL_EXT_shared_texture_palette ;; ;;============================================================= ;; GL_EXT_stencil_two_side ;; ;;============================================================= ;; GL_EXT_stencil_wrap ;; ;;============================================================= ;; GL_EXT_subtexture ;; ;;============================================================= ;; GL_EXT_texture ;; ;;============================================================= ;; GL_EXT_texture_compression_s3tc ;; ;;============================================================= ;; GL_EXT_texture_cube_map ;; ;;============================================================= ;; GL_EXT_coordinate_frame ;; ;;============================================================= ;; GL_EXT_texture_edge_clamp ;; ;;============================================================= ;; GL_EXT_texture_env_add ;; ;;============================================================= ;; GL_EXT_texture_env_combine ;; ;;============================================================= ;; GL_EXT_texture_env_dot3 ;; ;;============================================================= ;; GL_EXT_texture_filter_anisotropic ;; ;;============================================================= ;; GL_EXT_texture_lod_bias ;; ;;============================================================= ;; GL_EXT_texture_object ;; ;;============================================================= ;; GL_EXT_texture_perturb_normal ;; ;;============================================================= ;; GL_EXT_texture3D ;; ;;============================================================= ;; GL_EXT_texture_rectangle ;; ;;============================================================= ;; GL_EXT_vertex_array ;; ;;============================================================= ;; GL_EXT_vertex_weighting ;; ;;============================================================= ;; GL_NV_blend_square ;; ;;============================================================= ;; GL_NV_copy_depth_to_color ;; ;;============================================================= ;; GL_NV_depth_clamp ;; ;;============================================================= ;; GL_NV_element_array ;; ;;============================================================= ;; GL_NV_fence ;; ;;============================================================= ;; GL_NV_float_buffer ;; ;;============================================================= ;; GL_NV_fog_distance ;; ;;============================================================= ;; GL_NV_fragment_program ;; ;;============================================================= ;; GL_NV_fragment_program2 ;; ;;============================================================= ;; GL_NV_half_float ;; ;;============================================================= ;; GL_NV_light_max_exponent ;; ;;============================================================= ;; GL_NV_multisample_filter_hint ;; ;;============================================================= ;; GL_NV_occlusion_query ;; ;;============================================================= ;; GL_NV_packed_depth_stencil ;; ;;============================================================= ;; GL_NV_pixel_buffer_object ;; ;;============================================================= ;; GL_NV_pixel_data_range ;; ;;============================================================= ;; GL_NV_point_sprite ;; ;;============================================================= ;; GL_NV_primitive_restart ;; ;;============================================================= ;; GL_NV_register_combiners ;; ;;============================================================= ;; GL_NV_register_combiners2 ;; ;;============================================================= ;; GL_NV_stencil_two_side ;; ;;============================================================= ;; GL_NV_texgen_emboss ;; ;;============================================================= ;; GL_NV_texgen_reflection ;; ;;============================================================= ;; GL_NV_texture_compression_vtc ;; ;;============================================================= ;; GL_NV_texture_env_combine4 ;; ;;============================================================= ;; GL_NV_texture_expand_normal ;; ;;============================================================= ;; GL_NV_texture_rectangle ;; ;;============================================================= ;; GL_NV_texture_shader ;; ;;============================================================= ;; GL_NV_texture_shader2 ;; ;;============================================================= ;; GL_NV_texture_shader3 ;; ;;============================================================= ;; GL_NV_vertex_array_range ;; ;;============================================================= ;; GL_NV_vertex_array_range2 ;; ;;============================================================= ;; GL_NV_vertex_program ;; ;;============================================================= ;; GL_NV_vertex_program1_1 ;; ;;============================================================= ;; GL_NV_vertex_program2 ;; ;;============================================================= ;; GL_NV_vertex_program2_option ;; ;;============================================================= ;; GL_NV_vertex_program3 ;; ;;============================================================= ;; GL_EXT_framebuffer_object ;; (define-cproc gl-is-renderbuffer-ext (renderbuffer::<uint>) (body <boolean> "ENSURE(glIsRenderbufferEXT);" "SCM_RESULT = glIsRenderbufferEXT(renderbuffer);")) (define-cproc gl-bind-renderbuffer-ext (target::<int> renderbuffer::<uint>) (body <void> "ENSURE(glBindRenderbufferEXT);" "glBindRenderbufferEXT(target, renderbuffer);")) (define-cproc gl-gen-renderbuffers-ext (size::<int>) (body "ScmObj vec;" "ENSURE(glGenRenderbuffersEXT);" "if (size <= 0) Scm_Error(\"size must be a positive integer, but got %d\", size);" "vec = Scm_MakeU32Vector(size, 0);" "glGenRenderbuffersEXT(size, (GLuint*)SCM_U32VECTOR_ELEMENTS(vec));" "SCM_RESULT = vec;")) (define-cproc gl-renderbuffer-storage-ext (target::<int> internalformat::<int> width::<uint> height::<uint>) (body <void> "ENSURE(glRenderbufferStorageEXT);" "glRenderbufferStorageEXT(target, internalformat, width, height);")) (define-cproc gl-get-renderbuffer-parameter-ext (target::<int> pname::<int>) (body "GLint val;" "ENSURE(glGetRenderbufferParameterivEXT);" "switch (pname) {" "case GL_RENDERBUFFER_WIDTH_EXT:" "case GL_RENDERBUFFER_HEIGHT_EXT:" "case GL_RENDERBUFFER_INTERNAL_FORMAT_EXT:" "case GL_RENDERBUFFER_RED_SIZE_EXT:" "case GL_RENDERBUFFER_GREEN_SIZE_EXT:" "case GL_RENDERBUFFER_BLUE_SIZE_EXT:" "case GL_RENDERBUFFER_ALPHA_SIZE_EXT:" "case GL_RENDERBUFFER_DEPTH_SIZE_EXT:" "case GL_RENDERBUFFER_STENCIL_SIZE_EXT:" " glGetRenderbufferParameterivEXT(target, pname, &val);" " SCM_RESULT = Scm_MakeInteger(val);" " break;" "default:" " Scm_Error(\"unsupported pname for gl-get-renderbuffer-parameter-ext: %S\", pname);" " SCM_RESULT = SCM_UNDEFINED;" "}")) (define-cproc gl-bind-framebuffer-ext (target::<int> framebuffer::<uint>) (body <void> "ENSURE(glBindFramebufferEXT);" "glBindFramebufferEXT(target, framebuffer);")) (define-cproc gl-delete-framebuffers-ext (fbs::<u32vector>) (body <void> "ENSURE(glDeleteFramebuffersEXT);" "glDeleteFramebuffersEXT(SCM_U32VECTOR_SIZE(fbs)," " (GLuint*)SCM_U32VECTOR_ELEMENTS(fbs));")) (define-cproc gl-gen-framebuffers-ext (size::<int>) (body "ScmObj vec;" "ENSURE(glGenFramebuffersEXT);" "if (size <= 0) Scm_Error(\"size must be a positive integer, but got %d\", size);" "vec = Scm_MakeU32Vector(size, 0);" "glGenFramebuffersEXT(size, (GLuint*)SCM_U32VECTOR_ELEMENTS(vec));" "SCM_RESULT = vec;")) (define-cproc gl-check-framebuffer-status-ext (target::<int>) (body <int> "ENSURE(glCheckFramebufferStatusEXT);" "SCM_RESULT = glCheckFramebufferStatusEXT(target);")) (define-cproc gl-framebuffer-texture-1d-ext (target::<int> attachment::<int> textarget::<int> texture::<uint> level::<int>) (body <void> "ENSURE(glFramebufferTexture1DEXT);" "glFramebufferTexture1DEXT(target, attachment, textarget, texture, level);")) (define-cproc gl-framebuffer-texture-2d-ext (target::<int> attachment::<int> textarget::<int> texture::<uint> level::<int>) (body <void> "ENSURE(glFramebufferTexture2DEXT);" "glFramebufferTexture2DEXT(target, attachment, textarget, texture, level);")) (define-cproc gl-framebuffer-texture-3d-ext (target::<int> attachment::<int> textarget::<int> texture::<uint> level::<int> zoffset::<int>) (body <void> "ENSURE(glFramebufferTexture3DEXT);" "glFramebufferTexture3DEXT(target, attachment, textarget, texture, level, zoffset);")) (define-cproc gl-framebuffer-renderbuffer-ext (target::<int> attachment::<int> renderbuffertarget::<int> renderbuffer::<uint>) (body <void> "ENSURE(glFramebufferRenderbufferEXT);" "glFramebufferRenderbufferEXT(target, attachment, renderbuffertarget, renderbuffer);")) (define-cproc gl-get-framebuffer-attachment-parameter-ext (target::<int> attachment::<int> pname::<int>) (body "GLint val;" "ENSURE(glGetFramebufferAttachmentParameterivEXT);" "switch (pname) {" "case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT:" "case GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT:" "case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT:" "case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT:" "case GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT:" " glGetFramebufferAttachmentParameterivEXT(target, attachment, pname, &val);" " SCM_RESULT = Scm_MakeInteger(val);" " break;" "default:" " Scm_Error(\"unsupported pname for gl-get-renderbuffer-parameter-ext: %S\", pname);" " SCM_RESULT = SCM_UNDEFINED;" "}")) (define-cproc gl-generate-mipmap-ext (target::<int>) (body <void> "ENSURE(glGenerateMipmapEXT);" "glGenerateMipmapEXT(target);")) ;; Local variables: ;; mode: scheme ;; end: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/gauche-gl.c���������������������������������������������������������������������0000644�0000764�0000764�00000033664�11533026402�015152� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * gauche-gl.c - Gauche GL binding * * Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> * * Permission to use, copy, modify, distribute this software and * accompanying documentation for any purpose is hereby granted, * provided that existing copyright notices are retained in all * copies and that this notice is included verbatim in all * distributions. * This software is provided as is, without express or implied * warranty. In no circumstances the author(s) shall be liable * for any damages arising out of the use of this software. * * $Id: gauche-gl.c,v 1.36 2008-06-04 11:50:07 shirok Exp $ */ #include <gauche.h> #include <gauche/class.h> #include <gauche/extend.h> #include "gauche-gl.h" #include "gl-syms.h" /* * GLboolean vector */ static void glboolvec_print(ScmObj obj, ScmPort *port, ScmWriteContext *ctx); static int glboolvec_compare(ScmObj x, ScmObj y, int equalp); static ScmClass *sequenceCPL[] = { SCM_CLASS_STATIC_PTR(Scm_SequenceClass), SCM_CLASS_STATIC_PTR(Scm_CollectionClass), SCM_CLASS_STATIC_PTR(Scm_TopClass), NULL }; SCM_DEFINE_BUILTIN_CLASS(Scm_GLBooleanVectorClass, glboolvec_print, glboolvec_compare, NULL, NULL, sequenceCPL); static ScmGLBooleanVector *glboolvec_allocate(int size, GLboolean *elts) { ScmGLBooleanVector *v = SCM_NEW(ScmGLBooleanVector); SCM_SET_CLASS(v, SCM_CLASS_GL_BOOLEAN_VECTOR); if (elts == NULL) { elts = SCM_NEW_ATOMIC2(GLboolean*, size*sizeof(GLboolean)); } v->size = size; v->elements = elts; return v; } ScmObj Scm_MakeGLBooleanVector(int size, GLboolean fill) { int i; ScmGLBooleanVector *v = glboolvec_allocate(size, NULL); for (i=0; i<size; i++) { v->elements[i] = fill; } return SCM_OBJ(v); } ScmObj Scm_MakeGLBooleanVectorFromArray(int size, const GLboolean arr[]) { int i; ScmGLBooleanVector *v = glboolvec_allocate(size, NULL); for (i=0; i<size; i++) { v->elements[i] = arr[i]; } return SCM_OBJ(v); } ScmObj Scm_MakeGLBooleanVectorFromArrayShared(int size, GLboolean arr[]) { ScmGLBooleanVector *v = glboolvec_allocate(size, arr); return SCM_OBJ(v); } ScmObj Scm_ListToGLBooleanVector(ScmObj lis) { int len = Scm_Length(lis), i; ScmObj lp; ScmGLBooleanVector *v; if (len < 0) Scm_Error("proper list required, but got %S", lis); v = glboolvec_allocate(len, NULL); i = 0; SCM_FOR_EACH(lp, lis) { v->elements[i++] = SCM_FALSEP(SCM_CAR(lp))? GL_FALSE : GL_TRUE; } return SCM_OBJ(v); } static void glboolvec_print(ScmObj obj, ScmPort *port, ScmWriteContext *ctx) { ScmGLBooleanVector *v = SCM_GL_BOOLEAN_VECTOR(obj); int i, size = v->size; Scm_Printf(port, "#,(gl-boolean-vector"); for (i=0; i<size; i++) { Scm_Printf(port, (v->elements[i]? " #t" : " #f")); } Scm_Printf(port, ")"); } static int glboolvec_compare(ScmObj x, ScmObj y, int equalp) { int i, xsize, ysize; if (!equalp) { Scm_Error("cannot compare <gl-boolean-vector>s: %S, %S", x, y); } xsize = SCM_GL_BOOLEAN_VECTOR(x)->size; ysize = SCM_GL_BOOLEAN_VECTOR(y)->size; if (xsize != ysize) return 1; for (i=0; i<xsize; i++) { if ((!SCM_GL_BOOLEAN_VECTOR(x)->elements[i]) != (!SCM_GL_BOOLEAN_VECTOR(y)->elements[i])) { return 1; } } return 0; } /* Utility functions */ /* Get extention procedure address. The way to get procedure address differs by platforms: wglGetProcAddress() glXGetProcAddress() / glXGetProcAddressARB() This function is to hide the difference. The coverage is incomplete, though. NB: It seems that we'd better to use glXGetProcAddressARB. http://lists.freedesktop.org/archives/xorg/2005-November/011279.html */ void *Scm_GLGetProcAddress(const char *name) { #if defined(GLX_ARB_get_proc_address) if (glXGetProcAddressARB != NULL) { return glXGetProcAddressARB((const GLubyte*)name); } #elif defined(GLX_VERSION_1_4) if (glXGetProcAddress != NULL) { return glXGetProcAddress(name); } #elif defined(MacOSX) return glutGetProcAddress(name); #elif defined(__CYGWIN__) && defined(X_DISPLAY_MISSING) if (wglGetProcAddress != NULL) { return wglGetProcAddress(name); } #endif /* !defined(GLX_VERSION_1_4) && !defined(GLX_ARB_get_proc_address) */ Scm_Error("GL extension %s is not supported on this platform", name); } /* List of numbers -> array of doubles. Returns # of elements. */ int Scm_GLGetDoubles(ScmObj val1, ScmObj list, double *result, int maxresult, int minresult) { int i = 0; ScmObj lp; if (!SCM_UNBOUNDP(val1)) { if (!SCM_NUMBERP(val1)) { Scm_Error("number required, but got %S", val1); } result[0] = Scm_GetDouble(val1); i++; } SCM_FOR_EACH(lp, list) { if (i >= maxresult) { Scm_Error("too many arguments: %S, at most %d allowed", list, maxresult); } if (!SCM_NUMBERP(SCM_CAR(lp))) { Scm_Error("number required, but got %S", SCM_CAR(lp)); } result[i] = Scm_GetDouble(SCM_CAR(lp)); i++; } if (i < minresult) { Scm_Error("too few argument: %S, at least %d required", list, minresult); } return i; } /* returns # of values returned by glGetTYPEv call for given state. -1 if the state can't be queried by glGetTYPEv. */ int Scm_GLStateInfoSize(GLenum state) { switch(state) { #include "gettype-sizes.c" } return -1; } /* given pixel data type GLenum, returns the appropriate data type. */ int Scm_GLPixelDataType(GLenum type, int *packed) { if (packed) *packed = FALSE; /* default */ switch (type) { case GL_BYTE:; return SCM_GL_BYTE; case GL_BITMAP: #if !defined(__CYGWIN__) case GL_UNSIGNED_BYTE_3_3_2:; case GL_UNSIGNED_BYTE_2_3_3_REV:; #endif /*!defined(__CYGWIN__)*/ if (packed) *packed = TRUE; /* FALLTHROUGH */ case GL_UNSIGNED_BYTE:; return SCM_GL_UBYTE; case GL_SHORT:; return SCM_GL_SHORT; #if !defined(__CYGWIN__) case GL_UNSIGNED_SHORT_5_6_5:; case GL_UNSIGNED_SHORT_5_6_5_REV:; case GL_UNSIGNED_SHORT_4_4_4_4:; case GL_UNSIGNED_SHORT_4_4_4_4_REV:; case GL_UNSIGNED_SHORT_5_5_5_1:; case GL_UNSIGNED_SHORT_1_5_5_5_REV:; if (packed) *packed = TRUE; #endif /*!defined(__CYGWIN__)*/ /* FALLTHROUGH */ case GL_UNSIGNED_SHORT:; return SCM_GL_USHORT; case GL_INT:; return SCM_GL_INT; #if !defined(__CYGWIN__) case GL_UNSIGNED_INT_8_8_8_8:; case GL_UNSIGNED_INT_8_8_8_8_REV:; case GL_UNSIGNED_INT_10_10_10_2:; case GL_UNSIGNED_INT_2_10_10_10_REV:; if (packed) *packed = TRUE; #endif /*!defined(__CYGWIN__)*/ /* FALLTHROUGH */ case GL_UNSIGNED_INT:; return SCM_GL_UINT; case GL_FLOAT:; return SCM_GL_FLOAT; default: /* TODO: packedsize types added to GL1.2 */ Scm_Error("unsupported or invalid pixel data type: %d", type); } return 0; /* NOTREACHED */ } /* given pixel format and pixel type, return # of elements used for pixel data. */ /* TODO: need to take into account the pixel store settings! */ int Scm_GLPixelDataSize(GLsizei w, GLsizei h, GLenum format, GLenum type, int *elttype, int *packedp) { int components = 0, packed = FALSE; *elttype = Scm_GLPixelDataType(type, &packed); if (packedp) *packedp = packed; switch (format) { case GL_COLOR_INDEX:; case GL_RED:; case GL_GREEN:; case GL_BLUE:; case GL_ALPHA:; case GL_LUMINANCE:; case GL_STENCIL_INDEX:; case GL_DEPTH_COMPONENT:; components = 1; break; case GL_RGB:; /*case GL_BGR:;*/ components = 3; break; case GL_LUMINANCE_ALPHA:; components = 2; break; case GL_RGBA:; /*case GL_BGRA:;*/ components = 4; break; } if (type == GL_BITMAP) { /* bitmap. each raster line is rounded up to byte boundary. */ return ((components*w+7)/8)*h; } if (packed) { return w*h; } else { return w*h*components; } } /* Given pixel element type and data size (obtained by Scm_GLPixelDataSize), checks the validity of pixel data, and returns a pointer to the data area of the pixel data. */ /* TODO: size is not checked yet */ void *Scm_GLPixelDataCheck(ScmObj pixels, int elttype, int size) { switch (elttype) { case SCM_GL_BYTE: if (!SCM_S8VECTORP(pixels)) { Scm_Error("s8vector required, but got %S", pixels); } return (void*)SCM_S8VECTOR_ELEMENTS(pixels); case SCM_GL_UBYTE: if (!SCM_U8VECTORP(pixels)) { Scm_Error("u8vector required, but got %S", pixels); } return (void*)SCM_U8VECTOR_ELEMENTS(pixels); case SCM_GL_SHORT: if (!SCM_S16VECTORP(pixels)) { Scm_Error("s16vector required, but got %S", pixels); } return (void*)SCM_S16VECTOR_ELEMENTS(pixels); case SCM_GL_USHORT: if (!SCM_U16VECTORP(pixels)) { Scm_Error("u16vector required, but got %S", pixels); } return (void*)SCM_U16VECTOR_ELEMENTS(pixels); case SCM_GL_INT: if (!SCM_S32VECTORP(pixels)) { Scm_Error("s32vector required, but got %S", pixels); } return (void*)SCM_S32VECTOR_ELEMENTS(pixels); case SCM_GL_UINT: if (!SCM_U32VECTORP(pixels)) { Scm_Error("u32vector required, but got %S", pixels); } return (void*)SCM_U32VECTOR_ELEMENTS(pixels); case SCM_GL_FLOAT: if (!SCM_F32VECTORP(pixels)) { Scm_Error("f32vector required, but got %S", pixels); } return (void*)SCM_F32VECTOR_ELEMENTS(pixels); case SCM_GL_FLOAT_OR_INT: if (SCM_F32VECTORP(pixels)) { return (void*)SCM_F32VECTOR_ELEMENTS(pixels); } else if (SCM_S32VECTORP(pixels)) { return (void*)SCM_S32VECTOR_ELEMENTS(pixels); } Scm_Error("f32vector or s32vector required, but got %S", pixels); return NULL; default: Scm_Error("Scm_GLPixelDataCheck: unknown element type: %d", elttype); return NULL; } } /* Allocates a uvector of SIZE. The type of uvector is specified by ELTTYPE (SCM_GL_BYTE, SCM_GL_UBYTE, etc.) Useful for generic handling of getting image data. May return SCM_FALSE if the type is ambiguous. */ ScmObj Scm_GLAllocUVector(int elttype, int size) { switch (elttype) { case SCM_GL_BYTE: return Scm_MakeS8Vector(size, 0); case SCM_GL_UBYTE: return Scm_MakeU8Vector(size, 0); case SCM_GL_SHORT: return Scm_MakeS16Vector(size, 0); case SCM_GL_USHORT: return Scm_MakeU16Vector(size, 0); case SCM_GL_INT: return Scm_MakeS32Vector(size, 0); case SCM_GL_UINT: return Scm_MakeU32Vector(size, 0); case SCM_GL_FLOAT: return Scm_MakeF32Vector(size, 0); case SCM_GL_DOUBLE: return Scm_MakeF64Vector(size, 0); default: return SCM_FALSE; } } /* GLU objects */ /* Quadric */ static void quadric_finalize(ScmObj obj, void *data) { gluDeleteQuadric(SCM_GLU_QUADRIC(obj)->quadric); } static ScmObj quadric_allocate(ScmClass *klass, ScmObj initargs) { ScmGluQuadric *q = SCM_NEW(ScmGluQuadric); SCM_SET_CLASS(q, SCM_CLASS_GLU_QUADRIC); if ((q->quadric = gluNewQuadric()) == NULL) { Scm_Error("gluNewQuadric failed"); } Scm_RegisterFinalizer(SCM_OBJ(q), quadric_finalize, NULL); return SCM_OBJ(q); } SCM_DEFINE_BUILTIN_CLASS(Scm_GluQuadricClass, NULL, NULL, NULL, quadric_allocate, NULL); /* Nurbs */ static void nurbs_finalize(ScmObj obj, void *data) { gluDeleteNurbsRenderer(SCM_GLU_NURBS(obj)->nurbs); } static ScmObj nurbs_allocate(ScmClass *klass, ScmObj initargs) { ScmGluNurbs *n = SCM_NEW(ScmGluNurbs); SCM_SET_CLASS(n, SCM_CLASS_GLU_NURBS); if ((n->nurbs = gluNewNurbsRenderer()) == NULL) { Scm_Error("gluNewNurbsRenderer failed"); } Scm_RegisterFinalizer(SCM_OBJ(n), nurbs_finalize, NULL); return SCM_OBJ(n); } SCM_DEFINE_BUILTIN_CLASS(Scm_GluNurbsClass, NULL, NULL, NULL, nurbs_allocate, NULL); /* Tesselator */ static void tesselator_finalize(ScmObj obj, void* data) { gluDeleteTess(SCM_GLU_TESSELATOR(obj)->tesselator); } static ScmObj tesselator_allocate(ScmClass *klass, ScmObj initargs) { ScmGluTesselator *q = SCM_NEW(ScmGluTesselator); SCM_SET_CLASS(q, SCM_CLASS_GLU_TESSELATOR); if ((q->tesselator = gluNewTess()) == NULL) { Scm_Error("gluNewTess failed"); } Scm_RegisterFinalizer(SCM_OBJ(q), tesselator_finalize, NULL); return SCM_OBJ(q); } SCM_DEFINE_BUILTIN_CLASS(Scm_GluTesselatorClass, NULL, NULL, NULL, tesselator_allocate, NULL); /* Initialization */ extern void Scm_Init_gl_lib(ScmModule *mod); extern void Scm_Init_gl_syms(ScmModule *mod); extern void Scm_Init_glext_lib(ScmModule *mod); extern void Scm_Init_glu_lib(ScmModule *mod); void Scm_Init_libgauche_gl(void) { ScmModule *mod; SCM_INIT_EXTENSION(libgauche_gl); mod = SCM_MODULE(SCM_FIND_MODULE("gl", TRUE)); Scm_InitStaticClassWithMeta(&Scm_GLBooleanVectorClass, "<gl-boolean-vector>", mod, NULL, SCM_NIL, NULL, 0); Scm_InitStaticClass(&Scm_GluQuadricClass, "<glu-quadric>", mod, NULL, 0); Scm_InitStaticClass(&Scm_GluNurbsClass, "<glu-nurbs>", mod, NULL, 0); Scm_InitStaticClass(&Scm_GluTesselatorClass, "<glu-tesselator>", mod, NULL, 0); Scm_Init_gl_lib(mod); Scm_Init_gl_syms(mod); Scm_Init_glext_lib(mod); Scm_Init_glu_lib(mod); } ����������������������������������������������������������������������������Gauche-gl-0.5.1/src/gauche-gl.h���������������������������������������������������������������������0000644�0000764�0000764�00000010363�11533026402�015146� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * gauche-gl.h - Gauche GL extension * * Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> * * Permission to use, copy, modify, distribute this software and * accompanying documentation for any purpose is hereby granted, * provided that existing copyright notices are retained in all * copies and that this notice is included verbatim in all * distributions. * This software is provided as is, without express or implied * warranty. In no circumstances the author(s) shall be liable * for any damages arising out of the use of this software. * * $Id: gauche-gl.h,v 1.20 2008-06-04 11:50:11 shirok Exp $ */ #ifndef GAUCHE_GL_H #define GAUCHE_GL_H #if MacOSX #include <OpenGL/gl.h> #include <OpenGL/glu.h> #include <GLUT/glut.h> /* for glutGetProcAddress. */ #else #include <GL/gl.h> #include <GL/glu.h> #endif #ifdef HAVE_GL_GLX_H #define GLX_GLXEXT_PROTOTYPES #include <GL/glx.h> #endif #if defined(__CYGWIN__) && defined(X_DISPLAY_MISSING) #include <windows.h> /* for wglGetProcAddress */ #endif #include <gauche/uvector.h> #include "gauche/math3d.h" /* * GL auxiliary routines */ /* get extension function pointer */ void *Scm_GLGetProcAddress(const char *name); /* acceptable data type */ enum { SCM_GL_BYTE, SCM_GL_UBYTE, SCM_GL_SHORT, SCM_GL_USHORT, SCM_GL_INT, SCM_GL_UINT, SCM_GL_FLOAT, SCM_GL_FLOAT_OR_INT, SCM_GL_DOUBLE }; extern int Scm_GLGetDoubles(ScmObj val1, ScmObj list, double *result, int maxresult, int minresult); extern int Scm_GLStateInfoSize(GLenum state); extern int Scm_GLPixelDataType(GLenum type, int *packed); extern int Scm_GLPixelDataSize(GLsizei w, GLsizei h, GLenum format, GLenum type, int *elttype, int *packed); extern void *Scm_GLPixelDataCheck(ScmObj pixels, int elttype, int size); extern ScmObj Scm_GLAllocUVector(int type, int size); /* GLBoolean vector */ typedef struct ScmGLBooleanVectorRec { SCM_HEADER; int size; GLboolean *elements; } ScmGLBooleanVector; SCM_CLASS_DECL(Scm_GLBooleanVectorClass); #define SCM_CLASS_GL_BOOLEAN_VECTOR (&Scm_GLBooleanVectorClass) #define SCM_GL_BOOLEAN_VECTOR(obj) ((ScmGLBooleanVector*)(obj)) #define SCM_GL_BOOLEAN_VECTOR_P(obj) SCM_XTYPEP(obj, SCM_CLASS_GL_BOOLEAN_VECTOR) #define SCM_GL_BOOLEAN_VECTOR_SIZE(obj) (SCM_GL_BOOLEAN_VECTOR(obj)->size) #define SCM_GL_BOOLEAN_VECTOR_ELEMENTS(obj) (SCM_GL_BOOLEAN_VECTOR(obj)->elements) extern ScmObj Scm_MakeGLBooleanVector(int size, GLboolean fill); extern ScmObj Scm_MakeGLBooleanVectorFromArray(int size, const GLboolean arr[]); extern ScmObj Scm_MakeGLBooleanVectorFromArrayShared(int size, GLboolean arr[]); extern ScmObj Scm_ListToGLBooleanVector(ScmObj lis); extern ScmObj Scm_GLBooleanVectorToUVector(ScmObj klass, ScmGLBooleanVector *src); extern ScmObj Scm_UVectorToGLBooleanVector(ScmObj src); /* GLU objects */ /* Quadrics */ typedef struct ScmGluQuadricRec { SCM_HEADER; GLUquadricObj* quadric; } ScmGluQuadric; SCM_CLASS_DECL(Scm_GluQuadricClass); #define SCM_CLASS_GLU_QUADRIC (&Scm_GluQuadricClass) #define SCM_GLU_QUADRIC(obj) ((ScmGluQuadric*)(obj)) #define SCM_GLU_QUADRIC_P(obj) SCM_XTYPEP(obj, SCM_CLASS_GLU_QUADRIC) /* Nurbs */ typedef struct ScmGluNurbsRec { SCM_HEADER; GLUnurbsObj* nurbs; } ScmGluNurbs; SCM_CLASS_DECL(Scm_GluNurbsClass); #define SCM_CLASS_GLU_NURBS (&Scm_GluNurbsClass) #define SCM_GLU_NURBS(obj) ((ScmGluNurbs*)(obj)) #define SCM_GLU_NURBS_P(obj) SCM_XTYPEP(obj, SCM_CLASS_GLU_NURBS) extern ScmObj Scm_GLUMakeNurbs(GLUnurbsObj*); /* Tessalator */ /* GLU 1.0 and 1.1 interface */ typedef struct ScmGluTesselatorRec { SCM_HEADER; GLUtriangulatorObj* tesselator; } ScmGluTesselator; SCM_CLASS_DECL(Scm_GluTesselatorClass); #define SCM_CLASS_GLU_TESSELATOR (&Scm_GluTesselatorClass) #define SCM_GLU_TESSELATOR(obj) ((ScmGluTesselator*)(obj)) #define SCM_GLU_TESSELATOR_P(obj) SCM_XTYPEP(obj, SCM_CLASS_GLU_TESSELATOR) extern ScmObj Scm_GLUMakeTesselator(GLUtriangulatorObj*); /* GLU 1.2 and later uses GLUtesselator. (not yet implemented */ #endif /* GAUCHE_GL_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/glut-lib.stub�������������������������������������������������������������������0000644�0000764�0000764�00000052717�11533026402�015570� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; glut-lib.stub - glue functions for GLUT ;;; ;;; Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: glut-lib.stub,v 1.13 2008-06-04 11:51:05 shirok Exp $ ;;; " #if MacOSX #include <OpenGL/gl.h> #include <OpenGL/glu.h> #include <GLUT/glut.h> #else #include <GL/gl.h> #include <GL/glu.h> #ifdef HAVE_GL_GLX_H #include <GL/glx.h> #endif #include <GL/glut.h> #endif #include \"gauche-glut.h\" " ;;======================================================== ;; Window manipulation ;; ;; glut-init ;; Takes list of args instead of C-style argc/argv, and returns ;; (possibly modified) args. (define-cproc glut-init (args) (body <top> (let* ((argc :: int (Scm_Length args)) (argv :: char**)) (when (< argc 0) (SCM_TYPE_ERROR args "list")) (set! argv (Scm_ListToCStringArray args TRUE NULL)) (glutInit (& argc) argv) (result (Scm_CStringArrayToList (cast |const char**| argv) argc 0))))) (define-cproc glut-init-display-mode (mode::<fixnum>) (call <void> "glutInitDisplayMode")) (define-cproc glut-init-display-string (string::<string>) " #if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) glutInitDisplayString(Scm_GetStringConst(string)); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-init-window-size (width::<int> height::<int>) (call <void> "glutInitWindowSize")) (define-cproc glut-init-window-position (x::<int> y::<int>) (call <void> "glutInitWindowPosition")) (define-cproc glut-main-loop () (call <void> "glutMainLoop")) (define-cproc glut-create-window (name::<const-cstring>) (call <int> "glutCreateWindow")) (define-cproc glut-create-sub-window (win::<int> x::<int> y::<int> width::<int> height::<int>) (call <int> "glutCreateSubWindow")) (define-cproc glut-destroy-window (win::<int>) (call <void> "glutDestroyWindow")) (define-cproc glut-post-redisplay () (call <void> "glutPostRedisplay")) (define-cproc glut-post-window-redisplay (win::<int>) "#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) glutPostWindowRedisplay(win); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-swap-buffers () (call <void> "glutSwapBuffers")) (define-cproc glut-get-window () (call <int> "glutGetWindow")) (define-cproc glut-set-window (win::<int>) (call <void> "glutSetWindow")) (define-cproc glut-set-window-title (title::<const-cstring>) (call <void> "glutSetWindowTitle")) (define-cproc glut-set-icon-title (title::<const-cstring>) (call <void> "glutSetIconTitle")) (define-cproc glut-position-window (x::<int> y::<int>) (call <void> "glutPositionWindow")) (define-cproc glut-reshape-window (width::<int> height::<int>) (call <void> "glutReshapeWindow")) (define-cproc glut-push-window () (call <void> "glutPushWindow")) (define-cproc glut-pop-window () (call <void> "glutPopWindow")) (define-cproc glut-iconify-window () (call <void> "glutIconifyWindow")) (define-cproc glut-show-window () (call <void> "glutShowWindow")) (define-cproc glut-hide-window () (call <void> "glutHideWindow")) (define-cproc glut-full-screen () "#if (GLUT_API_VERSION >= 3) glutFullScreen(); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-set-cursor (cursor::<int>) "#if (GLUT_API_VERSION >= 3) glutSetCursor(cursor); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-warp-pointer (x::<int> y::<int>) "#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) glutWarpPointer(x, y); #endif SCM_RETURN(SCM_UNDEFINED);") ;;======================================================== ;; Overlay APIs ;; (define-cproc glut-establish-overlay () "#if (GLUT_API_VERSION >= 3) glutEstablishOverlay(); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-remove-overlay () "#if (GLUT_API_VERSION >= 3) glutRemoveOverlay(); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-use-layer (layer::<fixnum>) "#if (GLUT_API_VERSION >= 3) glutUseLayer(layer); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-post-overlay-redisplay () "#if (GLUT_API_VERSION >= 3) glutPostOverlayRedisplay(); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-post-window-overlay-redisplay (win::<int>) "#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 11) glutPostWindowOverlayRedisplay(win); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-show-overlay () "#if (GLUT_API_VERSION >= 3) glutShowOverlay(); #endif SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-hide-overlay () "#if (GLUT_API_VERSION >= 3) glutHideOverlay(); #endif SCM_RETURN(SCM_UNDEFINED);") ;;======================================================== ;; Menu APIs ;; ;; Glut menu API doesn't passes the callback function which menu ;; it is invoked. We need to keep an assoc list of menu id and ;; callback fn. "static ScmObj menu_fn_assoc = SCM_NIL; static void menu_callback(int item) { int menu = glutGetMenu(); ScmObj p = Scm_Assoc(SCM_MAKE_INT(menu), menu_fn_assoc, SCM_CMP_EQV); if (SCM_PAIRP(p) && SCM_PROCEDUREP(SCM_CDR(p))) { Scm_ApplyRec(SCM_CDR(p), SCM_LIST1(SCM_MAKE_INT(item))); } }" (define-cproc glut-create-menu (callback::<procedure>) " int menu = glutCreateMenu(menu_callback); if (menu >= 0) { menu_fn_assoc = Scm_Acons(SCM_MAKE_INT(menu), SCM_OBJ(callback), menu_fn_assoc); SCM_RETURN(SCM_MAKE_INT(menu)); } else { SCM_RETURN(SCM_FALSE); }") (define-cproc glut-destroy-menu (menu::<fixnum>) " menu_fn_assoc = Scm_AssocDelete(SCM_MAKE_INT(menu), menu_fn_assoc, SCM_CMP_EQV); glutDestroyMenu(menu); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-get-menu () "SCM_RETURN(Scm_MakeInteger(glutGetMenu()));") (define-cproc glut-set-menu (menu::<fixnum>) "glutSetMenu(menu); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-add-menu-entry (label::<string> value::<int>) "glutAddMenuEntry(Scm_GetStringConst(label), value); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-add-sub-menu (label::<string> submenu::<int>) "glutAddSubMenu(Scm_GetStringConst(label), submenu); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-change-to-menu-entry (item::<int> label::<string> value::<int>) "glutChangeToMenuEntry(item, Scm_GetStringConst(label), value); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-change-to-sub-menu (item::<int> label::<string> submenu::<int>) "glutChangeToSubMenu(item, Scm_GetStringConst(label), submenu); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-remove-menu-item (item::<int>) "glutRemoveMenuItem(item); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-attach-menu (button::<int>) "glutAttachMenu(button); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-detach-menu (button::<int>) "glutDetachMenu(button); SCM_RETURN(SCM_UNDEFINED);") ;;======================================================== ;; Callbacks ;; ;; Most Glut callbacks are associated to the "current window". ;; Scm_GlutRegisterCallback handles the association. (define-cproc glut-display-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_DISPLAY fn 0 0))) (define-cproc glut-overlay-display-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_OVERLAY_DISPLAY fn 0 0))) (define-cproc glut-reshape-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_RESHAPE fn 0 0))) (define-cproc glut-keyboard-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_KEYBOARD fn 0 0))) (define-cproc glut-keyboard-up-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_KEYBOARD_UP fn 0 0))) (define-cproc glut-mouse-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_MOUSE fn 0 0))) (define-cproc glut-motion-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_MOTION fn 0 0))) (define-cproc glut-passive-motion-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_PASSIVE_MOTION fn 0 0))) (define-cproc glut-visibility-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_VISIBILITY fn 0 0))) (define-cproc glut-entry-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_ENTRY fn 0 0))) (define-cproc glut-special-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_SPECIAL fn 0 0))) (define-cproc glut-special-up-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_SPECIAL_UP fn 0 0))) (define-cproc glut-spaceball-motion-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_SPACEBALL_MOTION fn 0 0))) (define-cproc glut-spaceball-rotate-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_SPACEBALL_ROTATE fn 0 0))) (define-cproc glut-spaceball-button-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_SPACEBALL_BUTTON fn 0 0))) (define-cproc glut-button-box-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_BUTTON_BOX fn 0 0))) (define-cproc glut-dials (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_DIALS fn 0 0))) (define-cproc glut-tablet-motion-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_TABLET_MOTION fn 0 0))) (define-cproc glut-tablet-button-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_TABLET_BUTTON fn 0 0))) (define-cproc glut-menu-status (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_MENU_STATUS fn 0 0))) (define-cproc glut-window-status (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_WINDOW_STATUS fn 0 0))) (define-cproc glut-joystick-func (fn interval::<int>) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_JOYSTICK fn interval 0))) (define-cproc glut-idle-func (fn) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_IDLE fn 0 0))) (define-cproc glut-timer-func (millis::<int> fn value::<int>) (body <void> (Scm_GlutRegisterCallback SCM_GLUT_CB_TIMER fn millis value))) ;;======================================================== ;; Colormap ;; (define-cproc glut-set-color (index::<int> r::<float> g::<float> b::<float>) (call <void> "glutSetColor")) (define-cproc glut-get-color (index::<int> component::<fixnum>) "SCM_RETURN(Scm_MakeFlonum((double)glutGetColor(index, component)));") (define-cproc glut-copy-colormap (win::<int>) (call <void> "glutCopyColormap")) ;;======================================================== ;; state retrieval ;; (define-cproc glut-get (type::<int>) (call <int> "glutGet")) (define-cproc glut-device-get (type::<int>) (call <int> "glutDeviceGet")) (define-cproc glut-extension-supported (name::<string>) "#if (GLUT_API_VERSION >= 2) SCM_RETURN(SCM_MAKE_BOOL(glutExtensionSupported(Scm_GetStringConst(name)))); #else SCM_RETURN(SCM_FALSE); #endif") (define-cproc glut-get-modifiers () "#if (GLUT_API_VERSION >= 3) SCM_RETURN(Scm_MakeInteger(glutGetModifiers())); #else SCM_RETURN(SCM_MAKE_INT(0)); #endif") (define-cproc glut-layer-get (type::<int>) "#if (GLUT_API_VERSION >= 3) SCM_RETURN(Scm_MakeInteger(glutLayerGet(type))); #else SCM_RETURN(SCM_MAKE_INT(0)); #endif") ;;======================================================== ;; Font ;; (define-type <glut-font> "ScmGlutFont*" #f "SCM_GLUT_FONT_P" "SCM_GLUT_FONT") (define-cproc glut-bitmap-character (font::<glut-font> character::<int>) "glutBitmapCharacter(font->font, character); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-bitmap-width (font::<glut-font> character::<int>) "SCM_RETURN(Scm_MakeInteger(glutBitmapWidth(font->font, character)));") (define-cproc glut-stroke-character (font::<glut-font> character::<int>) "glutStrokeCharacter(font->font, character); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glut-stroke-width (font::<glut-font> character::<int>) "SCM_RETURN(Scm_MakeInteger(glutStrokeWidth(font->font, character)));") (define-cproc glut-bitmap-length (font::<glut-font> string::<string>) "#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) SCM_RETURN(Scm_MakeInteger(glutBitmapLength(font->font, (const unsigned char*)Scm_GetStringConst(string)))); #else SCM_RETURN(SCM_MAKE_INT(0)); #endif") (define-cproc glut-stroke-length (font::<glut-font> string::<string>) "#if (GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9) SCM_RETURN(Scm_MakeInteger(glutStrokeLength(font->font, (const unsigned char*)Scm_GetStringConst(string)))); #else SCM_RETURN(SCM_MAKE_INT(0)); #endif") ;;======================================================== ;; pre-built models ;; (define-cproc glut-wire-sphere (radius::<real> slices::<int> stacks::<int>) (call <void> "glutWireSphere")) (define-cproc glut-solid-sphere (radius::<real> slices::<int> stacks::<int>) (call <void> "glutSolidSphere")) (define-cproc glut-wire-cone (radius::<real> height::<real> slices::<int> stacks::<int>) (call <void> "glutWireCone")) (define-cproc glut-solid-cone (radius::<real> height::<real> slices::<int> stacks::<int>) (call <void> "glutSolidCone")) (define-cproc glut-wire-cube (size::<real>) (call <void> "glutWireCube")) (define-cproc glut-solid-cube (size::<real>) (call <void> "glutSolidCube")) (define-cproc glut-wire-torus (inner::<real> outer::<real> sides::<int> rings::<int>) (call <void> "glutWireTorus")) (define-cproc glut-solid-torus (inner::<real> outer::<real> sides::<int> rings::<int>) (call <void> "glutSolidTorus")) (define-cproc glut-wire-dodecahedron () (call <void> "glutWireDodecahedron")) (define-cproc glut-solid-dodecahedron () (call <void> "glutSolidDodecahedron")) (define-cproc glut-wire-teapot (size::<real>) (call <void> "glutWireTeapot")) (define-cproc glut-solid-teapot (size::<real>) (call <void> "glutSolidTeapot")) (define-cproc glut-wire-octahedron () (call <void> "glutWireOctahedron")) (define-cproc glut-solid-octahedron () (call <void> "glutSolidOctahedron")) (define-cproc glut-wire-tetrahedron () (call <void> "glutWireTetrahedron")) (define-cproc glut-solid-tetrahedron () (call <void> "glutSolidTetrahedron")) (define-cproc glut-wire-icosahedron () (call <void> "glutWireIcosahedron")) (define-cproc glut-solid-icosahedron () (call <void> "glutSolidIcosahedron")) ;;======================================================== ;; Video resize ;; ;;======================================================== ;; Debug ;; ;;======================================================== ;; Device control ;; ;;======================================================== ;; Constants ;; ;; Display mode bit masks (define-enum GLUT_RGB) (define-enum GLUT_RGBA) (define-enum GLUT_INDEX) (define-enum GLUT_SINGLE) (define-enum GLUT_DOUBLE) (define-enum GLUT_ACCUM) (define-enum GLUT_ALPHA) (define-enum GLUT_DEPTH) (define-enum GLUT_STENCIL) (if "(GLUT_API_VERSION >= 2)" (begin (define-enum GLUT_MULTISAMPLE) (define-enum GLUT_STEREO) )) (if "(GLUT_API_VERSION >= 3)" (define-enum GLUT_LUMINANCE)) ;; Mouse (define-enum GLUT_LEFT_BUTTON) (define-enum GLUT_MIDDLE_BUTTON) (define-enum GLUT_RIGHT_BUTTON) (define-enum GLUT_DOWN) (define-enum GLUT_UP) ;; Function Keys (if "(GLUT_API_VERSION >= 2)" (begin (define-enum GLUT_KEY_F1) (define-enum GLUT_KEY_F2) (define-enum GLUT_KEY_F3) (define-enum GLUT_KEY_F4) (define-enum GLUT_KEY_F5) (define-enum GLUT_KEY_F6) (define-enum GLUT_KEY_F7) (define-enum GLUT_KEY_F8) (define-enum GLUT_KEY_F9) (define-enum GLUT_KEY_F10) (define-enum GLUT_KEY_F11) (define-enum GLUT_KEY_F12) (define-enum GLUT_KEY_LEFT) (define-enum GLUT_KEY_UP) (define-enum GLUT_KEY_RIGHT) (define-enum GLUT_KEY_DOWN) (define-enum GLUT_KEY_PAGE_UP) (define-enum GLUT_KEY_PAGE_DOWN) (define-enum GLUT_KEY_HOME) (define-enum GLUT_KEY_END) (define-enum GLUT_KEY_INSERT) )) ;; Entry/exit state. (define-enum GLUT_LEFT) (define-enum GLUT_ENTERED) ;; Menu usage state. (define-enum GLUT_MENU_NOT_IN_USE) (define-enum GLUT_MENU_IN_USE) ;; Visibility state. (define-enum GLUT_NOT_VISIBLE) (define-enum GLUT_VISIBLE) ;; Window status state. (define-enum GLUT_HIDDEN) (define-enum GLUT_FULLY_RETAINED) (define-enum GLUT_PARTIALLY_RETAINED) (define-enum GLUT_FULLY_COVERED) ;; Color index component selection values (define-enum GLUT_RED) (define-enum GLUT_GREEN) (define-enum GLUT_BLUE) ;; Layers for use (define-enum GLUT_NORMAL) (define-enum GLUT_OVERLAY) ;; glutGet parameters (define-enum GLUT_WINDOW_X) (define-enum GLUT_WINDOW_Y) (define-enum GLUT_WINDOW_WIDTH) (define-enum GLUT_WINDOW_HEIGHT) (define-enum GLUT_WINDOW_BUFFER_SIZE) (define-enum GLUT_WINDOW_STENCIL_SIZE) (define-enum GLUT_WINDOW_DEPTH_SIZE) (define-enum GLUT_WINDOW_RED_SIZE) (define-enum GLUT_WINDOW_GREEN_SIZE) (define-enum GLUT_WINDOW_BLUE_SIZE) (define-enum GLUT_WINDOW_ALPHA_SIZE) (define-enum GLUT_WINDOW_ACCUM_RED_SIZE) (define-enum GLUT_WINDOW_ACCUM_GREEN_SIZE) (define-enum GLUT_WINDOW_ACCUM_BLUE_SIZE) (define-enum GLUT_WINDOW_ACCUM_ALPHA_SIZE) (define-enum GLUT_WINDOW_DOUBLEBUFFER) (define-enum GLUT_WINDOW_RGBA) (define-enum GLUT_WINDOW_PARENT) (define-enum GLUT_WINDOW_NUM_CHILDREN) (define-enum GLUT_WINDOW_COLORMAP_SIZE) (if "(GLUT_API_VERSION >= 2)" (begin (define-enum GLUT_WINDOW_NUM_SAMPLES) (define-enum GLUT_WINDOW_STEREO) )) (if "(GLUT_API_VERSION >= 3)" (begin (define-enum GLUT_WINDOW_CURSOR) )) (define-enum GLUT_SCREEN_WIDTH) (define-enum GLUT_SCREEN_HEIGHT) (define-enum GLUT_SCREEN_WIDTH_MM) (define-enum GLUT_SCREEN_HEIGHT_MM) (define-enum GLUT_MENU_NUM_ITEMS) (define-enum GLUT_DISPLAY_MODE_POSSIBLE) (define-enum GLUT_INIT_WINDOW_X) (define-enum GLUT_INIT_WINDOW_Y) (define-enum GLUT_INIT_WINDOW_WIDTH) (define-enum GLUT_INIT_WINDOW_HEIGHT) (define-enum GLUT_INIT_DISPLAY_MODE) (if "(GLUT_API_VERSION >= 2)" (define-enum GLUT_ELAPSED_TIME) ) (if "(GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)" (define-enum GLUT_WINDOW_FORMAT_ID) ) ;; glutDeviceGet parameters (if "(GLUT_API_VERSION >= 2)" (begin (define-enum GLUT_HAS_KEYBOARD) (define-enum GLUT_HAS_MOUSE) (define-enum GLUT_HAS_SPACEBALL) (define-enum GLUT_HAS_DIAL_AND_BUTTON_BOX) (define-enum GLUT_HAS_TABLET) (define-enum GLUT_NUM_MOUSE_BUTTONS) (define-enum GLUT_NUM_SPACEBALL_BUTTONS) (define-enum GLUT_NUM_BUTTON_BOX_BUTTONS) (define-enum GLUT_NUM_DIALS) (define-enum GLUT_NUM_TABLET_BUTTONS) )) (if "(GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13)" (begin (define-enum GLUT_DEVICE_IGNORE_KEY_REPEAT) (define-enum GLUT_DEVICE_KEY_REPEAT) (define-enum GLUT_HAS_JOYSTICK) (define-enum GLUT_OWNS_JOYSTICK) (define-enum GLUT_JOYSTICK_BUTTONS) (define-enum GLUT_JOYSTICK_AXES) (define-enum GLUT_JOYSTICK_POLL_RATE) )) ;; glutLayerGet parameters. (if "(GLUT_API_VERSION >= 3)" (begin (define-enum GLUT_OVERLAY_POSSIBLE) (define-enum GLUT_LAYER_IN_USE) (define-enum GLUT_HAS_OVERLAY) (define-enum GLUT_TRANSPARENT_INDEX) (define-enum GLUT_NORMAL_DAMAGED) (define-enum GLUT_OVERLAY_DAMAGED) )) ;; glutVideoResizeGet parameters (if "(GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 9)" (begin (define-enum GLUT_VIDEO_RESIZE_POSSIBLE) (define-enum GLUT_VIDEO_RESIZE_IN_USE) (define-enum GLUT_VIDEO_RESIZE_X_DELTA) (define-enum GLUT_VIDEO_RESIZE_Y_DELTA) (define-enum GLUT_VIDEO_RESIZE_WIDTH_DELTA) (define-enum GLUT_VIDEO_RESIZE_HEIGHT_DELTA) (define-enum GLUT_VIDEO_RESIZE_X) (define-enum GLUT_VIDEO_RESIZE_Y) (define-enum GLUT_VIDEO_RESIZE_WIDTH) (define-enum GLUT_VIDEO_RESIZE_HEIGHT) )) ;; glutGetModifiers return mask (if "(GLUT_API_VERSION >= 3)" (begin (define-enum GLUT_ACTIVE_SHIFT) (define-enum GLUT_ACTIVE_CTRL) (define-enum GLUT_ACTIVE_ALT) )) ;; glutSetCursor parameters (if "(GLUT_API_VERSION >= 3)" (begin ;; Basic arrows (define-enum GLUT_CURSOR_RIGHT_ARROW) (define-enum GLUT_CURSOR_LEFT_ARROW) ;; Symbolic cursor shapes (define-enum GLUT_CURSOR_INFO) (define-enum GLUT_CURSOR_DESTROY) (define-enum GLUT_CURSOR_HELP) (define-enum GLUT_CURSOR_CYCLE) (define-enum GLUT_CURSOR_SPRAY) (define-enum GLUT_CURSOR_WAIT) (define-enum GLUT_CURSOR_TEXT) (define-enum GLUT_CURSOR_CROSSHAIR) ;; Directional cursors (define-enum GLUT_CURSOR_UP_DOWN) (define-enum GLUT_CURSOR_LEFT_RIGHT) ;; Sizing cursors (define-enum GLUT_CURSOR_TOP_SIDE) (define-enum GLUT_CURSOR_BOTTOM_SIDE) (define-enum GLUT_CURSOR_LEFT_SIDE) (define-enum GLUT_CURSOR_RIGHT_SIDE) (define-enum GLUT_CURSOR_TOP_LEFT_CORNER) (define-enum GLUT_CURSOR_TOP_RIGHT_CORNER) (define-enum GLUT_CURSOR_BOTTOM_RIGHT_CORNER) (define-enum GLUT_CURSOR_BOTTOM_LEFT_CORNER) ;; Inherit from parent window (define-enum GLUT_CURSOR_INHERIT) ;; Blank cursor (define-enum GLUT_CURSOR_NONE) ;; Fullscreen crosshair (if available) (define-enum GLUT_CURSOR_FULL_CROSSHAIR) )) ;; Local variables: ;; mode: scheme ;; end: �������������������������������������������������Gauche-gl-0.5.1/src/gen-syms.scm��������������������������������������������������������������������0000644�0000764�0000764�00000006012�11615242654�015415� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; gen-syms.scm - Generate gl-syms.[ch] ;;; ;;; Copyright (c) 2005-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: ;;; ;;; 1. Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; 2. Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in the ;;; documentation and/or other materials provided with the distribution. ;;; ;;; 3. Neither the name of the authors nor the names of its contributors ;;; may be used to endorse or promote products derived from this ;;; software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; ;;; $Id: gen-syms.scm,v 1.4 2008-06-04 11:50:40 shirok Exp $ ;;; (use util.match) (use gauche.cgen) (use gauche.parameter) (define *glext-abi* "glext-abi.scm") (cgen-current-unit (make <cgen-unit> :name "gl-syms" :h-file "gl-syms.h" :preamble "/* generated by gen-syms.scm $Revision: 1.4 $. DO NOT EDIT */" :init-prologue "void Scm_Init_gl_syms(void)\n{" )) (define (main args) (cgen-decl "#include <gauche.h>") (cgen-init " ScmModule *m = SCM_MODULE(SCM_FIND_MODULE(\"gl\", TRUE));") (with-input-from-file *glext-abi* (cut port-for-each gen read)) (cgen-emit-h (cgen-current-unit)) (cgen-emit-c (cgen-current-unit)) 0) (define (gen expr) (match expr (('define-extension-name var) (let ((varname-literal (cgen-literal (symbol->string var)))) (cgen-init (format " Scm_Define(m, SCM_SYMBOL(Scm_Intern(SCM_STRING(~a))), SCM_UNDEFINED);" (cgen-cexpr varname-literal))) )) (('define-constant var val) (let ((varname-literal (cgen-literal (symbol->string var))) (val-literal (cgen-literal val))) (cgen-extern (format "#undef ~a" var) (format "#define ~a ~a" var val)) (cgen-init (format " Scm_DefineConst(m, SCM_SYMBOL(Scm_Intern(SCM_STRING(~a))), ~a);" (cgen-cexpr varname-literal) (cgen-cexpr val-literal))))) (else #f))) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/glext-abi.scm�������������������������������������������������������������������0000644�0000764�0000764�00001201642�11533026402�015524� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; This file should reflect the newest OpenGL extension ABI ;; You can regenarate this by feeding glext.h to extract-abi.scm ;; To obtain the newest glext.h, see ;; http://oss.sgi.com/projects/ogl-sample/ABI/ ;; Extensions (define-extension-name GL_VERSION_1_2) (define-extension-name GL_ARB_imaging) (define-extension-name GL_VERSION_1_3) (define-extension-name GL_VERSION_1_4) (define-extension-name GL_VERSION_1_5) (define-extension-name GL_VERSION_2_0) (define-extension-name GL_ARB_multitexture) (define-extension-name GL_ARB_transpose_matrix) (define-extension-name GL_ARB_multisample) (define-extension-name GL_ARB_texture_env_add) (define-extension-name GL_ARB_texture_cube_map) (define-extension-name GL_ARB_texture_compression) (define-extension-name GL_ARB_texture_border_clamp) (define-extension-name GL_ARB_point_parameters) (define-extension-name GL_ARB_vertex_blend) (define-extension-name GL_ARB_matrix_palette) (define-extension-name GL_ARB_texture_env_combine) (define-extension-name GL_ARB_texture_env_crossbar) (define-extension-name GL_ARB_texture_env_dot3) (define-extension-name GL_ARB_texture_mirrored_repeat) (define-extension-name GL_ARB_depth_texture) (define-extension-name GL_ARB_shadow) (define-extension-name GL_ARB_shadow_ambient) (define-extension-name GL_ARB_window_pos) (define-extension-name GL_ARB_vertex_program) (define-extension-name GL_ARB_fragment_program) (define-extension-name GL_ARB_vertex_buffer_object) (define-extension-name GL_ARB_occlusion_query) (define-extension-name GL_ARB_shader_objects) (define-extension-name GL_ARB_vertex_shader) (define-extension-name GL_ARB_fragment_shader) (define-extension-name GL_ARB_shading_language_100) (define-extension-name GL_ARB_texture_non_power_of_two) (define-extension-name GL_ARB_point_sprite) (define-extension-name GL_ARB_fragment_program_shadow) (define-extension-name GL_ARB_draw_buffers) (define-extension-name GL_ARB_texture_rectangle) (define-extension-name GL_ARB_color_buffer_float) (define-extension-name GL_ARB_half_float_pixel) (define-extension-name GL_ARB_texture_float) (define-extension-name GL_ARB_pixel_buffer_object) (define-extension-name GL_EXT_abgr) (define-extension-name GL_EXT_blend_color) (define-extension-name GL_EXT_polygon_offset) (define-extension-name GL_EXT_texture) (define-extension-name GL_EXT_texture3D) (define-extension-name GL_SGIS_texture_filter4) (define-extension-name GL_EXT_subtexture) (define-extension-name GL_EXT_copy_texture) (define-extension-name GL_EXT_histogram) (define-extension-name GL_EXT_convolution) (define-extension-name GL_SGI_color_matrix) (define-extension-name GL_SGI_color_table) (define-extension-name GL_SGIS_pixel_texture) (define-extension-name GL_SGIX_pixel_texture) (define-extension-name GL_SGIS_texture4D) (define-extension-name GL_SGI_texture_color_table) (define-extension-name GL_EXT_cmyka) (define-extension-name GL_EXT_texture_object) (define-extension-name GL_SGIS_detail_texture) (define-extension-name GL_SGIS_sharpen_texture) (define-extension-name GL_EXT_packed_pixels) (define-extension-name GL_SGIS_texture_lod) (define-extension-name GL_SGIS_multisample) (define-extension-name GL_EXT_rescale_normal) (define-extension-name GL_EXT_vertex_array) (define-extension-name GL_EXT_misc_attribute) (define-extension-name GL_SGIS_generate_mipmap) (define-extension-name GL_SGIX_clipmap) (define-extension-name GL_SGIX_shadow) (define-extension-name GL_SGIS_texture_edge_clamp) (define-extension-name GL_SGIS_texture_border_clamp) (define-extension-name GL_EXT_blend_minmax) (define-extension-name GL_EXT_blend_subtract) (define-extension-name GL_EXT_blend_logic_op) (define-extension-name GL_SGIX_interlace) (define-extension-name GL_SGIX_pixel_tiles) (define-extension-name GL_SGIS_texture_select) (define-extension-name GL_SGIX_sprite) (define-extension-name GL_SGIX_texture_multi_buffer) (define-extension-name GL_EXT_point_parameters) (define-extension-name GL_SGIS_point_parameters) (define-extension-name GL_SGIX_instruments) (define-extension-name GL_SGIX_texture_scale_bias) (define-extension-name GL_SGIX_framezoom) (define-extension-name GL_SGIX_tag_sample_buffer) (define-extension-name GL_FfdMaskSGIX) (define-extension-name GL_SGIX_polynomial_ffd) (define-extension-name GL_SGIX_reference_plane) (define-extension-name GL_SGIX_flush_raster) (define-extension-name GL_SGIX_depth_texture) (define-extension-name GL_SGIS_fog_function) (define-extension-name GL_SGIX_fog_offset) (define-extension-name GL_HP_image_transform) (define-extension-name GL_HP_convolution_border_modes) (define-extension-name GL_INGR_palette_buffer) (define-extension-name GL_SGIX_texture_add_env) (define-extension-name GL_EXT_color_subtable) (define-extension-name GL_PGI_vertex_hints) (define-extension-name GL_PGI_misc_hints) (define-extension-name GL_EXT_paletted_texture) (define-extension-name GL_EXT_clip_volume_hint) (define-extension-name GL_SGIX_list_priority) (define-extension-name GL_SGIX_ir_instrument1) (define-extension-name GL_SGIX_calligraphic_fragment) (define-extension-name GL_SGIX_texture_lod_bias) (define-extension-name GL_SGIX_shadow_ambient) (define-extension-name GL_EXT_index_texture) (define-extension-name GL_EXT_index_material) (define-extension-name GL_EXT_index_func) (define-extension-name GL_EXT_index_array_formats) (define-extension-name GL_EXT_compiled_vertex_array) (define-extension-name GL_EXT_cull_vertex) (define-extension-name GL_SGIX_ycrcb) (define-extension-name GL_SGIX_fragment_lighting) (define-extension-name GL_IBM_rasterpos_clip) (define-extension-name GL_HP_texture_lighting) (define-extension-name GL_EXT_draw_range_elements) (define-extension-name GL_WIN_phong_shading) (define-extension-name GL_WIN_specular_fog) (define-extension-name GL_EXT_light_texture) (define-extension-name GL_SGIX_blend_alpha_minmax) (define-extension-name GL_SGIX_impact_pixel_texture) (define-extension-name GL_EXT_bgra) (define-extension-name GL_SGIX_async) (define-extension-name GL_SGIX_async_pixel) (define-extension-name GL_SGIX_async_histogram) (define-extension-name GL_INTEL_texture_scissor) (define-extension-name GL_INTEL_parallel_arrays) (define-extension-name GL_HP_occlusion_test) (define-extension-name GL_EXT_pixel_transform) (define-extension-name GL_EXT_pixel_transform_color_table) (define-extension-name GL_EXT_shared_texture_palette) (define-extension-name GL_EXT_separate_specular_color) (define-extension-name GL_EXT_secondary_color) (define-extension-name GL_EXT_texture_perturb_normal) (define-extension-name GL_EXT_multi_draw_arrays) (define-extension-name GL_EXT_fog_coord) (define-extension-name GL_REND_screen_coordinates) (define-extension-name GL_EXT_coordinate_frame) (define-extension-name GL_EXT_texture_env_combine) (define-extension-name GL_APPLE_specular_vector) (define-extension-name GL_APPLE_transform_hint) (define-extension-name GL_SGIX_fog_scale) (define-extension-name GL_SUNX_constant_data) (define-extension-name GL_SUN_global_alpha) (define-extension-name GL_SUN_triangle_list) (define-extension-name GL_SUN_vertex) (define-extension-name GL_EXT_blend_func_separate) (define-extension-name GL_INGR_color_clamp) (define-extension-name GL_INGR_interlace_read) (define-extension-name GL_EXT_stencil_wrap) (define-extension-name GL_EXT_422_pixels) (define-extension-name GL_NV_texgen_reflection) (define-extension-name GL_EXT_texture_cube_map) (define-extension-name GL_SUN_convolution_border_modes) (define-extension-name GL_EXT_texture_env_add) (define-extension-name GL_EXT_texture_lod_bias) (define-extension-name GL_EXT_texture_filter_anisotropic) (define-extension-name GL_EXT_vertex_weighting) (define-extension-name GL_NV_light_max_exponent) (define-extension-name GL_NV_vertex_array_range) (define-extension-name GL_NV_register_combiners) (define-extension-name GL_NV_fog_distance) (define-extension-name GL_NV_texgen_emboss) (define-extension-name GL_NV_blend_square) (define-extension-name GL_NV_texture_env_combine4) (define-extension-name GL_MESA_resize_buffers) (define-extension-name GL_MESA_window_pos) (define-extension-name GL_EXT_texture_compression_s3tc) (define-extension-name GL_IBM_cull_vertex) (define-extension-name GL_IBM_multimode_draw_arrays) (define-extension-name GL_IBM_vertex_array_lists) (define-extension-name GL_SGIX_subsample) (define-extension-name GL_SGIX_ycrcb_subsample) (define-extension-name GL_SGIX_ycrcba) (define-extension-name GL_SGI_depth_pass_instrument) (define-extension-name GL_3DFX_texture_compression_FXT1) (define-extension-name GL_3DFX_multisample) (define-extension-name GL_3DFX_tbuffer) (define-extension-name GL_EXT_multisample) (define-extension-name GL_SGIX_vertex_preclip) (define-extension-name GL_SGIX_convolution_accuracy) (define-extension-name GL_SGIX_resample) (define-extension-name GL_SGIS_point_line_texgen) (define-extension-name GL_SGIS_texture_color_mask) (define-extension-name GL_EXT_texture_env_dot3) (define-extension-name GL_ATI_texture_mirror_once) (define-extension-name GL_NV_fence) (define-extension-name GL_IBM_texture_mirrored_repeat) (define-extension-name GL_NV_evaluators) (define-extension-name GL_NV_packed_depth_stencil) (define-extension-name GL_NV_register_combiners2) (define-extension-name GL_NV_texture_compression_vtc) (define-extension-name GL_NV_texture_rectangle) (define-extension-name GL_NV_texture_shader) (define-extension-name GL_NV_texture_shader2) (define-extension-name GL_NV_vertex_array_range2) (define-extension-name GL_NV_vertex_program) (define-extension-name GL_SGIX_texture_coordinate_clamp) (define-extension-name GL_SGIX_scalebias_hint) (define-extension-name GL_OML_interlace) (define-extension-name GL_OML_subsample) (define-extension-name GL_OML_resample) (define-extension-name GL_NV_copy_depth_to_color) (define-extension-name GL_ATI_envmap_bumpmap) (define-extension-name GL_ATI_fragment_shader) (define-extension-name GL_ATI_pn_triangles) (define-extension-name GL_ATI_vertex_array_object) (define-extension-name GL_EXT_vertex_shader) (define-extension-name GL_ATI_vertex_streams) (define-extension-name GL_ATI_element_array) (define-extension-name GL_SUN_mesh_array) (define-extension-name GL_SUN_slice_accum) (define-extension-name GL_NV_multisample_filter_hint) (define-extension-name GL_NV_depth_clamp) (define-extension-name GL_NV_occlusion_query) (define-extension-name GL_NV_point_sprite) (define-extension-name GL_NV_texture_shader3) (define-extension-name GL_NV_vertex_program1_1) (define-extension-name GL_EXT_shadow_funcs) (define-extension-name GL_EXT_stencil_two_side) (define-extension-name GL_ATI_text_fragment_shader) (define-extension-name GL_APPLE_client_storage) (define-extension-name GL_APPLE_element_array) (define-extension-name GL_APPLE_fence) (define-extension-name GL_APPLE_vertex_array_object) (define-extension-name GL_APPLE_vertex_array_range) (define-extension-name GL_APPLE_ycbcr_422) (define-extension-name GL_S3_s3tc) (define-extension-name GL_ATI_draw_buffers) (define-extension-name GL_ATI_pixel_format_float) (define-extension-name GL_ATI_texture_env_combine3) (define-extension-name GL_ATI_texture_float) (define-extension-name GL_NV_float_buffer) (define-extension-name GL_NV_fragment_program) (define-extension-name GL_NV_half_float) (define-extension-name GL_NV_pixel_data_range) (define-extension-name GL_NV_primitive_restart) (define-extension-name GL_NV_texture_expand_normal) (define-extension-name GL_NV_vertex_program2) (define-extension-name GL_ATI_map_object_buffer) (define-extension-name GL_ATI_separate_stencil) (define-extension-name GL_ATI_vertex_attrib_array_object) (define-extension-name GL_OES_read_format) (define-extension-name GL_EXT_depth_bounds_test) (define-extension-name GL_EXT_texture_mirror_clamp) (define-extension-name GL_EXT_blend_equation_separate) (define-extension-name GL_MESA_pack_invert) (define-extension-name GL_MESA_ycbcr_texture) (define-extension-name GL_EXT_pixel_buffer_object) (define-extension-name GL_NV_fragment_program_option) (define-extension-name GL_NV_fragment_program2) (define-extension-name GL_NV_vertex_program2_option) (define-extension-name GL_NV_vertex_program3) (define-extension-name GL_EXT_framebuffer_object) (define-extension-name GL_GREMEDY_string_marker) (define-extension-name GL_EXT_color_matrix) (define-extension-name GL_SGIX_texture_select) (define-extension-name GL_INGR_blend_func_separate) (define-extension-name GL_SGIX_depth_pass_instrument) (define-extension-name GL_SGIX_igloo_interface) ;; Constants (define-constant GL_FALSE #x0000) (define-constant GL_TRUE #x0001) (define-constant GL_BYTE #x1400) (define-constant GL_UNSIGNED_BYTE #x1401) (define-constant GL_SHORT #x1402) (define-constant GL_UNSIGNED_SHORT #x1403) (define-constant GL_INT #x1404) (define-constant GL_UNSIGNED_INT #x1405) (define-constant GL_FLOAT #x1406) (define-constant GL_DOUBLE #x140a) (define-constant GL_2_BYTES #x1407) (define-constant GL_3_BYTES #x1408) (define-constant GL_4_BYTES #x1409) (define-constant GL_POINTS #x0000) (define-constant GL_LINES #x0001) (define-constant GL_LINE_LOOP #x0002) (define-constant GL_LINE_STRIP #x0003) (define-constant GL_TRIANGLES #x0004) (define-constant GL_TRIANGLE_STRIP #x0005) (define-constant GL_TRIANGLE_FAN #x0006) (define-constant GL_QUADS #x0007) (define-constant GL_QUAD_STRIP #x0008) (define-constant GL_POLYGON #x0009) (define-constant GL_VERTEX_ARRAY #x8074) (define-constant GL_NORMAL_ARRAY #x8075) (define-constant GL_COLOR_ARRAY #x8076) (define-constant GL_INDEX_ARRAY #x8077) (define-constant GL_TEXTURE_COORD_ARRAY #x8078) (define-constant GL_EDGE_FLAG_ARRAY #x8079) (define-constant GL_VERTEX_ARRAY_SIZE #x807a) (define-constant GL_VERTEX_ARRAY_TYPE #x807b) (define-constant GL_VERTEX_ARRAY_STRIDE #x807c) (define-constant GL_NORMAL_ARRAY_TYPE #x807e) (define-constant GL_NORMAL_ARRAY_STRIDE #x807f) (define-constant GL_COLOR_ARRAY_SIZE #x8081) (define-constant GL_COLOR_ARRAY_TYPE #x8082) (define-constant GL_COLOR_ARRAY_STRIDE #x8083) (define-constant GL_INDEX_ARRAY_TYPE #x8085) (define-constant GL_INDEX_ARRAY_STRIDE #x8086) (define-constant GL_TEXTURE_COORD_ARRAY_SIZE #x8088) (define-constant GL_TEXTURE_COORD_ARRAY_TYPE #x8089) (define-constant GL_TEXTURE_COORD_ARRAY_STRIDE #x808a) (define-constant GL_EDGE_FLAG_ARRAY_STRIDE #x808c) (define-constant GL_VERTEX_ARRAY_POINTER #x808e) (define-constant GL_NORMAL_ARRAY_POINTER #x808f) (define-constant GL_COLOR_ARRAY_POINTER #x8090) (define-constant GL_INDEX_ARRAY_POINTER #x8091) (define-constant GL_TEXTURE_COORD_ARRAY_POINTER #x8092) (define-constant GL_EDGE_FLAG_ARRAY_POINTER #x8093) (define-constant GL_V2F #x2a20) (define-constant GL_V3F #x2a21) (define-constant GL_C4UB_V2F #x2a22) (define-constant GL_C4UB_V3F #x2a23) (define-constant GL_C3F_V3F #x2a24) (define-constant GL_N3F_V3F #x2a25) (define-constant GL_C4F_N3F_V3F #x2a26) (define-constant GL_T2F_V3F #x2a27) (define-constant GL_T4F_V4F #x2a28) (define-constant GL_T2F_C4UB_V3F #x2a29) (define-constant GL_T2F_C3F_V3F #x2a2a) (define-constant GL_T2F_N3F_V3F #x2a2b) (define-constant GL_T2F_C4F_N3F_V3F #x2a2c) (define-constant GL_T4F_C4F_N3F_V4F #x2a2d) (define-constant GL_MATRIX_MODE #x0ba0) (define-constant GL_MODELVIEW #x1700) (define-constant GL_PROJECTION #x1701) (define-constant GL_TEXTURE #x1702) (define-constant GL_POINT_SMOOTH #x0b10) (define-constant GL_POINT_SIZE #x0b11) (define-constant GL_POINT_SIZE_GRANULARITY #x0b13) (define-constant GL_POINT_SIZE_RANGE #x0b12) (define-constant GL_LINE_SMOOTH #x0b20) (define-constant GL_LINE_STIPPLE #x0b24) (define-constant GL_LINE_STIPPLE_PATTERN #x0b25) (define-constant GL_LINE_STIPPLE_REPEAT #x0b26) (define-constant GL_LINE_WIDTH #x0b21) (define-constant GL_LINE_WIDTH_GRANULARITY #x0b23) (define-constant GL_LINE_WIDTH_RANGE #x0b22) (define-constant GL_POINT #x1b00) (define-constant GL_LINE #x1b01) (define-constant GL_FILL #x1b02) (define-constant GL_CW #x0900) (define-constant GL_CCW #x0901) (define-constant GL_FRONT #x0404) (define-constant GL_BACK #x0405) (define-constant GL_POLYGON_MODE #x0b40) (define-constant GL_POLYGON_SMOOTH #x0b41) (define-constant GL_POLYGON_STIPPLE #x0b42) (define-constant GL_EDGE_FLAG #x0b43) (define-constant GL_CULL_FACE #x0b44) (define-constant GL_CULL_FACE_MODE #x0b45) (define-constant GL_FRONT_FACE #x0b46) (define-constant GL_POLYGON_OFFSET_FACTOR #x8038) (define-constant GL_POLYGON_OFFSET_UNITS #x2a00) (define-constant GL_POLYGON_OFFSET_POINT #x2a01) (define-constant GL_POLYGON_OFFSET_LINE #x2a02) (define-constant GL_POLYGON_OFFSET_FILL #x8037) (define-constant GL_COMPILE #x1300) (define-constant GL_COMPILE_AND_EXECUTE #x1301) (define-constant GL_LIST_BASE #x0b32) (define-constant GL_LIST_INDEX #x0b33) (define-constant GL_LIST_MODE #x0b30) (define-constant GL_NEVER #x0200) (define-constant GL_LESS #x0201) (define-constant GL_EQUAL #x0202) (define-constant GL_LEQUAL #x0203) (define-constant GL_GREATER #x0204) (define-constant GL_NOTEQUAL #x0205) (define-constant GL_GEQUAL #x0206) (define-constant GL_ALWAYS #x0207) (define-constant GL_DEPTH_TEST #x0b71) (define-constant GL_DEPTH_BITS #x0d56) (define-constant GL_DEPTH_CLEAR_VALUE #x0b73) (define-constant GL_DEPTH_FUNC #x0b74) (define-constant GL_DEPTH_RANGE #x0b70) (define-constant GL_DEPTH_WRITEMASK #x0b72) (define-constant GL_DEPTH_COMPONENT #x1902) (define-constant GL_LIGHTING #x0b50) (define-constant GL_LIGHT0 #x4000) (define-constant GL_LIGHT1 #x4001) (define-constant GL_LIGHT2 #x4002) (define-constant GL_LIGHT3 #x4003) (define-constant GL_LIGHT4 #x4004) (define-constant GL_LIGHT5 #x4005) (define-constant GL_LIGHT6 #x4006) (define-constant GL_LIGHT7 #x4007) (define-constant GL_SPOT_EXPONENT #x1205) (define-constant GL_SPOT_CUTOFF #x1206) (define-constant GL_CONSTANT_ATTENUATION #x1207) (define-constant GL_LINEAR_ATTENUATION #x1208) (define-constant GL_QUADRATIC_ATTENUATION #x1209) (define-constant GL_AMBIENT #x1200) (define-constant GL_DIFFUSE #x1201) (define-constant GL_SPECULAR #x1202) (define-constant GL_SHININESS #x1601) (define-constant GL_EMISSION #x1600) (define-constant GL_POSITION #x1203) (define-constant GL_SPOT_DIRECTION #x1204) (define-constant GL_AMBIENT_AND_DIFFUSE #x1602) (define-constant GL_COLOR_INDEXES #x1603) (define-constant GL_LIGHT_MODEL_TWO_SIDE #x0b52) (define-constant GL_LIGHT_MODEL_LOCAL_VIEWER #x0b51) (define-constant GL_LIGHT_MODEL_AMBIENT #x0b53) (define-constant GL_FRONT_AND_BACK #x0408) (define-constant GL_SHADE_MODEL #x0b54) (define-constant GL_FLAT #x1d00) (define-constant GL_SMOOTH #x1d01) (define-constant GL_COLOR_MATERIAL #x0b57) (define-constant GL_COLOR_MATERIAL_FACE #x0b55) (define-constant GL_COLOR_MATERIAL_PARAMETER #x0b56) (define-constant GL_NORMALIZE #x0ba1) (define-constant GL_CLIP_PLANE0 #x3000) (define-constant GL_CLIP_PLANE1 #x3001) (define-constant GL_CLIP_PLANE2 #x3002) (define-constant GL_CLIP_PLANE3 #x3003) (define-constant GL_CLIP_PLANE4 #x3004) (define-constant GL_CLIP_PLANE5 #x3005) (define-constant GL_ACCUM_RED_BITS #x0d58) (define-constant GL_ACCUM_GREEN_BITS #x0d59) (define-constant GL_ACCUM_BLUE_BITS #x0d5a) (define-constant GL_ACCUM_ALPHA_BITS #x0d5b) (define-constant GL_ACCUM_CLEAR_VALUE #x0b80) (define-constant GL_ACCUM #x0100) (define-constant GL_ADD #x0104) (define-constant GL_LOAD #x0101) (define-constant GL_MULT #x0103) (define-constant GL_RETURN #x0102) (define-constant GL_ALPHA_TEST #x0bc0) (define-constant GL_ALPHA_TEST_REF #x0bc2) (define-constant GL_ALPHA_TEST_FUNC #x0bc1) (define-constant GL_BLEND #x0be2) (define-constant GL_BLEND_SRC #x0be1) (define-constant GL_BLEND_DST #x0be0) (define-constant GL_ZERO #x0000) (define-constant GL_ONE #x0001) (define-constant GL_SRC_COLOR #x0300) (define-constant GL_ONE_MINUS_SRC_COLOR #x0301) (define-constant GL_SRC_ALPHA #x0302) (define-constant GL_ONE_MINUS_SRC_ALPHA #x0303) (define-constant GL_DST_ALPHA #x0304) (define-constant GL_ONE_MINUS_DST_ALPHA #x0305) (define-constant GL_DST_COLOR #x0306) (define-constant GL_ONE_MINUS_DST_COLOR #x0307) (define-constant GL_SRC_ALPHA_SATURATE #x0308) (define-constant GL_CONSTANT_COLOR #x8001) (define-constant GL_ONE_MINUS_CONSTANT_COLOR #x8002) (define-constant GL_CONSTANT_ALPHA #x8003) (define-constant GL_ONE_MINUS_CONSTANT_ALPHA #x8004) (define-constant GL_FEEDBACK #x1c01) (define-constant GL_RENDER #x1c00) (define-constant GL_SELECT #x1c02) (define-constant GL_2D #x0600) (define-constant GL_3D #x0601) (define-constant GL_3D_COLOR #x0602) (define-constant GL_3D_COLOR_TEXTURE #x0603) (define-constant GL_4D_COLOR_TEXTURE #x0604) (define-constant GL_POINT_TOKEN #x0701) (define-constant GL_LINE_TOKEN #x0702) (define-constant GL_LINE_RESET_TOKEN #x0707) (define-constant GL_POLYGON_TOKEN #x0703) (define-constant GL_BITMAP_TOKEN #x0704) (define-constant GL_DRAW_PIXEL_TOKEN #x0705) (define-constant GL_COPY_PIXEL_TOKEN #x0706) (define-constant GL_PASS_THROUGH_TOKEN #x0700) (define-constant GL_FEEDBACK_BUFFER_POINTER #x0df0) (define-constant GL_FEEDBACK_BUFFER_SIZE #x0df1) (define-constant GL_FEEDBACK_BUFFER_TYPE #x0df2) (define-constant GL_SELECTION_BUFFER_POINTER #x0df3) (define-constant GL_SELECTION_BUFFER_SIZE #x0df4) (define-constant GL_FOG #x0b60) (define-constant GL_FOG_MODE #x0b65) (define-constant GL_FOG_DENSITY #x0b62) (define-constant GL_FOG_COLOR #x0b66) (define-constant GL_FOG_INDEX #x0b61) (define-constant GL_FOG_START #x0b63) (define-constant GL_FOG_END #x0b64) (define-constant GL_LINEAR #x2601) (define-constant GL_EXP #x0800) (define-constant GL_EXP2 #x0801) (define-constant GL_LOGIC_OP #x0bf1) (define-constant GL_INDEX_LOGIC_OP #x0bf1) (define-constant GL_COLOR_LOGIC_OP #x0bf2) (define-constant GL_LOGIC_OP_MODE #x0bf0) (define-constant GL_CLEAR #x1500) (define-constant GL_SET #x150f) (define-constant GL_COPY #x1503) (define-constant GL_COPY_INVERTED #x150c) (define-constant GL_NOOP #x1505) (define-constant GL_INVERT #x150a) (define-constant GL_AND #x1501) (define-constant GL_NAND #x150e) (define-constant GL_OR #x1507) (define-constant GL_NOR #x1508) (define-constant GL_XOR #x1506) (define-constant GL_EQUIV #x1509) (define-constant GL_AND_REVERSE #x1502) (define-constant GL_AND_INVERTED #x1504) (define-constant GL_OR_REVERSE #x150b) (define-constant GL_OR_INVERTED #x150d) (define-constant GL_STENCIL_TEST #x0b90) (define-constant GL_STENCIL_WRITEMASK #x0b98) (define-constant GL_STENCIL_BITS #x0d57) (define-constant GL_STENCIL_FUNC #x0b92) (define-constant GL_STENCIL_VALUE_MASK #x0b93) (define-constant GL_STENCIL_REF #x0b97) (define-constant GL_STENCIL_FAIL #x0b94) (define-constant GL_STENCIL_PASS_DEPTH_PASS #x0b96) (define-constant GL_STENCIL_PASS_DEPTH_FAIL #x0b95) (define-constant GL_STENCIL_CLEAR_VALUE #x0b91) (define-constant GL_STENCIL_INDEX #x1901) (define-constant GL_KEEP #x1e00) (define-constant GL_REPLACE #x1e01) (define-constant GL_INCR #x1e02) (define-constant GL_DECR #x1e03) (define-constant GL_NONE #x0000) (define-constant GL_LEFT #x0406) (define-constant GL_RIGHT #x0407) (define-constant GL_FRONT_LEFT #x0400) (define-constant GL_FRONT_RIGHT #x0401) (define-constant GL_BACK_LEFT #x0402) (define-constant GL_BACK_RIGHT #x0403) (define-constant GL_AUX0 #x0409) (define-constant GL_AUX1 #x040a) (define-constant GL_AUX2 #x040b) (define-constant GL_AUX3 #x040c) (define-constant GL_COLOR_INDEX #x1900) (define-constant GL_RED #x1903) (define-constant GL_GREEN #x1904) (define-constant GL_BLUE #x1905) (define-constant GL_ALPHA #x1906) (define-constant GL_LUMINANCE #x1909) (define-constant GL_LUMINANCE_ALPHA #x190a) (define-constant GL_ALPHA_BITS #x0d55) (define-constant GL_RED_BITS #x0d52) (define-constant GL_GREEN_BITS #x0d53) (define-constant GL_BLUE_BITS #x0d54) (define-constant GL_INDEX_BITS #x0d51) (define-constant GL_SUBPIXEL_BITS #x0d50) (define-constant GL_AUX_BUFFERS #x0c00) (define-constant GL_READ_BUFFER #x0c02) (define-constant GL_DRAW_BUFFER #x0c01) (define-constant GL_DOUBLEBUFFER #x0c32) (define-constant GL_STEREO #x0c33) (define-constant GL_BITMAP #x1a00) (define-constant GL_COLOR #x1800) (define-constant GL_DEPTH #x1801) (define-constant GL_STENCIL #x1802) (define-constant GL_DITHER #x0bd0) (define-constant GL_RGB #x1907) (define-constant GL_RGBA #x1908) (define-constant GL_MAX_LIST_NESTING #x0b31) (define-constant GL_MAX_ATTRIB_STACK_DEPTH #x0d35) (define-constant GL_MAX_MODELVIEW_STACK_DEPTH #x0d36) (define-constant GL_MAX_NAME_STACK_DEPTH #x0d37) (define-constant GL_MAX_PROJECTION_STACK_DEPTH #x0d38) (define-constant GL_MAX_TEXTURE_STACK_DEPTH #x0d39) (define-constant GL_MAX_EVAL_ORDER #x0d30) (define-constant GL_MAX_LIGHTS #x0d31) (define-constant GL_MAX_CLIP_PLANES #x0d32) (define-constant GL_MAX_TEXTURE_SIZE #x0d33) (define-constant GL_MAX_PIXEL_MAP_TABLE #x0d34) (define-constant GL_MAX_VIEWPORT_DIMS #x0d3a) (define-constant GL_MAX_CLIENT_ATTRIB_STACK_DEPTH #x0d3b) (define-constant GL_ATTRIB_STACK_DEPTH #x0bb0) (define-constant GL_CLIENT_ATTRIB_STACK_DEPTH #x0bb1) (define-constant GL_COLOR_CLEAR_VALUE #x0c22) (define-constant GL_COLOR_WRITEMASK #x0c23) (define-constant GL_CURRENT_INDEX #x0b01) (define-constant GL_CURRENT_COLOR #x0b00) (define-constant GL_CURRENT_NORMAL #x0b02) (define-constant GL_CURRENT_RASTER_COLOR #x0b04) (define-constant GL_CURRENT_RASTER_DISTANCE #x0b09) (define-constant GL_CURRENT_RASTER_INDEX #x0b05) (define-constant GL_CURRENT_RASTER_POSITION #x0b07) (define-constant GL_CURRENT_RASTER_TEXTURE_COORDS #x0b06) (define-constant GL_CURRENT_RASTER_POSITION_VALID #x0b08) (define-constant GL_CURRENT_TEXTURE_COORDS #x0b03) (define-constant GL_INDEX_CLEAR_VALUE #x0c20) (define-constant GL_INDEX_MODE #x0c30) (define-constant GL_INDEX_WRITEMASK #x0c21) (define-constant GL_MODELVIEW_MATRIX #x0ba6) (define-constant GL_MODELVIEW_STACK_DEPTH #x0ba3) (define-constant GL_NAME_STACK_DEPTH #x0d70) (define-constant GL_PROJECTION_MATRIX #x0ba7) (define-constant GL_PROJECTION_STACK_DEPTH #x0ba4) (define-constant GL_RENDER_MODE #x0c40) (define-constant GL_RGBA_MODE #x0c31) (define-constant GL_TEXTURE_MATRIX #x0ba8) (define-constant GL_TEXTURE_STACK_DEPTH #x0ba5) (define-constant GL_VIEWPORT #x0ba2) (define-constant GL_AUTO_NORMAL #x0d80) (define-constant GL_MAP1_COLOR_4 #x0d90) (define-constant GL_MAP1_GRID_DOMAIN #x0dd0) (define-constant GL_MAP1_GRID_SEGMENTS #x0dd1) (define-constant GL_MAP1_INDEX #x0d91) (define-constant GL_MAP1_NORMAL #x0d92) (define-constant GL_MAP1_TEXTURE_COORD_1 #x0d93) (define-constant GL_MAP1_TEXTURE_COORD_2 #x0d94) (define-constant GL_MAP1_TEXTURE_COORD_3 #x0d95) (define-constant GL_MAP1_TEXTURE_COORD_4 #x0d96) (define-constant GL_MAP1_VERTEX_3 #x0d97) (define-constant GL_MAP1_VERTEX_4 #x0d98) (define-constant GL_MAP2_COLOR_4 #x0db0) (define-constant GL_MAP2_GRID_DOMAIN #x0dd2) (define-constant GL_MAP2_GRID_SEGMENTS #x0dd3) (define-constant GL_MAP2_INDEX #x0db1) (define-constant GL_MAP2_NORMAL #x0db2) (define-constant GL_MAP2_TEXTURE_COORD_1 #x0db3) (define-constant GL_MAP2_TEXTURE_COORD_2 #x0db4) (define-constant GL_MAP2_TEXTURE_COORD_3 #x0db5) (define-constant GL_MAP2_TEXTURE_COORD_4 #x0db6) (define-constant GL_MAP2_VERTEX_3 #x0db7) (define-constant GL_MAP2_VERTEX_4 #x0db8) (define-constant GL_COEFF #x0a00) (define-constant GL_DOMAIN #x0a02) (define-constant GL_ORDER #x0a01) (define-constant GL_FOG_HINT #x0c54) (define-constant GL_LINE_SMOOTH_HINT #x0c52) (define-constant GL_PERSPECTIVE_CORRECTION_HINT #x0c50) (define-constant GL_POINT_SMOOTH_HINT #x0c51) (define-constant GL_POLYGON_SMOOTH_HINT #x0c53) (define-constant GL_DONT_CARE #x1100) (define-constant GL_FASTEST #x1101) (define-constant GL_NICEST #x1102) (define-constant GL_SCISSOR_TEST #x0c11) (define-constant GL_SCISSOR_BOX #x0c10) (define-constant GL_MAP_COLOR #x0d10) (define-constant GL_MAP_STENCIL #x0d11) (define-constant GL_INDEX_SHIFT #x0d12) (define-constant GL_INDEX_OFFSET #x0d13) (define-constant GL_RED_SCALE #x0d14) (define-constant GL_RED_BIAS #x0d15) (define-constant GL_GREEN_SCALE #x0d18) (define-constant GL_GREEN_BIAS #x0d19) (define-constant GL_BLUE_SCALE #x0d1a) (define-constant GL_BLUE_BIAS #x0d1b) (define-constant GL_ALPHA_SCALE #x0d1c) (define-constant GL_ALPHA_BIAS #x0d1d) (define-constant GL_DEPTH_SCALE #x0d1e) (define-constant GL_DEPTH_BIAS #x0d1f) (define-constant GL_PIXEL_MAP_S_TO_S_SIZE #x0cb1) (define-constant GL_PIXEL_MAP_I_TO_I_SIZE #x0cb0) (define-constant GL_PIXEL_MAP_I_TO_R_SIZE #x0cb2) (define-constant GL_PIXEL_MAP_I_TO_G_SIZE #x0cb3) (define-constant GL_PIXEL_MAP_I_TO_B_SIZE #x0cb4) (define-constant GL_PIXEL_MAP_I_TO_A_SIZE #x0cb5) (define-constant GL_PIXEL_MAP_R_TO_R_SIZE #x0cb6) (define-constant GL_PIXEL_MAP_G_TO_G_SIZE #x0cb7) (define-constant GL_PIXEL_MAP_B_TO_B_SIZE #x0cb8) (define-constant GL_PIXEL_MAP_A_TO_A_SIZE #x0cb9) (define-constant GL_PIXEL_MAP_S_TO_S #x0c71) (define-constant GL_PIXEL_MAP_I_TO_I #x0c70) (define-constant GL_PIXEL_MAP_I_TO_R #x0c72) (define-constant GL_PIXEL_MAP_I_TO_G #x0c73) (define-constant GL_PIXEL_MAP_I_TO_B #x0c74) (define-constant GL_PIXEL_MAP_I_TO_A #x0c75) (define-constant GL_PIXEL_MAP_R_TO_R #x0c76) (define-constant GL_PIXEL_MAP_G_TO_G #x0c77) (define-constant GL_PIXEL_MAP_B_TO_B #x0c78) (define-constant GL_PIXEL_MAP_A_TO_A #x0c79) (define-constant GL_PACK_ALIGNMENT #x0d05) (define-constant GL_PACK_LSB_FIRST #x0d01) (define-constant GL_PACK_ROW_LENGTH #x0d02) (define-constant GL_PACK_SKIP_PIXELS #x0d04) (define-constant GL_PACK_SKIP_ROWS #x0d03) (define-constant GL_PACK_SWAP_BYTES #x0d00) (define-constant GL_UNPACK_ALIGNMENT #x0cf5) (define-constant GL_UNPACK_LSB_FIRST #x0cf1) (define-constant GL_UNPACK_ROW_LENGTH #x0cf2) (define-constant GL_UNPACK_SKIP_PIXELS #x0cf4) (define-constant GL_UNPACK_SKIP_ROWS #x0cf3) (define-constant GL_UNPACK_SWAP_BYTES #x0cf0) (define-constant GL_ZOOM_X #x0d16) (define-constant GL_ZOOM_Y #x0d17) (define-constant GL_TEXTURE_ENV #x2300) (define-constant GL_TEXTURE_ENV_MODE #x2200) (define-constant GL_TEXTURE_1D #x0de0) (define-constant GL_TEXTURE_2D #x0de1) (define-constant GL_TEXTURE_WRAP_S #x2802) (define-constant GL_TEXTURE_WRAP_T #x2803) (define-constant GL_TEXTURE_MAG_FILTER #x2800) (define-constant GL_TEXTURE_MIN_FILTER #x2801) (define-constant GL_TEXTURE_ENV_COLOR #x2201) (define-constant GL_TEXTURE_GEN_S #x0c60) (define-constant GL_TEXTURE_GEN_T #x0c61) (define-constant GL_TEXTURE_GEN_MODE #x2500) (define-constant GL_TEXTURE_BORDER_COLOR #x1004) (define-constant GL_TEXTURE_WIDTH #x1000) (define-constant GL_TEXTURE_HEIGHT #x1001) (define-constant GL_TEXTURE_BORDER #x1005) (define-constant GL_TEXTURE_COMPONENTS #x1003) (define-constant GL_TEXTURE_RED_SIZE #x805c) (define-constant GL_TEXTURE_GREEN_SIZE #x805d) (define-constant GL_TEXTURE_BLUE_SIZE #x805e) (define-constant GL_TEXTURE_ALPHA_SIZE #x805f) (define-constant GL_TEXTURE_LUMINANCE_SIZE #x8060) (define-constant GL_TEXTURE_INTENSITY_SIZE #x8061) (define-constant GL_NEAREST_MIPMAP_NEAREST #x2700) (define-constant GL_NEAREST_MIPMAP_LINEAR #x2702) (define-constant GL_LINEAR_MIPMAP_NEAREST #x2701) (define-constant GL_LINEAR_MIPMAP_LINEAR #x2703) (define-constant GL_OBJECT_LINEAR #x2401) (define-constant GL_OBJECT_PLANE #x2501) (define-constant GL_EYE_LINEAR #x2400) (define-constant GL_EYE_PLANE #x2502) (define-constant GL_SPHERE_MAP #x2402) (define-constant GL_DECAL #x2101) (define-constant GL_MODULATE #x2100) (define-constant GL_NEAREST #x2600) (define-constant GL_REPEAT #x2901) (define-constant GL_CLAMP #x2900) (define-constant GL_S #x2000) (define-constant GL_T #x2001) (define-constant GL_R #x2002) (define-constant GL_Q #x2003) (define-constant GL_TEXTURE_GEN_R #x0c62) (define-constant GL_TEXTURE_GEN_Q #x0c63) (define-constant GL_VENDOR #x1f00) (define-constant GL_RENDERER #x1f01) (define-constant GL_VERSION #x1f02) (define-constant GL_EXTENSIONS #x1f03) (define-constant GL_NO_ERROR #x0000) (define-constant GL_INVALID_VALUE #x0501) (define-constant GL_INVALID_ENUM #x0500) (define-constant GL_INVALID_OPERATION #x0502) (define-constant GL_STACK_OVERFLOW #x0503) (define-constant GL_STACK_UNDERFLOW #x0504) (define-constant GL_OUT_OF_MEMORY #x0505) (define-constant GL_CURRENT_BIT #x0001) (define-constant GL_POINT_BIT #x0002) (define-constant GL_LINE_BIT #x0004) (define-constant GL_POLYGON_BIT #x0008) (define-constant GL_POLYGON_STIPPLE_BIT #x0010) (define-constant GL_PIXEL_MODE_BIT #x0020) (define-constant GL_LIGHTING_BIT #x0040) (define-constant GL_FOG_BIT #x0080) (define-constant GL_DEPTH_BUFFER_BIT #x0100) (define-constant GL_ACCUM_BUFFER_BIT #x0200) (define-constant GL_STENCIL_BUFFER_BIT #x0400) (define-constant GL_VIEWPORT_BIT #x0800) (define-constant GL_TRANSFORM_BIT #x1000) (define-constant GL_ENABLE_BIT #x2000) (define-constant GL_COLOR_BUFFER_BIT #x4000) (define-constant GL_HINT_BIT #x8000) (define-constant GL_EVAL_BIT #x10000) (define-constant GL_LIST_BIT #x20000) (define-constant GL_TEXTURE_BIT #x40000) (define-constant GL_SCISSOR_BIT #x80000) (define-constant GL_ALL_ATTRIB_BITS #xfffff) (define-constant GL_PROXY_TEXTURE_1D #x8063) (define-constant GL_PROXY_TEXTURE_2D #x8064) (define-constant GL_TEXTURE_PRIORITY #x8066) (define-constant GL_TEXTURE_RESIDENT #x8067) (define-constant GL_TEXTURE_BINDING_1D #x8068) (define-constant GL_TEXTURE_BINDING_2D #x8069) (define-constant GL_TEXTURE_INTERNAL_FORMAT #x1003) (define-constant GL_ALPHA4 #x803b) (define-constant GL_ALPHA8 #x803c) (define-constant GL_ALPHA12 #x803d) (define-constant GL_ALPHA16 #x803e) (define-constant GL_LUMINANCE4 #x803f) (define-constant GL_LUMINANCE8 #x8040) (define-constant GL_LUMINANCE12 #x8041) (define-constant GL_LUMINANCE16 #x8042) (define-constant GL_LUMINANCE4_ALPHA4 #x8043) (define-constant GL_LUMINANCE6_ALPHA2 #x8044) (define-constant GL_LUMINANCE8_ALPHA8 #x8045) (define-constant GL_LUMINANCE12_ALPHA4 #x8046) (define-constant GL_LUMINANCE12_ALPHA12 #x8047) (define-constant GL_LUMINANCE16_ALPHA16 #x8048) (define-constant GL_INTENSITY #x8049) (define-constant GL_INTENSITY4 #x804a) (define-constant GL_INTENSITY8 #x804b) (define-constant GL_INTENSITY12 #x804c) (define-constant GL_INTENSITY16 #x804d) (define-constant GL_R3_G3_B2 #x2a10) (define-constant GL_RGB4 #x804f) (define-constant GL_RGB5 #x8050) (define-constant GL_RGB8 #x8051) (define-constant GL_RGB10 #x8052) (define-constant GL_RGB12 #x8053) (define-constant GL_RGB16 #x8054) (define-constant GL_RGBA2 #x8055) (define-constant GL_RGBA4 #x8056) (define-constant GL_RGB5_A1 #x8057) (define-constant GL_RGBA8 #x8058) (define-constant GL_RGB10_A2 #x8059) (define-constant GL_RGBA12 #x805a) (define-constant GL_RGBA16 #x805b) (define-constant GL_CLIENT_PIXEL_STORE_BIT #x0001) (define-constant GL_CLIENT_VERTEX_ARRAY_BIT #x0002) (define-constant GL_ALL_CLIENT_ATTRIB_BITS #xffffffff) (define-constant GL_CLIENT_ALL_ATTRIB_BITS #xffffffff) (define-constant GL_GLEXT_VERSION #x001c) (define-constant GL_UNSIGNED_BYTE_3_3_2 #x8032) (define-constant GL_UNSIGNED_SHORT_4_4_4_4 #x8033) (define-constant GL_UNSIGNED_SHORT_5_5_5_1 #x8034) (define-constant GL_UNSIGNED_INT_8_8_8_8 #x8035) (define-constant GL_UNSIGNED_INT_10_10_10_2 #x8036) (define-constant GL_RESCALE_NORMAL #x803a) (define-constant GL_TEXTURE_BINDING_3D #x806a) (define-constant GL_PACK_SKIP_IMAGES #x806b) (define-constant GL_PACK_IMAGE_HEIGHT #x806c) (define-constant GL_UNPACK_SKIP_IMAGES #x806d) (define-constant GL_UNPACK_IMAGE_HEIGHT #x806e) (define-constant GL_TEXTURE_3D #x806f) (define-constant GL_PROXY_TEXTURE_3D #x8070) (define-constant GL_TEXTURE_DEPTH #x8071) (define-constant GL_TEXTURE_WRAP_R #x8072) (define-constant GL_MAX_3D_TEXTURE_SIZE #x8073) (define-constant GL_UNSIGNED_BYTE_2_3_3_REV #x8362) (define-constant GL_UNSIGNED_SHORT_5_6_5 #x8363) (define-constant GL_UNSIGNED_SHORT_5_6_5_REV #x8364) (define-constant GL_UNSIGNED_SHORT_4_4_4_4_REV #x8365) (define-constant GL_UNSIGNED_SHORT_1_5_5_5_REV #x8366) (define-constant GL_UNSIGNED_INT_8_8_8_8_REV #x8367) (define-constant GL_UNSIGNED_INT_2_10_10_10_REV #x8368) (define-constant GL_BGR #x80e0) (define-constant GL_BGRA #x80e1) (define-constant GL_MAX_ELEMENTS_VERTICES #x80e8) (define-constant GL_MAX_ELEMENTS_INDICES #x80e9) (define-constant GL_CLAMP_TO_EDGE #x812f) (define-constant GL_TEXTURE_MIN_LOD #x813a) (define-constant GL_TEXTURE_MAX_LOD #x813b) (define-constant GL_TEXTURE_BASE_LEVEL #x813c) (define-constant GL_TEXTURE_MAX_LEVEL #x813d) (define-constant GL_LIGHT_MODEL_COLOR_CONTROL #x81f8) (define-constant GL_SINGLE_COLOR #x81f9) (define-constant GL_SEPARATE_SPECULAR_COLOR #x81fa) (define-constant GL_SMOOTH_POINT_SIZE_RANGE #x0b12) (define-constant GL_SMOOTH_POINT_SIZE_GRANULARITY #x0b13) (define-constant GL_SMOOTH_LINE_WIDTH_RANGE #x0b22) (define-constant GL_SMOOTH_LINE_WIDTH_GRANULARITY #x0b23) (define-constant GL_ALIASED_POINT_SIZE_RANGE #x846d) (define-constant GL_ALIASED_LINE_WIDTH_RANGE #x846e) (define-constant GL_BLEND_COLOR #x8005) (define-constant GL_FUNC_ADD #x8006) (define-constant GL_MIN #x8007) (define-constant GL_MAX #x8008) (define-constant GL_BLEND_EQUATION #x8009) (define-constant GL_FUNC_SUBTRACT #x800a) (define-constant GL_FUNC_REVERSE_SUBTRACT #x800b) (define-constant GL_CONVOLUTION_1D #x8010) (define-constant GL_CONVOLUTION_2D #x8011) (define-constant GL_SEPARABLE_2D #x8012) (define-constant GL_CONVOLUTION_BORDER_MODE #x8013) (define-constant GL_CONVOLUTION_FILTER_SCALE #x8014) (define-constant GL_CONVOLUTION_FILTER_BIAS #x8015) (define-constant GL_REDUCE #x8016) (define-constant GL_CONVOLUTION_FORMAT #x8017) (define-constant GL_CONVOLUTION_WIDTH #x8018) (define-constant GL_CONVOLUTION_HEIGHT #x8019) (define-constant GL_MAX_CONVOLUTION_WIDTH #x801a) (define-constant GL_MAX_CONVOLUTION_HEIGHT #x801b) (define-constant GL_POST_CONVOLUTION_RED_SCALE #x801c) (define-constant GL_POST_CONVOLUTION_GREEN_SCALE #x801d) (define-constant GL_POST_CONVOLUTION_BLUE_SCALE #x801e) (define-constant GL_POST_CONVOLUTION_ALPHA_SCALE #x801f) (define-constant GL_POST_CONVOLUTION_RED_BIAS #x8020) (define-constant GL_POST_CONVOLUTION_GREEN_BIAS #x8021) (define-constant GL_POST_CONVOLUTION_BLUE_BIAS #x8022) (define-constant GL_POST_CONVOLUTION_ALPHA_BIAS #x8023) (define-constant GL_HISTOGRAM #x8024) (define-constant GL_PROXY_HISTOGRAM #x8025) (define-constant GL_HISTOGRAM_WIDTH #x8026) (define-constant GL_HISTOGRAM_FORMAT #x8027) (define-constant GL_HISTOGRAM_RED_SIZE #x8028) (define-constant GL_HISTOGRAM_GREEN_SIZE #x8029) (define-constant GL_HISTOGRAM_BLUE_SIZE #x802a) (define-constant GL_HISTOGRAM_ALPHA_SIZE #x802b) (define-constant GL_HISTOGRAM_LUMINANCE_SIZE #x802c) (define-constant GL_HISTOGRAM_SINK #x802d) (define-constant GL_MINMAX #x802e) (define-constant GL_MINMAX_FORMAT #x802f) (define-constant GL_MINMAX_SINK #x8030) (define-constant GL_TABLE_TOO_LARGE #x8031) (define-constant GL_COLOR_MATRIX #x80b1) (define-constant GL_COLOR_MATRIX_STACK_DEPTH #x80b2) (define-constant GL_MAX_COLOR_MATRIX_STACK_DEPTH #x80b3) (define-constant GL_POST_COLOR_MATRIX_RED_SCALE #x80b4) (define-constant GL_POST_COLOR_MATRIX_GREEN_SCALE #x80b5) (define-constant GL_POST_COLOR_MATRIX_BLUE_SCALE #x80b6) (define-constant GL_POST_COLOR_MATRIX_ALPHA_SCALE #x80b7) (define-constant GL_POST_COLOR_MATRIX_RED_BIAS #x80b8) (define-constant GL_POST_COLOR_MATRIX_GREEN_BIAS #x80b9) (define-constant GL_POST_COLOR_MATRIX_BLUE_BIAS #x80ba) (define-constant GL_POST_COLOR_MATRIX_ALPHA_BIAS #x80bb) (define-constant GL_COLOR_TABLE #x80d0) (define-constant GL_POST_CONVOLUTION_COLOR_TABLE #x80d1) (define-constant GL_POST_COLOR_MATRIX_COLOR_TABLE #x80d2) (define-constant GL_PROXY_COLOR_TABLE #x80d3) (define-constant GL_PROXY_POST_CONVOLUTION_COLOR_TABLE #x80d4) (define-constant GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE #x80d5) (define-constant GL_COLOR_TABLE_SCALE #x80d6) (define-constant GL_COLOR_TABLE_BIAS #x80d7) (define-constant GL_COLOR_TABLE_FORMAT #x80d8) (define-constant GL_COLOR_TABLE_WIDTH #x80d9) (define-constant GL_COLOR_TABLE_RED_SIZE #x80da) (define-constant GL_COLOR_TABLE_GREEN_SIZE #x80db) (define-constant GL_COLOR_TABLE_BLUE_SIZE #x80dc) (define-constant GL_COLOR_TABLE_ALPHA_SIZE #x80dd) (define-constant GL_COLOR_TABLE_LUMINANCE_SIZE #x80de) (define-constant GL_COLOR_TABLE_INTENSITY_SIZE #x80df) (define-constant GL_CONSTANT_BORDER #x8151) (define-constant GL_REPLICATE_BORDER #x8153) (define-constant GL_CONVOLUTION_BORDER_COLOR #x8154) (define-constant GL_TEXTURE0 #x84c0) (define-constant GL_TEXTURE1 #x84c1) (define-constant GL_TEXTURE2 #x84c2) (define-constant GL_TEXTURE3 #x84c3) (define-constant GL_TEXTURE4 #x84c4) (define-constant GL_TEXTURE5 #x84c5) (define-constant GL_TEXTURE6 #x84c6) (define-constant GL_TEXTURE7 #x84c7) (define-constant GL_TEXTURE8 #x84c8) (define-constant GL_TEXTURE9 #x84c9) (define-constant GL_TEXTURE10 #x84ca) (define-constant GL_TEXTURE11 #x84cb) (define-constant GL_TEXTURE12 #x84cc) (define-constant GL_TEXTURE13 #x84cd) (define-constant GL_TEXTURE14 #x84ce) (define-constant GL_TEXTURE15 #x84cf) (define-constant GL_TEXTURE16 #x84d0) (define-constant GL_TEXTURE17 #x84d1) (define-constant GL_TEXTURE18 #x84d2) (define-constant GL_TEXTURE19 #x84d3) (define-constant GL_TEXTURE20 #x84d4) (define-constant GL_TEXTURE21 #x84d5) (define-constant GL_TEXTURE22 #x84d6) (define-constant GL_TEXTURE23 #x84d7) (define-constant GL_TEXTURE24 #x84d8) (define-constant GL_TEXTURE25 #x84d9) (define-constant GL_TEXTURE26 #x84da) (define-constant GL_TEXTURE27 #x84db) (define-constant GL_TEXTURE28 #x84dc) (define-constant GL_TEXTURE29 #x84dd) (define-constant GL_TEXTURE30 #x84de) (define-constant GL_TEXTURE31 #x84df) (define-constant GL_ACTIVE_TEXTURE #x84e0) (define-constant GL_CLIENT_ACTIVE_TEXTURE #x84e1) (define-constant GL_MAX_TEXTURE_UNITS #x84e2) (define-constant GL_TRANSPOSE_MODELVIEW_MATRIX #x84e3) (define-constant GL_TRANSPOSE_PROJECTION_MATRIX #x84e4) (define-constant GL_TRANSPOSE_TEXTURE_MATRIX #x84e5) (define-constant GL_TRANSPOSE_COLOR_MATRIX #x84e6) (define-constant GL_MULTISAMPLE #x809d) (define-constant GL_SAMPLE_ALPHA_TO_COVERAGE #x809e) (define-constant GL_SAMPLE_ALPHA_TO_ONE #x809f) (define-constant GL_SAMPLE_COVERAGE #x80a0) (define-constant GL_SAMPLE_BUFFERS #x80a8) (define-constant GL_SAMPLES #x80a9) (define-constant GL_SAMPLE_COVERAGE_VALUE #x80aa) (define-constant GL_SAMPLE_COVERAGE_INVERT #x80ab) (define-constant GL_MULTISAMPLE_BIT #x20000000) (define-constant GL_NORMAL_MAP #x8511) (define-constant GL_REFLECTION_MAP #x8512) (define-constant GL_TEXTURE_CUBE_MAP #x8513) (define-constant GL_TEXTURE_BINDING_CUBE_MAP #x8514) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_X #x8515) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_X #x8516) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_Y #x8517) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_Y #x8518) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_Z #x8519) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_Z #x851a) (define-constant GL_PROXY_TEXTURE_CUBE_MAP #x851b) (define-constant GL_MAX_CUBE_MAP_TEXTURE_SIZE #x851c) (define-constant GL_COMPRESSED_ALPHA #x84e9) (define-constant GL_COMPRESSED_LUMINANCE #x84ea) (define-constant GL_COMPRESSED_LUMINANCE_ALPHA #x84eb) (define-constant GL_COMPRESSED_INTENSITY #x84ec) (define-constant GL_COMPRESSED_RGB #x84ed) (define-constant GL_COMPRESSED_RGBA #x84ee) (define-constant GL_TEXTURE_COMPRESSION_HINT #x84ef) (define-constant GL_TEXTURE_COMPRESSED_IMAGE_SIZE #x86a0) (define-constant GL_TEXTURE_COMPRESSED #x86a1) (define-constant GL_NUM_COMPRESSED_TEXTURE_FORMATS #x86a2) (define-constant GL_COMPRESSED_TEXTURE_FORMATS #x86a3) (define-constant GL_CLAMP_TO_BORDER #x812d) (define-constant GL_COMBINE #x8570) (define-constant GL_COMBINE_RGB #x8571) (define-constant GL_COMBINE_ALPHA #x8572) (define-constant GL_SOURCE0_RGB #x8580) (define-constant GL_SOURCE1_RGB #x8581) (define-constant GL_SOURCE2_RGB #x8582) (define-constant GL_SOURCE0_ALPHA #x8588) (define-constant GL_SOURCE1_ALPHA #x8589) (define-constant GL_SOURCE2_ALPHA #x858a) (define-constant GL_OPERAND0_RGB #x8590) (define-constant GL_OPERAND1_RGB #x8591) (define-constant GL_OPERAND2_RGB #x8592) (define-constant GL_OPERAND0_ALPHA #x8598) (define-constant GL_OPERAND1_ALPHA #x8599) (define-constant GL_OPERAND2_ALPHA #x859a) (define-constant GL_RGB_SCALE #x8573) (define-constant GL_ADD_SIGNED #x8574) (define-constant GL_INTERPOLATE #x8575) (define-constant GL_SUBTRACT #x84e7) (define-constant GL_CONSTANT #x8576) (define-constant GL_PRIMARY_COLOR #x8577) (define-constant GL_PREVIOUS #x8578) (define-constant GL_DOT3_RGB #x86ae) (define-constant GL_DOT3_RGBA #x86af) (define-constant GL_BLEND_DST_RGB #x80c8) (define-constant GL_BLEND_SRC_RGB #x80c9) (define-constant GL_BLEND_DST_ALPHA #x80ca) (define-constant GL_BLEND_SRC_ALPHA #x80cb) (define-constant GL_POINT_SIZE_MIN #x8126) (define-constant GL_POINT_SIZE_MAX #x8127) (define-constant GL_POINT_FADE_THRESHOLD_SIZE #x8128) (define-constant GL_POINT_DISTANCE_ATTENUATION #x8129) (define-constant GL_GENERATE_MIPMAP #x8191) (define-constant GL_GENERATE_MIPMAP_HINT #x8192) (define-constant GL_DEPTH_COMPONENT16 #x81a5) (define-constant GL_DEPTH_COMPONENT24 #x81a6) (define-constant GL_DEPTH_COMPONENT32 #x81a7) (define-constant GL_MIRRORED_REPEAT #x8370) (define-constant GL_FOG_COORDINATE_SOURCE #x8450) (define-constant GL_FOG_COORDINATE #x8451) (define-constant GL_FRAGMENT_DEPTH #x8452) (define-constant GL_CURRENT_FOG_COORDINATE #x8453) (define-constant GL_FOG_COORDINATE_ARRAY_TYPE #x8454) (define-constant GL_FOG_COORDINATE_ARRAY_STRIDE #x8455) (define-constant GL_FOG_COORDINATE_ARRAY_POINTER #x8456) (define-constant GL_FOG_COORDINATE_ARRAY #x8457) (define-constant GL_COLOR_SUM #x8458) (define-constant GL_CURRENT_SECONDARY_COLOR #x8459) (define-constant GL_SECONDARY_COLOR_ARRAY_SIZE #x845a) (define-constant GL_SECONDARY_COLOR_ARRAY_TYPE #x845b) (define-constant GL_SECONDARY_COLOR_ARRAY_STRIDE #x845c) (define-constant GL_SECONDARY_COLOR_ARRAY_POINTER #x845d) (define-constant GL_SECONDARY_COLOR_ARRAY #x845e) (define-constant GL_MAX_TEXTURE_LOD_BIAS #x84fd) (define-constant GL_TEXTURE_FILTER_CONTROL #x8500) (define-constant GL_TEXTURE_LOD_BIAS #x8501) (define-constant GL_INCR_WRAP #x8507) (define-constant GL_DECR_WRAP #x8508) (define-constant GL_TEXTURE_DEPTH_SIZE #x884a) (define-constant GL_DEPTH_TEXTURE_MODE #x884b) (define-constant GL_TEXTURE_COMPARE_MODE #x884c) (define-constant GL_TEXTURE_COMPARE_FUNC #x884d) (define-constant GL_COMPARE_R_TO_TEXTURE #x884e) (define-constant GL_BUFFER_SIZE #x8764) (define-constant GL_BUFFER_USAGE #x8765) (define-constant GL_QUERY_COUNTER_BITS #x8864) (define-constant GL_CURRENT_QUERY #x8865) (define-constant GL_QUERY_RESULT #x8866) (define-constant GL_QUERY_RESULT_AVAILABLE #x8867) (define-constant GL_ARRAY_BUFFER #x8892) (define-constant GL_ELEMENT_ARRAY_BUFFER #x8893) (define-constant GL_ARRAY_BUFFER_BINDING #x8894) (define-constant GL_ELEMENT_ARRAY_BUFFER_BINDING #x8895) (define-constant GL_VERTEX_ARRAY_BUFFER_BINDING #x8896) (define-constant GL_NORMAL_ARRAY_BUFFER_BINDING #x8897) (define-constant GL_COLOR_ARRAY_BUFFER_BINDING #x8898) (define-constant GL_INDEX_ARRAY_BUFFER_BINDING #x8899) (define-constant GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING #x889a) (define-constant GL_EDGE_FLAG_ARRAY_BUFFER_BINDING #x889b) (define-constant GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING #x889c) (define-constant GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING #x889d) (define-constant GL_WEIGHT_ARRAY_BUFFER_BINDING #x889e) (define-constant GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING #x889f) (define-constant GL_READ_ONLY #x88b8) (define-constant GL_WRITE_ONLY #x88b9) (define-constant GL_READ_WRITE #x88ba) (define-constant GL_BUFFER_ACCESS #x88bb) (define-constant GL_BUFFER_MAPPED #x88bc) (define-constant GL_BUFFER_MAP_POINTER #x88bd) (define-constant GL_STREAM_DRAW #x88e0) (define-constant GL_STREAM_READ #x88e1) (define-constant GL_STREAM_COPY #x88e2) (define-constant GL_STATIC_DRAW #x88e4) (define-constant GL_STATIC_READ #x88e5) (define-constant GL_STATIC_COPY #x88e6) (define-constant GL_DYNAMIC_DRAW #x88e8) (define-constant GL_DYNAMIC_READ #x88e9) (define-constant GL_DYNAMIC_COPY #x88ea) (define-constant GL_SAMPLES_PASSED #x8914) (define-constant GL_FOG_COORD_SRC #x8450) (define-constant GL_FOG_COORD #x8451) (define-constant GL_CURRENT_FOG_COORD #x8453) (define-constant GL_FOG_COORD_ARRAY_TYPE #x8454) (define-constant GL_FOG_COORD_ARRAY_STRIDE #x8455) (define-constant GL_FOG_COORD_ARRAY_POINTER #x8456) (define-constant GL_FOG_COORD_ARRAY #x8457) (define-constant GL_FOG_COORD_ARRAY_BUFFER_BINDING #x889d) (define-constant GL_SRC0_RGB #x8580) (define-constant GL_SRC1_RGB #x8581) (define-constant GL_SRC2_RGB #x8582) (define-constant GL_SRC0_ALPHA #x8588) (define-constant GL_SRC1_ALPHA #x8589) (define-constant GL_SRC2_ALPHA #x858a) (define-constant GL_BLEND_EQUATION_RGB #x8009) (define-constant GL_VERTEX_ATTRIB_ARRAY_ENABLED #x8622) (define-constant GL_VERTEX_ATTRIB_ARRAY_SIZE #x8623) (define-constant GL_VERTEX_ATTRIB_ARRAY_STRIDE #x8624) (define-constant GL_VERTEX_ATTRIB_ARRAY_TYPE #x8625) (define-constant GL_CURRENT_VERTEX_ATTRIB #x8626) (define-constant GL_VERTEX_PROGRAM_POINT_SIZE #x8642) (define-constant GL_VERTEX_PROGRAM_TWO_SIDE #x8643) (define-constant GL_VERTEX_ATTRIB_ARRAY_POINTER #x8645) (define-constant GL_STENCIL_BACK_FUNC #x8800) (define-constant GL_STENCIL_BACK_FAIL #x8801) (define-constant GL_STENCIL_BACK_PASS_DEPTH_FAIL #x8802) (define-constant GL_STENCIL_BACK_PASS_DEPTH_PASS #x8803) (define-constant GL_MAX_DRAW_BUFFERS #x8824) (define-constant GL_DRAW_BUFFER0 #x8825) (define-constant GL_DRAW_BUFFER1 #x8826) (define-constant GL_DRAW_BUFFER2 #x8827) (define-constant GL_DRAW_BUFFER3 #x8828) (define-constant GL_DRAW_BUFFER4 #x8829) (define-constant GL_DRAW_BUFFER5 #x882a) (define-constant GL_DRAW_BUFFER6 #x882b) (define-constant GL_DRAW_BUFFER7 #x882c) (define-constant GL_DRAW_BUFFER8 #x882d) (define-constant GL_DRAW_BUFFER9 #x882e) (define-constant GL_DRAW_BUFFER10 #x882f) (define-constant GL_DRAW_BUFFER11 #x8830) (define-constant GL_DRAW_BUFFER12 #x8831) (define-constant GL_DRAW_BUFFER13 #x8832) (define-constant GL_DRAW_BUFFER14 #x8833) (define-constant GL_DRAW_BUFFER15 #x8834) (define-constant GL_BLEND_EQUATION_ALPHA #x883d) (define-constant GL_POINT_SPRITE #x8861) (define-constant GL_COORD_REPLACE #x8862) (define-constant GL_MAX_VERTEX_ATTRIBS #x8869) (define-constant GL_VERTEX_ATTRIB_ARRAY_NORMALIZED #x886a) (define-constant GL_MAX_TEXTURE_COORDS #x8871) (define-constant GL_MAX_TEXTURE_IMAGE_UNITS #x8872) (define-constant GL_FRAGMENT_SHADER #x8b30) (define-constant GL_VERTEX_SHADER #x8b31) (define-constant GL_MAX_FRAGMENT_UNIFORM_COMPONENTS #x8b49) (define-constant GL_MAX_VERTEX_UNIFORM_COMPONENTS #x8b4a) (define-constant GL_MAX_VARYING_FLOATS #x8b4b) (define-constant GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS #x8b4c) (define-constant GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS #x8b4d) (define-constant GL_SHADER_TYPE #x8b4f) (define-constant GL_FLOAT_VEC2 #x8b50) (define-constant GL_FLOAT_VEC3 #x8b51) (define-constant GL_FLOAT_VEC4 #x8b52) (define-constant GL_INT_VEC2 #x8b53) (define-constant GL_INT_VEC3 #x8b54) (define-constant GL_INT_VEC4 #x8b55) (define-constant GL_BOOL #x8b56) (define-constant GL_BOOL_VEC2 #x8b57) (define-constant GL_BOOL_VEC3 #x8b58) (define-constant GL_BOOL_VEC4 #x8b59) (define-constant GL_FLOAT_MAT2 #x8b5a) (define-constant GL_FLOAT_MAT3 #x8b5b) (define-constant GL_FLOAT_MAT4 #x8b5c) (define-constant GL_SAMPLER_1D #x8b5d) (define-constant GL_SAMPLER_2D #x8b5e) (define-constant GL_SAMPLER_3D #x8b5f) (define-constant GL_SAMPLER_CUBE #x8b60) (define-constant GL_SAMPLER_1D_SHADOW #x8b61) (define-constant GL_SAMPLER_2D_SHADOW #x8b62) (define-constant GL_DELETE_STATUS #x8b80) (define-constant GL_COMPILE_STATUS #x8b81) (define-constant GL_LINK_STATUS #x8b82) (define-constant GL_VALIDATE_STATUS #x8b83) (define-constant GL_INFO_LOG_LENGTH #x8b84) (define-constant GL_ATTACHED_SHADERS #x8b85) (define-constant GL_ACTIVE_UNIFORMS #x8b86) (define-constant GL_ACTIVE_UNIFORM_MAX_LENGTH #x8b87) (define-constant GL_SHADER_SOURCE_LENGTH #x8b88) (define-constant GL_ACTIVE_ATTRIBUTES #x8b89) (define-constant GL_ACTIVE_ATTRIBUTE_MAX_LENGTH #x8b8a) (define-constant GL_FRAGMENT_SHADER_DERIVATIVE_HINT #x8b8b) (define-constant GL_SHADING_LANGUAGE_VERSION #x8b8c) (define-constant GL_CURRENT_PROGRAM #x8b8d) (define-constant GL_POINT_SPRITE_COORD_ORIGIN #x8ca0) (define-constant GL_LOWER_LEFT #x8ca1) (define-constant GL_UPPER_LEFT #x8ca2) (define-constant GL_STENCIL_BACK_REF #x8ca3) (define-constant GL_STENCIL_BACK_VALUE_MASK #x8ca4) (define-constant GL_STENCIL_BACK_WRITEMASK #x8ca5) (define-constant GL_TEXTURE0_ARB #x84c0) (define-constant GL_TEXTURE1_ARB #x84c1) (define-constant GL_TEXTURE2_ARB #x84c2) (define-constant GL_TEXTURE3_ARB #x84c3) (define-constant GL_TEXTURE4_ARB #x84c4) (define-constant GL_TEXTURE5_ARB #x84c5) (define-constant GL_TEXTURE6_ARB #x84c6) (define-constant GL_TEXTURE7_ARB #x84c7) (define-constant GL_TEXTURE8_ARB #x84c8) (define-constant GL_TEXTURE9_ARB #x84c9) (define-constant GL_TEXTURE10_ARB #x84ca) (define-constant GL_TEXTURE11_ARB #x84cb) (define-constant GL_TEXTURE12_ARB #x84cc) (define-constant GL_TEXTURE13_ARB #x84cd) (define-constant GL_TEXTURE14_ARB #x84ce) (define-constant GL_TEXTURE15_ARB #x84cf) (define-constant GL_TEXTURE16_ARB #x84d0) (define-constant GL_TEXTURE17_ARB #x84d1) (define-constant GL_TEXTURE18_ARB #x84d2) (define-constant GL_TEXTURE19_ARB #x84d3) (define-constant GL_TEXTURE20_ARB #x84d4) (define-constant GL_TEXTURE21_ARB #x84d5) (define-constant GL_TEXTURE22_ARB #x84d6) (define-constant GL_TEXTURE23_ARB #x84d7) (define-constant GL_TEXTURE24_ARB #x84d8) (define-constant GL_TEXTURE25_ARB #x84d9) (define-constant GL_TEXTURE26_ARB #x84da) (define-constant GL_TEXTURE27_ARB #x84db) (define-constant GL_TEXTURE28_ARB #x84dc) (define-constant GL_TEXTURE29_ARB #x84dd) (define-constant GL_TEXTURE30_ARB #x84de) (define-constant GL_TEXTURE31_ARB #x84df) (define-constant GL_ACTIVE_TEXTURE_ARB #x84e0) (define-constant GL_CLIENT_ACTIVE_TEXTURE_ARB #x84e1) (define-constant GL_MAX_TEXTURE_UNITS_ARB #x84e2) (define-constant GL_TRANSPOSE_MODELVIEW_MATRIX_ARB #x84e3) (define-constant GL_TRANSPOSE_PROJECTION_MATRIX_ARB #x84e4) (define-constant GL_TRANSPOSE_TEXTURE_MATRIX_ARB #x84e5) (define-constant GL_TRANSPOSE_COLOR_MATRIX_ARB #x84e6) (define-constant GL_MULTISAMPLE_ARB #x809d) (define-constant GL_SAMPLE_ALPHA_TO_COVERAGE_ARB #x809e) (define-constant GL_SAMPLE_ALPHA_TO_ONE_ARB #x809f) (define-constant GL_SAMPLE_COVERAGE_ARB #x80a0) (define-constant GL_SAMPLE_BUFFERS_ARB #x80a8) (define-constant GL_SAMPLES_ARB #x80a9) (define-constant GL_SAMPLE_COVERAGE_VALUE_ARB #x80aa) (define-constant GL_SAMPLE_COVERAGE_INVERT_ARB #x80ab) (define-constant GL_MULTISAMPLE_BIT_ARB #x20000000) (define-constant GL_NORMAL_MAP_ARB #x8511) (define-constant GL_REFLECTION_MAP_ARB #x8512) (define-constant GL_TEXTURE_CUBE_MAP_ARB #x8513) (define-constant GL_TEXTURE_BINDING_CUBE_MAP_ARB #x8514) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB #x8515) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_X_ARB #x8516) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_Y_ARB #x8517) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_ARB #x8518) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_Z_ARB #x8519) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_ARB #x851a) (define-constant GL_PROXY_TEXTURE_CUBE_MAP_ARB #x851b) (define-constant GL_MAX_CUBE_MAP_TEXTURE_SIZE_ARB #x851c) (define-constant GL_COMPRESSED_ALPHA_ARB #x84e9) (define-constant GL_COMPRESSED_LUMINANCE_ARB #x84ea) (define-constant GL_COMPRESSED_LUMINANCE_ALPHA_ARB #x84eb) (define-constant GL_COMPRESSED_INTENSITY_ARB #x84ec) (define-constant GL_COMPRESSED_RGB_ARB #x84ed) (define-constant GL_COMPRESSED_RGBA_ARB #x84ee) (define-constant GL_TEXTURE_COMPRESSION_HINT_ARB #x84ef) (define-constant GL_TEXTURE_COMPRESSED_IMAGE_SIZE_ARB #x86a0) (define-constant GL_TEXTURE_COMPRESSED_ARB #x86a1) (define-constant GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB #x86a2) (define-constant GL_COMPRESSED_TEXTURE_FORMATS_ARB #x86a3) (define-constant GL_CLAMP_TO_BORDER_ARB #x812d) (define-constant GL_POINT_SIZE_MIN_ARB #x8126) (define-constant GL_POINT_SIZE_MAX_ARB #x8127) (define-constant GL_POINT_FADE_THRESHOLD_SIZE_ARB #x8128) (define-constant GL_POINT_DISTANCE_ATTENUATION_ARB #x8129) (define-constant GL_MAX_VERTEX_UNITS_ARB #x86a4) (define-constant GL_ACTIVE_VERTEX_UNITS_ARB #x86a5) (define-constant GL_WEIGHT_SUM_UNITY_ARB #x86a6) (define-constant GL_VERTEX_BLEND_ARB #x86a7) (define-constant GL_CURRENT_WEIGHT_ARB #x86a8) (define-constant GL_WEIGHT_ARRAY_TYPE_ARB #x86a9) (define-constant GL_WEIGHT_ARRAY_STRIDE_ARB #x86aa) (define-constant GL_WEIGHT_ARRAY_SIZE_ARB #x86ab) (define-constant GL_WEIGHT_ARRAY_POINTER_ARB #x86ac) (define-constant GL_WEIGHT_ARRAY_ARB #x86ad) (define-constant GL_MODELVIEW0_ARB #x1700) (define-constant GL_MODELVIEW1_ARB #x850a) (define-constant GL_MODELVIEW2_ARB #x8722) (define-constant GL_MODELVIEW3_ARB #x8723) (define-constant GL_MODELVIEW4_ARB #x8724) (define-constant GL_MODELVIEW5_ARB #x8725) (define-constant GL_MODELVIEW6_ARB #x8726) (define-constant GL_MODELVIEW7_ARB #x8727) (define-constant GL_MODELVIEW8_ARB #x8728) (define-constant GL_MODELVIEW9_ARB #x8729) (define-constant GL_MODELVIEW10_ARB #x872a) (define-constant GL_MODELVIEW11_ARB #x872b) (define-constant GL_MODELVIEW12_ARB #x872c) (define-constant GL_MODELVIEW13_ARB #x872d) (define-constant GL_MODELVIEW14_ARB #x872e) (define-constant GL_MODELVIEW15_ARB #x872f) (define-constant GL_MODELVIEW16_ARB #x8730) (define-constant GL_MODELVIEW17_ARB #x8731) (define-constant GL_MODELVIEW18_ARB #x8732) (define-constant GL_MODELVIEW19_ARB #x8733) (define-constant GL_MODELVIEW20_ARB #x8734) (define-constant GL_MODELVIEW21_ARB #x8735) (define-constant GL_MODELVIEW22_ARB #x8736) (define-constant GL_MODELVIEW23_ARB #x8737) (define-constant GL_MODELVIEW24_ARB #x8738) (define-constant GL_MODELVIEW25_ARB #x8739) (define-constant GL_MODELVIEW26_ARB #x873a) (define-constant GL_MODELVIEW27_ARB #x873b) (define-constant GL_MODELVIEW28_ARB #x873c) (define-constant GL_MODELVIEW29_ARB #x873d) (define-constant GL_MODELVIEW30_ARB #x873e) (define-constant GL_MODELVIEW31_ARB #x873f) (define-constant GL_MATRIX_PALETTE_ARB #x8840) (define-constant GL_MAX_MATRIX_PALETTE_STACK_DEPTH_ARB #x8841) (define-constant GL_MAX_PALETTE_MATRICES_ARB #x8842) (define-constant GL_CURRENT_PALETTE_MATRIX_ARB #x8843) (define-constant GL_MATRIX_INDEX_ARRAY_ARB #x8844) (define-constant GL_CURRENT_MATRIX_INDEX_ARB #x8845) (define-constant GL_MATRIX_INDEX_ARRAY_SIZE_ARB #x8846) (define-constant GL_MATRIX_INDEX_ARRAY_TYPE_ARB #x8847) (define-constant GL_MATRIX_INDEX_ARRAY_STRIDE_ARB #x8848) (define-constant GL_MATRIX_INDEX_ARRAY_POINTER_ARB #x8849) (define-constant GL_COMBINE_ARB #x8570) (define-constant GL_COMBINE_RGB_ARB #x8571) (define-constant GL_COMBINE_ALPHA_ARB #x8572) (define-constant GL_SOURCE0_RGB_ARB #x8580) (define-constant GL_SOURCE1_RGB_ARB #x8581) (define-constant GL_SOURCE2_RGB_ARB #x8582) (define-constant GL_SOURCE0_ALPHA_ARB #x8588) (define-constant GL_SOURCE1_ALPHA_ARB #x8589) (define-constant GL_SOURCE2_ALPHA_ARB #x858a) (define-constant GL_OPERAND0_RGB_ARB #x8590) (define-constant GL_OPERAND1_RGB_ARB #x8591) (define-constant GL_OPERAND2_RGB_ARB #x8592) (define-constant GL_OPERAND0_ALPHA_ARB #x8598) (define-constant GL_OPERAND1_ALPHA_ARB #x8599) (define-constant GL_OPERAND2_ALPHA_ARB #x859a) (define-constant GL_RGB_SCALE_ARB #x8573) (define-constant GL_ADD_SIGNED_ARB #x8574) (define-constant GL_INTERPOLATE_ARB #x8575) (define-constant GL_SUBTRACT_ARB #x84e7) (define-constant GL_CONSTANT_ARB #x8576) (define-constant GL_PRIMARY_COLOR_ARB #x8577) (define-constant GL_PREVIOUS_ARB #x8578) (define-constant GL_DOT3_RGB_ARB #x86ae) (define-constant GL_DOT3_RGBA_ARB #x86af) (define-constant GL_MIRRORED_REPEAT_ARB #x8370) (define-constant GL_DEPTH_COMPONENT16_ARB #x81a5) (define-constant GL_DEPTH_COMPONENT24_ARB #x81a6) (define-constant GL_DEPTH_COMPONENT32_ARB #x81a7) (define-constant GL_TEXTURE_DEPTH_SIZE_ARB #x884a) (define-constant GL_DEPTH_TEXTURE_MODE_ARB #x884b) (define-constant GL_TEXTURE_COMPARE_MODE_ARB #x884c) (define-constant GL_TEXTURE_COMPARE_FUNC_ARB #x884d) (define-constant GL_COMPARE_R_TO_TEXTURE_ARB #x884e) (define-constant GL_TEXTURE_COMPARE_FAIL_VALUE_ARB #x80bf) (define-constant GL_COLOR_SUM_ARB #x8458) (define-constant GL_VERTEX_PROGRAM_ARB #x8620) (define-constant GL_VERTEX_ATTRIB_ARRAY_ENABLED_ARB #x8622) (define-constant GL_VERTEX_ATTRIB_ARRAY_SIZE_ARB #x8623) (define-constant GL_VERTEX_ATTRIB_ARRAY_STRIDE_ARB #x8624) (define-constant GL_VERTEX_ATTRIB_ARRAY_TYPE_ARB #x8625) (define-constant GL_CURRENT_VERTEX_ATTRIB_ARB #x8626) (define-constant GL_PROGRAM_LENGTH_ARB #x8627) (define-constant GL_PROGRAM_STRING_ARB #x8628) (define-constant GL_MAX_PROGRAM_MATRIX_STACK_DEPTH_ARB #x862e) (define-constant GL_MAX_PROGRAM_MATRICES_ARB #x862f) (define-constant GL_CURRENT_MATRIX_STACK_DEPTH_ARB #x8640) (define-constant GL_CURRENT_MATRIX_ARB #x8641) (define-constant GL_VERTEX_PROGRAM_POINT_SIZE_ARB #x8642) (define-constant GL_VERTEX_PROGRAM_TWO_SIDE_ARB #x8643) (define-constant GL_VERTEX_ATTRIB_ARRAY_POINTER_ARB #x8645) (define-constant GL_PROGRAM_ERROR_POSITION_ARB #x864b) (define-constant GL_PROGRAM_BINDING_ARB #x8677) (define-constant GL_MAX_VERTEX_ATTRIBS_ARB #x8869) (define-constant GL_VERTEX_ATTRIB_ARRAY_NORMALIZED_ARB #x886a) (define-constant GL_PROGRAM_ERROR_STRING_ARB #x8874) (define-constant GL_PROGRAM_FORMAT_ASCII_ARB #x8875) (define-constant GL_PROGRAM_FORMAT_ARB #x8876) (define-constant GL_PROGRAM_INSTRUCTIONS_ARB #x88a0) (define-constant GL_MAX_PROGRAM_INSTRUCTIONS_ARB #x88a1) (define-constant GL_PROGRAM_NATIVE_INSTRUCTIONS_ARB #x88a2) (define-constant GL_MAX_PROGRAM_NATIVE_INSTRUCTIONS_ARB #x88a3) (define-constant GL_PROGRAM_TEMPORARIES_ARB #x88a4) (define-constant GL_MAX_PROGRAM_TEMPORARIES_ARB #x88a5) (define-constant GL_PROGRAM_NATIVE_TEMPORARIES_ARB #x88a6) (define-constant GL_MAX_PROGRAM_NATIVE_TEMPORARIES_ARB #x88a7) (define-constant GL_PROGRAM_PARAMETERS_ARB #x88a8) (define-constant GL_MAX_PROGRAM_PARAMETERS_ARB #x88a9) (define-constant GL_PROGRAM_NATIVE_PARAMETERS_ARB #x88aa) (define-constant GL_MAX_PROGRAM_NATIVE_PARAMETERS_ARB #x88ab) (define-constant GL_PROGRAM_ATTRIBS_ARB #x88ac) (define-constant GL_MAX_PROGRAM_ATTRIBS_ARB #x88ad) (define-constant GL_PROGRAM_NATIVE_ATTRIBS_ARB #x88ae) (define-constant GL_MAX_PROGRAM_NATIVE_ATTRIBS_ARB #x88af) (define-constant GL_PROGRAM_ADDRESS_REGISTERS_ARB #x88b0) (define-constant GL_MAX_PROGRAM_ADDRESS_REGISTERS_ARB #x88b1) (define-constant GL_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB #x88b2) (define-constant GL_MAX_PROGRAM_NATIVE_ADDRESS_REGISTERS_ARB #x88b3) (define-constant GL_MAX_PROGRAM_LOCAL_PARAMETERS_ARB #x88b4) (define-constant GL_MAX_PROGRAM_ENV_PARAMETERS_ARB #x88b5) (define-constant GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB #x88b6) (define-constant GL_TRANSPOSE_CURRENT_MATRIX_ARB #x88b7) (define-constant GL_MATRIX0_ARB #x88c0) (define-constant GL_MATRIX1_ARB #x88c1) (define-constant GL_MATRIX2_ARB #x88c2) (define-constant GL_MATRIX3_ARB #x88c3) (define-constant GL_MATRIX4_ARB #x88c4) (define-constant GL_MATRIX5_ARB #x88c5) (define-constant GL_MATRIX6_ARB #x88c6) (define-constant GL_MATRIX7_ARB #x88c7) (define-constant GL_MATRIX8_ARB #x88c8) (define-constant GL_MATRIX9_ARB #x88c9) (define-constant GL_MATRIX10_ARB #x88ca) (define-constant GL_MATRIX11_ARB #x88cb) (define-constant GL_MATRIX12_ARB #x88cc) (define-constant GL_MATRIX13_ARB #x88cd) (define-constant GL_MATRIX14_ARB #x88ce) (define-constant GL_MATRIX15_ARB #x88cf) (define-constant GL_MATRIX16_ARB #x88d0) (define-constant GL_MATRIX17_ARB #x88d1) (define-constant GL_MATRIX18_ARB #x88d2) (define-constant GL_MATRIX19_ARB #x88d3) (define-constant GL_MATRIX20_ARB #x88d4) (define-constant GL_MATRIX21_ARB #x88d5) (define-constant GL_MATRIX22_ARB #x88d6) (define-constant GL_MATRIX23_ARB #x88d7) (define-constant GL_MATRIX24_ARB #x88d8) (define-constant GL_MATRIX25_ARB #x88d9) (define-constant GL_MATRIX26_ARB #x88da) (define-constant GL_MATRIX27_ARB #x88db) (define-constant GL_MATRIX28_ARB #x88dc) (define-constant GL_MATRIX29_ARB #x88dd) (define-constant GL_MATRIX30_ARB #x88de) (define-constant GL_MATRIX31_ARB #x88df) (define-constant GL_FRAGMENT_PROGRAM_ARB #x8804) (define-constant GL_PROGRAM_ALU_INSTRUCTIONS_ARB #x8805) (define-constant GL_PROGRAM_TEX_INSTRUCTIONS_ARB #x8806) (define-constant GL_PROGRAM_TEX_INDIRECTIONS_ARB #x8807) (define-constant GL_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB #x8808) (define-constant GL_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB #x8809) (define-constant GL_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB #x880a) (define-constant GL_MAX_PROGRAM_ALU_INSTRUCTIONS_ARB #x880b) (define-constant GL_MAX_PROGRAM_TEX_INSTRUCTIONS_ARB #x880c) (define-constant GL_MAX_PROGRAM_TEX_INDIRECTIONS_ARB #x880d) (define-constant GL_MAX_PROGRAM_NATIVE_ALU_INSTRUCTIONS_ARB #x880e) (define-constant GL_MAX_PROGRAM_NATIVE_TEX_INSTRUCTIONS_ARB #x880f) (define-constant GL_MAX_PROGRAM_NATIVE_TEX_INDIRECTIONS_ARB #x8810) (define-constant GL_MAX_TEXTURE_COORDS_ARB #x8871) (define-constant GL_MAX_TEXTURE_IMAGE_UNITS_ARB #x8872) (define-constant GL_BUFFER_SIZE_ARB #x8764) (define-constant GL_BUFFER_USAGE_ARB #x8765) (define-constant GL_ARRAY_BUFFER_ARB #x8892) (define-constant GL_ELEMENT_ARRAY_BUFFER_ARB #x8893) (define-constant GL_ARRAY_BUFFER_BINDING_ARB #x8894) (define-constant GL_ELEMENT_ARRAY_BUFFER_BINDING_ARB #x8895) (define-constant GL_VERTEX_ARRAY_BUFFER_BINDING_ARB #x8896) (define-constant GL_NORMAL_ARRAY_BUFFER_BINDING_ARB #x8897) (define-constant GL_COLOR_ARRAY_BUFFER_BINDING_ARB #x8898) (define-constant GL_INDEX_ARRAY_BUFFER_BINDING_ARB #x8899) (define-constant GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING_ARB #x889a) (define-constant GL_EDGE_FLAG_ARRAY_BUFFER_BINDING_ARB #x889b) (define-constant GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING_ARB #x889c) (define-constant GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING_ARB #x889d) (define-constant GL_WEIGHT_ARRAY_BUFFER_BINDING_ARB #x889e) (define-constant GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING_ARB #x889f) (define-constant GL_READ_ONLY_ARB #x88b8) (define-constant GL_WRITE_ONLY_ARB #x88b9) (define-constant GL_READ_WRITE_ARB #x88ba) (define-constant GL_BUFFER_ACCESS_ARB #x88bb) (define-constant GL_BUFFER_MAPPED_ARB #x88bc) (define-constant GL_BUFFER_MAP_POINTER_ARB #x88bd) (define-constant GL_STREAM_DRAW_ARB #x88e0) (define-constant GL_STREAM_READ_ARB #x88e1) (define-constant GL_STREAM_COPY_ARB #x88e2) (define-constant GL_STATIC_DRAW_ARB #x88e4) (define-constant GL_STATIC_READ_ARB #x88e5) (define-constant GL_STATIC_COPY_ARB #x88e6) (define-constant GL_DYNAMIC_DRAW_ARB #x88e8) (define-constant GL_DYNAMIC_READ_ARB #x88e9) (define-constant GL_DYNAMIC_COPY_ARB #x88ea) (define-constant GL_QUERY_COUNTER_BITS_ARB #x8864) (define-constant GL_CURRENT_QUERY_ARB #x8865) (define-constant GL_QUERY_RESULT_ARB #x8866) (define-constant GL_QUERY_RESULT_AVAILABLE_ARB #x8867) (define-constant GL_SAMPLES_PASSED_ARB #x8914) (define-constant GL_PROGRAM_OBJECT_ARB #x8b40) (define-constant GL_SHADER_OBJECT_ARB #x8b48) (define-constant GL_OBJECT_TYPE_ARB #x8b4e) (define-constant GL_OBJECT_SUBTYPE_ARB #x8b4f) (define-constant GL_FLOAT_VEC2_ARB #x8b50) (define-constant GL_FLOAT_VEC3_ARB #x8b51) (define-constant GL_FLOAT_VEC4_ARB #x8b52) (define-constant GL_INT_VEC2_ARB #x8b53) (define-constant GL_INT_VEC3_ARB #x8b54) (define-constant GL_INT_VEC4_ARB #x8b55) (define-constant GL_BOOL_ARB #x8b56) (define-constant GL_BOOL_VEC2_ARB #x8b57) (define-constant GL_BOOL_VEC3_ARB #x8b58) (define-constant GL_BOOL_VEC4_ARB #x8b59) (define-constant GL_FLOAT_MAT2_ARB #x8b5a) (define-constant GL_FLOAT_MAT3_ARB #x8b5b) (define-constant GL_FLOAT_MAT4_ARB #x8b5c) (define-constant GL_SAMPLER_1D_ARB #x8b5d) (define-constant GL_SAMPLER_2D_ARB #x8b5e) (define-constant GL_SAMPLER_3D_ARB #x8b5f) (define-constant GL_SAMPLER_CUBE_ARB #x8b60) (define-constant GL_SAMPLER_1D_SHADOW_ARB #x8b61) (define-constant GL_SAMPLER_2D_SHADOW_ARB #x8b62) (define-constant GL_SAMPLER_2D_RECT_ARB #x8b63) (define-constant GL_SAMPLER_2D_RECT_SHADOW_ARB #x8b64) (define-constant GL_OBJECT_DELETE_STATUS_ARB #x8b80) (define-constant GL_OBJECT_COMPILE_STATUS_ARB #x8b81) (define-constant GL_OBJECT_LINK_STATUS_ARB #x8b82) (define-constant GL_OBJECT_VALIDATE_STATUS_ARB #x8b83) (define-constant GL_OBJECT_INFO_LOG_LENGTH_ARB #x8b84) (define-constant GL_OBJECT_ATTACHED_OBJECTS_ARB #x8b85) (define-constant GL_OBJECT_ACTIVE_UNIFORMS_ARB #x8b86) (define-constant GL_OBJECT_ACTIVE_UNIFORM_MAX_LENGTH_ARB #x8b87) (define-constant GL_OBJECT_SHADER_SOURCE_LENGTH_ARB #x8b88) (define-constant GL_VERTEX_SHADER_ARB #x8b31) (define-constant GL_MAX_VERTEX_UNIFORM_COMPONENTS_ARB #x8b4a) (define-constant GL_MAX_VARYING_FLOATS_ARB #x8b4b) (define-constant GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB #x8b4c) (define-constant GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS_ARB #x8b4d) (define-constant GL_OBJECT_ACTIVE_ATTRIBUTES_ARB #x8b89) (define-constant GL_OBJECT_ACTIVE_ATTRIBUTE_MAX_LENGTH_ARB #x8b8a) (define-constant GL_FRAGMENT_SHADER_ARB #x8b30) (define-constant GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB #x8b49) (define-constant GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB #x8b8b) (define-constant GL_SHADING_LANGUAGE_VERSION_ARB #x8b8c) (define-constant GL_POINT_SPRITE_ARB #x8861) (define-constant GL_COORD_REPLACE_ARB #x8862) (define-constant GL_MAX_DRAW_BUFFERS_ARB #x8824) (define-constant GL_DRAW_BUFFER0_ARB #x8825) (define-constant GL_DRAW_BUFFER1_ARB #x8826) (define-constant GL_DRAW_BUFFER2_ARB #x8827) (define-constant GL_DRAW_BUFFER3_ARB #x8828) (define-constant GL_DRAW_BUFFER4_ARB #x8829) (define-constant GL_DRAW_BUFFER5_ARB #x882a) (define-constant GL_DRAW_BUFFER6_ARB #x882b) (define-constant GL_DRAW_BUFFER7_ARB #x882c) (define-constant GL_DRAW_BUFFER8_ARB #x882d) (define-constant GL_DRAW_BUFFER9_ARB #x882e) (define-constant GL_DRAW_BUFFER10_ARB #x882f) (define-constant GL_DRAW_BUFFER11_ARB #x8830) (define-constant GL_DRAW_BUFFER12_ARB #x8831) (define-constant GL_DRAW_BUFFER13_ARB #x8832) (define-constant GL_DRAW_BUFFER14_ARB #x8833) (define-constant GL_DRAW_BUFFER15_ARB #x8834) (define-constant GL_TEXTURE_RECTANGLE_ARB #x84f5) (define-constant GL_TEXTURE_BINDING_RECTANGLE_ARB #x84f6) (define-constant GL_PROXY_TEXTURE_RECTANGLE_ARB #x84f7) (define-constant GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB #x84f8) (define-constant GL_RGBA_FLOAT_MODE_ARB #x8820) (define-constant GL_CLAMP_VERTEX_COLOR_ARB #x891a) (define-constant GL_CLAMP_FRAGMENT_COLOR_ARB #x891b) (define-constant GL_CLAMP_READ_COLOR_ARB #x891c) (define-constant GL_FIXED_ONLY_ARB #x891d) (define-constant GL_HALF_FLOAT_ARB #x140b) (define-constant GL_TEXTURE_RED_TYPE_ARB #x8c10) (define-constant GL_TEXTURE_GREEN_TYPE_ARB #x8c11) (define-constant GL_TEXTURE_BLUE_TYPE_ARB #x8c12) (define-constant GL_TEXTURE_ALPHA_TYPE_ARB #x8c13) (define-constant GL_TEXTURE_LUMINANCE_TYPE_ARB #x8c14) (define-constant GL_TEXTURE_INTENSITY_TYPE_ARB #x8c15) (define-constant GL_TEXTURE_DEPTH_TYPE_ARB #x8c16) (define-constant GL_UNSIGNED_NORMALIZED_ARB #x8c17) (define-constant GL_RGBA32F_ARB #x8814) (define-constant GL_RGB32F_ARB #x8815) (define-constant GL_ALPHA32F_ARB #x8816) (define-constant GL_INTENSITY32F_ARB #x8817) (define-constant GL_LUMINANCE32F_ARB #x8818) (define-constant GL_LUMINANCE_ALPHA32F_ARB #x8819) (define-constant GL_RGBA16F_ARB #x881a) (define-constant GL_RGB16F_ARB #x881b) (define-constant GL_ALPHA16F_ARB #x881c) (define-constant GL_INTENSITY16F_ARB #x881d) (define-constant GL_LUMINANCE16F_ARB #x881e) (define-constant GL_LUMINANCE_ALPHA16F_ARB #x881f) (define-constant GL_PIXEL_PACK_BUFFER_ARB #x88eb) (define-constant GL_PIXEL_UNPACK_BUFFER_ARB #x88ec) (define-constant GL_PIXEL_PACK_BUFFER_BINDING_ARB #x88ed) (define-constant GL_PIXEL_UNPACK_BUFFER_BINDING_ARB #x88ef) (define-constant GL_ABGR_EXT #x8000) (define-constant GL_CONSTANT_COLOR_EXT #x8001) (define-constant GL_ONE_MINUS_CONSTANT_COLOR_EXT #x8002) (define-constant GL_CONSTANT_ALPHA_EXT #x8003) (define-constant GL_ONE_MINUS_CONSTANT_ALPHA_EXT #x8004) (define-constant GL_BLEND_COLOR_EXT #x8005) (define-constant GL_POLYGON_OFFSET_EXT #x8037) (define-constant GL_POLYGON_OFFSET_FACTOR_EXT #x8038) (define-constant GL_POLYGON_OFFSET_BIAS_EXT #x8039) (define-constant GL_ALPHA4_EXT #x803b) (define-constant GL_ALPHA8_EXT #x803c) (define-constant GL_ALPHA12_EXT #x803d) (define-constant GL_ALPHA16_EXT #x803e) (define-constant GL_LUMINANCE4_EXT #x803f) (define-constant GL_LUMINANCE8_EXT #x8040) (define-constant GL_LUMINANCE12_EXT #x8041) (define-constant GL_LUMINANCE16_EXT #x8042) (define-constant GL_LUMINANCE4_ALPHA4_EXT #x8043) (define-constant GL_LUMINANCE6_ALPHA2_EXT #x8044) (define-constant GL_LUMINANCE8_ALPHA8_EXT #x8045) (define-constant GL_LUMINANCE12_ALPHA4_EXT #x8046) (define-constant GL_LUMINANCE12_ALPHA12_EXT #x8047) (define-constant GL_LUMINANCE16_ALPHA16_EXT #x8048) (define-constant GL_INTENSITY_EXT #x8049) (define-constant GL_INTENSITY4_EXT #x804a) (define-constant GL_INTENSITY8_EXT #x804b) (define-constant GL_INTENSITY12_EXT #x804c) (define-constant GL_INTENSITY16_EXT #x804d) (define-constant GL_RGB2_EXT #x804e) (define-constant GL_RGB4_EXT #x804f) (define-constant GL_RGB5_EXT #x8050) (define-constant GL_RGB8_EXT #x8051) (define-constant GL_RGB10_EXT #x8052) (define-constant GL_RGB12_EXT #x8053) (define-constant GL_RGB16_EXT #x8054) (define-constant GL_RGBA2_EXT #x8055) (define-constant GL_RGBA4_EXT #x8056) (define-constant GL_RGB5_A1_EXT #x8057) (define-constant GL_RGBA8_EXT #x8058) (define-constant GL_RGB10_A2_EXT #x8059) (define-constant GL_RGBA12_EXT #x805a) (define-constant GL_RGBA16_EXT #x805b) (define-constant GL_TEXTURE_RED_SIZE_EXT #x805c) (define-constant GL_TEXTURE_GREEN_SIZE_EXT #x805d) (define-constant GL_TEXTURE_BLUE_SIZE_EXT #x805e) (define-constant GL_TEXTURE_ALPHA_SIZE_EXT #x805f) (define-constant GL_TEXTURE_LUMINANCE_SIZE_EXT #x8060) (define-constant GL_TEXTURE_INTENSITY_SIZE_EXT #x8061) (define-constant GL_REPLACE_EXT #x8062) (define-constant GL_PROXY_TEXTURE_1D_EXT #x8063) (define-constant GL_PROXY_TEXTURE_2D_EXT #x8064) (define-constant GL_TEXTURE_TOO_LARGE_EXT #x8065) (define-constant GL_PACK_SKIP_IMAGES_EXT #x806b) (define-constant GL_PACK_IMAGE_HEIGHT_EXT #x806c) (define-constant GL_UNPACK_SKIP_IMAGES_EXT #x806d) (define-constant GL_UNPACK_IMAGE_HEIGHT_EXT #x806e) (define-constant GL_TEXTURE_3D_EXT #x806f) (define-constant GL_PROXY_TEXTURE_3D_EXT #x8070) (define-constant GL_TEXTURE_DEPTH_EXT #x8071) (define-constant GL_TEXTURE_WRAP_R_EXT #x8072) (define-constant GL_MAX_3D_TEXTURE_SIZE_EXT #x8073) (define-constant GL_FILTER4_SGIS #x8146) (define-constant GL_TEXTURE_FILTER4_SIZE_SGIS #x8147) (define-constant GL_HISTOGRAM_EXT #x8024) (define-constant GL_PROXY_HISTOGRAM_EXT #x8025) (define-constant GL_HISTOGRAM_WIDTH_EXT #x8026) (define-constant GL_HISTOGRAM_FORMAT_EXT #x8027) (define-constant GL_HISTOGRAM_RED_SIZE_EXT #x8028) (define-constant GL_HISTOGRAM_GREEN_SIZE_EXT #x8029) (define-constant GL_HISTOGRAM_BLUE_SIZE_EXT #x802a) (define-constant GL_HISTOGRAM_ALPHA_SIZE_EXT #x802b) (define-constant GL_HISTOGRAM_LUMINANCE_SIZE_EXT #x802c) (define-constant GL_HISTOGRAM_SINK_EXT #x802d) (define-constant GL_MINMAX_EXT #x802e) (define-constant GL_MINMAX_FORMAT_EXT #x802f) (define-constant GL_MINMAX_SINK_EXT #x8030) (define-constant GL_TABLE_TOO_LARGE_EXT #x8031) (define-constant GL_CONVOLUTION_1D_EXT #x8010) (define-constant GL_CONVOLUTION_2D_EXT #x8011) (define-constant GL_SEPARABLE_2D_EXT #x8012) (define-constant GL_CONVOLUTION_BORDER_MODE_EXT #x8013) (define-constant GL_CONVOLUTION_FILTER_SCALE_EXT #x8014) (define-constant GL_CONVOLUTION_FILTER_BIAS_EXT #x8015) (define-constant GL_REDUCE_EXT #x8016) (define-constant GL_CONVOLUTION_FORMAT_EXT #x8017) (define-constant GL_CONVOLUTION_WIDTH_EXT #x8018) (define-constant GL_CONVOLUTION_HEIGHT_EXT #x8019) (define-constant GL_MAX_CONVOLUTION_WIDTH_EXT #x801a) (define-constant GL_MAX_CONVOLUTION_HEIGHT_EXT #x801b) (define-constant GL_POST_CONVOLUTION_RED_SCALE_EXT #x801c) (define-constant GL_POST_CONVOLUTION_GREEN_SCALE_EXT #x801d) (define-constant GL_POST_CONVOLUTION_BLUE_SCALE_EXT #x801e) (define-constant GL_POST_CONVOLUTION_ALPHA_SCALE_EXT #x801f) (define-constant GL_POST_CONVOLUTION_RED_BIAS_EXT #x8020) (define-constant GL_POST_CONVOLUTION_GREEN_BIAS_EXT #x8021) (define-constant GL_POST_CONVOLUTION_BLUE_BIAS_EXT #x8022) (define-constant GL_POST_CONVOLUTION_ALPHA_BIAS_EXT #x8023) (define-constant GL_COLOR_MATRIX_SGI #x80b1) (define-constant GL_COLOR_MATRIX_STACK_DEPTH_SGI #x80b2) (define-constant GL_MAX_COLOR_MATRIX_STACK_DEPTH_SGI #x80b3) (define-constant GL_POST_COLOR_MATRIX_RED_SCALE_SGI #x80b4) (define-constant GL_POST_COLOR_MATRIX_GREEN_SCALE_SGI #x80b5) (define-constant GL_POST_COLOR_MATRIX_BLUE_SCALE_SGI #x80b6) (define-constant GL_POST_COLOR_MATRIX_ALPHA_SCALE_SGI #x80b7) (define-constant GL_POST_COLOR_MATRIX_RED_BIAS_SGI #x80b8) (define-constant GL_POST_COLOR_MATRIX_GREEN_BIAS_SGI #x80b9) (define-constant GL_POST_COLOR_MATRIX_BLUE_BIAS_SGI #x80ba) (define-constant GL_POST_COLOR_MATRIX_ALPHA_BIAS_SGI #x80bb) (define-constant GL_COLOR_TABLE_SGI #x80d0) (define-constant GL_POST_CONVOLUTION_COLOR_TABLE_SGI #x80d1) (define-constant GL_POST_COLOR_MATRIX_COLOR_TABLE_SGI #x80d2) (define-constant GL_PROXY_COLOR_TABLE_SGI #x80d3) (define-constant GL_PROXY_POST_CONVOLUTION_COLOR_TABLE_SGI #x80d4) (define-constant GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE_SGI #x80d5) (define-constant GL_COLOR_TABLE_SCALE_SGI #x80d6) (define-constant GL_COLOR_TABLE_BIAS_SGI #x80d7) (define-constant GL_COLOR_TABLE_FORMAT_SGI #x80d8) (define-constant GL_COLOR_TABLE_WIDTH_SGI #x80d9) (define-constant GL_COLOR_TABLE_RED_SIZE_SGI #x80da) (define-constant GL_COLOR_TABLE_GREEN_SIZE_SGI #x80db) (define-constant GL_COLOR_TABLE_BLUE_SIZE_SGI #x80dc) (define-constant GL_COLOR_TABLE_ALPHA_SIZE_SGI #x80dd) (define-constant GL_COLOR_TABLE_LUMINANCE_SIZE_SGI #x80de) (define-constant GL_COLOR_TABLE_INTENSITY_SIZE_SGI #x80df) (define-constant GL_PIXEL_TEXTURE_SGIS #x8353) (define-constant GL_PIXEL_FRAGMENT_RGB_SOURCE_SGIS #x8354) (define-constant GL_PIXEL_FRAGMENT_ALPHA_SOURCE_SGIS #x8355) (define-constant GL_PIXEL_GROUP_COLOR_SGIS #x8356) (define-constant GL_PIXEL_TEX_GEN_SGIX #x8139) (define-constant GL_PIXEL_TEX_GEN_MODE_SGIX #x832b) (define-constant GL_PACK_SKIP_VOLUMES_SGIS #x8130) (define-constant GL_PACK_IMAGE_DEPTH_SGIS #x8131) (define-constant GL_UNPACK_SKIP_VOLUMES_SGIS #x8132) (define-constant GL_UNPACK_IMAGE_DEPTH_SGIS #x8133) (define-constant GL_TEXTURE_4D_SGIS #x8134) (define-constant GL_PROXY_TEXTURE_4D_SGIS #x8135) (define-constant GL_TEXTURE_4DSIZE_SGIS #x8136) (define-constant GL_TEXTURE_WRAP_Q_SGIS #x8137) (define-constant GL_MAX_4D_TEXTURE_SIZE_SGIS #x8138) (define-constant GL_TEXTURE_4D_BINDING_SGIS #x814f) (define-constant GL_TEXTURE_COLOR_TABLE_SGI #x80bc) (define-constant GL_PROXY_TEXTURE_COLOR_TABLE_SGI #x80bd) (define-constant GL_CMYK_EXT #x800c) (define-constant GL_CMYKA_EXT #x800d) (define-constant GL_PACK_CMYK_HINT_EXT #x800e) (define-constant GL_UNPACK_CMYK_HINT_EXT #x800f) (define-constant GL_TEXTURE_PRIORITY_EXT #x8066) (define-constant GL_TEXTURE_RESIDENT_EXT #x8067) (define-constant GL_TEXTURE_1D_BINDING_EXT #x8068) (define-constant GL_TEXTURE_2D_BINDING_EXT #x8069) (define-constant GL_TEXTURE_3D_BINDING_EXT #x806a) (define-constant GL_DETAIL_TEXTURE_2D_SGIS #x8095) (define-constant GL_DETAIL_TEXTURE_2D_BINDING_SGIS #x8096) (define-constant GL_LINEAR_DETAIL_SGIS #x8097) (define-constant GL_LINEAR_DETAIL_ALPHA_SGIS #x8098) (define-constant GL_LINEAR_DETAIL_COLOR_SGIS #x8099) (define-constant GL_DETAIL_TEXTURE_LEVEL_SGIS #x809a) (define-constant GL_DETAIL_TEXTURE_MODE_SGIS #x809b) (define-constant GL_DETAIL_TEXTURE_FUNC_POINTS_SGIS #x809c) (define-constant GL_LINEAR_SHARPEN_SGIS #x80ad) (define-constant GL_LINEAR_SHARPEN_ALPHA_SGIS #x80ae) (define-constant GL_LINEAR_SHARPEN_COLOR_SGIS #x80af) (define-constant GL_SHARPEN_TEXTURE_FUNC_POINTS_SGIS #x80b0) (define-constant GL_UNSIGNED_BYTE_3_3_2_EXT #x8032) (define-constant GL_UNSIGNED_SHORT_4_4_4_4_EXT #x8033) (define-constant GL_UNSIGNED_SHORT_5_5_5_1_EXT #x8034) (define-constant GL_UNSIGNED_INT_8_8_8_8_EXT #x8035) (define-constant GL_UNSIGNED_INT_10_10_10_2_EXT #x8036) (define-constant GL_TEXTURE_MIN_LOD_SGIS #x813a) (define-constant GL_TEXTURE_MAX_LOD_SGIS #x813b) (define-constant GL_TEXTURE_BASE_LEVEL_SGIS #x813c) (define-constant GL_TEXTURE_MAX_LEVEL_SGIS #x813d) (define-constant GL_MULTISAMPLE_SGIS #x809d) (define-constant GL_SAMPLE_ALPHA_TO_MASK_SGIS #x809e) (define-constant GL_SAMPLE_ALPHA_TO_ONE_SGIS #x809f) (define-constant GL_SAMPLE_MASK_SGIS #x80a0) (define-constant GL_1PASS_SGIS #x80a1) (define-constant GL_2PASS_0_SGIS #x80a2) (define-constant GL_2PASS_1_SGIS #x80a3) (define-constant GL_4PASS_0_SGIS #x80a4) (define-constant GL_4PASS_1_SGIS #x80a5) (define-constant GL_4PASS_2_SGIS #x80a6) (define-constant GL_4PASS_3_SGIS #x80a7) (define-constant GL_SAMPLE_BUFFERS_SGIS #x80a8) (define-constant GL_SAMPLES_SGIS #x80a9) (define-constant GL_SAMPLE_MASK_VALUE_SGIS #x80aa) (define-constant GL_SAMPLE_MASK_INVERT_SGIS #x80ab) (define-constant GL_SAMPLE_PATTERN_SGIS #x80ac) (define-constant GL_RESCALE_NORMAL_EXT #x803a) (define-constant GL_VERTEX_ARRAY_EXT #x8074) (define-constant GL_NORMAL_ARRAY_EXT #x8075) (define-constant GL_COLOR_ARRAY_EXT #x8076) (define-constant GL_INDEX_ARRAY_EXT #x8077) (define-constant GL_TEXTURE_COORD_ARRAY_EXT #x8078) (define-constant GL_EDGE_FLAG_ARRAY_EXT #x8079) (define-constant GL_VERTEX_ARRAY_SIZE_EXT #x807a) (define-constant GL_VERTEX_ARRAY_TYPE_EXT #x807b) (define-constant GL_VERTEX_ARRAY_STRIDE_EXT #x807c) (define-constant GL_VERTEX_ARRAY_COUNT_EXT #x807d) (define-constant GL_NORMAL_ARRAY_TYPE_EXT #x807e) (define-constant GL_NORMAL_ARRAY_STRIDE_EXT #x807f) (define-constant GL_NORMAL_ARRAY_COUNT_EXT #x8080) (define-constant GL_COLOR_ARRAY_SIZE_EXT #x8081) (define-constant GL_COLOR_ARRAY_TYPE_EXT #x8082) (define-constant GL_COLOR_ARRAY_STRIDE_EXT #x8083) (define-constant GL_COLOR_ARRAY_COUNT_EXT #x8084) (define-constant GL_INDEX_ARRAY_TYPE_EXT #x8085) (define-constant GL_INDEX_ARRAY_STRIDE_EXT #x8086) (define-constant GL_INDEX_ARRAY_COUNT_EXT #x8087) (define-constant GL_TEXTURE_COORD_ARRAY_SIZE_EXT #x8088) (define-constant GL_TEXTURE_COORD_ARRAY_TYPE_EXT #x8089) (define-constant GL_TEXTURE_COORD_ARRAY_STRIDE_EXT #x808a) (define-constant GL_TEXTURE_COORD_ARRAY_COUNT_EXT #x808b) (define-constant GL_EDGE_FLAG_ARRAY_STRIDE_EXT #x808c) (define-constant GL_EDGE_FLAG_ARRAY_COUNT_EXT #x808d) (define-constant GL_VERTEX_ARRAY_POINTER_EXT #x808e) (define-constant GL_NORMAL_ARRAY_POINTER_EXT #x808f) (define-constant GL_COLOR_ARRAY_POINTER_EXT #x8090) (define-constant GL_INDEX_ARRAY_POINTER_EXT #x8091) (define-constant GL_TEXTURE_COORD_ARRAY_POINTER_EXT #x8092) (define-constant GL_EDGE_FLAG_ARRAY_POINTER_EXT #x8093) (define-constant GL_GENERATE_MIPMAP_SGIS #x8191) (define-constant GL_GENERATE_MIPMAP_HINT_SGIS #x8192) (define-constant GL_LINEAR_CLIPMAP_LINEAR_SGIX #x8170) (define-constant GL_TEXTURE_CLIPMAP_CENTER_SGIX #x8171) (define-constant GL_TEXTURE_CLIPMAP_FRAME_SGIX #x8172) (define-constant GL_TEXTURE_CLIPMAP_OFFSET_SGIX #x8173) (define-constant GL_TEXTURE_CLIPMAP_VIRTUAL_DEPTH_SGIX #x8174) (define-constant GL_TEXTURE_CLIPMAP_LOD_OFFSET_SGIX #x8175) (define-constant GL_TEXTURE_CLIPMAP_DEPTH_SGIX #x8176) (define-constant GL_MAX_CLIPMAP_DEPTH_SGIX #x8177) (define-constant GL_MAX_CLIPMAP_VIRTUAL_DEPTH_SGIX #x8178) (define-constant GL_NEAREST_CLIPMAP_NEAREST_SGIX #x844d) (define-constant GL_NEAREST_CLIPMAP_LINEAR_SGIX #x844e) (define-constant GL_LINEAR_CLIPMAP_NEAREST_SGIX #x844f) (define-constant GL_TEXTURE_COMPARE_SGIX #x819a) (define-constant GL_TEXTURE_COMPARE_OPERATOR_SGIX #x819b) (define-constant GL_TEXTURE_LEQUAL_R_SGIX #x819c) (define-constant GL_TEXTURE_GEQUAL_R_SGIX #x819d) (define-constant GL_CLAMP_TO_EDGE_SGIS #x812f) (define-constant GL_CLAMP_TO_BORDER_SGIS #x812d) (define-constant GL_FUNC_ADD_EXT #x8006) (define-constant GL_MIN_EXT #x8007) (define-constant GL_MAX_EXT #x8008) (define-constant GL_BLEND_EQUATION_EXT #x8009) (define-constant GL_FUNC_SUBTRACT_EXT #x800a) (define-constant GL_FUNC_REVERSE_SUBTRACT_EXT #x800b) (define-constant GL_INTERLACE_SGIX #x8094) (define-constant GL_PIXEL_TILE_BEST_ALIGNMENT_SGIX #x813e) (define-constant GL_PIXEL_TILE_CACHE_INCREMENT_SGIX #x813f) (define-constant GL_PIXEL_TILE_WIDTH_SGIX #x8140) (define-constant GL_PIXEL_TILE_HEIGHT_SGIX #x8141) (define-constant GL_PIXEL_TILE_GRID_WIDTH_SGIX #x8142) (define-constant GL_PIXEL_TILE_GRID_HEIGHT_SGIX #x8143) (define-constant GL_PIXEL_TILE_GRID_DEPTH_SGIX #x8144) (define-constant GL_PIXEL_TILE_CACHE_SIZE_SGIX #x8145) (define-constant GL_DUAL_ALPHA4_SGIS #x8110) (define-constant GL_DUAL_ALPHA8_SGIS #x8111) (define-constant GL_DUAL_ALPHA12_SGIS #x8112) (define-constant GL_DUAL_ALPHA16_SGIS #x8113) (define-constant GL_DUAL_LUMINANCE4_SGIS #x8114) (define-constant GL_DUAL_LUMINANCE8_SGIS #x8115) (define-constant GL_DUAL_LUMINANCE12_SGIS #x8116) (define-constant GL_DUAL_LUMINANCE16_SGIS #x8117) (define-constant GL_DUAL_INTENSITY4_SGIS #x8118) (define-constant GL_DUAL_INTENSITY8_SGIS #x8119) (define-constant GL_DUAL_INTENSITY12_SGIS #x811a) (define-constant GL_DUAL_INTENSITY16_SGIS #x811b) (define-constant GL_DUAL_LUMINANCE_ALPHA4_SGIS #x811c) (define-constant GL_DUAL_LUMINANCE_ALPHA8_SGIS #x811d) (define-constant GL_QUAD_ALPHA4_SGIS #x811e) (define-constant GL_QUAD_ALPHA8_SGIS #x811f) (define-constant GL_QUAD_LUMINANCE4_SGIS #x8120) (define-constant GL_QUAD_LUMINANCE8_SGIS #x8121) (define-constant GL_QUAD_INTENSITY4_SGIS #x8122) (define-constant GL_QUAD_INTENSITY8_SGIS #x8123) (define-constant GL_DUAL_TEXTURE_SELECT_SGIS #x8124) (define-constant GL_QUAD_TEXTURE_SELECT_SGIS #x8125) (define-constant GL_SPRITE_SGIX #x8148) (define-constant GL_SPRITE_MODE_SGIX #x8149) (define-constant GL_SPRITE_AXIS_SGIX #x814a) (define-constant GL_SPRITE_TRANSLATION_SGIX #x814b) (define-constant GL_SPRITE_AXIAL_SGIX #x814c) (define-constant GL_SPRITE_OBJECT_ALIGNED_SGIX #x814d) (define-constant GL_SPRITE_EYE_ALIGNED_SGIX #x814e) (define-constant GL_TEXTURE_MULTI_BUFFER_HINT_SGIX #x812e) (define-constant GL_POINT_SIZE_MIN_EXT #x8126) (define-constant GL_POINT_SIZE_MAX_EXT #x8127) (define-constant GL_POINT_FADE_THRESHOLD_SIZE_EXT #x8128) (define-constant GL_DISTANCE_ATTENUATION_EXT #x8129) (define-constant GL_POINT_SIZE_MIN_SGIS #x8126) (define-constant GL_POINT_SIZE_MAX_SGIS #x8127) (define-constant GL_POINT_FADE_THRESHOLD_SIZE_SGIS #x8128) (define-constant GL_DISTANCE_ATTENUATION_SGIS #x8129) (define-constant GL_INSTRUMENT_BUFFER_POINTER_SGIX #x8180) (define-constant GL_INSTRUMENT_MEASUREMENTS_SGIX #x8181) (define-constant GL_POST_TEXTURE_FILTER_BIAS_SGIX #x8179) (define-constant GL_POST_TEXTURE_FILTER_SCALE_SGIX #x817a) (define-constant GL_POST_TEXTURE_FILTER_BIAS_RANGE_SGIX #x817b) (define-constant GL_POST_TEXTURE_FILTER_SCALE_RANGE_SGIX #x817c) (define-constant GL_FRAMEZOOM_SGIX #x818b) (define-constant GL_FRAMEZOOM_FACTOR_SGIX #x818c) (define-constant GL_MAX_FRAMEZOOM_FACTOR_SGIX #x818d) (define-constant GL_TEXTURE_DEFORMATION_BIT_SGIX #x0001) (define-constant GL_GEOMETRY_DEFORMATION_BIT_SGIX #x0002) (define-constant GL_GEOMETRY_DEFORMATION_SGIX #x8194) (define-constant GL_TEXTURE_DEFORMATION_SGIX #x8195) (define-constant GL_DEFORMATIONS_MASK_SGIX #x8196) (define-constant GL_MAX_DEFORMATION_ORDER_SGIX #x8197) (define-constant GL_REFERENCE_PLANE_SGIX #x817d) (define-constant GL_REFERENCE_PLANE_EQUATION_SGIX #x817e) (define-constant GL_DEPTH_COMPONENT16_SGIX #x81a5) (define-constant GL_DEPTH_COMPONENT24_SGIX #x81a6) (define-constant GL_DEPTH_COMPONENT32_SGIX #x81a7) (define-constant GL_FOG_FUNC_SGIS #x812a) (define-constant GL_FOG_FUNC_POINTS_SGIS #x812b) (define-constant GL_MAX_FOG_FUNC_POINTS_SGIS #x812c) (define-constant GL_FOG_OFFSET_SGIX #x8198) (define-constant GL_FOG_OFFSET_VALUE_SGIX #x8199) (define-constant GL_IMAGE_SCALE_X_HP #x8155) (define-constant GL_IMAGE_SCALE_Y_HP #x8156) (define-constant GL_IMAGE_TRANSLATE_X_HP #x8157) (define-constant GL_IMAGE_TRANSLATE_Y_HP #x8158) (define-constant GL_IMAGE_ROTATE_ANGLE_HP #x8159) (define-constant GL_IMAGE_ROTATE_ORIGIN_X_HP #x815a) (define-constant GL_IMAGE_ROTATE_ORIGIN_Y_HP #x815b) (define-constant GL_IMAGE_MAG_FILTER_HP #x815c) (define-constant GL_IMAGE_MIN_FILTER_HP #x815d) (define-constant GL_IMAGE_CUBIC_WEIGHT_HP #x815e) (define-constant GL_CUBIC_HP #x815f) (define-constant GL_AVERAGE_HP #x8160) (define-constant GL_IMAGE_TRANSFORM_2D_HP #x8161) (define-constant GL_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP #x8162) (define-constant GL_PROXY_POST_IMAGE_TRANSFORM_COLOR_TABLE_HP #x8163) (define-constant GL_IGNORE_BORDER_HP #x8150) (define-constant GL_CONSTANT_BORDER_HP #x8151) (define-constant GL_REPLICATE_BORDER_HP #x8153) (define-constant GL_CONVOLUTION_BORDER_COLOR_HP #x8154) (define-constant GL_TEXTURE_ENV_BIAS_SGIX #x80be) (define-constant GL_VERTEX_DATA_HINT_PGI #x1a22a) (define-constant GL_VERTEX_CONSISTENT_HINT_PGI #x1a22b) (define-constant GL_MATERIAL_SIDE_HINT_PGI #x1a22c) (define-constant GL_MAX_VERTEX_HINT_PGI #x1a22d) (define-constant GL_COLOR3_BIT_PGI #x10000) (define-constant GL_COLOR4_BIT_PGI #x20000) (define-constant GL_EDGEFLAG_BIT_PGI #x40000) (define-constant GL_INDEX_BIT_PGI #x80000) (define-constant GL_MAT_AMBIENT_BIT_PGI #x100000) (define-constant GL_MAT_AMBIENT_AND_DIFFUSE_BIT_PGI #x200000) (define-constant GL_MAT_DIFFUSE_BIT_PGI #x400000) (define-constant GL_MAT_EMISSION_BIT_PGI #x800000) (define-constant GL_MAT_COLOR_INDEXES_BIT_PGI #x1000000) (define-constant GL_MAT_SHININESS_BIT_PGI #x2000000) (define-constant GL_MAT_SPECULAR_BIT_PGI #x4000000) (define-constant GL_NORMAL_BIT_PGI #x8000000) (define-constant GL_TEXCOORD1_BIT_PGI #x10000000) (define-constant GL_TEXCOORD2_BIT_PGI #x20000000) (define-constant GL_TEXCOORD3_BIT_PGI #x40000000) (define-constant GL_TEXCOORD4_BIT_PGI #x80000000) (define-constant GL_VERTEX23_BIT_PGI #x0004) (define-constant GL_VERTEX4_BIT_PGI #x0008) (define-constant GL_PREFER_DOUBLEBUFFER_HINT_PGI #x1a1f8) (define-constant GL_CONSERVE_MEMORY_HINT_PGI #x1a1fd) (define-constant GL_RECLAIM_MEMORY_HINT_PGI #x1a1fe) (define-constant GL_NATIVE_GRAPHICS_HANDLE_PGI #x1a202) (define-constant GL_NATIVE_GRAPHICS_BEGIN_HINT_PGI #x1a203) (define-constant GL_NATIVE_GRAPHICS_END_HINT_PGI #x1a204) (define-constant GL_ALWAYS_FAST_HINT_PGI #x1a20c) (define-constant GL_ALWAYS_SOFT_HINT_PGI #x1a20d) (define-constant GL_ALLOW_DRAW_OBJ_HINT_PGI #x1a20e) (define-constant GL_ALLOW_DRAW_WIN_HINT_PGI #x1a20f) (define-constant GL_ALLOW_DRAW_FRG_HINT_PGI #x1a210) (define-constant GL_ALLOW_DRAW_MEM_HINT_PGI #x1a211) (define-constant GL_STRICT_DEPTHFUNC_HINT_PGI #x1a216) (define-constant GL_STRICT_LIGHTING_HINT_PGI #x1a217) (define-constant GL_STRICT_SCISSOR_HINT_PGI #x1a218) (define-constant GL_FULL_STIPPLE_HINT_PGI #x1a219) (define-constant GL_CLIP_NEAR_HINT_PGI #x1a220) (define-constant GL_CLIP_FAR_HINT_PGI #x1a221) (define-constant GL_WIDE_LINE_HINT_PGI #x1a222) (define-constant GL_BACK_NORMALS_HINT_PGI #x1a223) (define-constant GL_COLOR_INDEX1_EXT #x80e2) (define-constant GL_COLOR_INDEX2_EXT #x80e3) (define-constant GL_COLOR_INDEX4_EXT #x80e4) (define-constant GL_COLOR_INDEX8_EXT #x80e5) (define-constant GL_COLOR_INDEX12_EXT #x80e6) (define-constant GL_COLOR_INDEX16_EXT #x80e7) (define-constant GL_TEXTURE_INDEX_SIZE_EXT #x80ed) (define-constant GL_CLIP_VOLUME_CLIPPING_HINT_EXT #x80f0) (define-constant GL_LIST_PRIORITY_SGIX #x8182) (define-constant GL_IR_INSTRUMENT1_SGIX #x817f) (define-constant GL_CALLIGRAPHIC_FRAGMENT_SGIX #x8183) (define-constant GL_TEXTURE_LOD_BIAS_S_SGIX #x818e) (define-constant GL_TEXTURE_LOD_BIAS_T_SGIX #x818f) (define-constant GL_TEXTURE_LOD_BIAS_R_SGIX #x8190) (define-constant GL_SHADOW_AMBIENT_SGIX #x80bf) (define-constant GL_INDEX_MATERIAL_EXT #x81b8) (define-constant GL_INDEX_MATERIAL_PARAMETER_EXT #x81b9) (define-constant GL_INDEX_MATERIAL_FACE_EXT #x81ba) (define-constant GL_INDEX_TEST_EXT #x81b5) (define-constant GL_INDEX_TEST_FUNC_EXT #x81b6) (define-constant GL_INDEX_TEST_REF_EXT #x81b7) (define-constant GL_IUI_V2F_EXT #x81ad) (define-constant GL_IUI_V3F_EXT #x81ae) (define-constant GL_IUI_N3F_V2F_EXT #x81af) (define-constant GL_IUI_N3F_V3F_EXT #x81b0) (define-constant GL_T2F_IUI_V2F_EXT #x81b1) (define-constant GL_T2F_IUI_V3F_EXT #x81b2) (define-constant GL_T2F_IUI_N3F_V2F_EXT #x81b3) (define-constant GL_T2F_IUI_N3F_V3F_EXT #x81b4) (define-constant GL_ARRAY_ELEMENT_LOCK_FIRST_EXT #x81a8) (define-constant GL_ARRAY_ELEMENT_LOCK_COUNT_EXT #x81a9) (define-constant GL_CULL_VERTEX_EXT #x81aa) (define-constant GL_CULL_VERTEX_EYE_POSITION_EXT #x81ab) (define-constant GL_CULL_VERTEX_OBJECT_POSITION_EXT #x81ac) (define-constant GL_YCRCB_422_SGIX #x81bb) (define-constant GL_YCRCB_444_SGIX #x81bc) (define-constant GL_FRAGMENT_LIGHTING_SGIX #x8400) (define-constant GL_FRAGMENT_COLOR_MATERIAL_SGIX #x8401) (define-constant GL_FRAGMENT_COLOR_MATERIAL_FACE_SGIX #x8402) (define-constant GL_FRAGMENT_COLOR_MATERIAL_PARAMETER_SGIX #x8403) (define-constant GL_MAX_FRAGMENT_LIGHTS_SGIX #x8404) (define-constant GL_MAX_ACTIVE_LIGHTS_SGIX #x8405) (define-constant GL_CURRENT_RASTER_NORMAL_SGIX #x8406) (define-constant GL_LIGHT_ENV_MODE_SGIX #x8407) (define-constant GL_FRAGMENT_LIGHT_MODEL_LOCAL_VIEWER_SGIX #x8408) (define-constant GL_FRAGMENT_LIGHT_MODEL_TWO_SIDE_SGIX #x8409) (define-constant GL_FRAGMENT_LIGHT_MODEL_AMBIENT_SGIX #x840a) (define-constant GL_FRAGMENT_LIGHT_MODEL_NORMAL_INTERPOLATION_SGIX #x840b) (define-constant GL_FRAGMENT_LIGHT0_SGIX #x840c) (define-constant GL_FRAGMENT_LIGHT1_SGIX #x840d) (define-constant GL_FRAGMENT_LIGHT2_SGIX #x840e) (define-constant GL_FRAGMENT_LIGHT3_SGIX #x840f) (define-constant GL_FRAGMENT_LIGHT4_SGIX #x8410) (define-constant GL_FRAGMENT_LIGHT5_SGIX #x8411) (define-constant GL_FRAGMENT_LIGHT6_SGIX #x8412) (define-constant GL_FRAGMENT_LIGHT7_SGIX #x8413) (define-constant GL_RASTER_POSITION_UNCLIPPED_IBM #x19262) (define-constant GL_TEXTURE_LIGHTING_MODE_HP #x8167) (define-constant GL_TEXTURE_POST_SPECULAR_HP #x8168) (define-constant GL_TEXTURE_PRE_SPECULAR_HP #x8169) (define-constant GL_MAX_ELEMENTS_VERTICES_EXT #x80e8) (define-constant GL_MAX_ELEMENTS_INDICES_EXT #x80e9) (define-constant GL_PHONG_WIN #x80ea) (define-constant GL_PHONG_HINT_WIN #x80eb) (define-constant GL_FOG_SPECULAR_TEXTURE_WIN #x80ec) (define-constant GL_FRAGMENT_MATERIAL_EXT #x8349) (define-constant GL_FRAGMENT_NORMAL_EXT #x834a) (define-constant GL_FRAGMENT_COLOR_EXT #x834c) (define-constant GL_ATTENUATION_EXT #x834d) (define-constant GL_SHADOW_ATTENUATION_EXT #x834e) (define-constant GL_TEXTURE_APPLICATION_MODE_EXT #x834f) (define-constant GL_TEXTURE_LIGHT_EXT #x8350) (define-constant GL_TEXTURE_MATERIAL_FACE_EXT #x8351) (define-constant GL_TEXTURE_MATERIAL_PARAMETER_EXT #x8352) (define-constant GL_ALPHA_MIN_SGIX #x8320) (define-constant GL_ALPHA_MAX_SGIX #x8321) (define-constant GL_PIXEL_TEX_GEN_Q_CEILING_SGIX #x8184) (define-constant GL_PIXEL_TEX_GEN_Q_ROUND_SGIX #x8185) (define-constant GL_PIXEL_TEX_GEN_Q_FLOOR_SGIX #x8186) (define-constant GL_PIXEL_TEX_GEN_ALPHA_REPLACE_SGIX #x8187) (define-constant GL_PIXEL_TEX_GEN_ALPHA_NO_REPLACE_SGIX #x8188) (define-constant GL_PIXEL_TEX_GEN_ALPHA_LS_SGIX #x8189) (define-constant GL_PIXEL_TEX_GEN_ALPHA_MS_SGIX #x818a) (define-constant GL_BGR_EXT #x80e0) (define-constant GL_BGRA_EXT #x80e1) (define-constant GL_ASYNC_MARKER_SGIX #x8329) (define-constant GL_ASYNC_TEX_IMAGE_SGIX #x835c) (define-constant GL_ASYNC_DRAW_PIXELS_SGIX #x835d) (define-constant GL_ASYNC_READ_PIXELS_SGIX #x835e) (define-constant GL_MAX_ASYNC_TEX_IMAGE_SGIX #x835f) (define-constant GL_MAX_ASYNC_DRAW_PIXELS_SGIX #x8360) (define-constant GL_MAX_ASYNC_READ_PIXELS_SGIX #x8361) (define-constant GL_ASYNC_HISTOGRAM_SGIX #x832c) (define-constant GL_MAX_ASYNC_HISTOGRAM_SGIX #x832d) (define-constant GL_PARALLEL_ARRAYS_INTEL #x83f4) (define-constant GL_VERTEX_ARRAY_PARALLEL_POINTERS_INTEL #x83f5) (define-constant GL_NORMAL_ARRAY_PARALLEL_POINTERS_INTEL #x83f6) (define-constant GL_COLOR_ARRAY_PARALLEL_POINTERS_INTEL #x83f7) (define-constant GL_TEXTURE_COORD_ARRAY_PARALLEL_POINTERS_INTEL #x83f8) (define-constant GL_OCCLUSION_TEST_HP #x8165) (define-constant GL_OCCLUSION_TEST_RESULT_HP #x8166) (define-constant GL_PIXEL_TRANSFORM_2D_EXT #x8330) (define-constant GL_PIXEL_MAG_FILTER_EXT #x8331) (define-constant GL_PIXEL_MIN_FILTER_EXT #x8332) (define-constant GL_PIXEL_CUBIC_WEIGHT_EXT #x8333) (define-constant GL_CUBIC_EXT #x8334) (define-constant GL_AVERAGE_EXT #x8335) (define-constant GL_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT #x8336) (define-constant GL_MAX_PIXEL_TRANSFORM_2D_STACK_DEPTH_EXT #x8337) (define-constant GL_PIXEL_TRANSFORM_2D_MATRIX_EXT #x8338) (define-constant GL_SHARED_TEXTURE_PALETTE_EXT #x81fb) (define-constant GL_LIGHT_MODEL_COLOR_CONTROL_EXT #x81f8) (define-constant GL_SINGLE_COLOR_EXT #x81f9) (define-constant GL_SEPARATE_SPECULAR_COLOR_EXT #x81fa) (define-constant GL_COLOR_SUM_EXT #x8458) (define-constant GL_CURRENT_SECONDARY_COLOR_EXT #x8459) (define-constant GL_SECONDARY_COLOR_ARRAY_SIZE_EXT #x845a) (define-constant GL_SECONDARY_COLOR_ARRAY_TYPE_EXT #x845b) (define-constant GL_SECONDARY_COLOR_ARRAY_STRIDE_EXT #x845c) (define-constant GL_SECONDARY_COLOR_ARRAY_POINTER_EXT #x845d) (define-constant GL_SECONDARY_COLOR_ARRAY_EXT #x845e) (define-constant GL_PERTURB_EXT #x85ae) (define-constant GL_TEXTURE_NORMAL_EXT #x85af) (define-constant GL_FOG_COORDINATE_SOURCE_EXT #x8450) (define-constant GL_FOG_COORDINATE_EXT #x8451) (define-constant GL_FRAGMENT_DEPTH_EXT #x8452) (define-constant GL_CURRENT_FOG_COORDINATE_EXT #x8453) (define-constant GL_FOG_COORDINATE_ARRAY_TYPE_EXT #x8454) (define-constant GL_FOG_COORDINATE_ARRAY_STRIDE_EXT #x8455) (define-constant GL_FOG_COORDINATE_ARRAY_POINTER_EXT #x8456) (define-constant GL_FOG_COORDINATE_ARRAY_EXT #x8457) (define-constant GL_SCREEN_COORDINATES_REND #x8490) (define-constant GL_INVERTED_SCREEN_W_REND #x8491) (define-constant GL_TANGENT_ARRAY_EXT #x8439) (define-constant GL_BINORMAL_ARRAY_EXT #x843a) (define-constant GL_CURRENT_TANGENT_EXT #x843b) (define-constant GL_CURRENT_BINORMAL_EXT #x843c) (define-constant GL_TANGENT_ARRAY_TYPE_EXT #x843e) (define-constant GL_TANGENT_ARRAY_STRIDE_EXT #x843f) (define-constant GL_BINORMAL_ARRAY_TYPE_EXT #x8440) (define-constant GL_BINORMAL_ARRAY_STRIDE_EXT #x8441) (define-constant GL_TANGENT_ARRAY_POINTER_EXT #x8442) (define-constant GL_BINORMAL_ARRAY_POINTER_EXT #x8443) (define-constant GL_MAP1_TANGENT_EXT #x8444) (define-constant GL_MAP2_TANGENT_EXT #x8445) (define-constant GL_MAP1_BINORMAL_EXT #x8446) (define-constant GL_MAP2_BINORMAL_EXT #x8447) (define-constant GL_COMBINE_EXT #x8570) (define-constant GL_COMBINE_RGB_EXT #x8571) (define-constant GL_COMBINE_ALPHA_EXT #x8572) (define-constant GL_RGB_SCALE_EXT #x8573) (define-constant GL_ADD_SIGNED_EXT #x8574) (define-constant GL_INTERPOLATE_EXT #x8575) (define-constant GL_CONSTANT_EXT #x8576) (define-constant GL_PRIMARY_COLOR_EXT #x8577) (define-constant GL_PREVIOUS_EXT #x8578) (define-constant GL_SOURCE0_RGB_EXT #x8580) (define-constant GL_SOURCE1_RGB_EXT #x8581) (define-constant GL_SOURCE2_RGB_EXT #x8582) (define-constant GL_SOURCE0_ALPHA_EXT #x8588) (define-constant GL_SOURCE1_ALPHA_EXT #x8589) (define-constant GL_SOURCE2_ALPHA_EXT #x858a) (define-constant GL_OPERAND0_RGB_EXT #x8590) (define-constant GL_OPERAND1_RGB_EXT #x8591) (define-constant GL_OPERAND2_RGB_EXT #x8592) (define-constant GL_OPERAND0_ALPHA_EXT #x8598) (define-constant GL_OPERAND1_ALPHA_EXT #x8599) (define-constant GL_OPERAND2_ALPHA_EXT #x859a) (define-constant GL_LIGHT_MODEL_SPECULAR_VECTOR_APPLE #x85b0) (define-constant GL_TRANSFORM_HINT_APPLE #x85b1) (define-constant GL_FOG_SCALE_SGIX #x81fc) (define-constant GL_FOG_SCALE_VALUE_SGIX #x81fd) (define-constant GL_UNPACK_CONSTANT_DATA_SUNX #x81d5) (define-constant GL_TEXTURE_CONSTANT_DATA_SUNX #x81d6) (define-constant GL_GLOBAL_ALPHA_SUN #x81d9) (define-constant GL_GLOBAL_ALPHA_FACTOR_SUN #x81da) (define-constant GL_RESTART_SUN #x0001) (define-constant GL_REPLACE_MIDDLE_SUN #x0002) (define-constant GL_REPLACE_OLDEST_SUN #x0003) (define-constant GL_TRIANGLE_LIST_SUN #x81d7) (define-constant GL_REPLACEMENT_CODE_SUN #x81d8) (define-constant GL_REPLACEMENT_CODE_ARRAY_SUN #x85c0) (define-constant GL_REPLACEMENT_CODE_ARRAY_TYPE_SUN #x85c1) (define-constant GL_REPLACEMENT_CODE_ARRAY_STRIDE_SUN #x85c2) (define-constant GL_REPLACEMENT_CODE_ARRAY_POINTER_SUN #x85c3) (define-constant GL_R1UI_V3F_SUN #x85c4) (define-constant GL_R1UI_C4UB_V3F_SUN #x85c5) (define-constant GL_R1UI_C3F_V3F_SUN #x85c6) (define-constant GL_R1UI_N3F_V3F_SUN #x85c7) (define-constant GL_R1UI_C4F_N3F_V3F_SUN #x85c8) (define-constant GL_R1UI_T2F_V3F_SUN #x85c9) (define-constant GL_R1UI_T2F_N3F_V3F_SUN #x85ca) (define-constant GL_R1UI_T2F_C4F_N3F_V3F_SUN #x85cb) (define-constant GL_BLEND_DST_RGB_EXT #x80c8) (define-constant GL_BLEND_SRC_RGB_EXT #x80c9) (define-constant GL_BLEND_DST_ALPHA_EXT #x80ca) (define-constant GL_BLEND_SRC_ALPHA_EXT #x80cb) (define-constant GL_RED_MIN_CLAMP_INGR #x8560) (define-constant GL_GREEN_MIN_CLAMP_INGR #x8561) (define-constant GL_BLUE_MIN_CLAMP_INGR #x8562) (define-constant GL_ALPHA_MIN_CLAMP_INGR #x8563) (define-constant GL_RED_MAX_CLAMP_INGR #x8564) (define-constant GL_GREEN_MAX_CLAMP_INGR #x8565) (define-constant GL_BLUE_MAX_CLAMP_INGR #x8566) (define-constant GL_ALPHA_MAX_CLAMP_INGR #x8567) (define-constant GL_INTERLACE_READ_INGR #x8568) (define-constant GL_INCR_WRAP_EXT #x8507) (define-constant GL_DECR_WRAP_EXT #x8508) (define-constant GL_422_EXT #x80cc) (define-constant GL_422_REV_EXT #x80cd) (define-constant GL_422_AVERAGE_EXT #x80ce) (define-constant GL_422_REV_AVERAGE_EXT #x80cf) (define-constant GL_NORMAL_MAP_NV #x8511) (define-constant GL_REFLECTION_MAP_NV #x8512) (define-constant GL_NORMAL_MAP_EXT #x8511) (define-constant GL_REFLECTION_MAP_EXT #x8512) (define-constant GL_TEXTURE_CUBE_MAP_EXT #x8513) (define-constant GL_TEXTURE_BINDING_CUBE_MAP_EXT #x8514) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_X_EXT #x8515) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_X_EXT #x8516) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_Y_EXT #x8517) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_Y_EXT #x8518) (define-constant GL_TEXTURE_CUBE_MAP_POSITIVE_Z_EXT #x8519) (define-constant GL_TEXTURE_CUBE_MAP_NEGATIVE_Z_EXT #x851a) (define-constant GL_PROXY_TEXTURE_CUBE_MAP_EXT #x851b) (define-constant GL_MAX_CUBE_MAP_TEXTURE_SIZE_EXT #x851c) (define-constant GL_WRAP_BORDER_SUN #x81d4) (define-constant GL_MAX_TEXTURE_LOD_BIAS_EXT #x84fd) (define-constant GL_TEXTURE_FILTER_CONTROL_EXT #x8500) (define-constant GL_TEXTURE_LOD_BIAS_EXT #x8501) (define-constant GL_TEXTURE_MAX_ANISOTROPY_EXT #x84fe) (define-constant GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT #x84ff) (define-constant GL_MODELVIEW0_STACK_DEPTH_EXT #x0ba3) (define-constant GL_MODELVIEW1_STACK_DEPTH_EXT #x8502) (define-constant GL_MODELVIEW0_MATRIX_EXT #x0ba6) (define-constant GL_MODELVIEW1_MATRIX_EXT #x8506) (define-constant GL_VERTEX_WEIGHTING_EXT #x8509) (define-constant GL_MODELVIEW0_EXT #x1700) (define-constant GL_MODELVIEW1_EXT #x850a) (define-constant GL_CURRENT_VERTEX_WEIGHT_EXT #x850b) (define-constant GL_VERTEX_WEIGHT_ARRAY_EXT #x850c) (define-constant GL_VERTEX_WEIGHT_ARRAY_SIZE_EXT #x850d) (define-constant GL_VERTEX_WEIGHT_ARRAY_TYPE_EXT #x850e) (define-constant GL_VERTEX_WEIGHT_ARRAY_STRIDE_EXT #x850f) (define-constant GL_VERTEX_WEIGHT_ARRAY_POINTER_EXT #x8510) (define-constant GL_MAX_SHININESS_NV #x8504) (define-constant GL_MAX_SPOT_EXPONENT_NV #x8505) (define-constant GL_VERTEX_ARRAY_RANGE_NV #x851d) (define-constant GL_VERTEX_ARRAY_RANGE_LENGTH_NV #x851e) (define-constant GL_VERTEX_ARRAY_RANGE_VALID_NV #x851f) (define-constant GL_MAX_VERTEX_ARRAY_RANGE_ELEMENT_NV #x8520) (define-constant GL_VERTEX_ARRAY_RANGE_POINTER_NV #x8521) (define-constant GL_REGISTER_COMBINERS_NV #x8522) (define-constant GL_VARIABLE_A_NV #x8523) (define-constant GL_VARIABLE_B_NV #x8524) (define-constant GL_VARIABLE_C_NV #x8525) (define-constant GL_VARIABLE_D_NV #x8526) (define-constant GL_VARIABLE_E_NV #x8527) (define-constant GL_VARIABLE_F_NV #x8528) (define-constant GL_VARIABLE_G_NV #x8529) (define-constant GL_CONSTANT_COLOR0_NV #x852a) (define-constant GL_CONSTANT_COLOR1_NV #x852b) (define-constant GL_PRIMARY_COLOR_NV #x852c) (define-constant GL_SECONDARY_COLOR_NV #x852d) (define-constant GL_SPARE0_NV #x852e) (define-constant GL_SPARE1_NV #x852f) (define-constant GL_DISCARD_NV #x8530) (define-constant GL_E_TIMES_F_NV #x8531) (define-constant GL_SPARE0_PLUS_SECONDARY_COLOR_NV #x8532) (define-constant GL_UNSIGNED_IDENTITY_NV #x8536) (define-constant GL_UNSIGNED_INVERT_NV #x8537) (define-constant GL_EXPAND_NORMAL_NV #x8538) (define-constant GL_EXPAND_NEGATE_NV #x8539) (define-constant GL_HALF_BIAS_NORMAL_NV #x853a) (define-constant GL_HALF_BIAS_NEGATE_NV #x853b) (define-constant GL_SIGNED_IDENTITY_NV #x853c) (define-constant GL_SIGNED_NEGATE_NV #x853d) (define-constant GL_SCALE_BY_TWO_NV #x853e) (define-constant GL_SCALE_BY_FOUR_NV #x853f) (define-constant GL_SCALE_BY_ONE_HALF_NV #x8540) (define-constant GL_BIAS_BY_NEGATIVE_ONE_HALF_NV #x8541) (define-constant GL_COMBINER_INPUT_NV #x8542) (define-constant GL_COMBINER_MAPPING_NV #x8543) (define-constant GL_COMBINER_COMPONENT_USAGE_NV #x8544) (define-constant GL_COMBINER_AB_DOT_PRODUCT_NV #x8545) (define-constant GL_COMBINER_CD_DOT_PRODUCT_NV #x8546) (define-constant GL_COMBINER_MUX_SUM_NV #x8547) (define-constant GL_COMBINER_SCALE_NV #x8548) (define-constant GL_COMBINER_BIAS_NV #x8549) (define-constant GL_COMBINER_AB_OUTPUT_NV #x854a) (define-constant GL_COMBINER_CD_OUTPUT_NV #x854b) (define-constant GL_COMBINER_SUM_OUTPUT_NV #x854c) (define-constant GL_MAX_GENERAL_COMBINERS_NV #x854d) (define-constant GL_NUM_GENERAL_COMBINERS_NV #x854e) (define-constant GL_COLOR_SUM_CLAMP_NV #x854f) (define-constant GL_COMBINER0_NV #x8550) (define-constant GL_COMBINER1_NV #x8551) (define-constant GL_COMBINER2_NV #x8552) (define-constant GL_COMBINER3_NV #x8553) (define-constant GL_COMBINER4_NV #x8554) (define-constant GL_COMBINER5_NV #x8555) (define-constant GL_COMBINER6_NV #x8556) (define-constant GL_COMBINER7_NV #x8557) (define-constant GL_FOG_DISTANCE_MODE_NV #x855a) (define-constant GL_EYE_RADIAL_NV #x855b) (define-constant GL_EYE_PLANE_ABSOLUTE_NV #x855c) (define-constant GL_EMBOSS_LIGHT_NV #x855d) (define-constant GL_EMBOSS_CONSTANT_NV #x855e) (define-constant GL_EMBOSS_MAP_NV #x855f) (define-constant GL_COMBINE4_NV #x8503) (define-constant GL_SOURCE3_RGB_NV #x8583) (define-constant GL_SOURCE3_ALPHA_NV #x858b) (define-constant GL_OPERAND3_RGB_NV #x8593) (define-constant GL_OPERAND3_ALPHA_NV #x859b) (define-constant GL_COMPRESSED_RGB_S3TC_DXT1_EXT #x83f0) (define-constant GL_COMPRESSED_RGBA_S3TC_DXT1_EXT #x83f1) (define-constant GL_COMPRESSED_RGBA_S3TC_DXT3_EXT #x83f2) (define-constant GL_COMPRESSED_RGBA_S3TC_DXT5_EXT #x83f3) (define-constant GL_CULL_VERTEX_IBM #x1928a) (define-constant GL_VERTEX_ARRAY_LIST_IBM #x1929e) (define-constant GL_NORMAL_ARRAY_LIST_IBM #x1929f) (define-constant GL_COLOR_ARRAY_LIST_IBM #x192a0) (define-constant GL_INDEX_ARRAY_LIST_IBM #x192a1) (define-constant GL_TEXTURE_COORD_ARRAY_LIST_IBM #x192a2) (define-constant GL_EDGE_FLAG_ARRAY_LIST_IBM #x192a3) (define-constant GL_FOG_COORDINATE_ARRAY_LIST_IBM #x192a4) (define-constant GL_SECONDARY_COLOR_ARRAY_LIST_IBM #x192a5) (define-constant GL_VERTEX_ARRAY_LIST_STRIDE_IBM #x192a8) (define-constant GL_NORMAL_ARRAY_LIST_STRIDE_IBM #x192a9) (define-constant GL_COLOR_ARRAY_LIST_STRIDE_IBM #x192aa) (define-constant GL_INDEX_ARRAY_LIST_STRIDE_IBM #x192ab) (define-constant GL_TEXTURE_COORD_ARRAY_LIST_STRIDE_IBM #x192ac) (define-constant GL_EDGE_FLAG_ARRAY_LIST_STRIDE_IBM #x192ad) (define-constant GL_FOG_COORDINATE_ARRAY_LIST_STRIDE_IBM #x192ae) (define-constant GL_SECONDARY_COLOR_ARRAY_LIST_STRIDE_IBM #x192af) (define-constant GL_PACK_SUBSAMPLE_RATE_SGIX #x85a0) (define-constant GL_UNPACK_SUBSAMPLE_RATE_SGIX #x85a1) (define-constant GL_PIXEL_SUBSAMPLE_4444_SGIX #x85a2) (define-constant GL_PIXEL_SUBSAMPLE_2424_SGIX #x85a3) (define-constant GL_PIXEL_SUBSAMPLE_4242_SGIX #x85a4) (define-constant GL_YCRCB_SGIX #x8318) (define-constant GL_YCRCBA_SGIX #x8319) (define-constant GL_DEPTH_PASS_INSTRUMENT_SGIX #x8310) (define-constant GL_DEPTH_PASS_INSTRUMENT_COUNTERS_SGIX #x8311) (define-constant GL_DEPTH_PASS_INSTRUMENT_MAX_SGIX #x8312) (define-constant GL_COMPRESSED_RGB_FXT1_3DFX #x86b0) (define-constant GL_COMPRESSED_RGBA_FXT1_3DFX #x86b1) (define-constant GL_MULTISAMPLE_3DFX #x86b2) (define-constant GL_SAMPLE_BUFFERS_3DFX #x86b3) (define-constant GL_SAMPLES_3DFX #x86b4) (define-constant GL_MULTISAMPLE_BIT_3DFX #x20000000) (define-constant GL_MULTISAMPLE_EXT #x809d) (define-constant GL_SAMPLE_ALPHA_TO_MASK_EXT #x809e) (define-constant GL_SAMPLE_ALPHA_TO_ONE_EXT #x809f) (define-constant GL_SAMPLE_MASK_EXT #x80a0) (define-constant GL_1PASS_EXT #x80a1) (define-constant GL_2PASS_0_EXT #x80a2) (define-constant GL_2PASS_1_EXT #x80a3) (define-constant GL_4PASS_0_EXT #x80a4) (define-constant GL_4PASS_1_EXT #x80a5) (define-constant GL_4PASS_2_EXT #x80a6) (define-constant GL_4PASS_3_EXT #x80a7) (define-constant GL_SAMPLE_BUFFERS_EXT #x80a8) (define-constant GL_SAMPLES_EXT #x80a9) (define-constant GL_SAMPLE_MASK_VALUE_EXT #x80aa) (define-constant GL_SAMPLE_MASK_INVERT_EXT #x80ab) (define-constant GL_SAMPLE_PATTERN_EXT #x80ac) (define-constant GL_MULTISAMPLE_BIT_EXT #x20000000) (define-constant GL_VERTEX_PRECLIP_SGIX #x83ee) (define-constant GL_VERTEX_PRECLIP_HINT_SGIX #x83ef) (define-constant GL_CONVOLUTION_HINT_SGIX #x8316) (define-constant GL_PACK_RESAMPLE_SGIX #x842c) (define-constant GL_UNPACK_RESAMPLE_SGIX #x842d) (define-constant GL_RESAMPLE_REPLICATE_SGIX #x842e) (define-constant GL_RESAMPLE_ZERO_FILL_SGIX #x842f) (define-constant GL_RESAMPLE_DECIMATE_SGIX #x8430) (define-constant GL_EYE_DISTANCE_TO_POINT_SGIS #x81f0) (define-constant GL_OBJECT_DISTANCE_TO_POINT_SGIS #x81f1) (define-constant GL_EYE_DISTANCE_TO_LINE_SGIS #x81f2) (define-constant GL_OBJECT_DISTANCE_TO_LINE_SGIS #x81f3) (define-constant GL_EYE_POINT_SGIS #x81f4) (define-constant GL_OBJECT_POINT_SGIS #x81f5) (define-constant GL_EYE_LINE_SGIS #x81f6) (define-constant GL_OBJECT_LINE_SGIS #x81f7) (define-constant GL_TEXTURE_COLOR_WRITEMASK_SGIS #x81ef) (define-constant GL_DOT3_RGB_EXT #x8740) (define-constant GL_DOT3_RGBA_EXT #x8741) (define-constant GL_MIRROR_CLAMP_ATI #x8742) (define-constant GL_MIRROR_CLAMP_TO_EDGE_ATI #x8743) (define-constant GL_ALL_COMPLETED_NV #x84f2) (define-constant GL_FENCE_STATUS_NV #x84f3) (define-constant GL_FENCE_CONDITION_NV #x84f4) (define-constant GL_MIRRORED_REPEAT_IBM #x8370) (define-constant GL_EVAL_2D_NV #x86c0) (define-constant GL_EVAL_TRIANGULAR_2D_NV #x86c1) (define-constant GL_MAP_TESSELLATION_NV #x86c2) (define-constant GL_MAP_ATTRIB_U_ORDER_NV #x86c3) (define-constant GL_MAP_ATTRIB_V_ORDER_NV #x86c4) (define-constant GL_EVAL_FRACTIONAL_TESSELLATION_NV #x86c5) (define-constant GL_EVAL_VERTEX_ATTRIB0_NV #x86c6) (define-constant GL_EVAL_VERTEX_ATTRIB1_NV #x86c7) (define-constant GL_EVAL_VERTEX_ATTRIB2_NV #x86c8) (define-constant GL_EVAL_VERTEX_ATTRIB3_NV #x86c9) (define-constant GL_EVAL_VERTEX_ATTRIB4_NV #x86ca) (define-constant GL_EVAL_VERTEX_ATTRIB5_NV #x86cb) (define-constant GL_EVAL_VERTEX_ATTRIB6_NV #x86cc) (define-constant GL_EVAL_VERTEX_ATTRIB7_NV #x86cd) (define-constant GL_EVAL_VERTEX_ATTRIB8_NV #x86ce) (define-constant GL_EVAL_VERTEX_ATTRIB9_NV #x86cf) (define-constant GL_EVAL_VERTEX_ATTRIB10_NV #x86d0) (define-constant GL_EVAL_VERTEX_ATTRIB11_NV #x86d1) (define-constant GL_EVAL_VERTEX_ATTRIB12_NV #x86d2) (define-constant GL_EVAL_VERTEX_ATTRIB13_NV #x86d3) (define-constant GL_EVAL_VERTEX_ATTRIB14_NV #x86d4) (define-constant GL_EVAL_VERTEX_ATTRIB15_NV #x86d5) (define-constant GL_MAX_MAP_TESSELLATION_NV #x86d6) (define-constant GL_MAX_RATIONAL_EVAL_ORDER_NV #x86d7) (define-constant GL_DEPTH_STENCIL_NV #x84f9) (define-constant GL_UNSIGNED_INT_24_8_NV #x84fa) (define-constant GL_PER_STAGE_CONSTANTS_NV #x8535) (define-constant GL_TEXTURE_RECTANGLE_NV #x84f5) (define-constant GL_TEXTURE_BINDING_RECTANGLE_NV #x84f6) (define-constant GL_PROXY_TEXTURE_RECTANGLE_NV #x84f7) (define-constant GL_MAX_RECTANGLE_TEXTURE_SIZE_NV #x84f8) (define-constant GL_OFFSET_TEXTURE_RECTANGLE_NV #x864c) (define-constant GL_OFFSET_TEXTURE_RECTANGLE_SCALE_NV #x864d) (define-constant GL_DOT_PRODUCT_TEXTURE_RECTANGLE_NV #x864e) (define-constant GL_RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV #x86d9) (define-constant GL_UNSIGNED_INT_S8_S8_8_8_NV #x86da) (define-constant GL_UNSIGNED_INT_8_8_S8_S8_REV_NV #x86db) (define-constant GL_DSDT_MAG_INTENSITY_NV #x86dc) (define-constant GL_SHADER_CONSISTENT_NV #x86dd) (define-constant GL_TEXTURE_SHADER_NV #x86de) (define-constant GL_SHADER_OPERATION_NV #x86df) (define-constant GL_CULL_MODES_NV #x86e0) (define-constant GL_OFFSET_TEXTURE_MATRIX_NV #x86e1) (define-constant GL_OFFSET_TEXTURE_SCALE_NV #x86e2) (define-constant GL_OFFSET_TEXTURE_BIAS_NV #x86e3) (define-constant GL_OFFSET_TEXTURE_2D_MATRIX_NV #x86e1) (define-constant GL_OFFSET_TEXTURE_2D_SCALE_NV #x86e2) (define-constant GL_OFFSET_TEXTURE_2D_BIAS_NV #x86e3) (define-constant GL_PREVIOUS_TEXTURE_INPUT_NV #x86e4) (define-constant GL_CONST_EYE_NV #x86e5) (define-constant GL_PASS_THROUGH_NV #x86e6) (define-constant GL_CULL_FRAGMENT_NV #x86e7) (define-constant GL_OFFSET_TEXTURE_2D_NV #x86e8) (define-constant GL_DEPENDENT_AR_TEXTURE_2D_NV #x86e9) (define-constant GL_DEPENDENT_GB_TEXTURE_2D_NV #x86ea) (define-constant GL_DOT_PRODUCT_NV #x86ec) (define-constant GL_DOT_PRODUCT_DEPTH_REPLACE_NV #x86ed) (define-constant GL_DOT_PRODUCT_TEXTURE_2D_NV #x86ee) (define-constant GL_DOT_PRODUCT_TEXTURE_CUBE_MAP_NV #x86f0) (define-constant GL_DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV #x86f1) (define-constant GL_DOT_PRODUCT_REFLECT_CUBE_MAP_NV #x86f2) (define-constant GL_DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV #x86f3) (define-constant GL_HILO_NV #x86f4) (define-constant GL_DSDT_NV #x86f5) (define-constant GL_DSDT_MAG_NV #x86f6) (define-constant GL_DSDT_MAG_VIB_NV #x86f7) (define-constant GL_HILO16_NV #x86f8) (define-constant GL_SIGNED_HILO_NV #x86f9) (define-constant GL_SIGNED_HILO16_NV #x86fa) (define-constant GL_SIGNED_RGBA_NV #x86fb) (define-constant GL_SIGNED_RGBA8_NV #x86fc) (define-constant GL_SIGNED_RGB_NV #x86fe) (define-constant GL_SIGNED_RGB8_NV #x86ff) (define-constant GL_SIGNED_LUMINANCE_NV #x8701) (define-constant GL_SIGNED_LUMINANCE8_NV #x8702) (define-constant GL_SIGNED_LUMINANCE_ALPHA_NV #x8703) (define-constant GL_SIGNED_LUMINANCE8_ALPHA8_NV #x8704) (define-constant GL_SIGNED_ALPHA_NV #x8705) (define-constant GL_SIGNED_ALPHA8_NV #x8706) (define-constant GL_SIGNED_INTENSITY_NV #x8707) (define-constant GL_SIGNED_INTENSITY8_NV #x8708) (define-constant GL_DSDT8_NV #x8709) (define-constant GL_DSDT8_MAG8_NV #x870a) (define-constant GL_DSDT8_MAG8_INTENSITY8_NV #x870b) (define-constant GL_SIGNED_RGB_UNSIGNED_ALPHA_NV #x870c) (define-constant GL_SIGNED_RGB8_UNSIGNED_ALPHA8_NV #x870d) (define-constant GL_HI_SCALE_NV #x870e) (define-constant GL_LO_SCALE_NV #x870f) (define-constant GL_DS_SCALE_NV #x8710) (define-constant GL_DT_SCALE_NV #x8711) (define-constant GL_MAGNITUDE_SCALE_NV #x8712) (define-constant GL_VIBRANCE_SCALE_NV #x8713) (define-constant GL_HI_BIAS_NV #x8714) (define-constant GL_LO_BIAS_NV #x8715) (define-constant GL_DS_BIAS_NV #x8716) (define-constant GL_DT_BIAS_NV #x8717) (define-constant GL_MAGNITUDE_BIAS_NV #x8718) (define-constant GL_VIBRANCE_BIAS_NV #x8719) (define-constant GL_TEXTURE_BORDER_VALUES_NV #x871a) (define-constant GL_TEXTURE_HI_SIZE_NV #x871b) (define-constant GL_TEXTURE_LO_SIZE_NV #x871c) (define-constant GL_TEXTURE_DS_SIZE_NV #x871d) (define-constant GL_TEXTURE_DT_SIZE_NV #x871e) (define-constant GL_TEXTURE_MAG_SIZE_NV #x871f) (define-constant GL_DOT_PRODUCT_TEXTURE_3D_NV #x86ef) (define-constant GL_VERTEX_ARRAY_RANGE_WITHOUT_FLUSH_NV #x8533) (define-constant GL_VERTEX_PROGRAM_NV #x8620) (define-constant GL_VERTEX_STATE_PROGRAM_NV #x8621) (define-constant GL_ATTRIB_ARRAY_SIZE_NV #x8623) (define-constant GL_ATTRIB_ARRAY_STRIDE_NV #x8624) (define-constant GL_ATTRIB_ARRAY_TYPE_NV #x8625) (define-constant GL_CURRENT_ATTRIB_NV #x8626) (define-constant GL_PROGRAM_LENGTH_NV #x8627) (define-constant GL_PROGRAM_STRING_NV #x8628) (define-constant GL_MODELVIEW_PROJECTION_NV #x8629) (define-constant GL_IDENTITY_NV #x862a) (define-constant GL_INVERSE_NV #x862b) (define-constant GL_TRANSPOSE_NV #x862c) (define-constant GL_INVERSE_TRANSPOSE_NV #x862d) (define-constant GL_MAX_TRACK_MATRIX_STACK_DEPTH_NV #x862e) (define-constant GL_MAX_TRACK_MATRICES_NV #x862f) (define-constant GL_MATRIX0_NV #x8630) (define-constant GL_MATRIX1_NV #x8631) (define-constant GL_MATRIX2_NV #x8632) (define-constant GL_MATRIX3_NV #x8633) (define-constant GL_MATRIX4_NV #x8634) (define-constant GL_MATRIX5_NV #x8635) (define-constant GL_MATRIX6_NV #x8636) (define-constant GL_MATRIX7_NV #x8637) (define-constant GL_CURRENT_MATRIX_STACK_DEPTH_NV #x8640) (define-constant GL_CURRENT_MATRIX_NV #x8641) (define-constant GL_VERTEX_PROGRAM_POINT_SIZE_NV #x8642) (define-constant GL_VERTEX_PROGRAM_TWO_SIDE_NV #x8643) (define-constant GL_PROGRAM_PARAMETER_NV #x8644) (define-constant GL_ATTRIB_ARRAY_POINTER_NV #x8645) (define-constant GL_PROGRAM_TARGET_NV #x8646) (define-constant GL_PROGRAM_RESIDENT_NV #x8647) (define-constant GL_TRACK_MATRIX_NV #x8648) (define-constant GL_TRACK_MATRIX_TRANSFORM_NV #x8649) (define-constant GL_VERTEX_PROGRAM_BINDING_NV #x864a) (define-constant GL_PROGRAM_ERROR_POSITION_NV #x864b) (define-constant GL_VERTEX_ATTRIB_ARRAY0_NV #x8650) (define-constant GL_VERTEX_ATTRIB_ARRAY1_NV #x8651) (define-constant GL_VERTEX_ATTRIB_ARRAY2_NV #x8652) (define-constant GL_VERTEX_ATTRIB_ARRAY3_NV #x8653) (define-constant GL_VERTEX_ATTRIB_ARRAY4_NV #x8654) (define-constant GL_VERTEX_ATTRIB_ARRAY5_NV #x8655) (define-constant GL_VERTEX_ATTRIB_ARRAY6_NV #x8656) (define-constant GL_VERTEX_ATTRIB_ARRAY7_NV #x8657) (define-constant GL_VERTEX_ATTRIB_ARRAY8_NV #x8658) (define-constant GL_VERTEX_ATTRIB_ARRAY9_NV #x8659) (define-constant GL_VERTEX_ATTRIB_ARRAY10_NV #x865a) (define-constant GL_VERTEX_ATTRIB_ARRAY11_NV #x865b) (define-constant GL_VERTEX_ATTRIB_ARRAY12_NV #x865c) (define-constant GL_VERTEX_ATTRIB_ARRAY13_NV #x865d) (define-constant GL_VERTEX_ATTRIB_ARRAY14_NV #x865e) (define-constant GL_VERTEX_ATTRIB_ARRAY15_NV #x865f) (define-constant GL_MAP1_VERTEX_ATTRIB0_4_NV #x8660) (define-constant GL_MAP1_VERTEX_ATTRIB1_4_NV #x8661) (define-constant GL_MAP1_VERTEX_ATTRIB2_4_NV #x8662) (define-constant GL_MAP1_VERTEX_ATTRIB3_4_NV #x8663) (define-constant GL_MAP1_VERTEX_ATTRIB4_4_NV #x8664) (define-constant GL_MAP1_VERTEX_ATTRIB5_4_NV #x8665) (define-constant GL_MAP1_VERTEX_ATTRIB6_4_NV #x8666) (define-constant GL_MAP1_VERTEX_ATTRIB7_4_NV #x8667) (define-constant GL_MAP1_VERTEX_ATTRIB8_4_NV #x8668) (define-constant GL_MAP1_VERTEX_ATTRIB9_4_NV #x8669) (define-constant GL_MAP1_VERTEX_ATTRIB10_4_NV #x866a) (define-constant GL_MAP1_VERTEX_ATTRIB11_4_NV #x866b) (define-constant GL_MAP1_VERTEX_ATTRIB12_4_NV #x866c) (define-constant GL_MAP1_VERTEX_ATTRIB13_4_NV #x866d) (define-constant GL_MAP1_VERTEX_ATTRIB14_4_NV #x866e) (define-constant GL_MAP1_VERTEX_ATTRIB15_4_NV #x866f) (define-constant GL_MAP2_VERTEX_ATTRIB0_4_NV #x8670) (define-constant GL_MAP2_VERTEX_ATTRIB1_4_NV #x8671) (define-constant GL_MAP2_VERTEX_ATTRIB2_4_NV #x8672) (define-constant GL_MAP2_VERTEX_ATTRIB3_4_NV #x8673) (define-constant GL_MAP2_VERTEX_ATTRIB4_4_NV #x8674) (define-constant GL_MAP2_VERTEX_ATTRIB5_4_NV #x8675) (define-constant GL_MAP2_VERTEX_ATTRIB6_4_NV #x8676) (define-constant GL_MAP2_VERTEX_ATTRIB7_4_NV #x8677) (define-constant GL_MAP2_VERTEX_ATTRIB8_4_NV #x8678) (define-constant GL_MAP2_VERTEX_ATTRIB9_4_NV #x8679) (define-constant GL_MAP2_VERTEX_ATTRIB10_4_NV #x867a) (define-constant GL_MAP2_VERTEX_ATTRIB11_4_NV #x867b) (define-constant GL_MAP2_VERTEX_ATTRIB12_4_NV #x867c) (define-constant GL_MAP2_VERTEX_ATTRIB13_4_NV #x867d) (define-constant GL_MAP2_VERTEX_ATTRIB14_4_NV #x867e) (define-constant GL_MAP2_VERTEX_ATTRIB15_4_NV #x867f) (define-constant GL_TEXTURE_MAX_CLAMP_S_SGIX #x8369) (define-constant GL_TEXTURE_MAX_CLAMP_T_SGIX #x836a) (define-constant GL_TEXTURE_MAX_CLAMP_R_SGIX #x836b) (define-constant GL_SCALEBIAS_HINT_SGIX #x8322) (define-constant GL_INTERLACE_OML #x8980) (define-constant GL_INTERLACE_READ_OML #x8981) (define-constant GL_FORMAT_SUBSAMPLE_24_24_OML #x8982) (define-constant GL_FORMAT_SUBSAMPLE_244_244_OML #x8983) (define-constant GL_PACK_RESAMPLE_OML #x8984) (define-constant GL_UNPACK_RESAMPLE_OML #x8985) (define-constant GL_RESAMPLE_REPLICATE_OML #x8986) (define-constant GL_RESAMPLE_ZERO_FILL_OML #x8987) (define-constant GL_RESAMPLE_AVERAGE_OML #x8988) (define-constant GL_RESAMPLE_DECIMATE_OML #x8989) (define-constant GL_DEPTH_STENCIL_TO_RGBA_NV #x886e) (define-constant GL_DEPTH_STENCIL_TO_BGRA_NV #x886f) (define-constant GL_BUMP_ROT_MATRIX_ATI #x8775) (define-constant GL_BUMP_ROT_MATRIX_SIZE_ATI #x8776) (define-constant GL_BUMP_NUM_TEX_UNITS_ATI #x8777) (define-constant GL_BUMP_TEX_UNITS_ATI #x8778) (define-constant GL_DUDV_ATI #x8779) (define-constant GL_DU8DV8_ATI #x877a) (define-constant GL_BUMP_ENVMAP_ATI #x877b) (define-constant GL_BUMP_TARGET_ATI #x877c) (define-constant GL_FRAGMENT_SHADER_ATI #x8920) (define-constant GL_REG_0_ATI #x8921) (define-constant GL_REG_1_ATI #x8922) (define-constant GL_REG_2_ATI #x8923) (define-constant GL_REG_3_ATI #x8924) (define-constant GL_REG_4_ATI #x8925) (define-constant GL_REG_5_ATI #x8926) (define-constant GL_REG_6_ATI #x8927) (define-constant GL_REG_7_ATI #x8928) (define-constant GL_REG_8_ATI #x8929) (define-constant GL_REG_9_ATI #x892a) (define-constant GL_REG_10_ATI #x892b) (define-constant GL_REG_11_ATI #x892c) (define-constant GL_REG_12_ATI #x892d) (define-constant GL_REG_13_ATI #x892e) (define-constant GL_REG_14_ATI #x892f) (define-constant GL_REG_15_ATI #x8930) (define-constant GL_REG_16_ATI #x8931) (define-constant GL_REG_17_ATI #x8932) (define-constant GL_REG_18_ATI #x8933) (define-constant GL_REG_19_ATI #x8934) (define-constant GL_REG_20_ATI #x8935) (define-constant GL_REG_21_ATI #x8936) (define-constant GL_REG_22_ATI #x8937) (define-constant GL_REG_23_ATI #x8938) (define-constant GL_REG_24_ATI #x8939) (define-constant GL_REG_25_ATI #x893a) (define-constant GL_REG_26_ATI #x893b) (define-constant GL_REG_27_ATI #x893c) (define-constant GL_REG_28_ATI #x893d) (define-constant GL_REG_29_ATI #x893e) (define-constant GL_REG_30_ATI #x893f) (define-constant GL_REG_31_ATI #x8940) (define-constant GL_CON_0_ATI #x8941) (define-constant GL_CON_1_ATI #x8942) (define-constant GL_CON_2_ATI #x8943) (define-constant GL_CON_3_ATI #x8944) (define-constant GL_CON_4_ATI #x8945) (define-constant GL_CON_5_ATI #x8946) (define-constant GL_CON_6_ATI #x8947) (define-constant GL_CON_7_ATI #x8948) (define-constant GL_CON_8_ATI #x8949) (define-constant GL_CON_9_ATI #x894a) (define-constant GL_CON_10_ATI #x894b) (define-constant GL_CON_11_ATI #x894c) (define-constant GL_CON_12_ATI #x894d) (define-constant GL_CON_13_ATI #x894e) (define-constant GL_CON_14_ATI #x894f) (define-constant GL_CON_15_ATI #x8950) (define-constant GL_CON_16_ATI #x8951) (define-constant GL_CON_17_ATI #x8952) (define-constant GL_CON_18_ATI #x8953) (define-constant GL_CON_19_ATI #x8954) (define-constant GL_CON_20_ATI #x8955) (define-constant GL_CON_21_ATI #x8956) (define-constant GL_CON_22_ATI #x8957) (define-constant GL_CON_23_ATI #x8958) (define-constant GL_CON_24_ATI #x8959) (define-constant GL_CON_25_ATI #x895a) (define-constant GL_CON_26_ATI #x895b) (define-constant GL_CON_27_ATI #x895c) (define-constant GL_CON_28_ATI #x895d) (define-constant GL_CON_29_ATI #x895e) (define-constant GL_CON_30_ATI #x895f) (define-constant GL_CON_31_ATI #x8960) (define-constant GL_MOV_ATI #x8961) (define-constant GL_ADD_ATI #x8963) (define-constant GL_MUL_ATI #x8964) (define-constant GL_SUB_ATI #x8965) (define-constant GL_DOT3_ATI #x8966) (define-constant GL_DOT4_ATI #x8967) (define-constant GL_MAD_ATI #x8968) (define-constant GL_LERP_ATI #x8969) (define-constant GL_CND_ATI #x896a) (define-constant GL_CND0_ATI #x896b) (define-constant GL_DOT2_ADD_ATI #x896c) (define-constant GL_SECONDARY_INTERPOLATOR_ATI #x896d) (define-constant GL_NUM_FRAGMENT_REGISTERS_ATI #x896e) (define-constant GL_NUM_FRAGMENT_CONSTANTS_ATI #x896f) (define-constant GL_NUM_PASSES_ATI #x8970) (define-constant GL_NUM_INSTRUCTIONS_PER_PASS_ATI #x8971) (define-constant GL_NUM_INSTRUCTIONS_TOTAL_ATI #x8972) (define-constant GL_NUM_INPUT_INTERPOLATOR_COMPONENTS_ATI #x8973) (define-constant GL_NUM_LOOPBACK_COMPONENTS_ATI #x8974) (define-constant GL_COLOR_ALPHA_PAIRING_ATI #x8975) (define-constant GL_SWIZZLE_STR_ATI #x8976) (define-constant GL_SWIZZLE_STQ_ATI #x8977) (define-constant GL_SWIZZLE_STR_DR_ATI #x8978) (define-constant GL_SWIZZLE_STQ_DQ_ATI #x8979) (define-constant GL_SWIZZLE_STRQ_ATI #x897a) (define-constant GL_SWIZZLE_STRQ_DQ_ATI #x897b) (define-constant GL_RED_BIT_ATI #x0001) (define-constant GL_GREEN_BIT_ATI #x0002) (define-constant GL_BLUE_BIT_ATI #x0004) (define-constant GL_2X_BIT_ATI #x0001) (define-constant GL_4X_BIT_ATI #x0002) (define-constant GL_8X_BIT_ATI #x0004) (define-constant GL_HALF_BIT_ATI #x0008) (define-constant GL_QUARTER_BIT_ATI #x0010) (define-constant GL_EIGHTH_BIT_ATI #x0020) (define-constant GL_SATURATE_BIT_ATI #x0040) (define-constant GL_COMP_BIT_ATI #x0002) (define-constant GL_NEGATE_BIT_ATI #x0004) (define-constant GL_BIAS_BIT_ATI #x0008) (define-constant GL_PN_TRIANGLES_ATI #x87f0) (define-constant GL_MAX_PN_TRIANGLES_TESSELATION_LEVEL_ATI #x87f1) (define-constant GL_PN_TRIANGLES_POINT_MODE_ATI #x87f2) (define-constant GL_PN_TRIANGLES_NORMAL_MODE_ATI #x87f3) (define-constant GL_PN_TRIANGLES_TESSELATION_LEVEL_ATI #x87f4) (define-constant GL_PN_TRIANGLES_POINT_MODE_LINEAR_ATI #x87f5) (define-constant GL_PN_TRIANGLES_POINT_MODE_CUBIC_ATI #x87f6) (define-constant GL_PN_TRIANGLES_NORMAL_MODE_LINEAR_ATI #x87f7) (define-constant GL_PN_TRIANGLES_NORMAL_MODE_QUADRATIC_ATI #x87f8) (define-constant GL_STATIC_ATI #x8760) (define-constant GL_DYNAMIC_ATI #x8761) (define-constant GL_PRESERVE_ATI #x8762) (define-constant GL_DISCARD_ATI #x8763) (define-constant GL_OBJECT_BUFFER_SIZE_ATI #x8764) (define-constant GL_OBJECT_BUFFER_USAGE_ATI #x8765) (define-constant GL_ARRAY_OBJECT_BUFFER_ATI #x8766) (define-constant GL_ARRAY_OBJECT_OFFSET_ATI #x8767) (define-constant GL_VERTEX_SHADER_EXT #x8780) (define-constant GL_VERTEX_SHADER_BINDING_EXT #x8781) (define-constant GL_OP_INDEX_EXT #x8782) (define-constant GL_OP_NEGATE_EXT #x8783) (define-constant GL_OP_DOT3_EXT #x8784) (define-constant GL_OP_DOT4_EXT #x8785) (define-constant GL_OP_MUL_EXT #x8786) (define-constant GL_OP_ADD_EXT #x8787) (define-constant GL_OP_MADD_EXT #x8788) (define-constant GL_OP_FRAC_EXT #x8789) (define-constant GL_OP_MAX_EXT #x878a) (define-constant GL_OP_MIN_EXT #x878b) (define-constant GL_OP_SET_GE_EXT #x878c) (define-constant GL_OP_SET_LT_EXT #x878d) (define-constant GL_OP_CLAMP_EXT #x878e) (define-constant GL_OP_FLOOR_EXT #x878f) (define-constant GL_OP_ROUND_EXT #x8790) (define-constant GL_OP_EXP_BASE_2_EXT #x8791) (define-constant GL_OP_LOG_BASE_2_EXT #x8792) (define-constant GL_OP_POWER_EXT #x8793) (define-constant GL_OP_RECIP_EXT #x8794) (define-constant GL_OP_RECIP_SQRT_EXT #x8795) (define-constant GL_OP_SUB_EXT #x8796) (define-constant GL_OP_CROSS_PRODUCT_EXT #x8797) (define-constant GL_OP_MULTIPLY_MATRIX_EXT #x8798) (define-constant GL_OP_MOV_EXT #x8799) (define-constant GL_OUTPUT_VERTEX_EXT #x879a) (define-constant GL_OUTPUT_COLOR0_EXT #x879b) (define-constant GL_OUTPUT_COLOR1_EXT #x879c) (define-constant GL_OUTPUT_TEXTURE_COORD0_EXT #x879d) (define-constant GL_OUTPUT_TEXTURE_COORD1_EXT #x879e) (define-constant GL_OUTPUT_TEXTURE_COORD2_EXT #x879f) (define-constant GL_OUTPUT_TEXTURE_COORD3_EXT #x87a0) (define-constant GL_OUTPUT_TEXTURE_COORD4_EXT #x87a1) (define-constant GL_OUTPUT_TEXTURE_COORD5_EXT #x87a2) (define-constant GL_OUTPUT_TEXTURE_COORD6_EXT #x87a3) (define-constant GL_OUTPUT_TEXTURE_COORD7_EXT #x87a4) (define-constant GL_OUTPUT_TEXTURE_COORD8_EXT #x87a5) (define-constant GL_OUTPUT_TEXTURE_COORD9_EXT #x87a6) (define-constant GL_OUTPUT_TEXTURE_COORD10_EXT #x87a7) (define-constant GL_OUTPUT_TEXTURE_COORD11_EXT #x87a8) (define-constant GL_OUTPUT_TEXTURE_COORD12_EXT #x87a9) (define-constant GL_OUTPUT_TEXTURE_COORD13_EXT #x87aa) (define-constant GL_OUTPUT_TEXTURE_COORD14_EXT #x87ab) (define-constant GL_OUTPUT_TEXTURE_COORD15_EXT #x87ac) (define-constant GL_OUTPUT_TEXTURE_COORD16_EXT #x87ad) (define-constant GL_OUTPUT_TEXTURE_COORD17_EXT #x87ae) (define-constant GL_OUTPUT_TEXTURE_COORD18_EXT #x87af) (define-constant GL_OUTPUT_TEXTURE_COORD19_EXT #x87b0) (define-constant GL_OUTPUT_TEXTURE_COORD20_EXT #x87b1) (define-constant GL_OUTPUT_TEXTURE_COORD21_EXT #x87b2) (define-constant GL_OUTPUT_TEXTURE_COORD22_EXT #x87b3) (define-constant GL_OUTPUT_TEXTURE_COORD23_EXT #x87b4) (define-constant GL_OUTPUT_TEXTURE_COORD24_EXT #x87b5) (define-constant GL_OUTPUT_TEXTURE_COORD25_EXT #x87b6) (define-constant GL_OUTPUT_TEXTURE_COORD26_EXT #x87b7) (define-constant GL_OUTPUT_TEXTURE_COORD27_EXT #x87b8) (define-constant GL_OUTPUT_TEXTURE_COORD28_EXT #x87b9) (define-constant GL_OUTPUT_TEXTURE_COORD29_EXT #x87ba) (define-constant GL_OUTPUT_TEXTURE_COORD30_EXT #x87bb) (define-constant GL_OUTPUT_TEXTURE_COORD31_EXT #x87bc) (define-constant GL_OUTPUT_FOG_EXT #x87bd) (define-constant GL_SCALAR_EXT #x87be) (define-constant GL_VECTOR_EXT #x87bf) (define-constant GL_MATRIX_EXT #x87c0) (define-constant GL_VARIANT_EXT #x87c1) (define-constant GL_INVARIANT_EXT #x87c2) (define-constant GL_LOCAL_CONSTANT_EXT #x87c3) (define-constant GL_LOCAL_EXT #x87c4) (define-constant GL_MAX_VERTEX_SHADER_INSTRUCTIONS_EXT #x87c5) (define-constant GL_MAX_VERTEX_SHADER_VARIANTS_EXT #x87c6) (define-constant GL_MAX_VERTEX_SHADER_INVARIANTS_EXT #x87c7) (define-constant GL_MAX_VERTEX_SHADER_LOCAL_CONSTANTS_EXT #x87c8) (define-constant GL_MAX_VERTEX_SHADER_LOCALS_EXT #x87c9) (define-constant GL_MAX_OPTIMIZED_VERTEX_SHADER_INSTRUCTIONS_EXT #x87ca) (define-constant GL_MAX_OPTIMIZED_VERTEX_SHADER_VARIANTS_EXT #x87cb) (define-constant GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCAL_CONSTANTS_EXT #x87cc) (define-constant GL_MAX_OPTIMIZED_VERTEX_SHADER_INVARIANTS_EXT #x87cd) (define-constant GL_MAX_OPTIMIZED_VERTEX_SHADER_LOCALS_EXT #x87ce) (define-constant GL_VERTEX_SHADER_INSTRUCTIONS_EXT #x87cf) (define-constant GL_VERTEX_SHADER_VARIANTS_EXT #x87d0) (define-constant GL_VERTEX_SHADER_INVARIANTS_EXT #x87d1) (define-constant GL_VERTEX_SHADER_LOCAL_CONSTANTS_EXT #x87d2) (define-constant GL_VERTEX_SHADER_LOCALS_EXT #x87d3) (define-constant GL_VERTEX_SHADER_OPTIMIZED_EXT #x87d4) (define-constant GL_X_EXT #x87d5) (define-constant GL_Y_EXT #x87d6) (define-constant GL_Z_EXT #x87d7) (define-constant GL_W_EXT #x87d8) (define-constant GL_NEGATIVE_X_EXT #x87d9) (define-constant GL_NEGATIVE_Y_EXT #x87da) (define-constant GL_NEGATIVE_Z_EXT #x87db) (define-constant GL_NEGATIVE_W_EXT #x87dc) (define-constant GL_ZERO_EXT #x87dd) (define-constant GL_ONE_EXT #x87de) (define-constant GL_NEGATIVE_ONE_EXT #x87df) (define-constant GL_NORMALIZED_RANGE_EXT #x87e0) (define-constant GL_FULL_RANGE_EXT #x87e1) (define-constant GL_CURRENT_VERTEX_EXT #x87e2) (define-constant GL_MVP_MATRIX_EXT #x87e3) (define-constant GL_VARIANT_VALUE_EXT #x87e4) (define-constant GL_VARIANT_DATATYPE_EXT #x87e5) (define-constant GL_VARIANT_ARRAY_STRIDE_EXT #x87e6) (define-constant GL_VARIANT_ARRAY_TYPE_EXT #x87e7) (define-constant GL_VARIANT_ARRAY_EXT #x87e8) (define-constant GL_VARIANT_ARRAY_POINTER_EXT #x87e9) (define-constant GL_INVARIANT_VALUE_EXT #x87ea) (define-constant GL_INVARIANT_DATATYPE_EXT #x87eb) (define-constant GL_LOCAL_CONSTANT_VALUE_EXT #x87ec) (define-constant GL_LOCAL_CONSTANT_DATATYPE_EXT #x87ed) (define-constant GL_MAX_VERTEX_STREAMS_ATI #x876b) (define-constant GL_VERTEX_STREAM0_ATI #x876c) (define-constant GL_VERTEX_STREAM1_ATI #x876d) (define-constant GL_VERTEX_STREAM2_ATI #x876e) (define-constant GL_VERTEX_STREAM3_ATI #x876f) (define-constant GL_VERTEX_STREAM4_ATI #x8770) (define-constant GL_VERTEX_STREAM5_ATI #x8771) (define-constant GL_VERTEX_STREAM6_ATI #x8772) (define-constant GL_VERTEX_STREAM7_ATI #x8773) (define-constant GL_VERTEX_SOURCE_ATI #x8774) (define-constant GL_ELEMENT_ARRAY_ATI #x8768) (define-constant GL_ELEMENT_ARRAY_TYPE_ATI #x8769) (define-constant GL_ELEMENT_ARRAY_POINTER_ATI #x876a) (define-constant GL_QUAD_MESH_SUN #x8614) (define-constant GL_TRIANGLE_MESH_SUN #x8615) (define-constant GL_SLICE_ACCUM_SUN #x85cc) (define-constant GL_MULTISAMPLE_FILTER_HINT_NV #x8534) (define-constant GL_DEPTH_CLAMP_NV #x864f) (define-constant GL_PIXEL_COUNTER_BITS_NV #x8864) (define-constant GL_CURRENT_OCCLUSION_QUERY_ID_NV #x8865) (define-constant GL_PIXEL_COUNT_NV #x8866) (define-constant GL_PIXEL_COUNT_AVAILABLE_NV #x8867) (define-constant GL_POINT_SPRITE_NV #x8861) (define-constant GL_COORD_REPLACE_NV #x8862) (define-constant GL_POINT_SPRITE_R_MODE_NV #x8863) (define-constant GL_OFFSET_PROJECTIVE_TEXTURE_2D_NV #x8850) (define-constant GL_OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV #x8851) (define-constant GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV #x8852) (define-constant GL_OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV #x8853) (define-constant GL_OFFSET_HILO_TEXTURE_2D_NV #x8854) (define-constant GL_OFFSET_HILO_TEXTURE_RECTANGLE_NV #x8855) (define-constant GL_OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV #x8856) (define-constant GL_OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV #x8857) (define-constant GL_DEPENDENT_HILO_TEXTURE_2D_NV #x8858) (define-constant GL_DEPENDENT_RGB_TEXTURE_3D_NV #x8859) (define-constant GL_DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV #x885a) (define-constant GL_DOT_PRODUCT_PASS_THROUGH_NV #x885b) (define-constant GL_DOT_PRODUCT_TEXTURE_1D_NV #x885c) (define-constant GL_DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV #x885d) (define-constant GL_HILO8_NV #x885e) (define-constant GL_SIGNED_HILO8_NV #x885f) (define-constant GL_FORCE_BLUE_TO_ONE_NV #x8860) (define-constant GL_STENCIL_TEST_TWO_SIDE_EXT #x8910) (define-constant GL_ACTIVE_STENCIL_FACE_EXT #x8911) (define-constant GL_TEXT_FRAGMENT_SHADER_ATI #x8200) (define-constant GL_UNPACK_CLIENT_STORAGE_APPLE #x85b2) (define-constant GL_ELEMENT_ARRAY_APPLE #x8768) (define-constant GL_ELEMENT_ARRAY_TYPE_APPLE #x8769) (define-constant GL_ELEMENT_ARRAY_POINTER_APPLE #x876a) (define-constant GL_DRAW_PIXELS_APPLE #x8a0a) (define-constant GL_FENCE_APPLE #x8a0b) (define-constant GL_VERTEX_ARRAY_BINDING_APPLE #x85b5) (define-constant GL_VERTEX_ARRAY_RANGE_APPLE #x851d) (define-constant GL_VERTEX_ARRAY_RANGE_LENGTH_APPLE #x851e) (define-constant GL_VERTEX_ARRAY_STORAGE_HINT_APPLE #x851f) (define-constant GL_VERTEX_ARRAY_RANGE_POINTER_APPLE #x8521) (define-constant GL_STORAGE_CACHED_APPLE #x85be) (define-constant GL_STORAGE_SHARED_APPLE #x85bf) (define-constant GL_YCBCR_422_APPLE #x85b9) (define-constant GL_UNSIGNED_SHORT_8_8_APPLE #x85ba) (define-constant GL_UNSIGNED_SHORT_8_8_REV_APPLE #x85bb) (define-constant GL_RGB_S3TC #x83a0) (define-constant GL_RGB4_S3TC #x83a1) (define-constant GL_RGBA_S3TC #x83a2) (define-constant GL_RGBA4_S3TC #x83a3) (define-constant GL_MAX_DRAW_BUFFERS_ATI #x8824) (define-constant GL_DRAW_BUFFER0_ATI #x8825) (define-constant GL_DRAW_BUFFER1_ATI #x8826) (define-constant GL_DRAW_BUFFER2_ATI #x8827) (define-constant GL_DRAW_BUFFER3_ATI #x8828) (define-constant GL_DRAW_BUFFER4_ATI #x8829) (define-constant GL_DRAW_BUFFER5_ATI #x882a) (define-constant GL_DRAW_BUFFER6_ATI #x882b) (define-constant GL_DRAW_BUFFER7_ATI #x882c) (define-constant GL_DRAW_BUFFER8_ATI #x882d) (define-constant GL_DRAW_BUFFER9_ATI #x882e) (define-constant GL_DRAW_BUFFER10_ATI #x882f) (define-constant GL_DRAW_BUFFER11_ATI #x8830) (define-constant GL_DRAW_BUFFER12_ATI #x8831) (define-constant GL_DRAW_BUFFER13_ATI #x8832) (define-constant GL_DRAW_BUFFER14_ATI #x8833) (define-constant GL_DRAW_BUFFER15_ATI #x8834) (define-constant GL_TYPE_RGBA_FLOAT_ATI #x8820) (define-constant GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI #x8835) (define-constant GL_MODULATE_ADD_ATI #x8744) (define-constant GL_MODULATE_SIGNED_ADD_ATI #x8745) (define-constant GL_MODULATE_SUBTRACT_ATI #x8746) (define-constant GL_RGBA_FLOAT32_ATI #x8814) (define-constant GL_RGB_FLOAT32_ATI #x8815) (define-constant GL_ALPHA_FLOAT32_ATI #x8816) (define-constant GL_INTENSITY_FLOAT32_ATI #x8817) (define-constant GL_LUMINANCE_FLOAT32_ATI #x8818) (define-constant GL_LUMINANCE_ALPHA_FLOAT32_ATI #x8819) (define-constant GL_RGBA_FLOAT16_ATI #x881a) (define-constant GL_RGB_FLOAT16_ATI #x881b) (define-constant GL_ALPHA_FLOAT16_ATI #x881c) (define-constant GL_INTENSITY_FLOAT16_ATI #x881d) (define-constant GL_LUMINANCE_FLOAT16_ATI #x881e) (define-constant GL_LUMINANCE_ALPHA_FLOAT16_ATI #x881f) (define-constant GL_FLOAT_R_NV #x8880) (define-constant GL_FLOAT_RG_NV #x8881) (define-constant GL_FLOAT_RGB_NV #x8882) (define-constant GL_FLOAT_RGBA_NV #x8883) (define-constant GL_FLOAT_R16_NV #x8884) (define-constant GL_FLOAT_R32_NV #x8885) (define-constant GL_FLOAT_RG16_NV #x8886) (define-constant GL_FLOAT_RG32_NV #x8887) (define-constant GL_FLOAT_RGB16_NV #x8888) (define-constant GL_FLOAT_RGB32_NV #x8889) (define-constant GL_FLOAT_RGBA16_NV #x888a) (define-constant GL_FLOAT_RGBA32_NV #x888b) (define-constant GL_TEXTURE_FLOAT_COMPONENTS_NV #x888c) (define-constant GL_FLOAT_CLEAR_COLOR_VALUE_NV #x888d) (define-constant GL_FLOAT_RGBA_MODE_NV #x888e) (define-constant GL_MAX_FRAGMENT_PROGRAM_LOCAL_PARAMETERS_NV #x8868) (define-constant GL_FRAGMENT_PROGRAM_NV #x8870) (define-constant GL_MAX_TEXTURE_COORDS_NV #x8871) (define-constant GL_MAX_TEXTURE_IMAGE_UNITS_NV #x8872) (define-constant GL_FRAGMENT_PROGRAM_BINDING_NV #x8873) (define-constant GL_PROGRAM_ERROR_STRING_NV #x8874) (define-constant GL_HALF_FLOAT_NV #x140b) (define-constant GL_WRITE_PIXEL_DATA_RANGE_NV #x8878) (define-constant GL_READ_PIXEL_DATA_RANGE_NV #x8879) (define-constant GL_WRITE_PIXEL_DATA_RANGE_LENGTH_NV #x887a) (define-constant GL_READ_PIXEL_DATA_RANGE_LENGTH_NV #x887b) (define-constant GL_WRITE_PIXEL_DATA_RANGE_POINTER_NV #x887c) (define-constant GL_READ_PIXEL_DATA_RANGE_POINTER_NV #x887d) (define-constant GL_PRIMITIVE_RESTART_NV #x8558) (define-constant GL_PRIMITIVE_RESTART_INDEX_NV #x8559) (define-constant GL_TEXTURE_UNSIGNED_REMAP_MODE_NV #x888f) (define-constant GL_STENCIL_BACK_FUNC_ATI #x8800) (define-constant GL_STENCIL_BACK_FAIL_ATI #x8801) (define-constant GL_STENCIL_BACK_PASS_DEPTH_FAIL_ATI #x8802) (define-constant GL_STENCIL_BACK_PASS_DEPTH_PASS_ATI #x8803) (define-constant GL_IMPLEMENTATION_COLOR_READ_TYPE_OES #x8b9a) (define-constant GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES #x8b9b) (define-constant GL_DEPTH_BOUNDS_TEST_EXT #x8890) (define-constant GL_DEPTH_BOUNDS_EXT #x8891) (define-constant GL_MIRROR_CLAMP_EXT #x8742) (define-constant GL_MIRROR_CLAMP_TO_EDGE_EXT #x8743) (define-constant GL_MIRROR_CLAMP_TO_BORDER_EXT #x8912) (define-constant GL_BLEND_EQUATION_RGB_EXT #x8009) (define-constant GL_BLEND_EQUATION_ALPHA_EXT #x883d) (define-constant GL_PACK_INVERT_MESA #x8758) (define-constant GL_UNSIGNED_SHORT_8_8_MESA #x85ba) (define-constant GL_UNSIGNED_SHORT_8_8_REV_MESA #x85bb) (define-constant GL_YCBCR_MESA #x8757) (define-constant GL_PIXEL_PACK_BUFFER_EXT #x88eb) (define-constant GL_PIXEL_UNPACK_BUFFER_EXT #x88ec) (define-constant GL_PIXEL_PACK_BUFFER_BINDING_EXT #x88ed) (define-constant GL_PIXEL_UNPACK_BUFFER_BINDING_EXT #x88ef) (define-constant GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV #x88f4) (define-constant GL_MAX_PROGRAM_CALL_DEPTH_NV #x88f5) (define-constant GL_MAX_PROGRAM_IF_DEPTH_NV #x88f6) (define-constant GL_MAX_PROGRAM_LOOP_DEPTH_NV #x88f7) (define-constant GL_MAX_PROGRAM_LOOP_COUNT_NV #x88f8) (define-constant GL_INVALID_FRAMEBUFFER_OPERATION_EXT #x0506) (define-constant GL_MAX_RENDERBUFFER_SIZE_EXT #x84e8) (define-constant GL_FRAMEBUFFER_BINDING_EXT #x8ca6) (define-constant GL_RENDERBUFFER_BINDING_EXT #x8ca7) (define-constant GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT #x8cd0) (define-constant GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT #x8cd1) (define-constant GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT #x8cd2) (define-constant GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT #x8cd3) (define-constant GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT #x8cd4) (define-constant GL_FRAMEBUFFER_COMPLETE_EXT #x8cd5) (define-constant GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT #x8cd6) (define-constant GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT #x8cd7) (define-constant GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT #x8cd8) (define-constant GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT #x8cd9) (define-constant GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT #x8cda) (define-constant GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT #x8cdb) (define-constant GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT #x8cdc) (define-constant GL_FRAMEBUFFER_UNSUPPORTED_EXT #x8cdd) (define-constant GL_MAX_COLOR_ATTACHMENTS_EXT #x8cdf) (define-constant GL_COLOR_ATTACHMENT0_EXT #x8ce0) (define-constant GL_COLOR_ATTACHMENT1_EXT #x8ce1) (define-constant GL_COLOR_ATTACHMENT2_EXT #x8ce2) (define-constant GL_COLOR_ATTACHMENT3_EXT #x8ce3) (define-constant GL_COLOR_ATTACHMENT4_EXT #x8ce4) (define-constant GL_COLOR_ATTACHMENT5_EXT #x8ce5) (define-constant GL_COLOR_ATTACHMENT6_EXT #x8ce6) (define-constant GL_COLOR_ATTACHMENT7_EXT #x8ce7) (define-constant GL_COLOR_ATTACHMENT8_EXT #x8ce8) (define-constant GL_COLOR_ATTACHMENT9_EXT #x8ce9) (define-constant GL_COLOR_ATTACHMENT10_EXT #x8cea) (define-constant GL_COLOR_ATTACHMENT11_EXT #x8ceb) (define-constant GL_COLOR_ATTACHMENT12_EXT #x8cec) (define-constant GL_COLOR_ATTACHMENT13_EXT #x8ced) (define-constant GL_COLOR_ATTACHMENT14_EXT #x8cee) (define-constant GL_COLOR_ATTACHMENT15_EXT #x8cef) (define-constant GL_DEPTH_ATTACHMENT_EXT #x8d00) (define-constant GL_STENCIL_ATTACHMENT_EXT #x8d20) (define-constant GL_FRAMEBUFFER_EXT #x8d40) (define-constant GL_RENDERBUFFER_EXT #x8d41) (define-constant GL_RENDERBUFFER_WIDTH_EXT #x8d42) (define-constant GL_RENDERBUFFER_HEIGHT_EXT #x8d43) (define-constant GL_RENDERBUFFER_INTERNAL_FORMAT_EXT #x8d44) (define-constant GL_STENCIL_INDEX_EXT #x8d45) (define-constant GL_STENCIL_INDEX1_EXT #x8d46) (define-constant GL_STENCIL_INDEX4_EXT #x8d47) (define-constant GL_STENCIL_INDEX8_EXT #x8d48) (define-constant GL_STENCIL_INDEX16_EXT #x8d49) (define-constant GL_RENDERBUFFER_RED_SIZE_EXT #x8d50) (define-constant GL_RENDERBUFFER_GREEN_SIZE_EXT #x8d51) (define-constant GL_RENDERBUFFER_BLUE_SIZE_EXT #x8d52) (define-constant GL_RENDERBUFFER_ALPHA_SIZE_EXT #x8d53) (define-constant GL_RENDERBUFFER_DEPTH_SIZE_EXT #x8d54) (define-constant GL_RENDERBUFFER_STENCIL_SIZE_EXT #x8d55) ;; API entry points (define-entry-point glBlendColor PFNGLBLENDCOLORPROC "typedef void (APIENTRYP PFNGLBLENDCOLORPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);") (define-entry-point glBlendEquation PFNGLBLENDEQUATIONPROC "typedef void (APIENTRYP PFNGLBLENDEQUATIONPROC) (GLenum mode);") (define-entry-point glDrawRangeElements PFNGLDRAWRANGEELEMENTSPROC "typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);") (define-entry-point glColorTable PFNGLCOLORTABLEPROC "typedef void (APIENTRYP PFNGLCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);") (define-entry-point glColorTableParameterfv PFNGLCOLORTABLEPARAMETERFVPROC "typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);") (define-entry-point glColorTableParameteriv PFNGLCOLORTABLEPARAMETERIVPROC "typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);") (define-entry-point glCopyColorTable PFNGLCOPYCOLORTABLEPROC "typedef void (APIENTRYP PFNGLCOPYCOLORTABLEPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);") (define-entry-point glGetColorTable PFNGLGETCOLORTABLEPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLEPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);") (define-entry-point glGetColorTableParameterfv PFNGLGETCOLORTABLEPARAMETERFVPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetColorTableParameteriv PFNGLGETCOLORTABLEPARAMETERIVPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glColorSubTable PFNGLCOLORSUBTABLEPROC "typedef void (APIENTRYP PFNGLCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);") (define-entry-point glCopyColorSubTable PFNGLCOPYCOLORSUBTABLEPROC "typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);") (define-entry-point glConvolutionFilter1D PFNGLCONVOLUTIONFILTER1DPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);") (define-entry-point glConvolutionFilter2D PFNGLCONVOLUTIONFILTER2DPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);") (define-entry-point glConvolutionParameterf PFNGLCONVOLUTIONPARAMETERFPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFPROC) (GLenum target, GLenum pname, GLfloat params);") (define-entry-point glConvolutionParameterfv PFNGLCONVOLUTIONPARAMETERFVPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, const GLfloat *params);") (define-entry-point glConvolutionParameteri PFNGLCONVOLUTIONPARAMETERIPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIPROC) (GLenum target, GLenum pname, GLint params);") (define-entry-point glConvolutionParameteriv PFNGLCONVOLUTIONPARAMETERIVPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, const GLint *params);") (define-entry-point glCopyConvolutionFilter1D PFNGLCOPYCONVOLUTIONFILTER1DPROC "typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);") (define-entry-point glCopyConvolutionFilter2D PFNGLCOPYCONVOLUTIONFILTER2DPROC "typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);") (define-entry-point glGetConvolutionFilter PFNGLGETCONVOLUTIONFILTERPROC "typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);") (define-entry-point glGetConvolutionParameterfv PFNGLGETCONVOLUTIONPARAMETERFVPROC "typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetConvolutionParameteriv PFNGLGETCONVOLUTIONPARAMETERIVPROC "typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetSeparableFilter PFNGLGETSEPARABLEFILTERPROC "typedef void (APIENTRYP PFNGLGETSEPARABLEFILTERPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);") (define-entry-point glSeparableFilter2D PFNGLSEPARABLEFILTER2DPROC "typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);") (define-entry-point glGetHistogram PFNGLGETHISTOGRAMPROC "typedef void (APIENTRYP PFNGLGETHISTOGRAMPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);") (define-entry-point glGetHistogramParameterfv PFNGLGETHISTOGRAMPARAMETERFVPROC "typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetHistogramParameteriv PFNGLGETHISTOGRAMPARAMETERIVPROC "typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetMinmax PFNGLGETMINMAXPROC "typedef void (APIENTRYP PFNGLGETMINMAXPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);") (define-entry-point glGetMinmaxParameterfv PFNGLGETMINMAXPARAMETERFVPROC "typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetMinmaxParameteriv PFNGLGETMINMAXPARAMETERIVPROC "typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glHistogram PFNGLHISTOGRAMPROC "typedef void (APIENTRYP PFNGLHISTOGRAMPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);") (define-entry-point glMinmax PFNGLMINMAXPROC "typedef void (APIENTRYP PFNGLMINMAXPROC) (GLenum target, GLenum internalformat, GLboolean sink);") (define-entry-point glResetHistogram PFNGLRESETHISTOGRAMPROC "typedef void (APIENTRYP PFNGLRESETHISTOGRAMPROC) (GLenum target);") (define-entry-point glResetMinmax PFNGLRESETMINMAXPROC "typedef void (APIENTRYP PFNGLRESETMINMAXPROC) (GLenum target);") (define-entry-point glTexImage3D PFNGLTEXIMAGE3DPROC "typedef void (APIENTRYP PFNGLTEXIMAGE3DPROC) (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);") (define-entry-point glTexSubImage3D PFNGLTEXSUBIMAGE3DPROC "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 GLvoid *pixels);") (define-entry-point glCopyTexSubImage3D PFNGLCOPYTEXSUBIMAGE3DPROC "typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);") (define-entry-point glActiveTexture PFNGLACTIVETEXTUREPROC "typedef void (APIENTRYP PFNGLACTIVETEXTUREPROC) (GLenum texture);") (define-entry-point glClientActiveTexture PFNGLCLIENTACTIVETEXTUREPROC "typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREPROC) (GLenum texture);") (define-entry-point glMultiTexCoord1d PFNGLMULTITEXCOORD1DPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1DPROC) (GLenum target, GLdouble s);") (define-entry-point glMultiTexCoord1dv PFNGLMULTITEXCOORD1DVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVPROC) (GLenum target, const GLdouble *v);") (define-entry-point glMultiTexCoord1f PFNGLMULTITEXCOORD1FPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1FPROC) (GLenum target, GLfloat s);") (define-entry-point glMultiTexCoord1fv PFNGLMULTITEXCOORD1FVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVPROC) (GLenum target, const GLfloat *v);") (define-entry-point glMultiTexCoord1i PFNGLMULTITEXCOORD1IPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1IPROC) (GLenum target, GLint s);") (define-entry-point glMultiTexCoord1iv PFNGLMULTITEXCOORD1IVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVPROC) (GLenum target, const GLint *v);") (define-entry-point glMultiTexCoord1s PFNGLMULTITEXCOORD1SPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1SPROC) (GLenum target, GLshort s);") (define-entry-point glMultiTexCoord1sv PFNGLMULTITEXCOORD1SVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVPROC) (GLenum target, const GLshort *v);") (define-entry-point glMultiTexCoord2d PFNGLMULTITEXCOORD2DPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2DPROC) (GLenum target, GLdouble s, GLdouble t);") (define-entry-point glMultiTexCoord2dv PFNGLMULTITEXCOORD2DVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVPROC) (GLenum target, const GLdouble *v);") (define-entry-point glMultiTexCoord2f PFNGLMULTITEXCOORD2FPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2FPROC) (GLenum target, GLfloat s, GLfloat t);") (define-entry-point glMultiTexCoord2fv PFNGLMULTITEXCOORD2FVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVPROC) (GLenum target, const GLfloat *v);") (define-entry-point glMultiTexCoord2i PFNGLMULTITEXCOORD2IPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2IPROC) (GLenum target, GLint s, GLint t);") (define-entry-point glMultiTexCoord2iv PFNGLMULTITEXCOORD2IVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVPROC) (GLenum target, const GLint *v);") (define-entry-point glMultiTexCoord2s PFNGLMULTITEXCOORD2SPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2SPROC) (GLenum target, GLshort s, GLshort t);") (define-entry-point glMultiTexCoord2sv PFNGLMULTITEXCOORD2SVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVPROC) (GLenum target, const GLshort *v);") (define-entry-point glMultiTexCoord3d PFNGLMULTITEXCOORD3DPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);") (define-entry-point glMultiTexCoord3dv PFNGLMULTITEXCOORD3DVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVPROC) (GLenum target, const GLdouble *v);") (define-entry-point glMultiTexCoord3f PFNGLMULTITEXCOORD3FPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);") (define-entry-point glMultiTexCoord3fv PFNGLMULTITEXCOORD3FVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVPROC) (GLenum target, const GLfloat *v);") (define-entry-point glMultiTexCoord3i PFNGLMULTITEXCOORD3IPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3IPROC) (GLenum target, GLint s, GLint t, GLint r);") (define-entry-point glMultiTexCoord3iv PFNGLMULTITEXCOORD3IVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVPROC) (GLenum target, const GLint *v);") (define-entry-point glMultiTexCoord3s PFNGLMULTITEXCOORD3SPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3SPROC) (GLenum target, GLshort s, GLshort t, GLshort r);") (define-entry-point glMultiTexCoord3sv PFNGLMULTITEXCOORD3SVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVPROC) (GLenum target, const GLshort *v);") (define-entry-point glMultiTexCoord4d PFNGLMULTITEXCOORD4DPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4DPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);") (define-entry-point glMultiTexCoord4dv PFNGLMULTITEXCOORD4DVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVPROC) (GLenum target, const GLdouble *v);") (define-entry-point glMultiTexCoord4f PFNGLMULTITEXCOORD4FPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4FPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);") (define-entry-point glMultiTexCoord4fv PFNGLMULTITEXCOORD4FVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVPROC) (GLenum target, const GLfloat *v);") (define-entry-point glMultiTexCoord4i PFNGLMULTITEXCOORD4IPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4IPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);") (define-entry-point glMultiTexCoord4iv PFNGLMULTITEXCOORD4IVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVPROC) (GLenum target, const GLint *v);") (define-entry-point glMultiTexCoord4s PFNGLMULTITEXCOORD4SPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4SPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);") (define-entry-point glMultiTexCoord4sv PFNGLMULTITEXCOORD4SVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVPROC) (GLenum target, const GLshort *v);") (define-entry-point glLoadTransposeMatrixf PFNGLLOADTRANSPOSEMATRIXFPROC "typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFPROC) (const GLfloat *m);") (define-entry-point glLoadTransposeMatrixd PFNGLLOADTRANSPOSEMATRIXDPROC "typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDPROC) (const GLdouble *m);") (define-entry-point glMultTransposeMatrixf PFNGLMULTTRANSPOSEMATRIXFPROC "typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFPROC) (const GLfloat *m);") (define-entry-point glMultTransposeMatrixd PFNGLMULTTRANSPOSEMATRIXDPROC "typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDPROC) (const GLdouble *m);") (define-entry-point glSampleCoverage PFNGLSAMPLECOVERAGEPROC "typedef void (APIENTRYP PFNGLSAMPLECOVERAGEPROC) (GLclampf value, GLboolean invert);") (define-entry-point glCompressedTexImage3D PFNGLCOMPRESSEDTEXIMAGE3DPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexImage2D PFNGLCOMPRESSEDTEXIMAGE2DPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexImage1D PFNGLCOMPRESSEDTEXIMAGE1DPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexSubImage3D PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC "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 GLvoid *data);") (define-entry-point glCompressedTexSubImage2D PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexSubImage1D PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);") (define-entry-point glGetCompressedTexImage PFNGLGETCOMPRESSEDTEXIMAGEPROC "typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEPROC) (GLenum target, GLint level, GLvoid *img);") (define-entry-point glBlendFuncSeparate PFNGLBLENDFUNCSEPARATEPROC "typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);") (define-entry-point glFogCoordf PFNGLFOGCOORDFPROC "typedef void (APIENTRYP PFNGLFOGCOORDFPROC) (GLfloat coord);") (define-entry-point glFogCoordfv PFNGLFOGCOORDFVPROC "typedef void (APIENTRYP PFNGLFOGCOORDFVPROC) (const GLfloat *coord);") (define-entry-point glFogCoordd PFNGLFOGCOORDDPROC "typedef void (APIENTRYP PFNGLFOGCOORDDPROC) (GLdouble coord);") (define-entry-point glFogCoorddv PFNGLFOGCOORDDVPROC "typedef void (APIENTRYP PFNGLFOGCOORDDVPROC) (const GLdouble *coord);") (define-entry-point glFogCoordPointer PFNGLFOGCOORDPOINTERPROC "typedef void (APIENTRYP PFNGLFOGCOORDPOINTERPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glMultiDrawArrays PFNGLMULTIDRAWARRAYSPROC "typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);") (define-entry-point glMultiDrawElements PFNGLMULTIDRAWELEMENTSPROC "typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);") (define-entry-point glPointParameterf PFNGLPOINTPARAMETERFPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERFPROC) (GLenum pname, GLfloat param);") (define-entry-point glPointParameterfv PFNGLPOINTPARAMETERFVPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERFVPROC) (GLenum pname, const GLfloat *params);") (define-entry-point glPointParameteri PFNGLPOINTPARAMETERIPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERIPROC) (GLenum pname, GLint param);") (define-entry-point glPointParameteriv PFNGLPOINTPARAMETERIVPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERIVPROC) (GLenum pname, const GLint *params);") (define-entry-point glSecondaryColor3b PFNGLSECONDARYCOLOR3BPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BPROC) (GLbyte red, GLbyte green, GLbyte blue);") (define-entry-point glSecondaryColor3bv PFNGLSECONDARYCOLOR3BVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVPROC) (const GLbyte *v);") (define-entry-point glSecondaryColor3d PFNGLSECONDARYCOLOR3DPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DPROC) (GLdouble red, GLdouble green, GLdouble blue);") (define-entry-point glSecondaryColor3dv PFNGLSECONDARYCOLOR3DVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVPROC) (const GLdouble *v);") (define-entry-point glSecondaryColor3f PFNGLSECONDARYCOLOR3FPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FPROC) (GLfloat red, GLfloat green, GLfloat blue);") (define-entry-point glSecondaryColor3fv PFNGLSECONDARYCOLOR3FVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVPROC) (const GLfloat *v);") (define-entry-point glSecondaryColor3i PFNGLSECONDARYCOLOR3IPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IPROC) (GLint red, GLint green, GLint blue);") (define-entry-point glSecondaryColor3iv PFNGLSECONDARYCOLOR3IVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVPROC) (const GLint *v);") (define-entry-point glSecondaryColor3s PFNGLSECONDARYCOLOR3SPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SPROC) (GLshort red, GLshort green, GLshort blue);") (define-entry-point glSecondaryColor3sv PFNGLSECONDARYCOLOR3SVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVPROC) (const GLshort *v);") (define-entry-point glSecondaryColor3ub PFNGLSECONDARYCOLOR3UBPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBPROC) (GLubyte red, GLubyte green, GLubyte blue);") (define-entry-point glSecondaryColor3ubv PFNGLSECONDARYCOLOR3UBVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVPROC) (const GLubyte *v);") (define-entry-point glSecondaryColor3ui PFNGLSECONDARYCOLOR3UIPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIPROC) (GLuint red, GLuint green, GLuint blue);") (define-entry-point glSecondaryColor3uiv PFNGLSECONDARYCOLOR3UIVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVPROC) (const GLuint *v);") (define-entry-point glSecondaryColor3us PFNGLSECONDARYCOLOR3USPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USPROC) (GLushort red, GLushort green, GLushort blue);") (define-entry-point glSecondaryColor3usv PFNGLSECONDARYCOLOR3USVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVPROC) (const GLushort *v);") (define-entry-point glSecondaryColorPointer PFNGLSECONDARYCOLORPOINTERPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glWindowPos2d PFNGLWINDOWPOS2DPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2DPROC) (GLdouble x, GLdouble y);") (define-entry-point glWindowPos2dv PFNGLWINDOWPOS2DVPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2DVPROC) (const GLdouble *v);") (define-entry-point glWindowPos2f PFNGLWINDOWPOS2FPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2FPROC) (GLfloat x, GLfloat y);") (define-entry-point glWindowPos2fv PFNGLWINDOWPOS2FVPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2FVPROC) (const GLfloat *v);") (define-entry-point glWindowPos2i PFNGLWINDOWPOS2IPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2IPROC) (GLint x, GLint y);") (define-entry-point glWindowPos2iv PFNGLWINDOWPOS2IVPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2IVPROC) (const GLint *v);") (define-entry-point glWindowPos2s PFNGLWINDOWPOS2SPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2SPROC) (GLshort x, GLshort y);") (define-entry-point glWindowPos2sv PFNGLWINDOWPOS2SVPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2SVPROC) (const GLshort *v);") (define-entry-point glWindowPos3d PFNGLWINDOWPOS3DPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3DPROC) (GLdouble x, GLdouble y, GLdouble z);") (define-entry-point glWindowPos3dv PFNGLWINDOWPOS3DVPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3DVPROC) (const GLdouble *v);") (define-entry-point glWindowPos3f PFNGLWINDOWPOS3FPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3FPROC) (GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glWindowPos3fv PFNGLWINDOWPOS3FVPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3FVPROC) (const GLfloat *v);") (define-entry-point glWindowPos3i PFNGLWINDOWPOS3IPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3IPROC) (GLint x, GLint y, GLint z);") (define-entry-point glWindowPos3iv PFNGLWINDOWPOS3IVPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3IVPROC) (const GLint *v);") (define-entry-point glWindowPos3s PFNGLWINDOWPOS3SPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3SPROC) (GLshort x, GLshort y, GLshort z);") (define-entry-point glWindowPos3sv PFNGLWINDOWPOS3SVPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3SVPROC) (const GLshort *v);") (define-entry-point glGenQueries PFNGLGENQUERIESPROC "typedef void (APIENTRYP PFNGLGENQUERIESPROC) (GLsizei n, GLuint *ids);") (define-entry-point glDeleteQueries PFNGLDELETEQUERIESPROC "typedef void (APIENTRYP PFNGLDELETEQUERIESPROC) (GLsizei n, const GLuint *ids);") (define-entry-point glIsQuery PFNGLISQUERYPROC "typedef GLboolean (APIENTRYP PFNGLISQUERYPROC) (GLuint id);") (define-entry-point glBeginQuery PFNGLBEGINQUERYPROC "typedef void (APIENTRYP PFNGLBEGINQUERYPROC) (GLenum target, GLuint id);") (define-entry-point glEndQuery PFNGLENDQUERYPROC "typedef void (APIENTRYP PFNGLENDQUERYPROC) (GLenum target);") (define-entry-point glGetQueryiv PFNGLGETQUERYIVPROC "typedef void (APIENTRYP PFNGLGETQUERYIVPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetQueryObjectiv PFNGLGETQUERYOBJECTIVPROC "typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVPROC) (GLuint id, GLenum pname, GLint *params);") (define-entry-point glGetQueryObjectuiv PFNGLGETQUERYOBJECTUIVPROC "typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVPROC) (GLuint id, GLenum pname, GLuint *params);") (define-entry-point glBindBuffer PFNGLBINDBUFFERPROC "typedef void (APIENTRYP PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);") (define-entry-point glDeleteBuffers PFNGLDELETEBUFFERSPROC "typedef void (APIENTRYP PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint *buffers);") (define-entry-point glGenBuffers PFNGLGENBUFFERSPROC "typedef void (APIENTRYP PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);") (define-entry-point glIsBuffer PFNGLISBUFFERPROC "typedef GLboolean (APIENTRYP PFNGLISBUFFERPROC) (GLuint buffer);") (define-entry-point glBufferData PFNGLBUFFERDATAPROC "typedef void (APIENTRYP PFNGLBUFFERDATAPROC) (GLenum target, GLsizeiptr size, const GLvoid *data, GLenum usage);") (define-entry-point glBufferSubData PFNGLBUFFERSUBDATAPROC "typedef void (APIENTRYP PFNGLBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid *data);") (define-entry-point glGetBufferSubData PFNGLGETBUFFERSUBDATAPROC "typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAPROC) (GLenum target, GLintptr offset, GLsizeiptr size, GLvoid *data);") (define-entry-point glMapBuffer PFNGLMAPBUFFERPROC "typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);") (define-entry-point glUnmapBuffer PFNGLUNMAPBUFFERPROC "typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERPROC) (GLenum target);") (define-entry-point glGetBufferParameteriv PFNGLGETBUFFERPARAMETERIVPROC "typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetBufferPointerv PFNGLGETBUFFERPOINTERVPROC "typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params);") (define-entry-point glBlendEquationSeparate PFNGLBLENDEQUATIONSEPARATEPROC "typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha);") (define-entry-point glDrawBuffers PFNGLDRAWBUFFERSPROC "typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs);") (define-entry-point glStencilOpSeparate PFNGLSTENCILOPSEPARATEPROC "typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);") (define-entry-point glStencilFuncSeparate PFNGLSTENCILFUNCSEPARATEPROC "typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);") (define-entry-point glStencilMaskSeparate PFNGLSTENCILMASKSEPARATEPROC "typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask);") (define-entry-point glAttachShader PFNGLATTACHSHADERPROC "typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader);") (define-entry-point glBindAttribLocation PFNGLBINDATTRIBLOCATIONPROC "typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name);") (define-entry-point glCompileShader PFNGLCOMPILESHADERPROC "typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader);") (define-entry-point glCreateProgram PFNGLCREATEPROGRAMPROC "typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void);") (define-entry-point glCreateShader PFNGLCREATESHADERPROC "typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type);") (define-entry-point glDeleteProgram PFNGLDELETEPROGRAMPROC "typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program);") (define-entry-point glDeleteShader PFNGLDELETESHADERPROC "typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader);") (define-entry-point glDetachShader PFNGLDETACHSHADERPROC "typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader);") (define-entry-point glDisableVertexAttribArray PFNGLDISABLEVERTEXATTRIBARRAYPROC "typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index);") (define-entry-point glEnableVertexAttribArray PFNGLENABLEVERTEXATTRIBARRAYPROC "typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);") (define-entry-point glGetActiveAttrib PFNGLGETACTIVEATTRIBPROC "typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);") (define-entry-point glGetActiveUniform PFNGLGETACTIVEUNIFORMPROC "typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name);") (define-entry-point glGetAttachedShaders PFNGLGETATTACHEDSHADERSPROC "typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj);") (define-entry-point glGetAttribLocation PFNGLGETATTRIBLOCATIONPROC "typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name);") (define-entry-point glGetProgramiv PFNGLGETPROGRAMIVPROC "typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params);") (define-entry-point glGetProgramInfoLog PFNGLGETPROGRAMINFOLOGPROC "typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog);") (define-entry-point glGetShaderiv PFNGLGETSHADERIVPROC "typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params);") (define-entry-point glGetShaderInfoLog PFNGLGETSHADERINFOLOGPROC "typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog);") (define-entry-point glGetShaderSource PFNGLGETSHADERSOURCEPROC "typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source);") (define-entry-point glGetUniformLocation PFNGLGETUNIFORMLOCATIONPROC "typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name);") (define-entry-point glGetUniformfv PFNGLGETUNIFORMFVPROC "typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params);") (define-entry-point glGetUniformiv PFNGLGETUNIFORMIVPROC "typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params);") (define-entry-point glGetVertexAttribdv PFNGLGETVERTEXATTRIBDVPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params);") (define-entry-point glGetVertexAttribfv PFNGLGETVERTEXATTRIBFVPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params);") (define-entry-point glGetVertexAttribiv PFNGLGETVERTEXATTRIBIVPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params);") (define-entry-point glGetVertexAttribPointerv PFNGLGETVERTEXATTRIBPOINTERVPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);") (define-entry-point glIsProgram PFNGLISPROGRAMPROC "typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program);") (define-entry-point glIsShader PFNGLISSHADERPROC "typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader);") (define-entry-point glLinkProgram PFNGLLINKPROGRAMPROC "typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program);") (define-entry-point glShaderSource PFNGLSHADERSOURCEPROC "typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length);") (define-entry-point glUseProgram PFNGLUSEPROGRAMPROC "typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program);") (define-entry-point glUniform1f PFNGLUNIFORM1FPROC "typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0);") (define-entry-point glUniform2f PFNGLUNIFORM2FPROC "typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1);") (define-entry-point glUniform3f PFNGLUNIFORM3FPROC "typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);") (define-entry-point glUniform4f PFNGLUNIFORM4FPROC "typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);") (define-entry-point glUniform1i PFNGLUNIFORM1IPROC "typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0);") (define-entry-point glUniform2i PFNGLUNIFORM2IPROC "typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1);") (define-entry-point glUniform3i PFNGLUNIFORM3IPROC "typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2);") (define-entry-point glUniform4i PFNGLUNIFORM4IPROC "typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);") (define-entry-point glUniform1fv PFNGLUNIFORM1FVPROC "typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value);") (define-entry-point glUniform2fv PFNGLUNIFORM2FVPROC "typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value);") (define-entry-point glUniform3fv PFNGLUNIFORM3FVPROC "typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value);") (define-entry-point glUniform4fv PFNGLUNIFORM4FVPROC "typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value);") (define-entry-point glUniform1iv PFNGLUNIFORM1IVPROC "typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value);") (define-entry-point glUniform2iv PFNGLUNIFORM2IVPROC "typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value);") (define-entry-point glUniform3iv PFNGLUNIFORM3IVPROC "typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value);") (define-entry-point glUniform4iv PFNGLUNIFORM4IVPROC "typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value);") (define-entry-point glUniformMatrix2fv PFNGLUNIFORMMATRIX2FVPROC "typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);") (define-entry-point glUniformMatrix3fv PFNGLUNIFORMMATRIX3FVPROC "typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);") (define-entry-point glUniformMatrix4fv PFNGLUNIFORMMATRIX4FVPROC "typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);") (define-entry-point glValidateProgram PFNGLVALIDATEPROGRAMPROC "typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program);") (define-entry-point glVertexAttrib1d PFNGLVERTEXATTRIB1DPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x);") (define-entry-point glVertexAttrib1dv PFNGLVERTEXATTRIB1DVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib1f PFNGLVERTEXATTRIB1FPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x);") (define-entry-point glVertexAttrib1fv PFNGLVERTEXATTRIB1FVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib1s PFNGLVERTEXATTRIB1SPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x);") (define-entry-point glVertexAttrib1sv PFNGLVERTEXATTRIB1SVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib2d PFNGLVERTEXATTRIB2DPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y);") (define-entry-point glVertexAttrib2dv PFNGLVERTEXATTRIB2DVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib2f PFNGLVERTEXATTRIB2FPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y);") (define-entry-point glVertexAttrib2fv PFNGLVERTEXATTRIB2FVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib2s PFNGLVERTEXATTRIB2SPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y);") (define-entry-point glVertexAttrib2sv PFNGLVERTEXATTRIB2SVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib3d PFNGLVERTEXATTRIB3DPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);") (define-entry-point glVertexAttrib3dv PFNGLVERTEXATTRIB3DVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib3f PFNGLVERTEXATTRIB3FPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glVertexAttrib3fv PFNGLVERTEXATTRIB3FVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib3s PFNGLVERTEXATTRIB3SPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z);") (define-entry-point glVertexAttrib3sv PFNGLVERTEXATTRIB3SVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib4Nbv PFNGLVERTEXATTRIB4NBVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v);") (define-entry-point glVertexAttrib4Niv PFNGLVERTEXATTRIB4NIVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v);") (define-entry-point glVertexAttrib4Nsv PFNGLVERTEXATTRIB4NSVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib4Nub PFNGLVERTEXATTRIB4NUBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);") (define-entry-point glVertexAttrib4Nubv PFNGLVERTEXATTRIB4NUBVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v);") (define-entry-point glVertexAttrib4Nuiv PFNGLVERTEXATTRIB4NUIVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v);") (define-entry-point glVertexAttrib4Nusv PFNGLVERTEXATTRIB4NUSVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v);") (define-entry-point glVertexAttrib4bv PFNGLVERTEXATTRIB4BVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v);") (define-entry-point glVertexAttrib4d PFNGLVERTEXATTRIB4DPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glVertexAttrib4dv PFNGLVERTEXATTRIB4DVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib4f PFNGLVERTEXATTRIB4FPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glVertexAttrib4fv PFNGLVERTEXATTRIB4FVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib4iv PFNGLVERTEXATTRIB4IVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v);") (define-entry-point glVertexAttrib4s PFNGLVERTEXATTRIB4SPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);") (define-entry-point glVertexAttrib4sv PFNGLVERTEXATTRIB4SVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib4ubv PFNGLVERTEXATTRIB4UBVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v);") (define-entry-point glVertexAttrib4uiv PFNGLVERTEXATTRIB4UIVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v);") (define-entry-point glVertexAttrib4usv PFNGLVERTEXATTRIB4USVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v);") (define-entry-point glVertexAttribPointer PFNGLVERTEXATTRIBPOINTERPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);") (define-entry-point glActiveTextureARB PFNGLACTIVETEXTUREARBPROC "typedef void (APIENTRYP PFNGLACTIVETEXTUREARBPROC) (GLenum texture);") (define-entry-point glClientActiveTextureARB PFNGLCLIENTACTIVETEXTUREARBPROC "typedef void (APIENTRYP PFNGLCLIENTACTIVETEXTUREARBPROC) (GLenum texture);") (define-entry-point glMultiTexCoord1dARB PFNGLMULTITEXCOORD1DARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1DARBPROC) (GLenum target, GLdouble s);") (define-entry-point glMultiTexCoord1dvARB PFNGLMULTITEXCOORD1DVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1DVARBPROC) (GLenum target, const GLdouble *v);") (define-entry-point glMultiTexCoord1fARB PFNGLMULTITEXCOORD1FARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1FARBPROC) (GLenum target, GLfloat s);") (define-entry-point glMultiTexCoord1fvARB PFNGLMULTITEXCOORD1FVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1FVARBPROC) (GLenum target, const GLfloat *v);") (define-entry-point glMultiTexCoord1iARB PFNGLMULTITEXCOORD1IARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1IARBPROC) (GLenum target, GLint s);") (define-entry-point glMultiTexCoord1ivARB PFNGLMULTITEXCOORD1IVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1IVARBPROC) (GLenum target, const GLint *v);") (define-entry-point glMultiTexCoord1sARB PFNGLMULTITEXCOORD1SARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1SARBPROC) (GLenum target, GLshort s);") (define-entry-point glMultiTexCoord1svARB PFNGLMULTITEXCOORD1SVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1SVARBPROC) (GLenum target, const GLshort *v);") (define-entry-point glMultiTexCoord2dARB PFNGLMULTITEXCOORD2DARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2DARBPROC) (GLenum target, GLdouble s, GLdouble t);") (define-entry-point glMultiTexCoord2dvARB PFNGLMULTITEXCOORD2DVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2DVARBPROC) (GLenum target, const GLdouble *v);") (define-entry-point glMultiTexCoord2fARB PFNGLMULTITEXCOORD2FARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2FARBPROC) (GLenum target, GLfloat s, GLfloat t);") (define-entry-point glMultiTexCoord2fvARB PFNGLMULTITEXCOORD2FVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2FVARBPROC) (GLenum target, const GLfloat *v);") (define-entry-point glMultiTexCoord2iARB PFNGLMULTITEXCOORD2IARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2IARBPROC) (GLenum target, GLint s, GLint t);") (define-entry-point glMultiTexCoord2ivARB PFNGLMULTITEXCOORD2IVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2IVARBPROC) (GLenum target, const GLint *v);") (define-entry-point glMultiTexCoord2sARB PFNGLMULTITEXCOORD2SARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2SARBPROC) (GLenum target, GLshort s, GLshort t);") (define-entry-point glMultiTexCoord2svARB PFNGLMULTITEXCOORD2SVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2SVARBPROC) (GLenum target, const GLshort *v);") (define-entry-point glMultiTexCoord3dARB PFNGLMULTITEXCOORD3DARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r);") (define-entry-point glMultiTexCoord3dvARB PFNGLMULTITEXCOORD3DVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3DVARBPROC) (GLenum target, const GLdouble *v);") (define-entry-point glMultiTexCoord3fARB PFNGLMULTITEXCOORD3FARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r);") (define-entry-point glMultiTexCoord3fvARB PFNGLMULTITEXCOORD3FVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3FVARBPROC) (GLenum target, const GLfloat *v);") (define-entry-point glMultiTexCoord3iARB PFNGLMULTITEXCOORD3IARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3IARBPROC) (GLenum target, GLint s, GLint t, GLint r);") (define-entry-point glMultiTexCoord3ivARB PFNGLMULTITEXCOORD3IVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3IVARBPROC) (GLenum target, const GLint *v);") (define-entry-point glMultiTexCoord3sARB PFNGLMULTITEXCOORD3SARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r);") (define-entry-point glMultiTexCoord3svARB PFNGLMULTITEXCOORD3SVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3SVARBPROC) (GLenum target, const GLshort *v);") (define-entry-point glMultiTexCoord4dARB PFNGLMULTITEXCOORD4DARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4DARBPROC) (GLenum target, GLdouble s, GLdouble t, GLdouble r, GLdouble q);") (define-entry-point glMultiTexCoord4dvARB PFNGLMULTITEXCOORD4DVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4DVARBPROC) (GLenum target, const GLdouble *v);") (define-entry-point glMultiTexCoord4fARB PFNGLMULTITEXCOORD4FARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4FARBPROC) (GLenum target, GLfloat s, GLfloat t, GLfloat r, GLfloat q);") (define-entry-point glMultiTexCoord4fvARB PFNGLMULTITEXCOORD4FVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4FVARBPROC) (GLenum target, const GLfloat *v);") (define-entry-point glMultiTexCoord4iARB PFNGLMULTITEXCOORD4IARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4IARBPROC) (GLenum target, GLint s, GLint t, GLint r, GLint q);") (define-entry-point glMultiTexCoord4ivARB PFNGLMULTITEXCOORD4IVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4IVARBPROC) (GLenum target, const GLint *v);") (define-entry-point glMultiTexCoord4sARB PFNGLMULTITEXCOORD4SARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4SARBPROC) (GLenum target, GLshort s, GLshort t, GLshort r, GLshort q);") (define-entry-point glMultiTexCoord4svARB PFNGLMULTITEXCOORD4SVARBPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4SVARBPROC) (GLenum target, const GLshort *v);") (define-entry-point glLoadTransposeMatrixfARB PFNGLLOADTRANSPOSEMATRIXFARBPROC "typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);") (define-entry-point glLoadTransposeMatrixdARB PFNGLLOADTRANSPOSEMATRIXDARBPROC "typedef void (APIENTRYP PFNGLLOADTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);") (define-entry-point glMultTransposeMatrixfARB PFNGLMULTTRANSPOSEMATRIXFARBPROC "typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXFARBPROC) (const GLfloat *m);") (define-entry-point glMultTransposeMatrixdARB PFNGLMULTTRANSPOSEMATRIXDARBPROC "typedef void (APIENTRYP PFNGLMULTTRANSPOSEMATRIXDARBPROC) (const GLdouble *m);") (define-entry-point glSampleCoverageARB PFNGLSAMPLECOVERAGEARBPROC "typedef void (APIENTRYP PFNGLSAMPLECOVERAGEARBPROC) (GLclampf value, GLboolean invert);") (define-entry-point glCompressedTexImage3DARB PFNGLCOMPRESSEDTEXIMAGE3DARBPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE3DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexImage2DARB PFNGLCOMPRESSEDTEXIMAGE2DARBPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE2DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLint border, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexImage1DARB PFNGLCOMPRESSEDTEXIMAGE1DARBPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXIMAGE1DARBPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLint border, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexSubImage3DARB PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE3DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexSubImage2DARB PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE2DARBPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const GLvoid *data);") (define-entry-point glCompressedTexSubImage1DARB PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC "typedef void (APIENTRYP PFNGLCOMPRESSEDTEXSUBIMAGE1DARBPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLsizei imageSize, const GLvoid *data);") (define-entry-point glGetCompressedTexImageARB PFNGLGETCOMPRESSEDTEXIMAGEARBPROC "typedef void (APIENTRYP PFNGLGETCOMPRESSEDTEXIMAGEARBPROC) (GLenum target, GLint level, GLvoid *img);") (define-entry-point glPointParameterfARB PFNGLPOINTPARAMETERFARBPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERFARBPROC) (GLenum pname, GLfloat param);") (define-entry-point glPointParameterfvARB PFNGLPOINTPARAMETERFVARBPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERFVARBPROC) (GLenum pname, const GLfloat *params);") (define-entry-point glWeightbvARB PFNGLWEIGHTBVARBPROC "typedef void (APIENTRYP PFNGLWEIGHTBVARBPROC) (GLint size, const GLbyte *weights);") (define-entry-point glWeightsvARB PFNGLWEIGHTSVARBPROC "typedef void (APIENTRYP PFNGLWEIGHTSVARBPROC) (GLint size, const GLshort *weights);") (define-entry-point glWeightivARB PFNGLWEIGHTIVARBPROC "typedef void (APIENTRYP PFNGLWEIGHTIVARBPROC) (GLint size, const GLint *weights);") (define-entry-point glWeightfvARB PFNGLWEIGHTFVARBPROC "typedef void (APIENTRYP PFNGLWEIGHTFVARBPROC) (GLint size, const GLfloat *weights);") (define-entry-point glWeightdvARB PFNGLWEIGHTDVARBPROC "typedef void (APIENTRYP PFNGLWEIGHTDVARBPROC) (GLint size, const GLdouble *weights);") (define-entry-point glWeightubvARB PFNGLWEIGHTUBVARBPROC "typedef void (APIENTRYP PFNGLWEIGHTUBVARBPROC) (GLint size, const GLubyte *weights);") (define-entry-point glWeightusvARB PFNGLWEIGHTUSVARBPROC "typedef void (APIENTRYP PFNGLWEIGHTUSVARBPROC) (GLint size, const GLushort *weights);") (define-entry-point glWeightuivARB PFNGLWEIGHTUIVARBPROC "typedef void (APIENTRYP PFNGLWEIGHTUIVARBPROC) (GLint size, const GLuint *weights);") (define-entry-point glWeightPointerARB PFNGLWEIGHTPOINTERARBPROC "typedef void (APIENTRYP PFNGLWEIGHTPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glVertexBlendARB PFNGLVERTEXBLENDARBPROC "typedef void (APIENTRYP PFNGLVERTEXBLENDARBPROC) (GLint count);") (define-entry-point glCurrentPaletteMatrixARB PFNGLCURRENTPALETTEMATRIXARBPROC "typedef void (APIENTRYP PFNGLCURRENTPALETTEMATRIXARBPROC) (GLint index);") (define-entry-point glMatrixIndexubvARB PFNGLMATRIXINDEXUBVARBPROC "typedef void (APIENTRYP PFNGLMATRIXINDEXUBVARBPROC) (GLint size, const GLubyte *indices);") (define-entry-point glMatrixIndexusvARB PFNGLMATRIXINDEXUSVARBPROC "typedef void (APIENTRYP PFNGLMATRIXINDEXUSVARBPROC) (GLint size, const GLushort *indices);") (define-entry-point glMatrixIndexuivARB PFNGLMATRIXINDEXUIVARBPROC "typedef void (APIENTRYP PFNGLMATRIXINDEXUIVARBPROC) (GLint size, const GLuint *indices);") (define-entry-point glMatrixIndexPointerARB PFNGLMATRIXINDEXPOINTERARBPROC "typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glWindowPos2dARB PFNGLWINDOWPOS2DARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2DARBPROC) (GLdouble x, GLdouble y);") (define-entry-point glWindowPos2dvARB PFNGLWINDOWPOS2DVARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2DVARBPROC) (const GLdouble *v);") (define-entry-point glWindowPos2fARB PFNGLWINDOWPOS2FARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2FARBPROC) (GLfloat x, GLfloat y);") (define-entry-point glWindowPos2fvARB PFNGLWINDOWPOS2FVARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2FVARBPROC) (const GLfloat *v);") (define-entry-point glWindowPos2iARB PFNGLWINDOWPOS2IARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2IARBPROC) (GLint x, GLint y);") (define-entry-point glWindowPos2ivARB PFNGLWINDOWPOS2IVARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2IVARBPROC) (const GLint *v);") (define-entry-point glWindowPos2sARB PFNGLWINDOWPOS2SARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2SARBPROC) (GLshort x, GLshort y);") (define-entry-point glWindowPos2svARB PFNGLWINDOWPOS2SVARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2SVARBPROC) (const GLshort *v);") (define-entry-point glWindowPos3dARB PFNGLWINDOWPOS3DARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3DARBPROC) (GLdouble x, GLdouble y, GLdouble z);") (define-entry-point glWindowPos3dvARB PFNGLWINDOWPOS3DVARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3DVARBPROC) (const GLdouble *v);") (define-entry-point glWindowPos3fARB PFNGLWINDOWPOS3FARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3FARBPROC) (GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glWindowPos3fvARB PFNGLWINDOWPOS3FVARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3FVARBPROC) (const GLfloat *v);") (define-entry-point glWindowPos3iARB PFNGLWINDOWPOS3IARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3IARBPROC) (GLint x, GLint y, GLint z);") (define-entry-point glWindowPos3ivARB PFNGLWINDOWPOS3IVARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3IVARBPROC) (const GLint *v);") (define-entry-point glWindowPos3sARB PFNGLWINDOWPOS3SARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3SARBPROC) (GLshort x, GLshort y, GLshort z);") (define-entry-point glWindowPos3svARB PFNGLWINDOWPOS3SVARBPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3SVARBPROC) (const GLshort *v);") (define-entry-point glVertexAttrib1dARB PFNGLVERTEXATTRIB1DARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1DARBPROC) (GLuint index, GLdouble x);") (define-entry-point glVertexAttrib1dvARB PFNGLVERTEXATTRIB1DVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVARBPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib1fARB PFNGLVERTEXATTRIB1FARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1FARBPROC) (GLuint index, GLfloat x);") (define-entry-point glVertexAttrib1fvARB PFNGLVERTEXATTRIB1FVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVARBPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib1sARB PFNGLVERTEXATTRIB1SARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1SARBPROC) (GLuint index, GLshort x);") (define-entry-point glVertexAttrib1svARB PFNGLVERTEXATTRIB1SVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVARBPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib2dARB PFNGLVERTEXATTRIB2DARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2DARBPROC) (GLuint index, GLdouble x, GLdouble y);") (define-entry-point glVertexAttrib2dvARB PFNGLVERTEXATTRIB2DVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVARBPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib2fARB PFNGLVERTEXATTRIB2FARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2FARBPROC) (GLuint index, GLfloat x, GLfloat y);") (define-entry-point glVertexAttrib2fvARB PFNGLVERTEXATTRIB2FVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVARBPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib2sARB PFNGLVERTEXATTRIB2SARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2SARBPROC) (GLuint index, GLshort x, GLshort y);") (define-entry-point glVertexAttrib2svARB PFNGLVERTEXATTRIB2SVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVARBPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib3dARB PFNGLVERTEXATTRIB3DARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);") (define-entry-point glVertexAttrib3dvARB PFNGLVERTEXATTRIB3DVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVARBPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib3fARB PFNGLVERTEXATTRIB3FARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glVertexAttrib3fvARB PFNGLVERTEXATTRIB3FVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVARBPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib3sARB PFNGLVERTEXATTRIB3SARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z);") (define-entry-point glVertexAttrib3svARB PFNGLVERTEXATTRIB3SVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVARBPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib4NbvARB PFNGLVERTEXATTRIB4NBVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVARBPROC) (GLuint index, const GLbyte *v);") (define-entry-point glVertexAttrib4NivARB PFNGLVERTEXATTRIB4NIVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVARBPROC) (GLuint index, const GLint *v);") (define-entry-point glVertexAttrib4NsvARB PFNGLVERTEXATTRIB4NSVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVARBPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib4NubARB PFNGLVERTEXATTRIB4NUBARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBARBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);") (define-entry-point glVertexAttrib4NubvARB PFNGLVERTEXATTRIB4NUBVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVARBPROC) (GLuint index, const GLubyte *v);") (define-entry-point glVertexAttrib4NuivARB PFNGLVERTEXATTRIB4NUIVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVARBPROC) (GLuint index, const GLuint *v);") (define-entry-point glVertexAttrib4NusvARB PFNGLVERTEXATTRIB4NUSVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVARBPROC) (GLuint index, const GLushort *v);") (define-entry-point glVertexAttrib4bvARB PFNGLVERTEXATTRIB4BVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVARBPROC) (GLuint index, const GLbyte *v);") (define-entry-point glVertexAttrib4dARB PFNGLVERTEXATTRIB4DARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4DARBPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glVertexAttrib4dvARB PFNGLVERTEXATTRIB4DVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVARBPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib4fARB PFNGLVERTEXATTRIB4FARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4FARBPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glVertexAttrib4fvARB PFNGLVERTEXATTRIB4FVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVARBPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib4ivARB PFNGLVERTEXATTRIB4IVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVARBPROC) (GLuint index, const GLint *v);") (define-entry-point glVertexAttrib4sARB PFNGLVERTEXATTRIB4SARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4SARBPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);") (define-entry-point glVertexAttrib4svARB PFNGLVERTEXATTRIB4SVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVARBPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib4ubvARB PFNGLVERTEXATTRIB4UBVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVARBPROC) (GLuint index, const GLubyte *v);") (define-entry-point glVertexAttrib4uivARB PFNGLVERTEXATTRIB4UIVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVARBPROC) (GLuint index, const GLuint *v);") (define-entry-point glVertexAttrib4usvARB PFNGLVERTEXATTRIB4USVARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVARBPROC) (GLuint index, const GLushort *v);") (define-entry-point glVertexAttribPointerARB PFNGLVERTEXATTRIBPOINTERARBPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERARBPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);") (define-entry-point glEnableVertexAttribArrayARB PFNGLENABLEVERTEXATTRIBARRAYARBPROC "typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);") (define-entry-point glDisableVertexAttribArrayARB PFNGLDISABLEVERTEXATTRIBARRAYARBPROC "typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYARBPROC) (GLuint index);") (define-entry-point glProgramStringARB PFNGLPROGRAMSTRINGARBPROC "typedef void (APIENTRYP PFNGLPROGRAMSTRINGARBPROC) (GLenum target, GLenum format, GLsizei len, const GLvoid *string);") (define-entry-point glBindProgramARB PFNGLBINDPROGRAMARBPROC "typedef void (APIENTRYP PFNGLBINDPROGRAMARBPROC) (GLenum target, GLuint program);") (define-entry-point glDeleteProgramsARB PFNGLDELETEPROGRAMSARBPROC "typedef void (APIENTRYP PFNGLDELETEPROGRAMSARBPROC) (GLsizei n, const GLuint *programs);") (define-entry-point glGenProgramsARB PFNGLGENPROGRAMSARBPROC "typedef void (APIENTRYP PFNGLGENPROGRAMSARBPROC) (GLsizei n, GLuint *programs);") (define-entry-point glProgramEnvParameter4dARB PFNGLPROGRAMENVPARAMETER4DARBPROC "typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glProgramEnvParameter4dvARB PFNGLPROGRAMENVPARAMETER4DVARBPROC "typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);") (define-entry-point glProgramEnvParameter4fARB PFNGLPROGRAMENVPARAMETER4FARBPROC "typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glProgramEnvParameter4fvARB PFNGLPROGRAMENVPARAMETER4FVARBPROC "typedef void (APIENTRYP PFNGLPROGRAMENVPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);") (define-entry-point glProgramLocalParameter4dARB PFNGLPROGRAMLOCALPARAMETER4DARBPROC "typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DARBPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glProgramLocalParameter4dvARB PFNGLPROGRAMLOCALPARAMETER4DVARBPROC "typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4DVARBPROC) (GLenum target, GLuint index, const GLdouble *params);") (define-entry-point glProgramLocalParameter4fARB PFNGLPROGRAMLOCALPARAMETER4FARBPROC "typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FARBPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glProgramLocalParameter4fvARB PFNGLPROGRAMLOCALPARAMETER4FVARBPROC "typedef void (APIENTRYP PFNGLPROGRAMLOCALPARAMETER4FVARBPROC) (GLenum target, GLuint index, const GLfloat *params);") (define-entry-point glGetProgramEnvParameterdvARB PFNGLGETPROGRAMENVPARAMETERDVARBPROC "typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);") (define-entry-point glGetProgramEnvParameterfvARB PFNGLGETPROGRAMENVPARAMETERFVARBPROC "typedef void (APIENTRYP PFNGLGETPROGRAMENVPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);") (define-entry-point glGetProgramLocalParameterdvARB PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC "typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERDVARBPROC) (GLenum target, GLuint index, GLdouble *params);") (define-entry-point glGetProgramLocalParameterfvARB PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC "typedef void (APIENTRYP PFNGLGETPROGRAMLOCALPARAMETERFVARBPROC) (GLenum target, GLuint index, GLfloat *params);") (define-entry-point glGetProgramivARB PFNGLGETPROGRAMIVARBPROC "typedef void (APIENTRYP PFNGLGETPROGRAMIVARBPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetProgramStringARB PFNGLGETPROGRAMSTRINGARBPROC "typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGARBPROC) (GLenum target, GLenum pname, GLvoid *string);") (define-entry-point glGetVertexAttribdvARB PFNGLGETVERTEXATTRIBDVARBPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVARBPROC) (GLuint index, GLenum pname, GLdouble *params);") (define-entry-point glGetVertexAttribfvARB PFNGLGETVERTEXATTRIBFVARBPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVARBPROC) (GLuint index, GLenum pname, GLfloat *params);") (define-entry-point glGetVertexAttribivARB PFNGLGETVERTEXATTRIBIVARBPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVARBPROC) (GLuint index, GLenum pname, GLint *params);") (define-entry-point glGetVertexAttribPointervARB PFNGLGETVERTEXATTRIBPOINTERVARBPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVARBPROC) (GLuint index, GLenum pname, GLvoid* *pointer);") (define-entry-point glIsProgramARB PFNGLISPROGRAMARBPROC "typedef GLboolean (APIENTRYP PFNGLISPROGRAMARBPROC) (GLuint program);") (define-entry-point glBindBufferARB PFNGLBINDBUFFERARBPROC "typedef void (APIENTRYP PFNGLBINDBUFFERARBPROC) (GLenum target, GLuint buffer);") (define-entry-point glDeleteBuffersARB PFNGLDELETEBUFFERSARBPROC "typedef void (APIENTRYP PFNGLDELETEBUFFERSARBPROC) (GLsizei n, const GLuint *buffers);") (define-entry-point glGenBuffersARB PFNGLGENBUFFERSARBPROC "typedef void (APIENTRYP PFNGLGENBUFFERSARBPROC) (GLsizei n, GLuint *buffers);") (define-entry-point glIsBufferARB PFNGLISBUFFERARBPROC "typedef GLboolean (APIENTRYP PFNGLISBUFFERARBPROC) (GLuint buffer);") (define-entry-point glBufferDataARB PFNGLBUFFERDATAARBPROC "typedef void (APIENTRYP PFNGLBUFFERDATAARBPROC) (GLenum target, GLsizeiptrARB size, const GLvoid *data, GLenum usage);") (define-entry-point glBufferSubDataARB PFNGLBUFFERSUBDATAARBPROC "typedef void (APIENTRYP PFNGLBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, const GLvoid *data);") (define-entry-point glGetBufferSubDataARB PFNGLGETBUFFERSUBDATAARBPROC "typedef void (APIENTRYP PFNGLGETBUFFERSUBDATAARBPROC) (GLenum target, GLintptrARB offset, GLsizeiptrARB size, GLvoid *data);") (define-entry-point glMapBufferARB PFNGLMAPBUFFERARBPROC "typedef GLvoid* (APIENTRYP PFNGLMAPBUFFERARBPROC) (GLenum target, GLenum access);") (define-entry-point glUnmapBufferARB PFNGLUNMAPBUFFERARBPROC "typedef GLboolean (APIENTRYP PFNGLUNMAPBUFFERARBPROC) (GLenum target);") (define-entry-point glGetBufferParameterivARB PFNGLGETBUFFERPARAMETERIVARBPROC "typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVARBPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetBufferPointervARB PFNGLGETBUFFERPOINTERVARBPROC "typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVARBPROC) (GLenum target, GLenum pname, GLvoid* *params);") (define-entry-point glGenQueriesARB PFNGLGENQUERIESARBPROC "typedef void (APIENTRYP PFNGLGENQUERIESARBPROC) (GLsizei n, GLuint *ids);") (define-entry-point glDeleteQueriesARB PFNGLDELETEQUERIESARBPROC "typedef void (APIENTRYP PFNGLDELETEQUERIESARBPROC) (GLsizei n, const GLuint *ids);") (define-entry-point glIsQueryARB PFNGLISQUERYARBPROC "typedef GLboolean (APIENTRYP PFNGLISQUERYARBPROC) (GLuint id);") (define-entry-point glBeginQueryARB PFNGLBEGINQUERYARBPROC "typedef void (APIENTRYP PFNGLBEGINQUERYARBPROC) (GLenum target, GLuint id);") (define-entry-point glEndQueryARB PFNGLENDQUERYARBPROC "typedef void (APIENTRYP PFNGLENDQUERYARBPROC) (GLenum target);") (define-entry-point glGetQueryivARB PFNGLGETQUERYIVARBPROC "typedef void (APIENTRYP PFNGLGETQUERYIVARBPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetQueryObjectivARB PFNGLGETQUERYOBJECTIVARBPROC "typedef void (APIENTRYP PFNGLGETQUERYOBJECTIVARBPROC) (GLuint id, GLenum pname, GLint *params);") (define-entry-point glGetQueryObjectuivARB PFNGLGETQUERYOBJECTUIVARBPROC "typedef void (APIENTRYP PFNGLGETQUERYOBJECTUIVARBPROC) (GLuint id, GLenum pname, GLuint *params);") (define-entry-point glDeleteObjectARB PFNGLDELETEOBJECTARBPROC "typedef void (APIENTRYP PFNGLDELETEOBJECTARBPROC) (GLhandleARB obj);") (define-entry-point glGetHandleARB PFNGLGETHANDLEARBPROC "typedef GLhandleARB (APIENTRYP PFNGLGETHANDLEARBPROC) (GLenum pname);") (define-entry-point glDetachObjectARB PFNGLDETACHOBJECTARBPROC "typedef void (APIENTRYP PFNGLDETACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB attachedObj);") (define-entry-point glCreateShaderObjectARB PFNGLCREATESHADEROBJECTARBPROC "typedef GLhandleARB (APIENTRYP PFNGLCREATESHADEROBJECTARBPROC) (GLenum shaderType);") (define-entry-point glShaderSourceARB PFNGLSHADERSOURCEARBPROC "typedef void (APIENTRYP PFNGLSHADERSOURCEARBPROC) (GLhandleARB shaderObj, GLsizei count, const GLcharARB* *string, const GLint *length);") (define-entry-point glCompileShaderARB PFNGLCOMPILESHADERARBPROC "typedef void (APIENTRYP PFNGLCOMPILESHADERARBPROC) (GLhandleARB shaderObj);") (define-entry-point glCreateProgramObjectARB PFNGLCREATEPROGRAMOBJECTARBPROC "typedef GLhandleARB (APIENTRYP PFNGLCREATEPROGRAMOBJECTARBPROC) (void);") (define-entry-point glAttachObjectARB PFNGLATTACHOBJECTARBPROC "typedef void (APIENTRYP PFNGLATTACHOBJECTARBPROC) (GLhandleARB containerObj, GLhandleARB obj);") (define-entry-point glLinkProgramARB PFNGLLINKPROGRAMARBPROC "typedef void (APIENTRYP PFNGLLINKPROGRAMARBPROC) (GLhandleARB programObj);") (define-entry-point glUseProgramObjectARB PFNGLUSEPROGRAMOBJECTARBPROC "typedef void (APIENTRYP PFNGLUSEPROGRAMOBJECTARBPROC) (GLhandleARB programObj);") (define-entry-point glValidateProgramARB PFNGLVALIDATEPROGRAMARBPROC "typedef void (APIENTRYP PFNGLVALIDATEPROGRAMARBPROC) (GLhandleARB programObj);") (define-entry-point glUniform1fARB PFNGLUNIFORM1FARBPROC "typedef void (APIENTRYP PFNGLUNIFORM1FARBPROC) (GLint location, GLfloat v0);") (define-entry-point glUniform2fARB PFNGLUNIFORM2FARBPROC "typedef void (APIENTRYP PFNGLUNIFORM2FARBPROC) (GLint location, GLfloat v0, GLfloat v1);") (define-entry-point glUniform3fARB PFNGLUNIFORM3FARBPROC "typedef void (APIENTRYP PFNGLUNIFORM3FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2);") (define-entry-point glUniform4fARB PFNGLUNIFORM4FARBPROC "typedef void (APIENTRYP PFNGLUNIFORM4FARBPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);") (define-entry-point glUniform1iARB PFNGLUNIFORM1IARBPROC "typedef void (APIENTRYP PFNGLUNIFORM1IARBPROC) (GLint location, GLint v0);") (define-entry-point glUniform2iARB PFNGLUNIFORM2IARBPROC "typedef void (APIENTRYP PFNGLUNIFORM2IARBPROC) (GLint location, GLint v0, GLint v1);") (define-entry-point glUniform3iARB PFNGLUNIFORM3IARBPROC "typedef void (APIENTRYP PFNGLUNIFORM3IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2);") (define-entry-point glUniform4iARB PFNGLUNIFORM4IARBPROC "typedef void (APIENTRYP PFNGLUNIFORM4IARBPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3);") (define-entry-point glUniform1fvARB PFNGLUNIFORM1FVARBPROC "typedef void (APIENTRYP PFNGLUNIFORM1FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);") (define-entry-point glUniform2fvARB PFNGLUNIFORM2FVARBPROC "typedef void (APIENTRYP PFNGLUNIFORM2FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);") (define-entry-point glUniform3fvARB PFNGLUNIFORM3FVARBPROC "typedef void (APIENTRYP PFNGLUNIFORM3FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);") (define-entry-point glUniform4fvARB PFNGLUNIFORM4FVARBPROC "typedef void (APIENTRYP PFNGLUNIFORM4FVARBPROC) (GLint location, GLsizei count, const GLfloat *value);") (define-entry-point glUniform1ivARB PFNGLUNIFORM1IVARBPROC "typedef void (APIENTRYP PFNGLUNIFORM1IVARBPROC) (GLint location, GLsizei count, const GLint *value);") (define-entry-point glUniform2ivARB PFNGLUNIFORM2IVARBPROC "typedef void (APIENTRYP PFNGLUNIFORM2IVARBPROC) (GLint location, GLsizei count, const GLint *value);") (define-entry-point glUniform3ivARB PFNGLUNIFORM3IVARBPROC "typedef void (APIENTRYP PFNGLUNIFORM3IVARBPROC) (GLint location, GLsizei count, const GLint *value);") (define-entry-point glUniform4ivARB PFNGLUNIFORM4IVARBPROC "typedef void (APIENTRYP PFNGLUNIFORM4IVARBPROC) (GLint location, GLsizei count, const GLint *value);") (define-entry-point glUniformMatrix2fvARB PFNGLUNIFORMMATRIX2FVARBPROC "typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);") (define-entry-point glUniformMatrix3fvARB PFNGLUNIFORMMATRIX3FVARBPROC "typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);") (define-entry-point glUniformMatrix4fvARB PFNGLUNIFORMMATRIX4FVARBPROC "typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVARBPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value);") (define-entry-point glGetObjectParameterfvARB PFNGLGETOBJECTPARAMETERFVARBPROC "typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERFVARBPROC) (GLhandleARB obj, GLenum pname, GLfloat *params);") (define-entry-point glGetObjectParameterivARB PFNGLGETOBJECTPARAMETERIVARBPROC "typedef void (APIENTRYP PFNGLGETOBJECTPARAMETERIVARBPROC) (GLhandleARB obj, GLenum pname, GLint *params);") (define-entry-point glGetInfoLogARB PFNGLGETINFOLOGARBPROC "typedef void (APIENTRYP PFNGLGETINFOLOGARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *infoLog);") (define-entry-point glGetAttachedObjectsARB PFNGLGETATTACHEDOBJECTSARBPROC "typedef void (APIENTRYP PFNGLGETATTACHEDOBJECTSARBPROC) (GLhandleARB containerObj, GLsizei maxCount, GLsizei *count, GLhandleARB *obj);") (define-entry-point glGetUniformLocationARB PFNGLGETUNIFORMLOCATIONARBPROC "typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);") (define-entry-point glGetActiveUniformARB PFNGLGETACTIVEUNIFORMARBPROC "typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);") (define-entry-point glGetUniformfvARB PFNGLGETUNIFORMFVARBPROC "typedef void (APIENTRYP PFNGLGETUNIFORMFVARBPROC) (GLhandleARB programObj, GLint location, GLfloat *params);") (define-entry-point glGetUniformivARB PFNGLGETUNIFORMIVARBPROC "typedef void (APIENTRYP PFNGLGETUNIFORMIVARBPROC) (GLhandleARB programObj, GLint location, GLint *params);") (define-entry-point glGetShaderSourceARB PFNGLGETSHADERSOURCEARBPROC "typedef void (APIENTRYP PFNGLGETSHADERSOURCEARBPROC) (GLhandleARB obj, GLsizei maxLength, GLsizei *length, GLcharARB *source);") (define-entry-point glBindAttribLocationARB PFNGLBINDATTRIBLOCATIONARBPROC "typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONARBPROC) (GLhandleARB programObj, GLuint index, const GLcharARB *name);") (define-entry-point glGetActiveAttribARB PFNGLGETACTIVEATTRIBARBPROC "typedef void (APIENTRYP PFNGLGETACTIVEATTRIBARBPROC) (GLhandleARB programObj, GLuint index, GLsizei maxLength, GLsizei *length, GLint *size, GLenum *type, GLcharARB *name);") (define-entry-point glGetAttribLocationARB PFNGLGETATTRIBLOCATIONARBPROC "typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, const GLcharARB *name);") (define-entry-point glDrawBuffersARB PFNGLDRAWBUFFERSARBPROC "typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs);") (define-entry-point glClampColorARB PFNGLCLAMPCOLORARBPROC "typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp);") (define-entry-point glBlendColorEXT PFNGLBLENDCOLOREXTPROC "typedef void (APIENTRYP PFNGLBLENDCOLOREXTPROC) (GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha);") (define-entry-point glPolygonOffsetEXT PFNGLPOLYGONOFFSETEXTPROC "typedef void (APIENTRYP PFNGLPOLYGONOFFSETEXTPROC) (GLfloat factor, GLfloat bias);") (define-entry-point glTexImage3DEXT PFNGLTEXIMAGE3DEXTPROC "typedef void (APIENTRYP PFNGLTEXIMAGE3DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *pixels);") (define-entry-point glTexSubImage3DEXT PFNGLTEXSUBIMAGE3DEXTPROC "typedef void (APIENTRYP PFNGLTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth, GLenum format, GLenum type, const GLvoid *pixels);") (define-entry-point glGetTexFilterFuncSGIS PFNGLGETTEXFILTERFUNCSGISPROC "typedef void (APIENTRYP PFNGLGETTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLfloat *weights);") (define-entry-point glTexFilterFuncSGIS PFNGLTEXFILTERFUNCSGISPROC "typedef void (APIENTRYP PFNGLTEXFILTERFUNCSGISPROC) (GLenum target, GLenum filter, GLsizei n, const GLfloat *weights);") (define-entry-point glTexSubImage1DEXT PFNGLTEXSUBIMAGE1DEXTPROC "typedef void (APIENTRYP PFNGLTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLsizei width, GLenum format, GLenum type, const GLvoid *pixels);") (define-entry-point glTexSubImage2DEXT PFNGLTEXSUBIMAGE2DEXTPROC "typedef void (APIENTRYP PFNGLTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels);") (define-entry-point glCopyTexImage1DEXT PFNGLCOPYTEXIMAGE1DEXTPROC "typedef void (APIENTRYP PFNGLCOPYTEXIMAGE1DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLint border);") (define-entry-point glCopyTexImage2DEXT PFNGLCOPYTEXIMAGE2DEXTPROC "typedef void (APIENTRYP PFNGLCOPYTEXIMAGE2DEXTPROC) (GLenum target, GLint level, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height, GLint border);") (define-entry-point glCopyTexSubImage1DEXT PFNGLCOPYTEXSUBIMAGE1DEXTPROC "typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE1DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint x, GLint y, GLsizei width);") (define-entry-point glCopyTexSubImage2DEXT PFNGLCOPYTEXSUBIMAGE2DEXTPROC "typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE2DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width, GLsizei height);") (define-entry-point glCopyTexSubImage3DEXT PFNGLCOPYTEXSUBIMAGE3DEXTPROC "typedef void (APIENTRYP PFNGLCOPYTEXSUBIMAGE3DEXTPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height);") (define-entry-point glGetHistogramEXT PFNGLGETHISTOGRAMEXTPROC "typedef void (APIENTRYP PFNGLGETHISTOGRAMEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);") (define-entry-point glGetHistogramParameterfvEXT PFNGLGETHISTOGRAMPARAMETERFVEXTPROC "typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetHistogramParameterivEXT PFNGLGETHISTOGRAMPARAMETERIVEXTPROC "typedef void (APIENTRYP PFNGLGETHISTOGRAMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetMinmaxEXT PFNGLGETMINMAXEXTPROC "typedef void (APIENTRYP PFNGLGETMINMAXEXTPROC) (GLenum target, GLboolean reset, GLenum format, GLenum type, GLvoid *values);") (define-entry-point glGetMinmaxParameterfvEXT PFNGLGETMINMAXPARAMETERFVEXTPROC "typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetMinmaxParameterivEXT PFNGLGETMINMAXPARAMETERIVEXTPROC "typedef void (APIENTRYP PFNGLGETMINMAXPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glHistogramEXT PFNGLHISTOGRAMEXTPROC "typedef void (APIENTRYP PFNGLHISTOGRAMEXTPROC) (GLenum target, GLsizei width, GLenum internalformat, GLboolean sink);") (define-entry-point glMinmaxEXT PFNGLMINMAXEXTPROC "typedef void (APIENTRYP PFNGLMINMAXEXTPROC) (GLenum target, GLenum internalformat, GLboolean sink);") (define-entry-point glResetHistogramEXT PFNGLRESETHISTOGRAMEXTPROC "typedef void (APIENTRYP PFNGLRESETHISTOGRAMEXTPROC) (GLenum target);") (define-entry-point glResetMinmaxEXT PFNGLRESETMINMAXEXTPROC "typedef void (APIENTRYP PFNGLRESETMINMAXEXTPROC) (GLenum target);") (define-entry-point glConvolutionFilter1DEXT PFNGLCONVOLUTIONFILTER1DEXTPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *image);") (define-entry-point glConvolutionFilter2DEXT PFNGLCONVOLUTIONFILTER2DEXTPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *image);") (define-entry-point glConvolutionParameterfEXT PFNGLCONVOLUTIONPARAMETERFEXTPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat params);") (define-entry-point glConvolutionParameterfvEXT PFNGLCONVOLUTIONPARAMETERFVEXTPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);") (define-entry-point glConvolutionParameteriEXT PFNGLCONVOLUTIONPARAMETERIEXTPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint params);") (define-entry-point glConvolutionParameterivEXT PFNGLCONVOLUTIONPARAMETERIVEXTPROC "typedef void (APIENTRYP PFNGLCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);") (define-entry-point glCopyConvolutionFilter1DEXT PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC "typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER1DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);") (define-entry-point glCopyConvolutionFilter2DEXT PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC "typedef void (APIENTRYP PFNGLCOPYCONVOLUTIONFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width, GLsizei height);") (define-entry-point glGetConvolutionFilterEXT PFNGLGETCONVOLUTIONFILTEREXTPROC "typedef void (APIENTRYP PFNGLGETCONVOLUTIONFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *image);") (define-entry-point glGetConvolutionParameterfvEXT PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC "typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetConvolutionParameterivEXT PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC "typedef void (APIENTRYP PFNGLGETCONVOLUTIONPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetSeparableFilterEXT PFNGLGETSEPARABLEFILTEREXTPROC "typedef void (APIENTRYP PFNGLGETSEPARABLEFILTEREXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *row, GLvoid *column, GLvoid *span);") (define-entry-point glSeparableFilter2DEXT PFNGLSEPARABLEFILTER2DEXTPROC "typedef void (APIENTRYP PFNGLSEPARABLEFILTER2DEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column);") (define-entry-point glColorTableSGI PFNGLCOLORTABLESGIPROC "typedef void (APIENTRYP PFNGLCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);") (define-entry-point glColorTableParameterfvSGI PFNGLCOLORTABLEPARAMETERFVSGIPROC "typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, const GLfloat *params);") (define-entry-point glColorTableParameterivSGI PFNGLCOLORTABLEPARAMETERIVSGIPROC "typedef void (APIENTRYP PFNGLCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, const GLint *params);") (define-entry-point glCopyColorTableSGI PFNGLCOPYCOLORTABLESGIPROC "typedef void (APIENTRYP PFNGLCOPYCOLORTABLESGIPROC) (GLenum target, GLenum internalformat, GLint x, GLint y, GLsizei width);") (define-entry-point glGetColorTableSGI PFNGLGETCOLORTABLESGIPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLESGIPROC) (GLenum target, GLenum format, GLenum type, GLvoid *table);") (define-entry-point glGetColorTableParameterfvSGI PFNGLGETCOLORTABLEPARAMETERFVSGIPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVSGIPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetColorTableParameterivSGI PFNGLGETCOLORTABLEPARAMETERIVSGIPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVSGIPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glPixelTexGenSGIX PFNGLPIXELTEXGENSGIXPROC "typedef void (APIENTRYP PFNGLPIXELTEXGENSGIXPROC) (GLenum mode);") (define-entry-point glPixelTexGenParameteriSGIS PFNGLPIXELTEXGENPARAMETERISGISPROC "typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERISGISPROC) (GLenum pname, GLint param);") (define-entry-point glPixelTexGenParameterivSGIS PFNGLPIXELTEXGENPARAMETERIVSGISPROC "typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, const GLint *params);") (define-entry-point glPixelTexGenParameterfSGIS PFNGLPIXELTEXGENPARAMETERFSGISPROC "typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFSGISPROC) (GLenum pname, GLfloat param);") (define-entry-point glPixelTexGenParameterfvSGIS PFNGLPIXELTEXGENPARAMETERFVSGISPROC "typedef void (APIENTRYP PFNGLPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);") (define-entry-point glGetPixelTexGenParameterivSGIS PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC "typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERIVSGISPROC) (GLenum pname, GLint *params);") (define-entry-point glGetPixelTexGenParameterfvSGIS PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC "typedef void (APIENTRYP PFNGLGETPIXELTEXGENPARAMETERFVSGISPROC) (GLenum pname, GLfloat *params);") (define-entry-point glTexImage4DSGIS PFNGLTEXIMAGE4DSGISPROC "typedef void (APIENTRYP PFNGLTEXIMAGE4DSGISPROC) (GLenum target, GLint level, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLint border, GLenum format, GLenum type, const GLvoid *pixels);") (define-entry-point glTexSubImage4DSGIS PFNGLTEXSUBIMAGE4DSGISPROC "typedef void (APIENTRYP PFNGLTEXSUBIMAGE4DSGISPROC) (GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint woffset, GLsizei width, GLsizei height, GLsizei depth, GLsizei size4d, GLenum format, GLenum type, const GLvoid *pixels);") (define-entry-point glAreTexturesResidentEXT PFNGLARETEXTURESRESIDENTEXTPROC "typedef GLboolean (APIENTRYP PFNGLARETEXTURESRESIDENTEXTPROC) (GLsizei n, const GLuint *textures, GLboolean *residences);") (define-entry-point glBindTextureEXT PFNGLBINDTEXTUREEXTPROC "typedef void (APIENTRYP PFNGLBINDTEXTUREEXTPROC) (GLenum target, GLuint texture);") (define-entry-point glDeleteTexturesEXT PFNGLDELETETEXTURESEXTPROC "typedef void (APIENTRYP PFNGLDELETETEXTURESEXTPROC) (GLsizei n, const GLuint *textures);") (define-entry-point glGenTexturesEXT PFNGLGENTEXTURESEXTPROC "typedef void (APIENTRYP PFNGLGENTEXTURESEXTPROC) (GLsizei n, GLuint *textures);") (define-entry-point glIsTextureEXT PFNGLISTEXTUREEXTPROC "typedef GLboolean (APIENTRYP PFNGLISTEXTUREEXTPROC) (GLuint texture);") (define-entry-point glPrioritizeTexturesEXT PFNGLPRIORITIZETEXTURESEXTPROC "typedef void (APIENTRYP PFNGLPRIORITIZETEXTURESEXTPROC) (GLsizei n, const GLuint *textures, const GLclampf *priorities);") (define-entry-point glDetailTexFuncSGIS PFNGLDETAILTEXFUNCSGISPROC "typedef void (APIENTRYP PFNGLDETAILTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);") (define-entry-point glGetDetailTexFuncSGIS PFNGLGETDETAILTEXFUNCSGISPROC "typedef void (APIENTRYP PFNGLGETDETAILTEXFUNCSGISPROC) (GLenum target, GLfloat *points);") (define-entry-point glSharpenTexFuncSGIS PFNGLSHARPENTEXFUNCSGISPROC "typedef void (APIENTRYP PFNGLSHARPENTEXFUNCSGISPROC) (GLenum target, GLsizei n, const GLfloat *points);") (define-entry-point glGetSharpenTexFuncSGIS PFNGLGETSHARPENTEXFUNCSGISPROC "typedef void (APIENTRYP PFNGLGETSHARPENTEXFUNCSGISPROC) (GLenum target, GLfloat *points);") (define-entry-point glSampleMaskSGIS PFNGLSAMPLEMASKSGISPROC "typedef void (APIENTRYP PFNGLSAMPLEMASKSGISPROC) (GLclampf value, GLboolean invert);") (define-entry-point glSamplePatternSGIS PFNGLSAMPLEPATTERNSGISPROC "typedef void (APIENTRYP PFNGLSAMPLEPATTERNSGISPROC) (GLenum pattern);") (define-entry-point glArrayElementEXT PFNGLARRAYELEMENTEXTPROC "typedef void (APIENTRYP PFNGLARRAYELEMENTEXTPROC) (GLint i);") (define-entry-point glColorPointerEXT PFNGLCOLORPOINTEREXTPROC "typedef void (APIENTRYP PFNGLCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);") (define-entry-point glDrawArraysEXT PFNGLDRAWARRAYSEXTPROC "typedef void (APIENTRYP PFNGLDRAWARRAYSEXTPROC) (GLenum mode, GLint first, GLsizei count);") (define-entry-point glEdgeFlagPointerEXT PFNGLEDGEFLAGPOINTEREXTPROC "typedef void (APIENTRYP PFNGLEDGEFLAGPOINTEREXTPROC) (GLsizei stride, GLsizei count, const GLboolean *pointer);") (define-entry-point glGetPointervEXT PFNGLGETPOINTERVEXTPROC "typedef void (APIENTRYP PFNGLGETPOINTERVEXTPROC) (GLenum pname, GLvoid* *params);") (define-entry-point glIndexPointerEXT PFNGLINDEXPOINTEREXTPROC "typedef void (APIENTRYP PFNGLINDEXPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);") (define-entry-point glNormalPointerEXT PFNGLNORMALPOINTEREXTPROC "typedef void (APIENTRYP PFNGLNORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);") (define-entry-point glTexCoordPointerEXT PFNGLTEXCOORDPOINTEREXTPROC "typedef void (APIENTRYP PFNGLTEXCOORDPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);") (define-entry-point glVertexPointerEXT PFNGLVERTEXPOINTEREXTPROC "typedef void (APIENTRYP PFNGLVERTEXPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer);") (define-entry-point glBlendEquationEXT PFNGLBLENDEQUATIONEXTPROC "typedef void (APIENTRYP PFNGLBLENDEQUATIONEXTPROC) (GLenum mode);") (define-entry-point glSpriteParameterfSGIX PFNGLSPRITEPARAMETERFSGIXPROC "typedef void (APIENTRYP PFNGLSPRITEPARAMETERFSGIXPROC) (GLenum pname, GLfloat param);") (define-entry-point glSpriteParameterfvSGIX PFNGLSPRITEPARAMETERFVSGIXPROC "typedef void (APIENTRYP PFNGLSPRITEPARAMETERFVSGIXPROC) (GLenum pname, const GLfloat *params);") (define-entry-point glSpriteParameteriSGIX PFNGLSPRITEPARAMETERISGIXPROC "typedef void (APIENTRYP PFNGLSPRITEPARAMETERISGIXPROC) (GLenum pname, GLint param);") (define-entry-point glSpriteParameterivSGIX PFNGLSPRITEPARAMETERIVSGIXPROC "typedef void (APIENTRYP PFNGLSPRITEPARAMETERIVSGIXPROC) (GLenum pname, const GLint *params);") (define-entry-point glPointParameterfEXT PFNGLPOINTPARAMETERFEXTPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERFEXTPROC) (GLenum pname, GLfloat param);") (define-entry-point glPointParameterfvEXT PFNGLPOINTPARAMETERFVEXTPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERFVEXTPROC) (GLenum pname, const GLfloat *params);") (define-entry-point glPointParameterfSGIS PFNGLPOINTPARAMETERFSGISPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERFSGISPROC) (GLenum pname, GLfloat param);") (define-entry-point glPointParameterfvSGIS PFNGLPOINTPARAMETERFVSGISPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERFVSGISPROC) (GLenum pname, const GLfloat *params);") (define-entry-point glGetInstrumentsSGIX PFNGLGETINSTRUMENTSSGIXPROC "typedef GLint (APIENTRYP PFNGLGETINSTRUMENTSSGIXPROC) (void);") (define-entry-point glInstrumentsBufferSGIX PFNGLINSTRUMENTSBUFFERSGIXPROC "typedef void (APIENTRYP PFNGLINSTRUMENTSBUFFERSGIXPROC) (GLsizei size, GLint *buffer);") (define-entry-point glPollInstrumentsSGIX PFNGLPOLLINSTRUMENTSSGIXPROC "typedef GLint (APIENTRYP PFNGLPOLLINSTRUMENTSSGIXPROC) (GLint *marker_p);") (define-entry-point glReadInstrumentsSGIX PFNGLREADINSTRUMENTSSGIXPROC "typedef void (APIENTRYP PFNGLREADINSTRUMENTSSGIXPROC) (GLint marker);") (define-entry-point glStartInstrumentsSGIX PFNGLSTARTINSTRUMENTSSGIXPROC "typedef void (APIENTRYP PFNGLSTARTINSTRUMENTSSGIXPROC) (void);") (define-entry-point glStopInstrumentsSGIX PFNGLSTOPINSTRUMENTSSGIXPROC "typedef void (APIENTRYP PFNGLSTOPINSTRUMENTSSGIXPROC) (GLint marker);") (define-entry-point glFrameZoomSGIX PFNGLFRAMEZOOMSGIXPROC "typedef void (APIENTRYP PFNGLFRAMEZOOMSGIXPROC) (GLint factor);") (define-entry-point glTagSampleBufferSGIX PFNGLTAGSAMPLEBUFFERSGIXPROC "typedef void (APIENTRYP PFNGLTAGSAMPLEBUFFERSGIXPROC) (void);") (define-entry-point glDeformationMap3dSGIX PFNGLDEFORMATIONMAP3DSGIXPROC "typedef void (APIENTRYP PFNGLDEFORMATIONMAP3DSGIXPROC) (GLenum target, GLdouble u1, GLdouble u2, GLint ustride, GLint uorder, GLdouble v1, GLdouble v2, GLint vstride, GLint vorder, GLdouble w1, GLdouble w2, GLint wstride, GLint worder, const GLdouble *points);") (define-entry-point glDeformationMap3fSGIX PFNGLDEFORMATIONMAP3FSGIXPROC "typedef void (APIENTRYP PFNGLDEFORMATIONMAP3FSGIXPROC) (GLenum target, GLfloat u1, GLfloat u2, GLint ustride, GLint uorder, GLfloat v1, GLfloat v2, GLint vstride, GLint vorder, GLfloat w1, GLfloat w2, GLint wstride, GLint worder, const GLfloat *points);") (define-entry-point glDeformSGIX PFNGLDEFORMSGIXPROC "typedef void (APIENTRYP PFNGLDEFORMSGIXPROC) (GLbitfield mask);") (define-entry-point glLoadIdentityDeformationMapSGIX PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC "typedef void (APIENTRYP PFNGLLOADIDENTITYDEFORMATIONMAPSGIXPROC) (GLbitfield mask);") (define-entry-point glReferencePlaneSGIX PFNGLREFERENCEPLANESGIXPROC "typedef void (APIENTRYP PFNGLREFERENCEPLANESGIXPROC) (const GLdouble *equation);") (define-entry-point glFlushRasterSGIX PFNGLFLUSHRASTERSGIXPROC "typedef void (APIENTRYP PFNGLFLUSHRASTERSGIXPROC) (void);") (define-entry-point glFogFuncSGIS PFNGLFOGFUNCSGISPROC "typedef void (APIENTRYP PFNGLFOGFUNCSGISPROC) (GLsizei n, const GLfloat *points);") (define-entry-point glGetFogFuncSGIS PFNGLGETFOGFUNCSGISPROC "typedef void (APIENTRYP PFNGLGETFOGFUNCSGISPROC) (GLfloat *points);") (define-entry-point glImageTransformParameteriHP PFNGLIMAGETRANSFORMPARAMETERIHPPROC "typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIHPPROC) (GLenum target, GLenum pname, GLint param);") (define-entry-point glImageTransformParameterfHP PFNGLIMAGETRANSFORMPARAMETERFHPPROC "typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFHPPROC) (GLenum target, GLenum pname, GLfloat param);") (define-entry-point glImageTransformParameterivHP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC "typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, const GLint *params);") (define-entry-point glImageTransformParameterfvHP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC "typedef void (APIENTRYP PFNGLIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, const GLfloat *params);") (define-entry-point glGetImageTransformParameterivHP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC "typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERIVHPPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetImageTransformParameterfvHP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC "typedef void (APIENTRYP PFNGLGETIMAGETRANSFORMPARAMETERFVHPPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glColorSubTableEXT PFNGLCOLORSUBTABLEEXTPROC "typedef void (APIENTRYP PFNGLCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLsizei count, GLenum format, GLenum type, const GLvoid *data);") (define-entry-point glCopyColorSubTableEXT PFNGLCOPYCOLORSUBTABLEEXTPROC "typedef void (APIENTRYP PFNGLCOPYCOLORSUBTABLEEXTPROC) (GLenum target, GLsizei start, GLint x, GLint y, GLsizei width);") (define-entry-point glHintPGI PFNGLHINTPGIPROC "typedef void (APIENTRYP PFNGLHINTPGIPROC) (GLenum target, GLint mode);") (define-entry-point glColorTableEXT PFNGLCOLORTABLEEXTPROC "typedef void (APIENTRYP PFNGLCOLORTABLEEXTPROC) (GLenum target, GLenum internalFormat, GLsizei width, GLenum format, GLenum type, const GLvoid *table);") (define-entry-point glGetColorTableEXT PFNGLGETCOLORTABLEEXTPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLEEXTPROC) (GLenum target, GLenum format, GLenum type, GLvoid *data);") (define-entry-point glGetColorTableParameterivEXT PFNGLGETCOLORTABLEPARAMETERIVEXTPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetColorTableParameterfvEXT PFNGLGETCOLORTABLEPARAMETERFVEXTPROC "typedef void (APIENTRYP PFNGLGETCOLORTABLEPARAMETERFVEXTPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetListParameterfvSGIX PFNGLGETLISTPARAMETERFVSGIXPROC "typedef void (APIENTRYP PFNGLGETLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, GLfloat *params);") (define-entry-point glGetListParameterivSGIX PFNGLGETLISTPARAMETERIVSGIXPROC "typedef void (APIENTRYP PFNGLGETLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, GLint *params);") (define-entry-point glListParameterfSGIX PFNGLLISTPARAMETERFSGIXPROC "typedef void (APIENTRYP PFNGLLISTPARAMETERFSGIXPROC) (GLuint list, GLenum pname, GLfloat param);") (define-entry-point glListParameterfvSGIX PFNGLLISTPARAMETERFVSGIXPROC "typedef void (APIENTRYP PFNGLLISTPARAMETERFVSGIXPROC) (GLuint list, GLenum pname, const GLfloat *params);") (define-entry-point glListParameteriSGIX PFNGLLISTPARAMETERISGIXPROC "typedef void (APIENTRYP PFNGLLISTPARAMETERISGIXPROC) (GLuint list, GLenum pname, GLint param);") (define-entry-point glListParameterivSGIX PFNGLLISTPARAMETERIVSGIXPROC "typedef void (APIENTRYP PFNGLLISTPARAMETERIVSGIXPROC) (GLuint list, GLenum pname, const GLint *params);") (define-entry-point glIndexMaterialEXT PFNGLINDEXMATERIALEXTPROC "typedef void (APIENTRYP PFNGLINDEXMATERIALEXTPROC) (GLenum face, GLenum mode);") (define-entry-point glIndexFuncEXT PFNGLINDEXFUNCEXTPROC "typedef void (APIENTRYP PFNGLINDEXFUNCEXTPROC) (GLenum func, GLclampf ref);") (define-entry-point glLockArraysEXT PFNGLLOCKARRAYSEXTPROC "typedef void (APIENTRYP PFNGLLOCKARRAYSEXTPROC) (GLint first, GLsizei count);") (define-entry-point glUnlockArraysEXT PFNGLUNLOCKARRAYSEXTPROC "typedef void (APIENTRYP PFNGLUNLOCKARRAYSEXTPROC) (void);") (define-entry-point glCullParameterdvEXT PFNGLCULLPARAMETERDVEXTPROC "typedef void (APIENTRYP PFNGLCULLPARAMETERDVEXTPROC) (GLenum pname, GLdouble *params);") (define-entry-point glCullParameterfvEXT PFNGLCULLPARAMETERFVEXTPROC "typedef void (APIENTRYP PFNGLCULLPARAMETERFVEXTPROC) (GLenum pname, GLfloat *params);") (define-entry-point glFragmentColorMaterialSGIX PFNGLFRAGMENTCOLORMATERIALSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTCOLORMATERIALSGIXPROC) (GLenum face, GLenum mode);") (define-entry-point glFragmentLightfSGIX PFNGLFRAGMENTLIGHTFSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFSGIXPROC) (GLenum light, GLenum pname, GLfloat param);") (define-entry-point glFragmentLightfvSGIX PFNGLFRAGMENTLIGHTFVSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, const GLfloat *params);") (define-entry-point glFragmentLightiSGIX PFNGLFRAGMENTLIGHTISGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTLIGHTISGIXPROC) (GLenum light, GLenum pname, GLint param);") (define-entry-point glFragmentLightivSGIX PFNGLFRAGMENTLIGHTIVSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, const GLint *params);") (define-entry-point glFragmentLightModelfSGIX PFNGLFRAGMENTLIGHTMODELFSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFSGIXPROC) (GLenum pname, GLfloat param);") (define-entry-point glFragmentLightModelfvSGIX PFNGLFRAGMENTLIGHTMODELFVSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELFVSGIXPROC) (GLenum pname, const GLfloat *params);") (define-entry-point glFragmentLightModeliSGIX PFNGLFRAGMENTLIGHTMODELISGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELISGIXPROC) (GLenum pname, GLint param);") (define-entry-point glFragmentLightModelivSGIX PFNGLFRAGMENTLIGHTMODELIVSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTLIGHTMODELIVSGIXPROC) (GLenum pname, const GLint *params);") (define-entry-point glFragmentMaterialfSGIX PFNGLFRAGMENTMATERIALFSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFSGIXPROC) (GLenum face, GLenum pname, GLfloat param);") (define-entry-point glFragmentMaterialfvSGIX PFNGLFRAGMENTMATERIALFVSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, const GLfloat *params);") (define-entry-point glFragmentMaterialiSGIX PFNGLFRAGMENTMATERIALISGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTMATERIALISGIXPROC) (GLenum face, GLenum pname, GLint param);") (define-entry-point glFragmentMaterialivSGIX PFNGLFRAGMENTMATERIALIVSGIXPROC "typedef void (APIENTRYP PFNGLFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, const GLint *params);") (define-entry-point glGetFragmentLightfvSGIX PFNGLGETFRAGMENTLIGHTFVSGIXPROC "typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTFVSGIXPROC) (GLenum light, GLenum pname, GLfloat *params);") (define-entry-point glGetFragmentLightivSGIX PFNGLGETFRAGMENTLIGHTIVSGIXPROC "typedef void (APIENTRYP PFNGLGETFRAGMENTLIGHTIVSGIXPROC) (GLenum light, GLenum pname, GLint *params);") (define-entry-point glGetFragmentMaterialfvSGIX PFNGLGETFRAGMENTMATERIALFVSGIXPROC "typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALFVSGIXPROC) (GLenum face, GLenum pname, GLfloat *params);") (define-entry-point glGetFragmentMaterialivSGIX PFNGLGETFRAGMENTMATERIALIVSGIXPROC "typedef void (APIENTRYP PFNGLGETFRAGMENTMATERIALIVSGIXPROC) (GLenum face, GLenum pname, GLint *params);") (define-entry-point glLightEnviSGIX PFNGLLIGHTENVISGIXPROC "typedef void (APIENTRYP PFNGLLIGHTENVISGIXPROC) (GLenum pname, GLint param);") (define-entry-point glDrawRangeElementsEXT PFNGLDRAWRANGEELEMENTSEXTPROC "typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTSEXTPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices);") (define-entry-point glApplyTextureEXT PFNGLAPPLYTEXTUREEXTPROC "typedef void (APIENTRYP PFNGLAPPLYTEXTUREEXTPROC) (GLenum mode);") (define-entry-point glTextureLightEXT PFNGLTEXTURELIGHTEXTPROC "typedef void (APIENTRYP PFNGLTEXTURELIGHTEXTPROC) (GLenum pname);") (define-entry-point glTextureMaterialEXT PFNGLTEXTUREMATERIALEXTPROC "typedef void (APIENTRYP PFNGLTEXTUREMATERIALEXTPROC) (GLenum face, GLenum mode);") (define-entry-point glAsyncMarkerSGIX PFNGLASYNCMARKERSGIXPROC "typedef void (APIENTRYP PFNGLASYNCMARKERSGIXPROC) (GLuint marker);") (define-entry-point glFinishAsyncSGIX PFNGLFINISHASYNCSGIXPROC "typedef GLint (APIENTRYP PFNGLFINISHASYNCSGIXPROC) (GLuint *markerp);") (define-entry-point glPollAsyncSGIX PFNGLPOLLASYNCSGIXPROC "typedef GLint (APIENTRYP PFNGLPOLLASYNCSGIXPROC) (GLuint *markerp);") (define-entry-point glGenAsyncMarkersSGIX PFNGLGENASYNCMARKERSSGIXPROC "typedef GLuint (APIENTRYP PFNGLGENASYNCMARKERSSGIXPROC) (GLsizei range);") (define-entry-point glDeleteAsyncMarkersSGIX PFNGLDELETEASYNCMARKERSSGIXPROC "typedef void (APIENTRYP PFNGLDELETEASYNCMARKERSSGIXPROC) (GLuint marker, GLsizei range);") (define-entry-point glIsAsyncMarkerSGIX PFNGLISASYNCMARKERSGIXPROC "typedef GLboolean (APIENTRYP PFNGLISASYNCMARKERSGIXPROC) (GLuint marker);") (define-entry-point glVertexPointervINTEL PFNGLVERTEXPOINTERVINTELPROC "typedef void (APIENTRYP PFNGLVERTEXPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);") (define-entry-point glNormalPointervINTEL PFNGLNORMALPOINTERVINTELPROC "typedef void (APIENTRYP PFNGLNORMALPOINTERVINTELPROC) (GLenum type, const GLvoid* *pointer);") (define-entry-point glColorPointervINTEL PFNGLCOLORPOINTERVINTELPROC "typedef void (APIENTRYP PFNGLCOLORPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);") (define-entry-point glTexCoordPointervINTEL PFNGLTEXCOORDPOINTERVINTELPROC "typedef void (APIENTRYP PFNGLTEXCOORDPOINTERVINTELPROC) (GLint size, GLenum type, const GLvoid* *pointer);") (define-entry-point glPixelTransformParameteriEXT PFNGLPIXELTRANSFORMPARAMETERIEXTPROC "typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIEXTPROC) (GLenum target, GLenum pname, GLint param);") (define-entry-point glPixelTransformParameterfEXT PFNGLPIXELTRANSFORMPARAMETERFEXTPROC "typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFEXTPROC) (GLenum target, GLenum pname, GLfloat param);") (define-entry-point glPixelTransformParameterivEXT PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC "typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERIVEXTPROC) (GLenum target, GLenum pname, const GLint *params);") (define-entry-point glPixelTransformParameterfvEXT PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC "typedef void (APIENTRYP PFNGLPIXELTRANSFORMPARAMETERFVEXTPROC) (GLenum target, GLenum pname, const GLfloat *params);") (define-entry-point glSecondaryColor3bEXT PFNGLSECONDARYCOLOR3BEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BEXTPROC) (GLbyte red, GLbyte green, GLbyte blue);") (define-entry-point glSecondaryColor3bvEXT PFNGLSECONDARYCOLOR3BVEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3BVEXTPROC) (const GLbyte *v);") (define-entry-point glSecondaryColor3dEXT PFNGLSECONDARYCOLOR3DEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DEXTPROC) (GLdouble red, GLdouble green, GLdouble blue);") (define-entry-point glSecondaryColor3dvEXT PFNGLSECONDARYCOLOR3DVEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3DVEXTPROC) (const GLdouble *v);") (define-entry-point glSecondaryColor3fEXT PFNGLSECONDARYCOLOR3FEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FEXTPROC) (GLfloat red, GLfloat green, GLfloat blue);") (define-entry-point glSecondaryColor3fvEXT PFNGLSECONDARYCOLOR3FVEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3FVEXTPROC) (const GLfloat *v);") (define-entry-point glSecondaryColor3iEXT PFNGLSECONDARYCOLOR3IEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IEXTPROC) (GLint red, GLint green, GLint blue);") (define-entry-point glSecondaryColor3ivEXT PFNGLSECONDARYCOLOR3IVEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3IVEXTPROC) (const GLint *v);") (define-entry-point glSecondaryColor3sEXT PFNGLSECONDARYCOLOR3SEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SEXTPROC) (GLshort red, GLshort green, GLshort blue);") (define-entry-point glSecondaryColor3svEXT PFNGLSECONDARYCOLOR3SVEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3SVEXTPROC) (const GLshort *v);") (define-entry-point glSecondaryColor3ubEXT PFNGLSECONDARYCOLOR3UBEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBEXTPROC) (GLubyte red, GLubyte green, GLubyte blue);") (define-entry-point glSecondaryColor3ubvEXT PFNGLSECONDARYCOLOR3UBVEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UBVEXTPROC) (const GLubyte *v);") (define-entry-point glSecondaryColor3uiEXT PFNGLSECONDARYCOLOR3UIEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIEXTPROC) (GLuint red, GLuint green, GLuint blue);") (define-entry-point glSecondaryColor3uivEXT PFNGLSECONDARYCOLOR3UIVEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3UIVEXTPROC) (const GLuint *v);") (define-entry-point glSecondaryColor3usEXT PFNGLSECONDARYCOLOR3USEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USEXTPROC) (GLushort red, GLushort green, GLushort blue);") (define-entry-point glSecondaryColor3usvEXT PFNGLSECONDARYCOLOR3USVEXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3USVEXTPROC) (const GLushort *v);") (define-entry-point glSecondaryColorPointerEXT PFNGLSECONDARYCOLORPOINTEREXTPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTEREXTPROC) (GLint size, GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glTextureNormalEXT PFNGLTEXTURENORMALEXTPROC "typedef void (APIENTRYP PFNGLTEXTURENORMALEXTPROC) (GLenum mode);") (define-entry-point glMultiDrawArraysEXT PFNGLMULTIDRAWARRAYSEXTPROC "typedef void (APIENTRYP PFNGLMULTIDRAWARRAYSEXTPROC) (GLenum mode, GLint *first, GLsizei *count, GLsizei primcount);") (define-entry-point glMultiDrawElementsEXT PFNGLMULTIDRAWELEMENTSEXTPROC "typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTSEXTPROC) (GLenum mode, const GLsizei *count, GLenum type, const GLvoid* *indices, GLsizei primcount);") (define-entry-point glFogCoordfEXT PFNGLFOGCOORDFEXTPROC "typedef void (APIENTRYP PFNGLFOGCOORDFEXTPROC) (GLfloat coord);") (define-entry-point glFogCoordfvEXT PFNGLFOGCOORDFVEXTPROC "typedef void (APIENTRYP PFNGLFOGCOORDFVEXTPROC) (const GLfloat *coord);") (define-entry-point glFogCoorddEXT PFNGLFOGCOORDDEXTPROC "typedef void (APIENTRYP PFNGLFOGCOORDDEXTPROC) (GLdouble coord);") (define-entry-point glFogCoorddvEXT PFNGLFOGCOORDDVEXTPROC "typedef void (APIENTRYP PFNGLFOGCOORDDVEXTPROC) (const GLdouble *coord);") (define-entry-point glFogCoordPointerEXT PFNGLFOGCOORDPOINTEREXTPROC "typedef void (APIENTRYP PFNGLFOGCOORDPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glTangent3bEXT PFNGLTANGENT3BEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3BEXTPROC) (GLbyte tx, GLbyte ty, GLbyte tz);") (define-entry-point glTangent3bvEXT PFNGLTANGENT3BVEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3BVEXTPROC) (const GLbyte *v);") (define-entry-point glTangent3dEXT PFNGLTANGENT3DEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3DEXTPROC) (GLdouble tx, GLdouble ty, GLdouble tz);") (define-entry-point glTangent3dvEXT PFNGLTANGENT3DVEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3DVEXTPROC) (const GLdouble *v);") (define-entry-point glTangent3fEXT PFNGLTANGENT3FEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3FEXTPROC) (GLfloat tx, GLfloat ty, GLfloat tz);") (define-entry-point glTangent3fvEXT PFNGLTANGENT3FVEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3FVEXTPROC) (const GLfloat *v);") (define-entry-point glTangent3iEXT PFNGLTANGENT3IEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3IEXTPROC) (GLint tx, GLint ty, GLint tz);") (define-entry-point glTangent3ivEXT PFNGLTANGENT3IVEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3IVEXTPROC) (const GLint *v);") (define-entry-point glTangent3sEXT PFNGLTANGENT3SEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3SEXTPROC) (GLshort tx, GLshort ty, GLshort tz);") (define-entry-point glTangent3svEXT PFNGLTANGENT3SVEXTPROC "typedef void (APIENTRYP PFNGLTANGENT3SVEXTPROC) (const GLshort *v);") (define-entry-point glBinormal3bEXT PFNGLBINORMAL3BEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3BEXTPROC) (GLbyte bx, GLbyte by, GLbyte bz);") (define-entry-point glBinormal3bvEXT PFNGLBINORMAL3BVEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3BVEXTPROC) (const GLbyte *v);") (define-entry-point glBinormal3dEXT PFNGLBINORMAL3DEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3DEXTPROC) (GLdouble bx, GLdouble by, GLdouble bz);") (define-entry-point glBinormal3dvEXT PFNGLBINORMAL3DVEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3DVEXTPROC) (const GLdouble *v);") (define-entry-point glBinormal3fEXT PFNGLBINORMAL3FEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3FEXTPROC) (GLfloat bx, GLfloat by, GLfloat bz);") (define-entry-point glBinormal3fvEXT PFNGLBINORMAL3FVEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3FVEXTPROC) (const GLfloat *v);") (define-entry-point glBinormal3iEXT PFNGLBINORMAL3IEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3IEXTPROC) (GLint bx, GLint by, GLint bz);") (define-entry-point glBinormal3ivEXT PFNGLBINORMAL3IVEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3IVEXTPROC) (const GLint *v);") (define-entry-point glBinormal3sEXT PFNGLBINORMAL3SEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3SEXTPROC) (GLshort bx, GLshort by, GLshort bz);") (define-entry-point glBinormal3svEXT PFNGLBINORMAL3SVEXTPROC "typedef void (APIENTRYP PFNGLBINORMAL3SVEXTPROC) (const GLshort *v);") (define-entry-point glTangentPointerEXT PFNGLTANGENTPOINTEREXTPROC "typedef void (APIENTRYP PFNGLTANGENTPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glBinormalPointerEXT PFNGLBINORMALPOINTEREXTPROC "typedef void (APIENTRYP PFNGLBINORMALPOINTEREXTPROC) (GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glFinishTextureSUNX PFNGLFINISHTEXTURESUNXPROC "typedef void (APIENTRYP PFNGLFINISHTEXTURESUNXPROC) (void);") (define-entry-point glGlobalAlphaFactorbSUN PFNGLGLOBALALPHAFACTORBSUNPROC "typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORBSUNPROC) (GLbyte factor);") (define-entry-point glGlobalAlphaFactorsSUN PFNGLGLOBALALPHAFACTORSSUNPROC "typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORSSUNPROC) (GLshort factor);") (define-entry-point glGlobalAlphaFactoriSUN PFNGLGLOBALALPHAFACTORISUNPROC "typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORISUNPROC) (GLint factor);") (define-entry-point glGlobalAlphaFactorfSUN PFNGLGLOBALALPHAFACTORFSUNPROC "typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORFSUNPROC) (GLfloat factor);") (define-entry-point glGlobalAlphaFactordSUN PFNGLGLOBALALPHAFACTORDSUNPROC "typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORDSUNPROC) (GLdouble factor);") (define-entry-point glGlobalAlphaFactorubSUN PFNGLGLOBALALPHAFACTORUBSUNPROC "typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUBSUNPROC) (GLubyte factor);") (define-entry-point glGlobalAlphaFactorusSUN PFNGLGLOBALALPHAFACTORUSSUNPROC "typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUSSUNPROC) (GLushort factor);") (define-entry-point glGlobalAlphaFactoruiSUN PFNGLGLOBALALPHAFACTORUISUNPROC "typedef void (APIENTRYP PFNGLGLOBALALPHAFACTORUISUNPROC) (GLuint factor);") (define-entry-point glReplacementCodeuiSUN PFNGLREPLACEMENTCODEUISUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUISUNPROC) (GLuint code);") (define-entry-point glReplacementCodeusSUN PFNGLREPLACEMENTCODEUSSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSSUNPROC) (GLushort code);") (define-entry-point glReplacementCodeubSUN PFNGLREPLACEMENTCODEUBSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBSUNPROC) (GLubyte code);") (define-entry-point glReplacementCodeuivSUN PFNGLREPLACEMENTCODEUIVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVSUNPROC) (const GLuint *code);") (define-entry-point glReplacementCodeusvSUN PFNGLREPLACEMENTCODEUSVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUSVSUNPROC) (const GLushort *code);") (define-entry-point glReplacementCodeubvSUN PFNGLREPLACEMENTCODEUBVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUBVSUNPROC) (const GLubyte *code);") (define-entry-point glReplacementCodePointerSUN PFNGLREPLACEMENTCODEPOINTERSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEPOINTERSUNPROC) (GLenum type, GLsizei stride, const GLvoid* *pointer);") (define-entry-point glColor4ubVertex2fSUN PFNGLCOLOR4UBVERTEX2FSUNPROC "typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y);") (define-entry-point glColor4ubVertex2fvSUN PFNGLCOLOR4UBVERTEX2FVSUNPROC "typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX2FVSUNPROC) (const GLubyte *c, const GLfloat *v);") (define-entry-point glColor4ubVertex3fSUN PFNGLCOLOR4UBVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FSUNPROC) (GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glColor4ubVertex3fvSUN PFNGLCOLOR4UBVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLCOLOR4UBVERTEX3FVSUNPROC) (const GLubyte *c, const GLfloat *v);") (define-entry-point glColor3fVertex3fSUN PFNGLCOLOR3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glColor3fVertex3fvSUN PFNGLCOLOR3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *v);") (define-entry-point glNormal3fVertex3fSUN PFNGLNORMAL3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FSUNPROC) (GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glNormal3fVertex3fvSUN PFNGLNORMAL3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *n, const GLfloat *v);") (define-entry-point glColor4fNormal3fVertex3fSUN PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glColor4fNormal3fVertex3fvSUN PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *c, const GLfloat *n, const GLfloat *v);") (define-entry-point glTexCoord2fVertex3fSUN PFNGLTEXCOORD2FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glTexCoord2fVertex3fvSUN PFNGLTEXCOORD2FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *v);") (define-entry-point glTexCoord4fVertex4fSUN PFNGLTEXCOORD4FVERTEX4FSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glTexCoord4fVertex4fvSUN PFNGLTEXCOORD4FVERTEX4FVSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD4FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *v);") (define-entry-point glTexCoord2fColor4ubVertex3fSUN PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glTexCoord2fColor4ubVertex3fvSUN PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4UBVERTEX3FVSUNPROC) (const GLfloat *tc, const GLubyte *c, const GLfloat *v);") (define-entry-point glTexCoord2fColor3fVertex3fSUN PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glTexCoord2fColor3fVertex3fvSUN PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *v);") (define-entry-point glTexCoord2fNormal3fVertex3fSUN PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glTexCoord2fNormal3fVertex3fvSUN PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *n, const GLfloat *v);") (define-entry-point glTexCoord2fColor4fNormal3fVertex3fSUN PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glTexCoord2fColor4fNormal3fVertex3fvSUN PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);") (define-entry-point glTexCoord4fColor4fNormal3fVertex4fSUN PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FSUNPROC) (GLfloat s, GLfloat t, GLfloat p, GLfloat q, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glTexCoord4fColor4fNormal3fVertex4fvSUN PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC "typedef void (APIENTRYP PFNGLTEXCOORD4FCOLOR4FNORMAL3FVERTEX4FVSUNPROC) (const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);") (define-entry-point glReplacementCodeuiVertex3fSUN PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FSUNPROC) (GLuint rc, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glReplacementCodeuiVertex3fvSUN PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUIVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *v);") (define-entry-point glReplacementCodeuiColor4ubVertex3fSUN PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FSUNPROC) (GLuint rc, GLubyte r, GLubyte g, GLubyte b, GLubyte a, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glReplacementCodeuiColor4ubVertex3fvSUN PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4UBVERTEX3FVSUNPROC) (const GLuint *rc, const GLubyte *c, const GLfloat *v);") (define-entry-point glReplacementCodeuiColor3fVertex3fSUN PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glReplacementCodeuiColor3fVertex3fvSUN PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *v);") (define-entry-point glReplacementCodeuiNormal3fVertex3fSUN PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glReplacementCodeuiNormal3fVertex3fvSUN PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUINORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *n, const GLfloat *v);") (define-entry-point glReplacementCodeuiColor4fNormal3fVertex3fSUN PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glReplacementCodeuiColor4fNormal3fVertex3fvSUN PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUICOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *c, const GLfloat *n, const GLfloat *v);") (define-entry-point glReplacementCodeuiTexCoord2fVertex3fSUN PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glReplacementCodeuiTexCoord2fVertex3fvSUN PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *v);") (define-entry-point glReplacementCodeuiTexCoord2fNormal3fVertex3fSUN PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glReplacementCodeuiTexCoord2fNormal3fVertex3fvSUN PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *n, const GLfloat *v);") (define-entry-point glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fSUN PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FSUNPROC) (GLuint rc, GLfloat s, GLfloat t, GLfloat r, GLfloat g, GLfloat b, GLfloat a, GLfloat nx, GLfloat ny, GLfloat nz, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glReplacementCodeuiTexCoord2fColor4fNormal3fVertex3fvSUN PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC "typedef void (APIENTRYP PFNGLREPLACEMENTCODEUITEXCOORD2FCOLOR4FNORMAL3FVERTEX3FVSUNPROC) (const GLuint *rc, const GLfloat *tc, const GLfloat *c, const GLfloat *n, const GLfloat *v);") (define-entry-point glBlendFuncSeparateEXT PFNGLBLENDFUNCSEPARATEEXTPROC "typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEEXTPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);") (define-entry-point glBlendFuncSeparateINGR PFNGLBLENDFUNCSEPARATEINGRPROC "typedef void (APIENTRYP PFNGLBLENDFUNCSEPARATEINGRPROC) (GLenum sfactorRGB, GLenum dfactorRGB, GLenum sfactorAlpha, GLenum dfactorAlpha);") (define-entry-point glVertexWeightfEXT PFNGLVERTEXWEIGHTFEXTPROC "typedef void (APIENTRYP PFNGLVERTEXWEIGHTFEXTPROC) (GLfloat weight);") (define-entry-point glVertexWeightfvEXT PFNGLVERTEXWEIGHTFVEXTPROC "typedef void (APIENTRYP PFNGLVERTEXWEIGHTFVEXTPROC) (const GLfloat *weight);") (define-entry-point glVertexWeightPointerEXT PFNGLVERTEXWEIGHTPOINTEREXTPROC "typedef void (APIENTRYP PFNGLVERTEXWEIGHTPOINTEREXTPROC) (GLsizei size, GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glFlushVertexArrayRangeNV PFNGLFLUSHVERTEXARRAYRANGENVPROC "typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGENVPROC) (void);") (define-entry-point glVertexArrayRangeNV PFNGLVERTEXARRAYRANGENVPROC "typedef void (APIENTRYP PFNGLVERTEXARRAYRANGENVPROC) (GLsizei length, const GLvoid *pointer);") (define-entry-point glCombinerParameterfvNV PFNGLCOMBINERPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFVNVPROC) (GLenum pname, const GLfloat *params);") (define-entry-point glCombinerParameterfNV PFNGLCOMBINERPARAMETERFNVPROC "typedef void (APIENTRYP PFNGLCOMBINERPARAMETERFNVPROC) (GLenum pname, GLfloat param);") (define-entry-point glCombinerParameterivNV PFNGLCOMBINERPARAMETERIVNVPROC "typedef void (APIENTRYP PFNGLCOMBINERPARAMETERIVNVPROC) (GLenum pname, const GLint *params);") (define-entry-point glCombinerParameteriNV PFNGLCOMBINERPARAMETERINVPROC "typedef void (APIENTRYP PFNGLCOMBINERPARAMETERINVPROC) (GLenum pname, GLint param);") (define-entry-point glCombinerInputNV PFNGLCOMBINERINPUTNVPROC "typedef void (APIENTRYP PFNGLCOMBINERINPUTNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);") (define-entry-point glCombinerOutputNV PFNGLCOMBINEROUTPUTNVPROC "typedef void (APIENTRYP PFNGLCOMBINEROUTPUTNVPROC) (GLenum stage, GLenum portion, GLenum abOutput, GLenum cdOutput, GLenum sumOutput, GLenum scale, GLenum bias, GLboolean abDotProduct, GLboolean cdDotProduct, GLboolean muxSum);") (define-entry-point glFinalCombinerInputNV PFNGLFINALCOMBINERINPUTNVPROC "typedef void (APIENTRYP PFNGLFINALCOMBINERINPUTNVPROC) (GLenum variable, GLenum input, GLenum mapping, GLenum componentUsage);") (define-entry-point glGetCombinerInputParameterfvNV PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLfloat *params);") (define-entry-point glGetCombinerInputParameterivNV PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC "typedef void (APIENTRYP PFNGLGETCOMBINERINPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum variable, GLenum pname, GLint *params);") (define-entry-point glGetCombinerOutputParameterfvNV PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLfloat *params);") (define-entry-point glGetCombinerOutputParameterivNV PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC "typedef void (APIENTRYP PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC) (GLenum stage, GLenum portion, GLenum pname, GLint *params);") (define-entry-point glGetFinalCombinerInputParameterfvNV PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC) (GLenum variable, GLenum pname, GLfloat *params);") (define-entry-point glGetFinalCombinerInputParameterivNV PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC "typedef void (APIENTRYP PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC) (GLenum variable, GLenum pname, GLint *params);") (define-entry-point glResizeBuffersMESA PFNGLRESIZEBUFFERSMESAPROC "typedef void (APIENTRYP PFNGLRESIZEBUFFERSMESAPROC) (void);") (define-entry-point glWindowPos2dMESA PFNGLWINDOWPOS2DMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2DMESAPROC) (GLdouble x, GLdouble y);") (define-entry-point glWindowPos2dvMESA PFNGLWINDOWPOS2DVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2DVMESAPROC) (const GLdouble *v);") (define-entry-point glWindowPos2fMESA PFNGLWINDOWPOS2FMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2FMESAPROC) (GLfloat x, GLfloat y);") (define-entry-point glWindowPos2fvMESA PFNGLWINDOWPOS2FVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2FVMESAPROC) (const GLfloat *v);") (define-entry-point glWindowPos2iMESA PFNGLWINDOWPOS2IMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2IMESAPROC) (GLint x, GLint y);") (define-entry-point glWindowPos2ivMESA PFNGLWINDOWPOS2IVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2IVMESAPROC) (const GLint *v);") (define-entry-point glWindowPos2sMESA PFNGLWINDOWPOS2SMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2SMESAPROC) (GLshort x, GLshort y);") (define-entry-point glWindowPos2svMESA PFNGLWINDOWPOS2SVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS2SVMESAPROC) (const GLshort *v);") (define-entry-point glWindowPos3dMESA PFNGLWINDOWPOS3DMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3DMESAPROC) (GLdouble x, GLdouble y, GLdouble z);") (define-entry-point glWindowPos3dvMESA PFNGLWINDOWPOS3DVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3DVMESAPROC) (const GLdouble *v);") (define-entry-point glWindowPos3fMESA PFNGLWINDOWPOS3FMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3FMESAPROC) (GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glWindowPos3fvMESA PFNGLWINDOWPOS3FVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3FVMESAPROC) (const GLfloat *v);") (define-entry-point glWindowPos3iMESA PFNGLWINDOWPOS3IMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3IMESAPROC) (GLint x, GLint y, GLint z);") (define-entry-point glWindowPos3ivMESA PFNGLWINDOWPOS3IVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3IVMESAPROC) (const GLint *v);") (define-entry-point glWindowPos3sMESA PFNGLWINDOWPOS3SMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3SMESAPROC) (GLshort x, GLshort y, GLshort z);") (define-entry-point glWindowPos3svMESA PFNGLWINDOWPOS3SVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS3SVMESAPROC) (const GLshort *v);") (define-entry-point glWindowPos4dMESA PFNGLWINDOWPOS4DMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS4DMESAPROC) (GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glWindowPos4dvMESA PFNGLWINDOWPOS4DVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS4DVMESAPROC) (const GLdouble *v);") (define-entry-point glWindowPos4fMESA PFNGLWINDOWPOS4FMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS4FMESAPROC) (GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glWindowPos4fvMESA PFNGLWINDOWPOS4FVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS4FVMESAPROC) (const GLfloat *v);") (define-entry-point glWindowPos4iMESA PFNGLWINDOWPOS4IMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS4IMESAPROC) (GLint x, GLint y, GLint z, GLint w);") (define-entry-point glWindowPos4ivMESA PFNGLWINDOWPOS4IVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS4IVMESAPROC) (const GLint *v);") (define-entry-point glWindowPos4sMESA PFNGLWINDOWPOS4SMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS4SMESAPROC) (GLshort x, GLshort y, GLshort z, GLshort w);") (define-entry-point glWindowPos4svMESA PFNGLWINDOWPOS4SVMESAPROC "typedef void (APIENTRYP PFNGLWINDOWPOS4SVMESAPROC) (const GLshort *v);") (define-entry-point glMultiModeDrawArraysIBM PFNGLMULTIMODEDRAWARRAYSIBMPROC "typedef void (APIENTRYP PFNGLMULTIMODEDRAWARRAYSIBMPROC) (const GLenum *mode, const GLint *first, const GLsizei *count, GLsizei primcount, GLint modestride);") (define-entry-point glMultiModeDrawElementsIBM PFNGLMULTIMODEDRAWELEMENTSIBMPROC "typedef void (APIENTRYP PFNGLMULTIMODEDRAWELEMENTSIBMPROC) (const GLenum *mode, const GLsizei *count, GLenum type, const GLvoid* const *indices, GLsizei primcount, GLint modestride);") (define-entry-point glColorPointerListIBM PFNGLCOLORPOINTERLISTIBMPROC "typedef void (APIENTRYP PFNGLCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);") (define-entry-point glSecondaryColorPointerListIBM PFNGLSECONDARYCOLORPOINTERLISTIBMPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLORPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);") (define-entry-point glEdgeFlagPointerListIBM PFNGLEDGEFLAGPOINTERLISTIBMPROC "typedef void (APIENTRYP PFNGLEDGEFLAGPOINTERLISTIBMPROC) (GLint stride, const GLboolean* *pointer, GLint ptrstride);") (define-entry-point glFogCoordPointerListIBM PFNGLFOGCOORDPOINTERLISTIBMPROC "typedef void (APIENTRYP PFNGLFOGCOORDPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);") (define-entry-point glIndexPointerListIBM PFNGLINDEXPOINTERLISTIBMPROC "typedef void (APIENTRYP PFNGLINDEXPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);") (define-entry-point glNormalPointerListIBM PFNGLNORMALPOINTERLISTIBMPROC "typedef void (APIENTRYP PFNGLNORMALPOINTERLISTIBMPROC) (GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);") (define-entry-point glTexCoordPointerListIBM PFNGLTEXCOORDPOINTERLISTIBMPROC "typedef void (APIENTRYP PFNGLTEXCOORDPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);") (define-entry-point glVertexPointerListIBM PFNGLVERTEXPOINTERLISTIBMPROC "typedef void (APIENTRYP PFNGLVERTEXPOINTERLISTIBMPROC) (GLint size, GLenum type, GLint stride, const GLvoid* *pointer, GLint ptrstride);") (define-entry-point glTbufferMask3DFX PFNGLTBUFFERMASK3DFXPROC "typedef void (APIENTRYP PFNGLTBUFFERMASK3DFXPROC) (GLuint mask);") (define-entry-point glSampleMaskEXT PFNGLSAMPLEMASKEXTPROC "typedef void (APIENTRYP PFNGLSAMPLEMASKEXTPROC) (GLclampf value, GLboolean invert);") (define-entry-point glSamplePatternEXT PFNGLSAMPLEPATTERNEXTPROC "typedef void (APIENTRYP PFNGLSAMPLEPATTERNEXTPROC) (GLenum pattern);") (define-entry-point glTextureColorMaskSGIS PFNGLTEXTURECOLORMASKSGISPROC "typedef void (APIENTRYP PFNGLTEXTURECOLORMASKSGISPROC) (GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha);") (define-entry-point glIglooInterfaceSGIX PFNGLIGLOOINTERFACESGIXPROC "typedef void (APIENTRYP PFNGLIGLOOINTERFACESGIXPROC) (GLenum pname, const GLvoid *params);") (define-entry-point glDeleteFencesNV PFNGLDELETEFENCESNVPROC "typedef void (APIENTRYP PFNGLDELETEFENCESNVPROC) (GLsizei n, const GLuint *fences);") (define-entry-point glGenFencesNV PFNGLGENFENCESNVPROC "typedef void (APIENTRYP PFNGLGENFENCESNVPROC) (GLsizei n, GLuint *fences);") (define-entry-point glIsFenceNV PFNGLISFENCENVPROC "typedef GLboolean (APIENTRYP PFNGLISFENCENVPROC) (GLuint fence);") (define-entry-point glTestFenceNV PFNGLTESTFENCENVPROC "typedef GLboolean (APIENTRYP PFNGLTESTFENCENVPROC) (GLuint fence);") (define-entry-point glGetFenceivNV PFNGLGETFENCEIVNVPROC "typedef void (APIENTRYP PFNGLGETFENCEIVNVPROC) (GLuint fence, GLenum pname, GLint *params);") (define-entry-point glFinishFenceNV PFNGLFINISHFENCENVPROC "typedef void (APIENTRYP PFNGLFINISHFENCENVPROC) (GLuint fence);") (define-entry-point glSetFenceNV PFNGLSETFENCENVPROC "typedef void (APIENTRYP PFNGLSETFENCENVPROC) (GLuint fence, GLenum condition);") (define-entry-point glMapControlPointsNV PFNGLMAPCONTROLPOINTSNVPROC "typedef void (APIENTRYP PFNGLMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLint uorder, GLint vorder, GLboolean packed, const GLvoid *points);") (define-entry-point glMapParameterivNV PFNGLMAPPARAMETERIVNVPROC "typedef void (APIENTRYP PFNGLMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, const GLint *params);") (define-entry-point glMapParameterfvNV PFNGLMAPPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, const GLfloat *params);") (define-entry-point glGetMapControlPointsNV PFNGLGETMAPCONTROLPOINTSNVPROC "typedef void (APIENTRYP PFNGLGETMAPCONTROLPOINTSNVPROC) (GLenum target, GLuint index, GLenum type, GLsizei ustride, GLsizei vstride, GLboolean packed, GLvoid *points);") (define-entry-point glGetMapParameterivNV PFNGLGETMAPPARAMETERIVNVPROC "typedef void (APIENTRYP PFNGLGETMAPPARAMETERIVNVPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glGetMapParameterfvNV PFNGLGETMAPPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLGETMAPPARAMETERFVNVPROC) (GLenum target, GLenum pname, GLfloat *params);") (define-entry-point glGetMapAttribParameterivNV PFNGLGETMAPATTRIBPARAMETERIVNVPROC "typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERIVNVPROC) (GLenum target, GLuint index, GLenum pname, GLint *params);") (define-entry-point glGetMapAttribParameterfvNV PFNGLGETMAPATTRIBPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLGETMAPATTRIBPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);") (define-entry-point glEvalMapsNV PFNGLEVALMAPSNVPROC "typedef void (APIENTRYP PFNGLEVALMAPSNVPROC) (GLenum target, GLenum mode);") (define-entry-point glCombinerStageParameterfvNV PFNGLCOMBINERSTAGEPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, const GLfloat *params);") (define-entry-point glGetCombinerStageParameterfvNV PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLGETCOMBINERSTAGEPARAMETERFVNVPROC) (GLenum stage, GLenum pname, GLfloat *params);") (define-entry-point glAreProgramsResidentNV PFNGLAREPROGRAMSRESIDENTNVPROC "typedef GLboolean (APIENTRYP PFNGLAREPROGRAMSRESIDENTNVPROC) (GLsizei n, const GLuint *programs, GLboolean *residences);") (define-entry-point glBindProgramNV PFNGLBINDPROGRAMNVPROC "typedef void (APIENTRYP PFNGLBINDPROGRAMNVPROC) (GLenum target, GLuint id);") (define-entry-point glDeleteProgramsNV PFNGLDELETEPROGRAMSNVPROC "typedef void (APIENTRYP PFNGLDELETEPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);") (define-entry-point glExecuteProgramNV PFNGLEXECUTEPROGRAMNVPROC "typedef void (APIENTRYP PFNGLEXECUTEPROGRAMNVPROC) (GLenum target, GLuint id, const GLfloat *params);") (define-entry-point glGenProgramsNV PFNGLGENPROGRAMSNVPROC "typedef void (APIENTRYP PFNGLGENPROGRAMSNVPROC) (GLsizei n, GLuint *programs);") (define-entry-point glGetProgramParameterdvNV PFNGLGETPROGRAMPARAMETERDVNVPROC "typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERDVNVPROC) (GLenum target, GLuint index, GLenum pname, GLdouble *params);") (define-entry-point glGetProgramParameterfvNV PFNGLGETPROGRAMPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLGETPROGRAMPARAMETERFVNVPROC) (GLenum target, GLuint index, GLenum pname, GLfloat *params);") (define-entry-point glGetProgramivNV PFNGLGETPROGRAMIVNVPROC "typedef void (APIENTRYP PFNGLGETPROGRAMIVNVPROC) (GLuint id, GLenum pname, GLint *params);") (define-entry-point glGetProgramStringNV PFNGLGETPROGRAMSTRINGNVPROC "typedef void (APIENTRYP PFNGLGETPROGRAMSTRINGNVPROC) (GLuint id, GLenum pname, GLubyte *program);") (define-entry-point glGetTrackMatrixivNV PFNGLGETTRACKMATRIXIVNVPROC "typedef void (APIENTRYP PFNGLGETTRACKMATRIXIVNVPROC) (GLenum target, GLuint address, GLenum pname, GLint *params);") (define-entry-point glGetVertexAttribdvNV PFNGLGETVERTEXATTRIBDVNVPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVNVPROC) (GLuint index, GLenum pname, GLdouble *params);") (define-entry-point glGetVertexAttribfvNV PFNGLGETVERTEXATTRIBFVNVPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVNVPROC) (GLuint index, GLenum pname, GLfloat *params);") (define-entry-point glGetVertexAttribivNV PFNGLGETVERTEXATTRIBIVNVPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVNVPROC) (GLuint index, GLenum pname, GLint *params);") (define-entry-point glGetVertexAttribPointervNV PFNGLGETVERTEXATTRIBPOINTERVNVPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVNVPROC) (GLuint index, GLenum pname, GLvoid* *pointer);") (define-entry-point glIsProgramNV PFNGLISPROGRAMNVPROC "typedef GLboolean (APIENTRYP PFNGLISPROGRAMNVPROC) (GLuint id);") (define-entry-point glLoadProgramNV PFNGLLOADPROGRAMNVPROC "typedef void (APIENTRYP PFNGLLOADPROGRAMNVPROC) (GLenum target, GLuint id, GLsizei len, const GLubyte *program);") (define-entry-point glProgramParameter4dNV PFNGLPROGRAMPARAMETER4DNVPROC "typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DNVPROC) (GLenum target, GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glProgramParameter4dvNV PFNGLPROGRAMPARAMETER4DVNVPROC "typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4DVNVPROC) (GLenum target, GLuint index, const GLdouble *v);") (define-entry-point glProgramParameter4fNV PFNGLPROGRAMPARAMETER4FNVPROC "typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FNVPROC) (GLenum target, GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glProgramParameter4fvNV PFNGLPROGRAMPARAMETER4FVNVPROC "typedef void (APIENTRYP PFNGLPROGRAMPARAMETER4FVNVPROC) (GLenum target, GLuint index, const GLfloat *v);") (define-entry-point glProgramParameters4dvNV PFNGLPROGRAMPARAMETERS4DVNVPROC "typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4DVNVPROC) (GLenum target, GLuint index, GLuint count, const GLdouble *v);") (define-entry-point glProgramParameters4fvNV PFNGLPROGRAMPARAMETERS4FVNVPROC "typedef void (APIENTRYP PFNGLPROGRAMPARAMETERS4FVNVPROC) (GLenum target, GLuint index, GLuint count, const GLfloat *v);") (define-entry-point glRequestResidentProgramsNV PFNGLREQUESTRESIDENTPROGRAMSNVPROC "typedef void (APIENTRYP PFNGLREQUESTRESIDENTPROGRAMSNVPROC) (GLsizei n, const GLuint *programs);") (define-entry-point glTrackMatrixNV PFNGLTRACKMATRIXNVPROC "typedef void (APIENTRYP PFNGLTRACKMATRIXNVPROC) (GLenum target, GLuint address, GLenum matrix, GLenum transform);") (define-entry-point glVertexAttribPointerNV PFNGLVERTEXATTRIBPOINTERNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERNVPROC) (GLuint index, GLint fsize, GLenum type, GLsizei stride, const GLvoid *pointer);") (define-entry-point glVertexAttrib1dNV PFNGLVERTEXATTRIB1DNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1DNVPROC) (GLuint index, GLdouble x);") (define-entry-point glVertexAttrib1dvNV PFNGLVERTEXATTRIB1DVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVNVPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib1fNV PFNGLVERTEXATTRIB1FNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1FNVPROC) (GLuint index, GLfloat x);") (define-entry-point glVertexAttrib1fvNV PFNGLVERTEXATTRIB1FVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVNVPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib1sNV PFNGLVERTEXATTRIB1SNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1SNVPROC) (GLuint index, GLshort x);") (define-entry-point glVertexAttrib1svNV PFNGLVERTEXATTRIB1SVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVNVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib2dNV PFNGLVERTEXATTRIB2DNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2DNVPROC) (GLuint index, GLdouble x, GLdouble y);") (define-entry-point glVertexAttrib2dvNV PFNGLVERTEXATTRIB2DVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVNVPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib2fNV PFNGLVERTEXATTRIB2FNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2FNVPROC) (GLuint index, GLfloat x, GLfloat y);") (define-entry-point glVertexAttrib2fvNV PFNGLVERTEXATTRIB2FVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVNVPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib2sNV PFNGLVERTEXATTRIB2SNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2SNVPROC) (GLuint index, GLshort x, GLshort y);") (define-entry-point glVertexAttrib2svNV PFNGLVERTEXATTRIB2SVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVNVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib3dNV PFNGLVERTEXATTRIB3DNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z);") (define-entry-point glVertexAttrib3dvNV PFNGLVERTEXATTRIB3DVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVNVPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib3fNV PFNGLVERTEXATTRIB3FNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glVertexAttrib3fvNV PFNGLVERTEXATTRIB3FVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVNVPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib3sNV PFNGLVERTEXATTRIB3SNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z);") (define-entry-point glVertexAttrib3svNV PFNGLVERTEXATTRIB3SVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVNVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib4dNV PFNGLVERTEXATTRIB4DNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4DNVPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glVertexAttrib4dvNV PFNGLVERTEXATTRIB4DVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVNVPROC) (GLuint index, const GLdouble *v);") (define-entry-point glVertexAttrib4fNV PFNGLVERTEXATTRIB4FNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4FNVPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glVertexAttrib4fvNV PFNGLVERTEXATTRIB4FVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVNVPROC) (GLuint index, const GLfloat *v);") (define-entry-point glVertexAttrib4sNV PFNGLVERTEXATTRIB4SNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4SNVPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w);") (define-entry-point glVertexAttrib4svNV PFNGLVERTEXATTRIB4SVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVNVPROC) (GLuint index, const GLshort *v);") (define-entry-point glVertexAttrib4ubNV PFNGLVERTEXATTRIB4UBNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBNVPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w);") (define-entry-point glVertexAttrib4ubvNV PFNGLVERTEXATTRIB4UBVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVNVPROC) (GLuint index, const GLubyte *v);") (define-entry-point glVertexAttribs1dvNV PFNGLVERTEXATTRIBS1DVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS1DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);") (define-entry-point glVertexAttribs1fvNV PFNGLVERTEXATTRIBS1FVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS1FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);") (define-entry-point glVertexAttribs1svNV PFNGLVERTEXATTRIBS1SVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS1SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);") (define-entry-point glVertexAttribs2dvNV PFNGLVERTEXATTRIBS2DVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS2DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);") (define-entry-point glVertexAttribs2fvNV PFNGLVERTEXATTRIBS2FVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS2FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);") (define-entry-point glVertexAttribs2svNV PFNGLVERTEXATTRIBS2SVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS2SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);") (define-entry-point glVertexAttribs3dvNV PFNGLVERTEXATTRIBS3DVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS3DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);") (define-entry-point glVertexAttribs3fvNV PFNGLVERTEXATTRIBS3FVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS3FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);") (define-entry-point glVertexAttribs3svNV PFNGLVERTEXATTRIBS3SVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS3SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);") (define-entry-point glVertexAttribs4dvNV PFNGLVERTEXATTRIBS4DVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS4DVNVPROC) (GLuint index, GLsizei count, const GLdouble *v);") (define-entry-point glVertexAttribs4fvNV PFNGLVERTEXATTRIBS4FVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS4FVNVPROC) (GLuint index, GLsizei count, const GLfloat *v);") (define-entry-point glVertexAttribs4svNV PFNGLVERTEXATTRIBS4SVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS4SVNVPROC) (GLuint index, GLsizei count, const GLshort *v);") (define-entry-point glVertexAttribs4ubvNV PFNGLVERTEXATTRIBS4UBVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS4UBVNVPROC) (GLuint index, GLsizei count, const GLubyte *v);") (define-entry-point glTexBumpParameterivATI PFNGLTEXBUMPPARAMETERIVATIPROC "typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, const GLint *param);") (define-entry-point glTexBumpParameterfvATI PFNGLTEXBUMPPARAMETERFVATIPROC "typedef void (APIENTRYP PFNGLTEXBUMPPARAMETERFVATIPROC) (GLenum pname, const GLfloat *param);") (define-entry-point glGetTexBumpParameterivATI PFNGLGETTEXBUMPPARAMETERIVATIPROC "typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint *param);") (define-entry-point glGetTexBumpParameterfvATI PFNGLGETTEXBUMPPARAMETERFVATIPROC "typedef void (APIENTRYP PFNGLGETTEXBUMPPARAMETERFVATIPROC) (GLenum pname, GLfloat *param);") (define-entry-point glGenFragmentShadersATI PFNGLGENFRAGMENTSHADERSATIPROC "typedef GLuint (APIENTRYP PFNGLGENFRAGMENTSHADERSATIPROC) (GLuint range);") (define-entry-point glBindFragmentShaderATI PFNGLBINDFRAGMENTSHADERATIPROC "typedef void (APIENTRYP PFNGLBINDFRAGMENTSHADERATIPROC) (GLuint id);") (define-entry-point glDeleteFragmentShaderATI PFNGLDELETEFRAGMENTSHADERATIPROC "typedef void (APIENTRYP PFNGLDELETEFRAGMENTSHADERATIPROC) (GLuint id);") (define-entry-point glBeginFragmentShaderATI PFNGLBEGINFRAGMENTSHADERATIPROC "typedef void (APIENTRYP PFNGLBEGINFRAGMENTSHADERATIPROC) (void);") (define-entry-point glEndFragmentShaderATI PFNGLENDFRAGMENTSHADERATIPROC "typedef void (APIENTRYP PFNGLENDFRAGMENTSHADERATIPROC) (void);") (define-entry-point glPassTexCoordATI PFNGLPASSTEXCOORDATIPROC "typedef void (APIENTRYP PFNGLPASSTEXCOORDATIPROC) (GLuint dst, GLuint coord, GLenum swizzle);") (define-entry-point glSampleMapATI PFNGLSAMPLEMAPATIPROC "typedef void (APIENTRYP PFNGLSAMPLEMAPATIPROC) (GLuint dst, GLuint interp, GLenum swizzle);") (define-entry-point glColorFragmentOp1ATI PFNGLCOLORFRAGMENTOP1ATIPROC "typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);") (define-entry-point glColorFragmentOp2ATI PFNGLCOLORFRAGMENTOP2ATIPROC "typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);") (define-entry-point glColorFragmentOp3ATI PFNGLCOLORFRAGMENTOP3ATIPROC "typedef void (APIENTRYP PFNGLCOLORFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMask, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);") (define-entry-point glAlphaFragmentOp1ATI PFNGLALPHAFRAGMENTOP1ATIPROC "typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP1ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod);") (define-entry-point glAlphaFragmentOp2ATI PFNGLALPHAFRAGMENTOP2ATIPROC "typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP2ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod);") (define-entry-point glAlphaFragmentOp3ATI PFNGLALPHAFRAGMENTOP3ATIPROC "typedef void (APIENTRYP PFNGLALPHAFRAGMENTOP3ATIPROC) (GLenum op, GLuint dst, GLuint dstMod, GLuint arg1, GLuint arg1Rep, GLuint arg1Mod, GLuint arg2, GLuint arg2Rep, GLuint arg2Mod, GLuint arg3, GLuint arg3Rep, GLuint arg3Mod);") (define-entry-point glSetFragmentShaderConstantATI PFNGLSETFRAGMENTSHADERCONSTANTATIPROC "typedef void (APIENTRYP PFNGLSETFRAGMENTSHADERCONSTANTATIPROC) (GLuint dst, const GLfloat *value);") (define-entry-point glPNTrianglesiATI PFNGLPNTRIANGLESIATIPROC "typedef void (APIENTRYP PFNGLPNTRIANGLESIATIPROC) (GLenum pname, GLint param);") (define-entry-point glPNTrianglesfATI PFNGLPNTRIANGLESFATIPROC "typedef void (APIENTRYP PFNGLPNTRIANGLESFATIPROC) (GLenum pname, GLfloat param);") (define-entry-point glNewObjectBufferATI PFNGLNEWOBJECTBUFFERATIPROC "typedef GLuint (APIENTRYP PFNGLNEWOBJECTBUFFERATIPROC) (GLsizei size, const GLvoid *pointer, GLenum usage);") (define-entry-point glIsObjectBufferATI PFNGLISOBJECTBUFFERATIPROC "typedef GLboolean (APIENTRYP PFNGLISOBJECTBUFFERATIPROC) (GLuint buffer);") (define-entry-point glUpdateObjectBufferATI PFNGLUPDATEOBJECTBUFFERATIPROC "typedef void (APIENTRYP PFNGLUPDATEOBJECTBUFFERATIPROC) (GLuint buffer, GLuint offset, GLsizei size, const GLvoid *pointer, GLenum preserve);") (define-entry-point glGetObjectBufferfvATI PFNGLGETOBJECTBUFFERFVATIPROC "typedef void (APIENTRYP PFNGLGETOBJECTBUFFERFVATIPROC) (GLuint buffer, GLenum pname, GLfloat *params);") (define-entry-point glGetObjectBufferivATI PFNGLGETOBJECTBUFFERIVATIPROC "typedef void (APIENTRYP PFNGLGETOBJECTBUFFERIVATIPROC) (GLuint buffer, GLenum pname, GLint *params);") (define-entry-point glFreeObjectBufferATI PFNGLFREEOBJECTBUFFERATIPROC "typedef void (APIENTRYP PFNGLFREEOBJECTBUFFERATIPROC) (GLuint buffer);") (define-entry-point glArrayObjectATI PFNGLARRAYOBJECTATIPROC "typedef void (APIENTRYP PFNGLARRAYOBJECTATIPROC) (GLenum array, GLint size, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);") (define-entry-point glGetArrayObjectfvATI PFNGLGETARRAYOBJECTFVATIPROC "typedef void (APIENTRYP PFNGLGETARRAYOBJECTFVATIPROC) (GLenum array, GLenum pname, GLfloat *params);") (define-entry-point glGetArrayObjectivATI PFNGLGETARRAYOBJECTIVATIPROC "typedef void (APIENTRYP PFNGLGETARRAYOBJECTIVATIPROC) (GLenum array, GLenum pname, GLint *params);") (define-entry-point glVariantArrayObjectATI PFNGLVARIANTARRAYOBJECTATIPROC "typedef void (APIENTRYP PFNGLVARIANTARRAYOBJECTATIPROC) (GLuint id, GLenum type, GLsizei stride, GLuint buffer, GLuint offset);") (define-entry-point glGetVariantArrayObjectfvATI PFNGLGETVARIANTARRAYOBJECTFVATIPROC "typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTFVATIPROC) (GLuint id, GLenum pname, GLfloat *params);") (define-entry-point glGetVariantArrayObjectivATI PFNGLGETVARIANTARRAYOBJECTIVATIPROC "typedef void (APIENTRYP PFNGLGETVARIANTARRAYOBJECTIVATIPROC) (GLuint id, GLenum pname, GLint *params);") (define-entry-point glBeginVertexShaderEXT PFNGLBEGINVERTEXSHADEREXTPROC "typedef void (APIENTRYP PFNGLBEGINVERTEXSHADEREXTPROC) (void);") (define-entry-point glEndVertexShaderEXT PFNGLENDVERTEXSHADEREXTPROC "typedef void (APIENTRYP PFNGLENDVERTEXSHADEREXTPROC) (void);") (define-entry-point glBindVertexShaderEXT PFNGLBINDVERTEXSHADEREXTPROC "typedef void (APIENTRYP PFNGLBINDVERTEXSHADEREXTPROC) (GLuint id);") (define-entry-point glGenVertexShadersEXT PFNGLGENVERTEXSHADERSEXTPROC "typedef GLuint (APIENTRYP PFNGLGENVERTEXSHADERSEXTPROC) (GLuint range);") (define-entry-point glDeleteVertexShaderEXT PFNGLDELETEVERTEXSHADEREXTPROC "typedef void (APIENTRYP PFNGLDELETEVERTEXSHADEREXTPROC) (GLuint id);") (define-entry-point glShaderOp1EXT PFNGLSHADEROP1EXTPROC "typedef void (APIENTRYP PFNGLSHADEROP1EXTPROC) (GLenum op, GLuint res, GLuint arg1);") (define-entry-point glShaderOp2EXT PFNGLSHADEROP2EXTPROC "typedef void (APIENTRYP PFNGLSHADEROP2EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2);") (define-entry-point glShaderOp3EXT PFNGLSHADEROP3EXTPROC "typedef void (APIENTRYP PFNGLSHADEROP3EXTPROC) (GLenum op, GLuint res, GLuint arg1, GLuint arg2, GLuint arg3);") (define-entry-point glSwizzleEXT PFNGLSWIZZLEEXTPROC "typedef void (APIENTRYP PFNGLSWIZZLEEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);") (define-entry-point glWriteMaskEXT PFNGLWRITEMASKEXTPROC "typedef void (APIENTRYP PFNGLWRITEMASKEXTPROC) (GLuint res, GLuint in, GLenum outX, GLenum outY, GLenum outZ, GLenum outW);") (define-entry-point glInsertComponentEXT PFNGLINSERTCOMPONENTEXTPROC "typedef void (APIENTRYP PFNGLINSERTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);") (define-entry-point glExtractComponentEXT PFNGLEXTRACTCOMPONENTEXTPROC "typedef void (APIENTRYP PFNGLEXTRACTCOMPONENTEXTPROC) (GLuint res, GLuint src, GLuint num);") (define-entry-point glGenSymbolsEXT PFNGLGENSYMBOLSEXTPROC "typedef GLuint (APIENTRYP PFNGLGENSYMBOLSEXTPROC) (GLenum datatype, GLenum storagetype, GLenum range, GLuint components);") (define-entry-point glSetInvariantEXT PFNGLSETINVARIANTEXTPROC "typedef void (APIENTRYP PFNGLSETINVARIANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);") (define-entry-point glSetLocalConstantEXT PFNGLSETLOCALCONSTANTEXTPROC "typedef void (APIENTRYP PFNGLSETLOCALCONSTANTEXTPROC) (GLuint id, GLenum type, const GLvoid *addr);") (define-entry-point glVariantbvEXT PFNGLVARIANTBVEXTPROC "typedef void (APIENTRYP PFNGLVARIANTBVEXTPROC) (GLuint id, const GLbyte *addr);") (define-entry-point glVariantsvEXT PFNGLVARIANTSVEXTPROC "typedef void (APIENTRYP PFNGLVARIANTSVEXTPROC) (GLuint id, const GLshort *addr);") (define-entry-point glVariantivEXT PFNGLVARIANTIVEXTPROC "typedef void (APIENTRYP PFNGLVARIANTIVEXTPROC) (GLuint id, const GLint *addr);") (define-entry-point glVariantfvEXT PFNGLVARIANTFVEXTPROC "typedef void (APIENTRYP PFNGLVARIANTFVEXTPROC) (GLuint id, const GLfloat *addr);") (define-entry-point glVariantdvEXT PFNGLVARIANTDVEXTPROC "typedef void (APIENTRYP PFNGLVARIANTDVEXTPROC) (GLuint id, const GLdouble *addr);") (define-entry-point glVariantubvEXT PFNGLVARIANTUBVEXTPROC "typedef void (APIENTRYP PFNGLVARIANTUBVEXTPROC) (GLuint id, const GLubyte *addr);") (define-entry-point glVariantusvEXT PFNGLVARIANTUSVEXTPROC "typedef void (APIENTRYP PFNGLVARIANTUSVEXTPROC) (GLuint id, const GLushort *addr);") (define-entry-point glVariantuivEXT PFNGLVARIANTUIVEXTPROC "typedef void (APIENTRYP PFNGLVARIANTUIVEXTPROC) (GLuint id, const GLuint *addr);") (define-entry-point glVariantPointerEXT PFNGLVARIANTPOINTEREXTPROC "typedef void (APIENTRYP PFNGLVARIANTPOINTEREXTPROC) (GLuint id, GLenum type, GLuint stride, const GLvoid *addr);") (define-entry-point glEnableVariantClientStateEXT PFNGLENABLEVARIANTCLIENTSTATEEXTPROC "typedef void (APIENTRYP PFNGLENABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);") (define-entry-point glDisableVariantClientStateEXT PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC "typedef void (APIENTRYP PFNGLDISABLEVARIANTCLIENTSTATEEXTPROC) (GLuint id);") (define-entry-point glBindLightParameterEXT PFNGLBINDLIGHTPARAMETEREXTPROC "typedef GLuint (APIENTRYP PFNGLBINDLIGHTPARAMETEREXTPROC) (GLenum light, GLenum value);") (define-entry-point glBindMaterialParameterEXT PFNGLBINDMATERIALPARAMETEREXTPROC "typedef GLuint (APIENTRYP PFNGLBINDMATERIALPARAMETEREXTPROC) (GLenum face, GLenum value);") (define-entry-point glBindTexGenParameterEXT PFNGLBINDTEXGENPARAMETEREXTPROC "typedef GLuint (APIENTRYP PFNGLBINDTEXGENPARAMETEREXTPROC) (GLenum unit, GLenum coord, GLenum value);") (define-entry-point glBindTextureUnitParameterEXT PFNGLBINDTEXTUREUNITPARAMETEREXTPROC "typedef GLuint (APIENTRYP PFNGLBINDTEXTUREUNITPARAMETEREXTPROC) (GLenum unit, GLenum value);") (define-entry-point glBindParameterEXT PFNGLBINDPARAMETEREXTPROC "typedef GLuint (APIENTRYP PFNGLBINDPARAMETEREXTPROC) (GLenum value);") (define-entry-point glIsVariantEnabledEXT PFNGLISVARIANTENABLEDEXTPROC "typedef GLboolean (APIENTRYP PFNGLISVARIANTENABLEDEXTPROC) (GLuint id, GLenum cap);") (define-entry-point glGetVariantBooleanvEXT PFNGLGETVARIANTBOOLEANVEXTPROC "typedef void (APIENTRYP PFNGLGETVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);") (define-entry-point glGetVariantIntegervEXT PFNGLGETVARIANTINTEGERVEXTPROC "typedef void (APIENTRYP PFNGLGETVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);") (define-entry-point glGetVariantFloatvEXT PFNGLGETVARIANTFLOATVEXTPROC "typedef void (APIENTRYP PFNGLGETVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);") (define-entry-point glGetVariantPointervEXT PFNGLGETVARIANTPOINTERVEXTPROC "typedef void (APIENTRYP PFNGLGETVARIANTPOINTERVEXTPROC) (GLuint id, GLenum value, GLvoid* *data);") (define-entry-point glGetInvariantBooleanvEXT PFNGLGETINVARIANTBOOLEANVEXTPROC "typedef void (APIENTRYP PFNGLGETINVARIANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);") (define-entry-point glGetInvariantIntegervEXT PFNGLGETINVARIANTINTEGERVEXTPROC "typedef void (APIENTRYP PFNGLGETINVARIANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);") (define-entry-point glGetInvariantFloatvEXT PFNGLGETINVARIANTFLOATVEXTPROC "typedef void (APIENTRYP PFNGLGETINVARIANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);") (define-entry-point glGetLocalConstantBooleanvEXT PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC "typedef void (APIENTRYP PFNGLGETLOCALCONSTANTBOOLEANVEXTPROC) (GLuint id, GLenum value, GLboolean *data);") (define-entry-point glGetLocalConstantIntegervEXT PFNGLGETLOCALCONSTANTINTEGERVEXTPROC "typedef void (APIENTRYP PFNGLGETLOCALCONSTANTINTEGERVEXTPROC) (GLuint id, GLenum value, GLint *data);") (define-entry-point glGetLocalConstantFloatvEXT PFNGLGETLOCALCONSTANTFLOATVEXTPROC "typedef void (APIENTRYP PFNGLGETLOCALCONSTANTFLOATVEXTPROC) (GLuint id, GLenum value, GLfloat *data);") (define-entry-point glVertexStream1sATI PFNGLVERTEXSTREAM1SATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM1SATIPROC) (GLenum stream, GLshort x);") (define-entry-point glVertexStream1svATI PFNGLVERTEXSTREAM1SVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM1SVATIPROC) (GLenum stream, const GLshort *coords);") (define-entry-point glVertexStream1iATI PFNGLVERTEXSTREAM1IATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM1IATIPROC) (GLenum stream, GLint x);") (define-entry-point glVertexStream1ivATI PFNGLVERTEXSTREAM1IVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM1IVATIPROC) (GLenum stream, const GLint *coords);") (define-entry-point glVertexStream1fATI PFNGLVERTEXSTREAM1FATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM1FATIPROC) (GLenum stream, GLfloat x);") (define-entry-point glVertexStream1fvATI PFNGLVERTEXSTREAM1FVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM1FVATIPROC) (GLenum stream, const GLfloat *coords);") (define-entry-point glVertexStream1dATI PFNGLVERTEXSTREAM1DATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM1DATIPROC) (GLenum stream, GLdouble x);") (define-entry-point glVertexStream1dvATI PFNGLVERTEXSTREAM1DVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM1DVATIPROC) (GLenum stream, const GLdouble *coords);") (define-entry-point glVertexStream2sATI PFNGLVERTEXSTREAM2SATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM2SATIPROC) (GLenum stream, GLshort x, GLshort y);") (define-entry-point glVertexStream2svATI PFNGLVERTEXSTREAM2SVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM2SVATIPROC) (GLenum stream, const GLshort *coords);") (define-entry-point glVertexStream2iATI PFNGLVERTEXSTREAM2IATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM2IATIPROC) (GLenum stream, GLint x, GLint y);") (define-entry-point glVertexStream2ivATI PFNGLVERTEXSTREAM2IVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM2IVATIPROC) (GLenum stream, const GLint *coords);") (define-entry-point glVertexStream2fATI PFNGLVERTEXSTREAM2FATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM2FATIPROC) (GLenum stream, GLfloat x, GLfloat y);") (define-entry-point glVertexStream2fvATI PFNGLVERTEXSTREAM2FVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM2FVATIPROC) (GLenum stream, const GLfloat *coords);") (define-entry-point glVertexStream2dATI PFNGLVERTEXSTREAM2DATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM2DATIPROC) (GLenum stream, GLdouble x, GLdouble y);") (define-entry-point glVertexStream2dvATI PFNGLVERTEXSTREAM2DVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM2DVATIPROC) (GLenum stream, const GLdouble *coords);") (define-entry-point glVertexStream3sATI PFNGLVERTEXSTREAM3SATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM3SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z);") (define-entry-point glVertexStream3svATI PFNGLVERTEXSTREAM3SVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);") (define-entry-point glVertexStream3iATI PFNGLVERTEXSTREAM3IATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM3IATIPROC) (GLenum stream, GLint x, GLint y, GLint z);") (define-entry-point glVertexStream3ivATI PFNGLVERTEXSTREAM3IVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);") (define-entry-point glVertexStream3fATI PFNGLVERTEXSTREAM3FATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM3FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z);") (define-entry-point glVertexStream3fvATI PFNGLVERTEXSTREAM3FVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);") (define-entry-point glVertexStream3dATI PFNGLVERTEXSTREAM3DATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM3DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z);") (define-entry-point glVertexStream3dvATI PFNGLVERTEXSTREAM3DVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);") (define-entry-point glVertexStream4sATI PFNGLVERTEXSTREAM4SATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM4SATIPROC) (GLenum stream, GLshort x, GLshort y, GLshort z, GLshort w);") (define-entry-point glVertexStream4svATI PFNGLVERTEXSTREAM4SVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM4SVATIPROC) (GLenum stream, const GLshort *coords);") (define-entry-point glVertexStream4iATI PFNGLVERTEXSTREAM4IATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM4IATIPROC) (GLenum stream, GLint x, GLint y, GLint z, GLint w);") (define-entry-point glVertexStream4ivATI PFNGLVERTEXSTREAM4IVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM4IVATIPROC) (GLenum stream, const GLint *coords);") (define-entry-point glVertexStream4fATI PFNGLVERTEXSTREAM4FATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM4FATIPROC) (GLenum stream, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glVertexStream4fvATI PFNGLVERTEXSTREAM4FVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM4FVATIPROC) (GLenum stream, const GLfloat *coords);") (define-entry-point glVertexStream4dATI PFNGLVERTEXSTREAM4DATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM4DATIPROC) (GLenum stream, GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glVertexStream4dvATI PFNGLVERTEXSTREAM4DVATIPROC "typedef void (APIENTRYP PFNGLVERTEXSTREAM4DVATIPROC) (GLenum stream, const GLdouble *coords);") (define-entry-point glNormalStream3bATI PFNGLNORMALSTREAM3BATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3BATIPROC) (GLenum stream, GLbyte nx, GLbyte ny, GLbyte nz);") (define-entry-point glNormalStream3bvATI PFNGLNORMALSTREAM3BVATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3BVATIPROC) (GLenum stream, const GLbyte *coords);") (define-entry-point glNormalStream3sATI PFNGLNORMALSTREAM3SATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3SATIPROC) (GLenum stream, GLshort nx, GLshort ny, GLshort nz);") (define-entry-point glNormalStream3svATI PFNGLNORMALSTREAM3SVATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3SVATIPROC) (GLenum stream, const GLshort *coords);") (define-entry-point glNormalStream3iATI PFNGLNORMALSTREAM3IATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3IATIPROC) (GLenum stream, GLint nx, GLint ny, GLint nz);") (define-entry-point glNormalStream3ivATI PFNGLNORMALSTREAM3IVATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3IVATIPROC) (GLenum stream, const GLint *coords);") (define-entry-point glNormalStream3fATI PFNGLNORMALSTREAM3FATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3FATIPROC) (GLenum stream, GLfloat nx, GLfloat ny, GLfloat nz);") (define-entry-point glNormalStream3fvATI PFNGLNORMALSTREAM3FVATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3FVATIPROC) (GLenum stream, const GLfloat *coords);") (define-entry-point glNormalStream3dATI PFNGLNORMALSTREAM3DATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3DATIPROC) (GLenum stream, GLdouble nx, GLdouble ny, GLdouble nz);") (define-entry-point glNormalStream3dvATI PFNGLNORMALSTREAM3DVATIPROC "typedef void (APIENTRYP PFNGLNORMALSTREAM3DVATIPROC) (GLenum stream, const GLdouble *coords);") (define-entry-point glClientActiveVertexStreamATI PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC "typedef void (APIENTRYP PFNGLCLIENTACTIVEVERTEXSTREAMATIPROC) (GLenum stream);") (define-entry-point glVertexBlendEnviATI PFNGLVERTEXBLENDENVIATIPROC "typedef void (APIENTRYP PFNGLVERTEXBLENDENVIATIPROC) (GLenum pname, GLint param);") (define-entry-point glVertexBlendEnvfATI PFNGLVERTEXBLENDENVFATIPROC "typedef void (APIENTRYP PFNGLVERTEXBLENDENVFATIPROC) (GLenum pname, GLfloat param);") (define-entry-point glElementPointerATI PFNGLELEMENTPOINTERATIPROC "typedef void (APIENTRYP PFNGLELEMENTPOINTERATIPROC) (GLenum type, const GLvoid *pointer);") (define-entry-point glDrawElementArrayATI PFNGLDRAWELEMENTARRAYATIPROC "typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYATIPROC) (GLenum mode, GLsizei count);") (define-entry-point glDrawRangeElementArrayATI PFNGLDRAWRANGEELEMENTARRAYATIPROC "typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYATIPROC) (GLenum mode, GLuint start, GLuint end, GLsizei count);") (define-entry-point glDrawMeshArraysSUN PFNGLDRAWMESHARRAYSSUNPROC "typedef void (APIENTRYP PFNGLDRAWMESHARRAYSSUNPROC) (GLenum mode, GLint first, GLsizei count, GLsizei width);") (define-entry-point glGenOcclusionQueriesNV PFNGLGENOCCLUSIONQUERIESNVPROC "typedef void (APIENTRYP PFNGLGENOCCLUSIONQUERIESNVPROC) (GLsizei n, GLuint *ids);") (define-entry-point glDeleteOcclusionQueriesNV PFNGLDELETEOCCLUSIONQUERIESNVPROC "typedef void (APIENTRYP PFNGLDELETEOCCLUSIONQUERIESNVPROC) (GLsizei n, const GLuint *ids);") (define-entry-point glIsOcclusionQueryNV PFNGLISOCCLUSIONQUERYNVPROC "typedef GLboolean (APIENTRYP PFNGLISOCCLUSIONQUERYNVPROC) (GLuint id);") (define-entry-point glBeginOcclusionQueryNV PFNGLBEGINOCCLUSIONQUERYNVPROC "typedef void (APIENTRYP PFNGLBEGINOCCLUSIONQUERYNVPROC) (GLuint id);") (define-entry-point glEndOcclusionQueryNV PFNGLENDOCCLUSIONQUERYNVPROC "typedef void (APIENTRYP PFNGLENDOCCLUSIONQUERYNVPROC) (void);") (define-entry-point glGetOcclusionQueryivNV PFNGLGETOCCLUSIONQUERYIVNVPROC "typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYIVNVPROC) (GLuint id, GLenum pname, GLint *params);") (define-entry-point glGetOcclusionQueryuivNV PFNGLGETOCCLUSIONQUERYUIVNVPROC "typedef void (APIENTRYP PFNGLGETOCCLUSIONQUERYUIVNVPROC) (GLuint id, GLenum pname, GLuint *params);") (define-entry-point glPointParameteriNV PFNGLPOINTPARAMETERINVPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERINVPROC) (GLenum pname, GLint param);") (define-entry-point glPointParameterivNV PFNGLPOINTPARAMETERIVNVPROC "typedef void (APIENTRYP PFNGLPOINTPARAMETERIVNVPROC) (GLenum pname, const GLint *params);") (define-entry-point glActiveStencilFaceEXT PFNGLACTIVESTENCILFACEEXTPROC "typedef void (APIENTRYP PFNGLACTIVESTENCILFACEEXTPROC) (GLenum face);") (define-entry-point glElementPointerAPPLE PFNGLELEMENTPOINTERAPPLEPROC "typedef void (APIENTRYP PFNGLELEMENTPOINTERAPPLEPROC) (GLenum type, const GLvoid *pointer);") (define-entry-point glDrawElementArrayAPPLE PFNGLDRAWELEMENTARRAYAPPLEPROC "typedef void (APIENTRYP PFNGLDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, GLint first, GLsizei count);") (define-entry-point glDrawRangeElementArrayAPPLE PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC "typedef void (APIENTRYP PFNGLDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, GLint first, GLsizei count);") (define-entry-point glMultiDrawElementArrayAPPLE PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC "typedef void (APIENTRYP PFNGLMULTIDRAWELEMENTARRAYAPPLEPROC) (GLenum mode, const GLint *first, const GLsizei *count, GLsizei primcount);") (define-entry-point glMultiDrawRangeElementArrayAPPLE PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC "typedef void (APIENTRYP PFNGLMULTIDRAWRANGEELEMENTARRAYAPPLEPROC) (GLenum mode, GLuint start, GLuint end, const GLint *first, const GLsizei *count, GLsizei primcount);") (define-entry-point glGenFencesAPPLE PFNGLGENFENCESAPPLEPROC "typedef void (APIENTRYP PFNGLGENFENCESAPPLEPROC) (GLsizei n, GLuint *fences);") (define-entry-point glDeleteFencesAPPLE PFNGLDELETEFENCESAPPLEPROC "typedef void (APIENTRYP PFNGLDELETEFENCESAPPLEPROC) (GLsizei n, const GLuint *fences);") (define-entry-point glSetFenceAPPLE PFNGLSETFENCEAPPLEPROC "typedef void (APIENTRYP PFNGLSETFENCEAPPLEPROC) (GLuint fence);") (define-entry-point glIsFenceAPPLE PFNGLISFENCEAPPLEPROC "typedef GLboolean (APIENTRYP PFNGLISFENCEAPPLEPROC) (GLuint fence);") (define-entry-point glTestFenceAPPLE PFNGLTESTFENCEAPPLEPROC "typedef GLboolean (APIENTRYP PFNGLTESTFENCEAPPLEPROC) (GLuint fence);") (define-entry-point glFinishFenceAPPLE PFNGLFINISHFENCEAPPLEPROC "typedef void (APIENTRYP PFNGLFINISHFENCEAPPLEPROC) (GLuint fence);") (define-entry-point glTestObjectAPPLE PFNGLTESTOBJECTAPPLEPROC "typedef GLboolean (APIENTRYP PFNGLTESTOBJECTAPPLEPROC) (GLenum object, GLuint name);") (define-entry-point glFinishObjectAPPLE PFNGLFINISHOBJECTAPPLEPROC "typedef void (APIENTRYP PFNGLFINISHOBJECTAPPLEPROC) (GLenum object, GLint name);") (define-entry-point glBindVertexArrayAPPLE PFNGLBINDVERTEXARRAYAPPLEPROC "typedef void (APIENTRYP PFNGLBINDVERTEXARRAYAPPLEPROC) (GLuint array);") (define-entry-point glDeleteVertexArraysAPPLE PFNGLDELETEVERTEXARRAYSAPPLEPROC "typedef void (APIENTRYP PFNGLDELETEVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);") (define-entry-point glGenVertexArraysAPPLE PFNGLGENVERTEXARRAYSAPPLEPROC "typedef void (APIENTRYP PFNGLGENVERTEXARRAYSAPPLEPROC) (GLsizei n, const GLuint *arrays);") (define-entry-point glIsVertexArrayAPPLE PFNGLISVERTEXARRAYAPPLEPROC "typedef GLboolean (APIENTRYP PFNGLISVERTEXARRAYAPPLEPROC) (GLuint array);") (define-entry-point glVertexArrayRangeAPPLE PFNGLVERTEXARRAYRANGEAPPLEPROC "typedef void (APIENTRYP PFNGLVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);") (define-entry-point glFlushVertexArrayRangeAPPLE PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC "typedef void (APIENTRYP PFNGLFLUSHVERTEXARRAYRANGEAPPLEPROC) (GLsizei length, GLvoid *pointer);") (define-entry-point glVertexArrayParameteriAPPLE PFNGLVERTEXARRAYPARAMETERIAPPLEPROC "typedef void (APIENTRYP PFNGLVERTEXARRAYPARAMETERIAPPLEPROC) (GLenum pname, GLint param);") (define-entry-point glDrawBuffersATI PFNGLDRAWBUFFERSATIPROC "typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs);") (define-entry-point glProgramNamedParameter4fNV PFNGLPROGRAMNAMEDPARAMETER4FNVPROC "typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat x, GLfloat y, GLfloat z, GLfloat w);") (define-entry-point glProgramNamedParameter4dNV PFNGLPROGRAMNAMEDPARAMETER4DNVPROC "typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble x, GLdouble y, GLdouble z, GLdouble w);") (define-entry-point glProgramNamedParameter4fvNV PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC "typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4FVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLfloat *v);") (define-entry-point glProgramNamedParameter4dvNV PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC "typedef void (APIENTRYP PFNGLPROGRAMNAMEDPARAMETER4DVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, const GLdouble *v);") (define-entry-point glGetProgramNamedParameterfvNV PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC "typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERFVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLfloat *params);") (define-entry-point glGetProgramNamedParameterdvNV PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC "typedef void (APIENTRYP PFNGLGETPROGRAMNAMEDPARAMETERDVNVPROC) (GLuint id, GLsizei len, const GLubyte *name, GLdouble *params);") (define-entry-point glVertex2hNV PFNGLVERTEX2HNVPROC "typedef void (APIENTRYP PFNGLVERTEX2HNVPROC) (GLhalfNV x, GLhalfNV y);") (define-entry-point glVertex2hvNV PFNGLVERTEX2HVNVPROC "typedef void (APIENTRYP PFNGLVERTEX2HVNVPROC) (const GLhalfNV *v);") (define-entry-point glVertex3hNV PFNGLVERTEX3HNVPROC "typedef void (APIENTRYP PFNGLVERTEX3HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z);") (define-entry-point glVertex3hvNV PFNGLVERTEX3HVNVPROC "typedef void (APIENTRYP PFNGLVERTEX3HVNVPROC) (const GLhalfNV *v);") (define-entry-point glVertex4hNV PFNGLVERTEX4HNVPROC "typedef void (APIENTRYP PFNGLVERTEX4HNVPROC) (GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);") (define-entry-point glVertex4hvNV PFNGLVERTEX4HVNVPROC "typedef void (APIENTRYP PFNGLVERTEX4HVNVPROC) (const GLhalfNV *v);") (define-entry-point glNormal3hNV PFNGLNORMAL3HNVPROC "typedef void (APIENTRYP PFNGLNORMAL3HNVPROC) (GLhalfNV nx, GLhalfNV ny, GLhalfNV nz);") (define-entry-point glNormal3hvNV PFNGLNORMAL3HVNVPROC "typedef void (APIENTRYP PFNGLNORMAL3HVNVPROC) (const GLhalfNV *v);") (define-entry-point glColor3hNV PFNGLCOLOR3HNVPROC "typedef void (APIENTRYP PFNGLCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);") (define-entry-point glColor3hvNV PFNGLCOLOR3HVNVPROC "typedef void (APIENTRYP PFNGLCOLOR3HVNVPROC) (const GLhalfNV *v);") (define-entry-point glColor4hNV PFNGLCOLOR4HNVPROC "typedef void (APIENTRYP PFNGLCOLOR4HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue, GLhalfNV alpha);") (define-entry-point glColor4hvNV PFNGLCOLOR4HVNVPROC "typedef void (APIENTRYP PFNGLCOLOR4HVNVPROC) (const GLhalfNV *v);") (define-entry-point glTexCoord1hNV PFNGLTEXCOORD1HNVPROC "typedef void (APIENTRYP PFNGLTEXCOORD1HNVPROC) (GLhalfNV s);") (define-entry-point glTexCoord1hvNV PFNGLTEXCOORD1HVNVPROC "typedef void (APIENTRYP PFNGLTEXCOORD1HVNVPROC) (const GLhalfNV *v);") (define-entry-point glTexCoord2hNV PFNGLTEXCOORD2HNVPROC "typedef void (APIENTRYP PFNGLTEXCOORD2HNVPROC) (GLhalfNV s, GLhalfNV t);") (define-entry-point glTexCoord2hvNV PFNGLTEXCOORD2HVNVPROC "typedef void (APIENTRYP PFNGLTEXCOORD2HVNVPROC) (const GLhalfNV *v);") (define-entry-point glTexCoord3hNV PFNGLTEXCOORD3HNVPROC "typedef void (APIENTRYP PFNGLTEXCOORD3HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r);") (define-entry-point glTexCoord3hvNV PFNGLTEXCOORD3HVNVPROC "typedef void (APIENTRYP PFNGLTEXCOORD3HVNVPROC) (const GLhalfNV *v);") (define-entry-point glTexCoord4hNV PFNGLTEXCOORD4HNVPROC "typedef void (APIENTRYP PFNGLTEXCOORD4HNVPROC) (GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);") (define-entry-point glTexCoord4hvNV PFNGLTEXCOORD4HVNVPROC "typedef void (APIENTRYP PFNGLTEXCOORD4HVNVPROC) (const GLhalfNV *v);") (define-entry-point glMultiTexCoord1hNV PFNGLMULTITEXCOORD1HNVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1HNVPROC) (GLenum target, GLhalfNV s);") (define-entry-point glMultiTexCoord1hvNV PFNGLMULTITEXCOORD1HVNVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD1HVNVPROC) (GLenum target, const GLhalfNV *v);") (define-entry-point glMultiTexCoord2hNV PFNGLMULTITEXCOORD2HNVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t);") (define-entry-point glMultiTexCoord2hvNV PFNGLMULTITEXCOORD2HVNVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD2HVNVPROC) (GLenum target, const GLhalfNV *v);") (define-entry-point glMultiTexCoord3hNV PFNGLMULTITEXCOORD3HNVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r);") (define-entry-point glMultiTexCoord3hvNV PFNGLMULTITEXCOORD3HVNVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD3HVNVPROC) (GLenum target, const GLhalfNV *v);") (define-entry-point glMultiTexCoord4hNV PFNGLMULTITEXCOORD4HNVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4HNVPROC) (GLenum target, GLhalfNV s, GLhalfNV t, GLhalfNV r, GLhalfNV q);") (define-entry-point glMultiTexCoord4hvNV PFNGLMULTITEXCOORD4HVNVPROC "typedef void (APIENTRYP PFNGLMULTITEXCOORD4HVNVPROC) (GLenum target, const GLhalfNV *v);") (define-entry-point glFogCoordhNV PFNGLFOGCOORDHNVPROC "typedef void (APIENTRYP PFNGLFOGCOORDHNVPROC) (GLhalfNV fog);") (define-entry-point glFogCoordhvNV PFNGLFOGCOORDHVNVPROC "typedef void (APIENTRYP PFNGLFOGCOORDHVNVPROC) (const GLhalfNV *fog);") (define-entry-point glSecondaryColor3hNV PFNGLSECONDARYCOLOR3HNVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HNVPROC) (GLhalfNV red, GLhalfNV green, GLhalfNV blue);") (define-entry-point glSecondaryColor3hvNV PFNGLSECONDARYCOLOR3HVNVPROC "typedef void (APIENTRYP PFNGLSECONDARYCOLOR3HVNVPROC) (const GLhalfNV *v);") (define-entry-point glVertexWeighthNV PFNGLVERTEXWEIGHTHNVPROC "typedef void (APIENTRYP PFNGLVERTEXWEIGHTHNVPROC) (GLhalfNV weight);") (define-entry-point glVertexWeighthvNV PFNGLVERTEXWEIGHTHVNVPROC "typedef void (APIENTRYP PFNGLVERTEXWEIGHTHVNVPROC) (const GLhalfNV *weight);") (define-entry-point glVertexAttrib1hNV PFNGLVERTEXATTRIB1HNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1HNVPROC) (GLuint index, GLhalfNV x);") (define-entry-point glVertexAttrib1hvNV PFNGLVERTEXATTRIB1HVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB1HVNVPROC) (GLuint index, const GLhalfNV *v);") (define-entry-point glVertexAttrib2hNV PFNGLVERTEXATTRIB2HNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y);") (define-entry-point glVertexAttrib2hvNV PFNGLVERTEXATTRIB2HVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB2HVNVPROC) (GLuint index, const GLhalfNV *v);") (define-entry-point glVertexAttrib3hNV PFNGLVERTEXATTRIB3HNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z);") (define-entry-point glVertexAttrib3hvNV PFNGLVERTEXATTRIB3HVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB3HVNVPROC) (GLuint index, const GLhalfNV *v);") (define-entry-point glVertexAttrib4hNV PFNGLVERTEXATTRIB4HNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4HNVPROC) (GLuint index, GLhalfNV x, GLhalfNV y, GLhalfNV z, GLhalfNV w);") (define-entry-point glVertexAttrib4hvNV PFNGLVERTEXATTRIB4HVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIB4HVNVPROC) (GLuint index, const GLhalfNV *v);") (define-entry-point glVertexAttribs1hvNV PFNGLVERTEXATTRIBS1HVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS1HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);") (define-entry-point glVertexAttribs2hvNV PFNGLVERTEXATTRIBS2HVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS2HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);") (define-entry-point glVertexAttribs3hvNV PFNGLVERTEXATTRIBS3HVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS3HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);") (define-entry-point glVertexAttribs4hvNV PFNGLVERTEXATTRIBS4HVNVPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBS4HVNVPROC) (GLuint index, GLsizei n, const GLhalfNV *v);") (define-entry-point glPixelDataRangeNV PFNGLPIXELDATARANGENVPROC "typedef void (APIENTRYP PFNGLPIXELDATARANGENVPROC) (GLenum target, GLsizei length, GLvoid *pointer);") (define-entry-point glFlushPixelDataRangeNV PFNGLFLUSHPIXELDATARANGENVPROC "typedef void (APIENTRYP PFNGLFLUSHPIXELDATARANGENVPROC) (GLenum target);") (define-entry-point glPrimitiveRestartNV PFNGLPRIMITIVERESTARTNVPROC "typedef void (APIENTRYP PFNGLPRIMITIVERESTARTNVPROC) (void);") (define-entry-point glPrimitiveRestartIndexNV PFNGLPRIMITIVERESTARTINDEXNVPROC "typedef void (APIENTRYP PFNGLPRIMITIVERESTARTINDEXNVPROC) (GLuint index);") (define-entry-point glMapObjectBufferATI PFNGLMAPOBJECTBUFFERATIPROC "typedef GLvoid* (APIENTRYP PFNGLMAPOBJECTBUFFERATIPROC) (GLuint buffer);") (define-entry-point glUnmapObjectBufferATI PFNGLUNMAPOBJECTBUFFERATIPROC "typedef void (APIENTRYP PFNGLUNMAPOBJECTBUFFERATIPROC) (GLuint buffer);") (define-entry-point glStencilOpSeparateATI PFNGLSTENCILOPSEPARATEATIPROC "typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEATIPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass);") (define-entry-point glStencilFuncSeparateATI PFNGLSTENCILFUNCSEPARATEATIPROC "typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEATIPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask);") (define-entry-point glVertexAttribArrayObjectATI PFNGLVERTEXATTRIBARRAYOBJECTATIPROC "typedef void (APIENTRYP PFNGLVERTEXATTRIBARRAYOBJECTATIPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, GLuint buffer, GLuint offset);") (define-entry-point glGetVertexAttribArrayObjectfvATI PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, GLenum pname, GLfloat *params);") (define-entry-point glGetVertexAttribArrayObjectivATI PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC "typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params);") (define-entry-point glDepthBoundsEXT PFNGLDEPTHBOUNDSEXTPROC "typedef void (APIENTRYP PFNGLDEPTHBOUNDSEXTPROC) (GLclampd zmin, GLclampd zmax);") (define-entry-point glBlendEquationSeparateEXT PFNGLBLENDEQUATIONSEPARATEEXTPROC "typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLenum modeAlpha);") (define-entry-point glIsRenderbufferEXT PFNGLISRENDERBUFFEREXTPROC "typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer);") (define-entry-point glBindRenderbufferEXT PFNGLBINDRENDERBUFFEREXTPROC "typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer);") (define-entry-point glDeleteRenderbuffersEXT PFNGLDELETERENDERBUFFERSEXTPROC "typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers);") (define-entry-point glGenRenderbuffersEXT PFNGLGENRENDERBUFFERSEXTPROC "typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers);") (define-entry-point glRenderbufferStorageEXT PFNGLRENDERBUFFERSTORAGEEXTPROC "typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height);") (define-entry-point glGetRenderbufferParameterivEXT PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC "typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params);") (define-entry-point glIsFramebufferEXT PFNGLISFRAMEBUFFEREXTPROC "typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer);") (define-entry-point glBindFramebufferEXT PFNGLBINDFRAMEBUFFEREXTPROC "typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer);") (define-entry-point glDeleteFramebuffersEXT PFNGLDELETEFRAMEBUFFERSEXTPROC "typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers);") (define-entry-point glGenFramebuffersEXT PFNGLGENFRAMEBUFFERSEXTPROC "typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers);") (define-entry-point glCheckFramebufferStatusEXT PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC "typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target);") (define-entry-point glFramebufferTexture1DEXT PFNGLFRAMEBUFFERTEXTURE1DEXTPROC "typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);") (define-entry-point glFramebufferTexture2DEXT PFNGLFRAMEBUFFERTEXTURE2DEXTPROC "typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level);") (define-entry-point glFramebufferTexture3DEXT PFNGLFRAMEBUFFERTEXTURE3DEXTPROC "typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset);") (define-entry-point glFramebufferRenderbufferEXT PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC "typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer);") (define-entry-point glGetFramebufferAttachmentParameterivEXT PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC "typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params);") (define-entry-point glGenerateMipmapEXT PFNGLGENERATEMIPMAPEXTPROC "typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target);") (define-entry-point glStringMarkerGREMEDY PFNGLSTRINGMARKERGREMEDYPROC "typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string);") ����������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/glstate.scm���������������������������������������������������������������������0000755�0000764�0000764�00000053111�11533026402�015311� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /usr/bin/env gosh ;;; ;;; glstate.scm - state variable table ;;; ;;; Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: glstate.scm,v 1.8 2008-06-04 11:50:56 shirok Exp $ ;;; ;; ;; Generate several C source code that includes information about ;; dimensions of state variables ;; (use srfi-13) (use gauche.parseopt) ;; Data ;; (name dimension type [version ...]) ;; type: 'getf - available via glGetFloatv ;; 'geti - available via glGetIntegerv ;; 'getb - available via glGetBooleanv ;; 'texp - available via glGetTextureParameter ;; 'texl - available via glGetTexLevelParameter ;; 'texe - available via glGetTexEnv ;; 'texg - available via glGetTexGen ;; 'colp - available via glGetColroTableParameter ;; 'conp - available via glGetConvolutionParameter ;; 'hisp - available via glGetHistogramParameter ;; #f - others ;; version: (none) - OpenGL v1.1 and v1.2 ;; 'v1.1 - OpenGL v1.1 only ;; 'v1.2 - OpenGL v1.2 only ;; 'no-cygwin - Cygwin OpenGL (1.1.0-6) doesn't have this symbol ;; Source of this list is the table is the Appendix B: State Variables ;; of OpenGL Programming Guide. (define *state* '(;; Current Values and Associated Data (gl_current_color 4 getf) (gl_current_index 1 geti) (gl_current_texture_coords 4 getf) (gl_current_normal 3 getf) (gl_current_raster_position 4 getf) (gl_current_raster_distance 1 getf) (gl_current_raster_color 4 getf) (gl_current_raster_index 1 geti) (gl_current_raster_texture_coords 4 getf) (gl_current_raster_position_valid 1 getb) (gl_edge_flag 1 getb) ;; Vertex Array (gl_vertex_array 1 getb) (gl_vertex_array_size 1 geti) (gl_vertex_array_type 1 geti) (gl_vertex_array_stride 1 geti) (gl_vertex_array_pointer #f getp) (gl_normal_array 1 getb) (gl_normal_array_type 1 geti) (gl_normal_array_stride 1 geti) (gl_normal_array_pointer #f getp) (gl_color_array 1 getb) (gl_color_array_size 1 geti) (gl_color_array_type 1 geti) (gl_color_array_stride 1 geti) (gl_color_array_pointer #f getp) (gl_index_array 1 getb) (gl_index_array_type 1 geti) (gl_index_array_stride 1 geti) (gl_index_array_pointer #f getp) (gl_texture_coord_array 1 getb) (gl_texture_coord_array_size 1 geti) (gl_texture_coord_array_type 1 geti) (gl_texture_coord_array_stride 1 geti) (gl_texture_coord_array_pointer #f getp) (gl_edge_flag_array 1 getb) (gl_edge_flag_array_stride 1 geti) (gl_edge_flag_array_pointer 1 getp) (gl_client_active_texture_arb 1 geti) ;; Transformation (gl_color_matrix 16 getf) (gl_modelview_matrix 16 getf) (gl_projection_matrix 16 getf) (gl_texture_matrix 16 getf) (gl_viewport 4 geti) (gl_depth_range 2 getf) ;(gl_color_stack_depth 1 geti v1.2) ; Mesa missing this (gl_modelview_stack_depth 1 geti) (gl_projection_stack_depth 1 geti) (gl_texture_stack_depth 1 geti) (gl_matrix_mode 1 geti) (gl_normalize 1 getb) (gl_rescale_normal 1 getb) (gl_clip_plane0 1 getb) (gl_clip_plane1 1 getb) (gl_clip_plane2 1 getb) (gl_clip_plane3 1 getb) (gl_clip_plane4 1 getb) (gl_clip_plane5 1 getb) ;; Coloring (gl_fog_color 4 getf) (gl_fog_index 1 getf) (gl_fog_density 1 getf) (gl_fog_start 1 getf) (gl_fog_end 1 getf) (gl_fog_mode 1 geti) (gl_fog 1 getb) (gl_shade_model 1 geti) ;; Lighting (gl_lighting 1 getb) (gl_color_material 1 getb) (gl_color_material_parameter 1 geti) (gl_color_material_face 1 geti) (gl_light_model_ambient 4 getf) (gl_light_model_local_viewer 1 getb) (gl_light_model_two_side 1 getb) (gl_light_model_color_control 1 geti) (gl_light0 1 getb) (gl_light1 1 getb) (gl_light2 1 getb) (gl_light3 1 getb) (gl_light4 1 getb) (gl_light5 1 getb) (gl_light6 1 getb) (gl_light7 1 getb) ;; Rasterization (gl_point_size 1 getf) (gl_point_smooth 1 getb) (gl_line_width 1 getf) (gl_line_smooth 1 getb) (gl_line_stipple_pattern 1 geti) (gl_line_stipple_repeat 1 geti) (gl_line_stipple 1 getb) (gl_cull_face 1 getb) (gl_cull_face_mode 1 geti) (gl_front_face 1 geti) (gl_polygon_smooth 1 getb) (gl_polygon_mode 1 geti) (gl_polygon_offset_factor 1 getf) (gl_polygon_offset_bias_ext 1 getf) (gl_polygon_offset_point 1 getb) (gl_polygon_offset_line 1 getb) (gl_polygon_offset_fill 1 getb) (gl_polygon_stipple 1 getb) ;; Texturing (gl_texture_1d 1 getb) (gl_texture_2d 1 getb) (gl_texture_3d 1 getb) (gl_texture_binding_1d 1 geti) (gl_texture_binding_2d 1 geti) (gl_texture_binding_3d 1 geti) (gl_texture_width 1 texl) (gl_texture_height 1 texl) (gl_texture_depth 1 texl) (gl_texture_border 1 texl) (gl_texture_internal_format 1 texl) (gl_texture_red_size 1 texl) (gl_texture_green_size 1 texl) (gl_texture_blue_size 1 texl) (gl_texture_alpha_size 1 texl) (gl_texture_luminance_size 1 texl) (gl_texture_intensity_size 1 texl) (gl_texture_border_color 4 texp) (gl_texture_min_filter 1 texp) (gl_texture_mag_filter 1 texp) (gl_texture_wrap_s 1 texp) (gl_texture_wrap_t 1 texp) (gl_texture_wrap_u 1 texp) (gl_texture_priority 1 texp) (gl_texture_resident 1 texp) (gl_texture_min_lod 1 texp) (gl_texture_max_lod 1 texp) (gl_texture_base_level 1 texp) (gl_texture_max_level 1 texp) (gl_texture_env_mode 1 texe) (gl_texture_env_color 4 texe) (gl_texture_gen_s 1 getb) (gl_texture_gen_t 1 getb) (gl_texture_gen_r 1 getb) (gl_texture_gen_q 1 getb) (gl_eye_plane 4 texg) (gl_object_plane 4 texg) (gl_texture_gen_mode 1 texg) (gl_active_texture 1 geti) ;; Pixel Operations (gl_scissor_test 1 getb) (gl_scissor_box 4 geti) (gl_alpha_test 1 getb) (gl_alpha_test_func 1 geti) (gl_stencil_test 1 getb) (gl_stencil_func 1 geti) (gl_stencil_value_mask 1 geti) (gl_stencil_ref 1 geti) (gl_stencil_fail 1 geti) (gl_stencil_pass_depth_fail 1 geti) (gl_stencil_pass_depth_pass 1 geti) (gl_depth_test 1 getb) (gl_depth_func 1 geti) (gl_blend 1 getb) (gl_blend_src 1 geti) (gl_blend_dst 1 geti) (gl_blend_equation 1 geti) (gl_blend_color 4 getf) (gl_dither 1 getb) (gl_index_logic_op 1 getb) (gl_color_logic_op 1 getb) (gl_logic_op_mode 1 geti) ;; Framebuffer Control (gl_draw_buffer 1 geti) (gl_index_writemask 1 geti) (gl_color_writemask 4 getb) (gl_depth_writemask 1 getb) (gl_stencil_writemask 1 geti) (gl_color_clear_value 4 getf) (gl_index_clear_value 1 getf) (gl_depth_clear_value 1 geti) (gl_stencil_clear_value 1 geti) (gl_accum_clear_value 1 getf) ;; Pixels (gl_unpack_swap_bytes 1 getb) (gl_unpack_lsb_first 1 getb) (gl_unpack_image_height 1 geti) (gl_unpack_skip_images 1 geti) (gl_unpack_row_length 1 geti) (gl_unpack_skip_rows 1 geti) (gl_unpack_skip_pixels 1 geti) (gl_unpack_alignment 1 geti) (gl_pack_swap_bytes 1 getb) (gl_pack_lsb_first 1 getb) (gl_pack_image_height 1 geti) (gl_pack_skip_images 1 geti) (gl_pack_row_length 1 geti) (gl_pack_skip_rows 1 geti) (gl_pack_skip_pixels 1 geti) (gl_pack_alignment 1 geti) (gl_map_color 1 getb) (gl_map_stencil 1 getb) (gl_index_shift 1 geti) (gl_index_offset 1 geti) (gl_red_scale 1 getf) (gl_green_scale 1 getf) (gl_blue_scale 1 getf) (gl_alpha_scale 1 getf) (gl_depth_scale 1 getf) (gl_red_bias 1 getf) (gl_green_bias 1 getf) (gl_blue_bias 1 getf) (gl_alpha_bias 1 getf) (gl_depth_bias 1 getf) (gl_color_table 1 getb) (gl_post_convolution_color_table 1 getb) (gl_post_color_matrix_color_table 1 getb) (gl_color_table_format 1 colp) (gl_color_table_width 1 colp) (gl_color_table_red_size 1 colp) (gl_color_table_green_size 1 colp) (gl_color_table_blue_size 1 colp) (gl_color_table_alpha_size 1 colp) (gl_color_table_luminance_size 1 colp) (gl_color_table_intensity_size 1 colp) (gl_color_table_scale 4 colp) (gl_color_table_bias 4 colp) (gl_convolution_1d 1 getb) (gl_convolution_2d 1 getb) (gl_separable_2d 1 getb) (gl_convolution_border_color 4 conp) (gl_convolution_border_mode 1 conp) (gl_convolution_filter_scale 4 conp) (gl_convolution_filter_bias 4 conp) (gl_convolution_format 1 conp) (gl_convolution_width 1 conp) (gl_convolution_height 1 conp) (gl_post_convolution_red_scale 1 conp) (gl_post_convolution_green_scale 1 conp) (gl_post_convolution_blue_scale 1 conp) (gl_post_convolution_alpha_scale 1 conp) (gl_post_convolution_red_bias 1 conp) (gl_post_convolution_green_bias 1 conp) (gl_post_convolution_blue_bias 1 conp) (gl_post_convolution_alpha_bias 1 conp) (gl_post_color_matrix_red_scale 1 conp) (gl_post_color_matrix_green_scale 1 conp) (gl_post_color_matrix_blue_scale 1 conp) (gl_post_color_matrix_alpha_scale 1 conp) (gl_post_color_matrix_red_bias 1 conp) (gl_post_color_matrix_green_bias 1 conp) (gl_post_color_matrix_blue_bias 1 conp) (gl_post_color_matrix_alpha_bias 1 conp) (gl_histogram 1 getb) (gl_histogram_width 1 hisp) (gl_histogram_format 1 hisp) (gl_histogram_red_size 1 hisp) (gl_histogram_green_size 1 hisp) (gl_histogram_blue_size 1 hisp) (gl_histogram_alpha_size 1 hisp) (gl_histogram_luminance_size 1 hisp) (gl_histogram_sink 1 hisp) (gl_minmax 1 getb) (gl_zoom_x 1 getf) (gl_zoom_y 1 getf) (gl_pixel_map_i_to_i_size 1 geti) (gl_pixel_map_s_to_s_size 1 geti) (gl_pixel_map_i_to_r_size 1 geti) (gl_pixel_map_i_to_g_size 1 geti) (gl_pixel_map_i_to_b_size 1 geti) (gl_pixel_map_i_to_a_size 1 geti) (gl_pixel_map_r_to_r_size 1 geti) (gl_pixel_map_g_to_g_size 1 geti) (gl_pixel_map_b_to_b_size 1 geti) (gl_pixel_map_a_to_a_size 1 geti) (gl_read_buffer 1 geti) ;; Evaluators (gl_map1_vertex_3 1 getb) (gl_map1_vertex_4 1 getb) (gl_map1_index 1 getb) (gl_map1_color_4 1 getb) (gl_map1_normal 1 getb) (gl_map1_texture_coord_1 1 getb) (gl_map1_texture_coord_2 1 getb) (gl_map1_texture_coord_3 1 getb) (gl_map1_texture_coord_4 1 getb) (gl_map2_vertex_3 1 getb) (gl_map2_vertex_4 1 getb) (gl_map2_index 1 getb) (gl_map2_color_4 1 getb) (gl_map2_normal 1 getb) (gl_map2_texture_coord_1 1 getb) (gl_map2_texture_coord_2 1 getb) (gl_map2_texture_coord_3 1 getb) (gl_map2_texture_coord_4 1 getb) (gl_map1_grid_domain 2 getf) (gl_map2_grid_domain 4 getf) (gl_map1_grid_segments 1 getf) (gl_map2_grid_segments 2 getf) (gl_auto_normal 1 getb) ;; Hints (gl_perspective_correction_hint 1 geti) (gl_point_smooth_hint 1 geti) (gl_line_smooth_hint 1 geti) (gl_polygon_smooth_hint 1 geti) (gl_fog_hint 1 geti) ;; Implementation-Dependent Values (gl_max_lights 1 geti) (gl_max_clip_planes 1 geti) (gl_max_modelview_stack_depth 1 geti) (gl_max_projection_stack_depth 1 geti) (gl_max_texture_stack_depth 1 geti) (gl_subpixel_bits 1 geti) (gl_max_3d_texture_size 1 geti) (gl_max_texture_size 1 geti) (gl_max_pixel_map_table 1 geti) (gl_max_name_stack_depth 1 geti) (gl_max_list_nesting 1 geti) (gl_max_eval_order 1 geti) (gl_max_viewport_dims 1 geti) (gl_max_attrib_stack_depth 1 geti) (gl_max_client_attrib_stack_depth 1 geti) (gl_aux_buffers 1 geti) (gl_rgba_mode 1 getb) (gl_indeX_mode 1 getb) (gl_doublebuffer 1 getb) (gl_stereo 1 getb) (gl_point_size_range 2 getf) (gl_point_size_granularity 1 getf) (gl_aliased_point_size_range 2 getf) ;(gl_smooth_point_size_range 2 getf) ;; same as point_size_range ;(gl_smooth_point_size_granularity 1 getf) ;; same as point_size_granularity (gl_aliased_line_width_range 2 getf) (gl_smooth_line_width_range 2 getf) (gl_smooth_line_width_granularity 1 getf) (gl_max_convolution_width 1 conp) (gl_max_convolution_height 1 conp) (gl_max_elements_indices 1 geti) (gl_max_elements_vertices 1 geti) (gl_max_texture_units_arb 1 geti) ;; Implementation-Dependent Pixel Depths (gl_red_bits 1 geti) (gl_green_bits 1 geti) (gl_blue_bits 1 geti) (gl_alpha_bits 1 geti) (gl_index_bits 1 geti) (gl_depth_bits 1 geti) (gl_stencil_bits 1 geti) (gl_accum_red_bits 1 geti) (gl_accum_green_bits 1 geti) (gl_accum_blue_bits 1 geti) (gl_accum_alpha_bits 1 geti) ;; Miscellaneous (gl_list_base 1 geti) (gl_list_index 1 geti) (gl_list_mode 1 geti) (gl_attrib_stack_depth 1 geti) (gl_client_attrib_stack_depth 1 geti) (gl_name_stack_depth 1 geti) (gl_render_mode 1 geti) (gl_selection_buffer_pointer 1 getp) (gl_selection_buffer_size 1 geti) (gl_feedback_buffer_pointer 1 getp) (gl_feedback_buffer_size 1 geti) (gl_feedback_buffer_type 1 geti) ) ) ;; generate case statements for size of values of getTYPEv calls (define (gen-getTYPEv-size-table) (let ((tab '())) (for-each (lambda (e) (when (memq (caddr e) '(geti getf getb)) (cond ((assv (cadr e) tab) => (lambda (p) (push! (cdr p) e))) (else (push! tab (list (cadr e) e)))))) *state*) (for-each (lambda (n) (for-each (lambda (e) (gen-case-label (string-upcase (symbol->string (car e))) (cdddr e))) (reverse (cdr n))) (print #`" return ,(car n);")) (reverse tab)))) ;; output case label, optionally wrapping by #if-#endif (define (gen-case-label name versions) (if (null? versions) (print #`" case ,|name|:;") (let ((condition (case (car versions) ((v1.1) "defined(GL_VERSION_1_1) && !defined(GL_VERSION_1_2)") ((v1.2) "defined(GL_VERSION_1_2)") ((no-cygwin) "!defined(__CYGWIN__)") (else (error "unknown version identifier:" (car versions)))))) (print #`"#if ,condition") (gen-case-label name (cdr versions)) (print "#endif")))) ;;----------------------------- (define *outfile* #f) (define (usage) (format (current-error-port) "Usage: gosh glstate.scm -- [-o outfile] function\n") (format (current-error-port) " possible function : gettype\n") (exit 1)) (define (main args) (let ((arg (parse-options (cdr args) (("o=s" (file) (set! *outfile* file)) (else _ (usage)))))) (unless (= (length arg) 1) (usage)) (if *outfile* (with-output-to-file *outfile* (lambda () (dispatch (car arg)))) (dispatch (car arg)))) 0) (define (dispatch function) (cond ((equal? function "gettype") (gen-getTYPEv-size-table)) (else (usage)))) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/test.scm������������������������������������������������������������������������0000644�0000764�0000764�00000001773�11533026402�014631� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; test for gl module ;; Note: this only tests if the gl and glut module is loadable or not, ;; and some basic tests. (use gauche.test) (use gauche.sequence) (add-load-path "../lib") (test-start "GL") (test-section "loading gl") (use gl) (test-section "loading glut") (use gl.glut) (test-section "gl-boolean-vector") (test* "constructor, predicate and length" (list #t 5) (let ((v (make-gl-boolean-vector 5))) (list (gl-boolean-vector? v) (gl-boolean-vector-length v)))) (test* "ref" '(#t #f #f #t) (let ((v (gl-boolean-vector #t #f #f #t))) (list (ref v 0) (ref v 1) (ref v 2) (ref v 3)))) (test* "set!" '(#t #f #f) (let ((v (make-gl-boolean-vector 3))) (set! (ref v 0) #t) (set! (ref v 1) #f) (set! (ref v 2) #f) (coerce-to <list> v))) (test* "coercion & reader" #,(gl-boolean-vector #f #t #f #f #t) (coerce-to <gl-boolean-vector> '(#f #t #f #f #t))) (test-end) �����Gauche-gl-0.5.1/src/glu-lib.stub��������������������������������������������������������������������0000644�0000764�0000764�00000047022�11533026402�015375� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; glu-lib.stub - glue functions for GLU ;;; ;;; Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: glu-lib.stub,v 1.14 2008-06-04 11:51:00 shirok Exp $ ;;; " #if MacOSX #include <OpenGL/gl.h> #include <OpenGL/glu.h> #else #include <GL/gl.h> #include <GL/glu.h> #endif #include <gauche/uvector.h> #include \"gauche-gl.h\" " (define-type <uvector> "ScmUVector*" "uniform vector" "SCM_UVECTORP" "SCM_UVECTOR") ;;================================================================ ;; Miscellaneous ;; (define-cproc glu-look-at (eyex::<real> eyey::<real> eyez::<real> ctrx::<real> ctry::<real> ctrz::<real> upx::<real> upy::<real> upz::<real>) (call <void> "gluLookAt")) (define-cproc glu-ortho-2d (left::<real> right::<real> bottom::<real> top::<real>) (call <void> "gluOrtho2D")) (define-cproc glu-perspective (fovy::<real> aspect::<real> znear::<real> zfar::<real>) (call <void> "gluPerspective")) (define-cproc glu-pick-matrix (x::<real> y::<real> w::<real> h::<real> vp) "if (!SCM_S32VECTORP(vp) || SCM_S32VECTOR_SIZE(vp) != 4) { Scm_Error(\"s32 vector of size 4 required for vp, but got %S\", vp); } gluPickMatrix((GLdouble)x, (GLdouble)y, (GLdouble)w, (GLdouble)h, (GLint*)SCM_S32VECTOR_ELEMENTS(vp)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-error-string (code::<int>) " const GLubyte *s = gluErrorString(code); if (s) SCM_RETURN(Scm_MakeString((const char *)s, -1, -1, 0)); else SCM_RETURN(SCM_FALSE);") ;; common routine for glu-project and glu-un-project "static ScmObj glu_xproject(double srcx, double srcy, double srcz, ScmObj model_mat, ScmObj proj_mat, ScmObj vp, GLint (*fn)(GLdouble, GLdouble, GLdouble, const GLdouble*, const GLdouble*, const GLint*, GLdouble*, GLdouble*, GLdouble*)) { int r; GLdouble dstx, dsty, dstz; if (!SCM_F64VECTORP(model_mat) || SCM_F64VECTOR_SIZE(model_mat) != 16) { Scm_Error(\"f64 vector of size 16 required for model-mat, but got %S\", model_mat); } if (!SCM_F64VECTORP(proj_mat) || SCM_F64VECTOR_SIZE(proj_mat) != 16) { Scm_Error(\"f64 vector of size 16 required for proj-mat, but got %S\", proj_mat); } if (!SCM_S32VECTORP(vp) || SCM_S32VECTOR_SIZE(vp) != 4) { Scm_Error(\"s32 vector of size 4 required for vp, but got %S\", vp); } r = fn(srcx, srcy, srcz, SCM_F64VECTOR_ELEMENTS(model_mat), SCM_F64VECTOR_ELEMENTS(proj_mat), (GLint*)SCM_S32VECTOR_ELEMENTS(vp), &dstx, &dsty, &dstz); if (r == GL_TRUE) { SCM_RETURN(Scm_Values3(Scm_MakeFlonum(dstx), Scm_MakeFlonum(dsty), Scm_MakeFlonum(dstz))); } else { SCM_RETURN(Scm_Values3(SCM_FALSE, SCM_FALSE, SCM_FALSE)); } }" (define-cproc glu-project (objx::<real> objy::<real> objz::<real> model-mat proj-mat vp) "SCM_RETURN(glu_xproject(objx, objy, objz, model_mat, proj_mat, vp, gluProject));") (define-cproc glu-un-project (winx::<real> winy::<real> winz::<real> model-mat proj-mat vp) "SCM_RETURN(glu_xproject(winx, winy, winz, model_mat, proj_mat, vp, gluUnProject));") ;; common routine for glu-project! and glu-un-project! "static ScmObj glu_xprojectX(ScmObj dst, ScmObj src, ScmObj model_mat, ScmObj proj_mat, ScmObj vp, GLint (*fn)(GLdouble, GLdouble, GLdouble, const GLdouble*, const GLdouble*, const GLint*, GLdouble*, GLdouble*, GLdouble*)) { int r; float *dstfp = NULL, *srcfp = NULL; double *dstdp = NULL, *srcdp = NULL; GLdouble dstx, dsty, dstz; if (SCM_F64VECTORP(dst) && SCM_F64VECTOR_SIZE(dst) == 4) { dstdp = SCM_F64VECTOR_ELEMENTS(dst); } else { SCM_MATH3D_X4FP(dstfp, dst); } if (SCM_F64VECTORP(src) && SCM_F64VECTOR_SIZE(src) == 4) { srcdp = SCM_F64VECTOR_ELEMENTS(src); } else { SCM_MATH3D_X4FP(srcfp, src); } if (!SCM_F64VECTORP(model_mat) || SCM_F64VECTOR_SIZE(model_mat) != 16) { Scm_Error(\"f64 vector of size 16 required for model-mat, but got %S\", model_mat); } if (!SCM_F64VECTORP(proj_mat) || SCM_F64VECTOR_SIZE(proj_mat) != 16) { Scm_Error(\"f64 vector of size 16 required for proj-mat, but got %S\", proj_mat); } if (!SCM_S32VECTORP(vp) || SCM_S32VECTOR_SIZE(vp) != 4) { Scm_Error(\"s32 vector of size 4 required for vp, but got %S\", vp); } if (srcfp) { r = fn((GLdouble)srcfp[0], (GLdouble)srcfp[1], (GLdouble)srcfp[2], SCM_F64VECTOR_ELEMENTS(model_mat), SCM_F64VECTOR_ELEMENTS(proj_mat), (GLint*)SCM_S32VECTOR_ELEMENTS(vp), &dstx, &dsty, &dstz); } else { r = fn((GLdouble)srcdp[0], (GLdouble)srcdp[1], (GLdouble)srcdp[2], SCM_F64VECTOR_ELEMENTS(model_mat), SCM_F64VECTOR_ELEMENTS(proj_mat), (GLint*)SCM_S32VECTOR_ELEMENTS(vp), &dstx, &dsty, &dstz); } if (r == GL_TRUE) { if (dstfp) { dstfp[0] = (float)dstx, dstfp[1] = (float)dsty, dstfp[2] = (float)dstz; } else { dstdp[0] = dstx, dstdp[1] = dsty, dstdp[2] = dstz; } SCM_RETURN(SCM_OBJ(dst)); } else { SCM_RETURN(SCM_FALSE); } }" (define-cproc glu-project! (win obj model-mat proj-mat vp) "SCM_RETURN(glu_xprojectX(win, obj, model_mat, proj_mat, vp, gluProject));") (define-cproc glu-un-project! (obj win model-mat proj-mat vp) "SCM_RETURN(glu_xprojectX(obj, win, model_mat, proj_mat, vp, gluUnProject));") ;;============================================================= ;; Mipmapping and image scaling ;; ;(define-cproc glu-scale-image! (format::<fixnum> ; width-in::<fixnum> height-in::<fixnum> ; type-in::<fixnum> data-in::<uvector> ; width-out::<fixnum> height-out::<fixnum> ; type-out::<fixnum> data-out::<uvector>) ;;============================================================= ;; Quadrics ;; (define-type <glu-quadric> "ScmGluQuadric*" #f "SCM_GLU_QUADRIC_P" "SCM_GLU_QUADRIC") ;; gluNewQuadric : (make <glu-quadric>) ;; gluDeleteQuadric : GC takes care of this (define-cproc glu-quadric-draw-style (quad::<glu-quadric> style::<fixnum>) "gluQuadricDrawStyle(quad->quadric, style); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-quadric-orientation (quad::<glu-quadric> orientation::<fixnum>) "gluQuadricOrientation(quad->quadric, orientation); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-quadric-normals (quad::<glu-quadric> normals::<fixnum>) "gluQuadricNormals(quad->quadric, normals); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-quadric-texture (quad::<glu-quadric> texcoords::<fixnum>) "gluQuadricTexture(quad->quadric, texcoords); SCM_RETURN(SCM_UNDEFINED);") ;; glu-quadric-callback - gluQuadricCallback doesn't pass the closure ;; information, so it is practially impossible to implement this in ;; reasonable way. (define-cproc glu-cylinder (quad::<glu-quadric> base-radius::<real> top-radius::<real> height::<real> slices::<fixnum> stacks::<fixnum>) "gluCylinder(quad->quadric, base_radius, top_radius, height, slices, stacks); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-sphere (quad::<glu-quadric> radius::<real> slices::<fixnum> stacks::<fixnum>) "gluSphere(quad->quadric, radius, slices, stacks); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-disk (quad::<glu-quadric> inner-radius::<real> outer-radius::<real> slices::<fixnum> loops::<fixnum>) "gluDisk(quad->quadric, inner_radius, outer_radius, slices, loops); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-partial-disk (quad::<glu-quadric> inner-radius::<real> outer-radius::<real> slices::<fixnum> loops::<fixnum> start-angle::<real> sweep-angle::<real>) "gluPartialDisk(quad->quadric, inner_radius, outer_radius, slices, loops, start_angle, sweep_angle); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; Nurbs ;; (define-type <glu-nurbs> "ScmGluNurbs*" #f "SCM_GLU_NURBS_P" "SCM_GLU_NURBS") ;; glu-new-nurbs-renderer : (make <glu-nurbs>) ;; glu-delete-nurbs-renderer : GC takes care of this. (define-cproc glu-load-sampling-matrices (nurbs::<glu-nurbs> model-matrix proj-matrix viewport) "if (!SCM_F32VECTORP(model_matrix) || SCM_F32VECTOR_SIZE(model_matrix) != 16) { Scm_Error(\"f32vector of length 16 required for model-matrix, but got %S\", model_matrix); } if (!SCM_F32VECTORP(proj_matrix) || SCM_F32VECTOR_SIZE(proj_matrix) != 16) { Scm_Error(\"f32vector of length 16 required for proj-matrix, but got %S\", proj_matrix); } if (!SCM_S32VECTORP(viewport) || SCM_S32VECTOR_SIZE(viewport) != 4) { Scm_Error(\"s32vector of length 4 required for viewport, but got %S\", viewport); } gluLoadSamplingMatrices(nurbs->nurbs, SCM_F32VECTOR_ELEMENTS(model_matrix), SCM_F32VECTOR_ELEMENTS(proj_matrix), (GLint*)SCM_S32VECTOR_ELEMENTS(viewport)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-nurbs-property (nurbs::<glu-nurbs> property::<fixnum> value::<real>) "gluNurbsProperty(nurbs->nurbs, (GLenum)property, (GLfloat)value); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-get-nurbs-property (nurbs::<glu-nurbs> property::<fixnum>) "GLfloat value; gluGetNurbsProperty(nurbs->nurbs, (GLenum)property, &value); SCM_RETURN(Scm_MakeFlonum((double)value));") (define-cproc glu-begin-curve (nurbs::<glu-nurbs>) "gluBeginCurve(nurbs->nurbs); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-end-curve (nurbs::<glu-nurbs>) "gluEndCurve(nurbs->nurbs); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-nurbs-curve (nurbs::<glu-nurbs> knot stride::<fixnum> ctlarray order::<fixnum> type::<fixnum>) "int nknots, nctlarray; if (!SCM_F32VECTORP(knot)) { Scm_Error(\"f32vector required for knot, but got %S\", knot); } nknots = SCM_F32VECTOR_SIZE(knot); nctlarray = (nknots - order) * stride; if (!SCM_F32VECTORP(ctlarray) || SCM_F32VECTOR_SIZE(ctlarray) != nctlarray) { Scm_Error(\"f32vector of length %d is required for control points, but got %S\", nctlarray, ctlarray); } gluNurbsCurve(nurbs->nurbs, nknots, SCM_F32VECTOR_ELEMENTS(knot), stride, SCM_F32VECTOR_ELEMENTS(ctlarray), order, type); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-begin-surface (nurbs::<glu-nurbs>) "gluBeginSurface(nurbs->nurbs); SCM_RETURN(SCM_UNDEFINED);") (define-cproc glu-end-surface (nurbs::<glu-nurbs>) "gluEndSurface(nurbs->nurbs); SCM_RETURN(SCM_UNDEFINED);") ;;================================================================ ;; Polygon tesselation ;; (define-type <glu-tesselator> "ScmGluTesselator*" #f "SCM_GLU_TESSELATOR_P" "SCM_GLU_TESSELATOR") ;;============================================================= ;; Mipmapping and image scaling ;; ;; caller must ensure vector has enough length (define-cproc glu-build-1d-mipmaps (target::<fixnum> internalformat::<fixnum> width::<fixnum> format::<fixnum> type::<fixnum> texels) "int elttype, size, r; void *texelptr; size = Scm_GLPixelDataSize(width, 1, format, type, &elttype, NULL); texelptr = Scm_GLPixelDataCheck(texels, elttype, size); r = gluBuild1DMipmaps(target, internalformat, width, format, type, texelptr); SCM_RETURN(SCM_MAKE_INT(r));") (define-cproc glu-build-2d-mipmaps (target::<fixnum> internalformat::<fixnum> width::<fixnum> height::<fixnum> format::<fixnum> type::<fixnum> texels) "int elttype, size, r; void *texelptr; size = Scm_GLPixelDataSize(width, height, format, type, &elttype, NULL); texelptr = Scm_GLPixelDataCheck(texels, elttype, size); r = gluBuild2DMipmaps(target, internalformat, width, height, format, type, texelptr); SCM_RETURN(SCM_MAKE_INT(r));") (if "defined(GL_VERSION_1_2)" (begin (define-cproc glu-build-3d-mipmaps (target::<fixnum> internalformat::<fixnum> width::<fixnum> height::<fixnum> depth::<fixnum> format::<fixnum> type::<fixnum> texels) ;; NB: does Scm_GLPxielDataSize work to pass height*depth as height? ;; need to think over it. "int elttype, size, r; void *texelptr; size = Scm_GLPixelDataSize(width, height*depth, format, type, &elttype, NULL); texelptr = Scm_GLPixelDataCheck(texels, elttype, size); r = gluBuild3DMipmaps(target, internalformat, width, height, depth, format, type, texelptr); SCM_RETURN(SCM_MAKE_INT(r));") (define-cproc glu-build-1d-mipmap-levels (target::<fixnum> internalformat::<fixnum> width::<fixnum> format::<fixnum> type::<fixnum> level::<fixnum> base::<fixnum> max::<fixnum> texels) "int elttype, size, r; void *texelptr; size = Scm_GLPixelDataSize(width, 1, format, type, &elttype, NULL); texelptr = Scm_GLPixelDataCheck(texels, elttype, size); r = gluBuild1DMipmapLevels(target, internalformat, width, format, type, level, base, max, texelptr); SCM_RETURN(SCM_MAKE_INT(r));") (define-cproc glu-build-2d-mipmap-levels (target::<fixnum> internalformat::<fixnum> width::<fixnum> height::<fixnum> format::<fixnum> type::<fixnum> level::<fixnum> base::<fixnum> max::<fixnum> texels) "int elttype, size, r; void *texelptr; size = Scm_GLPixelDataSize(width, height, format, type, &elttype, NULL); texelptr = Scm_GLPixelDataCheck(texels, elttype, size); r = gluBuild2DMipmapLevels(target, internalformat, width, height, format, type, level, base, max, texelptr); SCM_RETURN(SCM_MAKE_INT(r));") (define-cproc glu-build-3d-mipmap-levels (target::<fixnum> internalformat::<fixnum> width::<fixnum> height::<fixnum> depth::<fixnum> format::<fixnum> type::<fixnum> level::<fixnum> base::<fixnum> max::<fixnum> texels) ;; NB: does Scm_GLPxielDataSize work to pass height*depth as height? ;; need to think over it. "int elttype, size, r; void *texelptr; size = Scm_GLPixelDataSize(width, height*depth, format, type, &elttype, NULL); texelptr = Scm_GLPixelDataCheck(texels, elttype, size); r = gluBuild3DMipmapLevels(target, internalformat, width, height, depth, format, type, level, base, max, texelptr); SCM_RETURN(SCM_MAKE_INT(r));") )) ;; if defined(GL_VERSION_1_2) ;;================================================================ ;; New function in GLU 1.1 ;; (define-cproc glu-get-string (name::<fixnum>) " const GLubyte *p = gluGetString(name); if (p) SCM_RETURN(Scm_MakeString((const char*)p, -1, -1, 0)); else SCM_RETURN(SCM_FALSE);") ;;================================================================ ;; Constants ;; ;; Normal vectors (define-enum GLU_SMOOTH) (define-enum GLU_FLAT) (define-enum GLU_NONE) ;; Quadric draw styles (define-enum GLU_POINT) (define-enum GLU_LINE) (define-enum GLU_FILL) (define-enum GLU_SILHOUETTE) ;; Quadric orientation (define-enum GLU_OUTSIDE) (define-enum GLU_INSIDE) ;; Tesselator (if "!defined(__CYGWIN__)" (begin (define-enum GLU_BEGIN) (define-enum GLU_VERTEX) (define-enum GLU_END) (define-enum GLU_ERROR) (define-enum GLU_EDGE_FLAG))) ;; Contour types (if "!defined(__CYGWIN__)" (begin (define-enum GLU_CW) (define-enum GLU_CCW) (define-enum GLU_INTERIOR) (define-enum GLU_EXTERIOR) (define-enum GLU_UNKNOWN))) ;; Tesselation errors (define-enum GLU_TESS_ERROR1) (define-enum GLU_TESS_ERROR2) (define-enum GLU_TESS_ERROR3) (define-enum GLU_TESS_ERROR4) (define-enum GLU_TESS_ERROR5) (define-enum GLU_TESS_ERROR6) (define-enum GLU_TESS_ERROR7) (define-enum GLU_TESS_ERROR8) ;(define-enum GLU_TESS_ERROR9) ;; NURBS (define-enum GLU_AUTO_LOAD_MATRIX) (define-enum GLU_CULLING) (define-enum GLU_PARAMETRIC_TOLERANCE) (define-enum GLU_SAMPLING_TOLERANCE) (define-enum GLU_DISPLAY_MODE) (define-enum GLU_SAMPLING_METHOD) (define-enum GLU_U_STEP) (define-enum GLU_V_STEP) (define-enum GLU_PATH_LENGTH) (define-enum GLU_PARAMETRIC_ERROR) (define-enum GLU_DOMAIN_DISTANCE) (define-enum GLU_MAP1_TRIM_2) (define-enum GLU_MAP1_TRIM_3) (define-enum GLU_OUTLINE_POLYGON) (define-enum GLU_OUTLINE_PATCH) (define-enum GLU_NURBS_ERROR1) (define-enum GLU_NURBS_ERROR2) (define-enum GLU_NURBS_ERROR3) (define-enum GLU_NURBS_ERROR4) (define-enum GLU_NURBS_ERROR5) (define-enum GLU_NURBS_ERROR6) (define-enum GLU_NURBS_ERROR7) (define-enum GLU_NURBS_ERROR8) (define-enum GLU_NURBS_ERROR9) (define-enum GLU_NURBS_ERROR10) (define-enum GLU_NURBS_ERROR11) (define-enum GLU_NURBS_ERROR12) (define-enum GLU_NURBS_ERROR13) (define-enum GLU_NURBS_ERROR14) (define-enum GLU_NURBS_ERROR15) (define-enum GLU_NURBS_ERROR16) (define-enum GLU_NURBS_ERROR17) (define-enum GLU_NURBS_ERROR18) (define-enum GLU_NURBS_ERROR19) (define-enum GLU_NURBS_ERROR20) (define-enum GLU_NURBS_ERROR21) (define-enum GLU_NURBS_ERROR22) (define-enum GLU_NURBS_ERROR23) (define-enum GLU_NURBS_ERROR24) (define-enum GLU_NURBS_ERROR25) (define-enum GLU_NURBS_ERROR26) (define-enum GLU_NURBS_ERROR27) (define-enum GLU_NURBS_ERROR28) (define-enum GLU_NURBS_ERROR29) (define-enum GLU_NURBS_ERROR30) (define-enum GLU_NURBS_ERROR31) (define-enum GLU_NURBS_ERROR32) (define-enum GLU_NURBS_ERROR33) (define-enum GLU_NURBS_ERROR34) (define-enum GLU_NURBS_ERROR35) (define-enum GLU_NURBS_ERROR36) (define-enum GLU_NURBS_ERROR37) ;; Errors (define-enum GLU_INVALID_ENUM) (define-enum GLU_INVALID_VALUE) (define-enum GLU_OUT_OF_MEMORY) (if "defined(GLU_INCOMPATIBLE_GL_VERSION)" (define-enum GLU_INCOMPATIBLE_GL_VERSION) ) ;; New in GLU 1.1 (define-enum GLU_VERSION) (define-enum GLU_EXTENSIONS) ;; Local variables: ;; mode: scheme ;; end: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/math3d-lib.stub�����������������������������������������������������������������0000644�0000764�0000764�00000070062�11533026402�015766� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; math3d-lib.stub - 3d vector arithmetics ;;; ;;; Copyright (c) 2002-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: math3d-lib.stub,v 1.29 2008-06-05 11:17:40 shirok Exp $ ;;; " #include <math.h> #include <gauche/uvector.h> #include \"gauche/math3d.h\" " (define-type <vector4f> "ScmVector4f*" #f "SCM_VECTOR4FP" "SCM_VECTOR4F") (define-type <vector4f-array> "ScmVector4fArray*" #f "SCM_VECTOR4F_ARRAY_P" "SCM_VECTOR4F_ARRAY") (define-type <point4f> "ScmPoint4f*" #f "SCM_POINT4FP" "SCM_POINT4F") (define-type <point4f-array> "ScmPoint4fArray*" #f "SCM_POINT4F_ARRAY_P" "SCM_POINT4F_ARRAY") (define-type <matrix4f> "ScmMatrix4f*" #f "SCM_MATRIX4FP" "SCM_MATRIX4F") (define-type <quatf> "ScmQuatf*" #f "SCM_QUATFP" "SCM_QUATF") (define-type <f32vector> "ScmF32Vector*") ;;================================================================ ;; Vector4f ;; (define-cproc vector4f (x::<real> y::<real> z::<real> &optional (w::<real> 0.0)) (call "Scm_MakeVector4f")) (define-cproc vector4f? (obj) (call <boolean> "SCM_VECTOR4FP")) (define-cproc make-vector4f () "SCM_RETURN(Scm_MakeVector4fv(NULL));") (define-cproc list->vector4f (l::<list>) (call "Scm_ListToVector4f")) (define-cproc vector4f->list (v::<vector4f>) (call "Scm_Vector4fToList")) (define-cproc f32vector->vector4f (v::<f32vector> &optional (start::<fixnum> 0)) "int size = SCM_F32VECTOR_SIZE(v); if (start < 0 || size-start < 4) Scm_Error(\"f32vector too small: %S (start=%d)\", v, start); SCM_RETURN(Scm_MakeVector4fv(SCM_F32VECTOR_ELEMENTS(v)+start));") (define-cproc vector4f->f32vector (v::<vector4f>) "SCM_RETURN(Scm_MakeF32VectorFromArray(4, SCM_VECTOR4F_D(v)));") (define-cproc vector4f-copy (v::<vector4f>) "SCM_RETURN(Scm_MakeVector4fv(SCM_VECTOR4F_D(v)));") (define-cproc vector4f-copy! (dst::<vector4f> src::<vector4f>) "SCM_RETURN(Scm_Vector4fSetv(dst, SCM_VECTOR4F_D(src)));") (define-cproc vector4f-set! (x::<vector4f> i::<fixnum> v::<real>) "if (i < 0 || i > 3) Scm_Error(\"vector index out of range: %d\", i); SCM_VECTOR4F_D(x)[i] = v; SCM_RETURN(SCM_UNDEFINED);") (define-cproc vector4f-ref (x::<vector4f> i::<fixnum> &optional fallback) "if (i < 0 || i > 3) { if (SCM_UNBOUNDP(fallback)) { Scm_Error(\"vector index out of range: %d\", i); } SCM_RETURN(fallback); } SCM_RETURN(Scm_MakeFlonum(SCM_VECTOR4F_REF(x, i)));" (setter vector4f-set!)) (define-cproc vector4f-dot (x::<vector4f> y::<vector4f>) (call <float> "Scm_Vector4fDot")) (define-cproc vector4f-cross (x::<vector4f> y::<vector4f>) (call "Scm_Vector4fCross")) (define-cproc vector4f-norm (v::<vector4f>) (expr <real> (SCM_VECTOR4F_NORMV (SCM_VECTOR4F_D v)))) (define-cproc vector4f-normalize (x::<vector4f>) (call "Scm_Vector4fNormalize")) (define-cproc vector4f-normalize! (x::<vector4f>) (call "Scm_Vector4fNormalizeX")) (define-cproc vector4f-add (x::<vector4f> y::<vector4f>) (call "Scm_Vector4fAdd")) (define-cproc vector4f-add! (x::<vector4f> y::<vector4f>) "Scm_Vector4fAddv(SCM_VECTOR4F_D(x), SCM_VECTOR4F_D(x), SCM_VECTOR4F_D(y)); SCM_RETURN(SCM_OBJ(x));") (define-cproc vector4f-sub (x::<vector4f> y::<vector4f>) (call "Scm_Vector4fSub")) (define-cproc vector4f-sub! (x::<vector4f> y::<vector4f>) "Scm_Vector4fSubv(SCM_VECTOR4F_D(x), SCM_VECTOR4F_D(x), SCM_VECTOR4F_D(y)); SCM_RETURN(SCM_OBJ(x));") (define-cise-stmt vec4-eltwise [(_ stmts ...) (letrec ((replace (lambda (form i) (match form ['_ i] [(xs ...) (map (cut replace <> i) xs)] [_ form])))) `(begin ,@(append-map (lambda (stmt) (map (cute replace stmt <>) '(0 1 2 3))) stmts)))]) (define-cproc vector4f-mul (x::<vector4f> f::<real>) (body <top> (let* ((|r[4]| :: float)) (vec4-eltwise (set! (aref r _) (* (SCM_VECTOR4F_REF x _) f))) (return (Scm_MakeVector4fv r))))) (define-cproc vector4f-mul! (x::<vector4f> f::<real>) (body <top> (vec4-eltwise (set! (SCM_VECTOR4F_REF x _) (* (SCM_VECTOR4F_REF x _) f))) (return (SCM_OBJ x)))) (define-cproc vector4f-div (x::<vector4f> f::<real>) (body <top> (let* ((|r[4]| :: float)) (vec4-eltwise (set! (aref r _) (/ (SCM_VECTOR4F_REF x _) f))) (return (Scm_MakeVector4fv r))))) (define-cproc vector4f-div! (x::<vector4f> f::<real>) (body <top> (vec4-eltwise (set! (SCM_VECTOR4F_REF x _) (/ (SCM_VECTOR4F_REF x _) f))) (return (SCM_OBJ x)))) ;; VectorArray -------------------------------------------------- (define-cproc make-vector4f-array (len::<fixnum> &optional init) "ScmObj va = SCM_FALSE; if (len < 0) Scm_Error(\"vector4f-array length must be positive: %d\", len); if (SCM_VECTOR4FP(init)) { va = Scm_MakeVector4fArrayv(len, SCM_VECTOR4F_D(init)); } else if (SCM_UNBOUNDP(init)) { va = Scm_MakeVector4fArrayv(len, NULL); } else { Scm_Error(\"bad initializer for vector array: must be <vector4f>, but got %S\", init); } SCM_RETURN(va);") (define-cproc vector4f-array? (obj) (call <boolean> "SCM_VECTOR4F_ARRAY_P")) (define-cproc vector4f-array-length (v::<vector4f-array>) (call <fixnum> "SCM_VECTOR4F_ARRAY_SIZE")) (define-cproc f32vector->vector4f-array/shared (v::<f32vector>) (call "Scm_MakeVector4fArrayV")) (define-cproc vector4f-array->f32vector (a::<vector4f-array>) "SCM_RETURN(Scm_MakeF32VectorFromArray(SCM_VECTOR4F_ARRAY_SIZE(a)*4, SCM_VECTOR4F_ARRAY_D(a)));") (define-cproc vector4f-array-set! (a::<vector4f-array> i::<fixnum> x::<vector4f>) (call <void> "Scm_Vector4fArraySet")) (define-cproc vector4f-array-ref (a::<vector4f-array> i::<fixnum> &optional fallback) (call "Scm_Vector4fArrayRef") (setter vector4f-array-set!)) (define-cproc vector4f-array-ref/shared (a::<vector4f-array> i::<fixnum> &optional fallback) (call "Scm_Vector4fArrayRefShared")) ;; point4f ------------------------------------------------------ (define-cproc point4f (x::<real> y::<real> z::<real> &optional (w::<real> 1.0)) (call "Scm_MakePoint4f")) (define-cproc point4f? (obj) (call <boolean> "SCM_POINT4FP")) (define-cproc make-point4f () "SCM_RETURN(Scm_MakePoint4fv(NULL));") (define-cproc list->point4f (l::<list>) (call "Scm_ListToPoint4f")) (define-cproc point4f->list (x::<point4f>) (call "Scm_Point4fToList")) (define-cproc f32vector->point4f (v::<f32vector> &optional (start::<fixnum> 0)) "int size = SCM_F32VECTOR_SIZE(v); if (start < 0 || size-start < 4) Scm_Error(\"f32vector too small: %S (start=%d)\", v, start); SCM_RETURN(Scm_MakePoint4fv(SCM_F32VECTOR_ELEMENTS(v)+start));") (define-cproc point4f->f32vector (v::<point4f>) "SCM_RETURN(Scm_MakeF32VectorFromArray(4, SCM_POINT4F_D(v)));") (define-cproc point4f-copy (v::<point4f>) "SCM_RETURN(Scm_MakePoint4fv(SCM_POINT4F_D(v)));") (define-cproc point4f-copy! (dst::<point4f> src::<point4f>) "SCM_RETURN(Scm_Point4fSetv(dst, SCM_POINT4F_D(src)));") (define-cproc point4f-set! (x::<point4f> i::<fixnum> v::<real>) "if (i < 0 || i > 3) Scm_Error(\"point index out of range: %d\", i); SCM_POINT4F_D(x)[i] = v; SCM_RETURN(SCM_UNDEFINED);") (define-cproc point4f-ref (x::<point4f> i::<fixnum>) "if (i < 0 || i > 3) Scm_Error(\"vpoint index out of range: %d\", i); SCM_RETURN(Scm_MakeFlonum(SCM_POINT4F_REF(x, i)));" (setter point4f-set!)) (define-cproc point4f-add (x::<point4f> y::<vector4f>) (call "Scm_Point4fAdd")) (define-cproc point4f-add! (x::<point4f> y::<vector4f>) "Scm_Vector4fAddv(SCM_POINT4F_D(x), SCM_POINT4F_D(x), SCM_VECTOR4F_D(y)); SCM_RETURN(SCM_OBJ(x));") (define-cproc point4f-sub (x::<point4f> y) (call "Scm_Point4fSub")) ;point4f-sub! ;; Point4fArray --------------------------------------------------- (define-cproc make-point4f-array (len::<fixnum> &optional init) "ScmObj va = SCM_FALSE; if (len < 0) Scm_Error(\"point4f-array length must be positive: %d\", len); if (SCM_POINT4FP(init)) { va = Scm_MakePoint4fArrayv(len, SCM_POINT4F_D(init)); } else if (SCM_UNBOUNDP(init)) { va = Scm_MakePoint4fArrayv(len, NULL); } else { Scm_Error(\"bad initializer for point array: must be <point4f>, but got %S\", init); } SCM_RETURN(va);") (define-cproc point4f-array? (obj) (call <boolean> "SCM_POINT4F_ARRAY_P")) (define-cproc point4f-array-length (v::<point4f-array>) (call <fixnum> "SCM_POINT4F_ARRAY_SIZE")) (define-cproc f32vector->point4f-array/shared (v::<f32vector>) (call "Scm_MakePoint4fArrayV")) (define-cproc point4f-array->f32vector (a::<point4f-array>) "SCM_RETURN(Scm_MakeF32VectorFromArray(SCM_POINT4F_ARRAY_SIZE(a)*4, SCM_POINT4F_ARRAY_D(a)));") (define-cproc point4f-array-set! (a::<point4f-array> i::<fixnum> x::<point4f>) (call <void> "Scm_Point4fArraySet")) (define-cproc point4f-array-ref (a::<point4f-array> i::<fixnum> &optional fallback) (call "Scm_Point4fArrayRef") (setter point4f-array-set!)) (define-cproc point4f-array-ref/shared (a::<point4f-array> i::<fixnum> &optional fallback) (call "Scm_Point4fArrayRefShared")) ;; Matrix4f ------------------------------------------------------- (define-cproc make-matrix4f (&optional init) "if (SCM_UNBOUNDP(init)) { static float unit[] = { 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 }; SCM_RETURN(Scm_MakeMatrix4fv(unit)); } else if (!SCM_F32VECTORP(init) || SCM_F32VECTOR_SIZE(init) != 16) { Scm_Error(\"f32vector of size 16 required, but got %S\", init); } SCM_RETURN(Scm_MakeMatrix4fv(SCM_F32VECTOR_ELEMENTS(init)));") (define-cproc matrix4f (&rest args) (call "Scm_ListToMatrix4f")) (define-cproc matrix4f? (obj) (call <boolean> "SCM_MATRIX4FP")) (define-cproc list->matrix4f (l::<list>) (call "Scm_ListToMatrix4f")) (define-cproc matrix4f->list (m::<matrix4f>) (call "Scm_Matrix4fToList")) (define-cproc f32vector->matrix4f (v::<f32vector> &optional (start::<fixnum> 0)) (body <top> (let* ((size :: int (SCM_F32VECTOR_SIZE v))) (when (or (< start 0) (< (- size start) 16)) (Scm_Error "f32vector too small: %S (start=%d)" v start)) (result (Scm_MakeMatrix4fv (+ (SCM_F32VECTOR_ELEMENTS v) start)))))) (define-cproc f32vector->matrix4f! (m::<matrix4f> v::<f32vector> &optional (start::<fixnum> 0)) (body <top> (let* ((size :: int (SCM_F32VECTOR_SIZE v))) (when (or (< start 0) (< (- size start) 16)) (Scm_Error "f32vector too small: %S (start=%d)" v start)) (Scm_Matrix4fSetv m (+ (SCM_F32VECTOR_ELEMENTS v) start)) (result (SCM_OBJ m))))) (define-cproc matrix4f->f32vector (m::<matrix4f>) (expr <top> (Scm_MakeF32VectorFromArray 16 (SCM_MATRIX4F_D m)))) (define-cproc matrix4f-copy (m::<matrix4f>) (expr <top> (Scm_MakeMatrix4fv (SCM_MATRIX4F_D m)))) (define-cproc matrix4f-copy! (dst::<matrix4f> src::<matrix4f>) (expr <top> (Scm_Matrix4fSetv dst (SCM_MATRIX4F_D src)))) (define-cproc matrix4f-mul (p::<matrix4f> q) "if (SCM_MATRIX4FP(q)) SCM_RETURN(Scm_Matrix4fMulMatrix4f(p, SCM_MATRIX4F(q))); if (SCM_VECTOR4FP(q)) SCM_RETURN(Scm_Matrix4fMulVector4f(p, SCM_VECTOR4F(q))); if (SCM_POINT4FP(q)) SCM_RETURN(Scm_Matrix4fMulPoint4f(p, SCM_POINT4F(q))); if (SCM_REALP(q)) SCM_RETURN(Scm_Matrix4fScale(p, Scm_GetDouble(q))); Scm_Error(\"bad object, matrix4f, vector4f, point4f or real number required, but got %S\", q); SCM_RETURN(SCM_UNDEFINED);") (define-cproc matrix4f-mul! (p::<matrix4f> q::<matrix4f>) "float r[16]; Scm_Matrix4fMulMatrix4fv(r, SCM_MATRIX4F_D(p), SCM_MATRIX4F_D(q)); Scm_Matrix4fSetv(p, r); SCM_RETURN(SCM_OBJ(p));") (define-cproc matrix4f-transpose (m::<matrix4f>) "float r[16]; Scm_Matrix4fTransposev(r, SCM_MATRIX4F_D(m)); SCM_RETURN(Scm_MakeMatrix4fv(r));") (define-cproc matrix4f-transpose! (m::<matrix4f>) "float r[16], *p = SCM_MATRIX4F_D(m); Scm_Matrix4fTransposev(r, p); Scm_Matrix4fSetv(m, r); SCM_RETURN(SCM_OBJ(m));") (define-cproc matrix4f-set! (m::<matrix4f> i::<fixnum> v::<real>) "if (i<0 || i>=16) { Scm_Error(\"index out of bounds: %d\", i); } else { SCM_MATRIX4F_D(m)[i] = v; } SCM_RETURN(SCM_UNDEFINED);") (define-cproc matrix4f-ref (m::<matrix4f> i::<fixnum> &optional fallback) "if (i<0 || i>=16) { if (SCM_UNBOUNDP(fallback)) Scm_Error(\"index out of bounds: %d\", i); SCM_RETURN(fallback); } else { SCM_RETURN(Scm_MakeFlonum(SCM_MATRIX4F_D(m)[i])); }" (setter matrix4f-set!)) (define-cproc matrix4f-set2! (m::<matrix4f> i::<fixnum> j::<fixnum> v::<real>) "if (i < 0 || i > 3) Scm_Error(\"index i out of range: %d\", i); if (j < 0 || j > 3) Scm_Error(\"index j out of range: %d\", j); SCM_MATRIX4F_SET(m, i, j, v); SCM_RETURN(SCM_UNDEFINED);") (define-cproc matrix4f-ref2 (m::<matrix4f> i::<fixnum> j::<fixnum>) "if (i < 0 || i > 3) Scm_Error(\"index i out of range: %d\", i); if (j < 0 || j > 3) Scm_Error(\"index j out of range: %d\", j); SCM_RETURN(Scm_MakeFlonum(SCM_MATRIX4F_REF(m, i, j)));" (setter matrix4f-set2!)) (define-cproc matrix4f-row (m::<matrix4f> i::<fixnum>) "if (i < 0 || i > 3) Scm_Error(\"index i out of range: %d\", i); SCM_RETURN(Scm_MakeVector4f(SCM_MATRIX4F_REF(m, i, 0), SCM_MATRIX4F_REF(m, i, 1), SCM_MATRIX4F_REF(m, i, 2), SCM_MATRIX4F_REF(m, i, 3)));" (setter (m::<matrix4f> i::<fixnum> v) "float *fv; if (i < 0 || i > 3) Scm_Error(\"index i out of range: %d\", i); SCM_MATH3D_X4FP(fv, v); SCM_MATRIX4F_SET(m, i, 0, fv[0]); SCM_MATRIX4F_SET(m, i, 1, fv[1]); SCM_MATRIX4F_SET(m, i, 2, fv[2]); SCM_MATRIX4F_SET(m, i, 3, fv[3]); SCM_RETURN(SCM_UNDEFINED);") ) (define-cproc matrix4f-column (m::<matrix4f> i::<fixnum>) "if (i < 0 || i > 3) Scm_Error(\"index i out of range: %d\", i); SCM_RETURN(Scm_MakeVector4fv(SCM_MATRIX4F_COLVEC(m, i)));" (setter (m::<matrix4f> i::<fixnum> v) "float *fv; if (i < 0 || i > 3) Scm_Error(\"index i out of range: %d\", i); SCM_MATH3D_X4FP(fv, v); SCM_MATRIX4F_SET(m, 0, i, fv[0]); SCM_MATRIX4F_SET(m, 1, i, fv[1]); SCM_MATRIX4F_SET(m, 2, i, fv[2]); SCM_MATRIX4F_SET(m, 3, i, fv[3]); SCM_RETURN(SCM_UNDEFINED);") ) (define-cproc matrix4f-column/shared (m::<matrix4f> i::<fixnum>) "if (i < 0 || i > 3) Scm_Error(\"index i out of range: %d\", i); SCM_RETURN(Scm_MakeVector4fvShared(SCM_MATRIX4F_COLVEC(m, i)));") ;; determinant and inverse (define-cproc matrix4f-determinant (m::<matrix4f>) "SCM_RETURN(Scm_MakeFlonum((double)Scm_Matrix4fDeterminantv(SCM_MATRIX4F_D(m))));") (define-cproc matrix4f-inverse (m::<matrix4f> &optional (error-on-singular #t)) "int code; ScmObj r = Scm_MakeMatrix4fv(NULL); code = Scm_Matrix4fInversev(SCM_MATRIX4F_D(r), SCM_MATRIX4F_D(m)); if (!SCM_FALSEP(error_on_singular) && !code) { Scm_Error(\"attempt to inverse singular matrix: %S\", m); } if (code) SCM_RETURN(r); else SCM_RETURN(SCM_FALSE);") (define-cproc matrix4f-inverse! (m::<matrix4f> &optional (error-on-singular #t)) "int code, i; float r[16]; code = Scm_Matrix4fInversev(r, SCM_MATRIX4F_D(m)); if (!SCM_FALSEP(error_on_singular) && !code) { Scm_Error(\"attempt to inverse singular matrix: %S\", m); } if (code) { for (i=0; i<16; i++) SCM_MATRIX4F_D(m)[i] = r[i]; SCM_RETURN(SCM_OBJ(m)); } else { SCM_RETURN(SCM_FALSE); }") ;; basic transformation (define-cproc translation->matrix4f (t) "float r[16], *p; SCM_MATH3D_X3FP(p, t); Scm_TranslationToMatrix4fv(r, p); SCM_RETURN(Scm_MakeMatrix4fv(r));") (define-cproc translation->matrix4f! (m::<matrix4f> t) "float *p; SCM_MATH3D_X3FP(p, t); Scm_TranslationToMatrix4fv(SCM_MATRIX4F_D(m), p); SCM_RETURN(SCM_OBJ(m));") (define-cproc rotation->matrix4f (v angle::<real>) "float r[16], *p; SCM_MATH3D_X3FP(p, v); Scm_RotationToMatrix4fv(r, p, angle); SCM_RETURN(Scm_MakeMatrix4fv(r));") (define-cproc rotation->matrix4f! (m::<matrix4f> v angle::<real>) "float *p; SCM_MATH3D_X3FP(p, v); Scm_RotationToMatrix4fv(SCM_MATRIX4F_D(m), p, angle); SCM_RETURN(SCM_OBJ(m));") (define-cproc scale->matrix4f (s) "float r[16], *p = NULL; SCM_MATH3D_X3FP(p, s); Scm_ScaleToMatrix4fv(r, p); SCM_RETURN(Scm_MakeMatrix4fv(r));") (define-cproc scale->matrix4f! (m::<matrix4f> s) "float *p; SCM_MATH3D_X3FP(p, s); Scm_ScaleToMatrix4fv(SCM_MATRIX4F_D(m), p); SCM_RETURN(SCM_OBJ(m));") (define-cproc trs->matrix4f (t v angle::<real> s) "float r[16], *pt, *pv, *ps; SCM_MATH3D_X3FP(pt, t); SCM_MATH3D_X3FP(pv, v); SCM_MATH3D_X3FP(ps, s); Scm_TRSToMatrix4fv(r, pt, pv, angle, ps); SCM_RETURN(Scm_MakeMatrix4fv(r));") (define-cproc trs->matrix4f! (m::<matrix4f> t v angle::<real> s) "float *pt, *pv, *ps; SCM_MATH3D_X3FP(pt, t); SCM_MATH3D_X3FP(pv, v); SCM_MATH3D_X3FP(ps, s); Scm_TRSToMatrix4fv(SCM_MATRIX4F_D(m), pt, pv, angle, ps); SCM_RETURN(SCM_OBJ(m));") (define-cproc tqs->matrix4f (t q s) "float r[16], *pt, *pq, *ps; SCM_MATH3D_X3FP(pt, t); SCM_MATH3D_X4FP(pq, q); SCM_MATH3D_X3FP(ps, s); Scm_TQSToMatrix4fv(r, pt, pq, ps); SCM_RETURN(Scm_MakeMatrix4fv(r));") (define-cproc tqs->matrix4f! (m::<matrix4f> t q s) "float *pt, *pq, *ps; SCM_MATH3D_X3FP(pt, t); SCM_MATH3D_X4FP(pq, q); SCM_MATH3D_X3FP(ps, s); Scm_TQSToMatrix4fv(SCM_MATRIX4F_D(m), pt, pq, ps); SCM_RETURN(SCM_OBJ(m));") (define-symbol xyz "sym_xyz") (define-symbol xzy "sym_xzy") (define-symbol yzx "sym_yzx") (define-symbol yxz "sym_yxz") (define-symbol zxy "sym_zxy") (define-symbol zyx "sym_zyx") "static int rotation_order(ScmObj sym) { if (SCM_UNBOUNDP(sym)) return SCM_MATH3D_ROTATE_XYZ; /* default */ if (SCM_EQ(sym, sym_xyz)) return SCM_MATH3D_ROTATE_XYZ; if (SCM_EQ(sym, sym_xzy)) return SCM_MATH3D_ROTATE_XZY; if (SCM_EQ(sym, sym_yzx)) return SCM_MATH3D_ROTATE_YZX; if (SCM_EQ(sym, sym_yxz)) return SCM_MATH3D_ROTATE_YXZ; if (SCM_EQ(sym, sym_zxy)) return SCM_MATH3D_ROTATE_ZXY; if (SCM_EQ(sym, sym_zyx)) return SCM_MATH3D_ROTATE_ZYX; Scm_Error(\"bad rotation order: must be either one of xyz, xzy, yzx, yxz, zxy, or zyx, but got %S\", sym); return 0; /* dummy */ }" (define-cproc euler-angle->matrix4f (x::<real> y::<real> z::<real> &optional order) "float m[16]; Scm_EulerToMatrix4fv(m, (float)x, (float)y, (float)z, rotation_order(order)); SCM_RETURN(Scm_MakeMatrix4fv(m));") (define-cproc euler-angle->matrix4f! (m::<matrix4f> x::<real> y::<real> z::<real> &optional order) (body <void> "Scm_EulerToMatrix4fv(SCM_MATRIX4F_D(m), (float)x, (float)y, (float)z, rotation_order(order));")) (define-cproc matrix4f-decompose (m::<matrix4f>) "float T[4], S[4], H[4], R[16]; int r; r = Scm_Matrix4fDecomposev(SCM_MATRIX4F_D(m), T, R, H, S); SCM_RETURN(Scm_Values5(SCM_MAKE_BOOL(r), Scm_MakeVector4fv(T), Scm_MakeMatrix4fv(R), Scm_MakeVector4fv(H), Scm_MakeVector4fv(S)));") (define-cproc matrix4f-decompose! (m::<matrix4f> T::<vector4f> R::<matrix4f> H::<vector4f> S::<vector4f>) "int r; r = Scm_Matrix4fDecomposev(SCM_MATRIX4F_D(m), SCM_VECTOR4F_D(T), SCM_MATRIX4F_D(R), SCM_VECTOR4F_D(H), SCM_VECTOR4F_D(S)); SCM_RETURN(SCM_MAKE_BOOL(r));") (define-cproc matrix4f->translation (m::<matrix4f>) (body <top> (result (Scm_MakeVector4f (aref (SCM_MATRIX4F_D m) 12) (aref (SCM_MATRIX4F_D m) 13) (aref (SCM_MATRIX4F_D m) 14) 0.0)))) (define-cproc matrix4f->translation! (v::<vector4f> m::<matrix4f>) (body <top> (set! (SCM_VECTOR4F_REF v 0) (aref (SCM_MATRIX4F_D m) 12)) (set! (SCM_VECTOR4F_REF v 1) (aref (SCM_MATRIX4F_D m) 13)) (set! (SCM_VECTOR4F_REF v 2) (aref (SCM_MATRIX4F_D m) 14)) (set! (SCM_VECTOR4F_REF v 3) 0.0) (result (SCM_OBJ v)))) (define-cproc matrix4f->rotation (m::<matrix4f>) "float v[4]; float angle = Scm_Matrix4fToRotationv(SCM_MATRIX4F_D(m), v); SCM_RETURN(Scm_Values2(Scm_MakeVector4fv(v), Scm_MakeFlonum((double)angle)));") (define-cproc matrix4f->rotation! (v::<vector4f> m::<matrix4f>) "float angle = Scm_Matrix4fToRotationv(SCM_MATRIX4F_D(m), SCM_VECTOR4F_D(v)); SCM_RETURN(Scm_Values2(SCM_OBJ(v), Scm_MakeFlonum((double)angle)));") ;; Quatf ---------------------------------------------------- (define-cproc quatf (x::<real> y::<real> z::<real> w::<real>) (call "Scm_MakeQuatf")) (define-cproc quatf? (obj) (call <boolean> "SCM_QUATFP")) (define-cproc make-quatf (&optional vec (angle::<real> 0)) "if (SCM_UNBOUNDP(vec)) { SCM_RETURN(Scm_MakeQuatf(0.0, 0.0, 0.0, 1.0)); } else { float *q; double sint, cost; SCM_MATH3D_X3FP(q, vec); sint = sin(angle/2.0); cost = cos(angle/2.0); SCM_RETURN(Scm_MakeQuatf(sint*q[0], sint*q[1], sint*q[2], cost)); }") (define-cproc list->quatf (x) (call "Scm_ListToQuatf")) (define-cproc quatf->list (q::<quatf>) (call "Scm_QuatfToList")) (define-cproc f32vector->quatf (x::<f32vector> &optional (start::<fixnum> 0)) "int size = SCM_F32VECTOR_SIZE(x); if (start < 0 || size-start < 4) Scm_Error(\"f32vector too small: %S (start=%d)\", x, start); SCM_RETURN(Scm_MakeQuatfv(SCM_F32VECTOR_ELEMENTS(x)+start));") (define-cproc quatf->f32vector (q::<quatf>) "SCM_RETURN(Scm_MakeF32VectorFromArray(4, SCM_QUATF_D(q)));") (define-cproc quatf-copy (q::<quatf>) "SCM_RETURN(Scm_MakeQuatfv(SCM_QUATF_D(q)));") (define-cproc quatf-copy! (dst::<quatf> src::<quatf>) "SCM_RETURN(Scm_QuatfSetv(dst, SCM_QUATF_D(src)));") (define-cproc quatf-ref (q::<quatf> i::<fixnum> &optional fallback) "if (i<0 || i>3) { if (SCM_UNBOUNDP(fallback)) Scm_Error(\"index i out of range: %d\", i); SCM_RETURN(fallback); } SCM_RETURN(Scm_MakeFlonum(SCM_QUATF_D(q)[i]));") (define-cproc quatf-set! (q::<quatf> i::<fixnum> val::<real>) "if (i<0 || i>3) Scm_Error(\"index i out of range: %d\", i); SCM_QUATF_D(q)[i] = (float)val; SCM_RETURN(SCM_OBJ(q));") (define-cproc quatf-set4! (q::<quatf> x::<real> y::<real> z::<real> w::<real>) (body <top> (set! (aref (SCM_QUATF_D q) 0) x (aref (SCM_QUATF_D q) 1) y (aref (SCM_QUATF_D q) 2) z (aref (SCM_QUATF_D q) 3) w) (result (SCM_OBJ q)))) (define-cproc rotation->quatf! (q::<quatf> v angle::<real>) "float *qv = SCM_QUATF_D(q), *vv; double sint, cost; SCM_MATH3D_X3FP(vv, v); sint = sin(angle/2.0); cost = cos(angle/2.0); qv[0] = sint*vv[0]; qv[1] = sint*vv[1]; qv[2] = sint*vv[2]; qv[3] = cost; SCM_RETURN(SCM_OBJ(q));") (define-cproc quatf-add (p::<quatf> q::<quatf>) (call "Scm_QuatfAdd")) (define-cproc quatf-add! (p::<quatf> q::<quatf>) "float r[4]; Scm_QuatfAddv(r, SCM_QUATF_D(p), SCM_QUATF_D(q)); SCM_RETURN(Scm_QuatfSetv(p, r));") (define-cproc quatf-sub (p::<quatf> q::<quatf>) (call "Scm_QuatfSub")) (define-cproc quatf-sub! (p::<quatf> q::<quatf>) "float r[4]; Scm_QuatfSubv(r, SCM_QUATF_D(p), SCM_QUATF_D(q)); SCM_RETURN(Scm_QuatfSetv(p, r));") (define-cproc quatf-scale (q::<quatf> s::<real>) "float *d = SCM_QUATF_D(q); if (s == 0.0) Scm_Error(\"divide by zero\"); SCM_RETURN(Scm_MakeQuatf(d[0]/s, d[1]/s, d[2]/s, d[3]/s));") (define-cproc quatf-scale! (q::<quatf> s::<real>) "float *d = SCM_QUATF_D(q); if (s == 0.0) Scm_Error(\"divide by zero\"); d[0] /= s; d[1] /= s; d[2] /= s; d[3] /= s; SCM_RETURN(SCM_OBJ(q));") (define-cproc quatf-mul (p::<quatf> q::<quatf>) (call "Scm_QuatfMul")) (define-cproc quatf-mul! (p::<quatf> q::<quatf>) "float r[4]; Scm_QuatfMulv(r, SCM_QUATF_D(p), SCM_QUATF_D(q)); SCM_RETURN(Scm_QuatfSetv(p, r));") ;; calculate qpq* (define-cproc quatf-transform (quat::<quatf> v) (body <top> (let* ((d :: float*) (|r[4]| :: float)) (SCM_MATH3D_X4FP d v) (Scm_QuatfTransformv r (SCM_QUATF_D quat) d) (cond [(SCM_VECTOR4FP v) (result (Scm_MakeVector4fv r))] [(SCM_POINT4FP v) (result (Scm_MakePoint4fv r))] [else (result (Scm_MakeF32VectorFromArray 4 r))])))) (define-cproc quatf-conjugate (q::<quatf>) (body <top> (let* ((d :: float* (SCM_QUATF_D q))) (result (Scm_MakeQuatf (- (aref d 0)) (- (aref d 1)) (- (aref d 2)) (aref d 3)))))) (define-cproc quatf-conjugate! (q::<quatf> p::<quatf>) (body <top> (let* ((s :: float* (SCM_QUATF_D p)) (d :: float* (SCM_QUATF_D q))) (SCM_QUATF_CONJUGATEV d s) (result (SCM_OBJ q))))) (define-cproc quatf-norm (q::<quatf>) (expr <top> (Scm_MakeFlonum (SCM_QUATF_NORMV (SCM_QUATF_D q))))) (define-cproc quatf-normalize (q::<quatf>) (call "Scm_QuatfNormalize")) (define-cproc quatf-normalize! (q::<quatf>) (call "Scm_QuatfNormalizeX")) (define-cproc quatf->matrix4f (q::<quatf>) "float m[16]; Scm_QuatfToMatrix4fv(m, SCM_QUATF_D(q)); SCM_RETURN(Scm_MakeMatrix4fv(m));") (define-cproc quatf->matrix4f! (m::<matrix4f> q::<quatf>) "Scm_QuatfToMatrix4fv(SCM_MATRIX4F_D(m), SCM_QUATF_D(q)); SCM_RETURN(SCM_OBJ(m));") (define-cproc matrix4f->quatf (m::<matrix4f>) (body <top> (let* ((|q[4]| :: float)) (Scm_Matrix4fToQuatfv q (SCM_MATRIX4F_D m)) (result (Scm_MakeQuatfv q))))) (define-cproc matrix4f->quatf! (q::<quatf> m::<matrix4f>) (body <top> (Scm_Matrix4fToQuatfv (SCM_QUATF_D q) (SCM_MATRIX4F_D m)) (result (SCM_OBJ q)))) (define-cproc quatf-slerp (p::<quatf> q::<quatf> t::<real>) (body <top> (let* ((|r[4]| :: float)) (Scm_QuatfSlerp r (SCM_QUATF_D p) (SCM_QUATF_D q) t) (result (Scm_MakeQuatfv r))))) (define-cproc quatf-slerp! (r::<quatf> p::<quatf> q::<quatf> t::<real>) (body <top> (Scm_QuatfSlerp (SCM_QUATF_D r) (SCM_QUATF_D p) (SCM_QUATF_D q) t) (result (SCM_OBJ r)))) (define-cproc vectors->quatf (v::<vector4f> w::<vector4f>) (body <top> (let* ((|r[4]| :: float)) (Scm_VectorsToQuatfv r (SCM_VECTOR4F_D v) (SCM_VECTOR4F_D w)) (result (Scm_MakeQuatfv r))))) (define-cproc vectors->quatf! (q::<quatf> v::<vector4f> w::<vector4f>) (body <top> (Scm_VectorsToQuatfv (SCM_QUATF_D q) (SCM_VECTOR4F_D v) (SCM_VECTOR4F_D w)) (result (SCM_OBJ q)))) (define-cproc axes->quatf (v1::<vector4f> v2::<vector4f> w1::<vector4f> w2::<vector4f>) (body <top> (let* ((|r[4]| :: float)) (Scm_AxesToQuatfv r (SCM_VECTOR4F_D v1) (SCM_VECTOR4F_D v2) (SCM_VECTOR4F_D w1) (SCM_VECTOR4F_D w2)) (result (Scm_MakeQuatfv r))))) (define-cproc axes->quatf! (q::<quatf> v1::<vector4f> v2::<vector4f> w1::<vector4f> w2::<vector4f>) (body <top> (Scm_AxesToQuatfv (SCM_QUATF_D q) (SCM_VECTOR4F_D v1) (SCM_VECTOR4F_D v2) (SCM_VECTOR4F_D w1) (SCM_VECTOR4F_D w2)) (result (SCM_OBJ q)))) ;; Local variables: ;; mode: scheme ;; end: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/gauche/�������������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�014372� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/gauche/math3d.h�����������������������������������������������������������������0000644�0000764�0000764�00000042044�11533026402�015727� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * gauche/math3d.h - 3D vector and matrix arithmetic * * Copyright (c) 2002-2008 Shiro Kawai <shiro@acm.org> * * Permission to use, copy, modify, distribute this software and * accompanying documentation for any purpose is hereby granted, * provided that existing copyright notices are retained in all * copies and that this notice is included verbatim in all * distributions. * This software is provided as is, without express or implied * warranty. In no circumstances the author(s) shall be liable * for any damages arising out of the use of this software. * * $Id: math3d.h,v 1.24 2008-06-05 11:20:54 shirok Exp $ */ /* Vector and matrix arithmetics, specialized for 3D graphics calculation. */ #ifndef GAUCHE_MATH3D_H #define GAUCHE_MATH3D_H #include <gauche.h> #include <gauche/uvector.h> #include <math.h> /*============================================================= * Common utility macros */ /* vector operation */ #define SCM_VECTOR4F_OP(var, expr) \ do { \ int var; \ var = 0; { expr; } \ var = 1; { expr; } \ var = 2; { expr; } \ var = 3; { expr; } \ } while (0) /* Check the given ScmObj val can be accepted as triple or quadraple of floats. If so, sets ptr to the pointer to the floats. Otherwise, report an error. */ #define SCM_MATH3D_X3FP(ptr, val) \ do { \ if (SCM_VECTOR4FP(val)) \ (ptr) = SCM_VECTOR4F_D(val); \ else if (SCM_POINT4FP(val)) \ (ptr) = SCM_POINT4F_D(val); \ else if (SCM_F32VECTORP(val) && SCM_F32VECTOR_SIZE(val) >= 3) \ (ptr) = SCM_F32VECTOR_ELEMENTS(val); \ else { \ Scm_Error("vector4f, point4f or f32vector required," \ " but got %S", val); \ (ptr) = NULL; \ } \ } while (0) #define SCM_MATH3D_X4FP(ptr, val) \ do { \ if (SCM_VECTOR4FP(val)) \ (ptr) = SCM_VECTOR4F_D(val); \ else if (SCM_POINT4FP(val)) \ (ptr) = SCM_POINT4F_D(val); \ else if (SCM_QUATFP(val)) \ (ptr) = SCM_QUATF_D(val); \ else if (SCM_F32VECTORP(val) && SCM_F32VECTOR_SIZE(val) >= 4) \ (ptr) = SCM_F32VECTOR_ELEMENTS(val); \ else { \ Scm_Error("vector4f, point4f, quatf or f32vector required," \ " but got %S", val); \ (ptr) = NULL; \ } \ } while (0) #define SCM_MATH3D_X16FP(ptr, val) \ do { \ if (SCM_MATRIX4FP(val)) \ (ptr) = SCM_MATRIX4F_D(val); \ else if (SCM_F64VECTORP(val) && SCM_F64VECTOR_SIZE(val) >= 16) \ (ptr) = SCM_F64VECTOR_ELEMENTS(val); \ else { \ Scm_Error("matrix4f or f32vector of length 16 required," \ " but got %S", val); \ (ptr) = NULL; \ } \ } while (0) /* Rotation order, used in Euler->rotation conversion */ enum { SCM_MATH3D_ROTATE_XYZ, SCM_MATH3D_ROTATE_XZY, SCM_MATH3D_ROTATE_YZX, SCM_MATH3D_ROTATE_YXZ, SCM_MATH3D_ROTATE_ZXY, SCM_MATH3D_ROTATE_ZYX }; /*============================================================= * 3D Vector (homogeneous coordinates) */ typedef struct ScmVector4fRec { SCM_HEADER; float *v; } ScmVector4f; SCM_CLASS_DECL(Scm_Vector4fClass); #define SCM_CLASS_VECTOR4F (&Scm_Vector4fClass) #define SCM_VECTOR4FP(obj) SCM_XTYPEP(obj, SCM_CLASS_VECTOR4F) #define SCM_VECTOR4F(obj) ((ScmVector4f*)(obj)) #define SCM_VECTOR4F_D(obj) (SCM_VECTOR4F(obj)->v) #define SCM_VECTOR4F_REF(obj, i) (SCM_VECTOR4F_D(obj)[i]) extern ScmObj Scm_MakeVector4fv(const float d[]); extern ScmObj Scm_MakeVector4fvShared(float d[]); extern ScmObj Scm_MakeVector4f(float x, float y, float z, float w); extern ScmObj Scm_Vector4fSetv(ScmVector4f *v, float *d); extern ScmObj Scm_ListToVector4f(ScmObj l); extern ScmObj Scm_Vector4fToList(const ScmVector4f *v); /* SCM_VECTOR4F_DOT(float p[4], float q[4]) */ #define SCM_VECTOR4F_DOTV(p, q) (p[0]*q[0]+p[1]*q[1]+p[2]*q[2]+p[3]*q[3]) /* SCM_VECTOR4F_CROSS(float r[4], float p[4], float q[4]); r <- p x q */ #define SCM_VECTOR4F_CROSSV(r, p, q) \ (r[0] = p[1]*q[2]-p[2]*q[1], \ r[1] = p[2]*q[0]-p[0]*q[2], \ r[2] = p[0]*q[1]-p[1]*q[0], \ r[3] = 0.0) /* SCM_VECTOR4F_NORMV(float p[4]) */ #define SCM_VECTOR4F_NORMV(p) sqrtf(SCM_VECTOR4F_DOTV(p, p)) /* SCM_VECTOR4F_NORMALIZE(float p[4]) */ #define SCM_VECTOR4F_NORMALIZEV(p) \ do { \ float siz__ = SCM_VECTOR4F_NORMV(p); \ if (siz__ != 0.0) { \ SCM_VECTOR4F_OP(i__, p[i__] /= siz__); \ } \ } while (0) /* SCM_VECTOR4F_ADD(float r[4], p[4], q[4]) */ #define SCM_VECTOR4F_ADDV(r, p, q) \ SCM_VECTOR4F_OP(i__, r[i__] = p[i__] + q[i__]) /* SCM_VECTOR4F_SUB(float r[4], p[4], q[4]) */ #define SCM_VECTOR4F_SUBV(r, p, q) \ SCM_VECTOR4F_OP(i__, r[i__] = p[i__] - q[i__]) extern float Scm_Vector4fDot(const ScmVector4f *p, const ScmVector4f *q); extern float Scm_Vector4fDotv(const float *p, const float *q); extern ScmObj Scm_Vector4fCross(const ScmVector4f *p, const ScmVector4f *q); extern void Scm_Vector4fCrossv(float *r, const float *p, const float *q); extern ScmObj Scm_Vector4fNormalize(const ScmVector4f *p); extern void Scm_Vector4fNormalizev(float *p); extern ScmObj Scm_Vector4fNormalizeX(ScmVector4f *p); extern ScmObj Scm_Vector4fAdd(const ScmVector4f *p, const ScmVector4f *q); extern void Scm_Vector4fAddv(float *r, const float *p, const float *q); extern ScmObj Scm_Vector4fSub(const ScmVector4f *p, const ScmVector4f *q); extern void Scm_Vector4fSubv(float *r, const float *p, const float *q); /*============================================================= * VectorArray */ typedef struct ScmVector4fArrayRec { SCM_HEADER; int size; /* # of vectors */ float *v; } ScmVector4fArray; SCM_CLASS_DECL(Scm_Vector4fArrayClass); #define SCM_CLASS_VECTOR4F_ARRAY (&Scm_Vector4fArrayClass) #define SCM_VECTOR4F_ARRAY_P(obj) SCM_XTYPEP(obj, SCM_CLASS_VECTOR4F_ARRAY) #define SCM_VECTOR4F_ARRAY(obj) ((ScmVector4fArray*)(obj)) #define SCM_VECTOR4F_ARRAY_SIZE(obj) (SCM_VECTOR4F_ARRAY(obj)->size) #define SCM_VECTOR4F_ARRAY_D(obj) (SCM_VECTOR4F_ARRAY(obj)->v) extern ScmObj Scm_MakeVector4fArrayv(int nvecs, const float *init); extern ScmObj Scm_MakeVector4fArrayV(ScmF32Vector *src); #define SCM_VECTOR4F_ARRAY_REFV(obj, n) (&(SCM_VECTOR4F_ARRAY_D(obj)[(n)*4])) #define SCM_VECTOR4F_ARRAY_SET(obj, n, x, y, z, w) \ (SCM_VECTOR4F_ARRAY_D(obj)[(n)*4] = (x), \ SCM_VECTOR4F_ARRAY_D(obj)[(n)*4+1] = (y), \ SCM_VECTOR4F_ARRAY_D(obj)[(n)*4+2] = (z), \ SCM_VECTOR4F_ARRAY_D(obj)[(n)*4+3] = (w)) extern ScmObj Scm_Vector4fArrayRef(const ScmVector4fArray *obj, int n, ScmObj fallback); extern ScmObj Scm_Vector4fArrayRefShared(ScmVector4fArray *obj, int n, ScmObj fallback); extern float *Scm_Vector4fArrayRefv(ScmVector4fArray *obj, int n); extern void Scm_Vector4fArraySet(ScmVector4fArray *obj, int n, ScmVector4f *v); extern void Scm_Vector4fArraySetv(ScmVector4fArray *obj, int n, float d[]); /*============================================================= * Point is really a vector, with w = 1.0 by default */ typedef ScmVector4f ScmPoint4f; SCM_CLASS_DECL(Scm_Point4fClass); #define SCM_CLASS_POINT4F (&Scm_Point4fClass) #define SCM_POINT4FP(obj) SCM_XTYPEP(obj, SCM_CLASS_POINT4F) #define SCM_POINT4F(obj) ((ScmPoint4f*)(obj)) #define SCM_POINT4F_D(obj) (SCM_POINT4F(obj)->v) #define SCM_POINT4F_REF(obj, i) (SCM_POINT4F_D(obj)[i]) extern ScmObj Scm_MakePoint4f(float x, float y, float z, float w); extern ScmObj Scm_MakePoint4fv(const float d[]); extern ScmObj Scm_MakePoint4fvShared(float d[]); extern ScmObj Scm_Point4fSetv(ScmPoint4f *v, float *d); extern ScmObj Scm_ListToPoint4f(ScmObj l); extern ScmObj Scm_Point4fToList(const ScmPoint4f *p); extern ScmObj Scm_Point4fAdd(const ScmPoint4f *p, const ScmVector4f *q); extern ScmObj Scm_Point4fSub(const ScmPoint4f *p, const ScmObj q); /*============================================================= * PointArray */ typedef ScmVector4fArray ScmPoint4fArray; SCM_CLASS_DECL(Scm_Point4fArrayClass); #define SCM_CLASS_POINT4F_ARRAY (&Scm_Point4fArrayClass) #define SCM_POINT4F_ARRAY_P(obj) SCM_XTYPEP(obj, SCM_CLASS_POINT4F_ARRAY) #define SCM_POINT4F_ARRAY(obj) ((ScmPoint4fArray*)(obj)) #define SCM_POINT4F_ARRAY_SIZE(obj) (SCM_POINT4F_ARRAY(obj)->size) #define SCM_POINT4F_ARRAY_D(obj) (SCM_POINT4F_ARRAY(obj)->v) extern ScmObj Scm_MakePoint4fArrayv(int nvecs, const float *init); extern ScmObj Scm_MakePoint4fArrayV(ScmF32Vector *src); #define SCM_POINT4F_ARRAY_REFV(obj, n) (&(SCM_POINT4F_ARRAY_D(obj)[(n)*4])) #define SCM_POINT4F_ARRAY_SET(obj, n, x, y, z, w) \ (SCM_POINT4F_ARRAY_D(obj)[(n)*4] = (x), \ SCM_POINT4F_ARRAY_D(obj)[(n)*4+1] = (y), \ SCM_POINT4F_ARRAY_D(obj)[(n)*4+2] = (z), \ SCM_POINT4F_ARRAY_D(obj)[(n)*4+3] = (w)) extern ScmObj Scm_Point4fArrayRef(const ScmPoint4fArray *obj, int n, ScmObj fallback); extern ScmObj Scm_Point4fArrayRefShared(ScmPoint4fArray *obj, int n, ScmObj fallback); extern float *Scm_Point4fArrayRefv(ScmPoint4fArray *obj, int n); extern void Scm_Point4fArraySet(ScmPoint4fArray *obj, int n, ScmPoint4f *v); extern void Scm_Point4fArraySetv(ScmPoint4fArray *obj, int n, float d[]); /*============================================================= * Quaternions */ typedef struct ScmQuatfRec { SCM_HEADER; float *v; } ScmQuatf; SCM_CLASS_DECL(Scm_QuatfClass); #define SCM_CLASS_QUATF (&Scm_QuatfClass) #define SCM_QUATFP(obj) SCM_XTYPEP(obj, SCM_CLASS_QUATF) #define SCM_QUATF(obj) ((ScmQuatf*)(obj)) #define SCM_QUATF_D(obj) (SCM_QUATF(obj)->v) #define SCM_QUATF_NORMV(p) SCM_VECTOR4F_NORMV(p) /* SCM_QUATF_NORMALIZE(float p[4]) */ #define SCM_QUATF_NORMALIZEV(p) \ do { \ float siz__ = SCM_QUATF_NORMV(p); \ if (siz__ != 0.0) { \ SCM_VECTOR4F_OP(i__, p[i__] /= siz__); \ } else { \ p[0]=p[1]=p[2]=0.0; \ p[3]=1.0; \ } \ } while (0) #define SCM_QUATF_CONJUGATEV(q, p) \ do { \ q[0] = -p[0]; \ q[1] = -p[1]; \ q[2] = -p[2]; \ q[3] = p[3]; \ } while (0) extern ScmObj Scm_MakeQuatf(float x, float y, float z, float w); extern ScmObj Scm_MakeQuatfv(const float d[4]); extern ScmObj Scm_MakeQuatfvShared(float d[4]); extern ScmObj Scm_ListToQuatf(ScmObj l); extern ScmObj Scm_QuatfToList(const ScmQuatf *q); extern ScmObj Scm_QuatfSetv(ScmQuatf *q, const float d[4]); extern ScmObj Scm_QuatfAdd(const ScmQuatf *p, const ScmQuatf *q); extern void Scm_QuatfAddv(float *r, const float *p, const float *q); extern ScmObj Scm_QuatfSub(const ScmQuatf *p, const ScmQuatf *q); extern void Scm_QuatfSubv(float *r, const float *p, const float *q); extern ScmObj Scm_QuatfMul(const ScmQuatf *p, const ScmQuatf *q); extern void Scm_QuatfMulv(float *r, const float *p, const float *q); extern ScmObj Scm_QuatfNormalize(const ScmQuatf *q); extern ScmObj Scm_QuatfNormalizeX(ScmQuatf *q); /* q[] must be a unit quaternion */ extern void Scm_QuatfToMatrix4fv(float *m, const float *q); /* m[] must be an orthogonal matrix */ extern void Scm_Matrix4fToQuatfv(float *q, const float *m); /* q[] must be a unit quaternion */ extern void Scm_QuatfTransformv(float r[], const float q[], const float v[]); /* p[] and q[] must be unit quaternions */ extern void Scm_QuatfSlerp(float *r, const float *p, const float *q, float t); /* v[], v1[], v2[], w[], w1[] and w2[] must be unit vectors */ extern void Scm_VectorsToQuatfv(float *r, const float *v, const float *w); extern void Scm_AxesToQuatfv(float r[], const float v1[], const float v2[], const float w1[], const float w2[]); /*============================================================= * Matrix */ /* 4x4 matrix of floats. The elements is stored in the same order * as OpenGL, that is, * * M(0,0) = d[0] M(0,1) = d[4] M(0,2) = d[8] M(0,3) = d[12] * M(1,0) = d[1] M(1,1) = d[5] M(1,2) = d[9] M(1,3) = d[13] * M(2,0) = d[2] M(2,1) = d[6] M(2,2) = d[10] M(2,3) = d[14] * M(3,0) = d[3] M(3,1) = d[7] M(3,2) = d[11] M(3,3) = d[15] */ typedef struct ScmMatrix4fRec { SCM_HEADER; float *v; } ScmMatrix4f; SCM_CLASS_DECL(Scm_Matrix4fClass); #define SCM_CLASS_MATRIX4F (&Scm_Matrix4fClass) #define SCM_MATRIX4FP(obj) SCM_XTYPEP(obj, SCM_CLASS_MATRIX4F) #define SCM_MATRIX4F(obj) ((ScmMatrix4f*)(obj)) #define SCM_MATRIX4F_D(obj) (SCM_MATRIX4F(obj)->v) #define SCM_MATRIX4F_REF(obj, i, j) (SCM_MATRIX4F_D(obj)[(i)+(j)*4]) #define SCM_MATRIX4F_SET(obj, i, j, v) (SCM_MATRIX4F_D(obj)[(i)+(j)*4] = (v)) #define SCM_MATRIX4F_COLVEC(obj, i) (SCM_MATRIX4F_D(obj) + (i)*4) extern ScmObj Scm_MakeMatrix4fv(const float *d); extern ScmObj Scm_MakeMatrix4fvShared(float *d); extern ScmObj Scm_Matrix4fSetv(ScmMatrix4f *m, float *d); extern void Scm_Matrix4fSetIdentityv(float *p); extern ScmObj Scm_ListToMatrix4f(ScmObj l); extern ScmObj Scm_Matrix4fToList(const ScmMatrix4f *m); extern void Scm_Matrix4fMulMatrix4fv(float *, const float *, const float*); extern ScmObj Scm_Matrix4fMulMatrix4f(const ScmMatrix4f *, const ScmMatrix4f *); extern void Scm_Matrix4fMulVector4fv(float *, const float *m, const float *v); extern ScmObj Scm_Matrix4fMulVector4f(const ScmMatrix4f *, const ScmVector4f *); extern ScmObj Scm_Matrix4fMulPoint4f(const ScmMatrix4f *, const ScmPoint4f *); extern void Scm_Matrix4fScalev(float *, double f); extern ScmObj Scm_Matrix4fScale(const ScmMatrix4f *, double f); extern void Scm_Matrix4fTransposev(float *r, const float *m); extern float Scm_Matrix4fDeterminantv(const float *m); extern int Scm_Matrix4fInversev(float *r, const float *m); extern void Scm_TranslationToMatrix4fv(float *m, const float *t); extern void Scm_RotationToMatrix4fv(float *m, const float *v, float phi); extern void Scm_ScaleToMatrix4fv(float *m, const float *s); extern void Scm_TRSToMatrix4fv(float *m, const float *t, const float *v, float phi, const float *s); extern void Scm_TQSToMatrix4fv(float *m, const float *t, const float *q, const float *s); extern void Scm_EulerToMatrix4fv(float m[], float x, float y, float z, int order); /* Decompose matrix m to translation vector T, rotation matrix R, shear vector H, and scale vector S. */ extern int Scm_Matrix4fDecomposev(const float m[], float T[], float R[], float H[], float S[]); /* Recover rotation from orthogonal matrix */ extern float Scm_Matrix4fToRotationv(const float m[], float v[]); /* Factorize Euler angles from orthogonal matrix */ extern void Scm_Matrix4fToEuler(const float m[], float xyz[], int order); #endif /* GAUCHE_MATH3D_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/extract-abi.scm�����������������������������������������������������������������0000644�0000764�0000764�00000077713�11533026402�016064� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; extract-abi.scm - Extract ABI of GL extension ;;; ;;; Copyright (c) 2005-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: ;;; ;;; 1. Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; 2. Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in the ;;; documentation and/or other materials provided with the distribution. ;;; ;;; 3. Neither the name of the authors nor the names of its contributors ;;; may be used to endorse or promote products derived from this ;;; software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; ;;; $Id: extract-abi.scm,v 1.4 2008-06-04 11:50:01 shirok Exp $ ;;; ;; We no longer count on glext.h on the target platform, since ;; it may be out of date and it is too much hassle to support ;; all variations. Instead of putting #ifdef's here and there, ;; we shifted everthing to runtime---so we include all the ;; declarations of the most recent GL extension ABI, and the ;; code queries availability of each of them at runtime. ;; ;; This program scans glext.h as the authoritative source of GL ;; extension ABI. We can use the most recent version from here: ;; http://oss.sgi.com/projects/ogl-sample/ABI/ ;; ;; It generates glext-abi.scm, which contains necessary information ;; in S-expressions. ;; ;; The format of glext-abi.scm is as follows. ;; ;; * Constants ;; ;; (define-constant GL_UNSIGNED_BYTE_3_3_2 #x8032) ;; ;; * Extensions ;; ;; (define-extension-name GL_ARB_fragment_program) ;; ;; * Entry points ;; ;; (define-entry-point glBindProgramNV "... typedef ...") ;; (use srfi-1) (use srfi-13) ;; Predefined OpenGL 1.0 and 1.1 symbols (define *gl-syms* '( ;; Boolean values (GL_FALSE . #x0) (GL_TRUE . #x1) ;; Data types (GL_BYTE . #x1400) (GL_UNSIGNED_BYTE . #x1401) (GL_SHORT . #x1402) (GL_UNSIGNED_SHORT . #x1403) (GL_INT . #x1404) (GL_UNSIGNED_INT . #x1405) (GL_FLOAT . #x1406) (GL_DOUBLE . #x140A) (GL_2_BYTES . #x1407) (GL_3_BYTES . #x1408) (GL_4_BYTES . #x1409) ;; Primitives (GL_POINTS . #x0000) (GL_LINES . #x0001) (GL_LINE_LOOP . #x0002) (GL_LINE_STRIP . #x0003) (GL_TRIANGLES . #x0004) (GL_TRIANGLE_STRIP . #x0005) (GL_TRIANGLE_FAN . #x0006) (GL_QUADS . #x0007) (GL_QUAD_STRIP . #x0008) (GL_POLYGON . #x0009) ;; Vertex Arrays (GL_VERTEX_ARRAY . #x8074) (GL_NORMAL_ARRAY . #x8075) (GL_COLOR_ARRAY . #x8076) (GL_INDEX_ARRAY . #x8077) (GL_TEXTURE_COORD_ARRAY . #x8078) (GL_EDGE_FLAG_ARRAY . #x8079) (GL_VERTEX_ARRAY_SIZE . #x807A) (GL_VERTEX_ARRAY_TYPE . #x807B) (GL_VERTEX_ARRAY_STRIDE . #x807C) (GL_NORMAL_ARRAY_TYPE . #x807E) (GL_NORMAL_ARRAY_STRIDE . #x807F) (GL_COLOR_ARRAY_SIZE . #x8081) (GL_COLOR_ARRAY_TYPE . #x8082) (GL_COLOR_ARRAY_STRIDE . #x8083) (GL_INDEX_ARRAY_TYPE . #x8085) (GL_INDEX_ARRAY_STRIDE . #x8086) (GL_TEXTURE_COORD_ARRAY_SIZE . #x8088) (GL_TEXTURE_COORD_ARRAY_TYPE . #x8089) (GL_TEXTURE_COORD_ARRAY_STRIDE . #x808A) (GL_EDGE_FLAG_ARRAY_STRIDE . #x808C) (GL_VERTEX_ARRAY_POINTER . #x808E) (GL_NORMAL_ARRAY_POINTER . #x808F) (GL_COLOR_ARRAY_POINTER . #x8090) (GL_INDEX_ARRAY_POINTER . #x8091) (GL_TEXTURE_COORD_ARRAY_POINTER . #x8092) (GL_EDGE_FLAG_ARRAY_POINTER . #x8093) (GL_V2F . #x2A20) (GL_V3F . #x2A21) (GL_C4UB_V2F . #x2A22) (GL_C4UB_V3F . #x2A23) (GL_C3F_V3F . #x2A24) (GL_N3F_V3F . #x2A25) (GL_C4F_N3F_V3F . #x2A26) (GL_T2F_V3F . #x2A27) (GL_T4F_V4F . #x2A28) (GL_T2F_C4UB_V3F . #x2A29) (GL_T2F_C3F_V3F . #x2A2A) (GL_T2F_N3F_V3F . #x2A2B) (GL_T2F_C4F_N3F_V3F . #x2A2C) (GL_T4F_C4F_N3F_V4F . #x2A2D) ;; Matrix Mode (GL_MATRIX_MODE . #x0BA0) (GL_MODELVIEW . #x1700) (GL_PROJECTION . #x1701) (GL_TEXTURE . #x1702) ;; Points (GL_POINT_SMOOTH . #x0B10) (GL_POINT_SIZE . #x0B11) (GL_POINT_SIZE_GRANULARITY . #x0B13) (GL_POINT_SIZE_RANGE . #x0B12) ;; Lines (GL_LINE_SMOOTH . #x0B20) (GL_LINE_STIPPLE . #x0B24) (GL_LINE_STIPPLE_PATTERN . #x0B25) (GL_LINE_STIPPLE_REPEAT . #x0B26) (GL_LINE_WIDTH . #x0B21) (GL_LINE_WIDTH_GRANULARITY . #x0B23) (GL_LINE_WIDTH_RANGE . #x0B22) ;; Polygons (GL_POINT . #x1B00) (GL_LINE . #x1B01) (GL_FILL . #x1B02) (GL_CW . #x0900) (GL_CCW . #x0901) (GL_FRONT . #x0404) (GL_BACK . #x0405) (GL_POLYGON_MODE . #x0B40) (GL_POLYGON_SMOOTH . #x0B41) (GL_POLYGON_STIPPLE . #x0B42) (GL_EDGE_FLAG . #x0B43) (GL_CULL_FACE . #x0B44) (GL_CULL_FACE_MODE . #x0B45) (GL_FRONT_FACE . #x0B46) (GL_POLYGON_OFFSET_FACTOR . #x8038) (GL_POLYGON_OFFSET_UNITS . #x2A00) (GL_POLYGON_OFFSET_POINT . #x2A01) (GL_POLYGON_OFFSET_LINE . #x2A02) (GL_POLYGON_OFFSET_FILL . #x8037) ;; Display Lists (GL_COMPILE . #x1300) (GL_COMPILE_AND_EXECUTE . #x1301) (GL_LIST_BASE . #x0B32) (GL_LIST_INDEX . #x0B33) (GL_LIST_MODE . #x0B30) ;; Depth buffer (GL_NEVER . #x0200) (GL_LESS . #x0201) (GL_EQUAL . #x0202) (GL_LEQUAL . #x0203) (GL_GREATER . #x0204) (GL_NOTEQUAL . #x0205) (GL_GEQUAL . #x0206) (GL_ALWAYS . #x0207) (GL_DEPTH_TEST . #x0B71) (GL_DEPTH_BITS . #x0D56) (GL_DEPTH_CLEAR_VALUE . #x0B73) (GL_DEPTH_FUNC . #x0B74) (GL_DEPTH_RANGE . #x0B70) (GL_DEPTH_WRITEMASK . #x0B72) (GL_DEPTH_COMPONENT . #x1902) ;; Lighting (GL_LIGHTING . #x0B50) (GL_LIGHT0 . #x4000) (GL_LIGHT1 . #x4001) (GL_LIGHT2 . #x4002) (GL_LIGHT3 . #x4003) (GL_LIGHT4 . #x4004) (GL_LIGHT5 . #x4005) (GL_LIGHT6 . #x4006) (GL_LIGHT7 . #x4007) (GL_SPOT_EXPONENT . #x1205) (GL_SPOT_CUTOFF . #x1206) (GL_CONSTANT_ATTENUATION . #x1207) (GL_LINEAR_ATTENUATION . #x1208) (GL_QUADRATIC_ATTENUATION . #x1209) (GL_AMBIENT . #x1200) (GL_DIFFUSE . #x1201) (GL_SPECULAR . #x1202) (GL_SHININESS . #x1601) (GL_EMISSION . #x1600) (GL_POSITION . #x1203) (GL_SPOT_DIRECTION . #x1204) (GL_AMBIENT_AND_DIFFUSE . #x1602) (GL_COLOR_INDEXES . #x1603) (GL_LIGHT_MODEL_TWO_SIDE . #x0B52) (GL_LIGHT_MODEL_LOCAL_VIEWER . #x0B51) (GL_LIGHT_MODEL_AMBIENT . #x0B53) (GL_FRONT_AND_BACK . #x0408) (GL_SHADE_MODEL . #x0B54) (GL_FLAT . #x1D00) (GL_SMOOTH . #x1D01) (GL_COLOR_MATERIAL . #x0B57) (GL_COLOR_MATERIAL_FACE . #x0B55) (GL_COLOR_MATERIAL_PARAMETER . #x0B56) (GL_NORMALIZE . #x0BA1) ;; User clipping planes (GL_CLIP_PLANE0 . #x3000) (GL_CLIP_PLANE1 . #x3001) (GL_CLIP_PLANE2 . #x3002) (GL_CLIP_PLANE3 . #x3003) (GL_CLIP_PLANE4 . #x3004) (GL_CLIP_PLANE5 . #x3005) ;; Accumulation buffer (GL_ACCUM_RED_BITS . #x0D58) (GL_ACCUM_GREEN_BITS . #x0D59) (GL_ACCUM_BLUE_BITS . #x0D5A) (GL_ACCUM_ALPHA_BITS . #x0D5B) (GL_ACCUM_CLEAR_VALUE . #x0B80) (GL_ACCUM . #x0100) (GL_ADD . #x0104) (GL_LOAD . #x0101) (GL_MULT . #x0103) (GL_RETURN . #x0102) ;; Alpha testing (GL_ALPHA_TEST . #x0BC0) (GL_ALPHA_TEST_REF . #x0BC2) (GL_ALPHA_TEST_FUNC . #x0BC1) ;; Blending (GL_BLEND . #x0BE2) (GL_BLEND_SRC . #x0BE1) (GL_BLEND_DST . #x0BE0) (GL_ZERO . #x0) (GL_ONE . #x1) (GL_SRC_COLOR . #x0300) (GL_ONE_MINUS_SRC_COLOR . #x0301) (GL_SRC_ALPHA . #x0302) (GL_ONE_MINUS_SRC_ALPHA . #x0303) (GL_DST_ALPHA . #x0304) (GL_ONE_MINUS_DST_ALPHA . #x0305) (GL_DST_COLOR . #x0306) (GL_ONE_MINUS_DST_COLOR . #x0307) (GL_SRC_ALPHA_SATURATE . #x0308) (GL_CONSTANT_COLOR . #x8001) (GL_ONE_MINUS_CONSTANT_COLOR . #x8002) (GL_CONSTANT_ALPHA . #x8003) (GL_ONE_MINUS_CONSTANT_ALPHA . #x8004) ;; Render Mode (GL_FEEDBACK . #x1C01) (GL_RENDER . #x1C00) (GL_SELECT . #x1C02) ;; Feedback (GL_2D . #x0600) (GL_3D . #x0601) (GL_3D_COLOR . #x0602) (GL_3D_COLOR_TEXTURE . #x0603) (GL_4D_COLOR_TEXTURE . #x0604) (GL_POINT_TOKEN . #x0701) (GL_LINE_TOKEN . #x0702) (GL_LINE_RESET_TOKEN . #x0707) (GL_POLYGON_TOKEN . #x0703) (GL_BITMAP_TOKEN . #x0704) (GL_DRAW_PIXEL_TOKEN . #x0705) (GL_COPY_PIXEL_TOKEN . #x0706) (GL_PASS_THROUGH_TOKEN . #x0700) (GL_FEEDBACK_BUFFER_POINTER . #x0DF0) (GL_FEEDBACK_BUFFER_SIZE . #x0DF1) (GL_FEEDBACK_BUFFER_TYPE . #x0DF2) ;; Selection (GL_SELECTION_BUFFER_POINTER . #x0DF3) (GL_SELECTION_BUFFER_SIZE . #x0DF4) ;; Fog (GL_FOG . #x0B60) (GL_FOG_MODE . #x0B65) (GL_FOG_DENSITY . #x0B62) (GL_FOG_COLOR . #x0B66) (GL_FOG_INDEX . #x0B61) (GL_FOG_START . #x0B63) (GL_FOG_END . #x0B64) (GL_LINEAR . #x2601) (GL_EXP . #x0800) (GL_EXP2 . #x0801) ;; Logic Ops (GL_LOGIC_OP . #x0BF1) (GL_INDEX_LOGIC_OP . #x0BF1) (GL_COLOR_LOGIC_OP . #x0BF2) (GL_LOGIC_OP_MODE . #x0BF0) (GL_CLEAR . #x1500) (GL_SET . #x150F) (GL_COPY . #x1503) (GL_COPY_INVERTED . #x150C) (GL_NOOP . #x1505) (GL_INVERT . #x150A) (GL_AND . #x1501) (GL_NAND . #x150E) (GL_OR . #x1507) (GL_NOR . #x1508) (GL_XOR . #x1506) (GL_EQUIV . #x1509) (GL_AND_REVERSE . #x1502) (GL_AND_INVERTED . #x1504) (GL_OR_REVERSE . #x150B) (GL_OR_INVERTED . #x150D) ;; Stencil (GL_STENCIL_TEST . #x0B90) (GL_STENCIL_WRITEMASK . #x0B98) (GL_STENCIL_BITS . #x0D57) (GL_STENCIL_FUNC . #x0B92) (GL_STENCIL_VALUE_MASK . #x0B93) (GL_STENCIL_REF . #x0B97) (GL_STENCIL_FAIL . #x0B94) (GL_STENCIL_PASS_DEPTH_PASS . #x0B96) (GL_STENCIL_PASS_DEPTH_FAIL . #x0B95) (GL_STENCIL_CLEAR_VALUE . #x0B91) (GL_STENCIL_INDEX . #x1901) (GL_KEEP . #x1E00) (GL_REPLACE . #x1E01) (GL_INCR . #x1E02) (GL_DECR . #x1E03) ;; Buffers, Pixel Drawing/Reading (GL_NONE . #x0) (GL_LEFT . #x0406) (GL_RIGHT . #x0407) ;;GL_FRONT . #x0404 ;;GL_BACK . #x0405 ;;GL_FRONT_AND_BACK . #x0408 (GL_FRONT_LEFT . #x0400) (GL_FRONT_RIGHT . #x0401) (GL_BACK_LEFT . #x0402) (GL_BACK_RIGHT . #x0403) (GL_AUX0 . #x0409) (GL_AUX1 . #x040A) (GL_AUX2 . #x040B) (GL_AUX3 . #x040C) (GL_COLOR_INDEX . #x1900) (GL_RED . #x1903) (GL_GREEN . #x1904) (GL_BLUE . #x1905) (GL_ALPHA . #x1906) (GL_LUMINANCE . #x1909) (GL_LUMINANCE_ALPHA . #x190A) (GL_ALPHA_BITS . #x0D55) (GL_RED_BITS . #x0D52) (GL_GREEN_BITS . #x0D53) (GL_BLUE_BITS . #x0D54) (GL_INDEX_BITS . #x0D51) (GL_SUBPIXEL_BITS . #x0D50) (GL_AUX_BUFFERS . #x0C00) (GL_READ_BUFFER . #x0C02) (GL_DRAW_BUFFER . #x0C01) (GL_DOUBLEBUFFER . #x0C32) (GL_STEREO . #x0C33) (GL_BITMAP . #x1A00) (GL_COLOR . #x1800) (GL_DEPTH . #x1801) (GL_STENCIL . #x1802) (GL_DITHER . #x0BD0) (GL_RGB . #x1907) (GL_RGBA . #x1908) ;; Implementation limits (GL_MAX_LIST_NESTING . #x0B31) (GL_MAX_ATTRIB_STACK_DEPTH . #x0D35) (GL_MAX_MODELVIEW_STACK_DEPTH . #x0D36) (GL_MAX_NAME_STACK_DEPTH . #x0D37) (GL_MAX_PROJECTION_STACK_DEPTH . #x0D38) (GL_MAX_TEXTURE_STACK_DEPTH . #x0D39) (GL_MAX_EVAL_ORDER . #x0D30) (GL_MAX_LIGHTS . #x0D31) (GL_MAX_CLIP_PLANES . #x0D32) (GL_MAX_TEXTURE_SIZE . #x0D33) (GL_MAX_PIXEL_MAP_TABLE . #x0D34) (GL_MAX_VIEWPORT_DIMS . #x0D3A) (GL_MAX_CLIENT_ATTRIB_STACK_DEPTH . #x0D3B) ;; Gets (GL_ATTRIB_STACK_DEPTH . #x0BB0) (GL_CLIENT_ATTRIB_STACK_DEPTH . #x0BB1) (GL_COLOR_CLEAR_VALUE . #x0C22) (GL_COLOR_WRITEMASK . #x0C23) (GL_CURRENT_INDEX . #x0B01) (GL_CURRENT_COLOR . #x0B00) (GL_CURRENT_NORMAL . #x0B02) (GL_CURRENT_RASTER_COLOR . #x0B04) (GL_CURRENT_RASTER_DISTANCE . #x0B09) (GL_CURRENT_RASTER_INDEX . #x0B05) (GL_CURRENT_RASTER_POSITION . #x0B07) (GL_CURRENT_RASTER_TEXTURE_COORDS . #x0B06) (GL_CURRENT_RASTER_POSITION_VALID . #x0B08) (GL_CURRENT_TEXTURE_COORDS . #x0B03) (GL_INDEX_CLEAR_VALUE . #x0C20) (GL_INDEX_MODE . #x0C30) (GL_INDEX_WRITEMASK . #x0C21) (GL_MODELVIEW_MATRIX . #x0BA6) (GL_MODELVIEW_STACK_DEPTH . #x0BA3) (GL_NAME_STACK_DEPTH . #x0D70) (GL_PROJECTION_MATRIX . #x0BA7) (GL_PROJECTION_STACK_DEPTH . #x0BA4) (GL_RENDER_MODE . #x0C40) (GL_RGBA_MODE . #x0C31) (GL_TEXTURE_MATRIX . #x0BA8) (GL_TEXTURE_STACK_DEPTH . #x0BA5) (GL_VIEWPORT . #x0BA2) ;; Evaluators (GL_AUTO_NORMAL . #x0D80) (GL_MAP1_COLOR_4 . #x0D90) (GL_MAP1_GRID_DOMAIN . #x0DD0) (GL_MAP1_GRID_SEGMENTS . #x0DD1) (GL_MAP1_INDEX . #x0D91) (GL_MAP1_NORMAL . #x0D92) (GL_MAP1_TEXTURE_COORD_1 . #x0D93) (GL_MAP1_TEXTURE_COORD_2 . #x0D94) (GL_MAP1_TEXTURE_COORD_3 . #x0D95) (GL_MAP1_TEXTURE_COORD_4 . #x0D96) (GL_MAP1_VERTEX_3 . #x0D97) (GL_MAP1_VERTEX_4 . #x0D98) (GL_MAP2_COLOR_4 . #x0DB0) (GL_MAP2_GRID_DOMAIN . #x0DD2) (GL_MAP2_GRID_SEGMENTS . #x0DD3) (GL_MAP2_INDEX . #x0DB1) (GL_MAP2_NORMAL . #x0DB2) (GL_MAP2_TEXTURE_COORD_1 . #x0DB3) (GL_MAP2_TEXTURE_COORD_2 . #x0DB4) (GL_MAP2_TEXTURE_COORD_3 . #x0DB5) (GL_MAP2_TEXTURE_COORD_4 . #x0DB6) (GL_MAP2_VERTEX_3 . #x0DB7) (GL_MAP2_VERTEX_4 . #x0DB8) (GL_COEFF . #x0A00) (GL_DOMAIN . #x0A02) (GL_ORDER . #x0A01) ;; Hints (GL_FOG_HINT . #x0C54) (GL_LINE_SMOOTH_HINT . #x0C52) (GL_PERSPECTIVE_CORRECTION_HINT . #x0C50) (GL_POINT_SMOOTH_HINT . #x0C51) (GL_POLYGON_SMOOTH_HINT . #x0C53) (GL_DONT_CARE . #x1100) (GL_FASTEST . #x1101) (GL_NICEST . #x1102) ;; Scissor box (GL_SCISSOR_TEST . #x0C11) (GL_SCISSOR_BOX . #x0C10) ;; Pixel Mode / Transfer (GL_MAP_COLOR . #x0D10) (GL_MAP_STENCIL . #x0D11) (GL_INDEX_SHIFT . #x0D12) (GL_INDEX_OFFSET . #x0D13) (GL_RED_SCALE . #x0D14) (GL_RED_BIAS . #x0D15) (GL_GREEN_SCALE . #x0D18) (GL_GREEN_BIAS . #x0D19) (GL_BLUE_SCALE . #x0D1A) (GL_BLUE_BIAS . #x0D1B) (GL_ALPHA_SCALE . #x0D1C) (GL_ALPHA_BIAS . #x0D1D) (GL_DEPTH_SCALE . #x0D1E) (GL_DEPTH_BIAS . #x0D1F) (GL_PIXEL_MAP_S_TO_S_SIZE . #x0CB1) (GL_PIXEL_MAP_I_TO_I_SIZE . #x0CB0) (GL_PIXEL_MAP_I_TO_R_SIZE . #x0CB2) (GL_PIXEL_MAP_I_TO_G_SIZE . #x0CB3) (GL_PIXEL_MAP_I_TO_B_SIZE . #x0CB4) (GL_PIXEL_MAP_I_TO_A_SIZE . #x0CB5) (GL_PIXEL_MAP_R_TO_R_SIZE . #x0CB6) (GL_PIXEL_MAP_G_TO_G_SIZE . #x0CB7) (GL_PIXEL_MAP_B_TO_B_SIZE . #x0CB8) (GL_PIXEL_MAP_A_TO_A_SIZE . #x0CB9) (GL_PIXEL_MAP_S_TO_S . #x0C71) (GL_PIXEL_MAP_I_TO_I . #x0C70) (GL_PIXEL_MAP_I_TO_R . #x0C72) (GL_PIXEL_MAP_I_TO_G . #x0C73) (GL_PIXEL_MAP_I_TO_B . #x0C74) (GL_PIXEL_MAP_I_TO_A . #x0C75) (GL_PIXEL_MAP_R_TO_R . #x0C76) (GL_PIXEL_MAP_G_TO_G . #x0C77) (GL_PIXEL_MAP_B_TO_B . #x0C78) (GL_PIXEL_MAP_A_TO_A . #x0C79) (GL_PACK_ALIGNMENT . #x0D05) (GL_PACK_LSB_FIRST . #x0D01) (GL_PACK_ROW_LENGTH . #x0D02) (GL_PACK_SKIP_PIXELS . #x0D04) (GL_PACK_SKIP_ROWS . #x0D03) (GL_PACK_SWAP_BYTES . #x0D00) (GL_UNPACK_ALIGNMENT . #x0CF5) (GL_UNPACK_LSB_FIRST . #x0CF1) (GL_UNPACK_ROW_LENGTH . #x0CF2) (GL_UNPACK_SKIP_PIXELS . #x0CF4) (GL_UNPACK_SKIP_ROWS . #x0CF3) (GL_UNPACK_SWAP_BYTES . #x0CF0) (GL_ZOOM_X . #x0D16) (GL_ZOOM_Y . #x0D17) ;; Texture mapping (GL_TEXTURE_ENV . #x2300) (GL_TEXTURE_ENV_MODE . #x2200) (GL_TEXTURE_1D . #x0DE0) (GL_TEXTURE_2D . #x0DE1) (GL_TEXTURE_WRAP_S . #x2802) (GL_TEXTURE_WRAP_T . #x2803) (GL_TEXTURE_MAG_FILTER . #x2800) (GL_TEXTURE_MIN_FILTER . #x2801) (GL_TEXTURE_ENV_COLOR . #x2201) (GL_TEXTURE_GEN_S . #x0C60) (GL_TEXTURE_GEN_T . #x0C61) (GL_TEXTURE_GEN_MODE . #x2500) (GL_TEXTURE_BORDER_COLOR . #x1004) (GL_TEXTURE_WIDTH . #x1000) (GL_TEXTURE_HEIGHT . #x1001) (GL_TEXTURE_BORDER . #x1005) (GL_TEXTURE_COMPONENTS . #x1003) (GL_TEXTURE_RED_SIZE . #x805C) (GL_TEXTURE_GREEN_SIZE . #x805D) (GL_TEXTURE_BLUE_SIZE . #x805E) (GL_TEXTURE_ALPHA_SIZE . #x805F) (GL_TEXTURE_LUMINANCE_SIZE . #x8060) (GL_TEXTURE_INTENSITY_SIZE . #x8061) (GL_NEAREST_MIPMAP_NEAREST . #x2700) (GL_NEAREST_MIPMAP_LINEAR . #x2702) (GL_LINEAR_MIPMAP_NEAREST . #x2701) (GL_LINEAR_MIPMAP_LINEAR . #x2703) (GL_OBJECT_LINEAR . #x2401) (GL_OBJECT_PLANE . #x2501) (GL_EYE_LINEAR . #x2400) (GL_EYE_PLANE . #x2502) (GL_SPHERE_MAP . #x2402) (GL_DECAL . #x2101) (GL_MODULATE . #x2100) (GL_NEAREST . #x2600) (GL_REPEAT . #x2901) (GL_CLAMP . #x2900) (GL_S . #x2000) (GL_T . #x2001) (GL_R . #x2002) (GL_Q . #x2003) (GL_TEXTURE_GEN_R . #x0C62) (GL_TEXTURE_GEN_Q . #x0C63) ;; Utility (GL_VENDOR . #x1F00) (GL_RENDERER . #x1F01) (GL_VERSION . #x1F02) (GL_EXTENSIONS . #x1F03) ;; Errors (GL_NO_ERROR . #x0) (GL_INVALID_VALUE . #x0501) (GL_INVALID_ENUM . #x0500) (GL_INVALID_OPERATION . #x0502) (GL_STACK_OVERFLOW . #x0503) (GL_STACK_UNDERFLOW . #x0504) (GL_OUT_OF_MEMORY . #x0505) ;; glPush/PopAttrib bits (GL_CURRENT_BIT . #x00000001) (GL_POINT_BIT . #x00000002) (GL_LINE_BIT . #x00000004) (GL_POLYGON_BIT . #x00000008) (GL_POLYGON_STIPPLE_BIT . #x00000010) (GL_PIXEL_MODE_BIT . #x00000020) (GL_LIGHTING_BIT . #x00000040) (GL_FOG_BIT . #x00000080) (GL_DEPTH_BUFFER_BIT . #x00000100) (GL_ACCUM_BUFFER_BIT . #x00000200) (GL_STENCIL_BUFFER_BIT . #x00000400) (GL_VIEWPORT_BIT . #x00000800) (GL_TRANSFORM_BIT . #x00001000) (GL_ENABLE_BIT . #x00002000) (GL_COLOR_BUFFER_BIT . #x00004000) (GL_HINT_BIT . #x00008000) (GL_EVAL_BIT . #x00010000) (GL_LIST_BIT . #x00020000) (GL_TEXTURE_BIT . #x00040000) (GL_SCISSOR_BIT . #x00080000) (GL_ALL_ATTRIB_BITS . #x000FFFFF) ;; OpenGL 1.1 (GL_PROXY_TEXTURE_1D . #x8063) (GL_PROXY_TEXTURE_2D . #x8064) (GL_TEXTURE_PRIORITY . #x8066) (GL_TEXTURE_RESIDENT . #x8067) (GL_TEXTURE_BINDING_1D . #x8068) (GL_TEXTURE_BINDING_2D . #x8069) (GL_TEXTURE_INTERNAL_FORMAT . #x1003) (GL_ALPHA4 . #x803B) (GL_ALPHA8 . #x803C) (GL_ALPHA12 . #x803D) (GL_ALPHA16 . #x803E) (GL_LUMINANCE4 . #x803F) (GL_LUMINANCE8 . #x8040) (GL_LUMINANCE12 . #x8041) (GL_LUMINANCE16 . #x8042) (GL_LUMINANCE4_ALPHA4 . #x8043) (GL_LUMINANCE6_ALPHA2 . #x8044) (GL_LUMINANCE8_ALPHA8 . #x8045) (GL_LUMINANCE12_ALPHA4 . #x8046) (GL_LUMINANCE12_ALPHA12 . #x8047) (GL_LUMINANCE16_ALPHA16 . #x8048) (GL_INTENSITY . #x8049) (GL_INTENSITY4 . #x804A) (GL_INTENSITY8 . #x804B) (GL_INTENSITY12 . #x804C) (GL_INTENSITY16 . #x804D) (GL_R3_G3_B2 . #x2A10) (GL_RGB4 . #x804F) (GL_RGB5 . #x8050) (GL_RGB8 . #x8051) (GL_RGB10 . #x8052) (GL_RGB12 . #x8053) (GL_RGB16 . #x8054) (GL_RGBA2 . #x8055) (GL_RGBA4 . #x8056) (GL_RGB5_A1 . #x8057) (GL_RGBA8 . #x8058) (GL_RGB10_A2 . #x8059) (GL_RGBA12 . #x805A) (GL_RGBA16 . #x805B) (GL_CLIENT_PIXEL_STORE_BIT . #x00000001) (GL_CLIENT_VERTEX_ARRAY_BIT . #x00000002) (GL_ALL_CLIENT_ATTRIB_BITS . #xFFFFFFFF) (GL_CLIENT_ALL_ATTRIB_BITS . #xFFFFFFFF) )) (define (scan) (let loop ((x '()) ;; extensions name (c (reverse *gl-syms*)) ;; constants [(name . value)] (p '())) ;; entry points [(name PFNNAMEPROC . typedef)] (rxmatch-case (read-line) (test eof-object? (values (reverse x) (reverse c) (reverse p))) (#/^#ifndef\s+(GL_\w+)/ (#f extname) (let1 en (string->symbol extname) (if (memq en x) (loop x c p) (loop (cons (string->symbol extname) x) c p)))) (#/^#define\s+(GL_\w+)\s+(?:0x([\da-fA-F]+)|(\d+)|(\w+))/ (#f cname xval dval ref) (let1 cn (string->symbol cname) (if (or (assq cn c) (memq cn x)) (loop x c p) (let1 const (cons cn (cond (xval (string->number xval 16)) (dval (string->number dval)) (else (string->symbol ref)))) (loop x (cons const c) p))))) (#/^(?:extern|GLAPI)\s+[\w*]+\s+(?:APIENTRY\s+)?(gl\w+)/ (#f fname) (loop x c (cons (list fname (format "PFN~aPROC" (string-upcase fname))) p))) (#/^typedef.*(PFN.*PROC).*/ (typedef name) (let1 apientry (find (lambda (e) (string=? name (cadr e))) p) (when apientry (set-cdr! (cdr apientry) typedef)) (loop x c p))) (else (loop x c p))))) (define (emit extensions constants entry-points) (print ";; This file should reflect the newest OpenGL extension ABI") (print ";; You can regenarate this by feeding glext.h to extract-abi.scm") (print ";; To obtain the newest glext.h, see") (print ";; http://oss.sgi.com/projects/ogl-sample/ABI/") (print) (print ";; Extensions") (dolist (e extensions) (format #t "(define-extension-name ~a)\n" e)) (print) (print ";; Constants") (dolist (c constants) (let loop ((val (cdr c))) (if (number? val) (format #t "(define-constant ~a #x~4,'0x)\n" (car c) val) (let1 p (assq val constants) (if p (loop (cdr p)) (error "huh? " val)))))) (print) (print ";; API entry points") (dolist (e entry-points) (format #t "(define-entry-point ~a ~a ~s)\n" (car e) (cadr e) (cddr e))) (print) ) (define (main args) (call-with-values scan emit) 0) �����������������������������������������������������Gauche-gl-0.5.1/src/Makefile.in���������������������������������������������������������������������0000644�0000764�0000764�00000007155�11533026402�015213� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������# # Makefile.in for Gauche-gl/src # $Id: Makefile.in,v 1.32 2005-08-02 04:21:48 shirok Exp $ # # prelude --------------------------------------------- SHELL = @SHELL@ srcdir = @srcdir@ VPATH = $(srcdir) top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # These may be overridden by make invocators DESTDIR = # These are set by configure # NB: cc and various flags must match the ones used to compile Gauche, # so the make invocator shouldn't casually override them. CFLAGS = @DEFS@ @X_CFLAGS@ @GLUT_INCDIR@ LDFLAGS = @LDFLAGS@ OBJEXT = @OBJEXT@ SOEXT = @SOEXT@ OLIBS = @LIBS@ LIBS = @GL_LIBS@ @LIBS@ @X_LIBS@ @X_PRE_LIBS@ @X_EXTRA_LIBS@ @X_LIBS@ GOSH = "@GOSH@" GAUCHE_CONFIG = "@GAUCHE_CONFIG@" GAUCHE_PACKAGE = "@GAUCHE_PACKAGE@" GAUCHE_INSTALL = "@GAUCHE_INSTALL@" PACKAGE = Gauche-gl HEADER_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --siteincdir`" SCM_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitelibdir`" ARCH_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitearchdir`" # build ----------------------------------------------- ARCHFILES = libgauche-math3d.$(SOEXT) \ libgauche-gl.$(SOEXT) \ libgauche-glut.$(SOEXT) SCMFILES = HEADERS = gauche/math3d.h TARGET = $(ARCHFILES) CONFIG_GENERATED = Makefile config.cache config.log config.status \ configure.lineno autom4te*.cache $(PACKAGE).gpd GENERATED = gl-syms.c gl-syms.h gl-ptrs.h gettype-sizes.c all : $(TARGET) # math3d math3d_SRCS = gauche-math3d.c math3d-lib.stub libgauche-math3d.$(SOEXT) : $(math3d_SRCS) gauche/math3d.h $(GAUCHE_PACKAGE) compile --verbose \ --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(OLIBS)" \ libgauche-math3d $(math3d_SRCS) # gl gl_SRCS = gauche-gl.c gl-syms.c gl-lib.stub glu-lib.stub glext-lib.stub gl_LIBS = @GL_EXTRALIBS@ $(LIBS) gl_HDRS = gauche-gl.h gl-syms.h gl-ptrs.h gauche/math3d.h libgauche-gl.$(SOEXT) : $(gl_SRCS) gettype-sizes.c $(gl_HDRS) $(GAUCHE_PACKAGE) compile --verbose \ --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(gl_LIBS)" \ libgauche-gl $(gl_SRCS) gl-syms.c gl-syms.h : gen-syms.scm glext-abi.scm $(GOSH) ./gen-syms.scm gl-ptrs.h : gen-ptrs.scm glext-abi.scm $(GOSH) ./gen-ptrs.scm gettype-sizes.c : glstate.scm $(GOSH) ./glstate.scm -o gettype-sizes.c gettype # glut glut_SRCS = gauche-glut.c glut-lib.stub glut_LIBS = @GLUT_LIBDIR@ @GLUT_LIB@ @GLUT_EXTRALIBS@ $(LIBS) libgauche-glut.$(SOEXT) : $(glut_SRCS) gauche-glut.h $(GAUCHE_PACKAGE) compile --verbose \ --cflags="$(CFLAGS)" --ldflags="$(LDFLAGS)" --libs="$(glut_LIBS)" \ libgauche-glut $(glut_SRCS) # tests ----------------------------------------------- check : all @rm -f test.log $(GOSH) -I. -I../lib test-math3d.scm > test.log $(GOSH) -I. -I../lib test.scm >> test.log # install ---------------------------------------------- install : all $(GAUCHE_INSTALL) -m 444 -T $(HEADER_INSTALL_DIR) $(HEADERS) $(GAUCHE_INSTALL) -m 444 -T $(SCM_INSTALL_DIR) $(SCMFILES) $(GAUCHE_INSTALL) -m 555 -T $(ARCH_INSTALL_DIR) $(ARCHFILES) uninstall : all $(GAUCHE_INSTALL) -U $(HEADER_INSTALL_DIR) $(HEADERS) $(GAUCHE_INSTALL) -U $(SCM_INSTALL_DIR) $(SCMFILES) $(GAUCHE_INSTALL) -U $(ARCH_INSTALL_DIR) $(ARCHFILES) # clean ------------------------------------------------ clean : $(GAUCHE_PACKAGE) compile --clean libgauche-math3d $(math3d_SRCS) $(GAUCHE_PACKAGE) compile --clean libgauche-gl $(gl_SRCS) $(GAUCHE_PACKAGE) compile --clean libgauche-glut $(glut_SRCS) rm -rf core $(TARGET) $(GENERATED) *~ test.log so_locations distclean : clean rm -rf $(CONFIG_GENERATED) maintainer-clean : clean rm -rf $(CONFIG_GENERATED) configure �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/gauche-glut.c�������������������������������������������������������������������0000644�0000764�0000764�00000027144�11533026402�015517� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * gauche-glut.c - Gauche GLUT binding * * Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> * * Permission to use, copy, modify, distribute this software and * accompanying documentation for any purpose is hereby granted, * provided that existing copyright notices are retained in all * copies and that this notice is included verbatim in all * distributions. * This software is provided as is, without express or implied * warranty. In no circumstances the author(s) shall be liable * for any damages arising out of the use of this software. * * $Id: gauche-glut.c,v 1.8 2008-06-04 11:50:15 shirok Exp $ */ #include <gauche.h> #include <gauche/extend.h> #if MacOSX #include <GLUT/glut.h> #else #include <GL/glut.h> #endif #include "gauche-glut.h" extern void Scm_Init_glut_lib(ScmModule *mod); /*================================================================ * Glut font */ SCM_DEFINE_BUILTIN_CLASS_SIMPLE(Scm_GlutFontClass, NULL); static ScmObj makeGlutFont(void *ptr) { ScmGlutFont *gf = SCM_NEW(ScmGlutFont); SCM_SET_CLASS(gf, SCM_CLASS_GLUT_FONT); gf->font = ptr; return SCM_OBJ(gf); } /*================================================================ * Callback support. * * Glut callbacks are associated to the "current window". * unfortunately the callback interface doesn't allow us * to pass extra data pointer, so our C callback routine * doesn't know which Scheme closure to be called. We maintain * that information in our table. * * TODO: We don't want to use Scm_ApplyRec, for we need to cons * the arguments (display is ok, but motion and passiveMotion generates * garbages which will eventurally trigger GC.) Rewrite *_cb functions * after we implement Scm_ApplyRec0, Scm_ApplyRec1, .., etc. in * Gauche core. */ static ScmObj ScmGlutCallbackTable = SCM_UNDEFINED; /* set by init routine */ static ScmObj get_callback(int type) { int win = glutGetWindow(); ScmObj entry = Scm_HashTableRef(SCM_HASH_TABLE(ScmGlutCallbackTable), SCM_MAKE_INT(win), SCM_FALSE); SCM_ASSERT(type >= 0 && type < SCM_GLUT_NUM_WINDOW_CBS); if (SCM_VECTORP(entry)) { return SCM_VECTOR_ELEMENT(entry, type); } else { return SCM_FALSE; } } #define define_callback(name, num, arglist, args) \ static void SCM_CPP_CAT(name, _cb) arglist \ { \ ScmObj cb = get_callback(SCM_CPP_CAT(SCM_GLUT_CB_, num)); \ if (!SCM_FALSEP(cb)) { \ Scm_ApplyRec(cb, args); \ } \ } define_callback(display, DISPLAY, (void), SCM_NIL) define_callback(overlay_display, OVERLAY_DISPLAY, (void), SCM_NIL) define_callback(reshape, RESHAPE, (int w, int h), SCM_LIST2(SCM_MAKE_INT(w), SCM_MAKE_INT(h))); define_callback(keyboard, KEYBOARD, (unsigned char key, int w, int h), SCM_LIST3(SCM_MAKE_INT(key), SCM_MAKE_INT(w), SCM_MAKE_INT(h))) define_callback(keyboard_up, KEYBOARD_UP, (unsigned char key, int w, int h), SCM_LIST3(SCM_MAKE_INT(key), SCM_MAKE_INT(w), SCM_MAKE_INT(h))) define_callback(mouse, MOUSE, (int button, int state, int x, int y), SCM_LIST4(SCM_MAKE_INT(button), SCM_MAKE_INT(state), SCM_MAKE_INT(x), SCM_MAKE_INT(y))) define_callback(motion, MOTION, (int x, int y), SCM_LIST2(SCM_MAKE_INT(x), SCM_MAKE_INT(y))) define_callback(passive_motion, PASSIVE_MOTION, (int x, int y), SCM_LIST2(SCM_MAKE_INT(x), SCM_MAKE_INT(y))) define_callback(visibility, VISIBILITY, (int state), SCM_LIST1(SCM_MAKE_INT(state))) define_callback(entry, ENTRY, (int state), SCM_LIST1(SCM_MAKE_INT(state))) define_callback(special, SPECIAL, (int key, int w, int h), SCM_LIST3(SCM_MAKE_INT(key), SCM_MAKE_INT(w), SCM_MAKE_INT(h))) define_callback(special_up, SPECIAL_UP, (int key, int w, int h), SCM_LIST3(SCM_MAKE_INT(key), SCM_MAKE_INT(w), SCM_MAKE_INT(h))) define_callback(spaceball_motion, SPACEBALL_MOTION, (int x, int y, int z), SCM_LIST3(SCM_MAKE_INT(x), SCM_MAKE_INT(y), SCM_MAKE_INT(z))) define_callback(spaceball_rotate, SPACEBALL_ROTATE, (int x, int y, int z), SCM_LIST3(SCM_MAKE_INT(x), SCM_MAKE_INT(y), SCM_MAKE_INT(z))) define_callback(spaceball_button, SPACEBALL_BUTTON, (int button, int state), SCM_LIST2(SCM_MAKE_INT(button), SCM_MAKE_INT(state))) define_callback(button_box, BUTTON_BOX, (int button, int state), SCM_LIST2(SCM_MAKE_INT(button), SCM_MAKE_INT(state))) define_callback(dials, DIALS, (int dial, int value), SCM_LIST2(SCM_MAKE_INT(dial), SCM_MAKE_INT(value))) define_callback(tablet_motion, TABLET_MOTION, (int x, int y), SCM_LIST2(SCM_MAKE_INT(x), SCM_MAKE_INT(y))) define_callback(tablet_button, TABLET_BUTTON, (int button, int state, int x, int y), SCM_LIST4(SCM_MAKE_INT(button), SCM_MAKE_INT(state), SCM_MAKE_INT(x), SCM_MAKE_INT(y))) define_callback(menu_status, MENU_STATUS, (int status, int x, int y), SCM_LIST3(SCM_MAKE_INT(status), SCM_MAKE_INT(x), SCM_MAKE_INT(y))) define_callback(window_status, WINDOW_STATUS, (int status), SCM_LIST1(SCM_MAKE_INT(status))) define_callback(joystick, JOYSTICK, (unsigned int mask, int x, int y, int z), SCM_LIST4(SCM_MAKE_INT(mask), SCM_MAKE_INT(x), SCM_MAKE_INT(y), SCM_MAKE_INT(z))) /* global callbacks */ static ScmObj idle_closure = SCM_FALSE; static void idle_cb(void) { if (!SCM_FALSEP(idle_closure)) { Scm_ApplyRec(idle_closure, SCM_NIL); } } static ScmObj timer_closure = SCM_FALSE; static void timer_cb(int value) { if (!SCM_FALSEP(timer_closure)) { Scm_ApplyRec(timer_closure, SCM_LIST1(Scm_MakeInteger(value))); } } /* NB: these functions are new addition by freeglut. we provide dummy functions for older versions. */ #if !(GLUT_API_VERSION >= 4 || GLUT_XLIB_IMPLEMENTATION >= 13) static void glutKeyboardUpFunc(void (*fn)(unsigned char, int, int)) { Scm_Warn("glutKeyboardUpFunc unsupported in this version of GLUT"); } static void glutSpecialUpFunc(void (*fn)(int, int, int)) { Scm_Warn("glutSpecialUpFunc unsupported in this version of GLUT"); } static void glutJoystickFunc(void (*fn)(unsigned int, int, int, int), int interval) { Scm_Warn("glutJoystickFunc unsupported in this version of GLUT"); } static void glutWindowStatusFunc(void (*fn)(unsigned int, int, int, int)) { Scm_Warn("glutWindowStatusFunc unsupported in this version of GLUT"); } #endif #define define_registrar(glutfn, cbname) \ static void SCM_CPP_CAT(register_, cbname)(int flag, int xtra) \ { \ if (flag) { \ glutfn(SCM_CPP_CAT(cbname, _cb)); \ } else { \ glutfn(NULL); \ } \ } define_registrar(glutDisplayFunc, display) define_registrar(glutOverlayDisplayFunc, overlay_display) define_registrar(glutReshapeFunc, reshape) define_registrar(glutKeyboardFunc, keyboard) define_registrar(glutKeyboardUpFunc, keyboard_up) define_registrar(glutMouseFunc, mouse) define_registrar(glutMotionFunc, motion) define_registrar(glutPassiveMotionFunc, passive_motion) define_registrar(glutVisibilityFunc, visibility) define_registrar(glutEntryFunc, entry) define_registrar(glutSpecialFunc, special) define_registrar(glutSpecialUpFunc, special_up) define_registrar(glutSpaceballMotionFunc, spaceball_motion) define_registrar(glutSpaceballRotateFunc, spaceball_rotate) define_registrar(glutSpaceballButtonFunc, spaceball_button) define_registrar(glutButtonBoxFunc, button_box) define_registrar(glutDialsFunc, dials) define_registrar(glutTabletMotionFunc, tablet_motion) define_registrar(glutTabletButtonFunc, tablet_button) define_registrar(glutMenuStatusFunc, menu_status) define_registrar(glutWindowStatusFunc, window_status) /* joystick fn is a bit different */ static void register_joystick(int flag, int interval) { if (flag) { glutJoystickFunc(joystick_cb, interval); } else { glutJoystickFunc(NULL, interval); } } /* NB: order must match SCM_GLUT_CB_* enums */ static void (*registrars[])(int flag, int xtra) = { register_display, register_overlay_display, register_reshape, register_keyboard, register_mouse, register_motion, register_passive_motion, register_visibility, register_entry, register_special, register_spaceball_motion, register_spaceball_rotate, register_spaceball_button, register_button_box, register_dials, register_tablet_motion, register_tablet_button, register_menu_status, register_window_status, register_keyboard_up, register_special_up, register_joystick, }; /* * External entry to manage registering callbacks * 'xtra1' and 'xtra2' are ignored by most callbacks; only the two callbacks * use them: * glutTimerFunc: xtra1 for millliseconds, xtra2 for value * glutJoystickFunc: xtra1 for interval */ void Scm_GlutRegisterCallback(int type, ScmObj closure, int xtra1, int xtra2) { SCM_ASSERT(type >= 0 && type < SCM_GLUT_NUM_CBS); if (type < SCM_GLUT_NUM_WINDOW_CBS) { int win = glutGetWindow(); ScmObj entry = Scm_HashTableRef(SCM_HASH_TABLE(ScmGlutCallbackTable), SCM_MAKE_INT(win), SCM_FALSE); if (SCM_EQ(entry, SCM_FALSE)) { entry = Scm_MakeVector(SCM_GLUT_NUM_WINDOW_CBS, SCM_FALSE); Scm_HashTableSet(SCM_HASH_TABLE(ScmGlutCallbackTable), SCM_MAKE_INT(win), entry, 0); } SCM_VECTOR_ELEMENT(entry, type) = closure; registrars[type](!SCM_FALSEP(closure), xtra1); } else if (type == SCM_GLUT_CB_IDLE) { idle_closure = closure; if (SCM_FALSEP(closure)) { glutIdleFunc(NULL); } else { glutIdleFunc(idle_cb); } } else { timer_closure = closure; if (!SCM_FALSEP(closure)) { glutTimerFunc(xtra1, timer_cb, xtra2); } } } /*================================================================ * Initialization */ void Scm_Init_libgauche_glut(void) { ScmModule *mod; SCM_INIT_EXTENSION(libgauche_glut); mod = SCM_MODULE(SCM_FIND_MODULE("gl.glut", TRUE)); Scm_Init_glut_lib(mod); /* Callback table */ ScmGlutCallbackTable = Scm_MakeHashTableSimple(SCM_HASH_EQV, 0); /* Glut built-in fonts */ #define DEFFONT(name) Scm_DefineConst(mod, SCM_SYMBOL(SCM_INTERN(#name)), makeGlutFont(name)) /* Stroke font constants (use these in GLUT program). */ DEFFONT(GLUT_STROKE_ROMAN); DEFFONT(GLUT_STROKE_MONO_ROMAN); /* Bitmap font constants (use these in GLUT program). */ DEFFONT(GLUT_BITMAP_9_BY_15); DEFFONT(GLUT_BITMAP_8_BY_13); DEFFONT(GLUT_BITMAP_TIMES_ROMAN_10); DEFFONT(GLUT_BITMAP_TIMES_ROMAN_24); #if (GLUT_API_VERSION >= 3) DEFFONT(GLUT_BITMAP_HELVETICA_10); DEFFONT(GLUT_BITMAP_HELVETICA_12); DEFFONT(GLUT_BITMAP_HELVETICA_18); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/gauche-glut.h�������������������������������������������������������������������0000644�0000764�0000764�00000004250�11533026402�015515� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * gauche-glut.h - Gauche GLUT binding * * Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> * * Permission to use, copy, modify, distribute this software and * accompanying documentation for any purpose is hereby granted, * provided that existing copyright notices are retained in all * copies and that this notice is included verbatim in all * distributions. * This software is provided as is, without express or implied * warranty. In no circumstances the author(s) shall be liable * for any damages arising out of the use of this software. * * $Id: gauche-glut.h,v 1.3 2008-06-04 11:50:21 shirok Exp $ */ #ifndef GAUCHE_GLUT_H #define GAUCHE_GLUT_H /* opaque pointer for glut font */ typedef struct ScmGlutFontRec { SCM_HEADER; void *font; } ScmGlutFont; SCM_CLASS_DECL(Scm_GlutFontClass); #define SCM_CLASS_GLUT_FONT (&Scm_GlutFontClass) #define SCM_GLUT_FONT_P(obj) (SCM_XTYPEP(obj, SCM_CLASS_GLUT_FONT)) #define SCM_GLUT_FONT(obj) ((ScmGlutFont*)(obj)) /* glut callback table */ enum { /* per-window callbacks */ SCM_GLUT_CB_DISPLAY, SCM_GLUT_CB_OVERLAY_DISPLAY, SCM_GLUT_CB_RESHAPE, SCM_GLUT_CB_KEYBOARD, SCM_GLUT_CB_MOUSE, SCM_GLUT_CB_MOTION, SCM_GLUT_CB_PASSIVE_MOTION, SCM_GLUT_CB_VISIBILITY, SCM_GLUT_CB_ENTRY, SCM_GLUT_CB_SPECIAL, SCM_GLUT_CB_SPACEBALL_MOTION, SCM_GLUT_CB_SPACEBALL_ROTATE, SCM_GLUT_CB_SPACEBALL_BUTTON, SCM_GLUT_CB_BUTTON_BOX, SCM_GLUT_CB_DIALS, SCM_GLUT_CB_TABLET_MOTION, SCM_GLUT_CB_TABLET_BUTTON, SCM_GLUT_CB_MENU_STATUS, SCM_GLUT_CB_WINDOW_STATUS, /* freeglut addition (glut API version 4) */ SCM_GLUT_CB_KEYBOARD_UP, /* freeglut addition (glut API version 4) */ SCM_GLUT_CB_SPECIAL_UP, /* freeglut addition (glut API version 4) */ SCM_GLUT_CB_JOYSTICK, /* freeglut addition (glut API version 4) */ SCM_GLUT_NUM_WINDOW_CBS, /* marker */ /* global callbacks */ SCM_GLUT_CB_IDLE = SCM_GLUT_NUM_WINDOW_CBS, SCM_GLUT_CB_TIMER, SCM_GLUT_NUM_CBS }; extern void Scm_GlutRegisterCallback(int type, ScmObj closure, int xtra1, int xtra2); #endif /*GAUCHE_GLUT_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/gauche-math3d.c�����������������������������������������������������������������0000644�0000764�0000764�00000117314�11533026402�015723� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * gauche-math3d.c - 3D vector and matrix arithmetics * * Copyright (c) 2002-2008 Shiro Kawai <shiro@acm.org> * * Permission to use, copy, modify, distribute this software and * accompanying documentation for any purpose is hereby granted, * provided that existing copyright notices are retained in all * copies and that this notice is included verbatim in all * distributions. * This software is provided as is, without express or implied * warranty. In no circumstances the author(s) shall be liable * for any damages arising out of the use of this software. * * $Id: gauche-math3d.c,v 1.29 2008-06-05 17:33:04 shirok Exp $ */ #include <math.h> #include <gauche.h> #include <gauche/extend.h> #include <gauche/uvector.h> #include "gauche/math3d.h" /* * Sequence CPL */ static ScmClass *sequenceCPL[] = { SCM_CLASS_STATIC_PTR(Scm_SequenceClass), SCM_CLASS_STATIC_PTR(Scm_CollectionClass), SCM_CLASS_STATIC_PTR(Scm_TopClass), NULL }; #define ALLOC_FV(len) SCM_NEW_ATOMIC2(float*, (len)*sizeof(float)) #define CHECK_F32V(v, len) \ do { \ if (SCM_F32VECTOR_SIZE(v) != (len)) { \ Scm_Error("f32vector of size %d required, but got %S", \ (len), (v)); \ } \ } while (0) /*============================================================= * Vector4f */ static void vec_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx) { Scm_Printf(out, "#,(vector4f %g %g %g %g)", SCM_VECTOR4F_D(obj)[0], SCM_VECTOR4F_D(obj)[1], SCM_VECTOR4F_D(obj)[2], SCM_VECTOR4F_D(obj)[3]); } static int vec_compare(ScmObj x, ScmObj y, int equalp) { if (equalp) { if (SCM_VECTOR4F_D(x)[0] == SCM_VECTOR4F_D(y)[0] && SCM_VECTOR4F_D(x)[1] == SCM_VECTOR4F_D(y)[1] && SCM_VECTOR4F_D(x)[2] == SCM_VECTOR4F_D(y)[2] && SCM_VECTOR4F_D(x)[3] == SCM_VECTOR4F_D(y)[3]) { return 0; } else { return -1; } } else { Scm_Error("can't order %S and %S", x, y); return 0; /* dummy */ } } SCM_DEFINE_BUILTIN_CLASS(Scm_Vector4fClass, vec_print, vec_compare, NULL, NULL, sequenceCPL); ScmObj Scm_MakeVector4f(float x, float y, float z, float w) { ScmVector4f *v = SCM_NEW(ScmVector4f); SCM_SET_CLASS(v, SCM_CLASS_VECTOR4F); v->v = ALLOC_FV(4); SCM_VECTOR4F_D(v)[0] = x; SCM_VECTOR4F_D(v)[1] = y; SCM_VECTOR4F_D(v)[2] = z; SCM_VECTOR4F_D(v)[3] = w; return SCM_OBJ(v); } ScmObj Scm_MakeVector4fvShared(float d[]) { ScmVector4f *v; v = SCM_NEW(ScmVector4f); SCM_SET_CLASS(v, SCM_CLASS_VECTOR4F); v->v = d; return SCM_OBJ(v); } ScmObj Scm_MakeVector4fv(const float *d) { if (d) return Scm_MakeVector4f(d[0], d[1], d[2], d[3]); else return Scm_MakeVector4f(0.0, 0.0, 0.0, 0.0); } ScmObj Scm_Vector4fSetv(ScmVector4f *v, float *d) { float *fp = SCM_VECTOR4F_D(v); fp[0] = d[0]; fp[1] = d[1]; fp[2] = d[2]; fp[3] = d[3]; return SCM_OBJ(v); } /* common routine for list->vector4f and list->point4f */ static void list2vec(ScmObj l, float *d, float init3) { int i; ScmObj lp = l; for (i=0; i<3; i++, lp = SCM_CDR(lp)) { if (!SCM_PAIRP(lp)) goto badlist; if (!SCM_REALP(SCM_CAR(lp))) goto badlist; d[i] = (float)Scm_GetDouble(SCM_CAR(lp)); } if (SCM_PAIRP(lp)) { if (!SCM_REALP(SCM_CAR(lp))) goto badlist; d[3] = (float)Scm_GetDouble(SCM_CAR(lp)); lp = SCM_CDR(lp); } else { d[3] = init3; } if (SCM_NULLP(lp)) return; badlist: Scm_Error("list of 3 or 4 real numbers required, but got %S", l); } ScmObj Scm_ListToVector4f(ScmObj l) { float d[4]; list2vec(l, d, 0.0); return Scm_MakeVector4fv(d); } ScmObj Scm_Vector4fToList(const ScmVector4f *v) { return SCM_LIST4(Scm_MakeFlonum(SCM_VECTOR4F_D(v)[0]), Scm_MakeFlonum(SCM_VECTOR4F_D(v)[1]), Scm_MakeFlonum(SCM_VECTOR4F_D(v)[2]), Scm_MakeFlonum(SCM_VECTOR4F_D(v)[3])); } float Scm_Vector4fDot(const ScmVector4f *p, const ScmVector4f *q) { return (SCM_VECTOR4F_DOTV(SCM_VECTOR4F_D(p), SCM_VECTOR4F_D(q))); } float Scm_Vector4fDotv(const float *p, const float *q) { return SCM_VECTOR4F_DOTV(p, q); } ScmObj Scm_Vector4fCross(const ScmVector4f *p, const ScmVector4f *q) { float r[4]; SCM_VECTOR4F_CROSSV(r, SCM_VECTOR4F_D(p), SCM_VECTOR4F_D(q)); return Scm_MakeVector4fv(r); } void Scm_Vector4fCrossv(float *r, const float *p, const float *q) { SCM_VECTOR4F_CROSSV(r, p, q); } ScmObj Scm_Vector4fNormalize(const ScmVector4f *p) { float r[4]; r[0] = SCM_VECTOR4F_D(p)[0]; r[1] = SCM_VECTOR4F_D(p)[1]; r[2] = SCM_VECTOR4F_D(p)[2]; r[3] = SCM_VECTOR4F_D(p)[3]; SCM_VECTOR4F_NORMALIZEV(r); return Scm_MakeVector4fv(r); } void Scm_Vector4fNormalizev(float *p) { SCM_VECTOR4F_NORMALIZEV(p); } ScmObj Scm_Vector4fNormalizeX(ScmVector4f *p) { SCM_VECTOR4F_NORMALIZEV(SCM_VECTOR4F_D(p)); return SCM_OBJ(p); } ScmObj Scm_Vector4fAdd(const ScmVector4f *p, const ScmVector4f *q) { float r[4]; SCM_VECTOR4F_ADDV(r, SCM_VECTOR4F_D(p), SCM_VECTOR4F_D(q)); return Scm_MakeVector4fv(r); } void Scm_Vector4fAddv(float *r, const float *p, const float *q) { SCM_VECTOR4F_ADDV(r, p, q); } ScmObj Scm_Vector4fSub(const ScmVector4f *p, const ScmVector4f *q) { float r[4]; SCM_VECTOR4F_SUBV(r, SCM_VECTOR4F_D(p), SCM_VECTOR4F_D(q)); return Scm_MakeVector4fv(r); } void Scm_Vector4fSubv(float *r, const float *p, const float *q) { SCM_VECTOR4F_SUBV(r, p, q); } /*============================================================= * VectorArray */ static void vec_array_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx) { ScmVector4fArray *va = SCM_VECTOR4F_ARRAY(obj); int len = SCM_VECTOR4F_ARRAY_SIZE(va), i; Scm_Printf(out, "#,(vector4f-array %d ", len); for (i = 0; i < len; i++) { float *z = Scm_Vector4fArrayRefv(va, i); Scm_Printf(out, "(%g %g %g %g) ", z[0], z[1], z[2], z[3]); } Scm_Printf(out, ")"); } static int vec_array_compare(ScmObj x, ScmObj y, int equalp) { if (equalp) { int i, len = SCM_VECTOR4F_ARRAY_SIZE(x); float *p = SCM_VECTOR4F_ARRAY_D(x), *q = SCM_VECTOR4F_ARRAY_D(y); if (len != SCM_VECTOR4F_ARRAY_SIZE(y)) return 0; for (i=0; i<len*4; i++) { if (*p++ != *q++) return 0; } return -1; } else { Scm_Error("can't order %S and %S", x, y); return 0; /* dummy */ } } SCM_DEFINE_BUILTIN_CLASS(Scm_Vector4fArrayClass, vec_array_print, vec_array_compare, NULL, NULL, sequenceCPL); ScmObj Scm_MakeVector4fArrayv(int nvecs, const float *init) { int i; ScmVector4fArray *a; SCM_ASSERT(nvecs >= 0); a = SCM_NEW(ScmVector4fArray); SCM_SET_CLASS(a, SCM_CLASS_VECTOR4F_ARRAY); a->size = nvecs; a->v = ALLOC_FV(nvecs*4); if (init) { for (i=0;i<nvecs;i++) { SCM_VECTOR4F_ARRAY_SET(a, i, init[0], init[1], init[2], init[3]); } } else { for (i=0;i<nvecs*4;i++) SCM_VECTOR4F_ARRAY_D(a)[i] = 0.0; } return SCM_OBJ(a); } ScmObj Scm_MakeVector4fArrayV(ScmF32Vector *fv) { int size; ScmVector4fArray *a; size = SCM_F32VECTOR_SIZE(fv); if (size % 4 != 0) { Scm_Error("f32vector size must be multiple of 4, but got %S", fv); } a = SCM_NEW(ScmVector4fArray); SCM_SET_CLASS(a, SCM_CLASS_VECTOR4F_ARRAY); a->size = size/4; a->v = SCM_F32VECTOR_ELEMENTS(fv); /* share the storage */ return SCM_OBJ(a); } ScmObj Scm_Vector4fArrayRef(const ScmVector4fArray *a, int n, ScmObj fallback) { if (n < 0 || n >= SCM_VECTOR4F_ARRAY_SIZE(a)) { if (SCM_UNBOUNDP(fallback)) Scm_Error("index out of range"); return fallback; } return Scm_MakeVector4fv(SCM_VECTOR4F_ARRAY_REFV(a, n)); } ScmObj Scm_Vector4fArrayRefShared(ScmVector4fArray *a, int n, ScmObj fallback) { if (n < 0 || n >= SCM_VECTOR4F_ARRAY_SIZE(a)) { if (SCM_UNBOUNDP(fallback)) Scm_Error("index out of range"); return fallback; } return Scm_MakeVector4fvShared(SCM_VECTOR4F_ARRAY_REFV(a, n)); } float *Scm_Vector4fArrayRefv(ScmVector4fArray *a, int n) { return SCM_VECTOR4F_ARRAY_REFV(a, n); } void Scm_Vector4fArraySet(ScmVector4fArray *a, int n, ScmVector4f *v) { Scm_Vector4fArraySetv(a, n, SCM_VECTOR4F_D(v)); } void Scm_Vector4fArraySetv(ScmVector4fArray *a, int n, float d[]) { if (n < 0 || n >= SCM_VECTOR4F_ARRAY_SIZE(a)) { Scm_Error("index out of range"); } SCM_VECTOR4F_ARRAY_SET(a, n, d[0], d[1], d[2], d[3]); } /*============================================================= * Pointf - is just a vector with different default value. */ static void point_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx) { Scm_Printf(out, "#,(point4f %g %g %g %g)", SCM_VECTOR4F_D(obj)[0], SCM_VECTOR4F_D(obj)[1], SCM_VECTOR4F_D(obj)[2], SCM_VECTOR4F_D(obj)[3]); } #define point_compare vec_compare SCM_DEFINE_BUILTIN_CLASS(Scm_Point4fClass, point_print, point_compare, NULL, NULL, sequenceCPL); ScmObj Scm_MakePoint4f(float x, float y, float z, float w) { ScmPoint4f *v = SCM_NEW(ScmPoint4f); SCM_SET_CLASS(v, SCM_CLASS_POINT4F); v->v = ALLOC_FV(4); SCM_POINT4F_D(v)[0] = x; SCM_POINT4F_D(v)[1] = y; SCM_POINT4F_D(v)[2] = z; SCM_POINT4F_D(v)[3] = w; return SCM_OBJ(v); } ScmObj Scm_MakePoint4fv(const float *d) { if (d) return Scm_MakePoint4f(d[0], d[1], d[2], d[3]); else return Scm_MakePoint4f(0.0, 0.0, 0.0, 1.0); } ScmObj Scm_MakePoint4fvShared(float d[]) { ScmPoint4f *v; v = SCM_NEW(ScmPoint4f); SCM_SET_CLASS(v, SCM_CLASS_POINT4F); v->v = d; return SCM_OBJ(v); } ScmObj Scm_Point4fSetv(ScmPoint4f *v, float *d) { float *fp = SCM_POINT4F_D(v); fp[0] = d[0]; fp[1] = d[1]; fp[2] = d[2]; fp[3] = d[3]; return SCM_OBJ(v); } ScmObj Scm_ListToPoint4f(ScmObj l) { float d[4]; list2vec(l, d, 1.0); return Scm_MakePoint4fv(d); } ScmObj Scm_Point4fToList(const ScmPoint4f *p) { return SCM_LIST4(Scm_MakeFlonum(SCM_POINT4F_D(p)[0]), Scm_MakeFlonum(SCM_POINT4F_D(p)[1]), Scm_MakeFlonum(SCM_POINT4F_D(p)[2]), Scm_MakeFlonum(SCM_POINT4F_D(p)[3])); } ScmObj Scm_Point4fAdd(const ScmPoint4f *p, const ScmVector4f *q) { float r[4]; SCM_VECTOR4F_ADDV(r, SCM_POINT4F_D(p), SCM_VECTOR4F_D(q)); return Scm_MakePoint4fv(r); } ScmObj Scm_Point4fSub(const ScmVector4f *p, const ScmObj q) { float r[4]; if (SCM_POINT4FP(q)) { SCM_VECTOR4F_SUBV(r, SCM_POINT4F_D(p), SCM_POINT4F_D(q)); return Scm_MakeVector4fv(r); } if (SCM_VECTOR4FP(q)) { SCM_VECTOR4F_SUBV(r, SCM_POINT4F_D(p), SCM_VECTOR4F_D(q)); return Scm_MakePoint4fv(r); } Scm_Error("<point4f> or <vector4f> required, but got %S", q); return SCM_UNDEFINED; } /*============================================================= * Point4fArray */ static void point_array_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx) { ScmPoint4fArray *va = SCM_POINT4F_ARRAY(obj); int len = SCM_POINT4F_ARRAY_SIZE(va), i; Scm_Printf(out, "#,(point4f-array %d ", len); for (i = 0; i < len; i++) { float *z = Scm_Point4fArrayRefv(va, i); Scm_Printf(out, "(%g %g %g %g) ", z[0], z[1], z[2], z[3]); } Scm_Printf(out, ")"); } #define point_array_compare vec_array_compare SCM_DEFINE_BUILTIN_CLASS(Scm_Point4fArrayClass, point_array_print, point_array_compare, NULL, NULL, sequenceCPL); ScmObj Scm_MakePoint4fArrayv(int len, const float *init) { int i; ScmPoint4fArray *a; SCM_ASSERT(len >= 0); a = SCM_NEW(ScmPoint4fArray); SCM_SET_CLASS(a, SCM_CLASS_POINT4F_ARRAY); a->size = len; a->v = ALLOC_FV(len*4); if (init) { for (i=0;i<len;i++) { SCM_POINT4F_ARRAY_SET(a, i, init[0], init[1], init[2], init[3]); } } else { for (i=0;i<len*4;i++) SCM_POINT4F_ARRAY_D(a)[i] = 0.0; } return SCM_OBJ(a); } ScmObj Scm_MakePoint4fArrayV(ScmF32Vector *fv) { int size; ScmPoint4fArray *a; size = SCM_F32VECTOR_SIZE(fv); if (size % 4 != 0) { Scm_Error("f32vector size must be multiple of 4, but got %S", fv); } a = SCM_NEW(ScmPoint4fArray); SCM_SET_CLASS(a, SCM_CLASS_POINT4F_ARRAY); a->size = size/4; a->v = SCM_F32VECTOR_ELEMENTS(fv); return SCM_OBJ(a); } ScmObj Scm_Point4fArrayRef(const ScmPoint4fArray *a, int n, ScmObj fallback) { if (n < 0 || n >= SCM_POINT4F_ARRAY_SIZE(a)) { if (SCM_UNBOUNDP(fallback)) Scm_Error("index out of range"); return fallback; } return Scm_MakePoint4fv(SCM_POINT4F_ARRAY_REFV(a, n)); } ScmObj Scm_Point4fArrayRefShared(ScmPoint4fArray *a, int n, ScmObj fallback) { if (n < 0 || n >= SCM_POINT4F_ARRAY_SIZE(a)) { if (SCM_UNBOUNDP(fallback)) Scm_Error("index out of range"); return fallback; } return Scm_MakePoint4fvShared(SCM_POINT4F_ARRAY_REFV(a, n)); } float *Scm_Point4fArrayRefv(ScmPoint4fArray *a, int n) { return SCM_POINT4F_ARRAY_REFV(a, n); } void Scm_Point4fArraySet(ScmPoint4fArray *a, int n, ScmPoint4f *v) { if (n < 0 || n >= SCM_POINT4F_ARRAY_SIZE(a)) { Scm_Error("index out of range"); } SCM_POINT4F_ARRAY_SET(a, n, SCM_POINT4F_D(v)[0], SCM_POINT4F_D(v)[1], SCM_POINT4F_D(v)[2], SCM_POINT4F_D(v)[3]); } void Scm_Point4fArraySetv(ScmPoint4fArray *a, int n, float d[]) { SCM_POINT4F_ARRAY_SET(a, n, d[0], d[1], d[2], d[3]); } /*============================================================= * Matrix */ static void mat_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx) { int i; ScmMatrix4f *m = SCM_MATRIX4F(obj); Scm_Printf(out, "#,(matrix4f"); for (i=0; i<16; i++) { Scm_Printf(out, " %g", SCM_MATRIX4F_D(m)[i]); } Scm_Printf(out, ")"); } static int mat_compare(ScmObj x, ScmObj y, int equalp) { if (equalp) { int i; float *p = SCM_MATRIX4F_D(x), *q = SCM_MATRIX4F_D(y); for (i=0; i<16; i++) { if (*p++ != *q++) return -1; } return 0; } else { Scm_Error("can't order matrix %S and %S", x, y); return 0; /* dummy */ } } SCM_DEFINE_BUILTIN_CLASS(Scm_Matrix4fClass, mat_print, mat_compare, NULL, NULL, sequenceCPL); ScmObj Scm_MakeMatrix4fv(const float *d) { ScmMatrix4f *m = SCM_NEW(ScmMatrix4f); int i; SCM_SET_CLASS(m, SCM_CLASS_MATRIX4F); m->v = ALLOC_FV(16); if (d == NULL) { Scm_Matrix4fSetIdentityv(SCM_MATRIX4F_D(m)); } else { for (i=0; i<16; i++) SCM_MATRIX4F_D(m)[i] = d[i]; } return SCM_OBJ(m); } ScmObj Scm_MakeMatrix4fvShared(float *d) { ScmMatrix4f *m = SCM_NEW(ScmMatrix4f); SCM_MATRIX4F_D(m) = d; return SCM_OBJ(m); } ScmObj Scm_Matrix4fSetv(ScmMatrix4f *m, float *d) { int i; float *fp = SCM_MATRIX4F_D(m); for (i=0; i<16; i++) fp[i] = d[i]; return SCM_OBJ(m); } void Scm_Matrix4fSetIdentityv(float *p) { *p++ = 1.0; *p++ = 0.0; *p++ = 0.0; *p++ = 0.0; *p++ = 0.0; *p++ = 1.0; *p++ = 0.0; *p++ = 0.0; *p++ = 0.0; *p++ = 0.0; *p++ = 1.0; *p++ = 0.0; *p++ = 0.0; *p++ = 0.0; *p++ = 0.0; *p = 1.0; } ScmObj Scm_ListToMatrix4f(ScmObj l) { int i; ScmObj lp = l; float d[16]; for (i=0; i<16; i++, lp = SCM_CDR(lp)) { if (!SCM_PAIRP(lp)) goto badlist; if (!SCM_REALP(SCM_CAR(lp))) goto badlist; d[i] = (float)Scm_GetDouble(SCM_CAR(lp)); } if (!SCM_NULLP(lp)) goto badlist; return Scm_MakeMatrix4fv(d); badlist: Scm_Error("list of 16 real numbers required, but got %S", l); return SCM_UNDEFINED; /* dummy */ } ScmObj Scm_Matrix4fToList(const ScmMatrix4f *m) { ScmObj h = SCM_NIL, t = SCM_NIL; int i; float *p = SCM_MATRIX4F_D(m); for (i=0; i<16; i++) { SCM_APPEND1(h, t, Scm_MakeFlonum((double)p[i])); } return h; } /* Matrix X Matrix */ void Scm_Matrix4fMulMatrix4fv(float *r, const float *p, const float *q) { r[0] = p[0]*q[0]+p[4]*q[1]+p[8]*q[2]+p[12]*q[3]; r[1] = p[1]*q[0]+p[5]*q[1]+p[9]*q[2]+p[13]*q[3]; r[2] = p[2]*q[0]+p[6]*q[1]+p[10]*q[2]+p[14]*q[3]; r[3] = p[3]*q[0]+p[7]*q[1]+p[11]*q[2]+p[15]*q[3]; r[4] = p[0]*q[4]+p[4]*q[5]+p[8]*q[6]+p[12]*q[7]; r[5] = p[1]*q[4]+p[5]*q[5]+p[9]*q[6]+p[13]*q[7]; r[6] = p[2]*q[4]+p[6]*q[5]+p[10]*q[6]+p[14]*q[7]; r[7] = p[3]*q[4]+p[7]*q[5]+p[11]*q[6]+p[15]*q[7]; r[8] = p[0]*q[8]+p[4]*q[9]+p[8]*q[10]+p[12]*q[11]; r[9] = p[1]*q[8]+p[5]*q[9]+p[9]*q[10]+p[13]*q[11]; r[10] = p[2]*q[8]+p[6]*q[9]+p[10]*q[10]+p[14]*q[11]; r[11] = p[3]*q[8]+p[7]*q[9]+p[11]*q[10]+p[15]*q[11]; r[12] = p[0]*q[12]+p[4]*q[13]+p[8]*q[14]+p[12]*q[15]; r[13] = p[1]*q[12]+p[5]*q[13]+p[9]*q[14]+p[13]*q[15]; r[14] = p[2]*q[12]+p[6]*q[13]+p[10]*q[14]+p[14]*q[15]; r[15] = p[3]*q[12]+p[7]*q[13]+p[11]*q[14]+p[15]*q[15]; } ScmObj Scm_Matrix4fMulMatrix4f(const ScmMatrix4f *p, const ScmMatrix4f *q) { ScmMatrix4f *r = SCM_MATRIX4F(Scm_MakeMatrix4fv(NULL)); Scm_Matrix4fMulMatrix4fv(SCM_MATRIX4F_D(r), SCM_MATRIX4F_D(p), SCM_MATRIX4F_D(q)); return SCM_OBJ(r); } /* Matrix X Vector */ void Scm_Matrix4fMulVector4fv(float *r, const float *m, const float *v) { r[0] = m[0]*v[0]+m[4]*v[1]+m[8]*v[2]+m[12]*v[3]; r[1] = m[1]*v[0]+m[5]*v[1]+m[9]*v[2]+m[13]*v[3]; r[2] = m[2]*v[0]+m[6]*v[1]+m[10]*v[2]+m[14]*v[3]; r[3] = m[3]*v[0]+m[7]*v[1]+m[11]*v[2]+m[15]*v[3]; } ScmObj Scm_Matrix4fMulVector4f(const ScmMatrix4f *m, const ScmVector4f *v) { ScmVector4f *r = SCM_VECTOR4F(Scm_MakeVector4fv(NULL)); Scm_Matrix4fMulVector4fv(SCM_MATRIX4F_D(r), SCM_MATRIX4F_D(m), SCM_MATRIX4F_D(v)); return SCM_OBJ(r); } ScmObj Scm_Matrix4fMulPoint4f(const ScmMatrix4f *m, const ScmPoint4f *p) { ScmPoint4f *r = SCM_POINT4F(Scm_MakePoint4fv(NULL)); Scm_Matrix4fMulVector4fv(SCM_MATRIX4F_D(r), SCM_MATRIX4F_D(m), SCM_MATRIX4F_D(p)); return SCM_OBJ(r); } void Scm_Matrix4fScalev(float *r, double f) { int i; for (i=0; i<16; i++) r[i] *= f; } ScmObj Scm_Matrix4fScale(const ScmMatrix4f *m, double f) { ScmMatrix4f *r = SCM_MATRIX4F(Scm_MakeMatrix4fv(SCM_MATRIX4F_D(m))); Scm_Matrix4fScalev(SCM_MATRIX4F_D(r), f); return SCM_OBJ(r); } void Scm_Matrix4fTransposev(float *r, const float *m) { r[0] = m[0]; r[4] = m[1]; r[8] = m[2]; r[12]= m[3]; r[1] = m[4]; r[5] = m[5]; r[9] = m[6]; r[13]= m[7]; r[2] = m[8]; r[6] = m[9]; r[10]= m[10]; r[14]= m[11]; r[3] = m[12]; r[7] = m[13]; r[11]= m[14]; r[15]= m[15]; } /* * Determinant and inverse */ #define DET3(m00, m01, m02, m10, m11, m12, m20, m21, m22) \ ((m00)*(m11)*(m22) + (m10)*(m21)*(m02) + (m20)*(m01)*(m12) \ - (m00)*(m21)*(m12) - (m10)*(m01)*(m22) - (m20)*(m11)*(m02)) #define M00 m[0] #define M01 m[4] #define M02 m[8] #define M03 m[12] #define M10 m[1] #define M11 m[5] #define M12 m[9] #define M13 m[13] #define M20 m[2] #define M21 m[6] #define M22 m[10] #define M23 m[14] #define M30 m[3] #define M31 m[7] #define M32 m[11] #define M33 m[15] float Scm_Matrix4fDeterminantv(const float *m) { float d00, d10, d20, d30; d00 = M00 * DET3(M11, M12, M13, M21, M22, M23, M31, M32, M33); d10 = M10 * DET3(M01, M02, M03, M21, M22, M23, M31, M32, M33); d20 = M20 * DET3(M01, M02, M03, M11, M12, M13, M31, M32, M33); d30 = M30 * DET3(M01, M02, M03, M11, M12, M13, M21, M22, M23); return d00 - d10 + d20 - d30; } /* Returns FALSE if M is singular */ int Scm_Matrix4fInversev(float *r, const float *m) { float det = Scm_Matrix4fDeterminantv(m); if (det == 0.0) return FALSE; r[0] = DET3(M11, M12, M13, M21, M22, M23, M31, M32, M33)/det; /*d00*/ r[1] = -DET3(M10, M12, M13, M20, M22, M23, M30, M32, M33)/det; /*d01*/ r[2] = DET3(M10, M11, M13, M20, M21, M23, M30, M31, M33)/det; /*d02*/ r[3] = -DET3(M10, M11, M12, M20, M21, M22, M30, M31, M32)/det; /*d03*/ r[4] = -DET3(M01, M02, M03, M21, M22, M23, M31, M32, M33)/det; /*d10*/ r[5] = DET3(M00, M02, M03, M20, M22, M23, M30, M32, M33)/det; /*d11*/ r[6] = -DET3(M00, M01, M03, M20, M21, M23, M30, M31, M33)/det; /*d12*/ r[7] = DET3(M00, M01, M02, M20, M21, M22, M30, M31, M32)/det; /*d13*/ r[8] = DET3(M01, M02, M03, M11, M12, M13, M31, M32, M33)/det; /*d20*/ r[9] = -DET3(M00, M02, M03, M10, M12, M13, M30, M32, M33)/det; /*d21*/ r[10] = DET3(M00, M01, M03, M10, M11, M13, M30, M31, M33)/det; /*d22*/ r[11] = -DET3(M00, M01, M02, M10, M11, M12, M30, M31, M32)/det; /*d23*/ r[12] = -DET3(M01, M02, M03, M11, M12, M13, M21, M22, M23)/det; /*d30*/ r[13] = DET3(M00, M02, M03, M10, M12, M13, M20, M22, M23)/det; /*d31*/ r[14] = -DET3(M00, M01, M03, M10, M11, M13, M20, M21, M23)/det; /*d32*/ r[15] = DET3(M00, M01, M02, M10, M11, M12, M20, M21, M22)/det; /*d33*/ return TRUE; } /* * Transformation and matrices. */ void Scm_TRSToMatrix4fv(float *m, const float *t, const float *v, float phi, const float *s) { float cosp = cos(phi), sinp = sin(phi); float vxx = v[0]*v[0], vyy = v[1]*v[1], vzz = v[2]*v[2]; float vxy = v[0]*v[1], vyz = v[1]*v[2], vzx = v[2]*v[0]; m[0] = s[0] * (cosp + (1.0-cosp)*vxx); m[1] = s[0] * ((1.0-cosp)*vxy + v[2]*sinp); m[2] = s[0] * ((1.0-cosp)*vzx - v[1]*sinp); m[3] = 0.0; m[4] = s[1] * ((1.0-cosp)*vxy - v[2]*sinp); m[5] = s[1] * (cosp + (1.0-cosp)*vyy); m[6] = s[1] * ((1.0-cosp)*vyz + v[0]*sinp); m[7] = 0.0; m[8] = s[2] * ((1.0-cosp)*vzx + v[1]*sinp); m[9] = s[2] * ((1.0-cosp)*vyz - v[0]*sinp); m[10] = s[2] * (cosp + (1.0-cosp)*vzz); m[11] = 0.0; m[12] = t[0]; m[13] = t[1]; m[14] = t[2]; m[15] = 1.0; } void Scm_TQSToMatrix4fv(float *m, const float *t, const float *q, const float *s) { float x2 = q[0]*q[0], y2 = q[1]*q[1], z2 = q[2]*q[2]; float xy = q[0]*q[1], yz = q[1]*q[2], zx = q[2]*q[0]; float xw = q[0]*q[3], yw = q[1]*q[3], zw = q[2]*q[3]; m[0] = s[0] * (1-2*(y2+z2)); m[1] = s[0] * 2*(xy+zw); m[2] = s[0] * 2*(zx-yw); m[3] = 0.0; m[4] = s[1] * 2*(xy-zw); m[5] = s[1] * (1-2*(z2+x2)); m[6] = s[1] * 2*(yz+xw); m[7] = 0.0; m[8] = s[2] * 2*(zx+yw); m[9] = s[2] * 2*(yz-xw); m[10] = s[2] * (1-2*(x2+y2)); m[11] = 0.0; m[12] = t[0]; m[13] = t[1]; m[14] = t[2]; m[15] = 1.0; } void Scm_TranslationToMatrix4fv(float *m, const float *t) { m[0] = 1.0; m[4] = 0.0; m[8] = 0.0; m[12] = t[0]; m[1] = 0.0; m[5] = 1.0; m[9] = 0.0; m[13] = t[1]; m[2] = 0.0; m[6] = 0.0; m[10] = 1.0; m[14] = t[2]; m[3] = 0.0; m[7] = 0.0; m[11] = 0.0; m[15] = 1.0; } void Scm_RotationToMatrix4fv(float *m, const float *v, float phi) { static const float t[3] = { 0.0, 0.0, 0.0 }; static const float s[3] = { 1.0, 1.0, 1.0 }; Scm_TRSToMatrix4fv(m, t, v, phi, s); } void Scm_ScaleToMatrix4fv(float *m, const float *s) { m[0] = s[0]; m[4] = 0.0; m[8] = 0.0; m[12] = 0.0; m[1] = 0.0; m[5] = s[1]; m[9] = 0.0; m[13] = 0.0; m[2] = 0.0; m[6] = 0.0; m[10] = s[2]; m[14] = 0.0; m[3] = 0.0; m[7] = 0.0; m[11] = 0.0; m[15] = 1.0; } /* Euler angles -> rotation matrix. Rotation order is fixed. */ void Scm_EulerToMatrix4fv(float m[], float x, float y, float z, int order) { float cx = cosf(x), sx = sinf(x); float cy = cosf(y), sy = sinf(y); float cz = cosf(z), sz = sinf(z); switch (order) { /* Nobody wants to write down these expressions by hand. The code in this switch statement is generated by the script attached at the end of this source code. */ case SCM_MATH3D_ROTATE_XYZ: m[0] = cz*cy; m[1] = sz*cy; m[2] = -sy; m[4] = cz*sy*sx + -sz*cx; m[5] = sz*sy*sx + cz*cx; m[6] = cy*sx; m[8] = cz*sy*cx + sz*sx; m[9] = sz*sy*cx + -cz*sx; m[10] = cy*cx; break; case SCM_MATH3D_ROTATE_XZY: m[0] = cy*cz; m[1] = sz; m[2] = -sy*cz; m[4] = -cy*sz*cx + sy*sx; m[5] = cz*cx; m[6] = sy*sz*cx + cy*sx; m[8] = cy*sz*sx + sy*cx; m[9] = -cz*sx; m[10] = -sy*sz*sx + cy*cx; break; case SCM_MATH3D_ROTATE_YZX: m[0] = cz*cy; m[1] = cx*sz*cy + sx*sy; m[2] = sx*sz*cy + -cx*sy; m[4] = -sz; m[5] = cx*cz; m[6] = sx*cz; m[8] = cz*sy; m[9] = cx*sz*sy + -sx*cy; m[10] = sx*sz*sy + cx*cy; break; case SCM_MATH3D_ROTATE_YXZ: m[0] = cz*cy + -sz*sx*sy; m[1] = sz*cy + cz*sx*sy; m[2] = -cx*sy; m[4] = -sz*cx; m[5] = cz*cx; m[6] = sx; m[8] = cz*sy + sz*sx*cy; m[9] = sz*sy + -cz*sx*cy; m[10] = cx*cy; break; case SCM_MATH3D_ROTATE_ZXY: m[0] = cy*cz + sy*sx*sz; m[1] = cx*sz; m[2] = -sy*cz + cy*sx*sz; m[4] = -cy*sz + sy*sx*cz; m[5] = cx*cz; m[6] = sy*sz + cy*sx*cz; m[8] = sy*cx; m[9] = -sx; m[10] = cy*cx; break; case SCM_MATH3D_ROTATE_ZYX: m[0] = cy*cz; m[1] = cx*sz + sx*sy*cz; m[2] = sx*sz + -cx*sy*cz; m[4] = -cy*sz; m[5] = cx*cz + -sx*sy*sz; m[6] = sx*cz + cx*sy*sz; m[8] = sy; m[9] = -sx*cy; m[10] = cx*cy; break; default: Scm_Error("bad ordering parameter for euler->matrix4f: %d", order); } /* common part */ m[3] = 0.0; m[7] = 0.0; m[11] = 0.0; m[12] = 0.0; m[13] = 0.0; m[14] = 0.0; m[15] = 1.0; } /* * Matrix decomposition * * The algorithm is taken from Thomas, Spencer W., Decomposing a Matrix * Into Simple Transformations, Graphics Gems II, p. 320-323 * * Decompose matrix m to translation vector T, rotation matrix R, * shear vector H, and scale vector S. * Further decomposition of rotation matrix R can be done in separate * function. * * T = [tx, ty, tz, 0] * S = [sx, sy, sz, 0] * H = [shear_yz, shear_zx, shear_xy, 0] * * Returns TRUE if m is non-singular, or FALSE if m is singular. */ int Scm_Matrix4fDecomposev(const float m[], float T[], float R[], float H[], float S[]) { float r[3][4], temp[4], det; int i; /* Translation part is easy */ T[0] = m[12]; T[1] = m[13]; T[2] = m[14]; T[3] = 0.0; /* prepare three row vectors */ for (i=0; i<3; i++) { r[i][0] = m[i*4]; r[i][1] = m[i*4+1]; r[i][2] = m[i*4+2]; r[i][3] = 0.0; } /* Scale X */ S[0] = SCM_VECTOR4F_NORMV(r[0]); if (S[0] != 0.0) { SCM_VECTOR4F_OP(_, r[0][_] /= S[0]); /* normalize */ } /* Shear XY */ H[0] = SCM_VECTOR4F_DOTV(r[0], r[1]); r[1][0] -= H[0]*r[0][0]; r[1][1] -= H[0]*r[0][1]; r[1][2] -= H[0]*r[0][2]; /* Scale Y */ S[1] = SCM_VECTOR4F_NORMV(r[1]); if (S[1] != 0.0) { SCM_VECTOR4F_OP(_, r[1][_] /= S[1]); /* normalize */ H[2] /= S[1]; } /* Shear XZ */ H[1] = SCM_VECTOR4F_DOTV(r[0], r[2]); r[2][0] -= H[1]*r[0][0]; r[2][1] -= H[1]*r[0][1]; r[2][2] -= H[1]*r[0][2]; /* Shear YZ */ H[2] = SCM_VECTOR4F_DOTV(r[1], r[2]); r[2][0] -= H[2]*r[1][0]; r[2][1] -= H[2]*r[1][1]; r[2][2] -= H[2]*r[1][2]; /* Scale Z */ S[2] = SCM_VECTOR4F_NORMV(r[2]); if (S[2] != 0.0) { SCM_VECTOR4F_OP(_, r[2][_] /= S[2]); /* normalize */ H[1] /= S[2]; H[2] /= S[2]; } S[3] = H[3] = 0.0; /* Adjust if flipped */ SCM_VECTOR4F_CROSSV(temp, r[1], r[2]); det = SCM_VECTOR4F_DOTV(r[0], temp); if (det < 0.0) { for (i=0; i<3; i++) { S[i] = -S[i]; r[i][0] = -r[i][0]; r[i][1] = -r[i][1]; r[i][2] = -r[i][2]; } } if (r[0][2] < -1.0) r[0][2] = -1.0; if (r[0][2] > 1.0) r[0][2] = 1.0; /* Store rotation matrix */ for (i=0; i<3; i++) { R[i*4] = r[i][0]; R[i*4+1] = r[i][1]; R[i*4+2] = r[i][2]; R[i*4+3] = 0.0; } R[12] = R[13] = R[14] = 0.0; R[15] = 1.0; if (S[0] == 0.0 || S[1] == 0.0 || S[2] == 0.0) return FALSE; else return TRUE; } /* * Recover rotation from orthogonal matrix. */ float Scm_Matrix4fToRotationv(const float m[], float v[]) { float q[4]; float theta, sint; Scm_Matrix4fToQuatfv(q, m); theta = atan2f(sqrtf(q[0]*q[0]+q[1]*q[1]+q[2]*q[2]), q[3]); sint = sinf(theta); if (fabs(sint) < 1.0e-6) { v[0] = v[1] = v[2] = v[3] = 0.0; return 0.0; } else { v[0] = q[0]/sint; v[1] = q[1]/sint; v[2] = q[2]/sint; v[3] = 0.0; return theta*2; } } /*============================================================= * Quaternion */ static void quat_print(ScmObj obj, ScmPort *out, ScmWriteContext *ctx) { Scm_Printf(out, "#,(quatf %g %g %g %g)", SCM_QUATF_D(obj)[0], SCM_QUATF_D(obj)[1], SCM_QUATF_D(obj)[2], SCM_QUATF_D(obj)[3]); } static int quat_compare(ScmObj x, ScmObj y, int equalp) { if (equalp) { if (SCM_QUATF_D(x)[0] == SCM_QUATF_D(y)[0] && SCM_QUATF_D(x)[1] == SCM_QUATF_D(y)[1] && SCM_QUATF_D(x)[2] == SCM_QUATF_D(y)[2] && SCM_QUATF_D(x)[3] == SCM_QUATF_D(y)[3]) { return 0; } else { return -1; } } else { Scm_Error("can't order quat %S and %S", x, y); return 0; /* dummy */ } } SCM_DEFINE_BUILTIN_CLASS(Scm_QuatfClass, quat_print, quat_compare, NULL, NULL, sequenceCPL); /* * Constructors and converters */ ScmObj Scm_MakeQuatf(float x, float y, float z, float w) { ScmQuatf *v = SCM_NEW(ScmQuatf); SCM_SET_CLASS(v, SCM_CLASS_QUATF); SCM_QUATF_D(v) = ALLOC_FV(4); SCM_QUATF_D(v)[0] = x; SCM_QUATF_D(v)[1] = y; SCM_QUATF_D(v)[2] = z; SCM_QUATF_D(v)[3] = w; return SCM_OBJ(v); } ScmObj Scm_MakeQuatfv(const float d[]) { if (d) return Scm_MakeQuatf(d[0], d[1], d[2], d[3]); else return Scm_MakeQuatf(0.0, 0.0, 0.0, 1.0); } ScmObj Scm_MakeQuatfvShared(float d[]) { ScmQuatf *v = SCM_NEW(ScmQuatf); SCM_SET_CLASS(v, SCM_CLASS_QUATF); SCM_QUATF_D(v) = d; return SCM_OBJ(v); } ScmObj Scm_QuatfSetv(ScmQuatf *q, const float d[]) { float *fv = SCM_QUATF_D(q); fv[0]=d[0]; fv[1]=d[1]; fv[2]=d[2]; fv[3]=d[3]; SCM_RETURN(SCM_OBJ(q)); } ScmObj Scm_ListToQuatf(ScmObj l) { int i; float d[4]; ScmObj lp = l; for (i=0; i<4; i++, lp = SCM_CDR(lp)) { if (!SCM_PAIRP(lp)) goto badlist; if (!SCM_REALP(SCM_CAR(lp))) goto badlist; d[i] = (float)Scm_GetDouble(SCM_CAR(lp)); } return Scm_MakeQuatfv(d); badlist: Scm_Error("list of 3 or 4 real numbers required, but got %S", l); return SCM_UNDEFINED; } ScmObj Scm_QuatfToList(const ScmQuatf *p) { return SCM_LIST4(Scm_MakeFlonum(SCM_QUATF_D(p)[0]), Scm_MakeFlonum(SCM_QUATF_D(p)[1]), Scm_MakeFlonum(SCM_QUATF_D(p)[2]), Scm_MakeFlonum(SCM_QUATF_D(p)[3])); } void Scm_QuatfAddv(float *r, const float *p, const float *q) { SCM_VECTOR4F_OP(i, r[i] = p[i] + q[i]); } ScmObj Scm_QuatfAdd(const ScmQuatf *p, const ScmQuatf *q) { float r[4]; SCM_VECTOR4F_OP(i, r[i] = SCM_QUATF_D(p)[i] + SCM_QUATF_D(q)[i]); return Scm_MakeQuatfv(r); } void Scm_QuatfSubv(float *r, const float *p, const float *q) { SCM_VECTOR4F_OP(i, r[i] = p[i] - q[i]); } ScmObj Scm_QuatfSub(const ScmQuatf *p, const ScmQuatf *q) { float r[4]; SCM_VECTOR4F_OP(i, r[i] = SCM_QUATF_D(p)[i] - SCM_QUATF_D(q)[i]); return Scm_MakeQuatfv(r); } void Scm_QuatfMulv(float *r, const float *p, const float *q) { r[0] = p[0]*q[3]+p[1]*q[2]-p[2]*q[1]+p[3]*q[0]; r[1] = p[1]*q[3]+p[2]*q[0]-p[0]*q[2]+p[3]*q[1]; r[2] = p[2]*q[3]+p[0]*q[1]-p[1]*q[0]+p[3]*q[2]; r[3] = -p[0]*q[0]-p[1]*q[1]-p[2]*q[2]+p[3]*q[3]; } ScmObj Scm_QuatfMul(const ScmQuatf *p, const ScmQuatf *q) { float r[4]; Scm_QuatfMulv(r, SCM_QUATF_D(p), SCM_QUATF_D(q)); return Scm_MakeQuatfv(r); } ScmObj Scm_QuatfNormalize(const ScmQuatf *p) { float r[4]; r[0] = SCM_QUATF_D(p)[0]; r[1] = SCM_QUATF_D(p)[1]; r[2] = SCM_QUATF_D(p)[2]; r[3] = SCM_QUATF_D(p)[3]; SCM_QUATF_NORMALIZEV(r); return Scm_MakeQuatfv(r); } ScmObj Scm_QuatfNormalizeX(ScmQuatf *p) { SCM_QUATF_NORMALIZEV(SCM_QUATF_D(p)); return SCM_OBJ(p); } /* * Quaternion <-> Matrix */ void Scm_QuatfToMatrix4fv(float m[], const float q[]) { float x2 = q[0]*q[0], y2 = q[1]*q[1], z2 = q[2]*q[2]; float xy = q[0]*q[1], yz = q[1]*q[2], zx = q[2]*q[0]; float xw = q[0]*q[3], yw = q[1]*q[3], zw = q[2]*q[3]; m[0] = 1-2*(y2+z2); m[4] = 2*(xy-zw); m[8] = 2*(zx+yw); m[12] = 0; m[1] = 2*(xy+zw); m[5] = 1-2*(z2+x2); m[9] = 2*(yz-xw); m[13] = 0; m[2] = 2*(zx-yw); m[6] = 2*(yz+xw); m[10] = 1-2*(x2+y2); m[14] = 0; m[3] = 0; m[7] = 0; m[11] = 0; m[15] = 1; } void Scm_Matrix4fToQuatfv(float q[], const float m[]) { float trace = m[0] + m[5] + m[10]; float s; if (trace > 0.0) { s = 0.5 / sqrtf(trace + 1.0); q[0] = (m[6]-m[9])*s; q[1] = (m[8]-m[2])*s; q[2] = (m[1]-m[4])*s; q[3] = 0.25 / s; } else { static int next[] = { 1, 2, 0 }; /* to avoid modulo */ int i, j, k; /* find max elem in m(i,i) for i=0 to 2. */ if (m[0] >= m[5]) { if (m[0] >= m[10]) i = 0; else i = 2; } else { if (m[5] >= m[10]) i = 1; else i = 2; } j = next[i]; k = next[j]; s = sqrtf((m[i*5] - (m[j*5]+m[k*5])) + 1.0); if (m[j*4+k] < m[k*4+j]) s *= -1.0; q[i] = 0.5 * s; s = 0.5 / s; q[j] = (m[j*4+i] + m[i*4+j]) * s; q[k] = (m[k*4+i] + m[i*4+k]) * s; q[3] = (m[j*4+k] - m[k*4+j]) * s; } } /* * Transform a vector/point by quaternion * calculates qvq* */ void Scm_QuatfTransformv(float r[], const float q[], const float v[]) { float qconj[4], s[4]; SCM_QUATF_CONJUGATEV(qconj, q); Scm_QuatfMulv(s, q, v); Scm_QuatfMulv(r, s, qconj); } /* * Interpolation */ void Scm_QuatfSlerp(float r[], const float p[], const float q[], float t) { double cosphi = p[0]*q[0]+p[1]*q[1]+p[2]*q[2]+p[3]*q[3], phi, sinphi; float cp, cq; phi = acos(cosphi); sinphi = sin(phi); if (sinphi < 1.0e-5 && sinphi > -1.0e-5) { cp = 1.0 - t; cq = t; } else { cp = sin(phi*(1.0-t))/sinphi; cq = sin(phi*t)/sinphi; } SCM_VECTOR4F_OP(i, r[i] = cp*p[i] + cq*q[i]); } /* * Conversion between Euler angles and Quartenions */ /* * Vectors -> Quaternion * Return a quaternion that represents the rotation to rotate V to W. * NOTE: if V = -W, we can't determine a unique rotation. This routine * returns #,(quatf e0 e1 e2 e3) where eN is very small number. * It's caller's responsibility to detect the case. */ void Scm_VectorsToQuatfv(float r[], const float v[], const float w[]) { float p[4], c, s2, f; SCM_VECTOR4F_CROSSV(p, v, w); c = SCM_VECTOR4F_DOTV(v, w); /* cos(t) */ s2 = SCM_VECTOR4F_DOTV(p, p); /* sin^2(t) */ if (s2 > 0) { /* NB: should we consider epsilon? */ f = sqrtf((1-c) / (2*s2)); /* sin(t/2)/sin(t) sans sign */ } else { f = 0.0f; } r[0] = f*p[0]; r[1] = f*p[1]; r[2] = f*p[2]; r[3] = sqrtf((1+c)/2); } /* * Axes -> Quaternion * * (v1, v2) and (w1,w2) are pair of perpendicular unit vectors. Calculates * a rotation that transforms v1 to w1 and v2 to w2. */ void Scm_AxesToQuatfv(float r[], const float v1[], const float v2[], const float w1[], const float w2[]) { float q1[4], q2[4], c, t, s2, axis[4], wt[4]; Scm_VectorsToQuatfv(q1, v1, w1); Scm_QuatfTransformv(wt, q1, v2); SCM_VECTOR4F_CROSSV(axis, wt, w2); SCM_VECTOR4F_NORMALIZEV(axis); c = SCM_VECTOR4F_DOTV(w2, wt); /* cos(t) */ if (c < -1.0f) c = -1.0f; else if (c > 1.0f) c = 1.0f; t = acosf(c); s2 = sinf(t/2); q2[0] = axis[0] * s2; q2[1] = axis[1] * s2; q2[2] = axis[2] * s2; q2[3] = cosf(t/2); Scm_QuatfMulv(r, q2, q1); } /*============================================================= * Initialization */ extern void Scm_Init_math3d_lib(ScmModule *mod); void Scm_Init_libgauche_math3d(void) { ScmModule *mod; SCM_INIT_EXTENSION(libgauche_math3d); mod = SCM_MODULE(SCM_FIND_MODULE("gl.math3d", TRUE)); Scm_InitBuiltinClass(&Scm_Vector4fClass, "<vector4f>", NULL, sizeof(ScmVector4f)/sizeof(ScmObj), mod); Scm_InitBuiltinClass(&Scm_Vector4fArrayClass, "<vector4f-array>", NULL, sizeof(ScmVector4fArray)/sizeof(ScmObj), mod); Scm_InitBuiltinClass(&Scm_Point4fClass, "<point4f>", NULL, sizeof(ScmPoint4f)/sizeof(ScmObj), mod); Scm_InitBuiltinClass(&Scm_Point4fArrayClass, "<point4f-array>", NULL, sizeof(ScmPoint4fArray)/sizeof(ScmObj), mod); Scm_InitBuiltinClass(&Scm_Matrix4fClass, "<matrix4f>", NULL, sizeof(ScmMatrix4f)/sizeof(ScmObj), mod); Scm_InitBuiltinClass(&Scm_QuatfClass, "<quatf>", NULL, sizeof(ScmQuatf)/sizeof(ScmObj), mod); Scm_Init_math3d_lib(mod); } /* Appendix: a script to generate Euler->matrix4f calculation code. See the definition of Scm_EulerToMatrix4fv above. (use srfi-1) (define (mref m i j) (list-ref m (+ (* j 3) i))) (define (tmul t0 t1) (cond ((or (eqv? t0 0) (eqv? t1 0)) 0) ((eqv? t0 1) t1) ((eqv? t1 1) t0) ((eq? (car t0) '-) (if (eq? (car t1) '-) (append (cdr t0) (cdr t1)) (cons '- (append (cdr t0) t1)))) (else (if (eq? (car t1) '-) (cons '- (append t0 (cdr t1))) (append t0 t1))))) (define (mmul m n) (let ((r '())) (dotimes (j 3) (dotimes (i 3) (let1 term (delete 0 (map (lambda (k) (tmul (mref m i k) (mref n k j))) '(0 1 2))) (push! r (cond ((null? term) 0) ((null? (cdr term)) (car term)) (else (list (cons '+ term)))))))) (reverse r))) (define (mmul3 m n o) (mmul m (mmul n o))) (define (fmt m) (define (fmt-e e) (cond ((not (pair? e)) (x->string e)) ((eq? (car e) '-) (string-append "-" (string-join (map x->string (cdr e)) "*"))) ((symbol? (car e)) (string-join (map x->string e) "*")) (else (string-join (map fmt-e (cdar e)) " + ")))) (let ((elts (map fmt-e m)) (ind '(0 1 2 4 5 6 8 9 10))) (dotimes (i 9) (print #`" m[,(list-ref ind i)] = ,(list-ref elts i);"))) ) (define Rx '(1 0 0 0 (cx) (sx) 0 (- sx) (cx))) (define Ry '((cy) 0 (- sy) 0 1 0 (sy) 0 (cy))) (define Rz '((cz) (sz) 0 (- sz) (cz) 0 0 0 1)) (define R `((X ,Rx) (Y ,Ry) (Z ,Rz))) (define (pcase order) (apply format #t " case SCM_MATH3D_ROTATE_~a~a~a:\n" order) (fmt (apply mmul3 (reverse (map (lambda (key) (cond ((assoc key R) => cadr))) order)))) (print " break;")) (pcase '(X Y Z)) (pcase '(X Z Y)) (pcase '(Y Z X)) (pcase '(Y X Z)) (pcase '(Z X Y)) (pcase '(Z Y X)) */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/gen-ptrs.scm��������������������������������������������������������������������0000644�0000764�0000764�00000007727�11615242666�015433� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; gen-ptrs.scm - Generate gl-ptrs.c ;;; ;;; Copyright (c) 2005-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Redistribution and use in source and binary forms, with or without ;;; modification, are permitted provided that the following conditions ;;; are met: ;;; ;;; 1. Redistributions of source code must retain the above copyright ;;; notice, this list of conditions and the following disclaimer. ;;; ;;; 2. Redistributions in binary form must reproduce the above copyright ;;; notice, this list of conditions and the following disclaimer in the ;;; documentation and/or other materials provided with the distribution. ;;; ;;; 3. Neither the name of the authors nor the names of its contributors ;;; may be used to endorse or promote products derived from this ;;; software without specific prior written permission. ;;; ;;; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ;;; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ;;; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ;;; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ;;; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ;;; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED ;;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR ;;; PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ;;; LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING ;;; NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS ;;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ;;; ;;; $Id: gen-ptrs.scm,v 1.5 2008-06-04 11:50:33 shirok Exp $ ;;; (use util.match) (use gauche.cgen) (define *glext-abi* "glext-abi.scm") (cgen-current-unit (make <cgen-unit> :name "gl-ptrs" :c-file "gl-ptrs.h" ;; hack :preamble "/* generated by gen-ptrs.scm $Revision: 1.5 $. DO NOT EDIT */" :init-prologue "" ;; we don't use init fn :init-epilogue "" ;; ditto )) (define (main args) (cgen-decl "#include <gauche.h>" "#ifndef APIENTRY" "#define APIENTRY /*empty*/" "#endif" "#ifndef APIENTRYP" "#define APIENTRYP APIENTRY*" "#endif" "#ifndef GL_VERSION_2_0" "typedef char GLchar;" "#endif" "#ifndef GL_VERSION_1_5" "typedef ptrdiff_t GLintptr;" "typedef ptrdiff_t GLsizeiptr;" "#endif" "#ifndef GL_ARB_vertex_buffer_object" "typedef ptrdiff_t GLintptrARB;" "typedef ptrdiff_t GLsizeiptrARB;" "#endif" "#ifndef GL_ARB_shader_objects" "typedef char GLcharARB;" "typedef unsigned int GLhandleARB;" "#endif" "#ifndef GL_ARB_half_float_pixel" "typedef unsigned short GLhalfARB;" "#endif" "#ifndef GL_NV_half_float" "typedef unsigned short GLhalfNV;" "#endif" "#define ENSURE(fn) \\" " do{if ((fn) == NULL){\\" " fn = (SCM_CPP_CAT(type__, fn))Scm_GLGetProcAddress(#fn);\\" " }} while (0)" ) (with-input-from-file *glext-abi* (cut port-for-each gen read)) (cgen-emit-c (cgen-current-unit)) 0) (define (gen expr) (match expr (('define-entry-point fn typename typedef) ;; we won't use typename (PFN.*PROC), for it may be duplicated ;; if platform's glext.h is already included. Also we insert ;; #define to add 'ptr_' suffix to the function pointer, to avoid ;; possible name conflict. (let* ((ptrname #`"ptr__,fn") (ourtypename #`"type__,ptrname")) (receive (pre post) (string-scan typedef (x->string typename) 'both) (when pre (cgen-decl #`",|pre|,|ourtypename|,|post|") (cgen-decl #`"#define ,fn ,ptrname") (cgen-body #`"static ,|ourtypename| ,fn = NULL;"))))) (else #f))) �����������������������������������������Gauche-gl-0.5.1/src/test-math3d.scm�����������������������������������������������������������������0000644�0000764�0000764�00000050163�11533026402�016004� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; ;; test for gl.math3d module ;; (use gauche.test) (add-load-path "../lib") (test-start "gl.math3d") (use gl.math3d) (use gauche.sequence) (use math.const) (use srfi-1) (define (nearly=? a b) (let ((sizea (size-of a)) (sizeb (size-of b))) (and (= sizea sizeb) (let loop ((i 0)) (cond ((>= i sizea) #t) ((< (abs (- (ref a i) (ref b i))) 1.0e-4) (loop (+ i 1))) (else #f)))))) ;;------------------------------------------------------------------ (test-section "vector4f") (test* "vector4f" #t (vector4f? (vector4f 0 1 2 3))) (test* "vector4f reader" #t (equal? (vector4f 0 1 2 3) #,(vector4f 0 1 2 3))) (test* "vector4f converters" #t (let1 v (vector4f 0 1 2 3) (and (equal? v (list->vector4f '(0 1 2 3))) (equal? v (f32vector->vector4f '#f32(0.0 1.0 2.0 3.0))) (equal? v (list->vector4f (vector4f->list v))) (equal? v (f32vector->vector4f (vector4f->f32vector v))) (equal? v (coerce-to <vector4f> '(0 1 2 3))) (equal? v (coerce-to <vector4f> '#(0 1 2 3))) (equal? v (coerce-to <vector4f> '#f32(0 1 2 3))) ))) (test* "vector4f ref" '(0.0 1.0 2.0 3.0) (let1 v (vector4f 0 1 2 3) (map (pa$ vector4f-ref v) '(0 1 2 3)))) (test* "vector4f set" #,(vector4f 3.0 2.0 1.0 0.0) (let1 v (vector4f 0 0 0 0) (set! (vector4f-ref v 0) 3.0) (set! (vector4f-ref v 1) 2.0) (set! (vector4f-ref v 2) 1.0) (set! (vector4f-ref v 3) 0.0) v)) (test* "vector4f +" #,(vector4f 3.0 5.0 7.0 9.0) (+ #,(vector4f 1.0 2.0 3.0 4.0) #,(vector4f 2.0 3.0 4.0 5.0))) (test* "vector4f +" #,(vector4f 1.0 1.0 1.0 1.0) (+ #,(vector4f 1.0 2.0 3.0 4.0) #,(vector4f 2.0 3.0 4.0 5.0) #,(vector4f -2.0 -4.0 -6.0 -8.0))) (test* "vector4f -" #,(vector4f -1.0 -2.0 -3.0 -4.0) (- #,(vector4f 1.0 2.0 3.0 4.0) #,(vector4f 2.0 4.0 6.0 8.0))) (test* "vector4f *" #,(vector4f 2 4 6 8) (* #,(vector4f 1 2 3 4) 2.0)) (test* "vector4f *" #,(vector4f 2 4 6 8) (* 2.0 #,(vector4f 1 2 3 4))) (test* "vector4f /" #,(vector4f 0.5 1.0 1.5 2.0) (/ #,(vector4f 1 2 3 4) 2.0)) (test* "vector4f dot" 40.0 (vector4f-dot #,(vector4f 1.0 2.0 3.0 4.0) #,(vector4f 2.0 3.0 4.0 5.0))) (test* "vector4f cross" #,(vector4f -4.0 8.0 -4.0 0.0) (vector4f-cross #,(vector4f 1.0 2.0 3.0 0.0) #,(vector4f 5.0 6.0 7.0 0.0))) (test* "vector4f normalize" #,(vector4f 0.5 0.5 0.5 0.5) (vector4f-normalize (vector4f 1 1 1 1))) (test* "vector4f normalize!" #,(vector4f 0.5 0.5 0.5 0.5) (let1 v (vector4f 4 4 4 4) (vector4f-normalize! v) v)) ;; sequence access (test* "sequence" '(1.0 2.0 3.0 4.0) (coerce-to <list> #,(vector4f 1.0 2.0 3.0 4.0))) (test* "sequence" #,(vector4f 1.0 2.0 3.0 4.0) (coerce-to <vector4f> '(1.0 2.0 3.0 4.0))) ;;------------------------------------------------------------------ (test-section "point4f") (test* "point4f" #t (point4f? (point4f 1 2 3))) (test* "point4f reader" #t (equal? (point4f 1 2 3) #,(point4f 1 2 3))) (test* "point4f converters" #t (let1 v (point4f 1 2 3) (and (equal? v (list->point4f '(1 2 3))) (equal? v (list->point4f (point4f->list v)))))) (test* "point4f ref" '(1.0 2.0 3.0) (let1 v (point4f 1 2 3) (map (pa$ point4f-ref v) '(0 1 2)))) (test* "point4f set" #,(point4f 3.0 2.0 1.0) (let1 v (point4f 0 0 0) (set! (point4f-ref v 0) 3.0) (set! (point4f-ref v 1) 2.0) (set! (point4f-ref v 2) 1.0) v)) (test* "point4f +" #,(point4f 3.0 5.0 7.0) (+ #,(point4f 1.0 2.0 3.0) #,(vector4f 2.0 3.0 4.0))) (test* "point4f +" #,(point4f 1.0 1.0 1.0) (+ #,(point4f 1.0 2.0 3.0) #,(vector4f 2.0 3.0 4.0) #,(vector4f -2.0 -4.0 -6.0))) (test* "point4f -" #,(point4f -1.0 -2.0 -3.0) (- #,(point4f 1.0 2.0 3.0) #,(vector4f 2.0 4.0 6.0))) (test* "point4f -" #,(vector4f -1.0 -2.0 -3.0) (- #,(point4f 1.0 2.0 3.0) #,(point4f 2.0 4.0 6.0))) ;; sequence access (test* "sequence" '(1.0 2.0 3.0 4.0) (coerce-to <list> #,(point4f 1.0 2.0 3.0 4.0))) (test* "sequence" #,(point4f 1.0 2.0 3.0 4.0) (coerce-to <point4f> '(1.0 2.0 3.0 4.0))) ;;------------------------------------------------------------------ (test-section "matrix4f") (test* "matrix4f" #,(matrix4f 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5) (matrix4f 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5)) (test* "matrix4f row" '(#,(vector4f 0 4 8 2) #,(vector4f 1 5 9 3) #,(vector4f 2 6 0 4) #,(vector4f 3 7 1 5)) (let1 m (matrix4f 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5) (map (pa$ matrix4f-row m) '(0 1 2 3)))) (test* "matrix4f row set!" #,(matrix4f 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5) (let1 m (make-matrix4f) (set! (matrix4f-row m 3) (vector4f 3 7 1 5)) (set! (matrix4f-row m 2) (vector4f 2 6 0 4)) (set! (matrix4f-row m 1) (vector4f 1 5 9 3)) (set! (matrix4f-row m 0) (vector4f 0 4 8 2)) m)) (test* "matrix4f column" '(#,(vector4f 0 1 2 3) #,(vector4f 4 5 6 7) #,(vector4f 8 9 0 1) #,(vector4f 2 3 4 5)) (let1 m (matrix4f 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5) (map (pa$ matrix4f-column m) '(0 1 2 3)))) (test* "matrix4f column set!" #,(matrix4f 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5) (let1 m (make-matrix4f) (set! (matrix4f-column m 3) (vector4f 2 3 4 5)) (set! (matrix4f-column m 2) (vector4f 8 9 0 1)) (set! (matrix4f-column m 1) (vector4f 4 5 6 7)) (set! (matrix4f-column m 0) (vector4f 0 1 2 3)) m)) (test* "matrix4f * matrix4f" (let ((A0 (vector4f 0 4 8 12)) (A1 (vector4f 1 5 9 13)) (A2 (vector4f 2 6 10 14)) (A3 (vector4f 3 7 11 15)) (B0 (vector4f 16 17 18 19)) (B1 (vector4f 20 21 22 23)) (B2 (vector4f 24 25 26 27)) (B3 (vector4f 28 29 30 31)) (dot vector4f-dot)) (matrix4f (dot A0 B0) (dot A1 B0) (dot A2 B0) (dot A3 B0) (dot A0 B1) (dot A1 B1) (dot A2 B1) (dot A3 B1) (dot A0 B2) (dot A1 B2) (dot A2 B2) (dot A3 B2) (dot A0 B3) (dot A1 B3) (dot A2 B3) (dot A3 B3))) (* (matrix4f 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (matrix4f 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31)) ) (test* "matrix4f * vector4f" (let ((V (vector4f 1 -2 3 -4))) (vector4f (vector4f-dot (vector4f 0 4 8 12) V) (vector4f-dot (vector4f 1 5 9 13) V) (vector4f-dot (vector4f 2 6 10 14) V) (vector4f-dot (vector4f 3 7 11 15) V))) (* (matrix4f 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (vector4f 1 -2 3 -4))) (test* "matrix4f * scalar" (matrix4f 0 -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15) (* (matrix4f 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) -1)) (test* "matrix4f transpose" (matrix4f 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15) (matrix4f-transpose (matrix4f 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))) (test* "matrix4f transpose!" (matrix4f 0 4 8 12 1 5 9 13 2 6 10 14 3 7 11 15) (let1 m (matrix4f 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15) (matrix4f-transpose! m) m)) (test* "matrix4f determinant" 1.0 (matrix4f-determinant (matrix4f 1 0 0 0 0 2 4 9 0 3 2 6 0 2 3 7))) (test* "matrix4f determinant" -1.0 (matrix4f-determinant (matrix4f 0 1 0 0 2 0 3 9 3 0 2 5 5 0 3 7))) (test* "matrix4f determinant" 1.0 (matrix4f-determinant (matrix4f 0 0 1 0 2 3 0 17 3 2 0 11 6 3 0 16))) (test* "matrix4f determinant" -1.0 (matrix4f-determinant (matrix4f 0 0 0 1 2 3 17 0 3 2 11 0 6 3 16 0))) (test* "matrix4f determinant" -1.0 (matrix4f-determinant (matrix4f 0 2 4 9 1 0 0 0 0 3 2 6 0 2 3 7))) (test* "matrix4f determinant" 1.0 (matrix4f-determinant (matrix4f 0 2 4 9 0 3 2 6 1 0 0 0 0 2 3 7))) (test* "matrix4f inverse" (matrix4f 1 0 0 0 0 -4 -1 6 0 -9 -4 15 0 5 2 -8) (matrix4f-inverse (matrix4f 1 0 0 0 0 2 4 9 0 3 2 6 0 2 3 7)) nearly=?) (test* "matrix4f inverse, mul" (matrix4f 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1) (let ((m (matrix4f 0 2 4 9 0 3 2 6 1 0 0 0 0 2 3 7))) (matrix4f-mul m (matrix4f-inverse m))) nearly=?) (test* "matrix4f inverse, mul 2" (matrix4f 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1) (let* ((m (matrix4f 0 2 4 9 0 3 2 6 1 0 0 0 0 2 3 7)) (n (matrix4f 0 0 0 1 2 3 17 0 3 2 11 0 6 3 16 0)) (1/m (matrix4f-inverse m)) (1/n (matrix4f-inverse n))) (matrix4f-mul (matrix4f-mul m n) (matrix4f-mul 1/n 1/m))) nearly=?) (test* "matrix4f inverse!" (matrix4f 0 -1 6 -3 1 0 0 0 0 4 -31 17 0 -1 9 -5) (let ((m (matrix4f 0 1 0 0 2 0 3 9 3 0 2 5 5 0 3 7))) (matrix4f-inverse! m) m) nearly=?) (test* "matrix4f inverse (singular)" #f (matrix4f-inverse (matrix4f 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0) #f)) (test* "matrix4f inverse (singular)" *test-error* (matrix4f-inverse (matrix4f 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15))) (let ((t0 -2.0) (t1 -3.0) (t2 -4.0) (phi (* 60 pi/180)) (s0 1.1) (s1 1.2) (s2 1.3)) (test* "matrix4 and transform" (let* ((cosphi (cos phi)) (1-cosphi (- 1 cosphi)) (sinphi (sin phi)) (sqrt14 (sqrt 14)) (vx (/ 1 sqrt14)) (vy (/ 2 sqrt14)) (vz (/ 3 sqrt14)) (T (matrix4f 1 0 0 0 0 1 0 0 0 0 1 0 t0 t1 t2 1)) (R (matrix4f (+ cosphi (* 1-cosphi vx vx)) (+ (* 1-cosphi vx vy) (* sinphi vz)) (- (* 1-cosphi vx vz) (* sinphi vy)) 0.0 (- (* 1-cosphi vx vy) (* sinphi vz)) (+ cosphi (* 1-cosphi vy vy)) (+ (* 1-cosphi vy vz) (* sinphi vx)) 0.0 (+ (* 1-cosphi vx vz) (* sinphi vy)) (- (* 1-cosphi vy vz) (* sinphi vx)) (+ cosphi (* 1-cosphi vz vz)) 0.0 0.0 0.0 0.0 1.0)) (S (matrix4f s0 0 0 0 0 s1 0 0 0 0 s2 0 0 0 0 1)) ) (matrix4f-mul T (matrix4f-mul R S))) (trs->matrix4f (vector4f t0 t1 t2) (vector4f (/ 1 (sqrt 14)) (/ 2 (sqrt 14)) (/ 3 (sqrt 14))) phi (vector4f s0 s1 s2)) nearly=?)) ;; tests euler angles (let* ((rotx (* 23 pi/180)) (roty (* -66 pi/180)) (rotz (* 171 pi/180)) (Rx (rotation->matrix4f (vector4f 1 0 0) rotx)) (Ry (rotation->matrix4f (vector4f 0 1 0) roty)) (Rz (rotation->matrix4f (vector4f 0 0 1) rotz))) (define (euler-tester sig a b c) (test #`"euler->mat (,sig)" (matrix4f-mul c (matrix4f-mul b a)) (lambda () (euler-angle->matrix4f rotx roty rotz sig)) nearly=?)) (euler-tester 'xyz Rx Ry Rz) (euler-tester 'xzy Rx Rz Ry) (euler-tester 'yzx Ry Rz Rx) (euler-tester 'yxz Ry Rx Rz) (euler-tester 'zxy Rz Rx Ry) (euler-tester 'zyx Rz Ry Rx) ) ;; matrix decompose (define (matrix-decompose-tester name T R H S) (test name '(#t #t #t #t #t) (lambda () (let* ((tmat (translation->matrix4f T)) (smat (scale->matrix4f S)) (mat (matrix4f-mul tmat (matrix4f-mul R smat)))) (receive (f t r h s) (matrix4f-decompose mat) ;(print r) ;(print R) ;(print h) ;(print s) (list f (nearly=? t T) (nearly=? r R) (nearly=? h H) (nearly=? s S))))))) (matrix-decompose-tester "matrix-decompose" (vector4f 1 3 2) (rotation->matrix4f (vector4f-normalize (vector4f 3 8 -1)) (* 264 pi/180)) (vector4f 0 0 0 0) (vector4f 1.1 0.5 0.2)) (matrix-decompose-tester "matrix-decompose (flip)" (vector4f 9 2 4) (rotation->matrix4f (vector4f-normalize (vector4f 6 0 2)) (* 82 pi/180)) (vector4f 0 0 0 0) (vector4f -1 -2 -3)) (test* "matrix4f->rotation" #t (let* ((axis (vector4f-normalize (vector4f 1 2 3))) (angle (* 45 pi/180)) (m (rotation->matrix4f axis angle))) (receive (raxis rangle) (matrix4f->rotation m) (and (nearly=? axis raxis) (< (abs (- rangle angle)) 1.0e-4))))) ;; sequence access (test* "sequence" '(1.0 2.0 3.0 4.0 -1.0 -2.0 -3.0 -4.0 4.0 3.0 2.0 1.0 -4.0 -3.0 -2.0 -1.0) (coerce-to <list> #,(matrix4f 1 2 3 4 -1 -2 -3 -4 4 3 2 1 -4 -3 -2 -1))) (test* "sequence" #,(matrix4f 1.0 2.0 3.0 4.0 -1.0 -2.0 -3.0 -4.0 4.0 3.0 2.0 1.0 -4.0 -3.0 -2.0 -1.0) (coerce-to <matrix4f> '(1.0 2.0 3.0 4.0 -1.0 -2.0 -3.0 -4.0 4.0 3.0 2.0 1.0 -4.0 -3.0 -2.0 -1.0))) ;;------------------------------------------------------------------ (test-section "quatf") (test* "conjugate" (make-quatf (vector4f 0 (/ 1 (sqrt 5)) (/ 2 (sqrt 5))) -0.5) (quatf-conjugate (make-quatf (vector4f 0 (/ 1 (sqrt 5)) (/ 2 (sqrt 5))) 0.5))) (let ((p (make-quatf (vector4f-normalize (vector4f 3 2 1)) -1.6)) (q (make-quatf (vector4f-normalize (vector4f 0 2 5)) 0.7)) (r (make-quatf (vector4f-normalize (vector4f 2 1 3)) 0.1))) (test* "add, sub, and mul" (list (+ p q) (- p q) (* p q) p) (let ((p+ (quatf-copy p)) (p- (quatf-copy p)) (p* (quatf-copy p))) (quatf-add! p+ q) (quatf-sub! p- q) (quatf-mul! p* q) (list p+ p- p* p)))) (test* "rotation -> quaterion" (let* ((phi (* 75 pi/180)) (q (quatf (* (sin phi) (/ 1 (sqrt 14))) (* (sin phi) (/ 2 (sqrt 14))) (* (sin phi) (/ 3 (sqrt 14))) (cos phi)))) (list q q)) (let1 rotv (vector4f (/ 1 (sqrt 14)) (/ 2 (sqrt 14)) (/ 3 (sqrt 14))) (list (make-quatf rotv (* 150 pi/180)) (let1 q (make-quatf) (rotation->quatf! q rotv (* 150 pi/180))))) ) (test* "transform by quaternion" (* (rotation->matrix4f (vector4f 0 (/ 1 (sqrt 5)) (/ 2 (sqrt 5))) (* 15 pi/180)) (point4f 3.1 2.1 1.1)) (quatf-transform (make-quatf (vector4f 0 (/ 1 (sqrt 5)) (/ 2 (sqrt 5))) (* 15 pi/180)) (point4f 3.1 2.1 1.1)) nearly=?) (test* "tqs->matrix" (trs->matrix4f #,(vector4f 0 0 0) (vector4f (/ 2 (sqrt 29)) (/ 3 (sqrt 29)) (/ 4 (sqrt 29))) (* -41 pi/180) #,(vector4f 1 2 3)) (tqs->matrix4f #,(vector4f 0 0 0) (make-quatf (vector4f (/ 2 (sqrt 29)) (/ 3 (sqrt 29)) (/ 4 (sqrt 29))) (* -41 pi/180)) #,(vector4f 1 2 3)) nearly=?) ;; matrix <-> quaternion (test* "quatf->matrix" (rotation->matrix4f (vector4f (/ 3 (sqrt 14)) (/ 2 (sqrt 14)) (/ -1 (sqrt 14))) (* 75 pi/180)) (quatf->matrix4f (make-quatf (vector4f (/ 3 (sqrt 14)) (/ 2 (sqrt 14)) (/ -1 (sqrt 14))) (* 75 pi/180))) nearly=?) (test* "matrix->quatf" (make-quatf (vector4f (/ 7 (sqrt 66)) (/ -1 (sqrt 66)) (/ 4 (sqrt 66))) (* -13 pi/180)) (matrix4f->quatf (rotation->matrix4f (vector4f (/ 7 (sqrt 66)) (/ -1 (sqrt 66)) (/ 4 (sqrt 66))) (* -13 pi/180))) nearly=?) ;; rotation check (let () (define (rot-test q v) (let* ((nv (vector4f-normalize v))) (test* (format "rotation by quaternion ~s ~s" q v) (* (quatf->matrix4f q) nv) (quatf-transform q nv) nearly=?))) (define (rot-test* q) (for-each (cute rot-test (quatf-normalize q) <>) '(#,(vector4f 1 0 0 0) #,(vector4f 0 1 0 0) #,(vector4f 0 0 1 0) #,(vector4f 1 1 0 0) #,(vector4f 1 -1 0 0) #,(vector4f -1 0 1 0) #,(vector4f 1 0 -1 0) #,(vector4f 0 1 -1 0) #,(vector4f 0 -1 1 0) #,(vector4f 3 1 4 0)))) (for-each rot-test* '(#,(quatf 1 0 0 0) #,(quatf 0 1 0 0) #,(quatf 0 0 1 0) #,(quatf 0 0 0 1) #,(quatf 1 1 1 1) #,(quatf 1 -1 1 -1) #,(quatf 3 1 -4 5)))) ;; test case for small trace case (test* "matrix->quatf (small trace)" (make-quatf (vector4f 1 0 0) (- pi 0.1)) (matrix4f->quatf (rotation->matrix4f (vector4f 1 0 0) (- pi 0.1))) nearly=?) (test* "matrix->quatf (small trace)" (make-quatf (vector4f 0 1 0) (- pi 0.1)) (matrix4f->quatf (rotation->matrix4f (vector4f 0 1 0) (- pi 0.1))) nearly=?) (test* "matrix->quatf (small trace)" (make-quatf (vector4f 0 0 1) (- pi 0.1)) (matrix4f->quatf (rotation->matrix4f (vector4f 0 0 1) (- pi 0.1))) nearly=?) ;; two vectors -> quatf (let () (define (2vtest v w) (let ((nv (vector4f-normalize v)) (nw (vector4f-normalize w))) (test* (format "2vtest ~s ~s" v w) nw (quatf-transform (vectors->quatf nv nw) nv) nearly=?) (test* (format "2vtest ~s ~s" w v) nv (quatf-transform (vectors->quatf nw nv) nw) nearly=?))) (2vtest #,(vector4f 1 0 0 0) #,(vector4f 0 1 0 0)) (2vtest #,(vector4f 0 1 0 0) #,(vector4f 0 0 1 0)) (2vtest #,(vector4f 0 0 1 0) #,(vector4f 1 0 0 0)) (2vtest #,(vector4f 1 2 3 0) #,(vector4f 4 -5 6 0)) (2vtest #,(vector4f 1 1 0 0) #,(vector4f 1 1 0 0)) (2vtest #,(vector4f 1 1 0 0) #,(vector4f 1 1 0.001 0)) ) ;; four vectors -> quatf (let () (define (4vtest v1 v2 w1 w2) (let ((nv1 (vector4f-normalize v1)) (nv2 (vector4f-normalize v2)) (nw1 (vector4f-normalize w1)) (nw2 (vector4f-normalize w2))) (test* (format "4vtest (~s ~s) (~s ~s)" v1 v2 w1 w2) (list '(1.0) nw1 nw2 (+ nw1 nw2)) (let1 q (axes->quatf nv1 nv2 nw1 nw2) (list (list (quatf-norm q)) (quatf-transform q nv1) (quatf-transform q nv2) (quatf-transform q (+ nv1 nv2)))) (cut every nearly=? <> <>)) (test* (format "4vtest (~s ~s) (~s ~s)" w1 w2 v1 v2) (list '(1.0) nv1 nv2 (+ nv1 nv2)) (let1 q (axes->quatf nw1 nw2 nv1 nv2) (list (list (quatf-norm q)) (quatf-transform q nw1) (quatf-transform q nw2) (quatf-transform q (+ nw1 nw2)))) (cut every nearly=? <> <>)))) (4vtest #,(vector4f 1 0 0 0) #,(vector4f 0 1 0 0) #,(vector4f 0 1 0 0) #,(vector4f 0 0 1 0)) (4vtest #,(vector4f 1 0 0 0) #,(vector4f 0 1 0 0) #,(vector4f 0 0 -1 0) #,(vector4f 0 1 0 0)) (4vtest #,(vector4f 1 1 0 0) #,(vector4f 1 -1 0) #,(vector4f 1 0 0) #,(vector4f 0 0 1 0)) ) ;; sequence access (test* "sequence" '(1.0 2.0 3.0 4.0) (coerce-to <list> #,(quatf 1.0 2.0 3.0 4.0))) (test* "sequence" #,(quatf 1.0 2.0 3.0 4.0) (coerce-to <quatf> '(1.0 2.0 3.0 4.0))) (test-end) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/src/gl-lib.stub���������������������������������������������������������������������0000644�0000764�0000764�00000166573�11533026402�015225� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; gl-lib.stub - glue functions for GL ;;; ;;; Copyright (c) 2001-2008 Shiro Kawai <shiro@acm.org> ;;; ;;; Permission to use, copy, modify, distribute this software and ;;; accompanying documentation for any purpose is hereby granted, ;;; provided that existing copyright notices are retained in all ;;; copies and that this notice is included verbatim in all ;;; distributions. ;;; This software is provided as is, without express or implied ;;; warranty. In no circumstances the author(s) shall be liable ;;; for any damages arising out of the use of this software. ;;; ;;; $Id: gl-lib.stub,v 1.47 2008-06-04 11:50:43 shirok Exp $ ;;; " #include \"gauche-gl.h\" #include \"gl-syms.h\" " ;; The functions are ordered in the same way as Mesa's header file. "#define CHECK_ERROR(msg__) \\ do { \\ GLenum e = glGetError(); \\ if (e != GL_NO_ERROR) { \\ Scm_Error(\"%s: %s\", msg__, gluErrorString(e)); \\ } \\ } while (0) " (define-cise-stmt assert-vector-type&size [(_ type size var) (let* ([TYPE (string-upcase (x->string type))] [pred (string->symbol #`"SCM_,|TYPE|P")] [getsize (string->symbol #`"SCM_,|TYPE|_SIZE")] [msg #`",type of size ,size required,, but got %S"]) `(when (or (not (,pred ,var)) (!= (,getsize ,var) ,size)) (Scm_Error ,msg ,var)))]) ;; NB: this should be taken care of by genstub. (define-type <uvector> "ScmUVector*" "uniform vector" "SCM_UVECTORP" "SCM_UVECTOR") (define-type <u32vector> "ScmU32Vector*" "u32vector" "SCM_U32VECTORP" "SCM_U32VECTOR") (define-type <f32vector> "ScmF32Vector*" "f32vector" "SCM_F32VECTORP" "SCM_F32VECTOR") (define-type <gl-boolean-vector> "ScmGLBooleanVector*" "GL boolean vector" "SCM_GL_BOOLEAN_VECTOR_P" "SCM_GL_BOOLEAN_VECTOR") ;;============================================================= ;; <gl-boolean-vector> stuff ;; (define-cproc list->gl-boolean-vector (lis) Scm_ListToGLBooleanVector) (define-cproc gl-boolean-vector (&rest lis) Scm_ListToGLBooleanVector) (define-cproc gl-boolean-vector? (obj) ::<boolean> SCM_GL_BOOLEAN_VECTOR_P) (define-cproc make-gl-boolean-vector (size::<uint> &optional (init::<boolean> #f)) Scm_MakeGLBooleanVector) (define-cproc gl-boolean-vector-copy (bv::<gl-boolean-vector>) (result (Scm_MakeGLBooleanVectorFromArray (-> bv size) (-> bv elements)))) (define-cproc gl-boolean-vector-ref (bv::<gl-boolean-vector> k::<int> &optional fallback) (cond [(or (< k 0) (>= k (-> bv size))) (when (SCM_UNBOUNDP fallback) (Scm_Error "argument out of bound: %d" k)) (result fallback)] [else (result (SCM_MAKE_BOOL (aref (-> bv elements) k)))])) (define-cproc gl-boolean-vector-set! (bv::<gl-boolean-vector> k::<int> value) ::<void> (if (or (< k 0) (>= k (-> bv size))) (Scm_Error "argument out of bound: %d" k) (= (aref (-> bv elements) k) (?: (SCM_FALSEP value) GL_FALSE GL_TRUE)))) (define-cproc gl-boolean-vector-length (bv::<gl-boolean-vector>) ::<int> (result (-> bv size))) (define-cproc gl-boolean-vector-fill! (bv::<gl-boolean-vector> fill) (let* ([val::GLboolean (?: (SCM_FALSEP fill) GL_FALSE GL_TRUE)]) (dotimes [i (-> bv size)] (= (aref (-> bv elements) i) val))) (result (SCM_OBJ bv))) ;;============================================================= ;; Miscellaneous ;; (define-cproc gl-clear-index (c::<float>) ::<void> glClearIndex) (define-cproc gl-clear-color (r::<float> g::<float> b::<float> a::<float>) ::<void> glClearColor) (define-cproc gl-clear (mask::<uint>) ::<void> glClear) (define-cproc gl-index-mask (mask::<uint>) ::<void> glIndexMask) (define-cproc gl-color-mask (r::<boolean> g::<boolean> b::<boolean> a::<boolean>) ::<void> glColorMask) (define-cproc gl-alpha-func (func::<fixnum> ref::<float>) ::<void> glAlphaFunc) (define-cproc gl-blend-func (sfactor::<fixnum> dfactor::<fixnum>) ::<void> glBlendFunc) (define-cproc gl-logic-op (opcode::<fixnum>) ::<void> glLogicOp) (define-cproc gl-cull-face (mode::<fixnum>) ::<void> glCullFace) (define-cproc gl-front-face (mode::<fixnum>) ::<void> glFrontFace) (define-cproc gl-point-size (size::<float>) ::<void> glPointSize) (define-cproc gl-line-width (width::<float>) ::<void> glLineWidth) (define-cproc gl-line-stipple (factor::<fixnum> pat::<ushort>) ::<void> glLineStipple) (define-cproc gl-polygon-mode (face::<fixnum> mode::<fixnum>) ::<void> glPolygonMode) (define-cproc gl-polygon-offset (factor::<float> units::<float>) ::<void> glPolygonOffset) (define-cproc gl-polygon-stipple (mask) ::<void> (assert-vector-type&size u8vector 128 mask) (glPolygonStipple (SCM_U8VECTOR_ELEMENTS mask))) (define-cproc gl-edge-flag (flag) ::<void> (if (SCM_GL_BOOLEAN_VECTOR_P flag) (glEdgeFlagv (-> (SCM_GL_BOOLEAN_VECTOR flag) elements)) (glEdgeFlag (not (SCM_FALSEP flag))))) (define-cproc gl-scissor (x::<int> y::<int> width::<int> height::<int>) ::<void> glScissor) (define-cproc gl-clip-plane (plane::<fixnum> equation) ::<void> (assert-vector-type&size f64vector 4 equation) (glClipPlane plane (SCM_F64VECTOR_ELEMENTS equation))) (define-cproc gl-get-clip-plane (plane::<fixnum>) (let* ([v::ScmF64Vector* (SCM_F64VECTOR (Scm_MakeF64Vector 4 0.0))]) (glGetClipPlane plane (SCM_F64VECTOR_ELEMENTS v)) (result (SCM_OBJ v)))) (define-cproc gl-draw-buffer (mode::<fixnum>) ::<void> glDrawBuffer) (define-cproc gl-read-buffer (mode::<fixnum>) ::<void> glReadBuffer) (define-cproc gl-enable (cap::<fixnum>) ::<void> glEnable) (define-cproc gl-disable (cap::<fixnum>) ::<void> glDisable) (define-cproc gl-is-enabled (cap::<fixnum>) ::<boolean> glIsEnabled) (define-cproc gl-enable-client-state (cap::<fixnum>) ::<void> glEnableClientState) (define-cproc gl-disable-client-state (cap::<fixnum>) ::<void> glDisableClientState) ;; Gauche-gl specific (define-cproc gl-state-vector-size (state::<fixnum>) ::<int> Scm_GLStateInfoSize) (define-cise-stmt with-state-info-size [(_ var state name . body) `(let* ([,var :: int (Scm_GLStateInfoSize ,state)]) (when (<= ,var 0) (Scm_Error ,#`"you can't query state %x by ,name" ,state)) ,@body)]) (define-cproc gl-get-boolean (state::<fixnum>) (with-state-info-size vsize state gl-get-boolean (if (== vsize 1) (let* ([b::GLboolean]) (glGetBooleanv (cast GLenum state) (& b)) (result (SCM_MAKE_BOOL b))) (let* ([v (Scm_MakeGLBooleanVector vsize GL_FALSE)]) (glGetBooleanv (cast GLenum state) (-> (SCM_GL_BOOLEAN_VECTOR v) elements)) (result v))))) (define-cproc gl-get-boolean! (vec::<gl-boolean-vector> state::<fixnum>) (with-state-info-size vsize state gl-get-boolean! (when (!= vsize (SCM_GL_BOOLEAN_VECTOR_SIZE vec)) (Scm_Error "state %x needs a vector of size %d, but got %S" state vsize (SCM_OBJ vec))) (glGetBooleanv (cast GLenum state) (-> vec elements)) (result (SCM_OBJ vec)))) (define-cproc gl-get-integer (state::<fixnum>) (with-state-info-size vsize state gl-get-integer (if (== vsize 1) (let* ([i::GLint]) (glGetIntegerv (cast GLenum state) (& i)) (result (Scm_MakeInteger i))) (let* ([v::ScmS32Vector* (SCM_S32VECTOR (Scm_MakeS32Vector vsize 0))]) (glGetIntegerv (cast GLenum state) (cast GLint* (SCM_S32VECTOR_ELEMENTS v))) (result (SCM_OBJ v)))))) (define-cproc gl-get-integer! (vec::<s32vector> state::<fixnum>) (with-state-info-size vsize state gl-get-integer! (when (!= vsize (SCM_S32VECTOR_SIZE vec)) (Scm_Error "state %x needs a vector of size %d, but got %S" state vsize vec)) (glGetIntegerv (cast GLenum state) (cast GLint* (SCM_S32VECTOR_ELEMENTS vec))) (result (SCM_OBJ vec)))) (define-cproc gl-get-float (state::<fixnum>) (with-state-info-size vsize state gl-get-float (if (== vsize 1) (let* ([v::GLfloat]) (glGetFloatv (cast GLenum state) (& v)) (result (Scm_MakeFlonum (cast double v)))) (let* ([v::ScmF32Vector* (SCM_F32VECTOR (Scm_MakeF32Vector vsize 0))]) (glGetFloatv (cast GLenum state) (SCM_F32VECTOR_ELEMENTS v)) (result (SCM_OBJ v)))))) (define-cproc gl-get-float! (vec::<f32vector> state::<fixnum>) (with-state-info-size vsize state gl-get-float! (when (!= vsize (SCM_F32VECTOR_SIZE vec)) (Scm_Error "state %x needs a vector of size %d, but got %S" state vsize vec)) (glGetFloatv (cast GLenum state) (SCM_F32VECTOR_ELEMENTS vec)) (result (SCM_OBJ vec)))) (define-cproc gl-get-double (state::<fixnum>) (with-state-info-size vsize state gl-get-double (if (== vsize 1) (let* ([v::GLdouble]) (glGetDoublev (cast GLenum state) (& v)) (result (Scm_MakeFlonum v))) (let* ([v::ScmF64Vector* (SCM_F64VECTOR (Scm_MakeF64Vector vsize 0))]) (glGetDoublev (cast GLenum state) (SCM_F64VECTOR_ELEMENTS v)) (result (SCM_OBJ v)))))) (define-cproc gl-get-double! (vec::<f64vector> state::<fixnum>) (with-state-info-size vsize state gl-get-double! (when (!= vsize (SCM_F64VECTOR_SIZE vec)) (Scm_Error "state %x needs a vector of size %d, but got %S" state vsize vec)) (glGetDoublev (cast GLenum state) (SCM_F64VECTOR_ELEMENTS vec)) (result (SCM_OBJ vec)))) ;; glGetPointerv (define-cproc gl-push-attrib (mask::<ulong>)::<void> glPushAttrib) (define-cproc gl-pop-attrib () ::<void> glPopAttrib) (define-cproc gl-push-client-attrib (mask::<ulong>)::<void> glPushClientAttrib) (define-cproc gl-pop-client-attrib () ::<void> glPopClientAttrib) (define-cproc gl-render-mode (mode::<fixnum>) ::<int> glRenderMode) (define-cproc gl-get-error () ::<int> glGetError) (define-cproc gl-get-string (name::<fixnum>) (let* ([s::(const GLubyte*) (glGetString name)]) (if s (result (Scm_MakeString (cast (const char*) s) -1 -1 SCM_MAKSTR_COPYING)) (result SCM_FALSE)))) (define-cproc gl-flush () ::<void> glFlush) (define-cproc gl-finish () ::<void> glFinish) (define-cproc gl-hint (target::<int> mode::<int>) ::<void> glHint) ;;============================================================= ;; Depth Buffer ;; (define-cproc gl-clear-depth (depth::<real>)::<void> glClearDepth) (define-cproc gl-depth-func (func::<fixnum>)::<void> glDepthFunc) (define-cproc gl-depth-mask (flag::<boolean>)::<void> glDepthMask) (define-cproc gl-depth-range (nearv::<real> farv::<real>)::<void> glDepthRange) ;;============================================================= ;; Accumulation Buffer ;; (define-cproc gl-clear-accum (r::<real> g::<real> b::<real> a::<real>) ::<void> glClearAccum) (define-cproc gl-accum (op::<fixnum> value::<real>) ::<void> glAccum) ;;============================================================= ;; Transformation ;; (define-cproc gl-matrix-mode (mode::<fixnum>) ::<void> glMatrixMode) (define-cproc gl-ortho (left::<real> right::<real> bottom::<real> top::<real> nearv::<real> farv::<real>) ::<void> glOrtho) (define-cproc gl-frustum (left::<real> right::<real> bottom::<real> top::<real> nearv::<real> farv::<real>) ::<void> glFrustum) (define-cproc gl-viewport (x::<fixnum> y::<fixnum> width::<fixnum> height::<fixnum>) ::<void> glViewport) (define-cproc gl-push-matrix () ::<void> glPushMatrix) (define-cproc gl-pop-matrix () ::<void> glPopMatrix) (define-cproc gl-load-identity () ::<void> glLoadIdentity) (define-cproc gl-load-matrix (m) ::<void> (cond [(SCM_MATRIX4FP m) (glLoadMatrixf (SCM_MATRIX4F_D m))] [(and (SCM_F32VECTORP m) (== (SCM_F32VECTOR_SIZE m) 16)) (glLoadMatrixf (SCM_F32VECTOR_ELEMENTS m))] [(and (SCM_F64VECTORP m) (== (SCM_F64VECTOR_SIZE m) 16)) (glLoadMatrixd (SCM_F64VECTOR_ELEMENTS m))] [else (Scm_Error "matrix4f, or f32vector or f64vector of length 16 \ is required, but got %S" m)])) (define-cproc gl-mult-matrix (m) ::<void> (cond [(SCM_MATRIX4FP m) (glMultMatrixf (SCM_MATRIX4F_D m))] [(and (SCM_F32VECTORP m) (== (SCM_F32VECTOR_SIZE m) 16)) (glMultMatrixf (SCM_F32VECTOR_ELEMENTS m))] [(and (SCM_F64VECTORP m) (== (SCM_F64VECTOR_SIZE m) 16)) (glMultMatrixd (SCM_F64VECTOR_ELEMENTS m))] [else (Scm_Error "matrix4f, or f32vector or f64vector of length 16 \ is required, but got %S" m)])) (define-cproc gl-rotate (angle::<real> x::<real> y::<real> z::<real>) ::<void> glRotated) (define-cproc gl-scale (x::<real> y::<real> z::<real>) ::<void> glScaled) (define-cproc gl-translate (x::<real> y::<real> z::<real>) ::<void> glTranslated) ;;============================================================= ;; Display lists ;; (define-cproc gl-is-list (list::<int>)::<boolean> glIsList) (define-cproc gl-delete-lists (list::<int> range::<int>) ::<void> glDeleteLists) (define-cproc gl-gen-lists (range::<int>) ::<ulong> glGenLists) (define-cproc gl-new-list (list::<int> mode::<int>) ::<void> glNewList) (define-cproc gl-end-list () ::<void> glEndList) (define-cproc gl-call-list (list::<int>) ::<void> glCallList) ;; this may be called as ;; (gl-call-lists array) ;; (gl-call-lists size array) ;; (gl-call-lists size type array) (define-cproc gl-call-lists (arg0 &optional arg1 arg2) "GLsizei size = 0; int type = -1; ScmObj array, bad; if (SCM_UNBOUNDP(arg2)) { if (SCM_UNBOUNDP(arg1)) { /* single arg case */ array = arg0; } else { /* double arg case */ if (!SCM_INTP(arg0)) { bad = arg0; goto badarg; } size = SCM_INT_VALUE(arg0); array = arg1; } } else { /* triple arg case */ if (!SCM_INTP(arg0)) { bad = arg0; goto badarg; } size = SCM_INT_VALUE(arg0); if (!SCM_INTP(arg1)) { bad = arg1; goto badarg; } type = SCM_INT_VALUE(arg1); array = arg2; } if (SCM_U8VECTORP(array)) { switch (type) { case -1: if (size == 0) size = SCM_U8VECTOR_SIZE(array); else if (SCM_U8VECTOR_SIZE(array) < size) goto nee; glCallLists(size, GL_UNSIGNED_BYTE, SCM_U8VECTOR_ELEMENTS(array)); break; case GL_2_BYTES: if (size == 0) size = SCM_U8VECTOR_SIZE(array)/2; else if (SCM_U8VECTOR_SIZE(array)/2 < size) goto nee; glCallLists(size, GL_2_BYTES, SCM_U8VECTOR_ELEMENTS(array)); break; case GL_3_BYTES: if (size == 0) size = SCM_U8VECTOR_SIZE(array)/3; else if (SCM_U8VECTOR_SIZE(array)/3 < size) goto nee; glCallLists(size, GL_3_BYTES, SCM_U8VECTOR_ELEMENTS(array)); break; case GL_4_BYTES: if (size == 0) size = SCM_U8VECTOR_SIZE(array)/4; else if (SCM_U8VECTOR_SIZE(array)/4 < size) goto nee; glCallLists(size, GL_4_BYTES, SCM_U8VECTOR_ELEMENTS(array)); break; default: goto badtype; } } else if (SCM_STRINGP(array)) { if (size == 0) size = SCM_STRING_SIZE(array); else if (SCM_STRING_SIZE(array) < size) goto nee; glCallLists(size, GL_UNSIGNED_BYTE, SCM_STRING_START(array)); } else if (SCM_S8VECTORP(array)) { if (size == 0) size = SCM_S8VECTOR_SIZE(array); else if (SCM_S8VECTOR_SIZE(array) < size) goto nee; glCallLists(size, GL_BYTE, SCM_S8VECTOR_ELEMENTS(array)); } else if (SCM_S16VECTORP(array)) { if (size == 0) size = SCM_S16VECTOR_SIZE(array); else if (SCM_S16VECTOR_SIZE(array) < size) goto nee; glCallLists(size, GL_SHORT, SCM_S16VECTOR_ELEMENTS(array)); } else if (SCM_U16VECTORP(array)) { if (size == 0) size = SCM_U16VECTOR_SIZE(array); else if (SCM_U16VECTOR_SIZE(array) < size) goto nee; glCallLists(size, GL_UNSIGNED_SHORT, SCM_U16VECTOR_ELEMENTS(array)); } else if (SCM_S32VECTORP(array)) { if (size == 0) size = SCM_S32VECTOR_SIZE(array); else if (SCM_S32VECTOR_SIZE(array) < size) goto nee; glCallLists(size, GL_INT, SCM_S32VECTOR_ELEMENTS(array)); } else if (SCM_U32VECTORP(array)) { if (size == 0) size = SCM_U32VECTOR_SIZE(array); else if (SCM_U32VECTOR_SIZE(array) < size) goto nee; glCallLists(size, GL_UNSIGNED_INT, SCM_U32VECTOR_ELEMENTS(array)); } else if (SCM_F32VECTORP(array)) { if (size == 0) size = SCM_F32VECTOR_SIZE(array); else if (SCM_F32VECTOR_SIZE(array) < size) goto nee; glCallLists(size, GL_INT, SCM_U32VECTOR_ELEMENTS(array)); } SCM_RETURN(SCM_UNDEFINED); badarg: Scm_Error(\"bad argument to gl-call-lists: %S\", bad); nee: Scm_Error(\"not enough elements passed to gl-call-lists: %S\", array); badtype: Scm_Error(\"given type %d doesn't match the passed array (u8vector)\", type); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-list-base (base::<int>) ::<void> glListBase) ;;============================================================= ;; Drawing functions ;; (define-cproc gl-begin (mode::<int>) ::<void> glBegin) (define-cproc gl-end () ::<void> glEnd) (define-cproc gl-vertex (v &rest args) "if (SCM_POINT4FP(v) || SCM_VECTOR4FP(v)) { glVertex3fv(SCM_VECTOR4F_D(v)); } else if (SCM_F32VECTORP(v)) { switch (SCM_F32VECTOR_SIZE(v)) { case 3: glVertex3fv((GLfloat*)SCM_F32VECTOR_ELEMENTS(v)); break; case 2: glVertex2fv((GLfloat*)SCM_F32VECTOR_ELEMENTS(v)); break; case 4: glVertex4fv((GLfloat*)SCM_F32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_F64VECTORP(v)) { switch (SCM_F64VECTOR_SIZE(v)) { case 3: glVertex3dv((GLdouble*)SCM_F64VECTOR_ELEMENTS(v)); break; case 2: glVertex2dv((GLdouble*)SCM_F64VECTOR_ELEMENTS(v)); break; case 4: glVertex4dv((GLdouble*)SCM_F64VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S32VECTORP(v)) { switch (SCM_S32VECTOR_SIZE(v)) { case 3: glVertex3iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; case 2: glVertex2iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; case 4: glVertex4iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S16VECTORP(v)) { switch (SCM_S16VECTOR_SIZE(v)) { case 3: glVertex3sv((GLshort*)SCM_S16VECTOR_ELEMENTS(v)); break; case 2: glVertex2sv((GLshort*)SCM_S16VECTOR_ELEMENTS(v)); break; case 4: glVertex4sv((GLshort*)SCM_S16VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else { double val[4]; int nvals = Scm_GLGetDoubles(v, args, val, 4, 2); switch (nvals) { case 3: glVertex3dv(val); break; case 2: glVertex2dv(val); break; case 4: glVertex4dv(val); break; } } SCM_RETURN(SCM_UNDEFINED); badarg: Scm_Error(\"bad argument for v: %S, must be one of f32, f64, s32 or s16 vector of length 2, 3, or 4.\", v); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-normal (v &rest args) "if (SCM_VECTOR4FP(v)) { glNormal3fv(SCM_VECTOR4F_D(v)); } else if (SCM_F32VECTORP(v) && SCM_F32VECTOR_SIZE(v) == 3) { glNormal3fv((GLfloat*)SCM_F32VECTOR_ELEMENTS(v)); } else if (SCM_F64VECTORP(v) && SCM_F64VECTOR_SIZE(v) == 3) { glNormal3dv((GLdouble*)SCM_F64VECTOR_ELEMENTS(v)); } else if (SCM_S32VECTORP(v) && SCM_S32VECTOR_SIZE(v) == 3) { glNormal3iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); } else if (SCM_S16VECTORP(v) && SCM_S16VECTOR_SIZE(v) == 3) { glNormal3sv((GLshort*)SCM_S16VECTOR_ELEMENTS(v)); } else { double val[3]; Scm_GLGetDoubles(v, args, val, 3, 3); glNormal3dv(val); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-index (v) ::<void> (cond [(SCM_REALP v) (glIndexd (Scm_GetDouble v))] [(and (SCM_UVECTORP v) (>= (SCM_UVECTOR_SIZE v) 1)) (cond [(SCM_S16VECTORP v) (glIndexsv (SCM_S16VECTOR_ELEMENTS v))] [(SCM_S32VECTORP v) (glIndexiv (SCM_S32VECTOR_ELEMENTS v))] [(SCM_F32VECTORP v) (glIndexfv (SCM_F32VECTOR_ELEMENTS v))] [(SCM_F64VECTORP v) (glIndexdv (SCM_F64VECTOR_ELEMENTS v))] [(SCM_U8VECTORP v) (glIndexubv (SCM_U8VECTOR_ELEMENTS v))] [else (SCM_TYPE_ERROR v "s16, s32, f32, f64 or u8vector")])] [else (SCM_TYPE_ERROR v "real number or s16, s32, f32, f64 or u8vector of at least one element")])) (define-cproc gl-color (v &rest args) "if (SCM_F32VECTORP(v)) { switch (SCM_F32VECTOR_SIZE(v)) { case 3: glColor3fv(SCM_F32VECTOR_ELEMENTS(v)); break; case 4: glColor4fv(SCM_F32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_F64VECTORP(v)) { switch (SCM_F64VECTOR_SIZE(v)) { case 3: glColor3dv(SCM_F64VECTOR_ELEMENTS(v)); break; case 4: glColor4dv(SCM_F64VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_U8VECTORP(v)) { switch (SCM_U8VECTOR_SIZE(v)) { case 3: glColor3ubv(SCM_U8VECTOR_ELEMENTS(v)); break; case 4: glColor4ubv(SCM_U8VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_U16VECTORP(v)) { switch (SCM_U16VECTOR_SIZE(v)) { case 3: glColor3usv(SCM_U16VECTOR_ELEMENTS(v)); break; case 4: glColor4usv(SCM_U16VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_U32VECTORP(v)) { switch (SCM_U32VECTOR_SIZE(v)) { case 3: glColor3uiv((GLuint*)SCM_U32VECTOR_ELEMENTS(v)); break; case 4: glColor4uiv((GLuint*)SCM_U32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S8VECTORP(v)) { switch (SCM_S8VECTOR_SIZE(v)) { case 3: glColor3bv(SCM_S8VECTOR_ELEMENTS(v)); break; case 4: glColor4bv(SCM_S8VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S16VECTORP(v)) { switch (SCM_S16VECTOR_SIZE(v)) { case 3: glColor3sv(SCM_S16VECTOR_ELEMENTS(v)); break; case 4: glColor4sv(SCM_S16VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S32VECTORP(v)) { switch (SCM_S32VECTOR_SIZE(v)) { case 3: glColor3iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; case 4: glColor4iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else { double val[4]; int nvals = Scm_GLGetDoubles(v, args, val, 4, 3); switch (nvals) { case 3: glColor3dv(val); break; case 4: glColor4dv(val); break; } } SCM_RETURN(SCM_UNDEFINED); badarg: Scm_Error(\"bad argument for color: %S, must be an uniform vector of length 3 or 4\", v); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-tex-coord (v &rest args) "if (SCM_F32VECTORP(v)) { switch (SCM_F32VECTOR_SIZE(v)) { case 2: glTexCoord2fv(SCM_F32VECTOR_ELEMENTS(v)); break; case 1: glTexCoord1fv(SCM_F32VECTOR_ELEMENTS(v)); break; case 3: glTexCoord3fv(SCM_F32VECTOR_ELEMENTS(v)); break; case 4: glTexCoord4fv(SCM_F32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_F64VECTORP(v)) { switch (SCM_F64VECTOR_SIZE(v)) { case 2: glTexCoord2dv(SCM_F64VECTOR_ELEMENTS(v)); break; case 1: glTexCoord1dv(SCM_F64VECTOR_ELEMENTS(v)); break; case 3: glTexCoord3dv(SCM_F64VECTOR_ELEMENTS(v)); break; case 4: glTexCoord4dv(SCM_F64VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S32VECTORP(v)) { switch (SCM_S32VECTOR_SIZE(v)) { case 2: glTexCoord2iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; case 1: glTexCoord2iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; case 3: glTexCoord3iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; case 4: glTexCoord4iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S16VECTORP(v)) { switch (SCM_S16VECTOR_SIZE(v)) { case 2: glTexCoord2sv(SCM_S16VECTOR_ELEMENTS(v)); break; case 1: glTexCoord1sv(SCM_S16VECTOR_ELEMENTS(v)); break; case 3: glTexCoord3sv(SCM_S16VECTOR_ELEMENTS(v)); break; case 4: glTexCoord4sv(SCM_S16VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else { double val[4]; int nvals = Scm_GLGetDoubles(v, args, val, 4, 1); switch (nvals) { case 2: glTexCoord2dv(val); break; case 1: glTexCoord1dv(val); break; case 3: glTexCoord3dv(val); break; case 4: glTexCoord4dv(val); break; } } SCM_RETURN(SCM_UNDEFINED); badarg: Scm_Error(\"bad argument for v: %S, must be one of f32, f64, s32 or s16 vector of length 1, 2, 3, or 4.\", v); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-raster-pos (v &rest args) "if (SCM_F32VECTORP(v)) { switch (SCM_F32VECTOR_SIZE(v)) { case 3: glRasterPos3fv(SCM_F32VECTOR_ELEMENTS(v)); break; case 2: glRasterPos2fv(SCM_F32VECTOR_ELEMENTS(v)); break; case 4: glRasterPos4fv(SCM_F32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_F64VECTORP(v)) { switch (SCM_F64VECTOR_SIZE(v)) { case 3: glRasterPos3dv(SCM_F64VECTOR_ELEMENTS(v)); break; case 2: glRasterPos2dv(SCM_F64VECTOR_ELEMENTS(v)); break; case 4: glRasterPos4dv(SCM_F64VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S32VECTORP(v)) { switch (SCM_S32VECTOR_SIZE(v)) { case 3: glRasterPos3iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; case 2: glRasterPos2iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; case 4: glRasterPos4iv((GLint*)SCM_S32VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else if (SCM_S16VECTORP(v)) { switch (SCM_S16VECTOR_SIZE(v)) { case 3: glRasterPos3sv(SCM_S16VECTOR_ELEMENTS(v)); break; case 2: glRasterPos2sv(SCM_S16VECTOR_ELEMENTS(v)); break; case 4: glRasterPos4sv(SCM_S16VECTOR_ELEMENTS(v)); break; default: goto badarg; } } else { double val[4]; int nvals = Scm_GLGetDoubles(v, args, val, 4, 2); switch (nvals) { case 3: glRasterPos3dv(val); break; case 2: glRasterPos2dv(val); break; case 4: glRasterPos4dv(val); break; } } SCM_RETURN(SCM_UNDEFINED); badarg: Scm_Error(\"bad argument for v: %S, must be one of f32, f64, s32 or s16 vector of length 2, 3, or 4.\", v); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-rect (v1 v2 &rest args) "if (SCM_POINT4FP(v1)) { if (!SCM_POINT4FP(v2)) goto badarg2; glRectfv(SCM_POINT4F_D(v1), SCM_POINT4F_D(v2)); } else if (SCM_F32VECTORP(v1)) { if (SCM_F32VECTOR_SIZE(v1) != 2) goto badarg1; if (!SCM_F32VECTORP(v2) || SCM_F32VECTOR_SIZE(v2) != 2) goto badarg2; glRectfv(SCM_F32VECTOR_ELEMENTS(v1), SCM_F32VECTOR_ELEMENTS(v2)); } else if (SCM_F64VECTORP(v1)) { if (SCM_F64VECTOR_SIZE(v1) != 2) goto badarg1; if (!SCM_F64VECTORP(v2) || SCM_F64VECTOR_SIZE(v2) != 2) goto badarg2; glRectdv(SCM_F64VECTOR_ELEMENTS(v1), SCM_F64VECTOR_ELEMENTS(v2)); } else if (SCM_S32VECTORP(v1)) { if (SCM_S32VECTOR_SIZE(v1) != 2) goto badarg1; if (!SCM_S32VECTORP(v2) || SCM_S32VECTOR_SIZE(v2) != 2) goto badarg2; glRectiv((GLint*)SCM_S32VECTOR_ELEMENTS(v1), (GLint*)SCM_S32VECTOR_ELEMENTS(v2)); } else if (SCM_S16VECTORP(v1)) { if (SCM_S16VECTOR_SIZE(v1) != 2) goto badarg1; if (!SCM_S16VECTORP(v2) || SCM_S16VECTOR_SIZE(v2) != 2) goto badarg2; glRectsv(SCM_S16VECTOR_ELEMENTS(v1), SCM_S16VECTOR_ELEMENTS(v2)); } else { double val[4]; Scm_GLGetDoubles(v1, Scm_Cons(v2, args), val, 4, 4); glRectd(val[0], val[1], val[2], val[3]); } SCM_RETURN(SCM_UNDEFINED); badarg1: Scm_Error(\"bad argument for v1: %S, must be one of f32, f64, s32 or s16 vector of length 2\", v1); SCM_RETURN(SCM_UNDEFINED); badarg2: Scm_Error(\"bad argument for v2: %S, must be one of f32, f64, s32 or s16 vector of length 2\", v2); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; Vertex Arrays ;; ;; NOTE: it is caller's responsibility to guarantee VEC has enough length. ;; GL doesn't have interface to specify the boundary, so I can't detect ;; invalid length vector. ;; Scheme version doesn't have TYPE - it's derived from vector type. ;; STRIDE argument refers to the # of elements, rather than bytes. (define-cproc gl-vertex-pointer (size::<fixnum> vec &optional (stride::<fixnum> 0) (offset::<fixnum> 0)) "if (size < 2 || size > 4) { Scm_Error(\"bad argument for size: %d, must be 2, 3 or 4\", size); } if (stride < 0) { Scm_Error(\"bad argument for stride: %d, must be 0 or positive\", stride); } if (offset < 0) { Scm_Error(\"bad argument for offset: %d, must be 0 or positive\", offset); } if (SCM_POINT4F_ARRAY_P(vec)) { glVertexPointer(size, GL_FLOAT, stride*sizeof(GLfloat), (void*)(SCM_POINT4F_ARRAY_D(vec)+offset)); } else if (SCM_F32VECTORP(vec)) { glVertexPointer(size, GL_FLOAT, stride*sizeof(GLfloat), (void*)(SCM_F32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_F64VECTORP(vec)) { glVertexPointer(size, GL_DOUBLE, stride*sizeof(GLdouble), (void*)(SCM_F64VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S32VECTORP(vec)) { glVertexPointer(size, GL_INT, stride*sizeof(GLint), (void*)(SCM_S32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S16VECTORP(vec)) { glVertexPointer(size, GL_SHORT, stride*sizeof(GLshort), (void*)(SCM_S16VECTOR_ELEMENTS(vec)+offset)); } else { Scm_Error(\"bad argument for vec: %S, must be f32, f64, s32 or s16vector\", vec); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-normal-pointer (vec &optional (stride::<fixnum> 0) (offset::<fixnum> 0)) "if (stride < 0) { Scm_Error(\"bad argument for stride: %d, must be 0 or positive\", stride); } if (offset < 0) { Scm_Error(\"bad argument for offset: %d, must be 0 or positive\", offset); } if (SCM_VECTOR4F_ARRAY_P(vec)) { glNormalPointer(GL_FLOAT, stride*sizeof(GLfloat), (void*)(SCM_VECTOR4F_ARRAY_D(vec)+offset)); } else if (SCM_F32VECTORP(vec)) { glNormalPointer(GL_FLOAT, stride*sizeof(GLfloat), (void*)(SCM_F32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_F64VECTORP(vec)) { glNormalPointer(GL_DOUBLE, stride*sizeof(GLdouble), (void*)(SCM_F64VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S32VECTORP(vec)) { glNormalPointer(GL_INT, stride*sizeof(GLint), (void*)(SCM_S32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S16VECTORP(vec)) { glNormalPointer(GL_SHORT, stride*sizeof(GLshort), (void*)(SCM_S16VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S8VECTORP(vec)) { glNormalPointer(GL_BYTE, stride*sizeof(GLbyte), (void*)(SCM_S8VECTOR_ELEMENTS(vec)+offset)); } else { Scm_Error(\"bad argument for vec: %S, must be f32, f64, s8, s16 or s32vector\", vec); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-color-pointer (size::<fixnum> vec &optional (stride::<fixnum> 0) (offset::<fixnum> 0)) " if (size < 3 || size > 4) { Scm_Error(\"bad argument for size: %d, must be 2, 3 or 4\", size); } if (stride < 0) { Scm_Error(\"bad argument for stride: %d, must be 0 or positive\", stride); } if (offset < 0) { Scm_Error(\"bad argument for offset: %d, must be 0 or positive\", offset); } if (SCM_F32VECTORP(vec)) { glColorPointer(size, GL_FLOAT, stride*sizeof(GLfloat), (void*)(SCM_F32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_F64VECTORP(vec)) { glColorPointer(size, GL_DOUBLE, stride*sizeof(GLdouble), (void*)(SCM_F64VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_U32VECTORP(vec)) { glColorPointer(size, GL_UNSIGNED_INT, stride*sizeof(GLuint), (void*)(SCM_U32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_U16VECTORP(vec)) { glColorPointer(size, GL_UNSIGNED_SHORT, stride*sizeof(GLushort), (void*)(SCM_U16VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_U8VECTORP(vec)) { glColorPointer(size, GL_UNSIGNED_BYTE, stride*sizeof(GLubyte), (void*)(SCM_U8VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S32VECTORP(vec)) { glColorPointer(size, GL_INT, stride*sizeof(GLint), (void*)(SCM_S32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S16VECTORP(vec)) { glColorPointer(size, GL_SHORT, stride*sizeof(GLshort), (void*)(SCM_S16VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S8VECTORP(vec)) { glColorPointer(size, GL_BYTE, stride*sizeof(GLbyte), (void*)(SCM_S8VECTOR_ELEMENTS(vec)+offset)); } else { Scm_Error(\"bad argument for vec: %S, must be f32, f64, s8, u8, s16, u16, s32 or u32vector\", vec); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-index-pointer (vec &optional (stride::<fixnum> 0) (offset::<fixnum> 0)) "if (stride < 0) { Scm_Error(\"bad argument for stride: %d, must be 0 or positive\", stride); } if (offset < 0) { Scm_Error(\"bad argument for offset: %d, must be 0 or positive\", offset); } if (SCM_S32VECTORP(vec)) { glIndexPointer(GL_INT, stride*sizeof(GLint), (void*)(SCM_S32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S16VECTORP(vec)) { glIndexPointer(GL_SHORT, stride*sizeof(GLshort), (void*)(SCM_S16VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_U8VECTORP(vec)) { glIndexPointer(GL_UNSIGNED_BYTE, stride*sizeof(GLubyte), (void*)(SCM_U8VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_F32VECTORP(vec)) { glIndexPointer(GL_FLOAT, stride*sizeof(GLfloat), (void*)(SCM_F32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_F64VECTORP(vec)) { glIndexPointer(GL_DOUBLE, stride*sizeof(GLdouble), (void*)(SCM_F64VECTOR_ELEMENTS(vec)+offset)); } else { Scm_Error(\"bad argument for vec: %S, must be f32, f64, u8, s16 or s32 vector\", vec); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-tex-coord-pointer (size::<fixnum> vec &optional (stride::<fixnum> 0) (offset::<fixnum> 0)) " if (size < 1 || size > 4) { Scm_Error(\"bad argument for size: %d, must be 1, 2, 3 or 4\", size); } if (stride < 0) { Scm_Error(\"bad argument for stride: %d, must be 0 or positive\", stride); } if (offset < 0) { Scm_Error(\"bad argument for offset: %d, must be 0 or positive\", offset); } if (SCM_F32VECTORP(vec)) { glTexCoordPointer(size, GL_FLOAT, stride*sizeof(GLfloat), (void*)(SCM_F32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_F64VECTORP(vec)) { glTexCoordPointer(size, GL_DOUBLE, stride*sizeof(GLdouble), (void*)(SCM_F64VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S32VECTORP(vec)) { glTexCoordPointer(size, GL_INT, stride*sizeof(GLint), (void*)(SCM_S32VECTOR_ELEMENTS(vec)+offset)); } else if (SCM_S16VECTORP(vec)) { glTexCoordPointer(size, GL_SHORT, stride*sizeof(GLshort), (void*)(SCM_S16VECTOR_ELEMENTS(vec)+offset)); } else { Scm_Error(\"bad argument for vec: %S, must be f32, f64, s16 or s32vector\", vec); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-edge-flag-pointer (vec &optional (stride::<fixnum> 0) (offset::<fixnum> 0)) "if (SCM_GL_BOOLEAN_VECTOR_P(vec)) { glEdgeFlagPointer(stride, SCM_GL_BOOLEAN_VECTOR_ELEMENTS(vec) + offset); } else { Scm_Error(\"gl-boolean-vector required for vec, but got %S\", vec); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-array-element (ith::<fixnum>) "glArrayElement(ith); SCM_RETURN(SCM_UNDEFINED);") ;; count and type is derived from indices vector (define-cproc gl-draw-elements (mode::<fixnum> indices) "if (SCM_U8VECTORP(indices)) { glDrawElements(mode, SCM_U8VECTOR_SIZE(indices), GL_UNSIGNED_BYTE, SCM_U8VECTOR_ELEMENTS(indices)); } else if (SCM_U16VECTORP(indices)) { glDrawElements(mode, SCM_U16VECTOR_SIZE(indices), GL_UNSIGNED_SHORT, SCM_U16VECTOR_ELEMENTS(indices)); } else if (SCM_U32VECTORP(indices)) { glDrawElements(mode, SCM_U32VECTOR_SIZE(indices), GL_UNSIGNED_INT, SCM_U32VECTOR_ELEMENTS(indices)); } else { Scm_Error(\"bad argument for indices: %S, must be u8, u16 or u32vector\", indices); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-draw-arrays (mode::<fixnum> first::<fixnum> count::<fixnum>) ::<void> glDrawArrays) ;; Note: we don't allow non-uniform vector for the interleaved arrays, so ;; the color component must be float. (define-cproc gl-interleaved-arrays (format::<fixnum> vec &optional (stride::<fixnum> 0) (offset::<fixnum> 0)) " switch (format) { case GL_C4UB_V2F:; case GL_C4UB_V3F:; case GL_T2F_C4UB_V3F: Scm_Error(\"interleaved arrays with integer color component is not supported.\"); } if (!SCM_F32VECTORP(vec)) { Scm_Error(\"bad argument for vec: %S, must be f32vector.\", vec); } glInterleavedArrays(format, stride * sizeof(GLfloat), SCM_F32VECTOR_ELEMENTS(vec)); SCM_RETURN(SCM_UNDEFINED);") ;;============================================================= ;; Lighting ;; (define-cproc gl-shade-model (mode::<fixnum>) ::<void> glShadeModel) (define-cproc gl-light (light::<fixnum> pname::<fixnum> param) "switch (pname) { case GL_AMBIENT:; case GL_DIFFUSE:; case GL_SPECULAR:; case GL_POSITION:; if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 4) { glLightfv(light, pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param) && SCM_S32VECTOR_SIZE(param) == 4) { glLightiv(light, pname, (GLint*)SCM_S32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"bad parameter: %S, must be f32 or s32 vector of length 4\", param); } break; case GL_SPOT_DIRECTION: if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 3) { glLightfv(light, pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param) && SCM_S32VECTOR_SIZE(param) == 3) { glLightiv(light, pname, (GLint*)SCM_S32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"bad parameter: %S, must be f32 or s32 vector of length 3\", param); } break; default: if (SCM_REALP(param)) { glLightf(light, pname, (GLfloat)Scm_GetDouble(param)); } else { Scm_Error(\"bad parameter: %S, must be a real number.\", param); } } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-light (light::<fixnum> pname::<fixnum>) "switch (pname) { case GL_AMBIENT:; case GL_DIFFUSE:; case GL_SPECULAR:; case GL_POSITION: { ScmF32Vector *v = SCM_F32VECTOR(Scm_MakeF32Vector(4, 0.0)); glGetLightfv(light, pname, SCM_F32VECTOR_ELEMENTS(v)); SCM_RETURN(SCM_OBJ(v)); } case GL_SPOT_DIRECTION: { ScmF32Vector *v = SCM_F32VECTOR(Scm_MakeF32Vector(3, 0.0)); glGetLightfv(light, pname, SCM_F32VECTOR_ELEMENTS(v)); SCM_RETURN(SCM_OBJ(v)); } default: { float v; glGetLightfv(light, pname, &v); SCM_RETURN(Scm_MakeFlonum((double)v)); } }") (define-cproc gl-light-model (pname::<fixnum> param) "switch (pname) { case GL_LIGHT_MODEL_AMBIENT: if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 4) { glLightModelfv(pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param) && SCM_S32VECTOR_SIZE(param) == 4) { glLightModeliv(pname, (GLint*)SCM_S32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"bad parameter for GL_LIGHT_MODEL_AMBIENT: %S, must be f32 or s32 vector of length 4\", param); } break; case GL_LIGHT_MODEL_COLOR_CONTROL: if (SCM_INTP(param)) { glLightModeli(pname, SCM_INT_VALUE(param)); } else { Scm_Error(\"bad parameter for GL_LIGHT_MODEL_COLOR_CONTROL: %S, must be an exact small integer\", param); } break; default: glLightModeli(pname, !SCM_FALSEP(param)); break; } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-material (face::<fixnum> pname::<fixnum> param) "switch (pname) { case GL_AMBIENT:; case GL_DIFFUSE:; case GL_SPECULAR:; case GL_EMISSION:; case GL_AMBIENT_AND_DIFFUSE:; if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 4) { glMaterialfv(face, pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param) && SCM_S32VECTOR_SIZE(param) == 4) { glMaterialiv(face, pname, (GLint*)SCM_S32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"bad parameter: %S, must be f32 or s32 vector of length 4\", param); } break; case GL_COLOR_INDEXES: if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 3) { glMaterialfv(face, pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param) && SCM_S32VECTOR_SIZE(param) == 3) { glMaterialiv(face, pname, (GLint*)SCM_S32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"bad parameter: %S, must be f32 or s32vector of length 3\", param); } break; default: if (SCM_REALP(param)) { glMaterialf(face, pname, (GLfloat)Scm_GetDouble(param)); } else { Scm_Error(\"bad parameter: %S, must be a real number.\", param); } } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-material (face::<fixnum> pname::<fixnum>) "switch (pname) { case GL_AMBIENT:; case GL_DIFFUSE:; case GL_SPECULAR:; case GL_EMISSION:; { ScmF32Vector *v = SCM_F32VECTOR(Scm_MakeF32Vector(4, 0.0)); glGetMaterialfv(face, pname, SCM_F32VECTOR_ELEMENTS(v)); SCM_RETURN(SCM_OBJ(v)); } case GL_COLOR_INDEXES: { ScmS32Vector *v = SCM_S32VECTOR(Scm_MakeS32Vector(3, 0.0)); glGetMaterialiv(face, pname, (GLint*)SCM_S32VECTOR_ELEMENTS(v)); SCM_RETURN(SCM_OBJ(v)); } case GL_SHININESS: { float v; glGetMaterialfv(face, pname, &v); SCM_RETURN(Scm_MakeFlonum((double)v)); } default: Scm_Error(\"bad pname: %d\", pname); SCM_RETURN(SCM_UNDEFINED); }") (define-cproc gl-color-material (face::<fixnum> mode::<fixnum>) ::<void> glColorMaterial) ;;============================================================= ;; Raster functions ;; (define-cproc gl-pixel-zoom (xfactor::<real> yfactor::<real>) ::<void> glPixelZoom) (define-cproc gl-pixel-store (pname::<fixnum> param) "if (SCM_EXACTP(param)) { glPixelStorei(pname, Scm_GetInteger(param)); } else if (SCM_FLONUMP(param)) { glPixelStoref(pname, (float)SCM_FLONUM_VALUE(param)); } else { Scm_Error(\"real number required for param, but got %S\", param); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-pixel-transfer (pname::<fixnum> param) "if (SCM_BOOLP(param)) { glPixelTransferi(pname, SCM_BOOL_VALUE(param)); } else if (SCM_EXACTP(param)) { glPixelTransferi(pname, Scm_GetInteger(param)); } else if (SCM_FLONUMP(param)) { glPixelTransferf(pname, (GLfloat)SCM_FLONUM_VALUE(param)); } else { Scm_Error(\"real number or boolean required for param, but got %S\", param); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-pixel-map (map::<fixnum> values) "if (SCM_U32VECTORP(values)) { glPixelMapuiv(map, SCM_U32VECTOR_SIZE(values), (GLuint*)SCM_U32VECTOR_ELEMENTS(values)); } else if (SCM_U16VECTORP(values)) { glPixelMapusv(map, SCM_U16VECTOR_SIZE(values), SCM_U16VECTOR_ELEMENTS(values)); } else if (SCM_F32VECTORP(values)) { glPixelMapfv(map, SCM_F32VECTOR_SIZE(values), SCM_F32VECTOR_ELEMENTS(values)); } else { Scm_Error(\"map value vector must be u16, u32 or f32 vector, but got %S\", values); } SCM_RETURN(SCM_UNDEFINED);") ;; values must have enough size (define-cproc gl-get-pixel-map! (map::<fixnum> values) "if (SCM_U32VECTORP(values)) { glGetPixelMapuiv(map, (GLuint*)SCM_U32VECTOR_ELEMENTS(values)); } else if (SCM_U16VECTORP(values)) { glGetPixelMapusv(map, SCM_U16VECTOR_ELEMENTS(values)); } else if (SCM_F32VECTORP(values)) { glGetPixelMapfv(map, SCM_F32VECTOR_ELEMENTS(values)); } else { Scm_Error(\"map value vector must be u16, u32 or f32 vector, but got %S\", values); } SCM_RETURN(values);") ;; allocate the vector in it. type can be a class ;; <u32vector> (default), <u16vector> or <f32vector> (define-cproc gl-get-pixel-map (map::<fixnum> &optional type) " int size; ScmObj vec = SCM_UNDEFINED; glGetIntegerv(map, &size); CHECK_ERROR(\"couldn't get pixel map size\"); SCM_ASSERT(size >= 0); if (SCM_UNBOUNDP(type) || type == SCM_OBJ(SCM_CLASS_U32VECTOR)) { vec = Scm_MakeU32Vector(size, 0); glGetPixelMapuiv(map, (GLuint*)SCM_U32VECTOR_ELEMENTS(vec)); } else if (type == SCM_OBJ(SCM_CLASS_U16VECTOR)) { vec = Scm_MakeU16Vector(size, 0); glGetPixelMapusv(map, SCM_U16VECTOR_ELEMENTS(vec)); } else if (type == SCM_OBJ(SCM_CLASS_F32VECTOR)) { vec = Scm_MakeF32Vector(size, 0); glGetPixelMapfv(map, SCM_F32VECTOR_ELEMENTS(vec)); } else { Scm_Error(\"pixel map vector class must be either <u32vector>, <u16vector> or <f32vector>, but got %S\", type); } SCM_RETURN(vec);") (define-cproc gl-bitmap (width::<int> height::<int> xbo::<float> ybo::<float> xbi::<float> ybi::<float> bitmap) "if (!SCM_U8VECTORP(bitmap)) { Scm_Error(\"bitmap must be an u8vector, but got %S\", bitmap); } if (SCM_U8VECTOR_SIZE(bitmap) != ((width+7)/8)*height) { Scm_Error(\"size (width=%d, height=%d) doesn't match bitmap vector %S\", width, height, bitmap); } glBitmap(width, height, xbo, ybo, xbi, ybi, SCM_U8VECTOR_ELEMENTS(bitmap)); SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-read-pixels (x::<fixnum> y::<fixnum> width::<fixnum> height::<fixnum> format::<fixnum> type::<fixnum>) " int elttype, size, packed; ScmObj vec = SCM_UNDEFINED; size = Scm_GLPixelDataSize(width, height, format, type, &elttype, &packed); vec = Scm_GLAllocUVector(elttype, size); if (!SCM_UVECTORP(vec)) { Scm_Error(\"invalid format or type (%S, %S)\", format, type); } glReadPixels(x, y, width, height, format, type, SCM_UVECTOR_ELEMENTS(vec)); SCM_RETURN(vec);") ; gl-read-pixels! (define-cproc gl-draw-pixels (width::<fixnum> height::<fixnum> format::<fixnum> type::<fixnum> pixels) ::<void> (let* ([elttype::int] [packed::int] [size::int (Scm_GLPixelDataSize width height format type (& elttype) (& packed))]) (glDrawPixels width height format type (Scm_GLPixelDataCheck pixels elttype size)))) (define-cproc gl-copy-pixels (x::<fixnum> y::<fixnum> width::<fixnum> height::<fixnum> type::<fixnum>) ::<void> glCopyPixels) ;;============================================================= ;; Stenciling ;; (define-cproc gl-stencil-func (func::<fixnum> ref::<int> mask::<uint>) ::<void> glStencilFunc) (define-cproc gl-stencil-mask (mask::<uint>) ::<void> glStencilMask) (define-cproc gl-stencil-op (func::<fixnum> zfail::<fixnum> zpass::<fixnum>) ::<void> glStencilOp) (define-cproc gl-clear-stencil (s::<int>) ::<void> glClearStencil) ;;============================================================= ;; Texture mapping ;; (define-cproc gl-tex-gen (coord::<fixnum> pname::<fixnum> param) "switch (pname) { case GL_TEXTURE_GEN_MODE: if (!SCM_INTP(param)) { Scm_Error(\"integer parameter required for GL_TEXTURE_GEN_MODE, but got %S\", param); } glTexGeni(coord, pname, SCM_INT_VALUE(param)); break; case GL_OBJECT_PLANE:; case GL_EYE_PLANE:; if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 4) { glTexGenfv(coord, pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_F64VECTORP(param) && SCM_F64VECTOR_SIZE(param) == 4) { glTexGendv(coord, pname, SCM_F64VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param) && SCM_S32VECTOR_SIZE(param) == 4) { glTexGeniv(coord, pname, (GLint*)SCM_S32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"s32, f32 or f64 vector of size 4 is required for parameter, but got %S\", param); } break; default: Scm_Error(\"unknown or unsupported glTexGen pname: %d\", pname); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-tex-env (target::<fixnum> pname::<fixnum> param) "switch (pname) { case GL_TEXTURE_ENV_MODE: if (SCM_INTP(param)) { glTexEnvi(target, pname, SCM_INT_VALUE(param)); } else { Scm_Error(\"integer parameter required for GL_TEXTURE_ENV_MODE, but got %S\", param); } break; case GL_TEXTURE_ENV_COLOR: if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 4) { glTexEnvfv(target, pname, SCM_F32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"f32 vector of size 4 is required for GL_TEXTURE_ENV_COLOR parameter, but got %S\", param); } break; default: Scm_Error(\"unknown or unsupported glTexEnv pname: %d\", pname); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-tex-parameter (target::<fixnum> pname::<fixnum> param) "switch (pname) { case GL_TEXTURE_WRAP_S:; case GL_TEXTURE_WRAP_T:; #if !defined(__CYGWIN__) case GL_TEXTURE_WRAP_R:; case GL_TEXTURE_BASE_LEVEL:; case GL_TEXTURE_MAX_LEVEL:; #endif /*!defined(__CYGWIN__)*/ case GL_TEXTURE_MAG_FILTER:; case GL_TEXTURE_MIN_FILTER:; if (SCM_INTP(param)) { glTexParameteri(target, pname, Scm_GetInteger(param)); } else { Scm_Error(\"integer parameter required, but got %S\", param); } break; case GL_TEXTURE_PRIORITY:; #if !defined(__CYGWIN__) case GL_TEXTURE_MIN_LOD:; case GL_TEXTURE_MAX_LOD:; #endif /*!defined(__CYGWIN__)*/ if (SCM_REALP(param)) { glTexParameterf(target, pname, (GLfloat)Scm_GetDouble(param)); } else { Scm_Error(\"real parameter required, but got %S\", param); } break; case GL_TEXTURE_BORDER_COLOR: if (SCM_F32VECTORP(param) && SCM_F32VECTOR_SIZE(param) == 4) { glTexParameterfv(target, pname, SCM_F32VECTOR_ELEMENTS(param)); } else if (SCM_S32VECTORP(param) && SCM_S32VECTOR_SIZE(param) == 4) { glTexParameteriv(target, pname, (GLint*)SCM_S32VECTOR_ELEMENTS(param)); } else { Scm_Error(\"f32 or s32 vector parameter of size 4 required, but got %S\", param); } break; default: Scm_Error(\"unknown or unsupported glTexParameter pname: %d\", pname); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-tex-parameter (target::<fixnum> pname::<fixnum>) " ScmObj vec; GLint i; GLfloat f; switch (pname) { case GL_TEXTURE_WRAP_S:; case GL_TEXTURE_WRAP_T:; case GL_TEXTURE_WRAP_R:; case GL_TEXTURE_BASE_LEVEL:; case GL_TEXTURE_MAX_LEVEL:; case GL_TEXTURE_MAG_FILTER:; case GL_TEXTURE_MIN_FILTER:; glGetTexParameteriv(target, pname, &i); SCM_RETURN(Scm_MakeInteger(i)); case GL_TEXTURE_PRIORITY:; case GL_TEXTURE_MIN_LOD:; case GL_TEXTURE_MAX_LOD:; glGetTexParameterfv(target, pname, &f); SCM_RETURN(Scm_MakeFlonum((double)f)); case GL_TEXTURE_BORDER_COLOR: vec = Scm_MakeF32Vector(4, 0.0); glGetTexParameterfv(target, pname, SCM_F32VECTOR_ELEMENTS(vec)); SCM_RETURN(vec); default: Scm_Error(\"unknown or unsupported glTexParameter pname: %d\", pname); } SCM_RETURN(SCM_UNDEFINED);") (define-cproc gl-get-tex-level-parameter (target::<fixnum> level::<fixnum> pname::<fixnum>) "GLint i; switch (pname) { case GL_TEXTURE_WIDTH:; case GL_TEXTURE_HEIGHT:; case GL_TEXTURE_DEPTH:; case GL_TEXTURE_BORDER:; case GL_TEXTURE_INTERNAL_FORMAT:; case GL_TEXTURE_RED_SIZE:; case GL_TEXTURE_GREEN_SIZE:; case GL_TEXTURE_BLUE_SIZE:; case GL_TEXTURE_ALPHA_SIZE:; case GL_TEXTURE_LUMINANCE_SIZE:; case GL_TEXTURE_INTENSITY_SIZE:; glGetTexLevelParameteriv(target, level, pname, &i); SCM_RETURN(Scm_MakeInteger(i)); default: Scm_Error(\"unknown or unsupported glTexLevelParameter pname: %d\", pname); SCM_RETURN(SCM_UNDEFINED); }") ;; Caller must ensure vector has enough length, since we need to get ;; pixel store parameters to check that, which is expensive. ;; We allow #f to TEXELS just to allcate texture area (to be used ;; as a render target via framebuffer object). (define-cproc gl-tex-image-1d (target::<fixnum> level::<fixnum> internalformat::<fixnum> width::<fixnum> border::<fixnum> format::<fixnum> type::<fixnum> texels) "int elttype, size; void *texelptr; size = Scm_GLPixelDataSize(width, 1, format, type, &elttype, NULL); if (SCM_FALSEP(texels)) { texelptr = NULL; } else { texelptr = Scm_GLPixelDataCheck(texels, elttype, size); glTexImage1D(target, level, internalformat, width, border, format, type, texelptr); } SCM_RETURN(SCM_UNDEFINED);") ;; Caller must ensure vector has enough length, since we need to get ;; pixel store parameters to check that, which is expensive. ;; We allow #f to TEXELS just to allcate texture area (to be used ;; as a render target via framebuffer object). (define-cproc gl-tex-image-2d (target::<fixnum> level::<fixnum> internalformat::<fixnum> width::<fixnum> height::<fixnum> border::<fixnum> format::<fixnum> type::<fixnum> texels) "int elttype, size; void *texelptr; size = Scm_GLPixelDataSize(width, height, format, type, &elttype, NULL); if (SCM_FALSEP(texels)) { texelptr = NULL; } else { texelptr = Scm_GLPixelDataCheck(texels, elttype, size); glTexImage2D(target, level, internalformat, width, height, border, format, type, texelptr); } SCM_RETURN(SCM_UNDEFINED);") ; gl-get-tex-image (define-cproc gl-gen-textures (size::<fixnum>) (when (<= size 0) (Scm_Error "size must be a positive integer, but got %d" size)) (let* ([vec (Scm_MakeU32Vector size 0)]) (glGenTextures size (cast GLuint* (SCM_U32VECTOR_ELEMENTS vec))) (result vec))) (define-cproc gl-delete-textures (names::<u32vector>) ::<void> (glDeleteTextures (SCM_U32VECTOR_SIZE names) (cast GLuint* (SCM_U32VECTOR_ELEMENTS names)))) (define-cproc gl-bind-texture (target::<fixnum> name::<int>) ::<void> glBindTexture) (define-cproc gl-prioritize-textures (names::<u32vector> priorities::<f32vector>) ::<void> (let* ([n::int (SCM_U32VECTOR_SIZE names)]) (when (!= n (SCM_F32VECTOR_SIZE priorities)) (Scm_Error "priority vector length doesn't match \ the names vector length %d: %S" n priorities)) (glPrioritizeTextures n (cast GLuint* (SCM_U32VECTOR_ELEMENTS names)) (SCM_F32VECTOR_ELEMENTS priorities)))) (define-cproc gl-are-textures-resident! (names::<u32vector> res::<gl-boolean-vector>) ::<boolean> (glAreTexturesResident (SCM_U32VECTOR_SIZE names) (cast GLuint* (SCM_U32VECTOR_ELEMENTS names)) (SCM_GL_BOOLEAN_VECTOR_ELEMENTS res))) (define-cproc gl-is-texture (name::<int>) ::<int> glIsTexture) (define-cproc gl-tex-sub-image-1d (target::<fixnum> level::<fixnum> xoffset::<fixnum> width::<fixnum> format::<fixnum> type::<fixnum> texels) ::<void> (let* ([elttype::int] [size::int (Scm_GLPixelDataSize width 1 format type (& elttype) NULL)] [texelptr::void* (Scm_GLPixelDataCheck texels elttype size)]) (when texelptr (glTexSubImage1D target level xoffset width format type texelptr)))) (define-cproc gl-tex-sub-image-2d (target::<fixnum> level::<fixnum> xoffset::<fixnum> yoffset::<fixnum> width::<fixnum> height::<fixnum> format::<fixnum> type::<fixnum> texels) ::<void> (let* ([elttype::int] [size::int (Scm_GLPixelDataSize width height format type (& elttype) NULL)] [texelptr::void* (Scm_GLPixelDataCheck texels elttype size)]) (when texelptr (glTexSubImage2D target level xoffset yoffset width height format type texelptr)))) (define-cproc gl-copy-tex-image-1d (target::<fixnum> level::<fixnum> internal-format::<fixnum> x::<fixnum> y::<fixnum> width::<fixnum> border::<fixnum>) ::<void> glCopyTexImage1D) (define-cproc gl-copy-tex-image-2d (target::<fixnum> level::<fixnum> internal-format::<fixnum> x::<fixnum> y::<fixnum> width::<fixnum> height::<fixnum> border::<fixnum>) ::<void> glCopyTexImage2D) (define-cproc gl-copy-tex-sub-image-1d (target::<fixnum> level::<fixnum> xoffset::<fixnum> x::<fixnum> y::<fixnum> width::<fixnum>) ::<void> glCopyTexSubImage1D) (define-cproc gl-copy-tex-sub-image-2d (target::<fixnum> level::<fixnum> xoffset::<fixnum> yoffset::<fixnum> x::<fixnum> y::<fixnum> width::<fixnum> height::<fixnum>) ::<void> glCopyTexSubImage2D) ;;============================================================= ;; Evaluators ;; ; gl-map1 ; gl-map2 ; gl-get-map ; gl-eval-coord1 ; gl-eval-coord2 ; gl-map-grid ; gl-eval-point1 ; gl-eval-point2 ; gl-eval-mesh1 ; gl-eval-mesh2 ;;============================================================= ;; Fog ;; (define-cproc gl-fog (pname::<fixnum> param) ::<void> (case pname [(GL_FOG_MODE GL_FOG_INDEX) (if (SCM_INTP param) (glFogi pname (SCM_INT_VALUE param)) (Scm_Error "integer parameter required, but got %S" param))] [(GL_FOG_DENSITY GL_FOG_START GL_FOG_END) (if (SCM_REALP param) (glFogf pname (cast GLfloat (Scm_GetDouble param))) (Scm_Error "real number parameter required, but got %S" param))] [(GL_FOG_COLOR) (assert-vector-type&size f32vector 4 param) (glFogfv pname (SCM_F32VECTOR_ELEMENTS param))] [else (Scm_Error "unknown or unsupported glFog pname: %d" pname)])) ;;============================================================= ;; Selection and feedback ;; (define-cproc gl-feedback-buffer (type::<fixnum> buffer::<f32vector>) ::<void> (glFeedbackBuffer (SCM_F32VECTOR_SIZE buffer) type (SCM_F32VECTOR_ELEMENTS buffer))) (define-cproc gl-select-buffer (buffer::<u32vector>) ::<void> (glSelectBuffer (SCM_U32VECTOR_SIZE buffer) (cast GLuint* (SCM_U32VECTOR_ELEMENTS buffer)))) (define-cproc gl-pass-through (token::<float>) ::<void> glPassThrough) (define-cproc gl-init-names () ::<void> glInitNames) (define-cproc gl-load-name (name::<int>) ::<void> glLoadName) (define-cproc gl-push-name (name::<int>) ::<void> glPushName) (define-cproc gl-pop-name () ::<void> glPopName) ;; Local variables: ;; mode: scheme ;; end: �������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/INSTALL.eucjp�����������������������������������������������������������������������0000644�0000764�0000764�00000004620�11617171625�014522� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Gauche-gl - Gauche OpenGL ¥Ð¥¤¥ó¥Ç¥£¥ó¥° Gauche-gl¤ÎºÇ¿·¾ðÊó¤Ï°Ê²¼¤ÎURL¤ÇÆÀ¤é¤ì¤Þ¤¹¡£ http://practical-scheme.net/gauche/ ɬÍפʽàÈ÷ ---------------------------------------------------------- * Gauche 0.9.1 °Ê¹ß¤¬¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ * OpenGL 1.1°Ê¹ß¤â¤·¤¯¤ÏMesa 3.0°Ê¹ß¤¬É¬ÍפǤ¹¡£ * GLUT 3.7°Ê¹ß¤¬É¬ÍפǤ¹¡£(¤¿¤À¤·¡¢MinGW¾å¤Ç¤Î¥³¥ó¥Ñ¥¤¥ë»þ¤Ë¤Ï ɬÍפ¢¤ê¤Þ¤»¤ó¡£°Ê²¼¤ÇÀâÌÀ¤·¤Þ¤¹) ´Êñ¤ÊÊýË¡ ---------------------------------------------------------- % ./configure % make % make install Configure¥¹¥¯¥ê¥×¥È¤Ï¡¢´û¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ëGauche¤Î¾ðÊó¤ò¸µ¤Ë¡¢ ɬÍפʥ³¥ó¥Ñ¥¤¥é¥ª¥×¥·¥ç¥ó¤ä¥¤¥ó¥¹¥È¡¼¥ëÀè¤òÀßÄꤷ¤Þ¤¹¡£ GLUT¥é¥¤¥Ö¥é¥ê¤Î¾ì½ê ---------------------------------------------------------- ¤â¤·GLUT¥é¥¤¥Ö¥é¥ê¤¬É¸½à¤Ç¤Ê¤¤¾ì½ê¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¡¢°Ê²¼¤Î¥ª¥×¥·¥ç¥ó¤Ç ¤½¤Î¾ì½ê¤òconfigure¥¹¥¯¥ê¥×¥È¤ËÅϤ·¤Æ²¼¤µ¤¤¡£ ./configure --with-glut=DIR MinGW¤Ç¤Ï¡¢Ê̤ËGLUT¤ò¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤«¤ï¤ê¤Ë¡¢¥½¡¼¥¹¥Ä¥ê¡¼¤Ë´Þ¤Þ¤ì¤ëfreeglut-2.6 ¤ò»È¤¦¤³¤È¤â¤Ç¤­¤Þ¤¹¡£¤³¤ÎÊýË¡¤ò»È¤Ã¤¿¾ì¹ç¡¢freeglut¥é¥¤¥Ö¥é¥ê¤Ï¥¹¥¿¥Æ¥£¥Ã¥¯¤Ë ¥ê¥ó¥¯¤µ¤ì¤ë¤¿¤á¡¢¥¹¥¯¥ê¥×¥È¤òÇÛÉÛ¤¹¤ëºÝ¤Ëglut¥é¥¤¥Ö¥é¥ê¤òÊ̤˴ޤá¤ëɬÍ×¤Ï ¤¢¤ê¤Þ¤»¤ó¡£¤³¤ÎÊýË¡¤òÁª¤Ö¾ì¹ç¤Ï¼¡¤Î¥ª¥×¥·¥ç¥ó¤Çconfigure¤·¤Æ¤¯¤À¤µ¤¤¡£ ./configure --with-glut=mingw-static freeglut¤ò¥ê¥ó¥¯¤·¤¿libgauche-glut.dll¤ò¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤È¶¦¤ËÇÛÉÛ¤¹¤ë¾ì¹ç¤Ï¡¢ win32/freeglut-2.6.0-3/Copying.txt ¤ò¥Á¥§¥Ã¥¯¤·¤Æ¤¯¤À¤µ¤¤¡£freeglut¤Ï MIT¥é¥¤¥»¥ó¥¹Åª¤Ê¾ò·ï¤Ç»È¤¨¤Þ¤¹¤¬¡¢ÇÛÉÛʪ¤Ë¤ÏÃøºî¸¢É½¼¨¤ò´Þ¤á¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£ NVidia Cg ¥Ð¥¤¥ó¥Ç¥£¥ó¥° ---------------------------------------------------------- Issac Trotts»á¤Ë¤è¤ë¡¢NVidia¤ÎCg Toolkit¤ò»È¤¦¤¿¤á¤Î¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤¬ ¥ª¥×¥·¥ç¥ó¤ÇÄ󶡤µ¤ì¤Æ¤¤¤Þ¤¹¡£¤Þ¤À°ìÉô¤ÎAPI¤·¤«¥«¥Ð¡¼¤µ¤ì¤Æ¤¤¤Þ¤»¤ó¤¬ ¤¤¤¯¤Ä¤«¤Î¥µ¥ó¥×¥ë¤òÁö¤é¤»¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤¹¡£Cg¥Ð¥¤¥ó¥Ç¥£¥ó¥°¤ò¥Ó¥ë¥É¡¢ ¥¤¥ó¥¹¥È¡¼¥ë¤¹¤ë¤¿¤á¤Ë¤Ï¡¢configure»þ¤Ë--enable-cg¤ò»ØÄꤷ¤Æ¤¯¤À¤µ¤¤¡£ ./configure --enable-cg ¥Ó¥ë¥É¤Ë¤Ï¡¢NVidia¤ÎCg Toolkit¤¬´û¤Ë¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Æ¤¤¤ëɬÍפ¬¤¢¤ê¤Þ¤¹¡£ NVidia¤ÎCg Toolkit¤Ï¼¡¤ÎURL¤«¤é¥À¥¦¥ó¥í¡¼¥É¤Ç¤­¤Þ¤¹¡£ http://developer.nvidia.com/object/cg_toolkit.html ¥×¥é¥Ã¥È¥Õ¥©¡¼¥àÆÃÍ­¤Î¾ðÊó ---------------------------------------------------------- FreeBSD¤Îports¤Ç¤ÏMesa¤¬pthreads¤ò¥¤¥Í¡¼¥Ö¥ë¤Ë¤·¤Æ¥³¥ó¥Ñ¥¤¥ë¤µ¤ì¤Æ¤¤¤ë ¤½¤¦¤Ê¤Î¤Ç¡¢GaucheËÜÂΤâpthreads¤ò¥¤¥Í¡¼¥Ö¥ë¤Ë¤·¤Æ¤ª¤«¤Ê¤¤¤ÈGauche-gl¤¬ ¥ê¥ó¥¯¤Ç¤­¤Þ¤»¤ó¡£(pthreads¤ò»ØÄꤹ¤ë¤ÈGauche¤Îconfigure»þ¤Ë·Ù¹ð¤¬ ½Ð¤Þ¤¹¤¬¡¢¥×¥í¥°¥é¥àÃæ¤Çmake-thread¤·¤Ê¤±¤ì¤ÐÁ´¤¯ÌäÂꤢ¤ê¤Þ¤»¤ó) ����������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/������������������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�013311� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/�������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�015727� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/lib/���������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�016475� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/lib/libfreeglut.a��������������������������������������������0000644�0000764�0000764�00000332000�11533026402�021141� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!<arch> / 1264195962 0 0 0 8194 ` ��$�� F��"Î��% ��% ��(T��(T��+��+��-Ò��-Ò��0Œ��0Œ��3b��3b��6@��6@��9��9��;Ê��;Ê��>’��>’��AP��AP��D���D���F²��F²��Iz��Iz��L4��L4��Nî��Nî��Q²��Q²��Tv��Tv��W2��W2��Yä��Yä��\”��\”��_H��_H��b��b��dØ��dØ��g’��g’��jL��jL��m��m��oÄ��oÄ��r€��r€��uF��uF��x��x��zÎ��zÎ��}ˆ��}ˆ��€Z��€Z��ƒ,��ƒ,��…þ��…þ��ˆ¸��ˆ¸��‹€��‹€��Ž:��Ž:��ö��ö��“Î��“Î��–®��–®��™t��™t��œ<��œ<��Ÿ��Ÿ��¡Æ��¡Æ��¤x��¤x��§,��§,��©ä��©ä��¬ž��¬ž��¯n��¯n��²2��²2��´ð��´ð��·¢��·¢��ºT��ºT��½��½��¿¼��¿¼��Âx��Âx��Å4��Å4��Çæ��Çæ��ʘ��ʘ��ÍV��ÍV��Ð��Ð��ÒÌ��ÒÌ��ÕŠ��ÕŠ��ØN��ØN��Û��Û��ÝØ��ÝØ��àÀ��àÀ��ã~��ã~��æR��æR��é��é��ëÈ��ëÈ��î’��î’��ñb��ñb��ô&��ô&��öØ��öØ��ù��ù��üT��üT��ÿ��ÿ�Ø�Ø�–�–�F�F� � � Â� Â�r�r�6�6�ò�ò�®�®�r�r�B�B� � �"Ò�"Ò�%¢�%¢�(r�(r�+:�+:�-Þ�-Þ�0¤�0¤�3T�3T�6�6�8Ê�8Ê�;„�;„�>B�>B�@ô�@ô�C¸�C¸�Ft�Ft�I2�I2�Kì�Kì�Nš�Nš�QJ�QJ�Sì�Sì�V°�V°�Yj�Yj�\2�\2�^ê�^ê�a´�a´�d„�d„�g(�g(�ið�ið�l¢�l¢�o`�o`�r�r�tÌ�tÌ�w~�w~�z6�z6�|ô�|ô�®�®�‚j�‚j�…2�…2�‡ê�‡ê�Ц�Ц�X�X� � �’ì�’ì�•ª�•ª�˜d�˜d�› �› �Ü�Ü� ˜� ˜�£^�£^�¦�¦�¨Î�¨Î�«Š�«Š�®P�®P�±,�±,__release_libfreeglut_a_iname�__head_release_libfreeglut_a�_glutWireTorus@24�__imp__glutWireTorus@24�_glutWireTetrahedron@0�__imp__glutWireTetrahedron@0�_glutWireTeapot@8�__imp__glutWireTeapot@8�_glutWireSphere@16�__imp__glutWireSphere@16�_glutWireSierpinskiSponge@16�__imp__glutWireSierpinskiSponge@16�_glutWireRhombicDodecahedron@0�__imp__glutWireRhombicDodecahedron@0�_glutWireOctahedron@0�__imp__glutWireOctahedron@0�_glutWireIcosahedron@0�__imp__glutWireIcosahedron@0�_glutWireDodecahedron@0�__imp__glutWireDodecahedron@0�_glutWireCylinder@24�__imp__glutWireCylinder@24�_glutWireCube@8�__imp__glutWireCube@8�_glutWireCone@24�__imp__glutWireCone@24�_glutWindowStatusFunc@4�__imp__glutWindowStatusFunc@4�_glutWarpPointer@8�__imp__glutWarpPointer@8�_glutWMCloseFunc@4�__imp__glutWMCloseFunc@4�_glutVisibilityFunc@4�__imp__glutVisibilityFunc@4�_glutVideoResizeGet@4�__imp__glutVideoResizeGet@4�_glutVideoResize@16�__imp__glutVideoResize@16�_glutVideoPan@16�__imp__glutVideoPan@16�_glutUseLayer@4�__imp__glutUseLayer@4�_glutTimerFunc@12�__imp__glutTimerFunc@12�_glutTabletMotionFunc@4�__imp__glutTabletMotionFunc@4�_glutTabletButtonFunc@4�__imp__glutTabletButtonFunc@4�_glutSwapBuffers@0�__imp__glutSwapBuffers@0�_glutStrokeWidth@8�__imp__glutStrokeWidth@8�_glutStrokeString@8�__imp__glutStrokeString@8�_glutStrokeLength@8�__imp__glutStrokeLength@8�_glutStrokeHeight@4�__imp__glutStrokeHeight@4�_glutStrokeCharacter@8�__imp__glutStrokeCharacter@8�_glutStopVideoResizing@0�__imp__glutStopVideoResizing@0�_glutSpecialUpFunc@4�__imp__glutSpecialUpFunc@4�_glutSpecialFunc@4�__imp__glutSpecialFunc@4�_glutSpaceballRotateFunc@4�__imp__glutSpaceballRotateFunc@4�_glutSpaceballMotionFunc@4�__imp__glutSpaceballMotionFunc@4�_glutSpaceballButtonFunc@4�__imp__glutSpaceballButtonFunc@4�_glutSolidTorus@24�__imp__glutSolidTorus@24�_glutSolidTetrahedron@0�__imp__glutSolidTetrahedron@0�_glutSolidTeapot@8�__imp__glutSolidTeapot@8�_glutSolidSphere@16�__imp__glutSolidSphere@16�_glutSolidSierpinskiSponge@16�__imp__glutSolidSierpinskiSponge@16�_glutSolidRhombicDodecahedron@0�__imp__glutSolidRhombicDodecahedron@0�_glutSolidOctahedron@0�__imp__glutSolidOctahedron@0�_glutSolidIcosahedron@0�__imp__glutSolidIcosahedron@0�_glutSolidDodecahedron@0�__imp__glutSolidDodecahedron@0�_glutSolidCylinder@24�__imp__glutSolidCylinder@24�_glutSolidCube@8�__imp__glutSolidCube@8�_glutSolidCone@24�__imp__glutSolidCone@24�_glutShowWindow@0�__imp__glutShowWindow@0�_glutShowOverlay@0�__imp__glutShowOverlay@0�_glutSetupVideoResizing@0�__imp__glutSetupVideoResizing@0�_glutSetWindowTitle@4�__imp__glutSetWindowTitle@4�_glutSetWindowData@4�__imp__glutSetWindowData@4�_glutSetWindow@4�__imp__glutSetWindow@4�_glutSetOption@8�__imp__glutSetOption@8�_glutSetMenuData@4�__imp__glutSetMenuData@4�_glutSetMenu@4�__imp__glutSetMenu@4�_glutSetKeyRepeat@4�__imp__glutSetKeyRepeat@4�_glutSetIconTitle@4�__imp__glutSetIconTitle@4�_glutSetCursor@4�__imp__glutSetCursor@4�_glutSetColor@16�__imp__glutSetColor@16�_glutReshapeWindow@8�__imp__glutReshapeWindow@8�_glutReshapeFunc@4�__imp__glutReshapeFunc@4�_glutReportErrors@0�__imp__glutReportErrors@0�_glutRemoveOverlay@0�__imp__glutRemoveOverlay@0�_glutRemoveMenuItem@4�__imp__glutRemoveMenuItem@4�_glutPushWindow@0�__imp__glutPushWindow@0�_glutPostWindowRedisplay@4�__imp__glutPostWindowRedisplay@4�_glutPostWindowOverlayRedisplay@4�__imp__glutPostWindowOverlayRedisplay@4�_glutPostRedisplay@0�__imp__glutPostRedisplay@0�_glutPostOverlayRedisplay@0�__imp__glutPostOverlayRedisplay@0�_glutPositionWindow@8�__imp__glutPositionWindow@8�_glutPopWindow@0�__imp__glutPopWindow@0�_glutPassiveMotionFunc@4�__imp__glutPassiveMotionFunc@4�_glutOverlayDisplayFunc@4�__imp__glutOverlayDisplayFunc@4�_glutMouseWheelFunc@4�__imp__glutMouseWheelFunc@4�_glutMouseFunc@4�__imp__glutMouseFunc@4�_glutMotionFunc@4�__imp__glutMotionFunc@4�_glutMenuStatusFunc@4�__imp__glutMenuStatusFunc@4�_glutMenuStateFunc@4�__imp__glutMenuStateFunc@4�_glutMenuDestroyFunc@4�__imp__glutMenuDestroyFunc@4�_glutMainLoopEvent@0�__imp__glutMainLoopEvent@0�_glutMainLoop@0�__imp__glutMainLoop@0�_glutLeaveMainLoop@0�__imp__glutLeaveMainLoop@0�_glutLeaveGameMode@0�__imp__glutLeaveGameMode@0�_glutLayerGet@4�__imp__glutLayerGet@4�_glutKeyboardUpFunc@4�__imp__glutKeyboardUpFunc@4�_glutKeyboardFunc@4�__imp__glutKeyboardFunc@4�_glutJoystickFunc@8�__imp__glutJoystickFunc@8�_glutInitWindowSize@8�__imp__glutInitWindowSize@8�_glutInitWindowPosition@8�__imp__glutInitWindowPosition@8�_glutInitDisplayString@4�__imp__glutInitDisplayString@4�_glutInitDisplayMode@4�__imp__glutInitDisplayMode@4�_glutInitContextVersion@8�__imp__glutInitContextVersion@8�_glutInitContextProfile@4�__imp__glutInitContextProfile@4�_glutInitContextFlags@4�__imp__glutInitContextFlags@4�_glutInit@8�__imp__glutInit@8�_glutIgnoreKeyRepeat@4�__imp__glutIgnoreKeyRepeat@4�_glutIdleFunc@4�__imp__glutIdleFunc@4�_glutIconifyWindow@0�__imp__glutIconifyWindow@0�_glutHideWindow@0�__imp__glutHideWindow@0�_glutHideOverlay@0�__imp__glutHideOverlay@0�_glutGetWindowData@0�__imp__glutGetWindowData@0�_glutGetWindow@0�__imp__glutGetWindow@0�_glutGetProcAddress@4�__imp__glutGetProcAddress@4�_glutGetModifiers@0�__imp__glutGetModifiers@0�_glutGetModeValues@8�__imp__glutGetModeValues@8�_glutGetMenuData@0�__imp__glutGetMenuData@0�_glutGetMenu@0�__imp__glutGetMenu@0�_glutGetColor@8�__imp__glutGetColor@8�_glutGet@4�__imp__glutGet@4�_glutGameModeString@4�__imp__glutGameModeString@4�_glutGameModeGet@4�__imp__glutGameModeGet@4�_glutFullScreenToggle@0�__imp__glutFullScreenToggle@0�_glutFullScreen@0�__imp__glutFullScreen@0�_glutForceJoystickFunc@0�__imp__glutForceJoystickFunc@0�_glutExtensionSupported@4�__imp__glutExtensionSupported@4�_glutExit@0�__imp__glutExit@0�_glutEstablishOverlay@0�__imp__glutEstablishOverlay@0�_glutEntryFunc@4�__imp__glutEntryFunc@4�_glutEnterGameMode@0�__imp__glutEnterGameMode@0�_glutDisplayFunc@4�__imp__glutDisplayFunc@4�_glutDialsFunc@4�__imp__glutDialsFunc@4�_glutDeviceGet@4�__imp__glutDeviceGet@4�_glutDetachMenu@4�__imp__glutDetachMenu@4�_glutDestroyWindow@4�__imp__glutDestroyWindow@4�_glutDestroyMenu@4�__imp__glutDestroyMenu@4�_glutCreateWindow@4�__imp__glutCreateWindow@4�_glutCreateSubWindow@20�__imp__glutCreateSubWindow@20�_glutCreateMenu@4�__imp__glutCreateMenu@4�_glutCopyColormap@4�__imp__glutCopyColormap@4�_glutCloseFunc@4�__imp__glutCloseFunc@4�_glutChangeToSubMenu@12�__imp__glutChangeToSubMenu@12�_glutChangeToMenuEntry@12�__imp__glutChangeToMenuEntry@12�_glutButtonBoxFunc@4�__imp__glutButtonBoxFunc@4�_glutBitmapWidth@8�__imp__glutBitmapWidth@8�_glutBitmapString@8�__imp__glutBitmapString@8�_glutBitmapLength@8�__imp__glutBitmapLength@8�_glutBitmapHeight@4�__imp__glutBitmapHeight@4�_glutBitmapCharacter@8�__imp__glutBitmapCharacter@8�_glutAttachMenu@4�__imp__glutAttachMenu@4�_glutAddSubMenu@8�__imp__glutAddSubMenu@8�_glutAddMenuEntry@8�__imp__glutAddMenuEntry@8�___glutInitWithExit@12�__imp____glutInitWithExit@12�___glutCreateWindowWithExit@8�__imp____glutCreateWindowWithExit@8�___glutCreateMenuWithExit@8�__imp____glutCreateMenuWithExit@8��ddldt.o/ 1264195962 500 500 100664 588 ` L������������.text������������������������������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$4�������������������������@�0À.idata$5�������������������������@�0À.idata$7����������� ��������������@�0À��������freeglut.dll����.file�������þÿ��gfake��������������.text����������������������������.data����������������������������.bss�����������������������������.idata$4������������������������.idata$5������������������������.idata$7������� ��������������������������������"���__release_libfreeglut_a_iname�ddldh.o/ 1264195962 500 500 100664 661 ` L�����6�������.text������������������������������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$2����������������������@�0À.idata$5����������������������������@�0À.idata$4����������������������������@�0À������������������������ ���� ���������� ����.file�������þÿ��gfake��������������hname�����������fthunk����������.text����������������������������.data����������������������������.bss�����������������������������.idata$2�����������������������.idata$4��������.idata$5���������������������������!������������?���__head_release_libfreeglut_a�__release_libfreeglut_a_iname� ddlds00144.o/ 1264195962 500 500 100664 631 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutWireTorus������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutWireTorus@24�__imp__glutWireTorus@24�__head_release_libfreeglut_a� ddlds00143.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutWireTetrahedron�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���_glutWireTetrahedron@0�__imp__glutWireTetrahedron@0�__head_release_libfreeglut_a� ddlds00142.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������Ž�glutWireTeapot��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutWireTeapot@8�__imp__glutWireTeapot@8�__head_release_libfreeglut_a� ddlds00141.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutWireSphere��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutWireSphere@16�__imp__glutWireSphere@16�__head_release_libfreeglut_a� ddlds00140.o/ 1264195962 500 500 100664 665 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������Œ�glutWireSierpinskiSponge������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6���������������������������!���������������D������������a���_glutWireSierpinskiSponge@16�__imp__glutWireSierpinskiSponge@16�__head_release_libfreeglut_a� ddlds00139.o/ 1264195962 500 500 100664 673 ` L�����ˆ�� �����.text��������������,��`��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��j�����������0À.idata$5�����������8��t�����������0À.idata$4�����������<��~�����������0À.idata$6�����������@���������������� Àÿ%����������������‹�glutWireRhombicDodecahedron�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6���������������������������#���������������H������������e���_glutWireRhombicDodecahedron@0�__imp__glutWireRhombicDodecahedron@0�__head_release_libfreeglut_a� ddlds00138.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������Š�glutWireOctahedron��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutWireOctahedron@0�__imp__glutWireOctahedron@0�__head_release_libfreeglut_a� ddlds00137.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������‰�glutWireIcosahedron�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���_glutWireIcosahedron@0�__imp__glutWireIcosahedron@0�__head_release_libfreeglut_a� ddlds00136.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������ˆ�glutWireDodecahedron������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutWireDodecahedron@0�__imp__glutWireDodecahedron@0�__head_release_libfreeglut_a� ddlds00135.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������‡�glutWireCylinder������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutWireCylinder@24�__imp__glutWireCylinder@24�__head_release_libfreeglut_a� ddlds00134.o/ 1264195962 500 500 100664 627 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������†�glutWireCube������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������*������������G���_glutWireCube@8�__imp__glutWireCube@8�__head_release_libfreeglut_a� ddlds00133.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������…�glutWireCone������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutWireCone@24�__imp__glutWireCone@24�__head_release_libfreeglut_a� ddlds00132.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������„�glutWindowStatusFunc������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutWindowStatusFunc@4�__imp__glutWindowStatusFunc@4�__head_release_libfreeglut_a� ddlds00131.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������ƒ�glutWarpPointer�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutWarpPointer@8�__imp__glutWarpPointer@8�__head_release_libfreeglut_a� ddlds00130.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������‚�glutWMCloseFunc�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutWMCloseFunc@4�__imp__glutWMCloseFunc@4�__head_release_libfreeglut_a� ddlds00129.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutVisibilityFunc��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutVisibilityFunc@4�__imp__glutVisibilityFunc@4�__head_release_libfreeglut_a� ddlds00128.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������€�glutVideoResizeGet��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutVideoResizeGet@4�__imp__glutVideoResizeGet@4�__head_release_libfreeglut_a� ddlds00127.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutVideoResize�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutVideoResize@16�__imp__glutVideoResize@16�__head_release_libfreeglut_a� ddlds00126.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������~�glutVideoPan������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutVideoPan@16�__imp__glutVideoPan@16�__head_release_libfreeglut_a� ddlds00125.o/ 1264195962 500 500 100664 627 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������}�glutUseLayer������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������*������������G���_glutUseLayer@4�__imp__glutUseLayer@4�__head_release_libfreeglut_a� ddlds00124.o/ 1264195962 500 500 100664 631 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������|�glutTimerFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutTimerFunc@12�__imp__glutTimerFunc@12�__head_release_libfreeglut_a� ddlds00123.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������{�glutTabletMotionFunc������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutTabletMotionFunc@4�__imp__glutTabletMotionFunc@4�__head_release_libfreeglut_a� ddlds00122.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������z�glutTabletButtonFunc������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutTabletButtonFunc@4�__imp__glutTabletButtonFunc@4�__head_release_libfreeglut_a� ddlds00121.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������y�glutSwapBuffers�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutSwapBuffers@0�__imp__glutSwapBuffers@0�__head_release_libfreeglut_a� ddlds00120.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������x�glutStrokeWidth�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutStrokeWidth@8�__imp__glutStrokeWidth@8�__head_release_libfreeglut_a� ddlds00119.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������w�glutStrokeString������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutStrokeString@8�__imp__glutStrokeString@8�__head_release_libfreeglut_a� ddlds00118.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������v�glutStrokeLength������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutStrokeLength@8�__imp__glutStrokeLength@8�__head_release_libfreeglut_a� ddlds00117.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������u�glutStrokeHeight������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutStrokeHeight@4�__imp__glutStrokeHeight@4�__head_release_libfreeglut_a� ddlds00116.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������t�glutStrokeCharacter�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���_glutStrokeCharacter@8�__imp__glutStrokeCharacter@8�__head_release_libfreeglut_a� ddlds00115.o/ 1264195962 500 500 100664 653 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������s�glutStopVideoResizing������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������<������������Y���_glutStopVideoResizing@0�__imp__glutStopVideoResizing@0�__head_release_libfreeglut_a� ddlds00114.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������r�glutSpecialUpFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutSpecialUpFunc@4�__imp__glutSpecialUpFunc@4�__head_release_libfreeglut_a� ddlds00113.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������q�glutSpecialFunc�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutSpecialFunc@4�__imp__glutSpecialFunc@4�__head_release_libfreeglut_a� ddlds00112.o/ 1264195962 500 500 100664 661 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������p�glutSpaceballRotateFunc�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������@������������]���_glutSpaceballRotateFunc@4�__imp__glutSpaceballRotateFunc@4�__head_release_libfreeglut_a� ddlds00111.o/ 1264195962 500 500 100664 661 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������o�glutSpaceballMotionFunc�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������@������������]���_glutSpaceballMotionFunc@4�__imp__glutSpaceballMotionFunc@4�__head_release_libfreeglut_a� ddlds00110.o/ 1264195962 500 500 100664 661 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������n�glutSpaceballButtonFunc�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������@������������]���_glutSpaceballButtonFunc@4�__imp__glutSpaceballButtonFunc@4�__head_release_libfreeglut_a� ddlds00109.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������m�glutSolidTorus��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutSolidTorus@24�__imp__glutSolidTorus@24�__head_release_libfreeglut_a� ddlds00108.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������l�glutSolidTetrahedron������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutSolidTetrahedron@0�__imp__glutSolidTetrahedron@0�__head_release_libfreeglut_a� ddlds00107.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������k�glutSolidTeapot�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutSolidTeapot@8�__imp__glutSolidTeapot@8�__head_release_libfreeglut_a� ddlds00106.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������j�glutSolidSphere�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutSolidSphere@16�__imp__glutSolidSphere@16�__head_release_libfreeglut_a� ddlds00105.o/ 1264195962 500 500 100664 667 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������i�glutSolidSierpinskiSponge������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6���������������������������"���������������F������������c���_glutSolidSierpinskiSponge@16�__imp__glutSolidSierpinskiSponge@16�__head_release_libfreeglut_a� ddlds00104.o/ 1264195962 500 500 100664 675 ` L�����ˆ�� �����.text��������������,��`��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��j�����������0À.idata$5�����������8��t�����������0À.idata$4�����������<��~�����������0À.idata$6�������� ���@���������������� Àÿ%����������������h�glutSolidRhombicDodecahedron������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6���������������������������$���������������J������������g���_glutSolidRhombicDodecahedron@0�__imp__glutSolidRhombicDodecahedron@0�__head_release_libfreeglut_a� ddlds00103.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������g�glutSolidOctahedron�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���_glutSolidOctahedron@0�__imp__glutSolidOctahedron@0�__head_release_libfreeglut_a� ddlds00102.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������f�glutSolidIcosahedron������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutSolidIcosahedron@0�__imp__glutSolidIcosahedron@0�__head_release_libfreeglut_a� ddlds00101.o/ 1264195962 500 500 100664 653 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������e�glutSolidDodecahedron������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������<������������Y���_glutSolidDodecahedron@0�__imp__glutSolidDodecahedron@0�__head_release_libfreeglut_a� ddlds00100.o/ 1264195962 500 500 100664 643 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������d�glutSolidCylinder������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutSolidCylinder@24�__imp__glutSolidCylinder@24�__head_release_libfreeglut_a� ddlds00099.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������c�glutSolidCube������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutSolidCube@8�__imp__glutSolidCube@8�__head_release_libfreeglut_a� ddlds00098.o/ 1264195962 500 500 100664 631 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������b�glutSolidCone������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutSolidCone@24�__imp__glutSolidCone@24�__head_release_libfreeglut_a� ddlds00097.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������a�glutShowWindow��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutShowWindow@0�__imp__glutShowWindow@0�__head_release_libfreeglut_a� ddlds00096.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������`�glutShowOverlay�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutShowOverlay@0�__imp__glutShowOverlay@0�__head_release_libfreeglut_a� ddlds00095.o/ 1264195962 500 500 100664 659 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������_�glutSetupVideoResizing��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������>������������[���_glutSetupVideoResizing@0�__imp__glutSetupVideoResizing@0�__head_release_libfreeglut_a� ddlds00094.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������^�glutSetWindowTitle��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutSetWindowTitle@4�__imp__glutSetWindowTitle@4�__head_release_libfreeglut_a� ddlds00093.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������]�glutSetWindowData������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutSetWindowData@4�__imp__glutSetWindowData@4�__head_release_libfreeglut_a� ddlds00092.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������\�glutSetWindow������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutSetWindow@4�__imp__glutSetWindow@4�__head_release_libfreeglut_a� ddlds00091.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������[�glutSetOption������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutSetOption@8�__imp__glutSetOption@8�__head_release_libfreeglut_a� ddlds00090.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������Z�glutSetMenuData�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutSetMenuData@4�__imp__glutSetMenuData@4�__head_release_libfreeglut_a� ddlds00089.o/ 1264195962 500 500 100664 625 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������Y�glutSetMenu�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������(������������E���_glutSetMenu@4�__imp__glutSetMenu@4�__head_release_libfreeglut_a� ddlds00088.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������X�glutSetKeyRepeat������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutSetKeyRepeat@4�__imp__glutSetKeyRepeat@4�__head_release_libfreeglut_a� ddlds00087.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������W�glutSetIconTitle������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutSetIconTitle@4�__imp__glutSetIconTitle@4�__head_release_libfreeglut_a� ddlds00086.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������V�glutSetCursor������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutSetCursor@4�__imp__glutSetCursor@4�__head_release_libfreeglut_a� ddlds00085.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������U�glutSetColor������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutSetColor@16�__imp__glutSetColor@16�__head_release_libfreeglut_a� ddlds00084.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������T�glutReshapeWindow������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutReshapeWindow@8�__imp__glutReshapeWindow@8�__head_release_libfreeglut_a� ddlds00083.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������S�glutReshapeFunc�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutReshapeFunc@4�__imp__glutReshapeFunc@4�__head_release_libfreeglut_a� ddlds00082.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������R�glutReportErrors������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutReportErrors@0�__imp__glutReportErrors@0�__head_release_libfreeglut_a� ddlds00081.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������Q�glutRemoveOverlay������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutRemoveOverlay@0�__imp__glutRemoveOverlay@0�__head_release_libfreeglut_a� ddlds00080.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������P�glutRemoveMenuItem��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutRemoveMenuItem@4�__imp__glutRemoveMenuItem@4�__head_release_libfreeglut_a� ddlds00079.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������O�glutPushWindow��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutPushWindow@0�__imp__glutPushWindow@0�__head_release_libfreeglut_a� ddlds00078.o/ 1264195962 500 500 100664 661 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������N�glutPostWindowRedisplay�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������@������������]���_glutPostWindowRedisplay@4�__imp__glutPostWindowRedisplay@4�__head_release_libfreeglut_a� ddlds00077.o/ 1264195962 500 500 100664 683 ` L�����Œ�� �����.text��������������,��d��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��n�����������0À.idata$5�����������8��x�����������0À.idata$4�����������<��‚�����������0À.idata$6��������"���@���������������� Àÿ%����������������M�glutPostWindowOverlayRedisplay��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6���������������������������&���������������N������������k���_glutPostWindowOverlayRedisplay@4�__imp__glutPostWindowOverlayRedisplay@4�__head_release_libfreeglut_a� ddlds00076.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������L�glutPostRedisplay������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutPostRedisplay@0�__imp__glutPostRedisplay@0�__head_release_libfreeglut_a� ddlds00075.o/ 1264195962 500 500 100664 663 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������K�glutPostOverlayRedisplay������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6��������������������������� ���������������B������������_���_glutPostOverlayRedisplay@0�__imp__glutPostOverlayRedisplay@0�__head_release_libfreeglut_a� ddlds00074.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������J�glutPositionWindow��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutPositionWindow@8�__imp__glutPositionWindow@8�__head_release_libfreeglut_a� ddlds00073.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������I�glutPopWindow������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutPopWindow@0�__imp__glutPopWindow@0�__head_release_libfreeglut_a� ddlds00072.o/ 1264195962 500 500 100664 653 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������H�glutPassiveMotionFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������<������������Y���_glutPassiveMotionFunc@4�__imp__glutPassiveMotionFunc@4�__head_release_libfreeglut_a� ddlds00071.o/ 1264195962 500 500 100664 659 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������G�glutOverlayDisplayFunc��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������>������������[���_glutOverlayDisplayFunc@4�__imp__glutOverlayDisplayFunc@4�__head_release_libfreeglut_a� ddlds00070.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������F�glutMouseWheelFunc��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutMouseWheelFunc@4�__imp__glutMouseWheelFunc@4�__head_release_libfreeglut_a� ddlds00069.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������E�glutMouseFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutMouseFunc@4�__imp__glutMouseFunc@4�__head_release_libfreeglut_a� ddlds00068.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������D�glutMotionFunc��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutMotionFunc@4�__imp__glutMotionFunc@4�__head_release_libfreeglut_a� ddlds00067.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������C�glutMenuStatusFunc��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutMenuStatusFunc@4�__imp__glutMenuStatusFunc@4�__head_release_libfreeglut_a� ddlds00066.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������B�glutMenuStateFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutMenuStateFunc@4�__imp__glutMenuStateFunc@4�__head_release_libfreeglut_a� ddlds00065.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������A�glutMenuDestroyFunc�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���_glutMenuDestroyFunc@4�__imp__glutMenuDestroyFunc@4�__head_release_libfreeglut_a� ddlds00064.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������@�glutMainLoopEvent������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutMainLoopEvent@0�__imp__glutMainLoopEvent@0�__head_release_libfreeglut_a� ddlds00063.o/ 1264195962 500 500 100664 627 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������?�glutMainLoop������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������*������������G���_glutMainLoop@0�__imp__glutMainLoop@0�__head_release_libfreeglut_a� ddlds00062.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������>�glutLeaveMainLoop������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutLeaveMainLoop@0�__imp__glutLeaveMainLoop@0�__head_release_libfreeglut_a� ddlds00061.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������=�glutLeaveGameMode������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutLeaveGameMode@0�__imp__glutLeaveGameMode@0�__head_release_libfreeglut_a� ddlds00060.o/ 1264195962 500 500 100664 627 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������<�glutLayerGet������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������*������������G���_glutLayerGet@4�__imp__glutLayerGet@4�__head_release_libfreeglut_a� ddlds00059.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������;�glutKeyboardUpFunc��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutKeyboardUpFunc@4�__imp__glutKeyboardUpFunc@4�__head_release_libfreeglut_a� ddlds00058.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������:�glutKeyboardFunc������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutKeyboardFunc@4�__imp__glutKeyboardFunc@4�__head_release_libfreeglut_a� ddlds00057.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������9�glutJoystickFunc������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutJoystickFunc@8�__imp__glutJoystickFunc@8�__head_release_libfreeglut_a� ddlds00056.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������8�glutInitWindowSize��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutInitWindowSize@8�__imp__glutInitWindowSize@8�__head_release_libfreeglut_a� ddlds00055.o/ 1264195962 500 500 100664 659 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������7�glutInitWindowPosition��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������>������������[���_glutInitWindowPosition@8�__imp__glutInitWindowPosition@8�__head_release_libfreeglut_a� ddlds00054.o/ 1264195962 500 500 100664 653 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������6�glutInitDisplayString������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������<������������Y���_glutInitDisplayString@4�__imp__glutInitDisplayString@4�__head_release_libfreeglut_a� ddlds00053.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������5�glutInitDisplayMode�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���_glutInitDisplayMode@4�__imp__glutInitDisplayMode@4�__head_release_libfreeglut_a� ddlds00052.o/ 1264195962 500 500 100664 659 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������4�glutInitContextVersion��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������>������������[���_glutInitContextVersion@8�__imp__glutInitContextVersion@8�__head_release_libfreeglut_a� ddlds00051.o/ 1264195962 500 500 100664 659 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%����������������3�glutInitContextProfile��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������>������������[���_glutInitContextProfile@4�__imp__glutInitContextProfile@4�__head_release_libfreeglut_a� ddlds00050.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������2�glutInitContextFlags������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutInitContextFlags@4�__imp__glutInitContextFlags@4�__head_release_libfreeglut_a� ddlds00049.o/ 1264195962 500 500 100664 615 ` L�����t�� �����.text��������������,��L��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��V�����������0À.idata$5�����������8��`�����������0À.idata$4�����������<��j�����������0À.idata$6�������� ���@���������������� Àÿ%����������������1�glutInit������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������"������������?���_glutInit@8�__imp__glutInit@8�__head_release_libfreeglut_a� ddlds00048.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������0�glutIgnoreKeyRepeat�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���_glutIgnoreKeyRepeat@4�__imp__glutIgnoreKeyRepeat@4�__head_release_libfreeglut_a� ddlds00047.o/ 1264195962 500 500 100664 627 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������/�glutIdleFunc������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������*������������G���_glutIdleFunc@4�__imp__glutIdleFunc@4�__head_release_libfreeglut_a� ddlds00046.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������.�glutIconifyWindow������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutIconifyWindow@0�__imp__glutIconifyWindow@0�__head_release_libfreeglut_a� ddlds00045.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������-�glutHideWindow��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutHideWindow@0�__imp__glutHideWindow@0�__head_release_libfreeglut_a� ddlds00044.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������,�glutHideOverlay�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutHideOverlay@0�__imp__glutHideOverlay@0�__head_release_libfreeglut_a� ddlds00043.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������+�glutGetWindowData������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutGetWindowData@0�__imp__glutGetWindowData@0�__head_release_libfreeglut_a� ddlds00042.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������*�glutGetWindow������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutGetWindow@0�__imp__glutGetWindow@0�__head_release_libfreeglut_a� ddlds00041.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������)�glutGetProcAddress��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutGetProcAddress@4�__imp__glutGetProcAddress@4�__head_release_libfreeglut_a� ddlds00040.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������(�glutGetModifiers������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutGetModifiers@0�__imp__glutGetModifiers@0�__head_release_libfreeglut_a� ddlds00039.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������'�glutGetModeValues������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutGetModeValues@8�__imp__glutGetModeValues@8�__head_release_libfreeglut_a� ddlds00038.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������&�glutGetMenuData�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutGetMenuData@0�__imp__glutGetMenuData@0�__head_release_libfreeglut_a� ddlds00037.o/ 1264195962 500 500 100664 625 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������%�glutGetMenu�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������(������������E���_glutGetMenu@0�__imp__glutGetMenu@0�__head_release_libfreeglut_a� ddlds00036.o/ 1264195962 500 500 100664 627 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%����������������$�glutGetColor������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������*������������G���_glutGetColor@8�__imp__glutGetColor@8�__head_release_libfreeglut_a� ddlds00035.o/ 1264195962 500 500 100664 613 ` L�����t�� �����.text��������������,��L��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��V�����������0À.idata$5�����������8��`�����������0À.idata$4�����������<��j�����������0À.idata$6�������� ���@���������������� Àÿ%����������������#�glutGet�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������ ������������=���_glutGet@4�__imp__glutGet@4�__head_release_libfreeglut_a� ddlds00034.o/ 1264195962 500 500 100664 647 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%����������������"�glutGameModeString��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������6������������S���_glutGameModeString@4�__imp__glutGameModeString@4�__head_release_libfreeglut_a� ddlds00033.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%����������������!�glutGameModeGet�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutGameModeGet@4�__imp__glutGameModeGet@4�__head_release_libfreeglut_a� ddlds00032.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%���������������� �glutFullScreenToggle������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutFullScreenToggle@0�__imp__glutFullScreenToggle@0�__head_release_libfreeglut_a� ddlds00031.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutFullScreen��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutFullScreen@0�__imp__glutFullScreen@0�__head_release_libfreeglut_a� ddlds00030.o/ 1264195962 500 500 100664 653 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutForceJoystickFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������<������������Y���_glutForceJoystickFunc@0�__imp__glutForceJoystickFunc@0�__head_release_libfreeglut_a� ddlds00029.o/ 1264195962 500 500 100664 659 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutExtensionSupported��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������>������������[���_glutExtensionSupported@4�__imp__glutExtensionSupported@4�__head_release_libfreeglut_a� ddlds00028.o/ 1264195962 500 500 100664 615 ` L�����t�� �����.text��������������,��L��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��V�����������0À.idata$5�����������8��`�����������0À.idata$4�����������<��j�����������0À.idata$6�������� ���@���������������� Àÿ%�����������������glutExit������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������"������������?���_glutExit@0�__imp__glutExit@0�__head_release_libfreeglut_a� ddlds00027.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutEstablishOverlay������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutEstablishOverlay@0�__imp__glutEstablishOverlay@0�__head_release_libfreeglut_a� ddlds00026.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutEntryFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutEntryFunc@4�__imp__glutEntryFunc@4�__head_release_libfreeglut_a� ddlds00025.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutEnterGameMode������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutEnterGameMode@0�__imp__glutEnterGameMode@0�__head_release_libfreeglut_a� ddlds00024.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutDisplayFunc�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutDisplayFunc@4�__imp__glutDisplayFunc@4�__head_release_libfreeglut_a� ddlds00023.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutDialsFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutDialsFunc@4�__imp__glutDialsFunc@4�__head_release_libfreeglut_a� ddlds00022.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutDeviceGet������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutDeviceGet@4�__imp__glutDeviceGet@4�__head_release_libfreeglut_a� ddlds00021.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutDetachMenu��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutDetachMenu@4�__imp__glutDetachMenu@4�__head_release_libfreeglut_a� ddlds00020.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutDestroyWindow������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutDestroyWindow@4�__imp__glutDestroyWindow@4�__head_release_libfreeglut_a� ddlds00019.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutDestroyMenu�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutDestroyMenu@4�__imp__glutDestroyMenu@4�__head_release_libfreeglut_a� ddlds00018.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutCreateWindow������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutCreateWindow@4�__imp__glutCreateWindow@4�__head_release_libfreeglut_a� ddlds00017.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutCreateSubWindow�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutCreateSubWindow@20�__imp__glutCreateSubWindow@20�__head_release_libfreeglut_a� ddlds00016.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutCreateMenu��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutCreateMenu@4�__imp__glutCreateMenu@4�__head_release_libfreeglut_a� ddlds00015.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutCopyColormap������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutCopyColormap@4�__imp__glutCopyColormap@4�__head_release_libfreeglut_a� ddlds00014.o/ 1264195962 500 500 100664 629 ` L�����x�� �����.text��������������,��P��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��Z�����������0À.idata$5�����������8��d�����������0À.idata$4�����������<��n�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutCloseFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������,������������I���_glutCloseFunc@4�__imp__glutCloseFunc@4�__head_release_libfreeglut_a� ddlds00013.o/ 1264195962 500 500 100664 651 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%���������������� �glutChangeToSubMenu�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������:������������W���_glutChangeToSubMenu@12�__imp__glutChangeToSubMenu@12�__head_release_libfreeglut_a� ddlds00012.o/ 1264195962 500 500 100664 655 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%���������������� �glutChangeToMenuEntry������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������>������������[���_glutChangeToMenuEntry@12�__imp__glutChangeToMenuEntry@12�__head_release_libfreeglut_a� ddlds00011.o/ 1264195962 500 500 100664 641 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%���������������� �glutButtonBoxFunc������������ ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������4������������Q���_glutButtonBoxFunc@4�__imp__glutButtonBoxFunc@4�__head_release_libfreeglut_a� ddlds00010.o/ 1264195962 500 500 100664 637 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%���������������� �glutBitmapWidth�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������0������������M���_glutBitmapWidth@8�__imp__glutBitmapWidth@8�__head_release_libfreeglut_a� ddlds00009.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%���������������� �glutBitmapString������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutBitmapString@8�__imp__glutBitmapString@8�__head_release_libfreeglut_a� ddlds00008.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutBitmapLength������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutBitmapLength@8�__imp__glutBitmapLength@8�__head_release_libfreeglut_a� ddlds00007.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutBitmapHeight������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutBitmapHeight@4�__imp__glutBitmapHeight@4�__head_release_libfreeglut_a� ddlds00006.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutBitmapCharacter�������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���_glutBitmapCharacter@8�__imp__glutBitmapCharacter@8�__head_release_libfreeglut_a� ddlds00005.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutAttachMenu��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutAttachMenu@4�__imp__glutAttachMenu@4�__head_release_libfreeglut_a� ddlds00004.o/ 1264195962 500 500 100664 635 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutAddSubMenu��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������.������������K���_glutAddSubMenu@8�__imp__glutAddSubMenu@8�__head_release_libfreeglut_a� ddlds00003.o/ 1264195962 500 500 100664 639 ` L�����|�� �����.text��������������,��T��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��^�����������0À.idata$5�����������8��h�����������0À.idata$4�����������<��r�����������0À.idata$6�����������@���������������� Àÿ%�����������������glutAddMenuEntry������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������2������������O���_glutAddMenuEntry@8�__imp__glutAddMenuEntry@8�__head_release_libfreeglut_a� ddlds00002.o/ 1264195962 500 500 100664 649 ` L�����€�� �����.text��������������,��X��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��b�����������0À.idata$5�����������8��l�����������0À.idata$4�����������<��v�����������0À.idata$6�����������@���������������� Àÿ%�����������������__glutInitWithExit��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6������������������������������������������8������������U���___glutInitWithExit@12�__imp____glutInitWithExit@12�__head_release_libfreeglut_a� ddlds00001.o/ 1264195962 500 500 100664 671 ` L�����ˆ�� �����.text��������������,��`��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��j�����������0À.idata$5�����������8��t�����������0À.idata$4�����������<��~�����������0À.idata$6�����������@���������������� Àÿ%�����������������__glutCreateWindowWithExit��������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6���������������������������"���������������F������������c���___glutCreateWindowWithExit@8�__imp____glutCreateWindowWithExit@8�__head_release_libfreeglut_a� ddlds00000.o/ 1264195962 500 500 100664 663 ` L�����„�� �����.text��������������,��\��������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.idata$7�����������4��f�����������0À.idata$5�����������8��p�����������0À.idata$4�����������<��z�����������0À.idata$6�����������@���������������� Àÿ%������������������__glutCreateMenuWithExit������������� ��������������������.text�����������.data�����������.bss������������.idata$7��������.idata$5��������.idata$4��������.idata$6��������������������������� ���������������B������������_���___glutCreateMenuWithExit@8�__imp____glutCreateMenuWithExit@8�__head_release_libfreeglut_a� Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/lib/libfreeglut_static.a�������������������������������������0000644�0000764�0000764�00001245102�11533026402�022517� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������!<arch> / 1264195966 0 0 0 4994 ` ���Û��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��–��0Â��0Â��0Â��A��A��A��Hx��Hx��“P��“P��“P��“P��“P��“P��“P��“P��“P��“P��§F��§F��§F��§F��§F��§F��§F�Ìð�Ìð�Ìð�Ìð�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�Ü>�S|�S|�S|�S|�S|�S|�S|�S|�S|�S|�S|�S|�S|�S|�v´�v´�v´�„º�„º�„º�„º�„º�„º�„º�„º�„º�„º�„º�„º�„º�„º�„º�„º�„º� Ú� Ú� Ú� Ú� Ú� Ú� Ú� Ú�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�Õv�þ0�þ0�þ0�þ0�þ0�þ0�þ0�þ0� Ê� Ê� Ê� Ê� Ê� Ê� Ê� º� º� º� º� º� º�#H�ƒl�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�ãh�úf�úf�f�f�f�f�f�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�ø�Fú�Fú�Fú�Fú�Fú_glutTabletButtonFunc�_glutTabletMotionFunc�_glutDialsFunc�_glutButtonBoxFunc�_glutWindowStatusFunc�_glutOverlayDisplayFunc�_glutMenuStatusFunc�_glutMenuStateFunc�_glutMenuDestroyFunc�_glutCloseFunc�_glutWMCloseFunc�_glutEntryFunc�_glutPassiveMotionFunc�_glutMotionFunc�_glutMouseWheelFunc�_glutMouseFunc�_glutSpecialUpFunc�_glutKeyboardUpFunc�_glutVisibilityFunc�_glutIdleFunc�_glutSpecialFunc�_glutKeyboardFunc�_glutReshapeFunc�_glutDisplayFunc�_glutSpaceballButtonFunc�_glutSpaceballRotateFunc�_glutSpaceballMotionFunc�_glutJoystickFunc�_glutTimerFunc�_glutWarpPointer�_fgSetCursor�_glutSetCursor�_glutPostRedisplay�_glutPostWindowRedisplay�_glutSwapBuffers�_fghGetProcAddress�_glutGetProcAddress�_glutStrokeHeight�_glutStrokeLength�_glutStrokeWidth�_glutBitmapHeight�_glutBitmapLength�_glutBitmapWidth�_glutStrokeString�_glutStrokeCharacter�_glutBitmapString�_glutBitmapCharacter�_fgFontFixed8x13�_fgFontFixed9x15�_fgFontHelvetica10�_fgFontHelvetica12�_fgFontHelvetica18�_fgFontTimesRoman10�_fgFontTimesRoman24�_glutGameModeGet�_glutLeaveGameMode�_glutEnterGameMode�_glutGameModeString�_glutSolidSierpinskiSponge�_glutWireSierpinskiSponge�_glutSolidOctahedron�_glutWireOctahedron�_glutSolidDodecahedron�_glutWireDodecahedron�_glutSolidCube�_glutWireCube�_glutSolidRhombicDodecahedron�_glutWireRhombicDodecahedron�_glutSolidIcosahedron�_glutWireIcosahedron�_glutSolidTetrahedron�_glutWireTetrahedron�_glutWireCylinder�_glutSolidCylinder�_glutWireSphere�_glutSolidSphere�_glutSolidTorus�_glutWireTorus�_glutWireCone�_glutSolidCone�_glutInitWindowPosition�_glutInitWindowSize�_glutInitDisplayMode�_glutInitContextVersion�_glutInitContextFlags�_glutInitContextProfile�_glutInitDisplayString�_fgDeinitialize�_glutExit�_glutInit�___glutInitWithExit�_fgState�_fgDisplay�___glutExitFunc�_fgInputDeviceClose�_fgInitialiseInputDevices�_fgInputDeviceDetect�_glutJoystickSetSaturation�_glutJoystickGetSaturation�_glutJoystickSetDeadBand�_glutJoystickGetDeadBand�_glutJoystickNotWorking�_glutJoystickGetNumButtons�_glutJoystickGetNumAxes�_glutJoystickGetCenter�_glutJoystickGetMaxRange�_glutJoystickGetMinRange�_glutJoystickSetCenter�_glutJoystickSetMaxRange�_glutJoystickSetMinRange�_fgJoystickPollWindow�_fgJoystickClose�_fgInitialiseJoysticks�_fgJoystickDetect�_fgWarning�_fgError�_fgWindowProc@16�_glutLeaveMainLoop�_fgSystemTime�_fgElapsedTime�_glutMainLoopEvent�_glutMainLoop�_glutSetMenuData�_glutGetMenuData�_glutDetachMenu�_glutAttachMenu�_glutGetMenu�_glutSetMenu�_glutDestroyMenu�_glutCreateMenu�___glutCreateMenuWithExit�_fghCalculateMenuBoxSize�_glutRemoveMenuItem�_glutChangeToSubMenu�_glutChangeToMenuEntry�_glutAddSubMenu�_glutAddMenuEntry�_fgDeactivateMenu�_fgUpdateMenuHighlight�_fgCheckActiveMenu�_fgDisplayMenu�_glutCopyColormap�_glutGetColor�_glutSetColor�_glutSetKeyRepeat�_glutIgnoreKeyRepeat�_glutForceJoystickFunc�_glutReportErrors�_glutExtensionSupported�_glutEstablishOverlay�_glutRemoveOverlay�_glutUseLayer�_glutPostOverlayRedisplay�_glutPostWindowOverlayRedisplay�_glutShowOverlay�_glutHideOverlay�_glutGetModeValues�_glutLayerGet�_glutGetModifiers�_glutSetOption�_glutDeviceGet�_glutGet�_fgStrokeMonoRoman�_fgStrokeRoman�_fgCreateStructure�_fgMenuByID�_fgListInit�_fgListAppend�_fgListRemove�_fgListLength�_fgListInsert�_fgEnumSubWindows�_fgEnumWindows�_fgWindowByID�_fgWindowByHandle�_fgDestroyWindow�_fgDestroyMenu�_fgCloseWindows�_fgDestroyStructure�_fgAddToWindowDestroyList�_fgCreateWindow�_fgCreateMenu�_fgStructure�_glutSolidTeapot�_glutWireTeapot�_glutVideoResizeGet�_glutSetupVideoResizing�_glutStopVideoResizing�_glutVideoResize�_glutVideoPan�_glutGetWindow�_glutSetWindowData�_glutGetWindowData�_glutFullScreen�_glutFullScreenToggle�_glutReshapeWindow�_glutPopWindow�_glutPushWindow�_glutPositionWindow�_glutSetIconTitle�_glutSetWindowTitle�_glutIconifyWindow�_glutHideWindow�_glutShowWindow�_glutDestroyWindow�_glutCreateSubWindow�_glutCreateWindow�___glutCreateWindowWithExit�_fgCloseWindow�_fgSetWindow�_glutSetWindow�_fgOpenWindow�_fgSetupPixelFormat�_fgNewWGLCreateContext�_fgInitialiseSpaceball�_fgSpaceballClose�_fgSpaceballSetWindow�_fgSpaceballNumButtons�_fgHasSpaceball��// 404 ` freeglut_callbacks.o/ freeglut_cursor.o/ freeglut_display.o/ freeglut_font_data.o/ freeglut_gamemode.o/ freeglut_geometry.o/ freeglut_glutfont_definitions.o/ freeglut_input_devices.o/ freeglut_joystick.o/ freeglut_overlay.o/ freeglut_state.o/ freeglut_stroke_mono_roman.o/ freeglut_stroke_roman.o/ freeglut_structure.o/ freeglut_teapot.o/ freeglut_videoresize.o/ freeglut_window.o/ freeglut_spaceball.o/ /0 1264195962 500 500 100664 6896 ` L�����”��3�����.text�����������ð ��´���ð ������ª��� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������L��¤ ��������������@�0@U‰åSƒì‹]€=����t¡���…Àt9˜¤���t‰˜¤���ƒÄ[]ÃÇD$����Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9˜ ���t‰˜ ���ƒÄ[]ÃÇD$X���Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9˜˜���t‰˜˜���ƒÄ[]ÃÇD$m���Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9˜œ���t‰˜œ���ƒÄ[]ÃÇD${���Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9Xxt‰XxƒÄ[]ö����ÇD$���Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9˜ˆ���t‰˜ˆ���ƒÄ[]ÃÇD$¢���Ç$���è����ëÍv�¼'����U‰åƒì€=����uÇD$¹���Ç$���è����‹E£\���ÉÃv�U‰åƒì€=����uÇD$Ì���Ç$���è����‹E£X���ÉÃv�U‰åƒì€=����t¡���…Àt‹U‰PÉÃÇD$Þ���Ç$���è����ëÙv�¼'����U‰åSƒì‹]€=����t¡���…Àt9˜€���t‰˜€���ƒÄ[]ÃÇD$ò���Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����uÇD$���Ç$���è����‰]ƒÄ[]é|ÿÿÿ¶����¿����U‰åSƒì‹]€=����t¡���…Àt9Xpt‰XpƒÄ[]ö����ÇD$��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9Xlt‰XlƒÄ[]ö����ÇD$��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9Xht‰XhƒÄ[]ö����ÇD$4��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9Xdt‰XdƒÄ[]ö����ÇD$C��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9X`t‰X`ƒÄ[]ö����ÇD$V��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9X\t‰X\ƒÄ[]ö����ÇD$d��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9XTt‰XTƒÄ[]ö����ÇD$v��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t-¡���…ÀtA9Xtt‰Xt…Ût;ÇE ��ƒÄ[]éÇûÿÿ´&����ÇD$‰��Ç$���è����¡���…Àu¿ƒÄ[]ÃÇE����ƒÄ[]éŒûÿÿ¶����¿����U‰åƒì€=����uÇD$œ��Ç$���è����‹E£P���ÉÃv�U‰åSƒì‹]€=����t¡���…Àt9XXt‰XXƒÄ[]ö����ÇD$©��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9XPt‰XPƒÄ[]ö����ÇD$¹��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t¡���…Àt9XLt‰XLƒÄ[]ö����ÇD$Ê��Ç$���è����ëÍv�¼'����U‰åSƒì‹]€=����t…Ût/¡���…Àt9XHt‰XHƒÄ[]ÃfÇD$Ú��Ç$���è����ëÍÇ$ì��è����ëö����¿����U‰åSƒì‹]€=����t"è����¡���…Àt9˜”���t‰˜”���ƒÄ[]ÃÇD$I��Ç$���è����ëÈt&�U‰åSƒì‹]€=����t"è����¡���…Àt9˜���t‰˜���ƒÄ[]ÃÇD$a��Ç$���è����ëÈt&�U‰åSƒì‹]€=����t"è����¡���…Àt9˜Œ���t‰˜Œ���ƒÄ[]ÃÇD$y��Ç$���è����ëÈt&�U‰åSƒì‹]€=����t=è����¡���…Àt(9X|t‰X|‹U ‰P4è����‹ ���+A4‰ÂÁú÷Ò!‰Q8ƒÄ[]ÃÇD$‘��Ç$���è����ë­v�¼'����U‰åƒì€=����‰uü‹u‰]øtH¡���…Àt2‹Xt…Ût+‰$è����ƒþ”À…ö‹uü” Ѓð¶À‰E‰Ø‹]ø‰ì]ÿà‹]ø‹uü‰ì]Ãv�ÇD$¢��Ç$¸��è����ë¢v�¼'����U‰åWVSƒì,‹E €=����‹u‹}‰Eätb‹L���…Ûtv‰\$Ç$H���è����‹Eä‰{‰C è����‹@���…Ò40‰suë ‹…Òt;r}õ‰]‰U ÇE@���ƒÄ,[^_]é����t&�ÇD$��Ç$���è����‹L���…ÛuŠÇ$���è����…À‰ÃuˆÇ$��è����éwÿÿÿglutTabletButtonFunc���� ERROR: Function <%s> called without first calling 'glutInit'.�glutTabletMotionFunc�glutDialsFunc�glutButtonBoxFunc�glutWindowStatusFunc�glutOverlayDisplayFunc�glutMenuStatusFunc�glutMenuStateFunc�glutMenuDestroyFunc�glutCloseFunc�glutWMCloseFunc�glutEntryFunc�glutPassiveMotionFunc�glutMotionFunc�glutMouseWheelFunc�glutMouseFunc�glutSpecialUpFunc�glutKeyboardUpFunc�glutVisibilityFunc�glutIdleFunc�glutSpecialFunc�glutKeyboardFunc�glutReshapeFunc�glutDisplayFunc���Fatal error in program. NULL display callback not permitted in GLUT 3.0+ or freeglut 2.0.1+�glutSpaceballButtonFunc�glutSpaceballRotateFunc�glutSpaceballMotionFunc�glutJoystickFunc�Visibility Callback��� ERROR: Internal <%s> function called without first calling 'glutInit'.�glutTimerFunc��Fatal error: Memory allocation failure in glutTimerFunc()��� ���)�������*����4���'����;���'����@���2����\���)����d���*����„���'����‹���'�������2����¬���)����´���*����Ô���'����Û���'����à���2����ü���)������*����$��'����+��'����0��2����L��)����T��*����t��'����{��'����€��2����œ��)����¤��*����Ä��'����Ë��'����Ð��2����è��)����ó��'����ú��'����ÿ��2������)������)����#��'����*��'����/��2����7��)����H��)����P��*����d��'����k��'����p��2����Œ��)����”��*����´��'����»��'����À��2����Ü��)����ç��'����î��'����ó��2������)����$��*����D��'����K��'����P��2����l��)����t��*����”��'����›��'���� ��2����¼��)����Ä��*����ä��'����ë��'����ð��2���� ��)������*����4��'����;��'����@��2����\��)����d��*����„��'����‹��'������2����¬��)����´��*����Ô��'����Û��'����à��2����ü��)������*����$��'����+��'����0��2����L��)����T��*����k��!����„��'����‹��'������2����•��*����È��)����Ó��'����Ú��'����ß��2����ç��)����ü��)������*����$��'����+��'����0��2����L��)����T��*����t��'����{��'����€��2����œ��)����¤��*����Ä��'����Ë��'����Ð��2����ì��)����ø��*������'������'���� ��2����)��'����.��2����L��)����T��+����Y��*����y��'����€��'����…��2����œ��)����¤��+����©��*����É��'����Ð��'����Õ��2����ì��)����ô��+����ù��*������'���� ��'����%��2����<��)����D��,����I��*����`��/����f��*����„��'����‹��'������2����¨��)����¹��*����Ì��-���� ��'���� ��'���� ��2����. ��)����@ ��)����O ��)����T ��.����b ��/����h ��)����Œ ��)����¤ ��'����« ��'����° ��2����¶ ��)����Æ ��1����Ó ��'����Ø ��2����˜ ��0����.file�������þÿ��g����������������������������� �����������������������/���P���� ������E��� ���� ������T���ð���� ������g���@��� ������}������ ������•���à��� ������©������ ������¼���@��� ������Ñ���€��� ������à���Ð��� ������ñ������ ���������`��� ��������°��� ������'������ ������;��P��� ������J�� ��� ������]��ð��� ������q��@��� ������…��À��� ������“��ð��� ������¤��@��� ������¶����� ������Ç��à��� ������Ø��@��� ������ñ����� ������ ��à��� ������#��0��� ������5�� ��� ������D�� ��� ��.text����������á ��ª�������������.data����������������������������.bss�����������������������������.rdata���������J����������������_fgState�������������S���������������`�������� ������w�������� ������Ž�������� ������›�������� ������©�������� ������¸�������� ��_malloc������� ��_fgError������ ��Æ��freeglut_callbacks.c�_glutTabletButtonFunc�_glutTabletMotionFunc�_glutDialsFunc�_glutButtonBoxFunc�_glutWindowStatusFunc�_glutOverlayDisplayFunc�_glutMenuStatusFunc�_glutMenuStateFunc�_glutMenuDestroyFunc�_glutCloseFunc�_glutWMCloseFunc�_glutEntryFunc�_glutPassiveMotionFunc�_glutMotionFunc�_glutMouseWheelFunc�_glutMouseFunc�_glutSpecialUpFunc�_glutKeyboardUpFunc�_glutVisibilityFunc�_glutIdleFunc�_glutSpecialFunc�_glutKeyboardFunc�_glutReshapeFunc�_glutDisplayFunc�_glutSpaceballButtonFunc�_glutSpaceballRotateFunc�_glutSpaceballMotionFunc�_glutJoystickFunc�_fghVisibility�_glutTimerFunc�_fgStructure�_fgInitialiseSpaceball�_fgInitialiseJoysticks�_fgSetWindow�_fgListRemove�_fgElapsedTime�_fgListInsert�/22 1264195962 500 500 100664 4116 ` L�����ú �������.text�����������€��´���ˆ������>��� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������T��4��ô ������g���@�0@U‰åƒì(€=����tA¡���…ÀtU‹U‰Uð‹U ‰UôUð‰T$‹@ ‰$è����‹Eôƒì‰D$‹Eð‰$è����ƒìÉÃÇD$����Ç$���è����¡���…Àu«ÇD$����Ç$P���è����¡���ë´&����U‰åVSƒì‹] ‹uƒûfv‰\$Ç$Ž���è����‰^0eø[^]Ãv�ÿ$¨���ÇD$���Ç$����è����ƒì‰$è����ƒìÇD$���Ç$����è����ƒì‰D$ÇD$ôÿÿÿ‹F ‰$è����‰^0ƒì eø[^]ÃÇD$��Ç$����è����ƒì‰$è����ƒìÇD$��Ç$����è����ƒì‰D$ë¡ÇD$‹��Ç$����è����ƒì‰$è����ƒìÇD$‹��Ç$����è����ƒì‰D$é_ÿÿÿÇD$ƒ��Ç$����è����ƒì‰$è����ƒìÇD$ƒ��Ç$����è����ƒì‰D$éÿÿÿÇD$‚��Ç$����è����ƒì‰$è����ƒìÇD$‚��Ç$����è����ƒì‰D$éÛþÿÿ´&����ÇD$���Ç$����è����ƒì‰$è����ƒìÇD$���Ç$����è����ƒì‰D$é’þÿÿÇ$����è����ƒìÇD$����évþÿÿfÇD$†��Ç$����è����ƒì‰$è����ƒìÇD$†��Ç$����è����ƒì‰D$é2þÿÿÇD$��Ç$����è����ƒì‰$è����ƒìÇD$��éYÿÿÿÇD$��Ç$����è����ƒì‰$è����ƒìÇD$��Ç$����è����ƒì‰D$éÁýÿÿÇD$„��Ç$����è����ƒì‰$è����ƒìÇD$„��Ç$����è����ƒì‰D$éýÿÿÇD$…��Ç$����è����ƒì‰$è����ƒìÇD$…��Ç$����è����ƒì‰D$é=ýÿÿÇD$��Ç$����è����ƒì‰$è����ƒìÇD$��Ç$����è����ƒì‰D$éûüÿÿ´&����U‰åƒì€=����t!¡���…Àt5‹U‰$‰T$èYüÿÿÉô&����ÇD$D��Ç$���è����¡���…ÀuËÇD$D��Ç$P���è����¡���ë°glutWarpPointer� ERROR: Function <%s> called without first calling 'glutInit'.� ERROR: Function <%s> called with no current window defined.�Unknown cursor type: %d���0��0��c��$��c����$����Ç��$��…��C��Ç���Ç���Ç���Ç���ç��¥��ç��¥��£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���£���Ç���r��Ò��glutSetCursor�����������������2�������G�������T��� ����[��� ����`�������e�������q��� ����x��� ����}�������‚�������ª��� ����¯�������Ã��� ����×�������â�������ù�������������4������?������V������s������~������•������µ������À������×������÷������������������@������K������b������z������ ������«������Â������â������í������������������3������S������^������u������•������ ������·������×������â������ù������������ ������D�� ����K�� ����P������U������a�� ����h�� ����m������r������¨�������¬�������°�������´�������¸�������¼�������À�������Ä�������È�������Ì�������Ð�������Ô�������Ø�������Ü�������à�������ä�������è�������ì�������ð�������ô�������ø�������ü�������������������������� ������������������������������ ������$������(������,������0������4������8������<������@������D������H������L������P������T������X������\������`������d������h������l������p������t������x������|������€������„������ˆ������Œ������������”������˜������œ������ ������¤������¨������¬������°������´������¸������¼������À������Ä������È������Ì������Ð������Ô������Ø������Ü������à������ä������è������ì������ð������ô������ø������ü������������������������� ������������������������������ ������$������(������,������0������4������8������<������@������.file�������þÿ��gfreeglut_cursor.c������������� ������������������������������ ������"������ ��.text����������x��>�������������.data����������������������������.bss�����������������������������.rdata���������R��g�������������_fgState�������������1����������������>��������� ������P��������� ������`��������� ������r��������� ��������������� ��_fgError������ ��Ž���_glutWarpPointer�_fgSetCursor�_glutSetCursor�_fgStructure�_ClientToScreen@8�_SetCursorPos@8�_SetClassLongA@12�_SetCursor@4�_LoadCursorA@8�/41 1264195962 500 500 100664 1834 ` L����� �������.text�����������à��´���„������'��� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������ð���”��������������@�0@U‰åƒì€=����t¡���…Àt%Æ@,ÉÃfÇD$����Ç$���è����¡���…ÀuÛÇD$����Ç$T���è����¡���Æ@,ÉÃt&�U‰åƒì€=����t‹E‰$è����…ÀtÆ@,ÉÃÇD$’���Ç$���è����ëÕ¶����U‰åƒìH€=����‰]ô‰uø‰}ü„Ô���‹ ���…É„æ���è����¡���‹P…Òu ‹]ô‹uø‹}ü‰ì]Ë@‰$è����¡0���ƒì…ÀtÜÇ$¼��è����‹4���ƒÂ‰4���‰Ã¡8���…À„§���‰Ù)Á; 0���v¦1ÿ¡����‰}ä1ÿ‰MàßmàØ ì���ƒÀ@‰Uà‰}ä‰T$ÇD$¼���‰$ßmàØñÝ\$Ý\$ è����‰8���Ç4�������éOÿÿÿt&�ÇD$ª���Ç$���è����éÿÿÿ´&����ÇD$ª���Ç$T���è����éÿÿÿ´&����‰8���é�ÿÿÿglutPostRedisplay��� ERROR: Function <%s> called without first calling 'glutInit'.� ERROR: Function <%s> called with no current window defined.�glutPostWindowRedisplay�glutSwapBuffers���freeglut: %d frames in %.2f seconds = %.2f FPS �oƒ:��������������$��� ����+��� ����0�������5�������A��� ����H��� ����M�������R�������h�������v�������ˆ��� ������� ����”�������¨�������¾�������Ë�������Ð�������ï�������ô������������� ������������������/������8������I�� ����^�� ����s������y������������”�� ����›�� ���� ������´�� ����»�� ����À������Ò������.file�������þÿ��gfreeglut_display.c������������ ��������������������������`���� ������0��� ���� ��.text����������Û��'�������������.data����������������������������.bss�����������������������������.rdata���������ð�����������������_fgState�������������A����������������N����������������Z��������� ������h��������� ������s��������� ��_glutGet������ ��_fprintf������ ��_fgError������ ��‚���_glutPostRedisplay�_glutPostWindowRedisplay�_glutSwapBuffers�_fgStructure�__imp___iob�_fgWindowByID�_glFlush@0�_SwapBuffers@4�freeglut_ext.o/ 1264195963 500 500 100664 19100 ` L�����2��¯�����.text�����������à��´���ð������Ð�� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������\ ��”��������������@�0@U‰åƒì‹EÇD$����‰$è����ÉÃt&�U‰åƒì‹EÇD$����‰$è����ÉÃt&�U‰åƒì‹E ÇD$����‰D$‹E‰$è����Éô&����¼'����U‰åƒì‹E‰$è����ƒìÉÃv�¼'����U‰åƒì(€=����‰]ô‹]‰uø‰}ü„ñ��¿T���¹���‰Þó¦…��¹ ���¿Y���‰Þ¸@���ó¦—Á’Â8Ñ„¬��¹���¿b���‰Þ¸����ó¦—Á’Â8Ñ„‹��¹���¿v���‰Þ¸����ó¦—Á’Â8Ñ„j��¹���¿Œ���‰Þ¸����ó¦—Á’Â8Ñ„I��¹���¿£���‰Þ¸����ó¦—Á’Â8Ñ„(��¹ ���¿¶���‰Þ¸����ó¦—Á’Â8Ñ„��¹ ���¿Ã���‰Þ¸����ó¦—Á’Â8Ñ„æ��¹���¿Ì���‰Þ¸ ���ó¦—Á’Â8Ñ„Å��¹���¿Ý���‰Þ¸����ó¦—Á’Â8Ñ„¤��¹���¿ñ���‰Þ¸����ó¦—Á’Â8Ñ„ƒ��¹���¿��‰Þ¸����ó¦—Á’Â8Ñ„b��¹���¿��‰Þ¸����ó¦—Á’Â8Ñ„A��¹���¿-��‰Þ¸����ó¦—Á’Â8Ñ„ ��¹���¿=��‰Þ¸����ó¦—Á’Â8Ñ„ÿ��ÇD$K��‰$è����‰Â¸����…Ò„à��ÇD$Y��‰$è����‰Â¸����…Ò„Á��ÇD$l��‰$è����‰Â¸����…Ò„¢��ÇD$}��‰$è����‰Â¸����…Ò„ƒ��ÇD$��‰$è����‰Â¸����…Ò„d��ÇD$¢��‰$è����‰Â¸����…Ò„E��ÇD$°��‰$è����‰Â¸����…Ò„&��ÇD$¿��‰$è����‰Â¸����…Ò„��ÇD$Ñ��‰$è����‰Â¸����…Ò„è��ÇD$à��‰$è����‰Â¸����…Ò„É��ÇD$ï��‰$è����‰Â¸����…Ò„ª��ÇD$þ��‰$è����‰Â¸����…Ò„‹��ÇD$ ��‰$è����‰Â¸����…Ò„l��ÇD$��‰$è����‰Â¸����…Ò„M��ÇD$1��‰$è����‰Â¸����…Ò„.��ÇD$C��‰$è����‰Â¸����…Ò„��ÇD$P��‰$è����‰Â¸����…Ò„ð��ÇD$l��‰$è����‰Â¸����…Ò„Ñ��ÇD$‹��‰$è����‰Â¸����…Ò„²��ÇD$›��‰$è����‰Â¸����…Ò„“��ÇD$«��‰$è����‰Â¸����…Ò„t��ÇD$º��‰$è����‰Â¸����…Ò„U��ÇD$Ê��‰$è����‰Â¸����…Ò„6��ÇD$Ö��‰$è����‰Â¸����…Ò„��ÇD$â��‰$è����‰Â¸����…Ò„ø ��ÇD$ó��‰$è����‰Â¸����…Ò„Ù ��ÇD$��‰$è����‰Â¸����…Ò„º ��ÇD$��‰$è����‰Â¸����…Ò„› ��ÇD$,��‰$è����‰Â¸����…Ò„| ��ÇD$?��‰$è����‰Â¸����…Ò„] ��ÇD$N��‰$è����‰Â¸����…Ò„> ��ÇD$]��‰$è����‰Â¸����…Ò„ ��ÇD$m��‰$è����‰Â¸����…Ò„� ��ÇD$}��‰$è����‰Â¸����…Ò„á ��ÇD$Ž��‰$è����‰Â¸����…Ò„ ��ÇD$œ��‰$è����‰Â¸����…Ò„£ ��ÇD$«��‰$è����‰Â¸����…Ò„„ ��ÇD$Á��‰$è����‰Â¸����…Ò„e ��ÇD$Ï��‰$è����‰Â¸����…Ò„F ��ÇD$â��‰$è����‰Â¸����…Ò„' ��ÇD$ï��‰$è����‰Â¸����…Ò„ ��ÇD$ý��‰$è����‰Â¸����…Ò„é ��ÇD$��‰$è����‰Â¸����…Ò„Ê ��ÇD$��‰$è����‰Â¸����…Ò„« ��ÇD$7��‰$è����‰Â¸����…Ò„Œ ��ÇD$O��‰$è����‰Â¸����…Ò„m ��ÇD$g��‰$è����‰Â¸����…Ò„N ��ÇD$y��‰$è����‰Â¸����…Ò„/ ��ÇD$‡��‰$è����‰Â¸����…Ò„ ��ÇD$œ��‰$è����‰Â¸����…Ò„ñ ��ÇD$±��‰$è����‰Â¸����…Ò„Ò ��ÇD$Ä��‰$è����‰Â¸����…Ò„³ ��ÇD$Û��‰$è����‰Â¸����…Ò„” ��ÇD$ð��‰$è����‰Â¸����…Ò„u ��ÇD$��‰$è����‰Â¸����…Ò„V ��ÇD$��‰$è����‰Â¸����…Ò„7 ��ÇD$&��‰$è����‰Â¸����…Ò„ ��ÇD$3��‰$è����‰Â¸����…Ò„ù ��ÇD$@��‰$è����‰Â¸����…Ò„Ú ��ÇD$Q��‰$è����‰Â¸����…Ò„» ��ÇD$Y��‰$è����‰Â¸����…Ò„œ ��ÇD$g��‰$è����‰Â¸����…Ò„} ��ÇD$~��‰$è����‰Â¸����…Ò„^ ��ÇD$��‰$è����‰Â¸����…Ò„? ��ÇD$œ��‰$è����‰Â¸����…Ò„ ��ÇD$°��‰$è����‰Â¸����…Ò„ ��ÇD$À��‰$è����‰Â¸����…Ò„â��ÇD$Ô��‰$è����‰Â¸����…Ò„Ã��ÇD$ä��‰$è����‰Â¸����…Ò„¤��ÇD$õ��‰$è����‰Â¸����…Ò„…��ÇD$��‰$è����‰Â¸����…Ò„f��ÇD$��‰$è����‰Â¸����…Ò„G��ÇD$%��‰$è����‰Â¸����…Ò„(��ÇD$2��‰$è����‰Â¸����…Ò„ ��ÇD$@��‰$è����‰Â¸����…Ò„ê��ÇD$M��‰$è����‰Â¸����…Ò„Ë��ÇD$[��‰$è����‰Â¸����…Ò„¬��ÇD$i��‰$è����‰Â¸����…Ò„��ÇD$x��‰$è����‰Â¸����…Ò„n��ÇD$��‰$è����‰Â¸����…Ò„O��ÇD$£��‰$è����‰Â¸����…Ò„0��ÇD$²��‰$è����‰Â¸����…Ò„��ÇD$Â��‰$è����‰Â¸����…Ò„ò��ÇD$Õ��‰$è����‰Â¸����…Ò„Ó��ÇD$é��‰$è����‰Â¸����…Ò„´��ÇD$ý��‰$è����‰Â¸����…Ò„•��ÇD$��‰$è����‰Â¸����…Ò„v��ÇD$&��‰$è����‰Â¸����…Ò„W��ÇD$;��‰$è����‰Â¸����…Ò„8��ÇD$N��‰$è����‰Â¸����…Ò„��ÇD$e��‰$è����‰Â¸����…Ò„ú��ÇD${��‰$è����‰Â¸����…Ò„Û��ÇD$‹��‰$è����‰Â¸����…Ò„¼��ÇD$˜��‰$è����‰Â¸����…Ò„��ÇD$©��‰$è����‰Â¸����…Ò„~��ÇD$½��‰$è����‰Â¸����…Ò„_��ÇD$Î��‰$è����‰Â¸����…Ò„@��ÇD$ä��‰$è����‰Â¸����…Ò„!��ÇD$÷��‰$è����‰Â¸����…Ò„��ÇD$ ��‰$è����‰Â¸����…Ò„ã��ÇD$��‰$è����‰Â¸����…Ò„Ä��ÇD$+��‰$è����‰Â¸����…Ò„¥��ÇD$=��‰$è����‰Â¸����…Ò„†��ÇD$O��‰$è����‰Â¸����…Ò„g��ÇD$]��‰$è����‰Â¸����…Ò„H��ÇD$m��‰$è����‰Â¸����…Ò„)��ÇD$��‰$è����‰Â¸����…Ò„ ��ÇD$–��‰$è����‰Â¸����…Ò„ë��ÇD$¤��‰$è����‰Â¸����…Ò„Ì��ÇD$¶��‰$è����‰Â¸����…Ò„­��ÇD$È��‰$è����‰Â¸����…Ò„Ž��ÇD$Ú��‰$è����‰Â¸����…Ò„o��ÇD$ê��‰$è����‰Â¸����…Ò„P��ÇD$ú��‰$è����‰Â¸����…Ò„1��ÇD$ ��‰$è����‰Â¸����…Ò„��ÇD$ ��‰$è����‰Â¸����…Ò„ó��ÇD$- ��‰$è����‰Â¸����…Ò„Ô��ÇD$> ��‰$è����‰Â¸����…Ò„µ��ÇD$Z ��‰$è����‰Â¸����…Ò„–��ÇD$w ��‰$è����‰Â¸����…Ò„w��ÇD$ ��‰$è����‰Â¸����…Ò„X��ÇD$ª ��‰$è����‰Â¸����…Ò„9��ÇD$» ��‰$è����‰Â¸����…Ò„��ÇD$����‰$è����‰Â¸���…Ò„û��ÇD$Í ��‰$è����‰Â¸����…Ò„Ü��ÇD$à ��‰$è����‰Â¸����…Ò„½��ÇD$÷ ��‰$è����‰Â¸����…Ò„ž��ÇD$ ��‰$è����‰Â¸����…Ò„��ÇD$( ��‰$è����‰Â¸����…Ò„`��ÇD$@ ��‰$è����‰Â¸����…Ò„A��ÇD$X ��‰$è����‰Â¸����…Ò„"��ÇD$r ��‰$è����‰Â¸����…Ò„��ÇD$Œ ��‰$è����‰Â¸����…Ò„ä���ÇD$¤ ��‰$è����‰Â¸����…Ò„Å���ÇD$¼ ��‰$è����‰Â¸����…Ò„¦���ÇD$Ò ��‰$è����‰Â¸����…Ò„‡���ÇD$ê ��‰$è����‰Â¸����…ÒtlÇD$ ��‰$è����‰Â¸����…ÒtQÇD$ ��‰$è����‰Â¸����…Òt6ÇD$/ ��‰$è����‰Â¸����…ÒtÇD$D ��‰$è����‰Â¸����…Òu8‹]ô‹uø‹}ü‰ì]Ãv�ÇD$����¿T���‰ÞÇ$���è����¹���ó¦„ûìÿÿ‰]‹uø‹]ô‹}ü‰ì]é”ìÿÿglutGetProcAddress�� ERROR: Function <%s> called without first calling 'glutInit'.�glut�glutInit�glutInitDisplayMode�glutInitDisplayString�glutInitWindowPosition�glutInitWindowSize�glutMainLoop�glutExit�glutCreateWindow�glutCreateSubWindow�glutDestroyWindow�glutPostRedisplay�glutPostWindowRedisplay�glutSwapBuffers�glutGetWindow�glutSetWindow�glutSetWindowTitle�glutSetIconTitle�glutPositionWindow�glutReshapeWindow�glutPopWindow�glutPushWindow�glutIconifyWindow�glutShowWindow�glutHideWindow�glutFullScreen�glutSetCursor�glutWarpPointer�glutEstablishOverlay�glutRemoveOverlay�glutUseLayer�glutPostOverlayRedisplay����glutPostWindowOverlayRedisplay�glutShowOverlay�glutHideOverlay�glutCreateMenu�glutDestroyMenu�glutGetMenu�glutSetMenu�glutAddMenuEntry�glutAddSubMenu�glutChangeToMenuEntry�glutChangeToSubMenu�glutRemoveMenuItem�glutAttachMenu�glutDetachMenu�glutDisplayFunc�glutReshapeFunc�glutKeyboardFunc�glutMouseFunc�glutMotionFunc�glutPassiveMotionFunc�glutEntryFunc�glutVisibilityFunc�glutIdleFunc�glutTimerFunc�glutMenuStateFunc�glutSpecialFunc�glutSpaceballMotionFunc�glutSpaceballRotateFunc�glutSpaceballButtonFunc�glutButtonBoxFunc�glutDialsFunc�glutTabletMotionFunc�glutTabletButtonFunc�glutMenuStatusFunc�glutOverlayDisplayFunc�glutWindowStatusFunc�glutKeyboardUpFunc�glutSpecialUpFunc�glutJoystickFunc�glutSetColor�glutGetColor�glutCopyColormap�glutGet�glutDeviceGet�glutExtensionSupported�glutGetModifiers�glutLayerGet�glutBitmapCharacter�glutBitmapWidth�glutStrokeCharacter�glutStrokeWidth�glutBitmapLength�glutStrokeLength�glutWireSphere�glutSolidSphere�glutWireCone�glutSolidCone�glutWireCube�glutSolidCube�glutWireTorus�glutSolidTorus�glutWireDodecahedron�glutSolidDodecahedron�glutWireTeapot�glutSolidTeapot�glutWireOctahedron�glutSolidOctahedron�glutWireTetrahedron�glutSolidTetrahedron�glutWireIcosahedron�glutSolidIcosahedron�glutVideoResizeGet�glutSetupVideoResizing�glutStopVideoResizing�glutVideoResize�glutVideoPan�glutReportErrors�glutIgnoreKeyRepeat�glutSetKeyRepeat�glutForceJoystickFunc�glutGameModeString�glutEnterGameMode�glutLeaveGameMode�glutGameModeGet�glutMainLoopEvent�glutLeaveMainLoop�glutCloseFunc�glutWMCloseFunc�glutMenuDestroyFunc�glutFullScreenToggle�glutSetOption�glutGetModeValues�glutSetWindowData�glutGetWindowData�glutSetMenuData�glutGetMenuData�glutBitmapHeight�glutStrokeHeight�glutBitmapString�glutStrokeString�glutWireRhombicDodecahedron�glutSolidRhombicDodecahedron�glutWireSierpinskiSponge�glutSolidSierpinskiSponge�glutWireCylinder�glutSolidCylinder�glutMouseWheelFunc�glutJoystickGetNumAxes�glutJoystickGetNumButtons�glutJoystickNotWorking�glutJoystickGetDeadBand�glutJoystickSetDeadBand�glutJoystickGetSaturation�glutJoystickSetSaturation�glutJoystickSetMinRange�glutJoystickSetMaxRange�glutJoystickSetCenter�glutJoystickGetMinRange�glutJoystickGetMaxRange�glutJoystickGetCenter�glutInitContextVersion�glutInitContextFlags�glutInitContextProfile�� ��������������-�������5�������M�������\�������}�������˜�������°�������É�������Ð�������ê�������ñ������� ������������,������3������M������T������n������u������������–������°������·������Ñ������Ø������ò������ù������������������4������;������U������\�� ����v������}��!����•��������¬����¤��"����´������¼��¬����Ã��#����Ó������Û��¬����â��$����ò������ú��¬������%������������¬���� ��&����0������8��¬����?��'����O������W��¬����^��(����n������v��¬����}��)����������•��¬����œ��*����¬������´��¬����»��+����Ë������Ó��¬����Ú��,����ê������ò��¬����ù��-���� ��������¬������.����(������0��¬����7��/����G������O��¬����V��0����f������n��¬����u��1����…��������¬����”��2����¤������¬��¬����³��3����Ã������Ë��¬����Ò��4����â������ê��¬����ñ��5���������� ��¬���������� ������(��¬����/��6����?������G��¬����N��7����^������f��¬����m��8����}������…��¬����Œ��9����œ������¤��¬����«��:����»������Ã��¬����Ê��;����Ú������â��¬����é��<����ù��������¬������=���������� ��¬����'��>����7������?��¬����F��?����V������^��¬����e��@����u������}��¬����„��A����”������œ��¬����£��B����³������»��¬����Â��C����Ò������Ú��¬����á��D����ñ������ù��¬�������E������������¬������F����/������7��¬����>��G����N������V��¬����]��H����m������u��¬����|��I����Œ������”��¬����›��J����«������³��¬����º��K����Ê������Ò��¬����Ù��L����é������ñ��¬����ø��M������������¬������N����'������/��¬����6��O����F������N��¬����U��P����e������m��¬����t��Q����„������Œ��¬����“��R����£������«��¬����²��S����Â������Ê��¬����Ñ��T����á������é��¬����ð��U����� ������ ��¬���� ��V���� ������' ��¬����. ��W����> ������F ��¬����M ��X����] ������e ��¬����l ��Y����| ������„ ��¬����‹ ��Z����› ������£ ��¬����ª ��[����º ������ ��¬����É ��\����Ù ������á ��¬����è ��]����ø ������� ��¬���� ��^���� ������ ��¬����& ��_����6 ������> ��¬����E ��`����U ������] ��¬����d ��a����t ������| ��¬����ƒ ��b����“ ������› ��¬����¢ ��c����² ������º ��¬����Á ��d����Ñ ������Ù ��¬����à ��e����ð ������ø ��¬����ÿ ��f���� ������ ��¬���� ��g����. ������6 ��¬����= ��h����M ������U ��¬����\ ��i����l ������t ��¬����{ ��j����‹ ������“ ��¬����š ��k����ª ������² ��¬����¹ ��l����É ������Ñ ��¬����Ø ��m����è ������ð ��¬����÷ ��n���� ������ ��¬���� ��o����& ������. ��¬����5 ��p����E ������M ��¬����T ��q����d ������l ��¬����s ��r����ƒ ������‹ ��¬����’ ��s����¢ ������ª ��¬����± ��t����Á ������É ��¬����Ð ��u����à ������è ��¬����ï ��v����ÿ ������ ��¬���� ��w���� ������& ��¬����- ��x����= ������E ��¬����L ��y����\ ������d ��¬����k ��z����{ ������ƒ ��¬����Š ��{����š ������¢ ��¬����© ��|����¹ ������Á ��¬����È ��}����Ø ������à ��¬����ç ��~����÷ ������ÿ ��¬������������������¬����%��€����5������=��¬����D������T������\��¬����c��‚����s������{��¬����‚��ƒ����’������š��¬����¡��„����±������¹��¬����À��…����Ð������Ø��¬����ß��†����ï������÷��¬����þ��‡������������¬������ˆ����-������5��¬����<��‰����L������T��¬����[��Š����k������s��¬����z��‹����Š������’��¬����™��Œ����©������±��¬����¸������È������Ð��¬����×��Ž����ç������ï��¬����ö��������������¬����������%������-��¬����4��‘����D������L��¬����S��’����c������k��¬����r��“����‚������Š��¬����‘��”����¡������©��¬����°��•����À������È��¬����Ï��–����ß������ç��¬����î��—����þ��������¬���� ��˜����������%��¬����,��™����<������D��¬����K��š����[������c��¬����j��›����z������‚��¬����‰������™������¡��¬����¨��œ����¸������À��¬����Ç������×������ß��¬����æ��ž����ö������þ��¬������Ÿ������������¬����$�� ����4������<��¬����C��¡����S������[��¬����b��¢����r������z��¬������£����‘������™��¬���� ��¤����°������¸��¬����¿��¥����Ï������×��¬����Þ��¦����î������ö��¬����ý��§���� ��������¬������¨����(������0��¬����7��©����C������K��¬����R��ª����^������f��¬����m��«����y��������¬����ˆ��­����¤������©������²������·��®����.file�������þÿ��gfreeglut_ext.c���������������� ����������������������� ��� ���� ������>���@���� ������T���p���� ������g������� ��.text����������Ü��Ð������������.data����������������������������.bss�����������������������������.rdata���������[ ����������������_fgState�������������{��������� ������•��������� ��_exit��������� ������±��������� ������Å��������� ������Ú��������� ������ï��������� �������������� �������������� ������2�������� ������@�������� ������J�������� ������_�������� ������r�������� ������…�������� ������ž�������� ������¯�������� ������¾�������� ������Í�������� ������á�������� ������ó�������� �������������� �������������� ������)�������� ������9�������� ������L�������� ������\�������� ������l�������� ������|�������� ������‹�������� ������œ�������� ������²�������� ������Å�������� ������Ó�������� ������í�������� ������ �������� �������������� ������/�������� ������@�������� ������M�������� ������Z�������� ������l�������� ������|�������� ������“�������� ������¨�������� ������¼�������� ������Ì�������� ������Ü�������� ������í�������� ������þ�������� �������������� �������������� ������/�������� ������F�������� ������U�������� ������i�������� ������w�������� ������†�������� ������™�������� ������ª�������� ������Ã�������� ������Ü�������� ������õ�������� �������������� �������������� ������-�������� ������C�������� ������W�������� ������o�������� ������…�������� ������™�������� ������¬�������� ������¾�������� ������Ì�������� ������Ú�������� ��_glutGet������ ������ì�������� ������û�������� �������������� ������%�������� ������3�������� ������H�������� ������Y�������� ������n�������� �������������� ������‘�������� ������£�������� ������³�������� ������Ä�������� ������Ò�������� ������á�������� ������ï�������� ������þ�������� ������ �������� �������������� ������3�������� ������J�������� ������Z�������� ������k�������� �������������� ������”�������� ������©�������� ������¿�������� ������Ô�������� ������ê�������� ������þ�������� �������������� ������-�������� ������>�������� ������L�������� ������^�������� ������s�������� ������…�������� ������œ�������� ������°�������� ������Ã�������� ������Ö�������� ������ç�������� ������ú�������� ������ �������� ������ �������� ������- �������� ������B �������� ������X �������� ������g �������� ������z �������� ������ �������� ������  �������� ������± �������� ������ �������� ������Ô �������� ������æ �������� ������ø �������� ������ �������� ������' �������� ������E �������� ������_ �������� ������z �������� ������Œ �������� ������Ÿ �������� ������³ �������� ������Ë �������� ������æ �������� ������þ �������� ������ �������� ������0 �������� ������K �������� ������f �������� ������ �������� ������˜ �������� ������¯ �������� ������È �������� ������á �������� ������ø �������� ������ �������� ��_strcmp������� ������& �������� ��_fgError������ ��> ��_glutCreateMenu_ATEXIT_HACK�_glutCreateWindow_ATEXIT_HACK�_glutInit_ATEXIT_HACK�_fghGetProcAddress�_glutGetProcAddress�___glutCreateMenuWithExit�___glutCreateWindowWithExit�___glutInitWithExit�_wglGetProcAddress@4�_glutInitDisplayMode�_glutInitDisplayString�_glutInitWindowPosition�_glutInitWindowSize�_glutMainLoop�_glutExit�_glutCreateSubWindow�_glutDestroyWindow�_glutPostRedisplay�_glutPostWindowRedisplay�_glutSwapBuffers�_glutGetWindow�_glutSetWindow�_glutSetWindowTitle�_glutSetIconTitle�_glutPositionWindow�_glutReshapeWindow�_glutPopWindow�_glutPushWindow�_glutIconifyWindow�_glutShowWindow�_glutHideWindow�_glutFullScreen�_glutSetCursor�_glutWarpPointer�_glutEstablishOverlay�_glutRemoveOverlay�_glutUseLayer�_glutPostOverlayRedisplay�_glutPostWindowOverlayRedisplay�_glutShowOverlay�_glutHideOverlay�_glutDestroyMenu�_glutGetMenu�_glutSetMenu�_glutAddMenuEntry�_glutAddSubMenu�_glutChangeToMenuEntry�_glutChangeToSubMenu�_glutRemoveMenuItem�_glutAttachMenu�_glutDetachMenu�_glutDisplayFunc�_glutReshapeFunc�_glutKeyboardFunc�_glutMouseFunc�_glutMotionFunc�_glutPassiveMotionFunc�_glutEntryFunc�_glutVisibilityFunc�_glutIdleFunc�_glutTimerFunc�_glutMenuStateFunc�_glutSpecialFunc�_glutSpaceballMotionFunc�_glutSpaceballRotateFunc�_glutSpaceballButtonFunc�_glutButtonBoxFunc�_glutDialsFunc�_glutTabletMotionFunc�_glutTabletButtonFunc�_glutMenuStatusFunc�_glutOverlayDisplayFunc�_glutWindowStatusFunc�_glutKeyboardUpFunc�_glutSpecialUpFunc�_glutJoystickFunc�_glutSetColor�_glutGetColor�_glutCopyColormap�_glutDeviceGet�_glutExtensionSupported�_glutGetModifiers�_glutLayerGet�_glutBitmapCharacter�_glutBitmapWidth�_glutStrokeCharacter�_glutStrokeWidth�_glutBitmapLength�_glutStrokeLength�_glutWireSphere�_glutSolidSphere�_glutWireCone�_glutSolidCone�_glutWireCube�_glutSolidCube�_glutWireTorus�_glutSolidTorus�_glutWireDodecahedron�_glutSolidDodecahedron�_glutWireTeapot�_glutSolidTeapot�_glutWireOctahedron�_glutSolidOctahedron�_glutWireTetrahedron�_glutSolidTetrahedron�_glutWireIcosahedron�_glutSolidIcosahedron�_glutVideoResizeGet�_glutSetupVideoResizing�_glutStopVideoResizing�_glutVideoResize�_glutVideoPan�_glutReportErrors�_glutIgnoreKeyRepeat�_glutSetKeyRepeat�_glutForceJoystickFunc�_glutGameModeString�_glutEnterGameMode�_glutLeaveGameMode�_glutGameModeGet�_glutMainLoopEvent�_glutLeaveMainLoop�_glutCloseFunc�_glutWMCloseFunc�_glutMenuDestroyFunc�_glutFullScreenToggle�_glutSetOption�_glutGetModeValues�_glutSetWindowData�_glutGetWindowData�_glutSetMenuData�_glutGetMenuData�_glutBitmapHeight�_glutStrokeHeight�_glutBitmapString�_glutStrokeString�_glutWireRhombicDodecahedron�_glutSolidRhombicDodecahedron�_glutWireSierpinskiSponge�_glutSolidSierpinskiSponge�_glutWireCylinder�_glutSolidCylinder�_glutMouseWheelFunc�_glutJoystickGetNumAxes�_glutJoystickGetNumButtons�_glutJoystickNotWorking�_glutJoystickGetDeadBand�_glutJoystickSetDeadBand�_glutJoystickGetSaturation�_glutJoystickSetSaturation�_glutJoystickSetMinRange�_glutJoystickSetMaxRange�_glutJoystickSetCenter�_glutJoystickGetMinRange�_glutJoystickGetMaxRange�_glutJoystickGetCenter�_glutInitContextVersion�_glutInitContextFlags�_glutInitContextProfile�freeglut_font.o/1264195963 500 500 100664 5049 ` L�����¸��+�����.text�����������€ ��´���\ ������V��� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������(��4 ��������������@�0@U‰Â‰åƒì…Ò¸����t ƒú¸����uÉÃv�‰T$Ç$����è����1ÀÉö����¿����U‰åƒì€=����t‹Eè©ÿÿÿ…Àt%Ù@ÉÃÇD$���Ç$0���è����‹Eè„ÿÿÿ…ÀuÛÙîÉö����¿����U‰åWVSƒì<‹u €=����„Ç���‹EèOÿÿÿ…À‰Ã„•���…ö„���¶„À„‚���Ùî‹KÙÀVÙUÔ‹uÔë‹C ‹¸…ÀtØ�¶„Àt ƒÂ¶ø9Ï}ï< ußÝáßàžvXÝÙ¶Ùî„ÀuàÝáßàžvÝÙëfÝØÙ}æØ$��·Eæ´ f‰EäÙmäÛ]àÙmæ‹EàƒÄ<[^_]ô&����ƒÄ<1À[^_]ö����ÝØ‰uÔÙEÔë‚¶����ÇD$p���Ç$0���è����é ÿÿÿ´&����U‰åSƒì$‹] €=����tM‹EèUþÿÿ…Ûx6;X}1‹@ ‹˜…Àt'Ù$��Ø�Ù}ö·Eö´ f‰EôÙmôÛ]ðÙmö‹EðƒÄ$[]ÃÄ$1À[]Ãv�ÇD$���Ç$0���è����ëv�¼'����U‰Â‰åƒìƒú¸����t<ƒú¸����t2ƒú¸����t(ƒú¸����tƒú¸����tƒú¸����t ƒú¸����uÉÉT$Ç$‘���è����1ÀÉö����¿����U‰åƒì€=����t‹Eèyÿÿÿ‰Â1À…Òt‹BÉÃÇD$§���Ç$0���è����ëÕ¶����U‰åWVSƒì‹] €=����to‹Eè3ÿÿÿ…ÀtP…ÛtL¶„ÒtEƒÃ1É1öë‹x ¶Ò‹—¶Ñ¶„ÒtƒÃ€ú uã9Î}*¶‰Î1É„Òué9ñ‰È} ƒÄ‰ð[^_]Ã1ÀƒÄ[^_]Ãt&�1Éë¿ÇD$¸���Ç$0���è����éxÿÿÿv�U‰åSƒì‹] €=����t5‹Eè•þÿÿSÿúþ���w…Àt‹@ ‹˜¶�ƒÄ[]ô&����ƒÄ1À[]ÃÇD$É���Ç$0���è����ëµfU‰åWVSƒì,‹] €=����„%��‹Eèüÿÿ…À‰EÜ„æ���…Û„Þ���¶„À„Ó���ƒÃÙî‰]àÙ]ض����‹MܶÐ;Q ���< „³���‹MÜ‹A ‹…À‰Eä„„���‹P‹x…Ò~R1öÇ$���è����‹÷ƒì…À~*1ÛÝ����ƒÃD÷‹P‰T$‹�‰$è����ƒì9÷Ùè����‹EäƒÆ9p°‹UäÙÙEØØÁÇD$����ÇD$����Ù]ØÙ$è����ƒì ‹Uà¶„Àt ƒEàé>ÿÿÿeô[^_]Ã1Û‰\$ÙAÙàÙ\$ÙEØÙàÙ$è����‰]؃ì ëÁÇD$Ù���Ç$0���è����éÂþÿÿ‰ö¼'����U‰åWVSƒì,‹] €=����„þ���‹Eè¿úÿÿ…Ûˆæ���;XÝ���‹@ ‹˜…À‰Eä„Ì���‹p‹@…ÀŽž���1ÛÇ$���è����‹<Þƒì…ÿ~.1ÿt&�ý����ƒÇDÞ‹P‰T$‹�‰$è����ƒì9<ÞÙè����Ç$����è����‹ Þƒì…É~)1ÿý����ƒÇDÞ‹P‰T$‹�‰$è����ƒì9<ÞÙè����‹EäƒÃ9Xdÿÿÿ‹UäÇD$����ÇD$����‹‰$è����ƒì eô[^_]ÃÇD$ê���Ç$0���è����ééþÿÿU‰åWVSƒìL‹E€=����‹] „¤��èŸûÿÿ…À‰Æt …Ût€;�fueô[^_]ö����Ç$���è����ƒìÇD$����Ç$ð ��è����ƒìÇD$����Ç$ñ ��è����ƒìÇD$����Ç$ò ��è����ƒìÇD$����Ç$ó ��è����ƒìÇD$����Ç$ô ��è����ƒìÇD$���Ç$õ ��è����ƒìÙÄÒt{€ú „‚���‹F ¶Ò‹<¶W‰T$ÇD$����¶Ð¶Àf‰UæßEæÙ\$‹VÙ]ȉT$ ‹V‰T$‹V‰$‰T$è����¶f‰E涃ÃßEæƒìÙEÈ„ÒÞÁuÝØë¶����ÝØeô[^_]é����fÇD$����‹FÇD$ ����ÇD$����ÇD$����÷؉EàÛEàÙ\$ÙàÙ\$Ç$����è����ƒìÙîé ÿÿÿt&�‰EÈÇD$þ���Ç$0���è����‹EÈé=þÿÿU‰åVSƒì0‹E€=����‹] „��èÀùÿÿ‰ÆCÿ=þ���‡õ���…ö„í���‹F ‹˜Ç$���è����ƒìÇD$����Ç$ð ��è����ƒìÇD$����Ç$ñ ��è����ƒìÇD$����Ç$ò ��è����ƒìÇD$����Ç$ó ��è����ƒìÇD$����Ç$ô ��è����ƒìÇD$���Ç$õ ��è����¶ƒÃ¶Ð¶Àf‰UöƒìßEö‰\$Ù\$ÇD$����‹V‰T$ ‹V‰T$‹V‰$‰T$è����ƒìeø[^]é����eø[^]Ãt&�‰EðÇD$��Ç$0���è����‹EðéÌþÿÿstroke font 0x%08x not found�glutStrokeHeight��� ERROR: Function <%s> called without first calling 'glutInit'.�glutStrokeLength�glutStrokeWidth�font 0x%08x not found�glutBitmapHeight�glutBitmapLength�glutBitmapWidth�glutStrokeString�glutStrokeCharacter�glutBitmapString�glutBitmapCharacter�����? ��������������'�������,���!����H�������d�������k�������p���*����ž�������'������t������{������€��*����œ������À������ô������û���������*����������&������0������:������D������N������X�� ����g������l��!����ˆ������¨������¯������´��*����Î������H������O������T��*����l������¬������³������¸��*����Î������O��"����{��#����ˆ��$����¸��%����ò��%���������� ��������*����.������{��"����«��#����¸��$����Ä��"����ï��#����ü��$����(��%����;������B������G��*����^������˜��&����¯��'����Æ��'����Ý��'����ô��'���� ��'����"��'����†��(����ý��(����������������#��*����=������v��&������'����¤��'����»��'����Ò��'����é��'����� ��'����C ��(����g ������n ������s ��*����º��)����Q ��)����.file�������þÿ��gfreeglut_font.c��������������� ��������������������������@���� ������%������� ������7������ ������H������ ������U���€��� ������g���À��� ������y���`��� ������Š���À��� ������œ��� ��� ������±���P��� ������Ã���0��� ��.text���������� ��V�������������.data����������������������������.bss�����������������������������.rdata���������(��������������������Ø����������������ç������������_fgState�������������ú���������������� ������������������������������/���������������B���������������U���������������i���������������}�������� ������ˆ�������� ������“�������� ��_glEnd@0������ ������¡�������� ������²�������� ������È�������� ������Ù�������� ������æ�������� ��_fgError������ ��û��_fghStrokeByID�_glutStrokeHeight�_glutStrokeLength�_glutStrokeWidth�_fghFontByID�_glutBitmapHeight�_glutBitmapLength�_glutBitmapWidth�_glutStrokeString�_glutStrokeCharacter�_glutBitmapString�_glutBitmapCharacter�_fgStrokeRoman�_fgStrokeMonoRoman�_fgFontFixed8x13�_fgFontFixed9x15�_fgFontHelvetica10�_fgFontHelvetica12�_fgFontHelvetica18�_fgFontTimesRoman10�_fgFontTimesRoman24�_fgWarning�_glBegin@4�_glVertex2f@8�_glTranslatef@12�_glPushClientAttrib@4�_glPixelStorei@8�_glBitmap@28�_glPopClientAttrib@0� /61 1264195963 500 500 100664 140654 ` L����� .�‘����.text������������������������������� �0`.data�����������à��´���”ç���������@�`À.bss��������������������������������€�0À.rdata�����������Ê��”��”-��������@�`@X��g��v��…��”��£��²��Á��Ð��ß��î��ý�� ����*��9��H��W��f��u��„��“��¢��±��À��Ï��Þ��í��ü�� ����)��8��G��V��e��t��ƒ��’��¡��°��¿��Î��Ý��ì��û�� ����(��7��F��U��d��s��‚��‘�� ��¯��¾��Í��Ü��ë��ú�� ����'��6��E��T��c��r������Ÿ��®��½��Ì��Û��ê��ù������&��5��D��S��b��q��€����ž��­��¼��Ë��Ú��é��ø������%��4��C��R��a��p����Ž����¬��»��Ê��Ù��è��÷�� �� ��$ ��3 ��B ��Q ��` ��o ��~ �� ��œ ��« ��º ��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��8��É ��Ø ��ç ��ö �� �� ��# ��2 ��A ��P ��_ ��n ��} ��Œ ��› ��ª ��¹ ��È ��× ��æ ��õ �� �� ��" ��1 ��@ ��O ��^ ��m ��| ��‹ ��š ��© ��¸ ��Ç ��Ö ��å ��ô �� �� ��! ��0 ��? ��N ��] ��l ��{ ��Š ��™ ��¨ ��· ��Æ ��Õ ��ä ��ó �� �� �� ��/ ��> ��M ��\ ��k ��z ��‰ ��˜ ��§ ��¶ ��Å ��Ô ��ã ��ò ��������.��=��L��[��j��y��ˆ��—��¦��µ��Ä��Ó��â��ñ���������-��<��K��Z����������������������������������€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À�����@��€��À��� ��@ ��€ ��À ���!��@!��€!��À!���"��@"��€"��À"���#��@#��€#��À#���$��@$��€$��À$���%��@%��€%��À%���&��@&��€&��À&���'��@'��€'��À'���(��@(��€(��À(���)��@)��€)��À)���*��@*��€*��À*���+��@+��€+��À+���,��@,��€,��À,���-��@-��€-��À-���.��@.��€.��À.���/��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��€��@/��€/��À/���0��@0��€0��À0���1��@1��€1��À1���2��@2��€2��À2���3��@3��€3��À3���4��@4��€4��À4���5��@5��€5��À5���6��@6��€6��À6���7��@7��€7��À7���8��@8��€8��À8���9��@9��€9��À9���:��@:��€:��À:���;��@;��€;��À;���<��@<��€<��À<���=��@=��€=��À=���>��@>��€>��À>���?��@?��€?��À?���@��@@��€@��À@���A��@A��€A��ÀA���B��@B��€B��ÀB���C��@C��€C��ÀC���D��@D��€D��ÀD���E��@E��€E��ÀE���F��@F��€F��ÀF���G����������������������������������!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��0G��?G��NG��]G��lG��‰G��˜G��§G��¶G��ÅG��ÔG��ãG��òG��H��H��H��.H��=H��LH��[H��jH��yH��ˆH��—H��¦H��µH��ÄH��ÓH��âH��ñH���I��I��,I��;I��JI��YI��hI��wI��†I��•I��¤I��³I��ÂI��ÑI��àI��ýI�� J��J��*J��9J��HJ��WJ��fJ��uJ��„J��¡J��°J��¿J��ÎJ��ÝJ��ìJ��ûJ�� K��K��(K��7K��FK��UK��dK��sK��‚K��‘K�� K��¯K��¾K��ÍK��ÜK��ëK��úK�� L��L��'L��6L��EL��TL��cL��rL��L��L��ŸL��®L��½L��ÌL��ÛL��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��!G��êL��ùL��M��M��&M��5M��DM��SM��bM��qM��ŽM��M��¬M��»M��ÊM��çM��öM��N��N��#N��2N��AN��PN��_N��nN��}N��ŒN��›N��ªN��ÇN��äN��O��O��O��.O��=O��LO��[O��jO��‡O��–O��¥O��´O��ÃO��ÒO��áO��ðO��ÿO��P��P��,P��;P��JP��YP��hP��wP��†P��•P��¤P��³P��ÂP��ÑP��àP��ïP��þP�� Q��Q��+Q��:Q��IQ��XQ��gQ��vQ��…Q��”Q��£Q��²Q��ÁQ��ÐQ��ßQ��îQ��ýQ�� R��R��*R��9R��HR��WR��fR��uR��„R��“R��¢R��±R��ÀR��ÏR����������������������������������ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ïR���S��S��"S��@S��€S��¡S��²S��ÃS��ÔS��åS��öS��T��T��)T��:T��KT��\T��mT��~T��T�� T��±T��ÂT��ÓT��äT��õT��U��U��(U��9U��`U�� U��ÁU��àU�� V��AV��RV��€V��ÀV��áV��òV��W��W��@W��€W��ÀW��áW���X��!X��2X��CX��TX��€X��ÀX���Y��@Y��€Y��¡Y��²Y��ÃY��ÔY��åY��öY��Z��Z��)Z��:Z��KZ��\Z��mZ��~Z��Z�� Z��±Z��ÂZ��àZ��[��[��#[��4[��E[��V[��g[��x[��‰[�� [��Á[��Ò[��ã[��ô[��\��\��'\��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��ÞR��8\��I\��Z\��k\��|\��\��ž\��¯\��À\��à\��]��]��#]��4]��`]��]��’]��£]��´]��Å]��Ö]��ç]��ø]�� ^��^��+^��<^��M^��`^�� ^��à^��_�� _��`_�� _��à_�� `��``�� `��à`��a��a��#a��4a��Ea��Va��ga��xa�� a��àa�� b��`b�� b��àb�� c��Ac��`c��c��’c��£c��´c��àc��d��d��#d��4d��Ed��Vd��gd��xd�� d��Ád��Òd��ãd��ôd��e��e��'e��8e��Ie��Ze��ke��|e��e��že��¯e��Àe��Ñe��âe��óe��f��f��&f��7f��Hf��Yf����������������������������������jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��‚f��šf��Àf���g��@g��€g��¯g��Çg��ßg��÷g�� h��Oh��€h��¯h��Çh��àh�� i��`i�� i��ài�� j��`j�� j��àj�� k��Ok��gk��€k��Àk���l��@l��€l��àl�� m��`m�� m��àm�� n��`n�� n��Ïn���o��@o��€o��Ào���p��@p��€p��Àp���q��@q��€q��Àq���r��@r�� r��àr�� s��Os��gs��s�� s��às��t��@t��€t��Àt���u��@u��ou�� u��àu��v��'v��@v��ov�� v��àv�� w��`w�� w��Ïw���x��/x��`x�� x��àx�� y��`y�� y��Ïy��çy��ÿy�� z��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��jf��Oz��gz��€z��Àz���{��@{��o{�� {��Ï{���|��/|��`|�� |��Ï|���}��/}��G}��`}��}��§}��¿}��à}�� ~��O~��g~��~��—~��À~�����@��€��À���€��@€��€€��À€�����@��€��à�� ‚��`‚�� ‚��à‚��ƒ��'ƒ��?ƒ��Wƒ��€ƒ��Àƒ���„��@„��€„��À„���…��@…��€…��À…���†��@†��€†��À†���‡��@‡��€‡��À‡���ˆ��@ˆ��€ˆ��Àˆ���‰��@‰��€‰��À‰���Š��@Š��oŠ��‡Š��ŸŠ��·Š��àŠ�� ‹��`‹�� ‹��à‹�� Œ��`Œ�� Œ��àŒ�� ��`�� ��à�� Ž��`Ž�� Ž����������������������������������ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÞŽ��íŽ��üŽ�� ����)��8��G��V��e��t��ƒ��’��¡��°��¿��Î��Ý��ì��û�� ����(��7��F��U��d��s��‚��‘�� ��¯��Ì��Û��ê��ù��‘��‘��&‘��5‘��D‘��S‘��b‘��q‘��€‘��‘��¬‘��»‘��Ê‘��Ù‘��è‘��÷‘��’��’��$’��A’��P’��_’��n’��}’��Œ’��›’��ª’��¹’��È’��×’��æ’��õ’��“��“��"“��1“��@“��O“��^“��m“��|“��‹“��š“��©“��¸“��Ç“��Ö“��å“��ô“��”��”��!”��0”��?”��N”��]”��l”��{”��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��ÏŽ��Š”��™”��¨”��·”��Æ”��Õ”��ä”��ó”��•��•��.•��=•��L•��[•��j•��‡•��–•��¥•��´•��Õ��Ò•��á•��ð•��ÿ•��–��–��,–��;–��J–��Y–��h–��w–��†–��•–��¤–��³–��–��Ñ–��à–��ý–�� —��—��*—��9—��H—��W—��f—��u—��„—��“—��¢—��±—��À—��Ï—��Þ—��í—��ü—�� ˜��˜��)˜��8˜��G˜��V˜��e˜��t˜��ƒ˜��’˜��¡˜��°˜��¿˜��Θ��ݘ��ì˜��û˜�� ™��™��(™��7™��F™��U™��d™��s™��‚™��‘™�� ™��¯™��¾™��Í™��Ü™��ë™��ú™�� š��š��'š��6š��Eš����������������������������������Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��rš�� š��àš�� ›��`›��À›��œ��6œ��Tœ��€œ��Àœ��ûœ�� ��[��y�� ��à�� ž��`ž�� ž��àž�� Ÿ��`Ÿ�� Ÿ��àŸ�� ��9 ��` ��  ��à �� ¡��`¡��À¡�� ¢��`¢�� ¢���£��@£��€£��à£��8¤��`¤�� ¤���¥��@¥�� ¥���¦��`¦�� ¦���§��@§��€§��À§�� ¨��€¨��à¨��@©��€©��»©��Ù©��÷©�� ª��`ª��›ª��Àª���«��@«��€«��À«��û«�� ¬��`¬��›¬��¹¬��à¬��­��@­�� ­��à­�� ®��`®��›®��À®��û®�� ¯��`¯�� ¯���°��@°��€°��À°��û°�� ±��`±��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��Tš��›±��¹±��à±�� ²��`²�� ²��Û²���³��;³��`³��¸³��à³�� ´��`´�� ´��ø´�� µ��`µ��›µ��¹µ��×µ���¶��@¶��{¶��™¶��·¶��Õ¶���·��@·�� ·���¸��`¸�� ¸���¹��`¹��À¹�� º��€º��àº��@»��€»��À»���¼��@¼��{¼��™¼��·¼��Õ¼���½��`½��À½�� ¾��€¾��à¾��@¿�� ¿��à¿��@À�� À���Á��`Á��ÀÁ���Â��@Â��€Â��ÀÂ���Ã��@Ã��€Ã��ÀÃ���Ä��@Ä��€Ä��ÀÄ���Å��@Å��{Å��™Å��·Å��ÕÅ���Æ��@Æ��€Æ��ÀÆ���Ç��@Ç��€Ç��ÀÇ���È��@È��€È��ÀÈ���É��@É��€É��ÀÉ����������������������������������-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1������������������������@@-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1����T��������� ��������€@-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1���¨���������@��������@@-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1������������` ��������€@-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1���X��������€�������� @-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1���°�������� ��������€@-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1����������À��������à@���ª�‚�‚�‚�ª������8|þ|8����ªUªUªUªUªUªUª���® à  ����� Ž€À€à����� l€€€`����� €€����������$$������|�|������¨   À�����.PPˆˆ���������ð�ð���������������������ÿ�������������ÿ����������ÿ����������ÿ����������ÿ����������ÿ��������������ð�������ÿ�ÿ����������þ�0À0�������þ�àà�������DDDDDþ�������� ~~������Üb p "��������������������������������������������$$$������$$~$~$$������x8PP<�����D*$$R"�����:DJ0HH0�������������@08����������  �������$~$���������|������@08����������������~��������8������������€€@ �����$BBBBB$�����|P0�����~@ BB<�����<B~�����~DD$ �����<Bb\@@~�����<BBb\@@ ����� ~�����<BBB<BBB<�����8:FBB<����8��8������@08��8������� �������~��~��������@  @������BB<�����<@JVRNBB<�����BBB~BBB$�����üBBB|BBBü�����<B@@@@@B<�����üBBBBBBBü�����~@@@x@@@~�����@@@@x@@@~�����:FBN@@@B<�����BBBB~BBBB�����||�����8D�����BDHP`PHDB�����~@@@@@@@@�����‚‚‚’’ªÆ‚‚�����BBBFJRbBB�����<BBBBBBB<�����@@@@|BBB|����<JRBBBBB<�����BDHP|BBB|�����<B<@@B<�����þ�����<BBBBBBBB�����(((DDD‚‚�����Dª’’’‚‚‚‚�����‚‚D((D‚‚�����(D‚‚�����~@@ ~�����< <����� @€€�����xx�����������D(����þ��������������������8�����:FB><��������\bBBb\@@@�����<B@@B<��������:FBBF:�����<B@~B<�������� | "���<B<@8DD:��������BBBBb\@@@�����|0�����8DD �������BDHpHD@@@�����|0�����‚’’’’ì��������BBBBb\��������<BBBB<������@@@\bBb\������:FBF:�������� "\��������<B 0B<��������" | ������:DDDDD��������((DDD��������Dª’’‚‚��������B$$B������<B:FBBB��������~ ~��������0����������p p�����������HT$��������������������������8TPPT8�����Üb p "������B<$$<B�������||(D‚‚�����������$$$ $������������l������8D’ª¢ª’D8������|�<D<8������$HH$�������~�������������<����������8Dª²ªª’D8������������~����������$$������|�|����������x@0H0��������0HH0���������������@ZfBBBB��������4ttt>����������������������������������p ` �������x�0HH0������H$$H������ æB@@À@���� òL@@À@���� f’ `����<BB@ ������BB~BB$�����BB~BB$�����BB~BB$�$����BB~BB$�L2����BB~BB$�$$����BB~BB$$����žðœn���<B@@@@@B<�����~@@x@@~�����~@@x@@~�����~@@x@@~�$����~@@x@@~�$$����||� ����||�����||�$����||�((����xDBBâBBDx�����‚†Š’¢Â‚�˜d����|‚‚‚‚‚|� ����|‚‚‚‚‚|�����|‚‚‚‚‚|�$����|‚‚‚‚‚|�˜d����|‚‚‚‚‚|�((�����B$$B������@<bRRRJJF<����<BBBBBB�����<BBBBBB�����<BBBBBB�$����<BBBBBB�$$����(DD�����@@@|BBB|@�����\BBLPHDD8�����:FB><������:FB><������:FB><��$����:FB><��L2����:FB><��$$����:FB><�$����l’|l������<B@@B<��������<B@~B<������<B@~B<������<B@~B<��$����<B@~B<��$$����|0�� ����|0�� ����|0��H0����|0��((����<BBBB<($����BBBBb\��L2����<BBBB<�� ����<BBBB<������<BBBB<��$����<BBBB<��L2����<BBBB<��$$������|������@<bRJF<�������:DDDDD�� ����:DDDDD������:DDDDD��$����:DDDDD��((��<B:FBBB����@@\bBBb\@@����<B:FBBB��$$������������������������ ��������[�@��A�@��A�@��m������������������������������������ ����������>��ÿ€�>���������������������������������������� ��ª€U�ª€U�ª€U�ª€U�ª€U�ª€U�ª€U�ª€������������������������������� ���������������H�H�x�H�H���������������������������������� ������������H�O�@�p�@�x������������������������������������ �������� � �� ����8�@�@�@�8���������������������������������� ���������������x�@�@�@�@���������������������������������� �������������������� ��� ������������������������������������ ������������������������������������������������������� ���������������D�L�T�d�D���������������������������������� ����������������(�(�D�D���������������������������������� ����������������ø��������������������������������������� ���������ø���������������������������������������������� ���������€��������������������������������������������� ����������������€�������������������������������������� ���������ÿ€�������������������������������������� ������������������������������ÿ€������������������������������� ������������������������ÿ€������������������������������������� ����������������ÿ€��������������������������������������������� ��������ÿ€����������������������������������������������������� ��ÿ€����������������������������������������������������������� ���������€�������������������������������������� ���������ø��������������������������������������� ����������������ÿ€�������������������������������������� ���������ÿ€��������������������������������������������� ������������������������������������������������ ���������������`������������������������������������������ �������������`����`���������������������������������������� ��������"�"�"�"�"�"������������������������������������������� �������������������������������������������������������� ��������.�Q�0���|���������������������������������������� ���������������� � �������������������������������������������� ��������������������������������������������������������������� ������������������������������������������������������ ������������������������������������������������������������ ����������$�$�~�$�$�~�$�$�������������������������������������� �������>�I� � � ��(�H�I�>����������������������������������� ��������B�%�%����$�R�R�!������������������������������������ ��������1�J�D�J�1�0�H�H�H�0������������������������������������ ����������������������������������������������������������� ��������������������������������������������������� ��������������������������������������������������� �����������I�*��*�I����������������������������������������� �������������������������������������������������������� ����� � ���������������������������������������������������� �������������������������������������������������������������� �������� � ���������������������������������������������������� ��������@� � ������������������������������������������� ���������"�A�A�A�A�A�A�"������������������������������������� ��������������H�(�������������������������������������� ���������@� �����A�A�>������������������������������������ ��������>�A�������������������������������������������� ������������B�"�� �������������������������������������� ��������>�A����a�^�@�@������������������������������������� ��������>�A�A�A�a�^�@�@� ������������������������������������� �������� � �������������������������������������������� ���������"�A�A�"��"�A�"������������������������������������� ��������<����=�C�A�A�A�>������������������������������������ �������� � ������� � ������������������������������������������ ����� � ������� � ������������������������������������������ ������������ � ���������������������������������������� ������������������������������������������������������������� �������� ��������� ������������������������������������ ����������������A�A�>������������������������������������ ��������>�@�@�M�S�Q�O�A�A�>������������������������������������ ��������A�A�A��A�A�A�"�������������������������������������� ��������~�!�!�!�!�~�!�!�!�~������������������������������������ ��������>�A�@�@�@�@�@�@�A�>������������������������������������ ��������~�!�!�!�!�!�!�!�!�~������������������������������������ ��������� � � � �<� � � ������������������������������������� �������� � � � � �<� � � ������������������������������������� ��������>�A�A�A�G�@�@�@�A�>������������������������������������ ��������A�A�A�A�A��A�A�A�A������������������������������������ ��������>���������>������������������������������������ ��������<�B��������€����������������������������������� ��������A�B�D�H�P�p�H�D�B�A������������������������������������ ���������@�@�@�@�@�@�@�@�@������������������������������������ ��������A�A�A�I�I�U�U�c�A�A������������������������������������ ��������A�A�A�C�E�I�Q�a�A�A������������������������������������ ��������>�A�A�A�A�A�A�A�A�>������������������������������������ ��������@�@�@�@�@�~�A�A�A�~������������������������������������ ������>�I�Q�A�A�A�A�A�A�>������������������������������������ ��������A�A�B�D�H�~�A�A�A�~������������������������������������ ��������>�A�A���8�@�A�A�>������������������������������������ ����������������������������������������������������� ��������>�A�A�A�A�A�A�A�A�A������������������������������������ ������������"�"�"�A�A�A������������������������������������ ��������"�U�I�I�I�I�A�A�A�A������������������������������������ ��������A�A�"�����"�A�A������������������������������������ ���������������"�A�A������������������������������������ ���������@�@� ������������������������������������������ ��������������������������������������������������� ��������������� � �@������������������������������������ ������<�����������<���������������������������������� ��������������������A�"�������������������������������������� ������ÿ�������������������������������������������������������� �������������������������0���������������������������������� ��������=�C�A�?���>������������������������������������������ ��������^�a�A�A�A�a�^�@�@�@������������������������������������ ��������>�A�@�@�@�A�>������������������������������������������ ��������=�C�A�A�A�C�=��������������������������������������� ��������>�@�@��A�A�>������������������������������������������ ������������|����������������������������������������� ��>�A�A�>�@�<�B�B�B�=������������������������������������������ ��������A�A�A�A�A�a�^�@�@�@������������������������������������ ��������>������8����������������������������������������� ��<�B�B�B����������������������������������������������� ��������A�F�X�`�X�F�A�@�@�@������������������������������������ ��������>���������8������������������������������������ ��������A�I�I�I�I�I�v������������������������������������������ ��������A�A�A�A�A�a�^������������������������������������������ ��������>�A�A�A�A�A�>������������������������������������������ ��@�@�@�^�a�A�A�A�a�^������������������������������������������ �����=�C�A�A�A�C�=������������������������������������������ �������� � � � �!�1�N������������������������������������������ ��������>�A��>�@�A�>������������������������������������������ ��������������~���������������������������������������� ��������=�B�B�B�B�B�B������������������������������������������ �����������"�"�A�A������������������������������������������ ��������"�U�I�I�I�A�A������������������������������������������ ��������A�"����"�A������������������������������������������ ��<�B��:�F�B�B�B�B�B������������������������������������������ ��������� ����������������������������������������������� ��������������������������������������������������� ��������������������������������������������������� ������p����� � �����p���������������������������������� ����������������������F�I�1������������������������������������ ��������������������������������������������������������������� ������������������������������������������������������ �������� �<�R�P�H�J�<����������������������������������������� ��������.�Q�0���|���������������������������������������� ��������������A�>�"�"�>�A�������������������������������������� �����������>��>��"�A�A������������������������������������ ����������������������������������������������������� �������$���$�$�$�� �$������������������������������������� ��������������������������"�"���������������������������������� ����������<�B�™�¥�¡�¥�™�B�<������������������������������������ ��������������|���<�H�8�H�0������������������������������������ ���������� ��$�H�H�$�� �������������������������������������� ���������������~�������������������������������������������� ����������������>���������������������������������������������� ����������<�B�¥�©�¹�¥�¹�B�<������������������������������������ ��������������������������~������������������������������������ �������������������� ��� ������������������������������������ ������������������������������������������������������� ����������������x�@�0��H�0������������������������������������ ����������������0�H���H�0������������������������������������ ������������������������������������������������������������ ����@�@�]�c�A�A�A�A�A������������������������������������������ �������������=�E�E�E�?������������������������������������ ���������������� � �������������������������������������������� ���$� �������������������������������������������������������� ����������������p� � � �`� ������������������������������������ ����������������|���8�D�D�8������������������������������������ ����������H�$�� � ��$�H�������������������������������������� ��������� � ��s�!� � �`� ������������������������������������ ������������y�&� � �`� ������������������������������������ ��������� � ��3�I���H�0������������������������������������ ��������>�A�A�@� ������������������������������������������ ��������A�A�A��A�A�"������ �������������������������������� ��������A�A�A��A�A�"�������������������������������������� ��������A�A�A��A�A�"����"���������������������������������� ��������A�A�A��A�A�"����N�1���������������������������������� ��������A�A�A��A�A�"����"�"���������������������������������� ��������A�A�A��A�A�"���"����������������������������������� ��������O�H�H�H�~�H�H�H�H�7������������������������������������ ���$� �>�A�@�@�@�@�@�@�A�>������������������������������������ ��������� � � �<� � ������ �������������������������������� ��������� � � �<� � �������������������������������������� ��������� � � �<� � ����"���������������������������������� ��������� � � �<� � ����"�"���������������������������������� ��������>�������>����� �������������������������������� ��������>�������>������������������������������������� ��������>�������>���"���������������������������������� ��������>�������>���"�"���������������������������������� ��������|�!�!�!�!�á�!�!�!�|������������������������������������ ��������A�C�E�I�I�Q�a�A���N�1���������������������������������� ��������>�A�A�A�A�A�A�>����� �������������������������������� ��������>�A�A�A�A�A�A�>������������������������������������� ��������>�A�A�A�A�A�A�>���"���������������������������������� ��������>�A�A�A�A�A�A�>���N�1���������������������������������� ��������>�A�A�A�A�A�A�>���"�"���������������������������������� ����������A�"����"�A���������������������������������������� ������@�>�a�Q�Q�I�I�E�E�C�>����������������������������������� ��������>�A�A�A�A�A�A�A����� �������������������������������� ��������>�A�A�A�A�A�A�A������������������������������������� ��������>�A�A�A�A�A�A�A���"���������������������������������� ��������>�A�A�A�A�A�A�A���"�"���������������������������������� �������������"�A�A������������������������������������� ��������@�@�@�~�A�A�A�~�@�@������������������������������������ ��������,�"�"�"�$�h�$�"�"������������������������������������� ��������=�C�A�?���>��������������������������������������� ��������=�C�A�?���>��������������������������������������� ��������=�C�A�?���>���"������������������������������������ ��������=�C�A�?���>���&������������������������������������� ��������=�C�A�?���>���"�"������������������������������������ ��������=�C�A�?���>��� �� ���������������������������������� ��������7�I�H�>� �I�6������������������������������������������ ���$� �>�A�@�@�@�A�>������������������������������������������ ��������>�@�@��A�A�>����� ���������������������������������� ��������>�@�@��A�A�>��������������������������������������� ��������>�@�@��A�A�>���"������������������������������������ ��������>�@�@��A�A�>���"�"������������������������������������ ��������>������8����� ���������������������������������� ��������>������8��������������������������������������� ��������>������8���D�(����������������������������������� ��������>������8���$�$������������������������������������ ��������>�A�A�A�A�A�>��(��$���������������������������������� ��������A�A�A�A�A�a�^���N�1������������������������������������ ��������>�A�A�A�A�A�>����� ���������������������������������� ��������>�A�A�A�A�A�>��������������������������������������� ��������>�A�A�A�A�A�>���"������������������������������������ ��������>�A�A�A�A�A�>���N�1������������������������������������ ��������>�A�A�A�A�A�>���"�"������������������������������������ �������������������������������������������������������� ������@�>�Q�Q�I�E�E�>����������������������������������������� ��������=�B�B�B�B�B�B����� ���������������������������������� ��������=�B�B�B�B�B�B��������������������������������������� ��������=�B�B�B�B�B�B���"������������������������������������ ��������=�B�B�B�B�B�B���$�$������������������������������������ ��<�B��:�F�B�B�B�B�B��������������������������������������� ��@�@�@�^�a�A�A�a�^�@�@�@�������������������������������������� ��<�B��:�F�B�B�B�B�B���$�$����������������������@�@@@@@@������������PP������PPø(|((������ p¨(p ¨p ��� ������&�)����h�”�d����������2LLR0((�����������@ ���� @@€€€€@@ ����@  @����������� @ ������� ø ������€@@����������������|����������@�������������€€@@@@ ������pˆˆˆˆˆˆp������ ` ������ø€@0ˆp������pˆ0ˆp������øPP0������pˆð€€ø������pˆˆÈ°€ˆp������@@ ø������pˆˆˆpˆˆp������pˆh˜ˆˆp������@����@������€@@����@��������� @ ����������ð�ð����������@  @�������� � H0��� ��>�@�›�¤€¤€¢@’@M@ €����������‚‚|D((������xDDDxDDx������<B@@@@B<������xDBBBBDx������|@@@|@@|������@@@@x@@|������:FBF@@B<������BBBB~BBB������@@@@@@@@������`������DDHHpPHD������x@@@@@@@��� ������I�I�I�U�U�c�c�A����������FFJJRRbb������<BBBBBB<������@@@@xDDx�����>FJBBBB<������DDDDxDDx������8DD8@D8������ ø������<BBBBBBB������((DDD‚‚��� ������"�"�"�U�I�I�ˆ€ˆ€���������DD(((DD������((DD‚������|@ |����`@@@@@@@@`������ @@@@€€����À@@@@@@@@À���������ˆPP ����ü��������������������?@ ������hpà��������°ÈˆˆÈ°€€������`€€`��������h˜ˆˆ˜h������`€ð`��������@@@@@à@0����ph˜ˆˆ˜h��������ˆˆˆˆÈ°€€������€€€€€€�€�����€€€€€€€�€������ À €€������€€€€€€€€������’’’’’ì��������ˆˆˆˆÈ°��������pˆˆˆˆp������€€°ÈˆˆÈ°������h˜ˆˆ˜h��������€€€€À ��������```��������`@@@@à@@������p�������� PPˆˆ��������((TT’’��������ˆˆP Pˆ������€@@`  ��������ð€@ ð������ @@@@€@@@ ����@@@@@@@@@@����€@@@@ @@@€���������˜d���������������������@@@@@@�@�������@p¨  ¨p�������°H@@à@H0�������``������� ø øPPˆˆ����@@@@��@@@@����pˆpȘpÀˆp������������� ��� �������"�M�Q�M�"����������������à�  à������(P P(�����������|������������à������� �������"�U�Y�]�"��������������������à���������``�������ø� ø ����������à@ `����������À @à�������������€@����€€ð������(((((hèèè|���������À��������À@�����������������@@À@����������à�à à������ P(P ������ ������!�€� �H�D�Ä�B������� ������'��� �H�D�Ä�B������� ������!�€� �È�$�D�â��������0H@ ���������‚‚|D((� ���‚‚|D((����‚‚|D((�(���‚‚|D((�(���‚‚|D((�(����‚‚|D((( ������€ˆ�x�H�/€(��€�������<B@@@@B<������|@@@|@@|� ���|@@@|@@|����|@@|@@@|�(���|@@@|@@|�(����@@@@@@@@�@€���@@@@@@@@�@ ���@@@@@@@@� @���@@@@@@@@� ����xDBBòBDx������FFJJRRbb�(���<BBBBBB<����<BBBBBB<����<BBBBBB<����<BBBBBB<�(���<BBBBBB<�$�����ˆP Pˆ�������@<bRRJJF<�����<BBBBBBB����<BBBBBBB����<BBBBBBB����<BBBBBBB�$����((DD‚����@@xDDx@@������  `������hpà� @�����hpà� �����hpà�P �����hpà� P�����hpà�P������hpà P �����l’~ì������` `€€`��������`€ð`� @�����`€ð`�@ �����`€ð`�P �����`€ð`�P������€€€€€€�€������€€€€€€�€@�����€€€€€€�@€�����@@@@@@� ������pˆˆˆˆx`P�����à� P�����pˆˆˆˆp� @�����pˆˆˆˆp� �����pˆˆˆˆp�P �����pˆˆˆˆp�P(�����pˆˆˆˆp�P������� �ø� ��������pˆÈ¨˜t��������p� @�����p�@ �����p�P �����p�P����€@@`  � ���€€°ÈˆˆÈ°€€����€@@`  �P�����������������������@�@@@@@@@�������������PPP�������PPPü(ü((�������8TT8PT8���������������� ��������€ @ @ €�4�J�J�1�������������������������������������� ��������9�F�B�E�(��$�$������������������@ `���� @@@@@@ ����€@@ @@€�������������P P��������|��������@ ������������������|������������@���������������€€@@@ �������8DDDDDDD8�������p�������|@@ D8�������8DDD8�������üˆH((�������8DDx@@|�������8DDDdX@D8������� |�������8DDDD8DD8�������8D<DDD8�������@����@��������€@@����@����������� 0À0 ������������|�|������������``�����������DD8������������������������� ������� �M€S@Q Q I & 0@€������������������������������������� ��������A�A�A�>�"�"��������������|BBB|BBB|����������������� ���������!�@�@�@�@�@�!��������������������������������������� ��������|�B�A�A�A�A�A�B�|�����������~@@@~@@@~�������@@@@|@@@~�������������������������������� ���������#�A�A�G�@�@�!��������������������������������������� ��������A�A�A�A��A�A�A�A�����������@@@@@@@@@�������8DD�������ABDHpPHDB�������|@@@@@@@@������������������������������ ��������D@D@J@J@Q@Q@`À`À@@������������������������������������� ��������A�C�E�E�I�Q�Q�a�A�������������������������������������� ���������!�@€@€@€@€@€!������������@@@@|BBB|����������������� ��������€!�B€D€@€@€@€!������������BBBD|BBB|�������<BB 0@B<�������þ�������<BBBBBBBB������������������������������ ������������"�"�"�A�A�������������������������������������� �����������*€*€$€D@D@D@������������������������������������� ��������A�"�"����"�"�A�������������������������������������� �������������"�"�A�A�������������������������������������� ���������@� ��������������`@@@@@@@@@@`������� @@€€����À@@@@@@@@@@À������������ˆP ������þ�����������������������À€@�������:DD<D8���������XdDDDdX@@�������8D@@@D8���������4LDDDL4�������8D@|DD8���������@@@@@@à@0����8D4LDDDL4���������DDDDDdX@@�������@@@@@@@�@����€@@@@@@@@@�@�������DHP``PH@@�������@@@@@@@@@���������������� ��������I�I�I�I�I�m�R���������������DDDDDdX���������8DDDDD8������@@@XdDDDdX������4LDDDL4���������@@@@@`P���������0H0@H0���������`@@@@@à@@�������4LDDDDD���������((DDD����������� ��������"�"�U�I�I�ˆ€ˆ€��������������„„H00H„������@ ((HDDD���������x@ x������0@@@@@€@@@@0����@@@@@@@@@@@@����À  À����������˜d������������������������@@@@@@@@�@�������� 8dPPPT8��������X$x $��������„xHHx„���������||(DD�����@@@@���@@@@����pˆ0Hˆˆ`€ˆp��������������� ������������������ ��������� €N@Q@P@Q@N@ €���������������p�Pp��������(P(������������~�������������ð����������������������������������� ��������� €J@J@L@J@N@ €�������������������ð�����������``��������|�|������������ð@ `�����������À @ à����������������€@���@@@tLDDDDD������((((((hèèèh<����������@���������À @������������������ ` ������������p�pPp��������P((P�������� ��������A�'€��I�D�D�Â�A�������������������������������������� ��������G€"��€K�H�D�Â�A�������������������������������������� ��������!�€� �É�$�D�"�á��������8DD ��������������������� ��������A�A�A�>�"�"��������������������������������������� ��������A�A�A�>�"�"��������������������������������������� ��������A�A�A�>�"�"��������������������������������������� ��������A�A�A�>�"�"������� �������������������������������� ��������A�A�A�>�"�"���������������������������������������� ��������A�A�A�>�"�"�������������������������������������� ��������GÀD�D�<�'À$���À������������������������������������� ������!�@�@�@�@�@�!������������~@@@~@@@~�����~@@@~@@@~�����~@@@~@@@~�����~@@@~@@@~������@@@@@@@@@�@€����@@@@@@@@@�@ ����@@@@@@@@@� @����@@@@@@@@@� ������������������������ ��������|�B�A�A�ñ�A�A�B�|�������������������������������������� ��������A�C�E�E�I�Q�Q�a�A���� �������������������������������� ���������!�@€@€@€@€@€!������������������������������������� ���������!�@€@€@€@€@€!������������������������������������� ���������!�@€@€@€@€@€!���� ��������������������������������� ���������!�@€@€@€@€@€!����� �������������������������������� ���������!�@€@€@€@€@€!������������D((D�������������������� ������€�^�!�P€H€D€D€B€!�€�@��������<BBBBBBBB�����<BBBBBBBB�����<BBBBBBBB�����<BBBBBBBB�$���������������������������� �������������"�"�A�A���������@@|BBB|@@�������XDDDXDDD8�������:DD<D8�������:DD<D8�������:DD<D8�(������:DD<D8�(������:DD<D8�(�������:DD<D8$������������������������� ��������;€D@D�?À@D@;€�����������08D@@@D8���������8D@|DD8� ������8D@|DD8�������8D@|DD8�(������8D@|DD8�(�������@@@@@@@�@€������@@@@@@@�@ ������@@@@@@@� @������@@@@@@@� �������8DDDD<(4������DDDDDdX�(������8DDDDD8� ������8DDDDD8�������8DDDDD8�(������8DDDDD8�(������8DDDDD8�(���������|�����������¸DdTLD:���������4LDDDDD� ������4LDDDDD�������4LDDDDD�(������4LDDDDD�(����@ ((HDDD����@@@XdDDDdX@@����`(($DD�(�������������������������������00�� 00000000������������������ØØØ������������������ ����������$�$�$�ÿ€ÿ€���ÀÀ � � ���������������������������� ���������?€uÀdÀÀ€�<�t�d�e€?€������������������������������������� < ~ff~<€=€~ÀfÀf`~`<0��������������������������� ����������8?psàaÀaàc`w`>��3�3�?��������������������������@ ``�����00``````````00�����@`0000`@�����������������D88|��������������������� ���������� � � � �€€ � � � �������������������@ ``����������������������������������������� ������������������€€�����������������������������``���������������������ÀÀ@@`` 00����� �����������?�3�a€a€a€a€a€a€a€3�?����������������������������� ��������������������>�>����������������������������� ����������€€`�p�8����€€a€����������������������������� �����������?�c€a€€€���a€a€?����������������������������� ����������€€€ÀÀa€1€€€ €€€€��������������������������� ����������>��c€a€€€c€�~�`�`������������������������������ �����������?�q€a€a€a€�n�`�`�1€?€���������������������������� ����������0�0���� � ����€€€��������������������������� �����������?�s€a€a€3�?�3�a€a€s€?����������������������������� ����������>��c�€€€?€a€a€a€c€?�����������������``������``����������@ ``������``��������� ����������€€�8�`�8��€€����������������������������������� ��������������?€?€����?€?€������������������������������������� ����������`�x���€��x�`������������������������������������ ����������������������c�c��>��������������������������������ð�ø���8��3¸�gü�ff�f3�f3�f1€c€3¹€1Ù€��þ�ø��������������������������������������� ����������À0À0````à?À0À0À€€����������������������������� ����������Àà`p`0`0`pàÀ`À`````àÀ€�����������������������������������Àð880p�`�`�`�`�p�088ðÀ������������������������� ����������€À`à```0`0`0`0`0`0```àÀ€������������������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ������������������������� ����������`�`�`�`�`�`�€€`�`�`�`�ÀÀ�����������������������������������Øø880p`ø`ø`�`�p088ðÀ������������������������� ����������`0`0`0`0`0`0ðð`0`0`0`0`0`0�������������00000000000000����������������������������� �����������?�s€a€a€€€€€€€€€€������������������������� ����������`8`p`àaÀc€g�~�|�n�g�c€aÀ`à`p������������������������� ����������€€`�`�`�`�`�`�`�`�`�`�`�`������������������������������������a†a†cÆbFffffl6l6xxpp``������������������������� ����������`0`p`ð`ða°c0c0f0f0l0x0x0p0`0�����������������������������������Àð880p` ` ` ` p088ðÀ������������������������� ����������`�`�`�`�`�`�€À`à`````àÀ€����������������������������������Øð8x0ØpÜ` ` ` ` p088ðÀ������������������������� ����������`````````À`À€À`à`````àÀ€������������������������� ����������€?àpp`0�0�pà€>�p�`0pp?à€������������������������� ����������������������àà������������������������� ����������€?à0``0`0`0`0`0`0`0`0`0`0`0������������������������������������€€ À À À```000000``���������������������������������������� � ���6�6�33�33�1#�1ã�aá€`Á€`Á€`Á€�������������������������������������� ����������`0pp0`8àÀ €�� €À8à0`pp`0�����������������������������������������€ À``0000``������������������������� ����������àà`�0�� ����€�À�`àà���������xx``````````````xx���������00 ``@@ÀÀ�����ðð00000000000000ðð������������� ��������������������������A�c�6������������������������������ ��ÿÀÿÀ������������������������������������������������������``@@ ����������������������������� ����������;�w�c�c�s�?��c�w�>���������������������������������� ����������o�€q€`À`À`À`Àq€€o�`�`�`�`�������������������������� �����������?€1€`�`�`�`�1€?€���������������������������������� ����������À?À1À`À`À`À`À1À?ÀÀ�À�À�À�À������������������������� �����������?€q€`�`�€a€a€?�����������������������00000000üü00<����������������������������� ���?€1€�ÀÀ?À1À`À`À`À`À0À?ÀÀ��������������������������������� ����������a€a€a€a€a€a€a€q€o€g�`�`�`�`��������������``````````��``�����Àà````````````��``����� ����������c€c�g�f�l�|�x�l�f�c�`�`�`�`��������������``````````````���������������������������������������cccccccs˜oxf0��������������������������������� ����������a€a€a€a€a€a€a€q€o€g���������������������������������� �����������?€1€`À`À`À`À1€?€���������������������������������� ��`�`�`�`�o�€q€`À`À`À`Àq€€o���������������������������������� ���À�À�À�ÀÀ?À1À`À`À`À`À1À?ÀÀ���������������������```````pll��������������������������������� ����������<�~�c���~�`�c�?�����������������������8000000üü000������������������������������ ����������9€}€c€a€a€a€a€a€a€a€��������������������������������� ���������� � ���3�3�3�a€a€a€������������������������������������������� À Àà 4°3030ccc��������������������������������� ����������a€s€3�� � ��3�s€a€��������������������������������� ��8�8� � � � ���3�3�3�a€a€a€��������������������������������� ������������`�0�� ���������������������� 000000`À`00000 �����``````````````````�����À`000000 00000`À������������� ������������������f�?�€����������������������������������������������00000000��00��������� ���������?€5€d�d�d�d�5€?€�������������������������������� ����������ß�ÿ€`€0���~�0�`�a€a€?����������������������������� ����������������a€€3�3�3�€a€��������������������������������� ���������� � � � �€ �€�3�3�3�a€a€������������``````����```````����������������������������� ���?�a€a€€��9€q€a€c€7�>�x�a€a€?��������������������������ØØ����������������������������������������À0 #ˆDDHHHDD#ˆ 0À���������������������|�4l$d8����������������������������� ������������ ��6�l�l�6�� ������������������������������������ �����������������À�À�ÀÀÀ�����������������������������||�����������������������������������������������À0 $(DDD„GÄD$D$'È 0À���������������������������ø������������������8lDl8������ ����������€€�� � � �€€ � � �������������������������øø`0˜øp���������������pø˜00˜øp���������������������À`0������������� ��`�`�`�`�m€€s€a€a€a€a€a€a€a€��������������������������������� �� � � � � � � � � � ��9�y�y�y�y�9�€�����������������``�������������ðØp`���������������������������00000pp0����������������|�8lDDl8��������������������� ������������H�l�6���6�l�H���������������������������������������������� üØx3811ˆ0À0Àp`p000�������������������������������������|| 0 3L1|1¸0À0Àp`p000������������������������������������� üØxs8ù™ˆ0À0À˜`ø0p0��������������������������� ��>��c�c�p�8�� � � ����� � ���������������������������������� ����������À0À0````à?À0À0À€€������� ������������������� ����������À0À0````à?À0À0À€€��������€����������������� ����������À0À0````à?À0À0À€€������€������������������� ����������À0À0````à?À0À0À€€�������€ €����������������� ����������À0À0````à?À0À0À€€������€€������������������� ����������À0À0````à?À0À0À€€�����€€���������������������������������`ÿ€`ÿ€0À�0À�?À�À�ÿ�ÿ� À� À�À�À�ÿ€ÿ€����������������������������������������� €€�Àð880p�`�`�`�`�p�088ðÀ������������������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ��� ������������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ����€����������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ��€������������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ��€€�������00000000000000�0`À�����00000000000000�0 �����00000000000000�Ìx0�����00000000000000�ÌÌ������������������ ����������€À`à```0`0ü0ü0`0`0```àÀ€������������������������� ����������`0`p`ð`ða°c0c0f0f0l0l0x0p0p0�� € @@���������������������������Àð880p` ` ` ` p088ðÀ��€�����������������������������Àð880p` ` ` ` p088ðÀ��€�À�`���������������������������Àð880p` ` ` ` p088ðÀ��`À€���������������������������Àð880p` ` ` ` p088ðÀ��À  ���������������������������Àð880p` ` ` ` p088ðÀ��ÀÀ������������������� ����������ÀÀa€3�� ��3�a€ÀÀ���������������������������������������������ÇÀÿðx88ln g cŒaÌpÜ0x88üÌ������������������������� ����������€?à0``0`0`0`0`0`0`0`0`0`0`0���� ������������������ ����������€?à0``0`0`0`0`0`0`0`0`0`0`0����€����������������� ����������€?à0``0`0`0`0`0`0`0`0`0`0`0�� À€������������������ ����������€?à0``0`0`0`0`0`0`0`0`0`0`0�� À À�����������������������������������€ À``0000``���€�À����������������� ����������`�`�`�€À`à`````àÀ€`�`�`�������������������������� ����������n�o�c�c�c�c�n�n�c�c�c�c�>��������������������������� ����������;�w�c�c�s�?��c�w�>��� ��0�������������������������� ����������;�w�c�c�s�?��c�w�>���� ��������������������������� ����������;�w�c�c�s�?��c�w�>���3�� �������������������������� ����������;�w�c�c�s�?��c�w�>���&�-��������������������������� ����������;�w�c�c�s�?��c�w�>���6�6���������������������������� ����������;�w�c�c�s�?��c�w�>��6�6�������������������������������������:ðwücŒc�s�?ü c wø>ð��������������������������������� ��<�6����?€1€`�`�`�`�1€?€���������������������������������� �����������?€q€`�`�€a€a€?���� ��0�������������������������� �����������?€q€`�`�€a€a€?���� ���������������������������� �����������?€q€`�`�€a€a€?����3�� �������������������������� �����������?€q€`�`�€a€a€?���������������������``````````�0`À���������``````````�À`0���������``````````�ð`���������``````````�ØØ���������������������� �����������?€1€`À`À`À`À1€?€�&���0�������������������������� ����������a€a€a€a€a€a€a€q€o€g���&�-��������������������������� �����������?€1€`À`À`À`À1€?€���� ��������������������������� �����������?€1€`À`À`À`À1€?€��� ���������������������������� �����������?€1€`À`À`À`À1€?€���€��������������������������� �����������?€1€`À`À`À`À1€?€����€ €������������������������� �����������?€1€`À`À`À`À1€?€�������������������������������� ������������ � ���€€�� � ������������������������������������ ����������Î�€1€xÀlÀfÀcÀ1€?À`��������������������������������� ����������9€}€c€a€a€a€a€a€a€a€��� ��������������������������� ����������9€}€c€a€a€a€a€a€a€a€�� ���������������������������� ����������9€}€c€a€a€a€a€a€a€a€��3�� �������������������������� ����������9€}€c€a€a€a€a€a€a€a€��3�3���������������������������� ��8�8� � � � ���3�3�3�a€a€a€�� ���������������������������� ��`�`�`�`�o�€q€`À`À`À`Àq€€o�`�`�`�`�������������������������� ��8�8� � � � ���3�3�3�a€a€a€��3�3�����������������������������@�@@@@@������������  �������PPøPøPP������ à`€p ������D**V¨¤~�������v˜tnP0������������@À����� @@€€€@@ �����€@@ @@€����������� @ ������� ø �������@@@���������������x�����������@�������������€€@@@ �������``�������p ` �������ð@ `�������à``�������øP0�������àà@p�������`à@0�������@@@ ð�������```�������À p`�������@���@�������@@@���@��������� @ ����������ø�ø����������€@ @€���������@�@@  à��� ����>�@�’�­�¥�¥��B�<�����������îD|((8�������ðHHpHHð�������xÄ€€€Ä|�������øLDDDLø�������øH@p@Hø�������à@@p@Hø�������xÄ„œ€Ä|�������îDD|DDî�������à@@@@@à�������À  p�������ìHP`PHì�������øH@@@@à��� ��������ë€I�U�U�c�c�ã€����������äLLTTdî�������xÌ„„„Ìx�������à@@pHHð����� pÌ„„„Ìx�������ìHPpHHð�������à`Àp�������p ¨ø�������8lDDDDî�������((lDî��� ��������"�"�U�U�É€ˆ€ÝÀ����������îD((Dî�������8((Dî�������øˆ@ ˆø�����À€€€€€€€À������� @@@€€�����À@@@@@@@À�����������PP ����ø����������������������À€������à ` À���������àà€€�������`€€€`���������hp0�������`€À `���������à@@@à@0�����à`@  p���������Øà€€�������@@@@À�@�����€@@@@@À�@�������˜à €€�������à@@@@@À�������Û’’’ì���������Øà���������``�������À€àà�������8pp���������à@@` ���������à `€à���������0@@@à@��������h��������� `PØ���������(lT’Û���������ØP PØ�������€€@` ¸���������ð@ ð������� @@@€@@@ �����€€€€€€€€€�����€@@@ @@@€���������˜d����������������������@@@@@�@��������€à€p��������ðÈ@à@P0��������ˆpPPpˆ�������p ø ØPˆ�������€€€�€€€������à P @p������������P��� ���������"�M�Q�M�"��������������à�  À��������P  P����������|������������à������� ���������"�U�Y�]�"������������������à����������``�������ø� ø ����������à@ `����������À @à������������€@�����€€è�������((((hèèè|���������€��������À @�����������������à@À@���������à�@ @�������� PP ���������D>,ôHÈD�������N$*öHÈD�������D>,Ô(Hä�����à €@@�@���������îD|((8� ����îD|((8�����îD|((8�(����îD|((8�(����îD|((8�(�����îD|((8( ��������ï�I�x�.�(�9���������` xÄ€€€Ä|�������øH@p@Hø� @����øH@p@Hø� ����øH@p@Hø�P ����øH@p@Hø�P�����à@@@@@à�@€����à@@@@@à�@ ����à@@@@@à� @����à@@@@@à� �����øLDäDLø�������äLLTTdî�P(����xÌ„„„Ìx� @����xÌ„„„Ìx�����xÌ„„„Ìx�P ����xÌ„„„Ìx�P(����xÌ„„„Ìx�P�����ˆP Pˆ��������€|fRRJf>������8lDDDDî� ����8lDDDDî�����8lDDDDî�(����8lDDDDî�(�����8((Dî�����à@pHp@à�������àPP`PP �������à ` À�@€������à ` À�@ ������à ` À� @������à ` À� P������à ` À� �������à ` À@ @������Ø p(Ø������À @`€€€`���������`€À `�@€������`€À `�@ ������`€À `� @������`€À `� �������à@@@À�@€������à@@@À�@ ������à@@@À� @������à@@@À� �������`p p@������Øà� P������``� @������``�@ ������``� @������``� P������``� ������� �ø� ���������àp��������h� @������h�@ ������h�P ������h�P�����€À@` ¸� ����À€àà€€�����€À@` ¸� ��������������������������������������������������������������� ��������������������������������������D�f�f�f�f���������������� �������������������àà€€€?ð?ð@@@@@��������������� ������������?�åÀÄÀ„`„``àÀ€�<�t�d�d d`4à€����������������������������������� 9�0€0@0@˜@�ŒÀ�Ç€<`�r �a0�`˜�`ˆ�0Œ�þ��������������������������������������������������?¿�pð€``�`à�`Ð�1�ˆ� ��€�À� `� � �`�À���������������������������������� ��������00````````00�������@    @������������������� ��������������������������������2`:à�:à2`��������������������������������������øø���������������������������080�����������������������������������������������������øø�����������������������������������00������������������������ÀÀÀ@`` 00 �������������� ���������������€0À0Àpà````````````````0À0À€���������������� ��������������?À������������������������������� ��������������Àà0 � ����€€�À�À@À@À!À?€���������������� ��������������<�s�a€�€�À�À�ÀÀ€���A€A€#€?����������������� ��������������€€€€ààa€!€1€€€ € €€€€€��������������� ��������������?�qÀ`À�`�`�`�`�àÀÀ?�<�0���Àà��������������� ���������������=À0Àp``````````ÀyÀw�0�8�� ��à��������������� �������������� � ��������€€�€�À@À``à?à��������������� ���������������9ÀpÀ`````` à0À€��€0À0À0À€���������������� ��������������x���€À�ÀÀ9à0à`````````à0À;À������������������00�������00���������������080�������00�������������������� �����������������0�à€�8�`�8��€�à�0�����������������������������������������������øø����øø����������������������������� ����������������`�8��€�à�0�à€�8�`�������������������������� �������������� � �����������€À0À0À À1€�����������������������������ü�ƒ��� ��w€ÞÀ1Ž`1† 1†01†1ƒ0Ã0ã8;0� �`�ÀÀ�þ���������������������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€��������������������������������������ð<  ð    8à�����������������������������ð00�`�`�`�`�`�`�`�00ò������������������������������������à�8��������������8�à��������������������������������������ü ��  à  ��ø�����������������������������~������ð��ø������������������������������������ð���0�0�`�`�`€`��`��`��`��0�0���ò���������������������������������������������~À�������ÿ��������~À����������������������~~��������������� ��������������<�f�c��������������À������������������������������������~€���8�p�à�À�€���€�À�`�0�� �~?��������������������������������������ü ������������~�������������������������������������|ü0000h0h0Ä0Ä0„0‚00000�°�°�px�|��������������������������������������������|����2�2�b�Â�Â�‚�������x€��������������������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð��������������������������������������~��������à8   8à����������������������€���8��p��à�ð���0�0�`€`€`€`€`€`€`€0�0���ð��������������������������������������~80`àÀà8 8à��������������� ��������������O�xÀ``@0@0�0�pàÀ�<�p�` ` ``1à �����������������������������à€€€€€€€€€€€€A‚A‚a†þ������������������������������������ð�� ��������������~€��������������������������������������������€�€�€�À�@�`� � �0� � ��� �0�0�ü€��������������������������������������������ƒ�ƒ�ƒ€‡€F€FÀF@L@L` ,` , , 000ü~~��������������������������������������������üÀ0€�� ��8�p��à��À�À� ��� ��~€�������������������������������������à€€€€€€À@` 080 ü?�����������������������������üp 8� ����€€À�à@`@p`8ø�������������>0000000000000000000>������������ 00 ``@ÀÀ��������| |���������������� ������������������������������@@`À €1€�� ������������������ ����ÿøÿø���������������������������������������������������������������������0p@`0������������ ��������������8À}€c€a€a€1€€€€1€3€�������������������������� ��������������/�9À0À0`0`0`0`0`0`0À9À7�0�0�0�0�p���������������� ���������������?€8@p�`�`�`�`�`� À1À€������������������������� ��������������`9À0À`À`À`À`À`À`À0À9ÀÀ�À�À�À�ÀÀ��������������� ���������������?€8@p�`�`�`�À`À À1€����������������������������x0000000000þ000������������ ����€xà`0`00à?€0���€0À0À0À0À€à������������������������� ��������������xð0`0`0`0`0`0`0`0`8à7À3€0�0�0�0�p������������������x0000000000p���00�������Àà00000000000000p���00�������������� ��������������yð0à1À3€7�6�<�4�2�3�1€3à0�0�0�0�p������������������x000000000000000p���������������������������������xñà0`À0`À0`À0`À0`À0`À0`À0`À8ñÀ7Ï€s‡��������������������������������������� ��������������xð0`0`0`0`0`0`0`0`8à7Às€������������������������� ���������������9À0À````````````0À9À�������������������������� ����x�0�0�0�0�7�9À0À0`0`0`0`0`0`0À9Àw�������������������������� ����à�À�À�À�ÀÀ9À0À`À`À`À`À`À`À0À9ÀÀ���������������������������x00000000;7s����������������� ��������������|�c�A€€€�>�8�p�a�3�����������������������������2000000000þp0�������������� ��������������p`8à0`0`0`0`0`0`0`0`pà������������������������� ��������������������1�0€0€`€`Àñà�����������������������������������������������8�8�(�d�d�1d�0Â�0Â�`Â�`Ã�ñç€�������������������������������������� ��������������xð0`ÀÀ €�� �€À0`xð������������������������� ����à�ð��� �������1�0€0€`€`Àñà������������������������� ��������������€a€0€8��� ���C�a€€������������������������� ����€� � � � � � ����`���� � � � � ��€�����������������00000000000000000������������ ����p�� � � � � � ����€��� � � � � ��p���������������� ������������������������AÀcà>0��������������������������������������������������������� ��� ������������������� ���������� � ��?€8@h�d�d�d�b�b�!À1À€�€�€��������������������� ��������������sÀ_`< ������~�����À À€��������������� ��������������������`0wp?àÀ0`0`0`0`À?àwp`0���������������������������������À����à�à�€ € À@`0 p0ø|�����������������0000000���0000000������������ ������������€€€���8€0À À!À€����€ €������������������������������ff����������������������������������ø���0á€#¸€b ÀF�@D�@D�@D�@F�@b À#˜€0ñ€��ø�������������������������������~�vÌÌ| Ìx��������������� ���������������� ` À€3�3�€ À` ����������������������������������������������������øø����������������������������� ����������������������������������������������������������������������������������ø���0€#Œ€aÀA@A @Að@A@A@aÀ!€3ñ€��ø�������������������������������������~~���������������� �����������������������������������"�A�A�A�"�������������������������������øø�������øø���������������������������������üD 0 ŒL8�������������������pˆŒ 0ŒL8������������������������� ���������������� ���� �p�`� � �.p?`8à0`0`0`0`0`0`0`0`pà������������������������� ����€€€€€€€€€€€ €€<€<€|€|€|€<€<€€À�����������������������00���������������<f������������������������������������|P0��������������������~�<fffff<������������������ ����������������"�3�€ À`` À€3�"��������������������������������������������������� €"�2�� �}Ž�†�Â�`� �0��P�0 ����������������������������������������������?�� � ����}£�“�Î�`� �0��P�0 ������������������������������������������������ €"�2�� �qŽ�ˆ†�ŒÂ� `� �00��Œ�L �8������������������������ �����1€`€a€a€p�8��� � �������������������������������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€����� ��À�€��������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�������À��p��0������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�����`�À�€������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�������à����������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�������0�0���������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�À� � �À���������������������������������ùÿð0`0```�`�à€ `€€`€`€`�`�` ` à`ÿà�������������������������À`�`à€�€ð00�`�`�`�`�`�`�`�00ò�����������������������������ü ��  à  ��ø���€�� ��������������������ü ��  à  ��ø���€�à�`�������������������ü ��  à  ��ø��`À€�������������������ü ��  à  ��ø���� À À���������~~�p`�������~~� �������? ?�@3 �������~~��ff�����������������������������������à�8�������ÿ�������8�à���������������������������������������������|����2�2�b�Â�Â�‚�������x€������p�È���������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð����� ��À�€��������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð�����€��`��8��������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð�����0�à��À������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð�������p�È���������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð�������0�0���������������������������� 00` À€�€ À`00 ���������������������������������������������ð���4�2�a€a€`€`€`A€`A€`!€0#�0���ò��������������������������������������������ð�� ��������������~€���� ��À�€��������������������������������ð�� ��������������~€����€��`��8��������������������������������ð�� ��������������~€����0�à��À������������������������������ð�� ��������������~€���������������������������������à€€€€€€À@` 080 ü?����À�p�0�������������������~����à8   8à���~���������������� ��������������s€6@6`0`0`0à0À1À3€6�1€0À0À0À0À€���������������� ��������������8À}€c€a€a€1€€€€1€3€���� �8�0���������������� ��������������8À}€c€a€a€1€€€€1€3€�����€€��������������� ��������������8À}€c€a€a€1€€€€1€3€���!��� ���������������� ��������������8À}€c€a€a€1€€€€1€3€�����.������������������� ��������������8À}€c€a€a€1€€€€1€3€�����3�3������������������ ��������������8À}€c€a€a€1€€€€1€3€������������������������������������8x}ücÂa€a€1€€þ†1†3Ìx������������������������� ���3��� ���?€8@p�`�`�`�`�`� À1À€������������������������� ���������������?€8@p�`�`�`�À`À À1€���� �8�0���������������� ���������������?€8@p�`�`�`�À`À À1€�����€€��������������� ���������������?€8@p�`�`�`�À`À À1€���€ ������������������ ���������������?€8@p�`�`�`�À`À À1€�����€€�������������������x0000000000p�0àÀ������������x0000000000p�@0 ������������x0000000000p�„Hx0������������x0000000000p��ÌÌ������������������� ���������������9À0À````````````0À9À€c���8À`���������������� ��������������xð0`0`0`0`0`0`0`0`8à7Às€����€@����������������� ���������������9À0À````````````0À9À���������������������� ���������������9À0À````````````0À9À�����À�À��������������� ���������������9À0À````````````0À9À���€ ������������������ ���������������9À0À````````````0À9À�����€@����������������� ���������������9À0À````````````0À9À�����€€�����������������������������������������øø������������������������������� ������������`�o�9À8Àh`l`d`f`b`c`1À9À`�`����������������������� ��������������p`8à0`0`0`0`0`0`0`0`pà��������������������� ��������������p`8à0`0`0`0`0`0`0`0`pà����À�À��������������� ��������������p`8à0`0`0`0`0`0`0`0`pà��€ ������������������ ��������������p`8à0`0`0`0`0`0`0`0`pà����€€����������������� ����à�ð��� �������1�0€0€`€`Àñà����€€��������������� ����x�0�0�0�0�7�9À0À0`0`0`0`0`0`0À9À7�0�0�0�0�p���������������� ����à�ð��� �������1�0€0€`€`Àñà����3�3����������������������ˆ������ˆ������ˆ��� ���ˆ������ˆ������ˆ������ˆ������ˆ��� ���ˆ���$���ˆ���(���ˆ���,���ˆ���0���ˆ���4���ˆ���8���ˆ���<���ˆ���@���ˆ���D���ˆ���H���ˆ���L���ˆ���P���ˆ���T���ˆ���X���ˆ���\���ˆ���`���ˆ���d���ˆ���h���ˆ���l���ˆ���p���ˆ���t���ˆ���x���ˆ���|���ˆ���€���ˆ���„���ˆ���ˆ���ˆ���Œ���ˆ������ˆ���”���ˆ���˜���ˆ���œ���ˆ��� ���ˆ���¤���ˆ���¨���ˆ���¬���ˆ���°���ˆ���´���ˆ���¸���ˆ���¼���ˆ���À���ˆ���Ä���ˆ���È���ˆ���Ì���ˆ���Ð���ˆ���Ô���ˆ���Ø���ˆ���Ü���ˆ���à���ˆ���ä���ˆ���è���ˆ���ì���ˆ���ð���ˆ���ô���ˆ���ø���ˆ���ü���ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ���� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ���$ ��ˆ���( ��ˆ���, ��ˆ���0 ��ˆ���4 ��ˆ���8 ��ˆ���< ��ˆ���@ ��ˆ���D ��ˆ���H ��ˆ���L ��ˆ���P ��ˆ���T ��ˆ���X ��ˆ���\ ��ˆ���` ��ˆ���d ��ˆ���h ��ˆ���l ��ˆ���p ��ˆ���t ��ˆ���x ��ˆ���| ��ˆ���€ ��ˆ���„ ��ˆ���ˆ ��ˆ���Œ ��ˆ��� ��ˆ���” ��ˆ���˜ ��ˆ���œ ��ˆ���  ��ˆ���¤ ��ˆ���¨ ��ˆ���¬ ��ˆ���° ��ˆ���´ ��ˆ���¸ ��ˆ���¼ ��ˆ���À ��ˆ���Ä ��ˆ���È ��ˆ���Ì ��ˆ���Ð ��ˆ���Ô ��ˆ���Ø ��ˆ���Ü ��ˆ���à ��ˆ���ä ��ˆ���è ��ˆ���ì ��ˆ���ð ��ˆ���ô ��ˆ���ø ��ˆ���ü ��ˆ���� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ���$ ��ˆ���( ��ˆ���, ��ˆ���0 ��ˆ���4 ��ˆ���8 ��ˆ���< ��ˆ���@ ��ˆ���D ��ˆ���H ��ˆ���L ��ˆ���P ��ˆ���T ��ˆ���X ��ˆ���\ ��ˆ���` ��ˆ���d ��ˆ���h ��ˆ���l ��ˆ���p ��ˆ���t ��ˆ���x ��ˆ���| ��ˆ���€ ��ˆ���„ ��ˆ���ˆ ��ˆ���Œ ��ˆ��� ��ˆ���” ��ˆ���˜ ��ˆ���œ ��ˆ���  ��ˆ���¤ ��ˆ���¨ ��ˆ���¬ ��ˆ���° ��ˆ���´ ��ˆ���¸ ��ˆ���¼ ��ˆ���À ��ˆ���Ä ��ˆ���È ��ˆ���Ì ��ˆ���Ð ��ˆ���Ô ��ˆ���Ø ��ˆ���Ü ��ˆ���à ��ˆ���ä ��ˆ���è ��ˆ���ì ��ˆ���ð ��ˆ���ô ��ˆ���ø ��ˆ���ü ��ˆ���� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ���$ ��ˆ���( ��ˆ���, ��ˆ���0 ��ˆ���4 ��ˆ���8 ��ˆ���< ��ˆ���@ ��ˆ���D ��ˆ���H ��ˆ���L ��ˆ���P ��ˆ���T ��ˆ���X ��ˆ���\ ��ˆ���` ��ˆ���d ��ˆ���h ��ˆ���l ��ˆ���p ��ˆ���t ��ˆ���x ��ˆ���| ��ˆ���€ ��ˆ���„ ��ˆ���ˆ ��ˆ���Œ ��ˆ��� ��ˆ���” ��ˆ���˜ ��ˆ���œ ��ˆ���  ��ˆ���¤ ��ˆ���¨ ��ˆ���¬ ��ˆ���° ��ˆ���´ ��ˆ���¸ ��ˆ���¼ ��ˆ���À ��ˆ���Ä ��ˆ���È ��ˆ���Ì ��ˆ���Ð ��ˆ���Ô ��ˆ���Ø ��ˆ���Ü ��ˆ���à ��ˆ���ä ��ˆ���è ��ˆ���ì ��ˆ���ð ��ˆ���ô ��ˆ���ø ��ˆ���ü ��ˆ���� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ���$ ��ˆ���( ��ˆ���, ��ˆ���0 ��ˆ���4 ��ˆ���8 ��ˆ���< ��ˆ���` ��ˆ���d ��ˆ���h ��ˆ���l ��ˆ���p ��ˆ���t ��ˆ���x ��ˆ���| ��ˆ���€ ��ˆ���„ ��ˆ���ˆ ��ˆ���Œ ��ˆ��� ��ˆ���” ��ˆ���˜ ��ˆ���œ ��ˆ���  ��ˆ���¤ ��ˆ���¨ ��ˆ���¬ ��ˆ���° ��ˆ���´ ��ˆ���¸ ��ˆ���¼ ��ˆ���À ��ˆ���Ä ��ˆ���È ��ˆ���Ì ��ˆ���Ð ��ˆ���Ô ��ˆ���Ø ��ˆ���Ü ��ˆ���à ��ˆ���ä ��ˆ���è ��ˆ���ì ��ˆ���ð ��ˆ���ô ��ˆ���ø ��ˆ���ü ��ˆ���� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ��� ��ˆ���$ ��ˆ���( ��ˆ���, ��ˆ���0 ��ˆ���4 ��ˆ���8 ��ˆ���< ��ˆ���@ ��ˆ���D ��ˆ���H ��ˆ���L ��ˆ���P ��ˆ���T ��ˆ���X ��ˆ���\ ��ˆ���` ��ˆ���d ��ˆ���h ��ˆ���l ��ˆ���p ��ˆ���t ��ˆ���x ��ˆ���| ��ˆ���€ ��ˆ���„ ��ˆ���ˆ ��ˆ���Œ ��ˆ��� ��ˆ���” ��ˆ���˜ ��ˆ���œ ��ˆ���  ��ˆ���¤ ��ˆ���¨ ��ˆ���¬ ��ˆ���° ��ˆ���´ ��ˆ���¸ ��ˆ���¼ ��ˆ���À ��ˆ���Ä ��ˆ���È ��ˆ���Ì ��ˆ���Ð ��ˆ���Ô ��ˆ���Ø ��ˆ���Ü ��ˆ���à ��ˆ���ä ��ˆ���è ��ˆ���ì ��ˆ���ð ��ˆ���ô ��ˆ���ø ��ˆ���ü ��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���À��ˆ���Ä��ˆ���È��ˆ���Ì��ˆ���Ð��ˆ���Ô��ˆ���Ø��ˆ���Ü��ˆ���à��ˆ���ä��ˆ���è��ˆ���ì��ˆ���ð��ˆ���ô��ˆ���ø��ˆ���ü��ˆ������ˆ�����ˆ�����ˆ��� ��ˆ�����ˆ�����ˆ�����ˆ�����ˆ��� ��ˆ���$��ˆ���(��ˆ���,��ˆ���0��ˆ���4��ˆ���8��ˆ���<��ˆ���@��ˆ���D��ˆ���H��ˆ���L��ˆ���P��ˆ���T��ˆ���X��ˆ���\��ˆ���`��ˆ���d��ˆ���h��ˆ���l��ˆ���p��ˆ���t��ˆ���x��ˆ���|��ˆ���€��ˆ���„��ˆ���ˆ��ˆ���Œ��ˆ�����ˆ���”��ˆ���˜��ˆ���œ��ˆ��� ��ˆ���¤��ˆ���¨��ˆ���¬��ˆ���°��ˆ���´��ˆ���¸��ˆ���¼��ˆ���<���ˆ���H���„������ˆ���œ���„���è���ˆ���ô���„���@��ˆ���L��„���˜��ˆ���¤��„���ì��ˆ���ø��„���@��ˆ���L��„���.file�������þÿ��g������������������������������������2��� ����������K���@����������f���` �������������€����������œ��� ����������¸���À����������Ô���X����������í���g������������v������������…����������8��”����������Q��£����������j��²����������ƒ��Á����������œ��Ð����������µ��ß����������Î��î����������ç��ý������������� ����������������������2��*����������K��9����������d��H����������}��W����������–��f����������¯��u����������È��„����������á��“����������ú��¢������������±����������,��À����������E��Ï����������^��Þ����������w��í������������ü����������©�� ����������Â������������Û��)����������ô��8���������� ��G����������&��V����������?��e����������X��t����������q��ƒ����������Š��’����������£��¡����������¼��°����������Õ��¿����������î��Î������������Ý���������� ��ì����������9��û����������R�� ����������k������������„��(������������7����������¶��F����������Ï��U����������è��d������������s������������‚����������3��‘����������L�� ����������e��¯����������~��¾����������—��Í����������°��Ü����������É��ë����������â��ú����������û�� ����������������������-��'����������F��6����������_��E����������x��T����������‘��c����������ª��r����������Ã������������Ü������������õ��Ÿ������������®����������'��½����������@��Ì����������Y��Û����������r��ê����������‹��ù����������¤������������½������������Ö��&����������ï��5���������� ��D����������! ��S����������: ��b����������S ��q����������l ��€����������… ������������ž ��ž����������· ��­����������Ð ��¼����������é ��Ë���������� ��Ú���������� ��é����������4 ��ø����������M ������������f ������������ ��%����������˜ ��4����������± ��C����������Ê ��R����������ã ��a����������ü ��p���������� ������������. ��Ž����������G ������������` ��¬����������y ��»����������’ ��Ê����������« ��Ù����������Ä ��è����������Ý ��÷����������ö �� ���������� �� ����������( ��$ ����������A ��3 ����������Z ��B ����������s ��Q ����������Œ ��` ����������¥ ��o ����������¾ ��~ ����������× �� ����������ð ��œ ���������� ��« ����������" ��º ����������; ��É ����������T ��Ø ����������m ��ç ����������† ��ö ����������Ÿ �� ����������¸ �� ����������Ñ ��# ����������ê ��2 ������������A ������������P ����������5��_ ����������N��n ����������g��} ����������€��Œ ����������™��› ����������²��ª ����������Ë��¹ ����������ä��È ����������ý��× ������������æ ����������/��õ ����������H�� ����������a�� ����������z��" ����������“��1 ����������¬��@ ����������Å��O ����������Þ��^ ����������÷��m ������������| ����������)��‹ ����������B��š ����������[��© ����������t��¸ ������������Ç ����������¦��Ö ����������¿��å ����������Ø��ô ����������ñ�� ���������� �� ����������#��! ����������<��0 ����������U��? ����������n��N ����������‡��] ���������� ��l ����������¹��{ ����������Ò��Š ����������ë��™ ������������¨ ������������· ����������6��Æ ����������O��Õ ����������h��ä ������������ó ����������š�� ����������³�� ����������Ì�� ����������å��/ ����������þ��> ������������M ����������0��\ ����������I��k ����������b��z ����������{��‰ ����������”��˜ ����������­��§ ����������Æ��¶ ����������ß��Å ����������ø��Ô ������������ã ����������*��ò ����������C������������\������������u������������Ž��.����������§��=����������À��L����������Ù��[����������ò��j���������� ��y����������$��ˆ����������=��—����������V��¦����������o��µ����������ˆ��Ä����������¡��Ó����������º��â����������Ó��ñ����������ì�������������������������������������7��-����������P��<����������i��K����������‚��Z����������›��€����������´��À����������Í�������������æ��@����������ÿ��€������������À����������1�������������J��@����������c��€����������|��À����������•�������������®��@����������Ç��€����������à��À����������ù���������������@����������+��€����������D��À����������]�������������v��@������������€����������¨��À����������Á�������������Ú��@����������ó��€���������� ��À����������%�������������>��@����������W��€����������p��À����������‰�������������¢��@����������»��€����������Ô��À����������í���������������@������������€����������8��À����������Q�������������j��@����������ƒ��€����������œ��À����������µ�������������Î��@����������ç��€�������������À�����������������������2��@����������K��€����������d��À����������}�������������–��@����������¯��€����������È��À����������á�������������ú��@������������€����������,��À����������E�������������^��@����������w��€������������À����������©�������������Â��@����������Û��€����������ô��À���������� ��� ����������&��@ ����������?��€ ����������X��À ����������q���!����������Š��@!����������£��€!����������¼��À!����������Õ���"����������î��@"������������€"���������� ��À"����������9���#����������R��@#����������k��€#����������„��À#�������������$����������¶��@$����������Ï��€$����������è��À$�������������%������������@%����������3��€%����������L��À%����������e���&����������~��@&����������—��€&����������°��À&����������É���'����������â��@'����������û��€'���������� ��À'����������- ���(����������F ��@(����������_ ��€(����������x ��À(����������‘ ���)����������ª ��@)����������à ��€)����������Ü ��À)����������õ ���*����������!��@*����������'!��€*����������@!��À*����������Y!���+����������r!��@+����������‹!��€+����������¤!��À+����������½!���,����������Ö!��@,����������ï!��€,����������"��À,����������!"���-����������:"��@-����������S"��€-����������l"��À-����������…"���.����������ž"��@.����������·"��€.����������Ð"��À.����������é"���/����������#��@/����������#��€/����������4#��À/����������M#���0����������f#��@0����������#��€0����������˜#��À0����������±#���1����������Ê#��@1����������ã#��€1����������ü#��À1����������$���2����������.$��@2����������G$��€2����������`$��À2����������y$���3����������’$��@3����������«$��€3����������Ä$��À3����������Ý$���4����������ö$��@4����������%��€4����������(%��À4����������A%���5����������Z%��@5����������s%��€5����������Œ%��À5����������¥%���6����������¾%��@6����������×%��€6����������ð%��À6���������� &���7����������"&��@7����������;&��€7����������T&��À7����������m&���8����������†&��@8����������Ÿ&��€8����������¸&��À8����������Ñ&���9����������ê&��@9����������'��€9����������'��À9����������5'���:����������N'��@:����������g'��€:����������€'��À:����������™'���;����������²'��@;����������Ë'��€;����������ä'��À;����������ý'���<����������(��@<����������/(��€<����������H(��À<����������a(���=����������z(��@=����������“(��€=����������¬(��À=����������Å(���>����������Þ(��@>����������÷(��€>����������)��À>����������))���?����������B)��@?����������[)��€?����������t)��À?����������)���@����������¦)��@@����������¿)��€@����������Ø)��À@����������ñ)���A���������� *��@A����������#*��€A����������<*��ÀA����������U*���B����������n*��@B����������‡*��€B���������� *��ÀB����������¹*���C����������Ò*��@C����������ë*��€C����������+��ÀC����������+���D����������6+��@D����������O+��€D����������h+��ÀD����������+���E����������š+��@E����������³+��€E����������Ì+��ÀE����������å+���F����������þ+��@F����������,��€F����������0,��ÀF����������I,���G����������b,��!G����������},��0G����������˜,��?G����������³,��NG����������Î,��]G����������é,��lG����������-��‰G����������-��˜G����������:-��§G����������U-��¶G����������p-��ÅG����������‹-��ÔG����������¦-��ãG����������Á-��òG����������Ü-��H����������÷-��H����������.��H����������-.��.H����������H.��=H����������c.��LH����������~.��[H����������™.��jH����������´.��yH����������Ï.��ˆH����������ê.��—H����������/��¦H���������� /��µH����������;/��ÄH����������V/��ÓH����������q/��âH����������Œ/��ñH����������§/���I����������Â/��I����������Ý/��,I����������ø/��;I����������0��JI����������.0��YI����������I0��hI����������d0��wI����������0��†I����������š0��•I����������µ0��¤I����������Ð0��³I����������ë0��ÂI����������1��ÑI����������!1��àI����������<1��ýI����������W1�� J����������r1��J����������1��*J����������¨1��9J����������Ã1��HJ����������Þ1��WJ����������ù1��fJ����������2��uJ����������/2��„J����������J2��¡J����������e2��°J����������€2��¿J����������›2��ÎJ����������¶2��ÝJ����������Ñ2��ìJ����������ì2��ûJ����������3�� K����������"3��K����������=3��(K����������X3��7K����������s3��FK����������Ž3��UK����������©3��dK����������Ä3��sK����������ß3��‚K����������ú3��‘K����������4�� K����������04��¯K����������K4��¾K����������f4��ÍK����������4��ÜK����������œ4��ëK����������·4��úK����������Ò4�� L����������í4��L����������5��'L����������#5��6L����������>5��EL����������Y5��TL����������t5��cL����������5��rL����������ª5��L����������Å5��L����������à5��ŸL����������û5��®L����������6��½L����������16��ÌL����������L6��ÛL����������g6��êL����������‚6��ùL����������6��M����������¸6��M����������Ó6��&M����������î6��5M���������� 7��DM����������$7��SM����������?7��bM����������Z7��qM����������u7��ŽM����������7��M����������«7��¬M����������Æ7��»M����������á7��ÊM����������ü7��çM����������8��öM����������28��N����������M8��N����������h8��#N����������ƒ8��2N����������ž8��AN����������¹8��PN����������Ô8��_N����������ï8��nN���������� 9��}N����������%9��ŒN����������@9��›N����������[9��ªN����������v9��ÇN����������‘9��äN����������¬9��O����������Ç9��O����������â9��O����������ý9��.O����������:��=O����������3:��LO����������N:��[O����������i:��jO����������„:��‡O����������Ÿ:��–O����������º:��¥O����������Õ:��´O����������ð:��ÃO���������� ;��ÒO����������&;��áO����������A;��ðO����������\;��ÿO����������w;��P����������’;��P����������­;��,P����������È;��;P����������ã;��JP����������þ;��YP����������<��hP����������4<��wP����������O<��†P����������j<��•P����������…<��¤P���������� <��³P����������»<��ÂP����������Ö<��ÑP����������ñ<��àP���������� =��ïP����������'=��þP����������B=�� Q����������]=��Q����������x=��+Q����������“=��:Q����������®=��IQ����������É=��XQ����������ä=��gQ����������ÿ=��vQ����������>��…Q����������5>��”Q����������P>��£Q����������k>��²Q����������†>��ÁQ����������¡>��ÐQ����������¼>��ßQ����������×>��îQ����������ò>��ýQ���������� ?�� R����������(?��R����������C?��*R����������^?��9R����������y?��HR����������”?��WR����������¯?��fR����������Ê?��uR����������å?��„R�����������@��“R����������@��¢R����������6@��±R����������Q@��ÀR����������l@��ÏR����������‡@��ÞR����������¢@��ïR����������½@���S����������Ø@��S����������ó@��"S����������A��@S����������)A��€S����������DA��¡S����������_A��²S����������zA��ÃS����������•A��ÔS����������°A��åS����������ËA��öS����������æA��T����������B��T����������B��)T����������7B��:T����������RB��KT����������mB��\T����������ˆB��mT����������£B��~T����������¾B��T����������ÙB�� T����������ôB��±T����������C��ÂT����������*C��ÓT����������EC��äT����������`C��õT����������{C��U����������–C��U����������±C��(U����������ÌC��9U����������çC��`U����������D�� U����������D��ÁU����������8D��àU����������SD�� V����������nD��AV����������‰D��RV����������¤D��€V����������¿D��ÀV����������ÚD��áV����������õD��òV����������E��W����������+E��W����������FE��@W����������aE��€W����������|E��ÀW����������—E��áW����������²E���X����������ÍE��!X����������èE��2X����������F��CX����������F��TX����������9F��€X����������TF��ÀX����������oF���Y����������ŠF��@Y����������¥F��€Y����������ÀF��¡Y����������ÛF��²Y����������öF��ÃY����������G��ÔY����������,G��åY����������GG��öY����������bG��Z����������}G��Z����������˜G��)Z����������³G��:Z����������ÎG��KZ����������éG��\Z����������H��mZ����������H��~Z����������:H��Z����������UH�� Z����������pH��±Z����������‹H��ÂZ����������¦H��àZ����������ÁH��[����������ÜH��[����������÷H��#[����������I��4[����������-I��E[����������HI��V[����������cI��g[����������~I��x[����������™I��‰[����������´I�� [����������ÏI��Á[����������êI��Ò[����������J��ã[���������� J��ô[����������;J��\����������VJ��\����������qJ��'\����������ŒJ��8\����������§J��I\����������ÂJ��Z\����������ÝJ��k\����������øJ��|\����������K��\����������.K��ž\����������IK��¯\����������dK��À\����������K��à\����������šK��]����������µK��]����������ÐK��#]����������ëK��4]����������L��`]����������!L��]����������<L��’]����������WL��£]����������rL��´]����������L��Å]����������¨L��Ö]����������ÃL��ç]����������ÞL��ø]����������ùL�� ^����������M��^����������/M��+^����������JM��<^����������eM��M^����������€M��`^����������›M�� ^����������¶M��à^����������ÑM��_����������ìM�� _����������N��`_����������"N�� _����������=N��à_����������XN�� `����������sN��``����������ŽN�� `����������©N��à`����������ÄN��a����������ßN��a����������úN��#a����������O��4a����������0O��Ea����������KO��Va����������fO��ga����������O��xa����������œO�� a����������·O��àa����������ÒO�� b����������íO��`b����������P�� b����������#P��àb����������>P�� c����������YP��Ac����������tP��`c����������P��c����������ªP��’c����������ÅP��£c����������àP��´c����������ûP��àc����������Q��d����������1Q��d����������LQ��#d����������gQ��4d����������‚Q��Ed����������Q��Vd����������¸Q��gd����������ÓQ��xd����������îQ�� d���������� R��Ád����������$R��Òd����������?R��ãd����������ZR��ôd����������uR��e����������R��e����������«R��'e����������ÆR��8e����������áR��Ie����������üR��Ze����������S��ke����������2S��|e����������MS��e����������hS��že����������ƒS��¯e����������žS��Àe����������¹S��Ñe����������ÔS��âe����������ïS��óe���������� T��f����������%T��f����������@T��&f����������[T��7f����������vT��Hf����������‘T��Yf����������¬T��jf����������ÇT��‚f����������âT��šf����������ýT��Àf����������U���g����������3U��@g����������NU��€g����������iU��¯g����������„U��Çg����������ŸU��ßg����������ºU��÷g����������ÕU�� h����������ðU��Oh���������� V��€h����������&V��¯h����������AV��Çh����������\V��àh����������wV�� i����������’V��`i����������­V�� i����������ÈV��ài����������ãV�� j����������þV��`j����������W�� j����������4W��àj����������OW�� k����������jW��Ok����������…W��gk���������� W��€k����������»W��Àk����������ÖW���l����������ñW��@l���������� X��€l����������'X��àl����������BX�� m����������]X��`m����������xX�� m����������“X��àm����������®X�� n����������ÉX��`n����������äX�� n����������ÿX��Ïn����������Y���o����������5Y��@o����������PY��€o����������kY��Ào����������†Y���p����������¡Y��@p����������¼Y��€p����������×Y��Àp����������òY���q���������� Z��@q����������(Z��€q����������CZ��Àq����������^Z���r����������yZ��@r����������”Z�� r����������¯Z��àr����������ÊZ�� s����������åZ��Os�����������[��gs����������[��s����������6[�� s����������Q[��às����������l[��t����������‡[��@t����������¢[��€t����������½[��Àt����������Ø[���u����������ó[��@u����������\��ou����������)\�� u����������D\��àu����������_\��v����������z\��'v����������•\��@v����������°\��ov����������Ë\�� v����������æ\��àv����������]�� w����������]��`w����������7]�� w����������R]��Ïw����������m]���x����������ˆ]��/x����������£]��`x����������¾]�� x����������Ù]��àx����������ô]�� y����������^��`y����������*^�� y����������E^��Ïy����������`^��çy����������{^��ÿy����������–^�� z����������±^��Oz����������Ì^��gz����������ç^��€z����������_��Àz����������_���{����������8_��@{����������S_��o{����������n_�� {����������‰_��Ï{����������¤_���|����������¿_��/|����������Ú_��`|����������õ_�� |����������`��Ï|����������+`���}����������F`��/}����������a`��G}����������|`��`}����������—`��}����������²`��§}����������Í`��¿}����������è`��à}����������a�� ~����������a��O~����������9a��g~����������Ta��~����������oa��—~����������Ša��À~����������¥a�������������Àa��@����������Ûa��€����������öa��À����������b���€����������,b��@€����������Gb��€€����������bb��À€����������}b�������������˜b��@����������³b��€����������Îb��à����������éb�� ‚����������c��`‚����������c�� ‚����������:c��à‚����������Uc��ƒ����������pc��'ƒ����������‹c��?ƒ����������¦c��Wƒ����������Ác��€ƒ����������Üc��Àƒ����������÷c���„����������d��@„����������-d��€„����������Hd��À„����������cd���…����������~d��@…����������™d��€…����������´d��À…����������Ïd���†����������êd��@†����������e��€†���������� e��À†����������;e���‡����������Ve��@‡����������qe��€‡����������Œe��À‡����������§e���ˆ����������Âe��@ˆ����������Ýe��€ˆ����������øe��Àˆ����������f���‰����������.f��@‰����������If��€‰����������df��À‰����������f���Š����������šf��@Š����������µf��oŠ����������Ðf��‡Š����������ëf��ŸŠ����������g��·Š����������!g��àŠ����������<g�� ‹����������Wg��`‹����������rg�� ‹����������g��à‹����������¨g�� Œ����������Ãg��`Œ����������Þg�� Œ����������ùg��àŒ����������h�� ����������/h��`����������Jh�� ����������eh��à����������€h�� Ž����������›h��`Ž����������¶h�� Ž����������Ñh��ÏŽ����������íh��ÞŽ���������� i��íŽ����������%i��üŽ����������Ai�� ����������]i������������yi��)����������•i��8����������±i��G����������Íi��V����������éi��e����������j��t����������!j��ƒ����������=j��’����������Yj��¡����������uj��°����������‘j��¿����������­j��Î����������Éj��Ý����������åj��ì����������k��û����������k�� ����������9k������������Uk��(����������qk��7����������k��F����������©k��U����������Åk��d����������ák��s����������ýk��‚����������l��‘����������5l�� ����������Ql��¯����������ml��Ì����������‰l��Û����������¥l��ê����������Ál��ù����������Ýl��‘����������ùl��‘����������m��&‘����������1m��5‘����������Mm��D‘����������im��S‘����������…m��b‘����������¡m��q‘����������½m��€‘����������Ùm��‘����������õm��¬‘����������n��»‘����������-n��Ê‘����������In��Ù‘����������en��è‘����������n��÷‘����������n��’����������¹n��’����������Õn��$’����������ñn��A’���������� o��P’����������)o��_’����������Eo��n’����������ao��}’����������}o��Œ’����������™o��›’����������µo��ª’����������Ño��¹’����������ío��È’���������� p��×’����������%p��æ’����������Ap��õ’����������]p��“����������yp��“����������•p��"“����������±p��1“����������Íp��@“����������ép��O“����������q��^“����������!q��m“����������=q��|“����������Yq��‹“����������uq��š“����������‘q��©“����������­q��¸“����������Éq��Ç“����������åq��Ö“����������r��å“����������r��ô“����������9r��”����������Ur��”����������qr��!”����������r��0”����������©r��?”����������År��N”����������ár��]”����������ýr��l”����������s��{”����������5s��Š”����������Qs��™”����������ms��¨”����������‰s��·”����������¥s��Æ”����������Ás��Õ”����������Ýs��ä”����������ùs��ó”����������t��•����������1t��•����������Mt��.•����������it��=•����������…t��L•����������¡t��[•����������½t��j•����������Ùt��‡•����������õt��–•����������u��¥•����������-u��´•����������Iu��Õ����������eu��Ò•����������u��á•����������u��ð•����������¹u��ÿ•����������Õu��–����������ñu��–���������� v��,–����������)v��;–����������Ev��J–����������av��Y–����������}v��h–����������™v��w–����������µv��†–����������Ñv��•–����������ív��¤–���������� w��³–����������%w��–����������Aw��Ñ–����������]w��à–����������yw��ý–����������•w�� —����������±w��—����������Íw��*—����������éw��9—����������x��H—����������!x��W—����������=x��f—����������Yx��u—����������ux��„—����������‘x��“—����������­x��¢—����������Éx��±—����������åx��À—����������y��Ï—����������y��Þ—����������9y��í—����������Uy��ü—����������qy�� ˜����������y��˜����������©y��)˜����������Åy��8˜����������áy��G˜����������ýy��V˜����������z��e˜����������5z��t˜����������Qz��ƒ˜����������mz��’˜����������‰z��¡˜����������¥z��°˜����������Áz��¿˜����������Ýz��Θ����������ùz��ݘ����������{��ì˜����������1{��û˜����������M{�� ™����������i{��™����������…{��(™����������¡{��7™����������½{��F™����������Ù{��U™����������õ{��d™����������|��s™����������-|��‚™����������I|��‘™����������e|�� ™����������|��¯™����������|��¾™����������¹|��Í™����������Õ|��Ü™����������ñ|��ë™���������� }��ú™����������)}�� š����������E}��š����������a}��'š����������}}��6š����������™}��Eš����������µ}��Tš����������Ñ}��rš����������í}�� š���������� ~��àš����������%~�� ›����������A~��`›����������]~��À›����������y~��œ����������•~��6œ����������±~��Tœ����������Í~��€œ����������é~��Àœ������������ûœ����������!�� ����������=��[����������Y��y����������u�� ����������‘��à����������­�� ž����������É��`ž����������å�� ž����������€��àž����������€�� Ÿ����������9€��`Ÿ����������U€�� Ÿ����������q€��àŸ����������€�� ����������©€��9 ����������Å€��` ����������á€��  ����������ý€��à ������������ ¡����������5��`¡����������Q��À¡����������m�� ¢����������‰��`¢����������¥�� ¢����������Á���£����������Ý��@£����������ù��€£����������‚��à£����������1‚��8¤����������M‚��`¤����������i‚�� ¤����������…‚���¥����������¡‚��@¥����������½‚�� ¥����������Ù‚���¦����������õ‚��`¦����������ƒ�� ¦����������-ƒ���§����������Iƒ��@§����������eƒ��€§����������ƒ��À§����������ƒ�� ¨����������¹ƒ��€¨����������Õƒ��à¨����������ñƒ��@©���������� „��€©����������)„��»©����������E„��Ù©����������a„��÷©����������}„�� ª����������™„��`ª����������µ„��›ª����������Ñ„��Àª����������í„���«���������� …��@«����������%…��€«����������A…��À«����������]…��û«����������y…�� ¬����������•…��`¬����������±…��›¬����������Í…��¹¬����������é…��à¬����������†��­����������!†��@­����������=†�� ­����������Y†��à­����������u†�� ®����������‘†��`®����������­†��›®����������Ɇ��À®����������å†��û®����������‡�� ¯����������‡��`¯����������9‡�� ¯����������U‡���°����������q‡��@°����������‡��€°����������©‡��À°����������Ň��û°����������á‡�� ±����������ý‡��`±����������ˆ��›±����������5ˆ��¹±����������Qˆ��à±����������mˆ�� ²����������‰ˆ��`²����������¥ˆ�� ²����������Áˆ��Û²����������݈���³����������ùˆ��;³����������‰��`³����������1‰��¸³����������M‰��à³����������i‰�� ´����������…‰��`´����������¡‰�� ´����������½‰��ø´����������Ù‰�� µ����������õ‰��`µ����������Š��›µ����������-Š��¹µ����������IŠ��×µ����������eŠ���¶����������Š��@¶����������Š��{¶����������¹Š��™¶����������ÕŠ��·¶����������ñŠ��Õ¶���������� ‹���·����������)‹��@·����������E‹�� ·����������a‹���¸����������}‹��`¸����������™‹�� ¸����������µ‹���¹����������Ñ‹��`¹����������í‹��À¹���������� Œ�� º����������%Œ��€º����������AŒ��àº����������]Œ��@»����������yŒ��€»����������•Œ��À»����������±Œ���¼����������ÍŒ��@¼����������éŒ��{¼������������™¼����������!��·¼����������=��Õ¼����������Y���½����������u��`½����������‘��À½����������­�� ¾����������É��€¾����������å��à¾����������Ž��@¿����������Ž�� ¿����������9Ž��à¿����������UŽ��@À����������qŽ�� À����������Ž���Á����������©Ž��`Á����������ÅŽ��ÀÁ����������áŽ���Â����������ýŽ��@Â������������€Â����������5��ÀÂ����������Q���Ã����������m��@Ã����������‰��€Ã����������¥��ÀÃ����������Á���Ä����������Ý��@Ä����������ù��€Ä������������ÀÄ����������1���Å����������M��@Å����������i��{Å����������…��™Å����������¡��·Å����������½��ÕÅ����������Ù���Æ����������õ��@Æ����������‘��€Æ����������-‘��ÀÆ����������I‘���Ç����������e‘��@Ç����������‘��€Ç����������‘��ÀÇ����������¹‘���È����������Õ‘��@È����������ñ‘��€È���������� ’��ÀÈ����������)’���É����������E’��@É����������a’��€É����������}’��ÀÉ������.text����������������������������.data����������Ä���������������.bss�����������������������������.rdata���������ûÉ�������������������™’��<�����������ª’�������������»’��è�����������Î’��@����������á’��˜����������ô’��ì����������“��@������“��freeglut_font_data.c�_Fixed8x13_Character_Map�_Fixed9x15_Character_Map�_Helvetica10_Character_Map�_Helvetica12_Character_Map�_Helvetica18_Character_Map�_TimesRoman10_Character_Map�_TimesRoman24_Character_Map�_Fixed8x13_Character_000�_Fixed8x13_Character_001�_Fixed8x13_Character_002�_Fixed8x13_Character_003�_Fixed8x13_Character_004�_Fixed8x13_Character_005�_Fixed8x13_Character_006�_Fixed8x13_Character_007�_Fixed8x13_Character_008�_Fixed8x13_Character_009�_Fixed8x13_Character_010�_Fixed8x13_Character_011�_Fixed8x13_Character_012�_Fixed8x13_Character_013�_Fixed8x13_Character_014�_Fixed8x13_Character_015�_Fixed8x13_Character_016�_Fixed8x13_Character_017�_Fixed8x13_Character_018�_Fixed8x13_Character_019�_Fixed8x13_Character_020�_Fixed8x13_Character_021�_Fixed8x13_Character_022�_Fixed8x13_Character_023�_Fixed8x13_Character_024�_Fixed8x13_Character_025�_Fixed8x13_Character_026�_Fixed8x13_Character_027�_Fixed8x13_Character_028�_Fixed8x13_Character_029�_Fixed8x13_Character_030�_Fixed8x13_Character_031�_Fixed8x13_Character_032�_Fixed8x13_Character_033�_Fixed8x13_Character_034�_Fixed8x13_Character_035�_Fixed8x13_Character_036�_Fixed8x13_Character_037�_Fixed8x13_Character_038�_Fixed8x13_Character_039�_Fixed8x13_Character_040�_Fixed8x13_Character_041�_Fixed8x13_Character_042�_Fixed8x13_Character_043�_Fixed8x13_Character_044�_Fixed8x13_Character_045�_Fixed8x13_Character_046�_Fixed8x13_Character_047�_Fixed8x13_Character_048�_Fixed8x13_Character_049�_Fixed8x13_Character_050�_Fixed8x13_Character_051�_Fixed8x13_Character_052�_Fixed8x13_Character_053�_Fixed8x13_Character_054�_Fixed8x13_Character_055�_Fixed8x13_Character_056�_Fixed8x13_Character_057�_Fixed8x13_Character_058�_Fixed8x13_Character_059�_Fixed8x13_Character_060�_Fixed8x13_Character_061�_Fixed8x13_Character_062�_Fixed8x13_Character_063�_Fixed8x13_Character_064�_Fixed8x13_Character_065�_Fixed8x13_Character_066�_Fixed8x13_Character_067�_Fixed8x13_Character_068�_Fixed8x13_Character_069�_Fixed8x13_Character_070�_Fixed8x13_Character_071�_Fixed8x13_Character_072�_Fixed8x13_Character_073�_Fixed8x13_Character_074�_Fixed8x13_Character_075�_Fixed8x13_Character_076�_Fixed8x13_Character_077�_Fixed8x13_Character_078�_Fixed8x13_Character_079�_Fixed8x13_Character_080�_Fixed8x13_Character_081�_Fixed8x13_Character_082�_Fixed8x13_Character_083�_Fixed8x13_Character_084�_Fixed8x13_Character_085�_Fixed8x13_Character_086�_Fixed8x13_Character_087�_Fixed8x13_Character_088�_Fixed8x13_Character_089�_Fixed8x13_Character_090�_Fixed8x13_Character_091�_Fixed8x13_Character_092�_Fixed8x13_Character_093�_Fixed8x13_Character_094�_Fixed8x13_Character_095�_Fixed8x13_Character_096�_Fixed8x13_Character_097�_Fixed8x13_Character_098�_Fixed8x13_Character_099�_Fixed8x13_Character_100�_Fixed8x13_Character_101�_Fixed8x13_Character_102�_Fixed8x13_Character_103�_Fixed8x13_Character_104�_Fixed8x13_Character_105�_Fixed8x13_Character_106�_Fixed8x13_Character_107�_Fixed8x13_Character_108�_Fixed8x13_Character_109�_Fixed8x13_Character_110�_Fixed8x13_Character_111�_Fixed8x13_Character_112�_Fixed8x13_Character_113�_Fixed8x13_Character_114�_Fixed8x13_Character_115�_Fixed8x13_Character_116�_Fixed8x13_Character_117�_Fixed8x13_Character_118�_Fixed8x13_Character_119�_Fixed8x13_Character_120�_Fixed8x13_Character_121�_Fixed8x13_Character_122�_Fixed8x13_Character_123�_Fixed8x13_Character_124�_Fixed8x13_Character_125�_Fixed8x13_Character_126�_Fixed8x13_Character_160�_Fixed8x13_Character_161�_Fixed8x13_Character_162�_Fixed8x13_Character_163�_Fixed8x13_Character_164�_Fixed8x13_Character_165�_Fixed8x13_Character_166�_Fixed8x13_Character_167�_Fixed8x13_Character_168�_Fixed8x13_Character_169�_Fixed8x13_Character_170�_Fixed8x13_Character_171�_Fixed8x13_Character_172�_Fixed8x13_Character_173�_Fixed8x13_Character_174�_Fixed8x13_Character_175�_Fixed8x13_Character_176�_Fixed8x13_Character_177�_Fixed8x13_Character_178�_Fixed8x13_Character_179�_Fixed8x13_Character_180�_Fixed8x13_Character_181�_Fixed8x13_Character_182�_Fixed8x13_Character_183�_Fixed8x13_Character_184�_Fixed8x13_Character_185�_Fixed8x13_Character_186�_Fixed8x13_Character_187�_Fixed8x13_Character_188�_Fixed8x13_Character_189�_Fixed8x13_Character_190�_Fixed8x13_Character_191�_Fixed8x13_Character_192�_Fixed8x13_Character_193�_Fixed8x13_Character_194�_Fixed8x13_Character_195�_Fixed8x13_Character_196�_Fixed8x13_Character_197�_Fixed8x13_Character_198�_Fixed8x13_Character_199�_Fixed8x13_Character_200�_Fixed8x13_Character_201�_Fixed8x13_Character_202�_Fixed8x13_Character_203�_Fixed8x13_Character_204�_Fixed8x13_Character_205�_Fixed8x13_Character_206�_Fixed8x13_Character_207�_Fixed8x13_Character_208�_Fixed8x13_Character_209�_Fixed8x13_Character_210�_Fixed8x13_Character_211�_Fixed8x13_Character_212�_Fixed8x13_Character_213�_Fixed8x13_Character_214�_Fixed8x13_Character_215�_Fixed8x13_Character_216�_Fixed8x13_Character_217�_Fixed8x13_Character_218�_Fixed8x13_Character_219�_Fixed8x13_Character_220�_Fixed8x13_Character_221�_Fixed8x13_Character_222�_Fixed8x13_Character_223�_Fixed8x13_Character_224�_Fixed8x13_Character_225�_Fixed8x13_Character_226�_Fixed8x13_Character_227�_Fixed8x13_Character_228�_Fixed8x13_Character_229�_Fixed8x13_Character_230�_Fixed8x13_Character_231�_Fixed8x13_Character_232�_Fixed8x13_Character_233�_Fixed8x13_Character_234�_Fixed8x13_Character_235�_Fixed8x13_Character_236�_Fixed8x13_Character_237�_Fixed8x13_Character_238�_Fixed8x13_Character_239�_Fixed8x13_Character_240�_Fixed8x13_Character_241�_Fixed8x13_Character_242�_Fixed8x13_Character_243�_Fixed8x13_Character_244�_Fixed8x13_Character_245�_Fixed8x13_Character_246�_Fixed8x13_Character_247�_Fixed8x13_Character_248�_Fixed8x13_Character_249�_Fixed8x13_Character_250�_Fixed8x13_Character_251�_Fixed8x13_Character_252�_Fixed8x13_Character_253�_Fixed8x13_Character_254�_Fixed8x13_Character_255�_Fixed9x15_Character_000�_Fixed9x15_Character_001�_Fixed9x15_Character_002�_Fixed9x15_Character_003�_Fixed9x15_Character_004�_Fixed9x15_Character_005�_Fixed9x15_Character_006�_Fixed9x15_Character_007�_Fixed9x15_Character_008�_Fixed9x15_Character_009�_Fixed9x15_Character_010�_Fixed9x15_Character_011�_Fixed9x15_Character_012�_Fixed9x15_Character_013�_Fixed9x15_Character_014�_Fixed9x15_Character_015�_Fixed9x15_Character_016�_Fixed9x15_Character_017�_Fixed9x15_Character_018�_Fixed9x15_Character_019�_Fixed9x15_Character_020�_Fixed9x15_Character_021�_Fixed9x15_Character_022�_Fixed9x15_Character_023�_Fixed9x15_Character_024�_Fixed9x15_Character_025�_Fixed9x15_Character_026�_Fixed9x15_Character_027�_Fixed9x15_Character_028�_Fixed9x15_Character_029�_Fixed9x15_Character_030�_Fixed9x15_Character_031�_Fixed9x15_Character_032�_Fixed9x15_Character_033�_Fixed9x15_Character_034�_Fixed9x15_Character_035�_Fixed9x15_Character_036�_Fixed9x15_Character_037�_Fixed9x15_Character_038�_Fixed9x15_Character_039�_Fixed9x15_Character_040�_Fixed9x15_Character_041�_Fixed9x15_Character_042�_Fixed9x15_Character_043�_Fixed9x15_Character_044�_Fixed9x15_Character_045�_Fixed9x15_Character_046�_Fixed9x15_Character_047�_Fixed9x15_Character_048�_Fixed9x15_Character_049�_Fixed9x15_Character_050�_Fixed9x15_Character_051�_Fixed9x15_Character_052�_Fixed9x15_Character_053�_Fixed9x15_Character_054�_Fixed9x15_Character_055�_Fixed9x15_Character_056�_Fixed9x15_Character_057�_Fixed9x15_Character_058�_Fixed9x15_Character_059�_Fixed9x15_Character_060�_Fixed9x15_Character_061�_Fixed9x15_Character_062�_Fixed9x15_Character_063�_Fixed9x15_Character_064�_Fixed9x15_Character_065�_Fixed9x15_Character_066�_Fixed9x15_Character_067�_Fixed9x15_Character_068�_Fixed9x15_Character_069�_Fixed9x15_Character_070�_Fixed9x15_Character_071�_Fixed9x15_Character_072�_Fixed9x15_Character_073�_Fixed9x15_Character_074�_Fixed9x15_Character_075�_Fixed9x15_Character_076�_Fixed9x15_Character_077�_Fixed9x15_Character_078�_Fixed9x15_Character_079�_Fixed9x15_Character_080�_Fixed9x15_Character_081�_Fixed9x15_Character_082�_Fixed9x15_Character_083�_Fixed9x15_Character_084�_Fixed9x15_Character_085�_Fixed9x15_Character_086�_Fixed9x15_Character_087�_Fixed9x15_Character_088�_Fixed9x15_Character_089�_Fixed9x15_Character_090�_Fixed9x15_Character_091�_Fixed9x15_Character_092�_Fixed9x15_Character_093�_Fixed9x15_Character_094�_Fixed9x15_Character_095�_Fixed9x15_Character_096�_Fixed9x15_Character_097�_Fixed9x15_Character_098�_Fixed9x15_Character_099�_Fixed9x15_Character_100�_Fixed9x15_Character_101�_Fixed9x15_Character_102�_Fixed9x15_Character_103�_Fixed9x15_Character_104�_Fixed9x15_Character_105�_Fixed9x15_Character_106�_Fixed9x15_Character_107�_Fixed9x15_Character_108�_Fixed9x15_Character_109�_Fixed9x15_Character_110�_Fixed9x15_Character_111�_Fixed9x15_Character_112�_Fixed9x15_Character_113�_Fixed9x15_Character_114�_Fixed9x15_Character_115�_Fixed9x15_Character_116�_Fixed9x15_Character_117�_Fixed9x15_Character_118�_Fixed9x15_Character_119�_Fixed9x15_Character_120�_Fixed9x15_Character_121�_Fixed9x15_Character_122�_Fixed9x15_Character_123�_Fixed9x15_Character_124�_Fixed9x15_Character_125�_Fixed9x15_Character_126�_Fixed9x15_Character_160�_Fixed9x15_Character_161�_Fixed9x15_Character_162�_Fixed9x15_Character_163�_Fixed9x15_Character_164�_Fixed9x15_Character_165�_Fixed9x15_Character_166�_Fixed9x15_Character_167�_Fixed9x15_Character_168�_Fixed9x15_Character_169�_Fixed9x15_Character_170�_Fixed9x15_Character_171�_Fixed9x15_Character_172�_Fixed9x15_Character_173�_Fixed9x15_Character_174�_Fixed9x15_Character_175�_Fixed9x15_Character_176�_Fixed9x15_Character_177�_Fixed9x15_Character_178�_Fixed9x15_Character_179�_Fixed9x15_Character_180�_Fixed9x15_Character_181�_Fixed9x15_Character_182�_Fixed9x15_Character_183�_Fixed9x15_Character_184�_Fixed9x15_Character_185�_Fixed9x15_Character_186�_Fixed9x15_Character_187�_Fixed9x15_Character_188�_Fixed9x15_Character_189�_Fixed9x15_Character_190�_Fixed9x15_Character_191�_Fixed9x15_Character_192�_Fixed9x15_Character_193�_Fixed9x15_Character_194�_Fixed9x15_Character_195�_Fixed9x15_Character_196�_Fixed9x15_Character_197�_Fixed9x15_Character_198�_Fixed9x15_Character_199�_Fixed9x15_Character_200�_Fixed9x15_Character_201�_Fixed9x15_Character_202�_Fixed9x15_Character_203�_Fixed9x15_Character_204�_Fixed9x15_Character_205�_Fixed9x15_Character_206�_Fixed9x15_Character_207�_Fixed9x15_Character_208�_Fixed9x15_Character_209�_Fixed9x15_Character_210�_Fixed9x15_Character_211�_Fixed9x15_Character_212�_Fixed9x15_Character_213�_Fixed9x15_Character_214�_Fixed9x15_Character_215�_Fixed9x15_Character_216�_Fixed9x15_Character_217�_Fixed9x15_Character_218�_Fixed9x15_Character_219�_Fixed9x15_Character_220�_Fixed9x15_Character_221�_Fixed9x15_Character_222�_Fixed9x15_Character_223�_Fixed9x15_Character_224�_Fixed9x15_Character_225�_Fixed9x15_Character_226�_Fixed9x15_Character_227�_Fixed9x15_Character_228�_Fixed9x15_Character_229�_Fixed9x15_Character_230�_Fixed9x15_Character_231�_Fixed9x15_Character_232�_Fixed9x15_Character_233�_Fixed9x15_Character_234�_Fixed9x15_Character_235�_Fixed9x15_Character_236�_Fixed9x15_Character_237�_Fixed9x15_Character_238�_Fixed9x15_Character_239�_Fixed9x15_Character_240�_Fixed9x15_Character_241�_Fixed9x15_Character_242�_Fixed9x15_Character_243�_Fixed9x15_Character_244�_Fixed9x15_Character_245�_Fixed9x15_Character_246�_Fixed9x15_Character_247�_Fixed9x15_Character_248�_Fixed9x15_Character_249�_Fixed9x15_Character_250�_Fixed9x15_Character_251�_Fixed9x15_Character_252�_Fixed9x15_Character_253�_Fixed9x15_Character_254�_Fixed9x15_Character_255�_Helvetica10_Character_032�_Helvetica10_Character_033�_Helvetica10_Character_034�_Helvetica10_Character_035�_Helvetica10_Character_036�_Helvetica10_Character_037�_Helvetica10_Character_038�_Helvetica10_Character_039�_Helvetica10_Character_040�_Helvetica10_Character_041�_Helvetica10_Character_042�_Helvetica10_Character_043�_Helvetica10_Character_044�_Helvetica10_Character_045�_Helvetica10_Character_046�_Helvetica10_Character_047�_Helvetica10_Character_048�_Helvetica10_Character_049�_Helvetica10_Character_050�_Helvetica10_Character_051�_Helvetica10_Character_052�_Helvetica10_Character_053�_Helvetica10_Character_054�_Helvetica10_Character_055�_Helvetica10_Character_056�_Helvetica10_Character_057�_Helvetica10_Character_058�_Helvetica10_Character_059�_Helvetica10_Character_060�_Helvetica10_Character_061�_Helvetica10_Character_062�_Helvetica10_Character_063�_Helvetica10_Character_064�_Helvetica10_Character_065�_Helvetica10_Character_066�_Helvetica10_Character_067�_Helvetica10_Character_068�_Helvetica10_Character_069�_Helvetica10_Character_070�_Helvetica10_Character_071�_Helvetica10_Character_072�_Helvetica10_Character_073�_Helvetica10_Character_074�_Helvetica10_Character_075�_Helvetica10_Character_076�_Helvetica10_Character_077�_Helvetica10_Character_078�_Helvetica10_Character_079�_Helvetica10_Character_080�_Helvetica10_Character_081�_Helvetica10_Character_082�_Helvetica10_Character_083�_Helvetica10_Character_084�_Helvetica10_Character_085�_Helvetica10_Character_086�_Helvetica10_Character_087�_Helvetica10_Character_088�_Helvetica10_Character_089�_Helvetica10_Character_090�_Helvetica10_Character_091�_Helvetica10_Character_092�_Helvetica10_Character_093�_Helvetica10_Character_094�_Helvetica10_Character_095�_Helvetica10_Character_096�_Helvetica10_Character_097�_Helvetica10_Character_098�_Helvetica10_Character_099�_Helvetica10_Character_100�_Helvetica10_Character_101�_Helvetica10_Character_102�_Helvetica10_Character_103�_Helvetica10_Character_104�_Helvetica10_Character_105�_Helvetica10_Character_106�_Helvetica10_Character_107�_Helvetica10_Character_108�_Helvetica10_Character_109�_Helvetica10_Character_110�_Helvetica10_Character_111�_Helvetica10_Character_112�_Helvetica10_Character_113�_Helvetica10_Character_114�_Helvetica10_Character_115�_Helvetica10_Character_116�_Helvetica10_Character_117�_Helvetica10_Character_118�_Helvetica10_Character_119�_Helvetica10_Character_120�_Helvetica10_Character_121�_Helvetica10_Character_122�_Helvetica10_Character_123�_Helvetica10_Character_124�_Helvetica10_Character_125�_Helvetica10_Character_126�_Helvetica10_Character_160�_Helvetica10_Character_161�_Helvetica10_Character_162�_Helvetica10_Character_163�_Helvetica10_Character_164�_Helvetica10_Character_165�_Helvetica10_Character_166�_Helvetica10_Character_167�_Helvetica10_Character_168�_Helvetica10_Character_169�_Helvetica10_Character_170�_Helvetica10_Character_171�_Helvetica10_Character_172�_Helvetica10_Character_173�_Helvetica10_Character_174�_Helvetica10_Character_175�_Helvetica10_Character_176�_Helvetica10_Character_177�_Helvetica10_Character_178�_Helvetica10_Character_179�_Helvetica10_Character_180�_Helvetica10_Character_181�_Helvetica10_Character_182�_Helvetica10_Character_183�_Helvetica10_Character_184�_Helvetica10_Character_185�_Helvetica10_Character_186�_Helvetica10_Character_187�_Helvetica10_Character_188�_Helvetica10_Character_189�_Helvetica10_Character_190�_Helvetica10_Character_191�_Helvetica10_Character_192�_Helvetica10_Character_193�_Helvetica10_Character_194�_Helvetica10_Character_195�_Helvetica10_Character_196�_Helvetica10_Character_197�_Helvetica10_Character_198�_Helvetica10_Character_199�_Helvetica10_Character_200�_Helvetica10_Character_201�_Helvetica10_Character_202�_Helvetica10_Character_203�_Helvetica10_Character_204�_Helvetica10_Character_205�_Helvetica10_Character_206�_Helvetica10_Character_207�_Helvetica10_Character_208�_Helvetica10_Character_209�_Helvetica10_Character_210�_Helvetica10_Character_211�_Helvetica10_Character_212�_Helvetica10_Character_213�_Helvetica10_Character_214�_Helvetica10_Character_215�_Helvetica10_Character_216�_Helvetica10_Character_217�_Helvetica10_Character_218�_Helvetica10_Character_219�_Helvetica10_Character_220�_Helvetica10_Character_221�_Helvetica10_Character_222�_Helvetica10_Character_223�_Helvetica10_Character_224�_Helvetica10_Character_225�_Helvetica10_Character_226�_Helvetica10_Character_227�_Helvetica10_Character_228�_Helvetica10_Character_229�_Helvetica10_Character_230�_Helvetica10_Character_231�_Helvetica10_Character_232�_Helvetica10_Character_233�_Helvetica10_Character_234�_Helvetica10_Character_235�_Helvetica10_Character_236�_Helvetica10_Character_237�_Helvetica10_Character_238�_Helvetica10_Character_239�_Helvetica10_Character_240�_Helvetica10_Character_241�_Helvetica10_Character_242�_Helvetica10_Character_243�_Helvetica10_Character_244�_Helvetica10_Character_245�_Helvetica10_Character_246�_Helvetica10_Character_247�_Helvetica10_Character_248�_Helvetica10_Character_249�_Helvetica10_Character_250�_Helvetica10_Character_251�_Helvetica10_Character_252�_Helvetica10_Character_253�_Helvetica10_Character_254�_Helvetica10_Character_255�_Helvetica12_Character_032�_Helvetica12_Character_033�_Helvetica12_Character_034�_Helvetica12_Character_035�_Helvetica12_Character_036�_Helvetica12_Character_037�_Helvetica12_Character_038�_Helvetica12_Character_039�_Helvetica12_Character_040�_Helvetica12_Character_041�_Helvetica12_Character_042�_Helvetica12_Character_043�_Helvetica12_Character_044�_Helvetica12_Character_045�_Helvetica12_Character_046�_Helvetica12_Character_047�_Helvetica12_Character_048�_Helvetica12_Character_049�_Helvetica12_Character_050�_Helvetica12_Character_051�_Helvetica12_Character_052�_Helvetica12_Character_053�_Helvetica12_Character_054�_Helvetica12_Character_055�_Helvetica12_Character_056�_Helvetica12_Character_057�_Helvetica12_Character_058�_Helvetica12_Character_059�_Helvetica12_Character_060�_Helvetica12_Character_061�_Helvetica12_Character_062�_Helvetica12_Character_063�_Helvetica12_Character_064�_Helvetica12_Character_065�_Helvetica12_Character_066�_Helvetica12_Character_067�_Helvetica12_Character_068�_Helvetica12_Character_069�_Helvetica12_Character_070�_Helvetica12_Character_071�_Helvetica12_Character_072�_Helvetica12_Character_073�_Helvetica12_Character_074�_Helvetica12_Character_075�_Helvetica12_Character_076�_Helvetica12_Character_077�_Helvetica12_Character_078�_Helvetica12_Character_079�_Helvetica12_Character_080�_Helvetica12_Character_081�_Helvetica12_Character_082�_Helvetica12_Character_083�_Helvetica12_Character_084�_Helvetica12_Character_085�_Helvetica12_Character_086�_Helvetica12_Character_087�_Helvetica12_Character_088�_Helvetica12_Character_089�_Helvetica12_Character_090�_Helvetica12_Character_091�_Helvetica12_Character_092�_Helvetica12_Character_093�_Helvetica12_Character_094�_Helvetica12_Character_095�_Helvetica12_Character_096�_Helvetica12_Character_097�_Helvetica12_Character_098�_Helvetica12_Character_099�_Helvetica12_Character_100�_Helvetica12_Character_101�_Helvetica12_Character_102�_Helvetica12_Character_103�_Helvetica12_Character_104�_Helvetica12_Character_105�_Helvetica12_Character_106�_Helvetica12_Character_107�_Helvetica12_Character_108�_Helvetica12_Character_109�_Helvetica12_Character_110�_Helvetica12_Character_111�_Helvetica12_Character_112�_Helvetica12_Character_113�_Helvetica12_Character_114�_Helvetica12_Character_115�_Helvetica12_Character_116�_Helvetica12_Character_117�_Helvetica12_Character_118�_Helvetica12_Character_119�_Helvetica12_Character_120�_Helvetica12_Character_121�_Helvetica12_Character_122�_Helvetica12_Character_123�_Helvetica12_Character_124�_Helvetica12_Character_125�_Helvetica12_Character_126�_Helvetica12_Character_160�_Helvetica12_Character_161�_Helvetica12_Character_162�_Helvetica12_Character_163�_Helvetica12_Character_164�_Helvetica12_Character_165�_Helvetica12_Character_166�_Helvetica12_Character_167�_Helvetica12_Character_168�_Helvetica12_Character_169�_Helvetica12_Character_170�_Helvetica12_Character_171�_Helvetica12_Character_172�_Helvetica12_Character_173�_Helvetica12_Character_174�_Helvetica12_Character_175�_Helvetica12_Character_176�_Helvetica12_Character_177�_Helvetica12_Character_178�_Helvetica12_Character_179�_Helvetica12_Character_180�_Helvetica12_Character_181�_Helvetica12_Character_182�_Helvetica12_Character_183�_Helvetica12_Character_184�_Helvetica12_Character_185�_Helvetica12_Character_186�_Helvetica12_Character_187�_Helvetica12_Character_188�_Helvetica12_Character_189�_Helvetica12_Character_190�_Helvetica12_Character_191�_Helvetica12_Character_192�_Helvetica12_Character_193�_Helvetica12_Character_194�_Helvetica12_Character_195�_Helvetica12_Character_196�_Helvetica12_Character_197�_Helvetica12_Character_198�_Helvetica12_Character_199�_Helvetica12_Character_200�_Helvetica12_Character_201�_Helvetica12_Character_202�_Helvetica12_Character_203�_Helvetica12_Character_204�_Helvetica12_Character_205�_Helvetica12_Character_206�_Helvetica12_Character_207�_Helvetica12_Character_208�_Helvetica12_Character_209�_Helvetica12_Character_210�_Helvetica12_Character_211�_Helvetica12_Character_212�_Helvetica12_Character_213�_Helvetica12_Character_214�_Helvetica12_Character_215�_Helvetica12_Character_216�_Helvetica12_Character_217�_Helvetica12_Character_218�_Helvetica12_Character_219�_Helvetica12_Character_220�_Helvetica12_Character_221�_Helvetica12_Character_222�_Helvetica12_Character_223�_Helvetica12_Character_224�_Helvetica12_Character_225�_Helvetica12_Character_226�_Helvetica12_Character_227�_Helvetica12_Character_228�_Helvetica12_Character_229�_Helvetica12_Character_230�_Helvetica12_Character_231�_Helvetica12_Character_232�_Helvetica12_Character_233�_Helvetica12_Character_234�_Helvetica12_Character_235�_Helvetica12_Character_236�_Helvetica12_Character_237�_Helvetica12_Character_238�_Helvetica12_Character_239�_Helvetica12_Character_240�_Helvetica12_Character_241�_Helvetica12_Character_242�_Helvetica12_Character_243�_Helvetica12_Character_244�_Helvetica12_Character_245�_Helvetica12_Character_246�_Helvetica12_Character_247�_Helvetica12_Character_248�_Helvetica12_Character_249�_Helvetica12_Character_250�_Helvetica12_Character_251�_Helvetica12_Character_252�_Helvetica12_Character_253�_Helvetica12_Character_254�_Helvetica12_Character_255�_Helvetica18_Character_032�_Helvetica18_Character_033�_Helvetica18_Character_034�_Helvetica18_Character_035�_Helvetica18_Character_036�_Helvetica18_Character_037�_Helvetica18_Character_038�_Helvetica18_Character_039�_Helvetica18_Character_040�_Helvetica18_Character_041�_Helvetica18_Character_042�_Helvetica18_Character_043�_Helvetica18_Character_044�_Helvetica18_Character_045�_Helvetica18_Character_046�_Helvetica18_Character_047�_Helvetica18_Character_048�_Helvetica18_Character_049�_Helvetica18_Character_050�_Helvetica18_Character_051�_Helvetica18_Character_052�_Helvetica18_Character_053�_Helvetica18_Character_054�_Helvetica18_Character_055�_Helvetica18_Character_056�_Helvetica18_Character_057�_Helvetica18_Character_058�_Helvetica18_Character_059�_Helvetica18_Character_060�_Helvetica18_Character_061�_Helvetica18_Character_062�_Helvetica18_Character_063�_Helvetica18_Character_064�_Helvetica18_Character_065�_Helvetica18_Character_066�_Helvetica18_Character_067�_Helvetica18_Character_068�_Helvetica18_Character_069�_Helvetica18_Character_070�_Helvetica18_Character_071�_Helvetica18_Character_072�_Helvetica18_Character_073�_Helvetica18_Character_074�_Helvetica18_Character_075�_Helvetica18_Character_076�_Helvetica18_Character_077�_Helvetica18_Character_078�_Helvetica18_Character_079�_Helvetica18_Character_080�_Helvetica18_Character_081�_Helvetica18_Character_082�_Helvetica18_Character_083�_Helvetica18_Character_084�_Helvetica18_Character_085�_Helvetica18_Character_086�_Helvetica18_Character_087�_Helvetica18_Character_088�_Helvetica18_Character_089�_Helvetica18_Character_090�_Helvetica18_Character_091�_Helvetica18_Character_092�_Helvetica18_Character_093�_Helvetica18_Character_094�_Helvetica18_Character_095�_Helvetica18_Character_096�_Helvetica18_Character_097�_Helvetica18_Character_098�_Helvetica18_Character_099�_Helvetica18_Character_100�_Helvetica18_Character_101�_Helvetica18_Character_102�_Helvetica18_Character_103�_Helvetica18_Character_104�_Helvetica18_Character_105�_Helvetica18_Character_106�_Helvetica18_Character_107�_Helvetica18_Character_108�_Helvetica18_Character_109�_Helvetica18_Character_110�_Helvetica18_Character_111�_Helvetica18_Character_112�_Helvetica18_Character_113�_Helvetica18_Character_114�_Helvetica18_Character_115�_Helvetica18_Character_116�_Helvetica18_Character_117�_Helvetica18_Character_118�_Helvetica18_Character_119�_Helvetica18_Character_120�_Helvetica18_Character_121�_Helvetica18_Character_122�_Helvetica18_Character_123�_Helvetica18_Character_124�_Helvetica18_Character_125�_Helvetica18_Character_126�_Helvetica18_Character_160�_Helvetica18_Character_161�_Helvetica18_Character_162�_Helvetica18_Character_163�_Helvetica18_Character_164�_Helvetica18_Character_165�_Helvetica18_Character_166�_Helvetica18_Character_167�_Helvetica18_Character_168�_Helvetica18_Character_169�_Helvetica18_Character_170�_Helvetica18_Character_171�_Helvetica18_Character_172�_Helvetica18_Character_173�_Helvetica18_Character_174�_Helvetica18_Character_175�_Helvetica18_Character_176�_Helvetica18_Character_177�_Helvetica18_Character_178�_Helvetica18_Character_179�_Helvetica18_Character_180�_Helvetica18_Character_181�_Helvetica18_Character_182�_Helvetica18_Character_183�_Helvetica18_Character_184�_Helvetica18_Character_185�_Helvetica18_Character_186�_Helvetica18_Character_187�_Helvetica18_Character_188�_Helvetica18_Character_189�_Helvetica18_Character_190�_Helvetica18_Character_191�_Helvetica18_Character_192�_Helvetica18_Character_193�_Helvetica18_Character_194�_Helvetica18_Character_195�_Helvetica18_Character_196�_Helvetica18_Character_197�_Helvetica18_Character_198�_Helvetica18_Character_199�_Helvetica18_Character_200�_Helvetica18_Character_201�_Helvetica18_Character_202�_Helvetica18_Character_203�_Helvetica18_Character_204�_Helvetica18_Character_205�_Helvetica18_Character_206�_Helvetica18_Character_207�_Helvetica18_Character_208�_Helvetica18_Character_209�_Helvetica18_Character_210�_Helvetica18_Character_211�_Helvetica18_Character_212�_Helvetica18_Character_213�_Helvetica18_Character_214�_Helvetica18_Character_215�_Helvetica18_Character_216�_Helvetica18_Character_217�_Helvetica18_Character_218�_Helvetica18_Character_219�_Helvetica18_Character_220�_Helvetica18_Character_221�_Helvetica18_Character_222�_Helvetica18_Character_223�_Helvetica18_Character_224�_Helvetica18_Character_225�_Helvetica18_Character_226�_Helvetica18_Character_227�_Helvetica18_Character_228�_Helvetica18_Character_229�_Helvetica18_Character_230�_Helvetica18_Character_231�_Helvetica18_Character_232�_Helvetica18_Character_233�_Helvetica18_Character_234�_Helvetica18_Character_235�_Helvetica18_Character_236�_Helvetica18_Character_237�_Helvetica18_Character_238�_Helvetica18_Character_239�_Helvetica18_Character_240�_Helvetica18_Character_241�_Helvetica18_Character_242�_Helvetica18_Character_243�_Helvetica18_Character_244�_Helvetica18_Character_245�_Helvetica18_Character_246�_Helvetica18_Character_247�_Helvetica18_Character_248�_Helvetica18_Character_249�_Helvetica18_Character_250�_Helvetica18_Character_251�_Helvetica18_Character_252�_Helvetica18_Character_253�_Helvetica18_Character_254�_Helvetica18_Character_255�_TimesRoman10_Character_032�_TimesRoman10_Character_033�_TimesRoman10_Character_034�_TimesRoman10_Character_035�_TimesRoman10_Character_036�_TimesRoman10_Character_037�_TimesRoman10_Character_038�_TimesRoman10_Character_039�_TimesRoman10_Character_040�_TimesRoman10_Character_041�_TimesRoman10_Character_042�_TimesRoman10_Character_043�_TimesRoman10_Character_044�_TimesRoman10_Character_045�_TimesRoman10_Character_046�_TimesRoman10_Character_047�_TimesRoman10_Character_048�_TimesRoman10_Character_049�_TimesRoman10_Character_050�_TimesRoman10_Character_051�_TimesRoman10_Character_052�_TimesRoman10_Character_053�_TimesRoman10_Character_054�_TimesRoman10_Character_055�_TimesRoman10_Character_056�_TimesRoman10_Character_057�_TimesRoman10_Character_058�_TimesRoman10_Character_059�_TimesRoman10_Character_060�_TimesRoman10_Character_061�_TimesRoman10_Character_062�_TimesRoman10_Character_063�_TimesRoman10_Character_064�_TimesRoman10_Character_065�_TimesRoman10_Character_066�_TimesRoman10_Character_067�_TimesRoman10_Character_068�_TimesRoman10_Character_069�_TimesRoman10_Character_070�_TimesRoman10_Character_071�_TimesRoman10_Character_072�_TimesRoman10_Character_073�_TimesRoman10_Character_074�_TimesRoman10_Character_075�_TimesRoman10_Character_076�_TimesRoman10_Character_077�_TimesRoman10_Character_078�_TimesRoman10_Character_079�_TimesRoman10_Character_080�_TimesRoman10_Character_081�_TimesRoman10_Character_082�_TimesRoman10_Character_083�_TimesRoman10_Character_084�_TimesRoman10_Character_085�_TimesRoman10_Character_086�_TimesRoman10_Character_087�_TimesRoman10_Character_088�_TimesRoman10_Character_089�_TimesRoman10_Character_090�_TimesRoman10_Character_091�_TimesRoman10_Character_092�_TimesRoman10_Character_093�_TimesRoman10_Character_094�_TimesRoman10_Character_095�_TimesRoman10_Character_096�_TimesRoman10_Character_097�_TimesRoman10_Character_098�_TimesRoman10_Character_099�_TimesRoman10_Character_100�_TimesRoman10_Character_101�_TimesRoman10_Character_102�_TimesRoman10_Character_103�_TimesRoman10_Character_104�_TimesRoman10_Character_105�_TimesRoman10_Character_106�_TimesRoman10_Character_107�_TimesRoman10_Character_108�_TimesRoman10_Character_109�_TimesRoman10_Character_110�_TimesRoman10_Character_111�_TimesRoman10_Character_112�_TimesRoman10_Character_113�_TimesRoman10_Character_114�_TimesRoman10_Character_115�_TimesRoman10_Character_116�_TimesRoman10_Character_117�_TimesRoman10_Character_118�_TimesRoman10_Character_119�_TimesRoman10_Character_120�_TimesRoman10_Character_121�_TimesRoman10_Character_122�_TimesRoman10_Character_123�_TimesRoman10_Character_124�_TimesRoman10_Character_125�_TimesRoman10_Character_126�_TimesRoman10_Character_160�_TimesRoman10_Character_161�_TimesRoman10_Character_162�_TimesRoman10_Character_163�_TimesRoman10_Character_164�_TimesRoman10_Character_165�_TimesRoman10_Character_166�_TimesRoman10_Character_167�_TimesRoman10_Character_168�_TimesRoman10_Character_169�_TimesRoman10_Character_170�_TimesRoman10_Character_171�_TimesRoman10_Character_172�_TimesRoman10_Character_173�_TimesRoman10_Character_174�_TimesRoman10_Character_175�_TimesRoman10_Character_176�_TimesRoman10_Character_177�_TimesRoman10_Character_178�_TimesRoman10_Character_179�_TimesRoman10_Character_180�_TimesRoman10_Character_181�_TimesRoman10_Character_182�_TimesRoman10_Character_183�_TimesRoman10_Character_184�_TimesRoman10_Character_185�_TimesRoman10_Character_186�_TimesRoman10_Character_187�_TimesRoman10_Character_188�_TimesRoman10_Character_189�_TimesRoman10_Character_190�_TimesRoman10_Character_191�_TimesRoman10_Character_192�_TimesRoman10_Character_193�_TimesRoman10_Character_194�_TimesRoman10_Character_195�_TimesRoman10_Character_196�_TimesRoman10_Character_197�_TimesRoman10_Character_198�_TimesRoman10_Character_199�_TimesRoman10_Character_200�_TimesRoman10_Character_201�_TimesRoman10_Character_202�_TimesRoman10_Character_203�_TimesRoman10_Character_204�_TimesRoman10_Character_205�_TimesRoman10_Character_206�_TimesRoman10_Character_207�_TimesRoman10_Character_208�_TimesRoman10_Character_209�_TimesRoman10_Character_210�_TimesRoman10_Character_211�_TimesRoman10_Character_212�_TimesRoman10_Character_213�_TimesRoman10_Character_214�_TimesRoman10_Character_215�_TimesRoman10_Character_216�_TimesRoman10_Character_217�_TimesRoman10_Character_218�_TimesRoman10_Character_219�_TimesRoman10_Character_220�_TimesRoman10_Character_221�_TimesRoman10_Character_222�_TimesRoman10_Character_223�_TimesRoman10_Character_224�_TimesRoman10_Character_225�_TimesRoman10_Character_226�_TimesRoman10_Character_227�_TimesRoman10_Character_228�_TimesRoman10_Character_229�_TimesRoman10_Character_230�_TimesRoman10_Character_231�_TimesRoman10_Character_232�_TimesRoman10_Character_233�_TimesRoman10_Character_234�_TimesRoman10_Character_235�_TimesRoman10_Character_236�_TimesRoman10_Character_237�_TimesRoman10_Character_238�_TimesRoman10_Character_239�_TimesRoman10_Character_240�_TimesRoman10_Character_241�_TimesRoman10_Character_242�_TimesRoman10_Character_243�_TimesRoman10_Character_244�_TimesRoman10_Character_245�_TimesRoman10_Character_246�_TimesRoman10_Character_247�_TimesRoman10_Character_248�_TimesRoman10_Character_249�_TimesRoman10_Character_250�_TimesRoman10_Character_251�_TimesRoman10_Character_252�_TimesRoman10_Character_253�_TimesRoman10_Character_254�_TimesRoman10_Character_255�_TimesRoman24_Character_032�_TimesRoman24_Character_033�_TimesRoman24_Character_034�_TimesRoman24_Character_035�_TimesRoman24_Character_036�_TimesRoman24_Character_037�_TimesRoman24_Character_038�_TimesRoman24_Character_039�_TimesRoman24_Character_040�_TimesRoman24_Character_041�_TimesRoman24_Character_042�_TimesRoman24_Character_043�_TimesRoman24_Character_044�_TimesRoman24_Character_045�_TimesRoman24_Character_046�_TimesRoman24_Character_047�_TimesRoman24_Character_048�_TimesRoman24_Character_049�_TimesRoman24_Character_050�_TimesRoman24_Character_051�_TimesRoman24_Character_052�_TimesRoman24_Character_053�_TimesRoman24_Character_054�_TimesRoman24_Character_055�_TimesRoman24_Character_056�_TimesRoman24_Character_057�_TimesRoman24_Character_058�_TimesRoman24_Character_059�_TimesRoman24_Character_060�_TimesRoman24_Character_061�_TimesRoman24_Character_062�_TimesRoman24_Character_063�_TimesRoman24_Character_064�_TimesRoman24_Character_065�_TimesRoman24_Character_066�_TimesRoman24_Character_067�_TimesRoman24_Character_068�_TimesRoman24_Character_069�_TimesRoman24_Character_070�_TimesRoman24_Character_071�_TimesRoman24_Character_072�_TimesRoman24_Character_073�_TimesRoman24_Character_074�_TimesRoman24_Character_075�_TimesRoman24_Character_076�_TimesRoman24_Character_077�_TimesRoman24_Character_078�_TimesRoman24_Character_079�_TimesRoman24_Character_080�_TimesRoman24_Character_081�_TimesRoman24_Character_082�_TimesRoman24_Character_083�_TimesRoman24_Character_084�_TimesRoman24_Character_085�_TimesRoman24_Character_086�_TimesRoman24_Character_087�_TimesRoman24_Character_088�_TimesRoman24_Character_089�_TimesRoman24_Character_090�_TimesRoman24_Character_091�_TimesRoman24_Character_092�_TimesRoman24_Character_093�_TimesRoman24_Character_094�_TimesRoman24_Character_095�_TimesRoman24_Character_096�_TimesRoman24_Character_097�_TimesRoman24_Character_098�_TimesRoman24_Character_099�_TimesRoman24_Character_100�_TimesRoman24_Character_101�_TimesRoman24_Character_102�_TimesRoman24_Character_103�_TimesRoman24_Character_104�_TimesRoman24_Character_105�_TimesRoman24_Character_106�_TimesRoman24_Character_107�_TimesRoman24_Character_108�_TimesRoman24_Character_109�_TimesRoman24_Character_110�_TimesRoman24_Character_111�_TimesRoman24_Character_112�_TimesRoman24_Character_113�_TimesRoman24_Character_114�_TimesRoman24_Character_115�_TimesRoman24_Character_116�_TimesRoman24_Character_117�_TimesRoman24_Character_118�_TimesRoman24_Character_119�_TimesRoman24_Character_120�_TimesRoman24_Character_121�_TimesRoman24_Character_122�_TimesRoman24_Character_123�_TimesRoman24_Character_124�_TimesRoman24_Character_125�_TimesRoman24_Character_126�_TimesRoman24_Character_160�_TimesRoman24_Character_161�_TimesRoman24_Character_162�_TimesRoman24_Character_163�_TimesRoman24_Character_164�_TimesRoman24_Character_165�_TimesRoman24_Character_166�_TimesRoman24_Character_167�_TimesRoman24_Character_168�_TimesRoman24_Character_169�_TimesRoman24_Character_170�_TimesRoman24_Character_171�_TimesRoman24_Character_172�_TimesRoman24_Character_173�_TimesRoman24_Character_174�_TimesRoman24_Character_175�_TimesRoman24_Character_176�_TimesRoman24_Character_177�_TimesRoman24_Character_178�_TimesRoman24_Character_179�_TimesRoman24_Character_180�_TimesRoman24_Character_181�_TimesRoman24_Character_182�_TimesRoman24_Character_183�_TimesRoman24_Character_184�_TimesRoman24_Character_185�_TimesRoman24_Character_186�_TimesRoman24_Character_187�_TimesRoman24_Character_188�_TimesRoman24_Character_189�_TimesRoman24_Character_190�_TimesRoman24_Character_191�_TimesRoman24_Character_192�_TimesRoman24_Character_193�_TimesRoman24_Character_194�_TimesRoman24_Character_195�_TimesRoman24_Character_196�_TimesRoman24_Character_197�_TimesRoman24_Character_198�_TimesRoman24_Character_199�_TimesRoman24_Character_200�_TimesRoman24_Character_201�_TimesRoman24_Character_202�_TimesRoman24_Character_203�_TimesRoman24_Character_204�_TimesRoman24_Character_205�_TimesRoman24_Character_206�_TimesRoman24_Character_207�_TimesRoman24_Character_208�_TimesRoman24_Character_209�_TimesRoman24_Character_210�_TimesRoman24_Character_211�_TimesRoman24_Character_212�_TimesRoman24_Character_213�_TimesRoman24_Character_214�_TimesRoman24_Character_215�_TimesRoman24_Character_216�_TimesRoman24_Character_217�_TimesRoman24_Character_218�_TimesRoman24_Character_219�_TimesRoman24_Character_220�_TimesRoman24_Character_221�_TimesRoman24_Character_222�_TimesRoman24_Character_223�_TimesRoman24_Character_224�_TimesRoman24_Character_225�_TimesRoman24_Character_226�_TimesRoman24_Character_227�_TimesRoman24_Character_228�_TimesRoman24_Character_229�_TimesRoman24_Character_230�_TimesRoman24_Character_231�_TimesRoman24_Character_232�_TimesRoman24_Character_233�_TimesRoman24_Character_234�_TimesRoman24_Character_235�_TimesRoman24_Character_236�_TimesRoman24_Character_237�_TimesRoman24_Character_238�_TimesRoman24_Character_239�_TimesRoman24_Character_240�_TimesRoman24_Character_241�_TimesRoman24_Character_242�_TimesRoman24_Character_243�_TimesRoman24_Character_244�_TimesRoman24_Character_245�_TimesRoman24_Character_246�_TimesRoman24_Character_247�_TimesRoman24_Character_248�_TimesRoman24_Character_249�_TimesRoman24_Character_250�_TimesRoman24_Character_251�_TimesRoman24_Character_252�_TimesRoman24_Character_253�_TimesRoman24_Character_254�_TimesRoman24_Character_255�_fgFontFixed8x13�_fgFontFixed9x15�_fgFontHelvetica10�_fgFontHelvetica12�_fgFontHelvetica18�_fgFontTimesRoman10�_fgFontTimesRoman24�/83 1264195963 500 500 100664 3858 ` L����� �������.text�����������ð��´���L������S��� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������¨��¤��Š ���������@�0@U‰åV‰ÆSìÀ���\ÿÿÿ‰\$ÇD$ÿÿÿÿÇ$����è����‹`���‰ðÇE„��\�‰UÈ‹d���ƒì <À‰UÌ‹l���ƒàƒÀÇD$����‰D$ ‰UÄ‹p���ÇD$����‰\$Ç$����‰UÔè����ƒÀƒìƒøv¸ä���´&����‰$è����eø1À[^]Ãÿ$…H��¸��ëá¸(���ëÙ¸����ëÒf¸À���ëɸˆ���ëÂf‰\$ÇD$ÿÿÿÿÇ$����è����‹EÈ£`���‹EÌƒì £d���‹EÄ£l���‹EÔ£p���eø¸���[^]Éö¼'����U‰åSƒì‹]€=����t?ƒûv‰\$Ç$´��è����ƒÄ¸ÿÿÿÿ[]Ãÿ$Ð��¶����1Àƒ=$����•ÀƒÄ[]ÃÇD$d��Ç$t��è����ë«¡l���ƒÄ[]áp���ƒÄ[]Ãf¸���èFþÿÿƒÄ[]¶Àá`���ƒÄ[]Ãf¡d���ƒÄ[]Ãt&�U‰åƒì€=����t4¡$���…Àt)‰$è����Ç$�������ÇD$����Ç$���è����ƒìÉÃÇD$ì��Ç$t��è����ë¶´&����U‰åƒì8€=����„­���¡$���…À„Á���‰$è����1Àè‘ýÿÿ„Àt}¡d���ÇD$$����ÇD$ ���ÇD$���‰D$¡`���ÇD$����ÇD$ ����ÇD$���‰D$ÇD$1��Ç$����è����‹`���‰P‹d���£$���Æ@F‰P ‹@Éô&����Ç$��è����1ÀÉÃÇD$þ��Ç$t��è����¡$���…À…?ÿÿÿÇD$���ÇD$ÿÿÿÿÇ$����è���� ,�����\�ƒì éÿÿÿU‰åWVSƒì<€=����ÇEä€��ÇEàà��ÇEÜ���ÇEØH���„F��E؉D$‹E}Üuà]ä‰|$‰t$ ‰\$ÇD$M��‰$è����ƒø„æ���‹E‰|$‰t$ ‰\$ÇD$Y��‰$è����ƒø„¾���E؉D$‹E‰t$ ‰\$ÇD$b��‰$è����ƒø„“���‹E‰t$ ‰\$ÇD$k��‰$è����ƒøtsE؉D$ ‹E‰|$ÇD$q��‰$è����ƒøtP‹E‰|$ÇD$x��‰$è����ƒøt4E؉D$‹EÇD$|��‰$è����ƒøt‹EÇ$€��‰D$è����f‹Eä£`���‹Eà£d���‹EÜ£l���‹EØ£p���ƒÄ<[^_]ÃÇD$:��Ç$t��è����é¡þÿÿAn invalid set of flags was passed in.��An invalid parameter was passed in. This can include an invalid flag or combination of flags.���The display driver failed the specified graphics mode.��The graphics mode is not supported.�Unknown error in graphics mode???���The computer must be restarted for the graphics mode to work.���À���Ç���”���Ð���×���à���¸���glutGameModeGet� ERROR: Function <%s> called without first calling 'glutInit'.�Unknown gamemode get: %d����p��°��Ã��Ð��˜��£��p��glutLeaveGameMode�glutEnterGameMode�failed to change screen settings�FREEGLUT�glutGameModeString�%ix%i:%i@%i�%ix%i:%i�%ix%i@%i�%ix%i�:%i@%i�:%i�@%i�unable to parse game mode string `%s'���'�������-�������?�������O�������j�������…�������•�������¤�������´�������¹�������Á�������È�������Ñ�������Ø�������ô�������ü�������������������������<������O������T������f������t������†������������’������™������¤������Ä������Ñ������è������ð������ü������������������������'������.������3������H������T������d������t������•������¹������Å������Ë������Ô������Ù������ó������ø������������ ������������������%������9������?������[������¥������­������Í������Õ������ø�������������������$������?������G������[������c������z������‚������‘������š������¤������¬������´������¼������Ì������Ó������Ø������H������L������P������T������X������\������`������Ð������Ô������Ø������Ü������à������ä������è������.file�������þÿ��g����������������������������� �����������������������.���0��� ������?���à��� ������R���@��� ������e���P��� ��.text����������á��S�������������.data����������������������������.bss�����������������������������.rdata���������¦���������������_fgState�������������y����������������†����������������‘��������� ������®��������� ������È��������� ������â��������� ������ò��������� ��_sscanf������� ������ �������� ��_fgError������ ����freeglut_gamemode.c�_fghChangeDisplayMode�_glutGameModeGet�_glutLeaveGameMode�_glutEnterGameMode�_glutGameModeString�_fgStructure�_fgDisplay�_ChangeDisplaySettingsExA@20�_ChangeDisplaySettingsA@8�_fgAddToWindowDestroyList�_fgCreateWindow�_EnumDisplaySettingsA@12�_fgWarning�/104 1264195964 500 500 100664 30085 ` L�����Lo��8�����.text�����������€H��´���tQ������ü�� �P`.data��������������4I��������������@�`À.bss��������������������������������€�0À.rdata����������@��4M��������������@�`@U‰åWVSƒìl‹]€=����‹} ÝE„‘���ƒû�„«���~vØ ��ƒë‰]Ä1ÛWG‰}¼uЉljUÀ݃����ØÉ‹E¼‹UÀÜ�‹EÄÝ]Ð݃���ØÉÜÝ]ØÝƒ���ƒÃØÉ܉t$‰$Ý]àÝT$Ý]¨èqÿÿÿƒû`ÝE¨u²ÝØët&�ÝØeô[^_]ö����Ý]¨ÇD$����Ç$���è����ƒû�ÝE¨…UÿÿÿÝ]¨Ç$���è����GW‰E´¸���‰}¼‰Ç‰UÀÇEÄ����ƒìÝE¨Ý1ÛÙàÝ\$ÝGøÙàÝ\$ÝGðÙàÝ$Ý]¨è����‹Uĉ}¸‹}´R4… ��ƒìÝE¨‹ƒÃƒÆ‹UÀ@ÝÅ���ØÉÜÝ\$ÝÅ���ØÉÜÝ\$ÝÅ����ØÉ‹E¼Ü�Ý$Ý]¨è����ƒìƒûÝE¨u°‹}¸ƒEăǃ}Ä…`ÿÿÿÝØè����eô[^_]ö����¿����U‰åWVSƒì|‹]€=����ÝE„t��ƒû�…ë���‹E 1ÿ‹U Ý]°‰}ăÀ‰EÀƒÂ¸���‰U¸‰ÇÇ$���1Ûè����݃ìÙàÝ\$ÝGøÙàÝ\$ÝGðÙàÝ$è����‹Uĉ}¼‹}¸R4… ��ƒìÝE°‹ƒÃƒÆ‹UÀ@ÝÅ���ØÉÜÝ\$ÝÅ���ØÉÜÝ\$ÝÅ����ØÉ‹E Ü�Ý$Ý]˜è����ƒìƒûÝE˜u°ÝØ‹}¼è����ƒEăǃ}Ä…Mÿÿÿët&�ÝØeô[^_]ö����~î‹U ƒëØ ��‹} ‰]ÄuÐ1ۃ‰UÀƒÇ݃����ØÉ‹E ‹UÀÜ�‹EÄÝ]Ð݃���ØÉÜÝ]ØÝƒ���ƒÃØÉ܉t$‰$Ý]àÝT$Ý]˜èˆþÿÿƒû`ÝE˜u²ÝØeô[^_]ö����Ý]˜ÇD$\���Ç$���è����ÝE˜émþÿÿU‰åƒìX€=����uÇD$u���Ç$���è����Ç$���è����Ý��ƒìÝT$ÝT$Ý$Ý]Øè����ƒìÙîÝT$ÝT$ÙèÝ$Ù]èè����ƒìÙEèÝT$ÙèÝ\$Ý$è����ƒìÙèÝ\$ÙEèÝT$Ý$è����Ý ��ƒìÝT$ÝEØÝT$Ý$Ý]Èè����ƒìÙEèÝT$Ý\$ÙèÝ$è����ÙèƒìÙàÝ\$ÙEèÝT$Ý$è����ƒìÙEèÝT$ÙèÝ\$Ý$è����ÝE؃ìÝT$ÝEÈÝ\$Ý$è����ƒìÙEèÝT$Ý\$ÙèÝ$è����ƒìÙèÝ\$ÙEèÝT$Ý$è����ƒìÙEèÝT$ÙèÙàÝ\$Ý$è����ÝEȃìÝT$Ý\$ÝEØÝ$è����ƒìÙEèÝT$Ý\$ÙèÝ$è����ƒìÙEèÝT$ÙèÙàÝ\$Ý$è����ÙèƒìÙàÝ\$ÙEèÝT$Ý$è����ƒìÝEØÝT$Ý\$ÝEÈÝ$è����ƒìÙEèÝT$Ý\$ÙèÙàÝ$è����ƒìÙèÝ\$ÙEèÝT$Ý$è����ƒìÙEèÝT$ÙèÝ\$Ý$è����ÝEȃìÝT$ÝEØÝ\$Ý$è����ƒìÙEèÝT$Ý\$ÙèÙàÝ$è����ƒìÙEèÝT$ÙèÝ\$Ý$è����ÙèƒìÙàÝ\$ÙEèÝT$Ý$è����ƒìÝEØÝ\$ÝEÈÝT$Ý$è����ƒìÙEèÝT$Ý\$ÙèÙàÝ$è����ƒìÙEèÝT$ÙèÙàÝ\$Ý$è����ÙèƒìÝ\$ÙEèÝT$Ý$è����ÝEȃìÝT$ÝT$Ý$è����ƒìÙEèÝT$Ý\$ÙèÙàÝ$è����ÙèƒìÙàÝ\$ÙEèÝT$Ý$è����ƒìÙEèÝT$ÙèÙàÝ\$Ý$è����ƒìÉé����U‰åƒìX€=����uÇD$‰���Ç$���è����Ç$���è����Ý��ƒìÝT$ÝT$Ý$Ý]Øè����ƒìÙîÝT$ÝT$ÙèÝ$Ù]èè����ƒìÙEèÝT$ÙèÝ\$Ý$è����ƒìÙèÝ\$ÙEèÝT$Ý$è����Ý ��ƒìÝT$ÝEØÝT$Ý$Ý]Èè����ƒìÙEèÝT$Ý\$ÙèÝ$è����ÙèƒìÙàÝ\$ÙEèÝT$Ý$è����ƒìÙEèÝT$ÙèÝ\$Ý$è����ÝE؃ìÝT$ÝEÈÝ\$Ý$è����ƒìÙEèÝT$Ý\$ÙèÝ$è����ƒìÙèÝ\$ÙEèÝT$Ý$è����ƒìÙEèÝT$ÙèÙàÝ\$Ý$è����ÝEȃìÝT$Ý\$ÝEØÝ$è����ƒìÙEèÝT$Ý\$ÙèÝ$è����ƒìÙEèÝT$ÙèÙàÝ\$Ý$è����ÙèƒìÙàÝ\$ÙEèÝT$Ý$è����ƒìÝEØÝT$Ý\$ÝEÈÝ$è����ƒìÙEèÝT$Ý\$ÙèÙàÝ$è����ƒìÙèÝ\$ÙEèÝT$Ý$è����ƒìÙEèÝT$ÙèÝ\$Ý$è����ÝEȃìÝT$ÝEØÝ\$Ý$è����ƒìÙEèÝT$Ý\$ÙèÙàÝ$è����ƒìÙEèÝT$ÙèÝ\$Ý$è����ÙèƒìÙàÝ\$ÙEèÝT$Ý$è����ƒìÝEØÝ\$ÝEÈÝT$Ý$è����ƒìÙEèÝT$Ý\$ÙèÙàÝ$è����ƒìÙEèÝT$ÙèÙàÝ\$Ý$è����ÙèƒìÝ\$ÙEèÝT$Ý$è����ÝEȃìÝT$ÝT$Ý$è����ƒìÙEèÝT$Ý\$ÙèÙàÝ$è����ÙèƒìÙàÝ\$ÙEèÝT$Ý$è����ƒìÙEèÝT$ÙèÙàÝ\$Ý$è����ƒìÉé����U‰åƒìH€=����uÇD$œ���Ç$���è����Ç$ ���è����ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë?ÇD$ZN¡ ÇD$ ÊÒà?è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?è����ÙèƒìÝT$ÝT$ÙèÙàÝ$Ù]ØÙ]èè����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?è����ÙEèƒìÝT$ÝT$Ý$è����ƒìè����Ç$ ���è����ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë¿ÇD$ZN¡ ÇD$ ÊÒà?è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è����ƒìÙEØÝ\$ÙEèÝT$Ý$è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è����ƒìÙEØÝT$ÙEèÝ\$Ý$è����ƒìè����Ç$ ���è����ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë?ÇD$ZN¡ ÇD$ ÊÒà¿è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿è����ÙEèƒìÝT$ÙEØÝ\$Ý$è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿è����ÙEèƒìÝ\$ÙEØÝT$Ý$è����ƒìè����Ç$ ���è����ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë¿ÇD$ZN¡ ÇD$ ÊÒà¿è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è����ƒìÙEØÝT$ÝT$Ý$è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è����ƒìÙEØÝT$Ý\$ÙEèÝ$è����ƒìè����Ç$ ���è����ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà?Ç$ÛHF ÇD$ˆ8ë?è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?è����ÙEèƒìÝT$ÙEØÝ\$Ý$è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?è����ÙEèƒìÝT$ÝT$Ý$è����ƒìè����Ç$ ���è����ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà?Ç$ÛHF ÇD$ˆ8ë¿è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿è����ÙEèƒìÝT$Ý\$ÙEØÝ$è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è����ÙEèƒìÝ\$ÙEØÝT$Ý$è����ƒìè����Ç$ ���è����ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà¿Ç$ÛHF ÇD$ˆ8ë?è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è����ƒìÙEØÝ\$ÙEèÝT$Ý$è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?è����ƒìÙEØÝT$Ý\$ÙEèÝ$è����ƒìè����Ç$ ���è����ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà¿Ç$ÛHF ÇD$ˆ8ë¿è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è����ƒìÙEØÝT$ÝT$Ý$è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿è����ƒìÙEØÝT$ÙEèÝ\$Ý$è����ƒìè����Ç$ ���è����ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë?Ç$ZN¡ ÇD$ÊÒà?è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?è����ƒìÙEØÝ\$ÙEèÝT$Ý$è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?è����ÙEèƒìÝT$ÝT$Ý$è����ƒìè����Ç$ ���è����ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë¿Ç$ZN¡ ÇD$ÊÒà?è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?è����ÙEèƒìÝT$ÙEØÝ\$Ý$è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è����ƒìÙEØÝT$Ý\$ÙEèÝ$è����ƒìè����Ç$ ���è����ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë?Ç$ZN¡ ÇD$ÊÒà¿è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿è����ÙEèƒìÝT$Ý\$ÙEØÝ$è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è����ƒìÙEØÝT$ÙEèÝ\$Ý$è����ƒìè����Ç$ ���è����ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë¿Ç$ZN¡ ÇD$ÊÒà¿è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è����ƒìÙEØÝT$ÝT$Ý$è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿è����ƒìÙEèÝ\$ÙEØÝT$Ý$è����ƒìÉé����U‰åƒìH€=����uÇD$²���Ç$���è����Ç$���è����ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë?ÇD$ZN¡ ÇD$ ÊÒà?è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?è����ÙèƒìÝT$ÝT$ÙèÙàÝ$Ù]ØÙ]èè����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?è����ÙEèƒìÝT$ÝT$Ý$è����ƒìè����Ç$���è����ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë¿ÇD$ZN¡ ÇD$ ÊÒà?è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è����ƒìÙEØÝ\$ÙEèÝT$Ý$è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è����ƒìÙEØÝT$ÙEèÝ\$Ý$è����ƒìè����Ç$���è����ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë?ÇD$ZN¡ ÇD$ ÊÒà¿è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿è����ÙEèƒìÝT$ÙEØÝ\$Ý$è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿è����ÙEèƒìÝ\$ÙEØÝT$Ý$è����ƒìè����Ç$���è����ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë¿ÇD$ZN¡ ÇD$ ÊÒà¿è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è����ƒìÙEØÝT$ÝT$Ý$è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è����ƒìÙEØÝT$Ý\$ÙEèÝ$è����ƒìè����Ç$���è����ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà?Ç$ÛHF ÇD$ˆ8ë?è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?è����ÙEèƒìÝT$ÙEØÝ\$Ý$è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?è����ÙEèƒìÝT$ÝT$Ý$è����ƒìè����Ç$���è����ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà?Ç$ÛHF ÇD$ˆ8ë¿è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿è����ÙEèƒìÝT$Ý\$ÙEØÝ$è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è����ÙEèƒìÝ\$ÙEØÝT$Ý$è����ƒìè����Ç$���è����ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà¿Ç$ÛHF ÇD$ˆ8ë?è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è����ƒìÙEØÝ\$ÙEèÝT$Ý$è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?è����ƒìÙEØÝT$Ý\$ÙEèÝ$è����ƒìè����Ç$���è����ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà¿Ç$ÛHF ÇD$ˆ8ë¿è����ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è����ƒìÙEØÝT$ÝT$Ý$è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿è����ƒìÙEØÝT$ÙEèÝ\$Ý$è����ƒìè����Ç$���è����ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë?Ç$ZN¡ ÇD$ÊÒà?è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?è����ƒìÙEØÝ\$ÙEèÝT$Ý$è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?è����ÙEèƒìÝT$ÝT$Ý$è����ƒìè����Ç$���è����ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë¿Ç$ZN¡ ÇD$ÊÒà?è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?è����ÙEèƒìÝT$ÙEØÝ\$Ý$è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è����ƒìÙEØÝT$Ý\$ÙEèÝ$è����ƒìè����Ç$���è����ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë?Ç$ZN¡ ÇD$ÊÒà¿è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿è����ÙEèƒìÝT$Ý\$ÙEØÝ$è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è����ƒìÙEØÝT$ÙEèÝ\$Ý$è����ƒìè����Ç$���è����ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë¿Ç$ZN¡ ÇD$ÊÒà¿è����ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è����ƒìÙEØÝT$ÝT$Ý$è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è����ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿è����ƒìÙEèÝ\$ÙEØÝT$Ý$è����ƒìÉé����U‰åƒìh€=����Ù��ÜMuÝ]èÇD$Ç���Ç$���è����ÝEèÝ]èÇ$���è����ÙîƒìÝT$ÝT$ÙèÝ$ÙÉÙ]ÈÙ]¸è����ÝEèƒìÙÀÙàÙÉÝT$ÙÉÝT$ÙÉÝ$Ý]Øè����ƒìÝEØÝT$Ý\$ÝEèÝ$è����ÝE؃ìÝ\$ÝEèÝT$Ý$è����ƒìÝEèÝT$ÝT$Ý$è����ÙEȃìÝT$ÙE¸Ý\$Ý$è����ƒìÝEèÝT$ÝT$Ý$è����ƒìÝEØÝ\$ÝEèÝT$Ý$è����ƒìÝEØÝT$ÝEèÝ\$Ý$è����ƒìÝEèÝT$Ý\$ÝEØÝ$è����ÙE¸ƒìÝ\$ÙEÈÝT$Ý$è����ƒìÝEèÝT$ÝT$Ý$è����ƒìÝEèÝT$Ý\$ÝEØÝ$è����ƒìÝEèÝ\$ÝEØÝT$Ý$è����ƒìÝEèÝT$ÝEØÝ\$Ý$è����ÙEȃìÝT$Ý\$ÙèÙàÝ$Ù]¸è����ƒìÝEèÝ\$ÝEØÝT$Ý$è����ƒìÝEèÝT$Ý\$ÝEØÝ$è����ÝE؃ìÝT$ÝEèÝ\$Ý$è����ÝE؃ìÝT$ÝT$Ý$è����ÙEȃìÝT$ÙE¸Ý\$Ý$è����ƒìÝEèÝ\$ÝEØÝT$Ý$è����ÝE؃ìÝT$ÝT$Ý$è����ÝE؃ìÝT$Ý\$ÝEèÝ$è����ƒìÝEèÝT$ÝEØÝ\$Ý$è����ÙE¸ƒìÝ\$ÙEÈÝT$Ý$è����ÝE؃ìÝT$ÝT$Ý$è����ÝE؃ìÝT$ÝEèÝ\$Ý$è����ƒìÝEØÝ\$ÝEèÝT$Ý$è����ƒìÝEØÝT$Ý\$ÝEèÝ$è����ƒìÉé����¶����U‰åƒìh€=����Ù��ÜMuÝ]èÇD$Õ���Ç$���è����ÝEèÝ]èÇ$���è����ÙîƒìÝT$ÝT$ÙèÝ$ÙÉÙ]ÈÙ]¸è����ÝEèƒìÙÀÙàÙÉÝT$ÙÉÝT$ÙÉÝ$Ý]Øè����ƒìÝEØÝT$Ý\$ÝEèÝ$è����ÝE؃ìÝ\$ÝEèÝT$Ý$è����ƒìÝEèÝT$ÝT$Ý$è����ƒìè����Ç$���è����ÙEȃìÝT$ÙE¸Ý\$Ý$è����ƒìÝEèÝT$ÝT$Ý$è����ƒìÝEØÝ\$ÝEèÝT$Ý$è����ƒìÝEØÝT$ÝEèÝ\$Ý$è����ƒìÝEèÝT$Ý\$ÝEØÝ$è����ƒìè����Ç$���è����ÙE¸ƒìÝ\$ÙEÈÝT$Ý$è����ƒìÝEèÝT$ÝT$Ý$è����ƒìÝEèÝT$Ý\$ÝEØÝ$è����ƒìÝEèÝ\$ÝEØÝT$Ý$è����ƒìÝEèÝT$ÝEØÝ\$Ý$è����ƒìè����Ç$���è����ÙEȃìÝT$Ý\$ÙèÙàÝ$Ù]¸è����ƒìÝEèÝ\$ÝEØÝT$Ý$è����ƒìÝEèÝT$Ý\$ÝEØÝ$è����ƒìÝEØÝT$ÝEèÝ\$Ý$è����ÝE؃ìÝT$ÝT$Ý$è����ƒìè����Ç$���è����ÙEȃìÝT$ÙE¸Ý\$Ý$è����ƒìÝEèÝ\$ÝEØÝT$Ý$è����ÝE؃ìÝT$ÝT$Ý$è����ƒìÝEØÝT$Ý\$ÝEèÝ$è����ƒìÝEèÝT$ÝEØÝ\$Ý$è����ƒìè����Ç$���è����ƒìÙE¸Ý\$ÙEÈÝT$Ý$è����ÝE؃ìÝT$ÝT$Ý$è����ÝE؃ìÝT$ÝEèÝ\$Ý$è����ƒìÝEØÝ\$ÝEèÝT$Ý$è����ƒìÝEØÝT$Ý\$ÝEèÝ$è����ƒìÉé����fU‰åVSƒì€=����„¯���Ç$���¾`���1Ûè����ƒìt&�‰4$ƒÆè����‹ƒ`��@Å€��ƒì‰$è����‹ƒd��@Å€��ƒì‰$è����‹ƒh��@Å€��ƒì‰$è����‹ƒl��ƒÃ@Å€��ƒì‰$è����ƒìûÀ���…wÿÿÿeø[^]é����ÇD$â���Ç$���è����é8ÿÿÿv�U‰åVSƒì€=����„¯���¾`���1Ût&�Ç$���è����ƒì‰4$ƒÆè����‹ƒ`��@Å€��ƒì‰$è����‹ƒd��@Å€��ƒì‰$è����‹ƒh��@Å€��ƒì‰$è����‹ƒl��ƒÃ@Å€��ƒì‰$è����ƒìè����ûÀ���…cÿÿÿeø[^]ÃÇD$ÿ���Ç$���è����é8ÿÿÿv�U‰åWVSƒìL€=����„��Ç$���1Ûè����ƒì‹“ ��‹ƒ$�� R‹“(��ƒÃ ÝÍè��@ÝÅè��<Í����ØáÇà��R4Õ����ÝÍð��ÝÕð��ØáÙɉuÄ4Å����Æà��Ü,Åð��ÙËÜ,Õè��ÙÂØÊÙÄØÊÞéÝ]ÐÝÍà��ÝÕà��ØáÙÉÜ,Åà��ÙÍEЉ$ØÉÙËØÍÞëÙÊÝ]ØÞËÞÉÞéÝ]àè����ƒì‰<$è����ƒì‰4$è����‹EÄà��ƒì‰$è����ƒìûð���… ÿÿÿè����eô[^_]ô&����ÇD$��Ç$���è����éÍþÿÿ´&����U‰åWVSƒìL€=����„��1Û‹“ ��‹ƒ$��Ç$��� R‹“(��ƒÃ ÝÍè��@ÝÅè��<Í����ØáÇà��R4Õ����ÝÍð��ÝÕð��ØáÙɉuÄ4Å����Æà��Ü,Åð��ÙËÜ,Õè��ÙÂØÊÙÄØÊÞéÝ]ÐÝÍà��ÝÕà��ØáÙÉÜ,Åà��ÙÍØÉÙËØÍÞëÙÊÝ]ØÞËÞÉÞéÝ]àè����EЃì‰$è����ƒì‰<$è����ƒì‰4$è����‹EÄà��ƒì‰$è����ƒìè����ûð���…÷þÿÿeô[^_]ô&����ÇD$0��Ç$���è����éÍþÿÿ´&����U‰åƒì(€=����uÇD$D��Ç$���è����Ç$���è����Ý���ƒìÙàÝ\$Ý���ÙàÝ\$Ý����ÙàÝ$è����ƒìÇ$���è����ƒìÇ$H���è����ƒìÇ$0���è����Ý(���ƒìÙàÝ\$Ý ���ÙàÝ\$Ý���ÙàÝ$è����ƒìÇ$����è����ƒìÇ$0���è����ƒìÇ$H���è����Ý@���ƒìÙàÝ\$Ý8���ÙàÝ\$Ý0���ÙàÝ$è����ƒìÇ$����è����ƒìÇ$H���è����ƒìÇ$���è����ÝX���ƒìÙàÝ\$ÝP���ÙàÝ\$ÝH���ÙàÝ$è����ƒìÇ$����è����ƒìÇ$���è����ƒìÇ$0���è����ƒìÉé����´&����U‰åƒì(€=����uÇD$Y��Ç$���è����Ç$���è����Ý���ƒìÙàÝ\$Ý���ÙàÝ\$Ý����ÙàÝ$è����ƒìÇ$���è����ƒìÇ$H���è����ƒìÇ$0���è����Ý(���ƒìÙàÝ\$Ý ���ÙàÝ\$Ý���ÙàÝ$è����ƒìÇ$����è����ƒìÇ$0���è����ƒìÇ$H���è����Ý@���ƒìÙàÝ\$Ý8���ÙàÝ\$Ý0���ÙàÝ$è����ƒìÇ$����è����ƒìÇ$H���è����ƒìÇ$���è����ÝX���ƒìÙàÝ\$ÝP���ÙàÝ\$ÝH���ÙàÝ$è����ƒìÇ$����è����ƒìÇ$���è����ƒìÇ$0���è����ƒìÉé����´&����U‰åWV‰ÖS‰Ã‰Èƒì<Áø‰Ç1Ï)Ç…É…¤���Ý(��Ý]ØW‰T$‰UÈÇ$���è����‹Uȉ‰T$Ç$���è����‰‹…Ò‰Uàty…Àtu‹UàÙîƒÿ‹6ÝÙèÝ~:»���¶����‰]äÛEäÜMØÝ$Ý]Èè����‹EàÝØÝEÈÝ$è����ÝÞƒÃ9ûuÑ‹UàÝÝúÝÝþƒÄ<[^_]ÉMäÛEäÜ=(��Ý]ØéQÿÿÿ‹Eà‰$è����‹‰$è����Ç$p��è����‹‰]àé`ÿÿÿ¶����¼'����U‰åWVSƒìl‹uÝEÝ]È‹]ÝE…ö‰ðÝ]°Ž£��‰EÔÛEÔÜ}°€=����Ý]¨„q��‰Ù÷ÙUàEäè£þÿÿ…öˆ«���ÇE¼����Ùî9u¼Ý]À„‹���¶����Ç$���è����ƒì…Û~R1ÿ‹EäÙîÝ\$Ýø‹EàÝ\$ÝøÝ$è����‹EäƒìÝEÀÝ\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øƒÇÝ$è����ƒì9û°è����ƒE¼;u¼|ÝEÀÜE¨9u¼Ý]À…{ÿÿÿÝE°Ý]ÀépÿÿÿÇ$���è����ƒì…Û~y1ö‹EäÙîÝ\$Ýð‹EàÝ\$ÝðÝ$è����‹EäƒìÙîÝ\$ÝEÈÜ ð‹EàÝ\$ÝEÈÜ ðÝ$è����‹EäƒìÝE°Ý\$ÝEÈÜ ð‹EàÝ\$ÝEÈÜ ðƒÆÝ$è����ƒì9ó‰è����‹Eä‰$è����‹Eà‰$è����eô[^_]ÃÇD$œ��Ç$���è����évþÿÿ¸���éSþÿÿ´&����¼'����U‰åWVSìŒ���‹]ÝE€=����Ý]È‹uÝEÝ]¨„"��‰Ù÷ÙUàEäèÖüÿÿÇ$���è����ÙèƒìÙàÝ\$ÙîÝT$Ý$Ù]ˆè����ƒìÙEˆÝT$ÝT$Ý$è����ƒì…ÛÙEˆˆà��ÝØ1ÿ¶����Ùî‹EäÝ\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øƒÇÝ$è����ƒì9û}Òè����<Ý����Ç$���è����ƒìÙèÝ\$ÙîÝT$Ý$è����ƒìÝE¨Ý\$ÙîÝT$Ý$è����‰]Àƒìt&�‹EäÝE¨Ý\$ÝEÈÜ 8‹EàÝ\$ÝEÈÜ 8ƒïÝ$è����ƒìƒmÀyÏè����…öŽá���‰uÔÛEÔÜ}¨ÇE´���9u´ÝU Ý]ÀÙîÝ]¸„²���Ç$���è����ƒì…Ûxz1ÿÙî‹EäÝ\$Ýø‹EàÝ\$ÝøÝ$è����‹EäƒìÝE¸Ý\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øÝ$è����‹EäƒìÝEÀÝ\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øƒÇÝ$è����ƒì9û}ˆè����ƒE´;u´|"ÝEÀÝU¸ÝE ÞÁ9u´Ý]À…NÿÿÿÝE¨Ý]ÀéCÿÿÿ‹Eä‰$è����‹Eà‰$è����eô[^_]ÃÇD$­��Ç$���è����éÅýÿÿÙ]ˆè����Ç$���è����ÙèPÝ\$ÙEˆÝT$Ý$è����ƒìÝE¨Ý\$ÙEˆÝT$Ý$è����ƒìéþÿÿë U‰åWVSìŒ���‹u€=����ÝEÝ]Ћ]„±��‰ñ÷ÙUàEäèúÿÿ UØEÜèúÿÿƒûŽ¥���ÇE´���‹EØ‹U´ÝЋEÜÝ]ÀÝÐÝ]ÈÇ$���è����ƒì…öxdÝEÀ1ÿÜMÐÝ]¸‹EàÝø‹EäÝøƒÇÝEÀÝ\$ÝT$ÙÉÝ$Ý]˜Ý]¨è����ƒìÝE¸Ý\$ÝE¨ÜMÈÜMÐÝ\$ÝE˜ÜMÈÜMÐÝ$è����ƒì9þ}§è����ƒE´;]´bÿÿÿ…öŽª���ÇEÈ����Ç$���è����ƒì…Ûx}‹EÈ1ÿÁàt&�‹U܉E”Ýú‹UàÝØÉÙÉ‹UäÜ ‹UØÝúƒÇÝT$ÙÉÝT$ÙÊÝ$Ý]˜ÙÉÝ]¨Ý]ˆè����ÝEˆƒìÜMÐÝ\$ÝE¨ÜMÐÝ\$ÝE˜ÜMÐÝ$è����‹E”ƒì9û}è����ƒEÈ;uÈ^ÿÿÿ‹Eä‰$è����‹Eà‰$è����‹E܉$è����‹E؉$è����eô[^_]ÃÇD$¿��Ç$���è����é6þÿÿU‰åWVSìŒ���‹]€=����ÝEÝ]È‹u„2��‰Ù÷ÙUàEäè,øÿÿEÜ 6UØèøÿÿ…ö‹EØŽ#��‹UÜÝ@¸���Ý]ÀÝÝ]ÐÇ$���è����ƒìÙèÝ\$ÙîÝT$Ý$Ù]ˆè����ƒìÝEÈÝ\$ÙEˆÝT$Ý$è����ƒì…ÛxxÝEÀ<Ý����ÜMȉ]¸Ý]°¶����‹EäÝEÀÝ\$ÝEÐÜ 8‹EàÝ\$ÝEÐÜ 8Ý$è����‹EäƒìÝE°Ý\$ÝEÐÜ 8‹EàÜMÈÝ\$ÝEÐÜ 8ƒïÜMÈÝ$è����ƒìƒm¸y¡ƒîè����ƒþ‰u Ž9��ÝEÀ¿���Ý]¸ÇE¤���‹EØÝ8‹EÜÝ]ÀÝ8Ý]ˆÇ$���è����ƒì…ÛÝEˆˆÐ���ÝEÀ1öÜMÈÝ]°ÝE¸ÜMÈÝ]¨‹EäÝEÀÝ\$ÝðØÉ‹EàÝ\$ÝðØÉÝ$Ý]ˆè����‹EäƒìÝE°Ý\$ÝEˆÝðØÉ‹EàÜMÈÝ\$ÝðÞÉÜMÈÝ$è����‹EäƒìÝE¸Ý\$ÝEÐÜ ð‹EàÝ\$ÝEÐÜ ðÝ$è����‹EäƒìÝE¨Ý\$ÝEÐÜ ð‹EàÜMÈÝ\$ÝEÐÜ ðƒÆÜMÈÝ$è����ƒì9óÝEˆDÿÿÿÝ]ˆƒÇè����‹E ƒE¤9E¤ÝEˆ}Ý]ÐÝEÀÝ]¸éÜþÿÿÝ]ÐÇ$���è����ÙèƒìÙàÝ\$ÙîÝT$Ý$Ù]ˆè����ÝEȃìÙàÝ\$ÙEˆÝT$Ý$è����ƒì…ÛxhÝEÀ1öÜMÈÝ]°‹EäÝEÀÝ\$ÝEÐÜ ð‹EàÝ\$ÝEÐÜ ðÝ$è����‹EäƒìÝE°Ý\$ÝEÐÜ ð‹EàÜMÈÝ\$ÝEÐÜ ðƒÆÜMÈÝ$è����ƒì9ó}£è����‹Eä‰$è����‹Eà‰$è����‹E܉$è����‹E؉$è����eô[^_]ÃÇD$Î��Ç$���è����éµüÿÿÝ�1ÀÝ]À‹UÜéÜüÿÿU‰åWVSì¼���‹E‹U€=����ÝEÝEÝ]ЉE ‰U¬„ï��‹M …ÉŽ ��‹] ‹U¬ƒÃ…Ò4[Ž��‹E¬ƒÀ‰E¸¯u¸Ý]ˆÇ$���‰t$è����‰t$Ç$���‰Eœè����‰E˜è����[‹}œÁà‰EÜ‹E˜‰]àÇE¼����ÛE¬‰ÃÜ=(��Ý]°ÛE Ü=0��Ý]ÈÙîÙÀÙèÙÊÝ]ÀÝEˆ´&����Ùî1öÙÀ1ÀÙèëkt&�ÜEȉ…dÿÿÿÝ$ÝXÿÿÿÙÊÝxÿÿÿÝhÿÿÿÝ]ˆè����Ý…XÿÿÿÝ$ÝHÿÿÿè����‹…dÿÿÿÝ…HÿÿÿÝ…XÿÿÿÝ…xÿÿÿÝ…hÿÿÿÝEˆÙËÙÊÙÍÙÉÙÌÙÃÀØÉÜEÐÙÀØÏÝ7ØÍÝ\7ÙÃØÊÝ\7ÙÅØÉÝ3ØÌÝ\3Ý\3ƒÆ;EàŒ]ÿÿÿÝØÝÙÝÙƒE¼‹U¸}Ü]Ü9U¼}9ÝEÀÜE°ÝUÀÝ$Ý]ˆè����ÝEÀÝ$Ýxÿÿÿè����Ý…xÿÿÿÝEˆÙÉÙÊÙÉéüþÿÿÝØ‹]àÇ$���è����‹U˜ÇE¨����[ÁàÂEœƒì‰UȉEÐÇE¤����¶����‹Eœ1Û1ÿ‹U¨‹u˜u¨‰Uà‹UÈF‰E¸‹EЃÂ‰U¼‹UàƒÀ‰EÀƒÂ‰U°‰4$ƒÇè����‹Eàƒì‰$è����‹E¸؃ì‰$è����‹E°؃ì‰$è����‹E¼؃ì‰$è����‹EÀ؃ì‰$è����‹EÈ؃ì‰$è����‹EÐ؃ì‰$è����uÜ]܃ì9}¬rÿÿÿƒE¤‹E¤ƒE¨9E ~‹UÀ‹E¼‰UЉEÈéÿÿÿè����‹Eœ‰$è����‹U˜‰$è����eô[^_]é����Ý]ˆÇD$Þ��Ç$���è����‹M …ÉÝEˆ÷üÿÿ‹U¬¾���»���ÇE ���…ÒïüÿÿÇE¸���ÇE¬���éåüÿÿë U‰åWVSì¼���‹E€=����ÝEÝEÝ]Ћ]‰EÄ„’��…Û4[ެ��‹}Ä…ÿ޶��¯uÄÝ]ˆÇ$���‰t$è����‰t$Ç$���‰E°è����‰E¬è����[‹}°‰]äÁà‰EÜ‹E¬‰]àÇE´����ÛEĉÃÜ=(��Ý] ÛEäÜ=0��Ý]ÈÙîÙÀÙèÙÊÝ]¸ÝEˆÙî1öÙÀ1ÀÙèëgÜEȉ…dÿÿÿÝ$ÝXÿÿÿÙÊÝxÿÿÿÝhÿÿÿÝ]ˆè����Ý…XÿÿÿÝ$ÝHÿÿÿè����‹…dÿÿÿÝ…HÿÿÿÝ…XÿÿÿÝ…xÿÿÿÝ…hÿÿÿÝEˆÙËÙÊÙÍÙÉÙÌÙÃÀØÉÜEÐÙÆØÉÝ7ØÍÝ\7ÙÃØÊÝ\7ÙÅØÉÝ3ØÌÝ\3Ý\3ƒÆ9Eà]ÿÿÿÝØÝÙÝÙƒE´‹E´}Ü]Ü9EÄ~9ÝE¸ÜE ÝU¸Ý$Ý]ˆè����ÝE¸Ý$Ýxÿÿÿè����Ý…xÿÿÿÝEˆÙÉÙÊÙÉé�ÿÿÿÝØ‹]àÇEÐ����ÇEà����‰]Èv�Ç$���1Ûè����‹}¬‹u°}àuàƒìv�‰<$ƒÃè����ƒì‰4$è����}Üu܃ì9]ÄÜè����ƒEЋEЃEà9Eȧ‹]ÈÇEÐ����ÇEÈ����‰]àv�Ç$���1öè����‹]¬‹}°]Ð}Ѓìv�‰$ƒÆƒÃè����ƒì‰<$ƒÇè����ƒì9uàÜè����‹E܃EÈEЋEÈ9EÄ¥‹E°‰$è����‹E¬‰$è����eô[^_]é����Ý]ˆÇD$í��4[Ç$���è����…ÛÝEˆTýÿÿ‹}ľ���»���…ÿJýÿÿÇEÄ���é>ýÿÿ¶����¼'����U‰åWVSì¬���‹uÝEÝ]¨‹]ÝE…ö‰ðÝ] ŽV��‰EÔÛEÔÝE ØñÝ]ˆÜ}¨Ý]ÝE ØÈÝE¨ØÈÞÁÙÀÙúÙÀÝàßàžzt,ÝØÙÉëÝØÙÉÝ$ÝhÿÿÿÛ½xÿÿÿè����Û­xÿÿÿÝ…hÿÿÿÙÊÜ} Ý]¸ÝàßàžztÝØëÝØÝ$è����ëÝÙ€=����ÝE¨Þñ„£��‰Ù÷ÙUàEäÝxÿÿÿè…íÿÿ…öÝ…xÿÿÿŽº���ÝE¨Ý]ÈÙîÝ]ÀÇE´����Ý]˜fÇ$���è����ƒì…Û~h1ÿÝE˜‹EäÝE¸Ý\$ÝøØÉ‹EàÝ\$ÝøØÉÝ$Ýxÿÿÿè����‹EäƒìÝEÀÝ\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øƒÇÝ$è����ƒì9ûÝ…xÿÿÿŸÝØè����ƒE´;u´~ÝEÀÜEˆÝ]ÀÝEÈÜeÝ]Èé`ÿÿÿÝE˜ÝxÿÿÿÇ$���è����ƒì…ÛÝ…xÿÿÿŽ~���1ö‹EäÝE¸Ý\$ÝðØÉ‹EàÝ\$ÝðØÉÝ$Ýxÿÿÿè����‹EäƒìÙîÝ\$ÝE¨Ü ð‹EàÝ\$ÝE¨Ü ðƒÆÝ$è����ƒìÝE Ý\$ÙîÝT$Ý$è����ƒì9óÝ…xÿÿÿˆÝØëÝØè����‹Eä‰$è����‹Eà‰$è����eô[^_]ÃÝxÿÿÿÇD$û��Ç$���è����Ý…xÿÿÿé8þÿÿ¸���é ýÿÿ´&����U‰åWVSìÌ���‹]ÝEÝEÝU‹uÙÀÞÉÙÁØÊÞÁÙÀÙúÙÀÝàßàžztBÝØÙÉëÝØÙÉÝ$ÙÊÝXÿÿÿÙÉÝhÿÿÿÛ½Hÿÿÿè����Û­HÿÿÿÝ…hÿÿÿÝ…XÿÿÿÙËÙÉÙÊÙÉÜ}Ý]°ÝàßàžztÝØëÝØÝ$ÝXÿÿÿè����Ý…XÿÿÿÙÉëÝÙØù€=����Ý] „þ��‰Ù÷ÙUàEäÝXÿÿÿèôêÿÿÇ$���è����ÙèƒìÙàÝ\$ÙîÝT$Ý$Ùhÿÿÿè����ƒìÙ…hÿÿÿÝT$ÝT$Ý$è����ƒì…ÛÝ…Xÿÿÿx;1ÿ‹EäÙîÝ\$ÝøØÉ‹EàÝ\$ÝøƒÇØÉÝ$ÝXÿÿÿè����ƒì9ûÝ…Xÿÿÿ}ÈÝXÿÿÿè����~ÿ…ÿÝ…XÿÿÿŽp��…öŽ^��‰uÔÛEÔÝEØñÇEœ����ÝU€ÙÉØúÝUˆØêÝ]ÈÙÉÝ]ÀÝ]¸ÙîÝ]¨¶����Ç$���è����ƒì…Ûˆ˜���1öÝE t&�‹EäÝE°Ý\$ÝðØÉ‹EàÝ\$ÝðØÉÝ$Ýhÿÿÿè����‹EäƒìÝE¨Ý\$ÝEÀÜ ð‹EàÝ\$ÝEÀÜ ðÝ$è����‹EäƒìÝE¸Ý\$ÝEÈÜ ð‹EàÝ\$ÝEÈÜ ðƒÆÝ$è����ƒì9óÝ…hÿÿÿsÿÿÿÝØè����ƒEœ;}œ~ÝE¸ÝU¨ÝEÈÝUÀÝEˆÞéÝ]ÈÜE€Ý]¸é$ÿÿÿÝEÈÝXÿÿÿÇ$���è����‹EäƒìÝE°Ý\$ÝE Ü‹EàÝ\$ÝE ÜÝ$è����ƒì…ÛÝ…Xÿÿÿޏ���¾���1ÿ‹EäÝE¸Ý\$ÝøØÉ‹EàÝ\$ÝøƒÇØÉÝ$ÝXÿÿÿè����ƒìÝEÝ\$ÙîÝT$Ý$è����‹EäƒìÝE°Ý\$ÝE Ü 0‹EàÝ\$ÝE Ü 0Ý$è����‹EäƒìÝE¸Ý\$Ý…XÿÿÿÝ0ØÉ‹EàÝ\$Ý0ƒÆÞÉÝ$è����ƒì9ûÝ…XÿÿÿTÿÿÿÝØëÝØè����‹Eä‰$è����‹Eà‰$è����eô[^_]ÃÝXÿÿÿÇD$��Ç$���è����Ý…XÿÿÿéÝüÿÿ¾���é˜ýÿÿÙîÝ]¸é¡þÿÿ������ð?����������������á=UUUUÕ¿+øþÝ}+î?��������á=UUUUÕ¿+øþÝ}+Þ¿â5 p½ ê?á=UUUUÕ¿+øþÝ}+Þ¿â5 p½ ê¿çnfž Ö?çnfž Ö?������à?çnfž Ö¿çnfž Ö?������à?çnfž Ö¿çnfž Ö¿������à?çnfž Ö?çnfž Ö¿������à?��������������ð?��������������ð¿������������������������������ð¿��������������ð?����������������çnfž Ö?çnfž Ö?������à¿çnfž Ö¿çnfž Ö?������à¿çnfž Ö¿çnfž Ö¿������à¿çnfž Ö?çnfž Ö¿������à¿����������������������ð?¸Kfž æ?��������������à?��������¸Kfž æ?������à?¸Kfž æ¿��������������à?��������¸Kfž æ¿������à?¸Kfž æ?¸Kfž æ?��������¸Kfž æ¿¸Kfž æ?��������¸Kfž æ¿¸Kfž æ¿��������¸Kfž æ?¸Kfž æ¿��������¸Kfž æ?��������������à¿��������¸Kfž æ?������࿸Kfž æ¿��������������à¿��������¸Kfž æ¿������à¿����������������������ð¿����������������������ð?����������������Ïð¿Å%ŸÜ?Ïð¿Å%Ÿì?��������Ïð¿Å%ŸÜ?U” m°Ñ?ÛHF ˆ8ë?Ïð¿Å%ŸÜ?ÕµoqÉ'ç¿ZN¡ ÊÒà?Ïð¿Å%ŸÜ?ÕµoqÉ'ç¿ZN¡ ÊÒà¿Ïð¿Å%ŸÜ?U” m°Ñ?ÛHF ˆ8ë¿Ïð¿Å%ŸÜ¿Ïð¿Å%Ÿì¿��������Ïð¿Å%ŸÜ¿U” m°Ñ¿ÛHF ˆ8ë?Ïð¿Å%ŸÜ¿ÕµoqÉ'ç?ZN¡ ÊÒà?Ïð¿Å%ŸÜ¿ÕµoqÉ'ç?ZN¡ ÊÒà¿Ïð¿Å%ŸÜ¿U” m°Ñ¿ÛHF ˆ8ë¿������ð¿����������������glutSolidSierpinskiSponge��� ERROR: Function <%s> called without first calling 'glutInit'.�glutWireSierpinskiSponge�glutSolidOctahedron�glutWireOctahedron�glutSolidDodecahedron�glutWireDodecahedron�glutSolidCube�glutWireCube�glutSolidRhombicDodecahedron�glutWireRhombicDodecahedron�glutSolidIcosahedron�glutWireIcosahedron�glutSolidTetrahedron�glutWireTetrahedron����Failed to allocate memory in fghCircleTable�glutWireCylinder�glutSolidCylinder�glutWireSphere�glutSolidSphere�glutSolidTorus�glutWireTorus�glutWireCone�glutSolidCone������������������������������������������������������������������������������������������������������������������������� ������������ ������������ ������������ ������������ ��� ��� ������ ��� ��� ������ ��� ��� ������ ��� ��� ����������������������������������������������������������������������������������� ��������� ��������� ������������������������������ ������ ��� ��� ��� ��� ��� ������ ��� ��������� ��������� ��� ���������?����E§yâ?E§yâ¿-DTû!@-DTû!À�����������)����,���'����K���#����a���#����n���#����·���'����¾���'����Ã���7����Þ���2����ì���#����$��3����7��'����R��#����a��#����p��#����‚��4����¨��5����Î��)����ý��#������2����1��3����D��'����_��#����n��#����}��#������4����¤��5����Ú��'����ô��#���� ��#������#����W��'����^��'����c��7����x��)����ƒ��'����Š��'������7����›��2����¡��'����·��3����Ñ��4����é��4������4������'���� ��3����8��4����R��4����j��4����ƒ��3����›��4����³��4����Í��4����æ��3����þ��4������4����2��4����K��3����e��4����}��4����•��4����®��3����È��4����à��4����ú��4������3����-��4����G��4����_��4����u��3������4����©��4����Ã��4����Ø��)����ã��'����ê��'����ï��7����û��2������'������3����1��4����I��4����a��4����g��'����€��3����˜��4����²��4����Ê��4����ã��3����û��4������4����-��4����F��3����^��4����x��4����’��4����«��3����Å��4����Ý��4����õ��4���� ��3����( ��4����@ ��4����Z ��4����s ��3���� ��4����§ ��4����¿ ��4����Õ ��3����ï ��4���� ��4����# ��4����8 ��)����C ��'����J ��'����O ��7����[ ��2����ˆ ��3����µ ��4����Ô ��4���� ��4����. ��4����D ��4����L ��5����X ��2����… ��3����² ��4����Ë ��4����ø ��4����% ��4����> ��4����F ��5����R ��2���� ��3����¬ ��4����Å ��4����ò ��4���� ��4����8 ��4����@ ��5����L ��2����y ��3����¦ ��4����¼ ��4����é ��4������4����/��4����7��5����C��2����p��3������4����¶��4����ã��4������4����&��4����.��5����:��2����g��3����”��4����­��4����Ú��4������4���� ��4����(��5����4��2����a��3����Ž��4����§��4����Ô��4������4������4����"��5����.��2����[��3����ˆ��4����ž��4����Ë��4����ø��4������4������5����%��2����R��3������4����˜��4����Å��4����ò��4������4������5������2����I��3����v��4������4����¼��4����é��4������4���� ��5������2����C��3����p��4����‰��4����¶��4����ã��4����ü��4������5������2����=��3����j��4����€��4����­��4����Ú��4����ó��4������)������'������'������7����+��2����X��3����…��4����¤��4����Ñ��4����þ��4������4������5����(��2����U��3����‚��4����›��4����È��4����õ��4������4������5����"��2����O��3����|��4����•��4����Â��4����ï��4������4������5������2����I��3����v��4����Œ��4����¹��4����æ��4����ÿ��4������5������2����@��3����m��4����†��4����³��4����à��4����ö��4����þ��5���� ��2����7��3����d��4����}��4����ª��4����×��4����ð��4����ø��5������2����1��3����^��4����w��4����¤��4����Ñ��4����ê��4����ò��5����þ��2����+��3����X��4����n��4����›��4����È��4����á��4����é��5����õ��2����"��3����O��4����h��4����•��4����Â��4����Ø��4����à��5����ì��2������3����F��4����_��4����Œ��4����¹��4����Ò��4����Ú��5����æ��2���� ��3����@ ��4����Y ��4����† ��4����³ ��4����Ì ��4����Ô ��5����à ��2���� !��3����:!��4����P!��4����}!��4����ª!��4����Ã!��4����Ø!��)����ß!��'����ï!��'����ö!��'����û!��7���� "��2����,"��3����O"��4����h"��4����"��4����—"��4����°"��3����Æ"��4����ß"��4����ø"��4����#��4����*#��3����@#��4����Y#��4����r#��4����‹#��4����¨#��3����Á#��4����Ú#��4����ó#��4���� $��4����"$��3����;$��4����Q$��4����j$��4����ƒ$��4����œ$��3����²$��4����Ë$��4����ä$��4����ý$��4����%��)����%��'����/%��'����6%��'����;%��7����M%��2����l%��3����%��4����¨%��4����Á%��4����×%��4����ß%��5����ë%��2����&��3����&��4����3&��4����L&��4����e&��4����m&��5����y&��2����’&��3����¨&��4����Á&��4����Ú&��4����ó&��4����û&��5����'��2����$'��3����='��4����V'��4����o'��4����…'��4����'��5����™'��2����²'��3����Ë'��4����á'��4����ú'��4����(��4����(��5����'(��2����@(��3����V(��4����o(��4����ˆ(��4����¡(��4����º(��)����Í(��#����Ô(��2����ç(��.����í(��'����÷(��#����)��/����)��'����)��#����)��/����#)��'����-)��#����8)��/����>)��'����K)��#����V)��/����x)��'����)��'����„)��7����š)��)����¦)��#����¸)��2����Æ)��.����Ì)��'����Ö)��#����á)��/����ç)��'����ñ)��#����ü)��/����*��'���� *��#����*��/����*��'����**��#����5*��/����=*��5����X*��'����_*��'����d*��7����{*��)����*��2����™*��'����Ÿ*��'����¨*��'����²*��#����¼*��#����Ë*��#����Ü*��#����ã*��#����÷*��#����þ*��#����+��#����+��#����"+��#����-+��#����P+��.����[+��/����f+��/����n+��#����y+��/����+��5����¤+��'����«+��'����°+��7����Ë+��)����Ú+��'����à+��'����ð+��'����ú+��#����,��#����,��#����$,��#����+,��#����?,��#����F,��#����O,��#����c,��#����j,��#����u,��#����’,��2���� ,��.����«,��/����¶,��/����¾,��#����É,��/����Ñ,��5����ô,��'����û,��'�����-��7����-��)����#-��'����*-��'����/-��7����;-��2����A-��#����P-��#����\-��#����f-��3����p-��#����u-��/����-��#����„-��/����Ž-��#����“-��/����™-��#����¨-��#����´-��#����¾-��3����È-��#����Í-��/����×-��#����Ü-��/����æ-��#����ë-��/����ñ-��#�����.��#���� .��#����.��3���� .��#����%.��/����/.��#����4.��/����>.��#����C.��/����I.��#����X.��#����d.��#����n.��3����x.��#����}.��/����‡.��#����Œ.��/����–.��#����›.��/����¸.��)����Ã.��'����Ê.��'����Ï.��7����Û.��2����á.��#����ð.��#����ü.��#����/��3����/��#����/��/����/��#����$/��/����./��#����3/��/����9/��#����H/��#����T/��#����^/��3����h/��#����m/��/����w/��#����|/��/����†/��#����‹/��/����‘/��#���� /��#����¬/��#����¶/��3����À/��#����Å/��/����Ï/��#����Ô/��/����Þ/��#����ã/��/����é/��#����ø/��#����0��#����0��3����0��#����0��/����'0��#����,0��/����60��#����;0��/����r0��'����‹0��*���� 0��*����à0��-����ñ0��,����1��'����/1��6����91��6����@1��'����E1��7����1��)����Ø1��2����ÿ1��3����*2��4����62��5����h2��2����2��3����¶2��4����á2��4����í2��5����ø2��6����3��6����3��'����3��'����3��7����T3��)����‚3��2����ž3��3����´3��4����ó3��4����ÿ3��5����4��2����)4��3����A4��4����t4��4����‚4��5����º4��2����á4��3���� 5��4����45��4����@5��5����v5��6����5��6����‘5��'����˜5��'����5��7����ª5��5����¶5��2����Ì5��3����å5��4����6��)����o6��2����«6��3����Ó6��4����ß6��5����7��2����]7��3����‚7��4����‘7��5����©7��6����´7��6����¿7��6����Ê7��6����Ú7��'����á7��'����æ7��7����8��)����Y8��2����s8��3����Œ8��4����Ñ8��3����9��4����9��5����O9��2����—9��3����Æ9��4����î9��3����:��4����8:��5����d:��2����€:��3����›:��4����Ò:��3����;��4����;��5����;��6����%;��6����0;��6����;;��6����K;��'����R;��'����W;��7����„;��)����Ù;��*����ì;��*����ô;��+����<��'����$<��'����t<��,����ˆ<��-����=��,����,=��-����Q=��2����¾=��.����Ï=��/����ß=��.����ï=��/����ÿ=��.����>��/����>��.����/>��/����g>��5����r>��6����}>��6����”>��'����›>��'���� >��7����?��)����D?��*����W?��*����_?��+����†?��'����’?��'����×?��,����ë?��-����~@��,����@��-����Ê@��2����ç@��.����ò@��/����A��5����:A��2����ZA��.����hA��/����uA��5����’A��6����A��6����´A��'����¾A��'����ÃA��7����qB��1����œB��1����¦B��)����øB��2����-C��3����XC��4����lC��5����¡C��2����ÝC��3����D��4����D��4����7D��5����BD��6����MD��6����cD��'����jD��'����oD��7����èD��1����%E��1����9E��)����dE��2����ƒE��3����œE��4����×E��4����ïE��5����HF��2����…F��3����­F��4����ØF��4����ðF��5����-G��2����SG��3����˜G��4����°G��4����ØG��3����H��4����#H��5����.H��6����9H��6����OH��'����VH��'����[H��7����Ì��5����, ��5����ü��5����Ì!��5����%��5����ª(��5����p)��5����¤.��5����D0��5����‰>��0����©A��0����.file�������þÿ��g����������������������������� �������������������_tet_r����������_tet_i�� ����������3���À��� ������M���p��� ������b���Ð��� ������v���0 ��� ������������� ������£���Ð!��� ������²���%��� ������À���°(��� ��_rdod_n�`�������_rdod_v�`������_rdod_r�€����������Þ���)��� ������û���p*��� ��_icos_v� ������_icos_r�à������������À+��� ������&��-��� ������<��°.��� ������Q��P0��� ������a��`1��� ������s��@3��� ������†���6��� ������–��ð7��� ������§��p;��� ������·��ð>��� ������Æ���B��� ������Ô��D��� ��.text����������~H��ü������������.data���������������������������.bss�����������������������������.rdata���������8����������������_fgState���������_calloc������� ������ã�������� ��_cos���������� ��_sin���������� ������ó�������� �������������� �������������� ��_sqrt��������� ������ �������� ������+�������� ������:�������� ��_glEnd@0������ ��_free��������� ��_fgError������ ��I��freeglut_geometry.c�_glutSolidSierpinskiSponge�_glutWireSierpinskiSponge�_glutSolidOctahedron�_glutWireOctahedron�_glutSolidDodecahedron�_glutWireDodecahedron�_glutSolidCube�_glutWireCube�_glutSolidRhombicDodecahedron�_glutWireRhombicDodecahedron�_glutSolidIcosahedron�_glutWireIcosahedron�_glutSolidTetrahedron�_glutWireTetrahedron�_fghCircleTable�_glutWireCylinder�_glutSolidCylinder�_glutWireSphere�_glutSolidSphere�_glutSolidTorus�_glutWireTorus�_glutWireCone�_glutSolidCone�_glPushMatrix@0�_glNormal3dv@4�_glVertex3dv@4�_glPopMatrix@0�_glBegin@4�_glNormal3d@24�_glVertex3d@24� /125 1264195964 500 500 100664 320 ` L�����Œ��������.text������������������������������� �0`.data�������������������������������@�0À.bss��������������������������������€�0À.file�������þÿ��g�����������������.text����������������������������.data����������������������������.bss�����������������������������$���freeglut_glutfont_definitions.c�freeglut_init.o/1264195964 500 500 100664 8955 ` L�����:��=�����.text����������� ��´���D������´��� �P`.data����������� ���Ä ��������������@�`À.bss�������������������������������€�0À.rdata����������à��d ��L������K���@�`@U‰åW‰×VS¶€ù+t@€ù-¾���tFQÐ1Û€ú w›¾ÉƒÀ\QжQЀú vèƒþÿ‰u÷Û‰Ø[^_]Ãt&�ƒÀ¾���¶ë½v�ƒÀ¾ÿÿÿÿ¶ë­v�U‰å‹E ‹U…À‰����£���x …Òx Æ���]ÃÆ����]ÃfU‰å‹E ‹U…À‰ ���£���~ …Ò~ Æ���]ÃÆ����]ÃfU‰å‹E]£���Ãv�U‰å‹E£Œ���‹E ]£���Ãt&�¼'����U‰å‹E]£”���Ãv�U‰å‹E]£˜���Ãv�U‰åWVSƒì,‹u‰4$è����‰Ã@‰$è����‰\$‰t$‰Eà‰$è����‹EàÆ�1ÛÇD$����‰$è����ÇEä����…À‰Ætz¶����ÇD$���1Û‰4$è����‰ÇëƒÃƒû%t)‹@��‰|$‰4$‰D$è����…Àu݃û%wfÿ$@���‰t$Ç$ ���è����ÇD$����Ç$����è����…À‰Æu‹]ä‹Eà‰$è����‰���ƒÄ,[^_]ÃMä���ëÁƒMäë»Mä€���벃Mä묃Mä릃Mä ë Mä���ë—Mä���뎃Mä눃Mäë‚t&�¼'����U‰åSƒì€=����„<��¡ ���…Àt‰$è����Ç �������è����‹@���…ÛtJf‰\$Ç$@���è����‰$è����‹@���…ÛuÞ‹H���…Ût&t&�‰\$Ç$H���è����‰$è����‹H���…ÛuÞ€=€����…‘��€=����…–��Æ€����Æ����ÇŒ������Ç�������Ç”�������ǘ�������Æ����Ç����ÿÿÿÿÇ���ÿÿÿÿÆ����Ç ���,��Ç���,��Æ���Ç������Ç ������Æ$����Æ%����Æ&����Æ'����Çt�������Çx�������Ç(������Ç,���ÿÿÿÿÇ`���€��Çd���à��Çl������Çp���H���Ç$@���è����Ç$H���è����¡|���ÇP�������ÇX�������Ç\�������…ÀÇ4�������Ç8�������Ç0�������t‰$è����Ç|�������Ç$���è����‹]üÆ����ƒìÉô&����è����€=����„jþÿÿè����é`þÿÿt&�Ç$Ø���è����‹]üÉÃë U‰åƒìÉé„ýÿÿt&�U‰åWVSƒìl‹E€=����‹U ‹�‰E¬…��…Àt…Òt‹…Àv�t €8�…ü��‰U è����è����Ç$u��£<���è����‹U …Àt*Mä‰L$ÇD$~��‰$è����‹Eä‹U …ÀŽx��£0���‰U Ç$��è����‹U ƒ}¬ÇE¨����Ž›���»���‰U´ë,ƒÃ9]¬Ž��‹E‹M´ƒ(ÇD™ü����Ç™����ƒÃ9]¬~b‹E´¿‰��¹ ���˜‰E°‹�‰Æó¦t¹¹ ���‰Æ¿È��ó¦…†���ƒÃ9]¬ŽÖ��‹U´š‹ÇDšü����ƒÃÇ�����‹E‰M¨ƒ(9]¬ž‹U´‹E¿���¾���ƒ8ŽÆ���f‹²NŠ…ÛtëƒÁ‹ƒÀ‰Î…Ûtò9÷t‰º‹MƒÇ99Ž‘���ƒÆëÈ¿��¹���‰Æó¦u=‹ ���…É„`��‹E°‹UÇ ������Ç�����ƒ*éÿÿÿÇ$”��è����éÞþÿÿ¿e��¹ ���‰Æó¦… ��ƒ= ���„—��‹M°‹EÇ �������Ç����ƒ(é·þÿÿÇ$����]¸è����ƒì£����‰\$ÇD$†��‰$è����ƒì f…À„��Ç$����è����ƒì£ ���Ç$���è����ƒì£¤���è����‰Æ‰$è����ƒì‰ÃÇD$���‰$è����ƒì£¨���ÇD$���‰$è����ƒì£¬���‰\$‰4$è����ƒìÇ$���è����Æ���ƒìè����‹E¨…À„ð���‹E¨¶„Ò„Î���€ú=„S��€ú-t.€ú+t)1ö1Û€úxt;‹E¨Uàèï÷ÿÿ‹Mà9M¨„›���‰Æ¶³ë‹M¨1ö1Û€úXt €úxÇE´����u#‰M¨‹}¨UàƒÇ‰øè¯÷ÿÿ‹Mà9Ït`‰E´¶ƒË€ú-…¹��ƒÁ}à‰È‰ú‰M°è„÷ÿÿ‹Mà9M°t4÷؃ˉE°¶ƒË€ú-…¹��ƒÁ‰ú‰È‰M èV÷ÿÿ‹Uà‹M 9Ñ…ü��Ç �������Ç�������eô[^_]ÃÇ$Ô��è����éýÿÿ¿o��¹���‰Æó¦u‹E°‹UÆ$���Ç�����ƒ*é«üÿÿ¿w��‰Æ¹ ���ó¦„È��¿€��¹���‰Æó¦…ƒüÿÿ‹U°‹MÆ'���Ç����ƒ)éhüÿÿ1À¹ ���‰ßó«¡����ÇE¼����ÇD$��‰Eȉ$è����ÇE¸#���ƒì…À‰EÌ„2��ÇD$���Ç$����è����ÇEÔ����ÇEØ����ÇE܆��ƒì‰EЉ$è����ƒìf…À…fýÿÿÇD$™��ÇD$§��Ç$Ä��è����éEýÿÿÇ$ ��è����éüÿÿ‰U Ç$��è����‹M‹U ‹éÞúÿÿ1À€ú+ÇE°����„Y��„Ò…{þÿÿöÃt ‹U°‰����öÃt£���öÄ©���öÃt‹M´‰M¤‹E¤‰5 ���£���‰Øƒà ƒø uÆ���öÃt¡ �������+ ���£����‰Øƒãƒà …Àt¡¤������+���£���ƒû…þýÿÿÆ���eô[^_]ÃÇ0���ˆ��é~úÿÿ‹M°‹EÆ&���Ç����ƒ(é´úÿÿ1ööÃ…QÿÿÿéRÿÿÿ‰U ‰$è����‹U …À£|���…éùÿÿÇ$D��è����‹U éÕùÿÿƒÀ‰E¨¶éŸüÿÿ1À€ú+…ÖþÿÿƒÁ‰ú‰È‰M è’ôÿÿ‹Uà‹M 9ÑuAé;ýÿÿÇ$ ��è����éXûÿÿƒÁ}à‰È‰ú‰M¬è`ôÿÿ‹Mà9M¬‰E°…Ýüÿÿéýÿÿ÷ØƒË ƒË¶éqþÿÿÇD$��Ç$����è����RR‰EÌé°ýÿÿ´&����¼'����U‰åƒì‹E£����ÉéÜøÿÿÿÿÿÿÿÿÿÿ����,��,����������������������ÿÿÿÿ������������������������������������������������€��à��������H�������������������������������������������� �=<>~!����WARNING - Display string token not recognized: %s��O��×��I��×��×��×��+��%��×����×��×��×��×��7��1��×�� ����×��×��×��×��×��×��×��×��×��×��×��×��×��×��×��×��×��@��Ç��fgDeinitialize(): no valid initialization has been performed����illegal glutInit() reinitialization attempt�Could not allocate space for the program's name.�GLUT_FPS�%d�DISPLAY�-display���-display parameter must be followed by display name�-geometry���-geometry parameter must be followed by window geometry settings�-direct����parameters ambiguity, -direct and -indirect cannot be both specified�-indirect�-iconic�-gldebug�-sync�FREEGLUT�GLUT_ICON�fghInitialize�Window Class Not Registered�� ERROR: Internal error <%s> in function %s�alpha�acca�acc�blue�buffer�conformant�depth�double�green�index�num�red�rgba�rgb�luminance�stencil�single�stereo�samples�slow�win32pdf�win32pfd�xvisual�xstaticgray�xgrayscale�xstaticcolor�xpseudocolor�xtruecolor�xdirectcolor�xstaticgrey�xgreyscale�xstaticcolour�xpseudocolour�xtruecolour�xdirectcolour�borderless�aux���������������������ð��ö��û��ÿ���� ������#��)��/��3��7��<��@��J��R��Y��`��h��m��v����‡��“��ž��«��¸��Ã��Ð��Ü��ç��õ��������(��������������}�������‚�������Ž�������—�������­�������²�������¾�������Ç�������Ø�������ç�������ð�������������������0������=������P������a������i��!����„������Ž������¡������±�� ����Ã������Î������Ó��)����Û������ç��!����û��%����������i������u��������%����‡��������"����–������§������¬��#����´��%����º������Ä������×������Ü��#����ä��%����ê������ô������������������������������&������0������:������D������K������U������_������f������p������z������������‹������•������œ������£������ª������±������»������Å������Ï������Ù������ã������í������÷��������������$������������$����������������(������2������>������H������R������`��%����f������v��&����������‘��'����—������£��(����³������¸��)����î��������*����$��+����+������0������5��-����K������S��,����f������p������u��-����Ç������æ������y������Š������ž������·������¼��;����Æ������Û������î��������.����������#������+��/����C��0����K������W��0����_������d��1����n��2����ƒ��3����‹������›��3����£������¯��4����¾��5����Ä������Í��6����º������Ä������×������Ü��;����æ������ý������ ������% ������@ ������_ ������f ��7����n ������y ��<����¢ ��8����· ������Å ��9����Ù ������á ������è ������í ��;����ù ������þ ��;���� ������ ��;����G ������Q ������n ������s ������ƒ ������Ž ������” ������š ������Ÿ ������° ������¶ ������¼ ������Á ������Ð ������ß ������ô ������ ��:����( ������5 ������: ��;����€ ������… ��;����Ô ��<����ú ������@�������D�������H�������L�������P�������T�������X�������\�������`�������d�������h�������l�������p�������t�������x�������|�������€�������„�������ˆ�������Œ��������������”�������˜�������œ������� �������¤�������¨�������¬�������°�������´�������¸�������¼�������À�������Ä�������È�������Ì�������Ð�������Ô�������@������D������H������L������P������T������X������\������`������d������h������l������p������t������x������|������€������„������ˆ������Œ������������”������˜������œ������ ������¤������¨������¬������°������´������¸������¼������À������Ä������È������Ì������Ð������.file�������þÿ��gfreeglut_init.c��������������� ��������������������������p���� ������)��� ���� ������=���Ð���� ������R���à���� ������j������� ������€������ ������˜��� ��� ��_Tokens�@����������¯���`��� ������¿���Ð��� ������É���à��� ������Ó���ð ��� ��.text���������� ��´�������������.data����������œ�����������������.bss����������������������������.rdata���������Ô��K�������������_fgState������������ç���°������������ò��������������������������_strlen������� ��_malloc������� ��_memcpy������� ��_strcspn������ ��_strncmp������ ��_strtok������� �������������� ������#�������� ������1�������� ��_free��������� ������=�������� ������N�������� ������_�������� ������s�������� ������~�������� ������‘�������� ��_sscanf������� ��_getenv������� ������Ÿ�������� ������³�������� ������Å�������� ������Ù�������� ��_GetDC@4������ ������í�������� ������þ�������� ������ �������� �������������� ������8�������� ������I�������� ������X�������� ��_strdup������� ��_fgError������ ������j�������� ��w��_ReadInteger�_glutInitWindowPosition�_glutInitWindowSize�_glutInitDisplayMode�_glutInitContextVersion�_glutInitContextFlags�_glutInitContextProfile�_glutInitDisplayString�_fgDeinitialize�_glutExit�_glutInit�___glutInitWithExit�_fgDisplay�___glutExitFunc�_fgStructure�_fgDestroyStructure�_fgListRemove�_fgListInit�_timeEndPeriod@4�_fgJoystickClose�_fgInputDeviceClose�_fgWarning�_fgCreateStructure�_fgSystemTime�_GetModuleHandleA@4�_GetClassInfoA@12�_GetSystemMetrics@4�_GetDesktopWindow@0�_GetDeviceCaps@8�_ReleaseDC@8�_timeBeginPeriod@4�_fgInitialiseInputDevices�_fgWindowProc@16�_LoadCursorA@8�_RegisterClassA@4�_LoadIconA@8� /158 1264195964 500 500 100664 3530 ` L�����¨��,�����.text�����������0��´���(������@��� �P`.data��������������ä��������������@�0À.bss������������`������������������€�`À.rdata����������@���è��������������@�0@U‰åSƒì€=����tX‹����…Ût=C‰D$‹‰$è����Cƒì‰D$‹‰$è����‹ƒì‰$è����ƒì‰$è����Ç��������Æ����‹]üÉÃv�U‰Á‰å1ÀƒìH…ɈUät+Eô‰D$ EäÇD$����ÇD$���‰D$‹‰$è����ƒìÉÃfU‰åìˆ���€=����‰]ô‰uø‰}üt ‹]ô‹uø‹}ü‰ì]ÃÇ$����è����…À„d��U¬1ÉÇ ����ƒÁƒùrñÇE¬���ÇD$����ÇD$€���ÇD$���ÇD$ ����ÇD$����ÇD$���À‰$‰U¤è����ƒì…À‰Æ„ò���Ç$4���è����¹ ���‰Ã1À‰ßó«C‰3‰4$‰D$è����Cƒì‰4$‰D$è����‹U¤ÇE¬���ƒì‰T$Ç$6���è����‹U¤ƒì‰T$‰4$è����EÈÇEÈ����ÇEÌ����ÇEÔ����ÇEÐ���ÇEØ���ƒì‰4$‰D$è����‹ƒì‰$è����º ���‰Ø‰����ƒìè_þÿÿÇD$����ÇD$€��Ç$ ���è����‹]ô‹uø‹}üÆ���‰ì]ÃÇ��������é{þÿÿEÜÇEä���ÇEà���‰D$ÇD$���Ç$��€è����ƒì …À…GþÿÿEä‰D$Eà‰D$ ‹EÜÇD$ ���ÇD$����ÇD$$���‰$è����ƒì…Àt‹E܉$è����ƒìéüýÿÿ‹E܉$è����¸ ���ƒìéþÿÿ‰ö¼'����U‰åƒìèµýÿÿ‹����1À…Òt 1À€=����•ÀÉÃt&�¼'����U‰åƒì(‰]ô‹]‰uø‹u ‰}ü‹»˜���…ÿt‰$è����‹F‹P‰T$‹�‰$ÿ׉t$‰$ÇD$ ��è����‹]ô‹uø‹}ü‰ì]ô&����U‰åWVSƒìL¡����…ÀtSuà]ç}Ðt&�ÇD$����‰t$ ÇD$���‰\$‹�‰$è����ƒì…Àu'ÇD$����ÇD$€��Ç$���è����eô[^_]Ãv�ƒ}àuÓ¡����¶Uç…À~4ƒø„Ä���ƒøtO…Àuƒê0‰D��Ç�������¡����…À…kÿÿÿë’JЃùvăú „ ���¡����‹�‰$è����ƒìëÌt&�¡@�� Ðf…À£@��y -���£@��‹D��ÆEØ�‰}ÜÇ$ ��‰• ��iÀh��ƒÂ‰UЉÂÁúÁêÁø‰EÔE؉D$è����Ç��������éZÿÿÿfÁâ‰@��Ç�������é@ÿÿÿ¡����²PÆ���Ç��������èkûÿÿ¡����ºÿ���è\ûÿÿ¡����ºÿ���èMûÿÿé�ÿÿÿÿÿÿÿGLUT_DIALS_SERIAL�SOFTWARE\FreeGLUT�DialboxSerialPort�96,n,8,1�� ��������������'���!����;���"����H�������S�������Y�������c�������¥�������»�������Û�������à�������>������W������u������‡������Ÿ������¤�� ����¶��!����ë��"����ø��*����������������)��)����8������C������i������u��#����™������©������±��$����Ã��%����Ö��%����Û������ý������ ������C��&����c������h��'����Š������¾��(����Õ������á��)����÷������������ ������)������I������S��*����a������k������w������}������‹������’������»��+����Á������Õ������Û������é������ñ������ø������������������.file�������þÿ��g����������������������������� �����������������������1���������������?���p���� ������O���°���� ������i��� �����������x���ð��� ��������� ��� ������¥���€��� ������±���������������Ã���D����������Õ���@����������ç��� ������.text����������(��@�������������.data���������������������������.bss�����������H����������������.rdata���������?�����������������_fgState�������������ô��������� ��_free��������� �������������� ��_getenv������� �������������� ��_malloc������� ������!�������� ������1�������� ������D�������� ������U�������� ������e�������� ������x�������� ������ˆ�������� �������������� ������¬�������� ������¹�������� ������Ë�������� ������Ø�������� ������ç�������� ������û�������� �� ��freeglut_input_devices.c�_fgInputDeviceClose�_dialbox_port�_serial_putchar�_fgInitialiseInputDevices�_devname.19684�_fgInputDeviceDetect�_fghcbEnumDialCallbacks�_poll_dials�_dial_state.19738�_dial_which.19739�_dial_value.19740�_dials.19741�_CloseHandle@4�_WriteFile@20�_CreateFileA@28�_GetCommState@8�_GetCommTimeouts@8�_BuildCommDCBA@8�_SetCommState@8�_SetCommTimeouts@8�_RegOpenKeyA@12�_RegQueryValueExA@24�_RegCloseKey@4�_fgSetWindow�_fgEnumSubWindows�_ReadFile@20�_glutTimerFunc�_FlushFileBuffers@4�_fgEnumWindows�/184 1264195964 500 500 100664 7140 ` L�����N��.�����.text�����������° ��´���D������x��� �P`.data�������������������������������@�0À.bss�������������������������������€�0À.rdata����������à��d��ô������ ���@�@@U‰åƒì€=����uÇD$����Ç$���è����‹E‹M‹U ‹…����‰Œ|��ÉÃt&�U‰åƒì€=����uÇD$\���Ç$���è����‹E‹U ‹…����Ù„|��Éô&����U‰åƒì€=����uÇD$v���Ç$���è����‹E‹M‹U ‹…����‰Œ\��ÉÃt&�U‰åƒì€=����uÇD$Ž���Ç$���è����‹E‹U ‹…����Ù„\��Éô&����U‰åƒì€=����uÇD$¦���Ç$���è����‹E‹…����¶€Ð��ÉÃv�¼'����U‰åƒì€=����uÇD$½���Ç$���è����‹E‹…����‹€X��ÉÃt&�¼'����U‰åƒì€=����uÇD$×���Ç$���è����‹E‹…����‹€T��ÉÃt&�¼'����U‰åƒì€=����uÇD$î���Ç$���è����‹E‹…����‹T��œ��‰D$‹E Áâ‰T$‰$è����ÉÃU‰åƒì€=����uÇD$��Ç$���è����‹E‹…����‹T��¼��‰D$‹E Áâ‰T$‰$è����ÉÃU‰åƒì€=����uÇD$��Ç$���è����‹E‹…����‹T��Ü��‰D$‹E Áâ‰T$‰$è����ÉÃU‰åƒì€=����uÇD$4��Ç$���è����‹E‹…����œ��‹€T��‰$Áà‰D$‹E ‰D$è����ÉÃë U‰åƒì€=����uÇD$J��Ç$���è����‹E‹…����¼��‹€T��‰$Áà‰D$‹E ‰D$è����ÉÃë U‰åƒì€=����uÇD$b��Ç$���è����‹E‹…����Ü��‹€T��‰$Áà‰D$‹E ‰D$è����ÉÃë U‰åWVSìœ���‹M…É„€��‹E‹P|…Ò„r��ÇE”����}Èu¨‹U”‹•����…Û„E��€»Ð���…Ä��‹ƒT��…ÀŽÙ��‹“T��1Àdž�€»DƒÀ9Ð|ò€»Ð���„¶��‹“T��‰Ñ‰]ˆÇE„����…Éމ���‹‹T��1ÒÙèë7Ü騤“Ü��ÞùÙ„“|��ÙÀÙàÝêßàž†×���ÝØÝØÙèÙàëÝØÙ—ƒÂ9Ê}Dٖل“œ��Ýáßàžw¸Ü騬“¼��ÞùÙ„“|��ÙÉÝáßàž†Ã���ÝØÝØÙèÙ—ƒÂ9Ê|ÀÝØëÝØ‹Uˆ€ºÐ���uX‹E‹X|…ÛtN‰$è����‹U„‰$Ù}¢ÙØ��ÙEÐØÉ·E¢´ f‰E Ùm Û\$ Ùm¢ÙEÌØÉÙm Û\$Ùm¢ØMÈÙm Û\$Ùm¢ÿÓƒE”ƒ}”…›þÿÿeô[^_]ÃÙ„“\��ÙÀÙàÙËÝãßàÝÛžwJÜÂÞéÞùÙèÙàÝáßàž†ÿÿÿÝÙéÿÿÿÙ„“\��Ýáßàžw(ÜéÞêÞñÝáßàž†äþÿÿÝØÙÀéÛþÿÿ¶����ÝØÝØÝØëÝØÝØÝØÙîéÀþÿÿ‹“T��…ÒŽeþÿÿ1ÀLJ����ƒÀ9Ð|òé-þÿÿƒ”��‰D$‹ƒÈ��‰$è����ƒì…À…E��‹‹T��‹“´��ƒù‰U„v‹E”‹…����‰Eˆéþÿÿÿ$|��·ƒ¼��=ÿÿ��„J��‰EˆÇEŒ����ßmˆÜ Ð��‰M€Ý$Ýhÿÿÿè����Ù]¤ÙE¤Ý…hÿÿÿÝ$Ùhÿÿÿè����‹M€Ù]¤ÙE¤Ù…hÿÿÿÙÀÙáÙÂÙáÚéßàž†Ì���ÙîÝêßàž†ð���Ùà¸��€¿ÞñÙ]À‰EÄ‹ƒ°��1Ò‰UŒ‰EˆßmˆÙ]¼‹ƒ¬��1Ò‰UŒ‰EˆßmˆÙ]¸‹ƒ¨��1Ò‰UŒ‰EˆßmˆÙ]´‹ƒ¤��1Ò‰UŒ‰EˆßmˆÙ]°‹ƒ ��1Ò‰UŒ‰EˆßmˆÙ]¬1Ò‹ƒœ��‰UŒ‹U”‰Eˆ‹•����ßmˆÙ]¨‰UˆéôüÿÿƃÐ��‹E”‹‹T��ÇE„����‹…����‰EˆéÎüÿÿÙîÝéßàžv7ÙÉÙàÞñÇEÀ��€¿Ù]Äé2ÿÿÿÇEÀ����ÇEÄ����éÿÿÿÞñ¸��€?Ù]Àé ÿÿÿÇEÀ��€?ÞùëËë U‰åƒì¡����…Àt‰$è����Ç��������¡���…Àt‰$è����Ç�������ÉÃfU‰åìX��‰]ô‰Ã‰}ü‰×‰uø€¸Ð���t1À‹]ô‹uø‹}ü‰ì]Ãf@pµàþÿÿÇD$ ��‰D$ÇD$ ¸��ÇD$ñ��ÇD$���‰4$è����Eä‰D$ÇD$ ���ÇD$����‰t$Ç$��€è����ƒì…ÀuŒÇD$ú��‹ƒÈ��àýÿÿÇD$��ÇD$���‰4$ƒÀ‰D$ ÇEà���è����Eà‰D$‹Eä‰\$ÇD$ ����ÇD$����‰t$‰$è����‰Â‹Eäƒì‰•Ôýÿÿ‰$è����‹•Ôýÿÿƒì…Ò…ÿÿÿ‰\$ÇD$ ��ÇD$`��ÇD$���‰4$è����Eä‰D$ÇD$ ���ÇD$����‰t$Ç$��€è����ƒì…À…«þÿÿEà‰D$‹EäÇEà€���‰|$ÇD$ ����ÇD$����ÇD$ú��‰$è����‰Ã‹Eäƒì‰$è����1Àƒì…Û”ÀéYþÿÿ´&����U‰åWVSƒì,€=€����…!��1ö‹µ����…Àt Ç$h��è����ÇD$���Ç$ü��è����ƒþ‰µ����‰ÃÇ€X������Ç€T������Æ€Ð��„ä���Ç€È������Æ€Ð���öÉßƃÐ��º”��ǃX������ǃT������ƃÑ���ǃ˜��ÿ���ǃ”��4���…y��÷Ç���…}��‰Ñ1ÀÁéöÂó«udƒâuZ‹ƒÈ��ÇD$”��‰\$‰$è����‹{hƒì …À•ƒÐ��…ÿu]ǃT������ƃÐ��ƒÆƒþ…èþÿÿÆ€���eô[^_]ÃÆ�ë¡fÇ��ƒÇƒât”ëìÇ€È�����Æ€Ð���éÿÿÿ¶����»Ñ��‰Ø‰úè±üÿÿ…À„��öC`…O��ǃT�����‹CX1Ò‰Uä1Ò‰Eà‹C\ßmàÙ›ð��‰Uä1Ò‰Eà‹CPßmàÙ›Ð��‰Uä1Ò‰Eà‹CTßmàÙ›ì��‰Uä1Ò‰Eà‹CHßmàÙ›Ì��‰Uä1Ò‰Eà‹CLßmàÙ›è��‰Uä1Ò‰Eà‹C4ßmàÙ›È��‰Uä1Ò‰EàßmàÙ›ä��‹C8‰Uä1Ò‰Eà‹C,ßmàÙ›Ä��‰Uä1Ò‰Eà‹C0ßmàÙ›à��‰Uä1Ò‰Eà‹C$ßmàÙ›À��‰Uä1Ò‰Eà‹C(ßmà‰Uä‹“T��Ù›Ü��‰Eàßmà…ÒÙ›¼��Ž‹þÿÿ1ÀÙÜ��Ù„ƒ¼��Ø„ƒÜ��Ç„ƒ\������Ç„ƒ|����€?ØÉÙœƒœ��ƒÀ9Ð|ÌÝØéHþÿÿt&�ǃT�����ǃø����€¿ÇƒØ����€?ǃô����€¿ÇƒÔ����€?é„þÿÿÇ$œ��è����CÇD$€���‰D$‰<$è����éHþÿÿÆ�{²“ézýÿÿv�fÇ��ƒêƒÇésýÿÿU‰åƒìè•üÿÿ€=€����t0‹����…Òt€ºÐ���¸���t¡���…Àt€¸Ð���”À¶ÀÉÃ1ÀÉÃglutJoystickSetSaturation��� ERROR: Function <%s> called without first calling 'glutInit'.�glutJoystickGetSaturation�glutJoystickSetDeadBand�glutJoystickGetDeadBand�glutJoystickNotWorking�glutJoystickGetNumButtons�glutJoystickGetNumAxes�glutJoystickGetCenter�glutJoystickGetMaxRange�glutJoystickGetMinRange�glutJoystickSetCenter�glutJoystickSetMaxRange�glutJoystickSetMinRange���?��J��6��"����ú��æ��?��X��CurrentJoystickSettings�System\CurrentControlSet\Control\MediaResources\Joystick�%s\%s\%s�OEMName�Joystick%d%s��System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM�%s\%s���illegal attempt to initialize joystick device again�JS: Failed to read joystick name from registry������A§ tZà&?��zD���?������������������������)����/�������H�������S�������Z�������_���)����l�������ˆ�������“�������š�������Ÿ���)����¯�������È�������Ó�������Ú�������ß���)����ì���������������������������)����)������H������S������Z������_��)����i������ˆ������“������š������Ÿ��)����©������È������Ó������Ú������ß��)����é������ ������������#������*������/��)����9������Z������h������s������z��������)����‰������ª������¸������Ã������Ê������Ï��)����Ù������û������������#������*������/��)����9������[������x������ƒ������Š��������)����™������»�������������� ������������!����E������T������y������Š��"����¤��#����^������Š������÷��������$���� ��������������$����$������m������y������������‘��%����¸��&����Ç������Û������ù��%����# ��'����9 ��(����V ������^ ������n ��%����• ��&����Í ������Õ ��'����å ��(���� ������ ������& ������+ ��)����? ��*����I ������ü ��+����2 ������ ������ ������ ��,����6 ��-����m ������v ������ ������|������€������„������ˆ������Œ������������”������˜������œ������.file�������þÿ��g����������������������������� �����������������������3���������������?���@���� ������Z���€���� ������s���À���� ������Œ������� ������¤���@��� ������¿���€��� ������×���À��� ������î������ ��������`��� ������ ��°��� ������7����� ������P��p��� ������i��Ð��� ��������ð��� ��������0��� ������¶��� ��� ������Í��` ��� ��.text����������¨ ��x�������������.data����������������������������.bss����������������������������.rdata���������à�� �������������_fgState���������_memcpy������� ������ß�������� ������ì�������� ��_sin���������� ��_cos���������� ��_free��������� ������û�������� �������������� �������������� ������-�������� ��_fgError������ ��_calloc������� ������<�������� ������O�������� ��_strncpy������ ��Z��freeglut_joystick.c�_glutJoystickSetSaturation�_fgJoystick�_glutJoystickGetSaturation�_glutJoystickSetDeadBand�_glutJoystickGetDeadBand�_glutJoystickNotWorking�_glutJoystickGetNumButtons�_glutJoystickGetNumAxes�_glutJoystickGetCenter�_glutJoystickGetMaxRange�_glutJoystickGetMinRange�_glutJoystickSetCenter�_glutJoystickSetMaxRange�_glutJoystickSetMinRange�_fgJoystickPollWindow�_fgJoystickClose�_fghJoystickGetOEMProductName.clone.0�_fgInitialiseJoysticks�_fgJoystickDetect�_fgSetWindow�_joyGetPosEx@8�__snprintf�_RegOpenKeyExA@20�_RegQueryValueExA@24�_RegCloseKey@4�_joyGetDevCapsA@12�_fgWarning�freeglut_main.o/1264195965 500 500 100664 13408 ` L�����î*��N�����.text�����������@��´���4������Ã��� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������@��ô��Ò#������¶���@�`@U‰åVS»���ƒìÇ$ ���è����ƒìf…ÀxÇ$¡���è����¿ØƒìÁëÇ$¢���è����ƒìf…ÀxMÇ$£���1öè����ƒìf…Àx7Ç$¤���è����ƒìf…Àx,Ç$¥���è����1Òƒìf…Àx‰ð Øeø Ð[^]þ���ëÂf‰ðº��� Øeø Ð[^]ô&����¼'����U‰åƒì‹E‹U €x,�t €x-�tƉB‰T$ÇD$À���‰$è����Éö����¿����U‰åƒì‹E‹U ‹H|…ÉtƉB‰T$ÇD$���‰$è����ÉÃU‰åSƒì‹]€{,�t€{-�u‹E ‰$ÇD$0��‰D$è����‹]üÉÃÆC,�ÇD$ #��ÇD$����ÇD$����‹C ‰$è����ƒìë¸fU‰åVSƒì‹����ÇD$ ���u ÇD$���Ç$����ƒÃ@‰\$ è����¡|���…Àt‰D$ÇD$ ���‰$è����‹E‰t$‰$‰D$è����‰\$Ç$ ���è����ƒÄ[^]Ãt&�U‰åVSƒì‹����ÇD$ ���u ÇD$���Ç$����ƒÃ@‰\$ è����¡|���…Àt‰D$ÇD$ ���‰$è����‹E‰t$‰$‰D$è����‰\$Ç$ ���è����€=����uÇ$���è����´&����è����ëæ‰ö¼'����U‰åìØ��€=����‰uø‹u ‰}ü‹}‰]ô„l��‰<$è����…À‰Ã„€��þ���„��v;þ��†Ÿ��þ��‡×��þ��ƒ“��†üýÿÿƒø‡��é��v�ƒþ¸ ���„ô���f‡š��ƒþ„i��‡ü��0Àƒþ„Ñ���ƒþ„ì��ƒþ…½��‹M‹…Û„Õ��‰{ ‰<$è����ƒì€»È����‰C„„ ��‹5���ÇD$����Ç������ÇD$����‰$è����¡ ���‰5���…À„T��‹�‰D$‹C‰$è����ƒì‹C‰$è����ƒì‰C‹{ÆCF…ÿˆE ��‹s …öˆ: ��‹C‰D$‹C ‰$è����¸���ƒì‹]ô‹uø‹}ü‰ì]Â�ÇD$���Ç$ ���è»ýÿÿ‰<$è����…À‰Ã…€þÿÿƒþ„wþÿÿ‹E‹U‰t$‰<$‰D$ ‰T$è����‹]ô‹uø‹}üƒì‰ì]Â�t&�þ��‚œ��·E‹U‰C<Áê=ÿ��‰S@­��úÿ��~ ê���‰S@†ÿýÿÿƒøÇ…|þÿÿÿÿÿÿÆ…xþÿÿ�w¶–��‹… ��ˆ•xþÿÿ‰…|þÿÿÇ$���è����ƒì…À„Ë��‹…|þÿÿ…À…í ��Ç…|þÿÿ���‹C@‹•|þÿÿ‰D$‹C<‰T$‰$‰D$ ¶…xþÿÿ‰D$è����„À…$��€½xþÿÿ„ú ��è����‹s`…ö„��‰$è����èfúÿÿ‹s`…ö£,���„��‰$è����‹C@‹|þÿÿ‰D$ ‹C<‰ $‰D$1À€½xþÿÿ�”À‰D$ÿÖéæ���ƒþ„—��´&����†!��þ…���„.��þˆ���„ø��ƒþ …��fƒ}„à ��‹U‹MÇD$ ���‰<$‰T$ ‰L$è����ƒìéêýÿÿþ��„Ì��†–��þ��„+��þ���„Ï��þ��…²���‹5(���…ö„„��€{D„z��èeùÿÿ‹sP…ö£,���t‰$è����‹C@‰D$‹C<‰D$¶E‰$ÿÖ‹]ô¸���‹uø‹}üÇ,���ÿÿÿÿ‰ì]Â�þ ��„¢��þ��u8‹sH…ö„‘��‰$è����ÿÖ¸���éýÿÿƒþ„ó��‚ž��ƒþ„o��‹M‹E‰L$ ‰D$‰t$‰<$è����ƒìéàüÿÿƒþ „›��t&�‡j��ƒþuÅ‹M‹EÇD$���‰<$‰L$ ‰D$è����‹spƒì…öt‰…lþÿÿ‰$è����Ç$����ÿÖ‹…lþÿÿ€»È����„uüÿÿ‹“¸���…Ò„güÿÿ€z �„]üÿÿ‰…lþÿÿ‰$è����‹…lþÿÿéDüÿÿfþ��„‚þÿÿ‚��þ��…"ÿÿÿf‹=(���…ÿ„i��€{D„_��èÓ÷ÿÿu܉4$£,���è����ƒì‰t$‹C ‰$è����‹E܉C<‹Eàƒì‰C@‹Eƒè!ƒøZ‡Yþÿÿÿ$…¸���-���‰C<éFüÿÿ¿ ���‹sX…ö„5þÿÿ‰$è����‹C@‰D$‹C<‰<$‰D$ÿÖéþÿÿ¿ ���ëο ���ëÇ¿ ���ëÀ¿���빿���벿���ë«¿���뤿���ë¿���ë–¿���ë¿���눋sP…ö„½ýÿÿ‰$è����‹C@‰D$‹C<Ç$���‰D$ÿÖé™ýÿÿ¿l���éOÿÿÿ¿g���éEÿÿÿ¿f���é;ÿÿÿ¿e���é1ÿÿÿ¿d���é'ÿÿÿ¿j���éÿÿÿ¿k���éÿÿÿ¿i���é ÿÿÿ¿h���éÿþÿÿ÷E���@„”þÿÿ¸���é”úÿÿ‹E‹UÇD$���‰<$‰D$ ‰T$è����ƒìénúÿÿÆC-uŒ‰t$‰<$è����‹KH¡���‰…„þÿÿƒì…Ét€{-�ÆC,�…–��‰t$‰<$è����¸���ƒìéúÿÿ‰$è����ƒ=t���„lÿÿÿÇ$����è����¸���ƒìéñùÿÿ·U‹E‰S<Áèúÿ��‰C@~ ê���‰S<=ÿ��~-���‰C@‹ƒ¸���…À„½��‰$è����¸���é¡ùÿÿ‹E%ðÿ��= ð��uÆC-�‹E‹UÇD$��‰<$‰D$ ‰T$è����ƒìéhùÿÿ¶����‹U‹MÇD$ ���‰<$‰T$ ‰L$è����ƒìé<ùÿÿ‹M‹EÇD$ ���‰<$‰L$ ‰D$è����ƒìéùÿÿt&�èÛôÿÿu܉4$£,���è����ƒì‰t$‹C ‰$è����‹E܉C<‹Eàƒì‰C@‹Eƒè!ƒøZ†ÿ��µŒþÿÿ‰4$è����Eäƒì‰D$ ‹EÇD$����‰t$ÇD$����‰$è����ƒìƒø„^��‹sT…ö…ôúÿÿéûÿÿ‹E‹UÇD$���‰<$‰D$ ‰T$è����‹spƒì…ö„Nøÿÿ‰…lþÿÿ‰$è����Ç$���ÿÖ‹…lþÿÿé,øÿÿÆC,‹M‹EÇD$ˆ���‰<$‰L$ ‰D$è����ƒìéøÿÿ‹U‹MÇD$…���‰<$‰T$ ‰L$è����ƒìéÜ÷ÿÿ€{-�„4ýÿÿÆCF·E‰C‹EÁè‰C ¸���é´÷ÿÿfÆC-¸���ÆC,é ÷ÿÿ‹U·}Áê¿ÂiÀ‰ˆÿÿÁèfÁøfÁúf)ЉÂˆ@��¾���‹Kd…É„��‰•lþÿÿ‰$è����èóÿÿ‹•lþÿÿ‰½„þÿÿ£,���?‰÷HƒÀ‰xþÿÿ‰Ö‰…|þÿÿë7v�‰…lþÿÿ‰$è����‹S@‹…lþÿÿ‰T$ ‹S<‰|$‰T$‹•„þÿÿ‰$ÿЃîf…ö„yùÿÿ‹Cd…Àu¼‹|þÿÿƒÿÿ‰€þÿÿt ‹…xþÿÿ‰…€þÿÿ‹C`…Àtɉ…lþÿÿ‰$è����‹S@‹…lþÿÿ‰T$ ‹S<ÇD$����‰T$‹•€þÿÿ‰$ÿЋC`…Àt‰…lþÿÿ‰$è����‹S@‹€þÿÿ‹…lþÿÿ‰T$ ‹S<ÇD$���‰ $‰T$ÿÐéSÿÿÿfƒ½|þÿÿÿ…@÷ÿÿ‹M‹E‰L$ é.ùÿÿt&�÷E���@…wûÿÿétøÿÿÇD$����ÇD$����‰$è����€=%����„Ã��è����…À‰C„³��‰$è����éšõÿÿÿ$…$��¾ ���‹{\…ÿ„Køÿÿ‰$è����‹C@‰D$‹C<‰4$‰D$ÿ×é+øÿÿ¾ ���ëξ ���ëǾ ���ëÀ¾���ë¹¾���ë²¾���뫾���뤾���ë¾���ë–¾���ë¾���눋sT…ö…úÿÿéÎ÷ÿÿ¾l���énÿÿÿ¾g���édÿÿÿ¾f���éZÿÿÿ¾e���éPÿÿÿ¾d���éFÿÿÿ¾j���é<ÿÿÿ¾k���é2ÿÿÿ¾i���é(ÿÿÿ¾h���éÿÿÿ‹5���‰$è����Ç$f���è����‰CÇ$g���è����‰C ‰4$è����éôÿÿt&�‰$è����€{F�…è���‹CH…Àt‰…lþÿÿ‰$è����‹…lþÿÿÿЋ„þÿÿ‰ $è����é(úÿÿ‹C`…À…ñüÿÿv�é¯ùÿÿ‹C0‰$‰D$è����¸���é4ôÿÿ÷Ú¾ÿÿÿÿé¹üÿÿ‹C‰$è����ƒì‰Cé7þÿÿƒ½|þÿÿ…ÃýÿÿÇ…|þÿÿ����éõÿÿè¿ïÿÿöE£,���„Í��‹sh…ö„köÿÿ‰$è����‹C@‰D$‹C<‰$ÿÖéOöÿÿ‹C ‰$è����ƒìéøôÿÿ¡���‹S ‹K‰…tþÿÿẺD$‹C ‰•|þÿÿ‰€þÿÿ‰$è����‹‹¼���‹Ủxþÿÿ‰•Tþÿÿ‹UЃì…É„š��‹xþÿÿ…Œþÿÿ‰D$‰•lþÿÿ‹A ‰$è����ƒìÇ$ ���è����‹Œþÿÿ)TþÿÿƒìÀÇ$!���)…Tþÿÿè����‰…xþÿÿ‹…þÿÿƒìÇ$���‰…pþÿÿè����‹•lþÿÿ+•pþÿÿ‰Á‹…xþÿÿƒìÀ)‹…€þÿÿ)Ê‹|þÿÿ‰…xþÿÿ‰pþÿÿ‹…xþÿÿ‰T$ ‹pþÿÿ‹•TþÿÿÇD$��‰D$‰L$‰T$ÇD$����‹C ‰$è����‹CLƒì…À„B��‰…lþÿÿ‰$è����‹|þÿÿ‹•€þÿÿ‹…lþÿÿ‰L$‰$ÿЀ»È����ÆC,t‹•tþÿÿ‰$è����ÆCF�é…ýÿÿ‹sl…ö…3þÿÿé™ôÿÿÇ$���è����‰Æ£ ���‹C‰$è����ƒì‰é˜ñÿÿÇD$i���ÇD$v���Ç$Œ���èŸïÿÿé ñÿÿ€»È����uj;$���tb‰•lþÿÿÇ$ ���è����‹€þÿÿ AR‰xþÿÿÇ$!���è����Q‰…pþÿÿÇ$���è����‹pþÿÿ…|þÿÿ HR‹•lþÿÿ‰pþÿÿéœþÿÿ‹|þÿÿ‹…€þÿÿ‰pþÿÿ‰…xþÿÿéþÿÿ·Uä‰Ué–øÿÿ‰$è����‹|þÿÿ‹…€þÿÿÇD$����Ç$����‰L$ ‰D$è����ƒìé¯þÿÿ¶����U‰åƒì€=����uÇD$��Ç$¤��èîÿÿÇx������ÉÃU‰åƒìÉé����t&�U‰åƒìèåÿÿÿ+<���Éö����¼'����U‰åVSƒìP€=����]ÔuMé6��´&����ÇD$ ����ÇD$����ÇD$����‰$è����ƒì…À„å���‰$è����ƒì‰$è����ƒìÇD$����ÇD$ ����ÇD$����ÇD$����‰$è����ƒì…Àu¡@���…ÀtOèBÿÿÿ‹@���…Û‰Æu9ë<t&�‰\$Ç$@���è����‰\$Ç$H���è����‹S‰$ÿS ‹@���…Ût;s}È]ðÆEð�ÇEô����‰\$Ç$ð��è����ÆEð�ÇEô����‰\$Ç$0��è����è����eø[^]Ãv�¡t���…Àt/ƒøuèÇx������eø[^]ÃÇD$ä��Ç$¤��èýìÿÿéùþÿÿè����Ç$����è����´&����U‰åWVSƒì<‹����€=����„x��…Ût,‹st…öt‹=���‰$è����¶C-‰$ÿÖ‰<$è����‹…ÛuÔÇx������]àè"þÿÿ¡����…ÀuëW´&����‹�…ÀtJ€¸È����uñ‹ P���…Étl‹���…Òt €ºÈ����uIÿÑ‹5P���…ötM¡x���ƒøuèÉýÿÿ¡����…Àu¶Çx������‹t���è����…Û„Ð���eô[^_]É$è����‹ P���ë§ÆEà�ÇEä����‰\$Ç$À���è����‹Mä…Éu‘¡@���¾ÿ��…Àt‹pè3ýÿÿ)ƉðÁø÷Ð!ÆÆEà�ÇEä����‰\$Ç$���è����‹Uä…Òt ƒþ ~¾ ���ÇD$ÿ���‰t$ ÇD$����ÇD$����Ç$����è����ƒìéÿÿÿÇD$ö��Ç$¤��è8ëÿÿéoþÿÿÇ$����è����´&����U‰åƒì‰]ø‹]‰uüèŒüÿÿ‹S4S89ЉÆ| ‰$è����‰s8‹E ‰$ÇD$ð��‰D$è����‹]ø‹uü‰ì]Ãfreeglut �(%s): �Event Handler�� ERROR: Internal <%s> function called without first calling 'glutInit'.�fgWindowProc�Cannot create window�� ERROR: Internal error <%s> in function %s�} ��s ��i ��_ ��U ��K ��A ��7 ��Æ��Æ��Æ��Æ��- ��þ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��Æ��÷��ð��é��â��Û��Ô��Í��Æ��¿��¸��±����H��>��4��*�� ���� ����e ��e ��e ��e ��ø��è��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��e ��á��Ú��Ó��Ì��Å��¾��·��°��©��¢��›��k��glutLeaveMainLoop��� ERROR: Function <%s> called without first calling 'glutInit'.�glutMainLoopEvent�glutMainLoop�����������������������������������ÿÿÿÿ������ÿÿÿÿ�������������)�������>�������T�������h�������|�������æ�������î���M����!������)��M����P������Y��M����…������š������´������À������Å������Õ������Ý�� ����ð��!�������"����������4������@������E������U������]�� ����p��!����€��"����†������•��K����¡��G����»������Ù��&����‡��#���� ������®������Â��3����Ç������Í������æ��$����ô��<����&��%����E������L������Y��&����†��2����÷������þ��������=����d��'����~��(����‘��H���� ������®��H����<��2����€������¡������«��H����Ö��������H����F��2����…��2������H����ß��-����������4������9��.����K��/����p������•��H���� ��H����¸ ��2����Ó ��)����Û ������ ��*���� ��+���� ������0 ��,����ƒ ��-����¾ ��2����ê ��2���� ��2����, ������1 ��.����C ��/����o ��0����˜ ��1����Ò ��2����î ��H����$ ��2����J ��2����Ø ��H����î ������ ��H����‚ ��H����¾ ��H����6��3����<������H��4����[��5����g��������H����T������\��H����h��6����w��6����‚��H����”��H����³��H����É��H����ð��7������<����F������_��H����~��8����‹������µ��9����ù��9������=����+��=����L��=����¾��:����Ú��H������H����5��;����<������G��<����Y������a������h������������•��=����±��=����Ä��=������H����>��>����X������c������j������u������������º������ì��@����ÿ��A���� ��B����5��C����A������P������g������l��D����w������|��E����‹������­������²��I����È������Í��I����Ò��F����á������ð������������ ��������G����%��K����;������A������Y������a��H����r��H����~������������±������»������Ð������Ù������è������ò������ü��������G������H����������7������<��I����H������z��������I����¸��J����È������Ï������å��K������L����%������.��M����ˆ��?����¸�������¼�������À�������Ä�������È�������Ì�������Ð�������Ô�������Ø�������Ü�������à�������ä�������è�������ì�������ð�������ô�������ø�������ü�������������������������� ������������������������������ ������$������(������,������0������4������8������<������@������D������H������L������P������T������X������\������`������d������h������l������p������t������x������|������€������„������ˆ������Œ������������”������˜������œ������ ������¤������¨������¬������°������´������¸������¼������À������Ä������È������Ì������Ð������Ô������Ø������Ü������à������ä������è������ì������ð������ô������ø������ü������������������������� ������������������������������ ������$������(������,������0������4������8������<������@������D������H������L������P������T������X������\������`������d������h������l������p������t������x������|������€������„������ˆ������Œ������������”������˜������œ������ ������¤������¨������¬������°������´������¸������¼������À������Ä������È������Ì������Ð������Ô������Ø������Ü������à������ä������è������ì������ð������ô������ø������ü������������������������� ������������������������������ ������$������(������,������0������4������8������<������@������D������H������L������P������T������X������\������`������d������h������l������p������t������x������|������€������„������ˆ������Œ������.file�������þÿ��gfreeglut_main.c��������������� ��������������������������À���� ������<������� ������V���0��� ������j������ ��_fgError��� ������u���°��� ������†�������������‘��� ����������œ���P��� ������¯���€��� ������½������ ������Ì���°��� ������ß���0��� ������í���ð��� ��.text����������<��Ã�������������.data����������������������������.bss�����������������������������.rdata���������@��¶����������������������������_fgState������������������������������������ ������.�������� ��_fwrite������� ��_fprintf������ ������?�������� ��_fputc�������� ��_GetDC@4������ ������I�������� ������[�������� ������h�������� ������z�������� �������������� ������Ÿ�������� ������­�������� ������¹�������� ������Ê�������� ������Ý�������� ������ô�������� �������������� �������������� ������*�������� ������6�������� ������I�������� ������]�������� ������u�������� ��_glutGet������ ������Œ�������� ������™�������� ������§�������� ������¸�������� ��_malloc������� ������É�������� ������Ý�������� ������ñ�������� ��������������� �������������� �������������� ������3�������� ������G�������� ������X�������� ������f�������� ������t�������� ������„�������� ������”�������� ������¡�������� ������°�������� ��_exit��������� ������Î�������� ������ä�������� ��ö��_fghGetWin32Modifiers�_fghHavePendingRedisplaysCallback�_fghCheckJoystickCallback�_fghcbDisplayWindow�_fgWarning�_fgWindowProc@16�_CSWTCH.30�_CSWTCH.31�_glutLeaveMainLoop�_fgSystemTime�_fgElapsedTime�_glutMainLoopEvent�_glutMainLoop�_fghcbCheckJoystickPolls�__imp___iob�_fgStructure�_GetKeyState@4�_RedrawWindow@16�_vfprintf�_wglMakeCurrent@8�_ReleaseDC@8�_fgWindowByHandle�_fgCheckActiveMenu�_ReleaseCapture@0�_BeginPaint@8�_EndPaint@8�_fgDestroyWindow�_PostQuitMessage@4�_fgUpdateMenuHighlight�_GetCursorPos@4�_ScreenToClient@8�_GetKeyboardState@4�_ToAscii@20�_DefWindowProcA@16�_fgSetupPixelFormat�_wglGetCurrentContext@0�_fgNewWGLCreateContext�_fgSetCursor�_SetCapture@4�_GetWindowRect@8�_SetWindowPos@28�_wglCreateContext@4�_GetSystemMetrics@4�_glViewport@16�_timeGetTime@0�_GetMessageA@16�_TranslateMessage@4�_DispatchMessageA@4�_PeekMessageA@20�_fgListRemove�_fgListAppend�_fgCloseWindows�_fgDeinitialize�_fgSetWindow�_fgEnumWindows�_MsgWaitForMultipleObjects@20�_fgJoystickPollWindow�_fgEnumSubWindows�freeglut_menu.o/1264195965 500 500 100664 10366 ` L�����:��M�����.text�����������°��´���\������ã��� �P`.data�����������@���d��������������@�0À.bss��������������������������������€�0À.rdata����������¸��¤��������������@�@@U‰åV‰ÆS‹Z‰B<…Ût‹S…Òt‰ðèáÿÿÿ‹…Ûuì[^]ô&����U‰åƒì€=����uÇD$����Ç$���è����¡���‹U‰PÉÃU‰åƒì€=����uÇD$P���Ç$���è����¡���‹@ÉÃv�U‰åSƒì‹]€=����t-¡���…Àt‹���…Òt…Ûxƒû Ç„˜¬�������ƒÄ[]ÃÇD$`���Ç$���è����ë½v�¼'����U‰åSƒì‹]€=����t-¡���…Àt‹���…Òt…Ûx ƒû‰”˜¬���ƒÄ[]Ãt&�ÇD$o���Ç$���è����ë½v�¼'����U‰åƒì€=����t‹���1À…Òt‹B ÉÃÇD$~���Ç$���è����ëÙv�¼'����U‰åƒì€=����t‹E‰$è����…Àt£���ÉÃÇD$Š���Ç$���è����ëÔt&�U‰åSƒì‹]€=����t‰$è����…Àt1‰EƒÄ[]é����t&�ÇD$–���Ç$���è����‰$è����…ÀuσÄ[]Ãv�¼'����U‰åƒì€=����uÇD$¦���Ç$���è����‹E‰$è����‹@ Éö����¼'����U‰åƒì‹E £����Éë¯ë U‰åWVSƒì,¡���…À„„���‹X1ÿº���ÇEä����¹���…Ûtd‹CÇ$���‰D$è����‹K…ɉƉCtÇD$µ���Ç$���è����Ɖs9uä}‰uäÇ$���è����‹…Û|uª‹UäO¡���ƒÂ‰H(‰P$ƒÄ,[^_]ô&����¼'����U‰åVSƒì‹u€=����tb‹���…Òt ‹Z…Ûtƒþ¸���u ëƒÀ9Æt ‹…ÛuóƒÄ[^]É\$‰$è����‹C…Àt‰$è����‰$è����ƒÄ[^]éÚþÿÿÇD$·���Ç$���è����ëˆt&�U‰åWVSƒì,‹E €=����‹u‹]‰Eätu‰$è����‰Ç¡���…Àt$…ÿt ‹X…Ûtƒþ¸���u ëƒÀ9Æt‹…ÛuóƒÄ,[^_]Ãv�‹C…Àt‰$è����‹Eä‰$è����‰{ÇCÿÿÿÿ‰CƒÄ,[^_]é-þÿÿÇD$Ê���Ç$���è����érÿÿÿt&�U‰åWVSƒì,‹}€=����‹U ‹utk¡���…Àt ‹X…Ûtƒÿ¸���u ëƒÀ9Çt‹…ÛuóƒÄ,[^_]Ãt&�‹C…Àt‰Uä‰$è����‹Uä‰$è����‰sÇC����‰CƒÄ,[^_]éŠýÿÿ‰UäÇD$Þ���Ç$���è����‹Uäévÿÿÿt&�¼'����U‰åƒì(€=����‰uø‹u ‰}ü‹}‰]ôttÇD$���Ç$ ���è����‰4$‰Ãè����‰Æ¡���…Àt>…öt:‰<$è����‰s‰\$ÇCÿÿÿÿ‰C¡���ƒÀ‰$è����‹]ô‹uø‹}ü‰ì]éÛüÿÿ‹]ô‹uø‹}ü‰ì]ÃÇD$ô���Ç$���è����ésÿÿÿt&�U‰åƒì(€=����‰uø‹u ‰}ü‹}‰]ôtSÇD$���Ç$ ���è����‹���…Ò‰ÃtI‰<$è����‰s‰\$‰C¡���ƒÀ‰$è����‹]ô‹uø‹}ü‰ì]é?üÿÿÇD$��Ç$���è����ë—‹]ô‹uø‹}ü‰ì]ö����¿����U‰åV‰ÆSƒì‹@‹@8‰$è����è����‹F‹X‹P8Ç@4����…ÛÇ‚¸�������Æ@ �t‹KÆC�…Ét‰Øè®ÿÿÿ‹…Ûuè‹F‹@<‰$è����ƒÄ[^]Ãv�U‰åVSƒì‹E‹˜¸���…Ût{‹C8‹s<‰$è����è����‹C8‰ÚÇ€¸�������‹C<Ç€¸�������1ÀèÅøÿÿÆC �ÇC4����‹[ƒ-T���…Ût‹CÆC�…Àt‰Øèÿÿÿ‹…Ûuè‰uƒÄ[^]é����¶����ƒÄ[^]Éö¼'����U‰åƒì‰]ø‰Ó‹$���‰uü‰Î…Òt&Ç$È���è����Ç$É���‰è����‹]ø‰‹uü‰ì]á ���‹uü‰¡¤���‹]ø‰‰ì]ô&����U‰åWVS‰ÃƒìL‹p…öuëL‹6…ötF‹F…Àtò€~�tì‹{8‹S,‹H8W<+P,‰Q<‹S0W@+P0‰Q@èµÿÿÿ„ÀtŃÄL¸���[^_]Ãt&�‹S8‹z<‹B@ƒÿ‰EÔ~ ‹C$ƒè9øE‹C4…À„��€x�„��‹H…Ét €y �…ó���ÆB,Æ@�1ÀÇC4����ƒÄL[^_]ö����ƒ}Ô~µ‹C(ƒè9EÔ}ªÇ$���è����‹UÔ‹sƒêH‰ÐÁú÷ù…ö‰ÁtP¸���ƒúu ë1ƒÀ9Ât*‹6…öuó‰MÄ1öÇD$��ÇD$'��Ç$@��è����‹MÄÆF‹C4‰N …Àt9ðt&‹H…É„D��è8ýÿÿ‹C49Æt‹S8…ÀÆB,tÆ@�ÆC ‹F‰s4…À„Ïþÿÿ€x �tÆ@ ¸���éÿÿÿƒÄL1À[^_]Ë���Mà‰UÌUäÆ@ ‹C<èçýÿÿ‹V‹C$C,‰UĉB,‹C0‰EЋF Ç$���‰EÈè����‹UăÀ¯EÈEЉB0‹F‹H$‹P,Ê;Uä~‹S,)ʉP,‹P0‹H(Ñ;MàŠ���‹@8‰$è����‹F‹P0‰T$‹@,‰$è����‹F‹P(‰T$‹@$‰$è����è����è����‹F‹P8‰‚¸���‹Ủ$è����‹F{,‹MÔ‹P8+x,‰z<K0+H0‰J@èqýÿÿ‹Féïþÿÿ‹S8ÆB,éÇþÿÿ‰UÄÇ$���è����‹Uă‰Á‹F+P( ‰ÊÁú÷Ò!ʉP0éEÿÿÿ¶����¿����U‰åƒì‹EÉéýÿÿU‰åWVSƒì<‹]‹U ¶u‹ƒ¸���…À„��9X<„v��èáüÿÿ„Àu-‰ð„À…Å���€»È����¸���tƒÄ<[^_]ÃÆC,ƒÄ<[^_]á���‰EС���‰EÔ‹ƒ¸���‹x<‰<$è����‹³¸���‰5���‰ò‹B…Àuë8‹�…Àt2€x�tô‹H…Ét‰Êëà‹J…Ét‹@‰���‰$ÿщ5���¶����‰<$è8ûÿÿ‹EЉ$è����‹EÔ£���¸���€»È����…NÿÿÿéQÿÿÿ‹ƒ¸���‹@<‰$èýúÿÿ¸���€»È����…&ÿÿÿé)ÿÿÿ¶����ƒú‡\��‰ð„Àv�„O��ƒÂ(‹t“ …ö„@��ÆC,‹t“ ¡���‰EÔ‹F<…Àt Ç€¸�������‰³¸���‰ò‰ØÆF è—óÿÿ‹F<MàUäƒT���èûÿÿ‰$è����‹{<Ç$d���è����<8‰~,‹{@Ç$e���è����‹N,‹V$ø< ;}ä‰F0~)щN,‹V( ;Mà~)ЉÂÁú÷Ò!‰V0‹S<‹~8Ç$d���‰UÌè����‹UÌ+V,‹[@‰G<‹~8Ç$e���è����+^0‰G@‹F8‰$è����‹F0‰D$‹F,‰$è����‹F(‰D$‹F$‰$è����è����è����‹F8‰°¸���‰ðèúÿÿ‹EÔ‰$è����¸���é¶ýÿÿƒÄ<1À[^_]ËM‹P8+H,‰J<‹M+H0‰J@épýÿÿ¶����U‰åWVSƒì\¡���…À‰EÔ„Î��‹UÔ‹²¸���…ö„¤��‹F8‰$è����Ç$H�è����ƒìÇ$q ��è����ƒìÇ$á ��è����ƒìÇ$P ��è����ƒìÇ$D ��è����ƒìÇ$��è����ƒìè����è����Ç$g���è����Ç$f���‰Ãè����‰]äÙèÝT$(ÙèÙàÝ\$ ÙîÝT$ÛEäÝ\$‰EäÛEäÝ\$Ý$Ù]Èè����ƒì0Ç$���è����ƒìè����è����ÙEÈÙT$ ÙT$ÙT$Ù$è����ƒìÇ$���è����ƒìÇD$����‹F$‰$è����ƒìÇD$���‹F$ƒè‰$è����ƒìÇD$����Ç$����è����ƒìÇD$���Ç$���è����‹F(ƒì‰D$Ç$����è����‹F(ƒèƒì‰D$Ç$���è����ƒìè����ÇD$���?ÇD$���?Ç$���?ÙEÈÙ\$ è����ƒìÇ$���è����‹F(ƒì‰D$Ç$����è����‹F(ƒèƒì‰D$Ç$���è����‹F(ƒì‰D$‹F$‰$è����‹F(ƒèƒì‰D$‹F$ƒè‰$è����ƒìÇD$����‹F$‰$è����ƒìÇD$���‹F$ƒè‰$è����ƒìè����Ç$����è����ƒìÇ$���è����ƒìÇD$���Ç$���è����ƒìÇD$���‹F$ƒè‰$è����‹F(ƒèƒì‰D$‹F$ƒè‰$è����‹F(ƒèƒì‰D$Ç$���è����ƒìè����‹^…Ûuéç���‹…Û„Ý���€{�tð‹{ Ç$���è����ƒìÇ$���è����ƒìÇ$���è����Ç$���ƒÀ¯ÇƒÀ‰D$è����ƒìÇ$���è����ƒÀ¯ÇƒÇƒÀ‰D$‹F$ƒè‰$è����ƒìÇ$���è����ƒÀ¯ÇƒÀ‰D$‹F$ƒè‰$è����ƒìÇ$���è����Ç$���ƒÀ¯ÇƒÀ‰D$è����ƒìè����‹…Û…#ÿÿÿÇ$ ���è����‹^ƒì…Û„y��ÇEÜ����‰uØéL��‹uÜÇ$���è����Ç$���ƒÆ‰Çè����ƒÇ¯þÇ$���ƒÀ‰EäÛEäÜ ¨��Ù}â·EâØ%°��´ f‰EàÙmàÛ]äÙmâ‹Eä)lj|$è����‹Cƒì‰D$Ç$���è����‹{…ÿ„¶���ÇD$_���Ç$���è����‹UØ‹z$Ç$���ƒï)Çè����Ç$���ƒÀ¯EÜP‰U܉EÈè����‹EȃÀƒì‰D$‰<$è����ƒìÇ$���è����ƒÀ‰ÂÁê‹UØÑøE܉D$‹B$ƒè‰$è����ƒìÇ$���è����‰<$E܉D$è����ƒìè����€{�ul‹…Ût!‰uÜ€{�„ªþÿÿÇ$0���è����ƒìé–þÿÿè����Ç$��è����ƒìè����Ç$���è����ƒìè����è����‹EÔ‰$è����eô[^_]ÃÇ$ ���è����ƒìëƒÇD$l��ÇD$|��Ç$@��è����éúÿÿš™Y?š™Y?š™Y?��€?š™>š™>ffæ>��€?��������������€?��€?��€?��€?��€?glutSetMenuData� ERROR: Function <%s> called without first calling 'glutInit'.�glutGetMenuData�glutDetachMenu�glutAttachMenu�glutGetMenu�glutSetMenu�glutDestroyMenu�glutCreateMenu�_�glutRemoveMenuItem�glutChangeToSubMenu�glutChangeToMenuEntry�glutAddSubMenu�glutAddMenuEntry�fghCheckMenuStatus�Cannot find menu entry��� ERROR: Internal error <%s> in function %s�fgDisplayMenu���Displaying menu in nonexistent window�������333333Ó?���@����8���&����C���$����J���$����O���L����T���'����h���&����s���$����z���$�������L����„���'����œ���&����¤���'����®���'����Ô���$����Û���$����à���L����ü���&������'������'����4��$����;��$����@��L����X��&����a��'����t��$����{��$����€��L����˜��&����¦��/����¯��'����¹��$����À��$����Å��L����Ü��&����ç��/������$���� ��$������L������/����8��&����C��$����J��$����O��L����Z��+����z��(����š��'����Ï��,����ã��$����ï��,������C������'����M��&����V��'������-����Ÿ��.����§��.����º��$����Á��$����Æ��L����Þ��&����ò��/����ù��'����;��.����F��1����g��$����n��$����s��L����Ž��&����œ��'����Þ��.����é��1���� ��$������$������L����8��&����^��0����h��/����o��'������1����•��'���� ��2����Æ��$����Í��$����Ò��L����è��&������0������'����"��1����1��'����<��2����U��$����\��$����a��L����”��J����™��3����â��J������J������3����K��&������'����²��:����À��:����Ñ��)����Û��)����É��C���� ��$���� ��$���� ��$���� ��L���� ��'����Ì ��C���� ��J����% ��4����: ��5����? ��6����D ��7����[ ��J����ž ��C����A ��'����I ��'����] ��J����i ��'����› ��'����¦ ��'����¿ ��J����Ç ��'����> ��'����t ��&����‚ ��J����‘ ��:����¦ ��:����ì ��:���� ��:���� ��J����0 ��4����B ��5����G ��6����L ��7����g ��J����ª ��'����Ñ ��J����Ý ��8����ì ��9����û ��9���� ��9������9����(��G����0��<����5��=����A��:����O��:����‚��;����‘��G����™��<����ž��=����µ��>����Ä��B����Ú��D����ó��D���� ��D����!��D����7��D����P��D����X��E����{��>����Š��B���� ��D����¹��D����Î��D����é��D����ÿ��D������D���� ��E����'�� ����,��K����;��B����R��D����k��D����†��D����Ÿ��D����§��E����Í�� ����Ò��K����á��B����ð��C���� ��D������C����6��D����E��C����`��D����o��C����ˆ��D������E����¡�� ����¦��K����Ò��C����ã��C����ÿ��$���� ��$����)��?����?��@����^��A����u��C����‘��B����¦��D����µ��C����Ú��D����é��C����ø��D�������E���� �� ����%��K����2��F����>��G����F��H����R��G����Z��H����_��I����j��J����y�� ����~��K����‹��$����“��$����š��$����Ÿ��L����ø��*����v��J����.file�������þÿ��gfreeglut_menu.c��������������� ��������������������������0���� ������-���`���� ������>������� ������N���ð���� ������^���P��� ������k������ ������x���Ð��� ������‰���0��� ������™���p��� ������³������ ������Ì���@��� ������à���Ð��� ������õ���€��� ������ ��0��� ��������à��� ������.��€��� ������D��ð��� ������V����� ������h��ð��� ������|��Ð ��� ������“��à ��� ������¦��  ��� ������µ��������������Ä�������������Ô�� �����������ã��0�������.text����������¨��ã�������������.data����������@�����������������.bss�����������������������������.rdata���������´����������������_fgState�������������ó������������������������������������������������������ ������*�������� ������8�������� ������J�������� ��_free��������� ������X�������� ��_calloc������� ��_strdup������� ������d�������� ������r�������� ������‚�������� ������–�������� ������©�������� ������¸�������� ������È�������� ������Ø�������� ��_glutGet������ ������å�������� ������ñ�������� �������������� �������������� ������!�������� ������2�������� ������D�������� ������U�������� ������`�������� ������r�������� ��_glEnd@0������ ������€�������� �������������� ������Ÿ�������� ������®�������� ������¿�������� ������Ì�������� ��_fgError������ ��Ú��_fghSetMenuParentWindow�_glutSetMenuData�_glutGetMenuData�_glutDetachMenu�_glutAttachMenu�_glutGetMenu�_glutSetMenu�_glutDestroyMenu�_glutCreateMenu�___glutCreateMenuWithExit�_fghCalculateMenuBoxSize�_glutRemoveMenuItem�_glutChangeToSubMenu�_glutChangeToMenuEntry�_glutAddSubMenu�_glutAddMenuEntry�_fghDeactivateSubMenu�_fgDeactivateMenu�_fghGetVMaxExtent�_fghCheckMenuStatus�_fgUpdateMenuHighlight�_fgCheckActiveMenu�_fgDisplayMenu�_menu_pen_back�_menu_pen_hback�_menu_pen_fore�_menu_pen_hfore�_fgStructure�___glutExitFunc�_fgDisplay�_fgDestroyMenu�_fgCreateMenu�_glutBitmapLength�_fgListRemove�_fgMenuByID�_fgListAppend�_glutHideWindow�_glutPositionWindow�_glutReshapeWindow�_glutPopWindow�_glutShowWindow�_glPushAttrib@4�_glDisable@4�_glOrtho@48�_glPushMatrix@0�_glLoadIdentity@0�_glColor4f@16�_glRasterPos2i@8�_glutBitmapString�_glutBitmapWidth�_glBegin@4�_glutBitmapHeight�_glVertex2i@8�_glPopAttrib@0�_glMatrixMode@4�_glPopMatrix@0�_glutSwapBuffers�_fgSetWindow�_glColor4fv@4�freeglut_misc.o/1264195965 500 500 100664 2909 ` L�����n�������.text�����������P��´���ø������?��� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������ô����������������@�0@U‰åƒì€=����tÉÃÇD$����Ç$���è����ÉÉö¼'����U‰åƒì€=����uÇD$T���Ç$���è����ÙîÉÉö¼'����U‰åƒì€=����tÉÃÇE a���ÇE���Éé����t&�¼'����U‰åSƒì‹]€=����tA…Ûx ƒû~ƒût"‰\$Ç$€���è����ƒÄ[]É(���ƒÄ[]ÃÇ(������ƒÄ[]ÃÇD$n���Ç$���è����ë©¶����U‰åƒì€=����t¡���…Àt(‹U…Ò•@DÉÃÇD$¢���Ç$���è����¡���…ÀuØÇD$¢���Ç$¸���è����‹U¡���…Ò•@DÉö����¿����U‰åƒì€=����t!¡���…Àt‹H|…Ét‰$è����Éô&����ÇD$ö���Ç$���è����ëÉv�¼'����U‰åƒì€=����u4é���=��º��twe=���º+��tº¼��‰T$Ç$Í��è����è����…ÀtU=��º^��tÛvº=��ºŒ��tͺn��rÆ=1€��º|��tº=e€��ºª��u©ë¬=��º=��t =��ºO��uë’ÉÃÇD$ ��Ç$���è����늴&����U‰åƒì(‰]ô‹]‰uø‰}ü‰$è����€=����‰Æt-‹=���…ÿtÇD$ ���‰$è����…Àt%1À‹]ô‹uø‹}ü‰ì]ÃÇD$Ú��Ç$���è����ë½Ç$��è����ƒì…À‰ÇtƉ\$‰$è����…Àt¶9Çt€xÿ tð‰\$‰$è����…Àtš9Çuäð¶„Òu ¸���ëˆv�€ú u¸ëïglutCopyColormap���� ERROR: Function <%s> called without first calling 'glutInit'.�glutGetColor�glutSetColor�glutSetKeyRepeat��Invalid glutSetKeyRepeat mode: %d�glutIgnoreKeyRepeat��� ERROR: Function <%s> called with no current window defined.�glutForceJoystickFunc�glutReportErrors�invalid value�invalid enumerant�invalid operation�stack overflow�stack underflow�out of memory�table too large�invalid framebuffer operation�texture too large�unknown GL error�GL error: %s�glutExtensionSupported�������������������������!�������8�������C�������J�������O�������h�������t�������{�������œ�������¹�������¾�������Ê�������Ö�������è�������ï�������ô�������������������'������.������3������8������D������K������P������X������x������€������“������¤������«������°������È������Ú������è������ï������ú������ÿ������������������ ������'������3������?������M������Y������g������n������s������–������œ������§������»������Ö������Ý������â������ð������������!�������������.file�������þÿ��gfreeglut_misc.c��������������� ��������������������������0���� ������$���`���� ������2������� ������D������� ������Y���p��� ������p���À��� ������‚���€��� ��.text����������G��?�������������.data����������������������������.bss�����������������������������.rdata���������ñ����������������_fgState�������������š����������������§��������� ������½��������� ������È��������� ��_strlen������� ��_strchr������� ��_fgError������ ������Ö��������� ��_strstr������� ��å���_glutCopyColormap�_glutGetColor�_glutSetColor�_glutSetKeyRepeat�_glutIgnoreKeyRepeat�_glutForceJoystickFunc�_glutReportErrors�_glutExtensionSupported�_fgStructure�_fgJoystickPollWindow�_fgWarning�_glGetError@0�_glGetString@4� /205 1264195965 500 500 100664 691 ` L�����ü��������.text�����������p���Œ��������������� �P`.data�������������������������������@�0À.bss��������������������������������€�0ÀU‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Ã.file�������þÿ��gfreeglut_overlay.c������������ ������������������������������ ������-��� ���� ������;���0���� ������U���@���� ������u���P���� ������†���`���� ��.text����������e�����������������.data����������������������������.bss�����������������������������—���_glutEstablishOverlay�_glutRemoveOverlay�_glutUseLayer�_glutPostOverlayRedisplay�_glutPostWindowOverlayRedisplay�_glutShowOverlay�_glutHideOverlay� /225 1264195965 500 500 100664 5713 ` L�����F��$�����.text�����������° ��´��� ������t��� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������°��d ��œ���������@�0@U‰åƒì€=����uÇD$����Ç$���è����‹E Ç�����1ÀÉÃU‰åSƒì‹]€=����t=û ��s‰\$Ç$d���è����¸ÿÿÿÿƒÄ[]Ã1Àû$��vðû%��¸ÿÿÿÿuÎëáÇD$T���Ç$���è����ë­v�¼'����U‰åƒì€=����t¡,���ƒøÿtÉÃt&�ÇD$‹���Ç$���è����ëÙÇ$œ���è����1ÀÉÃv�¼'����U‰åƒì€=����‰]ø‹]‰uü‹u „ƒ���û÷��„—���vCûý��„'��‡‘���ûø��„õ���ûù��„Ù���‰] ‹uüÇEà���‹]ø‰ì]é����ûô��„ô���vrûõ��„Æ���ûö��uʼn5 ���‹]ø‹uü‰ì]ÃÇD$Ð���Ç$���è����û÷��…iÿÿÿ‰5���ëζ����ûþ��t8û���…sÿÿÿ‰5„���ë¬t&�ƒûzt#û€���…Vÿÿÿ‰5ˆ���ë´&����‰5 ���뀡���…À„sÿÿÿ‰p0ékÿÿÿv�‰5t���é]ÿÿÿt&�‰5���éMÿÿÿt&�‰5���é=ÿÿÿt&�ƒþ”%���é)ÿÿÿ‰5����éÿÿÿt&�U‰åSƒì‹]€=����tBƒ¨ýÿÿƒøv‰\$Ç$��è����¸ÿÿÿÿ‹]üÉÃÿ$…@��€=����¸���uå1À‹]üÉÃÇD$��Ç$���è����ë¨t&�‹]üÉé����´&����ÇE����‹]üÉé����¡���…Àtµ¶@D딡(���댋]üÉé����¶€���éwÿÿÿt&�ÇE����‹]üÉé����¸���éYÿÿÿ¶����Ç$���è����ƒìé?ÿÿÿ‹]üÉé����v�‹]üÉé����´&����¡���…À„1ÿÿÿ‹@4éÿÿÿÇ$+���è����ƒìéúþÿÿ´&����U‰åƒìH‰]ô‹]‰uø‰}üÇEÜ����ƒû|„¢���û¼��„„���€=����„÷���ûÈ���„Ü��†‹���ûù��„g��†ñ���ûÿ��„u��t&�‡B��ûü��¸xP��t4‡g��ûú��„æ��ûû��…ï���Ç$���è����ƒìëè����‹]ô‹uø‹}ü‰ì]ö���‹]ô‹uø‹}ü‰ì]Ãûp„$��†É���ƒûv„¡��‡ú��ƒûs„��‡��ƒûq„;��ƒûru|Eà‰D$Ç$[ ��è����‹Eàƒìé…ÿÿÿÇD$„��Ç$���è����éðþÿÿt&�û��„Ô��t&�‡��ûÊ���„b��‚R��ûË���„w��û,��„N��‰\$Ç$Œ��è����¸ÿÿÿÿé ÿÿÿ¶����ƒûj„ç��w}ƒûh¸���„îþÿÿwƒûdrÀ¡���…Àu´&����1ÀéÐþÿÿỦT$‹@ ‰$è����¡���9$���VVt ƒ¸¼����„N��ƒûf„Ñ��ƒûg„½��ƒûe„¬��‹EÌéþÿÿƒûm„2��‡*��ƒûk„��ƒûl…7ÿÿÿEà‰D$Ç$S ��è����‹Eàƒìé@þÿÿûö��„å���‡2��ûô��„/��ûõ��…ïþÿÿ€=����„’���¡���éÿýÿÿû��„ö��‡D��û���„Ú��û��…®þÿÿ¡���éËýÿÿt&�ƒûz„���‡7��ƒûx„Ó��ƒûyt&�…zþÿÿEç‰D$Ç$3 ��è����1Àƒì€}ç�•Àé}ýÿÿ¶����¸ÿÿÿÿémýÿÿEà‰D$Ç$Z ��è����‹EàƒìéOýÿÿ€=����tÏ¡ ���é<ýÿÿÇ$ ���è����ƒìé(ýÿÿEç‰D$Ç$2 ��ë…Eà‰D$Ç$V ��è����‹Eàƒìéùüÿÿf¡t���éíüÿÿ¡¤���éãüÿÿ¡¨���éÙüÿÿ¡���…À„õýÿÿƒÀ‰$è����é¼üÿÿ¡¬���é²üÿÿEà‰D$Ç$Y ��è����‹Eàƒìé”üÿÿ¡ ���éŠüÿÿv�¡���ÇD$����ÇD$���‰$è����¶ÀébüÿÿEà‰D$Ç$R ��è����‹EàƒìéDüÿÿEà‰D$Ç$T ��è����‹Eàƒìé&üÿÿ¡���…À„BýÿÿÀ���‰$è����éüÿÿ¡Œ���éýûÿÿ¡”���éóûÿÿ€=����„oþÿÿ¡����éÜûÿÿE܉D$Ç$B ��è����‹E܃ìé¾ûÿÿ¡���…À„Úüÿÿ‹@0é©ûÿÿû��tû���…nüÿÿ¡„���é‹ûÿÿ¡˜���éûÿÿƒû{tû€���…Iüÿÿ¡ˆ���éfûÿÿ¡���…À„‚üÿÿ‹@‰$è����ƒìéFûÿÿƒûnt'ƒûo…üÿÿEà‰D$Ç$X ��è����‹EàƒìéûÿÿEà‰D$Ç$U ��è����‹Eàƒìéüúÿÿû÷��tûø��…Áûÿÿ¡���éÞúÿÿ€=����„Zýÿÿ¡���éÇúÿÿûý��tûþ��…Œûÿÿ¡ ���é©úÿÿ1À€=%����•Àé˜úÿÿƒûtt,ƒûu…cûÿÿ¡���…À„¦ûÿÿ‹€¼���…À„˜ûÿÿ‹@égúÿÿEç‰D$Ç$1 ��éÁüÿÿ€¸È����…¥ûÿÿ‹uÌÇ$ ���è����40Q‰uÌ‹uÔÇ$ ���è����)ÆR‰uÔ‹uÐÇ$!���è����W‰ÇÇ$���è����ÇQ47‰uЋuØÇ$!���è����)ÆR‰uØé9ûÿÿ‹EÐéÓùÿÿ‹EØ+EÐéÈùÿÿ‹EÔ+EÌé½ùÿÿglutGetModeValues��� ERROR: Function <%s> called without first calling 'glutInit'.�glutLayerGet����glutLayerGet(): missing enum handle %d�glutGetModifiers�glutGetModifiers() called outside an input callback�glutSetOption���glutSetOption(): missing enum handle %d�glutDeviceGet���glutDeviceGet(): missing enum handle %d�@��P��d��p��¾��•��à��¾��°��¾��������� ��0��ð��€��glutGet�glutGet(): missing enum handle %d�������������������������������<�������R�������W�������„�������‹��������������¨�������°�������Ä�������Ë�������Ð�������Ù�������Þ�������ø�������P������„������–������������¢������´������Ö������ó������������ ������"������2������B������V������b������|������•������š������«������²������É������Ð������Õ������������������#������X��#������������#����à������Y��#����c������w������Ó��"����æ������í������ò������G������L������������¥������ª������°��������"����S������_������“������Õ������ ��"����������"������3��#����_��"����q������{������…������������¢�� ����¬������Ä��"����Ô������á������ù��������"����2��"����B������W�� ����a������k������v������‚������š��"����ª������Ó������Ý������ø������ ������ ��!����> ��"����\ ��"����€ ������‹ ������— ������µ ������ ������Þ ������+ ��#����A ��#����V ��#����e ��#����} ��#����[������å������ü������������<������i������u������@�� ����D�� ����H�� ����L�� ����P�� ����T�� ����X�� ����\�� ����`�� ����d�� ����h�� ����l�� ����p�� ����t�� ����x�� ����|�� ����€�� ����.file�������þÿ��gfreeglut_state.c�������������� ��������������������������0���� ������%��� ���� ������7���ð���� ������F���p��� ��_glutGet°��� ��.text����������ª ��t�������������.data����������������������������.bss�����������������������������.rdata���������®���������������_fgState�������������U����������������b����������������m��������� ������„��������� ������œ��������� ������®��������� ������É��������� ������Ù��������� ������î��������� ��_fgError������ ������ý��������� �������������� �������������� ������*�������� ������>�������� ������L�������� ������^�������� ������o�������� ��ƒ��_glutGetModeValues�_glutLayerGet�_glutGetModifiers�_glutSetOption�_glutDeviceGet�_fgStructure�_fgDisplay�_fgSpaceballNumButtons�_glutJoystickGetNumAxes�_fgJoystickDetect�_glutJoystickGetNumButtons�_fgHasSpaceball�_fgInputDeviceDetect�_fgElapsedTime�_fgWarning�_GetWindowRect@8�_glGetBooleanv@8�_fgSetupPixelFormat�_fgListLength�_GetPixelFormat@4�_glGetIntegerv@8�_GetSystemMetrics@4� /243 1264195965 500 500 100664 24552 ` L�����àA��ˆ����.text������������������������������� �0`.data��������������´���ô2������`���@�`À.bss��������������������������������€�0À.rdata����������@0��´��´6��������@�`@�����������������������������������������������������������������������������������������������������������������������������������(���4���@���L���X���d���p���|���ˆ���”��� ���¬���¸���Ä���Ð���Ü���è���ô������ ����$��0��<��H��T��`��l��x��„����œ��¨��´��À��Ì��Ø��ä��ð��ü������ ��,��8��D��P��\��h��t��€��Œ��˜��¤��°��¼��È��Ô��à��ì��ø��������(��4��@��L��X��d��p��|��ˆ��”�� ��¬��¸��Ä��Ð��Ü��è��ô����� ����$��0��<��H��T��`��l��x��„����MonoRoman�������€���‰aC����%†ÑB����œ��%†ÑB���¤��%†ÑB���´��%†ÑB���à��%†ÑB������%†ÑB�����%†ÑB���0��%†ÑB���8��%†ÑB���@��%†ÑB���H��%†ÑB���P��%†ÑB���h��%†ÑB���x��%†ÑB���€��%†ÑB���ˆ��%†ÑB�����%†ÑB���˜��%†ÑB��� ��%†ÑB���¨��%†ÑB���°��%†ÑB���¸��%†ÑB���È��%†ÑB���Ð��%†ÑB���Ø��%†ÑB���è��%†ÑB���ð��%†ÑB���ø��%†ÑB�����%†ÑB�����%†ÑB��� ��%†ÑB���0��%†ÑB���8��%†ÑB���H��%†ÑB���X��%†ÑB���p��%†ÑB���ˆ��%†ÑB�����%†ÑB��� ��%†ÑB���À��%†ÑB���Ø��%†ÑB���è��%†ÑB������%†ÑB�����%†ÑB�����%†ÑB���(��%†ÑB���@��%†ÑB���`��%†ÑB���x��%†ÑB���€��%†ÑB�����%†ÑB��� ��%†ÑB���¸��%†ÑB���À��%†ÑB���Ð��%†ÑB���Ø��%†ÑB������%†ÑB��� ��%†ÑB���0��%†ÑB���@��%†ÑB���`��%†ÑB���€��%†ÑB��� ��%†ÑB���À��%†ÑB���Ð��%†ÑB���Ø��%†ÑB���è��%†ÑB���ø��%†ÑB��� ��%†ÑB��� ��%†ÑB��� ��%†ÑB���( ��%†ÑB���8 ��%†ÑB���H ��%†ÑB���X ��%†ÑB���h ��%†ÑB���x ��%†ÑB��� ��%†ÑB���˜ ��%†ÑB���° ��%†ÑB���À ��%†ÑB���È ��%†ÑB���Ø ��%†ÑB���è ��%†ÑB���ø ��%†ÑB���� ��%†ÑB��� ��%†ÑB��� ��%†ÑB���@ ��%†ÑB���` ��%†ÑB���p ��%†ÑB���€ ��%†ÑB���˜ ��%†ÑB���° ��%†ÑB���¸ ��%†ÑB���Ð ��%†ÑB���à �������������ð ������ �����( �����8 ���������������������������������H �����X �����h �����x �����ˆ �����˜ �����À �����` �����€ �� ���� ��"���` �����p�� ���€�� ���à�����0�����@�����P�����`�����p�����€�����À�����à���������� �����À�����à�����`�����Ø�����ð����������� �����X�����h�����€�����€�����@�����€�����À�����������@�����X�����h�����x����� ����� �����`����� �����8�����H�����X�����h�� ���€�� ���à�����@�����Ð�� ���à�����@�����P�����`�����p�����€���������� �����À�����X�����h�����x�����ˆ�����˜�� ���À���������� �����0�����@�����P�������������`�����p�����€���������� �����°�����À�����à�����ˆ�� ��� �����������¨�����¸�� ���à�����0�����@�����à�����ð�� ���� �����P �����` �����������������������������p �����€ ����� �����  �����° �����À �����Ð �����è �����ø �����!�����!�������������(!�����8!�����H!�����X!�����h!�����������������������������x!�����ˆ!�����˜!�����¨!�����¸!�����È!�����à!�����"�����"�����0"�����@"�����°"�����À"�����@#�����°#�����À#�����@$�����à$�����%����� %�����`%�����Ð%�����à%����� &�����H&�����`&����� &�����È&�����Ø&�����è&�����ø&�����'����� '�����`'�����˜'�����À'������(�����ˆ(����� (�����)����� )�����)����� )�����à)�����€*�����¨*�����À*�����ø*�����+�����+���������������������(+�����8+�����H+�����X+�����h+�����x+�����ˆ+����� +�����Ð+�����à+�����ð+�� ����,�����`,�� ����-�����P-�� ���`-�����À-�� ���`.�� ���À.�� ��� /�����x/����� /��%†QB��ÈB%†QBMUB%†QB|aAõy>B|a˜@%†QB����T’dB|a˜@%†QB|aAgUB��ÈBgUBZU…BqÛŽB��ÈBqÛŽBZU…B0 [B“îBÆm«AMU³ª¦B“îB��HBMUÂÆm«AT’dB¾0°BT’dBgU…A:’äA³ª¦B:’äA¬m+B“îB¬m+B|a˜ÁjžwB“îBjžwB|a˜Á������������������������¹m«B¹m«B‰a˜Bèy¾BjžwB��ÈB¬m+B��ÈB:’äAèy¾B|a˜A¹m«B|a˜A‰a˜BÛy¾AZU…B:’äA„žwB|aBT’dBMU…BÛy>B‰a˜B¬m+B¡ç¡B|aB¹m«B:’äA¹m«B:’dA‰a˜B|a˜@jžwB����¬m+B����:’äA|a˜@|a˜A:’dAèy¾B��ÈB|aA��������������������MUB��ÈB¬m+BÐó´B¬m+B¡ç¡B|aBqÛŽB:’äAZU…B|a˜AZU…B|aA‰a˜B|aA¹m«B:’dAèy¾BÛy¾A��ÈBMUB��ÈB¬m+Bèy¾B:’dBÐó´BqÛŽBÐó´B¹m«Bèy¾Bèy¾B��ÈB‰a˜BMUBZU…B:’äA„žwB|a˜A„žwB|aAqÛŽB����¡ç¡B����Ðó´B|a˜@èy¾B:’dAèy¾BÛy¾A¹m«BMUB‰a˜BMUB����������ÈBT’dB��ÈB„žwBèy¾BZU…BÐó´BZU…B¹m«B„žwB¡ç¡B%†QBqÛŽB:’äA„žwB:’dA †QB|a˜@¬m+B����Ûy¾A����:’dA|a˜@|aA|aA|a˜@|a˜A|a˜@:’äA|aA|aB:’dA¬m+BÛy>B„žwB †QBZU…BT’dB‰a˜BT’dB¹m«B †QBèy¾B¬m+B��ÈBMUBèy¾B:’äA¹m«B:’äA‰a˜BMUB„žwB¬m+BÛy>BZU…B:’dA‰a˜B|a˜@¹m«B����èy¾B������ÈB|a˜@��ÈB|aA%†QB��ÈB%†QBZU…B_ŠB“îB_nBJ ÛB��HBèy¾B¡ç!B‰a˜BqÛB%†QBqÛBMUB¡ç!B|aA��HB|aÁ_nBÛy¾Á_ŠBMUÂ����������������qÛB“îBÐó4BJ ÛB0 [Bèy¾BG’€B‰a˜B_ŠB%†QB_ŠBMUBG’€B|aA0 [B|aÁÐó4BÛy¾ÁqÛBMUÂ%†QBqÛŽB%†QB:’dAo’äAT’dB‰a˜B:’äA‰a˜BT’dBo’äA:’äA †QB¹m«B †QB����|aA¬m+Bèy¾B¬m+BT’dB|a˜@%†QB����õy>B|a˜@%†QB|aAT’dB|a˜@T’dB|a˜À%†QB:’dÁõy>B|a˜Á|aA¬m+Bèy¾B¬m+B����������������%†QB|aAõy>B|a˜@%†QB����T’dB|a˜@%†QB|aA|a˜A:’dÁ¹m«B��ÈB��������Ûy>B��ÈBMUBèy¾BÛy¾A¡ç¡B|a˜AT’dB|a˜A¬m+BÛy¾A|a˜AMUB|a˜@Ûy>B����:’dB����qÛŽB|a˜@¡ç¡B|a˜A¹m«B¬m+B¹m«BT’dB¡ç¡B¡ç¡BqÛŽBèy¾B:’dB��ÈBÛy>B��ÈB������������������������¡ç!B¡ç¡B��HB¹m«BG’€B��ÈBG’€B����Ûy¾A‰a˜BÛy¾A¡ç¡B:’äAÐó´BMUBèy¾B¬m+B��ÈBjžwB��ÈBqÛŽBèy¾B‰a˜BÐó´B¡ç¡B¡ç¡B¡ç¡BqÛŽB‰a˜B„žwBMU…BÛy>B|a˜A����¹m«B��������������������:’äA��ÈB¡ç¡B��ÈB †QB„žwBMU…B„žwB‰a˜BT’dB¡ç¡B%†QB¹m«B|aB¹m«B:’äA¡ç¡B:’dAqÛŽB|a˜@:’dB����¬m+B����:’äA|a˜@Ûy¾A|aA|a˜A|a˜AG’€B��ÈBgU…AMUB¾0°BMUBG’€B��ÈBG’€B����‰a˜B��ÈB:’äA��ÈBÛy¾AT’dB:’äA„žwB¬m+BZU…B:’dBZU…BqÛŽB„žwB¡ç¡B%†QB¹m«B|aB¹m«B:’äA¡ç¡B:’dAqÛŽB|a˜@:’dB����¬m+B����:’äA|a˜@Ûy¾A|aA|a˜A|a˜A������������������������$B¹m«B„ž“Bèy¾B_nB��ÈB��HB��ÈBqÛBèy¾B%†ÑA¡ç¡BÆm«AT’dBÆm«AMUB%†ÑA:’dAqÛB|a˜@��HB����0 [B����_ŠB|a˜@$B:’dA³ª¦B:’äA³ª¦BMUB$BÛy>B_ŠBT’dB0 [B„žwB��HB„žwBqÛBT’dB%†ÑAÛy>BÆm«AMUB¹m«B��ÈB|aB����|a˜A��ÈB¹m«B��ÈB��������¬m+B��ÈB:’äAèy¾BÛy¾A¹m«BÛy¾A‰a˜B:’äAZU…B|aB„žwB:’dBT’dBqÛŽB%†QB¡ç¡B¬m+B¹m«BMUB¹m«B|a˜A¡ç¡B|aA‰a˜B|a˜@jžwB����¬m+B����:’äA|a˜@Ûy¾A|aA|a˜A|a˜A|a˜AMUBÛy¾A¬m+BMUB%†QBÛy>BT’dBMU…B„žwB‰a˜BZU…B¡ç¡B‰a˜B¡ç¡B¹m«B‰a˜Bèy¾BjžwB��ÈB¬m+B��ÈB������������������������³ª¦BZU…B$B%†QB_ŠB¬m+B0 [B|aB��HB|aBqÛB¬m+B%†ÑA%†QBÆm«AZU…BÆm«AqÛŽB%†ÑA¹m«BqÛBèy¾B��HB��ÈB0 [B��ÈB_ŠBèy¾B$B¹m«B³ª¦BZU…B³ª¦B¬m+B$B|a˜A_ŠB|a˜@0 [B����Ðó4B����„ž÷A|a˜@%†ÑA:’dA��������%†QBZU…Bõy>B„žwB%†QBT’dBT’dB„žwB%†QBZU…B������������������������%†QB|aAõy>B|a˜@%†QB����T’dB|a˜@%†QB|aA������������������������%†QBZU…Bõy>B„žwB%†QBT’dBT’dB„žwB%†QBZU…B������������������������T’dB|a˜@%†QB����õy>B|a˜@%†QB|aAT’dB|a˜@T’dB|a˜À%†QB:’dÁõy>B|a˜ÁÐó´B¹m«B:’dA¬m+BÐó´B����|aAT’dBèy¾BT’dB|aA:’äAèy¾B:’äA:’dA¹m«BÐó´B¬m+B:’dA��������������������Ûy¾A‰a˜BÛy¾A¡ç¡B:’äAÐó´BMUBèy¾B¬m+B��ÈBjžwB��ÈBdÛŽBèy¾B‰a˜BÐó´B¡ç¡B¡ç¡B¡ç¡BqÛŽB‰a˜B„žwBdÛŽBT’dB †QBÛy>B †QBMUB���������������� †QB|aAÛy>B|a˜@ †QB����:’dB|a˜@ †QB|aA������������������������G’€B%†QB0 [BT’dBÐó4BT’dB¡ç!BÛy>B¡ç!B¬m+BÐó4BMUB0 [BMUBG’€B|aBG’€BT’dBG’€B|aB_ŠBMUB$BMUB³ª¦B¬m+B³ª¦BÛy>B$B„žwB_ŠBqÛŽB0 [B‰a˜B��HB‰a˜BqÛBqÛŽB%†ÑA„žwBÆm«AÛy>BÆm«A¬m+B%†ÑA:’äAqÛB|a˜A��HB:’dA0 [B:’dA_ŠB|a˜A †QB��ÈB:’dA���� †QB��ÈBÐó´B����:’äAMUB‰a˜BMUB|a˜A��ÈB|a˜A������������|a˜A��ÈBjžwB��ÈB‰a˜Bèy¾B¡ç¡BÐó´B¹m«B¡ç¡B¹m«BqÛŽB¡ç¡B„žwB‰a˜BT’dBjžwB%†QB������������������������|a˜A%†QBjžwB%†QB‰a˜BÛy>B¡ç¡B¬m+B¹m«BMUB¹m«B|a˜A¡ç¡B|aA‰a˜B|a˜@jžwB����|a˜A��������������������¾0°B‰a˜B³ª¦B¹m«B„ž“Bèy¾BG’€B��ÈBÐó4B��ÈBqÛBèy¾B%†ÑA¹m«BÆm«A‰a˜BgU…A„žwBgU…A|aBÆm«AÛy¾A%†ÑA:’dAqÛB|a˜@Ðó4B����G’€B����„ž“B|a˜@³ª¦B:’dA¾0°BÛy¾A|a˜A��ÈB|a˜A����|a˜A��ÈB †QB��ÈBMU…Bèy¾B‰a˜B¹m«B¡ç¡B‰a˜B¹m«B„žwB¹m«B|aB¡ç¡BÛy¾A‰a˜B:’dAMU…B|a˜@ †QB����|a˜A����Æm«A��ÈBÆm«A����Æm«A��ÈB³ª¦B��ÈBÆm«A%†QB_nB%†QBÆm«A����³ª¦B����Æm«A��ÈBÆm«A����Æm«A��ÈB³ª¦B��ÈBÆm«A%†QB_nB%†QB����������������¾0°B‰a˜B³ª¦B¹m«B„ž“Bèy¾BG’€B��ÈBÐó4B��ÈBqÛBèy¾B%†ÑA¹m«BÆm«A‰a˜BgU…A„žwBgU…A|aBÆm«AÛy¾A%†ÑA:’dAqÛB|a˜@Ðó4B����G’€B����„ž“B|a˜@³ª¦B:’dA¾0°BÛy¾A¾0°B|aBG’€B|aB¾0°B|aB|a˜A��ÈB|a˜A����¹m«B��ÈB¹m«B����|a˜A%†QB¹m«B%†QB%†QB��ÈB%†QB����������������������������‰a˜B��ÈB‰a˜BÛy¾AqÛŽB|aAZU…B|a˜@T’dB����õy>B����–aB|a˜@gUB|aAo’äAÛy¾Ao’äAMUB|a˜A��ÈB|a˜A����¹m«B��ÈB|a˜AMUB¬m+BT’dB¹m«B����Ûy¾A��ÈBÛy¾A����Ûy¾A����¡ç¡B����:’dA��ÈB:’dA����:’dA��ÈB †QB����Ðó´B��ÈB †QB����Ðó´B��ÈBÐó´B����|a˜A��ÈB|a˜A����|a˜A��ÈB¹m«B����¹m«B��ÈB¹m«B��������������������¬m+B��ÈBMUBèy¾BÛy¾A¹m«B|a˜A‰a˜B:’dA„žwB:’dA|aB|a˜AÛy¾AÛy¾A:’dAMUB|a˜@¬m+B����jžwB����qÛŽB|a˜@¡ç¡B:’dA¹m«BÛy¾AÐó´B|aBÐó´B„žwB¹m«B‰a˜B¡ç¡B¹m«BqÛŽBèy¾BjžwB��ÈB¬m+B��ÈB|a˜A��ÈB|a˜A������������|a˜A��ÈBjžwB��ÈB‰a˜Bèy¾B¡ç¡BÐó´B¹m«B¡ç¡B¹m«BZU…B¡ç¡BT’dB‰a˜B%†QBjžwBÛy>B|a˜AÛy>B����������������¬m+B��ÈBMUBèy¾BÛy¾A¹m«B|a˜A‰a˜B:’dA„žwB:’dA|aB|a˜AÛy¾AÛy¾A:’dAMUB|a˜@¬m+B����jžwB����qÛŽB|a˜@¡ç¡B:’dA¹m«BÛy¾AÐó´B|aBÐó´B„žwB¹m«B‰a˜B¡ç¡B¹m«BqÛŽBèy¾BjžwB��ÈB¬m+B��ÈB:’dB|a˜A¹m«B|aÁ|a˜A��ÈB|a˜A����������������������������|a˜A��ÈBjžwB��ÈB‰a˜Bèy¾B¡ç¡BÐó´B¹m«B¡ç¡B¹m«BqÛŽB¡ç¡B„žwB‰a˜BT’dBjžwB%†QB|a˜A%†QB †QB%†QB¹m«B����¹m«B¹m«B‰a˜Bèy¾BjžwB��ÈB¬m+B��ÈB:’äAèy¾B|a˜A¹m«B|a˜A‰a˜BÛy¾AZU…B:’äA„žwB|aBT’dBMU…BÛy>B‰a˜B¬m+B¡ç¡B|aB¹m«B:’äA¹m«B:’dA‰a˜B|a˜@jžwB����¬m+B����:’äA|a˜@|a˜A:’dA †QB��ÈB †QB����|a˜A��ÈB¹m«B��ÈB|a˜A��ÈB|a˜A:’äAÛy¾A:’dAMUB|a˜@Ûy>B����:’dB����qÛŽB|a˜@¡ç¡B:’dA¹m«B:’äA¹m«B��ÈB:’dA��ÈB †QB����Ðó´B��ÈB †QB����|a˜@��ÈB:’äA���� †QB��ÈB:’äA���� †QB��ÈB‰a˜B������ÈB��ÈB‰a˜B����|a˜A��ÈB¹m«B����¹m«B��ÈB|a˜A����:’dA��ÈB †QB%†QB †QB����Ðó´B��ÈB †QB%†QB¹m«B��ÈB|a˜A����|a˜A��ÈB¹m«B��ÈB|a˜A����¹m«B����qÛB“îBqÛBMU¡ç!B“îB¡ç!BMUÂqÛB“îB_ŠB“îBqÛBMUÂ_ŠBMUÂ|a˜A��ÈB¹m«B:’dÁG’€B“îBG’€BMUÂ_ŠB“îB_ŠBMUÂqÛB“îB_ŠB“îBqÛBMUÂ_ŠBMU †QBJ ÛB:’dA¬m+B †QBJ ÛBÐó´B¬m+B������������MUÂ%†ÑBMUÂ%†ÑB:’äÁ����:’äÁ����MUÂÆm+B��ÈBZU…BqÛŽBÆm+B��ÈB–aBèy¾BZU…BqÛŽB¡ç¡BZU…B¡ç¡B����¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dAÛy¾A��ÈBÛy¾A����Ûy¾A%†QBMUB„žwB¬m+BZU…B:’dBZU…BMU…B„žwB‰a˜B%†QB¡ç¡B|aB¡ç¡B:’äA‰a˜B:’dAMU…B|a˜@:’dB����¬m+B����MUB|a˜@Ûy¾A:’dA����������������¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dA¡ç¡B��ÈB¡ç¡B����¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dA����������������Ûy¾A|aB¡ç¡B|aB¡ç¡BÛy>B‰a˜BT’dBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dA������������������������qÛŽB��ÈB„žwB��ÈB%†QBèy¾Bõy>B¡ç¡Bõy>B����gUBZU…BZU…BZU…B��������¡ç¡BZU…B¡ç¡B|aÁ‰a˜BÛy¾ÁdÛŽB:’äÁjžwBMUÂÛy>BMUÂ|aB:’äÁ��������¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dA%†ÑA��ÈB%†ÑA����%†ÑAÛy>B¡ç!B„žwB��HBZU…BG’€BZU…Bwž“B„žwBœ$BÛy>Bœ$B������������õy>B��ÈB%†QBèy¾BT’dB��ÈB%†QB%†ÑBõy>B��ÈB%†QBZU…B%†QB������������T’dB��ÈB„žwBèy¾BZU…B��ÈB„žwB%†ÑBT’dB��ÈB������������������������„žwBZU…B„žwB:’dÁT’dB:’äÁõy>BMU–aBMUÂ%†ÑA��ÈB%†ÑA����wž“BZU…B%†ÑA|a˜AÐó4B|aBœ$B����%†QB��ÈB%†QB��������ZU…B��������������������Ûy>B:’dA„žwBÛy¾AZU…B|aBZU…BÛy>B„žwB%†QBÛy>B%†QB������������%†QBÛy>BZU…B„žwB‰a˜BZU…BÐó´BZU…B��ÈB„žwB%†ÑBÛy>B%†ÑB����%†ÑAZU…B%†ÑA����������������������������%†ÑAÛy>B¡ç!B„žwB��HBZU…BG’€BZU…Bwž“B„žwBœ$BÛy>Bœ$B������������Ðó4BZU…BqÛB„žwB%†ÑA%†QBÆm«A|aBÆm«A:’äA%†ÑA:’dAqÛB|a˜@Ðó4B����_nB����_ŠB|a˜@$B:’dA³ª¦B:’äA³ª¦B|aB$B%†QB_ŠB„žwB_nBZU…BÐó4BZU…BÛy¾AZU…BÛy¾AMUÂ��������Ûy¾A%†QBMUB„žwB¬m+BZU…B:’dBZU…BMU…B„žwB‰a˜B%†QB¡ç¡B|aB¡ç¡B:’äA‰a˜B:’dAMU…B|a˜@:’dB����¬m+B����MUB|a˜@Ûy¾A:’dA¡ç¡BZU…B¡ç¡BMU¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dAgUBZU…BgUB����gUB|aB–aB%†QBõy>B„žwBT’dBZU…BqÛŽBZU…B������������������������œ$B%†QBwž“B„žwB_nBZU…BÐó4BZU…B„ž÷A„žwB%†ÑA%†QB„ž÷A¬m+B¡ç!B|aBG’€BMUBwž“B:’äAœ$B|a˜Aœ$B:’dAwž“B|a˜@_nB����Ðó4B����„ž÷A|a˜@%†ÑA:’dA������������������������õy>B��ÈBõy>B|a˜A%†QB|a˜@„žwB����qÛŽB����gUBZU…BZU…BZU…B��������%†ÑAZU…B%†ÑA|a˜A„ž÷A|a˜@¡ç!B����0 [B����G’€B|a˜@œ$B|a˜Aœ$BZU…Bœ$B����Ûy¾AZU…B †QB����¡ç¡BZU…B †QB����:’dAZU…BMUB���� †QBZU…BMUB���� †QBZU…BqÛŽB����Ðó´BZU…BqÛŽB����%†ÑAZU…Bœ$B����œ$BZU…B%†ÑA����%†ÑAZU…B0 [B������������³ª¦BZU…B0 [B����Ðó4B|a˜ÁqÛB:’äÁ%†ÑAMUÂÆm«AMUœ$BZU…B%†ÑA����%†ÑAZU…Bœ$BZU…B%†ÑA����œ$B����G’€B“îB0 [Bo’äB��HBJ ÛBÐó4B��ÈBÐó4BÐó´B��HB¡ç¡B0 [B‰a˜B_nBZU…B_nBT’dB��HBÛy>B����������������0 [Bo’äB��HB%†ÑB��HBèy¾B0 [B¹m«B_nB¡ç¡BG’€BqÛŽBG’€B„žwB_nB%†QB¡ç!B¬m+B_nBMUBG’€BÛy¾AG’€B:’dA_nB|a˜@0 [B������HB|aÁ��HB|a˜Á0 [B:’äÁ��������������������������HB|aB_nB:’äA_nB|a˜A0 [B|aA��HB|a˜@Ðó4B|a˜ÀÐó4B:’dÁ��HBÛy¾Á0 [B:’äÁG’€BMUÂ%†QB“îB%†QBMU¡ç!B“îB��HBo’äB0 [BJ ÛB_nB��ÈB_nBÐó´B0 [B¡ç¡B��HB‰a˜BÐó4BZU…BÐó4BT’dB0 [BÛy>B������������������HBo’äB0 [B%†ÑB0 [Bèy¾B��HB¹m«BÐó4B¡ç¡B¡ç!BqÛŽB¡ç!B„žwBÐó4B%†QBG’€B¬m+BÐó4BMUB¡ç!BÛy¾A¡ç!B:’dAÐó4B|a˜@��HB����0 [B|aÁ0 [B|a˜Á��HB:’äÁ������������������������0 [B|aBÐó4B:’äAÐó4B|a˜A��HB|aA0 [B|a˜@_nB|a˜À_nB:’dÁ0 [BÛy¾Á��HB:’äÁ¡ç!BMUÂ����������������|aA:’äA|aA|aB:’dA%†QBÛy¾AT’dBMUBT’dB¬m+B%†QB„žwB|aBqÛŽBMUB¡ç¡BMUBÐó´B|aBèy¾BÛy>B��������|aA|aB:’dAÛy>BÛy¾A%†QBMUB%†QB¬m+BÛy>B„žwBMUBqÛŽB:’äA¡ç¡B:’äAÐó´BMUBèy¾BÛy>Bèy¾BT’dBqÛŽB��ÈBMUBMUÂ������������������������Ûy>BZU…BMUB„žwBÛy¾A%†QB|a˜A|aB|a˜AÛy¾AÛy¾A:’dAMUB|a˜@Ûy>B����:’dB����qÛŽB|a˜@¡ç¡B:’dA¹m«B:’äA¹m«B¬m+B¡ç¡B%†QBqÛŽB„žwB:’dBZU…BÛy>BZU…B������������������������€���…���„���…���ˆ���…���Œ���…������…���”���…���˜���…���œ���…��� ���…���¤���…���¨���…���¬���…���°���…���´���…���¸���…���¼���…���À���…���Ä���…���È���…���Ì���…���Ð���…���Ô���…���Ø���…���Ü���…���à���…���ä���…���è���…���ì���…���ð���…���ô���…���ø���…���ü���…������…�����…�����…��� ��…�����…�����…�����…�����…��� ��…���$��…���(��…���,��…���0��…���4��…���8��…���<��…���@��…���D��…���H��…���L��…���P��…���T��…���X��…���\��…���`��…���d��…���h��…���l��…���p��…���t��…���x��…���|��…���€��…���„��…���ˆ��…���Œ��…�����…���”��…���˜��…���œ��…��� ��…���¤��…���¨��…���¬��…���°��…���´��…���¸��…���¼��…���À��…���Ä��…���È��…���Ì��…���Ð��…���Ô��…���Ø��…���Ü��…���à��…���ä��…���è��…���ì��…���ð��…���ô��…���ø��…���ü��…��� ���…���������$���…���0���…���<���…���H���…���T���…���`���…���l���…���x���…���„���…������…���œ���…���¨���…���´���…���À���…���Ì���…���Ø���…���ä���…���ð���…���ü���…�����…�����…��� ��…���,��…���8��…���D��…���P��…���\��…���h��…���t��…���€��…���Œ��…���˜��…���¤��…���°��…���¼��…���È��…���Ô��…���à��…���ì��…���ø��…�����…�����…�����…���(��…���4��…���@��…���L��…���X��…���d��…���p��…���|��…���ˆ��…���”��…��� ��…���¬��…���¸��…���Ä��…���Ð��…���Ü��…���è��…���ô��…������…��� ��…�����…���$��…���0��…���<��…���H��…���T��…���`��…���l��…���x��…���„��…�����…���œ��…���¨��…���´��…���À��…���Ì��…���Ø��…���ä��…���ð��…���ü��…�����…�����…��� ��…���,��…���8��…���D��…���P��…���\��…���h��…���t��…���€��…���Œ��…���˜��…���¨��…���°��…���¸��…���À��…���ä��…���ì��…���ô��…���ü��…�����…��� ��…�����…�����…���$��…���,��…���4��…���<��…���D��…���L��…���T��…���\��…���d��…���l��…���t��…���|��…���„��…���Œ��…���”��…���œ��…���¤��…���¬��…���´��…���¼��…���Ä��…���Ì��…���Ô��…���Ü��…���ä��…���ì��…���ô��…���ü��…�����…��� ��…�����…�����…���$��…���,��…���4��…���<��…���D��…���L��…���T��…���\��…���d��…���l��…���t��…���|��…���„��…���Œ��…���”��…���œ��…���¤��…���¬��…���´��…���¼��…���Ä��…���Ì��…���Ô��…���Ü��…���ä��…���ì��…���ô��…���ü��…�����…��� ��…�����…�����…���$��…���,��…���4��…���D��…���L��…���T��…���\��…���d��…���l��…���t��…���|��…���„��…���Œ��…���”��…���œ��…���¤��…���¬��…���´��…���¼��…���Ä��…���Ì��…���Ô��…���Ü��…���ä��…�����…��� ��…�����…�����…���$��…���,��…���4��…���<��…���D��…���L��…���T��…���d��…���l��…���t��…���|��…���„��…���¤��…���¬��…���´��…���¼��…���Ä��…���Ì��…���Ô��…���Ü��…���ä��…���ì��…���ô��…���ü��…��� ��…��� ��…��� ��…��� ��…���$ ��…���, ��…���4 ��…���< ��…���D ��…���L ��…���T ��…���\ ��…���d ��…���l ��…���t ��…���| ��…���„ ��…���Œ ��…���” ��…���œ ��…���¤ ��…���¬ ��…���´ ��…���¼ ��…���Ä ��…���Ì ��…���Ô ��…���Ü ��…���ä ��…���ì ��…���ô ��…���ü ��…��� ��…��� ��…��� ��…��� ��…���$ ��…���, ��…���D ��…���L ��…���T ��…���\ ��…���d ��…���l ��…���t ��…���| ��…���„ ��…���Œ ��…���” ��…���œ ��…���¤ ��…���¬ ��…���´ ��…���¼ ��…���Ä ��…���Ì ��…���Ô ��…���Ü ��…���ä ��…���ì ��…���.file�������þÿ��g�����������������_chars����������_ch32����������_ch33���(�������_ch34���4�������_ch35���@�������_ch36���L�������_ch37���X�������_ch38���d�������_ch39���p�������_ch40���|�������_ch41���ˆ�������_ch42���”�������_ch43��� �������_ch44���¬�������_ch45���¸�������_ch46���Ä�������_ch47���Ð�������_ch48���Ü�������_ch49���è�������_ch50���ô�������_ch51����������_ch52��� ������_ch53���������_ch54���$������_ch55���0������_ch56���<������_ch57���H������_ch58���T������_ch59���`������_ch60���l������_ch61���x������_ch62���„������_ch63���������_ch64���œ������_ch65���¨������_ch66���´������_ch67���À������_ch68���Ì������_ch69���Ø������_ch70���ä������_ch71���ð������_ch72���ü������_ch73���������_ch74���������_ch75��� ������_ch76���,������_ch77���8������_ch78���D������_ch79���P������_ch80���\������_ch81���h������_ch82���t������_ch83���€������_ch84���Œ������_ch85���˜������_ch86���¤������_ch87���°������_ch88���¼������_ch89���È������_ch90���Ô������_ch91���à������_ch92���ì������_ch93���ø������_ch94���������_ch95���������_ch96���������_ch97���(������_ch98���4������_ch99���@������_ch100��L������_ch101��X������_ch102��d������_ch103��p������_ch104��|������_ch105��ˆ������_ch106��”������_ch107�� ������_ch108��¬������_ch109��¸������_ch110��Ä������_ch111��Ð������_ch112��Ü������_ch113��è������_ch114��ô������_ch115���������_ch116�� ������_ch117��������_ch118��$������_ch119��0������_ch120��<������_ch121��H������_ch122��T������_ch123��`������_ch124��l������_ch125��x������_ch126��„������_ch127��������_ch32st�œ������_ch33st�¤������_ch34st�´������_ch35st�à������_ch36st��������_ch37st�������_ch38st�0������_ch39st�8������_ch40st�@������_ch41st�H������_ch42st�P������_ch43st�h������_ch44st�x������_ch45st�€������_ch46st�ˆ������_ch47st�������_ch48st�˜������_ch49st� ������_ch50st�¨������_ch51st�°������_ch52st�¸������_ch53st�È������_ch54st�Ð������_ch55st�Ø������_ch56st�è������_ch57st�ð������_ch58st�ø������_ch59st�������_ch60st�������_ch61st� ������_ch62st�0������_ch63st�8������_ch64st�H������_ch65st�X������_ch66st�p������_ch67st�ˆ������_ch68st�������_ch69st� ������_ch70st�À������_ch71st�Ø������_ch72st�è������_ch73st��������_ch74st�������_ch75st�������_ch76st�(������_ch77st�@������_ch78st�`������_ch79st�x������_ch80st�€������_ch81st�������_ch82st� ������_ch83st�¸������_ch84st�À������_ch85st�Ð������_ch86st�Ø������_ch87st��������_ch88st� ������_ch89st�0������_ch90st�@������_ch91st�`������_ch92st�€������_ch93st� ������_ch94st�À������_ch95st�Ð������_ch96st�Ø������_ch97st�è������_ch98st�ø������_ch99st� ������_ch100st ������_ch101st ������_ch102st( ������_ch103st8 ������_ch104stH ������_ch105stX ������_ch106sth ������_ch107stx ������_ch108st ������_ch109st˜ ������_ch110st° ������_ch111stÀ ������_ch112stÈ ������_ch113stØ ������_ch114stè ������_ch115stø ������_ch116st� ������_ch117st ������_ch118st ������_ch119st@ ������_ch120st` ������_ch121stp ������_ch122st€ ������_ch123st˜ ������_ch124st° ������_ch125st¸ ������_ch126stÐ ������_ch127stà ������_ch33st0ð ������_ch33st1� ������_ch34st0( ������_ch34st18 ������_ch35st0H ������_ch35st1X ������_ch35st2h ������_ch35st3x ������_ch36st0ˆ ������_ch36st1˜ ������_ch36st2À ������_ch37st0` ������_ch37st1€ ������_ch37st2� ������_ch38st0` ������_ch39st0p������_ch40st0€������_ch41st0à������_ch42st00������_ch42st1@������_ch42st2P������_ch43st0`������_ch43st1p������_ch44st0€������_ch45st0À������_ch46st0à������_ch47st0������_ch48st0 ������_ch49st0À������_ch50st0à������_ch51st0`������_ch52st0Ø������_ch52st1ð������_ch53st0�������_ch54st0 ������_ch55st0X������_ch55st1h������_ch56st0€������_ch57st0€������_ch58st0@������_ch58st1€������_ch59st0À������_ch59st1�������_ch60st0@������_ch61st0X������_ch61st1h������_ch62st0x������_ch63st0 ������_ch63st1 ������_ch64st0`������_ch64st1 ������_ch65st08������_ch65st1H������_ch65st2X������_ch66st0h������_ch66st1€������_ch66st2à������_ch67st0@������_ch68st0Ð������_ch68st1à������_ch69st0@������_ch69st1P������_ch69st2`������_ch69st3p������_ch70st0€������_ch70st1������_ch70st2 ������_ch71st0À������_ch71st1X������_ch72st0h������_ch72st1x������_ch72st2ˆ������_ch73st0˜������_ch74st0À������_ch75st0������_ch75st1 ������_ch75st20������_ch76st0@������_ch76st1P������_ch77st0`������_ch77st1p������_ch77st2€������_ch77st3������_ch78st0 ������_ch78st1°������_ch78st2À������_ch79st0à������_ch80st0ˆ������_ch80st1 ������_ch81st0�������_ch81st1¨������_ch82st0¸������_ch82st1à������_ch82st20������_ch83st0@������_ch84st0à������_ch84st1ð������_ch85st0� ������_ch86st0P ������_ch86st1` ������_ch87st0p ������_ch87st1€ ������_ch87st2 ������_ch87st3  ������_ch88st0° ������_ch88st1À ������_ch89st0Ð ������_ch89st1è ������_ch90st0ø ������_ch90st1!������_ch90st2!������_ch91st0(!������_ch91st18!������_ch91st2H!������_ch91st3X!������_ch92st0h!������_ch93st0x!������_ch93st1ˆ!������_ch93st2˜!������_ch93st3¨!������_ch94st0¸!������_ch94st1È!������_ch95st0à!������_ch96st0"������_ch96st1"������_ch97st00"������_ch97st1@"������_ch98st0°"������_ch98st1À"������_ch99st0@#����������!���°#����������+���À#����������5���@$����������?���à$����������I���%����������S��� %����������]���`%����������g���Ð%����������q���à%����������{��� &����������…���H&�������������`&����������™��� &����������£���È&����������­���Ø&����������·���è&����������Á���ø&����������Ë���'����������Õ��� '����������ß���`'����������é���˜'����������ó���À'����������ý����(������������ˆ(������������ (������������)����������%�� )����������/��)����������9�� )����������C��à)����������M��€*����������W��¨*����������a��À*����������k��ø*����������u��+������������+����������‰��(+����������“��8+������������H+����������§��X+����������±��h+����������»��x+����������Å��ˆ+����������Ï�� +����������Ù��Ð+����������ã��à+����������í��ð+����������÷���,������������`,���������� ���-������������P-������������`-����������)��À-����������3��`.����������=��À.����������G�� /����������Q��x/����������[�� /������.text����������������������������.data�������������`�������������.bss�����������������������������.rdata���������(0������������������e�� �������x��freeglut_stroke_mono_roman.c�_ch100st0�_ch100st1�_ch101st0�_ch102st0�_ch102st1�_ch103st0�_ch103st1�_ch104st0�_ch104st1�_ch105st0�_ch105st1�_ch106st0�_ch106st1�_ch107st0�_ch107st1�_ch107st2�_ch108st0�_ch109st0�_ch109st1�_ch109st2�_ch110st0�_ch110st1�_ch111st0�_ch112st0�_ch112st1�_ch113st0�_ch113st1�_ch114st0�_ch114st1�_ch115st0�_ch116st0�_ch116st1�_ch117st0�_ch117st1�_ch118st0�_ch118st1�_ch119st0�_ch119st1�_ch119st2�_ch119st3�_ch120st0�_ch120st1�_ch121st0�_ch121st1�_ch122st0�_ch122st1�_ch122st2�_ch123st0�_ch123st1�_ch123st2�_ch124st0�_ch125st0�_ch125st1�_ch125st2�_ch126st0�_ch126st1�_ch127st0�_ch127st1�_fgStrokeMonoRoman�/273 1264195965 500 500 100664 24511 ` L�����ÀA��ˆ����.text������������������������������� �0`.data��������������´���Ô2������`���@�`À.bss��������������������������������€�0À.rdata���������� 0��´��”6��������@�`@�����������������������������������������������������������������������������������������������������������������������������������$���0���<���H���T���`���l���x���„������œ���¨���´���À���Ì���Ø���ä���ð���ü������� ��,��8��D��P��\��h��t��€��Œ��˜��¤��°��¼��È��Ô��à��ì��ø��������(��4��@��L��X��d��p��|��ˆ��”�� ��¬��¸��Ä��Ð��Ü��è��ô����� ����$��0��<��H��T��`��l��x��„����œ��¨��´��À��Ì��Ø��ä��ð��ü������ ��,��8��D��P��\��h��t��€��Œ��Roman�������€���‰aC����%†ÑB����˜��‹ýÔA��� ��¥½MB���°��*úžB���À��Õi˜B���à�� &ÁB���ø��„ËB�����…ëYA�����v±<B��� ��">B���(��‰ÁmB���0��4‚ÂB���H��ª‚ÐA���X�� ‚ÉB���`��ÓÞÓA���h��¡6¤B���p��'"šB���x��…B���€��K›B���ˆ��éšB�����SV B���˜��—_›B���¨��œ“B���°��tšB���¸��ZU›B���È��-!”B���Ð��XÊÑA���Ø��/nÒA���è��“8£B���ø��4‚ÂB������“8£B�����IΓB�����Ǻ”B���(��#û B���8��ß@§B���P��*ú¨B���h��Ê’ªB���p��ž^œB���€��V}B��� ��†‰³B���¸��d,²B���È��ffªA���à��úþoB���è��E§žB���ð��S¥ŽB�����ÇkÂB��� ��±B���@��7©±B���X��ZU«B���`��V.°B���p��À»¤B���€��E§¡B���˜��¶äB��� ��1ù²B���°��“8£B���¸��7 ÉB���à��À»B������MŸB�����O~“B��� ��t8B���@��ÕiœB���`��½’9B���€��v´B��� ��¾ÐB���°��$§B���¸��¯4…B���È��íŒB���Ø��†Ø‰B���è��›†ŒB���ð��º ‰B���� ��ížB��� ��?÷B��� ��Á ŽB���( ��éæA���8 ��ôìB���H ��zB���X ��R¸šA���p ��‹ì÷B���x ��ÃB��� ��V}B���  ��›B���¨ ��]|B���¸ ��ûEB���È ��´HyB���Ø ��ÄBB���à ��oRŽB���ð ��_irB���� ��#û B��� �� šaB���@ ��-!„B���P ��´HwB���` ��œ„&B���x ��q=¾A��� ��Åà%B���˜ ��qŒ¶B���° ��ZU…B���À �������������Ð �����à ����� ����� �����( �����8 �����H �����X �����h �����x �����  �����@ �����` �� ���à ��"���@ �����P�� ���`�� ���À���������� �����0�����@�����P�����`����� �����À�����è����������� �����À�����@�����¸�����Ð�����à�����€�����8�����H�����`�����`����� �����`����� �����à����� �����8�����H�����X�����€�����������@�����€����������(�����8�����H�� ���`�� ���À����� �����°�� ���À����� �����0�����@�����P�����`�����p�����€����� �����8�����H�����X�����h�����x�� ��� �����ð���������������� �����0�������������@�����P�����`�����p�����€���������� �����À�����h�� ���€�����à�����ˆ�����˜�� ���À���������� �����À�����Ð�� ���à�����0 �����@ �����������������������������P �����` �����p �����€ ����� �����  �����° �����È �����Ø �����è �����ø �������������!�����!�����(!�����8!�����H!�����������������������������X!�����h!�����x!�����ˆ!�����˜!�����¨!�����À!�����è!�����ø!�����"����� "�����"����� "����� #�����#����� #����� $�����À$�����è$������%�����@%�����°%�����À%������&�����(&�����@&�����€&�����¨&�����¸&�����È&�����Ø&�����è&������'�����@'�����x'����� '�����à'�����h(�����€(�����ð(������)�����p)�����€)�����À)�����`*�����ˆ*����� *�����Ø*�����è*�����ø*���������������������+�����+�����(+�����8+�����H+�����X+�����h+�����€+�����°+�����À+�����Ð+�� ���à+�����@,�� ���à,�����0-�� ���@-����� -�� ���@.�� ��� .�� ����/�����X/�����€/��CVA��ÈBCVAMUBCVA|aA…ë A|a˜@CVA����&‘A|a˜@CVA|aA×£€@��ÈB×£€@ZU…B÷u(B��ÈB÷u(BZU…BI.%B“îBãÇþ@MUÂÀ»‹B“îB"BMUÂãÇþ@T’dBØA•BT’dBÍÌL@:’äAÀ»‹B:’äA7 åA“îB7 åA|a˜ÁZµ>B“îBZµ>B|a˜Á������������������������1ùŽB¹m«BÚwBèy¾BZµ>B��ÈB7 åA��ÈB4€eAèy¾Bq=š@¹m«Bq=š@‰a˜BvOAZU…B4€eA„žwBØð¾AT’dB‰ÁQBÛy>BÚwB¬m+Bs…B|aB1ùŽB:’äA1ùŽB:’dAÚwB|a˜@Zµ>B����7 åA����4€eA|a˜@q=š@:’dA &¸B��ÈB…Ë@��������������������#[ñA��ÈBðÅBÐó´BðÅB¡ç¡BÁ¹ BqÛŽBÄBËAZU…B $~AZU…B…Ë@‰a˜B…Ë@¹m«BMó1Aèy¾Be*¥A��ÈB#[ñA��ÈBðÅBèy¾BêWBÐó´B”‡ˆBÐó´BÛ¥Bèy¾B &¸B��ÈB¬ ’BMUBø~B:’äAÉöjB|a˜AÉöjB|aA”‡ˆB����Ó›B����óŸ®B|a˜@ &¸B:’dA &¸BÛy¾AÛ¥BMUB¬ ’BMUB��������žoÊBT’dBžoÊB„žwB“éÀBZU…B{c·BZU…BdÝ­B„žwBLW¤B%†QBK‘B:’äAÙ}|B:’dA`eVB|a˜@M0B����†8ÈA����‘xA|a˜@ÓÞ+A|aA)\¿@|a˜A)\¿@:’äAÓÞ+A|aB‘xA¬m+B1YCB„žwB`eVBZU…BªqiB‰a˜BªqiB¹m«B`eVBèy¾BM0B��ÈB¢4 Bèy¾BåPîA¹m«BåPîA‰a˜B¢4 B„žwBM0BÛy>BŇB:’dA4ÑšB|a˜@dÝ­B����“éÀB����žoÊB|a˜@žoÊB|aA{Ž@��ÈB{Ž@ZU…B8§#B“îB²ûAJ ÛBôì®Aèy¾BlxEA‰a˜B\ò@%†QB\ò@MUBlxEA|aAôì®A|aÁ²ûAÛy¾Á8§#BMUÂ����������������Ãõ¨@“îB]ÜlAJ ÛBížÂAèy¾BÕgB‰a˜BtB%†QBtBMUBÕgB|aAížÂA|aÁ]ÜlAÛy¾ÁÃõ¨@MUÂð'öAqÛŽBð'öA:’dAR¸Þ@T’dBåPZB:’äAåPZBT’dBR¸Þ@:’äA1YCB¹m«B1YCB����)\¿@¬m+B{c·B¬m+B9E’A|a˜@´YXA����ö( A|a˜@´YXA|aA9E’A|a˜@9E’A|a˜À´YXA:’dÁö( A|a˜Áö(ì@¬m+BH0ºB¬m+B����������������b¡QA|aA¤pA|a˜@b¡QA����éŽA|a˜@b¡QA|aA®ç@:’dÁ;ГB��ÈB��������¢4B��ÈB' šAèy¾BÓÞA¡ç¡B)\Ÿ@T’dB)\Ÿ@¬m+BÓÞA|a˜A' šA|a˜@¢4B����M,B����ªqeB|a˜@Å…B|a˜AKB¬m+BKBT’dBÅ…B¡ç¡BªqeBèy¾BM,B��ÈB¢4B��ÈB������������������������¸=A¡ç¡BÀªA¹m«Bœ„B��ÈBœ„B����é"A‰a˜Bé"A¡ç¡BÎoAÐó´BF¥Aèy¾BÖéA��ÈBÀAB��ÈB94gBèy¾Bi@zBÐó´BL¦†B¡ç¡BL¦†BqÛŽBi@zB„žwBð'TBÛy>B¤p­@����d,B��������������������|ahA��ÈBBÏ…B��ÈBMUB„žwBÛyRB„žwBT’xBT’dBBÏ…B%†QBZUB|aBZUB:’äABÏ…B:’dA%†eB|a˜@|a,B����ÛyæA����|ahA|a˜@¾0A|aA�� @|a˜AúþMB��ÈBìQx@MUBž–BMUBúþMB��ÈBúþMB����øxB��ÈB $fA��ÈBMóAT’dB $fA„žwB#[åAZU…B Ò+BZU…BÉödB„žwB”‡…B%†QB¬ B|aB¬ B:’äA”‡…B:’dAÉödB|a˜@ Ò+B����#[åA���� $fA|a˜@MóA|aA…›@|a˜A������������������������@äzB¹m«BØgBèy¾Bh³.B��ÈB ›B��ÈBôìžAèy¾Blx%A¡ç¡B\²@T’dB\²@MUBlx%A:’dAôìžA|a˜@ ›B����8§B����ÇËTB|a˜@@äzB:’dA8ø†B:’äA8ø†BMUB@äzBÛy>BÇËTBT’dB8§B„žwB ›B„žwBôìžAT’dBlx%AÛy>B\²@MUBtB��ÈB]ÜÄA����…ë±@��ÈBtB��ÈB��������¨FëA��ÈBûqAèy¾BXÊ%A¹m«BXÊ%A‰a˜BûqAZU…BI.ÅA„žwBãÇ.BT’dB‹ìgB%†QBu‡B¬m+BˆBMUBˆB|a˜Au‡B|aA»øzB|a˜@ÔAB����¨FëA����ûqA|a˜@XÊ%A|aA33³@|a˜A33³@MUBXÊ%A¬m+BêŸA%†QBƒ¯BT’dBBàTB„žwB»øzBZU…Bu‡B‰a˜Bu‡B¹m«B»øzBèy¾BÔAB��ÈB¨FëA��ÈB������������������������u‰BZU…B»ø~B%†QBBàXB¬m+B³»B|aBƒ¯ B|aBê§A¬m+BXÊ5A%†QB33Ó@ZU…B33Ó@qÛŽBXÊ5A¹m«Bê§Aèy¾Bƒ¯ B��ÈB³»B��ÈBBàXBèy¾B»ø~B¹m«Bu‰BZU…Bu‰B¬m+B»ø~B|a˜ABàXB|a˜@³»B����¨FóA����‹ý€A|a˜@XÊ5A:’dA��������vOaAZU…B¸A„žwBvOaAT’dBÀ–A„žwBvOaAZU…B������������������������vOaA|aA¸A|a˜@vOaA����À–A|a˜@vOaA|aA������������������������ñcOAZU…B33A„žwBñcOAT’dBXÊA„žwBñcOAZU…B������������������������XÊA|a˜@ñcOA����33A|a˜@ñcOA|aAXÊA|a˜@XÊA|a˜ÀñcOA:’dÁ33A|a˜ÁB€žB¹m«B ×C@¬m+BB€žB����ff¶@T’dBÔ¶BT’dBff¶@:’äAÔ¶B:’äA…ë1@¹m«BåðB¬m+B…ë1@��������������������R¸A‰a˜BR¸A¡ç¡BéRAÐó´BçŒAèy¾B¥½ÛA��ÈB‘:B��ÈBð'`Bèy¾B94sBÐó´B4 ƒB¡ç¡B4 ƒBqÛŽB94sB„žwBð'`BT’dB2÷BÛy>B2÷BMUB����������������2÷B|aAë�B|a˜@2÷B����a'B|a˜@2÷B|aA������������������������OÞDB%†QBðÅBT’dB#[ñAT’dBÄBËAÛy>BÄBËA¬m+B#[ñAMUBðÅBMUBOÞDB|aBOÞDBT’dBOÞDB|aBêWBMUBø~BMUB”‡ˆB¬m+B”‡ˆBÛy>Bø~B„žwBêWBqÛŽBðÅB‰a˜BÁ¹ B‰a˜Be*¥AqÛŽBMó1A„žwB…Ë@Ûy>B…Ë@¬m+BMó1A:’äAe*¥A|a˜AÁ¹ B:’dAðÅB:’dAêWB|a˜A|a"B��ÈB�� @����|a"B��ÈB‰aB����I†AMUBBÏ€BMUBR¸6A��ÈBR¸6A������������R¸6A��ÈBÀYB��ÈB4 ‰Bèy¾BL¦’BÐó´Bd,œB¡ç¡Bd,œBqÛŽBL¦’B„žwB4 ‰BT’dBÀYB%†QB������������������������R¸6A%†QBÀYB%†QB4 ‰BÛy>BL¦’B¬m+Bd,œBMUBd,œB|a˜AL¦’B|aA4 ‰B|a˜@ÀYB����R¸6A��������������������]-œB‰a˜BE§’B¹m«B+6Bèy¾B²YB��ÈBôì B��ÈB*©ÍAèy¾BlxA¹m«BÀ6A‰a˜B¸Õ@„žwB¸Õ@|aBÀ6AÛy¾AlxA:’dA*©ÍA|a˜@ôì B����²YB����+6B|a˜@E§’B:’dA]-œBÛy¾A)\?A��ÈB)\?A����)\?A��ÈBW,5B��ÈBåPnBèy¾B¯4ŠB¹m«BǺ“B‰a˜Bß@B„žwBß@B|aBǺ“BÛy¾A¯4ŠB:’dAåPnB|a˜@W,5B����)\?A����R¸6A��ÈBR¸6A����R¸6A��ÈBL¦’B��ÈBR¸6A%†QB‘FB%†QBR¸6A����L¦’B����R¸6A��ÈBR¸6A����R¸6A��ÈBL¦’B��ÈBR¸6A%†QB‘FB%†QB����������������*úœB‰a˜Bt“B¹m«Bãg€Bèy¾BL·ZB��ÈBކB��ÈB]ÜÐAèy¾BŸ«„A¹m«B&=A‰a˜B…ëá@„žwB…ëá@|aB&=AÛy¾AŸ«„A:’dA]ÜÐA|a˜@ކB����L·ZB����ãg€B|a˜@t“B:’dA*úœBÛy¾A*úœB|aBL·ZB|aB*úœB|aBR¸6A��ÈBR¸6A����d,œB��ÈBd,œB����R¸6A%†QBd,œB%†QBÂ-A��ÈBÂ-A����������������������������ÛyHB��ÈBÛyHBÛy¾A¬m5B|aA|a"B|a˜@:’øA����|a¬A����|a@A|a˜@|aè@|aA�� @Ûy¾A�� @MUBáz4A��ÈBáz4A����¶ä›B��ÈBáz4AMUB¦[ BT’dB¶ä›B����Há:A��ÈBHá:A����Há:A����S¥‰B����Â-A��ÈBÂ-A����Â-A��ÈB ÒCB����Û®B��ÈB ÒCB����Û®B��ÈBÛ®B����q=2A��ÈBq=2A����q=2A��ÈB›B����›B��ÈB›B��������������������à> B��ÈBMÊAèy¾B†8|A¹m«BÈ0A‰a˜B®Ç@„žwB®Ç@|aBÈ0AÛy¾A†8|A:’dAMÊA|a˜@à> B����žoWB����ˆ}B|a˜@;БB:’dASV›BÛy¾AjܤB|aBjܤB„žwBSV›B‰a˜B;БB¹m«Bˆ}Bèy¾BžoWB��ÈBà> B��ÈBš™AA��ÈBš™AA������������š™AA��ÈBÔ[B��ÈB]|ŠBèy¾Bu”BÐó´BˆB¡ç¡BˆBZU…Bu”BT’dB]|ŠB%†QBÔ[BÛy>Bš™AAÛy>B����������������P|B��ÈBãÇÂAèy¾BI.mA¹m«B‹ý A‰a˜Bš™©@„žwBš™©@|aB‹ý AÛy¾AI.mA:’dAãÇÂA|a˜@P|B����­SB����ˆÅyB|a˜@óîB:’dA u™BÛy¾A#û¢B|aB#û¢B„žwB u™B‰a˜BóîB¹m«BˆÅyBèy¾B­SB��ÈBP|B��ÈBß @B|a˜A u™B|aÁHá:A��ÈBHá:A����������������������������Há:A��ÈBþ%ZB��ÈBS¥‰Bèy¾Bk+“BÐó´Bƒ±œB¡ç¡Bƒ±œBqÛŽBk+“B„žwBS¥‰BT’dBþ%ZB%†QBHá:A%†QBŸ 4B%†QBƒ±œB����ZU•B¹m«B*I‚Bèy¾B¬mKB��ÈBÛyþA��ÈB¾0ŒAèy¾B���A¹m«B���A‰a˜B¾0LAZU…B¾0ŒA„žwB|aØAT’dBÛy^BÛy>B*I‚B¬m+BBÏ‹B|aBZU•B:’äAZU•B:’dA*I‚B|a˜@¬mKB����ÛyþA����¾0ŒA|a˜@���A:’dAðÅB��ÈBðÅB����= @��ÈB¬ ŠB��ÈB×£8A��ÈB×£8A:’äAKj‚A:’dA ›ÎA|a˜@r B����rŠFB����¯B|a˜@½ã’B:’dAÕiœB:’äAÕiœB��ÈB= @��ÈB Ò!B����ÛB��ÈB Ò!B����{@��ÈBj<ÐA����#[GB��ÈBj<ÐA����#[GB��ÈBL“B����ŒêÂB��ÈBL“B������ @��ÈBZUŠB����ZUŠB��ÈB�� @����\Â?��ÈB÷uB%†QB÷uB����Çk›B��ÈB÷uB%†QBZUŠB��ÈB�� @������ @��ÈBZUŠB��ÈB�� @����ZUŠB����Ãõø@“îBÃõø@MUŸ«HA“îBŸ«HAMUÂÃõø@“îBt$B“îBÃõø@MUÂt$BMUÂHáº@��ÈBn‘B:’dÁ¬ B“îB¬ BMUÂÜB“îBÜBMUÂ{Ž@“îBÜB“îB{Ž@MUÂÜBMUÂM0BJ ÛB)\¿@¬m+BM0BJ ÛBLW¤B¬m+B��������ÍÌŒ¿MUÂòRÏBMUÂòRÏB:’äÁÍÌŒ¿:’äÁÍÌŒ¿MUÂmB��ÈB[ScBqÛŽBmB��ÈB{âAèy¾B[ScBqÛŽB¦JBZU…B¦JB����¦JB%†QB-2YB„žwBÎ3BZU…BêóAZU…BÁ¹§A„žwB7A%†QBÂÕ@|aBÂÕ@:’äA7A:’dAÁ¹§A|a˜@êóA����Î3B����-2YB|a˜@¦JB:’dAö( A��ÈBö( A����ö( A%†QB9E’A„žwB÷uÞAZU…BŠ_(BZU…BéwNB„žwBbtB%†QBI΃B|aBI΃B:’äAbtB:’dAéwNB|a˜@Š_(B����÷uÞA����9E’A|a˜@ö( A:’dA����������������ϦzB%†QBVŽTB„žwB÷u.BZU…BÑ¢êAZU…BržA„žwBª‚$A%†QB×£°@|aB×£°@:’äAª‚$A:’dAržA|a˜@Ñ¢êA����÷u.B����VŽTB|a˜@ϦzB:’dA±!wB��ÈB±!wB����±!wB%†QB7 QB„žwBØð*BZU…B“˜ãAZU…BÕg—A„žwB/nA%†QBáz”@|aBáz”@:’äA/nA:’dAÕg—A|a˜@“˜ãA����Øð*B����7 QB|a˜@±!wB:’dA����������������= ·@|aBœs{B|aBœs{BÛy>BmghBT’dB#[UB„žwBÄB/BZU…Bj<ìAZU…B¬  A„žwBݵ'A%†QB= ·@|aB= ·@:’äAݵ'A:’dA¬  A|a˜@j<ìA����ÄB/B����#[UB|a˜@œs{B:’dA������������������������ÎB��ÈBÞêA��ÈB ÒAèy¾B‚soA¡ç¡B‚soA����{.?ZU…BŸ BZU…B��������øzBZU…BøzB|aÁÉöfBÛy¾ÁêSB:’äÁ Ò-BMUÂ#[éAMUÂe*A:’äÁ��������øzB%†QBêSB„žwB Ò-BZU…B#[éAZU…Be*A„žwBMó!A%†QB…«@|aB…«@:’äAMó!A:’dAe*A|a˜@#[éA���� Ò-B����êSB|a˜@øzB:’dAš™A��ÈBš™A����š™AÛy>Bê¿A„žwBT£BZU…BãÇ>BZU…BBàdB„žwB‹ìwBÛy>B‹ìwB������������ìQ A��ÈBª‚lAèy¾B´YœA��ÈBª‚lA%†ÑBìQ A��ÈBª‚lAZU…Bª‚lA������������΋A��ÈB-2±Aèy¾BŒJ×A��ÈB-2±A%†ÑB΋A��ÈB������������������������-2±AZU…B-2±A:’dÁ΋A:’äÁ@¤û@MUÂázÔ¿MUš™A��ÈBš™A����BàdBZU…Bš™A|a˜AI.åA|aB‹ìwB����ìQ A��ÈBìQ A����š™AZU…Bš™A������������š™AÛy>Bê¿A„žwBT£BZU…BãÇ>BZU…BBàdB„žwB‹ìwBÛy>B‹ìwB������������‹ìwBÛy>Bˆ˜B„žwB¼”«BZU…Bé&ÈBZU…B33ÛB„žwBX¹äBÛy>BX¹äB����HáAZU…BHáA����������������������������HáAÛy>BÁ¹»A„žwB?õBZU…BÎ=BZU…B-2cB„žwBw>vBÛy>Bw>vB������������åPæAZU…B' šA„žwBÓÞA%†QB)\Ÿ@|aB)\Ÿ@:’äAÓÞA:’dA' šA|a˜@åPæA����M,B����`eRB|a˜@Ù}xB:’dAÅ…B:’äAÅ…B|aBÙ}xB%†QB`eRB„žwBM,BZU…BåPæAZU…B)\AZU…B)\AMUÂ��������)\A%†QBÓÞ—A„žwB‘äAZU…BW,+BZU…B¶DQB„žwB/]wB%†QB¯4…B|aB¯4…B:’äA/]wB:’dA¶DQB|a˜@W,+B����‘äA����ÓÞ—A|a˜@)\A:’dA}îwBZU…B}îwBMUÂ}îwB%†QBÖQB„žwB¥½+BZU…B-2åAZU…Bo™A„žwBb¡A%†QBHáš@|aBHáš@:’äAb¡A:’dAo™A|a˜@-2åA����¥½+B����ÖQB|a˜@}îwB:’dA)\AZU…B)\A����)\A|aBçŒcA%†QB2÷½A„žwBøBZU…B†8>BZU…B������������������������òRdB%†QB¨FQB„žwB"BZU…Bû½AZU…BñcA„žwBff–@%†QBñcA¬m+B·â—A|aBI.+BMUB¨FQB:’äAòRdB|a˜AòRdB:’dA¨FQB|a˜@"B����û½A����ñcA|a˜@ff–@:’dA������������������������6mA��ÈB6mA|a˜Ah³œA|a˜@&äèA����rŠB����q= ?ZU…BB~BZU…B��������)\AZU…B)\A|a˜AçŒcA|a˜@2÷½A����' B����†8>B|a˜@/]wB|a˜A/]wBZU…B/]wB����ffæ?ZU…B¡øòA����ˆÅkBZU…B¡øòA������ @ZU…B|a¬A����|a"BZU…B|a¬A����|a"BZU…BT’nB����‰aBZU…BT’nB����ázÔ?ZU…Bü)XB����ü)XBZU…BázÔ?����ûÑ@ZU…B€ˆ B������������·Ñ~BZU…B€ˆ B����BàÌA|a˜Áƒ¯€A:’äÁûÑ@MUÂffæ?MU´HcBZU…B{Ž@����{Ž@ZU…B´HcBZU…B{Ž@����´HcB����„ùA“îB[S­Ao’äBû:‡AJ ÛB9EBA��ÈB9EBAÐó´Bû:‡A¡ç¡B[S­A‰a˜BºkÓAZU…BºkÓAT’dBû:‡AÛy>B����������������[S­Ao’äBû:‡A%†ÑBû:‡Aèy¾B[S­A¹m«BºkÓA¡ç¡B„ùAqÛŽB„ùA„žwBºkÓA%†QBö(ì@¬m+BºkÓAMUB„ùAÛy¾A„ùA:’dAºkÓA|a˜@[S­A����û:‡A|aÁû:‡A|a˜Á[S­A:’äÁ������������������������û:‡A|aBºkÓA:’äAºkÓA|a˜A[S­A|aAû:‡A|a˜@9EBA|a˜À9EBA:’dÁû:‡AÛy¾Á[S­A:’äÁ„ùAMUÂ×£8A“îB×£8AMUÂHáA“îBb¡•Ao’äBÁ¹»AJ ÛB ÒáA��ÈB ÒáAÐó´BÁ¹»A¡ç¡Bb¡•A‰a˜B_AZU…B_AT’dBÁ¹»AÛy>B����������������b¡•Ao’äBÁ¹»A%†ÑBÁ¹»Aèy¾Bb¡•A¹m«B_A¡ç¡BHáAqÛŽBHáA„žwB_A%†QB?õB¬m+B_AMUBHáAÛy¾AHáA:’dA_A|a˜@b¡•A����Á¹»A|aÁÁ¹»A|a˜Áb¡•A:’äÁ������������������������Á¹»A|aB_A:’äA_A|a˜Ab¡•A|aAÁ¹»A|a˜@ ÒáA|a˜À ÒáA:’dÁÁ¹»AÛy¾Áb¡•A:’äÁHáAMUÂ����������������Há:@:’äAHá:@|aB Òõ@%†QBF¥‰AT’dBÖÕAT’dBaB%†QB94]B|aBL¦BMUB|²”BMUB«¾§B|aBÃD±BÛy>B��������Há:@|aB Òõ@Ûy>BF¥‰A%†QBÖÕA%†QBaBÛy>B94]BMUBL¦B:’äA|²”B:’äA«¾§BMUBÃD±BÛy>BÃD±BT’dB%†QB��ÈB:’dAMUÂ������������������������:’äAZU…B:’dA„žwB|a˜@%†QB����|aB����Ûy¾A|a˜@:’dA:’dA|a˜@:’äA����|aB����%†QB|a˜@„žwB:’dAZU…B:’äAZU…B¬m+B„žwB%†QB%†QB„žwB|aBZU…B:’äAZU…B������������������������€���…���„���…���ˆ���…���Œ���…������…���”���…���˜���…���œ���…��� ���…���¤���…���¨���…���¬���…���°���…���´���…���¸���…���¼���…���À���…���Ä���…���È���…���Ì���…���Ð���…���Ô���…���Ø���…���Ü���…���à���…���ä���…���è���…���ì���…���ð���…���ô���…���ø���…���ü���…������…�����…�����…��� ��…�����…�����…�����…�����…��� ��…���$��…���(��…���,��…���0��…���4��…���8��…���<��…���@��…���D��…���H��…���L��…���P��…���T��…���X��…���\��…���`��…���d��…���h��…���l��…���p��…���t��…���x��…���|��…���€��…���„��…���ˆ��…���Œ��…�����…���”��…���˜��…���œ��…��� ��…���¤��…���¨��…���¬��…���°��…���´��…���¸��…���¼��…���À��…���Ä��…���È��…���Ì��…���Ð��…���Ô��…���Ø��…���Ü��…���à��…���ä��…���è��…���ì��…���ð��…���ô��…���ø��…���ü��…������…��������� ���…���,���…���8���…���D���…���P���…���\���…���h���…���t���…���€���…���Œ���…���˜���…���¤���…���°���…���¼���…���È���…���Ô���…���à���…���ì���…���ø���…�����…�����…�����…���(��…���4��…���@��…���L��…���X��…���d��…���p��…���|��…���ˆ��…���”��…��� ��…���¬��…���¸��…���Ä��…���Ð��…���Ü��…���è��…���ô��…������…��� ��…�����…���$��…���0��…���<��…���H��…���T��…���`��…���l��…���x��…���„��…�����…���œ��…���¨��…���´��…���À��…���Ì��…���Ø��…���ä��…���ð��…���ü��…�����…�����…��� ��…���,��…���8��…���D��…���P��…���\��…���h��…���t��…���€��…���Œ��…���˜��…���¤��…���°��…���¼��…���È��…���Ô��…���à��…���ì��…���ø��…�����…�����…�����…���(��…���4��…���@��…���L��…���X��…���d��…���p��…���|��…���ˆ��…���”��…���¤��…���¬��…���´��…���¼��…���Ä��…���Ì��…���Ô��…���Ü��…���ä��…���ì��…���ô��…���ü��…�����…��� ��…�����…�����…���$��…���,��…���4��…���<��…���D��…���L��…���T��…���\��…���d��…���l��…���t��…���|��…���„��…���Œ��…���”��…���œ��…���¤��…���¬��…���´��…���¼��…���Ä��…���Ì��…���Ô��…���Ü��…���ä��…���ì��…���ô��…���ü��…�����…��� ��…�����…�����…���$��…���,��…���4��…���<��…���D��…���L��…���T��…���\��…���d��…���l��…���t��…���|��…���„��…���Œ��…���”��…���œ��…���¤��…���¬��…���´��…���¼��…���Ä��…���Ì��…���Ô��…���Ü��…���ä��…���ì��…���ô��…���ü��…�����…��� ��…�����…���$��…���,��…���4��…���<��…���D��…���L��…���T��…���\��…���d��…���l��…���t��…���|��…���„��…���Œ��…���”��…���œ��…���¤��…���¬��…���´��…���¼��…���Ä��…���ä��…���ì��…���ô��…���ü��…�����…��� ��…�����…�����…���$��…���,��…���4��…���D��…���L��…���T��…���\��…���d��…���„��…���Œ��…���”��…���œ��…���¤��…���¬��…���´��…���¼��…���Ä��…���Ì��…���Ô��…���Ü��…���ä��…���ì��…���ô��…���ü��…��� ��…��� ��…��� ��…��� ��…���$ ��…���, ��…���4 ��…���< ��…���D ��…���L ��…���T ��…���\ ��…���d ��…���l ��…���t ��…���| ��…���„ ��…���Œ ��…���” ��…���œ ��…���¤ ��…���¬ ��…���´ ��…���¼ ��…���Ä ��…���Ì ��…���Ô ��…���Ü ��…���ä ��…���ì ��…���ô ��…���ü ��…��� ��…��� ��…���$ ��…���, ��…���4 ��…���< ��…���D ��…���L ��…���T ��…���\ ��…���d ��…���l ��…���t ��…���| ��…���„ ��…���Œ ��…���” ��…���œ ��…���¤ ��…���¬ ��…���´ ��…���¼ ��…���Ä ��…���Ì ��…���.file�������þÿ��g�����������������_chars����������_ch32����������_ch33���$�������_ch34���0�������_ch35���<�������_ch36���H�������_ch37���T�������_ch38���`�������_ch39���l�������_ch40���x�������_ch41���„�������_ch42����������_ch43���œ�������_ch44���¨�������_ch45���´�������_ch46���À�������_ch47���Ì�������_ch48���Ø�������_ch49���ä�������_ch50���ð�������_ch51���ü�������_ch52���������_ch53���������_ch54��� ������_ch55���,������_ch56���8������_ch57���D������_ch58���P������_ch59���\������_ch60���h������_ch61���t������_ch62���€������_ch63���Œ������_ch64���˜������_ch65���¤������_ch66���°������_ch67���¼������_ch68���È������_ch69���Ô������_ch70���à������_ch71���ì������_ch72���ø������_ch73���������_ch74���������_ch75���������_ch76���(������_ch77���4������_ch78���@������_ch79���L������_ch80���X������_ch81���d������_ch82���p������_ch83���|������_ch84���ˆ������_ch85���”������_ch86��� ������_ch87���¬������_ch88���¸������_ch89���Ä������_ch90���Ð������_ch91���Ü������_ch92���è������_ch93���ô������_ch94����������_ch95��� ������_ch96���������_ch97���$������_ch98���0������_ch99���<������_ch100��H������_ch101��T������_ch102��`������_ch103��l������_ch104��x������_ch105��„������_ch106��������_ch107��œ������_ch108��¨������_ch109��´������_ch110��À������_ch111��Ì������_ch112��Ø������_ch113��ä������_ch114��ð������_ch115��ü������_ch116��������_ch117��������_ch118�� ������_ch119��,������_ch120��8������_ch121��D������_ch122��P������_ch123��\������_ch124��h������_ch125��t������_ch126��€������_ch127��Œ������_ch32st�˜������_ch33st� ������_ch34st�°������_ch35st�À������_ch36st�à������_ch37st�ø������_ch38st�������_ch39st�������_ch40st� ������_ch41st�(������_ch42st�0������_ch43st�H������_ch44st�X������_ch45st�`������_ch46st�h������_ch47st�p������_ch48st�x������_ch49st�€������_ch50st�ˆ������_ch51st�������_ch52st�˜������_ch53st�¨������_ch54st�°������_ch55st�¸������_ch56st�È������_ch57st�Ð������_ch58st�Ø������_ch59st�è������_ch60st�ø������_ch61st��������_ch62st�������_ch63st�������_ch64st�(������_ch65st�8������_ch66st�P������_ch67st�h������_ch68st�p������_ch69st�€������_ch70st� ������_ch71st�¸������_ch72st�È������_ch73st�à������_ch74st�è������_ch75st�ð������_ch76st�������_ch77st� ������_ch78st�@������_ch79st�X������_ch80st�`������_ch81st�p������_ch82st�€������_ch83st�˜������_ch84st� ������_ch85st�°������_ch86st�¸������_ch87st�à������_ch88st��������_ch89st�������_ch90st� ������_ch91st�@������_ch92st�`������_ch93st�€������_ch94st� ������_ch95st�°������_ch96st�¸������_ch97st�È������_ch98st�Ø������_ch99st�è������_ch100stð������_ch101st� ������_ch102st ������_ch103st ������_ch104st( ������_ch105st8 ������_ch106stH ������_ch107stX ������_ch108stp ������_ch109stx ������_ch110st ������_ch111st  ������_ch112st¨ ������_ch113st¸ ������_ch114stÈ ������_ch115stØ ������_ch116stà ������_ch117stð ������_ch118st� ������_ch119st ������_ch120st@ ������_ch121stP ������_ch122st` ������_ch123stx ������_ch124st ������_ch125st˜ ������_ch126st° ������_ch127stÀ ������_ch33st0Ð ������_ch33st1à ������_ch34st0 ������_ch34st1 ������_ch35st0( ������_ch35st18 ������_ch35st2H ������_ch35st3X ������_ch36st0h ������_ch36st1x ������_ch36st2  ������_ch37st0@ ������_ch37st1` ������_ch37st2à ������_ch38st0@ ������_ch39st0P������_ch40st0`������_ch41st0À������_ch42st0������_ch42st1 ������_ch42st20������_ch43st0@������_ch43st1P������_ch44st0`������_ch45st0 ������_ch46st0À������_ch47st0è������_ch48st0�������_ch49st0 ������_ch50st0À������_ch51st0@������_ch52st0¸������_ch52st1Ð������_ch53st0à������_ch54st0€������_ch55st08������_ch55st1H������_ch56st0`������_ch57st0`������_ch58st0 ������_ch58st1`������_ch59st0 ������_ch59st1à������_ch60st0 ������_ch61st08������_ch61st1H������_ch62st0X������_ch63st0€������_ch63st1�������_ch64st0@������_ch64st1€������_ch65st0������_ch65st1(������_ch65st28������_ch66st0H������_ch66st1`������_ch66st2À������_ch67st0 ������_ch68st0°������_ch68st1À������_ch69st0 ������_ch69st10������_ch69st2@������_ch69st3P������_ch70st0`������_ch70st1p������_ch70st2€������_ch71st0 ������_ch71st18������_ch72st0H������_ch72st1X������_ch72st2h������_ch73st0x������_ch74st0 ������_ch75st0ð������_ch75st1�������_ch75st2������_ch76st0 ������_ch76st10������_ch77st0@������_ch77st1P������_ch77st2`������_ch77st3p������_ch78st0€������_ch78st1������_ch78st2 ������_ch79st0À������_ch80st0h������_ch80st1€������_ch81st0à������_ch81st1ˆ������_ch82st0˜������_ch82st1À������_ch82st2������_ch83st0 ������_ch84st0À������_ch84st1Ð������_ch85st0à������_ch86st00 ������_ch86st1@ ������_ch87st0P ������_ch87st1` ������_ch87st2p ������_ch87st3€ ������_ch88st0 ������_ch88st1  ������_ch89st0° ������_ch89st1È ������_ch90st0Ø ������_ch90st1è ������_ch90st2ø ������_ch91st0!������_ch91st1!������_ch91st2(!������_ch91st38!������_ch92st0H!������_ch93st0X!������_ch93st1h!������_ch93st2x!������_ch93st3ˆ!������_ch94st0˜!������_ch94st1¨!������_ch95st0À!������_ch96st0è!������_ch96st1ø!������_ch97st0"������_ch97st1 "������_ch98st0"������_ch98st1 "������_ch99st0 #�������������#����������&��� #����������0��� $����������:���À$����������D���è$����������N����%����������X���@%����������b���°%����������l���À%����������v����&����������€���(&����������Š���@&����������”���€&����������ž���¨&����������¨���¸&����������²���È&����������¼���Ø&����������Æ���è&����������Ð����'����������Ú���@'����������ä���x'����������î��� '����������ø���à'������������h(���������� ��€(������������ð(���������� ���)����������*��p)����������4��€)����������>��À)����������H��`*����������R��ˆ*����������\�� *����������f��Ø*����������p��è*����������z��ø*����������„��+����������Ž��+����������˜��(+����������¢��8+����������¬��H+����������¶��X+����������À��h+����������Ê��€+����������Ô��°+����������Þ��À+����������è��Ð+����������ò��à+����������ü��@,������������à,������������0-������������@-����������$�� -����������.��@.����������8�� .����������B���/����������L��X/����������V��€/������.text����������������������������.data�������������`�������������.bss�����������������������������.rdata���������0������������������`���������o��freeglut_stroke_roman.c�_ch100st0�_ch100st1�_ch101st0�_ch102st0�_ch102st1�_ch103st0�_ch103st1�_ch104st0�_ch104st1�_ch105st0�_ch105st1�_ch106st0�_ch106st1�_ch107st0�_ch107st1�_ch107st2�_ch108st0�_ch109st0�_ch109st1�_ch109st2�_ch110st0�_ch110st1�_ch111st0�_ch112st0�_ch112st1�_ch113st0�_ch113st1�_ch114st0�_ch114st1�_ch115st0�_ch116st0�_ch116st1�_ch117st0�_ch117st1�_ch118st0�_ch118st1�_ch119st0�_ch119st1�_ch119st2�_ch119st3�_ch120st0�_ch120st1�_ch121st0�_ch121st1�_ch122st0�_ch122st1�_ch122st2�_ch123st0�_ch123st1�_ch123st2�_ch124st0�_ch125st0�_ch125st1�_ch125st2�_ch126st0�_ch126st1�_ch127st0�_ch127st1�_fgStrokeRoman� /298 1264195966 500 500 100664 5825 ` L�����¦��-�����.text����������� ��´���x ������k��� �P`.data�������������������������������@�0À.bss������������@�������������������€�`À.rdata����������´��Ä ��������������@�0@U‰åV‰ÖS9¸���t59°¬���t?9°°���tI9°´���tY‹˜À���…Ût‰Ø‰òèÆÿÿÿ‹…Ûuñ[^]Ã9°¬���Ç€¸�������uÁ9°°���Ç€¬�������u·9°´���Ç€°�������u­¶����Ç€´�������ë›t&�U‰åÇ��������Ç�������Ç�������Ç �������Ç�������Ç�������Ç�������Ç�������Ç �������Ç$�������Ç(�������Ç,�������]Ãv�¡���U‰å‹U…Àuë ‹�…Àt9P uõ]v�Ãë U‰å‹EÇ�����Ç@����]Ãt&�¼'����U‰å‹M‹E ‹Q…Òt‰‰PÇ�����‰A]ÃÇ@����‰Ç�����‰A]ö����¿����U‰å‹E S‹M‹…Òt‹X‰Z‹X…Ût‰9t9At[]Ãt&�‹@‰A[]ô&����‹‰ëÝv�¼'����U‰å‹E‹1À…Òt f‹ƒÀ…Òu÷]Ãt&�U‰å‹U ‹ES‹]…Ò‰t‹J‰B…ɉHt‰[]É[]ö����‹K‰Cëá´&����U‰åWVSƒì‹u‹} …öt=…ÿt9€=����tU‹E‹˜À���…Ûu ë‹…Ût‰t$‰$ÿ×€>�tìƒÄ[^_]Ãt&�ÇD$����ÇD$���Ç$T���è����€=����u«ÇD$€���Ç$”���è����ë•t&�U‰åSƒì‹E ‹U€8�u‹H‹Z;t‰D$ÇD$à��‰$è@ÿÿÿƒÄ[]ÃÆ�‰PƒÄ[]ô&����¼'����U‰åƒì‹E ‹U€8�u‹J ;Ht‰D$ÇD$0��‰$èóþÿÿÉÃÆ�‰PÉô&����U‰åWVSƒì‹u ‹}…öt-…ÿt)‹����…Ûuë‹…Ût‰t$‰$ÿ×€>�tìƒÄ[^_]ÃÇD$Ý���ÇD$ì���Ç$T���è����ë¹fU‰åƒì(E‰EôEð‰D$ÆEð�Ç$à��è}ÿÿÿ€}ðÀ÷Ð#EôÉÃU‰åƒì(‹EÆEð�Ç$0��‰EôEð‰D$èMÿÿÿ€}ðÀ÷Ð#EôÉÃU‰åWVSƒì‹]…Ûu é��‰$èãÿÿÿ‹ƒÀ���…Àu€���‹=���…öt ‰$è����ÿÖ‰<$è����‹ƒ¼���…À„ƒ���‹…Òt‹K‰J‹K…Ét‰;˜À���„”���;˜Ä���„œ���‹ƒ¸���…Àt‰$è����1ÀÇDƒH����ƒÀƒøuð‰$è����‰$è����9���tƒÄ[^_]ÃÇ�������ƒÄ[^_]Ë…Òt‹C‰B‹C…Àt‰;����tU;���u…‹C£���éxÿÿÿ‹;˜Ä���‰À���…dÿÿÿ‰ˆÄ���éYÿÿÿÇD$'��ÇD$8��Ç$T���è����éÑþÿÿ‹£����ë¢t&�¼'����U‰åVSƒì‹]…Û„R��‹5����…ötv�‰ð‰ÚèGúÿÿ‹6…öuñ‹���…Òt5´&����‹B…Àuë´&����‹�…Àt;XuõÇ@����‹�…Àuî‹…ÒuÒ‹C…Àt>‹5���‰���ÿЉ5���ë(t&�;stK‹F…Àt‰$è����ÇF����‰4$è����‹s…öt.‹…Àt‹V‰P‹F…Àt‹‰;suº‹;s‰Cuµ‹F‰Cë­‹C89���„���‰$è¡ýÿÿ‹…Àt‹S‰P‹S…Òt‰;���t@; ���t.9���t‰]ƒÄ[^]é����‰]Ç�������ƒÄ[^]é����‹C£ ���ëÈ‹£���ë·ÇD$h��ÇD$x��Ç$T���è����éþÿÿÇ$����è����‹C8é]ÿÿÿ¶����U‰åSƒì‹���…Ûuë];���tK‰$è����‹���…ÛtC‹C‰$èÈüÿÿ‹…Àt‹S‰P‹C…Àt‹‰;���u¼‹;���£���uµ‹C£���뫃Ä[]Ãv�¼'����U‰åƒìèuÿÿÿ¡���…Àt$‰$èÄýÿÿ¡���…Àuï¡����…Àtf‰$èHüÿÿ¡����…ÀuïÉö����¼'����U‰åSƒì‹]Ç$ ���è����‹���…Ò‰XtD‰‰P9���Ç�����£���t:‹“€���1ÀÇDƒH����ƒÀƒøuð;“€���t‰“€���ƒÄ[]ÃÇ@����£���ë³Ç�������ëºë U‰åWVSƒìL¶U,¶E‹]¶uˆUà¶}(ˆEçÇD$���Ç$Ì���è����¶Uà…Àt1ÉÇDˆH����ƒÁƒùuð‹ (���Ç€À�������Ç€Ä�������ƒÁ…Û‰ (���‰HÇ@$ÿÿÿÿÇ@(ÿÿÿÿ„ž���‹‹Ä���…É„¯���‰‰HÇ�����‰ƒÄ���‰˜¼���ˆÈ���1Ò…Û•Âçÿ���Æ@D�æÿ���Æ@E�Æ@G�Ç@0d���‰T$$‹U$‰|$ ‰t$‰$‰T$‹U ‰Eà‰T$‹U‰T$‹U‰T$ ¶Uç‰T$‹U ‰T$è����‹EàƒÄL[^_]Ë ���…Ét'‰‰HÇ�����£���éhÿÿÿÇ@����‰ƒÀ���éDÿÿÿÇ@����£����ëд&����U‰åVSƒì0‹5���ÇD$���Ç$@���è����Ç@<����‰ÃÇD$$���ÇD$ ����ÇD$d���ÇD$d���ÇD$���ÇD$d���ÇD$ d���ÇD$���ÇD$¤��Ç$����èþÿÿ¡���Ç$����‰C8è����è����‰4$è����¡,���ÇC4����ÇC����ÇC����ƒÀ£,���‰C ‹E‰C¡ ���…Àt ‰‰CÇ����‰Ø‰ ���‰���ƒÄ0[^]ÃÇC����‰���ëÖfgEnumSubWindows����Enumerator or callback missing from subwindow enumerator call��� ERROR: Internal error <%s> in function %s�Window Enumeration�� ERROR: Internal <%s> function called without first calling 'glutInit'.�fgEnumWindows��Enumerator or callback missing from window enumerator call�fgDestroyWindow��Window destroy function called with null window�fgDestroyMenu���Menu destroy function called with null menu�freeglut menu���•�������Ÿ�������©�������³�������½�������Ç�������Ñ�������Û�������å�������ï�������ù�������������������i��!����¤������¬������³������¸��$����¾��!����É������Ð������Õ��$����������Q������‰������´������¼������Ã������È��$����ê������������_������k��,����u��,����Â��"����Ü��#����ä��%����ê������ú������!������)������3������_������g������n������s��$����������¥������Á������������ ������������0��%����?��%����}������¦������®������¶������Ï������æ������ï������ù������������������ ��$������,����9������E������O��%����U������������‹������������š������¼������Í������Ö������é��������&����������*������5������o������w������Â��(����â������ ������« ��'����¼ ������Ð ������ó ������ ������ ��(����o ������€ ������‡ ��)���� ��*����” ��+����œ ��,����¡ ������¾ ������Ì ������ã ������é ������ý ������Æ��%����Þ��%����.file�������þÿ��g����������������������������� �����������������������2������� ������E������ ������Q���@��� ������]���`��� ������k��� ��� ������y���ð��� ������‡������ ������•���P��� ������§���à��� ������¸���0��� ������Í���p��� ������Ü���Ð��� ������ê������� ������ü���0��� ������ ����� ��������0��� ������,��°��� ������@������ ������Z����� ������j��� ��� ��.text���������� ��k�������������.data����������������������������.bss�����������0�����������������.rdata���������²��������������������x����������_fgState�������������…�������� ������—�������� ��_fgError������ ��_free��������� ��_malloc������� ������¦�������� ��_calloc������� ������´�������� ������Ã�������� ������Ô�������� ������ä�������� ��ñ��freeglut_structure.c�_fghRemoveMenuFromWindow�_fgCreateStructure�_fgMenuByID�_fgListInit�_fgListAppend�_fgListRemove�_fgListLength�_fgListInsert�_fgEnumSubWindows�_fghcbWindowByID�_fghcbWindowByHandle�_fgEnumWindows�_fgWindowByID�_fgWindowByHandle�_fgDestroyWindow�_fgDestroyMenu�_fgCloseWindows�_fgDestroyStructure�_fgAddToWindowDestroyList�_fgCreateWindow�_fgCreateMenu�_fgStructure�_fgDeactivateMenu�_fgCloseWindow�_fgOpenWindow�_fgDisplayMenu�_glutDisplayFunc�_glutHideWindow�_fgSetWindow� /320 1264195966 500 500 100664 6851 ` L�����Ê�������.text�����������p��´���D������'��� �P`.data�����������@���$��������������@�`À.bss��������������������������������€�0À.rdata����������à��d��������������@�`@U‰åWVSì¼��ÝE‰…´ùÿÿݘùÿÿ‰•¨ùÿÿÇ$� �è����ƒìÇ$€ ��è����ƒìÇ$¡ ��è����ƒìÇ$· ��è����ƒìÇ$´ ��è����ƒìè����ÙîÝT$ÝT$ÙèÝ\$ÙÈ��Ý$Ùˆùÿÿè����Ý…˜ùÿÿƒì Ø Ì��ÝT$ÝT$Ý$è����ƒìÙÐ��Ý\$Ù…ˆùÿÿÝT$Ý$è����Ç…Øùÿÿ����ƒì‹•Øùÿÿ‹ØùÿÿÇ…Üùÿÿ����Ç…¸ùÿÿ���ÁâÁãÇ…¼ùÿÿ����‰•°ùÿÿ‰¬ùÿÿ‹…°ùÿÿ½hûÿÿ1É…¼ùÿÿ‹•¼ùÿÿ½ÜùÿÿÁà`���‰…Ðùÿÿ‹…¬ùÿÿ…¸ùÿÿ‰½Äùÿÿ…`���‰…ÔùÿÿR1ÒÁàœÅðùÿÿ‰àùÿÿ‰…äùÿÿ‹…Ðùÿÿ‹½Ôùÿÿ‹0‹‹½ÄùÿÿvÝÅà��…hþÿÿÏ…Üùÿÿ‰½Èùÿÿ½èùÿÿ½ÜùÿÿÝ[ÝÅà��Ï…èüÿÿ…Üùÿÿƒ½Øùÿÿ‰½Àùÿÿ‰…Ìùÿÿݸ��� ���ëÙÉ‹½ÈùÿÿÝTÇø‰Çƒï‰½„ùÿÿ…¡��‹½ÄùÿÿÙàÝ‹½àùÿÿÙàÝ_ø<vÇÝýà��<[ÇÝýà��<R½äùÿÿǃøÝ”ýèüÿÿu‹½ÌùÿÿÙÀÙàÝ\ÙÉëÙÉ<R½äùÿÿǃÀƒ½ØùÿÿÝ”ýhþÿÿŽhÿÿÿÝØÝØëÝØÝØƒø~ŒƒÂƒÁƒ…Ðùÿÿƒ­Ôùÿÿƒ…àùÿÿƒú…·þÿÿƒ…¼ùÿÿƒ…¸ùÿÿƒ…Üùÿÿ`ƒ½¼ùÿÿ…-þÿÿÙèÝT$$ÇD$4����ÙîÝT$ÙÉÇD$0���ÝT$ ÙÉÇD$,���ÝT$ÇD$���ÙˆùÿÿÙ˜ùÿÿÇD$���Ç$´ ��è����…hþÿÿƒì8Ù…˜ùÿÿÝT$$‰D$4Ù…ˆùÿÿÝT$ÙÉÇD$0���Ý\$ ÇD$, ���Ý\$ÇD$���ÇD$���Ç$· ��è����‹•´ùÿÿƒì8Ù…˜ùÿÿÝT$ ‰T$Ù…ˆùÿÿÝT$Ùɉ$Ý\$ Ý\$è����‹´ùÿÿ‹½¨ùÿÿƒì(‰\$ÇD$ ����‰\$ÇD$����‰<$è����…èüÿÿƒìÙ…˜ùÿÿÝT$$‰D$4Ù…ˆùÿÿÝT$ÙÉÇD$0���Ý\$ ÇD$, ���Ý\$ÇD$���ÇD$���Ç$· ��è����ƒì8‰\$ÇD$ ����‰\$ÇD$����‰<$è����ƒìÙ…ˆùÿÿƒ½ØùÿÿÙ…˜ùÿÿ~XÝØÝØƒ…Øùÿÿƒ½Øùÿÿ …6üÿÿè����è����eô[^_]Ãt&�ÝØ‹½Àùÿÿƒ½„ùÿÿÝ\Çø…Ëýÿÿ‹½àùÿÿÝÙàÝéKýÿÿÝT$$ÙÉ•hûÿÿÝT$ÙɉT$4Ý\$ ÇD$0���Ý\$ÇD$, ���ÇD$���ÇD$���Ç$· ��è����ƒì8‰\$‰\$èùÿÿ‰<$ÇD$ ����ÇD$����è����ƒìÙ…˜ùÿÿÝT$$‰\$4Ù…ˆùÿÿÝT$ÙÉÇD$0���Ý\$ ÇD$, ���Ý\$ÇD$���ÇD$���Ç$· ��è����‹½´ùÿÿ‹…¨ùÿÿƒì8‰|$ÇD$ ����‰|$ÇD$����‰$è����ƒìé±þÿÿt&�¼'����U‰åƒì(€=����ÝEuÝ]èÇD$����Ç$���è����ÝEèÝ]º��ɸ���éÑùÿÿU‰åƒì(€=����ÝEuÝ]èÇD$P���Ç$���è����ÝEèÝ]º��ɸ ���é‘ùÿÿ����������������������ð?����������������������ð?������ð?������ð?glutSolidTeapot� ERROR: Function <%s> called without first calling 'glutInit'.�glutWireTeapot��f���g���h���i������������������ ��� ��� ��� ��� ��������� ��� ������������������������������������������������������������������ ���!���"���#���$���%���&���'���(���`���`���`���`���a���b���c���d���e���e���e���e�����������������������������j���k���l���m���n���o���p���q���r���s���t���u���v���v���v���v���|���z���w���y���{���~���}���x���(���'���&���%���)���*���+���,���-���.���/���0���1���2���3���4���5���6���7���8���5���6���7���8���9���:���;���<���=���>���?���@������A���B���C���D���E���F���G���H���I���J���K���L���M���N���O���P���Q���R���S���P���Q���R���S���T���U���V���W���X���Y���Z���[���\���]���^���_���š™™™™™É?��������š™™™™™@š™™™™™É?yé&1¬¼¿š™™™™™@yé&1¬¼?š™™™™™É¿š™™™™™@��������š™™™™™É¿š™™™™™@ffffffõ?�������������@@ffffffõ?+‡ÙÎ÷ç¿�����@@+‡ÙÎ÷ç?ffffffõ¿�����@@��������ffffffõ¿�����@@������÷?�������������@@������÷?Ãõ(\Âé¿�����@@Ãõ(\Âé?������÷¿�����@@��������������÷¿�����@@������ø?��������333333@������ø?áz®Gáê¿333333@áz®Gáê?������ø¿333333@��������������ø¿333333@������ü?��������������þ?������ü?\Âõ(\ï¿������þ?\Âõ(\ï?������ü¿������þ?��������������ü¿������þ?�������@��������š™™™™™õ?�������@ìQ¸…ëñ¿š™™™™™õ?ìQ¸…ëñ?�������Àš™™™™™õ?���������������Àš™™™™™õ?�������@��������ÍÌÌÌÌÌì?�������@ìQ¸…ëñ¿ÍÌÌÌÌÌì?ìQ¸…ëñ?�������ÀÍÌÌÌÌÌì?���������������ÀÍÌÌÌÌÌì?�������À��������ÍÌÌÌÌÌì?�������@��������ÍÌÌÌÌÌÜ?�������@ìQ¸…ëñ¿ÍÌÌÌÌÌÜ?ìQ¸…ëñ?�������ÀÍÌÌÌÌÌÜ?���������������ÀÍÌÌÌÌÌÜ?������ø?��������ÍÌÌÌÌÌÌ?������ø?áz®Gáê¿ÍÌÌÌÌÌÌ?áz®Gáê?������ø¿ÍÌÌÌÌÌÌ?��������������ø¿ÍÌÌÌÌÌÌ?������ø?��������333333Ã?������ø?áz®Gáê¿333333Ã?áz®Gáê?������ø¿333333Ã?��������������ø¿333333Ã?š™™™™™ù¿��������333333�@š™™™™™ù¿333333Ó¿333333�@������ø¿333333Ó¿������@������ø¿��������������@ffffffÀ��������333333�@ffffffÀ333333Ó¿333333�@������À333333Ó¿������@������À��������������@š™™™™™À��������333333�@š™™™™™À333333Ó¿333333�@������À333333Ó¿������@������À��������������@š™™™™™À��������ÍÌÌÌÌÌü?š™™™™™À333333Ó¿ÍÌÌÌÌÌü?������À333333Ó¿ÍÌÌÌÌÌü?������À��������ÍÌÌÌÌÌü?š™™™™™À��������333333ù?š™™™™™À333333Ó¿333333ù?������À333333Ó¿š™™™™™õ?������À��������š™™™™™õ?������À��������������ò?������À333333Ó¿������ò?333333À333333Ó¿������î?333333À��������������î?�������À333333Ó¿ÍÌÌÌÌÌì?ffffffþ¿333333Ó¿333333ã?ffffffþ¿��������333333ã?333333û?��������ÍÌÌÌÌÌö?333333û?…ëQ¸å¿ÍÌÌÌÌÌö?333333û?…ëQ¸å¿333333ã?333333û?��������333333ã?ÍÌÌÌÌÌ@��������ÍÌÌÌÌÌö?ÍÌÌÌÌÌ@…ëQ¸å¿ÍÌÌÌÌÌö?ÍÌÌÌÌÌ@…ëQ¸å¿ffffffê?ÍÌÌÌÌÌ@��������ffffffê?ffffff@��������ÍÌÌÌÌÌ�@ffffff@������пÍÌÌÌÌÌ�@333333@������п333333�@333333@��������333333�@š™™™™™@��������333333@š™™™™™@������п333333@ffffff @������п333333@ffffff @��������333333@ffffff@��������ÍÌÌÌÌÌ@ffffff@������пÍÌÌÌÌÌ@333333 @������п33333ó@333333 @��������33333ó@333333@��������ÍÌÌÌÌÌ@333333@333333ÿÍÌÌÌÌÌ@š™™™™™ @333333Ã¿š™™™™@š™™™™™ @��������š™™™™@ffffff@��������333333@ffffff@333333ÿ333333@š™™™™™ @333333ÿ333333@š™™™™™ @��������333333@����������������333333 @š™™™™™é?��������333333 @š™™™™™é?ÍÌÌÌÌÌÜ¿333333 @ÍÌÌÌÌÌÜ?š™™™™™é¿333333 @��������š™™™™™é¿333333 @����������������ÍÌÌÌÌÌ@ffffffö?��������333333@ffffffö?J +‡é¿333333@J +‡é?ffffffö¿333333@��������ffffffö¿333333@š™™™™™Ù?��������ffffff@š™™™™™Ù?yé&1¬Ì¿ffffff@yé&1¬Ì?š™™™™™Ù¿ffffff@��������š™™™™™Ù¿ffffff@ÍÌÌÌÌÌô?��������ffffff@ÍÌÌÌÌÌô?²ï§ÆKç¿ffffff@²ï§ÆKç?ÍÌÌÌÌÌô¿ffffff@��������ÍÌÌÌÌÌô¿ffffff@ÍÌÌÌÌÌô?��������333333@ÍÌÌÌÌÌô?²ï§ÆKç¿333333@²ï§ÆKç?ÍÌÌÌÌÌô¿333333@��������ÍÌÌÌÌÌô¿333333@������������������������ÍÌÌÌÌÌö?ð§ÆK7‰é¿��������������ø?��������333333³?ÍÌÌÌÌÌö?����������������ð§ÆK7‰é?ÍÌÌÌÌÌö¿����������������������ø¿333333³?��������ÍÌÌÌÌÌö¿��������������ø?áz®Gáê¿333333³?áz®Gáê?������ø¿333333³?��‡C���?��À¿������������)�������8�������G�������V�������e�������m�������ƒ�������‘������� �������°�������¹�������Ï�������@������_������ ������Í������=������I������ù�� ����C������š������Í������ü������S������v������«������°������0������Y������ª������Ù������ø������ ������������������8������I������P������U������.file�������þÿ��gfreeglut_teapot.c������������� ��������������������������`�������_cpdata�à������_tex�������������������ð��� ������+���0��� ��.text����������o��'�������������.data����������@�����������������.bss�����������������������������.rdata���������Ô����������������_fgState�������������;��������� ������K��������� ������W��������� ������g��������� ������u��������� ������‚��������� ������“��������� ������£��������� ������²��������� ������Á��������� ������Í��������� ��_fgError������ ��Ý���_fghTeapot�_patchdata�_glutSolidTeapot�_glutWireTeapot�_glPushAttrib@4�_glEnable@4�_glPushMatrix@0�_glRotated@32�_glScaled@24�_glTranslated@24�_glMapGrid2d@40�_glPopMatrix@0�_glPopAttrib@0�_glMap2d@56�_glEvalMesh2@20� /339 1264195966 500 500 100664 597 ` L�����Ü��������.text�����������P���Œ��������������� �P`.data�������������������������������@�0À.bss��������������������������������€�0ÀU1À‰å]Éö¼'����U‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Ã.file�������þÿ��g����������������������������� �����������������������/������� ������G��� ���� ������^���0���� ������o���@���� ��.text����������E�����������������.data����������������������������.bss�����������������������������}���freeglut_videoresize.c�_glutVideoResizeGet�_glutSetupVideoResizing�_glutStopVideoResizing�_glutVideoResize�_glutVideoPan� /363 1264195966 500 500 100664 11973 ` L�����%��M�����.text�����������ð��´����������� �P`.data�������������������������������@�0À.bss��������������������������������€�0À.rdata����������`��¤��������������@�0@€=����U¡���‰åt…Àu ë‹€¼���…Àt€¸È����uí‹@]Ã1À]ö����¿����U‰åƒì€=����t¡���…Àt(‹U‰¨���ÉÃÇD$����Ç$���è����¡���…ÀuØÇD$����Ç$T���è����¡���‹U‰¨���Éö����¿����U‰åƒì€=����t¡���…Àt%‹€¨���ÉÃÇD$’���Ç$���è����¡���…ÀuÛÇD$’���Ç$T���è����¡���‹€¨���ÉÃfU‰åSƒì4€=����„¬���‹���…Û„¾���Ç$ÿ��è����…ÀtèÉ���¡ ���ÇEè����ÇEì����ÇD$����‰Eð¡¤���ÇD$��ωEôEè‰$è����‹Mì‹Eô‹Uè)Èƒì ‰D$‹EðÇD$��‰L$ ‰T$)ЉD$¡���ÇD$����‹@ ‰$è����ÆCG‹]üƒìÉÃÇD$¤���Ç$���è����é;ÿÿÿ´&����ÇD$¤���Ç$T���è����‹���é#ÿÿÿU‰åSƒì€=����t ‹���…Ût4èáþÿÿ€{G�”CGƒÄ[]Ãv�ÇD$³���Ç$���è����‹���…ÛuÌÇD$³���Ç$T���è����‹���ë°¶����U‰åƒì€=����t5¡���…ÀtHÇ$ÿ��è����…Àtècÿÿÿ¡���Æ@F‹U‰P‹U ‰P ÉÃÇD$È���Ç$���è����ëµ¶����ÇD$È���Ç$T���è����ë¢v�¼'����U‰åƒì(€=����tI¡���…Àt]ÇD$���ÇD$����ÇD$����ÇD$ ����ÇD$����ÇD$����‹@ ‰$è����ƒìÉÃÇD$Ú���Ç$���è����¡���…Àu£ÇD$Ú���Ç$T���è����¡���ëˆU‰åƒì(€=����tI¡���…Àt]ÇD$���ÇD$����ÇD$����ÇD$ ����ÇD$����ÇD$���‹@ ‰$è����ƒìÉÃÇD$è���Ç$���è����¡���…Àu£ÇD$è���Ç$T���è����¡���ëˆU‰åƒì8€=����„}���‹���…Ò„���Ç$ÿ��è����…ÀtèºýÿÿEè‰D$¡���‹@ ‰$è����‹Eô+Eìƒì‰D$‹Eð+EèÇD$���‰D$ ‹E ‰D$‹E‰D$¡���‹@ ‰$è����ƒìÉÃÇD$÷���Ç$���è����éjÿÿÿ´&����ÇD$÷���Ç$T���è����éXÿÿÿ´&����U‰åƒì€=����t¡���…Àt?‹ˆ¼���…ÉtÉÃÇD$ ��Ç$���è����ëÕ¶����‹U‰T$‹@ ‰$è����ƒìÉÃÇD$ ��Ç$T���è����¡���릴&����¼'����U‰åƒì€=����t¡���…Àt?‹¼���…ÒtÉÃÇD$��Ç$���è����ëÕ¶����‹U‰T$‹@ ‰$è����ƒìÉÃÇD$��Ç$T���è����¡���릴&����¼'����U‰åƒì€=����t1¡���…ÀtEÆ@-�ÇD$���‹@ ‰$è����¡���Æ@,�ƒìÉÃv�ÇD$.��Ç$���è����¡���…Àu»ÇD$.��Ç$T���è����¡���ë ´&����U‰åƒì€=����t1¡���…ÀtEÇD$����‹@ ‰$è����¡���Æ@,�ƒìÉô&����ÇD$@��Ç$���è����¡���…Àu»ÇD$@��Ç$T���è����¡���ë ´&����U‰åƒì€=����t1¡���…ÀtEÇD$���‹@ ‰$è����¡���Æ@,ƒìÉô&����ÇD$O��Ç$���è����¡���…Àu»ÇD$O��Ç$T���è����¡���ë ´&����U‰åSƒì€=����t0‹E‰$è����…Àt‹x���‰$è����‰x���ƒÄ[]ô&����ÇD$^��Ç$���è����ëºv�¼'����U‰åƒìX€=����‰]ô‹U‰uø‹] ‰}ü‹u‹}„ˆ���‹E‰Uä‰$è����1É‹Uä…Àt_…Ûˆ°���…ÿˆ¸���…öx}…Òˆ…���ÇD$$����ÇD$ ����‰T$‰|$ÇD$���‰t$‰\$ ÇD$���ÇD$„��‰$è����‹H‹]ô‰È‹uø‹}ü‰ì]Ãv�‰UäÇD$p��Ç$���è����‹UäéYÿÿÿ‹H Î…Òx )Öé{ÿÿÿ‹H )ò‰mÿÿÿÖ÷Úédÿÿÿ‹HË…ÿx )ûéHÿÿÿ‹H<9)߉:ÿÿÿû÷ßé1ÿÿÿfU‰åƒì8€=����uÇD$…��Ç$���è����¡���ÇD$$����ÇD$ ����Ç$����‰D$¡ ���‰D$¶���‰D$¡���‰D$¡����‰D$ ¶���‰D$‹E‰D$è����‹@ÉÃt&�¼'����U‰åƒì‹E £����Éé\ÿÿÿ¶����¿����U‰åSƒì‹]9���tI¡����…Àt0‹S1É9Øt 9Pu¹���‹�…Àuì…Ét‹C ‰$è����‹]üƒìÉËS‰$è����ƒìëÝÇD$����Ç$����è����ƒìëž¶����¿����U‰åSƒì¡���‹]…Àt‹P‰T$‹@ ‰$è����ƒì…Ût#‹C ‰$è����‹Sƒì‰C‰T$‰$è����ƒì‰���‹]üÉö����U‰åSƒì‹]€=����t-¡���…Àt9XtE‰$è����…Àt)‰EƒÄ[]éfÿÿÿ¶����ÇD$–��Ç$���è����뽉\$Ç$¤��è����ƒÄ[]Ãt&�U‰åWVSìŒ���¶E¶U‹]¶}(ˆE¯EÀ¶u,‰D$¡����ˆU®ÇD$Í��‰$è����ƒì f…À„Ê��‰ù„É„©��‹‹¼���…É„ò��ÇD$Ö��ÇD$,��Ç$���è����‹E$1É‹u ‹����‰U°‹“¼���…Ò„û��ÇE´���–‹R ‰U¤‹U°‰D$‹E‰\$,ÇD$$����‰T$(‹U¤‰D$‹E´‰t$ÇD$Í��‰T$ ‹U‰D$ ‰ $‰T$‹U ‰T$è����ƒì0…À‰C „w��‰ú„Ò„Î��ÇD$���ÇD$����ÇD$����ÇD$ ����ÇD$����ÇD$ÿÿÿÿ‰$è����‹C ƒìÇD$ðÿÿÿ‰$è����‹���ƒìöÆ…€��€æ…Ô��€=$���ÀƒàƒÀ‰D$‹C ‰$è����‹C ƒì‰$è����ƒìÇ$���è����ƒì‰$ènýÿÿ¡���Ñèƒà…À‰CuÇ$��è����ƒìÇ$��è����ƒìeô[^_]ô&����‰ð„À„†���‹E$‹u €}¯�uÇE���€ÇE���€€}®�… ��€»È���ÇC ÿÿÿÿÇCÿÿÿÿÀ%Ôþÿ,��‰Æ€»È����¹€���…&þÿÿ‹“¼���ÇE´��Ï…Ò„ì���‹ ����ÇE´���V‰M°1Ééþÿÿ€»È����…mÿÿÿÇ$ ���è����‹U ƒì4BÇ$!���è����ƒìÇ$���‰E¨è����‹U¨E$ƒìPé/ÿÿÿ€»È����„cþÿÿé þÿÿ%ÿÿ´ÿ‰D$ÇD$ðÿÿÿ‹C ‰$è����ƒì éeþÿÿÇD$Ö��ÇD$ã��Ç$���è����éýÿÿ‹M ‹U$‰K‰S éÿÿÿ´&����%ÿÿtÿë¡‹E$‹u ÇE´���–‹����1ÉÇE¤����‰U°é2ýÿÿt&�‹M Ç$T��‰L$è����‹C énýÿÿÇE´���–ÇE¤����éÿüÿÿfU‰åV‰ÖS‰ÃƒìÇ$t��è����ƒì…Àt'‰$ÿЃì…Àt‰t$‰$è����…À•À¶Àeø[^]Ãeø1À[^]ÃU‰åWVSìL��¶E ‹]¶uˆ…óýÿÿ¡���‹K‰ÂƒâƒúÒƒÂ%öÄtƒÊ¨fÇE°(�fÇE²�‰U´„à���ÆE¸ÆEº�ÆE¼�ÆE¾�ÆEÀ�f…Àº���xöÄ@º���„Ó���‰ðˆUɉ $ÆE¹ÆE»�ÆE½�ÆE¿�ÆEÁ�ÆEÂ�ÆEÃ�ÆEÄ�ÆEÅ�ÆEÆ�ÆEÇÆEȈEÊÆEË�ÇEÌ����ÇEÐ����ÇEÔ����ÇD$ ���è����M°ƒìˆE¹‰L$‹C‰$è����ƒì÷���€��‰…ôýÿÿuj‹µôýÿÿ1À…öt€½óýÿÿ�¸���„Ç��eô[^_]ɃâÆE¸�ÆEºÆE¼ÆE¾ˆUÀéÿÿÿföÄ º���…ÿÿÿ1ÒöÄ„ÿÿÿ¶„���éÿÿÿè����‰…äýÿÿè����Uˆ¹ ���‰×‰…èýÿÿ1Àó«¡����‰$ÇEŒ����ÇEˆ#���‰E˜ÇE¬Ž��è����¡����ƒìÇD$,����‰D$(ÇD$$����ÇD$ ����ÇD$����ÇD$����ÇD$����ÇD$����ÇD$ ��ÏÇD$„��ÇD$Ž��Ç$����è����ƒì0‰Ç‰$è����‹ôýÿÿƒì‰ÆE°‰L$‰D$‰4$è����ƒì ‰4$è����ƒì‰…ìýÿÿ‰D$‰4$è����º��‰ðƒìè0ýÿÿ…À…˜���‹èýÿÿ‹…äýÿÿ‰ $‰D$è����‹…ìýÿÿƒì‰$è����ƒì‰t$‰<$è����ƒì‰<$è����¡����ƒì‰D$Ç$Ž��è����ƒìé þÿÿt&�‹…ôýÿÿM°‰L$‰D$‹C‰$è����ƒì …À•Àeô[^_]Ãt&�Ç$±��è����ƒì…À‰Â„Oÿÿÿ¶E¹‹ ���Ç…øýÿÿ ��Ç…üýÿÿ���‰…þÿÿ¶EÀÇ…�þÿÿ ��Ç…þÿÿ���Ç…þÿÿ ��‰…þÿÿ¶EÇÇ… þÿÿ' ��Ç…þÿÿ ��Ç…þÿÿ ��‰…$þÿÿ¶EÈÇ… þÿÿ" ��Ç…(þÿÿ# ��Ç…0þÿÿ ��‰…,þÿÿ‰ÈÑèƒà€å‰…4þÿÿ…Õ���Ç…àýÿÿP���¹D���¸@���Ç…ÜýÿÿL���Ç…ØýÿÿH���Ç„øýÿÿA ��‹…ØýÿÿÇ„ øýÿÿ���‹ÜýÿÿÇEØ����ÇEÜ����Ç„øýÿÿB ��¡ˆ���‰„ øýÿÿ‹…àýÿÿ‹KÇD$ ���Ç„øýÿÿ����Eà‰D$Eä‰D$E؉D$…øýÿÿ‰D$‰ $ÿÒƒì…À„ãýÿÿ‹Eà…À„Øýÿÿ‹Mä‰ôýÿÿéÊýÿÿfÇ…8þÿÿ© ��¹L���¸H���Ç…<þÿÿ���Ç…àýÿÿX���Ç…ÜýÿÿT���Ç…ØýÿÿP���éÿÿÿë U‰åƒìxƒ=Œ���‰]ô‹]‰uø‰}ü„&��‹C‰D$‹C‰$è����‹CºI��ƒìè_úÿÿ…À„ï���¡Œ���ƒø„)��‹���‰Uй���ÇEÄ‘ ��UÔ‰EÈuÄÇEÌ’ ��‹=”���‰øƒàƒøÀƒç÷Ѓà øtÇ” ��‰DȃÁŽ‹=˜���‰øƒàƒøÀƒç÷Ѓà øtÇ&‘��TމDÈÇ����Ç$É��è����ƒì…À„à���‰t$ÇD$����‹S‰$ÿÐƒì …À‰Æ„Š���ÇD$����Ç$����è����‹Cƒì‰$è����‰sƒì‹]ô‹uø‹}ü‰ì]Ë5���…ö…Ìþÿÿ‹ ”���…É…¾þÿÿ‹˜���…Ò…°þÿÿ‹]ô‹uø‹}ü‰ì]Ãt&�‹���…Ò…ÏþÿÿuÄ1ɉòéâþÿÿ¡˜���Ç$ ��‰D$¡”���‰D$ ¡���‰D$¡Œ���‰D$è����éAÿÿÿ‰E´Ç$ä��è����‹E´é ÿÿÿglutSetWindowData��� ERROR: Function <%s> called without first calling 'glutInit'.� ERROR: Function <%s> called with no current window defined.�glutGetWindowData�glutFullScreen�glutFullScreenToggle�glutReshapeWindow�glutPopWindow�glutPushWindow�glutPositionWindow�glutSetIconTitle�glutSetWindowTitle�glutIconifyWindow�glutHideWindow�glutShowWindow�glutDestroyWindow�glutCreateSubWindow��glutCreateWindow�glutSetWindow�glutSetWindow(): window ID %d not found!�FREEGLUT�fgOpenWindow�Window Class Info Not Found�� ERROR: Internal error <%s> in function %s�Game mode being invoked on a subwindow��Failed to create a window (%s)!�wglGetExtensionsStringARB�FREEGLUT_dummy�WGL_ARB_multisample�wglChoosePixelFormatARB�wglCreateContextAttribsARB�wglCreateContextAttribsARB not found����Unable to create OpenGL %d.%d context (flags %x, profile %x)�WGL_ARB_create_context����$���� ���%����H���$����P���%����g���"����n���"����s���L����x���%����„���"����‹���"�������L����•���%����¸���$����À���%����Ô���"����Û���"����à���L����å���%����ñ���"����ø���"����ý���L������%������$����&��%����:��)����H��&����f��&����|��(����¬��%����¿��2����Ô��"����Û��"����à��L����ô��"����û��"�������L������%������$����"��%����D��"����K��"����P��L����V��%����b��"����i��"����n��L����t��%����ˆ��$������%���� ��)����®��%����È��"����Ï��"����Ô��L����ä��"����ë��"����ð��L������$������%����O��2����\��"����c��"����h��L����m��%����y��"����€��"����…��L����Š��%����˜��$���� ��%����ß��2����ì��"����ó��"����ø��L����ý��%���� ��"������"������L������%����(��$����5��%����I��)����^��%����i��*����›��%����¦��+����´��"����»��"����À��L����Ô��"����Û��"����à��L����ø��$�������%������"������"����$��L����>��,����K��"����R��"����W��L����\��%����x��$����€��%����˜��"����Ÿ��"����¤��L����¾��,����Ë��"����Ò��"����×��L����Ü��%����ø��$�������%������4���� ��%����4��"����;��"����@��L����E��%����Q��"����X��"����]��L����b��%����x��$����€��%����—��4����œ��%����´��"����»��"����À��L����Å��%����Ñ��"����Ø��"����Ý��L����â��%����ø��$�������%������4������%����4��"����;��"����@��L����E��%����Q��"����X��"����]��L����b��%����y��$����‡��/����‘��$����™��-����Ÿ��$����´��"����»��"����À��L����Ø��$������/����_��"����g��.����‡��"����Ž��"����“��L����ø��$���� ��"���� ��"���� ��L���� ��$����4 ��$����? ��$����H ��$����Q ��$����\ ��$����l ��.����Š ��'����¬ ��%����³ ��%����ß ��F����ò ��K���� ��J����( ��%����A ��E����S ��C����h ��J����q ��%����Œ ��$����” ��%����¥ ��/����Ä ��"����Ë ��"����Ð ��L����Ý ��"����â ��0���� ��&����% ��"����- ��1����Y ��"����a ��"����h ��"����m ��L����{ ��&����É ��"����ç ��B����7 ��2����M ��3����S ��$����n ��$����† ��4����” ��5����£ ��6����³ ��$����Ë ��7����Ú ��8����j ��&����• ��9����ª ��9����¼ ��9����û ��:���� ��"������"������"������L����V��&����v��"������L����¯��"����´��I����Ó��;������$����Ê��<����â��=����ë��$����\��$����f��>����q��?����Š��&����”��@����¥��"����ª��A����¯��&����þ��"������"������B������C����=��H����H��D����]��J����b��"����Œ��J������K����¬��E����·��F����¼��&����Ê��"����Ï��G����ø��H������"������I����/��$����?��$������$����-��J����5��"����J��$����Y��$����~��$����ª��$����Û��"����à��I���� ��J����.��K����G��$����U��$����c��$����‚��$����›��$����¢��"����«��$����´��$����½��$����Æ��L����Õ��"����Ú��L����.file�������þÿ��gfreeglut_window.c������������� ��������������������������@���� ������&���°���� ������9������ ������I������ ������_���€��� ������r������� ������������ ������‘��� ��� ������¥���ð��� ������·���p��� ������Ë���ð��� ������Þ���p��� ������î���ð��� ������þ���p��� ��������Ð��� ������&��ð��� ������8��€ ��� ������T��  ��� ������c�� ��� ������p��€ ��� ��������ð ��� �������� ��� ������¦��ð��� ������º������ ��.text����������æ��������������.data����������������������������.bss�����������������������������.rdata���������`����������������_fgState�������������Ñ���������������Þ���������������é���������������ù�������� ��_glutGet������ �������������� �������������� ������.�������� ������@�������� ������Z�������� ������j�������� ������x�������� ������ƒ�������� ������•�������� ������¦�������� ������¸�������� ������Æ�������� ������Ö�������� ������ä�������� ������ô�������� �������������� �������������� ��_strstr������� ������+�������� ������<�������� ������Q�������� ������i�������� ������|�������� �������������� ������¡�������� ��_GetDC@4������ ������µ�������� ������É�������� ������Ö�������� ������ç�������� ������û�������� �������������� ������#�������� ������5�������� ��_fgError������ ��I��_glutGetWindow�_glutSetWindowData�_glutGetWindowData�_glutFullScreen�_glutFullScreenToggle�_glutReshapeWindow�_glutPopWindow�_glutPushWindow�_glutPositionWindow�_glutSetIconTitle�_glutSetWindowTitle�_glutIconifyWindow�_glutHideWindow�_glutShowWindow�_glutDestroyWindow�_glutCreateSubWindow�_glutCreateWindow�___glutCreateWindowWithExit�_fgCloseWindow�_fgSetWindow�_glutSetWindow�_fgOpenWindow�_fghIsExtensionSupported�_fgSetupPixelFormat�_fgNewWGLCreateContext�_fgStructure�_fgDisplay�___glutExitFunc�_AdjustWindowRect@12�_GetWindowRect@8�_MoveWindow@24�_SetWindowTextA@8�_fgAddToWindowDestroyList�_fgCreateWindow�_fgWindowByID�_fgWarning�_GetClassInfoA@12�_SetWindowPos@28�_GetWindowLongA@8�_ShowWindow@8�_UpdateWindow@4�_ShowCursor@4�_glDrawBuffer@4�_glReadBuffer@4�_GetSystemMetrics@4�_SetWindowLongA@12�_GetDeviceCaps@8�_ChoosePixelFormat@8�_wglGetCurrentContext@0�_wglGetCurrentDC@0�_DefWindowProcA@16�_RegisterClassA@4�_CreateWindowExA@48�_wglCreateContext@4�_ReleaseDC@8�_DestroyWindow@4�_UnregisterClassA@8�_SetPixelFormat@12�_wglGetProcAddress@4�_wglMakeCurrent@8�_wglDeleteContext@4� /382 1264195966 500 500 100664 780 ` L�����l�������.text��������������Œ������������ �P`.data�������������������������������@�0À.bss�������������������������������€�0À¡����U‰å…Àu Ç�������]ô&����U‰å]Ãt&�¼'����‹����U‰å…Òu Ç�������]ô&����‹ ����U‰å…Éu Ç�������1À]Ãt&�¡����U‰å…Àu Ç�������1À]Ã��� ������� ����2��� ����?��� ����R��� ����_��� ����q��� ����~��� ����.file�������þÿ��g����������������������������� �����������������������0���������������C��� ���� ������U���0���� ������k���P���� ������‚���p���� ��.text����������Š����������������.data����������������������������.bss����������������������������’���freeglut_spaceball.c�_fgInitialiseSpaceball�_sball_initialized�_fgSpaceballClose�_fgSpaceballSetWindow�_fgSpaceballNumButtons�_fgHasSpaceball���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/Copying.txt��������������������������������������������������0000644�0000764�0000764�00000002672�11533026402�020107� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Freeglut Copyright ------------------ Freeglut code without an explicit copyright is covered by the following copyright: Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. 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 or substantial portions of the Software. 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 PAWEL W. OLSZTA 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. Except as contained in this notice, the name of Pawel W. Olszta shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization from Pawel W. Olszta. ����������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/Readme.txt���������������������������������������������������0000644�0000764�0000764�00000010476�11533026402�017675� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������freeglut 2.6.0-3.mp for MinGW This package contains freeglut import libraries, headers, and a Windows DLL, allowing GLUT applications to be compiled on Windows using MinGW. Both static and shared versions of the library are included. For more information on freeglut, visit http://freeglut.sourceforge.net/. Installation Create a folder on your PC which is readable by all users, for example “C:\Program Files\Common Files\MinGW\freeglut\” on a typical Windows system. Copy the “lib\” and “include\” folders from this zip archive to that location. The freeglut DLL should either be placed in the same folder as your application, or can be installed in a system-wide folder which appears in your %PATH% environment variable. On a 32 bit Windows system this is typically “C:\Windows\System32\”, and on a 64 bit Windows system this is typically “C:\Windows\SysWOW64\”. Compiling Applications If you want your application to be compatible with GLUT, you should “#include <GL/glut.h>”. If you want to use freeglut specific extensions, you should “#include <GL/freeglut.h>” instead. Given a source file “test.c”, which you want to compile to an application “test.exe” dynamically linking to the DLL, you can compile and link it with the following commands (replacing the include and lib paths with the ones you created above if necessary): gcc -c -o test.o test.c -I"C:\Program Files\Common Files\MinGW\freeglut\include" gcc -o test.exe test.o -L"C:\Program Files\Common Files\MinGW\freeglut\lib" -lfreeglut -lopengl32 -Wl,--subsystem,windows Don’t forget to either include the freeglut DLL when distributing applications, or provide your users with some method of obtaining it if they don’t already have it! Static Linking To statically link the freeglut library into your application, it’s necessary to define “FREEGLUT_STATIC” when compiling the object files. It’s also necessary to link the static version of the freeglut library, along with the GDI and Windows multimedia libraries which freeglut depends upon: gcc -c -o test.o test.c -D FREEGLUT_STATIC -I"C:\Program Files\Common Files\MinGW\freeglut\include" gcc -o test.exe test.o -L"C:\Program Files\Common Files\MinGW\freeglut\lib" -lfreeglut_static -lopengl32 -lwinmm -lgdi32 -Wl,--subsystem,windows The “-Wl,--subsystem,windows” is needed in each case so that the application builds as a Windows GUI application rather than a console application. If you are using GLU functions you should also include “-lglu32” on the command line. Please visit http://www.transmissionzero.co.uk/computing/using-glut-with-mingw/ for further information and usage. Cross-Compilation I’ve not covered the setup of freeglut for use in cross-compilation, i.e. when building Windows freeglut applications using a Linux system. Setting freeglut up with MinGW on other operating systems can be done following the instructions above, except that the paths will be different. Problems? If you have problems using these packages (runtime errors etc.), please contact me via http://www.transmissionzero.co.uk/contact/, providing as much detail as you can. Please don’t complain to the freeglut guys unless you’re sure it’s a freeglut bug, and have reproduced the issue after compiling freeglut from the latest SVN version—if that’s still the case, I’m sure they would appreciate a bug report or a patch. Changelog 2010–01–22: Release 2.6.0-3.mp • Rebuilt the package using the Fedora version of MinGW. 2009–12–22: Release 2.6.0-2.mp • Updated documentation to take into account the fact that 32 bit DLLs should be placed in the “SysWOW64” folder on 64 bit Windows versions, rather than “System32”. • There were some MinGW cross-compilation issues under Linux related with the fact that the #include of “Windows.h” didn’t match the case of the header file “windows.h”. I’ve changed the #include so that the header filename is all lowercase. 2009–11–29: Release 2.6.0-1.mp • First 2.6.0 MinGW release. I’ve built the package using MinGW, and the only change I’ve made is to the DLL version resource—I’ve changed the description so that my MinGW and MSVC builds are distinguishable from each other (and other builds) using Windows Explorer. Martin Payne 2010–01–22 http://www.transmissionzero.co.uk/ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/freeglut.dll�������������������������������������������������0000644�0000764�0000764�00000565000�11533026402�020247� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������MZ�������ÿÿ��¸�������@�����������������������������������€���º�´ Í!¸LÍ!This program cannot be run in DOS mode. $�������PE��L�zZK��������à�# 8���æ����À������ ���Üj��������������������@����y ������ ������������������Ð�����à�´�����\��������������������$&����������������������������������������������������������������������������������.text���ô���������������������`�P`.data���(&��� ��(����������������@�`À.rdata��@j��P��l��0�������������@�`@.bss����¼���À���������������������€�`À.edata������Ð�����œ�������������@�0@.idata��´���à�����¬�������������@�0À.rsrc���\���������¾�������������@�0À.reloc��$&�����(���Â�������������@�0B����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������U‰åƒì‹EÇD$ÀÞjÇD$�ÀÞj‰$èç��Éö����¼'����U‰åƒì‹EÇD$ÀÞjÇD$�ÀÞj‰$è·��ɃøÀô&����U‰åSƒì‹�ÀÞj…Òt4‹ÀÞjƒë9Úw‹…ÀtóÿЋ�ÀÞjƒë9Úvë‰$èu��Ç�ÀÞj����Ç$����èg��ƒÄ[]Éö¼'����U‰åƒì8‰]ô‹] ‰uø‹u‰}ü‹}ƒût;‰|$‰\$‰4$è��ƒì …Ûu‹�ÀÞj…Òth‰EäèZÿÿÿ‹Eä‹]ô‹uø‹}ü‰ì] �Ç$€���èüÿ��…À£�ÀÞjtCÇ�����£ÀÞjèÓþ��èŽÿ��‰|$ÇD$���‰4$èšÿ��ƒì …Àu¬èþþÿÿ1Àë£1À럶����è³ÿ��Ç� ���1ÀëŠU‰åƒì¡$FÝj…Àt:Ç$�PÝjè¥�‰Âƒì…Ò¸����tÇD$ PÝj‰$è�ƒì…Àt Ç$$FÝjÿÐÉÃt&�U‰å]ÃU‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9˜¤���t‰˜¤���ƒÄ[]Â�ÇD$$PÝjÇ$<PÝjèœ��ëË´&����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9˜ ���t‰˜ ���ƒÄ[]Â�ÇD$|PÝjÇ$<PÝjèÊ›��ëË´&����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9˜˜���t‰˜˜���ƒÄ[]Â�ÇD$‘PÝjÇ$<PÝjèz›��ëË´&����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9˜œ���t‰˜œ���ƒÄ[]Â�ÇD$ŸPÝjÇ$<PÝjè*›��ëË´&����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9Xxt‰XxƒÄ[]Â�t&�ÇD$±PÝjÇ$<PÝjèÜš��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9˜ˆ���t‰˜ˆ���ƒÄ[]Â�ÇD$ÆPÝjÇ$<PÝj芚��ëË´&����U‰åƒì€=ü@Ýj�uÇD$ÝPÝjÇ$<PÝjè]š��‹E£<AÝjÉÂ�U‰åƒì€=ü@Ýj�uÇD$ðPÝjÇ$<PÝjè-š��‹E£8AÝjÉÂ�U‰åƒì€=ü@Ýj�t¡¼ÁÞj…Àt‹U‰PÉÂ�ÇD$QÝjÇ$<PÝjèê™��ë×´&����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9˜€���t‰˜€���ƒÄ[]Â�ÇD$QÝjÇ$<PÝjèš™��ëË´&����U‰åSƒì‹]€=ü@Ýj�uÇD$$QÝjÇ$<PÝjèi™��‰]‹]üÉë€U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9Xpt‰XpƒÄ[]Â�t&�ÇD$4QÝjÇ$<PÝjè™��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9Xlt‰XlƒÄ[]Â�t&�ÇD$BQÝjÇ$<PÝjè̘��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9Xht‰XhƒÄ[]Â�t&�ÇD$XQÝjÇ$<PÝjè|˜��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9Xdt‰XdƒÄ[]Â�t&�ÇD$gQÝjÇ$<PÝjè,˜��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9X`t‰X`ƒÄ[]Â�t&�ÇD$zQÝjÇ$<PÝjèÜ—��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9X\t‰X\ƒÄ[]Â�t&�ÇD$ˆQÝjÇ$<PÝj茗��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9XTt‰XTƒÄ[]Â�t&�ÇD$šQÝjÇ$<PÝjè<—��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t%¡¸ÁÞj…Àt99Xtt‰Xt…Ût8ÇE`Üj‹]üÉéØûÿÿÇD$­QÝjÇ$<PÝjèä–��¡¸ÁÞj…ÀuÇ‹]üÉÂ�t&�ÇE����‹]üÉé ûÿÿU‰åƒì€=ü@Ýj�uÇD$ÀQÝjÇ$<PÝjè–��‹E£0AÝjÉÂ�U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9XXt‰XXƒÄ[]Â�t&�ÇD$ÍQÝjÇ$<PÝjèL–��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9XPt‰XPƒÄ[]Â�t&�ÇD$ÝQÝjÇ$<PÝjèü•��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t¡¸ÁÞj…Àt9XLt‰XLƒÄ[]Â�t&�ÇD$îQÝjÇ$<PÝj謕��ëÍv�¼'����U‰åSƒì‹]€=ü@Ýj�t…Ût/¡¸ÁÞj…Àt9XHt‰XHƒÄ[]Â�ÇD$þQÝjÇ$<PÝjè\•��ëÍÇ$RÝjèN•��ëö����¿����U‰åSƒì‹]€=ü@Ýj�t$è¨ô��¡¸ÁÞj…Àt9˜”���t‰˜”���ƒÄ[]Â�ÇD$mRÝjÇ$<PÝjèõ”��ëÆv�U‰åSƒì‹]€=ü@Ýj�t$èXô��¡¸ÁÞj…Àt9˜���t‰˜���ƒÄ[]Â�ÇD$…RÝjÇ$<PÝj襔��ëÆv�U‰åSƒì‹]€=ü@Ýj�t$èô��¡¸ÁÞj…Àt9˜Œ���t‰˜Œ���ƒÄ[]Â�ÇD$RÝjÇ$<PÝjèU”��ëÆv�U‰åSƒì‹]€=ü@Ýj�t>èxŽ��¡¸ÁÞj…Àt(9X|t‰X|‹U ‰P4蜥��‹ ¸ÁÞj+A4‰ÂÁú÷Ò!‰Q8ƒÄ[]Â�ÇD$µRÝjÇ$<PÝjèë“��묉ö¼'����U‰åƒì€=ü@Ýj�‰uü‹u‰]øtH¡¸ÁÞj…Àt2‹Xt…Ût+‰$è`ç��ƒþ”À…ö‹uü” Ѓð¶À‰E‰Ø‹]ø‰ì]ÿà‹]ø‹uü‰ì]Ãv�ÇD$ÆRÝjÇ$ÜRÝjèl“��ë¢v�¼'����U‰åSƒì€=ü@Ýj�tg‹,AÝj…Ût{‰\$Ç$(AÝjèvÌ��‹E ‰C ‹E‰C襤��‹ AÝjE…Ò‰Cu ëv�‹…Òt;B}õ‰\$‰T$Ç$ AÝjè¡Ì��ƒÄ[] �ÇD$%SÝjÇ$<PÝjèÕ’��‹,AÝj…Ûu…Ç$���èŸõ��…À‰ÃuƒÇ$4SÝjè­’��érÿÿÿU‰åƒì(€=ü@Ýj�tC¡¸ÁÞj…ÀtW‹U‰Uð‹U ‰UôUð‰T$‹@ ‰$èö��‹Eôƒì‰D$‹Eð‰$èõõ��ƒìÉÂ�ÇD$pSÝjÇ$€SÝjè:’��¡¸ÁÞj…Àu©ÇD$pSÝjÇ$ÀSÝjè’��¡¸ÁÞj뎶����U‰åVSƒì‹] ‹uƒûfv‰\$Ç$þSÝjèí‘��‰^0eø[^]Ãv�ÿ$TÝjÇD$���Ç$����è}õ��ƒì‰$èjõ��ƒìÇD$���Ç$����è[õ��ƒì‰D$ÇD$ôÿÿÿ‹F ‰$è1õ��‰^0ƒì eø[^]ÃÇD$��Ç$����è õ��ƒì‰$è õ��ƒìÇD$��Ç$����èþô��ƒì‰D$ë¡ÇD$‹��Ç$����èáô��ƒì‰$èÎô��ƒìÇD$‹��Ç$����è¿ô��ƒì‰D$é_ÿÿÿÇD$ƒ��Ç$����èŸô��ƒì‰$èŒô��ƒìÇD$ƒ��Ç$����è}ô��ƒì‰D$éÿÿÿÇD$‚��Ç$����è]ô��ƒì‰$èJô��ƒìÇD$‚��Ç$����è;ô��ƒì‰D$éÛþÿÿ´&����ÇD$���Ç$����èô��ƒì‰$èô��ƒìÇD$���Ç$����èòó��ƒì‰D$é’þÿÿÇ$����èÒó��ƒìÇD$����évþÿÿfÇD$†��Ç$����è´ó��ƒì‰$è¡ó��ƒìÇD$†��Ç$����è’ó��ƒì‰D$é2þÿÿÇD$��Ç$����èró��ƒì‰$è_ó��ƒìÇD$��éYÿÿÿÇD$��Ç$����èCó��ƒì‰$è0ó��ƒìÇD$��Ç$����è!ó��ƒì‰D$éÁýÿÿÇD$„��Ç$����èó��ƒì‰$èîò��ƒìÇD$„��Ç$����èßò��ƒì‰D$éýÿÿÇD$…��Ç$����è¿ò��ƒì‰$è¬ò��ƒìÇD$…��Ç$����èò��ƒì‰D$é=ýÿÿÇD$��Ç$����è}ò��ƒì‰$èjò��ƒìÇD$��Ç$����è[ò��ƒì‰D$éûüÿÿ´&����U‰åƒì€=ü@Ýj�t!¡¸ÁÞj…Àt5‹U‰$‰T$èYüÿÿÉÂ�t&�ÇD$´UÝjÇ$€SÝjèLŽ��¡¸ÁÞj…ÀuËÇD$´UÝjÇ$ÀSÝjè/Ž��¡¸ÁÞjë°U‰åƒì€=ü@Ýj�t¡¸ÁÞj…Àt%Æ@,ÉÃfÇD$ÄUÝjÇ$ØUÝjèì��¡¸ÁÞj…ÀuÛÇD$ÄUÝjÇ$VÝjèÏ��¡¸ÁÞjÆ@,ÉÃt&�U‰åƒì€=ü@Ýj�t‹E‰$èÉ��…ÀtÆ@,ÉÂ�ÇD$VVÝjÇ$ØUÝjè†��ëÓt&�U‰åƒìH€=ü@Ýj�‰]ô‰uø‰}ü„Ô���‹ ¸ÁÞj…É„æ���èaí��¡¸ÁÞj‹P…Òu ‹]ô‹uø‹}ü‰ì]Ë@‰$è¥î��¡AÝjƒì…ÀtÜÇ$¼��襽��‹AÝjƒÂ‰AÝj‰Ã¡AÝjƒì…À„¤���‰Ù)Á; AÝjv£1ÿ¡¸ãÞj‰}ä1ÿ‰MàßmàØ °VÝjƒÀ@‰Uà‰}ä‰T$ÇD$€VÝj‰$ßmàØñÝ\$Ý\$ è–ï��‰AÝjÇAÝj����éLÿÿÿÇD$nVÝjÇ$ØUÝjè|Œ��éÿÿÿ´&����ÇD$nVÝjÇ$VÝjè\Œ��éÿÿÿ´&����‰AÝjé�ÿÿÿU‰åƒì‹EÇD$8Ýj‰$èÇ£��ƒìÉÂ�U‰åƒì‹EÇD$8Ýj‰$èß��ƒìÉÂ�U‰åƒì‹E ÇD$8Ýj‰D$‹E‰$èÀv��ƒì ÉÂ�‰ö¼'����U‰åƒì‹E‰$è×ë��ƒìÉÃv�¼'����U‰åƒì(€=ü@Ýj�‰]ô‹]‰uø‰}ü„ñ��¿WÝj¹���‰Þó¦…��¹ ���¿ WÝj‰Þ¸@"Üjó¦—Á’Â8Ñ„¬��¹���¿WÝj‰Þ¸�ŽÜjó¦—Á’Â8Ñ„‹��¹���¿*WÝj‰Þ¸PŽÜjó¦—Á’Â8Ñ„j��¹���¿@WÝj‰Þ¸€Üjó¦—Á’Â8Ñ„I��¹���¿WWÝj‰Þ¸ÀÜjó¦—Á’Â8Ñ„(��¹ ���¿jWÝj‰Þ¸`ÁÜjó¦—Á’Â8Ñ„��¹ ���¿wWÝj‰Þ¸�’Üjó¦—Á’Â8Ñ„æ��¹���¿€WÝj‰Þ¸ "Üjó¦—Á’Â8Ñ„Å��¹���¿‘WÝj‰Þ¸ ÿÜjó¦—Á’Â8Ñ„¤��¹���¿¥WÝj‰Þ¸@ÿÜjó¦—Á’Â8Ñ„ƒ��¹���¿·WÝj‰Þ¸ Üjó¦—Á’Â8Ñ„b��¹���¿ÉWÝj‰Þ¸€ Üjó¦—Á’Â8Ñ„A��¹���¿áWÝj‰Þ¸À Üjó¦—Á’Â8Ñ„ ��¹���¿ñWÝj‰Þ¸Ð÷Üjó¦—Á’Â8Ñ„ÿ��ÇD$ÿWÝj‰$èŸì��‰Â¸PÝj…Ò„à��ÇD$ XÝj‰$è€ì��‰Â¸@ýÜj…Ò„Á��ÇD$ XÝj‰$èaì��‰Â¸ÀüÜj…Ò„¢��ÇD$1XÝj‰$èBì��‰Â¸ðûÜj…Ò„ƒ��ÇD$DXÝj‰$è#ì��‰Â¸PúÜj…Ò„d��ÇD$VXÝj‰$èì��‰Â¸ÐúÜj…Ò„E��ÇD$dXÝj‰$èåë��‰Â¸`ûÜj…Ò„&��ÇD$sXÝj‰$èÆë��‰Â¸ÀýÜj…Ò„��ÇD$…XÝj‰$è§ë��‰Â¸ÀþÜj…Ò„è��ÇD$”XÝj‰$èˆë��‰Â¸@þÜj…Ò„É��ÇD$£XÝj‰$èië��‰Â¸àøÜj…Ò„ª��ÇD$²XÝj‰$èJë��‰Â¸°Üj…Ò„‹��ÇD$ÀXÝj‰$è+ë��‰Â¸ Üj…Ò„l��ÇD$ÐXÝj‰$è ë��‰Â¸°ÚÜj…Ò„M��ÇD$åXÝj‰$èíê��‰Â¸ÀÚÜj…Ò„.��ÇD$÷XÝj‰$èÎê��‰Â¸ÐÚÜj…Ò„��ÇD$YÝj‰$è¯ê��‰Â¸àÚÜj…Ò„ð��ÇD$ YÝj‰$èê��‰Â¸ðÚÜj…Ò„Ñ��ÇD$?YÝj‰$èqê��‰Â¸�ÛÜj…Ò„²��ÇD$OYÝj‰$èRê��‰Â¸ÛÜj…Ò„“��ÇD$_YÝj‰$è3ê��‰Â¸�"Üj…Ò„t��ÇD$nYÝj‰$èê��‰Â¸PÅÜj…Ò„U��ÇD$~YÝj‰$èõé��‰Â¸ÐÄÜj…Ò„6��ÇD$ŠYÝj‰$èÖé��‰Â¸ÅÜj…Ò„��ÇD$–YÝj‰$è·é��‰Â¸@ÉÜj…Ò„ø ��ÇD$§YÝj‰$è˜é��‰Â¸ ÈÜj…Ò„Ù ��ÇD$¶YÝj‰$èyé��‰Â¸�ÈÜj…Ò„º ��ÇD$ÌYÝj‰$èZé��‰Â¸PÇÜj…Ò„› ��ÇD$àYÝj‰$è;é��‰Â¸°ÆÜj…Ò„| ��ÇD$óYÝj‰$èé��‰Â¸pÄÜj…Ò„] ��ÇD$ZÝj‰$èýè��‰Â¸ÄÜj…Ò„> ��ÇD$ZÝj‰$èÞè��‰Â¸ Üj…Ò„ ��ÇD$!ZÝj‰$è¿è��‰Â¸PÜj…Ò„� ��ÇD$1ZÝj‰$è è��‰Â¸�Üj…Ò„á ��ÇD$BZÝj‰$èè��‰Â¸ Üj…Ò„ ��ÇD$PZÝj‰$èbè��‰Â¸€Üj…Ò„£ ��ÇD$_ZÝj‰$èCè��‰Â¸0Üj…Ò„„ ��ÇD$uZÝj‰$è$è��‰Â¸àÜj…Ò„e ��ÇD$ƒZÝj‰$èè��‰Â¸Üj…Ò„F ��ÇD$–ZÝj‰$èæç��‰Â¸€Üj…Ò„' ��ÇD$£ZÝj‰$èÇç��‰Â¸àÜj…Ò„ ��ÇD$±ZÝj‰$è¨ç��‰Â¸ðÜj…Ò„é ��ÇD$ÃZÝj‰$è‰ç��‰Â¸°Üj…Ò„Ê ��ÇD$ÓZÝj‰$èjç��‰Â¸ Üj…Ò„« ��ÇD$ëZÝj‰$èKç��‰Â¸PÜj…Ò„Œ ��ÇD$[Ýj‰$è,ç��‰Â¸�Üj…Ò„m ��ÇD$[Ýj‰$è ç��‰Â¸ÐÜj…Ò„N ��ÇD$-[Ýj‰$èîæ��‰Â¸€Üj…Ò„/ ��ÇD$;[Ýj‰$èÏæ��‰Â¸0Üj…Ò„ ��ÇD$P[Ýj‰$è°æ��‰Â¸àÜj…Ò„ñ ��ÇD$e[Ýj‰$è‘æ��‰Â¸ÀÜj…Ò„Ò ��ÇD$x[Ýj‰$èræ��‰Â¸pÜj…Ò„³ ��ÇD$[Ýj‰$èSæ��‰Â¸ Üj…Ò„” ��ÇD$¤[Ýj‰$è4æ��‰Â¸ÀÜj…Ò„u ��ÇD$·[Ýj‰$èæ��‰Â¸pÜj…Ò„V ��ÇD$É[Ýj‰$èöå��‰Â¸ðÜj…Ò„7 ��ÇD$Ú[Ýj‰$è×å��‰Â¸ ×Üj…Ò„ ��ÇD$ç[Ýj‰$è¸å��‰Â¸p×Üj…Ò„ù ��ÇD$ô[Ýj‰$è™å��‰Â¸@×Üj…Ò„Ú ��ÇD$\Ýj‰$èzå��‰Â¸ÐÞÜj…Ò„» ��ÇD$ \Ýj‰$è[å��‰Â¸ÝÜj…Ò„œ ��ÇD$\Ýj‰$è<å��‰Â¸ÐÙÜj…Ò„} ��ÇD$2\Ýj‰$èå��‰Â¸ÐÛÜj…Ò„^ ��ÇD$C\Ýj‰$èþä��‰Â¸`ÛÜj…Ò„? ��ÇD$P\Ýj‰$èßä��‰Â¸0>Üj…Ò„ ��ÇD$d\Ýj‰$èÀä��‰Â¸@9Üj…Ò„ ��ÇD$t\Ýj‰$è¡ä��‰Â¸;Üj…Ò„â��ÇD$ˆ\Ýj‰$è‚ä��‰Â¸p7Üj…Ò„Ã��ÇD$˜\Ýj‰$ècä��‰Â¸ 8Üj…Ò„¤��ÇD$©\Ýj‰$èDä��‰Â¸p6Üj…Ò„…��ÇD$º\Ýj‰$è%ä��‰Â¸zÜj…Ò„f��ÇD$É\Ýj‰$èä��‰Â¸|Üj…Ò„G��ÇD$Ù\Ýj‰$èçã��‰Â¸†Üj…Ò„(��ÇD$æ\Ýj‰$èÈã��‰Â¸ ‰Üj…Ò„ ��ÇD$ô\Ýj‰$è©ã��‰Â¸iÜj…Ò„ê��ÇD$]Ýj‰$èŠã��‰Â¸PfÜj…Ò„Ë��ÇD$]Ýj‰$èkã��‰Â¸ƒÜj…Ò„¬��ÇD$]Ýj‰$èLã��‰Â¸ €Üj…Ò„��ÇD$,]Ýj‰$è-ã��‰Â¸€ZÜj…Ò„n��ÇD$A]Ýj‰$èã��‰Â¸°NÜj…Ò„O��ÇD$W]Ýj‰$èïâ��‰Â¸0÷Üj…Ò„0��ÇD$f]Ýj‰$èÐâ��‰Â¸àöÜj…Ò„��ÇD$v]Ýj‰$è±â��‰Â¸PKÜj…Ò„ò��ÇD$‰]Ýj‰$è’â��‰Â¸ðGÜj…Ò„Ó��ÇD$]Ýj‰$èsâ��‰Â¸@sÜj…Ò„´��ÇD$±]Ýj‰$èTâ��‰Â¸ qÜj…Ò„•��ÇD$Æ]Ýj‰$è5â��‰Â¸PpÜj…Ò„v��ÇD$Ú]Ýj‰$èâ��‰Â¸�oÜj…Ò„W��ÇD$ï]Ýj‰$è÷á��‰Â¸€÷Üj…Ò„8��ÇD$^Ýj‰$èØá��‰Â¸÷Üj…Ò„��ÇD$^Ýj‰$è¹á��‰Â¸ ÷Üj…Ò„ú��ÇD$/^Ýj‰$èšá��‰Â¸°÷Üj…Ò„Û��ÇD$?^Ýj‰$è{á��‰Â¸À÷Üj…Ò„¼��ÇD$L^Ýj‰$è\á��‰Â¸ÙÜj…Ò„��ÇD$]^Ýj‰$è=á��‰Â¸PØÜj…Ò„~��ÇD$q^Ýj‰$èá��‰Â¸Ð×Üj…Ò„_��ÇD$‚^Ýj‰$èÿà��‰Â¸ÀØÜj…Ò„@��ÇD$˜^Ýj‰$èàà��‰Â¸àBÜj…Ò„!��ÇD$«^Ýj‰$èÁà��‰Â¸ÐAÜj…Ò„��ÇD$½^Ýj‰$è¢à��‰Â¸pAÜj…Ò„ã��ÇD$Ï^Ýj‰$èƒà��‰Â¸°@Üj…Ò„Ä��ÇD$ß^Ýj‰$èdà��‰Â¸à¿Üj…Ò„¥��ÇD$ñ^Ýj‰$èEà��‰Â¸€¿Üj…Ò„†��ÇD$_Ýj‰$è&à��‰Â¸`Üj…Ò„g��ÇD$_Ýj‰$èà��‰Â¸°Üj…Ò„H��ÇD$!_Ýj‰$èèß��‰Â¸ Üj…Ò„)��ÇD$5_Ýj‰$èÉß��‰Â¸àùÜj…Ò„ ��ÇD$J_Ýj‰$èªß��‰Â¸ ÜÜj…Ò„ë��ÇD$X_Ýj‰$è‹ß��‰Â¸ ÛÜj…Ò„Ì��ÇD$j_Ýj‰$èlß��‰Â¸øÜj…Ò„­��ÇD$|_Ýj‰$èMß��‰Â¸€øÜj…Ò„Ž��ÇD$Ž_Ýj‰$è.ß��‰Â¸ ÃÜj…Ò„o��ÇD$ž_Ýj‰$èß��‰Â¸àÃÜj…Ò„P��ÇD$®_Ýj‰$èðÞ��‰Â¸`8Üj…Ò„1��ÇD$¿_Ýj‰$èÑÞ��‰Â¸ 6Üj…Ò„��ÇD$Ð_Ýj‰$è²Þ��‰Â¸P<Üj…Ò„ó��ÇD$á_Ýj‰$è“Þ��‰Â¸°9Üj…Ò„Ô��ÇD$ò_Ýj‰$ètÞ��‰Â¸ nÜj…Ò„µ��ÇD$`Ýj‰$èUÞ��‰Â¸@mÜj…Ò„–��ÇD$+`Ýj‰$è6Þ��‰Â¸@FÜj…Ò„w��ÇD$D`Ýj‰$èÞ��‰Â¸€DÜj…Ò„X��ÇD$^`Ýj‰$èøÝ��‰Â¸ðuÜj…Ò„9��ÇD$o`Ýj‰$èÙÝ��‰Â¸ÐwÜj…Ò„��ÇD$´VÝj‰$èºÝ��‰Â¸"Üj…Ò„û��ÇD$`Ýj‰$è›Ý��‰Â¸ÐÜj…Ò„Ü��ÇD$”`Ýj‰$è|Ý��‰Â¸� Üj…Ò„½��ÇD$«`Ýj‰$è]Ý��‰Â¸ÀŸÜj…Ò„ž��ÇD$Å`Ýj‰$è>Ý��‰Â¸€ŸÜj…Ò„��ÇD$Ü`Ýj‰$èÝ��‰Â¸@ŸÜj…Ò„`��ÇD$ô`Ýj‰$è�Ý��‰Â¸�ŸÜj…Ò„A��ÇD$ aÝj‰$èáÜ��‰Â¸ÀžÜj…Ò„"��ÇD$&aÝj‰$èÂÜ��‰Â¸€žÜj…Ò„��ÇD$@aÝj‰$è£Ü��‰Â¸ð¡Üj…Ò„ä���ÇD$XaÝj‰$è„Ü��‰Â¸¡Üj…Ò„Å���ÇD$paÝj‰$èeÜ��‰Â¸0¡Üj…Ò„¦���ÇD$†aÝj‰$èFÜ��‰Â¸à Üj…Ò„‡���ÇD$žaÝj‰$è'Ü��‰Â¸ Üj…ÒtlÇD$¶aÝj‰$è Ü��‰Â¸@ Üj…ÒtQÇD$ÌaÝj‰$èñÛ��‰Â¸ŽÜj…Òt6ÇD$ãaÝj‰$èÖÛ��‰Â¸0ŽÜj…ÒtÇD$øaÝj‰$è»Û��‰Â¸@ŽÜj…Òu8‹]ô‹uø‹}ü‰ì]Â�ÇD$´VÝj¿WÝj‰ÞÇ$ÈVÝjè…x��¹���ó¦„ûìÿÿ‰$è ìÿÿ‹]ô‹uø‹}ü‰ì]Â�U‰Â‰åƒì…Ò¸(vÞjt ƒú¸ìEÞjuÉÃv�‰T$Ç$bÝjè°w��1ÀÉö����¿����U‰åƒì€=ü@Ýj�t‹Eè©ÿÿÿ…Àt'Ù@ÉÂ�ÇD$-bÝjÇ$@bÝjèêw��‹Eè‚ÿÿÿ…ÀuÙÙîÉÂ�´&����U‰åWVSƒì<‹u €=ü@Ýj�„Ç���‹EèOÿÿÿ…À‰Ã„•���…ö„���¶„À„‚���Ùî‹KÙÀVÙUÔ‹uÔë‹C ‹¸…ÀtØ�¶„Àt ƒÂ¶ø9Ï}ï< ußÝáßàžvXÝÙ¶Ùî„ÀuàÝáßàžvÝÙëfÝØÙ}æØ4cÝj·Eæ´ f‰EäÙmäÛ]àÙmæ‹EàƒÄ<[^_]Â�t&�ƒÄ<1À[^_]Â�t&�ÝØ‰uÔÙEÔë‚¶����ÇD$€bÝjÇ$@bÝjèÜv��é ÿÿÿ´&����U‰åSƒì$‹] €=ü@Ýj�tN‹EèUþÿÿ…Ûx8;X}3‹@ ‹˜…Àt)Ù4cÝjØ�Ù}ö·Eö´ f‰EôÙmôÛ]ðÙmö‹EðƒÄ$[]Â�ƒÄ$1À[]Â�ÇD$‘bÝjÇ$@bÝjè[v��뜉ö¼'����U‰Â‰åƒìƒú¸|cÝjt<ƒú¸ÐcÝjt2ƒú¸(dÝjt(ƒú¸€dÝjtƒú¸ØdÝjtƒú¸,eÝjt ƒú¸€eÝjuÉÉT$Ç$¡bÝjèpu��1ÀÉö����¿����U‰åƒì€=ü@Ýj�t‹Eèyÿÿÿ‰Â1À…Òt‹BÉÂ�ÇD$·bÝjÇ$@bÝjè¦u��ëÓt&�U‰åWVSƒì‹] €=ü@Ýj�to‹Eè3ÿÿÿ…ÀtR…ÛtN¶„ÒtGƒÃ1É1öë‹x ¶Ò‹—¶Ñ¶„ÒtƒÃ€ú uã9Î}*¶‰Î1É„Òué9ñ‰È}ƒÄ‰ð[^_]Â�1ÀƒÄ[^_]Â�1Éë¿ÇD$ÈbÝjÇ$@bÝjèu��éxÿÿÿv�U‰åSƒì‹] €=ü@Ýj�t=‹Eè•þÿÿSÿúþ���w…Àt‹@ ‹˜¶�ƒÄ[]Â�t&�ƒÄ1À[]Â�¶����ÇD$ÙbÝjÇ$@bÝjèœt��ë­v�¼'����U‰åWVSƒì,‹] €=ü@Ýj�„'��‹Eèüÿÿ…À‰EÜ„æ���…Û„Þ���¶„À„Ó���ƒÃÙî‰]àÙ]ض����‹MܶÐ;Q ���< „µ���‹MÜ‹A ‹…À‰Eä„„���‹P‹x…Ò~R1öÇ$���èÔ��‹÷ƒì…À~*1ÛÝ����ƒÃD÷‹P‰T$‹�‰$èùÓ��ƒì9÷ÙèôÓ��‹EäƒÆ9p°‹UäÙÙEØØÁÇD$����ÇD$����Ù]ØÙ$èÌÓ��ƒì ‹Uà¶„Àt ƒEàé>ÿÿÿeô[^_]Â�1Û‰\$ÙAÙàÙ\$ÙEØÙàÙ$èÓ��‰]؃ì ë¿ÇD$ébÝjÇ$@bÝjè<s��éÀþÿÿ´&����U‰åWVSƒì,‹] €=ü@Ýj�„���‹Eè¯úÿÿ…Ûˆæ���;XÝ���‹@ ‹˜…À‰Eä„Ì���‹p‹@…ÀŽž���1ÛÇ$���èñÒ��‹<Þƒì…ÿ~.1ÿt&�ý����ƒÇDÞ‹P‰T$‹�‰$èÉÒ��ƒì9<ÞÙèÄÒ��Ç$����è¨Ò��‹ Þƒì…É~)1ÿý����ƒÇDÞ‹P‰T$‹�‰$è…Ò��ƒì9<ÞÙè€Ò��‹EäƒÃ9Xdÿÿÿ‹UäÇD$����ÇD$����‹‰$è\Ò��ƒì eô[^_]Â�ÇD$úbÝjÇ$@bÝjèr��éçþÿÿ´&����¼'����U‰åWVSƒìL‹] €=ü@Ýj�„§��‹Eèûÿÿ…À‰Æt …Ût€;�fueô[^_]Â�t&�Ç$���èäÑ��ƒìÇD$����Ç$ð ��èÕÑ��ƒìÇD$����Ç$ñ ��è¾Ñ��ƒìÇD$����Ç$ò ��è§Ñ��ƒìÇD$����Ç$ó ��èÑ��ƒìÇD$����Ç$ô ��èyÑ��ƒìÇD$���Ç$õ ��èbÑ��ƒìÙÄÒt{€ú „ƒ���‹F ¶Ò‹<¶W‰T$ÇD$����¶Ð¶Àf‰UæßEæÙ\$‹VÙ]ȉT$ ‹V‰T$‹V‰$‰T$èÑ��¶f‰E涃ÃßEæƒìÙEÈ„ÒÞÁuÝØë¶����ÝØèáÐ��eô[^_]Â�ÇD$����‹FÇD$ ����ÇD$����ÇD$����÷؉EàÛEàÙ\$ÙàÙ\$Ç$����èŽÐ��ƒìÙîéÿÿÿt&�ÇD$cÝjÇ$@bÝjèp��é@þÿÿ´&����U‰åVSƒì0‹] €=ü@Ýj�„��‹Eè ùÿÿ‰ÆCÿ=þ���‡ï���…ö„ç���‹F ‹˜Ç$���èÐ��ƒìÇD$����Ç$ð ��è÷Ï��ƒìÇD$����Ç$ñ ��èàÏ��ƒìÇD$����Ç$ò ��èÉÏ��ƒìÇD$����Ç$ó ��è²Ï��ƒìÇD$����Ç$ô ��è›Ï��ƒìÇD$���Ç$õ ��è„Ï��¶ƒÃ¶Ð¶Àf‰UöƒìßEö‰\$Ù\$ÇD$����‹V‰T$ ‹V‰T$‹V‰$‰T$èIÏ��ƒìèIÏ��eø[^]Â�ÇD$cÝjÇ$@bÝjèÔn��é×þÿÿU‰åV‰ÆSìÀ���\ÿÿÿ‰\$ÇD$ÿÿÿÿÇ$����èeÒ��‹@AÝj‰ðÇE„��\�‰UÈ‹DAÝjƒì <À‰UÌ‹LAÝjƒàƒÀÇD$����‰D$ ‰UÄ‹PAÝjÇD$����‰\$Ç$����‰UÔè÷Ñ��ƒÀƒìƒøv¸$.Þj´&����‰$è˜m��eø1À[^]Ãÿ$…ˆ.Þj¸H.Þjëá¸h-ÞjëÙ¸@-ÞjëÒf¸�.ÞjëɸÈ-ÞjëÂf‰\$ÇD$ÿÿÿÿÇ$����è˜Ñ��‹EÈ£@AÝj‹EÌƒì £DAÝj‹EÄ£LAÝj‹EÔ£PAÝjeø¸���[^]Éö¼'����U‰åSƒì‹]€=ü@Ýj�tAƒûv‰\$Ç$ô.Þjèèl��ƒÄ¸ÿÿÿÿ[]Â�ÿ$/Þjt&�1Àƒ=ÄÁÞj�•ÀƒÄ[]Â�ÇD$¤.ÞjÇ$´.Þjè(m��ë©¶����¡LAÝjƒÄ[]Â�v�¡PAÝjƒÄ[]Â�v�¸���è6þÿÿƒÄ[]¶ÀÂ�¡@AÝjƒÄ[]Â�¡DAÝjƒÄ[]Â�U‰åƒì€=ü@Ýj�t4¡ÄÁÞj…Àt)‰$èP¬��ÇÄÁÞj����ÇD$����Ç$ðÁÞjèZÐ��ƒìÉÃÇD$,/ÞjÇ$´.Þjèyl��ë¶´&����U‰åƒì8€=ü@Ýj�„­���¡ÄÁÞj…À„Á���‰$èè«��1Àèýÿÿ„Àt}¡DAÝjÇD$$����ÇD$ ���ÇD$���‰D$¡@AÝjÇD$����ÇD$ ����ÇD$���‰D$ÇD$q/ÞjÇ$����è¬��‹@AÝj‰P‹DAÝj£ÄÁÞjÆ@F‰P ‹@Éô&����Ç$P/Þjè4k��1ÀÉÃÇD$>/ÞjÇ$´.Þjèœk��¡ÄÁÞj…À…?ÿÿÿÇD$ðÁÞjÇD$ÿÿÿÿÇ$����èCÏ�� ÂÞj��\�ƒì éÿÿÿU‰åWVSƒì<€=ü@Ýj�ÇEä€��ÇEàà��ÇEÜ���ÇEØH���„N��E؉D$‹E}Üuà]ä‰|$‰t$ ‰\$ÇD$/Þj‰$èÎ��ƒø„æ���‹E‰|$‰t$ ‰\$ÇD$™/Þj‰$èßÍ��ƒø„¾���E؉D$‹E‰t$ ‰\$ÇD$¢/Þj‰$è´Í��ƒø„“���‹E‰t$ ‰\$ÇD$«/Þj‰$èÍ��ƒøtsE؉D$ ‹E‰|$ÇD$±/Þj‰$èmÍ��ƒøtP‹E‰|$ÇD$¸/Þj‰$èQÍ��ƒøt4E؉D$‹EÇD$¼/Þj‰$è2Í��ƒøt‹EÇ$À/Þj‰D$è’i��f‹Eä£@AÝj‹Eà£DAÝj‹EÜ£LAÝj‹EØ£PAÝjƒÄ<[^_]Â�¶����ÇD$z/ÞjÇ$´.ÞjèÌi��é™þÿÿU‰åWVSƒìl‹]€=ü@Ýj�‹} ÝE„‘���ƒû�„«���~vØ 4Þjƒë‰]Ä1ÛWG‰}¼uЉljUÀ݃à<ÝjØÉ‹E¼‹UÀÜ�‹EÄÝ]Ð݃è<ÝjØÉÜÝ]ØÝƒð<ÝjƒÃØÉ܉t$‰$Ý]àÝT$Ý]¨èqÿÿÿƒìƒû`ÝE¨u¯ÝØëfÝØeô[^_]Â�t&�Ý]¨ÇD$�0ÞjÇ$0Þjèùh��ƒû�ÝE¨…UÿÿÿÝ]¨Ç$���èþÈ��GW‰E´¸ð<Ýj‰}¼‰Ç‰UÀÇEÄ����ƒìÝE¨Ý1ÛÙàÝ\$ÝGøÙàÝ\$ÝGðÙàÝ$Ý]¨èÉ��‹Uĉ}¸‹}´R4… 2ÞjƒìÝE¨‹ƒÃƒÆ‹UÀ@ÝÅð<ÝjØÉÜÝ\$ÝÅè<ÝjØÉÜÝ\$ÝÅà<ÝjØÉ‹E¼Ü�Ý$Ý]¨èÂÈ��ƒìƒûÝE¨u°‹}¸ƒEăǃ}Ä…`ÿÿÿÝØèDÈ��eô[^_]Â�v�¼'����U‰åWVSƒì|‹]€=ü@Ýj�ÝE„t��ƒû�…ë���‹E 1ÿ‹U Ý]°‰}ăÀ‰EÀƒÂ¸ð<Ýj‰U¸‰ÇÇ$���1ÛèÌÇ��݃ìÙàÝ\$ÝGøÙàÝ\$ÝGðÙàÝ$è È��‹Uĉ}¼‹}¸R4… 2ÞjƒìÝE°‹ƒÃƒÆ‹UÀ@ÝÅð<ÝjØÉÜÝ\$ÝÅè<ÝjØÉÜÝ\$ÝÅà<ÝjØÉ‹E Ü�Ý$Ý]˜èµÇ��ƒìƒûÝE˜u°ÝØ‹}¼èHÇ��ƒEăǃ}Ä…Mÿÿÿët&�ÝØeô[^_]Â�t&�~î‹U ƒëØ 4Þj‹} ‰]ÄuÐ1ۃ‰UÀƒÇ݃à<ÝjØÉ‹E ‹UÀÜ�‹EÄÝ]Ð݃è<ÝjØÉÜÝ]ØÝƒð<ÝjƒÃØÉ܉t$‰$Ý]àÝT$Ý]˜èˆþÿÿƒìƒû`ÝE˜u¯ÝØeô[^_]Â�Ý]˜ÇD$\0ÞjÇ$0ÞjèYf��ÝE˜émþÿÿU‰åƒìX€=ü@Ýj�uÇD$u0ÞjÇ$0Þjè-f��Ç$���èAÆ��Ý4ÞjƒìÝT$ÝT$Ý$Ý]Øè…Æ��ƒìÙîÝT$ÝT$ÙèÝ$Ù]èèsÆ��ƒìÙEèÝT$ÙèÝ\$Ý$è[Æ��ƒìÙèÝ\$ÙEèÝT$Ý$èCÆ��Ý 4ÞjƒìÝT$ÝEØÝT$Ý$Ý]ÈèÆ��ƒìÙEèÝT$Ý\$ÙèÝ$è Æ��ÙèƒìÙàÝ\$ÙEèÝT$Ý$èòÅ��ƒìÙEèÝT$ÙèÝ\$Ý$èÚÅ��ÝE؃ìÝT$ÝEÈÝ\$Ý$è¹Å��ƒìÙEèÝT$Ý\$ÙèÝ$è©Å��ƒìÙèÝ\$ÙEèÝT$Ý$è‘Å��ƒìÙEèÝT$ÙèÙàÝ\$Ý$èwÅ��ÝEȃìÝT$Ý\$ÝEØÝ$èVÅ��ƒìÙEèÝT$Ý\$ÙèÝ$èFÅ��ƒìÙEèÝT$ÙèÙàÝ\$Ý$è,Å��ÙèƒìÙàÝ\$ÙEèÝT$Ý$èÅ��ƒìÝEØÝT$Ý\$ÝEÈÝ$èñÄ��ƒìÙEèÝT$Ý\$ÙèÙàÝ$èßÄ��ƒìÙèÝ\$ÙEèÝT$Ý$èÇÄ��ƒìÙEèÝT$ÙèÝ\$Ý$è¯Ä��ÝEȃìÝT$ÝEØÝ\$Ý$èŽÄ��ƒìÙEèÝT$Ý\$ÙèÙàÝ$è|Ä��ƒìÙEèÝT$ÙèÝ\$Ý$èdÄ��ÙèƒìÙàÝ\$ÙEèÝT$Ý$èJÄ��ƒìÝEØÝ\$ÝEÈÝT$Ý$è)Ä��ƒìÙEèÝT$Ý\$ÙèÙàÝ$èÄ��ƒìÙEèÝT$ÙèÙàÝ\$Ý$èýÃ��ÙèƒìÝ\$ÙEèÝT$Ý$èåÃ��ÝEȃìÝT$ÝT$Ý$èÇÃ��ƒìÙEèÝT$Ý\$ÙèÙàÝ$èµÃ��ÙèƒìÙàÝ\$ÙEèÝT$Ý$è›Ã��ƒìÙEèÝT$ÙèÙàÝ\$Ý$èÃ��ƒìÉé Ã��U‰åƒìX€=ü@Ýj�uÇD$‰0ÞjÇ$0ÞjèÍb��Ç$���èáÂ��Ý4ÞjƒìÝT$ÝT$Ý$Ý]Øè%Ã��ƒìÙîÝT$ÝT$ÙèÝ$Ù]èèÃ��ƒìÙEèÝT$ÙèÝ\$Ý$èûÂ��ƒìÙèÝ\$ÙEèÝT$Ý$èãÂ��Ý 4ÞjƒìÝT$ÝEØÝT$Ý$Ý]Èè¼Â��ƒìÙEèÝT$Ý\$ÙèÝ$è¬Â��ÙèƒìÙàÝ\$ÙEèÝT$Ý$è’Â��ƒìÙEèÝT$ÙèÝ\$Ý$èzÂ��ÝE؃ìÝT$ÝEÈÝ\$Ý$èYÂ��ƒìÙEèÝT$Ý\$ÙèÝ$èIÂ��ƒìÙèÝ\$ÙEèÝT$Ý$è1Â��ƒìÙEèÝT$ÙèÙàÝ\$Ý$èÂ��ÝEȃìÝT$Ý\$ÝEØÝ$èöÁ��ƒìÙEèÝT$Ý\$ÙèÝ$èæÁ��ƒìÙEèÝT$ÙèÙàÝ\$Ý$èÌÁ��ÙèƒìÙàÝ\$ÙEèÝT$Ý$è²Á��ƒìÝEØÝT$Ý\$ÝEÈÝ$è‘Á��ƒìÙEèÝT$Ý\$ÙèÙàÝ$èÁ��ƒìÙèÝ\$ÙEèÝT$Ý$ègÁ��ƒìÙEèÝT$ÙèÝ\$Ý$èOÁ��ÝEȃìÝT$ÝEØÝ\$Ý$è.Á��ƒìÙEèÝT$Ý\$ÙèÙàÝ$èÁ��ƒìÙEèÝT$ÙèÝ\$Ý$èÁ��ÙèƒìÙàÝ\$ÙEèÝT$Ý$èêÀ��ƒìÝEØÝ\$ÝEÈÝT$Ý$èÉÀ��ƒìÙEèÝT$Ý\$ÙèÙàÝ$è·À��ƒìÙEèÝT$ÙèÙàÝ\$Ý$èÀ��ÙèƒìÝ\$ÙEèÝT$Ý$è…À��ÝEȃìÝT$ÝT$Ý$ègÀ��ƒìÙEèÝT$Ý\$ÙèÙàÝ$èUÀ��ÙèƒìÙàÝ\$ÙEèÝT$Ý$è;À��ƒìÙEèÝT$ÙèÙàÝ\$Ý$è!À��ƒìÉéÀ¿��U‰åƒìH€=ü@Ýj�uÇD$œ0ÞjÇ$0Þjèm_��Ç$ ���è¿��ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë?ÇD$ZN¡ ÇD$ ÊÒà?è´¿��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?è¿��ÙèƒìÝT$ÝT$ÙèÙàÝ$Ù]ØÙ]èèp¿��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿èC¿��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?è¿��ÙEèƒìÝT$ÝT$Ý$è�¿��ƒìè ¾��Ç$ ���脾��ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë¿ÇD$ZN¡ ÇD$ ÊÒà?è·¾��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è’¾��ƒìÙEØÝ\$ÙEèÝT$Ý$èy¾��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?èL¾��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è¾��ƒìÙEØÝT$ÙEèÝ\$Ý$è¾��ƒì覽��Ç$ ���芽��ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë?ÇD$ZN¡ ÇD$ ÊÒà¿è½½��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿è˜½��ÙEèƒìÝT$ÙEØÝ\$Ý$è½��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?èR½��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿è%½��ÙEèƒìÝ\$ÙEØÝT$Ý$è ½��ƒì謼��Ç$ ���è¼��ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë¿ÇD$ZN¡ ÇD$ ÊÒà¿èü��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿èž¼��ƒìÙEØÝT$ÝT$Ý$舼��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è[¼��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è.¼��ƒìÙEØÝT$Ý\$ÙEèÝ$è¼��ƒìèµ»��Ç$ ���è™»��ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà?Ç$ÛHF ÇD$ˆ8ë?èÌ»��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?è§»��ÙEèƒìÝT$ÙEØÝ\$Ý$莻��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?èa»��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?è4»��ÙEèƒìÝT$ÝT$Ý$è»��ƒì辺��Ç$ ���袺��ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà?Ç$ÛHF ÇD$ˆ8ë¿èÕº��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿è°º��ÙEèƒìÝT$Ý\$ÙEØÝ$è—º��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿èjº��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è=º��ÙEèƒìÝ\$ÙEØÝT$Ý$è$º��ƒìèĹ��Ç$ ���訹��ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà¿Ç$ÛHF ÇD$ˆ8ë?èÛ¹��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è¶¹��ƒìÙEØÝ\$ÙEèÝT$Ý$è¹��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?èp¹��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?èC¹��ƒìÙEØÝT$Ý\$ÙEèÝ$è*¹��ƒìèʸ��Ç$ ���许��ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà¿Ç$ÛHF ÇD$ˆ8ë¿èá¸��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è¼¸��ƒìÙEØÝT$ÝT$Ý$覸��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿èy¸��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿èL¸��ƒìÙEØÝT$ÙEèÝ\$Ý$è3¸��ƒìèÓ·��Ç$ ���è··��ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë?Ç$ZN¡ ÇD$ÊÒà?èê·��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?èÅ·��ƒìÙEØÝ\$ÙEèÝT$Ý$謷��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è·��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?èR·��ÙEèƒìÝT$ÝT$Ý$è<·��ƒìèܶ��Ç$ ���èÀ¶��ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë¿Ç$ZN¡ ÇD$ÊÒà?èó¶��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?èζ��ÙEèƒìÝT$ÙEØÝ\$Ý$èµ¶��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿èˆ¶��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è[¶��ƒìÙEØÝT$Ý\$ÙEèÝ$èB¶��ƒìèâµ��Ç$ ���èÆµ��ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë?Ç$ZN¡ ÇD$ÊÒà¿èùµ��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿èÔµ��ÙEèƒìÝT$Ý\$ÙEØÝ$軵��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?莵��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?èaµ��ƒìÙEØÝT$ÙEèÝ\$Ý$èHµ��ƒìèè´��Ç$ ���èÌ´��ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë¿Ç$ZN¡ ÇD$ÊÒà¿èÿ´��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿èÚ´��ƒìÙEØÝT$ÝT$Ý$èÄ´��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è—´��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿èj´��ƒìÙEèÝ\$ÙEØÝT$Ý$èQ´��ƒìÉéð³��U‰åƒìH€=ü@Ýj�uÇD$²0ÞjÇ$0ÞjèS��Ç$���è±³��ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë?ÇD$ZN¡ ÇD$ ÊÒà?èä³��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?迳��ÙèƒìÝT$ÝT$ÙèÙàÝ$Ù]ØÙ]èè ³��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿ès³��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?èF³��ÙEèƒìÝT$ÝT$Ý$è0³��ƒìèв��Ç$���è´²��ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë¿ÇD$ZN¡ ÇD$ ÊÒà?èç²��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è²��ƒìÙEØÝ\$ÙEèÝT$Ý$該��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è|²��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿èO²��ƒìÙEØÝT$ÙEèÝ\$Ý$è6²��ƒìèÖ±��Ç$���躱��ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë?ÇD$ZN¡ ÇD$ ÊÒà¿èí±��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿èȱ��ÙEèƒìÝT$ÙEØÝ\$Ý$诱��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?肱��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿èU±��ÙEèƒìÝ\$ÙEØÝT$Ý$è<±��ƒìèܰ��Ç$���èÀ°��ƒìÙîÝ$ÇD$ÛHF ÇD$ˆ8ë¿ÇD$ZN¡ ÇD$ ÊÒà¿èó°��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿èΰ��ƒìÙEØÝT$ÝT$Ý$踰��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿è‹°��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?è^°��ƒìÙEØÝT$Ý\$ÙEèÝ$èE°��ƒìèå¯��Ç$���èɯ��ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà?Ç$ÛHF ÇD$ˆ8ë?èü¯��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã?èׯ��ÙEèƒìÝT$ÙEØÝ\$Ý$辯��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?葯��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?èd¯��ÙEèƒìÝT$ÝT$Ý$èN¯��ƒìèî®��Ç$���èÒ®��ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà?Ç$ÛHF ÇD$ˆ8ë¿è¯��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù?Ç$í/7ÇD$ïÆã¿èà®��ÙEèƒìÝT$Ý\$ÙEØÝ$èÇ®��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿èš®��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿èm®��ÙEèƒìÝ\$ÙEØÝT$Ý$èT®��ƒìèô­��Ç$���èØ­��ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà¿Ç$ÛHF ÇD$ˆ8ë?è ®��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã?èæ­��ƒìÙEØÝ\$ÙEèÝT$Ý$èÍ­��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?è ­��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?ès­��ƒìÙEØÝT$Ý\$ÙEèÝ$èZ­��ƒìèú¬��Ç$���èÞ¬��ƒìÙîÝ\$ÇD$ZN¡ ÇD$ÊÒà¿Ç$ÛHF ÇD$ˆ8ë¿è­��ƒìÙîÝ\$ÇD$ö—›ÇD$wãù¿Ç$í/7ÇD$ïÆã¿èì¬��ƒìÙEØÝT$ÝT$Ý$èÖ¬��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è©¬��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿è|¬��ƒìÙEØÝT$ÙEèÝ\$Ý$èc¬��ƒìè¬��Ç$���èç«��ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë?Ç$ZN¡ ÇD$ÊÒà?è¬��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù?èõ«��ƒìÙEØÝ\$ÙEèÝT$Ý$èÜ«��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?诫��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?è‚«��ÙEèƒìÝT$ÝT$Ý$èl«��ƒìè «��Ç$���èðª��ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë¿Ç$ZN¡ ÇD$ÊÒà?è#«��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù?èþª��ÙEèƒìÝT$ÙEØÝ\$Ý$èåª��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿è¸ª��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿è‹ª��ƒìÙEØÝT$Ý\$ÙEèÝ$èrª��ƒìèª��Ç$���èö©��ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë?Ç$ZN¡ ÇD$ÊÒà¿è)ª��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã?Ç$ö—›ÇD$wãù¿èª��ÙEèƒìÝT$Ý\$ÙEØÝ$èë©��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù?辩��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù?è‘©��ƒìÙEØÝT$ÙEèÝ\$Ý$èx©��ƒìè©��Ç$���èü¨��ƒìÙîÝ\$ÇD$ÛHF ÇD$ ˆ8ë¿Ç$ZN¡ ÇD$ÊÒà¿è/©��ƒìÙîÝ\$ÇD$í/7ÇD$ ïÆã¿Ç$ö—›ÇD$wãù¿è ©��ƒìÙEØÝT$ÝT$Ý$èô¨��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã¿ÇD$ö—›ÇD$ wãù¿èǨ��ƒìÙîÝ$ÇD$í/7ÇD$ïÆã?ÇD$ö—›ÇD$ wãù¿èš¨��ƒìÙEèÝ\$ÙEØÝT$Ý$è¨��ƒìÉé ¨��U‰åƒìh€=ü@Ýj�Ù4ÞjÜMuÝ]èÇD$Ç0ÞjÇ$0ÞjèÁG��ÝEèÝ]èÇ$���èϧ��ÙîƒìÝT$ÝT$ÙèÝ$ÙÉÙ]ÈÙ]¸è¨��ÝEèƒìÙÀÙàÙÉÝT$ÙÉÝT$ÙÉÝ$Ý]Øèõ§��ƒìÝEØÝT$Ý\$ÝEèÝ$èܧ��ÝE؃ìÝ\$ÝEèÝT$Ý$èç��ƒìÝEèÝT$ÝT$Ý$è­§��ÙEȃìÝT$ÙE¸Ý\$Ý$茧��ƒìÝEèÝT$ÝT$Ý$è~§��ƒìÝEØÝ\$ÝEèÝT$Ý$èe§��ƒìÝEØÝT$ÝEèÝ\$Ý$èL§��ƒìÝEèÝT$Ý\$ÝEØÝ$è3§��ÙE¸ƒìÝ\$ÙEÈÝT$Ý$è§��ƒìÝEèÝT$ÝT$Ý$è§��ƒìÝEèÝT$Ý\$ÝEØÝ$èë¦��ƒìÝEèÝ\$ÝEØÝT$Ý$èÒ¦��ƒìÝEèÝT$ÝEØÝ\$Ý$蹦��ÙEȃìÝT$Ý\$ÙèÙàÝ$Ù]¸è”¦��ƒìÝEèÝ\$ÝEØÝT$Ý$胦��ƒìÝEèÝT$Ý\$ÝEØÝ$èj¦��ÝE؃ìÝT$ÝEèÝ\$Ý$èQ¦��ÝE؃ìÝT$ÝT$Ý$è;¦��ÙEȃìÝT$ÙE¸Ý\$Ý$è¦��ƒìÝEèÝ\$ÝEØÝT$Ý$è ¦��ÝE؃ìÝT$ÝT$Ý$èó¥��ÝE؃ìÝT$Ý\$ÝEèÝ$èÚ¥��ƒìÝEèÝT$ÝEØÝ\$Ý$èÁ¥��ÙE¸ƒìÝ\$ÙEÈÝT$Ý$è ¥��ÝE؃ìÝT$ÝT$Ý$è’¥��ÝE؃ìÝT$ÝEèÝ\$Ý$èy¥��ƒìÝEØÝ\$ÝEèÝT$Ý$è`¥��ÝE؃ìÝT$Ý\$ÝEèÝ$èG¥��ƒìèç¤��ÉÂ�v�U‰åƒìh€=ü@Ýj�Ù4ÞjÜMuÝ]èÇD$Õ0ÞjÇ$0ÞjèD��ÝEèÝ]èÇ$���è¤��ÙîƒìÝT$ÝT$ÙèÝ$ÙÉÙ]ÈÙ]¸èФ��ÝEèƒìÙÀÙàÙÉÝT$ÙÉÝT$ÙÉÝ$Ý]Øèµ¤��ƒìÝEØÝT$Ý\$ÝEèÝ$蜤��ÝE؃ìÝ\$ÝEèÝT$Ý$胤��ƒìÝEèÝT$ÝT$Ý$èm¤��ƒìè ¤��Ç$���èñ£��ÙEȃìÝT$ÙE¸Ý\$Ý$è8¤��ƒìÝEèÝT$ÝT$Ý$è*¤��ƒìÝEØÝ\$ÝEèÝT$Ý$è¤��ƒìÝEØÝT$ÝEèÝ\$Ý$èø£��ƒìÝEèÝT$Ý\$ÝEØÝ$èߣ��ƒìè£��Ç$���èc£��ÙE¸ƒìÝ\$ÙEÈÝT$Ý$誣��ƒìÝEèÝT$ÝT$Ý$蜣��ƒìÝEèÝT$Ý\$ÝEØÝ$胣��ƒìÝEèÝ\$ÝEØÝT$Ý$èj£��ƒìÝEèÝT$ÝEØÝ\$Ý$èQ£��ƒìèñ¢��Ç$���èÕ¢��ÙEȃìÝT$Ý\$ÙèÙàÝ$Ù]¸è£��ƒìÝEèÝ\$ÝEØÝT$Ý$è£��ƒìÝEèÝT$Ý\$ÝEØÝ$èî¢��ƒìÝEØÝT$ÝEèÝ\$Ý$èÕ¢��ÝE؃ìÝT$ÝT$Ý$è¿¢��ƒìè_¢��Ç$���èC¢��ÙEȃìÝT$ÙE¸Ý\$Ý$芢��ƒìÝEèÝ\$ÝEØÝT$Ý$èy¢��ÝE؃ìÝT$ÝT$Ý$èc¢��ƒìÝEØÝT$Ý\$ÝEèÝ$èJ¢��ƒìÝEèÝT$ÝEØÝ\$Ý$è1¢��ƒìèÑ¡��Ç$���赡��ƒìÙE¸Ý\$ÙEÈÝT$Ý$èü¡��ÝE؃ìÝT$ÝT$Ý$èî¡��ÝE؃ìÝT$ÝEèÝ\$Ý$èÕ¡��ƒìÝEØÝ\$ÝEèÝT$Ý$輡��ÝE؃ìÝT$Ý\$ÝEèÝ$裡��ƒìèC¡��ÉÂ�ë U‰åVSƒì€=ü@Ýj�„¯���Ç$���¾@=Ýj1Ûèø ��ƒìt&�‰4$ƒÆè-¡��‹ƒ`2Þj@Å`>Ýjƒì‰$è¡��‹ƒd2Þj@Å`>Ýjƒì‰$èÿ ��‹ƒh2Þj@Å`>Ýjƒì‰$èä ��‹ƒl2ÞjƒÃ@Å`>Ýjƒì‰$èÆ ��ƒìûÀ���…wÿÿÿeø[^]él ��ÇD$â0ÞjÇ$0Þjè(@��é8ÿÿÿv�U‰åVSƒì€=ü@Ýj�„¯���¾@=Ýj1Ût&�Ç$���è ��ƒì‰4$ƒÆèN ��‹ƒ`2Þj@Å`>Ýjƒì‰$è; ��‹ƒd2Þj@Å`>Ýjƒì‰$è  ��‹ƒh2Þj@Å`>Ýjƒì‰$è ��‹ƒl2ÞjƒÃ@Å`>Ýjƒì‰$èçŸ��ƒì蟟��ûÀ���…cÿÿÿeø[^]ÃÇD$ÿ0ÞjÇ$0ÞjèH?��é8ÿÿÿv�U‰åWVSƒìL€=ü@Ýj�„��Ç$���1Ûè<Ÿ��ƒì‹“ 3Þj‹ƒ$3Þj R‹“(3ÞjƒÃ ÝÍÈ?Ýj@ÝÅÈ?Ýj<Í����ØáÇÀ?ÝjR4Õ����ÝÍÐ?ÝjÝÕÐ?ÝjØáÙɉuÄ4Å����ÆÀ?ÝjÜ,ÅÐ?ÝjÙËÜ,ÕÈ?ÝjÙÂØÊÙÄØÊÞéÝ]ÐÝÍÀ?ÝjÝÕÀ?ÝjØáÙÉÜ,ÅÀ?ÝjÙÍEЉ$ØÉÙËØÍÞëÙÊÝ]ØÞËÞÉÞéÝ]àèÄž��ƒì‰<$èÁž��ƒì‰4$è¶ž��‹EÄÀ?Ýjƒì‰$裞��ƒìûð���… ÿÿÿèOž��eô[^_]ô&����ÇD$1ÞjÇ$0Þjèü=��éÍþÿÿ´&����U‰åWVSƒìL€=ü@Ýj�„��1Û‹“ 3Þj‹ƒ$3ÞjÇ$��� R‹“(3ÞjƒÃ ÝÍÈ?Ýj@ÝÅÈ?Ýj<Í����ØáÇÀ?ÝjR4Õ����ÝÍÐ?ÝjÝÕÐ?ÝjØáÙɉuÄ4Å����ÆÀ?ÝjÜ,ÅÐ?ÝjÙËÜ,ÕÈ?ÝjÙÂØÊÙÄØÊÞéÝ]ÐÝÍÀ?ÝjÝÕÀ?ÝjØáÙÉÜ,ÅÀ?ÝjÙÍØÉÙËØÍÞëÙÊÝ]ØÞËÞÉÞéÝ]àè:��EЃì‰$èt��ƒì‰<$èq��ƒì‰4$èf��‹EÄÀ?Ýjƒì‰$èS��ƒìè ��ûð���…÷þÿÿeô[^_]ô&����ÇD$01ÞjÇ$0Þjè¬<��éÍþÿÿ´&����U‰åƒì(€=ü@Ýj�uÇD$D1ÞjÇ$0Þjè}<��Ç$���葜��Ýð<ÝjƒìÙàÝ\$Ýè<ÝjÙàÝ\$Ýà<ÝjÙàÝ$èÆœ��ƒìÇ$ø<Ýjè§œ��ƒìÇ$(=Ýj蘜��ƒìÇ$=Ýj艜��Ý=ÝjƒìÙàÝ\$Ý�=ÝjÙàÝ\$Ýø<ÝjÙàÝ$ènœ��ƒìÇ$à<ÝjèOœ��ƒìÇ$=Ýjè@œ��ƒìÇ$(=Ýjè1œ��Ý =ÝjƒìÙàÝ\$Ý=ÝjÙàÝ\$Ý=ÝjÙàÝ$èœ��ƒìÇ$à<Ýjè÷›��ƒìÇ$(=Ýjèè›��ƒìÇ$ø<ÝjèÙ›��Ý8=ÝjƒìÙàÝ\$Ý0=ÝjÙàÝ\$Ý(=ÝjÙàÝ$è¾›��ƒìÇ$à<Ýj蟛��ƒìÇ$ø<Ýjè›��ƒìÇ$=Ýjè›��ƒìÉé8›��´&����U‰åƒì(€=ü@Ýj�uÇD$Y1ÞjÇ$0ÞjèÝ:��Ç$���èñš��Ýð<ÝjƒìÙàÝ\$Ýè<ÝjÙàÝ\$Ýà<ÝjÙàÝ$è&›��ƒìÇ$ø<Ýjè›��ƒìÇ$(=Ýjèøš��ƒìÇ$=Ýjèéš��Ý=ÝjƒìÙàÝ\$Ý�=ÝjÙàÝ\$Ýø<ÝjÙàÝ$èΚ��ƒìÇ$à<Ýj诚��ƒìÇ$=Ýjè š��ƒìÇ$(=Ýj葚��Ý =ÝjƒìÙàÝ\$Ý=ÝjÙàÝ\$Ý=ÝjÙàÝ$èvš��ƒìÇ$à<ÝjèWš��ƒìÇ$(=ÝjèHš��ƒìÇ$ø<Ýjè9š��Ý8=ÝjƒìÙàÝ\$Ý0=ÝjÙàÝ\$Ý(=ÝjÙàÝ$èš��ƒìÇ$à<Ýjèÿ™��ƒìÇ$ø<Ýjèð™��ƒìÇ$=Ýjèá™��ƒìÉ阙��´&����U‰åWV‰ÖS‰Ã‰Èƒì<Áø‰Ç1Ï)Ç…É…¤���Ý(4ÞjÝ]ØW‰T$‰UÈÇ$���è1œ��‹Uȉ‰T$Ç$���èœ��‰‹…Ò‰Uàty…Àtu‹UàÙîƒÿ‹6ÝÙèÝ~:»���¶����‰]äÛEäÜMØÝ$Ý]Èèì›��‹EàÝØÝEÈÝ$èÓ›��ÝÞƒÃ9ûuÑ‹UàÝÝúÝÝþƒÄ<[^_]ÉMäÛEäÜ=(4ÞjÝ]ØéQÿÿÿ‹Eà‰$èM›��‹‰$èC›��Ç$p1Þjèg8��‹‰]àé`ÿÿÿ¶����¼'����U‰åWVSƒìl‹uÝEÝ]È‹]ÝE…ö‰ðÝ]°Ž¥��‰EÔÛEÔÜ}°€=ü@Ýj�Ý]¨„s��‰Ù÷ÙUàEäè£þÿÿ…öˆ«���ÇE¼����Ùî9u¼Ý]À„‹���¶����Ç$���èô—��ƒì…Û~R1ÿ‹EäÙîÝ\$Ýø‹EàÝ\$ÝøÝ$è-˜��‹EäƒìÝEÀÝ\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øƒÇÝ$è ˜��ƒì9û°è¦—��ƒE¼;u¼|ÝEÀÜE¨9u¼Ý]À…{ÿÿÿÝE°Ý]ÀépÿÿÿÇ$���èd—��ƒì…Û~y1ö‹EäÙîÝ\$Ýð‹EàÝ\$ÝðÝ$è—��‹EäƒìÙîÝ\$ÝEÈÜ ð‹EàÝ\$ÝEÈÜ ðÝ$è~—��‹EäƒìÝE°Ý\$ÝEÈÜ ð‹EàÝ\$ÝEÈÜ ðƒÆÝ$èS—��ƒì9ó‰èï–��‹Eä‰$è„™��‹Eà‰$èy™��eô[^_]Â�ÇD$œ1ÞjÇ$0Þjè‹6��étþÿÿ¸���éQþÿÿ¶����¿����U‰åWVSìŒ���‹]ÝE€=ü@Ýj�Ý]È‹uÝEÝ]¨„$��‰Ù÷ÙUàEäèÖüÿÿÇ$���èJ–��ÙèƒìÙàÝ\$ÙîÝT$Ý$Ù]ˆèŽ–��ƒìÙEˆÝT$ÝT$Ý$耖��ƒì…ÛÙEˆˆâ��ÝØ1ÿ¶����Ùî‹EäÝ\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øƒÇÝ$èA–��ƒì9û}ÒèÝ•��<Ý����Ç$���躕��ƒìÙèÝ\$ÙîÝT$Ý$è–��ƒìÝE¨Ý\$ÙîÝT$Ý$èó•��‰]Àƒìt&�‹EäÝE¨Ý\$ÝEÈÜ 8‹EàÝ\$ÝEÈÜ 8ƒïÝ$èÀ•��ƒìƒmÀyÏèZ•��…öŽá���‰uÔÛEÔÜ}¨ÇE´���9u´ÝU Ý]ÀÙîÝ]¸„²���Ç$���è•��ƒì…Ûxz1ÿÙî‹EäÝ\$Ýø‹EàÝ\$ÝøÝ$èK•��‹EäƒìÝE¸Ý\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øÝ$è+•��‹EäƒìÝEÀÝ\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øƒÇÝ$è�•��ƒì9û}ˆèœ”��ƒE´;u´|"ÝEÀÝU¸ÝE ÞÁ9u´Ý]À…NÿÿÿÝE¨Ý]ÀéCÿÿÿ‹Eä‰$è—��‹Eà‰$èû–��eô[^_]Â�ÇD$­1ÞjÇ$0Þjè 4��éÃýÿÿÙ]ˆè0”��Ç$���è”��ÙèPÝ\$ÙEˆÝT$Ý$è^”��ƒìÝE¨Ý\$ÙEˆÝT$Ý$èM”��ƒìéŽþÿÿ¶����¼'����U‰åWVSìŒ���‹u€=ü@Ýj�ÝEÝ]Ћ]„³��‰ñ÷ÙUàEäèúÿÿ UØEÜèúÿÿƒûŽ¥���ÇE´���‹EØ‹U´ÝЋEÜÝ]ÀÝÐÝ]ÈÇ$���è]“��ƒì…öxdÝEÀ1ÿÜMÐÝ]¸‹EàÝø‹EäÝøƒÇÝEÀÝ\$ÝT$ÙÉÝ$Ý]˜Ý]¨è“��ƒìÝE¸Ý\$ÝE¨ÜMÈÜMÐÝ\$ÝE˜ÜMÈÜMÐÝ$èa“��ƒì9þ}§èý’��ƒE´;]´bÿÿÿ…öŽª���ÇEÈ����Ç$���èÄ’��ƒì…Ûx}‹EÈ1ÿÁàt&�‹U܉E”Ýú‹UàÝØÉÙÉ‹UäÜ ‹UØÝúƒÇÝT$ÙÉÝT$ÙÊÝ$Ý]˜ÙÉÝ]¨Ý]ˆèÏ’��ÝEˆƒìÜMÐÝ\$ÝE¨ÜMÐÝ\$ÝE˜ÜMÐÝ$è²’��‹E”ƒì9û}èK’��ƒEÈ;uÈ^ÿÿÿ‹Eä‰$èÓ”��‹Eà‰$èÈ”��‹E܉$è½”��‹E؉$è²”��eô[^_]Â�ÇD$¿1ÞjÇ$0ÞjèÄ1��é4þÿÿë U‰åWVSìŒ���‹]€=ü@Ýj�ÝEÝ]È‹u„4��‰Ù÷ÙUàEäèøÿÿEÜ 6UØèøÿÿ…ö‹EØŽ%��‹UÜÝ@¸���Ý]ÀÝÝ]ÐÇ$���èc‘��ƒìÙèÝ\$ÙîÝT$Ý$Ù]ˆè©‘��ƒìÝEÈÝ\$ÙEˆÝT$Ý$蘑��ƒì…ÛxxÝEÀ<Ý����ÜMȉ]¸Ý]°¶����‹EäÝEÀÝ\$ÝEÐÜ 8‹EàÝ\$ÝEÐÜ 8Ý$èK‘��‹EäƒìÝE°Ý\$ÝEÐÜ 8‹EàÜMÈÝ\$ÝEÐÜ 8ƒïÜMÈÝ$è"‘��ƒìƒm¸y¡ƒîè¹��ƒþ‰u Ž9��ÝEÀ¿���Ý]¸ÇE¤���‹EØÝ8‹EÜÝ]ÀÝ8Ý]ˆÇ$���èm��ƒì…ÛÝEˆˆÐ���ÝEÀ1öÜMÈÝ]°ÝE¸ÜMÈÝ]¨‹EäÝEÀÝ\$ÝðØÉ‹EàÝ\$ÝðØÉÝ$Ý]ˆè…��‹EäƒìÝE°Ý\$ÝEˆÝðØÉ‹EàÜMÈÝ\$ÝðÞÉÜMÈÝ$è^��‹EäƒìÝE¸Ý\$ÝEÐÜ ð‹EàÝ\$ÝEÐÜ ðÝ$è.��‹EäƒìÝE¨Ý\$ÝEÐÜ ð‹EàÜMÈÝ\$ÝEÐÜ ðƒÆÜMÈÝ$è��ƒì9óÝEˆDÿÿÿÝ]ˆƒÇè”��‹E ƒE¤9E¤ÝEˆ}Ý]ÐÝEÀÝ]¸éÜþÿÿÝ]ÐÇ$���èX��ÙèƒìÙàÝ\$ÙîÝT$Ý$Ù]ˆèœ��ÝEȃìÙàÝ\$ÙEˆÝT$Ý$è‰��ƒì…ÛxhÝEÀ1öÜMÈÝ]°‹EäÝEÀÝ\$ÝEÐÜ ð‹EàÝ\$ÝEÐÜ ðÝ$èJ��‹EäƒìÝE°Ý\$ÝEÐÜ ð‹EàÜMÈÝ\$ÝEÐÜ ðƒÆÜMÈÝ$è!��ƒì9ó}£è½Ž��‹Eä‰$èR‘��‹Eà‰$èG‘��‹E܉$è<‘��‹E؉$è1‘��eô[^_]Â�ÇD$Î1ÞjÇ$0ÞjèC.��é³üÿÿÝ�1ÀÝ]À‹UÜéÚüÿÿë U‰åWVSì¼���€=ü@Ýj�ÝEÝEÝ]Єî��‹M…ÉŽ��‹]‹UƒÃ…Ò4[Ž��‹EƒÀ‰E¸¯u¸Ý]ˆÇ$���‰t$èÏ��‰t$Ç$���‰E¤è¼��‰E èŽ��[‹}¤Áà‰EÜ‹E ‰]àÇE¼����ÛE‰ÃÜ=(4ÞjÝ]°ÛEÜ=04ÞjÝ]ÈÙîÙÀÙèÙÊÝ]ÀÝEˆv�Ùî1öÙÀ1ÀÙèëkt&�ÜEȉ…dÿÿÿÝ$ÝXÿÿÿÙÊÝxÿÿÿÝhÿÿÿÝ]ˆè@��Ý…XÿÿÿÝ$ÝHÿÿÿè4��‹…dÿÿÿÝ…HÿÿÿÝ…XÿÿÿÝ…xÿÿÿÝ…hÿÿÿÝEˆÙËÙÊÙÍÙÉÙÌÙÃÀØÉÜEÐÙÀØÏÝ7ØÍÝ\7ÙÃØÊÝ\7ÙÅØÉÝ3ØÌÝ\3Ý\3ƒÆ;EàŒ]ÿÿÿÝØÝÙÝÙƒE¼‹U¸}Ü]Ü9U¼}9ÝEÀÜE°ÝUÀÝ$Ý]ˆè™��ÝEÀÝ$Ýxÿÿÿè��Ý…xÿÿÿÝEˆÙÉÙÊÙÉéüþÿÿÝØ‹]àÇ$���èkŒ��‹U ÇE¬����[ÁàÂE¤ƒì‰UȉEÐÇE¨����¶����‹E¤1Û1ÿ‹U¬‹u u¬‰Uà‹UÈF‰E¸‹EЃÂ‰U¼‹UàƒÀ‰EÀƒÂ‰U°‰4$ƒÇèFŒ��‹Eàƒì‰$è=Œ��‹E¸؃ì‰$è%Œ��‹E°؃ì‰$èŒ��‹E¼؃ì‰$èŒ��‹EÀ؃ì‰$èý‹��‹EÈ؃ì‰$èå‹��‹EÐ؃ì‰$èÝ‹��uÜ]܃ì9}rÿÿÿƒE¨‹E¨ƒE¬9E~‹UÀ‹E¼‰UЉEÈéÿÿÿèe‹��‹E¤‰$èú��‹U ‰$èï��è’‹��eô[^_]Â�Ý]ˆÇD$Þ1ÞjÇ$0Þjèù*��‹M…ÉÝEˆøüÿÿ‹U¾���»���ÇE���…ÒðüÿÿÇE¸���ÇE���éæüÿÿ¶����¿����U‰åWVSì¬���‹]€=ü@Ýj�ÝEÝEÝ]Є‹��…Û4[Ž¥��‹}…ÿޝ��¯uÝ]˜Ç$���‰t$èn��‰t$Ç$���‰E¸è[��‰E´è£Š��[‹}¸‰]äÁà‰EÜ‹E´‰]àÇE¼����ÛE‰ÃÜ=(4ÞjÝ]¨ÛEäÜ=04ÞjÝ]ÈÙîÙÀÙèÙÊÝ]ÀÝE˜Ùî1öÙÀ1ÀÙèëdv�ÜEȉ…tÿÿÿÝ$ÝhÿÿÿÙÊÝ]ˆÝxÿÿÿÝ]˜èãŒ��Ý…hÿÿÿÝ$ÝXÿÿÿè׌��‹…tÿÿÿÝ…XÿÿÿÝ…hÿÿÿÝEˆÝ…xÿÿÿÝE˜ÙËÙÊÙÍÙÉÙÌÙÃÀØÉÜEÐÙÆØÉÝ7ØÍÝ\7ÙÃØÊÝ\7ÙÅØÉÝ3ØÌÝ\3Ý\3ƒÆ9EàcÿÿÿÝØÝÙÝÙƒE¼‹E¼}Ü]Ü9E~3ÝEÀÜE¨ÝUÀÝ$Ý]˜è?Œ��ÝEÀÝ$Ý]ˆè9Œ��ÝEˆÝE˜ÙÉÙÊÙÉé ÿÿÿÝØ‹]àÇEÐ����ÇEà����‰]ÈfÇ$���1Ûè‰��‹}´‹u¸}àuàƒìv�‰<$ƒÃè-‰��ƒì‰4$è*‰��}Üu܃ì9]Üè׈��ƒEЋEЃEà9Eȧ‹]ÈÇEÐ����ÇEÈ����‰]àv�Ç$���1öè’ˆ��‹]´‹}¸]Ð}Ѓìv�‰$ƒÆƒÃ躈��ƒì‰<$ƒÇè´ˆ��ƒì9uàÜègˆ��‹E܃EÈEЋEÈ9E¥‹E¸‰$èêŠ��‹E´‰$èߊ��肈��eô[^_]Â�Ý]˜ÇD$í1Þj4[Ç$0Þjèæ'��…ÛÝE˜[ýÿÿ‹}¾���»���…ÿQýÿÿÇE���éEýÿÿv�¼'����U‰åWVSì¬���‹uÝEÝ]¨‹]ÝE…ö‰ðÝ] ŽX��‰EÔÛEÔÝE ØñÝ]ˆÜ}¨Ý]ÝE ØÈÝE¨ØÈÞÁÙÀÙúÙÀÝàßàžzt,ÝØÙÉëÝØÙÉÝ$ÝhÿÿÿÛ½xÿÿÿècŠ��Û­xÿÿÿÝ…hÿÿÿÙÊÜ} Ý]¸ÝàßàžztÝØëÝØÝ$è8Š��ëÝÙ€=ü@Ýj�ÝE¨Þñ„¥��‰Ù÷ÙUàEäÝxÿÿÿè…íÿÿ…öÝ…xÿÿÿŽº���ÝE¨Ý]ÈÙîÝ]ÀÇE´����Ý]˜fÇ$���èÔ†��ƒì…Û~h1ÿÝE˜‹EäÝE¸Ý\$ÝøØÉ‹EàÝ\$ÝøØÉÝ$Ýxÿÿÿèÿ†��‹EäƒìÝEÀÝ\$ÝEÈÜ ø‹EàÝ\$ÝEÈÜ øƒÇÝ$è܆��ƒì9ûÝ…xÿÿÿŸÝØèp†��ƒE´;u´~ÝEÀÜEˆÝ]ÀÝEÈÜeÝ]Èé`ÿÿÿÝE˜ÝxÿÿÿÇ$���è+†��ƒì…ÛÝ…xÿÿÿŽ~���1ö‹EäÝE¸Ý\$ÝðØÉ‹EàÝ\$ÝðØÉÝ$ÝxÿÿÿèO†��‹EäƒìÙîÝ\$ÝE¨Ü ð‹EàÝ\$ÝE¨Ü ðƒÆÝ$è-†��ƒìÝE Ý\$ÙîÝT$Ý$è†��ƒì9óÝ…xÿÿÿˆÝØëÝØè¥…��‹Eä‰$è:ˆ��‹Eà‰$è/ˆ��eô[^_]Â�ÝxÿÿÿÇD$û1ÞjÇ$0Þjè;%��Ý…xÿÿÿé6þÿÿ¸���éžýÿÿ¶����U‰åWVSìÌ���‹]ÝEÝEÝU‹uÙÀÞÉÙÁØÊÞÁÙÀÙúÙÀÝàßàžztBÝØÙÉëÝØÙÉÝ$ÙÊÝXÿÿÿÙÉÝhÿÿÿÛ½Hÿÿÿèì‡��Û­HÿÿÿÝ…hÿÿÿÝ…XÿÿÿÙËÙÉÙÊÙÉÜ}Ý]°ÝàßàžztÝØëÝØÝ$ÝXÿÿÿ诇��Ý…XÿÿÿÙÉëÝÙØù€=ü@Ýj�Ý] „���‰Ù÷ÙUàEäÝXÿÿÿèôêÿÿÇ$���èh„��ÙèƒìÙàÝ\$ÙîÝT$Ý$Ùhÿÿÿè©„��ƒìÙ…hÿÿÿÝT$ÝT$Ý$蘄��ƒì…ÛÝ…Xÿÿÿx;1ÿ‹EäÙîÝ\$ÝøØÉ‹EàÝ\$ÝøƒÇØÉÝ$ÝXÿÿÿè]„��ƒì9ûÝ…Xÿÿÿ}ÈÝXÿÿÿèíƒ��~ÿ…ÿÝ…XÿÿÿŽr��…öŽ`��‰uÔÛEÔÝEØñÇEœ����ÝU€ÙÉØúÝUˆØêÝ]ÈÙÉÝ]ÀÝ]¸ÙîÝ]¨¶����Ç$���脃��ƒì…Ûˆ˜���1öÝE t&�‹EäÝE°Ý\$ÝðØÉ‹EàÝ\$ÝðØÉÝ$Ýhÿÿÿ觃��‹EäƒìÝE¨Ý\$ÝEÀÜ ð‹EàÝ\$ÝEÀÜ ðÝ$臃��‹EäƒìÝE¸Ý\$ÝEÈÜ ð‹EàÝ\$ÝEÈÜ ðƒÆÝ$è\ƒ��ƒì9óÝ…hÿÿÿsÿÿÿÝØèì‚��ƒEœ;}œ~ÝE¸ÝU¨ÝEÈÝUÀÝEˆÞéÝ]ÈÜE€Ý]¸é$ÿÿÿÝEÈÝXÿÿÿÇ$���蟂��‹EäƒìÝE°Ý\$ÝE Ü‹EàÝ\$ÝE ÜÝ$èÙ‚��ƒì…ÛÝ…Xÿÿÿޏ���¾���1ÿ‹EäÝE¸Ý\$ÝøØÉ‹EàÝ\$ÝøƒÇØÉÝ$ÝXÿÿÿ蜂��ƒìÝEÝ\$ÙîÝT$Ý$è„‚��‹EäƒìÝE°Ý\$ÝE Ü 0‹EàÝ\$ÝE Ü 0Ý$èT‚��‹EäƒìÝE¸Ý\$Ý…XÿÿÿÝ0ØÉ‹EàÝ\$Ý0ƒÆÞÉÝ$è-‚��ƒì9ûÝ…XÿÿÿTÿÿÿÝØëÝØè¹��‹Eä‰$èN„��‹Eà‰$èC„��eô[^_]Â�ÝXÿÿÿÇD$2ÞjÇ$0ÞjèO!��Ý…XÿÿÿéÛüÿÿ¾���é–ýÿÿÙîÝ]¸éŸþÿÿU‰åW‰×VS¶€ù+t@€ù-¾���tFQÐ1Û€ú w›¾ÉƒÀ\QжQЀú vèƒþÿ‰u÷Û‰Ø[^_]Ãt&�ƒÀ¾���¶ë½v�ƒÀ¾ÿÿÿÿ¶ë­v�U‰å‹E ‹U…À‰à@Ýj£ä@Ýjx…Òx Æè@Ýj]Â�Æè@Ýj�]Â�´&����¼'����U‰å‹E ‹U…À‰ì@Ýj£ð@Ýj~…Ò~ Æô@Ýj]Â�Æô@Ýj�]Â�´&����¼'����U‰å‹E]£ø@ÝjÂ�U‰å‹E£lAÝj‹E ]£pAÝjÂ�‰ö¼'����U‰å‹E]£tAÝjÂ�U‰å‹E]£xAÝjÂ�U‰åWVSƒì,‹u‰4$è ƒ��‰Ã@‰$诂��‰\$‰t$‰Eà‰$èô‚��‹EàÆ�1ÛÇD$@4Þj‰$èó‚��ÇEä����…À‰Ætz¶����ÇD$C4Þj1Û‰4$辂��‰ÇëƒÃƒû%t)‹€8Þj‰|$‰4$‰D$裂��…Àu݃û%wfÿ$€4Þj‰t$Ç$L4Þjè¹��ÇD$@4ÞjÇ$����èu‚��…À‰Æu‹]ä‹Eà‰$èá��‰ø@ÝjƒÄ,[^_]Â�Mä���뿃Mäë¹Mä€���ë°ƒMä몃Mä뤃Mä ëžMä���ë•Mä���댃Mä놃Mä뀉ö¼'����U‰åSƒì€=ü@Ýj�„<��¡ÀÁÞj…Àt‰$è[��ÇÀÁÞj����èÌ]��‹ AÝj…ÛtJf‰\$Ç$ AÝjè W��‰$è(��‹ AÝj…ÛuÞ‹(AÝj…Ût&t&�‰\$Ç$(AÝjèpW��‰$èø€��‹(AÝj…ÛuÞ€=`AÝj�…‘��€=aAÝj�…–��Æ`AÝj�ÆaAÝj�ÇlAÝj���ÇpAÝj����ÇtAÝj����ÇxAÝj����Æü@Ýj�Çà@ÝjÿÿÿÿÇä@ÝjÿÿÿÿÆè@Ýj�Çì@Ýj,��Çð@Ýj,��Æô@ÝjÇø@Ýj���Ç�AÝj���ÆAÝj�ÆAÝj�ÆAÝj�ÆAÝj�ÇTAÝj����ÇXAÝj����ÇAÝj���Ç AÝjÿÿÿÿÇ@AÝj€��ÇDAÝjà��ÇLAÝj���ÇPAÝjH���Ç$ AÝjèåU��Ç$(AÝjèÙU��¡\AÝjÇ0AÝj����Ç8AÝj����Ç<AÝj����…ÀÇAÝj����ÇAÝj����ÇAÝj����t‰$è|��Ç\AÝj����Ç$���è6~��‹]üÆü@Ýj�ƒìÉô&����è«��€=aAÝj�„jþÿÿèy��é`þÿÿt&�Ç$5ÞjèÔ��‹]üÉÃë U‰åƒìÉé„ýÿÿt&�U‰åWVSƒìl‹E€=ü@Ýj�‹U ‹�‰E¬…��…Àt…Òt‹…Àv�t €8�…���‰U èT��èX-��Ç$µ5Þj£AÝjè/��‹U …Àt*Mä‰L$ÇD$¾5Þj‰$èÁ~��‹Eä‹U …ÀŽ|��£AÝj‰U Ç$Á5Þjèï~��‹U ƒ}¬ÇE¨����Ž›���»���‰U´ë,ƒÃ9]¬Ž��‹E‹M´ƒ(ÇD™ü����Ç™����ƒÃ9]¬~b‹E´¿É5Þj¹ ���˜‰E°‹�‰Æó¦t¹¹ ���‰Æ¿6Þjó¦…†���ƒÃ9]¬ŽØ��‹U´š‹ÇDšü����ƒÃÇ�����‹E‰M¨ƒ(9]¬ž‹U´‹E¿���¾���ƒ8ŽÆ���f‹²NŠ…ÛtëƒÁ‹ƒÀ‰Î…Ûtò9÷t‰º‹MƒÇ99Ž‘���ƒÆëÈ¿U6Þj¹���‰Æó¦u=‹ �AÝj…É„b��‹E°‹UÇ�AÝj���Ç�����ƒ*éÿÿÿÇ$Ô5ÞjèP��éÞþÿÿ¿¥6Þj¹ ���‰Æó¦…��ƒ=�AÝj„¡��‹M°‹EÇ�AÝj����Ç����ƒ(é·þÿÿÇ$����]¸èý~��ƒì£ìÁÞj‰\$ÇD$Æ6Þj‰$è¹}��ƒì f…À„��Ç$����è©}��ƒì£ŒÂÞjÇ$���è•}��ƒì£ÂÞjè}��‰Æ‰$èŽ}��ƒì‰ÃÇD$���‰$è {��ƒì£”ÂÞjÇD$���‰$èñz��ƒì£˜ÂÞj‰\$‰4$èU}��ƒìÇ$���èöz��Æü@Ýjƒìèÿ��‹E¨…À„ð���‹E¨¶„Ò„Î���€ú=„]��€ú-t.€ú+t)1ö1Û€úxt;‹E¨UàèÏ÷ÿÿ‹Mà9M¨„›���‰Æ¶³ë‹M¨1ö1Û€úXt €úxÇE´����u#‰M¨‹}¨UàƒÇ‰øè÷ÿÿ‹Mà9Ït`‰E´¶ƒË€ú-…»��ƒÁ}à‰È‰ú‰M°èd÷ÿÿ‹Mà9M°t4÷؃ˉE°¶ƒË€ú-…Ã��ƒÁ‰ú‰È‰M è6÷ÿÿ‹Uà‹M 9Ñ…��Çì@Ýj����Çð@Ýj����eô[^_]Â�Ç$6Þjè.��éýÿÿ¿¯6Þj¹���‰Æó¦u‹E°‹UÆAÝjÇ�����ƒ*é©üÿÿ¿·6Þj‰Æ¹ ���ó¦„Ê��¿À6Þj¹���‰Æó¦…üÿÿ‹U°‹MÆAÝjÇ����ƒ)éfüÿÿ1À¹ ���‰ßó«¡ìÁÞjÇE¼à®ÜjÇD$Ï6Þj‰Eȉ$è™{��ÇE¸#���ƒì…À‰EÌ„:��ÇD$���Ç$����è {��ÇEÔ����ÇEØ����ÇEÜÆ6Þjƒì‰EЉ$èE{��ƒìf…À…dýÿÿÇD$Ù6ÞjÇD$ç6ÞjÇ$7Þjè��éCýÿÿÇ$`6Þjè ��éüÿÿ‰U Ç$X5Þjèø��‹M‹U ‹éÜúÿÿ1À€ú+ÇE°����„a��„Ò…yþÿÿöÃt ‹U°‰à@ÝjöÃt£ä@ÝjöÄ«���öÃt‹M´‰M¤‹E¤‰5ì@Ýj£ð@Ýj‰Øƒà ƒø uÆô@ÝjöÃt¡ŒÂÞjà@Ýj+ì@Ýj£à@Ýj‰Øƒãƒà …Àt¡ÂÞjä@Ýj+ð@Ýj£ä@Ýjƒû…üýÿÿÆè@Ýjeô[^_]Â�ÇAÝjˆ��ézúÿÿ‹M°‹EÆAÝjÇ����ƒ(é°úÿÿ1ööÃ…OÿÿÿéPÿÿÿ‰U ‰$èªx��‹U …À£\AÝj…åùÿÿÇ$„5ÞjèÎ��‹U éÑùÿÿ¶����ƒÀ‰E¨¶é•üÿÿ1À€ú+…ÎþÿÿƒÁ‰ú‰È‰M èhôÿÿ‹Uà‹M 9ÑuAé1ýÿÿÇ$`6Þjè}��éNûÿÿƒÁ}à‰È‰ú‰M¬è6ôÿÿ‹Mà9M¬‰E°…Óüÿÿéúüÿÿ÷ØƒË ƒË¶éiþÿÿÇD$��Ç$����è6y��RR‰EÌé¨ýÿÿt&�U‰åƒì‹E£ÀÞj‹E ‰D$‹E‰$èÐøÿÿƒìÉ �U‰åSƒì€=aAÝj�tX‹ ÀÞj…Ût=C‰D$‹‰$èz��Cƒì‰D$‹‰$èùy��‹ƒì‰$è´y��ƒì‰$èiw��Ç ÀÞj����ÆaAÝj�‹]üÉÃv�U‰Á‰å1ÀƒìH…ɈUät+Eô‰D$ EäÇD$����ÇD$���‰D$‹‰$è_y��ƒìÉÃfU‰åìˆ���€=aAÝj�‰]ô‰uø‰}üt ‹]ô‹uø‹}ü‰ì]ÃÇ$ 9Þjèdw��…À„g��U¬1ÉÇ ����ƒÁƒùrñÇE¬���ÇD$����ÇD$€���ÇD$���ÇD$ ����ÇD$����ÇD$���À‰$‰U¤èÎx��ƒì…À‰Æ„õ���Ç$4���èuv��¹ ���‰Ã1À‰ßó«C‰3‰4$‰D$èŸx��Cƒì‰4$‰D$è•x��‹U¤ÇE¬���ƒì‰T$Ç$V9Þjè€x��‹U¤ƒì‰T$‰4$èvx��EÈÇEÈ����ÇEÌ����ÇEÔ����ÇEÐ���ÇEØ���ƒì‰4$‰D$èIx��‹ƒì‰$èLx��º ���‰Ø‰ ÀÞjƒìè_þÿÿÇD$����ÇD$МÜjÇ$ ���ècÿÿ‹]ô‹uø‹}üÆaAÝjƒì ‰ì]ÃÇ ÀÞj����éxþÿÿEÜÇEä���ÇEà���‰D$ÇD$29ÞjÇ$��€èÔw��ƒì …À…DþÿÿEä‰D$Eà‰D$ ‹EÜÇD$@ÀÞjÇD$����ÇD$D9Þj‰$è w��ƒì…Àt‹E܉$è–w��ƒìéùýÿÿ‹E܉$èƒw��¸@ÀÞjƒìéþÿÿ¶����U‰åƒìèµýÿÿ‹ ÀÞj1À…Òt 1À€=aAÝj�•ÀÉÃt&�¼'����U‰åƒì(‰]ô‹]‰uø‹u ‰}ü‹»˜���…ÿt‰$èYe��‹F‹P‰T$‹�‰$ÿ׉t$‰$ÇD$pœÜjètK��‹]ô‹uø‹}ü‰ì]ô&����U‰åWVSƒìL¡ ÀÞj…ÀtVuà]ç}Ðt&�ÇD$����‰t$ ÇD$���‰\$‹�‰$è~v��ƒì…Àu'ÇD$����ÇD$МÜjÇ$���è«}ÿÿƒì eô[^_]Ã}àuÓ¡€AÝj¶Uç…À~4ƒø„Ä���ƒøtO…Àuƒê0‰dÁÞjÇ€AÝj���¡ ÀÞj…À…kÿÿÿë’JЃùvăú „ ���¡ ÀÞj‹�‰$èñu��ƒìëÌt&�¡`ÁÞj Ðf…À£`ÁÞjy -���£`ÁÞj‹dÁÞjÆEØ�‰}ÜÇ$pœÜj‰•@ÁÞjiÀh��ƒÂ‰UЉÂÁúÁêÁø‰EÔE؉D$èAK��Ç€AÝj����éZÿÿÿfÁâ‰`ÁÞjÇ€AÝj���é@ÿÿÿ¡ ÀÞj²PÆaAÝjÇ€AÝj����èkûÿÿ¡ ÀÞjºÿ���è\ûÿÿ¡ ÀÞjºÿ���èMûÿÿé�ÿÿÿU‰åƒì€=ü@Ýj�uÇD$`9ÞjÇ$|9Þjè��‹E‹M‹U ‹…€ÁÞj‰Œ|��ÉÃt&�U‰åƒì€=ü@Ýj�uÇD$¼9ÞjÇ$|9Þjè]��‹E‹U ‹…€ÁÞjÙ„|��Éô&����U‰åƒì€=ü@Ýj�uÇD$Ö9ÞjÇ$|9Þjè��‹E‹M‹U ‹…€ÁÞj‰Œ\��ÉÃt&�U‰åƒì€=ü@Ýj�uÇD$î9ÞjÇ$|9ÞjèÝ��‹E‹U ‹…€ÁÞjÙ„\��Éô&����U‰åƒì€=ü@Ýj�uÇD$:ÞjÇ$|9Þjè��‹E‹…€ÁÞj¶€Ð��ÉÃv�¼'����U‰åƒì€=ü@Ýj�uÇD$:ÞjÇ$|9Þjè]��‹E‹…€ÁÞj‹€X��ÉÃt&�¼'����U‰åƒì€=ü@Ýj�uÇD$7:ÞjÇ$|9Þjè��‹E‹…€ÁÞj‹€T��ÉÃt&�¼'����U‰åƒì€=ü@Ýj�uÇD$N:ÞjÇ$|9ÞjèÝ ��‹E‹…€ÁÞj‹T��œ��‰D$‹E Áâ‰T$‰$èêp��ÉÃU‰åƒì€=ü@Ýj�uÇD$d:ÞjÇ$|9Þjè ��‹E‹…€ÁÞj‹T��¼��‰D$‹E Áâ‰T$‰$èšp��ÉÃU‰åƒì€=ü@Ýj�uÇD$|:ÞjÇ$|9Þjè= ��‹E‹…€ÁÞj‹T��Ü��‰D$‹E Áâ‰T$‰$èJp��ÉÃU‰åƒì€=ü@Ýj�uÇD$”:ÞjÇ$|9Þjèí ��‹E‹…€ÁÞjœ��‹€T��‰$Áà‰D$‹E ‰D$èùo��ÉÃë U‰åƒì€=ü@Ýj�uÇD$ª:ÞjÇ$|9Þjè ��‹E‹…€ÁÞj¼��‹€T��‰$Áà‰D$‹E ‰D$è™o��ÉÃë U‰åƒì€=ü@Ýj�uÇD$Â:ÞjÇ$|9Þjè- ��‹E‹…€ÁÞjÜ��‹€T��‰$Áà‰D$‹E ‰D$è9o��ÉÃë U‰åWVSìœ���‹M…É„€��‹E‹P|…Ò„r��ÇE”����}Èu¨‹U”‹•€ÁÞj…Û„E��€»Ð���…Ä��‹ƒT��…ÀŽÙ��‹“T��1Àdž�€»DƒÀ9Ð|ò€»Ð���„¶��‹“T��‰Ñ‰]ˆÇE„����…Éމ���‹‹T��1ÒÙèë7Ü騤“Ü��ÞùÙ„“|��ÙÀÙàÝêßàž†×���ÝØÝØÙèÙàëÝØÙ—ƒÂ9Ê}Dٖل“œ��Ýáßàžw¸Ü騬“¼��ÞùÙ„“|��ÙÉÝáßàž†Ã���ÝØÝØÙèÙ—ƒÂ9Ê|ÀÝØëÝØ‹Uˆ€ºÐ���uX‹E‹X|…ÛtN‰$è]^��‹U„‰$Ù}¢Ù8<ÞjÙEÐØÉ·E¢´ f‰E Ùm Û\$ Ùm¢ÙEÌØÉÙm Û\$Ùm¢ØMÈÙm Û\$Ùm¢ÿÓƒE”ƒ}”…›þÿÿeô[^_]ÃÙ„“\��ÙÀÙàÙËÝãßàÝÛžwJÜÂÞéÞùÙèÙàÝáßàž†ÿÿÿÝÙéÿÿÿÙ„“\��Ýáßàžw(ÜéÞêÞñÝáßàž†äþÿÿÝØÙÀéÛþÿÿ¶����ÝØÝØÝØëÝØÝØÝØÙîéÀþÿÿ‹“T��…ÒŽeþÿÿ1ÀLJ����ƒÀ9Ð|òé-þÿÿƒ”��‰D$‹ƒÈ��‰$èPk��ƒì…À…E��‹‹T��‹“´��ƒù‰U„v‹E”‹…€ÁÞj‰Eˆéþÿÿÿ$Ü:Þj·ƒ¼��=ÿÿ��„J��‰EˆÇEŒ����ßmˆÜ 0<Þj‰M€Ý$ÝhÿÿÿèRl��Ù]¤ÙE¤Ý…hÿÿÿÝ$Ùhÿÿÿè0l��‹M€Ù]¤ÙE¤Ù…hÿÿÿÙÀÙáÙÂÙáÚéßàž†Ì���ÙîÝêßàž†ð���Ùà¸��€¿ÞñÙ]À‰EÄ‹ƒ°��1Ò‰UŒ‰EˆßmˆÙ]¼‹ƒ¬��1Ò‰UŒ‰EˆßmˆÙ]¸‹ƒ¨��1Ò‰UŒ‰EˆßmˆÙ]´‹ƒ¤��1Ò‰UŒ‰EˆßmˆÙ]°‹ƒ ��1Ò‰UŒ‰EˆßmˆÙ]¬1Ò‹ƒœ��‰UŒ‹U”‰Eˆ‹•€ÁÞjßmˆÙ]¨‰UˆéôüÿÿƃÐ��‹E”‹‹T��ÇE„����‹…€ÁÞj‰EˆéÎüÿÿÙîÝéßàžv7ÙÉÙàÞñÇEÀ��€¿Ù]Äé2ÿÿÿÇEÀ����ÇEÄ����éÿÿÿÞñ¸��€?Ù]Àé ÿÿÿÇEÀ��€?ÞùëËë U‰åƒì¡€ÁÞj…Àt‰$è‰j��Ç€ÁÞj����¡„ÁÞj…Àt‰$ènj��Ç„ÁÞj����ÉÃfU‰åìX��‰]ô‰Ã‰}ü‰×‰uø€¸Ð���t1À‹]ô‹uø‹}ü‰ì]Ãf@pµàþÿÿÇD$�;Þj‰D$ÇD$ ;ÞjÇD$Q;ÞjÇD$���‰4$è‹j��Eä‰D$ÇD$ ���ÇD$����‰t$Ç$��€è|l��ƒì…ÀuŒÇD$Z;Þj‹ƒÈ��àýÿÿÇD$b;ÞjÇD$���‰4$ƒÀ‰D$ ÇEà���è#j��Eà‰D$‹Eä‰\$ÇD$ ����ÇD$����‰t$‰$èl��‰Â‹Eäƒì‰•Ôýÿÿ‰$èók��‹•Ôýÿÿƒì…Ò…ÿÿÿ‰\$ÇD$ p;ÞjÇD$À;ÞjÇD$���‰4$è®i��Eä‰D$ÇD$ ���ÇD$����‰t$Ç$��€èŸk��ƒì…À…«þÿÿEà‰D$‹EäÇEà€���‰|$ÇD$ ����ÇD$����ÇD$Z;Þj‰$èOk��‰Ã‹Eäƒì‰$èGk��1Àƒì…Û”ÀéYþÿÿ´&����U‰åWVSƒì,€=`AÝj�…!��1ö‹µ€ÁÞj…Àt Ç$È;Þjè‘��ÇD$���Ç$ü��èh��ƒþ‰µ€ÁÞj‰ÃÇ€X������Ç€T������Æ€Ð��„ä���Ç€È������Æ€Ð���öÉßƃÐ��º”��ǃX������ǃT������ƃÑ���ǃ˜��ÿ���ǃ”��4���…y��÷Ç���…}��‰Ñ1ÀÁéöÂó«udƒâuZ‹ƒÈ��ÇD$”��‰\$‰$èxf��‹{hƒì …À•ƒÐ��…ÿu]ǃT������ƃÐ��ƒÆƒþ…èþÿÿÆ`AÝjeô[^_]ÃÆ�ë¡fÇ��ƒÇƒât”ëìÇ€È�����Æ€Ð���éÿÿÿ¶����»Ñ��‰Ø‰úè±üÿÿ…À„��öC`…O��ǃT�����‹CX1Ò‰Uä1Ò‰Eà‹C\ßmàÙ›ð��‰Uä1Ò‰Eà‹CPßmàÙ›Ð��‰Uä1Ò‰Eà‹CTßmàÙ›ì��‰Uä1Ò‰Eà‹CHßmàÙ›Ì��‰Uä1Ò‰Eà‹CLßmàÙ›è��‰Uä1Ò‰Eà‹C4ßmàÙ›È��‰Uä1Ò‰EàßmàÙ›ä��‹C8‰Uä1Ò‰Eà‹C,ßmàÙ›Ä��‰Uä1Ò‰Eà‹C0ßmàÙ›à��‰Uä1Ò‰Eà‹C$ßmàÙ›À��‰Uä1Ò‰Eà‹C(ßmà‰Uä‹“T��Ù›Ü��‰Eàßmà…ÒÙ›¼��Ž‹þÿÿ1ÀÙ<<ÞjÙ„ƒ¼��Ø„ƒÜ��Ç„ƒ\������Ç„ƒ|����€?ØÉÙœƒœ��ƒÀ9Ð|ÌÝØéHþÿÿt&�ǃT�����ǃø����€¿ÇƒØ����€?ǃô����€¿ÇƒÔ����€?é„þÿÿÇ$ü;Þjè��CÇD$€���‰D$‰<$èîe��éHþÿÿÆ�{²“ézýÿÿv�fÇ��ƒêƒÇésýÿÿU‰åƒìè•üÿÿ€=`AÝj�t0‹€ÁÞj…Òt€ºÐ���¸���t¡„ÁÞj…Àt€¸Ð���”À¶ÀÉÃ1ÀÉÃU‰åVS»���ƒìÇ$ ���èf��ƒìf…ÀxÇ$¡���èóe��¿ØƒìÁëÇ$¢���èÞe��ƒìf…ÀxMÇ$£���1öèÈe��ƒìf…Àx7Ç$¤���è´e��ƒìf…Àx,Ç$¥���è e��1Òƒìf…Àx‰ð Øeø Ð[^]þ���ëÂf‰ðº��� Øeø Ð[^]ô&����¼'����U‰åƒì‹E‹U €x,�t €x-�tƉB‰T$ÇD$ð¬Üj‰$è;��Éö����¿����U‰åƒì‹E‹U ‹H|…ÉtƉB‰T$ÇD$0­Üj‰$èÓ:��ÉÃU‰åSƒì‹]€{,�t€{-�u‹E ‰$ÇD$`­Üj‰D$è£:��‹]üÉÃÆC,�ÇD$ #��ÇD$����ÇD$����‹C ‰$èŸd��ƒìë¸fU‰åVSƒì‹¸ãÞjÇD$ ���u ÇD$���Ç$@<ÞjƒÃ@‰\$ è¼c��¡\AÝj…Àt‰D$ÇD$J<Þj‰$èc��‹E‰t$‰$‰D$è”c��‰\$Ç$ ���èŒc��ƒÄ[^]Ãt&�U‰åVSƒì‹¸ãÞjÇD$ ���u ÇD$���Ç$@<ÞjƒÃ@‰\$ è<c��¡\AÝj…Àt‰D$ÇD$J<Þj‰$èŸb��‹E‰t$‰$‰D$èc��‰\$Ç$ ���è c��€=ü@Ýj�uÇ$���èob��´&����è»àÿÿëæ‰ö¼'����U‰åìØ��€=ü@Ýj�‰uø‹u ‰}ü‹}‰]ô„l��‰<$èÓ:��…À‰Ã„€��þ���„��v;þ��†Ÿ��þ��‡×��þ��ƒ“��†üýÿÿƒø‡��é��v�ƒþ¸ ���„ô���f‡š��ƒþ„i��‡ü��0Àƒþ„Ñ���ƒþ„ì��ƒþ…½��‹M‹…Û„Õ��‰{ ‰<$èub��ƒì€»È����‰C„„ ��‹5ø@ÝjÇD$����Çø@Ýj���ÇD$����‰$èÊV��¡ÀÁÞj‰5ø@Ýj…À„T��‹�‰D$‹C‰$è¶^��ƒì‹C‰$è¸^��ƒì‰C‹{ÆCF…ÿˆE ��‹s …öˆ: ��‹C‰D$‹C ‰$èÞa��¸���ƒì‹]ô‹uø‹}ü‰ì]Â�ÇD$Q<ÞjÇ$`<Þjè»ýÿÿ‰<$èS9��…À‰Ã…€þÿÿƒþ„wþÿÿ‹E‹U‰t$‰<$‰D$ ‰T$èæa��‹]ô‹uø‹}üƒì‰ì]Â�t&�þ��‚œ��·E‹U‰C<Áê=ÿ��‰S@­��úÿ��~ ê���‰S@†ÿýÿÿƒøÇ…|þÿÿÿÿÿÿÆ…xþÿÿ�w¶–B>Þj‹…`@Þjˆ•xþÿÿ‰…|þÿÿÇ$���èÖ`��ƒì…À„Ë��‹…|þÿÿ…À…í ��Ç…|þÿÿ���‹C@‹•|þÿÿ‰D$‹C<‰T$‰$‰D$ ¶…xþÿÿ‰D$è˜��„À…$��€½xþÿÿ„ú ��è®`��‹s`…ö„��‰$è+P��èfúÿÿ‹s`…ö£ AÝj„��‰$èP��‹C@‹|þÿÿ‰D$ ‹C<‰ $‰D$1À€½xþÿÿ�”À‰D$ÿÖéæ���ƒþ„—��´&����†!��þ…���„.��þˆ���„ø��ƒþ …��fƒ}„à ��‹U‹MÇD$ ���‰<$‰T$ ‰L$è0`��ƒìéêýÿÿþ��„Ì��†–��þ��„+��þ���„Ï��þ��…²���‹5AÝj…ö„„��€{D„z��èeùÿÿ‹sP…ö£ AÝjt‰$èO��‹C@‰D$‹C<‰D$¶E‰$ÿÖ‹]ô¸���‹uø‹}üÇ AÝjÿÿÿÿ‰ì]Â�þ ��„¢��þ��u8‹sH…ö„‘��‰$èµN��ÿÖ¸���éýÿÿƒþ„ó��‚ž��ƒþ„o��‹M‹E‰L$ ‰D$‰t$‰<$è&_��ƒìéàüÿÿƒþ „›��t&�‡j��ƒþuÅ‹M‹EÇD$���‰<$‰L$ ‰D$èç^��‹spƒì…öt‰…lþÿÿ‰$èN��Ç$����ÿÖ‹…lþÿÿ€»È����„uüÿÿ‹“¸���…Ò„güÿÿ€z �„]üÿÿ‰…lþÿÿ‰$è ��‹…lþÿÿéDüÿÿfþ��„‚þÿÿ‚��þ��…"ÿÿÿf‹=AÝj…ÿ„i��€{D„_��èÓ÷ÿÿu܉4$£ AÝjè^��ƒì‰t$‹C ‰$è ^��‹E܉C<‹Eàƒì‰C@‹Eƒè!ƒøZ‡Yþÿÿÿ$…ø<Þj-���‰C<éFüÿÿ¿ ���‹sX…ö„5þÿÿ‰$è'M��‹C@‰D$‹C<‰<$‰D$ÿÖéþÿÿ¿ ���ëο ���ëÇ¿ ���ëÀ¿���빿���벿���ë«¿���뤿���ë¿���ë–¿���ë¿���눋sP…ö„½ýÿÿ‰$è¯L��‹C@‰D$‹C<Ç$���‰D$ÿÖé™ýÿÿ¿l���éOÿÿÿ¿g���éEÿÿÿ¿f���é;ÿÿÿ¿e���é1ÿÿÿ¿d���é'ÿÿÿ¿j���éÿÿÿ¿k���éÿÿÿ¿i���é ÿÿÿ¿h���éÿþÿÿ÷E���@„”þÿÿ¸���é”úÿÿ‹E‹UÇD$���‰<$‰D$ ‰T$è´\��ƒìénúÿÿÆC-uŒ‰t$‰<$èa\��‹KH¡¸ÁÞj‰…„þÿÿƒì…Ét€{-�ÆC,�…—��‰t$‰<$è:\��¸���ƒìéúÿÿ‰$èÅ3��ƒ=TAÝj„lÿÿÿÇ$����è\��¸���ƒìéñùÿÿ·U‹E‰S<Áèúÿ��‰C@~ ê���‰S<=ÿ��~-���‰C@‹ƒ¸���…À„½��‰$èi��¸���é¡ùÿÿ‹E%ðÿ��= ð��uÆC-�‹E‹UÇD$��‰<$‰D$ ‰T$è®[��ƒìéhùÿÿ¶����‹U‹MÇD$ ���‰<$‰T$ ‰L$è‚[��ƒìé<ùÿÿ‹M‹EÇD$ ���‰<$‰L$ ‰D$è\[��ƒìéùÿÿt&�èÛôÿÿu܉4$£ AÝjè[��ƒì‰t$‹C ‰$è[��‹E܉C<‹Eàƒì‰C@‹Eƒè!ƒøZ†ÿ��µŒþÿÿ‰4$èíZ��Eäƒì‰D$ ‹EÇD$����‰t$ÇD$����‰$èÌZ��ƒìƒø„^��‹sT…ö…ôúÿÿéûÿÿ‹E‹UÇD$���‰<$‰D$ ‰T$èšZ��‹spƒì…ö„Nøÿÿ‰…lþÿÿ‰$èÎI��Ç$���ÿÖ‹…lþÿÿé,øÿÿÆC,‹M‹EÇD$ˆ���‰<$‰L$ ‰D$èHZ��ƒìéøÿÿ‹U‹MÇD$…���‰<$‰T$ ‰L$è"Z��ƒìéÜ÷ÿÿ€{-�„4ýÿÿÆCF·E‰C‹EÁè‰C ¸���é´÷ÿÿfÆC-¸���ÆC,é ÷ÿÿ‹U·}Áê¿ÂiÀ‰ˆÿÿÁèfÁøfÁúf)ЉÂˆ@��¾���‹Kd…É„��‰•lþÿÿ‰$èäH��èóÿÿ‹•lþÿÿ‰½„þÿÿ£ AÝj?‰÷HƒÀ‰xþÿÿ‰Ö‰…|þÿÿë7v�‰…lþÿÿ‰$è¢H��‹S@‹…lþÿÿ‰T$ ‹S<‰|$‰T$‹•„þÿÿ‰$ÿЃîf…ö„yùÿÿ‹Cd…Àu¼‹|þÿÿƒÿÿ‰€þÿÿt ‹…xþÿÿ‰…€þÿÿ‹C`…Àtɉ…lþÿÿ‰$è:H��‹S@‹…lþÿÿ‰T$ ‹S<ÇD$����‰T$‹•€þÿÿ‰$ÿЋC`…Àt‰…lþÿÿ‰$èþG��‹S@‹€þÿÿ‹…lþÿÿ‰T$ ‹S<ÇD$���‰ $‰T$ÿÐéSÿÿÿfƒ½|þÿÿÿ…@÷ÿÿ‹M‹E‰L$ é.ùÿÿt&�÷E���@…wûÿÿétøÿÿÇD$����ÇD$����‰$èVL��€=AÝj�„Ã��è\T��…À‰C„³��‰$èAQ��éšõÿÿÿ$…d>Þj¾ ���‹{\…ÿ„Køÿÿ‰$è=G��‹C@‰D$‹C<‰4$‰D$ÿ×é+øÿÿ¾ ���ëξ ���ëǾ ���ëÀ¾���ë¹¾���ë²¾���뫾���뤾���ë¾���ë–¾���ë¾���눋sT…ö…úÿÿéÎ÷ÿÿ¾l���énÿÿÿ¾g���édÿÿÿ¾f���éZÿÿÿ¾e���éPÿÿÿ¾d���éFÿÿÿ¾j���é<ÿÿÿ¾k���é2ÿÿÿ¾i���é(ÿÿÿ¾h���éÿÿÿ‹5¸ÁÞj‰$è`F��Ç$f���è4#��ƒì‰CÇ$g���è"#��ƒì‰C ‰4$è4F��é‡ôÿÿ‰$è'F��€{F�…ç���‹CH…Àt‰…lþÿÿ‰$èF��‹…lþÿÿÿЋ„þÿÿ‰ $èòE��é'úÿÿ‹C`…À…ðüÿÿfé¯ùÿÿ‹C0‰$‰D$è `ÿÿ¸���é4ôÿÿ÷Ú¾ÿÿÿÿé¹üÿÿ‹C‰$è›R��ƒì‰Cé7þÿÿƒ½|þÿÿ…ÃýÿÿÇ…|þÿÿ����éõÿÿè¿ïÿÿöE£ AÝj„Í��‹sh…ö„köÿÿ‰$è]E��‹C@‰D$‹C<‰$ÿÖéOöÿÿ‹C ‰$èöU��ƒìéøôÿÿ¡¸ÁÞj‹S ‹K‰…tþÿÿẺD$‹C ‰•|þÿÿ‰€þÿÿ‰$èÇU��‹‹¼���‹Ủxþÿÿ‰•Tþÿÿ‹UЃì…É„š��‹xþÿÿ…Œþÿÿ‰D$‰•lþÿÿ‹A ‰$èƒU��ƒìÇ$ ���èäT��‹Œþÿÿ)TþÿÿƒìÀÇ$!���)…TþÿÿèÁT��‰…xþÿÿ‹…þÿÿƒìÇ$���‰…pþÿÿè T��‹•lþÿÿ+•pþÿÿ‰Á‹…xþÿÿƒìÀ)‹…€þÿÿ)Ê‹|þÿÿ‰…xþÿÿ‰pþÿÿ‹…xþÿÿ‰T$ ‹pþÿÿ‹•TþÿÿÇD$��‰D$‰L$‰T$ÇD$����‹C ‰$èÆT��‹CLƒì…À„B��‰…lþÿÿ‰$èâC��‹|þÿÿ‹•€þÿÿ‹…lþÿÿ‰L$‰$ÿЀ»È����ÆC,t‹•tþÿÿ‰$è¬C��ÆCF�é†ýÿÿ‹sl…ö…3þÿÿé™ôÿÿÇ$���è·R��‰Æ£ÀÁÞj‹C‰$èeP��ƒì‰é˜ñÿÿÇD$©<ÞjÇD$¶<ÞjÇ$Ì<ÞjèŸïÿÿé ñÿÿ€»È����uj;ÄÁÞjtb‰•lþÿÿÇ$ ���èWS��‹€þÿÿ AR‰xþÿÿÇ$!���è;S��Q‰…pþÿÿÇ$���è(S��‹pþÿÿ…|þÿÿ HR‹•lþÿÿ‰pþÿÿéœþÿÿ‹|þÿÿ‹…€þÿÿ‰pþÿÿ‰…xþÿÿéþÿÿ·Uä‰Ué–øÿÿ‰$è¦B��‹|þÿÿ‹…€þÿÿÇD$����Ç$����‰L$ ‰D$èvO��ƒìé¯þÿÿ¶����U‰åƒì€=ü@Ýj�uÇD$Ð?ÞjÇ$ä?ÞjèîÿÿÇXAÝj���ÉÃU‰åƒìÉéDP��t&�U‰åƒìèåÿÿÿ+AÝjÉö����¼'����U‰åVSƒìP€=ü@Ýj�]ÔuMé6��´&����ÇD$ ����ÇD$����ÇD$����‰$è R��ƒì…À„å���‰$è•R��ƒì‰$è’R��ƒìÇD$����ÇD$ ����ÇD$����ÇD$����‰$èoR��ƒì…Àu¡ AÝj…ÀtOèBÿÿÿ‹ AÝj…Û‰Æu9ë<t&�‰\$Ç$ AÝjèà&��‰\$Ç$(AÝjè&��‹S‰$ÿS ‹ AÝj…Ût;s}È]ðÆEð�ÇEô����‰\$Ç$ ÃÜjèj(��ÆEð�ÇEô����‰\$Ç$`­ÜjèO(��è ,��eø[^]Ãv�¡TAÝj…Àt/ƒøuèÇXAÝj���eø[^]ÃÇD$$@ÞjÇ$ä?ÞjèýìÿÿéùþÿÿèCÎÿÿÇ$����èßO��´&����U‰åWVSƒì<‹ ÁÞj€=ü@Ýj�„x��…Ût,‹st…öt‹=¸ÁÞj‰$è[@��¶C-‰$ÿÖ‰<$èJ@��‹…ÛuÔÇXAÝj���]àè"þÿÿ¡ ÁÞj…ÀuëW´&����‹�…ÀtJ€¸È����uñ‹ 0AÝj…Étl‹¸ÁÞj…Òt €ºÈ����uIÿÑ‹50AÝj…ötM¡XAÝjƒøuèÉýÿÿ¡ ÁÞj…Àu¶ÇXAÝj���‹TAÝjè[Íÿÿ…Û„Ð���eô[^_]É$è£?��‹ 0AÝjë§ÆEà�ÇEä����‰\$Ç$ð¬Üjèà&��‹Mä…Éu‘¡ AÝj¾ÿ��…Àt‹pè3ýÿÿ)ƉðÁø÷Ð!ÆÆEà�ÇEä����‰\$Ç$0­Üjè&��‹Uä…Òt ƒþ ~¾ ���ÇD$ÿ���‰t$ ÇD$����ÇD$����Ç$����èôO��ƒìéÿÿÿÇD$6@ÞjÇ$ä?Þjè8ëÿÿéoþÿÿÇ$����èN��´&����U‰åƒì‰]ø‹]‰uüèŒüÿÿ‹S4S89ЉÆ| ‰$èßÿÿ‰s8‹E ‰$ÇD$ ÃÜj‰D$èÎ$��‹]ø‹uü‰ì]ÃU‰åV‰ÆS‹Z‰B<…Ût‹S…Òt‰ðèáÿÿÿ‹…Ûuì[^]ô&����U‰åƒì€=ü@Ýj�uÇD$€@ÞjÇ$@Þjè}êÿÿ¡¼ÁÞj‹U‰PÉÂ�´&����¼'����U‰åƒì€=ü@Ýj�uÇD$Ð@ÞjÇ$@Þjè=êÿÿ¡¼ÁÞj‹@ÉÃv�U‰åSƒì‹]€=ü@Ýj�t/¡¸ÁÞj…Àt‹¼ÁÞj…Òt…Ûxƒû Ç„˜¬�������ƒÄ[]Â�ÇD$à@ÞjÇ$@ÞjèÚéÿÿë»´&����U‰åSƒì‹]€=ü@Ýj�t-¡¸ÁÞj…Àt‹¼ÁÞj…Òt…Ûx ƒû‰”˜¬���ƒÄ[]Â�fÇD$ï@ÞjÇ$@Þjè|éÿÿë½v�¼'����U‰åƒì€=ü@Ýj�t‹¼ÁÞj1À…Òt‹B ÉÃÇD$þ@ÞjÇ$@Þjè<éÿÿëÙv�¼'����U‰åƒì€=ü@Ýj�t‹E‰$èÆ!��…Àt£¼ÁÞjÉÂ�ÇD$ AÞjÇ$@ÞjèõèÿÿëÒv�U‰åƒì€=ü@Ýj�t!‹E‰$è†!��…Àt‰$èú%��ÉÂ�¶����ÇD$AÞjÇ$@Þjè¬èÿÿëÉv�¼'����U‰åƒì€=ü@Ýj�uÇD$&AÞjÇ$@Þjè}èÿÿ‹E‰$è*��‹@ ÉÂ�t&�¼'����U‰åƒì‹E £ÀÞj‹E‰$è§ÿÿÿƒìÉÂ�U‰åWVSƒì,¡¼ÁÞj…À„���‹X1ÿº���ÇEä����¹���…Ûtm‹CÇ$���‰D$è]rÿÿ‹Kƒì…ɉƉCtÇD$5AÞjÇ$���è:rÿÿƃì‰s9uä}‰uäÇ$���èÞqÿÿ‹ƒì…Û|u¡‹UäO¡¼ÁÞjƒÂ‰H(‰P$eô[^_]Ãt&�U‰åVSƒì‹u€=ü@Ýj�tl‹¼ÁÞj…Òt ‹Z…Ûtƒþ¸���u ëƒÀ9Æt‹…ÛuóƒÄ[^]Â�ƒÂ‰\$‰$èz ��‹C…Àt‰$èûI��‰$èóI��èÞþÿÿƒÄ[^]Â�t&�ÇD$7AÞjÇ$@Þjèüæÿÿé{ÿÿÿ´&����U‰åWVSƒì‹u€=ü@Ýj�„}���‹E‰$è|��‰Ç¡¼ÁÞj…Àt$…ÿt ‹X…Ûtƒþ¸���u ëƒÀ9Æt‹…ÛuóƒÄ[^_] �v�‹C…Àt‰$èQI��‹E ‰$è6I��‰{ÇCÿÿÿÿ‰Cè$þÿÿƒÄ[^_] �ÇD$JAÞjÇ$@ÞjèFæÿÿéjÿÿÿU‰åVSƒì‹u€=ü@Ýj�tl¡¼ÁÞj…Àt ‹X…Ûtƒþ¸���u ëƒÀ9Æt‹…ÛuóƒÄ[^] �‹C…Àt‰$è»H��‹E ‰$è H��ÇC����‰C‹E‰Cè‹ýÿÿƒÄ[^] �fÇD$^AÞjÇ$@Þjè¬åÿÿé{ÿÿÿ´&����U‰åVSƒì€=ü@Ýj�toÇD$���Ç$ ���è‹H��‰Ã‹E ‰$è��‰Æ¡¼ÁÞj…Àt5…öt1‹E‰$èH��‰sÇCÿÿÿÿ‰\$‰C¡¼ÁÞjƒÀ‰$è3��èîüÿÿƒÄ[^]Â�t&�ÇD$tAÞjÇ$@Þjè åÿÿéxÿÿÿ´&����U‰åSƒì€=ü@Ýj�tUÇD$���Ç$ ���èìG��‹¼ÁÞj…Ò‰Ãt-‹E‰$è…G��‰\$‰C‹E ‰C¡¼ÁÞjƒÀ‰$è¨��ècüÿÿƒÄ[]Â�ÇD$ƒAÞjÇ$@Þjè‡äÿÿë•t&�U‰åV‰ÆSƒì‹@‹@8‰$è8��èc4��‹F‹X‹P8Ç@4����…ÛÇ‚¸�������Æ@ �t‹KÆC�…Ét‰Øè®ÿÿÿ‹…Ûuè‹F‹@<‰$èÊ7��ƒÄ[^]Ãv�U‰åVSƒì‹E‹˜¸���…Ût{‹C8‹s<‰$è7��èè3��‹C8‰ÚÇ€¸�������‹C<Ç€¸�������1ÀèõøÿÿÆC �ÇC4����‹[ƒ-4AÝj…Ût‹CÆC�…Àt‰Øèÿÿÿ‹…Ûuè‰uƒÄ[^]é67��¶����ƒÄ[^]Éö¼'����U‰åƒì‰]ø‰Ó‹ÄÁÞj‰uü‰Î…Òt,Ç$È���èÚ��ƒì‰Ç$É���èÉ��‹]ø‰ƒì‹uü‰ì]áŒÂÞj‹uü‰¡ÂÞj‹]ø‰‰ì]ÃfU‰åWVS‰ÃƒìL‹p…öuëL‹6…ötF‹F…Àtò€~�tì‹{8‹S,‹H8W<+P,‰Q<‹S0W@+P0‰Q@èµÿÿÿ„ÀtÅeô¸���[^_]Ãt&�‹S8‹z<‹B@ƒÿ‰EÔ~ ‹C$ƒè9øE‹C4…À„��€x�„��‹H…Ét €y �…ö���ÆB,Æ@�1ÀÇC4����eô[^_]ö����ƒ}Ô~µ‹C(ƒè9EÔ}ªÇ$���èSlÿÿ‹UÔ‹sƒêH‰ÐÁúƒì÷ù…ö‰ÁtP¸���ƒúu ë1ƒÀ9Ât*‹6…öuó‰MÄ1öÇD$”AÞjÇD$§AÞjÇ$ÀAÞjèÚáÿÿ‹MÄÆF‹C4‰N …Àt9ðt&‹P…Ò„M��è5ýÿÿ‹C49Æt‹S8…ÀÆB,tÆ@�ÆC ‹F‰s4…À„Ìþÿÿ€x �tÆ@ ¸���éÿÿÿeô1À[^_]˸ÁÞjMà‰UÌUäÆ@ ‹C<èäýÿÿ‹V‹C$C,‰UĉB,‹C0‰EЋF Ç$���‰EÈèMkÿÿ‹UăÀƒì¯EÈEЉB0‹F‹H$‹P,Ê;Uä~‹S,)ʉP,‹P0‹H(Ñ;Mà���‹@8‰$è–4��‹F‹P0‰T$‹@,‰$è.��‹F‹P(ƒì‰T$‹@$‰$èÉ,��ƒìèA-��è,1��‹F‹P8‰‚¸���‹Ủ$èE4��‹F{,‹MÔ‹P8+x,‰z<K0+H0‰J@èeýÿÿ‹Féæþÿÿ‹S8ÆB,é¾þÿÿ‰UÄÇ$���èrjÿÿ‹UăÂQ‰Á‹F+P( ‰ÊÁú÷Ò!ʉP0é>ÿÿÿë U‰åƒì‹EÉéýÿÿU‰åWVSƒì<‹]‹U ¶u‹ƒ¸���…À„��9X<„‡��èÑüÿÿ„Àu-‰ð„À…Å���€»È����¸���teô[^_]ÃÆC,eô[^_]á¸ÁÞj‰EС¼ÁÞj‰EÔ‹ƒ¸���‹x<‰<$è?3��‹³¸���‰5¼ÁÞj‰ò‹B…Àuë8‹�…Àt2€x�tô‹H…Ét‰Êëà‹J…Ét‹@‰¼ÁÞj‰$ÿщ5¼ÁÞj¶����‰<$è(ûÿÿ‹EЉ$èÝ2��‹EÔ£¼ÁÞj¸���€»È����…NÿÿÿéQÿÿÿ‹ƒ¸���‹@<‰$èíúÿÿ¸���€»È����…&ÿÿÿé)ÿÿÿ¶����ƒú‡n��‰ð„Àv�„a��ƒÂ(‹L“ …É„R��ÆC,‹t“ ¡¸ÁÞj‰EÔ‹F<…Àt Ç€¸�������‰³¸���‰ò‰ØÆF è·óÿÿ‹F<MàUäƒ4AÝjèûÿÿ‰$è2��‹{<Ç$d���èë��<8ƒì‰~,‹{@Ç$e���èÓ��‹N,‹V$øƒì< ;}ä‰F0~)щN,‹V( ;Mà~)ЉÂÁú÷Ò!‰V0‹S<‹~8Ç$d���‰UÌèŠ��‹UÌ+V,‹[@ƒì‰G<‹~8Ç$e���èi��+^0ƒì‰G@‹F8‰$èr1��‹F0‰D$‹F,‰$è`+��‹F(ƒì‰D$‹F$‰$è«)��ƒìè#*��è.��‹F8‰°¸���‰ðènúÿÿ‹EÔ‰$è#1��¸���é¤ýÿÿeô1À[^_]ËM‹P8+H,‰J<‹M+H0‰J@é_ýÿÿt&�U‰åWVSƒì\¡¸ÁÞj…À‰EÔ„ý��‹UÔ‹²¸���…ö„Ó��‹F8‰$è»0��Ç$H�è¯=��ƒìÇ$q ��è¨=��ƒìÇ$á ��è™=��ƒìÇ$P ��èŠ=��ƒìÇ$D ��è{=��ƒìÇ$��è¤=��ƒìè =��èo=��Ç$g���è+ ��ƒì‰ÃÇ$f���è ��‰]äƒìÙèÝT$(ÙèÙàÝ\$ ÙîÝT$ÛEäÝ\$‰EäÛEäÝ\$Ý$Ù]Èè=��ƒì0Ç$���è5=��ƒìè<��è�=��ÙEÈÙT$ ÙT$ÙT$Ù$èñ<��ƒìÇ$���è2<��ƒìÇD$����‹F$‰$èÜ<��ƒìÇD$���‹F$ƒè‰$èÃ<��ƒìÇD$����Ç$����è¬<��ƒìÇD$���Ç$���è•<��‹F(ƒì‰D$Ç$����è<��‹F(ƒèƒì‰D$Ç$���èf<��ƒìè®;��ÇD$���?ÇD$���?Ç$���?ÙEÈÙ\$ è+<��ƒìÇ$���èl;��‹F(ƒì‰D$Ç$����è<��‹F(ƒèƒì‰D$Ç$���èý;��‹F(ƒì‰D$‹F$‰$èè;��‹F(ƒèƒì‰D$‹F$ƒè‰$èÍ;��ƒìÇD$����‹F$‰$è·;��ƒìÇD$���‹F$ƒè‰$èž;��ƒìèæ:��Ç$„AÝjè¢;��ƒìÇ$���è»:��ƒìÇD$���Ç$���èd;��ƒìÇD$���‹F$ƒè‰$èK;��‹F(ƒèƒì‰D$‹F$ƒè‰$è0;��‹F(ƒèƒì‰D$Ç$���è;��ƒìè_:��‹^…Ûuéø���v�‹…Û„ë���€{�ftî‹{ Ç$”AÝjè÷:��ƒìÇ$���è:��ƒìÇ$���èdÿÿƒÀƒì¯ÇÇ$���ƒÀ‰D$è¥:��ƒìÇ$���èÖcÿÿƒÀƒì¯ÇƒÇƒÀ‰D$‹F$ƒè‰$èu:��ƒìÇ$���è¦cÿÿƒÀƒì¯ÇƒÀ‰D$‹F$ƒè‰$èH:��ƒìÇ$���èycÿÿƒÀƒì¯ÇÇ$���ƒÀ‰D$è:��ƒìèe9��‹…Û…ÿÿÿÇ$¤AÝjè:��‹^ƒì…Û„‘��ÇEÜ����‰uØéc��f‹uÜÇ$���ècÿÿƒÆƒì‰ÇÇ$���ƒÇèúbÿÿ¯þƒÀƒì‰EäÛEäÜ (BÞjÙ}âÇ$���·EâØ%0BÞj´ f‰EàÙmàÛ]äÙmâ‹Eä)lj|$èl9��‹Cƒì‰D$Ç$���èŽfÿÿ‹{ƒì…ÿ„Â���ÇD$_���Ç$���è\cÿÿ‹UØ‹z$ƒìÇ$���ƒï)ÇèbbÿÿƒÀƒì¯EÜÇ$���P‰U܉EÈèC8��‹EȃÀƒì‰D$‰<$èî8��ƒìÇ$���èbÿÿƒÀƒì‰ÂÁê‹UØÑøE܉D$‹B$ƒè‰$è·8��ƒìÇ$���èèaÿÿE܃ì‰D$‰<$è–8��ƒìèÞ7��€{�um‹…Ût"‰uÜ€{�„•þÿÿÇ$´AÝjè8��ƒìéþÿÿèc8��Ç$��è_8��ƒìèß7��Ç$���èK8��ƒìèË7��èÎIÿÿ‹EÔ‰$èó*��eô[^_]ÃÇ$¤AÝjè'8��ƒìë‚ÇD$ìAÞjÇD$üAÞjÇ$ÀAÞjè×ÿÿéâùÿÿU‰åƒì€=ü@Ýj�uÇD$8BÞjÇ$LBÞjèÝÖÿÿÉÂ�‰ö¼'����U‰åƒì€=ü@Ýj�uÇD$ŒBÞjÇ$LBÞjè­ÖÿÿÙîÉÂ�´&����U‰åƒì€=ü@Ýj�uÇD$™BÞjÇ$LBÞjè}ÖÿÿÉÂ�‰ö¼'����U‰åSƒì‹]€=ü@Ýj�tO…Ûx ƒû~$ƒût.‰\$Ç$¸BÞjè>ÖÿÿƒÄ[]Â�¶����‰AÝjƒÄ[]Â�fÇAÝj���ƒÄ[]Â�ÇD$¦BÞjÇ$LBÞjèúÕÿÿë›´&����U‰åƒì€=ü@Ýj�t¡¸ÁÞj…Àt*‹U…Ò•@DÉÂ�ÇD$ÚBÞjÇ$LBÞjè·Õÿÿ¡¸ÁÞj…ÀuÖÇD$ÚBÞjÇ$ðBÞjèšÕÿÿ‹U¡¸ÁÞj…Ò•@DÉÂ�´&����U‰åƒì€=ü@Ýj�t!¡¸ÁÞj…Àt‹H|…Ét‰$èiÉÿÿÉô&����ÇD$.CÞjÇ$LBÞjè<ÕÿÿëÉv�¼'����U‰åƒì€=ü@Ýj�u4é���=��ºUCÞjtwe=���ºcCÞjtºôCÞj‰T$Ç$DÞjèmÔÿÿèè5��…ÀtU=��º–CÞjtÛvº=��ºÄCÞjtͺ¦CÞjrÆ=1€��º´CÞjtº=e€��ºâCÞju©ë¬=��ºuCÞjt =��º‡CÞjuë’ÉÃÇD$DCÞjÇ$LBÞjèyÔÿÿ늴&����U‰åƒì(‰]ô‹]‰uø‰}ü‰$è†7��€=ü@Ýj�‰Æt/‹=¸ÁÞj…ÿtÇD$ ���‰$è¹7��…Àt-1À‹]ô‹uø‹}ü‰ì]Â�ÇD$DÞjÇ$LBÞjèÔÿÿë»¶����Ç$��èü4��ƒì…À‰Çt¾‰\$‰$èo7��…Àt®9Çt€xÿ v�tð‰\$‰$èP7��…Àt9Çuáð¶„Òu¸���ézÿÿÿt&�€ú u°ëêU‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Â�‰ö¼'����U‰å]Ãt&�¼'����U‰å]Â�‰ö¼'����U‰å]Ãt&�¼'����U‰å]ÃU‰åƒì€=ü@Ýj�uÇD$,DÞjÇ$@DÞjèýÒÿÿ‹E Ç�����1ÀÉÂ�´&����¼'����U‰åSƒì‹]€=ü@Ýj�t>û ��s‰\$Ç$DÞjè5Òÿÿ¸ÿÿÿÿƒÄ[]Â�1Àû$��vîû%��¸ÿÿÿÿuÌëßÇD$€DÞjÇ$@DÞjè{Òÿÿ묉ö¼'����U‰åƒì€=ü@Ýj�t¡ AÝjƒøÿtÉÃt&�ÇD$·DÞjÇ$@DÞjè<ÒÿÿëÙÇ$ÈDÞjè®Ñÿÿ1ÀÉÃv�¼'����U‰åƒì€=ü@Ýj�‰]ø‹]‰uü‹u „���û÷��„•���vFûý��„��‡‰���ûø��„å���ûù��„Î���‰\$Ç$ EÞjè9Ñÿÿ‹]ø‹uü‰ì]Â�ûô��„á���vfûõ��„³���ûö��u‰5ì@ÝjëÊv�ÇD$üDÞjÇ$@DÞjèlÑÿÿû÷��…kÿÿÿ‰5ð@ÝjëŸûþ��t3û���…{ÿÿÿ‰5dAÝjé€ÿÿÿƒûzt$û€���…_ÿÿÿ‰5hAÝjédÿÿÿ‰5�AÝjéYÿÿÿf¡¸ÁÞj…À„Jÿÿÿ‰p0éBÿÿÿ‰5TAÝjé7ÿÿÿ‰5ø@Ýjé,ÿÿÿt&�‰5ä@Ýjéÿÿÿt&�ƒþ”AÝjéÿÿÿ‰5à@Ýjéüþÿÿt&�U‰åSƒì‹]€=ü@Ýj�tMƒ¨ýÿÿƒøv"‰\$Ç$DEÞjèÐÿÿ¸ÿÿÿÿ‹]üÉÂ�¶����ÿ$…lEÞj€=aAÝj�¸���uÞ1À‹]üÉÂ�fÇD$4EÞjÇ$@DÞjè<Ðÿÿëè0��t&�ë±Ç$����èâÁÿÿ룡¸ÁÞj…Àt¼¶@D딡AÝjëŒè¤Íÿÿë…f¶`AÝjéwÿÿÿt&�Ç$����èdÁÿÿébÿÿÿ¸���éXÿÿÿt&�ÇE���‹]üÉé 3��è«/��é9ÿÿÿ¶����諽ÿÿé)ÿÿÿ¶����¡¸ÁÞj…À„8ÿÿÿ‹@4éÿÿÿÇE+���‹]üÉé[3��t&�¼'����U‰åƒìH‰]ô‹]‰uø‰}üÇEÜ����ƒû|„¤���û¼��„„���€=ü@Ýj�„��ûÈ���„ì��†“���ûù��„w��†��ûÿ��„…��t&�‡R��ûü��¸xP��t4‡w��ûú��„ö��ûû��…ÿ���Ç$���è£2��ƒìëè9àÿÿ‹]ô‹uø‹}ü‰ì]Â�¶ü@Ýj‹]ô‹uø‹}ü‰ì]Â�t&�ƒûp„,��†Ñ���ƒûv„©��´&����‡ú��ƒûs„��‡��ƒûq„;��ƒûru|Eà‰D$Ç$[ ��èQ/��‹EàƒìéuÿÿÿÇD$°EÞjÇ$@DÞjèÎÿÿéàþÿÿt&�û��„Ô��t&�‡��ûÊ���„b��‚R��ûË���„w��û,��„N��‰\$Ç$¸EÞjè@Íÿÿ¸ÿÿÿÿéýþÿÿ¶����ƒûj„ç��w}ƒûh¸���„ÞþÿÿwƒûdrÀ¡¸ÁÞj…Àu´&����1ÀéÀþÿÿỦT$‹@ ‰$è×1��¡¸ÁÞj9ÄÁÞjVVt ƒ¸¼����„N��ƒûf„Ñ��ƒûg„½��ƒûe„¬��‹EÌéoþÿÿƒûm„2��‡*��ƒûk„��ƒûl…7ÿÿÿEà‰D$Ç$S ��è .��‹Eàƒìé0þÿÿûö��„å���‡2��ûô��„/��ûõ��…ïþÿÿ€=è@Ýj�„’���¡ä@Ýjéïýÿÿû��„ö��‡D��û���„Ú��û��…®þÿÿ¡pAÝjé»ýÿÿt&�ƒûz„���‡7��ƒûx„Ó��ƒûyt&�…zþÿÿEç‰D$Ç$3 ��èG-��1Àƒì€}ç�•Àémýÿÿ¶����¸ÿÿÿÿé]ýÿÿEà‰D$Ç$Z ��è-��‹Eàƒìé?ýÿÿ€=ô@Ýj�tÏ¡ì@Ýjé,ýÿÿÇ$ ���è¹/��ƒìéýÿÿEç‰D$Ç$2 ��ë…Eà‰D$Ç$V ��èÅ,��‹Eàƒìééüÿÿf¡TAÝjéÝüÿÿ¡ÂÞjéÓüÿÿ¡”ÂÞjéÉüÿÿ¡¼ÁÞj…À„õýÿÿƒÀ‰$èú��é¬üÿÿ¡˜ÂÞjé¢üÿÿEà‰D$Ç$Y ��è`,��‹Eàƒìé„üÿÿ¡ŒÂÞjézüÿÿv�¡¸ÁÞjÇD$����ÇD$���‰$è“#��¶ÀéRüÿÿEà‰D$Ç$R ��è,��‹Eàƒìé4üÿÿEà‰D$Ç$T ��èò+��‹Eàƒìéüÿÿ¡¸ÁÞj…À„BýÿÿÀ���‰$èE��é÷ûÿÿ¡lAÝjéíûÿÿ¡tAÝjéãûÿÿ€=è@Ýj�„oþÿÿ¡à@ÝjéÌûÿÿE܉D$Ç$B ��èŠ+��‹E܃ìé®ûÿÿ¡¸ÁÞj…À„Úüÿÿ‹@0é™ûÿÿû��tû���…nüÿÿ¡dAÝjé{ûÿÿ¡xAÝjéqûÿÿƒû{tû€���…Iüÿÿ¡hAÝjéVûÿÿ¡¸ÁÞj…À„‚üÿÿ‹@‰$è+��ƒìé6ûÿÿƒûnt'ƒûo…üÿÿEà‰D$Ç$X ��èæ*��‹Eàƒìé ûÿÿEà‰D$Ç$U ��èÈ*��‹Eàƒìéìúÿÿû÷��tûø��…Áûÿÿ¡ø@ÝjéÎúÿÿ€=ô@Ýj�„Zýÿÿ¡ð@Ýjé·úÿÿûý��tûþ��…Œûÿÿ¡�AÝjé™úÿÿ1À€=AÝj�•Àéˆúÿÿƒûtt,ƒûu…cûÿÿ¡¸ÁÞj…À„¦ûÿÿ‹€¼���…À„˜ûÿÿ‹@éWúÿÿEç‰D$Ç$1 ��éÁüÿÿ€¸È����…¥ûÿÿ‹uÌÇ$ ���èÁ,��40Q‰uÌ‹uÔÇ$ ���è«,��)ÆR‰uÔ‹uÐÇ$!���è–,��W‰ÇÇ$���è‡,��ÇQ47‰uЋuØÇ$!���èo,��)ÆR‰uØé9ûÿÿ‹EÐéÃùÿÿ‹EØ+EÐé¸ùÿÿ‹EÔ+EÌé­ùÿÿU‰åV‰ÖS9¸���t59°¬���t?9°°���tI9°´���tY‹˜À���…Ût‰Ø‰òèÆÿÿÿ‹…Ûuñ[^]Ã9°¬���Ç€¸�������uÁ9°°���Ç€¬�������u·9°´���Ç€°�������u­¶����Ç€´�������ë›t&�U‰åÇ ÁÞj����ǤÁÞj����ǨÁÞj����ǬÁÞj����ǰÁÞj����Ç´ÁÞj����ǸÁÞj����ǼÁÞj����ÇÀÁÞj����ÇÄÁÞj����ÇÈÁÞj����ÇÌÁÞj����]Ãv�¡¨ÁÞjU‰å‹U…Àuë ‹�…Àt9P uõ]v�Ãë U‰å‹EÇ�����Ç@����]Ãt&�¼'����U‰å‹M‹E ‹Q…Òt‰‰PÇ�����‰A]ÃÇ@����‰Ç�����‰A]ö����¿����U‰å‹E S‹M‹…Òt‹X‰Z‹X…Ût‰9t9At[]Ãt&�‹@‰A[]ô&����‹‰ëÝv�¼'����U‰å‹E‹1À…Òt f‹ƒÀ…Òu÷]Ãt&�U‰å‹U ‹ES‹]…Ò‰t‹J‰B…ɉHt‰[]É[]ö����‹K‰Cëá´&����U‰åWVSƒì‹u‹} …öt=…ÿt9€=ü@Ýj�tU‹E‹˜À���…Ûu ë‹…Ût‰t$‰$ÿ×€>�tìƒÄ[^_]Ãt&�ÇD$@¦ÞjÇD$T¦ÞjÇ$”¦Þjè¤Åÿÿ€=ü@Ýj�u«ÇD$À¦ÞjÇ$Ô¦Þjè‡Åÿÿë•t&�U‰åSƒì‹E ‹U€8�u‹H‹Z;t‰D$ÇD$ÀèÜj‰$è@ÿÿÿƒÄ[]ÃÆ�‰PƒÄ[]ô&����¼'����U‰åƒì‹E ‹U€8�u‹J ;Ht‰D$ÇD$éÜj‰$èóþÿÿÉÃÆ�‰PÉô&����U‰åWVSƒì‹u ‹}…öt-…ÿt)‹ ÁÞj…Ûuë‹…Ût‰t$‰$ÿ×€>�tìƒÄ[^_]ÃÇD$§ÞjÇD$,§ÞjÇ$”¦Þjè”Äÿÿë¹fU‰åƒì(E‰EôEð‰D$ÆEð�Ç$ÀèÜjè}ÿÿÿ€}ðÀ÷Ð#EôÉÃU‰åƒì(‹EÆEð�Ç$éÜj‰EôEð‰D$èMÿÿÿ€}ðÀ÷Ð#EôÉÃU‰åWVSƒì‹]…Ûu é��‰$èãÿÿÿ‹ƒÀ���…Àu€���‹=¸ÁÞj…öt ‰$è¡��ÿÖ‰<$è—��‹ƒ¼���…À„ƒ���‹…Òt‹K‰J‹K…Ét‰;˜À���„”���;˜Ä���„œ���‹ƒ¸���…Àt‰$èŠßÿÿ1ÀÇDƒH����ƒÀƒøuð‰$è°��‰$èH&��9¸ÁÞjtƒÄ[^_]ÃǸÁÞj����ƒÄ[^_]Ë…Òt‹C‰B‹C…Àt‰; ÁÞjtU;¤ÁÞju…‹C£¤ÁÞjéxÿÿÿ‹;˜Ä���‰À���…dÿÿÿ‰ˆÄ���éYÿÿÿÇD$g§ÞjÇD$x§ÞjÇ$”¦ÞjèéÂÿÿéÑþÿÿ‹£ ÁÞjë¢t&�¼'����U‰åVSƒì‹]…Û„R��‹5 ÁÞj…ötv�‰ð‰ÚèGúÿÿ‹6…öuñ‹¨ÁÞj…Òt5´&����‹B…Àuë´&����‹�…Àt;XuõÇ@����‹�…Àuî‹…ÒuÒ‹C…Àt>‹5¼ÁÞj‰¼ÁÞjÿЉ5¼ÁÞjë(t&�;stK‹F…Àt‰$èü$��ÇF����‰4$èí$��‹s…öt.‹…Àt‹V‰P‹F…Àt‹‰;suº‹;s‰Cuµ‹F‰Cë­‹C89¸ÁÞj„���‰$è¡ýÿÿ‹…Àt‹S‰P‹S…Òt‰;¨ÁÞjt@;¬ÁÞjt.9¼ÁÞjt‰]ƒÄ[^]éf$��‰]ǼÁÞj����ƒÄ[^]éN$��‹C£¬ÁÞjëÈ‹£¨ÁÞjë·ÇD$¨§ÞjÇD$¸§ÞjÇ$”¦ÞjèOÁÿÿéþÿÿÇ$����èî��‹C8é]ÿÿÿ¶����U‰åSƒì‹°ÁÞj…Ûuë];´ÁÞjtK‰$èÝ#��‹°ÁÞj…ÛtC‹C‰$èÈüÿÿ‹…Àt‹S‰P‹C…Àt‹‰;°ÁÞju¼‹;´ÁÞj£°ÁÞjuµ‹C£´ÁÞj뫃Ä[]Ãv�¼'����U‰åƒìèuÿÿÿ¡¨ÁÞj…Àt$‰$èÄýÿÿ¡¨ÁÞj…Àuï¡ ÁÞj…Àtf‰$èHüÿÿ¡ ÁÞj…ÀuïÉö����¼'����U‰åSƒì‹]Ç$ ���è*#��‹´ÁÞj…Ò‰XtD‰‰P9¸ÁÞjÇ�����£´ÁÞjt:‹“€���1ÀÇDƒH����ƒÀƒøuð;“€���t‰“€���ƒÄ[]ÃÇ@����£°ÁÞjë³Ç¸ÁÞj����ëºë U‰åWVSƒìL¶U,¶E‹]¶uˆUà¶}(ˆEçÇD$���Ç$Ì���èª"��¶Uà…Àt1ÉÇDˆH����ƒÁƒùuð‹ ÈÁÞjÇ€À�������Ç€Ä�������ƒÁ…Û‰ ÈÁÞj‰HÇ@$ÿÿÿÿÇ@(ÿÿÿÿ„ž���‹‹Ä���…É„¯���‰‰HÇ�����‰ƒÄ���‰˜¼���ˆÈ���1Ò…Û•Âçÿ���Æ@D�æÿ���Æ@E�Æ@G�Ç@0d���‰T$$‹U$‰|$ ‰t$‰$‰T$‹U ‰Eà‰T$‹U‰T$‹U‰T$ ¶Uç‰T$‹U ‰T$è1��‹EàƒÄL[^_]Ë ¤ÁÞj…Ét'‰‰HÇ�����£¤ÁÞjéhÿÿÿÇ@����‰ƒÀ���éDÿÿÿÇ@����£ ÁÞjëд&����U‰åVSƒì0‹5¸ÁÞjÇD$���Ç$@���èN!��Ç@<����‰ÃÇD$$���ÇD$ ����ÇD$d���ÇD$d���ÇD$���ÇD$d���ÇD$ d���ÇD$���ÇD$ä§ÞjÇ$����èþÿÿ¡¸ÁÞjÇ$�ÑÜj‰C8è-(ÿÿƒìèÅ ��‰4$èm��¡ÌÁÞjÇC4����ÇC����ÇC����ƒÀ£ÌÁÞj‰C ‹E‰C¡¬ÁÞj…Àt ‰‰CÇ����‰Ø‰¬ÁÞj‰¼ÁÞjeø[^]ÃÇC����‰¨ÁÞjëÖU‰åWVSì¼��ÝE‰…´ùÿÿݘùÿÿ‰•¨ùÿÿÇ$� �èÓ��ƒìÇ$€ ��è4��ƒìÇ$¡ ��è%��ƒìÇ$· ��è��ƒìÇ$´ ��è��ƒìè?��ÙîÝT$ÝT$ÙèÝ\$ÙȶÞjÝ$Ùˆùÿÿèã��Ý…˜ùÿÿƒì Ø Ì¶ÞjÝT$ÝT$Ý$èÌ��ƒìÙжÞjÝ\$Ù…ˆùÿÿÝT$Ý$èµ��Ç…Øùÿÿ����ƒì‹•Øùÿÿ‹ØùÿÿÇ…Üùÿÿ����Ç…¸ùÿÿ���ÁâÁãÇ…¼ùÿÿ����‰•°ùÿÿ‰¬ùÿÿ‹…°ùÿÿ½hûÿÿ1É…¼ùÿÿ‹•¼ùÿÿ½ÜùÿÿÁà`¨Þj‰…Ðùÿÿ‹…¬ùÿÿ…¸ùÿÿ‰½Äùÿÿ…`¨Þj‰…ÔùÿÿR1ÒÁàœÅðùÿÿ‰àùÿÿ‰…äùÿÿ‹…Ðùÿÿ‹½Ôùÿÿ‹0‹‹½ÄùÿÿvÝÅàªÞj…hþÿÿÏ…Üùÿÿ‰½Èùÿÿ½èùÿÿ½ÜùÿÿÝ[ÝÅàªÞjÏ…èüÿÿ…Üùÿÿƒ½Øùÿÿ‰½Àùÿÿ‰…Ìùÿÿݸ��� ���ëÙÉ‹½ÈùÿÿÝTÇø‰Çƒï‰½„ùÿÿ…¡��‹½ÄùÿÿÙàÝ‹½àùÿÿÙàÝ_ø<vÇÝýàªÞj<[ÇÝýàªÞj<R½äùÿÿǃøÝ”ýèüÿÿu‹½ÌùÿÿÙÀÙàÝ\ÙÉëÙÉ<R½äùÿÿǃÀƒ½ØùÿÿÝ”ýhþÿÿŽhÿÿÿÝØÝØëÝØÝØƒø~ŒƒÂƒÁƒ…Ðùÿÿƒ­Ôùÿÿƒ…àùÿÿƒú…·þÿÿƒ…¼ùÿÿƒ…¸ùÿÿƒ…Üùÿÿ`ƒ½¼ùÿÿ…-þÿÿÙèÝT$$ÇD$4àEÝjÙîÝT$ÙÉÇD$0���ÝT$ ÙÉÇD$,���ÝT$ÇD$���ÙˆùÿÿÙ˜ùÿÿÇD$���Ç$´ ��èQ��…hþÿÿƒì8Ù…˜ùÿÿÝT$$‰D$4Ù…ˆùÿÿÝT$ÙÉÇD$0���Ý\$ ÇD$, ���Ý\$ÇD$���ÇD$���Ç$· ��èú��‹•´ùÿÿƒì8Ù…˜ùÿÿÝT$ ‰T$Ù…ˆùÿÿÝT$Ùɉ$Ý\$ Ý\$è¿��‹´ùÿÿ‹½¨ùÿÿƒì(‰\$ÇD$ ����‰\$ÇD$����‰<$è ��…èüÿÿƒìÙ…˜ùÿÿÝT$$‰D$4Ù…ˆùÿÿÝT$ÙÉÇD$0���Ý\$ ÇD$, ���Ý\$ÇD$���ÇD$���Ç$· ��èA��ƒì8‰\$ÇD$ ����‰\$ÇD$����‰<$è&��ƒìÙ…ˆùÿÿƒ½ØùÿÿÙ…˜ùÿÿ~XÝØÝØƒ…Øùÿÿƒ½Øùÿÿ …6üÿÿè��è„��eô[^_]Ãt&�ÝØ‹½Àùÿÿƒ½„ùÿÿÝ\Çø…Ëýÿÿ‹½àùÿÿÝÙàÝéKýÿÿÝT$$ÙÉ•hûÿÿÝT$ÙɉT$4Ý\$ ÇD$0���Ý\$ÇD$, ���ÇD$���ÇD$���Ç$· ��èd��ƒì8‰\$‰\$èùÿÿ‰<$ÇD$ ����ÇD$����èC��ƒìÙ…˜ùÿÿÝT$$‰\$4Ù…ˆùÿÿÝT$ÙÉÇD$0���Ý\$ ÇD$, ���Ý\$ÇD$���ÇD$���Ç$· ��èê��‹½´ùÿÿ‹…¨ùÿÿƒì8‰|$ÇD$ ����‰|$ÇD$����‰$èÃ��ƒìé±þÿÿt&�¼'����U‰åƒì(€=ü@Ýj�ÝEuÝ]èÇD$�¨ÞjÇ$¨Þjè7·ÿÿÝEèº��¸���Ý$èÒùÿÿÉÂ�´&����¼'����U‰åƒì(€=ü@Ýj�ÝEuÝ]èÇD$P¨ÞjÇ$¨Þjèç¶ÿÿÝEèº��¸ ���Ý$è‚ùÿÿÉÂ�U1À‰å]Â�´&����U‰å]Ãt&�¼'����U‰å]Ãt&�¼'����U‰å]Â�‰ö¼'����U‰å]Â�€=ü@Ýj�U¡¸ÁÞj‰åt…Àu ë‹€¼���…Àt€¸È����uí‹@]Ã1À]ö����¿����U‰åƒì€=ü@Ýj�t¡¸ÁÞj…Àt*‹U‰¨���ÉÂ�ÇD$à¶ÞjÇ$ô¶Þjè÷µÿÿ¡¸ÁÞj…ÀuÖÇD$à¶ÞjÇ$4·ÞjèÚµÿÿ¡¸ÁÞj‹U‰¨���ÉÂ�´&����U‰åƒì€=ü@Ýj�t¡¸ÁÞj…Àt%‹€¨���ÉÃÇD$r·ÞjÇ$ô¶Þj茵ÿÿ¡¸ÁÞj…ÀuÛÇD$r·ÞjÇ$4·Þjèoµÿÿ¡¸ÁÞj‹€¨���ÉÃfU‰åSƒì4€=ü@Ýj�„®���‹¸ÁÞj…Û„¾���Ç$ÿ��èÂåÿÿƒì…ÀtèÆ���¡ŒÂÞjÇEè����ÇEì����ÇD$����‰Eð¡ÂÞjÇD$��ωEôEè‰$è•��‹Mì‹Eô‹Uè)Èƒì ‰D$‹EðÇD$��‰L$ ‰T$)ЉD$¡¸ÁÞjÇD$����‹@ ‰$è"��ÆCG‹]üƒìÉÃÇD$„·ÞjÇ$ô¶Þj芴ÿÿé9ÿÿÿt&�ÇD$„·ÞjÇ$4·Þjèl´ÿÿ‹¸ÁÞjé#ÿÿÿU‰åSƒì€=ü@Ýj�t ‹¸ÁÞj…Ût4èáþÿÿ€{G�”CGƒÄ[]Ãv�ÇD$“·ÞjÇ$ô¶Þjè´ÿÿ‹¸ÁÞj…ÛuÌÇD$“·ÞjÇ$4·Þjèþ³ÿÿ‹¸ÁÞjë°¶����U‰åƒì€=ü@Ýj�tA¡¸ÁÞj…ÀtNÇ$ÿ��è\äÿÿƒì…Àtè`ÿÿÿ¡¸ÁÞjÆ@F‹U‰P‹U ‰P ÉÂ�´&����ÇD$¨·ÞjÇ$ô¶Þj茳ÿÿë©ÇD$¨·ÞjÇ$4·Þjèv³ÿÿëœt&�U‰åƒì(€=ü@Ýj�tI¡¸ÁÞj…Àt]ÇD$���ÇD$����ÇD$����ÇD$ ����ÇD$����ÇD$����‹@ ‰$è•��ƒìÉÃÇD$º·ÞjÇ$ô¶Þjè³ÿÿ¡¸ÁÞj…Àu£ÇD$º·ÞjÇ$4·Þjèç²ÿÿ¡¸ÁÞjëˆU‰åƒì(€=ü@Ýj�tI¡¸ÁÞj…Àt]ÇD$���ÇD$����ÇD$����ÇD$ ����ÇD$����ÇD$���‹@ ‰$è��ƒìÉÃÇD$È·ÞjÇ$ô¶Þjèt²ÿÿ¡¸ÁÞj…Àu£ÇD$È·ÞjÇ$4·ÞjèW²ÿÿ¡¸ÁÞjëˆU‰åƒì8€=ü@Ýj�„���‹¸ÁÞj…Ò„���Ç$ÿ��è³âÿÿƒì…Àtè·ýÿÿEè‰D$¡¸ÁÞj‹@ ‰$èp��‹Eô+Eìƒì‰D$‹Eð+EèÇD$���‰D$ ‹E ‰D$‹E‰D$¡¸ÁÞj‹@ ‰$ès��ƒìÉÂ�ÇD$×·ÞjÇ$ô¶Þj許ÿÿéfÿÿÿv�ÇD$×·ÞjÇ$4·Þj茱ÿÿéXÿÿÿ´&����U‰åƒì€=ü@Ýj�t¡¸ÁÞj…ÀtH‹ˆ¼���…ÉtÉÂ�ÇD$ê·ÞjÇ$ô¶ÞjèF±ÿÿëÓt&�‹U‰T$‹@ ‰$èæ��ƒìÉÂ�´&����ÇD$ê·ÞjÇ$4·Þjè ±ÿÿ¡¸ÁÞjët&�U‰åƒì€=ü@Ýj�t¡¸ÁÞj…ÀtH‹¼���…ÒtÉÂ�ÇD$û·ÞjÇ$ô¶ÞjèÆ°ÿÿëÓt&�‹U‰T$‹@ ‰$èf��ƒìÉÂ�´&����ÇD$û·ÞjÇ$4·Þj茰ÿÿ¡¸ÁÞjët&�U‰åƒì€=ü@Ýj�t1¡¸ÁÞj…ÀtEÆ@-�ÇD$���‹@ ‰$è��¡¸ÁÞjÆ@,�ƒìÉÃv�ÇD$¸ÞjÇ$ô¶Þjè,°ÿÿ¡¸ÁÞj…Àu»ÇD$¸ÞjÇ$4·Þjè°ÿÿ¡¸ÁÞjë ´&����U‰åƒì€=ü@Ýj�t1¡¸ÁÞj…ÀtEÇD$����‹@ ‰$è��¡¸ÁÞjÆ@,�ƒìÉô&����ÇD$ ¸ÞjÇ$ô¶Þj謯ÿÿ¡¸ÁÞj…Àu»ÇD$ ¸ÞjÇ$4·Þjè¯ÿÿ¡¸ÁÞjë ´&����U‰åƒì€=ü@Ýj�t1¡¸ÁÞj…ÀtEÇD$���‹@ ‰$è��¡¸ÁÞjÆ@,ƒìÉô&����ÇD$/¸ÞjÇ$ô¶Þjè,¯ÿÿ¡¸ÁÞj…Àu»ÇD$/¸ÞjÇ$4·Þjè¯ÿÿ¡¸ÁÞjë ´&����U‰åSƒì€=ü@Ýj�t0‹E‰$èUêÿÿ…Àt‹XAÝj‰$èsîÿÿ‰XAÝjƒÄ[]Â�t&�ÇD$>¸ÞjÇ$ô¶Þj謮ÿÿëºv�¼'����U‰åƒìX€=ü@Ýj�‰]ô‹U‰uø‹] ‰}ü‹u‹}„ˆ���‹E‰Uä‰$èÚéÿÿ1É‹Uä…Àt_…Ûˆ°���…ÿˆ¸���…öx}…Òˆ…���ÇD$$����ÇD$ ����‰T$‰|$ÇD$���‰t$‰\$ ÇD$���ÇD$d¸Þj‰$è5îÿÿ‹H‹]ô‰È‹uø‹}ü‰ì]Â�‰UäÇD$P¸ÞjÇ$ô¶ÞjèÙ­ÿÿ‹UäéYÿÿÿ‹H Î…Òx )Öé{ÿÿÿ‹H )ò‰mÿÿÿÖ÷Úédÿÿÿ‹HË…ÿx )ûéHÿÿÿ‹H<9)߉:ÿÿÿû÷ßé1ÿÿÿfU‰åƒì8€=ü@Ýj�uÇD$e¸ÞjÇ$ô¶Þjè]­ÿÿ¡ð@ÝjÇD$$����ÇD$ ����Ç$����‰D$¡ì@Ýj‰D$¶ô@Ýj‰D$¡ä@Ýj‰D$¡à@Ýj‰D$ ¶è@Ýj‰D$‹E‰D$è0íÿÿ‹@ÉÂ�‰ö¼'����U‰åƒì‹E £ÀÞj‹E‰$èWÿÿÿƒìÉÂ�U‰åSƒì‹]9¸ÁÞjtI¡ ÁÞj…Àt0‹S1É9Øt 9Pu¹���‹�…Àuì…Ét‹C ‰$è}��‹]üƒìÉËS‰$èê ��ƒìëÝÇD$����Ç$����èñ ��ƒìëž¶����¿����U‰åSƒì¡¸ÁÞj‹]…Àt‹P‰T$‹@ ‰$è#��ƒì…Ût#‹C ‰$è ��‹Sƒì‰C‰T$‰$è” ��ƒì‰¸ÁÞj‹]üÉö����U‰åSƒì‹]€=ü@Ýj�t-¡¸ÁÞj…Àt9Xt‰$è7çÿÿ…Àt)‰$èkÿÿÿƒÄ[]Â�v�ÇD$v¸ÞjÇ$ô¶Þj蜫ÿÿ뽉\$Ç$„¸Þjè «ÿÿëÍ´&����U‰åWVSìŒ���¶E¶U‹]¶}(ˆE¯EÀ¶u,‰D$¡ìÁÞjˆU®ÇD$­¸Þj‰$è��ƒì f…À„Ê��‰ù„É„©��‹‹¼���…É„ò��ÇD$¶¸ÞjÇD$ ¹ÞjÇ$à¸Þjèÿªÿÿ‹E$1É‹u ‹ìÁÞj‰U°‹“¼���…Ò„û��ÇE´���–‹R ‰U¤‹U°‰D$‹E‰\$,ÇD$$����‰T$(‹U¤‰D$‹E´‰t$ÇD$­¸Þj‰T$ ‹U‰D$ ‰ $‰T$‹U ‰T$èm��ƒì0…À‰C „w��‰ú„Ò„Î��ÇD$���ÇD$����ÇD$����ÇD$ ����ÇD$����ÇD$ÿÿÿÿ‰$è­��‹C ƒìÇD$ðÿÿÿ‰$èß��‹ø@ÝjƒìöÆ…€��€æ…Ô��€=AÝjÀƒàƒÀ‰D$‹C ‰$è®��‹C ƒì‰$è¨��ƒìÇ$���è¡��ƒì‰$ènýÿÿ¡ø@ÝjÑèƒà…À‰CuÇ$��èù ��ƒìÇ$��èò ��ƒìeô[^_]ô&����‰ð„À„†���‹E$‹u €}¯�uÇE���€ÇE���€€}®�… ��€»È���ÇC ÿÿÿÿÇCÿÿÿÿÀ%Ôþÿ,��‰Æ€»È����¹€���…&þÿÿ‹“¼���ÇE´��Ï…Ò„ì���‹ ìÁÞjÇE´���V‰M°1Ééþÿÿ€»È����…mÿÿÿÇ$ ���è· ��‹U ƒì4BÇ$!���è¢ ��ƒìÇ$���‰E¨è ��‹U¨E$ƒìPé/ÿÿÿ€»È����„cþÿÿé þÿÿ%ÿÿ´ÿ‰D$ÇD$ðÿÿÿ‹C ‰$èQ ��ƒì éeþÿÿÇD$¶¸ÞjÇD$øÞjÇ$à¸ÞjèM¨ÿÿéýÿÿ‹M ‹U$‰K‰S éÿÿÿ´&����%ÿÿtÿë¡‹E$‹u ÇE´���–‹ìÁÞj1ÉÇE¤����‰U°é2ýÿÿt&�‹M Ç$4¹Þj‰L$èí§ÿÿ‹C énýÿÿÇE´���–ÇE¤����éÿüÿÿfU‰åV‰ÖS‰ÃƒìÇ$T¹ÞjèÐ��ƒì…Àt'‰$ÿЃì…Àt‰t$‰$è) ��…À•À¶Àeø[^]Ãeø1À[^]ÃU‰åWVSìL��¶E ‹]¶uˆ…óýÿÿ¡ø@Ýj‹K‰ÂƒâƒúÒƒÂ%öÄtƒÊ¨fÇE°(�fÇE²�‰U´„à���ÆE¸ÆEº�ÆE¼�ÆE¾�ÆEÀ�f…Àº���xöÄ@º���„Ó���‰ðˆUɉ $ÆE¹ÆE»�ÆE½�ÆE¿�ÆEÁ�ÆEÂ�ÆEÃ�ÆEÄ�ÆEÅ�ÆEÆ�ÆEÇÆEȈEÊÆEË�ÇEÌ����ÇEÐ����ÇEÔ����ÇD$ ���è"��M°ƒìˆE¹‰L$‹C‰$è��ƒì÷ø@Ýj€��‰…ôýÿÿuj‹µôýÿÿ1À…öt€½óýÿÿ�¸���„Ç��eô[^_]ɃâÆE¸�ÆEºÆE¼ÆE¾ˆUÀéÿÿÿföÄ º���…ÿÿÿ1ÒöÄ„ÿÿÿ¶dAÝjéÿÿÿèž��‰…äýÿÿèc��Uˆ¹ ���‰×‰…èýÿÿ1Àó«¡ìÁÞj‰$ÇEŒ ÝjÇEˆ#���‰E˜ÇE¬n¹Þjè ��¡ìÁÞjƒìÇD$,����‰D$(ÇD$$����ÇD$ ����ÇD$����ÇD$����ÇD$����ÇD$����ÇD$ ��ÏÇD$d¸ÞjÇD$n¹ÞjÇ$����èB ��ƒì0‰Ç‰$è= ��‹ôýÿÿƒì‰ÆE°‰L$‰D$‰4$èÇ��ƒì ‰4$èÄ��ƒì‰…ìýÿÿ‰D$‰4$èŸ��º}¹Þj‰ðƒìè0ýÿÿ…À…˜���‹èýÿÿ‹…äýÿÿ‰ $‰D$èp��‹…ìýÿÿƒì‰$è?��ƒì‰t$‰<$è¸��ƒì‰<$è¥ ��¡ìÁÞjƒì‰D$Ç$n¹Þjè• ��ƒìé þÿÿt&�‹…ôýÿÿM°‰L$‰D$‹C‰$è ��ƒì …À•Àeô[^_]Ãt&�Ç$‘¹Þjèl��ƒì…À‰Â„Oÿÿÿ¶E¹‹ ø@ÝjÇ…øýÿÿ ��Ç…üýÿÿ���‰…þÿÿ¶EÀÇ…�þÿÿ ��Ç…þÿÿ���Ç…þÿÿ ��‰…þÿÿ¶EÇÇ… þÿÿ' ��Ç…þÿÿ ��Ç…þÿÿ ��‰…$þÿÿ¶EÈÇ… þÿÿ" ��Ç…(þÿÿ# ��Ç…0þÿÿ ��‰…,þÿÿ‰ÈÑèƒà€å‰…4þÿÿ…Õ���Ç…àýÿÿP���¹D���¸@���Ç…ÜýÿÿL���Ç…ØýÿÿH���Ç„øýÿÿA ��‹…ØýÿÿÇ„ øýÿÿ���‹ÜýÿÿÇEØ����ÇEÜ����Ç„øýÿÿB ��¡hAÝj‰„ øýÿÿ‹…àýÿÿ‹KÇD$ ���Ç„øýÿÿ����Eà‰D$Eä‰D$E؉D$…øýÿÿ‰D$‰ $ÿÒƒì…À„ãýÿÿ‹Eà…À„Øýÿÿ‹Mä‰ôýÿÿéÊýÿÿfÇ…8þÿÿ© ��¹L���¸H���Ç…<þÿÿ���Ç…àýÿÿX���Ç…ÜýÿÿT���Ç…ØýÿÿP���éÿÿÿë U‰åƒìxƒ=lAÝj‰]ô‹]‰uø‰}ü„&��‹C‰D$‹C‰$èÏ��‹Cº)ºÞjƒìè_úÿÿ…À„ï���¡lAÝjƒø„)��‹pAÝj‰Uй���ÇEÄ‘ ��UÔ‰EÈuÄÇEÌ’ ��‹=tAÝj‰øƒàƒøÀƒç÷Ѓà øtÇ” ��‰DȃÁŽ‹=xAÝj‰øƒàƒøÀƒç÷Ѓà øtÇ&‘��TމDÈÇ����Ç$©¹Þjè¤��ƒì…À„à���‰t$ÇD$����‹S‰$ÿÐƒì …À‰Æ„Š���ÇD$����Ç$����èÜ��‹Cƒì‰$è®��‰sƒì‹]ô‹uø‹}ü‰ì]Ë5pAÝj…ö…Ìþÿÿ‹ tAÝj…É…¾þÿÿ‹xAÝj…Ò…°þÿÿ‹]ô‹uø‹}ü‰ì]Ãt&�‹pAÝj…Ò…ÏþÿÿuÄ1ɉòéâþÿÿ¡xAÝjÇ$ì¹Þj‰D$¡tAÝj‰D$ ¡pAÝj‰D$¡lAÝj‰D$覠ÿÿéAÿÿÿ‰E´Ç$ĹÞjè’ ÿÿ‹E´é ÿÿÿ¡àÁÞjU‰å…Àu ÇàÁÞj���]ô&����U‰å]Ãt&�¼'����‹àÁÞjU‰å…Òu ÇàÁÞj���]ô&����‹ àÁÞjU‰å…Éu ÇàÁÞj���1À]Ãt&�¡àÁÞjU‰å…Àu ÇàÁÞj���1À]Ãÿ%HäÞjÿ%ÐäÞjÿ%$äÞjÿ%¬äÞjÿ%@äÞjÿ%¨äÞjÿ%ŒäÞjÿ%xäÞjÿ%(äÞjÿ%€äÞjÿ%äÞjÿ%päÞjÿ%¸äÞjÿ%„äÞjÿ%läÞjÿ%´äÞjÿ%ÔäÞjÿ%ÈäÞjÿ%ÀäÞjÿ%¼äÞjÿ%ˆäÞjÿ%4äÞjÿ%täÞjÿ%\äÞjÿ%,äÞjÿ%”äÞjÿ%°äÞjÿ%|äÞjÿ%häÞjÿ%0äÞjÿ%PäÞjÿ%XäÞjÿ%LäÞjÿ%TäÞjÿ%<äÞjÿ%œäÞjÿ% äÞjÿ%¤äÞjÿ%däÞjÿ%`äÞjÿ%DäÞjÿ%8äÞjÿ%˜äÞjÿ%ÌäÞjÿ%ÄäÞjÿ%`ãÞjÿ%TãÞjÿ%XãÞjÿ%PãÞjÿ%\ãÞjÿ%¨åÞjÿ%¤åÞjÿ% åÞjÿ%œåÞjÿ%¬åÞj��������¸@ºÞjU=@ºÞj‰åSs»��Üj‹P‹ƒÀÚ =@ºÞjrí[]ÃU‰åƒì¡ FÝj‹�…ÀtÿС FÝjP‹@‰ FÝj…ÀuéÉö����U‰åVSƒì‹àÝjƒûÿt-…Ût4àÝjfÿƒîƒëuöÇ$@ÝjèŠÿþÿƒÄ[^]Ãv�1Ûë‰ÃC‹…àÝj…Òuðë½v�¼'����U‰åƒì‹ äÁÞj…ÉtÉÃÇäÁÞj���ÉëU¸���‰å] �ÿ%¤ãÞjÿ%°ãÞjÿ%ØãÞjÿ%ÌãÞjÿ%äãÞjÿ%´ãÞjÿ%ÐãÞjÿ%ÈãÞjÿ%üãÞjÿ%ôãÞjÿ%ÀãÞjÿ%ÄãÞjÿ%ìãÞjÿ%ðãÞjÿ%äÞjÿ%èãÞjÿ%�äÞjÿ%äÞjÿ%äÞjÿ%àãÞjÿ%¼ãÞjÿ% äÞjÿ%ÜãÞjÿ%äÞjÿ%ÔãÞjÿ%øãÞjÿ%äÞjÿ%ðäÞjÿ%låÞjÿ%dåÞjÿ%håÞjÿ%4åÞjÿ%ìäÞjÿ%èäÞjÿ%åÞjÿ% åÞjÿ%(åÞjÿ%åÞjÿ%åÞjÿ%XåÞjÿ%PåÞjÿ%8åÞjÿ%åÞjÿ%LåÞjÿ%TåÞjÿ%ääÞjÿ%åÞjÿ%HåÞjÿ%åÞjÿ%\åÞjÿ% åÞjÿ%„åÞjÿ%øäÞjÿ%`åÞjÿ%0åÞjÿ%tåÞjÿ%$åÞjÿ%ˆåÞjÿ%�åÞjÿ%DåÞjÿ%@åÞjÿ%àäÞjÿ%<åÞjÿ%xåÞjÿ%,åÞjÿ%€åÞjÿ%åÞjÿ%|åÞjÿ%påÞjÿ%ôäÞjÿ%üäÞjÿ%ŒåÞjÿ%„ãÞjÿ%ˆãÞjÿ%pãÞjÿ%˜ãÞjÿ%tãÞjÿ%|ãÞjÿ%€ãÞjÿ%lãÞjÿ%ãÞjÿ%”ãÞjÿ%ŒãÞjÿ%xãÞjÿ%<ãÞjÿ%DãÞjÿ%8ãÞjÿ%@ãÞjU‰åƒìèµýþÿÇ$ÐÜjèYüþÿÉÃÿÿÿÿÀÝj����ÿÿÿÿ����������������˜eÝj§eÝj¶eÝjÅeÝjÔeÝjãeÝjòeÝjfÝjfÝjfÝj.fÝj=fÝjLfÝj[fÝjjfÝjyfÝjˆfÝj—fÝj¦fÝjµfÝjÄfÝjÓfÝjâfÝjñfÝj�gÝjgÝjgÝj-gÝj<gÝjKgÝjZgÝjigÝjxgÝj‡gÝj–gÝj¥gÝj´gÝjÃgÝjÒgÝjágÝjðgÝjÿgÝjhÝjhÝj,hÝj;hÝjJhÝjYhÝjhhÝjwhÝj†hÝj•hÝj¤hÝj³hÝjÂhÝjÑhÝjàhÝjïhÝjþhÝj iÝjiÝj+iÝj:iÝjIiÝjXiÝjgiÝjviÝj…iÝj”iÝj£iÝj²iÝjÁiÝjÐiÝjßiÝjîiÝjýiÝj jÝjjÝj*jÝj9jÝjHjÝjWjÝjfjÝjujÝj„jÝj“jÝj¢jÝj±jÝjÀjÝjÏjÝjÞjÝjíjÝjüjÝj kÝjkÝj)kÝj8kÝjGkÝjVkÝjekÝjtkÝjƒkÝj’kÝj¡kÝj°kÝj¿kÝjÎkÝjÝkÝjìkÝjûkÝj lÝjlÝj(lÝj7lÝjFlÝjUlÝjdlÝjslÝj‚lÝj‘lÝj lÝj¯lÝj¾lÝjÍlÝjÜlÝjëlÝjúlÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝjxgÝj mÝjmÝj'mÝj6mÝjEmÝjTmÝjcmÝjrmÝjmÝjmÝjŸmÝj®mÝj½mÝjÌmÝjÛmÝjêmÝjùmÝjnÝjnÝj&nÝj5nÝjDnÝjSnÝjbnÝjqnÝj€nÝjnÝjžnÝj­nÝj¼nÝjËnÝjÚnÝjénÝjønÝjoÝjoÝj%oÝj4oÝjCoÝjRoÝjaoÝjpoÝjoÝjŽoÝjoÝj¬oÝj»oÝjÊoÝjÙoÝjèoÝj÷oÝjpÝjpÝj$pÝj3pÝjBpÝjQpÝj`pÝjopÝj~pÝjpÝjœpÝj«pÝjºpÝjÉpÝjØpÝjçpÝjöpÝjqÝjqÝj#qÝj2qÝjAqÝjPqÝj_qÝjnqÝj}qÝjŒqÝj›qÝjªqÝj¹qÝjÈqÝj×qÝjæqÝjõqÝjrÝjrÝj"rÝj1rÝj@rÝjOrÝj^rÝjmrÝj|rÝj‹rÝjšrÝj��������������������������������ÀrÝj�sÝj@sÝj€sÝjÀsÝj�tÝj@tÝj€tÝjÀtÝj�uÝj@uÝj€uÝjÀuÝj�vÝj@vÝj€vÝjÀvÝj�wÝj@wÝj€wÝjÀwÝj�xÝj@xÝj€xÝjÀxÝj�yÝj@yÝj€yÝjÀyÝj�zÝj@zÝj€zÝjÀzÝj�{Ýj@{Ýj€{ÝjÀ{Ýj�|Ýj@|Ýj€|ÝjÀ|Ýj�}Ýj@}Ýj€}ÝjÀ}Ýj�~Ýj@~Ýj€~ÝjÀ~Ýj�Ýj@Ýj€ÝjÀÝj�€Ýj@€Ýj€€ÝjÀ€Ýj�Ýj@Ýj€ÝjÀÝj�‚Ýj@‚Ýj€‚ÝjÀ‚Ýj�ƒÝj@ƒÝj€ƒÝjÀƒÝj�„Ýj@„Ýj€„ÝjÀ„Ýj�…Ýj@…Ýj€…ÝjÀ…Ýj�†Ýj@†Ýj€†ÝjÀ†Ýj�‡Ýj@‡Ýj€‡ÝjÀ‡Ýj�ˆÝj@ˆÝj€ˆÝjÀˆÝj�‰Ýj@‰Ýj€‰ÝjÀ‰Ýj�ŠÝj@ŠÝj€ŠÝjÀŠÝj�‹Ýj@‹Ýj€‹ÝjÀ‹Ýj�ŒÝj@ŒÝj€ŒÝjÀŒÝj�Ýj@Ýj€ÝjÀÝj�ŽÝj@ŽÝj€ŽÝjÀŽÝj�Ýj@Ýj€ÝjÀÝj�Ýj@Ýj€ÝjÀÝj�‘Ýj@‘Ýj€‘ÝjÀ‘Ýj�’Ýj@’ÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝjÀzÝj€’ÝjÀ’Ýj�“Ýj@“Ýj€“ÝjÀ“Ýj�”Ýj@”Ýj€”ÝjÀ”Ýj�•Ýj@•Ýj€•ÝjÀ•Ýj�–Ýj@–Ýj€–ÝjÀ–Ýj�—Ýj@—Ýj€—ÝjÀ—Ýj�˜Ýj@˜Ýj€˜ÝjÀ˜Ýj�™Ýj@™Ýj€™ÝjÀ™Ýj�šÝj@šÝj€šÝjÀšÝj�›Ýj@›Ýj€›ÝjÀ›Ýj�œÝj@œÝj€œÝjÀœÝj�Ýj@Ýj€ÝjÀÝj�žÝj@žÝj€žÝjÀžÝj�ŸÝj@ŸÝj€ŸÝjÀŸÝj� Ýj@ Ýj€ ÝjÀ Ýj�¡Ýj@¡Ýj€¡ÝjÀ¡Ýj�¢Ýj@¢Ýj€¢ÝjÀ¢Ýj�£Ýj@£Ýj€£ÝjÀ£Ýj�¤Ýj@¤Ýj€¤ÝjÀ¤Ýj�¥Ýj@¥Ýj€¥ÝjÀ¥Ýj�¦Ýj@¦Ýj€¦ÝjÀ¦Ýj�§Ýj@§Ýj€§ÝjÀ§Ýj�¨Ýj@¨Ýj€¨ÝjÀ¨Ýj�©Ýj@©Ýj€©ÝjÀ©Ýj�ªÝj@ªÝj��������������������������������aªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjpªÝjªÝjŽªÝjªÝj¬ªÝjɪÝjتÝjçªÝjöªÝj«Ýj«Ýj#«Ýj2«ÝjA«ÝjP«Ýj_«Ýjn«Ýj}«ÝjŒ«Ýj›«Ýjª«Ýj¹«ÝjÈ«Ýj׫Ýjæ«Ýjõ«Ýj¬Ýj¬Ýj"¬Ýj1¬Ýj@¬ÝjO¬Ýjl¬Ýj{¬ÝjЬÝj™¬Ýj¨¬Ýj·¬ÝjƬÝjÕ¬Ýjä¬Ýjó¬Ýj­Ýj­Ýj ­Ýj=­ÝjL­Ýj[­Ýjj­Ýjy­Ýjˆ­Ýj—­Ýj¦­Ýjµ­ÝjÄ­Ýjá­Ýjð­Ýjÿ­Ýj®Ýj®Ýj,®Ýj;®ÝjJ®ÝjY®Ýjh®Ýjw®Ýj†®Ýj•®Ýj¤®Ýj³®Ýj®ÝjÑ®Ýjà®Ýjï®Ýjþ®Ýj ¯Ýj¯Ýj+¯Ýj:¯ÝjI¯ÝjX¯Ýjg¯Ýjv¯Ýj…¯Ýj”¯Ýj£¯Ýj²¯ÝjÁ¯ÝjЯÝj߯Ýjî¯Ýjý¯Ýj °Ýj°ÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝjaªÝj*°Ýj9°ÝjH°ÝjW°Ýjf°Ýju°Ýj„°Ýj“°Ýj¢°Ýj±°ÝjΰÝjݰÝjì°Ýjû°Ýj ±Ýj'±Ýj6±ÝjE±ÝjT±Ýjc±Ýjr±Ýj±Ýj±ÝjŸ±Ýj®±Ýj½±Ýj̱ÝjÛ±Ýjê±Ýj²Ýj$²ÝjA²ÝjP²Ýj_²Ýjn²Ýj}²ÝjŒ²Ýj›²Ýjª²ÝjDzÝjÖ²Ýjå²Ýjô²Ýj³Ýj³Ýj!³Ýj0³Ýj?³ÝjN³Ýj]³Ýjl³Ýj{³ÝjгÝj™³Ýj¨³Ýj·³ÝjƳÝjÕ³Ýjä³Ýjó³Ýj´Ýj´Ýj ´Ýj/´Ýj>´ÝjM´Ýj\´Ýjk´Ýjz´Ýj‰´Ýj˜´Ýj§´Ýj¶´ÝjÅ´ÝjÔ´Ýjã´Ýjò´ÝjµÝjµÝjµÝj.µÝj=µÝjLµÝj[µÝjjµÝjyµÝjˆµÝj—µÝj¦µÝjµµÝjĵÝjÓµÝjâµÝjñµÝj�¶Ýj¶Ýj��������������������������������¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj/¶Ýj@¶ÝjQ¶Ýjb¶Ýj€¶ÝjÀ¶Ýjá¶Ýjò¶Ýj·Ýj·Ýj%·Ýj6·ÝjG·ÝjX·Ýji·Ýjz·Ýj‹·Ýjœ·Ýj­·Ýj¾·ÝjÏ·Ýjà·Ýjñ·Ýj¸Ýj¸Ýj$¸Ýj5¸ÝjF¸ÝjW¸Ýjh¸Ýjy¸Ýj ¸Ýjà¸Ýj¹Ýj ¹Ýj`¹Ýj¹Ýj’¹ÝjÀ¹Ýj�ºÝj!ºÝj2ºÝjCºÝjTºÝj€ºÝjÀºÝj�»Ýj!»Ýj@»Ýja»Ýjr»Ýjƒ»Ýj”»ÝjÀ»Ýj�¼Ýj@¼Ýj€¼ÝjÀ¼Ýjá¼Ýjò¼Ýj½Ýj½Ýj%½Ýj6½ÝjG½ÝjX½Ýji½Ýjz½Ýj‹½Ýjœ½Ýj­½Ýj¾½ÝjϽÝjà½Ýjñ½Ýj¾Ýj ¾ÝjA¾ÝjR¾Ýjc¾Ýjt¾Ýj…¾Ýj–¾Ýj§¾Ýj¸¾ÝjɾÝjà¾Ýj¿Ýj¿Ýj#¿Ýj4¿ÝjE¿ÝjV¿Ýjg¿Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýj¶Ýjx¿Ýj‰¿Ýjš¿Ýj«¿Ýj¼¿ÝjÍ¿ÝjÞ¿Ýjï¿Ýj�ÀÝj ÀÝjAÀÝjRÀÝjcÀÝjtÀÝj ÀÝjÁÀÝjÒÀÝjãÀÝjôÀÝjÁÝjÁÝj'ÁÝj8ÁÝjIÁÝjZÁÝjkÁÝj|ÁÝjÁÝj ÁÝjàÁÝj ÂÝjAÂÝj`ÂÝj ÂÝjàÂÝj ÃÝj`ÃÝj ÃÝjàÃÝj ÄÝjAÄÝjRÄÝjcÄÝjtÄÝj…ÄÝj–ÄÝj§ÄÝj¸ÄÝjàÄÝj ÅÝj`ÅÝj ÅÝjàÅÝj ÆÝj`ÆÝjÆÝj ÆÝjÁÆÝjÒÆÝjãÆÝjôÆÝj ÇÝjAÇÝjRÇÝjcÇÝjtÇÝj…ÇÝj–ÇÝj§ÇÝj¸ÇÝjàÇÝjÈÝjÈÝj#ÈÝj4ÈÝjEÈÝjVÈÝjgÈÝjxÈÝj‰ÈÝjšÈÝj«ÈÝj¼ÈÝjÍÈÝjÞÈÝjïÈÝj�ÉÝjÉÝj"ÉÝj3ÉÝjDÉÝjUÉÝjfÉÝjwÉÝjˆÉÝj™ÉÝj��������������������������������ªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjÂÉÝjÚÉÝj�ÊÝj@ÊÝj€ÊÝjÀÊÝjïÊÝjËÝjËÝj7ËÝj`ËÝjËÝjÀËÝjïËÝjÌÝj ÌÝj`ÌÝj ÌÝjàÌÝj ÍÝj`ÍÝj ÍÝjàÍÝj ÎÝj`ÎÝjÎÝj§ÎÝjÀÎÝj�ÏÝj@ÏÝj€ÏÝjÀÏÝj ÐÝj`ÐÝj ÐÝjàÐÝj ÑÝj`ÑÝj ÑÝjàÑÝjÒÝj@ÒÝj€ÒÝjÀÒÝj�ÓÝj@ÓÝj€ÓÝjÀÓÝj�ÔÝj@ÔÝj€ÔÝjÀÔÝj�ÕÝj@ÕÝj€ÕÝjàÕÝj ÖÝj`ÖÝjÖÝj§ÖÝj¿ÖÝjàÖÝj ×ÝjO×Ýj€×ÝjÀ×Ýj�ØÝj@ØÝj€ØÝj¯ØÝjàØÝj ÙÝjOÙÝjgÙÝj€ÙÝj¯ÙÝjàÙÝj ÚÝj`ÚÝj ÚÝjàÚÝjÛÝj@ÛÝjoÛÝj ÛÝjàÛÝj ÜÝj`ÜÝj ÜÝjàÜÝjÝÝj'ÝÝj?ÝÝj`ÝÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjªÉÝjÝÝj§ÝÝjÀÝÝj�ÞÝj@ÞÝj€ÞÝj¯ÞÝjàÞÝjßÝj@ßÝjoßÝj ßÝjàßÝjàÝj@àÝjoàÝj‡àÝj àÝjÏàÝjçàÝjÿàÝj áÝj`áÝjáÝj§áÝj¿áÝj×áÝj�âÝj@âÝj€âÝjÀâÝj�ãÝj@ãÝj€ãÝjÀãÝj�äÝj@äÝj€äÝjÀäÝj åÝj`åÝj åÝjàåÝj æÝjOæÝjgæÝjæÝj—æÝjÀæÝj�çÝj@çÝj€çÝjÀçÝj�èÝj@èÝj€èÝjÀèÝj�éÝj@éÝj€éÝjÀéÝj�êÝj@êÝj€êÝjÀêÝj�ëÝj@ëÝj€ëÝjÀëÝj�ìÝj@ìÝj€ìÝjÀìÝj�íÝj@íÝj€íÝj¯íÝjÇíÝjßíÝj÷íÝj îÝj`îÝj îÝjàîÝj ïÝj`ïÝj ïÝjàïÝj ðÝj`ðÝj ðÝjàðÝj ñÝj`ñÝj ñÝjàñÝj��������������������������������òÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝj-òÝj<òÝjKòÝjZòÝjiòÝjxòÝj‡òÝj–òÝj¥òÝj´òÝjÃòÝjÒòÝjáòÝjðòÝjÿòÝjóÝjóÝj,óÝj;óÝjJóÝjYóÝjhóÝjwóÝj†óÝj•óÝj¤óÝj³óÝjÂóÝjÑóÝjàóÝjïóÝj ôÝjôÝj*ôÝj9ôÝjHôÝjWôÝjfôÝjuôÝj„ôÝj“ôÝj¢ôÝj±ôÝjÀôÝjÝôÝjìôÝjûôÝj õÝjõÝj(õÝj7õÝjFõÝjUõÝjdõÝjõÝjõÝjŸõÝj®õÝj½õÝjÌõÝjÛõÝjêõÝjùõÝjöÝjöÝj&öÝj5öÝjDöÝjSöÝjböÝjqöÝj€öÝjöÝjžöÝj­öÝj¼öÝjËöÝjÚöÝjéöÝjøöÝj÷Ýj÷Ýj%÷Ýj4÷ÝjC÷ÝjR÷Ýja÷Ýjp÷Ýj÷ÝjŽ÷Ýj÷Ýj¬÷Ýj»÷ÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjòÝjÊ÷ÝjÙ÷Ýjè÷Ýj÷÷ÝjøÝjøÝj$øÝj3øÝjBøÝjQøÝjnøÝj}øÝjŒøÝj›øÝjªøÝjÇøÝjÖøÝjåøÝjôøÝjùÝjùÝj!ùÝj0ùÝj?ùÝjNùÝj]ùÝjlùÝj{ùÝjŠùÝj™ùÝj¨ùÝj·ùÝjÆùÝjÕùÝjäùÝjóùÝjúÝjúÝj úÝj=úÝjLúÝj[úÝjjúÝjyúÝjˆúÝj—úÝj¦úÝjµúÝjÄúÝjÓúÝjâúÝjñúÝj�ûÝjûÝjûÝj-ûÝj<ûÝjKûÝjZûÝjiûÝjxûÝj‡ûÝj–ûÝj¥ûÝj´ûÝjÃûÝjÒûÝjáûÝjðûÝjÿûÝjüÝjüÝj,üÝj;üÝjJüÝjYüÝjhüÝjwüÝj†üÝj•üÝj¤üÝj³üÝjÂüÝjÑüÝjàüÝjïüÝjþüÝj ýÝjýÝj+ýÝj:ýÝjIýÝjXýÝjgýÝjvýÝj…ýÝj��������������������������������”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj²ýÝjàýÝj þÝj`þÝj þÝj�ÿÝjXÿÝjvÿÝj”ÿÝjÀÿÝj��Þj;�Þj`�Þj›�Þj¹�Þjà�Þj Þj`Þj ÞjàÞj Þj`Þj ÞjàÞj Þj[ÞjyÞj ÞjàÞj Þj`Þj Þj�Þj`Þj ÞjàÞj@Þj€ÞjÀÞj ÞjxÞj ÞjàÞj@Þj€ÞjàÞj@ Þj  Þjà Þj@ Þj€ ÞjÀ Þj� Þj` ÞjÀ Þj Þj€ ÞjÀ Þjû Þj Þj7 Þj` Þj  ÞjÛ Þj�Þj@Þj€ÞjÀÞj�Þj;Þj`Þj ÞjÛÞjùÞj Þj[Þj€ÞjàÞj Þj`Þj ÞjÛÞj�Þj;Þj`Þj ÞjàÞj@Þj€ÞjÀÞj�Þj;Þj`Þj Þj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝj”ýÝjÛÞjùÞj Þj`Þj ÞjàÞjÞj@Þj{Þj ÞjøÞj Þj`Þj ÞjàÞj8Þj`Þj ÞjÛÞjùÞjÞj@Þj€Þj»ÞjÙÞj÷ÞjÞj@Þj€ÞjàÞj@Þj ÞjàÞj@Þj Þj�Þj`ÞjÀÞj Þj€ÞjÀÞj�Þj@Þj€Þj»ÞjÙÞj÷Þj Þj@ Þj  Þj�!Þj`!ÞjÀ!Þj "Þj€"Þjà"Þj #Þj€#Þjà#Þj@$Þj $Þj�%Þj@%Þj€%ÞjÀ%Þj�&Þj@&Þj€&ÞjÀ&Þj�'Þj@'Þj€'ÞjÀ'Þj�(Þj@(Þj€(Þj»(ÞjÙ(Þj÷(Þj)Þj@)Þj€)ÞjÀ)Þj�*Þj@*Þj€*ÞjÀ*Þj�+Þj@+Þj€+ÞjÀ+Þj�,Þj@,Þj€,ÞjÀ,Þj�-Þj��������������������������������������ð?����������������á=UUUUÕ¿+øþÝ}+î?��������á=UUUUÕ¿+øþÝ}+Þ¿â5 p½ ê?á=UUUUÕ¿+øþÝ}+Þ¿â5 p½ ê¿çnfž Ö?çnfž Ö?������à?çnfž Ö¿çnfž Ö?������à?çnfž Ö¿çnfž Ö¿������à?çnfž Ö?çnfž Ö¿������à?��������������ð?��������������ð¿������������������������������ð¿��������������ð?����������������çnfž Ö?çnfž Ö?������à¿çnfž Ö¿çnfž Ö?������à¿çnfž Ö¿çnfž Ö¿������à¿çnfž Ö?çnfž Ö¿������à¿����������������������ð?¸Kfž æ?��������������à?��������¸Kfž æ?������à?¸Kfž æ¿��������������à?��������¸Kfž æ¿������à?¸Kfž æ?¸Kfž æ?��������¸Kfž æ¿¸Kfž æ?��������¸Kfž æ¿¸Kfž æ¿��������¸Kfž æ?¸Kfž æ¿��������¸Kfž æ?��������������à¿��������¸Kfž æ?������࿸Kfž æ¿��������������à¿��������¸Kfž æ¿������à¿����������������������ð¿����������������������ð?����������������Ïð¿Å%ŸÜ?Ïð¿Å%Ÿì?��������Ïð¿Å%ŸÜ?U” m°Ñ?ÛHF ˆ8ë?Ïð¿Å%ŸÜ?ÕµoqÉ'ç¿ZN¡ ÊÒà?Ïð¿Å%ŸÜ?ÕµoqÉ'ç¿ZN¡ ÊÒà¿Ïð¿Å%ŸÜ?U” m°Ñ?ÛHF ˆ8ë¿Ïð¿Å%ŸÜ¿Ïð¿Å%Ÿì¿��������Ïð¿Å%ŸÜ¿U” m°Ñ¿ÛHF ˆ8ë?Ïð¿Å%ŸÜ¿ÕµoqÉ'ç?ZN¡ ÊÒà?Ïð¿Å%ŸÜ¿ÕµoqÉ'ç?ZN¡ ÊÒà¿Ïð¿Å%ŸÜ¿U” m°Ñ¿ÛHF ˆ8ë¿������ð¿����������������ÿÿÿÿÿÿÿÿ����,��,����������������������ÿÿÿÿ������������������������������������������������€��à��������H��������������������������������������������ÿÿÿÿš™Y?š™Y?š™Y?��€?š™>š™>ffæ>��€?��������������€?��€?��€?��€?��€?������������������������������������������������������������������������������������������������������������������������������������������������������������üEÞjFÞjFÞj FÞj,FÞj8FÞjDFÞjPFÞj\FÞjhFÞjtFÞj€FÞjŒFÞj˜FÞj¤FÞj°FÞj¼FÞjÈFÞjÔFÞjàFÞjìFÞjøFÞjGÞjGÞjGÞj(GÞj4GÞj@GÞjLGÞjXGÞjdGÞjpGÞj|GÞjˆGÞj”GÞj GÞj¬GÞj¸GÞjÄGÞjÐGÞjÜGÞjèGÞjôGÞj�HÞj HÞjHÞj$HÞj0HÞj<HÞjHHÞjTHÞj`HÞjlHÞjxHÞj„HÞjHÞjœHÞj¨HÞj´HÞjÀHÞjÌHÞjØHÞjäHÞjðHÞjüHÞjIÞjIÞj IÞj,IÞj8IÞjDIÞjPIÞj\IÞjhIÞjtIÞj€IÞjŒIÞj˜IÞj¤IÞj°IÞj¼IÞjÈIÞjÔIÞjàIÞjìIÞjøIÞjJÞjJÞjJÞj(JÞj4JÞj@JÞjLJÞjXJÞjdJÞjpJÞj��������������������������������������������������������������������������������������������������������������������������������8vÞjDvÞjPvÞj\vÞjhvÞjtvÞj€vÞjŒvÞj˜vÞj¤vÞj°vÞj¼vÞjÈvÞjÔvÞjàvÞjìvÞjøvÞjwÞjwÞjwÞj(wÞj4wÞj@wÞjLwÞjXwÞjdwÞjpwÞj|wÞjˆwÞj”wÞj wÞj¬wÞj¸wÞjÄwÞjÐwÞjÜwÞjèwÞjôwÞj�xÞj xÞjxÞj$xÞj0xÞj<xÞjHxÞjTxÞj`xÞjlxÞjxxÞj„xÞjxÞjœxÞj¨xÞj´xÞjÀxÞjÌxÞjØxÞjäxÞjðxÞjüxÞjyÞjyÞj yÞj,yÞj8yÞjDyÞjPyÞj\yÞjhyÞjtyÞj€yÞjŒyÞj˜yÞj¤yÞj°yÞj¼yÞjÈyÞjÔyÞjàyÞjìyÞjøyÞjzÞjzÞjzÞj(zÞj4zÞj@zÞjLzÞjXzÞjdzÞjpzÞj|zÞjˆzÞj”zÞj zÞj¬zÞj����������������������ð?����������������������ð?������ð?������ð?ðÝj��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libgcj_s.dll�_Jv_RegisterClasses����glutTabletButtonFunc���� ERROR: Function <%s> called without first calling 'glutInit'.�glutTabletMotionFunc�glutDialsFunc�glutButtonBoxFunc�glutWindowStatusFunc�glutOverlayDisplayFunc�glutMenuStatusFunc�glutMenuStateFunc�glutMenuDestroyFunc�glutCloseFunc�glutWMCloseFunc�glutEntryFunc�glutPassiveMotionFunc�glutMotionFunc�glutMouseWheelFunc�glutMouseFunc�glutSpecialUpFunc�glutKeyboardUpFunc�glutVisibilityFunc�glutIdleFunc�glutSpecialFunc�glutKeyboardFunc�glutReshapeFunc�glutDisplayFunc���Fatal error in program. NULL display callback not permitted in GLUT 3.0+ or freeglut 2.0.1+�glutSpaceballButtonFunc�glutSpaceballRotateFunc�glutSpaceballMotionFunc�glutJoystickFunc�Visibility Callback��� ERROR: Internal <%s> function called without first calling 'glutInit'.�glutTimerFunc��Fatal error: Memory allocation failure in glutTimerFunc()���glutWarpPointer� ERROR: Function <%s> called without first calling 'glutInit'.� ERROR: Function <%s> called with no current window defined.�Unknown cursor type: %d���ÐÜjÐÜjÜjÄÜjÜj0ÜjÄÜj¡ÜjgÜjÄÜj%ÜjãÜjgÜjgÜjgÜjgÜj‡ÜjEÜj‡ÜjEÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjCÜjgÜjÜjrÜjglutSetCursor���glutPostRedisplay��� ERROR: Function <%s> called without first calling 'glutInit'.� ERROR: Function <%s> called with no current window defined.�glutPostWindowRedisplay�glutSwapBuffers���freeglut: %d frames in %.2f seconds = %.2f FPS �oƒ:glutGetProcAddress�� ERROR: Function <%s> called without first calling 'glutInit'.�glut�glutInit�glutInitDisplayMode�glutInitDisplayString�glutInitWindowPosition�glutInitWindowSize�glutMainLoop�glutExit�glutCreateWindow�glutCreateSubWindow�glutDestroyWindow�glutPostRedisplay�glutPostWindowRedisplay�glutSwapBuffers�glutGetWindow�glutSetWindow�glutSetWindowTitle�glutSetIconTitle�glutPositionWindow�glutReshapeWindow�glutPopWindow�glutPushWindow�glutIconifyWindow�glutShowWindow�glutHideWindow�glutFullScreen�glutSetCursor�glutWarpPointer�glutEstablishOverlay�glutRemoveOverlay�glutUseLayer�glutPostOverlayRedisplay����glutPostWindowOverlayRedisplay�glutShowOverlay�glutHideOverlay�glutCreateMenu�glutDestroyMenu�glutGetMenu�glutSetMenu�glutAddMenuEntry�glutAddSubMenu�glutChangeToMenuEntry�glutChangeToSubMenu�glutRemoveMenuItem�glutAttachMenu�glutDetachMenu�glutDisplayFunc�glutReshapeFunc�glutKeyboardFunc�glutMouseFunc�glutMotionFunc�glutPassiveMotionFunc�glutEntryFunc�glutVisibilityFunc�glutIdleFunc�glutTimerFunc�glutMenuStateFunc�glutSpecialFunc�glutSpaceballMotionFunc�glutSpaceballRotateFunc�glutSpaceballButtonFunc�glutButtonBoxFunc�glutDialsFunc�glutTabletMotionFunc�glutTabletButtonFunc�glutMenuStatusFunc�glutOverlayDisplayFunc�glutWindowStatusFunc�glutKeyboardUpFunc�glutSpecialUpFunc�glutJoystickFunc�glutSetColor�glutGetColor�glutCopyColormap�glutGet�glutDeviceGet�glutExtensionSupported�glutGetModifiers�glutLayerGet�glutBitmapCharacter�glutBitmapWidth�glutStrokeCharacter�glutStrokeWidth�glutBitmapLength�glutStrokeLength�glutWireSphere�glutSolidSphere�glutWireCone�glutSolidCone�glutWireCube�glutSolidCube�glutWireTorus�glutSolidTorus�glutWireDodecahedron�glutSolidDodecahedron�glutWireTeapot�glutSolidTeapot�glutWireOctahedron�glutSolidOctahedron�glutWireTetrahedron�glutSolidTetrahedron�glutWireIcosahedron�glutSolidIcosahedron�glutVideoResizeGet�glutSetupVideoResizing�glutStopVideoResizing�glutVideoResize�glutVideoPan�glutReportErrors�glutIgnoreKeyRepeat�glutSetKeyRepeat�glutForceJoystickFunc�glutGameModeString�glutEnterGameMode�glutLeaveGameMode�glutGameModeGet�glutMainLoopEvent�glutLeaveMainLoop�glutCloseFunc�glutWMCloseFunc�glutMenuDestroyFunc�glutFullScreenToggle�glutSetOption�glutGetModeValues�glutSetWindowData�glutGetWindowData�glutSetMenuData�glutGetMenuData�glutBitmapHeight�glutStrokeHeight�glutBitmapString�glutStrokeString�glutWireRhombicDodecahedron�glutSolidRhombicDodecahedron�glutWireSierpinskiSponge�glutSolidSierpinskiSponge�glutWireCylinder�glutSolidCylinder�glutMouseWheelFunc�glutJoystickGetNumAxes�glutJoystickGetNumButtons�glutJoystickNotWorking�glutJoystickGetDeadBand�glutJoystickSetDeadBand�glutJoystickGetSaturation�glutJoystickSetSaturation�glutJoystickSetMinRange�glutJoystickSetMaxRange�glutJoystickSetCenter�glutJoystickGetMinRange�glutJoystickGetMaxRange�glutJoystickGetCenter�glutInitContextVersion�glutInitContextFlags�glutInitContextProfile��stroke font 0x%08x not found�glutStrokeHeight��� ERROR: Function <%s> called without first calling 'glutInit'.�glutStrokeLength�glutStrokeWidth�font 0x%08x not found�glutBitmapHeight�glutBitmapLength�glutBitmapWidth�glutStrokeString�glutStrokeCharacter�glutBitmapString�glutBitmapCharacter�����?��������-misc-fixed-medium-r-normal--13-120-75-75-C-80-iso8859-1����@cÝj������� Ýj������@@-misc-fixed-medium-r-normal--15-140-75-75-C-90-iso8859-1����”cÝj������ $Ýj������€@-adobe-helvetica-medium-r-normal--10-100-75-75-p-56-iso8859-1���ècÝj������@(Ýj������@@-adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1���@dÝj������`,Ýj������€@-adobe-helvetica-medium-r-normal--18-180-75-75-p-98-iso8859-1���˜dÝj������€0Ýj������ @-adobe-times-medium-r-normal--10-100-75-75-p-54-iso8859-1���ðdÝj������ 4Ýj������€@-adobe-times-medium-r-normal--24-240-75-75-p-124-iso8859-1��DeÝj������À8Ýj������à@���ª�‚�‚�‚�ª������8|þ|8����ªUªUªUªUªUªUª���® à  ����� Ž€À€à����� l€€€`����� €€����������$$������|�|������¨   À�����.PPˆˆ���������ð�ð���������������������ÿ�������������ÿ����������ÿ����������ÿ����������ÿ����������ÿ��������������ð�������ÿ�ÿ����������þ�0À0�������þ�àà�������DDDDDþ�������� ~~������Üb p "��������������������������������������������$$$������$$~$~$$������x8PP<�����D*$$R"�����:DJ0HH0�������������@08����������  �������$~$���������|������@08����������������~��������8������������€€@ �����$BBBBB$�����|P0�����~@ BB<�����<B~�����~DD$ �����<Bb\@@~�����<BBb\@@ ����� ~�����<BBB<BBB<�����8:FBB<����8��8������@08��8������� �������~��~��������@  @������BB<�����<@JVRNBB<�����BBB~BBB$�����üBBB|BBBü�����<B@@@@@B<�����üBBBBBBBü�����~@@@x@@@~�����@@@@x@@@~�����:FBN@@@B<�����BBBB~BBBB�����||�����8D�����BDHP`PHDB�����~@@@@@@@@�����‚‚‚’’ªÆ‚‚�����BBBFJRbBB�����<BBBBBBB<�����@@@@|BBB|����<JRBBBBB<�����BDHP|BBB|�����<B<@@B<�����þ�����<BBBBBBBB�����(((DDD‚‚�����Dª’’’‚‚‚‚�����‚‚D((D‚‚�����(D‚‚�����~@@ ~�����< <����� @€€�����xx�����������D(����þ��������������������8�����:FB><��������\bBBb\@@@�����<B@@B<��������:FBBF:�����<B@~B<�������� | "���<B<@8DD:��������BBBBb\@@@�����|0�����8DD �������BDHpHD@@@�����|0�����‚’’’’ì��������BBBBb\��������<BBBB<������@@@\bBb\������:FBF:�������� "\��������<B 0B<��������" | ������:DDDDD��������((DDD��������Dª’’‚‚��������B$$B������<B:FBBB��������~ ~��������0����������p p�����������HT$��������������������������8TPPT8�����Üb p "������B<$$<B�������||(D‚‚�����������$$$ $������������l������8D’ª¢ª’D8������|�<D<8������$HH$�������~�������������<����������8Dª²ªª’D8������������~����������$$������|�|����������x@0H0��������0HH0���������������@ZfBBBB��������4ttt>����������������������������������p ` �������x�0HH0������H$$H������ æB@@À@���� òL@@À@���� f’ `����<BB@ ������BB~BB$�����BB~BB$�����BB~BB$�$����BB~BB$�L2����BB~BB$�$$����BB~BB$$����žðœn���<B@@@@@B<�����~@@x@@~�����~@@x@@~�����~@@x@@~�$����~@@x@@~�$$����||� ����||�����||�$����||�((����xDBBâBBDx�����‚†Š’¢Â‚�˜d����|‚‚‚‚‚|� ����|‚‚‚‚‚|�����|‚‚‚‚‚|�$����|‚‚‚‚‚|�˜d����|‚‚‚‚‚|�((�����B$$B������@<bRRRJJF<����<BBBBBB�����<BBBBBB�����<BBBBBB�$����<BBBBBB�$$����(DD�����@@@|BBB|@�����\BBLPHDD8�����:FB><������:FB><������:FB><��$����:FB><��L2����:FB><��$$����:FB><�$����l’|l������<B@@B<��������<B@~B<������<B@~B<������<B@~B<��$����<B@~B<��$$����|0�� ����|0�� ����|0��H0����|0��((����<BBBB<($����BBBBb\��L2����<BBBB<�� ����<BBBB<������<BBBB<��$����<BBBB<��L2����<BBBB<��$$������|������@<bRJF<�������:DDDDD�� ����:DDDDD������:DDDDD��$����:DDDDD��((��<B:FBBB����@@\bBBb\@@����<B:FBBB��$$������������������������ ��������[�@��A�@��A�@��m������������������������������������ ����������>��ÿ€�>���������������������������������������� ��ª€U�ª€U�ª€U�ª€U�ª€U�ª€U�ª€U�ª€������������������������������� ���������������H�H�x�H�H���������������������������������� ������������H�O�@�p�@�x������������������������������������ �������� � �� ����8�@�@�@�8���������������������������������� ���������������x�@�@�@�@���������������������������������� �������������������� ��� ������������������������������������ ������������������������������������������������������� ���������������D�L�T�d�D���������������������������������� ����������������(�(�D�D���������������������������������� ����������������ø��������������������������������������� ���������ø���������������������������������������������� ���������€��������������������������������������������� ����������������€�������������������������������������� ���������ÿ€�������������������������������������� ������������������������������ÿ€������������������������������� ������������������������ÿ€������������������������������������� ����������������ÿ€��������������������������������������������� ��������ÿ€����������������������������������������������������� ��ÿ€����������������������������������������������������������� ���������€�������������������������������������� ���������ø��������������������������������������� ����������������ÿ€�������������������������������������� ���������ÿ€��������������������������������������������� ������������������������������������������������ ���������������`������������������������������������������ �������������`����`���������������������������������������� ��������"�"�"�"�"�"������������������������������������������� �������������������������������������������������������� ��������.�Q�0���|���������������������������������������� ���������������� � �������������������������������������������� ��������������������������������������������������������������� ������������������������������������������������������ ������������������������������������������������������������ ����������$�$�~�$�$�~�$�$�������������������������������������� �������>�I� � � ��(�H�I�>����������������������������������� ��������B�%�%����$�R�R�!������������������������������������ ��������1�J�D�J�1�0�H�H�H�0������������������������������������ ����������������������������������������������������������� ��������������������������������������������������� ��������������������������������������������������� �����������I�*��*�I����������������������������������������� �������������������������������������������������������� ����� � ���������������������������������������������������� �������������������������������������������������������������� �������� � ���������������������������������������������������� ��������@� � ������������������������������������������� ���������"�A�A�A�A�A�A�"������������������������������������� ��������������H�(�������������������������������������� ���������@� �����A�A�>������������������������������������ ��������>�A�������������������������������������������� ������������B�"�� �������������������������������������� ��������>�A����a�^�@�@������������������������������������� ��������>�A�A�A�a�^�@�@� ������������������������������������� �������� � �������������������������������������������� ���������"�A�A�"��"�A�"������������������������������������� ��������<����=�C�A�A�A�>������������������������������������ �������� � ������� � ������������������������������������������ ����� � ������� � ������������������������������������������ ������������ � ���������������������������������������� ������������������������������������������������������������� �������� ��������� ������������������������������������ ����������������A�A�>������������������������������������ ��������>�@�@�M�S�Q�O�A�A�>������������������������������������ ��������A�A�A��A�A�A�"�������������������������������������� ��������~�!�!�!�!�~�!�!�!�~������������������������������������ ��������>�A�@�@�@�@�@�@�A�>������������������������������������ ��������~�!�!�!�!�!�!�!�!�~������������������������������������ ��������� � � � �<� � � ������������������������������������� �������� � � � � �<� � � ������������������������������������� ��������>�A�A�A�G�@�@�@�A�>������������������������������������ ��������A�A�A�A�A��A�A�A�A������������������������������������ ��������>���������>������������������������������������ ��������<�B��������€����������������������������������� ��������A�B�D�H�P�p�H�D�B�A������������������������������������ ���������@�@�@�@�@�@�@�@�@������������������������������������ ��������A�A�A�I�I�U�U�c�A�A������������������������������������ ��������A�A�A�C�E�I�Q�a�A�A������������������������������������ ��������>�A�A�A�A�A�A�A�A�>������������������������������������ ��������@�@�@�@�@�~�A�A�A�~������������������������������������ ������>�I�Q�A�A�A�A�A�A�>������������������������������������ ��������A�A�B�D�H�~�A�A�A�~������������������������������������ ��������>�A�A���8�@�A�A�>������������������������������������ ����������������������������������������������������� ��������>�A�A�A�A�A�A�A�A�A������������������������������������ ������������"�"�"�A�A�A������������������������������������ ��������"�U�I�I�I�I�A�A�A�A������������������������������������ ��������A�A�"�����"�A�A������������������������������������ ���������������"�A�A������������������������������������ ���������@�@� ������������������������������������������ ��������������������������������������������������� ��������������� � �@������������������������������������ ������<�����������<���������������������������������� ��������������������A�"�������������������������������������� ������ÿ�������������������������������������������������������� �������������������������0���������������������������������� ��������=�C�A�?���>������������������������������������������ ��������^�a�A�A�A�a�^�@�@�@������������������������������������ ��������>�A�@�@�@�A�>������������������������������������������ ��������=�C�A�A�A�C�=��������������������������������������� ��������>�@�@��A�A�>������������������������������������������ ������������|����������������������������������������� ��>�A�A�>�@�<�B�B�B�=������������������������������������������ ��������A�A�A�A�A�a�^�@�@�@������������������������������������ ��������>������8����������������������������������������� ��<�B�B�B����������������������������������������������� ��������A�F�X�`�X�F�A�@�@�@������������������������������������ ��������>���������8������������������������������������ ��������A�I�I�I�I�I�v������������������������������������������ ��������A�A�A�A�A�a�^������������������������������������������ ��������>�A�A�A�A�A�>������������������������������������������ ��@�@�@�^�a�A�A�A�a�^������������������������������������������ �����=�C�A�A�A�C�=������������������������������������������ �������� � � � �!�1�N������������������������������������������ ��������>�A��>�@�A�>������������������������������������������ ��������������~���������������������������������������� ��������=�B�B�B�B�B�B������������������������������������������ �����������"�"�A�A������������������������������������������ ��������"�U�I�I�I�A�A������������������������������������������ ��������A�"����"�A������������������������������������������ ��<�B��:�F�B�B�B�B�B������������������������������������������ ��������� ����������������������������������������������� ��������������������������������������������������� ��������������������������������������������������� ������p����� � �����p���������������������������������� ����������������������F�I�1������������������������������������ ��������������������������������������������������������������� ������������������������������������������������������ �������� �<�R�P�H�J�<����������������������������������������� ��������.�Q�0���|���������������������������������������� ��������������A�>�"�"�>�A�������������������������������������� �����������>��>��"�A�A������������������������������������ ����������������������������������������������������� �������$���$�$�$�� �$������������������������������������� ��������������������������"�"���������������������������������� ����������<�B�™�¥�¡�¥�™�B�<������������������������������������ ��������������|���<�H�8�H�0������������������������������������ ���������� ��$�H�H�$�� �������������������������������������� ���������������~�������������������������������������������� ����������������>���������������������������������������������� ����������<�B�¥�©�¹�¥�¹�B�<������������������������������������ ��������������������������~������������������������������������ �������������������� ��� ������������������������������������ ������������������������������������������������������� ����������������x�@�0��H�0������������������������������������ ����������������0�H���H�0������������������������������������ ������������������������������������������������������������ ����@�@�]�c�A�A�A�A�A������������������������������������������ �������������=�E�E�E�?������������������������������������ ���������������� � �������������������������������������������� ���$� �������������������������������������������������������� ����������������p� � � �`� ������������������������������������ ����������������|���8�D�D�8������������������������������������ ����������H�$�� � ��$�H�������������������������������������� ��������� � ��s�!� � �`� ������������������������������������ ������������y�&� � �`� ������������������������������������ ��������� � ��3�I���H�0������������������������������������ ��������>�A�A�@� ������������������������������������������ ��������A�A�A��A�A�"������ �������������������������������� ��������A�A�A��A�A�"�������������������������������������� ��������A�A�A��A�A�"����"���������������������������������� ��������A�A�A��A�A�"����N�1���������������������������������� ��������A�A�A��A�A�"����"�"���������������������������������� ��������A�A�A��A�A�"���"����������������������������������� ��������O�H�H�H�~�H�H�H�H�7������������������������������������ ���$� �>�A�@�@�@�@�@�@�A�>������������������������������������ ��������� � � �<� � ������ �������������������������������� ��������� � � �<� � �������������������������������������� ��������� � � �<� � ����"���������������������������������� ��������� � � �<� � ����"�"���������������������������������� ��������>�������>����� �������������������������������� ��������>�������>������������������������������������� ��������>�������>���"���������������������������������� ��������>�������>���"�"���������������������������������� ��������|�!�!�!�!�á�!�!�!�|������������������������������������ ��������A�C�E�I�I�Q�a�A���N�1���������������������������������� ��������>�A�A�A�A�A�A�>����� �������������������������������� ��������>�A�A�A�A�A�A�>������������������������������������� ��������>�A�A�A�A�A�A�>���"���������������������������������� ��������>�A�A�A�A�A�A�>���N�1���������������������������������� ��������>�A�A�A�A�A�A�>���"�"���������������������������������� ����������A�"����"�A���������������������������������������� ������@�>�a�Q�Q�I�I�E�E�C�>����������������������������������� ��������>�A�A�A�A�A�A�A����� �������������������������������� ��������>�A�A�A�A�A�A�A������������������������������������� ��������>�A�A�A�A�A�A�A���"���������������������������������� ��������>�A�A�A�A�A�A�A���"�"���������������������������������� �������������"�A�A������������������������������������� ��������@�@�@�~�A�A�A�~�@�@������������������������������������ ��������,�"�"�"�$�h�$�"�"������������������������������������� ��������=�C�A�?���>��������������������������������������� ��������=�C�A�?���>��������������������������������������� ��������=�C�A�?���>���"������������������������������������ ��������=�C�A�?���>���&������������������������������������� ��������=�C�A�?���>���"�"������������������������������������ ��������=�C�A�?���>��� �� ���������������������������������� ��������7�I�H�>� �I�6������������������������������������������ ���$� �>�A�@�@�@�A�>������������������������������������������ ��������>�@�@��A�A�>����� ���������������������������������� ��������>�@�@��A�A�>��������������������������������������� ��������>�@�@��A�A�>���"������������������������������������ ��������>�@�@��A�A�>���"�"������������������������������������ ��������>������8����� ���������������������������������� ��������>������8��������������������������������������� ��������>������8���D�(����������������������������������� ��������>������8���$�$������������������������������������ ��������>�A�A�A�A�A�>��(��$���������������������������������� ��������A�A�A�A�A�a�^���N�1������������������������������������ ��������>�A�A�A�A�A�>����� ���������������������������������� ��������>�A�A�A�A�A�>��������������������������������������� ��������>�A�A�A�A�A�>���"������������������������������������ ��������>�A�A�A�A�A�>���N�1������������������������������������ ��������>�A�A�A�A�A�>���"�"������������������������������������ �������������������������������������������������������� ������@�>�Q�Q�I�E�E�>����������������������������������������� ��������=�B�B�B�B�B�B����� ���������������������������������� ��������=�B�B�B�B�B�B��������������������������������������� ��������=�B�B�B�B�B�B���"������������������������������������ ��������=�B�B�B�B�B�B���$�$������������������������������������ ��<�B��:�F�B�B�B�B�B��������������������������������������� ��@�@�@�^�a�A�A�a�^�@�@�@�������������������������������������� ��<�B��:�F�B�B�B�B�B���$�$����������������������@�@@@@@@������������PP������PPø(|((������ p¨(p ¨p ��� ������&�)����h�”�d����������2LLR0((�����������@ ���� @@€€€€@@ ����@  @����������� @ ������� ø ������€@@����������������|����������@�������������€€@@@@ ������pˆˆˆˆˆˆp������ ` ������ø€@0ˆp������pˆ0ˆp������øPP0������pˆð€€ø������pˆˆÈ°€ˆp������@@ ø������pˆˆˆpˆˆp������pˆh˜ˆˆp������@����@������€@@����@��������� @ ����������ð�ð����������@  @�������� � H0��� ��>�@�›�¤€¤€¢@’@M@ €����������‚‚|D((������xDDDxDDx������<B@@@@B<������xDBBBBDx������|@@@|@@|������@@@@x@@|������:FBF@@B<������BBBB~BBB������@@@@@@@@������`������DDHHpPHD������x@@@@@@@��� ������I�I�I�U�U�c�c�A����������FFJJRRbb������<BBBBBB<������@@@@xDDx�����>FJBBBB<������DDDDxDDx������8DD8@D8������ ø������<BBBBBBB������((DDD‚‚��� ������"�"�"�U�I�I�ˆ€ˆ€���������DD(((DD������((DD‚������|@ |����`@@@@@@@@`������ @@@@€€����À@@@@@@@@À���������ˆPP ����ü��������������������?@ ������hpà��������°ÈˆˆÈ°€€������`€€`��������h˜ˆˆ˜h������`€ð`��������@@@@@à@0����ph˜ˆˆ˜h��������ˆˆˆˆÈ°€€������€€€€€€�€�����€€€€€€€�€������ À €€������€€€€€€€€������’’’’’ì��������ˆˆˆˆÈ°��������pˆˆˆˆp������€€°ÈˆˆÈ°������h˜ˆˆ˜h��������€€€€À ��������```��������`@@@@à@@������p�������� PPˆˆ��������((TT’’��������ˆˆP Pˆ������€@@`  ��������ð€@ ð������ @@@@€@@@ ����@@@@@@@@@@����€@@@@ @@@€���������˜d���������������������@@@@@@�@�������@p¨  ¨p�������°H@@à@H0�������``������� ø øPPˆˆ����@@@@��@@@@����pˆpȘpÀˆp������������� ��� �������"�M�Q�M�"����������������à�  à������(P P(�����������|������������à������� �������"�U�Y�]�"��������������������à���������``�������ø� ø ����������à@ `����������À @à�������������€@����€€ð������(((((hèèè|���������À��������À@�����������������@@À@����������à�à à������ P(P ������ ������!�€� �H�D�Ä�B������� ������'��� �H�D�Ä�B������� ������!�€� �È�$�D�â��������0H@ ���������‚‚|D((� ���‚‚|D((����‚‚|D((�(���‚‚|D((�(���‚‚|D((�(����‚‚|D((( ������€ˆ�x�H�/€(��€�������<B@@@@B<������|@@@|@@|� ���|@@@|@@|����|@@|@@@|�(���|@@@|@@|�(����@@@@@@@@�@€���@@@@@@@@�@ ���@@@@@@@@� @���@@@@@@@@� ����xDBBòBDx������FFJJRRbb�(���<BBBBBB<����<BBBBBB<����<BBBBBB<����<BBBBBB<�(���<BBBBBB<�$�����ˆP Pˆ�������@<bRRJJF<�����<BBBBBBB����<BBBBBBB����<BBBBBBB����<BBBBBBB�$����((DD‚����@@xDDx@@������  `������hpà� @�����hpà� �����hpà�P �����hpà� P�����hpà�P������hpà P �����l’~ì������` `€€`��������`€ð`� @�����`€ð`�@ �����`€ð`�P �����`€ð`�P������€€€€€€�€������€€€€€€�€@�����€€€€€€�@€�����@@@@@@� ������pˆˆˆˆx`P�����à� P�����pˆˆˆˆp� @�����pˆˆˆˆp� �����pˆˆˆˆp�P �����pˆˆˆˆp�P(�����pˆˆˆˆp�P������� �ø� ��������pˆÈ¨˜t��������p� @�����p�@ �����p�P �����p�P����€@@`  � ���€€°ÈˆˆÈ°€€����€@@`  �P�����������������������@�@@@@@@@�������������PPP�������PPPü(ü((�������8TT8PT8���������������� ��������€ @ @ €�4�J�J�1�������������������������������������� ��������9�F�B�E�(��$�$������������������@ `���� @@@@@@ ����€@@ @@€�������������P P��������|��������@ ������������������|������������@���������������€€@@@ �������8DDDDDDD8�������p�������|@@ D8�������8DDD8�������üˆH((�������8DDx@@|�������8DDDdX@D8������� |�������8DDDD8DD8�������8D<DDD8�������@����@��������€@@����@����������� 0À0 ������������|�|������������``�����������DD8������������������������� ������� �M€S@Q Q I & 0@€������������������������������������� ��������A�A�A�>�"�"��������������|BBB|BBB|����������������� ���������!�@�@�@�@�@�!��������������������������������������� ��������|�B�A�A�A�A�A�B�|�����������~@@@~@@@~�������@@@@|@@@~�������������������������������� ���������#�A�A�G�@�@�!��������������������������������������� ��������A�A�A�A��A�A�A�A�����������@@@@@@@@@�������8DD�������ABDHpPHDB�������|@@@@@@@@������������������������������ ��������D@D@J@J@Q@Q@`À`À@@������������������������������������� ��������A�C�E�E�I�Q�Q�a�A�������������������������������������� ���������!�@€@€@€@€@€!������������@@@@|BBB|����������������� ��������€!�B€D€@€@€@€!������������BBBD|BBB|�������<BB 0@B<�������þ�������<BBBBBBBB������������������������������ ������������"�"�"�A�A�������������������������������������� �����������*€*€$€D@D@D@������������������������������������� ��������A�"�"����"�"�A�������������������������������������� �������������"�"�A�A�������������������������������������� ���������@� ��������������`@@@@@@@@@@`������� @@€€����À@@@@@@@@@@À������������ˆP ������þ�����������������������À€@�������:DD<D8���������XdDDDdX@@�������8D@@@D8���������4LDDDL4�������8D@|DD8���������@@@@@@à@0����8D4LDDDL4���������DDDDDdX@@�������@@@@@@@�@����€@@@@@@@@@�@�������DHP``PH@@�������@@@@@@@@@���������������� ��������I�I�I�I�I�m�R���������������DDDDDdX���������8DDDDD8������@@@XdDDDdX������4LDDDL4���������@@@@@`P���������0H0@H0���������`@@@@@à@@�������4LDDDDD���������((DDD����������� ��������"�"�U�I�I�ˆ€ˆ€��������������„„H00H„������@ ((HDDD���������x@ x������0@@@@@€@@@@0����@@@@@@@@@@@@����À  À����������˜d������������������������@@@@@@@@�@�������� 8dPPPT8��������X$x $��������„xHHx„���������||(DD�����@@@@���@@@@����pˆ0Hˆˆ`€ˆp��������������� ������������������ ��������� €N@Q@P@Q@N@ €���������������p�Pp��������(P(������������~�������������ð����������������������������������� ��������� €J@J@L@J@N@ €�������������������ð�����������``��������|�|������������ð@ `�����������À @ à����������������€@���@@@tLDDDDD������((((((hèèèh<����������@���������À @������������������ ` ������������p�pPp��������P((P�������� ��������A�'€��I�D�D�Â�A�������������������������������������� ��������G€"��€K�H�D�Â�A�������������������������������������� ��������!�€� �É�$�D�"�á��������8DD ��������������������� ��������A�A�A�>�"�"��������������������������������������� ��������A�A�A�>�"�"��������������������������������������� ��������A�A�A�>�"�"��������������������������������������� ��������A�A�A�>�"�"������� �������������������������������� ��������A�A�A�>�"�"���������������������������������������� ��������A�A�A�>�"�"�������������������������������������� ��������GÀD�D�<�'À$���À������������������������������������� ������!�@�@�@�@�@�!������������~@@@~@@@~�����~@@@~@@@~�����~@@@~@@@~�����~@@@~@@@~������@@@@@@@@@�@€����@@@@@@@@@�@ ����@@@@@@@@@� @����@@@@@@@@@� ������������������������ ��������|�B�A�A�ñ�A�A�B�|�������������������������������������� ��������A�C�E�E�I�Q�Q�a�A���� �������������������������������� ���������!�@€@€@€@€@€!������������������������������������� ���������!�@€@€@€@€@€!������������������������������������� ���������!�@€@€@€@€@€!���� ��������������������������������� ���������!�@€@€@€@€@€!����� �������������������������������� ���������!�@€@€@€@€@€!������������D((D�������������������� ������€�^�!�P€H€D€D€B€!�€�@��������<BBBBBBBB�����<BBBBBBBB�����<BBBBBBBB�����<BBBBBBBB�$���������������������������� �������������"�"�A�A���������@@|BBB|@@�������XDDDXDDD8�������:DD<D8�������:DD<D8�������:DD<D8�(������:DD<D8�(������:DD<D8�(�������:DD<D8$������������������������� ��������;€D@D�?À@D@;€�����������08D@@@D8���������8D@|DD8� ������8D@|DD8�������8D@|DD8�(������8D@|DD8�(�������@@@@@@@�@€������@@@@@@@�@ ������@@@@@@@� @������@@@@@@@� �������8DDDD<(4������DDDDDdX�(������8DDDDD8� ������8DDDDD8�������8DDDDD8�(������8DDDDD8�(������8DDDDD8�(���������|�����������¸DdTLD:���������4LDDDDD� ������4LDDDDD�������4LDDDDD�(������4LDDDDD�(����@ ((HDDD����@@@XdDDDdX@@����`(($DD�(�������������������������������00�� 00000000������������������ØØØ������������������ ����������$�$�$�ÿ€ÿ€���ÀÀ � � ���������������������������� ���������?€uÀdÀÀ€�<�t�d�e€?€������������������������������������� < ~ff~<€=€~ÀfÀf`~`<0��������������������������� ����������8?psàaÀaàc`w`>��3�3�?��������������������������@ ``�����00``````````00�����@`0000`@�����������������D88|��������������������� ���������� � � � �€€ � � � �������������������@ ``����������������������������������������� ������������������€€�����������������������������``���������������������ÀÀ@@`` 00����� �����������?�3�a€a€a€a€a€a€a€3�?����������������������������� ��������������������>�>����������������������������� ����������€€`�p�8����€€a€����������������������������� �����������?�c€a€€€���a€a€?����������������������������� ����������€€€ÀÀa€1€€€ €€€€��������������������������� ����������>��c€a€€€c€�~�`�`������������������������������ �����������?�q€a€a€a€�n�`�`�1€?€���������������������������� ����������0�0���� � ����€€€��������������������������� �����������?�s€a€a€3�?�3�a€a€s€?����������������������������� ����������>��c�€€€?€a€a€a€c€?�����������������``������``����������@ ``������``��������� ����������€€�8�`�8��€€����������������������������������� ��������������?€?€����?€?€������������������������������������� ����������`�x���€��x�`������������������������������������ ����������������������c�c��>��������������������������������ð�ø���8��3¸�gü�ff�f3�f3�f1€c€3¹€1Ù€��þ�ø��������������������������������������� ����������À0À0````à?À0À0À€€����������������������������� ����������Àà`p`0`0`pàÀ`À`````àÀ€�����������������������������������Àð880p�`�`�`�`�p�088ðÀ������������������������� ����������€À`à```0`0`0`0`0`0```àÀ€������������������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ������������������������� ����������`�`�`�`�`�`�€€`�`�`�`�ÀÀ�����������������������������������Øø880p`ø`ø`�`�p088ðÀ������������������������� ����������`0`0`0`0`0`0ðð`0`0`0`0`0`0�������������00000000000000����������������������������� �����������?�s€a€a€€€€€€€€€€������������������������� ����������`8`p`àaÀc€g�~�|�n�g�c€aÀ`à`p������������������������� ����������€€`�`�`�`�`�`�`�`�`�`�`�`������������������������������������a†a†cÆbFffffl6l6xxpp``������������������������� ����������`0`p`ð`ða°c0c0f0f0l0x0x0p0`0�����������������������������������Àð880p` ` ` ` p088ðÀ������������������������� ����������`�`�`�`�`�`�€À`à`````àÀ€����������������������������������Øð8x0ØpÜ` ` ` ` p088ðÀ������������������������� ����������`````````À`À€À`à`````àÀ€������������������������� ����������€?àpp`0�0�pà€>�p�`0pp?à€������������������������� ����������������������àà������������������������� ����������€?à0``0`0`0`0`0`0`0`0`0`0`0������������������������������������€€ À À À```000000``���������������������������������������� � ���6�6�33�33�1#�1ã�aá€`Á€`Á€`Á€�������������������������������������� ����������`0pp0`8àÀ €�� €À8à0`pp`0�����������������������������������������€ À``0000``������������������������� ����������àà`�0�� ����€�À�`àà���������xx``````````````xx���������00 ``@@ÀÀ�����ðð00000000000000ðð������������� ��������������������������A�c�6������������������������������ ��ÿÀÿÀ������������������������������������������������������``@@ ����������������������������� ����������;�w�c�c�s�?��c�w�>���������������������������������� ����������o�€q€`À`À`À`Àq€€o�`�`�`�`�������������������������� �����������?€1€`�`�`�`�1€?€���������������������������������� ����������À?À1À`À`À`À`À1À?ÀÀ�À�À�À�À������������������������� �����������?€q€`�`�€a€a€?�����������������������00000000üü00<����������������������������� ���?€1€�ÀÀ?À1À`À`À`À`À0À?ÀÀ��������������������������������� ����������a€a€a€a€a€a€a€q€o€g�`�`�`�`��������������``````````��``�����Àà````````````��``����� ����������c€c�g�f�l�|�x�l�f�c�`�`�`�`��������������``````````````���������������������������������������cccccccs˜oxf0��������������������������������� ����������a€a€a€a€a€a€a€q€o€g���������������������������������� �����������?€1€`À`À`À`À1€?€���������������������������������� ��`�`�`�`�o�€q€`À`À`À`Àq€€o���������������������������������� ���À�À�À�ÀÀ?À1À`À`À`À`À1À?ÀÀ���������������������```````pll��������������������������������� ����������<�~�c���~�`�c�?�����������������������8000000üü000������������������������������ ����������9€}€c€a€a€a€a€a€a€a€��������������������������������� ���������� � ���3�3�3�a€a€a€������������������������������������������� À Àà 4°3030ccc��������������������������������� ����������a€s€3�� � ��3�s€a€��������������������������������� ��8�8� � � � ���3�3�3�a€a€a€��������������������������������� ������������`�0�� ���������������������� 000000`À`00000 �����``````````````````�����À`000000 00000`À������������� ������������������f�?�€����������������������������������������������00000000��00��������� ���������?€5€d�d�d�d�5€?€�������������������������������� ����������ß�ÿ€`€0���~�0�`�a€a€?����������������������������� ����������������a€€3�3�3�€a€��������������������������������� ���������� � � � �€ �€�3�3�3�a€a€������������``````����```````����������������������������� ���?�a€a€€��9€q€a€c€7�>�x�a€a€?��������������������������ØØ����������������������������������������À0 #ˆDDHHHDD#ˆ 0À���������������������|�4l$d8����������������������������� ������������ ��6�l�l�6�� ������������������������������������ �����������������À�À�ÀÀÀ�����������������������������||�����������������������������������������������À0 $(DDD„GÄD$D$'È 0À���������������������������ø������������������8lDl8������ ����������€€�� � � �€€ � � �������������������������øø`0˜øp���������������pø˜00˜øp���������������������À`0������������� ��`�`�`�`�m€€s€a€a€a€a€a€a€a€��������������������������������� �� � � � � � � � � � ��9�y�y�y�y�9�€�����������������``�������������ðØp`���������������������������00000pp0����������������|�8lDDl8��������������������� ������������H�l�6���6�l�H���������������������������������������������� üØx3811ˆ0À0Àp`p000�������������������������������������|| 0 3L1|1¸0À0Àp`p000������������������������������������� üØxs8ù™ˆ0À0À˜`ø0p0��������������������������� ��>��c�c�p�8�� � � ����� � ���������������������������������� ����������À0À0````à?À0À0À€€������� ������������������� ����������À0À0````à?À0À0À€€��������€����������������� ����������À0À0````à?À0À0À€€������€������������������� ����������À0À0````à?À0À0À€€�������€ €����������������� ����������À0À0````à?À0À0À€€������€€������������������� ����������À0À0````à?À0À0À€€�����€€���������������������������������`ÿ€`ÿ€0À�0À�?À�À�ÿ�ÿ� À� À�À�À�ÿ€ÿ€����������������������������������������� €€�Àð880p�`�`�`�`�p�088ðÀ������������������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ��� ������������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ����€����������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ��€������������������� ����������ÀÀ`�`�`�`�€€`�`�`�`�ÀÀ��€€�������00000000000000�0`À�����00000000000000�0 �����00000000000000�Ìx0�����00000000000000�ÌÌ������������������ ����������€À`à```0`0ü0ü0`0`0```àÀ€������������������������� ����������`0`p`ð`ða°c0c0f0f0l0l0x0p0p0�� € @@���������������������������Àð880p` ` ` ` p088ðÀ��€�����������������������������Àð880p` ` ` ` p088ðÀ��€�À�`���������������������������Àð880p` ` ` ` p088ðÀ��`À€���������������������������Àð880p` ` ` ` p088ðÀ��À  ���������������������������Àð880p` ` ` ` p088ðÀ��ÀÀ������������������� ����������ÀÀa€3�� ��3�a€ÀÀ���������������������������������������������ÇÀÿðx88ln g cŒaÌpÜ0x88üÌ������������������������� ����������€?à0``0`0`0`0`0`0`0`0`0`0`0���� ������������������ ����������€?à0``0`0`0`0`0`0`0`0`0`0`0����€����������������� ����������€?à0``0`0`0`0`0`0`0`0`0`0`0�� À€������������������ ����������€?à0``0`0`0`0`0`0`0`0`0`0`0�� À À�����������������������������������€ À``0000``���€�À����������������� ����������`�`�`�€À`à`````àÀ€`�`�`�������������������������� ����������n�o�c�c�c�c�n�n�c�c�c�c�>��������������������������� ����������;�w�c�c�s�?��c�w�>��� ��0�������������������������� ����������;�w�c�c�s�?��c�w�>���� ��������������������������� ����������;�w�c�c�s�?��c�w�>���3�� �������������������������� ����������;�w�c�c�s�?��c�w�>���&�-��������������������������� ����������;�w�c�c�s�?��c�w�>���6�6���������������������������� ����������;�w�c�c�s�?��c�w�>��6�6�������������������������������������:ðwücŒc�s�?ü c wø>ð��������������������������������� ��<�6����?€1€`�`�`�`�1€?€���������������������������������� �����������?€q€`�`�€a€a€?���� ��0�������������������������� �����������?€q€`�`�€a€a€?���� ���������������������������� �����������?€q€`�`�€a€a€?����3�� �������������������������� �����������?€q€`�`�€a€a€?���������������������``````````�0`À���������``````````�À`0���������``````````�ð`���������``````````�ØØ���������������������� �����������?€1€`À`À`À`À1€?€�&���0�������������������������� ����������a€a€a€a€a€a€a€q€o€g���&�-��������������������������� �����������?€1€`À`À`À`À1€?€���� ��������������������������� �����������?€1€`À`À`À`À1€?€��� ���������������������������� �����������?€1€`À`À`À`À1€?€���€��������������������������� �����������?€1€`À`À`À`À1€?€����€ €������������������������� �����������?€1€`À`À`À`À1€?€�������������������������������� ������������ � ���€€�� � ������������������������������������ ����������Î�€1€xÀlÀfÀcÀ1€?À`��������������������������������� ����������9€}€c€a€a€a€a€a€a€a€��� ��������������������������� ����������9€}€c€a€a€a€a€a€a€a€�� ���������������������������� ����������9€}€c€a€a€a€a€a€a€a€��3�� �������������������������� ����������9€}€c€a€a€a€a€a€a€a€��3�3���������������������������� ��8�8� � � � ���3�3�3�a€a€a€�� ���������������������������� ��`�`�`�`�o�€q€`À`À`À`Àq€€o�`�`�`�`�������������������������� ��8�8� � � � ���3�3�3�a€a€a€��3�3�����������������������������@�@@@@@������������  �������PPøPøPP������ à`€p ������D**V¨¤~�������v˜tnP0������������@À����� @@€€€@@ �����€@@ @@€����������� @ ������� ø �������@@@���������������x�����������@�������������€€@@@ �������``�������p ` �������ð@ `�������à``�������øP0�������àà@p�������`à@0�������@@@ ð�������```�������À p`�������@���@�������@@@���@��������� @ ����������ø�ø����������€@ @€���������@�@@  à��� ����>�@�’�­�¥�¥��B�<�����������îD|((8�������ðHHpHHð�������xÄ€€€Ä|�������øLDDDLø�������øH@p@Hø�������à@@p@Hø�������xÄ„œ€Ä|�������îDD|DDî�������à@@@@@à�������À  p�������ìHP`PHì�������øH@@@@à��� ��������ë€I�U�U�c�c�ã€����������äLLTTdî�������xÌ„„„Ìx�������à@@pHHð����� pÌ„„„Ìx�������ìHPpHHð�������à`Àp�������p ¨ø�������8lDDDDî�������((lDî��� ��������"�"�U�U�É€ˆ€ÝÀ����������îD((Dî�������8((Dî�������øˆ@ ˆø�����À€€€€€€€À������� @@@€€�����À@@@@@@@À�����������PP ����ø����������������������À€������à ` À���������àà€€�������`€€€`���������hp0�������`€À `���������à@@@à@0�����à`@  p���������Øà€€�������@@@@À�@�����€@@@@@À�@�������˜à €€�������à@@@@@À�������Û’’’ì���������Øà���������``�������À€àà�������8pp���������à@@` ���������à `€à���������0@@@à@��������h��������� `PØ���������(lT’Û���������ØP PØ�������€€@` ¸���������ð@ ð������� @@@€@@@ �����€€€€€€€€€�����€@@@ @@@€���������˜d����������������������@@@@@�@��������€à€p��������ðÈ@à@P0��������ˆpPPpˆ�������p ø ØPˆ�������€€€�€€€������à P @p������������P��� ���������"�M�Q�M�"��������������à�  À��������P  P����������|������������à������� ���������"�U�Y�]�"������������������à����������``�������ø� ø ����������à@ `����������À @à������������€@�����€€è�������((((hèèè|���������€��������À @�����������������à@À@���������à�@ @�������� PP ���������D>,ôHÈD�������N$*öHÈD�������D>,Ô(Hä�����à €@@�@���������îD|((8� ����îD|((8�����îD|((8�(����îD|((8�(����îD|((8�(�����îD|((8( ��������ï�I�x�.�(�9���������` xÄ€€€Ä|�������øH@p@Hø� @����øH@p@Hø� ����øH@p@Hø�P ����øH@p@Hø�P�����à@@@@@à�@€����à@@@@@à�@ ����à@@@@@à� @����à@@@@@à� �����øLDäDLø�������äLLTTdî�P(����xÌ„„„Ìx� @����xÌ„„„Ìx�����xÌ„„„Ìx�P ����xÌ„„„Ìx�P(����xÌ„„„Ìx�P�����ˆP Pˆ��������€|fRRJf>������8lDDDDî� ����8lDDDDî�����8lDDDDî�(����8lDDDDî�(�����8((Dî�����à@pHp@à�������àPP`PP �������à ` À�@€������à ` À�@ ������à ` À� @������à ` À� P������à ` À� �������à ` À@ @������Ø p(Ø������À @`€€€`���������`€À `�@€������`€À `�@ ������`€À `� @������`€À `� �������à@@@À�@€������à@@@À�@ ������à@@@À� @������à@@@À� �������`p p@������Øà� P������``� @������``�@ ������``� @������``� P������``� ������� �ø� ���������àp��������h� @������h�@ ������h�P ������h�P�����€À@` ¸� ����À€àà€€�����€À@` ¸� ��������������������������������������������������������������� ��������������������������������������D�f�f�f�f���������������� �������������������àà€€€?ð?ð@@@@@��������������� ������������?�åÀÄÀ„`„``àÀ€�<�t�d�d d`4à€����������������������������������� 9�0€0@0@˜@�ŒÀ�Ç€<`�r �a0�`˜�`ˆ�0Œ�þ��������������������������������������������������?¿�pð€``�`à�`Ð�1�ˆ� ��€�À� `� � �`�À���������������������������������� ��������00````````00�������@    @������������������� ��������������������������������2`:à�:à2`��������������������������������������øø���������������������������080�����������������������������������������������������øø�����������������������������������00������������������������ÀÀÀ@`` 00 �������������� ���������������€0À0Àpà````````````````0À0À€���������������� ��������������?À������������������������������� ��������������Àà0 � ����€€�À�À@À@À!À?€���������������� ��������������<�s�a€�€�À�À�ÀÀ€���A€A€#€?����������������� ��������������€€€€ààa€!€1€€€ € €€€€€��������������� ��������������?�qÀ`À�`�`�`�`�àÀÀ?�<�0���Àà��������������� ���������������=À0Àp``````````ÀyÀw�0�8�� ��à��������������� �������������� � ��������€€�€�À@À``à?à��������������� ���������������9ÀpÀ`````` à0À€��€0À0À0À€���������������� ��������������x���€À�ÀÀ9à0à`````````à0À;À������������������00�������00���������������080�������00�������������������� �����������������0�à€�8�`�8��€�à�0�����������������������������������������������øø����øø����������������������������� ����������������`�8��€�à�0�à€�8�`�������������������������� �������������� � �����������€À0À0À À1€�����������������������������ü�ƒ��� ��w€ÞÀ1Ž`1† 1†01†1ƒ0Ã0ã8;0� �`�ÀÀ�þ���������������������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€��������������������������������������ð<  ð    8à�����������������������������ð00�`�`�`�`�`�`�`�00ò������������������������������������à�8��������������8�à��������������������������������������ü ��  à  ��ø�����������������������������~������ð��ø������������������������������������ð���0�0�`�`�`€`��`��`��`��0�0���ò���������������������������������������������~À�������ÿ��������~À����������������������~~��������������� ��������������<�f�c��������������À������������������������������������~€���8�p�à�À�€���€�À�`�0�� �~?��������������������������������������ü ������������~�������������������������������������|ü0000h0h0Ä0Ä0„0‚00000�°�°�px�|��������������������������������������������|����2�2�b�Â�Â�‚�������x€��������������������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð��������������������������������������~��������à8   8à����������������������€���8��p��à�ð���0�0�`€`€`€`€`€`€`€0�0���ð��������������������������������������~80`àÀà8 8à��������������� ��������������O�xÀ``@0@0�0�pàÀ�<�p�` ` ``1à �����������������������������à€€€€€€€€€€€€A‚A‚a†þ������������������������������������ð�� ��������������~€��������������������������������������������€�€�€�À�@�`� � �0� � ��� �0�0�ü€��������������������������������������������ƒ�ƒ�ƒ€‡€F€FÀF@L@L` ,` , , 000ü~~��������������������������������������������üÀ0€�� ��8�p��à��À�À� ��� ��~€�������������������������������������à€€€€€€À@` 080 ü?�����������������������������üp 8� ����€€À�à@`@p`8ø�������������>0000000000000000000>������������ 00 ``@ÀÀ��������| |���������������� ������������������������������@@`À €1€�� ������������������ ����ÿøÿø���������������������������������������������������������������������0p@`0������������ ��������������8À}€c€a€a€1€€€€1€3€�������������������������� ��������������/�9À0À0`0`0`0`0`0`0À9À7�0�0�0�0�p���������������� ���������������?€8@p�`�`�`�`�`� À1À€������������������������� ��������������`9À0À`À`À`À`À`À`À0À9ÀÀ�À�À�À�ÀÀ��������������� ���������������?€8@p�`�`�`�À`À À1€����������������������������x0000000000þ000������������ ����€xà`0`00à?€0���€0À0À0À0À€à������������������������� ��������������xð0`0`0`0`0`0`0`0`8à7À3€0�0�0�0�p������������������x0000000000p���00�������Àà00000000000000p���00�������������� ��������������yð0à1À3€7�6�<�4�2�3�1€3à0�0�0�0�p������������������x000000000000000p���������������������������������xñà0`À0`À0`À0`À0`À0`À0`À0`À8ñÀ7Ï€s‡��������������������������������������� ��������������xð0`0`0`0`0`0`0`0`8à7Às€������������������������� ���������������9À0À````````````0À9À�������������������������� ����x�0�0�0�0�7�9À0À0`0`0`0`0`0`0À9Àw�������������������������� ����à�À�À�À�ÀÀ9À0À`À`À`À`À`À`À0À9ÀÀ���������������������������x00000000;7s����������������� ��������������|�c�A€€€�>�8�p�a�3�����������������������������2000000000þp0�������������� ��������������p`8à0`0`0`0`0`0`0`0`pà������������������������� ��������������������1�0€0€`€`Àñà�����������������������������������������������8�8�(�d�d�1d�0Â�0Â�`Â�`Ã�ñç€�������������������������������������� ��������������xð0`ÀÀ €�� �€À0`xð������������������������� ����à�ð��� �������1�0€0€`€`Àñà������������������������� ��������������€a€0€8��� ���C�a€€������������������������� ����€� � � � � � ����`���� � � � � ��€�����������������00000000000000000������������ ����p�� � � � � � ����€��� � � � � ��p���������������� ������������������������AÀcà>0��������������������������������������������������������� ��� ������������������� ���������� � ��?€8@h�d�d�d�b�b�!À1À€�€�€��������������������� ��������������sÀ_`< ������~�����À À€��������������� ��������������������`0wp?àÀ0`0`0`0`À?àwp`0���������������������������������À����à�à�€ € À@`0 p0ø|�����������������0000000���0000000������������ ������������€€€���8€0À À!À€����€ €������������������������������ff����������������������������������ø���0á€#¸€b ÀF�@D�@D�@D�@F�@b À#˜€0ñ€��ø�������������������������������~�vÌÌ| Ìx��������������� ���������������� ` À€3�3�€ À` ����������������������������������������������������øø����������������������������� ����������������������������������������������������������������������������������ø���0€#Œ€aÀA@A @Að@A@A@aÀ!€3ñ€��ø�������������������������������������~~���������������� �����������������������������������"�A�A�A�"�������������������������������øø�������øø���������������������������������üD 0 ŒL8�������������������pˆŒ 0ŒL8������������������������� ���������������� ���� �p�`� � �.p?`8à0`0`0`0`0`0`0`0`pà������������������������� ����€€€€€€€€€€€ €€<€<€|€|€|€<€<€€À�����������������������00���������������<f������������������������������������|P0��������������������~�<fffff<������������������ ����������������"�3�€ À`` À€3�"��������������������������������������������������� €"�2�� �}Ž�†�Â�`� �0��P�0 ����������������������������������������������?�� � ����}£�“�Î�`� �0��P�0 ������������������������������������������������ €"�2�� �qŽ�ˆ†�ŒÂ� `� �00��Œ�L �8������������������������ �����1€`€a€a€p�8��� � �������������������������������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€����� ��À�€��������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�������À��p��0������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�����`�À�€������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�������à����������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�������0�0���������������������������������ü€0�� � � �ø� ��0�0�0�`�`�À�À��€�À� � �À���������������������������������ùÿð0`0```�`�à€ `€€`€`€`�`�` ` à`ÿà�������������������������À`�`à€�€ð00�`�`�`�`�`�`�`�00ò�����������������������������ü ��  à  ��ø���€�� ��������������������ü ��  à  ��ø���€�à�`�������������������ü ��  à  ��ø��`À€�������������������ü ��  à  ��ø���� À À���������~~�p`�������~~� �������? ?�@3 �������~~��ff�����������������������������������à�8�������ÿ�������8�à���������������������������������������������|����2�2�b�Â�Â�‚�������x€������p�È���������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð����� ��À�€��������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð�����€��`��8��������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð�����0�à��À������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð�������p�È���������������������������������ð���0�0�`€`€`€`€`€`€`€0�0���ð�������0�0���������������������������� 00` À€�€ À`00 ���������������������������������������������ð���4�2�a€a€`€`€`A€`A€`!€0#�0���ò��������������������������������������������ð�� ��������������~€���� ��À�€��������������������������������ð�� ��������������~€����€��`��8��������������������������������ð�� ��������������~€����0�à��À������������������������������ð�� ��������������~€���������������������������������à€€€€€€À@` 080 ü?����À�p�0�������������������~����à8   8à���~���������������� ��������������s€6@6`0`0`0à0À1À3€6�1€0À0À0À0À€���������������� ��������������8À}€c€a€a€1€€€€1€3€���� �8�0���������������� ��������������8À}€c€a€a€1€€€€1€3€�����€€��������������� ��������������8À}€c€a€a€1€€€€1€3€���!��� ���������������� ��������������8À}€c€a€a€1€€€€1€3€�����.������������������� ��������������8À}€c€a€a€1€€€€1€3€�����3�3������������������ ��������������8À}€c€a€a€1€€€€1€3€������������������������������������8x}ücÂa€a€1€€þ†1†3Ìx������������������������� ���3��� ���?€8@p�`�`�`�`�`� À1À€������������������������� ���������������?€8@p�`�`�`�À`À À1€���� �8�0���������������� ���������������?€8@p�`�`�`�À`À À1€�����€€��������������� ���������������?€8@p�`�`�`�À`À À1€���€ ������������������ ���������������?€8@p�`�`�`�À`À À1€�����€€�������������������x0000000000p�0àÀ������������x0000000000p�@0 ������������x0000000000p�„Hx0������������x0000000000p��ÌÌ������������������� ���������������9À0À````````````0À9À€c���8À`���������������� ��������������xð0`0`0`0`0`0`0`0`8à7Às€����€@����������������� ���������������9À0À````````````0À9À���������������������� ���������������9À0À````````````0À9À�����À�À��������������� ���������������9À0À````````````0À9À���€ ������������������ ���������������9À0À````````````0À9À�����€@����������������� ���������������9À0À````````````0À9À�����€€�����������������������������������������øø������������������������������� ������������`�o�9À8Àh`l`d`f`b`c`1À9À`�`����������������������� ��������������p`8à0`0`0`0`0`0`0`0`pà��������������������� ��������������p`8à0`0`0`0`0`0`0`0`pà����À�À��������������� ��������������p`8à0`0`0`0`0`0`0`0`pà��€ ������������������ ��������������p`8à0`0`0`0`0`0`0`0`pà����€€����������������� ����à�ð��� �������1�0€0€`€`Àñà����€€��������������� ����x�0�0�0�0�7�9À0À0`0`0`0`0`0`0À9À7�0�0�0�0�p���������������� ����à�ð��� �������1�0€0€`€`Àñà����3�3������������������An invalid set of flags was passed in.��An invalid parameter was passed in. This can include an invalid flag or combination of flags.���The display driver failed the specified graphics mode.��The graphics mode is not supported.�Unknown error in graphics mode???���The computer must be restarted for the graphics mode to work.���@@ÜjG@Üj@ÜjP@ÜjW@Üj`@Üj8@ÜjglutGameModeGet� ERROR: Function <%s> called without first calling 'glutInit'.�Unknown gamemode get: %d����ð@Üj@AÜjUAÜjbAÜj AÜj0AÜjð@ÜjglutLeaveGameMode�glutEnterGameMode�failed to change screen settings�FREEGLUT�glutGameModeString�%ix%i:%i@%i�%ix%i:%i�%ix%i@%i�%ix%i�:%i@%i�:%i�@%i�unable to parse game mode string `%s'���������������������������glutSolidSierpinskiSponge��� ERROR: Function <%s> called without first calling 'glutInit'.�glutWireSierpinskiSponge�glutSolidOctahedron�glutWireOctahedron�glutSolidDodecahedron�glutWireDodecahedron�glutSolidCube�glutWireCube�glutSolidRhombicDodecahedron�glutWireRhombicDodecahedron�glutSolidIcosahedron�glutWireIcosahedron�glutSolidTetrahedron�glutWireTetrahedron����Failed to allocate memory in fghCircleTable�glutWireCylinder�glutSolidCylinder�glutWireSphere�glutSolidSphere�glutSolidTorus�glutWireTorus�glutWireCone�glutSolidCone������������������������������������������������������������������������������������������������������������������������� ������������ ������������ ������������ ������������ ��� ��� ������ ��� ��� ������ ��� ��� ������ ��� ��� ����������������������������������������������������������������������������������� ��������� ��������� ������������������������������ ������ ��� ��� ��� ��� ��� ������ ��� ��������� ��������� ��� ���������?����E§yâ?E§yâ¿-DTû!@-DTû!À�������� �=<>~!����WARNING - Display string token not recognized: %s��ÜjÜj{ÜjÜjÜjÜj]ÜjWÜjÜjHÜjÜjÜjÜjÜjiÜjcÜjÜj?ÜjNÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjÜjrÜj÷ŽÜjfgDeinitialize(): no valid initialization has been performed����illegal glutInit() reinitialization attempt�Could not allocate space for the program's name.�GLUT_FPS�%d�DISPLAY�-display���-display parameter must be followed by display name�-geometry���-geometry parameter must be followed by window geometry settings�-direct����parameters ambiguity, -direct and -indirect cannot be both specified�-indirect�-iconic�-gldebug�-sync�FREEGLUT�GLUT_ICON�fghInitialize�Window Class Not Registered�� ERROR: Internal error <%s> in function %s�alpha�acca�acc�blue�buffer�conformant�depth�double�green�index�num�red�rgba�rgb�luminance�stencil�single�stereo�samples�slow�win32pdf�win32pfd�xvisual�xstaticgray�xgrayscale�xstaticcolor�xpseudocolor�xtruecolor�xdirectcolor�xstaticgrey�xgreyscale�xstaticcolour�xpseudocolour�xtruecolour�xdirectcolour�borderless�aux���������������������07Þj67Þj;7Þj?7ÞjD7ÞjK7ÞjV7Þj\7Þjc7Þji7Þjo7Þjs7Þjw7Þj|7Þj€7ÞjŠ7Þj’7Þj™7Þj 7Þj¨7Þj­7Þj¶7Þj¿7ÞjÇ7ÞjÓ7ÞjÞ7Þjë7Þjø7Þj8Þj8Þj8Þj'8Þj58ÞjC8ÞjO8Þj]8Þjh8Þj������������GLUT_DIALS_SERIAL�SOFTWARE\FreeGLUT�DialboxSerialPort�96,n,8,1��glutJoystickSetSaturation��� ERROR: Function <%s> called without first calling 'glutInit'.�glutJoystickGetSaturation�glutJoystickSetDeadBand�glutJoystickGetDeadBand�glutJoystickNotWorking�glutJoystickGetNumButtons�glutJoystickGetNumAxes�glutJoystickGetCenter�glutJoystickGetMaxRange�glutJoystickGetMinRange�glutJoystickSetCenter�glutJoystickSetMaxRange�glutJoystickSetMinRange���¿¤ÜjÊ¥Üj¶¥Üj¢¥ÜjŽ¥Üjz¥Üjf¥Üj¿¤ÜjؤÜjCurrentJoystickSettings�System\CurrentControlSet\Control\MediaResources\Joystick�%s\%s\%s�OEMName�Joystick%d%s��System\CurrentControlSet\Control\MediaProperties\PrivateProperties\Joystick\OEM�%s\%s���illegal attempt to initialize joystick device again�JS: Failed to read joystick name from registry������A§ tZà&?��zD���?freeglut �(%s): �Event Handler�� ERROR: Internal <%s> function called without first calling 'glutInit'.�fgWindowProc�Cannot create window�� ERROR: Internal error <%s> in function %s�­µÜj£µÜj™µÜjµÜj…µÜj{µÜjqµÜjgµÜjö²Üjö²Üjö²Üjö²Üj]µÜj.µÜjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üjö²Üj'µÜj µÜjµÜjµÜj µÜjµÜjý´Üjö´Üjï´Üjè´Üjá´Üj±´Üjx»Üjn»Üjd»ÜjZ»ÜjP»ÜjF»Üj<»Üj2»Üj•·Üj•·Üj•·Üj•·Üj(»Üj»Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj•·Üj»Üj »Üj»ÜjüºÜjõºÜjîºÜjçºÜjàºÜjÙºÜjÒºÜj˺Üj›ºÜjglutLeaveMainLoop��� ERROR: Function <%s> called without first calling 'glutInit'.�glutMainLoopEvent�glutMainLoop�����������������������������������ÿÿÿÿ������ÿÿÿÿ������glutSetMenuData� ERROR: Function <%s> called without first calling 'glutInit'.�glutGetMenuData�glutDetachMenu�glutAttachMenu�glutGetMenu�glutSetMenu�glutDestroyMenu�glutCreateMenu�_�glutRemoveMenuItem�glutChangeToSubMenu�glutChangeToMenuEntry�glutAddSubMenu�glutAddMenuEntry�fghCheckMenuStatus�Cannot find menu entry��� ERROR: Internal error <%s> in function %s�fgDisplayMenu���Displaying menu in nonexistent window�������333333Ó?���@����glutCopyColormap���� ERROR: Function <%s> called without first calling 'glutInit'.�glutGetColor�glutSetColor�glutSetKeyRepeat��Invalid glutSetKeyRepeat mode: %d�glutIgnoreKeyRepeat��� ERROR: Function <%s> called with no current window defined.�glutForceJoystickFunc�glutReportErrors�invalid value�invalid enumerant�invalid operation�stack overflow�stack underflow�out of memory�table too large�invalid framebuffer operation�texture too large�unknown GL error�GL error: %s�glutExtensionSupported����glutGetModeValues��� ERROR: Function <%s> called without first calling 'glutInit'.�glutLayerGet����glutLayerGet(): missing enum handle %d�glutGetModifiers�glutGetModifiers() called outside an input callback�glutSetOption���glutSetOption(): missing enum handle %d�glutDeviceGet���glutDeviceGet(): missing enum handle %d�aÞÜjpÞÜj€ÞÜjÞÜjåÝÜjµÞÜjÞÜjåÝÜj×ÝÜjåÝÜj ÞÜj0ÞÜj7ÞÜj@ÞÜjPÞÜjÞÜj ÞÜjglutGet�glutGet(): missing enum handle %d�������MonoRoman���àEÞj€���‰aCàAÝj%†ÑB����|JÞj%†ÑB���„JÞj%†ÑB���”JÞj%†ÑB���ÀJÞj%†ÑB���àJÞj%†ÑB���øJÞj%†ÑB���KÞj%†ÑB���KÞj%†ÑB��� KÞj%†ÑB���(KÞj%†ÑB���0KÞj%†ÑB���HKÞj%†ÑB���XKÞj%†ÑB���`KÞj%†ÑB���hKÞj%†ÑB���pKÞj%†ÑB���xKÞj%†ÑB���€KÞj%†ÑB���ˆKÞj%†ÑB���KÞj%†ÑB���˜KÞj%†ÑB���¨KÞj%†ÑB���°KÞj%†ÑB���¸KÞj%†ÑB���ÈKÞj%†ÑB���ÐKÞj%†ÑB���ØKÞj%†ÑB���èKÞj%†ÑB���øKÞj%†ÑB����LÞj%†ÑB���LÞj%†ÑB���LÞj%†ÑB���(LÞj%†ÑB���8LÞj%†ÑB���PLÞj%†ÑB���hLÞj%†ÑB���pLÞj%†ÑB���€LÞj%†ÑB��� LÞj%†ÑB���¸LÞj%†ÑB���ÈLÞj%†ÑB���àLÞj%†ÑB���èLÞj%†ÑB���ðLÞj%†ÑB���MÞj%†ÑB��� MÞj%†ÑB���@MÞj%†ÑB���XMÞj%†ÑB���`MÞj%†ÑB���pMÞj%†ÑB���€MÞj%†ÑB���˜MÞj%†ÑB��� MÞj%†ÑB���°MÞj%†ÑB���¸MÞj%†ÑB���àMÞj%†ÑB����NÞj%†ÑB���NÞj%†ÑB��� NÞj%†ÑB���@NÞj%†ÑB���`NÞj%†ÑB���€NÞj%†ÑB��� NÞj%†ÑB���°NÞj%†ÑB���¸NÞj%†ÑB���ÈNÞj%†ÑB���ØNÞj%†ÑB���èNÞj%†ÑB���ðNÞj%†ÑB����OÞj%†ÑB���OÞj%†ÑB���OÞj%†ÑB���(OÞj%†ÑB���8OÞj%†ÑB���HOÞj%†ÑB���XOÞj%†ÑB���pOÞj%†ÑB���xOÞj%†ÑB���OÞj%†ÑB��� OÞj%†ÑB���¨OÞj%†ÑB���¸OÞj%†ÑB���ÈOÞj%†ÑB���ØOÞj%†ÑB���àOÞj%†ÑB���ðOÞj%†ÑB����PÞj%†ÑB��� PÞj%†ÑB���@PÞj%†ÑB���PPÞj%†ÑB���`PÞj%†ÑB���xPÞj%†ÑB���PÞj%†ÑB���˜PÞj%†ÑB���°PÞj%†ÑB���ÀPÞj�����������ÐPÞj���àPÞj���QÞj���QÞj�������������������������������(QÞj���8QÞj���HQÞj���XQÞj���hQÞj���xQÞj��� QÞj���@RÞj���`RÞj ���àRÞj"���@SÞj���PTÞj ���`TÞj ���ÀTÞj���UÞj��� UÞj���0UÞj���@UÞj���PUÞj���`UÞj��� UÞj���ÀUÞj���èUÞj����VÞj��� VÞj���ÀVÞj���@WÞj���¸WÞj���ÐWÞj���àWÞj���€XÞj���8YÞj���HYÞj���`YÞj���`ZÞj��� [Þj���`[Þj��� [Þj���à[Þj��� \Þj���8\Þj���H\Þj���X\Þj���€\Þj����]Þj���@]Þj���€]Þj���^Þj���(^Þj���8^Þj���H^Þj ���`^Þj ���À^Þj��� _Þj���°_Þj ���À_Þj��� `Þj���0`Þj���@`Þj���P`Þj���``Þj���p`Þj���€`Þj��� `Þj���8aÞj���HaÞj���XaÞj���haÞj���xaÞj ��� aÞj���ðaÞj����bÞj���bÞj��� bÞj���0bÞj�����������@bÞj���PbÞj���`bÞj���pbÞj���€bÞj���bÞj��� bÞj���ÀbÞj���hcÞj ���€cÞj���àcÞj���ˆdÞj���˜dÞj ���ÀdÞj���eÞj��� eÞj���ÀeÞj���ÐeÞj ���àeÞj���0fÞj���@fÞj���������������������������PfÞj���`fÞj���pfÞj���€fÞj���fÞj��� fÞj���°fÞj���ÈfÞj���ØfÞj���èfÞj���øfÞj�����������gÞj���gÞj���(gÞj���8gÞj���HgÞj���������������������������XgÞj���hgÞj���xgÞj���ˆgÞj���˜gÞj���¨gÞj���ÀgÞj���ègÞj���øgÞj���hÞj��� hÞj���hÞj��� hÞj��� iÞj���iÞj��� iÞj��� jÞj���ÀjÞj���èjÞj����kÞj���@kÞj���°kÞj���ÀkÞj����lÞj���(lÞj���@lÞj���€lÞj���¨lÞj���¸lÞj���ÈlÞj���ØlÞj���èlÞj����mÞj���@mÞj���xmÞj��� mÞj���àmÞj���hnÞj���€nÞj���ðnÞj����oÞj���poÞj���€oÞj���ÀoÞj���`pÞj���ˆpÞj��� pÞj���ØpÞj���èpÞj���øpÞj�������������������qÞj���qÞj���(qÞj���8qÞj���HqÞj���XqÞj���hqÞj���€qÞj���°qÞj���ÀqÞj���ÐqÞj ���àqÞj���@rÞj ���àrÞj���0sÞj ���@sÞj��� sÞj ���@tÞj ��� tÞj ����uÞj���XuÞj���€uÞj%†QB��ÈB%†QBMUB%†QB|aAõy>B|a˜@%†QB����T’dB|a˜@%†QB|aAgUB��ÈBgUBZU…BqÛŽB��ÈBqÛŽBZU…B0 [B“îBÆm«AMU³ª¦B“îB��HBMUÂÆm«AT’dB¾0°BT’dBgU…A:’äA³ª¦B:’äA¬m+B“îB¬m+B|a˜ÁjžwB“îBjžwB|a˜Á������������������������¹m«B¹m«B‰a˜Bèy¾BjžwB��ÈB¬m+B��ÈB:’äAèy¾B|a˜A¹m«B|a˜A‰a˜BÛy¾AZU…B:’äA„žwB|aBT’dBMU…BÛy>B‰a˜B¬m+B¡ç¡B|aB¹m«B:’äA¹m«B:’dA‰a˜B|a˜@jžwB����¬m+B����:’äA|a˜@|a˜A:’dAèy¾B��ÈB|aA��������������������MUB��ÈB¬m+BÐó´B¬m+B¡ç¡B|aBqÛŽB:’äAZU…B|a˜AZU…B|aA‰a˜B|aA¹m«B:’dAèy¾BÛy¾A��ÈBMUB��ÈB¬m+Bèy¾B:’dBÐó´BqÛŽBÐó´B¹m«Bèy¾Bèy¾B��ÈB‰a˜BMUBZU…B:’äA„žwB|a˜A„žwB|aAqÛŽB����¡ç¡B����Ðó´B|a˜@èy¾B:’dAèy¾BÛy¾A¹m«BMUB‰a˜BMUB����������ÈBT’dB��ÈB„žwBèy¾BZU…BÐó´BZU…B¹m«B„žwB¡ç¡B%†QBqÛŽB:’äA„žwB:’dA †QB|a˜@¬m+B����Ûy¾A����:’dA|a˜@|aA|aA|a˜@|a˜A|a˜@:’äA|aA|aB:’dA¬m+BÛy>B„žwB †QBZU…BT’dB‰a˜BT’dB¹m«B †QBèy¾B¬m+B��ÈBMUBèy¾B:’äA¹m«B:’äA‰a˜BMUB„žwB¬m+BÛy>BZU…B:’dA‰a˜B|a˜@¹m«B����èy¾B������ÈB|a˜@��ÈB|aA%†QB��ÈB%†QBZU…B_ŠB“îB_nBJ ÛB��HBèy¾B¡ç!B‰a˜BqÛB%†QBqÛBMUB¡ç!B|aA��HB|aÁ_nBÛy¾Á_ŠBMUÂ����������������qÛB“îBÐó4BJ ÛB0 [Bèy¾BG’€B‰a˜B_ŠB%†QB_ŠBMUBG’€B|aA0 [B|aÁÐó4BÛy¾ÁqÛBMUÂ%†QBqÛŽB%†QB:’dAo’äAT’dB‰a˜B:’äA‰a˜BT’dBo’äA:’äA †QB¹m«B †QB����|aA¬m+Bèy¾B¬m+BT’dB|a˜@%†QB����õy>B|a˜@%†QB|aAT’dB|a˜@T’dB|a˜À%†QB:’dÁõy>B|a˜Á|aA¬m+Bèy¾B¬m+B����������������%†QB|aAõy>B|a˜@%†QB����T’dB|a˜@%†QB|aA|a˜A:’dÁ¹m«B��ÈB��������Ûy>B��ÈBMUBèy¾BÛy¾A¡ç¡B|a˜AT’dB|a˜A¬m+BÛy¾A|a˜AMUB|a˜@Ûy>B����:’dB����qÛŽB|a˜@¡ç¡B|a˜A¹m«B¬m+B¹m«BT’dB¡ç¡B¡ç¡BqÛŽBèy¾B:’dB��ÈBÛy>B��ÈB������������������������¡ç!B¡ç¡B��HB¹m«BG’€B��ÈBG’€B����Ûy¾A‰a˜BÛy¾A¡ç¡B:’äAÐó´BMUBèy¾B¬m+B��ÈBjžwB��ÈBqÛŽBèy¾B‰a˜BÐó´B¡ç¡B¡ç¡B¡ç¡BqÛŽB‰a˜B„žwBMU…BÛy>B|a˜A����¹m«B��������������������:’äA��ÈB¡ç¡B��ÈB †QB„žwBMU…B„žwB‰a˜BT’dB¡ç¡B%†QB¹m«B|aB¹m«B:’äA¡ç¡B:’dAqÛŽB|a˜@:’dB����¬m+B����:’äA|a˜@Ûy¾A|aA|a˜A|a˜AG’€B��ÈBgU…AMUB¾0°BMUBG’€B��ÈBG’€B����‰a˜B��ÈB:’äA��ÈBÛy¾AT’dB:’äA„žwB¬m+BZU…B:’dBZU…BqÛŽB„žwB¡ç¡B%†QB¹m«B|aB¹m«B:’äA¡ç¡B:’dAqÛŽB|a˜@:’dB����¬m+B����:’äA|a˜@Ûy¾A|aA|a˜A|a˜A������������������������$B¹m«B„ž“Bèy¾B_nB��ÈB��HB��ÈBqÛBèy¾B%†ÑA¡ç¡BÆm«AT’dBÆm«AMUB%†ÑA:’dAqÛB|a˜@��HB����0 [B����_ŠB|a˜@$B:’dA³ª¦B:’äA³ª¦BMUB$BÛy>B_ŠBT’dB0 [B„žwB��HB„žwBqÛBT’dB%†ÑAÛy>BÆm«AMUB¹m«B��ÈB|aB����|a˜A��ÈB¹m«B��ÈB��������¬m+B��ÈB:’äAèy¾BÛy¾A¹m«BÛy¾A‰a˜B:’äAZU…B|aB„žwB:’dBT’dBqÛŽB%†QB¡ç¡B¬m+B¹m«BMUB¹m«B|a˜A¡ç¡B|aA‰a˜B|a˜@jžwB����¬m+B����:’äA|a˜@Ûy¾A|aA|a˜A|a˜A|a˜AMUBÛy¾A¬m+BMUB%†QBÛy>BT’dBMU…B„žwB‰a˜BZU…B¡ç¡B‰a˜B¡ç¡B¹m«B‰a˜Bèy¾BjžwB��ÈB¬m+B��ÈB������������������������³ª¦BZU…B$B%†QB_ŠB¬m+B0 [B|aB��HB|aBqÛB¬m+B%†ÑA%†QBÆm«AZU…BÆm«AqÛŽB%†ÑA¹m«BqÛBèy¾B��HB��ÈB0 [B��ÈB_ŠBèy¾B$B¹m«B³ª¦BZU…B³ª¦B¬m+B$B|a˜A_ŠB|a˜@0 [B����Ðó4B����„ž÷A|a˜@%†ÑA:’dA��������%†QBZU…Bõy>B„žwB%†QBT’dBT’dB„žwB%†QBZU…B������������������������%†QB|aAõy>B|a˜@%†QB����T’dB|a˜@%†QB|aA������������������������%†QBZU…Bõy>B„žwB%†QBT’dBT’dB„žwB%†QBZU…B������������������������T’dB|a˜@%†QB����õy>B|a˜@%†QB|aAT’dB|a˜@T’dB|a˜À%†QB:’dÁõy>B|a˜ÁÐó´B¹m«B:’dA¬m+BÐó´B����|aAT’dBèy¾BT’dB|aA:’äAèy¾B:’äA:’dA¹m«BÐó´B¬m+B:’dA��������������������Ûy¾A‰a˜BÛy¾A¡ç¡B:’äAÐó´BMUBèy¾B¬m+B��ÈBjžwB��ÈBdÛŽBèy¾B‰a˜BÐó´B¡ç¡B¡ç¡B¡ç¡BqÛŽB‰a˜B„žwBdÛŽBT’dB †QBÛy>B †QBMUB���������������� †QB|aAÛy>B|a˜@ †QB����:’dB|a˜@ †QB|aA������������������������G’€B%†QB0 [BT’dBÐó4BT’dB¡ç!BÛy>B¡ç!B¬m+BÐó4BMUB0 [BMUBG’€B|aBG’€BT’dBG’€B|aB_ŠBMUB$BMUB³ª¦B¬m+B³ª¦BÛy>B$B„žwB_ŠBqÛŽB0 [B‰a˜B��HB‰a˜BqÛBqÛŽB%†ÑA„žwBÆm«AÛy>BÆm«A¬m+B%†ÑA:’äAqÛB|a˜A��HB:’dA0 [B:’dA_ŠB|a˜A †QB��ÈB:’dA���� †QB��ÈBÐó´B����:’äAMUB‰a˜BMUB|a˜A��ÈB|a˜A������������|a˜A��ÈBjžwB��ÈB‰a˜Bèy¾B¡ç¡BÐó´B¹m«B¡ç¡B¹m«BqÛŽB¡ç¡B„žwB‰a˜BT’dBjžwB%†QB������������������������|a˜A%†QBjžwB%†QB‰a˜BÛy>B¡ç¡B¬m+B¹m«BMUB¹m«B|a˜A¡ç¡B|aA‰a˜B|a˜@jžwB����|a˜A��������������������¾0°B‰a˜B³ª¦B¹m«B„ž“Bèy¾BG’€B��ÈBÐó4B��ÈBqÛBèy¾B%†ÑA¹m«BÆm«A‰a˜BgU…A„žwBgU…A|aBÆm«AÛy¾A%†ÑA:’dAqÛB|a˜@Ðó4B����G’€B����„ž“B|a˜@³ª¦B:’dA¾0°BÛy¾A|a˜A��ÈB|a˜A����|a˜A��ÈB †QB��ÈBMU…Bèy¾B‰a˜B¹m«B¡ç¡B‰a˜B¹m«B„žwB¹m«B|aB¡ç¡BÛy¾A‰a˜B:’dAMU…B|a˜@ †QB����|a˜A����Æm«A��ÈBÆm«A����Æm«A��ÈB³ª¦B��ÈBÆm«A%†QB_nB%†QBÆm«A����³ª¦B����Æm«A��ÈBÆm«A����Æm«A��ÈB³ª¦B��ÈBÆm«A%†QB_nB%†QB����������������¾0°B‰a˜B³ª¦B¹m«B„ž“Bèy¾BG’€B��ÈBÐó4B��ÈBqÛBèy¾B%†ÑA¹m«BÆm«A‰a˜BgU…A„žwBgU…A|aBÆm«AÛy¾A%†ÑA:’dAqÛB|a˜@Ðó4B����G’€B����„ž“B|a˜@³ª¦B:’dA¾0°BÛy¾A¾0°B|aBG’€B|aB¾0°B|aB|a˜A��ÈB|a˜A����¹m«B��ÈB¹m«B����|a˜A%†QB¹m«B%†QB%†QB��ÈB%†QB����������������������������‰a˜B��ÈB‰a˜BÛy¾AqÛŽB|aAZU…B|a˜@T’dB����õy>B����–aB|a˜@gUB|aAo’äAÛy¾Ao’äAMUB|a˜A��ÈB|a˜A����¹m«B��ÈB|a˜AMUB¬m+BT’dB¹m«B����Ûy¾A��ÈBÛy¾A����Ûy¾A����¡ç¡B����:’dA��ÈB:’dA����:’dA��ÈB †QB����Ðó´B��ÈB †QB����Ðó´B��ÈBÐó´B����|a˜A��ÈB|a˜A����|a˜A��ÈB¹m«B����¹m«B��ÈB¹m«B��������������������¬m+B��ÈBMUBèy¾BÛy¾A¹m«B|a˜A‰a˜B:’dA„žwB:’dA|aB|a˜AÛy¾AÛy¾A:’dAMUB|a˜@¬m+B����jžwB����qÛŽB|a˜@¡ç¡B:’dA¹m«BÛy¾AÐó´B|aBÐó´B„žwB¹m«B‰a˜B¡ç¡B¹m«BqÛŽBèy¾BjžwB��ÈB¬m+B��ÈB|a˜A��ÈB|a˜A������������|a˜A��ÈBjžwB��ÈB‰a˜Bèy¾B¡ç¡BÐó´B¹m«B¡ç¡B¹m«BZU…B¡ç¡BT’dB‰a˜B%†QBjžwBÛy>B|a˜AÛy>B����������������¬m+B��ÈBMUBèy¾BÛy¾A¹m«B|a˜A‰a˜B:’dA„žwB:’dA|aB|a˜AÛy¾AÛy¾A:’dAMUB|a˜@¬m+B����jžwB����qÛŽB|a˜@¡ç¡B:’dA¹m«BÛy¾AÐó´B|aBÐó´B„žwB¹m«B‰a˜B¡ç¡B¹m«BqÛŽBèy¾BjžwB��ÈB¬m+B��ÈB:’dB|a˜A¹m«B|aÁ|a˜A��ÈB|a˜A����������������������������|a˜A��ÈBjžwB��ÈB‰a˜Bèy¾B¡ç¡BÐó´B¹m«B¡ç¡B¹m«BqÛŽB¡ç¡B„žwB‰a˜BT’dBjžwB%†QB|a˜A%†QB †QB%†QB¹m«B����¹m«B¹m«B‰a˜Bèy¾BjžwB��ÈB¬m+B��ÈB:’äAèy¾B|a˜A¹m«B|a˜A‰a˜BÛy¾AZU…B:’äA„žwB|aBT’dBMU…BÛy>B‰a˜B¬m+B¡ç¡B|aB¹m«B:’äA¹m«B:’dA‰a˜B|a˜@jžwB����¬m+B����:’äA|a˜@|a˜A:’dA †QB��ÈB †QB����|a˜A��ÈB¹m«B��ÈB|a˜A��ÈB|a˜A:’äAÛy¾A:’dAMUB|a˜@Ûy>B����:’dB����qÛŽB|a˜@¡ç¡B:’dA¹m«B:’äA¹m«B��ÈB:’dA��ÈB †QB����Ðó´B��ÈB †QB����|a˜@��ÈB:’äA���� †QB��ÈB:’äA���� †QB��ÈB‰a˜B������ÈB��ÈB‰a˜B����|a˜A��ÈB¹m«B����¹m«B��ÈB|a˜A����:’dA��ÈB †QB%†QB †QB����Ðó´B��ÈB †QB%†QB¹m«B��ÈB|a˜A����|a˜A��ÈB¹m«B��ÈB|a˜A����¹m«B����qÛB“îBqÛBMU¡ç!B“îB¡ç!BMUÂqÛB“îB_ŠB“îBqÛBMUÂ_ŠBMUÂ|a˜A��ÈB¹m«B:’dÁG’€B“îBG’€BMUÂ_ŠB“îB_ŠBMUÂqÛB“îB_ŠB“îBqÛBMUÂ_ŠBMU †QBJ ÛB:’dA¬m+B †QBJ ÛBÐó´B¬m+B������������MUÂ%†ÑBMUÂ%†ÑB:’äÁ����:’äÁ����MUÂÆm+B��ÈBZU…BqÛŽBÆm+B��ÈB–aBèy¾BZU…BqÛŽB¡ç¡BZU…B¡ç¡B����¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dAÛy¾A��ÈBÛy¾A����Ûy¾A%†QBMUB„žwB¬m+BZU…B:’dBZU…BMU…B„žwB‰a˜B%†QB¡ç¡B|aB¡ç¡B:’äA‰a˜B:’dAMU…B|a˜@:’dB����¬m+B����MUB|a˜@Ûy¾A:’dA����������������¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dA¡ç¡B��ÈB¡ç¡B����¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dA����������������Ûy¾A|aB¡ç¡B|aB¡ç¡BÛy>B‰a˜BT’dBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dA������������������������qÛŽB��ÈB„žwB��ÈB%†QBèy¾Bõy>B¡ç¡Bõy>B����gUBZU…BZU…BZU…B��������¡ç¡BZU…B¡ç¡B|aÁ‰a˜BÛy¾ÁdÛŽB:’äÁjžwBMUÂÛy>BMUÂ|aB:’äÁ��������¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dA%†ÑA��ÈB%†ÑA����%†ÑAÛy>B¡ç!B„žwB��HBZU…BG’€BZU…Bwž“B„žwBœ$BÛy>Bœ$B������������õy>B��ÈB%†QBèy¾BT’dB��ÈB%†QB%†ÑBõy>B��ÈB%†QBZU…B%†QB������������T’dB��ÈB„žwBèy¾BZU…B��ÈB„žwB%†ÑBT’dB��ÈB������������������������„žwBZU…B„žwB:’dÁT’dB:’äÁõy>BMU–aBMUÂ%†ÑA��ÈB%†ÑA����wž“BZU…B%†ÑA|a˜AÐó4B|aBœ$B����%†QB��ÈB%†QB��������ZU…B��������������������Ûy>B:’dA„žwBÛy¾AZU…B|aBZU…BÛy>B„žwB%†QBÛy>B%†QB������������%†QBÛy>BZU…B„žwB‰a˜BZU…BÐó´BZU…B��ÈB„žwB%†ÑBÛy>B%†ÑB����%†ÑAZU…B%†ÑA����������������������������%†ÑAÛy>B¡ç!B„žwB��HBZU…BG’€BZU…Bwž“B„žwBœ$BÛy>Bœ$B������������Ðó4BZU…BqÛB„žwB%†ÑA%†QBÆm«A|aBÆm«A:’äA%†ÑA:’dAqÛB|a˜@Ðó4B����_nB����_ŠB|a˜@$B:’dA³ª¦B:’äA³ª¦B|aB$B%†QB_ŠB„žwB_nBZU…BÐó4BZU…BÛy¾AZU…BÛy¾AMUÂ��������Ûy¾A%†QBMUB„žwB¬m+BZU…B:’dBZU…BMU…B„žwB‰a˜B%†QB¡ç¡B|aB¡ç¡B:’äA‰a˜B:’dAMU…B|a˜@:’dB����¬m+B����MUB|a˜@Ûy¾A:’dA¡ç¡BZU…B¡ç¡BMU¡ç¡B%†QBdÛŽB„žwBjžwBZU…BÛy>BZU…B|aB„žwB:’äA%†QBÛy¾A|aBÛy¾A:’äA:’äA:’dA|aB|a˜@Ûy>B����jžwB����dÛŽB|a˜@¡ç¡B:’dAgUBZU…BgUB����gUB|aB–aB%†QBõy>B„žwBT’dBZU…BqÛŽBZU…B������������������������œ$B%†QBwž“B„žwB_nBZU…BÐó4BZU…B„ž÷A„žwB%†ÑA%†QB„ž÷A¬m+B¡ç!B|aBG’€BMUBwž“B:’äAœ$B|a˜Aœ$B:’dAwž“B|a˜@_nB����Ðó4B����„ž÷A|a˜@%†ÑA:’dA������������������������õy>B��ÈBõy>B|a˜A%†QB|a˜@„žwB����qÛŽB����gUBZU…BZU…BZU…B��������%†ÑAZU…B%†ÑA|a˜A„ž÷A|a˜@¡ç!B����0 [B����G’€B|a˜@œ$B|a˜Aœ$BZU…Bœ$B����Ûy¾AZU…B †QB����¡ç¡BZU…B †QB����:’dAZU…BMUB���� †QBZU…BMUB���� †QBZU…BqÛŽB����Ðó´BZU…BqÛŽB����%†ÑAZU…Bœ$B����œ$BZU…B%†ÑA����%†ÑAZU…B0 [B������������³ª¦BZU…B0 [B����Ðó4B|a˜ÁqÛB:’äÁ%†ÑAMUÂÆm«AMUœ$BZU…B%†ÑA����%†ÑAZU…Bœ$BZU…B%†ÑA����œ$B����G’€B“îB0 [Bo’äB��HBJ ÛBÐó4B��ÈBÐó4BÐó´B��HB¡ç¡B0 [B‰a˜B_nBZU…B_nBT’dB��HBÛy>B����������������0 [Bo’äB��HB%†ÑB��HBèy¾B0 [B¹m«B_nB¡ç¡BG’€BqÛŽBG’€B„žwB_nB%†QB¡ç!B¬m+B_nBMUBG’€BÛy¾AG’€B:’dA_nB|a˜@0 [B������HB|aÁ��HB|a˜Á0 [B:’äÁ��������������������������HB|aB_nB:’äA_nB|a˜A0 [B|aA��HB|a˜@Ðó4B|a˜ÀÐó4B:’dÁ��HBÛy¾Á0 [B:’äÁG’€BMUÂ%†QB“îB%†QBMU¡ç!B“îB��HBo’äB0 [BJ ÛB_nB��ÈB_nBÐó´B0 [B¡ç¡B��HB‰a˜BÐó4BZU…BÐó4BT’dB0 [BÛy>B������������������HBo’äB0 [B%†ÑB0 [Bèy¾B��HB¹m«BÐó4B¡ç¡B¡ç!BqÛŽB¡ç!B„žwBÐó4B%†QBG’€B¬m+BÐó4BMUB¡ç!BÛy¾A¡ç!B:’dAÐó4B|a˜@��HB����0 [B|aÁ0 [B|a˜Á��HB:’äÁ������������������������0 [B|aBÐó4B:’äAÐó4B|a˜A��HB|aA0 [B|a˜@_nB|a˜À_nB:’dÁ0 [BÛy¾Á��HB:’äÁ¡ç!BMUÂ����������������|aA:’äA|aA|aB:’dA%†QBÛy¾AT’dBMUBT’dB¬m+B%†QB„žwB|aBqÛŽBMUB¡ç¡BMUBÐó´B|aBèy¾BÛy>B��������|aA|aB:’dAÛy>BÛy¾A%†QBMUB%†QB¬m+BÛy>B„žwBMUBqÛŽB:’äA¡ç¡B:’äAÐó´BMUBèy¾BÛy>Bèy¾BT’dBqÛŽB��ÈBMUBMUÂ������������������������Ûy>BZU…BMUB„žwBÛy¾A%†QB|a˜A|aB|a˜AÛy¾AÛy¾A:’dAMUB|a˜@Ûy>B����:’dB����qÛŽB|a˜@¡ç¡B:’dA¹m«B:’äA¹m«B¬m+B¡ç¡B%†QBqÛŽB„žwB:’dBZU…BÛy>BZU…B������������������������Roman��� vÞj€���‰aCàCÝj%†ÑB����¸zÞj‹ýÔA���ÀzÞj¥½MB���ÐzÞj*úžB���àzÞjÕi˜B����{Þj &ÁB���{Þj„ËB���0{Þj…ëYA���8{Þjv±<B���@{Þj">B���H{Þj‰ÁmB���P{Þj4‚ÂB���h{Þjª‚ÐA���x{Þj ‚ÉB���€{ÞjÓÞÓA���ˆ{Þj¡6¤B���{Þj'"šB���˜{Þj…B��� {ÞjK›B���¨{ÞjéšB���°{ÞjSV B���¸{Þj—_›B���È{Þjœ“B���Ð{ÞjtšB���Ø{ÞjZU›B���è{Þj-!”B���ð{ÞjXÊÑA���ø{Þj/nÒA���|Þj“8£B���|Þj4‚ÂB��� |Þj“8£B���0|ÞjIΓB���8|ÞjǺ”B���H|Þj#û B���X|Þjß@§B���p|Þj*ú¨B���ˆ|ÞjÊ’ªB���|Þjž^œB��� |ÞjV}B���À|Þj†‰³B���Ø|Þjd,²B���è|ÞjffªA����}ÞjúþoB���}ÞjE§žB���}ÞjS¥ŽB���(}ÞjÇkÂB���@}Þj±B���`}Þj7©±B���x}ÞjZU«B���€}ÞjV.°B���}ÞjÀ»¤B��� }ÞjE§¡B���¸}Þj¶äB���À}Þj1ù²B���Ð}Þj“8£B���Ø}Þj7 ÉB����~ÞjÀ»B��� ~ÞjMŸB���0~ÞjO~“B���@~Þjt8B���`~ÞjÕiœB���€~Þj½’9B��� ~Þjv´B���À~Þj¾ÐB���Ð~Þj$§B���Ø~Þj¯4…B���è~ÞjíŒB���ø~Þj†Ø‰B���Þj›†ŒB���Þjº ‰B��� ÞjížB���(Þj?÷B���8ÞjÁ ŽB���HÞjéæA���XÞjôìB���hÞjzB���xÞjR¸šA���Þj‹ì÷B���˜ÞjÃB���°ÞjV}B���ÀÞj›B���ÈÞj]|B���ØÞjûEB���èÞj´HyB���øÞjÄBB����€ÞjoRŽB���€Þj_irB��� €Þj#û B���@€Þj šaB���`€Þj-!„B���p€Þj´HwB���€€Þjœ„&B���˜€Þjq=¾A���°€ÞjÅà%B���¸€ÞjqŒ¶B���ЀÞjZU…B���à€Þj�����������ð€Þj����Þj���(Þj���8Þj���HÞj���XÞj���hÞj���xÞj���ˆÞj���˜Þj���ÀÞj���`‚Þj���€‚Þj ����ƒÞj"���`ƒÞj���p„Þj ���€„Þj ���à„Þj���0…Þj���@…Þj���P…Þj���`…Þj���p…Þj���€…Þj���À…Þj���à…Þj���†Þj��� †Þj���À†Þj���à†Þj���`‡Þj���؇Þj���ð‡Þj����ˆÞj��� ˆÞj���X‰Þj���h‰Þj���€‰Þj���€ŠÞj���@‹Þj���€‹Þj���À‹Þj����ŒÞj���@ŒÞj���XŒÞj���hŒÞj���xŒÞj��� ŒÞj��� Þj���`Þj��� Þj���8ŽÞj���HŽÞj���XŽÞj���hŽÞj ���€ŽÞj ���àŽÞj���@Þj���ÐÞj ���àÞj���@Þj���PÞj���`Þj���pÞj���€Þj���Þj��� Þj���ÀÞj���X‘Þj���h‘Þj���x‘Þj���ˆ‘Þj���˜‘Þj ���À‘Þj���’Þj��� ’Þj���0’Þj���@’Þj���P’Þj�����������`’Þj���p’Þj���€’Þj���’Þj��� ’Þj���°’Þj���À’Þj���à’Þj���ˆ“Þj ��� “Þj����”Þj���¨”Þj���¸”Þj ���à”Þj���0•Þj���@•Þj���à•Þj���ð•Þj ����–Þj���P–Þj���`–Þj���������������������������p–Þj���€–Þj���–Þj��� –Þj���°–Þj���À–Þj���ЖÞj���è–Þj���ø–Þj���—Þj���—Þj�����������(—Þj���8—Þj���H—Þj���X—Þj���h—Þj���������������������������x—Þj���ˆ—Þj���˜—Þj���¨—Þj���¸—Þj���È—Þj���à—Þj���˜Þj���˜Þj���0˜Þj���@˜Þj���°˜Þj���À˜Þj���@™Þj���°™Þj���À™Þj���@šÞj���àšÞj���›Þj��� ›Þj���`›Þj���ЛÞj���à›Þj��� œÞj���HœÞj���`œÞj��� œÞj���ÈœÞj���ØœÞj���èœÞj���øœÞj���Þj��� Þj���`Þj���˜Þj���ÀÞj����žÞj���ˆžÞj��� žÞj���ŸÞj��� ŸÞj���ŸÞj��� ŸÞj���àŸÞj���€ Þj���¨ Þj���À Þj���ø Þj���¡Þj���¡Þj�������������������(¡Þj���8¡Þj���H¡Þj���X¡Þj���h¡Þj���x¡Þj���ˆ¡Þj��� ¡Þj���СÞj���à¡Þj���ð¡Þj ����¢Þj���`¢Þj ����£Þj���P£Þj ���`£Þj���À£Þj ���`¤Þj ���À¤Þj ��� ¥Þj���x¥Þj��� ¥ÞjCVA��ÈBCVAMUBCVA|aA…ë A|a˜@CVA����&‘A|a˜@CVA|aA×£€@��ÈB×£€@ZU…B÷u(B��ÈB÷u(BZU…BI.%B“îBãÇþ@MUÂÀ»‹B“îB"BMUÂãÇþ@T’dBØA•BT’dBÍÌL@:’äAÀ»‹B:’äA7 åA“îB7 åA|a˜ÁZµ>B“îBZµ>B|a˜Á������������������������1ùŽB¹m«BÚwBèy¾BZµ>B��ÈB7 åA��ÈB4€eAèy¾Bq=š@¹m«Bq=š@‰a˜BvOAZU…B4€eA„žwBØð¾AT’dB‰ÁQBÛy>BÚwB¬m+Bs…B|aB1ùŽB:’äA1ùŽB:’dAÚwB|a˜@Zµ>B����7 åA����4€eA|a˜@q=š@:’dA &¸B��ÈB…Ë@��������������������#[ñA��ÈBðÅBÐó´BðÅB¡ç¡BÁ¹ BqÛŽBÄBËAZU…B $~AZU…B…Ë@‰a˜B…Ë@¹m«BMó1Aèy¾Be*¥A��ÈB#[ñA��ÈBðÅBèy¾BêWBÐó´B”‡ˆBÐó´BÛ¥Bèy¾B &¸B��ÈB¬ ’BMUBø~B:’äAÉöjB|a˜AÉöjB|aA”‡ˆB����Ó›B����óŸ®B|a˜@ &¸B:’dA &¸BÛy¾AÛ¥BMUB¬ ’BMUB��������žoÊBT’dBžoÊB„žwB“éÀBZU…B{c·BZU…BdÝ­B„žwBLW¤B%†QBK‘B:’äAÙ}|B:’dA`eVB|a˜@M0B����†8ÈA����‘xA|a˜@ÓÞ+A|aA)\¿@|a˜A)\¿@:’äAÓÞ+A|aB‘xA¬m+B1YCB„žwB`eVBZU…BªqiB‰a˜BªqiB¹m«B`eVBèy¾BM0B��ÈB¢4 Bèy¾BåPîA¹m«BåPîA‰a˜B¢4 B„žwBM0BÛy>BŇB:’dA4ÑšB|a˜@dÝ­B����“éÀB����žoÊB|a˜@žoÊB|aA{Ž@��ÈB{Ž@ZU…B8§#B“îB²ûAJ ÛBôì®Aèy¾BlxEA‰a˜B\ò@%†QB\ò@MUBlxEA|aAôì®A|aÁ²ûAÛy¾Á8§#BMUÂ����������������Ãõ¨@“îB]ÜlAJ ÛBížÂAèy¾BÕgB‰a˜BtB%†QBtBMUBÕgB|aAížÂA|aÁ]ÜlAÛy¾ÁÃõ¨@MUÂð'öAqÛŽBð'öA:’dAR¸Þ@T’dBåPZB:’äAåPZBT’dBR¸Þ@:’äA1YCB¹m«B1YCB����)\¿@¬m+B{c·B¬m+B9E’A|a˜@´YXA����ö( A|a˜@´YXA|aA9E’A|a˜@9E’A|a˜À´YXA:’dÁö( A|a˜Áö(ì@¬m+BH0ºB¬m+B����������������b¡QA|aA¤pA|a˜@b¡QA����éŽA|a˜@b¡QA|aA®ç@:’dÁ;ГB��ÈB��������¢4B��ÈB' šAèy¾BÓÞA¡ç¡B)\Ÿ@T’dB)\Ÿ@¬m+BÓÞA|a˜A' šA|a˜@¢4B����M,B����ªqeB|a˜@Å…B|a˜AKB¬m+BKBT’dBÅ…B¡ç¡BªqeBèy¾BM,B��ÈB¢4B��ÈB������������������������¸=A¡ç¡BÀªA¹m«Bœ„B��ÈBœ„B����é"A‰a˜Bé"A¡ç¡BÎoAÐó´BF¥Aèy¾BÖéA��ÈBÀAB��ÈB94gBèy¾Bi@zBÐó´BL¦†B¡ç¡BL¦†BqÛŽBi@zB„žwBð'TBÛy>B¤p­@����d,B��������������������|ahA��ÈBBÏ…B��ÈBMUB„žwBÛyRB„žwBT’xBT’dBBÏ…B%†QBZUB|aBZUB:’äABÏ…B:’dA%†eB|a˜@|a,B����ÛyæA����|ahA|a˜@¾0A|aA�� @|a˜AúþMB��ÈBìQx@MUBž–BMUBúþMB��ÈBúþMB����øxB��ÈB $fA��ÈBMóAT’dB $fA„žwB#[åAZU…B Ò+BZU…BÉödB„žwB”‡…B%†QB¬ B|aB¬ B:’äA”‡…B:’dAÉödB|a˜@ Ò+B����#[åA���� $fA|a˜@MóA|aA…›@|a˜A������������������������@äzB¹m«BØgBèy¾Bh³.B��ÈB ›B��ÈBôìžAèy¾Blx%A¡ç¡B\²@T’dB\²@MUBlx%A:’dAôìžA|a˜@ ›B����8§B����ÇËTB|a˜@@äzB:’dA8ø†B:’äA8ø†BMUB@äzBÛy>BÇËTBT’dB8§B„žwB ›B„žwBôìžAT’dBlx%AÛy>B\²@MUBtB��ÈB]ÜÄA����…ë±@��ÈBtB��ÈB��������¨FëA��ÈBûqAèy¾BXÊ%A¹m«BXÊ%A‰a˜BûqAZU…BI.ÅA„žwBãÇ.BT’dB‹ìgB%†QBu‡B¬m+BˆBMUBˆB|a˜Au‡B|aA»øzB|a˜@ÔAB����¨FëA����ûqA|a˜@XÊ%A|aA33³@|a˜A33³@MUBXÊ%A¬m+BêŸA%†QBƒ¯BT’dBBàTB„žwB»øzBZU…Bu‡B‰a˜Bu‡B¹m«B»øzBèy¾BÔAB��ÈB¨FëA��ÈB������������������������u‰BZU…B»ø~B%†QBBàXB¬m+B³»B|aBƒ¯ B|aBê§A¬m+BXÊ5A%†QB33Ó@ZU…B33Ó@qÛŽBXÊ5A¹m«Bê§Aèy¾Bƒ¯ B��ÈB³»B��ÈBBàXBèy¾B»ø~B¹m«Bu‰BZU…Bu‰B¬m+B»ø~B|a˜ABàXB|a˜@³»B����¨FóA����‹ý€A|a˜@XÊ5A:’dA��������vOaAZU…B¸A„žwBvOaAT’dBÀ–A„žwBvOaAZU…B������������������������vOaA|aA¸A|a˜@vOaA����À–A|a˜@vOaA|aA������������������������ñcOAZU…B33A„žwBñcOAT’dBXÊA„žwBñcOAZU…B������������������������XÊA|a˜@ñcOA����33A|a˜@ñcOA|aAXÊA|a˜@XÊA|a˜ÀñcOA:’dÁ33A|a˜ÁB€žB¹m«B ×C@¬m+BB€žB����ff¶@T’dBÔ¶BT’dBff¶@:’äAÔ¶B:’äA…ë1@¹m«BåðB¬m+B…ë1@��������������������R¸A‰a˜BR¸A¡ç¡BéRAÐó´BçŒAèy¾B¥½ÛA��ÈB‘:B��ÈBð'`Bèy¾B94sBÐó´B4 ƒB¡ç¡B4 ƒBqÛŽB94sB„žwBð'`BT’dB2÷BÛy>B2÷BMUB����������������2÷B|aAë�B|a˜@2÷B����a'B|a˜@2÷B|aA������������������������OÞDB%†QBðÅBT’dB#[ñAT’dBÄBËAÛy>BÄBËA¬m+B#[ñAMUBðÅBMUBOÞDB|aBOÞDBT’dBOÞDB|aBêWBMUBø~BMUB”‡ˆB¬m+B”‡ˆBÛy>Bø~B„žwBêWBqÛŽBðÅB‰a˜BÁ¹ B‰a˜Be*¥AqÛŽBMó1A„žwB…Ë@Ûy>B…Ë@¬m+BMó1A:’äAe*¥A|a˜AÁ¹ B:’dAðÅB:’dAêWB|a˜A|a"B��ÈB�� @����|a"B��ÈB‰aB����I†AMUBBÏ€BMUBR¸6A��ÈBR¸6A������������R¸6A��ÈBÀYB��ÈB4 ‰Bèy¾BL¦’BÐó´Bd,œB¡ç¡Bd,œBqÛŽBL¦’B„žwB4 ‰BT’dBÀYB%†QB������������������������R¸6A%†QBÀYB%†QB4 ‰BÛy>BL¦’B¬m+Bd,œBMUBd,œB|a˜AL¦’B|aA4 ‰B|a˜@ÀYB����R¸6A��������������������]-œB‰a˜BE§’B¹m«B+6Bèy¾B²YB��ÈBôì B��ÈB*©ÍAèy¾BlxA¹m«BÀ6A‰a˜B¸Õ@„žwB¸Õ@|aBÀ6AÛy¾AlxA:’dA*©ÍA|a˜@ôì B����²YB����+6B|a˜@E§’B:’dA]-œBÛy¾A)\?A��ÈB)\?A����)\?A��ÈBW,5B��ÈBåPnBèy¾B¯4ŠB¹m«BǺ“B‰a˜Bß@B„žwBß@B|aBǺ“BÛy¾A¯4ŠB:’dAåPnB|a˜@W,5B����)\?A����R¸6A��ÈBR¸6A����R¸6A��ÈBL¦’B��ÈBR¸6A%†QB‘FB%†QBR¸6A����L¦’B����R¸6A��ÈBR¸6A����R¸6A��ÈBL¦’B��ÈBR¸6A%†QB‘FB%†QB����������������*úœB‰a˜Bt“B¹m«Bãg€Bèy¾BL·ZB��ÈBކB��ÈB]ÜÐAèy¾BŸ«„A¹m«B&=A‰a˜B…ëá@„žwB…ëá@|aB&=AÛy¾AŸ«„A:’dA]ÜÐA|a˜@ކB����L·ZB����ãg€B|a˜@t“B:’dA*úœBÛy¾A*úœB|aBL·ZB|aB*úœB|aBR¸6A��ÈBR¸6A����d,œB��ÈBd,œB����R¸6A%†QBd,œB%†QBÂ-A��ÈBÂ-A����������������������������ÛyHB��ÈBÛyHBÛy¾A¬m5B|aA|a"B|a˜@:’øA����|a¬A����|a@A|a˜@|aè@|aA�� @Ûy¾A�� @MUBáz4A��ÈBáz4A����¶ä›B��ÈBáz4AMUB¦[ BT’dB¶ä›B����Há:A��ÈBHá:A����Há:A����S¥‰B����Â-A��ÈBÂ-A����Â-A��ÈB ÒCB����Û®B��ÈB ÒCB����Û®B��ÈBÛ®B����q=2A��ÈBq=2A����q=2A��ÈB›B����›B��ÈB›B��������������������à> B��ÈBMÊAèy¾B†8|A¹m«BÈ0A‰a˜B®Ç@„žwB®Ç@|aBÈ0AÛy¾A†8|A:’dAMÊA|a˜@à> B����žoWB����ˆ}B|a˜@;БB:’dASV›BÛy¾AjܤB|aBjܤB„žwBSV›B‰a˜B;БB¹m«Bˆ}Bèy¾BžoWB��ÈBà> B��ÈBš™AA��ÈBš™AA������������š™AA��ÈBÔ[B��ÈB]|ŠBèy¾Bu”BÐó´BˆB¡ç¡BˆBZU…Bu”BT’dB]|ŠB%†QBÔ[BÛy>Bš™AAÛy>B����������������P|B��ÈBãÇÂAèy¾BI.mA¹m«B‹ý A‰a˜Bš™©@„žwBš™©@|aB‹ý AÛy¾AI.mA:’dAãÇÂA|a˜@P|B����­SB����ˆÅyB|a˜@óîB:’dA u™BÛy¾A#û¢B|aB#û¢B„žwB u™B‰a˜BóîB¹m«BˆÅyBèy¾B­SB��ÈBP|B��ÈBß @B|a˜A u™B|aÁHá:A��ÈBHá:A����������������������������Há:A��ÈBþ%ZB��ÈBS¥‰Bèy¾Bk+“BÐó´Bƒ±œB¡ç¡Bƒ±œBqÛŽBk+“B„žwBS¥‰BT’dBþ%ZB%†QBHá:A%†QBŸ 4B%†QBƒ±œB����ZU•B¹m«B*I‚Bèy¾B¬mKB��ÈBÛyþA��ÈB¾0ŒAèy¾B���A¹m«B���A‰a˜B¾0LAZU…B¾0ŒA„žwB|aØAT’dBÛy^BÛy>B*I‚B¬m+BBÏ‹B|aBZU•B:’äAZU•B:’dA*I‚B|a˜@¬mKB����ÛyþA����¾0ŒA|a˜@���A:’dAðÅB��ÈBðÅB����= @��ÈB¬ ŠB��ÈB×£8A��ÈB×£8A:’äAKj‚A:’dA ›ÎA|a˜@r B����rŠFB����¯B|a˜@½ã’B:’dAÕiœB:’äAÕiœB��ÈB= @��ÈB Ò!B����ÛB��ÈB Ò!B����{@��ÈBj<ÐA����#[GB��ÈBj<ÐA����#[GB��ÈBL“B����ŒêÂB��ÈBL“B������ @��ÈBZUŠB����ZUŠB��ÈB�� @����\Â?��ÈB÷uB%†QB÷uB����Çk›B��ÈB÷uB%†QBZUŠB��ÈB�� @������ @��ÈBZUŠB��ÈB�� @����ZUŠB����Ãõø@“îBÃõø@MUŸ«HA“îBŸ«HAMUÂÃõø@“îBt$B“îBÃõø@MUÂt$BMUÂHáº@��ÈBn‘B:’dÁ¬ B“îB¬ BMUÂÜB“îBÜBMUÂ{Ž@“îBÜB“îB{Ž@MUÂÜBMUÂM0BJ ÛB)\¿@¬m+BM0BJ ÛBLW¤B¬m+B��������ÍÌŒ¿MUÂòRÏBMUÂòRÏB:’äÁÍÌŒ¿:’äÁÍÌŒ¿MUÂmB��ÈB[ScBqÛŽBmB��ÈB{âAèy¾B[ScBqÛŽB¦JBZU…B¦JB����¦JB%†QB-2YB„žwBÎ3BZU…BêóAZU…BÁ¹§A„žwB7A%†QBÂÕ@|aBÂÕ@:’äA7A:’dAÁ¹§A|a˜@êóA����Î3B����-2YB|a˜@¦JB:’dAö( A��ÈBö( A����ö( A%†QB9E’A„žwB÷uÞAZU…BŠ_(BZU…BéwNB„žwBbtB%†QBI΃B|aBI΃B:’äAbtB:’dAéwNB|a˜@Š_(B����÷uÞA����9E’A|a˜@ö( A:’dA����������������ϦzB%†QBVŽTB„žwB÷u.BZU…BÑ¢êAZU…BržA„žwBª‚$A%†QB×£°@|aB×£°@:’äAª‚$A:’dAržA|a˜@Ñ¢êA����÷u.B����VŽTB|a˜@ϦzB:’dA±!wB��ÈB±!wB����±!wB%†QB7 QB„žwBØð*BZU…B“˜ãAZU…BÕg—A„žwB/nA%†QBáz”@|aBáz”@:’äA/nA:’dAÕg—A|a˜@“˜ãA����Øð*B����7 QB|a˜@±!wB:’dA����������������= ·@|aBœs{B|aBœs{BÛy>BmghBT’dB#[UB„žwBÄB/BZU…Bj<ìAZU…B¬  A„žwBݵ'A%†QB= ·@|aB= ·@:’äAݵ'A:’dA¬  A|a˜@j<ìA����ÄB/B����#[UB|a˜@œs{B:’dA������������������������ÎB��ÈBÞêA��ÈB ÒAèy¾B‚soA¡ç¡B‚soA����{.?ZU…BŸ BZU…B��������øzBZU…BøzB|aÁÉöfBÛy¾ÁêSB:’äÁ Ò-BMUÂ#[éAMUÂe*A:’äÁ��������øzB%†QBêSB„žwB Ò-BZU…B#[éAZU…Be*A„žwBMó!A%†QB…«@|aB…«@:’äAMó!A:’dAe*A|a˜@#[éA���� Ò-B����êSB|a˜@øzB:’dAš™A��ÈBš™A����š™AÛy>Bê¿A„žwBT£BZU…BãÇ>BZU…BBàdB„žwB‹ìwBÛy>B‹ìwB������������ìQ A��ÈBª‚lAèy¾B´YœA��ÈBª‚lA%†ÑBìQ A��ÈBª‚lAZU…Bª‚lA������������΋A��ÈB-2±Aèy¾BŒJ×A��ÈB-2±A%†ÑB΋A��ÈB������������������������-2±AZU…B-2±A:’dÁ΋A:’äÁ@¤û@MUÂázÔ¿MUš™A��ÈBš™A����BàdBZU…Bš™A|a˜AI.åA|aB‹ìwB����ìQ A��ÈBìQ A����š™AZU…Bš™A������������š™AÛy>Bê¿A„žwBT£BZU…BãÇ>BZU…BBàdB„žwB‹ìwBÛy>B‹ìwB������������‹ìwBÛy>Bˆ˜B„žwB¼”«BZU…Bé&ÈBZU…B33ÛB„žwBX¹äBÛy>BX¹äB����HáAZU…BHáA����������������������������HáAÛy>BÁ¹»A„žwB?õBZU…BÎ=BZU…B-2cB„žwBw>vBÛy>Bw>vB������������åPæAZU…B' šA„žwBÓÞA%†QB)\Ÿ@|aB)\Ÿ@:’äAÓÞA:’dA' šA|a˜@åPæA����M,B����`eRB|a˜@Ù}xB:’dAÅ…B:’äAÅ…B|aBÙ}xB%†QB`eRB„žwBM,BZU…BåPæAZU…B)\AZU…B)\AMUÂ��������)\A%†QBÓÞ—A„žwB‘äAZU…BW,+BZU…B¶DQB„žwB/]wB%†QB¯4…B|aB¯4…B:’äA/]wB:’dA¶DQB|a˜@W,+B����‘äA����ÓÞ—A|a˜@)\A:’dA}îwBZU…B}îwBMUÂ}îwB%†QBÖQB„žwB¥½+BZU…B-2åAZU…Bo™A„žwBb¡A%†QBHáš@|aBHáš@:’äAb¡A:’dAo™A|a˜@-2åA����¥½+B����ÖQB|a˜@}îwB:’dA)\AZU…B)\A����)\A|aBçŒcA%†QB2÷½A„žwBøBZU…B†8>BZU…B������������������������òRdB%†QB¨FQB„žwB"BZU…Bû½AZU…BñcA„žwBff–@%†QBñcA¬m+B·â—A|aBI.+BMUB¨FQB:’äAòRdB|a˜AòRdB:’dA¨FQB|a˜@"B����û½A����ñcA|a˜@ff–@:’dA������������������������6mA��ÈB6mA|a˜Ah³œA|a˜@&äèA����rŠB����q= ?ZU…BB~BZU…B��������)\AZU…B)\A|a˜AçŒcA|a˜@2÷½A����' B����†8>B|a˜@/]wB|a˜A/]wBZU…B/]wB����ffæ?ZU…B¡øòA����ˆÅkBZU…B¡øòA������ @ZU…B|a¬A����|a"BZU…B|a¬A����|a"BZU…BT’nB����‰aBZU…BT’nB����ázÔ?ZU…Bü)XB����ü)XBZU…BázÔ?����ûÑ@ZU…B€ˆ B������������·Ñ~BZU…B€ˆ B����BàÌA|a˜Áƒ¯€A:’äÁûÑ@MUÂffæ?MU´HcBZU…B{Ž@����{Ž@ZU…B´HcBZU…B{Ž@����´HcB����„ùA“îB[S­Ao’äBû:‡AJ ÛB9EBA��ÈB9EBAÐó´Bû:‡A¡ç¡B[S­A‰a˜BºkÓAZU…BºkÓAT’dBû:‡AÛy>B����������������[S­Ao’äBû:‡A%†ÑBû:‡Aèy¾B[S­A¹m«BºkÓA¡ç¡B„ùAqÛŽB„ùA„žwBºkÓA%†QBö(ì@¬m+BºkÓAMUB„ùAÛy¾A„ùA:’dAºkÓA|a˜@[S­A����û:‡A|aÁû:‡A|a˜Á[S­A:’äÁ������������������������û:‡A|aBºkÓA:’äAºkÓA|a˜A[S­A|aAû:‡A|a˜@9EBA|a˜À9EBA:’dÁû:‡AÛy¾Á[S­A:’äÁ„ùAMUÂ×£8A“îB×£8AMUÂHáA“îBb¡•Ao’äBÁ¹»AJ ÛB ÒáA��ÈB ÒáAÐó´BÁ¹»A¡ç¡Bb¡•A‰a˜B_AZU…B_AT’dBÁ¹»AÛy>B����������������b¡•Ao’äBÁ¹»A%†ÑBÁ¹»Aèy¾Bb¡•A¹m«B_A¡ç¡BHáAqÛŽBHáA„žwB_A%†QB?õB¬m+B_AMUBHáAÛy¾AHáA:’dA_A|a˜@b¡•A����Á¹»A|aÁÁ¹»A|a˜Áb¡•A:’äÁ������������������������Á¹»A|aB_A:’äA_A|a˜Ab¡•A|aAÁ¹»A|a˜@ ÒáA|a˜À ÒáA:’dÁÁ¹»AÛy¾Áb¡•A:’äÁHáAMUÂ����������������Há:@:’äAHá:@|aB Òõ@%†QBF¥‰AT’dBÖÕAT’dBaB%†QB94]B|aBL¦BMUB|²”BMUB«¾§B|aBÃD±BÛy>B��������Há:@|aB Òõ@Ûy>BF¥‰A%†QBÖÕA%†QBaBÛy>B94]BMUBL¦B:’äA|²”B:’äA«¾§BMUBÃD±BÛy>BÃD±BT’dB%†QB��ÈB:’dAMUÂ������������������������:’äAZU…B:’dA„žwB|a˜@%†QB����|aB����Ûy¾A|a˜@:’dA:’dA|a˜@:’äA����|aB����%†QB|a˜@„žwB:’dAZU…B:’äAZU…B¬m+B„žwB%†QB%†QB„žwB|aBZU…B:’äAZU…B������������������������fgEnumSubWindows����Enumerator or callback missing from subwindow enumerator call��� ERROR: Internal error <%s> in function %s�Window Enumeration�� ERROR: Internal <%s> function called without first calling 'glutInit'.�fgEnumWindows��Enumerator or callback missing from window enumerator call�fgDestroyWindow��Window destroy function called with null window�fgDestroyMenu���Menu destroy function called with null menu�freeglut menu���������������glutSolidTeapot� ERROR: Function <%s> called without first calling 'glutInit'.�glutWireTeapot��f���g���h���i������������������ ��� ��� ��� ��� ��������� ��� ������������������������������������������������������������������ ���!���"���#���$���%���&���'���(���`���`���`���`���a���b���c���d���e���e���e���e�����������������������������j���k���l���m���n���o���p���q���r���s���t���u���v���v���v���v���|���z���w���y���{���~���}���x���(���'���&���%���)���*���+���,���-���.���/���0���1���2���3���4���5���6���7���8���5���6���7���8���9���:���;���<���=���>���?���@������A���B���C���D���E���F���G���H���I���J���K���L���M���N���O���P���Q���R���S���P���Q���R���S���T���U���V���W���X���Y���Z���[���\���]���^���_���š™™™™™É?��������š™™™™™@š™™™™™É?yé&1¬¼¿š™™™™™@yé&1¬¼?š™™™™™É¿š™™™™™@��������š™™™™™É¿š™™™™™@ffffffõ?�������������@@ffffffõ?+‡ÙÎ÷ç¿�����@@+‡ÙÎ÷ç?ffffffõ¿�����@@��������ffffffõ¿�����@@������÷?�������������@@������÷?Ãõ(\Âé¿�����@@Ãõ(\Âé?������÷¿�����@@��������������÷¿�����@@������ø?��������333333@������ø?áz®Gáê¿333333@áz®Gáê?������ø¿333333@��������������ø¿333333@������ü?��������������þ?������ü?\Âõ(\ï¿������þ?\Âõ(\ï?������ü¿������þ?��������������ü¿������þ?�������@��������š™™™™™õ?�������@ìQ¸…ëñ¿š™™™™™õ?ìQ¸…ëñ?�������Àš™™™™™õ?���������������Àš™™™™™õ?�������@��������ÍÌÌÌÌÌì?�������@ìQ¸…ëñ¿ÍÌÌÌÌÌì?ìQ¸…ëñ?�������ÀÍÌÌÌÌÌì?���������������ÀÍÌÌÌÌÌì?�������À��������ÍÌÌÌÌÌì?�������@��������ÍÌÌÌÌÌÜ?�������@ìQ¸…ëñ¿ÍÌÌÌÌÌÜ?ìQ¸…ëñ?�������ÀÍÌÌÌÌÌÜ?���������������ÀÍÌÌÌÌÌÜ?������ø?��������ÍÌÌÌÌÌÌ?������ø?áz®Gáê¿ÍÌÌÌÌÌÌ?áz®Gáê?������ø¿ÍÌÌÌÌÌÌ?��������������ø¿ÍÌÌÌÌÌÌ?������ø?��������333333Ã?������ø?áz®Gáê¿333333Ã?áz®Gáê?������ø¿333333Ã?��������������ø¿333333Ã?š™™™™™ù¿��������333333�@š™™™™™ù¿333333Ó¿333333�@������ø¿333333Ó¿������@������ø¿��������������@ffffffÀ��������333333�@ffffffÀ333333Ó¿333333�@������À333333Ó¿������@������À��������������@š™™™™™À��������333333�@š™™™™™À333333Ó¿333333�@������À333333Ó¿������@������À��������������@š™™™™™À��������ÍÌÌÌÌÌü?š™™™™™À333333Ó¿ÍÌÌÌÌÌü?������À333333Ó¿ÍÌÌÌÌÌü?������À��������ÍÌÌÌÌÌü?š™™™™™À��������333333ù?š™™™™™À333333Ó¿333333ù?������À333333Ó¿š™™™™™õ?������À��������š™™™™™õ?������À��������������ò?������À333333Ó¿������ò?333333À333333Ó¿������î?333333À��������������î?�������À333333Ó¿ÍÌÌÌÌÌì?ffffffþ¿333333Ó¿333333ã?ffffffþ¿��������333333ã?333333û?��������ÍÌÌÌÌÌö?333333û?…ëQ¸å¿ÍÌÌÌÌÌö?333333û?…ëQ¸å¿333333ã?333333û?��������333333ã?ÍÌÌÌÌÌ@��������ÍÌÌÌÌÌö?ÍÌÌÌÌÌ@…ëQ¸å¿ÍÌÌÌÌÌö?ÍÌÌÌÌÌ@…ëQ¸å¿ffffffê?ÍÌÌÌÌÌ@��������ffffffê?ffffff@��������ÍÌÌÌÌÌ�@ffffff@������пÍÌÌÌÌÌ�@333333@������п333333�@333333@��������333333�@š™™™™™@��������333333@š™™™™™@������п333333@ffffff @������п333333@ffffff @��������333333@ffffff@��������ÍÌÌÌÌÌ@ffffff@������пÍÌÌÌÌÌ@333333 @������п33333ó@333333 @��������33333ó@333333@��������ÍÌÌÌÌÌ@333333@333333ÿÍÌÌÌÌÌ@š™™™™™ @333333Ã¿š™™™™@š™™™™™ @��������š™™™™@ffffff@��������333333@ffffff@333333ÿ333333@š™™™™™ @333333ÿ333333@š™™™™™ @��������333333@����������������333333 @š™™™™™é?��������333333 @š™™™™™é?ÍÌÌÌÌÌÜ¿333333 @ÍÌÌÌÌÌÜ?š™™™™™é¿333333 @��������š™™™™™é¿333333 @����������������ÍÌÌÌÌÌ@ffffffö?��������333333@ffffffö?J +‡é¿333333@J +‡é?ffffffö¿333333@��������ffffffö¿333333@š™™™™™Ù?��������ffffff@š™™™™™Ù?yé&1¬Ì¿ffffff@yé&1¬Ì?š™™™™™Ù¿ffffff@��������š™™™™™Ù¿ffffff@ÍÌÌÌÌÌô?��������ffffff@ÍÌÌÌÌÌô?²ï§ÆKç¿ffffff@²ï§ÆKç?ÍÌÌÌÌÌô¿ffffff@��������ÍÌÌÌÌÌô¿ffffff@ÍÌÌÌÌÌô?��������333333@ÍÌÌÌÌÌô?²ï§ÆKç¿333333@²ï§ÆKç?ÍÌÌÌÌÌô¿333333@��������ÍÌÌÌÌÌô¿333333@������������������������ÍÌÌÌÌÌö?ð§ÆK7‰é¿��������������ø?��������333333³?ÍÌÌÌÌÌö?����������������ð§ÆK7‰é?ÍÌÌÌÌÌö¿����������������������ø¿333333³?��������ÍÌÌÌÌÌö¿��������������ø?áz®Gáê¿333333³?áz®Gáê?������ø¿333333³?��‡C���?��À¿������������glutSetWindowData��� ERROR: Function <%s> called without first calling 'glutInit'.� ERROR: Function <%s> called with no current window defined.�glutGetWindowData�glutFullScreen�glutFullScreenToggle�glutReshapeWindow�glutPopWindow�glutPushWindow�glutPositionWindow�glutSetIconTitle�glutSetWindowTitle�glutIconifyWindow�glutHideWindow�glutShowWindow�glutDestroyWindow�glutCreateSubWindow��glutCreateWindow�glutSetWindow�glutSetWindow(): window ID %d not found!�FREEGLUT�fgOpenWindow�Window Class Info Not Found�� ERROR: Internal error <%s> in function %s�Game mode being invoked on a subwindow��Failed to create a window (%s)!�wglGetExtensionsStringARB�FREEGLUT_dummy�WGL_ARB_multisample�wglChoosePixelFormatARB�wglCreateContextAttribsARB�wglCreateContextAttribsARB not found����Unable to create OpenGL %d.%d context (flags %x, profile %x)�WGL_ARB_create_context���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zZK����ÒÕ����‘���‘���(Ð�lÒ�°Ô�àÅ��P� ™��@É�� È��pÄ��0>��`8�� 8��P<��@9��Ð���È��PÇ��`��@×�� Å�� ÿ��À��PÅ��@ÿ��Ä��Ý��€�� ��ÐA��à��°Ú���’��ÐÙ��ÀØ��àø��àù��°@��àB��ÐÞ��p×��ÐÄ��àÃ�� Û��ÐÛ��"��Ð÷��€ø��Û��@þ��Àý��€��PØ��’��0Ž��@Ž��Ž���Ž��PŽ��€��À��ð�����À��`Û��pA��€¿��`Á��à¿�� ��ð��À��€�� ��Ð��p��0��Ðú��ðû��àÚ�� ��ðÚ��€ ��`û��°Æ��ÀÚ��Ù��P��Pú�� ×��°��Àü��Ð×��Å�� Ã�� Ü��P�ø��@ý��÷���Û��Àþ�� ‰��Pf��Ðw��°N���o��ðG��@m��€D��|��àö�� q�� €����� ��P��°��p�� ÷��;�� 6��p6��°9��p7��À ��à��0��à��ÐÚ��À÷��°÷��€÷����°�� �� ��†��i��ðu��€Z��Pp��PK�� n��@F��z��0÷��@s��ƒ��ßÕ�øÕ�Ö�&Ö�7Ö�FÖ�UÖ�iÖ�zÖ�‹Ö�œÖ�¬Ö�¾Ö�ÔÖ�èÖ�öÖ�×�×�*×�;×�K×�]×�l×�z×�ˆ×�˜×�ª×�¸×�Í×�Ö×�í×�Ø�Ø�'Ø�7Ø�JØ�RØ�_Ø�kØ�{Ø�Ø�žØ�±Ø�¿Ø�ÑØ�áØ�ðØ�Ù�Ù�#Ù�,Ù�AÙ�XÙ�oÙ�ƒÙ�™Ù�°Ù�ÃÙ�ÔÙ�åÙ�øÙ�Ú�Ú�)Ú�6Ú�HÚ�\Ú�nÚ�Ú�Ú�žÚ�±Ú�ÈÚ�ÞÚ�ìÚ�ÿÚ�Û�*Û�IÛ�aÛ�pÛ�ƒÛ�•Û�¦Û�¶Û�ÈÛ�ÕÛ�ãÛ�ôÛ�Ü�Ü�!Ü�/Ü�=Ü�OÜ�bÜ�yÜ�‰Ü�˜Ü�¦Ü�´Ü�ÆÜ�ÜÜ�ñÜ�Ý�"Ý�<Ý�LÝ�\Ý�qÝ�€Ý�˜Ý�°Ý�ÈÝ�ØÝ�êÝ��Þ�Þ�%Þ�6Þ�GÞ�WÞ�gÞ�|Þ�‘Þ�ŸÞ�¬Þ�¹Þ�ÉÞ�ÜÞ�ïÞ�ÿÞ�ß�$ß�1ß�>ß�Oß�dß�xß�‹ß�§ß�Àß�Ïß�Þß�òß����������� � � � � ������������������� �!�"�#�$�%�&�'�(�)�*�+�,�-�.�/�0�1�2�3�4�5�6�7�8�9�:�;�<�=�>�?�@�A�B�C�D�E�F�G�H�I�J�K�L�M�N�O�P�Q�R�S�T�U�V�W�X�Y�Z�[�\�]�^�_�`�a�b�c�d�e�f�g�h�i�j�k�l�m�n�o�p�q�r�s�t�u�v�w�x�y�z�{�|�}�~��€��‚�ƒ�„�…�†�‡�ˆ�‰�Š�‹�Œ��Ž���freeglut.dll�__glutCreateMenuWithExit�__glutCreateWindowWithExit�__glutInitWithExit�glutAddMenuEntry�glutAddSubMenu�glutAttachMenu�glutBitmapCharacter�glutBitmapHeight�glutBitmapLength�glutBitmapString�glutBitmapWidth�glutButtonBoxFunc�glutChangeToMenuEntry�glutChangeToSubMenu�glutCloseFunc�glutCopyColormap�glutCreateMenu�glutCreateSubWindow�glutCreateWindow�glutDestroyMenu�glutDestroyWindow�glutDetachMenu�glutDeviceGet�glutDialsFunc�glutDisplayFunc�glutEnterGameMode�glutEntryFunc�glutEstablishOverlay�glutExit�glutExtensionSupported�glutForceJoystickFunc�glutFullScreen�glutFullScreenToggle�glutGameModeGet�glutGameModeString�glutGet�glutGetColor�glutGetMenu�glutGetMenuData�glutGetModeValues�glutGetModifiers�glutGetProcAddress�glutGetWindow�glutGetWindowData�glutHideOverlay�glutHideWindow�glutIconifyWindow�glutIdleFunc�glutIgnoreKeyRepeat�glutInit�glutInitContextFlags�glutInitContextProfile�glutInitContextVersion�glutInitDisplayMode�glutInitDisplayString�glutInitWindowPosition�glutInitWindowSize�glutJoystickFunc�glutKeyboardFunc�glutKeyboardUpFunc�glutLayerGet�glutLeaveGameMode�glutLeaveMainLoop�glutMainLoop�glutMainLoopEvent�glutMenuDestroyFunc�glutMenuStateFunc�glutMenuStatusFunc�glutMotionFunc�glutMouseFunc�glutMouseWheelFunc�glutOverlayDisplayFunc�glutPassiveMotionFunc�glutPopWindow�glutPositionWindow�glutPostOverlayRedisplay�glutPostRedisplay�glutPostWindowOverlayRedisplay�glutPostWindowRedisplay�glutPushWindow�glutRemoveMenuItem�glutRemoveOverlay�glutReportErrors�glutReshapeFunc�glutReshapeWindow�glutSetColor�glutSetCursor�glutSetIconTitle�glutSetKeyRepeat�glutSetMenu�glutSetMenuData�glutSetOption�glutSetWindow�glutSetWindowData�glutSetWindowTitle�glutSetupVideoResizing�glutShowOverlay�glutShowWindow�glutSolidCone�glutSolidCube�glutSolidCylinder�glutSolidDodecahedron�glutSolidIcosahedron�glutSolidOctahedron�glutSolidRhombicDodecahedron�glutSolidSierpinskiSponge�glutSolidSphere�glutSolidTeapot�glutSolidTetrahedron�glutSolidTorus�glutSpaceballButtonFunc�glutSpaceballMotionFunc�glutSpaceballRotateFunc�glutSpecialFunc�glutSpecialUpFunc�glutStopVideoResizing�glutStrokeCharacter�glutStrokeHeight�glutStrokeLength�glutStrokeString�glutStrokeWidth�glutSwapBuffers�glutTabletButtonFunc�glutTabletMotionFunc�glutTimerFunc�glutUseLayer�glutVideoPan�glutVideoResize�glutVideoResizeGet�glutVisibilityFunc�glutWMCloseFunc�glutWarpPointer�glutWindowStatusFunc�glutWireCone�glutWireCube�glutWireCylinder�glutWireDodecahedron�glutWireIcosahedron�glutWireOctahedron�glutWireRhombicDodecahedron�glutWireSierpinskiSponge�glutWireSphere�glutWireTeapot�glutWireTetrahedron�glutWireTorus�¸à���������î�8ã�Ðà���������<î�Pã�ìà���������xî�lã�$á���������Œî�¤ã�0á���������ï�°ã�¤á���������Äï�$ä�`â���������ˆð�àä�ã���������¨ð�œå�������������������������´å�Âå�Ðå�àå���������ôå�æ�æ�*æ�<æ���������Jæ�Zæ�hæ�væ�Šæ�šæ�¬æ�Àæ�Òæ�Þæ�îæ��ç��������� ç���������ç�$ç�.ç�6ç�Bç�Lç�Rç�Zç�dç�nç�vç�~ç�ˆç�’ç�œç�¦ç�¬ç�´ç�¾ç�Èç�Òç�Üç�æç�ðç�úç�è�è���������è�$è�0è�<è�Jè�Vè�fè�rè�zè�ˆè�’è�¢è�°è�Àè�Îè�àè�êè�øè�é�é�$é�.é�>é�Lé�`é�né�~é�”é�¤é�´é�Äé�Ðé�Üé�ìé�üé� ê�ê�&ê�4ê�Bê�Vê�jê�‚ê�”ê�¨ê���������ºê�Îê�Üê�öê�ë�$ë�6ë�Hë�Xë�lë�xë�ë� ë�°ë�¸ë�Ìë�Úë�îë�üë�ì�"ì�2ì�@ì�Lì�Zì�vì�†ì�˜ì�¨ì�ºì�Ìì�Øì�êì�øì�í�í�$í�6í�Fí�Xí�fí�tí�~í�’í�¦í���������¶í�Èí�Öí�èí�øí���������´å�Âå�Ðå�àå���������ôå�æ�æ�*æ�<æ���������Jæ�Zæ�hæ�væ�Šæ�šæ�¬æ�Àæ�Òæ�Þæ�îæ��ç��������� ç���������ç�$ç�.ç�6ç�Bç�Lç�Rç�Zç�dç�nç�vç�~ç�ˆç�’ç�œç�¦ç�¬ç�´ç�¾ç�Èç�Òç�Üç�æç�ðç�úç�è�è���������è�$è�0è�<è�Jè�Vè�fè�rè�zè�ˆè�’è�¢è�°è�Àè�Îè�àè�êè�øè�é�é�$é�.é�>é�Lé�`é�né�~é�”é�¤é�´é�Äé�Ðé�Üé�ìé�üé� ê�ê�&ê�4ê�Bê�Vê�jê�‚ê�”ê�¨ê���������ºê�Îê�Üê�öê�ë�$ë�6ë�Hë�Xë�lë�xë�ë� ë�°ë�¸ë�Ìë�Úë�îë�üë�ì�"ì�2ì�@ì�Lì�Zì�vì�†ì�˜ì�¨ì�ºì�Ìì�Øì�êì�øì�í�í�$í�6í�Fí�Xí�fí�tí�~í�’í�¦í���������¶í�Èí�Öí�èí�øí�����‚RegCloseKey�œRegOpenKeyA�RegOpenKeyExA�§RegQueryValueExA���ChoosePixelFormat�’�GetDeviceCaps�¿�GetPixelFormat��7SetPixelFormat��PSwapBuffers��BuildCommDCBA�&�CloseHandle�D�CreateFileA�Ì�FlushFileBuffers��ë�GetCommState��ì�GetCommTimeouts�QGetModuleHandleA��lGetProcAddress��hReadFile��SetCommState��SetCommTimeouts�;WriteFile�P�_strdup�4�__dllonexit�¶�_errno�� _iob��­_snprintf�Scalloc��Wcos�\exit��bfflush��kfprintf�lfputc�qfree��yfwrite��}getenv��¤malloc��ªmemcpy��Ãsin�Æsqrt��Èsscanf��Êstrchr��Ëstrcmp��Îstrcspn�Ñstrlen��Óstrncmp�Ôstrncpy�Østrstr��Ústrtok��ìvfprintf�� �glBegin� �glBitmap��+�glColor4f�,�glColor4fv��F�glDisable�I�glDrawBuffer��O�glEnable��Q�glEnd�\�glEvalMesh2�a�glFlush�j�glGetBooleanv�m�glGetError��o�glGetIntegerv�|�glGetString�¤�glLoadIdentity��«�glMap2d�¯�glMapGrid2d�µ�glMatrixMode��»�glNormal3d��¼�glNormal3dv�Ä�glOrtho�Ê�glPixelStorei�Ò�glPopAttrib�Ó�glPopClientAttrib�Ô�glPopMatrix�×�glPushAttrib��Ø�glPushClientAttrib��Ù�glPushMatrix��ß�glRasterPos2i�ó�glReadBuffer��þ�glRotated��glScaled��;glTranslated��<glTranslatef��?glVertex2f��AglVertex2i��EglVertex3d��FglVertex3dv�VglViewport��YwglCreateContext��[wglDeleteContext��^wglGetCurrentContext��_wglGetCurrentDC�cwglGetProcAddress�dwglMakeCurrent���AdjustWindowRect�� �BeginPaint���ChangeDisplaySettingsA���ChangeDisplaySettingsExA��;�ClientToScreen��Y�CreateWindowExA�…�DefWindowProcA���DestroyWindow�”�DispatchMessageA��·�EndPaint��Á�EnumDisplaySettingsA��â�GetClassInfoA�ö�GetCursorPos��÷�GetDC�ù�GetDesktopWindow�� GetKeyState�GetKeyboardState��$GetMessageA�EGetSystemMetrics��TGetWindowLongA��ZGetWindowRect�’LoadCursorA�–LoadIconA�ºMoveWindow��»MsgWaitForMultipleObjects�ÍPeekMessageA��ÑPostQuitMessage�ÛRedrawWindow��ÜRegisterClassA��éReleaseCapture��êReleaseDC�ðScreenToClient��SetCapture��SetClassLongA� SetCursor� SetCursorPos��5SetWindowLongA��8SetWindowPos��:SetWindowTextA��BShowCursor��EShowWindow��QToAscii�\TranslateMessage��cUnregisterClassA��iUpdateWindow���joyGetDevCapsA���joyGetPosEx��timeBeginPeriod�‘�timeEndPeriod�”�timeGetTime����à��à��à��à�ADVAPI32.DLL����à�à�à�à�à�GDI32.dll���(à�(à�(à�(à�(à�(à�(à�(à�(à�(à�(à�(à�KERNEL32.dll����<à�msvcrt.dll��Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�Pà�msvcrt.dll��dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�dà�OPENGL32.DLL����xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�xà�USER32.dll��Œà�Œà�Œà�Œà�Œà�WINMM.DLL���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������zZK������������€����zZK����������0��€����zZK������� ��H���X������������4���V�S�_�V�E�R�S�I�O�N�_�I�N�F�O�����½ïþ����������������������������������������b����S�t�r�i�n�g�F�i�l�e�I�n�f�o���>����0�8�0�9�0�4�b�0���v�'��F�i�l�e�D�e�s�c�r�i�p�t�i�o�n�����f�r�e�e�g�l�u�t� �M�i�n�G�W� �b�u�i�l�d�,� �b�y� �M�a�r�t�i�n� �P�a�y�n�e�.�����6� ��F�i�l�e�V�e�r�s�i�o�n�����2�,� �6�,� �0�,� �0�����:� ��I�n�t�e�r�n�a�l�N�a�m�e���f�r�e�e�g�l�u�t�.�d�l�l�����Z���L�e�g�a�l�C�o�p�y�r�i�g�h�t���©�1�9�9�9� 2�0�1�0� �P�a�w�e�l� �W�.� �O�l�s�z�t�a�����B� ��O�r�i�g�i�n�a�l�F�i�l�e�n�a�m�e���f�r�e�e�g�l�u�t�.�d�l�l�����`� ��P�r�o�d�u�c�t�N�a�m�e�����F�r�e�e�g�l�u�t� �O�p�e�n�G�L� �U�t�i�l�i�t�y� �T�o�o�l�k�i�t���:� ��P�r�o�d�u�c�t�V�e�r�s�i�o�n���2�,� �6�,� �0�,� �0�����D�����V�a�r�F�i�l�e�I�n�f�o�����$����T�r�a�n�s�l�a�t�i�o�n����� °�����������������������������������������������������������������������������������������������������������������������������������������������������������������������D�� 00=0E0i0s0ˆ00ö0'141‡1’1­1Ã1ì1ô122<2D2f2m2Œ2”2¶2½2Ü2ä23 3,343T3[3|3„3¦3­3È3Ó3Ú3ç3ø34 44(404F4M4l4t4–44¼4Ç4Î4ì4ô455<5D5d5k5Œ5”5´5»5Ü5ä56 6,646T6[6|6„6¤6«6Ì6Ô6ô6û67$7;7L7S7]7ˆ7“7š7§7¼7Ä7ä7ë7 8848;8\8d8„8‹8¬8¸8Ô8Û8é8 99;9B9\9i9‹9’9¬9¹9Û9â9ü9 :&:E:L:h:y:Ä:Ë:é:ò:;;F;[;b;m;Š;¨;°;ö;ý;<<<$<J<c<¸?À?ä?ë?õ?� ����000(000D0K0U0a0h0r0ˆ0ª0±0È0Þ0ð01-161=1R1[1l11œ1¢1´1»1Ô1Û1ò1 2-2M2˜2°2É2Ð2ê2ñ2 33,333M3T3n3u33–3°3·3Ñ3Ø3ò3ù34444;4U4\4v4}4•4¤4´4Ã4Ó4â4ò455 505?5O5^5n5}55œ5¬5»5Ë5Ú5ê5ù5 66(676G6V6f6u6…6”6¤6³6Ã6Ò6â6ñ677 7/7?7N7^7m7}7Œ7œ7«7»7Ê7Ú7é7ù788'878F8V8e8u8„8”8£8³8Â8Ò8á8ñ8�999/9>9N9]9m9|9Œ9›9«9º9Ê9Ù9é9ø9::':6:F:U:e:t:„:“:£:²:Â:Ñ:á:ð:�;;;.;>;M;];l;|;‹;›;ª;º;É;Ù;è;ø;<<&<6<E<U<d<t<ƒ<“<¢<²<Á<Ñ<à<ð<ÿ<==.===M=\=l={=‹=š=ª=¹=É=Ø=è=÷=>>&>5>E>T>d>s>ƒ>’>¢>±>Á>Ð>à>ï>ÿ>??-?=?L?\?k?{?Š?š?©?¹?È?Ø?ç?÷?�0��(��00%050D0T0c0s0‚0’0¡0±0À0Ð0ß0ï0þ011-1<1L1[1k1z1Š1™1©1¸1È1×1ç1ö122%242D2S2c2r2‚2‘2¡2°2À2Ï2ß2î2þ2 33,3<3K3[3j3z3‰3™3¨3¸3Ç3×3æ3ö344$444C4S4b4r44‘4 4°4¿4Ï4Þ4î4ý4 55(575C5R5^5m5y5ˆ5¤5©5²5ë5õ56(6F6M6~67T7[7|7 7Õ7Ü7ü7888$8.888G8h8Š8‘8®8(9/9L9”9›9¾9ô:û:;-<4<^<>>=>\?c?­?¿?Ï?ê?���@��Ä���04090A0H0Q0X0|0‡00—0¼0Ï0è0ô011!111V1c1x1€1’1¥1·1¾1Ø1ä12%2I2[2d2i2ƒ2”2›2¥2µ2Ï2ë253]3ˆ3¬3Ï3ë3 4!444<4D4L4d4k4Ž4¬4Ë4á4î475>5l5·5Ò5á5ð5N6}6Ä6ß6î6ý6Z7t7Š7—7×7Þ7ø78 8!8‡8X;c;j;;ç;¸>Ã>Ê>���P�����ˆ:“:š:���`��h���X6_6o6v6˜9Ÿ9¯9¶9J=]=}=‡=˜=¢=³=½=Î=Û=>>*>6>\>f>w>>’>œ>­>º>è>ï> ?)?/?8?B?L?[?l?s?‡?Ž?—?«?²?½?þ?�p��¼���40;0[0j0p0€0Š0”0£0´0»0Ï0Ö0ß0ó0ú01N1„1‹1¨1³1º1Ñ1à1ì1�222)282D2X2g2v222œ2°2¿2Î2Ù2è2ô233&3H3S3Z3q3€3Œ3 3¯3¾3É3Ø3ä3ø344!404<4P4_4n4y4ˆ4”4¨4·4Æ45¬5Ð5 6¥7¬7ä7#:*:¡:l<s<¡<í?ô?���€��`���.0¼0È073>3¡3 4,4G6Q667õ8ü8É9á<è<=’=ž=©=Í=Ò=Þ=é=>> >8>H>‘>´>Ñ>ó>þ> ?1?™?¥?·?Æ?×?ê?ô?�����T��00$010>0E0L0V0`0j0t0{0…00–0 0ª0±0»0Å0Ì0Ó0Ú0á0ë0õ0ÿ0 111'121>1H1N1X1b1n1x1‚1–1¯1Ç1ã12[2`2{2–2 2÷23©3º3Î3ç3ö3 44G4S4{44»4Ó4ô4ê5ô5 66/6C6W6r6‘6˜6 6é6 777+7?7y7ƒ7 7¥7µ7À7Æ7Ì7Ñ7â7è7î7ó788(8\8i8º8*9Y9b9©9³9 :+:ï:U;m;ˆ;–;¼;ì;ü;.<M<[<³<Ú<%=G=j=p=y=™=±=»=Ç=Í=Û=â=>%>+>9>A>H>V>e>ˆ>“>š>¯>È>Ó>Ú>ì>???/?H?S?Z?l?ˆ?“?š?©?È?Ó?Ú?é?� ��œ���000)0H0S0Z0i0˜0£0ª0¹0è0ó0ú0 181C1J1Y1˜1£1ª1¹1ø12 22ˆ2ž3Å4Ô4ù4Þ5 6w6‰6’6¤6í6ù67G7[7Ö7Þ7M8‹8›8¦8É8²9;š;í;ö; <=Q=€=Ê=ä=õ=>J>d>u>…>¶>ë>Ð?Þ?÷?ý?�°��H���u0|0'1.1Ð1°2Ñ23B4d4 4 6M6\79l:—:„;v<»<l>‰>‘>˜>±>ˆ?“?š?¥?Í?ê?���À��Ø���q0€0—0§0»0Ý0ø01 131:1k1q1‰1®1¿1á1ë1�2 22"2,2O2g2x2ª2ø2ÿ2U3¨3³3º3Ä3è3ó3ú344$4.4V4]4|4„4Ž4´4»4Ø4á4ô4û45/5;5B5X5„5‹5¨5³5º5ê5 6V6–6½6Æ647;7^7w7ê7ñ7 88„8‹8ª8Õ8þ8$9+9I9f9‰9©9°9‹:Ý:;!;N<V<]<Ó<‘>™>¹>ë>ö>?Ž?Ä?�Ð��È��� 13845w5‹5®677"7)7H7S7Z7x7ƒ7Š7¨7³7º7Ü7ù78"868=8X8`8y8€8Š8–88ª8È8Ð8ô8û89*989?9J9b9p9w9ƒ999©9·9¾9ì9÷9(:/:(;3;:;l;‚;µ;¼;Ø;à;ô;û; <(<~<·<Ä<Ë<â<þ<=%=1=G=R=b=v=‚=œ=µ=Ó=Ù=ô=û=!>1>C>¡>�?™?���à��ä���00w0±0Ú0à0ƒ11Ã1J2R2¡2«2µ2¿2Ü233r3‘3›3¦3²3Ú34 4(424°4»4Ç4å4ò45u66‰6“66§6±6»6Å6Ï6Ù6ã6ñ6I8„8Œ8“8ž8©8°8ä819i9”9œ9£9Ê9ð9?:Ê:Ú:; ;;?;G;N;_;…;¡;ç;í;õ;]<†<Ž<–<¯<Æ<Ï<Ù<á<è<=%=5=a=k=p=z=œ=­=¶=É=ø= >>O>W>Â>á>œ?°?Ó?ê?���ð�� ��O0`0g0„0¡0¯0Æ0Ì0à0s11©102O22½2-393é3è6ù6�787I7P7Ò7Ù78 898@8J8V8]8g8ˆ88¤8«8µ8Á8È8Ò8é8ö89999¦9­9Ä9Ë9Ö9é9ò9::&:2:9:D:X:`::¤:«:º:Á:Ø:à:,;3;=;I;P;Z;h;p;¼;Ã;Í;Ù;à;ê;ø;<1<n<ˆ<<¤<«<È<Ð<ê<ñ<$=+=5=H=P=j=q=¤=«=µ=È=Ð=ð=> >>!>(>2>H>P>l>„>‹>•>¡>¨>²>È>Ð>ì>? ??!?(?2?I?a?o?„?‹?¨?�������/0W0^0È0Ó0Ú0ä0111!1,1Z1|1ƒ1ø1A2\2d2”2›2­2ê2õ2)31383K3™3#4>4ƒ4:5Û5ã5ê5&6F66Þ6»7,8Z8d8u88Î8Ö829Œ9š9ã9ÿ9;Ø;<<)<N<z<«<=%=3=R=k=r={=„==¥=Á=Î=ò=ÿ=>>1>>>R>Z>b>j>r>z>‚>Š>’>š>¢>ª>²>º>Â>Ê>Ò>Ú>â>ê>ò>ú>? ???"?*?2?:?B?J?R?Z?b?j?r?z?‚?Š?’?š?¢?ª?²?º?Â?Ê?Ò?Ú?â?ê?ò?ú?����Ø���000!020G0T0`0z0Š00¼0Ø0ä01 111"1*121:1B1J1R1Z1b1j1r1z1‚1Š1’1š1¢1ª1²1º1Â1Ê1Ò1Ú1â1ê1ò1ú12 222"2*222:2B2J2R2Z2b2j2r2z2‚2Š2’2š2¢2ª2²2º2Â2Ê2Ò2Ú2â2ê2ò2ú23 333"3*323:3B3J3R3Z3b3j3r3z3‚3Š3’3š3¢3ª3²3º3Î3ä3� �Ø���000 00000 0$0(0,0004080<0@0D0H0L0P0T0X0\0`0d0h0l0p0t0x0|0€0„0ˆ0Œ00”0˜0œ0 0¤0¨0¬0°0´0¸0¼0À0Ä0È0Ì0Ð0Ô0Ø0Ü0à0ä0è0ì0ð0ô0ø0ü0�111 11111 1$1(1,1014181<1@1D1H1L1P1T1X1\1`1d1h1l1p1t1x1|1€1„1ˆ1Œ11”1˜1œ1 1¤1¨1¬1°1´1¸1¼1À1Ä1È1Ì1Ð1Ô1Ø1Ü1à1ä1è1ì1ð1ô1ø1ü1�222 22222 2$2(2,2024282<2@2D2H2L2P2T2X2\2`2d2h2l2p2t2x2|2€2„2ˆ2Œ22”2˜2œ2 2¤2¨2¬2°2´2¸2¼2À2Ä2È2Ì2Ð2Ô2Ø2Ü2à2ä2è2ì2ð2ô2ø2ü2�333 33333 3$3(3,3034383<3@3D3H3L3P3T3X3\3`3d3h3l3p3t3x3|3€3„3ˆ3Œ33”3˜3œ3 3¤3¨3¬3°3´3¸3¼3À3Ä3È3Ì3Ð3Ô3Ø3Ü3à3ä3è3ì3ð3ô3ø3ü3 4$4(4,4044484<4@4D4H4L4P4T4X4\4`4d4h4l4p4t4x4|4€4„4ˆ4Œ44”4˜4œ4 4¤4¨4¬4°4´4¸4¼4À4Ä4È4Ì4Ð4Ô4Ø4Ü4à4ä4è4ì4ð4ô4ø4ü4�555 55555 5$5(5,5054585<5@5D5H5L5P5T5X5\5`5d5h5l5p5t5x5|5€5„5ˆ5Œ55”5˜5œ5 5¤5¨5¬5°5´5¸5¼5À5Ä5È5Ì5Ð5Ô5Ø5Ü5à5ä5è5ì5ð5ô5ø5ü5�666 66666 6$6(6,6064686<6@6D6H6L6P6T6X6\6`6d6h6l6p6t6x6|6€6„6ˆ6Œ66”6˜6œ6 6¤6¨6¬6°6´6¸6¼6À6Ä6È6Ì6Ð6Ô6Ø6Ü6à6ä6è6ì6ð6ô6ø6ü6�777 77777 7$7(7,7074787<7@7D7H7L7P7T7X7\7`7d7h7l7p7t7x7|7€7„7ˆ7Œ77”7˜7œ7 7¤7¨7¬7°7´7¸7¼7À7Ä7È7Ì7Ð7Ô7Ø7Ü7à7ä7è7ì7ð7ô7ø7ü7�888 88888@8D8H8L8P8T8X8\8`8d8h8l8p8t8x8|8€8„8ˆ8Œ88”8˜8œ8 8¤8¨8¬8°8´8¸8¼8À8Ä8È8Ì8Ð8Ô8Ø8Ü8à8ä8è8ì8ð8ô8ø8ü8�999 99999 9$9(9,9094989<9@9D9H9L9P9T9X9\9`9d9h9l9p9t9x9|9€9„9ˆ9Œ99”9˜9œ9 9¤9¨9¬9°9´9¸9¼9À9Ä9È9Ì9Ð9Ô9Ø9Ü9à9ä9è9ì9ð9ô9ø9ü9�::: ::::: :$:(:,:0:4:8:<:@:D:H:L:P:T:X:\:`:d:h:l:p:t:x:|:€:„:ˆ:Œ::”:˜:œ: :¤:¨:¬:°:´:¸:¼:À:Ä:È:Ì:Ð:Ô:Ø:Ü:à:ä:è:ì:ð:ô:ø:ü:�;;; ;;;;; ;$;(;,;0;4;8;<;@;D;H;L;P;T;X;\;`;d;h;l;p;t;x;|;€;„;ˆ;Œ;;”;˜;œ; ;¤;¨;¬;°;´;¸;¼;À;Ä;È;Ì;Ð;Ô;Ø;Ü;à;ä;è;ì;ð;ô;ø;ü;�<<< <<<<< <$<(<,<0<4<8<<<`<d<h<l<p<t<x<|<€<„<ˆ<Œ<<”<˜<œ< <¤<¨<¬<°<´<¸<¼<À<Ä<È<Ì<Ð<Ô<Ø<Ü<à<ä<è<ì<ð<ô<ø<ü<�=== ===== =$=(=,=0=4=8=<=@=D=H=L=P=T=X=\=`=d=h=l=p=t=x=|=€=„=ˆ=Œ==”=˜=œ= =¤=¨=¬=°=´=¸=¼=À=Ä=È=Ì=Ð=Ô=Ø=Ü=à=ä=è=ì=ð=ô=ø=ü=�>>> >>>>> >$>(>,>0>4>8><>@>D>H>L>P>T>X>\>`>d>h>l>p>t>x>|>€>„>ˆ>Œ>>”>˜>œ> >¤>¨>¬>°>´>¸>¼>À>Ä>È>Ì>Ð>Ô>Ø>Ü>à>ä>è>ì>ð>ô>ø>ü>�??? ????? ?$?(?,?0?4?8?<?@?D?H?L?P?T?X?\?`?d?h?l?p?t?x?|?€?„?ˆ?Œ??”?˜?œ? ?¤?¨?¬?°?´?¸?¼?À?Ä?È?Ì?Ð?Ô?Ø?Ü?à?ä?è?ì?ð?ô?ø?ü?�0�8���000 00000 0$0(0,0004080<0@0D0H0L0P0T0X0\0€0„0ˆ0Œ00”0˜0œ0 0¤0¨0¬0°0´0¸0¼0À0Ä0È0Ì0Ð0Ô0Ø0Ü0à0ä0è0ì0ð0ô0ø0ü0�111 11111 1$1(1,1014181<1@1D1H1L1P1T1X1\1`1d1h1l1p1t1x1|1€1„1ˆ1Œ11”1˜1œ1 1¤1¨1¬1°1´1¸1¼1À1Ä1È1Ì1Ð1Ô1Ø1Ü1à1ä1è1ì1ð1ô1ø1ü1�222 22222 2$2(2,2024282<2@2D2H2L2P2T2X2\2`2d2h2l2p2t2x2|2€2„2ˆ2Œ22”2˜2œ2 2¤2¨2¬2°2´2¸2¼2À2Ä2È2Ì2Ð2Ô2Ø2Ü2à2ä2è2ì2ð2ô2ø2ü2�333 33333 3$3(3,3034383<3@3D3H3L3P3T3X3\3`3d3h3l3p3t3x3|3€3„3ˆ3Œ33”3˜3œ3 3¤3¨3¬3°3´3¸3¼3À3Ä3È3Ì3Ð3Ô3Ø3Ü3à3ä3è3ì3ð3ô3ø3ü3�444 44444 4$4(4,4044484<4@4D4H4L4P4T4X4\4`4d4h4l4p4t4x4|4 4¤4¨4¬4°4´4¸4¼4À4Ä4È4Ì4Ð4Ô4Ø4Ü4à4ä4è4ì4ð4ô4ø4ü4�555 55555 5$5(5,5054585<5@5D5H5L5P5T5X5\5`5d5h5l5p5t5x5|5€5„5ˆ5Œ55”5˜5œ5 5¤5¨5¬5°5´5¸5¼5À5Ä5È5Ì5Ð5Ô5Ø5Ü5à5ä5è5ì5ð5ô5ø5ü5�666 66666 6$6(6,6064686<6@6D6H6L6P6T6X6\6`6d6h6l6p6t6x6|6€6„6ˆ6Œ66”6˜6œ6 6¤6¨6¬6°6´6¸6¼6À6Ä6È6Ì6Ð6Ô6Ø6Ü6à6ä6è6ì6ð6ô6ø6ü6�777 77777 7$7(7,7074787<7@7D7H7L7P7T7X7\7`7d7h7l7p7t7x7|7€7„7ˆ7Œ77”7˜7œ7 7¤7¨7¬7°7´7¸7¼7À7Ä7È7Ì7Ð7Ô7Ø7Ü7à7ä7è7ì7ð7ô7ø7ü7�888 88888 8$8(8,8084888<8@8D8H8L8P8T8X8\8`8d8h8l8p8t8x8|8€8„8ˆ8Œ88”8˜8œ8À8Ä8È8Ì8Ð8Ô8Ø8Ü8à8ä8è8ì8ð8ô8ø8ü8�999 99999 9$9(9,9094989<9@9D9H9L9P9T9X9\9`9d9h9l9p9t9x9|9€9„9ˆ9Œ99”9˜9œ9 9¤9¨9¬9°9´9¸9¼9À9Ä9È9Ì9Ð9Ô9Ø9Ü9à9ä9è9ì9ð9ô9ø9ü9�::: ::::: :$:(:,:0:4:8:<:@:D:H:L:P:T:X:\:`:d:h:l:p:t:x:|:€:„:ˆ:Œ::”:˜:œ: :¤:¨:¬:°:´:¸:¼:À:Ä:È:Ì:Ð:Ô:Ø:Ü:à:ä:è:ì:ð:ô:ø:ü:�;;; ;;;;; ;$;(;,;0;4;8;<;@;D;H;L;P;T;X;\;`;d;h;l;p;t;x;|;€;„;ˆ;Œ;;”;˜;œ; ;¤;¨;¬;°;´;¸;¼;À;Ä;È;Ì;Ð;Ô;Ø;Ü;à;ä;è;ì;ð;ô;ø;ü;�<<< <<<<< <$<(<,<0<4<8<<<@<D<H<L<P<T<X<\<`<d<h<l<p<t<x<|<€<„<ˆ<Œ<<”<˜<œ< <¤<¨<¬<°<´<¸<¼<�@�Œ��`2d2h2l2p2t2x2|2€2„2ˆ2Œ22”2˜2œ2 2¤2¨2¬2°2´2¸2¼2À2Ä2È2Ì2Ð2Ô2Ø2Ü2à2ä2è2ì2ð2ô2ø2ü2�333 33333 3$3(3,3034383<3@3D3H3L3P3T3X3\3`3d3h3l3p3t3x3|3€3„3ˆ3Œ33”3˜3œ3 3¤3¨3¬3°3´3¸3¼3À3Ä3È3Ì3Ð3Ô3Ø3Ü3`4d4h4l4p4t4x4|4€4„4ˆ4Œ44”4˜4œ4 4¤4¨4¬4°4´4¸4¼4À4Ä4È4Ì4Ð4Ô4Ø4Ü4à4ä4è4ì4ð4ô4ø4ü4�555 55555 5$5(5,5054585<5@5D5H5L5P5T5X5\5`5d5h5l5p5t5x5|5€5„5ˆ5Œ55”5˜5œ5 5¤5¨5¬5°5´5¸5¼5À5Ä5È5Ì5Ð5Ô5Ø5Ü5 6���P�Ø���44 4$4(4,4044484<4@4D4H4L4P4T4X4\4`4d4h4l4p4t4x4|4€4„4ˆ4Œ44”4˜4œ4 4¤4¨4¬4°4´4¸4¼4À4Ä4È4Ì4Ð4Ô4Ø4Ü4à4ä4è4ì4ð4ô4ø4ü4�555 55555 5$5(5,5054585<5@5D5H5L5P5T5X5\5`5d5h5l5p5t5x5|5€5„5ˆ5Œ55”5˜5œ5 5¤5¨5¬5°5���`�$���|3ˆ3Ð3Ü3(444€4Œ4Ø4ä4,585€5Œ5� �$���ˆ>Œ>>”>˜>œ> >???? ?$?(?�0���€4„4ˆ4Œ44”4˜4œ4 4¤4¨4¬4°4´4¸4¼4À4Ä4È4Ì4Ð4Ô4Ø4Ü4à4ä4è4ì4ð4ô4ø4ü4�555 555€8„8ˆ8Œ88”8˜8œ8 8¤8¨8¬8°8´8¸8¼8À8Ä8È8Ì8Ð8Ô8Ø8Ü8à8ä8è8ì8ð8ô8ø8ü8�999 99Ü:à:ä:è:ì:ð:ô:ø:ü:ø<ü<�=== ===== =$=(=,=0=4=8=<=@=D=H=L=P=T=X=\=`=d=h=l=p=t=x=|=€=„=ˆ=Œ==”=˜=œ= =¤=¨=¬=°=´=¸=¼=À=Ä=È=Ì=Ð=Ô=Ø=Ü=à=ä=è=ì=ð=ô=ø=ü=�>>> >>>>> >$>(>,>0>4>8><>@>D>H>L>P>T>X>\>`>d>h>l>p>t>x>|>€>„>ˆ>Œ>>”>˜>œ> >¤>¨>¬>°>´>¸>¼>À>Ä>È>Ì>Ð>Ô>Ø>Ü>à>ä>è>ì>ð>ô>ø>ü>�??? ????? ?$?(?,?0?4?8?<?@?D?H?L?P?T?X?\?`?d?h?l?p?t?x?|?€?„?ˆ?Œ??”?˜?œ? ?¤?¨?¬?°?´?¸?¼?À?Ä?È?Ì?�@�8��l5p5t5x5|5€5„5ˆ5Œ55”5˜5œ5 5¤5¨5¬5ì5ø5666(646@6L6X6d6p6|6ˆ6”6 6¬6¸6Ä6Ð6Ü6è6ô6�7 77$707<7H7T7`7l7x7„77œ7¨7´7À7Ì7Ø7ä7ð7ü788 8,888D8P8\8h8t8€8Œ8˜8¤8°8¼8È8Ô8à8ì8ø8999(949@9L9X9d9p9|9ˆ9”9 9¬9¸9Ä9Ð9Ü9è9ô9�: ::$:0:<:H:T:`:l:x:ˆ::˜: :Ä:Ì:Ô:Ü:ä:ì:ô:ü:; ;;;$;,;4;<;D;L;T;\;d;l;t;|;„;Œ;”;œ;¤;¬;´;¼;Ä;Ì;Ô;Ü;ä;ì;ô;ü;< <<<$<,<4<<<D<L<T<\<d<l<t<|<„<Œ<”<œ<¤<¬<´<¼<Ä<Ì<Ô<Ü<ä<ì<ô<ü<= ==$=,=4=<=D=L=T=\=d=l=t=|=„=Œ=”=œ=¤=¬=´=¼=Ä=ä=ì=ô=ü=> >>>$>,>4>D>L>T>\>d>„>Œ>”>œ>¤>¬>´>¼>Ä>Ì>Ô>Ü>ä>ì>ô>ü>? ???$?,?4?<?D?L?T?\?d?l?t?|?„?Œ?”?œ?¤?¬?´?¼?Ä?Ì?Ô?Ü?ä?ì?ô?ü?���P�8���0 0$0,040<0D0L0T0\0d0l0t0|0„0Œ0”0œ0¤0¬0´0¼0Ä0Ì0�p� ��(646@6L6X6d6p6|6ˆ6”6 6¬6¸6Ä6Ð6Ü6è6ô6�7 77$707<7H7T7`7l7x7„77œ7¨7´7À7Ì7Ø7ä7ð7ü788 8,888D8P8\8h8t8€8Œ8˜8¤8°8¼8È8Ô8à8ì8ø8999(949@9L9X9d9p9|9ˆ9”9 9¬9¸9Ä9Ð9Ü9è9ô9�: ::$:0:<:H:T:`:l:x:„::œ:¨:´:Ä:Ì:Ô:Ü:ä:ì:ô:ü:; ;;;$;,;4;<;D;L;T;\;d;l;t;|;„;Œ;”;œ;¤;¬;´;¼;Ä;Ì;Ô;Ü;ä;ì;ô;ü;< <<<$<,<4<<<D<L<T<\<d<l<t<|<„<Œ<”<œ<¤<¬<´<¼<Ä<Ì<Ô<Ü<ä<ì<ô<ü<= ===$=,=4=D=L=T=\=d=l=t=|=„=Œ=”=œ=¤=¬=´=¼=Ä=Ì=Ô=Ü=ä=> >>>$>,>4><>D>L>T>d>l>t>|>„>¤>¬>´>¼>Ä>Ì>Ô>Ü>ä>ì>ô>ü>? ???$?,?4?<?D?L?T?\?d?l?t?|?„?Œ?”?œ?¤?¬?´?¼?Ä?Ì?Ô?Ü?ä?ì?ô?ü?�€�@���0 000$0,0D0L0T0\0d0l0t0|0„0Œ0”0œ0¤0¬0´0¼0Ä0Ì0Ô0Ü0ä0ì0��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/include/�����������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�017352� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/include/GL/��������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�017654� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/include/GL/freeglut.h����������������������������������������0000644�0000764�0000764�00000001251�11533026402�021641� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef __FREEGLUT_H__ #define __FREEGLUT_H__ /* * freeglut.h * * The freeglut library include file * * 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 * PAWEL W. OLSZTA 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. */ #include "freeglut_std.h" #include "freeglut_ext.h" /*** END OF FILE ***/ #endif /* __FREEGLUT_H__ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/include/GL/glut.h��������������������������������������������0000644�0000764�0000764�00000001177�11533026402�021006� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef __GLUT_H__ #define __GLUT_H__ /* * glut.h * * The freeglut library include file * * 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 * PAWEL W. OLSZTA 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. */ #include "freeglut_std.h" /*** END OF FILE ***/ #endif /* __GLUT_H__ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/include/GL/freeglut_ext.h������������������������������������0000644�0000764�0000764�00000017226�11533026402�022532� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef __FREEGLUT_EXT_H__ #define __FREEGLUT_EXT_H__ /* * freeglut_ext.h * * The non-GLUT-compatible extensions to the freeglut library include file * * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. * Written by Pawel W. Olszta, <olszta@sourceforge.net> * Creation date: Thu Dec 2 1999 * * 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 * PAWEL W. OLSZTA 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. */ #ifdef __cplusplus extern "C" { #endif /* * Additional GLUT Key definitions for the Special key function */ #define GLUT_KEY_NUM_LOCK 0x006D #define GLUT_KEY_BEGIN 0x006E #define GLUT_KEY_DELETE 0x006F /* * GLUT API Extension macro definitions -- behaviour when the user clicks on an "x" to close a window */ #define GLUT_ACTION_EXIT 0 #define GLUT_ACTION_GLUTMAINLOOP_RETURNS 1 #define GLUT_ACTION_CONTINUE_EXECUTION 2 /* * Create a new rendering context when the user opens a new window? */ #define GLUT_CREATE_NEW_CONTEXT 0 #define GLUT_USE_CURRENT_CONTEXT 1 /* * Direct/Indirect rendering context options (has meaning only in Unix/X11) */ #define GLUT_FORCE_INDIRECT_CONTEXT 0 #define GLUT_ALLOW_DIRECT_CONTEXT 1 #define GLUT_TRY_DIRECT_CONTEXT 2 #define GLUT_FORCE_DIRECT_CONTEXT 3 /* * GLUT API Extension macro definitions -- the glutGet parameters */ #define GLUT_INIT_STATE 0x007C #define GLUT_ACTION_ON_WINDOW_CLOSE 0x01F9 #define GLUT_WINDOW_BORDER_WIDTH 0x01FA #define GLUT_WINDOW_HEADER_HEIGHT 0x01FB #define GLUT_VERSION 0x01FC #define GLUT_RENDERING_CONTEXT 0x01FD #define GLUT_DIRECT_RENDERING 0x01FE #define GLUT_FULL_SCREEN 0x01FF /* * New tokens for glutInitDisplayMode. * Only one GLUT_AUXn bit may be used at a time. * Value 0x0400 is defined in OpenGLUT. */ #define GLUT_AUX 0x1000 #define GLUT_AUX1 0x1000 #define GLUT_AUX2 0x2000 #define GLUT_AUX3 0x4000 #define GLUT_AUX4 0x8000 /* * Context-related flags, see freeglut_state.c */ #define GLUT_INIT_MAJOR_VERSION 0x0200 #define GLUT_INIT_MINOR_VERSION 0x0201 #define GLUT_INIT_FLAGS 0x0202 #define GLUT_INIT_PROFILE 0x0203 /* * Flags for glutInitContextFlags, see freeglut_init.c */ #define GLUT_DEBUG 0x0001 #define GLUT_FORWARD_COMPATIBLE 0x0002 /* * Flags for glutInitContextProfile, see freeglut_init.c */ #define GLUT_CORE_PROFILE 0x0001 #define GLUT_COMPATIBILITY_PROFILE 0x0002 /* * Process loop function, see freeglut_main.c */ FGAPI void FGAPIENTRY glutMainLoopEvent( void ); FGAPI void FGAPIENTRY glutLeaveMainLoop( void ); FGAPI void FGAPIENTRY glutExit ( void ); /* * Window management functions, see freeglut_window.c */ FGAPI void FGAPIENTRY glutFullScreenToggle( void ); /* * Window-specific callback functions, see freeglut_callbacks.c */ FGAPI void FGAPIENTRY glutMouseWheelFunc( void (* callback)( int, int, int, int ) ); FGAPI void FGAPIENTRY glutCloseFunc( void (* callback)( void ) ); FGAPI void FGAPIENTRY glutWMCloseFunc( void (* callback)( void ) ); /* A. Donev: Also a destruction callback for menus */ FGAPI void FGAPIENTRY glutMenuDestroyFunc( void (* callback)( void ) ); /* * State setting and retrieval functions, see freeglut_state.c */ FGAPI void FGAPIENTRY glutSetOption ( GLenum option_flag, int value ); FGAPI int * FGAPIENTRY glutGetModeValues(GLenum mode, int * size); /* A.Donev: User-data manipulation */ FGAPI void* FGAPIENTRY glutGetWindowData( void ); FGAPI void FGAPIENTRY glutSetWindowData(void* data); FGAPI void* FGAPIENTRY glutGetMenuData( void ); FGAPI void FGAPIENTRY glutSetMenuData(void* data); /* * Font stuff, see freeglut_font.c */ FGAPI int FGAPIENTRY glutBitmapHeight( void* font ); FGAPI GLfloat FGAPIENTRY glutStrokeHeight( void* font ); FGAPI void FGAPIENTRY glutBitmapString( void* font, const unsigned char *string ); FGAPI void FGAPIENTRY glutStrokeString( void* font, const unsigned char *string ); /* * Geometry functions, see freeglut_geometry.c */ FGAPI void FGAPIENTRY glutWireRhombicDodecahedron( void ); FGAPI void FGAPIENTRY glutSolidRhombicDodecahedron( void ); FGAPI void FGAPIENTRY glutWireSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale ); FGAPI void FGAPIENTRY glutSolidSierpinskiSponge ( int num_levels, GLdouble offset[3], GLdouble scale ); FGAPI void FGAPIENTRY glutWireCylinder( GLdouble radius, GLdouble height, GLint slices, GLint stacks); FGAPI void FGAPIENTRY glutSolidCylinder( GLdouble radius, GLdouble height, GLint slices, GLint stacks); /* * Extension functions, see freeglut_ext.c */ typedef void (*GLUTproc)(); FGAPI GLUTproc FGAPIENTRY glutGetProcAddress( const char *procName ); /* * Joystick functions, see freeglut_joystick.c */ /* USE OF THESE FUNCTIONS IS DEPRECATED !!!!! */ /* If you have a serious need for these functions in your application, please either * contact the "freeglut" developer community at freeglut-developer@lists.sourceforge.net, * switch to the OpenGLUT library, or else port your joystick functionality over to PLIB's * "js" library. */ int glutJoystickGetNumAxes( int ident ); int glutJoystickGetNumButtons( int ident ); int glutJoystickNotWorking( int ident ); float glutJoystickGetDeadBand( int ident, int axis ); void glutJoystickSetDeadBand( int ident, int axis, float db ); float glutJoystickGetSaturation( int ident, int axis ); void glutJoystickSetSaturation( int ident, int axis, float st ); void glutJoystickSetMinRange( int ident, float *axes ); void glutJoystickSetMaxRange( int ident, float *axes ); void glutJoystickSetCenter( int ident, float *axes ); void glutJoystickGetMinRange( int ident, float *axes ); void glutJoystickGetMaxRange( int ident, float *axes ); void glutJoystickGetCenter( int ident, float *axes ); /* * Initialization functions, see freeglut_init.c */ FGAPI void FGAPIENTRY glutInitContextVersion( int majorVersion, int minorVersion ); FGAPI void FGAPIENTRY glutInitContextFlags( int flags ); FGAPI void FGAPIENTRY glutInitContextProfile( int profile ); /* * GLUT API macro definitions -- the display mode definitions */ #define GLUT_CAPTIONLESS 0x0400 #define GLUT_BORDERLESS 0x0800 #define GLUT_SRGB 0x1000 #ifdef __cplusplus } #endif /*** END OF FILE ***/ #endif /* __FREEGLUT_EXT_H__ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/win32/freeglut-2.6.0-3/include/GL/freeglut_std.h������������������������������������0000644�0000764�0000764�00000063050�11533026402�022520� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#ifndef __FREEGLUT_STD_H__ #define __FREEGLUT_STD_H__ /* * freeglut_std.h * * The GLUT-compatible part of the freeglut library include file * * Copyright (c) 1999-2000 Pawel W. Olszta. All Rights Reserved. * Written by Pawel W. Olszta, <olszta@sourceforge.net> * Creation date: Thu Dec 2 1999 * * 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 * PAWEL W. OLSZTA 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. */ #ifdef __cplusplus extern "C" { #endif /* * Under windows, we have to differentiate between static and dynamic libraries */ #ifdef _WIN32 /* #pragma may not be supported by some compilers. * Discussion by FreeGLUT developers suggests that * Visual C++ specific code involving pragmas may * need to move to a separate header. 24th Dec 2003 */ /* Define FREEGLUT_LIB_PRAGMAS to 1 to include library * pragmas or to 1 to exclude library pragmas. * The default behavior depends on the compiler/platform. */ # ifndef FREEGLUT_LIB_PRAGMAS # if ( defined(_MSC_VER) || defined(__WATCOMC__) ) && !defined(_WIN32_WCE) # define FREEGLUT_LIB_PRAGMAS 1 # else # define FREEGLUT_LIB_PRAGMAS 0 # endif # endif # ifndef WIN32_LEAN_AND_MEAN # define WIN32_LEAN_AND_MEAN 1 # endif # define NOMINMAX # include <windows.h> /* Windows static library */ # ifdef FREEGLUT_STATIC # define FGAPI # define FGAPIENTRY /* Link with Win32 static freeglut lib */ # if FREEGLUT_LIB_PRAGMAS # pragma comment (lib, "freeglut_static.lib") # endif /* Windows shared library (DLL) */ # else # define FGAPIENTRY __stdcall # if defined(FREEGLUT_EXPORTS) # define FGAPI __declspec(dllexport) # else # define FGAPI __declspec(dllimport) /* Link with Win32 shared freeglut lib */ # if FREEGLUT_LIB_PRAGMAS # pragma comment (lib, "freeglut.lib") # endif # endif # endif /* Drag in other Windows libraries as required by FreeGLUT */ # if FREEGLUT_LIB_PRAGMAS # pragma comment (lib, "glu32.lib") /* link OpenGL Utility lib */ # pragma comment (lib, "opengl32.lib") /* link Microsoft OpenGL lib */ # pragma comment (lib, "gdi32.lib") /* link Windows GDI lib */ # pragma comment (lib, "winmm.lib") /* link Windows MultiMedia lib */ # pragma comment (lib, "user32.lib") /* link Windows user lib */ # endif #else /* Non-Windows definition of FGAPI and FGAPIENTRY */ # define FGAPI # define FGAPIENTRY #endif /* * The freeglut and GLUT API versions */ #define FREEGLUT 1 #define GLUT_API_VERSION 4 #define FREEGLUT_VERSION_2_0 1 #define GLUT_XLIB_IMPLEMENTATION 13 /* * Always include OpenGL and GLU headers */ #include <GL/gl.h> #include <GL/glu.h> /* * GLUT API macro definitions -- the special key codes: */ #define GLUT_KEY_F1 0x0001 #define GLUT_KEY_F2 0x0002 #define GLUT_KEY_F3 0x0003 #define GLUT_KEY_F4 0x0004 #define GLUT_KEY_F5 0x0005 #define GLUT_KEY_F6 0x0006 #define GLUT_KEY_F7 0x0007 #define GLUT_KEY_F8 0x0008 #define GLUT_KEY_F9 0x0009 #define GLUT_KEY_F10 0x000A #define GLUT_KEY_F11 0x000B #define GLUT_KEY_F12 0x000C #define GLUT_KEY_LEFT 0x0064 #define GLUT_KEY_UP 0x0065 #define GLUT_KEY_RIGHT 0x0066 #define GLUT_KEY_DOWN 0x0067 #define GLUT_KEY_PAGE_UP 0x0068 #define GLUT_KEY_PAGE_DOWN 0x0069 #define GLUT_KEY_HOME 0x006A #define GLUT_KEY_END 0x006B #define GLUT_KEY_INSERT 0x006C /* * GLUT API macro definitions -- mouse state definitions */ #define GLUT_LEFT_BUTTON 0x0000 #define GLUT_MIDDLE_BUTTON 0x0001 #define GLUT_RIGHT_BUTTON 0x0002 #define GLUT_DOWN 0x0000 #define GLUT_UP 0x0001 #define GLUT_LEFT 0x0000 #define GLUT_ENTERED 0x0001 /* * GLUT API macro definitions -- the display mode definitions */ #define GLUT_RGB 0x0000 #define GLUT_RGBA 0x0000 #define GLUT_INDEX 0x0001 #define GLUT_SINGLE 0x0000 #define GLUT_DOUBLE 0x0002 #define GLUT_ACCUM 0x0004 #define GLUT_ALPHA 0x0008 #define GLUT_DEPTH 0x0010 #define GLUT_STENCIL 0x0020 #define GLUT_MULTISAMPLE 0x0080 #define GLUT_STEREO 0x0100 #define GLUT_LUMINANCE 0x0200 /* * GLUT API macro definitions -- windows and menu related definitions */ #define GLUT_MENU_NOT_IN_USE 0x0000 #define GLUT_MENU_IN_USE 0x0001 #define GLUT_NOT_VISIBLE 0x0000 #define GLUT_VISIBLE 0x0001 #define GLUT_HIDDEN 0x0000 #define GLUT_FULLY_RETAINED 0x0001 #define GLUT_PARTIALLY_RETAINED 0x0002 #define GLUT_FULLY_COVERED 0x0003 /* * GLUT API macro definitions -- fonts definitions * * Steve Baker suggested to make it binary compatible with GLUT: */ #if defined(_MSC_VER) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__WATCOMC__) # define GLUT_STROKE_ROMAN ((void *)0x0000) # define GLUT_STROKE_MONO_ROMAN ((void *)0x0001) # define GLUT_BITMAP_9_BY_15 ((void *)0x0002) # define GLUT_BITMAP_8_BY_13 ((void *)0x0003) # define GLUT_BITMAP_TIMES_ROMAN_10 ((void *)0x0004) # define GLUT_BITMAP_TIMES_ROMAN_24 ((void *)0x0005) # define GLUT_BITMAP_HELVETICA_10 ((void *)0x0006) # define GLUT_BITMAP_HELVETICA_12 ((void *)0x0007) # define GLUT_BITMAP_HELVETICA_18 ((void *)0x0008) #else /* * I don't really know if it's a good idea... But here it goes: */ extern void* glutStrokeRoman; extern void* glutStrokeMonoRoman; extern void* glutBitmap9By15; extern void* glutBitmap8By13; extern void* glutBitmapTimesRoman10; extern void* glutBitmapTimesRoman24; extern void* glutBitmapHelvetica10; extern void* glutBitmapHelvetica12; extern void* glutBitmapHelvetica18; /* * Those pointers will be used by following definitions: */ # define GLUT_STROKE_ROMAN ((void *) &glutStrokeRoman) # define GLUT_STROKE_MONO_ROMAN ((void *) &glutStrokeMonoRoman) # define GLUT_BITMAP_9_BY_15 ((void *) &glutBitmap9By15) # define GLUT_BITMAP_8_BY_13 ((void *) &glutBitmap8By13) # define GLUT_BITMAP_TIMES_ROMAN_10 ((void *) &glutBitmapTimesRoman10) # define GLUT_BITMAP_TIMES_ROMAN_24 ((void *) &glutBitmapTimesRoman24) # define GLUT_BITMAP_HELVETICA_10 ((void *) &glutBitmapHelvetica10) # define GLUT_BITMAP_HELVETICA_12 ((void *) &glutBitmapHelvetica12) # define GLUT_BITMAP_HELVETICA_18 ((void *) &glutBitmapHelvetica18) #endif /* * GLUT API macro definitions -- the glutGet parameters */ #define GLUT_WINDOW_X 0x0064 #define GLUT_WINDOW_Y 0x0065 #define GLUT_WINDOW_WIDTH 0x0066 #define GLUT_WINDOW_HEIGHT 0x0067 #define GLUT_WINDOW_BUFFER_SIZE 0x0068 #define GLUT_WINDOW_STENCIL_SIZE 0x0069 #define GLUT_WINDOW_DEPTH_SIZE 0x006A #define GLUT_WINDOW_RED_SIZE 0x006B #define GLUT_WINDOW_GREEN_SIZE 0x006C #define GLUT_WINDOW_BLUE_SIZE 0x006D #define GLUT_WINDOW_ALPHA_SIZE 0x006E #define GLUT_WINDOW_ACCUM_RED_SIZE 0x006F #define GLUT_WINDOW_ACCUM_GREEN_SIZE 0x0070 #define GLUT_WINDOW_ACCUM_BLUE_SIZE 0x0071 #define GLUT_WINDOW_ACCUM_ALPHA_SIZE 0x0072 #define GLUT_WINDOW_DOUBLEBUFFER 0x0073 #define GLUT_WINDOW_RGBA 0x0074 #define GLUT_WINDOW_PARENT 0x0075 #define GLUT_WINDOW_NUM_CHILDREN 0x0076 #define GLUT_WINDOW_COLORMAP_SIZE 0x0077 #define GLUT_WINDOW_NUM_SAMPLES 0x0078 #define GLUT_WINDOW_STEREO 0x0079 #define GLUT_WINDOW_CURSOR 0x007A #define GLUT_SCREEN_WIDTH 0x00C8 #define GLUT_SCREEN_HEIGHT 0x00C9 #define GLUT_SCREEN_WIDTH_MM 0x00CA #define GLUT_SCREEN_HEIGHT_MM 0x00CB #define GLUT_MENU_NUM_ITEMS 0x012C #define GLUT_DISPLAY_MODE_POSSIBLE 0x0190 #define GLUT_INIT_WINDOW_X 0x01F4 #define GLUT_INIT_WINDOW_Y 0x01F5 #define GLUT_INIT_WINDOW_WIDTH 0x01F6 #define GLUT_INIT_WINDOW_HEIGHT 0x01F7 #define GLUT_INIT_DISPLAY_MODE 0x01F8 #define GLUT_ELAPSED_TIME 0x02BC #define GLUT_WINDOW_FORMAT_ID 0x007B /* * GLUT API macro definitions -- the glutDeviceGet parameters */ #define GLUT_HAS_KEYBOARD 0x0258 #define GLUT_HAS_MOUSE 0x0259 #define GLUT_HAS_SPACEBALL 0x025A #define GLUT_HAS_DIAL_AND_BUTTON_BOX 0x025B #define GLUT_HAS_TABLET 0x025C #define GLUT_NUM_MOUSE_BUTTONS 0x025D #define GLUT_NUM_SPACEBALL_BUTTONS 0x025E #define GLUT_NUM_BUTTON_BOX_BUTTONS 0x025F #define GLUT_NUM_DIALS 0x0260 #define GLUT_NUM_TABLET_BUTTONS 0x0261 #define GLUT_DEVICE_IGNORE_KEY_REPEAT 0x0262 #define GLUT_DEVICE_KEY_REPEAT 0x0263 #define GLUT_HAS_JOYSTICK 0x0264 #define GLUT_OWNS_JOYSTICK 0x0265 #define GLUT_JOYSTICK_BUTTONS 0x0266 #define GLUT_JOYSTICK_AXES 0x0267 #define GLUT_JOYSTICK_POLL_RATE 0x0268 /* * GLUT API macro definitions -- the glutLayerGet parameters */ #define GLUT_OVERLAY_POSSIBLE 0x0320 #define GLUT_LAYER_IN_USE 0x0321 #define GLUT_HAS_OVERLAY 0x0322 #define GLUT_TRANSPARENT_INDEX 0x0323 #define GLUT_NORMAL_DAMAGED 0x0324 #define GLUT_OVERLAY_DAMAGED 0x0325 /* * GLUT API macro definitions -- the glutVideoResizeGet parameters */ #define GLUT_VIDEO_RESIZE_POSSIBLE 0x0384 #define GLUT_VIDEO_RESIZE_IN_USE 0x0385 #define GLUT_VIDEO_RESIZE_X_DELTA 0x0386 #define GLUT_VIDEO_RESIZE_Y_DELTA 0x0387 #define GLUT_VIDEO_RESIZE_WIDTH_DELTA 0x0388 #define GLUT_VIDEO_RESIZE_HEIGHT_DELTA 0x0389 #define GLUT_VIDEO_RESIZE_X 0x038A #define GLUT_VIDEO_RESIZE_Y 0x038B #define GLUT_VIDEO_RESIZE_WIDTH 0x038C #define GLUT_VIDEO_RESIZE_HEIGHT 0x038D /* * GLUT API macro definitions -- the glutUseLayer parameters */ #define GLUT_NORMAL 0x0000 #define GLUT_OVERLAY 0x0001 /* * GLUT API macro definitions -- the glutGetModifiers parameters */ #define GLUT_ACTIVE_SHIFT 0x0001 #define GLUT_ACTIVE_CTRL 0x0002 #define GLUT_ACTIVE_ALT 0x0004 /* * GLUT API macro definitions -- the glutSetCursor parameters */ #define GLUT_CURSOR_RIGHT_ARROW 0x0000 #define GLUT_CURSOR_LEFT_ARROW 0x0001 #define GLUT_CURSOR_INFO 0x0002 #define GLUT_CURSOR_DESTROY 0x0003 #define GLUT_CURSOR_HELP 0x0004 #define GLUT_CURSOR_CYCLE 0x0005 #define GLUT_CURSOR_SPRAY 0x0006 #define GLUT_CURSOR_WAIT 0x0007 #define GLUT_CURSOR_TEXT 0x0008 #define GLUT_CURSOR_CROSSHAIR 0x0009 #define GLUT_CURSOR_UP_DOWN 0x000A #define GLUT_CURSOR_LEFT_RIGHT 0x000B #define GLUT_CURSOR_TOP_SIDE 0x000C #define GLUT_CURSOR_BOTTOM_SIDE 0x000D #define GLUT_CURSOR_LEFT_SIDE 0x000E #define GLUT_CURSOR_RIGHT_SIDE 0x000F #define GLUT_CURSOR_TOP_LEFT_CORNER 0x0010 #define GLUT_CURSOR_TOP_RIGHT_CORNER 0x0011 #define GLUT_CURSOR_BOTTOM_RIGHT_CORNER 0x0012 #define GLUT_CURSOR_BOTTOM_LEFT_CORNER 0x0013 #define GLUT_CURSOR_INHERIT 0x0064 #define GLUT_CURSOR_NONE 0x0065 #define GLUT_CURSOR_FULL_CROSSHAIR 0x0066 /* * GLUT API macro definitions -- RGB color component specification definitions */ #define GLUT_RED 0x0000 #define GLUT_GREEN 0x0001 #define GLUT_BLUE 0x0002 /* * GLUT API macro definitions -- additional keyboard and joystick definitions */ #define GLUT_KEY_REPEAT_OFF 0x0000 #define GLUT_KEY_REPEAT_ON 0x0001 #define GLUT_KEY_REPEAT_DEFAULT 0x0002 #define GLUT_JOYSTICK_BUTTON_A 0x0001 #define GLUT_JOYSTICK_BUTTON_B 0x0002 #define GLUT_JOYSTICK_BUTTON_C 0x0004 #define GLUT_JOYSTICK_BUTTON_D 0x0008 /* * GLUT API macro definitions -- game mode definitions */ #define GLUT_GAME_MODE_ACTIVE 0x0000 #define GLUT_GAME_MODE_POSSIBLE 0x0001 #define GLUT_GAME_MODE_WIDTH 0x0002 #define GLUT_GAME_MODE_HEIGHT 0x0003 #define GLUT_GAME_MODE_PIXEL_DEPTH 0x0004 #define GLUT_GAME_MODE_REFRESH_RATE 0x0005 #define GLUT_GAME_MODE_DISPLAY_CHANGED 0x0006 /* * Initialization functions, see fglut_init.c */ FGAPI void FGAPIENTRY glutInit( int* pargc, char** argv ); FGAPI void FGAPIENTRY glutInitWindowPosition( int x, int y ); FGAPI void FGAPIENTRY glutInitWindowSize( int width, int height ); FGAPI void FGAPIENTRY glutInitDisplayMode( unsigned int displayMode ); FGAPI void FGAPIENTRY glutInitDisplayString( const char* displayMode ); /* * Process loop function, see freeglut_main.c */ FGAPI void FGAPIENTRY glutMainLoop( void ); /* * Window management functions, see freeglut_window.c */ FGAPI int FGAPIENTRY glutCreateWindow( const char* title ); FGAPI int FGAPIENTRY glutCreateSubWindow( int window, int x, int y, int width, int height ); FGAPI void FGAPIENTRY glutDestroyWindow( int window ); FGAPI void FGAPIENTRY glutSetWindow( int window ); FGAPI int FGAPIENTRY glutGetWindow( void ); FGAPI void FGAPIENTRY glutSetWindowTitle( const char* title ); FGAPI void FGAPIENTRY glutSetIconTitle( const char* title ); FGAPI void FGAPIENTRY glutReshapeWindow( int width, int height ); FGAPI void FGAPIENTRY glutPositionWindow( int x, int y ); FGAPI void FGAPIENTRY glutShowWindow( void ); FGAPI void FGAPIENTRY glutHideWindow( void ); FGAPI void FGAPIENTRY glutIconifyWindow( void ); FGAPI void FGAPIENTRY glutPushWindow( void ); FGAPI void FGAPIENTRY glutPopWindow( void ); FGAPI void FGAPIENTRY glutFullScreen( void ); /* * Display-connected functions, see freeglut_display.c */ FGAPI void FGAPIENTRY glutPostWindowRedisplay( int window ); FGAPI void FGAPIENTRY glutPostRedisplay( void ); FGAPI void FGAPIENTRY glutSwapBuffers( void ); /* * Mouse cursor functions, see freeglut_cursor.c */ FGAPI void FGAPIENTRY glutWarpPointer( int x, int y ); FGAPI void FGAPIENTRY glutSetCursor( int cursor ); /* * Overlay stuff, see freeglut_overlay.c */ FGAPI void FGAPIENTRY glutEstablishOverlay( void ); FGAPI void FGAPIENTRY glutRemoveOverlay( void ); FGAPI void FGAPIENTRY glutUseLayer( GLenum layer ); FGAPI void FGAPIENTRY glutPostOverlayRedisplay( void ); FGAPI void FGAPIENTRY glutPostWindowOverlayRedisplay( int window ); FGAPI void FGAPIENTRY glutShowOverlay( void ); FGAPI void FGAPIENTRY glutHideOverlay( void ); /* * Menu stuff, see freeglut_menu.c */ FGAPI int FGAPIENTRY glutCreateMenu( void (* callback)( int menu ) ); FGAPI void FGAPIENTRY glutDestroyMenu( int menu ); FGAPI int FGAPIENTRY glutGetMenu( void ); FGAPI void FGAPIENTRY glutSetMenu( int menu ); FGAPI void FGAPIENTRY glutAddMenuEntry( const char* label, int value ); FGAPI void FGAPIENTRY glutAddSubMenu( const char* label, int subMenu ); FGAPI void FGAPIENTRY glutChangeToMenuEntry( int item, const char* label, int value ); FGAPI void FGAPIENTRY glutChangeToSubMenu( int item, const char* label, int value ); FGAPI void FGAPIENTRY glutRemoveMenuItem( int item ); FGAPI void FGAPIENTRY glutAttachMenu( int button ); FGAPI void FGAPIENTRY glutDetachMenu( int button ); /* * Global callback functions, see freeglut_callbacks.c */ FGAPI void FGAPIENTRY glutTimerFunc( unsigned int time, void (* callback)( int ), int value ); FGAPI void FGAPIENTRY glutIdleFunc( void (* callback)( void ) ); /* * Window-specific callback functions, see freeglut_callbacks.c */ FGAPI void FGAPIENTRY glutKeyboardFunc( void (* callback)( unsigned char, int, int ) ); FGAPI void FGAPIENTRY glutSpecialFunc( void (* callback)( int, int, int ) ); FGAPI void FGAPIENTRY glutReshapeFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutVisibilityFunc( void (* callback)( int ) ); FGAPI void FGAPIENTRY glutDisplayFunc( void (* callback)( void ) ); FGAPI void FGAPIENTRY glutMouseFunc( void (* callback)( int, int, int, int ) ); FGAPI void FGAPIENTRY glutMotionFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutPassiveMotionFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutEntryFunc( void (* callback)( int ) ); FGAPI void FGAPIENTRY glutKeyboardUpFunc( void (* callback)( unsigned char, int, int ) ); FGAPI void FGAPIENTRY glutSpecialUpFunc( void (* callback)( int, int, int ) ); FGAPI void FGAPIENTRY glutJoystickFunc( void (* callback)( unsigned int, int, int, int ), int pollInterval ); FGAPI void FGAPIENTRY glutMenuStateFunc( void (* callback)( int ) ); FGAPI void FGAPIENTRY glutMenuStatusFunc( void (* callback)( int, int, int ) ); FGAPI void FGAPIENTRY glutOverlayDisplayFunc( void (* callback)( void ) ); FGAPI void FGAPIENTRY glutWindowStatusFunc( void (* callback)( int ) ); FGAPI void FGAPIENTRY glutSpaceballMotionFunc( void (* callback)( int, int, int ) ); FGAPI void FGAPIENTRY glutSpaceballRotateFunc( void (* callback)( int, int, int ) ); FGAPI void FGAPIENTRY glutSpaceballButtonFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutButtonBoxFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutDialsFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutTabletMotionFunc( void (* callback)( int, int ) ); FGAPI void FGAPIENTRY glutTabletButtonFunc( void (* callback)( int, int, int, int ) ); /* * State setting and retrieval functions, see freeglut_state.c */ FGAPI int FGAPIENTRY glutGet( GLenum query ); FGAPI int FGAPIENTRY glutDeviceGet( GLenum query ); FGAPI int FGAPIENTRY glutGetModifiers( void ); FGAPI int FGAPIENTRY glutLayerGet( GLenum query ); /* * Font stuff, see freeglut_font.c */ FGAPI void FGAPIENTRY glutBitmapCharacter( void* font, int character ); FGAPI int FGAPIENTRY glutBitmapWidth( void* font, int character ); FGAPI void FGAPIENTRY glutStrokeCharacter( void* font, int character ); FGAPI int FGAPIENTRY glutStrokeWidth( void* font, int character ); FGAPI int FGAPIENTRY glutBitmapLength( void* font, const unsigned char* string ); FGAPI int FGAPIENTRY glutStrokeLength( void* font, const unsigned char* string ); /* * Geometry functions, see freeglut_geometry.c */ FGAPI void FGAPIENTRY glutWireCube( GLdouble size ); FGAPI void FGAPIENTRY glutSolidCube( GLdouble size ); FGAPI void FGAPIENTRY glutWireSphere( GLdouble radius, GLint slices, GLint stacks ); FGAPI void FGAPIENTRY glutSolidSphere( GLdouble radius, GLint slices, GLint stacks ); FGAPI void FGAPIENTRY glutWireCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ); FGAPI void FGAPIENTRY glutSolidCone( GLdouble base, GLdouble height, GLint slices, GLint stacks ); FGAPI void FGAPIENTRY glutWireTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); FGAPI void FGAPIENTRY glutSolidTorus( GLdouble innerRadius, GLdouble outerRadius, GLint sides, GLint rings ); FGAPI void FGAPIENTRY glutWireDodecahedron( void ); FGAPI void FGAPIENTRY glutSolidDodecahedron( void ); FGAPI void FGAPIENTRY glutWireOctahedron( void ); FGAPI void FGAPIENTRY glutSolidOctahedron( void ); FGAPI void FGAPIENTRY glutWireTetrahedron( void ); FGAPI void FGAPIENTRY glutSolidTetrahedron( void ); FGAPI void FGAPIENTRY glutWireIcosahedron( void ); FGAPI void FGAPIENTRY glutSolidIcosahedron( void ); /* * Teapot rendering functions, found in freeglut_teapot.c */ FGAPI void FGAPIENTRY glutWireTeapot( GLdouble size ); FGAPI void FGAPIENTRY glutSolidTeapot( GLdouble size ); /* * Game mode functions, see freeglut_gamemode.c */ FGAPI void FGAPIENTRY glutGameModeString( const char* string ); FGAPI int FGAPIENTRY glutEnterGameMode( void ); FGAPI void FGAPIENTRY glutLeaveGameMode( void ); FGAPI int FGAPIENTRY glutGameModeGet( GLenum query ); /* * Video resize functions, see freeglut_videoresize.c */ FGAPI int FGAPIENTRY glutVideoResizeGet( GLenum query ); FGAPI void FGAPIENTRY glutSetupVideoResizing( void ); FGAPI void FGAPIENTRY glutStopVideoResizing( void ); FGAPI void FGAPIENTRY glutVideoResize( int x, int y, int width, int height ); FGAPI void FGAPIENTRY glutVideoPan( int x, int y, int width, int height ); /* * Colormap functions, see freeglut_misc.c */ FGAPI void FGAPIENTRY glutSetColor( int color, GLfloat red, GLfloat green, GLfloat blue ); FGAPI GLfloat FGAPIENTRY glutGetColor( int color, int component ); FGAPI void FGAPIENTRY glutCopyColormap( int window ); /* * Misc keyboard and joystick functions, see freeglut_misc.c */ FGAPI void FGAPIENTRY glutIgnoreKeyRepeat( int ignore ); FGAPI void FGAPIENTRY glutSetKeyRepeat( int repeatMode ); FGAPI void FGAPIENTRY glutForceJoystickFunc( void ); /* * Misc functions, see freeglut_misc.c */ FGAPI int FGAPIENTRY glutExtensionSupported( const char* extension ); FGAPI void FGAPIENTRY glutReportErrors( void ); /* Comment from glut.h of classic GLUT: Win32 has an annoying issue where there are multiple C run-time libraries (CRTs). If the executable is linked with a different CRT from the GLUT DLL, the GLUT DLL will not share the same CRT static data seen by the executable. In particular, atexit callbacks registered in the executable will not be called if GLUT calls its (different) exit routine). GLUT is typically built with the "/MD" option (the CRT with multithreading DLL support), but the Visual C++ linker default is "/ML" (the single threaded CRT). One workaround to this issue is requiring users to always link with the same CRT as GLUT is compiled with. That requires users supply a non-standard option. GLUT 3.7 has its own built-in workaround where the executable's "exit" function pointer is covertly passed to GLUT. GLUT then calls the executable's exit function pointer to ensure that any "atexit" calls registered by the application are called if GLUT needs to exit. Note that the __glut*WithExit routines should NEVER be called directly. To avoid the atexit workaround, #define GLUT_DISABLE_ATEXIT_HACK. */ /* to get the prototype for exit() */ #include <stdlib.h> #if defined(_WIN32) && !defined(GLUT_DISABLE_ATEXIT_HACK) && !defined(__WATCOMC__) FGAPI void FGAPIENTRY __glutInitWithExit(int *argcp, char **argv, void (__cdecl *exitfunc)(int)); FGAPI int FGAPIENTRY __glutCreateWindowWithExit(const char *title, void (__cdecl *exitfunc)(int)); FGAPI int FGAPIENTRY __glutCreateMenuWithExit(void (* func)(int), void (__cdecl *exitfunc)(int)); #ifndef FREEGLUT_BUILDING_LIB #if defined(__GNUC__) #define FGUNUSED __attribute__((unused)) #else #define FGUNUSED #endif static void FGAPIENTRY FGUNUSED glutInit_ATEXIT_HACK(int *argcp, char **argv) { __glutInitWithExit(argcp, argv, exit); } #define glutInit glutInit_ATEXIT_HACK static int FGAPIENTRY FGUNUSED glutCreateWindow_ATEXIT_HACK(const char *title) { return __glutCreateWindowWithExit(title, exit); } #define glutCreateWindow glutCreateWindow_ATEXIT_HACK static int FGAPIENTRY FGUNUSED glutCreateMenu_ATEXIT_HACK(void (* func)(int)) { return __glutCreateMenuWithExit(func, exit); } #define glutCreateMenu glutCreateMenu_ATEXIT_HACK #endif #endif #ifdef __cplusplus } #endif /*** END OF FILE ***/ #endif /* __FREEGLUT_STD_H__ */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/README������������������������������������������������������������������������������0000644�0000764�0000764�00000001167�11533026402�013234� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is Gauche-gl, OpenGL binding for Gauche. See INSTALL (English) or INSTALL.eucjp (Japanese) for installation instructions. Under doc/, you can find texinfo file of the documentation. It is incomplete but may be of some use. Under win32/, there are some auxiliary libraries required for win32 platform. Things under this directory has its own copyright notices; check each subdirectories. Currently it only contains freeglut-2.6.0-3, a precompiled binary of Pawel W. Olszta's FreeGlut, build for MinGW by Martin Payne. The package can be obtained from: http://www.transmissionzero.co.uk/computing/using-glut-with-mingw/ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/configure���������������������������������������������������������������������������0000755�0000764�0000764�00000503371�11617171613�014277� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65 for Gauche-gl 0.5.1. # # Report bugs to <shiro@acm.org>. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org and shiro@acm.org $0: about your system, including any error possibly output $0: before this message. Then install a modern shell, or $0: manually run the script under such a shell if you do $0: have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 </dev/null exec 6>&1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='Gauche-gl' PACKAGE_TARNAME='gauche-gl' PACKAGE_VERSION='0.5.1' PACKAGE_STRING='Gauche-gl 0.5.1' PACKAGE_BUGREPORT='shiro@acm.org' PACKAGE_URL='' # Factoring default headers for most tests. ac_includes_default="\ #include <stdio.h> #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef STDC_HEADERS # include <stdlib.h> # include <stddef.h> #else # ifdef HAVE_STDLIB_H # include <stdlib.h> # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include <memory.h> # endif # include <string.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_subst_vars='LTLIBOBJS LIBOBJS GLUT_EXTRALIBS GL_EXTRALIBS GZIP_PROGRAM MAKEINFO GLUT_LIBDIR GLUT_INCDIR GLUT_LIB GL_LIBS EGREP GREP SOEXT GAUCHE_CESCONV GAUCHE_INSTALL GAUCHE_PACKAGE GAUCHE_CONFIG GOSH CG_SCM CG_LIBS ENABLE_CG X_EXTRA_LIBS X_LIBS X_PRE_LIBS X_CFLAGS CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC XMKMF target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking with_x with_glut enable_cg ' ac_precious_vars='build_alias host_alias target_alias XMKMF CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error "unrecognized option: \`$ac_option' Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures Gauche-gl 0.5.1 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/gauche-gl] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of Gauche-gl 0.5.1:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-cg Enable NVidia's Cg binding. Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-x use the X Window System --with-glut=PATH: Use GLUT library installed under PATH. By default, Gauche-gl assumes GLUT is installed in the system standard location. If you do not want to use GLUT support, specify --with-glut=no. On MinGW you can statically link freeglut included in the source. If you want to choose so, say --with-glut=mingw-static. Some influential environment variables: XMKMF Path to xmkmf, Makefile generator for X Window System CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to <shiro@acm.org>. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF Gauche-gl configure 0.5.1 generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case <limits.h> declares $2. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer <limits.h> to <assert.h> if __STDC__ is defined, since <limits.h> exists even on freestanding compilers. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ( cat <<\_ASBOX ## ---------------------------- ## ## Report this to shiro@acm.org ## ## ---------------------------- ## _ASBOX ) | sed "s/^/$as_me: WARNING: /" >&2 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by Gauche-gl $as_me 0.5.1, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do for ac_t in install-sh install.sh shtool; do if test -f "$ac_dir/$ac_t"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/$ac_t -c" break 2 fi done done if test -z "$ac_aux_dir"; then as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if test "${ac_cv_target+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "C compiler cannot create executables See \`config.log' for more details." "$LINENO" 5; }; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of object files: cannot compile See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since # <limits.h> exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include <limits.h> #else # include <assert.h> #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ac_nonexistent.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <X11/Xlib.h> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <X11/Xlib.h> int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi if test "$no_x" = yes; then # Not all programs may use this symbol, but it does not hurt to define it. $as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= else if test -n "$x_includes"; then X_CFLAGS="$X_CFLAGS -I$x_includes" fi # It would also be nice to do this for all -L options, not just this one. if test -n "$x_libraries"; then X_LIBS="$X_LIBS -L$x_libraries" # For Solaris; some versions of Sun CC require a space after -R and # others require no space. Words are not sufficient . . . . { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5 $as_echo_n "checking whether -R must be followed by a space... " >&6; } ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries" ac_xsave_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } X_LIBS="$X_LIBS -R$x_libraries" else LIBS="$ac_xsave_LIBS -R $x_libraries" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } X_LIBS="$X_LIBS -R $x_libraries" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5 $as_echo "neither works" >&6; } fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext ac_c_werror_flag=$ac_xsave_c_werror_flag LIBS=$ac_xsave_LIBS fi # Check for system-dependent libraries X programs must link with. # Do this before checking for the system-independent R6 libraries # (-lICE), since we may need -lsocket or whatever for X linking. if test "$ISC" = yes; then X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" else # Martyn Johnson says this is needed for Ultrix, if the X # libraries were built with DECnet support. And Karl Berry says # the Alpha needs dnet_stub (dnet does not exist). ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char XOpenDisplay (); int main () { return XOpenDisplay (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; } if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_dnet_ntoa=yes else ac_cv_lib_dnet_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_dnet_ntoa" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet" fi if test $ac_cv_lib_dnet_dnet_ntoa = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5 $as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; } if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-ldnet_stub $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char dnet_ntoa (); int main () { return dnet_ntoa (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_dnet_stub_dnet_ntoa=yes else ac_cv_lib_dnet_stub_dnet_ntoa=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5 $as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; } if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub" fi fi fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_xsave_LIBS" # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, # to get the SysV transport functions. # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4) # needs -lnsl. # The nsl library prevents programs from opening the X display # on Irix 5.2, according to T.E. Dickey. # The functions gethostbyname, getservbyname, and inet_addr are # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking. ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname" if test "x$ac_cv_func_gethostbyname" = x""yes; then : fi if test $ac_cv_func_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5 $as_echo_n "checking for gethostbyname in -lnsl... " >&6; } if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lnsl $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_nsl_gethostbyname=yes else ac_cv_lib_nsl_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5 $as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; } if test "x$ac_cv_lib_nsl_gethostbyname" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl" fi if test $ac_cv_lib_nsl_gethostbyname = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5 $as_echo_n "checking for gethostbyname in -lbsd... " >&6; } if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char gethostbyname (); int main () { return gethostbyname (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_bsd_gethostbyname=yes else ac_cv_lib_bsd_gethostbyname=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5 $as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; } if test "x$ac_cv_lib_bsd_gethostbyname" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd" fi fi fi # lieder@skyler.mavd.honeywell.com says without -lsocket, # socket/setsockopt and other routines are undefined under SCO ODT # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary # on later versions), says Simon Leinen: it contains gethostby* # variants that don't use the name server (or something). -lsocket # must be given before -lnsl if both are needed. We assume that # if connect needs -lnsl, so does gethostbyname. ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect" if test "x$ac_cv_func_connect" = x""yes; then : fi if test $ac_cv_func_connect = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5 $as_echo_n "checking for connect in -lsocket... " >&6; } if test "${ac_cv_lib_socket_connect+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsocket $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char connect (); int main () { return connect (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_socket_connect=yes else ac_cv_lib_socket_connect=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5 $as_echo "$ac_cv_lib_socket_connect" >&6; } if test "x$ac_cv_lib_socket_connect" = x""yes; then : X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS" fi fi # Guillermo Gomez says -lposix is necessary on A/UX. ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove" if test "x$ac_cv_func_remove" = x""yes; then : fi if test $ac_cv_func_remove = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5 $as_echo_n "checking for remove in -lposix... " >&6; } if test "${ac_cv_lib_posix_remove+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lposix $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char remove (); int main () { return remove (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_posix_remove=yes else ac_cv_lib_posix_remove=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5 $as_echo "$ac_cv_lib_posix_remove" >&6; } if test "x$ac_cv_lib_posix_remove" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix" fi fi # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat" if test "x$ac_cv_func_shmat" = x""yes; then : fi if test $ac_cv_func_shmat = no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5 $as_echo_n "checking for shmat in -lipc... " >&6; } if test "${ac_cv_lib_ipc_shmat+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lipc $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char shmat (); int main () { return shmat (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ipc_shmat=yes else ac_cv_lib_ipc_shmat=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5 $as_echo "$ac_cv_lib_ipc_shmat" >&6; } if test "x$ac_cv_lib_ipc_shmat" = x""yes; then : X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc" fi fi fi # Check for libraries that X11R6 Xt/Xaw programs need. ac_save_LDFLAGS=$LDFLAGS test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to # check for ICE first), but we must link in the order -lSM -lICE or # we get undefined symbols. So assume we have SM if we have ICE. # These have to be linked with before -lX11, unlike the other # libraries we check for below, so use a different variable. # John Interrante, Karl Berry { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5 $as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; } if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lICE $X_EXTRA_LIBS $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char IceConnectionNumber (); int main () { return IceConnectionNumber (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_ICE_IceConnectionNumber=yes else ac_cv_lib_ICE_IceConnectionNumber=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5 $as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; } if test "x$ac_cv_lib_ICE_IceConnectionNumber" = x""yes; then : X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE" fi LDFLAGS=$ac_save_LDFLAGS fi case "$target" in *-*-cygwin*) if test "x-$have_x" = "x-disabled" -o "x-$have_x" = "x-no"; then LIBGLUT=glut32; else LIBGLUT=glut CPPFLAGS="$CPPFLAGS -I$x_includes"; fi;; *) LIBGLUT=glut;; esac # options for configure scripts GLUT_LIB="-l$LIBGLUT" # Check whether --with-glut was given. if test "${with_glut+set}" = set; then : withval=$with_glut; case $with_glut in no) GLUT_LIB= ;; yes) GLUT_LIB="-l$LIBGLUT";; mingw-static) GLUT_LIB="-lfreeglut_static -lgdi32 -lwinmm" GLUT_INCDIR="-I../win32/freeglut-2.6.0-3/include -DFREEGLUT_STATIC" GLUT_LIBDIR="-L../win32/freeglut-2.6.0-3/lib";; *) GLUT_LIB="-l$LIBGLUT" GLUT_INCDIR="-I$with_glut/include" GLUT_LIBDIR="-L$with_glut/lib";; esac fi # Check whether --enable-cg was given. if test "${enable_cg+set}" = set; then : enableval=$enable_cg; $as_echo "#define HAVE_CG 1" >>confdefs.h ENABLE_CG=1 CG_LIBS="-lCgGL -lCg" CG_SCM="cg/gl/cg.scm"; fi # Extract the first word of "gosh", so it can be a program name with args. set dummy gosh; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GOSH+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GOSH in [\\/]* | ?:[\\/]*) ac_cv_path_GOSH="$GOSH" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GOSH="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GOSH=$ac_cv_path_GOSH if test -n "$GOSH"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GOSH" >&5 $as_echo "$GOSH" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gauche-config", so it can be a program name with args. set dummy gauche-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GAUCHE_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GAUCHE_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_GAUCHE_CONFIG="$GAUCHE_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GAUCHE_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GAUCHE_CONFIG=$ac_cv_path_GAUCHE_CONFIG if test -n "$GAUCHE_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GAUCHE_CONFIG" >&5 $as_echo "$GAUCHE_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gauche-package", so it can be a program name with args. set dummy gauche-package; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GAUCHE_PACKAGE+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GAUCHE_PACKAGE in [\\/]* | ?:[\\/]*) ac_cv_path_GAUCHE_PACKAGE="$GAUCHE_PACKAGE" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GAUCHE_PACKAGE="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GAUCHE_PACKAGE=$ac_cv_path_GAUCHE_PACKAGE if test -n "$GAUCHE_PACKAGE"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GAUCHE_PACKAGE" >&5 $as_echo "$GAUCHE_PACKAGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gauche-install", so it can be a program name with args. set dummy gauche-install; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GAUCHE_INSTALL+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GAUCHE_INSTALL in [\\/]* | ?:[\\/]*) ac_cv_path_GAUCHE_INSTALL="$GAUCHE_INSTALL" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GAUCHE_INSTALL="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GAUCHE_INSTALL=$ac_cv_path_GAUCHE_INSTALL if test -n "$GAUCHE_INSTALL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GAUCHE_INSTALL" >&5 $as_echo "$GAUCHE_INSTALL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gauche-cesconv", so it can be a program name with args. set dummy gauche-cesconv; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GAUCHE_CESCONV+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GAUCHE_CESCONV in [\\/]* | ?:[\\/]*) ac_cv_path_GAUCHE_CESCONV="$GAUCHE_CESCONV" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GAUCHE_CESCONV="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi GAUCHE_CESCONV=$ac_cv_path_GAUCHE_CESCONV if test -n "$GAUCHE_CESCONV"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GAUCHE_CESCONV" >&5 $as_echo "$GAUCHE_CESCONV" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi SOEXT=`"$GAUCHE_CONFIG" --so-suffix` OBJEXT=`"$GAUCHE_CONFIG" --object-suffix` EXEEXT=`"$GAUCHE_CONFIG" --executable-suffix` # Check for headers { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stdarg.h> #include <string.h> #include <float.h> int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #include <stdlib.h> #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in GL/glx.h do : ac_fn_c_check_header_mongrel "$LINENO" "GL/glx.h" "ac_cv_header_GL_glx_h" "$ac_includes_default" if test "x$ac_cv_header_GL_glx_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GL_GLX_H 1 _ACEOF # OpenGL/X11 # NB: FreeBSD seems to need -lX11 -lXext. We are on X11 system anyway, # so I assume this won't do any harm. GL_LIBS='-lGLU -lGL -lX11 -lXext' GLUT_LIB="$GLUT_LIB -lXmu -lXi" fi done for ac_header in GLUT/glut.h do : ac_fn_c_check_header_mongrel "$LINENO" "GLUT/glut.h" "ac_cv_header_GLUT_glut_h" "$ac_includes_default" if test "x$ac_cv_header_GLUT_glut_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GLUT_GLUT_H 1 _ACEOF case $target in *-apple-darwin*) $as_echo "#define MacOSX 1" >>confdefs.h # darwin which has GLUT/glut.h is MacOSX GL_LIBS='-framework OpenGL -framework GLUT' # GLUT for glutGetProcAddress GLUT_LIB='-framework GLUT' ;; *) # other OSes w/o X11 but have GLUT/glut.h. Possibly MacOS9?? ;; esac fi done if test "$GL_LIBS" = ""; then case $target in *-*-cygwin*|*-*-mingw*) GL_LIBS='-lglu32 -lopengl32' ;; *) GL_LIBS='-lGLU -lGL' ;; esac fi # Check for other programs. for ac_prog in makeinfo do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_MAKEINFO+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$MAKEINFO"; then ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_MAKEINFO="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi MAKEINFO=$ac_cv_prog_MAKEINFO if test -n "$MAKEINFO"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5 $as_echo "$MAKEINFO" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$MAKEINFO" && break done for ac_prog in gzip do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_GZIP_PROGRAM+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$GZIP_PROGRAM"; then ac_cv_prog_GZIP_PROGRAM="$GZIP_PROGRAM" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_GZIP_PROGRAM="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi GZIP_PROGRAM=$ac_cv_prog_GZIP_PROGRAM if test -n "$GZIP_PROGRAM"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GZIP_PROGRAM" >&5 $as_echo "$GZIP_PROGRAM" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$GZIP_PROGRAM" && break done # Check for libraries # on cygwin, we need several extra -l flags. case "$target" in *-*-cygwin*|*-*-mingw*) LIBS="-lgauche-uvector $LIBS" GL_EXTRALIBS="-L. -lgauche-math3d" GLUT_EXTRALIBS="-L. -lgauche-gl -lgauche-math3d" ;; esac GAUCHE_PACKAGE_CONFIGURE_ARGS="`echo ""$ac_configure_args"" | sed 's/\\""\`\$/\\\&/g'`" { $as_echo "$as_me:${as_lineno-$LINENO}: creating ${PACKAGE_NAME}.gpd" >&5 $as_echo "$as_me: creating ${PACKAGE_NAME}.gpd" >&6;} "$GAUCHE_PACKAGE" make-gpd "$PACKAGE_NAME" \ -version "$PACKAGE_VERSION" \ -configure "./configure $GAUCHE_PACKAGE_CONFIGURE_ARGS" echo $PACKAGE_VERSION > VERSION ac_config_files="$ac_config_files Makefile src/Makefile lib/Makefile cg/Makefile doc/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' # Transform confdefs.h into DEFS. # Protect against shell expansion while executing Makefile rules. # Protect against Makefile macro expansion. # # If the first sed substitution is executed (which looks for macros that # take arguments), then branch to the quote section. Otherwise, # look for a macro that doesn't take arguments. ac_script=' :mline /\\$/{ N s,\\\n,, b mline } t clear :clear s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g t quote s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g t quote b any :quote s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g s/\[/\\&/g s/\]/\\&/g s/\$/$$/g H :any ${ g s/^\n// s/\n/ /g p } ' DEFS=`sed -n "$ac_script" confdefs.h` ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by Gauche-gl $as_me 0.5.1, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE Configuration files: $config_files Report bugs to <shiro@acm.org>." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ Gauche-gl config.status 0.5.1 configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --he | --h | --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "cg/Makefile") CONFIG_FILES="$CONFIG_FILES cg/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" eval set X " :F $CONFIG_FILES " shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit $? fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/configure.in������������������������������������������������������������������������0000644�0000764�0000764�00000007534�11617171557�014710� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl dnl Configuring gauche-gl dnl process this file with "autoconf" to generate 'configure'. dnl $Id: configure.in,v 1.32 2007-07-10 00:13:21 shirok Exp $ AC_PREREQ(2.54) AC_INIT(Gauche-gl, 0.5.1, shiro@acm.org) AC_CANONICAL_SYSTEM AC_PATH_XTRA case "$target" in *-*-cygwin*) if test "x-$have_x" = "x-disabled" -o "x-$have_x" = "x-no"; then LIBGLUT=glut32; else LIBGLUT=glut CPPFLAGS="$CPPFLAGS -I$x_includes"; fi;; *) LIBGLUT=glut;; esac # options for configure scripts GLUT_LIB="-l$LIBGLUT" AC_ARG_WITH(glut, [ --with-glut[=PATH]: Use GLUT library installed under PATH. By default, Gauche-gl assumes GLUT is installed in the system standard location. If you do not want to use GLUT support, specify --with-glut=no. On MinGW you can statically link freeglut included in the source. If you want to choose so, say --with-glut=mingw-static.], [ case $with_glut in no) GLUT_LIB= ;; yes) GLUT_LIB="-l$LIBGLUT";; mingw-static) GLUT_LIB="-lfreeglut_static -lgdi32 -lwinmm" GLUT_INCDIR="-I../win32/freeglut-2.6.0-3/include -DFREEGLUT_STATIC" GLUT_LIBDIR="-L../win32/freeglut-2.6.0-3/lib";; *) GLUT_LIB="-l$LIBGLUT" GLUT_INCDIR="-I$with_glut/include" GLUT_LIBDIR="-L$with_glut/lib";; esac ]) AC_ARG_ENABLE(cg, AC_HELP_STRING([--enable-cg], [Enable NVidia's Cg binding.]), [ AC_DEFINE(HAVE_CG, 1) ENABLE_CG=1 CG_LIBS="-lCgGL -lCg" CG_SCM="cg/gl/cg.scm"; ]) AC_SUBST(ENABLE_CG) AC_SUBST(CG_LIBS) AC_SUBST(CG_SCM) dnl Set up gauche related commands. The commands are set by scanning dnl PATH. You can override them by "GOSH=/my/gosh ./configure" etc. AC_PATH_PROG([GOSH], gosh) AC_PATH_PROG([GAUCHE_CONFIG], gauche-config) AC_PATH_PROG([GAUCHE_PACKAGE], gauche-package) AC_PATH_PROG([GAUCHE_INSTALL], gauche-install) AC_PATH_PROG([GAUCHE_CESCONV], gauche-cesconv) dnl Usually these parameters are set by AC_PROG_CC, but we'd rather use dnl the same one as Gauche has been compiled with. SOEXT=`"$GAUCHE_CONFIG" --so-suffix` OBJEXT=`"$GAUCHE_CONFIG" --object-suffix` EXEEXT=`"$GAUCHE_CONFIG" --executable-suffix` AC_SUBST(SOEXT) AC_SUBST(OBJEXT) AC_SUBST(EXEEXT) # Check for headers AC_CHECK_HEADERS(GL/glx.h, [ # OpenGL/X11 # NB: FreeBSD seems to need -lX11 -lXext. We are on X11 system anyway, # so I assume this won't do any harm. GL_LIBS='-lGLU -lGL -lX11 -lXext' GLUT_LIB="$GLUT_LIB -lXmu -lXi" ], ,) AC_CHECK_HEADERS(GLUT/glut.h, [ case $target in *-apple-darwin*) AC_DEFINE(MacOSX, 1) # darwin which has GLUT/glut.h is MacOSX GL_LIBS='-framework OpenGL -framework GLUT' # GLUT for glutGetProcAddress GLUT_LIB='-framework GLUT' ;; *) # other OSes w/o X11 but have GLUT/glut.h. Possibly MacOS9?? ;; esac ], ,) if test "$GL_LIBS" = ""; then case $target in *-*-cygwin*|*-*-mingw*) GL_LIBS='-lglu32 -lopengl32' ;; *) GL_LIBS='-lGLU -lGL' ;; esac fi AC_SUBST(GL_LIBS) AC_SUBST(GLUT_LIB) AC_SUBST(GLUT_INCDIR) AC_SUBST(GLUT_LIBDIR) # Check for other programs. AC_CHECK_PROGS(MAKEINFO, makeinfo) AC_CHECK_PROGS(GZIP_PROGRAM, gzip) # Check for libraries # on cygwin, we need several extra -l flags. case "$target" in *-*-cygwin*|*-*-mingw*) LIBS="-lgauche-uvector $LIBS" GL_EXTRALIBS="-L. -lgauche-math3d" GLUT_EXTRALIBS="-L. -lgauche-gl -lgauche-math3d" ;; esac AC_SUBST(GL_EXTRALIBS) AC_SUBST(GLUT_EXTRALIBS) dnl Creating gpd (gauche package description) file GAUCHE_PACKAGE_CONFIGURE_ARGS="`echo ""$ac_configure_args"" | sed 's/[\\""\`\$]/\\\&/g'`" AC_MSG_NOTICE([creating ${PACKAGE_NAME}.gpd]) "$GAUCHE_PACKAGE" make-gpd "$PACKAGE_NAME" \ -version "$PACKAGE_VERSION" \ -configure "./configure $GAUCHE_PACKAGE_CONFIGURE_ARGS" dnl Output echo $PACKAGE_VERSION > VERSION AC_OUTPUT(Makefile src/Makefile lib/Makefile cg/Makefile doc/Makefile) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/config.guess������������������������������������������������������������������������0000755�0000764�0000764�00000112274�11533026402�014676� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Attempt to guess a canonical system name. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. timestamp='2001-07-12' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Written by Per Bothner <bothner@cygnus.com>. # Please send patches to <config-patches@gnu.org>. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi dummy=dummy-$$ trap 'rm -f $dummy.c $dummy.o $dummy.rel $dummy; exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. set_cc_for_build='case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int dummy(){}" > $dummy.c ; for c in cc gcc c89 ; do ($c $dummy.c -c -o $dummy.o) >/dev/null 2>&1 ; if test $? = 0 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; rm -f $dummy.c $dummy.o $dummy.rel ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # Netbsd (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # Determine the machine/vendor (is the vendor relevant). case "${UNAME_MACHINE}" in amiga) machine=m68k-unknown ;; arm32) machine=arm-unknown ;; atari*) machine=m68k-atari ;; sun3*) machine=m68k-sun ;; mac68k) machine=m68k-apple ;; macppc) machine=powerpc-apple ;; hp3[0-9][05]) machine=m68k-hp ;; ibmrt|romp-ibm) machine=romp-ibm ;; *) machine=${UNAME_MACHINE}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE}" in i386|sparc|amiga|arm*|hp300|mvme68k|vax|atari|luna68k|mac68k|news68k|next68k|pc532|sun3*|x68k) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit 0 ;; alpha:OSF1:*:*) if test $UNAME_RELEASE = "V4.0"; then UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` fi # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. cat <<EOF >$dummy.s .data \$Lformat: .byte 37,100,45,37,120,10,0 # "%d-%x\n" .text .globl main .align 4 .ent main main: .frame \$30,16,\$26,0 ldgp \$29,0(\$27) .prologue 1 .long 0x47e03d80 # implver \$0 lda \$2,-1 .long 0x47e20c21 # amask \$2,\$1 lda \$16,\$Lformat mov \$0,\$17 not \$1,\$18 jsr \$26,printf ldgp \$29,0(\$26) mov 0,\$16 jsr \$26,exit .end main EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.s -o $dummy 2>/dev/null if test "$?" = 0 ; then case `./$dummy` in 0-0) UNAME_MACHINE="alpha" ;; 1-0) UNAME_MACHINE="alphaev5" ;; 1-1) UNAME_MACHINE="alphaev56" ;; 1-101) UNAME_MACHINE="alphapca56" ;; 2-303) UNAME_MACHINE="alphaev6" ;; 2-307) UNAME_MACHINE="alphaev67" ;; esac fi rm -f $dummy.s $dummy echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit 0 ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit 0 ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit 0 ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit 0;; amiga:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit 0 ;; arc64:OpenBSD:*:*) echo mips64el-unknown-openbsd${UNAME_RELEASE} exit 0 ;; arc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; hkmips:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; pmax:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; sgi:OpenBSD:*:*) echo mips-unknown-openbsd${UNAME_RELEASE} exit 0 ;; wgrisc:OpenBSD:*:*) echo mipsel-unknown-openbsd${UNAME_RELEASE} exit 0 ;; *:OS/390:*:*) echo i370-ibm-openedition exit 0 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit 0;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit 0;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit 0 ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit 0 ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; i86pc:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit 0 ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit 0 ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit 0 ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit 0 ;; atari*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit 0 ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit 0 ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit 0 ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit 0 ;; sun3*:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mac68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme68k:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; mvme88k:OpenBSD:*:*) echo m88k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit 0 ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit 0 ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit 0 ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit 0 ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit 0 ;; mips:*:*:UMIPS | mips:*:*:RISCos) sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.c -o $dummy \ && ./$dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \ && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo mips-mips-riscos${UNAME_RELEASE} exit 0 ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit 0 ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit 0 ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit 0 ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit 0 ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit 0 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit 0 ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit 0 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit 0 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit 0 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit 0 ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit 0 ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit 0 ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit 0 ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then sed 's/^ //' << EOF >$dummy.c #include <sys/systemcfg.h> main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo rs6000-ibm-aix3.2.5 elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit 0 ;; *:AIX:*:[45]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit 0 ;; *:AIX:*:*) echo rs6000-ibm-aix exit 0 ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit 0 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit 0 ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit 0 ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit 0 ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit 0 ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit 0 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) case "${HPUX_REV}" in 11.[0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; esac ;; esac fi ;; esac if [ "${HP_ARCH}" = "" ]; then sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include <stdlib.h> #include <unistd.h> int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF eval $set_cc_for_build (CCOPTS= $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null ) && HP_ARCH=`./$dummy` if test -z "$HP_ARCH"; then HP_ARCH=hppa; fi rm -f $dummy.c $dummy fi ;; esac echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit 0 ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit 0 ;; 3050*:HI-UX:*:*) sed 's/^ //' << EOF >$dummy.c #include <unistd.h> int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.c -o $dummy && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy echo unknown-hitachi-hiuxwe2 exit 0 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit 0 ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit 0 ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit 0 ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit 0 ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit 0 ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit 0 ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit 0 ;; hppa*:OpenBSD:*:*) echo hppa-unknown-openbsd exit 0 ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit 0 ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit 0 ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit 0 ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit 0 ;; CRAY*X-MP:*:*:*) echo xmp-cray-unicos exit 0 ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3D:*:*:*) echo alpha-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit 0 ;; CRAY-2:*:*:*) echo cray2-cray-unicos exit 0 ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit 0 ;; hp300:OpenBSD:*:*) echo m68k-unknown-openbsd${UNAME_RELEASE} exit 0 ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit 0 ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit 0 ;; *:FreeBSD:*:*) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit 0 ;; *:OpenBSD:*:*) echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` exit 0 ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit 0 ;; i*:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit 0 ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit 0 ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i386-pc-interix exit 0 ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit 0 ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit 0 ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit 0 ;; *:GNU:*:*) echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit 0 ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit 0 ;; arm*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux exit 0 ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; mips:Linux:*:*) case `sed -n '/^byte/s/^.*: \(.*\) endian/\1/p' < /proc/cpuinfo` in big) echo mips-unknown-linux-gnu && exit 0 ;; little) echo mipsel-unknown-linux-gnu && exit 0 ;; esac ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit 0 ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev67 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit 0 ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit 0 ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit 0 ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit 0 ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit 0 ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit 0 ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. ld_supported_targets=`cd /; ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit 0 ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit 0 ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit 0 ;; esac # Determine whether the default compiler is a.out or elf cat >$dummy.c <<EOF #include <features.h> #ifdef __cplusplus #include <stdio.h> /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 printf ("%s-pc-linux-gnu\n", argv[1]); # else printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif # else printf ("%s-pc-linux-gnulibc1\n", argv[1]); # endif #else printf ("%s-pc-linux-gnuaout\n", argv[1]); #endif return 0; } EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy "${UNAME_MACHINE}" && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0 ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit 0 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit 0 ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit 0 ;; i*86:*:5:[78]*) case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit 0 ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name` echo ${UNAME_MACHINE}-pc-isc$UNAME_REL elif /bin/uname -X 2>/dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|egrep Release|sed -e 's/.*= //')` (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|egrep '^Machine.*Pent ?II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|egrep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit 0 ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit 0 ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit 0 ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit 0 ;; paragon:*:*:*) echo i860-intel-osf1 exit 0 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit 0 ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit 0 ;; M68*:*:R3V[567]*:*) test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;; 3[34]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 4850:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4.3${OS_REL} && exit 0 /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && echo i486-ncr-sysv4 && exit 0 ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit 0 ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit 0 ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit 0 ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit 0 ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit 0 ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit 0 ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit 0 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit 0 ;; PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says <Richard.M.Bartel@ccMail.Census.GOV> echo i586-unisys-sysv4 exit 0 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes <hewes@openmarket.com>. # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit 0 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit 0 ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit 0 ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit 0 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit 0 ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit 0 ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit 0 ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit 0 ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit 0 ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit 0 ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit 0 ;; *:Darwin:*:*) echo `uname -p`-apple-darwin${UNAME_RELEASE} exit 0 ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) if test "${UNAME_MACHINE}" = "x86pc"; then UNAME_MACHINE=pc fi echo `uname -p`-${UNAME_MACHINE}-nto-qnx exit 0 ;; *:QNX:*:4*) echo i386-pc-qnx exit 0 ;; NSR-[KW]:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit 0 ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit 0 ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit 0 ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit 0 ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit 0 ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit 0 ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit 0 ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit 0 ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit 0 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit 0 ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit 0 ;; *:ITS:*:*) echo pdp10-unknown-its exit 0 ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 cat >$dummy.c <<EOF #ifdef _SEQUENT_ # include <sys/types.h> # include <sys/utsname.h> #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include <sys/param.h> printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include <sys/param.h> # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF eval $set_cc_for_build $CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null && ./$dummy && rm -f $dummy.c $dummy && exit 0 rm -f $dummy.c $dummy # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit 0 ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit 0 ;; c34*) echo c34-convex-bsd exit 0 ;; c38*) echo c38-convex-bsd exit 0 ;; c4*) echo c4-convex-bsd exit 0 ;; esac fi cat >&2 <<EOF $0: unable to guess system type This script, last modified $timestamp, has failed to recognize the operating system you are using. It is advised that you download the most up to date version of the config scripts from ftp://ftp.gnu.org/pub/gnu/config/ If the version you run ($0) is already up to date, please send the following data and any information you think might be pertinent to <config-patches@gnu.org> in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/install-sh��������������������������������������������������������������������������0000755�0000764�0000764�00000012736�11533026402�014364� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # install - install a program, script, or datafile # This comes from X11R5 (mit/util/scripts/install.sh). # # Copyright 1991 by the Massachusetts Institute of Technology # # Permission to use, copy, modify, distribute, and sell this software and its # documentation for any purpose is hereby granted without fee, provided that # the above copyright notice appear in all copies and that both that # copyright notice and this permission notice appear in supporting # documentation, and that the name of M.I.T. not be used in advertising or # publicity pertaining to distribution of the software without specific, # written prior permission. M.I.T. makes no representations about the # suitability of this software for any purpose. It is provided "as is" # without express or implied warranty. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. It can only install one file at a time, a restriction # shared with many OS's install programs. # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit="${DOITPROG-}" # put in absolute paths if you don't have them in your path; or use env. vars. mvprog="${MVPROG-mv}" cpprog="${CPPROG-cp}" chmodprog="${CHMODPROG-chmod}" chownprog="${CHOWNPROG-chown}" chgrpprog="${CHGRPPROG-chgrp}" stripprog="${STRIPPROG-strip}" rmprog="${RMPROG-rm}" mkdirprog="${MKDIRPROG-mkdir}" transformbasename="" transform_arg="" instcmd="$mvprog" chmodcmd="$chmodprog 0755" chowncmd="" chgrpcmd="" stripcmd="" rmcmd="$rmprog -f" mvcmd="$mvprog" src="" dst="" dir_arg="" while [ x"$1" != x ]; do case $1 in -c) instcmd="$cpprog" shift continue;; -d) dir_arg=true shift continue;; -m) chmodcmd="$chmodprog $2" shift shift continue;; -o) chowncmd="$chownprog $2" shift shift continue;; -g) chgrpcmd="$chgrpprog $2" shift shift continue;; -s) stripcmd="$stripprog" shift continue;; -t=*) transformarg=`echo $1 | sed 's/-t=//'` shift continue;; -b=*) transformbasename=`echo $1 | sed 's/-b=//'` shift continue;; *) if [ x"$src" = x ] then src=$1 else # this colon is to work around a 386BSD /bin/sh bug : dst=$1 fi shift continue;; esac done if [ x"$src" = x ] then echo "install: no input file specified" exit 1 else true fi if [ x"$dir_arg" != x ]; then dst=$src src="" if [ -d $dst ]; then instcmd=: chmodcmd="" else instcmd=mkdir fi else # Waiting for this to be detected by the "$instcmd $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if [ -f $src -o -d $src ] then true else echo "install: $src does not exist" exit 1 fi if [ x"$dst" = x ] then echo "install: no destination specified" exit 1 else true fi # If destination is a directory, append the input filename; if your system # does not like double slashes in filenames, you may need to add some logic if [ -d $dst ] then dst="$dst"/`basename $src` else true fi fi ## this sed command emulates the dirname command dstdir=`echo $dst | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'` # Make sure that the destination directory exists. # this part is taken from Noah Friedman's mkinstalldirs script # Skip lots of stat calls in the usual case. if [ ! -d "$dstdir" ]; then defaultIFS=' ' IFS="${IFS-${defaultIFS}}" oIFS="${IFS}" # Some sh's can't handle IFS=/ for some reason. IFS='%' set - `echo ${dstdir} | sed -e 's@/@%@g' -e 's@^%@/@'` IFS="${oIFS}" pathcomp='' while [ $# -ne 0 ] ; do pathcomp="${pathcomp}${1}" shift if [ ! -d "${pathcomp}" ] ; then $mkdirprog "${pathcomp}" else true fi pathcomp="${pathcomp}/" done fi if [ x"$dir_arg" != x ] then $doit $instcmd $dst && if [ x"$chowncmd" != x ]; then $doit $chowncmd $dst; else true ; fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dst; else true ; fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dst; else true ; fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dst; else true ; fi else # If we're going to rename the final executable, determine the name now. if [ x"$transformarg" = x ] then dstfile=`basename $dst` else dstfile=`basename $dst $transformbasename | sed $transformarg`$transformbasename fi # don't allow the sed command to completely eliminate the filename if [ x"$dstfile" = x ] then dstfile=`basename $dst` else true fi # Make a temp file name in the proper directory. dsttmp=$dstdir/#inst.$$# # Move or copy the file name to the temp name $doit $instcmd $src $dsttmp && trap "rm -f ${dsttmp}" 0 && # and set any options; do chmod last to preserve setuid bits # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $instcmd $src $dsttmp" command. if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; else true;fi && if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; else true;fi && if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; else true;fi && if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; else true;fi && # Now rename the file to the real destination. $doit $rmcmd -f $dstdir/$dstfile && $doit $mvcmd $dsttmp $dstdir/$dstfile fi && exit 0 ����������������������������������Gauche-gl-0.5.1/config.sub��������������������������������������������������������������������������0000755�0000764�0000764�00000066305�11533026402�014344� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 # Free Software Foundation, Inc. timestamp='2001-06-08' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, # Boston, MA 02111-1307, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit 0 ;; --version | -v ) echo "$version" ; exit 0 ;; --help | --h* | -h ) echo "$usage"; exit 0 ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit 0;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | storm-chaos* | os2-emx* | windows32-*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc \ | arm | arme[lb] | arm[bl]e | armv[2345] | armv[345][lb] | strongarm | xscale \ | pyramid | mn10200 | mn10300 | tron | a29k \ | 580 | i960 | h8300 \ | x86 | ppcbe | mipsbe | mipsle | shbe | shle \ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \ | hppa64 \ | alpha | alphaev[4-8] | alphaev56 | alphapca5[67] \ | alphaev6[78] \ | we32k | ns16k | clipper | i370 | sh | sh[34] \ | powerpc | powerpcle \ | 1750a | dsp16xx | pdp10 | pdp11 \ | mips16 | mips64 | mipsel | mips64el \ | mips64orion | mips64orionel | mipstx39 | mipstx39el \ | mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \ | mips64vr5000 | mips64vr5000el | mcore | s390 | s390x \ | sparc | sparclet | sparclite | sparc64 | sparcv9 | sparcv9b \ | v850 | c4x \ | thumb | d10v | d30v | fr30 | avr | openrisc | tic80 \ | pj | pjl | h8500 | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. # FIXME: clean up the formatting here. vax-* | tahoe-* | i*86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | c[123]* \ | arm-* | armbe-* | armle-* | armv*-* | strongarm-* | xscale-* \ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \ | power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \ | xmp-* | ymp-* \ | x86-* | ppcbe-* | mipsbe-* | mipsle-* | shbe-* | shle-* \ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \ | hppa2.0n-* | hppa64-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphapca5[67]-* \ | alphaev6[78]-* \ | we32k-* | cydra-* | ns16k-* | pn-* | np1-* | xps100-* \ | clipper-* | orion-* \ | sparclite-* | pdp10-* | pdp11-* | sh-* | sh[34]-* | sh[34]eb-* \ | powerpc-* | powerpcle-* | sparc64-* | sparcv9-* | sparcv9b-* | sparc86x-* \ | mips16-* | mips64-* | mipsel-* \ | mips64el-* | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \ | mipstx39-* | mipstx39el-* | mcore-* \ | f30[01]-* | f700-* | s390-* | s390x-* | sv1-* | t3e-* \ | [cjt]90-* \ | m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \ | thumb-* | v850-* | d30v-* | tic30-* | tic80-* | c30-* | fr30-* \ | bs2000-* | tic54x-* | c54x-* | x86_64-* | pj-* | pjl-*) ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | ymp) basic_machine=ymp-cray os=-unicos ;; cray2) basic_machine=cray2-cray os=-unicos ;; [cjt]90) basic_machine=${basic_machine}-cray os=-unicos ;; crds | unos) basic_machine=m68k-crds ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mipsel*-linux*) basic_machine=mipsel-unknown os=-linux-gnu ;; mips*-linux*) basic_machine=mips-unknown os=-linux-gnu ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; mmix*) basic_machine=mmix-knuth os=-mmixware ;; monitor) basic_machine=m68k-rom68k os=-coff ;; msdos) basic_machine=i386-pc os=-msdos ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pentium | p5 | k5 | k6 | nexgen) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon) basic_machine=i686-pc ;; pentiumii | pentium2) basic_machine=i686-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sparclite-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=t3e-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; tower | tower-32) basic_machine=m68k-ncr ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; windows32) basic_machine=i386-pc os=-windows32-msvcrt ;; xmp) basic_machine=xmp-cray os=-unicos ;; xps | xps100) basic_machine=xps100-honeywell ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; mips) if [ x$os = x-linux-gnu ]; then basic_machine=mips-unknown else basic_machine=mips-mips fi ;; romp) basic_machine=romp-ibm ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh3 | sh4) basic_machine=sh-unknown ;; sparc | sparcv9 | sparcv9b) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; c4x*) basic_machine=c4x-none os=-coff ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \ | -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* | -os2*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto*) os=-nto-qnx ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-ibm) os=-aix ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -ptx*) vendor=sequent ;; -vxsim* | -vxworks*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/mkinstalldirs�����������������������������������������������������������������������0000755�0000764�0000764�00000001324�11533026402�015155� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman <friedman@prep.ai.mit.edu> # Created: 1993-05-16 # Public domain # $Id: mkinstalldirs,v 1.1 2003-10-10 02:19:54 shirok Exp $ errstatus=0 for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr fi fi pathcomp="$pathcomp/" done done exit $errstatus # mkinstalldirs ends here ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/Makefile.in�������������������������������������������������������������������������0000644�0000764�0000764�00000003434�11533026402�014420� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������CONFIG_GENERATED = Makefile Gauche-gl.gpd \ config.cache config.log config.status autom4te*.cache .PHONY: all check clean distclean install maintainer-clean GAUCHE_CONFIG = "@GAUCHE_CONFIG@" INSTALL = "@GAUCHE_INSTALL@" DESTDIR = SCM_INSTALL_DIR = "$(DESTDIR)`$(GAUCHE_CONFIG) --sitelibdir`" INSTALL_ROOT = "$(DESTDIR)`$(GAUCHE_CONFIG) --prefix`" ENABLE_CG = @ENABLE_CG@ all : cd src; $(MAKE) all if test X$(ENABLE_CG) != X; then (cd cg; $(MAKE) all); fi cd doc; $(MAKE) all check : all cd src; $(MAKE) check if test X$(ENABLE_CG) != X; then (cd cg; $(MAKE) check); fi clean : rm -rf core *~ cd src; $(MAKE) clean cd lib; $(MAKE) clean cd cg; $(MAKE) clean cd doc; $(MAKE) clean distclean : clean cd src; $(MAKE) distclean cd lib; $(MAKE) distclean cd cg; $(MAKE) distclean cd doc; $(MAKE) distclean rm -rf $(CONFIG_GENERATED) install : cd src; $(MAKE) install cd lib; $(MAKE) install if test X$(ENABLE_CG) != X; then (cd cg; $(MAKE) install); fi cd doc; $(MAKE) install $(INSTALL) -m 444 -T $(SCM_INSTALL_DIR)/.packages Gauche-gl.gpd uninstall : cd src; $(MAKE) uninstall cd lib; $(MAKE) uninstall if test X$(ENABLE_CG) != X; then (cd cg; $(MAKE) uninstall); fi cd doc; $(MAKE) uninstall $(INSTALL) -U $(SCM_INSTALL_DIR)/.packages Gauche-gl.gpd maintainer-clean : clean cd src; $(MAKE) maintainer-clean cd lib; $(MAKE) maintainer-clean cd cg; $(MAKE) maintainer-clean cd doc; $(MAKE) maintainer-clean rm -rf configure VERSION $(CONFIG_GENERATED) # We don't normally install examples. On MinGW, it will be useful to # include examples in the bindary distribution. install-examples : install $(INSTALL) -T $(INSTALL_ROOT) -m 444 \ examples/gears.scm examples/mandelbrot.scm \ examples/glbook/*.scm examples/glbook/README ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/VERSION�����������������������������������������������������������������������������0000644�0000764�0000764�00000000006�11617171615�013425� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������0.5.1 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/INSTALL�����������������������������������������������������������������������������0000644�0000764�0000764�00000004464�11617171625�013423� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Gauche-gl - Gauche OpenGL binding Up-to-date information about Gauche-gl is posted to the following URL: http://practical-scheme.net/gauche/ Prerequisites ---------------------------------------------------------- * Gauche 0.9.1 or later must be installed. * OpenGL 1.1 or later, or Mesa 3.0 or later, required. * GLUT 3.7 or later is required (except when you compile on MinGW; see below.) Quick Start ---------------------------------------------------------- % ./configure % make % make install Configure script figures out the necessary compiler options and the install location from the installed Gauche. Location of GLUT Library ---------------------------------------------------------- If you have GLUT installed in non-standard place, you have to tell the configure script where it is. ./configure --with-glut=DIR On MinGW, you can choose an option to use freeglut-2.6 binary included in the source tree instead of a separate GLUT library. The freeglut library is statically linked, which is convenient if you want to distribute your script. If you choose to do so, configure with the following option. ./configure --with-glut=mingw-static If you distribute compiled libgauche-glut.dll with statically linked freeglut, check win32/freeglut-2.6.0-3/Copying.txt. Freeglut is basically a MIT-like license, but you need to include the copyright notice in your distribution. NVidia Cg binding ---------------------------------------------------------- Optionally you can build and install NVidia's Cg Toolkit bindings, written by Issac Trotts. It only covers a part of API yet, but some examples are runnable. To build and install Cg binding, give --enable-cg to the configure script. ./configure --enable-cg NVidia's Cg Toolkit has to be installed before building the binding. You can download the toolkit from the following URL. http://developer.nvidia.com/object/cg_toolkit.html Platform-specific information ---------------------------------------------------------- It is reported that Mesa in FreeBSD ports is compiled with pthreads enabled. Thus Gauche-gl can't be linked unless Gauche itself is compiled with pthreads. The configure script of Gauche prints warning if you specify pthreads, but it is safe as far as you don't call make-thread in your program. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/���������������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�014165� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/cg/������������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�014556� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/cg/run���������������������������������������������������������������������0000755�0000764�0000764�00000000172�11533026402�015310� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh if [ "$1" = "" ]; then echo "Usage: ./run <program.scm>" else gosh -I../../lib -I../../src -I../../cg $@ fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/cg/checkered-sphere-cg.scm�������������������������������������������������0000644�0000764�0000764�00000040602�11533026402�021054� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ; Basic example of the use of the Cg runtime in a simple OpenGL program. ; ; This demo originated from examples/runtime_ogl_vertex_fragment/ in the Cg ; distribution. It was ported to Gauche by Issac Trotts in 2005. ; ; The port involved some changes. ; The function cgSetErrorCallback is ; not explicitly called, since the Gauche Cg binding automatically ; sets things up to generate an informative exception whenever a Cg ; error occurs. ; The vertex program and fragment program are ; kept in this file as strings rather than in separate files. ; Scheme's nice handling of multiline literal strings makes this a ; reasonable thing to do, though it does seem to play havoc on ; syntax highlighting in emacs and Vim. ; The computation of the checkerboard was made more efficient to avoid a long ; wait at startup. ; A display list was added to minimize the amount of traffic on the bus, in the hope ; that the occasional slow-downs would go away. This didn't really work as well ; as I had hoped. The C version doesn't seem to have this problem, at least not ; as bad, so I guess it has something to do with garbage collection turning on from ; time to time. ; ; -ijt ; Here is the original copyright notice: ; ; Copyright NVIDIA Corporation 2002 ; TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW THIS SOFTWARE IS PROVIDED ; *AS IS* AND NVIDIA AND ITS SUPPLIERS DISCLAIM ALL WARRANTIES EITHER EXPRESS ; OR IMPLIED INCLUDING BUT NOT LIMITED TO IMPLIED WARRANTIES OF MERCHANTABILITY ; AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL NVIDIA OR ITS SUPPLIERS ; BE LIABLE FOR ANY SPECIAL INCIDENTAL INDIRECT OR CONSEQUENTIAL DAMAGES ; WHATSOEVER (INCLUDING WITHOUT LIMITATION DAMAGES FOR LOSS OF BUSINESS PROFITS ; BUSINESS INTERRUPTION LOSS OF BUSINESS INFORMATION OR ANY OTHER PECUNIARY LOSS) ; ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE EVEN IF NVIDIA HAS ; BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. (use gl) (use gl.glut) (use gl.math3d) (use gl.cg) (use gauche.sequence) (use gauche.uvector) (use gauche.array) (define *context* #f) ;; Choose the vertex and fragment profiles to use. Try to use ;; CG_PROFILE_ARBVFP1 and CG_PROFILE_ARBFP1 depending on hardware support. ;; If those aren't available fall back to CG_PROFILE_VP30 and ;; CG_PROFILE_FP30 respectively. (define *vertex-profile* #f) (define *fragment-profile* #f) (define *vertex-program-string* " void main(float4 Pobject : POSITION, float3 Nobject : NORMAL, float2 TexUV : TEXCOORD0, float3 diffuse : TEXCOORD1, float3 specular : TEXCOORD2, uniform float4x4 ModelViewProj, uniform float4x4 ModelView, uniform float4x4 ModelViewIT, out float4 HPosition : POSITION, out float3 Peye : TEXCOORD0, out float3 Neye : TEXCOORD1, out float2 uv : TEXCOORD2, out float3 Kd : COLOR0, out float3 Ks : COLOR1) { // compute homogeneous position of vertex for rasterizer HPosition = mul(ModelViewProj, Pobject); // transform position and normal from model-space to view-space Peye = mul(ModelView, Pobject).xyz; Neye = mul(ModelViewIT, float4(Nobject, 0)).xyz; // pass uv, Kd, and Ks through unchanged; if they are varying // per-vertex, however, they'll be interpolated before being // passed to the fragment program. uv = TexUV; Kd = diffuse; Ks = specular; } ") (define *fragment-program-string* " // Utility functions that return the appropriate components from the vector // of lighting coefficients returned by the standard library lighting // funciton, lit(). half diffuse(half4 l) { return l.y; } half specular(half4 l) { return l.z; } // Main shader. half4 main(float3 Peye : TEXCOORD0, half3 Neye : TEXCOORD1, half2 uv : TEXCOORD2, half3 Kd : COLOR0, half3 Ks : COLOR1, uniform sampler2D diffuseMap, uniform float3 Plight, uniform half3 lightColor, uniform half3 shininess) : COLOR { // Normalize surface normal, vector to light source, and vector // to the viewer half3 N = normalize(Neye); half3 L = normalize(Plight - Peye); half3 V = normalize(-Peye); // Compute half-angle vector for specular lighting half3 H = normalize(L + V); // Compute lighting values. lit() returns the diffuse coefficient // in y (or zero, if NdotL < 0), and the specular coefficient in z // (or zero, also if NdotL < 0). half NdotL = dot(N, L), NdotH = dot(N, H); half4 lighting = lit(NdotL, NdotH, shininess); // Compute overall color for the fragment. Scale sum of diffuse // and specular contributions together and by the light color. half tmp = (half)tex2D(diffuseMap, uv).x; half3 tmp3 = half3(tmp,tmp,tmp); // half eps = 0.005; // half tmp = 0.5*(1.0+sin(16*3.1415927*uv.x)*sin(16*3.1415927*uv.y)); // tmp = tmp < (0.5-eps) ? 0.1 : (tmp > 0.5+eps) ? 0.7 : 0.5; // half3 tmp3 = half3(tmp,tmp,tmp); half3 C = lightColor * (diffuse(lighting) * Kd * tmp3 + specular(lighting) * Ks); // Here is a way to do ad-hoc antialiasing by turning on alpha-blending // wherever the normal is roughly perpendicular to the viewing vector. // -ijt // half epsz = 0.2; // return half4(C, abs(N.z)<=epsz?0.2:1.0); return half4(C, 1); // Set the alpha value to 1. } ") (define *vertex-program* #f) (define *fragment-program* #f) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; Main program; do basic GLUT and Cg setup but leave most of the work ;; to the on-display() function. (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_RGB GLUT_DEPTH GLUT_ALPHA)) (glut-init-window-size 512 512) (glut-create-window "Cg checkered sphere demo") (glut-keyboard-func keyboard) (glut-display-func on-display) (glut-main-loop) 0) ;; display callback function (define on-display (let ((have-initialized #f) (cur-time 0)) (lambda () (if (not have-initialized) (begin ;; Do one-time setup only once; setup Cg programs and textures ;; and set up Open-gL state. (load-gpu-programs) (load-textures) (gl-enable GL_DEPTH_TEST) (gl-enable GL_BLEND) (gl-blend-func GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA) (set! have-initialized #t) )) ;; The usual Open-gL stuff to clear the screen and set up viewing. (gl-clear-color .25 .25 .25 1.) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 30. 1.0 .1 100) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (glu-look-at 4 4 -4 0 0 0 0 1 0) ;; Make the object rotate a bit each time the display function ;; is called (gl-rotate (modulo cur-time 360) 0 1 0) ;; Now make sure that the vertex and fragment programs loaded ;; in Load-cg-programs) are bound. (cg-gl-bind-program *vertex-program*) (cg-gl-bind-program *fragment-program*) ;; Bind uniform parameters to vertex shader (cg-gl-set-state-matrix-parameter (cg-get-named-parameter *vertex-program* "ModelViewProj") CG_GL_MODELVIEW_PROJECTION_MATRIX CG_GL_MATRIX_IDENTITY) (cg-gl-set-state-matrix-parameter (cg-get-named-parameter *vertex-program* "ModelView") CG_GL_MODELVIEW_MATRIX CG_GL_MATRIX_IDENTITY) (cg-gl-set-state-matrix-parameter (cg-get-named-parameter *vertex-program* "ModelViewIT") CG_GL_MODELVIEW_MATRIX CG_GL_MATRIX_INVERSE_TRANSPOSE) ;; We can also go ahead and bind varying parameters to vertex shader ;; that we just want to have the same value for all vertices. The ;; vertex shader could be modified so that these were uniform for ;; better efficiency but this gives us flexibility for the future. (cg-gl-set-parameter (cg-get-named-parameter *vertex-program* "diffuse") '#f32(.7 .2 .2)) (cg-gl-set-parameter (cg-get-named-parameter *vertex-program* "specular") '#f32(.9 .9 .9)) ;; Now bind uniform parameters to fragment shader (cg-gl-set-parameter (cg-get-named-parameter *fragment-program* "Plight") #,(vector4f 3 2 -3 1)) (cg-gl-set-parameter (cg-get-named-parameter *fragment-program* "lightColor") '#f32(1 1 1)) (cg-gl-set-parameter (cg-get-named-parameter *fragment-program* "shininess") 40) ;; And finally enable the approprate texture for fragment shader; the ;; texture was originally set up in load-textures). (cg-gl-enable-texture-parameter (cg-get-named-parameter *fragment-program* "diffuseMap")) ;; And go ahead and draw the scene geometry (draw-geometry) ;; Disable the texture now that we're done with it. (cg-gl-disable-texture-parameter (cg-get-named-parameter *fragment-program* "diffuseMap")) (glut-swap-buffers) (inc! cur-time) ;; Force another display so that the object keeps moving (glut-post-redisplay) ))) (define GL_GENERATE_MIPMAP #x8191) (define (load-textures) ;; There is only one texture needed here--we'll set up a basic ;; checkerboard--which is used to modulate the diffuse channel in the ;; fragment shader. (let ((handle (ref (gl-gen-textures 1) 0))) ;; Basic Open-gL texture state setup (gl-bind-texture GL_TEXTURE_2D handle) (auto-generate-mipmaps! #t) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_LINEAR_MIPMAP_LINEAR) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_LINEAR) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_CLAMP_TO_EDGE) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_CLAMP_TO_EDGE) ;; Fill in the texture map. (let* ((res 256) (data (make-f32array (shape 0 res 0 res) 0.0)) (bleh (/ res 16))) (dotimes (i res) (dotimes (j res) (if (= 0 (modulo (+ (floor (/ i bleh)) (floor (/ j bleh))) 2)) (array-set! data i j 0.1) (array-set! data i j 0.7) ))) (gl-tex-image-2d GL_TEXTURE_2D 0 GL_LUMINANCE res res 0 GL_LUMINANCE GL_FLOAT (array->f32vector data)) ;; Tell Cg which texture handle should be associated with the sampler2D ;; parameter to the fragment shader. (cg-gl-set-texture-parameter (cg-get-named-parameter *fragment-program* "diffuseMap") handle) ))) ;; This seems inefficient. Is there a way to get a pointer to the start of the ;; array's memory so we can just hand it off to OpenGL or Cg? -ijt (define (array->f32vector a) (vector->f32vector (array->vector a))) (define pi (imag-part (log -1.0))) (define nu 60) (define nv 60) (define us (tabulate-array (shape 0 nu) (lambda (iu) (/ iu (- nu 1))))) (define vs (tabulate-array (shape 0 nv) (lambda (iv) (/ iv (- nv 1))))) (define uvs (let ((uvs (make-f32array (shape 0 nu 0 nv 0 2) 0.0))) (dotimes (iu nu) (dotimes (iv nv) (array-set! uvs iu iv 0 (array-ref us iu)) (array-set! uvs iu iv 1 (array-ref vs iv)) )) (array->f32vector uvs))) (define thetas (array-map (cut * pi <>) us)) (define phis (array-map (cut * 2.0 pi <>) vs)) (define P ; points (let ((xyz (make-f32array (shape 0 nu 0 nv 0 3) 0.0))) (dotimes (iu nu) (dotimes (iv nv) (let* ((theta (array-ref thetas iu)) (phi (array-ref phis iv))) (array-set! xyz iu iv 0 (* (sin theta) (sin phi))) (array-set! xyz iu iv 1 (* (sin theta) (cos phi))) (array-set! xyz iu iv 2 (* (cos theta)))))) (array->f32vector xyz))) (define N P) ; normals (define ntris (* 2 (- nu 1) (- nv 1))) (define indices-per-tri 3) (define indices (let* ((indices (make-u32vector (* ntris indices-per-tri))) (vert-index (lambda (iu iv) (+ iu (* iv nu)))) (k -1) (set-next! (lambda (a b) (u32vector-set! indices (inc! k) (vert-index a b))))) (dotimes (iu (- nu 1)) (dotimes (iv (- nv 1)) (set-next! iu iv) (set-next! (+ iu 1) iv) (set-next! (+ iu 1) (+ iv 1)) (set-next! iu iv) (set-next! (+ iu 1) (+ iv 1)) (set-next! iu (+ iv 1)) )) indices)) ;; Geometry creation and drawing function; we'll just draw a sphere. (define draw-geometry (let ((first-time #t) (display-list #f)) (lambda () ;; Tell Cg which of these data pointers are associated with which ;; parameters to the vertex shader so that when we call ;; cg-gLEnable-client-state) and then gl-draw-elements) the shader ;; gets the right input information. (if first-time (begin (cg-gl-set-parameter-pointer (cg-get-named-parameter *vertex-program* "Pobject") 3 GL_FLOAT 0 P) (cg-gl-set-parameter-pointer (cg-get-named-parameter *vertex-program* "Nobject") 3 GL_FLOAT 0 N) (cg-gl-set-parameter-pointer (cg-get-named-parameter *vertex-program* "TexUV") 2 GL_FLOAT 0 uvs) ;; In an earlier version of the ported demo, I was passing ;; in (array->f32vector uvs) since uvs was an array. ;; This produced undesired results because the temporary f32vector ;; was then garbage collected after a few seconds. (set! first-time #f))) (let ((names (list "Pobject" "Nobject" "TexUV"))) ;; Enable the bindings to the parameters (for-each (lambda (name) (cg-gl-enable-client-state (cg-get-named-parameter *vertex-program* name))) names) ;; Enable the texture parameter as well. (cg-gl-enable-texture-parameter (cg-get-named-parameter *fragment-program* "diffuseMap")) ;; And now draw the geometry. (cond (display-list (gl-call-list display-list)) (else (set! display-list (gl-gen-lists 1)) (gl-new-list display-list GL_COMPILE_AND_EXECUTE) (gl-draw-elements GL_TRIANGLES indices) (gl-end-list) )) ;; Be a good citizen and disable the various bindings we set up above. (for-each (lambda (name) (cg-gl-disable-client-state (cg-get-named-parameter *vertex-program* name))) names) (cg-gl-disable-texture-parameter (cg-get-named-parameter *fragment-program* "diffuseMap")) )))) (define (keyboard key x y) (let ((ikey (if (char? key) (char->integer key) key))) (case key (('q' 'Q' #\escape) (cg-destroy-context *context*) (exit 0))))) (define (load-gpu-programs) (set! *context* (cg-create-context)) (set! *vertex-profile* (cond ((cg-gl-is-profile-supported CG_PROFILE_ARBVP1) CG_PROFILE_ARBVP1) ((cg-gl-is-profile-supported CG_PROFILE_VP30) CG_PROFILE_VP30) (else (error "Neither arbvp1 or vp30 vertex profiles supported on this system.")))) (set! *fragment-profile* (cond ((cg-gl-is-profile-supported CG_PROFILE_ARBFP1) CG_PROFILE_ARBFP1) ((cg-gl-is-profile-supported CG_PROFILE_FP30) CG_PROFILE_FP30) (else (error "Neither arbfp1 nor fp30 fragment profiles supported")))) (set! *vertex-program* (cg-create-program *context* CG_SOURCE *vertex-program-string* *vertex-profile* "main" '() )) (set! *fragment-program* (cg-create-program *context* CG_SOURCE *fragment-program-string* *fragment-profile* "main" '() )) (cg-compile-program *vertex-program*) (cg-compile-program *fragment-program*) (cg-gl-enable-profile *vertex-profile*) (cg-gl-enable-profile *fragment-profile*) (cg-gl-load-program *vertex-program*) (cg-gl-load-program *fragment-program*) ) ������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/cg/README������������������������������������������������������������������0000644�0000764�0000764�00000000560�11533026402�015437� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This directory contains a couple of examples ported from NVidia's Cg distribution. Porting is done by Issac Trotts. The original program is copyrighted by NVidia Corporation. See the source for the complete notice. A shell script `run' is included to run the demos conveniently. After building Gauche-gl with --enable-cg, try: ./run checkered-sphere-cg.scm ������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/cg/cg-gl-vertex-example.scm������������������������������������������������0000644�0000764�0000764�00000012303�11533026402�021216� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������; This is a port, to Gauche, of a demo included with the Cg distribution. ; Port by Issac Trotts, 2005 (use gl) (use gl.glut) (use gl.math3d) (use gl.cg) (use gauche.array) (use gauche.uvector) (use gauche.sequence) (use srfi-1) ; list ops ;; Static Data (define *texture-res* 512) (define *context* #f) (define *program* #f) (define *kd-param* #f) ; diffuse lighting coefficient (define *model-view-proj-param* #f) (define *test-color-param* #f) (define *profile* #f) (define *light-diffuse* (f32vector 1 0 0 1)) (define *light-position* (f32vector 1 1 1 0)) (define *cube-normals* (list (vector4f -1.0 0.0 0.0) (vector4f 0.0 1.0 0.0) (vector4f 1.0 0.0 0.0) (vector4f 0.0 -1.0 0.0) (vector4f 0.0 0.0 1.0) (vector4f 0.0 0.0 -1.0) )) (define *cube-faces* #,(<u32array> (0 6 0 4) 0 1 2 3 3 2 6 7 7 6 5 4 4 5 1 0 5 6 2 1 7 4 0 3)) (define *cube-vertices* (let* ((v (list-tabulate 8 (lambda (i) (vector4f 0 0 0)))) (multiset (lambda (indices val) (for-each (lambda (ij) (set! (ref (list-ref v (car ij)) (cadr ij)) val)) indices)))) (multiset '((0 0) (1 0) (2 0) (3 0)) -1) (multiset '((4 0) (5 0) (6 0) (7 0)) 1) (multiset '((0 1) (1 1) (4 1) (5 1)) -1) (multiset '((2 1) (3 1) (6 1) (7 1)) 1) (multiset '((0 2) (3 2) (4 2) (7 2)) 1) (multiset '((1 2) (2 2) (5 2) (6 2)) -1) v )) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (define (draw-cube) ; ;; Set various uniform parameters including the Model-view-projection ;; matrix for transforming the incoming position into HPOS. ; (if *kd-param* (cg-gl-set-parameter *kd-param* 1.0 1.0 0.0 1.0)) ;; Set the concatenated modelview and projection matrices (if *model-view-proj-param* (cg-gl-set-state-matrix-parameter *model-view-proj-param* CG_GL_MODELVIEW_PROJECTION_MATRIX CG_GL_MATRIX_IDENTITY)) (cg-gl-bind-program *program*) (cg-gl-enable-profile *profile*) ; ;; Create cube with per-vertex varying attributes ; (dotimes (i 6) (gl-begin GL_QUADS) (gl-normal (list-ref *cube-normals* 0)) (cg-gl-set-parameter *test-color-param* 1.0 0.0 0.0) (gl-vertex (list-ref *cube-vertices* (array-ref *cube-faces* i 0))) (cg-gl-set-parameter *test-color-param* 0.0 1.0 0.0) (gl-vertex (list-ref *cube-vertices* (array-ref *cube-faces* i 1))) (cg-gl-set-parameter *test-color-param* 0.0 0.0 1.0) (gl-vertex (list-ref *cube-vertices* (array-ref *cube-faces* i 2))) (cg-gl-set-parameter *test-color-param* 1.0 1.0 1.0) (gl-vertex (list-ref *cube-vertices* (array-ref *cube-faces* i 3))) (gl-end) ) (cg-gl-disable-profile *profile*) ) (define (display) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (draw-cube) (glut-swap-buffers) ) (define (initialize-glut args) (glut-init args) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_RGB GLUT_DEPTH)) (glut-create-window *program-name*) (glut-display-func display) ;; Enable a single Open-gL light. (gl-light GL_LIGHT0 GL_DIFFUSE *light-diffuse*) (gl-light GL_LIGHT0 GL_POSITION *light-position*) (gl-enable GL_LIGHT0) (gl-enable GL_LIGHTING) ;; Use depth buffering for hidden surface elimination. (gl-enable GL_DEPTH_TEST) ;; Setup the view of the cube. (gl-matrix-mode GL_PROJECTION) (glu-perspective 40.0 ; field of view in degree 1.0 ; aspect ratio 1.0 ; Z near 10.0 ; zfar ) (gl-matrix-mode GL_MODELVIEW) (glu-look-at 0.0 0.0 5.0 ; eye is at (0 0 5) 0.0 0.0 0.0 ; center is at (0 0 0) 0.0 1.0 0.0) ; up is in positive Y direction ;; Adjust cube position to be asthetic angle. (gl-translate 0.0 0.0 -1.0) (gl-rotate 60 1.0 0.0 0.0) (gl-rotate -20 0.0 0.0 1.0) ) (define (main args) (initialize-glut args) (set! *profile* (cond ((cg-gl-is-profile-supported CG_PROFILE_VP20) CG_PROFILE_VP20) ((cg-gl-is-profile-supported CG_PROFILE_ARBVP1) CG_PROFILE_ARBVP1) (else (format #t "Video card does not support vertex programs exiting...\n") (exit -1)))) ;; Test cg-context creation (set! *context* (cg-create-context)) ;; Test adding source text to context (set! *program* (cg-create-program-from-file *context* CG_SOURCE "cg-gl-vertex-example.cg" *profile* "main" #f)) (print "---- PROGRAM BEGIN ----") (print (cg-get-program-string *program* CG_COMPILED_PROGRAM)) (print "---- PROGRAM END ----") (flush) (if *program* (begin (cg-gl-load-program *program*) (set! *kd-param* (cg-get-named-parameter *program* "Kd")) (set! *model-view-proj-param* (cg-get-named-parameter *program* "ModelViewProj")) (set! *test-color-param* (cg-get-named-parameter *program* "IN.TestColor")) ) (begin (format #t "Invalid GPU program\n") (flush) (exit 1))) (glut-main-loop) ; (cg-destroy-program *program*) ; (cg-destroy-context *context*) 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/cg/cg-gl-vertex-example.cg�������������������������������������������������0000644�0000764�0000764�00000000740�11533026402�021027� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ struct appdata { float4 position : POSITION; float3 normal : NORMAL; float3 color : DIFFUSE; float3 TestColor : SPECULAR; }; struct vfconn { float4 HPOS : POSITION; float4 COL0 : COLOR0; }; vfconn main(appdata IN, uniform float4 Kd, uniform float4x4 ModelViewProj) { vfconn OUT; OUT.HPOS = mul(ModelViewProj, IN.position); OUT.COL0.xyz = Kd.xyz * IN.TestColor.xyz; OUT.COL0.w = 1.0; return OUT; } // main ��������������������������������Gauche-gl-0.5.1/examples/mandelbrot.scm�������������������������������������������������������������0000644�0000764�0000764�00000005616�11533026402�017030� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; ;; Calculate and show Mandelbrot set. ;; (use gauche.uvector) (use gl) (use gl.glut) (use math.const) (define *size* 256) (define *image* (make-u8vector (* *size* *size* 3) 0)) (define *tex* #f) (define *speed-phi* 0) (define *xrot* 0) (define *yrot* 0) (define (fill-image) (dotimes (y *size*) (dotimes (x *size*) (let ((i (* (+ (* y *size*) x) 3)) (z (make-rectangular (- (* 3 (/ x *size*)) 2) (- (* 3 (/ y *size*)) 1.5)))) (letrec ((rank (lambda (zn n) (cond ((>= n 16) 0) ((>= (magnitude zn) 2) n) (else (rank (+ (* zn zn) z) (+ n 1))))))) (let ((r (rank z 0))) (u8vector-set! *image* i (ash (logand r #xc) 4)) (u8vector-set! *image* (+ i 1) (ash (logand r #x2) 6)) (u8vector-set! *image* (+ i 2) (ash (logand r #x1) 7)) )))))) (define (init) (fill-image) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) (set! *tex* (u32vector-ref (gl-gen-textures 1) 0)) (gl-bind-texture GL_TEXTURE_2D *tex*) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_REPEAT) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_REPEAT) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST) (gl-tex-image-2d GL_TEXTURE_2D 0 GL_RGB *size* *size* 0 GL_RGB GL_UNSIGNED_BYTE *image*) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-enable GL_TEXTURE_2D) (gl-tex-env GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_REPLACE) (gl-bind-texture GL_TEXTURE_2D *tex*) (gl-push-matrix) (gl-load-identity) (gl-translate 0.5 0.5 0.0) (gl-rotate *xrot* 1.0 0.0 0.0) (gl-rotate *yrot* 0.0 1.0 0.0) (gl-translate -0.5 -0.5 0.0) (gl-begin GL_QUADS) (gl-tex-coord '#f32(0.0 0.0)) (gl-vertex '#f32(0.0 0.0)) (gl-tex-coord '#f32(0.0 1.0)) (gl-vertex '#f32(0.0 1.0)) (gl-tex-coord '#f32(1.0 1.0)) (gl-vertex '#f32(1.0 1.0)) (gl-tex-coord '#f32(1.0 0.0)) (gl-vertex '#f32(1.0 0.0)) (gl-end) (gl-pop-matrix) (glut-swap-buffers) (gl-disable GL_TEXTURE_2D) (animate) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0 1 0 1) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (animate) (let1 speed (abs (sin (* *speed-phi* pi/180))) (set! *xrot* (fmod (+ *xrot* (/ speed 172.0)) 360.0)) (set! *yrot* (fmod (+ *yrot* (/ speed 334.0)) 360.0)) (set! *speed-phi* (fmod (+ *speed-phi* 0.003) 360.0))) (glut-post-redisplay) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_RGB)) (glut-init-window-size 256 256) (glut-create-window "mandelbrot") (init) ; (glut-idle-func animate) (glut-reshape-func reshape) (glut-display-func disp) (glut-main-loop) 0 ) ������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/gl-plot.scm����������������������������������������������������������������0000644�0000764�0000764�00000006644�11533026402�016261� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; Contributed by Issac Trotts ;;; ;;; $Id: gl-plot.scm,v 1.1 2006-11-09 10:43:55 shirok Exp $ ;;; (use gl) (use gl.glut) (use math.const) (define *pad* 30) (define (range n) (define (aux acc n) (if (<= n 0) acc (aux (cons (- n 1) acc) (- n 1)))) (aux '() n)) (define (iter f ls) (cond ((null? ls)) ; do nothing ((pair? ls) (f (car ls)) (iter f (cdr ls))) (else (error "Cannot iterate over a non-list")))) (define (iter2 f lsa lsb) (cond ((or (null? lsa) (null? lsb))) ; do nothing ((and (pair? lsa) (pair? lsb)) (f (car lsa) (car lsb)) (iter2 f (cdr lsa) (cdr lsb))) (else (error "Cannot iterate over a non-list")))) (define (draw-string x y s) (gl-raster-pos x y) (iter (lambda (c) (glut-bitmap-character GLUT_BITMAP_8_BY_13 (char->integer c))) (string->list s))) (define plot (let1 have-called-glut-init #f (lambda (f a b) (let ((w 500) (h 500)) (if (not have-called-glut-init) (begin (glut-init '()) (set! have-called-glut-init #t))) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_RGBA)) (glut-init-window-size w h) (glut-create-window "plot") ; Initialize GL (begin (gl-enable GL_BLEND) (gl-blend-func GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA) (gl-enable GL_LINE_SMOOTH) (gl-clear-color 1.0 1.0 1.0 1.0) ) (let* ((xs (map (lambda (x) (+ a (* (- b a) (/ x w)))) (range w))) (ys (map f xs)) (mx (apply max ys)) (mn (apply min ys))) (glut-reshape-func (lambda (new-w new-h) (gl-viewport 0 0 new-w new-h) (set! w new-w) (set! h new-h) )) (glut-display-func (lambda () (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 0 0 0 1) ;; Draw the plot (begin (gl-viewport *pad* *pad* (- w (* 2 *pad*)) (- h (* 2 *pad*))) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d a b mn mx) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-begin GL_LINE_STRIP) (iter2 (lambda (x y) (gl-vertex x y 0.0)) xs ys) (gl-end) ) ;; Change to pixel coordinates (begin (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0 w 0 h) ) ;; Show a, b, min, max. (let1 pad2 (/ *pad* 2) (draw-string pad2 (/ h 2) (format #f "~a" a)) (draw-string (- w *pad*) (/ h 2) (format #f "~a" b)) (draw-string (/ w 2) (- h pad2) (format #f "~a" mx)) (draw-string (/ w 2) pad2 (format #f "~a" mn)) ) ;; Todo: Show axis labels. ;; Todo: show tick marks (glut-swap-buffers) )) (glut-keyboard-func (lambda (key x y) (case (integer->char key) ((#\q) (error "Don't worry about this error."))))) (guard (exc (else 'foo)) (glut-main-loop)) 0 ))))) ��������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/��������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�015442� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/run�����������������������������������������������������������������0000755�0000764�0000764�00000001675�11533026402�016205� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/env gosh ;; Run through all examples. (use file.util) (use srfi-1) (define (get-scripts) (sort (sys-glob "example*.scm") (lambda (a b) (let ((ma (#/example(\d+)-(\d+)/ a)) (mb (#/example(\d+)-(\d+)/ b))) (or (< (x->integer (ma 1)) (x->integer (mb 1))) (and (= (x->integer (ma 1)) (x->integer (mb 1))) (< (x->integer (ma 2)) (x->integer (mb 2))))))))) (define (get-script-titles scripts) (map (lambda (f) (cond ((#/^\;\;\s*/ (with-input-from-file f read-line)) => (lambda (m) (m 'after))) (else f))) scripts)) (define (main args) (let* ((scripts (get-scripts)) (titles (get-script-titles scripts))) (for-each (lambda (script title) (print title) (sys-system #`"gosh -I../../lib -I../../src ,script")) scripts titles)) 0) ;; Local variables: ;; mode: scheme ;; end: �������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example7-1.scm������������������������������������������������������0000644�0000764�0000764�00000004154�11533026402�020032� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 7-1 Creating a Display List (use gl) (use gl.glut) (use math.const) (define *the-torus* 0) (define (torus numc numt) (let1 twopi (* 2 pi) (dotimes (i numc) (gl-begin GL_QUAD_STRIP) (dotimes (j (+ numt 1)) (for-each (lambda (k) (let* ((s (+ (modulo (+ i k) numc) 0.5)) (t (modulo j numt)) (x (* (+ 1 (* 0.1 (cos (* s (/ twopi numc))))) (cos (* t (/ twopi numt))))) (y (* (+ 1 (* 0.1 (cos (* s (/ twopi numc))))) (sin (* t (/ twopi numt))))) (z (* 0.1 (sin (* s (/ twopi numc)))))) (gl-vertex x y z))) '(1 0))) (gl-end)))) (define (init) (set! *the-torus* (gl-gen-lists 1)) (gl-new-list *the-torus* GL_COMPILE) (torus 8 25) (gl-end-list) (gl-shade-model GL_FLAT) (gl-clear-color 0.0 0.0 0.0 0.0) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 1.0 1.0 1.0) (gl-call-list *the-torus*) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 30 (/ w h) 1.0 100.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (glu-look-at 0 0 10 0 0 0 0 1 0) ) (define (keyboard key x y) (cond ((or (= key (char->integer #\x)) (= key (char->integer #\X))) (gl-rotate 30 1.0 0.0 0.0) (glut-post-redisplay)) ((or (= key (char->integer #\y)) (= key (char->integer #\Y))) (gl-rotate 30 0.0 1.0 0.0) (glut-post-redisplay)) ((or (= key (char->integer #\i)) (= key (char->integer #\I))) (gl-load-identity) (glu-look-at 0 0 10 0 0 0 0 1 0) (glut-post-redisplay)) ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-window-size 200 200) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example7-2.scm������������������������������������������������������0000644�0000764�0000764�00000002431�11533026402�020027� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 7-2 Using a Display list (use gl) (use gl.glut) (define *list-name* 0) (define (init) (set! *list-name* (gl-gen-lists 1)) (gl-new-list *list-name* GL_COMPILE) (gl-color 1.0 0.0 0.0) (gl-begin GL_TRIANGLES) (gl-vertex 0.0 0.0) (gl-vertex 1.0 0.0) (gl-vertex 0.0 1.0) (gl-end) (gl-translate 1.5 0.0 0.0) (gl-end-list) (gl-shade-model GL_FLAT) ) (define (draw-line) (gl-begin GL_LINES) (gl-vertex 0.0 0.5) (gl-vertex 15.0 0.5) (gl-end)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 0.0 1.0 0.0) (dotimes (i 10) (gl-call-list *list-name*)) (draw-line) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (glu-ortho-2d 0.0 1.0 (* -0.5 (/ h w)) (* 1.5 (/ h w))) (glu-ortho-2d 0.0 (* 2.0 (/ w h)) -0.5 1.5)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (cond ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 650 50) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example7-5.scm������������������������������������������������������0000644�0000764�0000764�00000004656�11533026402�020045� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 7-5 Multiple Display Lists to Define a Stroked Font (use gl) (use gl.glut) (use gauche.uvector) (use srfi-13) (define *data* '((#\A (0 0 PT) (0 9 PT) (1 10 PT) (4 10 PT) (5 9 PT) (5 0 STROKE) (0 5 PT) (5 5 END)) (#\E (5 0 PT) (0 0 PT) (0 10 PT) (5 10 STROKE) (0 5 PT) (4 5 END)) (#\P (0 0 PT) (0 10 PT) (4 10 PT) (5 9 PT) (5 6 PT) (4 5 PT) (0 5 END)) (#\R (0 0 PT) (0 10 PT) (4 10 PT) (5 9 PT) (5 6 PT) (4 5 PT) (0 5 END)) (#\S (0 1 PT) (1 0 PT) (4 0 PT) (5 1 PT) (5 4 PT) (4 5 PT) (1 5 PT) (0 6 PT) (0 9 PT) (1 10 PT) (4 10 PT) (5 9 END)))) (define (draw-letter commands) (gl-begin GL_LINE_STRIP) (for-each (lambda (command) (gl-vertex (car command) (cadr command)) (case (caddr command) ((PT) (values)) ((STROKE) (gl-end) (gl-begin GL_LINE_STRIP)) ((END) (gl-end) (gl-translate 8.0 0.0 0.0)))) commands)) (define (init) (let1 base (gl-gen-lists 128) (gl-list-base base) (for-each (lambda (letter) (gl-new-list (+ base (char->integer (car letter))) GL_COMPILE) (draw-letter (cdr letter)) (gl-end-list)) *data*) (gl-new-list (+ base (char->integer #\space)) GL_COMPILE) (gl-translate 8.0 0.0 0.0) (gl-end-list))) (define (print-stroked-string s) (gl-call-lists s)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 1.0 1.0 1.0) (gl-push-matrix) (gl-scale 2.0 2.0 2.0) (gl-translate 10.0 30.0 0.0) (print-stroked-string "A SPARE SERAPE APPEARS AS") (gl-pop-matrix) (gl-push-matrix) (gl-scale 2.0 2.0 2.0) (gl-translate 10.0 13.0 0.0) (print-stroked-string "APES PREPARE RARE PEPPERS") (gl-pop-matrix) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0.0 w 0.0 h) ) (define (keyboard key x y) (cond ((= key 32) ;space (glut-post-redisplay)) ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 440 120) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ����������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example1-2.scm������������������������������������������������������0000644�0000764�0000764�00000001471�11533026402�020024� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 1-2 (use gl) (use gl.glut) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-begin* GL_POLYGON (gl-vertex '#f32(0.25 0.25 0.0)) (gl-vertex '#f32(0.75 0.25 0.0)) (gl-vertex '#f32(0.75 0.75 0.0)) (gl-vertex '#f32(0.25 0.75 0.0)) ) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 1.0 0.0 1.0 -1.0 1.0) ) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window "hello") (init) (glut-display-func disp) (glut-keyboard-func keyboard) (glut-main-loop) 0 ) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example1-3.scm������������������������������������������������������0000644�0000764�0000764�00000002454�11533026402�020027� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 1-3 (use gl) (use gl.glut) (define *spin* 0.0) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-push-matrix) (gl-rotate *spin* 0.0 0.0 1.0) (gl-color '#f32(1.0 1.0 1.0)) (gl-rect '#f32(-25.0 -25.0) '#f32(25.0 25.0)) (gl-pop-matrix) (glut-swap-buffers) ) (define (spin-display) (set! *spin* (modulo (+ *spin* 2.0) 360.0)) (glut-post-redisplay) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho -50.0 50.0 -50.0 50.0 -1.0 1.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (mouse button state x y) (cond ((= button GLUT_LEFT_BUTTON) (when (= state GLUT_DOWN) (glut-idle-func spin-display))) ((= button GLUT_MIDDLE_BUTTON) (when (= state GLUT_DOWN) (glut-idle-func #f)))) ) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_RGB)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-mouse-func mouse) (glut-main-loop) 0) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example8-1.scm������������������������������������������������������0000644�0000764�0000764�00000002210�11533026402�020022� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 8-1 Drawing a Bitmapped Character (use gl) (use gl.glut) (use gauche.uvector) (define *rasters* '#u8(#xc0 #x00 #xc0 #x00 #xc0 #x00 #xc0 #x00 #xc0 #x00 #xff #x00 #xff #x00 #xc0 #x00 #xc0 #x00 #xc0 #x00 #xff #xc0 #xff #xc0)) (define (init) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (gl-clear-color 0.0 0.0 0.0 0.0)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 1.0 1.0 1.0) (gl-raster-pos 20 20) (gl-bitmap 10 12 0.0 0.0 11.0 0.0 *rasters*) (gl-bitmap 10 12 0.0 0.0 11.0 0.0 *rasters*) (gl-bitmap 10 12 0.0 0.0 11.0 0.0 *rasters*) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 w 0.0 h -1.0 1.0) (gl-matrix-mode GL_MODELVIEW) ) (define (keyboard key x y) (cond ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 100 100) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example8-2.scm������������������������������������������������������0000644�0000764�0000764�00000007014�11533026402�020032� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 8-2 Drawing a Complete Font (use gl) (use gl.glut) (use gauche.uvector) (define *space* '#u8(#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00)) (define *letters* '#(#u8(#x00 #x00 #xc3 #xc3 #xc3 #xc3 #xff #xc3 #xc3 #xc3 #x66 #x3c #x18) #u8(#x00 #x00 #xfe #xc7 #xc3 #xc3 #xc7 #xfe #xc7 #xc3 #xc3 #xc7 #xfe) #u8(#x00 #x00 #x7e #xe7 #xc0 #xc0 #xc0 #xc0 #xc0 #xc0 #xc0 #xe7 #x7e) #u8(#x00 #x00 #xfc #xce #xc7 #xc3 #xc3 #xc3 #xc3 #xc3 #xc7 #xce #xfc) #u8(#x00 #x00 #xff #xc0 #xc0 #xc0 #xc0 #xfc #xc0 #xc0 #xc0 #xc0 #xff) #u8(#x00 #x00 #xc0 #xc0 #xc0 #xc0 #xc0 #xc0 #xfc #xc0 #xc0 #xc0 #xff) #u8(#x00 #x00 #x7e #xe7 #xc3 #xc3 #xcf #xc0 #xc0 #xc0 #xc0 #xe7 #x7e) #u8(#x00 #x00 #xc3 #xc3 #xc3 #xc3 #xc3 #xff #xc3 #xc3 #xc3 #xc3 #xc3) #u8(#x00 #x00 #x7e #x18 #x18 #x18 #x18 #x18 #x18 #x18 #x18 #x18 #x7e) #u8(#x00 #x00 #x7c #xee #xc6 #x06 #x06 #x06 #x06 #x06 #x06 #x06 #x06) #u8(#x00 #x00 #xc3 #xc6 #xcc #xd8 #xf0 #xe0 #xf0 #xd8 #xcc #xc6 #xc3) #u8(#x00 #x00 #xff #xc0 #xc0 #xc0 #xc0 #xc0 #xc0 #xc0 #xc0 #xc0 #xc0) #u8(#x00 #x00 #xc3 #xc3 #xc3 #xc3 #xc3 #xc3 #xdb #xff #xff #xe7 #xc3) #u8(#x00 #x00 #xc7 #xc7 #xcf #xcf #xdf #xdb #xfb #xf3 #xf3 #xe3 #xe3) #u8(#x00 #x00 #x7e #xe7 #xc3 #xc3 #xc3 #xc3 #xc3 #xc3 #xc3 #xe7 #x7e) #u8(#x00 #x00 #xc0 #xc0 #xc0 #xc0 #xc0 #xfe #xc7 #xc3 #xc3 #xc7 #xfe) #u8(#x00 #x00 #x3f #x6e #xdf #xdb #xc3 #xc3 #xc3 #xc3 #xc3 #x66 #x3c) #u8(#x00 #x00 #xc3 #xc6 #xcc #xd8 #xf0 #xfe #xc7 #xc3 #xc3 #xc7 #xfe) #u8(#x00 #x00 #x7e #xe7 #x03 #x03 #x07 #x7e #xe0 #xc0 #xc0 #xe7 #x7e) #u8(#x00 #x00 #x18 #x18 #x18 #x18 #x18 #x18 #x18 #x18 #x18 #x18 #xff) #u8(#x00 #x00 #x7e #xe7 #xc3 #xc3 #xc3 #xc3 #xc3 #xc3 #xc3 #xc3 #xc3) #u8(#x00 #x00 #x18 #x3c #x3c #x66 #x66 #xc3 #xc3 #xc3 #xc3 #xc3 #xc3) #u8(#x00 #x00 #xc3 #xe7 #xff #xff #xdb #xdb #xc3 #xc3 #xc3 #xc3 #xc3) #u8(#x00 #x00 #xc3 #x66 #x66 #x3c #x3c #x18 #x3c #x3c #x66 #x66 #xc3) #u8(#x00 #x00 #x18 #x18 #x18 #x18 #x18 #x18 #x3c #x3c #x66 #x66 #xc3) #u8(#x00 #x00 #xff #xc0 #xc0 #x60 #x30 #x7e #x0c #x06 #x03 #x03 #xff) )) (define *font-offset* 0) (define (make-raster-font) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (set! *font-offset* (gl-gen-lists 128)) (dotimes (i 26) (gl-new-list (+ *font-offset* i (char->integer #\A)) GL_COMPILE) (gl-bitmap 8 13 0.0 2.0 10.0 0.0 (ref *letters* i)) (gl-end-list)) (gl-new-list (+ *font-offset* (char->integer #\space)) GL_COMPILE) (gl-bitmap 8 13 0.0 2.0 10.0 0.0 *space*) (gl-end-list)) (define (init) (gl-shade-model GL_FLAT) (make-raster-font)) (define (print-string s) (gl-push-attrib GL_LIST_BIT) (gl-list-base *font-offset*) (gl-call-lists s) (gl-pop-attrib)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-raster-pos 20 60) (print-string "THE QUICK BROWN FOX JUMPS") (gl-raster-pos 20 40) (print-string "OVER A LAZY DOG") (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 w 0.0 h -1.0 1.0) (gl-matrix-mode GL_MODELVIEW) ) (define (keyboard key x y) (cond ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 300 100) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example8-4.scm������������������������������������������������������0000644�0000764�0000764�00000005305�11533026402�020035� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 8-3 Use of glDrawPixels (use gl) (use gl.glut) (use gauche.uvector) ;; Create checkerboard image (define-constant *check-image-width* 64) (define-constant *check-image-height* 64) (define *check-image* (make-u8vector (* *check-image-height* *check-image-width* 3))) (define *zoom-factor* 1.0) (define *height* 0) (define (make-check-image) ;; NB: this must be easier once uniform array is implemented. (dotimes (i *check-image-height*) (dotimes (j *check-image-width*) (let ((ij (* (+ (* i *check-image-width*) j) 3)) (c (if (or (and (zero? (logand i #x08)) (zero? (logand j #x08))) (and (not (zero? (logand i #x08))) (not (zero? (logand j #x08))))) 0 255))) (set! (ref *check-image* ij) c) (set! (ref *check-image* (+ ij 1)) c) (set! (ref *check-image* (+ ij 2)) c)))) ) (define (init) (gl-clear-color 0 0 0 0) (gl-shade-model GL_FLAT) (make-check-image) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-raster-pos 0 0) (gl-draw-pixels *check-image-width* *check-image-height* GL_RGB GL_UNSIGNED_BYTE *check-image*) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (set! *height* h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0.0 w 0.0 h) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (motion x y) (let1 screen-y (- *height* y) (gl-raster-pos x screen-y) (gl-pixel-zoom *zoom-factor* *zoom-factor*) (gl-copy-pixels 0 0 *check-image-width* *check-image-height* GL_COLOR) (gl-pixel-zoom 1.0 1.0) (gl-flush))) (define (keyboard key x y) (cond ((or (= key (char->integer #\r)) (= key (char->integer #\R))) (set! *zoom-factor* 1.0) (glut-post-redisplay) (format #t "zoomFactor reset to 1.0\n") ) ((= key (char->integer #\z)) (inc! *zoom-factor* 0.5) (when (>= *zoom-factor* 3.0) (set! *zoom-factor* 3.0)) (format #t "zoomFactor is now ~a\n" *zoom-factor*) ) ((= key (char->integer #\Z)) (dec! *zoom-factor* 0.5) (when (<= *zoom-factor* 0.5) (set! *zoom-factor* 0.5)) (format #t "zoomFactor is now ~a\n" *zoom-factor*) ) ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-motion-func motion) (glut-main-loop) 0) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example8-6.scm������������������������������������������������������0000644�0000764�0000764�00000005557�11533026402�020050� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 8-6 Using 2D Convolution Filters (use gl) (use gl.glut) (use gl.simple.image) (use gauche.uvector) (use util.match) ;; convolution filters (define *horizontal* '#f32( 0.0 -1.0 0.0 0.0 1.0 0.0 0.0 0.0 0.0)) (define *vertical* '#f32( 0.0 0.0 0.0 -1.0 1.0 0.0 0.0 0.0 0.0)) (define *laplacian* '#f32(-0.125 -0.125 -0.125 -0.125 1.0 -0.125 -0.125 -0.125 -0.125)) (define *image-file* "../images/noturn.rgb") (define *width* #f) (define *height* #f) (define *image* #f) (define (init) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (gl-clear-color 0 0 0 0) (gl-convolution-filter-2d GL_CONVOLUTION_2D GL_LUMINANCE 3 3 GL_LUMINANCE GL_FLOAT *horizontal*) (gl-enable GL_CONVOLUTION_2D) ) (define (display-proc) (gl-clear GL_COLOR_BUFFER_BIT) (gl-raster-pos 1 1) (gl-draw-pixels *width* *height* GL_RGB GL_UNSIGNED_BYTE *image*) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0.0 w 0.0 h) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (cond ((= key (char->integer #\h)) (print "Using horizontal filter") (gl-convolution-filter-2d GL_CONVOLUTION_2D GL_LUMINANCE 3 3 GL_LUMINANCE GL_FLOAT *horizontal*) (gl-enable GL_CONVOLUTION_2D) (glut-post-redisplay) ) ((= key (char->integer #\v)) (print "Using vertical filter") (gl-convolution-filter-2d GL_CONVOLUTION_2D GL_LUMINANCE 3 3 GL_LUMINANCE GL_FLOAT *vertical*) (gl-enable GL_CONVOLUTION_2D) (glut-post-redisplay) ) ((= key (char->integer #\l)) (print "Using laplacian filter") (gl-convolution-filter-2d GL_CONVOLUTION_2D GL_LUMINANCE 3 3 GL_LUMINANCE GL_FLOAT *laplacian*) (gl-enable GL_CONVOLUTION_2D) (glut-post-redisplay) ) ((= key (char->integer #\n)) (print "No filter") (gl-disable GL_CONVOLUTION_2D) (glut-post-redisplay)) ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (unless (file-exists? *image-file*) (print "Couldn't find image file: " *image-file*) (exit 0)) (match-let1 (width height depth image) (read-sgi-image *image-file*) (set! *width* width) (set! *height* height) (set! *image* image) (glut-init-window-size width height) (glut-init-window-position 100 100) (glut-create-window (car args)) (unless (gl-extension-available? 'GL_ARB_imaging) (print "GL_ARB_imaging is not supported on this platform") (exit 0)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func display-proc) (glut-main-loop) 0)) �������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example8-8.scm������������������������������������������������������0000644�0000764�0000764�00000004351�11533026402�020041� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 8-8 Compute an Image's histogram (use gl) (use gl.glut) (use gl.simple.image) (use gauche.uvector) (use gauche.sequence) (use util.match) (define-constant HISTOGRAM_SIZE 256) (define *image-file* "../images/flower.rgb") (define *width* 0) (define *height* 0) (define *pixels* #f) (define (init) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (gl-clear-color 0 0 0 0) (gl-histogram GL_HISTOGRAM HISTOGRAM_SIZE GL_RGB #f) (gl-enable GL_HISTOGRAM) ) (define (display-proc) (gl-clear GL_COLOR_BUFFER_BIT) (gl-raster-pos 1 1) (gl-draw-pixels *width* *height* GL_RGB GL_UNSIGNED_BYTE *pixels*) (let* ((hist (gl-get-histogram GL_HISTOGRAM #t GL_RGB GL_UNSIGNED_SHORT)) (peak (fold max 0 hist)) (factor (/ *height* peak))) (gl-begin* GL_LINE_STRIP (gl-color 1.0 0.0 0.0) (dotimes (i HISTOGRAM_SIZE) (gl-vertex i (* (ref hist (* i 3)) factor)))) (gl-begin* GL_LINE_STRIP (gl-color 0.0 1.0 0.0) (dotimes (i HISTOGRAM_SIZE) (gl-vertex i (* (ref hist (+ (* i 3) 1)) factor)))) (gl-begin* GL_LINE_STRIP (gl-color 0.0 0.0 1.0) (dotimes (i HISTOGRAM_SIZE) (gl-vertex i (* (ref hist (+ (* i 3) 2)) factor)))) ) (gl-flush)) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0.0 w 0.0 h) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (cond ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (unless (file-exists? *image-file*) (print "Couldn't find image file: " *image-file*) (exit 0)) (match-let1 (width height depth image) (read-sgi-image *image-file*) (set! *width* width) (set! *height* height) (set! *pixels* image) (glut-init-window-size width height) (glut-init-window-position 100 100) (glut-create-window (car args)) (unless (gl-extension-available? 'GL_ARB_imaging) (print "GL_ARB_imaging is not supported on this platform") (exit 0)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func display-proc) (glut-main-loop) 0)) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/README��������������������������������������������������������������0000644�0000764�0000764�00000004507�11533026402�016330� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This directory contains ported examples in "OpenGL Programming Guide". To run examples without installing Gauche-gl, invoke gosh with "-I../../src -I../../lib", e.g. gosh -I../../src -I../../lib ./example1-2.scm Typing ESC in the window terminates the example. A Scheme script 'run' is provided to go through all the examples. The following is the original copyright notice in the example code. /* * Copyright (c) 1993-1999, Silicon Graphics, Inc. * ALL RIGHTS RESERVED * Permission to use, copy, modify, and distribute this software for * any purpose and without fee is hereby granted, provided that the above * copyright notice appear in all copies and that both the copyright notice * and this permission notice appear in supporting documentation, and that * the name of Silicon Graphics, Inc. not be used in advertising * or publicity pertaining to distribution of the software without specific, * written prior permission. * * THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS" * AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE, * INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR * FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON * GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT, * SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY * KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION, * LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF * THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN * ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON * ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE * POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE. * * US Government Users Restricted Rights * Use, duplication, or disclosure by the Government is subject to * restrictions set forth in FAR 52.227.19(c)(2) or subparagraph * (c)(1)(ii) of the Rights in Technical Data and Computer Software * clause at DFARS 252.227-7013 and/or in similar or successor * clauses in the FAR or the DOD or NASA FAR Supplement. * Unpublished-- rights reserved under the copyright laws of the * United States. Contractor/manufacturer is Silicon Graphics, * Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311. * * OpenGL(R) is a registered trademark of Silicon Graphics, Inc. */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example2-5.scm������������������������������������������������������0000644�0000764�0000764�00000003716�11533026402�020034� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 2-5 Line Stipple Patterns (use gl) (use gl.glut) (define-syntax draw-one-line (syntax-rules () ((_ x1 y1 x2 y2) (begin (gl-begin GL_LINES) (gl-vertex x1 y1) (gl-vertex x2 y2) (gl-end))))) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-enable GL_LINE_STIPPLE) (gl-line-stipple 1 #x0101) ;dotted (draw-one-line 50.0 125.0 150.0 125.0) (gl-line-stipple 1 #x00ff) ;dashed (draw-one-line 150.0 125.0 250.0 125.0) (gl-line-stipple 1 #x1c47) ;dash/dot/dash (draw-one-line 250.0 125.0 350.0 125.0) (gl-line-width 5.0) (gl-line-stipple 1 #x0101) ;dotted (draw-one-line 50.0 100.0 150.0 100.0) (gl-line-stipple 1 #x00ff) ;dashed (draw-one-line 150.0 100.0 250.0 100.0) (gl-line-stipple 1 #x1c47) ;dash/dot/dash (draw-one-line 250.0 100.0 350.0 100.0) (gl-line-width 1.0) (gl-line-stipple 1 #x1c47) ;dash/dot/dash (gl-begin GL_LINE_STRIP) (do ((i 0 (+ i 1))) ((= i 7)) (gl-vertex (+ 50.0 (* i 50.0)) 75.0)) (gl-end) (do ((i 0 (+ i 1))) ((= i 6)) (draw-one-line (+ 50.0 (* i 50.0)) 50.0 (+ 50.0 (* (+ i 1) 50.0)) 50.0)) (gl-line-stipple 5 #x1c47) (draw-one-line 50.0 25.0 350.0 25.0) (gl-disable GL_LINE_STIPPLE) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0 w 0 h) ) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 400 150) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) ��������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example2-6.scm������������������������������������������������������0000644�0000764�0000764�00000005033�11533026402�020027� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 2-6 Polygon Stipple Patterns (use gl) (use gl.glut) (define *fly* '#u8(#x00 #x00 #x00 #x00 #x00 #x00 #x00 #x00 #x03 #x80 #x01 #xc0 #x06 #xc0 #x03 #x60 #x04 #x60 #x06 #x20 #x04 #x30 #x0c #x20 #x04 #x18 #x18 #x20 #x04 #x0c #x30 #x20 #x04 #x06 #x60 #x20 #x44 #x03 #xc0 #x22 #x44 #x01 #x80 #x22 #x44 #x01 #x80 #x22 #x44 #x01 #x80 #x22 #x44 #x01 #x80 #x22 #x44 #x01 #x80 #x22 #x44 #x01 #x80 #x22 #x66 #x01 #x80 #x66 #x33 #x01 #x80 #x22 #x19 #x81 #x81 #x98 #x0c #xc1 #x83 #x30 #x07 #xe1 #x87 #xe0 #x03 #x3f #xfc #xc0 #x03 #x31 #x8c #xc0 #x03 #x33 #xcc #xc0 #x06 #x64 #x26 #x60 #x0c #xcc #x33 #x30 #x18 #xcc #x33 #x18 #x10 #xc4 #x23 #x08 #x10 #x63 #xc6 #x08 #x10 #x30 #x0c #x08 #x10 #x18 #x18 #x08 #x10 #x00 #x00 #x08)) (define *halftone* '#u8(#xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55 #xaa #xaa #xaa #xaa #x55 #x55 #x55 #x55)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-enable GL_LINE_STIPPLE) (gl-rect '#f32(25.0 25.0) '#f32(125.0 125.0)) (gl-enable GL_POLYGON_STIPPLE) (gl-polygon-stipple *fly*) (gl-rect '#f32(125.0 25.0) '#f32(225.0 125.0)) (gl-polygon-stipple *halftone*) (gl-rect '#f32(225.0 25.0) '#f32(325.0 125.0)) (gl-disable GL_POLYGON_STIPPLE) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0 w 0 h) ) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 350 150) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example2-9.scm������������������������������������������������������0000644�0000764�0000764�00000005460�11533026402�020036� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 2-9 Enabling and Loading Vertex Arrays (use gl) (use gl.glut) (define *setup-method* 'pointer) (define *deref-method* 'drawarray) (define (setup-pointers) (gl-enable-client-state GL_VERTEX_ARRAY) (gl-enable-client-state GL_COLOR_ARRAY) (gl-vertex-pointer 2 '#s32(25 25 100 325 175 25 175 325 250 25 325 325)) (gl-color-pointer 3 '#f32(1.0 0.2 0.2 0.2 0.2 1.0 0.8 1.0 0.2 0.75 0.75 0.75 0.35 0.35 0.35 0.5 0.5 0.5)) ) (define (setup-interleave) (gl-interleaved-arrays GL_C3F_V3F '#f32(1.0 0.2 1.0 100.0 100.0 0.0 1.0 0.2 0.2 0.0 200.0 0.0 1.0 1.0 0.2 100.0 300.0 0.0 0.2 1.0 0.2 200.0 300.0 0.0 0.2 1.0 1.0 300.0 200.0 0.0 0.2 0.2 1.0 200.0 100.0 0.0)) ) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_SMOOTH) (setup-pointers)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (case *deref-method* ((drawarray) (gl-draw-arrays GL_TRIANGLES 0 6)) ((arrayelement) (gl-begin* GL_TRIANGLES (gl-array-element 2) (gl-array-element 3) (gl-array-element 5) )) ((drawelements) (gl-draw-elements GL_POLYGON '#u32(0 1 3 4))) ) (gl-flush)) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0.0 w 0.0 h)) (define (mouse button state x y) (cond ((= button GLUT_LEFT_BUTTON) (when (= state GLUT_DOWN) (case *setup-method* ((pointer) (set! *setup-method* 'interleaved) (setup-interleave)) ((interleaved) (set! *setup-method* 'pointer) (setup-pointers))) (glut-post-redisplay))) ((or (= button GLUT_MIDDLE_BUTTON) (= button GLUT_RIGHT_BUTTON)) (when (= state GLUT_DOWN) (case *deref-method* ((drawarray) (set! *deref-method* 'arrayelement)) ((arrayelement) (set! *deref-method* 'drawelements)) ((drawelements) (set! *deref-method* 'drawarray))) (glut-post-redisplay))) )) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 350 350) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-mouse-func mouse) (glut-keyboard-func keyboard) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example9-1.scm������������������������������������������������������0000644�0000764�0000764�00000005743�11533026402�020041� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 9-1 Texture-mapped Checkerboard (use gl) (use gl.glut) (use gauche.uvector) ;; Create checkerboard image (define-constant *check-image-width* 64) (define-constant *check-image-height* 64) (define *check-image* (make-u8vector (* *check-image-height* *check-image-width* 4))) (define *texname* 0) (define (make-check-image) ;; NB: this must be easier once uniform array is implemented. (dotimes (i *check-image-height*) (dotimes (j *check-image-width*) (let ((ij (* (+ (* i *check-image-width*) j) 4)) (c (if (or (and (zero? (logand i #x08)) (zero? (logand j #x08))) (and (not (zero? (logand i #x08))) (not (zero? (logand j #x08))))) 0 255))) (set! (ref *check-image* ij) c) (set! (ref *check-image* (+ ij 1)) c) (set! (ref *check-image* (+ ij 2)) c) (set! (ref *check-image* (+ ij 3)) 255)))) ) (define (init) (gl-clear-color 0 0 0 0) (gl-shade-model GL_FLAT) (gl-enable GL_DEPTH_TEST) (make-check-image) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (let1 texnames (gl-gen-textures 1) (set! *texname* (ref texnames 0)) (gl-bind-texture GL_TEXTURE_2D *texname*)) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_REPEAT) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_REPEAT) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST) (gl-tex-image-2d GL_TEXTURE_2D 0 GL_RGBA *check-image-width* *check-image-height* 0 GL_RGBA GL_UNSIGNED_BYTE *check-image*) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-enable GL_TEXTURE_2D) (gl-tex-env GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_DECAL) (gl-bind-texture GL_TEXTURE_2D *texname*) (gl-begin GL_QUADS) (gl-tex-coord 0.0 0.0) (gl-vertex -2.0 -1.0 0.0) (gl-tex-coord 0.0 1.0) (gl-vertex -2.0 1.0 0.0) (gl-tex-coord 1.0 1.0) (gl-vertex 0.0 1.0 0.0) (gl-tex-coord 1.0 0.0) (gl-vertex 0.0 -1.0 0.0) (gl-tex-coord 0.0 0.0) (gl-vertex 1.0 -1.0 0.0) (gl-tex-coord 0.0 1.0) (gl-vertex 1.0 1.0 0.0) (gl-tex-coord 1.0 1.0) (gl-vertex 2.41421 1.0 -1.41421) (gl-tex-coord 1.0 0.0) (gl-vertex 2.41421 -1.0 -1.41421) (gl-end) (gl-flush) (gl-disable GL_TEXTURE_2D) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 60.0 (/ w h) 1.0 30.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -3.6)) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �����������������������������Gauche-gl-0.5.1/examples/glbook/example9-3.scm������������������������������������������������������0000644�0000764�0000764�00000010477�11533026402�020043� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 9-3 Replacing a Texture Subimage (use gl) (use gl.glut) (use gauche.uvector) ;; Create checkerboard image (define-constant *check-image-width* 64) (define-constant *check-image-height* 64) (define *check-image* (make-u8vector (* *check-image-height* *check-image-width* 4))) (define-constant *sub-image-width* 16) (define-constant *sub-image-height* 16) (define *sub-image* (make-u8vector (* *sub-image-height* *sub-image-width* 4))) (define *texname* 0) (define (make-check-images) ;; NB: this must be easier once uniform array is implemented. (dotimes (i *check-image-height*) (dotimes (j *check-image-width*) (let ((ij (* (+ (* i *check-image-width*) j) 4)) (c (if (or (and (zero? (logand i #x08)) (zero? (logand j #x08))) (and (not (zero? (logand i #x08))) (not (zero? (logand j #x08))))) 0 255))) (set! (ref *check-image* ij) c) (set! (ref *check-image* (+ ij 1)) c) (set! (ref *check-image* (+ ij 2)) c) (set! (ref *check-image* (+ ij 3)) 255)))) (dotimes (i *sub-image-height*) (dotimes (j *sub-image-width*) (let ((ij (* (+ (* i *sub-image-width*) j) 4)) (c (if (or (and (zero? (logand i #x04)) (zero? (logand j #x04))) (and (not (zero? (logand i #x04))) (not (zero? (logand j #x04))))) 0 255))) (set! (ref *sub-image* ij) c) (set! (ref *sub-image* (+ ij 1)) 0) (set! (ref *sub-image* (+ ij 2)) 0) (set! (ref *sub-image* (+ ij 3)) 255)))) ) (define (init) (gl-clear-color 0 0 0 0) (gl-shade-model GL_FLAT) (gl-enable GL_DEPTH_TEST) (make-check-images) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (let1 texnames (gl-gen-textures 1) (set! *texname* (ref texnames 0)) (gl-bind-texture GL_TEXTURE_2D *texname*)) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_REPEAT) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_REPEAT) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST) (gl-tex-image-2d GL_TEXTURE_2D 0 GL_RGBA *check-image-width* *check-image-height* 0 GL_RGBA GL_UNSIGNED_BYTE *check-image*) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-enable GL_TEXTURE_2D) (gl-tex-env GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_DECAL) (gl-bind-texture GL_TEXTURE_2D *texname*) (gl-begin GL_QUADS) (gl-tex-coord 0.0 0.0) (gl-vertex -2.0 -1.0 0.0) (gl-tex-coord 0.0 1.0) (gl-vertex -2.0 1.0 0.0) (gl-tex-coord 1.0 1.0) (gl-vertex 0.0 1.0 0.0) (gl-tex-coord 1.0 0.0) (gl-vertex 0.0 -1.0 0.0) (gl-tex-coord 0.0 0.0) (gl-vertex 1.0 -1.0 0.0) (gl-tex-coord 0.0 1.0) (gl-vertex 1.0 1.0 0.0) (gl-tex-coord 1.0 1.0) (gl-vertex 2.41421 1.0 -1.41421) (gl-tex-coord 1.0 0.0) (gl-vertex 2.41421 -1.0 -1.41421) (gl-end) (gl-flush) (gl-disable GL_TEXTURE_2D) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 60.0 (/ w h) 1.0 30.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -3.6)) (define (keyboard key x y) (cond ((or (= key (char->integer #\s)) (= key (char->integer #\S))) (gl-bind-texture GL_TEXTURE_2D *texname*) (gl-tex-sub-image-2d GL_TEXTURE_2D 0 12 44 *sub-image-width* *sub-image-height* GL_RGBA GL_UNSIGNED_BYTE *sub-image*) (glut-post-redisplay)) ((or (= key (char->integer #\r)) (= key (char->integer #\R))) (gl-bind-texture GL_TEXTURE_2D *texname*) (gl-tex-image-2d GL_TEXTURE_2D 0 GL_RGBA *check-image-width* *check-image-height* 0 GL_RGBA GL_UNSIGNED_BYTE *check-image*) (glut-post-redisplay)) ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example9-4.scm������������������������������������������������������0000644�0000764�0000764�00000005171�11533026402�020037� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 9-4 Three-Dimensional Texturing (use gl) (use gl.glut) (use gauche.uvector) ;; Create checkerboard image (define-constant *iwidth* 16) (define-constant *iheight* 16) (define-constant *idepth* 16) (define *image* (make-u8vector (* *iwidth* *iheight* *idepth* 3))) (define *texname* 0) (define (make-image) ;; NB: this must be easier once uniform array is implemented. (dotimes (s 16) (dotimes (t 16) (dotimes (r 16) (let ((rts (* 3 (+ (* r *iwidth* *iheight*) (* t *iwidth*) s)))) (set! (ref *image* rts) (* s 17)) (set! (ref *image* (+ rts 1)) (* t 17)) (set! (ref *image* (+ rts 2)) (* r 17))))))) (define (init) (gl-clear-color 0 0 0 0) (gl-shade-model GL_FLAT) (gl-enable GL_DEPTH_TEST) (make-image) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (let1 texnames (gl-gen-textures 1) (set! *texname* (ref texnames 0)) (gl-bind-texture GL_TEXTURE_3D *texname*)) (gl-tex-parameter GL_TEXTURE_3D GL_TEXTURE_WRAP_S GL_CLAMP) (gl-tex-parameter GL_TEXTURE_3D GL_TEXTURE_WRAP_T GL_CLAMP) (gl-tex-parameter GL_TEXTURE_3D GL_TEXTURE_WRAP_R GL_CLAMP) (gl-tex-parameter GL_TEXTURE_3D GL_TEXTURE_MAG_FILTER GL_NEAREST) (gl-tex-parameter GL_TEXTURE_3D GL_TEXTURE_MIN_FILTER GL_NEAREST) (gl-tex-image-3d GL_TEXTURE_3D 0 GL_RGB *iwidth* *iheight* *idepth* 0 GL_RGB GL_UNSIGNED_BYTE *image*) (gl-enable GL_TEXTURE_3D) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-begin GL_QUADS) (gl-tex-coord 0.0 0.0 0.0) (gl-vertex -2.25 -1.0 0.0) (gl-tex-coord 0.0 1.0 0.0) (gl-vertex -2.25 1.0 0.0) (gl-tex-coord 1.0 1.0 1.0) (gl-vertex -0.25 1.0 0.0) (gl-tex-coord 1.0 0.0 1.0) (gl-vertex -0.25 -1.0 0.0) (gl-tex-coord 0.0 0.0 1.0) (gl-vertex 0.25 -1.0 0.0) (gl-tex-coord 0.0 1.0 1.0) (gl-vertex 0.25 1.0 0.0) (gl-tex-coord 1.0 1.0 0.0) (gl-vertex 2.25 1.0 0.0) (gl-tex-coord 1.0 0.0 0.0) (gl-vertex 2.25 -1.0 0.0) (gl-end) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 60.0 (/ w h) 1.0 30.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -4.0)) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example9-5.scm������������������������������������������������������0000644�0000764�0000764�00000005276�11533026402�020046� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 9-5 Mipmap Textures (use gl) (use gl.glut) (use gauche.uvector) (use srfi-1) (use gauche.collection) (define *mipmap* (map (lambda (i) (let1 size (expt 2 i) (make-u8vector (* size size 4)))) (iota 6))) (define *mm-colors* '((255 255 255) (0 0 255) (0 255 0) (255 0 0) (255 0 255) (255 255 0))) (define *texname* 0) (define (make-images) (dotimes (s 6) (let ((size (expt 2 s)) (image (list-ref *mipmap* s)) (colors (list-ref *mm-colors* s))) (dotimes (i size) (dotimes (j size) (let1 ij (* 4 (+ (* i size) j)) (set! (ref image ij) (ref colors 0)) (set! (ref image (+ ij 1)) (ref colors 1)) (set! (ref image (+ ij 2)) (ref colors 2)) (set! (ref image (+ ij 3)) 255))))))) (define (init) (gl-enable GL_DEPTH_TEST) (gl-shade-model GL_FLAT) (gl-translate 0.0 0.0 -3.6) (make-images) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (let1 texnames (gl-gen-textures 1) (set! *texname* (ref texnames 0)) (gl-bind-texture GL_TEXTURE_2D *texname*)) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_CLAMP) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_CLAMP) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST_MIPMAP_NEAREST) (for-each (lambda (image level) (let1 size (expt 2 (- 5 level)) (gl-tex-image-2d GL_TEXTURE_2D level GL_RGBA size size 0 GL_RGBA GL_UNSIGNED_BYTE image))) (reverse *mipmap*) (iota 6)) (gl-tex-env GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_DECAL) (gl-enable GL_TEXTURE_2D) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-bind-texture GL_TEXTURE_2D *texname*) (gl-begin GL_QUADS) (gl-tex-coord 0.0 0.0) (gl-vertex -2.0 -1.0 0.0) (gl-tex-coord 0.0 8.0) (gl-vertex -2.0 1.0 0.0) (gl-tex-coord 8.0 8.0) (gl-vertex 2000.0 1.0 -6000.0) (gl-tex-coord 9.0 0.0) (gl-vertex 2000.0 -1.0 -6000.0) (gl-end) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 60.0 (/ w h) 1.0 30000.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity)) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 500 500) (glut-init-window-position 50 50) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example9-7.scm������������������������������������������������������0000644�0000764�0000764�00000007715�11533026402�020050� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 9-7 Binding Texture Objects (use gl) (use gl.glut) (use gauche.uvector) ;; Create checkerboard image (define-constant *check-image-width* 64) (define-constant *check-image-height* 64) (define *check-image* (make-u8vector (* *check-image-height* *check-image-width* 4))) (define *other-image* (make-u8vector (* *check-image-height* *check-image-width* 4))) (define *texname* #f) (define (make-check-images) (dotimes (i *check-image-height*) (dotimes (j *check-image-width*) (let ((ij (* (+ (* i *check-image-width*) j) 4)) (c (if (or (and (zero? (logand i #x08)) (zero? (logand j #x08))) (and (not (zero? (logand i #x08))) (not (zero? (logand j #x08))))) 0 255)) (cc (if (or (and (zero? (logand i #x10)) (zero? (logand j #x10))) (and (not (zero? (logand i #x10))) (not (zero? (logand j #x10))))) 0 255)) ) (set! (ref *check-image* ij) c) (set! (ref *check-image* (+ ij 1)) c) (set! (ref *check-image* (+ ij 2)) c) (set! (ref *check-image* (+ ij 3)) 255) (set! (ref *other-image* ij) cc) (set! (ref *other-image* (+ ij 1)) 0) (set! (ref *other-image* (+ ij 2)) 0) (set! (ref *other-image* (+ ij 3)) 255)))) ) (define (init) (gl-clear-color 0 0 0 0) (gl-shade-model GL_FLAT) (gl-enable GL_DEPTH_TEST) (make-check-images) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (set! *texname* (gl-gen-textures 2)) (gl-bind-texture GL_TEXTURE_2D (ref *texname* 0)) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_CLAMP) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_CLAMP) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST) (gl-tex-image-2d GL_TEXTURE_2D 0 GL_RGBA *check-image-width* *check-image-height* 0 GL_RGBA GL_UNSIGNED_BYTE *check-image*) (gl-bind-texture GL_TEXTURE_2D (ref *texname* 1)) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_S GL_CLAMP) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_WRAP_T GL_CLAMP) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MAG_FILTER GL_NEAREST) (gl-tex-parameter GL_TEXTURE_2D GL_TEXTURE_MIN_FILTER GL_NEAREST) (gl-tex-env GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_DECAL) (gl-tex-image-2d GL_TEXTURE_2D 0 GL_RGBA *check-image-width* *check-image-height* 0 GL_RGBA GL_UNSIGNED_BYTE *other-image*) (gl-enable GL_TEXTURE_2D) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-bind-texture GL_TEXTURE_2D (ref *texname* 0)) (gl-begin GL_QUADS) (gl-tex-coord 0.0 0.0) (gl-vertex -2.0 -1.0 0.0) (gl-tex-coord 0.0 1.0) (gl-vertex -2.0 1.0 0.0) (gl-tex-coord 1.0 1.0) (gl-vertex 0.0 1.0 0.0) (gl-tex-coord 1.0 0.0) (gl-vertex 0.0 -1.0 0.0) (gl-end) (gl-bind-texture GL_TEXTURE_2D (ref *texname* 1)) (gl-begin GL_QUADS) (gl-tex-coord 0.0 0.0) (gl-vertex 1.0 -1.0 0.0) (gl-tex-coord 0.0 1.0) (gl-vertex 1.0 1.0 0.0) (gl-tex-coord 1.0 1.0) (gl-vertex 2.41421 1.0 -1.41421) (gl-tex-coord 1.0 0.0) (gl-vertex 2.41421 -1.0 -1.41421) (gl-end) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 60.0 (/ w h) 1.0 30.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -3.6)) (define (keyboard key x y) (cond ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) ���������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example9-8.scm������������������������������������������������������0000644�0000764�0000764�00000007450�11533026402�020045� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 9-8 Automatic Texture-Coordinate Generation (use gl) (use gl.glut) (use gauche.uvector) ;; Create checkerboard image (define-constant *stripe-image-width* 32) (define *stripe-image* (make-u8vector (* *stripe-image-width* 4))) (define *texname* #f) (define (make-stripe-image) (dotimes (j *stripe-image-width*) (set! (ref *stripe-image* (* 4 j)) (if (<= j 4) 255 0)) (set! (ref *stripe-image* (+ (* 4 j) 1)) (if (> j 4) 255 0)) (set! (ref *stripe-image* (+ (* 4 j) 2)) 0) (set! (ref *stripe-image* (+ (* 4 j) 3)) 255))) ;; planes for texture coordinate generation (define x=0plane '#f32(1.0 0.0 0.0 0.0)) (define slanted '#f32(1.0 1.0 1.0 0.0)) (define *current-coeff* x=0plane) (define *current-plane* 0) (define *current-gen-mode* 0) (define (init) (gl-clear-color 0 0 0 0) (gl-enable GL_DEPTH_TEST) (gl-shade-model GL_SMOOTH) (make-stripe-image) (gl-pixel-store GL_UNPACK_ALIGNMENT 1) (set! *texname* (ref (gl-gen-textures 1) 0)) (gl-bind-texture GL_TEXTURE_1D *texname*) (gl-tex-parameter GL_TEXTURE_1D GL_TEXTURE_WRAP_S GL_REPEAT) (gl-tex-parameter GL_TEXTURE_1D GL_TEXTURE_MAG_FILTER GL_LINEAR) (gl-tex-parameter GL_TEXTURE_1D GL_TEXTURE_MIN_FILTER GL_LINEAR) (gl-tex-image-1d GL_TEXTURE_1D 0 GL_RGBA *stripe-image-width* 0 GL_RGBA GL_UNSIGNED_BYTE *stripe-image*) (gl-tex-env GL_TEXTURE_ENV GL_TEXTURE_ENV_MODE GL_MODULATE) (set! *current-coeff* x=0plane) (set! *current-gen-mode* GL_OBJECT_LINEAR) (set! *current-plane* GL_OBJECT_PLANE) (gl-tex-gen GL_S GL_TEXTURE_GEN_MODE *current-gen-mode*) (gl-tex-gen GL_S *current-plane* *current-coeff*) (gl-enable GL_TEXTURE_GEN_S) (gl-enable GL_TEXTURE_1D) (gl-enable GL_CULL_FACE) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-enable GL_AUTO_NORMAL) (gl-enable GL_NORMALIZE) (gl-front-face GL_CW) (gl-cull-face GL_BACK) (gl-material GL_FRONT GL_SHININESS 64.0) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-push-matrix) (gl-rotate 45.0 0.0 0.0 1.0) (gl-bind-texture GL_TEXTURE_1D *texname*) (glut-solid-teapot 2.0) (gl-pop-matrix) (gl-flush)) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (gl-ortho -3.5 3.5 (* -3.5 (/ h w)) (* 3.5 (/ h w)) -3.5 3.5) (gl-ortho (* -3.5 (/ w h)) (* 3.5 (/ w h)) -3.5 3.5 -3.5 3.5)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (cond ((or (= key (char->integer #\e)) (= key (char->integer #\E))) (set! *current-gen-mode* GL_EYE_LINEAR) (set! *current-plane* GL_EYE_PLANE) (gl-tex-gen GL_S GL_TEXTURE_GEN_MODE *current-gen-mode*) (gl-tex-gen GL_S *current-plane* *current-coeff*) (glut-post-redisplay)) ((or (= key (char->integer #\o)) (= key (char->integer #\O))) (set! *current-gen-mode* GL_OBJECT_LINEAR) (set! *current-plane* GL_OBJECT_PLANE) (gl-tex-gen GL_S GL_TEXTURE_GEN_MODE *current-gen-mode*) (gl-tex-gen GL_S *current-plane* *current-coeff*) (glut-post-redisplay)) ((or (= key (char->integer #\s)) (= key (char->integer #\S))) (set! *current-coeff* slanted) (gl-tex-gen GL_S *current-plane* *current-coeff*) (glut-post-redisplay)) ((or (= key (char->integer #\x)) (= key (char->integer #\X))) (set! *current-coeff* x=0plane) (gl-tex-gen GL_S *current-plane* *current-coeff*) (glut-post-redisplay)) ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 256 256) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example13-2.scm�����������������������������������������������������0000644�0000764�0000764�00000005724�11533026402�020114� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 13-2 Selection Example (use gl) (use gl.glut) (use gauche.uvector) (define (draw-triangle xs ys z) (gl-begin* GL_TRIANGLES (for-each (cut gl-vertex <> <> z) xs ys))) (define (draw-view-volume x1 x2 y1 y2 z1 z2) (define (line-loop z) (gl-vertex x1 y1 z) (gl-vertex x2 y1 z) (gl-vertex x2 y2 z) (gl-vertex x1 y2 z)) (define (line x y) (gl-vertex x y (- z1)) (gl-vertex x y (- z2))) (gl-color 1.0 1.0 1.0) (gl-begin* GL_LINE_LOOP (line-loop (- z1))) (gl-begin* GL_LINE_LOOP (line-loop (- z2))) (gl-begin* GL_LINES (line x1 y1) (line x1 y2) (line x2 y1) (line x2 y2)) ) (define (draw-scene) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 40.0 4/3 1.0 100.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (glu-look-at 7.5 7.5 12.5 2.5 2.5 -5.0 0.0 1.0 0.0) (gl-color 0.0 1.0 0.0) (draw-triangle '(2.0 3.0 2.5) '(2.0 2.0 3.0) -5.0) (gl-color 1.0 0.0 0.0) (draw-triangle '(2.0 3.0 2.5) '(7.0 7.0 8.0) -5.0) (gl-color 1.0 1.0 0.0) (draw-triangle '(2.0 3.0 2.5) '(2.0 2.0 3.0) -1.0) (draw-triangle '(2.0 3.0 2.5) '(2.0 2.0 3.0) -9.0) (draw-view-volume 0.0 5.0 0.0 5.0 0.0 10.0)) (define (process-hits hits vec) (print #`"hits = ,hits") (let1 ptr 0 (dotimes (i hits) (let1 names (ref vec ptr) (print #`" number of names for hit = ,names") (inc! ptr) (print #`" z1 is ,(/ (ref vec ptr) #x7fffffff);" #`" z2 is ,(/ (ref vec (+ ptr 1)) #x7fffffff)") (inc! ptr 2) (display " the name is ") (dotimes (j names) (display #`",(ref vec ptr) ") (inc! ptr)) (print))))) (define-constant BUFSIZE 512) (define (select-objects) (let1 select-buf (make-u32vector BUFSIZE) (gl-select-buffer select-buf) (gl-render-mode GL_SELECT) (gl-init-names) (gl-push-name 0) (gl-push-matrix) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 5.0 0.0 5.0 0.0 10.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-load-name 1) (draw-triangle '(2.0 3.0 2.5) '(2.0 2.0 3.0) -5.0) (gl-load-name 2) (draw-triangle '(2.0 3.0 2.5) '(7.0 7.0 8.0) -5.0) (gl-load-name 3) (draw-triangle '(2.0 3.0 2.5) '(2.0 2.0 3.0) -1.0) (draw-triangle '(2.0 3.0 2.5) '(2.0 2.0 3.0) -9.0) (gl-pop-matrix) (gl-flush) (process-hits (gl-render-mode GL_RENDER) select-buf) )) (define (init) (gl-enable GL_DEPTH_TEST) (gl-shade-model GL_FLAT)) (define (disp) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (draw-scene) (select-objects) (gl-flush)) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 200 200) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-keyboard-func keyboard) (glut-main-loop) 0) ��������������������������������������������Gauche-gl-0.5.1/examples/glbook/example13-3.scm�����������������������������������������������������0000644�0000764�0000764�00000005205�11533026402�020107� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 13-3 Picking example (use gl) (use gl.glut) (use gauche.uvector) (use gauche.array) (define *board* (make-array (shape 0 3 0 3) 0)) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0)) (define (draw-squares mode) (dotimes (i 3) (when (= mode GL_SELECT) (gl-load-name i)) (dotimes (j 3) (when (= mode GL_SELECT) (gl-push-name j)) (gl-color (/ i 3.0) (/ j 3.0) (/ (array-ref *board* i j) 3.0)) (gl-rect i j (+ i 1) (+ j 1)) (when (= mode GL_SELECT) (gl-pop-name))))) (define (process-hits hits vec) (print #`"hits = ,hits") (let ((ptr 0) (ii 0) (jj 0)) (dotimes (i hits) (let1 names (ref vec ptr) (print #`" number of names for hit = ,names") (inc! ptr) (print #`" z1 is ,(/ (ref vec ptr) #x7fffffff);" #`" z2 is ,(/ (ref vec (+ ptr 1)) #x7fffffff)") (inc! ptr 2) (display " the name is ") (dotimes (j names) (display #`",(ref vec ptr) ") (cond ((= j 0) (set! ii (ref vec ptr))) ((= j 1) (set! jj (ref vec ptr)))) (inc! ptr)) (print) (array-set! *board* ii jj (modulo (+ (array-ref *board* ii jj) 1) 3)))))) (define-constant BUFSIZE 512) (define (pick-squares button state x y) (let1 select-buf (make-u32vector BUFSIZE 0) (when (and (= button GLUT_LEFT_BUTTON) (= state GLUT_DOWN)) (let1 viewport (gl-get-integer GL_VIEWPORT) (gl-select-buffer select-buf) (gl-render-mode GL_SELECT) (gl-init-names) (gl-push-name 0) (gl-matrix-mode GL_PROJECTION) (gl-push-matrix) (gl-load-identity) (glu-pick-matrix x (- (ref viewport 3) y) 5.0 5.0 viewport) (glu-ortho-2d 0.0 3.0 0.0 3.0) (draw-squares GL_SELECT) (gl-matrix-mode GL_PROJECTION) (gl-pop-matrix) (gl-flush) (process-hits (gl-render-mode GL_RENDER) select-buf) (glut-post-redisplay))))) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (draw-squares GL_RENDER) (gl-flush)) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-ortho-2d 0.0 3.0 0.0 3.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity)) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 100 100) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-mouse-func pick-squares) (glut-reshape-func reshape) (glut-display-func disp) (glut-keyboard-func keyboard) (glut-main-loop) 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example13-6.scm�����������������������������������������������������0000644�0000764�0000764�00000005350�11533026402�020113� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 13-6 Picking with Depth Values (use gl) (use gl.glut) (use gauche.uvector) (use gauche.array) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-enable GL_DEPTH_TEST) (gl-shade-model GL_FLAT) (gl-depth-range 0.0 1.0)) (define (draw-rects mode) (when (= mode GL_SELECT) (gl-load-name 1)) (gl-begin* GL_QUADS (gl-color 1.0 1.0 0.0) (gl-vertex 2 0 0) (gl-vertex 2 6 0) (gl-vertex 6 6 0) (gl-vertex 6 0 0) ) (when (= mode GL_SELECT) (gl-load-name 2)) (gl-begin* GL_QUADS (gl-color 0.0 1.0 1.0) (gl-vertex 3 2 -1) (gl-vertex 3 8 -1) (gl-vertex 8 8 -1) (gl-vertex 8 2 -1) ) (when (= mode GL_SELECT) (gl-load-name 3)) (gl-begin* GL_QUADS (gl-color 1.0 0.0 1.0) (gl-vertex 0 2 -2) (gl-vertex 0 7 -2) (gl-vertex 5 7 -2) (gl-vertex 5 2 -2) ) (gl-flush) ) (define (process-hits hits vec) (print #`"hits = ,hits") (let ((ptr 0) (ii 0) (jj 0)) (dotimes (i hits) (let1 names (ref vec ptr) (print #`" number of names for hit = ,names") (inc! ptr) (print #`" z1 is ,(/ (ref vec ptr) #x7fffffff);" #`" z2 is ,(/ (ref vec (+ ptr 1)) #x7fffffff)") (inc! ptr 2) (display " the name is ") (dotimes (j names) (display #`",(ref vec ptr) ") (inc! ptr)) (print) )))) (define-constant BUFSIZE 512) (define (pick-rects button state x y) (let1 select-buf (make-u32vector BUFSIZE 0) (when (and (= button GLUT_LEFT_BUTTON) (= state GLUT_DOWN)) (let1 viewport (gl-get-integer GL_VIEWPORT) (gl-select-buffer select-buf) (gl-render-mode GL_SELECT) (gl-init-names) (gl-push-name 0) (gl-matrix-mode GL_PROJECTION) (gl-push-matrix) (gl-load-identity) (glu-pick-matrix x (- (ref viewport 3) y) 5.0 5.0 viewport) (gl-ortho 0.0 8.0 0.0 8.0 -0.5 2.5) (draw-rects GL_SELECT) (gl-pop-matrix) (gl-flush) (process-hits (gl-render-mode GL_RENDER) select-buf) )))) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (draw-rects GL_RENDER) (gl-flush)) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 8.0 0.0 8.0 -0.5 2.5) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity)) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 200 200) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-display-func disp) (glut-mouse-func pick-rects) (glut-keyboard-func keyboard) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example13-7.scm�����������������������������������������������������0000644�0000764�0000764�00000004502�11533026402�020112� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 13-7 Feedback Mode (use gl) (use gl.glut) (use gauche.uvector) (use srfi-1) (define (init) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0)) (define (draw-geometry mode) (gl-begin* GL_LINE_STRIP (gl-normal 0.0 0.0 1.0) (gl-vertex 30.0 30.0 0.0) (gl-vertex 50.0 60.0 0.0) (gl-vertex 70.0 40.0 0.0) ) (when (= mode GL_FEEDBACK) (gl-pass-through 1.0)) (gl-begin* GL_POINTS (gl-vertex -100.0 -100.0 -100.0) ;; will be clipped ) (when (= mode GL_FEEDBACK) (gl-pass-through 2.0)) (gl-begin* GL_POINTS (gl-normal 0.0 0.0 1.0) (gl-vertex 50.0 50.0 0.0) ) (gl-flush) ) (define (print-3d-color-vertex buffer count) (display " ") (for-each (lambda (i) (display #`",(ref buffer (+ count i)) ")) (iota 8)) (print)) (define (print-buffer size buffer) (do ((count 0 count)) ((>= count size)) (let1 token (begin0 (ref buffer count) (inc! count)) (cond ((= token GL_PASS_THROUGH_TOKEN) (print "GL_PASS_THOURGH_TOKEN") (print #`" ,(ref buffer count)") (inc! count)) ((= token GL_POINT_TOKEN) (print "GL_POINT_TOKEN") (print-3d-color-vertex buffer count) (inc! count 8)) ((= token GL_LINE_TOKEN) (print "GL_LINE_TOKEN") (print-3d-color-vertex buffer count) (inc! count 8) (print-3d-color-vertex buffer count) (inc! count 8)) ((= token GL_LINE_RESET_TOKEN) (print "GL_LINE_RESET_TOKEN") (print-3d-color-vertex buffer count) (inc! count 8) (print-3d-color-vertex buffer count) (inc! count 8)) )))) (define *buffer* (make-f32vector 1024 0)) (define (disp) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-ortho 0.0 100.0 0.0 100.0 0.0 1.0) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-clear GL_COLOR_BUFFER_BIT) (draw-geometry GL_RENDER) (gl-feedback-buffer GL_3D_COLOR *buffer*) (gl-render-mode GL_FEEDBACK) (draw-geometry GL_FEEDBACK) (print-buffer (gl-render-mode GL_RENDER) *buffer*)) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 100 100) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-display-func disp) (glut-keyboard-func keyboard) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example3-1.scm������������������������������������������������������0000644�0000764�0000764�00000001634�11533026402�020026� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 3-1 Transformed Cube (use gl) (use gl.glut) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-load-identity) (glu-look-at 0.0 0.0 5.0 0.0 0.0 0.0 0.0 1.0 0.0) (gl-scale 1.0 2.0 1.0) (glut-wire-cube 1.0) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-frustum -1.0 1.0 -1.0 1.0 1.5 20.0) (gl-matrix-mode GL_MODELVIEW) ) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example3-2.scm������������������������������������������������������0000644�0000764�0000764�00000002641�11533026402�020026� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 3-2 Using Modeling transformations (use gl) (use gl.glut) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) ) (define (draw-triangle) (gl-begin GL_LINE_LOOP) (gl-vertex '#f32(-20.0 -20.0)) (gl-vertex '#f32(20.0 -20.0)) (gl-vertex '#f32(0.0 14.6410161513775)) (gl-end)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-load-identity) (gl-color '#f32(1.0 1.0 1.0)) (draw-triangle) (gl-enable GL_LINE_STIPPLE) (gl-line-stipple 1 #xf0f0) (gl-load-identity) (gl-translate -20.0 0.0 0.0) (draw-triangle) (gl-line-stipple 1 #xf00f) (gl-load-identity) (gl-scale 1.5 0.5 1.0) (draw-triangle) (gl-line-stipple 1 #x8888) (gl-load-identity) (gl-rotate 90.0 0.0 0.0 1.0) (draw-triangle) (gl-disable GL_LINE_STIPPLE) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-frustum -20.0 20.0 -20.0 20.0 1.5 20.0) (glu-look-at 0.0 0.0 5.0 0.0 0.0 0.0 0.0 1.0 0.0) (gl-matrix-mode GL_MODELVIEW) ) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �����������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example3-5.scm������������������������������������������������������0000644�0000764�0000764�00000002151�11533026402�020025� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 3-5 Wireframe Sphere with Two Clipping Planes (use gl) (use gl.glut) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-push-matrix) (gl-translate 0.0 0.0 -5.0) (gl-clip-plane GL_CLIP_PLANE0 '#f64(0.0 1.0 0.0 0.0)) (gl-enable GL_CLIP_PLANE0) (gl-clip-plane GL_CLIP_PLANE1 '#f64(1.0 0.0 0.0 0.0)) (gl-enable GL_CLIP_PLANE1) (gl-rotate 90.0 1.0 0.0 0.0) (glut-wire-sphere 1.0 20 16) (gl-pop-matrix) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 60.0 (/ w h) 1.0 20.0) (gl-matrix-mode GL_MODELVIEW) ) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example3-6.scm������������������������������������������������������0000644�0000764�0000764�00000003133�11533026402�020027� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 3-6 Planetary System (use gl) (use gl.glut) (define *year* 0) (define *day* 0) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color '#f32(1.0 1.0 1.0)) (gl-push-matrix) (glut-wire-sphere 1.0 20 16) ;sun (gl-rotate *year* 0.0 1.0 0.0) (gl-translate 2.0 0.0 0.0) (gl-rotate *day* 0.0 1.0 0.0) (glut-wire-sphere 0.2 10 8) ;planet (gl-pop-matrix) (glut-swap-buffers) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 60.0 (/ w h) 1.0 20.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (glu-look-at 0.0 0.0 5.0 0.0 0.0 0.0 0.0 1.0 0.0) ) (define (keyboard key x y) (cond ((= key (char->integer #\d)) (set! *day* (modulo (+ *day* 10) 360)) (glut-post-redisplay)) ((= key (char->integer #\D)) (set! *day* (modulo (- *day* 10) 360)) (glut-post-redisplay)) ((= key (char->integer #\y)) (set! *year* (modulo (+ *year* 5) 360)) (glut-post-redisplay)) ((= key (char->integer #\Y)) (set! *year* (modulo (- *year* 5) 360)) (glut-post-redisplay)) ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_RGB)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example3-7.scm������������������������������������������������������0000644�0000764�0000764�00000003342�11533026402�020032� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 3-7 Robot Arm (use gl) (use gl.glut) (define *shoulder* 0) (define *elbow* 0) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_FLAT) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-push-matrix) (gl-translate -1.0 0.0 0.0) (gl-rotate *shoulder* 0.0 0.0 1.0) (gl-translate 1.0 0.0 0.0) (gl-push-matrix) (gl-scale 2.0 0.4 1.0) (glut-wire-cube 1.0) (gl-pop-matrix) (gl-translate 1.0 0.0 0.0) (gl-rotate *elbow* 0.0 0.0 1.0) (gl-translate 1.0 0.0 0.0) (gl-push-matrix) (gl-scale 2.0 0.4 1.0) (glut-wire-cube 1.0) (gl-pop-matrix) (gl-pop-matrix) (glut-swap-buffers) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 60.0 (/ w h) 1.0 20.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0 0 -5.0) ) (define (keyboard key x y) (cond ((= key (char->integer #\s)) (set! *shoulder* (modulo (+ *shoulder* 5) 360)) (glut-post-redisplay)) ((= key (char->integer #\S)) (set! *shoulder* (modulo (- *shoulder* 5) 360)) (glut-post-redisplay)) ((= key (char->integer #\e)) (set! *elbow* (modulo (+ *elbow* 5) 360)) (glut-post-redisplay)) ((= key (char->integer #\E)) (set! *elbow* (modulo (- *elbow* 5) 360)) (glut-post-redisplay)) ((= key 27) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_RGB)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example3-8.scm������������������������������������������������������0000644�0000764�0000764�00000003227�11533026402�020035� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 3-8 Reversing the Geometirc Processing Pipeline (use gl) (use gl.glut) (use srfi-4) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 45.0 (/ w h) 1.0 100.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (mouse button state x y) (cond ((= button GLUT_LEFT_BUTTON) (if (= state GLUT_DOWN) (let* ((viewport (gl-get-integer GL_VIEWPORT)) (mvmatrix (gl-get-double GL_MODELVIEW_MATRIX)) (projmatrix (gl-get-double GL_PROJECTION_MATRIX)) (real-y (- (s32vector-ref viewport 3) y 1))) (format #t "Coordinates at cursor are (~4d, ~4d)\n" x real-y) (receive (wx wy wz) (glu-un-project x real-y 0.0 mvmatrix projmatrix viewport) (format #t "World coords at z=0.0 are (~s, ~s, ~s)\n" wx wy wz)) (receive (wx wy wz) (glu-un-project x real-y 1.0 mvmatrix projmatrix viewport) (format #t "World coords at z=1.0 are (~s, ~s, ~s)\n" wx wy wz)) ))) ((= button GLUT_RIGHT_BUTTON) (if (= state GLUT_DOWN) (exit 0))) )) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (glut-display-func disp) (glut-reshape-func reshape) (glut-mouse-func mouse) (glut-keyboard-func keyboard) (glut-main-loop) 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example4-1.scm������������������������������������������������������0000644�0000764�0000764�00000002136�11533026402�020025� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 4-1 Drawing a Smooth-Shaded Triangle (use gl) (use gl.glut) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_SMOOTH)) (define (triangle) (gl-begin GL_TRIANGLES) (gl-color '#f32(1.0 0.0 0.0)) (gl-vertex '#f32(5.0 5.0)) (gl-color '#f32(0.0 1.0 0.0)) (gl-vertex '#f32(25.0 5.0)) (gl-color '#f32(0.0 0.0 1.0)) (gl-vertex '#f32(5.0 25.0)) (gl-end)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (triangle) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (glu-ortho-2d 0.0 30.0 0.0 (* 30.0 (/ h w))) (glu-ortho-2d 0.0 (* 30.0 (/ w h)) 0.0 30.0)) (gl-matrix-mode GL_MODELVIEW) ) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example5-1.scm������������������������������������������������������0000644�0000764�0000764�00000002307�11533026402�020026� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 5-1 Drawing a Lit Sphere (use gl) (use gl.glut) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_SMOOTH) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-material GL_FRONT GL_SHININESS 50.0) (gl-light GL_LIGHT0 GL_POSITION '#f32(1.0 1.0 1.0 0.0)) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-enable GL_DEPTH_TEST) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (glut-solid-sphere 1.0 20 16) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (gl-ortho -1.5 1.5 (* -1.5 (/ h w)) (* 1.5 (/ h w)) -10.0 10.0) (gl-ortho (* -1.5 (/ w h)) (* 1.5 (/ w h)) -1.5 1.5 -10.0 10.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example5-6.scm������������������������������������������������������0000644�0000764�0000764�00000002757�11533026402�020044� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 5-6 Moving a light with modeling transformations (use gl) (use gl.glut) (define *spin* 0) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_SMOOTH) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-enable GL_DEPTH_TEST) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-push-matrix) (gl-translate 0.0 0.0 -5.0) (gl-push-matrix) (gl-rotate *spin* 1.0 0.0 0.0) (gl-light GL_LIGHT0 GL_POSITION '#f32(0.0 0.0 1.5 1.0)) (gl-translate 0.0 0.0 1.5) (gl-disable GL_LIGHTING) (gl-color 0.0 1.0 1.0) (glut-wire-cube 0.1) (gl-enable GL_LIGHTING) (gl-pop-matrix) (glut-solid-torus 0.275 0.85 8 15) (gl-pop-matrix) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 40.0 (/ w h) 1.0 20.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (mouse button state x y) (when (and (= button GLUT_LEFT_BUTTON) (= state GLUT_DOWN)) (set! *spin* (modulo (+ *spin* 30) 360)) (glut-post-redisplay))) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-mouse-func mouse) (glut-keyboard-func keyboard) (glut-main-loop) 0) �����������������Gauche-gl-0.5.1/examples/glbook/example5-8.scm������������������������������������������������������0000644�0000764�0000764�00000014363�11533026402�020042� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 5-8 Different material properties (use gl) (use gl.glut) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-enable GL_DEPTH_TEST) (gl-shade-model GL_SMOOTH) (gl-light GL_LIGHT0 GL_AMBIENT '#f32(0.0 0.0 0.0 1.0)) (gl-light GL_LIGHT0 GL_DIFFUSE '#f32(1.0 1.0 1.0 1.0)) (gl-light GL_LIGHT0 GL_POSITION '#f32(10.0 10.0 10.0 0.0)) (gl-light-model GL_LIGHT_MODEL_AMBIENT '#f32(0.4 0.4 0.4 1.0)) ; (gl-light-model GL_LIGHT_MODEL_LOCAL_VIEWER 1.0) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) ;; diffuse reflection only (gl-push-matrix) (gl-translate -3.75 3.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_SHININESS 0.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; diffuse and specular, low shininess (gl-push-matrix) (gl-translate -1.25 3.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-material GL_FRONT GL_SHININESS 5.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; diffuse and specular, high shininess (gl-push-matrix) (gl-translate 1.25 3.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-material GL_FRONT GL_SHININESS 100.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; diffuse and emission (gl-push-matrix) (gl-translate 3.75 3.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_SHININESS 0.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.3 0.2 0.2 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; ambient and diffuse (gl-push-matrix) (gl-translate -3.75 0.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.7 0.7 0.7 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_SHININESS 0.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; ambient, diffuse and specular, low shininess (gl-push-matrix) (gl-translate -1.25 0.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.7 0.7 0.7 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-material GL_FRONT GL_SHININESS 5.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; ambient, diffuse and specular, high shininess (gl-push-matrix) (gl-translate 1.25 0.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.7 0.7 0.7 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-material GL_FRONT GL_SHININESS 100.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; ambient, diffuse and emission (gl-push-matrix) (gl-translate 3.75 0.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.7 0.7 0.7 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_SHININESS 0.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.3 0.2 0.2 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; colored ambient and diffuse (gl-push-matrix) (gl-translate -3.75 -3.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.8 0.8 0.2 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_SHININESS 0.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; colored ambient, diffuse and specular, low shininess (gl-push-matrix) (gl-translate -1.25 -3.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.8 0.8 0.2 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-material GL_FRONT GL_SHININESS 5.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; colored ambient, diffuse and specular, high shininess (gl-push-matrix) (gl-translate 1.25 -3.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.8 0.8 0.2 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-material GL_FRONT GL_SHININESS 100.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) ;; ambient, diffuse and emission (gl-push-matrix) (gl-translate 3.75 -3.0 0.0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.8 0.8 0.2 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.1 0.5 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_SHININESS 0.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.3 0.2 0.2 1.0)) (glut-solid-sphere 1.0 16 16) (gl-pop-matrix) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w (* 2 h)) (gl-ortho -6.0 6.0 (* -3.0 (/ (* 2 h) w)) (* 3.0 (/ (* 2 h) w)) -10.0 10.0) (gl-ortho (* -6.0 (/ w (* 2 h))) (* 6.0 (/ w (* 2 h))) -3.0 3.0 -10.0 10.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 600 450) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-main-loop) 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example5-9.scm������������������������������������������������������0000644�0000764�0000764�00000004331�11533026402�020035� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 5-9 Using glColorMaterial (use gl) (use gl.glut) (use srfi-4) (define *diffuse* (f32vector 0.5 0.5 0.5 1.0)) (define (init) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-shade-model GL_SMOOTH) (gl-enable GL_DEPTH_TEST) (gl-material GL_FRONT GL_DIFFUSE *diffuse*) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-material GL_FRONT GL_SHININESS 25.0) (gl-light GL_LIGHT0 GL_POSITION '#f32(1.0 1.0 1.0 0.0)) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-color-material GL_FRONT GL_DIFFUSE) (gl-enable GL_COLOR_MATERIAL) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (glut-solid-sphere 1.0 20 16) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (gl-ortho -1.5 1.5 (* -1.5 (/ h w)) (* 1.5 (/ h w)) -10.0 10.0) (gl-ortho (* -1.5 (/ w h)) (* 1.5 (/ w h)) -1.5 1.5 -10.0 10.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (mouse button state x y) (cond ((= button GLUT_LEFT_BUTTON) (when (= state GLUT_DOWN) (inc! (f32vector-ref *diffuse* 0) 0.1) (when (> (f32vector-ref *diffuse* 0) 1.0) (set! (f32vector-ref *diffuse* 0) 0.0)) (gl-color *diffuse*) (glut-post-redisplay))) ((= button GLUT_MIDDLE_BUTTON) (when (= state GLUT_DOWN) (inc! (f32vector-ref *diffuse* 1) 0.1) (when (> (f32vector-ref *diffuse* 1) 1.0) (set! (f32vector-ref *diffuse* 1) 0.0)) (gl-color *diffuse*) (glut-post-redisplay))) ((= button GLUT_RIGHT_BUTTON) (when (= state GLUT_DOWN) (inc! (f32vector-ref *diffuse* 2) 0.1) (when (> (f32vector-ref *diffuse* 2) 1.0) (set! (f32vector-ref *diffuse* 2) 0.0)) (gl-color *diffuse*) (glut-post-redisplay))) )) (define (keyboard key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 500 500) (glut-init-window-position 100 100) (glut-create-window *program-name*) (init) (glut-display-func disp) (glut-reshape-func reshape) (glut-mouse-func mouse) (glut-keyboard-func keyboard) (glut-main-loop) 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example6-1.scm������������������������������������������������������0000644�0000764�0000764�00000003127�11533026402�020030� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 6-1 Blending Example (use gl) (use gl.glut) (define *left-first* #t) (define (init) (gl-enable GL_BLEND) (gl-blend-func GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA) (gl-shade-model GL_FLAT) (gl-clear-color 0.0 0.0 0.0 0.0) ) (define (draw-left-triangle) (gl-begin GL_TRIANGLES) (gl-color '#f32(1.0 1.0 0.0 0.75)) (gl-vertex '#f32(0.1 0.9 0.0)) (gl-vertex '#f32(0.1 0.1 0.0)) (gl-vertex '#f32(0.7 0.5 0.0)) (gl-end)) (define (draw-right-triangle) (gl-begin GL_TRIANGLES) (gl-color '#f32(0.0 1.0 1.0 0.75)) (gl-vertex '#f32(0.9 0.9 0.0)) (gl-vertex '#f32(0.3 0.5 0.0)) (gl-vertex '#f32(0.9 0.1 0.0)) (gl-end)) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (if *left-first* (begin (draw-left-triangle) (draw-right-triangle)) (begin (draw-right-triangle) (draw-left-triangle))) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (glu-ortho-2d 0.0 1.0 0.0 (* 1.0 (/ h w))) (glu-ortho-2d 0.0 (* 1.0 (/ w h)) 0.0 1.0)) ) (define (keyboard key x y) (cond ((or (= key (char->integer #\t)) (= key (char->integer #\T))) (set! *left-first* (not *left-first*)) (glut-post-redisplay)) ((= key (char->integer #\escape)) (exit 0)) )) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 200 200) (glut-create-window *program-name*) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example6-2.scm������������������������������������������������������0000644�0000764�0000764�00000005224�11533026402�020031� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 6-2 Three-Dimensional Blending (use gl) (use gl.glut) (define MAXZ 8.0) (define MINZ -8.0) (define ZINC 0.4) (define *solid-z* MAXZ) (define *transparent-z* MINZ) (define *sphere-list* #f) (define *cube-list* #f) (define (init) (gl-material GL_FRONT GL_SPECULAR '#f32(1.0 1.0 1.0 0.15)) (gl-material GL_FRONT GL_SHININESS 100.0) (gl-light GL_LIGHT0 GL_POSITION '#f32(0.5 0.5 1.0 0.0)) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-enable GL_DEPTH_TEST) (set! *sphere-list* (gl-gen-lists 1)) (gl-new-list *sphere-list* GL_COMPILE) (glut-solid-sphere 0.4 16 16) (gl-end-list) (set! *cube-list* (gl-gen-lists 1)) (gl-new-list *cube-list* GL_COMPILE) (glut-solid-cube 0.6) (gl-end-list) ) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-push-matrix) (gl-translate -0.15 -0.15 *solid-z*) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.75 0.75 0.0 1.0)) (gl-call-list *sphere-list*) (gl-pop-matrix) (gl-push-matrix) (gl-translate 0.15 0.15 *transparent-z*) (gl-rotate 15.0 1.0 1.0 0.0) (gl-rotate 30.0 0.0 1.0 0.0) (gl-material GL_FRONT GL_EMISSION '#f32(0.0 0.3 0.3 0.6)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.0 0.8 0.8 0.6)) (gl-enable GL_BLEND) (gl-depth-mask #f) (gl-blend-func GL_SRC_ALPHA GL_ONE) (gl-call-list *cube-list*) (gl-depth-mask #t) (gl-disable GL_BLEND) (gl-pop-matrix) (glut-swap-buffers) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (gl-ortho -1.5 1.5 (* -1.5 (/ h w)) (* 1.5 (/ h w)) -10.0 10.0) (gl-ortho (* -1.5 (/ w h)) (* 1.5 (/ w h)) -1.5 1.5 -10.0 10.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (animate) (if (or (<= *solid-z* MINZ) (>= *transparent-z* MAXZ)) (glut-idle-func #f) (begin (dec! *solid-z* ZINC) (inc! *transparent-z* ZINC) (glut-post-redisplay))) ) (define (keyboard key x y) (cond ((or (= key (char->integer #\a)) (= key (char->integer #\A))) (set! *solid-z* MAXZ) (set! *transparent-z* MINZ) (glut-idle-func animate)) ((or (= key (char->integer #\r)) (= key (char->integer #\R))) (set! *solid-z* MAXZ) (set! *transparent-z* MINZ) (glut-post-redisplay)) ((= key 27) (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 500 500) (glut-create-window *program-name*) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example6-3.scm������������������������������������������������������0000644�0000764�0000764�00000003475�11533026402�020040� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 6-3 Antialised Lines (use gl) (use gl.glut) (define *rot-angle* 0) (define (init) (let ((g (gl-get-float GL_LINE_WIDTH_GRANULARITY))) (format #t "GL_LINE_WIDTH_GRANULARITY value is ~s\n" g)) (let ((r (gl-get-float GL_LINE_WIDTH_RANGE))) (format #t "GL_LINE_WIDTH_RANGE values are ~s ~s\n" (ref r 0) (ref r 1))) (gl-enable GL_LINE_SMOOTH) (gl-enable GL_BLEND) (gl-blend-func GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA) (gl-hint GL_LINE_SMOOTH_HINT GL_DONT_CARE) (gl-line-width 1.5) (gl-clear-color 0.0 0.0 0.0 0.0) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-color 0.0 1.0 0.0) (gl-push-matrix) (gl-rotate (- *rot-angle*) 0.0 0.0 0.1) (gl-begin GL_LINES) (gl-vertex -0.5 0.5) (gl-vertex 0.5 -0.5) (gl-end) (gl-pop-matrix) (gl-color 0.0 0.0 1.0) (gl-push-matrix) (gl-rotate *rot-angle* 0.0 0.0 0.1) (gl-begin GL_LINES) (gl-vertex 0.5 0.5) (gl-vertex -0.5 -0.5) (gl-end) (gl-pop-matrix) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (glu-ortho-2d -1.0 1.0 (* -1.0 (/ h w)) (* 1.0 (/ h w))) (glu-ortho-2d (* -1.0 (/ w h)) (* 1.0 (/ w h)) -1.0 1.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (cond ((or (= key (char->integer #\r)) (= key (char->integer #\R))) (inc! *rot-angle* 20.0) (if (>= *rot-angle* 360.0) (set! *rot-angle* 0.0)) (glut-post-redisplay)) ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB)) (glut-init-window-size 200 200) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example6-4.scm������������������������������������������������������0000644�0000764�0000764�00000003500�11533026402�020026� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 6-4 Antialiasing in Color-Index mode (use gl) (use gl.glut) (define-constant RAMPSIZE 16) (define-constant RAMP1START 32) (define-constant RAMP2START 48) (define *rot-angle* 0) (define (init) ;; set up color palette (do ((i 0 (+ i 1))) ((= i RAMPSIZE)) (let ((shade (/ i RAMPSIZE))) (glut-set-color (+ RAMP1START i) 0.0 shade 0.0) (glut-set-color (+ RAMP2START i) 0.0 0.0 shade))) (gl-enable GL_LINE_SMOOTH) (gl-hint GL_LINE_SMOOTH_HINT GL_DONT_CARE) (gl-line-width 1.5) (gl-clear-index RAMP1START) ) (define (disp) (gl-clear GL_COLOR_BUFFER_BIT) (gl-index RAMP1START) (gl-push-matrix) (gl-rotate (- *rot-angle*) 0.0 0.0 0.1) (gl-begin GL_LINES) (gl-vertex -0.5 0.5) (gl-vertex 0.5 -0.5) (gl-end) (gl-pop-matrix) (gl-index RAMP2START) (gl-push-matrix) (gl-rotate *rot-angle* 0.0 0.0 0.1) (gl-begin GL_LINES) (gl-vertex 0.5 0.5) (gl-vertex -0.5 -0.5) (gl-end) (gl-pop-matrix) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (glu-ortho-2d -1.0 1.0 (* -1.0 (/ h w)) (* 1.0 (/ h w))) (glu-ortho-2d (* -1.0 (/ w h)) (* 1.0 (/ w h)) -1.0 1.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (cond ((or (= key (char->integer #\r)) (= key (char->integer #\R))) (inc! *rot-angle* 20.0) (if (>= *rot-angle* 360.0) (set! *rot-angle* 0.0)) (glut-post-redisplay)) ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_INDEX)) (glut-init-window-size 200 200) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example6-5.scm������������������������������������������������������0000644�0000764�0000764�00000004510�11533026402�020031� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 6-5 Five Fogged Spheres in RGBA Mode (use gl) (use gl.glut) (define *fog-mode* GL_EXP) (define (init) (gl-enable GL_DEPTH_TEST) (gl-light GL_LIGHT0 GL_POSITION '#f32(0.5 0.5 3.0 0.0)) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-material GL_FRONT GL_AMBIENT '#f32(0.1745 0.01175 0.01175 0.0)) (gl-material GL_FRONT GL_DIFFUSE '#f32(0.61424 0.04136 0.04136 0.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(0.727811 0.626959 0.626959 0.0)) (gl-material GL_FRONT GL_SHININESS (* 0.6 128)) (gl-enable GL_FOG) (gl-fog GL_FOG_MODE GL_EXP) (gl-fog GL_FOG_COLOR '#f32(0.5 0.5 0.5 1.0)) (gl-fog GL_FOG_DENSITY 0.35) (gl-hint GL_FOG_HINT GL_DONT_CARE) (gl-fog GL_FOG_START 1.0) (gl-fog GL_FOG_END 5.0) (gl-clear-color 0.5 0.5 0.5 1.0) ) (define (render-sphere x y z) (gl-push-matrix) (gl-translate x y z) (glut-solid-sphere 0.4 16 16) (gl-pop-matrix)) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (render-sphere -2.0 -0.5 -1.0) (render-sphere -1.0 -0.5 -2.0) (render-sphere 0.0 -0.5 -3.0) (render-sphere 1.0 -0.5 -4.0) (render-sphere 2.0 -0.5 -5.0) (gl-flush) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (gl-ortho -2.5 2.5 (* -2.5 (/ h w)) (* 2.5 (/ h w)) -10.0 10.0) (gl-ortho (* -2.5 (/ w h)) (* 2.5 (/ w h)) -2.5 2.5 -10.0 10.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard key x y) (cond ((or (= key (char->integer #\f)) (= key (char->integer #\F))) (receive (next-mode next-mode-name) (apply values (cdr (assv *fog-mode* `((,GL_EXP ,GL_EXP2 GL_EXP2) (,GL_EXP2 ,GL_LINEAR GL_LINEAR) (,GL_LINEAR ,GL_EXP GL_EXP))))) (print #`"Fog mode is ,|next-mode-name|") (set! *fog-mode* next-mode) (gl-fog GL_FOG_MODE *fog-mode*)) (glut-post-redisplay)) ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 500 500) (glut-create-window (car args)) (init) (glut-reshape-func reshape) (glut-keyboard-func keyboard) (glut-display-func disp) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example6-7.scm������������������������������������������������������0000644�0000764�0000764�00000006422�11533026402�020037� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 6-7 Polygon Offset to Eliminate Visual Artifacts (use gl) (use gl.glut) (define *list* 0) (define *spinx* 0) (define *spiny* 0) (define *tdist* 0.0) (define *polyfactor* 1.0) (define *polyunits* 1.0) (define (disp) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-push-matrix) (gl-translate 0.0 0.0 *tdist*) (gl-rotate *spinx* 1.0 0.0 0.0) (gl-rotate *spiny* 0.0 1.0 0.0) (gl-material GL_FRONT GL_AMBIENT_AND_DIFFUSE '#f32(0.8 0.8 0.8 1.0)) (gl-material GL_FRONT GL_SPECULAR '#f32(0.0 0.0 0.0 1.0)) (gl-material GL_FRONT GL_SHININESS 0.0) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-enable GL_POLYGON_OFFSET_FILL) (gl-polygon-offset *polyfactor* *polyunits*) (gl-call-list *list*) (gl-disable GL_POLYGON_OFFSET_FILL) (gl-disable GL_LIGHTING) (gl-disable GL_LIGHT0) (gl-color 1.0 1.0 1.0) (gl-polygon-mode GL_FRONT_AND_BACK GL_LINE) (gl-call-list *list*) (gl-polygon-mode GL_FRONT_AND_BACK GL_FILL) (gl-pop-matrix) (gl-flush) ) (define (init) (gl-clear-color 0.0 0.0 0.0 1.0) (set! *list* (gl-gen-lists 1)) (gl-new-list *list* GL_COMPILE) (glut-solid-sphere 1.0 20 12) (gl-end-list) (gl-enable GL_DEPTH_TEST) (gl-light GL_LIGHT0 GL_AMBIENT '#f32(0.0 0.0 0.0 1.0)) (gl-light GL_LIGHT0 GL_DIFFUSE '#f32(1.0 1.0 1.0 1.0)) (gl-light GL_LIGHT0 GL_SPECULAR '#f32(1.0 1.0 1.0 1.0)) (gl-light GL_LIGHT0 GL_POSITION '#f32(1.0 1.0 1.0 0.0)) (gl-light-model GL_LIGHT_MODEL_AMBIENT '#f32(0.2 0.2 0.2 1.0)) ) (define (reshape w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 45.0 (/ w h) 1.0 10.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (glu-look-at 0.0 0.0 5.0 0.0 0.0 0.0 0.0 1.0 0.0) ) (define (mouse button state x y) (cond ((= button GLUT_LEFT_BUTTON) (when (= state GLUT_DOWN) (set! *spinx* (modulo (+ *spinx* 5) 360)) (glut-post-redisplay))) ((= button GLUT_MIDDLE_BUTTON) (when (= state GLUT_DOWN) (set! *spiny* (modulo (+ *spiny* 5) 360)) (glut-post-redisplay))) ((= button GLUT_RIGHT_BUTTON) (when (= state GLUT_UP) (exit 0))) )) (define (keyboard key x y) (cond ((= key (char->integer #\t)) (when (< *tdist* 4.0) (inc! *tdist* 0.5) (glut-post-redisplay))) ((= key (char->integer #\T)) (when (> *tdist* -5.0) (dec! *tdist* 0.5) (glut-post-redisplay))) ((= key (char->integer #\F)) (inc! *polyfactor* 0.1) (print #`"polyfactor is ,|*polyfactor*|") (glut-post-redisplay)) ((= key (char->integer #\f)) (dec! *polyfactor* 0.1) (print #`"polyfactor is ,|*polyfactor*|") (glut-post-redisplay)) ((= key (char->integer #\U)) (inc! *polyunits* 1.0) (print #`"polyunits is ,|*polyunits*|") (glut-post-redisplay)) ((= key (char->integer #\u)) (dec! *polyunits* 1.0) (print #`"polyunits is ,|*polyunits*|") (glut-post-redisplay)) ((= key 27) ;ESC (exit 0))) ) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH)) (glut-init-window-size 500 500) (glut-create-window (car args)) (glut-reshape-func reshape) (glut-display-func disp) (glut-mouse-func mouse) (glut-keyboard-func keyboard) (init) (glut-main-loop) 0) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example10-1.scm�����������������������������������������������������0000644�0000764�0000764�00000005465�11533026402�020112� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 10-1 Using the stencil test (use gl) (use gl.glut) (define-constant YELLOWMAT 1) (define-constant BLUEMAT 2) (define (init) (let ((yellow-diffuse '#f32(0.7 0.7 0.0 1.0)) (yellow-specular '#f32(1.0 1.0 1.0 1.0)) (blue-diffuse '#f32(0.1 0.1 0.7 1.0)) (blue-specular '#f32(0.1 1.0 1.0 1.0)) (position-one '#f32(1.0 1.0 1.0 0.0)) ) (gl-new-list YELLOWMAT GL_COMPILE) (gl-material GL_FRONT GL_DIFFUSE yellow-diffuse) (gl-material GL_FRONT GL_SPECULAR yellow-specular) (gl-material GL_FRONT GL_SHININESS 45.0) (gl-end-list) (gl-new-list BLUEMAT GL_COMPILE) (gl-material GL_FRONT GL_DIFFUSE blue-diffuse) (gl-material GL_FRONT GL_SPECULAR blue-specular) (gl-material GL_FRONT GL_SHININESS 45.0) (gl-end-list) (gl-light GL_LIGHT0 GL_POSITION position-one) (gl-enable GL_LIGHT0) (gl-enable GL_LIGHTING) (gl-enable GL_DEPTH_TEST) ;(gl-clear-stencil 0) ;(gl-enable GL_STENCIL_TEST) )) (define (display-proc) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) ;; draw blue sphere where the stencil is 1 (gl-stencil-func GL_EQUAL 1 1) (gl-stencil-op GL_KEEP GL_KEEP GL_KEEP) (gl-call-list BLUEMAT) (glut-solid-sphere 0.5 15 15) ;; draw the tori where the tencil is not 1 (gl-stencil-func GL_NOTEQUAL 1 1) (gl-push-matrix) (gl-rotate 45.0 0.0 0.0 1.0) (gl-rotate 45.0 0.0 1.0 0.0) (gl-call-list YELLOWMAT) (glut-solid-torus 0.275 0.85 30 30) (gl-push-matrix) (gl-rotate 90.0 1.0 0.0 0.0) (glut-solid-torus 0.275 0.85 30 30) (gl-pop-matrix) (gl-pop-matrix) (gl-flush) ) (define (reshape-proc w h) (gl-viewport 0 0 w h) ;; create a diamond shaped stencil area (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (glu-ortho-2d -3.0 3.0 (* -3.0 (/ h w)) (* 3.0 (/ h w))) (glu-ortho-2d (* -3.0 (/ w h)) (* 3.0 (/ w h)) -3.0 3.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-clear GL_STENCIL_BUFFER_BIT) (gl-stencil-func GL_ALWAYS 1 1) (gl-stencil-op GL_REPLACE GL_REPLACE GL_REPLACE) (gl-begin* GL_QUADS (gl-vertex -1.0 0.0) (gl-vertex 0.0 1.0) (gl-vertex 1.0 0.0) (gl-vertex 0.0 -1.0)) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (glu-perspective 45.0 (/ w h) 3.0 7.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -5.0) ) (define (keyboard-proc key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH GLUT_STENCIL)) (glut-init-window-size 400 400) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-reshape-func reshape-proc) (glut-display-func display-proc) (glut-keyboard-func keyboard-proc) (glut-main-loop) 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example10-3.scm�����������������������������������������������������0000644�0000764�0000764�00000010135�11533026402�020102� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 10-3 Antialiasing by jittering the viewing volume (use gl) (use gl.glut) (use math.const) (define (acc-frustum left right bottom top near far pixdx pixdy eyedx eyedy focus) (let ((viewport (gl-get-integer GL_VIEWPORT)) (xwsize (- right left)) (ywsize (- top bottom))) (let ((dx (- (+ (* pixdx (/ xwsize (ref viewport 2))) (* eyedx (/ near focus))))) (dy (- (+ (* pixdy (/ ywsize (ref viewport 3))) (* eyedy (/ near focus)))))) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-frustum (+ left dx) (+ right dx) (+ bottom dy) (+ top dy) near far) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate (- eyedx) (- eyedy) 0.0) ))) (define (acc-perspective fovy aspect near far pixdx pixdy eyedx eyedy focus) (let* ((fov2 (/ (* fovy pi/180) 2.0)) (top (/ near (/ (cos fov2) (sin fov2)))) (bottom (- top)) (right (* top aspect)) (left (- right))) (acc-frustum left right bottom top near far pixdy pixdy eyedx eyedy focus) )) (define (init) (let ((mat-ambient '#f32(1.0 1.0 1.0 1.0)) (mat-specular '#f32(1.0 1.0 1.0 1.0)) (light-position '#f32(0.0 0.0 10.0 1.0)) (lm-ambient '#f32(0.2 0.2 0.2 1.0))) (gl-material GL_FRONT GL_AMBIENT mat-ambient) (gl-material GL_FRONT GL_SPECULAR mat-specular) (gl-material GL_FRONT GL_SHININESS 50.0) (gl-light GL_LIGHT0 GL_POSITION light-position) (gl-light-model GL_LIGHT_MODEL_AMBIENT lm-ambient) (gl-enable GL_LIGHT0) (gl-enable GL_LIGHTING) (gl-enable GL_DEPTH_TEST) (gl-shade-model GL_FLAT) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-clear-accum 0.0 0.0 0.0 0.0) )) (define (display-objects) (let ((torus-diffuse '#f32(0.7 0.7 0.0 1.0)) (cube-diffuse '#f32(0.0 0.7 0.7 1.0)) (sphere-diffuse '#f32(0.7 0.0 0.7 1.0)) (octa-diffuse '#f32(0.7 0.4 0.4 1.0))) (gl-push-matrix* (gl-translate 0 0 -5.0) (gl-rotate 30.0 1.0 0.0 0.0) (gl-push-matrix* (gl-translate -0.8 0.35 0) (gl-rotate 100.0 1.0 0.0 0.0) (gl-material GL_FRONT GL_DIFFUSE torus-diffuse) (glut-solid-torus 0.275 0.85 16 16)) (gl-push-matrix* (gl-translate -0.75 -0.5 0) (gl-rotate 45.0 0.0 0.0 1.0) (gl-rotate 54.0 1.0 0.0 0.0) (gl-material GL_FRONT GL_DIFFUSE cube-diffuse) (glut-solid-cube 1.5)) (gl-push-matrix* (gl-translate 0.75 0.6 0) (gl-rotate 30.0 1.0 0.0 0.0) (gl-material GL_FRONT GL_DIFFUSE sphere-diffuse) (glut-solid-sphere 1.0 16 16)) (gl-push-matrix* (gl-translate 0.7 -0.9 0.25) (gl-material GL_FRONT GL_DIFFUSE octa-diffuse) (glut-solid-octahedron)) ) )) (define-constant ACSIZE 8) (define-constant J8 ;; jitter offsets '#((-0.334818 0.435331) ( 0.286438 -0.393495) ( 0.459462 0.141540) (-0.414498 -0.192829) (-0.183790 0.082102) (-0.079263 -0.317383) ( 0.102254 0.299133) ( 0.164216 -0.054399))) (define (display-proc) (let1 viewport (gl-get-integer GL_VIEWPORT) (gl-clear GL_ACCUM_BUFFER_BIT) (dotimes (jitter ACSIZE) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (acc-perspective 50.0 (/ (ref viewport 2) (ref viewport 3)) 1.0 15.0 (car (ref J8 jitter)) (cadr (ref J8 jitter)) 0.0 0.0 1.0) (display-objects) (gl-accum GL_ACCUM (/ ACSIZE))) (gl-accum GL_RETURN 1.0) (gl-flush) )) (define (reshape-proc w h) (gl-viewport 0 0 w h) ) (define (keyboard-proc key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH GLUT_ACCUM)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-reshape-func reshape-proc) (glut-display-func display-proc) (glut-keyboard-func keyboard-proc) (glut-main-loop) 0) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example10-4.scm�����������������������������������������������������0000644�0000764�0000764�00000007016�11533026402�020107� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 10-4 Antialiasing by jittering the orthographic projection (use gl) (use gl.glut) (use math.const) (define (init) (let ((mat-ambient '#f32(1.0 1.0 1.0 1.0)) (mat-specular '#f32(1.0 1.0 1.0 1.0)) (light-position '#f32(0.0 0.0 10.0 1.0)) (lm-ambient '#f32(0.2 0.2 0.2 1.0))) (gl-material GL_FRONT GL_AMBIENT mat-ambient) (gl-material GL_FRONT GL_SPECULAR mat-specular) (gl-material GL_FRONT GL_SHININESS 50.0) (gl-light GL_LIGHT0 GL_POSITION light-position) (gl-light-model GL_LIGHT_MODEL_AMBIENT lm-ambient) (gl-enable GL_LIGHT0) (gl-enable GL_LIGHTING) (gl-enable GL_DEPTH_TEST) (gl-shade-model GL_FLAT) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-clear-accum 0.0 0.0 0.0 0.0) )) (define (display-objects) (let ((torus-diffuse '#f32(0.7 0.7 0.0 1.0)) (cube-diffuse '#f32(0.0 0.7 0.7 1.0)) (sphere-diffuse '#f32(0.7 0.0 0.7 1.0)) (octa-diffuse '#f32(0.7 0.4 0.4 1.0))) (gl-push-matrix* (gl-translate 0 0 -5.0) (gl-rotate 30.0 1.0 0.0 0.0) (gl-push-matrix* (gl-translate -0.8 0.35 0) (gl-rotate 100.0 1.0 0.0 0.0) (gl-material GL_FRONT GL_DIFFUSE torus-diffuse) (glut-solid-torus 0.275 0.85 16 16)) (gl-push-matrix* (gl-translate -0.75 -0.5 0) (gl-rotate 45.0 0.0 0.0 1.0) (gl-rotate 54.0 1.0 0.0 0.0) (gl-material GL_FRONT GL_DIFFUSE cube-diffuse) (glut-solid-cube 1.5)) (gl-push-matrix* (gl-translate 0.75 0.6 0) (gl-rotate 30.0 1.0 0.0 0.0) (gl-material GL_FRONT GL_DIFFUSE sphere-diffuse) (glut-solid-sphere 1.0 16 16)) (gl-push-matrix* (gl-translate 0.7 -0.9 0.25) (gl-material GL_FRONT GL_DIFFUSE octa-diffuse) (glut-solid-octahedron)) ) )) (define-constant ACSIZE 8) (define-constant J8 ;; jitter offsets '#((-0.334818 0.435331) ( 0.286438 -0.393495) ( 0.459462 0.141540) (-0.414498 -0.192829) (-0.183790 0.082102) (-0.079263 -0.317383) ( 0.102254 0.299133) ( 0.164216 -0.054399))) (define (display-proc) (let1 viewport (gl-get-integer GL_VIEWPORT) (gl-clear GL_ACCUM_BUFFER_BIT) (dotimes (jitter ACSIZE) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (gl-push-matrix* ;; Note that 4.5 is the distance in world space between ;; left and right and bottom and top. ;; This formula converts fractional pixel movement to ;; world coordinates. (gl-translate (/ (* (car (ref J8 jitter)) 4.5) (ref viewport 2)) (/ (* (cadr (ref J8 jitter)) 4.5) (ref viewport 3)) 0.0) (display-objects)) (gl-accum GL_ACCUM (/ ACSIZE))) (gl-accum GL_RETURN 1.0) (gl-flush) )) (define (reshape-proc w h) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (if (<= w h) (gl-ortho -2.25 2.25 (* -2.25 (/ h w)) (* 2.25 (/ h w)) -10.0 10.0) (gl-ortho (* -2.25 (/ w h)) (* 2.25 (/ w h)) -2.25 2.25 -10.0 10.0)) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) ) (define (keyboard-proc key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH GLUT_ACCUM)) (glut-init-window-size 250 250) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-reshape-func reshape-proc) (glut-display-func display-proc) (glut-keyboard-func keyboard-proc) (glut-main-loop) 0) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/glbook/example10-5.scm�����������������������������������������������������0000644�0000764�0000764�00000010453�11533026402�020107� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; Example 10-5 Depth-of-field effect (use gl) (use gl.glut) (use gauche.uvector) (use math.const) (define *teapot-list* #f) (define (acc-frustum left right bottom top near far pixdx pixdy eyedx eyedy focus) (let ((viewport (gl-get-integer GL_VIEWPORT)) (xwsize (- right left)) (ywsize (- top bottom))) (let ((dx (- (+ (* pixdx (/ xwsize (ref viewport 2))) (* eyedx (/ near focus))))) (dy (- (+ (* pixdy (/ ywsize (ref viewport 3))) (* eyedy (/ near focus)))))) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-frustum (+ left dx) (+ right dx) (+ bottom dy) (+ top dy) near far) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate (- eyedx) (- eyedy) 0.0) ))) (define (acc-perspective fovy aspect near far pixdx pixdy eyedx eyedy focus) (let* ((fov2 (/ (* fovy pi/180) 2.0)) (top (/ near (/ (cos fov2) (sin fov2)))) (bottom (- top)) (right (* top aspect)) (left (- right))) (acc-frustum left right bottom top near far pixdy pixdy eyedx eyedy focus) )) (define (init) (gl-light GL_LIGHT0 GL_AMBIENT '#f32(0.0 0.0 0.0 1.0)) (gl-light GL_LIGHT0 GL_DIFFUSE '#f32(1.0 1.0 1.0 1.0)) (gl-light GL_LIGHT0 GL_POSITION '#f32(0.0 3.0 3.0 0.0)) (gl-light-model GL_LIGHT_MODEL_AMBIENT '#f32(0.2 0.2 0.2 1.0)) (gl-light-model GL_LIGHT_MODEL_LOCAL_VIEWER '#f32(0.0)) (gl-front-face GL_CW) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-enable GL_AUTO_NORMAL) (gl-enable GL_NORMALIZE) (gl-enable GL_DEPTH_TEST) (gl-clear-color 0.0 0.0 0.0 0.0) (gl-clear-accum 0.0 0.0 0.0 0.0) (set! *teapot-list* (gl-gen-lists 1)) (gl-new-list *teapot-list* GL_COMPILE) (glut-solid-teapot 0.5) (gl-end-list) ) (define (render-teapot x y z ambr ambg ambb difr difg difb specr specg specb shine) (gl-push-matrix* (gl-translate x y z) (gl-material GL_FRONT GL_AMBIENT (f32vector ambr ambg ambb 1.0)) (gl-material GL_FRONT GL_DIFFUSE (f32vector difr difg difb 1.0)) (gl-material GL_FRONT GL_SPECULAR (f32vector specr specg specb 1.0)) (gl-material GL_FRONT GL_SHININESS (* shine 128.0)) (gl-call-list *teapot-list*) )) (define-constant J8 ;; jitter offsets '#((-0.334818 0.435331) ( 0.286438 -0.393495) ( 0.459462 0.141540) (-0.414498 -0.192829) (-0.183790 0.082102) (-0.079263 -0.317383) ( 0.102254 0.299133) ( 0.164216 -0.054399))) (define (display-proc) (let1 viewport (gl-get-integer GL_VIEWPORT) (gl-clear GL_ACCUM_BUFFER_BIT) (dotimes (jitter 8) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (acc-perspective 45.0 (/ (ref viewport 2) (ref viewport 3)) 1.0 15.0 0.0 0.0 (* 0.33 (car (ref J8 jitter))) (* 0.33 (cadr (ref J8 jitter))) 5.0) (render-teapot -1.1 -0.5 -4.5 0.1745 0.01175 0.01175 0.61424 0.04136 0.04136 0.727811 0.626959 0.626959 0.6) (render-teapot -0.5 -0.5 -5.0 0.24725 0.1995 0.0745 0.75164 0.60648 0.22648 0.628281 0.555802 0.366065 0.4) (render-teapot 0.2 -0.5 -5.5 0.19225 0.19225 0.19225 0.50754 0.50754 0.50754 0.508273 0.508273 0.508273 0.4) (render-teapot 1.0 -0.5 -6.0 0.0215 0.1745 0.0215 0.07568 0.61424 0.07568 0.633 0.727811 0.633 0.6) (render-teapot 1.8 -0.5 -6.5 0.0 0.1 0.06 0.0 0.50980392 0.50980392 0.50196078 0.50196078 0.50196078 .25) (gl-accum GL_ACCUM (/ 8))) (gl-accum GL_RETURN 1.0) (gl-flush) )) (define (reshape-proc w h) (gl-viewport 0 0 w h) ) (define (keyboard-proc key x y) (when (= key 27) (exit 0))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_SINGLE GLUT_RGB GLUT_DEPTH GLUT_ACCUM)) (glut-init-window-size 400 400) (glut-init-window-position 100 100) (glut-create-window (car args)) (init) (glut-reshape-func reshape-proc) (glut-display-func display-proc) (glut-keyboard-func keyboard-proc) (glut-main-loop) 0) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/images/��������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�015432� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/images/noturn.rgb����������������������������������������������������������0000644�0000764�0000764�00001610121�11533026402�017455� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ú�@Ö��������ÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� Ÿ� ��W�¦�þ�úJ�ö‘�òÞ�ï*�ëo�çº�ä�à:�Üz�Ø¿�Õ �ÑX�Í©�Éò�ÆA�–�¾å�»,�·�³Ö�°/�¬Ÿ�©�¥f�¡´�ž�šo�–»�“�V�‹©�‡û�„e�€¿�}�yy�ué�r?�n–�jý�gX�cÁ�` �\`�X·�Tú�Q@�M›�Iì�FB�B£�>ø�;b�7»�4�0v�,Ü�)8�%�!á�8�Š�Ì�#�y� È� �X��£�üí�ù8�õ�ñÁ�î�êR�æ’�âÞ�ß$�Ûh�×¹�Óþ�ÐJ�Ì™�Èé�Å<�ÁŠ�½Ö�º4�¶Œ�²Î�¯�«Q�§•�£Ú� $�œe�˜ �”×�‘#�`�‰ª�…î�‚1�~}�zÑ�w�sb�o¹�l�hu�dÊ�a!�]v�YÔ�V'�Ry�N×�K5�G�Cæ�@<�<�8Þ�54�1‰�-Ð�*�&b�"Å�#�r�®�õ�=� ‰�Ð��Y�ý—�ùÝ�ö�òo�î¤�êâ�ç#�ã^�ßž�ÛÔ�Ø�ÔK�Ј�̾�É�Å9�Áz�½°�¹é�¶#�²Y�®’�ªÌ�§ �£E�Ÿ|�›¹�—ñ�”,�`�Œ›�ˆÏ�…�I�}‡�yÂ�uþ�r9�nn�j§�fæ�c �__�[Ÿ�Wß�T�Pb�Lœ�HÕ�E�A\�=˜�9Þ�6�2a�.¥�*Þ�'�#Y�™�à�#�_�”� Ô� �G�€�ý·�ùð�ö&�òg�î™�êÐ�ç�ã>�ßz�Û­�׿�Ô�ÐQ�Ì‘�ÈÅ�Äø�Á)�½Y�¹‰�µ·�±é�®�ªG�¦z�¢°�žå�›�—Q�“‡�½�‹ó�ˆ"�„U�€ˆ�|¸�xè�u�qF�mu�i¦�eÚ�b �^<�Zu�V©�RÞ�O�KB�Gs�C¦�?à�<�8M�4�0µ�,æ�)�%Š�!½�ú�7�q�­�æ� �T�‹�ÿ¾�û÷�ø.�ôe�ð«�ìß�é�åA�áv�Ý«�Ùã�Ö �Ò^�Γ�ÊË�Ç �ÃD�¿�»»�·õ�´.�°d�¬›�¨Ñ�¥�¡>�q�™«�•á�’+�Žk�Š£�†Ú�ƒ�V�{‹�wÃ�t�p\�l�hÖ�e�ab�]¥�Yé�V.�Rk�N¢�JÔ�G �CB�?s�;®�7ç�4#�0W�,Š�(Ã�$ü�!/�i��Ñ��8� l� �Õ�ÿ �û:�÷l�ó¡�ïÕ�ì �è=�äk�à£�Ü×�Ù�Õ=�Ñw�Í©�Éà�Æ�ÂG�¾{�º²�¶ê�³�¯S�«‰�§Ç�£þ� 4�œl�˜¢�”Ù�‘�L�‰Š�…Á�ø�~;�zu�v´�rõ�o8�kx�gÁ�d�`:�\n�X¢�T×�Q�ME�Iz�E­�Aâ�>�:O�6‚�2¶�.é�+�'T�#Ž�Ã�ÿ�7�k�Ÿ� Õ� �F�…��ý¿��ùü��ö7��òr��î¤��êÙ��ç��ãH��ß}��Û´��×ì��Ô,��Ðn��Ì©��ÈÝ��Å��Áa��½˜��¹Û��¶��²a��®›��ªÙ��§��£N��Ÿ’��›Ì��˜��”J��†��ŒÁ��‰��…>��x��}µ��yí��v!��rT��n‹��j¾��fò��c$��_[��[Œ��W½��Sô��P)��L^��HŽ��DÃ��@ù��=+��9h��5ž��1Õ��.� È� �x�Ò�ÿ!�ûx�÷Â�ô �ðX�ì �èë�å7�áu�ݱ�Ùð�Ö7�ÒŠ�ÎÒ�Ë&�Çl�ú�À�¼^�¸¨�µ�±T�­¬�ª�¦�¢ß�Ÿ,�›‡�—è�”6�‹�ŒÑ�‰"�…|�Ý�~7�zž�vú�sd�o¹�l�hz�dÙ�a9�]„�YÜ�V1�Rt�N¼�K�Gd�CÂ�@�<n�8á�57�1œ�-ò�*[�&º�# �]�·��F�›� ð� A�Š�Ð�þ �úh�ö´�òõ�ï=�ë…�çÍ�ä �à[�Üœ�Øè�Õ5�Ñy�ÍÈ�Ê�Æh�¹�¿�»S�·±�´�°I�¬‹�¨Ì�¥�¡Q�ž�™ß�–�’P�Ž�Šä�‡(�ƒj�¯�{ú�xL�t—�pÜ�m7�iš�eô�bI�^¢�Zð�WU�S£�Oø�LW�H±�E �Aa�=º�: �6\�2°�/�+R�'š�#â� H� �í�,�r� º� �O��þÔ�û�÷Z�ó¤�ïæ�ì�è\�ä�àÛ�Ý�ÙO�Õ‰�ÑÇ�Î��Ê>�Æ}�¸�¾ò�»,�·e�³œ�¯Õ�¬ �¨L�¤‡� ¿�œ÷�™3�•m�‘¤�Ü�Š�†K�‚‡�~Å�{�w>�sz�o°�kê�h&�db�`¡�\Þ�Y�U_�Qž�MÝ�J�FT�B™�>Ú�;�7^�3¡�/ä�,�(_�$š� ×��b� �Ø�� N�ˆ�Â�þù�û1�÷j�ó©�ïÝ�ì�èL�ä€�àµ�Üð�Ù(�Õ^�Ñ‘�ÍË�Ê �Æ=�Âm�¾Ÿ�ºÎ�¶ý�³.�¯^�«�§À�£õ� )�œ^�˜’�”Ì�‘�7�‰h�…›�Í�}þ�z-�v\�r‹�n»�jë�g�cP�_�[·�Wî�T#�PS�L‡�H¸�Dë�A"�=_�9’�5Ç�1ù�.,�*a�&À�#�;�w�±�ï�)� ^�š�Ñ��ý:�ùr�õª�ñé�î#�êU�æ‡�â»�Þî�Û)�×e�Ó£�ÏØ�Ì�ÈH�Ć�ÀÃ�¼ÿ�¹7�µp�±©�­Þ�ª�¦J�¢‚�ž·�ší�—#�“l�®�‹æ�ˆ�„X�€›�|Ñ�y �uR�qœ�mß�j�fY�b �^æ�[*�Wn�S®�Oè�L�HL�D…�@¹�<ð�9(�5c�1œ�-Ð�*�&@�"t�®�â��H�}� °�ã���N�ü�ø°�ôä�ñ�íP�é�å±�áå�Þ�ÚM�Ö‚�Ò¸�Îí�Ë$�ÇV�Ê�¿¿�»õ�¸.�´b�°–�¬Ë�© �¥C�¡x�¯�™æ�–�’T�Ž�ŠÍ�‡�ƒ;�|�{¶�wö�t8�p{�l¸�hÿ�eF�a�]³�Yæ�V�RS�Nˆ�J½�Fñ�C$�?_�;”�7È�3û�0.�,`�(š�$Î�!�@�|�°�ä�� S�‹�Æ��ÿ��û@��÷x��ó¶��ïè��ì��èR��äŠ��àÁ��Ü÷��Ù+��Õi��Ñ©��Íè��Ê ��ÆY��Ÿ��¾Ù��»��·Z��³˜��¯Ù��¬��¨V��¤�� Ï�� ��™V��•Ž��‘É��Ž��ŠD��†ƒ��‚»��~ø��{1��wf��sš��oÐ��l��h7��dj��`��\Ñ��Y��U9��Qk��M¤��IÔ��F��B>��>q��:­��6á��3��/R� � ^�½���c�ü¼�ù�õL�ñœ�íä�ê+�æv�â»�Þ÷�Û5�×z�ÓË�Ð�Ìi�È­�Äû�ÁQ�½¡�¹ç�¶J�²•�®ì�«Y�§¿�¤!� n�œÊ�™+�•w�‘Ë�Ž�Še�†½�ƒ"�z�{Û�x4�t¤�pû�mU�i¸�f�b|�^Å�[�Wt�S·�Oý�LW�H§�E�A`�=²�: �6y�2Þ�/1�+˜�'ø�$J� �ö�F�‡�Þ�3� ‚�Ë��ÿ_�ûª�÷÷�ô:�ð}�ìÂ�é�åO�á�Ýß�Ú&�Öv�Òº�Ï�ËS�Ǧ�Ãù�ÀF�¼”�¸ï�µI�±‰�­Ð�ª �¦S�¢•�žá�›!�—]�“’�Ý�Œ�ˆj�„ª�€í�}:�y�uÔ�r�nt�jÞ�g3�c‹�_â�\1�X—�Tæ�Q6�M•�Iñ�FJ�B£�>ù�;P�7œ�3ð�0D�,Œ�(Û�%�!…�à�/�j�´�û� E�Ž�Ó���üV�ø™�ôØ�ñ*�í_�é�åà�â�ÞX�Ú�ÖÉ�Ó�ÏC�Ë{�ǽ�Ã÷�À6�¼k�¸¦�´ß�±�­N�©Š�¥Ç�¢�ž9�šs�–­�’è��‹V�‡Š�ƒÃ�€�|D�x€�tº�pô�m+�id�e¢�aÞ�^�Z\�V›�RÚ�O�KX�G�CÕ�@�<U�8š�4Ù�1!�-`�)›�%Ú�"�U�ž�à��T� ’�Ê���<�üq�ø¬�ôä�ñ!�íV�éŒ�åÁ�áø�Þ6�Úi�Ö£�ÒÖ�Ï�ËL�Ç�ó�¿å�¼�¸C�´s�°¤�¬Ó�©�¥7�¡n�¡�™Õ�–�’C�Ž{�Š®�†Þ�ƒ�C�{r�w¢�sÑ�p�l1�hd�d•�`Æ�\ù�Y2�Uf�Q™�MÍ�Iü�F/�Ba�>›�:Õ�7�3>�/q�+¤�'ó�$F� {�¹�ô�/�i� ¢� Ù��H�þz�ú²�öë�ó#�ïe�ë™�çË�ãþ�à1�Üh�Ø¡�ÔÞ�Ñ�ÍQ�Ɉ�ÅÆ�Â�¾A�ºx�¶±�²ë�¯�«V�§�£Ä�Ÿú�œ.�˜f�” �ê�'�‰^�…–�Ú�~�zI�vŠ�r×�o�kZ�g—�cÛ�`#�\d�Xª�Të�Q&�M\�I�EÆ�Aý�>.�:m�6£�2Þ�/�+E�'�#¸�é�$�Z��¾� ô� '�[�’�ýÄ�ùõ�ö&�ò\�î’�êÆ�æ÷�ã(�ß_�Û’�×Â�Óû�Ð2�Ìf�È›�ÄÌ�Á�½5�¹p�µ¦�±Ù�®�ªI�¦ƒ�¢¹�žï�›'�—\�“•�Î�Œ �ˆD�„{�€·�|ú�y4�uq�q¸�mö�j8�f�bÀ�^ô�[*�W_�S—�OÍ�L�H4�Dh�@�<Ö�9 �5?�1q�-£�)Ù�&�"I��½�ô�(�\� �Í���C��ü~��ø·��ôô��ñ-��í`��é”��åË��â��Þ8��Úo��Ö¨��Òæ��Ï)��Ëd��ǘ��ÃØ��À��¼Z��¸˜��´Ô��±��­X��©—��¥Ð��¢��žN��šŒ��–Í��“��C��‹��‡Â��ƒû��€8��|p��xª��tÝ��q��mH��iy��e­��aá��^��ZG��V{��R®��Nä��K��GI��C��?¶��;ì��8%��4Z��0’��)����!��,�� ��.��1��+��.��1��1��6��;��7��1��*��2��)��4��+��$��*��2����2��%�� ������+������-��%��5��(��'��������%����%��#����"����0��$��%��7��4��!��2��"����%�� ��&����&����#��+��)��%��-��9��#��"��(��4��2��-��3��0��5��4��8��3��;��-��7��4��/��7��/��/��*��,��/��/����%��:��8��:��7��7��-��9��?��C��-��=��:��:��9��2��)��:��5��#����%��*��(��,����.��*��!��"��$��$��%��-��.��(��'��3��3��8����%��.��?��7��5��1��4��9��7��=��8��=��5��B��;��9��?��=��C��A��>��?��B��<��D��>��B��C��B��C��C��?��C��B��C��>��B��A��D��A��D��D��>��>��A��@��A��B��C��@��B��B��?��<��B��<��A��D��<��=��B��@��C��@��?��@��A��A��>��=��?��A��D��@��@��A��B��B��A��D��B��D��E��F��B��;��C��B��E��@��:��D��E��D��F��E��F��E��E��F��F��E��D��D��A��E��D��D��F��F��E��F��E��F��E��F��E��E��E��E��B��E��E��D��E��E��E��B��E��E��F��D��F��D��6��E��A��@��@��B��C��C��F��F��E��C��D��E��>��D��E��F��E��C��F��E��E��E��D��=��B��B��D��B��B��E��C��D��D��D��F��B��B��A��C��C��E��B��E��F��F��>��@��B��D��B��>��A��A��@��C��F��E��C��C��F��B��A��@��E��F��B��D��E��E��E��D��E��E��D��C��C��E��E��D��C��C��D��D��F��B��C��E��E��A��D��D��E��C��D��C��D��D��C��B��C��E��D��C��D��B��E��A��C��D��C��A��A��B��C��C��@��>��B��E��E��D��D��E��C��C��D��B��D��E��F��E��E��D��F��@��D��A��E��E��E��F��A��E��A��D��D��A��D��D��C��C��B��D��C��?��=��;��?��C��>��>��A��A��B��7��>��?��B��A��=��A��C��D��C��D��?��E��C��C��D��E��F��E��E��E��F��B��E��E��E��B��F��F��D��E��F��E��C��D��B��E��C��E��A��B��D��C��C��D��D��@��?��F��F��E��C��A��B��C��A��A��B��C��?��B��A��@��B��>��B��B��C��C��A��@��A��C��A��E��C��=��:��@��B��;��>��;��C��A��@��C��C��A��9��C��?��C��D��?��B��B��?��=��>��@��@��?��A��A��C��C��A��A��D��?��B��C��E��@��=��B��D��B��C��>��A��A��=��@��>��@��A��A��>��A��@��E��@��B��D��C��B��C��B��@��;��B��@��>��@��C��=��B��=��D��?��B��@��A��B��C��>��>��@��@��B��?��D��@��@��A��:��A��=��=��@��B��>��B��A��A��?��C��A��A��?��4��D��B��A��C��A��A��A��@��?��C��=��@��?��D��?��A��C��@��C��>��@��C��B��@��@��D��B��C��?��<��@��A��B��@��D��A��>��@��=��=��A��<��<��@��?��<��<��=��7��<��8��=��B��<��@��?��8��<��@��C��@��D��B��@��C��@��B��;��D��A��@��A��C��F��A��E��E��D��C��D��F��F��F��F��E��F��F��B��B��E��C��C��B��B��D��F��C��E��E��E��F��F��F��F��E��E��E��B��D��C��F��F��D��D��?��<��C��A��E��E��C��3��D��@��B��C��@��@��D��?��>��E��@��@��A��:��B��D��D��C��C��?��<��;��B��B��@��@��?��B��A��A��B��A��A��C��B��C��A��C��4��<��A��?��>��?��C��@��8��;��=��@��>��;��=��:��<��=��>��C��D��A��D��>��E��@��B��A��@��A��D��;��B��E��E��A��D��D��C��D��E��E��B��D��B��E��F��C��E��E��@��C��E��B��E��B��C��@��B��D��C��D��?��@��A��@��A��A��A��A��>��?��@��;��D��>��9��=��>��9��;��A��A��D��D��D��E��D��C��D��>��B��C��D��C��C��?��A��B��?��A��D��D��A��=��B��<��@��>��?��>��E��D��B��A��A��A��D��?��=��A��D��?��9��C��>��>��<��D��@��A��A��B��A��6��?��=��>��;��?��@��@��?��D��C��B��E��B��C��D��E��E��B��C��@��D��B��A��E��?��D��A��@��D��A��C��D��C��E��E��E��B��F��D��D��F��C��E��E��B��D��@��E��F��E��D��E��E��A��C��F��E��E��F��D��D��D��F��D��D��>��C��E��C��E��E��D��A��E��D��E��D��D��C��C��C��D��E��A��C��F��B��B��?��E��D��@��E��D��B��D��E��E��F��F��B��D��D��C��A��E��D��C��C��C��A��E��B��C��D��E��F��C��C��D��B��E��C��E��A��E��B��E��C��D��C��E��F��A��@��D��D��C��B��>��D��E��A��B��?��?��E��=��A��C��B��D��C��C��C��=��B��D��E��D��D��C��@��C��C��D��A��B��D��B��C��D��A��D��E��E��E��E��C��B��F��D��E��E��E��C��E��B��D��E��C��D��D��D��B��B��C��C��F��D��D��B��E��E��D��D��C��B��D��E��C��C��D��B��D��C��D��C��E��D��E��C��E��C��D��B��@��E��C��D��C��D��B��C��D��@��B��D��E��D��F��D��B��F��C��D��E��F��D��D��C��C��B��E��D��E��D��E��F��D��E��F��E��C��B��D��E��C��D��B��E��D��C��E��F��F��E��E��D��B��E��E��C��C��C��E��B��F��D��E��E��E��E��C��D��B��*��D��B��A��C��B��D��D��B��E��C��D��E��C��B��F��F��E��C��E��C��B��B��D��B��C��E��B��@��C��D��C��E��E��D��B��D��C��E��A��A��D��E��D��<��B��B��9��=��@��C��?��<��?��A��?��C��E��F��D��C��E��E��A��D��E��F��E��B��D��F��E��C��D��E��D��E��E��C��E��E��F��E��C��F��F��C��D��E��F��B��E��C��E��E��E��F��B��D��E��D��@��D��E��E��E��F��D��A��A��F��F��A��A��A��C��=��B��@��@��D��F��D��C��@��A��D��F��E��E��E��D��C��E��F��C��E��E��D��B��C��C��C��E��E��D��B��A��E��C��E��D��E��D��F��E��E��D��F��E��E��E��C��E��>��C��D��D��C��B��D��=��D��@��F��D��C��B��C��C��@��E��C��D��B��C��E��E��C��E��E��B��F��E��F��E��D��C��?��C��D��CØ Tk.2‡,u‰‡’“‘ŠY,'     Jy{y€}yx{zyzuyyxwxy||zxut=Ò LSW[XU]beF Hpmsrqmkd`XXUKEB=<N)  ,(=P\[^]PF<(  œ #"  '+/9:CNS`dÛ`kpmhruprrlmonmejde[]RBDQ`t†yoogGtXgK’Yk}[‰§œáо”—É×¿Ž—•šŸ¬¬­›¢­¯±´¶ÒÊÊÏÔÒÉÓÞß××ÛÜßäæçëïíõñô÷ö÷ðõöóóôô÷R K“�¦  ?X&+p%^mkrvwuqnptL('  ¦ :__]c`]]\aZZ^Z\\ZZ\]ab_][\1‚ƒþ 78=>:=BCH0 8VSVVUPPIG>?;41-))>% ##!$     %$+(+/99?@;CGEAJKEGE@C@C?9@:=Ú:6601?Ocu`PUQ<iP]E‡XdvY”ŒÍÆ¸Žº½¥‰““˜ž©§¬™ ¨©«°´ÎÈÈÍÒÑÈÒÝÜÖÖÛÛÞãååéíìôðòôôõõ÷ðööóòóóöR J‘�þ  ,:JAOKOSWXUNQT<"1", (#   '?A:C><:;?6495==79<<A@?<<>#  & &)  #51553ž20,)#"4$ %*&(%��þ   ##"-:M]<-64+YAM7xRUiRqw{º¹¯€ƒ¯Ÿ…~‰’–ž©¨¬™ ¦¨«¯³ÌÇÈÌÓÑÇÑÜÜÖÖÚÛÝãåçìðîöóôöõøŽöøðö÷ôõöõ÷R G‰�Ž+@Lx=5‚cX‚‰‘ŽŠ\! §   Hwzy}wxwy|xxywwtrwvwwzwv‘8 þIN[\TT^aaVZnloqphb^YYUPJGD=:O%  (1ENQTTLD9+  #,19$ !('" %!(.8EEMLPXcaiglpqrowx{ß|{zz|{„yvuoghs€žˆ„}}q…<g[WjŒzd„r„ŸÄÆu\* 8@+C>+/+3W/(1NH3*5_DF4@?B4PfLm`XURh\WGGOJXZLI^J#)/HW� /7a0'eOChnut¿rqquK !  6\^]`[[ZZ^[[][[VWXXZ[_[[Y\*‰þ 45@=6;CDD?  @TQRSUNHDA><921/**@"     %  &.+/4;;A@CEED@HFKMGJKM­MNQLIGD>@JWiwcc^aZm6UJJUtqo]qaq««vcU2";>*<6 ª.N-'1RM9*5]DG6FFI6OfLj`VSPd]YGGOKYZLI_H#10ES�Ÿ #CE2*HLRPUUTRQU>%&%) Í  '>?;=9;87=88;8:6478:=@?;:=  " !&”  +20152.*'&# ’7" $% �ƒ� þ         !!0<B3205-D,&+7QN[BL7Ks‘‰N7,)*%!;("'85+(3[?:089=3GVI[TPMKYTQFF‹KIUVKI\?*,>K�ÝQE4!"9zGCm‡ygŒ‘ŽŽŽ^)  Mx{s{w|{y|zu{vvsqwuxx†vxrx6  ÄHNX\TU\]a] 9lklnifb]YTOMKGBA=T' &3;-<GLKMKB:*®  ?66EEB>3.*",<71//#! !"$+67@GNUZ\ch„puvwyÚ{‚s}}zwn^cfqxЧ ‹mX<|C$E;bz˜£§¾Úž755:7WR?FA9=SW{I:2 ,+!)72<n%V‚˜m.%*F,% '1)&�Ÿ;3%(b71Uo`OqtvurspquR  % † § 9Z`U][^ZY\]X^YYUUWWY\jZ[V['‹þ26>@77ABEE  'QQPOOMIB=:6631,++E" '(   )! ++,( (!!"''0587;@?=ACDIIGÜHINPQFLMMIJB6:@GTf„…pYE2d2!4<Tgƒ”ª¼„869B$*<ME054.3FNhD@< 182815:>9<b,Iq…b8,+I(6& ,3*%�Ž**! E5K@1MQÐORQOU@(.# (>@7<7987:97;6543748?L@;5<    · "%(  1/.0,,+&$!;$   !!�¦    ö     &6PQ@/8  !3Yqy›W%# "9  #4(MU3( ###�’OJ>/+[ƒhFnŽw‰‘ŽŽøX  Nt~v|{|{z{yxywvttvtxyywxur1    MT\^WXV^a_& 2domokga[ZRXUMGDD;V& þ ",,+)'=EDEB=5%"!  IQHHRRZ]aUTKH5#+06:<<8.&!907:ADLUTZcijnsutusw|cr|}}{xvwtsnf\^p…‡ƒ‡p^L/4>J_”ž±ØŒ75*1°=Y[@88?^mb†73=/((10(A8:BJA‚­=0;*39.$$!&6X('.�ž98."@hS6Xut`nurssqoptJ Š  7WaX_^_]\^XYVWYXY[^Z[XV&  þ2:?@9::AEE ITQQNLG@?8>;52/+)H! $$     15,)36=?D;72& #'%  #!&(&1857:>>@DFGEÚIHK8CJNLMIGGEEB@>DPdeghPB7!/=DR}ˆ›¿u272;<LF.)+0Mb^z66>.( &4;>6H=;?F=u§?9?./90&#%-;S$(1�Á*/' $H56SP=ITMNPOOMT>(!  )<B:>77:8746645Á958<><:67    "&(  *11.-/)%#$$’>% " �†™  !%(*#!œ  Ø" &7799$JXs¡N "',F "W™.#$!+=#,�þ@7'#W|wmjY“…Ž‘ŒW 3   Uw€ww{{zuzywxvyywstvyxtvwt1       TT]ZUVWcb`. Ennmoi’e`[ZZVROKHC<W$  þ,?AA93.!"   ,vkhjidkfnb^_fZ>56DD>971("$&*#(.26;FRWY_fejlnrshrxxyvxxyxvsqhaiigkduˆyeXqnf€£¾ŒV5" CTWH­877Ki`B,0Oa58'3=(1)2NQ^H)@5"2' 2' +K7&7�ž1)7^^TVIxviksqssooqrI/ ‰ ‘ 8YbXY^^\V]XV”ZXXWZY\[X[YX$ ¨   =6<:89;DDA +ORQQKHC?Š;8550)(Hþ      TJGFGEKFQA@?B;# $(*'!  $$)3646;<AABCD;BFHIHFHIFFDD>9>?AFFOX]QEBWUWlŒ¥rE3#$B°GD5&);X]K68Q`27,"'7D2)<48JJSG)=6$/& 0& +K4'7�Â*''?>55+VQIFTMOSNPPSC'1#'    ,>F<;87937344397ß9<;779:       !%&'/23/--($$#! ?#   ¤  5,-,.-//4)'(+& ‘    Û %.+$1Ps>  $"!<J!(,# ). "" ,! (=($4�þ%#Hzw~€R“‹ƒŒ‹ŠŠ‹T *2     Utzzuyuxoqrtvrruvqptqrqwtu)      KRZYQX[afc& Pkhkmjðgd^YXZPQLGA;U    +1-1-%  n|zztplnfkjhffaURUdtsidJ6 !)/%$$+03;<AFLSX\`fjomprvsÍurogdnrrmdrgbelƒŒi\rty„6"3[d`3)6/JV=  .B *080/AF)EG/++ N� 2a^cg=swqhopqsnopsE&0! † ’ :W^[V]YYOUVÝRTTVVSWUTV\YY ;79<8;A@GE 3KMOOMLEA=?@754.()I¹   Y^\ZRQNPGMKFFEB66:FUWHC.  %%$&'-47>>?A@@CDÎCECB;9BGGA;I@?AG]fLG]ajng1-=QTL'$9NE!  .B""25>;=IH0CE0.+  N�¦ B>@D!PVQGPMPQLOPU;'8*'  ø  (9@;8;46-0033033642865569:        #!&',.00.,($"!$ C!  ¹   >9:922.2.1-,-,*  *56*'   ‰ Ò%-,,15:+!%$   '  ), ( J�Ž "8~|Š…{ЉŠþЉPC5,    Qtzx}wuuqtquwtstsrrvuxtwsx,       IRYYQXZadd'Mpfmlifca^\\SQMJD:X þ   .++('  _zxvuyz{qsvqnhlnjnswqrxsfIC,$" 3<253/##%,'$'.29<82.HS[^ejqqutxxqmloosqw~}snc`V^]ms€xE8Jj^¯^;%.*AW=$  ",6@MZVeS:-##,83 C�#danjaosqklnponrprB@1/   :W]X][[XRXSWXWVTSWUZXVW\Y_   ¯68==8:?ABG 8RJONMKDA>BB:541*)JÅ     K^ZWUZ\]RSTSPGMMJOVXTS[VK3- %$Û!#.346:@BADEFHF?@@DGCHPMID>=5<?PXhijb>=J]QO/!&4K='  *17=EQS`TC5&".81  F�þEBMH=LSSLLKPNNROS5D@:)     (7?8;:7512/443433429:67;8?      !"$& 2,11.§,'&&%'"  C      †  º 7;:7488;64653,2/.0785496,     Ð  '+640,*"$ "  %#(')  @�þ6*$,‚ˆ‹Œ‰‹‰Š‹Š‰‰Œ‡ŠR%=3/      \uxvzsqspxqruvvtwtuttxsspu(    PWU]XY^cef;-/!Ellmmiþkgb`^[WTQNF?S     +)+*'"%'  Xyyruz||€|xqptwyw{|vxhfQQHCEFD=9<=<>581&$ !#!(29R_gilpulmppqrp€Âƒ}ywrmcZKEFT``8$7ILlO'/'AVC  $/(#*EZS;^wgZL*0:,�Ÿ&gmopmqqommpqnkqmsG!:0- þ    AW\X]WWVPXRUVVYTVVXXWXUXU\   579@<8>DDI$ 3QNOQMMHDA@@>864.+C ã   D]\TX^_c\^_fc]YQOTXZZ^_YZJE35/+*+'" "$&   /9;;>>D@>DCD@BOOQLFKD?:0,·?ML1'9DEY:#$6I= %,'%(.DPL<UhYQE"0;  *�þ! GKRSLQQTNKNQOLRMR9&EC?'   -7>9;843-5034452756985386< %"%%'"1.001þ0)('('$ #>           3;<89;;A=>?FD<8119=;8?@<>30!"!     Â"  "$)   %'$*4)"'- '�45- )vŒ‘Œ‹‰þŠˆˆ††‰O29$       [pvsuurtospqrpqsrrqptztuuq#     LUUZWU\bdd1 Lnqmimlfba]ZXUQNECT þ   )-- !#! _xznrwy‚{|~~|€vrtvxyy{wpb]Yclqqp^WJ<>9=>92-#*N91Y>ERW]df]\klqnu}ƒ€|{xspog[PB3/$Œ%Svs.&&BRV £'+%!=W?,HXr~m= 0IE0#))*,!�Â'(YpqpursonmopmljlrE58(     @TZWYYWXPUQSSQVT–SU\WZYX   „ª78:?:6>DGI" 9RTPNQOIGC?AA<97/.F ² L]]QUZ\f\\^dbb_`VTUY[\\]c[OA=>GMRQO?;/%$á+! 2E&+418=<64CCEBGMNQOJMKEBA>72+%%##!&H_Z%$&4DQ ')$$&>RC5ISdj\5/FF2$*((* �þ!&:LTSSOMONKLOJJKIP9&=F7"    ,3738941*//220101345583898       $$' #120+2£0*(&%%#!! !=    í    79<4788B;==AA?>=568:9;>>D?6*'$+4543%  8  #    4.„(£ #&!(42( *:</"(%"'�†&2-(?|‡ŠŠ‡‡†‡†…¥E<C#    ]nvovtrtpŸsqqpostrorsrsvx  þ  NQWTNV\bac4 Mnomjihg^aYXWXUMEAQ   .0%   ayvqrwu}y{zy}{ƒ„|yqx}uurruwqnov~|{|z~ufZOàB993.(Thae\SBD7.6?HGJR]`cr}}}~}{yusnkd]J-"4&=lw/$)CX2 4>*%67%BHN`…vC,CL0$ '/�¸(&[srsttsonkmlmliko@:C+"   DS[TYX„RRQSTQVUSSVVUVZ_‚  µ 68=82:BEGG%  7SRQNNLKAA@@?>=5-0G ˜    ®N^ZSUYW`[a\^[aahea[T[_WVTUXXRPSZ`_^^\^\PC;2%"Ü:HCC80)($ $,++/:;;FMOMNNLLMIGF@?>9.%"3"5Y`"$'2J7 .:-(5;!0HJL[ua9,<F0%" $.�‹&";PTUSRNþJJLHJJFO<&CO8+"  $!$'16818743-,00112.147357578>   "%%)  132+-.,&'#$##$ "?þ        3;<6455=9A=<9>?BA><6>>8678;;536:>>@@;>:4*##-+)%  " #$"! ´68 $ %  %2A4##30 ")�†($3‹ÇŽˆŒ†‰†…„…‚ƒ@!?@,/     ^rqkttssmnoqrqpprvronpnotvÇ    QPVDFQTa_d6Polljfgfa_ZYVUTMFCO   þ$5/   ^wvsnyx{{}|{{}xz~yp‚‚~xsqmmsz|}zxy~‚}}rj]H;(+K^X[^_Z^5!&&%-;FJPdostwvszyxwwsoi^K3#H("0M_<*?P86#&ZO£ #-'!.F-?x\' f…W%3?"! 8�†%nuÐsrtmpkoliijil6<?24   " FVWOWXXVOONRTRRQVVSRRSRTY]‡œ57;..7;GFI% 7SOQOKKJBA??<†4-0D„Ø   I]YVQZY^]_]^[_\_bbd\Rd`e_[UTRPY]c`a]\[ad][]SJ;0"6C=@?@:?$Ì++-;EGGHGCJLHJHDB?;7+"=$,CM&+2:62"$NK $/+!3F0#GmN# _yP#1:!! 7�·ISWWTQUMOJMKDGHEN4$DJ=8)!  &'0122( .97.5ƒ,,.10/144024356=×      !&#'  //2/,/,''%$##""?     Å  2;;7066=;?>;8=:>@?B<7C?B@;96/1::A?B>:<=?9<=2*$")"$(($$   ¨    '1( -C( GR.&( *�Ô $'(Ž’ŽŒ‹‡‡ƒ††„„…‚ƒ?'#!& %\ruoususkllpqllnrqrppsnqotþ  NOV<>KKbcb)Ipnmhfid`a[ZZUSKEBR   #16"  _wwrm{{|zyy||wy|~‚|‚tx~~‚‚{wzyréuwz~|€ƒƒ„{oSGZ]WT_\[<'#""!'.>EIQ\jrtxvx{{uqg]@04VR-+>YA+;>GnXŽs(,+8-> 'cP JŠe6259 #D�’ otwuspolljklhi«k5#!"$$ # ,'!HVWQYVYVNNKORNŒURVSUXPVU\‚þ55;)*32GIG 5SSROKNIBD>@@:<5-/F      LZWUQ][d]Z[[\\XZ_adb_cVYacdeb^[ZURÉWY]`acbedacd^\T:1@C>7B@?%)&15@EFJIJLKHEAA4),GF,*7C**/,<\Q}d(,,4,<)YA N‚X1034 $H�ÔLRVSSNNMKIJIBGHKP,0210"'&,! *./2<=;:;/08906363*++/0.*-332/34153<þ      &%% ..2--0*'*$$%#" A          4:86088C8<:5796;>?B??C8>EACE@;9742„989A@âDC?AC<;5! &&#!(&#  $!   .%M; " " 0& 9[9%$# 8�«ŒŒŽŒŽ‹‹†„††‡‚……?0\P5  " %$¥" _pulttqomqqouqnlqptssqntop þ  OSUADMQafd, Gprpjihd`d]][WTOHFR     ""$%#    _{yup{v}{}y~}{{}~|{ytz}‚„†ˆ‡†…ƒ}yquvƒ€Ü|{wF\\B>Y\Z>211* %-*./6@EScmv|yt`e=?PX[cM=N?5Q_{r€l'!) 3! 1^J9–ŽC0`vNy�¸msuqtqronkjkkjdjm4,WL4 %($&)&*+"ERWQWT˜MOOPUQPOSSWWXWPXTU Ž ¦967*,49EII2TVSOLKHDF@AB=<801F þ   J^YXS[W`]^[]]^\Z__aa^bbXV^`ggijhcc_[SXYUWaecgdb^^[/?C*)@B?$ %.5@FGMPMNHQ65CKNV°@7:$(?Jhdr_%"+ 1 1TA:‘~:.]vlB{�þ JQRMSPPQMKHHIHEMQ+1^T:#('!"$+498:<>?<734/67-442.+,//30-,3244741736   ! %'( 123,-/*),&('$" !>  ˆ ß  7=:9485>7=899;78>AA@=@@=<>AHJGDECA?829:7:CCBGDAB@9&'$($   Ÿ!$")$%$)/ %87A7 ž   -&6€e+"MWM0u�ˆ$‚Š‹⋆‡‡†ƒ€……>PO- ,#"! #)"! bqrmtsrkkrrs”plqoqqptpvqs Ï LPV=DTVadc)=lmjjmjc_`_]]WTNHGM 3 þ  Yxytmxrxxz{xyzyxz~|xt|‚|{v{„…„…ˆ„‡†~yropsw||}vH\YC8Q][HA866+-*# $ %2=Mdmgoz`sKdlW"jm/MBU_tolg% "+”  A$)Œ¾£/GVK-=n/›�Ýfnrqqpnokklhhcdil4KN5".",)*)'.$$%!GTVTYVTPNSSWTSRQTRSVUYQYUZ  ¢76;,09=DGK+QRNNPLGCEBŠ?<613D­  "   E\ZWQYU]\^][ZüY]__^Zadd^^ZaiihhjfjhabbXRQUW\aeabZ1??)*:C@.('#""'7?FFTbQcCYcQ#\[.;';Jaab^(!"+  ">!)Œ·˜0DM@(8f(�‡ ;JNÄMJNGLKJIDBJO0#Y\>%-<&3**5?FHCA??>:14/1772651+*/131/.-4026694;78Ò     &&* 11/-0,)*+'((&$!!<  ‚Å .:97395>:;;8:;66<A@=7;BC>?;CJHBGGEIC@AA85459>?ACD9($ (&Ê   *6+8&EB,A+ %:553  #(ˆ±~)60/4Q—�þ2k‡†ˆ‰‰ˆ‰ˆ††…ƒ€€…„9:F3"+"( %40&2>E<-/%bpqotqolloqqrppnpqqustpuqo  OPT@ERWaiV'*9lhilkþic`a^\[UTNDHI      3 [prqmvqttqnmnklnv|zws{‚€u|€‚…ƒƒ†‚€„……vprpmqkH^\N=Q_\]qve[FB8+%(,, '*3DIj~o‹Q?79Y(FBZŽjZ # & (d}Ò­q7`G¦�Ô Umknoolnmhjifcdik38F=#/(1+*<74;DD@79+'HUWUYVQOPSTVUQRSTVUZXXSXVY  ‡¡87;+09>CK@  &PNNQNLIDFBŽ;9804@‚¡  w*ATTUQYSWZVRþNPRZ`_\X`ddbbdXbefifefidcefggcYTTSRTO0D?2'6CCBUWHA(# "*6;_qb|K?:9J#;-Cw€gV # & (ivƨh5Q@”�‡ .HJ¶LIKLJJLGEDKN.#P[L'#.6)GCLG:CTTRVZ\ZMN?<50684640-./1330„44387Ê<79       &+(20/2/,*++''(%$#&; þ   d/ -5653<79;7535303<A?<7>DEABB8DCCHFEGGCBDFHFB<6744;4*(*(':=/(   !;F8T36/&(  Q_©B3 !   &_b¿¡c0=/Œ�Œ.(f†ƒ†‡ˆˆ†©„ƒƒƒ…88E:%,"33900<2&".  dmqnsqþmnnpqpnnmortwroqkj      VORCGSZ`eQ5jhlilkda`a^ZWWODLK        `ppqovágmd^TOPRTV_adcgptx{{}|v|‚ƒ‚‡…€ƒ‚…ˆ…‡‚€wsdH][YW\[Z_s|{}wrun^L=5*"5%-ALVbne3&0p8<W|ž^1 ¡      ? "" /}l¤­š¢—�ÜSigjlnmllihhgegin-9DC%) 7:;3 1>:0(4 HQVSWUSQORQSVQNPPSVWYVRUPR  œ<7;,06;AF8  "OOQOKEBA9;7.6>Œ´ KTRURYLOMF;779==DGIGKWY\__d`aZ_fedciicdâijfid`ZSH/A;<9>??DWa__WQSJ;/*! %(9CP\d^2$.V&:B`ˆV3       : /yj››€‰†�þ,GIHIKKJJIGIBBGMO0&NWT&.0;6NSUO?IXTNGH8*!#$+ /1503//0.//341,/0367855726       ! %+% -/0/0Â1+*+)&'%%#):         15565>05-)!! –)*+)06<??>D>D9@DFCBHGCDâFJIID>95-)($ %'&'9B?>8672#  ).:<A*!3 4a=       6 -xg‘†bnw�68/%bˆ‡‰ˆ‡ˆƒ……ƒ¿€„‚‚88E.3#@<>;?5"+2    bmpnqssrmsqrtqoonprvuqnnjj  þ   RPR@HRYaeM()gijikme_a`_\WTOHKI      `sogXSDD9;8//<@?LKNPOUW\`hux}{ìw‚|€„ƒƒ†ƒ‚‡‡‰ˆ‡‚}pIc\\[\WX^x|}||y…|xkVA#0.4HRdpbV*#+*qMEa•H # ' RL@"/„¹ÆU�þ%%#Pmkmmlnjljiigflhk+=F;7">;CAB9#*0  JRTRTUWVNUTWXUOQPRVZXSQRNO   <9:+26:CH3 MOPOO’QMGFEFC;:727>þ LXRI>@2-*/*&#).186684==AELX\bb`]d_bgfdeggfkkjkie`V3F>?=A=>D^bb`a\cgb_ZL=3)'0AK\gWN& -*[7>Pzz†>! !¡ )  LB<#/~£¬M�‡(HK½MHHGEG@@KKJ($NXL!<1GIVZZP;BG2  /13/1..2,1044/,./28:74¨26      $(£ +-../0+),*(%"$")7  þ 562.&' "%(/:;D?<:B=>FCBDFDDKLJJD?<6)%&&'$%)>C@==;AD?;5*$  "%/4D7; 8 JM     E29.|‘”<�å:<,/cŒ‹‹Žˆ…„†„ƒ„‡„…~2<H+.??QNA8+  ^mmowutoosrtvrtsrsquwtqqnh       “PSVDJW[deI/hjkþlhcba][YSQJNP  VP5)1BGOUWXY\gq{„…ry‚„‚„…‚††‡ŠŠ‰‡‚tCLMY^[VW[mrxz{{~€~|€wyÂcH1FBIX:ri[/#%JE11ErªV* (!+ )M    &6‚( Œ°E�Ž))&Oqoosnkkliìlikgh(BJ30A@PSJ>5 JTRQYWYTQTWXYVUVSUTY[TUUPK     ;<=*1:@EK2MPPRPŒKGGDB@<:5;E—‰D@* £   ,69:;==?LT`igV]gfegifiikÝligZ28:@AA<=BSV]_`_acbccd\_I7&43?L5g]P+)F>*$>aŽF&&*# $&I   % 4†t( ‚—8�Å)KMLPNKLICEHJINHH$(S[G9HEV[YSH(% 2531632212457201149³44742      !%(,/0®/-,+((&&#.@   À 1)     !#.4;DE5:DBCGJEHIIKKJDA8%*(#%)29>Ê@??C@?:;-&"*,$A92 (4d)  ,   ! 1Zwz%�«93#GiŠŠŽŒ‰†ˆ‡‚~‚ƒ‚€€58@3CPSUD(  þ \knostqoppnotsspoopquvttmi     !PNVDMUYhdL1ilkikmebb]][[QMJPE   þ  $     %1FUUVQVeuwzswƒ‚‚…ƒ‡†‡‡„}W@<<@GKSd}ztv}}z~€zwloV\VSX9@:C3&;*7[A:|»q("6;,*( +8J ”  &hŸW`¹„<�¨(&6Uqoqqolnmgcghheej);D7BKRSI- ý  DOSTVTUROTTSUTRRPQRTWWXXPO   86=*18>GH5 NRPONQKHHCBBA:73;; —   ø$1>:97:IY\`W\bcfeegekjgheeb@,)&&,3<Jeea^TY`_[beda\RW>B=>D2<9?1$2&1iG3(i¢a15**)" (5C   &e‘•I]§r4�‘"-KORONIMLBDHGþM.1TVIOX[]T?+ 044243021332630./24479:920       )'!  /21/11-++)(')&!09   ô             $'7<=8=DDGHGHDHIGHCCA$$/DFB>6:A=;DGB?=5:(-(%)#' ´D$ ?r=  "!13    $^‰‘?XŽO#�­30)!Bp…‹Š‰‡†‡†„„‚€‚~€26<DQW>-    “^osnuuspnpqpssqoq³nqsrshl      %OKP;JP]ecK!1l¸ikmhce_^][XPLO:          þ    /GPRVZ[erxsq|‚ƒ†„††…†‚€q_RG@@88eƒˆ‡†„ƒ}{sqsttvtfbgigmF82;=4=-63?C:yp1('C05!$F $ ‰ T´Ï´x¤j/*�‘$!*YmpmnmkmliifeËj'8BEOVG5 CRWQXUURNSTTSVRQSTSOSVTYLS  þ3.4(/2AFD4 RQPNOQKIJCBB@?74:5      $5=;??@LV]SRaefhfihiÝgabcS@4("" Hflkhdeb\STWZ\^]LEJIHS:36<;.2(-&*+!da'!:-1!!!$A #U­¾›f‘])#�¼0GMJLKHJJFHHDDFEM'1RQU^eTA  ,35/730202Â/.34503788-0       "'&210-/3.*+)'þ&!!/4           ",9?:7DHFHCBGHC>?B4$0GMKIADD<5687<@=/+--.5'ƒ#´ 9=   2    S«·‡Xy:�§42+%M{„‰Œ‡……„…†ƒ„‚€~‚/077,   Œ dotsŠtrqmootppnrŸqrprojk     Ð+OLR?IL^dbG !%7emmkjkidea`^[URJL9   .     ô   #DXURXcmtvx|…†‡Šˆ†„€ytme\WPSw…Ї†‡‡…‡„€~vkib^_dikrI5:DNIXHsjE0Pk=,*FeDA"(!)%  Œ +`ª¡¢±a,5�Œ$ 9akoqmjjkhd”l&3=B/  ™ LPURWVUTRPQQWUSPPTUTS”TNS   ƒ•6/6*.0@HF4 JRPN‹JHCCBA>8291…þ       4@988GQUY[_hjiihffcc[TLA:702Vhljhffhhd`]XNKHDBHNPY;1:AH=C8[P0#7R+©;R83 *+  '!  _¥“”N )�¨5DKJHEGIHHEHECFDM#-MUTH1 › "014/50/20--/20,-0243Ý5312       %%  ,21-./-))('&&$#+.     þ         "-58::>FFDGFAA@?96/'!9EGFHCEHD@=95/0-'(,.2<$$#* 6% 0  ) —    \žƒ…ˆ.�?70'J„‰Šˆ„€†ƒ™…ƒ‚€*)ô  awtnttutonrosopmspqonpqqod     $ONQBIKbd^F!)%%=fjnqklgdcc`]WSPFJ2   4Wþ        %EUSOUguyw}„†Šˆ†€|zzrlidn}ˆ‹†‡ˆ……‡„„†…ˆ~qga_[QY?GIJ\df_q‰†@AK'8(<zu^9$%(=<   3 x…[†f:�œ+#:djlnmjejhggigeedi!-!%ˆ² IWTNXWXTPQUSXRSOSQUSPPSUSI   ý:34,.2EGC4"INPTLNNKGCCA?=6.9+ (F     /8219JW[Y^hikgecÙ_\YPMIBK^ilhhjcehgghhj_SKDBA7B3=CFQSRM]lc0-6=eaJ-#/)#0&'<9    uV}S+.�Ÿ9DHHGC@JFECECDFEJ(JB5˜ ' -63,5311-•/30++0-21223340  ª  "$! )/12-0-)›%$#!+*#=‰À       +56:?GEHBB@B@<<71.+&,=CFEË@BCAECBE<3,)(%!( !*45.9A/ 92#( (    npGo4�†87B3?†…„󈂃‚€ƒƒ&   dqptxplnlqqmnlrqrsrsrnprni   *SPY@JLbe^K$()#-ckllmjfd¾b`XXPJS:  Dk2  ž    'BVPR^qx~zŠ…ƒ{uwr’z€‰Œ‰ˆ‡†‡‡…††‚|wtx±qgOWF2Ylke{Œ“ˆ8/.%z‘˜p^Z;/++1<0c      ‰7+GƒJ77=�†((,#1gk«jihejcfeecegl   KS¡ZQPPNTSPPOTRSSUWVNQVQM  ´;39*00DFB4JPNOOMMIGFDD@A82@-Š<\–- ƒö  *759BPZ_^\elf`_bb^XWRRQ[dmnmiifgjihhiha[VY[ZUMCJ?0M[YSfpuj" "jy~WKL@=/*0B/W    * Cu<'*0�Š@GHFGC¯HBCAACEHN$&    ) /35260.,+/•1//-00236/171/ ª    #&!(1122./+,›)&'"3-    8SŒ)  ú  %/8>??GKG=>?@<574226AKKIFHDBEEDFFD=859;95/$'3BC:AHLC  ?LR2+!&<    <\(�Œ3080D„†…€‚ƒ‹€€~…, à  dqstvompqrppolqqstuwrnnpjm  þ(RNWBKMdc`?3FE6>fmmjmjecfe`^ZYQKO4   @ƒ(       DTTS\izw‚݈}~{y{uvxz€‰ŒŠ…†‡‡ˆ…‡…‚|yzxz{yxrX2"IWQJ‡’ ‚$9ŸžŸ“—’t„HD%:> ) 5,! 43:#>@89C�"¥!4iljfgfedebcddbdfk!© LTUSVRQQTUOPPNRQUVX[VMNSOS É 93;+31EED) ./ )LROMOMLHIHAABB:3<' 7u!†ˆ  ’–4<:7<N_a][eje_b`]ÕUVY]enmlighjiihiif`]]Z^_]]_L/!@I>8ptv‚b 2‰…„wzzfr<>&>: %5+/,1!73')2�àAGGBDBABCAACABBFJ -0157440.-/0113.00545980/5.1  ¡ #""  ,21/2.-+-+*)¤#0'  $9k ˆ ×    ,<A@=EL@>??;:<6789CLKHEGEDFEDFEB=:;8>=;9;*14,*QMQ\9 ªe[YOWI6C!!  #  (�ˆMF:.9„ƒƒ€«~~~€~||ƒ+      gqmo™tppttqqsqttuxvqrqqms  †œ$LM[AKIdgcE&#!7mnžlkhfggbb`YPMT2   *FrI„—  ‚ñ CPLO`t~…~x|~ywy|{}ƒŠŒŒŠ…†‡ˆ‡††……€|{vz{twV( %) —’œp={ ¢¡¢ ž—”€aHC'4%\SK  ;„C6%5=:93:�½90$ (jjigeebceecdedbbl$   MUOQSQWRRUT“UTUXW]]VUSUR^ …³43@,81FJF-!SRQSOOLKJLEDGB84B* #8gF‰  …„¤  0919FV`ea_Zd`ba][^a\`hnoolghiÇkighd`a[__X^C& rzv€W +iŒŒˆˆ†ƒ~zkQ@> .9)TN?   5p9/0;3/)-�’%%DBGDBB@@DEAECB¨K "/ 5:55.01141/13›..269;<75453E   ½  "%% 02232.,.--*-,*#4&  &9cC¦    º&6BB@?=FAA@=7<?>?FKKMGEEDFCFECE@=B:;;:;'žVURY2Cme`bb\SP@(  A0“,   ,H&+#�Ø;0%*>ˆƒ…‚‚~‚~|}}~|{$ # hskortuutsuqtvrtxvvtqrqroj  ˆ» ,PKW=KKadd<" "Dmklnmmjihfbb`[QKT- % /@cnŽ– ð 8QOMYr‚†uvvz}ytyzy~„‹ŠŠ…‚†‡†„ƒ†„ƒz{|{xyv7 ˜ž“›gRgYi’”˜£§¤¤¦›xy•Lu½Ÿa[X,8?  m™_9=P316>+8�Ü+##jgjhgdcfecabaca`j     LVNPUUWUTTUUVXUUZUZXTWSUTS ‚»5/;(32DHD($PQPQPQNMKKFFDA84A*  '4Qgƒ&"„¬ *894?UdibWY[_a\X\^\]hnmmieg¸heec_`__\^^)  {‚x~OL]RXr†„„ŒŽˆ†ˆ|bg‚Fl£ŒNRR)4:  ‹cƒO11F*0/. *�‘"IGJHECBEEC?BAþK  *+)' 9+)"4<, 58.02252114562/277;956565=       "%$211430//+,+-**#4'   Ž*4Mdž  ¤  "8CGA;?>>?=7:>…CLJJFDÉEDEGCC??B>;8=? []SR%':39Ppgblkfb_R;Bb&Vm5=;-/  VZ+)'#�¾6, &?ˆ…ƒ„‚‚~€}{€}|   drmntxzwwvvusuwusrtmprlZ ¿.RMXBOTddgORR@1$<jljnnmkggdcdd[THP" %6KY,› ��  øFNIReƒyuttuz{yuv~„‹Œ‰„ƒ…††„~„ˆ}{{|y{q ¢¤š‡”ÊK 0Nœ¯·¿ÏÒßîÎm¦Ÿ@{?)-e"-  ¢‘^=QEgH@.=�‹%(kghiefd‹cdbc`ecf¼     IVPPWZ[TUWWYVSUWYVWVWOQSQFƒƒ¦818+38EEG:68+$ORPQQPPLKGHHGB<0@‡ )>Hr)‚Ž )6)ƒ‚ƒ2426Jdf[WØY]\ZXY`fnmjigfhieagidaa__`_aWˆ†‚€w†¯J$1NtŠš¡²²»Ì¶_ˆ:j;&.^#'  –P1F>U>,-�þHIGLFECBABDAB;DDG  $ 4"$#-58192/26:22348620245756/5533     $$&(-%/2/23¯21.,+,.+'%2%   #-;Dk- ’ ø !.BE>;88;<;:8:>CMKIGCCGGC@EE?;@>;:9@;   d`VMLF[‹1+:Xo{{~‰´Ÿ;gb*I+<#   ]1# 8(�þZG8%4ˆ„„ƒ~~€~~}||#      fsprtyywyuyvvuqsutwtupqql_   ,UNZDNUdfgH&!%&8nmnni¢mlhjfcd`]VOU$ %8GWll‚‡Š�ˆ ó >LLKh{}{{zvv{|uv‚Š‹‹‡ƒˆ††‡‡†‚€|~{{y{u  ›¤ŸœˆR6_()13|•¸ÊÛäáÌÅ—¼£kxEH2C1  0bUaC4s<H?4<�—>0%$lghhcdcffbceccfbeƒ¬% MTRUX[ZUWWZZXSSUUWZXXQRTPG©  !<08+68DGI1%Q©RMOQLNJHHEC<6E /<I\a  ‚‡7:†± /504N]^]_]XX[^XYfjolmjfejhÆiidb`c__\aZ†ƒ‚tM9[0/23p…¥³¿ÈÀ²¬‚n¤ˆ[f>?/?!,  /‚UJP=3a0=,$1�þ+#HGGJEBABA@ECA>HCD" ?**(#:<27323881326761-/35755/553.     $%(2202.§1210,--)('"5"'18BU[ …þ    -;?=<>;79>78AHNKKFBCIEDEEGC?>==;9?:  `YURG**N")Ph‹˜§²­¥˜`Hƒb9B(-(-" +qC80B$�þS@2),€ƒ„ƒ}~|ƒ€|zy{   hossrutrsqtstrousswturqrmi    &UO[>JNcgeD&$'.66nmmkh›jkiieda[VSLO  2FUhI…„�    6OGJ\vyØ{wztlx‚‰ŠŠ‰‡ƒ„††„‡‚ƒ€|{{zy}v!  •ž“”`! $-Gb´ÃØàÖ¿–𝱬Ç}Zt$@L$N`,6?68vQ1917�ž8+!dfggddccdccgeca_a®   ( NOTWVWWTUSWVWSRURTYXYRSUOQ…¶917&22BGF-#QOPONOPMLKJC@>64@*:GXqA… Ž (9"ˆ›$4/2>Y[]\[Y[VP[ekmÍjfefgficceba`_^[bY }w{U+ (-?^£®ÁÈÃ¥}‰›š–­‚jOh =F IR".316f;%$'3�þ'  BGDIGCBB@?BG@?CAF  " =4,$*HC%312212323.234/*.3356406:43      $'(4120-›.21/-.+'%$!3 $0<CQh<„ „Ì     !9:9<>8:929CHIKJFBEGFGGABFEB<¾8?:  [ODH( "E‚¯°¶…]s€zs‰ZA,A.0A?'!A �“PB71-€„‚€ƒƒ€~€€~}}z®#     gtnutqtqvusvsqqttw‰utrrp`  ˆ   Ç  +WU\AJK`eaG4!2jmlljlljhec_^[VNR" -ATkˆ0ŠÆ       .GJK]tux|xywlt†ŒŠ†…„…Ї‡ˆ†„„~{½~r#!“–‘f-KWi–’h[ˆ²ÁµÀ³ŸŽ}4+$,&nNBC"Fe67UK00.0�‡7-%#$eieËffcfeeccdaac   !  .!NVRXXUWTVUTXTSVUVWX[ZWUSTJ   ƒ Ç =9=*01CJG2" NQPQQSSOMJIECA<8C  6G[n{+&-&Ò .6     434EVZ[_[]XOWdjnmihhgkhjhhfecb`¾_cY z{xm\')?KbŒ‹fVs›¬ž¨šˆ{s:3$-)cH<< ?U.7M<$ )3�þ% AFCDGFDA@ACA>@A@G    )0=,'%&JC3/5/121123.042.+.3567546540        #'&  03100§.1/++,(''#6 +9CRcr( þ      '79<@;<8/5BFJHFDBCGGIGFFDCB><<:?8  UGD=+ !$:fuyK0Fn‚x‹s]PE–  L12)37"&�ND1./ƒ‚€€|€}†|{u µ     grnrrotnqvwvrqqrvzuuwsuto_‚¤   /UW`BNO`b_<(81%5fiimgghšfc_aaWLQ)=Pk~‚x…�‚§   ã $LMM^ty}{{}sq|}‹‰††……‰†…‡…„ƒ€~{z||sDNU[SK#0Ž€d?IG>D778V†ŠnŽ–“_*2XS8#&.P7tE€h)1+>>//$6�80"!!ghfgedeaeffcdƒ    ''-%#OWSWVRXSTX“STUUXYWYZWXXVIÑ   #=<D/57EHH/'IOMQNNOLMLJFGG@5D1@[osr/CQQL@5 ƒ¦%1    :89GZ\a_^_VUa`nmjiigkhghfÃcc`^`adZ28>?8.%xtkT?&B;:@<;6QxŠ~bwz„„^58PN9)(,N6jm>qY%*-<3&$!1�™$ADDEECB>BCE?>AC?C ¶ >&A&))"5GC6/3/0201..1230--.364453754-Ð       "%$ ,/-1.*-++,+)*+&7$1<Sdgj ,532)! ¥     ã':=C?=;33?=HGDDCAEACFEEBAA=:=<@7"*(#M?;) &#HVG0EMVZ7)(  5OJ/U3�¯O?('*‚‚€‚~{~€‚|{yu( # " è!hrqmpqtprssuvwquyzxsxvwtne    2TX^@QPadd>@=.#4fknngijiggd`b_XOS  7RjzvoW�Žþ       *HIL\qyzzxvyƒ†ƒ„ƒ‡†ˆ‰‡†‡ƒ…„€{{~{t530)N3@€‹|k9#3=3!JI@mk›¤’~d@Fq];"% 'X>`Žˆ”j›–6$ +?86+&4�‚6+bf«cc`cegccbbac"  $  ' & "* LSRïPVTTVVYVYSVZYYVYYXVRJ !;=B,57CEF,/*IPRRLMNMJIIFFE?5C +CZjjeR/Xfih_O: “ " "612>RZ[„X[efgÍjhgijiidfec_`a``dZ$#3/hrgW7")87&BJ@ZUz…xkX@EcT:#'!% O6WzZƒx% )<)!"*�µ&=BBFICB=BEGCB@D@J#   .(F,* I:284J(CNB$131£01/023453/167:6779743   Ð  ! #&'(#,001-/0.-+**.,("6  -?Nab\N 8EJG@4)   °     !'6@;:87;CDDCDEÊGDDHEFA?>?>=<C<&ED9*   .)LUD:05+ 5"=_\BeT �©J@5-,‚~€‚}~~}}~~|{zw   % !î  )jutmssvolsutuvvxzxvtutwtog     4TW^DQSacg< 7hlnjgljjgkg`_YVNT" )Maoi_Y?�þ       =IK\ruyywxƒ‡‡„|‚‚…‡†……„……€~z}}q&-3)N/?`g~9 2S(O7f‡£ §”œ”R^p\M7IGEDYAkh ”¨©?%5BD:/'1�‘3) cgddfdacbabab½ab&  %  ")NVSQSQYPLUVXVXUY\YVXYWYVSNÔ #:<B-55CEG% "LPQMKNOOJMLGC@>8C @Sb]VQ7 $FnzwhT?'! “ „ñ)//@UWYZXZdhie]ceggfgfegecb^`_acT3.JQec- -H*D1Plƒˆyƒ{OT_QF8B?=;P<^_‹~‡*-<3$�´%>DADFB?@A@@ACCEDH  /;4K-2.LD>@?O>GPE'34˜303,*13246247787969634þ  "%'(  /0/.,242,-.*+)($9% &=LWVQL7 .GT[VJ9+     ¡  &87:67;CFHA>AFÉDFGEIC?>?A=?B8+(,:4 !,BZ`UIOH&1(#'&+.9(=Gi\of�­JB6--u‚€~}}{€~{z{v "ž! )gpqmprrnmtvtwvvyywxutusrn` ‹  º  3PU\CKPbagF+/%1jnmmfijggiea]YTNP  >V\[STN2�‰�†  þ    BIJ]tv|xz„…†ˆ…ƒ~††„ˆ‡†…€~y{€m-3(L3I~q”œ6=e%!no‹™¥§£•zua?m{qX8bT” 5‚fZ‹š¬¥@.:8BƒD9269�“4+#Xggec`afdcbbaba© "')+"%"&%&-JRRQOQVNMVYUT‚Z[YàWVXSH  %6:@066ECH- PSRPJMNKLMJGA@<8D6IOOJKI/8Z|‚…{iZH.$’   ‚‚œ./0CUX_Y]fhÎecaahhehggicb\^cdeS25cXxz( 9V#[[r|‡Š†xacV?_h_K6UF†‰0uWQz‡“†.&*(;9 !"�Ý!9EGD?=>CD>=@CBCAC   ,5<9I1;).KGDIEOJMSE'0130/.1**1320216856586442,    É!$&) 12./,020/-+*(''$:  #5EIIDFD.&;T\_XJ9- þ    &67:7;DFICBB>@FDDGEECAB=>ACD2*%=1OO * 20CUbe_J23*.83#3(xd X5Ž:Veoa �‡G900-lƒ€Ó||}|}z{{vq " !$#$(erolrrsmkrvyttvvuwwtvvwwt] º  2NS\DKUdacF**61!"_hkojkeghjc`_XVMO 'BKMLLMG+��‰�£      ã  "?FF`pxvyƒ…‡ˆ††„}~}‚ˆˆ†„€y~‚}o!+/.K5N‚…›‡) %_~GG€Œœ£¤¦§£–j_M{Š—}aqe¢ƒ8‡Hc|¤±¢0mA=ADA-;7�‡1%PifÓabccbbd`ab[] )'&(#*'#(''/+0&ISSRQRVOMSWXRRVXX\ZYYXY\XG Ê  $58@05;IDG/ %GOQSMPLKLPIEF@<6D!=ACBABB./Tk…‡…}sbP,"! §     ’*0/BS\[^eiÎfig_a`ejiigbd\bfdcU 1 7fhi  Jg<<lp~††ˆ‰†zSPHjs}feO_S–t3r?Xn”™†#Y*,<<)#"�þ1IFEC>=CC?@@?@C<= ;>F?H;K=5KOMQKONQTG#052//03))0561/25655455894*      &&)  */00/¬0-/11*()()$;.;=??=@=*6HZ``WK<0›    î    $397<@EHDCDA@@?GJHD??C<AE@@4&)BBX?  *9CER`dee`N'":CN;9-81~M J%:Nwt`E �ÞOF70*`ƒzz|{yzxy{wn  "##""'%"&cqkqpsqilqqtrptruquwyvwwpT ¹  9NQYGN\geb/'*O]M5agljhigfgjg_]WSLR #6FEFEMH& �‡�¢      À  7;Hkrux……„‡…„ƒ‚„}~…„{{|{|€l$)-3I7S…‹_B˜„‰£©©¨©¨ £~rhŠ¢‘{‚>:WxSkyœÃ›"r>ADC?/D9�Ò7.#Ehfef^`dc`]`^^a][  !$&$"%(,+&)*,3+IUPVQRSLLOPSTOVSVVYZ[XWZTB‰œ"54?/4>IDE5B7 GMONL‘JJOMEE>;6E/><”EE/Hm€‰‡ƒzraN0+(  š   î$%0OWX]hhgjheebf_achgc^_^a]_fS%5!:gbpK5}ik‚‹Šˆ‹ŠŠ‹†te\Uq†vvuaji;9MgI`p¯‰c++27)( �þ# )JFEF@>CA@=>=@C>@ #-@EJCI9HH>ISUZUTQTVE -6/2.1/').032,/1547874994*   '&''-",/2.,’/.-03.()((%;,5;—9A?(*CV^a^RJ>. «     •  068<HFCCDÊCBEEHD<8<<B=>B5(,H?H' !P<<Xcgcjlhh_H8+)D\MML;BA%/@)<SyŒkN�Œ@=650b‚‚}}~þyx{zyxi # ) $%&&,'&)+-'*eniklpskiostrpsuutuwxvvupP    =QSRKM`igkA2%7510dhlghifbgiie`ZSOP2IC@A<8  �‹�Š  ý       4Pwnt|ƒ††„‚‚„ƒ‚‚wy~z~{‚‚j,)#39D3Oƒ~€j! bŸ£ª§©©ª«ª¨ª¢ž§” ¨˜™¤–ˆƒDP–]e^LRzWfN>8KA0;9�Ò*$" Cgifbdccdd_^`_^^W"$,0$$+(30+01/.6-JSNNPRWMKMOTVQUVUVZ[YXYWS<ˆË)89;/2AJHJ(%)'HLNKLMLEIKNKG@<9A+A:5;:6.[…’ŒƒvdWJ7/& ˜    ß$<[QX`eghgfdeacfddZ^b]b_acbfP(/ 9d_eRL€…‹‰‹‹ŽŠ‹ƒ~‡uŠ~~‡zlrm<BQYYHPwJV2!$2%%�¦(FGCCDA?BB<:>C??@ &7+$=?JFK6DI©OS]ZURRTD,2--*/1)(-/11,,2336:74954)”    À!&&*+.0,.0-)-./--(''8 #-?:4764%3Ueie\O?6*" ‹   ü      "<38;EIDBBCDA>EEC:;<8=><AAD4#)'F==+ 2U_acjlkkmcc\T\CUbVU`RCIG&\.21.:h8 9 �þdWJ5/W|}~zz|zz{xwyvj "(2!.42438.464?6/gmkkhprlisurqrsruquutuuxpL    @QRNJQchgk9++$&%dijkmžlghgjdc^[QNN$43261% /B �…þ     'A]|rv~„…‡†ƒ€„„……€{vz{}‚|ƒh,/<D7Q‡…y"[¥©§¨¦§©©¨§§©© §¬¡š¨£“ ¤atmpJpZHŒSO1A€iF4MA2,2�ÔH:2#<efbcf`]b`a`^^_\T (-0&38576538;;A2 LSPOLTVOJRSRVTUUTTYYXVYYT;Ÿ-99817FKIK%ILMO‘MJKNKJCA97> ,–/,# g•ž˜‚wmJ@/ ®      Ý/E_SYahgihebeacfgicb^Z__bd`fK+-!;igrZJ†‹ŠŒ‰ŠŒŠˆ‰ˆ‰‚‰ƒІw‚„O``\BbOELE'9gE 3&  �è-$"!CD@DF>;@@?<<@>>< '50+57DEH2>HOPOOYWVUSTE -200'/0)&/0.1./1304765654(     ¿#('*  &+,//2.-,-*,)($#5",.,/-$=ewseXPE.(‹   ÷  )?29>FGEFA@BA>ADD?<75;=>B>C.!&&HCJ9 4djehghjgga`dbX^i[Xe_O\^,8@<%=+'.* !A$  �ÚzbQ<,V„}{xy|zzywwzyi  &! &-03781>DFLB/fniljqroiuvuvssuvvyyvurvpK   ¿  ;UXQFNbjknIHUPIP?hkkmljjhfigfa\TQT )%(- QF%�…ˆ‰  Ù         /Ie|uv|†…‡ˆ„†ƒ…ƒ„„‚ƒ„~xtw}~€…b2*(4HQ:R‰‰–‹M¥¦©¨©ª©¨¡¦ªª¦©¦Ÿ§¨¢ž¬šqpcehhKhvŸ/zxP9IG=:8�ÐYB5(=ibabc]^b`a`\]`aR !(,,03418CEG8 KPNNHSTNGSSRXWTVUVZYZVWXT2Š‚Æ(::836DLML/0:3.4*LNPOKLMLKOMKDB99? !$%n¥Ÿš…yoW=0 !,$ à     4L^TYbjegiefcÉffdde`[XYabcfA!40":klyf B‰‡Œ‹Œ‹ˆ‰ˆˆ‹‹ˆ‹ŠŠ„‚ya]UPTXB_i†$isT%.( !%�¼;*%'FABFE<;A@A?<>??: -<64/3>>:.5=DGGHLOUURUJ$/3/1(/0,(0è332335;774554&    #*+, (#)../,01-,,+0+(&&8 '$%(G{|vf[RG5&þ        ".<4<@GCCGABAA>ACAA=8437>?@D*)$*HHSG7iggihffegcchhcee[gi_\–lP<66-45"9C]NL/�úghUA2K€|{{}yz|xyuuw}sd 37+#) !(/(*+&$"#'%'+fmgmlrqmkvtuturuwuxtquwrpK   9HSPHN]fgiUONL8,*dlŸijiffje`[YTLM  R; �ƒþ          .Ni}tp€ƒ…‡ˆ…††„„€ƒ~|y{zzx~†b3'/,@F7T…ˆšƒ$N¥©«©§§¨©«©¨¨§§©£¦©§¤§–©w€[zxƒsg‰‡rN©Š£^G=56<�ÞGF8+!3d`a]^]_c\_\Y[c[O 15*&,(& +)++&!# JPKLHQRLJVQQUVUVYWWVUX[VT9Ž&087.1?J:·1!FPRNKKLJLPJD??96< OŸœ•…xn`I>5.   ž    ’ "8QaVTe®ghefeddbcce_`\]Z^X_iD",+ 9gi|`?‡ŠŽ‹Šˆ‰‰‹‰žˆŠ…ˆˆ†Š‹\eGdblaZxv_Io5##"�ï0/("@?AA?=?A>?;9>D?; .@JFDD@DDA/;B>;:78>A;57--2,,)./+*1..2413557536533"    !(Ž"((!+.-+-11-þ**''%$5# 5xxveVMD4'%"         #3?45@>?DGBAB@A>@?@9958:;8;½G,#)FFU: 4gjjgfcegkifgfdf`flhedg8>'=>I;3QRC EoKY�þ]U;/&A{|x{~z{~xvvux|rc)D?90213DD;EBA@C=?EIFD1/clfnkqomlssuxuqtxxwvuxyxuF    9GTRHM`fehH-$;9hjjkh‚jkg™cb]ZUNJ    ‹R#�ƒŠÞ   !      <Uk|ws}…†„ˆ‡……†„‚ƒ„‚‚|y|{~~|‚\50(EF<T…Ї,M¤«©¨…ª¨©©ª¨©š¨¨©§¢‹|`†~„zxQ!»“ª_>=9047�Ü=5#']c^^_]^c][[Z[aXP (>951373<?7?>=;>768@>;&GQGKFPPLKSQTWSSVYXWUVY[[Y3‚¥#/66,.?IGH/ IOPNKKMJLNFECB<6; Ÿ   /¾¯¢™„vh]L<4# Ž   Ê '=Q`ZVafedhfcehdbbedca\\Y_]\dA#2,"8eh~j 9…‹‹‡ˆ‰Š‰‹ŠŠ‰‰‡ˆŠ‹Š—‰„nbJlgmgfx{Iƒ¡x‹=!�þ($<A=@@>AB>=<9>B==%7NMKKMJGNO3JSMIHLJLPNIF5*2*,(.,)(00/31/2533468768(      "''( ,-.,.‚12.Û+*((%$3   #‹yiSE?3)$"        Ý #%4=74=AABFC@BFB>@@?@<8::==;E+ * %EGWB/ciifechfkkggfcdfjkikf_K?+DDIA>SX+xƒUg  �ˆd]E6/D}|zþ{}|zxzzyys`-)?MKLKKHCJN&GNJKKMNOPTUVB3imnoksnlnqsruvrvxzzy{wwxuC       ALWULU`eeiTLHD-FLljnllmjghgfc_YTL“L  t@$�Š�þ          H_h{usz…‡††‡‰‡†‚ƒ‡…‚‚z|„„[I(<%NHA[‡ˆ›}""M©§¥ª¥¨ª«ª««ªª©«¬ªª©©§žœ…Ž‹‘y‰x‡‹Y>g½Î·p7MkJ@E�¼@:*!([``^^ab__^__]^ZQ'"9FBDEGGAEJ>GFFEGFEGJJN:!LQPQISMKLSóVWUV[ZYYZVYZZ4     )3:927@HFH500/.-MMQLNNLKMJKIFA:5< ¨“ƒudYS</$+ þ          5DN^UU_ggfgiiffcdfedcc]\^bd^fC6-9/'?df}^9ˆˆ‡‰†ˆŒŒŒ‹Š‰ˆŠ‹‹Š‰€ltqcqdmqyMŠ5c©­•H*="�($;@>@@?C?þ>?@?:<1/ARNOSVSLOT4KUPPOPSQQUUTB.31/+0,&'02112037545746:;%    %%( /-/,./2.-./+)'%!1©   z‚qcRB:0-"   Á         #+/;33=CDABEGDB@=@?@B?:•>A?E-%,%ACVA #a¨d`biekkfefbehkligeZ[HNH;F;EKZ/ Nt*  �‰bgTM52wzxwÆ|}ywyxxyt_!25ARRPQSOHNN'PQNPQSTSSVXXA0ilklerolqsspprrvxxzyyxxvu@  ¸   AMWOHP\bafXE3(<himmkjihgff`ZZTNK Œ19�‡�±        ‹ Qak}zvz‚†Î„†…„ƒ…„…„ƒ|z€{€†U<$;)OHA]†Šœl$'$Wª¨¨©§¦¨§¨¨©ªª§¨ª©¨¨§£Ÿ¤Ÿ~{šn‚fEUM«ÜÔƒ7ETQRX�=D62!W^_^]\aa^]®Z\\P01<OLIKMKEIJ"IKJKKLNMLKMP<!LQNPIUNKQUTRSV’\YY[ZW][Z/   ‹  ¦-4=508?GEG9."'JLRMOLKLMKNF@A97< š Xž–‰vbUSB=+41  ›     Ü AHR`ZW_fhjigifeehffeea_a\cedi?.,<1*Ddi~LJЉЇ‡‰‰‹Š‰‰Š‡ˆŒ‹ŒŠˆ††tƒfg€\o{V?HHœÆ°^ %0)'/�þ$)"6=<A>:BB>==?@>:;&67@RRPTYTPSQ2PTOQQTTOOSSUD020-(1,')032./12775564:89%     $#&! ,,.,0-0-,/0*')'$3 Ï>teXMC7,-$ "           Œ *-3=86=CDCG@ÉA@?AC=;?7>@BD'((@FZ,5gcaca`gbffcegaaghiedaZ`N_?;T4HT9++/ƒº’7�þec][J:tyzzvwvyywtrtwvY-=@JUXSRPSPNF)RNOLOW[XWVUW=/mojmjrnqpssnpnstuvxuxyuswC      =QZONM^dbhB!EU9#>kkigjžljhhcb]XVTNN  *#% �†��ž      ë   Sdnxw€ƒ„‡…„†……„‚…ƒ‚|y|……U?!?8bR;X„ˆŸk]¤¥§¦§§¦¦§©¨¨¦§¨©¨§¦¦ª›¤›¦o§ ~޲K-UR’¨ãωP>N]_�­DA=@2(Y_a^^[[^_^YWX[_I+9<FQQKMKMLID$JJIGJOTRN¦P1"PSLQNWLPPTUPSQVVXYYZ]]ZY\6  ’   )8>8‹?IEM+.8#(O®KOOMKMKJD@=:8=   &m‘†yoc[ZKBB4(  ß         =KUdZZcghjhfiggfedhdea]]`chdh6+*#G4&Baj€IPˆ¨‡ˆˆ‡ˆ‰ŒŠˆ†‡ŒŒ‹‹‰‰€†~ˆ\„i{›?,FI„žÆ®h,"-@?�¾))'(8>DE=:;>?=;8:=>52?@HRURUTUVRJ1PROJMWZTQQPSD!32..*2-0,/2/þ1035349:77:(         &%* (1./-001--,,)'%&'9 J_QG>5//*$$"    þ       036A87?DEFCBD@CABAABB>;<:<CAH%1(AH]*>dac_`b`cdfce``dhfdbbg\aZd1d[?Rq.$,3f“»Š?%(�þjkcP?5pwwtuutxvwyxsxs[5BMT\[YWQPNKD'RPONRWWTUTRU93imjkjtmooqrppnmquwvqtvsruE        8MYQRN]abfD6U\O?Cjmgchžljgebb^XVQPG  #P �†ˆ ‡   †  Å   Pdp}yy€„‡‡„ƒ…„„‚„…‚|y}‚~ƒa4*&_G7S€Šœl%!Y¦¦§¦££¦¨§¨¨¦¦¨¦¦§¥§§ž ™›€­™†š’:bR”‘ÖãÏc-'L�ÞHIB5+%U][Y[YZ]Z\^[W\\I/<GPUTOMLLJHB"KJIHLOONMLKM1#JNMPLVKNPRSRROOTYZYVYYVWZ3    „¦%2<8;8?FBK,%;@4'+MRLHLPMKJHGDA>8:; —  ‹{qk`[ZKB8( ‘    ™     ’<JVa\[bdgijedf defde^Y\_bfdd?E* ;^l}HK‹ˆ‡¦……ˆ‰ˆ‰‰‡‡‹‰ˆŠ‡‰Šƒƒ|}l|mƒ|4MG†„ÃÈ©B@�›,.* 7>A?<;::==@;7>=87BKRW†QQROJ/OþNOTWQQPOO< ..,,*4+--/110/,/38725744:)        "&$**.&/2.*.1/-*++*'%%*4 jI?:62/*&‡        …æ  326@;7=ADEDA@@B@>AB?D;799:BAC%  .%>JY,9ebb_`bbde`acc`edac^ae^\XT@kSE]V'0.cl¶¯&,�Ånk^L2-iwwutxqwvsuvrtmX=HPT][YWTPLF>#NQPPSTTQPSQQ74emgjgqnpputooqopstqÔvtqr9        :CXQRO_`agF:;0-&?jfhfijigfba`ZWSQC    �¤�        Ì*    Tgn{vy€~ƒ††„……†ƒ„††€~}|}}€~…`CQcnª³Šhny’a( .o¥£¥‹¤£¥¦¥§¦¤¥§¦¤–¥¤¤’§™‰¯’#HhCŒ[½ÊÞY!9�ÛJK>2O[\[Y]WZYVXZVWRE7@EKQROMQLF@9HJHGJMKMJIGI0#HNJNJRMOPVQNOMNRXWTTUYXVW,   ³$';885?DBI-#"&NJMILNKJIEBCA=:96 œ<fddWST>5) â        =KS^XYb_dfgeedhccfea`[Y\`adceE2BQ^ˆŽqII[t@V‰…†¦…„…‡…‡†„†ˆˆ„……†‡ˆ‡‡wv‰{n”};V<}W³¶¿=0�0/) 1>@;9>9==;­9<74;GNSWUUVRQOJF/MNONORSPLNML< +.'*(0+*.31/,þ.376427427"      %&"+--/*/0./,)*+(%%(1    &8452..&      Ý    "   013<9<?8=CDCABF?<AB;<96:><@@C#&.=IgoW1+;P&Dc__a_ababZ_žcfa]b]^bcbePQfQGmW-4"V;¨¥¤#(�¿_PE7/0fyxtuvryvqsoosmN=HQQVSUVUPNI=%BJLMOMNJLWSX:5ckfiesoopqqlpºnptvrtvurs7      A?ZROOacceIQXP4Gkljk¤hhfca\YWQOB  ��Ë         '4K>  Scs€y{~€‡…„…„‰„†ƒ‚€€|˜€{ƒÉäáÞÍÎÅËÁŠ|‹S##0…¥¡¤¢¤‡£¥¦¦¨¦¦¨š§¦¥§§©¦¥¤£œœ¨Y%2=@‡Jv¹¾S #Z�«;1("I^]YY[Y\YTXUSVP=6@GGLLMLOIFB8<DCDEED­LJQ4"DJFKFTPMNTOLPNOOQUXSXZYVV+   ®)+?942@DFG.393".MMLMNOLKJFCB?=977 ’9WWJIC-&‚ò      $.A5   <HWbYYabbgdeediceedaa_[Y[^d_f¢ÃÆÇ®°¥¥™`Xj9c‡„…„……ƒ„……†‡„†ˆ™‡‡ŠŠ‹ˆ‡‡†~€N!(8?xCr§ª? N�þ$,>?<;;:A;::69<6,9ENMPNQNPPNKD0FKMJKMNKHQNR<!*-$'%2-*-1.*,*-,158426658     "%%)"'& +//-1„0,0.)ó'&"$0   "--)'&          !$.$   +-7@9=A>:DAABBGA?AB<Ã977;?;Ey¢££‹†}ym93A"Ha]]^^]ZZ^Z_a\`effeacfehdbdaTZg,#T%h“•- @�¥][VH?0YxyusuwzvrpmmrpP:DEFKJKORNPM>$F»ILGNHIPMT25cojmkpqroponqopptwvrruxrv8   D<[RMOeffkTQRA%=qnilljlhffb_\WQR>  µ      -AL  Û\dq}z{„…ƒ…‰…„„ˆ‰…‚|{}€…–†ujQYh|“§ ¤O #›§¤¦¥¦§§¤§ª¦§¦§§¨««©¨ª©ª«¨©¥¥ ˆLX?))jd_¦ž("@�Ö<<6,)B`_[W[]^[XWTRVS?5>?>CDCHLHIG9 ?BBCE@E@AGDL0!DOKPLTUROSQOSPQQVY[UWY\TZ)   ˆ«//A965CHKM987)(SQMPOORMKIGEB?;<3 4DA:3"þ         ,=E    JOV`YXaeffcgjgfdfheca`^Z[`cch|ugX?DQ]q‚|6|ˆ†‡†‡†‡†ˆ‰‡‡†‡‰‰‹Œ‹‹Œ•‹ŠŒˆ†„oEN811^UX–‰6�þ"###>?:9:<?87757;7,7ADDFGGHKLMJB1JGEEIHMGCJIM5)0'*)40.*//,/+/.468525:39"    #(*.#)%/0./2ª//.-,+*)'!&1#%! ‰ þ      !(0   1/5>:;BCAC@CHB?@CD@=?=;75:?>CUTC4"+2AQLOYa^^_a_]]a^`a_`cfkhfhiffhfjc]ZH")‰B-;zj+�Ôli[B-.[uvsrrtxupqnmqqR.254:<@AFEDG<#AA@BDAFFB@BE(9ffhifoproqoonlrortrrvvqos2 … ÂA@^UNOfeff>2HJ59iojigkhigcaa\VQO9  " †ò         ;FF    `drvy{ƒ…ƒ€ƒ‚„…†‡„€ƒ}{y}~{…U?FHHC[lu‚†›J‚ŸŸ£¦¤¨§§¥¦§§¦§š¦¦§ª¦§¤¥§¨¦œaLf\%wxJx¤M�­LJ:(A^\XWXZ]ZVXUPVVA+16/58;<AA@C8:@><?<=>:<"(JHLLISRTPSR¢OUQTYXUXYUSZ'    °.*?:82DGGH*.-&OTPNMRLOMHEGA?;;/Œ 1)*'š      Ï  6@>   NLXaXZ`cdgd`cdfgiidbc_^[^`^]g:,311,;HP_bu* kƒƒ…‡†‰ˆˆ‡ˆŸ†‡ˆˆ‰‡‡ŠŒˆ‰‡‰‹Œ‡OBWR$'oeFqH�³.1)$>=799;=86965990-4:6:==@DCCEB/BA>@CACA<;>A-*¥+%1--,..-/.2-365567404    ‘  !&)¸ -3/..0,/0+(*)'%)-    þ         (+,   617;8;@BAD?AB@BCEE@;?;<8:;:8B  %/3H M^^bc`bcab_a_\`cbdbbff`dde’igbP&1*G9'Uq>�þpeOC4,QsrqsurwuqplnllL !$+12275:<4#95;><7:;5546"5fggkjnlonqqopkqqvytrtussn2     >?]SQUbggeJHV_aSJilnkjmjgi`^]ZWRO=  )*‡¬     0    7JQ  ² _go€xyz€‚‚ƒ€„…„„…„…}~y|~|}‰cLHDW\agjptz6ž˜œ££¦¥¤¤¦§§¦œ£¢¤¨¦¨¦§¥§ª¥¤•k^>?JwxNMG9�½MD0'8[XVYYX[YXXQRSQ; !"'++-3148065:86244.-.1$KGGKOSMQORSžOTRV]ZUVWVXU$   ¨*'=897BJFE1-7?@4.NQQPPQLLMGDC><990…Ž "#$ Ê  (    4DF   LMTbZ_]acddacfeefecÄ]`]]b\^iB/1+7=ACGLOUh|~……ˆ‡„…ˆ‡‡††‡…„†‰‰‹†ˆˆ‰Œˆ‡yXJ9A$DheIG; 4�ª0. !;;8:8;;97:3356*"(),02495:=9&78:<=9Ž7145++*')'-*,-Å/0-.-6:8456541      #*(& %*'/2//11--1)'Š&%)/ ˜  þ       !    $-0   4/4<7>=>>@>@AEDCDC=9@9=8:<::C !"*OXSX_]aa\^da_\__[\]addZ`eg’gccJ-'$89&)$ /�ˆohZO:$Esvútsutrpnjqp[0/-,*-()("(--&/+14/.//,.('8dijkopnlrtopolqrwwurtvqqj0     @9YPNSejhhNQXWRDFhkkjnkjghe`_\«C & )%  ¿  <DFT(    $3=6   ags}y~~€€‚„†…‚„…ƒ „~}y~~}€†jWWY_\]\WTMK&"(u¢¡œ¢£¢¥§§¥¦¤¤§¤§§¨§¨¦¨¨§¦{ŽC'+1S?Z.a77�½KF91"/Y[Z\XXZYYVUNVUE !" #!%$*)-.)**(#$#$&DFGJPRKKQVQæNQSX[WUWXTVP#    )!;559BKKG12872)(KOPLRONHJIED?BDF6  %#ì    344A!     2=4  MPYc]]a`bbaegfbddccdd]]\^_]_gH8::;:<97653]„ƒ~¦ƒ„…ƒ…‡‡…†„„‡…ˆ‰Š†ˆˆ‹ŠŠ‰bs8/:3K;N,Vk(+�ˆ-/%:<Î6;9;9753:9.#%$"(&#(*.*,-032101/-** *)&'),*(/1,/.,--6:6355131Û    $+)& %#.0-+1/0,.,)(),)16 !  »  %%*    #(&    619?:;?;::>BEECB@Æ>B8769::<A" B[XSTU\^\Xab_]^ZY]^bce\`dhffe6H%(7?$�¦pXXM=+HrpqtrsusrsjcpqpnijffgbXVNQG@1251ã+,+*')$"<afkhotqpsqopsnstvwyqrvspk,      :4UNKMaigeESXP[INkhljjkhbgfbd_SN^L& ³    )!EOMU!“   " ˜   diq~|€„‚ƒ‚ƒƒ…ȃ„„ƒ~}|€‚„fWbja[QJA>:9%'r ¢¤£ Ÿœž £¦§§¦¤££¥§¦¨¨¬©§ªª¥–‹>9?G1FS'_ŠN j�‡M880#)WþXUX\XXWPETUTQNPMLOMA>;:4/$&&%%'"(BCIIKRMKOSRPSMPWYXXTUWVVO     % 9316?IIH,5709,.NMQMMNKCHGFIGBA„PBƒ"" þ   '6>;B    $   MNT`_\aacbaccbcdccdcc]\\_a]adD8AE=:4,(%&#V„„‚‚€|€‚„†‡†‡„„ƒ…‡‡—‰‡‹‰ˆ‹†xr9>A?.3G$Rv<V�þ0#$;78:69;9982-687:489:;752,0**'#)$%&'()'#%!"'&(().+*-1.,/+-0586133221    *'&#&"/,2-.„.,+,-678DD! ü    %())*        74:@<;A><<?@DDED>?DBB887;<9=@   9ZX§ZZVXY_aa_]YZZ`ead_cfeji_ME*3K'D�‰kYZN?0@vpsÃqstrse^lkikijhdjmhiknloosmkj`e`XTLKG?2A^^cdnolmrptturrsuwwrqspnh-Ó     .!GAEG^ffgIRXYL4Dqjlijlfegda`@   Ë   */=      dkv~zy~‚…„„ƒ„‚…©†„†|w}„…‚…^TbaYJ>:;?BL,"3”Ÿž¢ Ÿ  ›œ¢¦¨œ¦§¦¨§¦©««ªª«©£ƒC;V=Qe*/[o4'"+£�ÃI8:0(&\WYXVWYYWWKCROMPMOOIPUOOSUTTVXPPRJNIB?795,+B=EFKOKHMQVSRSVXVÍUUSSN      6,-3?HIL169:0*QNPMNQJIIDCF2 Œ «    '*4     á  JMY`ZZacefddeadeggee`]X[bd_cf?4>?:.'"$'/5!w‚‚‚€{||‚‡ˆ‰ˆ‡‡†‰‡‡‰Œ‹Š‹Œˆ„iB=I8EN$(Q_)$…�Š-%% ?898ó9874.(4303122057546:99=C<9<6?<93)**&#$')-)*-/2..,.0273032/0-  '(*$'&0.1.00)+¡.-  ‚      "(  £    56;>9:A?=@>@D@D¨EEC=957>?<@?   QZYWUYYUQUU[a`^``fa`cegeiga\?%%23<m�àilaM=37qpqppropqqd[hgpqqnhdekdfejmkjjigigiigjkmki_[^b\^kmgmmpttrqqtvtvsonlgc( ²  !49?\cddGGFRI*Bmnjkmmiegd\\=! ‚ô  -  "     elt{z{z‚ƒƒ€‚ƒ……†…†ƒ€~zy|€„†ˆ]W_YH99;?BLZ5"+—™œŸ £†¤¥Ÿž¡¤§š¥¦§¨©¬©«©«¬¥}6[Ydu')DOU7Ž�‡GH@/(" U˜VUWTVVUJAPMWWVSNIKPLLMQSN«KNKPOKNORQOC>AB?CLOEILRUTRSUWYUWWTRNKH¾     #+/?DFI.-*4*,MQMMQQMIJFAB/  …„±            KNY^Z\]eedadeg¯eb_[Z[^bbif@5;8,$%%(/6:r{}|€‚„‚„ƒƒ~}…‰‡‡…ˆ‰•Œ‹ŒŠŒŒ…c:PKXa$%9FB+z�ˆ-2+98É685563,'3378962/02/235325:323124753645-%$$ #)-$)-00.0-/3355121-))„Œ   ­$&( -/.-00.,.*(/-# „þ           659;:<<BB@;ABABEFFC@>879:=@G?   ORWSTWYUVZYVVZbc^aad˜ccegfefjh\8+(2=!+*#h�ÁZZTG:.7lolmoqqmoofQCFOMWSVW^eededlkeijjhfigfechea]^V^RTgmihkrtsrotþrsuqldb[#!!(),$!  $->XabbGP]bO>Nklnlkkheec]\<$     />41¯       ,dkx|zy}„†„„®‚†„€zz|€|€„‰`WVG<>=BAITc8&"*• ž¢¢¡¢¦¥¤¦¦¤£› ¢§˜©§§©©¨©©«¡y[{eC(E/[Pq�þ::6)#"QUQQTUTRSSL:0/99@=?@EKOKLKSPIMONNKPMIJHMLG@@<?7<JMGFIUVUTQUWWUVYUMEEA"  !+<BCF/2>C/$3MOQONOKFGHDB. „¯  ,;4(    — & LO[\[\^dec^bdÊccfec_YZ\`[bfe@43*$()+,7=B{‚‚ƒƒ……„†…‚ƒ{ƒ…†ˆ‰††ˆ‹‰‰Š‹aRhWt4$<-Q?d�¥"#!0645467455-!%&)"$&+.102.22051ð-.11.,1-,%" $'+&'*1/,/+14434541)##!   "$%%)+-.-..-*-+)/,$$   ‰¡ -"  ›    " 63:ÒAB@:?@??B@CC@=69:<8AF=   [\YXWXWYXY[ZY\WYYa`_dbabfadefV2&9/G .$Z�ŒSYXL7.0kqnmnmˆoeQ2&#!"&þ.32<@DMNLX\Ycagehielec\\]aSSahgfkrsrrouvvusuqk[ig^ZT[VQPKFA<4-"  &7YbbcKGVZKBMkoljijifda`[6    Š ±  !>4(.%%     à ) dguyy}…„€ƒ…‡……ƒxx}‚~‚‡ŠcSM@>BDFLQZk.%*8—žžŸ¢£¤¤¢¦¦¥¦¥¥ ž› §ª§©ª¨©«©¢–¦•‰™ZCN=5]R 13%|�Â6;=1QWRQSPOQQOK:#!$&,+1:86DKCJHLLNOJPLHBDCE87BGFEJTSSTQVWÆYUM?NLEC=C?;<862+(  %<BDE3-8<-'2PSPPMPNFHEDA, ‹Š” !;1&.&$ ô     ( LMX_[[]acba]acdageec^ZW\c^afiC4-(*,//3;@L"}€€‚ƒ††ƒ…†…„†…‚~|‚‡‹†‰‹‰‰‹Š„y‡xq€J4B62MB''"o�½##/755133235/"   # &)$,,.11/+1/-#$$("(%&)./+25546830%))(*'-,§++*)%!  ""&$-.,/.),*+,( ! ‚ƒÈ $!     & 318=;=;<==;9<>§A>A?;45:>:?E@  '"\YVSTW[ZXZ[Ÿ`^XSV\^fcbdcab`ZIWGEO#',$%#c�Ï[]WJ4))[mkqroomppk\H6321/1..1-1/-*..0**21679=CFINIIKVJS_gfikqromhosuutrpgVmhhgdcËhghggcaTKIDDC?=90,( 4Vdb`GHXXD9Nolmkklhfe`]V5 ! 1&  ¨  '" Ä    ' eiq|wwzƒ……ƒ„‚†„‡……ƒ€vx}€~€†ˆ[NAAEDGKRZco-!)? Ÿˆ¤£¢£¥¦¤¦¥œ§¢ ›¤§¥§©ª¬¤žŸ|—~\_R.[O(,6'|�Í<>;0?TQVWRSSUTPB0'&#" !""!!)"%$&))+/779766<14=IFGKSRRPKQRUWXUTH;RMLJÂIGMMOMMJH>651-/,((   %8CAC//98&!5TPRPPRLHID@?+ * ‰ƒ•  '"–   ¸& NNW\VWZddccba`edfeedbWW\`__ei?4*,,-239>ES'€€„£…†„…††‡‡ƒ€|…ˆ†ˆ‹‹Œ†~‚a}hKKF*J>!"&i�Ÿ&($ (5564234662*º !%'$',/10,(3234431."/..0+,.02034742*'%#Á   $#%#" 0./.03-*-)(**%&! *! ¸       à % 438:6<;>@>=>>=AA>>@><13:><<BA !/!`YXURY]\YY[\_b_a_[ZT_bbcdca\TRV7V;',*+$!#W�ÑPQJ?./2ZhkllptlpnhaVF?=;<=<;:>=?:79:9759;;:30,.--**,09TekfinrtpiglruvvtngUjjigeiehþegfec`XU[Z[]]UHE=1(*Lac[=MY[O:Smmlojllefa^W2Bl7          '    £    *(jntzww|ƒ„‚ƒ‚ƒˆ‡…Æ„{v{}~…†L==CGHKOVais0%+> žŸ Ÿ¢£¢¢£¥¥§¦¦©¨¨§§£¡ ¡§¨«¦¥£“nio%2aC.09)†�þ42-&;NPPQTWRTRLD:1,(&('')(('(*%#')#!%&%& $! %3DLFHLQTQIGMPUXXWQH9ONMJIOJLLMKKJJIF>>?<?A<:/*# 0CC>%179/"7QPORO™NMGHGBA'6\' ƒ¥  ( ó    & QRX\UX[cda]baafefged\UZ^_^`fh4'&.+-/1;?GU'€€‚‚‚ƒƒ……†…†ˆˆ‡‡ˆ…ƒ€‚ŠŒ‡†„qwsYT_",P4$"' p�Ó!'261157475/+% %+%(-02/(&32455430!/10/,/-21/Á01.+)%'&(*&"  $%#$$/0.3020*/+(-) $%7U%  þ       "        &:9:;3;=>@>:>@?EA>@@>818:>=>CD $2 ^[[XWW¦YZYY[^``]ba_`_^[XZcdec^ZFNL01=-" "#Z�ÛDMRB0$)^gfklnpokmjd_QKMIKEEAEJJIDDCGC@BCDEC@@=9<=:;:7M\flhjppvunlnsvvwtpgLOPW[^]]defcjggdec^¶_`_VUPNSH#+P`c\IJVcM@Zknmpjjlhd_`W3 !JrkE/ ‹¤   !. ‚à  % ,lhrvtv{„}‚……ˆ†„…†…„ytz~~ƒD9;EIQRY]dss-#*=Ÿ ¢ ŸŸ ¡¥…¦¥¤¥§¦˜©¦¤£ ¤¥¦ª¤šžƒq~/$Ig.-'&'ˆ�¤211( ALJQQUUTQRPIB;562500212433..1-1-Ñ)*+*.*+%%3=JOJMPRVTMMQSXZZXSJ7;;@CHCGKKMLQNNJKIFCCBDDF>95480 !6FIB13>H2)?RSRUO•MJHF@) Cna6$ƒª  !1  Î   # "TMWYVY^cd`bfcfedfigg\V\aa_`ha-&)3377<AGUS*~„‚€‚ƒ…„…††…‡˜Š‡„†ƒ‡ˆ‡‰…|‚kZe)%@U&& #r�þ &/02268643/-,% ! (+'*/02/++1688756/!#&)-))-/1/212/01-)(')((!!  %%& (/#00270ˆ01--++-*"ŠBiX/! þ   !  -    $ :59857;@@<>B@BEAAC@B<3:;>=>C<  %-/]WW]XVW¥YW\\]^]Y[^``^b^X[[bcc`YPYC3A&5$!^�þHRU=3 %dgfghjmiilgc_SVUNQLMGOPJLMLOLJFGHIJJEDB@CCA;;@T`gnhhnnuqrpqstvxsulJ2'*0198@EILTRY`a^\Y[_^bc_\W^WS,!4R`bZ@JB)%>skjjmkþjgfb^_X1  *%             &hiuyrtz‚„}„††…ˆ‡„wrw¨y}€€ƒ~NEDKPTW\dju{+#;œœŸ ŸžŸ¢£¥¥§¤¥¥§ª©—¥¥©ª§£¢§°¥š|‰_#!DI() N�Ñ663%CKJNMPRMNQLGB;?=6:573875872544212321.-,/00-(')7BLPJLQQVQQSUVXY[WVO3"!$'+1õ5<:@EFEE?@CBGIE>;B;9  5EI?+1++ZPPOQOQKKIDE@% )#     ï   "QNZZTX_dd^adeeabejigZVZY]bbf_4,-49==AHMXZ+€|€€€‚„„……„†‡‡Š‰ˆ‰…†‹‹‰…‚‡†|cqI!99 !<�ˆ #,/Œ0350020.,%%$"Ž !% !!® %),&)/140/136869592 %$(+.“(&((*,'$!%  %þ!!61.1430.-**+-)"# 6/     *"   !     $;6<:56<BB;>A@¢?AEFC9485=?@C; ")25 [STYW£Z\ZYYZ[_db__\]dfe`]_g]U?G-%&!+�ÕCEH;3(Wegoljkeefebb[[^WZXZTWWTWSVSQVPQQPONKNOOPNOKMVYbiknnprrpopqsvuuxsmZREC@7759961/þ4.8546:=?BFKGAB3 4U_caIMHE4a¬Ç„jjijjeeb_]5      $   2     Ì   +ihvyv{|‚‚~‚†ˆ†ƒƒ‰‡†„yux|~€ˆ‚NENV_\^elq|u5&&=žŸ Ÿ¡¢¢ ¢ Ÿ¢£¤¦¤™¨§§¬©¨««©¦£¢˜ˆ†- " "*�þ0)$$=HMTQNNKJKHFGACD=?<@<>?>?:<99>799677366886636<>DGJNORRSONRUVZYV[WQ?9..(''('$ !!"'%"()*(+./-,-  8DHE00-2(R‘¨fNMK—PNIJECC'  ®     -  ¼    NMYYW]`bb_aedcbcihfcYVZ\_^aka5-4>B™HPU_S,‚~~‚„‚€‚€‚…†„™ˆ‡‡Œ‰Š‹‹ˆ†„‚wlh"�© #-,11/0,,..++'(*%('(#$'&&$% !%" ° $" %)+)+--11-.22554750$"’  $&(Š'#B‚‘D/0/0,™*+.* è  '    %      ;5;967<?=8=A@><>CEC@649;<;>I<µ!),6.ZUSUVZZUSVTTPTY[[\[^]^ddcdd``]ZNF?�þ@SQM;-!Tefihikdehcdc_a`[_\]]Z[Y[[XWW[TVYVUTSRSVWXXVUXV_ksmjpopqoosstvxuso_\MJKHDAAGC@?=<9<<:87752359800.$& 7U]b[OMHHS’’mkj¿ijbfe`\4 4UR9%.,>+  þ   'fhtzxz|‚‚~€„…ƒ€ƒ††…„vwz}„†VLR]aablnv}p+&'8ŸžŸž ¡ž¡ Ÿž ¢¢£¦§¥¥§¨ª¨©¨ª¨§¥˜˜['!!!8�Á.4/3)>MMNMLMIKKEIJGHFAFBDEABBCCA=?B=?A=>=<;:?>??==@>BJQLIQQRQPRWÌZ\YWSDC5433.--/+,.-,*)+*'++*""%%'&% &;DIB5437I}xRPKLNFIIFE) ¯  @=+!&(5&   Ö    LNZ[Z[^cdaaedcbdihecXW[^bd`h_<4:DEFGOSZaR'ƒ€~~€€ƒ~ ‚ƒ‚„ˆˆ††ˆ‰ŒŠ‰ˆ‹‰‡†y{J# ,� !--.-.0)+.,.,(,-(*'))'(½&%#&(!!$%"#$#$'(&&#"!#).(&+*,.+*30255330''  $%$## 'AgY..,)--+-(¡ (&"&&1)   ù   538;76;=:7<B>;9?BDC?4389<>?G; #)/7- XXSTXVTSPSQTPVYVZ__^]`\cb`_baa_PQ&#�³BYZI2(.[ebfecgedcdd_[_daa\`dd^_baa`^\ZYYZYXVUYX]Y_`_þ`fkdeknqomoqostspsobgZZTUQOKMNJHGIFFEBDMJGIEEFHE>>=< 5GZ`fN.8ZU^~ttƒ”‘‰|jaW8('6=Q[WZ\3  :,”    ó    4iipwvz~„~‚ƒ……„…vv{}ƒ„}XPX`cdflqxp+$4œœ  Ÿ¡ ¡¡ŸŸ ¢¢££¥¡¥§¤¤§ª©§§©§¦~"$,-PN =�¢-682"BMHLKHKIJGHIFBFKFGBGGHECHEFB®@>??A>;;??B>BEEDBAFKEDKQRONRUTWYXSWQCI=?8:65442¶120,/005220.-..1*($%',<GN:*BI LdVT`nqiZHC?+ …„§"'4>;AB( 4*    ‚î  $MKUYWZ_fdc`ccddfied`WS]`c`be^>8=BEHKOTX_U‚~~}ƒ‚€ƒ‚‚„„‡ƒ„ˆ††ˆŠ‰‰ˆ‰Š‡g*)>= 2�¥#"'1..-)--,/-.-'+1-.'*-0*,-,+))(&‰''('$&),')¤($%&)#"*.+)*.20587550(-&(##¯  !&)%$1>=L70=OQL=,()+ $#'!Ù   (*%() 3/         "6359¯<?=>;@?>BCA@B;4176;>@D< #$')082ZUTUXWSXV¡XXY\XZ`c[^a][_adcbec`B&#-- '�§=_^B1-/Ncaedbg`cca`\\cihgc_effgedcbabb`_–[[\_]]Z`gbggcihhjknrpopštsonlfmecae_YXTUQRRPNPOMOPQ·NMJMIKHIK73BN\eI*!0<s¦´»ÃÉÉÀµ¦˜ˆO02/?Vk9 <?JNSX]*›2'   ˆÔ 6hgowwx|ƒ€ƒ„‚‚„…†uqu|~ˆ‰}ZS]`dehst€‚k" *—šœžžŸ Ÿ¢Ÿ ¡¢¡¥¦¦£¦©§¥¨¨ª¨Ž¦¨d+%4=s7(Q�œ(<=*:IHLIHLDJHJEDCIOLLGIHK‚LGE”IFDDCEC?BFDDBDLHKGDHJšKNQPMPRUVXXQRPHPHDCHC??:;897Ï5778:85522330//$$16@P= %*4cŠ™Ÿ§­¯§š‹~lA*-'/?W.  )*16:@A!•-$   ‚ †Æ +OKTYXZ_dcdecbedcfdfbWSX^c^hk^@<BBGJLUU^aLz}~}€€ƒƒœ†„…„…ˆˆ‡ˆ‰ŠŠ‰Š‰‰M$26a+#C�þ%( /,-,)-(+-*+,).221+),100..,++,+)&)*)*'(*)')/*-(%&(&%(..++//136721/+2-,+-("%#$ "!! " ""!  #/* #'7Wk}‚›˜œ”‚l^Q8+-(+5K# — #)++,    ç 535889:><?==<?A@@>@;2036;<DH<"%&.+3:,TQSSUUSWUXVWYVXZ]^][^ba\abfebdcd---F-�À7`WB=0,DTW_^^d]aa_\]_ekhgghfhhjfhhfeefhfccba`bba]cgfjfhfcgjmppqlp£sqoonjhoghded^`YXZ[VXW]]ZXWW[XVTKONR°VEGEP`6+$o|{¸Ð×ÒÀ·°««¯¤››­¸´³sˆ¹zh1  À 3<DNPUc+8'    ß 8ihqssz|…†ƒ„‚€ƒ†…€xmx}€†‡ZUY]\a\\t€‚p%1˜›œžžœžŸžŸŸ¡¤¢¤¥¥§¨¢¥¨¤¦¦¨©¨¦§¨o6UI+DL1+07@\�þ$>5'!1<AHCBIAIGGABFLSOLILMMLNKLJIHKMLLJIIFEIHJEHJJMHGEDGJLLMPJOPTXUSOQOLSJJFIJEF@@BA;@?BC@>?>?>;:4588:57+-.7F) grqž´¼¹«¥ž›ÊœŸ—Žš¢£ ‹brœucW+  #(.66;E0   Ë  *QKUTW\^abgeb_ddacfe^YPY_acji\;;?>>D@?WacOz{}€~~¢‚ƒ…„ƒ‡ˆ‚†‰‡††ˆ‰‰ˆˆ†T/D2%9>$"#&6N�Ü%$#$*'',%)*('++032/..-120-20//00.,,.,,*+.,),.,-'&&$&%*+,.),/343310-,6//.--(*('$&%)%&''&þ'&#""#!"!#(! \kl‡ µ«™˜‘Œ“‹ƒ~ŠŒ”wPbˆWKC#   !!&.-*     ±&73855<;?=C@@:?A?@??;506:=@DB<$"#/8<0­TRQTUSUSTYSW[XT\]X[`W]b]^`cfcbd`1&') !-8�¢=^[D=3+8MNJMUTV\^[Z]Z_gcjkeijfkdgkgþddcgffgedfkffggffedlqtporoqroopskhnjihfdfc^\_^\^bcb`_Y[a]ZXU[ZY\YXIFHOID)ªËÅþ¹­ªŸ›˜„}wrhd‰’˜™¤£™oY~\   .<HUõMSc25#       8fhsuqvƒƒ„ƒ€‚†„ƒ„„…{wlt{~€…†}LCF>:3(%n‚o*!,˜˜šœœšŸ ‡££¤¦¡¥¥§„¦¨ª©¨¡f}zD.FfQ()86D^�¨+<7*%)5855:88BECBA@EOKMMGMMJOHHMJKNLJKIL›KKLHIDDEFCEJMQMMRPSVSRQWMLQLÜKJKIE@CA?BFJJGDACFCA=:?A@@;:-',524$—¶­­©¤š˜Ž‡wsqmlb_t{…Ž••‡YFjT!'.:36F /     ‡  /NKVXTX_dfdb`cgfeÇfZXOV]\ahh[4+/'%"TbdL}z}~{|z}~~€‚ƒƒ…ƒ……‡‡ˆ†ˆ‰‰‡ˆ‰|Lh[/(<V=)&8L�ˆ%%þ""!%&%%'&)1-00+.2/1,010010./-.,0..200/-*)'(&&"!)+-,*,-143126-,4311-+.*+(*)(+,**+*'(**($$()(+'% "‡ ™š–Ž…„~}ui`da_YWhkt‚€¹‡‰~tH7SK  $#0+$   ª       )649738=CBA>ÌABCB@@84-267=EB6  09<+WOSRPPMRTYRRVWUVUXX\X]^^_bba_acU+D7)9* ! /;�§*BEA91-EVYQV[ZX__a`b`_ecdhgjmhihjkhghggfþdfjghhdgkiifdejedhqqpnpoprqonnojmllmkgfcdbacbfedbbe^cfb]__^^\]\]KLHI/7j½­¦¢—“Ž…vdSNJG<.);Udn{„–¡—’¤Y) 1<KVQTþc)3%      9hgpqst{„„ƒ‚„††„‚ƒƒxwqx}„…s2+%!$oƒƒq.&9–•šœœž ¡¡ ¡Ÿ¢  ¢Ÿ¥˜¤¥¦¥¤©ª¦§¨¨ œg6=@QL&&6U�¨$$)".<A;=BA=CFIGHDDLKGJLORMNLJLMNOKIJKðLOMLNILPMLCCFIDFHPOLMRPQUTSQTTNPPOQPLKHKFEIFHHJIIKHJNICCDDFB??C3.,0,]¦›•’‰†xtm[JIDA;.):Q`jv}ŠŽ””‹’P$Œ#(-;9:GŠ, ›     ‚ ³1RKSSWV\efcbcehhdcdfXXSY_]_giS)! TddQ!zy|¦}~‚~~‚‚…„„††…‰‰††ˆˆ|qN*57F:.C�™$%"!'&"'')()&(.,,.‹002/23101.+.ì,,0/011/.,,'&$'!!%++((,-023.142.45123-,,/)-.*./-+--),-,,+**(),+(!R’‡€|wuobaaQA=;;3)&2GXbnw‚†‹‡~pƒJ" ##,*!    (624023=DB@?AËDBABA64.487:EC-37;+RLSOQQSTSVTNRUSQOWX]ZZ\]]a_[\bcTIU& &/))4�” BKH@,%E[\\__`\`_cafeþgiiklhghliihefecd_dfaddfjbfgdbebjhd\alnjknnqupnllrjmojhjpmhfebdgiijhijfghgcdabcb`_]OOGR $“Œ…qj\RH8+#/=IYbp‹ˆŠ•¬œ# Ÿ    ZDITNTd%3&     #*    ½" >gfvvswz‚ƒ€ƒ‡†…ƒƒ~yv{„}„†q# "w‚„i-!)˜š›ž Ÿ¡ ŸŸ ž¡¢ ¡£¤¤¥¦§¬©¦¨§§¢ “R@6>LJ*1<V�´&)-(,@@BACF@CDJHLKJKNLLOQNMMPKKMLIIHIDHKFHKIMEKNIE§MJGACOOIJMQRUPQQRVMNSOONTQJKIHJKMLKLOONMõGHGGIGDBC54,:…{skcTMA5) +3?KW`o‰ƒƒ‹ ’  >*,82:J+   $    ‚ Á0OIWUUVZcfabaejgdbde]XYY`c^fiQ  XcfKvz{~|€‚€~~}|~‹~ƒ„…„„…‡‹ˆ‡‚s=-*3?; !/H�þ''((+*%*(,)+*-.11021--/1021..-*,'*-*-,.1..,,)'"('%"+*%(-..1/.136-060157531.-/2323010100..0-,*,,+( xqqld_[MG82'þ#.9GRZi{{ƒ˜Š  2! +'$       (508315;BB=@ABECA?CC<457Â<<7CD/56:* PPRQTSWYWTURTRQRQT[]^X[\^c^`acaXYK&0)"+<�‘?J<(##EZ[^b^bcecdfhggllmjgdhnhf…kejkgf×dcdbddcbVPLSSJJO]^chihopokjnplsjhhlnlkjieeklkjiihgjihhgiebda_`G=Fk w\[ND;2.0!  þ &2HW_f{“/   }xo\MO[ 4&  "    $ Gmhxvtw{€„…†…†ƒ€}vz|‚‚‡‡h¤  #|„‡g" 0šš›žŸ¡ŸŸ¡¢¡¢¢ŸŸ£¤¦£¤¤£¦“©¨§§¨¦§ Š`O9?H@('168�Ö(,$.?=BHBEEIHJIJMMNLNNPONKNSLJKKPKNQMKKJGIEEHHKG81397323CCFJIKNQQONSRMWPONMOOMOMKJOÂLNPMLOMNMJLHIJGDF.'1]sZXL@:1*,   49LYcl|’- f`O<.6Aš(      Ø   8RLZUTUZ_aa`aegfeedb]UZ]cabgiP  ^efH !{z{}}€€€€~~}~‚„…—„ƒ†‡ˆ‡†…†…‡kF8*2<4!'.�”&%(+,+*-*-++-ì23240,*.2../.1.11-,+..,**,+)*""$'((+..*-3304202554332--4431220232.012,),,)*IkSRF;5.)*   þ*1CQY]rŠ,  YM9&% ($        )619614:;=>=>ADCAA@>;476;8;CC/˜6;;( RNQPSQUVUUVŸOSVVW[^]YW[\a^]_^]^Y?$(2&(�3E@+'(I[_ab``adþbfehfgnikikgimnihinimlillmmfnkklggfabed\^_[Y]a^Ychd^]XY_lhhlkkighgfgjkmlihjkhjinkjhehfdc=)(  0"    %"…+>\! ’  6x—}dW'¿ 5+       Nki{zqq{~¦€ƒ……†…ƒ€~yy|„‡‡g +‚†k&$,6’š›¦ŸŸ ¡¢¡ž £¥¤¥£¥¥¨§¨©«¨¨©§¦Ÿ’]P3,#".*1<>;�º#*%2@BEGEDFKHIHKMNMMQMQQRMNRQNLMSNQRORRQRKOPOONKG@CEF@B–?BC@?CGHCB>ACQNLNMOMKMLòMNQONQOOLMRUNMKKLLJH* 0     )$4>]!0d{`I<  +#     Û  <PN]YOR\^``]^ddehdbb`X\^bbcjkL  edeK$t{{||}}~|}€}~‚ƒ…ƒ„……‡ˆ‰‡„†……~qC6… $)-.�þ &(+*+))-*+)-..-1522/.,/31//04142/2025/1010-,($$%(! !! "#!#)*$%"$*30/3530/30-,13534302231412.,.0-+  0 !Á   &%-@V   -WbA*" '' À   -55;9/0;9:=<9>@AB@<;;6859:=EE. µ8::% KNMQPPSUORTTSNUWXYZY\YX\[a`\^a^_UA �‰7CD9-&<]_“^`adgbeghjggijlmikklþiloopllnonqlqpprliijgohfchhgeigjijgeabaafdiifcceceedfjhjjfjlhgjlkhjfigdaE%       /  þ4)"5o‘B:()3!       Iklw}vrx{}~‚€……†„€zsu|~‚…ˆl  '~‚…s2019•™™œžŸžž¡ ¢¡œ¢¡££¥§¨¨ª¨©¨¨©¨©¢›we/@KK-(4F\]�Ó"&(#)CEBDCFGKMHJKNRMLMNSTPPORQRNOTTUQOSURUPUWVVRMHLGPKGEKMKIGGIHLLGFGIFJHNLJGGKHJÀNLMLLPQKJQRNKMJMMJF.      ,º +[ys6 /!$  ³  9PP[[TSZ]^``_bffhdab[RY^_cbfjK  e‰T$v{z}|¥~|}‚€‚}}€ƒ‚……‡ˆ†‡ˆ†ˆ‡Š‚zWB.?:#%3HK�•'())**)--*+./0…3452.2“1015452/4325358643-*é1+&$*))&&''(.,()**+0-/11-,..-,+-1/13/011035213.01,)      +  þ (KcT& ,(!       /69<7239:9<=;=@@C@::73688;>CG, ;8;-  ONKQNQRROPVSUPRUUXZVWX\^__^^`eacYK.%%(&0/�– 9CJ>* 3[\\^^bccdb`gfhf‘ghlinjlilfjpnmlkmpnopormijjiojlhehifkjmklmlhighm¸jiehhjhehehgijfiighfhgcefgdbaN, þ    <G>. :sˆf*97*!'     Bmlwy}ww{€ƒƒ…ƒ†…‚}xpsx„„‚f ¨ &„…{9*,<‘–šžžŸžŸ  ¡¡Ÿ¡¢¡¢¤£¦¥§ªª§§¨«©¤Šm8P_T#&3=]b�‰$(.&%BDŸBHJKKIFMLRMIIKOSOTORORLNURQROQVU±WUVTNKNJOLKHILJIJKMLPOKMLLMRPPMLKMMOLJLILJLLMOOMML¤FGKKJFE6     ¹&-(0ctY ,/ "  ç 4PN\[\WY]abbaegefcb_YRVZadbcbF dgfY'twz}~}|~}}€€}{€„€…ƒ†‰ˆ‡ˆˆ‡ˆŒˆ‚gI%=J@%-KO�ˆ &Ì(+.-*+**0-00/1134055201-063221566546:754/..+1+)')+(&)+,,10+,-,033122-/010-/+/þ0/0112121-../.+(          +RbN ..    „ Ÿ  (87<9955;>=>@CD@@>=75345=?@—&<;;0PKLRPRQ£RXTTROVTWYXVX\`ba^``aadbZ<('/+$32�À;N?8#-YZ^`^`\`bdaddhfeegdilkmmilglqnnmimoononnosmhejikmmiijmjlmÖonolmmlkokmlloolomnlmkpmhghhiigkffaa^\_WR.     ¦:''-U_C3 4cd/o>  "" "Ò      Eiew{}yx|~|‚ƒ…ƒ„‚|zrruƒ†„…d 0……~5"(5‘——œœ“œŸ  ¡¢ Ÿ £¢£¢£¥¥¦©©§Ž¨§¨§m@T`U0.5;_c�ß'2)" BBEEBGDIIJFJKPLGIMLQRRPSPSMRWRRQNRVTUVRUWXRLINLOPOIKOLJMQQPQNOOQQPPRNPORTQRURRQQOURQOOPN²OKKFEB@D<7   Ù2 2=*/[sVW4   !       5NJZ_]ZZ]a`efefdb]YTVXabhgfN$fgh^ "uxx{|†}{{~€„‚ƒ‚„”…ˆŠˆ‡†‡ˆ‰‡iI*AL@"#'+P�Ö $'%''+-**+,,/.1/0//14587511049565355785578641.0..0.*,+,+-.0145110023733115757463þ6542123313-.*-)('         0  ' ,TgLQ1   ç   150>A;858<=AB?ACA@?96338B@EED, =<=3NNLPQQRRPQWVWWSVTUYXUY][]dba_^_bc`>*+1,! $%?5�¥<MB/#.YY[\W[Z`ed]`bbccbeefgnlmhihknomn’olnporokhlgjljgijml„knkomnqonllpoponlommn»liihihfifhefdec_^E   þ.+5:KSOOF/3bzE % %#     #*+  Klgwx|ws{}||‚ƒ…~‚|pru}……„_ :‡……y2$&*—˜œž ž¥ž ¢¡Ÿ¢¢ŸŸ¡£¢ ¢¡¤¡¦¥¥§¥¦§§©¦Œn?WbL+2;Chd�Å $0+ @@AD=CAGMKEHHIHEGLLMNRPROPNPSSRSRSRQTRRWVWTNJNKMMLILPOLLPNKQKP“QRUSROPVTUSRQURSSRRP•OONLNNLKICHHAB1 ¡  ý' *2-1+.Sic4  !    #$  =SKZZ\YU\^\^acdagacb\QUW^_eggI *kfgZtxy{|}‹~}‚€~‚€„‚‚„…†…†‡‰‡iI'BM:$*/UQ�– "%$)%#)'*/.*-,+,¾-124:5510226687454553496542.2-,.,(++/.-/.,32431/365432558775734¾774001001//.0,-+$$"      þ'   ,M[W+    !  181?>8948;;<?=>AG@B>8/37=<BFD+   B;>4KOONQSS•TQQTQX[UQSTXVVXUX\]_a]_da>+-3)!$%%B8�ä"?OA2'#0WY[X]a[^cb^bachhjikghkihhigjllnqqnpsqoqrrnmjjnjpoljlmolppnnpmolpqlomlnnolnonlmljpqnonlohkjmklÐkh``]I      %'3JOJ@DMZ[WC+!1\r?H '#Ä%)   $ Qnjxzzxr{||~„ƒ‚„„„yrqw‚‚†®a@І‡{5!.6—›š™›ŸŸŸ ¡ ¤¡ŸŸ¡¤¥£¤¦¤¨¥¦©¥¥§Œª¦‹nIacB$1BOof�¿&/%>@@?@GCCGGFHHJMKPOPMMOMMONMPQPQUSRSVTRUWVSSMKOLQPLILJMLN™LPMNOSTNSQNPRSPQPOOSSPSSPR©VNPPRQNQNKMGAB3  ‚Ü $/4-&$*85,!(M\.:  !"       @QLZWYWTZÏ^db`_dcbeYPOV_^ffhB /kdfWz|yyz|}{}}~~}~‚ƒ‚‚ƒ€…ƒ‚†„ƒ…††‰ƒhI,IO1!-7YR�þ $'"&)%&++),(+11301045101//013363576335:8411-0--,+'+*,,02/,102022131/446237533014526513.-03323200)## þ       #DO,3       .61>81428867?<;<@A@?5//3˜;9?EG+ A9<1 UQL§QRQRTRNQSSQORYVXYS[YY\[YZ^]c]<(24" $(B:�þ$4JL<%"S\^Z[^Z`d_[=N99=CFSPU\Y_eldenmmoopqpqnppnmjfjnllmjmnmlhiikmmnmlpnlonlkoqmmppljkkmklknmmlnhnklkkjie_ZG  … À!2LMMV[TNQ[_XF)%b2%%(&() ‚É$%    Spozxwuqy{~„……„‚€ytqx€€„†…Z >ˆ†ˆ~>*$5“˜—™œž¢¡¡¢ ž¡¢¡¤£ §¥¥¨¦§©§¨©¥nIdl9*7DZqi�Ø */& <BB@AFCEHDB.>-+/28>>BD@HORKMUSRUVVUTWRUVURQMMPNOOKLMLJIKJMNNMNQTRNTTQOSUSSUTPOORQˆPSTTQVPSPQPPK@>6  Å "5:6<=3/16<8+V% $#%#  ð !    BVSZVWUTY[^adfa^dbb`ZRNWbbeigC 3jggZ$yyvx{|~{~}|~€}z|‚‚…ƒ„ƒƒ†……‡‡†ˆƒiJ/MX)!'/E^T�¹  #'(%%'&)-+(" !*%'.,-23+.132547975368740-+./+.+*(),.//0..03215432474385214431‘552/1/3443311," “  À ""K!   õ    /86;432379:;>@<;?=>=620399>GD' ?=93 SOIKLMTQRQOONQNPNQTU[YUXXVY[[\`_`W?)47"'4F<�·9UG4" OYZ\Y^Y^b`]$?  $.:?CKRQZ]mnsupvnmlkdgkjilegl˜knjlnmpllnppnlnqnmkkhhklm°lkjmlijifga]XC  ˆþ& &A@?OZZ]TUakeT5-  %#   *4.   Spousvsruz}‡ƒ€„„†|wmx}„‚…[  @†‡ˆ}4!,‘–™›œžœ£œš›ŸŸž¢£¢¥ ¢£¦¥¦§§¥§§ª£‹oE_m374CLea�þ#5." :@ABAEADEBC1   /338=AMPUUX[Y^VYTSLLQOMLKONPIJKLPNOMNMPSQWSRSTWURSURROPMNQRSRTRTRSSPQOLNFA>3  ˆ Šþ -/,6A=?84?LG;&! "!    &0)   EXUWTXTTW[]agea]dcd^]XOZ`aggh>3kjhZuxx©y{|€z{{z{}|}‚ƒƒ…€ƒ€„„…‡‡„††‡‚gH/LY',&/9PI�Š"  $%&Ó'')-+*   $%'+9@77>>;>::53,,.1*++,..'*+-01200.144754546648656530/3367543®534321)!!      ¶! !'##+*! !""!  µ#$  5;9738457<<>AA;:@?@=:7.6;9CDB% ¶!CA:/ SOMMKLWSQMNOQSOPPRVZ^ZWRYXY_[X]^bY?+!49'!)/:3�ý4UG;%PVSZX[XZ]I\2=""#   &-67@BJPOOJFRN[V`bYgkmknljlnloljnmklilkkijijllkonjijhigejfde[TD  þ '<@?JQRZ[CYii/)      43+ Xpnvtwspsty„~€‚ƒ„†~upr€‚À‚~S  ?‡ˆŠ†=&!-ƒ—™›œžœ™™Ÿ  žŸ £¢¡¤Ÿ¡¤¤§¦¨¨¦¥§§¤ŒmDQY,(6=Snk�þ!6-$ 8>=A@D@A@1@&/#"$   "%,/44<?>=94<4EAHLFNNPOONNPQQVUNSQOONQOPMNMMRTNSQNOONOMLPLJH=92  Š „¢ '+(276@?0BOO  ð     **#  CWRYVZSQTT[e]`b^bceb^TSTbbebc< 3jgic!ixyzz{|ywx|}€}}~€€}“ƒ„†‡……†…ƒhE-=C*+?WQ�Ï! #"!$''$&*' #)'$   %$("'+&,011/.-053352232Þ30122495334140/30-*        $% ',0  ”    ¢   ==::572335:D9;‘?>@><515?:??@#œ!@;<5 JMMKJNQOLNQUXTNSTUTU”VVWYZ\Z\`[=) *+##2?7�¼/II<'$FWVXZYSV]?[7A BINIHGB;41!       'š-)EQW^dblmotnqpnjimgihjkgfl¯ppmmiijmghgbffXLD   þ,#2=@NKNXX %53Lb<     %554  !Zolysuqlsqyz€‚ƒ„„…„„~zrr~}‚~R  QЉ‹’;*)2x˜˜šœœŸ›šœ›Ÿ¢¡ƒ¢¥£¤–¥§¦¦¨§©¨§¨§£ŽlI`f0)-;Rpi�›*,"/?A@BA>AC+?+4AJNFÆ>=61    ! !2:AGJGPRTYW[TUQPSNPNPPLJQRRTURRNMNSM¥IKG951   †‚Õ')413@> *& )D'     **&  GUOZSWQNUS\Z_bc dcd^XSSb_db`6 8jhj_ [xwz“}zx|{~‚€~~€ƒ€€‚ƒ……„‡ˆ†‡†‚kF0IP#$*?]Q�° #!"'&"#)&>IQIGIFB:4%   š  $'0.-137:7;94»6120032/442895523360/0,/+  ö $&  &   6;5:33/.32:9:>>??>>?<613=;=><(¶1@;?7 :KLLKMRMLSMSVQOTV[UURVYYZWXW\c]]`Z>("33 !.>2�þ@WSA*>W[YXTSJGEZEAVPOOPOLHMO> -  $      !/08AIJPRZZ`cdgfhhkklkhkfgghcddVO?  ‘ é2)+'5?MNPUQ7lq;  "+2&    ]pm~rvmnsqv~‚„…‚…†ƒƒ€|v}}‚—R  E‹ˆŠˆF4%&u˜›™œŸ†¡žŸ¢¡¢£š¢£¢¤¥¤¥§¦¤¦¥¦§©¡ŒjKdc4/29Xri�ä+65, ,ADABA?>;3@30UNOPPOLHLL= / $     (&09;:?BGGIJKOLQOQPQSPQNM×HHG=80   ##-546=8 RX0 ý  %*    HVR\TWMPURX^bcfdeebba^]V`_eeb9 5nghg-\x{xy{}~~~}€€€‚ƒ‚„„……†‡‡hD3OL'$)*H_S�™ ! "%!##"! &"SPÒQTOKOM?. "$       ,*-),0131022469656443203.-*Æ $! 5<Ì   # !"    7;4603--2367<AB>A><>@=51<>A=># µ!B<@> 5KMLLNRUQVOMPPRSWWUSSUWTWWVV[^\]^S;'$52%"6@5�þ6ND<)3ZTXWNKN<>YB< ;STNQRQNMPWA8      !%-.=>EJSWd\a]_^beVO>  œ ù5%/8;?LNMTP "   $   _pkytsjkrtx~€……ƒƒ†„‚}|}x}€‚…‡M  LŠŠŒˆ?-'+t—œ™‰ŸŸ žžŸ  ¡¢£¤•¡¡¦§¥¤§§¦§¡ŒfIfe0%(5`qi�þ$/*) %D>?>=<@10A30 ;USNSQPMPPUE;          ''138:>EOEIKIGHJ;6/   Š Œþ*%(-564;2         KVO[XUMMUTY^`ddeefba\\]X^adhh3  @mjje(^uzvy{{~}ƒ}|~Œ€‚€„…„ƒ†Œ…~g@4OL"!)O]S�þ %#!!#&  8QRNSUTPONSG; #        !&+0)',2441/,,+ œ þ #     "   :9373/+-146:<@@??><<=;52;?ACF'B>?;6HKHLOPQP£TNMPRPSRUVTSSVTQUXYXZX\[Q=&%63$=>5�þ)ONC/*XPSTWdSE:M<0 !QTPQSVSQTPF E(         4]]OMK  ö ;68=9CNPISZ        Znmwvrhjpvv~€†„ƒ…©‚{w{x~€„ˆ…F  KŒ‰Œ‰B$'0x•—˜™  ¡¡ Ÿ›£¢£¤¢¢¡¢¤¦¦¥§¤¦§ ˆcGdZ%%&5^ph�ü/4+ D<=;?QA81<3* TTOPRSPPTNED'        *CB556… ž/!)+*-4:2:> …ˆ´   ESOYWUJLRXW[]ecdecb`\Y\Z``ekf/˜ ?ojkf& ]rxwx{|~~}}ƒ|}}˜€~‚‚„…‚…‚……}a<2ND*M]P�Ö %"!#5&! NSPPUTQQSNLA)     þ  ($    %"%      «  565840*.3769<@?@C??99753:=?GF¸,D<=:8CGHJNMPRSONRQNPNUUTSPURPSXZUVQZ[P9""5+%:@6�ž'KQH+*SOU\OUVG:,.9QSRRVVWãRF C5"        :`ZNKK    •<RA68BNKRSSœ  ‚ Š »\nkztqkemuu|ƒ……††yxyz}„…„G \‹‹ˆ>(%,uš˜˜™™œ§£ ŸžžŸ ¢¡¢££¡££¤¦¤¥§¦¦¥ ‹dJ`N,-+Ddjh�Ô*2+ !B;>E>EB92',7POOPSRRUVQF C4      Š *EB936  ‚ƒƒ° -=4.5-5:H@7  ‚¢   DTM\USMGNUTYZacagfd`ZÃ[_cbge/ Imklg'Wwxwxw{†}~}||z||€‚€‚„‚…ƒ…„|f=2L9 1QYO�² !'!'&3MPOOUSRVVPI>3$Ï       )$   Ž ‰ "ƒ š    „ è   050952,)-2269==?CA=857458@;CF/C>>: 9IIGIFK[URNMOOJLLQPPTPOQQVYTTVR[\R: !3$*<>6�Þ!KUG&#GQVnH9K?9$<WVTTVTXXSPD -04         ¢ Hc\LMK  …º C`C-3BSFWYJ-5 ‚ Ådlexsokkouw{€‚‡ƒ†…‚€xutxz†„„D  ZŽ‘Ž7!&/v››ššŸ¢¡ž¡ ¡¡£¥¤£¤£¥§¢¤¥¥¤¦¦¥§ ŒcIaQ44>N`c�Ö,3+>:=Z=2=33 :STQPQPUYTQG .01         „ “  4HD525  œ ƒ› /R<022=3UL5 +.Œ ‚¯LQHZSPNKNUVY\`ddgfc`XWWZ[adff.  Kpnon%Uwxyzz{}~}~}}||}€‚ƒ„ƒ‚Žƒ„…}h>1J:#'*7LRK�Þ 9 "6TUSQTRVYRPJ*-1      ¬  !,' ¶ $'   ‚‚ ›   34+541,+,136;<?É@>945347>>FG  -EADC 5KKJKGJSQSPLMOPQPSQPRTRUPTXUVUUZ_S="!0& "",782�­;TL5%!HDLA62=C) B@UUTW[VJ9.4)  Ý        IdZJPO   ¥DS8/5D`HPRA % ;> ‰ …¶rqlwtqlnruy{~ƒ‚…‚…}~wvtvy‚ƒ|6   i”=&+|šœ™œž£ŸŸ  ¡ž¢¤¤¥¤¥£¥¥¦¤¤¥¦¦£¦¦cFVF78CNa^a�þ!4/:3:51/8:% ?>RPPQUTK?27-           6JC438  œ› 3I71.6T<GO3$,'4AŒƒ…ÀYVPYSPOPQVYZ]_`ece^^WWVYX_ae]$ Rpknq Zuxvxzz{{||~~}y~€˜€ƒ„‚€‚†…yh?.?/#).8JGF�­ " # ::RUTUZWM>072 þ      %/&      #$  š   … …ºE=4631,.1368<<:A=A<;34156<<D>  7D>AG <JLJLJJNOSP‚OMUšTRQSSUUSTUWTR\\O>#'!$$+521�þD\WK-#G;`@ ' OOVVWZ\U<        M_TGLM  À Ca:.5AUXQC=&#& X/†‡ Š ¹qkcorqjksvz}}|€€}}wsty{|€2 j“A&"+e™œ™œœŸ¡ƒ¤¢ ¤™¢£¦¤¦¨¤£¤¦¦£¥¥œ†[FX@695Cgc_�©(;7+ @4O6 ( LMSQTTUR=$ Ñ         6F=025  ‹© 4T?.,4NQDI:/@D0+ R:‚‰¹ZPFPPOJLSWZ[\][b`_]]VSTZZ^a`_ WnlnoNvyvxyzz|~ €~{€}€‚ƒ…€~~ƒ„„x`70D+$,'1OIC�»&' *$ GJUVWW[U>'  ˜     å  %+"      ")  † ‚ ‰ÜB:.01/*,3399::6@;<::2//769=?= 4C=@E  5JMKMJLKNQRQROKSTSQNOVSUYSNTWUSZVK6)!!'!&74/�© ?NG>0(T$O $ UUZXYZ[[H-"  ª       Ü   J]QJNO     CW7=>HcN9</-0 )3" ™ œ !]_^qqnliorv~|¥ƒ‚€~zxy}€{}€ƒ8 n‘’–I(,)Tš™Ÿž›ž„¡ŸŸ ŸŒ¡¤¤¥¥¤£¦§¦££¦Œ§šZIXD466Fo`^�« ".*$I#F $ QQTSTUVVC+   æ         7E9.35 ¤ 6Q3756JfMHF813.438J+„‚‡¹DBBSRMLIMSX\\[[cc_^]YVY^_\``b   Yoopp)Czw}zx{yz}|Ÿ{z{}€€‚‚ƒ…€ƒƒ„ƒtZ44C3$((7YJE�¨  **  NUZWVWYYF0" ¡       À&*         %$ ›  ‡ „ é1-(22,,+0058989@<989545;;7>==  7CBDH ,KIQMLMMLOPOLKJLPUTQRVTTXTQTXWVWUH2 %*##%%*>20�› =GF@2 " G@GX\YZòT@/'         O]ODJM,    ¶  EP!^V`SF7*! 98-&   „ ¿  kmnƒ}wzwvvxz{yy}€€yz{}{}~…6 r‘’˜R+,.^š™Ÿœž”ŸŸ  Ÿ›¡£¥¦££¤¦¤§¥£¤¥Œ¦œ„[KW>821Bi_Z�Ó !'(&$ ! 6>ESWUVWUO>/$      ñ  8A:*06  4K.VKVYZLE; !=>3=/„ …Q‡g_W[VUVY³VV]_]_`ZWXZ]\_`g%  ]qnpt3Hzx|z{zzy{||zzxx}‰€€‚„‚‹w`62@+'')3TKB�þ    #<FUYVWVVP>0&         +* Ë    '" "      „ ‰ Û<53?928532446446778:678:>7;=@ 5CDGK /IJONNMOMMNNLJHJPSUTRRUTRVRSVXUTUK7!#+$#$);2,�þ =OM7+$$81 3S//6VZ\]_^M8&       N]P>EL  Š …‚¶ I`A\mjV/"%+    • qtq‚~|¯}|}€}}||{{}uwyz{||~5t’’›S0/-[˜šœ›œŸ  ŸŸ›¡¤¥¢£¤¦¦£¥¨££¤¥§¦œ†\KS</*:eY�® ".- 0+62 '@.-6SX[\^[M4#  þ         9B9(.5    6VFY_hgTA>1 /5š80   „ ‚å WYUe_]^]^_^[]\][ZYY^WUVWY[^aa) Zrnpx5Jxx{xy{|x|z{zxxy|}‚ƒ‚ƒ€‚„ƒya84=*#!.RIB�à     '--3QVYY[YK5$        ¦ &+    ‰¯ ()&"    † † ß>;7?76797667:98434583535755<; 6BBCJ  ,GKMJHKMILHHLJHKLNRQTRTTQSSQTVUTTJ: #* %70+�þ LhfD+>3/; !XM .4:C@:+            N\P?DK ‹  º KcSh`@$1#6""-M  ‡ ‚ "xuq|­x~ƒ…†€~vz}zz{z,“’’˜S/0-`››œ›žŸ ¡žœ ¡£¤£¤¥¦¥¤§¦§¥¦¥¦¦…TDN0%/$?WQS�þ +FG, A62;@<"339@@<*#            ;B7*/5 Š  ‰  ;ZZfe[>84&;5%>50<X   ‚Í ]YVb]][^_]Z]_acceba`\]W[]X[Z[# dsnpv6""L{zzwxyzy{zz}{y{|€‚ƒƒ‚…ƒ…ƒ„‚z`76;##4JB;�ã )* '  #' #1:?FE=,"       £&+    º'+   &   ‚‚ … Ü?<8<8:6:8438:=??=;<:995673476  <E?@F  ,LLJEDIJHKHHNMLLMMORTRTTSVURTXWUSK8*)*50%�ú ?FJ7+886:_J1         QZN??I  ”   þ M\Kn\" PG(+%-$      +suq‚~zy{|€{|}€……„ƒ‚‚|‚~{'‚“‘“˜L#',aœž›žžŸžŸ ¡Ÿ  ¤¦”¤¥¦¨§§¥¤¦›ƒP=H7+74GSKQ�þ !,/ /6 (*C5.             9?6**6 ™°=UXmfG$#RM/9=28+    ……Ë[XVb\YW\\_YY_becdc__``\a`[_^[fsnpu-H|xyz{x{{|yz|{z{|‚€€‚‚ƒƒ„Žƒ‚€v]3-2$#)'6?67�þ   -($,#" &           %)  þ   *&         'B<7>99797967:=A>><=;>?<=Â<6997   @GBBG 1PMIHJJMMLKLNONMNRPTQSTVRSWTVXVVTI5###!*,&!�® <AG<. 4AJ\L`P4#1H[aYB,"   Ê      RXLA><  ‹  Æ J_5k:!R)0".    " Ÿ!rtw|yvz~€|{…†ƒŸ„}‚‰Š( z‘‘”–L)$(Zžž‹Ÿ žŸž¡¡ ¡¢¥£—¡¤¤¥¤¦§¨¦§§¨›~MAL92?<Xruz�Á #'+!  '/5C8\K2%2DTZR>&        –      ¨ 9=:.,0 Š›<[PrWG2' -R8D33;&š    Ë \Y]bYYUZ^^_\_bfddb`b^]]ca^cii  bqnqr*H|zyy{|}|{|y|{z|~—}€‚„ƒ„…„ƒuY-,4#'++EV`\�þ    '#XJ4'2BPYP=+         (( þ     .$       % E>=>87458;;8:@B@A=:;<<8:Â<8=BB  @GBDB /MLJFMOQOKNMPNMMOSQRONUQSPWWTUWYWG1 !%"17=:�­ 0@B4, :BPT[I[YJ, BY[J2)   ª         ³W]J??8    Ç =qKM+"0"!<"       ‚¸rsw|zxy}|{{|…‚ƒ‚ƒ~|{}†ˆ  z’’•™Y+#J˜šžœŸ ŸŠž¡¡ ¢¤£¢¢£¤“¥§¥¤¦¥¤¦ •Š’‰J@A:—©«¯�ã ((  /0:<A8WTG/?UVF0)           ¯ @F8+,0   ¢4i`eQJM@3F'9-'& Ÿ  ²\Y]c[WWZ][Z[^bbdbdcd\[`_Z]dhh  cpost68wxzŒ}~{}|{||}‚~“‚ƒƒ€ƒ‚‚|rish1+,*}ŠŽ�þ    #%)%VUH/%&=TSC1(         --  à     &)          ŠB>><866976<@Ê?=9=85757:@CC DFAGF 'JJKGINSRMNOONMOOTRPOQUQTQVXQUUVVOFDOF!$&"cfh�à .9>0#  :@FTSWJY[[=!HUJA0        TZOA<2     ÷;k:5# '$        %wrw€wwxz}xy~|‚‚|~z{z{||ƒ…‡  ~’”™_#D—™œ‘Ÿ ŸžŸ ¡ ¢£¤¡¥¤£§¥¤§§£¢¡¡¥ª”Q@6H—«¬®�þ "$ *-/;:=:UWX=# DRH?4            =C7)()  ·  0gXZOJF6>/#  ††• ³`X\b`TXYZ\YX_\`bab]_[ZY[\]cdf  eport?0vwzyƒ{~}|ž~}~€€ƒ…„ƒ‚‚‚‚€}€ƒ‡q8-'2{Ž�¶ ##**UY[?,EQE?2      ¾        --  ‘    Œ  ƒ$%þ         !! G<>??48=6536>;>?=;6;75448;@@E  ED@HF !KHLIHNPRQMLMMPON›TUSWWTTVSVWRVVUVTTX`K'%#*`hg�° 0>?2  CHTVPYHY[ZV@(1A=6    þ        VWJ=:B        :Z"/>  ê        %trw€|wx{vyz~|~‚€|wz|}}†‡„   ƒ”‘–—Z""M”›žœŸžœ žŸ ¢¢Ÿ£¢£¥¥§¦£¦¥¤¥¥£¤¢£§§‹H@AUžªª¬�þ"$ +09=9?9UXXS?#-?>9        >>5')2 Ž ‡—/]IMEA<!,E>‹ „ Ï    \X\c`[YZ[VXY^Y^ab`a]XZ\^_`cfgfrnsu?6rvzx{zyz{ž}~}~‚‚„ƒ€‚~‚‚€„…h/,-<ŒŒŽ�þ   #%"')TXYTB0 $9A>8)          ,* £      "  ¥        ñ  C;<A@87:6359<69>>;:84699;;ABC CEAFF EKJFLMKKLIJHINNMOSSVWUVQRXTNTVXWTRWZG!#%,afgk�¤.87,$ BJRTXQWIUVVUI5$),5µ          × YVG><E%        ?[J!*Až- Ò             2ustyos€xzy}|€‚~zwv|~‚†€  †”“d$"%E‘œœšžœ›Ÿ ¡¢¤¤¢¡¡Ÿ¡¢¤§¥¤¥¥£¤¥¥¨¥§¨­‰INKd¡ª«�Í  )1;;?8=4MRTRG0 &,7        ¨  A>0&+7 ›  ¥0Z\IGB7(BM†-‡ ðZWVb]YQU]XWX\][`a__]YWT\a_`h`  dqoppD.pwyuvxuwzz||{}€~}}z}~‚€~~}€‚‚€ƒ…‡c/42J‹Œ�þ  !$(!$%OSTSJ9+227'            ,'þ    "  P             !?97>>3.38359;85:<::85436Â;9>F? <D@@A$  ENJCFJFFKLMJIMONOPLQTTVORTQNSWZYSUY`G &$4`chj�þ5ED</ 1QTQRTTWD TRTTPF8 !%         [XOA=-   þ      7hF1CS#             .|r}ƒ|wt{}|€‚€}xvz~˜ƒ‰‰O_x„Œ™ £˜—•’•k*%)8ƒž œž¡  £¥¡Ÿ  ¡¤£¤¥¦¥§¦¥¥©ªvLLEm©§¨¬�Ü %&!  $::=:<:<3QOPPMD8 %         ¯G@7).)     ƒÔ 0c\B=;71FLV2.        'dW^_aZXUX[º]^`_a^a]WVX`aciib>L_hrusqnpH'pzzy{{xzzxzz{z€|{|z|}€‚‚€„†„Q44.Vˆ‡‰Œ�—    #$ $#PR¤QH<! &     ƒ£      /(þ       ,              D9??=30Ó3668;;:7<<8;943468:ED<)9CEOZ]VDEA?@! FLKHHMFGKILKJJNOLLMMNTQNQSQQXVTUTVZ[7%%!?c`dg�þ 4QF7*"DLNSTSRXBADCKI:%     !     KKI=:> † º    0N  0)'     ‡  Í 1zs}„}xty}‚„‚‚€}{vt~~„ƒ†Š‹’™š—•™˜••˜˜›™}+"9“ž›Ÿ  Ÿ¡Ÿ£¡ŸŸ£–¢¥£¥¦¥¤¤¥¤§¥¥¨ªf>D=f¦¨®©�¿ "-(  266>=>==2EEDKH<(    Á       <:6-.4  ‰  ž-P61;441C@;5"–  ‚Ë )cXabc]ZVX[a_^`daa``\WV^`gdgijpwwutwustutwtU/vy{wy{y}}zyz|{}{|~}~“‚ƒ€€‚~ƒƒ„…ƒD*01Y‡ˆ‰�ª ##$!& CGFLL@1   ×      )#  ¬   !     þ    %F;>@A86468>;;<<=<8:743:8=;BFA@JNIGCEEDIGIC. IIJGILILMHIIJJMLKLPPQQRKSVRRWUOTUŠTVS( %&E_aha�à&KC3&*VMKNSOLUE#+3<:&             ¡K'?06:1    ±   (F %#7    ß   *wry‚„|ptw|{€~~~|wtsx|y}„‹‹”•–•—›š–“•—˜v&„——šœœžŸž žŸŸ ŸŸ ¡¡¢£¥¤¢Ž¡£¢¡ £¤T776n¦¨©ª�Ü&#  ?:57786:5 &,6=:)            ¦ <!2#*0&  ¶#F4#'/6?BG.    ‡ … † ¼ ]T]cdZPUW[\^\\`a`^]XUUZ^^_dllosstuvxvsrqrsO guvtwxz¢{z{|z{||}{{}~~ƒ}}~}~}€~5&)-_‡‡‰�þ  # !%#$.39?=3&!       -   †  þ              #C9=>A82418;;899:78833699;:?HE>GHIG¸FIGEHFEC( LFCDHIJKNHJHIIJMNPLOQONLUVPNRRQOOMQN")L^bc^�þ%DK?,CKFIMSQNVB '/'               T602?5   „ê     %L  *!            6wrz‚{ssuv{~¦€‚~|wtxz}€ˆŒŒ‘”˜—”—˜—••“’˜v'"…™šž’žŸžŸžŸŸ¡  ¢ ¤¦¥£Ž¤¥£¡ ¦¡G004}¦¨¨ª�¬!,$ *65246:8=2 '/*²        ² D+!%5.   — MA1:=B: ‰   † ‚ ƒ © %\S\b^XRTVWY[[]`c]][UUY\^a]glkostssuŽrqnosS ewxxy”wyyx{zyyz{z|{{~|‚}~~}}‚z*!$'a‡†‡ˆ�þ    $# %*20&'$        0  þ                      (A6>=<4230467669;897038:<¢>9AHB>GIGBFFEBE@@A-  >HEGIIHHIFHIŒGILKKONOLOUUPŒQROLLSL$J^]�þ #8D>3'-?IJIPSMNT<         \!&03?    ¾    $T9-   ë      ";{t}‚}}uvxty~~„ƒ~}}vsz{†ŒŠ‘‘•—’’•–——’˜r#!&'‰˜œŸŸžŸŸž ¢ Ÿ ¡ ¥¢¥¦¦¤¦§¤¤¡©—@22.•¨ª�§!,$  0553488:?2  Ö         G #'5   Н!TR1'1!541      –   ¸+_V_aZZTVXVZ__`dc]]^WTZ\`]cijmoptsqoqssrmosVivwzŠyzxyzwy{{z{‚€}€ƒ€~„r+%&#w‰††‡�Ú "#            Ó/         #    ‰í    A7?>9412514677;<77;316:=9=@FA>BID=?ADAA<@C- CGDGGHHFEHHJICHLKGIMLRMOPSQSQMMWJ!S_^]�þ :5:2 !27FHHPQMMT4             T2)1R-  ‹ ±  3,    ” Å Cxw€ƒ{svwuy}~‚ƒ€}}wvy~€††ŽŽ’““””“’—•““–j"!# ‡››žžœžžžœ ¢…¡¡¢¡¥¡¦¤Ž¢¥¤¥¤¥‰2#.4›¦¥¨«�Œ )-3ò8877?+               B(!'F) Š¿ ?N", '-(       ˜ 4_\bc_WTWZ^Ìbc_^^ZVY_^^ddpnnqrqrppqtpooqFjvuxyxzyyzwyzz||}|{}|€}~|~~ƒ‚€€‚e!$*€†…†ˆ�©    $     Ù       ,.!   ¥       ¢    á !?>B>:513504688;:78=636==:@@JC>ADDA@AEC@>BB" IFBGHEHEDKHKKIKNMIINMPKLMSNNOPUSQSV@ "Y]`\_�þ658&!10?FGJOPRR8             %+%1 —   ß  -         #?wuƒ„€zppuwz{~ƒ„~}yª}~ƒ†ˆŽŽŒŽŒ“””“””““—u"#!‚œžž žœžž Ÿ¡Ÿ £¢ ‚¡ £’¥ ¢¤¢¢¤¥¥¤u3.8:™¨¨©�³ $).21487:=(     §         • $ +  ‘   ‰ þ %(.%        7]Yeb]VPRXY[[]^dd\_^\ZZ`^dfiqmimnkppqrqomnrM gwyy{zy¤vxy{vzxz}}|z{}|~~}}~~€€€P#%(/}‡‡ˆ‰�³  ""$     ‹ ™     ™        þ             (>;C:55125266:9?;7:<857;>@BELE>=<?A@AGC´?=@C) CGFIJHHEFKKHKJKPLIGLKIMMOQKNPPVTRUS2#!&\]a`a�þ "'#3(-ABLOOJK:             A 5"  þ   ,6 %2.*         !=sm€yyqpwxyz{€‚…‚vw|~}ª‚††‹Ž‘““–“’”“‘–‡%z™š˜˜œ›™žœžžŸ¡Ÿ ¡•¢ ¢¤¤¦¥£¤¢¦§¨{>23?©¨©¨�Ì  %$'2055755)          à   3 .      ·;4 %#"       Ú   2YQb`XVQRVWZXW]bd`]^YX[`_bfflmjiioqprqoomkr` _tutrwvtsywuwvwy{{zz{|}|}~Ž}~~‚‚ƒX(%%4‹†‡ˆ‡�Õ    !          ›   ³                      '<3A:2311305±:==<::5469;>@BHD?<9ABAAC?@><C6 @FCC@FFC@IGDFEEI™HHFJLMOOQPQQTOPTR3"*h^``\�´ 1(!%9 $<DHGKKN7!    œ       ¤<' 5I!   Î   D.S\:,!,%     ´   !Cup{€xynowyxzy‚ƒ„‚~wwx}~ƒ†ˆŒ’š‘”•’’‘’‘“‡'|–™–˜œ››œ›žœŸž ¡Ÿ¢¡ ¢¢¥¥¤¥¥£¦§§|G;7>§§¦§¨�Ô  . #2431678)*            —5$ -;…   ‘ ‰ Ÿ6!?L0'%   è      5\T_aXXPRWWXVV^bdda`ZZY__dghkollmpoqqpnmmlpccrtrrvuvvwuvxwyzy{{yx}‡~€€„ˆY-((4Ї†‡†�Ó  5(       ¤-# #         “  $+ ˆ    É  " (<4>=35./1.22399>?:955187;>BID=?@A@A@><«:?5 >AA??FFBCFDCEEHJFKICDKKONORQOQUSTWS8!„+f_]`Z� 4>?2!1 .:;EKMN3,        ñ       =          9`9G6@/2F9  ö         Mxv€‚|ukntw|}z‚‚€}y{y{~„†‡ŒŽ“”—“––•”“‘‘’“‹." l™›™š›œžžžžŸ¢ŸŸ  ¡Ÿ¡¢¢¤£¤¥¢£‹¦¥¢j>72O¥¢£¤¨�¬$ + *0.2747*5/     ¿           / Å        *L/=4>2/;0  Ï         7^[cb]WNQTV[[Ycabb`^[ZZ\`gghmloosprrppom‰pfRvvt‰uxyzyxyy|{†z{yz}}Ž€€„„N)(%>‡„……†�þ  @8(              #   ¸        %"  þ        *>7A>82,/12775<;>=9864366>@BJB=BEABA@A><;;?>  0ECB@CDFGIIGHINMKKJJFHJLOPOSPORQUXR/‡ /aY[[Y�È:CE/)#3MOMP0.'     ¦     ((    #/6;A5/"    @4 JUS>-)#,4683 Ê            [ys€~tnryx~z„ƒ‚|z~z„…‰Ž’“–£˜—•”““’™Œ-#%'\™š›šŸ¡ŸŸžŸ ¡£Ÿ¡¡ž’ž¡Ÿ¢¡§§ª«®_<F>i¤š“ކ�¬ %#'&7737%<;'   þ            $--/)$    /* 9FH;/010ú31/%            C_Xc`]UPQVU[ZYa_cdc][Y^Z`feimonnprprrpqonmtfEytsutwxy}zvyxz{||yz{y’z|z~ƒ„‰ˆC(0+R†~zwn�þ  !#GC6%              ±%!%"        #"„  Î        1@5>;81-042998<:?><873959B?CIG=ADC@BA˜?<:E>  "HBBCADGKNMHGFKN™JLKHIIKKLKPMTQS[\* &!;cXRNB�þ3>;- .FEHN1-)&             ,#    8ÎOSNKNL@7    %lY 1- 5#%( !:+     ï'1   ]ytƒ€vquwx~‚}€‚ƒ‚{x~{„€‡Œ‘’“–˜–••—“””•; %VŸ›š™œœœŸ ›™šš—›œ¥­°µ¸µ¯¤–ƒ€E7F@Dedeh� #  %3µ6$<:6$        Ê    &   -=B?9<:4+  í SH ,& <&)&!0       "(  J]Yf`\SPVVUZ[[_`add_YY^Y`ebgknmlorsqŽonnpg={tutv£uy{vvutxxtsuww…‡ŒŽŠˆ€unfa[+#/-5MLMQP�þ   "$IJ?.             %þ/52-.*)#      2/           4?9C<91/2339:8;:;><965<7;›=:@FF==@CDAADC@<<@=  #KCCB£HKLGCBDGIECABBKRU[[XWNLF?;: &#%-+*+,�þ8=:'   /(>DH/'')#             3  ‹#2;CD- ¨   JvJ     þ      (;8<   Xtr|xtuyy~ƒ€„€„ƒ~yx|z„‡„‡‰Œ‘•”–•”••—’’•–M#>—˜•˜š•‘Ž’ˆ›«¯«£¤ž“Ž}urgd]W]^cbbˆEADFOgikmn�þ"  +#115#3574*             +  Š(-42% ª    9]=      £       /22 àHYUb`\URWYW[`^_c`dc^WX[Wbgdfjllmqpqpqsrrmmqn00{rtrttpnkknf^vƒ…‚yzunk]POGE@;>?CGD*,-/;NPQRS�Ñ   =F?6/*        à     $%&&     7       þ       #"   <;7>=833445:<8;;7<<85799@?=AEA:=@?A@@DBB;<@= !M@ABCA<?:;?4-CKNMHGB:3+$$!‰"##%&,.1-0�þ ++'  '#?EED+               þ    (!?Pu9            %%(    Wup}wvv}z}{€ƒ|wvxz~‚‚†Ž‘’’’“’“‘‘“‘ŒF%"4’’—š™š‡{ngfYS^a]YSVRQPOVZZ^Z\^^_a`GFPMSdhhd�Ÿ   $ 22-1"  %# ¦      Ž   ô       .9Z1        !ë   BYSb_[VUX^Y[^Y^_`a_[VUWX_cadmmlnnmnqnqnmnmle.%sotxxwdZPFI>:HGHA9;88:7;><;=@@AAEC,.85;INNL�þ      '+               ¶    7     þ         8:2<;<546648:58698;85337@=<AJ?;@?=>A=@=<=;<6 E=AGIB3,"!!!ˆ#)'',..)�¤ *##  5EHC, ±       ì   >K/1     +2BG<901.  &16GuE $#       ‚ ï!"  `tq‚~vty~~~z}„†€|vsy{}‡Š‘—––ŽŠ‹Œ™œœ¡d#!+|meXLE>?ADFFJJNMQNMPPXTY\\WXV[\ZYWFGSRYbcgkh�¤    ,520#þ        &    CJ&!   '))+$#$' $'4Y< #…* Ÿ         ž   J[Xfb]XW\_^ÎY[adb`]WTXY_bahjorsrmljjkjluyzJ"h^ZMA;6/20024477;86;:?:<AA;>==CA@=,/==AJJNSP�’      þ             &,    " 8 œ    ƒ   ‚ ï  582>9:549858:74:=::75103=?;CEA?DB;<98:9:CGIO( =-& %,,*+),/.�Á*,/"?zr/?IH&    Ÿ        ®   9L+  /\cihclB!’#//45Iz3 6.ø  %?5!    $  cssƒ„yxqw~z}~z}€‚€}xu}|~„ƒ†‰¤´²­¨¢˜”Œ}n`PAF4 %/514;;=@EDEEGHJLMJ–OOMPTWUZY\emc[@BE;_pqut�  4lh(242„þ            )3  $DJKHJS4 !'&4\& !) þ     "=5     NZXfdZZSY^Y]]Y]^`a_[YV\Y\cdiiƒ”‹‡‚}{sj_TE::((0.*),0042/030455118;:”87<;9=;@LSF@+*0.IWWZZY�œ  CL   À            Ä  ! &##$&-  > „ ï  -)      684B=6759;3796689=:764527A@EFZgd_XTQNHC61(   ˜)/%&!%$043667�Ÿ $$W†R),+GZMG þ              8 # (, #;A?7;)    1,  #+-15L4û /K #)   '   "ept‚€yxrrws}~x}€ƒƒ€{uv{|}„€…ŒkIJ=@<3'(&+--16-%(/46788:? @BA?BKIJQPSY]__`_dcdghjV=?==`ttxw{�œ KsL"'#6C51†ª           ¢  8 " "" ),'%  É"   $&6a" $3   "(    ž "   QWZe_XZUÑR[\X^`bb`[WVZ]]cagmV@C531)#!'!"&% !$((#(-,.,+..*/2/1279AEBCA?DCJLMN:&)-.HZZ^]a�Ÿ $HB(  †  þ   #            !B  þ  $      969D957665/684;=;?;:75867A=CK9/*   — #!$#%)+*# $#/86;9;�þ  ##GP54@BEAH"            B !! )<@G@<& Á%>     #("1;S|MKL#   !ô      % `rw‚|vuknos~}{}~€€zywtwy„†‰T)+-/-1,0--10//+'!#")/35377=@BHFGMMSVU[[V]fdfcghhlkmp\5…Ckww€�§ ?K.-3//+2‚þ         E  ().&#  $7"(<a: 64ô      " OW\e^UVNQOQ[\Z\]^_YZYVX\`cijl9" "! !&"! $(%*+,/-1337Š:=@A;BIHJDJPOPQ>!$)1T[]gfe�þ  (0               &     Ì)    %?       Ö      78=C745.2-.774:9:=587367:?@BG   ˜ "''(%$&&*,,*"$&6;:C@?�œ $%%-&,9;@?<E&§   ‹  „à   1$$8- $8C>-* 5†v     3 "/:VyQ4+!ENL'    µ    %fvw€~yulott{zuz|€yx¡}‚„‡‡`1-/++-)*))+1-1/,&#):89:<?E JNLPSZYUY\]fgegilknmont_7:7Im||z€�© "(2/0*'0¯        þ  4'!;2 #(*  4yj   '!'?_=( 022         Ô! PYZb_WUMMSUXYTWY\^VVXWY_bafgoC!"$##%"$,,)+0.122499<::>@CDBHIJLINNO‹PUD$''2Uaa`ed�˜   «    õ     !    L;     ! '=    ý      ;:=B944+.//55/25983432468:@>E       !%&'(&'))+/+,# "'8?=<?@�œ *496$.E@>?;>C  …        ?#é3<2(.! "?/E,  *=# /\=')8PzQ8 )$AIPS "  æ  + gtv„~tskptuvzvy}}~xtvwz„††‹S,+,),-+,2//2454()#+<>@CBFJLNMMOUZ[]^][hidgllmpqtrsw\:3?Lyz}~�ƒ ž  &85.1/)0 ƒ†  ¥         û  3#(!$ >8K6  ' "J/':`=*&+4;      á# TX[h]RRKKPSQVTVY[^^WSRW\`ccdjC %&!##&'$!,/-,2357868<<B@CFDCJKIMQLNSRWTVXC$!*4^_bddb�þ                #     ô     ;(  %@      # 99;E931),/.46/26š95.0225<A>C    ¬   !! &(%'*()++1010$!'?<>?>�þ *1),$# :]V=>89C              \)$7@>54* &Yu?þF!0H  *L6?A_R8%%8KyJ; 6EJQP   $ %     +estƒ~xslsvwxxvw~|}xwwy{|¢„W012.3112723688:! ,?>CFDILMRT\]]_]__fgdimnpqqpruyS89ALy€|�þ  .HB*,*(.                Q&#%" EfBþM')?  2% &&E@+ $6_9+ #)/46    %    # MUYf]UOJPRTSTUVZZ^^WVVZ[[Œ_a^m>"  #'$³"%$"' +0/,1478::;:@DCDECBIJHNOMOSSTSVZ8#&+6]bdbdc�þ   )'         ?    "<þ'#  26% "A            779C940*00/55.17579400445™;@;E     ™#!$" &(&()**+,0Š4 "&=>@;>=�´  %4/2((%&7;;>;;A   ª        ö   0>IHB13*–g-H? &<?JE]W=#*;Y~6- (B@HKO #*,=B.(#%$"     ¬ -mux…zupvyz|{yz~}}~zww{y~…‡ŒR455253458²;;=A$! !,B@CGJOOPNRVZ_]_aacegknmnquurtwwvF+7?Iz‚‚€~€�Ž  !!#*+þ)),             &,*# 1 'ƒX /,&Ç&.+EC/$?c)"-%/.5 $'39()(&     ’  & TVYd_XNNWÐZYYZ]Y\\XVXZY]_dgj6'(#$))'))&,)%, 02213:978;=@CBDFFCFILQPQPRWTTUVV+%*5_feedf�þ               þT5   0;)&C   (,        "=:=B84/-34132129556500348Œ<CBD   –   "‰#""%&(,*),+.Š2 #>A@><=�¦  2.. *."7:=66<   ‘    þ     ,$%<?7-,# !|…#-FI>?IMJK`Q?"&4Gd„VG?Ztˆ•¦ž°¹ÄÈÒÒÔÒÚÎt%('¯!*          mxw‚‚wuox—~|}|~~}xx}}y€ˆ‰U;7556¶98;<>><A*' -CDEGKQTRRSY_c_afdfgigonqmtstxy{t9.?BRƒ‚€�—  ' '+,('* ‹  þ         +! $% lq   /1(*00,.G</&/JgD:5J[eluƒ†š¥§°›´®¯¶«a! .3   ã     X\XcaUOOXXW\Y][^Z[\VV\\Y`ahhl7$'&+-*(&+/-2-(+ -1.16=;89;?AFDFHEFILLPQROUV‰Y\Q +-=dfeh�¾             ‡¢     „ ø CI 21' .F**,7@HNV]qƒ“•˜ž¥ ¤œW          @?=A<41.34254‘;76531563=?GCD ·   %!!%$&&'$*+,,0--026/# (?A@>=>�¦0('+.;;955?  þ          (6U2 :E/*- $'=u{" *R\Y`bfmoxyw‚†‰– ¯¿ÅÊÑ×Óׯ¼°¯¡þš”taYKG<OºÚx*!&7)-       ! fxz……{tpwx{~|~~€~~zxz{{„…‰ˆŽS8597678;<;<><=@'!ACEIOTRTQUX]`cbef˜hillnponquwwz{q<:@EV€‚„‚�—('+,*(- Œ þ            *9M2 $+  "%#9fg !9A@HDKNUga`emru}…’Ÿ¥¥ª±¸¸§Ÿ˜•Œ¡ƒ|jaSMD?5E¸b$3 13   ‘    Œ Q]]gcYSRX[ËZ`]^^[\XY\\Ycejgl<&)(/0.+(-0/3-.+ .3.39=:<<>>BDJHIFILPOORPQTXXWX]Q$&*/Dehgi�„  —  …  þ          (   == #%%)+-24LMKOXZ_bgr{„Œ“˜™‹„|þvnfYLE>7.=‘ªV           <??C=5203556564695453565@BFCB  $%#%%˜&'&&*,,-/..047,!!->?@>=B�Ó  6+*"!04399<          „  þ &2;$    "0A7-<8 (?PLR`›¨¯‰‘¨²ºÅÏɾº²±«²©¡•€tkYTB94, #%$+7:" Â8(3o         hs}‚|vpxš€~z|~€~{vt|{ƒ…ŠŠŽR8;97;77<³>B><>,!CAIISSRTTWY\`acighknppqrqqwvx{zk813=W„„ƒ�—  #(%*'+   þ          '6@'   $#& "<IGKSˆŽ‘s{‘¤°²°§£›™“—Œˆ‚†||tk_UM=3*#  â"(02Œ£/#/h      RX`c_[URXYW]\[]]^\ZZWU\Vbeijl=).)+-/-+*//-*­ /2359::=>>A@BEIMHJLPQSRSTSYXVY]H!)Bhdeh�þ                        8LGM¥Morzhm‡—š¡ž¦–ކ€ƒ‰€sx‚}{ocZNF6,! þ #,-ˆ$$J       <9A@754/3315754787252253?CCED    $%&…(%&'(+’,//21/38+!/B?AA@A� 1*( ')447þ       4 7bthHJ>';@I?09+Y½ÍÍúµªœœ‰‚wpfUJ:51,$  +?H´R\kt{‚Ž—™¤ªµº¼ÆÐÔ®>ÞA!#   3:$š  $lv{ƒtsz{|€}Ë€zyy{y‚…†‰ŒM7467;;9<?>?@>BB*" BENMRSSWX[[`]bahhmolqrrsrtwuvxxm63.3e„ƒ…„‡†�   "!%(*†ì          0 5Zn`GKC$&*$"N¢¼¾µ²§ž’|ujcYKB940+"  þ $/7ENY_gmvw~ƒŒ™ ¥­°“7¹4"      08!  U[]ca\RSZZY]^\][\\]YWVYVaffhk>0-*,-.,/,/,++,0 /¨58:9:<=>?AD?DIKLOQPTUSWVTXVTY\M $Oiggilk�    þ     & D\C! Gµ½±³¤–ŒwnjeWG:92.( &-þ;CNPX`fkqw‚…•”—¢¥Š0£)     $  >:=>981/3534567987432241=A@CB ¡ # #%'),,(..)+/120,/4.5BADBDC�— ?.4( #""15þ         7';Ÿ›whc[ 29D;+2&Tá…#  #18@OURZbfihot‚ŒŸž©°¹ÃÈÇÔÅËÎÒ×ÖÓØÕÐÏÐÊÎÍËÊËÉÇÉÚg"Ñ; -I    4@#    # jwxƒ‡‚vtx}}€~|…}}y{|dž‰‰<$!)0<<=@?@@?A>D-!$CKMLPSUY[\_bddcfeimnppvwtsxsw{}f/528i~€‚„‚„�— (  ')þ         0%8m`}]O #*% G¿}"  !*/7AHJORVYZ^aozƒˆ“‡›¢¦¦£¨«¯ž­±°¬«­ª­ª«ªª©¨ª´U«))@‘  2@# œ  Q\Z`d^UTY[Z\[]ZX\YX®Zcfdik4'##*2503,.,+1-3!37678;==?>BFDCHIJLPS“WYVUXUW]aI" %Qddfjhk�—       þ        (  "gsK3F5@   :µz# &'2:ACHKOUUYZelovrr}…ŠþŠ“˜•–”šœ˜™˜–™—˜””˜•˜¦N‘! 1    ('   797?;91/4854176464654255>@?DA   …!#&)•-*+././,.38,5<>ABAE�þ 3..)   )9        $ /u•L 3€ -9DF.,5²NŒ˜™°œ¢¤©·¸ÀÂÇÉÏÏÍÎÎÏÌÇÂÁÀ¿¾À¾½½¾½¿¿À¿ÀÄÃÁÅÆÅÅÈÆÉÉÇÉÈǾÌv&×:%   '   " osv…„usv}}zÌy}~|yxv~}„‡‡ŠŠ5,@BADCB>A1(@GNPSTXXY__ceedfemlkmmrywwxsyz}`.)26k€‚„†‚�¨ % %,  ù       5m…F 2t #*+%“wHzƒ„…ŒŽ‘œ¢¤¥¨­¯­¬«­«©¢¡  Ÿ ž›žž  ¡¤£¢¥¦Ü©©«©©ª¨§©©¬[±,"  ( XX[ea\RTW\[\XYUTY[ZYXU[]dhfkm1¸*6011/1.3+24889=?@BCCGEDIIJORPPOU[WWYVY\`C"&Sdgehli�š       ý        % >S& ^ |pBdjnr~ŒŽ•‘Œ’—™••–——‘Šˆ„ƒ†ƒ…„††‰‹ŽÝ’’“—“•“’”–—šS•  !  =68>87/.0543/52033454.37>@?FB‡ ‚ ª !$%#$)(')&)./-0-136'4>A;?DF�ú K4$ %7         , ^g8#  D%:KN98U½2EÑ‚ÍÊƆÅÅÃÂÀ¿¾ˆ½¾»¹º»ºº¹´¸»º»½¿À¿ÃÆÃÅÆÆÇÇÊÉÊÈÉÉÈÊÉÉÊz%×BB  ¾ "   *!pqvƒrqt{€€|}yy~€}zyw|~„„‡‰‰0 ;BEHC¯G9"$>MORTTXY[`aeigfjikmpqpsyx{zsvya5'6Ht‚†‡�ž 6  $.*'ï        ,  ^a2 !>&00 ">*=µ²±¯¬ª§¦§¥¥¤¥¤ ¡  Ÿ  Ÿœ­›œœš›šœž ¡¡¤¥¤¥¥¦¨§ª©ª©ªª©ªª«ªa²3<ú !%  ' WTZe^\NPT\^_XYUUZ\\YYU\^cdhlh* 51494119./889;A@?BCHHLKJLKMTSSPVZY\^WX\aB&4[effjlg�Þ            ) þ3G  * %…%9¥›š˜”—•‘‘‘‘ŽŽŠŒ‰ˆˆŠŠ‡…„…‚‚€„‰Š‰ˆŒŒ‘’’“”—“––“–—›—T˜!.    £ " =5:>56--.454132136554067:>BF>¹  ! "%&%%&),-+),//04/236#!:@B?BDC�ü:'' *!+7  '        +    .@TRC>O¾ ‰ÉÂëÂÄÂÂÄÁÀ¿À¿Á¿¿À½º¼»ºº·º»º»¸¼¾¾ÀÁÄÄÃÆÅÆÇÈÈÌËÊÈÂÉÊÊÌ)ÑE (       + qux„€vru{y~}{Ç|~|{yx}~ƒ„‡‰‹@ 9BCDACCJ< !9ILPSUUY]b`bddehjlmpquvw||~yy|]B=;D|‚‡ˆƒ�þ &  .$)3    4,&"          *   '50!7œx«§¦¦¡¥¦¤¥¥¤¥¤¥¤£¢¢  ¡ žœœžšœ›œšŸ ¡£¤ƒ¥¥¦§ ©«ª©©ª«¬¬«d«3 " ¤ $YVYd_]QOQ[V\YVËW\\YWV^_cdgkh6 23352-/8-(469;?@?@AEFIJIJKKPQSUUW^]_[[_b<(&&1afgfkni�þ                )    ! $ˆ l–•“’—“’‘“‘ŒŠŠ‰‹‡…„†‡„솅…ˆŠ‹Š‹‘‘’‘‘“–•”••˜šš–S•#      " A7:>75/.0614324236641398<>CD;·   "#%%$&'(.-+,..3492479  "??B@DFB�û !%  -   ,0O       +   )<VH65UÈœÇÅ’ÄÃÃÄÃÂÄÁÂÁÂÁÁÀÁÁÀ¿¼ù½¹¼¼»¼»¼¿¿ÀÂÅÅÄÆÇÉÉÊÊÉÈÉÈÉÊÈÉÊÊz'×=       .'suz‚ƒ€sox~yzz~~}{z}|ƒ…†ŠŽ7  2D?FB¯C>($!@KMPWWU\[dbeefehiknpqpwxz|€|z~‚[JFFI€‚…ƒ‡†�Þ    !%0    !GK`&         &þ   &6+# 7§‡ª©¨¨¦¥¦¥¥£¥¤¥¤¥£¢¡¢¤¢¡žžœžœ›¡¢¢£¤¤¥¦§¨©¨©©ª«©©ª«ª«¬e±-     ¹&XX]b_`NOU]U[\WVYY[ZYW\_^ddejo9  ,830/012-.799>¢C@EGIIJIJKINQRQUX]^`^\ad=.,+3fgjhikh�þ         -      ! # #–x•˜”“¾“”’‘’‘‘Ž‹ŒŽ‰……‡‹ƒ†…„‡‡†ˆ‹Œ‹’’“’“‘•—•“–™˜˜–Z” ‰  ·   ! ;7<<88-/370573433464/498>=@DCš   ! ##&%'—+,*,//16:559<"! A?A?DD?�Ü$  , "H0+)        "(31"('2I=1/ZǯÅÄÆ‚ÄÄÅþÄÃÂÁÁÂÀÃÀ¿ÂÁ¿Ã½¼º½¼¼½½ÁÌÐÎÒÐÊÈÇÈÈÇÊÈÉÊËÉÊÊÉÉÊÍu!Ô8 !$L$   -,srz……pmvywz}vwz{~zwz}~„‰ˆŠ~¼  %.8BA@B?("!@LNSUSTVZbafgjpglkkouttxy|~}~€JPRKW…„ƒ„…†‚�Ê    *  &U;CF2     ­     "".&<¡‰¨Ö§¦¥¥¦¨§¥¥¤¥¥¤¡¤¡¢£¢¢¥ žœžžŸŸ¤±º¶»´¨§§¨¨§©¨ªª«¨ªª«©ª¬b®0 A    % "ZW]db^NNVVSWZTUWY[ZVX]^_fhfja  !,01102-.;;<@ FGJJLSKNLNPUUVVZ\^``ba/65.?kighjk�„  Õ  *       þ    %“n’•–‘““‘’••‘‘‘Œ‘Š‹„……ˆ‡‰£®¬®§“‘’“”’‘–—™•”—š—™š[‘$< "  ”"86==88.05402712¶6521479BC?D:   "#&').(**,+./‘49988;=%&(EC@?DFE�Ú 05&# %3   W#          Ñ D=.+9:0*/2.0*625669aÆ »ÅÃÅÄÆÆÅÃÅÆÅÃÆÂÉÌÅÂÁÁÂÁ¬¤±¾»½¼¼¾Ã»r607}ÃÉÅÆÉÉÈÉÉËÎÊÉËÊþÎu)Ù4$.…v­*   . -tqw†‚}ujuvvz{xy}zyyvy{~}ƒ†‡ˆ&   :DBB>%">MQSTTVZ\]`dfgkljkkoxqsxwz}~xEI[Naƒƒ„„‡{X�þ !   !*    Z3            ?6* #!$ #$ ! C¡—¨§¨¦Ç¦¨¥¥§§¥¤¦¦«¬§£¡£¢¡•”š œžŸ£¡j3.6v¨©¦¦¨¨§¨ªª­ª©««ªª¬\²&#+ti¡$   „®' ![TZg^ZSKSRRXWTVZ[XYUY[_\dfeg`! 34®-,;>=<<@@ECFIIJMOLNQQZTWVWY]^`bX)/;2KhghilbK�ê          5       :&    ×  /“{“”—””“Ž“’ŽŒ‘‘žŸ˜‰‹Œˆ‰ˆ‡„…‰ˆŽ”h4-5s˜‘“”’’–•š–”˜š—™›V™! VF“$  ¤  $ ;48?530-1Ð5511443302268@EB?:   !"&%')('),*2.0/2597796* /AB@BF=0�œ  02"  $02   ² *     ©/ &w¢E 6@90)/11008;EB-)RƹÅÄÈÆÑÅÃÆÆÅÅÆÂnBzÏÀ½Ã»8 y½»¿¾½ÁÁ8FÓËÆÇÇÊÌÈËÊÌËËÊÉÊÌy'ÛA H, C    Ÿ  # (tv{„ƒ{tktuuwyy}‚{Èyzy}z€…Š€)  0DHI>$$**@QNOUSY[^^cfhfknlomrsqvwy{z|‚vX`aVm‚€‚q'�þ    %)' " )          + )k‹: %(%$!$"$ %##*$?¡˜©§©¨—¨¦¤¤¦§¥¥¦£\=o­ ž£œ+f žŸ‹¡ 1B³©¦«¨ª¨ªª«©««ª¬ª]²,@+ >   ê   ![X\daZSMSPQTTUZ^[YXVYY`[abbg`&  1985-.>;8<:>CGBFIMKNQNRRUVTYXXY\]_`U9?<5WfhdegX"�Ñ               …" êK`!    )Œƒ””—””ŒŽ‘ŽP7h—ˆ…Œ‡& WŠˆ‡ˆˆ‡‹,>¤’’““–•””š™–™—O—' - »     <68?72-)--.11026431/0/75:@==4 ²  ! "%&&('&))*0+0.1142670$,* 6?A=@A3�þ# )&   %'7  I?        bµ†(682-*.*/02?>G;&#WǯÆÇÇÅƒÅÆÇÅþÂÃÆP ±ÄÁÂÁG¾¼¾½¾¾V SmE kÍÈÇÉÊËÇÌËÊËÍÊÊÈÊ'ÖD      ,rv|ƒˆ~qmsrutwwz||{|}x{{‡‹! » /?FGA+#( 3KMPVWX[^`bflfjmknpqttu|y{yz€€n]di_m‚ƒF�¦ "%>H> ×       Y¤y#'(%$!%&&$$'&.%B ©¨¨§¨§¦¤£¦¦= ™¥£¤£9 j žŸŸ žELf? \¬¨§§¨©§«­ª­ª«©©c±1  â $ZY_df^RPSOQRRVW[\YY[[X\[bcej`  &3643,%<;;<??DEBDIPKNPOSRQVWW\YZ\]`]N>?B=Veeddeh;�¯      ?-    þ     Cf     *‘”‘•‘“’‘Ž‹2 †‹Ž2_†‡‡ˆˆƒ= Ia< T–Ž’’‘˜—”’™˜•–“’Mš     Ò ;7;>>6,+.,-/0-06411/11839>>?5  #! #)'(('(++.,/71054*&.-'6>><=>:�þ" -#!!  1/U'  Y&         ]«a   891--.+,0*5KL3/+\Ç «ÅÈÈũůÇÄÃÅÅÃÃÇP ZÍÂÁÄK†¾½¾½¾¡!xÍÑÒ_ '¾ÈÈÉÊÉ‚ÊÊËþÉË„(Ú>         2yv{†‰„srvrttstw|zyzwzy{z‚‡Šx  0DEF@)%%,GNPWXY[]affhkiklssqstuxz{zz}}dYbf`r€ƒ€v@�¥   +0Y6 X*‘    „  ³  N˜['(%$$ 01>¢‹¨­§§¦§§¦¦¤£¦©= M®£¢¥? i žŸžŸˆl°³³Q#ž¨§¨©©¨ª«•¨ªj³/  ‰ …à%^X\fgcSTVPRROSUWYXXVYYXX`dgla   $7732+ 5::?A>?ADHIKNKKMTROSSTVZXY[\[F:=?=Xddfbd\5�þ      : D      !  -rP     %z”’‘þ“’“ދޕ: F™‹Š4_ˆ‡ˆ†ˆwf¤§¤J Ž•’‘—™•’”––‘”Y      A8;AA;/21+//-,03320.1574;Â<@B7  "!$#'*''(,,-.,/4300164&"*-+9@=?<=2�Ù$ !!# #$  /5 _K          ÐC(  671*../21'&678;;eÅ µÅÃÉÇÉÈÅÅÄÅÆÆÅÈF ÇļB‹¾½¾¾ÆVoÒÅÆÉÈ<  ÉÉÈÊÊËÌÌÊÌþÊËÎ|*Û. /Q86$    # 7|uz‡‡…yswxxw|zz~{w}yxy}}ƒ…ˆ‹t  EHGC=&$'GKOSW[]]abeklrolnpsqvuv‘xz}z|{[Z\NY}€€‰‰ž�þ  ,9'/((SD           :% &!#""! #%C¡’§§¨§†ª§¥¨¦§¦Œ¨:  s©£ž:jŸ• §M Z°¥¦©¨1†§¨¨©«ªª¬«œª©¬eµ$ 'A54#  „Õ  +aY[ffdYUWVTUYZWZWV[VTUXZceim] 3F934.889>A@BCEEINNQOLOTSOU‘ZYZY[[>:8,<`cfedlq‹�‹  à   7-           ì "     '“}’“—“‘Ž˜7 f”ŒŠ4RˆˆŠ‰FQœŽ‘’™.s‘•“‘‘””“•–•’—]Ÿ $7*'  ©  @9;A><4430„31332È312459;@E;    "$#(())()*,*-.1431056"#$%:9<>??Bb�®! *7-(#  ,O  5 3Ÿ\a    õ  (360(.//-0,.ALHIEfǺÅÈÊÇÈÈÇÆÇÇÆÇÆÆC' +»ÅÂ7“À¾¿¼Ä4«ÌÆÇÇÐU ˆÌÉÉÊýÏÎÌÌËÌÊËÎv&ß7 %#"   " ;{u|‡ˆ‚xswvxy|}‚€|€|y{{€ƒ„‹Šs GKEC=$+JKTTVZ\]aejgknnqs„tvuuyˆ{|zRSWOd„ƒˆ �£  *•\ *F"5–Zc­      «&  ("&'$%#*0*/,F¢˜¦¨ª§©¨§¦§Â¦¦8 " )¡¥¢.s£Ÿ¡Ÿ©* Žª¦§§®Brª¨©¨©©«¬««ª«ªª¬b¶) ##' ¶  2b[^ffbXUWUVX][Z^]Z_[WXY_bchl_#£':H835/ 9:@ACBCEFHMKOOQRUUTTW‹]ZW\]Z9853Ihƒfeo}�þ  lC ! n.4       )€•–’§•““–6 ! 'šŽ* W‹‰‰–-}‘Ž‘‘™=Z‘’±‘’‘’”’”“”—Y¤% "   Ä $A;;?<9323//16256625523478;A@:     " #&'&)˜,+*+/.0550236 $",>=?@>BM^�ª/<4,$& 9R2  bÈ3 Ó   2. 14.)*-+*1/=DLB?4eÈ·ÆÇÉÉÈÈÆÅþÃÅL¨8MÒÂ6’À¾»Ã¸%ÊÇÆÈÈÒ[ oÍÉÊÌÇÌÎÍÍÌËËÊÌÏz.Þ=     ! D}w€‰‡~slnrwwyy€ƒ‚€|wz|{€„‰Šp Ÿ  :GHE< !/JLRSXX\Y]adfloqu”qwwuwzy|pGAEIh†…€~yl�Ø!# BP0 !^¶…A     …1(›$"!"!'.1$#K¢—¨¨©©¨§×¦§¨§¦¤8 /D±¢+s¡ŸŸ£œ ®§¦§¨°K _¬©ª©¦ª­¬««­¬«¬­_!·&    ß7d[cgf]RKMQVWWX]`_[^[UY\Y`agiV  9445. #99=>?>BBDGGJOQPOTVUWSUXUW[Z[O.+*.Nihfecb[_�þ    0'  6€N         2’„’””“®’‘‘Ž’’•9*>›)`ŒŠ‹‰#˜ŽŽ‘“žG I’”–’Œ’“”“¬”™šT !       É 1F<>>=6-+,033228963561476=>EA2  !"##&++**+-.02323.0??=>=926�þ# 0=5*" 71&:%v¡ŽD         C/7/#'.++0-0FQD:,^Ê ¶ÆÆÈÆ­ÊÇÅÆÅÇÆÅÅÈR¯• ®ÊBÀ¡=…¸*ÇÅÆÉÉÐj iÍÉÊËÊÍËÍÌþËÉÊÏ~'Ý; *#        #D|yˆˆyopvxuzz~„|zuyvw‡ˆq   8GGCC'+KMRSUX^]_cefmmnlptwut{’xwy{~~i@.2>k†…€~|tT�¨ !  G1.K%i‘B  ­       „8œ! .6'!G¤˜©¨¨§©§¦§Ï¨¦§¦; ‘~ ˜§0 q¡†1j— ­¥¦¨©®M\­¨©ª©¬­®ª«­¬«¬­cµ(&#   †ß5a[cff`UMOTVSWW[^`ZWWRXTU]_egS65431 ;:=;<?CCEJKJNMNKRVXUVZXUW[_]F&(Riiefdb\F�þ   !% 9WO-         &     2’‡‘’‘þ““’‘“‘‘’7~p ‹”/cŒq*Yƒ$Ÿ’”›D R•“”“”““•”“–—˜—Rš         .D;?=A:/+-14123697323/424;¾<CB1    #$%$%+*+(+00-25/01433)3@>=:5%�Ò#$9J:+% )50 eªWWH      þ ! 23,!#/..3)03&/3aͳÉÅÉÉËÇÆÈÇÇÆÇÆÉP§ÖJ8Ç@ÃrX»'ÁÇÆÆÇÐ]}ËÈÈËÌÏÍÌÍÏÌÎËÊÍ„(Ø;&$     ™ &Azw†‡€xssw´y|„…~{wtvyz~…‡ˆt'   &FJGCF0" .JOOQQW]^_gghkn˜ossuvxxz{{|~g5$-5o‚„ƒ~}utf�Ò !) # )>4 vbšW SG      ® G§‘ª¨ª©©§¦§¨§¡; ‰µ>1¥1n£Z :œ £¦§§¨¯Jl«¨¨««­¬¨®¬®¬««iµ-$!  Á 6`W_dd]TMQUSRWV\bb[XUQUUX[degU" )6B<7317:;£?ABEMLNLMMOQVTUVVYVX[]^D#Ufhfdb[YM�ª     Q5[/>D Æ           ³-’‘’“”‘Ž’“’“’6 w¡7-›2_ŽI)‡•“™C a”’’••–•þ–“š˜–•W—        '@7=>?:0-/100256:9531/2117?AB/   $(%&')+*,2*+”/1/23313)3?<><;21,�¨ ;UG1$$ PU`qE#v•4-Ó      10+(()2*&75.9Ag̸ÉÊÉÈÉÈÇŸÊM¦Ê­z<˜Ã²r¦Æ+ ²ÍÈÇÈÑE œÏËÌÎÌÎÍÍËÍËËÐ'ÖA    õ # D{tŠ…wsoswvvx{}‚|{ywuy}€ƒ…ˆu/ ,E@DCC.*KQOTXY^abacglqnnqtrqywvtwy|~S+?.Ax‚|yuf�× &5(   DV`lN$$p@,     ƒš $$*Hª–©¬ª©¨§¥©= „ª‘n7q£”U…¦" •«¨¨ª²;„¬ª«­­««­«¬‘«ª­n²3   ˆŒ  á9cW`jdXQLQUTSUY\^_Z[YWTWY^acg[.  #4=79447=9<@?BDFIJOORPRTWQTZVWSUY\^83 ,[effca_[M�¨    $106%Cf** ©     þ     ,•‘••”“”’‘“‘’’•: p”„m8e‘@k" †—‘“–¢8t–””™™–”–”“”–“—™`š(     ¸)A5=B=50-12/0176774542/338<>B3 ­   #%$$)*++*,/+,10.-2114!,5<;>=<6/(�´ /ED3%$$Jn>L]V_g*Ÿ¨ISs< Ê    10%&#-1557<H@kË ½ÈÉÆÉÇÉÇÊÈœÆK§ÆÒz  ˜ÃÂÊÈÏB vÓÈÇͳ#ÀÌ ÎËÌËÎÍÍÏÎÌËÐ|(Ú* Ô  %J|w‚‰„ywotwuux{|€}}{xvz~ƒ†‹i    .=8CE)*MRTV]a`až`dhmkimorosvvtov{v770M€ƒƒ„€}~‚�ý))KqITj+U`n0“EPk@      #" # %#".+J¥—¨ª¨©þ¦©§¨©¨¨§< „§°g u£¡¦¦«8 g±¨©¯žªª¬®ª©ª¬««®¬­«®d³#     @c\cjd[VNSUTTV]\^_]^[XTX\dfi¦oR +5656"<@<?BEEGFHILLOP—RRSVWVSQV]W$,$9bhgjcceqn�‘   í #E 3%0>nw6AQ*         ,’€“’”“’‘’‘æ’“—< m”Ÿ^ cŽŠ“1 b¢’”˜‹•“–œ•“’•–“——”•˜Z¥"   .C:?C?84.1„02985¨871.47:<AK1    $!#)š+))+,-0//+,.32)$9<=B>=6.,�ú  7LH0!  CN26&Ayh\„¬‚¡ÅzUhSA        0. &!(%&%.+mÇ»ÉÖËÈÉÉÈÉÉÈÉLªÆÈÚ3 !—ÄÂÃÃÊ…˜ÙÙ¹7hÏËÎËÌÌÐÎÍÐÏÐÏÎÏÏw)ß/     œ   Kv‚†ƒ}vqqxwruvx{}|±yxz|~„‡Œc     .B,&JMPSW\\^dcceinpommt“xywvw|i3,(`‚‚{|…z|�Ö %/(  GQ=F>Bxi[~Ÿ“¿~YfN>        ‚—" L¤›¨©‚ª¨©¦¨©¨:‹©©´- x¥£¤¤©p „·¸¡4X¬ª¬««ª¬¬ª­–¬®] ·     Š À <e[bgaZRORSTQRWWY[[^\YUX[_dgnM     )2;¥<>CEDGIJKLPSVOPWXUYYVUX]H!Kfdggacpsw�þ       %1':63LdJ[‡W2L@6           5‘„‘“‘’“þ’””’’”›>w—–¥) cŽ‹”e‡®°¡2P™—–”™“••”˜—™š——™V£         2E:?B;63/.02/043147:820487:BLˆ-Ÿ  " %%&()+--)+.0’1.//2*0;:<@<;,�þ .JH4,"# ,*­~qY¬z}™xb‡”¡n        /2 &!#+"' (+dÊ ¼ÉÉÊɆËËÉÉÊÉÈþËM§ÊÈЩ”ÃÃÀÂÆÄH CHÀÏËÎËÍËÏÐÎÑÐÐÎÍÍÑw'Þ7        "J~w‚†„yqmnxxrwuw}~|z}}wvz~…ˆŠh  ¹    <C/ #HLOUW]ccfeeillrsonxvsvyzxy}g=#:=r‚|{…}a�Ö  -)  .,@9¤|q[¤zzxdˆ†Žši          ‡ž !  M¥¨¨©©ªª¨¨©¦§©©= ‹¬©¬Ž y¥¤¢¤§£:<@¥¬«­©ªª«¬¬®þ¬­«®]º(   =cYdeaUPNOSSNPRTYZ[Z[\UVY_cfkN   64 :99=@DHGJKHLONTWOO\YVY’\ZWZ[F#(&Xffecbaoue�Á   jB=-fF@TE5JJZnV –     Ž     þ  6…“•’‘“’‘“”’’™:zš–˜hˆŒ’“6 :@—™––‘•’•—”˜˜™˜••—Q¤      /@8>@80/,-™10-100157464.156<DD&   ƒ#$#&()',-*)01.010022)589;;:7)�Ù )TE/(($€C#*UWSxcnot‰‚ggK"        ¥ 12& " &*)!$%'/5aʺÉÈÉÉËÉÉÊËÉÏL ¤ÊÍÍÖt ŽÄÃÀÃÅÍÁ< ,¡ÙΊÍÌÌÍÏÎÏÎÐÎÐÏ€'Ù1    I~xƒƒupgmzxryvx~|{}y|zx|}„Œ‹h º !5G1#"MORUY_dceghigkkmpsuvotvwt{{Y84?Cz‚upgzxvtT�à $6'  ()R:@\_^|hpmq‚~igN%        Ø %& #I£—¨§©ªª¨©©¨¨©ªª«;ˆª¬¬²c t¥¥¡¤¦« 2*‰µ­¬¬ªª­«¬®®­­«­®°f», ˆ ß     =cWec]RQJPXTNVUW\ZY[UYYXY]dilR   #2;)=:<?CEHIIMJLLNMPTUXYSXV]Z9##)/`icZTd__eT�þ I$%((DF0628ID12'               3“ ‰”‘“”ž“‘’”’”’’•3 w——˜žX fއ‘–*©$£™–—”“’“––˜˜™••––P¡   ¾   -@6?=3,,'+41,1024463001233=CC'•   ##"$(&'&˜*+./)-/-/2/471/*71+'�à GC3%! n-Py)*U:EpC18M_ptoyµk       š 63(-+)-3.01cÊ »ÈÉÊÈ‚ÊËÊ‘ËÉÍI›ËÊÊÎÌ?+“ÆÅÃÇ­ÎˉRRˆÊØÏÍÍÎÏÐÍÏÎÍÐÏÐÏÐÌÎ'Ü;?$$ Á   O~x‚ƒ|wpgpwssyqt{{zyu|{z}†Š‹j    7%29JTV]^adigkhlntrqqvywxxuL6:BGok^H9ZucmX�Þ( i2I|?,@]NSvQEHR`lonuˆ°l        '' E¥”§¨©«ª©ªª©ºªª¬< {ªª¨­«6&{¦¦¢¦¨©«ªzJFpª´®¬«¬­¬­­¬¬¯¯®«­­®i¶37$ü    <dXcd\UOIQTNMUQSZXWWSZYXZ^dimR    / ,09@@BEIIHELLNMPRVUTTWYXY[U1 &.8^[VF9TeR]N�þ   Q#J"#<# (364>TW            3™ †“‘“–¹“’’–”“•““˜5 i–’’™ 1"m‘Š’‘–™pF?aš¢œ™–˜—•’•——™˜—”—”–Z› Æ     4B9A?5-,'+2--1,05440054556>BF/˜   !#%'&'&',--,),0/2/+**'+6)0$�þ% *ZZD!  dO# !J74@OD^€„‰}ˆppn#        93$,-(&*6,#$bË ¾ÌÉÊÊÉÊÉÉÊËÊÊÉˬ¨ÅËÉËËÍÎÌÊÄÆÅÇÉÉËÎ׳ÙÕÎÎÐÐÍÑÏÎÎÏÐÑÐÐÎÍÍÏz&Øl‰U%$  êR|t€|wnnrtuuwrtzyxyxyxzy{…Љd   !+:TUZ]`cgfflijinoorvvyttysD>49A_XE>:/@N[Q�Ñ$86( aW9&4WIAT^Tcz†z…psq$          Ô  *%H«œ«©ª«ªª¨¨«ª©ª«¬‹¢ªª©¬®®¬ª¥¦¤§ª©©¬³µ´´±®¯¯­¬¯«¬­¤®°¯­¬«®e°WtP%  ë?bZcaZVLNQPPNSRSYWVVWWVYYZajmN     !*2A=?FJHHGIPMPPSRTUXX[XW\T*&#)9SOGB<;GLTL�‰! $#  þ  .; +'&9:B4C5=S#           5¥—“––•“’“”““”—šŠŒþ–””šŸ¢¢—‘‘•”“˜¤¦¥¥ž›œœš™š••—™˜™š•—•˜`“.+      3@9@<53-.-0/.2.25521464688>CD/—  ""&%&œ)&''-,/0,-2110.$# !"&+&�þ  PMB/" N ']b>/?•~^–’x0            F6! ((,0'/;E0+)cÇ ºÊÉÈÉËÊÊÉÊÉÊÊÉÊÍÍÌÊÉÊËþÉÈÇÆÂÈÉÊÉËÎÌÏÏËÍÏÎÏÍÏÎÏÎÏÏÐÑÐÑÎÎÒu2ØdR:+        Wxrƒ~voltwtsvtsxwyyzzx|w~…Š‹a   ¯&2 "7NZYYZ^bdfgijjljmnoptquw|f?93?G`X<*5"',<3�Ž 1+! © J !6a†dA/@ƒ’`Œy0Æ    0'K¥˜«©¨©ª©¨¨©¨©«ª©ªƒ©¨©«‡ª¨¦¤¡§¨©ˆ«­®­ª¬®®¬†«®¬¬«­¯Œ««¯\$°ROD. ‘ ëC[Wb_YRJIQRNQRSRXUUSVWTVT[aflA  $$  )3;>??CCGFHMMLKLNPRTTQXYYC%!,@UN=/3$-/>8�    þ / 0`:2 -ZYK+NOL%     %$        3™ ‚•“•–˜““’‘‘”˜˜™——”–•˜™š’—“Š’“””–››š–™››šþ––“•—–™™••™U#–(          /;7?;98/-/0,,//3532.25355:?DA+    #"!$&'(š''(*,+*,-011)!!%�Ô #UOG9"  *(,*DŠ)       ¤    I9$ *+,2.9FS8:8iÊ ¶ÈËÊ—ËËÍÊËÉÈÌËÌËÊÍÊÊËËÊÉÈÇÅÈÊÎÎÏÏÎÎÌÍÎÏÐÎÐÐÏÒÑþÐÐÎÍÒv,ÙY:%        \{t€…€vmktytxvstvvz{y{zz{‰Š‘U    !T8!%8PWY[^bbcdhigmjmpqoo“swwx|Y=-0@І_3$!1(�²60) ()(18 (+)B…'ˆ‹µ   2"(3!#P¦–ª©««ª©ªª«ªª©©«ª«ª¨§¥£§¨¨©¬¬®®¬¬«¬­†«­®«®®¯­¬®[#±NB. …Ý " L`X`a[RJIQWRXUQSWUWVWWUUZ]hir<    'K/ "-7;?ABFDIHJKJMJNQ”SUWXZY8"!3z‰sY=+!&80�Ô #   ' '&.d!       ¿      3ƒ’”˜™—’”’“’““—–—“‘—“••–”‘Ž‹‘»“–—šš˜—–˜š˜š™˜˜“˜™—˜š—•”—L”!       œ 7>8<;84++03,0,,031…32049D$ ¨  # $&'))%'**)*,./01! FG3#�ÏPOE2%  .?>?B4 @ »?8# $ (8@R`><,iÊ ¹ÉËËÉÊÉÉËËÊÌÊÊËÍÍËÊËÈ˘ÈÉÆÆÉÇÉÊÉËÏÎÍÍÎËÎÎÏÍÏÏÎÏÑ«ÐÏÍÒx&×R&       =áa}p‚…|uhgpuuwxuvxxwvvzyw}ƒ‹ŽO 4? #APYXYacdfacjfeilmptprtuvxH5.,Gª°©”j6+'!#�´33.! $,9LLHAE>‡õ)&)6>#%L¦˜©««ªª©ª««¬«ªª«¬­­«ª«­«ªª¨§¥¦¨¦¨ª©ª®®­®­«­­®¬­¬­¬¯®®°®¯­¯`³I0  ƒ ª; QcTbdXSIFOSTWXUSWUV^\dmp6 ´ :? 7<A>?DHHJIHKKIMQQPURSVXXV.<›—‡va6++(/�³     $-  1 ™   Ñ    $ 6’…“–˜˜•’”’”–“•’•˜š–“•”–•—•‘‹’““•˜˜š›˜–—•™‚–•—®˜š˜™–—O“      3”@B7=<4/%'-0121//3È210.4;?GF  $"&&%('%&*+*+)*+-...m^UB83&�¢FE8(#lI"_ŠnB^'u¦  ‡¢F<0# 25?G)'*_εÊÉÊÊËËÊËÕÌÌÊÊÌÊÊËÊÉÉÊËÊÈÈÆÆÈËËÌËÌÌÍÎÎÒÑÏÌÌÍÓÑÏÐÑÐÑÑÐÏÏÒz(Ü?        â! a}x†„yrijpsv||xx||{xwzxx}~‚‰ŽU   G“(*KOXV\`_ddcchihlpsorutvxzuD0(+I’š–—Ÿ¦Žj7 �¢ ,*#  +lQ0]€‘nPa6ˆx%‚•ˆŒ -$  *1F¬“¬«©ªª©ª«ª’©ª«©©ª¬ªª«ªª¨§¥¦§©«þ­¬­®°°­­««´®¬¯®¬­®¯®­°aµ7    LbYebWPJKOQRY[YTZZYYVWTX[\chn=  C„( '<=A¤@ADEHFFGJJKQUUPSVRVZYS)9~…‚‰‘“€_5#/�¢  ?(*KfB4aS ¨    ‹ ‚þ    2”‚—””•”‘’“•—•“’”––”—–—”•𕒉ޒ”••”—–™š››—“”—£™—™”•˜˜šš™˜P•          ;¡B:?:2,'(-..6641575233/248;CG”;c !$‡%&&%)/0*’,00/(PIBBJOE.�© IG/$YM&.-ˆŒ¯x)9  ¡ ›B?=)( !4( )2_ʶËÈÌÍÏÌÊËþÏÏÐÎÔÑÍÏ×ÌÍÍÎÔÔÈÄÈÑÚÜØÙÜÌÎÍ̺ÁÖÏг‡ÁÐÏÐÐÑÒÐÎÎÒq,â4      ! dzv†~rknntw}vy}yy|yzwv|}…‰ŽP ›  Z0  DQTUXabd‡iikmlkpu”xuv|}tC(#*Oƒ†‹‘˜Š•‡["�© 1. TO#/92|‚¢xAF &!# †— «.(( "!"Gª“«ªª«¬ª™«®°®±¯«®´«ªª¬»²§£§ºÈÇÇļ­¬´¢ª´®®˜v ¬®­­®¯¯­«°Z!»-   ç Q^Vd`[MJNNQUZ^VWZVW[WVWXY\dhp:    P. 5<>?CHGHHFJKMLKOSXWVZSVYYR*8glr|‚my€vV,�©   >AGMnA!  þ      -’x•’’•–’‘‘“——˜œ™ž–› —•–›±ž‰®¿Á¾»­–—˜”“ ¡•”ƒpŒ–˜”•˜™™–•šRŸ  °   7=6@96+(*,/.6:4‚342Ž7;BH—2  %#$$!"')(˜-/,+.+-12.%:8>BH1<A:+�zkzwWI10!([%  RQ[i‡M …„‘… ÕDDHC(  131;+06@aÅ»ÊÉÊËÎÍÊË˾©¢œ˜’¡Í³s±ÌÍÊIÈÆ½6!qÑÏÎÌF»ÏÑr¨ÑÒСÎÐÓp.Ý0     ²& n{x††~vlnosw|}y|}{{yyzyy~‡‹Œ? ²lHJUPW^bafcfhlmpnqqsvutuxxq6 0^‰†…ƒ†¢•R3�¥zksf=0  N& $%PVZdƒZ „‡ ¦1-.3" '$"$*J¡˜«ª­«¬ª«© ••“Ž…‹«™k—©ª¨Bj§¦Ÿ0e°®®©:Ÿ¬­_ Œ®¯¯®­®¯W%µ'  Ž Ÿ #U`ZecZRJMNOU[ZVYZYXZYZ[^dkm, ²` :7><CHIFGIJKNPRQQTTWXTVWWP$#HkkghicmˆƒR9�¥uccL+#  7 %),>Y1 „„†‡« /€•’“””“’Í•–Œ|”‰d‡’–•?\‡+]šš™“3”•–R z›™š›š˜—–—œQ!ž"     ë !;=;B=6/)*+.057565465634457;DE A  $%"$#$'+*,(+.)+,++-0.+?=:;<7<VP'�¤»U ½œTU87&œ‚k@044+.3 ¦  …ÃKBG>  1A9D4110WÌ»ÈÊÌÇÌÍËÊÏ€ KÊŽšÌËÍ-xÈÇÂ/)RW)›ÏËÐJ oÚÒ„´ÏþÑÏÑÐÍÐÕp1Ü*     $ mzy‚ƒ€xmptuwy|x|~yzuwyzx{|ŠC '– IHRHQ\_cgbcgljnorou•txy{}|d:*(,tˆ…‡†‚~x_T.�ž±U ¶Œ97!" yh;7B@/-5‚ˆ™‡ï5*-2  &.%)E¨šªª¬¨¬®ª©¬j =§x©©¨ a¨¦¡%%KP% …¯¬ª7aµ­g•¬®¯¯­°®¬®°V)·#  ª! [^[b`\UKQTPRXYUZ^XUUXYWV[\`hl,º #ƒ :7?9?EGIKIIKNONORRTVXX\\[E&#[kfjkgeb^ML5�•M ¨q)( q]b‘'' ‹•‰þ  4’ƒ““—“””’’–Z /jq“•’U’… AD" s›–”3Z –W‚™—™š—™™––L&£         <¦<>B;41,0//0565773515523348AD²a   $$%$"&)**&+,**.1011'7@=>?@=63'%�¥i %EJ;2+8C EX, ŒþRGD: 5AF@-1.(OË ¹ÊËËÌËÌËÌʪŠqÃÁÓ¢#ÎËÔ9zËÉÉ3uæäÚ@UËËÓOµÕ‹®ÑÏÑÒÐÒÑÐÏÕs2Ú3!ö  (o||„€~tmpyyxyzwz{ywvvxx}}|ˆC C5#1CC;Xa`hfghlknqpquxyxxyyV2$*7…„ƒ‚~~voc]�¥e $,-$ 9= D\6 Œ‰ …‚Ò8..+ (--' ?¥œ©ªª«ª¬©ª©||d¬¥°†~ª©¬&a©§¤&f¾¼·.I««­< ›²kŽ®­°°®¯®Œ³Y'µ#      ¤" ]`^c^[QOSXVRUXUY\WSUVÅ\^\]go*A*  +7:4?JGKKJKONMOQSSYWWZZY8(dfdcdadbYUPR�¥[    +%. Œþ   0‘‘•—˜——’”’~ux _ŸŽ—rn—•”%W”‘^´²®+=–••1 Ž™V|™–˜—•˜š—– M"œÍ      G>>B84.+/331335532/04317658@F‚‡1¡ $#&&#&*)((*.0--122,;=8„960.),� GF;3+ J!  ÷ OK@$ 2-+2/23-PϼÌËËÍËÌÊÍËÏÓljÚÒѤ'žÌËÔ1tÊÉÊ8o×ÏÙFYËÌÑO']Û±ÑÐÒÐÐÒÐÑÎÓm-á2¿    $p|{‡yutosvtwzy{|tzyxtt}~~ƒ†ŽC§  G  &?^__deijijqsnquwz‘xyU1%,B‚…„„‚ƒ€{spfz�¡ .,( H#ƒ‰‚ …‰…Ë62. & "@¨›«ªª«ª«©«ª­±¥m´¯¯ˆ}©©­#]¨§§*]¶±½6I©«¯? T¸t‘¯­¯®¯­°X$¾&˜      Z`]f^WRVRTTPUYXY[SXYVRS\_^`el+ D  )7BFFGJL›KRQPRRWYYZWX80feeddec^WUOg�¹   4   † ô  -œ ˆ‘””••–‘””˜œf¡˜–rl”•–S“‘#V§Ÿ­4>••–3!N¤W˜–—–—š™˜—L¢‡  È  D@=@7410.0.-16722.013//757<?D1©  #$&'%&&(**)*.,/021.  =;889=:5-.+:� ^RE2*  ³           „¡!PJ;# )#(-)220W͹ÌÍËËÌÎÅÍÌ˼~ÐÌÎ¥*£ÌÌÔ/vÌÉÄ1G‹…S˜ÏÌÐOrv½°ÒÑÑÒÑÓÏÒÐÖm/ß& ñ   t‰}zxwqrqvxyy€{{|{xx}}~‡‹‘?   #  C^abegiklpoqmnrwzz}zv6'0W…ƒ„†„{vkga�Á A4.         ‰‚‚¥70,!   @§•«¬ª©«®¬«ªh­¬­Š|©«°$^¨’*E‚~P}¬«¯>]b¡t‘¯‘°®°®±['¸ „ñ  \bag[XUVOPORVXW_^WZZYVW\^_fkr-  $  #5DDEHLMMNNRSOQQUZZ]YT#Ahccfife_^WQM�Ó ("            ƒË!   *™“–‘‘•˜••˜•’ŒZ•”—xk‘•™"S‘%D~Om˜–™4[[“a}–˜”™œ›˜™žR$¨„    @C@B7730+•/24265234302669BGJŠ ˆ !!#&(&›*),(&),0032.*=84<?@A5--.(�' OK>+”+3  *     ƒ š      Ê!QG4  %*392;91ZϸÊÉËÌËËÎÍÍÌ˺„ÑËÍž&£ÌËÐ1}ËÈÁ0*pÔÌÌÐJqÃT³ÒÐÏÑ›ÐÎÍÔj8Ü(ƒ è  {}}…zxzvuw}~|{€‚~||{yx~~|…ˆ2 3T\^bddelonopprtzvuzzh1 .cƒ……‚kSD=?�¬$ 1.' )6  &   ¶    4,& #$"!B¦•ªÉ««­¬ª«ª«šl­ª«„„ªª­#a¨§¦&! a±«¬­9W¢Iy“¯¯­­®¯¯®«¯S*³ ‚‚š b__e^WUWSRSZYZY]_ZZXWSV[Âbjo   ,<ACEFGGLNMQRNPRYXUYXFLccadfcaVMD83�   “+  Ó             -—‚”•’”–½“–••[•’—vv“’–$RŽŽ‘'V˜˜—4Q‘Hr|—˜—–™››––šK(¤ƒ… ‚ ¤C@?C;520.,.55438:631122465>GG ¸  !"$$#&('()'()-.-11%.974<<88, �þ PQE-%$'   */  0         !PF1#"9886=44V̺ËÊÌÍþÌÍÍÌËË̼ŽÑÌϘ)¦ÊËÖ5ÌÇÅ3d¿•¦ØÍÎÎGkàs&L'¹ÏÑÐÑÏÑÑÏÏÖd6Ý,       |{‚€wvx~}€‚‚‚€€~|€~¢ƒˆ—6      ) !(P\^ddhlqppqsxu{yy|zW2"&8n‚‚†ˆxI9%)�  03)Ê&- -           Û 6,   %!!F¨˜¬©ª¬«¬¬«ªª«›u­ª­~†¨ª°%dª¥¥'T¢€ ‰´¬¬ª6Vº`8™­®­®­¯°¯­±N.´‡ˆ„‘f_\a\ZUTU\Z]«^Y]ZZXW[[Z`ht   =ABGFžIKNNPRPSUZVUYW7&Vcbcdgb\HD4%)�Ü  #     )     É  2’ƒ’”•–”•—”“”˜b–•›qr‘‘™%WŒ#M›x  ˜–”1K£S6„˜§™•šœššœA'¡    Ç K?=B92101338968;<643584564=FI   "$'(™))*+.-.3218579>4,�þ CH9&!  .              NB!)+*(,& PÏ ºÊÌÌÎþÍÎÎÌËË̼!ŠÎÎТ$¬ËËÖ3yÌÉÅ9vÖÙ%BÚÍÎÐLkÖÉ0µÎÐÑÒÑÐÑÑÐÕj5Ý.           |tx|}{rmw{}{€|~€€‚ƒ|„„ƒ‡•;     &%!$AU^cefklkspstvzw|y}€yY/#+D{„ƒ„ˆ†\Flssp�Ø  *,  +          …Å5, B¨˜««¬¬ª­¬««©ª™o¬¬®ˆ‹ª©¯%cª§£)a±´<¸¬­¬8V±¨# –¬®¡¯°°³S-¸# ì bWYYZXSLUX[X\ZXY\Y\\^]V][__fr&   7?CFHDIKMRQSTSXY[VY^S73afbdhf`JLhhjc�û                 3’ †’˜Ñ••“•“–ŠZ–—šy|‘™!VŽ‹#Ušž9¨—––1Lš…––˜˜•˜š›™›C'Ÿ    „ ¤E7:530-+235153367553982768;@E Œ‘  !$!&&()()—*//-041896688/(+0,�þ  <>8/"   7N2d(!         !M6  )80#)-.MϹÌÌÊÌÑÍÏÎÎÌÌÎÃ#…ÐÍÑ© ÑÎÎ*€ÎÊÇ>uÏÚjÁÐÏÔLh×Ú†´ÎÒÐÒÑÒÑÑÐ×l3Þ0    ì flqmgbghkssuywv{z|€ƒ€~…†„Š”4 "+E^`dfghnpqqsuy{|x}€tP-%I‚„…†……„oj•™“Œ�Ø &#!    6Q/\.&+         ƒ ž7*  &! @ª˜®¬«¬«¬«¥ o®¬®‡°¬±!g¬©¨,\«¶Z¦®®°;T³µo ”­°¯‘°¯¯³W(¹#† ‚„ àLOSNGDIGJOOSWSTXXZ^`_[[a\bajr# +:CDIHKMQOORSV[]\WZ`O.7gfefeedXa„†{s�þ    ",?           #   /‰˜˜–—È––•˜•’”Œ`˜˜™zœ•¢ [–*U“N—š™™2L¡` †š˜–™™›š˜“›G(  ‚ ¬ 025+%"&(*-,,0./01364643<6<>AD…‡ ¦  ##'(*())(*,30-03+":864640%@><>�à  DCC<"! )?3-YjbSZ+%]$!6"          í 'E% -2+'6:1LÍ »ËÊÌÍÌÎÏÏÎÍÎÁ…ÓÍÐÊAËÈc ¦ÌËÊ9uÐϪ †ÓÏÒJdÖÎÃ-³ÐÒÑÒÐÓÒÎÐÕg8Ý'   ˆ Þ{y|od\_eaghoqnmuvvy}}{x{{„†ˆ’)  $M`cdfhjprtrqrwwyy{{i/( Vƒƒ„……„ŠŽ–³´­¹�þ  0''"  ,(I=1Zc_TS,)_( #8             3 '$;ª•¬ª«­«««¬­««¬žh®¬®«>±®`‹ªª©+^­­Œp°®°;Q±«¥(‘®°£¯°¯­®±W+·  † ¥a]\MD?>C?CCKPKJRSUWZ[XWXWachs# ‚¯ '=ECGJLMRPPSQQYXYYXZJBfeegfeksƒš™™�þ    % 183+2 4        #  ,‚˜–“—Ó•”–™–”•Z›™™–<ª¤`{•““'R—–€cœš›4H—•$ „›š›œ˜–•šJ(¢  ˆ ÞC==,$!"&#$&),*,.001342055??AJ   !"#&))**+**),00/11$ )<986:5:7H[VYk�þ 6:,)"#   <>=PZ0;.„O "         1 :A41<B%XѽÎËËÌ‚ÍÌÍ©Îκ†ÐÎÎÔ !}ÓËÌ¿;uÏÏÆE_ÉÐÊRtÒÐÙ‹S½ÏÑÐÓÒÅÐÐÖeCÝ6      zv}ma[\dcecbdfhnpuxÇsquwzy{€*   !!+V]abegjopstrpuwz{wx`7.&&m‚……‡……ˆŠ£·–w�  #  é=& 9uAN\0:,wO$           " #(&-Aª™­ª«‚ªª«¥˜k®­®±oh¯ª©Ÿ,^«­¥9H¥®©E]­­³qC›®¯°š®®¯±O1¶% … ¸ ^X_LB88A@B@@BCCKMRTVTSQQRVWYZ ® %@?CEFJLONQROMVWYXTU?Qbcfdeegmqˆ™y`�þ    % K!$5#J5            4š~š““•»”“”–••“‡]™˜šœ_Z™’“Š)O”š–28Ž™’;O™™¢c6†›œ›œ˜˜™žL1¥*•  ·  A;?+"$#%""$%'*,.0110.105349°   !%''*)*))(--0--.!398<9;8;<?ScJ7�ñ  9:2-$   " Q))*'1F.r5<(:=        (B2 8;2Ë)RÉ ÀÎËÏÎÍÎÍÌËÍ;_ ÐÍËÎÙ«wu¥ÙÏËÌɳÂÐÐÒÍÈÎÎÏÏÔÐÒÓÚßÒÎÑÑÒÒÑÑÏÐ×Y=Ù*™$ ß {ylc[[bcbd[^behnsyvwqpuuvz€ŒH5   ;Y_cdefiknqvssvw{|yvR8%6ƒ†…††€}z~wpn�Ž$! Æ " L)01)4G1n 45$04       ¬ 0' &&B£¬ª®­¬««ª«¬«žQ…­Ð¬´dcŒ´«ªª¥’Ÿ¬¯¯ª¦«­­¬°­¯°³¹°®±°±¯®®¯°³H2²     š`Y`HC77@@CD><@CGMQTRSPQRÂV[e.  2BBGHGILKMOUPOUWYYWS2&ccbebdfba^a\VS�Á   < #F !+     þ          1‹ƒ–•˜—–•““•”’ŠBq˜™š™¢WW –““ƒŒ–œ›˜‰‘––˜˜™ £šš›˜›™™—™š¡>-¤ ¨  @:?*$#$ ! #"&*+0/1/-0,.36@­!"#$%&'(*((,,/,-->:597:;54152,-�Ú3*-."% $ ,84 ) 3")       •!4  )-ˆTÌ ¼ÍÍÎ͇ÌÍÍÌÐÙÓÍ™ÎÐÐßßÒÌÍËËÍÑÑÏÐÏÒÑÏÎÏÎÒÑÑÓ™ÐÑÏÒÑÑÒÑÎÐÙZ9Ù,    yykc\[__\bWYadhoruvvsrssu}~€A0¶"6QY^begehjorwsvqtzwzsV99ƒƒ‰…„„~yxvsm�ß"   $ .;%>(&+ *%           ˜* !D¨œ­§¬¬®¬¬­«­µ±­¯®®°°¸¸¯«¬ªª­°¯­®®±±¯­¯®°¯°¯°‘¯¯°®®°¶C3²" Ž  Š  ¥bZbJE<:=?@C=;@BGMQRRSROPQSY[^.*³"/@BDIJLLMLQQWSTRUXVYP8"/cbcgcbcba[YVWR�  ˆþ   %            7Œ…–š™˜˜™˜••”“˜š™œ›šœš ¥—˜—””—™š™š™œšš—–™›™—›š™˜–Ø™™—™š£7-ž   <9A-'"!$!!%,-/0//,/,/665 ”  !##$%œ))*(+*-1,0+ ;57;678650/0.+�˜?84/%æ  !C7           #5 !""+-O϶ÊÍÎÌËËÍÎÌŽÏÑÎÎÐÎÎÐÊÍÍÎÌËÌχÎÐÎÎÏÎÐÑŠÐÐÑÑÐÑÒÑÏÒѤ×\6Ú3    Ÿ|v}j\X]X^Y_UT\fklsuwsr‰or{€@¸  5XY]dbedejomwrwtvyuwiC3($Gƒ„†…‚‚€{z{wso�Ž&# ‚¿  (E;           ˜)   ?«˜¬š­««­¯ª¬¬­¯­¯°­­®¬­««ª¬©«¬¬­†¬¯®¯¯­¯™¬¯®®¯°¯®®¯­¯¯³G.µ%  Š´   aW^I=8=8><?67<BIHQRTPNLNJPY^_+ “  '=?BIFJIOMVSVUWWTVE(9cbcdcaba][ZXVS�‘  „þ                3Ž„”—–˜•˜™™’–•™™˜™œ—–—”——–•–‘’•–””—ç”™š›—”™˜™›–›˜—•””–”—•™š 9+    =7<,#!"!"')-0/-/+,),497 £ $#$$#%)%+(/,.-+-$#859;7598420/.+�‚ Š*3;4,'% ¤MwP     ¾       !) -53)15 SÐ »ÉÌËË̓ÏÎÏЉÏÏÐÏÏÎÍÏÏ̉ÎÍÏÎÏÏÐÒÎÐ…ÑÏÐÒÐÒ„ÑÒÑÑÓ‘ÑÒÙe?Ý4  û       {‚dXX[X]\YWT^ijsttutpoqno|€†9'!&IYZ\aaeiknprwrwvw|wud7),0cƒƒ…ƒ„ƒ}}|yst�“$ þEiN           ! !"!?©—«¬«¬ªª¬¬ª¬®­¯®®¯®¬«­­«¬ª¬ª«­¯¨­­¬­®¬®­¬­¯¯°®®¯¯°°®®°¯°¯®´F2µ&   ˜      à f]dE87=:><:69>FHPPOOMJMPMOX]b* 4;@BACIKLKORVQVTW[WS?H`cbbacd`_^\WTV�ž   þ%=1               /“‡’•’–”“™˜’•”™›™™š™–˜–——˜“•‘’•™””“’˜š™•”—˜™›˜›—–™—”—˜—™Œ¡;,Ÿ   þ        A;?%!$$+,-+-,*)(*36;   %%#%(&)(,),-++! (565947;54310,-�½. 1?4, ‚.  5j    É        %5&  8:8',/^Í ÀËÎÎÌÎÍÌÍÎÐÏÏÑÏÐσÎÏÌ΂ÌÌÍ‹ÌÌÏÏÒÐÐÏÐÑÑÒ†ÑÑÒÒÓÓÒþÛZHÛ,          }y‚`YQ[X^]VOR]hmrttrponqjp|‹    "$5RVU_abfjlpmpqqstvzxoJ60&2t€‚ƒ†ƒ…„‚~}€{yq�þ/ $   v5 >f         +% $'* K¦𬮬«¦«ª¬«¬­«®¯®®¯¯®¬­««¬¬ª««¬®¬ª¬«®¯®­®¯°°±¯ƒ°¯¯°£¯®¶G5µ$       ç   b\eC96><@=729=EHNQNNLKKOLQZ^g  *<<=CEFJLLRMPQQRQV[WL,#Waabcbfea`__YWR�•   ð W"  P             2„’˜•—”‘””“•’šš–™†›™•”–”“ˆ•—•”“”šœ–Ÿ—š›™››••™–——›š›™˜¥:,›   Ê         @:?#"%')./+**')%+44>¯ %%#''&(')(+-)' 3675648954453/-�þ>9=/*"  (¨Š        #7 #**-%($XÎ ¿ÊÌÌÎþÎÍÌÍÌÐÏÎÐÑÑÒÏÐÏÍÎÚÛÔÏÌÍÎÍØÝÓÏÑÕàØÏÐÑÓÔÑÓÒÒÐÑÓÓÔÓÑÑÒÛVG×*       ƒyƒcYUWUZ]SLT[fnrrqonrtqkqµ{ƒ   -XVUX]`dfhknonqqxvuy{kH02/D„Š……ƒ„‡‚{ys�ý? $$(    .&š…*            , #Jª›¬«ª­‹®¬­®¬¯°®®¯¯®“¬´µ°««¬¬®¶¸®¯®³Â¸¯¯°™®¯°°­¯±²±±°°¯¶D9°"  ¦         h\eD9Ô?=63;>EJNNLPMMPPMSZ`h   &C?=?CFIILNRONQSWUVXYI+5cddcbadhdc`aZYW�¿+     e\ û            1“‹–••—”“””•—“—•—™˜••šš•£¥ž•””—•¢¨—˜šŸ±¥–•›œ—œœ—”—˜š›œ™— :/˜           F;A&   &*+,-,*,+*&,48>¹ #$%$())((+*+,*%;997335;9747212�·#$%'   A% ‡ºT É  E   ,I42)RÏ ¿ÊÍÎÌÌÍÌËÎÏÑþÒÒÑÏÏÍÕÃŽ·×ÌÌÎÏ¢vÇÐЫ=ÒÐÑÒÑÑÒÓÓÑÓÒÓÓÑÐÒÒÙXHÔ-       %ƒzaXXQUXZPLT_bhnstonqpplr| ¹ BlC"  ASXYZ^abhigjpmouvwvzyp:%08c„†‡„‡‡ƒ…ƒ‚~yt�##   Ö8% ²b     :    1 Eª«…¬¬¯®¬®š°¯­¯¯®®«±§~³«ª¬®‰i¨¯­Ž6„°‡¯­®¯±±®¯£°¯¯±°µA7¬!         Í    "hZa>6838<=306>@FKPPOILNNJU]_X  7Y7' 2>@@AEDEJKœNPQTUVTVXM"#Iceebed`dfdb__YS�‚’ -! f~/   þ )    6™Š˜–••–˜–”˜™••˜™™–•“”Ÿ“vv” “—˜yc˜™™|1q—˜›”˜šš•˜™˜™š™™˜–ž=1—   …   ¦     G9?$"#'*./+*,*‡/68/‘ , ‹#&&%&)('*+”.++89<8763;=;76632�¡  )0%  $ >Ÿ ZI   ¾  CT="*$0K    6.G-88QÒ ºËÎÍÎÍÎÌÌÏÎÑЛÑÐÐÍÒÆ-%¦ÑËÎÓq †ÖѲ!œÐÐÏÐÒþÓÓÐÒÓÒÐÒÒÑÑÙZJÚ.      , „{`URQU[\PNVbhksvprponqlr|ƒƒ7HU$9RZ\]_dbhgimnošpvutw|zh<"#6o‚…„ˆ‰††‡††~{x�œ  %  ;‚ä  UK+     BS<"+&0H     '. (E±œ¬®«¬­¯®¬¯®¯°¯®°™®°©)!°ª­¯[ v´®’ƒ¯°¯®±°ƒ¯¯°¯­°±°µ@:±        Ú*i]b>510:=;2/8AEJPRMRMKMPLT]a\  2EF! *>DABFHHJJKNNSTUTUVZXF% Ubedhhedgƒb``\V�  Š # â  D/   ?M6 )&8     4“‡—™””˜™™•˜——•™ùš—•š›"ˆ˜–™Lj›–vr—˜š˜—™™—–›˜–˜˜—˜—™ 44š     %G:A$! $').1,-++))+039.¹   !#'&%&'(),,++.0(08<=@;67<<?:7943�þ 4) #      /ˆÇ·¹©¢jE "'&/%E24+PÍ ¿ÌÊËÍÌ¢ÍËÎÌÐÑÎÐËÍÐÍJ1¤¹>"ÏËÍÓxÏг%ÐÏÏзÓÑÒÑÒÑÑÐþÜPAÖ1        , *€{XRMNTXXMNVbgmqsqrolrqktw}r' (.>&$OpRST__defgensnqpoqwvnE<*-Iz}‚„……†„…ƒ„{|w�ž   " Š–      Ü    *}¹««—fF !1 , A¬®­«¬¬®®­­¬¬°²­­®®¯°@(‘¡4­«¬¯_¯®”¯°¯¯®¯°°¯°±±¯®¯¯·A7°"       â( "g^a74.+696-17CFJMOKONJOQKVY]R #*< BV=<:BCIHHIJNRQSQOSUTL*$3^``cedcceedab^_Z�Ž   “     þ   ^‚yie;'     0‰™™•””—˜—”••šœ—˜™–˜œ:$ƒ•2™“—Q ”|wš˜šœ•—–™˜™™žŸ™˜››¥:0—   ¬      % F@B!!&'*.-+¾)*(+25:)   *""%%"'*'*)'),-'57<<;8†;<?;;556�ë !10&"  }         (bL6E]^UEM6 _&  º*30E:2'RËÀËÉÌÍÍÌÌÎÎÏÎÏÏÐÏÏÍ϶ ™ÙÙ£ªÍÌÎ~ Õ°(žÏÐÐÎÑÐÑÒÑÐÌÑÑÒÑÑÚMJÕ-     1 0€{{[NOPQXUMLW^dmnpqsonlÃnt€r)  / 9!817\OUU\^bcfgenonoqmrtu`40"+Q}~€……†ƒ†‚€{}z�   l  à      $\I4DX]UGL9 _% *! @¥š­ªª¬¬«¬¯˜¬¬­¯™´³Š‘­ª«` n³‘®¯š®¯¯®¯®®°°±°°¯¯µ=9°!   ”      „ ˆ+%e]X8.271//5=CKJMKNMMIÃMR]P ' 3 )"*F6<9@?EEGIJLNMNOLTST?9__Z^debcedcba^_[�ò   H        KB.(3/*"( 8  þ 0• ‡–••–•–“—”——š––š–˜’u¤¢ €•‘•[ f›€rœ™›š˜˜—™˜™™› œžœ¦83ž"      ( D<; $&+,Ë*+,+(%&),1:'    "!$$ &(&('$*++#785588:7<<;<9579�þ"564-'* 1c        DWku?33  51=9-/)WÉÀÉÌË˰ÌÌËÍÎÌÎÎÌÍÏÑÌÑ•àÊÍÅ wÐËÐs4Q ·´&žÐÎÏÑÐÏÐÒÎÐÒÏÐÐÑÐêÝNUÑ'    / :zyv[LMLQXRMLTZannqnqmroqmqtv" 0,* !$$+;TSV[c ijhlporpptwwV6$/n€ƒ„ƒ„~€}|€�û   0[        GVhq@5<  $" F¢ ª¬««­«­¬«­­®­°| ¿ª­£e®«­`(B“­«®®«¬­¯¬­°®¯®¯Ü®·:A©         ')^ZT://-16/1127@LMPKMLPJKKQR^U & !" "/<=<?DDGJKPNONOUUW8!S`‹_ambddcaa`\\`�Ç :    ˜   ):J*! ‰ â 1Œˆ‘••˜š•“˜”——š––—™•šn­•—”W˜“—Y#6Œ‚q™•™”’”’™•“—˜™šš™›š¥38›         š  # 983$+·(*)*((),.8.   !$$ #)&'%$)+)153535=87887::458�¡52,')- 5 Î      }9    14@=/54[Ê ¾ËËÌËÎÍÂÌÌÍÏÎÎÍÐÏÕ‚åÌÊÁ-_ÑËÑu@² o¿&œÏÎÏÎÐÎÑÑÏÑÒÑÑÐÒÑÐÐÛKVÐ/$  … î    08}yx\NGKUYSFISX_giooqlkookqvƒs+"0-(   &(0HQVU\cchiikkoppqqvyrV;)#2{~„„‚‡„‚„‚€€}|�¡!" 5œ  Œ   Ëp6    !(%% L£›¬­®®¯¬®¬¬­­¬¬­­¯­±m¿¬«ž P¯ª®^1— `™­«°­®þ¯°°¯­¯°¯¯¶9B§"        (0aZX>4/.783+187?HIMMOMKJKIPUbP!("    !"5=?=AFFHJLKMQRRP˜QVWT8#^`acbbgcbeeb`a`_�™      ¸     ûI&    7ŠŠ’”–˜™”••“–•™˜š˜™–_ «–•ŒG—‘•U+‰ [’r—”˜•”“˜——˜š˜–™™˜™¥07•    …  µ##?72"''))*(()''*29+ Š!$#"œ(*)'&)+*63375275599898568�þ%*'!(/ $.:             84;@496,tÉ¿ÊÌÎ̉ÏÍÎÏÎÍÎÑÐÏŸÎÔ| âÍÍÇ=XÒÍÒv9ÚW#¥-ÐÏÏÐÑÑÏÑÐÒÑñÏÑÐÐÎÚMMÎ)      +7~{u_SFISSPGJTX\`fmlqmklljrx|j&#(()  "#&=R][\aehjlnmnrvwwkE/!'Bƒ€ƒ……„…†…„€€~�› % /7 Ý           %!%'$#c¥ª¬­®¯†®­®®­¯®—¬°c½«¬¤.J¯«¯_.´Kˆ#‚®«¯¬®¯’­®¯®­¶;A¨…õ    $,`]XB;.0985-297=ADJKNLKHIIQT\M"$!%"( +=CABBGFILKNPPQRVUWJ%/facfcdfddeccac`b`�¢  "þ             A‹‹’•—š˜•“•–”’—–—•™˜œS©”–&A˜“—T&§A|tš•š˜˜–‘˜–˜é—šš”–™˜–Ÿ.7   %@:0! #((+))(('-33  © !$#"!"(**')),( 948:4264488;8:57;�þ %+&"" YL           <=?D14;?sϽËÍÍ˨ÏÏÌÎÏÏÍÎÏÏÐÐÏÔ‡ÞÎÌÊ=nÑÌÑ}8ȶ*9!ŸÑÏÐÐÑÏÑÒƒÑÏÐÑ¥ÐÛHNË"   $! ×  "(?{{y^RJMTXNKQX]^bemkqqolkkpu~l!$!,* # !#<SY[X`efilollpqqv|yW7"$$R„Œ‡†…ˆ‰‰‡ˆ†„€~�  QN“•    Œ £  &#%)!*9_««¬­¬®¯­ƒ®­¬®û­°p »¬ª§-Z±¬®b.¨š#(‚®«®¯¯­­¯°®¯®¯¯®¯¯­·7>§     ".`^Z@7..5=506:;=@CJHMOLFHLPT\P!"%(— ,>CA@AFFJN”OQRWZX8 ;gddhefhfh„fcea`]�…¶   *)  é       @’‹’•—˜˜™•—˜”“””“•˜™že ©—•‘#N˜•“S'“ˆ#w™–™˜—–”––™˜™®—™šš£-:”     §"=:7!!$*(,-*()*.16% ¬   #%'%%'*)()..%:66977:86<>>:<8�˜ +51&*& &OP  ‰ƒ  ¸"-:?<  (>169+/" YÏ¿ÊÌ£ÍÎÍÐÐÏÍÍÎÎÏÎÍÑž ÎÑÏÅ™ÎËÎ6ÆÖm¡ÏÐÏþÑÑÐÒÑÑÐÐÏÐÑÒÏÛFNÊ*)-/8!     FyzZPKNVXPNM[\dhmosurnljhova &-  ,!!3PQ[Zbdfhhnm‘mnnmqts?$"g……ˆ‡ˆˆˆ††„ƒƒ~€�˜  $GN ‡“    ·"'/0/   & " K«œª¬ƒ®®¬®¤­¬®¯®°­°ƒ®°­¤€®¬­c*¥³] €­®­®¯®®¯°¯˜®¯®°¯·7@¨ )) “   §  5]`Z:0+,6<614=9CEJJMPOKGFIMU]K š  *<<?@DFIJLONM™NQRU(Kd`dhdffggedce`a`_�˜    #.  ‰ þ     !%#    7’ Ž“—™™š–™˜––’–•–˜šžvœœ›œn–””W&“›N u•–—–——Ú”•˜—˜›š™™–œ¦,:•        #==8   $&,+,/-))((+18"† – #!#%&'&'™%'*-/:349;=:<9;<><889�þ &31*'&! , :ERR\[e^``_ZYYWQLHAI[   3 %':?09' XÆÂÌÌËÌ„ÍÌÑÐÏ£ÍÎÏÏÎÌθ |Øß~ÆÎÍÐy8ÈÑÈ&¢ÐÏÑÎÑÏÐÑÓÑÒÑŽÐÛ>PÍCB?SMF éM}{uWWLRWUOLMYX_ijrsvrpjhjsu€W" (    ;J% +SV_]afklkkmpmpoqrb85*2@Ž…‚„†ˆ„„ƒƒ€~�  *„ŠÏ 0AKOVW``ecgnmmcaSNJMX $ &'$ F¥ Ÿ¬¨«®­®®­­®¬¯¯­¯¬¯˜i¼¾o£­­®`-§¯¥¯®¯¬­­¯‚°°¯—°¶4C¨488F==… ë =a\W64,177425:9>DGNNPNLHHIOS^C"    53 #?>BCEJOKKLNQNOOQSD% "5n€}wf_bddbdbca_`a`�”  þ    );<;@>FRQS[]_ZXWJD??Q      4‹‰”——˜›™—š—–™’”——™š›‰\µ·o ‘›»—•V%’˜‘ o—™›—˜•‘˜˜•˜š›™–—œœ¤&; ë)@96#)+,,--+''(,.8     ##%$&&%(&(')+##QfbT:59:;58;=96567�¢ +0+$%"&  …ó   )C   @   141 &!-51@& aÈÅÊËÌÍÍËÐÏÐÏÐÐÑÑÏÏÍÎÐ\ZSnÕÏÏÓv9ÇÏ×t™ÎÏÑÐÑþÒÑÑÒÑÒÑÏÛ<V»TC6"    P{zvZWQSTSNON[\bfjoprqofeiu{‚[$&!   +HG&!%4OR^bbaeljlponopq‘qQ9::,±èöõïȆ…„ƒ€�­ ª  &G3)01#""($!&)0/0,+0-@ £('#   ) R£ ¡ª«¬¬­¬®­®®¯®¬®­®®NTK]±¬®±]-¥®´`}­®ˆ­­°°¯¯°°¯°·0F—C=4‡ñ?][V851365043<=@CHLLMLKDGFQZ_C$&  (41%:<DGEGJLJKNQOPPQQ5)& ¢ÜèçܨgZbaabccb__a�‡ ˜    þ  7%"%$ !<       ;‹Š“””•™™—˜˜•˜•––•œš™œGRHOœš˜šT"˜ŸSj—šš™§˜˜—™—˜˜™™•—›™¥';w  ‚  -864$')•*--%&'.28 ‘   ! !%')'())*œÓßØÌ‡=18545:;9446�¨ +21+.'+   ²   )E6D##LY6i^]pH/…D?Â0:5'!& A97@5J$]È ÁÌËÎÍÐÏÎÏÏÍÐÐÏÏÑÒÑÎÑÎa/4}ÖÐÎÏÏ…ÌÍÑÅ’¼ÍÏÑÐψÑÑÐÒÑÒÑÐÏþÜ>_¾a$      O|{v^SSRRURNO[]cdinnpmphimsy†c)&&# &9DD%#%2QSY^aafggmrnoomnoRDL9SððîðñõЄ„…„ƒ‚~…ƒ~ƒ�›  †¥   'EKY=0T\K/k_]qc4<I……T>«'*)"'/N¤ž«¬®®¯ƒ®¯®¯£®¯¯°¯±¯T-.j³®«­¯„n¨®°¥~Ÿ¯­®¯®­¯¯°¯¯°®­¯¯¶-M›N" „ÉA_]T;04644312=?A>CJLMJNEJIPYaD"!(, "02-%9:>BCEH–LOMNNMNN3-1!GÞÝÝÞÛÜ®`ab…d`ec``a�—     à     $>6H,#DU=YRSeL!7zu<2      ?Œ•Õ—››——–•——•”–š››ŸM((aš—•—|e”˜˜•xŠš™š™˜–•–™—™—š™”–™˜¢$Bt#    Î  -=71  $"&((**.%'*-4<    !#%&)('–AÞÖØÕÑË565536697497�þ.G@73%$      'fVo40akPvYUd- :>.C  <951*+%#C:AQ>D\Ï ¾ËÎÎϨÐÐÎÎÍÍÎÐÑÏÎÎÐÎÎÕÜÏÎÛÓÎÎÏÐÔÔÏÏÑÓÖÓÏÏÐÏÏÑÏÑÊÓÑÏÐÐÍÌÎÜAW¸B"&)3      %' Y|xt]PUQRXTMPZ`fgjo¡nmhfmuy…b%,," $;<AD&!'#.T¤\``befiknqolokL<;/…ïíìïíóò£€‚„ƒ‚„ƒ„…†� *$  Ï    $e\tE?ko^6~[WiV03*DH=A ,) *%&3!) O«œª®¯®°¯¬­Ÿ®®°¯®¬®¯¯²·­¬¶±¬«¬¯²´±°¯°´²¯­¬­®¯¡°¯¯°¯®­¯¶3G—7"!$) ‹àH`[U;.566980.9ABACMOLJKHGKTWaD#(6+ ../*%;<<ACCGHFKLMPNLOL4# uÜ×ÒÐÑÔÎ}^]`bdbecdgd�þ           ![Je50TdO!dCF[;24*4       ;Š“˜˜–Ü›™•–“’•——–•”™˜š›¤¥ž¢™•““– Ÿš™˜š ™™˜—–——”––•˜–—™—–•˜ %?r        ¦ 3>60""%$&+,+))%%)/5= ·  !"!$$%''%'$tØÊÌÊÈÇ·N113377988>8�£ 2>>40&%  ü   #7"!$672:]\]O      88721,! (JAA[I<XÌÄÌÌÏÐÏÏÎÍÎÎÐÑÓÑÐÎÑÐÐÏÒÐÒÐÏÌÎÐÑÑÎÐÏÐÑÒÏÏÒÎÐþÏÔÒÓÒÑÐÐÑÐÏÏÜ9[ºV4;B4*       ($ Z~zpXONNSSOMNZ`efkpnoopjjny|†\'( !$4==>D+"")QRTZ^befegkp›poor]JM=8}¨¯½ÅÁ¼·˜u{ƒ‡„„…„„…�•  # …±  8$+/%.2*)&79B2/1J]]aK  Ã*&!"/*';+#I¦Ÿ«­®®°®¬­­®¯®±°°­¯¯®®¯®¯®®«¬®¯±°°¯¯®®¯­°«¬®­­°¯®¤¯®·/H™H68=." ‚ µ  H`\P:/,0952/15=ABGMNMLNGHJWZcG/+  %+.,(©<<>ACEIIEIMOONPRA1,""lŸ¢¥¨®¨¡xUX`decf`eef�þ     -  ".)-1SOO?        :‘ ‰“•˜•¨™——™”“——š™™“™–™˜—››——’“—•™š›š–”™˜•™•––•“—þš—˜š™˜¢'=r         1>9-!$#(/+**+'')04=   !#$ "$%'&%(•U”“–”œ’ƒL,/3699;49;�Ñ 352/+(   %Uz}-*z#+plHCptqTÅ     >>640+(!'G8<];5_ÆÃÊÍÍÎÎÑÎÍÏÎÐÑÐÐÏÍÍÎÏÒÏÐÐÏÏÎÏÐÑÐÏÐ…ÑÑÐÍÏЄÏÐÎÎÒþÏÐÑÐÏÑÝ8i¼YSFAGt<           ,"]{~rZSMPVPLLNX^agknorlkhmqx~…U,$ #$!1;>BBA0#"PRW\cghiilmrpprgIS•Q37cd~“’ze]|ƒ†€‚€ƒ‚�™ ‰©  U{L7‰D*7vv_'-1SputS  ®    -& !.$%?$! I¨ «­¬¬¯¯¬®­®‰°®®­­®±¯°®„­¯®®¯‚®«¬à®¬¬­®¯®®­®®¯¯­»)P›PNEAA^3   # E^`R<6..6/,+048?CHKNOLKDINV\dD'0" ¸ ()*//)9;=AGJKIHJMQQOPF+33$GH^nppbZE?Xaebaa``d�á        Gnq4'ju0,fcH<imiM  Á   $:‘ ‡’—•–˜š›š—˜˜––š˜–—•˜œ™œ——š˜™˜––šœ˜••›˜“•–—–•”˜™Š––™˜˜¨"Bqä1     "     6>>."&+)*+(*%'+/5<  !#%$œ')('" %'8IJK=6 0477:757<?�þ =8--+$       05/8).) O  HY2    =9853),4#*?"%iÀÇÌÐÐÏ‚ÐÑÏŽÐÎÑÐÎÐÎÎÑÏÒÏÐÏЃÍÍÌÏÑÏÏÐÏÏÑÑÐÏÏÐÑÏþÑÎÒÑÐÐÎÙ+p½KL+J          /%a{~qWURZTNMORZ_filoqrjghnpv|†U- ''0;=@FDG0"'&QSV[bilonqoutsteHŽL84Uœ¤¯³¶¸´«’……„ƒ€‚‚ƒ€�Ÿ # ‚ã   ,H7>6)2;.%&+0#-1.'("$N CW/ ,$! % ( X¢ £«®®­¯¯­®¯®­¯¯­®¯¯®­²±°®’¬­«®®¯¯®¯¯¬«­®­®¬­®¡¯¯¬°°¯¯¬¶VHK/F   †è & I^aR;84541+,.9>EFGLMOJHFKOTZc@++ #"(--,/0-:=;@HKJNLNOSPQPC',$<z€‰Ž‘„l\aceec`_aed�©     ú   $307#)1'@ ?S.       =ˆŽ•š—•˜š˜š™˜—•˜—™™š˜•šš›•˜š™””•–˜™––—™”’•——•–—˜—Á™•˜——˜—¢Eu!         4?<,ž %'(()*&&$&*-6<   ¯ "$%&%'&'*('! KU^ifjeX</5788;538>?�¦  ?:*('     ´   /! 9ÄtM Sœ¨i ±  =:5352)1I75E0/kÂÃÎÏÏÎÎÐÏÎÏÎÍÐÌÐÐÑÌÎÑÏÐÎÍËÐŒÏÐÏÐÍÐÒÐÒÔÐÐÏÓÐÓÓÐÐÏÒÍÏÐÐÏÎØ0k³2           0&^{zsTWRTVOKNTYabjjqprmkÄou|„W( "$**,,:?>@GCI3%**$KUX]_fgkimotwusMEC/0c¢©´¶´°¤‡€€ƒ„ƒ|€�‚ “ ')   ¬ )-#$!,#8½y-17+ $)L Cˆ”[ý1'#!!#*$(" ZŸ ¡¬¬®­¬®¯®¬¬­®«­¬°®¬¯®¯¯¬«®­¬¬®®­«¬®°¯¯¬­¬¬­¬¯°¯¯®¯«­¯¯®®±X‘&     ™' G^[Q843431*.37?ADCNMOJÅHLQW^<"##*'-.,*/0/:?=BAHGKJMORSRN*)"In‚ˆ’“‹~b\^^bca[\`_c�¢    þ   %" 3´o > 6u„V   BŠ –˜•’•™–˜–•–—•——œ™——”˜š••™–‘’˜——•–™š—”‘”–•Ä”–š›—˜”““”–˜˜Jo             .<8-#"(&*(*'&Ä),48   !"#"$&(+(% (@W[jif_M3024767315;=�¨  5A5+'##  Ñ  1& >°¬6EXK USO-% G>67742#-C=;G72]È ÁÍÍÏ™ÒÍÎÐÏÏÐÑÏÐØÓÎÏ×ÓÌËÎÈÅÆÂĺÏ’º¼¶µÔÛÐÏÑÏÑÐÍÍÐÒÐÎÐþÎÚ1eº*       / by{rZYSVWTRRY`bdmmnquqpljs{‚†V[6 $%*0/49?=:@EI7"%#MY]bfkikllorxwm@183Fk}ž¦ª¨ŸŒ€~ƒ„„ƒ€}‚~�–  #* ‚ƒƒ³  13%(-,-3)'C©§C23=6-IXI JHF)! ¢;+(('&& #+)!,$#Q¢¡®®¯¬­°¯¯®¯’°¬®³²¯±´±¬«¬¦§¦¦§ ¬ê Ÿœ³·®«®­®¯¯­¯¯­­¯®®¯´"V˜    ( O^]P;87<:6329>CCIGLORNNKGPX^d@P6!%¶*'-030-143& >ACHGJIJMMOQUTK# /P^o{…ˆ…zi][\`aca``ab_�•    ‰ „´  $$!8“”: !"BL: ?=>'! ÷  Aˆ’–•—“•™˜•–——˜š•“¢œ›™›—’“’—“”˜”—•”Œ‘Š™ž–””“—š••““”“•–—™œLy     " 3<8+—!%&,))+,))&$+0:9"ƒ  ±   "#%%#&'*)"+2?HQWWJ7//05377657:8�þ @>1(,"    .#C+&aŽ` °¬H    KC?:477#9RA>C42]ÅÂÊÎÎϦÐÑÌÎÏÏÍÎÐÓz9=6=vÙËÌÐo&%()%¦ÎÄ7O¿×ÏÐÏþÌÍÐÑÑÏÐÐÏÏÙ1cº+   1^vpXUSU]PKTX`eikiotvoqnknv€‡^0*#'%)-158;><@CG8%#! P\[_fjlmimnqwy™iA256Ms|zvZYv~‚‚€€‚€~~„|�•  +' š þ 0/F@/-3h#"Ž`#-.96¥¦F   ;.-**+&(7+$* M¤«¯®®¯°¯®­¯®®¯°f2728f·ª¬¯[$#"‡­£,D¥´­®­­®®­¯°®®°¯°¯¶#Q–™¹ * JZ`P8669=305:?FIIGNRTLNKHLT]dH5/!&'°".120/300&?C@DJKKLJMNPTWJ&!7V]YT@BU]]a\\^^a‚`_f^�þ       !D8)\…X “”5    ! % <„Œ”——–¯——™—•—–—˜™Q&,*0[¦‘”–Gr•ˆ$;”œ”’’–š•”“”—–™ŒšœI€Å    %1:;+ &**'*./(*&%)/98  ˜    $"$&%œ'+*"/1,(*/-1.03056765;6�þ <:2')$    /#šfh›-‚D6!R¸PI %)  JC;;876-DmRTT7.mÅ¿ËÍÏÎÍϪÐÏÎÏÎÔ[%XZIpÎËÒh'fipn»ÎÆ8NŽz-%ËÎÐÎÍÍÏÏÐÐÑÐÎÍÛ1k°    õ    "! *Zy}jYYQTaOHKQ]chjjmstsppjnu€\)!#($"%',128<>@CEH=)$$%MZ\^fiijllpqqpM700Afz{zxUZxzz|}~„}€‚�¬  %" À  -*—o(%f¦'2€ 'G=@'PªLG  7/()+-',K5R¥™«­¯¯®¯¯®þ°®²MJP?\«¬°U Y[]X™­¤+@|k#­¬¯­¬¬¯­­¬®®¯¯°®¸!R’     % CZ_L;802>2-/3=CEHGKNOPMKGMS\^I,)%&»&!!%'&#*-../.22%:A?@HJJLKKMMNN1*JYZXU7<VWYZYZ\]aa[__da�þ      &"ŒgR™,t<3*DœG6   4! ?Š’“”•ª–—˜˜––™™–šCAH:O‘•šJRQMF„–"7sg””•”••”“þ—–šš™˜£I   !  " +89+$&'&'*+*)'$*.52    #"#&$#%&&( •$.0,),++-,.0155265:8�— 9A7%"$( é  ,‰JUq HmŽŒ9–ˆC šFK   PF<;<891SbCVL3'"$p½ÆÍÎÒÏÐÐÍÍÎÏ ÎÖYSÚÜÞXGÇÍÔdQÞØØÙÔÎÅ;„äà›‡ÓÏÏÎГÑÏÒÑÐÐÎÏÛ&z¨%  Ý     _v}j^WRXZKEIRYcfiloutmommnx}€h %##"&'+//7;=>DCD9&)#FX]`eh’iostrmN@5&:}{|zzT]{Šz{~~ƒƒ~�¥ &(Ñ  .0†e,+Zy&Dg‚–U•Œa,ŒN/K    <0)'..-%8C)3/Z¢¤¬­°¯Û­®®­®°¯´JA´¸¾K8£­²SAº¶µ·¯­£,k¼»~s°®®­®¯®®­°¯­°°¯¹aŒ         àHY_L>:36<3+-1;DDGHLQPKMLKMVZ]T$&&)%$!(*()+..-,244'3@CFFJKJKPQPOL3*"'^[ZYW6?YWXVY\]]``aaca�þ       %!wS=m8Yy2}vFnF!9      ,  AŽ‘–”þ——”••–˜™—C3£²H&…•I3£Ÿ  —–'\¬°p b™˜˜—–•”–•˜–™›˜–¦Mw         ,4;+ #$%&)*+()'&)/Â12&    ""#%"$''&& 0,-+*-,+*-0//3344646�“ 6IA/%" ‰þ %g/HWQ³½D K     NFA?<65.BD5NH28#h¶ÃÍËÐÎÐÏÎÎÐÏÏÎÎÔ[SÛ×ÞYFÉÎÏ]JßÙÕÌÎÍÁ5ƒÑÌÔCYÌÏÎЄÑÏÎÍÏž×}£# 1   ë (e|jXTKTOHIGR^gchirponljfnv‚ƒF+""(*'-397:==AA%!EUWZcffjjmnnoT5?>.Pwvuv{O\{xyuywz}ƒ~€}|�Ž  '/% „‡… § ('l;;)Rb(V£´K%,+25“/L  È8.)%'$%!+,/, Wœ ¢­¬¯®¯­­¯¯­¯®¯³GFºµ¼I:©®­K=¹¸±®®¬(o²®°7M­­®¯¬®¯¯®®¯Ÿ®³lƒ  )   ·  N`\K87033-,,1<D@EFOOMJJIEMU`^7($# " )±'&.12'4>>@AHJJLJKLN8'"7WWVWU1AYTWUUTY\a^a_``_�  ý   $^4$9Z8޲H"mA    ! " CŒ –•’—–—–˜——–˜˜–žB<£ž¯H.Ž——B7©§ž•—–ˆX›Ÿ-D•–˜¡™˜š—“–—š™— Yl   … ±  0;9)"&$%'-*()'&%*/95  ƒ  ‹ ƒ ! %'&& ,))++ 0++(+,1/6545853�© 2JD1(&  œ   *j/GVO¤1\wþN  [GCB@;6.. #8;3<*n»ÁÏÌÎÏÐÎÏÏÎÎÐÎÏ×f3‡‹jlÐËÐf0}ƒÏÍÌÀ<ÑÍÖWOÆÎÌÏÐÑÐÏÎÌÍÏÎÏÐÚ t¥02   õ     *b}m]WLMLFHFO^bdjipqoonhhkvƒP6)('# '*.,388>@?BB,%'CYZ^abgkjiookNAC73\swxzrJ\wvvx}z}}€ƒ‚‚€�—  !-! ††© *n:8*V^"T˜0f}z{-Œ .KâE.)%'$!#"U› ž®­¬¯¯­­®®­¯¬®´F,{|aY®«¬L$pjp­¬¬+j°­°C@§««®¬®¬¬­«®¯­®®²c…  ) ü   K^^K:5.-,')*2;<?ECKLLKJEBGT^]<,'$ %(*('.1/* 4<=@@CIJKFJKJ0#$CTXWVL-ASQTVVTXZ__e``ba�‰   Ð        "X2"<R;‰. OnofzD  ”   &ôHŠ —•–™™——˜••—–—œ?,nhVO—•“A%g\^••”„[™š™98’“•–™——’‘•˜—˜˜Vk         2;:( ” !%&&)*))($$&182 ¹   $$"&&$%**++% +*+*,,1.4698;97�'ND1*&$  Å   ,r3BaM)SMQ—Q     ˜ SC?AC167>1,5569+%fÇÄÎͧÎÐÐÑÏÎÏÍÎÔd IÕÏÍÎi8ÎÏÍÂ;yÏÌÕhJÈÏÐÏ„ÍËÏÍÎþÏÝ&u­3          +c}}o`YOOMCGHJVccjjmoljnklks|‡K)()($ ! $(-,/37<@AGA.-'?VX^adfnjimnbHIO;Doux}ysZ\vwy{~{}}€€€~�”  1!  Ù -!~H0#Qt'R{ 8VM[6¢+M  B.'&,#$$&!!R¡¡°®¬­¯°¯¯®É¬®³H >³®««S ,¬«¬ *e°¬±L;§­¬­«­¬ª«®­®®¬­´`$     í  #K_^M<9-/+'-*/6=?CCLJGFIGHIOYb9&()%!"(%)+-021'0:<ACDJMMHJKB-)+/RTWZVRDARSVUWVW]_\`_]`�þ        "]6=Y?j#PGJ9        Eˆ–—•–þ–˜•˜—––’”š? 5£™•‘@ $“••‡!W™—œ8.”•‘•—•’‘—–˜—•˜Vm        0<9( !!%&%('%'%%&-…22¹    %#"$# )',.).' )*,*,+,.2134865�£ %K@-+"$   ©  1< )Ju 8 P „    UFBC=8E:9KNI;&$oÇÂÍþÎÏÏÐÏÎÏÐÏÎÖ\D¶º#vÛÍÏÒkMÀÁ»ÏÍÏÃ9}ÐÌØTSÍÎÏÍÐÏÏÐÎÍÏÏÑÎÏÝ%y©)            2"l€‚p^ZTSOHJNNXefllmomlnjjlÀw}‰R)&%'#!#$)38=>?AGJ3+!BY^ccfhlkqsq\MNM8Ntrsuvzvbstuz|~~~ƒ�” 2& Œ± 1)N/3,>E.R|'*+"-4J")L  Ë   <1--*(, -1,$U£ ž°­­®¯°¯®¯®¯­®´J4šžc·®®°Q7£¢ž®ª®¡)f¯«¶DCª­®­®¯þ­®¶aŽ$      (SbeN=;131,+.17BDFELKHHJGHKSZe?$+%$ &',/1225-->CDDIJMNPQO>/1,7USQT‘V^]BPSUWZZ]`__cbcab�”     þ   #9#&3Fr:<      @Œ——–••–“–™––’“žD+ŠT£™˜˜G2“ܓГ“—‹#V™—£?4•••˜—•–—˜™š™˜ Sr        1=?+"$&‚)(&Ä'-26   #%&%$)&))*<?"(()*.,,32366976�•  %;$#% ç   (; L  XG=>B $G?KYda@o¹ÂÎÍÎÎÍΧÏÐÏÑÐÕVTØãM!ÞÍÌÎ]WÙÑÑÍÍξ1†ÒÏÊ:yÖÍÎÏÏÍÎÏþÐÏÏÌÍ×€›       8!pqaROSQMLRR_dhlnnomnifiks€‡K$! )<>?AGFE,%9[`acjhklnqr]HE?8kv”swxvzsasuux}||~~‚‚‚ƒ�Ù  '    &<6))=852:8513=49;:,42L Ì ?3,-3 1&08EC-X¢ ¯­®¯°­¬­°°¯®¯³GA³ÀA·¯®®NDµ¯°¬«° 'm¯¯¬-a²­¯¯®­¯°¯þ­¬³l     /UcbO?5/331-25=AFHGMLMKFDFLQ^d;"(#&3322450!-AHDGKJLMORSC--'"MVTVV‘W`\ERTUX[\]`_c`aedc�³           í$( "  $& =    #  !'$>“‡——™—–’”œ™””—ž@5Ÿ³9Ÿ™—˜D4œš–‘“–‹"X–š +Q•“•å–˜–˜––˜™—–žWm      %2=>, "%%'**))$#'',35     #"#$œ&" '*()),A=!()*,.-.328658;7�¥  ;'%*!#  þ   B  r„3S   ]I460T:3>LC*#s´ÅÍÎËÍÍÏÍÏÎÏÐÑÏÔ_UÌѾÑÍÌ]PÜÕÕ×ÒË»1‘äÙn·ÒÎÍÏþÏÎÎÍÎÐÎÎÐÎÏ× “         8"l}ncWWRNSQUXaejnoonkmkikrw‚ˆH("#!  1>?BFIG(6[^]bgillmq]JšF24Lsvsvzt}wgsuqvwx{z~‚€�–  ' ‚ƒ¬  A072<.44<5052348?>‡DL ¥      D2#'$8"&0' \œ¤®­«¯¬­®¯®¯®®³GB«±‚Ÿ°­­K@º´´µ±­š$x¿¹`—°¯­¯®¬®®­°®£­µ qw    ä  .R`bL>662.4169?AHKKLIIKIHGNT`e1"  (++020)%BD?DIKLNNQA2'+SVTUWUa`KSSQUSTY[^`bca�þ           / &!$ ! ""`s2H   ( # H‘–š–˜„—””™›ü™™£F=–žz ž™–E>«£¢ ˜–‹"k­¯`˜—•—–””•˜™—™š——¤ ed            &2>>*"!#''))(')(&'-2;;  º    ##"%$%) +*,,-.GA&**(,-,/149899:5�þ C+&(#     K � LW#T    XL8 'D;3<D=022j¾ÆÍÌÎÍþÍÎÎÐÍÏÏÐÐÕSPÍÐÅ-iÖÌÉZ#YVYOœÏ¹-4I8pÝÎÍÍÐÏÎÎÏÏÌÏÐÐÌÏÚ“          7&l|~ncZYWOPOST[[`nqnljijklox‚…J&$"$  2?BFCJE1(/Z^\bfhhjnmRGL,Jcwxtuwtz„lmqsrpw{{}~~‚€�˜  - ’¨  P,7.>.606()746*(2;Xc3O£   ?2# *##*-.Xœ¢¬­¬­«®­¤¬¬­­²BA­¯¡!V²«©GMLPG‚®– ,@1 _¸¬­­®¬­¬®”² lu  ö  *S]_H>8:6/0/44<:?KLIDFFGIIJS_a1#   '*)-./% $AA@CFHHLML4*+-AQUQRUU^iLHMQPMPVZ[]^_b`_� ‡   —  þ   D* $"##JV%C    % Fƒ—™—”“•–™—™š—˜Ÿ;8–™–M •’>GHL@m–ƒ):- R¡””˜‡™•”—–˜•˜©Ÿ fc         À$698*"")*&%%'('(+1<6      !#ž$& "*++*+,CK(&('(',.02667965�þN52/* V    )\   \L.$)9+@B@3*6dÅÁÌÌÎ͆ÍÐÍÎÍÍÏ¡ÒcQÄÎÒfI½ÎÊhM##-ŒÎ¹I88@‡ÖÑÍÎÍÏÎÏÎÓÐÍÌÍÙ~—          8%l||jbXUVTOFOSYZ_jollhfghgnxƒ…I »+ #6BBFHLJ2#&"1Z]ceghglp`F?8)Emyvvrtrz~mnqsqrwzz|y}ƒ„�¥  4Û X-0(2$'"4-"*5.' 10/S B1$$'&0UŸ Ÿ­¬«¬¬®¬®­¬Ó­°OB¥®°V8›¬©YC's®˜<24;u³®ª­¬«¬®¬¬®­®¯®¯¬± kz    â ,R]]H@<8730)/5:7=GKGFECEFEKUa`0 .-1(,0/,'?CFEGHGLNB+#+LUUTPRT`bMKMPPORVW[Z]_`da�Ù  $         J##E Ï   %  B‡ •””•’–”•“••“—™@5•I(‚”‘H; ]•‚0*+3k¡˜‘“–—–—˜™š—홚”— `b            "7:7'!!()%%!$%%&(.;6   ! "&' (*)('(+EF('(&&'-/-/0789;7�ü ;43,)  EUZQUSTRZXUNKQQNS\bLb    XH=- 5E9G<NC0"fƺËËÌ£ÍÌÌÎÏÎÐÈÁËÍÐÉÃËËÊÊÃFG²ÉÌÍÏÏÓÑÕØÓÏÐÎ͆ÎÎÏÍÐÌËþÌ×€,         7&o|~h`UVZRPJMT\[bkoiikfgfiuxˆF = !07>AGFIG-!2X[`aihdhgMAC@>Uvtvtuvs„z~knq„uwz}z‚}|€�–  & ‡…¥ <YcZVWUW_[YTWVXRY]dPa†þ>2* '."+!-' R¤™¬««®­¬«¬«­­®®¯¥¢¬¬®§¢¨©©¨£/2•¨©®¬«°±³¶±­­®¬«­¯¬¬¯®¬«¬­¬± k{      *ßS^^G>65830),355>GIEFHCDABPU]c5 @ ((,(.0-. (=BDBGHEJD.')!"6STURRTT_cJLNOQPSWYYZZ\\`a�Û         4RWOPGLNQSQLINNHHP\JP   Í $  DŽ…“‘”—•””’“•”•–•Ž‘•”™“‘‘’’"#ƒ™•™•™¢Ÿ¦£›—““••—˜——™—Ÿš˜“˜ ad     ²    !7<9&"(($#%$$%'+.56 Ž    ¨ " $",()&),-CG*('%'),/0/058685�ž 2,-,,  Û  %EK      !VI4'5BQED@I9*2VrÀ¼ËÊÌ®ËÍÌÌÍÎÎÐÐÑÎÎÍÐÍÌÌÎÐί½ÐÎÎÍÎÏÑÏÎËÎÌÏÎÍÍÏÎÍÍÌÎÌÊËþÔŒ—.#!#"&"      6,q~}f^WYZTTPQT[]dlkhhjgefkpxƒ„>! 9!%*2;<AFHEH/#$2[\]`feefcL?DILpuvssttqyhmopqwwy|}|}€�“   ‡‚«  "9> ‚‚ž=3$07/5'' +#'H\¤™¬ª¬¬®¬«•­«®¯¯®°­­¬¯­­«¬¯¬š¬¬­¯°ƒ­­«¬³­­«ª«®­ª«­­³ sy   â,T^\E:56453-/156?EFCFGEB?DMS]`,?" )/-,+24-1" =ABDEFGGA/(+(-LSUQOPRR`aGKMOOQTVZ\_]^^`b�¢        Ù   07     "  .A‘…•’”•““’“Š’•–••˜““•™••”—”x“••™—˜™š›——••‘““•á“•—•”˜˜—¡ eg#     " 496%"%%##%$!"&)/53   ¤ ! !()('&(+);A%%&‰()+/3455354�– 30+#($% !ü       ,XA]   UD#'* 9PUNXL=)/4x³ÀÉÊËËÌÎÍÌÍÌËÎÍÐÐÏÎÎÌÍËÉÊËÌÌËÎÌËÍþÌÌÎÎÍÎÌËËÍËÌËÍËÊËÊËÍБ"     &(!.x€ibZZVWVUSO_\afiloklhfdlt‚~6  /J8>BBEGHK4+,.U^]`ddgh_JRF8Pvxuqu‘qxkmnptvz~z|~€‚�– ­       ×"I7Z?0./"'36161*(.f›ž«ª««­®­ª«¬ª®¯°¯­®­¬®««ª¬­¬©«¬©¬­¬­¯®®­¯«‰ª«¬¬«ªª¬­¬þ¯¬ ƒp     Zb_E?87476152;6<AHHJGJD?BIN]]-"$%,7J34424821&#!;BDDFGHE?18&0UWUPSRTR_aIKNPQSW[Y__`bc�—    ¬      þ@2V  !  Dƒ‰‘”’‘’‘’’‘’–••˜™–”••“’’‘’“‘’’‘’•–˜—™š˜•“•‘’’“•’‘“•”•——ššq[    Ä 7=:&" !#&(%%" !%,61     ¬  !()'&'((';?%$#%&(),,2354245�ž 3+%&()2!·   /YF$  …™%QF7!-"364@C9;k­ÈÇÇÊÌËŒÍÌÍÏÍÌÎÌËÍÉÉʰÌÌÎÍÍÎËÌÌÎÍÌÌËÊÉËÊÌÍÌÉÈÊÉÊÍÇ õ   0z„ƒlc]_]_]WTQeacdjlnmmfa_es|8  ?>G8@ECEHJL8.+&P]addfliM7KFEbuvvusrsqw}jqptvzz{z}~}�£  ""‰    %I:!¨>1)*#!''"$[™¥©©ªª« ©©ªª¬®¯®¬­­«ª«¨©ª«ª©©ª©««¬­¬­­¬­ª¡©ª«ª¬«ª¨ª«ª«®§„p  «  "^f`IA=99><450A<@@HJ¯E>?COZZ/"  )IHH14723764%8AEDFJKF-!1,-DU•SSRSQ\aJOOQSWXXY__`^`c`�–      ƒ¼     A5   ˆ  “   C}’Ž’‘“˜••™š™™•”‘‘’’‘“‘•“”—•—™—’‘’‘’‘”“‘’’•”•™”r[ à    ;B=*##"!%&'&%# *3/    ¯   #"''('((&'=@&'$%'**,+0043475�• D:1-0')"“ª     7YN Á&NHF:5'%C=-/@C<a½±×ÑÐÒÏÔÐÒÓÒÕ×ÔÕÖ×ÖÖÕØÔ×ÖÙÓØ×ÖÖÙÚ×ÙÙÚØÛÚÛ‰ÚØÛÝÛÚÜÚÚÙþÝz¶}   1 8}…na`caia]\^gdemrroqnjbahv~|2)T%wpM2.4<DEFHII3/)M[abdekYEBD8BnqsusttuqŠwzjtssrvv|~‚}}€�Ü  +%    -KC Â<20') -)%&!U£—¶±¯°°²°¯°±³´²³³·µµ²µ²µ´´°´µ´³¶µ³µ¸·¶¸¸·´´µ´¹¡º½¸¸·¸»»½h–_ ò% -b`aKB?>?I@:;=ECEHMQNMKG@@IW[_7#'O#'ppU:.03846468&;@EBHII:'*,%,PSTTQUTST\_KRRQQUVZ^`a`\_bd�£      ¹      &B< ¼    =€Œœš–˜–˜˜™˜— šŸž ¡›ž  –¡šŸ¢ ¡¢£ ¡¢ê Ÿ¡¡¢¢«¦¥¦¤¨¬®¯] …O ?<=* $ %!#&)*&(&% #.1. $D/ ®   "% $&&(&('&)@>%)'%&)*-/1132289�  E=3140/(‡±   2\P £)OFC>92,9:51BEF NÙ*;©º¹º³À·º¶¼½¸µ¯´³«±¯¦¨¢«¢¤¢¦¢££ ¢ ž—•“‹’‹ŽŠ‚Ž…}{wwnqlGhÑT þ   1=„†tkdfelggmhg`cgnlmrrlhdhu{|4%p{ i715:?FDGHJJ1-(KW]^a_bH9PG@Zoppssqptsxxkrsrpxw{}|ƒ‚~€�—  -#ƒ‡Š ˆ – ,QG ó=2/,,#%##'*) C·!6˜£¤£¨¥£¢¢¤¤¡¡œ ¡™›š“™’”‘’’Ž‹‰‡†‚z€|{u|slonkhee]=Y®B Ö & .ddcQIBDCJCCIGG@CDHKKNLFC@LVZ]5)"jwšl=,..1537638)!9?CDGED/&8.)=QQS”QRTT_]LOSRPWVZ\]ac_`be�    ‡Š ¤  (IA  Ü   3—-†”“’Š—‘’‘”•Š‹ˆ…††‚€tƒx}‚|{wvwuoeqnik^fcb`c[SVZY;Nš4 é  "A?>/&! &$%)$$ #'&$)*&$!%.0-  G?B  ! %'•&&%'*@<%'('&)),/035457:�¯  F@6.436=!¦    5cI  ­#MHC?>76EKI5C@4¹« ¦ #pã°#  ‘è3@€ƒ‚sojrprqpz€w|wpqssqwpolnwv1 @]E/,27>FKFLIGL8'(CRUY``UA(*;Lfnomlpwusqzzlrsqty|}€|‚‚€~�Ø 1(,    +T=  ‚›;4/++'",,-$()%  ‘ ‰ Ÿ _Ú  ‡‚â (.bc_PLIOMPNLV]TXVNMQPOOKJHPW]^8-%DfU;,+01014:85;,1=@BGF7-+2GQPQMPVVSTa_KQTSRVY\`ƒcd`bc� ¸    &L:  — ˆŠ‡›Wµ ‘¹ '@?;.)&((+*(/1,0-''&(*-)(&',4,  !&  ¦   &&%$#'((*B=$&'&'+-.2ƒ68786�Ÿ  9.#%.552!ö   =dF   *PIA@E:4FOZ@IB+ 0ÉЭ§¦¥¦¦£¤¬°®­¹µ³»ÄÃÇÃÁ¿½»¿ÂÅÄÅÃÅÆÉÆÈÊÑÎÉÆÊÊÏÐÏÐÍÏÎþÍÔÙ‹,     #7 E€ƒƒymnxuw{y‚ŠŒ‹„zz|‚yyurrt~…z-)(-.09?HOJHIKL>12 FW[Z^XD;@,*Mllkhlpqrr‘qz|nqrrsx|€{€„‚�Ÿ  % ¶   5U@  þ;5-*0)%,6A*-)!  -«®–‘”’•–•”›š›Ÿ¤žž¤¨¥«¦¨¥¡¥¤¢§¤¤ª¥¥§¤¨©©¯±¯­³«±¶·¯®¯²²´¯¬´º‚)    å, 7dc`TJKTQUWT_ffebWVY_UTQNMR]b_3..%;6)*')26945977/##6ACBGA'%' 3KMMLMQRUTSa`LQRSSUY_aab^cae�Š    Ž  Ð   -L:   & þ %—~{zz|y†~~Ž”‰†Œ–Ž’’ЇŒ’””‹›•Ž““–“𥛒”” ¡Ÿž¦ž£ž£©­y    &B>;0((*),.,36;;7/,-¥2//*(*+281     ¢  $&$ &%$'(+G>&''&(-./1152748�œ  ,"*;<.# þ     <hL      -QIDCD>/70*,3, 6k‰˜“Œ…“‘Љ‡†’–…ŠŠ‰~£©žš–žŸ£¥¨¨¬þ²œ’€‡‰‘•]bcve_`Y^ZV;           #=A€……wopvxx{}†••†„ƒ…‡‡zzvpttŠz*%3-+/.5>@GJLMJOJ>..FYX‹[bYQKTQN_kkl•nqsrox|nprtry}~€|€„~�þ        6Y<  ":30+-)"  1^vzxË|yr{xwwuos{nowujo†|vtzzx‚„ˆŽxugeefkrOTU_XTTPROL8    ò  1 4cebRJIQQSVXaqn_a_abcUUOLNQ\f\.&/%83'%'%'08706775,7ACDF<1/4//AJLKLMPRTQP_`LPOSRVZ]__b^adea�À             þ 0R5        !Phpohklcdnfkpkfa`][hhOQai^_X]XWZ^[aciWVOVPGKRCGDKIJGIHEA3    °     &A?</((*+,-08CB686É/0+'*+3<0     $%$"'&%('+H>')'('-0/228559:9�·  .!#.57+$     “    :dBù   2RKBBE=4A=&-;3 #     -0;9@Se{o`cpss{yyƒ‰”nP1<MSXTD  !     ò   !<@€ˆ…{smqxy€~ˆ…{€ƒ‡Š‚wwtqst{ƒy&)0:0(,0078ADFIGHHL@.*4VXZ\RJ]eZ^glijohnoopoz{oqqrtxzz}{{‚~ƒ€�“ Ú     2W8 ://*+("&# !   þ ""(%/=L`TBFRYU[WWahsK0!&/28= )    - 5bhbVMFIPTYXb`W[\acg_SPNMMQX_\)",3»;.%$#%*,.2114753* $@B@@4,;>8=GMJJOJONOQQa]NQPSQVWY\[\a`efb�·           † ½ -N4         …£+E;..78463069D) ¿       (@C=.(&+/.24:6.227˜0*,+'+*/5+   ¯  "#%$#%$%%&&+H<))(('*.-10475<=:�þ 8/*,2<A5#          ?dF   *RLQDD7+6D>3>:! )+*#þ <LNP.%Bqˆ€{zމ‰ˆ…ƒƒ‰‘q^@@RW]c%U         "@D€Š„{uy~{€’‹ŠŠvyxsuy¯‰z$=0'*-/37:=BEHJIIJO?2/'0UXY\H;TQAUjmjomononxzprtuwyx|}~„€�œ  %" …‡…  þ    7Y:     :19+.%*%!$    %--0 2Tne`^romjccagpN8)&25<>5   ¢  Ë/ 3ciaZUNOVV[ZikmfjghhgQTTNOS\e])&,E5'$#%%)*133025455&=A>@.!63'9KMJNMO_\PSRUSVW[_^]^`egc�þ               1O7        ‚þ   6UPHFTNKH?:7:A*               )?F=0-+.2057>=@:=;:87)..)+-28+ ¯   $%$&%&%&%$*B:)()*')+/32‚49>:�þ  *),'-@D0"       =`8   +MI@=A8(03'+=8+ &''#Á >NKO=.,+rЇ‰ƒŽŠŒ‹‰…ˆ’nZFEVU]V 8Z      ü   #8 Pƒ„„‚|~}}~ƒƒŠ‹ŒŒŒ‰ƒx{ysy~Œx($*+/15::>@CFIFHKLG21'.SWZS9:64G_ljhmlpomonnxxmqrpvuz{||{~€ƒ€�  " ‡þ   2V/:1*(0'"!"     "0-0(&&$VsmpgsqunjjffpN6-&54<9!< þ   ,:cdb]XXUWW_^fghijhfd^SUTPUZ[j]2-.,,$!%%$(.433254773.;>>:"# ,BNMJMKOPMONO_ZKRURSSWZ][\`cdec�Þ             *N.          þ   6YWXOXRUMGA<>E*         ! )@><4./.02869;:>?::63+1.*-24=- ˆ ±   #"#&%&%$%%)>3'((&((+-/0/457<9�þ *&310GC+         :[7    2JCED@46B<.5A<. )%² GKJOQ=/GyŽ‹‹’Ž‘‹—m[FGWT[X#>PŸ          é  %/Z…„„~|~z}ƒ†…‰’ŸŒ‹ŠŠz|{y|€Œy"++-1466>ADECGEFJE/-$&TRUK>`U>Selhfhikonqqorvotruwuy|}~|}|€}�ž    ¦      4S2‚¦#6,,)(!)#%" #    ¿ '.-02+%1WwsupusxppnlluI5''8486 %2    ö(AedaYYWSV]dafnkyhghgdUVVUW[]i^' ! $'!$,1220024350 <88/(@2$6HMLJJIKOMOPO[XLTSVTQUZ\\[_`ac`�ï              .L0    þ     =_\^W]XZOMGGEM,               "/B?<1//,26:69C>M“><@;:.1/.134@1 †  •   # %"—$$&%((*;4&)**+)*,.34647<7�þ A0,73@7!! .          =^8       7OIFCC49C=6DA,  •"DJINMICN~–ƒ˜“’¡™oVBDTZ_QAS"'*%## (#(¥$ #%+# #    **Y„ƒˆ€{}¼|€‰ˆ‰ˆŠ„~‚‹}zwx€ƒ‹} #'1)+/346>CBCDGDIIF1,*MTVFDbh_dfllhonokluvoqustvy{}‚€}}�   - )¬    4Q-ƒž#4/'()!&$'%  þ  +/-/**(/`xu}z|{{uqnmlxI1 4:<, %2   "Accd[VVTTV\Zeedcf`Y\dWVSRU[`h¬Z $%!&&*31/+00/62 9::&,>C>DILNKJIJO’MN]UMOSTRSTX\]\]b^a`�³  #      )        Ë      .H/      þ  B``fbda_TNGJGP+   ""%! !"$   +@?=4-/131218989:524:00.,045?/¼    "$ #%" ""&%'&*@5&'+**)**/4488389�»   ,$"#)*       ‚  ‹  8`-‹ Ú5JECAC22KD:DD, GIGKFFKO~”™˜›˜™’Ž‹‰–rX>AWY[M >H    þ #*$$'"  N„ƒ†ƒ€||{}‚‘’‹‹‹|z{w|€„ˆx#"(**/1248;?@BBADIGC/&!<]cB<FHPdgkmgkkjojojjuuonppotwxz|„{xx~z|�‰   ´       ” 0R)þ%40++," 0+!))     0--/..12cu{€ƒ}toljovM5&)59;*.*    å ?ede\_[XVWXZinnhlgifhWVVPU^acW #$"&$'*)+1/,,24363" 0CE*'/+5FJNPJNNMRNRMO^TPORSQTVWZ\ZUY__`�ò                  )H%     ‹  þ   C^fjgkdaTLDDHN,      #" +?=<7220.-.0<>?:>8;8;//0+-448+¶   $!$% !""&#%#)?0''&&()*).31435�µ  F! *      þ     8\0  0GE>?>'48:BC%(0() KMJIIDKO”˜™›Ÿ™š’ŽŒ”œr[5:YTWL :4   ƒü    P„ƒƒ‚€|~}~}œ“‘˜‹~~|{~€„Š{*&(&',.,27;;9=@@DFAB6(1RKBL<6Lcgjkgijlonnmmsqhjmnoprxyƒ}x{v|�™   4    ‹ Œ     1N+ ƒä#1-*,,##")* "    /0/+./00`{~‚…~~uqqmuzN7&'8790'  ŽÞ?geaZ\ZYXVXWkkxolrkfkWYWV[^beQ#"!#+)()*(-(/85414$! (82(0#7JLMNJNPOTRQOQ[RJNQQSPQWZƒ\X][_�þ  $                 *E'       þ  Ebglmmd_UPJHMT-        .@;932212-+,<:HA?C:8>10.-169Â9%       !%$!!"$&&$$*=,"&%%'()+/1141435�Ÿ  M4$!*6-%  ‹   þ     8[+      2EF@@>.1#%$&00+* *RTJJHDJN„•“›œŸœš–“Œ“•o]07WV[L K( š     ç   +) ]„„ƒ€‚€~{†–”›•’•‰|}~{‰Œs'%'*'$*,-2788;?ABADEB4*4?>CL\UZ_eggeiflkojlhurjhn‰qtwzzx{{|z�þ ;(          /P'  "0-'),! #"±  67/+),02ezzƒƒ…€zuoottM=#&88;44 þ  !!Eed`ZZW\WS\[i`qnvolqeXYXV[\giW$!##$+''*,+-//67653$ '('',98AGKLLILKOQSMNM\UŽLLQQPRQUZ]YZ]\a^�ñ )#               )G$      Ó     Gbaimld`ZUIGKL+       Ä   1?:612010*..:1BCKA>C6./.,26?@(    « !#"# %$%!#(?/#"%$'**+//035464�å  _G'$&+30(#       "69:?8*.4/2   >Z,    7CþA8*&&)14($+*)-!" 0RUMLNLHL„•š›šš•’ˆŽ—s^39VZbGH        .) h„„ƒ€~À„…–’–›“”˜Š€}€‰q'" $&$!)..334<>>@DBBDA1. CSG]a\Z^]bgghj”pikjtphlrpotuxz|{yz|z�þ   K8        35730'*+)+   5O'  $1,,*' !$þ 6:1//224ex|…‚ƒ€xtkpovS>&%8:C15       #!Lbd`ZWW\^W`\gpmpwooud[][WZ\eÂjT& ! $!")((,/0.307:894#.9.==<@FFJMMKNNKMTMMP\RKQUSRTRVY_\X\Za`�ï  41          0/+(&&%#$  *F'      þ       C_aihha_YSEHGM-  !          3=9610.11-2.6?=BÎKAAF5/1.,/28;&       !# #!"#&!"*=."$'%'+)+,13/4034�Ô ^V-%%2-'$      ;UX_bg`ajeiW    ?b-   þ 6@><?0 3-'193)*-,** #5RSVLMMIR…–œ˜š—™•–’“™n_4@[[aB E          é  0( g‚„‚~{~€‚‰‚–‹•‹‹€‚~€€‡‘i)!&,,346?@B@CCABB72!-K>;MNMY[\bcfeeklhkihivqdknpqsxvxzxz}yzx�à  KE"      2NOVX\TX`\^M  þ 5S%  &0(**#"! # !266-/225ew|ƒ‚~~wxruuxP@(,:9A--      ú  % Lac`\ZUZ[\d]firhgqigfZ]YYZZbmK '(),/215479553&#-&'5/3@GGKIKHJONKPLLN[SHORTTRTVY\Z[]Z_�© 5>        þ  *HGIEF>GGDG@  .J(            F]`gcf_^WTOPOR+  æ             0;:612//037.68@9;C:89/2-0025=   ‘  ! —"$#%"!+>-"&'%&)*),331303�þ   eI'&3-#      ;W[_]ab_db`O   B`&  2;==<(9:2=@B;1*+*) ""Ç5VVXRKLMU…‘”™—›šœ˜—“•˜›p`1;_\dD @  #%      È       4,b‚ƒ~ƒƒ‡‡Œ’‘‘ˆ„†~}‰”k& "%&-356>@=?A@«B:0"CIBB?DMUY[aba_cdkjdieiujcfjimostutuvy|{w�   S:    †  ® 4MQTSVUUZYVI  9S  þ'/))(('$'('"  $66820424gxz~‚|zwwzyP@&+=;B&.               Ê (#Kcb_`\W^]]bbfknkkjlha^bZWW[dnG &'(),064134435,,-'*,(5AEFIH˜IJOPKOKN[NHJMQTQSUUWXY]__\�´  B5        .CEECBü??   5J             E]_echebZVUUWU-    þ         3?<5452331426;=<?><:83521/49A       #'"# ,=($$&$%'ˆ**+/./4552�Ü  VJ8!*&(      5PU\_^_`b[[O     =^=QA &3 ä  289:6!-?14=;C:,()0(#  6VUTTNJOTˆ‘”œ š›—™“–—q_/@`a_A 5D#  "#   ø    .0 _‚‡‡‰‹‡ƒ‡’““’ŠŒ‹…„„ƒ‰’i"'(0177>=<>?>?AB9$ 4GBESSVQVXY_``^abfebefhvkeejjhklmottwx{v�²  G;*      /IMR†QWSRF ž   5S6RA %2   þ%,**%,""%(+&"  #:8642443ky{ƒƒ†€{{wwx|M>#*<A<%)0            $š# Gbb^dbaea_bghlljmmlfdee_]¯ckH  !!&&(*.250144346,'.'+447<BDEGIHHGGLMK‘O_NIIMPOONOQWX[[_[�“  =4&   ê     *@<=<>B>??::    0I.?; #1       þ G^bgglfe[ZSOQU,              1?;379984258:<;;==<889852336?Š  ¦     " "!+?)$#%$$&(…,,04742�þ L<A#+$      $ (<HZVWOOVYSF I6,Q$ :eHm~"<h—1 &  -<:<2/2AO557*&%&,ç 7VYSWPQYX‰•žŸ œž›—›n_2H_eeBMB$"           10 bƒƒ…Œ‘Ö‹ŽŽ’•–˜˜–”ŽŠŠ‰—d  %+/4158<>=:<?B<B;%RKEHJMPVXX\]_`_a^edhgghtgdgfhikjnsvvwwxyw�#"¹ :02       ! ';FSLKDENNJ>  þ D8,L$ 4W@g~5Cm–2 -!"  +*,$!%.5$$  %9:7547;=mx{„‡†ƒ}x{|{L?"0?CA( ;-      ü      &$LcabgijjfeehlnoqqomhgihdeeggrG  $%#+)+/454239736/72(,+.7BCCGGKKHGFMLNLKP\JHIJMNOLRUWXZZ[^Z�þ/-+        "4182374=<52 )%(G# .L3CT2`"       Ï J_`fjkgha[RPSQ)! ,             µ   4?:5:=;<<;::==?BA?979;=:6677D  †  ‘ ™! !""->&"#"$%&&)*-/23563�þ =EIF,(!   $# ;[[\A3XO2,(+40+5a|“—V ?e]“zQQDf^( DE 0;<:5*#()2-%:9*%%&( Ç 2V\RQLQXZŒ’”Ÿ ˜žž——ššœjZ2KY\a?D$$"  ×     0( b€…Š‘”ދޑ’”•”•“”ŽŽ‘ŒŒŽ”_  %*.0-366:75:7>>?;*HM@;ESKJTWœ\Y^\b_`cecegsicedhfljorrqrvuyz�ß+#18:8  )" 5OT\?9VM/&"%*)%8^s‰Ž[ 6VP‰ybc_m_.))LW% þ-'&% !"(     #9:3006:;oxy†ˆ~‚„‚{yzy{K=%3:;<&2         '! ”F`]adjmiddfjlonmnmmjgÇjggfipA !%()(+/053145565/2.(#)4.5CACCFFIGIGJKJIINZMJHHLJOMSUVSVZY_Z�þ '550      49>R0 0- !" 3IopE .J7[A)2 7.    „   è O^_gldfhdYTSQR&  $         0<868<=<:76;>?Î@=898:<>966:B     !!,<&!#"%"&'++-,13343�þ 3JAM.)&-/548?@1#-Rx®~uL–žª“^053"4jƒycE?72621*3.,+.[‡‹qdQSdx€oxV;D_&0]c‘; -:;542),):6%I:($È"5X^TSOQTV’—™œ ›Ÿš—™™•žaS0HTYW8"G#'&!" £    4$ h}}ˆ‹‘“–Ï••’’Ž‘ŽŒ™N '*.,/.//36A25;9@@7Q>FMHMUPQPRW\Z[[daa`bedjwjafefggjkmopswuxv�þ*<3< !&,*.0) *6.3)=Xs¨zoD…Ž—‰Y/2,!:j~p[<.*!'$""#$,Sqz€lcSHTg€r}g]\e;Ghd‹S. )"" ""!(%4)   Ä  %7:41/258t}„‡€„‚~yzywG7",694$0    ù    (K^Z[behgafiknpnmmkjhegjgefeiq3!%,)*-.08;<221165%4!'-(,:;A=@BECEEIJJIILIP\LHIMKJJMPQTRVYW\Z�• "702  Ì '?„aP-hiqpE)0!C^E1+AIT@8.9EBI,,-4>])   Ê      Qbfhoefd`XXVR[#   Þ         39546898379<@?@<><9979;9876=D   ©    .?' "#""%&)*+*02/0�þX,MKV")! 1-oeD!  #JL$1z¨Œis}r†…œ’v6fªÉŽroT_own__VYbVVƒ– ŒerF2Rb^UDkK$7NYnvs]* (6;40?0($93#))'!$ è #6YYWUPQUV˜œ¡šŸœ••˜“”™\O4YTVZ8#8&0'  !   1#lzz†ˆÕŽŒ’–—˜—“”‘“Œ‹ŠŸD  $))319@9bohyf9@AEA]O=IUZYKINRTUYX[\cb]abc`eve]bcfdfinknnrttus�þW =8A  #e`A!+089RW@Eyƒchvk|{†m5`›¸e`BLT`UFD;<KKRu†‘ƒaf>5JRV_Uo_OV^csxwg>B! &!!+#!'!#  þ#8765/289rs~ƒˆƒ€yxzux{A3#9778"&      & RZWZaaeddffdjnoqolmjfjnjedchÂx/!"34:BB^kgp[82597A/ '6878:>?BCEBCHJKGJIJHQ\GDGKLJJMPPSRUVVYV�û E606 =D4 #IjR5;TOPSkaL+cŠV30&07.$&"!'$&@TaV5[>5F1&!%+6>?9       µ  PYdfoegdZWYPQW!   °     6721348µ676;??@>=@97;=:757=I$.)1# %! .?$#" !&)(+).0//-�þ 4r #K>/$*(2AWss$ 2p?.6ª©I6CLnpY…'`s¶¥m’S£˜˜`5<<@BCg›˜†W&}zNgjf{`EThD?KIBCOc#-$>$%4;5=HD.95#.0D8(#$&# (#! þ $5SZVVTTY\ŒŽ”ž Ÿ¡œ™—˜’“žhU0JX]`<3J.71  '&%$)+.'#),21"(+)! !" '*!*# gvw‚‰ˆ‹Ž–˜˜š˜™˜‘‘“’‘Ž‘ÂŸG  03.<2PvŽeFLbQIEEi€QQDINQ8NPUXZ_^b_bdaacc`bu_[ccdejmnnoqouwur�þ 1m =3 !5Qpx8/'%(*6EtQ8CE¢¤SFF"LgfR‚/al¥˜d€R”‡ŠX)*)+9Ie‹|T/skJgaWpgV`q`V\]^\akB:12%:",-('2'$(%$/$  þ 285513;?rty„†„…€|zzut}G7!09;@&&5!  ##   # PWR[c``dfdghnootppoihlkhfgfk«w--32<A\{€aRWcN>=;Z^/,"*.74B@AFGKHFIKJ”IHJN\@AJJKMMPQSSWUZYYV�– %W5/ <LWÁ  8#wx)%(=>8h@;um0H"a]Z32ZYV3FD 2FJI),"" #"$2þ!      S\_jlkjc^[XOJS$"  ! !Ì 35/25348:59;>??EAA?9:==;686>G 47#.; ‡!/B "‚#$(…,,.632/�þ JJ2;791/&w=E2( "'KhU%3C4%*IhMO›Ømf[ޏ¬ƒ|;'11I}‡L.-k>[aAL1z™fhb8F˜4(99Vƒ('369?7 9. %  (  Õ  !8TXWRRWZ]–Ÿžž›—”–““˜oW.SXTPBSY?>IOKOGDNX^_ciihbgc[XYQSVVQKRQPNTKQIDIIDB9=<Ì543/+)'& Slkv{‚‰Ž‘’šœ˜˜–“—”’‘’Ž‘”›\ 1WR50}e842>K<DILqdG]RBC81QRQUTZ™[^_aa\`__rRZ]\``bfidHM^\^oq�þ 9=%&$)#p<O6) "75Rmd:<FA;4I`HMÐkc[¥œyt:%1>QxI-! 0;iKTSFWIz“jhfSEC\—E5ABU})#%#'!$$    þ #3540/5=?vvz……ƒ€zwvtuwM97862%5<)+2-/.-5=@CJLKPPLGABA8;?<8;>=>;?9=:25/2/)-'-,$($%"9KFNUY_dcfgiqtppmjokihieefgoÂs>  .TO9=x^>ADOYLFGBXC'9/#'+4EA?AAGGEGFFJHDHIJW2?FFIJGILM9@HHIVT�þ 35 ! N05)" .=3"- )7# "S¦?/)N|nPV%GS*"3 ;F("9Q40/ #[#-R       é  !X\_klgc`ZUPOLN( #% ! !&+15:<<@6322-,.13/064756194-27/)#&&#(,&%%!!#.*+*/25”8<AB?A@<=:87;7677>D½&:(1&   +< !$'%!'/*12�þ715X#0>@;#   ##>Ke&@.7 Rcc- 6aOiP€±•‰¨­‹V2#PsJ& (lUaK(7•–gimN)!Z96Z;!-, (##  þ  !7TTXTQTZ_‘™žž¡Ÿœ••’’—™qZ2HUAM^bbVIitr}…‚‡“—•ššžŸœ™—’Œˆ†ˆŒŽ“•𗒛𕖙ހ‚~|‹ˆ~sosrqjiZ\d`]_o€‘•˜›™•“˜“‘ŽŽ“’™ÂœO &+FHZx:2C41.o‹Zcƒ_ZXSTY+5IQPQW][X\_aacebbgvN\SP^_bcdT +-AUi�þ+((D+-) $  0%4MXm6KAFNah9 @gThY|¡ˆ™¡ƒ[=9XtJ-,C€rQVO>L‘fhnaQF-+bF >]B     þ '547404>@vw~„ƒ†„€xurtxyQ=$/7-2=@B6(EPLW`agjputxx}~{vvqjdbgqlknst{xt|{yyxncae``mmbXSTUUOPC9A<9=IXghhmpvuqomjojheegfjjr¢u<$1LJWo>9LIHHvƒVVc=9512?.9?A‡EJGCIGHK“LNRZ5EDDLIJHIF%.-6DN�þ &"!1!"  $)>" *25 ,=:#JpXLboR)*C2  F>7I0Ne:.31 -"        þ  "T]`gijg`VMKOPQ, &# !,*1;=CDHRPTUX[TNOJC=<BLFFIPUZTR][Y_\SE?EDDQSI@>>9883) %!#-756<@DB>>=8<87376599B¢C %1 2>(?   !!0< !$$/�þ !)0:#-9>4   , &"3SS$IJ*)xcWoˆbGGF8,"DC[:BLf~0$<L<Jfg%  2@  ! !    þ"4TWUQQSY[‘˜œ›œšœ””—””˜lX6WX9NhpqGOpsqw}ƒ‡ƒ‚†‰Œ‹‰ŒŒ„‚~~ŠŠ’Œ†…‡Š‡‰‰†Š‰ŽŒ‹‹ŽŽŒ‘•”™˜š•‡„‡‡’“™ Ÿžž™™—”“ŽŽ’Ž‘—§P#»()#EŽS)*)/@@x‰“¯~R]aTO*$>CKMRUWY]``ba`_b[atI[umW`jf\QF:&):@_�þ %'-&.'  4F4+"81>#S]<NX?(9%jeXl‚fOMND  &:<T$CP9PY1fOKT'+WOOeg0  !0       Ü$664347;<ww~ƒƒvvyvwyN;$9<)3HON'-KOMRY`d`^cfiffhg_]YXecagkmh``cgcdbadchjklffgghieglqpsÝoe`[`_ejkqyxusroomkhfcfihjq: ).*I‚Q.04ANRy‚]2>>21&)<9=>@DHGIKIILJILIOX3E`fSQUQMNJ?/066I�þ #!'"    !)( !  ?7%:R2##%# #/F" "+? %$76   "    þ  T]becgbaVPTNOQ-"/+ %&$'/68648<>;<<94410766;=?815<<7::5:;?D=B?=>>??<;AHKKFIC:5321478>GGA@?=<=56349:67AM¤  N& .7=`9 —!,=-%#"" *�þ-25787B+      $$BBPMYY,@"WWŠK51[eh<) —­|[$M`)EZ?D(\|';7LIJ‚I  B   þ  3PYVSPPYY˜˜šššœ“™•“–—kW1IX:RggdDOuupx}€‚z|„„ƒ‹ˆ†{}†ƒ‡…†‡‚||zƒ‚‚„„‡‰‡‰ˆ‰‹Š’’“—””’“•‹Ž˜œ¢¤§¢¢œ˜˜“‘‘“•“‘˜Â£N$!2L''*(!4EP€•–W>TOLA?DGKQU]Y``bbac\_`iwKZm¡shi^VLN;/=M_c�þ(()'('3#     !7&&,72JIWU"ZaCP5XT~UEE^fgG3#!Ž«ƒg+ET(O`IE8d~DBSNW5Y~OzM! .    Ï %6:6756;;|v}„€v{xtyzM;$3>+9JKD&.PRNUX\][W\]__^_gc_VV`\^^`b\UWT]\\]]aîcbbdjifhhd`ekklpllhhjlcforvz|}xxsrnmhggkmjjq{;!&%8J$,1%0362EVZ|x=%81-/!<<>@CFLKMLLKNOKLKT]8HZi\YPQOS?3;BNO�þ %$# &      '")%$*!$$H'465 ]wR44J +*".D#+I'I.     Ø  ^[bdedbcUXUOST,$,# '&!(-42/,/24420344,,001/14.*,+100202315457;:9¦637?<?A><99=934;?CKLHDD@@>7656<;;8?I ¡   4EO ˜ 1=,O&"" !$$,)�þ $$/+'%$  " - --9)lªœP"(QN»W<€v]R#Yc!"IXlICD5hQ_ !4PX)7     ÷  -PVSPOMVZ”––›œž–˜“™œiW3WU3GMBF<Shedfkrprirtvww|~xzty}||~|}|svy~ƒ‡‰‰ˆ‡…†‡ŒŠŠŒŒ‡…‰”Ž‘™›ž¡¢¥¦£¤£¢ž—“‘Æ”••™¢Z#'G0!.(**.EL\&S~XO=P`a1,ABIJNMA_hac_SAUVhzF\\Xep^Uc*"*#)N^i�þ  $"!$  ,0&!;'#ACJ>%g—ŽR0/SU°_!>ztf\.PU/MV–rYNRNl]g0 9<I\/$"0)    â   $8635549>{w}|ƒ€ƒxxrvx{J;&:8%35*-"2EEBCINLOGPQQRSYWSTOQUUTWVUTNQRXX[_cc`b_]]adbccb^[_fefjeÛdehcprswz}~zyxxtliggillnq{D(-G65$%&82<:=KT`<Qa81%7?> .=;BCEFHWUNQNE=HES_1JOM_gSN]511%*?HS�é       +b[& *$€;A;10;G&/\<$%"8(+ &6   è   "a[`ddecfWVPRVY'!*''!&'')*+,((&'),)')*(%')-+012112/0/353È0--164692244341=?AFJLKHHFFA98778:;:?F    !$6›4?%0"$#(+�þ &/#()   %  10 "<95I=¾¯8!wH~_’X7?‘tlMKWf):&.39AwOc ")',       þ   0LRQOOGQS–Ž•™˜›˜—–——›hX1OVFAED;?KLJNORTXVZ[X_bcceef`imonnoqoknot|…‚€}ƒ„†ƒ„†…|„‡†‡ˆŠ‰…ƒ‡•ž Ÿ¤¢¦©£§¨§£ž™•’‘˜—–šÂ§G7)"7Y)* (.)%O\&Z~abl^TV#0<BDN`W_g‚zbO(,BbqHhP57EK<$%6N@V_f�ó  '!   $ .1 7<*.DQGT=¬ž‚?)sI{`‹dELts\T#OS(+I8>IN$;TuWh62;),5  !    ç     $43654/89|t{~~„€|ywxwz{H;$690.+-&$-12337697;<<B@AB@ABAGGHFGIJJHKKMTVY]YXZVYVY\Z\[ZWRSY]Ý_]YW]ktwuy{~€z~}}ytpkhgoopr}@E)&&?T7*@?06@8+2V]6M^DHN@993<;AFZ^^\nhlVI07=OW5TsND?BFD;3:H8FLP�š "  Ð  umV =,T/T/ W:8(( =B  $C'1  …    žaY^ecgd`XVVQXW% Š£#  !!"%&)*,))*'(),--,,*''),ß*+,-))-9?CBGIMNIOLJCB=986=<;?H   ##+6#&((&. 07#6 2!#&)�… þ )'    E|<* !91j‰„'|µ˜ƒ%$ 0}S{ThtC edH "? >{HE:DA $    þ1HMJKJHMN•‹”›˜š˜““‘–—˜šfS-DSOXUBDAPUTTV[__`dhefeikimignpqpqtxutw|}~‚|€‚~€……‡ˆƒ……„†ˆ…„ˆ…ƒ€{zlƒž £¢¦§¨¨¥¦£¤¢¢ ˜‘–˜˜›¦k-„Œ"º!I# (>D¢¥mVnxd<"1AYLJeˆzRlЏ»…T7GipDSY/.@B8.x0,4BO]c�…  þ #%    =wE9&%' $G+=#d‚7r¦x1)<x{^|]iuV-WQG-77"&4%5R)HzLJEGA".+     þ"05642044|ry€~~xwtxwxzG;#.54:9,+%5:;=>@@A@DFEGCGIFIGFKKHHIMSRNRWTUXUWXVY^]^]Z\[Y\^ZX][YTSTONBZtwzw{~{}zzyzwtnhmopq}W@"'º,%6?+M6130>DAŠ‚P@PUE) 3ARMHe}jI^{¢¢tVADSW8HJ>BFC<6x:02:AIL�… â     (U(  <JR9lXN EE(C$-4  =?*   ! E-' ,,  †þ _W]eefcZVQURTT$    !! !"$$"%(''(&)(&'+*,+&**)+-*(+*(%#$ +C?GDILMKKLGECEÊD?<6;=>?G#EI    bW*(+  )%*NI 46 B &(�ø      .$  6&R;%5!@tn†\OCY·`ƒuˆ^L2C?5hdtF  6p|'  2Y3!  ì 2HIGJFEFL”Š–›ž›–“—’•œaT/XWLVT<DFX^]\`aeikiooqrwtxyuwuy~{~€€„…‰‡‰ˆ‡ˆ‹‹ŒŒ’‘‘’““Ž‹‹‰‰~’ ¦Ô©¨¨©¨§§¥¥¤¥¤¤›š˜¥:X‘=!-$* 'Wn„f\Yh\$&4OvZVVdœ¥±yŒxp|HXljARP24#401;"'0G[`�õ       *>0" C3T@(!1;-CmgxQHD.]­f}rƒc\8><3ZSi8Z5 '&Bo{3*0 :^B&  ã  $231/-..4yp{‚ƒƒyurxsu}E:%98258(+&<?@BC@CJLJNNPPTRSTRSOSVSVZ[[Z^]aabb__bdcdfbdfedggihàgc``^\Rhw|}z~~}|zyz|{zsrpmt}6*Tˆ7 &-"/-=:=/-FShIA>JD#:%/Hum\UW`ˆŽ”n‚wlsHHWR7KLAD0;74?#"),8EJ�û            *%%%LKYX/*(,~7C3H,!&";@P   :J / ö `Wagkig]TQUPOV% "  #" &%(('&')''((+'*-+,,//0/2110201221/21245422410/0+)%7ECJJNLNKMMIACEJHF?>ÃAGHh    0=%# 0%85=$#84 %%(�¦           ;ï #+L‚B * *"$RA9YmlVˆŒ‚Rib7Js†;"=_fi0EM-]K     .BHEHA@EB–‹˜™›™•–Ñ’—˜OU.OYRV<7?W`bddgimlppouvy{xx|€ƒ€†ƒ„ƒ…‡ŠŠ‹ŒŽŽŽ’‘‘’““••––˜—•”“’‘˜¥ª¨§©¨©Ï¨¨¥¦¥¦¦¨¤¡Ÿ Ÿ¦@  #) 8aeuqocdKL\Hs}…rŽpe|€ŠOdB}qUWnkATB:0*/(-.2JY[�þ    (+   D6  49T{J !5 +"$"R> A\lm^}Z^P7Ko> 3B^gl8KM+YR$  « ".0--,,21yrv}~|yxvuqvz58"/879&"$5BFGHKKOPOUUWXUTX\^Z\^Z]_bcdeedfedekigjjlklmonŠllgffgan|€~‚€~}z{~zvtuu}- ¹ &+&+.0$3IGXSRHGBJ\Gfr}nƒlatqv|ScMzlMEXR5KA?936/11,8BH�ó            '&M.     (.#67$@7199&A# "2:G,+0) þ `X\dded^XURMQV  !!"##&%'&'*+.,((,-1--/.1046567568875523866546::;;8786:65220=HKLLQPRNMMKDEDHŒIMGBDFBF º  "$0.-$!"2-2 1$%"!%):7 #&�þ  0   FT!.  = <X^9/A%%R^`‚:C,6+2s z)    « $@<@>=>51•‘“Ž•š˜“—‘–•EJ,MSLOGG9RaÄegjgjjnrsx{~}|}€€ƒ†„†„ˆŠŒ‹‘‘Ž“‘’’“’—–“—–˜˜™›šš™˜——›¤¨§¨©¦©¨©©¨Ë¦¥£¦¥£¢£ž¥D12/8%"'Gxƒwp|sp48l‘‚{wGp|’‰ƒt‹§~J]QGTqtWaN<#()9-':;9HXW�þ    '+%!1(#>  10! 'GS#0   %E *D^aK9L@=LKZz9< &4A38q#s,  ±  92131,(2{wvyuz||wwqqwv(/!3417.+$9CCBHJKJ‘NQRUW[ZWY[[\_a^b_eªdijlkhjmihgjjkknnmonpqqrqqommleq|}}}€€}yÈ}{wwyu|841!"78/(22*;\cXS^SP9Gh„{uqTms„~xp€—vSbQCCZZDMB;/3!0@1+?=58D�ü       #3  %.2 06&H'#  MB á ]\]_X^aaWWMIRV! !"#$%%')),0.*--,./-01318764:9<>:=>987;9;58;<>==?>=:>;9Œ5@GNJILNNLMLKDDEJHDIKBH»   071/7*$ &''(#'4+',H' >?#(   &$�þ    3!:H\ %&F   S 80(&JW[^  3 > ^&f         ¸  0%(&.1,0—”’Ž—™–›––”™K=(QJ@=9HDYb_Zaceecaopwwz‘{‚„„…„…ˆ‰‹’‘ŽŽ‘”“—–™—–˜š›œ›ˆ‘›¦§¥¥©¥©Ï¬ªª¨§§¥¢¤¥£¤£¥kƒI&5)K4.Sf€]VD,;IbsinonXW}yz…ZZ‰…Z5TXw¦˜ni80`{xuuk>)1-mQ0<7;IRX�ø ! 0,3&1D5IR`!5 'H&    P"#;1 ?#7R[PJp  !5<\*b    ú 6..30)%*|tzxsvz|x{wwuw.*4,/.!+*?CA?DFJGDDOOUSWWVW[Z][]_`^`dcefhjlkjjkkiegilknmrqnprqsrrqppofq}~{{|{€€‚~~}{zyÅzyy|^qF+72H61W`uZUI627LWNQPN@NqimyyZ]|v]J[^s–‰le>7Nd]YXP7-22bG2;558?A�‰ þ    &9  '   #   45<   98     ¶ ^Y`_YW\_X\URQR !"$# ('+,/,*-0-.1./2Œ5246:=?=9:=;8ì6:6;:A><;@@?<>=>=<5?JNFCGGJKLNLJIGFEDIEIIEH&2   %J#,$".(+)#-&".#*<2(E>20'  ,  !#�û   E-',33M'  #&  /& ( 6!4E2bc< : ? $       Õ  &!&3—’–‹Œ•š—™”•š–C1!CE/*;EFZZY\_\_eM=hrqtuyxvxz~„„ƒ†‡ŠŠ‰Œ‘’‘”‘Ž“”•‡˜š˜›šœ›œÞ›œ›‘—¡ª¥¤¦¥¦§§¨««ª©¥¤¤¥¨§¥£§½ØŸ†˜x˜xmTžYndD"2FBF:N\Y4=‘ˆª¤Š—nu7%@W@Z™œp3'Govuq`:!#"/8 %*7KT[�þ  $& 318O>*,@DD1<T*+>$-/3  /$( 8+?( 4.EN7RP; A <"  !(.       Ö   2-%,6"(2}x|wrsz|x{uw{w4-,/,!$02@>ADFEFI92KQRRUWTSWXZ[^`^abdeeglklmkmlijhkkmnšrprqsrtsqrrspeny‚{y|{{}}~€Êzxxz}~{z~›¶Šz‡l‚kbX[h`|I*'5770<D?*;{y›|…gkD<MZO`ŽhB8I^\YSG7)+)37!"(1;B�ã      #         5:  ‹Ï   ^]b]XR\^UWRTXR  ###')**,(*,+,/00-246437= ;9<=:78;668;:A?=;=>?>=>A>=4;GOGCEÑFHHJGGJDAEHJKGFE4E+2?- &B0   )%B6(4 ;9 =;/)  !$�ô   .@$*B5'P%    x"&]*$#&0(;6`_   (    Ö   %#%%)–‘’‘–™œ˜“”——4%+5*'7+0FC=FL<IO:"Pbcggkpkghww|~€€‚…„ƒŠ‰‰Œ‹ŠŒŽ‹Œ’“”•–—˜–™™˜Ý–•‘ŠŽ˜¡ž¡Ÿ¢¡££¦©©§§££¤£¥¨©¦¤©¨´¦¶½¶½¼¼µ”‘‘«¢Å];.5gH;=;M&g_{›”l[jœN~8_œ Y,9&`vnkZY‰6/DQ!/;DMP�†  þ2;O079A/26P.D5<Y<8)-   ` N0+/((/>0D@NL#  .    ¸+5@6,3(}xwxx}~yupvyz+)!,-#*=58;>8>=1'BIIKKNSMNOVUZ\š]aa`ffehhfhgghceikjlmlmopmpßnpnmh`cowrvuxwxy|~{{|xvxxz~{|ˆ›”£§¥¤¨¡…ƒƒ”±O4.4Z;048D&`cvŠ„dZcˆPsqDd‘\:C6T^XPET~;7BI +14=;�Ó      !&    > $   6; ‘   …à   ]]Z\[_dcTLKRSV  !$%#$¿#"(),.,0022188456389653436679;=;:8:<<:;<7703;A?@=A?@BDFBBF@=BBDEÂ?..DF5JDPJ*'0D>o ( ' *7060*&?>  8<)$ G 1 �þ    $ 9'1 /)4P%H   0! %90)2%(&%.(&j] 4      œ1Zz: 7š—‘”™˜™˜––”þ(4."5$(" /#3==EFD;GJ?[ademkmrooustuvtpww}ƒ†ˆ‰‹‰ŒŒ’“’‘‹ˆ„‹ŠŽŽ‹‹Ž†‘˜™›˜š˜™šœœ ž£¡Š€œ—¿ ÏŸ˥¤Ä½ŸÀnH@ÊS+{^5*0¢RVJ~‚t¹µ“¦²™m€n_h_DRO?y?BP?63388:=�²     , #'%3/,2J8B8?5E[:N1  Ã(#$%74.1%08+36.ZK 1      é&)J_qB1€~wz~|xvuvuy! *":(%/,)-#6;464<AA@<BDHFMJKNONRQSSURMSSXWZZ_bcdbefdhjjijdia\`_eÕbceg_gmnmknklmoosqw~wu‰†©Œ¸­£¶“”°¨Ž±dAC´I/ovU@ABXXOrq}ežœƒ• ‰itd[\QAD?HwDCM:640.-27�ò              @<   ç  "3 ac]_ccdbUOMOMU     !&%#&&%*(&%(%&)&))+*//021421565Ü-+0/011..11)3564264475586;:%!6U1cVQb7:`Z8Y"l ;F$ ',MH6NP27%06-4!!)�þ  ')$D==G    1<)R@bi7-0@Q@YN>83@icO:*<?HD1 "-("   3      þ  "3A/23—’•–—˜š”—’—•™+&-$$(."8$16KaiE.';#fw…y~€‚‚ƒƒ„…~vzu‡Š‹’”–—™ž Ÿ£¢£šœ›œ›™˜”ˆƒ‘ˆx–¤£¦£¤§¦¨§¨§¥¡Â³Ìµ°Ã¿¥¾´Ïµ£¯Á¼Ÿ…šmBV¾œ±BQ|{m‚x@;?}|{¨¢ª¹¼­¬¬ÃÌ»£˜ y¨ÈٺПÃÊ­™rŽkhi�ø$   ' (?2*,;)-3657RJFF  +4$E3JS4/5@G;OPC:8?XNI@2<??=5*-,&,     Ü #>DNC<(7z|}€‚|wwtxv{# ,'$'23'+4,"#=+9ALQTJD@E1QZhZ[]\^_^`bb`b\TXTbddhlmorsvxâ{yzrZtssqoomdakfbYnwvwuvwvwuwvtwxŸµ¡›¬¤Ž¤¹Ÿ’«¤}ˆ_CU¬Š˜GQjmfyoKGClpoŠ£¢—”™¯³Ÿ†~‹k‘±¿¡´ˆª²—bz__Z�ƒÞ      %("?9"    „ ƒ«    `^ddbcf^VQKQOWþ     $'  #+7.13/12/67334/*+&/225::?DBEEGIJHIC1?>>=9:5+-92/#3<;=;<=;>79:66/NdIBZK.BDpQ:H\R7/D&%e<R(++1(%ž!7-<OSB/=]cFQDC-MjqNd&TjY;)<# �þ   HY((*"    )c9%0055-,)06NmdI.'0;JM;%@G9=d>)" 8.    þ  )1-V˜—•–œ›“‘’•—“"'( '-.!#"4<X?3<ZI|i¢„ˆˆŽx€Š‡†…rDIPx‚”‘•“–™—Ÿ¡¢£¢¢“››”’•hYFˆ~[hm““§¤¦©«§««©©§Â€³«¸­µŸŸ¢–•„†®±kuwo]l…Ž«²gLlqu‰sYvdrlqu_|•™£º¾È¹µ•б§®”ºÕ´ÅÄά„„Ÿ’ˆ�þ$    $&)4S_,*2A7#(8=C>! # $'R8'6;;85<58:H]PF;58=FIA)#.AH>CZ?4-+!,'#  þ  ,?99E5Rx~zx}~wtswxv"&'2)# .&/915=@/8:ECVKHO^NeW„qbgfom]flfdcT<CF^bnkmoqvrxzz|{{|k^uunotnOH;f[HPXkj|yy{}y{zyyzÂg˜¡–œ‡‹…‡xz™fnpcXjw†š–_Pbek}kXk[ja\__Wjy~‰Ÿ£§œ“|²˜‘š‚¦¸–ª¨°‘su„v�þ    '         %  C9" )    ƒ›    `[faZ`d]UNNRQN þ    -$N9,9:=;,6?;65*'.98>:@FBGKJMLLK>3CB8;?8!5) 11DAB@A==<?<;*IBN>D&%$);)+SN ( &0HR;!&5)-%'ž#(21-EIOG]=WB=K7Qa<WRY5),A8%�ö     2H :$ &/.?YXA+-*F#       #$gb-,)49 +#'+J+VjHXC531 +F9<'   þ "XP70-—‘•”•š›”’—–“• (& )0 $CBR.4.3:,@€btO‚‰xƒˆ„ƒiLnƒmjs$*KI\†…„†¤ž{aŒ•™››Ÿ†T•k˜w3E3jH5R8r`•ž”•ǘ§¤©¨^l‰sŠw€…œ•€”—`t˜‹OafW¨¨rš¹µˆzo……ZŠ—«½Ã¹ª´¿³À¯®´¤w³³vŒt¢ÃÆÆÂ¾›«ŠŽ·«�þ     :G#G'"4,1AA8QO=-1+<*     (  *&WK$#6289&/)* ,?. K[GTG>82!%?9:%  þ%[WE$*82€x{y{€wuxvsv 7.1@@28MMVAD>AICNo[aLkl\eikjWGXdTSY(7OHNfdbeƒ|]Nlqqtvx]@lo_SrY4<6U=2D=YGntsrpllvszyÂJ`vipvgrxŠ„v„‚ƒ\o‰wN^^Y–“j—˜{mivyTou…“™•„‘𙋋‘a”‘d{eަ¦§¦¡‚“z„£�à       !    )2      >7   &      Š þ * `\b_^cbbUQVQIM    "01!/635%)6'%, 0240JG-!:=@CDF3;>-$;% ! 9>>76.198>9 #¾)<5(=BD(A3 )TE"=<D4.,36"/2HZd]QZ]MU?>LR.A<6#@UTXQG+A/?U7�Š    þ =*2B:ahinU.PV61@6'  " #lZ &,,'+"9d/QZZ`tv\BNmOC26!# *   B;,þ"-›Œ’••›˜”•–•• ('!-:0'(;O;.>GT.\qu†Hp{Rkbup€tLkLNS/1A6F~g_nƒwX?V‰’‚^C„ˆ_hz^4N{ƒA1Vm£f„n†\;_„¤¥§§^Bu;b—ke`uQQG|i²g{€lmTl…ƒt¬«‰=S^>4DiŠ‘±¿ÊÓ×ÕÖÔÚ᯵ÔÊ ‰…©¬š £®‚Šœš®°�þ   %%(C(,+/(:;TYXXF.IJ7.46'! "! #!'  YH ""'!%#3U1EOQRa[K>?WFA11!%."! þ !'EE?#,/.sy{|~zvtwtu 6/$)1AG>8:GRICJQYCZdfqNcfM[Wf`idHWGGH8>IDGdSOZm_K=LhhjnaD6dbEQYN9Fjo@0Hb„RaRcD6G\srwwLAeF]½b^^slWTHoabppcbRdyth€‘’xHTZJ>J]op‹”¦«¨©¨­´ˆ“«¡„omˆˆ{‚‡hr‚€“�Š   Þ    %&&'       ;4     (&!   ¯     0  dX_``dd`WPOOJLþ   % &"$*%!)!-$/56<110 $ 00 !9*- "55;8-+$!/!"+/)",6-"25?.Ÿ07Wamx{uusv\hrfM=8GD7@>?%+68GA�þ    Z}q*A@V[~ona^fRC7A.1) "&m]$)46#!#2CFbzcjwlVD@GC/!) 5/*$% þ  !1œŠ“”œ››˜””–š’!#! )(HJ.5Q'4>B5sd{Š`HxV{fh†¶’xS11;68=rŽhU[cŒNsi‚{{d9:j‚\KEOGTcK+JPs“giBM=7j~˜¡¡›ÂaYQ8N_cTY{kW&AU^‹_NF13?n|~‰‡o‡V,Zu_EHLc‚ ©¸ÂÌÎÇÆÏ¨½èæéêìåãÞÞÖ×ÓËÉ¿ÀÐ�þ    "$Pha .?8IKl`]SORNG@E-23*%,&!$ !YK %! '& #)$'3A@UaTY_VKC>>:. %)"88,")0,þ '#(*!0*8‚qwz{€~}zwtyzw/!'"348=9NO>BU?DKOFi_mu_PlVkasbr†fP@>HDDFhy_SVZxL`[e\a_P69S_KE@IIJXO6ADh[Q<F76NXhmpoÂOQMBR[^TXndY=GYa`VL<>CbjlwydsS3Vj[LMOTez€Ž˜¡¢œ›£„™¾¼À¿À»»¶µ°±®¨¥ž©�¼     .) "8%'    þ   <7   +!!%      dV\_`da^WSPQOM      'þ! !%O>" $01! +(** !, +: *-43'  #: "&&-1"% '3EN_irrkjvYs”Ž‹ˆ…€zxuƒnhaep�Æ$8A[N@<dƒe|€{’}tdnpcF.<NZ,!!"&("þ&o["&   +.>Wlh>=OH%&:48'"'--  -//I+:˜ŒŽŽ˜™˜“””“•Œ%   !/E0`{sM!OCl~DLcQh‚nuy‹›÷šg|Y\K&BZ{\gXo^zhK[kfbcC9RjJ?-._^7YDLA.E7,-;Ik‘”€,*99HIhI:5DY}E'T)1Y;PZ[\Y/hh|wIBTPSXSYX¢£¨¬¬´ÅÔ¡½èêìïïîïíìîðîðïïðï�– þ(??VMGGXpYjmwcxjdUY]VE6?EN70$),%04)"^I   &)9KYV=?E=%"*510*/2!20 *((@0 7sutt}|þzutvwws'   /("(.9I0>[ojR6NJcnHN`Sdrjnox„ƒ^kW\R9JXn^bWcXn[DJ[ZUV?=FN<>42ZP8WAB:4C;+15:HR^a^S#*;9GI`L@=HSjD'7U+4Q@HKOP£M7\Vd`A=ONQUIONnz{…†Œœ¨~œÃÃÈËÌËËÊỄÏÎÏÏÍ�þ  !0!*-3'7-*!!$!     B7            Ä   dYZ^\c_ZRSTSPL   )' $%Í)<<$ #* =  "#  $""! #  © $ #$'(*)>JJPVVYp€Zx›œ £Ÿž ¡ ¢¦§©©¨¨©�þ     , 57&9?E4!NWMNfhggnk\xqiS^WNH</494%.$:<3"$%+lX 14 &/>8T7[_i7" -:B/1;%þ(=1 $& 6ž‘””—™–—™““˜“= "! )e0,/SŠNaXudY>—‡†v2T{‹”£‹sMXpeVQqc~rSRjtR‰„wTRz,9a=@94_J(!*,"?G %66MWaePÂ-)4OO7+"1;ZFI4>^]uyx‚«²©®·«¿ÏÐÄÍÖÝãÜÑÊÁ¾»¸·³¼Ä–»åéìïñðòðîðíîêëêîì�   þ ( 2C8<FND:TYQO^b]Y_[Qe`ZJROJD?6;A?64*@B='"(ZF!  "#  !+99F8OKL+ .53)5=.$.;-%  !$" 2…þvwyy||ywxuuyx9"'/$4_;6%;Sy}P+VUg\QE€rrhBXow~†‹tdQYh_XUg^rfPQY[GqnhRQg3:K5?;3U@'%"(,!%>@$"*(38?=70*8GM:3'6@P@D:DOM¤flivqŠ‘’‘…—ª®¡¨³»½µ« —”ŽŽŒ•›t˜¾ÃÆÉΈÊËÎÉÊÇÈÈËÉ�  ò    !*$   ?3            í  l]]a`a_ZUVOPTN    & -0 #'%)& *7@?'!(""-&%  ! ¾   "**9;;DDS[h][E`{}q{†‹Œˆ~tkeaa`\ktSx•› ¥¤£¥†§§¨¦§¥¦§�þ  #7 %F8'*(2+H_her€{aSivuk^T>DT@F=>93;/).))&#"##*oY%$=$ &'!$("=bmW&#"*0M?:ˆ<D`^T;Ž !˜’˜™——•˜þ’—›”<2!"$>qhO1JNxk&9E|pPuŠtdT0dRo¡¥‰`[hW¤ŠjXv{œy{IOWM@yu[Qg‚N‚gPP47GHE[We[Q€Œxo|‹Ž—Ÿ±½¿½ÉÄÉÑäôøùô¶žÂøðîèåçäØÛÕÌÇĦÆÃ¼¹ºº¾ÃÃÇÌÏÏÐÎÊÌÉÇ¿»ˆ‘¶¼ÃÉÍÍÓ×ÙÚÛÙÚÛÜÞ�þ !6+-/6+#<PGADEF9MZ][cigXO[bc`VPAEQHJDE>;?>64*%($%%&%'[I, . %#!%*(+)*:KQE! %-),5F@8þ8ATTOB& ! €y~~|y{zxrv{w<9#% %!"$!,1#?eaJ6ORi{a/<ImdSgo`XP?WKc‡‰mRQZWŒubUek„hgKJJGA`aVOZrMiXPL89>A?WN[WMrzlfqy|~|ƒˆš§ª®©µ±´¼Ë×ßæâ ‡¤ÜÏËÄÁ¾¹°±«£¡ŸŸ›–““••šœž¤¥˜£¡¢Ÿž™–fr“𢦦«­²µµ´³³··´�À           '(#%"  «  ?/      ¹       d`fdcb\[WTIORH   þ$ -"  =?$;'"3 ";("&839;3JNHHQUX[[\aq~‡„’ŠŠ’¤±¾¿¾qXt²¦¤Ÿ˜‘…ˆ~uwppmjhjnnrot|}|{xrvwu“toEQgiq{|~…ˆ’Ž”—”•�þ     #!$$7#940\THcd\z‡‚ofu€pZYklT6&8PVKPD5D4#))"&,*-uW 56 '(/7'$,!2:FþeSSJiT'.$œ–œ–˜—›šš’–”6( !MŒc_¦P[RM1=K^Œ«”L^hN6v^E|o_j}v`ŠŸ„ŽnY_x‘‰}††”ˆŽÛ´¢¬³ÈÍÒØßãëîîìéíñôõùùúùö÷öø‚÷÷öøö¸ôôëÇ–ÖïíëìíïìîîíêæäàÜÜÚÕÑÍÊËËÊËÌÊÇÇĽ¿n޶³²±³·¸¼¾ÁÂÄÂÁÉÐ×�Ï #& *!.476/#(D8IGEYQJ\ZVemi\W`idXT\^P<-7?OMEIG:A5$-+(+-*'`J þ(&! %"+03'(2*2;>PEHG\P3:*#‚u|‚}~|}zqt~w2,#,-#$ErTTOSKH8@ITz“xENUD7^OEdZNR`[Usm‰¤qybTXkmƒworu„{€À¢Ž™£³·º½ÆËÒÕÐÑÏÏÔרÛÆÕ×ÖÚÙÚØÙÙÛר×רÕЮ€¹ÌÊÇÈÍËÆÉÊÈÉÿ¹¶µ´±©¦¤¦¦¤¦¥¤£¢ž—˜Ln‘ŒŽ“•—› ¡ŸŸ¦«®�…   Ð      ")( $(%#%  D2  þ       %  e\chbe__]XJOVM    %H,:$ &#$.+C47(! 0:SH¦>PEGSKRŠs^kx…‰‘‘›¥²®«¯²¬«±µ¸¯µ³°­¬³°±³µ¯°±²°²©‡Q¥££¥¥¨¥¨£™—˜•””ŽŠ†€ƒ‚€}}{{ywsp,Pgadfgmqqx{}|zz†‰�þ     "$'!'$'&#$#87/P`I\nd‰}tgg{sbEadE?"'ZfNZfoZ]B/+('(5xX$#")#).+   &%#%&!!'.?Ú:6G9\f`PB7&(#46!!Bœ’˜šš›˜–šœ™–Ÿ˜ '(#-MdA9mcKWGmcK>xQ<,c˜{K“pf£Ÿ’®¾ÃÒÓâÛæéãæíôöùúúûúú÷÷øø÷ööõõöòóˆôòôóóôóóò‡ððóòññðòŠôôóõõò»ÍôóòóòñóòïíîíììëéäåàÜ×ÓÎÍÅü±©„‘¦¯¶¹¼»¶³±°­¬©™ ¡�þ   )/)''(&!$)((#'0,(6/EC?S\OVaXmd[SS^]XGWYJE.&&3NXLSW`TSC31+*)/dK*& " $&%++#$#$&()(&" &%%$)4:Û53<8NYUI@6+80:9(#3‚x}~€|z||zvz  ),&,>T?8_O>FDaXI?eM@/Q{c?}c[ˆ‡•¥«³¸Ä¾ÈÌÈÌÑØÚÜÞ¤ßáÜÙÚÝÞÜ×ÕרÖÐÐÒÒÑÓÒÓÒÒÓÓÔÒÑÑÏÐÒÑÏÑÎÓ¹ÔÔÕÖÖ¤°ÕÓÐÐÓÑÍÑÒÒÐËÊÇÇÅÄÄ¿½¼¼ºµ°­©¨¡Ÿ˜ˆcoƒŒ’”•–”‘ŽŒŠ}„ƒ�å      '"*& %#! !"' H5     þ   !# e]_^df_\\WTQWV    "  # A5G30WYX[l}‚ƒŒ‘‘˜¡ž£¨®´¶´µ¸¶º¾¸­±¶º¸®’­®­­©¬¬«ª¬«ª©ª«©ª«ªÃ©«©«¬«¬«ª®­¬±±²{±­­°®®­ª®°©¤¥¨¨©¨£ž¢¡Ÿ–‹†ƒƒ|yqh`CN[]jsurpnlmkjjX_\[�Û  !#  "/NikLj€‰‘|tcaW0)<G;/7<G495EMM=4)(.07w[$' '0)1+&ì!#%,,1,' "$!0%,.//,2AKFII25:>-:?Oš“™›œš“–™›™ Ž!"$1&-+274?[¢uš³ÉÄÆ×ÐÜÖâäéðñêôññô÷øùùø÷öõ‹ôööôõôôóòóóôóòñŠòóõôóôóóôôõƒöõõöõ…ôõôôõô”õóòòóññïîìä×ÏÏÐÍÍÊÏÕÙ›Ô×ÓÓÙÔÐËÆ¿Á¬¨ ¤››™–…~}~prno�þ #-#"%!##(!)*%((!#'(-26I[[FVainbaWUQ<7<B=57:D<>;BKJE=2-113aJ'-$+4+2(!"# ',) $$" !)'++-)( !!#(& "0./á-+,*-<EDB>4:;>48;@z}€ƒvxy{wq  (/.6NorŒj†Ÿ±®°½ºÁ½ËÏÍÎÖÒÙÔÖÓØßßÛÚØÔÕ×ÕÔÖÖÕÕÔÔÒÒÓÑÐÓÔÓ¢ÒÐÍÏÏÑÒÔÓÒÕÓÒÓÔÖÔÔÕÖÙ×ÖÖÕØ×ÕÕØÕÕÖÖÕ¶ÔÔÖÔÖÕÑÑÒÑÏÎÌÉÁ±ª©ª§¨¥ª¯±²²­¯¬¬³­ª¥ ˜š‡ƒyxzvmcc``dWWQU�á          $!(-2'#  C1          Øc]_abd^VWTVQVO  ",CJ`EW_u…ƒ•’——¤ª©¥ª±®°·¯±¸Á¶´³¯®¯­«±±­­°°«¨ª«ª¬®°’®®¯«©®°®°°¯¯®¯°±¯°²Å´µ³¹»º»·³³±²®±µ±²·´³±¯²²­®©¨£˜…„†„‡…Ž“’ŠŠ…‰Ž‰„}xqxb^ZYWTRMGCA?@C8834�þ %% #$  $(('#:PTZqb9HY6$.D78[V``RPZZXQQ[aaN]xaGNWWXSM>!& %, "! !#(%!*)(($%(")% !&¾5, +%-/!@O4&:''D6O˜‡“š••”’”˜—žžnjdfpwƒ—›šŸ¦½Ùãàåçäâêìñóóòôôóõ‘óóõôóõóóòïðòñîðîïîñíïî’ïññïîðïîîíñòññòóóôõôõôöõöõõöõöõöö÷÷ö¶÷õôóñíæääåççåéæáÜÛÛØÛÙÐÍѾÆÃƵ«±§——Œˆ„ykcttnkjf`WVR\NJNM�þ *%-/((#%&  !"!'+).5.;CEIZS9@L9./>;<MIQTNJPRQPNSUVJPaLAKRRPLLC).$,-$##! "!!#&&"''(%#&*$"" '²+&$ ** 5;+&3*+84D}nxzzystvxw}\\WU^hp{y|y}„›·¾¹½ÂÜËÍÕÕÓÒ×ÙÓ×Ö×ÓÐÑÔÓÓÒÒÓÑÏÏÑÐÌÐÐÏÍÍËÏÍÏÐÊÌÏÍÊËÍÐÎÌÍËËÉËÇÆÏÏÑÓÒÎÐÑÔÕÔÓÔÕÔÖ×Ô××ÔÔÙÙØ×ØØ×ØÖÙÕÓÑÑËÃÀ¬ÂÁ¿ÂÀº´±³¯±°¨¥§˜ ›ž‘……wuhbeWJCTRPNKGD>=<E8496�ú       ! $E2         — "cT_f\]XRÅPOUZBB@6>HMXUUSY]pŒ““™˜™£¨­¬ª«²³¯²°¯°¯­²°¯²¯¬­­©¬«©ª¨©§ªª¬¯°®¨ª§ªª©®²š®¯²°«±®³´³³¶µ¶¸·µ¶´µ·¶µ··µ½¿ÀÀ¿Á¾½»¾Àº·»²­¦žžœ››žž¡š˜’ŽŠŽ‰„€ƒs|xwf`iXLI@<>1.(10,/-+*)'&0&#)(�þ  "#<H?HSRSJ`bfIGcAc[K:Txjwsz ŠŒ}‰ƒ|Žtr‚’qPFJ&( "%,2'"8.$ $&4A/'2118CUJSNKP¼de`feemsw…އ¤« ±«¯´µ´³¯­­ Ÿ¢œ›°ÈÐÐþ¼ºÀ»·¼¾ÂÂÈÙãååæãàãêíìîíï’ðîðññòóóõõööõõööõôóƒññðï”ððîíîíîîððïïððòðïñòñï”ññòñððîïïñòóóõõòóöõöô¸õõóóïïíìèäßÉ«¸ÈÊÆÆÁ³²¶¯ª£œ”–˜Š…Šˆ|rha^VIJXYPaflgellikiin�þ    "#"&$+>>9EMLH?SSV=:Q@UL>9RiYbbg„rstkjpjhxk]Xkxw^JFH-$*" %&+)&'$&1*.1:>=EACI¼OSSYRU[abhslƒ€~Š‘—–•”Œ€‚z{ŽŸ¦¥š–•”™•“”˜››¡±º¼¿¿¾º½ÄÈÉÉÊËýÊËÌÍÍÏÑÑÓÕÕÓÔÒÓÖÔÒÐÓÓÒÍÏÊÌËÊÊÌÉÉÈÈÊÌËÌÉËÉÎÊÈÇÉÐÍËÈÈÉÊÍÌÌÊÉÈÌÑÎÒÑÐÍÌÏÑÏÐÏÐÏÓÏÌÆÆÄÂÀ¹º¤‹’¡¡œžš‹ˆƒ~xofxpte_hdZPD@=2.1>@<FJONLQRQTV�œ      þ   $  %#<+-/&$+&'63@9487$       .-41--6<==:<8A>BJFX^QTbew€}|uqpb^^TSÒex|pjlksrlkswt{Š•˜——•‘– ¤£¢¡§§¥¦§ª«­­°°²µ´¹¼¼»¶´¶·´³°­¯¯®°²°ª¨ª«­¯¯®­®®³³°°²³¯±²°²Ì®­¬¨®®°±²±´µ¯¶º¸ºµ³´µ±«­¬©£Ÿ˜‘ƒjrzyvvuedg^WUOC?MIJ99B>7-)$"')(37><8<<=<<?�‚þ! $&&  /1(&<A4E_mwz_Œˆ‘†‘–Žƒq™š¯~†ƒw~‹œŽˆgc|~jttpsq^S6"2,!%$,;DILTe]bkok„tww|~ˆŒ‹ˆ‹ŽŒ¢ ¨­µ²´µ¼½ÅÈΗÐÓÙÛÖ×ÔÓÖÕÉÌÆ©¯º°±·²³·¹ž«¸ÓÒÖ××ÒÔÓÔÑÓÑÚÚÙÙÜÝááäçéëìêéèéçêéêììîïòòóóôõŠöõöõööõ÷÷öõôòñðïññîììíìííìí‚ìêëÌêçæãçèêíììéçåßáßÜ×ÓÑÎÊ¿¹³´«­«¤—}ZoŠŠ…Ž•””Ÿ—Œ†„}pˆ€‰ƒ€‡ŒŽ‘‘‹Ž™¡¬«ª¤¥©¥¤–“’’Ž�–!$  %)(Ó-'#.1+.==:EWZ\dVgohsjrvqh\fuozhnmdhrrmYS`cY^]SYWOG4*3-#&+43<;>THKPVQcX]_`bfµhijnl}z…‹ŽŽ’’𣤧¬¯««©¦©§œ¢ž‹™‘‘•‘”•{{}•¯¬´³°®­­«‘²²³³µ¶º¼ÀÁÆÅÆÆÄÃÄÂóÅÇÈÊÊÎÐÐÑÓÑÑÏÓÙØ×ÓÖÙÛÕÖ×ÖÑÏÒÑÏÏÎËÊËÊÊÈÉÉËÊÉÆÆËÈÄÅÅÇÇÅÁ¿º¾¿ÅÇÈÊý¶¸¶³²ª§¥£–‘‹Ž‚…‚|oX6MfgaippqzrgdaXMe\fc`ikrpstno{ƒŒŠ†‰Œ‰ˆ|{{w{u�›     õ !%&+&-'-73&'58CL8 ###(5-%"& *=3&!   "$1*))/)607<8?G;;><9=;NGSV`]Z^adlnqw{‚†€{|}{rvxqz‚y´tuuvWTRkŒŽ‘‹‡ˆŠˆ‡Š‘“‘Ž“’™—›Ÿ¥¥¢žœžŸ¡Ÿ¤¥¤¨§¬®°²±·¹º†¹»¾»¼¾¼‹··¸µ°¬ª«¯°«¨Ú§©®§ª­ª§¨§¤¤£¥¡™—‘˜œ¢¤£¡œ—œ‘”•€{zyvjba`STTNC1*?;7@IHFPH?>=5,A=C??FJVS[WTW^hnmnjruqjgfecbg_�Ý&""' &&!$+.! &(-%'%/44==_qmW|—‹–“š‡“`}ƒv‹v‹h‹‘™ž’‘~ˆ™¢—swŽ’€ux‹…’—¥¬°¯«¬®²ª®¯¶¿ª¹±´³²®¬¨¦¦ª­¬¤¦¡ŸŸ ž ¨©¨¨«±·¿À¿»¼»¸ÃÃÆÈÆÈɯÊ˾ÀÊ¿»ÅÀÅȱ–ž Æ÷õ÷ö÷÷öõôôòðïðïððïîëìïðñòððïîíîì˜èçèèéëíïñòñððññôöôö÷÷õö÷õãóóïðòìëíìëéèæãçãààÜÞÝÛÍÙÖÌÊÂÀº´¯±ª£¤¡ª¨¦ —˜™•–‘ŽŽ‹Œ’‰Šx“‘”–˜ž¥³°²¶À»·ÁÃÂÂÁ¾¸µ½»¾¾Ä½¾ÃÁ½ÀÀÁÀÃÄÇÅÄĽ�þ* #%$!"!&,&&%,0 (&(-3.-)006B?Q\ZO`rlwsyiqL^jg\j\kWmqu|trhkzwzeemoke]Yvtu}‹ŽŽŠ‹‘‰‹‘˜”“ˆ‰‰ˆ…‚}~„‚|~|xwxswx}|„ˆ‹“þ–•’”“’œ ¡ž ¢¢  ¡¤žŸªŸš¡œ¢¢s{| ÓÑÙÔÔÕ×ÖÑÏÎÎËÎÍÌËÎÊÈÊÍÎÍÐÑÏÍËÌÊÈÊÇÄÆÇÅÆÇÊÍÌÍËÎÏÑÑÓÖ×Ù××ÙÙÕÒÕÓÐÒÎÌËÇÈÊÈÇÄÅ¿À¾º»¶º¹µ¬µ¯££›š•‹Â„ƒ‡„ƒtutpqmjiegkmcdWbrmoqu|„ŽŒ’œ––Ÿžž žŸœ˜–œ›ž¡œ¡¡œž  ¡¤¥©¨¦¦¡�Ç      $  0,3/5$,"+%% ,$--04..*/;??=698=ø?:JLMR\dghc_\eb^`bgnhee[Y[\UTPPONTQKNLHGE=BDIIKPTW[egdbdcdoswxutyxuru€…ˆ‘І‡‚mKST{½ÀÁ½ÁÀÀ½½»¼µ´·³²±®¯©ª¬«²´¶´­«­®©§©¨¥£ù©««°°¯¬­¯®µº·º¾¼½»»·³´¶°«¯­¦£¥¥¡Ÿ œ™¢›‘‘‹’‘‹‡€tvmlkf]^XOYU\ZZQCFFCEBB@?=AC;>9DOIHMUXblksstt‚‚~{{ƒ…†‡‚‰†‡†Š‰Ž‘•’‘“�Û +#(%'.'+4)"'*) +92,*.6@5.9@:DTNRYnމŸª°¶±À¶ÀºÁÇÉÐÖÕ×ÖÕÎÏÑÌËÐÑÒÐÐÒÔÑÐÒÖÄuéèèáØÒÔÕÓÌÀ·°§¦ž››Ÿ££¦ª«±³´¸º¹½¼¾³½¼²®¯²¶¹½º¾ÀÃÉÌÑ×ÙÚÞÝÚØÖÕÔÑËÉÉÇ®Â×͹³¾ÕË»—›£Êôôõöõöõ÷ƒõööõöšõö÷÷ööôòóóòðîìëîëéæãÙÜäæäãàÐÝÛÓÏÇǺ²°°ÃÆÃ¾ºµ»³¨­¥¤¢™›Ÿ‹¡£–‘’Š‘˜˜™žšžŸ£ž“—šœ¤¤¨«¯µº¿¾ÇÂÄÈÈÂÁÂÃÃÇÊÅÄÃľ¿¾¾ÁÄŒÈÆÆÈÉÉÇÉÉÊÈÊÉ…ÈÆÇÃÂÄÃ�¶#*!$&$*'(*0-%$*&24.0+.7;4.9A:BNPVWbntv}ˆ’‹š•˜—™œ¡¦¬«­þ¥¤¥¡ž£¤¥¥§¦©§¦¦¬¡[h¿¿À¸°¨ª©¦Ÿ•Žˆ~}wxxtsw||‚ƒˆ‹‹’“––˜˜—••Š…‡‰‹“’••™Ÿ¢¥¬¯²¶¶´²±®­ª¥£¢¡Ž µ«™’›¯¦—ty~¡ÎÑÕÖÙÚÙÕÒÖÚÙ×ÛÙ×ÔÕÑÓÕÖÔÓÕŠÙØØ××ÔØÖÑÏÒ§ÎÌÊÇÆÆÅÄÃÀµ·¿ÈÅÃÀÂÀ»·°±§©•’¡š”’•Ž…‰~Œutzh{~qlkkelt¥yy}~|plsvx€„…ˆŽ•™˜ž ¡žŸ¡£¤¢ Ÿ  ’ž ¢¢¡§¥¥¦§§¥¦§©¨¨§¨„§§¥¥§�þ    ! # '&).55?FAEKRL_[Wbgehpptrvojlnmjoorsxw||{z~y=F”—•Œ…‚‚€{uhbZPNGJKGDJNLQWU^aahfgmnpmolgZSUZ[]ecgjm¦tvz‚‡ŠŽ‘ދЇ‡yz~r‡ž–€v}‘…uMQX|¹º¼»¾ÂÇÅÃÅÅÂÃÁ¾þ»¹¸·»½¿Á½»»¼¹·»¹¶¶³°­ª¨¨«§¡ž—–£¥¡¡Ÿ žœ™ŠŒˆ‡ztmavxskefgb\]SQOJMO@OL?@A=:DHGIINWTWREBINQY]`]cmqxw|}€€z‚ƒˆ„ƒ‚€„‚€ƒ€ƒ†‰ŠŽ‹Ž‘Ž‘‘”‘”Œ‘”�þ–‘‰Œˆ–‹˜ ˜–›ž–—¤µ½½ÇËÏÙØ×ÚÚÝßííòïêáæèåäååæçäßÞÛÜÛÙÙÖÔÔÕÖÖ×ÛÜÙÚÞÛØÙÜÞàáæÐu™ïçèæàÙÒÌÅ¿¼´­¡ ¡žŸ¢ ª°´¹ÃÆÊÉÆÊÌÌÍÓÙàâçëìçàÜÖÔÐËÈý¨¾ÂÇÌÖØÙÛáäåçéêãÝ×Å^›Ëº¶³¹ÅË«—¤Äîïòñóóôöôœõ÷õôñóôñòññóññïïíëèèäâãâÝÛØÖÌÕËž»·®œ‚ƒ‹Œ™–…„{‚tyu‰˜œ•’”Œ€~}†ƒ€‚ƒ‰Ž˜•”œ¥¨ª¶·¹¼¿ÃÄÆÈÊÍÏÎÏÎËËÇÆÇÇÆÇÈÇÈÁÃÄÆÇÇÈ‚ÆÈɇÈÊÉÉËÊÈÉŒÇÊËÊÉËÊËÌÊÉÊÈÇ�þ€|tstrzt{~y||z‹›ž¦­²¶¼ÂÀÂÀÆÃÌÓÒÊÄ·¿À¼»»½½¿¼·¶±²²®±®ª««¬­­±±¯±³²®®³´·¹¾«ZqÇÀÁ½¸¯©£˜”Œ‡{zzxx{x€ˆŒ’›Ÿ ž£¥§©­³º»¿ÃÄÅ»´­«§£ž™–þ˜œŸ¤¬±²´º¾ÀÁÀÁ¼¶®Dyªš–’• ¦‰uyœÆËÍÎÐÐÑÒÏÐÒÕÒÒÑÒÏÏÌÑÐÍÍÌÉÉËÇÇÄ¿¾¼¼º·¶´±§©¦¤›™’‰ycfnp{pwrodc_`\RSQcsxsoqkiiZ^[[c`[^\^emnqqoyƒ …“”–™œ ££§©§©§¥¥£¢££¢¡££¤Ÿ¡¢££¤œ¦¦¥§¦§¨¨§©§§¦§¨¦¨©ª¨©¨««ª©©§ª�ª]ZWQQPURV[ZYZX\UW`p||‡ˆ™›œž¥Ÿœ©««£™‡”ŒŽþ‰…ˆƒ„‚{zy{‚…ƒ‚ˆ…ƒˆŽ•>J𙕒Єzvpmf^NMMKKNKT[beqrx|{„†’𤧧˜•Š€~zrrknuy}‡’™œž¡¦¨˜Œ~.^‘‚~vv€†iPSXv«¬®³¸¾ÁÀÀ¿½¿Âž¾¹¹º¶¶¯³µ²³³´­ª«§Ÿ›Ÿœš••”‡‡„€}xum^S@FMKVLSLKE@99://,9HOGCE?AB47739:87œ:AGMGIV]_`imppuzz|}…‹Š‹‰„†ˆ‡“……„…‡†‹Šˆˆ‰‡‰ˆ‰Œ–‘‘”‘’’‘•‘”•–•—““—™�±¾¸µ³¯®°­­«®°³¶µº»¾ÂÈÌÕÚßáäçèéæèéæèéêèæççèçèæçæêêíñþòðîìíìêéçéèêëêåæèêèååÎlŽä×ÓÏÍËÊÉÆÂÁÁ¾»¼»½ÀÇÊÔÔÑÑÓÕ×ÙÞáåèêìîòóõôõõôöóñíæâÝ×ÐÏÍÌÑÕÜÝáäãââæéêðÑḛ°²«¸ÈªœŸ»ÙÑÓØÑÒÝäãàÞÞÚÜÚÖÓÒÊÉþÃû¶´³«¢£¥§¡¢¥ª  ¡›š›ŸŸ›š—œ~jebhsmmk`fgX^ky€xƒ“˜˜Ÿ §§«¬°¶¼»¸¸½ÀÂÆÅĽ¾À¿½»º½¼º¼¿ÁÃÄÃÆÅÇÉÉÇÇÆÆÉÇÉÉÈÆÅÆÆÇÉÇÆÇÆÈÈÇÆÈÈÉËÊÊÌÌËÊÏÎÌŽÌÓÖÝÔÏÎÏÎÍÊÈÈÇÈÉ�²–’‹ˆ†ˆ‡„…ˆˆŒŽŽ‘‘”šž£«°µ·½ÂÃÂÀÁÂÁÃÂÅÂÀ¿ÀÁÀÀ¿¾½ÃÄÈËÎ×ÉÈÆÇÉÄÁ¿ÁÂÅÆÃ¼½ÀÃÁÀ¿§Mh¼±¬§¦¤¢¡Ÿœ™›—””•—˜§¨¥§©«­°¶º¾ÁÅÆÉËÏÐÏÕÔÏÕÎÈÆÁ»¶±ª¨¦¤¦¬³´¸»¹º¼ÀÂÞ¤G^©’‘‘Š–£†yy|”°ª¬±­°¸¿½·¶¸±¶´®®¬£¡œ•‘ŽŽ‡~€{ƒ…}}xtx}{vwuykYIEDHQGJK?DC:CN]b\cosxxz~„…‹ŠŽ“—š“ Ÿœ˜˜››™˜˜›š˜™ž¡£ £†¦¦¤¥¢¤¥£¤ƒ¥¥¤¢†¥¦¥¤¦¦¨–©©«¨¨ª©ª©®³·¯¬«­­«©¨¨ª©ª�óofa_]Z^\Z[``deffgjpww‚‡Ž‘”š ˜™œ–™šš™—”––——š˜‘š›¡§¨§§©¢Ÿžš—–—˜›š‘˜›œ—šŽ5C“Œˆ€€€}|wwyrlnmnquw€‚€…‰—˜Ÿ£§¬°¸¼¿¾¿·Âº²©¢œ–Їƒƒˆ“š›šœ¢¥¨«†4I“vxwlv„fVTQj‡ˆ””Žžª¤œ››•˜•Ó‡ƒ{{toind][\[R\^\VUZSOTYSQSPRC5)'&*/)*)#&' &0=?=CMPSQ[\[bcdomsytq{zy~{vz}~|xx~zxy„‡†Šˆ‰ŠŠ‰®ŒŽŒŒŠ‹Ž‘ŽŒ‹ŠˆˆŒŒ‘‘’‘‘”—’‘‘”š¡¥š™˜˜—˜—••™™˜�©ÇÅÿ½¼º¹²´¬©ª®±±³³·³®±·¾ÊÓØØÎÒÝâäèêèçéëìë…ììðññóŽõööõõóñïîîìëìêéþæäâåÆJåàÝÚØØ×ÔÓÐÎÐÔ×ÚÜÝßàßÝÛÖÍÏÓÛßæéêìïòóõôööõõöõõöõòñìçâÙÎÇ¿º¿ÁÌÔÓÒÔÖØØÓ½H^Ø»µÀ·ÈÌ®œœ¨¢™•œˆ~‘›œ§££¢¤ ¢™“‘ŽŒŒ‘ŠŒˆŽ’”Š†Õƒ‚†ˆ‹‡†‚‡~tpu„•š ­«µ¹½ÄÅÏÐÐÑÕØÖØØ×ÔÓÐÑÊÈÈÆÂÀÃÄÁÀ¾À½¿ÅÁÂÂÅÃÄÆÆÈÈÊÈÅÇÇÆÇÇÈÉÉÇÇÉÈÉÈÇÉËÊ£ÇÊÊÉÉËÍÌËÉÉËÍÌÎÎÌÉÍËËÊÎÏÓÏËËÉÉËÇ¿ÃÄÆÅ�ßš—˜–”’‘Š‹…„‡‰‰ŠŠŒ†Š– ª­­¦ª´º¿ÃÆÃÂÄÇÈÇÆÇÅÇÌÎÍÐÑÐÒÓÓÕÓÓÐÌÊÈÇÆÇÅÂÁÁ¿½¼¿¨0X¼·³¯®¯®««§¥¨ª²³µµ·¸´þ­¥¦©¯¶¿ÃÄÆÌÏÍÏÓÔÕÔÒÑÓÏÎÌÊÊÆÁ¸°§Ÿ˜•—™£¬««­²±²¬”1A²›•œ–£¦Šyy{„~uqxg`sxzƒ€}~}~|wmkmnlihlegfkniqihgca_`eiecb^g_]XW\jzzŒˆ”šŸ£­ª¬‹¬¯°®±°°¬¬««¤œ¢žŸŸ›œœž¡žŸ £¡¡££¥¤¦¥£¤¤£¥’¤¦¥§§¤¦¨§§¦¥¦¥¥¦¨©§˜©©ª¬«©¨©¨¨§«¬¯«©ª¨¨ª§£¤¨¨§�ªvrolkkjdc`aZXY^``a`d_Y^fnw„‡ƒŒ‘˜›žššŸ£¡¢— §¨¬¯®°²µ³°±­§¤¢¡žœ•”•þ”˜7“Žˆ…ˆ‰‡†‚†ˆŽ‘“”––•”މ{€‰“¢¥¨­±·½ÀÂÀÀÁÀÄ¿¾·´±«¡›‚ztopw‚ˆˆ‡‹‹q 5Ÿƒ}†|…‡hTTQ]]PMRE@LSVa^[VXUW[XNJIKHEAE??>CGCPHFB>><°>BG?@?=D=<>9AO]`erpw†‘Œ‘”’–˜’–™—ŽŽ‰†„„ƒ‚…‚€ƒ„Ї†…†„…†ŠŒŠ‹š‹‹‰ŒŒ‹‰Š’Œ‘‘ŒŒŽŽ’˜‘’’—•‘‘Ž’–™–”•‘–‘Ž”™•�µ×ÕÔÖÔÒÌÈÁÂÀ»³¬­®®´¶¶·¸µ²³·ÃÒÚÝäêïîïîììîïðñðñóôôõõöõööô‚öõöþòîëèêííîìéå¾T†ÙÕØØ×רÚÞßßáäãäåäæçéææçàÝßÜÚäìïïñðíîíññîðííìçåààÝׯ²¥¡ž˜”•¤¢œœŸœ›™z¤¬·ÙŽ»»Ïͱ—Ÿ¡™pknjf_r‚†Š‰…zvrz~z{„‡„‰ƒˆ¤œ¥£¦«·½ÂÆÊÌÌÎÎÔÖØÙÜ×ÚÝÜØÛÚÖ×Õ×ÕÔÑÏÌÍËËÊÉÈÇÈÉÆÇÈËÊÈËÊÉËÊÇÆÇÈÇÈÈÅÅÈÆ©ÇÈÇÅËÊÉËÊÍËÎÏÒÔØØ×ÜÞÝÜØÏÍÏÎÎÌËÍÍÌËÉÊÈÉÊÊÈÉÈÈÊÊÈÊÉËÊÈȽ«¶ÁÆÃ�±«¨¨«¨¥Ÿž˜——Š…†‡‰ŒŽŠŒ˜¦¯³¹ÆÌÇËÊÈÉËÌÍÍÌÐÑÒÓÒÕÔ¦ÓÓÒÔרÖÖØÔÏÉÃÁÁÂÃŽº˜<a¯«­¯®­¯²¶¶·¸½¿¾Àþ¾À¸µµ°±¼ÆÉÉÎÊÇÇÌÍÎÈÍÇÆÅÀ¿»¼·±¡‘ƒ{xss€y{{|yx\–µ¥™š¬¨t}vNOQIFAQ_ahhjkcYTQXZVV^`e`gbfmm||~ˆ“™¡¥¦§©©­¯²±µ±²¶¶²´³¯¯°±¯®¬…©¨©¨©§…¦¤£¤§¤ˆ¨¦¥§¥¥§¦¤ƒ¥¤¤£¿¥££¤¥¤¥£§§¨¨§©¨ª«®°³²²¶¹¶¶²ªª¬©¨©¨©ª©§¦§¦§¨¨¦¨¦¥¦¦¨©§¨¦¨§¥¨¡“œ¥¨§�“‚€€}~wohmlhbXX`_bdc˜daacnxƒ‹›ž©¬©§¥¤¥©ª©««®¯²´³þ²¯®¶³´·µ¯¥œ”’”ˆ„h6ƒƒ„……ˆŠŒ‘’•™›šš›˜ž¡¦£¡”‹Žœ¥«ª¯®§¬ª«°¬©¨©©£›™š—g^\YTMM[^RSWQXP:]{ƒŸŽ†„ƒŠkNVTO0-.-'$.7;BDDB<532;;99þ?CB>C@CJI[^abegrz„ˆ‰ŒŒ”˜—˜›•™œš˜™œ”“––˜–•‘ŽŒŠŽŠ‰‡‹‘‹ŠŽ‹ŠŒ‰‰Œ‰ŒŒ‹‰Šˆ‡ˆ‰Œ‰‹““‘Ž’‘“’–žŸ¡£¦£ œ”’“‘‘‘’’ŠŒ’Ž‘Œ’”‰’Ž“‰z„—•�¯èçèêèççäÝÛÞÝÛÓØÓÏÉþ¿»»º¿»·±·ÆÕâèììëììîïððóóôôõö…õõöõõôþöõõöõóïéãÝÖËÃÁ¿´¸ÆÉËÐÒ××ÙÚåæáÛÞâàáØÚßÜÚÞà×ÐÙÜÌ·¦ ÀÈÄÀÁ»½¼³¬©ª¨ ›–€{rjhijabf]]dgbjX§ÂÆÔÑÒÑÎÒγ™ž SKJQVP^epoy†Œ”—¡§­¸½ÄÈÉÏŽÏÑÓÓÔÑÒÔÒÎÏÌÉÇŔįÅÂÆÅÆÄÅ·ÄÅÆÅÅÆÇÈÇÇȾÇÈÈÉÈÇÇÉÉÆÆÇËÉÆÈÇÄÆÅÈËÊÉËËÌÏÐÓÓÔØÚÝàßáßÞßàâàÞÝÜÚÙ×ÕÕÓÐÏÍÊÊÍËÊÉʇÈÈÉÈÉÉÆÈÉÉÈÉÊÊÈÉÊÊÈŹ´¾ÆÅÄ�°À¿ÀÂÀ¼¼º´±´³°ª°ª©¡›˜—””“–“މ‘Ÿ­¾ÂÄÆÈÈÉËÌÎÍÏÔÕÒÓÒÕÔþÒÒÕÔÔÕÕÒÏʺ±ª ˜•’‰Œ™Ÿ£¦ª®®°²½¿º´¹¾½»¶µ¼·´º½±§´µ§–Š‚ƒŸ¦¢žž™š—’‹ˆ‰‡~|}upc^TLKKMEHI?@DIEL; £°®®¬«­©v{~n630073@EORWailjru…‹‘•¦ ¢§§ª¬«­ª«¬ª¨¨§¥¤¢¢¡¡£¡ ¢¡£Ÿ¡–¢¢£¢¡¢¤¥¤¥¤“¥¥££¥§¥¤£§¥£¥¤¡¢£¦¨§©§«¬¯¯°³µ·º¸¹·”¸»¹¶¶·µµ³²±®¬¬©§§«©¦§‚¨¥¦‚§¥§¥¦…§©¨§¦§ƒŸš¡¨�¦––››—“’‘‰…Šˆ†~€€ƒzrnmhljlkf]cw›¤§¥¥¨¨ª‡¬³°±±µ¶´Ï±³²¯®­¯³µ³°«¥ž”‡}wnea]Y`ku{z€‰Œ‘›™”–›œ˜”œ™˜£Ÿ…—œ‰zi_\{„uxwstmf^]d`SRVRI@;40/Ž(+-$$()(-_ˆ™—ð“ˆmRRQF %'.07BHGFOVcgkuz€ƒ‡Œ‹Œ’Ž’‘”‘ŽŒˆ‡‡…ƒ‡…‰ˆ„†…ˆ‚x†‡…‰‡ˆŠ‰ŒŒŒŒˆŠŒŽŒŠ‰”ŒŒ’‹‹Š…†‹ŠŽ‘’•˜˜œŸ ¦¨­¥¦§ªª¥£¢¢ žž›˜–•“‘’”ŽŠŽ’‘Ž“‘’‘’•”“‘…’ˆƒ‹“–�¯ðííîììííîîêéííëëéççâáÛÓÎÅÀÉɽ«©´Å×ÞäðòóóññòóõôõôþõõööóîïîðñôõòïîìèåàÔÆ··µ²¶¸±­®®©¥œ£«¨‘‘•“‹‹’††Œ’’ƒuifzt¡¡¤¦¢•žŸœœ’‘‘—š”rcWTJIFDKOLFFKDIE™·½¾¶¾¿¹¸À¯—¡’ov{Š”¤©´¹¿ÅÃÅÁ¼·•´´Á¼¸·¸½À½¾½À¿ÂÂÀÃÂÄÂÄ‚ÆÄÆÇÄÆÅÉÈÇÆÆÇÅÂÄÇÂÂÆÃÄÁÁÃÄÂÅÀÂÃÁÀÄ¿¿½ÁÈÑßâááãàáßÛÛÞÚÜÛÚÙÙÖÒÑÑÌËÊÉÈÈÊÉÈÆÃÅÅÆÅÇÉÅÄÇÇÈÈÇÆÅÅÆÇÇÈÊÊÈÇÇÈÇÊÈÉÇȇÉÇÄÀÅÅÆÈÃ�¯ÊÉÅÆÇÄÆÅÇÇÂ¿ÅÆÄÄÀÀ¿º¸²«¥œ˜ž”……‘œ®¶¾ÉÌÐÏÊËÌÑÓÑÑÐþÒÓÔÔÎÈÊÉÊËÎÒÍÊÉþ»¶©“•‘Ž’ŽŠ†‡ˆsrzuqqvmnsvqqdYKIYSk€ƒ„€szzxzsrpuxuo_SF=7/.-,/4/,--1.$p—›–žž˜•Œuz}pOVY^iis†’–›ŸŸ¡œ—“ˆ’”š—–˜œ±ŸœŸžŸŸ ž¡¡ ¢¢£¢£¢¡¢ ¤¤£¤£¤¢Ÿ¡£  ¡ ¡ŸŸ  Ÿ£žŸ ž ¡œŠ ¦­¸»¹º»¸º¶Ÿ·´µµ´³´²¯¬¬ª¨§¥¦¦§§¦¤£¤£¤¢£¦£¢¤¥£¤¥¥¦¨§§¦¦§¥¦¦§§¦‰§¦§¦¥£¦¦¨ª©�þ¢£¤¥ šŸž™–›Ÿž ›œ••Ž‚~wsxwkY\lx†“𧮝¯­­¯®²°³³°¬®¯°¬¦¥¢§§ª­«¨¦§¤›’‚vigjhlpnnsnkkbjoiUSbcYOMRMNUVKMH<--93DXXZ^WIROONIGHNRNG9„2*$!„ÎR„†{ƒ„|u|lORRK67=HQMT`cqxƒ~}ywut‚x{~€|‚ƒ„‚……‚‰…„ƒˆˆ„‰‡Š‰‡…ˆ‰…†‡Œ‹‡Š‰ˆˆ‰ˆ¾…Šˆ‡‡ˆ‡Œ††‡…Œ‰…ƒ‡…‡Œ—¥¨§¤§£¤¢žœž› ¡ŸŸžœ˜™˜•‘Ž’‹‹Š‹ŽŽŠŠŒ‹’’’’‘’•’‘’‘‘’’‹’’—–�¯éëððïììíìëìéîîïððîëéîîéèâÙʲ¨ ¤ › ¦¢§¦³ÃÍÖÔÑÏÎÏÒþȼ¼¹ÀÊÃľ¹º°±®¡ž›—””zaRLUSSQSWTSNQ[fjefmttxvƒ…‰Šyqsu|‚„ŠŒˆŠ‘‡…ƒ|tgrw‘‘ˆzjSJNVY^dr{}ˆ”–¡¥§AWÁ´¿½´´Ã°’—Ÿœœ™žž¤ §¯µµ¶·º¾º‡¾¾ÃÃÅÄÄƃÈÇÅÆÄÄÅÆÅÆÅÄÂÂÆÄÃÄ´ÃÇÆÇÁÄÉÅÉÉÈÏÍÏÒÑËÇÃÉÌÉÌÑÓÖÙÙÜÜßãçåãÞÔÆ¿ÃÁ¼¾Á»¿ÂÃÅÇÇÆ’ÅÄÅÃÄÃÄÇÆÆÄÃÆÄÆÆÅÄƘÅÅÇÄÄÆÈÈÆÇÈÈÉÇÇÆÈÉÉÈÈÉÉÈÉ…ÇÃÃÅÂÄ�…ÄÆÊÉÊƤÄÄÅÂÅÈÈËÉÈÃÀÅÃÁ¾·°¡Œ„~‚~w~…„‰Š˜¥«±¯­©›¬«¬¢œš–›¥ Ÿš––Ž…‚{wtr[A86;ú89=;;58?JNFGOTSWWceipqjZRSV^achjhipgd`[WMXZakqsk[P?::=AEIP^`]lwx€|#Dž”š‘‘ŸŒpuz|{}|y~€…€ˆŽ••–—™›™›œ  ¡  ¢¢¤¥¥£¢£¢ ¡¡£¢¡¢¡¢¡ ¤—¡¢¦£¥¦§«ª«¬¬§¤ §¨§¨­®³µ´¸¸»¿¼»¸®¤ ¢ ¡œž ›Ÿ¡¡£¤¥¤¤£¡¢£¢¢ ¢¤¢£¢ £¡££¢¡¢£¢££¤£¢¤¤¥¤¤¦‹¥¦¦§¨¦¦¨§¦§¨…§¥¤¦¥¦¨�þž£ª©¤¢ž¡¢ ž¨¨©©ª¦¦¡©«  ›’}g_T[WQRbafetˆ“‡ˆŠŠ‹ˆ„yvqms„}wtwpoic_ZUQR?*"!%!#"$&##"!&,/*+07454;?DMLE8124;=@@B>AG>=:73(35=EKLF:þ1'%'*)*-5=@?KWWdcW6…yspƒnIMOT^^[Zb`agajryyxz~€{‚‚‡†…ˆ‰ˆ†…ŠŽ‰‰‡ˆ‡‹ˆŠ‰‰ˆ‡‡„ˆ‡…„†ˆ†ˆ‰Ž‰ŠŠŒŒŠ‘•”‡’“”—šŸŸžœ¡¦«®­¥–Œˆ‰Š…„†ƒ…ˆˆ‹ŒŒ‹‹ŠŒŠˆˆ‰ŠŽŒ‰ŽŠŒŠˆˆŒŒŠ‹ŠŽŽŒ‘Ž‘“’—’‘‘“””“”‘’�þõññëÞÝÝØÙÙÜÓÑÐÎÄÄÉÂÁ¾Á¸­•…xiqneS_aYZYb]du‰ŒŠ‰‰‹ŒŽ”‰ŠŒŒŠŽŒ‘’“Œˆ‹Š~oijmqowpsrvqr€‚€wyvƒ|yyxur}€}jTaw||†ŒŠ‹“£¥§ª«·ºÁÃÇÍÍËÏÑ·ÎÆÄ½°¦™”•™œš’”™Ÿ®Y_Óº»º¸ºÉ®”“œ¯Á½¾ÀÁÂÀÄÃÈÅÂÃÆÆÅÇÄÄÃÄÅÄÂÁÄ™ÂÃÁÁ¿¼¿¾¾ÀÂÁ¿ÃÂÆÊÌÒÕÛÛÞßßã¡äåãâáßÞÚÑÇÅÔÝÞÞÛÛØØÓÓÒÍËÉÆÂÂÄÁÃÂÃÄœÆÅÅÇÇÆÈÇÆÆÇÈÇÇÅÇÆÇÆÈÇÆÇËÈÇÆÉÇÈžÇÈÉÈÇÅÇÇÉÉÈÇÇÊÈÈÆÊÉÈÊÉÊÉÉÈÅÆÆÃËÇ�ùÔÍËÆ¾ºº¹¶¸¶¯­¬ª£¢¤œ›œ•ŠthZKTSL?GH@C?FCJYlnljhikmslgfiplimkmorqsmhmmkm`RLNQSQYTVVYRUbbaWYWcZVXWUT^b^M;FV\_imlpv„…†‡Š•–ŸŸ¢©¬©¦£‘‰{yw{|{rvz~|€"G®™š˜•™¤‹sqyŒžœœž Ÿ¢ ¥¡†¢¢£¤¢¢¡¢ †Ÿ£¢£¡¡Ÿ±œžžŸ  £ ¤¨ª®°µµ¶¶¹»½»¼¼»¹¹¸¶´¬¤¢¯¶··¶´´³®®¬©§¦¤¡ ¡¡¢¤£¡¢¢¤¥¥£¥¥¤‰££¢£¤£¤¤£¤ˆ§¥£¢§¤¤£¥†¦§¥§¦¦¥—¦¦§¦¦¥¨§¦¥©¨¦¨©©¨§¨§§¦¤ª§�ù·¯±¬¥›š¡š˜”Ž’’‘„†~|~€wmVL<2970#*.-+%))-8JJFHGEFKOC=:CHCHHEIMOMKHFHHGKA4,0653<787845@>=8;5>856200=A:. '7;<FIGKUdchgjuv}~‚…´Ž‡ˆ‡ylYVTY][UW[`\W6–}{|yz‡kLILd…ƒƒ„„‹‡Šˆˆ‡ˆ‡ˆ‹‡‰¼ˆ‡†‡†„†…‰ˆˆ‚†…ƒ…‡…„††…†‡ŠŒ“•Ÿ££¤©©¤§¥£¡¡  š‹Š—¡¢ŸŸœž˜–’Œ¸Š††ˆŒŽŠŽŒ‰Š‹‹Œ‹Š‹‹Š‹ˆŠ‹‹ŒŠŒŠŠŒŠŒ‹ŽŽ‘’ŽŒ‹‘’Ž‘•’”“’”“‘”““Ž•�gjjh~‚zu{~‰Šˆþƒ†„……{wfc\ZYOIHCAHNML[q{ƒ„ƒ~{z}‚}„‚ƒ†‡€‹ˆ‡‰‹Š†…†}ibihjg`VS^[[_nxvjlz„‘¨¬°¸ÀÑÑÌ×ÛÜÛÞÜ×ÖÚ×ÔÓÒÊÈÈËÊËÃÃÂÅÀ¾¿½·¯ Ž’˜Ÿ££ ¯°”FXÙ¾µµ¸ÊЭ–˜¡¯ÂÂÄÃÄÂÁˆÃÄÁÁ¿ÀÂÀ¿£ÂÄÅÅÄÉÇÈÎËÍÑÔÕ×ÛÝÞÞáàáãââßÝÜÚÕÓÏÍËÇÆÄÄÅÃÅÆÄÃÆÆÅÃÆ›ÄÅÅÆÃÂÀÃÃÄÅÆÆÅÆÉÇÆÈÇÄÈÃÇÉÇÆÇ·ÅÇÈÇÆÄÇÇÆÈÇÈÉÇÆÅÈÊÆÆÇÉÈÇÇÆÈÈÇÆÈÈÇÉÉÈÆÆÈÈÉÊÊÇÆÊÊÈËËÇÄÆÉÅÈ�½LMLNabca`Yd`bonllnijhjka\MKCB?955/-2665BU`ghg`^\ac_Ycdegg`_ilhÅijdf`g^LGLJLHA:7D?=COYZRQ_gps€ŠŽ’˜¢®¯¬³µ¸¶¶´±°³±¯¯­§££§§¨£¢¢¤Ÿž™’„usÍu{…†…‰,G³ž—”—¦ªŠuv}¡¡  ¡ ¡Ÿ ¡£¡ žž¡ Ÿžž¡££¤£¨§§«©«±±°²¶¶·¸»»¼¾½º¸·¶´±®ª©¦¥¤‘£¡¢¢ ¡£¡ ¢££¡¤¢¢ £‰¦¢¡Ÿ¡¡£¥¥¤ˆ§§¥¤££¦¤¥¤—¢£¥¤¤££¤£¥£¤¥¤¥¤§§¤¤¥§¦¥…¦¨¥¥§¦ƒ¨¥¤§ƒ¨§¥¨‡ªª¨¦¨ª©©¨�Ê3023HFCFA6DADNROILFHGHGB>11,-)$ $" ## '6=DED>85<?:2:<==B?<DIEBADE@A=C@,'/.þ)%"(&#(2>>8:BHTT`hou|Œ”“œ—ššžš””—𓆂‡‹‹ƒƒ‚‡…€‚ƒygYUVZ[`ekigoe=ž…|zz‰gOMNjˆˆ„†‡…†‰ˆ‡ŠŠ†ƒƒ„‡ˆ„„‡‰‹Š‰Œ•š˜™š ¢ ¤¤¥«¨¥¤  ›–”’Œ‰ˆ†…ˆÍ†„‡‰…„‡ŠŒˆŠ‰ŠˆŠŒ‹‡‡…‡ˆ‹ˆŠŽ‘‹‰ˆ‹ŠŽŒ‹ŽŠ‹ˆ‰Ž‰ŒŠŽ‹‹Œ‰‹Œ‘Œ‹Ž’‹‰Ž‘“Š’“‘’“‘‘’’““’•—””“�’”•”•–”›‹†ŠŒ‘‹†€|þxo_YPLDC;A>78<6:MX`dmfcddegkglg]Z__Y`pmqv{|~„‰†llr{‰‡‹ ¡¨¬·ÁÅÆÈËÍÏÏÍÍÑÒÏÑÏÌÍËÈÅÄ¿¿ÂÁÀÀ¼»¼¾À¿ÁÂÄÀÁÃÃÄÃÀÁÁÀÂÁÂÃÃÄÂÄÊÆÍÖÅÄ’¿ÀÇÊ®—˜ ²À¾ÀÀÁÃÂÃÅÇ¢ËÏÎÒÖ×ÙÚÜÜáàßàÜÝÛÙÖÖ×ÔÒÐÏÎÎÉÆÅÄÂÆÆÄ„ÂÆÁÄÔÇÄÅÄÄÆÄÅÃÂÄÃÄÃÃÂÄÇÅÅƆÇÅÅÃÂÄÇÈ™ÇÅÇÈÄÆÆÇÇÈÇÆÈÆÇÇÈÉÇÈÈÅÆÉÊÈÇÈdžÈÈÉÈÇÇȇÇÊÉÈÇÇÉÈÊÇÍÌÏÒ×ÙÜÜÚÞàâáßÛ�’{{xyzx}tpjprvtqokfbËc_UFD<801-.-'))%'8?IKTLGJJKIKFNMDDFEADQNRV\][elriTZX`dnnkt„…ˆŒ–Ÿ£¦¨ªª¬¬ª«­®­Š««¨¦¤¤¡¡žŸ ¯Ÿœ›šœ ¡¢Ÿ¡££ ¡¢£¤£¡¢  ¢¡¢¢£¢£¢¦¤©³¦¥žž¥¦xw| Ÿ Ý¡££¤¦¦§¨¬­¯²³´¶¸·»ºº»¸¸·µ´µ³¯®­««¬§¦¥¤££¥¤¢¡¡£Ÿ£¡¢¢¥¤£¡£¤ ¡¡Ÿ¡¡¤¢ ¡£¥¢¥¤¥¦¥¥¤¡ £¦¥¦§§¦¥£¦¦£¥¤¥•£¥¤¥¥¦§¥¦¥£¥¦§¥¦§¦¦¨¦¥ƒ§¦¦¥…§¦¥¥§¦‚¨¨§ª§­­®²´¸¹¼»½½ÀÁ¼¸�Ì]^\]]Z\POFNQWRRPHD@@?=>@:-)&%$+.1-**))+,&-,%#')&&1215:;<AIQM568=GTæZdhnn{„†‰‹ŽŒŽŽ‘“’ŽŒŠ‡‡ƒ„„ˆ„|{{ƒ……‚†‡ˆ‡…‡‡Š„Ї‡‹ˆŠ†‰ˆ‡„Œ–›…ƒ††jQMNj…„‚ƒ††‡ŠŒŒ‹““›žœ›Ÿ¢¨¥–¡¢œ›š™•””‘ދЋ‹Š‹ˆ‡†‘ƒ‡ˆ†…‡†ˆ‡‡Š‡†‡††…‰’‡‹ŒŠŒŠŽ‰Š‰ˆ‡Š‹‹ŽÄŒ‹‹†‰‹ŽŒŠŽŠŒŽŠ‰‘‹”ŒŒŽŽ‹ˆ‹’ŽŒ‹Ž‘ŽŽ”’˜™œšŸ£¦¨ª¬°¶¶¯¨�ÄŽŠ‚„‚yyxpil]koosqqnopmumaYVDC;A<BC78CHS_qƒ••›£¤¨¨ª±±¶°µ¶½ÁÁ»¾½ÄÆÊËÍÊ¡ÉÌÈÆÅÆËÌÇÆÅÈÈÄÂÂÃÂÂÃÅÂÀÀÅÀÁ¾Á½¾¿À¿À½¿ÀÂÄÂÀÄÃÁÀÁÄÂÀ¿«ÁÀÀ¿À½ÀÁÀÂÁÀ¿ÀÃÄÇ¿ÐÖÔÓÔÔÓʨ–—›¾ÚÛÙÞßßÛÞßÛØÚךÔÑÐÌËÉÆÆÃÁÀ¾Ã¾ÃÁÀÀ½ÁÀÃÂÀÁÀÁ–ÀÁÄÂÂÿÃÄÀÂÂÄÃÅÁÃÆÅÄÆÅ”ÈÆÇÆÅÆÂÅÃÁÂÃÃÁÅÁÂÂÄÄÅ‘ÆÅÅÄÅÇÅÇÆÇÆÇÇÈÈÇÅÈ«ÆÇÆÆÇÇÉÇÈÆÆÅÇÉËÎÏÐÓÖÚÚÝßàáåæìîïññððïìéâàÝÚÔØÕ�þsnfhh^\YVNTCPUTZXURUWTZTKEE7547456,+36=KZjqwy}……‰‡‰Ž‘—“—˜œžžšœ¢£§§¨§§¨§©¨¦£¥©ª§¥¥¨¦¤£¢£¢££¦£¢¢¤ ¢ž¢ ŸŸ¡ŸŸ ¡žŸŸ¢¥¡Ÿ¡¢ ¡¢¤¡¢¢  ¿Ÿ¢¢¡Ÿ¡ž £¡¢¢ ¡ £¤¦Ÿ­´²³±°°¦‡wvx𵶏¸¹º¸¹»·³¶´´³²¯­ªª©¦££  Ÿ££ ¡ ˆž ž¢¡Ÿ Ÿ ¡ Ÿž ¢¡¢¢¡Ÿ¢¢Ÿ¢¢¤¡¡ ¢¥¥¤¥£¥¤¤¥Ÿ¦¤¥¢£¢¡¡¢¢¡¤£¡¢¢¥¥¤¤¥¤¤££¥£¦¥¦¥¦°¥¥¦¦¥¥¦¥¥§§¨¦§¥¥¤¦¨ª¬¬­±³·¹»¾¿ÁÃÄÊÌËÎÏÍÍËÉÈÃÁ»»·¹¶�çTSJJF?=5613&565;873954>;3/-(&'%$&(%")/8LUWZ]hefhnpntrvw{||y~{†ˆŠˆˆ‰Œ‡†ˆ‚ƒ‡‘‡‡ˆŒ‡ƒ††…‡‰‰…„‡‡…‡‚„‡‚ƒ„Šˆˆ‚…‡ŠŠ…‚…‡Ì†ˆ…ˆˆ††„‡‡Š‡……Š‹ŠŠˆƒ††‡‰Žˆ–¡›œš—’…eQOKs› ž¢£ £¦Ÿ›ž›šš—–•‘Ž‹‰‹‰ˆ†…І……„‡‡ƒ…ƒ‡Š††‰†‡ˆ†…„†‡‰ˆ…†‰†Šˆ‹‰†ˆˆŠˆŒ”Ž‹Œ‘ŒŒˆ‰ˆ‡‡…†‹ŽˆˆŠ‹‰ˆŒ‰Œ‰‹ŽŽ‰‹ŽŒŽŒ‹‹‘Œ †‰Œ“••˜Ÿ£¢¥«®¯±²½ÂÄÄÿÁ¿½·²¯ª«¦§£�À“–”šœžžœ ¤¥ ©³¶¶³¸½»½¾½¸¸±®§¬§¦¢“‹ŠŽŠŒš°¾ÈÇÈÇÈÂÃÂÿÃÀÆ¿ÀÁ¿¾À½ÀÁ’ÀÁÁÂÁÀÁ¿ÀÀÃÃÂÄÄÁÂÁÄÆÅÂÃÀÄÁÃÁÿÀÂÄÁÀÁÁÀ¾Â¿ÁÁÂÀÁÃÁÂÁÅÃÃÄÇÉÇÊÌÉÌÑÎÍÐÖרÛÞáÀo“ÍÈÆÊÅÉÇ­šœ¡»ÌÊÊÈ‹ÄÅÄÅÁÃÂÀÁÁÂÁŠÀÁÃÀÀ¾ÅÂÁÅÊÁÁÂÁÁÃÃÁÂÅ”ÄÄÅÂÅÄÃÃÅÆÆÅÁÄÅÆÇÂÄÄÅÆÄ„ÃÂÄÄÀ¹¾¾½ÀÂÃÄÈÅÃÄÅÇÄÅÅÀÂÄÃÁÄÅÇÆÈÇÇÆÉÉÆÇÅÈÈÉÈÇÇËÍÎÔÙÝàäæêëìêëîëäà“âáßÞÞÜÛÙÖÏÑÍÌÉÉÈÇÊÈÉÍ�«uxy~€€‚Љ…Œ”˜—–—œŸ ›–“‘‹‹‡„|tquqs~“Ÿ¦¢†¡¢ ¤Ÿ ’Ÿ Ÿ¡¡  ¡¡££¡ ¢ ¢¡¤Ó¦¥££¢¤¤¥¤¤¦¤¤£¤¡£ £ Ÿ¡¤  ¡¢ ž¡£¡¡ ¡¡¢¥£¡¡¥¤£¤¥«¨ªª©«®¯¬®³³´¹ºº›^«¦¦¨¢¥¢‹xz~˜¬©©¦¦§¤ž¡£¢¡¡ ¡ ¢¡¡Ÿ ¢ ŸŸ¤¢¡£¢¢£ ¡ ¡ ¢¡Š¤¢¡ ¢¢¤¡¤£¢„£¤¤£¤á£¢££¥¤¤¥¤¤¢ ¢¤£  žžž¡¡¢¤¦¤¢££¦¤¤£ ¢£¢¡£¤¥¦¦¥¦§¨¨¥§¥§¦©ª¨§«­®³¹º½ÁÂÄÅÅÃÇÊÅ¿¼¾ÀÂÁ½¼¼»¸·´±°­­««©¨¬«¬®�­TYXde_d``iokjmv}v|‚y„‰…~yyxyspokg\UWTQ\u‚‰Š‰Š†‡€„ƒ†„…ƒ‰‡‡ˆ††‡ˆ†‡†”ƒˆ‰Œ‹ŒŒ‰‰„ŠŠ‹ŒŽŠ‰ˆ‡Â…‰‡…‰‰ˆ†‹Œ†„‡‹Š‰‡‰‡‰‹‡‡†‹Šˆ‰’““’˜˜”—œšœ¢¥¥Ln–Œ‹‡‰hRTRoŽ’Š‹ŠŠ††ˆ„ƒ†„…ˆ… ˆ‹ˆƒ„Œ†ˆŠ‰‹ˆ†‡„ˆ†ˆ‡ˆ‰ˆ‡‰ˆ‡ˆ‰ˆ‹ŠŠ‰ŒÏ‰ŠŠ‰‰Š‰‹ŽŒ‹‡‰ŒŒ‡ˆ…„„ƒ‡†‡ŽŒ‹ŠŒŽ‹‡‡‹‰ˆ‹‹ŒŒ‹‰Œ‘‘Ž”˜“›¦¥©­¯²±²³µº¹­¨ª°‘¬§«¨¤¢ž››––’”’“˜——›�®ÌÍÌÏÎÊÎËÎÉÌÉÌÍËÆÆÉÊÇÇÃÂÁÀÃÅþ½ÃÀ¿ÀÀ¾»¼ÀÂÀ½ÀÁÂÀëÄÂÅÅÆÅÂÃÄÃÁÃÃÂÄÃÄÃÂÃÄÂÃÄÃÄÂÀÀÂÀÃÂÄÃÀÁÁÃÀÀÄÂÀÓÁÀÀ¿ÃÁÃÃÇÅÅÄÇÒÙׯÄÃÄÇÈÆÍÌÑ×ÞáÞØÞßÜÛÝÜÚ×ÓÖÕÓÏÍÊÇ˪.I¯¹¹ª³¿ª›œ¡²¾ÀÿÀ¿Á¿ÀÁÁÃÁ½¾¿ÁÀÀÁ£ÅÅÃÄÇÄÂÅÄÄÅÃÂÅÅÄÃÆÅÃÇÅÅÇÅÆÅÅÄÄÃÄÅÃÃĨÃÅÅÁ½¾¾À¼½¾¾À¼»¼½»¿ÁÁÄÂÄÅÄÃÂÁÀÀÄ¿Áó¼ÆÅƸÉÈÈËÒÙßâååããæêìîðôõöø÷óðíêçãÜÔÑÐÊÆÈËÇÊÉÇÈÈÅÆÇÉÆÉÊÉÈÆÆÅÆÃÅÉ�‚ª¬­¥©¬«¬¨«©ªª¨¥¦¨¨§§¥¥¢¤¥¥£¢Ÿ££¢¢ ¡œ ¢£¡Ÿ¡ƒ £¢£¢£¢¢¤£¢£¢¡££¤£¡£ä¥¥¢£¤¢Ÿ¢£¤£¤£¢¢¡£¢¡¤¤¢¡¡¢¡¡Ÿ£¢¢£¦¤££¦¯´²§¥¢£¥§§«ª¬²¸»¸´¸º¸·¶¶µ²±±°°¬ª«¦§}>¡™—‹’œ†vy}‘ŸŸ¡žŸŸ žŸ  ¢ žþŸžŸ¡¡  ££¢¢¥¤¢¤£¢£¡ £¤¤¢£¤¡¥£¢¤¢¢££¢£¡¢¢ ¡¢£¢¡£¢ŸœžžŸœžŸŸœœœŸ ž¢¡££¢¢¡¡ŸŸ¢ž ¢Ÿ•¤£¥¤¥§§¦¨¯¸¾½¿Á¿¾ÁÇÊÌËÐÑÐÐÏÍÊÆÃ¿¼·®®­§¤¦¨¦¨‡§¦¦§¥¥¦§ˆ¨©¨§¦§§¦©¬�Œ”—˜•‘““‘‰ˆŠŒˆ‹Š‘Œ‡Š‰Š‰ˆ†‡Š‰‡ˆˆŽ‹íˆ‰ˆ‰ŒŠ‹‹Š‡Š‰‹ŠˆŒˆŠ‹ŠŒ†‰‹Œ‰‰‡‡ŒŒ‰ŒŠ‹ˆ‡ˆ‰†…‡†‡ŒŠ‰Œ‘—›šŽŒŠŽ’Ž“™¡¤¡›£§£¢¢ ŸŸ›™š™”’’] 4Št~zlu{cPQSi‚……†ˆ¾‚††‡††„„„ƒ‡†‡‡ˆ‰…‡ˆŠŠŒ‹†ˆŠŠˆˆ‰‹‰ŒˆŠ‹‡‡‰‰†‰ŠŠ‡ˆŠŠŒ‹…†‰††„‡ƒ›‡‰ƒ††…‚†ˆ‡ˆ‡Š‰ˆŠ‰ˆŠˆ‰†ŠŠ{„‹ŸŽŽ”— §ª¬®«©¯¸¼¾ºÆÇÂÄÅÀ½³°ª¥œ–˜Ž‹“’““Ž‘ŽŠ‘’’‘”•‘”˜�§ËËÉÊÈÇÈÆÈÇÈÈÄÆÅÇÅÄÆÅÄÅÃÅÃÅÅÃÁ¿ÂÀÁÂÀÅÃÁÁÀ“ÀÁÂÃÃÂÂÃÄÃÃÂÂÀÁÂÁÀÀ¿ÁÄÅÅÇÄÇÂÅÅÉËÉÎÎÍÏÎÍÏÓÔÓÓÔØØÚÛÞÞßÕÏËÉÊÈÆÆÄÍÓÓÆÆÅÇÇÅÆÉÊÈÄÉÆÆÂÃÃÂÁÛÂÅÄÁÁÀÁÀÀ¯4VÒµ½¿¼¿Ë­™ž£µÀ¿ÀÁÀÖÆÄÄÃÅÄÃÄÄÅÆÇÇÈÄÇÇÆÅÇÆÅƈÇÈÆÅÅÆÇÈʼnÄÅÃÁ¼¾Â¿¿Áå½¾¼¿Á¼½¾¾À¾ÀÂÃÅÃÃÁÂÅÇÄÃÃÅÄÇÆÅÆÇÅÅÈÅÂÈÄÁÃÆÇÆÅÄÃÄÄÏÙäåàÚØÝáÜÞÝÙÚÜרÒÎËÊÈÇÇÉÊÉÊÆÈÉÈÊËÌËÉËÏÊÍÌÏÐÒ×ÙÚÚÙÖרÙØ�„ª¬©ª¨§¨…§¥¥¤¦¥‹¦¤¥¥¤¤¥¦¤¢¡¤„¢¥£¢¡†£ ¡ ¢¢¡†¢¡  ¡£¡³ŸŸ ¡¢¡ ¤£¤¦¥¦¡¦¥¦©¨¬¬«­¬¬­°±¯±³µ´µ¸¹¹º±¬¨¦§¦¥¤£ª®®¦¥·£¤¦§££§¥¥ ¢¢¡ ¡¢¢¡¡£¢¡ Ÿ žž‚A®–œš¦‡u{’ž  ŸŸ¡¢ £¡¢— ¡¢¢¡£¤£¤£¥¥¤¤¥¤¢¤£¢¤¥¤£â¥¦¢¡¢ ¢¡žšœŸœœŸž›œœŸŸ›œž Ÿ ¢¢¡¢¡¢¤¥¢¡¡¤¢¤£¢¢£¢£¥£¡¦¢ ¡¤¥££¢¡¢¢«³¿¾¹µ³·»·º¹¶··³³­©§§¥£¤§¥¤¦¤¥¦§§¨‘§¨«¨«ª¬­¯³¶··¶µ´¶¸·�‚”•“ƒ’’‘‘ŽŽŽ’ŽŽŒŒŽŒ‰ŽŽ‹Œ‹Š…‹‰‡‰ŠÔŠ‹‰‡‡Š‹Š‰‹‰†‡‰‰ˆ‡ŽŽ‹ŽŽ‰Ž‘‘——•—™“•›žš™œ œž¡£¤¦—“‹Œ‹”–ŽŒŽŒ‹ŠŒŠŠ†Š‹Žˆ‰‰†ˆ‰ˆŠ‰ˆ‰þ‡†…ƒ„]6–}…~‚‡eLQSo„ƒ€‡ˆ††ˆŠˆ‰ˆ‰ˆˆ‡‰ŠŠ‡‹‹Œˆ†ŠŽŒ‹‹ŠŽ‰‰Œ‰‡‡ˆ‹ŽŽˆˆ‡†ˆˆ†~‚‡‚‚‡†ƒƒ……ˆ„ˆ…ƒ†ƒ††‰‹ŠŒ‰Š‹ŽŠ‡‹Š‰Š‰Š‰ŠŒŽ‹Œ‹ˆ‰‹‹‰‰Œ‰‹Š”¨§£Ÿ™ž§©¨¦œ¦™™ŒŽˆ‰‰‹Š‹Ž‘”’’““•“”—›š¡¡Ÿ¢§¤¦¡¥�–ÊÈÊÇÆÆÅÆÆÄÅÃÃÅÃÁÂÃÂÃÂÃÂÃÀÁÂÄÄÂÄÃÂÅÄÅÃÄÅÆÇÆ¬ÃÆÃÊÇÉÊËËÎÍÐÑÔÕÖ×ÚÜÛÞÝßÞÜàáâáãàáÞàÞÝÜÚÚÙØØÔÓÒÏÐÏÎÏÇÈÇÆÆÅÆÆÅÃÃÂÂÃÁÂÁÂÁÁ¿¿À¾ÀÁ¿¿Â¿ÂÁ¿¿¾ÀÂÁÁ¿±z“μ»¼ÄÆ­—£¶ÁÀÀÁÁÃÃÄÆÇÆÆÅÆÆÄŇÆÅÆÇÆÇÆÈ°ÆÆÈÇÆÅÄÅÆÆÃÄÃÂÃÀ¿ÀÂÁ¾¿¾¿ÃÂÂÁÃÂÃÃÅÅÄÄÆÄÅÄÅÅÆÉÆÈÆÅÇ‚ÅÅÆljÈÅÅËÊÇÈÊÇÆŃÄÀÃÄ–ÉÊÆÅÉÅÀÃÁÁ¾ÂÅÅÆÃÆÅÆÅÆÇŽÌÇËÏÛàßáÝßäãâãá†ÝÚ×ÔÏÏËÆ�ª“¨§¨§§¦§¦£¤¥¤¢¢££¤££¤°£¢¢¤§¥¢¦¥¤¥¤¥¤£¤¥¥¤¥§¤¥¤¨¦§§¨ª­­®¯°±±²µ¶¶¸¶¹º¸º¹»˜º»¹¹¸¸¶·¸µ´³²²°°¯¯­¬®¤¥¥¤ƒ¦¤£¡‰¢£¢¢ ¡  ¡ŸŽ¡ž¡ ŸŸ ¡Ÿ ¡ŸžŸ ‘Ÿžawª œ™š¡¢Št{€“Ÿ—  ¡¢¡£¥¤¤¢¤¤¢¢£¤¤¢¤¥¢¥¤¦Š¤¤¥¥¤£¡£¤¤¢„¡¢žŸ’žžž¡ Ÿ ¢¡¢¢¤¥££¤£¤¥§¥¦¥¤¦¥¥£¡££¤›¥££§§¥¦¨¥¤¥¦¤££¡ž ¢££¨§¤¢§£ ˆ¡¡ž¢¤££ £¤¥™¦¦©¦¨­¶»¹¹¸»½»¼»»¼¾º·¶³¯¯¬©�ƒ••–’ê’‘ŽŽŒŠŒ‹ŒŠŽ‹’ŠŽŒŒŠ‰ŽŽŒ‹‘‘•–•˜—™¢  ¥¦¦¤££¨«§©¨§¨§¦¥¢Ÿ  ¡ž›šš—•–•“•‰‰Š‰Š……ˆ‡‰‹‹†‹…†„…‰ƒ††ƒ†±…‡ˆ†…‡‡ˆƒ„†pNa‘Ї~}„ƒfJPTq†…‚…‡ˆˆ„‰Œ‹‹‰ˆ‰ˆ‰ŒŒˆŒŒ‰¨‹Ž‹ŒŒŽŠ‡‡ˆ†…†Š‰Š„„ƒ„††…ƒ…‰„…ˆ‰ˆ‡‡ŒŒŒІŒ‹ŒŽŽŒ¦Œˆ‰ŠŠ‹‹‰Š‘’ŽŠ‹Œˆ‡ŠŠ†‡ˆ‰‰Žˆ‹‰‹ˆŠ†‡Œˆ…†ˆ†ˆ‰›Œ‹Œ”‰Ž—¢¨©«£§¯°°­©««£¡¤›•”�ˆÈÄÇÇÄÄÅÆdžÈÇÈÄÄÆÅ®ÇÇÄÃÄÅÅÃÄ·®¬­¥§³Ã˰¤Ÿ §²ÉÔÖÙÝÜÜÝßÝáàÝÚÕØÖÓÔÓÏÎ’ÑÌÉÉÊÌÈÈÄÅÄÂÄÀÁÅÃÂÔÂÂÁÃÆÃÃÂÃÁÀÁÁÂÀÀÂÃÃÂÀ¾¿ÀÀÁ¾ÀÀÂÀÂÁÄÃÀÂÃÃÄÅÄÃÃÄÃÄÃÀÀ»ÁÁ¿½¼·º»³£˜˜¶ÂÃÃÂÁÂÂÃÄÆÅÄÅÄÆÆÇÆÇ„ÅÇÅÇƆÅÅÄÁÃÀÃŽÂÄÇÆÂÃÅÅÆÉÃÆÅÆÇÅǬÉÇÅÆÇÆÄÅÉÉÄÄÈÇÈÄ¢¢ž“•’““£²¿½­¢¤£­­³¼¿ÇÈÈÇÇÆÄƳÅÉÈÇÆÇÆÄÈÂÆÀ½ÁÁÂÇÆÊËÎÔÞßáäçääëêèèæåÞÝÜÚØÔÒÐÊÉÈÄÇÅÃÂÃ�‘ª§¨¨§§¦§©¨¨§§©¦¦¥¦§¦š§¥¦¤›’‰Œ—£ª”†„Š‘¤°²¶·¶¶¸˜½»·¸³µ²¯°±®­«¬®«©©¨ª§©£¥¤Ž¢¡£¤¤¢¡¢¤¡¢¡¢¤¢‹¡Ÿ  ¢ Ÿ¡¢¢¡ ¡¡ŸŸž¡ ¡ £¢Ÿ¡¢š££¢¢¤¢£¡ž ›žžœ—˜˜ww{• ¡ˆ ¡¢¢£¤¢¢£¥¥¦¥¦¥¥¤¥£¥¤¤£”¤ ¢ £¢£¢¤¦¤¢¢£¤¥§¢¤£¥‡¦¦¥¨¥§¨¥Ÿ¤¤§§¥¤¦¦§£„ƒvwsvv„‘žšŒ‚ƒƒŒ‹‘›§º¥¥¤£¤¤¥¤¨¦¥¤¥¤¤¦¡¤Ÿ¡¢¢¦¦¨ª¯³º»½ÁľÀÆÅÃÄÂÁ¼º¹¸µ¶²¯ª«¨¥ª§¨¥£�•”–”““”—”“‘’•‘ŽØ‘‹’ƒ{uupsŒ”{hdfpy˜œ£¥¤¢¡¤¤¦§¢¦Ÿ¡›—œš—•“‘˜••‘‹Œ‹‰ˆŠˆŠ‹‰‹Šˆˆ‡ŠŒ‰ˆ‡ˆ‰‰†…‹†‚‡ˆ†ƒ‡ƒ„†Â‚„†ˆŠ†Šˆ„ˆ‰ˆ†‡‰Š‡‰ˆŒ‡„„…†ƒ„‚{xun]NKNq†‡…†‡‡Š‰‹Š‡‰Š‡ˆ‰ŒŒŽ‹‰ˆ‰ŒŠÌ‹‰Š…ˆŠŠ†Š‰‰Š‡ŒŠŒŠ‹Œ‰ŒŽŽ“‹‘‹ŽŒŒŒ‰Ž‰gecXZTZ[jwˆ‚shfiqsv‚„ŽŽ‰ŒŽŠ‹Œ‘Ž®‹Œˆ‹„ˆŠŠŠŒ•¥¥ª®³±²¶µ²´´²ª¤Ÿ¡¤¡›—’“‘‹”Ž�…ËÈÊÊÉÊÉÊÌÎÊÈÉÈÉÈÇÈÉÇÄÄÅ”ÂĶ«­¬©©²ÀǶ¬©ªª­µÀÄ¥ÅÃÄÁÂÄÃÄÃÁÅÀ¿ÂÁÁÂÁÂÃÁ¿ÁÁÄÂÀ¿ÃÄÁÀÀÁÀ¿¾Á…ÀÂÁÄ¿ÁšÀÃÄÃÂÃÁÃÃÄÅÂÃÅÂÆÃÁÅÅÄÁÃÅÄÂèÅÃÂÂÁÂÂÄÂÁÂÁÁ®¡ž£Ÿ¥­¨££œ•—¡µÄÅÃÅÅÂÄÅÇÆÈÆÈÉ×ÈÊÈÉÉÊÈËÊÈÊÈÈÇÈÈÆÈÈÇÅÈÇÆÆÅÆÄÅÇÇÆÄÇÉÃÅÇÈÈÉÇÊÈÈÇÈÉÈËÏÓÔÔÕÖÜÛÜÊÔÃ¢š™¢šŸ¥´¥‰‚†—†‘™ºÉÊÊËÉÊɲËÊÌÎÏÎÐØ×ÚÛÜÞßáìíðñòôóðíìíïíïìíêèåæäáâããåääæãÛßÞÝàáà�†®«ªª¬«ª‚­¬©¨…§¨¨¦¨¦•¥¥§¤™ŒŒ•¡§˜Ž‹Ž— ¤¡¦¤¤¡£¦¥£¤¡¤ŸŸ££¢¢¡¢¡¡ ¡¡¥¡ Ÿ££  ¡ ‹¡  ¡  ¡ £ ¡ §¢££¡¢ ¢¡¢£¡¡¤£¥¢¡¤¤¢ ¤¥¢¡£¢¡ ¥¤¡ ¢£¡¤¡ ¡ ƒ€…ˆŽˆ‚}wx”¢¢¡¢£¡££¥¤¥¤¥¦¥¦¦§¨§†¨¦¨§¦§¦„¥¥¦§¦™§¥¥¦¤¥¤¥¥¦¦£¦§£¥§¨§©§©§¥¦¨¤«®²²³µ´¸¹»¨° ‚{{„€‡•‡rldhzgu{s𧍍©¨“¦§§¨¨ª¬­­®µ´·¸¹¼¾¼ÈÍÐÏÍÊÇÇÈÇÉÉÇÇÅ¿½¾½ÀÁÀ¿Á½¸ºº¼»�›š™˜™–•˜˜——–”’‘£’‘‘Ž’‘ƒwuvoq{‡‚toptx~ƒ‹ŽŽ‹Š‹²Š‹‹Œ‡‡Š‹ˆ‰‡‡ˆ‹ˆ‡ŠŽ‹ˆ†‰††‰Š†‰ˆˆ‰‡Š‰‡…‡‡‰ˆ‰„‡ˆŒˆ…ˆ…ˆ†Š‰‰ˆˆŒ‡ˆ‹ˆˆ‹ŽŒ‰ŠˆÇ‹ˆ…‡‹‡††‰†‡…wjfibjri_^XNNRn…‡…‰ŒˆŠŒŠ‰ŠŠŒŽŽ‹ŽŽŽŒŒŒŽ‹ŒŽŒŽŒ‹ò‡Œ‘މ‡‰†ŒŽ’”’‹Œ‘‘•—šœ¡ š¢£¥™„c]Ydfcl€lXODL[IS_Yƒ’’ޑޕ˜–˜šœ¡¡¥«ª®¾½ÁÀÂÁ¿ºº¹»¾»¼¼¶¶´±°«¨«­¯¯­«­¬¤¬«®®«­�ˆËÉÈÊÈÊÈÇÉÅǶÅÇÂÆÇÆÄÃÄÂÀÀÁÁ¾ÃÄÃÂÀÁ¿¿ÁÀÁÂÀÁ½À¿¿Á¿¿¾¾¼ÂÁÀÁ¾Â¿¼¿¾¿»¼¾Á¿ÄÿÂÃÃÄÅÃÃÂÄÂÅÄÊÁÇÄÃÃÄÂÄÄÃÄ‚ÃüÄÃÄÂÅÄÄÁÃÀÁÃÀÃÁÀÂÂÄÃÃÅÆÄÅÃÄÅ웜•Œ–™› œ˜›¢¹ÅÇÅÇÈÇÇÈÉÊËÊÈÉÇÈÉ‚ÇÉÈÔÊÉËÍÊËÎÌÌÍÍÎÐÓÓÑÕ×ÔÓÑÔÕÖ×ÕÖÖÙÚרØÛÚÚÛÛÜÜßßãâééëìðîîêëíìíéÜÍÏÝëæÊÀÀ¼·²µ·¸´º½ÂÈÊÊËÉÉÊÉDZËÑÞçêïõõôôöóñðíêèäÞÝÔÏÊÊÇÈÈÉÇÇÆÈÄÅÆÂ¿ÂÁÇÄÃÇÆÄÂÂÆÆÉÎ�Œ¬ª¨ª¬ª¨§©©ª¨§ƒ¦¦£¦¥†¤¡¢¤¢Ÿ£ˆ¢ £ ¡¡¢¡¢‡Ÿ¡ Ÿ Ÿ ž¼££¡¡ž¡Ÿž Ÿ œž Ÿ Ÿ ¤¢¢Ÿ¡¢¢£¤¢¢¡££¢¢££¢¡££ ¥£¢¢£¡¤£¢£¤¡¡¢¢ Ÿ£¢Œ¦¥¢ ¤  ¡¡¢ Ÿ¡¨¢£¤¢££¢£¥¢zqty|{‚~z{—£¦¤£¦¤¦¥¥§¨§¦§¤¦¥¦¨Î©©§¨«ªª«ª­¯²²±³³°±®±²´µ³³´·¸´·¸¸··¹¹º¸»»À¿ÆÅÈÇÈÈÉÅÄÆÆÇÀ³¨ª·Ç¿¥ ž›—“–˜—•𛡦§§©¨¦¥˜¨­·¿ÃÆÎÐÐÑÑÎËÇÆÃ¾¹·¯¬¨§¦§¥¦§§££¤¡ ¢¡¦¤£¥„££¦¨©®�Ř—–˜˜””“••‘’”‘Ž‘ŽŽŒŽ‰‹‹Œ‡‡‹‰‰ŒŒ‹ˆŒŽ‹ˆ‰ˆ‰ˆŠ††‰ŠŒŒ‹‡ˆ‡ˆ‡‰Š…„„‡ö„…Љˆ…†„‡ŒŒŠŒ‰‹Š‰ŒŒ‡‡‹‹ˆ‹‡‰‹ŽŠ‰Š…„‰‡†ˆ‰‡…‰‰ˆ‹‹Ž‹ˆŒ‡ˆˆ‡ˆ‡†‹Š‰‰ˆŠˆˆ†‰‰‹ˆuff]TTYYZ`ZTUSr‡‰Š‰ŒŽŽŠ‹ŽŒ‰ŒŽ”‘„“–›šœˆ›—˜—¡£œ¯š˜ŸŸ¡¤¥¥¤¤Ÿ¦¨®­¶¶¹»½»º³³¹··­šŽ¢·¨Ž‹‡ƒ}v{}yxƒ…‹¹‘‘“‘ŽŒ’˜¤­³¹ÀÄÆÇÄÅÀ»¶²³¯¤£š•Ž‘‹ŽŠ‡‹Š‰Š‰ŽŠŒŽŽ’””›�¨ÇþÀÆÅÇÄÆÅÂÅÃÂÄÃÁÃÁ¿ÀÃÁ¿ÀÄÀÀ¾¿ÀÀÁÀ½¾Â¿¿À¿ŒÀÀ¾ÁÀ½Á¿ÀÀÁÀÂÁÃÂÅÁÃÁÃÁÃÅÅÂÂÅÄÆ„ÅÆÅÅÄÇÄÅÅÄÆÄÄÅÆÄÄÂÅŽÆÄÇÅÆÆÃÃÆÆÅÄÃÄÅŒÃÃÄÂÅÅÃÆÇÅÆÆÅ„ÇÇÈÈÉßÈÇÄɰœš–•”šŸŸŸ› ¥»ÈÉÇÊËÌÍÍÎÍËÌÊÌÌÍÎÎÐÎÎÍÒÕØØÛÞàÞâæçèêéëìííëêåäâãâäåäåèåèèçêíïîêèçèèêæäââßÜÙ×ÒÑÌ„ËÊÉȈÈÇÈÈÅÉÈÅÇȸÆÇÈÇÈÉÇÇÅÆÇËÌÓÔØÚÙÖÑÊÅÈÄÅÅÄÂÅÅÆÄÃÆÅÅÃÂÇÃÃÄÃÂÂÄÅÅÁÀ¿ÀÀ¿¾¿¿Å�’§¤ž §¦¦¤¥¦¤¥¥£¤¤¢¢ Š¤¡ ¡¤¡  Ÿ ¡žŸ£žŸ¡¡Ÿ ¡  ¢¡ž ”¢¢ ¡££¤¡¡¢£¡¢£¤¡¡££¥¤ƒ£¤¤£ž¥¢£¤£¤¢¢£¤££ ££¢¤¢¥£¥¤¢£¤¥¤£¡¡¤Š¢¤¤¡£¥¢£¥¥¤££¦¨¦¥¦¦§¥¢¦‘€z{y}}‚{}‚—§¨¥¦¨¨ª«ª©¨‚§©ªÅ«¬«¯²´³·¸»º½ÂÁÁÂÃÄÅÅľ½»½¾ÂÂÀ¿ÂÃÁÁÄÇÈÈÇÆÂ¿ÀÁÂÁÀ½¼º·´²­¬©©¨©¨§¦¤§¨¨¥¦‡£¦¦¥¥£¤¥˜¦¤¥¦¤¥¥¤¤££¤¨¨¯¯²´´°­¦¢¤¡ ¢£¤£¡¤£¤¢¡¥¢ ¢¡‹£¤£ ŸŸ¡ ŸŸ¡¡¥�ž‹’‘Œ’ŽŽ‰Š‡‰ŽŠˆ‹Ž‹…‡°‰…†‹‡‰ŒŠˆˆŒŒ‹‹Š…‰‰Š‡†‰‡ˆˆ‰ŠŠ‹ˆŠ‹‰ŠŠˆˆ‡ˆ‰‹Š††ˆ‰þ‹‰ŒŒ‰‹‰ŠˆˆŒŽ†ˆ††ŠŠŒŽŒ†‰‡Š‹‹‡†‰‹Šˆ‹Œˆ‰Œ‰ŠŠŒŒ‰‰‹Š‰ŒŒ‰‰‰Œ‰vge^_ZZ\\`^VTUt‰Ž‰Š“’’ŽŽŽ‘““‘‘”“˜Ÿ ¢¥¨£¨®¯®®¯±²µ·¯°«¦¥¦¥°°¬¬¯™±¬«¯²µ··²¬§ª­®­¬©§§Ÿšœ–”Ž•“ŽŠŽŒ‹ŒŽŽ”ŒŒ‹Œ‰‰ŒŽŽ”—šœ’’”Œ†ˆŸ‡‡†‰Š‹‰ˆŒŒ‡†Ž‰ƒŠŠˆ‰‹‰ŒˆŠ‡ˆˆŒ‹‹�˜ÅÃÁÄÅÄÆÀÂÀ¿ÂÁÀÁÀÁÂÃÂÁÃÁÀ†ÁÀÃÁÃÓÄÃÀÄÂÃÀÂÄÂÅÄÂÅÄÃÄÂÂÃÂÄŒÃÅÄÆÄÄÅÇÄÅÇÆÅ‚ÇÆÄŒÆÇÅÃÃÆÆÅÅÆÇÅÆÇÈÄÆÈÆÇÆÅÅÃÃÄÃÅÃÆÊÈÉÉÊÈÉÇÉÊÊÈÈÉÊÉÊËÉÈËËÊÆÊɧ—œ—˜–›œœžžœ¢½ÉÊÌÍÏÚãëìàÓÖÙÝÞâææèèêìîííëèçããßÜÝÜÛŒÞàââãæçéëíîíëŸèßÞÝÚÚ×ÕÑÍÌËÍÎÏÌÊËÇÅÄÃÀÃÆÅÄÇÃÄÇÆ‡ÄÆÅÅÂÃÅÆ„ÇÅÆÆĘÇÂÃÂÂÃÇÆÃÄÁÂÄÀÃľ½¼ÁÄÁ¿ÂÁœÂ¿ÀÂÃÁÁÂÄÆÂÀÂÁÂÃÆÅÆÄÃÂÿÁ¿ÁÇ�Ž¥¤ £¥¥¦¡¢¡ ¢¢ ¡¢¡¡££ ¡¢£¡ ¢¡£¥¢££¢ ¤¢£¢¤¤¢¤¥£¥¤££¢¡£¢¡¡¤¥¤££¢¥¢££¦¥¤£¤£¤¤¢¡¢¤¥¤¡¢¤ƒ££¥¤†£¤¥£¥¦¥ª££¢¢¡ ¢¡¤¦¥¥¦§¨§¦£§¨§¥¥¦¨¦§©§¥¨§§¤¦§‹}}}z~þ~{y~™§¨§¨«µ½Çꝲ´¸º½¿¾ÁÁÅÄÆÄÅÃÀÁ½¼º¹¸·¶··¸ºº»¾ÀÂÂÄÅÊÈÄÆÃ¹¹ºµµ³±°«©¨©ª¬ª§¨¤¢¡¢Ÿ¡££¡¤£¢¥£¢£¢£¤¤¡ ¤¥¥¤¤££¢¡¡¢¥ ¡¡ ¡¢¢ ¢ ¡¢ž ¡œŠ›œŸ¢žž¡ ŸŸ ›¡žŸ ¢  ¢££¢ ¡  ¡¥££¢¢¡£¢ ¢¡£§�ˆ‘‹“ŠŒ‰ŽŠŽŽ‹‰‹‰Œ±ŠŒŽ‹‡ˆ‰‹‹ŠŒ‹ŒŠˆŠŠ‰ŒŽŒŠˆˆ‡‰‡‡ŒŒ‹‹Š‹Œ‰Œ‘Ž‹‰þˆ‹ˆ‹‹‡ˆ‰ŠŠ‰Š‰‹Œ‰ˆŒŠ‹‰‹‡†‡‡ŒŒŽŠ‰‰‡ˆ‰†ˆ†Œˆ‹ŽŽ‹†ŠŒŒŽŒŠŽŽ‰‹Œncg_a[^]]^XTNOvˆ‘ž­¸µ¢—šŸ¤£ª¯®¯±µ³´´²³­¬§¥¢£¢Ÿœœž¡¤§¥©¯Â¬¯²²·µ±³®¬¡ ¡Ÿ››–‘’“‘މ†Š‰Š‡ˆˆŠŠŒ‰Š‹‹Œ‰ˆ‹ŽŒ‰Œ‹Œˆ‡‰‰ŒˆŠ‰‰ˆ‰Ž‹ˆ‹ˆ‚…ˆ„‚|‚ˆ„ƒ…Ÿ‡††‡‡†‡†ˆ‰ˆ‡‰ŒŒ†‹‰ˆŠ‰Š‹‰ˆ‰Ž‹Ž‘�ŽÈÈÅÆÄÅÄÅÃÃÄÄÃÉÄÃÁÃÄÄÃÄħÁÄÃÂÁÂÂÁÃÄÃÂÀÃÂÃÁÂÂÃÅÄÂÅÂÃÄÃÄÁÀÂÃÁÄÂÅÄÂÄ„ÅÄÆÄÆ„ÃÃÅÆÇ‚ÅÇÆãÅÅÆÇÆÅÅÇÆÆÉÉÈÈÉÇÈÇÈÇÈÈÊËÊËÊÊÌÌËÉÈÈÉÌÍÉËËÊÊÉÌÉÊÌÉÆÎ¦™œœ˜œžžœœ ›¢ÐçéììíîñõôõóôôóòéáÝÚÔÕÒÑÏÑÑÎÓÕÛàâæëì˜ïíçåçàÚÜÖÐÒÏËÌËÇÈÇÈÉÉÈÊËÊÉ‘ÊÈÇÇÈÆÇÆÇÅÃÄÅÄÂÁÁƒÃ¿ÀŠÂÂÀ¿ÀÅÄÁĽ”¾¼¾¾½¾¼¹¼¹»¾»»½¾¿À¿¾‰ÀÀ¾À¿¿ÁÀÀÂ’ÅÁÁÃÂÁÂÄÅÃÄÂÁÁ¿½¾¼¿¼�ƒ¨¨¤§™¥¥¢¤¥¤££¢£¡¤¤¡¡¤¦£¤¥¤¤¢ ¤£¢£Ÿ¤¡¢¤£¤¢£¤¥¥¤£¤¡¡¢¢¤ ¡£¢¡¢¢¤¢¡£¢¤–£¤£¤£¤£¡¡¤¥¦¥¤£¤¥¥¤¥¤£¤‡££¦¥¥¨¨§‰¤¦¥¦¥¦¦§©§Žªª¨§¦§¦¨ª§©©§©¨Ÿ§¨§¤¬Šƒ‚{zx~§ÀÂÄÆÆÇÍÓÑÑÏбŻ··²³®­«¯®ª°²¸»¾ÀÂÃÆÇÈÆÀ¿À»¸¹²®¯­¨§§¥¦¥§¦§¦§©§§¥¦‡§§¦¥¥¦¥¤ž¡£¤¤¢ Ÿ ¡¡¢¢¡Ÿ¡¢ žŸ¢¢Ÿ¡¡œœ››šš›™š›™œžžŸžœŸžžŸŸ ¡¡¢£¢ £¡ ¡¤£¡¢¡¢¤¢žŸŸ ž�Š””Ž’••“ŽŒ‘—ŽŒŒ‹ŒŽŽ‘Ї‹‹Ž‰ÉŽŠ‰‹Š‹ŠŒŒŒŒ‹ˆˆ‰Š…‰ˆ‰ˆ‡‰ŒŠˆ‰‰ŽŒŠˆŒ‰ŠŒˆ‰‹Œ‹Šˆ‹‹‰ŒˆˆŒˆ‡††Œ’ŠŒ‰ˆŠé“ŽŽŒ‘Šˆ‡Œ‹ŽŒ‘Œ‹ŽŒŽ‹Š‘pfihe[]ba\SWKO…ª´¶¶´·¿ÈÁÃÂÃÇÃÀ²¥¡Ÿ™—”’“—™¢£ª­³·µµ¹¸®«¬¨¢£œ‘“ŠŒ…ŠŠ‹Ž‹Œ°ŽŽŒŽ‹‰‹ˆŠŠŽŒ‡†Š‰Š‹†‹‡‹‰†ƒƒ‡††ƒ‡‰…‡…†„ƒ…††ƒ‘}~…€ƒ…ƒ††‚„†…†ƒ†–ŠŠ‰‰Š‹Ž‰‰ŒŽŠ‰‹‹ŠŒŠ‹Š�”ÇÅÄÇÅÆÇÅÃÀÂÃÂÂÄÄÃÄÂÂÃÕÂÅÂÃÂÁÄÃÅÃÅÃÂÁÃÂÁÂÂÄÄÂÀÄÂÄÂÁÆÄÄÂÂÁÁÃÂÁÃÀÄÅÃÄÅÅÄÆÆÈÅÈÆÅÆÉÈÈÇÇÊÉÇÇÉÉÆÈÈÇÇÈÊÈÌÉÇÊÉÉËÊÊÍÌÍÝÊÉÊÉËËÍÌÏÐÐÏÖßãàÕÍÍÑÐÓÔÖרÛÝßãâé°™™š›œ Ÿ¢ž¤ÏÞÜÛÚßÜÞíñòòóôóóòîëëêêëëææèêïñìåââßÛÖÑÐÑÏÍÊËÊËÊÉšÊËËÉËÉËÌÉÈÉÈÊÉÉÊÉÈÊÉÇÇÄÈÄÅÇšÆÅÈÆÅÆÇÅÄÂÁÃÀÀÂÂÿ¾¾ÀÃÃÁÂÁÆÂÁ¿¾À‘¿¼ÀÂÂÁÁÃÂÁÀÁÁÀÀÁ¿†¿¿ÂÿÂÁÁÃÂÂÄÃÂÃÿ¿½¿�„¨§¦¨§‰¥¤¢¤£¢¥¥¤£¢¢£¤£¥¢¤£¡£¤¥¤¤£¢±££¤£¡¤¢¥£¢¦¤£¡¡ ¡¡¢¡¢ £¤££¤¤¢¤¥¦¤¦¤£¤§¦¥¥¦¨§¦¥§§¥¦…§¥¨¥¦§ˆ©¨¨«ªª©©¨©Ô«¬¬«²ºÃ¼°«¬®¯±±´µµ¸¹º½½Â‘~ƒ~€€}z§»»¸¶º¸¼ËÓÒÐÒÓÒÓÐÊÇÇÄÆÆÃ¿ÀÀÂÉËÅ¿½½º¶²®®¯¬ª©©§©§í¦¦§¦¨¥§¨¦¥¦§¨¦¦§¦¥¦§¥¥£¥£¢¤¥¦¤¤¦¥£¥¥££¡¡¢Ÿ  ¡¡œž ¡¡Ÿ¡ ¡¢¡¡ ŸœŸžŸžžžž›ž  ŸŸ¡ ŸŸ ŸžžŸž  ¡Ÿ ¢£¡ ¡¡  ¡£¡¡¤¢¤¥¥ ¢�©”’Ž’”–“‹ˆŽŒ‹ŒŠŒ‹‹ŠˆŠ‹ŒŽŽŠ‰ˆ‹ˆ‹þ‰‹ŠŽŒˆ‡ˆ‡†‰„†…‰‹‰Š‹Š‡‹Ž‹‰ŠŽ‹Šˆ‰‹‰‹ŒŒ‰ŠŽŒŠˆ‡Œ‘Ž‹ŒŒ‹‹ŽŒ•“” §¥•Ž“”˜–š›—¡¡£§§°zfjfc`^a_^YZNO‚¦¦¡ž¤¡¶¾ÃÂÅÆÄþÆÃ»µ±±´¸³¨§«®¹º´«§¨¦¡œ—”—’ŽŠ‹ˆ‹Œˆ‹Š‹Ž‰Ž‰Š‰‰ŒŒŽŠ‹Š‰‰ŒŠ‰Ž‹‹Œ‰‡Š‡Š‰ƒ€…‡‡ƒ†ˆ‰‹Œˆ‰‡†‰†„…„‚ƒ‡‚…‡‰…†‹ˆ„‡ˆ„…„…†‡‡‰†‡”ŠŠ‰ŠŒ‹Š‹ŠŠŒ‹‹Ž‰ŒŽ�šÅÅÄÇÄÅÇÆÂÅÃÄÃÂÅÆÄÃÄÂÂÃÁÁÃÀÁˆÂ¿ÀÃÁÄÁßÃÃÄÅÄÄÆÆÅÄÅÄÅÂÂÄÄÆÄÂÄÅÃÄÅÅÆÇÆÅÆÇþÈÅÈÇÆÇÆÇÆÃÇÈÈÊÊÉÌËÊÊÉÉÍÎÎËËÊÈÇÊËÈÅÊÌËÉÌÌÍÎÎÓÕÙÜßßãéðîëäåêìíîïîììëæçå⮞ ¡¡œš™œ Ÿ›£ÁÌËÎÎÑÕØÜáäèìïîððïîìëèääÜÒÒÐØÛÑÎËÌÍÌÌËÉÉËÌËÌÈÉÊÉÊÉÇÆÇÉÉÇÆÅÅÆàÇÅÆÇÄÅÆÄÅÄÇÆÅÆÇÆÆÅÃÄÄÃÃÄÂÄÀÄÃÂÆÁÁÄÃÃÄÁÃÃÂÂÁÄÃÂÁÄÂÄÀÂÃÀÀÁ¿ÃÂÄÃÃÂÁÂÄÿÀÁÁ¿ÃÄÀÀÁÄÁ½ÁÀ¾½ÁÁÂÃÃÂÃÂÁ¿Â¿¿¾�…¦¨§ª¨§ˆ¢¤¥¥¤¥¥¦¤Š£¢¤¢¡¥¢¢¡¡£Ž¤¢¤¢¤¢¢£¤£¤¥¤¥¦š¥§ ¡£¤¥£¢££¤¥¤¤¦§¥¤¥§¥¦§¤¦¥Œ¦¤£¥§¦¨¨§©¨¨§â«¬ª©¨©§§©¨§¥©©ª¨¬«¬­­²³·»»¾ÅÊÒÑÈÁÃÈÉÉÈÉÉÅÅÄÁÀ¿»ƒ††…€}}‚~{y€¬ª¬«­´·º½ÂÄÅÊÈËÊÉÉÈÅÁ¾½·¯¯­³µ­¬©¨©¨¨§”¨¨©¨¨§¦§§¦§¦¤£¤¥¥£¢¤¥‚¤¤£¤™£¤££¥¤£¤£¡¤¥¤¤£¢£ ¢¢¡¤ ¡£¢² ¡¡ ¡ £¡ Ÿ¡¡£ŸŸ¡ŸŸžž¡ ¡¢¢ Ÿ ¡¡žŸŸ Ÿ¢¢  ¢£ ž¢ Ÿ ¡£¤…¥££¥¤¤¢�’“‘“”’ŽˆŠŒŠŒ‹‹Šˆ±‰‹ŠŒ‹ŽŒ‹ˆŠŒŠŒ‹ŒŒŠ‘‘‰‹Š‰ˆ‰ˆ„†‡Œ‰Ž‡ŠŠŒŽŒ‹…Šˆ‰ˆ‹†ŽŠþ‹Š‹‹Œ‡‡ŠŒ’’‘•šŸ¤¦¥®¶Å÷­®ºº¹·³±²³®¨©§¥xkoolc]\\_ZTNQy‘’“—™ ¥¬±²·¶»º¸³®°¯¯©“”‘—“‘Ž‹‘‘‹‹ŽŠ‰ˆˆ‰‰Š‡ŠŒŒ‹Š‰ˆŠ„ˆŒ‹Œ‹¸‰ˆ‹‰ŽŠŒ‹‹Š‰‹ˆ‹…‡‰ˆ‰ˆ‰‰‡ˆˆŒŒˆˆŠˆ†„…Љ‡…‡‰‡‡ˆ‹‡†ˆˆ†›‡‹ˆˆŠ†‰‹Š‰‡‹‰ˆ…‰‰‹ŠŒ‹‰ŽŒ�‡ÇÇÃÆÅÆÇÆ–ÃÄÄÅÄÆÄÅÃÃÆÅÂÃÄÁÂÄÅÂÅÄÆÅÅÄÅÄÄÂÂÆÇÅÈÆÇÆÇ©ÆÈÈÇÈÄÄÆÅÇÈÈÉÈÇÉÇÆÈÈÆÇÅÅÇÉÌËÊÎÐÎÎÍÎËÎÎÊÐÐÑ”ÏÑÒÑÕ×ÛÛÜÞâåæêìïîïïíð…îñôòòóùòóîÞ×ÓÔÒÒÑÐÐÓβ¢¢£¡›žžŸœ›¢ÍàäéêîðíîíéåâàÝØÒÑÏÎÎÍÏÏÌËÍËÐÍÌÍËÉÌÍÌËÉÉÊÉËËÉÊÉÈÆÆÌËÅÅÄÆÈÈÆÇÈÇÆÆÇÇÅÆÈÅÅÆÄÄÃÆÇÁÂÄÃÂÂÄÃÅÄÃÁÂÂÀÀ¿ŸÀÁÀ¿ÃÃÀÀ¿¿ÀÁÀÁ¿ÁÀ¿ÂÅÿ¿ÀÁ¿ÁÂÀÂÀ¾ÀÀÁÅÅÂÁÂÃÀ¾¿Á‰ÂÃÂÂÁÂÀÁ¿Á�…¨¨§¨¨§¦„¥¦¥¤¥Ž£¤¥¥££¥¤£¤¤¢§¤¦‡¥¥¦¥¥£¤¦‚¨¦§“¥¦§§¥£¤¥¥¦§¦§¨¦§¦¦§¦’¤¥¦§ª©©­¯¯­«¬ª«¬ª®¯ž®°²°´µ¹º»¾ÂÄÄÅÇÍÊÉÊËÌÊËÎÏÔÖÖ×ÕÒ̾¶²±¯¯­¯®°¬•‡Ÿ„€~~{y©¾ÀÅÈÊËÇÈÅÿ»¹·´¯­­««ªŠ¨©©§ª¨©©§¦¨„¦§¦¨§‰¥¤¥¥¨§£¤¢¤‡¢£¦¥¤£¤£—¥¥¤¤£¤£¤¥¡¡¢ ¡ ££¤££ ¡¡Ÿž ¡¢ Ÿžž¡¡žžž¥Ÿ ŸŸ ¢¡Ÿ¡žŸ žŸ žŸŸ ¡Ÿ¡ŸžŸŸ¡¤¥¢¡¡¢  ž¢‚¥£¤ƒ£¢¢¤�±–•”“‘‘Ž“’‘ŽŒŽŒŒŠ‹Š‰ŒŽ‘ŽŒŽŽ‹ŠŽŒ’²ŽŒ‹‰ˆŠŒŽŒŽ‹‹‹‰ŠˆŠŽŽ“–•”’Ž’’˜˜—••“™œ˜›¡Ö§¯²±³·»¶µ¹¸º¹¼º½¾ÉÉÈÉÆÇÆÇÀ«••—š•’‘”‘|opnjc_a[[XQOS‹§­³°³¸±´³ª¨¤ ›™’Œ“ދЉ‹Ž‰½‘ŽŽ‘‘‘Šˆ‹Œ‘Š‹‰‰Š‰††‹‰ŠŒŠˆŠŽŽ‹ŠŠŒŒ‰ŒŒˆ‡‰‰Œ‹ŒŒŠ‰‹‰‡‡†…†ˆŠ‡»„ˆ††‡…†‡ƒ…‰ƒ††ˆ‹Š†Šˆ…†……‡‡††‡‰†‰‹†…†‰ŽŽ‰‹Œ‹ˆ‡†‹ŠŠŠ‰Œ‹ŒŒŒ�£ÊÉÅÆÆÇÇÆÈÇÅÃÆÆÅÄÄÆÅÆÆÅÇÂÅÆÅÆÄÄÅÆÅÇÈƉÇÈÆÇÇÉÇÈÉÇ‚ÆÈÇþÈÅÆÇÅÆÇÅÈÇÆÇÆÅÇÉÇÅÉËÌÌËÌÒáíïçÙÔÔÛßáçééêëíîðñòòôôóïììèçåãààÝÚÜÜÙÙÛãñôõôõõööôóïêéèçäæåâä¼¢¡žœ ¡Ÿœ—¤ØîìçáãÝÛØÔÕÑÐÌÍËÌÍÍËËÍÎÍËÍ ÌËÍËÌÌËÈËËÉÊÉÉÈÉÉÇÈÉÈÅÇÄÇÆÂÇÆÇÆÉǹÆÁÄÄÅÃÃÂÂÃÆÃÅÃÄÅÀÂÃÂÁÁÀÂÄÀÁÀÃÃÁþ¾ÀÄÂÂÀ¿Â¾¾À¿¿À¿¾¼ºº½¼¾À¾¿‰¾¿¿À¾¾¿ÁÂÀ™¾Â¿ÀÂÅÂÂÃÂÃÄÅÄÄÆÅú¹¿¿À¿»¼�…ª©§©¨§…¨§¤§¦¤¥¤™¥£¥¥¤¦¤¤¥¥¤¦¦¥¥¦§¨¥¦¦§¦§§¦’¥§¦¥¦¥¤¥¦¤¦¥£¦¥¤¥¤¥¤£¦ª©ª©«°¾ËÐŶ²²·»¾ÂÅÆÉÇÈÊÌÎÍÏÎÎÌÌÊž¿»º¹·µ¶³³·¿ÍÑÑÏÒÔÓÖÓÐÊÇÄ¿ÃÀ¿Àœ‡†ƒ„||}v€±ÇÆÁ½½¸µ³¯°¬ª¦¨§¨¨©§§©ª©§ª¨Š¦¨§§¦§§¦§§¥Š¤¦¦¤¢¤¢¥£¡¤ˆ£¥¤£¥¤ž ¡§ ¡¡¢£¢£¡¡£¡¡ ŸŸžŸ¡¢Ÿ¡Ÿ ¡  ž Ÿ  žž  œœž¥›™˜—››œžœ›œžŸžœžœœŸŸžŸŸŸ  £¡¢£¢¡£¤ˆ¢¡ž¡ ¡¡ž¡�ˆ˜–•–’’þŽ“ŽŒŒ‹ŽŠŽŽ‹ŠŽŒ’‘‘ŒŽŽŽŽŒŒ‰‹Š‰Š‰ŒˆŒ‹‡ˆ‰‰Š‹’’‘𫼯¶¡™œ¢¨«°´¶¶·º¾Â¿ÀÁ»»º¸µ°­©¦¡ ž˜š›™™š¤¼Ä¿ÁÅÅÄÅÃż³±±Ç¸²±¯°¬ƒoohebcc]XWVMT–³²«£ ›””“ŒŒŠŠ‹Š‰ˆŽ‘ˆ‰ŽŒ‰Ž‹ŒŒŒŽŽ‹…ˆ‡‹ëŠˆ‡Šˆ†ŒŠ…†‡‡…ˆŠ‹Šˆˆ‹‰ˆ‰Š‹†„††ˆŠ‹‹‰ˆ‰‹ˆ‡„†ˆ‡‰ˆ…†ˆ†€……„…„~}‚{€‚†‰†„„…‡ƒ‚„ƒ†„„‡‡„…‡„†ˆˆ†ŒŠŒ‰‰‹ŽŒ‹ŒŠƒ„ŒŠŒ†ˆ�‰ÈÈÉÉÈËÇÇÉÇŠÆÆÈÈÅÇÈÈÇÈÇ„ÅÈÉÅȇÉÉÇÈÉÇÆÈ¿ÌÇÉÈÊÉÇÈÊÇÆÄÇÅÃÇÇÉÊÊÏÌÎÏÒÔÔØÛÛÝâåâéëìïñòóòòóóõòíìêêéêæâäêåÝÙÙÓÓÔ¦ÕÕÔÓÔÔÕÔÒÔÓØÚÙØÚÖÜßâæëííîñõöôô÷º™œ•–›ž¡Ÿ¨ÂÐÍÏÎÏÍÌÍÎÏÍ£ÐÌÎÌËÊËÌÊËÊÌÊÊÍÌÍÊÉÈÉËÈÉÊÈÈÉÇÇÆÈÈÆÇɪÈÇÄÆÆÇÆÅÇÇÆÅÆÄÃÃÁÂÄÂÃÃÂÄÂÀÂÁÀÁÀ¿ÂÃÀÂÂÃÃÁÁ¿ÁŽÂ¿ÁÀÁ¿Ã¿ÁÁ¿À»¾‰º½¸´»½Ã¾¾À‚ÁÀÁ›¿¾ÂÀÁÄÃÅÄÆÄÄÂÄÞ¿ÇÇùÄÌÓØÛá�¨©§¨‡§§¦¥§§¤¦Œ¥§¦¥¦¥¥§¨¦§¦§¦Í§¦¥§¦§©«¦¨¦§§¥¦¨¦¥£¥£¢¦¤§¨¨¬ª¬¬®±²µ¶¶¹¾¿¾ÂÇÈÍÐÔÑÎÎÐÓÔÐÊÉÇÈÄÄÀ¾ÁÆÂ¹µµ±±²±±°±±°¯¼±°®°°´µ´µ¶³¸¾ÁÁÅÇÈËÒÒÓÓÖÖ›‚|z~„„‚~||„Ÿ¬ª«ªª¨§©©«©©§ª©ª¨¨§§¨‡§¨§§©¨©¦¨¦ƒ¤¥¦¥‹¦¥£¤§¦¥¥£¡¢£¥¤¤¡¢¤¢¢¡ ¡¢Ÿ¢¡ ¡  Ÿžž Ÿž ¡ž  ¢ ŸžžŸ¡ Ÿ‚Ÿ ž™œ››œ™˜”šœ žœž‚Ÿ Ÿ›žŸ Ÿ¡Ÿ¢£¤¥¤ ¡¡¢¡žŸ¥¦£ ¦­µ¹¿�©“”•–”’‘‘Œ‘“ŒŒ‹ŽŒ‹ŽŽŠŒ‹‘’ŽŽŽÅ”ŽŽŒŽŒ‘‹ˆ‹‡‡ŒŠ‘’““––˜ž £ª­©°³¸ÀÄÉÄÃÂÉÊǸ¸µ±¯°¬§¬µ®£š›—•‘“’’”’«‘“’””™™—™™•œ¡¢«®³·»ÂÇÅÇËÉ„fjb__bcd_[WSX{‘Ž„‹ŒŽ©‘‘ŽŠ‹ŽŽ‹‘ŽŒ‹‹ŠŽ‹ŠŠŽ‹‡ˆ‰Œ‹‰ˆ±†‰ŒŽ‡‡‰‰‡ˆ‡‹Š…‡‰‡ˆ‡ˆ‰…†‡†ˆ‰‡ˆ†‰‡‡†…‡‰ˆ‡‡…„†ƒƒ…‡…•‚‚}ƒ€ƒ€‡‚{‚ƒ‰‚…„ƒ…ˆ‡œƒ…„†ˆ‡ˆƒŠŒ‘ކ‡‰Š‰„ˆ‹…‘§©®°�†ËÈÊÉÉÈÉŽÆÇÉÈÈÇÇÅÇÇÉÅÇÆÈŽÅÄÈÇÆÇÅÅÇÈÇÅÆÉÇ¿ØãéáÏÂÄÇÎÏÔÖÓÙÛÛÝæçéêìíïîïîïðñïïíãæäââçóóòòóôóòóìáßÙÝÜÙØÙÛßÙÛÙÙ؇×ÕÕÖÓÔÔÒ§ÐÓÑÔÖÙÜáååèëíïñóòóñòñíèã°“•œ¢¢ŸŸ ›¡¥ÂÌ’ÎÌÒÏ×ÎËËÍÏÌËËÈÊËÌËʃÈÉÊÉÊ„ÈÇÈÈÉÅɵÆÈÄÅÆÅÂÃÅÅÆÅÃÃÂÃÁÂÁÂÄÃÀ¿ÂÂÀÀÁÃÂÁÁÂÃÀÀÁÀ¾¿¿¼¾¾½¾ÃÀÂÂÁ¿˜Ã¾½¿¿À¿ÀÂÂÁÁÀÁÄÂÃÁ¿Á¿¾¿‡¾ÁÂÃÃÄÂÁÀÁ¿ÍÚÜÝäéììãêîîïïí�©§©¨©¨©ª¨¨§¨¦¨§§¥§¦¨£¦¥¦¦§¤¥¨¨¦§¤¥¦¥©¥¥¨§¦¦µÄÊ¿¯¢¤§¬­±²±µ·¸»ÂÁÄÄÇÇɪÈÌÉÇÅ¿ÁÀ½¾ÂÏÒÓÒÓÔÓÔÕÊÀ¼·¹·¶µµ·¼¶µ´µ´´µ³±±²°ª®®¯­°®²µ´¶½ÃÄÈÈÊÉÌÍÎÏÐÍÍÊÆÂ’uywz€…„ƒ€{~©„¬«²«¨˜ª©©¨¦§¨©©¨§¨¥§§¦¦§¨¨§§¥¥¦±§§¨¤§§¦¥¦§¤¦¡¢£¢ ¡££¤£¡ ¡¢ ¡¢¡£¢ŸŸ  ž  ¡ ¡ ¡ŸŸ Ÿž†œžž¡Ÿˆžž¡œžƒžž ŸŠ  ¡  žž žšŸ¡¡  ¡ ¡¡Ÿ¡ ¬¶¹º¾ÄÉÈÃÇÈÌÏÎÊ�þ’”“’“”’Œ‘‘ŒŽŽŠŠ‰ŒŽŒŽ‰‹‹‘ŒŒŒ ³»­˜ˆˆŒ–˜š—ž£¡¢¯°³±¶¸¹·º¸·º¾¸µ³ª¯«§¥¬ÂÉËÆÇÈÍËŹª¤Ÿž››¡§›™››š•–””•’•’‘‘“”—š˜Å¨©§«°´·¸½»¿À½½·°­z]a^`agdb^]TUV|Œ‘Ž“™Š‘“‘Ž‘‹Ž‹ŒŽŽŒŠ¼Œ‘Ž“Œ‹ˆ‹‹Œˆ‰Šˆ‡ŠŽŽˆ‡‡‰ˆ‡‡‹‰ˆ‡†„‡ˆ‰ˆ‡‡‰†‡ˆˆ†„…‡„††ƒ…‡††Š‡†‡†„µ†€ƒƒ…‡„…†ˆ‰…†‡Š‡†ˆ‡„‰„„‡ƒ‡…†ˆˆ†…‡ˆŠ‹…‡ˆ”¡¤§²º»¼±»ÆÆÃÁÀ�”ÊÉÉËÊÉËÃÇÅÂÊÇÈÉÇÆÊÈÊÉÂËÉÍÎÌÍÎËÒÐÕÙÙÚÝßáãåæëïòòîîðñõ÷öðëíêççåàÝÚÛÖÙרÖÒÍÍÌÌÏÑËÐÑÎÏàñóñõôôõ óóîëêèèææãâãßÛÚÚØÙÔÖÖÔרÙÞäçìíôõöÂóòòíëçâÞÛØÕÎËÊÍÉ›wwq|†’› ¢£Ÿ£«ÁÊÊËÊÌÊÌÔÐËÍÉÉÌÍÉÊÈÉÊÉÉÊÇÇÆÅÇÇÆÆÉÉÈÊÈÊÉ”ÊÇÇÄÆÇÇÄÂÃÄÆÄÅÃÂÃÃÄÃÁ¥ÂÂÄÀÀÂÁ¿¿ÀÁ¾¿À¿¿½¾¿¾À¿¾¿½½¿¾¾À¿¾À¿À¿¾¿œÁÃÁÁÂÁÀÁÃÄÄÁ¿ÂÁ¿ÀÀ¿ÁÃÂÁÂÅĘÀºÄËÔÜÛàãçìñðîëéäåäÜ×ÓÍÅÂÀ�©©¨ªª«ª¤¦¨¤¨¦§‰¦©¨©¨¨©««¬²°°®³°µµ¸º»½¾ÀÃÅÈÐÓÒÎËÐÎÓÚ×ËÇÇÆÅÄÁ½¹¶¸´µ¶¶µ°ª«ªª­®ª­…¬½ÍÒÐÕ•ÖÑÎÉÇÉÈÅÂÂÁÀ¿¼º¶··¸±³´¤µ¸»ÁÃÊÊÔÔÓÓÐÑÐÒÊÈÁ¾º¹¶²¬©©ª§€]`[dlw~£~€†§§¨§¨§©°­©ª§§©ª§§¦¦¨¨§¦¥¦¥¤¤¥¤¤¦¥§—¦§¨¦¥¢¥¤¥£¡¢¢¤£¤¢¡¡¢¢¡ Ÿ£ ¢¡ ¢¡Ÿž ¡žž ŸŸœžž žžŸœœžœžŸžž žŸž‚Ÿ¡ ˆ¡žŸ¢££ ž §žž  ¡žŸ¡Ÿ  £¢¤¥¡¤©°··¼¾ÂÇÌËÊÇÄÀ¼¸³¬¦¥£�Œ“‘’”—“ŒŽ‰‚‹ÌŒ‰‰’”““™˜•œ™› £¦¨§©ª­¬½ÊÅÂÀ¿ÁÂÉÏľ¶¶µ²®¬¦¤›Ÿ››šžœ’ŒŽ‘”‘’Ž£¾ÈÁÄÇÍÍÇÈÂÁ¸´³ä®¯«©¬¥£ ž›š–™˜–šœ› ¨¬¹ºÀÂÂÆÆÄ»ºµ°¬¨¡œš˜‘ˆŒŽhGLFKR[]`_]UU^|ŠŒŒ‹”“ŽŒ‹ŒŽ‘ŽŽ‹‹ˆ†‡‹ŠŒŽŒ‹‹Œ—‘‹‹‰ˆ…‰‰‹ŠŠ‰ˆ‹Œ‹‡…‡…†‡ˆÚ‰ˆ„…ˆ‹ˆ†ˆ††‚„‡ˆ‰ƒƒ…„……‚…††‡‰†……‡†…„‡‰‡†‰Š‡Š‹ŒŠˆƒ„†ˆˆ†‡†‰„†Š…†‡‰‹Šˆˆ‚ˆ˜£¦¦¥¯¸¾¾½¹·µ´³ª¥ •ŽŒŠ�£ÞÝÔÈÇËÐÊÊËÉÎÒÕÙÛÚÚÝáååæèêíîíìïïìðïðíêóƒòïñó—ôóïÛÒÓÏÕÑÒÐÎÏÑÐÒÓÖÕÓÓÔÕÔÑÕÖÙÕÕáæééæãåêåæéêëíðññòóóòòôòóòðòððîíïñòôóóòñíëçåáàÛ×ÔÔÑÒÏÓÐÎÏÌÏϲsfb^_ak†šžŸ›ž¥ÀÉ”ÊÊÉÊÌÍÊÉÊÌËËÉÈÇÈÊÈÊËɲÈÈÊÈÇÈÊÊÉÈÇÈÉÈÇÈÈÇÅÃÄÅÆÃÅÂÁÄÄÆÄÈÄÄÅ¿¿Á¿¼¼¾Â¾½À¾ÁÀ½¼‰½¿½½¼¾¿Á¿½†¾¼¾½À¾À¿À¸ÁÃÀÄÄÃÀÂÂÅÄÂÁÁÃÁÀÂÅÃÅÅÁÁÂÃÅÄÉÐÔÜãèéìëíêßÛÛÔÏÍÊËËÏÔÚØÑÉÀ¿ÃÁ�ʽ²§¨­¯ª«­¬¯³´·»»º»¾ÀÀÃÄÇÇÉÍÎÊÊÉÎÑÍÊÉÇÆÅÅÇÕÓÕÓÑÓÒÕÒÒÕй°¯¬²¯°®¬¬­­¯°³³°¯°±°Ò±²´²²»ÀÄÅÁ¿ÀÃÀÂÄÃÅÉÐÒÌÏÎÑÒÑÒÑÏÎÍÑÍÌÇÇËÎÒÒÎÎÓÍËÇÃÀ¼»¶³±±®®­¯¬««¨«ªŽWKHECBLh{}}yyœ§¦„§¨¨©§Š©¨¨¦¦¤¥§¦¦§‡¦¥¥§¦¥¤¦©¥¤¥¦¦¥¦¦¥¡¡£¤£¢¢¡Ÿ£¢£¢¦¡¡¢Ÿž žš›¢žžŸŸœ›“žžœ›žŸŸœžœžŸž¸Ÿ¡ ¢ ŸžŸŸ¤¢¡Ÿ ¡ŸŸ £¢¡£ŸŸ¡¢¤£§®´¹¾ÂÃÄÂĺ¶¶±­«ªª©¬²¶´¯© Ÿ£¢�ʲªž‘˜˜•–™–—žž£¢¡¢§«®¬¯³··¹·½¹¼½¼»½º¸¸´³¯­ÁÍÏÄÀËËÊÄÄÈ»¢•“™••’Ž””™™“‘”“–›”–š–• ©­«ª§ª°©­®¯´¶¶º¼À¿¿ÂÃÄþÁ¾Á¼¼µ³·½½À»»Ã»³²­¨¡¤œ–’‘“Ž‘‹‹wA641/04FWXUMMUzˆŠ‹Œ‹Ž‰‰ŠŒŠŠ‰‹‰‰ˆŒŒ‹Š‹‰‹Š‰ŒŒˆ‡Œ‰ˆŽˆ‰ŠŠˆŠ†ƒ†ƒ}„‡†…ƒ‚…†ˆ…ƒƒƒ†…ƒ…Ê„…ƒ‚ƒ„…ƒ……‡†ƒ…†‡‰‡‰‡‰ˆŠ†ˆˆŽŒˆˆ‚…„†‰‹ˆ‡‹†…‰ˆŒŠ•œ¢­°°±°³±¥Ÿ –•’’”“—› ž˜’‰…‹ˆ�õ®ìçìîñðôõöõõôòñðìíìééèæäãßÜÜÙÙ×ÓÒÕÐÐÏÍÐÓçôôñôòóô‘óñåØÕÕÓÒÔÓÒÓÕÖ×ÕØ×ºÙØÕÙÚÜÚÚÙÙÛÙÛÚÙØÖØØÝ×ÒÓÎÎÖÓÙâéëîóóöõöõöòïçéìðôïåÞÜÓÒÒÑÐÑÓÔÑ©ÏÎÎÍÍËÊÍ»†‚€„Žš ¤›¦¼ÌÉÉÍËÊÍËÌËÈÉÈÌÌÉÈÊŽÉÉÈÆÈÇÉÉÊÈÈÉÇÇÈŠÆÆÃÃÆÄÂÃÅÂÀœÆÁÄÄÅÃÂÃÂÀ¿Â¿¾¾½ÀÁÀº¾¿¾¼¾Ä¿À¿‰Á¿º¾ÀÂÁÁ¿Á½ÃÃÄÂÿ¾ÄÃÅÂÃÅÅÆÆÄÅÆÃÄÃÅÆÊÏÐÙáèêìïêååàÞÕÐÌÊÉÈÊÔÏËÌÉÉËËÏÌÅÅÃÁÁÂÁ�‡Ö×ÔÉÅÈËθÏÒÑÎÍÎÍÌÇÇÅÄÅÂÁ¾½¼¸·¶µ²¯®±®«¬«¬°ÂÑÓÑÔÔÒÕÕÑÒÓ´±²­®±°°¯°±²Œ³²³³²´³µµ´³³´“µ´³±³³·³®®«¬±±¶»ÃÆËÓ™ÑÐÌÇÀÄÈÎÐË¿¹¶¯¯®­¬­®¯¬¬­«ª›©§§©–rjged`klw|~uw~™©¦¥¨§§©§¦„¨¨§¦§¦„¥¤¥¥¦ƒ¥¦¦¤£¥¥¤¥££Ÿ ¤¤¡ ¡ ž›¡ ¡ ¡ ¡¡ ŸŸžžœžŸŸšžœ›Ÿ¢Ÿž•Ÿžšž¢ŸžŸŸžŸ  Ÿ¢Ÿ ‚ž ¡„¢¢££¢¦¤¤¨«­µ»ÁÂÄÆÂ¿¾º·°¬¨§¥¦¨¯«¨ª§¦¨¨¬©¤££¡¢¤¡�–ÐÑʾµÀÃÇÈÌÄÂÄÀÁþ¶µµ³¯®£ª¤ š™”“–“’’‘«ÅÇÄÈÌÉËÊÃÄÀ§œ•–”’”÷“‘”š™š™™–™™–˜™œš›™œ™˜——––”™—œ—“•Œ••Ÿ¦³´µ¿ÆÊÆÆÅ¼´©¨´¾¿°¦ ™“ŽŒ‘ŽŽ’ŒŒ}VPMMNHJAKTTFGPuŒŒ‹ŽŒ‘‰ˆ‰ŠŽŒŽŠŽŒЏŒŠŒ‰Šˆ‹‹‰……‹‰‡Šˆ„…‚†‰‰‡ˆ‡Š†‡„…†„…‚„‡……‚~€ˆ‡‡†ƒ‡„€€„І†„‡†„…‡¹‰„„‡‡ˆ„‰ˆŠ‹‰‹‡‡ˆˆ‰Ž‘”“š©®®³µ­ª§¢ž–“ŽŠŒ•Ž’‘”‘Š‹Œ‹‰Š�™õõôööõôóïçÝÝ×ÕÕÐÔÏÏÑÒÓÒÒÓÒÔÑÓÔÓÑÓÕÒÔÕÓÖÕÝóôõôõôõôôòçÞÝÛÙÚÛØÙ‘ÔÕØÚÙØØÕØÚÙÚØ×ÖÙØÛ‚ÙØÙŠÛÜâæêððóôóòÀðîêèäÞÙÕÏÑÔÚÔÕ×ÓÓÑÒÐÐÎÐÑÎÏÏÎÌËÌÍÍÊÏÓÀ‘—˜¥¡°·¯§Ÿ˜Ÿ«¼ËÉÇÉÊÊÉÉÌÊÉÉÊÇÉÈÉÈÈÇÈÈÉÈÆÆÈÉÅÇÆÆÇÈÇÅÆÈÆÂÆÁÀÃÁÃÅÄÃÄÂÄÃÀÃÀÁÃÀ¿ÀÂÀÀ¿Á¿½¿À¾ÂÁ¿ÀÂÀ¾ÀÄÁÀ¿ÁÄ׿¿ÀÁÂÃÁ¿ÁÀÂÂÃÂÃÁÀÁÃÃÂÅÅ­ÄÃÇÍÒÙàçëêëæÝØÖÓÐÏÑÐÌÊÇÉÐÌÍÍÑÌËÆÇÃÅÂÁÁÃýºÁÀ½¼½�¥ÙÛ××ÙÖ×ÔÐÆ¹·³±±®°¬«¬®±¯¬®­¯°²®±±°®¯±¯°¤±±¸ÏÓÕÔÖÕÖ×ÓÖÜÖż»¶¶·¸·¶¶µµ²±µ¶´³´³´µ†´³²´µ´µ¡´µ¶¶¹¸½ÂÅÉÌÎÏÌÍÍÏÐËÊÅþ¹´°¬¯³·²²³®¬«­ª«¬ª©¨©ªª¦«¯›nu|}‡„‹Ž‡€xrxƒ™©§¤¦§¨¦¦¨§¨§¨§¦ƒ§¥¦¥ˆ¤£¥¥¡¤££¤»¡¡¤¥ £ Ÿ  ¢£¢ ¡Ÿ Ÿž Ÿ  žž ŸžŸžœžž¡¡ŸŸ žœŸ¢ ŸžŸ¢  ¡ŸŸ  Ÿ¡ ªŸŸ ¡Ÿ¡Ÿžž ŸŸ¢¢ Ÿ ¢£¦ª±µºÁÆÄÿ·²±°¬¬®®¨§¥§¬©­©§¤¥¥¤¡£¡¢¢ž¡ ž�¤ÕÖÓÔÑÏÎÏǸ£Ÿ›—”‘—Ž‘‘Ž‹’”‘“”–’”“Œ’•”½ÆÊÆÍÎÌÍÈ£Àµ¨¤š  Ÿ›š˜—›œ™˜›˜–œœ›˜™š—”˜˜™——œ‡¢¡«¯µ¼¿ÿ»½¿»³­©§¡›“‹“˜š’“—’Œ‹ŽóŒŠŽ’ŽŠ’˜€OZ__ife_VSLBGSuŽ‹‰‹ŽŠ‹ŽŽ‰ŽŽŒŠ‹‹‰Œ‰ˆŠŒ‡ˆ‡‰Šˆˆ‡†Œ‹…Œ‰Š†…†Š‰ˆ‡„……ƒ††‡ˆ…†ˆ‡……ƒ…ƒ€ƒ„‚„‹‡‡…‚‚‡†……†‰…‡ˆ…„†Â‰Š‰‡…†ˆ‡†Šˆ…ƒ††…†‰††ˆ‰Š‹›Ÿ£¯´²®©Ÿš™˜–““‘‹ˆ‡–”Ž‹‹‹ˆ‰ˆˆ‹……‹Š‡‡ˆ�ŠöôôöòôõôïÞÑûÏÓÐÓÏÑÓÓÒÑÔÓÒÔÑÑÓÕÔÓÑÒÎÑÔÖÔÕ×ÙéïñóôôõõóôõôöõööóóòðïîïïëèèäâÜØ×ÕØÙ××ÖÕØÚàäèìîïïðòóôôòñïððêæáÜÙÑÔÑÑÎÑÐÓÒÑÑÐÒÐÑÏÑÎÑÍÐÍÍÏÌÎÍÍÊÉÊ—hjogdbjdicq‡˜›£»ÆÈÈÆȈÊÊÉÆÈÈÇÆÅÄÇ“ÆÆÄÃÂÅÀ¿ÁÁÃÅÄÆÅÄÅÀ¿Á–ÂÀÂÃÃÁÃÀÁÂÀÀÂÀ¿¿ÁÁÀÁÀÁÂÃÁÃ’ÄÁÀÁÃÆÃÄÂÄÂÁÁ¿ÀÄÁºÃÄÀÄÅÁÀÆÉÏÐÖÛßãæååäÝØÒÏËÊËÈÉÌÌ׿âÕÉÄÃÇÄÁÀÂÁÃÂÂÀÁÀ¿¿ÁÁ¼¹¸¼º¸�‚ÙÝÚÖл¯®­«®­¯­­¯®¯­¯±¯¢±±°­¯­®°±¯±³´ÃÊÑÒÑÐÑÔÎÒרÔÒÔÒÐÑÏÏÍÌ‹ÆÄÅÀ¿¸¶¶´´µ´Í²¶ºº¾ÂÈÉÌÌÎÐÒÓÐÏÌËÌÊÄÁ¼·µ°±®¯«¬­¯®­­¬­­®¬¬«¬ª­­«¬¨«ª©¨¦§©¨oNQSHHFKIOEQdntwy™¦„¤¥¦¥§ƒ¦¥¢£…¡¤¥¤¥¤§£¡¡ ¢žŸ ¡¡¢££ ¢ŸžŸ  ¡ž¡¡ŸŸ ŸŸ Ÿž  ŸžŸ Ÿƒ  ¢¡Ö¢¡ Ÿ ¡¡¢ŸŸ ¢¥¢£¡£¢ Ÿ¡ ¡¤ŸŸ  Ÿ Ÿ ¢ŸŸ£¦¬¬±·¹¾Á¾À½¸³°­ª¨§¤¦©¨³¿¼°¦££¦£ Ÿ¡ ¢¢¡Ÿ žŸžŸ ››œ›š�þ×ÙÓÔÒËÊÍæ•”•’‘Ž““”“”•”‘•™–“‘“—˜š­¹¹½ÄÅÄÈ¿ÂÍÌÊÇÇÆÁÅÂÄ¿¾½³¯±¬¨¡žž—› ™–˜˜—— §«µ¸½À¾ÃÁÅÄý¼¹º°¬¤™““Ž’’“’‘Ž‹ŽŠ…‘‹ŽŽö‰‘W>>=.3/62;,/:EJJNQwŽŒ‹ŽŒŽŽŽ‹†ŠŒ‰‰ŒŒ‰ˆ†‰‡ˆ…‡†ˆ‚‚‚‡‰ˆŠŒ‡‹Š……„…††Š‡‚ƒ……ˆ†…†ˆŠˆ„„‡††‡†‡‡‰‡Œ‹‹‡ƒ„†ˆˆ††ˆ‹‹Š‹ˆ‹Œ……Š®‡‡‰ˆ†‡‡ˆˆ„„‹•”𢣩ª¦©§™”ŽŽŠ‘”ž®§–‰†ŠŽ‰…„‡Ž‰†ˆŠ†‰††‰†……ˆ„ƒ�ªõóôôóóôòîÞÕÓÑÓÎÑÑÐÏÑÔÓÒÑÓÒÑÒÐÕÓÓÔÒÔÒÑÒÕÔÕÓÖ‰ÔÖÖÛÜÛÝÝãáˆåèçëïîðòôŠõóñòññððòñð¥îñòôôóòñïíëêæáÞÖÓÕÔÐÑÒÑÒÑÒÐÑÑÎÐÑÐÐÒÑÑЭÌÌÊÍÎÍÌËÎÌÉÌËÈÉÉÈÅqULLUuHCHAH]€—œ¡©ÀÆÇÄÇÆÈÆÇƃÇÃÀÄ“ÆÄÅÃÄÄÅÂÁÂÄÄÆÀÄÄÃÅÃÄ‚ÂÄÖ¿ÂÄ¿ÀÀ¾ÄÂÃÅÇÃÃÈÄÄÅÁÃÂÂÓÅÅÆÅÃÂÂÅÄÂÂÃÅÃÃÅÄÃĬÄÁÁÃÃÅÈÈÌÏ×ÛâëêêãÞÙÕÙÕËÄÒ×ÖáäàÛ×ÉÆÇÆÄÄÀÃÀ¾¾À¿‘¾¿ÀÀ¿ÀÁ¾¿ÀÀ¾½»º»¹»¹�óÚÜÚÙÙÔÒÕÏ»²°¯°«®­­¬®±°¯®°°¯°®°¯°°®°¯®¯²°±°³³´³³²·¸¹º¸¿½½¿ÄÂÃÇÌÎÏÐÓÐÎÓ×Õ×ÒÎÏÏÐÐÍÊËÈËÏÓÓÏÎÌËÉÊÇļ»¶±³±­®®¬®­®¬®­ª«®¬«­½«ª¨©¨ª¬«©¨¬ª¨©¨¦¥¦¦¤U9118X0*0*0@apuz~†œ¦¦£¤£¦¤¦¤¦¦¥¡ž¡£¢£¢¡¡¢£„¡ ¡¤¡Œ¢ž¢£¢¢¡££¢¡¢¡“Ÿ £žž£¢¡£¥£¡¥££¢Ÿ¡Ñ¢£¢££¤£¡  ££  ¢¤¡¡¤£¢¢  ¡£Ÿž¡¡£¦¥©«´¶»Å»¸´±´²©£¯³²¼½¹´±¦¤¤£¤¤ ¡Ÿžž žŸžŸŸ  ŸžŸŸ žœœ�þÔÕËÍÏÈÇǾ¥™–•˜’’”’Ž‘–•““Œ’”•–‘–“’’“–š–›—•’—œ›œª©¤¦§°­·º½ÀÃľ¿ÈÉÊÇ¿ÂÂÃý¹¹¶¼ÁÃÅ¿»º¼µ´®¦¥Ÿ—˜””“‘‘‘’”““‘‘“މŒ¢‰‹ŒŽŽ‹Š‹=# !$I"#<LORU[|Ž‹ƒŽ‰Œ•‹‹…†‰Šˆ‡ˆ‡ˆ‡††…‡…ˆ‡ˆ…†…‡‹‰‰‹‰…‡…‡…†‡„„…„‰ŠˆŠˆ‹Œ‰¿Œ‹‹ŒŒ‹ˆŠˆ‡‡‹Œˆ†ŒŠˆŠ‹Šˆˆ††‡†‚ƒ‡‹ŠŒ’•žž¥³­³¨¡™“œ—Šƒ”™š£¤£ ›‹ˆ‰ŠŒ†‡„…‡…†…„‡…ˆ‹ŠˆŠ†„ƒ„„…†„†‚�‹õóððôòóðïßÙÒªÔÑÒÒÐÏÑÔÓÒÔÓÒÔÕÖÕÒÏÕ××ÓÒ××ÕÔÕÖÖ×ÖÖØÙÖ×Ò×ÖÖÓÒ×ÔÓØØâçìïòòóóõõô íèêêíòòïãßÛÚØÕÕÔÒÐÓÑÒÑÐÒÓÒÓÒÐÎÐÐΕÍËÎÎÌÉÌÍÌÍÌËËÊËÈÊÌÉÇÈDzÁsPR@“ß[EIDFS€’™£«¾ÆÆÇÅÂÃÄÅÃÂÅÆÄÃÄÂÄÂÁÃÁÂÅÃÄÅÄÅÃÃĘÃÇÂÆÅÁÅÄÃÄÂÄÅÄÂÃÁÄÅÃÄÄÅÄÅ‘ÇÅÂÆÃÃÇÅÄÂÄÆÆÅÆÅÅùÂÄÆÄÂÄÄÂÃÄÄÅÄÁÁÉÊÍÓÙßâãçãàÙÜ×ÓÒÑÕÜÙÞÞãàÛåçãÝÔÎÅÀÁÂÁÀ½¾¾¿¾½“ÁÁ¿¾¼¹¼¾¾»¾Á¿¿½¾¼¼¹º»�°ÞÙÔÕ×ÓÔÒÓ½¶¯¯°±­­¯¬¬¯±²°±°±²³²±°­±²³²®³³±±²²³´²±´œ³®³²²±²¯®³³¶º·ÁÅÉÏÒÖÚØÕÔÔÒÓÌÅœÊÏÓ˾º·¶´³±°®¬°­¯®¬¯®®¯®¬¬­­ª’¨ªª©¨©©ª«©¨©¨©¦¨©§¦²¥¤¥ŸU58*sµ>+2-/5apx|ˆ›¤¥¤  ¢¢¤¡¢¤¥¢ ¢¡¢ žŸ  £¢£¢¡¢«£¢¡ £ £¢Ÿ£¡ ¢¢£¢¢¡¢¢¤£ ¡¡¢¢¥¢¢££ ¢£¢¤££¡£¤¥¤Œ¡¢¡ ¤¤¢¡£¢ ¡£¢¡¡§¨ª±µ¸»½¾½º¶·³±¯®°¶³¸·¼¹¶¾¾½·°ª£Ÿ„žœž•¡ŸŸ›šœžœŸŸžŸžžœ�™ÓϼÃÉÄÂÀ¿¦Ÿ””–•“‘’’‘‘˜•Ñ”•”‘•š™—”™˜˜•™˜–“’•š™––‘—–•“‘“‘–•–Ÿž¨°°¸ÆÏËÏËÈËÆÁ¾²´³ÁÄȺ¨£žžœ—””Ž—’“””’Ž‘ÀŽŽ‘‘‹‹‘‘މŒŒ‰ŠŠ‰ˆ‹‰Œ†< &]¢/=LRWW]{ŒŒ‡ˆŠ‰‹ˆˆŠŠ‹‡……ˆˆ„†Äˆ‡‰ˆ‡†…†‰ˆˆ‡‰ˆ‹‰…Œ‹†‡†‰ˆ…†ˆ‰‰††‡ˆ‰ŠŽˆˆ‹Œ‡‰‹‹‰ŒŠŽ‘‘Ž‹ˆ‹‰‰‡ŒŒ‰†ŒŒ‰‡‰Šª‡Œ‘”™¢§¦«¦¢žžœ™””—— ¥ ™¨©¨¡—‘Šƒ„„…‚€‚‚†…•„ƒ‡††…‚†‡†ƒˆ…ƒƒ„††‡†‡…�¡öõóòõóòòðæÜÐÔ×ÙÓÑÖÐÏÓÔÖÓÔÕÙÕÖÕÕÙÖ؃×ÔÖØþÙ×ÖÙØ××Ù×ÕÖÕÔØÙ×ÜáèèìðòóõõôóóññììæßÝÚ×ÔÑØÛÚØÓÕÖÓÓÒÓÕÕÔÓÓÔÑÐÓÒÔÒÑÏÎÍÌÊÏÎÌÉÌËÉÊÊÌÏÍÎÏËÊÌÈÉÉÇÄÆÅÊÊÈÄoIFAcÈF8BA@R}“š «¼ÁÆÃÅÂÀÂÄÁçÃÄÃÂÁÂÂÁÀÂÃÄÇÄÅÆÃÅÆÄÆÆÁÃÆÄÆÇÅÃÇÅÅÂÆÄÆÅÅÄŒÂÄÅÅÄÆÃÅÆÅÄÆÇ‚ÅÅÆœÇÈÆÅÃÆÆÅÄÃÅÅÂÄÃÆÊÉÍÓÙàåæãâßÔÏŸËÏÔÛàÙÞÖרÕÖÎÉÈÇÉÂÀ½¿À¾¾¿ÀÀ½¿ÀÀ¿”¾À¿Á¿½¼¾½¿¾ÀÀ¿¾º¼¼¾¼¼»�—ÞÜØÙØØ×ÔÒź®±´µ°­³­¬°±³±Ã´±³³±´±³´µ´¯²´³³´³³¶³²±´³±²±°´¶·¼ÀÆÅÏÎÍÐÒÖÔÎÐÍÍÈÉÁ»¹·´¯®²µ¶µ¯°²¯®­­°ï®®¯®¬¯®¯­¬¬«ª©¨«ªª§ª©¦¨©©­«ª«©¨©¦¨§¥¢¥¥§¦¦ Q10+I¤/%,++6\qy{~ˆ™Ÿ¢¡¡ Ÿ ¢Ÿ ¢¤¢ŸŸ ŸŸž ¡£¤£¢¤¡¡£¢£¤Ÿ £¢££ ¢¥¢¢¡¤¢££¢£”  ¢£¡¤¢¢£¢¡£¦¥¦¤£¢¤¤¥ƒ££¡¤­¢¡¤¤¡£¢¥¨¨¬°´º½¿¾¾º°ª««©­°¶º²·±¯±®°©¦¦¥¤ŸŸž›žžŸžžžž ž ››œŸŸ›žœ�¢ÎÉ¿ÅÉÉÁ¼»±¥””›œ˜’”“‘’““——œ•—“’˜–—šç”–™˜—œ˜••–˜–™˜——”•šœš¡¨±±¸¼¾ÅýÂÂŽ¹³­©¡šš•“› ˜”™”‘‘•“‘‘”Œ’—“ŒŽŒŒŠŽ‡‹‘‘’Ž‹‹ŽŠ‹‰†‡ŒŠŽŒƒ7¼5ˆ!7JTST[x…‹ˆ‡††‡‰†‡‰ˆˆ†ƒ‚„…ƒ…†‰‰ˆ‰‹‡ˆ‰†‰‰‡‡Š‰ˆŒˆŠ‰‰†Œ‡“Šˆ…„ƒ‡ˆˆ‰Œ‡ˆ‰‹ˆ‹Œ‰¹Ž‰ˆ‹Œ‹ˆˆŠ‡Š‹“™ž¤§«¨¤¡—‘“Ž’™£˜œ“‘’’•‹Šˆ‰„†……„ƒ’…‚ƒ„„†…€‚ƒ„„†…„ƒ…„‰‡†…ƒ‚†‡†‡‡ƒ�‚öø÷·öõööóîììíñíæåäáàáÝÛÞÞÜÖ×ÖÖØÚÙØÙ×ÖÖØÖÖÔÖÕÕ××Öââäéèìðñóõõô‡òïìèçãÜؾÕÕÔÑÑÎÏÒÓÒÒÐÑÒÓÒÒÐÑÑÕÒÎÒÐÒÐÎÒÑÒÐÏÑÏÔÓÒÓÑÒÔ×ÖÖØØÛÝÜÜÝÓÊÇÆÇÅÄÇÆÆǪÃsMOAA͘H:FIT€”•›¢§º¿ÀÀÂÀ¿¾ÁÀÁÁÂÀÀÁÂÄÄÂÃÄÆÅŠÇÃÁÅÄÆÅÂÄÄÆšÈÉÆÅÈÅÅÆÄÅÅÄÃÅÄÄÇÇÅÅÆÇÃÈÈÄÅ×ÆÃÆÅÇÆÅÆÅÆÆÉÈÊÏÕÖÜÞââÛÞÝÚÔÊÑÑÓÕÎÕØ×ÕÖÙ×ÕÒÎÊÆÂÂÀ¿ÁÁÂÂÀÁÀ½Á¾¿½À¿¾¿ÀÀ¾¾¿¿¾½¾¾¿¾¾¿¾½¿¼¿¾¿½¼½¼½�„ÙÝßßܘÝÚÏÇÉÌÌÉÄÂÄ¿½¾¼¼½»ºµ´µ³´µ·¶³²³´²³±³±³³´±¼½¿ÄÄÉÎÑÔØÖÓÐÒÎÉÆÄÿ¹¶´µ±²²¯­«­®¯¬®­­®¯®®¬§±¯«¯¬¯­­¯­®¬«­¬°®¯°±²²³³²´¶¶¹··¸°¨¥¤¦¤¢¥¦¦¥§ S48*,¬ƒ8$,17^utx€„–œžŸž Ÿ  ¡ žŸ ´¡¢¤¢£¢¤ ž¢¡£¢¡¢£¤£¢¢£¦§¤¤¦¤¢¤¡¤£¢ ¢¡¡¤¥¤¢¤¥¡¦¦££¡¢£¡¥¤¨£¤¤§¦§¬²´¶¸¼¾·º¸¶¯¨¯±°°ª°³²±²³³±­©§¢žžŸˆ ž žžžœ‹žŸžœœŸžŒœ›žœŸžœž�ÏÆÆÌÊÊÑËÄÇÈ¿·¹¼¾¹±ª®¬¦ª££¨¦£™›–”˜š™šœ™––—’•—™““›—¦ª«²±¹ÁÃÅÄÇÆÀÀ½¸´®¨©Ÿ˜•”’‘Œ’‘øŽ’”Ž““‘“Œ’”•““—‘“”––—œ˜—˜—œž £Ÿ¡¡“Šˆ‡‹‰…ŠŒ‹Šˆ„:""–t2 8KNNWYtƒ…†ƒ„„……‡‰‡‡…„‚††…‡‡‰ˆ‡‡Šˆ…ˆ‡‹‰ˆˆ‹‡‹ŠŠŽ‹‰Œ‡‰’‡……‡†‡‹Š†‰‹ŽŒ‹ˆ‰Í‹ŒŠ‰ŠŠŽ•›Ÿ¤«¨ ¡ “Œ——”—‘—š™—šš˜‹‰„€‚ƒƒ…„‚„ˆ‡ƒƒ„ƒ……‚…†„…ƒ‚‚‡†„ƒ††…„‰†„…‚„‡†„…†…�Ó×ÚÜÝèèéíòòñööô÷ôö÷ö÷ööõôöõôðïëíêèäÞÕÓÔÙÚÛÞÞåèêîñô÷õ÷öôóðíëéäßÚÚÕÔÔÒÒÑÒÐÏÓÓÍÑÏÓËÑÔÓÖÔ±ØÚØÙØØÚßßÜâáäàáàãåäáâçêííéçêéæßàâàåÞÖÔÏÆÂÇÅÆÇÆÉÈÇÆ™¿iJL>sÐÐÁeNQZ–ž£¨¹À¿¾Á¿«½ÀÀÂÂÃÁÂÄÃÀÁÅÅÄÃÄÅÃÃÆÅÈÃÁÃÄÅÆÇÅÄÃÅÆÃÄÅÅÇÆÆÄƃÄÂÅÆÀÇÆÅÆÆÅÃÂÅÅÆÄÃÇÌÓÑ×ÛâàâàÞÜÙÒÒÌÈÆÅÂÃËÝáÜÞÖ×ÙÒÎÌÇÆÃÂÁÂÂÁ¿½ÁÃÀ¿¿À¿¿¼¿›¼½½¼ÀÁ¾¼¿¾¾½¾¿Á¾¿À¿¿ÁÀ½¿À½¼‚»¸¸¾�þ¶º½¼ÄÅÉÊÕ×ÒÏÑÒÓÐÔÕÛÛÕØÚÚ×ÔÕÑÏÎËÈÆÄ¾µ±±¶¹º½½ÃÅÊÍÒÑÔÓÒÏÑÑÐÌÊÈÁ»¶¶²°±¯­®°­­¯°¬¯­¯©¯±°³²²±²µ´·¶·¹»¼»À¿À¾ÂÀ¿ÁÀ¾¿ÃÅÈÈÅÅÈÆÃº¼¾½¿¹´°­¤‰¡¥£¤¥¤§¦¦¥žžN14']°²¢M26<]pv}€ƒ–ŸžŸžž›Ÿ ¥¡ž ¡¡žŸ£¤¢¢¡£  ¤¢£ŸŸ¡££¢¤¢¡¢¤¤¢££¢¥£¤£š¢¡£¥¥¤¤¥££¤¤¢¡Ÿ££¥¤£¥©°®²´»£ºº¸´¯®¬¦££¡¢¨¹½µ¸²³´®«©¤¤¢¡  žž›ž žŸž›ž››œ›žŸœœŸœ…ž  žŸŠœŸŸ œœ›šœŸ�¦œŸ¤Ÿ°¯²¶¿¼¾ÃÃÄÅÁÄÃÆÈÈÌÍÌÌÐÉÃÀ¸º·´¬§›–”™«¢¥¯¯³¾ÂÁÆÉÈÅÁ½½¶³­©¦œš““•”‘“•‘““‹’Ž’“•™”—ʘ¡ž¢§¤ª¬®¦§§«­®ª®°³´¶²´º¶¯¡¢¨¡ª¢œš•‡ƒ‡†‰‰‡Œ‰‰‹€4H¢œA #8FMOTYu„ƒ„‡…€…‡†ˆ‡‚‚‡ˆ„…ˆˆ‡ÎŠˆˆŒ‡Š……†‰‰†‹Š‡‰ŒŒˆ‹Šˆ‰‰Šˆ‡ˆˆ††‰Š‡†ŒŠŽ‰ˆ†ˆ‰Œ‰‡Œ•™”šž¨¤¦£¤ ›˜•’‹ˆ‡„ƒŽ¢¨Ÿ£˜˜™‘‰‹Šˆ‡„„‚„…‚ª……†‡€ƒ…ƒ…‚ƒˆƒ…€…‰‰ƒ†‡‡†ƒ‚‡†ˆƒƒ„„ƒƒ†Š�™ÌÊÏËÐÎÏÌÑÎÓÐÖØÕ×ÛÚÜãëìëïóò óôöôóôôïïñîìððóôòðèæååáÙÛÛØÕÔÑÒÓÏšÓÙààãáäãåèèäàßáãèèééëëíëîòî„ðòòñó„ïïòòð’íìëëéèçåÞÖÙÔÌÆÄÇÉÈÇ®ÈÆÆÇÅÆÆÄÁ½eEVwÈÑdz¤Xcb€—œ¤©¼ÁÅÂÁÄÀÁ¿¿ÃÂÄÅÄÂÅÅĂůÇ£ÆÅÇÉÇÅÅÃÄÄÅÆÅÅÇÅÅÆÄÇÆÈÈÄÇÅÆÇÅÄÃÇÈÄÄÅžÄÃÄÉÏÒÕÛàáâÜÝãÝÚÔÔÐÍÊÊÉËÈÅÅÆÂÄÃÆËÇÊÇÇÁÂÄÃÁÃÃÁ¾®½½ÀÀ¿½¿¿½¾¾½¼¼»»¼¾¿½¼»½¼¿½¾¾ÀÀ½¾¿¾À¾¼¾À¿½¼º¾¾»¼¿�þ©¨¬©­¬¬ª®®²­²´±µ¸¶¸ÂÈÌËÌÓÑÏÔÚÚÙÚÛÚØÑÏÏÈÉÌÎÒÕÓÓÉÅÂþ¶·¸´³±­®°¬¬«­³º»¿»¿ÀÀÂÆÃ¼¼¾ÀÃÄÆÅÆÈÊÈËÍÌÎÏרÓÑÒÔÒÔÔÏÏÐÑÐÎÌÈÇÇÆÆÅÄ»³´°ª¤¦¥§¦‡£§¦¦£¥¥¤¥£¢I,=^£¯©”ƒ:GB]ow|‚†›¡£  ¡ŸŸž¢¡¡¢¢Ÿ¢¨¡££¤¥¥¤¤¢¤¦¤¢¢¡¡£¡£¢£¤£¤£¢¥£¤¥¢¤££¥¢¢¡¦¦£¾¢£¡£§¬®³·»½»··½¹µ¯°«©¨§§¨¥¢£¤ ¢¡¡ ¤¨¤¦¤¥Ÿ £¢  ¢ŸŸœœœ›ž›žœœ“››œœœ›šœ›œœžžŸžœžŸ‹œžŸœ›ŸŸžŸ�…’Š’þ”•“˜œ•–œ˜˜¡±µµ¹ÄÄÀÄÊÌÎÊËÍÊ¿¼»¶µ¸¾ÂËÇ¿´°®¯¦—ž”•’Ž‘ŽŒ–¢¤ª¥ª¨©®²°§¥©«®®¶³°¶»·¼ÁÃÄÄÂÅÈÆÆÈÇËûÁÆÅÀÁ¿·´´²³µ²®Ÿ–˜–ŠŠ‰…‹ŠŒ‡‰ŒˆÖІˆ†}4*Mœ–|l#*%7DMQTYy…‡‡ˆ…††„ƒˆ†…††ƒ…‰‰ˆ‡ˆŠŒŒˆ‰‰ŒŽˆ‡‡††‰‡‹ˆ‰ŒŠˆˆ‰‹ˆˆ‰ˆ‹ŠŠ‰‡…„‰‡…‰ˆš‹‘–”™ž¤¦¥Ÿ¢©£ž—™“‘ŒŽŠ†Š‹†–„…‰‹Ž‰‰††‹‹…ˆ‰ˆ†€‚…„©}ƒƒ‚‚…†‚„‚‚…‚~€~ƒ„†ƒ~……ˆ„~†‡…†ƒƒ‡ˆ†‰‹�ÍÊÇÊÌÍÍËÏÏÍÎÌÅÊÇÉÇÇÎÉËÐÔåìîóóòôóò—íèæçåêñôóå×ÐÏÏÉËÑÑÒÒÎÍÌÎøÍÔÙÞäçåçëñòôññðììðñïðïòòôõóóòòóòòñïóóñïñðñðëâßáßÔÓÓØÓÈÅÇÈÆÈÉÅÆÅÆÅÃÃÁÄÅÁÁÀÂý`G¢Þ”ËÆ}¢R]c…—›£ª¼¿ÃÂÄÃÃÂÄÀÃÃÁÅÃÃÁÂÅÅÂÅÇÈÇÅƉÃÄÆÄÃÂÃÄÄÆÈÆÄÆÈÄÆÃÆÈÇÇÅÈÇÅÊÏÓØÝÞâåãàÞÚØÓÍ˪ÉÊÈÈÊÉÆÇÅÆÅÄÅÄÂÄÄÃÁÀÄÅÄÃÄÁÁÀÀ¿À¾¿À¿½¼¾½ÀÀ½¾†¿À¿¾¼»½¾¾½¼¼½¿ÀÀ¿¾½¿¿Á¿¿¾½¾¿¾¿À½»½½¹¼�»«¨¥§©«ª©¬¬«¬©£¨¦¥£§¦¥«¨ª°³ÁËÒÕÖרÓÑÒÏÊÁÂÃÂÇÎÑÓÁµ®­¬§ª¯­¯¯©«ª­©°´¹¿ÁÀÃÆËÎÑÍÌÌÇÈÍÏÑÒÐÖÓ×ÖÖØÖÙØÕÔÐÏÒÒÏÏÓÏÏÎÇÀ»±öµ²§£¥¦¥§©¤£¢¤¤£¢Ÿ££Ÿ  ¢¤œB-¶z«ª\~2AFdpw|‚†›Ÿ¡ £¡¡ ¢Ÿ¢¡Ÿ£ Ÿ ¡¤¢¢£¥¦¥¤¥¤¤£¢£¤¢¢¡ £¡¤£¤¥¤¥¤ £¦¢£¢¦¦¤¤£§¥¤§­±´·¸½¾½ºº¶µ°ª©ˆ¨¨¥¥§¦¥¥£’¢£¢ ¢£¢Ÿž¢£¡Ÿ¡Ÿ ŸŸž’œœ›žœžœžžžœšœ†ž›œ›žŸ“žŸ žžœžŸž žžž›ž�þ’ŽŒŽŽŽ’‘’ˆ‰‰Š……‡†‰‡•–¬»ÀÇÊÆÉÇÃÅ¿·ª«°¯ºÇÈÁ«›••ˆŠŒ‹ŽŽ”œ¢©­¬­²»Áž¿¿··¾ÂÂÄÄËÌÎÐÑÕÐËÍÌÊÄÃÇÈÀ½ÅÅÀ¾¶­ ¥¥˜–˜›”ˆ…‰‹Œ‹‹…‡‰¶…ˆ‰ƒ†‚‰‹~.gžj”–Gh"'':FQUVYy†‰‡Œ†„…ˆˆ‰†„††…‚ˆŒ‰ˆŒŽŒ‰‰‹È‡Š‹Šˆ‡†Œˆ‰Œ‹Œˆ‹‹‡‡Š‰ˆ‰Š‹‹‰ˆŠŒ’˜œ¡¤«®©¥¢  š“Ž‘’ŽŠ‰‹ŠŠŒŠ††ˆˆ…„‰Š‰†ˆ·‡‚†ˆ†…ƒ‚€…ƒ……‚ƒ„…ƒƒ†ƒ‚„…‚ƒ……~ƒƒ„„ƒ‚ƒ‚ˆ‚†ƒƒ…‡Š‰†……ˆ…‡ˆ�¨ÙÔ¹¼ÉÈÊÎÐÍÍÏÈÉÉÊÎÛàäèëéìðîòðöñíååâÝÖÓÈËÍÏÖÙ×ÓÐÒÔÓÏÐÕÓÑÒ˜ÑÔÐÎÐËÎËÍÎÍÉÇÎÏÕÖÛ×âçéëñò„ôõööõÚîìîíèâéïíîæàÜ×ÕÓØÔÈÄÄÅÄÅÆÅÆÇÉÄÃÄÅÀÁÂÂÀÂÁÂÁ¿ÃÀ_FPO$ÀÏ„”ZX^™œ ª¾ÃÃÁÃÂÁÀÀÂÂÃÅÂÅÅÄÆÆÄÅÄÅÆÇÇÈǹÆÉÅÆÃÃÅÇÇÆÆÇÆÈÇÉÅÃÇÈÅÆÇËÒÖ×ÝâåãâÞÝÜÔÐÏÊÌÉÉÊÊÉÈÉÇÈÇÇÅÇÇÈÆÃƘÄÅÃÁÃÁÂÀÀÃÁÀ¾½¾½¾¿À¿¾¿¾À†Ã¿ÄÿÀ¿ˆ¾½ÀÀ¿¾ÀÀ¿—ÁÀÁÀ¿½¾Á¿ÀÂÁ¿Á¿ÀÁ½½¼»¹º�þ¹´šœ§§¨¬­ª«¬§§¨«¯¸¾ÃÄÇÇÊÎÍÏÍÕÏËÂÀ¾¸³±¨©ª­««´µµ°­®°¯ª­²®¬®®¯­¯®­­©©§©ªª§¥¬¯³³¹·¿ÅÊËÓÖÓÔÓÔÓØÖÖÔÒÐÉÈÇýÃÉÈȽ¸³±®²¯§£¤¤££¤£¥¦¨¢ £¨¤  ¢ Ÿ¡ ¡ Ÿ¢žC-34£°_n:;Bcrz}‡£¡Ÿ¢  žŸ¡£¢£¢¡¤¤¢¥¢£¤¥¦§¥¨¤§¤¦££¢¥¥¤¥¥¤¦¥¦£¢¥§¤¥¨ª¯³µ¸¼¾¼¼¸¸·°­¬¨©¨§¦„§¦££¥ƒ £¥¤¡¡  ¡Ÿ ¡ŸŸœœžŒ¡žœžŸž¡ž¢ …žžžœŸ†œž žžŸ ”ŸžžžŸ¡ŸŸ¢¡žŸ ž››�ߤƒ‚Œˆ‘“‹‹Ž’–¥®®µ°²»·¼»Ä¸¶¨©ª£˜“‰‹‹“’•š—“’”˜“ޓޒ—••‘ŒŠŠ”›š£¡ª³µµÈÉÇÆÆÅËÍÑÍÇÅ¿·ƒ°¥®·þ­¨¢š””—‘Šˆ‡†‡…ˆˆŒ‹††„ˆ†‡ˆˆ„†ƒ‡„‡‰€+‰›KR(%(=KWXT[}ˆˆ†‹ˆƒ‡ˆˆ‡‰‡‰ˆ†ˆ‰Œ‡‰ŒŽŒ‹ŒŠŽ‹Š‰ˆ‹‹ŠŒŒ‹ŒŠ‰Š‰‹ŒŽ—›ž¡£¨§§£ Ÿ™–”‘ ŽŒŒŽŠŽˆ‹ŒŽ‹†„‡‡‰†‡††…„„†ƒ´„‰†„„„…‡…‰…‡†ƒƒ„……‡ƒ…††„„††ƒ€…ƒ††…‚„…ƒ‡…ƒ‡†ˆŠ‡„…„ˆ…�¸ÚÙÜÚ×ÒÉÅÇÍ××äêìïôööóðôòíéâßÛÚÍÆËÅÈÇÅÊÉËÐÐÌÌÎÎÏÒÑÒÓÒÑÓÕÏÐ΂ÏÐÍÅÎÍÉÏÒÐÖ×ÛÚáãäáåëîíììééåææâÜßçÔÛÛÚßÚÛÝáÜØÐÔÜÔÏÊÉÇÅÄÇÇÆÅÄÄÇÆÅÄÃÀÃÂÀ¿ÂŠþ½^EIB‹ÙÕ‚U_]]~˜›ž«ÀÄÅÂÂÄÁÂÁÈÄÅ‘ÈÇÆÇÆÅÆÇÇÈÇÉÊÉÆÇÄÇ£ÈÊÉÈÊÈÈÉÆÉÊÌÍÎÒÖßãàáäßÚÖÔÑÎÌÉÇÌËËÉÉÊ©ÈÅÇÈÆÇÅÄÃÅÂÆÅÂÄÄÅÄÄÁÀÂÁÀ¾ÀÀ¾¾½À½¾¿À¿¿Á¿ÀÁ¤¿ÁÁÃÀÂÁÀÁÀÀ¿¿½Á¿À¿À¿¾ÀÁĽ¾½ÀÁÂÁÄÁÁÃÀ…¾¼¼¹¼»�þ¹¸·¶´±©¤¥ª³³ÂÅÎÐÖÓÒÎÉÎÌÆÆ½¼¶µª¤§¢¥££¨§©¬«¨¨ªª«­«­®­ª®°ª««ª««¬©«ªª©¥ª­¬±´¶·¾¿À¼ÀÆËËÇÈÄÄÁ¿¾½¶¹À±¹¶µ¸µµ·º¶±«°µ®ª§¥¤£¢¤¥¤£¢¢¥¤£¢ Ÿ‡ ŸŸ¡Ÿ¡¢í ™A-1-sµ³a6@>=^px{|ˆž£¢Ÿ  žŸ ¥¢¡£¤¥¤£¤££¤¤£¥¥§§¦¤¤¡¤¤¦¦§¦¥¦¥¥¦£¦¦©ª«­±¸¼ºº¼¸¶±¯¬«©¦¤¨¦¨¥¥§¨§§¥£¥¤£¦¢¡¢£¡££ ¡¢Ÿ‰žœžœ››´žŸŸœžžžž ŸŸžžœŸœžžž ¢Ÿ›œ›žŸ  ¡Ÿ  žŸžžœšœ›�þ£¤£ž™Š‰Ž›°¼ÆÈÉÆÇ¼´¸¹°­§¡™—މ‹‰‹‡…ˆ‡ŠŒ‘ŽŽ‘“”‘’’“ŒŽŽ‘’’Œ“•œ¢Ÿª¬®¨«¶¸¶·¶²°¬­ª§ž£«–œœš¡œ› ¡ž˜’˜œ‘Œ‰……‰Š‰Šˆ†‰Œ‰‡†‚ˆ†…ˆ‡ˆƒ„†ˆÙ„}+eŸI ,)%:MUTN\€Š‡…ŠŠ‚†‡Œ†ˆŒŽŠ‰ˆ†‹‹ˆˆŒŽŒŠ‹‰Š‹Œ‹ŠŽŒŒ“’’•—¤¦¥£¥ Ÿ—“‘‘’Žˆ‹Œ Œ‹ŽŒŽ‰ˆ‰Œ‡‹Š‹ˆ‹‹‰……†ˆ…†‚…„†‚„ª……†„ƒ„…‰…‡„‡„…„ƒƒ„„‚ƒ‚ˆ…„…‚€„‰†ƒ}ƒ†…††„†‡‡…ƒ……‚…ƒ…�µØÛáäêéëéêíòõ÷øõôïéÞØÏËÊÆÊÊÈÈÊËÈÌÊÊÈÍËÌÎÏÑÏËÊÍÏÍÍÌÎÍÍÑÏ·ÌÌÎÒÎÔÕÖ×ÝÞÞæåæèìèèíîèæèèæÝÛÙÖÒÎÍÉÈÊäÙæÕÒ××ÖØÓÏÉÇÉÇÆÇÉÇÈŠÉÈÈÅÄÅÇÃÄàÃÁÁÃÆÆÁ½´^GOnݵ׊S[_b}™™›ªÁÁÄÅÄƆÂÅÃÄÅÅÆ¯ÃÆÇÈÇÉËËÊÈÈÉÊÈÈÊÊÉÇÊÍÌÒØÜÚßåßÛÝÙÏÓÑÎÊÇÈÉÊÌÊÉÈÊÊÇ¡ÈÇÉÆÈÇÅÆÈÆÇÃÅÂÄÃÂÄÁÃÃÆÁ¿¿¾¼»¾À½½¾Á·ÃÁÁ¿ÁÀ¾¾À¸»»Á½¾¾À¿¿ÂÀÂÁ¿ÀÀÁÀÁ¿¿ÂÀÄÄÀÂÁÁÀÁÂÁÂÀÁÀÁ¿¹»ÁÀÀ¼½�Œ·»¾ÁÇÈÉÅÅÊÊÍÓ¦ÔÌû´¬§¦¤§¦¥¤¦¦¤§¥§¥¨©©ªª«ª©§©ª©ª¨ª¨©¬ª¨©¬®ª®²³´¹¸¹Á¿¢ÆÂÅÈÈÿÁÃÁ¸¶´±¬©¨¥¥§»´Á°­²²±±­ª¥£¦£õ¥¤¤¦¤¥¤¥¢¢¤¤¡¢¡Ÿ ŸŸ¡¡ Ÿ ¡¢¢Ÿœ“C08R·˜´j5@A@\oxyzˆž ¡¢¢££¡ ¡ ¢£¢¢£¤£¤¢¢£¤¤¦¨¨¦¥¤¤¦¦¥§§¦¥¦©¨®³¶´¸½º¶¶³ª®­ª¥¥¦¥¦§¦¤¤¦¦¥¤¤¥¦¤Œ¡£¦££¡¢¢¡ ¡¡ ‚¢ž›š››œž žžžžœœž——™žšœœœžƒžžœŸž¡ žŸŸŸ Ÿž…š ŸŸœž�þ ¦¬±¹¸º¶²·º¾ÆÌÊ̸¯¦š„…ŠŒ‡„…‡‰Š‰Š‰Œ‹‹Œ‹‘’ŒŽ‘ŠŽŽŽ‹ŽŠŒ‘•‘—š›œ¥¦¤®¦©ª¸¯µ¹¸±©®­« œ™’‘Œ‰…ˆ¡—©•™™—™“‰‹‡„‡‹†ˆ‰‰Š‡Š‡Š‹‹ˆ‡†„ƒ„†¯‰†‚„ˆ‡‡ƒw+%B¥{U ))%4JTRM^‰‰‡ˆ‹†ˆ†Š„†ŒŒˆˆ‰ˆˆ‹¤Š‹ŽŒŠŒ‹Œ–  ¥ª ›š•“މЋЋŽƒˆŽ‰µŒŒŠŠŠŒ‡‹‰‰ˆŠˆˆ‹‹†‡‡‰ƒ‚†„ƒƒ„„…„‡‡†…‚„„‚ƒ{}€‡‚‚€ƒ„…„ƒ…‡…ƒ†…–ƒˆ‡…‚„†…ƒ‚……ƒ‚„‚ƒ‰‡‡‚‡�‚òñó¾ïïéææàßÐÉÉÈÈÃÂÃÀÅÃÄÈÊÊÍÊÉÌÌÏÎÊÌÍÎÎÌÎÍÌÌÍÉÒÒÓÒÎÓÛßààæêíïïìééìêçæ©ÝÞßÙÒÓÎÐËÌÊÈÉÈÈÇÈÇÇÉááÊÓÔÑÐÇÆÈÇÆÅÇÆÃÅÆÃÃÅÄ´ÀÂÂÄÃÅÅÆ¿À¿ÂÄÄÃÁÂÁ¿¿À¶XEI‡»?ÅŠRZ[Z~”–ž¡©¿ÃÃÅÃÄÅÅÂÄÆÆÅ‹ÇÆÆÅÄÇÊÊÈÈËÉ›ËÈËÌÐÐÖØÝÝÞÝÛÚ×ÓÓÐÎÌÌÊÉÉËÈÆÈÇÈÈÇÆÈÆÆÄÆÆÇÇÈÆÆÊÆÅÁÀÃÁÁÂÃÁÀ”Ä¿¿Â¿¼ÀÀ¾¼¿ÀÀÁÀÀ¾Â½¼¾½À…½¿¿À¿Á…ÂÃÁ¿ÁÀŽÂÁÄÄÁÁÀ¿Â¾¿ÁÀÄÁ‡À¿½¼¿¾½¾¼�§ÒÕÑÐÓÔÔÒÎÌÄÁ¾½°¨§¦¦£¡¢Ÿ¢ ¢¥¨¨ª§¦©ª««¨©ª««ª©ª¬¨®­®®«±·¹½¾ÃÅÇÈÊÉÆÄÆÅÀ¿¿Á¹»º¶°°ª¬©©¦¦§¤–¥¤¤¥º¾¨¯°­­¥¤¤¥¤£¤¦¡¢¤¢¸£Ÿ ¢£¢£¤¥Ÿ ž¢¤£¢Ÿ  ž —>-1f,¢k5>@@]su€ˆ¢¢£¡£¤¢  ¢¥¥££¥„¤¢£¨§º¨§¦¦¨¦¨ª¬­±³··¸¸¶¶³¯°¬«©ª§¦§¨¦¤¦¥¤£¥¤¥¤¥¤¥££¤¥¥¦¤¤¡ ¡¤¡ ŸŸ ’¢ ŸŸž¡žœžŸ›žžž„ ››†›žžŸžžŸ˜žžŸŸžŸŸ ¡Ÿ Ÿž žŸŸ¢ žžŸ„ žž�™ÍÈÊÌÊÉÈɾ¶²ª®«ª™ŒŒˆ…„€‡†þ‡ŽŒ‹ŽŒŒŠ’ŽŽ’Ž”–—–” ¢¦©°³¸»¹¹··¶³ªª©­¡¤¡›••ŒŒ‰ˆˆ‰††ˆ¡§‹“—“”މŒ‹Š‰‡…††ˆ‡‡††‚…ˆ‹‡†ˆ‰„ƒ†ŠŠ‹„„‚„†x&!S†‰["*)!5MQ[‘Zb€Š‡ˆˆŠˆ†ˆ‡‡Š‰‰Š‹žˆ‡’ŒŒŒ‹Ž’•—šŸ¡¡Ÿœžš––”Ž‹¤ŽŒ‡ŠŒŒ‰Œ‹ŒŠŒ‹‹‰ˆ†ˆŠŒˆŒ‹‡ˆ‡†‡ˆˆ‡‹‰‡•†‰‚ƒ„ƒ…†‚€……„„†„„†‚¡ƒ~ƒ„‚‚}ƒ‡…ƒ†…ƒ……‡…„„‚…‡‡ˆ†ƒ…ƒ„‹‡‡…„„……„ˆ†„…ˆ�˜ðìèéèçà×Ô×ÑÓÕÓÎÍÐÐÏÏÎÌËÈņÇÉÊËÊÈ;ËÍÌÈÅÉÎÐÔÖÖßÜáåçåèêêîëçåêëéåäßÛÝÔÎÏÍÎÅËÈÈÆÈÆÇÇÆÄÆÇÈÈÉÆÇÈÉËÑÑØÌÆžÄÃÃÄÂÆÅÂÄÃÁÀÀÂÁ½¿ÀÂÆÃÅÅÄÀÃÂÁÃÂÁ§Â¾¾À·RLBª}7¼˜VTYbƒ˜—›Ÿª¿ÂÄÂÁÄÄÅÀÀÂÅÆÄÇÅÆ‘ÇÇÉÊÈÄÄÅËÐÕÛÜáàáÝ×ÎËÊÉÉËÌÊÉÇÇÉÉÊÈÇ ÅÅÇÆÈÆÄÅÅÄÄÂÃÆÇÆÆÄÃÂÁÆÆÂÀÄÄÂÂÁÁÂÁ­Â¿¿¾½¾½À¿ÀÁÀÁ¿½¿Á¿¾¿À¿¾¿Á½ÁÀ¾¿Â¾¿½¿½ÀÂÀÁÁÂÃÁÄŽÃÁ¿¿ÀÁÂÂÃÀÁÄÀ„½¼½¿À¼�ÎÏÈÆÅÅÁ¸´´±±³²¯¬­®¬­«¬«§¥£¤¥¦©°¨¬¬«©ª«¦¥¨­¯³¶µ»º¿ÂÃÂÄÅÅÉÇÅÃÇÅĽ·¹°ª¬©«¥ª©§¦¦£¥¡¢¤¦¦¥§¤¤¥¥§¯®³ª£¥¤¢¡¢¢¡¤¥¡¡  Ÿž¡¡ž× ¤¢¥¤¤¡¡  £¢¡ ¡¢ž¡—51+‰d˜w98?Gdxw}~ˆž¢£¢¡¤¢¢ŸžŸ¤¦¤¥¤¦¥¤¥¥§¨¦£¤¥¨­±¶µ»º»·²²³¬©©¨§¨ª¨§¥¦£©¦¥¥¤£¢¤¥¦¤£¤¤££ ¡¤¤¥£¢¢ Ÿ£¤¡Ÿ ¢¡  Ÿƒ Ÿž„žŸŸž›œžŸœžŸžžŸ›žŸžž¡¡œœœžŸžž —Ÿ¡¡¢  ¡¡Ÿž ¡  £ Ÿ¡ ¡¢žžŸž�þÉ»¼´³«¢›˜˜™œ—––•”“’”‹Œ‰‰ˆˆŠŽŽˆŠ“‘—ž ª¥¬²³°±±¶¹¶´²·²²°°§¡£•”‡‹ˆŠŠŒ††‡ˆ‡Œ‹Œ‰Žˆˆ‰‹•˜ˆŒŒ†Š‰‰‡‹‹„††…†„…„ƒ†Œ‡…†ˆƒÇ…„‡Š‰‰ˆ…ƒƒ„‡{"lO |f%'))<RRWVb€‰ˆŠŠŒˆ††ƒ†‹Šˆ‹ŠŽŠˆŠŒ‘‰‹Œ’™ŸŸ¤¢¤Ÿ™š›’Ž‘Œ‰ˆŒ’‘‡‰ŠœŒŒŠ‰‹‹Š‡ƒŠŽ‹‡ŠŒ†ˆ‹ˆ†‡Šˆ‹‡†‡•Їƒƒ„…„…ƒ††„ƒ†ƒ††ƒƒ…ƒ†ƒƒ†„‡†}€‚€…†…›‡„„††…‡ˆ‰‰†…†ˆ††‰‡†‡…ˆŒ†…‡‡…‡�²Õ×ßåßÝÚÑÔÕÖÔÒÏÐÏÑÑÐÑÐÎÐÍÍÉÈÇÇÌÈÌÍÒ×ÚßÚÝéïïóóôôõõöóî»ëéââÞÕÏÐÎÊÇÆÆÅÇÈÊÇÆÆÇÆÇÉÇÂÅÉÆÇÈÇÄÅÇÆÆÇÅÆÅÇÃÁÆÈÄÁÁÀÄÅÆÅÅÃÆÄÁÂÓÆÄÆÄÃÃÄÄÁÃÅÄÈÄÃÂÂÀ¿ÁÁ¼XUIÖgIwµYYXeƒ˜œ¢¬ÀÄÄÅÀÃÄÄÉÆÂÇÊÊÅÇÇÉÈÈËÏÕÛáæåáÚÒÑÌÓÉÑÌÊËÊÊËÊõÉÊÈÇÉÉÇÅÈÇÇÄÆÃÆÆÄÆÇÆÇÆÂÃÆÅÄÂÂÁÃÄÇÅÁÄ¿¿ÁÀÀ»»¼¾ÁÃÂÁÁÂÃÀÀ»½Á¿ÀÀÁÀ¿¿¾½ÂÁÂÀÁÀÁÁ¾ÂÄÁ½Á¿¾¾À¿ÁÁÃÃÅÃÃÂÁÂÄÂÅÀ¾ÂÁÃÂÁÁ¿ÂÀÃÄÁÀ½ÁÀÀÂ�ˆ²¶½Á¼»¹°³½²±®®­¯¯¬®­­¯¬«¨¨¦§¬¨­­±¶¹½¹»ÉÏÍÐÑÓÓÐÏÓÐÌÈÈÅÁ½¿¹²­¬ª§¥¥¤¢¤¥¦¥¢£†¥¦¥ ¢¥¤‚¡£¤œ¥¡£¢¤¢Ÿ¢¤ žŸŸ¢£¤¤¥¡¢ ž  ¡¤¢¤¡Ë¢£ ¡£¢¥¢¢  Ÿ¡Ÿ¡  ™890°J.^9<<Faqx{~‰Ÿ¤¢£Ÿ¡¢£¦¤ ¥¨¨¤¤¥¨§¦ª¬±¶»¾¼º¶¯­©®§­¨§§¨§‚¨¨¦Ó¥§¦¤¤¦¤¥¡¢ ¢¤££¤£¤£¡Ÿ¢¡  ¡Ÿ¡¢£¢Ÿ¡žŸž˜™šœž  žŸ¡ žž››œœžžŸžŸœŸžŸžŸžŸŸ œŸ¢Ÿœ žœœŸ‚¡¡ —Ÿ ¢Ÿ¢žž Ÿ¢¡  žŸŸ¢£   Ÿ¡¢�þœ¢¨¯§¥¡˜œ››–“—˜—•–•”—‘”‹‰‹””˜¤©¥¤³Á¾ÂÃÈÉÉÊÇÉ¿·º²®ª­£˜’Ž‹‡Œ‹‰Š†‡‡ˆˆŒŠ††‰‡‰Š‡…‡‰ŒŠ‹‡ˆˆ‰†ƒ‡††„„…‡‡ˆŽ‡ˆ†„……ƒ‡†……†‡‡ƒ‚†‹„ˆˆŠˆ‡Óˆ„†‡†€'$‹2Hw$'()<KPRTb‚‰‹…ˆ‡‡Œˆ‹Ž‰‰‹Œ‘™ž¥ª©¢š”“”Š“ŽŽ‘ŒŽ‹‹ŒŒŽŽŠ…ˆ„†‹ŒŠˆ‰‹‹ˆ‰‡ˆ‰‰‡ˆº‰ˆˆ…ƒ…„~€ƒ„†‡Š†…‰ˆ…†‚ƒ‚†…ƒ‚†…†„ƒ†…†ƒ†‚†…ƒ„Š‹‡‚„ƒ‚„ƒ„…††‡„†……‡‡‰…†Ž‰†‡‡ƒ†„†‰ˆ‰„ˆ‰ˆ�¹ÒÓÖר××ÖÙØÕÕÔÑÒÑÏÐÌÒÏËÏÑØØÝßãééëìññòôóõöôöõóòïëæâàßÙÕÓÏÍÌÈÅÅÆÇÈÉÈÈÇÈÆÄÅÆÅÆÉÉÃÅÆÅÇÉÆÄÆÅÂÅÆÆÇÅÅÂÂÅÃÁÄÉÄÂÆÅÆÆÅÆÅÆÅÄÇÅÂÄÇÈÁÀÀ½ÅÂÁÇÈÄ¿ÄÇżXNNmLLZÔ^ZVc„‘—Ÿ¤²ÀÅÅÄÄÆÆÇÈÆÅÈÉÉËÊÍÑØáäãÝÝÜÙÕÒÒÎÌÏÌËÎÍËÌÉÈ…ÉÈÈÇÆÇÂÇ£ÅÆÅÃÁÅÇÃÆÅÄÂÃÆÄÄÅÅÁÃÃÆÄÀÂÁ¿½¾»º¼½½À›¿ÀÁÃÁÃÁ½¾ÁÂÀ¿¼»¾ÁÂÁ¿¾ÀÀ¾Ã¾ÂÁ¥ÃÂÁÄÃÂÁÀÀÆÃÁÃÂÆÃÂÄÅÂÃÃÂÂÀÃÃÄÅÄÆÄÃÂÂÀÃÂÁ�®°³´µ³´³µµ´³±®¯­—«±®­¯±µ·¿½ÂÅÅÊËÎÎÏÖÐÑÔÑÒ–ÎËÿ¼¹¸³¯®«ª©¥¥¤¤¢££¥¦¥§¦¤¡¢¡¢¤¥¤Ÿ¢£¡¤¤£¡££ ¢£¢££¢ Ÿ¢ Ÿ¡¥¡ ££¥¤¢Õ¤¤£¤£ ¢¤¥ŸžŸœ¢ ž¤¦£ ¡ £¥¤ ¡˜934M32D®?><Ecsx|ž£¢¡ ¢¤¥¥¤£¥¥¦§¦©¯´¼¾¼··µ³¯®¯©¨ª¨¨©¨¨©¦¥¯§¥¤££¤¥£ ££¢¡¢¢¡ ¡£¡¢¡  Ÿ£  ¡¡Ÿ  ¢¢ŸŸœš˜š›šŸ›žžŸ ŸœšŸžœ›šŸž›œžžœ ›Ÿž™ Ÿž  žŸžž¢ŸŸ¡Ÿ¢Ÿ  ¡Ÿ¡ ž¡Ÿ¡‰¢¡££¡¢ Ÿ¢¢¡�º—šœœžœ›ž¡ ›š””——•“˜—–™˜¢¤ª­´·¸»»ÁÀÂÆÇÆÆÀÅÃÁ¼¶±«¦¤¢›—‘‘Œ‡›‰ŠŒŒŠ‹Œˆ†Š†‰‰Š…ˆˆ‡ˆˆ†…†‡…‡ˆ††‚…‚ƒ„‹ˆ†‰‰Žˆ‡þˆˆ„…‡Š„‚‡ˆ…ˆŒ‡…†…‰Œˆ‡‡$30’''%(<KOQTdƒ‹ˆ‡…ˆ‰‹ŒŠ‰‹ŒŽ‰–¦¨¥Ÿžœ™—’“‹ŽŒŽ‘ŽŒŒ‰ˆ‰‰‡‹Œ‡…Šƒ„„†‰‡…†‰ˆ†‹ˆ‡‰Š†‡…ˆ‡„†„ƒ„‰„||‚ƒ†‡†Â‡ƒ…‡†ƒ„„……ƒ…††„€ƒ€ƒƒ‰ˆ…„†…„‡†„„ƒ„‰‡…†‚†…††…„‰†…‡ˆ‰ˆ„…ˆˆ‰‰Œˆˆ‹‹Œ�­ÖÔÓÓÒÒÖÎÌÒÓÕÒÕÖÙÙãæìðñô÷÷øùùøôôóîïìçàÜÛÞÛ×ÓÑÌÈ»ÃÅÊÇÇÈÆÅÇÄÉÉÆÀÃÆÄÆÄÄÃÄÄÂþÂÄÅÅÁÁÃÂÆÆÂÄÅÂÄÇÆÄÄÁÅÈÎÐÞÝÛÚÞËÇÈÉÇÏÆÄÃÃÄÄÁÄÆÅÂÄÄÃÅÃÄÇÆÅ¾ÀÅÄÅÄÁÄ»WKCRAGF€RWZf„‘•¡¤®ÁÆÄÆÆÅÊÆÇÈÒÎÏÒÛÜÛâèîîòìÜÏÌÍÏÍËÌËÊ®ÌËÊÊÈÈÊËÈÈÄÆÈÉÊÇÅÅÆÅÃÅÃÂÄÅÄÅÆÅÇÂÃÆÄÄÆÃÁÄÃÄÄÂÃÃňÄÃÆÄÂÁÀ¿¾Œ¹·¸¾Ã¿ÂÂÁÃÀÁÀ³ÄÁ¾¿½¿ÂÁÂÀÁÀÄÂÂÁÂÅÿ¾ÀÃÂÄÃÃÁÁÂÃÆÅÆÃ¾¿¾½ÁÃÆÇÃÆÃÂÂÀÀ¿ÁÀ�¿²°°±¯®³­¬°³µ±³³¸·ÂÆËÐÒÒ×Ö×ÚÕÚÔÒÒÐÌɽ¹·ºµ±¯°©¦¥¥¡¢§¥¤¥£¢£¡¥¥¡Ÿ ¢½¡¡ £¢ ¡œž¡¢¢Ÿ  Ÿ¢¢ž ¢  £¢¡ Ÿ£¥©¬¹¸¶´¸§¤¦§¤£¤¤££¢¡¢¡¡££ ¡£  ¡¢¤©Ÿ£¥¤¢ £—81.;(-.e6=>Hcsv~Š£¢¤¡¡§¥¦¥®««®µêºÁÈÊËÅ´©¨¨«©§¨§¦§¦§§¦¦¤¤¦¨¦¦¡¢¥¦¦£ ¢¢ Ÿ¡ ¡¢¡ ¢£¡£  ¡  ¢¡ž¡ ¢¡ž¢ ¢¢¡ŸŸ  Ÿžœ›š›—•–œ œžŸŸ žœž ››šŸžŸžž žˆŸ¡Ÿœ›ŸŸ ˜žžŸ ¡¡¢¡›œœ  ¤¤ ¤¢¡¢ŸŸ¡¡¢�þ›š™––›š–—›™šœ£¤±¹½ÂÍÉÎÑÒÕÏÎÉÈÅĽ·®¦¡Ÿ¤ž˜”’‹‡Š‰…„‹ˆ‡ˆ‰‹…†ˆ‡„……„‰„†ˆŠ‰‡‰…†Šˆ…‰ˆ…ƒ„„††„‚ƒ†‡…‚†ŠŽ’¡¡œš¡ŽŽŠ‡Š‰†‰ˆ††ƒ…†…†ˆˆ„†‡É‡ˆŠ†ƒ„†ˆ‰††‰$(!N!%'*;ILRSb‹‰Š‡‡‹—“‘— ž¢«¸¹¼²›ŽŽŽ‹ŒŒŽŒŒŽ‡ˆ‰‰…‹†„‡„……††ˆ‡…‹‡†‰ˆ†ˆ‡‚ˆÓ†ˆ†ˆ‰‰‡…ˆ†„€~€}v{„‡„ƒ††‡…‚„†‰„~€~ƒ‚„††…†„…„…‡†€‚…†ˆ„……‡†‚…ˆ‚ƒƒ…‡‡††‡Šˆ‰‹‡ˆ‹Œ�¹ÔÕÕ×Ô×ßÞãêéíïòòóôõôõõô÷öôñïäãÜØÕÔÕÏÒÊÉÊÎÏËÅÆÆÇÆÈÄÆÈÉÇÊÇÆÉÈÀÆÅÁÇÆÄÁ¿ÀÃÀÀÄÃÅÁÂÄÃÿÀÂÁÂÃÇÊÆÃÅÊÏÚãåäâåáåâáÓÖÖÓÐËÈÆÄÃÂÁÂÄÃÅÄÁÄÁÂĆÅÃÃÁÁÅĊøECŽ>ICJYÏl‰“›Ÿ¢¯ÄÇÇÉÈÌÒÔÛããÞÕÓÐÏÍÏÌÏÏÜàÕÊÇÊÌÎÌÊÊÌÈÈÊÈÉÅÇÈÊÊÈÊÇÈÇÇÆÇÆÅÆÆÄÃÃÅÅÂÄÄÅÃÅÂÁÂÃÁÁÃÖÂÃÂÃÃÀÅÀÀ¼¿º»¼À½¶µ»º·¶º½ÃÁÃÄÃÄÀÁÀÁÀÀ¾ÀÁÁ¾¿ÃÀÁÿÃÄÂÂÇÃÂÃÂÂÃÀ¿ÁÂÃÁÄÄÅÁÁ·³¼ÄÃÄÂÂÀ»ÄÄÅÄÄÂÁÂ�³©¶µ¸½¼ÁÆÇÉÍÐÍÐÓרÖÙ×ÚØÕÑÍÿº·µ·µ°°ª©©¬­¨¤¦¤‰¦¢£¦§¥§¥¢¥Ã¦££ ££¢Ÿž¡Ÿž¡ ¢ ¡£¢¢žžŸŸ¡ ¤¦¢ ¢§«´½¾¾½¿¼¾º»¯±±°¬¨¦¥¡¢¡ž ¢ ££ £ Ÿ £¢¹ŸŸ£¤¢¡¢¢•,0wr%-)-<=<Kgrz|€‹¡¥¤¦¤§­°·»¼·¯¯­«©«ª¬­·¼°§¥§©©¨§Ë¤¥¦¤¥£¥¥¦¨¥§¥¤¥¥£¥£¡£¢ŸŸ¡£¢Ÿ¡¡¢ ¢ žŸ žŸ Ÿ Ÿ Ÿ ¡ž¡ž™œ˜ššš–“˜™––˜› žŸ ¡¡œ’œ›œœœŸžŸŸ¡žŸ¢ŸžŸ†ž ŸŸž ’Ÿ–’𢠠Ÿžžš¡£¤¤£¢¢£¥�Ÿþ£ž¤©®µ»¼ÁÃÉÈÈÌÐÔÏÏÒÑÐËÅ¿±©¤¡œ¡••’••‰ŠˆˆŠ‹ˆŒŒŠ‰‹Š‹‰ˆ‚†‡Š…‚…ˆ†…ˆ‡‰„ˆ‰Š‹„ƒ„‚…ˆŠ‹…‚‡‘“›¦§©¦¨¦©¤¦˜œš–’ŒŠ†ˆ‡ƒ†‡‡ˆ††‡†…†‰ŠˆŒÓ‡…††Šˆ„†‰~$e`'&%/?INPTbƒŽŠ•š §ª¡——–”‘’•”œ ”ŽŽŽŒ‹ŽŠŽŒ‰ˆŠŠŒŠŠŽˆ†Ñˆ‡„‡ˆ‹‡‹‡…††…‡…ƒ‰ˆ‡…‡‡…‡…ƒ‚}~~{xv}€||~ƒˆ…†‡‰ˆ…‚‚„ƒ†ƒ‚~~„‚†‡„†‰††Š††„„…†……„…„‚……„†|v€‡‹†ƒ€ˆŠŒŠŽ�ƒìïòó…ôöõõôóñòðñòóòôôñîìæäåèçêìçéèæèéåçèçèåèèëêäçâåáßãÝßßÞãÜÞÜÕÖÑÛÖÐÍÌÉÉÏÓÑÑÏÌÄÈÃÊÏËÍÖãìîêææäÝâÜÙÙÖÖÞáÛÞæÙÐÆÂÁÁÃÃÂÀÃÄÃÄÀÄÅÃÁÃÄ­ÃÂÁÅÅóZµÊšah_fdeZj‹•ž¡§®ÂËÏÐÓ×ÚÓÐÎÌÑÌÈÌËÈÉÈÊƧÇÉÊÇÊÉÉÅÇÇÈÇÆÇÉÆÄÅÄÆÆÄÄÆÅÄÃÅÆÂÃÅÂÂÄÁÃÆÂÀ–Á¿½¾¾¿¾¿ÀÀ½½À¾¿ÁÀ½¼ÀÀ¿¡ÃÃÁÃÆÇÂÁ¿ÁÀ¾Àºº¹·¶º¼ÁÀºº¾¿¾¼¾À¿¾¿ÁÄÀ¾ÂÁÀÃÂÁÀ¿ÁÂÁÄÁÀÁÂÀÁ½½ÂÃÅÆÅÃÁ¾¾ÃÁ�®ÏÑÐÖÝÙÙÚÜ×Ö×Ù×ÕÔÖÔÖÔÔÕÖÖÓËÊÅÃÁÇÇÈÉÇÇÆÄÄÅÂÃÅÂÄÂÄÁÁ¾Á¼¾¼¸½¹¼»¹¾¸¹·²³²·³®««¨§«²°®¬¬¤§¤¨¬¨­µÀÈËÆÁÁ¿º¿¸¶¶²³¹½¸¸¾µ¯¤ ŸŸ ¼ž££¢£ ¢£¤ ¡¤¡  £¢¢££¢’@–¨JLGHDJ?Jkt~„‹Ÿ©¬­¯²´¯¬«ª®¨¦©¨¦§¥¨¤¾¥§¨¤§¦¦¤¥¤¥¥¤¢¦¥£¤£¥£¡££¤£¢££  ¡ŸŸ¡Ÿ ¢ŸžžŸžœœžž›žžœžŸž›™³ž ¡žŸ£¤ žžŸœžš™˜–”˜™ž˜˜›œš›œŸŸžž¡œŸŸžŸ ŸŸžžŸŸ ‘žŸ  ŸŸ› ¡£¥¥¤¢ŸŸ¤�¾ÄËÎÕÒÖÑÖØÖÖÔÓÐÍÉÍÉËÍÐÐÌÌÈ¿¼³¯²·µ»½·¸¸³¶¹²³·³®¨°´¹µ¬±ª«¥£§¡«¬£©¢þž¡ž¤•““Ž“›’–”’‡†‹“•œªµ¾³ª«ª¤©ŸŸš›¤¨ž§–‹…„„†‡……‹‹ˆ†„ˆŠ‹‰‰Ž‰…†‰Šˆ†‡ˆ|-g<336//(/FKTVZ`”•”–›–““‘•Œ‘‘ŽŒŽ‡ˆ…ˆŽŽŒŽþŽ‹‹Š‹‹Œ‹‡‰‡†‡‡‰ˆ…†‡„ƒ‡††‡„ƒˆ…ˆ…ƒ„‚„…ƒ„‰„ƒƒ„……‡€„‚ƒƒ‡†„ˆ‡‚ƒ„†‚}}yy{}…„}|}€~‚„ƒ„‡……‡„‚†…ƒ…†„„†…ƒ‡„ƒ†‰†„…„†‡„„‰ŠŽŽŒˆˆŽ�‚óóôóˆôõõôôõôöô‹õôóõóôòðññîð‹íéíîïîîíïëêç¬èàÛáââäãÝáèçëêìíïîïñððòòíîñðíðîíîñòðíîñôöõôõôœóòòóñíçêêèéÞããÞÔÓÏÇÃÃÀ¿ÂÂÆÃÁÅ‚ÄÂÄ®ÃÁÃÅÅÆ³]¼Ã¿»·Ç§¯`f‡•¢©²ÊÎÏËËÉÈÊÌËÊÉÊÈÊÉÊÉÄÃÄÆ“ÈÆÄÆÇÇÅÃÆÈÆÆÅÅÁÆÄÆÈÅ¥ÇÇÅÅÇÅÅÀÁ¿¿¸º»»¿ÀÂÀ¾Â¿¿ÃÄÂľÁÅÀÀÁÂÁÁ¾ÁÁĽ¿ÀÀ¾¾ºº¶¸¸¹·¸¹»½¿¿À¾¿¾ÀÀ¿¾Á¿À¿ÁÁÀÂÂÁÃÄÂÃÆÃÁÃÂÄÃÁ¿ÁÆÄÅÁÃÇÆćÃÂÂÀ½¾¾¿¾�§ÜÚÖÚÝÚÝÛÝÛÜÚÙ×ÔÕÕÖÖÕÓÖÖÕÐÍÎÌÏÌÑÎÊÉËÆÊËÍÉÜËÆÇÁÂÃøµ¼¼»¾½¸¼ÄÃÄÆÆÇÊÈÈÍÉÈÌÌÉÏËËÊÊÉÊÎÎÐÐËÍÎÑÕÝÙÔÒÒÐÔÒÏÐÍÇÁÄÅÂø½¼»±°­¦¢¢ŸŸ¡¢¤£¢¤£¤¢£¤££¢£¡¤©¦‘?›£ž›–£ŸˆBIfv}‚…ަ««©©§§¨©¨¨§§¥¨§¨¦¢¡¡¤¦¥¦¥£¤¥¤££¤¥¥¤£¤ ¢¢¤¤¢£¢¥¥££¤¢¡ŸŸ˜šš›ž… žžŸ¡ ¥Ÿ¢žžŸ ŸžŸŸžŸžž¡Ÿ›žžœ™™–—˜˜—˜—™›œœœ‹žœŸžžŸ žŸ   Ÿ ¢ Ÿ¢  ¡Ÿž ¥¢£ ¢¥¥¤¡¢¢¡¢£¡ŸŸ¡£¡�ˆÖÚÚÕÑÓØ×Ô‚ÒÏËÍÈÈÑÐÉÇÆÇļ¼ÄÀÀ½¾À¼µ¹¹À¾¼ºÂ¸²®±®°©¡©¬ªª¦¡£µµ®­µ·¹º¾Ä¾¼¼¾ºµ»¼ºµ¹»ÂÁÅÁ»»¾ÆÊÉÉÌÅÃÂÁ¿¾»¶®µ·­¬ž¥§¤—•‡…ƒ‚…ЉЉ†ˆ‡ŠˆŠŽ‹‰ˆŠˆ‹‰Œ€/ˆŠ†‡~‹‰pq,,EOVY[e‡“”Š‹²ŽŽ‰ŽŽ‘Ї†Šˆ‰Œ‹ˆ‹Œ‹Š‰Š‹Œ‰‰†‰Š‰Š‡‰†Š‹‡‰‡…†…„~“„…†…‡…ƒˆ‰†‡ˆ„„‡€‚†Î…„ƒƒƒ„‡„€‚……~{}zz|~{y{~€ƒƒ‚ƒ‚ƒ„ƒ‚…„„††…†…ƒ…ˆ……‰…„†„„‡‹Š‰Š‹‹††Šˆ‹ŠŠ‰‰ˆŒŠ�ÇöõôóòîóïñðîìéãÜãäåäåâÜÚÖÒÌÍÏÒÌÌÏÌÍÌÎÒÒÐÌÎÐÌÅÄÄÇÈÇÅÆÉÆÇÉÉÊÍÎÈËÊÈÎÍÏÐÒÓ×ÜÛ¹áßßçìòóòóòóóõöôòðóóñðóíîîíçáåæàÕÖ×ÎÕØßæàÓÅÂÁÁÅÆÆÅÄÄÂÅÂÆÈÂÅÌÇÄÇÆ±1Mµ…IX[xŽ¢Wf‡–œ¡¡¯ÆÇÈÈÉÇÈÊÉÈËÉËÉÇÈÈÉÅÆÆÇÆÈÅÆÉÉÇÈÆÅÄÆÆÅÆÄÅÅÆÇÇÉÆÇÄÅÇÆÅÄÈÆ’ÄÅÄÁÁÆÄÄÃĽ¿ÃÂÁÁÄÃÀ¿½ÁÁÃÁÂÀÀ¾¾Â¿µÀ½À¿¾¿¾¹¸·¹»À¼»¾¾ÀÁÀÁÄÀÁÀÀÄÂÃÂÃÅÄÁÅÄÃÂÆÃ¿¹¸½Á¿ÄÃÄÄÃÄʼnÄÅÄÁ¿¼º»¼½»�¡Ù×ÑÓÓÍÕÏÏÓÌÇļ¹½¾¾½¿½¸µ²®ªª«­©©«¨ªÓ¯®®ªª­©¢  ¥¦¦£¤¤££¥¦§©ª¥¦¦¥ª©ª­¯®±·µ¶¸¼»»ÀÆÏÔÏÒÐÑÓÔÑÍÐÎÍÌËÊÌÉÈÇÇÁ¼¿¿º±²³«°³¹¿¾¯¤ Ÿ¡¤²¥¤¢¡£¡¤¦¡£¤£¦£¥¥!>•o5BI_j}8Gew|€Š£¦¥¦§¥¦¨§§©§§¦¥¦”£¤¥¥¤¥¢¤¦¦¤¥¤££¥£¢£¢£†¤¥¥¤£¡£„¤¡¤¢£ª¢¡Ÿ £¢¡ž¡œž  Ÿž¡ žŸŸ›žžž››Ÿžœœ›žœ•—––˜˜š™››žžŸ¡žžŸ Ÿ ’¢ ž£  Ÿ¢Ÿ™˜›Ÿ¡ž££¢£¤¤¢¡£¡ ¡žœ ž�öÖÔÎÇÄ¿ÊȾ¸·µ®¨©§©§¬©›˜”“•‹ŒŽŒ‘’”Ž“Žˆ‡†ŒˆŠŒŒ‹‹ŠˆŽŽŠŠ‰Œ“Ž‘–˜•™ŸžŸ›¦£¦ª´ÂÆÄÄÃÁÂÆÄ¿½¿»¹º¹·¶´³«¦®®¡•™›’˜› §ž”…‡†‰º‹‹ˆƒ†‡†Žˆ‰ŠŠ‹Š‹x*|T(5>OMZ"*CPSWR`„ŒŒ‡Š‹Œ‹ŽŽ‰‹Œ‹ˆƒŠŠ‰ŒÄЇ‹††Š†‡‰ˆ‹Š‹Š‰†‹ˆ†‹‡‡ˆ‰†ˆˆ‡„ƒ‰ˆˆ‡‰…†…‡„……‚ƒ„€~‚ƒ‡‚~€~„„€ƒƒ~€|¸{|„||€ƒ„…„†‚ƒ„ƒ…ƒ…„„‡†„†„„†‚€|}…‡„Š‹‰‹ŠŠ‰Œ‹„„ˆˆ‡ˆ††‡†ˆ‡�¥ëçåãÝÙÙÕÎÐÐÄÀ¹¼À»»¾ÃÅÃÁÀÁ¿À½ÁÁ¾¿ÁÃÂÂæÁÀ¿À¿Â¾ÁÂÃÀÁÂÂÁÃÅÅÂÄÅÂÂÀÀÁ¿¿À¿¾ÈÈÒÓÚàÞåðççéêæèéæâäâàÞßÝÜÙÜßßÚÖÖÐÙÛÚÜÙ×ÞãÝØÔÌÃÅÆÅÅÄÄÅÆ¿ÃÄÆÆÄÄÅÄÈų3.BR25<;DGRi–šŸ¤¯ÃÆÆÇÇÈÈÉÉÇÈÈÊËÈÅÈÈÇÆÅÆÇÇÄÅÉËÉËÆÄÁÅÃÆÃŽįÆÈÂÇÅÄÆÆÈÆÅÆÅÆÅÇÅÈÆÈÅÄÁÄÀÁÂÀÁ½¾Á¿¾¿ÁÄÅÆÅÃÀÃÄÃÀ½¿ÄÁÁÀÅÀÀ¿½¿®½º½¾¾¿ÀÀÁÃÃÄÂÄÂÀ¾¾¿ÄÂÃÁÄÃÀ¿ÀÁÁ¼½¼ÄÆÅÅÃÄÃÄÆÆÄÃÅćÃÃÅþ½¼¼»�–Ǿ¾¹¶·±«­¬£ šœžš›¢¤¢Ÿœžž›žžœŸ¡  ¢ ¡  ¡Ÿžœ œŸ ¡žžŸþ¡¢¡Ÿ ¡ ŸžžŸžŸŸž¤§°°µº¸¿À¿ÄÃÂÅÃÂÁÀ»¾¼º¸¹¸¶´¶¸¹µ°±­µ·µµ³±¸¿¸³°ª¢¤¥£¤££¤¤Ÿ¡¢£¤£¢£¢¥¤’#1>!!#!)-5Hkuy~€‹ ¢£¥¤¦¦¥¦¥¥¤¦¨¦¤¥¦¥¤¤¥¤¤¡©£§¨¥§¤ Ÿ£ ¢Ÿ¢¢£¢£¤¤¢£¢ ¡¢¦¢¡¢¡¢££¢¤¤¥¢¡Ÿ¢Ÿ¤›œŸœ›Ÿ ¡¢¡ŸžŸŸž›œ žŸ œžž›šš›™šœžžŸ  ž Ÿžœ›¡Ÿ ž  ŸžžŸžšœœ¡£¤¥¢£¢¤¢¢¡  ¡££Ÿžœž�˜¹²­«¥ Ÿš•—‘†‡‚‚…Šˆ‡ƒƒ„ç}‚€„ˆ‡ƒ††‰‡†‰†……ƒ‡‚‡ŒŒ„†ƒ„‚ˆˆ†…†‡……„„†„……‚‚Ž˜–ž£ ¬ª©°¯¬²±¯°«¤¨¥¡žŸžž›Ÿ¢—–“ ™— ¢ž™˜‘‰ŠŒŠ‰…ˆˆ‚‡‡‰Ü†‰ŠŒŒx+5!'CPRWWcƒˆˆ‰Š‹Ž‰‹ŒŠŒˆ……ˆ‹‹Š‹‡…‹‡‡……‡‰‡‰‹‹‡Š‡…‡†Ž‰„‡††‰‹‡ŠŠŠ‰†‡ƒ„†µ€}‚~€…„…‡†„……„ƒ~„‡……ƒ‚„‡„‚ƒ~}‚‚…†ˆ‡…†…‚€ƒ‡ƒ‚…‚€Œ„ƒ}€‚‰Š‰Š‹ŠŽ‹‰‹ˆ„ƒ‡ˆ‡‹Œˆ‡ƒ†�¹ÐÎÊÊÈÀÁ¿¾ºÀ¿¾ÁÃÄÃÃÁÅÆÄÂÁÁÂÁ¿À¿¼¼¾¾½¾¼½¼½¾¿¼¾À¿»¾¾¼»¿¿À¼ÂÁÀþ¾¾ÀÀ¾¾ÁÇÌÒÒÙÞåçææßàáâáßßåêéååáÕÛßÜÔ×Þ×ÑÓÜàÞÞáßàÝÙÕÖØÛÕÙæäéÝÌÈÅÃÂÅÄÃÁÃÄÀ¿ÃÈÇÈÌÍÄB*&*"+:LPSWr˜˜›¡®ÂÅÇÈÆÇÆÇÇÈÇÉÉÌÈÈÅÈÇÆÆÇÆÅÆÅÉÊÉ—ÉÈÇÇÅÅÇÃÃÁÄÆÇÅÆÃÅÂÂÅÄÄÆʼnÆÃÄÆÆÅÇÆÇÃăÂÀÃŧÄÅÄÃÁÃÀÀÂÄÁÂÀÂÀÁÀÁ¿¾ÁÃÃÂÀ¿ÀÀÃÂÁÁÂÁÃÃÂÁ¿À½½¿À½»º¸±µ¾ÂÄ…ÆÄÅÄăÁÄÅÃŒÂÂÀÃÄÀÁÁ¿½½»½»�¯®©©¨¡¡  ›ŸŸž  ¢‰ £¥£¢¡¢¢¡Ÿ„žœžž…žœžŸŒž›žœœŸŸž¡ ŸÑŸžŸ ¥©¯°µº¿ÁÁÀºº¼½¼¼»¿ÆÄ¿À½²¸º¸°²¹³®®¶º¹¸¼¹»¹µ°²³¶²µ¾½Â·©¦¤¤£¥¤¢ ¢¢žž¢¦¥¥ª¬¢0‘ %14:<Qlyy{€ŒŸ£¥¦¥§¦¤¦§©¦§¤¦¥¥¤¥¢£¤¤§¨¥¦¥£¤£¢£¡¡Ÿ¢¥¥£¤££ Ÿ¢£Œ¡¢¡¡¢£¢£¤¥¡¡ ’¢¡ Ÿ¢¢¡ ¡¡  Ÿ¡Ÿ¡ž ŸŸžœžŸ¡ŸžŸ„ŸžŸžŸ§žžœ›žŸœš™˜”—Ÿ¢¤¢¤£¢£¢¡¡¢¡£¢¡¢¡¢¢Ÿ¡¡ ƒžŸœœ�þ𙓑‘‹‰†‰‚„†„‡‡ˆŠ‰ˆ‹Œ‹‰ˆˆ‹ˆ‚ƒ†…€„‡ƒƒ‚…†„„†…„…†‚…‡†„†‡ƒƒ…І……ƒ„„…‡ƒ„‹’–—Ÿ§¬²®ª¢¢©©¥¢£©±³¬­§•ž¤¢•– š”– ¢¡Ÿ¦¤¥¡™”—œŸ•™§¦®¢’Ž‹Œ‡ˆ†‡†‡‡ƒ‚†ˆ‰‘“Œ$ö'"#'/DUSTWf‡‡ˆŽ‹‰ŒŠŽŒŽ‹ŽŒŽ‰‰ˆ‡Ž‹Ž‰ˆŒŠ‰‡……‡‰‰Š‰ˆ‰„ƒˆ‰‹Œ‡…†…†‡‰Š‰‹‰Œˆ…„„‡Œˆ†ƒ†‡ƒ…ˆ†…„……„‚…„ƒƒ„ˆ†ƒ„ƒƒ…„…‡ˆ„‡‚…„°††„…„‚„†}ztw„ŠŒ‰‹‹Š‰ŒŠˆˆŠ‹ˆˆŒ‰ŠŠ††‰‡‡ˆ‹‡ˆ‚…�–ÁÿÀÀÁ¾Á¿ÁÁ¼¾ÅÃÅÂÁÂÂÁÁ¿Ë¼¼À¿¼¼½»¾¿¾¼¾½»¹¹µ¶¹¾»¼½¿¼¾¾ÁÀ¾Á½¼»ÄÆÆÉÌÔÔØÚÙØ×ÚØÐÏÓÑÙÙÓÒÖ×ÒÉÎÏÊÌÍÊËÒÌÊÈÈÌÉËÀÊÊÆÊÉÊÉÉÇÅËÌÐËÈÆÂÃÁÅÃÆÃÈÍÍÎÍÖ×ÌËÉȘ_)745?JVWYrŒ˜™—›±ÁÁÀÂÂÇÅÂÂÇÈÇÈ‚ÆÆÇ ÉÆÇÇÆÊÄÆÃÅÉÇÇÈÇÈÅÈÉÈÇÆÅÅÇÆÄÁÅÆÆÇÆŒÅÂÅÈÄÄÅÈÄÅÄÇÅšÆÄÆÄÃĞĿÂÂÁÂÄÂÄÂÁÀÁÃÁÿ‹ÁÂÁÀÁÂÃÃÂÄÄ­ÁÀ¿Â¾ÀÃÁ°½¿ÂÁÃÄÃÂÄÄÃÂÂÁ¿¾»¼¼½½»¼»¾¿½¿À¾¾¿½¼¿º¾½�“¤¥  ¡¡Ÿ¢¢¡¡œž¤¢£¢¡¢ þŸ ¡¡ ¡¡žœž¡ œžžœ›™•˜™žœžœž  ž ››¢¤¦§¨°±µ·µ¶´µ´­¬°®¶´¯®²´°¨¬¬§ª¬©§­ª©§¥©¦©©ª¨¨£©§§¨¨§¤©©®ª¦¤¢£¡¤¢¥¢¨«ª««²²©©¨§M )&&*28•;=Qkzzy|Ž ¢ ¢¢¤¢¡¡¥¦¥¦¢¥¤¥¥¦§££¤¥§£¤ £¥¤¥¦¥¥£¥¦¥¤£¤¤¥¤¡ £¤†££¡Ÿ¢¤¡›¥¢¡ £¢¤¤¢¡£  ¡¢ž Ÿ¡ŸžŸ¡ž¡ Ÿ° Ÿ žžŸ žž žžŸ ¢ ¡¢ Ÿ  ŸŸŸ ¢Ÿ‘›ž¡ ¢£¡¡¤¡¢  Ÿžœ‘œ›œ›žŸž ŸžŸŸœ œž�‚މ¡‹ˆŠ†„†Š‰ŠˆˆŠ‡…‡…†‰Š‡‚„‰ˆƒˆ…†Š‰„þ‚‚{€†…„„‡„ƒ†‰†‡ƒ„‚ˆŽŠŒ—šœŸžŸš£‘˜˜ ›•–›—˜Œ‘’Š”‘Œ“ŽŒŒ‘‹‘‘‡ˆ‹ŽŽŠ…•‘‹Š‰†ˆ…‰ˆŒ‘‘’‘˜™’’mC!"$#''&&1FWTORf€‡ƒ…ˆŒˆ‰Š‹ÖŒŽŽŽ‹‰‹ŽŠˆ‹ŠŒ‰‰…‰‰‰’ŽŒ‰‹Œ‰‡‡‰‹‹‰‡…Š‹‰‡ˆ…„„ŠŠ†ˆ†ŒŠ‰‡ˆˆ‹ˆˆ‡Š„„ˆ†ƒ„„‡†‚†„††……††ƒ†…„…‚„††‚ƒ…††Š……†‘„„ƒˆ†t€ƒƒ…†‡‡‰Œ‡†„„†„‚„†‚„†„†‡…†‡„ˆ‡ˆ„†„�–ÂÂÁ¾¿ÁÀ¿¼À¿»¾ÀÀ¾¾À¿½À¾ºÚ¾¿½½¾À¾º¿¾¾¿Á¼¿ÀÀ¾½º·º»¼½¸¸·¹¸¾»¸¼½°³¼À¿ÀÁÂÄÃÄ¿ÂÀÃÄÀ¾À¼¿Á¹¹¾¿À¾À¿À¾ÀÁÃŽÀÀÁÃÂÃÃÂÁÂÂÀÁÁÃÂÂÃÁ±ÃÅÊÊËÑËÒÒÐÐËÊÉÊÊÄÁÆÉ͵Y\ULKTSV[Ž—™šŸ¯À¿¾ÁÃÄÆÂÄÇÉÇÂÆÇÈÇÆÂÆÇÉÇÄÈÄÅÅÄÅÇÈÇÆÆÅÇÇÅÂÅÅÇÇÆÆÃÆÄÆÆÅÇÆÉÈÆÄÇÅÄÀÁÅÅÃÃÄÅÉÄÁÄÇÇÆÆÂÆÃÁÂÄÃÃÂÄÃÁÃÄÆÄÁÁÂÄ¿¾ÀÂÀÂÅÁÄÂÄÅÄ®ÂÁÀÁÃÿ¼­¿¿ÀÂÄÅÃÄÃÂÃÀÁÀ¼¾¹¹¸¹·¶¶¹¸»¸¹º»¹»»¹º·¹³�…¤£¡žŸ Žž¡ œŸ¡ŸžžŸžœž›ˆŸŸŸ ž›Ÿ‰¡Ÿ¡Ÿž™™›Î™™—ššžœ˜›‘“›ŸŸ  ¢¤¢£ž¡ ¢¢ž œŸ š˜œž œŸžŸ  ¡› Ÿž  ¢¡ Ÿ ŸŸ  ¡ ¡¡ Ÿ¡¡¢£§©©­©¯­‚©¨§™¢ ¤¦©–ED<42847>_py{{~ŸŸž¡–£¢¢¥¦¥¤¥¤¥¦¥¤¡¤¤¦¤¢¥£¤¢‘¥¦¥¤¤£¤¥¢Ÿ£¤¥¥¢£¡¢ª¤¢¥¤£¡£¢ Ÿ¡¡  ¡£¦ Ÿ¡£¢¢£Ÿ ŸŸ¡žŸ¡  Ÿ  žŸ ¡Ÿ¾ œœŸŸ ¡ž  ¡¢¡ ¡žžŸžŸ Ÿ¡›žž ¡£¤¢ ¡  žŸŸœš™—˜——–˜˜›—™™šš›œ››˜š”�ŽŒŠˆ…ˆˆ‹‰‹‡‚‰‰†‡‡‚„…‚€„ˆ‡†…††‚‚ˆ‹‡‰Šƒƒˆ……‡‚‚ƒö…~‰‡}„„yz…‰†„‡ˆ‹‡‹†‰‡‰‰ƒ€‡‚ƒ‚}~‚~„€ƒ„ƒ„„…‡ƒƒ„……‰††…†„ƒ‡†„‡†ƒ‡†‡†‡‹Ž’”’”“މˆŠŒ“~22/*'*%!!;JUTRTe…ƒƒ…‡ŠŠ‰Š‹ŽŒŒˆˆ‰‹ˆˆ‰†Š‡‡ˆˆ‰‰ˆŽŽŒ‹‹‡ƒˆŒÖ‰ˆ‚†‡‹‰ˆ‰ˆ‰…†ˆ‰†‡‚ˆˆ…„‡‰‰‡„……†ˆ…†ƒ‚†ˆ……„…††ƒ‚…†„„‡‡…†„~ƒ„ƒ„‚„„ˆ‰ˆ†……ƒ‚ƒ„„‚ˆ~t„††…„‡ˆ“†„ƒ‚„‚~}€~~{}}…‚†ƒƒ€x�ŠÄÁ¿ÀÀÁ¿¿½¾½¾¼»º¾¹º½½»¹º¿½¿½¥¾ºÁ¼¾½¿»¿½¾À»¾»¹»½¿½½ÀÀ½½¾¼¹»·¸¸¶½º»¾¿‘»¾½¸¼¼»¸º»¾½À¿Â¿¿Àþ¿ÁÃÃÂÃÂÁÀÂÄÀÁÃÄÅÆÀÂÃÀÁÂÅÈÇËÆÍÎÖÕÊÊÌÊÈÃÅÃÄÅÅþ½wY[e>>?<MXRXˆ•œ›ž®¼¾¿ÂÄÃÃÄÆÈÉÉÊÉÈÇÉÉÇÆÇÉÊÇÈÍÈÇÆÅÅÆÉÇÅÆÃÆÈÇÆÇÉÅÇÅÇÇÅÄÃÆÅÆÄÃÇÆÅÁàÆÅÀÃÄÂÂÄÆÈÆÇÃÆÄÂÂÄÅÆ¿ÁÄÁÁÂÃÅÂÅÄ¿ÁÄÄÿÁÂÃÂÂÃÃÄÁÄÃÅÄÅÄÄÆÃÁ½ÀÂÁ½Á¾ÁÄÁÁÂÆÆÃÂÂÄ¿Á¿¾¾»´°³´¶µµ·ºº¹¶¸³²‚´±´�§£¡Ÿ ¡¡Ÿ ž žŸ››šž™šœœ›™› žžœžšžœžŸœž²žœ››œžœŸ œžœ™›—˜˜–œ››žžŸš›œ™››š™ššœž ŸžžŸ £Ÿ ŸŸ ¢Ÿ  ¡£¢Ÿ¡¢Ÿ¢¢£§¦©¤ªª±²¨¨ª§¥¡££¢¡¡¢ž™]8;H(**$.62;iv~~{{ŒœŸž¡¢¡¢¢¤¥¦‚¥¥¦‡¤¤¥¦¥¥§¥þ££¤§¤¢¡¡£¦££¤¦¢¤¢¤£¡¡Ÿ¡ ¢¡ ¤¢¡ž£ Ÿ žŸ¢££¢£ ¤ ŸŸ¢¡¡œŸ žžŸ  Ÿ¡ œŸ žŸž žžŸŸ  ¢Ÿ¡ ¡  ¢ žž›Ÿž›ŸŸ Ÿ ¡¤¢¢ž ¡ Ÿžž›•‘“•–””˜™™—”—†•“””–’˜—�¨Ž‰‰‡‰ˆŠ†‰†„†ˆ‚†„‡€€„…€Š„‡„ƒ„‚ƒˆˆ†‡†€€…Ú‡‡††……ˆ†ƒ„Š„††€€~}€ƒ…„ƒ…‚ƒƒ~‚‚€~€…ƒ„‚…ƒƒ„‡††‡‡„„‡‡„…‡‰ˆ‡‰Š…Šˆ‡ŽŠ’š™Ž‹ŠˆˆŠ‡ˆ‡ˆ³‚zB'/2! "DRXWSRd€‡„†ˆˆ‹ˆ‰ŠŠ‹ŒŠ‹Ž‰‹ŠˆŠ‰‡‰Š‹‰‡‰ÄŠŒ‰‰ŒŒ‰ˆŠˆ‹‰ˆ…ƒ„‡†‡‰‡……†ˆ†ˆ‡€…ƒƒ†‡…ˆ……‚ƒ…ˆ‰„„‡„‚„‚……ˆ†‚„ƒ‚‚…‚ƒ„‚”…„……†‡‰‡†‡ƒ„ƒƒ„ƒ€†„‡¢ˆ‡†‡……‡ˆ†…‚€ƒ‚yvy~€{zz}~|z{yz~|}y€}�•¿ÁÀÀ¿À¼½¿¼¼¿¿º¼¹»¹º½¼‰¾¼»¸·¼»¹¹¾½ˆ¸½½»¼º»¼½“À½¿»½ÀÀ½¾»¾ÁÁý¼½ºº»—½º»º¼»¼½¼ÀÅÁÀÀÁÀ¾¾ÁÅÇÆÄÁßÅÃÂÃÄÃÂÃÆÂÈËÈÉÐÔÒÐÔÔÓÏËÇÉÇÆÈÆÅÄÃÅÃÀ¿ÄÁ–ED05J(,17ZRb˜›œ››¯¾¿ÁÄÃÄÅÆÈÇÃÄÅÇÈÊÇÈÊÆÇÉÊËÉÊÈÆÆÇÇÆÄÅÃÂÇÈ„ÆÇÈÆÇÈÆÉÈÄÉÈÆÃÁÇÆÄÅÃÂÅÃÃÄ¿ÄÅÆÆÃÅÁÄÁÂÆÇÉÇÇÆÄÄÅÂÃÃÆÄÄÃÃÅÄÂÅ¿ÄÇÆÅÅÄÄÆÄÃÃÅÇÆÃÀÃÀÁ¾§ÄÅÇÄÂÅÄÆÅÄÃÅÿÁÅÃÁ¾¹¶´»º·¶·´¯°ª­³´¸·¸½ÏÔ�„¢¡¡Ÿ ŠžžŸŸž  ›œœ›œ‘žŸœœš™œ›š™ž žžš›œ™ŸžžœŸž› Ÿ œœš›œ››œ›œ››Ÿ¢Ÿ Ÿ Ÿžž £¥¢¢ „¤¢ ¢¡¶¢¥¡¦ª§¨¯±¯®±°°¬©¥¦¤¥¦¤¤£¢¤£ŸŸ¤¡v)'&4 !95Dp{~~}{Ÿ¡ £þ¤£¦¤¡ ¤¥¥§¤¦¨¤¥¦¦¨¦§¦££¥¥¤££ Ÿ¤¦¤¥£¤¥¢¥¦¥¤¦¤ ¥£¡Ÿž££¡¡ Ÿ¡ŸŸ ¢£¢£ ¡Ÿ¡  ¤£¤£¤£¡  ž  £¡  Ÿ Ÿž ž ¢¡  ¡¢£ ŸŸ¡¥¢ žŸžžœœ£¤£¡ ££¤¢¢¡¢ ž¡¡¢ ¡ž™—”›š––—”‹—˜œšœ¡±¶�³ŽŒŒ‰‹Š‰…„ˆ‡‡‰ˆ…‚…‚ƒ†‚‚ƒ…‡€ƒ}|„€‚ƒˆ‡ˆ…€ƒ„ƒ†„……‡„„†«„‡ˆ„‚ƒƒ‡…„„ƒ‚‚„‚‚ƒ‚}‚ƒ„‹…„„…ƒ‚…ƒ„ˆ‰†„Š™†„І†‡‡‰ˆŽ’Ž—™–•—•”ˆŒ‡‹ÖˆŠ†ˆ…ƒ†Š…S "$LWZXWTa‚‡†‰‹‹†‰ˆ„‡‹ŠŠ‰ŽŒˆˆŠŒŽˆ‰Œ‹‡†‰ˆ†‡††ŠŒŠ‰ˆŒ‡ŒŒŠˆ‡…‹†‚‚…‰©†…„€„…€„‡†ˆ†‡‚‚ƒ…‰ˆˆ‡ˆ‡‡„ƒ‚‚„‹‡‚„ƒ„‚…‚€†…¸ƒ„ˆ†…‚ƒ‡‡ƒ…†ƒ}„‰‹‹‡„ˆŠ‹‡……‡‡„ƒ‡„„‚~|‚‚{z|zttou}€‚‚…ˆ£�Ê¿¾¿¿¼À¼»¼¼»¿À½¼¹¸½¼¼¾¼½¼¼»º¶µ´¹¸µµ»½º¹¹¼»½¹¸·¼½·¼¼½¾»¿½ÀÀ¿»¾¼¾¼¼ºº»º¹À¾¿¼½¾Ž¿¿ÀÀÂÄÂÁ¾¾½ÁÁÃÄÂÀ¿ÀÀÃÃÅÈÆÇÌÐÓÏÏÐÏÉÊÌÉÇÇÉÉÅÉÇÅÄÃÆÇÅÅÃÄÁ½ÀÄÁ„@87*GC.1:TXe‹šš™¬ÂÃÅÆÅŒÄÅÇÇÅÇÉÈÉÇÉÉÇÉÉÆÇÇÅÆÆÈÆÆÇÅÅÇÈšÄÇÆÆÇÆÇÆÇÆÇÆÄÄÇÂÅÇÈÇÁ¿ÄÆÄÆÂØÇÆÄÆÃÈÄÂÂÅÃÄÄÁÄÆÂ¼ÄÅÆÄÄÇÈÆÆÇÆÅÃÄÇÇÄÀÁÅÈÅÅÈÇÄÃÂÆÃÂÅÃÆÅÇÆÅÃÂÄÃÅÄÂÅÇÆÅÅÆÃÇÈÇÆÅÄÈÇÅÀÀ¾ÀÅËÒÙßàãäâ�¿ Ÿ  Ÿ¡žŸœž  ¡ŸššžžœŸœœ—––šš˜—›ž››ž›ššœž™œœžœžž  ž›œœ›˜šš žŸœœžžŸ  Ÿ¢¡¡ ž  ¢Ÿ¢Ï¦¥¦ª­¯«¬¯­§ª«§¦§§¨¤§¦¤¢¢¦¥¤¤£¤¡ž¡¥¢e(&&!0*!(7<Io||{|Š ££¤¥¤£¢£¤¥£¥§¥§¤§§¥¥¤¦¦¤‘¢£¤¦¤¤¥£¢¥¦¥¥¢¥¤£¥¤¥£¤£¡ £Ÿ¢¤¥£Ÿœ¡¢¾Ÿ  ¤¤¢¢ ¤¢¡¡  ¢¡ž ¢ž›¡¢¢  ¤¤¡¡£¢¡  ¢¢ŸŸ¢¤¡¢££¡  £ ¡¢¡££¤£¢¡¡£¢ž¡¤¦£¢¢¤¢¥¦¥¤£¢¥¥¢žžŸ¢¨±µ¼À»¿ÂÅÀ�ÖŠ‰ŠŠˆ‹‰ˆƒ†ŠŠ‹ˆ„‚ˆˆ††„ƒ…ƒ~x{ƒ€~€„†ƒ‚~ƒ†…‚~€„…„ƒ†‚ƒ†Š‰ƒ€„ƒ„„ƒ~‰ˆ‡€‚‡„€‚„„ˆ„ˆ‰†…‚þ†‡††ˆˆ„ƒ‡ˆˆ‡†Ž‹‰“••“’—•‘“Ž‹Œ‹†ŒˆŠ‡ˆŽ‡‹‡‡„ƒˆ‹ˆF )MY\ZYUaƒ‡†Š‹‡…‡ˆ‰ŠŠŽŒŠˆŒŠˆ‰‰Š††Šˆ‰ŠˆˆŠ‹‹††‰‡ˆŒŠ‡ˆˆ…‚ƒ†ƒŒŒŠ…ƒ…‰ˆ……†ŠŒŠ†„“‡……„„†‚„„}„…†……І„‡®†‡…„†„€ƒˆ††‚…„†„ˆ†ˆ‡„‡‹‹ŠŠˆ„„‡ˆ††‡‡ˆ‡…‡„‡‰ˆˆŠ‹Ž…‚ƒ‚†Ž‘ ¤¢¤¨«¬ª�…¾¿À¿¿¾¿À¿¾¾½¿··»¶·º¼µ¹·¶³º»¸·²´·¹³¶·»»¾»º½¼»º¼»¹¼¾¾½¾¾º¹»º»¸´²±¹¼¸¼¼½¾¾ÂÀÀÂÀ‰ÂÁÂÂÃÂÁÂÀÄ¾ÇÆÈÉËÎÏÏÒÒÖÒÎÅÆÇÆÇÆÅÆÅÆÉÈÆÁÃÂÃÇÅÆÄÅÆÄÆÄÂÅÅ=?¨w9^JFTYZl–ššŸŸ­Å‹ÄÇÇÅÆÅÈÊÇËÊȇÆÇÇÄÇÈÈƆÊÍÉÆÈÈÇÀÉÉËËÅÆÆÊÈÈÇÇÈÈÊÇÈÃÆÅÈÆÈÇÇÈÊÈÈÇÇÅÇÇÅÄÅÉÄÆÄÅÄÂÅÆÇÅÄÃÆÈÇÄÆÇÆÇÇÉÈÉÇÉÈ¹ÇÆÇÈÆÈÆÉÅÇÇÈÅÂÃÁÂÄÀ¿¼¼¾¿ÀÁÃÅÆÆÇÅÈÉÊÎÍÓÓ×ÖÛÝàæêììíëééçèæçåç�‚ŸŸ¡¨žžŸŸ¡ ŸŸž ™™œ™™›œ›™˜•šœ™™•–™š•˜˜›œžœœ›ƒœœšœ—žšš››š˜””’™›™œ›žž¡Ÿž¡£ŸžŸ¡ ¡Ÿ¢¡  ¡¡£¢¤£¥¦¨©¬«®¯²¯¬¤¥§¦¥¦£¤„¦¦¤ ¢¥¥¤¤¢£¤£¤£ ¤¥t('†Z%=0*68:Lrx}{~}ˆ¡£¢¢£¤¥£¦§¦¨§¥¦¥¦¤¤¥¢¥¤¥£¤£¦ª§¤¦¥¤¢¤¥¦§§£¤£¦¥¤¦¦¥£¤¡£¢¥£¤££¥¦¦¥££¢£¤¡ ¡¥¡¡ Ÿ¡¡£¡ŸŸ¡¤£ £¢¢¤£¤œ£¤¤¥£¢¢£¤¢¥¡¥¡¤¤¥¢žŸž  žŸ›œžŸ ¡¤¤£¢¢¥¦§ªª¯¯±±¶·¹½ÅÇÅÊÇÄÅÆÀÁÅÆÃ�͈‰‰‹†ˆˆ†Š‹‹ˆ‰…‚€‚ˆ†‚ƒ€|{}ƒƒ€}€zz|ƒ„…ƒƒ€ƒ„~ƒ‚„‡„€€‚ƒƒ}z{}€ƒ…†„…ˆ„„ˆ‡„††ˆ‡ƒ†ˆ…†‡‡‰ƒŠŒŽÆ‘•”›–‰ŠŽŠŠ‰ŠŽ‡‚…ˆ‡Œ‹…‹‹ˆ‹Š†‡Š]hL -QVXY^UbƒˆŠŒ‰†‡‰Œ‹ŽŽ›Šˆ‡ˆ‰ŠŽ‰‰ŠŠ‹‰Š‰ˆ‰‰‹Ž‹‡„‡ŽŒÊ†‰‹††‹„„…‰‡ˆˆ†‡ŒŒŠ‡†‰Œˆ„ƒ‡†ˆ„†‚€†‡…„„‚…††…ˆ‰‡‡‰ˆˆ†ˆ‰†‰ˆ‡†‡ˆ‡ˆƒ‡†‹‹Š„„…„ˆ…ƒ‚…ž‡‰††‡…ˆ‰‹Œ’”—–š›Ÿ¤««°¬«©©¦©¥§¤©�½¾¼¼¾¼À¿À¿¼»¹¼¼»¸˜¹º¹¹»¶³´¶»¼»´·º·¸¸¼¼¿½º»¹ºº¼»À½¾À¿»·º¼½¾¾¿·¼½½À½¾¿Á¿¿À—¿¿½Á¿¿ÃÃÅÅÇÊËÎÓÑÐÐÎÎÌÊËÇÆÈÆÅÆÅÈÇÅÅÆÅÄÉÇŵÄÄÅÆÃÄÄÆÈÄÅůűQOcMFc`]Y[_v•™£¨³ÃÆÈÆËÇÇÈÉËÉÉÈÈÇÈÈÆÄÆ‰ÅÆÊÈÉÉÊÆÇɉÄÅÈÃÄÆÄÆÉȉÊÊÇÇÊÏ×ÙÏÉÊÇÈÈÆÇÈÈÆÉÄÆÆÈƉÅÅÈËÉÇÈÇÇȈÆÇÈËËÆÆÅƹÄÄÆÉÊÉÈËÇÉÇÇž¹¹¿¼º»¸µ³´¶·´´º¾ÅËÎÖ×Úßåèéêéêéêêëëíìîíìííëêêë�ŒŸŸžžŸœŸ Ÿ žœš™››—”––››•˜š™¯œœŸž›œšš›ššœ››œžœ˜šœœž—šœžž¡žžŸŸ ¡ŸŸœŸŸž¢¤¥¦§«®­¬«ªª©§§¦¥¦¤‹¥§¥¥¢¥¤£¦¥£¤ˆ¢£¤¢¢£¤¥£ž¤£”63C30A?<7:?Urw{~‚ƒ¡£¥¤§£¤¦§¦‹¥¦¦¢¡££¤¤¢¤¦¡¥§££§¦¦ ¢¤¡¡¢ £¥¤¤¥¦¥£¤¦¬²²«¦¦¥¤¦¥¦¤£¤¤¢¥ ¢¢¤¢¢¡¡£¡¡¤¦¤££¢£¤¥¥¢¡££¦¥¢¢ ¡¢¡·¢¦¥¦¤¦¢¤££¡™–˜›™˜••“•–—””›¢¨©°³µ¹ÂÃÂÃÁÅÅÆÄÄÇÈÊËËÉÉÆÆËÉÆ�»ˆ‰†ˆˆ…ˆˆ‰Šˆ‰††…‡‚‚ƒ‚ƒ…ƒ{|}…ƒ{€ƒ|„‡†‚‚€€‚ƒ„…€„……~„‡†…~€ƒƒ…†á‰„†‡…ˆ‰‡†€ƒ„†Š‡†‰ŠŠŒ“––”‘ŽŒ‹‰†Š‹Š‰ˆˆ‹ŽŒ‹‡‹ˆˆŽ‹‡ˆ‹‰‰ŠŒ‡‰‹‹Œ‰†‰‰}%-!$ 1MSW\`[d‚‰Œˆ†‰Œ‹”Žˆ‡‰ˆŠŠˆˆ‹‹Œ‹Š†‹‹‹ˆ•†ˆ‡„‹‹‰ŠŒ‰‡Š‰œ˜ˆ‰ˆ‡ˆ¬‹Œˆˆ†‡‹‡†…ˆ‰ˆƒ…„‚‡‰‰†…„†…†‡Šˆ……‰‡‡ƒ……††ƒƒ…‡Œ³‰ŠˆŠ‡ˆˆ|z|€}{{xy}zy€€ƒ‰Œ“•˜¢¥©©ª¨£¤¨«©­ª­¯¯°¯¬¬ª¯�Ú¾½¼¾¼»½¾¼º¸»¶··´°¸º¸¹¶¸¼»»¼¸¹¹¸¹µ²¸»¹»¼»¼»¼½º¹¼º¼¼À¾º½º¸¶»¼¼¾»½¼¿Ã¿ÀÁÁ¿ÃÀ¾¿Á¾ÀþÂÊÊÉÐÎÐÎÌÎËãÉÍÈÃÄÅÂÆÈÂÁÄÆÇÄÅÄÂÇÅÂÅÅÇÆÉÆÈÅÆÆÅÃÄÇÆÃÄÄÅÆÆÅÃÊ„HOROciaTZaz—šœšŸ¤³ÁÅÅÆÆÄÄÆÇÆÈÉÇÇÉÈÈÆÇÈÉÉÈÇÆÈÊÉËÅÇÆÈÇÇȾÅÈÆÄÈÉÊÅÇÇÉÃÈäóôôîêÝÏÅÉÇÈÉÆÆÈÇÈÇÈÇÆÆÈÉÈÈÉÇÈÇÉÊÊËÈÇÇÅÅÆÆÂÇÅÈÌÆÂ½¤ÁÅÉËÈËÌÎÑÔÒÔÍÊÉÇÇÅŸ©¡ ¨¯¯´µÁÌÖàäèëíé“èééìíììîíëëêìïîïðííðñ�þŸŸžž›Ÿžœš™™š—“šœšš˜š›œ™™š™™—•™œ™š›œ››œœšœšœœœ™›™™˜›š›››¢ŸŸ  ž¢ŸžŸžŸ¢¡¨¨¦¬ª¬ª©©§¨¨¥¨¥¡££¡¤¦¡¡£¥¤¢¤£¢¥¤¡¤¤¥¥¦¤¦¤¥¥£¢ƒ¤¦¤£ ¤¢£¢©l5588FE?16>[y}}{€Žž£¤¥¤¡ £¥ƒ¦¥¥¦‰£¤¥¦¥¥£¢¥¦…£¢¢¥£¤­¡¤£¡¤¥§¢¤£¥¡¬ÁÎÏÏÈÆ½­¡¤¢¥¥¢¡£¤¥£¤£¢£¥¦¤£¥¥££¥¦£œ¢£¢¡Ÿ£¡¤§¡ž™˜›ž£¥§¥¦¨©«®¬®ª¥¤©£¢—‹‚‚‰‘–˜¥¬µ½¿ÁÄÈÄÂÈÄÆÅÆËÊÊÆÆÇÈÉÉÌÍÎÎÏÐÏ�‚ˆˆ…þ„†‰ˆ…ƒ‡ƒ‚‚{…ƒƒ‚„ƒ„…€~}}€‚}€ƒ…ƒ‚€„‚ƒ‚…€}ƒ‚~‚……‚ƒƒ‰†…‡ˆ…Š…„…ˆ‡‡ˆƒ„‹“ŽŽ‹†‡†…ˆ‹ƒ‡ˆŠ†…ˆŠŠ‹‰‡‡Š‰‰ŒŠ‰ŠŒ‹‰‡Š‹Š•‰ŠŠˆ‹ˆŽP #&# 6TWZ–Uc€ˆŠŒ‰‡…‡‹‰Œ‹Œ‹†‰†ˆ†ˆ‹Œ‡³‹‰‰‹‰‡ˆ‹ˆˆ†ˆŠ‡‰Š‹‡Ž®¾ÃÀ³®¡Ž„‡†ŠŒ‰ˆˆ†‡‡ˆˆ†ˆ‡ˆ‡†‰ˆ…†‰ˆË‡†‡ƒ††ƒ„„…‰ƒ€z|}€…†Œ‹•‘‘ŒŠˆˆ‡‡xlbfktu{}„’–Ÿ£¦©­£¤¥£¦¦ª©§¨¬«©¨¨«°°³´³¯±´�—¸¼»½¼º¹¹¼¼¹»³¸µ¹µµ¶¶º¸·¸··»¼½·º·¹¹²¨¬°³´°±·´¸¸»½¹·¹½¼»¦º·¼½º¼¿ÁÁÂÀ¼ÁÁÀÃÂÁÃÄÌÜåìçáØÊÉÉÄÅÅÃÄÿÅÄÏÃÄÇÄÆÅÄÆÅÄÅÂÅÂÄÅÄÆÄÈÆÈÇÆÅÄÅÆÇÄÃÄÆÅÄÆÄÃÅÅ£‘``jh_N[fz—š—˜œž­ÃÄÈÇľÆÇÆÈÆÈÇÈÅÈÈÇÆÆÈ›ÇÅÆÆÉËÈÈÉÇÈÈÉÈÇÇËÊÊÉÊÉÌÉÌÞñôö‹õëÜÑÅÆÇÊÈÇÉÆÉ…ÈÊÊÇÉÇ’ÈÉÇÇÆÉÈÅÇÅÅÁÂŽÀÄÊÉ™ÌËÍÏ×ÓÎÐÔÔÒÖÒØÚÝרÏÇÊÑÞæïñ˜ððòïíëêêëëéëìííïîïîïññòïïð�šœœ™›žšœ–›™š˜Æšš™š˜™š™›žžš›™šš”‹‘”—’”™–™™›™—˜œœ›šœ›—œšžŸ  Ÿœ  Ÿ¡  ££©·¾Å¿¹²§¦¦¡£¡‚ž£¡‡ ¢£¡¤£¢£„¤¡£¢£¾¤£¦¤¥¦¥¤£¤¥¥¢££¥£¡££¢¦¦ŽyLBJF:*7AXxzxz|zˆ ¤¨¦¤¢¤¥¤¦¥¦¤¥¢¦¦¥¤£¥‹£¢£¢¦§£¤¥£¤¥„£¤§¨¦˜¥§§ª»ÔÔÕÕÖÔÔØÕÉ·­£¢£¥¤¤¥£¤¥¤¤£¦§£¤¡¢¥¤£¢£¡¥¤¢£  žŸ¡š ¥‚¤¥¨¡«°­¨ª®®¬°­²´¶±´¬§ª²ÂÇÌÎÎÐÏÍÏÎÎÍÊÊÆÇ‹ÄÊÊÎÌËÊÍÒÒÓÐ�à„‡†…†ˆ„…‡†‚„…ƒƒ€‚†„€}ƒ…†„€ƒ€zqrxz}yx}‚‚ƒ„‚}€„ƒ‚„‚„‚‚„††ˆ……‡ˆˆ‡‡†‰‹Šœ¦²©¥š‹Š‰‰ˆˆŒŠ„Ї‰‰‡‹‹Œˆ‡‡‰‰Š‹Š‰ÁŠ‹ŽŒ‹ˆŠ‹ŠŒ‹Œˆ‰‡‡‹Œzd0+*$$7VXWXWO\‚‹Ž‹Š„Œ‹Œ‘ŒŒ‰ŒŒŽŒŽŽŒ‡‡ˆÉ‰ˆˆŒ‰‹Šˆ†‰Ž‰‹ŒŒŒ‘¬ÆÈÈÊÊÇÇÊȸ¥˜Š†‰Š‰…‡‡‰Š‰‰Š‰‹Š†…„…‡‹‰…ˆˆ‰‰…†ƒ„‚ƒ…~…‹¸ŠŽ”‘“‘—’˜–›‘™‘—œ¨·Áº´³¶³³²®±°°ª§¦¥¤¥©ª¨®­¬®®¯²³®§ª­�Ü·¹¹½»ºµ³¶¸ºº¶·¸¹»¸¸¼¾»¼·¸·¹¸¼»½¹½¼¼½¾¹¸·¶µ¹·´¶º¸·º¶±¼»½¸º½¼¿¾½¼½½À¿¿¾¾ÂÃÇÈÍÊÏÈÌÌËÔÙÙÐÇÆÁ¿ÂÁÁÄþÃÃÄÂÂÃÂÇÂÃÇÁÃÅÆÆÅÄÇÆÅÅÈÅÆÊÆÃÀÄÇÇÃÄÂÄËÈÊÉËÇÉÐÑ¿‹zeUCY_YƒŒ–œž£¸ÙßàÜàßÚääàâàÜÐÓØÚÚÔÒÓÔÐÌÈÇÅÃÄÄÀÁ¿ÀÂÆÅÉÊËËÈÇÊÉÊÍÞéíôôõõôõöõõööóäÕÂÄÇɃÈÉËÉŠÆÈÆÇÊÊÈÉÉÊÉÈÈÅÿ¸¿ÄÆÄÈËÌÊËÍÇÚçáÔÔÒÑÌÊÌÍÏΈÑÚáéíññòó›ñòóôòôôóðïííêééìíñôõõôóñïîëîñ�¢š›šžœœ—•™šœœ™š›š›ššœžš™˜ššœŸ›žšš˜—–—›š——š™™š˜’›œ™šŸžœžŸŸž¢¢¦¦¨¦«¦ªª¨°³³«¤¢Ÿœ ŸŸ¡¢¢¡ ¡ä¢¡¡¥¡¢¤ ¢¢¤¥¥£¥¥¤¤¦£¤¨¥¢ ¢¦¥¡¢¡¤¨¦©§©¨ª°¯¢lYD5%6><bjs{|}‘´½¿¼¾½¸¾À¼¾½º®²µ¸·³°°³®¬¦§¤£¢£žŸž £¢¤¦§§¦¤¦¥©»ÆËÓ×Ö×ÖÕÓ×ÕÖÓÏÀ±¡¡£¥¤¦¥¥¦¥¤¤¢¤££¥¤¤¥Ÿ¤¤¥¥¦¡Ÿœ–œ¡¤ ¤¦§¥¦§£³¿¸¯¬««§§¨¨ª†®·½ÄÈÍÏŸÎÎÑÑÏÎÑÏÒÍÏÑÏÍÉÈÅÆÅÇÊÍÒÏÔÔÒÑÏÎËÍÐ�œƒ‡…‡……€~‚„„ƒƒ„…ƒ†ƒƒ‡Š‡…€|~ƒƒ†þ‚…†„…†„||ƒƒ}}‚„{††…}€ˆ†…†„„ˆ‰ƒ„ƒ…‰Š‰‹”ŽŒ—˜š“Ž‹……ˆ†…Љˆˆ†‰ˆ‡ˆ†‡ŒŠŠŒ†‡ˆ‹‹‹‹ˆˆŒŠŽ‹ˆ‡Š‰†ˆ‰“ŒŽ‰ŽŽ‘™˜ŽP9* BIRVVRdÆ¢³²²¶µ®³¯±°¬² ¥¢£œœŸ›”ŠŽŒˆ„‡ƒ†ƒƒ†‡‡…ŠŽŠŠ‰Š“¦µ¿ÆÉÊËÇÈÇÊÇÉÊȳ›‡†‰‡‡Š‹Ø‰ŠŠˆŠ†„‡‡…ˆ‹‹†ˆŠˆˆ……{ƒ†‰‡‹‹‹Žˆš¨žŒ’‰ŠˆŽŒŠ›§µ¸¾¾½·¹¸´µ´²´´±µ´¸³¬ª§£¤¦ª«³´¶¶³²®«¥¡©®�ݶ³¶´¶»¸¸»¼½¸º¹·¸½º¼¹º·»¼¼»º»¹¹¼¹··¼º¿º¶¸¼¸¸º»¸º´·º¶´»½½·½¾¾»¼½ÂÄÈËÈÍÑ×ÎÆÇÇËÌÄÃÄÁÁÀ¿¾ÀÁÀ¿ÀÀÃÃÂĽÁÄÆÁÂÅÄÆÄÃÃÂÂÃÅÆÄÅÆÄÅÇÈÆÊÉÇÇÊÔÑÐÒÙßäêéèæâãéììö£šŸ¬°ÀËĺ¶²¯·Ëõµöõøõôôòòô÷ôôñôôõ÷÷ø÷ôöõòïíèîîëéæäæßÛÝÚÙØØäððóôõ÷õöõôôõ¢öùôãÕÐÇÉËÉÊÇÉÉÆÇÄÈÉÆÉÈÇÉÆÂÅÃÁÇÈËÈÌɪÊËËÈÇÎÊÓäÞÞÖØØÝÕÒÕÔÜãêñóòïðòñîñòðóóðïîðïðóñóóôööõöõôóðîïðóôõ�Çš–——˜›™œœž›œ›ššœ›œ›œšœœ›œ››œ›™š›ž›—™™š›œ™›—™œ˜–›œ˜›Ÿœ›œ¡¤¦©¦«®´­¥‘¨©¢¢£  ŸžžŸ ŸŸ ¡Œ¢  ¢¤ ¢¥££¢¢¡¤þ£¤£¤¦¦¥§¨¦¥¨°¯®¯´¹¿ÄÄÿ½ÁÆÈÈÓ…{|}Љ𤛒Œ‰ˆ ÑÕÖØÙÔÕÔÕÖ×ÔÔÓÒÒÌÑÓÕ×Ö×ÖÑÒÒÍÌÇÂÉÊÆÄÂÁÁ¼¸¹µ¶´µ¿ÊËÓÖÕÔÖÓÖÙÕÖÖÙÖÕÕÖο°¬¤¥¦¤¦¤¥¥¢£¡¥¥¡Ž¤££¤¡ž¡¡Ÿ££¥¥¨¥˜¦§¤£§¥­¾·¶¯±±¶¯­¯®¶¾ÇÐÎÐÍ¡ÒÍÊÌËÍÍÎÊÉÍÏËÑÒÒÑÐÐÏÓÐÕÕ××ÔÔÓÒÏÐÑÖ�Ÿ‚ƒ„‚‚††ˆ‚„…„„††…†…€„…ƒ„‚€‚€„µ€‚…}‚ƒ€‚…ƒ„~„ƒ…‚}€†ˆƒƒ‚‡Ž‘•›‘Œ‰ŽŠ‰‰ƒ†„‚ƒƒ†„…¤†‡‰ˆ‡†‡‰‹……‡‡‹ˆˆ‡…‡†ŠŠ‹Š‹Š…‰Œ‰ŽŽ–“þ›¢ª¶¶±§§¯µ¸¸Èf\\]jkywmf_]X^pÁÏÍÍÐÒÓÏÉÎÊËÊÍËÆ»ÃÆÉÎÌÏÎÆÉÆ¿¹´¯¼¸¶°¯ªª§¢¡™šŸ¬ººÆÈÉÊËÆÇÈÉÈÇÄÆÇÉËÅ©˜ˆ‰ŒŠ‰‡‹Š††ƒ†‡„†…‰‹…€…€‚ˆ†ˆˆ‰Š¿Š‰ˆŒ‡‡ŒˆŸ™™”—š’‘š¡ª¹¼º°´¹¶´°°¬°²³®ª¬«¬®¯°¯¬¬¯±´»¸·´±¬©©ª§¬´¸¼�…¸·²³¶¹»¼¸¸¹º¸·»¹»ºº¸¸¼¾ºº»¶µ·³·º¸¹º·¸»º¸¹¶µ»º¶¹º»¿¸·¼¿ÂÆËÏÑÑÓÕÑÎÍÉÏ¿ÀÁÂû¿½¿¾¿º¾ÃÁÁÃÁ†ÂÁÃÃÄÄÃÀÇÂÅÅÃÅÁÃÅÅÈÉÊÑÒÑÓÎØØÒÓÖÕâèåâäçñòñòïðìîëéð†wz„–£¹Â¼°¯ª¨©»êîîííïñïñ•òððôõòóóôôóñôõõôõôõòõöõöôõôŠõõööõöõöõöõÑóõõôõóïãÖÊÉÉÈÉÉÆËËÉÉÇÈÆÂ»´¼ÅÇÉËÊÈÌÊÈËËÈÉÆÃÀÀÂÆÊÏÞææÚßâãéêðòòóõôòñðòïññîîïìíìíïîðñóòôóôôóóôôööõõöôõö�œ™”•™œœšœššœš˜›‡œœšš››Ã™—š–šš™™š™šœœ™š™—œ›˜›œ›ž™˜ž¡¥©ª¬­¯±®«ª¨­£ŸžŸ¡¢œžžŸ›¢ Ÿ ŸŸ  ¢ ¡Ÿ¡  ¤¡££¢¢¡¢¥¥¦§§­®¯±«µ¶²±²±½Å¾ÀÂÍ̪ÉÊÈÊÈÅËhX[ex‘—“ŠŠ†ƒ“ÆËÉÈÎÈÍÊÌÐÔÒÎËÏÒÎÐÒÑÒ‚ÔÔÓžÕÓÎÔÖÓÕÕØÕÔÔÕÖÒÒÕÒÑÓÕ×ÖÓÕÔÔÖÓÓÔÑÏÐÌɼ±§£¥¥¦¥¢¦§¦¥¡¢¡ž˜’™¡¤¥¦¦¤§¥¤¦¦£¥¢ œž¢¦©´½½³º¼½ÃÄÈÏÒÓÐÔÐÏÍÏÌÉÊÊÉÉÆÇÉËÌÊÍÑÒÒÓÑÔÓÓÔÔרÚÚÜÛÝÝÙ�þ„„~~„†…‚…‡†ˆ…ƒ„…„†ƒ‡„…‚€~‚€€{€ƒ‚‚€……„†…‡ƒƒ‹Ž‘’“•š›”‘‘’‡„‚…†ˆ„„‚†„€ƒ…†…ˆ……ˆ‰‹ˆ‡„‰ˆˆ‡…‡…Љ†‡†‡ˆ‹ŽŽ–—‘–’šŸš›œ›£Ï±°©¬­¾ÃÂÁ·¼º»¹³¼N@AFX`ihga_YSSe©¾¹·¿ÁÁ¾¼½ÀÆÁ½ÇĽÀÅÅÇÆÅÊËÈÆÅÉÉÅÏÍËËÉËÉÆÆÊÁÂÇÌÈÃÃÇîÉÉÈÅÆÇÅÇÇÅÄÂÄŽ·¨—Љ‡‹‹‡Œ‹‰‰‡†ƒƒ}u{††‹Œ‰‡Š‹‡ˆŒ†‡‡ƒ€~€†‹˜¢¡•™Ÿ¢¦°µ¶¸¹¸±³°´¯®­¥¨ª«¨¤¥§§©ª«®¯­®¯³±±¯°°±³µ»¿ÄÄ¿À�™¹º³¹º°´¹ºº¹ºº¼»¸¸·¶´´¸¼»½¼Œº¹»º¹¹¶¹¹·´¶»œ¸´¹½»¹½¿ÀÅÌÐÏÊÊÌÍÑËÑÇÄÃÄÁÁ¾¾À¶Á¿ÂÂÀÁ¿ÁÂÀÁÃÂÆÅÀÀÂÁÃ¿ÄÆÂÁÇÈÇÄÈÒÔÚÛßåçàáØâäßèéëëìæéîòó³õïîèâèãÝÚÛØ …ystnw†“—žŸ¡¨¸ËÌÆÄÄÅÌÌÑÓÕ×ÞáââåìïïðôõòïôŠóïòóôõöôõ÷õ‚ôöõŠöõöõööõööõô‚óôó¹ñðññòñíßÒËÈÈÍÍÈÈÇÂÀÁÀÃÊÊÈÍÉÍÌÉËÇÊËÌÌÏÏÍÎÎÐÍÎÐ×ÝâãâêîîïóôõôóóñïëéêëìííññòóòŒñðòö÷÷úúùø÷öôõö�š››•šœ“˜››œ›šœœ›™™˜˜––˜›œœ›­š™›˜™š™——››™–›žœœž  ¥©¬«§¨©ª¬©­¥£¢¢ŸŸž žŸ¡ ªž ¡Ÿ¡ŸŸ Ÿ£¤ Ÿ¡Ÿ  £ Ÿ¥¦¥¢¥¯²··»¿Àºº³½Â¹ÃÄǺÂÅÊÍÌÌÏÐÉÇÁ»Â¾ºµ¶´ƒj]TUNVerw€€„‘§©¢  ¢¨¨­­°³¹º¼¼ÀÅÆÊËÌÎËÇÏ—ÐÌÎÐÓÐÒÒÔÕÖÙ×ÚÔÕÖ×ÔÕÔÙÙÔœÓÑÏÐÒÒÑÐÏÏÍËÌÌÊËʺ­¦¥¥§§¥¤£žœºŸ¤¥¥¨¥§§¥¦¢¤¦¨§©©§¨¨©§¨©®´¹»½ÇÉÊÌËÑÐÐÓÓÒÒÐÏÎËÅÃÄÆÆÈËÎÐÏÐÑÑÐŽÏÔÙÛÚÝÛßÞÞßÞÝÞàÞ�ƒ…‚ˆ‚„ˆƒ„‡ˆ~{}€„†…€„†„„”~z|„€€~„‡††ˆ‰‰”˜”Ž‘—••ŒŠ…‡……ƒ„†„„‡‡‰‡‡†‰†„‡þ†……‡Šˆ…†‡†ƒˆˆ†…‹ŒŒˆ‰”™Ÿ¦¬¬¢¤œ¨®¡¯³¸¹¹¯°º¾¼À¿Á»·¯¥®¨¤  ›iQD:701;ITa\U^j…Œ‡ƒ…†ŽŽ”–œ¢¤¨¤¨®µ¸¹½Á¼¶ÀÂÀÁ»ÃÄÆÅÉÇÏÊÈÉÌÌËÌÏÎÇÆÆÉÆÊÉÈÆ‰ÁÃÁÅÆÂÁÀÀ¾ºÀ½¹º¦’‰‰Š‹Œˆ‡„€‚ŒŠ‹‹Ž‹†‡…††ŒˆŒŠ‰‹Š†ˆ‹˜œ›¡¨¨­³¶¸´·´³±œ­©¡œž ¥¥¢¦§¦©¨¥¤¥¤ª©«³º¸ÀÂÂÄÆ‚ÇÇÆÁ�£··¯¬²´¶·¹¶·µººµ´²´°¯´µ¸»·¸»¼»¸·¹¹¼·¸­¹¹¼¾½»¾ÀÅÅÄÌÓÌÊÉÆÃÃÁÄÆÈÂÅÄÄÈÐÈÄÆÂÅÁ¿ÂÃÁÀÁÀÀ¿À™ÂÁÂÂÃÀÂÄÃÆÃÇÊÍÒÛÛÒÏ×èïéæçèˆàâìêëìéîð‡íëèåâÙÔ͘ÎÌÉÆÈÈÊŸ|~„…’––˜¡ Ÿ¤±ÀÁÀ´ÅÁÆÉÇÇÃÇÈÅÆÅÆÈÉÉÎÑÛ×ßäçëêìïðïíññóôöö÷öõõôöõöôõööõöõõô§òñóôôòòððîóòóïÞÎÉÉÃÈËÉËËÎÍÌËÌÏÏÎËËÊÏÎÎÐѲÓÕÛÚÜáåäçêíîððïðòòõóðïñóïîíëééìðñóòòñðîíðóö÷øøúùúúù…÷öõöõöõ�ž™š’‘–˜š››˜™—››—™––’‘•–™œšš›œœš™Ú›™˜š™›š žŸ ¥¦¤ª¯©¨¦¥££¡£¤¦¢£¤¤§­¦¢£¡¥¡Ÿ¡¡¢ŸŸ Ÿ žŸ žŸžŸ¡¢Ÿ ¢¡£¢¥¨ª®¶µ®¬µÂÈÃÀÁÄÄÆ¿½ÉÈÅÆÃÈÊɆÆÃ¾»´°©•§¤¦¦¨ƒuachhrwwzƒ‚‚žŠœ ž¡¦£¢ ¤¥¢¢£¤¦§ª­´°¸»ÀÃÂÃÆÊÆÅËÌÌÓÖÖÕ×ÕÖÔÕÖÔÙØÓƒÔÑÏÐàÎÍÏÐÏÎÎÌËËÑÎËÅ·ª¥¤¡¥¦¤¥¦¨©¨¦§©©¨¦¦¥¨¦©««ªª«®¯µµ´¸¼ºÁÂÅÊÊÌÌÉÊÎÔÐËÌÏÐËÉÉÅÁÃÈÏÏÑÐÐÍÍÊÉÎÐ×ÚÜßáäáàÞáâàÝßÞ�™€ƒ~y€‚„…ƒ‚„}„…ƒ€}~{z{|~…„‚„ƒ…€‚†‰ˆ„†‰Ž“˜’ŽŠ‰ˆþŠ‹ˆ‹•‰Šˆ‹‰…‡‰Œ‰…ƒ…††‰ˆ…†ƒƒ…ˆ†‡ˆ‰Š‰’˜Ÿ•’œ­¹°®®±±°§¨¸¶´´±º»º¸´´©¥¥š”ŽŒ‹ˆ‹Œi]HGIGMQTXebX[h~‚~†ƒ…ˆˆ„ƒˆŠ‡‡ˆ†‰ŠŠ’š– ¦©®þ­°³¸³·¾À½ÅÈËÊËËÍÊÈÇÇÊÈÉÆÄÈÂÿÁ¾¿ÀÀÁÀ½¾½ºÂ¿¸±œŽˆ‰‡ˆ‹‰‹‰ŽŽ‰†…ЇˆŒ‘ŽŽ’š”—›  ¦§¦§ª©­±²²°­««¯¨¤¡žœ›ž¤¦¦¢¤ £¡ž£©°¹ºÀÃÃÂÄÉÆ†ÇÈÆÅÄÁÅÁ�þ¶¸±ªµ¹¹¼»º»¶¹¸±¹µ´µ¶³¸»·¸¹¼¹¼º·¸»³­±·º»¿ÃÊËÆÅÏÐÐÈÁÁ¿ÁÄÁÀ¿ÄÉÍËË×ßÞÕ×ÒÊÄ¿Á¿¾¿ÁÁ½ÀÂÀÁÀÃÂÀÂÁÁÃÁÆÍÎÈÈØÞÝÛãÞåâæëèêàæåííðñòñòíïâèåÛÔΫÈÃÃÅÂÄÄÂÃÅÅÇÆÆÈÌŸƒˆŠŠ”——œ¦¢¢£³ÀÃÅÆÂÁ¿ÅÈÈÆÄÆ¥ÇÇÃÇÇÂÅÆÈÈÅÆÇÊÐÊÌÎËÎßæòòõõööõõööõöô÷÷ö‹õöõõóðòóóõóôóóõóðæáãÝÓÌÎÌÍÌÑÍÐÏÑÏÑÑÐÔÒÐÒÒÑÖÞãçèééìëìïîðï›îìííëíììêííìëíðñòóòóñðñóõ÷øùø†úùøù÷÷ö�þ𛕙››Ÿ›œ˜›š”›™–—™•š›˜š›œšœ›š˜›•’™œ £©ª§¦­¬­¨  ž £¢¡ ¤©«©¨±º»±±­§¡Ÿ¡¡Ÿžž¡Ÿ¡Ÿ Ÿ£¡  ŸŸ¡ ¥ª«¦¦²¹¹¶º·½»¿ÇÄÄ»ÁÀÉÉÌÏËÌÍÇÈ»À¾´®ª“¥  ¤¡ ¡Ÿ ¢¤¦¥¥¦©…wjoàvzz~‡„ƒ‚ž  £ž›¢¤¤¢ ££¡¢£¡££ ¢¢£¤¢¡¢¥©£¦¨¥©·¿ÊÐÓÓÕ×ÖÖÔÓ×ÔÕ×ÓÓ×ÕÒÑÒÎÍÉÊÎÍÐÏÏÒÐÑÔÓÊÆ¾º½¸®©¨§§©¨¨¬© ª©«ªª®©ª¬¬©°¸»ÀÀÄÁÇÇÆËÅÅÊÉÈÉÇÆÈÇÈ¢ÉÉÇÇÈÉËÎÓÐÑÍËÍÐÔØÜÚÝààßßââáàáâáßßÝÜ�•‚†€y‚…†Š†ƒ‡€…†~„‚~{…ƒÅ„……‚‚vw„„‹Œ’–Œ”•—‘‰ˆ‡ˆ‰ˆˆŒ’‘’ž¤ž–™˜Žˆ‡‰‰†„‡Œ‡‚„†…ˆŒ‰‡„…„‡ˆŽ“‘Žœ£þ¦¡§¥ª·¯±¦°­¸»À¾º»¼··¦«¤™‘ˆ€„‡…ƒ†……††‰ŠŒk`STQNVY\`hdaZj„…ˆ€€„‡†ƒ€‡‰††ˆ…‡ˆ…‡……‡……ƒ‡‡‡Š‡Ž ªº¿ÄÇÇÉÅÌÊÊÉÉÇÈÈÇÄÇÄÃÀ¾¼¹º½»¾ÁÀÄ­ÅÄ¿·³¥¤©¦–ŽŽŒˆŽ‘“‘Œ‰Ž‹‹ŽˆŠ–šŸ¥¦£¥§¥¦¨ªª§¤¢§¦¡££¡£¦¤Ÿ ¡£¢¡¥¦¥  ¦­²¶»ÂÀÁ‰ÃÄÂÆÇÄÁ½¼»º�­¸¹º¸±µ¹¸¶µ··¹·¬³µµ²··´µ¶¸·¸¶»»¼¸¶»ÅÉÎÈÎÊÁÄÅŽÓ½ÀÀÅÉÇÍÌËÑÑÌÌËÉÅÅ¿¿Á¢Â¾Â»¹¹¸½¾¾¿ÀÂÃÃÂÊÐÏÔÚåèäãÛÞâãÙÙÛØÞãžïìîæëîîæÚÛÚÑÐÃÉÀÁÅžÂÄÃÅÄÂÀÂÅÅÆµÈ•Ž’ŽŠ–Ÿ§¢ ¦µ¿ÀÂÆÄÀ½¿ÂÅÈÂÆÁÄÃÅÃÉÇÈÉÈÈÇÈÌÉÇÉÆÎÓÙéìñõ ôôööõööôôõöö÷ööóôõôööõööõôóôòóóñõ´ôôöôìÞÔÎÑÓÐÑÒÑÓÕÓÒÔÕÖØÚáâäæëðïììîîìíîïððîììíëííìíïîñóðï•ðòõ÷øúùùøúúùúùùøùûúù÷öôõ�Í›œœ›–™œ››šš™›š–™—”™™—˜˜š™š˜œ››™œ¤§«¦ª©¡¢¤£ž¢¢£Ÿ¡ ¤¨¥«¬«­®«ª§¨£¥Ÿž  ¡¢ž£œš™™¹žž ¡£¡§«ª®¶¿Â¿¾µ¶¼½´²µ²¸¾ÀÀÉËËÂÈÊɵºµ®¬¡§  ££ ¢¡¤¢ Ÿž¡£¥Ï¨‚{vvxrosz€‰„…‘œžŸ£¡›žŸ¡¤Ÿ£Ÿ¡Ÿ¢ ¥££¥¤¤£¥§¤£¥£©­³ÂÄÊÑÔÕÐÕÖÔÓÖÔÕÕÓÔÓÔÓÒÍÌÒÎÏÏÑÎÑ’ÍÑÐÍÒÓÒÏÌËÐÔÑÆ¹¯©¬«Ê¬«¬¯««¬®±²´»¼»½ÄÇÈÇÇÉÉÈÊÊÇÈËÈÇÈÊÇÉÈÉÊËÌÌÏÐÏÈÇÈÉÊÌÏÔ×ÚÝÜßáÞßáãààáãàâáàÞÙÜØÙÚØ�þ…‡‰‰„‡†„…‚……w‚€{‚€}€„€……‡…€„Œ‹’‘”ˆˆŒ‹„ŠŠ‹ˆŠŠ“•–•˜——“ˆ‡…‚…ˆŠŠˆ‹„‚„„…‡„‡†‡‡Œ‘˜¢±´ªª£¡¥¦œ˜›™¡ª­¯¹½¿°·¼´©š¡œ”’‡Šƒ†‡²‚…†‡†„ƒƒˆ…ˆŽŒieb\ZTRT\cjd`_l‚„ˆ†‚„‡††…„†…‹‰‡ÛˆŠ‡„‰‰Ž”œ°°¹ÅÇÇÁÃÊÆÇÈËÈÅÂÄÅÅÂÀ»¼Á¼Á޾¼¾¿¼¿·ºº¿ÂÀ¼ºÁÍÆº¢”ŒŒ‘’’‘ŽŠŒŽ‘ššŸ ¥­«¦§¦¦¥¦¦©©§¥£‚¦¡£…¤§§¥¤•› ¦¨¬´¹¿ÃÅÃÇÄÃÁ¿ÂÄþ½„»ºµµ¶³�͵¶·¶¸¼¸»¶¶·³µ³²µ¶²¶µ³¶·´µ´¼¾ÂÈÍÌÐÐÂļ¿¾¼¾¼½¹ÀÅÌÑÏÌÌÑÉÊÄÅÇÁ½¿¾»º¼¾À¿Àµ¿¾º»½¾¿Á¿ÀÀÃÄÃÀÉÄÆÏÓÖÙàéìãáàÖÖÝÞãéïòõõîñìáÐÅÉÃÃÁÂÁÄÁÄƈÃÃÂÁ½¼½ÂÄ¥ÁÁÃÁœž•˜™“‰›Ÿ œ¢¦´¿¾ÁÃÂÃÅÀÂÃÅÄÉÅÃÆÉÆÈ¢ÇÈÇÉÏØÝáäìòôóóõöõöõôõõôõôôõöôööõïïô«òîðììññóòóöõõö÷ööõóööôëàÕÔÓÔÓÖØÔØÝßåéêêëìêëíƒìëëî‡ïïðñòòñó‰ôñîîììïôöù„ûùúøù‡úúøùøø÷öôôõ�™š„›žœžšþ•˜•”˜˜”˜—•˜š—˜•Ÿ¡¦««­®¢¡œ žœž› ¤ª±®ª©®¨¨¦¦¥¡Ÿ ž™œžŸŸ ¡¡žž›œœŸŸž Ÿ¡ ¢Ÿ¦¢¤«°²µºÀûºº²±¸¸½ÄÊÌÐÓÊËÈ»­£¦¤¢ ¡Ÿ£¡¡£¤¤¡¡ ¡œŸ¢¡¢›¡ ¢¡‚{}}vlq}ƒ…‘  Ÿ¡¢Ÿ †¤¢ £¥¢¤¿¥¢£¤©²·¹¾ÇÌÎÌÍÑÒÓÓÔÔÓÒÒÓÕÓÓÔÒÔÒÑÉÈÍÍÏËÉÇÃÆÎËÑÑÐÓØ×ÖÕÔÓ×Õ×ÑÐĺ¯®­™¯²®²µ¶¿ÄÆÇÈÈÅÄÆÇÈÊÉÆÆÇÉÉÊÉ‚ÌÎÏžÐÐÑÐÐÌÉÈÄÅÊÐÔÖÞàâàßßááàáããáàáà߆àÝÚÙØÚÜÚ�þ„„†‡††‰„‡„„€€}}€}‚€‚~z„‡Š‘•”•—…†ƒ…‡„……‡ƒ‰“š˜’‘˜Ž’‘މ‰ˆ‡…}††„ˆ‹ˆ…„ƒ††ƒ‡‡„‡„‡…†ƒ‹†‹”œ¡¤«²¤ ¡—•¡Ÿ¨³»ÃÀĽ½µ¥‘…Š……ƒ……‰…†‰ŠŠŒƒ……„€ƒ‰†ž‰ˆˆgleb_WNQ]`c_^^j€‚„…†…†€ƒ…€†ˆˆ‰†Š‹ˆ……‡×ˆŽ”œ§§³½¿¼ºÅÉÅÄÆÆÃÆÃÅÇÿÁÂÁÂÀ³¶½½Á¼±µ¬®´¶º¸ÁÃÆÊÆÃÃÆÍÈÈ¿À±¡”“‘Œ•Œ’”–šŸ ¢£¥¡¢¤¦¦§¥¢¤¡¤¦¥­¦§¦¨«¨¨ª¨§¦ ˜••˜£±··ºÅ¾ÁÄÃÁÅÄÅÁÀÂÁ¿¾º¹¶·¹¸´´¸µ�ȹ¸¾»»··´¹´·¸¸µ°®±³·»º¼ÀÄÇÖÏÄÄ¿¾¼½¼¹¹½½¼º¿ÂÄÊÐÐÌÏÇÈÁÁ¼´½¼½½¾¹º¼½¾½Àþ½¿À¿¶¿Á¿ÁÀÀ½ÀÃÈÄÅÂÁÆÄ¿ÁÆÅÈÒÜæîðéçîêâÚÑÐÇÌÇÄÃÁÂÁ¾ÁÅÅÄÄÃÿÀÃÂÃÀ¿¾»»¼ÃÆÂÃÆ£žš¢¦¦šš¢ £Ÿ¦§´¿¿ÅÃÃÄÃÂÃÅÃÀÃÄÆÇÅÇÄÃÇÈÇÆÍØåëïîôôöõ÷óëõöõ†ôõõööõöõööõôööõðæãëö÷Šööõô÷÷õö÷õ÷—øöðêáÛàäéìíìëëììëîðîîìíì˜îëëìííðñòóöõõôóôóññíïòöøú„ùùúúù‚úúùøùø÷öõ�Š› šš˜œ—š†˜“’’”™œ¯¡¤¦³«¢£  žœšžœ› ¢¤¨­­ª¬¨§  ž—›žœœžŸ žŸþ¡¢¡ŸžŸ¡ŸŸœŸ ¦¢¢Ÿž££Ÿ ¤£¦®¶¾ÅÇÁ¿Äý·­­¥©¦¢¡ŸŸ¡žŸ££¢£Ÿ¡ŸŸ  ¡¡¢žœ™›šŸ¢ ¢¢‡|ƒˆ‡{{„ƒ†……ž¢¡Ÿ¡¡Ÿ¢¢žœŸ ¢¤¢£ Ÿ¢¤££§²¾ÃÅÈÏÍÑÑÒÐÃÏÒÒÑ‚ÒÓÒ¢ÏÐÑÒÕÔÓÑÐÑÏÏÐÒÑǾ½ÃÒÔØÖÓÓÒÔÕÒÐÑÖØÖÒÎÇùµ¸½ÃÃÇÉÅÇÇÈÈÊÌÉÉÈÇÉÉÈÇÅÅÇÉ‘ÎÏÐÕÔÓÒÒÏÎÍÌÆÊÎÔÚ݉ßáãáàáâàßá߉àÝÝÞÞÝÙÙÜÜÙ�þ‡‡‰‡†„‚„}ƒƒ€{yz|‚…„…‰Žš”‰‹Š‰„†……‚…‚‚ˆ‹Ž’––”“‰ˆ‡zƒ‚„„ˆ„ƒ…‡…„‡‰…‡ˆ†‡ˆ‰‹††‡†„ƒ‚††Œ†‡†‚†‰‡‡‰‡Œ“™¥¯°®©³°§Ÿ‘‡Œ‹‡†……ƒ‚ƒ‡‰Š†„ˆ‡ù‡„ƒ„††„~|~ƒ‰ˆ‡‰lgcfifX[c`e`^]kˆ†‚ƒ„‚†ƒ{„†ˆ‡‡†ƒ„„†‡‹™¦­²¶ÂºÂÅÄÀ®ÁÄÄÂÂÿÄÿ¿½¿Á½ÀÁÁ¾¾ÁÅ¿°¦Ÿ«½ÀÃÅÈÄÂÃÄÁºÀÆÇÆÁÄÆ¿´­ž˜›¢©º¥¢ ¢£¢¥¨¤¥£¦¤££¥¢Ÿ¤¤¦¨¬­®«¬¨§©¤ ™›¦°´µ¼¼º½Â¿¿¾¿ÂÁ¿Â¿½»»¸‡¹¹¸ºº¸¶·´�êµ·º¹º¸¸·¶°µ³·²³¹¸ÄÀ¾ÅÇÊÑÊÈÈ»´¹¶º¾ÅÊÅÇÄÅËÇÃÀÁÁ¼¸¼¾»¼»½¾¾½¾¹¸¼½¿À½¿À¾¿ÀÂÀÀÁÿÃÂÀÂÃÂÀÃÃÄÂÃÄÅÁÁÃÅÃÂÇÉÎÐ×ÐÝÙÒÇ÷ÀÁÀÀÃÄÅÁÀÅÂÄÃÀÃÅÁÃÄÂÃÃÂÂÅÀ¼º¸¼¿Ä§§¢¡ª«¦¤£ ¢ ¥§¶ÂÅÄÅÆÆÃÅ•ÈÿÃÈÈÇÇÄÁÆÄÎÛáëïïíðîí„îïÚàíïî¤êìèëîìïìíêíëååèééçæåææåæåæéäèêêëíëêêé îòóòôóóïïîïïìëìíîïíìíìííïíððñòõõö•ôòòîñðòõõ÷øùúùøùøøùøùøùø…ùùøùøù„÷÷õöõô�Åšœ››šœ•™–™••š˜¢ ž¤¦¨®§§¦¡ž˜œ™Ÿ¥ª£¥¤¤©¦£¢¡¡›žŸœž›žš›žž ŸžžŸžŸ ´¡¢ž¢¡Ÿ¡¡ŸŸ¢££¡£¢¤¡ ¢¤¢¡¤¦ª¬±«¶´®¥¢¡ŸžŸžŸ ¢¢  £¡£¢ ¢¢¡ ¡þŸ¡žœ™˜›ž¢Ÿ‹‰‚‹Œ‡†‡„†ƒ…†’Ÿ¢¡£¢£¢£¤¤£ ›Ÿ¤¥£¤¡ž¡¡¨³¸ÁÆÇÄÆÅÄÈÈÆÉ±·ÄÆÄÈÊÉÈÂÂÀÂÆÈÇÅÈÅÈÄ¿¼ÀÁ¿¿À¿Á¿Á¿½¾Â¾ÀÂÄÄÆÆÃÂÁÁÂÈÊÌÍÍÌÐÍËÍËÌÉÈÉÉÊ‚ËÉȦÊÉËÊÌÍÐÑÔ××ÖÕÓÏÍËÌÍÐÒÕØÛÝßÞßßÞÞááàßßÞÝߎàÞßÝÞÞÝÜÝÝÜÚÙØÙ×�؆‰†‚…„ƒ„ƒy}~~‚Šˆ†Œ—‹Ž‰†„‡€††”‹Œ‰‰’Œ‰‡‰†~‡ˆ†…„…„‚€…ƒ‚†„ˆ‹†„ˆ‡ˆ‡ˆŠˆˆ‰„‰ˆ……††„‡Š‡…‰ˆ¨‰‡‰ˆ†ŠŠ‘–“š•Šˆ……€ƒƒ……‡‡„‡Š‡‰ˆ‚†ŠŠˆ„ƒ…„…þ‚~z{‚…„…pmccljdefcd__`o‚†‡†‚ƒ‚„„‡ˆ~‚„…‡†…ƒšžª±²°·±¬¯®²±‘Ÿ­«±³¯°°¬­¨ª­ª±«¬ª²ª¡¢§©¤£¡¢¤¥£¨§¥«§«ª¦«¯«¬­ªª¨®¶´³¸·´°¬ª¨§¤¡¤¥¤¥¤º¢§¥£¤§¤¥¦¨¨©°²¯ª§£Ÿœ¡ ¢©©¯²¶¹µ¶ºº¸»»¾»·¹º¸·¹¸º¸¸¶·µ¹º¶·¸µ°±°�†µµ¸³°¶»ºÃÇÄÄËÇ»¾º½Èû¾¸­¿Â¼ÄÎÏÐËÆ»½À¾½¼½½¾¾½¹½¾À½¼¾º¼¿¾¾¼¾ÀÁÁÀ¾ÁÁÀÁÀ¿À™½Ã½½Á¿¾ÁÁÃÃÄÆÅÅÃÁÆÉÆÆÅÃÄÀÄ‚ÃÃÁ‚ÃÃƪÄÃÄÆÆÇÅÄÅÆÄÄÅÁù¼¿ÃÀÁ½»½»¹§ª¤§§¬«ª¦¢¡Ÿ¡¦¶Ã…ÅÆÄÂÁÆ•ÄÃÆÄÇÆÉÆÅÆÇÉÎÏÏÌÏÊËÍÈÛÇÅÁËËÍÏÊÉÉÈÊÊÌÊÍÍÉÇÉËÇÎÉÊÊÐÎ¥ÐÓÐÒÐÒÕØØÜßÞàÞÜáèëîñóôóóòòïïððïííìîíîï†ððòòôõöõò†õøùúúûú„ûùúøù„øùøùø‰ùúù÷÷õôôóõ�˜™š›—”›žž ž¤¥¥¤©¦œŸœ¦£›𠥡¦¬­¬©¦œž žŸžŸžžŸŸ›žŸ¡žœŸ›žˆŸ ¢¢¡ž¡ ŠŸœ¢ Ÿž¡¡¢¥¦¥£ £¦¤¥¤¢¢ž¢Œ ¡  ŸŸ  ¡¤£¤¢‚¥¤¥£Š ¢ ™šœ¢ŸŸœ”™‹†ˆ‡Œ‹‹‰……€ƒ†” ¢¢£¡¬¥¢¢¡ £¡££¦£¡£¤¦©ª«§ª¥£§¢šŸ›¤£¦©¦¥¤¤¦¥¦¥¨§¤‡¦£§¤¥¦ª©“¬«®ª¬°±±µº¹¸¸¶¹ÀÄÊÑÒ…ÏÊÌÎÌÍËÊ ËÊÉËÏÎÒÔÖÖØØÙ×ÕÑÐÎÍÐ×ÛÞßáààáàáàáà‚ááß…ÝÞÝÞßÞÝÞ„ÚØÖÖÚ�¸ƒ†„}{„†‡‰Œ‹“Ž…„„ŒŒƒ€€‚‡ŽŠ““’‘Žƒ…‡„ˆ‡‡„„†ˆ‡ˆ‹‡ƒˆ…˜†ˆ‡‹Œˆ„Љ‰‡…‡‰‡‡‚Š…„†…ƒ…‡š†‰Ž‹Š‡ˆ‰‹ˆ„…‡‚ˆ‰…„ˆ††„ƒ…††‡Œ†ˆˆ‹‹Š‰‡ˆŠ‹ˆ†þ„~}„ƒ~{~}}oofihihihdb\^apƒ‡ˆ‡†ƒ‚‡……†ƒ…„…ˆ„„…ˆ‰Œ‡Šƒ„ˆƒz~z}yw‚‚ˆ‰…‡ƒ„‡„…„ˆ‰‚€‚ˆ„†„…‡ˆˆ‡ˆŠŠŽ‹Ž’’”–——›—•Ÿ¨«¬¯²³²³´°ª«¬«§¥£¤¾¥£¥¦¥¨¨§§ªª¬¯®«­¬«£ ž¡¦­²·¸»º¸º»¼º¼¼º¸º¸º¶µ³·¶··³¸¶·¸º·¹¶´²°®®´µ�ϲ¯½ËÚçáÏËÍ×ÑÓÆÑů«°·ºÄÅÂÈÇÀÎÌÃÂÀ»À»»½¼¿½¾¼¿¾»¼ºº¿½¿À½½¼»½¾¿¾¿À½¿ÀÀÁÂÂÀÂÁÃÄÿÁ¾¾¿‡¾ÂÄÆÄÄÃĤÃÃÆÄÅÃÃÁÀÿ³¼ÂÄÃÄÂÂÄÅÆÆÄÄÅÂÅÄÃÅÅÄÀÄÂÁŸÀ¾Áö¶¾¿¿±¬¦ª­­¬±©¤ žŸ¨·ÂÃÄÆÂÈÅÄÇÈÆÆÇÆLJÅÅÄÇÈÅÇÆ˜ÄÆÄÇÈÇÄÃÅÇÆÊÈÇÅÅÉÈÉÈÆÊÊÌÊ›ËÌÍÍÎÑÒÑÒÓÓÕÕ×ÚÛÞÞàÞãèíñóïîíï‰îìîííìíîïð‡ññòóôöö÷‰öõõö÷øùúüûúúüúûúûûúúùùúøƒúùúøŠùùø÷öõöõöõõö�­–”žª·ÅÀ®ª«²®¯¥­¥’Ž“˜š¤£¡¦¦ ¬¬¥£¡Ÿ››œ›žŸœŸž›œ‰Ÿž ¡žžŸŒ Ÿž¡¢  ¡¢  ¡£„ž¡žžŸ…ž¡£¤£¤¦£¢¡¡£¡¡¢¡  ¢ž”› ¢¡£¡ £¤¤£¢£¤¡¢¢ ££¢ ¢¡Ÿ¨žœž¡ ¡–—žŸ“ŽˆŒ‹ˆ†ƒ}‡• ¡¢£Ÿ ¢ ¢ ¢¤¢¤£­¢¡¡ ¤¤¢£¢£¢ ¡Ÿ¡¢ ŸžŸ¡¤¤¢¡¢¥¤¤¢¢¦¥§¥¤§¥¤¦¨©©ª«œ¬®¯¯°³´µ·º¹½ÃËÌËÊÍÎÌÊËÎËÈÉÊÈÊ£ÍÍÎÌÌÎÏÎÑÕÖØÚÛÙØ×ÖÖÔÖÖØÛáâàßáâáäãââá–ÞÞßÞãÞÝÞßàßßÝÜÛÚÜÜÛÛÙÝÞÝ�þ}…”¢µ°˜”’–š•‹wpxŒ‰ˆŽˆ–”Š……„…„‚…„ˆ…‡…ƒ„„‚††Š‹ƒ†ƒ„‡‡…ˆˆ‡‡‹‰‡‡†Š‡„†Œ‹‹…Ї……†ƒ‚‡ˆŠŠ‹Š‰ˆ‡…ˆˆ„…†…‡Šƒw‚†‡…†…„‰†‡†‡‰‡‡ˆˆ†ˆŠ‰…®‡…‡…†„|}‚€…wt€„„wplnmkgmfc^X^eo…‡‡…ƒ‚„†„„‡……‡†ê„‚„„ƒ„……‚‚€€ƒ|z}‚„ƒ€…ˆ…‚‚ˆ†…‚‚„†‡†ˆ‹‰Š‰‹ŽŽ”š–™“•” ¦¨±´°ª©§©ª¨ªª¥¨©©¦¤¥§¨©¨¦¦¨©ª®­°¯­©¨©¥¨¨®°µ¾¾¼½¡¾¾¼¼¿¾½¼¹¼ºº¸µ·¼»º¶µµ³´¹¹¶³°²¶¶¸¹º¾�þÖÚáçíèÛÛÔʾ»¹··¸·¾ÏËÇÉËÁ»À¸¾À¸¹¸¸¹»¹»¹º¹¾¸¾¾¼¿»¹»½¿Â¿Â¾À¾¾¿Â¿¾¼¾¿ÂÁÂÀ¿½¾ÂÁÁÀÀ¾¿½»º½¿ÃÁÃÁÃÄÅÃÅÄÁÂÁÅÄÁÅÆÃÄÂÃÅÄÄÁÇÅÆÅÆÄÅÃÆÅ¿ÃÅÅ¿‚ÂÀ¾ÎÀ¿¿½»··¼¿Á¿³®¥¨°±¬°«¨£¡¦µ¿ÀÄÄÃÅÀÇÆÆÈÇÆÄÆÇÆÄÅÄÅÆÄÄÅÆÆÇÄÈÇÇÆÈÈÇÅÅÀÉÈÀÂÇÆÊËÊÌÊÉËÍÂÎÏÑÑÔÔ××ÚÛÜÜÝàäèëïîðñóôöòïïíïðîìåéìîììîîñòôôõööôõõöôôòðòööúùûùúûúúû‹úúùúûùúùùúúùŒúúøùø÷÷øùø÷÷ö�ž´¶ºÁÇĹ·°¨ œ›˜˜š™œª§¤§©¡œ šŸ¡œš·››œš›š™ŸŸžœ›œŸ¢ ¢ž  ŸŸ¡ ŸžŸ  ¡¡ Ÿœž¡¡  ¡¢ž žœ™ž¡ ¢¡¢Ø¡¡ž  ¤£¡£¢ ¡ ¡£¢¢Ÿ¤¢¤¢£¤¤¢££ž¡¢£ž žœœœœ›˜–›ž Ÿ“‡Š‹Žˆ‰„}‚†’ž  Ÿ¢Ÿ£¤¡¤£¢¡¢£¢¡¡Ÿ ¡¡ ¢”£ £¢¢ £¢¡  š¤¤ž¢¤¦§¥ƒ¦¨§¨™§©©««­­°¯±³µ¶µ¸¼ÁÅÉÉÎÎÔÒÏÍÌËÊËÌÊÂÄÈÉÉÈÊÎÎÐÑÓÖØ×ÔÖÕÕÑÑÎÊÍÕÙÜÝÞÚÝáààßàáãâáàááßàááãáààßßâßÞßßÞÝÛÙÚÛÜÞÝÞÝÛßàÝ�䣤ª²µ¯¦¥›ˆ„‡|~‚“‘‰‚‡‡‡„‚‚„ƒ…„}€…€‡†…†ƒ‚‚…ˆŒˆ‰…‰ˆ‡ˆ‹ˆˆ‰‰ŠŠ‡†ˆ‡ƒ„Šˆ‰‹‹Š…‡…€}ƒ‡ˆ‡‹‰ˆ‡‡ˆ††ƒ„„‰‰ˆ˜‡‰…†‡„„‚‰†ˆ‡ˆ‰…‡ˆŠ‚†ˆ‰„„ƒ¢‚€|}|{{y~„‡…xqijonfkcc`Y^`l}‚„‚ƒ……þ„†„„‡‡…ƒƒƒƒ……€‚„„ƒ‚}……ƒ~{‚ƒ~~‚„†‰††…ˆ‡‡†„„‡Š†ˆŒ‹Š‹•––””™ Ÿ¤¦©¯²°±´¸²ª¨¦§ª¨¦Ÿ ¥¨¥¥¢¥§ª°¯¯²¯¨¬¨¦¢ŸžšŸ¨©±³µ´·½º»»¹¼½¼ºº¹ºº¹¸•¹¼º¼º»»½¼»¹µ´²´³´·µ´¹¼¿�ØÞÒÆÊÇÀ¶¸³¹¿Ä¿ÀÉÈÇÀ»¸µ°¶´·º¹¸¶º¸º¼¹»¼º¹º»¾¼¾»»½»¹¹º½¾½À½ÁÁ¿¾ÂÀ¿¿ÀÁ¿¿ÃÁÃÃÁÃÃÁÂÄÁÁÃÁÃÁ¿»¼¿¿ÀÆ¿À¾ÂÁÂÄÂÁÃÃÅÂÁÄÃÃÂÁÃÅÄÄÆÂÃÅÿ¾¿¿ÀÅý¾±«±¶¿ÁÄÅÃÃÀ½µ­¤£®³­¬¨¨¢Ÿ¥¦¶Á¿ÆÄ¾Ç£ÂÂÆÅÄÄÇÆÃÅÃÆÄÇÆÈÈËÊÌÈÆÉÊÇÅÆÃÅÈÅÆÄÆÌÍ¡ÎÌÍËËÍÍÏÒÐÑÕÕØÙØÛÜÝÞàâæçìóõõöö÷ööõƒôóðîíØÜëîîïïòôøùúüûûú‚øù÷ù“úúùûúúøùúúûûùúùùúúùø•ùúùøùøùø÷øøùùûûùø÷ö÷÷ö�®º¯¥¨¦ ™š—› £¡ §§¦Ÿ›˜–’˜–š›š™—œššœššœšš›œž››œ›§œœŸ  ŸŸ ¡ Ÿ  žž  ¢¢¡¢¡ ¡¢Ÿ ¢ ¢Ÿ›šŸ Ÿ›žžœŸŸ ¢  ¡ ¡Ÿ ¡ ¢ŸŸ££¢£¢¡¡¢ ž¥Ÿ¢ œœ’• ¢£¡  ž–Ž……Ž‘Œ‹…‡‚€…„“Ÿ¢ ›££ ž¡£¡¡£¢Ÿ ž¡ ¢¢£¤¦¥¦£¡¢£  ¡¡£  ž¡§¨©¦·§¨¨§ªª«®­°³±²³´´¸º¾¿ÃËÐÒÓÒÐÔÑÕÒÎÏÎÌËÈËȵ¸ÅÈÊÌËÐÕÚÝàáâßÝÜŠÙ×ÖÕÔÖÚÜÜÞÜ‚ÞßÞ…áÞÝÛßÞšÜßÜÜÞßÞßßÝÞÞÜÛÜÝÜßààßßÞÞÜÜÝÜ�ߣ›”Œ…‚ƒ€„ŠŒ‹‹Ž’ˆ€}w}‚‚|„ƒ‚…„„}}…„‡„„†ƒ„ƒƒ„‡†ˆ„‰ˆ‡ˆ‹ˆ†ˆˆ‹†…†ˆŒ‹Š‹‰ˆ‹Œ‡…І‡……ƒ…ˆ‡ƒ‚„…ƒƒŠ††„„†ˆ†„††„¾‰‰‡‡Š‡ƒ„„†€ƒ„ƒ„…‚rksx„††„††„|pggorhf`b_^c]k€‚„‡ƒƒ‚ˆ„„……ƒª„ƒƒ…†‹„†„„…‚€‚‚}„‚‚|‰‡‰Š‰‡†„†‡†‰‹‡‰ŠŽ’‘‡••˜œœŸ©³°¶´¼º¸²²µ³¯¨§§¨¦‘–¢§¥¥¦©¯´ºÁÁ½½¶´¸²®¦¤¦ª°²¯±´±´µ´³™´¶º¸¶´´·¶µ²³´²µ··¹º³³´¯°³»ˆ¿¾¿¾»¿½¼¾¼�¥°¯¯¶µÁÆÊÄÀǼ¹··¹µ°²µ¹»·´¸º»¹»¼·¼¹»¼¾¼‰½½¾¼½¿¿½½À‚¾ÂÀ£ÂÃÁÄÆÁÁ¿½ÂÂÃÃÂÄÁÃÄÂÃÄ¿ÀÂÀÁÁ¿ÁÂÁ¼¾¿¾½Ö¿¼ÀÁÀÂÃÆÄÄÅÂÁÄÃÅÅÄ¿ÁÀ¿»º¿ÀÀÁÀ½À¿¼·¬¶¾¿À¾ÁÄÀÁÂÀ²­¡ž©£¦§¤¡£ £§¸ÅÂÆÅÀÆÇ¿ÂÂÄÃÀÄÅÁ½ÂÂÄÀÃÇÆÇšÈĽ½ÃÂÁÄÈÇÊËÎËÌÎÍÏÌÎÎÏÏÑÓѨÓÔØØÕÙÞáæéêìîíðòñõôôõöôòðòñïîîððìððòôöúüû‡úùúùûùûúû‡ùûùùûúûúƒûúúù„øùøúùøŽùûüûûüüûù÷ø÷øø÷�±“’”™—¡¥¨¤ ¦¡žœ˜™™—“•—™›˜—™››˜›œ™œ›œžœ›œ›œžŸŸžŸ©ž  ¡ Ÿ ¡ £¥  žœŸ¡¡£¢¢ ¢£  ¡žŸ ŸŸ žž  ›žœ‹›žŸ¡¡£¡¢¡ ‹££¢Ÿžž™˜žžŸ×Ÿš––ž ¢Ÿ  Ÿ•„‚‹…†ˆ…‚„„…”¡¡¤ ž££Ÿžž¡¡  ™žžŸœŸ£¡¡¢¡£Ÿž˜šŸ ££¥¦¨§§¨©©§¨¨©©ª«ª¬Š­°°¯±µºÀÃÄǦËÍÍÒÒÏÒÓÒÏÊÌÊÊÉÊÌÌÉËÌÎÒØÛàßàåäáßÝÞÛÝàÞÝ”ÞÛÝßÞÝÞßßÝàßàÞÝßÝÞÜàÝÛÜ’ÝÝßßÛÙÛÝÞâãàâääááàßÝÞÝ�®y{}‚‹Ž‘މއˆ‡€…v}~~‚€„|„…‚„„„…‚††…††…‡†•‡‡ˆ„ˆˆŠ‰‡ˆˆ‡‡‹ŠŠ„ƒ…†Š‹š‡ˆ‰‡……ƒƒ…„‡‰‚ƒ……~…„ƒ‚€‚…¬ˆ‡‡……†‡†‹‰†‚†„€||„‚„„‚€zmt€‚ƒ‚‚„€‚†…~vfdndÉb^a`bak‚ƒ…ƒ€‡…€~}…„ƒƒ‚|ƒ}|ƒ„„‚ƒƒ‚x{€~|ƒ„…„‡‡†‡‡‰†ˆ‡‡††‹ŽŠ‰ŠŠŽ“™ž¢¶§§¬¯©±®°²³®ª°¬ª¨§©ª§¥«¦¨­³»¾½¿Á¾¸µ³²µ²µ³±³³µ·´´³µ·¶µµ´Š¶··¶´´µ³²°±Œ³¶¶³²°°³µ¹»½¿‡ÀÀ½½ÀÂÁ¾�¯¼ÅÅ¿¾Ãɾ»¸¿»·¹¶´·¹±³¶ºº¹º·¹¼ºº¸´¼»ºº¾½¼¼¾¹·¹¾¿Â¾™Â¿¼Ä¿¾Â¿Á¿¿ÃÃÂÁÁ¾ÂÂÁÂÁ¾ÃÀÚ¾ÀÀÁ¿ÂÂÁ¿ÀÄÃÂÂÁÁ¿ÁÀ¸¸¹¾ÃÆÇÆÄÃÂÁÁÀÄÃÀ½½¼½¾¼»¾À¿À¼¼½½·»¾¿À¾¿ÁÁÃÃÀ³¬¡ ¨ ¡¥  §£¥©¶ÆÂÅÄÁÄÃÂÂÄÂĵÅÄÀ¾¿ÃÁµ·Àð½ÂÄÅÅÆÉÈÈËÍÏÍÎÐÐÏÐÌÑÍÐÎÐÐÏÒÓÕÖÖÔÖÛßâèêêìëì íîðëïîîñððñîðññðòòôö÷÷öøúûüüûúûúû†úùøúûüûúû‰üûûüýûüûûú…ùúùøùøƒ÷÷ùú†ùúùúùø÷ö�—¤¥ ž¤§Ÿž› ›œ˜–™š”–—š›š›œœš–œœ››œœŸ˜šžž¢¡ž¢žœ¢ŸŸ¡žŸ‰¢¡ ¡¡žŸ¡ ¡‚ž¡ ‚žžŸª¡  žž¢¡Ÿ Ÿ žŸž™—™ž¡£¤¤£¡¡  Ÿ¢ Ÿœ››œœ››Ÿžœß—šžŸžŸžŸŸ ¡¡–……Š„ƒ‡„ƒ‰††‡’£¡¢Ÿž¡ ŸŸ Ÿ ¢¡¡Ÿ› œ’•œšž ¡ ¡¤¤£¦¨©¨¨««ªª§ª¨ª©ª«ª«¬®²±®°³¶½ÃÄÆÇÇȇÉÉËÉËÊÊÍ¥ÏËÊÉËÍÏÎÒ×ÜÞÚÛßàâãáäãäâáàÝßààÞßßáÞßâàáŸãáâáâäáäãáàãáàßÞÝÞÝÜÛÝÝÚÖÚßßâàßá…àÞßÞÞÝ�»…‘Љ‡ˆ‚†ƒ…†€„ƒ{~~‚ƒƒ…‚€ƒ„„‚…‚‚…‰ƒ~„‡†‰‰†‡‹‡‰†ˆ‹†ˆ…­Š‹‰‡„„‡ˆ‰‰…‰‡†„…„‚ƒƒˆˆ…ƒƒ‡†…‡…„ƒ„„z‚ˆˆŠŠ‰……†Û‰†ƒ~‚}€‚}‚ƒ‚~ƒ‚~z|}‚„„ƒ€†‡vghnbcdbbgffck„ƒ‚…ƒƒ~ƒ†……ƒƒ{yot{}i}€‚ƒ‚…†„ƒ†‡ˆŠ‹‹‹‰†‰ŸŠŒ††ŠŽ‹Ž”—š ¡£¥¢¡¤¢¡¦¦ž¤£¥¨§©¨’ª«©«¬¯·¼·²»ÅÈÂÀ¾¿½ºŽµ´µ±¶¹¶¶·¹¹¸·¹½¾Á½»¼À»½º»º¸³µ˜²³²³¶°°¬°´¸º¸¸¹»·½½¿¼»¼½»º�¢¿Â½¹·¹··ºº·³´µ¶»½½·¹·»»¼·¹»¹¶¶·»¼¾¹¤º»¼½´³¼¾½ÀÀ¿¿½¿ÁÁ¾Ã¾»ÃÀÂÁ¿¾½¿¿ÁÁÃÀÄÁ¿÷º½»À¿ÀÂÿÂÃÀĽ¿À¼¿¾ÃÀþ»»¿ÂÄÄÂÃÃÀ¿¿¾·½ÂÃþ¸»¶º¹¾ºº¶¶»ÂÀÀ¿¿ÁÀÂÃÁµ«££¦› ¢¢¡¡¨§²ÂÁÃÂÁÄÅÄÈÆÅÃÇÆÂ¿¿ÂÁ¼À¸µ²±¸ÇÇÉÌÎÍÌÌÍËÏÒСÑÒÓÑÓÒÒÑÒÓÔÒÕÕÙÛâçññìííïðïîíïîíîìëƒìëîï‡ñööøûüüûü…ûüûüüûüû‚üüûü“ûüüûûúúùúùúùøùøøúùùøƒùøùø…÷ööõôõ�¢Ÿ¡žœš›™šš•˜™˜œš›—œœ›˜›œ›š˜™œŸšˆŸ˜•Ÿ¡×Ÿž¡¡ž¢Ÿ›£ ¢ žžŸ Ÿ ¢£Ÿ¢ Ÿžœšœ› ŸŸ¡¡ž ¢Ÿ£Ÿ›ž¡Ÿ¢ ž››žŸ¢¤¡¡¢žž—œž  ˜™•š˜››š——šŸŸ  žŸ²¡Ÿ¡˜††Š‚„……„„Іž  Ÿž¡¡ ¥¢ Ÿ££ žš–“—£¤¦©©§¨ˆ¦¨«ª««­­¬ƒ«¬¬®µ«­¯´·½ÂÌÌÉËÊËÍËÊÉËÊÇÈÈÆÆÅÇÆÊÌËÌÏÔ×Üàäææåáßãááâãââäååâáäá…âßàâäãåã„âäããáâߘáßÞÝÜÞÞÜÜÝÞÝÞÞÝÝßÝÞÝÜÜØÖÚÜ�±‡Œ‡……†‚‡…}€‚„…‡……‚ƒ‚€„„‚„ƒ†~€€„„ˆ|ˆ‡…‡ˆˆ‡¶…†„‰‡‚‹‰‹‡‚…‡‰ˆ†‡‹†ˆ…†‡ƒ‚‚‡††…‡ƒ†‰„‰„…‚ƒˆ†……~…†ˆŠ†ò„ƒƒ{€„‚€{}xzz‚xy€„€„…ƒ~ƒ‚…„†€ujkocabeeccg`j€ƒ‡‡ƒŠ‡……‡…ƒ~€{{ssooy†‡‰‹Œ‹Œ‰Š‰ŒŒŽŽŠŽ‹ŒŠŒŒ‰’–š¡­«¦¥£§§¤£Ÿ¢ œšœ¡ ¤£¤§®µ³ºÀÆÇÇÀ¼¼ÀÀ¿½¼¡»¿¾¹ºº·¹¼¹º¹¹»»½½¼½¾À¾½¾¿Á½½¼¿½¸¶¸¹¶”´²µ´²°³³²´µ¶´µ¶ºº¶³¯´¸�ˆ°¼¾¼¹µµ¸¶‹´´¸µ·¹½¸·»º¸ƒ¹¸º¹†¼»¹·»½¾¸À¾¾¼¾¿¿À½¾ÀÀÂÂÀÅÂÁÄÀÄÁÿÀ¿ÁÂÁÂÀÅÁļ¶µ·¼Á¿ÂÆÅÂÃÀÃÿÁÂÂÀÂÄ¿Àþ‹»¸¸»¾º¾¹»½½¸œ»¼¸±¶´¹Â¿¿¾ÀÁÀÂÁÀÄý°§¢¨  ¢ª£­©µ½ÀÄÅÄÄÆÅÇÈÆÁÄ¿¾¼»¹ºÂ¾º¶ÃÌÍÊËÌËÌÊÏÐÎÏÐÑŽÒÓÒÓÖÕÔÓÐÑÛäéïó‚ñîð†ïðñððïíŠëíéêëìðó÷ùü‡ûûúùúûúûƒüüúûƒúüüû‚üüûƒúúûüûúŠûúûùùúùøøùø…ùøùøöõôõö�¿‘Ÿž›——šš˜™–—𗙛𙛛™™˜šš››ššš˜›œžž žžœžžŸŸžž Ÿ¡£¢£¡ ¤¡£¡¢ŸÞ ¡ £ ¤ £––—œ¡Ÿ¡¥¢  Ÿ¢£¡žŸ¡  ¡ ¡  Ÿž¡œžž›——šœ™œ—šœœ––•››˜“–•š žžŸžŸŸ ¢”„Š…‚ƒ…„……ˆ’›ž¢¡˜£¡¢¤¢Ÿ žš™—˜ œ˜”Ÿ©¨§§¨§ž©ª¨©©ª¬ª¬­«¬¬¯°°­««²½ÃÊÎÏÐÑÏÌÏÌœËÌÊÇÆÈÅÇÂÄÆÈËÓÙàßäãâäæçãààáßàá»ããáâäâåââãâààãäàáäåâãäãââåããâááâáàáààßßÝßÝÞÜÜÞÝßÞÝÞßÝßÛÙÙÖÕÚÜ�Ÿv†‰‡„€‚ƒ}€„‚‡†„„~‚‚ƒƒ„Ÿ}‚ƒ„ˆ†‡„„ˆ††…†‰ˆ‰‡…ˆˆ†Œ‹‹ˆƒ†‡æ†Šˆ‰…‹‡|{|‡†‡‰ˆ…††‰Š†~…‰†ƒ‡†ƒ„„ƒƒˆ€‚ƒ||‚}‚|z}|yyxy~zx|w}„€ƒ†‚‚……€yqfingbbdedbido{€‚†‡…€„‡†ƒƒ€|x~|{t€ŒŠ‰ˆ‹Š‰Œ‹ŒàŒŠŽŒ‹ŠŽŒ‰Š“Ÿ¦«°®­¬¨¦©¤¥¤¤¥¤¢  Ÿœ˜££¦¬¶ÁÂÀ¿ÁÃÁ¿»¹¹¶¹¸·¸¹¸»½»¸ºº¹»»¼¼·¸º½¾½¸»½»¹»½¾ÀÀ¾º¾¿»·ºŽ¹¸¸·µ´³µ´³³²³³´µƒ´²®²·�¦¥º¼¿¼¶µµ¹´º»º¹»µ¸º·º»»¹·¸¹¼»¹ºº»¹¹½¾½¿À„¿ÀÀ¾¿˜Á¿ÄÂÀÁÄÂÅÁÀÃÄÃÂÀÁÃÃÀÂÃÁÂÀÁÀÄ—ÁÃÄÅÄÆÄÄÃÁÀÀ½ÀÁÀ½¹¸º¿»ë·»À¾»½À¼º¹¼½¼¾¿À¿Áü¿¼Áþ¿ÅÂÄĽ«¤œ¡§¦ ŸŸ¢¥¨ª§µÁÅ¿ÂÀ¾ÃÁÀÆÅÆÇÄÄÆÆÈÅÉÅÈÌËÉÐÏËÌÌÎÏÐÐÎÑÐÕÔÕÕÔÕØØ×ØÜæíòõ÷öõöõõööó„ñðïðñðŠòóóõ÷ùüýýûü…ûûüûûúûŠúûüüûüûüûúûüû…üüûûüûü†ýüüûûüú‚ûüú„ùúùøùƒúø÷öõ�Ò‡›ž ™—˜š—›œ››œ—›œ™›œœš˜˜š›š›œœ›šžœŸŸžŸžŸŸžŸ žŸ£¡¢¡ ¢£¢¥¢¡¢££¢ž ¢¢Ÿ£¢  ££Ÿ žŸŸž£¡ ¡¢¤£¤££¢ŸŸž›žÂŸ ˜—šžœš›—›žœšœš˜—›œžŸž ¡œ›  œ¡Ÿ ¡‹‚…Šˆ„„‚…‡ˆŠ†“ ŸŸ›Ÿž¢ƒ£  ¢™¡¥¡¤¨§§ªª§¨§¨ª©©¨ª©¯­®®¯®°¨²¹ÀÇÐÒÑÒÓÔÓÔÕÕÒÑÐÌËËÍÊÌËÈÉËËÏÒÔ×Üâåâááããà•áàßÝàÞßáÞßâãáâáâááàáàá„âááàâ˜ßäããäãäããäãääáãäâáàáßááà߃ÞßÞß…ÞÜרÙÜÞ�Ÿm„‰‰‡ƒ€ƒ…ƒƒ††‚ƒ‰ƒƒ…€~‚…ƒ€…„ƒþ„„…‡†„…„ˆŠˆŠŒ‡‰‰…‰Š‰Œ‹‰†‰‡ˆ„‡ˆ†„†ˆ††‹Œ‰‰…„ƒ…ˆ‡‡ˆ‡†‰Œ‡‡Š‰‡ƒƒ„€ƒƒ…„„||}‚€~|‚‚~~yy{~ƒƒ‚„†~{„†~}…ƒ‚…vqhjokbgcffdecp…‚~ׂ}}~ƒƒ…†ƒƒ„‚„„…„ˆŠ‰‰Œ‡‹‰‰Ž‹ŒŠ‹Ž’’‘—¤®²µº»´µ²°±±¬«¨¦¥¤¥£¤¤§¤¤§§ª¯·»ÄÈÄ¿¾¹º¼¹·µ¸¸¹·¶¸¾½ºº»½º¸¹¸·ƒ¹»¼»Ÿº¸º½»»¿À¾¾¿¿À¾¼¾»º·¹¹¶º»¸·¹µ¶··¶…º¹¹·¶´¸�žž´¸»ºµ´¶¸´·¹··¹¸º¼¹¹¸¼»¸¹¶¹¼¼¾ºþ»»À»½¿ÀÀ¼¼¾½½ÀÁÀÂÂÄÅÆÂÁ¾ÄÅ¿ÃÁ¾ÃÀ¾½»¼½¾¿½ÀÁ¿ÂÀ¾¿ÁÂÃÁÄÃÄÅÅÄÂÄÀÂÁº·¼¼½½ÄÁÄÀÉÃÆÀÀ½¶¼¼¹¿¾º¼¼¿Â¿ÂËÂÃÅÅÃÀÁÁÅÆÁÃÃÅÁ»© £¤Ÿ š¥«©¦¹ÄŸÀÀÄÀ¾Äļ»ÂÆÇÅÆÇÈÇÈǾÈÊËÍÎÐÐÎÍÐÏÑ–ÒÒÕÕÖ××ÕØÞçîóööõö÷öóõôõ—òðòññïòððîîóö÷úúûüüýýüúû“úúûúûûúúùúüüûüûüûüûü‡ûûüüûüüûƒüûúûŒúûúùùúûüúúûúùú‡ùùøøù÷öõ�ž‚–›œœ™—™š–™šš›œšœž›ššœš›™šœœž›…œœŸ›žŸ¸œž ¡Ÿ¢£¤¥¤¢¡ž¥¤Ÿ¡ ž£ žžœ›žŸ ¡Ÿ¡Ÿžž ¡¢ ¢££¢£¢¡¢Ÿ¡ž›˜›¹  ¡ž¥¢¤ŸŸ–››™žž™ššœ¡¡žŸ¨¡¢£¢¡Ÿ Ÿ¡£ž¡ ¡ŸœŽ„ƒ…ˆ‡ƒ„~‡Šˆ…• žŽ œ¡ ›š £¤¢££¤£Œ¥§¨©©ªª©§©©ª‚¬«°²¯³¹ÂÌÒÒÔÕÕÓÔÑÒÒÔ—ÐÍÏËÌËÎÊËÉÉÏÓÚÝãâãåæäàßá˜ßààßßáÞàäáàãåáàâãáàááâãáàáà˜ãàáãáäââãààáààßàââáààááàá†àßÞàßãá…ââàÞÞß�h~†…†‚€‚„ƒ‚‚…ƒŠ„‚ƒ„‚ƒƒ„ˆ„ƒ„ƒ…~„†þ„ƒ†…†‰‹Œ‰ŠŽ‹‹Œ‡ˆ‡„†Š‡…‚€€ƒ„‚ˆˆ‡‰…‡ˆ…†‡††‰‹†‡‰ƒŠƒ}|‚}…†ˆ„‹„‡†…ƒ{~|€zz{€†…„†Œ…„†‰…€€ƒ†„ƒ‚„„€ujiilgbf_ahge`r‚ƒ~‚~‚€zƒ{‚‡…†ˆ”…~‡ŒŒŽ‹‹ŠˆŠŠŒŒŒŠ‘Ô’œ§°µº»»¸¹¹±´°®°°«§§¤¥£¦¥¦£§«³µº¿ÂÇÆÇÇÁ¼»»¸¹»··µ´µ¶º»¼¹¹»À¾»¼¼¾»»º¸·¸·º¹¸»¼º¹¶¹º¶º½¼Ÿº¸º¸¸¹µ¹¶¶¸¹»»··º¹¹¸»»½»½½¿¾À¹¸»½�›£³º¹»¶¸·º¸¸¶·µ±¹·¹¸¹º¼º»½»º¼„º»»½¿þ½¾ÀÁ¾½¾¼¾¾ÀÂÅÃÅÁÃÀÀ¿Â½¼½ÀÁÅÄÄÁÀ½ÀÀ¿ÁÄÂÁÃÃÀÁÀÅÅÁÀÀ½»»¸½¹¼¸¶¾½¿ÀÁ¿ÆÐÂÒÊ¿¼¹ÀÁÀÀ¼¼½Á½ÀÂÅÃÁÃÄÆÃÃÂÄÄÂÁÅÌÅÀÃÄü¦ž›£¤¤ž¡§¤«©µÃÄÇÇÆÄ¦Á¼ÁÅÇÊÌÈÈÉÊÊÇÉÆÊÊÏÏÐÏÑÒÑÒÓÓÔÕÓÔÖÕÕÜáæðö…÷õöõõö‘õõôóôõõóóòðïïòôøûü‚ýûü‡ýüûûüûúû†ùûúûûüûƒüüûüƒýüüûƒúüüûúûûúüûûúûûúúùøùùø“ûûøøùûúúûùùûûúø÷ø÷öõö�ʉ•›œ››š›šš˜›™–œš››š›œœž›œ›œŸžŸŸžžŸŸ¡Ÿž œŸŸ £¥¡£¡£ Ÿ ¡Ÿœ¡¢¤£¤¢Ÿ  Ÿ¡£‡¢¢ ¡ ¢¢Ÿ¨›š›˜šœ—•žžŸ ž¤ª ¬¦›šŸžžŸœœŸœ £¡  £¥¡Ç¢¢¡Ÿ¢¦£Ÿ¡¢ žŒƒ‚ˆ‰‡‚…€ˆ…Ї’ ¡££¡¡ž›Ÿ¤¦¨©¦¥¦§¦¤¦¤¥§«ª¬«­¬ª«¬­¯¯¬­°¯±¶»ÂÌÓ…ÖÔÒÒÔÓ´ÔÓÓÑÑÓÔÑÑÎÍÍÌÏÖÚáâäæçåãåçæßààâäááâàãàßßâßäæããååãâäâäã†äâßààãà‰ââáäããàááà‚ÞÞß„áÜÜáà‰ßàßàâäáãâã„ááààáà�©q|…ƒ‡„†…‡„„„ƒ†„„…ƒ„‡…„‡†‚…††ƒƒ…‡†Šƒ„„‡‡ˆþ‰ƒ†ˆŠ‹Œ‰ŽˆŽ‹‰ˆŒ‰…ƒ‹ŒŽˆ‰Œˆƒ†ˆ…Š‹‰ˆˆ„ƒˆˆ‡†ƒƒ€ƒ…}xƒ„…‡…Š‘†’‹…„„‚}}€}€…ˆ„…„ˆŠ‚…‰ˆ……„ˆˆ…ƒ††…ukjmoh`ea_idgbp‚‡‡„„†{€†ŒÖŠˆˆ‹ŒŠŠ…†ˆŽ‘ŒŽŒŽŽ’‹‹‘›Ÿ£®µ¶½Á¼··²·µµ¯±­©¬®®¨©¤¤¢¦«±·¾ÀÃÅÆÄÃÄÁÁ¿»ºº»¹º¹·¼¹·µ»¼¿¼½¿ŸÀ½À¾¾½¼½¼Â¾À¼ºº»»¹¶½»¸¼½¾¼»··¶´™²·µ±³¹»º¶´ºº¹º¼½½¼¾Â½ÂÁ¾À�Ũ¤¹¼¸µº¹¶ºº·¸¶¸¸´¸¶¸º½¼¾»½»º¼¼¹º¼º¾¾¿¼ÀÁÀ¿¿ÁÀÀ¾¼ºÀÁÀþ¿À¿¿ÁÀ¾¾ÀÁ»ºÁ½¿ƒ»ÀÂÁåľ¼»µ¶´¸µ»½À¿ÀÀ»½À¿¾ÅÁÁĹ½¹»¿ÁÀÁÀÁÂÁ¿Â¾ÄÃÅÃÄÃÂÄÁÁÃÅÂÅÆÆÅÂÂÆÅÅ矜£¦¥ ¢Ÿ¤¨£¤¨½ÎÈÈÇÅÅÃÅÉÈÊÉÊÊÈÊÊÉÉÊËÎÎÒ†ÓÕÔÓÕÖÕ†ÏÍÜäéïò†ôöö÷õôõƒôôóò‹ñóôóòñôõøúúüû‚úúû…üûûüüûüûüˆûûüüûûüû ü‚ûúû„üúûûúŠùùøùúûûùùøùˆúúøùùúúù÷ö÷�¾Ž‡šœ˜œ›™œœš›šœ›—š™™šžŸœžœœšœœžŸžŸ  ŸŸ¢¡ Ÿ›¡¢Ÿ¡ž ¡  ¡¡Ÿž¡ó›œ¢ŸŸ  ž›¡¢£¡ ¤Ÿœš•—–™•› žŸŸš›Ÿ¡Ÿž¢ŸŸ¡™œ˜šŸ  Ÿ ¡žž ¢¡£¢¢ ¡£ŸŸ¡£¢¤££¢¡ ££¡¡…ƒˆŠˆ„‡ƒ†‰†„†š«¥¤¤¡£¡£¦¦¨§¨¨¦¨¦¥§§¨¨©­’®°­®¯°­¯¯ª©µ¿ÄÈËÐÒÕ™ÖÕÔÕÔÓÑÒÓÒÒÎÍÐÒÒÏÐÕ×Üßäåæå‘äâáàáãàÞáäæâáãáââã‹äãååãååâáääã²ââàããåââáâááäââàâáààßÞßÞàßàáàßáàáÞÞàßáâãâãáãáààÞßßà�îvm‚††ƒˆ‡…‡ˆ„†ƒ†…ƒ„ƒ…‰‰‡††…„„‡ƒ„…ƒ†Š†……ˆ‡†‡‹‹Š†‡‚ˆŠ‰‹…ŠŠ‡ˆ‹‰ˆ†ŠŠŒˆ‡††……‹‰ˆˆ‚…‡†x}{yƒˆ…ƒ…†ˆ†„†‚†‡~‚}€‚…„郂~…‡‰‡ˆƒ‡ˆƒ‡‰…ˆŠ‰…†ƒ…ˆ†‰wnloslegdejg`_vŽŠ†…‡ƒˆŠˆˆŠŠ‹ŒŒ‰Š‹Ž’’‘“’ŽŠˆ˜¢©®´±°²¶¸½½²µ±²¯°«©©¨¨¬­¨Ž®²º»ÀÆÊÃþºº¹¸‰¶·º¼¸·¶¹º»Œ¿ÁÀ¾½½¾¾¼¼¿¿¼‡½¾½Á¿Â¾¼ª¸·¹½¼º»¼º¹¹¶¸·µ·¶·¶¶µ·º··´³º¹»¹º¼¹¹½ÀÀ¿¾Â¼¾Á�þ©˜­··¶¶¸º¹¹¸»»¹¸º¶»»º»¼¼¹ºº¾¼»º»½º¿¾¾»½¾½¿¿¾¿Á¾ÀÁÁÃÀ¾¾Á¿ÀÄÁ¿¼»¿À¿¾À¿¿À¿»»ÃÅÁ¼¾¿¼¼º¶¼ÃÄÂÁ¾¿¾Â¿¼¿Á¿À¿¿Â¿¾Á¿¿ÁÁÀÁÂÄÁÃÂÀÂÃÃÂÄÆÃ¯ÂÀÂÅÃÇÈÇÈÄÃÁÁÂÅÈ®£œ£¤¡ £¢£§§¤ª¾ÊÆËËÆÈÈÇÅËËÊÍËÌÍ̯ÎÑÑÐÑÎÑÔÕÕÒÑÓÕÚáéíñòðñòòóôõööõöõôõôôòñòóòôôöùúûü‚ûûùûƒúûüû…üüûüýüý ü‚ûüûüûüûúùûûúûúúøúúùûûùú†ûù÷öö÷ö�ƒŽ|Žš‡œ›ššœœ‘™œœ› ššžœœ›ž›žÉœœžŸ  ¡ŸŸ ¡¢ žž¢  ¤ Ÿœ ¡¡Ÿ¡¢ ¡¢Ÿ›œ¢£¡œŸœš—¢¤¢ ž¡›Ÿž žœŸœŸ¡žŸ ô¢Ÿ Ÿž¡¡ ¡££¡¡Ÿž ¢¡¦¦£¤¡¡ž ¡¢¥“‰ƒ‰‰…†‰††‰‰„‡š¨¦§¦¢¥§¥¤¨¨§©¨©ª¨§©©«ª«¬ª¬¯°­­¬®¯´¼ÂÆËÍÎÍÍÐÔÕÐÕ×ÕØØÓÓÒÓÒÏÒÑÐÐÓØÝßåãåææçåãßÝ™ââàáãäâáãáàãåáãääãäææåèæâæäâäãâåãâáãåããâãáßàá›âáàááâãáàââàáâàáââáâàãâàßÝÝÞ�Švdu…„„…ˆ…†ß…„‚†ƒ…ˆŠ†‚ƒ‡„€…ƒ…„„„…‚‚„„…†ˆ‰‰‡‰‰ˆ‹Š‡…‹‰‰Š‡…„„ŠŠ‰ˆˆ‰†‰Š…ƒƒŒ‰„ƒ€‚…|†ŠŒ††„…ƒ…€}†ƒ…‚€ƒ‚‚‡ˆƒ‚‚…„‘ƒƒ€„‡‡†ˆ†……„…†…‡þˆ…†ƒ„…|rkopjhkieii`^t‹‰Œ…‡‹‡‹ŠŒ‰‹‹ŽŒ‹ŽŽŽ‘ŒŽ‘˜£«¯²®«°°¯´¶´³¶³´°±­­¨¦ª¬©­­³¹ÀÆÉÄÂÅÅľ»º´°±°³µ·µ·»»¹µµ·¸¼½¸¼¾½»º¼¾¿¿š½¾¼º¸º»¸»»¼½¼»¹º¸¶¹¼»·¹º·¶¹º¶¹¸·µ¶»º¹¶¸µ´¹¸¹¸º¼·¸¼»¾½»¼¸»�ϵª°µ·µ¶¸·ºµ·¶º·¼½»¼»¼º¸¿º¶¼»´²»¾¹»½»º»½ÀÀÃÀ¿¿Á¿ÁÀÁ¿½¾ÁÂÁÄÄÿÁÁÀÁ¾¼ÀÂÀ¿½¼¼½¾¿¶¼ÀïÁ¾¾¼ÁÄþ¾¿Â¿½Â¿½¾ÀÁÃÂÀ¿½¿ÁÁÀÀ¿½¾Â¾¾ÀÁÄÃÄÄÂÄÂÃÂÄÃÄÆÁ½¾ÂÃÁÃÀ½¬§›¤¦¡£¤¦¥¦¢¦«¼ÈÇËËÈÊÈÊÈÌËËÍÎÍÏÎÏÎÏÐÑÒÒÑÕÔÕÔÕßçêîïðñ˜òðññóôóóòóõóôôõóñóøøûûüüýüûƒüûûú‚ûûüýüýüý üûúû‚üüûüû„úüúùûúùƒøø÷ö÷�±™Žr”™›™š›š›˜™™œœž›žžšž›™œœ—”ž››œ››  £¡¡ ¡ ¡ ‚žŸ¢¥Ÿ ¢ ¡ž ¢¡ žœœžŸ—œŸ  Ÿžž ¤¢œž¡Ÿ ŸÇžŸ ŸžœŸŸž Ÿžœœ œŸ¡¢ £¢¡¢ŸŸ ¢Ÿ¢£¡œ Ÿ ¡žœ‘‚‰‹„ˆ‰‰‡ˆƒ†ˆ˜¦¦§§¥¦¦§¦¨©¨©©ª«©À«­¬«®°°¯²»¾ÁËÌÎÎÏÎÏÑÐÏÑÔÐÒÔÐÑÓÑÑÓÔÓÑÓÚÝàâãååçååæâäããääáÞÞááåäãåæä‹åäããæãäãååçè»êçäæåæãäâãääããâãâááâãááââááãåããäãáãåääããâæããââãäãáâàâááàÝÞÞà�þ„zY|ƒ†ƒ„‡ƒ…€ƒˆ††ˆ†…ˆˆ‡‚‰…‚‚{…‡ƒ…‚ƒ‡†ŠŠˆ†‰ŒŠ‡‰Š…†Š‹‹‰ˆˆ„‡Š‰……††‡ˆ‹†„‚ƒ†~€ƒ†ˆ‡†‡‚…ˆˆƒ‚†ƒ†€€‚„…†…‚„ƒƒ‚ƒ}‚~€‚…ˆ‡……„†‹„…„‡ƒ‚†„€€‚ƒ·‚ywknnfjpmggb`\qˆˆŠ‹‡ˆŠ‰Œ‰‰‹ŠŽŽŠŠ‘‘ޑ𥍍©ª¯­«¬­®±²­®­¬°«®¬®©¨®¹¹ÀÄÈÇÇÈž½¼¹¸º¶¶´¶¹¼À¾½¿¼¼º»”¼¾¾»¼¾½»ÀÅÆÅÁ¾º¸º¸º·¸§¹¹»¸¸¶±´º¹µ¹»¶´·º¼½¹º¹¸¸·»»¹·»¹¶¼»¹º½¼¸¹ƒ¼ºº¼¹�¿³±¢¯´µµ¸µ·¸¸¶´·µ¹¼¸½»º·´»·´¶º½½¼µ²·º½¼½¿¾½Ã¿½¾¿¿ÁÀ¿¿¼¿ÆÂ½¹¿ÀÀ¿Á¿¾¿‚À¾·„¹º¾¾Á˽¼ÁÀ¿¿ÁÀ½ºÀÀ¿¿ÂÀÁ¼¿¾À¿¼¼¾ÀÄÁ¿ÀÀ½¿ÄÁº¿¿ÃÅÅÃÀÄ¿ÁÁ¾¿ÂÁÁÄ¿¿ÃÁÄ¿·¨¦˜¡¤ž¢£¡ž£Ÿ¥«¼ÈÈÊËÊÊËËÉÉÍÎÎÏÐÎÎÐÑÐÒÔÓÒÔßáéêíîíìïññòñðïîðïñòóòñóõôôóõôöúûüüûüüûüüûûüüûûùûüýüûüüûûüüûûüüúû üˆûüýüüúüúûúùûúûúúùùûùúûúùùú„ùúùüû„úúûûú‰ûùùø÷öõõöõ�—•ˆ“™›™š™š››™—š™›šžœœ™—œ™—˜œ„˜–›œžÆŸŸ £Ÿž  ¢¡¡ ¡¦¢Ÿ›ž ¡Ÿ¢Ÿ ŸŸ  Ÿ¢ ™˜™›Ÿž¡ ¡ž¡ŸžŸ¡Ÿ›  žŸ¡Ÿ œžŸ›Ÿ¢Ÿ·ž£ ›ž¡¡£¢Ÿ¢žŸ   ¡¢Ÿž  £™€‡‰†ˆ‡„†‰™¦¦¥§§¦¨¨©§¨ª¬„ª¬­«­®®°¹½ÈÌÌÇÆÉÎÎÌÐÐÎÐÎÍËÑÑÓÓÏÓÓÒÒÓÕÚÙáåççåçåãåãâãâåŠäãååäæèçååç æååäãçäâäååééêèèæäæççäçåæååæãäãâáãá—àáâãââßàáàãäååäååæååâãåãåâ…áàÞÞßàÞ�¿„€s~„†„„…‚…ƒ€…„†ˆ…ˆˆ†‚~‡ƒ}|„……†‚€ƒ‰‡„††‰Œ‹…†‰ŒŠ‹‰„‰ˆ€„ˆ‡‚ˆ‡ìˆ‡……‰ˆ|~†‡„ˆˆ‰†„Š…ƒ…‡„…ƒ‚„‡ƒƒ|~~ƒ†„„ˆ„‚„ƒ‡‚|†ˆ‰ˆ…‚……ƒƒ„…„…‚…„…€}zyjkmdflh_d`b`r‰‰ˆ‰ˆ‹ŒŽŠˆˆŽŽŽ—Œ‹Ž‹Ž’ž¡§§ª¯­©ª­¯®ª©©ª«¬²«­¯¯²®±­°±¶ÁÇÉÊËÇÅÁ¿¼ºº¼»½½¼¾¿ÂÁÁÂÂÃÁÀÃÀ½¿¿¾¼ÀÁº¾¾ÅËÆÁ¿¾½»¾¼½»¹½½»º¼º··²´¸¸µ·¹³¶·¸·¶¶·¸·¹»½½¾¼»ºº¾º»½½»¼¾º¸¼º½¾À¼»�¤¸´¬˜¯³³¶´¸·¹¶·¹·»¼»¼»¼º¶¸¹¶·¹¼»¼¸º½À¾‡ÀÀ¿º±¯º¿ì¼½À·½¾¿ÁÀ¾À¿¿¾ÀÃÀÀÂÂÄ¿¿Á¿»¹¹º¾º½¾¼¾¼¾¾¿¾»¾Â¾¾Â¾¾½¾½¼Á¾»¼ÅÄÀ¾Á¿ÂÃÅÁÂÅÄÁÃÅÁ¾ÀÀÂÂÀÁÀÁÅÂÀÀÄÁÁĹª¨¡§¡¤ŸŸ Ÿœ¡ª¼ÉʇÌÏËÍÍÑÑÐÑ–ÒÔÓÔÖÛåêîïíïðññîíîîñðîï–òôôòñòóõøùûûüüûüüûúùùúû‰üüûüûüýýüûü†ýüýüüûüƒûûú ü…ûüüûüûƒüüýûúû…úúø÷øù˜úúûüûúùúúûúúûûúûûùùø÷öö÷ö÷�¤œ™|“˜–˜—š™›™š›šœœ››˜šš™™››œšœŸ¡ž† ¡œ“’š ¡ŸÌ›ŸžŸ¢Ÿ ¡žŸŸ¡£ ¡£¢¤¢ žŸŸš›››žœžœžž›ž¡žž¡žœœšŸž™˜¢¢žŸž ¡£ ¡£¡Ÿ ¡Ÿž ŸŸ Ÿš ¤¡ Ÿ¢¡¡¢›Ž‚ˆ‹„‰ƒƒ‚‚ƒ‡™¦¨À§©ª§ª©­­¬­­¬­¬­¯¯°²¶ÀÂÈÌÏÐÐÌÌËËÊÈÎÍÍÌÌÎÌÐÓÒÒÏÒÒÖÛàáåççæäååäßÞâáâã‘áæåçèåçéåääåææååæçƒèççèçå‘äæçæèæãåæçååäæçäãä”ãâãáäåâàÜÚÛÜÞàâäàâääâŠàááâããááààÞ�‘‡ƒzg}ƒƒ€‚„‚ƒƒ„ˆ‡¤†…ƒƒ„…ƒ‚‚„‚†‰†„„…ˆ‰…}z‚ŠŠ‹ŒŠˆ‡‚І‡äˆˆ†‡†‰‹‰ˆˆ‡ˆ‰…„††…‚ƒ„€ƒ„ƒ†‚ƒ‚ƒ†ƒ‡ƒƒ…„~~€ˆ†}z„ˆ…„„†…ˆ„…ˆ…„†…€ƒ€„……†‡„„ƒ‚„І‚‡€xwjkrgiecab^a^vˆ‰Š¢Š‹Š‘ŽŽ‘’“”˜¤ª¬®¬®®°°¬©ª¯­ª«÷ª«­¯®°®®±³º»½¾ÆÇÅÅÃÁºµ³¶¸·¸¼¼¾¾¿ÇÆÆÃ¿¿½½Â¿¾ÁÁÀ¿ÅÆÄÁĽºº¼»º¼½½À¾¾»»¿¾¼¼¾¼º»º»»¸º½¾·º¸¶²®¯´·´·½¿½¾»¹º¸º¹¸»»¹¸¼½¼»º½¾¿½¿�±“›§°³µ¶¶º»¸·¹½¼º½»º¾½‚¸·¹Ÿ¶º¸¹¿À½½¿¿ÀÀ¿¹»¿¾¿¿¾»»¿½¿À¿ÁÂÁÄ¿×ÁÄÂÀÁ¾¿¿ÂÂÁ½»²µ·º»Àý½º¾½½¾¿ÀÄ¿¾ÁÂÀÁÀ¿ÂÀÀ½¸½½¿ÀÁ¿ÃÃÄÅÃÅÆÃý¹¸Á½¾¾ÁÂÄÅÅÆÆÈÄÆÆÃ¼§§ ¡ª§£¡Ÿ¤ ª¼ÈÌËÌÌÐÐÏÏÐÒÔÒÑÐÒÕÖÜâéîïññðíïïðòñòñðò‰óóôôóõõøúûü„ûùûúûü…ýüüýýü‚ýýü†ýýüýýþý…üýýüýü‚ýüý‚üüýûüƒýýüý‰ûüüûúûüüûü‚ûûüûúûûúúüùúúø÷öö÷÷ö�¨•”“Š’•™˜˜šœ›˜šžœ›š›žžš™š™š™›™š žž ‚›œŸžž››ŸžŸŸž ¡ ¢žø £¡Ÿ žŸ¢¡Ÿœœ“—™™›ž¡œ›››žž¡žŸ¡ŸžžŸŸœ–›žžŸ ¡¢£¡£¢ŸŸ›˜™ œž ¡¢££¤¥§¤¥¥¢ž‹Š…†‰‡„€‚‚†˜¤¨§©¨«©©ªª­°®«©«¯±¹¾ÃÇÈÊËÈÈˉÐÍÐÐÍÍËÌËÍÁÑÑÐÒÏÑÕ×ÜàãâááâããßßàßÞßâáãåâãâåâääâåæåäåääãâæääæçéæéååææäâäããåæååäœåäâááååäââãâåãáâãåäãâÞßáàáâäâ‚ááàŒááàááßââàßàÞÝÜ�þ~|hs{~‚~~‚†…ƒ‡„…†ƒƒ†…‡‡„€€~€€ƒˆ‰……„…††ˆ„…‡ˆ‰Š†…†ˆƒ‡†„†ŠˆŠŠ‡†‡‹ˆ††‚…ˆ‡…„„x}~}„ˆƒ~~„„ƒ†‚ƒ†…ƒƒ„„†~y~‚ƒ„‡ƒ„ƒ†‡ŠŠ„„…}z{†À…ˆ‰ˆ††ˆŒŒ…‰‡srlisnigb_a]]au†Š‰‹‘ŒŒ‹Žš¡¨¯¯°±±ª­««­¬®«”¯¯­­¬­¬¬¯®°­¬°¹¼¾»º¹½‡¸·µ¸·¸¸¹¾º¹½½¾Á¿À¿Á¼¿½¼¾¿¼½¼¾ÀÀÆÇľ¿¾¼»¸·»¼»¸¾¿Á¿½º¸½»ºº¼¼º¼¸¹º»½ÀÀ¸··¸·›º»¹º¿À¾¼¹º»º¹ºº¸¸·¹¸º¸µ·»»¿»¸�¦­¯³¯®´¶²²´ºº¹¹½¾º¸»º»¾¾º¼º·»¼¸¶·¸·±º¼¼½Ÿ¼º½»¾¾¿À¾¿½½ÁÁ¾½¿ÄÀ¿»¿¿¾ÁÀ¿½»½À¿™¾¾»¼¹¼¾Á¼¹¸¾¼Á¾»½¿¿ÀÁ¿ÂÄ™Á¿ÃÀÀÂÂÆ¿ÀÂÿ¾º¼¾¿ÂÅÅÁÃÂÄÃÆÄÆÇÈÅÂÆÃ½¨§ ŸŸ¤£¢œžŸ£¦¬¿ËÍÍÏÎÑÏÐÔÔÓÑÓÕ×ãíðñïñòóôóôñïìêíìïîðññðòóòóôóóõöƒ÷÷úû‡ùúùùûûú üû ü†ûüýüûüýü‚ýýüý…üýýüýüû‚üûü…ûûýüýüý…üüûøûüŽûüüûûüûúùø÷÷öö÷ö�ž“”•’—™–“•š››šŸ›™šš›žž›œ›™›œš™ƒ—’™¡ž››žŸžŸžžœž ¡Ÿ¤Ÿž›ŸŸžŸŸž›šŸ ž˜š›š›žŸš—›ž›œŸŸžž¡Ÿ òŸŸ ŸŸ Ÿ¢žŸ¡ž™šœž¤¥£Ÿ¢¡¢£¡¢¢¤¦¦¤¢¥¢žŒ†„…‡†…€€ƒ„‰š¦ª¨ª©¬©©®­¬¬¯®²½ÅÊÌÌÍÍÎÑÏÊÊËÈÄÉÇÌÍÏÌÊÈÊÍÍÌÑÑÐÕ×Õ×ÚÛàßàßÝÛÜßáàá˜âáâããâáãâàâãâäããââãááâáäåƒäããâ‡äãáããäåãæåãäâßßááàßààßáàß‚ááâŽããäâääââãáÜâãáâ‰ããâãááàáßÝÜÛ�‘€€|z‚„|}„……ƒ‡‡€Š„††‚…ƒ€‚ƒƒ€Ó}x„…ƒ„…„…‡ƒ…†‡‰„„†‡‡ˆ…ƒ…އ†…‡†…ˆ…‚€ƒ†…††‡‚~„„…}{ƒ‚€‚‚ƒ…†…‡„…††„„„ƒ„…„‚€‚„ä{}‚…‰‹‹…ˆ‡‡‰†ˆ‡†ˆŠˆˆ‹†vvpkkliica]^ccu‡‹‹Œ‘ŒŒŽ— «­°­®±²³³´­ª¡¡£§¨¤¨ª®­¬®­°±®¯³µ­«®¯¶¶¹µ±®±¶µµ¶¼ˆ»»¹»½»º¹»…¼¾¾¼¾»Í½»»¹»¿Áÿ¾¹º½º½¼º¿¾½¼½½¾¿¾¹¸¹¸¸´µ¶´·¶´¶··º»µ³·»½¼»½¼½½¾»¾¼µº½º¼½½Á¼º¼º¹·´¶¹¹º·µ�´õ·¯±¶¹·¹¸»¼º»»·¸¹º»»º¶¶º»½¾»º½¶·¶½º¹¹»º¹ºº··½¿¾½»¿À¾Á»À¿½À½º»À¾¿¾¿¾½¼½¿¾¿¾¾ÀÁ½»¸ÃÀ¼µ¬¾ÀÁ¾º»¼¾¾¼¶¿»»À¿¼À¼¾Â¿À¾½¿¸²´·½¾¿Á‡ÂÂÅÄÆÅÅÄ®ÇÉÇÅÅÃû¨ªž¡¡£ œŸ¤¬¯ÂÍÌÏÐÎÐÐÎÒØßâêìïðòððïðïðò¤ðîìëêèéçêìîððñïó÷øùûùøúøøùø÷÷øùúùüûû üûüû üŠûüûüüûüüúûü‚ûûü‹ýýüüýüûüüûúû‚úûúû üûü‘ûûüûüûúûúûúø÷ö÷öö÷ö�™˜—š‘“˜š™ššœžšœ™“›œœ˜—š›žœ›˜˜–œ››™›°š˜˜žžœŸ¡œ  žŸ™œ žŸžœ›Ÿžžž¡›™ œ–ŒŸžžš«ž›•›šžŸœŸ›œŸŸž›—’”—žž  ¢¤£¥£¦¤¤¢£¢¢¥§¤£ß¢œŽƒ‚†…†„„Ѝ©©«¨ªª©­±·¼ÃÄÈËËÌÊËÌÉËÐÎÍÌÌÈÅÇÄÅÁÆÅÆËÌÌËÐØÜÞßÜÙÛÛÜÝÙרÚÜÞßäåâãââàáåäâááãäãâäãâ©äããááââääââäàãäááãâàßáãáâãâçããäãààááàßàßÝÞ›ßáãáâáâãåãâååãâåãâååááâåããâá„àßÞÝÜÝ�…„„{}ƒ„„ƒ…ˆ†‰~~€„…‚}‚’…†ƒ…€~~„ƒ„ƒƒ„†…€†É„€‰‰‡ˆ‚‡‰…‡„ƒ†‰……ƒƒ…„‚†„†ƒ……ˆ‚€„‚€zo„„‚‚~}~„‚~|‚~ƒ„€ƒ…„ƒ€€zux|……ƒ††‰³‹‡ˆ‹Œ‡ˆ‰‡†‰…‰ˆ‰ˆw{nkmglie`_bdey‰‰‹Ž‡‰‹‹Œ‘˜ ª¬¯¯°­¯­£¬±°¯¨¦¡  ¡ Ÿ¢£§©ª«¬¯¶¸º¾¸±³³­°¬¯­®°¹¸¸¼¼½¼½º»¾¾»½»»º½¿¼½¾¾½¼½»¼»º¼ˆ½¹·»¼¹º½¾‰¼¼¾½¹½¼··¸ƒ¶´µ³Ž±²²´¶¹¸¶¸»»¼½º»—¼»½¼½½¿½¼¼Àþ»»º»º¶··¶µ·�¬·µ´¶±¬·¶³º·¾º¶¸¸³¹¹¼»¼»µ··¹¸¶·º¼·¸º¼º¹¹»¶¸¸»½“¾½»·»¼½½¼¿¿¾¼½¾½¾¼¾¿¼‚¸¾¿À¼½»½½¼½³¸»½»»¼½š¸»¹¼À¿¹»º½»·º·µ»»·¾¿ÀÁÂÃÀÃÂÆÇ¥ÅÆÇÉÅÄÆÅÅÄÅ»©¦œ¢£¢œœ¤¦®ÁÍÊÎÏÊÒÝáäïñ†ïííðïîð„òòïîìŸêëèéèæëíô÷÷øø÷ùùúùø÷øùøúùûüûüüúü‹ûüüûüûüûüûüûüˆûüüûüúúûü…ûüüûü ûƒüûüû…úùúûúûƒüûûüƒûûüû’üúüûúûúùûûùúøø÷ööõöõ�¬š™—š”Ž˜—•›šž›™™›–š™œ›œ˜™˜š™˜š›œ™™šœ››™›˜™š›«žžœ™›œœœŸŸž›œžœžŸŸœ›œšž šœ’˜š›šþœž˜›™œŸž™š™››™š™–››˜žŸ ¡¢¢ ¢¢¡¡¥§¥¥¤¥¤¦£¡¢££¢£Œ‚‡‡…‚~„†¨¦¨©§­´»¿ÆËÍÌÊÈÉÌÌÊÍËËÎÍÌËÊÉÊÉÉÅÇÃÃÁÀÈËÔ×ÙÜÚÜÞÝÞÝÜÜÛÙÚÞàááàããá”âäãâãæåäâáãæäáäåââãåãÉåãâååäâäããåããäáßßâãàáãáäâáââààáââàßßÞÞßßàãåáääãâããâåæäáãâåçäãàãäâàãäààßàÞÜÝÞ�‹„ƒ„w€‚…‚}€‚¨„~~}}ƒ‚‚€‚ƒ„ƒ…‚‚ƒ…†„††„ƒ…†…ƒ„ˆˆ„ƒ„†…‚„„…†ƒ–…ƒ‚ƒ„…€ƒ‚€u}~{|}~~š}{ƒ„~€~~|y|}…‡‡ˆ‡†…‰‡ºˆˆŠŠ†ˆŠ‹…„„…†‡Šzwhelijfdb^`\dy‡„ˆ‰…‹˜Ÿ£­°³²°¬©¬¬ª««ª­®§§¢£§¡ œ› £¯µ´·³²µ³µ´¯®®¬°¶¸º¾¼¼º¸¸½½¼¾¼¼½¾¼¾ºº¼½»¾ÀÁ½¼¾½¾¼½¿½½¼¹ºº½»¹º¹º¼º¹º»µººµµ·¶º·µ¹´²²³±±µµ¸¸¶¹º·»¼™º»»¼»º¼¼¾¾»»¾¼º»º·¹¸¹¹¸¶³¹�žº¹·¸¹«°¹¶¶¸½½ºº»½¸¸»º½¹µµ·»¼¹¹¸ºº¹º»½¾Á¼½¾¼º¿¿¼½–¾½¸¹½º¼¼»¼»¾º½½¿¿¾¼½»¹¾ç»¼¿À¾À¿ÁÀ»²¬½½ºº¼À¼»¼»¾½À¾½¹»¹¾¾¿ÂÁÀÁÀÀ¿ÂÂÅÀÀÅÃÁÄÅÄÉÆÈÆÈÃÄÇÆÊÈȽ©© ¢¨«£ œ ¢¢­ÁÌÉÕáçñõòñïððòðñïíðìîïðñîŒðíññïííîïòóøù—úùúùùøö÷ùûúûûüûûüûüûûüûüûü…ûûúûûü†ýüüýüýüƒýüýü‚ûúûúûŠüüûûüüûûüû ü‚ûûüŽûúûûüûûüûûüûûùø‚÷÷ö�¹œœšš›’š™š›œ›žšš›šš˜—˜››š››š™œš™›œœ¢žšŸ žžž™›ž›œœšœŸ žœœš‚›œžŽŸ ŸŸž›“Œ››™šŸœ‰šžœžœšœ™ž¼¢¡Ÿ ¡¢¢£¢¤¡ £¡¡£¥£¦¥¥£¥¢¡££§¦¥œŽ…†Œ†…‚‚ƒ„Œž©§±¼ÂËÑÌÌËÊËÍËÌÍÊËÍËÊÊÌÇÍÏÌÉËËÌÌÐÜÞàÝßÞÜÜÞÚÙÝßàŒâàâãäàâáããääãŽåæâãåââáâáâãââã˜äåæåãåæäèãâäçåãååãáâáãâáà­âßÝÜàâãâáãæäãäåãááãâæååãâääãäãßâãåããåáàßáßÞàÞÝÚ�»††‚†‡xzƒ‚†…„…‡†ƒƒ€ƒ€~}‚}‚}ƒ‚ƒ……†Š†ˆ††€ˆˆƒ‚†„…~‡‚„ø…ƒ„„…‡†„‡…}€„€ƒ‚‚…„…€tk}}z€ƒ€„‚~€ƒ‚ƒ‚€}…ƒ…††ƒ…„‡…ˆˆ‡……‰ˆ‡ˆˆ„ˆ„†…ˆƒ‚„„‰‹Ž‚vyjippjgeccb[cw††’›§°´³®­¬¬®«®©¨©¤¨ª©«©¥¦–§§¦¥¤¨¦ª­µ·¸¶¸¶±°±¬­±°¶‘·¹º½½¼¼¹¹º»¼½¾¼»¼¾•¿½»·»º¾¿¾¼½¿½½¿Àľ¾½½¾¢½º¼ºº»¼º··¶··¸µ¶´·´µ´³±´·¸¹¹¶¹ºº·¹·˜¹¼¹»··¹¸¸µ¹¹ºº¹º¼¹·¶··»º·º¶�¶·¸µ¹¸®£º¸´ºÀ½»ºº¾º¶»·¼·´¸·¶¸º¹º¸º¹»¼º½¼¿Ä½»½º·»¿º¼¿½¾¼½…¼»½»¼º‚¾¼½”¾Á¼µº½¿¼½¼¸¼µ¼¼Âĺ·²½’ÀþÀ½»»¼»»¼¾ÁÀÁÀÀÂÁ”ÄÃÂÁÆÆÂÁÆÅÃÇÇÈÈÇÆÈÊÉÊšÈɽ¯©Ÿ£««¡ž¡¢§°Îçîññòóòñðï‡ñðïñòóóð•íðïððóôöøøùùúûûùøõøùûüˆýýüüûüüûüýüýüüýüüûüûüûüˆýüýüýüüýüýü‡ýüûüüûûüƒûûúü…ýüüýýüýüýüû‚úùú†ùùø÷øø÷�Ú›š››’‡œ›™œŸ›šœž›™š–›˜—™˜˜™šš›™››œœšœ›ž¡œ›™œŸ›Ÿœžœœžœšœš›š™™žœ‡ž —™›Ÿœ‹˜œ—œœ Ÿ™•‘›œ¡Ÿ ›žœš››š›œ¡¡ žŸ¡ ¡¡£¤¢ ¤¥£¡¥¢¢¦¥££¤¦¦§¦§§¦¦œ“ކ‡ŽŽ†‚ƒƒƒ‡«ÆÊËÌÍÎÑÏÌË¥ÉÌÌÊËÏÎËÊÍÐÑÎËÌÉËÌÍÎÓÒÓÔ×ßÞáâßÝØÕÚÜââä‚åæã˜äãäãåâãâääãâååâäãäããâáââã‚áãä„âáäæä›âäæääãåâãááãäáààßàßÞßáââãååä“âäãäãâáââäåæååããâããáŒàâáààßßáßÞàÞÝÛ�„þ‡ˆp……„ˆ…‚„†„‚}~~‚~„ƒ‚€„„‚ƒ‚…ŠŠ‡†ƒ|„ˆ€„ˆ„„„ƒ†ƒ€ƒ€‚~~„ƒƒ„……‰†}|‚†‚‚€|~y‚„‡„|sn|€ƒƒ€…ƒ€|ƒ…‡‡†„„‡ˆ‡††ˆ‡„ˆ‰‰‡Œ‹ˆŒ‰ˆ©ˆ…ƒ‡‰ˆ‡ˆ†ŠŒ‚zwmntpjedbcb^f†¦°±²³²¯±«¬©ªª¨§©¦©­¯¯«§¨¦£¥¦¥©«ª¯³¶·º¼¸°«¨­¯·º»½½»»¹¸¼½½»½½»¼»¼¾¼º¿ˆ½¿¾¼½½»¾½¡¾½½¿ÀÀ½»»½¾À¼¹º½¼º¼¿º¶¹¼··º··µµ²±¸©·¹¼½¾»º¼¼¸º¹¶··¸º¼¹·º¸¹¶·¶·º·µ¹·´µ³¸»ºº½¹·¸�︷¹º·¶§·º¸¹º·¶¸¸·º»¶°²´³¶³·º¶ºº¶º¼»»¼¼»»¹»º½½¼»»¹¹¼¾Á¾¾Á¾½¼¿½»¹·µ¾»¾¿¾¾½¾ÀÀ¿¿¾À¾½¾¼¾¾À¸®¤¯¶´·¸´®¶¸´µ¹½¾½½¿ÀÀ¾ÂÀÁ½ÀÆÃÂÂÅÅÄÆÄÅÉÉÃÈÆÈÇÈËÌÊÉÉÈÊȽ®¨¢¦¬¨¢¡ž¡£ª³ÒïððñðïíïíòððññððòñóŠôóôóòòñòòô÷‹öøùúùûûø÷ùùü„ýüüûüý üûü‚ûûüýüˆúûûüüûüûüûü‚ûûü…ýýüüýü’ýüüýýüýýüýýûüûüüûûüûˆúúùø÷øø÷ö�«›šœœ™™—œš››˜—™™˜šœ˜‘“–—™•™œ˜››˜›œœ›››œ™›œùœœ›šœ Ÿž¡œœžš˜—•š›žžŸ ŸžžŸœœž—Ž…–”–—••˜•–™œžœžŸ ž Ÿ  ¡¡¤¢¢¡¤££¥¤£¦§¢¤£¦¥¦¨©¨§§¦¨¦ž’‡Š‹†…ƒ„ˆ°ÏÎÌÎÍËÌÍÊÍÌœÏÎÍÐÐÒÐÑÑÒÔÒÐÏÎÎÑÕÙÜÛØÙÛÞÞáàÚ±Üãååãååãäæçåääãåäåâãâäãæäåäàáàãåãäãââäâääâãåâãââáãœâäãääãââááãâäáßàßâãäáäååãæåäã™åäãååãåãâäææåââáâåæâààãäãà‚âáÝÜ�¸ƒƒ‡‡ƒ…w~ƒƒ…ƒ€|€€‚ƒ~xz|}{€„~†…‚ƒ‚ƒ„€‚€†…ƒ‚„„ƒ†‡ˆ†‡„Šˆ~€zz…‚€ƒ…þ††…„ƒ‚…„€„…„yqdovrwzulv}{|}ƒ…‚…„††ƒ†……ˆ‡ˆŠˆ‡…‡ˆ‰‹ˆŠ‹‹…ˆ†ˆ…‡‹ˆ‰ˆ‡ˆŒ„{vpsvnmh_`ac`i‰©¨¬±®­©§§­¨§©«¨ª¨§­¯¯±­¬«¬ª§¦ª­³µ¯¬±µ¶µ¸»˜°«°²¸¹º·¸¼½¼½¼¸¹¾¼»½½¸¼º¼»À¾½¼½¾»¼»¼»¼½˜»¼¼¾¼¼º¶·»¿¹·¹¼¹¹¼¼ºµ¸¼¸¶°·¶´·¼¼º·¹¹º¼½½¾½»º»¹»ºº»¼»¸º¹¸º¹¹¸¸¹µ¸·¶µµº½¹º¼¸µ¸�¼¸»»¶µ¸±ž²µ¸µº¶¹º¸´·µ²³·µ·¸·¼½»¼ºº»¼¹½¼·ºº¾½»¶¹»½ºÀÀÁ¼½½¾½½¾½©»·¹°µ¹»¶¹»¼¸¸¼½¾¾º¾½¾¿¾¼½¼¹°¤¯«®µº»½¾ÁÀÀ¿ÀÂÃÃÂÀ¿ÃÄÁÅÆÄÇÃÃÄÇ«ÈÈÄÈÇËÉÇÈËÌÊ̼®©¦£¦¦¡££ Ÿ£ª°Ôîïðïíîðîñîïðñðóˆòóóòòóõôõ†ö÷ùùøøùúùƒûüûüý üƒûüýüûü‰ûüúúüüûüýüƒûüûü„ûüüûü†úüüûüüû ü‚ýüý‚üýüýü…ûûüüúûüûˆúùøø÷ø÷÷öõ�¶›ž˜˜›•‚•™š–›˜šš™–˜—’”˜˜™™˜œ›šœš›™›š›—›œ›ŸŸž œƒœžž«š–˜’“™›™š››™˜›œŸ›žž›œ›š’‡–››Ÿ¡  žŸŸ ‚¡¢ ˆŸ¢£¢¢¤£¥£”¥¤¤¥¥£¦¦§¦¤¥¨¨§©ž“Ž‹‰”…†…ƒ„‡Œ¯ÍÌÉËÊÉËËÍÈËÌ‚ÐÏѤÏÐÒÒÓÓ××ÜÞÛÝÞÝÛÜßÞÛÝßâßàãåããåæäããææãä¤ááâåãáâãââßàááâàãäâãäââáâãááàááãââäâãåâ„äááãáŽàáàáãäáâæãâäæäã“âáâååãæãäáâåâãäãáâäâƒãàßà„ßÝÝÞÝÜ�²‚ˆˆ‚‚‡‚h{€‚}„‚„‚}y}~€„„††„‚„€„ƒƒ„‚|‚„„ƒ‡þ„…ƒ…„ˆ‡ƒ‚„~zvv~}~{{|€€‚~ƒ‚‚„~|€}ufpps{‚ƒ†ˆ††‚……‡ˆ„„‡†‡††‰Š‡ˆ‰‰Šˆˆ†‡‰ˆ‰ˆ‡ˆ‡„‡‰‰ŠŠ†}vssrplhca^ccfˆ¦ªª©ª«¨¦¨©¦¤§ª«­«¨«®­®¬†°¯±²µ¸¶œ³´´µ°²µ´¶¹º¸¸º¹¸»¼¼¾¾ºº¾½»»¼»Ñ½»»º½¾¼½º»¸¶»½º½¿¾·¸¸··¾»º¹¹·º¼º»¸º··¹¼¼¹¶¸¸´µ¸¸º¼º»¾¼¾º¹·º¼¾½½»»¸»¸»¼º¸º¼º¹¹·¸ºº¹Œ¸º¸¶´´¸¼¸º¶·¹¼�踼¹¼¹º¸™¬¶´º¸º¹¸·´³·¸¹¸µ¹¸»¼¹¼º·¶·¸¹»½¼½º½¼º¹»½¾¾¿¼¿¿¼¾¿¾¿¾º»¼½»¼º¸º¹¸°®²¯®²¸»º¾ºÁÁ½¹»½¿¾À½»¿¿À¿Á¿À¿Â¿¿ÀÁÀåÃÀÄÂÃÄÇÄÉÅÃÇÈÄÅÆÅÅÄÆÅÇÈÊÈÉÉËÎÌ͸°¤¢ ¥¥Ÿ  ¢¤¥®±Òíïîííïððòñïñòóòòðñòóóòòôôö÷øù÷øúùùø÷÷øúûüûüüûüûüûüûüýýüûüûüûüƒûûüûˆüûûüüûüûüûúûüüûûüüýüüýü„ýüüûüýü‚ûûüûˆüûùøø÷øöõö�‹™œ›œ›~Ž˜—š™”–”—˜š™˜š˜›››˜˜š™™šœ†›žššœÕžœžžžž›œ›œ›š˜š™˜’“’˜š™šŸ œ˜›œžž žŸ ¡ ¡Ÿ Ÿ¡žžŸ¡  žŸ  ¡¡££¦£¥¢¢¥¨££¤¡£¢£¤¥¥¦¥Ñ¨ª¨©š“Љ†‰ˆ„„ƒ„„…ŠŒ«ÊËÇÈÉÉËÌÏËËÎÌÏÍÌÌÎÑÒÑÎÍÏÔÕÙÞÞÜÚÜÝÜÙÖÙÞßÝáââààâãâáââããáãçââãâãà—äââáàáààáäãâàâãâäãááàáâàßáàá ãåâãâááÞßàâáßáàáâáàâáàâãåããââãâåãŒåäãâáãààãäãáâŠáßßááàßÝÝßÝ�Ÿ‚‰‡†…ˆ†gw€€‚„…ƒ„ƒ€~„€~€€…„‡ƒ€ª…„ƒ~ƒ‚€„„ƒ„„…„…„…„„††‚€ƒ‚€z~|wtwqru}í‚}ƒ„€}|€ƒ„†‡ƒ†ˆˆ‡‰†‡ˆˆ…„„‡…†‡„ƒ†„‡‡ˆ‹Œ‰Š‡‡ŠŠˆ…‡‡‰ˆ†ˆˆ…ˆ†ˆ‰ˆŠŠŒ~rqopogccdcdffƒ£©¨¥¦¨§¨©ª§¦¨««¬©§©«­¬«ªª°³¶ºµµ´—®«­³±¸¼»·¹»·µ¸º»¹»¼¾½½¼»´º¹»½ºº¸ºº»»ºº¹¹»¹¹½¾»µ´··¸¼¹·¹º¸º¸¶¹·»¶¶·º»·´µ¶·µ¹º·»¬¿¹¸¸º¹¸¸¼»¸¸º¹·µ¹»¹º¼»¹¶¶¸»»¹¸ºº¹¹¶¹¹·¸ºº¸¶¶·»�„»º¹º¶‰¨¡¶¸¶»··µ´¦¼¹¹º¶½¼¼¹»½¼½»»¶´¸º½»¸½½»¸¹½¼¼»½À¿½¼¾À¾³¿¾ÂÀ½º»¼»»¶³¸¸¶®²®µºº½¾¼»½À¿¿ÀÁ¿½½¾À¾ÀÀ½ÀÀÂÁ½¾½ÁÅÃÂÆŒÇÇÄÅÇÆÆÇÇÃÆÅǪÈÊÇÌÌÍÌÍÈÌÐÒ§¬¦£ ¥§ Ÿ ¡¨¯®Óìíîìíïññóôòòñóòóòôõ÷øøúùøøúùøø÷øù ü‡ûüýüûýýüýüýüýüûü…ûüüûúü‚ûûü‚ûûü…ûüûüüûüˆûüüúúûüûüýüý‚üýüƒûûúû†ùø÷ö÷ö÷�“œ›š˜™˜Œ…˜™—œ™˜—•–•𣛙œœš›œ›œ˜•™›œ™ž›™˜œœ›œžžœž Ÿ Ÿœ™š›œ–“™™–“•˜™œ› žŸ¡¡ ž Ÿ   Ÿ ¡Ÿž ¢¡Ÿ£Š¥¦££¥£¤¥¦¢¤¶£¤¥§¥¨¨©¨¨¥ª­®‹‹ˆ…Š‹ƒ€‚‚…Šˆ¬ÈËÉÈÉÊÌÌÐÑÏÐÍÑÍÍÐÏÐÏÏÒÕ×ÞŒÜÝÜÚÛØØÙÞâåâáŠßãâäãâããâãâääââááàââáââäãáàäááãàãàáàáßàâãåâàáßßàßâããâàßãààßâàáàÞ‡àáãâããâå„äããæä˜åääáâãåäâããääããâßàßßÝÝÜÝÜ�³‡†‡„ƒvm~€‡ƒ€~‚€„…ƒƒ…†ƒƒ‚„~{„‚ƒƒ€}~€„‚ƒ„©ƒ…†…„ƒ„†ƒ„ƒ€}z€~}rvqz{|€€€‚‡ƒ†‡‰ˆ‡‡…‡‚†ƒ†—‰‚…‡‡†ˆˆ†Š‰‡Š‡†ˆˆ„ˆˆ‡‚‹…‰£ˆ‹…‡Ž‘mwrqmoogadd`cfa£¥¥£¡¥¨¨«­­©¨¬¦ª¨§¨¬¬®²¶º¸µ´³·±¯®­­¶¼½¾¼º¹¸»»¶¸º¾º·»º»¡¹»»¼ºº»º¼»¼º¼»»¹¹»º¼º¹¸¼»¹¸µ¶¹¹º¼¹Ä¸¹º·¸·º¸¶´µ·µ´¶µ¸µ·¸µµ³¶¸³²´¶µ¶¹·¸¸·¸·¹¸º¼»¼½¼·µ··¼º¸¹»¿¹³¶º¼·µ··µ¶¹¸¹�˜Á»¼º¶¹¸«Ÿ²·´¸´±¬µº¼¾»º¶²¸Â¼º±º¼º´º»¼½¹º¼»»¼¹¸º¸´½»¿¾º¼½¿Á¿¿»½½¶»¼º»¼º¾À¿¼¼¹»µ»¾¾¿¾½¾¿¾¿ÁÀ¿ÀÀ¾»½¾¿¿À¿¿½½ÁÆÆÅÆÅÇÃÄÈÇÆÆÉÆÆÅÅÇÉÈÉËËÌÍÌÎËÕÙÞæì¤ª¦¡£¥¦ œž¡ ¤©«Òì—íîíññòóòññóòóóòòôöøøùúúù†ûùùøùúûúüýüûüûü„ýüüýüŠýüüûûüüûúüûüƒûûüûüŠûüüûüûûüüúû‹üüûüûûüúúûüûüýƒüýýüûüƒûûüû†ùø÷öøöøö�™¢ž›˜ššƒ”˜•š—”•›œœ››™–™šµ˜œš“š›š•››››œ›œœš™›™•››Ÿ™œžŸŸž›œœ•›œšœœšžŸžœœ™š”šž‹ŸžžŸž ¢ Ÿ  ž» žŸŸžž¢¤¢¡£¢¤¢¤¥£¤£¥¤¥¢¢¥§¦§©¨¨©¨ª¨°·»ÅÇ‡Ž‹†ˆ‹Š„€ƒ„…†«È ÊËËÍÍÐÏÐÏÍÏÎÑÑÎÐÑÕ×ÙÞààÞÝÞàÝÚÚÜÞà©âãâãáàåäåãàßåââáàâáåãâáàâáâááàáåãâáããâàáâ߇ààÞàâãâá¸ßàßßàßâàáßààâààßàßáàáàââÞááàßâàßßáãâãäãáâãåãåæãáäâããäåãâä‰ãàâáàßÝÜÝÜÛ�ºŽˆ‰ƒ„ƒ{l{~}ƒ{v|ƒ…„ƒ{{ƒ€‚‚…‚xƒ€{~ƒƒ‚‚ƒ{}ƒx€„†…}ƒ†…—ƒz‚ƒ‚ˆ‡…{w€‚€‚„…ƒ††‰…†„Œƒ‡ƒ…†‚†ˆˆ†‡‡†ŠŠ‰ˆˆ†¥„†‡‡…†‹ŠˆŒ‰Š‡‘—š§«kurmonohddc^]`^ƒ£¡ ¤©«œ©¨¬«ª¨¥¦­±²³·ºº¸¶´³²°°²³´¸»¹¼åº¼¼º¹¸»»¸¶¶·»»º¸º»¹¹¸¸º¼¼º¼½¼º»¼¹¼º»¶¹¸¶¸µ¸¶·¹»¹¸º¶··¶¶º¹¶¶µ´µ³³¶µ·µ´µ³´²¶³³´³µ´µ¶³¶·µ¸¹¹¶¸¼½¼¼ºµ·º·¾¹Žº»¶´¸»¿¹·¹··»º·¶�œ½¼º½»²·¹¢¦²¯¸·¶»º¼¿¼½¸½º»¹¼º¼·º½¼¹¼·¹º¼ºº½¼¥¾»½¿¾ÁÀÁÀÁ½¾¾¼¹»º¼¼»½¾ÂÁ¼¼Á¿Àµ²³¾¿ÀÀ¼À½À¾¾¿¾Á½½¿¾»ÀÁ„ÆÂÅÃÆÄÆÆÇÆÆÇÉÇÈÉÊËÊ¡ÍËÌÑÓÛäéïîîì쾯¥¤¥§¦¢ ¡¡£¢¨«Òìëëíð•ñòðòóôôóòõ÷øùúù÷ùúûûùúû…üüýüüýüýûü‚ýûüƒûüûüý„üüýýü‚ûûü‘ýûûüüûûüüûùûüûüüûüûü‚ûûüû„üûüûüûü…ýüüûýüˆûûüûüüûûü†úúùøø÷÷ø�¬žžœžœ•šœ†‡“‘™š™œ››žœ™žšœ›››œœ˜š››™›—ššœœšœœœ Ÿ ŸŸ››œšœš›œš›¡ ›Ÿž””žŸ ¡ž¡Ÿ¢  ŸžŸž œœœ›Ÿï £ ¡¡¤¢¤£¥£¤¥¤¤¦¥¤¦¨¨¦¨§©¨§¨¬¯·¿ÄÉÉÈÉÉœ‘‰‡ŠŒŒˆ„……„ƒ…†«ÈÆÆÉËËÌÎÑÌÏÏÑÐÑÐÔÖØ×ÙØ×ÛÞááÜÜÞßÞááàáâãæãáâáãäãââàßâßááâàßášâáãàáãâãääáââåäááãâááàâáààá‰ààßàßÞÞàÞà›ßßàáãâàâàââàÞááàâßàáßßãâãáâàáâàâäåäááàâáàãåäáàãáåáâäááàÜÞÝÜ�‹Šˆˆ†…‡oo|z}¦‚‡…„~€ƒ…ƒƒ„„}€‚~}€‚„„„ƒƒ„†‚ƒ…‡†‡ˆ„‚‚€€ƒ~·€ƒƒ†‡†ƒ†‚vxz……„†…ˆ„…ˆ‰‡ƒƒ‚†€‚…ƒ‚„‡†…††‡†„‡†ˆ‰††ˆ‰‡‰Š«ˆˆ‡Š‹‰“š¥ª­®®ª©wqnonnjfg`_^]\ƒ£¥£¤¦§§«¨¤¨¬™©¨«­­°¯±°¶¸¹¸³°´³µ¶¸¹µ»¼½¿½¾½º¹¸¶¼»¶¹¼¹¸‘¶¹¼½½¼½¾»»¼¿½¾½»º¶ªº¶·º»¶¹º¹·²²µ¶¶´³·¶´µ¸º¶·µ³µµ´³µµ²³·¸³´·¸·¶µ¸»º»¸¹·»¹º¼¸ºº¸º·¹º»¿À½»º¼¿¾»¼�…¾¿»»º·£¬š´¶·¶·¶º»»½»¸»¹º¸ºº»½º»º¼¼ºº·»¼»º¹¼û¿¿À¾¿¾½¼¼½»½¾½À¼¼¾¼¼½½¾¿¿À¼½¿¼´´»¼¾¿ÂÀ¾À¾»¾À¼À¼½¹½¾¿¾¿¿ÀÆÅÄÃÂÆÄÄÃÄÄÅÈÇÇÈÉÇËÈÊÉËÌÎÏÎÚãìðïîíìíîìÈ­¢Ÿ¦¨¤ žž  ª¯Òììíîíîííïòòðô“õ÷÷òð÷øùúùøùúûûúüýûü ýüƒýüýüûü‚ýýü„ýüüýü†ûüüûüüûü‚ûúûüúüûüûü„ûúüûü„ûüüûü‚ûûüƒûüüû…úøø÷ø÷�«Ÿ¡œžžšš›}”˜™˜™˜™š››˜›šœš›™›š››œ›™š˜šœ››šœ„žŸ žœœ››žœœžœœœž·œœžœ•”œžŸ¢¢Ÿ ¡ž ŸœŸœœ˜œœœŸ£¢¢ ¡¤¡¢¡¢¡¢¦¤¥¦§¥¨¦§¦§©ª”µ¿ÆÊËÉÊÆÇË˦‡ƒŠ‰ƒ„‚¤†‰¬ÇÆÆÉÇÊÈÇÌÎÎÍÑÑÓÓÖ×ÐËÕØÙÛÛÚÜÝÞàáßáßâæãååãâààáàâáàáààá‹ãäåæããââãâäâ…ääááãâ‡áàãáâááâˆáàßÞßáßßàœááàââßáàââßßàâáâàßâßßäáãáàÞßàŠÞàãäãàáßààâŽáàáãàãàÞáààßÛÝÝÚ�þމ‰‡„ƒ„vd„~ƒ…€~‚ƒ„‚‚‡ƒ}ƒ†ƒ€~ƒƒ€‚„ƒ†‡Š†‚„…„‚ƒ…†„‚ƒ‡…‚…ƒ„……‚‚…xy…ƒ„‡‡ˆˆ†‡…†‰‡‚ƒ€€{€ƒ€‡‡…„†ˆ††„…‚†‰…„‡‹ˆŠŠ‹Š‡¼‹ŒŒ˜¤°²°¯«¬¬«­Štkipqlfca^^[^\¥©©¥¡¥¤¡¥¥¨¬ª¨ª¨«¬§¡¨¬°²®­®±±¶¼¸¸ºº¿ÅËÏËÉÁ¾½¾»»¹·½½¸º½»º¹¸¹»º½¼ÁÂÁ¾»½½¹»¼¿¾¿¾¼»¸º¹¶º»¶µ¹»¹»º‚´µ¶½µ´¶¶µ¶¸¹¸´¶´¶¸µ´¶µµ³¶·³µ¸·¹·¶´µ´¶µ¸¹¸º·ºº¶¶·¸º¸¸º¹º»¸º½»º¹¹º»½¾�½¾¹µ´´²µ´¢«¶´¸£»·¶¸·³··¹¼½º»¹´»¶¸¼½»·¹¶¶¾º·¹¶¸¹½¾¾¼Œº¼¼º½½¾¾¿½¼¼½ºº»¹¾¾¿½¾¼À¾¿À¼¾‚½½¼µ½¼¿¿¾¿¿Á¿ÀÂÂÄÅÆÅÅÃÃÆÄÀÄÇÉÉÆÈÉÉÇÌÁÅÍÜæíòðñððîííîíì捻¦¦ ŸžŸ ¥®Óìííïïðïîïñðóõ÷÷ôô÷ùûúùø÷÷úûûüú‚ûüý‡þýüûûüûüýüûƒüüûýƒüüûü‚ýýüûü„ûúûûüûü‚ûûüûüûü„ûûúûü„ûüûüûü‚ûüû‹úùûûüûùûúùúù†ø÷öö÷÷ö�ŽŸ œšš™”™˜†Œ˜—š™¦˜˜™˜”˜ššš››—›˜šš—™—–›˜š˜ššœ›œœ›œžžœœžš™›™žž ž  žžžœ›žˆžŸžž  £¤š¡¢¤¢ž£¥¦§¥¦§¨¥¨ž£«¸¿ÇÎÎÍÌÌʇËÌɤ’‹ˆŠ‹……‚‚‚‰¬ÈÉ˰ÌÊÉËÎÎÒÕØØÔÔÚÞÞÜÜÙÖ×ÛàââáàÞàââåæéçèæãåãâááâääããáâáâãääãèêêéåäãâ†ããæåáâã•áßåäåäâäãââãäãäãßßáâáâƒäâáä†âàáââàáâäæááââÞßààßàßáâßßàáààâãâàßàâà‡ÞßÝÞÝÜÝÝÜ�‹Ž‹‡„…„|ƒ€lt‚¨~€~y|‚‚…†‚„}~€„„ƒ„~€}{‚ƒ‚‚‡…„‚„ƒ~ƒ †„ƒ…‡†‚‚„‚~‚€…†ƒƒ‚†ˆ…ˆ…ƒ†„„…ƒ€‚„}}€ƒ†Ý‡ˆŠ†…‡…‡‰ˆ‡…‡Š‰‡ˆ€Œž¦²³±±°¬­ª®¬¨ª‡yqnppnjea^^Z[\ƒ¤¦¥¥¦¦§¤¦§¨­¬­±ª§¯´¸³®«¥¦®´¶´µµ´¶º¿ÃÈÎÎÈÀ¹¼«»¼¼»½¼º¼¾¼»º¼¼¿ÃÉÎÓÌĽ¼¿¼»½¿À½½¾½»»½¸´º¼¸¸¹»˜¸º½º¹½¹¶·¹·¶¹¸¹ºº¹º¸·¸¶¹¶†±¶¶´ºº·Œ´µ´´³·¹¸ºµ´·´‘µº·¶¹¶µ¹¶¹¸µ³³¶¶µ¸¾�§»´±¶·´µ¶´¯Ž¯µµ¹»¼··º»¸µ·»»ºº¸¶·¸¹µº·»¹º¸¨·¹¹¶·¾¼ºº¸º½¾»¹¹º¼»º¸¹­±µ¶·½¿¿½½¾¾¿»¼ÁÀ¾¼Š½¿¼½½¿¿ÂÁ¿Áœ¿ÁÄÁÅÄÃÁÄÃÄÅÅÆÇÈÈÉËÇÊËÉÐåïñòñƒððïížìì¿®¤¤¦£¢ œžž Ÿ¥­Öííïñðññòõøùøù‡úûûúø÷÷ù‡úûúúùúûü…ýüûüûüýüƒýüýüˆûüüýýüüýüûü‚ûüû’úûüûûüüûüüûüûüûüúûü…ûüüûûüƒûüüûˆüûüûúûúüû…ùûûúúûƒüûúùúù‚øöõ�¬ž™”™›˜—š™“p’–˜›œ™™š›™—™››š˜—˜™™•›˜›™™—˜™™˜™Š›š›š›œšš›¯™˜š“——˜ŸŸžŸžŸ›¡ žœœ›œŸœžžŸ¡¡Ÿ Ÿ  ž ¡¡¤£¢ ¢•££¥¥¤¤¦¨¦ª©©­ÂÌÍÐÑÏÏÐÌéËÍËËÉŸ‰ˆŒˆ‡†‚‚€~‚ˆ°ÉËÍÎÍÎËÒ×ÚÜÚÝßÝßßâàÜרÛÚÜÞáßâààâäèçèçääâäåææäãääåèçåâæäãååæééçéèéèååãâäååçåäâáãäããááåƒããâä…æçâääáœäãåãææãäåäåäâåæäàâãâàáãæäáâáà‘áßßàÞààßßâßàâãâàÞà‰ßßÞßÜÛØÙÜÜÚ�ªŠ„„‡…€‚‚{Wy‚„ƒ„ƒƒ||€‚‚~~€|‚{‚€~}‘~ƒ‚‚‚ƒƒ€€‚€€Äuy|}}„ˆ‰‡……ƒ‚ƒ…†‚‚„‚€ƒ„~„„‚ƒƒ‚„‚„‚…‰…‡ˆ‡††„†……ˆˆ†……‡‡Œ‹‰£²·µ³²°²¬Â¨«©¦©„yrormkkea[ZX[]†¥§¥©ª¨ª«±µµ´µ¸º¹··³®¨ª«©¯µ¶´³´¸½¿ÄÇÆÃ¼»½À½¾À¾¥ÃÀ¼»¿¾¼¾¿ÁÆËÐÏÌÇÄ¿¼¾¾¼»½¿½¼½¾¼¼»¾»·»½¹º½À½»¾»¼½¾¹¹½¾¹½…»¼½¼¿»—··ºº»»·¸¹·µµ¶³³²¶´·µ³´¶´·µ´¶µ´·µ¸µ´±±²²±·¹�­¸´µº¸·»¹µ¸”ª·¸¹¶¹¶·¹»¸º»··¼»¹¸º¹´²·¶·¸··º¶²²¶·ˆ½¹·ºº»»¾ºÌ··®®¶¶º¼¼¾»½½¾½Á¿¼º¹½¼¾¾¼»º½À»¼¿À¿ÁÄÃÅÇÁÁÂÁ¿ÀÆÄÁÁÄÅÄÅÃÈÆÉÊÅÇÓÝçñôòðïóñòñòðîîí¬ë꼬¤¤¨¨¡œššœ ¢§¨Ñððîíðóøúùúúùûúûûùöõ÷÷úúûúùúüý„üüûûüýü…ûýýüýü…ûüýüý üû‚üüû‚úüûüû„úûûüûƒüüûüûˆüüûüüúûúü…ûúüüúû“úüûûúûúúùúúûûùùøùùøù†ø÷öõöõö�³›——›œš››šœy™™š™›™™›œš››˜™›š™›š•“—–˜™——›˜””——™˜›™˜›¸šœ™š›š•–ŽŽ——›žœœŸžŸ¡žœ››Ÿ››Ÿ›ŸŸž ££¤¥ŸŸ¡ Ÿ ¤¢ ¡¢£´¡¤¤¦§£¦°¼ÄÎÑÒÐÎÒÐËÐÓÎÉËÌËËÉÇ›‰‰ŽŒˆ„€~~„„«ÍÌÌËÍÒ×ßàžÞáâàáÜ×ÔÖØÞßÞÝÝààåáãåêéçåããåáäç™èáããäçæãæçäåãåæêéæçæçååçæå„ââáâáãœààââäâäáâàâæäááãââàâáåäåæääåäŒããååââááâáääâƒáââàá†ààáÞâà߃àáßÞ†ßÝÝÛÛÚÝÜ�‚……†“…‚ƒ‡_rƒ„‚‚ƒ‚ƒƒ}‚~À~}€~y}~}}‚|xyzz~…€€„…„€‚‚|vwpu~~‚†…†„ˆˆŠ…‡ƒ€ƒƒ„…€~‚„}ƒ„þ…†ˆƒ„…††„ˆ†…†ƒ††„„‡……†„‡”¥­¶¸³³²²±²¯³®«ª¥¨¨¥§€xsoqplie`X\Z^Zª©¥¥¨®·¸¸¹»»¾½º¸¯§£©¬³±¯²µºº¸ºÁÉËÌû¹¹º¾ÈÄÃÆÊ¿¾¾¿ÆÅ¼½À¾¾ÀÇËËÍÉÄ¿¾‰ÂÀ¿¾¾¼¼½»‚º¼»Žº¼º»»¹¸»½½¼»¸¹»²º¾Á¾¾À¿¿¾À¾»½¾¿ÁÀ¾½»º¼¾Á¼¶¼»¹¸¸º´µ´¶µ¸·µ·¶³µ³´³³µµ´¶µ„¶´³µ»¼�Û·¹½º»»½¼·´²½»¹º¼ºº¹·¾¾¹µ¸¼¹´¸º´µ´µ·¸·´´²´®±µ·¼¹¸¹»º¹´´¸¶°±¬œŸ²»½»º»½¼½À¿¾¿½¼º¼¼¿½½¿»½¾¿ÁÀÁÀÃÆÆÇÅÄÃÂÃÇÄÄÂÀÃÅŠÆÄÅÃÉÓâêóòñî¹ïïðòññïîíìííìÀ¬«¤¦§žœ™œ¡¥§¤§µãîðóøûûúøùúûúûõòóøúùúûúûüüúüý†üûüýýüýþýþý…üýýþþýüˆýüýüýüýýüûüûƒüüûüûü…ûüûüýüý ü…ûúüýûüû üûƒùúûùŽúùúùûúúùù÷ø÷÷ö÷ö�£›œžœœž›—“€›š››œš˜š–˜œš–™š˜—•–˜ž”•”–“•—›˜—šš™˜””—•‘’“›œ››œ” Ÿžžœœ›žžœŸ¡Ÿ Ÿ†¡¤¤¥¤£¢¥¢¸Ÿ¡£¤¤¥¢£¡¦±¾ÆÏÎÐÐÎÎÍËÌÉÈÏÐÎÈËËÉËÊÉ ˆŒ„‚}€„†‡„¸ÊÏÓÙÞߎÝßáßÞÓÎÒØÝÜÝàßàŸãæçãââãââàâççäæçåççäççåæâãäççèèç¦æäåçèææåææçãâáàäàßÞàââàáãâááãàáààááßáàá­âåääåâãâããâãââãäãááääãäãäâáâãäààáàáåãáàßáßàÞßàŒááÞàßßÞÜÞÞÝÛÝÚ�®†‰Ž‡†‰‡†„zg„…ƒ„„††ƒ„‚€{€}€{}|{|{{yzyuxz{‚­|w{zvup_czƒ‡ƒƒ„†…ƒ„‡ˆ‡ƒ„‚…‚‚ƒ„‚‚…„ƒƒ‚……††‰§‡…‚ˆˆ‡…„†„‡‰†…„‚ˆ•¥°¶»·°°­®«ªª¯¯­ªª©¤¦¨ùƒxxpoqggcddhc]^b˜¥«®³º»¶²´¸»¹³¦£§¬¯²µ·µ´·½ÁÉÈÃÄÀ¿¾»·»½ÁÅÈÃÇÉÃÂÄ¿À¾½¾ÄÇÇÌÍÊÃÅÃÂÃÆÆÁÂÀÅÈ¿¼¾¼¾¹¶¸¹º·½¼¼º¹º¶·º¶ºº¹·¹º»½»¾ÀÁ¿À„¾ÀÂÀ¾”Á¿¿Á½¿ÁÀÁ¾¼½¼¼¾ÁÀ½»»½…¾¿¹·¹·¶·‚¸·¹…¸ºº¸º½¾�¤¸¶·º»¹º¸·´°–´¼º¹¼»»ºº¾¾¼»º»¸¯µ¶º¹º¹·º‰¶µ¹³´¶·¶²µ”´¬±£¨°¸º¹º¼º¼º¼½¾¿½½¾¶¹º¹¿¼¾½½¼¾¼½¿ÂÂÁÀÁÿÃÇÅÂÈÉÁÂÆÁÃÆÄÆÄÈÆÅÊÔàìððñïìðïîíîïíïî«ííìíí뿯©¥¢£¢¡ž £¤¥Ÿ¥¡»ëøøùùøùúûüúöôô÷ûûüûûü†ûüýýüýüƒýüû ýþ ýüýüý…üýüýýüûüû…úûüûûúûüú ü„ûüúûüýüýüƒýüûüŒûûüüûúûûúûúûú‚ùø÷ö�…œ™™œœ›¾š–“z•›š›œš›žžœ›š›™’•–›š™™˜››š˜–™•–——•“–—•”“Œ’…‰’—››œœ›šœŸ´š›šŸžž›šœœŸ¡¡ ŸŸ¡Ÿ ¤£¢§§  ¤¡¡£¢¤¢¦£¥¨¯ºÆÌÌÊÉÉÏÎËÊÊÉËÊÉÉÊÈËÊÆ ’‰‡‰ˆ†‚„‡……~|ÆÛÜÜÝ àßÞÜÕÐÏÖßÞáàßáããàáèêèãâáãâàáàååä夿åâåçååçåææçåääææççåãæäââããæäáâàâàßÞà‘ßàáßßÝßÝÝßÝÝßÞàÞßáŠåäáããâààâãâˆßâÞâäãääâ‘ãßâßÞàááÝäæãàÝâáàá‹âàáßááßÝßàÞÝÛ�­‡…‡ˆ†‡††„yc}††ƒ„„‡ƒ‚…„„ƒƒ‚z|}€~€~€€}~€{}{þ€}{zrthmv}„ƒƒˆ†‡ƒ…ƒ‚‡„ƒ„…‡„ƒ„…‚ƒ„…‚…„‡„‚…ˆ……Љ‰Š€…Љ‡‰†„ƒ‹‰ˆ–¢´¹²´¯®¯««ª¬«¦©ª©¨§¨§¥¤¥§¥‚{wrmnligfgfc[_Tg ¸¹¶¶³´³´·°©¥¦°·¾º¶¶¸º»¿ÁËÌÑÎÀÀ¾½¼»¸¸¾ÁÄÀ¿ÅÂÀÁÀÀ¾½ÂÅÆÊÌÁÂÂÀÄÆÊÅÄÇż¿ÀÅÈ¿»¾º»¹¶·¹Ï¾¼¸·¶³²³¸µ··µµ¸·¸»¹¼¿¾½¾¿Á¿Âž¿¿À½¿¼½¿ÅÁ¿¾¿¾¿¿¾Â¿¾ÁÂÀÀ¿ÂÁ¾¾¿¾½½»»¸º»»º¼½¼»»º¹¹»�•µ·¶¸¶·¹»µ¶µ¨Ÿº¹·ºº»º¼¸¹œ³´¶»··¸¹¹·µ¸º»»¸¶¶³¯¸³²²­®°µ»‡½»¹¶»»º»“½½º¾º»¼¾º½»¿¾Á¿Á½À¿À›ÃÂÁ¿ÄÇÅÊËËÄÍÎÑÜÑÄÂÇÇÑàìñòïëí†ìêëìëìíƒììíì”í鯪§¤ ž¡ Ÿ ¡›¬ºÜøùø÷÷ö÷úûûúúûúûûüýüƒúûû üûü‚ûüýüýüýü”ûûùûûüúûúúûûùúúùùøùúù’øùøúùùúúûüûúûúûúüüû†üûûúûûüûüûüüúúûüüúûûùûûú‹ùúúøùù÷öõööõ�Â˜š™›™™š˜™˜Œ‚š››šš››žšš™˜™šš”•–›˜—š›š™—ššœœ™˜–”𕔔ޑ—›œ›žž™œ›œ“ž››œ›šžž Ÿœž ž¡¡Ÿž¢¤£¨©©¢©«¯º¯£¢¥§®»ÇÍÐËÇËÉÉÊ£ÈÉÊÆËËÌËÉÉËÌÊÊÉÉÅ£’Œˆ…„‡„ƒ…„~z{…µÜ¢ÝàÝÛÙÖרÜßâààáâàâåæçèèæäáãáæáãäâäãäã•åãæçèéèêèéäâãäçéçæãääâäæããáãâàâààáâß…ÜßÜÚÜÝ“ÞÝÝßÞàáâääâãáâããååäâ”áââáãàãåäáâåãâàááââàã–àßßáââäâáãáàááàßààßÜÝÝÛÙ�ø„†……€ƒ…ˆ‚€thƒ…‚†‚…‚€€~€‚y{}€~|ƒ‚‚|‚ƒ‚{zu}{wqvu{‚‚ƒ‡ˆ†‚‡‡„„€…†‚€€ƒƒ…€‚‚…€†ƒ‚…„†„ƒ„ƒ„ˆˆ‰Ž‹‰ƒ˜£”…~†‰”£´¸·µ±©«ªÙ§¥¨§¥¤§¥¦§§¦¥¤£¢¥¤†{zsmkjjgcbc]UV]^ˆ¶´´²´³­©§ª­´¶¹µ¸¸¶·º¾ÄÈÍÄ¿º¹»½½»¼¼»¼¾¾¼¹¹½½¾»¾ÂÇÏÐÌÍÇ½ç¿ÆÆÇÃÄÄÁ¼ÀÀÁ½¼»¶¶»¸¶µ·º»·´±²°¯²¶³³µ³³²´·»¸¹»¼¼½¿¾¿ÄÅ¿»½À¾¿ÁÀº¼¿¿¾¿ÄÀ¿ÂÁ¾½¿ÂÁÄ¿½½À¿¼½À¾¾½¼¼»¹»¼¹¼¿»º¸º³´¶�þ¹»¹º·º¸»¹º··”¬·»¸¹¸»¸¸µ¶µ´´¸´·¶¹µ¶¸»¸¹¹º¼º»¸³®¯®°³°²·¼½º»¹ºº¹ºº¼»»º¹¼»¼¸»º·»½»¾¾¿¼¿ÀÁ¿À¾ÁÀ¾¿Á¾ÀÁÃÄÄÁÀÄÒÞïñãËÎÞèîïíëìêêììíïíìëé‹íêëììííëéêëìžé𪧣Ÿ›ŸŸžœ˜“•¯²Ñ÷øøùø÷÷øúùúûúûšúûúûûúûúüúûüûüûýýüüûüûûüüûýƒûüûüûü‚ûüû„úúûüûƒúûúùøù‹øùùøøùúùøùúû†úúùúùúû†úûûúúùú†ûùùûûüû†üûûúúûùúùƒúùùúù„ø÷öôõ�¤œžœœšœœœ›š›{˜™š›œš™˜˜—–—™–™˜›˜˜šœš›œ“™•‘”•’–šžžœ›œ›œž¹œ›œž˜œœ›œœžŸ ¡Ÿžž¡ žŸ žŸ ¢¡£ Ÿ¡­·ÉÐÀ«®½ÇÊÈÌÌÍÊÈËÊËËɃÌÇÊˬÊÈÉÊÊÈÊÆ£”Œ‰…ƒ„ƒƒ€{ss‰Š©ÙÜÜßÝ××ÜßÞàááâáãâãâ·ãåæåããááâæããåãäææääáâåææéëìéèçåæãäåäåèæåããåãååææåæåäåãäâ…ßàßÜáÞß“ààÞÞââàâäåääåáâääâãä›ãâãââßãäãàâæäâãâáääáâàãàÞÞàâáâ‰áâáàáßÜÝÞÛØ�‰‰Š‡„~…††…„†`sƒƒ€|{|{~y~~}€‘‚‚|uxw}}yz}†…ƒ„‚†ˆ†‡…„ƒ‚‚„†ƒ„®€‚„ƒƒ„†ƒ„…†…ƒƒ„ƒ„„…„…„œ¶¸ ŒŽ¢ª±µµ­ª©§¦©©­­¨«¦¤¤¦¢¤¦¥£¡ ¤¦¦£‡}xplmgghb]`[ML\Xw²²µ²°­ª¬±¸»È·¸¹¸º¼½½À¾¹·¹»»½·º¼»½»¾¼»·¶»¾ÂÃÊÐÒÏÉÃÀ¿»½¼¿ÃÄÁÀ¿½¾¾¿½¾¿¾½»¹º½½¼º¶µ·¶´±µ²³Š²´¶µ¶µ·¼»¼»…¾½ÄÅÁ½¯ÂÀÀ¿À½»¼¿ÁÃÁÁÃľ½ÁÃÀÀ¿¼½¾»½»¼º¹½»½¾¾»»¼¼¾»ºµ¶³´�úº·¼º»¹¸³¶·µªŸ´¶¶·¶·´µ¸¸¶µµ··µ±²·½¸´³µ¼¶¸´²¯®²µ¶·¶´¶¸¹»¸»¹¸¹¸º¹ºº»¹»Ã¼º½¼º¹ºº»À¾½½¾¿¿¼¿ÂÀ¾¿Á¿¿ÁÂÁÁÂÁÃÂÊ×Úßåìíëìëêêëìéëìíîìëìëëìííìíìëêëíë“è󩦟 š™Ÿ—‹‰Œ´²Ë÷‡øùúùùûûúŠûûúúûúúûûúû„úúûúûƒüüûü…ýýüüûüûüûüûüûúûûúûûúû‚úúûƒøùúù‚øøù…øøùøøùƒøùûúŠûúúùùúúûúûúù…úùùúøú‰ûúúûúùúúûù‘úùøùùúøøúøùúùø÷÷öõöô�¹œžœœ—˜š›‘‚•™˜™˜š—–™™˜—™™˜—’•™ž™•”–œ˜™—”’’”——››˜š›››œ‚›œ¹œžžœžœœ››šŸžžŸžž¢ žž ŸŸ¡ ¡¢¢Ÿ¡¢§µ¼¾ÃÈËÌËÆÊÌÌËÈÉÊËÍÊÚËËÊÌÌËÌÊÉÈÉÊËÈÊÅ¢—ŽŠˆ†ƒ€‚„|pjjŽ‹£×ÚÙÚÚÛÝáâàßáßàáãââàßáãäæåããâãáæááäãææäáâããæçéìéèäåâãäãâäãŸâááãáàääãåçæåãâãåäßàáààßÜÞÞßÞÝÞß”ÞßâãáããâáâãáßáâáãáâäáªßáàãáßàâäáâãàßáãááßàßàÞàßàááßßàáàãàáàßÞÚÜÜÛÙ�þЉ†‡ƒ‰ˆ…€‚…yfz}}~€~z|~}~|{wx…~yxx‚~}zzyy†ƒ‚‚ƒ†…ˆ†ƒ††…‚ƒƒ…„†…‚……ƒ~€}ƒ„‚‚ƒ†€ƒ„‡…ƒ…‡„ƒ„„…ƒ…ƒŠšœ›¨²±­­±°ª¨§¢¥¥§¬§¦¨©´¦¨¦¦£¤¥¤£ ¡£§¦¡‡tmmnjgca`\PEE^Zs¯¯±¯¯²´¸¹¹¼¼º½¼»»¾»¼Š¿Á»»¼¼»º¹·»—¾¼¸¹»¹ÁËÐÔÍþÀº¹¼¹º¹¾¾½¹‚¼º»ƒ¼Á¿¼›¾Á¿·¶¶··¸µ´µ¸·´´¶µ·º¸½¼¼½½¼»š¾¾ÁÀ¿Ã¾¾ÄÁ¿¼¿¾º»½¾À»ÁÂÀ¼»¼¾™½¼½ºº¿º¹¸¸½º¼½½ºº¼»¼»¸´·µ³²�Ô¼»¶¸½¼µ´·»¸´µ—¬´³µ·¹º³¸¸¶º¸¹ºº¸º¼¹´­¦¥¦µ·µµº¶º½»»·¹·º»»½½¼»¹¸¸¹º»º¼½¼¼»½¾¾ÀÀ¿½º¿¿¾¾¿À¤¿À¿¼¿À¾ÁÀ½À¿À»»ÂÖäëíîëëêììíìíìëììëíêíƒïîíì¥ëìëêëêëëéò¨¦¦¥ šœ™…†´±Æõöøúùúúùùúû…úûúûúû‰üúûüüúúûûüˆûüýýûûüý üŒûúüüúúüüûüüûüŒûüøøûúûüüûûýüƒýüþýü‘ûûüüûúûûúüúûúûüûùúûú„ûúúùû…üûúúûú‡ûúûúùùúùøöõ�´žž™›Ÿž™˜šœ™˜™{Œ”“—™šœ”˜™™š››š˜šœ™“އ‡‹–™™˜œšœž›ž›œ™ƒžœš’›œ›œžžœžžŸ žœšžÖžŸŸ ŸŸžžŸŸŸŸŸžšœ¢³ÀÊÌÊÅÆÉÊÆËÌËÊÉÊÊÈËÉÍËÌÎÌËÈÉÊÆÈÇÆÇÈÇÇÅ¡•‹ŠŒ‹†„ƒ€~gfmŽ‹ÓÕÖÛßàÞÞßÞß°àáàáÞßÞàááâáãáãåáàáàâàãââãáâãäââåâáãáÞßãåãäãââßàá„ßàâàãˆáßáàáÜÜàß”ÞßáãàÞÜßÝáÞÝàâàáââáá߃Ýàßà‹áÝßáàÝàßâàßàßÞƒàááÞ•ßÞàÞáàßÞßááààßàßÜÛÙØØÙÛ�’Š‚‚‰Œ…ƒƒ€‚cpzx€‚Ây{~…€}~…€wriil~~~…ƒ…‡…‰……„†„„…‡…„‚‚ƒ…„ƒ†…‡‡‚„……†„‚~„„‚‚„†„‰…©ƒƒ†ƒƒ‚€…~{z†›§©«°¯®©©­¯ª©¥£¦¢¤§¡¦¨«¬¨¤££¤ª Ÿ ¢¥¢„~spsqkjf`_^IBF^Zpª¬°´µ¸¶´¶·¹¹º¸ºº¼»Ò¹½¿º½¿¼¼¸¶º¹»¹º»º¹¹¼º¾½¾Â½·¼º´·»¹¹º¼º¸¸··º¸¹º¼»»¿¿¾¿½½¼¾³³¹¶¶¹¸··¼¼·´º¶»¼¸¿»»¹º½º¿Àµ¼¼¾½¿¿À¾¾¼¿½¿¸ºº½»¿¿½¹»¼»¼¼½¼½½ºº¾¼»¹»¼¼¾¼»ºº»»¾º´²²°±¶�ܺ¼¶¶»¹¸½¹»µ´¶¦• ¨µ¸º¹²¶¸¶´¶¹¸¶´²¤‘–¥ª¯¶»¼·¸»¶··º»¼¼ºº¸º¹½½º¹»¼¼»¼¼º¼½½¾½½¼Å¾¿½¼¾À¿¿À¿À¾¿ÀÀ»¿À¼½¿ÀÏàëîìëêëëééë¶ìëííëìííëíîììîìëíìëìëêêíìëéñ§¤¨¤ œ¡››—‡‚–°±Çøøúûøùúúùû„üúûúûüû‚úûüûûüûüýüüûûüúüúûüûü‚ûüû‚üûü„ûûüüý¡üûøóìåàÝÙÒÎÌÈÀÂÂÃÅÄÁÆÉÌÑ×ßçìð÷ùûýü‡ûûúùùúúûƒúûüûˆüûûúûüúûúù‰úøùø÷öõóôöõ�§™™›žœ—–™Šx€‰—š›š•–˜˜–—˜—–”’†sxˆ‘—œ“›œš››œž››š››ž›š›œƒ›œž›¢žŸœžžžŸŸž”›Ÿžž ›œœ ¯¼ÆÇÇÉÇÇÃÃÈ­ÊÉËÊÉÊÇËÉÌËËÈÊÉÇÇÈÇÉÈÆÆËÉÉÄ¡”ЇŒŠ…†~|ibt‰ŠÚÛÞ†ßßààáàß‹Þàáâááàãááãß…ááâßâãâàßâáßäààâääááààߟàßáààãáàââáâÜÞáãÝÙÒÌÂÁÀÀ½¸³®§£¤¦Ž§¨ª®³¸¼ÄÄÌÑÖÖÞߌàÜßÞÞÝÞßâááàß àßÞÞßÝßáßÝàßßáßâààÞàââßßÞàÜÚÛÙÔÖ×Ù�´ŠŠ‚…ˆ…†„ƒ~ƒt[dm…ƒ|z}}{~{|yvlX\mqx|„ƒƒƒ‚„…†ˆ†…„ƒˆ‚„…ƒƒ„‚‚…„‚ƒˆ†…‚ˆƒƒ‚‚„„ƒ‚ƒ‚„…¤„‚„‚€|}}”¢­±®©§§¬«¥¨¨§¨¦¤£¢£¦¦£¨ª¦¯¢ ¥¥£¢¢ž §¡¢ „~rnvrjeib^^J?L[Zr±²´¶²µµ¶´·¹·º¸¹»¹»þ¿¾½½»¹º¶¶¸µ¹¸·¶·µ¸¹¼»¹¹¸º·¹¶¸º¹¹·¹¸¸´·µµ¸¹º¹º¸¶¹»º¿¾¼»¸®®§Ÿ––˜—“‹‹„~y||ƒˆ“ ¨«¬«±·½ºº½¹»º¹¼¼·¸»¼¸½¼¹·¼º¹º»¾»¼»º»½½º»»¼º¼¼‹¹¸¹¸»º·³®ª­³´�¹·º»·¸··¾º·¹¶·¶œ¨°´³±´¨®ªª¦£Ÿ°¡£¯°¸º½¼º¼¼¸¹¸¸¹¼º¼¼»º·ºº¹¶»ˆ¸½º¼º¼¼½¾½Á¿Â¾¾¼¾Á¿¿Á¾¼¾¿¾ÁÁ¼¼½ÂÉÖîíëëêéèé‚êëê‡ìêëëìíïí…ëëíëêìíì—ëêëÆ©¦¨«¥¢žœ›‚œ¶´Íùøú‡ûùûúûûúû™üúúûúûûüûúûüûúûûúúüúûüüûüû–üùûûüûüýüûüûúüüûûúúûûúü·û÷îæÞÔÇÀÃij¬©£Ÿ£¡¤£ž §§¨Ÿ¢©¥¦™”› ¡§°·ÆÔÜãéöûýüúúùúûúû‡úúûùûúûú…ûúûúúù†øùø÷ôôõö�½œœ›š›š™ š›˜š™€ˆ‘•–““‹‘‹‹‡ˆ€’ƒ…‘“š›žœžž››œŸœœ›œ™››™–œœ›š›†žž¡ž žˆ žŸ¡žœžŸ„ œŸ ›ˆ¡¥¯ÉÈÇÉÈÆ‚ÁÅÈ®ÆÈÉÉÊÊËÈÌËËÌÊÈÊÉÆÆÉÉÊËÊÉÉÈÇÈ¥ˆŠ‰††ƒ}uefyŒ¢Ý÷ÞàáÞßàááàáàßàÞÞàáäãáàâåäâáßßàáâáàáââäâàáßàßááäáäåãáààßãáÞÞÝÝßàßâãâÜÜÓÅ·°¦Ÿ˜–ˆƒ|y|{~{xwz€uvv}~~rpuy|€‡–¤¨µÂÌÖÝãààÝÞÞà†ßßàßáâàŠâáàÞßàâáâáߌàáÞÝÞßÜÚÖÕ×ÜÛ�Ĉ‡„ƒƒ‚ˆ…ƒ€‚ƒelx}zzqvppigbbvhiw|‚‚„ƒ„††…„„…‰†„€ƒ~ƒ‚}ƒ……‚„…‚„…¶„…„†€ƒ†ƒƒ„}ƒƒƒ|~€Œ«±­¦¥£¦§¤¨¤£§¥¥¤£ ¡¢¤¨©¦§¦£¹¢¡¡¤¤£¤£¤¥Ÿ ¤‰uopxphhfb^UCAQa\q³³µµ³¸µ¸µ·¼·¸¹»»¸¹¹º½¿½º¸¹¸Û´¶µ²¶·¶¶µ³¶··¹¹·²·µ¸·»¹¸º·¶´¸´´³²µ¹µ³µ¸³°­ŸšŒ…{uol^[]UTRTVSROQX]]OLNXZUXILQOMS\l€|‰š ¯¸»¾»¹·¤µ¹¹¶·¹·¸·¹¾»¼º½¸º¹»½º·¶·¹¸¶´µ¼¶±¬ª¯³µ´�£·¶¹¹º»¸¸·µ¹¶¶·«§®±°ª§©ªš§®¯µ¹¸¹º¹¸º¢¸·¶·¸¹·¸»·º¼»º·¼·»¹»¼¸·¼ºº¼»»¹»¾»¹½§¾¿¼½À¼¾½¼¾¿¿ÀÁ¾½»¼¿Îßéë¶àëçææçèééèçééèêéêêëìëëìíîìëêëêëìžëíïñòĨ¤«¤£¢žšŠ~ƒšº¶Í÷÷øúùøùúˆùùûúûúúøú†ùúùùúúûúûûüûûúûûúúûúùùúûüûÂùúúùùúùûûøðÝÉ»µ®¦¤¤žª¥š›¡ž“›ž¡™™•“Ž˜ £Ÿ¡¤ž¡œ”—˜–ž¢¡§®¬¹Öëôúûùúù‚úúù‰úùøùùúøøùø…ùø÷öôõôõ�¦›˜›œœžšš›™›˜™š‰‘‘Šˆ‹Ž~Š’‘—œšš››œœ›šœ›Ÿœœ™œœ›™˜›šœžš™œœ›œ›œ›œžœšžž²Ÿžžœœžž¢š™Ÿ¬½ÆÄ“½ÉÃÄÄÃÆÆÇÄÃÇÇÆÆÇÇÈÊÈÈÇÊÊÉÉÌÊËÊȤÉÊÉÉÈÊÍÐÒ¤Œ‡Ž‰ˆ†„ƒ~n`ew’£ÜÛÜßÞßÝÞàß‘ààßßàßàßâàßÞááâããà†áàáàâáàÞàßàáààãâàáààß¿ÝÝÞÝÞÛ×Í¿¬•‰ƒ~}ww‚}ttzwwomwzzutomijty|x{}zx{uoqwqpwz|‡Œ¡¹ÆÖÚÝÞ‡ÝÞßÞßááà˜ßáÞàßÞáàáßÞÞàßÞÝÜÛØÖØÖØÚÚÙ�¢‡‚‚„†ˆ„ƒƒƒxnvyzpmqsedmuu}…‚€ƒ‡…‚¢„‚ƒƒ„…ƒ††„„~„‚‚…‚~ƒ€‚‚ƒ€€ª„‚„‚„€}z…ž¦­h“¨žžŸ£¦¤¢ £¥¤¦¥¢Ÿ ¡£¥£«¢¤¤¥¢¡ ¡ ¢¡¡¢¥¥ª¯‰smurojfgb[M@BQd]p²±³´±´´¹µ¥¶·¸º¶¸¹¹¶¸»¸µ¶µ´··µ¶·µ²µ¶·´´¶¶¸¶µ³²²±¶‡µ·¶²³³²³á¶´®ª£“kkc\WXPQ]VNPTPPKGQTTPLHLDFPTXQQYUVXOEGNIKOUVZ]ex“¥²²··¶·µ´¶µ¶·¶¶¹ºº·¹¶¶³¸¹¸¶µµ¸¸´µµ¶¯«¯®±´´±�ƒ¶³¶·ƒµ¹¶²¨±¶¨žªœ¨¡¦¯±²¸¹¶³±··¸·¸º¸·¸¶¸´·´¹¸¸¹¹½½¹¹º™¶ºº¹¹»¼»»º¼¼¿¾¾½¿¼»¿º¼¾½¿½•¾»ÀÁÀ¾¸»ÊÜèíì鿥ÂåÈéæç‰àèççèéìéèéê£ëëìíìëëééìíîðôôï麧¤£ž¤ ›Ÿž•†‚zž´¶Ï÷ø—ùúùùúøøùøùùøùøúûûúúùøùúû”úûúûûüûúùøùúøùúûúùûûúÇùúúùùûûíÓ»®¦ ¥ª¡•”˜š–š˜ššœ–Š™£Ÿš‘•™”œ¦Ÿ•Ÿœ™–™œ¦¸¡™©©› —›¡¯¹Êßõûûøøù‹øøùùøùøúùø÷ø„÷ø÷õôƒóôóóô�¸™–™™šš™›™–••“˜ŽŠ{…‚‡’–—šœš—–œ››šœ›š™™š˜›˜››œ››žŸ››œ›˜›’œ››œœŸžžœŸ›žŸžššž žŸ™›¨¸ÂËÊÈžÁ¥ÆÄÂÄÄÅüƾÈÉÇÅÆÆÉÉÊÈÉÊËËÉÉÇÇÊÌÌÎÓÖÏÆšŒ‰ˆ…Іƒykd\{ާÜÜÝÝÞÝÞÞßßààßààÞààÞàáƒââãàÄââáãäáÞâáßßÞàááãâààáßáßááààßÝÝÚǪ“…€|ƒ{rqwsuqsstuvsiwx{txkqso{ypxy–vstwyr‚vzqx}ˆ£»ØßßÞ†áâàßÞÞà”ßààßÞÞÝÝßÝÜÝÛÔÓÔ×ÕÖØ×Õ�Ñ‚€„„‚~}{{vgn]gdjw}ƒ~~ˆ…ƒ„††ƒƒ€†‚ƒƒ…‚„‡‰„ƒ‚…}€€‚‚€€}€‚ƒ…„‚~€€ƒ€‚~‚‚ƒ“|€}}| «®¬§¥Xh™t Ÿ³š¢¡Ÿ¡¥¦¡Ÿ  ¡¢žŸ¡¦¤¢¡Ÿž ¤¥©­«§¤plmnsnedcZLE;P_]y²³²µ·µ³´·µµ¶´·¶³”¸¹¸·¸µ¶µ¶·µ´´¸¹¸³´·µ³Œ²±³µ¶¶²´µ³³±´Ð³±²±˜zi`[X[ZUJKTKPKLMLMMJER\TVQQGNLKY^TJPUVVPLMMWgRL^_PVIRZchq‘¯º»´¶·µ¶¹·¶·¸¹·¹¸¶µ¶µ´µ¶´´±¬ª¬³­®²±²�—·¶¸´¬¬²¶µ¸¸³±°®£u·Å±³¶¶´þ¶µ³µ¹··¶¹¸·³³µ¶¶µ¶¶¸¹¹º¼½¹»»·º¼¹¼½»¼»¼¿¾¼½¼»¾À¿¾¾»¸¿ÀÁÄ¿½À¾»¼ÅËãìïêçáËâä„ãiÕéÚãìççÍäßæèçÅåèêåëêìëêàëíëêëêëïïððíëì꼦ª¦££¢˜›”Œ…~ ®°Ôøùùøøù‚úúù…úùøùùú„ûúùùúŒùùúûúúùûùøù÷øÔúùøøúúùùúùùúû÷侯£–›žš‘œœ•š–’™ž—‘–¡™˜™—ž§¬“Ÿ£¡ž“„Š—–¡¥•“˜¡œš•–”ª®©¯Ëîùúúùùúù‰ûùûùúúøùùø‚÷ø÷‚ööõö÷�ªš™š—‘–˜˜šš•’““‡VŽ›‘•™˜˜—˜š™—š›œš›šš——˜šš™›—œœž›œšœœšž›œ›œŸžžœœžŸâœšŸŸ¡£ŸŸœš¤«½ÄÈÇÆ¿¦½¾ig¿V´Çµ¿ÇÅç¼½ÄÄœÁÃÅ¿ÇÈÊÊÇ»ÇÌÊÇÇÈÊÏÐÏÌËÉËÆšŒŽ‰ˆ‰ˆƒ}xkdb}‡ˆ­ÜÞÝÞÞÝàßÞáßÞÞßàßøààááààÞáÞÞßàâààßÝÞÞÛÛÚÜÝÝÞàßÞÝßÝÜÜàßÝÞÞÓº“‡yswzwmoyxousou{wpsko}{vuusz„†m{}~x~znnbhtr|}olt|yuorr{ƒ†‚‡£ÈÝÜÝàÞàáàáßàââàááÞßÞÞÝÜÜØÙ×ÙÜÝÚÛÜÜÛ�þ„ƒ‚~yz~~ƒ‚~{{yn=izvy€‚€ƒ€„ˆ‚ƒ„„‚~€ƒ…„ƒƒ„ƒ„…†‡ƒ„„}ƒ„…€„ƒ„„…ƒ„……ƒƒ„…€…ƒƒ†ƒ€|z{„“©°µ­©~˜™G7-Œ¢š£ Ÿ~–•Ÿs•› –¢¥£ž‘„ž¥¢¢£þ¦§¨§¢Ÿ¢£~stnproi_`\LC>RVXƒ³µ¶´µ´¶µ´¶´µ´µ¶·¸µ´³¶·¸¶¹¸³¶µ³³²³´··¶±²±¯°¬¯­®²²°±¬±²°¯°´±±²£‰iaXVRTWSHNRSLQQJNTOJNFKYWTUSLWacIY\ZV[·UNN?EQLSXIKUZWTGINX`_Ya~¡µ»»¸º½¹¸¹¼½¸½¼¼»¸·¹¸µ¶µ´²¯°­°µ¹ºº¼�ij´°µ´¸·¹¹µ¶³³®µ±œ´¸¶¶´µ³²¸¹·¶·¹µ¶µ¶¸´²µ¶¸··¸¶··¶¸¹¹µ¹¼¹½»¼½¼½¾º¾¾¿½¿½å½¼¾¾½½ÂÀ¾¿¼º¿Ôéïïìêééâ±Á¡Z@ÆVžî²zäìè«ÉÄççã ÇíêÕëðïîëØâïëëíïôöóõðîðñïÀ¦§«©§¤ž—™„~‚£µ³Ðø÷÷øùøùúûüûúùúùúûúƒûúùû‚úûø„úùùøúùøÃÒ¾®ª¤ž™¡›—‹Œš“–™˜’Ÿ ’–“”›˜•—¦ §Ã¾˜—½¸Ÿ¤¡“‘‡”—’’“”§ —”˜”—•¯²±§¶ãûúûüûúúûúøøúùööùùø÷ö÷ö�¿——’—–š™šš˜˜”•’—”•˜™——–”šœš™šœšš˜™š––˜˜š™™˜˜™™˜šš›–™œ™›œœž›ž‚œž¹ žœ  œ›™Ÿ°ÂÈÆÆÅÇÆ¾Ž™?1¬E…Ìa½ÇÁž¡Â»zÅĬÁÌËËȳ¾ÊȬÌÒÖÐÑÍÌÎÐËž‹ŒŒˆ„{}tgcf~‹‰¦ØÙØÝÞÛÞÝßáßßÞÞßßÞíßÞÝàßÞßÜÝÝßàÞÝÝßÜÜÞÝÜÙÛÜÙØÚÜÞÝÝÜÜÛÛÚÙÖÙÕ¤’‡…‚xs{tshjvpovuqz~quzppwutv‚z›“op–|}mpncprlgmln{rmqprm‡Š‡Œ»ÙÞàÞ˜àäáÞâáàÞßÝÞÞßÝÝÜÛÔÖÜÞàÞÞÛÜÛ�¢€}ƒ‚ƒ‚‚}€|€|bq}‚~}ƒ†…ƒ†€ƒå€ƒƒ„ƒ‚€ƒ„ƒ~‚|„€‚…„‚†‚„ƒ„„†…†‡ˆƒ…†‚ƒ…€ƒ~|w‚˜¬¶³²©¨¥›`gU"Z¢`:¤šLpsœŸ•Jkš}–¨¨§¢‰”£¤£§«¯²«°©¤¥•€ttqqtoi__XJBAU[Zy±¯²´þ¶µµ¸¶´µ´´µ¶¶´³¶·¹·¸¸µµ´´³µ´³´µ²¯³²²®«­«®±²¯°¬°±¯¬­¬§©¥qged`VQWOOHJRNLTVNUWLTWONSSRV\T^wmLQuiY`WMPMERSHEJJP_YQGIMULced\g–»ºº¼½¼•¾½ÀÀ½¼½½¼ºº½»··¸³©­µ¸¹ƒ½»¼½¼�”¼º´º·´´µ³µ¯§¨­³³™¯·³¶þ¸¶´´¹¶µ¸¸·µ·´¶¼»¼º»º¸´µ¹»¹º¶·¸¼»»½¾¿»¾½º¼¼½½¼¾¾¼½½¼¼¹º¿ÀÁ¿·½ÕåñïïëêëÕââñÈtGS7¢_KȱDuÜØt´ºÙ䱎wÀÈ¢{ÄðîëÕÃÌñóöõõìëööñóôñ¾ª¥¦§¥¤Ÿ™œ‘Š‚Ÿ¹²Ìùúøùûùú‡ûùúûúúûú‡ùúûüûûúû‚úüû‚úúüŒûùûúúûúüûùûûúÓùú÷Í®°¬¥¥Ÿª¤¦¦™–“—£¦™œ¡™Ÿ¢œ—£¤›¬·µ¡«»Ÿ¡³ªºÓº˜š¢“˜™›’ˆ•‹’š¢œŸy˜­°´±°Þûûúûüûüûüûúúûˆúûùùøø÷øù†øø÷÷ö÷÷ö�”›–›š––˜”–‰Œ”•|˜–™‘›™—˜œ™™›œš˜™—™šœ››™–˜™›š›˜——›šœœžŸœ›œœœ›œÞ›™šž—ž±¿ËÊÇÆÄÆ³¾¼Í§Y=C(}QA¦Ž2[¶¹\˜³½ŒtY¢¥„a£ËÉȰž¤ÏÒÔÓÓÅÅÓÕÐÏÑÎœŽ‰‰‹Š‰…|vmcc{‡¢ÚÜÛÞÞÝÜÞÞÝßÝáàÝÜÝÞßÝÞßÝÝßÞáÝàßÞÞÛÜßßáßÛßÞÝÚàÝàÝÛÜÝÛÙÙÓ¡…ŠŠƒ„yƒ~€sipor€uv{uz~yr}xˆ|ƒww‹ƒ“§tvzlksstvkbnelt|w|Qs†ˆŒŠŠºßßÞàßßãáààáà’ÞßßÝÜÚ×רÝÞÞßÝÝÜÚÚÜß�Ň€„…€€|{vnsw{|br‚~‚‚ƒ„ƒ…‚‚ƒ„~|‚…~„ƒ‚ƒ~}€‚}~|{~‚†ƒ„€‚ƒ„ƒ„ƒæ‚„„}~‚~€w}’ª³°°¬¦ª‹••¦}) Q&nW0*Yf„“\:*svL.u£¦¡†kp¥­¯¯ª›ž®­£¢£¨€upmmqpj_aVMDAL_Wq³´³µµ´²µ³´²³µ±²³þ´³¸µ´³³µ´¶¶³¶´³´¬­µ·µ¯«²±¯²´³´°°²²®®ª¨¡nXcfbcS]WZ]PIOLMZ[OQWPUYXPZZTahiVZfRSc\o‚jQRUHKUQOPIDLAHPUR[7Sddihf»º¹¼¾½¾½¾¼ºº»»¼º¹·¸·²®±¶¸¹¼½ºº¹µ¼À�†µµ¶·´²´Ë¯®­­´¯´¡¡²±³´¶¸µ´µ·¸³´¶¹µ¸µ¸·¸¼º¸¸µ´·¸¹·»¼¹¸·¼»¾½¼¹º¼¼»»¾¼»¸»½¾À½À¼¼·»ÀÈÞêëêÈéèèǼ¾¼Âck†XcK7{;K“¯m·»ºÆ‰‰…x­µFnÎßëµt¢ìôòìð×åðñÞØí콩£§©ª¥Ÿ™›Ž†}~ž¸¯Íøù¤úùùøøùùúøùøøùùøøùùûúúùúûûüûùúûúùúùúûúûú‚ûúùÉúùøõ¸µ¯«§¤Ÿ¡©ª¤œŸ¢¡¥ •–š››œ—”¢› ¬§µ§ÃÁ®·³¡š«œš¡—‘’™˜”‘‘˜Ÿš—§®±­¨Øúû…ùûûüúùúùøø÷øùøøùøø÷öö÷õöõ�˜ª›˜•—™–‘•‘—„””—˜š›™——šš——™šš˜›ššœš›˜˜šïœœš˜˜œœžž››œœ››Ÿœ›šœž œœ›•𠍻ÆÊÉÉÈÆÇÅŨ™Ÿ¢¥OZqIAE7{Z&5n•Z˜œ˜¤puj^’˜?X¥¸Æ—Y€ÎÖÐÈϯ½Ëλ°ÇÊœˆŒŽŠ…}vl__y‡¦Ý߆ÞßÞÞÝÜ݆ÞàßßÝÝßàÞßþààßáààßÝÛÞßàßÞßàâÞßàÞãßÛÝßàÝÙÒŽŠŠ‰‡„…†€xyz}}yrsvwwzvq~u{‡‚Š™•‡ŒŠ|uƒsu{{pnlpktxtnmmv|zx_v„ˆŒ‰…¶ßááààáâàáàßàßàßÞÞÝÜØÛÝÞàÝÝàÞ„ÞÝÜÚÛÞ�‰‚|„‚€ƒ}u«xu{jd~}‚„ƒ€}€‚}€…‚€€‚~}††€‚}}€}~€‚‚}|€‚„þ€€ƒ…‚„€~‚„}v{~ˆŸ¬««¨§©¦¢¤|epy|");O- Ai'`h_m::3)U])s›l&I›©¤›£~Žž¡ˆ}– skoquqm_aUNC=K^Us´¶¸µ´²±²±±°´´±­­°°¯³±°¶´³²‡³´³·´³´³‘­¬²¸µ±®³²±²¶µµ´±±³á«¦Ÿ]^cffcZ\db_RUVXVYSKNRRTVSOYOW`[fZolaecTQZKQXTJLLOJRUQIFHSXVW@YdegfbŽ»½º¹º¼¾º¾º¶¶¸ºº¸³¶µ³²¶¹º»»¼ƒº¶±¶»�‹·¹»¸´²µ±±´µ´þ®§Ž›´²°®®³³±³³±³´±²°¶³¸¸´¹¶¸¸´µµ¸¶µ¶·»¸·º»º¼¸µº½»»¸¾Àº»½¾Â¼»¶¥¯·Óìñëçæäàèêéèé±wc?\hœY87&NM(QƒcW•¤—‡‘sR~pO}®•·aJ®ïáÔ¹ÅÄóÛâÁݔ𻦦¨©¨¦ š˜“†ƒ} ¹°Ò÷ø…ùø÷÷øùøƒùøøù…úùøùøùãúøùøùúúøùøùùøùùøøúùûúúøùøùûм¯ª«¤¢¥œ¥žšž¡£¢¤«¡›™”¡£˜‘“§´ª“‘““—Ÿš–œ—Ž“–•œ¢¢‘˜”‹˜¯¯©šÍöúùúûûùø‚ùùøƒ÷÷øùø‚÷öõö�þ›œœ˜—™–”˜™——–’u~——–”“—˜”•—•–—–˜•›—›œ˜›šœ™™˜›š™™šš™œœš˜œœ™ž ššž¡œš”†š±ÉÏÉÇÆÁºÀÆÆÅÆ’\O6AUpˆN#1&=55[IN~Œv~s}^Bg]Hf‡o™ÃH6“ι«’—œË®ºœ¶Ð›Š‹ŽŽŒ‡€}ykf_}’ˆ­ÛÞÞßÝÞßÞÝÞÞßÞÝßßÝÜÝàÞßßÞßßàÝÜÞàßáà߆ÝßàÞÝÝß›áàÞáàáßÞßÞÞÛÛ©•‹Š‹…ƒ…}|‚{x}¿„ywxrz~~snoj€‹ppqov|tr{vlsvqlrxu}zpwuk{Ž…{~«ØàáââáÝàßÞßÞÞààÞÜÛÝâäâàÞÝßßÝÜÜÙÛÝ�Æ…††‚ƒ{~ƒ~|ypZe„ƒ~{z€„~z}}~†ƒ†ƒ~‡†ƒ„‚~~€~€„„†„„€}‚„……€…ˆû‚„‚}ufqy•®µ­«§ —ž¢¢¥£m,&(:U% 'HX@G;C(0),R>ie `œ†va^d™x…gƒ¥|pntsurnd`ZLH;QdY‚´´¸´±³³°°²²³µ³°¯®°°²²±´·²±µ³²µ´³³²±ò³µ²²´µ²²µµ·µ·´¹¸ºµ°±°°yhdiif`fb]ZaYUXZWV\^UTVPXZZPIJD[f\KKMJTXPPYVKPWPNRSRX[ZQXVO\pqd\`…µº½½·¸½¼»¹¶µµº¸º·³´¶¸½½¾½¿½„º¸¸²·¸�¤¶µ¶³´µ³µ´²®¯©©¥®²¶´µ´²°²°±³³±°µ´µ·¸³´ü··¶µ·´´¶¶´·¹¼¼¸¹¸¶º¹¹»¼¼º¸¼»¹¸»º»¸´§½Úéìêèéæåɧ¶×âä¨QUBL‡Œ’kC1-C, FS^TMŒ †qxNb\…¤šˆm?n¦ºÎ¯¬È¸¯Üȴຣ¥¡¨§¦Ÿ››—‰…Ÿº³×öøùùø‚ùúùøù‡úøøùúùúù‚úúùøùø”ùùøùûûúúùùúûúñݽ®©§¢£¢ªŸ•¢Ÿ¢¦¥›žšžž”𛕛Ÿ˜–› œ¬±¤˜—’•’ˆŽ––¢ž›˜ ¢¥»¼µÄçø ùøù†øø÷÷øúù…øø÷÷öõö�ƒš™˜—˜•–”•‘’ŽŽ‹‘”™˜™˜–”–””——•”˜ˆšœ–™˜—›š™Œ—˜š™˜™›œ™›™½šœœ›™™—››š˜”‰žµÅÈÆÃÅÂÁ¥€w•¶½¾ƒ5A.+ky€^)$(22;COIyˆo`o]>JFk³ƒukM(Q‚’¥†~ž‘° Ž¹˜‡‰‡ŒŒ„€|mic|’‹±ÚÜÝÞÝÞÞÜÜÝÝßÛÝßÜøÝÝÞÝÜÞàßÞßÝÝßÞßàßààÝÞßßÛÛÝÝßßàáàÞÞàßÞàÞÞÜÝÛι™Š‡‡ƒƒ……ˆ~t{y|~vwzv{zxovwpvzssz~v‡‹~suonstvfmrp}{yx}€ƒ‡˜™’¬ÉÛÞÞßàáßÜÞßààÜÞ’ÝÝÙÛÝÞÞáâàÝÜÝÝÚÛÛÚÚÙ�ƒ‚þ~|{zz|vstx|ƒ„ƒ€|~~~~}ƒƒ„†ƒƒ„ƒ„}‚~‚„„€„„€€ƒ…„‚„…{}€}ykƒž±µ±¬§¨£ƒXNo‘š–` 9EM1   !ER<,7':48L@8 O»[jPGm^CvkXylopssojda\MG@Qh`г°²²±²²®²³´´±µ´²±±²³²²³·²´·¹µ´³Ï²±²´´³²²³µ³²´·¶¹¹¶¶½»º´²±³¶²¥peefdeieg]RX]SVZ[QSYTZXULPSJRYRQY]Rgh[RSQORTSJNPP[¬\_`cgz~t‘°¼¼·º¹µ¶½¸ºº·³´¸¸¶¶°´¹½¾½À¼¼º¹º··¸µ¸·�“°ª®©¨”˜™žª¨¦¨­´´³³µ·µ¹¯´·¸··¹·¶¶·´“µ¶º·µ¸¶¸¹ºº»¸½¼¼º¼º½¨¼¾¼¾½¼¾½½»¯©ÇÕêñîéêëéèææÖtxie…¸§ZƒNPsš–|BÊCH/8+NV0nªmokz‚yK{}—qy†Jt|t•µ»™¢Í䯴¶¥£ §©¤Ÿ›ššˆ‡Ÿ¶µæøøùùøùøúùúúûùûúûúûúŒüûúúùúúùúûúúûú‰ùùúûúúûùúûÙúûúûúûûüýûîÙÆµ¥¦¬®§«°¯ ŸŸ¢©¥ªŸš˜˜¦£™—™”›Ÿ¦˜¤¦¢£¢¥œ‘“›¥£¡¦¨¶¶±¬¸ÇÍèöüüúùûúúùúúûøúûúûúúùøùû„ùùø÷ö�­’ŒŠvy}Ž‹‹’—–••™™š™˜œ“˜šš››š™˜˜™—˜——˜›™—™˜š‰››šœœœ›œþ›œœœœš˜‹¤³ÅËÈÆÇÄÁ¿¿²ZUFFa’8i.J‚o0(2++/$:N2]ŠYU7QaW3]hf|TWa.VTHl’j•utœºŠŠ•ˆ‡…‹Œˆ‚~|}rlj|ÀÛÛÝÜÜßÛÝÜÞÞÝÚÝÞÜÞÜÝÝßßÞßßÞ݃ßÝÜÞÜááßÞÞÝÝÞÞÜßÞàáßàßáààßÜàÞÞÛÜÜÝàÜʵ¡‘ƒ…‹Œ‡ˆŠ‹~|yz‚ƒxxvlr}srwrw|‚t~||}zonx|ƒ‚ƒƒŽ‘†—¢¬ÄÔâáÞœÝÞßßÝÞÞàÝÜàÜÝÛÙÛÝÞÞÜÞàáÝÜÜÙÚÙ×�Žxtyuq\^dgtstux”€ƒƒ…‚€†|€‚„‡}}€~þ„‚|‚€‚„‚…„…„…‚ƒ‚ƒ…‚ƒ‚…|yso ³¶¯««ª¨¤¥£‘1';`Q8 $IL<   /U(##.' )20C'(/ $ 5]:nH=c…Q\tnmmorkf`[[PIGPcbžµ±²²±²­³´†±µ·µ´³´Œµµ·¶¶·»·³´³µ´·¶¶µ·º·¸ºº»¿»º¹»¶³ä¸»¼À¼¨Žwj`gfijikl\XW[^\cXYWKNXZQPXSQZcS\]VZYbZMOY`dbaebmsmfr~Œ®¹Å¾º¸¸¶µ¶·¸·¹¸µ´´µ±´´¸º¼¼½½º·¸µ´¸¶³µ´µ�Œ£š ¥°¨¬°µ±·³²œ°³²³ºµ±´¶¶·¶¸·µ³¯¨­¸¶¹¸ºº»½¿»ñ¾¼»¹½¼¼»¹·¿º¾¾Á¾»Åü»µ§©Éáèëëìëéëìéæåæì¢e~SU´£d†]LBožŽaH\>j1#9P1@l\yev¢v2r‡fntPjx›zw“¿˜yš†‚}~k¬¥Ÿ¡ª§¡Ÿž•šŽŸ²¹ôùúùøúúûúúûûúùùûŠüüûüûüüûûüûüˆúúûüûûúûüˆûüûûúûúûü”ûòáÕÆ´±³¯¯¦©«§§¦­©¦­¥‰ ¥ª¦¬¤«¦¤©¢¤¨¬®¨«¯¬©«©¯¤¤²¸Õòøùûúúûûúúøùúûúûùú„ùú÷ùúû‡ùùúùùø÷öõö�Œ‡}…Дޑ”˜•š˜—¥”–•–š˜”—›™š™š›™•‹Ž˜™›š›šœ›ž›œ›œ›šœè˜šŸœš£¢›™”ˆˆ§½ÃÈÉÉÈÇÆÇÅÁÀÁLjM^55”ƒEbC"N†{H/F&M+',I58YGL,JxX$VjG\\8IQuSQp¡}Uwa[abP‹„†Ž‹…„‚€vynz‰’ÑÝ…ÜÝßßÞßÞ‹ÝßÝÝàßááßàâà›ÞßÞßââáààßÞàáßàááâàáßãåàáÞàÞ¾ßßàâàãßÒ÷¤“‘Žˆ‰‚„†‚„ƒˆ…„Š‚ƒ…~‚‡…‰€†„€‡‡„„‰Š††‰ˆ†‰…Šƒƒ“³ÏÜÞàß‘ÞÞÛÙÜßßÝÝÞÝÚÜÝÜÙÛÝ‹ßáßÞßàÞÝÞÚÛÚ×Û�þkdmrxx|€|‚~||}€|~„‚€‚‚}vosz~ƒ‚‚€ƒ‚„„†„~ƒ…††‚}„€‚‚†~…ƒ€€ueiЧ¯¯­«¬¦§ª£Ÿ ¡¥c"0]L/ $HB " & ( =+*4'+¢(<!8lI'A,%1/&hqjltpifa_]QQFM]f­¸¹‹µ´²¶µµ´±´´¸µ†¸¶·¶¶¹»þº¸¹¶¹º¸¹¹¼ºº»º¼º¿¿¼¹¾»¼¼º·¹º·¹··½ÃÀÀ¾¿»°£™imiaeaac__ajeemd`^]chin]feahgcaekibejhbidh`^kvœ²·»¼¼¸»»´´³±µµ³¶¸¹·¹³²¯µº¼»¼½»¹·¹¶¶´…µ¹·´²±µ�‰¸¶´·ºº·³²³þ¸µ´¶³³¸´¸··¶µ¶¹´¶µ±¶µº·²¹¿½¿¼É½¼¹»¹¼º¹··¸¹¸¾»½½¿¹¶µ³®»ÅÕèïìéëìïíéèèäååéÕÓY96=p®KjYOMA„›cQlO]"*8C6*8_hPfŒO0yhPZu9m¡}‡¥†žŸv`HPF“b^ª§š¢§¥¤£Ÿ Ÿž¢ˆšªËùúùúùùûúúûúûùúùùû†üüûûüüû£üûüúûûúûüûúúûûúûúûùúûûüüûüûüûüüûüûûü´ýüøòíæâÛÔÓʽ¾µ¯¥¤¨®²¥§£ ¥¯·²µ°µ¼³º¹Ã¿ÂÇÎ×Þçëðùüüúúøù„úùøøùúù‰ø÷øûûúûûúù„úùø÷öõ�þ›šœžŸœ™˜—˜ššœ›™™—–™–™šœš˜™›™š™•˜–›™•šŸž›¦›œšœ››š™š›š›œœžš––’š¢±ÃËÈÆÈËËÉÇÄÁÀÀ¾Ã®¯B1( KŠ3@B1&$e€?4V6F!$%-></9J>&=]2%WL:Qd*£Q}\c€j‡‡]L7:9QFŠŒ‰ŽŠ‰‰„ƒ~fsƒ¥ÝßàÞßâàáàßÞßÞàßÞßáßáãâßãåäâãáàßßàâäàãâáàßäãááàáÝâãáââãâßáßáääãàâáâäçâÞ×ÏÁ¼³ª«¢——Š‚‚„’„†€€…Š‘‹’˜––™šž¦°¶ÄÎÕÙÛáÝÝßàÞßàÞÝÚÜÜÝÝÜÛÞÝÜÛ‡ÜÞàßßááà‰ßàÝßÚÛÚÙÚØÛ�„……‡ŒŽ†€€€…„†…þ€}‚…ƒ€~„‚€‚|z}€|†‚„€‹ƒ…‚ƒ‚ƒƒ‚‚„ƒ~„ƒ…‚ƒ|yvrp†˜¬²°«ª«®¯¦¢¤œ ƒ„&T +D/ '*.$K)0L7RU+"eqfq’tnnlbb^\T;EUyº½¾½¼º«¸¶¸µµ´»¸·¹¸¸¶¹¹º»½¼¼»¹¸»ºº¹º¼¹º¼¼º½¾À½½¹¼º»¼¾†½¾º¾Ã¿ÀÌÅÆÉÅ·­–…†ynrjbZ^ckofd^`giorplt{sxvyupsv~—£³µ¾Ãƽ¸¹¸¹¶ºµ³²µ´³³²µ··´´²¬³º½¼¾¼¸·¹¶¶´µµ·²°²µ�þÇ»´µ±·´²·º²µ´¶´·´²³²³´¶·µ·µ·µ²·µ²´¸³³¶¼¼»¼½»¼¾¼É¿ÁÀ¹·¼º»ºº¸·±§©©»ßìîíèéèçééèççæåçãÄÆŸOC=Dau?cYs‡E3fV_hn0 1:E5']qTdX?d`=Yhkc¡_ƒ_Ž ™›Œb-3Kg`££¢¢Ÿ¤§  £žš‡Š¬æúù†úøøúùùúùˆúûûúúûûüúƒøúùú‚ùûúùˆøúùûûúûúûƒúùùû§úûûùûúûüûýüýýüûúùôîôøöñèáÞåðïîóôõ÷ôùúúùú†ýüüúûúùƒúùøùŽúøøùøùøùø÷ùøù÷ø‰ùùûùúúøøúø…öõöõõóò�¬«¡šœ™œ™šœž—š™›˜š™–—•—™šš™š˜™™–š™•—š•—˜Ÿžœžþ§Ÿ¢ ššœ›œ›š˜‘ˆŒŠ˜»ÅÈÈÅÆÄÅÅÇÅÂÃüÁ¾ss(2(4M$;ATj,%O%:LL& %.>5#*OQ5;5%FE)K`_KHdEm…}„uU*+CUI†‰‚‰‰…Š„„…~waaÅáßàááààäàâááàâá­âáàßáàáåââãäãââàßàÜàáãááâááßßâàáÞàáààáâááâäâáà¬ââáåäáãááäãâàâäáàÝÚÙÕ×ÜÙÕÑÊÊÍÏÌÈÐÑÕÙÕÝÝßÞàÞàá¯ßááÞßÝÞÞààßááÞßÞÝÜÝÞÞÝàÝÛÙÝàÞÞßÞßââáßßáÝÝàÝÛÛÚÜØ�£–އˆ†‰…„‰‰ˆ†ˆƒ„„|{€‚ƒƒ~‚‚…€~|€|þ„‚…†…ƒ……„†ˆ‰‚ƒ‚„‚†~ugkm}ž­²²««¨¤¦¥¤¤¦ ›™—ywQL  ' *? % '*   #+,"59POMQ=)$_mksnipseef[L72O›Á¿¾½¾¼ ¿ÀÂÁ¿½¾½»¾»»¹º¼¹»»¾¼½¾¼½¼º¼µ¸¶¸¼»¨¹¹¼½¼ºº»¾½·½¾½¾ÂÂÀÁ¾¾¼º¿¾ÁÄÃÇÄÁÅÀ¿ÃÅÅÃÂÂ½š¶³°³ºº²±©ª°­¨©²±²¸³¿À»»¾º¾‡½½¾¿¼º»º†¹·½¸¶¶´œ³´³¶²±°³µ³³¹¼½¼¿¼·¹ºµ¸¶´µµ²²´±�©ßÝ̹²´´²µ´°±µµ±±³±´³´³´´¶´µ´¶´¶¸¶»»¹º»¾¾Á½—¿ÂºÄÀÉö¸¼½¼º·¯©¿ÝéïëèçØæçæèæååä༹ã®{fYD9LZlWjtlVv@17MRJJ9 4 kIct†ƒ<FvvNbk_Ic†­–„ˆY&;V?z¦¢ž¢ ¦§ž¢œŠf}’íø„ùúùøù†øùõùúúù„úûúúû™úùúúùùûùùúùúûûúùùúùùúùûûüû–üüûúùùøúúûúûúùúùúûùúûùú‚ùúû‰úûûúûüúúüøˆùúûùúùùøù‚úúù‰øùùøùúúùúùø…÷ôõøùø„ùúúùø‰÷øø÷öõöôôõô�þ¾¼® š™˜™š˜–—˜™•—™•˜—™˜˜—™—˜—š˜™›šœšœœ Ÿ¢ž¡¢œ£Ÿ§¢™šœœš˜“‚Ž¡¼ÄÇÇÆÂÅÃÁÂÅÄÀÂÁ¾¸Ž“¼ŠT94).</BJN6Z/%+43++!]>UUa^&/RU8kZ[p±E3Hd’v€mlK+7M:_‰ˆ„…‡†‹Œƒ„}fATkÑàßßàßàáäàáâáÝááãâá„ßáåãå‡ââãßÞàßá–ãààááâààââåãâäãâããááààßáââäâãåâàáäâàáƒäãáâšåáâãâäæáÞÞÝßßáââÞáààáâàßßàßààßßÞßàâßßàÞßÞ›àßÞÕØÝßßÞßßàßàáàßÞÛÜÝßÞÜÜÛÛÚÛ� ¬­žŽ„ƒ……ˆ†€ƒ…€…~‚~€€~}~ƒ€„…Ÿ€†…Œˆ„…‰‰ƒ‰…Œˆ}€‚ƒ‚}|udl€Ÿ¬²¯¨þ§£¤Ÿ¡ ¡¢¢•eeh*  '#0 +&&20 #%/(+9 3\BN;6  2elknoknqfcfY?'<ªÂÀ½¼¾¾¿ÀÀ¿À¿½Á¿Â¿¼»º¼¿À¾À¾¿Á¿¾¾À¼º»¹»Â¼¼¿¾¼º¸½¾½º½ÂÁ¼Â¿ÁÅÅÄÅÁ¿¾½¾¾ÀÄÁÅÃÂÄ¿¿ÄÁÄÁÂÁ¾À¿½ÀÀ½ÂÅÅÄÃÆÊÄ¿¹¼¾½¾½¶½¾¹º»¼½¾¼½¿½º¸¹¸º½»¼º¸·¸µ´³·µ±©­¸»¸´´º¼½»»¹·¸´´¸¶¶¹º´²´�þÍÏÐÖÓ¿·±²²³±³¶´´µ²²¶¶µµ±´´²´³µµ¸»¼¸½ÄƼ»¼»º½À»»º¼ÄÉÌÁÃÆ³§›¶Ëìïëèéåäæççäæäåçéç寔i±NjjOYU]vdb[m\@61<U@DAQ>52lm-$pPRdr]\zo[k”¥iM‚Š’…™‡~A)WY9‚¡¤¢ž¤¢§¥ œ ¤…`|«öøùøùøùú…ûùùøøûŠúûüúûûúüûúûú„ùúúûüûˆüûúûúûúúû‹úúûúûûúúûùùú‹ûúúûúùúûúùúù‹ûûùúúùøùùúû úøù‚úúùˆøöøúúûúùú‚ùøù„úù÷÷öôõô�­®°°¶´¥›–—–—––š™˜™–—šš™™“—–”––™—›žšž¥¦œžœ›ž ›“œ¡¦©¡¡¤”ˆ€™¬ÊÌÉÃÃÀÂÁß¾ÀÀ¿Áÿ½ˆh8fŠ7BH3>38E75-G:#&A.3!?8&XZ.&_71DPD;f[VT\uJ2Xhwdyj]8/IF1b…Šˆ„ˆ…Љ„ƒ„b>RŒÛßÜÝÞÝÞÞà•áàááßáãáâáßàãäåáãàâãßà”áââáàââãáàãâàßââãâßâá¾àãâàßáààßãâãáãááàáãààáàÞãâàâÞßáààßÞââßÞàÞßßáàâàßáàââàßÝâßßààáßÞß—àÝÝÜÝÝÜÚÛÜááàÞàãààÞÝßÞÞ݆ÞÝÚÛÛÚÛ�þ—šœ¦£‘ˆ€‚€~~ƒ„ƒƒ„……ƒ€{~}€~…ƒ‚~ƒŠŽ†……„‡ˆƒ…ƒ…†‹‡ˆ‡uia‚—²®¬¨©¥ £¤¥Ÿ¢žŸ¤¥ŸY;Bd"   )-0 (6)$%,: *6D2D5*7cmnlpinng_b`=(h»¿½º»¼ÂÀ¾ÀÀ¿ÀÁÀ¾¿À¿À¾¾ÄľÁÁÂÃÂÿÀÁ˜¿¿À¿¾¼»¾¿¼º¼Ã¾ÄÁ¿ÃÄÂÃÆÃÂÏÀ¾½Â¿ÀÁÂÅ¿ÃÀÄÁý¼¿¼¾ÂÀ»¾¿ÂÁ¿ÂÂÁý¿¾¾¼¼¿¿¾¾½»¼¼½½¾½½À¼ºº¹··»¹»¹¸¶¹¶¶´±°°±¶¼¼º¹»¼ƒ»·¸¶ˆ·º··¶º¶³µ³�ªÎÊËÏØÛÓö³³µ¸¶¶µ³·´³µ²µµ·¶µ¸¸·½ÂËÊÅÁǾ¶¸¹º¹ó¸»¼¸½¾ÎÒ¶¿²ÉßëëêçåãççæäæååæççèèÌÍ¢‡`dk?Uoh¹…g`zXfwa;??EpZ]@]meB+BVUF_MKRcŠ[rwc`gŒ[`€ƒ‹Š´8+HLEp£§§ ¢ ©¦¤ž¢¨£‡}Éùùûùúûˆúúûúúûûüûüýƒüýýüýüû†üýýüûûüû…üüûüûü„ûüûüû…úûûüüû‚úûüúû†úüùûùúû‹üûûúúùúùúûúûŒúùù÷öúúûùûûúû†úûûúø÷öõ�¯·º³¤™——˜›š™—–™—–˜•™—™—•™š™¡«ª¥¡¥ž—š›œ››™˜›œšœ©¬•œ’¦¹ÄÆÇÂÁ½¾ÁÁ¿à¾¿¿¼ÁÁ¡Ÿ{g9-@57GD’fA/F'1OA%0VGF%J]I. 3IIBS>05Gp<IYJY[o?7P_ccihŒ7.845M†‹Œ†ˆ„Œ‰ˆ„†‚aS¨ÞÝÝÞàÞÝÞÞàŠáàÞßßàáààáã àâáàáßàáãááäââáâääãàããàáâàãáàäáãâ®áßÝâáàßàäåââàâáââáààßÞßààâßààáàßßãàßÝàßáßàÞàÞáàÞ‹ààâáàßÞÞàÜÝÞ”ßÞÝÝÛÙÖÕàââÞàáâßààÞÞߊÞßßÜÞÜÜÛØÚÛÚ�Œ™•”𠬢~~ƒ¹~}ƒ‚}~}}|ƒ„‰’’Œ‰†}€…„ƒ~ƒƒ„ƒ‚uu¤±®¦¢£ž¤£ŸžŸ ¡Ü{qH2 k<    &!/# (%"B%')0#/2/02N*gpqmnhrmlaab\9*ƒ½º»¸¼½ÁÀ¾½À¾Œ¼¼¾ÀÁÂÀÁÄÃÂÄÀ¬ÁÄÁÁÃÀÁÂÿÀÀ½¿¾¾À¾¼¾¿Â½¿Á¿¿ÂÀÂÃÃÂÁ¾Á½»¼½¿¿ÀÁÀ—ÁÁ¾¿½¼¿¼¿¾À½½¼¿¿¼¿¿¾¾½¾»½¶º»¼»¼»ºº¹¼¾ºº¸µ´²µ¹¹½¼·º·²¯ªª··¶¶¸¹»»¼»º¼ºº·¸¸º»·¶µ·µ´´²�˜ÏÑÏÑÐÐ×ÔÓ¼¸²³³µ´²¯´¶³±³µ¹”·¶·ÂÇÛèáÌÀ¸¶··¸»¸·¹¹¼‹µ­®·Ùåëîìçåäåçææäåääææáää©z޽bL:NZi¨•jSZ[s}S=iU_~WFbgŸp7<\GYNbRyEk[CLeiefCcodx‚v¦˜07A:H_¤«¨Ÿ§ ¨¨©¦¤ªª¢™Úøøùùøùúûúˆûüûüúûüûü„ûüûûü„ûûüýüŠûüüûûüûüûûü„ýüûûüƒûûüû‚üûü…ûüûüüûü„úüüûú“ûúùùüûûúûûüûúùúûüüúû‚ùúùúû–ùù÷ùùûùûúùúüùúúùûûùúûüú‚÷÷ö�‚¯°¯–°´°±Ÿž––—˜––’—˜–“–—š›š™þ ¤¶Â½¬Ÿš™šš›™˜™šœ›œ–ŽŽ—¶ÀÃÇÄ¿¼¾¾¿ÃÁÀ¿¾½¿¼³»½|@[–l=-40*9|n; ,%<X8Ke9@`;*MZŠa*3I3NFP:Z1OE&6Q`XO+9FEZeVy34)(3@†ŽŒ„Œ…Œ‹Œˆ…‰‰~p޵ÝÜÜÞÝÝÞßàááßßà¯áßÞàßàâãâàãââßàßáââàââááàáâáâßáãáâàßááâãâãââààßàˆÞÞâãáãâãâ ááßàÝàááààâáâàßßàÞßàÞàßáàáàááàÞÝÞ‹ßßàßàáÞàßÝÞÝ™ÞÞßÞÚ×ÛÜáââßÞßàÝÜÞÞààÞáââÞ…ÜÞÛÚÛÝ�þš™™—˜™œ‰ˆ}}~|}{€‚~xz}‚€€ƒ‚ˆ‹ž¯¨”†~‚†€€€ƒ‚{qo~¡¦¬¯¬¦ ¡ Ÿ¢¡Ÿ››ž˜Ÿ•—™S!3_8 M= $+D- ",V= $&-+ +(É,.!JAduphojrmpkdebR?ˆ¸¶¸·¸¼¾½½¼½½º»»½¾ÁÀÃÀÁÁÀÃÃÂÀ½¿ÂÁÂÁÀÀÁÁÀÿ½¾Š½¼¿À¿Â¿À¾À¿³ÄÄÁÀ¼¼½»¹½»½½¾À¿Á¿Á¿Ã¾½¾¼¼ºº¾¿¼¾¼½º¸¹¸¸¹º½¾½½·º¾¼¸·ºˆ¸º¹··¹¹¸µ£´³·¹¼¼¸ºµ®¬²´µ¶¸¸·¹¼¸¹·¸¼º··º¸º¹º¸¹·¶µ�ŽÏÎËÐÐÏÐÂÑØÐ³°¶±ƒ³´³´‹··¶´¸¹¸ÆÃ¿¹¸÷¶¸·¹µµ·µ¬¯·ÑçîêéäâààääããäãäåãåæåÖ§Áì‹|‡}¶pde^n_ycYRprz‚i•wKWxM7X^iX=P_QdSbYWh1NKGmxO4C[\RNilv<McAFP}¥©£—¡¢¦¨ª¥£©¨¦®ä÷÷øù‹úøùùúùúûúûüûüüûûúûûüüûüûúûûüû†úúûûúûüŒûûüûûúúûùûûúûƒùøøú„ùûüûúû…üûúúûú…ùúùùúûúøùùúúûûúúøùùøù…ûûú÷ùúûù„úùúúùƒúùúù…÷öõöõõö�©¯®¬°±®¯¢¯·³™”™”•”–š—–—˜˜–—šš™—™›™¢¢¡›šš™˜š”˜˜——‘™­ÀÇÆÈÀ¿½½À¾¾½¿àÁ¿ÁÀ¿°y•Ä[9KVN†F<9-54A!*4:R`?nU4/Q/BU]K.@D5TBJ?BR)=2/XhF%2:7@QKY/:I+66[‡Ž‰}†‡Š‹†…‰ˆ‚…¾ÜÛÜßßÝßœààßàßßáâáßáãââãâãââáâàßäâáßàáà„ßààßáŒââáâáâäâàßÞßàááàÞÞßááãàâáâáÞßšàãáàáãââãáààááààßâááàáßÜÝÜÞˆßßÝÜÞàÝàß‚ÝÞ݃ÞÛÝß‚ááÞ‘ßàßááàäááÞÞàßÝ×ÜÛßÝ�—›š˜œœ——‡“¢¤„|}}~…‚~||~ƒ€|€‚}ˆ‡…€€€ƒ“~}{os|”©´±ª žž ¡›œÑœœ››œŒMi;%-'P  $.7' ')1# *!%  - , 1fsk^ikmÄgde^VT’µµ´¶º¼º¹º½½»¼»¼½½ÀÃÁÀÁÀ¾ÁÆÁÀ¿½¾ÀÁÀÀ¾¼½Àü»À½½¹º¾À¾ÂÀ½½¿¾¿¼¿¿½º¹›½¸¸·º»À¿¾¿¿Á½¸¾½º¹¸»¼»¼½¹¸·¶‡¹»»¾½¸¸»¶¹µ¹¹·´¶º¸¸¶´¶³µµ´³¶¸¹º·´±³µ¼º·¶»¶¹¹·º½»»ºº¹º·¶´¶¹¸·´¹¹»¹�þÓÒÓÎÌÑÕÑÔÚÛÔ۱°´¯²µ´²³³µ·´µµ¶¸¹²³¹ºº·¹ºº»¸¸±¥¥»ÙâèéçäçåâááâãâäããäããÞÒèÛ“З‰˜{„¶ Œœ€NZ~rV[wfsnav]FI_OGP]VHAEHQ„xfl‚oC<\Ky‡F-¢<VI1fq{fH_Z@V7z§¨—¤¨ª§¨¢§§£±ã÷öùø…ùùøúùúùúûúû„úúûùúùùúùùûûüúûúûûúúùøùƒúø÷ù‚úùúŠùùûúúûúúùúùú…ùûùùûúùøù‚ûúø‚ùùø˜ùøùú÷÷ùûüûûüûúúùùúûúùúùúùø„÷÷öôõö�º²²³®¬±´®³¸»²¦••“™––™˜—–—˜š™˜˜™š›•–œœ™š›œšš”‰‰š¶»¿ÁÂÂÆÂÀ¿ƒ¾¾À¿é¹®¿°eE£]DeDOcO`N'(9%$78)AJ=ZH)!8.*9UJ;22,=qcJVn_9-C2ctA(54/UTUI2>:2E*]‹Ž„w}‰ŠŠ…‡„~‰¾ÙÖÝßßÞßßàßàßßÞßâáàãâáââåáââåááåàˆááâáààßÞà…áàáäâãâáÞÝßÞàßàßßÝÝßàßâáãáàÞáßááßàâãáà‚áàá–ààáßáàáÞÞáÝßÞÝßáßÝÞÞßà߈ÝÞÜÙØÞââàŒãáàßáâáäãàââá‰ÞÝßÞàÜØÛÝàÜ�¿œž¡›–š–š¤¬¢‘‡~||‚€||€‚}}|„‚}ƒ†~wmm~š¢§ª§¦¥¢žž™›½œ››’ˆ˜ˆ@+xI&2#E) /    ! )" @9 !6+ ,5©' $  3ithYaloniibc]SX³²µ·ºº»¸º»º¹»º½”¼½¾½¾½¾Àž¿ÀÁ¾ÁÀ¾¾½¼½»º»·»¹¸»½¾Á»»½¼º»¹·¶¶··¶··¸´²´·¹½¼ºº¼¿¿¹½º¶¸º»»¹º»·¸µ¸·¶¸¹¸¸º·¶ºº¸¸·¹µµ´´·¸¶©µ¶²³³¶µ¸·¯®º½¹½¾ºº¼¸¸»º¼À¼¼¹º¹¶µ²²·¸»·³¹¸¾½�ÇÒÓÌÆÎÒ××ÕÓÓÍ;±´Žµ¶·µ·³¶µ´´²´´¸·ý¹¶¸¹Áº¸´©²ÌßååââãåãåæåâáâååãäãáâãÛZ£¨ƒm™s`u}ywˆ…pM^šŽ]_qrcexEWKZR@JWYXLC5@f°ƒˆlL3UDpŽE1:95Iqbdn[M:HT/X©¡›˜š§¬®ªª§©¥¡´Ñçáðöø‚ùøù…úùùûøùû‚úúûúûƒúùúùúùûúûúúûûùùúùùøùúøùø†úøùûûùú†ùúúùúúù…úúùúúù‰úûûùúùøùøùúùŒúùùøø÷øù÷ö÷ùú…ùûûúùúùø‚ùøö÷ö�™§°±¬¦®°¶´±³²®±¡–˜—˜˜™š™™–˜ƒ•——š‚™œšþ ›™•Œ–¬¼¿À¿½¾Á¾ÀÀÁ¿¿¾½¾¾¿¿¼½¾³5{tYBnZ$/<HJALD;$&F?*.)'@/@[4($4/$8OGD;'!;U•tlwb181Zy<$* .F[GDK5/"7E'D‡‚~€‹ŒŒ‡‡€zЧ¿¹ÍÙÛÜÞÜÞ…ÞßÝÝÜߌÞÚÞàßÞßááââãàßà’ááßÞÞÝÞÞààÞÞßßààáá߆ÞßÞÞàÜÝÞ™ÝÝßÝßàÞáàÞÞáÞÞßÞÞááàÞßÞÞßÞ«ßààÝßÞßààßÝÞÝÝÞÞßßÞßàâàßÝÛÛ×ÖÛÝÝßßÞßÞàáàßàáàÞÝÞÞßßÞÜÞßÝÙÚÝÞÝÚ�’“—Ž˜›ŸžšŸ ™Œ|~€þ‚~~€{‚ƒ‚‚ƒ…‚ˆ€‚xn{’§©¥¡ ¡¥¢¥¤Ÿœœž¡Ÿœš™š›VO. D; &  %)c?9?..G"*$ %mojfgnþrpkgcaXMWu”¦µ·¸»¸º·¹¶·¸º·ºº¹»»ºº¾¿Ã¿ÀÃÁ¾¿½½¾»¼½¹º»»º´·¹··º»¿ºº¼¹¸µ¸¸±³µ¶¸´¶¶µ´´µ³´¸»µ¶»¾¾¼»¹·¸ºº·¶¸¸º»¶¸¹µ³·¹¹»¹²µµ¶¹´´¶µ¶µ³´”²·¹¹¶¸µ·²±´°®°´º¼¸¸¼¹ƒº¹»¹·»·¸¶³³²´¹»ºµ¶¼¾ÀÁ�²ËÀÁËÅËËÏÏÔÖÒÏÙÓÍź¸¸·³¶¸¸·¸¶µ¶¶³°·¹¶·»¾½·±¯ÁÔãåæãäã‡åæèçåãåäæããááåí£\¨ˆllnjdP]vlbaW€^‚}YjjbgSW[\ZEIUDNI?=FBT“jxsUGZTC¨›DXPhpRwTUM6G{€’g¯¨¡¡««¬­«¬ª¥¡¤®Éñõõöø÷øùøùˆúùúúûûúûü…ûüüûûüˆúüúûûüûúûú‰ûüúúûüúùûú…ûûúûûù‡øùúúùúüûúû„úúûùúûƒúûûù‰øûúúùúûúùûŽúûúûùø÷ùúúûúûúû‚úüû‚ùúû‡úùùøùøøö÷ø�—ª  ¨¤©ª­­°·±¬·¯¬¦œ›™—•—™šš˜˜™™–”™›™™œžœ–’‘¢µ¾¿¿½¿¿½¾À追¾¿¾¼»»¼¿u.s[i\F13<;7=E5/4*00$C6--5K5&:C9);M;A7&&9>Hy[hg1'3.$Š…01.Yb@Z;92)-Yb|KŒ†…ŽŽŒŒˆ‚z|„ ÍÓÔÔÖÙÜÛŠÜÛÛÙÝÝàÝÝÜÞžÜßàâàââßßâàÞßÞßáãàÞÞÜÞßáàÞÝßÞÝÞ‰ÛÜÝÞßÞÞÝßÞœÛÝÝÞÞÜÚÝÞÞßàßßÞßßÞàßÞàáÞÞßÝÝß’ààÞßÞÝÜÝÞßÝÜÜßÜßÞÝߌáâáßßÜÛÙÛÞÝÜß‚Þßá“ÞßàáßààßÞßÞÝÞÝÝÞÜÚÚÝ�²•‰…‘Œ’””“˜¢ —¢ž”„‚€~{€~€}{ƒ~…„ƒ|vw‰š¨¦¥£¢ þ¤¥¨¢œ¡Ÿ Ÿ›™”••žVC/5+     !F.20 Z] )/)  '.P*ppmltoqofcaYMKRs¦²²±·µ¹³´·µ²±²¶µµ¸»º½º¤¹À¾½»¼Ä¿½¾¼¿¿¹¹¼¸¼»½º¸¹º¹¶·¹»º¹»¸¶³°³’¶¶º¸·¶µ²··µ¶º»·µ¼¾¼Ï»º¸»º¸»¹¹º»·¹¸··º»¼»¸·¸´³´³´µ´¸µµ¶³¶¹¶·¹¸»·°°²µº¹·¹ºº»¸ºº¼·ºº¼¸·¼»¹¹µ´²µ·´³µµ¸º¼Á�Šº´³¹·ÂÁÏÓáÚ†×ÑÚÔÊø¢º¸»¸º¹¶º¸¸µµ·µºº¶¡™ÄÛêëèèçäááãåèèåæýäåæäèåØÊÊ´µkg’wq…_h^WE5JK^½›dTXn=ZjTjzKVpMFDD/7=>WL5[©‘YiWGTYG†¨U\Swse…nsS>i£vÅn­¬¢«¯¬ª¬¨¯ª§¥£™Óø÷ùùúùûùøúùøù÷÷øùùúúûúúûûúûûü‚ûûü…úüûüüûƒúùúû‹üüûûøúûúüûúûƒúûú û•üüúûûüüûüüûûúüúûûüûüüúƒùúúûƒüüúû“ùúûüú÷úúûúûûúûûüúüúûúûƒùúøù…øööõõö� ›–”˜—  ¬±»··¶µ®µ´«¥™—š›˜›šœ›šœ›š˜”šš—z¢·ÄÅÃÂÀ½»½¼½À¿¿Áþ¿½¾¿¾Â¾²¥Ÿ‚€9<m_[m?;BA6))#.a L:&5 ?@4\?7=?580'893I‹„PZ3(-+$a‡9*1e`MfPP?6GtU¡U‡ŽŽ‰Ž‡„zo©×ØÚÛØÛßÛÛÚÜÜÛÕ×ÙÜÛÛÜÜÞÜÜÞÞáܦÝáßÞáàÝßßÞßãáààÝÞààáßÞÞÛÜÞßÜÜÛÜÞßßÜÛßßÞÛÝÞßÞÞßàÞàáààÞááÞãáßßààßàÞÜßßàßààáÞØÜÜÝßßÞÞàÞàÜÝÜßààßààÛÖÜàÞßßÞÞàßßáâßàÞààßßààÞÞÝÞÜÞÝÛÜÛÛ×ÙÛÜ�­|{v}|†‡’š¨¤¥£Ÿ–›ž“€~€ƒ~~€„ƒ„ƒ‚€€}|~{f_Š¡°­¦þž¢¡£¢¢ ŸŸ ž¡£›œœzs^T=-(5 g> $  SX&( 2Q *'$5 ";"k/lsmqqmoobd`YOH>„¸¹»¹¿»¿¶·»¸´³¬±²²´åµ¶¸¸´¼»·º·À½¾¼¸¿¿»¹»·¹¼»¸¹··¸·¶¸µ¶·»¸²³­²·µº¶¹»¹¸¹¹º·º¼¾½»¸»¾»»º¼¼º¹¼½¾¼»½½¹»¶ºº¼»¼»¶»½¹²³µ·µµ¸¸·´¶¶¸·§¹º°«³¸·º»¹»º¼»¹¼¹¹¸»¸·¶¶º¹·µ¶²³²³°¯³¯³´µ¸�þ¹¹¸³³ÁÅÐÓËËÒáßÜØÓÞÛÊ»¼¸¶µ¯´¶¸¹¸´µµº¶«©µÎçêæååãåèæããåääáäææããâãæçåäÞШ}pm?d•wRAF_IF2A;Mr}`:LbA67Q[sv:Q\ZCEN)%CVVYYg³žŠFd=@TD6[c¯]\„lYoo_ybR[iÆ”²­¥ª¬§­«¨­¨¬¨’•Ñö÷øøúùúúûüûùûüûúù—øøùúù÷öûùûûúúûúûúùúúùûùúùƒúøúûùŒúúûûüûûúúûùùûƒúûúû†úûüûüúûˆúûûüüúúûúƒùùúù‰ûûúûûúûúûùˆúøøùûúúùûü‡úûûùúùúù…ûúùøúø‚÷öõö�³›œš•• ¤®²ªª¯¼¼¹´³¼»«žžš˜—•—™š›œ—˜˜š˜Œ‹–ªÀÃÅÂÁÀÀÄ¿¾¿¾õº¿ÁÀ¿¾½¾¿ÃÀ¿º¬„P:57xhO98MA7$!/VH")#1"-0 >MA:90..07=DO‘‹}D?!>>'4gO:OTF`R69L¥u’‘‰Œ‰ˆ‰…ˆ€jl¦ÔÛÝÞÞßáÞáäááâàÞƒÜÝÜÝ…ÛÙÝÚÜÝ‚ßßà›ÞÝßßàßÜÞÜÜàÝÝÚÛÝÞÞÝÜÜÝßàßßà߇ÞààßÞàâá†ßààäáßâËãâßÞßßààáÞáãßÞßàÞÝÛÜÞßààßáßßàÞßÞáßßÞÜÛÚÜàáßàáßÞàÞââáâààßààßßâÝÝßÞÞÝÛÜÛÚÛØÙÚÛ�þƒ…y{Љ”š“”˜©¨¦ ž§§’„†||yz‚„……€‚{iiw©­¨¦£Ÿ¢§¦ž¡£žšž£ žžŸ˜›—…[/H:   1&   "  ZYNë -!$)6+oKrvnnkgnoee_^S;=y¯¸º½½¼½½Â¿¾À¿¿¹¸¶¶´´µµ¶±¯¸³µµ¹·µ·»¹¶¶µ´¶¶´³³²´µ³³¯´´³²°³´·¸¹¼»½»º¸»¿½¸»¿Â¿¼½‡¸¼½¿¾¿¿½Š»¹¼»¹¼»½¿º¹»··¸¸¶µµ¸¶·¸¼»¸¹·¹¶¸¶²¯®¶¹¸¶µºº¼»½»¼º¸·º´´µ´µº¶²²´²±°³¯¯²¯´³´�šµ´·¶¾ÇËÏÊÎÖ×ÛÒÛßàåáÓȽ»¸·´·Ž´³´®¦ž²ÆÞæçãáâáòäæåäâäåãåáãæãââäâÝâåܰ}WW|©„TASTLVBNo(!/7G2+2'8jv[5TI]UVF!C^Fkipc>«_T<XQR);Rc{_Z`BG|`kTrÓ’­±¤©¦¡«¨¦«ª§£€¨Ååóö÷øù’ûúúùùúûúúûûùùúøùøø÷…ùøøùøùøùøùø„ù÷ùøù„úùûûú‰øùùúüûúûüù„ûúûûúù…øùûüúùøù”ûùøùùúúûùúûùúùúùó÷ùøù’úùùûúøùúøù÷øøùùúúùøöõ‚ôôõ�›ššœ› ¥ª¯«­µ³¹°¸»¼ÀÁ´« œœ™˜š™þ–—‘‰‚”§¸ÁÁ¿ÃÁ½¾½¾¾ÁÀÁ½¿ÁÀ¿¼ÀÂÀ¾¾ÁÀ¸»½²”C+"NŽqM<FF942T$(!$%%1)&(HRH0#!.76IIQL6”^9!%(1.MA27-;jdNJ8V±qŽ•‰ŒˆƒŽŠˆ‹‡„~Yš¢¾ÖÝÝàáäßßâãäåââäâãàááàßàßÜÜÙØÙÚÙÚÝÞ™ßÞÞÜÞÜÝÞÝÛÝÛÛÝÛÝÛÞÝÞßßÞßßáŽßáààãâßâãââáàáâ„ãåâáâ¶áßÞÝßãàâáàßßáßßÞÝáßàááâàßßààßààßÜÔÛàßáàßààßÞßÝÞââãÞàÞÞàß…ÞÝÜÞÜÚØ×�þ‚…†ƒ‹‘‘˜’”¡›£š¤¨§®°ž‘‡ƒ€€}}‚‚€|vmbq©©¥¢¢¡žŸž£¡¡ ›ŸŸ¡š¡Ÿœšš—“™œ”q\-.a<#% &  ]1 ð!=:&#'}HpylkgbkkfgaYQ0Nk‘°¹º½¾¿¿½¾ÃÄÂÃÄÀ½¾¾¼»¸º¹³²±¯®®±¯®²°¯²³²±®±±³±°²³±°²±±­°°³·»»¸¼ºº»¸·º¿½»»¿À¾½ÁÁ½¹½¿‚Á¿¼©»¹¸³´º¿¾¾¼¹¸¹¹·µ··µµ¸¸·¹»ºº»¶¹¶¹µ©¯·¶¸¶¶³·¸¼¹¸·¶´¶°²µ´¶¸¸´‰³±²³¯°±°±³�ƒ®¯°²þ¾ÈÈÑÛÚáÜããàáÞÛÐÛǼ´¹º¼¹¶¶­«»Øèçââáâàáàáàåãäæåæåäæäæäåæåáââáɘ£²²Àc\pZ}…IdqzEU…C 2U5.<G?ndLAMcV€_6AVWaBJvVa±q=P^Q`H21OO?^?œ:–Iƒƒ€…¢Ÿ®²¤©¥¨ª©£§¨¡¦‘”Éïõöøù…ûúùúûú’ùùûúùúúûûúùøù÷ö÷õ÷öø†ùùúúøùøƒ÷ùûúùúù†úúûûúúû„úùúúû’ùûûüúûûùûúûùúüüúûúû‡ùûúúùúûùƒòôùú‚ûûùŠûøøúúøøùùúùƒøøùø‡÷÷ööõóôõö�®”––˜—–§©±»¸¼º¿Á½½¾»²º¨ž—šœž›˜˜ž¶Ç¼¼½¾½¾¼½¾¿þ¾ÀÁÁÅÀÁ¿ÀÁÀ½¾½¾¦rfo||ŠV'E3^m@NJD5Z1 #?.+1:.6!-&/6mS+ 07;?-6R7BŽP#%*3!0/;81w9jago…|Ž”ˆ‹†ŠŒ‹†‰ˆjk¡ÌÖÚÛßßáàßßáãçãááâäà¬ßáßààáàáâáÝßÜÜÝÙÙÕØØÙ×Ö×ÙÚÝÞÝÞÜÜÛÜÝÜÝÛáàÞàßàß‚àáà•âáàááâßàââäâãáâáäåâààâ‚ãâà­ãáâßÞÞßààááàßâáßßÞÚÐÔßáàÞàáâàÞÝààßÞâåâßááàáÞÝߌÞààÞÞÝÝÛÛ××ÛØÖ�Ð~€~…“’™¥Ÿ¨¥¬®¦§ª¦™¤„{‚€~yt‚šª¥¢¡¥£Ÿ¡Ÿ ž¤  ¤£¡œž¢Ÿ¡›Ÿ¡Ÿš˜˜–PCLUYd:(0: þ-    4%   P    F;/1:PNlujkflmlcd`VQ:<t¡°µ¹»¿¿¾¼»ÀÃÆÄÄÁ¾¿¿½¼·¼½¹½¹¼¸¹»²²³¬««­ª¬¥¨««¬²´²³²µ°®¯Ç±¶»»¼¹¸¸··¶¹½»»¾½»¹»¾À¼»¼¾¾¿À¾½º½¿¿»¸º½À»»¼½½À½»º»¼»ºº½¸µ¸¼¼ºµ¶±¦®¶ºº¸¸»–·µ¶¹º··»º´·¹¶º¹¸·¸µ·¹´²†³´´±®´²¶�þ°¯¯µ´µ·´¾ÌÒÔáääçåæàÝäá×Ó˹··µ²­¾ÐàãäâááââäââááäâáåçåèéêéçææäåâãåäàÙÆ¢‡‚¨kf]P]aa|DS`N;GS`[C|‡pTomO_S…k=%OB`TD†ˆf^t‚DK_PLC&°]^\P=1DE„u‡º¡¯¶¬§¤©©¨¤ª¤¦”Ôöõö÷øøùùúùùúûûúûüûùøûúúûüüûûüüýûúûšøùø÷öóóôúûûúúùúûûùúúûúûûúúûŽúûûúüûüúûüüûûúûüƒûüüûƒúúûüûüû†úù÷öøúû‹úûûúûúûúûúûúˆûùùûúûùùú‰ùøúø÷öõôõö÷�ƒ””“™þš–ª¯±¼¾¿Ä¾¼¿½¶±©œš—•“‘ ¯º½¾½¼»¼¾¾¼»¼¼½¼¼½¿ÀÃÆÇÄÀ¿¾½¿¼½½À¹­—mNJXuR:83-CINU@&5/25=KH3X^4#FG&1.[V5%7/:44b\8+AR"-7'$GA3.5Î'09n_tx–zŽ˜ˆ…Š‹Š†Šƒznf®×ÖÖÙÜÛÜßßÜßáãäáàßáàÞÝÙÜÝßßããáßáàãáààÝÞÜÛÚÖÔÍÎÒÛßÞÞÜÛÝÞ’ÝßàÞÞßÞÞßßÞÞßàáààßá“àáàßàáâàáàâãâàáãááäá…âááààß—áàßáßààßÜØÕ×ÝâßÜÝÝàáßÞÝÞŒßâãáààáàÞàßáߊáÞÝÞÜÚØÖ×ÚØÓ�þ|‚ƒƒ‡’˜˜¥¨¬´°±®§ª«¡˜‘ƒ~{xyzˆ• £¦¡žŸ¢ Ÿ¡Ÿžž¡ ž¤¥Ÿ¤¥¥£œžžššœ™•wH)(4M.!&  +5  )$  '" " µ  8);GfLjxridkklcd\PS>:…­¯®±µ¹¼»¼½¿ÀÂľ½¿¿¹µ»¤¾À¾½¾Á½À½º¹º¹¯°²­¤›©²³µ³·±¯´¶¶¸¸¼¹½¹¢º»¼»½¼º¼»¼º»¼¼½½¼¼½¾¾¿¾¾¿¿½À¾»½¿Á¾¼©½¿¼»¼½¹¸ºº¼¶²°¬±»¼¼»¸»»¼½º¹·¶¹¼»½»¶·½·µ»»ºŒ¼º¶±±´·µ²°®²³·�þ¹º¶µ¶¶º²·¿ÇÒÞßâéëêçåèàáàç×ËÀ³Éßãáßààäáâãáãææäáàââæéèçæèèççäâèèåçææè×´|fpŒ–€y‘˜‡nbƒ\d7D*knJHW^G=YEX\gWT`h\QVJUJ„‹P5RyF3DDCT>,¥!EE5+-7Km‰—xZm•±¸§¦¤¦¦¥¤®¢•™žßööõöøøùúŽüúûûüûúúøúüûûúü‚ûûüûüüúøøôùøõöøøùúüû„üûûüúƒüûúû†üüûùûüû‚üûü‚ûúü„ûüýüû‚üüû†úòøúøúûŒúüüûúûùûüûûúûùûüüùùûùúûúùù÷ö÷ö�ƒœœš™¬œ”–¥­¹»½ÄÆÆÃÃÄ¿¾¼Áµ«Ÿ“§»½¼º»»½¼¼¾½¼½¼½»»½¼½Áþ¿ÂÅÀÁ½¼ÁÁ¼½¿¾À°‰WDBScH?ZiagUGK,1%RV<>GF*$*56H4.(<O"661*/ce8(:'+%.!/+$*1Xv~cHQp‘™‰‡…†ˆ‡„Œovqt¸ÔÕÓÖÙÙØÝÛÜÞÞààãâààÝÝÚÛŠßÝÞÞàááãâßàˆáßßÞÞàßÚÔŠÚÛÓÖ×ÖØÙÚÝÞÁÝÝÜÞÞÜÞÞÜÝÞààÞßááÞßÜßàÝßáßÞááßâáßââàáâàãààÞÞßßààÞßáàÞßÜÝÝÚÐØÝÙÞÞÜÝàÞÝÜÚÞãâÞÝÝßßÝáààßßÞÞáßÜÝÝÚÖÕÖ××Ñ�刈„ƒƒ…|}ƒŒ—¡¤­µ¶··¯²­ª¥¯¡‘„wŒ¥§¡œžŸ¤žž›¡¡ ¡žšŸŸ£¥Ÿ¡ž¡¢Ÿš™ žœžœš e8!-7%"1?39)" '#   þ   ,(    #4=*#Cpzkiedkjbh[FKCG‘¯¯©¬°µ¶··½¾¿¾¿ÅÂÀ¾¼¾·º¿»¼½À¿½»¼¼½¿¾½¼º³·Àº¨ £®³¯©ª®­«¯³¸»¹º¶¸¸»¹¹º»¹»»½¶¶¢¾¹½ººµº½¼º¸¸¹½ÃÁ¾¿À½¹º¿¿¾¾ÁÀ»··¹¼½»±¹º»¸±¤±º´»¼¼»¹¼¼ºº¹··´´¹¼¾¸´¶¾¼·¹»º¸º½º·´²³µ´±²±³´µ�Ÿµ´·»º¶·°·¶»ÈÒãâéâåßáêêéçáÚàéèããáƒßäãáƒâåäå‰çæäæäåäæåæðåæèçééèèçæç·d^guo~‰€plDKJL!~.>}W-5LQB41@*3ZR8Yh@kJE;BD\=4eJ.9-I@&)&""43t„\~‰—¯³œ¤£¦§¦¤©¢”–“šàöõõöõ÷ö÷øøùùúúûùû‹úúüûûúúûüûûü’ûüûùøøúüüûúúûùøùøùø ùúúùúúùúûüüúûüúûüûúûüüûùüûüûüúûûü‚ûüû‚üüû†ùúúûúüû÷öøúøùúùúùûûùùúûù†ûûúûûúûˆúûúûúùúùú„øøöõöõ�þ™˜›œ›š“˜—›¥®¾¼Ä¼½¹¼ÃÆÅÀ»µ¼Ã¾¿º»¼º¹¼¼»¼º¼¾½¾½¿ÂÀ½À¾½¾ÀÁÀÀ¿ÀÀÿÁÃÀÂÁ¾Ã›K1,8(3C?JP6*!(W!0eN16?8)!**$"63 (G9=(,"-^38$ 5'%#0%!¾ !!J|vcB`ev•€…†‡‰ˆ…Š‚npmq¹ÕÓÒÖÔÕÔÙÚÙÝÝÞßáâãäàßÞÝàáßàâàâãáàáà¢ÞàÝÛÔÔÚááâÙÛÛÚÙ×ÕÜÛØØ×ÙÛÜÛÙÛÛÝßßàÞß‚àÞߨÞßáßßáàßâáßáàâàâàâÞáßÝÝÞßàßßÞßßÞÛÛÖÕÖÛÚÜ݃ÞÞßÝŒÜÝÝÞÞàáÞÞßÞßàŽßàÞÞáÝÝÜÜÙÕÕÖØØÖ�þ€ƒ‰„‚‚x~{Ž•©§³§©¦£°µ²¬§£¯®£¢Ÿœžž£¡›™ž ¡¢¢žžŸž Ÿ ››Ÿžœž¢¡žžŸž¢x( !( ;+    +    „º<6--2Inwciggkhbh]GE@C±®§¨¥©©®²´¹½»½ÄÁÀÃÁ¾º½À¼¼½Á¾»¼º¼½½¼‘¸¼»®ž¡®¿¼º·´¸µ°¯¯³æ²¯±µ´µ·µ¸¼»º´µ»¸º»·¸¹»º¸·¸¹¼½½¾½¼º·¼¼¾¼»¾¿¼º¸¹¸¹ºº¹»»º¹·©«°·¸·º»º»½½¹µ´´²´³¶¸¹»ºµ¶½¾º¸¸¿»¸¹·»µ³´´²°²³µ´±�¤·´·¹¸¹¼¹¸¶·¶¯ÈÔÖÖØÒ×ÛÝÓÊÍÕèéãÞÞàßßàáâ•àáãååçèåääåæååããäçååçèçáè²UESO[wY41 $& Od‚jc05@O(5O& HX.@edn:5*AWWrZ:910.$.  .Ik€A_lzµ¦­¡¦¡¦©¨žŽ•—âöôòòóôõö÷õ÷ƒùúùúƒûûúûú…ûúûúüû™ù÷÷ùùüûûüüûùûüýüüûúúùùø÷ø÷ø¯÷øúùùûûùùúûúúüûüüúúûûüûûüüûûüûüúûüúúûüûûüüùõùúúùúù‚ûûùƒúùúùúùúùúùúùøøùúùøø÷öôõ� š˜šœšœž›š˜—˜¥®±±²­²¶¹²©ª°Áÿ»»¼ºˆ»½¼½½»º¾¿ñÁÅÂÀÀ½¾ÀÀ½½¿Â¿ÁÁÂÂÄÃÂÄÅÃÅ-+3'&( 1JeSR5><:*H(-5! 7B6!$#/>GQ8$''! & ,?^6BLYt’‰€†ˆ„ˆ‰‰kojn½ØÓÐŒÒÔÒÐÖÙÚÜÝàâãàŽÞáãâääáâßááââãá•ßàÙÕÕØÝãááàáààäßàâãáßÝÜÙÙÖ×ÙÛÜÚÙÛÛÜÝÝßàááàâááåâàâáâãâ“ààáààßàáãâààâáØÕÙÞÛÝÞÞÝÞßßÜÜÞÝÞÞÝÞàÞ“ßÞàÝßáààÝÞÞßÞÜÛÜÛØ×Ø�þ‚€‚…„†€}{{~wŒ–™•𔓛¡—Ž‘•¨«§ž›š›žŸž  ›Ÿœž¡£ ŸŸœ¢¢š›œœ› Ÿ› Ÿ¤ŸžžŸg   %0 !      ² . "7`dredghddggZEE<>ް¬£Ÿž¡¢£­²²´»½»ÀÁ¾ŠÀ¿Á¾½¸¼¿¾À¾§¹¼»º¯¡Ÿ¨´Á¼»¿¾½¹º»¾»»¼»·´µ´²´³®±´´®¬®´³¶Òµ¶··¹½¼¼»º¿½»º¸¾½½¼»¿Á¾»ºº»»¼½ºº»º²©®µ¸¸··¹¸¸»¼¼¸µ±°³±±´³´·¹µµ¹¸·²µ¼»·³´¶·µ´´µ³³²¯°±�·¸¥¶ºº¹µ±²·´²µ½ÄÇÈÆÉÖÑÙàáÞÞÛÝÜÜÞßàáââäååäâþåæçäâæååçææäâäæåæççæççãÖ²|CF8-<=/)'C@6'?¯¥=0Xr\wC¢©†h&:B;mU,))+;FN$!+  FRWmQ <CH<Av«²›¢¡¢ ¡•˜—”âõõôðôôðåáâààæèìòˆ÷øøùùûúúûúúûúûûúùûùúûø÷÷ùŠúúûúúûøûüûúûú…ûûùúúù‚øù÷Œø÷÷øùúúüúûúúû‰ùûúúùúûûüúûüûû÷÷ûûúúøúúûùûúø‹ùøùøøúùùøúúùøŠ÷ø÷ø÷öõ÷õôñó�›þšžœ˜”•™–•—¢¤¥¤§³°´º¼»ºµ¸¸¹ºº»½¾½¿Á¿ÀÀ¾¾½ÁÂÃÁ½¾ÀÀÂÁ¿¿½¿ÀÀÁÃÂÀÃÄÀ°ˆO&*$##$)&".61'.„;,NcGJ2‡˜|_'!&/'?""')19?& 7»=AF2z.35.4YŽ“†…†‚‚xxtgl¼ÕÔÐËÐÏȹ´²²´»ÀÈÑÚÜÝàÞßáãåäåâáàááãŠáßáâÝ××ÚÞàá†äáàßäãâ›ãâäâáàáÞßààáßÞßÛÛÚ×ÙÝÜÜÝÞßàâƒääãá„äáàâáŸãâàáãäãàâßÞÚ×ßáàßÞáàâáààÞßàÞÜÜÞ݃ßàà߃àÞàß‚àÞ݇ÞÛÞÛÜÚÚÖ×�¢ƒ…„„€‡…{y{€~|}ƒ…‰Š…‰—–›¢ ››š™˜”˜žŸþž ¡ £¢ŸŸ›¡ž››Ÿ› ›žž›œš›Ÿœžž›š„[,   HB ,#LVO>  " P -kwbdfd`c``SOH;;Œ°­¢˜›‘È|y|~‰’™¨³¹»¾¿À¿ÅÅÄ¿»½¿ÀÁ¾½½¹¾½±¦¤«±·¼»¹À¾½»½¾½½»½¾½¾½»º½¼¹º»º¸¶³´±³¯¯µ²Ï³´¹º¸¹¸¼¾¼º¹¾¼ºº»½¿ÀÀº¾Á¾½½¼¹¸±°·¸¸¹¶·¶¹º»º¹º·¶°®¶±²³³µ·µ´¸¹¶¶´µ·¶²³²´´³´´¶³´³²¬­�‰½ºº¶´·¹¼¹µþ¶¸µ·³µ¾ÅÖÝààßÞÜÜÛÝÞÝßââãäãæèçææçææåæçæçäççæçæåäæçæãåæãääãæ½ƒu…Z:L?9#*V?:21=2 KY>Jkˆ~hkA%"+0,%**@6+E%H4 ku,Eg]D¯=#§#2cª°š–¡žž¡œ™’‹‘•âôôñððìäÈÆÎÐÑÔ×àï÷ùùøù‘úûúúùûûúûüùùûüûùùúû‚üüûüüûúûüûüûûúûùú‹ûúûûüûûüûûúùƒøù÷øùúƒûúùú‚ûúû„üúøùûˆúúùøùúúûúùúù‹úùøûúùúûûùùø…÷ö÷õóôõ�þžœ›˜›››˜š—˜š˜˜”•ž¤²¹¼»ºº¸¸¶¶¹¸º½¼½¾½ÀÄÃÁÁÃÁÀ¾ÂÁÀ¿ÁÂÀÁÀ½½ÀÀ¿¿ÀÀ¾¾À¾¿”PF^7)=& 2)8528( AE4'@qo]a?#&'9( : "& ÁRN&M?.‡(+R‹’~x„‚‚…~yoilo½ÔÒËÉÈ´”“Ÿ¢¥¬·ËÖÛÜÝÛÝßáããßáâáßÞâàâÓáßÚÜÝÞáâßáãåáâááâãäáâãâááààÞÞàáââáâààáâßààÞÞÜÞÜÛÜÚÜÝÞÝÞÝßâÞÞáßààßâàáââàßߨ×ÚÝßàÞàßÞà‡ßßÜÞáÝÝÞ‡ÝÝßÝÞÞÝ߉ÞßßÞÝßßÞÜ݆ÛÝÛØØ×ØÖ�…†þƒƒ„‚„~‚~~yy‚ˆ– žŸž™˜—™™—šŸ ¢Ÿ¡¤¤¡§¥££¡ ¡œ›ž¢ŸŸ™›Ÿ¡œ™™ž›žœ—–f-"1   DB?>      1+¯ !X *kwb^gb`d]_VF>?@«¨™”‘‹~ZYdinq|Š¡°·¸»¾úÄÈÃÀ¿¿½¼Àº¼¼¿Á¶±°±´»½¼¾¿Á¿¿À¿½º½»¿ÀÀ¼º¹º¼¾½¼¼¿¾¿»½¼½ºº¼º·´´±²³±²°´µ¸¶¹¿»¹º¼¹º¿Ä½¾¾½¼¾º±²·ºº¶¹¶µ´¶·¸¹¸¶·¸¹´²¶´³´³³¸´±·¸¶··¶´²³´³´µ¶µ³°®²³²�œº¹º»·¶½¾À»¼»º´³¶»ÂØãßáàÞßÞÞáàþáßáæçéêêéèçèéèéêéêççèæççæåçèççèèææäÜÔxks»[[a<4JLK_.#-$3%c !4P"*3En(--B>A1+'nk]+"="^“Ÿ™”¤ŸŸ›šš–‰Š–Ÿßõñ•éðèàÙ½ÅÍ×ÛÛæó÷øúùùøúúû„üüûûü‚ùûü‚ùüûüýü„ýüûûüûüûüŠûûüüýüûûüüûüûú‰ù÷ùúúùúúùûü†ûúöõúûü‚ûúùûúûüŽúúûúùûûúûùùúûûú‹ùùøøùù÷÷öôôõö�þœœ›žš˜žŸŸžœ›––˜›¡³¼º»½º¹¹º½º»»¹¸»¸»¾¾ÂÅÄÀÂÅÃÁÁÃÅÄÃÀÁÀ¾¿À¿ÀÂÁÀÁÀÁÁ¿¾´¨H7=…78?)!-"EY3  %  Z /H$/4\*85·$QNL)'Iw}x‡‚~{uffpw·ÑÌÀĺ°§Š‘™¦¯°¾ÏÖ×ÜÞÛÚÝÞÞàááàáàâÞàááßÙÝÞÝßáƒâäåâºäãààáààááßÞßßãåäáâááâãâáßááàßÞÝÞßÞàßÞÜÚÙÝÜÛÜÞÝÝÞàÝààßßÚÓÓÛÞ™àÞßÞÛÜßÞÝÝÛÜÝÝàßßÞÝÝÜÝÞßÝÞ’ÝÝÞÞÜßßÞÚÚÜÝÝÛÙØÖØØÖ�¶‚„ƒ‡ƒ€„†‡ˆŠƒ„}{|ˆ˜¤œš››šœ›œ›™š›”›¢Ÿ¢¥¦¥¦¤¥£¤¢££¡žŸ¤°žžœ›ž¡¡œ ›‰v O )/  3Ú <    '"  "!$  $Tca\iaa`^\R@>BH‡¡Ÿ„znPYcs~‘¨¯µº¹¹·ºº»½½¿ÂÃÁ¿ÀÁ´¸¼¼¹­¸·¶¹½”À¿½½¾½º»¼º»»½»¼¼½¾¾¿ÈÁ¿Á½º¿¿¼¾À¾½¼º··»¹·µµ¸¶²³¸¹¹¸·¶³¹»º½¼»µ°¨ª¶º¹º¶¸¶µ³µ¶¶µ´´³´·¶²¶¶´µ±³·µ³´²„¶µ´µ´‰°°¶¶³´±®²µ´�¥ºº¼º¾º¾¿¹»ÂÂÁÅÅÑÛßßàßâààÞÞáâäââáääãâçèêˆëèèéêêëëç…åèçèéèéñëêÞÇ‹}f_HCC"$&)t="9¬Š) /Y.2^-) #3B  !tW#<I‘WeP?\Zy#IŠŒ–žœš˜–”’ŠŠ›ÝÛ‡‡ÑÙÐÑÅÂÑèôõõùùûúúûùúùúü‚ûúûƒúûýü‡ûúüýüýûü†ûüüûüûüƒýüûüŒúýüûüüûúüüûýüý‚üüû‰üüûùùúúûûù‚ïõû‡üüúüüûûú‹ûüûüûüûúùúúû‡ùúùùúùúûúù÷‚ööõ�œœ  Ÿ›¡¡ ¤£­µ¸·¸º¼½¼¸¹½½¾¼»»¼þ½À¿ÄÂÄÀÄÉÂÁÃÅÄÆÄÀÀ¿¾ÁÀÁÅÄÃÁÃÁÄÆÃöž\D31) &&$F+’v) )J+.!Q-) !'9   _E&-qBH8-RI^h9mrqzƒ~}ywsliltµ¹gd¥Š§Ÿ ”‘¡¾ÑÒÔÚ‘ÜÞÜÚÞÞÜÜßàâãáàáßÜß›ÞÝáààâàßáâääààâäââäàßàÞßããáà‚äãâ¡áàáåäâÞßÜàÞßÞÞáàãââßßáàÜáâáÞÚÝàÝÝÛ‹ÊÓÞÞÝÞßÝßßÞÝÞÜ“ÝßßÞßÜÝÜÛÜÞÝÞÜÜÝÝÛÛßàŠÝÜÛÝÝÜÚÙÛÜÜÙ�¿ƒ…„ƒˆ…††ƒ‡Œˆ†‰ˆ’›ž›žžœ–™›œœ›–œœ˜™¢ž ¡§¨¥¤££¤¤¥¥£žž¡žŸ›žž› ž§¥Žq9& 3 bA &  þ.      2 H,%5RIRU]c^_`\VPG@>H‡‡?9rqii^YlŒ¥¤«³µ»¼º¼¸º·µ¶»¿ÃÀ¿Á¾¼±·¼»´±º¼»½¹·½À¿¿ºº½¼¸º¼¹¸ºº»¿¿ÁÃÀÀÁ“¾¾Á¿¸¿¿¾À¿»¶»¹¸»¹¼½ ¿ºº¾½·½¿º¸¶´··º²³¯™¥´µ³·¼µ¼»µ³µ³²‹³´·´²²³´³²°¶²°®®¯±´µ´´µ¶¶²­´„¸·¶µ´�±¶¸¼ºº»¼»·»½¾ËÚßÞÜßÝßÝßÞàáßãàäâààãæååææèçéêèçææèèæå…æèèçèæëçèçéðôïçËuR@%8<(.Ÿª^Š*+1$"# 1e{G'$4"z# +' AW" #   Fo@g“s’€.*Σw@‡ˆŠ˜’“”’‘‰…‹™Ó“P`•ÀÔÒÚãó÷ø‚ùøúùøúûüûúúùûüûüûûüýüúüûüûüûü†ûüüûûýü„ûûüüúƒùüüûüû†ùùûúûúû‚üüû‰ù÷úùùûúúüúûøùùúûûúûúùúø÷ùùúù‡øøùúúùùú‡ùø÷÷ööôõ�¹š›œœžžœ™œž ª¶º¹·º¸·¹º»¾½½À½À½»¼¾¾¿À¿ÀÃÂÃÀÁÿÀÄÄ¿À¿¿ÀÂÁÁÃÁþÄÂÆÏÏÊÀ¢G$ &Œ’GT" )H\<%',l %% 3B&%  6S1CiuKd^#!¯m~X.dlmcn}wwyuuskehs¯z/<i‘££­¸ÌÖÙÜÝÝÛÛÞÞÝÜÜÛÚÜÞßáãâá¶âáÜßáààßâäæåáãåâåãàââäãáåãåâàáäååââßáâáääãåâãääßàÞßÞßßá‹ãÞàáÝÜàááààá“ààáàÙÛßÝÜßáÝßÝÞàßÚÚÜ›ßßÛÝÜÝÜØÚÜÜÛÜÜÞÝÛÚÞÞßàßàÞßÝÞÝÜÛÙ�“„ƒ…„ƒ…‚‚€…ˆƒž¡ž›œ˜šœ›‡Ÿšœœ˜™œ þ¢¡§©¥ ¢££ Ÿœœ›¢¤£š™Ÿœž ¬±ªœ}.  db$D  ( F   $=E.1 y=L-KHMHP]XX[VTQG><F}Q:Yo‡mw„ž§¯±µ²º»½»··´³µ·¹¼½¾Á½¼²ºÁ¾½¶ºÀÂÀ¼¿Á¿¾Á¿»¼½»¹»¼¼½¿ÁÄÅÄÆÀ¾¿ÁÃÿ¿¼¾ÂÁº¹¹¸¶¼¿¾¾½¼»¾º·½¿À¾½¾½š¹¹¶¬°´²°¸¹¸½ºµµ¶­­°±²³µ³°²´‡««²³³±¯®‘±³¶µ´´¶µµ±´³¶¸º¶²²³�ƒ¶±µ´—²·µ¾ÕÝÞÜßÝÛÞÛÞÞÝßÞááãàäãþåèæääææèçååãææåäããäåççèéççâàãâäíóöóòëâÊU&$_=?f@eg*JIZ80AJQ4 >ƒ€0*%2C^GUE  T\VDkŽD<‚«^4{OL†£•jkbƒŽ€‡‹ˆˆ„wy‡•¤<‹FRfµÙæðö÷øöø‚ùùø‡úøùùøùùú‰ûùûüüûúüûüƒûüûüƒûûüûƒüüûü…ûüûüüûŠüûûùúûûüüúû…ùúúûûú ûù„úúùúûùŠøùúùùúùúùùø‡ùûùùøùøùøù„úúøøöôóõ� ™”˜—–™–š˜Ÿ²¹º¸»»µ¸·¹º¸¹»½½¾¼¿½¾¿¾‰¼½ÀÀÿ½¼¿ÈÀ¿À½ÀÂÁÂÁÄľ»½¼ÁËÕÙÒÐĸ¤371N4>9 5<U3'-2F3.yt.# /9VGL7   þ>D9+Aa,$VD'mE9asMPIgrdlnlkfXXdn.+2Aˆ«¾ÌÒØÛØÛÝÞÞÜÝÞÜÜÝÜÜÛÞÞßàÞáàâßÝßáâáàäçæåãæçæåãåãáäãâáæâáâäââäåáâåäãåãâàâããßààßàâàãÞááàä‹ááâáÝÛààãáàá™âßÝÞßàáßßààßàáßÜÝßÝÜÞÝÞÛÛß›ÚÛÛÜÜÛÝÜÞÞÝßÝÛÝßÞßàÝÜÞÞÝÜÙÙÖÚ�¨‚}}|zƒš¡¢ Ÿœ˜›•››™ž›œž ˜œŸžŸ¤¥£¡ ¡£¢§ ¤ž™›ššœž¡¥Ÿ›œš››©³´­ª¥˜…&  '%2æ /  TP+!+   - ,O!J&2]T374JSGLPMLE65;BQU{Šœ¦¯±¯³¸·¶¸¹»·µµ²µ´¶··¹¹»–¹¹½¾¿¹»ÆÆÇÃÆÅÁ¾Â¿¿¾»½¿½Û¾ÀÆÇÅÃÃÁÀÀÁ½ÁÂÁ¿½¼ÁĽ»¼¹º¼¿º»½¾¿¿»¾¼·¸½Á¿¼½¿¼½¾º¸±¶´µ¶¶´»¼»·¸µ¯²±²²µ±³°²·¶µ°®­±³²°¯±²µµ¹±´¶‰¹¶¶´µ´¶´¯­³�´¨²±²¹¿Ï×ÛÝàÛÝ‹ßáßàßÝßááâæäŠâæåææåææäãáƒàâäâöæäâèêçãäâãîööõóóðæÁ–a<N;(7IX‹7 DZ³ŽC^<#`X‚mÞ_ >ZH<h76Cti56[[cZx¦4$T†•~_ZXr}q{qmnh^l{}m.9<_²Âõôö÷ø÷÷øƒùùúù‡úùûûùûùú‚ûùúüûüûüˆûüûûüûüûü„ýýüüû‚üûüŠûúûûúüüûüûü†úûøöúúûƒúúùúûùúùûüúùúúùûúù‹úùûûúùúúùøúù‰úùúùø÷ùùøù†øö÷÷öôóò�þ—•“–¢®µ·¸º·¸·¹·¸¸º»¹»º¸»¼»½¿¿¾¾»½¼¾ÀÀ¾¿À½º»»º½¿¾»¼À½ºÀÇÁ¼½¼»É×ÚÖÒÓ˾›qF&-& *:EZ5Bž|@L-@@o]ÅU %?I=:W' *2WQÁ(!68D=Y„#Ads\ABBWaU`USQKALWWL!(A†•ÓÓרÛÙÚÛÞÞÜÝÞÛÜÞÝÝÜÞàßàßáÞàßÝ”àâäåãçãáäææääâßááâàæãßáääããääâããáßâääãâááßáàâßãáäæâÃáÛÔÞÝââßàÞÝáßÝÞÞàáßÞÜàáÞßàÞÞßÞÞÛÜàßÝÜÞàßÞÞÝÜÚÛÜÝßßÝáÛØÚÜÞÞßÝÝÞÝÝÜØ×Õ�õ€v||„•˜› Ÿžžš™š™—œžœž—™œ™™ŸžžŸ¢¢£ Ÿ ™•”˜•”œšš›ž™™ ¢›žœž¯»¼³¯­ªŸxV3 #C lP& C0<   +,  ¸'+ &O $?P>-/0<C7A:54.$,1/( We¡¦¬­²²³·¸µ¸··µÍ´¸¶¹»¸º¸º¹·µµ·¶¸¸ÀÇÅÇÅÆÄÀ¿ÀÀ¾¸»¾½¾À½ÁÈÆÅÂÀÄÃÂÁÁ¼¾¾¿¼¾»¿Â¿º¼¸¸¼¿»¼¼ÀÃÀ¾½º±¬´¹¼œ½¹¸¼¹¸´´¶·´µ´¸»·¶¶´³´±³±´³´´¶šµ²´±±²´´¸·µµ¬°³µ¶·¶µ´µ¶¶±­¬­�޵±°·ÆÖßÜÝÜÜÞÛÛÝ ßááâàáÞàÞáàáåæåãåèåäâäåâåäãààßâæ䋿áâåãåäçîöù÷ãööõóÛ½£…@.>Id˜x @+‘R,/#©•'$23$&,/*'Bk,"G,9HPA1Y‘‰‚Šd%|‹oacKVXpspka^c^Pt‡{{„Ž“£˜€úö÷‚øøùˆúúûúùûüûü‚ûüûùúüùúüüýüýüüýüýüƒýüýüýƒüüýüúüûüüýüüýüûüûüý†ûúûûùúûˆüû÷úûüüýüûƒüûûü‡úüûúúûúûúûúûŒùùøùøúúûûùùø÷‚ööõ�™–”›¦´»¸··¶¸·¶‡µ¹»¼¹¹»ºž»¹»¿½¾¾¿À½½¼À½»À¾½»º¸¼¿¼½½¼ºº»¼…ÀÊ×ÚÜØçÕѳ—…l/#88FlF .`u&€f>#‹c‚ ,/($&2.3W'="*,;7*?b`]`I"hnOCD0?BYYTQGDEB5SbTWins~jYÙÖÙÚÚÜÜÝÞ”ßÝßààáßÞãááââßÞÝÞßÛÛâªáäããàáãåãááààâãâæååççãääâãâããäßßãäãáãåçæãßá”ààáååäáãàäÝÜÜßãáÞÞÜÝà±ßààâàßàáàáâààáßàÝÜßßÞÝßáßÞàßÞÜÞÞßßàÞßÛÛÚÞàßßÝÞÞÜÜÙØ×�~{€Ž¤ž›š™›™˜šþ›œ žš˜˜™—ŸŸœœ£ Ÿ›œŸœš–‘‘’œžœž–—™˜›Ÿ®½Äÿº¹µ²®’tgS D6 /IN2 P3^  / 2  ,)%("FM1%',-9þ;871+,)19.2HRUU;-®°¯®±´´µ¹µ·»¹·¹¹¼½º»½º»¹¸¹¶±³·°³»¾ÃÁÁÀÁÁÀ¾º¿Á¼¸¼¾½ÁÄÀÁÇÅÄÁÀ¿Ã¾¿¿»ÀÀ¼½¾ÀÂÿ¿½¹¼À¼»¾ÀÀ¿½¹º¸²¶¹¹¼»»¹µº½º¶·¶¸¹ º¸·¹¸·¶´³µ·´º¶µµ··¹¸¸¹·¹´µ¶·µµ³³±Œ´µ¸··µ´¶·´®®­¬�«³¸ÄÞßÞÝÜÜÙÜÜØÛÜßßáààßßááãáàáäåçæåâåããâæåãåãá„àãæåæ‰åæäåèìóùùø÷™õîåߨ¹”½ªMQ~=!'.B9<€X>ÐW'$2|œR;#Ym‚j?>8;p‚“PmMŠŒMUcajGb4l™zTL<V\YtrpfdXaT^gves¥®©ŠsŠä÷÷ø÷÷ùøúûùúúû‚üûüû‚øùýüƒýûüýüý‰üýýüüýüûüýüþüŒýýüýüýüüýþýýüƒúûúüûüƒýüýü‚ûûüýüýû…üüûüüûúûúˆùúûüûúùø÷öôõ�Š–œ¢¹»¹¸¶¶³´‚¶µ¸‰»¶¸¼º»¼»¹½‹¿¿¼¿¼»»À¾»½»þºº¼»½¼º½¼º»ÀÅÍÙØÕÙÕÙÙÕÒʽ·¯“u›‹7/L0,1g?, ;&hE6P[jV4/+6dn}E[.c]h:2>AJ.E)[{]93"9A@ZUSJH>E8=CO>K‹ƒ]AW¸Ö×Û××ÛÛ݆ÜÜÝßÝÞàëßßãáàáàÞÝÝÜÝØÚáâáàâàáàáãåáßßàáâááâããççääáàâáßáâßÞááãáâãçäààááßáÞÞáââãâãâßÞÜßßáàßÝÞàÞààÝàßàãàÞÞáàáàßßàßÝÞßÞÜÞÝßÝÜÝÞßßààÞàÜÝ‹ààÞßàÞÛÙÙÛÙÔÕ�þ{…£¢¢ž™›˜–ššœœ™˜˜›š›žœœ› šœ››› œ›–“–”—›ž žŸ˜™˜š §²¿ÀÁ¿¹¸¶²§£ž”q[…i"3   6   Al-HIL9'""*V[a.D?-þ4 G_B#%0,>:842)/&&%+!-ZjZ6'‡±°±±®²²·¸·»¹¹½¼¾¿ÀÀ¿½¼º¹¸´²µ³­³ÀÁÄÁ¿À¿Á½º¿¼º»½¾»ÀÂÁÂÃÁÀÀ¿¼À¿¸¾½¼¿À¿¾ÁÁ¿Á½¿¿Á¸¼½¿½¿¿»’½À¼¶¹¶»»½»¸º¹»¸¶¹¹ºˆ¹¹»º´³³µ¹¶·ž¸¸··¶µ¶´¶¶··´´¶³¸·´µº¹¸¶µµ¶µ²®©¨� ËÛáàÞÞÜÜÚÙÜÚÚÛÞàßßÞßÝàâàäàããææãâãå–ääãâààääãåææãçåççéòøúùøê÷ö÷÷õôòèÄÃæÞϼ]_zKcac@5.-Mc=&1UR!I€RRƒQ™ÐðìæÕ¾ØÕáåÝÔ̸·§h!&[oCt‡¥¦|qRR?ozu|whghppog:7>l¥¯ˆgzªÑö÷ø÷öøùˆúûûüúüüýü‡úúûúøùüýüˆýýüûüýûüý‚üüýü‚ûûü‹ýýüýýüûüýýüýü‚úûü‚úûü‚ûüûƒüýýü‚õôüûüûúùúùúùúûüûûúûú…ûüûúù÷õ�šª¶¸ºº¹·¶µ´µ³´µ·ºº··º¶º½¹¼¼¾‘¿¾¾½¾¾¿¼º¿¾½¾¼»»½¼ý¾»¾½¾ÀÁÑØÙÛ×ÖÚ×Õ×ÕÔÑÏÅ¢ŸÀ¸®£t<Kh?QQT0$#+;C2!(;; AmCEl†Gq…±ÐÏÉ»£¼»Ã¿·±¬—Œ€MDP3R`‡…]V:<,T_Y`[LKOWXTH"G‰a=Cu¡ÓÕÛØÕÙÛÜÜÞÝÞßàßàáåãáãßÞÜÜÛÙÙàâááààáââäáàááääáÄääæåãáààßáààáâãâáâäâáååàáâàáâàÞàßÞßâåáàÞÝßàâáàÞßßÞààßàáßáÞÞßàßßÞØÕàßà‰ÞÜÝÞßÞÜÛÝÞ”ßááàáÝáßÞàâàáßÞÚÛØÚÚ×Õ�Œ’¡¥¡œŸœœ›š˜š˜‘œš›™˜˜š——ž› œ™›‚žž™˜›—•š››ŸŸœŸšþ¡®º¿¿»¹º·³µ¶´±°¥z›–†…Z(8Z/@<@ 0[41EV(Wm—¹«§š‰¢¡«¤“‹…m[M# ",5^dC=%&:G?E?166<;<0 )Wa4<fª¬±°©°³³¶¹ºµ»¿¿À¿Â›Ä¿¿¾¾»µ³³±ª±»ÁÂý½ÀÁ¿Á¼¼½¸º½ƒ¹½¿Àä¿¿Á¾½¼º¸¼º»½ÀÁ¿À¿ÀÀ¿¾¿¾¿¾Á½¼¼¹´»¼»¶»¼´·º»º·µ¸¹·¸¶·»»¹¸¶¹·¼¼³²«ªµ¸¹¸¸¶²´¶º¶²°³±³²´¶·¸¹´»¼¸¹·¶·¶·³µ´²²®­�„ãáÞÛÙÛ¥ÜÝÛÞÜÜÞßÞßÞàáàáââãåâàâáãääæåãââãäåæéçèééèééìô÷öø÷öõöõõö«ôìëðóóòóôêâí÷ÜäÀÏß×ÒßÞ±ÇÖ×»•}Q~Ùì×¹çèÚ°ðùõòôµõòïìéäÝÝß˪½®Ç€–Š……~yxyŠŽ‹ƒ•™š˜vTKJ{œwm‚‡­Âñôø÷÷ø‚ùùúüüûûúûûúûúùúø÷ú üû„üüûûüû„üûüüû‘üüúùúûûúûüûüüûüüûüûúû‚üüûüûƒúüüû†úøúúûüû‚ùùú‡ùøùùúùúûüù‡ûûùúùøøö�½»¸µµ´·µ¶¶··¶¸±¹·¸º·º¼»¼½¿¾½¼»¾¼¾½¼½»¼¼½¿¿ÀÁ¿ÃÿÄÄÂÃÃÉÓÝÚ×ÙØÕÖÔÕéÔÒÌÉÌÏÐÐÓÑÅÅ×ÚÀɧ´Â¼·ÐÅ—°Å¿¡sgJoÃÛ´™ÏϺ™×ØÑÒÔÓÔÓÒÎÌÉÄ¿¸·¶£Š›’£ata\a_`\\^cjnnpnerxz|}W1)'VvRHSJzÉÑØ×ÙÛÛÞÞß›ÞßßàßßÙÞâàâßÝÞÝØÕÝáâààâáâßàá‰ßäâããáàâàäÅáâááâàáààãåâàÞßÝßâãáâããâààãâáààßâàßàßÝÝßáßáàááßàáààâÜßÞßààãßßÞßààäßàà݃ÛÛÜÞ‘ÝàáàßàÝàÞßààáàßÝÙØÜ×�þ¦¤Ÿš˜˜™šœ›š›™›–˜š›˜—šœšœž£›—˜—›œ¢¡œ››ššŸŸ¥¥£ ¡¢£ Ÿž£»Ä¼¾¼·±³±³µ´µ²¥£¯±®­¯µ¯´ÃÆ¢³Š™¦§¤À´~”±¡RH8[¬Ä’u´°•y´Ã´«¯±±²±²«¦ ™‘w¬a{nt7I76>AGC@ACJOOQOFTYY\_=5N. %>T𤬬ª²¸„¹¸¼½¿þ¾½¸¿¾»¸µ´³ª¦¶»¿¿¾»¾¿Á¼½»º¹½¼¼½»¹½½¾½¾¾½¿¾¾½ºº½À¿»¹¸½»º½¿½¾½¿¼¼»¼¾»»º»º·¶¶¹·»½»¹¸º»¼º¹º¸¸·¶¹¶¸µº½¹¶±³¶¹»··¶²²³µ³°°´±³³µ¶¹¸»¹·¹º‹¹¸¸¶¶µ¯²³²³°±�ÝßÛÛÚÙÚÛÞÚÝÞÜÝßàÞßßááààâààâÞâáâ›ääåáââåèëïîéëëêëëèèïùùøùø÷÷öæ÷÷óçëóöõôõõôôõóôöõóó÷÷ù÷öôõõ÷òÚܾç÷ôêíóòóïöõôôóóòñòðóóñðìèçÒÓÖãâÖ˲šwg`[WTWX^T^]adns€‰}z{„‡xgŒ¡Ž¬Àéö÷÷øˆùøùúúùûûùúøùúú÷õúûúúûûüüûûúŽûûüüûüúûüýýüüûüŸûüýüûúúøùùüûüûüûûüûûüúûüýúûøûúûü‚ûûú‚ûûúŒûûúúûúúûúûúúûˆúùøùúúùøù…ûúùûüû‚ùùø…÷õööõöõ�¡ºº¸·¶¶¹µ·¶¸¹¶·¸·¸¹·¹¸»¼º»½½¹º·»»½¼¶»½º¼¾ÂÃÇÈÅÃÆÆÁÆÆÃÄÎÜÞÜÝØÙÚ×רÚ×ÖÏÃÈÒÓÓÔÔÕÒÐÔÓÓÖÕÒÐ××ÚÕÔ•ÙÚи¿¨ÊÖÔÈÊÑÑÔÎ×ÓÏÔÓÏкÏÑÒÐÐÉÅÅ®¬¯»º³¥ŠsUJC=<78:@7=@CIQRZeYUX`cR@cqSw½ÒÔ×ÛÜÝÞßßÞàÞØÛÚÛßÞàÞÛßÛÕÒßâ§ááàáßàÞàÞßáãâáàáâàãææáäãáåããááääãâßÚÚÝãá¡ãääàÞßáßßãäãàÜááàÝàßÞßàâàÝÝßàÞÝÚÝßà…ßâàßãà„ÞÛÚÝÛ‚ÝÜÝ‹ààÞßßãßááàßÞ…ÝרÙÜØÕ�þž¡›œ™”˜šœ˜˜™œššœ›•–šž™›› —˜˜š™œŸŸ›™œ›¢¤®¯§§¦¥¦¥Ÿ ¯ÀÇÆÂ¿º¶³³µ¹º·±Ÿ ¬²°®²²±³´±±´´²²·¿À¸·¸³¶¹®–›©´±¨¨°¯±­´´³®¯­®­­®³°¬©£¡Ÿ‡ß‰‹•–‘}eP3+*&$ #$&(+1/:C846;9-28:QŠ£¡¦­¶¼»º¸¸º¼¼¾½¶·¸¶¼¼¹±³µ±¤¤¶»»º¼º»½¼¸¹¶¶¸¼¼»¼¹º½»»¿Â¿¿Á¾Ý¼¾Â¿»¼µ·»¸º¼¿»»¿¼»´¹»·»¿Á¼º¶»»¼¼¾º·¶¸¼¸º·º·µ´µ¶¶´´¶¼¹´¶º¹¶¸¶µ¶´²®°³°­´³²³³´¶¶¸¼»¹¸¹¶·³²³²­±²±¯­�‰ÜÝÛÝÜÛØÜßÞàâà”ââáãáààßàßàáâáàäãâçèé…êêëêêìŠï÷ùø÷øø÷÷ö÷†ùøïêòöõƒóööõô”õôõôôõôõöõõôòõöõöóôôöõ»ôòòóóôóòôóôññòõôôñæÝåì餋}ƒ…€zwokbb^Wa]RRVW]UXhlz—¥™§µßèíñ÷øùùûúøùûúùúûüüúúù÷öúûûüüûúùûúûøô÷ûüûƒüüûü„ûûüûüˆûüûûüüûúû…úüùûùûüûüû†úûûúùûùûŠüûúúûúùûüûúûùøûúûùûúûúûûùúûúøöõõö�¶¸¸µ¸·¹¸·¹¹·¸·¹¸»ºº¼º¹½½¼¾½¼ºº»¸º¼»º¹½½ºÀÄÅÅÄÄÅÈÇÄÅÉÉÌ×Ý·ÞÜÛÙÚÙÛÜÛÚÍÇÒÖÖÕÕÔÒÓÔÕÕÔÕÕ×ÔÕÓÓÕÒÔ×ÕÔÕÐÓÕÔ×ÒÔÕ×ÖÕÖ××ÕÑÑÒºÓÒÒÐÏÐÕÔÑ˾¸¾ÄÀ~g]cfbYUOMGCB;FB;786:48KJRoxbr…°»¿ËØÜÞÝßàßàß—ÛÞáàâàßÜÚÛÖÖÜàâåãâáÛÜÞßÛááâãàßãäåâãäââàá˜ãáãäãäâáßàßáããââàßàÞßÞáßâ›ááâáÞßàâáàãàáàÜßÞÜÚÛáßáàÞâàá¤ßÞááàßÝÝÛÛÜÜÛÜÛßàáßßÜÞàßÞßààßÞÚÛÙÛÛÚØÙ�þž™›œ——š›˜š™œœžœžš™š™œœ™š›š™™––š™—œšš ¡ž¢¥¤¨¨¤¥¦¦§¬¼ÃÄÅÅÁ¼·´·¶¹À¼¦Ÿ¬²²°®«²´±´³²²±²±²±´±­³´°±°©¬°²´°°³µ··²²³³²­®¬±²±±³¯®ª©ª®¯˜±®¢“ž¥WA8>C=94-+%'&%"º'");?&5Kzƒƒ­µ¶¶¹º¼¾º»¼»·»¾¾½¼¶²±±ª¥µ»¼½º»º³µ´·´¯±¹¼½½¸¹Ê½º¾À½¿À¿¼¾¼»¾À¾»½¹¾¿¾¼»¼º¼º¶¸²µ´º»¿¼»½¾¼½¾»»¼½·¸½¶¸ºµ´¶²³²´²´´¼¾µ³¸»´³µ¸¸µ±š´±­±´±³·µ´´±¸¹·²´¶·µ±°±®²µ±�‡ÝÜÚÜÜÞÛÝÃßßàâááãâãæäâäåæãâáäáààäãáæçåçéèêèèêëéêêíôøúùøù÷øø÷÷øùúùòèóõö÷÷öö÷÷õöŒõõöõöõöõöõôóö‰÷ö÷öö÷÷ööõŠôõôôñòñòóòó´òîíË–†„ˆŠŒ‰Œ†ˆ‰‰„‚ŠŽ|‚•³¥‘§£®ÈÒÜêõøøùúûúúûúüûüûƒüúúùƒúüûüƒûüûü‰øöùüýüüûýüýüƒûüýüýü„ûûüüûˆüüûüûüûûüûüûŠüûúüüûûúúüû…üýüûúûúûüûúû…úúùùûú…üúùø÷ö�ž·¶´··»¸º·¸·¸º»»º»¼¾¿¾¿½¾¿À½¼»½»þ¼»ºÂÀ¼¿ÁÂÅÁÂÆÆÄÃÂÉÑØÜÛÝÜÛÝÜÚÛÛÝÝÛÑÁÒÖ××Ö×ÕÕÖÕ×ÖÕ×Ö×ÖÔÕÓÕÔÔÖÔÓÔÒÔÔÖÕÕÖÕØÕÕÙÖØÖÔÖÕÕÓÒÓÒÓÐÐÎÏÒÑÑÒÑÍÎÅÆ¡pa_cihlieiddkggbbhlZWbqŽ}g˜s{kq— «ÁÔÛÝÝÞàÞÞßÞßàâáâá«ÝÜÛÚÙÞßßâäãááßÞßàÜÜÞàâáßàßãâäááãåäâáãáãàäåßâ¦áßßâããàÞààßáàáÞâààáàáâäáàßßáÝßßàßÝáßÜÛÞŒÝÞâáààßàÞÞßàÞŒÝÝÞàÛÞááßÝÛÜÝ…ßáßÞÝÜ‚ÛÚÜÛ�‘¡ž˜˜—›™™š—™›š›œ›ž‘¡žšš› žšœš˜–Ÿ›™ž”£Ÿ££ ¢¦¢£¤ª¸½ÂÄÇÇÁÀ½º¤»¼¾­›©¯±²³±°´¶²´³³´²³´³³²¯¯²°¯®¬©¬±±°‡±¶·¶µ²³µÁ±±³µ³²±ª«©¨©¨¨©¬¬©¦¢vG:;<DBD@==8>E?>:<@B24>H`L8BE46HbioŠ«´µ·¸»¼¿¾¼¦¾½¾½½»µ´³²¯µº¾¼¾»º»·µ·ºµ±¶¼½¾¼·¼¹·½¼¾ÀÁ‰ÀÁ¿¾¹À¿½½¾—¿¾¼¹¸º¼¸´··¸¸¼»¾¹¸»¿¸»¿¼»»¹·ºµµ¹´¶´¯³´°²²´º¼¸µ¶·µ´³¸·´²³´¸³®´µ·¸·¶µ³±³³µ±·¶¶µ®°±´´¸³¶µ�ÜÜÛÜÞÞÝÛßÞÞÝàßàâŸãàáääáãáâáäâäâåââæåääççèæçèéêëóùø…úùôîð÷‚ö÷ö„õöö÷ö‚÷÷öõöŠõöõõöö÷ööõö†õôö÷ö÷ö·õöö÷÷öôòïïëéëéêè䫈‡…’‡…Œ‘“”—£¨–˜¯´µ© §¨¥§µÅÙëó÷øùˆúúûúûüûúûˆúûùûúùûûüûüüûûüüûûüüûûúûü…ýüüýýüûüüûüüýüýýüüûúûü‚ýýüûüûŒúûùøúûúúüùúùû‡üûûúùùúûƒúûüû‚üùû‰øùúûúøùúù÷ƒõõö÷ö�¶¶µ¶»¹·¶·¸¹µ¼¹Ã»¼¼½º¼¾¾½½»»¸½»¾½¾»ºÀ¿½½¿ÂÃÀÁÄÀÀÄÎ×ÙÛÚ×ÚÜÝÛÛØÚÝÛÔËÍÔÔÖ××ÔÖÓÔÖÔÖØ×Ö×Ö‰ØÔÓÔÕÖÕÔÕÔ×âÖÔÕÓÕÕÓ×ÕÔØØÖ×ÖÖ×ÖÕÕÏÐÍÉÅÁüºƒidbahkmga_feklmkrnq‡ŒŽ€v||wx†•§¿Ì×ÛÚÛÝßÞÝÜÝààßàáàÝÝÚÝ×ÖÜáßàáäáãßàáàßàßßÛÞßââããáâá‚àáâŠààääåäåàßßàƒáâßáªàáààßÞßâàáßÞÝàÜÜÚÛÜÝßßÞÙÚÙÞÞÝßäßßÞÚÞßÝÞáààÞ–ßÝáßàßâàßßÚÛÜÞßÞÝÜÜÚÚÜÙÜÛ�É¡˜˜š›™˜š™–™™››šž››™™šŸž˜›œž›ŸŸ›žŸœ› Ÿ ŸžŸ¦¤¤²ÅÇÂÄÃÃÄ¿½¿½¿¿º®¦©°¯²²°±°†´²±±²²³„±³±®²þ«ª¬ª­°°²®¯¯°²¯°¬°²¶´³³µ¹µ·¹µ²­§¤¢ž™œœ œ’T@<=;BBC=648;B@DAJXXCD\a`PFJGBBRbu­µµ··»¹»»½¿½¼¼¿»¹º²´²­³¾¹½¼¾¼º»º¹»»¹¸º½·¸´µºº»À¾¼ÁäÁ¾ÂÂÁÀ¾¼Á¿Á¾¾ÀÀÄÀ¼µ¶¹½¼¸¸º»½¹º¾¾¼¼½¶º¹¼¼·¸¸´¸¯¯´´³³±±°¯´³³·»´º´³´´³¸·µ´µµ¸µµ´¹º¿··µ¶·°²µ¶¹²´µ­¬±¶³¶´¸¹�•ààÞÝÞááÝßàÞÝÝÞßààßãâàã‹ââäááãåãáåãäŸæèæèèçèéîöùùøøùùúúùøøùù÷ïîóôñìöõ„öö÷÷õ„ööõõöëõöõõöóôõõööôôööõõôõöõôõöö÷ööøø÷öôóñïìéçæÙ»–‘މ‚‡ŒŒŠŠˆ‘‘‘“ž¤¤š”ª°¶¤¥¤¨£²½ÃÒåíõ÷ùøùùúúùúûüúúùûúùùø÷ò÷ûûüüûúü‡ûüüûúøùü†ýüüýüúü‚ûýüƒýûüûüû‡üûúüûüüûŽúüûùûûúûùøùùûûú„ûúûûúŠûûüüûúûúùùû„ùùúùú‡ûùøúúù÷öõö�‹ºº¸·¹»¾¸·¹¹¸»ƒ½¼»¾®½¼¾»º¼½¾¼¾¼»½¾¾¿ÂÂÄÃÄÄÀÉÕÚÜÙÛÝÙÜÝÜÝÞÝÝÚÌÊÏÑÏÉÔÕ†×ÖÖØØÖ×‡ØØÖר×ÕÖ†ÕÕÖÓÔÔÕŽÓÓÔÓÕÔÓÔÔÑÒÕÕ×Ù¿ÚÚÙÖÓÑÎÉľ»®“plle]bggedblfkfkoysnƒˆŽ|{z}w„‘–¤ºÅÔÚÛÛÝÞßàÞÞàáÞ߈ÝÛÚØÑÌØàâ‡áàãâãâáâááßÞØÞáäãåäââáâ“äáâãâæäåáäââàâàããáãà°ßâáâãàÞáßâÝßßàÝßÝÜÛÜáßÜÛÝÞàÞÞàãáààÞàáàáàáßÞÝÝÞàÞß”ááßàÞÜÝÞàÞÞÝÜÞÛÙÜÜÛÚÝ�£¢¡š˜™ ›œœ˜•–™›šš™žœ›œš›šœŸ›ššž˜œœªœžŸžž¡¦ªµ½ÃÃÀÄÁ¿Á½¾ÂÁ¾·¥£ª­§ °±­®®°²³µ®¯°±‘²²°²°®ªª«§ª¬¬°«ª­¯‰­ª®¯±¯¯±³µþº¸´±¬¨§¤š˜—ˆiEBC>68:=:;:>;A<CEQZTH@V]`JJEFAS_ft‹•¨°´¶ºº¸º¼¼½½¸»»º·µ°«¦ž­¼º½½¼»½¼»½¿¹¶¶º¾¸µ®³¹»½¿½¼À¿½¿½¿¾¿À¿¼ÁÀ¿¾¾ÀÁºº»¼¼¾ºµ»Êº»·³¹º½½¼·¹´¼½·¸¶µ·±¯±²¶´²µ³´´³µ¸¸³¸¹µ¶¹º¹·¹´´²µ¸»¶·¶º·µµ¸·³¸·º¶²µ´²¯±¶´¶¶º�áàßßàââààßßÞßààá‰ääâããæâàßâ‹áãâåáÞãåççéç‡íõùùúø÷ùøøúôëïöçãóóôóõõö÷†öõöö÷÷ö„ôôõöôóõöÉõöôõõôóôõõôôõ÷ööôñîîìëçÜηž–‘ˆ†Œ—•’™šš’ šŸ¤ª£¥¤¦«¨©¢¡­½ÃÌÎÖâñ÷øùøùúúùùúŠûùûúùù÷õöøû‚üûü„ûûüûüûüüýüûüýüûüùû üúûƒüûûü‹úûüüûûüüûûüû‹üûûúúùüýüûûüƒøùùû“úüüûûùúùúûûüùúúøùúüù‚øûù„÷ö÷÷õ�ˆ¼¼»¼»½¿¼ºÃ¹º¼º¾¾½¼½¼¾½¹º½¼¼½¾¼¾º¶¼ÀÂÂÃÀÂÀÃËÏÚÜÚÝÔÖÝÞÝÛÚßßÝÔÇÌÔÿÓÒÒÑÓÕØÙØÙרÚÛ…ØØÙÚÖÕ´ÔÕÕÒÒÓÒÓÔÕÓÔÕÕÖÕÓÓÒÓÏÑÓ×ÔÔÕØÖÕÐÍÌÊÆÃ¾±¢Žzolne\aglrrnvm}v{€…}~€†€~xv€‘— £ª·Ë×ÛÜÜÞÞßàß¡ÞÞÝÙÙÕÑÓÜáâããàââããâááäââàßßáââãâãâ†ááÜßáæãâääãßàâáàáßãâáããâàÞâãááàâãàßÞà”áâàÝÝááÞßßâãáàßàáâààá…ãäááàß™áßáâáâßÜßáÜÞÞßßÞÞÛÝÞÞÝÜÝÛÚ�ʤ£› ›Ÿž™›ššœžœ›ž›œœ¢œ›—š™œž˜›™–šŸ¡žž £©¶¼»¿Â¾Ãľ¾À¾ÂĽ®›£°˜ª©ª©°¯°²‚±°±²’±±°°¯ª§¨©¥§¨§¨¬©¨­°þ«ª®¬­§«®­§ª®±­­¯¨¢¡ ›”ˆyePFCE>67<AFGEJKJATKRWZPPQRXPLDAKajqr~‰ž«°´¹ºº»¼¼»··¹··´°°§¥¨°º¸¹½¼½¾¾¼½¼·¹·º»º¹¹·¼º½¾¼ÀÁ¼¼½µ»¾Á¾¾¼¿ÁÀ¿‹¾º»º½¼»º¾º·¾’½µµ¹½¼¼»¼·¸½»»¸¹¹·²’»º¸·¸º·º¸¹²³¸»¹º½º¼ž¹··¹»¾¼ºº½¹¶µº¸²¶¶¹µ³·³´³³·µ·¹¹·�ä‰âäâáßáàâåâŸäæäâåãââäâááäââääáæäáåçèèéæçêðöø‡ùøøúúùúø÷ïëòööóòöõôòöõö÷„ö÷õö÷‹ööõöõöõõöóõô±óôõóôñòòóòòóôóñóôóôôòòïîéßÑö«¦˜›—‘œ¤¤Ÿ¢¢¡¥Ÿ¨ £¢—®®µ·¹°¡«¹¿ÇÎÏÑÔãñöùøúûûù†úúûûüùø…ùúúüû üû„üýüû ü‚ûüûüûü‚ûû ü„ûûüûü„ûüûúû„üüûüûŠúûûüüûüüûüûüúùúùùøùùúùøö÷÷öõõö�µ¾¾½½¼½¾»ºº½½¼»»¼½¿¼¼½¼¼½»º¼½º»¾À»¾¼º¿ÁÄÂÂÁÂÃÍÖÙÛØØÞÕÒÛ’ÙÚ×ÉÅÐ×ÖÒÑÕÖÓÐÕÕØÚÖŒ×ÙÙØØÕØÖ×ÕÔÓÔÓÓÐÑÒÓÔÒÐÐÒÓÐÑÏÐÐÏÏÐÐÒÑÎÑÑÐÐÑÊÌÊÇÀ²¥™„ƒwtwslwx~|~}|{…z~}}{†ˆ‘†x€Œ“œ¡¢¤§¸ËÔÛÛÝÝßÞàÞÞߨÖÖÕÙÞàááâŽãàáâàßàáßààßâáâŸáàáââãââÞÝÞààããâááßààßàáààáâãàáâ’áßâààâáàâàâàááßááàÞ›ßßáââáßÞâááßàáßàááâààáßÞáßá߃ÞßÞß‹ÞÝÞÜÜÚÜÜÛÚ×ר�þ¦¨¥¡¡Ÿšž›Ÿœœ ¢£œŸ˜šžœšœ›ž›—žŸ˜œŸ  ¢Ÿ¢ªµ¾À¼»½Â¾Á½¾¾»¹¸¢œ¥°±¬«¯°¬ª±°°µ²³²¯²°¯°´²¯¯«­«ª§¨ª¦¨ª©¬«§¥©«ªª¦¦¥§¦¥§¦¥¢¥©§§¨«§ •ñ†ymc\[PLNKDNOVTRSRRSNXMUSRLWX`beTELWeosuzzˆ›¨²µºº¾»¹¹¸·º¹·«©¬©¯´¹¿¾»¼º»½½¾¼º¹¹º¹¸»¿¼»¾»½½¼Á¿½¾¾º»¼¼º¿¾½¾½»»º¹¾½»º¼Ìº¾¿¾¿½¹º¼ÀÀ½½¹·»¼»º¹¼º¹·º¼¸¹¸¾¾º¸·½»¸¼ºº»¾»¾¼¾¼º½½º¼»¼º»¸¶¶¸µ³²µ¶±´¶µ´±´¶µ²´³²�‚ææå¬ãáÝâãâáãâçèåâãççáããåããåäåçæçèéèééçèêêñ÷ùùúøùøù÷…öîìô÷ö„÷÷õô÷‘öö÷÷ö÷öõõ÷õõôõôööôŠõôòñòóóñððòðñÂðññòðñóñêÞÊÆÀ¼º·»¹·¸¶´µ¶·´¯³²¯²²¯¬­ª¬¨ Ÿ¥¬´®«µºÂÌÏÌÑÖÚåïõøùùúúûúûûú‡õö÷÷øúûüƒýûûüûüý üƒýüýüýü„ûúüûü„ýüüýüýü‡úüüûüûûü‚úýü”ýüûýûüúûüüûüüýûúüûüüûŒüûúùúùúùûùúúù†úùø÷ööõö�‰¾¾¿¾¾À½¹»º„½¼¿¿½‹¾Ã½¾¾¿¼½¼»½¿‹ÃÄÂÄÅÄÂÃÅÌÔÝ’Û×ÛÝÕÖÙרÚÛÕÈÆÐÔÖÖדØÕÕØÚÛØ×ÖÔÖØÙØÙÕÒÔÖÒÑÓÓÐÐÓÓÑÐÍÎÏÏÌÊËÎÏÌÊÎÎÍÌËÍÌÏËÌÍËÀ±Ÿ™•““”’‘’‘Œ‰‰‡‹‹Š††„…‚z{†Žˆ„‹Ž–Ÿ¡ž¤¨­ºÆÒ×ÛÚßÞÝßÜÝÚÏÐÒÕÙßàââãäá¥ãàßßâáâååááãâàääãàãáãääãßâãââãäãâàááßá½âáââáàããåãáããàâàßáâáààãàäãàáâàáãßáààáàÞáããáâàßààÞáàáâÝÜßààÝÝÞߎÝßàÝÞßÝÚÙÜÛÛרØÖ�¯¤©¨¥£Ÿœšœœ˜œš ¢žœœ¡—™˜ŸŸ›œ¡›œ ¢žŸ  Ÿ¢£±ÀÄÿ¼ž¾º¸¶³´·´ªž§®¯¯­®²³­°´³²³±±°­®¯½¬ª«¦¦§¥£¦«¦¥ª©§§¢£¤£ ¢¤¤¢¡¡££  Ÿ¡¢¢ ¡¤¡’†qlhgjgighkebhdfe`a^[]É[[Z]UKMRXb[UYZhpqqyz}‰—¦°µµ»¹ºº¹¶·¸®Ÿž£¨±¶º¾½¸¼¸·½½¾»¼»º¼¾¼½Á»½¼¼½¾»À¿¿À¿¾Ž¼¼½¾¿»»·³»º¾·»¼—½¿½¾¿»¼º¼¾¼»·¶µ¹¹º¶¾¾½º¼»­¹¸µ¼¼º¾¹»º¼¹½¼¼»¹½¼·¸¸»º¶´·¹·µ¶³µ´¯±³µ³±¶¶²¯³³°�‚ãäá’âáãâáââáâàáæáäãâäãæçææèæèëéèëêçèîöøùúùø÷ôòôöøôééö…÷ö÷÷ö÷ƒöö÷öõôöõôóóõôôóòðñŠððïïññððñòðŠîðïðñðìåÕÌ¿…»»´ºº»§¹¸º¾¾º·º¹»»¹¼»½¾Á¼º¼ÃÃÅÆÉÉÆÅÃÅÒÖ×Ýäíõ÷÷ùŠûúûúùøôõ÷øûüúü„ûúüûý‚üýüƒúüýüýü†ûûüüûýü„ûûüýüû…üüûüûüýü„ýüúûü„ûüûûü‚ûüûúû†ùúûúøøùø…ööõôõöõ�‚¿½¼½¼êº¸ºº¼¼º¹¿¼¾¿¾¿¾¿¾½¿ÀÀ¿¿ÁÇÂÁÄÆÄÂÈÒ×ÙÜÜÚÜÙÜÜ×ÑÏÑÖÚÔÄÃÔÔÕÖÖÔØÔ××ÚÛÜÚØÙØÖÕØÖ××ÔÐÔÔÑÏÏÑÑÐÏÍËÍÍÌÍËÉÉËÌËËÌÎÊÌËÌÊÉË—Ìȹ©¢”••–””Œ’“”–”’‘’—”‘¸’“‘”“•–—’“”™šœœŸšš—˜¢¦¨®¸ÅÑ×ÙÝÜÛÝÜÜÛÚÔÌÌÔÙÞáàáâæåàßáäåàáŒãååæäåãâåâãßã†âäãáååã„âäâáâÁãäããÞáâáâãäâááßàááàããäããáääæãàãáââãäàÞààâààãåâãàÞááàãáÝßÞÝßáàßÞßÞÝÜÞ܈ÚÚÛ×ÙØÖÖÚÕ�“¤¥¥ Ÿž žŸŸ›™›™™––ž™œ——¢¢ž¢Ÿ¢ Ÿ žžŸ¬¼ÁÆÁ¾»‹¹¼·ª§¦ª®§˜š¬¤©©®­°¯²²³²±°°­«­««­«©§¦¤¡¢¤ ¡¢¡œ£¢ž¡žþ ¡ ¡ œ  ¢Ÿžžœ˜‰wrfgijgj`fijmkhkhlmiehffefiflnkgijoospqsnjhitvvŠ—¥­¯´´¶º¶³µ°¥œš£®¹¼»º»¼¼¸¶¼½½º½¼»»½»ÀÀ¼¿¾»»º¸¼¾¾ÀÀ½ÀÀ¾½»½¾»¤¹º·¼¿¿¾¾»º¼»º»»º¼¼¸··¸º¼»¹¹¶¸º»ºÀ½½»º±¼¾¸µ·¸·º¸¹¿¹¼·¸º¾½»º·¸º¹µ¸¹·´¶¹·µ±µ´³³±«¬²²±°³±®¯µ±�ÀããáãâáâßàâáàÞàâãáâáãáäåâäåæçæççèêêèêéêíõúùúøø÷ø÷öøøðãçïõåÞïõõööõöŠ÷÷ö÷ø÷ö÷ö÷ö‚ôõôóôôòóóòòññððîíŸððïñðóòòññîïñòïêßÒÆ¾Á¾ÀÀÅÀ¼¹¼À»¼ª¿¼¿Á¾º¾Á¿¿ÃÀ¿ÁÂÀÁÅÁ¯±ÂÉËÌÍÏÒÏÕÓÏÐÙâï÷ùøöøûúš÷øôôùùûûüüûûüýüüûüûüüûûüûýüú†üýýüüýü„ûüüûüûüû‰úûüûûüüûûüû…üýüüý ü›ýüûûüüûüüûúûüûüúûüûûúúùøøùùøƒöõôõö�¿¼»½¼¼»¹¼¼»»¸¼…»½½¾¼¾¦¿¾ÀÁÂÁÅÅÇÂÄÃÆÌÓÙÝßÜÛÚ×ÙÖÚÛν¿Êѽ·ËÑÒÓÔÕŽÔØ×ÚÛÚÚÖØ×ÖÕÖÓÑÓÐÐÏÎÎÏÍËÊÊÉÊÆÇȹÊËÊÌÌÍÎÏÌÌÊÊÌÌÈÀ³¦™“˜”–˜›˜””™”••”–”™™•”–™——™——˜š——›™ˆ‡˜Ÿ¢°£¥¢¥¤¡¢ªµÆÕÝÚÓØÞÝÛÜÖÓÎÌÙÝáãááàããâäâãæáàáàåäåççäãàâääááåâãâããâãåæäá“åäããâßáâàáââãáãââãåã¢ååãáâäåãáäâãááâßáâááßáãââáßàáàáãàÞà˜áâáàáßÜÜÛÜÞÛÝÜÝÝÚÙÜÙÖ××ÙÚØ�‘§£¡¡žšž£š˜˜™Ÿž˜š¶œž–šŸ¥Ÿ›œ ¡¢¡ž ž¡¦·ÃÇÆÄ¾À»¶³¶º©”•¦ˆŸ¨¨©ª©¨¨ª©®®°°±°¬›«¨©§£¦¥¦¥¢¡¢Ÿ žŸžžœ  ›™™œžŸíž Ÿ¢žŸžœž˜‚thckghlomjdjokmmlokonkinnkkmllnqjkqo][nrtvvwxswpmqw€“¦²°©°¸¶µ²¨¢œŸ¯´¹»½¹¹¼ºº½¾¼»º¼»ºº»»À¾º¾»·¶´¼½‚¿Á¿°¼½¹¼Á¼º½»º¿¿Á¾¹¸¹¸¶¶¸·º¼¹¶¸¼¿¼¾½º¹ºº¹º¼¸º¹»»·»¼¸·©´¸»¸¹¶¸º»ººµµºº¼··¹¶·¸¸µµ°µµ³³°¬¯°²³°®®±°²´�‘âäáãââãáâãááàäãâàá’äáàâäèèæçéèêèçéëòøùƒøù÷ø’óïèÚÃÚòööõöõööõöö÷ö”÷÷öõõôóôóòóñòñðòôòññð¶ñïìíïîñðñòòóòòóóôïíåÛÎÇÉÇÄÄÅÇÂÃÃÀ½¿½¹¿À¾À»¾ÂÀ¿¿ÂÁÃÇÅÅÆÅ¢ÄÁ¦”³ÊÏÍÎÖÚÙÛÚÚÙÕËÛíõööùúùúùø÷óôúùûƒüûû ü‚ûûüúüû ü‚ûûüƒýüûü„ûûúûü…ûüüûüûˆùúüûúûüúû†üüùúúùúŽùøø÷÷ùøø÷÷õõööõ�‚¼¾¼»½¾½¿¼½¼¼¿¾»º¼¾½»½º¼½¿ÀÁÁÃÂÅÆÃÃÄÇÑÜÜÚßàÞÝÜØÜÜÚÙÑÌ¿²œµÎÕÓÓÕÔÕÔ™ÓÖ×ÖÖ×ÚÖÔÕÒÏÑÎÐÏÌÎÍÉÍÏÍËËɈÊÉËÈÆÇÊỄÍÐÑÐ¥ÏÏÉÆ»®¡œž›™œœš™š–”—–‘—˜—–“—™˜™˜š™œ›–œœ›™oŒ ¥£¥«¬¬¯®­¬§œ¬ÄÓŽÚÝÞÚÚÖÔÎÒÜÝàáàâ‘áâããâæáâáãçãåæåäãáŽÝááßâäåããáâääåç…ââáâãâˆáãâàâãåæåääçääççæåäâäáâáâ‰áààáåâàááâ¦äàßßÞàááàâßÞáàáåáÝââÞßßÞÞßÞÛÜÞÚÚÛÛÖØÚÚÙØ�þ¢¡¢žœžœœ¢š˜›œ—˜œšš›˜•˜œ¤ œ›ŸŸ¢œ¢±¼ÁÆÅÄþ¾½¼¼¶·¬£”†p‡£©§§¨©§¥¦§§ª«¬ª«­§¤¨¥ ¢¡ ¡œŸ œžŸœšœ›œ›Ÿ š˜–œ¡ Ÿ ¡£ ¢¡Ÿ¢œ”Œ~qknnkopoþmmnliljflnlkhmnlqpnmprprrusrqoXFcuwty€€~€|}sgy¢£§°µ´±«§ œ¥³´·º»»¹¹ºº¼¼º·¹º»º»¸¹¿½»¾½¹¸±º¾»ºº¼¿½½¸¹»¼¿½»¾½½¼»»¹¸·»¹º·¹¼¾¿½¼¼¿„À½À¿½Š¼º»¸´´¸º»º»¦·º¶·µ·¹¸¶¸·¶µ·ºº·¹¸·¼·¹º¸³¸¹¸¹·´´³²«¬²³…µ®°·´°³�­äãàãááäááãáÝÞáâßàâããáàáäæèèçææçèèâçïöøúùùøùøùø—÷ø÷õà¹ßöõõööõõôöõõ÷öö÷÷öƒõôôó–òôñððíññîîïîðñòñòïîðòòô‚óôõˆôñçàÚÒÑÌʳÉÄÀÁÿÀ¿ÀÀÃÆÂÀÅÃÇÇÅÇÆÇÉÊÈÉËÌÍÊÄÉÉÍÌÏÑÑÒÙØÒâäêìíëìîó÷™øùøø÷ôôøúúûüûüüûüûüüýüüûûüý üˆýüûüúüüûü…ýýüüûüýü‚ýýüýüŠûüüûüýýüûýü…úúùûùûùù÷úûûúûúùøùùúûùøŠ÷ùùø÷ööõööõ�þ¾½¼¼½¾¿½½¼¾ºº¼¼º¸¼¾¿ºº»ÀÁÃÄÂÁÁÂÃüÄÌÖßÞÝÝßßÛÜÝÚÞÜÙÛÖÓ¸“»×ÒÒÓÕÔÓÒÒÓÔÕÕÖÔÔÖ×ÔÒÓÑÐÏÎÎÐËÊÊÆÊÍÈÉÈÇÊÌÎÌÎÊÊÌÏÐÑÒÐÐÓÕÔÔÒʽµ­¦¥ žŸŸ¡¢¢œÁ˜˜™•—™™–œž›™œžžŸœŸ¢ žž¡¤¥¢› ¢¥£¦§¨ª¯®©º½ÂÇÇÄÃÆÐÔÔÖÙÚÖÕÖÑÓÝÞÞßáßá‡âááâááàä²âääâàââããáâááããäãâããâãåãåäâãâãàäãäââààäåäæåæåäãéæãçˆæâäâãâäâá°äâäâàßáâàâàßßÞàáààßßÜÕßâàãáÞâááÞàáÞÞÛÜÝÝÙÙÛÙרÚÚØÙ�Ï£Ÿ£œ£ ˜žœ”–™š˜—›Ÿš–•™šžŸ¡ž˜›žž˜ž©µÀÂÀÅÀÀÂÁ¿¿Â¿¸¸²©h‘ª¨§¨ª©¨¤¢¡¦§¨ª¦§©§¥Ÿ¡£ ž±£™˜˜žž—–—™›ž¡Ÿ šœœ  ¨¦¤¥©¨¥¨¦‘‡~wtopvtvurljijijmìsvqlqqsryxqrvuptx~|xqtuxx{z|~ƒ€|Š–›˜—””œ¤¥©«®¨¥¦›£³´²µ¹¶¹¹»½¹ºº¸º»¹ºº¼¹º¾¼¸¼¾½¼¹»¼¼»··ºº½¹·¼»»¼»¾¼½¼º¼¸»»½»¼¾À¿Âþ¾½¾ÀÀ½»¼º·¹»»¹º¾¼¹º¼º·¶»¸·µµ¶´¹¸¹·¹º´­¶¹¼¼¹¸º¶¹··´³²¯°°´°¯³¶µ³¶·³µ�…ãááäåâŽåãÜßÞßßáàáââãåç¤èçææçééëò÷ùùûùùøùøùøùùøøù÷ðØëøõõóôõõôõö˜õôõôõôôóïòòððíñòïñððóôòòó”õóõõööõõöôðçÝÔÒÔÑÏÈÊͰÌÉÄÂÁ¾ÀÄÅÆÇÊÉÉËÌÊÆÇÉËÌÊËÈÉÉÌÐÐÎËÓ×ÛÒàãèìñòòöôöø÷ö‚÷øõ‰öøø÷ðõùûúû‚üûü‚ûûü‚ýýü‡ýüüýýüûüýüýƒüüýüŒýûüýûûüûüûýýüûü’ûüûüûúûúüüûûúûûùúúû‡úûùûúúùøŠ÷úö÷ø÷öõöõö�Œ½»»¾À¾¾¼½¾¾·º¸ˆ¹¼»½¿ÃÁÀ­ÁÂÂÄÇÑÜÛßÝßßÝÝ×ÜÜÝÜ×ÕÛ×˳É×ÔÑÏÏÒÑÐÎÎÒÒÑÔÕÓÒÕÔÐ’ÑÐÏÍÇÌÌÊÉÆÊÌÉËÉËÎÑÏ£ÐÒÒÔÕÖÔÔÕÔÒ̾³§¥¦¦¥Ÿ £¢¢£ ›˜—–™›Ÿ¢…¤£Ÿ¢¡¢£ ›¤¨¨§£ª°´¬¹½ÅÉÍÎÎÑÒÓÙÖÕÖÖÙØÔÓ»ÔÓÒÉ×ÝßÞÞßÝßßááßßàâßàããäàáäáàâàáâãåãâãâáãäâäåáâåãâàââàãàäåäâ¸àåäååäåäáâæåâãåäâãäáäáãåààáãåâãáâààâßáàÞÜÛáâßÞßßÜÛàáßâàÞá‚ßßÝŒÛÛÝÜÔ×ÝØÖØÚÙÛ� Ÿž¢¡¢¡™ œ””—þš—––œŸžœœž˜›ŸŸ¥´¾ÀÁÂÁļÀÁÃÀ¾Àº¹·²¡‹£¬§§¥¥¨§§¢žŸ¢¢¥¦¤¥§¦¡Ÿ ¢¡Ÿ—Ÿž›—–œž›Ÿ™œ¢¢¡Ÿ¡Ÿ¤¤¥¦«ª©¬¯©¢ž“‡}zyxwrt|xywrolkhknstwzywy~{yz{ywwyxyv{ƒ~z…‰ƒ““˜ ¤¦¨£¥©°­¬ª«§¨¥¡¤£¢ —«µ´´¹¸´µ¹»¼ºº¹·¼»¹¹¸º»¼¾º¸º¸»º¼¾°¼¼º·¸½¼¹º¸»º¹»¹»½¼À¾»»½»¸»ÀÀ½½¾½¾¼¿¿À»¾½¼¼º¹½½¾¼¸¯¾½¹¼¼»¹¹½¶¸¸´²·½»º´¶º¶²µ¸¾½·º½¸º¶¶µ³³±°±µ§«¶¶´³µ¹�—ãâßâããæãâãâáßÝãáàááäççæçƒææçèƒðùùúôùŽöö÷ñêêööõõôóôõô†öõõ÷ö÷õŠôõôõòóñìðñîòóòòóôõòóõôöõö÷÷öõóìãÛÖÕÔÑÐÎÌÈÅŒÉÈÇÅžÁÆÅËÎÏÒšÑÖÚàä×ÍÊÎÒÔØÛâäèêíïðòõ÷÷øùø–ùøùûùùøúûúúùúøøöóöùúûû üƒûüûüý‰üýüüýýüüýüýüûüƒúüüý„üýýþýüýƒüüûü†ýüýüýý üýüûŒüüûüüûüýûûúüû…ùùûùùø‹ùùúøùøø÷ööõö÷�þ½»¹¼½½Á¼¼»»º¹¹½º··º¼¿ÀÁÁ¾½¾ÀÁÂÂÀÊÙÙÝÛÚÜÜÝÖÙרÙÛÕÔÒÍÁÃÓÕÐÑÐÍÐÒÏÎÐÎÐÎÒÔÓÔÑÑÓÐÐÎÑÌÍÊÂÈÊÇÅÅÊËËÍÌËÍÐÑÏÑÒÑÓÕÖÙØÕÔÏŰ©¨§¥¤£¡Ÿ›šœžž›¦›•˜¢£¦ªª©©®²¼Á°¤¢¥«¬°´»¾ÂÅÉËÍÐÔÕÖÙÛÛ؆ÙÚÜÛÚÛà¢ÝÙÚ×ÖÑÉÒÜÛÞßÝàßáÞàáßàßáßààãåàãáãáäâ˜ãàááâàâãààäàâãááâàãßâáàãâ¢áãåãäâããäãåäàââáâààáäãáääáßááãâáääáˆßÞÝÛÞàÝÞá‚ßàß—àÞÞÝÞßÞÝÙÛÜÜÝÝÛÙÚÜÙÙØÙÛÛÚ�ƒ Ÿœþ¡ œ˜•—˜š•––ššœššœž›œ™œ ¯ÂÄÂÀ½ÁÂÁµ¾½¾½»²­®¦›šªª¦¤£¥¥§¡¤£Ÿ¢ ž¡ ¢¤¥¥¡¡ ¢ŸŸœ•›œš—–œœŸ¢ŸŸ£¤¤Ÿ¡£§ª¨¬®­«§¢•‰ƒ~~|xvvwtprprsrqpikruyŸz{€‡˜œŒ}z|ƒ‡’™šž¢¦¦¥°´®­²³ë®±¶·µµ´·¶¶¸¶¯©¥ ™¦´³²¶º»·¸·º»º¼º¸»½¹»º»º¹¾¹º¾»º¸¸¾Á½º¼¼º¸»¼¹··º¼¼··¸¶¹¾¿»¼½¹¹»ÀÁ¼»»¼½¼¼½¿»»½»½»»½¾¿¹µ¶·¸º·»½–¾»·´¶³·º¼¸»··º¹¸¸¹½·µ¶·‘´µ´²³´±²³°³··¶´µ´·¸� ãááâåââßááßááÞÝáâããåæçèççæçæççéóùú„ùùúùø™ùø÷õÙÆéöõóóôóóõôôõööõõôõõôˆóôóóôóóñòïÄññòôôóóôõõôõõö÷ö÷öñéàÙÔÔÓÑÐÈÍÉÅÀ¾ÃÅÆÃÅÁ¿¼ÅÇÍÐÒÓÖ×Ûæîôõõíäàèïðôôö÷÷øø÷‹ùú÷ùùøùúúûüû•üûûúüûûúõöøøúùúûúüûüûü„ýüüýü‚ýüýüýüýüˆûûýüüûüûü„ýüûüýü…ýûüüûüýûüýüüûüüýýüüûüû„úûüüû˜úúûûúûøùùúùøøùùø÷øùøùøùø÷‚öô÷ö�½º»»¾¼½º»¹¹º»º¶º¼»¼½ÀÁÃþ½À¿ÁÀÄÏÖÞÜÝÛÚÛÙÚÛÙØØÙÙ×ϰžÂÓÒÐÎÏÍÎÐÐÎÏÐÑÐÏ‹ÐÐÑÑÏÐÍÍÏÌÍËÆÈÇÆÉÊÌÎÐÍÎÏÒÓÒÔÒÕÙÖÖÔË·­©ª§¦¤ž¡Ÿœ—”™œœšœ™˜–ž¤§©ª®¯µÀÊÓÕÔʾºÃÊÍÐÓר×ÚÙÚ¤ÙÖÛÜÛÝÞÞßßÞßáãáâàÝßÝÞÙÎÕÙ×ÛÚÜÝÝàßàáßá‡àáâåäåãåŠâääßâàáàáâá”âäáââààåãäáåãáâããàßâã‚âäã‰âàäáâãäãäâããÞßàäãáãâßààââßà„ÞÞâáÞ†ßáÝÜÜÞÝŽÜÛÜÞÝÝÚÜÙÛÛÚÙÚÙ�«¡ŸŸ›š˜™›—•𙓕™—™›œœ››žš™˜¡³ÃÆÂ¾¿½»¼¾¼º¹’¸±¨‚o˜¦¤£¢ ¤£ ¡Ÿ¡þœŸž£¤¢¡¡Ÿ  ¢žœ›˜–››Ÿ¢¥¢¥£§¦¤©©®®¯°¬Ÿ“ˆ{}{ywnsqpmmrroppnllsu{~}„†Ž›¤¬²²§›–›¥©°¬®¯¯±°²°°³¶³®³´´µ¶¸½»¹ºº»¹»¼¹¸µ¶¯¡¨°¬®­³µ²¶´¹Ó½º½¾½¼¾½½»»¿¼º½½¼º·¼½º¸½¼»º¼¼»¹º»¼¾ºº·¹¸»¼º½¹·º¼¾¿»·º»½¸º¼¹¼¼¾»¼»¼¼½½ºº¸¶¹»¸º¼º¼¼º¸¶Ÿ»º»¸»¸¸º·¸··¹°±²¶³µ´·µ²±´´±´³¶¶·‚¶³·´�ˆàáâãàãáÞß—ÞÞßßåçæåçåäåæäååçæìõøûùø–ùø÷øö÷ùùðÌÑòööõôòôòôðòó‘ôóóôóôóóôóòóñòðóóòŽïñòôõöõõôôöö÷ø÷™õðâÜÕÔ×Ô×ÓÒÏÎÍÊÄÁÁÃÅÅÂÉÈÈʈÎÏÒØßèñö÷ƒö÷ø÷„ø÷øø÷ù‡úúûùúûûüûŠúúùùøøöøúùúû„üüûûü…ýüüýýüý‚üûüƒýüû üýü‡ýüýýüüýü‚ýýü‚ýûü†ûüüûüüû…úûüýüû¢üûüûúúûûúúûøúøùúúùøùøøùøøùøøù÷ö÷öôõö�»…¼»¼½¹º…¸¸¹·¼¿ÆÂÀ¾¿Á¾¾ÀÁÀÉØÞßàÝÝÚ×ÚÚØÛÚÕÙÚ×ˤªËÓÒÑÐÍÏÌÐÊÌÍÍÊËÎÎÏÍÎÏÎÒÏÏÐÌÎËÎÎÌÍËÎÉËÌÐÔ¼ÓÑÒÓÕÖÙ×ÙÛÓʹ±«©««¯¨©¤¢£¡œ—˜›žœ™  Ÿ¢£¡¥¦«±¹ÄÏÖÙÙÚÙ×ÖÙÛÚÛÚÙÚÛÚ„ÛÚØÙÚŸÜÝÞàáâááããäââåäáßßâàÛÝÝ×ÚÖÙÜØÛÝß—ááàßáåçæååæçèäæåãääâàãå䑿æäããäâåæãåæççãååáŒãäããåäåäæçææãŠäåãäââáååàâ‚áàá©àáâßàâàÝßáâáÞàâàááÜÝÜÞàßÞÛÜÞÞÜßáßÜÝÛÜÜÛÚÙÙÛ�—ŸŸžž™–—™š––ššŸ ›œœ™™šŒ™™˜¥»ÅÇžþ¸þ·´·º¸¤x{ž©¥£¢Ÿ œ š›œœ˜›žžœžŸ¢¡¢¤œžž œšœžšœž¡¥§ª¨¤¤««®³°±°®¤„~}€{}xtuspqrtvoqtwvy|vx}‚Š“›¨±²³¶µ²µ·µ²µ³¯±±³±°°­°¯µ´±´·º¹»»½¼®½À½¾¿»º·»·²°´«­¦«¯ª¯²³²¶¸º»¹¸¹ÀÁÀ½¼¿¾»»¾À¿»½»¹½´¾½½¿¾¾¿À¾¾½»»½¿½¼¼¾¼½À¼½À¿¼¼½¾¼À¼»½½¼º½»½½¾»½¼½º¹¹¸»¹¼ºº¸¶¸º·¼¶¼»º¼‹µ·¹³µ´µ³¸ºµ´¶‰¸¶·¹¸·¶¸²µ´�‚ááà­áÞÝßÞÝÝÞáãåääåææããæääâéñùøøùøùø÷ùøø÷÷ø÷ø÷áÆãóôˆóõñóòóñðò–óîððñòóòòðóòñóóòóôóôôõö³÷öö÷ö÷÷öö÷óìÝ×ÕÓÒÖÖÕÓÍÏÑÉÈÂÄÊÊÆÊÐÏÍÌÍËÎÒÞîóöö÷÷ø÷øø÷„øøöö÷†øø÷ø÷÷øù‡üüúûûüûü‚ûüû”ùûûüûûúù÷øø÷øùúûûüüûü‹ýüüýüýýüüýüý…üýüüûüý…ûûüýüýü²ýüüýüýüýþüüýüüûûüüûüûüüýüûüûúüûûúûúûúûüúüûúûûüûüúúùƒúùøù‚úøù…÷õõöõö÷�„¼¼»¼º‘¶¹¹··¸»¼¼¾¾¿À¿½½¿½üÄÑÛÜÞÞÝØÜÜÛÛÙ×ÙØÔÚÓ¹¡¾ÎÏÐÏÐÏÏÐÊÏÎÎÊÉÊÉËÊÍÆÈÉËÍÌÌÍÊÎÍÊÍÐÏÏÑÐÒÒÓÕÖÕÕÔÕÖÕÖ×ÖÚÚÑÆ²­¬©©®­©©¤¤§¡ š›¢¥Ÿ¢§¦¥£¥£¤«¹ÉÒÔÖÚÜÚØÚÚÙØÜÝÛ××ÚÙòÛÛÚÙרÛÞÞÝàââàââããââäãßÞáãäßÞßßàßàßÛØÙÙרÚÝßàßâãæåããåäççæãâãæááåãåçåææäáâçäåçãâãäçæãæääâáããäããåääâæèãáâãââãåâàãâáåã–ßàßáßàßßÞßààßàââßààááãÞ•ÝÞßÞÝÛÝÞÜÝáßÞÝÝÞÜÛÙÛÙÛÝ�‡Ÿœ›š™—‡•˜ Ÿ›œ¯™™œš—— ®ÁÅÃÁÿ¾½¼·´´µ·¸¹´’s¢ ¥¤¤¡¡Ÿš›››š˜—›Ÿ˜›œž ¢›œžšœž ¤¤¥¦¦§ª¬®§ª°°±°º±¨ˆ€~€ƒƒ{y~vwtt{}sz|{|zzzƒ’¨¯³±´¶·´µ¶³´µ¶¶¯°±°²±²³°²¯´œ¶··½¾½¿¿½¹¼¿½½¿»»¼º¹¹¶¹¸º¸¸´­”¬©«°´¹¹·º½¿¿¼½½¼¼¾½Á¾¹º¼À¿ÁÁ¿½¿Á¾º¿À½¼»½½¿¿»½ÀÂÀÀ½¼ÁÅ¿¾½¼¼¿À¿½½¾½»»¼¾½»½º»¼»»º¸¹º·‰¶º·º¾¸¼ºº¼‹º¸¹¹·¹¶µ¸º¶µŒ·º´µ¸»º¹¶µ¹´¸º�œãßßáÞààâàßàâäæãääããææâãåàâìõø„ùùøù÷öøŠ÷ðÓÑæöôóñõóòôóóôõôòïññòðïŠòòðñðôóóõöõ†ööõôõö÷ø÷öôö÷öïäÚÚÛØÜØÔÔБÊÏÍÉÐÓÏÐÓÎÏÌÌÖàêó÷‰ø÷÷ø÷ø÷øø÷ƒø÷÷øùøùùøúûùûüûüüûûúü‘ûûýüûûüüýýüüûûúùùøƒùùøü˜ûüýüýüýýüýüüýýüüýýüýýüýýü…ûýýüýüý†üýýüüýüý‚üþü„ýüûûüûûüüûüüûûüûûüûúû„üûüüû†ùøúûúúùøùùøøùùø÷ööõõöõ�Á½º¹¼¶¸ºº¹¸¹»½¿¼»»½½À¾¼¼¾¸¼ÇÓÛÚØÚÛÙØØÙØÙרØÙÓɪ¨¿ÓÏÌÉÐÏËÏÌÏÏÎÏÎÌÌÇÊ›ÇÈÅÇÊÊÉÊÉÎÎÍÒÓÓÒÓÕÔÒÓÓÕÖÖÕØÖÙÕÕØÙÔ˼²²³°´°¬¬¦¦§¡¦¤¡§ª¦¨«¦§¤¦¯¸ÄÐÕÔÔÖØÛÚÖÙרØÙÙØ×רÙÖרÚÛÝÛÙÛÛÞßßààáàßàááâááàÞßáääàáãåáâŠÞÝÝÛÛÙÛÛÜÙà½âààäæåäãáàâäãääâäæäåçäááäâææâáåãæâãåãâãäãäâãáâááàâääàäããâãäâÝà”âáàáÞàáßáàáàááààáÞÞà߃ÞàáÞ•ÛÞßàÞÞÜÝÛÜÞÝÞÝÛßÞÜÕÚÛÜÚ�È ›œ›—›š›˜–˜šŸžœ™˜—™›˜šœ——§ºÃļº¿½·¶¶³±´¶¹² }|‘¦£¥ ¡œ››žŸ›–š›™–”–›í› œ£¦£¥©ª©¨©ª¯¯±®¯¯³±­«­¯ª¤“ˆˆ‹‰‰‚„€~|w}~y‚{{||‡¡®¶´µ²´·¶°²´²±¯±³¯±²°¯°²³±²±³´µ¶µ´»½¾À½¸¸º½¾½½·º¾½»¾»¾‡º·¹·±²±¯½²±®·¹¼¹·¹¹¼½¼º½¼½¼¼ÂÁ¾ÂÁ¿¾ÁÁ¼¹¼½¾º¹¿¿¾½¸¼Ãþ½¿½ÂĽ¾À¼»½½¼¾»¿¿¾³¼¼»½¼º¼¼»¸¸º½¹»¸·¸¹»¸½»¶¹·¸¹¹¼¼»¸·¶¶µ´·º·²´µ·º³¶ºº·¸‚¹µ¶´�‡ááßßáãàâ—æåççåçäææåããæååñùùúøùø÷ø‚÷ø÷ŒøøòËÚóõöõððõó…õóóõõôóò„óïðõô„õöõö÷ö÷ö±÷øø÷ø÷÷öô÷ùúù÷ôóôõõôðëçàÝÕÕÒÕÔ×ÔØÖÔÔÖÜæòöö÷øø÷øø÷ø÷ø„ùùøúûùûŒùûüúüüûüüýüüý„üýüýü‚ýý üýü“úûúúûùûýüýüþýüýýþþüýþýþýþýüý‰üýýþýýüýüý‡üýüýüûúý„üýýüýûüû‘ýüûûýûüüúùúùùúúøøúùú†ø÷öø÷ö÷�Žº»¸¶¸¹¹ºº»¼»¿½¼“¾¾¼»¼½¼¿Ê×ÜÜÛÙÙÖØ××Ö©ÕØØÊ£°ÍÐÑÐÇÈÎËÌÎËÏÍÍÏÏÌÍÍËÊÈÈËÃÆÌÌÍÏÐÎÐÒÔÕ¾ÔÖÔÔÕÔÖØÖÕ×ÖÖÒÎÖ×ÙØÓÏÐÑÔÓÑÌÆÀ·³¬«§©©¬ª®¬¬«®µÂÏÓÔÖÖÕÕØØÙÚÙÚØØÖרŠÚÙÛ×ÚÝÞßÜÞÜŒÞßÝâßÞßààßââ߃áÞàáßáâáààáààãàáãâ“ÞÝßÜÜÞÛÝáàâáàáÝáââäãÄæåáååãâáãæçæããääâáâàáäæäãâãßÞååÞÞáãàâææãâáåßÞÞÝÚàßãàáààâàßÛÞààÞààÞáàÞŒßÞÝÙÝÛÝÝÜ×ÛÝÛÝÜ„ÛÖØÚÚÛ�¥›š—œž—››™ž›ŸŸœ›•˜š—”–šœœ«¾ÄÆ¿»³²¼º´²±Ð´µ²¢vƒŸ £¡”š£ Ÿ ›šžžšœ™›™••Ÿ £¢¡Ÿ¥¨§¨«ª«®¬±²´³±±¯±¨£§­«¬®«©¨«­¬§¢’Œ€|~„‹€€‚ƒ©°±¶¸´‡µ³´²²´³®É±¯µ¶·±´·µµ´¶¶¸¹º»¶¼»¾¾¹»¼¼º¾¿ºº¸½¼»º·¾»½¼»º¼½¹¹¼»¼¼»·µ¶³³´®²··¼º½»¶»¼¾Ã¿½¿Û½½¾¼»½¿À¿ÀÁ¼¾»¸¸¿Á¾¿À¾À¿»»¾¾½»ºµ¼»¾¿À¿À½¾¼»¹¶³½½¼¼¿Áº»º¹·»¹¹»¸¸¶µ¸¶¶º½¸¹¸µ°´°´·²­°´¶·´¶·¶´¶¹·µ·�’ÞàÞßÞÞàââáååæçåäååã†âäìòöøù…öòõøù÷‡öö÷öðÝæôšöõóòñðóö÷öõõöôõõóòôòóóôòöóö…õöõ÷ö÷„ö÷øù÷¤öÙÛàãìëððôðññòñóôïêãÙÍÌÃÁÌÓÐÙâìô÷ùùøúûù„÷øø÷ø„úúûúûŠúûúüüûüüûúü„ýýüüýüƒýüüýüý‚üüý„üýüüû…ýýþýýþý…þýýþþýü‚ýüýüýŠüýþýþýüýýüý‘üýüüýüüûýýüüýýûûýü‡ûûúûüûüû‡úúûúùøøù‹úøùúùù÷öøö÷ö÷�¥·¸·¶µ¶¸º»º½»¼»º»¼½ºº»º»ÁËÏÖÙØÙÖÏÑÔÖÖÕÔÕÔʲ¼ÍÏÌÍÍËÈÈÇÊÐσÎÑÍÌÜÊÊÉËÊÌÉÏÌÑÐÑÐÑÑÓÓÕÔÕÖÔÔÓÖרÖ×ÖÕÒ®«³»À¿ÅÃÌÈÊÉÊÉÉÍÅ¿º¯¡Ÿ™–¢¨¥®¶ÄÏÓÓÕÖÙØØÖÙ×ÖÙØÖØØÕ×רÖÜÛÝÛÛÞßÞÜ ÝÝÞÞÝÞàÞÞãßÞÞààáÞààááàÞÝÞàãáÞáàÞßžâáäåàááàßÝÝÞÞÚàßßÞÝáâáàââãáâáãâ‡äåããäåßâߥààãâàâáâãçåÝßáàÞáâääßáâßÝÜßÝßÞáààßÝÞßÝ¥àßÛßàáààÜÝÜÛßÝÜÜÛÞßÝÜÙ×ÚÚÙÚØÚÚÙÛÚÙ×ÚÚØ�–˜†–™–››–›™ž›—•˜™•“”•¢©´½ÁÀ»¯¢­·¶²¯¯±þ¬ …’¢Ÿ¡ž™šœš› ¤¤œ¡œœ›š˜››š™¡Ÿ¢¡¦¥¤ ¥¤©¨®««®¬²³µµ³¯­¨‚„‘’š¡Ÿ £¤¢œ˜…xtkk|{…›©¬¯³³µ¶²¸µ´³´°¬±³®°¯±°·ºº¶¹¸µ¶·³¸»ºº»»º¼‚¾¿¼„º¹¼¿¹›¼½»·¶º¹½¼¼º»¼¹¸º½½À¿¿¼½º¸´²´‹··»·µ¼¾¼½½¼½‡º»»º¼À¿¾Ôµ½»··½ÀÁÁ¾¾¼½¹»¾¿¾»·¸ºº½¾ÁÀ¾½»»º¶¶´»½»¼¿¾¸·¹·¸»º¶·¶¸¶µ·µµ¹¹¶·¹·²´³´³­¯°±²´¯°³³´µ¶¸»¸´¸�ŸÞÞÜÚÙàááäãçåáäãåæçäáâèïîì÷÷öõóõø÷“ö÷ø÷çÜñóòññðòñòóòò÷õ†ôõôóòñô’öôôõ÷öö÷÷öö÷÷öø÷øø÷¹øø÷÷õîÞ§¨¢‹ž¢ £›©©¢ª¯±¯§¢¦¦¨ªŸ“œ§°ºÆÓÓÎÐÓÑÚßÚØàâáè÷÷úù÷÷ùúûƒüûùü†úûýüüýü‚ýýüƒûüýü„ýýüûüˆûüüýýüýüýŒþýüýüûùûûúúüýˆüüýýþýüüýƒüýûü‚ûüýƒüýýüýüûüýüýüûüüûýûü„ýýüúü‚ûüúüûüüúùûûüüûøúûúúûûúøùúùùøöõø÷÷ö÷�Œ¶´³²²¸ºº¼¿Â¾º’»¿¿¼¸ºÂÊÇÆÕÖÓÑÏÑÔÔÕ“ÔÔÖÓ½±ÈÉÈÈÆÄÊÊÈÉÈÊÑΛÍÍËÉÈÉÍÍÏÐÍÐÐÓÒÓÔÓÒÒÔÕÔÖÕ××ÕïÖררÒdz}~xbtzyztƒƒ{„†‡‡‚€‚„„†}s{†Ž”ž©¨££¨¦¯²®­¸µ´ÁÖÖÛÚ×ÕÙÝÛÝÝÜÞÝßààßÝÞààßÛÞáâßáâáàßáâäáßßàáââàááâáÞÞàßààßâààßãâááãäãßßÛÜÜÛÜßáßáœââááàâãâæãäáâßàäàßáâáßàäâáãáâ™áàâáÜãâááßßÞßÜÞÞÝßÞãâàÝÜÜß—ààÞßßÝàáÞÞÜÚÞÞÝÝÞßÞÝÞßÝÜŒÛÚÜÜÛÙØÙÚØÚÜÛ×�þ—–“‘’™™—š™žš•˜š›—š™”•ž¥¢£°µ²±¬¦®¸¶³²¯­¯±ª…™š“•˜—™››˜ žœœ–“•Ÿ¡ Ÿ£¦¥¦¦¤¥¦§¨¦¬¬°¯­©¬¯²µ³¯© †SVQ8FOLTNV]RZ_^]]YZc`aSOVcinw†€€}}„w„¯~ŽŽ‡’®­µµ°¬°´´¸¼¹¸¹¸¸½¹²ºº¹º··½»¼À½¾¾¼º»¾¼¸·¹¾¾»Œ¸¹ºº¶¸¸µ¸¹¼¼¾Œ½¾¿Á¾ÀÀ¼¸³®¯°Ã¸º¶¸¸·¹¼À¸·¹»º»¼¼¸º³¹¿¹¹¾ÀÁÁ½¿¾¼¼º»À¼»¹ºº¶ºº¾¾¹·¹º·º´´¸¸»¼»·¸¶¶µ·º¸¶„³¶¶¸¹š¶´¸¹¹¸³°³·´´³³²µ²²±³³°³ºº¶¶¹� àÞÜßàáâãåæäááäåèæäáãî÷÷öõø÷öõîëòø÷÷øôáäòôïðññïñíòôòóöõõöõööõöõö‚÷÷ö÷„ø÷øùø°÷öòæ´©«‡y¥Ÿœš—™˜’•–š—”–’œš•—˜ž¥§«©««©©¡£®°´±··Ôø‰ùøøùúúûüüûüûüûüýüý ü‹ýüýûüýýüýüüýþ†ýþþýýüûŽúüüýüýüüýüüýýüýüýüý„úýþþýƒûýýüŠýýúûüüûûüýüýüûüûü’ûúûúûûúùûüûüúúûüúúù…÷÷ø÷÷ö�£¸´³µ¹º»½¾À¾»º¼½¾¾½¹»ÇÔÚÓÐÔÔÓÓÉÃÍÔÖÔÕÓË·¹ÉËÆÇÇÆÅÈÄÈËÉÌÏÎÏÒÐÐÑÏÍÎÓÒÔ„ÓÕÒÔÕÈÖÖØØÙÚרÙÚÖØ×ÕÏ¼Š‚„bT|xwurvtostw|yvvu|yvyw…„…ƒ††ƒ…~}†ˆŒŒ¯ØÛÛÜØ×ÛßÞÝÞÞàáààßÞáäáÞÞàââãâà®âäæãàâããààáââãáàáàâßßàâàßÝáâäæåááäæãääáßÞÝÛÞßàá¬âáßâåâååãäâßâçãàáãâààåääåäãääâßãâàäâàãâÜÝáàÝÞ‹áäáÞÝÞßàáßßà—ÜàßàÞÞÝàßßÝÝÞÜÝáàßßÞßÞßÝÛÜÛ×�üš—“—–˜š™›œ•’™ž——”™ª¹¸µ·¸¸³°¦›§¶¶µ´±­®¨‹Š››—™™”’–”š›™šžŸœŸ¢Ÿ¢œ›¢¢¥¦§£¦¨¦¨ª©©ª©ª«±°²²°­®±°²²¬¢”e\^</SQQSNNPKNRVZYVRZ^YSZV_d_Üdd`d[X]bihj`³´´¶±¯±¶·¸»º¸»¹º»¹µºº¹½º¸¼½¼À½¼½ºº¾¾½»»¼À¾½½»º¸¼¼ºº½¸¹¸¼»¹¼¾¿ÀÁÃÀÞ½¼¸²°°±·µ·¸Â¼¿¸¶¹¼¹½¿½¼¼µ¸¿¿½¼¾¿ÀºÀÀ¿¿¾¾À¾¹·¼½¸º·¼»»³µ¹»¸µ¶¶´¶¸¹¶¶¸µµº¹´µ¸·´¸·º›»º¶¹·¸·³´¸º·ºµµ¸½¶¸´·¸·¸¼½¹·µ�‚ßÞá‘ßáâäâåááâãäââê÷ûùøŸ÷øùøùúóð÷öõõöàÐâõõóðïïðòîðòóóõ÷ö÷„ö÷øø÷ƒøøùø÷øƒùøø÷¹öí±ª¤™—¦¥ ¢žŸ§Ÿ˜œžœœš™“”––œ˜šœšžŸ››—–˜¥­Ÿ£·÷øø÷ùúûúûüúû‚úúü‡ûùüûüüûü„ýýüûü†ýüþþýýü„þüûûüýüƒýþýþ…ýýþýýü‚ýýü„ûûüûüý„üýüûý…üüýýþýüý„üüûýüˆýùúûüüûüûýüûü‚ûüûüûüŽûûúùùûúûüûúúøø÷ö�À·µ·¹»¹º¼½½¾º»»¹º¸»ÃÒ×Õ××ÖÔÔÖÙ××ÏÌÓÐÓÓÏ´£¶ÎÎËÇÆÄÈÉÃÆÉËËÏÒÒÑÒÒÕÕÓÔÓÖçÙÖÖ×Ù×Õ×רÚÚØ×ØÚÖ×רÕÒň‚~uuƒ{}|„}|x|}|~|zxxzy~xyzvz{|yyuvvƒŒ‘ÖÙÜÛÛÜÞÜÞàÜÞÝÝÞÞßàßÝÙáàáßÞàâàáââàÞâãà’âååàáãääãáàßààÝÜàßàãæ–åâáäãäåääâàßÞÝÞÞÝÝÜßààá‡ââåäàâãá“äááãââãåäââããââàâãâà‘ÛÞáãáßÞÛßáâàÞÝáßáß•ÝÞÝàßßÜßÞÜàÞßàßàáâÞàÞß‚áßÞ†ßßÜÜÚÜÛÙ�þ™™šš–”˜™œ—›•’—šš‘—¦ºÃÿ¿¹¸·ºº¼¼­¦²³°¬§ˆu‡žš˜–“˜—“˜šœšœ¢Ÿ ¢¢¤§¥§  ¥¨¬­ªª««¬¬­®°¯­­³±²±±°®¯°¯¯­›a^[QS_[UX[_bYYV\``c`[Z\[\dd\VTR˜WZ]XXUVS`l_]g¬··±¹º·³¹ºµº¿¸·¼»¸µ°¹¸¼º·¹»»¿¾¿»¸¼½¸¼¾¿ÀÃÀ¿¼¾½ºÂ¾··¹»»º¼¼º¼ÂÁÂÀÂÁÄÅÀÀÁÁ¿º¹»¸·‡µ²µ¶¶¸º»Ù½¿À¿»½»¹À½º¼½¾½ÀÃÀÀ¿¿»¾¾½¼¿º½¹¸·»±¶·»¹¶¶³²·¸µµ´¸·¸¹¶²³º¶·¸··¸º»»ºº¸¸¹»¾½¾·¶µµ¹¼»¼»º»»º¸º¹·¶�”àßáãáÜâáäããáßßàÞßíöøùƒøööøœ÷÷ö÷øø÷÷êÇßóòòóíìïñòðòôñôõ÷ö÷ƒøöõ÷‡øøùøøùùø½÷øøóö÷öõô©«¡“­¸©¥œ¦³®ž—•––“•–”•¢œ¤º™œž œšž›¢ £®£¢›ßøøùøøùúû„ùûüúû‹úûûùüüúûüüûü‰ýýûýýûüýüý†üýüýýüû‚ýûü‚úü ý„þýýüý…üüýüüúûü‡ýýþýýüûüˆýüýüýüûüý‡úûýüýüüû‚úúûƒüûüû…üúúûúû„üûüü ûúúùùûûúúûûùùø÷�þ·¹¹»¼µ¼»¾½¾»¹·¶´·ÉÖØÚÙØÖÕÔØ×ØÕÕÓÔÖÕÔÒÁž·ÌËÉËÃÃÆÉÉÇÊÍËÍÒÔÒÓÒÒÔÔÓÖÔÒÕÖÕÕ×ØÚØØÚÛÙØ×ÙÚÙØÖÕ×ÚÐÔØÕÒÍ™„„yq‹•Š…y„‘‹wvwwuxryxy…€†š}xyz¥{zx{y€~ކƒw½ÚÚÝÞÛÜÝÞßÞÛßßÜÞßàßàßÚãàÝßá“àáâßâãààáßäåáâãääåâá—ßÝßâààßââååææçåáåãæãåääáàƒÞÞßá¬äâãåáââààáàãáâááãäâãáàâåáâáàãäãàááßßáßßÞÝßààÞßÞÜÞßàÞàÝÞÝÞáÞßàƒßßáà‹âßßàßßÞÝÛØÛÛÙ�Í™˜™œ™“™™›–™•’”—“”©»ÃÀ¿¾º³³··¹³µ±¶¶µ¯©”q‰žœš›‘’–›—™œœž ¥¢¤£¡¤¨§©¥¡¨§¬®«­®®±°°³Ù°­±°²¯¯®¨«¯¨©¤oa_UOkyhdVdsmbYWXZX[VZX[fck}aXWWY[Y\X\[amgcS”µµ¸µ·¹¸¹º¸´¹¹·¸¸»»¹¶®¸·´¶·¸¸¼¿½å¹»¼¸½À¾¿Á¿¾¾Ã½¾Á¾¸º»¾¼¼»º¹¾ÄÁÀÂÁÁÄÿÁÄÀ¾½»¼¼½¾»¸º¸´¶º¼º¹¼¼¾À¾¿½¸¿¾¹¼¾¾¼¾Á¿¾»¼º½À½½¼µº¼º¸·¸¸µ³²´³²¶¶µ´©µ·¸·µ³µ¶¹»¹··º»¼º¹¶·¶»¼»»¼µµ··»¼»»½½»½»·¸¹�„ÜØÙßà‹ââááÝÜÞêó÷÷øö÷ø÷öðó÷ø÷ööãØìõòääôëîññðõöóö÷ƒöõõ÷øƒ÷÷ö÷„øùúúø¼ùù÷øø÷÷ø÷õ÷öõóШ§•Œ ®¸¶°¤¨ª¤¥Ÿ˜˜•’‰›““Ž’¡»¾—•šœš–Ÿ¢¤˜¨¢ª§Üúøƒúøùú‚ûûüûü‚ûûü‚ýýüýü…ýüýýüý…üýýüýü‡ýüýüýüü ýŒþþüýüýüýýüýüýüûûüûúýþýýüüýýüýüýˆüýüüýýþýüûüûüüûüûüûúúüüûúûüûúû‡úüûúûûúû…ùø÷÷ööø�½µ³²µ¸¸º¸¼»¹º´³´ÂÐØÛÙÙØÚÚÕÖØÖÒËÒÖ×ÔÒѸ¬ÄÏʼºÍÁÄÉÇÇÍÐÌÑÒÓÕÓÒÐÑÕÔÎÖØÕÕÔÕÖØÚÛÛÜÙרØÜÚÙØÖÖ×ÖÒÕÕÑÎ¥ƒƒpf€Ž––„ˆŠ…‡€{rzxtl}vwqv‚š™xuxzyt|vˆ„‰ƒ¶ÙÚÛÙÜ­ÝÜÞÞßàßÞÞßÞßàáßáàÞßÞÞâäâßàââááââàßããââääáåâããàá‚ßâàˆâäæããäãåä¸ãàáâäåâãäåãááßàßâÝáââáâãäââãáãââæäáâàßàåãäâáâáãßáâßßààßÞà„ßÞÝÝÞ§àÞßÞÝßàßààßÞÜàáÞàßàáßàÞÞáàÞßâÞààßàÜÛÛÜÛÛØ�™š”’–—™™š˜˜–’Ž’–§³¸¿Å¾»¹·²³þ®¥¬µ·±®¦ˆ|–Ÿ›ŽŠ’•š™•ŸŸœ¤¢£§¦£¢£§©ª¨©««¨©«©«¯°µ¸´³²´³¯±¯¯­¯¬«¬©¥£{`cKDap{vqglojnf^S]XUN_WYRXezyXWWX\W_b\Sjel`–¸¶´µ´³¹¹¶¸¸¹¸¸µ¸º¹¸µ¶¸¶·¸¹¹½¿»»¿¼º‰½½¾¿¾¿¿Á¿½§À¼½¾¾¼¼»º¼¾Á¾½¾À¾½Â¾Áý¼·¾¾ÀÁ»»¾¿¿¼º»¶®µ½¼½½¼¾ÀÀ¼½À¿½»¿¿¾»¹¶½Ã¿¾º·º»¼¸·¸´³²±´µ··µ¶·¶´¶§¸µ¸··¼»¹º¹»»¼º¸µµ´º½¸»º´·¹·¼¿¼¼»¾¾½¸¹¼¹µº�‘çãßÛÙÔÏÏÒÔØÚÝáòøøùø÷¤ö÷öôóô÷÷õõðÛÛïôòòíìñòóñïðôöôõ÷õ÷õõ÷ö÷†öö÷÷ö÷øÌ÷øøùø÷÷ö÷ø÷ö÷÷óÊ®¤™Š©°´°­´½¹¸¹»¡¬¥¢¨¸µž•—–›œ˜ ™­§ž¢·Í­­ª±¸×úøøúøöùùúùùûúúüúû‰üûúûüûýüüýˆüüýüüýüüýüýƒüýüýþýüüýüýýüýüýüüýüûüýüýƒüûúû‚ýüý…üýýþýüýü†ýýüüûýüŒûüûüûûýüûúûûü‚ûùüûùùûûúûùúúûúûúü†úùø÷÷öö÷�”¿ºµ±±®©¨«®®°³¹Ê×ÛÛÚÙפÖ×ÕÑÏÏÔÕÓÏǰ±ÆÌÉÊÄÁÈËËÈÆÈÍÐÌÐÒÐÔÑÐÒÒÕÔÁÓÕÔÒÔר××Ö×Ö××Ù×ÖÖÔÔÖÔÓÔÕΡ†€vg‡”Œ’™—–˜š‚ކƒŠ–•€x{x}}x~{Œ†~“¤œŠóŽ‘¯ÙØ×Ù×ÔÝÜÜÛÝßßÞÞÛÜßßáàÞààÝßßááâäááããâßáãááàâáââáäáãáãåäááÞáâáßáÞààââããâãááââááßããáâäáãåãááââáâÞßÝÝÞÝàãàááßáââäââáàåããåãàßáâáÞáàáâÞßáàßàÝÝÞÞÝÝÞÜÞˆßáßßÞÚÝÛß—áÝÜßßÞÝÜÞÞßÞÞÝÞÞÛÝÚÛÛÜÚÛ�þ¤Ÿ˜ˆ…†Š‹Š˜³Á¾¾ÄÁ¼·³³²±¬ª§¬³±«¥†€—žš˜”—ž˜•˜Ÿ£ ž£¢¥¤¢§¦¥¦ª©§¦¨«¨¦§¬¬­°±°«°°®¬¬ª©©­¬­ªª¥yc^XDhqwslt€}z}€fqjfkxxcZ^Z^bXY[mf±^dw‡giool†¶³³µ±®µ¶µ´µ¸¸¶·µµ¶¹¸¸µµ··º·¹»·½½¼½¾¼¾º¼šº¿¼¿À½½À¾¼ÂÀ¾¿À¿¿¾½ÀÀ¾½¾½½»ž½¿¾Á¿ºº·½½¸½½¹¼½¼»¼»ºº¶´·µ¸¸³¹ºš»¼¼»¹Á¿¿»¶¶º¾¼¼¹¸¹»¼¼·²´³¹¶±·¶µµ´··µµ²µ´¶µ¸ºº·¹¶´¶º»µµ·²µ··µµ²´·º¼º»¼¼¿½º¹¸¶³²·�›èèæçæâàÜÓÆ¾¸ä÷ùùúûúùøø÷÷øöôö’÷÷õéÖæõóñóôõòíòñóòô‚õø÷‚öö÷ø÷ø‚÷ø÷ö÷ºö÷øôóöõϦ¡œŸª¶»½¸³¾¾Ã¼¶µ­ª®´³º¶¸¦—–œ”’ž¶®®§®´´ž¶¶¸Ì÷ùøùùøù„úúùúûƒüüû üƒýýüýü ý„üüýþý‚þþý…üüýýþýƒüýüý‚üüý‘þþýþüýýüûúùûúüüýüý„üýýüýüýü‚úýüŠýûùûúûüûüüûˆüüúùûùúùúûúûˆüûúùø÷ø÷ö÷�µÀ½º½¾º¸´¬¢™–»ÓÚÛÝÜØÖØÙÖÖÙÖÑÔÕÓÒÔп©¼ÎËÉËÌÎÈÂÉÈÊÉÎÏÏÐÕÓ˜ÑÑÒÔÖÖרÔÕÕÖÕÓÕÖרÖÔ××ÔÕÔ´ÕÖÏÏÔЧ‚€z}‡•™œ˜’œ› š•–‹””™—–‡{y~ut“މ‘}’’¥×ÚƒÛÛÙÜŸÛÜÝàÞÝÝÞßàááßààÞßàãààâáàãäáàáääâäâäãâååãâÞáããáãá‚ãâ䙿áäàãáàâäåáãåääååãäæãâãâãà•ÜÞßÞÞßßááàáâáßââááãàåá–àáãââààßÞßßÝÞâÝÝÞàßÞÛÛÞ”àáàßÞÝÝÛÙÝÞÞÝÝÛÞÞÝÝßÞ‰ßÞÝÞÞÛÚÙÚÛ�‚¢þ𖓆~urŸºÄÂÃÆÇ¾º¶´´³°§®¯±¯­¦“{‘Ÿ›™š™ž™‘›œ—˜¡£¥¢¥¦§£¡£¥¦¤¨ª­¨§§¬©©«¬ª¬«®¬¬«¯ªª¨§¦©¬§¥¨©‚[`UZdwz}yr~€†|xxqorwx}{yh_]^ZU^bwppjoqoŒ\rrl|²¶µ´´±³¶Ž´´·¸·µº¶¶º¹º¹¹º¢¸»º¹»¼¿½¾¼º¸½¾¾½Á¾¾À¾À¾¾ÀÂÄ¿ÀÀÃÃÀ¾À–¾¿¾¼¼»¼¿À¿À¾»¹¼¼¾»¾À½¼½°À¿½¹»»¼ºº¹±µ´³´µ··¹¹¿½½¹¹·º¸¹º»¸¸¹¸¼¹¶··º¸¸µ¶³´µ¶¡µ¶±²µ³µ¹·¸µ·¶¸¹½µ³´¶´´³´²µ¸µ¸º»¹º¼†¾»»¹·´µ¶�ŽæçåæäãßáÛÐÊáøúùúø’ö÷øöíóøöö÷ðÔÙíôóòóô™ðîññóôööõö÷øö÷öõõ÷ø÷÷øö÷ö÷ø÷‚ù÷öµõ÷÷òóôÒ©¦””¢§«°¸ÀÃÄ»Á±°±­°¬¯ª¯²Áµž¤Ÿ¡ §¯š¢¡¢ª¨±ººµóùøùùûûøúùùûúúûûúúûú†ûüüûüýüýüƒûüüýƒüüýü‹ýüýýüüýüüþüý‚üýüýþýþýƒüýüýüý…þýüüûü‚ûûúüýüû üƒûúùûˆúûüüúûúúûúû„üûúùú„ùùøøùƒúûûú…ûùùøö÷õ�ʾ¾»¾¼º¶·³«¦½ÕÙÝÞÛ×רØÖ×Ù×ÈÏÖÓÔÓȪ°ÄÍÍÌÍÏÍÌÈÄÊÊÍÎÒÒÑÓÖÖÕÔÒÑÏÔ××Ö×ÔÕÔÖÖÕÖÖÕÕÖ°Ô×ÕÓÔÓÓÖ×ÎÏΦƒƒss‚…—ž¢¢˜Ÿ’“’Ž‘“Ÿ•€†€ƒ„‹}„Œ‰†–’ÔÛÝÙØÛ܉ÛÜÞÝßÝÜÝÝߌÜÞÝÞßààßáßÞàáƒàâãâãâªáâäãáãåââáãàâáããáàáäåãâæãçáâåæäããäæäåãäèæåäã‰âãàáààÞÞÝÜÞá¬ßààááààãáßßáâàßàßßÞÞÛÚßÞÞÝÞààÜÝÞÝÛÝÜÞÞÝÜÝÜÛÜÞ‰ÝÚÞßÞßÞÝÞ݉ßÝÞÞÙÛÙØÚÙ×�þœ£ž›š™–˜‹Š¥¿ÇÇÄÃÄļ·¶¶·²¢©µ±°«€…”  šš•›Ÿž¤¦ª¨¨«§¦£¡¡¦ª«­¬©¨§®¬«¬«ª¬®®«ªª±ªª©¨¨«­¥¢¢€]`US`fosw‚‚{wqqpurtrvyƒygdgeggor_Áfhfigqumm®·µ²¯³±µºº¶·¶·¹¸µ¸¸»º¸º¸¶¹ºº·½¼¹¹»¾»¼»»¸¼½¾ÀÿÀÁ¾¿¾¿ÃÀÄÁ¿„º½¿À¾”Á¿¿¼»¾À¿À¿À¿À¿¿Á¾ÁÁ¿À¿Á¾¼¾Á¿¾¾»¸»»¸µ´²°¯¯¶¹»»¼¸»·¶º¶·º¹·¶·µ¶¸¹¹¸¶¶³±´¶·´¶·µ²´´¶¹¶´´¶·¸†µµ¶¹µ´²‘·¶·¹ºº¹·¸»¹»ºµ¸µ¶´³�æå«áÝÔÊËÕîùøùúûùøùù÷÷øø÷ìò÷ø÷î×Ýôöôóóôôõõôôöõö÷øƒö÷÷øŠ÷öö÷ø÷øø÷÷ø÷ø÷ÂöÖ±§—ލ«±¼·À¾À»´¸²«®³¸·¶­³´»¸¥¢¦§Ÿµ¸™«¶½§ª´µ«âùøø÷õøùúûüûûúùûûøúûú…ûúùûúûüƒýüûüƒûüûý„üüûüýƒüýýü‚ýüý‚þýüƒýþþý‚þüý‰üýýþþýþýý üû‚úúûüƒýûûüˆûûýüüûùúûú‡ûúùûüûúû†üûùùûûù‚úùú‰ûúùùøö÷öö÷ö�¯À¾¼½º´ª¢£°ÉØÕØÞÝ×ÕØÚ×ÖÚÚÖÅÌÓÔÓÅ«µÎÐÎÍÌÍÎÎÏÐÏÒÐÓÔ„ÓÕ××ÖêÕÓÔÖÖÕÕÔÖÕÖÖØÙØÕÖרÕÖÖÙ×ÔÖÖ×ÖÖÕÒ§‡ƒtl‡Œ›–›ž›”˜”“˜—–Ž•–š—ˆ‚ˆˆ€€——{‹–œ†Š’ƒÁÝÜÛ×ÓÙÛÞÜÜàÞßÛÝÝÙÛÜÝÞßßÝÝßÛÝÞ…ààßÝÝá®ßââáââááàááàâáãáãâãâãàáàâäâàáäãâàâååââæçåäáååäãœçåãäææäãâãáãáâßááâàÞÞÝÛÙÛÛÜÞà’áÞßßàßáàßßÝßàßÞÝØÜÝ”ÚÝÜÝÝÜÞÝÝÜÞÝÜÜÝÝÜÜÝÝÜ“ßßÝÞÞÝÞÛÝÝàÜÚÝÛÚØÖÙÙÔ�þ¢¡œ™–“‰‚’±ÃÀÂÅþÀü¸µµ·´¡¦²°©˜Œ£¤¢žžž ¢£¥¤§¦¨¦¬©©«ª­¨¦§§«ª­©¥§§­®¯°­¯¯°°ªª­°«¬­®°¯®«¦{a]OOhnu{y}}€|twzmnsy{zsz{~ndimeezy\žmx}gmtk] ¸¶³¯§³µ»º»»º·¶¹·°²¹»¸·Î¶¶µ··¼¹»¹ºº·¼»¼¹»½¾ÀÄÀÀÁ¿À»¼ÁÂÁ¿¿À¿¾»½Á¿¾¿ÀÃÂÁ½¹¾À¾ÁÀÁÀÁÀ»À¾ÁÀÁÀÁÁÂÃÁÀ¿Ã¿¾¾¼¹¸»Î¾¸´±±¯¯²±µ¸·¹º¼·´¸¹¸µ¹·µ¶µ¶»·¸´°³·µ´²³´²´¶µµ´´·¶¶µ´¶·¶¹¹´µ³³¶¸·¹¹·¸º¶¸¸·¶´±²±µµ³�ŽåãÞÜÛÔËÄÝõùùúùúûø‰ðëðôäÖèöôõƒóôôõƒø÷ö÷„öø÷÷ùŠøø÷ø÷÷øø÷÷øùøƒ÷øø÷ø´÷÷øöõá°«œ•ºÉÉÄÅÃij»º½À¿½¾ºº»¹¸¸¶µ¬¡¥£ž›š¦¶©²º·¤¼»¦Ïúø‚ùúûšüúùûúùøúúüüûûúûúûüûûýûýüüûýƒüûüýþýüûý‚üüýþýþýüýþýüýûûüüýýüüýýüüúùúûü”ýüýýüýüûûýüüûúüûúûùûúüûƒüûùûùúüûúûúúûúúûùúûú…÷÷ö÷ö÷�½¹¶´³¬¥ž¶Î×ÛÔÙÜØþÙØÕ×ÚÛÖÉÃÉ̹ªÀÒÏÑÏÑÌÍÎÑÏÒÕÕÒÕÔÕÒÔÔÕÖÖÙ×ÕÖÔÖÔÕÖÕÖ×ØÙØÛØÕÖר×ÖÓרÕ×ÖÖÕÓ϶…„yq”¢£Ÿ¡ž ’™™›žž›œ™™š™—˜–•„…„}z…”‹“™•ƒ™•«ÚØ×ÖÙØÚÛÜÛšÝßÝÝÛÜÝÚÙÚÝÞàßÝÜÜÙßáÞÜààßßà›áàäãááâãßßãâàââßàâáâáâáâàâãâŠääåäâææãâäæ™áâãáäãääãâåäâãáââããâßßàâäá˜ãáÝÜØÙØÙÚÛÛßÞÞßßÞÞßßàÜÞßÞ¯ÜÝÛÛÜÚÜÚÝÛÝÞÝÛÜÝÛÜÜÛÜÜÞÞÜÜÝÞÞßÝÚÝÝÜÜÞßßÝÜÛÛÚ×רØÖ�­¡‘’‘Š‚¹ÁÁÂÂÃÀ¼»¿»¹¶·¹·¥œ  Ž‚”¦¤¦¦¤žŸ¢ ¥­«©×ª¤¯©¦««®­¬ª§©§©©¨©©­°°²°®­®¯¬¬©©¬®¯±²±¬¦Š]`VMt„…€‚u}}~„~€zz~}}{z{ukhhg`]esoxxshyvY‰¹´’±®¶¹½¸¹º»¶µ·µ³°·¸¸¶¯´´·¼¹³½¹»¼¼»¼¾¿¾¾½½¿ÁÀÁ¿Á¿½¾¼¹¿ÀÁÁ¿½¿Â¿¿¾¿ÁÀÁÀÀ¿ÎÁÀÁÂÁ¿½¿ÁÀ¿¼¾¿ÃÆÂ¿Á½¾ÁÀ¿¿»¸º½¾À¼¼½º¹·¸²±­«°³³¸·¶º¹¸ºº¸µ´´¶¸¹´²··µµ°´µµ¶¶µ²°´¸¶³›µ·¸¹´²µ·µ¼¹µ¹¸µ·º¶¹¹¸¶³³²³´´·�ˆßÛÕÔÑÈÍéùúùøøùøøùøø÷õôßÊàðöõôöõ ÷øƒ÷÷ö÷ø‚÷øù¿øùùø÷ø÷öö÷÷ø÷÷õõßµ¬žžºÅľ½ÂÀµº¼¼À¿ÁÁø¸ºÃ»··¶¶·¥¢§›Ÿ¬»¼¹ ¬¸«Âö÷—øùùúúûùúûúøùúùùûúûûúûúû ü†ýüýüýüý‰üýüüýûýýüý‡üüýüüýüý„þþýüýþýüýˆþþýüþüüýü‚ýýüûúøôøúúûüýýüüúúüûûüûúûúüüúûüûúøùûŽúûûúùûûùùúúûúúù„úúûúùƒ÷öö÷�±µ²­­©¢¨ÃÕØÜßÙØØ×ÖÖØÖÕØØ×ÓÐδœµÈÒÐÏÐÐÓÑÔÓÓÐÔÔÕÒÕÓÔÕ–ÖÕÖ×ÔÓÔÖÔÓ××ÕÖØÚÛÛÜÛÙØ×ÛÖÒÕÖרÕÔÐϵ†z|–¡Ÿššž”˜›š›Ÿž ˜—š Ÿš–˜—–—ˆ„ˆ|™š–‹•„šÔÖÖÔÕØÛÛÝÜÜÛÜÜÝÝÜÝÚÛÜÛÝÝÞÞÜÝÝßàßßáâàŒßàáäãáààåÞßäàîßßäãáàãåãááâääàáâáääææäâäàáãâààãâàâãåâååâäããäãâãäæáâäáããäââáÞáßÜØ×Ï×ÚÙÜÝÞÝÞÝÝÜßààááÞÞÝÜÝÞßÞÝÜÞÞÝÚØÛÜÝÜÛÞÛÜßÝÛÛ݃ÜÛÛÝ‚ßÞÛ…ÚÛØÙÚÚÙ�þ˜”ŠŠ†ˆ¬ÂÅÄÁÆÁÿ¸·»¸¸º¸µ²©¤‡k‰£¥¢¥§§«§¦¥§¥©­¬¬«¦¨©¬ª©«©©¬©§ª©©««©©¬¯²°²³±®­®¬ª¥¦«­µµ±ª¨ŒddVYv€zz€ƒx~}}ƒ€„‚†}z€†„{y€}|mlk]_n~°w`lr`v´³°¯±²´µ¸¹¶³¸¹·³µ¶´³¸µ·²µ¸µ´¸·½¾¹¼¼»¼¿½ºº¿’¾¼¼¿¾¾¼¼¿½¾»ºÀ¿Á¿ˆÀ¿½¾½¼¾½¿…ÀÁÂÀ¼¾³¼»»ºÀÄÃÀÁ½ÀÅÄÀÀ½½¾½¿À¼¿½»¾¾Àºº¶±¯®£©­¬´¹ºµ¸µ²³´´¹º¹¶ª³¶º·µ·¶´¬°µ¶¸´³¶¹·¸³²³·¶º¸µ¶¶¹º»·¸º·¹µ´²³³µ�ŒÕÑÊÈÇÞóûûúùùú•øö÷÷ø÷÷öõöòÒÊàööôõööõ÷ö÷‡ö÷ø÷÷øø÷‚ø÷øƒùøùøÈùúùøøùùøøù÷ö÷÷ø÷øöòݶ«Ÿ®ÌÅÃÅÁ¼¸¶ÃÆÂ¼º¶¹»·¾ÁÄ¿»º¹­§¡¦ Ÿ¦±·£¤¯¯°ôø÷÷öö÷ùžûûúúüúùúûûùûûüûûüúüýüüýýüýüüýüý‘üýýüûüüýýüýüýüýýþýüýþý‰úùüýûüýýþý…üýüýýü“ýýüýüýüüýüýüûúøö÷ùúûýüˆûüûúûúûüûúûûüúúüûúüüúûúùú‰ûûúùúûüùøú„øøöö÷�ž­©£¢ ¸ÔÝÛÛÝÝÛÖØØÔÕÔÔÒÔÔÒÓɨ¡¸ÒѪÒÑÑÔÒÔÒÓÔÕÕÔÔÖÕÔÖÖÔÖÔÔÖÔÔÖÖÕÖÕ×ÖÖØÚÛÚÙÚÚØÖØ‘ÓÕÕØ××Ó˳Œ„|ˆ¥¡Ÿ žÁš–• ¢ž™™–™›˜ž ›šš‰…ˆƒ~€‰‘”‚…މˆÔØ×ÖÓÕÖÚÛÜÝÝÚÛÞÞÚÜÝÛØÜÝÜÜÝÞÝßßÞà—ãÞààßààãâááßÝàÝÜâããáÞßàá•àäæåäáâàßßàßàäåæäááäáâßáßÜÙßáãâãæçàâáãæâááãåààâàääßàááßâáààÝÜÛÙÒÔÕ×ÙÜÚÞßÞÞàáàÞßÞÝßàßÝÞßÝÝÞÝÝÜÚÜÝÜÞÜÜÞÞÚÙÜÝÛÝÝÛÜÝÞÝÝÙÚÛÜƒÙØÜÚÙ�Ê‹‰ƒ~y˜»ÄÃÆÃÁÁ¿¾º²¶·µµ¶±¬¬›yrŠ££¢¥§¨§«¨§¦¥¨ª«©«¬©§©­§¨©¥©©§ª¬¯¬ª¬©§«°²¯²³²±¬¡ª§©­°³¶¬¤‹gc\c‚‚€~ƒ~z~‚ƒ}|z~ƒ}„¾}‚sojog^`ipveglb_®¶²®©ª®¶µµ¸·³·¶·°´¶´²¹µ´²µ¸µ´¶¶º½½»½º»¾¼··½¾¼¼½º¹¼½½¼¾¼½¿¼ÀÁ¿¾¼¼¾»º¹»¹º¾¿…ÂÂÃÀº½ä»´®·¸¸ºÀ¿¿½¼¾¿À½¿¼¾¾»»½¼À¿º¾¾¼º»»º¾¹´®¨¢¨ª­¬¯­´µ´µ¹»º¸¸·µµ¶·¹·µµ¶¹³³²³»·³·¹¹¼¶°³´³´·µ··¹·»³±¸µ»¸·´²µ¶´�ŠÊÈÇÓíûúúûûùøŠ÷öôõæÇÑôõõöŠõ÷õ÷ôóö÷÷ø÷†øø÷øø÷øúøùøƒùùøùƒøøùø½ùø÷ôÞµ´¥¤ÌÒÒÏÆÉÀ¿¾¾ÀÝÊÁÀ¿¸¼Åº¸¹¹¼Â¿¹¨¥£Ÿ¤¤°®´©«±²ªëùøø÷õö÷úûúûúŒûûüûøûûúú÷ûýüý„üüûûý‡úûüüûüþýüýüþþýýüùüýüüýýþƒýýþý„þþüúý…üýþýþý‡üüûüýýþýþýüý•üýüûüûøôô÷ùùúûüýüüýûúü„úúüûü†úúüûüüû•úúùúûüûúûúùøùøùùøø÷÷öö÷�«¥ ¡­ÈÜàßÛÙØ×ÝÖ×Ù×ÕÕÔÑÏÑϼ™¦ÎÐÎÑÑÒÑÒÏÓÏÎÑÔÕÕÖ‘ÕÕÖ×ÔÔ×ÕÙÖÕØ×ÖÕר׈Ù×רØÖØ×ؾ×ÖØÕÌ²Š‹‚£©«©¢¤››´¥Ÿžœ—›¢™—˜™›Ÿ™Š‡…‚†„Ž’ˆŠŽ…ÉÙרÔÒÕÕÚÜÛÝ‘ÞÜÜÛÝÝÛÛÝÝØÜÞÝÜ×Þà„Þßãßà¸ßÝâáÞÙÛÝÝÜßâááàßàâàßàâáãäâáàÝÙßáààâããäââããââáàáÜÚáâäáàãæâÈàâááßáãâåãàãäÞßáßßâàáàßàáßÛÜÚÓÍÌÑרÚÜÞáàÞàÞÜÞÝßÝÜÜÞàÞßßÜÚÜÞàÝÞÝÚÛÝÜÜÛÝÝß݆ÜÞÛÚØÙ܃ÙÖ×Ö×�þ…€€®ÃÃÄÂÆÀ¿½¾¸µ´¸¹·³±«ªdt£¦¥¥¦¦¢¦¦©£Ÿ¤¦©««ª«®ª©ª¬¦¨«ª¯¨¨­¬¯¬¨«¨©ª©­¬®¯²±¬¬««¬¯³´°°¥Šbha_}‡‹ˆ„|€ƒ€•‡ƒ€|€ˆ~~}~„‚|lkjeh`nmnÂgnso]œ³·³®¨¨¬´µ³¶µ¹¶³µ³³´²µ¹¶¯³·µµ«¶º¹¹¸¹º½¼¼·²°¹½»³··¸¶¸¾½º»½¼¼À¾½Œ¼½¼»¹µ±¹¾º¸¾¿…À¿ÀÀ»¼ˆµ±¹»½¹º¼½Ø¾¼¼º½º»¼½¾¾»¼Â¾»¾¹¼½º½¿¿»¶´³²¯¤˜—§¨®±¶½·¸¹µµ·¸¸¹³²¶·¹¸¶±´»¹·¹µ¶·¶±³³°²µ¶¶µ¶´·±¯³²·µ·¶²­°µ�‹ÈËßôüûûùúúûù…øø÷øø÷•õ伨õ÷öö÷ö÷ö÷ö÷öö÷øúùøŽ÷ùøøùùøùø÷øøùùø…ùùøø÷ùàøùøøù÷øúöñܵ¯¥™Å×ÑÒÉÄÁ»Â¿¿ÈÈÁÃÀ¸ºÀ¿·­²µ»·º´¬§¨¢ª³¾Æ©²¿¸®àøùúø÷ö÷÷ùùûøùûûúûûùûûüüûùûüüûúüýýüüýýþýüûü…ûûüþüýüýüý‚þýüýýüýýüüþþýþýýþƒýþþý†üýüüýüý‚üüýƒþýüýü‰ýýûüýüýûûø„öô÷øüŒýüûüûûüø÷üüûü‚ûüû„úø÷ûúùüûùùúùúùúù÷ø÷‚øöõ÷�ž£§»ÐÜÜÝÝÜØÛÖÙ×רÖÕÖÖÓÒθ“±ÐÔÑÐÒþÑÔÒÒÔÕÙØÖ×ÖÖ×Õר××ÙØØ×Õ×ØÙØ××Ö×רÕÔ×ÖÖØÖ×Õר×ÖÖÓʯŒ…x ®ªª¢ ™Ÿ¤¢ž –˜ž—Ž’–›—š•Ž‰‹…Œ‘› †’œ”ˆÁÚØ×ØÕÓÕÖÙÙÜÙÚÜÞÛÛÜÜÞÜÞÞÝÚÝÞßÝÚ˜ÞàáàÞáâàßÝÞÞÝàßÜÚÛÞàÝääáà—áâáßßààáâàâáÝÞßáààãäÞßâãÅáâãàâáãåãæâßâãááãààââáäãâåäâääâÝáâÞáßáÜÝáÞÞààáÛÙÖÖÓÒÏÒÔÜÜÞàÝÚÞÚÝÝÕÕßßÝŸÞÞÝÞÞÝÜÝ××ÝÜÜÛÛÞàÝÜÚÛßÝÝÙ×ÛÛØ×ÕÖ�þ…ˆž½ÈÆÅÁÁÇÀÀ¾¾·²±·¸°­¯§e~£­¨¦«§¦¥¦¦¨¥¤¬­¯¯®®­®ª©®ªª¬®¯²­¬®¬¯­©©¨¬«©¨¤«­²°­®ª©­¨±´¨Ÿ‡`]\VŒ†Šƒ~|yƒ€€ƒƒ‚~y|„‚ztw|‚}|wqlnflmz{aþo|sdœ±²µ±¯ª®¯²µ´±²¶¸´³³²·¶º¸¹°µ¸»µ²º»º·¶¹¼¾¼º¶µ±¶¼¹´´·¼º¾º»»¿¾¼»¾¾¸º½½¼»¾»·¹»½¼¸½½¹¶¼»½À½¼¾À¿¼¿À¿Àº¸»»¼¼½»¼º¼¼»º½¿¿¼½Á¾¸½½º¸»¾¢¼À¼µµ¸¸¹°¨¤¦£¡¡¤©´³¹¹¸¹·´¶´®­º¸¸··º†¶¸·µµ°±”µ°±·¸·³²³·³²³®µ²²´³±¯³�„Ôìùûüšûúûûúûúø÷÷öö÷÷õÎÁë÷ö÷õ÷÷ø÷ö„øøùøù†úùøùøøùøù‚øøùÃøùøù÷÷øøúùúú÷÷øöø÷óÞ´®œ˜ÂÐÓÇËÅÁ¾ÀÂÇÀÈÇÀÆÂºº¼º¼³´¸½¹¸±²»¼¯°µ¼®¤º¼¯Ëúù‚úùø†úûúúùüû…ùûüüýü…ýüýýüýƒüüýþýüþý‡þýüüýüüý„þýýüý„üýýþýþ‡ýþýþýýüý‚þüýˆüýþþýþýýþ‡üýýüýýüý…üüýþþý†üúüúøøù÷ûûýüùûûúüýüýüƒûûúû„úúûûúù‚øø÷ö�¯ÆÙÝÜÞÜÜÛÝÝÚÙ××ÕÔ˜ÒÏ£—ÆÔÒÔÑÒÓÖÓÑÐÐÔÕÖÖרØÙØï×ÖØÖÖÙÙØ×ØÖÙØØ××ÖÖØ×ÚÕÕ××ÖÙØØÕÓÕÕ×ÓË²Š†ur›¨«¢¤Ÿ››Ÿ¢¤¢ž¢ž˜˜š™›“”—œ–˜’“šœ”—‡ƒ™™‰£ÚÛÙÖÚØØ××ÖÙÝÚÙ×ÜÛÝÞÚÞÞßáßÞßà߈ÞßáâàßááߎÝßßÛÜÜÞáÞãåâÞàß”âßÜßáààâåáÞâÞááàâáÞßâ„ãåâäáŸäâàäâÞâåáâáàáãáââáââáâäæãßáâÞàÝ߃áÞßážÝßàÞÚÛØÓÓÔÖ×ÔØÜßÞÚÛØÚßàÞßÝÞÞÜßÞÝÛÜÛÛÜÚÛÞÜÜÛÚÝÛÛÚ…ÙÖÔÓÕÖÕ�…”³ÃÉÉDzÆÈÃľµ±®°±¬¨£um©¨¬§¦©§¦¥¤¥©«¬°°±±®¬®²¬ª°¬©­­¯²¯ª¯ä¬«­®­«ª¨ª«ª¯±²²«¦«¥¯®ž…a`OOy‰…||€ƒ†}‚‚ƒ~yz}|~xx|‚{yvw|qssxc`yxb€º¶±²²±±®±°·µ²²­¶µ³´°³µµ·ºµ·º»¸¹º²¹·º½½¿Àº¸¸¶»·¹¶·º»½»··½¹¶·¼¹³·½¼»½¾¼¹½¼¼¹¹½¹¸¶»½¼¼¿ÈÃÀ»¿½¾¾¹¶º¾À½¼¼½½¿À½¹»½»½¿¿¼¹¼½¸¶¼¾½¼ºµ¸º»¹´³³±¯²¬¤¥¦ª­ª³¶·¶±²´¸»··¹¹¼¹º¹ºµ–²³¸²´µ¶¸µ³´µ³°´³´³±´²³³±�‘õûüüûüûûúûûùùø÷öõö„èÆÎóø÷÷ôö÷øöö÷øøúùú‰ùùúùøùøùúù»øøùùúùùúùøùúùùúùùøùù÷÷ùú÷ô×¶±¡“ÉØÒØÍÅÄÇ¿¿ÆÅÎÍÄÅÁ½¶ºÀĺ»¾¿¿¹Ÿ¶½½ÂÀó¹¸Äöúùùø÷úúùûùúùúûùûúúùû…üûüûûü„ûýüüýƒüüýüýþýü‰ýýþýýüýýþýˆüýýþýþýýþýþýýþþýþþýþüýýþþýýþüüþýþüþþýüüýˆþýüüûüûúû‚ùõù„ûüüýü”ýûüüûüüýüüúùûûúûùûûúûŒøøùúúùø÷õóöö÷õ�¥ÔÙÞááãàÛÚÜÞÛ×ÒÔÓÓÒÓѾœ§ÏÖÖÕÕÔÎÒÔÕÒÑÓÖ׉ØÚÛÚÙÚÙ×Ö׆ÙÚØ×רÙ¶×ØØ××ÙÛØÙÙÚרר×ÖÙÚ×Ϋ‹n ¯ª¯§ŸŸ¡Ÿœœ¡¡¨¨¡ ›”™ž¡™šœœ™Œ–œŸz’—”žÔÛ‡××ÚÛÛÚØÛ†ÚÜÛÛÝÛÞÃßÞÞßÞßàßÞÝßáàááâàÞààááßÞÝÝßàßàäáàáàßßâáßÞáâåâãàÞâßáâààÝâáââãäçääãááãåã„åçäâáÔãâááßááâäáâáàáãäààáãàßááãàââàÞÜÜÝÛÛÚÚÖÏÖ×ÙÜßÛààÝßßÞààßßÞßßáßÛÜÜÙÝÚÜÝÜÝÝÜØÙÛÜÚØØ×ÑÏÓÕÖÔ�þÃÎËÉÊÇÇÆÅÆÃ¾¾»²®¬­®¨‘k}¨®¬©©¨ £¦©¤¥©«¬­°°²³±°¯²¯§ª¬«¬¯¬®¬©­¯±¬¬°²®¯°°±°¬®±±²®®µ²¬¢}ij[K~‰‘ˆ€ƒ~ƒ‚‡‡‚‚~|wzx}‚‚y}{}„€}Xtšxnw´¸¶´°­´µ±º³µ³³²¯²²³²°°³´µƒº¹·¹‰º¹¼¼»º¾º¶¹¶·¼¸·ºº»À¸¸»¹¸´»·³´»¾À¿½»·»½·µ»¼¶»»¼¾½¼¾¾ÂÄþ¿¼½¿¼»½¾ÄÀ¾Õ¼ÁÁ¾½·¼½¾¾¹¹¼»¼¿¾¿¼À½»µ¹»¼¹º¹µ´°±²°±°°©¥®¬®³·³¸¼»¹·¶¸º¹¾¹ºº»³³¶±²´¯¶´²µ´´±¯±±´µ´¯ª©®­°­�šúûüûûùúúûùùø÷÷öõööõÝÀÝ÷ø÷øö…óööøö÷šøùøùúùùø÷ùø÷ùùúúùøø÷÷ø÷øù÷ ùúøšù÷â¶²¤¼ÔÎÐÍÇÆÊÈǽ¾Á¿É¿Áý· ¿¿½Ã¾ÆÀ¿µ·ÂÇÈΪ­º¹µïúùùøø÷ûûøùøûˆúúùúúùûúûüûüýüýüýü„ýþþýü‚ýü ý„üþýüý†üýýþýþý‚þþýˆüýüýûýþþýŽþþýýüüýüûýýúýýúüý¢üüûúùùúùùûøúýüüûüûûüüûûúûüúúøúûùúûù‰úù÷õðêâãèæã�‡ÜÚÛààßá󬆯ÕÑÒÑÒÓѲ—´ÓÔÕÖÒÑÒÌÒÒÖÕÒÔÔÖ×ÖØÚÙØØÖ××Ô×Ù…ØØ×ÕØÖËÙÖ×Ö×ÙÚÚØÙÙÖØØÚØÖØØÓ¶‹€m”¬¨§¦¢¡£¢¢›œžœ¤ž ž˜•–—œ› Ÿœ¢žŸ–—Ÿ££¦ˆŒ˜–ŽÌÛÚÛÛÚØÜÚ–ÞÚÛÜÝÜÛÛÜÛÝßÝÛÝÞÝÝßßÝÝß‚Þßà–ÞßàááàßÞÝßàßßââáààÞßààá¦âáââãàáßáââàÝàâááåãäààááâãââæãäâäæâäßßá‘âßÚÝàâáââáßàáãáàà߆ÞãâÜàâÛµÞâááàßÝÝÛÚÖ×Ü×ÚÛÕÚÞÝßàßÞÝÞÞÝßÞÝÞÙÝÙÜÜÚÝÜÙÚÚÜÜÙÓÑÌü¿ÄÀ¼�ÆÔÏÊÈËÇÇÆÅÀ½»·¶±°°­©‡jˆ¬¯ªª§¤§¢¦¥¬¨©ª¬¯±®°³´³²¯²¯§¬®¯°¬¬­©©­«®±¬¯°¯²±³¶±þ°²´±²²µªejbLr‹…‡‡‚‚‡ƒ…~}€~…ƒ{zzx€€}‚„†‚…z~…Šˆ‰jl{te§·´³²¯®·¶³´²³²³´´²³µ²³³¶¶³´·¶¶·º·¹¹ºº¸ºº¼¹»º¸¼º»º¹·¸º»¼¾º¼»¸·µº¶¸ºº¾¿Á½®¼º¼À¹¶½¿¹¼¾¼À¿½¾½Áÿ¿º»À¿¿Á¿ÁÁÀ¼¼½»¿»¼·»¿¾½¼º½·¾Â¿¼½¸º·¶¹¹³¹»±²°´¹¹¼¹·³³µ°®­±¬°µ¯·»¶¸ºº½»»½»¶º·³´±®¶´²³‹±°²±®«¥œ“˜™–—�ƒúûúùˆûúúùøø÷ø÷„ìÀÃï÷ö÷öøù‚øøúøúùøùƒøø÷øùúù¹úøøùøùøõܶ´¨°ÔÊÉ¿»¿¾Â¿¼ÀÆÃÂÁÊ¿¿¾Ã½»½½¿À¿ÃÄÁÀÀÃÌÉ¥«»»³éúù…øúúùøùƒûûüûŽúùøûüúúüüûüüýýüƒýýüýüýþýûýþ‚ýýþˆýýþýûýýúýüýþý„þýýþý„øøýþý„üýýþ ý„üþýûüûüüýýüýýüýýûûüüýú÷•ùùûûüúüüûüûøüüûúúûúøöðòð†îììîðòôó�ÜÝØÙÝÜÞÜÛÛ×ÕÕÔ‰ÎÚšÆÒÔÓÓÕéÔÒÓÕÔÖÔÖÖר×ÖØÚ×ÖÕÕÖÖ×Ù×Ù×Ö×ÙÚ××ÖØ×Õ××ÙÚÜÚÚØØÖר×ÖÖΰŒŠjŠ©£¡š˜››žœš Ÿžž¥œ›› ›™š›œœŸ¡ŸžœŸ¤¡„Š˜˜ÆÝÚÙÚÙÛŸÙÙÛÖÙÛÚÝÝÜßÜÚÙÝÜÜÞÞÝßàÝßßààÞÞààÞß‹ááààÞßàáâãàá®ßãâáåãäâäâáåââäáãåáÞàãÞàäåáàááããåâáåãåâãààã××ÞážààÞÞßàäáâÞßßááààÝâáÝâßÛÜÞÞàßááàœÞàáÜÝÞàâÛÛØÓÓÒÕ×ÜÝÜÛÞÝÞßÝÙÞÜÚ„Ù×ÔÓÊŠÎÍÌËÈÅÄÊÎÏÐÎ�þÓÏÉÄÆÈÈÆÂ¼»º´¶²²°nož©­«¨ª«ª¬­¬©­°««¯°³±¯±³²´±±°­«±°²®ª¬¬°®¬¬¯®«®¯±±³µµ²±®¯±²°¯©ƒcf_Je‰…ƒ|y|~€~|~‚‚€€‹~€‚|~}{…‡†‚‡bmz|¤h¡¹¶²±²³²´³³¯±®±µ¶·´³¶µ³°¶¹µ¶·º·µ¹º·¹þ¸½½¼¼»ºº¼»»¼¹¸ºº¾¾»¹¼»¿»¿ÀÀ¿À¼½ÂÄÁ¿ÂÂÆ½»¿½¸À¾·½¾¿¿ÁÁ¿½ÁÀ¼¹¾ÀÀÁÀ½½¿°±¼»¾¼º»½¼¾¾½»¾¼½¼¼¸·½»¾»´¶´²´´³¶µ¹¼º¹ºº·º·µµ¸¸°´³ª©©¬¬·¸º¹º›½¹»¸²¸º±®±³°®©¥££ž¢ ¡¡ž §§¨©�‚úûúùûùøø÷÷øø÷øç³Êóö„÷ø÷÷ø÷‚ø÷ùøùøøùøùúøúùøøùø÷øƒúùùøƒúøø÷½øéÀ´°”¥ÊËÃÆÀ»³½º¿¿ÀÆÆÅÃÀÀÇŶ·º¼¿ÃÇÆÆÍʱ¯·®¥³»°Ëúùøù÷ôùúùùøùúùùúùøùùú÷úûúùúúü‚ýýüþü„ýýüüý‚üýþýþýþÿþˆüýýüüýýþýþýþý’üýýûûýýüýýüýýþýþýþý‡üüûýüýýüƒûüüýƒüüýüŠûüüûýüûüúøö øøùúûüüûüúùøóïìêçéðìïóö÷ø÷÷öõõôóóô�«ÚÛÖÚÞÜÛÚÙÛÔÖ×ÔÔÕ¹¤ÍÑÓÔÒÓÕ×ÖÕÔÖÕÕÖÔÖÔÖÙÙרØÖœØÖÙØÖÙØÕÕØÙררØÖרÚÚØØ×ÖÙÖÖÔôÕ½”‰†p£¤žŸœ–’š˜œœ¡¢¢Ÿ£¡ –——™œŸ£¢¢¨¢—“Š„‘˜¨ÚÝÙÚ×ÒÙÛÚÛØØÚ×Ø×ØÙØØÝÙÚØÝÞÝÞÝÝßÞÝáàßßÝÝàáßÞÝÞßßàâàááßáâäãßâäáàäâàãâåâãåãääâáäâáãäáãå“äâäâáäãââåãäãààåÞÝÝàáà•ßåáâàáàáàßàÞàßÞßÞÜÝàáâ´ààßáÞßàÝßßâãÞÝÜ×ÔÒÑÐÖÖÕÙÛÝÞÜÛØ×ÔÌÈÆÄ¾¿ÊÆËÐÕ×ÔÕÕÔÓÔÓÑÑÓ�þÌËÈÄÄÃÄ»¹··´¸³¯“f}¤ª«­©§©®¬¯±²¯®¯¬¬«¯±±³²°®²°°²¯«°¯²¯ª«®°®¯®­¯«ª°±³°±´±¯®¬­®«­’hfcM^€ƒ€‚|v~}~}}€…„~~€‰„…vy{{}~…†‡Œ†xpprgcqylõ‚·¶³²­«²³±°²¯°¯³°²µ®­±´´°·¹¶¶³¶¶´¸¹¶¹¸º·»Á»½º¸º½¼¹¸»¼¹·¾¾¼¸½ÁÅÄÃÁÀÁÀ¿¾ÀÅÄÂÂÃÈÀ¼½¾½ÀÀ½ÁÁÀÁ¿¾¾¿ÁÁ¼¼Ã¿¿¾¹¼¿¹µ¾»»¼º»½¼ÀÀ½¨»½»¸µ¶»»¾º¶µ¹¸µ·¸»º»¼º¹»¸µ¸´µ¸ºÀº¸¸°­§¥¢­±¶¸µ³¶´±«£™œ–šŸœ¤«¬¯¬­®­ªª«¨©«�ûù”ûúùøøùøù÷Ê«åøöõõööøø÷ƒø÷ø÷ùøù‚úùøŽùøøùùøøùùøø÷ùùøÂùø÷÷øø÷÷躵±§ŸÉËÌǼÁ¾µ¼¼ÃÄÉ»ÃËÅÅÀýº±¹¬·ÃÄÈÊ˺¾½Âɺ ¯µ¼Çøùøøùø÷ùúúùˆøøöúúûùûú™üüûúúùûûüýùùýüüûýüüûûüýýüýƒþýþýþýƒþþýþ‡ýýþýýþýþýþýþýþýþýþý‚üýüûý‚üýü©ýýüüþüúúýýüýýüüûüûûúùù÷÷øöøóâãäáêñô÷ûùúûùú„øùø÷ö�œÚÛÖÚÞÚØØÚØØÚØÕО¿ÔÒÏÑÓÑÔÕÔÔÕ‡Ó××ÔÖÖÕÖþ×ÖÙרÖÕÖ×ÙÕÔ××ÖÕÙÙ×ÖÕ×ÙÖÕÖ×ÖÕÔÕÔÓÒ¾‹ˆyž¤¦¡—œ˜”š˜Ÿž¤˜ ¥ž œŸš™’™–Ÿ ¥¤¥˜š˜ž£•€Œ’˜¡ÖÙÖÕ×ÖÓ×ÙÛÙ×רÖÖÓÖ×ÛØÛÚÚÛÞáÝÝÙ×ÜÝÝßÙÙÝÜÝÞáÞÞƒÛÜÞß„ààáàâ’áßáãàáãàÞÞáàãåáââáâ›áäãáåãáâåãäâããßßãâããåäáãàáåáâäàÞáâäââààßàâßàÞ»àÞáßßàâßááßßÞàáÞÜÜÞàßÝßßÜÚÝÛÚÛØØÓÕÔÑÓ˸µ´¸ÃÌÏÒÙÙØÙÚÛÞÛÖÖÙ×ÕÔ×Õ�±ÆÈÆÀÂÂÃŽ¹ºº·º­uX𮩍©ª©ªª¬¯°¯­±¯¬¬®¯±­¯±²®®°­°±²°þ®°­®«®°²±­¬ª¨­­®¬¬±°­«ª«­ª’egeYV~‚‚€x€~w~x‚‚„y†}€}ƒ~}s}r{‚ˆ‹ˆz~z„u`nqx·¶´³²®°²³²°²¬¬®¯¨¯´²±´´²´»½··°²³²²´®²¹·¸¹½¹»µ·¶»½¹ººš½»º¿¿½½¾ÀÃÂÁ¼º½½À¿ÁÂÃÀÀÄÂÀïÂÉÆÂÃÁÂÃÃÁ¿À¾ÁÆÄ¿À¾¹¼¸ºÂ¿¼ÀÀ¼¼Â¿ÀÁÀ¿¾¿¼¼Â¼ºº»¼»¼¾½·¼¾¸¹»ºº¹¸¹¸¼»´³²»¼¼¿¾»·³·´°²¯®¦¨§£ª¢‹ŽŽ™£«°³´´µµ»·³±°±°¯¬²°²±�‡ùúúùùûûúø÷ëÆÀè÷õõôöõö÷ø‡÷÷ööøø÷ø†ùøøúùùøŠúúøø÷øúøøùø÷‚ö÷ø²ñÀ¯¨¢¤¾ÌÎËÇÂÇÇÊÄ»ÄÀÇÀ¸¢¥­´µµ½¼´ÁÂÉÐÏÇÃÌÍÔÔ°®³·ÁðùøŸù÷öùø÷ùùøùùúûúúûùûûüûûúøùûùúü÷÷ü†ýýüüýûýü ý‚üüýþ‚üý þýþýþ…ýýüýþýƒüýüý…üýþýýüýƒüýüý…üýüýûüýýüüûúüüýüúúüûžúùúù÷øîÜßñõöøø÷ùúùùúúùùøùø÷ö÷÷ö�‘ÛÚ×ÛÝÜÚÕ×ÖÙØÔÞ—¾ÐÏÒ„ÔÕÒÒÕ‡ÔÕÒÒÓÕÓÕ‰ÖÖÕÕÖ×Õ×ÙÖŸØÖØ×ÕÕÔØØÖØ×ÖÕÖÕÔÓÔÒÒÕÕÔÉ—†‚{|•¤þ ¢ £Ÿ—Ÿ›¡œœ’}ƒ“”•œ›•žž¤«©£ ¥¦ªªŒŒ‘œÍÙÚ×ÖÕÖ×ÓÒØÖÖØÙÕØÙ×ØÚØÚÙÛÛÞÞÜÝØ×ÛÙÚÝÓÓÜÝÜÞàÞÝÜÞÝÞÞßÞßááßàßáààáàÝáßÝÝáÞßáàááßââáãäãàáãåäãˆààßßáààáâšåäáâàßàÞààßààáààßááâàááßÞßá‚ÞÞß¹àßßÝÝÞÝÝßààÝÝÛÚÝÜÝÝÙØÜÛÝÜÛÚÙÚÖÑÒǯ³ÅÏÐ××ÔÚÛÙÖÚÚÜÚÖÖØ×ÕÖÕÖ×Ö�•ÅÃÀÂÄÄÂÂÀ¿¾¹²›tr𩍤¥©þ¨ª©«°¬­­¬©¨ª®¬¬­°°­«®¬¯°°²±¯®±³²©©­°®¬­¬®ªª«ª«ª©©¨­«® jaaVUsƒ‚}ƒ„…‚x‚~ƒ|{p\bnuzx}{ƒ„ŽŽ‡ƒ…ƒ†Šononx¨µ³µ³²²³«ª¬«­¯®¬°­¯²²µµ³°þ³ºº¶·¯²°®¯³ª°µ´·¹¼º¸µº´»½»»º½¼¹ºº¾½¼¾À½¿À¹¶»º¾¼ÀÁþÀÂÄÁÁÀÆÈÅÅþÀÃÂÀ¿¿¾¿ÅÄÁÀ½¹¼ººÁ½¹º¾»½¿»½Â¾¼½¿½¼Á½¼¸¹»º¹¾¼¹»¾¹¸¹·µµ¸¶¶¹º·¶¶¸´ª¸¼¼¶±±´´³µ¯¯¬¯ª¨¬‰Šš§¦¨®­±µ²´··¸´±±²°°±³²®±�ù’úúùúûûú÷ÝÍåõèçïçòö÷öø÷öø÷ø‚÷øù‚øùø÷øÀùøøùøø÷ööñõø÷òÊ¥¢¢§ÁÈÌÍÍÕÓÏÈÆÅÁÂÄÈù¼©¢°ÅÃÈʽ»»ÄÄÌÍÃÌÎÐÒ³§²´©Þ÷÷øˆö÷øù÷øùøùøúùùúûùúûüúúûûúúûƒüúúü„ýüýýü†ýüýýüüý†ûþýýüü ý…þýþýüý†üüûüýþýƒüýþýüý‚þüý üýü†ýüûüýüû…üüøùüûüûùùûûúùøù÷öõïóóöùûø÷ù÷øùùø÷ø÷ö�„ÚØØÜÝ¢××ÖØÔ³¡¼Í¾¼Æ¾ËÐÔÕÔÔÑÔÕÖÔÔÕÔÓÒÓÒ×ÖÕÖÕ„×ÙØØÖØÕÕÖÔÖ×ÕÖØØÖÖ×ÕÑÐÓÊÑÖÕÊ¢—Ÿ¢¢¤««§¡Ÿ œŸ¡Ÿ–—†¢¡¥§œ™™ Ÿ¦¨Ÿ¦¨¨§Œ…޵Ö×ÙÙØÖÕÓÕ×Ù×ÙÚÚØÙÛØ–ÙÚÛÛÞßÞÜÝÜÜÞÜÛÜÛÜÜÞ×ÙßÝ‚ààß‚ÞÞàƒÞÞâá˜ÞßáÞàãâãààãäââäãááßáãáääâ˜àßàßáßàâáâááââàÞáÞáßáßàâáŠãâàââààßààß‘àßààáâàßàßÞÞàßÝßßÞªßàÞÖÖÚÜÛÜÝÛÙÚÛÙÙ×ÖÕÐÑÑÈÍÍÓÙÛ×ÔØÕÙÛØØ×ØÙÖÖר×�þÄÁ¾ÁÄÂÁÄÃĽ³Œzš­•’ž‘œ¥¨ª§¨¨­­¬­®­­ª©«©¯¯²°­ª®¬¯°®®¯­­±µ­¨§©®¬ª®­­©«¬«¬¥£ž¥­¬¡z]]\]t|~~ƒŠ‰‡ƒ€~€ƒ~suhct†‡‰„}~z‚‰‰„Š…‚ƒieno[®‡®¯²±±¯¬­‚¬°¯ƒ­¯¯³…¯´¶º¶·²´´³´·´´¯¯¶µ´¹¼¶º¡¼»¼»¹ºº½»¹¿½¼½¼¸¼¿¿»¼ÀÂÀÃÁÀÁÂÀ¾ÄÂÁ¹¾ÀÂÀ¾¼»º¼Á¿ÀÀ¾»¿ÀÀ¿½»º½½º½Á¾ÃÁ¿¼¿À»¼ºº»¶¶·¹»¹·¹½½º»¸¸¶·¹¶¸®´´¹··º·¯±´±´¶µ°¯°³¯°¯©¬¦¥¥•ž£©°µ¬°µ¯³³²²°³³¯´±®¯�—úùøøùúùúúøíÓÞñöõëåìçñõõö÷‚ùø÷öø÷÷ö÷÷ø÷÷ø÷øø÷ø†÷ø÷ö÷öø÷ø÷öõ³íË©¡šš©´³¸¶¹µ·¹¬¸Ê¹¹ÅÀÄÌÎÎÅÈÍÎÎÊżÄÀ¾Ê½¼ÌÍ媵³œ¶ôö÷„ö÷÷øúøù—úùùøøùùúúûûüúúûûúüüûüûüúƒûúùüû‚üüýˆüüûüýýüú ý†üýüüýüýþþüüýýüýýüüýüýüüýü ýƒüýþýƒüüýü„ûüüýü„ûüüûüûˆüûûüúûúüú„ûûúúù‚úø÷õõ÷÷öõöõöø÷øúùø÷ƒö÷õö�š×Ö×Û×ÚÛ×ÖÔÈ­´ËÓÑú½ÊÏÑÔÓÓÔÖÕÔÖ×ÔÓÔÓÒ×ÔÓÒÔÕÖÓÔÖÖ×ÖÔÖÕÕÓÔÔÓÔÔÕÕרÕÖÕÕÓÔÔÐÐÎÅ¢†zx…Ž’’’“Š’¡’”žš¥§¦ ¡§¨¨¦¢š œš¤™™¦”‡ŽwŠÌÕÖÖ×ÓÔÖ×ÚÙÚØÜÛ‰ÜÛØÕ×ÙÙÜÛßÜÝÝÚÛÝßßÝÞßÞÛØÙÝÛØÜßÞÞßßÛÞÞßáÞÞãáßÞÜààÞÝâàâáààâááãáààÞÞááãáßßáâááßÞàâäààáààáÞÝâáààáßáãááâßâàáàá”ÞßÞàááâààÞßààÞÞßßÞÜÛ݆ÞàÞÝÛÚÛ¡ÜÜÚÙÚÛÚÙ×ÔÔ×ÒÒÔÓÑÓÓÒÒÕÔ×ÝØ×Ö××ÕÖÖר�©ÅÆÁÀÅÂÀꥅŒ£­«›“š‘œ¤¦­¨©­®«­®³°®¬«¬«¯¬°¬’­­°±¬«¬¬­®®«­¨¦¨©«­Ä«¬¬¯¯©¨¨§¤œzecZUelmolppruksƒsv€|~†ˆ‡„†‰Œ„ƒ}}}ˆ|{‡‡…neqmSi©®«¬°®¯­­²¥±µ´±²³¶µ­®²²³·¹¶ºº·º¹µµ¹´º·´²±±µ³¯»½º·©»º»»½¾¼¾½¶¹»½½¹´¾¾½¼¼¾Á¿ÁÃÀ¿À¾º¾¿ÁýÀÀ¼½¿µ¼¾½½¿¾ÁÁ¿¾¿¿¾¾ÁÀº¾ÅÀ¿¼¿Ã½»ºº½¾¹¸¹»¼»»¼½»¼»º¸¹¹·µ´´µ¶©·µ´³¸³°µ¶µ³³´³±¯°¬«¯«¦£©®¨¦¦¥ª°®±³²³°¯°°³°�ù‚úùø•÷êÛéööõòóòòóõõ÷÷õö÷÷ö÷‚øø÷…ø÷÷öö÷“øø÷ø÷ö÷ø÷øøöôôõ÷ø÷÷øÆ÷ö÷öð纞›™‘˜–›™ž–““ ™¢¤§¥¥¯¬­´»ºµ±ºº»À¼¬´¼Õ½§¬´¬ê÷øø÷÷õ÷øùùúùøøúùúŽøùúüúûûüúüûûüûü‡ûûùûúüùü‚ûúü‡ûüûýýüýü†ûüüýüýü„ýüýýüŒýûüüûýýûýþýüý„üýüüýü ýüýüûüüýýüüýüüýüýüüúûûüûüûùûüùûúûƒüûùû˜úûùøúùúøùúø÷÷øùø÷ôõóõöñô÷…öôõõôõö�¢Õ×ÖÙÓÓÔÒÎÁ±ÁÐÒÑÌÊÊËÍÏÏÔÔÑÒÕÓÒÔÓÔ×ÕÔôÓÕÕÓÒÒÓÒÒÔÔÕÖÔÑÒÕÓÔÔÒÐÐÒÓÕÕ×ÔÖÖÕÔÒÕÐǼ’{|{rwsyx}vsvr|}}v{ƒ„€‚‹ˆˆ—˜••–”›˜Š–¬˜‚ŠŽƒiÃÔØ×ÖÖÐÓÖÙÛÚØ×ÙÛÙÛÜÙØÚרÙÝÚÝÝÞÜ®ÞÝÞÝÜÞÜØÙÚÝÚÜÝÜÜÝÞßÛÝÛÛàÞÝáßÞßÛÞßÝÞÞÝÞÞáÝáàÜÞÝÞ‚ÝÞ߯ÝÝáãààßÝÝßâßÝàáßáÞÞâáßßááããáàâàßÜÞÜÜßßáâàÝàÝßâàßÞßàÞßÝÞÝÞÛØÝÞÛÝÛÝ„ÜÚÝÛÝ‚ØÙÜ™Ù×ÚÙÔÔÖÙÖÖÏÏÍÑÒÌÓÕÔÖÕÐÒÓÓÕ×�þÆÈÅÂý»½¸žŠ™¦ª¨§¦¦¤¥¤¥ª¬©«¯«¨­°°­­¯«­¯®«¯­®¬«°±°«ªª­¯­ªª­©¦¥©«¬«¬«¬®±¯¨®ªžfX\[RWVYY^VTYV_`\^W\abcbakklmw{sqywv|zmrxŽwbjobD±µœ®¯¯«¬¯±²³±®²´³°µ¸·²±µ³·¹¶¶»¹ºÇ¹µ·´¹µ²±²±´±³¹ºº·¸¸»¸¹¸¾¼»½½·º¸¼¼·¸¾»¹º¹»¼¼½½¼»·¼µ¼½º¿½º¿Á¼¾ÂÃÁ»»¹º¾¿¿¾À…¿¾¾ÁÁ¾”½Á¾¾½½À¼º»»À¼¹Á½¼À¾»¼œ½¾ºº»¸¹µµ´¹¹±´³´¶·º¸¶·µµ´¶³²µ™²µ·®ªª­³­§¢¤¤¥ª¥©¯°¯­©°®ª¬±�øùùúùù÷ðåëñïóô‰óõôóðôööõöõ÷ø÷ø÷ˆøø÷ùø÷øø÷ö÷¿øø÷ööõòßÖÞÜÜÏÜÝßÜçâÚÝÙÚØÉ¾ºº¾»¼¹­¯®«¯±°ª¨®ªª¬­­®²º²²¶³¦Ù÷ùø÷øùùø†÷÷ø÷øúù‰úùúùùûûüüûúüûüû‡üûûýüýýüƒýûûüˆýüüýýüüûü‡ûüüûûýüýƒüüþüýüúüýü‡ýýûüüûýü‘ûüûüýýûüûüüûüûûúúü…ûúûüûü‘ûûüûúûûüúúùúø÷øùø÷Šöôòôöôóôôòóõ� ÔÖÔÛÖÕÒÈ»ÁÉÆÍÏÏÍËÎÏÍÈÏÒÒÑÓÓÒÏÓÔÓÔÓ„ÔÕÓÕÓÔÔÕÔÕÕÓÔÕÒÒÓÒÑÇÒÒÔÕÔÔÓÔÓÒÒÐ̶°»¹½²¹º¹¶Ä¿º»¸ºµ¨œ—•š™™“ˆŠ‰†ŠŽ‰‰Œ‰‡ˆŒ‹–“Žƒ¸ÕØØ×ÖÙØÕÖÙ‘ÕÖÕØÕ×ÜÖØØ×רÝÛÚÜÝžßßÝÝÛÜÙÛÚÛÚÜÝÜÛÙÛÛÜÜÝÜÜÚÛÞÛÝßÜß‚ÞßÞŽÛÜÞßÞßßÞÞÝÞÛÜÝÞ«ßÞáÞàãáÝÞâÜÚÜÞÞàÝÞßÝÚÜßàâßààßßÞÞÝÛÛÜÝáÞßÞÜÚ݈ÜßÞààßàßÜÛŒßàÞÝßÝÞÝÜÜßÝÞžÛÚØÛÜÝÚÜÜ×Õר×ÖÔÔÖÕÔÓÒÌÐÔÐÏÐÒÏÑÔ�¿À¾ÀÀ¾¸®¡’™žœ¢¦¤¥§§¤¦œ¡¦¦§©©¦¥«®¬«¯¬§®°­¨ª­°ª¬¯®®ª©«¯¯­§§ª©ª¥¤§§ªþ¨©¬§¦¨¥¢‹†˜•ž”˜˜š§Ÿ™™”’ˆzpouwvrdijghonhilifekmlpvmpukb˜®´³±±°°«°²¯¯­§ª°®«²°±±³³®´µ°µ¸¸¶¸¶´¶²±²°¯²²¯²¯°²·¸º¸¶¹µ´¶»·¸½¸·»¹º¶´¶þº¶¶¹¶¶··º¼¼¸²³±¶¹µ·¸¹º¼¼½¿¼¸¹º²²¶»»º¾¿¼¹´º»¾Àº¹·º»¼½¹µºº¶½¼·¸»¼µ¹º·¹¹º¸¸º¹¹¸»¸¶¶º»¸¸´²µ·¹º·º¸¹¸¹·µ··¸¶·¸´±®±´¯ª«ªª¨¯¬§¤§¨ª§¬¬§©®�ø›÷öëÔàðêéñðïïððñíïððïòóñòóóñõˆòóôôõõôôõŽ÷öôóôôöõõôòóóñò“óóòîïñîòòööò÷øõöôïñóöõ£ôõñìîñïïæÒÍŹÇÛàäßãÜÓÊßà×ßÞÙÑÓÎâöø÷ø‚ùùø‚öö÷ù†øúúøúøú‚ûûú›ûûùùúüúûûùúúùüûúûùúûüùúüúüüû…úúûúûú„ùüûûúƒùúùûù‡üýûûúüüú›ûúüùûûøùùúüúûù÷øúúùøúúûüûúúùûûùùûùùúùúúùúûƒúûúûƒøùùû„úùúúùƒøúúø…ö÷÷øö÷ˆõöõòðîïíðô�½ÓÑÓÖÖÓħ³Æ¾¼ÊÊÆÆÈÅÉÆÆÇÆÄÈËÉËËÊÉÎÐÏÊËËÌÍÍÌÎÏÎÐÐÒÐÎÊÍÍÐÎÍÌËÌÌÉËÊÄËÊÄÅÇÄÊÉÏÐÌÔÓÎÓÎÈÊËÌÌÎÐÑÒÔÑÑËÇÉÎÈÉÀ©¥ •£´º½¸½¶­£»»°··²©©¦¼ÔÖÔ××Õ×ÙØ×ÖŠÕÓÔÕÔÔØ×ÖÕÙˆÜÛÛÝÚØÛÝÜ…ÛÜÚרÜ”ÚØÙØØÜÜÚÛÚÙÚÝØÚÞÚÝÞÞÛÒÚÚÙÛÙÜÛÙÛÜÜÚÛÚÚÙÛÙÜÚÜÙ×ÚØÝàÞÛÚÞÜÙÙØÜÜÝÚÝÜÖØØÛßÜÜÛÔØÚÙÙ×ÙÙÛÞÛÜÛØØÚÜÚÙØÛÙÙÝÞÜÛÙÜÜÚÛÙÜŸÝßÝÚÛÚÝÞÝÝÚÛÙØ×Ù××ÚÛÙÙ×ÚØÖÓÕÙØÕÖˆÑÓÓÎËÊÌÉÌÒ�þ»·¼»·¯š|ˆœ“‘ž œ›žœœ™˜™”›œžœ™Ÿ¥¨Ÿ¡¥£¡¡¤§££§ª¨£œŸ ¥¢žŸž¢œ›œšŸ—–š”ššŸ£Ÿª¨£¬¢ ¢£§£¥¦ª¬¬«ª£Ÿ¢¦¦£›ˆ…ƒs}–˜˜ž™š “›‘Š‹‚™¯¬­®Â¯®ª°­°®­ªª¦©ª¨©¯­­¬±±«±²²·µ²°´°³´±²±­®²²¬¯­¬±¯®¶¶³¶³¯³¶´´¶µµ·µµ³±°µ®°á¯²·¶³®­ª®°²´³²±¯°¶º·°²µ²¬±³·µº¹¹´¬´´¹ºµ´±­³º·µ°³³±¶¶²³°´²³³°²µµ²³µ¶³´¹··µµ¶µ¹·µ´²µ¶¶·¶·´µ·³³´´°µ¶³’±°®±°¯ª®¯­¨ª¨§£¢¥¡¡¨�øÅ÷öáÇÎéæßÞìßÝÝçäæììíêàÝëïóîèÕìôôñîìêðóòñííêñõõòíêèïððíééîðóïéêêæåëééçêíŒììêäïðñòðçîõö–ñïôôööõôóôóö÷øôñóô÷öôõö†ôïèíôõö‹ôö÷ö÷ø÷ö÷÷õöø…ù÷÷øøùœûùôøúúùúûúúûüûúüúúûúúûûùúùúúû‚üüû‚üûü†ûûúûúúûúûüüûýýüüûüüûüûü„ýüûûü‚ûûüýüûü‚ûûü’ýüüûûüúüüûûüûûüüûûü‚ûüû„ùúúùú„üûøøùø÷†öõõóôïéç�ðÔÓÓÕйŸ¤¾º³±Â¶²°¸´¹ÂÂľ²¯ÁÇËļ¨ÂÍÍÈÿ¾ÇÌÉÇÄ¿ÉÐÏ˾»ÄÇÆÁ¾¾ÇÊÌż¾½¹¹Á½¼»¾ÂÄÄÁÁ¿ºÇÊÉËÇ»ÆÐÒÒÓÊÆÏÐÒÒÐÏÏÐÍÑÒ×ÐÌÏÐÓÑÐÐÒ‹ÏËÀÅÌÑÕÒÐÏÒÓ«ÖÓÒÔÔÒÒÓÑÓÖÕ×ÕÖÕÔØÙÚÛÜÛÖÐÕØÛÚÛÜÚØÚÝÜÛÜÚÙÜÚØÙƒ×ØØÛÃÝÜÜÝÜÜÚÜÜÚØÚÛÜÚØÜÛÜÛÛÙÙÛÜÚÛÛÝÚÚÛÛÞÝÜÝÛÞÝÛÜÛÞÞÝÞàÝÜÚÙÞÞÝÜÛØÛÜßàÞÝÛÝßÝšÜÝÞÞÝßÞÞÝÛÞßßÝÜÜÝÛÜÝÞÞÛÜßàÝŸÜÝÜÝÚÜÛÙ×ÛÚØÝÝØÚÚÙÚØ××ÙÖÕØ××ÔÔÕÒ‚Ñ˽�þ¼½¾º°•w{—‡†š‹…Œ‹›™–“š¡˜‹{”¦¥œ˜’‘œ§ œœ—‘ž¨¨ –‘Ž˜š“Žœ¢£—ŒŒ‹”Ћޔ—“•“œ£¢¡œ›¨©¬ª¡š¦ª®°°¦§¬¬°µ±¨¡§©®­ªª®±¯±¯¢œ£®¬¬¨¤¡¢£«¨­«¨§«¬¨¨ª¤¥«®«ª¬¨©¯²²´·¸®¢«±³³´³ù´µ±¯³¯®±ª«°¯°³¯¨¯²µ³¶¹¶µ³µ´µ´µµ³­°±¯¯°³´±¬®«²²°´µ¶¶°³¸º·µ·µ¶²¶µ¹µ·»¼¸¶¼¹º¹º¼¹¹¿¿½¾¾¸¹¹ºº¸¸µ»¼½·¶·¼»»¹¸º¸¶¹»º¸»¹¹»º½º¾¼¹¸º·Ÿ¸¶´¶ºº¸¹»´µ¹¶³¶·¸³³±±²°²³°³¯ª¬¤–�Üøøùó×ÙéíéåæëóæãäÞæóóòòèÜêõ÷ôñêìö÷õïîêîùùòõñáëõöõóëëñõöõòìî÷øõðèåêíõõññèëëïóðïìïöø÷óçâôøø÷óëôøƒöðõø…÷òïöõ÷‰òô÷øø÷ôîõø˜÷öô÷úùø÷öøùøøùõõøùúùùú÷øûƒñêùû„üûüüû‡üûûüûúúûƒùøùûƒüüýüûü…ûúúøúüŒûüüýüýüýüüýýüýüýþýüýüýüüýüüýþýýü„ýüýýüýüýŽüüýüûüüûûüüúüúü„úúûüûúøøùùúø÷÷øõöòîà�ãÔÓØÐ°°À¿¸¹Áν·µ¯¹ÌÊÉɼ®¿ÏÓÍÈ¿ÁÐÒÏÆÃ½ÃÓÔÊÎÇ´ÁÐÒÑÉ¿¾ÈÍÑÏÉÁÃÓÕÎÇ»¶¾ÂÎÎÇÅ»ÀÀÇÍÆÂÁÇÐÒÓÌ»¶ÏÔÕÓÌÀÎÕÖÖÔÑÊÑÖ†ÕÓÍÈÑÐÓ¥ÌÏÕÖÖÕÎÅÎÓÙ×ÓÏÏÕØÖÔÒÑÕ×Ù××ÑÏÖØØ×ÙÙÓÕÚݹÜÛÌÁÖÛÜÞÜÝÛÜÛÛÜÛÛÜÜÝÛØØÙÙØÖÕÕÖØÙÜÝÞÞÝÝÛÝÜÙÚÝßÞÜÛÜÜÞÝÚÙÔÙÛÜÞÝÜÜÝÝÞßÝÞÞÝÝÞ›ÝáàÝÝÚÜáÞßÝÝÜßàáãàßÞÞáßàÝÞÞßà¸ßßàÞÝÜÜÞÜÜàßßÝßßàáàÞÜÝÝÜÝÞÝÛÚÝÞßÞÞÜÝÞÝÜÝÝÙÝÙÖÙÚÙØÖ×ÔÕÔÓÏdz�þ¿À¼¯ŠŒž—Œ˜©—‘Š¥¥¢›¤©¦žŽ˜¨®©›—–®³ ¦¢ˆ“¥«ª •›¡§¥›”›­¯¥š‹‡–¨¤™™‹™¢™”•žª±¯¡Œ¨³°«¥•¤°±²²¯¢©²°¯³²¥œ¨©®¯¯¨«²³²°§¡®´³°ª¡ §«´±°§¤°³³²°¨¦«°³¯¯²¦¬¹¹º··¸¢’¬³¶·¸µµ¶¸´²’±²²®««ª­¯ª¥ª­¯±µ··¶þµ³³´´µµ³¸µ±³´´¯¬ª«º·³·¸¶¸°´¹º¶·¸¶·¸ºº¹µµ»¼ºº½¼½¼¾Á½¾À¾¿Ã½Á¿À½¼¿¼¾¿ÄÀººÀ¾À½¼»½»»½¿½¾¼¿¿Á¿½ÁÀ½»¹º¹»¼¼¹½½¿Ã¾¾»º½»¼Á¿¾º¸¶µ¸·»¸µ·ºƒ¯®¨œˆ�³ù÷òÜÝóóææâíõòêàÞäô÷óòçãíôôõôîíòööóïåìõøóñôëåó÷õóðâïöŸôïð÷÷ôóòåçîöøòòíëñóööôîô÷øùõëâóø„îðùùø‘ñôùøù÷÷ôðóöö÷öóñöø¬÷ñõøùúøöõøúúùøñøùúùùøñ÷ùøùúùù÷úùùûúúùäñúùúûúû‡úüûúúûüú‘ùúúùùøùøøüûüüûûüüûƒüüûü…ûüüûûüû üû‚üûü„ûûüüý†þþýþüýüŠýüýþüüýüýûüý”üüûüüûýüüûüûùûüûûüüúü–úûûüûüûûúøùùøùøø÷÷öõöôôÞ�âÔÑ˵¶ÎÌ»»µÃÐÍ¿²¯·ÍÒÍɼ·ÃÎÎÏËÃÃËÓÑÊÅ·ÂÐÔÌÇËÀ¹ÌÑÎËÆ¶ÆÑÓÐÍÆÇÑÒÍÊɸºÅÑÔËÇÂÁÉÎÒÑÍÂÏÖÔÒÍ¿µÌÔÓÔÔÇÉÕØ××ÕÊÏ×¼ÖÔÌÉÎÒÒÓÒÍËÓ×רÓÉÏÔ×ÛÖÑÏÔÙÚ×ÓÊÖÙÙÝÚÖÊÒÙÖØØÙÖÒÙÚÜÞÝÚÖ¹ÌÛÚÛÞÚÜÛ²ÚÜÛÙÛÜÞÛÚÛØÚØØÙÖÕÓÓÛÝÞÞÜÜÛÝÜÛÜÝÝÜÞÞÝÜÝÝÚÜÛÛÙÜÜÝÜÝÞ݃ÞßÝÞÜ›ÝßÞÝÝÛÝßÞÝÝÞÞáâááàáàÞàÛàßßáß‚ÞÞà·ßßÜÝÜÝÝÞÞßßÝàÝàÞáÞàÝÚÜÞÞßÛÜÜààßßàÝÞÝÞÝÞÝÜÜÙÙÛØÚÚÙÙ×ÕÑÑÒв�þļ­’©¦‘‘™§§šˆ‡¦¯¦Ÿ‹‡•¢¥¨Ÿ—–¡©¨£™‹“¤¬¡™¡—‹ §¤ ›‰—§¨§¢˜˜ª« ›šŠ™§«¡š’“œ¡§ª£–¥­¯´¨“Ф²´²¬Ÿ£µ·µ´±¡¦°¶²­¬¨ ¤¬ª¬«¥¤¬´³³­ ¬¶´¶®¥£­»´¶´®œ®µ¶·´¯¡®µ³³´±¯§²µµº·µ®Žž®°µ¶´µ´³²±³±¬®³³°­«©®®©¬«¨¤ª¶¶µù¶µ´´²´´µ³¸¸µµ³µ­±µ±º¹´·¸µ·³µ·¹¶·¶´´µ¸¹·³´¸º·¸º¹¹ºº¿½½¾¿¿ÃÁÀÂÀÀ¾½¾¾ÂÀÃľ»À¾¾»½¼½¿¼¼¿¾¼»½¼¾½½¿¼»¸µ¶»¼¼¾¾¼¿¼¾¾¿¹º½½¾Á¿¾»¸¸¶·¹†´¶´®­ª¨‡�¦øîÚæóòåÚãäòôðêßæôö÷ôïéïõöóóêëóõõóñëëõõò«æéñóóòñêï÷÷õóîíööóóñèêïõ÷öôëíòöø÷öîí÷÷øõðæóø™÷ôò÷÷øøöïï÷ùø÷õôíóöö÷÷ôñöøƒôóøùŠöô÷øùùøñïúùŸøôñøùùøøùñõùúúûûùðáøøùúûûúûúûúûúŽüûûúùûúùúûúúùúûüûúü“ûüüûüýüüûüûûúúüûùûûüûü‡ûûúüüùúû†úüûûùúû‚üüýüŽýüüýüúüüûûüûüýü‚ûûü†úûûúúûü…úúûûüû’úûûúùøùø÷ùø÷÷ööõöôó×�þÑÆ±ÀÎ˺«·¹ËÐǼ°ºÏÑÓÌÅ¿ÇÑÑÌË¿ÀÎÐÐÌÇ¿ÁÌÍÊÉɹ»ÈÌËÇÇÀÇÑÒÐÌÆÅÑÑÌÊÈ»¿ÆÎÓÒ̾ÄÌÔÕÕÒÄÄÔÕÕÏŹÌÔÕÔÓÍÎÓÑ×ÖÑÆÇÔÚÓÓÑÎÄÍÒÒÓÓÍÊÓÙÖ×ÖÎËÕ×ÖØÓÌÔÖÂÙÙÖÉÉØØÛÚØÏËÙÜØÖÓ×ÈÑÚÜÛÝÝÖÈ´ØÛØÚÞØÚÚÙÛÙÙÚÛÛÝÚÚÜÛÛÙ×ÙÜÜÙØØÛÞÝÝÞÜÜÛÝÜÝ ÜÛÛÝÝÜÜÛÞÙÙØÞÜÚÛÛÝÞÜßßÞÞÜÝÛÜÝÖÛÝÜÝ…ÚÛÛÜÝà‡ÞßàÞÝÜÛ߯àßÞÞÝÜàÞÞßßÛÝàÝÝÞßßÚÞâßàÝßÜßÞÛÜÞÝÞàÝÜÜÞÜÜÞÞÝÛÝÞÝÚÙŠÕØÛÛØÔÖÒÐÒЯ�þ¼©’ž¨¦}‹’¥§ —†¤©­¤˜Žš¨©¢¢–¥¦¥Ÿ›””ž£›˜Š˜¡ž™›–™¥¨¦£š£§Ÿ›š“œ¤©§ž‘–¡«±¯ªœš«­°ªšŒ¤°²±­£¥²³´´¬Ÿ¬²´¬¦¥™£¬®­¨¢ ¨«±­­£¢°µ²´§Ÿ°¶œ´´±ž´´¶µ°§£³·´¯°°œ¤³´´··®›ˆ¯ž²´²±²²±±²±®¯´¯²²®¯°®¯³³±­±¶¸´´µ·¸´µ³´·¹¹´¶¶µ··»¹¶µ­³¶³´³¶¸º¸¹·¶±¯³·¹°³·¸¶µ¹¶¶µ¶¸¹·º¿ÁÀ¾Á“¿¾ÂÁÁ¿¾Â¿¸¾½º¹»º½¾½¼‚»»¼Šºº¹´´»»¼¾½º™»½¼º¹½À¾¾½¼¹´¸´¶¸³¶´´²°±­ªƒ�ÇîàíôóèÞØêõõòëççòõóöòîñõöóòñîôöõõñëíóöôðóëèíóòñðîîöøøôîðöøõòôêéòö÷÷õïíõ÷ø‰òìõ÷÷öôèíø“÷õð÷øø÷øðëôøùøöôïóõ÷„öïööø öó÷ùøøùóöúúûúöî÷ùúúùøðöùûûùø÷ì÷ùûˆùçîùúúûúûùûýûœüûúûüüûüüûûüûûüüûýüüûüûüýüûýüƒûüýû‰üûûüûüýüûüûŒüûûúúûûüûüûûýü‚ýýü”ûüûûüüýýüýüûüüýüüûüýü‰ûüúüûúúüüûúù†øù÷ø÷÷öôôé�¿Æ·ÂÌͼ°ªÀÎÏË¿¸»ËÐÌÏÇÃÊÐÒÊÉÇÂÌÓÏÌÈ¿ÁËÏÉÅÉÀºÂÊÉÇÄÂÅÑÔÒÌÆÇÒÖÐÉÌ¿¼ÊÓÜÎÃÂÎÔÖÖÓÌÁÏÒÓÒË»ÄÓÕÖÔÏÇÓÔÔÕÒÆ¿ÏÖÙÕÑÊÅËÐÒÓÔÏÇÏÒ×ÖÔÐËÓÖ×Õ×ÌÏ×ÚÚØÐÄÕÙÚÛØÕÈÔÜÜÛØÔÑÀÔÙÝÜÜÛÔ»ÆÙÛÛÚÛ²ÚÜØÙÚÛÛÝÜÛÜÝÛÙÛÝÛÜÞÞÝÝÞÜÛÜÛÛÝÝÛÚÜÜÝÞÝÛÚÝÝÜÞÝßÛÚÚÞÝÜÞÞÜÜßßÞÝÜÝÜÞÛÝŠÛÜÞÞÜÚÚÛÜÞÜÉÞßÜÜÝÝàÞÝàßÞßÞÝáÝßÞÝÚÛÜÞÞßÞßÚÜáàßÜÝÙÝÞßÞÞÝßÝÝÜÞÞÛÛÝÛÜÛÞßÝÜÜÛÚØÚ××ÖÙÖÖÕÔÓÑÒÂ�Ó¤–¦­¥”}–ª©¡“‘£¦ ¥™”¤©¢œ™•¡¨¤ž—–Ÿ¤¡™™ŒŒ–›—”“™¦ª¨Ÿ™ž¨®¥˜‘’Ÿª¨¨¤”“¥ª¯°«¡˜¤¨§¦žŠ–®æ¬¤¬²°¬«œ”¥¯²°§ž—Ÿ©°¯ª¢š©§ª¯©¢›«´³±®›¨¶¸¶²¤˜®µ³´±¦›­µµ³¯®§§±µµ³²¨Š²²±±°°±°°®«¯®¯²µ°²³´±°³µ¶¸·¸³´¶´²µ¶û¸··³´¸»·³¶¸µ·¸·º´´²··´··¸º¸µº·µ³³´´·³´³µ²´º·¸´²´µ¶·¿»¹½¿ÂÃÀ¾½¿À¾»½½¿º¼¹¶¶¸¸½¹»½º»¾»¸»ºº¼º»¾½··»º¼¼º¸¸º»¼¸¶»½¿¾¿ºº¶³µ´³±®³³¶²­ª˜�¢äòôóèÚ×èóöôñäæôööõòèïõ÷öñïïöõôòòíëô¨òóèâëòõôóîñõ÷øöîëõø÷óñììóöø÷õîçóö÷÷øöëôöõÄîîöúúùøìóøø÷÷öåò÷ùø÷öìí÷øøùöðó÷øøù÷ñ÷ùúùùöóûúûûúòöûûúûùôóúúûúùùôñùúûúƒöêùûúúûùûúûûúúûýüûûüû‹üüûûüûüûûúýüƒûüýü‡ûüüûýþýüýüûüûüûü‚ûúü†ûüûüýüý„üûüýüû„üüûûüûüˆýüûûüüûûüúüŽûüüûúùûúúüúüúúùŠøù÷øø÷ùø÷õöõó�Ù»ÉÎ˽«¨¼ËÑÎȵ¹ÎÒÐÍȺÅÏÓÑÅÄÄÎÏÎËɾÌÎÍÊɺµ¿ÊÏÊÈÃÅÏÔÔÐÂÂÑÕÒËÇÁÂÊÒÖÓϺËÑÕÓÕпÍÑÏÐÎÃÃÑÖ×ÕÒÀÉÔ¯ÒϸÊÓØ×ÔÐÀÃÒÔÓÓÒÆÌÓÕØØÓÉÔ×ÚÙØÏÍØÙÝÛØÊÐÛÜÜÛ×ÍÌÛÜÚ˜×ÌÊÚÚÜÚÛØÎ¿ÖÜÜÝÜÛÛÜÙÛÛÚÙÚܳÝÚÛÛÜÝÝÛÜÜÞÞÝØÝÜÝÞßÜÛÝÞßßÞÝÜÝÜÜßÞßÞÞàÝßßÝÞßßÜÜÞßÞÝÛÞ¢ßÝÞÜÞâßßÞÚÝÞßÜÙÜÝàßÞÝßÞßâÞßßÝÜÛÛÝÛÝÞÜÜàßàÞßÛÛÞàÝÜÞÛÞ†ÜßÞßÜßÞŽÛÝÞÞÝÙÞÞÜØÙÜÚÚ؈ÕÙØ×ÓÖÖÔÔÏ�•—«¨£“z¤®¤›ˆ§«§Ÿ˜Š™¦ú𕔢¢ ›˜Ž¢¢Ÿ œ‰ƒ£›–“˜¢¨©¨˜”¦«¬¡˜“•Ÿ¨¬§¡”‹œ©ª©ª¢¤¦£ Ÿ”£®®©¥“¡°¯¬©¥ˆ¡¨¯¯¨£“•¨®°°¦—Ÿ«ª¯¯§—©¸·µ± œ±³µ´¯œ¦µ¶´´«¡µ´±¯°®ž¯³¶°®ž­±±²²¯°³°°­«®«­²µ³°³´³´´¶¸¸µ¸³²´²­µ¶·´·¸¹µµ¸º¶µµ¶¸¶Ò¹½½¹¶·¸º¹µ´¸¹·´µµ³µ´µ´µ²¶»¹¹·µ¶µ¶»¿»¼½½ÀÀ¾»¸¾½¼¼»¸»·¸¶³¶¼»½¹º»»¼¼»¸¸¹¶¸º¿À½º¶¼»¼º¹¸™¹¼¶¶¹¸½¼½¶¶µµ´±°°¯¶´³¯³²¯¬§�½óôóè×ÓãïôóìÞåð÷øöëÞîöõôñãéô÷ôóîèèòõñïñäáíóôóñéîôö÷õïêõ÷÷õòëèó÷˜ôîäóõö÷÷õìîøöòòóèó÷ù÷öïìø™óóëíö÷ùøõîèôøù÷÷òíöøøùùôôú„ù÷ñ÷ù’ôòùúúûù÷ò÷ùúúùø÷ñøùŒú÷ãôúúûûúùùúû†úùúùûûú‰ûûüûüüûüúûüƒúüüûüˆûøûüûüûûüû‡üûûüûüüûƒúûüûüû ü„úüûûüû†üúûûúûüûüƒûûüûü„ûúúûüŒûûúûûúúüûûúúùø„÷ø÷ø÷ƒöõôóò�”ÎÐﬨ¸ÉÏËIJ¹ÉÓÔÑ¿±ÅѶʷ¾ÎÓÏËż½ÉÐËÈÈ·´ÂÊÏÎȾÇÏÓÓÏÆ¿ÐÔÕÏÊ¿¾ÍÓÖÕÎÄ·ÌÏÒÕÑÐÃÈÖÒ˾ÍÕ×ÔÑÄÂÓÔÕÏÍÂÃÑÖ××ÐÆ¼ÎÔÖÔÓËÄÑÖÙÜÚÎÑÜÜÛØÔÉÕÛÜÝÛÒÌÚÝÜÜÚÔÊÔÛÛÜØÙÔÊ×ÛÚ‡Ô¸ÏÚÜÜÝÛ¤ÜÜÛÜØØÛÚÜÜÛÝÜÛÜÝÞÝÞÞÜÝÞàßÝÜÝÜÝÞàÞÜÜáàšÞÝÚÝÝßßáÞÞßÝÝàßÝßÞÜÜÞßÞÞÝÞ݆ßÞÞÝÞâá ÞÞßâàÝßßáâàÙÞÝÞáßàßÞÝÜÙÜÜÝÝßßÞÞáß–ÞÜÞÝßÞÝßÝÝßßÝÝÞßßàÞÝÚÞß•ÞÛÝàÜÚÙÝÜÛÚÚÙÖÚÚÙØ×ÖÔÓÐ�þ«­§•ƒ~Œ ©§™‡Žž­®ª’˜¨§¤žŠ‘¢«¤ž–‹Šš¥™œˆƒ”£¤šŽš¥ª¨¤œ”§­ª§ ‘‘¥«­«¢–†ž¤ª©§¡“™«¥œœ’ ©¯¬¤••¬²¯¥£˜˜©«¯¬¤–¤«®««Ÿ˜¦­®´¯Ÿ£·º·³«œ«³´´±±¥Ÿ°¶¶µ²¦š¬¶··¯­©œ­³³²²°¨Š¢°°±²²±¯²´±±­«°¯²³³´³´´¶¹¹º¸·µ·¹´´µ¸·µº¸º¸·¹»¹·µ²¹¹¸»¹¼»º½½¹¶¸¸¶³²·¸¹¸·º¶·¸»¶µµ»¾¾½ƒ»¼½Àÿ½¾º¿¼ºÀ»¼½º¹»³·¤º¾¹¼½»»½¿½¿½¼¾»»¼ÁÀ¼½¶·¸¾½¼»¾¾¼¾¸¸»»½¹º¸·¶¶´²¶µ´´³³´®¨§�ÊôðèÝ×çóóòíààôõöôòÚçöôôîêãóöõòðçåòöòìñçÞíóôðóêìô÷õõñæò÷÷öòíèîö÷÷öðçïõö÷öôëíö®ïòëïõ÷öôñí÷øøöðíë÷ø÷øõòÞòõø÷÷óíö÷øùùõôøúùøøîóøù“÷ðöùúùú÷ðöúúùúø÷ïóùø†ùøíàùúù†øøúûùûù‡øùøùùüúû‚üüûú…ûûúüüûúûùûûúüûüûûüüúúû‡úùúøúûûú„ûüûúûü‚ûüû‹üûüûúôúüûúûú•ûüûúüüûûúùüûüüûúûúúûúû…úúùøøú‡ûûùûùúûù÷ƒøø÷ö‚õóóò�þÐÉ¿±¬¿ÎÒËö·ÐÑÔÏɯ½ÑÐÏɹÌÒÒÍǼ¹ÌÒËÄɼ°ÂÌÍÉÌÀÁÎÕÒÑ˽ÍÕÖÑÊüÆÒÕÖÒɾÈÒÓÖÕÏÁÅÕÕÒÆÉÁÇÑÔÒÏÉÃÓØ×ÒÉÃÂÓÖÙÖÑ˲ËÒÔÖÖÎÄÒÕ×ÚÛÒÍÙÝÜÛׯÐÚÝÜÝ›ÖÉÔÝÞÛÛÖÌÒÛÝÙÝ××ÇÏÜÛÙÛÜØÆ¶ÙÜ•ÛÚÚØÜÞÚÜØÚÚÙÚÛØÜÛÜÞßßÞÑßÞßàÞÝÞÝÚÜÞÞÝÜßâáààßÞÝÜÝàáààÝßàÝÞàÞßÞÝÚÛÙÛßÞÝÜÜßàáÞÝÞßáäãßßáâßÝáÝàãÞÒÜÞÝÜßàßÝÞÞÝÞ߆àÞÞßààÞ˜ÝÞÛÞàÞßàÝÞÞÜÛÛÝÞßÝÛÙÜÞÞá݈àÞÜ×ÛÚÚØÙ‡Û×ÙÙ×ÖÕÓÑ�þª¥š‡„˜¦©¦™‰Œ§©­¦ŸƒŽ§¥£›”Œ¡©ª¢˜Ž‰¥ž—›Œ~‘ž ž ’”£«©¤¡’Ÿ­­¥Ÿ–›¬¯¬¨œ–¦ª®©¢—¬ª£—›”œ¨©§¤š“©±±¬ž™–®±°¬¥ƒŸ©­®ª¡—¨ª¯²²£ž°¹·µ°¥±µµ³›«œ©µ··²¬ž¥±·³¸°©™¢³±²µ³­™ˆ¬°Ó¯±¯«³´°±­¯¯¬°°®´³´´¶µµ¹»º·º·ºµ¹¶¹·´¶µ¸½»»º¸¶µ´¶¸¹½»½º¸»¼·µµ³´²¯²¯µ¸·º»¸¹½»¶´¹»¾½¾»¼¿¾À¼¾¾¸­¾½º»¹·º¹º»¶¹·º¼»·»¾¼¿½Á•¿¼¼½½»¾¿»¼³³·½¼¾»ÁÀ¼¿¼”»»½»¸¹·¶¸·²²··´³´´µ®¨§�ìïåßÜìóõôéÞãô÷öóíåíôñíëæäïôóðïæäòõöìîéÝèòôòïéíôööõñìóö÷õóîçïôööóïãíõ÷ööóìëö÷÷òëæëóööñíçóøøõòééôøø÷õïáé÷÷øùõìóø™öðöøùùøóñøøùú÷ñòøùùø÷õð÷øùŽøõìöøøúùùöãòùúù–úûøøúøøùùúùùúøúûûùûûúúûú…ûùùúùû¤úûù÷úúùûúùúûûùûúúùùûûùøùúûúûúûûúùùûúûüûüûúûùúûúûúùúùûûú…ùúûûúû‚úûú“ùùûûúùøùùúúùûüûúûøùøŠùøùù÷÷øø÷ö÷…ööõööôò�þÆ»µ°ÅÏÐÏ¿³½Ô×ÓÍÄ»ÅÏËÆÄ½»ÈÑÏÈÉ»ºÎÔÓÄÄÀ±¿ÌÏÊÇÀÃÏÓÕÐÉÃÎÓÔÑÎúÇÐÔÕÐÆ¶ÆÓÕÖÕÎÂÂÓ×ÕËÀ¹ÂÏÓÔʼÍÖ×ÒÊ¿ÂÑ×ÙØÒÆ·ÁÔÕØÙÒÃÎØ×רÓÇÒÚÛÛÚÎËÙÛÝÛ×þÉÎÚÜÝÚØÒÌÚÚÜÙÚÙÑÄÔØÜÛÚÙÕ¼ÐÜÝÝÜÚÛÛÙÚÜ××ÛÚÚÜÚÛÛÝÝØÞßßÞÝßàÞßâÞÝÞÞÜßÝÝÛÝÝáßÞßàÜÙÝÜÝßÞßÝÞßÞÞàÝÛÝßÞÚ×ÙÞßÜÜÞàßßÞÝÞÞââàáàßÞßßàßßáàÝßÜßÂÞààáÞßâàßàÞßàÞÝÝßÞÜàßßÜÜßááÝßÞÞÝÙÜÝÜÜÞßÜÜÞÞÝÞÙÝÝÞÝÝØÖØÛÛÚØØÙ×ÙÙ×ÖØÕÑ�þ¡”Œ†œ«­¨•‡“«°®¦™Ž›¦ž–”Œž§¤ž›Œ¡¦¥™—‘Ÿ™•¡§§¥›—¡§ª¥ ‘Š–¤¬«¤š†”¤ª­¬¢”“©°«’‹”¤ª§š•ŒŸ¯°§¢‘—§°´±¤•‡¬¬®²¢’Ÿ¬¬¯¯¥˜¦²¶¶²  ±´·¶«²š£²¶´²­¥Ÿ¬®´±´¯¢—©¯±³µ²¦Œ£³²°²¯°¯®²³­«¯¬­¬°²±³²«°´µ¶´º·¸³·µ·º´²²´»º¸ˆ±±¶³µ»¸·¸ëµ´´²°²¶¶²®°¶¸¸»¸¹»»¸¶º¸ºº¼½¼»º¿¾½½»»º¶¼º¸»¼·º¸¹½¸¸··»ºº¼½¾¿¼ÀÁ¿¾¼º¼¼¸»½º·µ¸º¼½½¼¿¿ÀÁ»»¸¸¶¸º¹´³¸¸¹²²´·µ¶·´µ³¯©�òæáÛæíôõêÞäó÷õóêßèóôìæèÞìõôðììåïöóòìëÞåðóòðíéðõöõñèïöõôóïãëðõööòçæôöö÷õíåó÷ø÷îãäô÷÷óìåêöùøìáÎíö÷ø÷ñëåóøø÷øðì÷øø÷÷ïðø…ùøîöøù’óí÷øúùø÷ñôøùøù÷÷îõøˆùùøôñùúøù£øøúúûøøûùùûøûûúùøùûúùûúûùúûùúûúúûúùúˆùúúøøú÷öù‡úûûúûúúùøù„úúûúùú‡ùúúûøôúüƒûûúûúû‡úùùûúúûúˆûúûûüüúúû†úûùúûúù„ûúûùûƒúûûùø‰öö÷÷ø÷÷ø÷öƒõöõõó�þ»¶°½ÈÐÎÀ³»ÓÙÒ;´ÀÏÐÄ»½µÇÑÐÉÃÁ»ÉÕÐÌÿ±ºËÏËǾÈÒÖÓȾÇÔÓÐÌÆ¸ÀÊÒÓÓÌ»¼ÎÔÕÖÐùÏÖ×ѵ¹Í×ÕθÀÐÖÕñ¢ÆÔÖØÓÊ¿ºÏרÖÕÇÂÔÙØÖÔÇÊÖØÚÚÖÅÓØÜÜØÏþÃÕÛÝÝÙÖËÒÛÜÛØÕÖÆÑÖ×ÝÙØ×ÏÍÛÝÚÛÜÙØØÚÚÝÖÖÝÚÛÞÚÜÞÝÛØÝÞÝÜÝÞáÞßßÛÛÞÞÝàÞÝÞÞÜßÞÜÝÝÛÚÝרÜÜÞÝÜÜßÞÝÜÚÜÜÛØÚÛÝÞÞÝÞàÞÝÜÞÜÞáàÞßàØÒÜàáÞàáßààÞßÂÞßßáÞßáàßßÞÞáÞÛÝÞÜÜÞßÞÜÞßàßÞßßÞÜÛÝÞÛÜßßÜÞÞÜÝÙÙÞÝÜÚÛÕÖØÙÚÚØ××Ö××ÖÖ××Ó�þ“‡“Ÿ­®˜‰”¯²«¦•‰•¨¨—ŽŠ›ª§˜–©¡Ÿ—’‚ž¤Ÿš“œ¥©¥™›©©¥¡™†‘›¦«¨žŒ¡ª«¬¥”‹£°´¦†Š¥­¬ ’†¥°«™†wœ¬®±«œ¡³°¯¬˜“©­¬®¦“œ®°´´©•©²·´¯ þ”­¶¸±¯©œ§±°²®¬ª—£¬­²²³±£¢´·²®²®®¬¯¶¹®­³®¯±¯³³±¯¬¯¶¶³²´·µ¹¸µ°µµ·º¶³´¶¹·º¶¸·²µ·­°··¹¸¶¹¸´³³²²¶µ³¶³¶¸º¹¶·¸·¹ºº¸·¸»¼¼´«»¾½¼½¼º¼»»¸–½¿½¼·¸¼º¹¹º½½¼½¼½À½¾¿½¼‹¾¿»»½¹·¹º¾½¿›À¿À¾À¼º¸··¼¸­°¸¸·³µ·¶´··³¶µ¶«�­ÛÝìñòóéÔïöõôíáÙìõóèâáßðöóðçæâíõõííêßëòõôòéåîñð‘äìòõöðîçêòõöôòäçòöæôïáï÷øóíäÛíö÷ôëâåð÷öòÝ›Ñô÷÷öòêàíöøø÷ñëôöøøöðé÷øù÷øïóøøû÷öìñ÷ùúøöòóøùù÷öõôïö÷øùøø÷íøúùùøù÷ô÷øúùùúøùøúøøù‡úùùúùùûúûûúûùùúúøúùùúúùùúùùúùøùùúúùûûúùƒøøùú•ùúúùúùúúùøúûûùøúúûûüûüŽûúûûúûúùúúùúúûúüûúúûùûûùúûúøù…úûùúúûùø‚÷öø÷…öõõöõôò�þ¯±ÂÊÌÍ¿ªÈÔÕÐÆµ¬ÃÓÍÀ¶´³ËÕÏȼºµÆÑÒÆÅÀ±ÁÍÑÎ˽ºÄÊËÉɸÄÍÑÒÊÆº¿ËÓÓÏʹ¼ÌÑÒÒ͵ÇÕÖη®ÃÑÔο´¹ÉÓÓͲp¨ÐÓÕÓË¿±ÅÔ×ÙÔÇÀÌÓÚ×ÒÇ¿ÖÚÙ×ÖÅÌØØÝÖÑÁ£ËØÝÜÚÕÌÍÙÚÚÙÔÓÏÈÒÔØÛÙÙÕÃØÛÛÙÜÚÓÏÕÖÙØ‰×ØØÜÚÚÛÛÚÜÛݧÞÝÜÜÝÜÞÞÜÝÜÜÝÜÛÜÞÝÚÜÜÛÚÛÞÞÚÛÞÞÜÛÙÙÚØØÛÝÞ†ÝÝàÝßÞÜßÝÜÞÞØ×ÜÝàÞßßáààÞ ÝàÞÝÞÞßàßÝÜßÝÛÛÞàßÝÞßÝÝÞßÜÝÚÚÞÝÛÜ›ÝÝÛØÙÖÛÞÜÚÚØÙÖÙÙÚÙØÕר×ÔÖÖØÕÒ�¬†‰œ¥¦§–€£±­¨žˆ~™«§—‹ˆŠ¤«§ŸŽŽ‹ª¨šš“˜¦§¤žŒ‹šŸõ™ˆ—¡¦©ž–Œ‘Ÿ¦¨¦ž‹‘¡¦®© •„𫮢‘†–ª¬¢‘…Šž¬¨Ÿ‡I~¤­«©ž‘ƒœ«²¯§›’¢¬±®©”Ь²¯°¯•¡²¶º«¥‘ž²¸·®©Ÿ¡¯±³¯§¨¡˜£«®³²²«›°¶µ³°¯§¤©¬¶µ°°­±¯‰­­±±µ³³°¶¸á·¹¸´³µ·¶±³¶·¸¼·¶¶·¹¶´µ³¶»¹³¸¼¶µµ²±´²¶¹¹º¹·º¸·´´¹¶·¶´¶¸»»·µºº½º½¼¼¾¿¶¶»¼»¾¹¸µ¸º¸º¼¿¼»¼¼»½¾¼¼º½½¿¿½¸£µ¸¼¾½¼»½ÀÀ»¹¼¾¼º´¶¼³±¯µ¶··»¹µ´¸·´¹·¶ª�ëâêñôïâÙêöõòíàÔæòôîáÞÜéõôðèãàêðôòçìßæñôõñîäðòòñîèæôõöôðééòööõðèÙðö÷÷ôíãêõöôíåÞéðõôíåáîõ÷ôïäÃîõ÷öîêçëõøøöóéò÷ø¡ôëòù÷ø÷öìöøøù÷òìôùùúùõîöøùùø÷öîô÷øƒñòøùƒø÷öøùø‚ùøùŽúùúúùùúúûùúùûûù”úøûúùûûúúùúùúûûúùûûúû†úûúùúùû™úûúùûúùúúùúùûùùúûúùúùúûûüû„úøúúùúû‚úùûŽúøúûúûúùûúúùùøùú‚ùúû†øùø÷õõ÷ø‚ööõöó�þ¶ÀÉÎǸ¯ÄÕÒÎŵ¨¼ÌÐÆµ°®ÀÎÎË¿·µÁÊÏ̼¿²ºËÐÑÉĶÈÌËÊŽ¹ÎÒÒÎÈ¿¼ÉÐÔÒɽ­ÊÑÓÓζÀÐÓÐ÷¯½ÈÑÏÁ·±ÃÑÕÏȹ–ÅÑÕÒÆ¿¹ÀÏÔ×Ô̽ÌÔ×ÙÕÍ¿ÌÙ××ÕÑÃÒØÙÛÖÌØÒÛÛÚØÒÆÔÛÚÙØÕÕÆÎÓÕ×ר×ÌËÚ‡ÖÜ×ÓÓÙÖ؆Õ×רÛÛÚÙÜ…ÙÛÚÛÚܤÛÝÛÚÚÜÜÚÝÛÛÝÜÛÜÚÜØÝàßÜÜßÞÜÛÛÞÛÜÜÚÛØÜÝ´ÞÞÛàßÛÜÜÚÛÛÞÞÙÜÝÜÛÝÚÛÜÞÞßÝÜÜÛÝÜÞÛÜÞÝÜÞßßàÜÝÝÞÜÛÛÜàÞÜÝšÜÞÛÛ×ÛÞÛÜÜÚÝÛÚÝÙÛÛÜÞÙÚØÕÖÓ×†ØØÓÖÕÚ×Ñ�þ›§¬£‘†°®§œ‹z”¥«ž‰„™­©£”‰‰˜¢©¢“—ˆŒ ¨§Ÿ–ŠŸ¢¢ šŽŽ£¨©¤›Ÿ¨ª¦Ÿ¡®­¯¦”‡”§¬¦“…’ ©¦”‰…™¨®¡™Žm›¦°¦š‰“¬²±ªŸ‘Ÿ®³³­¡Œž²®«­§—¯µ´´« –¬§³µµ®£–©±´µ°ª©–¡§¯°±±° ¥³¶µ´³¬¦¨¯±³³®®°¬¬±²±¯ª³´´³³±·º·µ´··³²±´µ²´¸¶º»¸¸¶¸¹º»»µ¶¼¼¶¹½»¶¹·®º»º½º·¶Àº±´·³¶µ·ºµ·½»¸¼»¼½½¾¼¾¿¶²·»ºº¸¸·º¼¹¼½¿½²¼º½»½½¼À¿¿½¼»¹¹¸½½¼¾ºº»¿À½º»Á¿¼²´¹±­¯·´¶º¾¸µ³¹´³¶º¸®�±éðõîßÕéöõðìàÍè÷ôñâÜÙèõõðéäÞìõóïåãÞäîôóìçàð÷õóïéäñöÃñìåò÷÷öòëäïööõòîææòõñêç×âïöòêçÙèòöõîíâëô÷÷ôíáèõø÷÷ôëîöøù÷öíî÷øø÷ôîõø…÷öîô÷ø”ñð÷÷ø÷÷øòñö÷÷ø÷øöíøøùøù…úùøøúùœúùúøùøøûûùûùúùúúùúùúúùûúùúúüúˆüüûùüúûøú‚ûûú‡ùøúúùùúù‹úûúûûúúûúûûú„ùúúùøˆùùúûùúøøù‰úùúùúûúûûùøùúù†úùúøùúù‡ø÷ø÷ö÷ø÷†ø÷øöõôöô�þ¿ÉÏǶ«ÂÓÑËô¤¾ÐÏÉ·®¬¿ÐÏÆ½·²ÄÐÌŹ¶°¶ÄÒÍû±ÆÒÐÍÄ¿ºËÒÒÑÈÀºËÑÒÒÌÁ¸ÆÒÒÑÍǺ»ËÏÉÀ»¨´ÅÑÌ¿¸©ºËÑÐÆÂ¶ÀÎÔÔÐò¼ÏÖÓÕÌ¿ÄÔ×ÙÖÒÃÄÔ×ÖÕÐÄÐÖÙÙ×ÒÆÐŠÔרÖÔÉÉÖÙØÕ´ÌÉÕÖÕÖÖØÓÇÙÙÛÙ×ÚØ×ÙÛÙÛÛØ×ÛÙÙÝÛÚÚÛÙÜÜÚÙÛÙØÛÝÞÜØÜÛÜÛÛÜÛŽÝÝÙÛÚÝÜÝÞßÝààÝÜÝÚÛÜÝÛØÝÞÝÝÞÚÙÜÝÜÚÜØÚÙÜÞÚÝÝÜÜÝ¡ÜÞÜÞÝÜÛÜÛÛÜÚÚÛÛÙÙÜÞÚÕÛÝÛÜÚÜÝÞÜÜÚÜÛ‡ÙÚÜÛÝÝÜÝ†ÞØÙÜØÛÜ“ÚØÖÕØ×ÖÚÙÖÖÙØÙ×ÕÕÔÖØÒ�þ™¤­¥‡ ´²¨š‰{™±¬§‚€—ª¬ –Š›©¤¡‹ƒ‰™¨§˜‘‡ ¯©¢›’ŽŸ¨ª©œ‘Œž¨¬©ž•Œ›¬¯ª¦Œ¢§ •x‰ž©¢–‹{Ž¡¥¢–‘‹˜¥ª®£—„Œ¤¶±­¡“—­±³­§–•­±¯ª¤”¤³µ¯«¦™¥þ«±±¯¨™œ®±³²®¬ œ«ª®²±°ªŸ´³µ´¶µ°­³··³³¯¯·±¯±³²®´³´µ´±³°µ»¶µ¸µ´³µ±±·µ´¸´ººµ¹¹»¹¹º¼·¸ºº¶»¹¹µº»º¸¹»¼»¾»´²»»²´¸¸¹¸¼¼µµ¼»º¼¿½¾¼º»¼¼¸¶·¼¸¶¶µ¶½¼¸º¹µ¼¾¹°¼¾»½¾¿¼»º»º¸»»ÀÀ¿Ã¹»¼¿¿¹¼»½º¾¶µ¹´±´»º¹º»µ¶²´±´µ¹·°�ðëðíÝÓçõõóéàÔäôõóèÝÙîõóîêãÜèñóðéäÜáëóõîåàëõöóðèèôôöõòéâðööôòñæìóõöñêéãïóñêèÜÚìïñêæÖáïõöñîâéó÷÷ôðæßïö÷öõíéô÷ø÷õóìó÷Œõðï÷÷ø÷øðïôø÷ƒõîöø÷‚ìô÷ˆøïòø÷øúùøùúùøùøùøøùøúùøùûúù„øùùúù‰úúùúùùúûùûúûú„ùùúûúù„úùøøù‡úûøúúùúûŽúùûùùøúø÷ùùúùùú“ùøúùùûùøúûúùøö÷÷øùúùŒúúù÷øøùùøùùø÷øøö÷÷öø÷öõööõõó�öÄÈijªÀÒÒÍ´ª½ÎÏÍ¿°¯ÆÑÐÆÁ¶°ÀËÎȾ·®µÃÍÒÆ¹´ÂÑÒÍÇ»¿ÏÑÒÐʽµÊÒÓÏÊÆ¹ÃÏÓÒËÁ¾·ÇÍÉ¿¼°­ÂÈË¿¸©²ÅÑÐÈö¿ËÔÕÐȺ³ÉÓÖÓÐþÏרÕÑÌÂÌÔÕÔÑÇÅÖ–ÕÖÉÉÑÕ×ÕÓÏÅÒ×ÙÖÔÔÒÄÐÕÖÕ§ØÊÍÚØÛÚרØÙÚÛÙÚÙØÙÛÛÚÛÙØÙÛÛÙÛØÙÚÚÛÜÜÝÝÚ܉ÚÛÝÞÚÛÛÝÞÜ‹ÝÝÞÝÞÞáàÝÝÜݪÜÝÝÚÚàßÛßÜÝÜÝÜÛÙÚÜÜÚÜÝÜÝÝÜÜÝÝßßÝÝÞÞÜÚÚÜÛÜÜÛŠÙÚÝÝÜÙÜÝÛßÜŒßÝÜØÖ×ÚÜÛÜÝßÝ”ÞÜÝÞÞÚÛÜÙÜÜÛÝÜרÜÛØÙÚˆÙÛØ××ÔÕÖ×Ò�þœ£ Œ™­®¬›ˆ~•«­©—‡ƒ«¨ž—Œ…•¡§ž—Š‚‰–¤®ž‹ˆ›®®£˜Œ“¥¥¨§ž†š¥©¨ž•Š•£©¨¡”Žˆš¤Ÿ’|—¡žŠzƒ™¥¡–“†”§¯¬¦Œ…›ª±©¤”‘£¬®«¦¡“ž¬®¬¦™’«¯¯­©›š¤Æ«¯®«¢•¨°³¯ª«ª›¥©ª«±®­Ÿ¦³²±²µµ²±³´³²²¯¯´°¯±¯¬¯²³²²±°±±³¶´¶¸¶µ´µ°°µ´³µ³·¸·…¹º¹¹»¸²¹·¸»»¹µ¸¾»¸º¹µµ¹¸²¯´·¸º¼º±³··ºº»¼¾¾»¸½»¶µ¹¶¯µ¶·¶¹¹·µ½½µ¸¹·¾»¼»¶°³´¸»º¼ºº¼¿À¹¸»¿¾µ½¹»¼½¾½¸·º·»½º·¶±¸±±²µµ³³­�öñíÜÖéöôñëßÖãóòîçÞÔéõôíèæÝæñòðëçßßéòôîçØëõõóðëãòöõôñë×ìõööòéääòõöôêãÚêóòëæâØêðòêèÝàèòöôîçãó÷÷õðêßíö÷öñóæðøøöõõëïö÷öõóíò÷›ôëôõø÷ööíð÷ùù÷ö÷ðïöõö÷ø÷õíöøù‚øø÷…ùøøúùø‚ùùøù…øúùùúù†úùúùùúùƒúûùû’ùùûúøûúûùúûúûúûøùúù‘ûúùúùøùú÷øúùûúûúûú‰÷ùù÷úøùúúùú„øøûúùø÷÷öøúøùúøøùùøøùø‰ùøøù÷ø÷ö÷öƒõõôõó�þËı«ÃÕÓÌô©ºÑÎǽ°¨ÂÒÏÅ¿»±ºÊËÈÀ½³²¿ÎÐǽ¬ÂÑÑÌÉÀ·ÍÒÒÎÉÀªÁÐÔÔÍ¿·ºÍÒÕÎÀ·­ÂÎÌÁºµª¾ÊË¿º¯²½ÌÓϹ·ÍÒÕÒÇ¿²ÆÔØÖÍ˹ÈÕ×ÓÎÏÁÈÒÖÔÐÊÂÍÖÕÓÔÐÁÒÓ¢Ú×ÓÑÂÊÕØÚÔÒÕÈÉÔÒÑÔÕÕÑÅÕÙÚÚØ×רÙÙØÖ׋ÚÛÜÛÙØÖØÚÚØÙŽØÜÜßÛÙÝÞÝÝÜÜÝÝÜ¡ßÜÜÝÜÚÝÝÞßàßÝßÝÝÞÝÜÝßÜÝÜàÞÛßÝÝÞÞÜÛ¬ßÝÛÝÚÝÞÞ×ÙÜÜßÞÝÝßÝÞÜÕÚÛÚÚÛÛÞÝÚÛÝÝÜÜÞÜÞÜÜÝÞÝÙÚŠÜÜÛÞßÛÛÝÞÛÝÛààÞÜÚÛÞÛÙÜÝÜÚÚÝÜ‡ÛØÖÚÕ×ÕÖÑ�þ¤ž‹„—¬ª¢š‰©¨ •‡œ¬©œ‘ˆ” ¡—…„“¦©Ÿ’{•««¡›‘‡£«§¤œ{“¥¨§¡Žƒ‹¡©©¡†}–¥¡“‹†{Žž¢”ˆ€„Ÿ¥¢ˆ‡£°°©™ƒšª®©žžŒ¨§¦¥ ’™¥«©¦œ­®«¬¤”¡¥®¬§¦•¬²²ª§¨œ ¨¢¤«±­£™­±²°²²³²œ¬®°ª®­¯±°­«¯°³°¯±²²³²¶µ¸ºµµ´µþ²²´²µ¶¶¹·µ´¹¼»º¼¹ºº¹¸¼¹µ¼¼¸¶¹¾»¹»º³¸··µµ³º»·º·´¶·±´¸»¼¼¾¼¼»½¶³·´­²³µº»µ´·¹¼¾½·º¹¸»º»¼·³´µ¹½¶¸»¶·º»µ¶¹½½»¿¼½»»Á¾½½¿»º½»·µ²·³°¶²‚²°³¬�ÒêáÖèðññèßÖæñóñåÙÒíóôðèãàéïñîêéáßåðòîêÞßòõòðîãìôõõðëÝâôõóôíãÝïõöôêæÙèôóìéçÕßëóìçàÞéóÀìäàèôööïìàæó÷÷ôðëëõööõôðïôö÷ôòïðö÷õööìïö÷øöõòëôøùøö÷õéôöö÷øøöïõ÷øƒ÷øùø†÷øùøùøù‹øùùøùøùøùøøùø¢ù÷øùøùùúúùùúùúûùùúùúùûùúùûúùùøúùúûùŠøøùøùúùøùøùˆøøùùúúùùú‰øùø÷öùø÷øù„øøúúù‹øùøøùøùø÷øùø„÷øø÷ùƒ÷øùø‹÷÷õö÷÷ööõöõô�þÁ·¬ÂÍÍÎÀ¶«ºÉÑÍ»­¦ÅÏÑÊ¿¸´¿ÇËÇÀ¾µ³ºÉÍÇ¿±µËÒËÇÄ·ÄÑÒÏÈ¿®µÌÐÏÌö°ÉÓÓÏÀ¹¬¿ÏÍý»¨±ÂÍÁ¸±±ÀÍÎÎ÷³¾ÎÓÓÈÁ±»ÏÕ×ÒÈ¿ÀÎÓÓÑÏÉÉÐÔÕÏÊÅÈÔ×ÓÓÒÂÉÕר×ÔÒÊÁÑØØÖÓÕÑÁÐÔÒÔÖÖÒÆÑרÚÚ×ÖÙÙØ××ÖÚØØÛÜÞܸÚÛØÙØØÜÜÚÛÜÝÚÙÚÞÜÜÛÝàÚÛÞÜÛÞÜÝÜÞÜÝÜÞßßÝÞÞßáÝàßÞÞÙÝÜßÞÜÝÜÜÝ›ÛÝßÛÛÝÚÛÞÝØÚÜÜÞÝÝÞÛÛÞÜÛÙØ×ÚÛ†ÞÝÜÝÛÚܱÛÜÝÝÚÚÞÞÜÜÝßÛÜÜÚÚÜÛÙÚÙÜÜÝÜÝÚÖÝÝÜÚÜÜÛÚÛÜÝ×ÙÚÚØÚØÚÖÕÓ�þš„š¦§§—‰’¡¨£‘…€Ÿª«Ÿ‘‰‡—£Ÿš–”‰‡‹ž¥œ’ˆŒ¡©£š˜Š–©«¨ ”†Ÿ¥£¢—†›«­¡‘ˆ~”§¥•Ž|…• ”‰†”¢¢¤—†‚¤­¬›‘‚¨¯­¤›‘’¤¨¦¤£™œ¤¨¨¢ž—˜§®©©ª•œ§¬œ®ª¦œ“¦±±¬«ª£“¦ª«ª­¯«˜©±°°±¯¯°‰±®«®±«­¯³²ˆ¯¯±³­®´³²Æµ´µ¶¸³´µµ¸°³¶³²¶¸»··µ¸½¾»»¹ºº¸¼½¼·½¸¶¸¹»·º½¹µºµ¶¹¶·¾»µ¹·¶»¹¶¸¸»¼¾½¿¿»»¹‡­«²¶µ¹»¹ªº½½¼·»º»½º¸½º¼º»¼¼µº½µµ¹¹µ¶´¹¹º¼½Á¸¼Â¾ÃÀ¼»Š¸²¶¸¶³·´µ²±­�ÚÝæïñîëáÖæòõíèØÍâõóðêäàçìñðëëâôëõðåÞßïóôïïåçïóóñìåÛìôõòì娿ôöóìäÙÞòõîåêÛÛâîîäãÔâòõôîæÙèíôöòèÞÝîõ÷÷òïåñõ÷õõôîôö÷öõðëóö÷ööñêõö÷÷õôæïõøø÷ööññõ÷÷ø÷÷óë÷ø÷ø…ùøù÷ùø÷ùøø÷øøùøùøùøùùøù‘øùùúùøùúùúûúúûúùûùúúùùøúùúùùøúúù‚ø÷ù‚øøù„øùøøùúø…ö÷øùùøù„øøùúùø‰ùùøùø÷øùùøƒõ÷ø÷ø÷ˆøùøø÷÷øø÷øöôõô�þ¯´¾ËËÇÄ·­½ÌÏÆ¾¬¡¸ÐÐ˸´½ÃÊÉÂÀµ¶¶ÃÐÈ»±±ÅÍÐÇź¼ÈÎÐÊ·­ÂÑÑÌÁ¸«»ÏÒÎÁ·¬³ÌÏŸ½®®¸ÅŶ´¦¶ÌÑÍź«¼ÃÐÓ;²¯ÄÒÕÔÌŹÊÒÕÑÑÐÇÏÒÕÓÐÉÁÍÕÖÔÓÊÃÓÖÙ˜ÖÒϼÇÔØØÖÔÔÌËÒÕÔÖ×ÖÍÃ×ÙÙÚŒ×ÚØÙÜÛÙÜÛÛÚÚÛ´ÜÛÙÖÙØÙÜÛÜÛÞÜÛÙÛÜÜÝÜÞßÙÛÝÛÙÙÜÝÜÞÞÝÝÞààßÜÛÝßÝÞÝÛßÙÝÝÞÝ ÜÛÝÞàßÚÜÝÛÛÞÛÜÜÝÚÚÛÛÝßÞÝØÙÞÜÝØÖÚÛÝܨÝÜÛÜÞÜÜÛÝÜÚÜÝÝÞÛÞÞÛÜÙÚÛÙרØÔØÛÛ×ÛÚÙÜÝØÚÛÙŒÜÜÛÛÙÚÛÙÚÚÙ×ÕÒ�þ‡—¢§¢ž‚”¥¬—‚y’©§£šŠ…› Ÿ—“‰‹Œ—«šŒƒ‹¡¥£š˜Ž‘§©¤™Œ€“¤¢ –Š|‹¥¬¤‰|†¢§šŠŒ„Œ™˜ˆ‚x¡¥¤œ‹{Ž™¥¨¤ƒ™®°ªž—Œ§¬§§¤™¥¨¨££œŸ¬«¨©¢–¤©°Ç¬¨¥š§°°®­§œ¦¯±°°±£™²²±¯°°¯±¯±´±°±°¯®°µ±²´±«°±®¯´²²³µµ¶´µ¸¶¹¹¸º´¶·¹´²·º„¹»¿¿½½º·¶º½¼¸¶¹²¸º½¹½½¹¶º·¸º³·¾ºµ¹··º¸½½ºº½Á¾¿½¸»¹¸·¯±µ¶»¼»º¼º¼¼ºº¹»¯¿ºº¿¼¾¼¸½»·¼¾¹¶¶·º·®³·»¸»»¹»Â¾Â¾Â¼ºº½¸¸º»¶¶¼¸µ²³®�íÖëñîíèæÛçòòíÞàÌÚéñïêæÞèìîïìèàÝáçðïç×ÝîóòòïææîòóñïåÜèòñòïåÕãòõòêçßÙêîìççÙÙèïîèäØäðõòíëÞàïõôñêãÔçó÷öòîäïõöõóóèðö£òóëðóö÷öóëò÷÷öõóíëóö÷ø÷÷óìõö÷øø÷÷íôøùøù÷÷ø÷ø÷øøùó÷õøù‚øøù’øùøùúùùøùùúùûúùùúûù…øúøúø ùøù‘úùøøùøøùøùøùùúùøùøùø÷ø…÷øúø÷ø‚ù÷øƒùøø÷ø÷ö÷÷ø÷÷øø÷÷ö÷÷ø÷öõöõò�´®ÄÊÉÅ¿º°¾ËÎIJ´¢­½ÌÈ»°¾ÂÅÈľ´¯µ¾ÈǼ«°ÅÍÌÊÇ»»ÇËÌÌǹ°¿Ëöǹ¦¸ÌÑÌÀº±­ÀÇÁ»º¬­¾Èƾ¶ª·ÉÒÎÃÀ±³ÆÏÏËÁ·§ºÌÕÓÌÆ¶ÆÑÓÒÎÍ¿ÉÑÔÒÌÌÁÊÐÕÔÓÎÁÎ××ÕÒÐÆÁÍÕרÖÕÌÄÒÔÖØÕÕÔÄÎÙÚÛØÚÛÚÙÙÜÝÜÙÛØÙÚÙÚØØÚÙÐÔÓÚ…ÛÜÝÜÜÝ‚ÜÞÛ„ÚÜÛÜÝ—ÜÜßÜÛÝÜßÝÝÞÚÜÛÝÙÚÜßÚÜÝßÝÜÛÝÝßßÜÛÝÜÜÝÙÛ…ÜÛÛÜÛܰÝÛÜÛÜÚÚÝÚÚÙÛÚØÙÛÝÞÜÝÝÛÛÜÜØ×ÚÚØÛÚÝÜÛÜÚ֨רÙÙÔ×ÚÚ×Ú“ÛØÙÚ××ÙÝÜÛÜØÖØØÙØÚÙÔÏ�þ„¢¥ Ÿ”‚”¤¤ˆŽzˆ˜¢Ÿš‘‚”™žš˜“†‚Š–žžz„ž§¢š—ޤ£¡œŒ‚“¡–‰vŠŸ§£•‹ƒ|‘›“Œ~‚’ž†xŠž¦ –’ƒ›¥¤’‰yŒ¡®©Ÿ–ˆ–¢¦¥£¢‘ž§ª¥¢’˜¢¬¨¨¡’Ÿ¨¬«±¦£˜“ ¨°¯®«ž—§©±³±°¯™©´²²®°²±°°²´³²±­°±±´¬®±®£¬ª³²³ƒ´µ¹·‘µ¸¹º¹¶¹µ¹º¸¸¹¹»º»¾½¼¸¶µ·¶º¶¹±´º½»¾¼ºº¼µ·¾¸º¼¹¹¸´´µ³¶¹¸º¼¿»½¾º»º¸¹ºº¸¶¶¸·µ¸¹¶¸»¸¹·œ¾¸·¼»º½¹½ºº»··µ²³¶º·´·¸¶¸¸µº¾¼¾»¸¸¹¹º¹¸µ·¼¸º¶µ°�þíóñðèÞÙèíðëßÕÌ×ííììåØãðñíééßÜæíñîéÚÕîôôòòéåîóòîêéßéòòðíêÚÚðõôîèà×âêêáæáÙçïóìèÒÞíööïêàÞéñóðìêàßîõöóïàçôöõóðéèô÷öóòéêôõ÷õõêîõ÷÷õ”öôçôöø÷÷öôåïö÷øø÷÷ñí÷ƒø÷÷ø‚ùùøŠùø÷öøø÷ø÷ôøùø‚ùøùúùŒøøúùúù÷øùùúúù‡úøùúùøúù‡úùúùøùúù øŒùøøùøøùùúøøùøˆùùø÷øø÷÷øˆ÷ùø÷÷øøùø÷ø÷÷ö÷÷øø÷öö÷÷ö÷ö÷ö‰÷÷ö÷÷öõõööð�þÇÍËËÀ±¬¾ÅÊò§¢­ÃÃÅĹ«·ÈÉþ¿²¯¼ÅÉÆ½¬§ÄÐÐÌÉ¿»ÆÎÌÆÀ¼²¾ÉËȽ­°ÉÏÎÅ»²©¶¾¾²¸²«»ÆË¼¤¯ÂÑÑȾ²±¼ÈÍÈÂÁ³±ÅÑÓÍȵºÌÒÒÍȾ½ÐÔÔÌʾ¿ÑÔÔÐÑÀÄÏÕÕÑÀÓϾÍÒØÖÕÕйÈÒÖ×ÚÕÓÉÄÖÙØÚÖÕ×ÚÙÚÜÜÛØÙÙØÚ×ÙÖØØÖÖÕÒÙÚÙÛÜÛÛÙÛÞÞÝÝÜÚÚÛÜ©ÝÜÛØÝÛÜÙÚÝÛÛÞÙÜÛÜÚ×ÝÞÜÜÛÞÜÝÛÚÚÛÛÝÝÜÚÙØØÛÛÚ˜ÙØÚÜÛÚÚÜÛØÛÚÜÜØÛÛÚÖÛÚ×ÕÙÜÚÚØØ×Ø×ÙÙØÙØÙÛ¢×ÙÖØ××ÓØÜØÖÖÙ××ÙØÕ×ÖרÜÛÙÙ×ÓÔ××ÕÖØÔÍ�þ «£¡—„‘š¢˜‰|z‡œœšŽ~ŠŸ¡™‘”†ƒœ¡š’~z™¨©¡˜Žš¥¥œ’‚’¡ ž–Ž}›¤¥™†{…Ž’†Œ…€›¡š’t”¦§›’ƒŒœ¡Ÿ–’†„˜¥¨¡˜†‹ž¨¦ ›ŽŽ£«¬¢œ‘¡¤ª¥¦”–Ÿ©¬§”¨¢ ª°®©©£Šœ§­³³¯«Ÿ™±‚®®²Ë±±²³²±°°²±°©®¯­®­¨µ´´·µ´´µµº·¸·µ·º¸µ·¶¹º¹º·µ¸¹»¾½½¼½½··´´¶¹··µ¶¹½¸½¼º¼¼¸¹¼¹¸Õº¶´µ³±´µ·º¼¹º¼Á¼»º¹º·º¼·´¶µ³µ¸µº»¸µ¶´µ½·µ¹¹¼¼½½»¼º¹´¶²²¯·¹º¸³´µ·µµ·º¹µ¹º¹¹¶¸º»¶¶¼¼µ¼¸´¬�ôôðêèÛÏâêêéâ×ÇÛíðíëæÙáêïïåäà×åðòïëרäðóïïääíôòîééÛåðóôíéÚÝîôõìååÓßéëèäãÝáâëêèÜÞëðôòëèÝêéñòïëåãèôöôñåÞó÷÷ôóîãñöøöòíÞîõö‹ñæó÷÷öõöêëö÷„ëåôö÷„õôêõø‚÷÷ø‚ùøù†÷ø÷øø÷ ø‘ùùøúùùúù÷ùøùøùøùûùŠúûùøùúúùúûùŒøùùúùùøùùøùùøùø÷øø÷øøùöõ÷øùúù‚øúøùø÷ø÷øƒ÷øùø„ùøøùø÷‘ö÷ø÷÷öõö÷ööø÷ö÷÷ø÷öó�þÏÊÃÁ±£¹ÂÁ¿¶ª±ÅÈÄÁº«´¿Çȸ¶³©¹ÉÊÇ¿©ª¸ÊÍÊÆ¸¹ÅÎÌÆ½»­¸ÇÌÌļ©°ÆÎÎÀ·¶§³½À»µ´¯´¶Á¿¼®±¿ÅÍÊ¿¹®¾¼ÈÊÄ¿¹¶½ÎÐÍɹ²ÌÔÓÎËöÉÓ×ÒËñÆÒÔÓÑÊ»ÍÓÕÔЯÒÁÅÓÕÙÕÔÓ¹ÎÒÕÖÖÒÌ¿Ñ×ÙØØÖ×ר××ÚÛÚÖ×ÚÙØÔÖÖØÖÖרØÙ—×ÛÙÚÙØÝÛÜÛÚ××ÚÜÚÜÙÚÝØÚÚÜ’ÚØÚÜÝÝÛÛÚÙÛÚÙÛÙÜÛÜÛ¬ÙÛÜÙÚÚÝÙÖÚ×ÛÝÛÚÕÒÕÙÛÚÙÛÜÙØÛÛÜÚÙÙÛÚÖÚÛÙÖרÚÛÜØ°×ØÚÚÙÚÜÚÙÙÚÙÛÛÙÜÙר×ÓÖØÕÖØÙÔÕÖÕÔÖÕÖ×ÚÛ×ÕÓÔÔÓÕÕÖ×ÐÏ�þ¨£™—‡y˜—•‹~rŠ ¡œ™Ž}†“œœ‹‰ˆ ›’~|¡¨¡˜‰™¤¥ž”‰œ££™}‚™¢£–‹ˆx…‹ˆ‡‚‰Œ•“‚“˜žŸ”šœ•Œ¤¤ œŠ…¤­«¤¡“‡œª®ª –„𢥦§ “ ¥­©¦Ú¨—˜¨®±­ª©”‹Ÿ©®­®¨¡“ª³²°®­®¯²²°±´³²°µ³±««©®¯°±¯¯³³´¶¶µ¶³³º¶¹··²µ´¶´¶·»º¸¹·¶¸¼¿»·¹½º·º·µµ¶µ¸¹±¸µ»¼ºº¸··¹·²±¸¸´´µ¶¯°±µ¹»¹¼»½¼»¹»¹¸º¹¶¶¸¶µ´¶µº·¶³¸º¶«¸º¶¸½¾»º¼·¸·¶²´¹·³±¶¹··³°³¹³µ¸·¶¹º¼¸³¹»¹¹¼·­�óíéêæÝèñðëäèÞàíóòïìáåïïòðëåàçðòïëäÑéóôóïëäðóôðìëæãëððîåáØëóóíáÜÐÛæéççÞÖáãæéêÝÕçêïïéâÖåéíñîëäÛçðõóîéÙî÷÷õñîØìó÷õôóàìôöôàìô÷ö÷õñéõ÷÷öóâïõ÷øö÷öíð÷÷øø÷ø÷ øˆùøôöù÷öùøƒùùøùƒúùùø…÷øûùøù‰úùøùûùøùûø‚ùùøù ø÷‚øøù…øøùøø÷ø„ùù÷ø÷‰ø÷øùø÷øø÷ø‡ùø÷ù÷öö÷‚øø÷‡ööøøö÷ø÷ƒöö÷öõôó�þÑÇÆÂ¸ÃËÍǽ÷¼ÊÒÐÌŸÀÌÌÐÏÄ»¶ÂÏÏÊú¥ÂÑÒÍÈùÈÎÑÊÿ¸µÁÉÊŹ²«ÃÌÎó­¢®¼¿»»°¨µ·º½½¯§ºÀÆÆ¾¶¨·¿ÂÉÅ¿¶­¼ÈÐÌż©ÄÓÔÐÊÄ©ÁÌÔÓÏÌ´ÁÎÕÒÐ̳ÃÎÔÕÔОɾÐÔÖÕÓÓ̵ÆÑÔÕÔÒÐÂÅÕÖÖ×Ö×רÖ××Ù׊ØÙÖÐÓØÕÖÛÚÛ‚ØÕסÙÚØ×ÚÙÜÙ××ÙØØÖÛÜ××ÚÛÜÝÙØØÙÛÚØÙÛרÚžÙÛÛÜÛÛÜÛÜÜÚÜÚÛÚØÛÚÛØÚØÖÔÖØÙÚØ×Ø™ÛÛרÔÚÚÖØÛÙÚØØ×ÙÛÚÚÙ×ÔÚÚÙÛ‰ÙÛÚÚÛØÛÜÛÖœÔÔÖÖÕÖ×ÕÖÕÔÕ××ÕÔØ×ÔÔÒÔÖÔÖÕÒÔÒÑ�È«¤¢š’¤±©¤—œš«µ®ª¢“¤¦©¥Ÿ”‘ ¯ª§œ‘€¯°©ž—‘¤¨ª¦–Ž˜ ¢›Œ…~•£¤šˆtƒ“‹ˆ}y…‹þ{Œ–š—‰|Œ‘’š•“Šƒ‘Ÿ¨œ—~›¯­¦•{”£®©¤Ÿ†–£¨§¥ ˆ˜¤«¬©¦Ÿ“¥ª¬­ªª¢‰š£­¯«§¦•¡°°³²¯­¬¯°²±²²°²±³³±¬£¨±°¯´²±¯±°´µ¶¸´¶¹¶··¹µµ²¶²³¸¼¸¶¹¸´µ¥¶ºº´¶½¶´¹º¸¶´¹··¸º´³¹»¸ºµ´¶·µ¯²¸¶µ´µ·³„´·¸¹ºÄ´µ¸¸·¹´¶¸·³´²³·´¶´¸¹´¶µ¸¸¶·´·»º¶¸¼º¸»¶°´¹¶´·¹º¶ºµ¯²º´´·¸¹¹¸·²²·¸µ·¹µ®�…¯­¯±°¯ª­±¯¯²²¯®±²µµ´´±²¹·»¹´¹À¿ÆÂÇÀÅÀ½ÊÔ×ÐÑÕÝåÝåãäÌßáãóöîéêæêïòóîôåìëïñòòâìèðòîïâæîñõôíîâãðøùòïãëóøøõïåÚòöùôòçßóöõóõãÜòôõöôôåíóõ™òòãæñö÷õôóñçôöô÷ö÷öõ÷÷ø÷ø÷„ø÷÷ù÷ø‚÷÷ø‚ùùøùø”÷øø÷÷ùø÷÷ø÷øøùûùøùùøùƒøøùø‚÷÷ø„ùùøø÷ø÷ø†öøø÷ø÷ø÷ ø÷ø÷ø÷ø÷øùøø÷ø÷÷ø÷øø÷ø÷ö÷÷ø÷÷ööôöƒøøö÷ƒööõöƒõööõó�þ¡ ££¡¢ ¡ ¢¤¢£¦¥¢¥¥¤ª©¨§¥ª¥¨­¬«¯«®ªµµ´¨§²½¾·¹ºÀÈ¾ÆÆÊÄÁ»¼ÁÐØÑÉÆ¾ÆËÔÖÌÕ¾ÅÅËÌÏ˶¿¿ÉÌÇ˸½ÇÌÑÏÇǸ¹ÈÕÕÍÆµ½ÎØ×ÐȺ®ÌÒØÑÍ¿µÎÑÔÎл²ÌÏÏÔÑΡ»ÅÎÔÔÓÏͺ»ÊÓÔÒÐÍʼÍÕÓÕÔÕÔÓÕÓÔÔØ××Ö³ØØÕÓÔØÕ×ÙØÙÖØÚ×רØ×ÙÖÖרÖ×ÖÔרÖÔÙÚÖÕרØÙØÛÚ×Ö××ÛÚÙØÚ£ÙÙÚØØÙÚÙÚØÞÜÚ×ÛØÛÙØÕÚÙØÖÕØÙÙ×ÕÕÖÕØÙؘÕÚÙÕÕÙØÚÚÛÖ×ÙÚØÕÕÖ×ÙÙÛÚÚÙÚÙÖÜÜÛ×Ù×ÕÕÖ×Ô‚ÖÔÕ†×ÖÖÔ×ÙÔ‡ÕÖÖÕÕÑÔÕÒ�Ÿ‰‹‰†‡ŽŽŠŽ‰““‘Ž’“™‘’“˜Š—œ”›û𡔉‚Žž¡“••¤—¤¡¨Ÿ¡™š–¯»­¨©¡©®³º©°š¤¡ªª¬¯—¢œ§§¢¥’–ž¤«¦œœŽ¢±³¢šŒ›¤¯­¥š‹ƒ «´§¡‡¤§ª¥©†¡¨©©¦¢—¢ª¬©¥¤Žž¨®©¨¡ž“«°¬²¯®­§«®±°±¯Š±¯°¯¯««°³´³»¬­¯°±¸µ²¶·´´¸·µ³°³³²¶·µµ´²¯´²·»¸¶º·¶¹¸·¹¸º¶´µº²°¶·¶·´¶¶µ³®²¶Š¸¶·¶¶µµ··¸·Æµ¶±´··¹¹´·¶³²µ²¶º¸´´³µ²¸²¹º·¸´··¶´¶¹·µ¹¶²³¹¶µ·³±¯·µ²²»´²µº¸¶±²¯µ¶³¯´·´°­������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/images/flower.rgb����������������������������������������������������������0000644�0000764�0000764�00000601000�11533026402�017421� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Ú������������ÿ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������  d•œ’†„†‡Š—˜š™™žž˜•˜–“Œ‹“˜–“’––•™š–‘“ދޒ™š1,W?]hs~‡Y! $*/.53:IWŸ³¶¸¹¹½»»¸µ´´³³²¯¦˜uQ>8=JROB>+##%."-F!  #"1>E=4…‹r#5/*+%"  ^ª°©£¤©¯¦©®µ¸º½»¼¿¿ÀÁÀ¼¸··°¤¦ª®´¶¶±°­®³²°®¬§§¦ž¤¥¯­Ž……‡wvx€‚’@ !**(,167>GCJLVx·ÁÅÇÇÉËÉÉÇÈÇÄÆÆÅǾ¦bKMX]bWQ@5"'/6IC- )'N//"(%.<XT3:[‘œ€*N5130*&“²³­ª®¬§¨«±¸¿À¿¾ÁÃÆÆÄÀ¼º»µ°¯³µ·¶¸ºº¹´¹´²®®ªª¬§¤¦¨¯±¦™”‘‡„‡‘›{#/::;9>AAHNMV[`s—ºÍ×ÛÞáäääâååäåääéäÕ±|dnw|vqcL4" !# -Kclortmi]VGFHIJDK]st|…ˆŠŽŠ……‰”¯«¹²¸¾½°ž{M);Wd[F*    ^ª¸·­®¥¤«®±»ÀÁ¿ÂÄÃÆÃÀ»µµ¶¸µ®¯°±µ½»¸³µ°³©§¬©¥¤¢¡¤¤¥¤•“‘Œ‡„Œ••X '78;;9?:GDJMVUZez»ÐÝäèéëìêîîíîïñïìáÇ®™v{~zwcN8) %(! <\qtxyxvpi`]^W[Zer‹“–––›œ–œ©¯°»ÃÆÎÒÔÖÏ¿ž}ao„†pJ#   †³¸´©›•¥©ª²»ÁÀÁ¿¾¿Á»·²³´µ²©«¥¦­·±°®ª§­©£§£œŸ™–—œž–‘Œ‹†‚{„‘ˆ="4<AB;A?@BLIRMY_c{¾ÓáéêîððòðïðòóðíäÔÀ«ˆ}…‚wbH3!#)$!%H\mvy|xund``ZYYbo|Ž•”™˜››š˜Ÿ©±¸¾ÃÉÑÔ×ÚÔÆ¨ˆh<   Y¤µ¯«Ÿ–—Ÿ ¥«¶½¼ºº¶º»·¶³¯°´³¦££§§­®­«£ Ÿž¡ŸŸœ˜“‘”•––’‹„‚zso~r4#/>>DC>B?BIKJIT[coƒ£ÅÝéìðïïðòññòñðìæÙ̽¯‰‡‰††~q[B&&# 3Perz}zxpjgb`^\anx‡”•š˜–›ž›¤±¶¼ÁÅÉÔÖØÛ×Ȳ–™•W2  $Н±®¦¡¡Ÿ ¢£©µ³²®°¶·¹µ°±¬±´§™ž£œ¦©ª©Ÿ™—šœ˜—˜“Ž‘‰ŒŠˆ‚‚}sks~‚S="0ADGHBEDFHHHLP[dls‹®ÑãëíïíîðñïððîêåÝÔÉ»©”‡Š‡…ƒ|kR=$+'%#!%@Tdv}|vqjda`^]Ucq”–––——¦®µ¼ÂÉÎÓ×ÚÜÖǶ§ŸœŽnK&  I¡³´¨¥¡¢¡›™• ©¦ §±´µ°´¯®®ª¤—™™š §¢¡–•—˜ œ””’Ї‹Šˆƒƒ††„ƒ…†„vtvzy7 $#$*;AEKFIHGFNMMRP\ght‹±ÒáèëëìíìêìêêéåàÚÎõ¤‘Šˆ‰ƒ~vaP:&"&*)&"(=Okqzvrlfc_YSRYct„•–““𦬵·ÀÉÐÒ×ÙÛÓñ£’yS/  ˆ±¶¬¨¥£•‰Ž™›§±²¯®®¬¬¤ž—˜›™œ  ž—••–š“Œ‹ˆ…‰Œ‹‡ƒ€ˆƒ‚ˆŒ‹†}zz{s.&*+&%2DLHHKIIJOPNTS\chnuŒµÔãèêëéèéçéçæâßÚÒË¿²›Œ‰…‚‚taM3" %.0..)"$%<\fmuqkf`[NVUQXar„Ž—–•–˜£¬·¸¿ÆÎÑ×ÚÚ͹¤š‘a@   U©·®«£š”ˆ„ˆŒ••˜Ÿ¥¨©¦¨¨¥šš•—š–˜›™™“”‘Їƒ†Šƒ…Š‹‰‹†…‰…††ŠŠƒ~‚ˆi"!#"*DgLOGHNPONKUUYehln}ÃÝçéééççäæäãàÝÜÙÓǺ­™‹Ž‰†‚|m\@( %"13561)-IYblnib`WRUYVU^i~‡‘‘””—¢§³»ÂÇÌÑ×ÜÖ«š‘€nL0   #¬±¨ž“‰Œ†~‰’Ž”›¡ ¢¦¢˜“”•˜”‰˜šš––“‘ŠŠ†………†††‹Ž‹‹††‡ˆ‡ƒ„ƒŠŠQ2vlJFJHIHLKPTTY_cimvŠªÍàæçåââáÞÞßÛßàÝ×ÍŦ‹‡‰ƒ‚|hQ7(  )124:>86-"(BVagedZYRSXUPZary„Œ’˜Ÿ¨´»ÁÃÇÑØÜ盆{oV9  @”©£›‘Š‹ˆ†ƒˆ‡ŽŽ–œž¤œ–“Ž’‰’–“’‘‹Ž‰‡„~|}|€ˆŒŽ…€~}{€†Š:`›L;@CIEHNIJPRWV\fhq{ޱËÓ×ÕÓÓÑÎÍÊÌÐ××ÔÎù¨–Œˆ†ˆ‚}aM6*'2::;;5>DDC+!/HZb`aUROSTSNW^cku{ˆŽ•ž§²¿¿ÄÊÓØÙÈ«‰rcX@+  n ¢—Ž‹‡„ƒ‚‡‰•˜˜”“”‰Ž’Œ‘‘‘ŽŒ‰ˆ{tvz|‚Œˆˆ‹ŽŒ„}xvttvqtz…r2Œ-*;=A@AFCGHKNTS\bip~”­º¿¾¾¼¶·¸·±µ¼¾À¹« •‘‘‹{dK<@@BC;8;=JPL6 *F[b^]SOOQPMQXY^^eo|‰“Ÿ¨³»ÂÄÌÕÛØÅœsaRF3("  =“ ™‘‘…€~y‚‹Š‚‡ŽŒ‘‘•‘Ž‹ŽŽ‰‰Ž‹Œ‹‚‚xyqw}|„ƒ€†…‚|qlloldebr~9$mœV(463:>A?;BEEAJQV`et‡—§©¬ª¬­©§¡•‘— «§¢˜”“–•–’”‹t_TLBC@554@HQRG+-FYfbTOFGLPNMUW\US`nžª²¸½ÃÍ×ÝÓ·‹cQD5-%! r™ž˜”‘ˆƒ|wv†‹„„Ž““”ŽŒ‹Šˆ‹ŽŠ‰‡„~|vvyysux{xv‚„yjeekicZ\apo, ;|—,*42539A;:4<7:JP\ev‚› ¢£¦§¦¢—„nXc}™š™˜–›œšœ—„q\J>;1((3?GSXU=& =S_d[XSE@GLKLOPTUTZ_r†—¦¯»ºÄÐÚÜÌ«}QI<-,&!&     .Š¡˜‘‡}snu{‡‚‚‡“‘’Š‹‡‚‰†‚‡‚…‚}{tzvuoqvzyx~z}tkdfkda]Xhxk\†ˆ%20208433,29DRWam}Š‘šžŸ¢¤¦«¨›†iPXp…—› £¥§¦¦žŽbH4%""&:@LV\]P<%0E_jfWUQMJCGKKLMQURRSgyŠœ­³¹ÈÒÜ×ÄŸf>10'+"$"      jœœ—…wqot{€‚€ƒƒ‚Œ‘‘’Žˆ…€…‚{xy‚|}ywtpnsvx|vz|~{vpogkngd]dkr5l‹Œ $+//10*(0*5CUdlt‹‘—›¡¢¦«®žˆmYe{‰šœ £¤§¨«®¯©¢—‰eJ/!!*:EOV]b_O.?Xde_[RTMKFLMJIQTUSOQ]l~ §·ÆÖÚв‹Q6&$!&!"" !    1‡––Štpuz}‚‡„‚ˆ‡ƒ’’Œ„€‚~~y{uw}€{wvsqjrtzyxvvw}vrijmpjjhfbfV!u›¡2 #'5.222("#<Qg{…‹“—˜›œœ¢§®³£‘{nt„“ ¤¦©¬±±±·®«£œ“z]>)&"3:FNZ^bdaD&.Q\kf\[Z^WNJHJQPQPWRSOWar} ±ÅÒׯ¡r:&,&"# "&$&% #    M“ˆ~unr}‚{€„†€€†ŠŽŒ‚xxxzspwxst|ƒ‰ƒ|{uptlqw{~xw{zwsnmqnmh_YS\tQx¨Ü‰+/441+()NsŒ‘šžŸ ¡ œ™š£¨°´«˜ˆ{‡”ž¨«¯°°²´°®ªª¨ª£“~\:**7<HN[`d`eX@'?`nng]TWYYSOLHOVRVUSONTZhlzŒŸµÄÄ®—`&!%%!!!#   o‡zuwu}{€~zz‚‡†‚€Š‚ƒ€vvoushpwprvƒ‡ƒƒxxxuru{wtzxywwunsndd^SPe0#ˆ¸ß‰#"%+5/,( 'Iw𢣢¤£¢ž™œ¢«¶·¯ ’Š” ¥±¶¸¶µ°«ª¬±µ±´¶©–rQ946>KMXZ``eeU=!!,NnsnbYSZaefdZPPTSUTSQUZ`chju ©¢’•Q### !#!   ;}‚y{|uvzz|€„‡ƒ~‡„~yyxvrvmlillqny‚‡‚|}{{vxyyswwxz{|vnstngeaMSpY/–ÁØy& !!-4+.'!(Hx•Ÿ£¡ ¦£¥ž™›¢°·º²¤™˜«²¹¾À»³«­¯³¹À¿Á¸¡†hO3;DKP\]fffidS3!#':e{{n]VR]inrof[VTTUXUVZ[cccbiwŠ’‹œM,%#""# $   m~‚€€„…zy{|y…‚z}|{{w{xttkleckqov€‚‹‡{yvvyzzuux{€||uuspkgeWL[q*8ŸÄÔq#&+', )At” ££¡£¥¥¡šš¦²¹½´¨£¤¬¶¾ÁÄ¿¶¬¬­°·¿ÈÌËÊ¿µš}`=?HJY\cfjgkh_G( $')0Qr€{dUP\]ns~unfa]XRXUXYaa]dcemƒŠ¡ @'$&#&%%$  &n„Šˆˆ‚wwzz{z}…€}xz}{|y{‚neiipvuy~ƒ‰€|zru{~z{yzy€ƒ}‚~‚wvwtkfb[Vki&[­Ðæu# ###/Hk‘ž¢£ ¢ ššž§º½¼¶±¯±´¿ÊÈÆ¼²¯°½ÀÈÎÒÑÏÏÌ¿ª’qQDKP^]dljotnm[K:(#&047Bkˆ€gWPVapw‚~ytkb[WVY\^]`acfevƒŠ›È¾>0+))$,$# ! F‡…‚~xuywrv|‚{|tx}~}…ynigkuuw€„€{ysps{}z{uvy€~„…~wtpje^]c~B$0E{µÎç‚%"$ #-Gb„šž ¡œ›™—™ ¯½Â¼¸µ¶»ÁËÎÉÁ¼¶º¼ÆÌÐÔÒÒÒÓÔ̸¡ƒ_NMSZ`hmkprppe\K<5:=FLWvŠ‹yaYPQ[mv€‚‚{rk_\]^^^^_^a`gw‡•¼ÙB1120)&$'  q‹ƒwuxssqww~{ws|~}|{wwojoqquw~€|‚xvturtutvqow~~€„|xulk`TXcz|0G_»Ïé$ "! (2@^~•šœŸœ˜—•™¢³Ážº¸¹ÁÈÎÑÆ¾½ÁÅÍÍÐÐÖ×ÖØ×ÕÐÅ©‘l[SX^fjoqlqosm`THGIPR[n…†q\UNQZhv~‚†}xqg]^_`^a\aefm{Ž­Ò×=2.,+("!  B‰„€|yujmqxy~~xy€~yyyzyxrxww}~}v~}€}{xututpt|}~…xuuhjh]V_p‹@4Ueqœ¿Ñë§1!$&#/<CY{˜žžœ™–•™§¶ÀÅ¿¼º»ÃÈÎο¿ÈÐÕÕÖÖÙØÙÝÚØÔÌ»ŸbZ[cgfosqttqkf`WRU[^d~’’ƒj[SOIUblz€~vqkc_]dac]dbht‚œÏÚ΂80(,'$" B*' bˆ‹„{vsmgu{}{{ƒ~~yz~}~ƒ||zv{|‚ƒ„~|wz}{}‚…‚€|{{qjmnmdhf}‡ ;Xotx¦ÁÊî¿J !&-95@Tv‹˜š——››¬¼ÂÅÀ¼¼ÂÄÉÍËÃÂÆÐÕÔØ×ÚÛÝÜÛÞÛÙÖůu_`cfilrywtsrojc`_gmq•’{e]VOPIZjuxzztqrlgdeaeaeeq€˜ËàÞÍ{:3.,%sqdV<) "pˆ„xqnupv{|}}‚‚‡ƒ„„€ƒ~vuv€‰ˆ†‡†ƒƒ}y‚‡‚„ƒ…„wutlnpjb`cd„U8Uotq{±ÂËìÏp"#!.:GYo‡–—˜š˜š«¼ÀÄÀ¾¼¾ÂÇÉÊÆÉÎÖÖÕÖÚÚÙÝÝÝßÞÞÛл ‚lefqpnvwvxwutoaagjp}•—‹ufSQOMJT]nrrrtvwqiee`bdgo~—ØçãÝÕg36.)'|~|rcT@6$ =y‚xomtsqw|}}ˆŒŽ†|‚ˆ‰‡ƒzuvƒˆŒ‘‡‰…ˆƒ~}}†Ž…†ˆ†ŒŽ‡„‚~|tqgcc`Tgx"2Snttm‹µÃÈìן2!$)&7>JYr‡—™—™ž™›¦°¼ÂÀ½½½¿ÄÇÊËÊÍÔÕ×Ù×ÙÙÛÝßàáááßÕů”solpmrwzw|ttrjfhlioŠŸ—‡seSWPKLS]hklorxxysjhhdgiv å÷íçèá`?5.*!# xy{~„††ƒ…scF0 Wxwlntuow{|y}€‹’𕆇‡Œ“Œ„€~„†Š“Œˆˆˆ‚……€|„‹‰ˆ’Œˆ‰ƒzplg`XVpP4Tp}wor¸ÄÆåÙ¿i( $,5AGN\o„“™ž¢¦±»ÀÂÁ¿ÂÀÀÄÈÏÌÑÖ×ØÚØÚÜÞÞàáääââÜͺ›rqpvtwywzzwuoiklnx” —€me\WPQPU[afhlrvzxpjijjvºõýøííòÉ^?.'*# !yuw}†Œ‘””•‹|mXD+ "dwjmptuy}ƒ€‚Š‘’“Œ‰Ž‰’‡†ŒŽ‘””’‰‹‹Ž†…ƒ€ŒŽ‹–“””Œ‹„wnhh]_†,4Vn~~qf£ºÃÆáåÊ­8"(6GJNQWg‚˜œž ¡¤°´¼ÀÀÃÁ¿ÄÂÄÎÑÔÖØØÙÚÛÝßààâèååäßÖÄ­Žxptyxz|x|wyzrqkmoƒœ •{jjba[WWVV^[^fqu}‚ysnx–Úýüü÷ñöô§iP9(*##|}ƒ‡Œ’’•”—“ŒŠ†weI- )ksrpty||ˆ‘’ŠŠ‹ŒŠŒ“”•™™•‘Ž‘”’ŽŒŒŒ“—”’ŒŠ•›œ’‹‰ƒzsqjcqh'Ki„€ml“­¾ÅÈÚèÌÄl&)<JORS\nz‰”š›ž¢¤§¯´½¿ÁÅÀÀÃÃÅÌÎÒÖØÙØÚÜÜàßâãèæååßÛ̵œƒswu{vy{ƒ{{zvssns‹ŸŸvdc`bZZRSW\X\hpw„…ƒ~§Úøüýüö÷òÛ‘r_H3$"!‚€‡ˆŒ‘’’ššœž ›‘„p\I>6&Dy|wu{y~~~‚‰‘’””Ÿ™’’•–˜˜œ›™—–‘’‘–’”•—•”š˜“‰‘˜ Ÿšš–‰‚xrojj‚<8^|‰…wjxŸ³¿ÅÇÔæÎ˨8$2EOSU_ivy€Ž•𡍬®°³»¾ÅÅÅÂÃÅÇÌÎÒÕ×ØÚØÜßâáâãææååãßÔä‹zy~~~€‚‚}}|wss|•£œ‡qa`dba^XU]Z\^lnx€‡ŠŒ“·Öðûýüüúõé±saD-„…‡“””—›Ÿ¡¡¢£ŸŸ›Œ{ieaXI/^~|}{}„ˆ“”™™˜Ÿ»Ä¤–™—šœ››š—–”—”•”˜™š–—›¦¤¢™šž¢¤¡¤ š–†zqkgy€-Tr‡ŠƒpX†©µÀÆÈÔéÓÌÈx(#4CKQWZfmurwŽ–œ¨¯³²º½ÀÆÆÄÅÂÆÉÈÌÏÒÓ×ÚÜÝÝÞßààâääãääØÇ­•…~€}}‚|xxs†œ –€mc]_`^`XYY]abgnx~ŠŽŸÄÕîûûûüü÷ê¿–ŒŠ‚u`@#‚ˆŒ’–•›œž¤¡¡› Ÿ£›’{oz…„u[Du‹Š|z~‚…Œ”œ™˜Ÿ¥ž¡ ¥¡¤¢¡¡Ÿž•“—™—––š¡£  ¥ª°³«¨©§«®ª©¨Ÿ—Š}ohoU9`{‰ƒwdW“®¸ÀÅÉÏé×ËÊ´G-5>LLTZdhmlhkxˆ—œ§°·¶½»ÁÇÇÅÇÆÇÊÊÌÍÏÓØØÛÜÛÝÝÞààåååãßÚйž€ƒ€„~ƒ€……}{|{”¦¢”}jb_^aaa^[aba_gsx€¢ÃÌêùýûüûúí»“Ž…z_=& !%‡Š’“•—šŸŸ¤£  œšœœœup‡“™•†qm‰“…€‰ŒŒŽ‘ž£—›¢¡Ÿš¥¦¦¥§¦¡ž›š›œŸ¢”›¢«¸²¯±´µÂÀ¹²±µ¸µ¬°¥ ”Žˆplƒ•%=bxzkVaŸ±¹ÀÅÉÔòßÍÌʃA>EIQ[`ghd_dfsƒ˜¤±¸¸¼ÂÆËËÊÉÍÊÈÈÌÌÎÓÙØÚßáåÞßâßâáäáßÜÔ¾¤‘„ƒ††ƒ†„Š„}{|„ž¨£sqd]`iidfcedjhjr{†¥ÀËáúýüüýüñ¼‡ˆˆ’ƒweI-""%-5?Ux{ƒŠŒ‘—œ  ¢¤¤¢žœ›œ –†tw‰’œ›™Ž†Œ›ŠŠŒ’™›š–𢧡££¨¨  ¢¡žŸ  ¢£¡œ¥¨­¼¸¸¹»»Á޹º¿¼²±³ª¡•Œƒyuu•j8\npk]Bx¨¶¼¿ÅÊ×ðãÍÎ˺VDNMV`dcb\^djnwŽ”Ÿ­»ÀÃÃÉÍÎËÌÌÊÈÉÈÌÐÓÕÚÙÛÚÜßßâáãâåßÞÞÙÈ¯šˆ…ˆ†…‡†ƒˆƒ|~¥­ †pmc_`dhfihhelnkr‚¨ÆÑéúýüüýüõÐ’‚~}ƒ‰Œ‘Š}hPA1036HQ`qy||€…”•˜œŸ£ Ÿœœœ›”‚}†‘™š›—™’š—”ŒŽŽ’––•¦­§¬¥¨£¡£¢§¨©ªª§¦«§¬°¬²ºÀÁÀ¾¼Á¾»¼¿¼¹µ¸¸®¥–‰{pkz§:*I[XSLBŒ¯·¿ÁÆÈÔååÐÎÎÎQOVUb_Z]^dgnqxŠ“œ¨½ÄÆÌÏÌËÍÍÌÌÊÉÊÈÏÓÖÛÛÚÚÜÝàââââßßÝÞÚλ¡ˆ‹‡‰†‰ˆ‡„ƒ‡˜­«™ƒpjc`beleifjhilq„­ÇÔêúþýýýý÷â®{wy‚†Ž’’‹„tfWNLPWat}}}}‚†ŠŽ”•›œ›—•˜›™™’“˜Ÿš™›š›”“›”‹ŽŒ‘””” ¨«¦«ª§¥¢  ¨«®®«­¬­¯´³´¶¼¹¼»Á¿·´º¸···µ¹¼µ¼¶¯¨šŒ€pl‡ 4ED?4H¡²¼ÀÁÅÉÕåíÔÐÎÍ»f^k\\WV[aglsuw…•š¤¿ÇËÎÏÍÍÐÎÌÎÎÌÍÏÒÔÖÙÚÛÜàáááááßáÞÞÝÙÓª™Žˆ‰ˆŠŠˆ††‘¢®ª–‚sjfbcknolnslos…¼ÏÚîüýýýýýúíͯ–xuuz†“‘‘‡zrihegiu€uv|‰ŽŽ‘‘––—•‘—š™˜™šœŸ›˜––””˜£œŽŽ‘””••Ÿ¥§§¬­©¦¥¤Ÿ¥ª®¶¶µ¶²«µ»»½½°¬¢¥œ“~€Ž›¢£«»º¾½¸¶©œ’upŒQ   ,-&&X«´»¿¿ÄÉÕäêÕÏÏÍÍ–d_d^Z[fipmvx|„—¤»ÉÍÎÍÌÎÎÏÏÎÐÏÌÐÓÔØÚÛÜàâââààßßÞßßÛÙÓů¡”‹‹ŽŒˆŽ™ª­¥‘€skjjilkmpssnu‹ÃÖàöýýýýýüüòÚ˵™„zvory†Ž“•‘ˆƒzsqfmqswy†ŠŽŽ‘‘‘ŒŽ‡Œ–––——˜œ—“•“’˜ž‘“•™ž ¢¨«ª¬ª¬§ ¤¦¬¸·¯«£˜•™Ž‡wfgbjfZQCEN]dx¹¹¾Á¿µ¥›‘}{v…)  "v±¸½¿¾ÄÊÖçðÙÐÏÎÌ¿mib`filrpuuzz‚™£»ËÏÌÐÏÒÑÏÐÒÑÍÐÑÓÖÖÝÜßááäááÝÜÝÛÜÛØÚÖɵ¤—Ž‘‘‘‹‡• ¯¬‚yqmlpqpqsurtŠÎæìøýþþýýüûõØÅî’‚ytmsux|†Ž’‘‹†€odRG|{~†ŒŒŽ‘‘’’‘‰‹ŠŠŒŒ“”••““‹ŠŠ‡Œ‹”—™–“‘–›¡¤£¬ª¦£ž—”‰‹Ž…}wvtpxmenjhgijbPI>4GII@OL[qˆŸ‡nTZ\p~ˆt  +¶»¾ÀÀÃÈÓåîàÒÐÐÍË©sdagppnttwz|}€•¥ÀËÏÏÑÒÒÎÏÑÓÑÕÕÓÖÖÙÛÝßáâãâáÝÞÝÛÞÙ×Ú×ο©œ•””’’“‘’›ª³©œŠunoosurwx|y‹ÌôõùýýþýýûýöÞÀ½·¡‰ysstspryzƒ†ŽŽ‘‹‰xaF2~€„‹–•”’ŒŠŠ‰ˆ‰Œ’’Ž‹†ˆ‚…„„€s–¨¥ž”‘˜˜›¢Ÿ’„‚‚wsw{{~{{yv{xtmndlkqmh[TIC=;@@;9579:6851/..3T| K    C£¹½ÀÀ¿ÄÉÕçðàÓÒÑÏÍŃfiptvzvuw~}€‚‡ŸÂÌÒÑÐÓÔÔÒÒÓÔÔÕÔ×ÖÚÞÛÞßãààãàÝÙÙÚØ×ØÖÒűŸ•—”•”“””§°²¦›‡}qrmqrqtxz‡Ìôúüýýýýüúýùß½¹µ¬š„yvxtpqqrr{†ŒŒ”€lZ?y|†‹“˜•‘’ŽŒŒ‰‹ŠŽŒŽˆ‹‘‹……~~}„|fs®«¡˜—”™–”„}qoy~~xvyuz{{xvlhilmjgpm[LPCCD697,,%*/,...'+""#*Eoˆ  `¯»¿ÂÀÀÅÊÐåñäÝÙÑÎÎ˨nptxy}wqpu€„ˆˆšÀÌÑÔÔÓÖÖÔÖÕÖÖ×ÖØÙÚÝÝÝáßáâäáÛÚÖÕÖÖÔÖÒÆ¸¨—›—™™˜–˜§·¶­Ÿ•‰yhgoqvsx~ƒ‘Ò÷ûýüýýýüøúú溱±¬ ’wusttsknprwz‚ˆ‘””ŒoW|}„…Œ‘“ŠŒ‰ŠŠŠ‹ŠŠŒˆˆ‹Šˆˆ…†‚|}zzƒw^Tƒ¬«Ÿš–‡ofhmjoovvuuvsvtvqk\Z`jec`c^Q?=<E?76.!!#$%*)'(#3T5   )y³½ÁÁÁÁÄÉÓéïìÙÔÓÒÐÍÈw{}~|xpt€‰‘‘™¸ËÒÕÙÚÛØÙØÚØ×ØÕÛÚÚÜÞÝáÞáããâÞÛØ××ÖÔÔÔɼ®Ÿ ›œšš™¢°¼»«œƒuefmssvƒŠ§äøùüýüûü÷ö÷ù깩¬©¡”…{vxtqumnpnmnpw†‘Ž‹‚t}}……ŽŽŽ‰ˆ„„‡‡‡‡…ˆ‹Œ‡…‚‚~}€~z~{}ƒm_Q]Œ®¥žšƒjc_[^]\bhjqwvzwqljjiffda^QLLMK8,//2''# "#,-&+"!!<T  :—¹¿ÁÃÂÁÄÊÐæîíÛÓÒÑÑÏ熄ƒ}ysuƒ”Ÿ›«ÆÔÔÛÚÝÚÙÚØÕרÙÛÚÚÛÚÛÝÛßâæäáÜÚÚÙ×Õ×ÕÏ¿²£œŸ žž¨´À¹¥“ˆzlfipwv€²ëø÷÷÷÷øùöòô÷í» ¥¨§š|uvwuknonqllijmu€†Œ‰{|€ˆŠ’„‰ˆƒ„‰„ƒ„ЉЀ€}z{~yszxyr‡ƒg_kžª›a[^TVNOQX\egsyvsnhlkhhe_bULQIFD=' ($ !"')(!! %K:  Wª»¿ÃÃÁÁÅÉÍãïîàÖÓÒÒÐÐɛЉ„~}|ut€˜§©¢³È×ÜÝßÝÙÙØÒÔÕ×ÛÝÞÛÛÜÜÜÞáäãâÝÛÚ×ÖÕÕÓÏ·«¡¢¡¡¤¦µ½À°¡Œunjou|~ŽÅõû÷óõöõööñïôïÄ–Ÿ§ª¥“‚yrvsuutsnjkokjkoqy„‰‹ˆ{}‚‡Ž’Œ…ˆˆ††…‚„‚~yx|{wvvxtvtur® }r’zh_ZSPI@NPSTXa^bfmjbkjfe]XRJEADEB=,&&#$" %'K   !€´¾ÁÁÂÃÂÆËÐãññâÖÕÔÔÔÖÏ·–ŽŠˆ…xv…š¨²¢‘¬ÉÚßàÝÛÚØÕ×Ô×ÛàÞÝÞÜÙÚÚÝàâßÝÝÛÙ×ÕÔÒÍɾµ¦¢¦¤§ª¸Ãº¬š‹‚woisy‡¨ãüùöóóòóõóóïïìÓŠ‰—¤¤›‹|xusuutrnqmprghjihlsz~ˆˆ„‡ˆ‰‘‹‹Œ‰‡‡ƒ…}{vwxwxuvwurrwrn{››‹€shlcWNB?DFHRX]^fflikeih]ZUXQLDKDD<0/'#%"#;<  6ž¹¾¿ÀÂÄÂÆËÐäïñä×ÕÕ×ÕÕÒÉ£ŽŽŒˆ€Œ•˜¦»±Š} Ã×ßÞÙÚÙØØ×ÖÙÝÝÝÚÛØÚÚÛØÛÚÚØÖÖ×ÓÕÓÏÌÁ²ª©«¬§ª¶¿»©—ˆ{rqy„ Õúýúôððòñô÷÷ììíâ—yŽš “xsqvq{qroqppilildffemr}€‚„‰ŠŠ‹ŒŽŒ‡‚ƒƒ‚|z|{}uttvxuurrpstqh¨««¦Ÿ™—”†{mc]Z]anksy‚Љ„…ƒvi`Z[SPNH@73-($"!%D(  W­¼¾¿ÀÁÂÂÅÊÏàïðèÜÕÕ×ÕÕÓÑ·˜’’“‘Œ‡Œ”ž¨Á·‘Œ¯ÓÝÜÙØÖÕÒÑÔÙÛÜÜØÕÓÖרÙ×ÚÚØÖØ×ÓÒÒÐÎĶ©ª«ª¥¬»¹´¥•‡{zЬÒôúüüøñîïîøûûòëèéº}tv€‡‘‡~vnnsoorponjmklekcf`[cblrrx~€|€ƒ……ƒ}x{|yvywxwjprtrsnqpqrrm\p©µ¶¶³´¸¹º½»½»»µ·½ÄÄËÚÞãçêñðäÝÏ´žWGB;3-'$#"#.;  #ˆµ¾¿¿ÀÁÂÃÆÊÐÝïñëÝÔÕÖÙ×ÔÓÇ¡•˜›ž˜‘’ž­µÇ¸ ¤»ÉÖÙÙÙÙÕÓÌÊÏÔØÚÛ×ÔÓÕÓÔ×ÙÛØØ×ÖÕÒÎÏÍÍÈ»­¬®©¦²»·­£›Ÿ¨À×óüüýýùñîìíøüüðîéäÛ„vrrpy~{|vppnpotqspmjjlfmdie\c\\jbbghgnoprvsmopsrminijkkfkikkfbjhfle[?lª¼ÂÅÇÅÆÌÊËÑÒÕÕ×ÕÕØÞÝàèìîññö÷ù÷ùùõÞ¾“_?5/*+"# "#!./A¢¼¾¾ÁÂÂÄÃÇËÏÜêñìÝÙÖ×ÙÙ×Öѵ œ¢¥¡œ›¨¾Ä̱¢ªÃÒÕÖÖÕÓÐÐÇÇÌÌÐÓÔÔÒÒÑÎÓÖÙØØÖÔÕÐÐÎÎÐÎÆ½³®­­´¿ÇÈÉÌÐÐÔêùþýþþý÷ñêíõûûðîìåè¥roqkkiqpsptopoorqrnpojhihhbc_]YXdFFNRQW\WZ_^]]a__ZYXTXZWYTVZYVVY]`YWI+!]µÌÏÕ×ÚÜÝÝÝßÝÛÛÞßâàààáàÝàæçéíìêêìëéêæÉ—lM:.*##% !3#_±¼¾¿¿ÂÂÄÄÉËÍÞíòïáÚØÙØÚ××ÓÉ£›œ¢¡Ÿ§·¯‹•¡¸ÈÐÑÔÓÎËÊÆÅÅÈËÍÓÐÏÒÐÍÏÖ×ÖÖÕÑÑÍÎÎÌÏÌÉÁ¼¹¼¿ÌÔÐÍÍÒÚãîúþÿþþþýóîëïøúðíèççÎ~smklk]_YYcgfimnnnsomjjgkffae^YYXU,048??@BHHFIGIDGFHEAFFDCBFEHD@ILMFC1 Q¶ÌÒÚÜãçíòóëâååàäâááäæãàÜÜÙÛÚÛÜààßÜÝÚÚÖǤoL61)&! +5"/…¶½¾¿ÁÃÄÅÆÉËÐÝèñïåÝÙØÕÖÖÕÒÏ¥……„Œ‹Š„sz —˜®ÀÉÌÎÑÎËÇÃÃÃÃÆËÍËÐÐÎÎÏÕרÔÔÑÏÎÍÊÉÎÎÏÑÎÊÇÈËÏÑÖÜâåëöýýþþþþùñîïóúïêçæìäšumlhkaKD=CTZYZ]hinnkigiijigaa][ZVT$$ &.-+510244,13577353+3/1.-/54884- D—ÇÏÔÚâêòôóñîêäâåÞàÜâßââÜÛ×ÖÕ×ÝÛÝÜÚÖÔÒÒÑÊÀ‘W2*& "3;J¤¸½¿¿ÃÅÅÇÇÉËÐÜëïîèàÚØÔÕÔÓÑϼ{ttxxwzwtš°•‹§·½ÅÅÊËÆÆÄÀÁÁÄÇÉÈÎËËÎÍÑÓÖÔÔÑÑÏÌËÎÜÙÌÅÈÌÐÑÕÕÚÞàæì÷ýýþþýþüóðôùöîçæãèç½wnmhgbP+'7:@LU\bjfa`dbefjgje^Za]Y!$" "$ %##""  K“¸ÎÒáæîòõöñìééëêâàÞàßãßÙÖØÕըרÕÔÔÕÑÐÑÐÏ΢c3  +-%n³À¿ÀÁÄÆÅÇËÉËÑÜêïôìçàÙ××ÔÕÑÌ̘tuyz{uxy¬º–ƒ­¶¼½ÁÄÂÃþ¿ÀÃÄÇÈÉÌÌÑÌÎÒÕÕ×ÓÒÒÔ×ÐÇÅÌÎÒÓÕ×ÛÙÞàäèíöýþþþþýûõõøôìèéßåãÜ„pskfcU>-19ENV[YTXZcfhgfc]\Y\[&     5q¬ËÖÞåêíñðíëææãá×ÚØÙØÚØÚÚÖ×רÖÖÕÓÓÖÒÐÍÌÍΠZ0 //0Žº¿¿ÁÂÅÆÆÇÉÊÌÑÙëðòïêâÙÚÖÓÓÑÎͶzq{ˆ†}wz®À¦Š‘£¯±µ¼¿ÁÂÁ½ÀÀÂÂÄÇÈÍÊÎËÌÑÓÕØÚÝ×ÊÇÍÓÕÓÖØÖÕ×ÚÜÝàÞèðúþþþþýýüøú÷èéèßåããªrrtk__H#%)7DKOOPQUaeebb```\WY         .b³ÐÓÚéííéííäÞÙØ×ÕÖÔØÙÖÖÛÛØÙ×ÔÔÕÕÔÓÓÑÐÏÏÏÈ;&##!#%$0$#I©½ÁÀÁÄÆÆÈÇÊÌÐÑÙêòîîíéÞÚÕÓÐÐÎÎÄ…rs…›•ƒz§Â«‹›¨¬²·¼¿¿Ã¾ÂÀÁÃÄÆÈÊËÊËÎÒÓÛäÚÍÊÑÖÖ××Ö×ÚרÚÛÜÞßãçõýþþþþþþýýúïééàâèâÖ†tvyna\C*# $(&+)8:>DEMO]djga`ca[^W[        5ŽÑÔÕØáâåæÞÙÙÚÖÔÖ××ÙÕ×××ÚØ××ÕÖÔ×ÖÓÓÒÑÐÍÎͽd-'#"%!$31j·¾ÁÁÂÅÇÈÈÉËÌÏÖÜëïïòíìäÜ×ÓÒÐÏÎÉ`bk†¡ŸŠ•³”„“£ª¬²¸»ÀÃÁÅÃÄÂÁÄÈÉËÌÎÒ×åäÍÎÔÕÚÝÛØ××Õ××ÙÚØßßèïõüþþýþþýýþýðíîãâåáæ¬zvz|se\<!(,6@89856@GIJR_flica__^]T[ŒÓÌÎÒÕÙÝÜ×Ù×ÙÚÙÕÖÓÔÖÚÙÔÖÚßÖÕ×ÓÖÖÖÒÒÑÎÎËËØ¦uD/(!!'1=“¼¾ÁÂÄÅÈÉÈÊÌÍÏ×èíððóïêçÞØÕÒÐÐÎÌ¿cMV^yšŸ“¸º’x‰ž¦©­±¸»ÀÁÄÄÁÁÃÄÊÊÌÓÕßáÍÈÓÖÛÜÝÛÛÚÛÕØØÕÖÙÞâáêõüþÿþþþþýýúôñîåäèããÒŒ|{~~ylX3'3ENT]YVOPNNXTbcgifadecb\_]W‹ÙËÏÐÔרÚÝÛÜÚØØ×ÖÕÕØÝÛÙØØÝÚÕ×ÙÕÔÓÑÏÏÍÎÍËÊ˽¬˜wkfZF( &&0G¯¾ÀÁÃÅÄÇÇËÊËÍÑÖéïðïòðéèßÙÖÐÑÏÍËÈ‹UPQ_nž¯ºpƒ“Ÿ¥¨«°²»ÂÄÁÁÂÄÄÈÇÒÝáÒÍÓÓÚÛáâÞßÜר×ÚØØ×Ûßàãðûþÿþþþÿÿþûòòïâäèéá姆„wc9)2BR_gqmsqkiggillmikfhegd]`_\!Õ×ÐÑÔØÙÚÙÚÛØÙ×ÚרØÖÚáÙÕÙÙØØÙØÔÒÏÏÏÏÎÏÍÆÅÁÀº³²±°£Œ_,!"(fºÁÁÂÅÇÇÉËÌÌÌÏÓØêíñîïòìæàÙÕÒÒÏÍËÈ©WLMOZmŸªgs†”›¡¥«±¹¿ÁÂÄÃÅÇÊÏÞÙÐÔ×ÜÝáãßÞÞÝÜØ×Ö×רÙÞåèëõûþÿþýþþþûø÷õæèèéäãÍ’ˆ„ƒ€}qH;=N]ity|~zwxwrvwypmnkggbgaZ`^#˜ÖÐÕÒרÙÜØÛÛÝ××ÛØ××ÔÕÚÛØÙÙâßÛ×ÕÒÒÐÐÉý¹·µµ¸¶·¸¸¸·¯’F!.½ÁÂÃÆÆÈÉËËÌÍÐÕßìððîîóîéèÜ×ÓÑÐÎÍËÂmIMLSZkƒ‘¤™|qxŠŽ˜¤®·¼ÁÃÅÉÍÕÞÏÑØÛØÜâÝááÞßâÞÚØÖרÛÛáâèõüþÿþýýþÿýýûùäãæéèãâ§…„ˆ…†‡ƒx_RP\huz|}}}~}~{‚yspllig^`^[ŽØÕÖÙ×ÙÚÙÚßÞÝÝ×ÙØ×ÚÕÖÛ×××ÙÜÝÛÚÔÍľ·³³´´³´´·¸¸º¸º»¸¨k+>©ÀÃÅÅÆÉÈËÌËÍÏÏÙãíïîíêôíèæÜ×ÕÓÑÏÌËÈQUOYY^j|“´œXUXdju‚–£¶¾ÂÄÎÞÚÐãçàããæëåãâäâ×ÚÛÙØÚÛßâáçôüþÿýýýýþþýýúèãçëçæåÒ˜ˆ……ˆ†Š{umfbfgmsttz}„‚…‡‡…‡†„wspik`^_\ŽØÚÝÖÖÝãàáÜæåÛÝÞÜØÙÛÙÜÚÜÚÛÖÕÚŽ¶´²²²³µµ°­±¶»ºº¼»»¹±‚CX¸ÂÄÄÆÇÈÉÍÍÍÐÓÓÜéïñïíìóðíåÞÕÓÒÐÐÍËÈ©URT\\eov|Œ„J8;?GSYuˆ¡²ÃÓÝÚæìòìçíïðîìéèäÚÝÜÙÝÞáÞÞåæñûþÿþþþÿþþþýûìíèëéèâ寄‚‰‹ylgmrogcdknsty‡ˆ‰‡Š‡†…|urpnghb^'™æëïéïïîôïêòñåäçåàÞßÛÜÛÛÚÑú¶´²²³µµ³¶µ¶¶¶·¹»¼½»¼»ºµ˜–ÀÄÆÅÈÉÊËÎÎÐÐÑÖãìòòíïëòóîéæ×ÔÑÐÏÍËÉÅbNT^bnzwp|vJ12,.4?Jaƒ£È×ä÷úùõòóòòôõðîáãáßÞàâáßÞâéöýþþþþýÿÿÿÿÿüððíëîîâáÓž…yx‡r[\fprj_b_cenwzz‚‚††………|tvrnfdc0ÄûüûúúüûüüúýùïæìêåßäáØÕƼµ®°±±³´·µ·¹¹¸º¹º¹¹»¼¼»¼¼¹ººÃÆÇÈÉÊËÍÍÑÓÔÕÛêðôñððéõôïìéØ×ÒÑÒÎÌËŇj}ˆŒŽˆ}xfE/(+)(,<h·áøþþþýù÷üúú÷óéæéææâääàÝàäìóþþÿýþýýÿÿþÿýôòîíëîéãä¼›“‡uu€…|iNP^jtoe\YXXbnsqx€ƒ…ƒ‚†‡„‚}yulfg7èüýýýþþýýþþþþûøöñçêæÎÀ¼µ±¬®±³¶··µ¸¹»º¹¸¸¸»º¹»¼¼¼º¼ÀÅÇÈÈÉËÌÍÏÏÔÖØçñóöõôðéóõñíìÛÖÕÔÑÎÎÍɶ©³°®®¤š–‹‰{S=646>Y«ñþþÿþþþýþþýúóíëîïííêèèåãèïõýþÿÿþýþþþþþþ÷úôõ÷óðååÞ«œ“†vu€€vYHNXcosoeXPPVaejuu||€‚…~€€€~yrkk_ùüýýýýüýýýüýýþüùùâž¹¸³°«¬²µµµ¶¸¸¸¹¸¹º¸·¹¹»¼¼»»»»ÂÇÈÈËÊÌÍÏÑÓÖáãìõ÷øõöõéòöðìêߨÕÒÓÐÏÌÊÁ´¶··¸³¬¢Ž˜™u\ON\ŒØúýýþÿþþþþÿþüö÷õòòóïììëèèíìøýþÿÿþýýýþþýþüýüùûøöêååà—z‚ƒwePILN\hptsfWGKSV_goqsv{~{}~~yxwpi“üüýüüûûûûûûýüýú׿¾»·´±­®²´µ¶¸¸¸·»¹¹¹¹¸¹ºº»¼º¹º½ÄÊÉÊËÍÎÏÐÚÛáìñò÷øúøöóìòøìïíåØÛÚÑÐÎÍËÆ±²ºÅÆÁ¨uqs}{tny¾òýüýþÿþþÿÿÿýýúýùüúøôðôóìððö÷ýþþÿþýþþýýþþýþþûýùùïìç౜”‹†ˆnVKFDJWdhmomaUNFQUV^hnlw{||€€{{ywtj %©øûüûúùúúúúüýûÕ¿¾¼¼»¹¹¶²±±²µ¹¹¸¸¹¹¸»»ºº¹¹¹¹º··¶»ÆÌËÍÏÎÒÏØÞäîóùùúúúø÷ôéôøéíìçÚááÕÒÓÐÍʳ¬¹ÓÛÑ–~ywvy‡Ÿåþýýýþþÿÿþÿÿÿýþþýþþûúúúõö÷úúûýýýÿþþýýýýýýýþþýýýûõìîéÇ«Ÿ“‹”ydXRLNPYY_jmmoiXMHOPU[cfnswwx~}{}xuu *´ùüýúùúúùûüúо¾¼º»¹¹·¶µµ²°¶¹¹¸¶¹¶¸¹¸¹»º»¹º·¶³´½ÈÌÍÏÓÑÔ×âëïõûýýýüüù÷ôëñøêéëëÞçàÔÓÒÍÌÌ»«µÏÙÉ~„‚‚…Œ¹ôþÿþþþÿÿÿÿÿÿÿþþþþþþþþþûûûûýýþüþþþÿýýýüüýþþþþýþþþüóëëÞ¶¦‘Ž’–Œk]\XKOPWZX_fgooiYIIKHTY]ffmswvxwx||{ OàøüúøùúùúøÊ¹¿¾¼¼»¸º»¹¸¶µ´¶º¹·¶·¶·¶···¶¹¸¶µ´±±¿ÉÍÍÎÏÔÛäò÷øüýýýüýûø÷ôìîøîäéæÞåÕ×ÖÓÔÍÌÁ²±ÀϲˆŒŽšÎùûüýþþþþþþþþþýþþþþþüýþþþþýþýýýþþþÿþýüýýýÿþÿÿÿÿÿýþ÷ìèæÆ¶§Ÿ’’š‘y\ZXRNQQTWYXaaekhdTKFICTRY^bipsswuuyx.I†âøúøúûûûí¿À¿¿¾¾¼¼¼¼¼µ¸»»ºº¹¹¹¹º··¶µµ´µ³±´±°¯ÁÌÐÎÐ×Ýíôùýüýýýýýýûøõðëèõèßßæ×ÞÜ×ÕÖÔÐÍǺµ±»ª–——¢Ôôçó÷ûüùûûüüüüûüýüþúýþúýýþþþýüýþþþÿÿþýýüüþÿþÿÿþÿþþúòîëл¶© —”“…hPTZZVSUSUVSVWZ`giYQHKFMKPOXcegprtuvu 3DRcœóùùùùùúýß¿À¿¾½¾¾½»º¸º¼¾¼¼º¹¸¸¹¶·´´´²±±¯®«©¨ÁÎÐÑÖàì÷ûýþþýþýýýýûúôîêåòæÛÙâÕØÚ×ÔÕÒÏÏɽ»¶´µ¤¡±ÛßÜâëììêêìïòòòóôöøùý÷øøúüüüüýýþþþþÿÿÿýýüýýþýýþþüþþüôïéØÀ·´ª£›—ŒnUKMUW]U[SQRPTNNT\ecYJHECADGPWXbhjmsrs 9JYb[\±÷ùùùúúüþ⾿À¿¿¾¾½¼¼½¿¿¾¾½»¼¸¶´µ³³²°²°­§££§ÁÍÕÚáôøþþþþÿþþýýýüù÷óééÞñÝÙ×àÕÖÜÖÕ×ÕÑÒÌ¿¼»·¶µª·ÂÇÉÈÈÈÉÇÈËÏÚçéæëîëîñüøôôóó÷÷øýüüþþþÿÿþþýüýýýýýþýþÿþùñêâÆ¼²°©§£–bSHLOW[Z^UPOSPIMIPZeaPMDDEDCEKSY_ffjks    '9TWYRQQ_¿úùúûûýýüîÍÁ¿¿¾¾½¼¾¿¿¿¾¾¿¿¾¼¸¶´±²±«®ª§¦ œŸÁÔâêòüýÿþþþÿÿýýýûùõôñåàØåÝÖ×ÖØÓÔÓÕÕÔÒÏÌÀ¿¼¼¼ºÆÁÄÆÆÈÈÊÉËËÌÌéêççèçìêïñðñíëíïôøøøûüþþþÿþýýüþüýüýýýþþú÷îéÍù°®¯®¢”|g[OLKUWVW\UVOVIGDNT^_XSB>;BB=?LNSXZ`ei  *@LTUSPSORb©÷ûýýüüýþûâÃÀ¾¾¾¼¿¿¾¾¿À¿ÀÀÀ¿¼¶°®­¬«¦¤¢˜™·Ðõùüþþþþÿÿÿþýýú÷÷ôðëàÝ×áÚÖØÒÔÔÔÒÓÖÖÓÏÍÃÀ¿¾¾ÀÁÄÆÇÈÈËÌËÊÊÊÍËÞæèåæçíêèæçççììðôôøüþþýþÿþýüüüüýýýþýÿþùõìÛ»µ²±¸²£ŽylcVPLRQQX`a`_URFA?PPY`UF:7<?9@BHBLMZZ^ *DTTPNMLLKGLE–íøùïãØË»ÃÀÀ¿¿½À¿¿ÀÀ¿¿¿ÀÁÀÁ¿¼µ¬«¨¥£ ›–²ÅêýþþýþþþÿýýüûöòòîêäÛØÖÚÚÕÖÔÒÑÓÒÒÔÓÑÏÎÇÀÀÀÂÃÆÇÇÈÉÈÉÉÊÈÊÉÌËÎÞåèéççäãááãåçæìðöùùúýþýþýüüüûûûüýþþþüøïçÈÀ¹¯­°¶¯š‡ypjg]TTNQV^fef[XLB<AHR]ZO=899;6;;8ECKKQ  %;GTWQPIFGCHD=25gŸµ¸¶¼¾¾¿¿¿¿¿¾ÁÁ¿À¿¿¿¿¿ÀÁÀ¿¿¹¯ª¦ ›š•“Š‚°ÊÑãúþþþþýýýû÷ñïìêçâÝÙÖÕÖ×ÒÓÒÑÏÐÏÑÒÕÐÎÏÆÂÃÁÄÆÇÏÈÈÉÉÊÊÉÈÉÈÉÊËÙâçåæäçäÞÞãàåæçëóòôüýüþþýüüüûüüúýýþýûóêξ»³«¬°¯¢}vnrod[RQS\ihi[WOE=;CFQYVH:7;7;965<=CJF   3HWZXUOMLPJIIA4*!#4³¾ÀÀÀ¾¿¿¾½½ÂÁ¾¿¾¿¿¿½¿¿¼¼À½¶©¢›™“Žˆ€x¯ÏÑÈÄàúþýüûûøñêèèäßÝÙÙÖÓÔÕÑÓÐÐÑÐÎÐÒÒÐÍÍÅÃÄÅÈÊÍÌÇÉÉÈÉÉÊÉÉÉÊÌÍÑââßßäãáâÞàâàåéæêñõøùþÿþýûûüüüüüýþþýùîÓ±¶·¯¬®­¦–‰„‡€}z{vf\[S]acf\WOA;:6@NZ[[J9:2/8;37;<@=   7O]c[SPRTSQLNE9+$!(^¥º¿¿¿¾¾¼»¼ÁÀ¾¾½½¾¼½¾½½º½½¼¶¢˜ˆue¤ÑÑÊÊÇÈÖôú÷ôïéãßàÜÜÙÖÖÔÑÏÓÏÏÎÏÏÐÎÎÐÑÐÎÍÅÄÈÊÏÏÊÈÈÈÉÈÈÈÉÉÉÊÌÎÎÏÝßáâàÛÚÝÝÞÜÞááâìèíôýþÿþüûûûúûûüýþþýó१²³±µ±«‘ŠŽˆƒ„{ulh]V[]\]`QGB523;MW`YH=<2669<:<98     :MU_XWOPXYXQJJ@6( +V’³»½¿¾¾½½¿¿½»½¼¾¼½»¾¿½¾¿ÀÀ¸›…}vcK•ÑÑÉËËÊÈÈØâÛÖÚÙÚÚÚÚרÞÔÏÎÐÏÎÏÎÎÍÍÍÍÑÏÎÌþÁÆÌÊÊÉÉÉÈÉËÉÊÉËËÎÑÐÏÚáìÝÜÚÛÜÚÜÝÛÞáÞÞäèûþþþþûúûûûûûüýþýùë­’œ§´µ¸­¢–‘‘Œˆ…€spi[VWYZ\TM?8944?HU[ZG<5647=679<      #-.0/0-622)& "?MTURQPNUTUMHI;5$! /9BKn§¹¼¼»º¼¾¾½¼»»¼½¿¿ÀÁÁÀÂÄÅÆº“ƒtjLLŸÓÎÊËËÊÉÉÆÇÈÆÇÌÒØÛØÖÖ×ÓÐÏÍËËÌÌËÎÍÍÌÐÎÌ̾¸ÂÍÍËÊÊËÊÊËÌÊÌÌÌÎÑÓÑÏ×ÞÜÙØÛ×××רÚÚØÙÝéñùþþþÿýúûúûûûüþÿþòË…†Ÿ³¹² ‘Ž”“’”“‘ŽŽˆxra[WS^XRME9:42:DOXaWH8561356749   $!"()00101740'&*%2-8?FCIQMGA8/&')8CA@:8<W’´¹»»¼¿¿¾¼¼»¾À¿ÀÂÆÆÆÈÉÈÉÈ´ŠueYr¡ÌÍÌÌÊÉÉÈÇÇÆÅÃÅÅËÓ×ÕÕÑÎÊÇÆÆÄÄÆÆÆÉÈÊËÌËÌÿÍÏÌÌÍÍÌÍÏÏÏÏÏÏÑÒÒÑÐÏÓ×ÙØ×××ÕÔÓÖØØÙÞäðõöøüþþýûúûûúûýþþ÷Ù“|yª­†zƒ‹“˜——–—•ކvmg]UWTNBC;91/;BHRT_VG8;66;573M<     %&*'381+)22/-/74+  '/62247?HHKC;30/*+:r¥µº¼½¾¼º¼¼¿ÁÃÃÆÈÈÉËËÉÊÊǵ„fh„œÈËÌÊÊÉÇÈÆÆÆÆÃÃÂÄÇÎÐÍÇÃÁÂÃÃÄÄÅÅÆÆÆÇÈÈÊËÃÌÔÑÑÏÐÑÏÑÑÑÓÔÓÒÔÓÖÔÓÏÐÕÖÕÖÖÖØÕÔÕÕÚÝÞãéæð÷ýÿþüûûúúúúüþýꨀxy~‡™—‰mnt…‘˜——–˜˜’Œ‰ypfXYRML>>?778>HNT[^XH?7@>:<5Np<     "!)(11-11=@;<ADA>>'   #>KMQN@;/-&$ ,NŒ¯¼½»ºº»¾ÂÃÅÅÇÊÊÌËËÊËÊÊÈ·~w‹™ÂÈÉËÉÈÇÆÄÆÆÂÂÀÀÀÀÁÿ½½¼¿ÀÀÁÁÃÄÄÆÅÇÈÈÇÉÏÛÖÒÒÓÔÔÒÕÒÕÕÔÓÖ×ÕÚÖÔÑÌËÐÓÔÓÓÕÒÓÓÔÖÝÙáÞåð÷þþÿýüûúûúûýþõÃ…|ttv}…ƒqa^hyˆ’–˜™˜—“Œ‰…}ujd^UOEA9?>@:>CGMOT[SJDHDA6;3Žw"  "'1-05/7:BGIQSTWTNGC4+'"%>RWUJ;1+&$!*+2,*+#:›¾½º¼¼¾ÁÃÅÇÈÉËÉÍÌÊËÌËËÊȹ•‘˜ÀÈÊÊÇÈÇÅÃÄÄÀÀ¾½½º¸¶µ¶·¸º»¾¾ÀÁÃÄÆÆÆÈÈÇÊàæÞÕÙÙÜØÜÙÙÙÙ×ÕÛÜØÚÚ×ÑÌÇÉÏÓÓÓÔÔÔÓÔØÜÙÞàèìöúýþýüüúúûüýù׊zqkx}ytcYZYkw‡•—˜–”‘ˆ†}{xmaSK::;=?>@>9@FKOR\VLNEE6>m™N  )$069BDJWRXU[TOIIC<:7+*:K^\PC8.' )0:Q{mbS=1B«¼½½¼¿ÀÃÆÆÉÊËËÌÌÎÌÎÎÌÍÎÌɾ™˜¹ÇÇÆÉÆÅÅÃÂÀ¿¼º¶´®¦¦¦¦§ª®±´¸½¾ÁÂÅÄÆÇÆÈæððçåèëãæááäãÞÚÜÞÝàßÝ×ÐÊÇÇÇÍÏÑÓÓÓÔÔÓÔ×ØÞæíòùýÿýüüùúúýüâ—vwwrpu|}o[VWYZhu€‹‘••””Œ„~}raVH6277=9>=>@AEGGTf_XN?AB (|b80   "  =;Q`UNE72("% ").2BdXG=63c¹½½½¾ÀÃÆÇÈÊËÍÎÏÎÎÏÕÐÎÐÍÍÍÆ·¦³ÄÇÛåÑÅÃÁÀ½·²©“}{x}~z~†“–›¨¯µ»ÀÂÃÆÆÆâòöôòôôðòíêïìíåâßæáãÞÙÖÏÉÅÆÆÉÍÑÒÐÑÒÒÑÓ×Úáâæðöþþþûúúûûýî©€tnnmrvƒr`V]UYW^nvƒ“•““‡~}ypbTJ>4-07:9:968CDER[bhZKEH126)-1(       'WtobVMB722,*##" $*/+$-7¼¼»¾ÀÄÅÆÊÊËËÍÎÎÐÐÑÒÏÐÑÏÏÍÆÁ½ºÃÈðþðÑÈÁ¼²¤’kIM^^agovƒ‡…Œ—¥¸¿ÂÆÆÑëøüùùú÷ööðôññíìèêéêäÜ×ÕÐÈÅÆÈÈÇËÐÎÐÏÐÑÓØÛÝßáðûúýýûúûûüö»‡xllnrx…ŒjYbZUVWW^p…Œ‘’”Œƒ~veYND70--384167AFFQWajjbUH7&'#'64         ,¦ƒfWI@912/..-*%)!%!&##*+*"-G˜¼½½¿ÂÆÆÈËÌÍÎÏÐÑÒÓÒÔÔÓÒÔÑÐÈÆÄÂÅÏûüüéÏDZ•ˆ‚|x]O@>,2Iclr……„……”¯¿ÃÌãóýüüüüüúùû÷÷óñðîèîíàØÖÕÐÇÆÇÈÇÇÇÊÏÏÒÒÔ×ÚÛÜßìîõýþýûûûûüÍŒˆ‚vjlq~‚Š„rZXXZXTQS]n€Š˜˜–’Šƒyte\YJ;86+(-.046<FHQU_krnfP  #/3.     B‡µŸnZQF:3/-0+(/*%% !%$+2%5T¢½¼¾ÁÄÆÈÊÌÑÍÏÏÑÓÓÕÕÚØØÓÕÖÔÊÅÆÇÊèþýøøèÓÄ«Œ„~uhXJB"-=KJSe€„ˆ‰›ÀÜêúýþýüüýýýûúøöõòìïíéâÙÕÑÍÆÄÄÅÆÅÅÆÌÎÑÒÔÔÓÖÛßâáøþÿýýüûüÔ‹†Šylnw€‹“Ž…v_WXZWPNKEPewŽ’—–ƒvj_\VM@8-''('(*/6BHQW^beotm!+2163&     #P’«mWTNB6/.),+.-.,+$*'!$'.4+:b¢»¼¾ÂÄÆÈËÎØÏÒÑÔÕÖ×ÛàãàãàÛØËÈÈÉÙûþýûøû÷äϯŠ~znmna:7NVOHN[myƒŠ…ŒÆâôüþýýýýýýýýüûû÷ñîïíçà×ÖÑËÄÃÄÅÄÅÅÅÇËÐÑÔÔÕ×ÙÚßíûýþþýýûÙ”™…{rqzŒ‡ycYWTQOMOE=J^s…˜€tf^RPJ@;,.*0*,(,38ELTU]^cry!'+.-6620..   ,[§ˆ^GKNJM83.,%.55-,,.((&%0372"Fi¡¸½ÀÄÇÉËÌÍÏÐÒÔ×ÙÜÞàæîîèèæÚÎÉÊËíúýýüúýûöíײˆƒƒƒƒt\]dcYOLRdz‡ˆ¶Øéøüüüýýüþüüüüûû÷ïòñìæáØÓÎÉÆÅÅÆÅÄÃÅÅÈÎÑÐÓÖÙ×Øãøøúû÷ýûåyy‡¢ŸŽys~Œ‘’“ŒybSVTSQTRG=ACTk„‹‚ob]UTJ<9-0371//32;;BNS][dmt&&&'*/+.80*1(  (-,.BSdƒŽm[UTMEBFH@41(.28730,/.).17>4*(V|¡ºÀÂÅÈÉÌÍÐÑÑÔÙÛÜåëëïñôøòóéÔÉËØëûýýýüüýøòæß¶•Ž‹ˆ†~tlihZRRcw®ÑÝëòõ÷úüüýýúùüûüùöòôïîæÜèÚÍÈÅÄÄÅÅÅÆÅÆÄÇÏÓÔÓÕ×Ýíìñîôûüê‘vwstЦ¢ƒx‰“•’‹ybTVVSSRID;9:AKc|„}se\ZTLA5//898710/;EDMJV^elq)&&/86;935,&"#$ !#*'./78:FMTSals|‰wa^SQQPK?BCB;..1/57:51-0//7=91#1Y}ž»ÂÅÇÈËÍÏÑÓÓÕÜßèïòôöõ÷ûúôíÖÊËÜêüýýýýüýý÷é×з—”އ|orkec\–ÎÖÞäêÞåò÷ùùøùùùûù÷òöñïääØÔÐÌÇÅÅÄÅÆÅÆÅÇÆÆÊÐÑÒÕÚÞàÝÚãùýߊwssqntޱ ‚„•“Œ{dTVTOQKHB=??=?BYitrhc`TO@.%)17<6-//1=HJO\`ent),5)*67;LND:42,9AJVXSa]ZVY\^ZZXZX^dr}m\[SSPPTQJHGHA>;><8@??<=7884@<;(!,`•ºÃÆÈÊËÌÐÓÖÚàçìïò÷øûûûûûüùâÊÍÜðûÿþþýþýüÝÒÏÊŰž™–“’‘Ž}nprz•ÈÓÕØÓÍËÊ×íñóóôö÷øôòóóïîââÔÒÏÍÇÇÄÄÆÅÅÆÅÅÆÄÆÍÑÓÖÖéìÙàöúψwrtoqrt{¯·§‘”–”‘ƒeTXRPVQNJA@D:95?QfnoneZNA+)&*0;484*28KGQVYbku&-+-..6Ca‘‚O9367FLPTRR[Z^a]`_WUY]cs{n\RPMFKMNPTSVXaglovprmf]QMDDB>C7+ Ol~°ÃÇÈËÎÏÐÖÚâêîóôøúûýþýþýûûïÊÌÝôüþÿþýþûæÌÎÏËÆÂ³§¡™•”Š„‰~ ÆÏÏËÈÈÊÊÌÍßêíïïðôñððõíéÞÜ×ÖÐÍÊÆÅÃÄÄÅÆÅÅÆÆÆÆÉÑÓÓÕÑÑØìñ¯}vtxwox€…¹Á¼¨’—˜”“†kMQSSXPLJD>B662(6LZfli_L;'&&((1/62-*/:AQW[_dn.3/+-27a°ƒMB=DLRVQRQV__dcgbdekpt~€jSJHICCEKWalƒ—«¹¾ÂÁÂÃÅÆÃ¾¾µ®Ÿ“„qbF/!/Ls­ÄÈÉÌÏÓÖÛåíðõùüüýýýýþþþþúñÊÌÝôýþÿþýýùÞÒÍËÉÇÄÁ±¦˜–““’œ£³ÄÆÅÇÃÃÇÈÈÇËâéëëêêêëéðïáåØÛÔÒÏÛÊÅÅÂÃÅÄÄÅÅÆÇÆÅÇÌÐÑÐÐÓâÙ˜ƒ{wy‚ˆ•§µ¾ÆËØâ¯’œšœ™†cFMMTVPMNFCB56+#"1GTfieT@5&"+.0-/-0*'#6ALV^ae:<?BAGL_qqZOLGNWQQPP[ddaYU^cjm{„€lVRVLJLLRr‘­¾ÌÔÚÝâÞÛÖÒÐÐÎÏÎÐÏÐÏËÍÊù¢„`GK1.*/V®ÂÇÊÌÐÖßáêðö÷üýýýþþòäÛÐÓØÜÈÊØïüþÿþýýúÞÓËÉÇÆÂ½º­‡pˆ™§³¼²¦¬µ»¼·ºÃÆÇÈËÑÞâããçåßæëàÝרÕÓÐÍËÆÅÅÄÅÄÅÃÄÄÅÅÄÅÇÈËÏÑÏÖÀˆ€‚ŽŸ©¸¿ÀÃÅÈÌÓÚÑ‘–™˜’z\HMOPRTTMGFB<21%$(1DZbg]T<),.57;50/,',27EP[_ADEHLLMMONNNDCEJFKV^`_[TVchlr~eQOTPSUd†¢½ÏàêðñðìêêêãßÞÓÒÐÐÏÒÑÔÔÓÓÒÒÒÕÕÑÎÓö²¦¶ÃÄÉÉËÏÒ×àìñöøüýüþÿÿüÄÅÆÇÆÅÄÅÆÒç÷ýþþüû÷ÜÍÊÆÃ¿¯»ØÜ³u–­´§–vebs‚œ—ª¾ÂÅÇÉÓØÙÚÞãÞÝåÞØÖÓÖÒÏÍÊÈÄÂÃÄÃÅÄÃÅÃÅÅÅÇÇÈÈÍÎΩ‘±¶ÀÄÆÈÈÇÉÊÌÐÕÙ ‚Œ…sXIJSLTWUOKMG<8./%#',CUamaL=22=B@@611)"%+6JX;=BLKFKGHCAECEGROWNPTZZbenq|vaSIPU]eƒªÍáìôúøöòîíñòóóïëèßÛ×ÑÐÔÕÔÔ××ÙØØÚÛÙÙÖØÔÖÒÕÕÖÒÉÍÒÔÙäïô÷ûýýýÿÿÿýÓÊÉÇÆÆÅÁÃÑäôóðöõùôÓÉÆÁ¼·ëýýýýç£oRq‹Œpsl|m¯¼ÃÆÈÐÔÔÖÙÝÙÝÞÕÖÒÑÐÑÍËÉÆÅÄÄÄÃÅÄÅÆÆÆÇÇÅÇÉĽ²¬µÂÅÇÊÈÊËÊÊÊËÏÑÖݶ‡‚ˆ‰‡ˆ~oNGNNRPSWPNNJ@;5-% !*E[gkeO<1:GIKG<91()4E3<>IRQG>ACELPQSSMDFR]ddly€v\NSTWe¤Çç÷úýüûù÷öóô÷ö÷øøöóîçàÛÚØÕÖÙØÝÛàááâæèêããàÝÜÛÛÝÜÑÏÎÔØçôùúüýþþùëÞÙÌÊÇÆÅÅ¿ÁÍ×ÕÌÊËÎÐÏÇ»©¬àýüüûûýüÏm Œˆ„\G5[ޏÃÊÎÐÒÒÕ××ÚÖ×ÔÓÒÒÏÍÌÆÄÆÃÄÃÃÅÆÅÆÅÆÅÆÆÄ»Ÿ‚œÄËÉÊËÌÌÌÎÍÍÎÐÖ××Ç“…‚„€}tcDCKORPTOPQONK?40&$ -I^jnfL98BOVUUQD/"#(28DKLJD@AECMSSOQJEN]]`ip–²žpX]l¾æ÷úüûüüüýûûûûüûüüüýüýûöôîèääÛèÞÜßÝâåéèæçæåçæááàÞÞÝØÎÐÕÛèöùýýýñßËÇÉÉÊÉÆÄÅ¿½¼ÊÌÌÌÉÇÅ¿·‘sWÕüûûúûûûüü罟~Ckˆ^I<-+9o¨ÄÉÍÎÐÑÔÕÒÔÓÓÒÑÒÏÎÉÅÄÄÃÅÅÃÅÄÅÆÆÆÅÄ¿¢yi•ÈÍÌÏÎÍÍÎÐÐÐÑÓר×ÙœŒŠ…„ƒrgS=?ELMPUPRNMJG?:4*#! +JboreRA;ANW]_WG0(&&.&)CGI>45<>FPNHD?AFNhgdhq•ÂÃÃÀ¾ÂÎáîûúüüüýýýýýýýýýýþþþþüüýúöóòìêæöçßÝáåéèééååäáâãããäãäâÜÒÓÜêòùüíÎÉÉÎÍÍËÈÇÆÅÿ½¼¸ÂÉÈÆÅ½²‹L*2©üúúûûüúýþþóÐÅb}w[QC9075Uœ»ÅÉÊÎÐÐÎÏÑÑÐÐÎÍÌÅÃÂÂÄÄÄÄÃÃÅÄÅÆÇÌ™ig–ÈÏÏÏÎÍÎÏÎÑÑÓÖ×ÔÓÖ©‹Š‚€†}rdG38@GPSQMQQMPJC=5-&! 3OepnfTE61?MU[P:9=>91*00067;DDHEF@AIKT_efjgJFƒ¸ËÈÉÊÌÌÑØãîõûüýýýþþýþþþþýýýüüýüø÷øòðïìêêçìîîíëíîîéçæëéêëêíéÜÏÓÚèòøöËÍÍÎÏÎËÊÇÆÅÄ¿½¸±»ÅÃÄÁ¸—]4#(LñúúûüÒ\6hŽ©íï骔ƒƒˆnK28C=K—¸ÂÅÇÉÍÏÎÎÎÎÎÎÌÉÅÃÃÅÅÅÅÄÄÇÇÆÈËÎΔ©ÍÐÑÒÎÎÏÏÐÑÐÓÙÖÖ×Ù²Œ‰„‚€va<,5AHITSROORRKG?7/,%#3KbmqdP>(%%4;<9ABB:64*,4::<?CDCGDKRR]dggK@<<@W“¿ËÉÊËÎÎÑÔØáèôöûýýþþÿþþþþýýýýüûúøõôôññôïñóóóòòóòïîîðîíððïÚÊÊÓÙÛìôúÖÏÍÎÍÌÌÊÇÆÄÃÀ½ºµ«­ÁÁ¿¶ŠD(%,'núùüê¤8$1;05„³º¶‡{‹´ÃÂqexˆˆ—¨µÃÄÇËÍÍÏÎÍËËÈÃÄÃÄÄÄÆÅÄÉÌÎÍÏÐÍÍÏÒÓÑÒÒÐÐÑÒÒÑÒÕÚÙÖܽ‡‡Š†ˆ†€}€zY0&1=BLQRRPIGGICA95-+!$2JgroeN<) #'!#,41//1-47B<:7=DFFNNVQV^J71.9D==E[޽ËÉÍÌÍÎÐÑÖÝéòùüýüýýýüýýýýýýüûûûù÷öøùøøøúúúùù÷ôööôòóôóÓÈÈÅËÕÚçñöãÐÎÌÌËÉÉÈÆÄÃÀ¾¸±ž|¸¾³ŒQ;6=BCœ•HW;%-=C:9KWXhh]`zÆÙæôøüþþþþþôÙ¼ÃÄÅÈËÌÌËÊÉÇÃÃÄÅÃÃÄÄÆÐÐÏÏÎÏÑÖÕÖÕÖÓÒÔÓÒÑÒÒÕÚØ×ܾЀƒ…ƒƒ{{{P(',.7EKNJHHJJFEC;60$!%+DXkrgS<$ $&&" 9:AA>=::<DJST\WH@3,),6:;>ADK[‡½ËËËÌÌÏÑÕÕÙäéíóøúüüüüüýýüýýüüúüûüüûýýýýþþýýýýýýýýýØÉÈÇÇÆËØãëïïÑÍÍËÊÊÈÇÈÄ¿º´§W±ˆb_]^gsoÇK%0LNTs}ŽˆaRShx¦ÎåîåäñôõüþýüûýÚÁÄÅÆÈÊÊÉÈÈÃÁÂÄÃÂÅÃÄÅÉÑÓÕרÚÚÚÚÖÕÔÖÖÕÓÑÒÕÙÚÕÚ¿ƒvxz‚‡ˆ~qr{l<"*!)6>GJQHJJHGED?<3%'$! $>YjneQ<(  $"$ 58:;=69;EMXZ_M<83/,*6478:@CCGKYƒ°ÆÍÌÍÐÒÒÓÖÕÝåëîòöùúüýýýüýûûúüûýýýýýþþÿÿÿÿÿÿþþýùáÈÉÉÇÇÇÇÎÝæëíÚÎÍÌÊÉÉÆÇÄÀ½·¯£~Oq‘o‚›œ˜›•ÛÁÞÃ¥‘x†µŠwST~¤·ÏôôòÙ~M[fŸãýüûõÄÄÅÆÇÈÊÊÊÇÉÉÉÌËÊÌÐÔÜäåáÞàáçãáÞÜÚÚÙÕÖ×רÖÕÖØ»‚zvsy€ˆˆ|fcjY)!&$)08BLKNHHDFGG@?6+)&"# '>^mnbO=(!%!0.4872=ELR\J;3380*/436?6;>EE@?>8Hz³ÊÌÏÑÒÔ×ÙÞàåéëîññ÷úûúûýýýýýýýþþÿÿþþÿÿþþþýýüùßÉÉÈÈÇÇÇÆÆÏãéêáÎÌËËÉÈÇÇÄÁ¼¶ª‹w…¸ÓàëÒÕîúýýûøôã¼²«´ßêæÆ€i–µÆæøùúüòªkQfdß÷ýýÉÃÅÆÆÇÈÈÈÆËÌÎÑÐÒÔÙÙÝßáãäèíðïðéßàÝÛØÚÙÚØÚ×ÜÆ‹wvus}€ˆ„x_^^C %&.27AJJLLHGHKEE:21%##( "?Yfg^J<$ +056=FNS[O9//-12-*20:=<2??>>75/-/3HŒÃÎÍÎÒÒÕÔÖÚÜààäêìïðõöùùøûüýþýþþþþÿÿÿþþþÿþþúÒÈÈÆÇÈÇÆÄÄÅÍÞÝÜÔËËÊÊÈÇÇÄ¿®ªß÷ÿþüøùþüûûüýûûúõɪÜäõøùùóͺÖíúúûýýýýûÍnwš¾¶ëÙÃÄÅÄÃÂÇÉËÍÐÑÐÔÖÓÕ×ÙÜßåêîòõõóñðëæÝÜÜÛÙÙÙ×ØÊ‹{oqpw|~…rb_J,$##.7<DFMLMMHLJJ>;6.''# '7TdmcQ6%#!.,.9DWeZ>2*''+.,--09=:>=@;952($()+-8_¬ÇÊÌÑÑÒÔÖ×ÚØÛâéëíôõ÷ùûýýýþþÿÿÿþýþþÿÿÿÿÿþãÈÈÇÇÇÇÆÆÅÃÄÂÉÕÓ×ÏÌËÊÆÆÌÐÖÑàýýüþýùùüûúùûöÕ¢|Z=DŸúüþýýüú÷ë×¶¨ÅçøýûúúûÃm¤¾ÃÕ¢½ÂÅÅÆÆÉÌÌÎÏÐÑÔÕÖÙØÞåêðôöøøøøõñîêæÞÚÛÜÙÙÙÊ‹{wwoovz{‚|rid?$%-5:;>EIOPJIHDC<56/,)! !6WjqkP?+ (,:P`dO8()','*(./48>A6:5852+*%"&,/+-4L‘ÂÊÍÍÐÔ×ÖÕ×ÚÛÝàçìòô÷ûýýþÿÿÿþþþýýþþÿÿÿÿýÐÉÈÈÇÆÇÇÆÃÃÄÄÃÌÑÕÒÎÊËÝàöõíÞûýþýöôûüûûûüÖY6?KIOuíûüûüúûüûõï×¢zÎúùúûüs޵Áž¼ÂÄÅÇÇËËÍÏÏÑÒÔÖØÜÝáëðõ÷ùûüüùöõñíçãáßÚØÛ̆royxtqp{€ni[6$  %+297;HHJPKPOGEA74/+&"#" #=YjsjS9%-DU`R<.)"%#'$$%,1:;;;6600'&"'"$!'+*(,)7t·ÇÊÌÎÑÓÔ××ÕÜØÞàçîïöûýýþÿÿþþýþýþþÿÿÿÿíÊÉÈÈÇÇÆÅÄÄÅÄÂÁÂÇÏÔÔÛòúüþý÷ñýûüüúþûìüüæ®YSQWq”žÍøüüùúùúúüü÷빇¨èüûûý¡~¥ˆ¢¶¿ÂÅÇÆÄÇÌÍÍÎÑÒÒ×ÚÝâéðõùüþþýýüú÷óïêæåáÜØØ§rqqyvrqst|}{leM- !*,57BAAQKIKCCB91/-($!!#7QhthU8IZ^E20()$%*&#%+/8;77470-(&$ "$$!!&1R¦ÈÊÌÌÍÎÒÔÕØÖÛÞáåéð÷ûýþÿÿÿþýýþþþþÿÿÿ×ÉÈÇÈÆÇÆÅÅÄÅÄÃÃÂÀÅËÕôýþÿüûüýýûüûüþØŸëÊhYvn{Îòú÷íëÝÛûúûúúûýøôÖ˜‰¤¸ïýúú Œ”lf¸ÆÅÅÅÄÄÆÉÍÍÍÏÒÒÓ×ÜæîôøûþýýþýýüùöñëèãÝרÖÊŽtv{ytqrnpwuk^>% #"!$,.78<BMGIHEADA740'*%  /OlrnX7XU>/**&&%&% &34:<:3.0.+&%$%"'G’ÆÉËËÌÎÐÒÔÖØÙßÝáéñöúûþÿÿýþýþþþþÿÿüÎÉÇÇÇÆÆÅÅÄÅÄÄÂÂÂÁÁÂõÿýÿýüüüýþüüûýà‰qm¡²Ñ¾Èýþûûùõæœu¿úüüúúùùøõïÝ£˜ÁÉÞÛ¸º· …JsÇÛÓÏËÈÉÆÊÎÑÐÒÓÓÙÝçðöûþþþþýþýüøõñìèÞÙÖÖØààŸ||ywmompsoiS/% !%!"%-2773>=BEFJFFIF72+0'! .OhojV8A60' $#&$!""'(*5;1/+/0( $!4A¼ÉÊÍÌÌÏÐÔÖ×ÜÜÝâèïöûþÿþýýüüüýþþÿîÈÈÇÈÇÇÅÆÆÅÅÅÅÃÃÂÁÁÃúþþþýýýüóîýûûöºƒœâûóéìþþýýúù󹄞«½ÒØäôùùúûùôÙ»ÜêèëìáâÒ¶gd®ñרàáÝØÖÕÑÏÒÔÕÚÝåðõúýýþýþþþýúõñíéáÚרÝëûô¹ƒzuqquwvxiA !',/5.94:EKGJNIB>;64)'"(?^qiO1,/)% !$&! '%-5&'(# #*0;h¨ÆÊËËÌÍÏÒÔÖÖ×ÝáëïùþþþýýûüýýþþÿàÉÉÇÇÆÆÆÇÅÅÄÅÄÄÄÄþØÿüûúúùïÚëüûûæ²×ûûûäÆüýüûûý题›ÀÎØááàò÷ùûüúùö婱×öóôðñëܨ¦ÇÒÞæíììéìçÚÓÒÓØÜáíöùýýýþýþýýûöòîèßÙ×ÖßòüüøÇ‰}z{~|rZ/!!"'30/88@FDJLJLE;:7.(#<]kfP-*&+$  "#)($-%)*), $++-5@ÁÉÊËÎÏÏÐÖÖØÝÜÝäóüýþþüûüüýþþþÕÈÇÅÆÆÅÅÅÆÅÆÆÄÄÄÃÄÿºíøê÷÷ðáÓÜüûûöùþýø®\Ðûúúùûéz„°¸ÕîöôîèèóùüýûûûúÍ”c¶òøùôîòôº©ÇÜò÷öõñòöäÝÞÔÖÙäî÷ûþýýýþþþýù÷ñìâØØØ×ãöýþýõÇ‚„ƒ‰zjC$"  +-0/-6?CCHKMNFD<:3.,%% >VhhN"&%$($'+&''&&!  "&! $ _²ÊËÌÌÎÎØÔ×רÜßèóúýÿýýüüýýþõËÇÆÅÆÅÅÅÆÆÆÆÅÆÄÄÂÃÿÅñÞàØÒÔÍÌûüüüüýëŒKTÛûûûûð‡p Îäõúúõòïëîøþýûûûüô¦pŠÇðûüùôöûÛ¸ÈÛññööøøü÷ôæÞßäíôûþýþþþþþûû÷ñçÚÕ××Ýæöýüû÷óÐ–Š‰‚sY5!+  "'1..*36FKMNQKGIB;4/&$(Mbd'$!$"%(*+ %"$$'"  "#%#,RœÆÊÊÌÍÑÒÕÓ×ÚÞàèóýþþýüûûýþíÊÇÅÅÄÆÅÅÇÅÆÅÄÅÅÄÄÇÎÕäêä×ÑÎÌÌÕöüýûûüüàÌkXÓüüüüæÇºæöûúúù÷õóóÜíüúúúûüÇŠ“ÉÞðúüüúûþëÈÎâêéçðòçãüôæÛãíöüþþþþþýþûú÷òÞÓ×ÙØÛë÷ûüùöõðÒŸ“‚oI-'#$"#!!$,161)6;=LMPQPNIE>4/(,!! )H`$$!#&'$'%"  #!! #6P¿ÊÉËÎÏÐÒÕ×ÙÚâé÷üþþýüüýÿÙÉÆÅÅÅÆÇÆÆÇÇÆÇËÎÓØæïðíèßÛÔÖÒáûüøýûûüðêç·¼ëó÷ø÷ðç­Çñúûúûûúù÷òØÐóúúúûýÙ¦˜ÇÜêòúýýûýþöÊÎáçáãäÚÕÛñõîåìñøûýþýýþþûùõéßÖÙÛÚàïöøú÷òñïéÍ‚c6 % " "(61+'28ALNOQPJGC=7.+$%#!?  ($&*'   %!"" +5DMg­ÉÉÉÍÎÏÒÒÔØ×ßéöüýþþþþ÷ÊÇÆÆÆÅÄÄÇÈÊÌÏÓÖÚÝáéóøüûýøøùøýüùøýûüûòòðàîôôôôøöíÁáøüüüýýüüúòæØìøûûûôÙË­ÃãðòôýûûýüüùÌØäáßßÔÙÙêÿôÜçðøüþþþþþþüøñáÖÕÚÛÞÞçò÷÷öòïíëïÙŒN#&#! $00+#&.6HMQSPNMCA<0+((#"!'&!))($#!!  "*(! !09?EKeÍÉÊÌÎÏÓÒÖÖÜâíøýþþþþïÆÄÄÄÅÄÅÉÎÑÓÔØÞÝäêïüþÿÿþþÿÿÿþüû÷õýüý÷ôóêàû÷öø÷úùôÔðúýýüûúûýüõïâóøüüýÀÖèÔÄÞïõ÷ûüûüûüþÞÌÐÑÒÓÓØÝùàÏáèñúýþþýýýýü÷îßÖØ×ÛÞßëôùø÷öòòìñûÝj! &&% !! "/70"#&0?MVVOVREG?9/+()&!&'"&+'%!   ! #!" &1@=EKX”îìÔËÌÍÏÐÕÖÚÞåñúýþýþÕÆÅÄÅÆÇÌÒÓÙÛÛÜâéìôùþÿÿÿÿÿÿÿÿþûùöôùþýùôõëöù÷ùúûýûöäøûýüúúúúüù÷öáñûýþö‹¢ïìäîñõøûüûýüüýÛÉÌÌÎÑÏÐâÙÀÍÙçí÷ùüýýýþýùóçØÖØÖÜÞâí÷üüüúöôðéë÷Û^#(&$!!$!!$/3#"!&->MSUYSLH=93-''#%% &%    #$"   '3><CLxá÷ûûäÊËÎÏÏÐÔ×ÜäôüýüýÉÄÅÃÆÈÐÔÕÚÙÚÛßàêðõûþÿÿÿÿÿþýþýú÷õõóðûûð½‘öøôûüýþüñíûýüûúûûüûùøùäÒöúâgkäñçàèøûüþüüþýýö×ÉÊÌÍÌÐÜÉÈËÎßéõøúýýýýüøóâÔÖ×ÙÙÛàìõúýýüû÷õñéçñÁN('0!"','$0CPPTPNG?<6/,,'% #"#" !   "#$#     +4@CNrÍøùø÷ôáËËËÍÑÒÒ×ÛëøúüüÊÄÄÃËÖÖÜÜßßßÜÝáìðõûþÿÿÿþþüüÿüú÷õöóúûûí¿Çý÷óúþÿþïÌñüüûúûüüüùúúúíËãæºmcaªõóåéêìêúüûûõø÷ÏÍÏÏÌÌÉÉÉÉÊÒíóöùüýýüû÷îÝÕØØ×ÙÛèîôúýüüýýúöòêÞÙµ`..)&$&*)*%)9LTQOPMKDA:20.$#,%&   "   %.7>Lr·ÙååÚãéðàÉËËÍÏÑÓÖÛêòûùÃÄÃÏæéâàâÝÚÙØÜáëðõýþÿÿÿÿýüüÿýúø÷öøýûúðÒïý÷ôöüýùååöüûúúûýüúüþüýðÖçìÙ|–\òùõÞ¸ÑÎÐâîôôöøý÷ØÔÓÌÊÊÉÊÉÊÌÚæïõùýýýû÷è×ÓÙÜÞÝàìõöúýüüüýüûøóíßγc5.)%!%-#*BPPPRTQFG=3&%"%%!'     "   '4@Vz§Â·°²ºÆÄ½¬¦²ÆÊÌÍÍÐ×ÙÛìêÄÁÑôõðçÜÛÖÕÚÚÞáèíøýþÿÿþÿýûýþüù÷÷÷üüûúòèûüøôñõ÷ôïïøüûûûüýýýýüüýõäìòî³Ùx©îúúôØÉÏÎÕçôöööûþõÒÖÔÎÍËÉÉËÊÌÝî÷ùûüýúòâÓÒÛàÞßëñ÷øûýýýýýüüüùôíá̱q=/,$"(/ENVRVOKG:5.)$%!""(      (Bs‡“š…}uigdhchi|«ÄÌÊÌÑÒÕÛ×ÄÅìûôëÞÚÛØÚÞàäçëðùýþÿÿÿÿýüýýûø÷÷úþüüúöôþüøöô÷ùøòâùûüûüüúüüüûüüùîï÷ö꼎äóøüûôÖÌÍÒÝîöööøýþîÚÚÖÔÏËÊÉËËÑçíôøûû÷ïÙÑÓÛâãèó÷ùüýýüüüýüüüüøóìàеm:*$>JTTSRJMC85-'$  $   !%Ovv`SH@A>>KS]\^URP[‘´ÈÍÐÓÕÕÐÓüýòæÞßßàáààåæéíôøþþþÿÿþüüþýûøùþýüüúöøüýúùùûûøâÜüøýüûûûûûûüüüûôóùúð¹ÝõöùþýúõÐÎ×ßíö÷÷ùýüýëááÝÙÕÑÎËËÍÛñ÷÷÷ùôíÙÑÖÜàæï÷øûýþýýýüýüüüüûúõíáÕ¸x=+%% )BPMOSPQO=600*"#"  &)#   %+4<;;<<88?DIT^WTN>-$&Bs ¹ÎÕØÖåÿýóèßÙÜÝÜÚÜßàãèïõûýþÿÿÿþþþÿýúøÿýüûøõúüüüûûûúæÁÙýúúüüûûûüûüûüüø÷úüúéñùúúýüýúéÌÕíõö÷øùýüüõêèæãÙ×ÒÐÌÍÓãçîõöóèÔÌÓßäìó÷øûþþýýýýýüüüüüûúôîâÒ¼€?& ! 5EPURSPPJ?510+'%$   #*"  !''65157566DFRWRD6*!*4LavŒ”ºì÷ýùñîâÜÛÙÚÜÞÜáéîôûÿþÿÿÿÿþþû÷óøþüûúøöûûûýýüûïÜÖáýýûúýûûüüûûûüýûüûýýöôúûûýûüûúßÖäöùùûüýüýøðóòïéãÚÕÔÎÌÔãìñôñÛÉÆÊÚæíõ÷ùüþýýýýýýüüüüüûûúöñç×À„:)9IXUQRQEB:3.(+'#"   $%  )+-+/226CKMVMD9)"+:I^ac]N¥ÉíóîéâÚÕÔÖØÛÞàèîöùûüþþþþþýúõïúýüúù÷öùýûüýýòéãáåûûüýýýýûûûúûûüüýüýýüéöûüüûüúüøçñ÷ûüýþýþûïòô÷ø÷ñêáÖÑÎÏ׿íñÜÈÇÆÇÓäíô÷ûûýüýþýüüüüýüüûûûúøòçßÍ…7 !9NVOOOMF>82.*+&'    !#&"    !%))/175@GNLMJ9,$7DQbrp_IV«ÑÞäèåßר××ÜÞåéíñõ÷úúüþýû÷ñêëúûþüúúùøúûûýöñîêèìûüüûýýïîúûûûüûûüýýüüîË÷þüüþøúþÖÍàîöõù÷ðêïóöùúùøõðåÚÔÏÓÖÕÐÄÆÆÆÈÏÞìòøüûýüýþýýýüüýýýýüûûúøõîç×53HQSPVRMG@;.-+'%!     '#"     $",/:@IQQEB7+"(1DVjtxoX@>€¹ÏÕÕÖ×ÙÙÙÝßãèìíðòóôõõóòðêééüûýþüüüùôõöû÷ôòîîñøýüýþñíïûûûûüûûüýýûûúÍÛôýûø÷ùþóÌÓÔÜÖÛÝâæïô÷úýýúúöòãØÓÒÓÊÅÇÇÆÇÆËßïöûþþýýýýýýýüüüýýýüûüüûüùôðç“3" &>UXRNLOJA?3/-.,"#     "(      & (1>ENPOF<.!*3;M[js{xa@('8{´ÄÍÐÐÕÕרÜßãêîðññòòóêéäääøýüýþþêÇñùúûø÷õôóóöúûøóðòñüûûûûûûüþüüüüíîóóõ÷øûýýÜØÙÛÜäèîîðó÷øúûýýüùðà×ÓÓØÔÈÇÈÆÇÆÒñ÷ûþþýýýüýýüüýýüüüüûüûûûûú÷øò0 &ENRMLQHIG93/-0'"   #%!    '$,9DMQRJC0#1:EYhovzsgD&?t§ÃÊËÎÎÎÓר×ÞÞßÞÞàßßÞãääàíúúêÈÂÕùúûüúù÷ööùúùïöõôóóúüûüüûüýþûûýýð÷÷÷ùúûûýüõ×Ùßáèíðóö÷úüüþþýýûúïÝÕÖÕßìÊÅÈÈÇÉã÷üýýýýýýüüüýüýüüûûûûûûûûúûúùð‚%$2BDMFKIJJG?420*%        &'6CDNQSB9#%58Q_os|{s`>%;g”¹ÆËÌÏÏÒÔÖØÙÜÜÚÛÜáçìáÝØÌÉ¿ÈÉçûûüüûúùøùûü÷ñøøöôõöüüýüüûùþýýýûðôùûüüüýýûüÜØàãíóöùûúûýýþþþýþýùîÚÓÛÚë÷ÙÇÇÇÉÚ÷ûüþýüýüýýþýýýûûûûúúûûûúúùùúøÔR7@GCHGMLDA3,*$        ,6>CGRNF;1 *5CWgszwhW; "=e‹¬¾ÈËÌÑÓÔÖÙÚØÖØ×ØÚÖÓÎÎÌÌÎÐòûûýýûûûúüüûôôøúø÷÷÷ùýýýûôöøüûùûóôô÷üþþþüüþêÙÚÞëôúýþýþþþûûþþþüùõéÚàêïùþàÆÈÉÊèùúþýýýüýþþþþýüûùùøøøøùùù÷÷÷óí´:   6AAJJQOHE=..%!#        -2EHRSE2+#(5BM]lw~wbL0$5DTn†£¿ÊÎÍÎÒÓÔÑÓÔÓÎÐÐÎÓÖÛÚÛÝúûúýþüûûûüüõõ÷úûúúùùúúûüù÷÷÷øùúü÷ôôõõ÷ýýüþøðáØàîòøüþþþÿþþüûûûúõéÕÖèõúýüûÛÊÇÇÔðöüýüýýüüýýýýýüûú÷öõôõ÷ö÷÷öòëã¢/  %7ENJWQGG:60)%)$       #/3>FH<7, "+9JVep|}zs^B1!+=FSbpœßêèáãÝÙÕÓÖØÙÝâèìïæâáàëýúúüýýýýþÿùõ÷úûüúúûûûûüýùúùùùùúûøõöööö÷ýìðëîñÝÙÝâí÷ûýüüúùøõòðëÛÏÍÇíñþþþûêÓÊÇÈÜï÷üýýüüüýüüüüûûúù÷ôñíîðô÷öñìç×x  +?EHPPKH?>7/%$,      *35>A.% %+=N\ks€~wiX=/&.DN\gÞïûþÿþýûûüüüýüù÷óíæäáÜïýûúûýüüüýýùøúûùøûüûüýýþýûûúùúúüýøööö÷÷ùÿðòóõòí×ÚÜßæéîêæéçæáÜØÏÌÍÏÞúúþþþýðÝÑÆÄÎâïõüýüýýýüüûûúùøø÷õóìèçìñòóîéâÅX   /CLQROOKGA9/+/        ',,23# $'/DQbqw{uaM8#2<GVk ÛðúþÿÿÿþþþþÿþþûúøñìæãàÜ÷þüûûýûüüýüüûûýåáýüüýþþþüüûûûûûüþú÷÷÷÷ùûþóðö÷ôúÔÖרÙÝÝÙØÙÕÒÒÑÏÍÎÎçúöüÿþþþòßÖÒÀ½Ôàêöýýýýýüüûûúù÷øøõòïëèãâéíîéäá±B  #:POSTSTNJA:2-  "#    %*4JZhvx€zmXG2)1ATj§ÕêüþþþþÿÿÿÿÿýþþýüöñìåáßÞüþýüûüýüýüüüüýõÊÖýýþýüüüùüüûüüüþþýüúúúûüýúîó÷öýâÏÐÑÒÓÓÑÓÑÌÊÌÌÍÌØáäõýþÿÿÿýóà×ÕÐ¥±ÓÚåðùüüüüüúù÷ööööôñîìêèáÛÝàââÞØ%  5GX_YW[VQM@>- %!$      !  &*/@K^lw|wgP8$ 1=H\¨ÐÛëþþýýþþÿÿÿÿþþþýû÷ôêãàßáþþÿþþýþýýþýþþþÛÒÍøüüûüýúùýþýýþþþýìùþýýýþýøìñöøþëÍÎÎÎÏÏÍÎÎÐÎÐÓÝàåëíøþÿÿÿÿýóãÚÖÒÅšz¸Øïûüüüüù÷öõóóññîïìéàÞàÜØÓÑÓÔ·H  %=V^a\ZXYNIB2         "'/8DRbqx~}saM9 #%6D[ÍÓÞíþþýüýþýþÿÿÿþÿþüùòëçäãÝþüüþýþþþýüüýøàÕÑÍòþüüýüúúüþþýýüüüØÖëþþýüýúó÷÷ùþ÷ÔÔÔÔÔÓÕ×Öר×Ýåêéð÷ýþÿþÿÿüòåÛãÚÕ¨?4=d‘Ôóüûûù÷õóñïëëèæåçÞÚØÕÕÏü¼²j"   +N]a_WZ[TRJ;!    � #"&  %/:@[_oyzxnWE2 )08JËÑÕàòýþýûûýýþÿÿÿýþþýùñíèáàâþüûüüüþÿþýþúàÕÓÐÏïýþþüûûüþüýûûüýñØÓÈòþýýþûúøõüýüÙÔÖØØ××ÙÖ×ÛÞàáêíôûÿÿÿþÿþûîãÜãÖÑÆT' %$3[ŸÝöûùöôíëâáÚÙÖÓÐÑÎÊÇÁ°Ÿœž…8    ;QX_[]WWVOC!     &,((# +-2=DZksy{pgQ<&*7F|ÈËÏÓØíûþþýýýýþÿÿÿþþþþöóîèæàÞþýýüýýÿÿýýôßÙ×ÕÎîýþþüüüýþþûúþüþüߨÔμÇâî÷ýÿÿÿÿÿýÝÖרÙÚÚÜØÚÞááêîñúþþÿÿþþÿüòçÜ×ÖÒÏš/"!!!#<b…žªº´£¡«­¬§¢ §¡—ŽtjZY:   $AYeb_X\\TN!!    #.20*% "*+5>G^lt{yo\H-#(/<W¬ÊÌÏÕÚåòýÿþýýþþÿÿÿÿþþýúöïìâÜÜúþýüýþÿûøôäÛÚØÑåýÿÿþÿþýþýþûüþýïßÖ×ÔÐÍÏÌÃÌÕÓçíõõã××××ÙÛÜÜÙÝàãæîñ÷ýþÿÿþþþÿýòæÜØÕÐÐÅY%!'%"$' $,13<GB?A>20/(   2K`ccd\WSU"     *29:/,  !%4@O^ltyvdWA*(28CvÁÈÌÍÐÕÙíúþÿýþþþþÿÿÿÿþþüöõèÞÜÝ÷þþýþþüôìÞÚ×ÜÖáþÿÿþþýýýüüýüýþüæàÙ×ÓÏÎÑÑÒÐÐÎÎÌÒÔÔÖרÖ×ÚÚÝÞáàçëò÷ûþÿÿÿþþþÿûðèßÚ×ÓÓÑ¢5& %    #8Xhef`[]X     .97/,  +ARbnosl]N7!,26EšÅÇÊÌÍÑÖæóýÿþÿÿþþÿÿÿÿþþüúóäÝÜáôþþþûôçÚÖÕÕÖÔÜþÿÿÿÿÿýüüüýþþþýùæßÛØÔÏÏÑÓÓÐÒÑÓÓÓÓÖÖÖØÚÛÛÜßãâèêñõúýþÿÿþþþÿþûîëäÝÛÔÕÔÍi"!      B]dd`[aX     '-00$#  &1?]iprsiYE, $.46[¸ÅÈÊËÌÏÔØæ÷þÿÿÿþþþþÿÿþþþûñæãÚâöûñìîæÜÞÚÖÕ×Þüÿÿÿÿÿÿÿýýýüþýüþ÷ìáÝÚÔÑÏÒÔÒÓÓÒÔÕÔÖÖÖ×ÙÝàÛÝäëëíñôùýþÿÿþýþÿÿþþ÷ìáàÚÖ×ÒÓ²9#       .JZcfa]\        *,0'   &8JbkswtcS<)%+46;uÀÆÊÊËÌÎÒÙåñýþÿÿÿþþÿÿÿþþþøóïçáåõèèíëãàÛÙÕÔßøÿÿýÿÿÿÿÿÿÿÿýýýüÿöïáÝØÕÑÑÒÕÖÕÕÔÒÕÔÖÖ×ÚÝàáåèéïòðöúüþþÿÿþýýÿÿþýõëãáÛ×ÖÔÒÍt'$#  !"     "#@V]ca_c      &+.    %>Ocmtsk_L3 *049F”ÄÆÇÊÌÍÕÏÖÛîûþÿÿÿÿÿÿÿÿÿþýùöõñêêêâéèãáÝÛÚÖÙùÿÿþýÿÿÿÿÿÿÿÿþÿþþþøðäߨÕÑÒÔ×××ÕÕ֨רØÛààãåëìëïöùûþþÿÿÿþþýýÿÿþüôïëàÞØÕÓÓзF%! !    $6IZccaf     !"$   &CUgnpl`TD)053>V¦ÃÄÇÊÊÌÌÍÑÙé÷þýýÿÿÿÿþÿÿÿþýüøôçççÞÞÝÙÚÙÛÕÛôþþÿþÿÿÿÿÿÿÿÿÿÿþþþüõíäà××ÑÒÒÕÔØ×ØÖÕÕØÛÜßâæêëîñôöûýþþÿÿþþýýþþÿþúöñîäàÛØÔÑÐÊ‹,  "    $2DS_b]`    "   /DWdlpkZG:#+0::AcµÂÅÈÈÈÈËÎÒØêöøüþýþþýþÿþþþþüøïàà÷ÜÚÖÖÙÝÚÞïùþþÿÿÿÿÿÿÿþþÿþþýýûøõîæÝÛÖÔìÝÖØØ×ÚÚÙÙÚàâåêìññòùûûýýÿÿÿþþþþþþþþýûôðîìäßÙØÔÒÎÃa( &(%  !!    *5DRXb]^ #    3MWfniaQ?1'"'/8:ByºÂÅÇÇÉÈÌÌÑÛìñóùûýþýþþþþþþþüöèåßüèÚÞáäêÝåðùþþÿÿÿÿÿþýþþýüüùø÷òñëäÛØÖÞýôßÜÚÚÜÜÛÝÞäêìïõöúûüýþþÿÿÿÿþýþýþþþþýüöîîëêäÚÛÖÕÓΣ< #%#     *6DU_c_a      &6Q]cbcWM:)!"/58A‹½ÁÅÆÇÇÈÊÌÐÚâãïô÷ûüýýþþþþþüõïçíãú÷ìøû÷áÒäî÷üþþÿþþþýúú÷öõóôòñðîçäàÙÔðùøòâààâæèêéêíñöùýýþýþÿÿþþþþýýýýþþÿþýýøðëëçåÞØÖÖÔÒÇ{'$((# "      , *2BU^bfb !      .BXcdg`TK4# %+12=P¾ÂÅÄÆÅÇÊÍÕÚÜåíñõö÷õõ÷ûùûúöòðîîáñþþ÷åÓÔÓÞèïóúûýýø÷÷ôïîîëêêëêìëëíìßáù÷ôóòëììïïòñòó÷ùüýþÿÿÿþþþýþýüýüýþÿÿÿþüùôîëåäãÚØ×ÔÑμU%'&       '4@LWbff $ '$      "4HX\^cZJA,$*11.2]«¿ÂÄÄÅÆÈÒÔÕÚÝéííñòîëîîñïóóðîðìèäòøåØÔÖÔ×ßãëîðñôóìëëëèëëéæêìæÞ×ÛÝâàòø÷óìíôòññô÷úúúüüÿÿþþþþýýýýþýýþýýýÿÿÿþýýöðëçäâߨ×ÕÔÏËž5 '$       /6AJQXbe"!#! !       ,BMZ[]XP>5+"!"',-3<x±¾ÀÃÃÃÆÊÙØÕÜãêîìëçáßãåæçðõîéçááâßàÛØÕÔÚòãÞßáæèêíëìëîòôöõòüúãÈ»·¶¶Ãï÷÷ñçÝçööõöûþÿþþÿþýýüýüüüüûýþþþýýýþþÿÿþýûôíçßàÛÙ×ÖÕÑÎÃp")'     +9CIQVU[#"$"    2EQYZVTH5(!"!%%-?Œ±¹¾¾ÀÄÇËÑÕØßçëèçÞÛØÙÙØ×ÚÚÞâáÜÞÛÙÖ××ÔÐÝóöãÝåêíñôõõòíó÷ùüûúþóÉ·³¯¯«Ïó÷óîåØÕá÷úúýþþýýýüûûüüüüýýýþþÿþþýýýþþþþýýøñåÞÛÙÖÖÓÓÐÍÉ«B#)    #-:=FLLKJ!       #7PTUUWQ@.$%,'/M™¯µº½ÁÆÊÐÔØÜãäåÛÙ×ÖÔÕÚÖÖ××ÖØÖ×ÕÔÖÔÔÒÕãôõõîó÷øõ÷÷øø÷öûüüþýýüظ´°¯­¨âôòðëàÕÏÍÛ÷ýýýüûûüüýýþþþþÿþþþþýýþþþþÿÿþÿÿýü÷ïåÚØÖØÕÒÐÏÊÃ…)"$       '4CCEMHKA        1CRRSZJF90!%!*.a£­´º¿ÅÈÎÔÖàååáØ×ÖÖ×ÙÛßáâáÝÞÛÜ×ÔÐÕ×Ößêòöõõñõ÷÷øùúüýýýýýþþýþé¶²¯­ªª´ðòïíäØÑËÆÉÓñûüüýýþþýýýûùøöööööùûúúüýþÿþþÿþüüøîáÚÕÖÔÔÑÐÎÈ´Z      (7AFHHDD;       ":OSSWVEA2)!#"+2w«²¹¾ÃÇÌÓÔÝèäÝ×ÖÕÑÇÍò ”ŽŠŽÌðõñêâïñîéêðòô÷ðõùùúúýþýýýýþÿÿýð½²±¯«ª¨ÈóóîéàÓÌÈÊÇÀ´Õ÷ûûøøóìëêêêèååææãèðòôòôúýþÿþþþýüøëÝÕÓÕÓÒÍËÊÄ;        #2AJLGE@;       )CMTXUKE@+(!!$3Œ­·½ÂÆËÐÕÞæßÚÚÙÙ»o_RMTPRVb©åêèâÝííåàâåêñôî÷ûüýþþýþÿþþÿÿþõǰ­¬¦¨¦¢ÝôñêçÙÎÈÆÇ͍¸ÜëðóðëêéçèèååäçåÝÛßãçâæëíøýþþþþüüöìßÕÒÑÑÐÍÍÈ¿|%   .@JRJEA4      5FMTXRJ>7&" Hžµ¼ÁÆÊÏÔàèæÝÜÛÓ¨eMMFCBLFNVYšÓÚÜÙÚßßÜÜßáçïñïøùüýýþþÿÿÿÿþþüÕ±­ª©¤§£ªëöðéáÐÌÆÀ¿¿°«ÉÞ×ÛàçîðóóóñòòîïìçàßÛÝÛÞàâàîùýþþþýüùïáÓÑÒÑÌÎÉĪH      *=EQHKF>        9HRQZLB81$bªºÁÅÉÍÒÜèçßÝÙµjE;DIB>7>AGMWŽÈÒÛÖÔ××ÙØÞàçîïïøüýýýþÿÿÿÿþüþ鸰©©£¥¦Ÿ¼óõðæ×ÉÉȿûª´ÏØØÐÂÁÃÉÑÍËÏ×ÝåëðòìçßÖÔØØ×ÕÕàñüýÿþýýúñàÔÒÏÍËÉÇ¿ƒ+     .>MLJCI        )=MONSLA9. )†´¿ÄÉÑÑÙçäßÝÁoD5/0<@:7964ABOÅÎÒÒÔÔ×××Ûáëíðíøüýýýýþÿÿþýýú½­«¨§¦¦¥ŸÖõòíäÔÎÌÊž¸©ÂÕ×ÖËÀ¿¼Á¼²®¦®µµ¯¸Ç׿òâÑÒÑÑÑÐÖÙßõþþþþüûôäÔÏÎÏÊÉÄ«K   )4DGKMT     .@LKLJE=2!O¢»ÄÈÍÎÕàáÝÑ‹F)(+))67:2/++:<BrÂÌÏÎÒÑÔÕÕÙÝèîðîøüýýýýþÿþþýýÖ­©¤¦¥¥£¤§äóðéÛÑÐÏÎÆ½¶²ÕÛÔÔɾ¿Á¾³³¯¨±¹©ž§­¯Åܪ¤ÄÍÐÒÑÎÍÑÑâøýþýýúõèØÎÎÌÌɾ„'       )<EKW`       !3CLEHIG4* 8ˆµÀÈÌÏÓÜÚÙ»e5%'"%()7;;31,-267e¼ËÍÍÏÑÒÓÕ×Úçððïøýýüýýþþýýýòµ©¥£¤¤¢ ¡³ìñìãØÐÒÓÒĺµÀÔÔÔÒÉ¿º·°«©´²¢§®±Î·2&K‹²ËÓÑÎÎÍÏÚíûýýýûøíØÑÍËËŪA     3FR]i     -=GNPSEA,$ )r¯¿ÅËÍÎÓÛØžJ'$"(&"'+9?<742*,18X¶ÈÌÌÌÏÒÓÖÖÙèîòòùýýýýþþþýýþЬ¦¥¦¢ ¡£ŸÁïðéßÔÎÐÏÍÀ··ÏÓÐÕÐÊÂüº°¨¯´ª  ¯°¾ÇT#>c|›·ËÏÎÏÑáõýýýüúðßÑÎÉÆ¿~      (?^bq       !6BHJKL<;*  Q©¾ÅÉÉÌÒÚÌ‚@& "!#!,7@>;46*,,:JªÉËÌÍÎÔÔÖÖÛéîòõúýýýþþÿÿýþï·¨£¥§¢£¢  ÓíîèÝ×ÑÒÎɾ¸¾ÑÐÓÒÍËÆÅÀ»ºª§´±«¬¬¶ÂÊ{ (0;:EVs¤¿ËËÌãøýýüúôèÔÍÉÅ­G    6Sgv       -:GIECF6.-  i»ÃÇËÌÏÓ·b9, !*36=;646626O¤ÇÊÊËÌÑÕÖÖÛéðôôùýüýþþþþýüÔ¬¦£Ÿ££¢¡ ¦áíéãÙÒÑÒÌȲÃÑÒÔÏÊÍËÇÀ»®©°¾»´¸²¹Ï´/ .050-)*Hu©ÁÅÎéúüüúöêÛÐÈÀŠ'    (@`r        4=KIFC</-"  'ƒ¾ÃÇÏÖÕžS:,&#1=>@>QL>44JŸÅÉÉËÌÐÕרÙéñ÷õúüüýýþþþýöº¨¤¤£¦¤£ ž¶êïêàÖÑÓÑÉĺ´ÌÏÓÒÌÎÏËǾ¸¨§»½¹º·­·Å_ /43+(& "8YŠ·ÈÞòüüûøñãÓǵ`    0Pd     �� '6BICD@5,' D¡¾ÃÈÙØ¡<3+%!""%-:BBR©uA40>–ÃÈÊÌËÑÖרÝìó÷öúüüýþýþþþᬩ¥¢£¤¢¢ ÆîîæÜÒÓÕÐËݾÏÏÔÍÎÓÑÊÊÁ³­²Ã»²·²­¼  +0//&(  "Cs°ÇÚùûüúõèÖĦI     !7L       �   (9CB@B>2+!  ]¨¾ÅÇÞ¾Q&0) !")2;G‹²»]85?ÀÈÊÊÌÐÖÙÝèð÷ø÷úüýýýýþþû½©§¢¢¡£¡Ÿ˜ÓðëäÖÒÔÖÑͱÉÒÕÕÎÐÒÐÉ̺´¶»Ã¼´¯¦³¬*  '44("#,[¡Ãà÷üûùðÞÅ£E !   %4        0>HCF?53*   E›ÀΧ~M $*!#%04Q§·ë˜=76v¿ÇÉËËÍÕÙÞéòöùùûüýüýýýþ믦¤¢¡££¡Ÿ—ÜíìäÖÖ××ÒÊ»¸ÏÕÖÔÏÐÑÍÊ̽µ»Á¶½½®¨·Z $2),*!$XœÂàõúúõãÌ›I     )         !6CBAA:.&  t©Ž4!&6M§ëïˆ87:j»ÈÉÊÌÓÙâæíõ÷øøúüüýýýýüÒ©¦§£¡£¡¡ˆ‹çíéäÚØØ×ÏĶÇÕרÏÌÐÔÒÎǼ¼ÄŸ·¶¬³‡  #,(-( 1b¤Îëùúøï΢]&            %3?>>970   "(  2‹ðôÛR469aµÅÈÉËÓØãëòöúúùûýüüüýý󹤤£¡Ÿ  žk•çëèáÝÚ×ÖÏ¿¾ÐÕÙÙÍÐÖÖÕÎÆ¿ÃÆÀ¸¯ª¹¥4  %)$"   &`¥Éôúùñ×µƒA              &79><:.&!    ! '5ìð¥?;97R®ÆÉÉÌÕÝêîô÷øúúùüüüüüúÚ«¡£¢œšŸ“mM£èëæßÛ×ÕÔÎ¾ÌØØÙØÔØÙÖÑËÉÆÇþ´¤®µ[  "+!&   >€Áì÷õçδv/             &+2:>96/%!    &  %8—ïì8889N§ÄÉËÌÙçïô÷÷øúùùüüüûøñÇ¢ž¡Ÿž¡ šy>JÁìêäÜÖÖÙÔÇÄÓÙÝÛØØÛÙÒÎÇÉËĽ¸¦§¾ƒ   ',%'     ?wËçëêåÛ£H5$               &89@73/*"      ”! (:§ðä_7039GÅÉÌÐâîóöøø÷úúøýüúôòã¶¡¢¡Ÿ ¥ ‰L4^ÚîèáÜÖÔÙÏÀÌ×ÛÚÙÛÞÜ×ÒÐÍËʽ´ª¤¸©3  +($(   HÀËÜâΗ{V            �  ,6>60-.#      <ºîÖW70/6A‹ÄËÌÖìóö÷ù÷÷ûøøýüòìèÕ­ž¢¢ Ÿ£•d23tâíèß×ÕÔ×ÍÅÒ×ÛÚÛàäÞÙÒÑÒÏı©¡µ¿\   !)%+'   L½Ò¿`.           *10201&#     SÔí¿H60229uÂÊÒàîöô÷÷÷õ÷÷÷ùõéâÚÅ©¤¡¢£˜u;'1’êíèߨØÕÓÊÏ××ÙÞßââÝÝÓÐÑÉò©·Ì‰   !%#"    &6                '27.-&&!     _Þë¡>;9636lÀÉÖéòõöõööôøõôòëàÛÒ¼§¤¡£¤›€I1-<¯êíèâÛÛÖÔÏÚÛÚÝÝâçæàÝÒÐÎÈÀ¸³È°0 ')(!                  ,-14.)"#     yåéŠ746208`½ÍÞëôõóóóòñøóïêàÙÖʱ¥Ÿ£££”]802EÃëëèäàÝÙÕÓÜàßßâæèäàÙÓÌÆÉÁÁÈÇQ    #(+"                 )002'#    ! —æâ|=--,//C´ÔèòóóîíðîíôìçÞ×Õп©¥¥¦¨¨ˆF92.\×êéæäâÝØ×ÛßáãáäèæÜÚ×ÔÉÄÃÂÌÐ   '              **..(      ®éÜl770.-.7§ÞïôñíêçèçêðåßÙÔÕ̸©§©­·¶s=<63pàìèçååÝØÛÝáàåéêéæÝÛÚÑÉÄÀÈÔ§      &#            .(-##    &"$¼êÍT-1)**,/çðôðæÞßâáèëÝÙÖÒÏDz¨©±¼Ê¨S:152”æëêéçåÞÚßßåæèéêèäßÝØÑÊÅÅÓÂ9  $              +'&"     *8Îì²=++%*()-—ëïîçÞÚÜÞÜåßÖÕÓÐÏÁ°­´ÂØÎl;:15=±éììêçäàÞáäççéçèåâßÛÕÐËÈÕÖS                 !#%(     +*  TÓåš/()"&($&~íìèßÙ×ÝÜÙÝÚÒÑÐÏɶ³½ÊÐß =0242JÈèêêèåâàáääææçåäßâßÙÒËÌÑÔj                  &'$      #+& vÚà‚'%'#!"({çæàÜ×ØÚØÙÙÔÒÐÍȼ¹ÂÌÑÔ³O/+,./YÞëêëêçåããæãäæèéæàáߨÏÊÐÕ…                 !%#       %  ™Þ×i'"$!åÝÚ×ÖØÙÖÖÔÐÐÎʼ»ÆÐÔÔÍm.)+)*.yãííêëèããáåçäåéìéâÝÙÐÊÍÕš                         ªÝËO$""ØÕÙÙÙÙØÖ×ÔÌÎÌÅÁËÒÑÕÒ‹/$!'(&/ŸçëíêçãáäâåäãâçëçâÛÓËËЛ"            �        1¹â¼G#")’ÒÔÕÙÔÖÖÕ×ÑÍËÉÇÕÜÒÓÔ¤<('%(%#5¼éìëëæáàæåéäâãêêçàÙÏÎÑ¢                          TÅã«E&##"%%1¬ÖÔÕÕÕÖÕÖÖÏÍËÈ×çÛÕÕ³S6,)$'),PÛëîëëææçëêéçåäççãÞÔÑС           %,,"     �          }ÏØƒ8*!##()=ÀÛÖÔÔÖÖÖ×ÔÏÏÌØâàØÖ¿`812'"(',xçëìëééçééèèææèèãÝÖÑÐ          /:C@2                   “ÑÅ`-("# !#'IÍØÖÖØÙÛÖ×ÑÐÐÔÝÜ×ÕÂk;5,-%&')5™ììììëêèèæåæèëìéàÙ×Ò‰          @SZ[H          �      šÓ·^*!"RÓÖÔ×ÚÙØ××ÓÐÐ×Ù×ÔÃs92,/*()),=²ìïëéëëçæåãæèëëâÖÖÍ          %RhnlZ-            !¤Ò¬L' !!]ØÚ×ÙÛ×ÖØ×ÑÏÐØÖÖÊ|92/)-&*""+VÙíîëëëêææãâåçêæÞØÎi      ,Ytzzh:      �     ! 4¯Ò ?$!"+gÜÞÚÖÚÙÙ×ÕÒÐÕÚÖÏ6*.''*")*',}çîëëèéçãáàâåçèãÞÎX�        0d|€pD       �      /°ÍŠ8"%$+wÙÚÛÙÖÖØ×ÑÒÔ××Õ›<% &##)'-+*4£êëèèååâáßÝßäèèÞ·=       /`u„{nD                   =·È{/'-"#""2‹ÕÚÛÚ×ÖØÖÓÖÙØ×³L*$"+&"#(*.7ºìëêèçæßàáàâèèá¢,     5ay‚€pL            BºÃk(!"$#+<ŸÔ×ÚÚ×ÖÙÔÕÙØÕËf,"!$'$'&()>ËïîíêèäßßâäæçÚ}"     &Yw€nG"           N½·a +%.*I·ÕØÜÝØÚÛ××ÜÚÒŒ- ! !#"%$(^ßñòïëèáàÝÞãáËX ��   NjywdE*     �    O»±`&##/1UÃÔÚÜÞÝàÜÜÝÞܲA %&/çðóïçäàßÝÝÖ¤9  � �  Efnm]H-!#    �    O´­`+#/jÅÒÝáàââÝÛÚÝÉc$">·îðïìæäáà߯t!  ���  #Fjtr[N8'"        V²«\,#! " 0{ÈÏÞæäæàÜØÖÕ“2!"NßñóðèäãàÛºP �  5_{Œ†oZ>)#    �     �]²ª]*#% !'+€ÈÑÜåèãÜÙØÖ¶M/'' *}èóôîçåàÓ’7    Gp‡–|dC5#   �   W®§[, #"0‰ÇÎØãåâÙÕÕÈq:0+#,‘åóóìåäÎ|*    +Tv™•‰vZD6#   ���  �����   ��V°¤X(# 1•ÆÎÖâäÜÒÒΓA2+&" &P¢ÙñðêâÊs% ��� /g~Œ ¥‘ƒqYI3    ��� # �]³ªZ)#$&7›ÉÕÚÝàÚÒѸY8<+%"U«¥ÄîðçÃ]   �  =vŒ›§ª~sfO0      ���   a²¨_)(,%!$>¤ÓÝãÝØÑÏΊ7+8/"$SË᱿èè¶I    K~©¯®§œ”‰‚oO<1&       ��     `®£_/ %$)#$9°ÚâàÙÒÌ̺Y&", 3®æå¹¯Ç :    �R„Ÿ¯¸±°©¤¡—‡fT>;+  � �����   \ª¡\- "#%":»ÞßÖÏËËÇ1!'–Ýçæ¿\#   �"Z‹¤´½º¶·¶±§˜{aPB8'  �����   ������   �^§ŸW'%<´ÔÒËÉÉǯRIÑééÜžA    ���������+f“­ºÁÀº¾¾º²£ŽwbJ91   �����    �� [¨¤e):¢ÇÅÂÄŲj/(‘àçÊ{1    ����� 8t·ÀÆÄÁ½¶©›€jZI; ��  ��������    M¦§i+=”µ¸´´£d-$   !Z±®{D"       ������������ D~¤¹ÄÈÇÃÁÁ¼µªœ†sbP;( ��� ���    ;—¡e/!B‚™–‘{I%$  J“ŒQ(       ������@Ь¼ÄÇŽ¾¸´ª£ŒzdT@)          &x•f3'!"'!)?SYOB.%")% e`'     � <‡«»ÂÄÃÀ¼Á¹²©Ÿ|l]Q9   �  ������    b‡_8.(!'#        ���������������� 2|¦¹ÀÅÂÀ¼Á´²« ”†l`T=$  ��8   ��  "kl@('       ������+r¤¸¾ÃÃÁ»µ°®©Ÿ’…n_S@(   �$            sšxH&#     ���� /j µ¾Á¿»³¯§£Ÿ’‚naUF1         � u›{I      ������.^–³¿ÂÀ¿¼³­¦ š€m_PJ7'       �     q’m8           ��5]±½ÀÀ¿·°§£š“ˆ~n_PG9/      �   � 2ƒ‘g)       �� =]Š­»¿À¾¸¯¦•„ym\OI73    �      O‰ˆQ            !Be…©¹½À¿¹²¦˜Œ‰yl_OK=3#     �      #<gq3        '  �  'Hj„¡·¼À¿½³§–†~ytk_WN@3'     �      3FOYge6             ������ *Jj‡Ÿ·¼¿¾º²§™‡|uml`YNB8*  ��    "#;U]YNB%         �� �� *LeŠ—®»¾½»µ©›†xtjg`YOF@-%        '47;;8GE8 "     � ���� (Hf€”¨¸¾½¼¶® ‰wnifcZUMF5+    �    (>SQE5(            ���Cau‰Ÿ´¾À¾¶°¦‘|ka_`[WOH<2     ��    %DYTI1  *"           ��2Ui{“¬»½¼¶³¨•~pa^^^YRKG9&  ��� 5K`Q1   $"     ���  �����?]u…Ÿµ»»¸µ©œƒi\`X[UPQGD,  �   %*-'$&&)<DF?" $        ��   �(Fg•­·¹·³­ŸŠne`XURMII?3 ! %&"" �� !#!"*02@;8859@D?>889:62./03/2(,!      �  � :Yu‡±··³«¢xaZWWRMKL@6!  !%).)&$  "! % %/:=B95;9<?CFFLOQJJOTRJA1!       ��  .McuŽª´´°ª¤˜bYUTPJHJA5+ $#!�� "#$ (2698.1@CHBHKOTZZ]_YX^bY5!        ���   "3Ll€›ª¯¯¯©špXQTFGEB>3(    $($&"#  )+7/('/6=?IHMRRVY_\XPNPTK3#       �   -AZwŽ¢¬®¯¦ ”`ORIDE@=11#    �   !"' &*'/4:48DLINLE?88A6)  �     #   ";Ke~—¨«­§£šmTOE?>@70.%  ��   !$(%*$&((%"         #    2C[r‰¤®®¬¨¢–x]ODD98422&  �           �    � *    %<Se|˜ª®­«¦–‡o[JA:926-(   ���   ���      ���� /    �0F^q†¢­­«§‘|cL<55/.*&   ���     ����     ��� ��       *:T`€˜ª®®«¥™‹nTB853./*  �     �    � �       0IVt£°³®ª–zaM;8122*%"  #  ���                 *BSg€œª²±­¦˜‡nSF>2/3+#"     ��     �        =O\tŽ¡­±®¨ž|_LB52//+$  �    ����� �   ���       '@Ti™§­ª¦¢•„fMD;/0+(% ��   22��                  %F\w¡­¬ª¥š‹x[I=8670*#      ��         �        .Ji•¥«©¤š‘cPG8936-#        �      #         ,Op‹›¥§¤˜’…kRE9943.!!                         )Vu›¤£•‡s[I@:73,*  gjc^geiecq¤½ÂÁ¾¹¹¸¸¸ºÀÃÀÃÁÁÃÄÄ¿À¿¿¼½¼¼¾½À¿¼½¼¿À¿ÀÁ¿½½»¸¼¾¿À³ofq…ž¤¨­³–J !Pnyy||xvxwwxxzަ»ÈÍËËËÎÎÏÍÉÉÉÇÆÃ¼«•kF?NXdg`NB("(3$7ZaIXuGT/%-)<40%"%A;++MB@JGPIA&[fdVP¤­¤Œ4`e_)*Wn{„……s`RTQOT[\_Z_ÇÌÈÆÈËÏÊÉÎÔØÙÚØÙÛÜÜÛÙ×ÕÓÓÑÊÉËÎÒÒÓÏÏÌÎÏÎÎËÌÉÈÈÄÂÅÆË̶®¯±¨©ª­®¸º†5"#Omx{~}{xzy{{wz}‡šµÇÐÕÖÖ×ÙרÙ×ÖÕ×ÕÑɳdKQ_lrreZD' *;2:fkif€u=()!(CSmtO`VEC-9WpNO3LU=Wj}oGSu¤¯’9pnjP?csz}‚q_`,,<37?AIIKVb·ÌÊÉËÌËÉÉÉÐÔÚÙØÖØÜÞÝÙØÕÔÖÒÏÎÑÐÒÐÓÓÒÑÐÒÏÎËÌÉÉÊÇÄÅÆËÍǾº¶³°­­¯¶¾ªa%!Mpx„}~~~y|‚‡•®ÆÓÛáäæééêëìêêêëçÞʪy]dhv€ƒ{o[C0"2APG8"$Skz‡’••”Љ‚z|ƒˆ‰‡…‡Œ˜”–£§¥¨ŸŸ¤ ¨«²·²¿·½ÂÀµ­™ƒosˆŽˆ†}twm0AA=;FPTLY]šÊÎÐËÌÇÃÇÉËÏÖØÙ××ÙÚÞÙØÕÑÑÒÓÒÍÍÎÎÏÔÓÑÐÏÎÏÉÈÊÈÆÄÄÄÅÆÆÅÀ»¹¶´¯®¬²·µA##Ejv}}z~}€|xuvw|ˆ˜±ÂÐÛãåèéëìííëêêåØÈ¬igoyƒƒƒzoZD4$7ELQF0%Edq‘–—™˜˜“’‘Ž”œ¢¨«®­­¯±±°³¶¹¼ÀÂÆÉËËÌÈ¿«–…™˜‰|}{yBHIIKNS[QX[o¶ËÏÎÈÁÁÄÆÇÉÏÔØØÖÕÖ×ÕÕÔÎÏÐÐÏÉÊÆÇÉÐÍÍÎÊÇËÊÆÆÅÁÁ¾½½ÁÁÁÁº¶²³®¬©©­²¯~)9_pv{vvyxvsrmmjpw€¦ºÊ×ààßÞáâäââßÜÑ«Œpgpx‡ˆ‚ykR@) -8@LVJ-# Riw”˜š™˜””““‘’™¡¨««®®±¯®¯²¶¹½ÁÂÆÊÌÌÍËñ¢—¡Ÿ’‚x|}}y\d]W\_]_XZW`ŽÁÌÊÈÂÀÁÄÄÆÊÏÔÔÓÓÐÒÓÓÑÎÌÍÑÐÈÆÇÈÇÊËÊÉÆÄÄÃÃÁÂÁ¾ºº¹¼½½¼··³±­¬¨¤¡¨±«o6/Venqnpprokjc][`gpz†–¬ÅÒÓÓÐÏÒÓÑÓÑËǼ«‘yoqz‰ŒŠ‚sbS=%!%3BQV[QD*>^j{Š•™››œ˜––•’’“—¤¬­¯®­°±¯µ»¼¿ÁÃÆÊÌÌÎÌô©£§£œŠy~}{|S^WTZL^\[^Wap³ÇÊÈÄÂÄÃÂÄÅÇÎÎÏÍÍÏÏÒÐÎÏËÏÑÊÁÅÆÂÇÇÉÈÄÁÀÁ¾À¾º¹¹¶º¹³³´´±¯­«©¥ ¡§¬”@?!H]dfbedef_YQLNOUbnqyª¿ÆÅÅÂÄÅÆÄÅÿ·¥“‚vrw|‰‡‚ym]K2#!,'.BQT[XS;&,M]p}Š—›œšš˜–”“‘‹˜ §¬­­­®®±´º½ÀÁÄÈÊÍÎÏÉÀ¶¬¨©Ÿ”†}|}{{|TXUV_\\\^\Vcc“ÁÉÌÆÃÃÂÃÀÁ¾ÂÉÇÅÇÍÏÐÍÐÎÍÍËÇÁÂÂÁůž½À¿ÃÁ¾½º´´´µ´±®®±¯­®®®¬¤ £¦§w, &#'!)COUVZXXRKH@=:<@N^_Zf†£³»¾¾¾¿½¹»º¶²§™}vx~†ˆ…ypgT?4&!#(01?KTY^XK+'0Sfq|Ž”›™š˜–”“ŠŠŒ“œ¤¨ª«¬««¯µ¸½¿ÁÄÉÊÎÐÍǽ²©©¤™‹€yx}}|{XXX[^VYYZTRbak°ÉÌÇÄÃÂÀ½»¸»ÁÂÁÃÇËÌÍÉÌËÊÈÃÀ¿ÁÀÂÂÄ¿¾¾»¿º·µ·²²³´´²¯¬®°««­­®«¦¥¦§£\)0,(!(6GKMMLC;73/+.4=KROGQ}¯¹¼½¹³±®²®¬¢™‚{{|{†„}vpbQD3$"'-8KJPUZWV?,+D\eq‚Œ’˜™˜•“’Œ‹‰ŠŽ”™¡¥«¬«¬­´·¼¿ÁÄÇÊÍÒÍ÷«¥¤Ÿ’ˆ~}{~|}|VVZ\^TMPLWS`]Z‡ÄÌÇÅÂÀ»¹¶³µ·¿¾ÀÃÄÇÈÅÆÅÆÃÁ½¿À¾ÀÁÀ¿¿¼¾¸·´³°¯²¯°²µ²³±°°®­­¯®®©§¦©¬›:%")#(5HFC<610-*')-4<IH>>Y†¦µº¸´®«¥§¥¤œ—•‡~z}‚‚zrj]Q<*$26?MJQXV[ZRD)")3IU[ew~Š’——”“ŒŒŒ“šŸ¥§©«¬²´º¿ÂÄÆÊÌÐÌ¿±§¥ž˜Œ„ƒ}~~|~NZU[VDMMHYYab^o¸ÆÉÄÁ»µ·µ³°¶»¿¼½ÀÅÃÅÈÄÁ¾¾¿À¾¶¼¿¿ÁÀ¾¾»¹¶µ·²°°²±³²´µ³´²®®­®®¬©ªª«°x!! ;FC<5,.-,)-+,6:>@>9Ci’¨±±¬¥ ž—˜š–œž›‚~~||zzsnhVH8,68CFLSV]`\\N<#44FRYblx‡•––“ŒŒŒŒŽ”—¤§«­°¶¼¾ÁÂÄÊÏÎÆ¹ª ›—…}}}}€‚ƒTYPM8;?C?SR^ce^޼ľºµµ³³²µ·¼¾»º¿ÂÃÆÄ¾½»¹½¼·¹¼½½½¹»º¸¶³´±­«­«¯³·µ´´³±­«««©§¨§¦«¬X)R2/51/+*))&**0038421Fmˆ‘”ŒŠˆƒ~}y}ˆ•”Žƒ{||{zxxwwqhSH>92DHORV[aedeQ8 0,HRVXisƒ”””’ŒŠŠŒ‹ŒŽ•›¤©­±µº¿ÀÁÆÊÎÎÅ´£˜“†~{|}„€}‚XaPPQH@ADTO]da`h ¾Á¼¹·µ³³´´²´·º¸»¾À¿¿¼¾·º¼¸µ¸¹º¼¸·º·µ´³±®¬¦©«­±¶´¯±³°¬¨¤¤££¥¡¢¤ªš> 3F&$.10//-+)-()/,1/,)3H^imhhg__`_alz||xsruyzzz|{teUKJHIILNR`dillaP,/;9KM\X]r„•”‘Œ‹‹‹ŒŠŠŽ•¥¬²µ¸½ÀÀÄËÐÎî™’ˆ€}|€€„…ƒ„…OLTOKGA:>PLae[^a„¶¿¼··µ³³°°­²´´³´¹¸¸»º¾¹¹¸·µ´¶¹¶µ··µµ³°­©ª¦¨¯¬¬¯­«¬­­¬¨¢¡ž¢Ÿšš˜Ÿ§r*>5 //./.-+'+)%($&%&&+:IQRSQPOFHGEOZ`ehhrtwwy}‡{q`TN@AFDFT]hlqmhY<,2=CM[[bt„––ŽŒŠŠ‰‹ŽŒ‹ˆˆ—Ÿª±¶¹½¿ÁÆÌÏÉ»¤‹ˆ}{|€ƒ„†„…‡JLOPOKMKIQO]^X^`l©½¿¼¹¶²°¯¬«µ·º³±¶¹¼¼º½»ºµ¶¶¶´¶µµ·¸³µ±°®¬ª¨ª©§§¨ª¨§®«­¦ ž ›™——ž–6%<693*,.*-*%# !!!"&,4=GJJLJFFDA96>EQ_dnqvw„†Œ‡~iXM??;=LV^hptttfO0*<BIPWU^j}‹”–““‹Š‰‹Š‹Š‹‹‹Ž“›¥­´¸¾¾ÁÈÍÎÅ´œ‹‰z|}‚„‰‰ˆ…MMHPVTUSVXW]]Y`\X€³¿¾ºµ±®ª©«¯²¶²³³³µ»»»¹¸´´µ²®²°°°³²²²®®¬§ª©¨§¦¦¨§¦©©¨¨¤ Ÿ¢Ÿ›˜™š¡…*,0"8BB<01.*' $""#%&0:CHKJOKJIFA726@MV`kqw|†Œ““„r^I?2()@^cgpvxztfU*3>LLPX]bt…’——“‘ŽŒ†Š‹Œ‹ŽŽ•ž§°·»¿ÄÊÐ̬‘†ƒ~ƒ„‰‰‹ˆRMOR[[[US[RVXYW\Z[–»½ºµ°¬ª©«®°±±´³µ²µ¸··¶³³°­­®®­­­«¬±®¯®«©©¦¤¤¥¦¨¥¨¦ª§¤£¡Ÿ ¡œ›š—™¢_#+5 4GQRLG4-($!&((013>EHKMMQLLJG@8/7?LWinsz€„ˆŽ“—‡yeF7* 0LddjquzsdJ&(<EOMSZci}Ž•—–”Œ‰‰ŒŒŽŽŽŽŒ’—Ÿ©²µ¼ÂÉÎȹ¡ˆ„ƒ‚€€‡‡†ˆŠ‰‰NQTUZUWZV\SVWOXTRRr°º¹°®«ªª¬®¯²²¯µ´±®¶µ·¶±¯±­«­«¬ª«¦©¯¯®¬¨¨§¦Ÿ¢¤§¦¦¥¤§¨¤¢œ œ›™–™–&3C))8SU\YUA7( !#.7F@GNONMNMLMMNLD?8=HO_lqw|„ŠŒ’–“Žˆ~oVA;47Xbfmpv|€„|n`G+4EEGQ[[cs‰‘™–”•””’Œ‰‹Ž‹ŽŒŒŒ“™Ÿ§°·ÂÇÈ­”€„ƒ€ƒƒ„ˆˆ‡ˆˆˆSQTZZXYVYWS[SOXVQOU“··±­«§¨¯°®¯®±²±¯®³·¶¶²¯ª§¥©¦¨ª¨¨§¬®°®©©§¤¦¢£¤§§¨¦§¦£¡Ÿ¡ŸŸš–”“—¡c)<”u<HUY^[XK<''4IRWYYXTPMMJNPOLJGDGQ]jv{‚„‡ŠŽŽ‘Š€n]LCFZehmsy~„†ƒ{l^U2'2CLTZ[`e~’š™—”’“’”‘ŽŽŒ‹Œ‘”— ¨«¶¾½²¡‹ƒ„‡ƒ…‡†ˆ‰ŠˆˆŠ‡UUSXOSVZYUIVVQTLOEH\ ²°ªª¬ª¬­®­¬¬¯±±²¯°´®¬­¦¦£¥¨£¥§¥¦¨«¬­¬¬¦¤¦££¥¥§¥¤¨¦¥£¢¡Ÿ¡žš˜–’’˜¡5.E“[@GPY^]YK6 5M\ddaZWRQMQRQVNNKKOVgl}‡ŒŠ‹†„†‹“™—–”…s[PNWdfmrx|‚‡‡ƒymbP)6KO^\__n†˜š•“’•–—––’ŽŒŒŒ‘’’––™ ¦«¨š||ƒ…‡ˆ‡…‡…‡‡‡…‡‡…WWRSPQWVKTOTQPMGB?8<o¨®¬¬­­­©¨¨©­®±°¯¬°±¯©§¦¦¥£¢£ £¥¤¤¦««®«©¨¥¦¥¥¥¤¡¢¦¤¤¥¥£  ¡žš™•žv#$5P†P?CJYZ[VG.#7M`gd``\[RNRSTUSRSRW]p|‡Ž’އ}‰’𢍩¢•}j]XYehls{{…ˆˆŠ„ylaMFTWbaciy“ž¡›“”—™››—’ŽŽŽ“’”‘’•›ž˜x]xƒ††…„‡…„†…†…ƒƒƒSY]XRZ]XRVOLSH>:CM//>™¯­«®°°ªª¨«¬¯°¯®ª««¬¬§¨¨¦¥¡¤ ¡¤¦¦¦­¬¯¯©§¥£¦¤¦£¢¥¨¨¨¨¨¦¤¤¢ž›™—•‘—8"7J79\ƒQ?JR[]XU> !0N`hhd^_^WQRWVWWTV^eq~’”‘Š~€‚Œ• «¶µ¬ž‘ve^Ydkovz~†‹‰‹Š„uha_bakjkp…𢡗’“”™œ¡ž›–”“’Ž’’‘“’““‘‘”˜–_by‚ƒ†‡††…†††‰…ˆ…†PURRKURJH=F?F1//'@¦¯¯°°­­©©««¬¬®°¬«ª©ª©§¨«¯§Ÿ£¢¤¦¦¬¬¬°«ª¦¢£¦©¦¥¤¦¤¨ª§ª¥©¢ £¡š——•’œ~ !DU\L>r¤PDGGTY\P*!,Q\ghb[]`XTUYa^WX_iv}‹™š—ˆ‚†’™¤­¶º¼µ«œ„rd_cipx|€‰‹Ž“Žvlgiinrq|“Ÿ¦£–“’•¡££¡œ˜“ŽŽ’’““““˜œ›†x•x‚…„†…††„„‚„|RPSMFIL15=.A1.%c«²±­¬­§©¨¨§©ª®¬­§¨©«ª­¬±ª£¢¡¢¦¨¨¬­¬¬©¨¤¢¤§§¥¥¡¢¤¨¨¥¨¨§¥¡ š™—–—£M 'AajlR@l§YDCSZZYG"%*D_dif`^_YWZbhg^_ds‚› œ—’‘”ž¥¬µ¹¿Á¿¸¨‘~mfhkrv{Ћޒ’‘ˆ€vpruw{|‡›§©¡””’•šŸ£¤£ ›—’“‘’“’’“‘‘”šœ˜yux|‚ƒ„„„…‚„€€€ywYKA<7:=8+3*(% "(±²­­©¤¨¥¥¥§§««©§¨ª«­­ª§§¥£¤¤£§¦ªª©¬§¦¤¤¢¢£¢¢ž£§¦¤¦¨¨¢¢ œ›—““–¡™#-PepwyPCh¬YBQW_YP1!)CYagga^`XW]imkcbhyŠ–Ÿ£›”•—›£§­¯¸¿ÃÆÅ¿±ž†tikntz€ƒŠŽŽ’’“ˆ€xw~~‡•£©§œ””‘‘”˜Ÿ£££ Ÿš•“‘’“’“‘‘“–™œŽ}Œnw|€ƒ€|zvurounXQ()2)%"!U°²¬ª¨§¦ ¢£¦©«ª©ª¬ªªª©ª©¨©¦©§¦©««ª§ª¨ª§§¤£¢¢¡žŸ¤¦¦¥¦¨¦¢ŸŸ˜š™”“”œ®H%Ner€…€ECj®bHXYYT<$!")DTbkjda^[Zcllmdgl€Ž•Ÿž–”•¥©¬±·ºÁÇÌÉĸ¥”|plruz„‹‘““’‰‚€„„‡Žžª«¥š“‘“•š¡££¢Ÿœ—”’’•“‘“˜ššˆ„wjrvzz{|x{xtpofe`T’‚umVI*y±®¬ª¥¥¡Ÿ§©«ª©¯©««§ª«ª¬¯¯©«©©ª«¬¬­««¬¬¨§§¥¥¥¡¤¤¦§§¦¦¢¢¢›˜›››—˜™¥š /JdsƒŒz@C^³kFSY^W3"'*@Xjookbbd_krllijvŒ•›–•˜¤ªª¯±¹ÁÇÊÍÐÊÁ²›‡wsqw|‡Š–”•”“’‰ˆ–§¬«¡—”Ž”™Ÿ¢£ žœœ˜•””’’‘˜š—Štolpqsrtqpjd_WF<0(©§¢Ÿ“†~l]P.7"$’­«¨¥¢¦¦§¨©ª«ª¬¬°¬ª°¯¬¬®«­¬ª¨¨«¯°­««ª©ª©¨¤§©§¤¦¨§¦¥¢ŸŸ™š™™—”•—¦c!Icrއ]@EY¬wQOWYO$!#(6Umooqkbc`hpjkmt{†Œ’—š–œž§©¨«³¸¾ÅËÏÓÎÈ»§‘€wwz~†Šˆ’”—–””‘Œ‹Š”›«¯©Ÿ˜“Œ•›žŸŸŸž›–““ŽŒ“–© “‹Žpfihid`_]U<793#«­±­§¤•yt[C4)L¤«¦¢¡¤¥¥¦©ªª¨©¯±´±²±©ª¯°°¯ª¨¥¬®±°¬­«¬ª§§¨¦¨°¥¦¨¨ªª¦¥¦£Ÿ™–––”’—˜%!CepŽy??CM©}SLWVF #(7Yprppqhehknkllv‚†ŒŽ•š˜¥§¨ª«±´¼ÄÊÒÔÓαŒ‚yƒ…†‹’’”–•“•‘”¢±°¦œ˜””‘Ž”—™šœœ Ÿš”“‘ŽŽŒ–¿Æ­›¡´vh_ZYSK<.( !¨¬¬¬¯±²®®§ž–‰pdNB.x§¤ž¡¥¥£§©©¦¨ª²·»·¶°°°²µ°¬¬««­°³²¯«­ª©§¨ª§¢ª«ª¦¦ª­«©©©¦£Ÿš˜—”“c$@dr–‘‡Z=@DJ™‚TMOH'#%$&(7Yowwvvqoipmkrx~Œˆ‡Ž”›™¡¨ª¬®®±¸ÀÄËÒÔ×Õɹ¦”†€ƒ†‡‹’”–•™—•“’Ž™¬²®£›™•‘’‘ŽŽ’”—››œ ›–‘‹Š©ÛÙȰ¯½¨zjZK;4+% ªª¨­±³·¸·¹´³¬¢—†~icZP.!'ަ £¤¦¥¨«­¨«¬²¸¶¶²°´´¯²±­­±±²²´´²°­­¬¬­ªªª§­­ª©©¬°¯®®ª©©¥ ›˜™”•¦/8^qŽ™—Ž{C=AEH‘—ZUE4!)'*/08Yqzzy{wskmeiv}ŒˆŒ’™ž£©«¬®¯³¹ÀÅËÓÙÙØÐÀ±Ÿ”‰‡ˆŠ”•——˜———••‘‘¡±´® ˜˜—–’’“”•—˜œ ¡œ˜’ŒŽŽªØßØÅ»Äá‰yeM3%%! ««¬­°²³´µ·µ¹¶³²±¨¡”Œ‡woT?.H¤¤¢¤¦¨©©©©®²´´´´¯±±°¯°¯¯³³µ´´²°¯¯¯­°¯­®­¬°³±«¨¨®°²´­§©¨¦¢œ˜–›~%Zk|Ž™œ•‰l=?ADH{Ÿ^TH,#&&),1;Pky~xokcnzˆ”ŒŒŽ’™›¡§ª¬­®³µ½ÂÆÏÕÚ×ÓǺ©š‘Œ‹‹Œ“••˜š˜———••‘–¥²µªœ–•”•’’’‘““•—š ¢Ÿ›•މšÉÙÜÔÇź­¡–‹weI'#®­°²´µ´³¶µ¸º¼¼¼½¼·±¦›”Ї~hX~§§¦¦©¦ª©¨«¯³´¶·¶¯°±»·³²´´´¶¶¶´³³±²¯²®±°²±°µµ±¯¨¬²¶·°²®ª§¤ žœ™˜¦B=ewˆ˜›’ƒ\>CCCHpš`VU,$'201658Icy€Š‹ˆ‚whbp}‘••“š ¦ª¬®­³·¼ÀÃÊÓÜÚ×϶§—ŽŽ’“••˜™›™™˜™–”›¬·±¦š••–””‘‘’””“•˜šž ¡¡–‰…¹×áÜÐÌ©«¥ ˜zf>#¯°°³¶´···º¹½¿¾ÀÀ¾½¾¹²ª¢Ÿœ—‘…z›ª¨©ª©«©©­°µµ·¹¸·¾Ëп¶µ¶¸·¹µ¶¶´´±´¯±°³³´²³µ¼¹·±´¶¶¸´·³±¯¬§¢™˜¢.\o„”ž™wM>?BDKpžmWYB!&*6617/.7QmŽŽ‰kowˆ–˜•“’”–šŸ¤¥«®±³µ¹¿ÃÉÑÙÜÙÔ̾®¡–“”•–•—˜˜›œ›˜™™™¥´¶°¤š˜””•“”“”“••—™  ¢£›|°ÕæåÙÕÈ­©ª©§¤œŽ}kN#®±°³µ¶¹·º»»¾¾¿¼»»½½½»µª£¨®«¦™‹¢®¯ª¨ª«­±±µºº·»¾»¹¹¾»º¼¼»¹¶¶µ±°²³±±±´·¸··»½¿À½¹»¸»»º¸¸´°ª§¤ž—›«]:ctˆ—Ÿ™’…iA>>BCJe¡xSU[,"+/3077-'#&8]zŒ“Ž…sx|šš––••––—𠤬®¯²²·¼ÀÈÒØÛÞÚÓÉ»«ž˜”––˜™—™™š›šš›¬¹¶°¢™••”••”“““”••˜›ž ¢œvc¦Òâæá×Ѷ¢¢§¬©©¥ž‘€nT'"%0<¬¯±²µ··¸¹½¼¾¾¼¼»º¼¼º»µ¦£­µº·®£Ÿ­±­«¯¯°²´¹¼¹´¸»¹¹¸»¼¼¾¾»¸µ´´´´¶¶´¯±¶¼ÃÀ¾¿¿¿ÈÆÁ¼½¿À¾º½¶µ­ª§£œ˜¢¤&3Tew‡•™”‹{Y=AB@DJn¸ŠYUY='0378870+('%,Lq…‘”’Š{|‹–œ›—š•–––—ž¦«¯²µ·½¼ÁÇÏ×ÚÝÞÚÒñ£š——˜™˜˜™™œ›šš›¡±º¶¬œ—••˜˜”–––•–—˜šž •jc’ÎáèåÛ×¶š™ ¥¦¨¯¬£“„s[F09<@OZdª«®²³µµ¸½¿¾¿¾¾¾¼¼¼¼½¸¯§§°´»º¹µ®¯·±±°±°±µ··¶³¶¼¿¼½¹¿¾¹¹º¸µ··¸·¸¶·´¸¹½ÅÃÁÂÂÂÆÉÆÁÀÁÃÁ½¾½º¶®¨¦£ ±q 1R`gx†‹qK=@@BDMu¶‘]UTV,,3696-&$(!!$Ad——“Ž“œ¢¢›šš•–––˜ §ª²°²´µ½ÁÈÐØÞáßÝ×˺¬¢šœ›šššš›œ›œ›©¶¾¶§žš˜–––——™™˜˜š™™™›Žfj¢ÏßçéáÛÁ£™˜Ÿ¥¨ª¬ª©¡—ˆ|m^Y[biryª««­±µµµ¹¹¼¿¿¼¾¼½¹¹¹·­©¯´·¹º¼¹·³·¶³±±±±µ³´³´¸¼À¿À¼½º¹¶¹·»¼»»¼¸¶¼¹»¿½¾ÃÆÄÃÃÀÅÆÂÁÁÃÃþÀÀ»¸¯©¤›¡¸:.I`fkt†ƒ|wgA>??BEMo˜eUW]A/430-!#&)"$!2YwŠ•š™™ž£¡ žœ›——˜—¡§®¶´µ¶·½ÂËÐÖÞßàÞÚÐÀ´¦žŸž››œžœ£®¼¼²¥™–––˜™–˜—™˜——š˜†`o¦ÐÞâçßâ˰ª œœŸ£¦«­­ª¤›’‡{pnrw~…¬©«®¯°µ³´··¹º¸»¸¹¸¹¸¸´´µ¸¼¹¸»¹º´´·¹´±±±³±²±³·¼¿½¿½»º¶¹·»»¿¾¼¾»¹»À¾¿¿ÂÂÄÁ¿¿ÁÁÀÀÀÀÃÃÀÿ½»³¬¥›—¤Ÿ #0O`dggjtxxskZ<>BBCDNoš©n[WUT5>B3(%#!%$%#)@k…“›¦£¤¥§¤£¥¢ŸŸž›šŸ¤«±¶·¹º¾ÁÅÌÏÖÚàßÝÜÖʽ®¤¢¡žžžŸžžž ªµ¼¼°¤žš˜—–š›šššœ™˜™—ƒi{¯ÔÞàààÞÔ»¸±¥ž›™œž¢¨¬­­ª¦¢™’‹‚~}ƒ‹¨¨«®°²³²³µ´µ¶·¶³´³³¶·¹¹¸·º¼º¸·¹·³µ¼·²±±±²±²³¶º½¼¾½¹¸¸¹¶¸º¾ÀÀÀÀ½¸¿ÀÁÃÁ¼¸²¯©£—”™£¬³µ»ÅÂÂÃÁ¿»´¯¤™ªd/9KcgghklnnnkhI:?BBBDNo•¥s[VS[G3.("!$"%$)%(6a}š§¬ª©©¦¥¥¥¤¢¤¡ž¤¨­´¹½½ÁÄÅÈÎÑÔÙÜßßÜÙÐIJ§£¦   ¡¡¡Ÿ §°º¼¸¬¤š˜™™™™šœ™ššˆxÁ×ÚàâÜÝÚĽ½¶¨ žš›› ¤¦«¬®­©¥¢›•Œ€‚„§©©«¯³³±²µ¶²³²²°°®²±³¶·¶¶·¸µ²¶´²²±·¹¯±°±°°²³µ¸¹»¾º»¹»¸³µ¹½ÀÀ»µ±©¨¤žŸ”Š}„‚}wont|„—­ÂÂÆÇĺµ­¤ ›/%*AR^beefhhgife]@=ADABDNq™±{`XURO.%#"%#'*+/Fg„–©°­©¬©¨¦§¥§©£¤§ª²¶¾ÁÅÅÆÊÎÒÑÕ×ÙÝÝÛÙÓȹ¯¦£¥£¤¢¢¡¢Ÿ«µ¾½´¨£ ›š™›œžžŸœ™šŸ¨ÈÛàáàÝÛÚľ¾¼´¥¡žœ˜œŸ£¨«­­­«©¦¡–‹|w¨©«®³²³´´´³³³¯°°±°±±°°³µ´µ´³­²¯°­¯¯­±²³´²¯®±´µ·¶º¸·±«¥¦žšœš’‹‡†„„…€~‚~~€}upgbmnnlsrŽŸ® Š‚‚‰˜¡¥†3,?HZ^`ccdc`fifa`T=?ADACEKm–®…d]XQRE( !!%$$$(*,5Pv‘©²¯¬­¬©¦©¨ª©«©ª®³¸¾ÃÇÉÊÌÒÒÓרØÞÛÛÛ×ÎÁ´ª¦§§¥¥££¡¤°»¾º³§¡›šœ›œžŸŸ¡ž£¾ÂË×ÜÝÝÚÖÝǼ¼½º°¤šœšœš›Ÿ¡¥§©¬­­ª¨’‚w©ª¬­±´´¶µ³²²±±±°®®±±¯±³±±¯°¯­­«««¬¨ ²½»¸²¯¯²²°¶°¤™”„€…‡†‡ˆ†‚ƒ|yzw~€‚€}usolihihgdfcdhedhcbednƒš¶wHVRWagdfccddbe^[L;=CCAAFKj–³‰hg\TST5"$$''$'+,,3>[ƒ¨µµ±°°¬®­­­¬­ª¬°²¸ÁÃÉÌÎÏÒÔÔÖ××ÚÜÚÚ×ÒǺ­§¨¨¨«¦¦¦¬¸¾¿·®¤¡™š˜››››ŸŸ œ¦¾ËÏÕררÐÜÒ¹¹¼º¶­¢žœ››™šœœ¡£¦ª¬¬°«¥™‘‚©«­¯°µµ¸µ³´³³±±°°°°°±¯°²°°°«¬¨§§§«¦šÁ¾º´´±²²­Ÿ•‹†Œ‹‡ƒ‚„„ƒ€~vsuxyyy|qnolnpifc`Z^`^]b``_abbflv¦]]adbbddhchgcd]UB=?BAABEKb•¶•€t^UTW@""$%'*''&.399Gt¦¶¹¸¹´´²°³¯­¯®°²¶¹ÂÉÎÐÑÔÖØØ×ÙØÚÜÜÚÚÕ˾´¨««­«ª©©²½À¼²¬¤ž˜—š›žœŸ¡¢¡³ÅÌÑÔÔÒÑÑËÒÒ»·¸º¸²© œš›˜š›œŸ ¥ª®±°®¥œŽª¬¯¯±³³´±±²±±°²±±±¯°®¯¯®¬­¬«©¦§¤¦¨¡–‘ªÀ¾·µ²¯§•‹‰‚ƒ}~{y{{y{ywtphhoustrutiffflhecYSQSVVX\^^]abaabhr€n_bebcc_b_bdbb[S;<@AAAACIf›³§yid_ZVS.%()()'-')5:@Dcš¶¾ÀÁ¿½º¶¶¶°¯¯®¶¸»ÂÊÏÓÖ×ÙØÙÚÜÛÜÜÝÜÛØÎ·­®¬¯­®«°¸¿À»°©¡œ––™œ›œ¢¤«ÀÈÉÎÏÒÑÒÇÁÄʲ³µ·µ³ª¦Ÿ››œœ™™™˜š› ¤¨­®®«¦Ÿ©¬¯­³²±°°°¯­¯®®®®­­®®¬­ª©©§¨¦¥§¥¥žˆ‹’ª½¶²±¢“„yursptuuxvpoommloomojegijd\\\^[TTORUUW^^_\]^\`achs{ijaagfb_^ac__[P7@ABDAABJa•­¨|hc`_ZWD**+*-*-&.<?@IS¬ÁÅÌÆÄÀ¼»¶±¯¯°·¹¼ÂÉÏÕÖÚÛÜÝÝÝßßßÞÞÜÙÔǼ±¬°±°¯®³»ÂÀ¸¬¤ž—•–š› ¤¯ÅÉÄÄÅÅÈÊĸ¼Ã­ª­´µµ¯¦¡œš››—˜›˜œš˜—™›Ÿ¤¨«¬®©§©«¬¯¯³´±°¬®­«¬®«ª«¬¬¬©©¨§¦¥§¤ £££–tsŠ•°¸°¡‰ˆ|{snljjjhosopkllnmjiijighddfbWRUUWRRPOY\ZZ]_\WZ[`abajwpdbddcc^bbb`c`D;?@ABBCDIVް¬†odbb^_V:.+,*,,(.<BFP[i‘·ÊÓÐÊÅÀ¿¹´²¯³·½ÄÈÍÒ×ÛÜÞàâàßáààßÜÛÙÔÊÀ·®²²³²´ºÀû´ª¡˜—˜šž¢±ÌÎÆ¼ÁÃÀÃÁ·°¼«¤¥¬²¶´«¡žš›š›œ››™™˜š˜™˜™œ¡¥§ªª©©©«­±±±³®¬­¬­ª¬©ª«¨§¨¦¥¦§¥¤££¡¢ ŸŸŒ–y\s’©—‡}ypiigddadcefhgefhghcda`ccbc_]YWRWSTPUQV\ZY^\\WVUW^^ddiweef^]c`gYb_aW;=?@@BBACJ[¶·‹pigfgj\H4////-+1>DHRc`c“ºÑÖÒÌÆÂ½¸¶°´»ÁÉÎÒÔ×ÜÛàäãâáâßààÝÜÚÕÏļ²²´³¶·½Â¿»¯§¡œ™–šœŸ¬ÑÙÊú»¸¹¾½»°¬¡œ¢ª±²®¥œ››œ›™˜™™š›•—˜–—™Ÿ£¥¨©¯¯®¯²±±±®®®­¬¬«ªª¨ª§§£¤¥£¥¡¡¡¢ Ÿ¡ž”rgTJRgmr{zysg`_a`__acdbbcc`bc`^`cabceb^][YUUTWWSTRYYZ[\`]YZYcbgggroaa^`^`c^h`aN;A?ABCBBDL[³¸’rmlomndW:2360/4:GHBQpmKO†¶ÏÕÓÊÅþ¿ºº¾ÃÊÑÓÖØÝÞàâäâààÝÞàÝÜÛ×ÑÆºµµ···¹½ÁÀ¶¬¥Ÿ™˜™›¨ÖôçϽ²³¶¶ÀÆÅ©  ˜š™¦¬²«¡œ™›œ› š›—™œ›–˜˜š———˜›Ÿ¤¦¬¬«®¯¯±°¯®­¬ªª¬«©¦¥§¦¥¢¢¢¢£¢¢  ŸŸ›†_YTPMORT`aa[WRVYY]W^\`gffjqnc__\\^b^[X^XUSPUVUXWOSVYZ\[^\^[bbhmkkuh`]_aacaia_F;??@AC@BDKYˆ°¶œ~lkpnnkdM;789:<;EFCPvuOMt¥ÌÕÕÑÌÈÆÅÃÃÇÉÐÔÖÖ×ÙÜßâáãááááàÜÙØ×ÔȽ´¶·¸µ·À¾¼³«£œ–—¶æïâÓDZ¨¨«ÈÓÏ·›’”ž—–™Ÿ£¨¥¡š˜š›šš˜˜–˜˜˜˜——•••”•—œŸ¤§©¨¦¨«¨©©©©¥¤¦¦¥£¥¤¤¡œŸŸ ž žžœžœ™Žyg_TQQPORRXX_\]X\cigo…›¨´¿À³³©–‰uXVVTXWSOQXTWZ[SUVZZYUY[_[]^cjjhmqb_\a`cdgbW?=A@@BAACDHZ­¸¢jinuomi[>;?@=DCFIESuum‡®ÅÒÖÕÔÔÎÍÊÊËÍÏÔÖÖØØØÜÜàáãàâßàÞÜØ××ÔÌÀ···¶¶¹¿»¶®¦¡”Ž‘ÁäìâÒÇ´£™ŸÄÏÓ¶¦„™—˜•—–›ž  š™—™™œ™š—˜——™–˜••–”•–”šœœŸŸŸ ¢¡ ¡  ŸžœŸœ›šœœ™œ™–š˜˜™–}haebce^`ddgttwuwvtz…‡œª±·»ÃÈÉÅÈÊʺ¢„dNMLU]VWWXYa\Y^[Y\^[X]Ybejkmokb]cabce\N8@A@?ECBDDIU}£¸¥€snrvuppgMDAECEJOLNXpn¢ÁÑÕ×ÕÔÑÏÒÎËÎÍÒÕרÖ×Ù×ÚÞááâàÜßÜÛØÕÖÓÌÁ»·¶¶¹½½³ Œxlr¡ÉßèäÚÑÄ­–œ½ÍѲ©œ„™—˜–””“˜–——›—™˜˜˜š›™›™˜——–˜”•”•”“–”’“”•˜—–˜˜——™™˜™—–••””•–”•““”•““”‘‰}reqrqx~…ˆ‰Œ‘•ŽŠ†‰‘Žˆ˜œ¤¬«¥¤©§¡£Ÿ“{eZYZ\\`_][^[]Y]\\ZY[behlmqmgeeebddZB=?BC@CCCEGKS¨º®‡vqsrwqpg\HDDGGKNKML=O‚ ½ÉÒÔÔÔÒÐÏÑÏÏÏÑÔ××××××ÚßáááàÜÛÚÙÖÔ×ÒÎÆ¾¸³«Ÿtc\`j‚¨ÌÕÞæãÚÒ¸Ÿ•­Ç̱Ÿ’Ї›˜—–••”‰†’”–™˜š™›˜™–˜—˜•–•–”–””“‹ŒŒŽŒŽŽŒ‹ŒŒ‹Œ‹‰ˆ„xthSeks‚ˆ’œ°½¾¬–›™‘“‘Œ’—‹€{{z~‰†„}}usuvh\ZY`^\ZZWWUTYTXWV]bekonppeebbcaW:=>@@@CEDDFIV´®~urjnoib\C112;881+&+^€œ¶ÅÍÐÒÓÒÑÏÎÎÎÏÐÒÕÕØØ×רÞàáÞßÜÚØÕÓÑÒÑÎÀ£kXVVX^ivžÀÔ×ÞââÛÈ­¢«¸È­”ŒŠ’–›˜••••„|sv€†ŠŽ•—˜™—•”–––––””•–”’’ЇЉ‹ŠŠ‰ŠŒ‡ˆ‰ŒŒŠŠ‰ˆ‰ˆ‹‡…ˆ‡‰‰‡…ˆ‡…‚wxocUVclt€•¬¾À¾»³¥™“˜‹Œ…‘ŠŒwpkjo{wxwrjccc_^lhYRYYVPNOLURVUQZ^diooosnf_aeaN=@>AB@DDFFGJY|¥¯®™…zqilmha^M-&+0-()! Bdz•²¾ÆÎÏÑÑÏÑÏÍÏÎÐÔÔÔ×ÖÖרÛÜàààÜÙ×ÕÐÐÑ´…_OMTX^_gmr…ŸÂÑ×ÜåèßÒº°¼È«‡„ŽŽž˜—–”–‘†vaTamt{‚ˆ“–”‘‘’••˜•—–”””“”Ž‹ŠˆŠŽ‹‰‹ˆ‰Š‡ŒŠ‰ŠŠˆ†„ƒ„‡†……„ƒ€‚~|ysqni\TZbgt‘ ´¼Áú®¤¤¥ŸŠ…‰ˆˆ~qhkilllnfdbe`ZYZ[g[SLEAGMFNQJOKUZaepprrrn`d_\C=D@ABCFCDFGL[{£±º¤“„wonii`YS7!&*)/%#"E\nŒ©»ÂÈÌÌÏÏÐÑÎÎÏÐÒÓÔÔÕר×ÙÞßßßÛ×ÕѹdOOPUY]cjens|’§ÃÓÛâåâÕËÀÀǺ£–‰x……˜™™›—”’Œ~h;$.C_jpw…Š‹‡†‰Œ’––˜–•“”’“”Œˆˆ‰‰‰ŒŒˆ‰‡‹ŒŠ‡ˆ‰ˆ‡†‡‡†…€„ƒƒ‚‚~}€~ywupmghd^PVXhjy‰œ©±»¸­¨›—‰t|wtprmqqljijfedbabYVRRVa`PCIBALGIPPP\ddkprutume_X=@ABCBBCCDEGMZt¡³·ªš‰vvmdd]VQH$%'.6+%#BWk†¡³¾ÃÅÉÍÏÐÐÎÐÏÑÐÑÔÕ×ÖØØØÛÞßÝÙÑ­uZW[]X^c_^dhmoty•²Ì×àããÚÔÍÇÌØ“‘|‚‡œ˜›œ˜’’‹uO,HU_lry~}z„Š’•–—–•••”“”ut{x~~{}{{}‚|{}€€~}~{yvuutprmnqjg`VUNIPOOO<8Sgil~ž«« ©©‚vrpjlgmlhkrqnnfbcbaa\ZZWVSWd`K@ALMKNPZ[``goptttsj_L9@ABCCCDDDGIP\wŸ¶©­£˜vje]VTRM+#'2B;,(?Tbš®º¿ÃÅÊÏÐÒÏÎÎÐÐÑÓÔÕÕÖ××ÚÚÞצtY\bab``bf`cfinru„›¿ÓÚäåãÙÓÎÐ˪’Žy~Š™›œ˜”…m>!&4:HXekolrz€“——–––••”“”%!5@>RHVQ^Rg_ikelnpmhgic]aa_VHQPMPI;*"$*#&&+24,:_nhku‰Œ•—„wuuielkkmgkkgllggcc]cb\][YVQTVhU;IJMNOXW`gkllsvrqo`?>BADEFCFFEGJRg~Ÿ®®·¦žŒ{lf]VUOL:+"%1@=-7Ub–©¶¾¿ÂÇÊÏÒÏÏÏÏÎÎÐÔÓÖ×ÖØØÙ´o]cclpmeba]a_eecqu‹¬ÀÑØâåâáÖÔÔѲ£›}}ˆ€’¤œœžž›•Ž|X$#).:C>DLU_fjsx‚”™™–•—–•”’“ &"&%.--3,(/.!*&!  !*/ "q{ZY`nwxovqstphjfgjpmbfjtidc^bab\ZYSRPOh_LFGDMUX\eklptxurpb9@EBCDDDFFGIKUl•¨µ³»©œ“qg]YYQMF0$!#(9;4Rdw£´»¿ÂÄÊÌÐÏÏÏÎÑÑÑÔÔÖØ×Õ°rV_gqsuomhg^bc^_emx|š¾ÎÙàåäàÞ××̽±¡„€Šƒ„¦¢Ÿž¡ Ÿ˜ŠtP07JSW^_YS`hmwxˆŽ”——––˜™˜––”“!#")",yˆYY^fllqzx}vklmiaahsvlhjqkbcg``]YWWUSRROQVNK@?@GP]hnqwvtp\>AFCBEEDDIIKMXl˜ª±®·¯š”‚ti\\YRKI9$$''*3=Tlsˆ¬·¼¾¿ÂÄÊÏÏÎÏÐÐÑÔÔÖ×¾ceamrƒyumcbbecbckt|†®ÍÔÝäæäáßÝѺ¶«‚‹Š~—§¢ ¡¢¢£žtS?JWdistw{zƒŒ‘•™™š——˜™š—••”%+#,%0+%z„j[\agnsrxwmmlogdecq{mgjigkkf]ZWWTUTWRKHGD?:;:::9J^jrrspM@CDBCEFDGKIJN^qœ§°§«µŸ“ƒsj_ZWPIG>"!"!#!2MkuŸ¬´¹¹½ÂÇÌÎÐÐÐÏÑÔÔÌ™mfmvu~†€wwxpic``adfo‚¢ÀÎØàåèåäÛÒÇýŒ‡Ž€‚¦¥¢ ŸŸ¡¡¡˜|dR[cny~†ŒŒ‘˜œ œœ™—™–™˜––•(17%/7+"%‰€]c_glotswwwkgofbc`fnohhk}tlb_ZZUVOJDB>;<<==;;=<<@Sgorn??CBCDEDEFHHKTf¢¯¯¦«¸¦™“znb[YPKFE$!&&! #6NkwВ𠫬´ºÁÇËÏÏÐÒÓÒµxkqws{‡}„ƒyytjfcbdim|„˜¾ÑÙáæééäÝÓÐÌÅŽ‚‰Œˆ{’­¦ ŸŸ ¢¤£Šwfgn~ƒŒ““”–™¡¡£¥¤¢ ž›š˜˜–™””"1".=45:9-.&yyimljnuwx€{{wknjfkccqfdfimokj]SIB@>==>;<=>@??=;<==F_ja@BCDEEEEHHKLQTpЧ®©¥¡º¦™{ngb[ULGH1!(%""$%.;Zv}‡”—ž£°ºÇËÎÏÒÉ—r“„‹‹’šŽ‰ˆ†|jmnigjksz€—ºÑÙáçèéèÞÖÕÒɘ„‹’‹ƒ€««¤¢¡  ¢ Ÿ•‹}vwˆ‹‘”𠤧¨ª«ª©ª¦¡žžš›•——–")(0-8)5>*#%hsx{ooƒŒˆˆ••|{|umllknjlkkbbjJ@<>?<=;><<9<B>??<?@?<EXS@CCFDDEFIKLPV\z˜¯³«§ º¯§ja\ZTNHGK$#)%%"+1-7Xpy|€ˆŒ˜£²ÀÊÍ´’ž§¶¢š¤ª±¨¤š”Šrtqiqtwrs…”µÌÚÞãææãßÚØØÎ¦¡–•‹}“¯ª¥¢Ÿ¡¡ž˜–™—‘ƒ|€ˆ‹“–ž£¥¨ª¬«­«ªª£  —š—• &2:2?9D5A>01,(&`•¦±¥±²±¼°§¸³–’ŽwwpponhYHB=<<>>=@<<=;=<>>@A>?>A@>BCBDEEHFGKKOUTXhŠ¢¶·©­ž·¸©—mbYWQKGIf*&&""(-124[ox{yvw~‚‹œ®·¢¥ÃÊÊÁ¹½¹¸½¾±§ƒˆ~{x{|xy˜¿ÏÙâãåéäßÞÜÝÒ²­¡˜¤¥‚}©­ª¤›œ¡Ÿ›“’˜š™”ˆ…†‹’–œ¢¤¨§ªª¬ª««ª¥¡ ž™˜—'-'.*FDB78;:*!!)žÏÒÑÏÍÓÑÐÑÍÒ˲›§ }…~leH@=;:;:=<===>>;;>?@=<?A=?@=>@BCDHIFIJLR]bex°¼¶²°œ½½­¢˜tj\YUNIHG-&(**.58;Caosvvuuuxu~—¨ÌÚ×ÓÐËÆÏËÊÅ»ž““Œƒ†‡~x}Œ ¹ÓØáååéèââãâÙ¾¸«¤œ©˜‘³®ª£››¢£ž˜Ž•—žš“‹‡ŒŽ“—œŸ¢¦ª©ª©¬¬¨ª§¤£Ÿœš˜!(,844?DID:)=(1ÈÙÝÛÛßáßÝßÛÛÚÏÉ·›œ\E?=<::=>A><:>?AC;>=>>@BA>?@AADDEEFGHLJOS_kq”´ºÁÀ¼±œ»¾²§ŸykdaYQMJG>6:<<<8:LYiuyttwyuqo—ÅääßÙÓÓÒÓÓÐÊ»ª¡§§ ¡•Ž‹ˆ•­¾Ð×ÚáäèèãäåãÜÇÉ¿Àĺ±Œ†ª³®ª£œœ££›ŠŒ‘—œž›•‹ŠŽ‘•™  ¥¥©§©¬§§¦¨¦¢š›#*!25?AEHE=FH;F8". VÛßÞâãæææååææâÚÑÉÈ‘QC@?>999>=>>>==?=?>>>A?BBAA@A@>CFFIJGJNS[`n…¤¿ÂÆÀÁ½¡µÂ®¤š‚lkc_UNIHD>@CEDENcuŠƒƒ…ƒƒÆáèèâßÚ×ÜÚÙÔÎÃÄ¿¹º¸­¥ š•–£¥ÆÒÕÚàäèçèåæçÞÐÐÌÉËÇÁ ’¶²«¦  ££Ÿ–‹ŒŒ”™œ ž—‘Š‹ŒŒ”˜œž ¤¦¨ª§©§¨¦£¡¡&$8<GAAB;C?1A.--# ŠâÛàäæéëêéééèæÝÌ…K@@><>;:9::<=;<<?=><<>@=@???@A?>CEGHJLMNXsv†¢±¸ÄÃÉÄÀ¼¦¹Æ¥¬¢Žpxt\UOLGE<COZUew‡‘–”•“‘»äèééæáÜÞàáÞÖÓÍÐÊÏËȾµ½¸¤­²ÂÃÎÕ×ÞåæèçèêéÝÒÕÓÎÓÉɯ¤‘¦¶°«¤¡¥§¡›Œ‹Š‹—˜œ˜‘‹ˆ‹Ž“šŸž¤¤¥¨§§¦§£¢¤ '0+7BPIFC:@4&-&$"$—ÑÖÞçéíêììëèç݆EB@?>@@;=:<<;>=<>==>;<?@?AA>>@A=@GJHMSOUVm‚ަ¼ÉÈÉÉÉÉľŸ»Æ›¦ ”w†„fZZNHH>?UovŠ”›šš›  ©ÚêéêèèäààäãàÛÒÔÒÑÓÒÍËÊÉÁÁÃÈÊÊÑÑÖÝãæèééêêâÓÖÖÔÖÔÍ¿¤§˜²³°§¥¥¨¦ –Ž’–šœžž›‘І‹‘“™™ £££§¦¦¨¥£¤4:1@FLBKEBL@3()+-˜ÎØâèëëëìéç߉IBBB@@AA?>=>@@?@?>@>?<@@?=ACA?>C>AGKLR[W`m‹¡®½ËÐÐÏÍÍÉž£¶ÆŸšœ”ƒe^^NLJA=Lgy”›Ÿž ¢£¡·åáàãããáàáÞàÞÙÕÕÕÖÓÒÑÐÓÍÌËÌÎÐÑÏÑ×ÛáçéëëëéߨÛÙ×ÚÙÓι¡š¬³²¯¨§¦©¤—‘‘‹Ž’’”˜ššˆ‰‹‹’‘’—𡤤¦¦§¨§¦ /2AJPKJTQ9JCBB-.2/ 0Sj´ÍÜèìëêìêׄEDBA=@@A@>=<<>@==><=<><?><=>@@<=@;AHMNQWfyµÄÅÎÒÒÓÒÏÌÉÆ¾¦¬Ç¬˜’|okha]NLD>CW|œ£¥¦¨©«¾ØÒÐÕÙÚÛÚØØÖ×ÕÓÔÕÔÓÑÎÐÑÑÐÑÎÒÏÐÐÓÓÚàãèêëìêáÜßßÜßÝØÔÄ©—¨¹¸µ±ª©¬¦›“’““’”––˜š–‹‰ŠŽŽ“˜˜›¡£¢¥¥¥¥¤!*5DIJHKEI?><'-!(>]rz‡²Ñèîêêêç½WDB@@@@>>@=:;=>=?@><=;?<;<?<;<:::;;BLQRXl€¨¼ÌÒÐÕÖÖÖÔÏËÆÀ²¢™¾š‚‚Žlzxlef_PMJGEKr›©ª¬«ª¯½¡ºÅËÌÇÌÍÍÍÎÎÌÎÐÎÑËÎÒÊÐÐÑÑÑÐÐÐÓÕÙÜáåéëìíåâããáåâÛÖ̹¥¤½½¸²­­¬ª¢•Ž‘’‘‘‘‘‘’•—š™“ˆŠˆˆŠ”—š›Ÿ¡¢¥£¢#3>?KQMOL@B;4>!("!/Vmw‚‡ ßêìììíéã©OBBBAAA@@<<=A@@??=<?=;;;=?;:;<:999DT[_lˆ§ÅÎØÚרÚ×ÓÒÏÌÊ¿¥Ÿ‘·to†insicbYOOKIKLY‡©°±°©‚wˆ¦©¨žž£­µ´²¸¼¿ÅÆÑÄÆÅÈÍÌÎÍÏÏÒÒÓØÝâäéííìéçêèäæéàÛѾ¯œºÀ¼¶°®¯®©šŽ”’“‘Ž‘“”—š–“‹†‡ˆ‹ŠŒ“”—››Ÿ££¢)+4HLLDOPGH?<61*3$#!A[s}†ŒŽ‰¸íëìëéèãÜ¢KDBACC@@=<>@@A@>??@=<<;==;;:=8669FYlvŠ»ÈØÚàáÞÝÜÖÑÏÏÇĺ™—±ke~gdqeeh`TSLKKNKc˜¯«tOGJJJLKKMXw•‹™¦¦³ÎÆ»¹¹¹ÃÅÆÏÎÎÒÓÙÞâåçéíèèèêçäæäßÙÉ·ž²ÁÀ»¸°±²®¥–‘‘‘“‘‘Ž’–˜™‰„‡Š‹Š‹“”™š›ž¡%*5HCCKSDJIELCD9;1/-)$)#!".%>Po{ŒŽŽ‹Š†¼ðêèçåßÙÓ½FBBA@A>>>?>??>???=<<::<8:;97545MkŒ¥¸ÐÙßáããßÝ×ÓÑÍÊÁ»°o“zbaefZ[Y`f_YPKKKKLRo“ZDDGGFEGFHHJˆ…‰Œ‘‘¤°¯® ›¢®¼ÅÆÇÍÏÕ×ÙâäæêëèêéëççæâÞÍí¤½ÁÁ¾»¶¶°­¢˜’ŽŽ‹‘’‘“‘“ŽŽ“–š•Ž„†ˆˆŠŒŠ‹””—›'<D@OKI=KCB<.*,2'+  5]u}‚‹ŽŒŒ‰ˆ„«éááÝÖÔÑÔÔŒC>>@B<?@?B@>>??B?@=:::997752/1Ej½ÊÕÞâãããâÜØÔÏËÞ®›€xh‚n]bWXYYUWaaWNNHHJKKHECFDEFGHEEGGKLo{}€Ž‰†‹Š‹š®½¿ÇÎÒÒÔØßãèíëìîêêèææáÖÉÀ¡µ¾½¿¿¼¼·°¨ š–‘“”••‘ŒŠ‹’’––‘‰…ˆ…‡ˆˆˆ‹Ž”•– #!29OYVOMGCJC=;9+#% '$#$%(Hix€‰ŒŽŽŒ‹‰†‚y›ÏÒÕ˹™‹kN@B@@AA?ACBB>@BAC@AA=89:9650/.,E]ªÕßäåäâßÛ×ÔÍËÁº¶«šŠqldoj\_YWUTTTZZQNNLJHIFGFFFGEGDHEFFFHGNmy€}€xxuv}†‹Œ›¯ÁÉÈËÑÕÔÝçííìðïîìèææÞÐÈ­ª¼À¿¿¾¿¾¹¯§ œš˜”‘‘Ž‘•˜——”Š‹“˜–Žˆ‡††ˆˆˆ‡Œ! ;8=NLWRJPG@=9/<*(**" "  &,!$& '* (8^q~…Š‘Ž‹Šˆˆ†ƒ}rx|kRG@>>A>>>@>@@A@@C?@C???A>>;97320,+*$Kgx¡ßåãáß×ÓÏÍÆ¶­¤š•ˆ{ke^acUXTTRQNQTZNLNGDCCDDEOECCECHEDDDDFGau{wxtzynozz…‰Ž¡·¸ÁÍÐÐÙæéìììðîìééçâÖÍ» ·½¿¾½¿Á½´ª¤¢Ÿ™•’”˜˜š•“Ž‰ŠŽ“”’‹‡…ˆˆ‰‰ˆ‹‰Š016KNUURVOQH=:@0)(*# ,%$" !*&'+$! &$*Qky‰“”’ŽŒŠ‰‡‚{qkaJDBAA@CAA??AB@B?A@@BC?@@@??<77410*)&$Qss[m²×ÙÖÐÌÌǶž•“ŒujfaWY[SVSSRPOQSTOKKECDEIKKMEDFEFGIGGGGJKTqspputrqmtxy‡›³ÀÅÉ×âççîïíííìéæåÚÒʪ«·¿¿½¾¿¿¹¯¥¥¥¤£¡ ž™“‘“•˜˜–’Œ‹‹‹’—•’Œ„‡ˆŠŠ‰†Š‰‰‰‹'/EHJQXXURLTUI;982"&!&+$"24+2583<99:154<34>46Pq~‡“–”“‘‘’‘ŽŒ‰„€{woi^LCAA@A@B@A=AACA??A@@=@@@>?=;55-,)&! VxqVNPi–ÅÌŽ¬›‹€wsic`YUQVOQQRQROPRSOKJEEFJQQIEEFIFFGHHGFJKLNimqqnhgllmkq{}›™¦¾ÐÛâæéððððîíëçá×Ѽ£¬¶¾½¿ÃÁ¼²¬§ª©§¤¦£ Ÿ™—”’”“”•–‘ŽŒŒ‰‹Ž’––”Šˆˆ‰ˆ‰ˆ‰‡ˆ‡Š-OVRVZVTPIDFC62.'%$((%36>RNWcajmnqpoopggia`\YTYm|…Ž“•””’‘“’“ŽŒ‡ƒ{yukbQD?<?BA@A@?CA@C?@???=>?@>@A@>7.(%!##OvnRKLLF[‡Œzloloqniccj[RQSOOPQONOONSOMJEAAEMKJGFGHHIHHJJJLPNOep‹lhehifhigpwu|‹œËÒØÝåëðïïïíììæß×˪¢¨¯·¾¿Â¾´¬©«ª«ª©©¨¥£š˜•“’’””‘ŒŒŠŠŠŽ’•—“Љ…ˆ†ˆŠ‰ˆŠ,\a\]Z[NHE9@:(,+'.?9QXty}ƒ……‰Š‰‰‰ŠŠ‡‹‹‰‹ˆ„€‚{rt}‡Ž“‘“’‘“““ŽŒ†…€ztn^SKHB=>?>BABCB?AAAB>?B>@A@@ADEC?3)%!#'GxgPIIHFEEEFHELWeie``aXRRPKJLONNNNMRNKIA?CMLIIJGGKILJKMMNQSPO_lnecgdb`abegdit˜´ÊÑÔØâêðíïîìíéãÞ׸Ÿœ¢¦±¼¾½³§¦¦ªªª¬«ª©©§¥Ÿ™•”ŒŒŒ‰‰‘”—˜”Š„ˆ‰†‰ˆ‡!5X`WVT?+A!.3954Lbu‡‡‡ˆ‡‡‹Š†Š‹‹‰‰‹Œ‹ŠˆŒ‹ŠŠ‹vtu{„ƒ‚‡Š‹ŽŽŽŽ‰„~we\HFLQJBMHE<>?DB@@A>A?=>A>?AABBCDDD;.$":f`OGFEEECEDFEEFJY`]\VPJHHEEFFFGGHIKLIIF?RTKJMKHIMLPNMLQRSRONWbdcaba^Z\]`deq‚«¿ÄÈÏØãèíîïîîíéáÞÆ£žœž¨¶¶­¢›Ÿ£ª­®­®®¬©¨¥¤Ÿ›˜•’’‘‘Œ‹‰Šˆ‰‹•–—“Ž‚ƒ†…ˆ‡ˆŠ'/LXTPS6*:)7FETejnpvww|†ˆˆƒˆ‡‰ŠŒŒŒŒŒ‹‹Š‰ˆ‹‹‰zqkiliktv„‚„€wj_VTQQRQUY]_VE>>@DC?ABA?@BBBCEEEFEEGHF>+'!+6\WLFGGEEFEFHEDEFHSUSKHDDEDFGFFGFGHHFGJDTcXRRRRNRTSXZTSZ[]ZVNS]^]^_aa][]_ekr•˜´ÅÑÛãéíïñóðîêáØ® žžž¡¥®«£•–— §«®¯¯¯®««¨¦¤ œš“”’މ‰‹ŒŠŠŒ“—š™•Ž…„‚†Š‰‹/%4HPNV;/KVcirmppkkqqrtt‚„…ˆ‰‹‹ŠŒŒŠ‹ŽŽ‡~vlkh``ejiieif`XYWTTXVVX^_]]TF::C@=@@?@@BCCDEFGFFFFFFD?.%-1MKGFEEBCDDDDCCCCCEFEABC@AADEDDDDGGGFEFZxk^Z]``]`_cb_X_ebmfaRKLTZ\YZ]WYY\`jgyz°ÄÓØßåëíïîîêæÜÁ¢žœžž¡£¡˜‘“™ ¦«¬®®­¬ª©§¥¢ž›˜”Ž‹‹Š‹‹ŒŠŒŽ“”•˜“Š„ƒˆŠŒ=747EIX`fnoqqttrmkopmnoifkr{‚ˆ‰‰‹ŒŽŒŽ’““”–•”’’Ї„ƒ€|xo^X_]_]^`a`bdegqoqpgaP>B@>==?BACCCEFEGGEHGGGHF?0,/EGFECCCBEAEDBA?AB?>==?@<?>BACDEEEEFFGN…‘€nrrvpwprqnhdorjrqiTIFMSXUX[Z[[[_hdpx‘§ÂÌÕÚæëíðîìéå̤žœšš™Ÿ œ™“‘Ž”šŸ¥¨ª­¬­«¨§¦¤¢ œ•ŽŠ‰Šˆ‹ŒŒ‹Ž’“•š”‘Œ„‡‰ŒG9CJikrpqskmojnkhmilkgjjhefdnruy„‡‹ˆŒ‘’–“••—”“‘Ž‹‡|vqeaacgmrqturuw{„˜—Ž…voeKC??=?AABFEFGGGIKIMLJLKGFB00<EEEGCCCFABA@?>=@;997=;:;=B?ABBEDFJEK‘¬«–•‹…†Š†}qr{|~}wiSIHIGORVZXYYZX\`ct¤¹ÊÒáçéìðîìçÙ«œš›šš›Ÿœ–’’‘”˜¡¥©««¬©§¥£¤¤ž–“ŒŠˆˆˆŠŒ‹ŒŽŽŽ“—›–‘‡‰Œ^Zrˆ‰‚sohkgfcdcd`_]afbbcbejbefkmqqryvyxuuuvwy~zromkgjvfelmorw}~|~{{{~ƒ‘Œ‡xtiIA=>@BCDDDGHKJJNMOXPNPOLKD;7;BD}”^DBAA?><930/*&)')+.43:=@>ACFFFFµÄ¼´»º­°¥ž¨  Žƒ†‰}pbPHGGGJOTYUWVWVZbix‚’³ÂÔÛáêïïììá½™™™š™™› ž—“Ž’Ž’‘—™ž£©«ª©§¦£¤ ˜“Žˆˆ‡Š‹ŠŒŒ‹‹Ž‘—™Ÿš”„‹ˆˆˆŠ€rdh^\WXYcYOU\ZXXX\\[ejkjjihgeedegdgiiikj`^\Tg‡“…wtz€‚„}|~zxuwwxxwuvvaE@?>ABCEEEGHKKMQSTXPQTPPLEB><AJ±Ó°aJB=<7/((($ !#"#!$(),-04=BCCC^¤ÅÑÊÌËÃÀ¿±»´°¢Ÿ•™–—‹yjdSFFHHGGKTRURUW[dksz‹´ÍÌØäìïìëéÍ¡˜—™˜˜™œœŸ¢œ•’‘‘–œ¢¦¦¨¨§¥¤¢ž˜“’ˆˆ…‰ˆˆŒŠ‹‹•–›Ÿš–ŒŠŠŠˆ‹†pdZVRTUZ[TSRURXNY`[_ac`^a`__`ffhdeidfg`YWe—·˜„‚„‚†‡„ƒ‡€}|~}xwwxz{yrptzSC>?=CCDFGGHJPORW_[_^ZZYVSECCCBcÏÏΠYI9/)(('!! " "*(+(&*,0;@BQ‰¸ÕÖÔÔÒÍÊÇËĺ²­¨˜ Ÿ„qfbREFJIGJHLQTSUZ`fjq|Ÿ«¿ÏÜçëìêé㱘————šŸŸ ¢œ—‘‘“’“š §«¬ª§¥ —””‹ˆ‡†ˆ‰Šˆˆ’””™ ¡ž™Œ‹‹‹Š†vdVUWTVOQQUXWX[c]SV\XT\Y[`degjidee`cadu¡Æ¶’ŽŒ††ˆ‡†ƒ†ƒ}}{x}x{}{wllv~M@@>@CCEEKTJORWZ`cgrnjdeh^FBEDLžÕÑÅÅŸjF8*&&!$#  #"#$%#)*(*4Hw¡ÌÛÚÖÕÔÔÑÏËËÇþ¶¡©Ÿ•„rdXJEFGFEGFFMSUV\[[ap}‰‘ÅÖàåææéì»›—˜˜™——šž ¡žš–’’”‘Ž‹Œ‘– ¦««©¤Ÿš•””‘ˆˆ‰‹ˆ‰‰ŒŒŠ‘”—™œž¢¥¢ŒŒŒŽŽŒ„xda^_\S`ab_\\\XVZ\[\bdegihigfegc^i~°Ä²˜‘‘І„†„…„…ƒ~|}{z|~~}wodiz‡Q?BBCEFHHMaPUX`glnw„‰ƒ‰ƒwhKEFGvËÑÒÌÄÌ–a?+%$"%(!%%"#$'(&&*-0Z‹»ÔÚÙÕÔÕÕÓÐÐÌËÍÄ´¦­¡“nfSIDGHFEGFGJPVWZZ_bko€ªÍ×ÙÛÛäîΙ…~˜™™›žœ››š–’’‘ŽŠ—¡¦­©£ž˜–””‹‰‹Šˆˆ‡‹‹‰’”—šœœ¤¥‹ŽŽŠŽŠ~rke\]]_]VZ[[Z]bgddflgeffhecam‡°Áª‘ŒŒ‰ˆ„ƒƒ‚‚ƒ‚‚~z{{||~|xo`Uh€[?@BDDGGIKNQY`irz…’¨¦™š—rPHHO¦ËÒÓÎÊÐËæp>)(&)($"##$!!%)'%(+ErœÆÑÒÒÓÓÒÒÑÎÍÍÍÍű¶µ¢“qcNFFGIIFHGHGJQUVY`gdkÄÈÍÍÉÞìÜœ—šŽi\„—˜š—–˜Ÿž˜Œ‘ŽŽŠ‰‡Œ“ž§¥¢›•”‘’‘Љ‰‰ˆ‰‰‡‰ˆŠŒ‹Ž–˜™ž¡¤‹ŽŽ‹ŒŽˆud]\b`daadceggfjilmonptˆ–®³š’’’‹‹ŒŠˆ……‚ƒ€}}z||~~wtgUAlˆ™j@CBCGGILQTW`ls|žž«³½Å¸¸—^GJhœËÓÓÎÍÑÐȳwB0,--*1**$#"((&!+=[{¡·ÀÆÊÍÎÐÏÌÊÌÍÍÊÁ¸¾­©‘x“mKFFEHGGIHHIFHUY[Y]ey¥¥´®¾Òíà™•˜™™ŒUO„–š”•š¡£›‘‹ŽŽŠ‰Š‰‹“ žœ–”’‘ŽŠˆ†‡‰Š‹ŠŠ‰ŠŽŽ“•š ¢ŒŽŽ‰ˆ‹Šuoputrtuuvx~‚†‹Ž“™¥«¡–”“‘‘’‹Š‡‡„…€€€‚€€}}{}~}yqdJ7,kš}DBCEFGIOS]biyƒ•¬¹½ÂÀÄÊ̾©iHJrŸÍÕÕÐÏÑÑÑÀgXA11**0++'&"  %5Qatƒš}”·ÅÉÊÇÊËÊÊÈúÁ¶«’ŒocOHFEEIGHFFHEEDLTUX`mƒ‹€~–ÍëÚ™–—˜———€K\Œ™šŸ¢¢š’‹ŽŒ‰Šˆ‘—š›—•“ˆ†ƒ…Šˆ‹‹‹ˆ‹ŠŽ‘”—›Ÿ¢¤ŽŽŽŽ“‘’Œ‹ŒŽ••“——”“•••––“•“–˜£¤š“’’‘‘Žˆˆ…ƒ„‚~~}}|~|{{}~{yl`H,aœHDEGHGJT^itƒ“ ª¹ÄÇÌÍÍÍÎÎÇŠINu°ÎØ××ÑÑÏσ_VPH;52/1.--+'"*'2LY_d]WPRp¥´½¼½ÃÄľ·»»«¦†„dWPLEEHKHGGGGDFGGNVZ`h¢sˆÁÞÊ›—•˜—–—–“fGo𠣦¦¢œŠ‹‹‹ŒŒ‰‡‡‹Ž•š›š•‹†ƒƒ†ˆ‰ˆ‰‰ˆˆ‰”–—Ÿ¤‘“¡œ”Ž’“••–––”˜˜˜––••”–™ž¤§œ“‘‘ŽŒŒ‹‰ˆ‡‚‚{|yuuyww{zxy{}~tm[=F‚“ŒMEFGGKRZivˆ›©¸¾ÇËÍÐÔÓÓÑÍͯJNw»ÐÙÚÜÖÑÊšXUUPHD=9620/-)'',,4GPTQKLKLOT„›¦¯¯²¾²°¯Á¨›ƒ{odRNICFFGFFFDECFFEFRWZ`bfu©Ë«•–—˜š––—“ŒpO[˜£¦¥¥£œ’ˆ‰‹ŽŒŒ‰Š‰‰ˆŒ’–š›š’Š…„†‡‰Š‰‹ŠŠˆŽ•–™š› ‘’˜œ¬™“”’””—–•”–—˜˜š™š—˜™œžŸ¥§šŽŒ‰ˆ‡††…€|sqrifc\WSUTU]_fkt{}ueT.'fxmCAEGHLYjwŽ£±¿ÉÎÏÐÑÔÕÖÖÔÒ̱JKv¼ÒØÛÛØÕÉz[QOJGCB:5.0//+,27=DDCJIEFKJKQ‚”–™™›œ››®¯ˆ‹ntdZPpKDDEFEDEDBBEFEDHRTUXf‘¯›š•””’‘ˆymc\ZtŽž¡¤¡¢¤›Ž…ˆŒŽŒ‰ŠˆŠŒ‘”™™–‡‚…‡…‡Š‹ŠŠˆˆ‹Œ“–˜š›‘‘’“––š™š“”••–˜••••™››š—”–˜›œ¢ª¨›“‘Ž‹‰‡€}vyu|~€†…|vkb\UVTUTWWS]aa\]M</-)7H88AFHHPf€ˆœ±ÁÆÌÑÔÕÖ×Ê«‘’HLf«Î×ÜÜÚ×Êr[PMFFD>A<-))39>A?=<?@BE?BHKMO[sz{€Ž•¢„zkjbZPILEEEGHFDGGFCCEEEEJQV\~¢”“ˆ€qi]QJJNRd|•œŸžš••Š…‰‹Œ’‘ŽŒŒˆˆˆ‰‡Œ‘–˜š”ƒ…„Š‹‰Šˆ‡‰‰…‡Œ‘”—˜‘“’””–”–”•“•’““”“”–™›™—“•™›œŸ¦£—Ž‘ˆŠ…{{€˜©¶·µ¨  £‰ƒmd\ZXXX\]\]\_^a_``lhcg]KIGKGGMTl…Ÿ°ÃÈÎÑÔÙÜÚÒdKFGFGGFIZ”ÃÕÕÓÓϾoSNGDAJ‚ª®Ž@2;=D50**%0:37BEEGJZdgip€wzŽ{ng]cXQIFDDEEEHGEGGFFEDCDDEO\„•އwaUNLLKKLOR^m‰œœ Ÿ›“Ž‹…‚†‹‰ŽŠˆ‰ˆ‡‰Š”™œ—އ‚€‚ŠŒŠŠˆˆ…‚ƒ……ˆ–’“‘•”•–•“‘”’‘”˜—™•’”˜–˜™œž¥¡’ŒŽŒ—¢±ÀËÉ»²®¶·½¾´¥š†{l`^ca`aikonpnrqpfg`aZ]_\WGKTXoŒ«»ÆÎÒÓ×ÜÝÞÖgJFEDEGDGWƒ¸Ã¿¾»Â«^JGB@ZÊáåäåÒ€9,(&?A-##+'1>?ADIS[\`glgrwbbYVVUKGDCCDDCFFEDEEDGCBCFF`†ƒhSMLJKNKLJMVcn~™Ÿ ¡¡›•ƒ‚ƒ‡‹ŒŽŽŽŽŽŠ‹Šˆ‰Š‹‹‡—››™Ž‡ƒ„Š‹ŒŒ‡ƒ„ƒ†…Љ‘“–”‘““’”—•˜””‘‘”˜™˜› ¢Ÿ’‹ŒŠ‹‘¥½ËÎÕÚÕÑÌÇý¿ÃÄÅÈÈļ¯œ‰zwskkmozx……†“—‰„zpmkjkgRMN[m”»ÇÊÏÕÖÚÔ»©žRHFGCCDCDNehXSTY`^GCD=J®åãèéè忦B,>fOO43# );@CHOTVY^abe^`YUUUMHHDBCBEFHGFDDEFEDDGYp…†kRJKLMMNOMPP[kqsŽž¡ ¢ Ÿž˜Ž€ƒ†Š‹‹‘ŽŽ‹Š‰‰‰‹‹‰‰‘™›ž˜…„…ˆŽ’‹ƒ~‡‡…‹ˆ“’’”“•›—–™“‘’–˜˜šš¢w|…‰ˆ”µØêíêèæäÞÖÒÑÏÎÐÐÑÔÑÖÓÏΞªšŽz—|{z„Ž””ŽŽˆ‰ƒyvqnnkbOQ`v˜ÁÉÏÓ×Å£pTKIFHFEDCBC@HPRQNJGDBB>13±àëëëíëééÖ’P=7)::#!/9EJNQUTZ\VXXWTRSKIFGFCDGFHGFFFEEFH\r{bRNQONONTWVX_non—ž¡¢¢¢¡›•‹}†ŠŠŒŽŽŒŒ‰‰‰‰ˆ‰Š‹’™Ÿ›‰„ƒ‡’’ˆ€~|€~€€ŽŽŽŽ’’“—””’‘”›™š £ƒ^W`nsx’µÒÓÚßãäâàÝÛÜÚÛÜÛßÞÛÛÕÑÐËĽ¸¨Ÿ•¼…}†”””•Š„z|zyy{wytiSZv˜¶Èαw\PQOKKGGEDDDC@?EIJIHFEA6' žíêìéìôëðêâ°cO6+2%&##%8CDJLPSQQRTRPQLJHFGDDDEFGHEHGEFKaz{wZSRQOONQPY[bhohe~•šž¡ Ÿ¢Ÿ›•…{„‡‰ŽŽŒ‹ˆ‡ˆŠ‰†ˆ†ˆ‘š Ÿš‘Š‚‡Ž†|{y|zww‹Œ’’“““““‘’””˜šš›„ƒxgXUWTZh|—®ÂÐ×ÚØÝßàâàááÝÝÙ×ÒÐÏÍÉÇÉ»´®¨ž›• §«£ž¦¤£‘‹…މ‰‹Š‹€gLZr“µÃÂaVRQPNIIHEDEBBC>:BFGED?6'=åéêëìÊW2\“ħ]HI5(--'"($"3=CGHIMONNNOMLFFFEDCDFEHHHIGIMQVowr\TUVNNOPRTYaplljy–› ¡ ŸžŸ›‘~x}€…‡ŒŒ‹ŒŒ‹‹‹Šˆˆˆ‹ˆˆ†ˆ‘—¡š“‰ƒ}}€yxzwzvsŽŽ““”’‘””“”•–™›ž’‹ŒŠ‰ˆˆyf[TSYXblx£¾ÅÐÖÙÝßßáÜÜÙÖÓÑÑÍÍÌʾ¿µµ¹¬³º»º·¹·µ¦œ —”š”fLIYny£½ÇsXRPLJLKHHFEDCB?=?CFDB8(díïõä™4'''$hlcC90FR^dU\p|vgZFEGILMNPNLJIIHEEEFFFJKLQRSSTQWd]ZWYVSTUUVY]gtqkz“‘–ž¡ ŸžžšŠzyz„‹Œ‹ŽŒ‹ŒˆŠˆ‰‰‡ˆŠ‘š žœ’‰†|{|vuxwyw|’“’‘’“”“–•—–™š‘‰ŠŒŒ‹Šˆ„yeVWUTU\ao„¤¹ÊÑÔÖÙÚÚØ××ÕÕÓÑÍÍÎÌÊÅÂÇÉÅÈÈÊÉÊÈÇļ¾¾·³°¶°aIHHJau’°À“ZRJIIJIEFFDA?@=9+?C=6$  #%‚ƒGV9!$&'*,).3*-+1`r†¥¾Ùíððïëà°NDFFHKOLLGIFHFDCDDDEITWTSPTXccb^_ZWYWWXW[dwqnx™—™œ  žš˜—”vv|{‡Œ‹‹ŒŽŽŒŽŽŠ‡ˆ‰‡ˆˆˆ‡‘—Ÿ¡›“Š€~}}{|wu{‘’”’‘’“‘‘‘“–—›˜“ŒŠ‹ŒŽŒ‹Œˆ…eZRSSV]emy–¢¬¼ÈÌÐÐÑÓÔÓÒÐÎÎÏÏÍÏÍÐÎÌÐÐÑÔÕÕÔÒÒÑÔÓÒÓÒsJGFGEIjˆ›­©^PNJIIJGGEB?<=8.-6=.,%%$&#*Œ>##*(.EMkgB&&+.5H~ž•ªÀÏÝêëéæèê©EEFEHJIIHGDEEC@BEFGIQ\]ckkptpphgac``^\^dsyiuŽ”—ššž¡£–“’†wtvz{~…‡‰Š‹ŽŽŒŒŠŒŠˆˆˆ†ˆ‡ŠŒŽ—œžš”‹€‚‚€zwtx’’‘‘Ž‘‘“•—˜š“‹Œ‹ŽŽŒŒ…ua[TTY\_ckm“£­¹ÂÈÌÏÎÏÎÌÎÍÍÍÏÎÑÐÑÕÖÚÝÞÝáàßÝÚÕÓÆIIFEEFDRxœ qONJHGIEFDB>;:4()1<6BBCUaq„§¦¸ƒP=12J„nY1)+@Ij®´¶¡f=AHdŽÍåéìÝUDDFFEFIHFFHHHGILTat‰Š|ƒ‡’‰†xqlkcffhlhlmt‡•——šž¡¡œ”Œswvww~†‰‰Šˆ‹‹Ž‹ŽŠ‰ˆŠ‹‰„†ŠŠ‰‡Ž—œ š’‹…‚€„ztqt’ŽŽŒ““–˜•ŒŒŽ‘ŽŒ‹‹‡ƒ{{r^WXX[afl{‚Ž›£­³¸ÅÌÍËÍÐÐÑÐÐÒÔÖØÝàããâàáÝÙÔÑÍÇ„MGGFGGFCDY†––€RMJJHIGGEA=<:;Yw­¬¨™½ÞëñéÕö’]Y]i¤±²˜gBELWŒÀÌÕÚØc696N»æëã^CEFEEFGGHIJLRPUVbjx†‰Œ•¤±ª¬š„xrmqlopnjwŒ“”—™˜šŸ¢˜‘‘~suvux|~‚†Š‰‹ŒŒŽ‹‹ŠŠ‹ˆ…‡Š‡†Š‰˜™‘ŒŠ„ƒ~~pnoŽ‘‘’“–˜”ŽŽŽŒŽ‘Ž‹‰‹†…„~|wj[WV\]abgr{„‡“ž§²µÂÄËÊÈÍÎÑÒÕÖÙÜàßàÝÛÚÙÚØÕÉ_GGFFHGFFGFX|ys^KMLKKFGGDA@ÑìñíÙÃÆêòðïòðçÛÕÄj—¤ÀËÐÍÀœt‚ÆÓßëñòðì½H57Us±¨QCDFCCGJJOPQRWZWYakvŽ›ª´½Áº¶®›~yvupprjnŒ“•”˜˜šœž –’‘†zrtsvwyz…ˆŠŒŽŒŽŽ‹‹‹‰ˆˆ‰‡…ˆŠŠˆ•œžš’‡„€ymdaŒ’–Ÿ—Ž‹ŽŽ‹‹ŒŒ‹ŠŠ‡ˆ†‚€‚€}xlZUTYXY^ekpq{Š˜Ÿ¨¾ÁÆÊÌÐÑÔ×ÙÝáãåçæåãââßÜÖ“IGDIGFFFFFEDJd[`SLKMHGU\e\§ððîïçÑËäðíñòîË›qP5:ƒÎäïñòíáį”y~¨Ëäïíìîò¸57CL‚EACDEDEGKLMPRSXYZcgyœ¯¾ÃÈÆÇÈÁ´¨™~vvwnpr†–•˜––™š›Ÿ›˜”‘wtsusuwy„†Š‹ŒŠŒŒŽ‰ŠˆŠ‡Š‡ƒˆ‡‡„‡Œ•› “Œ‡}ti]VŠŽ”›”‹ŽŽŽŒŽŒŽŽŠŽŽŽŽŒŽŒ‹Œˆ‰ˆƒƒ}wt`VVTW\eebhqt{ƒ”¥·¾ÄÌÑÔÖÝÞáæèæèêçæãáßÙÑbLHIIHJFGGGEGEOT[VQM\—ˆ®±“~ÜîððÚÌÚÝðòðôÏS6<:<D`Èáóóòòòñßô’fTWg³åíïìóR1@N?;ADEFGGKMLQPUTX\bmrƒš¯¿ÅËÍÍÎÉÄ¿´¢’‰ƒ~tmr…Ž’“—šš—–™œž˜“‰zvswyrvxxz……‡ŒŠŽŒŽŽŠ‰‡Š‰Š‰…ˆ‡†…ˆˆŒ—œ ”‰ƒuhYL‘–›–ŽŽŽŽŽŽ‹ŽŽŽ‹‹‰Šˆ‰†…„„„„€{vsaTQTUZ^^cggrmˆ™«­ÃÎÐÔÙÞâæçèèêèæäáàÛ¯LHFFGGGFFFFDEDBJRY[w¶ÐØ×е«íóñíæìàÑóóߦJ,7Ie€ƒ¡Ïìõòóóóõòâés^]\j¼ðììñr->6@?ACEEFGGLMMNSTU_frƒ–¬¿ÊÎÐÑÏÎÍËŹ©—‹‚vlqƒ’”—˜™˜˜˜œœœ–“„wuuzvtxwvy}„ƒˆˆŽŒ‹Œ‹Š‹‹ŠŒ‰†ˆ‚†‹††‹” ›“Š~gTJ‘™›ŒŽŒ‹‹ŒŠŠ‹ŠŠŠŠ†Šˆ„„ƒ†…‚~{ywoeYSQSTSZ]`hhs{†’›²ÆÍÏÕÜáãæçèèèæäáÞØxHFFFFFEFGHFEEECDFLm¹×èíáÛ×Ýíôïòñì³uÔ¬L3BBi´Ó×ɹ»¹ÑôòôòóóïÓ½šrc^coºáåèa99./FKFHGFFEJMMOQTUW`n¥»ÈÍÑÑÔÔÒÐÍËÁ²œ‘‡{kfi‚’”–˜—––•–™˜”€tvvtttvuwz|€‚€…„ЋދŒŽŽ‰Šˆ‰‰ˆ‰ˆƒ…†‡ˆˆŒ“œŸ•…kU>™–‹Ž‹‰ŽŽŽŽŒŽŒŠˆˆ‰Š‡†ˆˆ…ƒ‚~}{z{vrm_SSRQTVZ^chky{ˆ™´ÃÌÎØáãèçéèèææáÞÏ\HGGGHGEEIIFFEDFDCHºÝìíçàáÜØéòóóð¬MBSw}€­îðéÞÐĶvY§òôïîääÖË¿¹©ubz‹‡jeTD;/4Sy\TTOKJKOSUWXVao®ÂÍÒÓÕÖÖÔÑÍÇÀ±Ÿ’}pe`lˆ¬¢”—™—•••–•“’Š|xyusutwttwx~ƒ€}‚†ˆ‰ŠŽŒŽ‹ŒŠŠŠ†‰ˆ„‡ˆ‰‡††‡“šžœ’€dE”ŽŽ‘‘‘’ŽŽŽ’‘Ž‹ŽŠˆ‹ŒŠ‡†ˆŠˆ††‚€€~}}{y|ztfTRSRQVW_bcmsxƒ—³ÃÌÔÞäééìëëèçäà²MGGFFEEEFHFEDCCCAALÑãëäàÛÜб¼òôôÖhI‡ÈÔ¸­ÂïôõóçÙÓer¢¶¶ÁÑàÞÝÖɾ£Š­¯¡œ“‹s_A0L²edqrlfa^XTWW[fr‰®ÁËÐÔÕÖÖÖÒÎË¿´¡—‚lcdx¤Ðã½™˜••–™™•–ƒ{}vxwxsuxvvy|€‚~}„‡ŠŽŽŽŠ‰‹ŠŠ‹†Œ‹Š†ˆ†Œ™¡œŽ~a’‘Ž‘‘ŽŠ‹‹‹Š†‡ˆ‡ˆˆˆ‡€€„€||{|~~€}zfTPRPTUW]]adjuƒ£¯ÉÒÚãçéïëéèçãÜŒHHGCFEEEEFFDEDDCABB¤æÜÅÁ¿¹—o°óôõ´}ÀæßÚÆ¢íôôõõôÚ‰rw•¡«³´¸Ê×ãäêÛÑÆ±~‹³¾¶·°©šœrPZ_o~‡ˆ†…|fZWWcp„¦ÀÉÏÓÕÖÖÖÒÎ͵¦”{hdeƒ·Õå縘˜™˜˜˜–”Š}~{{zwwttwyw{|~€{ƒ„…ŠŽŒŽŠŠ‹ŒŒ‹Œ‹Šˆ†Š‡ˆ™œ˜{‘Œ‘ŽŽŽŽŽŽŠˆ†‰‰‡…‚ˆˆ†††‡ƒ€|~{|}}~}~|we^ZRQSUUXZbcgpq|޼ÏÓÝæéììéèçã×pHJGFHHGGGFFFFFECDBBQÈÌŸ¨“s]šðñô×îòëåŸRÁòòóõöâsmˆ¨»¿½¸¶¸ÊßíððíêÞdMˆ¸ÃǼ©¯¿ˆDNkš——–©ƒvx_alˆ¨ÄÌÐÔÖØ××ÓÏÊÄ´ …ieelŒÂÖÞÚʨ˜™š”––’‚|zzyzvutuutvw||}{|ƒ‡‹Œ‘‹‹Š††‡Š‡‰‡‡‡††ƒ…‹—›™Ž’‘ŽŽ‹Œ‹Œ‰Š…‰ˆ„„†‡†€€ƒ„y}~|{~€}uohacaXRQRUVdabbfr~˜¹ËÔÜåéêëéèãÅSHFGFGGEGEEFFFECBC@@AsµsreZ]SiáðôóóñÇoB>Éñòôô×r_ƒ£µÃÑ;¼¹·½ÛñóõóôóØpDO|µÑÜɹ½Ñµ\Qmš–Ÿ¯ÅÀ¸Žttˆ£½ÌÒÔ×ÙÙÖÒÌÊñ’o_ceu’ÃÕ×ÐÈÃ«šš•’“Š|zxxxywquvpvvvxz|{z‚ˆŒ‘ŠˆŠ‹ˆ‹Š‰†…‰ƒ‡€€…Š’™˜‘’ŒŽŽŽŒ‰ŠˆŠ‡†‰†…‡‡‚…ƒƒ€~|}}|}|ƒƒƒ|xvkglqrr`TQUTY\^]dju~˜ºÑ×ãèéëìéâ­MIHGGIGHGFGHIGDFEN]j‹™ŽeZSRU|»Øòõôôß ŽSI¹óõöì°‘p—µÄßâØÏÇ¿½¾²Óò÷ööõîQNu“¶×èåÖÙçÓxYwƒƒŒ”„—кu‰¤ÀÍÑÓÖÖ×ÓÑËÊı~^bfgv¡ÅÏÐÉÁÁ¼¨šzx}|yvvvvutuuvwxz~~z|€†‘‘“ŒŠ‹Œˆ‹Š‡‡‹ˆ†‰ƒ„…†‰‘˜’‘ŽŽŽ‹Š††‡…†‡‡†…ƒ‚„ƒ||{~€‚ƒ‚yrlfjrxy~{pXQQTUYZachn…ÃÐÜâæéèèÞƒIHFFFIHFFGFFFJOYjЦ­©™Œwec`’ËÌÇðôõŸ‡¶ÄÔÕʶªƒ ½ÚíìììãÒÊÀ©¢ÒôööõðŸeJl…ŸµÚïðçëîà€Xs|svyhdƒ½¿ª‹Ÿ´ÆÍÐÓÔÔÔÑÌȼ˜v`eik­ÃÉËĺ¹µª¢™…wvz}~}ywwvwvvswxzy}}yvx„Œ‘‘‘ŽŽŠŠŒ‹‹‹‰‰Š‡ƒˆ‡†…‰ˆ‰ŽŒŽŽ’‹Š‡„„‡…‚€}z}z€z{†„}znhekou{~„‚zaTMSVV\^afm€ ÁÐ×ÝáàáÈ[GGFHFGHFGJJOV]ivƒ›¸ÅÍÌÏÄÄÇÊÝ×ÅÃòõôݬ¦§¨¹¼ºººÈÁ²’®Çéóôõõõï೦¶äôõóÚŸˆVc‡£®ºæñóññïåicwrnn^fl©Þºw‘°ÄÏÒÕÖÖÓÑÍÅ®‚a\fit}˜¸ÅÇĺ³««ÂÌumuz}|ywwwuwtutrwxx|~yuuy}†‘‘’ŽŒŠ‰‡‹‰ŠˆŠ…ƒ„…†‰‰…†ŽŽ‘‹Œ‹‹Š‡†„„…€€{z{~~~‚…ƒ€ztnhghrs{€‚‚„„ˆ†xXPSTWZ^ben„¨ÆÓÛããã³LFGGIIHJNRVWatvˆš¯ÍÒÔ××ÖÕÙäëâÉ»ºíôñƱ­¡¢ØÁÀÃÅÖÕÁ¢»Ûòõö÷÷ööçÁ¸®¾×íð랪€d{š°»ÚóóñóïìQWYYZZcu͵f}“²ÉÑÑÒÔÕÔÐÏ¢z]baju} ¾ÊÉÇû¶¨»æÚ†epxz~zvwvwuusstswvz{‚|uusyƒŒ‘“‘ŽŽ‰‡‰Š‡ˆ‰‹†ƒƒ†…Œ‡‡‡‘ޑޓЇ‹‰ˆ‡…‚„‚‚…€ƒ}|{}€ƒƒ€‚„…ˆƒ|wnhbbit|ƒ‚‚‚‡…‡£Í¸WSRV[`aiw‘·ËÓÚÞÝ|IGHFHJNWWdjipƒ—£»ÊÓ×ÚÝßÞàèðîÓÀ¹µÎð埵­ÍÔÀÅÐàìêϲÕîö÷ö÷÷÷õÖÄ¿®Àáëïàg¶¬˜™›ª¾ÛóóôóðîˆNNPQVTV‰•PMg£ÄÊÍÐÕÖÕÑÈ·’i_daktƒ¨ÅÎÐÍËÄ¿³¤³ÞÓ~luy}|{xwzyxvvvutxyz~~xupt{…‘“‘ŒŠŠ‹Š‰‹†‹ƒ„‡‡Œ‰ˆ‰Ž“‘Œ‰Š†‡ˆ……ƒƒ…ƒ€~|{z}€ƒ„ƒ†‚‚}xre_dkmx‚‚„„„ÒÞáלWOSVXW^hx‘½ÏÒÖÔ_FFFHFRZ^fhlmv‚œ²ÁÎÔØÞãäãèñôëʾ¸³«·ÑÏ·…lß̼ÓàêóðƼçó÷÷ôôõöëÑÍÊ´§ÑßÌDOµ¹¨“›¶ÉÛîòçíðà¶oNLPOOUpLHHOx—¾ÇÌÐÔÔÑÎÆµƒ`cddhq„¤ÁÍÒÑÐÍÇÀ·£«É«opx{z{xv{xuyutvtvx{||uqnu}ˆŽŽ’‘ŽŽ‰‰‰ˆŠ‡‰‹ˆ††‹ŠŒŠŽ‘ŒŽ‰†Œ‚ƒƒ‚‚€†{{xw|z~€‚‚…ƒ€ytqjb_fpr{|€…„‚‚¬ÙáÙÑʘ]QPSWY\gx¡ÅÊÐÐ[EEGQggqqvssnv‚Ÿ¯¿ÎÔÙßâåèðôñ㎶°ªÉÒв~¢èƺÕëïòÍžÂîõö÷öõõêçäÞÜâ²´NCC‡½»šie¯¢ÁÎÒÐÒ´½ºhRTQNNIHIGHY˜¶ÂÊÍÎÐÒÍèw]cebkt–¬¿ÌÑÓÔÔÑÊÄ»§’xjpvz|zxyvvuunrstw{z{{xrgis~ˆ‘‘ŽŽŒ…‰‡‰„‡…†ˆ†‡ˆŒ‹ŠŽŒŒˆ‚…ƒ‡„ƒ„ƒ„~|~|y{|}…„‡„€€|vjddghnty€~ƒƒ{w¦µ¶¡¬¼Ã›_VPQUV]fx¢¸ÍÇODCb‘™…€‚vomht„™¬ÀÐÕØÝâåíòôòãÄ»¶®½Ú×ʲŒÍêÁ»ÃâæÜµµËòö÷÷÷÷òçñóóò̪¶·§XqMj¼Å¹†UbZ]y‘£©®»ØÎqZWJHHEGGJLk‘¬¾ÇÎÑÓÍ–fWclqr‚£ÁÅËÐÒÓÕÕÒÎǾ®tlpt|zy{{yvwwuurtw{{{}uihlw‡Ž“ŽŽŠ‹Œ‰‡‰‰‰‡‰ˆŠ‰ˆˆ‹Ž‰‡ƒƒ‚„††}y{{{zy€…„€}zska_cgkuxy~}s]nˆqel€•››†zaSRSRYkv«¤GBk¾¿®wrfcllxƒ’¤ÆÑÔ×ÝâäëòôñÜÁ¹´µÜÞÓdz¥ååÁ»¸ÀÃľ¾Íñ÷ööö÷÷òõö÷÷×±¹¼¹‹´XwµÐεsPSUc€©­´ÎãÈa^ULIFGGJJMy¤ÁÇËÎÑÌ´…XVgsw µÄÉÎÐÑÓÕÕÕÓÏÉÁ­phpyz{yzvvyvvurptsvx||wh`bm{‡Œ‘Ž’ŽŽŠ‰ˆŠ‰Š‡†…‡ˆ‡ˆ‰‰“ŽŒŽ‹Šˆ†€†††ˆ‡ƒ~}~||€„ƒ†…‚€wnjedgiqrz}|€‚|v_Veplnx|„‹‰Œ€t_WPQ[ek~xFJ®Í½¡~somnuy†›®ÇÏÕØÝáäéòóëÓ¿·µÌêáÔŹ½ñåý¼ÂÊÐʸÕãöõö÷÷÷ööõö÷Ú·ºÃÀº™k­¹ÎèÞ¯mPT\p¥°³½áè¶ne]XQJEFIIW¥¼ÆÎÎĪqWZl|„›»ÅËÎÑÑÏÒÓÔÓÓÓÐÉ¿¬sory}|yvz|zvtwvwuv|€}xphddo€‰’‘ŒŒ‹ŠŠ‰‰ŠŠ‰ˆŠ‹Š‡ŽŒŠ‹†„„€ƒƒ‡ƒ~zy}~|}‚„ƒ‚~ujca[_ilpry‚}yyw|€€€€…ˆŒŒ‡‚zjbWYZ\doo_mÎÒ·“|}x|xy†Š”¥½ÈÒÔÖÛÝäðòïä˹»äìáÔĹËóîÌÂÅÐÚ×¼µæËæõöö÷÷öööõöÙ¼¼ÑпŒ¦½¾ÉïïÑ®`Uar‹¡®µÀåîæ{yrh\RLHEHp¬¿ÁÅȼ¡lVaq|Œ¬ÆÇÎÐÑÐÏÐÎÐÑÒÒÓÐÌ®‘~pmqxxzvtvuvrrqrt}y||yn]P]s‚‹Ž‰‰ˆ‰Š‰‰‰‰†‰Š‡ŽŽ‰‡ˆˆ‡†„„„Šˆ„}~€}~|‚€††€€}vrka]Zcqutw|ƒ€‚‚‚„„ƒƒ„ƒ††‰‹Š†|tlh`iojpswtšÛÖºšƒuuvrorw|‡–¬ÀÌÑÕÛÝàæêìç×½¿íìÞËÀ¶×öõÞÒÖàÚ´®òØÌî÷ö÷öö÷÷÷÷äÈÅÜéÚ·¹ÅÅËñóçÅ—Va†Ÿ¦²¹ÂæîïÁ—’†odUMJGX†’¦½À¶”_O\vˆŸ¹ÅÇÏÒÒÑÑÑÑÑÒÒÔÕÕÔÌÁ±”xnoqzyuzvwvvxstvzz|~xrfUSd|‡‘’’‘‘‘ŽŠŠ‰‰ŒŠŒˆ‡‰…ŽŒ…†‡‰‹ˆ‡‡„ˆ‡‚~€ƒ††„Љ†€~||sld__bistx}ƒƒ†„„‡…‡„†‡†Š‰Šƒvpmmprvyz{s{°ÐÓÉ·©‡vqmnorv•©¾ÌÓÕØÙÚÙÕÕβÊïåо¶Ù÷÷ôíê俤›°óóâãõ÷øö÷÷øø÷òéæéòíξÌÓ×óõôÕÆ}d}¥¹¿É×ëîðȬ´±«™…m[VIG^†œ´½±wJGKn‘¦¿ÅÊÏÒÒÑÒÑÒÓÓÓÕÕÕÔÒËÄ·‚tqtywyywvxxxxxxz}|wl[ITr€‹’“”“‘ŽŽ‹ŒŒ‹‹‹Œ‹‹ŒŒ…†…„‰††‡…ƒ~|}€‚€„‡‰†‡‚{uurdeWXZbhqu||€‚‚‚‡ƒ…‡„‡ƒ‡ˆ‰‹‹ŒŠ…xrnjntwy‚€€s^ei­º°ž‹ue`cfnw“¦ÁÈËÐÑÒÓÒÒÏÉ»§ÓñåÍÀ¼¹Èòõõôéò¬¦­ëööóõöòëòöö÷ö÷ööðôõê´ÇÚçõõôÕÖ‹¡ÁÖâëíìØ©²¼ÅÆÃ°œ‚dRJLi£®~KGGH^‹¥¿ÇÍÍÐÐÐÒÒÑÓÔÕר×ÔÓÒÏÉ»¢‘…wrz}{xvvzytutu{z|zrfE5Yt‚‘’’Ž‹Œ‹ŠŠ‹Œ‰‰ˆŠƒƒ…ƒ…†‚€}~{y€}‚ƒ„„‚„vjig^`QVdehmv€~|€„ƒƒƒ‚„…†‹Š‹‹ˆ‡yunlpoxx~†‹ŠyjZao‚–|jibdow‰–£´¿ÅÊËÎÑÏËÁ®–—ÙôïÜÆÁÀ½Ìáääù¶²«¯àöö÷÷ì¾½ìö÷÷÷÷ö÷ñôôôÀ‚ÌëôôìÄÍæVq›ÂÔßγ©·ÀÈÉÈǾ¬iWN[ki_FHFGHS|¢¹ÈÏÎÐÏÏÑÐÒÓÔÕ×ÙØÖÕÓÑÎ˲¥žƒuvyvuvyvpuuvvzzzsjJ=Bbz‡’’ŒŒ‹‹ˆ‰‹‹‡‰Š†‰‡ˆƒ‡†ƒ|~}|€ƒ‚…††ˆ†{ongh^UPcilot{‚„ƒ„‡„ƒ†„…Љ‹ŽŒ‰ƒzwupqssx|ƒŒ‘’‰xfKO^comlkjehqx…’ §°¶º½¿¿¼·­˜Ž‘ßôõíà×Ðű»ÁÕ¿»¸µ²´Íõ÷øïƵ¾ð÷÷ø÷÷÷÷ôõöõÝu‚¹âÝÆ¾Çí×XX^lqz…©¼ÄÊÎÏÊÊ´ˆfUV\MFIIEGGO|­ÂÍÐÒÒÏÏÑÑÒÔÖÖ×ØÙØÖÔÔÑÔÑÊÄ¿¼’swwyvxwrvy{y{{~wp_J7Ik}Œ‘‘‘‘‘Ž‹‹ŒŽ‹„…ƒ„††‚€‚|{}}}|‚€‚„‚„†}{qc_[TNHRdinkuz|‚€ƒ‡„„…‰Š‹Œ‹‰…}xtpqrsuw}…“˜•‚nW?;FNPTVV]^dgpx…˜¢«°­°¶µž—†‚Ïðñóñè»mªÀÈÛþ¼»¸ºÀÕßÕÁ¸¸½íö÷ö÷öø÷õööõèž–§±¸¼¿Êëñ’bcfj~Ž¢£¯»ÆÈËÎÏÏÌÈ®~`WWc^LHHFHIc³ÅÍÒÑÒÒÒÓÒÒÕÖØØÖÙØÔÕÔÓÔÔÒÐÌÎÏžssvwtxruxxuwx{ztiV8*Lj~ˆŽ’ŒŒŒ‹‹ŠŠ‹Š†ƒ‚€€}€~{~~}{~€„„~tpa^VPJ<PYhnuuuw}~}~~‚„ƒ‚‡‡ˆŒ‹ˆ…€zspnpstu{…Œ“—˜”‰wdM+)+?KKMLOOPZafjx|{{z{v€…‚ÁäìÕ‘Ll½ÁÎßÇÿ¾½ÃÌв¾½º¹»Øö÷õö÷÷òôöõõ妰¹ºÁÇÌÖìòÑfdmwŒ¢±ºÃÆÌÏÏÒÑÏÏÎË®{]\_{§dKIHHLÆÍÐÑÒÔÕÕÔÔÕÖÖ×ÖÖÔÒÑÓÕÔÔÑÏÐÒÖÔ–vvrpwrsrspuwy{tlcC#(Oo~†ŽŒŒ‹‰‰‡‡‹‡„ƒ‚…ƒ€ƒ€ƒƒ‡ˆ‡††€yoiZXWMD:\gnu{}}}~€…†‡Š†ˆ‰Œ‹Ž‡‚~ztsrsvwx„Š‘–š›”ŠyjT/8)1KRWPLIKPQV[bhktpllpu…•tjgnlVLNÈÆÖçÍÇÁÀÃÒÛÆ°ÂÀ¾¼¼Áä÷õö÷ßÐìõôèÕ¤¥¼ÍÖÝãêòóéycr~Ÿ¸ÀÈÊËÍÑÐÑÒÑÑÑÏÈ¥paou§ËšOIHJqÃÎÏÒÒÓÔÕÕ×ÚÙØ×ÔÓÐÏÎÐÒÓÒÎÍÍÐÒÓÄtwttrxtstzz}€xpnZA(/\u„ŒŽ‘‘ŠŒŒŽŠ‹‡‚ƒ‚€~~€„ƒ„……†‚~xk]ZJA<A?L^jwv€|{{‚€}‚…ˆˆ†ˆ‰ŽŒ‰|ywqruvyy|‡Ž”™—‘ƒtfR;6)>Ucnlj\PIIKUYY]fi`_b_di^XROONPY°ÌÈÝíÙÌÆÇÒÞÔ¸µÃÇÀ¿¿¿Çéõõá¼¾ÆÙ×ÅЪ¥®»Õèñòôðíciv»ËÏÑÏÏÐÐÎÎÑÒÑÎȾ“q‚²ÊØJFHQœÈËÑÓÔÓÓÕ×ÚÛÜÙÔÒÌËËÊÌÏÏÏÎÊÊÍËʧqwutustuvvxz~xsl`G(=g}‡ŒŽ‘ŽŽŒŒŽ‹‹ƒ†ƒ„€€€‚ƒ…ƒ…‚†zsk_TOG4),?Vds{~}{{}€~…‡‰‰ˆ‹ŽŠ…|zyvosuyz{‚‹“—œŸš€uhTOGFUcoz†‰„w^QSUQVXXTXYWRSVT[_ddepÆËÆÞòíàØÝåླྀ¼ÉÏÆÄÂÂÉÕàìɾ¿¿¿ÁÃØ³¦¯³·ÀàòóîÊtfw¡´ÇÏÒÑÒÒÒÑÎÍÌËʽŸjn™¿ÌÒÐËuLHLh¯ÃËÒÒÒÓÔÔÖ×ÚÛÙ×ÒÎÈÇÆÇÇÍÍËÌÌËË¿˜srxvpsvywvvy~smgV7)Xp‹‘ŽŽŒŒŒ‹Œƒ†€€„†‡„„…~vtgVP>75 #H]pw~|~|{{yz~}~†‰ˆ†‰‰ˆ„{wurqqwxy}„Ž•››–Š{seXLPS`lv}ƒ‰”¢¤¸ ‚wmkptu€Œ–¡˜}uomŽÓÃÂ×ôòñòóîÊ»½ÆÕØËÍËÍÔàèçÃÂÂÀÀÂÇÛ¹©°´¸¹Ãè´£ohuˆ¦¾ËÎÎÍÉÆÂº³­ sVOR°¼Ó×ÖÌ]JHMw«ÂÎÓÒÒÓÕÖÖÖÖ×ÕÒÐÎÉÄÀº»ÀÈÍÍÌÌ·„mrmqortuuuvzxojYE+;]t…‹Ž‘Œ‹Œ‹‹‚€ƒƒ~„€‡‰ˆ€zqdUFJ2+($+A`ox{~}€~{z~~~€€€…„†ƒ…„……}yruuwvwy|‚‰’™ Ÿ›’‰yqg]P\fit{„ˆŒ•œ²ËÖÙÓÐÍËÎÍÍÏÌÉóš‚ynhŸÞÆÂÏóöõö÷çÂÁÊÖÒÒ×ÙÝÞæîòàËÉÈÂÅÉÒå¾°²µº¼Ê릕–˜•—bjr}Žš¦œ”˜“~skTKLY›ÒÏØÚØÑ®uXIHV}¥¾ÐÓÔÕÖ×ÖÕÓÒÒÐÎÌËÈû²°ºÄÉÑÊÁÀ®zprtrqruuvuz~un_Q6"':g}Š’”‘’‘‹ˆ€‚…ƒ„ƒ…€„ƒƒ}ul^UA42!#3Vgr|€}{z{}}|€ƒ…ƒƒ…„‚}|xsptvuxx{€‡— ž˜ƒvoi`Xanp|€…Š”“´ÎÝâÝÙÖÓÔÔÒÒÒÊÈÅ®–„vok½æÔÍÎíöõöôàÐÑÝä—¦éèíïóöñÖÒÑÒÍÏÕßïǺ·¹ºÁÒ¡šÃa\beiutifhbXXTMJMP–ÌÆÒßãÚÔ¶{cWKJd}›ÂÐÓÖÖÕÔÒÑÏÏÍÌÍÍÊþ·°¬«¸ÉÊÅÀÀ pqqrqrwssvyxvqf\C'Stƒ’“’”‘‘ŒŠ‹€‚€ƒ………‚‚ƒ…„ujaOG3!#+Pfx|€€€|{z~€‚†ƒ„„}€{zvruwvyyz€„‹“™ ¡ •…zricfhqx~„‹}¡ÏàèæáàÝÜÚØÓÕÑÏÍÁ±š‚tqrÑîèàÙÝðõôðëìíðÄVqëôõöõ÷ßÅÝáÝÝáçîñÓÌÆÄÅËßðÉŽ—§«Ø‹NRSSXWTTQHJMKKOd}ÀÑØáäÞÒ¸f`_Visx•µÊÒÖÕÑÐËÉÈÇÊÉÉǾ¹·¶ª¤¬²¶·¶±ŠlrusqtqttwwytpeYE3hw‹“–””•”“”Œ‹Šƒ€ƒƒƒ‚‚‚€yrg_Q>1 7[p{zyz}}y{{y}~|}„~{zxzyqppvuxwx~ƒŒ•šŸ¡›‘‡€yrjeinw~€†‡‰my¤ÖâçæåãáâÞÙÕÕÓÐÌÆº™upvØððîëéîòóòòõòåyWVÐóöõõðÉÁßïîíîñòëÊâáãäíïΘ¨¸ßªOOMKONMMLMMQXt|‰š¤ÆÖßááÜѹ†kbZhtsgrƒ±ÍÓÕÒÎÊÇÄÁÁÀ¾¿»º¹µ¬ª¬¨¥œ˜™ “hppprtosqwu}tqj_E("'9fŽ•–•••”’Œ‰‚ƒ…„„†…ƒƒ‚ztm]TO>3$<]nw~}{}{z}{||‚‚……ƒ€{y{ysuuwyzzz‚ˆ–ž¢Ÿ˜„}wspqquz€„†„ca€ª×àçéìçèæàÚÚÖÕÒÌÉ´š‹~ttßóôôôôôòñõòõä•^UQ®ñööôÙÅÍèóôõõõóákk¾ïðòóòÑ ¦²ÂåÄ^WVVXXZ]]a`ap˜™®ÄÐ×ãæáÚжŒq~edqffhg‡»ÒÙÕÐÌÆÃ¿¼·°²¬©©²«©¨¦¨œ…{‚~ekptvxtsuvvzztlfVF( 0WuŠ––—”—••”އ…†‡†ˆˆ‡…}ti`SE<+ =^gy€ƒ~~{|~~„‡††„‡…„~{{zzuxy{|~{~‚ŒŽ—ž¢–Œƒzwqruwx‚‚zbYc‚¶ÓßçêìêêæßÞÝ×ÕÒÏųŸŽ|qäñóôóóñîìóïÓ†bZSY¬åòïßÒÑäòáêôôñò¾gWa×ôðððÐÅ»µÓèÚlY\bfddhchkr{‚˜¡»ÍØÞäéãÛΫ‰u`YdcjnmietšÎâáÑÈø²¤¤™–•˜š¢£¡•x\anjftwurtxvxwvwvtncK4'&2\€•˜—––—–“„‚‚„…„†ˆƒ~tnh]IF3,:Rgnz|€}{z{~|{~‚…†…„‡„‚}}{wrttspsxxxz€ƒŠ”˜ŸŸ˜‘‡xvpqwx{~{aRU\k¥ËÛäçééèåàáÞ×ÔÒÐÁº¦”ˆrwàëìññðíå××°vd_[W§ÍßêãÞáèóôÒÉèñïÞfVNM½ÑØÑÞßæåäÝv^\dfijogpw}• ¯ÉÑÛãåæäÛг‘ti_UWeejkkookch|ž›–‹‡‚~€txy„„ymc^\eiqrppqvtwvttwrqjW? 3h‚‘—––”•–“‘†…„ƒ„ˆˆ„{xmaaUL@6*(Ogr}~}|~|}}‚„‡„ƒ‰……~yxurwsvvzwx{‚†–›ŸŸ˜‡|vvty{}€‚€hPOR^h…¶ÔàåèéçåâáÞÚ×ÕÏÌÁ¬ ~mrÓêêðîíåн¦zfeaXšÏÒØíîîïóóïÐÑç鹇c_UPMOPWfž·×ÜÓ b`^_elnqmv{„ޤ±ÂÏ×ÞãèççÜе’yjaUVcdlloqrssvvqh^ULI>YaedioqxzyxtpostvwsuwtrsxwwwuupeG)" Gt‰”–—˜–•””†…†‡‚…}rn^\VI?$$!)F^o{|}|||{‚~}ƒ„…‡ˆˆ†††~}uutquuuvxtvz‰—šŸ“Šƒ}ww|x|€„xRKORX_n¦ÌÛãçèäåäßÝÝÛÕÐÎþ”qlsÃéêíïäѯpe^gbÓÖ×ÚëòôõòóçÙáñß“{f_VOMRSSRRQTclk][^b\blnty€€‘œ³ÄÌÕßáåêèäÚͯ•ri]Z_jfkosrqtvyusmdZSF_cinuw{~‚„}{}{z{vrupspquuvuywsiTE##[}Ž˜˜™—–•–ˆŠ†‰„€ytca[WJ>7&%#)<]oz|~~|~||}……‡Š‰Š‰ƒƒ}ypmppstwvusu{‰’™™œ—ˆ}z{y|~€ƒgKHMORWdŽºÓÜâãáæäàáàÛ×ÐÍ˸‡qmy¸ÚâÞβm`]Z]_„×ÜÝÞßãìòôñòëëðïÒxj`YMOSUUSSUUWXX\Z[chmpv}‡…’˜¯¿ÊÐØßåèçåáØÍ¬Š|qa_^hggnsrrwwywxpiZSVaekswxz~€ƒ€}€}{|wuwppsvrxysyzvqbN+#@f———•–•‰Œ…„‚}tk`WPQQ5*)00+ @_lw|~ƒ~‚ƒ€…†‰†‰‰ˆˆ…~|zoquuruvrrsx†Ž–œžœ–‹ˆ‚{|{}~€„‚}UJKMOOS^n’ÅÕÜÝâäåååãÛÖÒÑͱk~ºÊ° ’€nlc\\bÓâåãäâàâéíîòïñôéÄŸrdWRPUYWVUWWWX\]]`ju{uzˆšš¢³¾ÊÏÖÜâæéçãÞ×Òâ„pfg[_jepqrpxxzxvuqf_^`fjnu{|„‚‚‚ƒ~{{yvvsutstuxy{xxrn^D&6Kl…’–—–—–‡…‚~wqgbVVEI>+3,"%5Mfx}|}z|}ƒ€€„‡‰††‡yrtnqttrxujkry€Š‘—œžš’ˆ~}|{}~…‚qKJMLORSZi‹µÓÖÜàáåçäáÛØ×ÒÆ¸ª‘|‰¸™’†urgc[]}Èßäêææäãâââåìíññݨue[RRVZ\ZZYSVV_]bjs~‚Œ’”¨µ°ÁÉÍÕØÞãçééáÛÖп¡‰…vig`\eckkkouwywzumga\`djjotz}†„€‚~zxvuqqqqrvvtwwzvjfM2!1Tv‹“–––˜†€|mj_aSO;>@)20/Oir}}||~ƒ€„‚€ƒ††ˆ…ˆ…}{wtnnqvwvuwnoty€‹‘𛕑‰„}}{€„†…€dLKKLPS\VavªÍÓÛÞàäåâßÛÛÙÑʽ²”›šˆƒvrlge^wÆÙãçìæåääâàßßäçíèÔÆ«†yf\RUY^_a]\[_`gemz}ˆšŸž®ÃÇÌÐÓÚßáåéêéáÚÔͼ­†}mfa_^fdjmppw}}|zspkaaeknnsz}‚‡…†ƒ„{{xwssrqtuyvyy{zrl`J,(Kh–——™}zof_XQ9=???/%,!'H`m{}|~|ƒƒƒ‚„„„‚„†‡ˆƒ„€}{yxmruwzwrofjs|‚‹–š™—“‡‚€}‚………€SFEIKKNPQVožÇÑÕÙÝáàÛÙÝÛØÒÐÍÈºŽ˜›tqnegeg^m¹×ÙäææãßßâßÝÛÚØÔÖÒ雷}e^UXW[_fcgdcbjpv~…˜ž§³»ÄÍÓÖÛÝáäåèéçåÝÓËĵ¦„yqda^[bckpqv|~{wrlaeciknwyy€‚ƒ††„{yusvusruurxv{~wnjR:!+GZs†‘•–—wrkc\PJG;B,3:!"<\kqz|y{y}~€€‚}}ƒ…‚~„„…„€yvqnstuxwxqient|„”™š—‘‰‚}}~ƒ‡„ƒrMGHHKMLOQWj¡ÂÇÏÓÖÚØÖ×ÚØÕÓÑÎÉ«~Âuhcahkeq¥ÈÕ×àââßÜÛÚØÕÔÔÓÏÍÍǽ¤Œui^]—rdgjfmokkq…Œ™ °³¸ÇÌÌÑ×ÜàâãæäçèçäÜÓÍ¿²¤Ÿ„voic\b`gmntwz|wuqmc[\gilptzx}†…ƒ}|{zvtstsnsrsusvystkYE2##6M`wˆ“”•mjc\VRM>>C.-/"$>Pes{{xw{}|„…€€†„‚„„ƒ€~zytrntswyxvojfqx‰Œ—˜”ˆ‡‚}}ƒ‚„ƒ†dFFHHIKKNPUr¥µ¼ÉÎÑÓÔÖÕÖÕÓÓÑÏ¿–†€Ï˜ms{„‰n†¨ÈÑÔÛßßÜ×ÔÓÒÐÏÎÏÊÆÆ¶´ˆpe^{ݸurrxuwz|Š—žª¾ÂÊËÎÓØÛÞàãååèåçççáÚÕÎ륜›Žyvngb]adorsuz|xvojh]_gklrtx{~‚„……€}{x{xvtvssrsuvv{wuqkS;$(;GVk€Ž‘”cb\WHCG<?=2.+"Oapyz|vyy{~€€…„‚…†††ƒ~{vvpqovxxyyujhjr{†Œ’•—•Œ„„‚|ƒ†„…„{SDEGEGHILNTs‰‘®½ÆÍÏÐÒÑÒÒÑÑο­•¢ÍÆ«ÅÌ¿ƒ`ˆ£ÄÍÑØÙ×ÔÑÏËÊÃÁ¾º»µ´®§”Œj`¬éൌƒ‚ˆ•˜–˜£³ÁÈÏÑÓ×ÛÞáääææççèèçåáÝ×ÐDz¡ž–‘‚uokg`^ajnvxxy{|plgaagljnpu{€„„‰|{{|wuuuutqsrouywyvk^H@,:ITarƒ“^]YOI9BIC<1+..EZow~}yyz}~~ƒ‡†††ƒ„……ƒ‚‚€|uuqoox{ywwvhjmy†•——’އ„€€€‚„ƒƒ„„tGAEGGHIIKQ_w}¦µ¾ÃÆÁÀÅÊÈÌ˵­©¨‰¹ÜÞÅ“d`^{“¨¸ÊÍÏÏÉÄý­©¤œš™žšžš˜Ÿœ|ÚíæÔº£Ÿ¢§¬¶±¶ºÄÇÏÖÙßáãäæçéççççêèåâàßÙÐʽ« ’{rnia\afjrxzz|tpjjgijpnltyx‚‚†‚‚}}{zzyzwvwvtqouxzzxqhYD@>IU\fuƒXWD===HC1/') =Thwy||xw{zz}}‚ƒ„…€ƒ‚€€}vsppqtxxyxqnhpmx‚‹‘“”Žˆ†€~‚‚„€jB@FFECGJX]bu~—¨«´¸©Ÿ§ª´¬ºº±©«›“ˆ¯Äšp^^]iy„—¡®±º¸§¢ž™•œœ™’ £‘€oty¸êîæØÎø²²ºÃÊÍËÏÒÙàâåçèéêêêèèçäæéçàÞßÛÖÏı ”Œƒtrke\Vbdlssz|}voigaaehlinsy„‚‚‚}zxyxsvqqpronuyx{rmaPN?@MY_hvˆKQH?EBI@<2&$(@[mx{}}|||~}}}…€„„‡„„‚}|{vttvvvz|~vljhlu‚†’””‹Š†‚‚†‚……ƒƒ~`BBBDCDHKdff|žª¥ž”€~„†‰¨»¢‘Š}{|{~rh\^v°…z}ƒ–ž¥¤¢š§´»ÀÀ·ÎÉ‘]IHIMsÔðíåÙÌÏÉÁ¾ÀÎÖÝÜÞáåèêíëììîììéçåäæçæãââàÛÔ;¦”†‡|xqlk`Y]bipv{|yztod`cfmlkiu|‡ˆ‡‚~}yy|wxuwpqrrwux}ysl_VNHQUabfwF@=C?@K9C2&,@Wlv~~~|~~}€‚†„„‡……‚ywruryvx||zyshglt{‚ˆ’’“Œˆ…ƒ‚…„………„{Q<=ABBEGLZet…–¡™|qhgihglny~xooifcfe\W‚»Ä~”¢§°¼ÀÀ¶¦ºÄËÐÍËÓ»hHFDEI–èòèߨËËÍÏÏÐÙàæééëíííìëìëééèæåàßäåçåããáÞÙÒȶ–…}wqqhjbWRWantyzwxuncbcklmkknuz‚…†ˆ„‚€~~|||zzzvstostvzz{qne\TQRUZSW`:75<<9;/0.!DWev|‚€…€ƒ€}}€€€††„ˆˆ‡ƒ~}xvtvovx{|{xtrkfot€ˆŒ‘’“‘ˆ†…†…„‚ƒ‚wC=<?ABEKYdp€Ž}skd^`gdbdeaeb`^\\[]_eнÁÀª·ÅÇÁÄÅÆÆÅÃËÍÐÔÑÑÒ‹MEDDDP½ïñèáÙÍÉÇÉÚãäæííîëìêæåáàßÛÚÜÛÜØÕÖÚàâßáâàÝØÑÆ°“|wpuogbWPP[hqwzvwpjfacfikkjpqyƒ„‡†‡„‚‚~||y|ztuqtvxyyzwrka]XXTURWV70'.(&(%&)Pgt}€~ƒ€|†ˆ„„‡ˆ…‚€|{vuss{~{{}uomfgrxˆŽ‘”Œ‡„…ƒ‚…€ƒ‚~hA<>@CGHUcl†’‘‡tnjgfjpuz{|wtuwjbXckk€µÂ¿³¿ÄÆÈÈÌÎÐÐÎÒÔÖÙÕÔ«PDCDEDjÙðñêâÖÏÊÅÆÅåðèìéèáÝ×ÕÒÍËÇÁ¿Á¿¿ÇËËËÏ×ÚÝááàÜÙÓÈ®‹xoqokc]WOVbpsy{upjh^ahmkkolrz€‚…„††ƒ‚ƒƒ}{w{tssptuqruyzwojc][TPPUO" 8akr|ƒ€‚}~|€‚~‚‡†ˆ†ƒ€{|zqmsvy{{ztpjd_ry}ƒŠ‘“’‰†ƒ‚€ƒ€{ZA;?DEIQ`h}—€smjik€‡‰‹Š‹Š‰Œ³¿³™†©´¥™œ°¹¿Æ±¾ÈÉÌÌÐÑÓÒÓØÙÜÛÔ·`HEFGFI’ìóðéÞÔÎËÊÉ´ÊÞÙÔÌȹ§£¡ž—ŽŽŒŠ•²¹¼·¼ÌÕÛÞááÝÙÓÆ¦oiljh\UPOWfquvtqfg_cglkiplmv|€‚††„„€||{yzxrruoqonopsv{tng_aZPPPL-Ioy‚ƒ}€………†ˆ…†…‚ƒ€zwvsrvtvy{ztic`]r}€Š’“‘އ„€ƒƒƒ€~sM=>@EHMZhƒ”‡|xuunv€†„ƒ††††‰„˜¤‚¥©“‡‰’Ÿµ¾ªÂÌÍÏÐÓÕÚÙÚÞàâÝÃqGBADEENºòôîåÙÓÐÊÍËÁ³ºÌĽÀ´¢•—”‡„…‚ut}Š“ˆ”Ÿ¬ÆÖÚÞâߨÒêˆqggecYTOQ_jrrolhdXaglomnknvz~†‡…†…~~}|ywusoqpplopyzvslcd\UWRL;as{ƒ„„ƒƒ‚€€‚…ƒ‡…„€‰„|z}wvuswz{ywwrh\Wdu~„‡Ž‘’”’‹…‚€‡ƒ€‚€€{{gC=@CDKWh…œ•‚~{|€ƒƒƒ…„…†‡‡}uz{vu€„|z‚ˆ—¯·®ÅÈÍÎÐ×ÛÝÜÞâäåÕ‰KBCCBBDb×öôêáÔÒÎÉÉȾµÈ×ÑÐÍÅż¸¯¬¢™•„xwqpqy|…«ÇÕÜßÞÚÒɳŽqiheZXQMVdqtmmecZXgmpookkt{|…‡…†‡…„€€€~xx{uorqnpoqnsuvtme]\XZWU1[n{„…ƒ~„„ƒ€„~‚„‡……‡ˆ„…|xzwyuuyz}}wtsc^`r|ŠŒ‘‘‘‹ƒ€~€‚ƒ‚~{xW<>BEIScšš‰‚€wz~ƒ…ƒ…ƒ…†x`aqhdjost„™«°¯ÅÌÎÐÐ×ÝßÜáåèå±VGCG>@AB„êöóêÛÏÑÏÉÏɽ½ÍÕÚÔÉÅÇÉÌžº»¹¸°¬¤’‡xfdhghfi„µÒØÞÞÛÔË·rid[WQMPbkqokea\^fhuoplkqz}„…‡‡†…„}€}}ywxvpmpoqsnmtywsrf]\WUV[#(Mkz‚‚€€ƒƒ€€€€„ƒ‚……ƒ…ƒ€|ywxtov{{|}unh\[ft|…Š”’މƒ}‚€ƒ}}}zjF<@ENZ_z˜’‰ƒƒxww{}„ƒ‚‚ƒ„ƒƒ‚ƒuZU\[`blopz† ©³¬ÈÍÎÏÐÕÜàßâçèÕfFDCD?ADL¯óôðèÙÔÕÑÎËÈ»ÉÔ×ÚÓÊÉÉÎÉÁ¾¸»¾»µ¶¸³±­~_]][Y[es‹½ÕÛßÜÖϾ–qe`^TMKVbpqkbc[[eprpjkjqv~…‰ˆ„„‚€€~|w{wvvpqpknojostrpgc^TXVY$<Ogv~„„ƒƒ„‚„…„…„ƒ‡††…„€xtturuz}~wjdZ^myƒˆ‘‘‹†~{‚€„€{sW>?BKU\p‹ƒƒxxwzy~€‚„ƒ€„€‚~uYQTU[Ydjhs€˜¬³ªÆÌÏÑÔ×ÝàâåçߘJDBAB@CD_Ïõôîâ×××ÓÍÊÄÀÙÜÚÛÓËÍÏÏÆÆÂ¾Á겏»¸¿Åˆb`]^][WV]h—È×ÝßÜÒ¡yfaWSQP`inpgd^_dopsolorv{ƒ†ˆ‡ˆ‡‡ƒ}~}}{uqusmgfkppwtnebYRUZ^!-Pcp…‚€‚ƒ„ƒ…‚€…‚€‚†ƒ„}}}zqttrqv|{{xmg^War|ƒˆŽŒŽ‹„{y}|{~}v_?=CGS\h~ƒvu||{z~ƒ†„ƒ~€}tWOPRUWaegnx—±³®ÆÍÐÒÖÚÞáãåãÁYEB?<?ACHuáõòéÞÕØÙÑÍÇÁËØÙÛÚÔÐÍÒÌÉÅ¿½ÃÁ·´ºº´Å¶VP]lruqd\WU^{«ÎÜßÜÓÆ­€l]TRO[djj`a\\]gprplpst{„…„†‡‡‚~}~~|xvsqokgmlmnsusjbWUY[b4Ofxx‚„„€}‚‚ƒ‚‚ƒƒ€„„ƒ|yyxustuwuyzzsf`RVev€†ˆŽŽŒ‰†~yv|z||~xi=>CGMU^k|€}yy||z{~‚„…†„‚‚€~|u[LPQRWbfkmw—«·¹ÈÎÐÓØÛÝâååÝ…JDBAA@BGL—ìõðæÙÖ××ÔÌÅÂ×ÙÙßÙÕÑÓÓÍÉÆ¿Áƽ¸·½·®±vP\nrx‚ƒƒvof[\c‹¿ÖÝÝÖÌ·Œl`RLTbelc_^_amqnqtnnx|ƒ…ƒ†…ƒ…ƒ€|~ƒ|zvupopgmkjkstrpg\X^\d" 5N_r}|‚ƒ†ƒ†€€„„†‚…ƒ‚}}ƒ|{|{utrsuvyz{yskc\Saozˆˆ‘’’Љ€€{uuzz}{vT;DINMWfx‡†zzy|}|{€€ƒ†Š‰ˆ‡‡€~~{uYPPRRUdfnn|š«»ÀËÎÒÖÜÝÝáåã½YFEDDEDFES¸ïóîãÛÚÜÚÒÌÈËÚÚáÞ××ÖÕÒÎËÃÁÆÅ¿¾»ÀÁ¹TU^p|…†„z{usf`[c˜ÉÙÛØÐ¿ r^ROYac`c``\gqrttqpv}}‚†‡Š†ƒ„†‚€}ƒ€|ytrrrlphinkrtrc_\^`d!+8Vemz€ƒ‚‰‚‚€ƒ‡„ƒ€~}~zzuuussvtwwx{vqi]QXct{ƒˆŠ‘‘ŽŒ‹‡‚€}{spuw}ztRBDOXYduˆ‚~{zz|€‚…‚‡‡‰ˆ†„ƒ€}y[NNOPR^ioo{œ±¾¿ÉÍÑÖÛÝÞáäÚIIGBCFDGFeÏññëàØÛÜ×ÒÏÃÒÛÞâÜÖÚÛ×ÎÎÆÁÄÌÇÁ¾ºÁιgTT^p}ƒ‡‰ˆ†|snoia^q§ÏÚÚÓÆ¨ƒhVQY[a`SZ]fmvpssuux|‡„‡††ˆ„}}|xwwpolpjikllunja[Y]b&?Vbox‚„ƒ†…‚ƒ€„†…~€|}{uwnpqpsvsx|{wqjaYM_kx‡ˆ‹‰‰…zuomrsyvmOCGOeu}€yz{|‚‚‚„ƒ†‰††‡€€~{`JLMQQZktrwœ¶ÃÀÊÎÒÖØØÝâáÉhFEEEGGFFI…ãôñèÝ×ÜÚÕÑÊÆÙÜàßÙÛÜÜÕÍÌÂÀÉÉý¶ẨZTQ[p{ƒ‰‡…ƒxtrohfdfŒ½Ô×ÓÌ»—tXPW^_OXbkotststtuz|ƒ†€„†ƒ~€~}{{yvpppkhkjilnpobYWWY@Vhswz€‚ƒ‚‚ƒ‚‚ƒ……†€~€|~|uyvwqlrqsurt~vpjbVOIgr~‡ˆŠ‘ŽŠŠ‰ˆƒ…zvpiknntq`FBHN{‚~z€z{{~|}€‚‚‚„‰…„«Œ}vdMMLMQ]pvu¥»ÄÄËÐÒÖÙØÜáÜ¢PJFCEEFEEK¦îôïåÚÛßÚ×ÑÄÎÜÞäÚÚáâÛÙÑÊÄÆÍÅÁÃÀ¿Êª`ZYLXmx€…‰‡……‚|zytljd`giˆÉÓØÔÆ¦{XRNSNU^fnnqrsrquyy}†‚ƒ‚ƒ€}~zyyxupnigljlkmooj_YQPWjv}}}‚€‚ƒƒƒƒƒ€ƒ†‚€‚}€~wuysspnqsvqsvvrkg\M8Yov€…ŒŒ‹‹Œ‰†‡„€{vokjfksq\DDNYŠv}€~zxx|~~‚~~~‚†„ˆŽª†}yeJLNNR\pw™²ÃÈÆËÏÕÖØÚÚÝÑkKGCFGIEFFYÈóóîâÚÝßÝØÏÆÚßâäÚÝââÚÛÍÊÈÌÏÉÄÁ¿Å¿t]ZOR\iz‚†ˆ‰‡ˆ€}{{yrpkia]dh–ÉÙÕ̸ŽaNCHU]ejnonssqssw}ƒƒƒ„„‚€€‚~z|ywunikgijmjmnoke\NFcsy~€‚‚…‚…ƒ…ƒ„€…††‚|yvsppoqnrstusqic]MDD]ou†‹ŒŒ‹Š†„€yvtiffhptcNMmnrvy€~€~wy|€‚‚€}}‚šÛ«€}yiMJKPS]pz‡¹ÃÉÉËÏÕ×ØØØÙ³WIGEFIGDENtÛôôìßÞáßÞ×ÉÌÞàäãÛàãÞÛÙÏÊËÎÆÉÉ¿ɑaWQJCRgt€‡ˆŒ…ƒ‚}zxrsnokga^`u¦ÆÓÕÇŸqJBL[\hlrtprunpq{|€„ƒ„†ƒ~€{~vuxpighghhchnppd_QCoy„…„‚‚ƒ€‚…ƒ†„……†ƒ…‚€xzvqrsonrursqnjccM=<F`o{ˆ‹ŒŒ‰ˆ‰‡ƒ€uusgchjowpb_rkry€†‚~|yz€ƒƒ€}~‚xŸÛê¨{lOHJNSixŠ•ª¿ÆÉÉËÐÕÖÖÖØÔ‡KGHFEEDEJZ‘éôòêáãâàÛÒÆÚáãæÞÜåæáÝÔÍÎÑÎÇÅÿƮp`WQE?J`t|ƒ‰Œ†…ƒz{{vuurmlkfb]b{´ÐÔι|TJMYfinurrpmnrx}€„†ˆ‡…€{}{yvnkikfijdglqrmdYG{ƒ‰„…‡‡†ƒƒ„…ƒ†ˆ†ˆ‡††ƒ…ƒ†‚{zwunsqqouwtwp_]PKC8Lkv€„‰ŒŠ‡Š‰ƒ~~ztpfbhkuywnkou{…„„€|~‚‚„„€~€§ññኄ‚~tSGJOUmz¢¸ÅÊÌËÍÑÖÕÕÕÕÀeGHFFEDEFUr«îóñèãääßÚÎÐàãéèßãëéåÝÕÐÒÔÍÈÁ¿È¼}i`]QGHWhv|…ŠŒŠ‡…~€|yxurqomnlhebh—ËÑÒ¾ˆ]IK]lmostnimow{~…ˆˆ‰…„„‚€~|{ywojkkmjbfkrsqf]G……ˆ†„ˆƒƒƒ„†ƒ„ƒ‡‰†…„„„†~{wttklmrmswqrlbN=#)?[my†‹ŠŽˆ†‡…€}xrlk`fnosxz{zw|z|€ƒ‚}{}}ƒ…{y}~¡ðñ½ƒ}wYJMNYq„¢±ÀÆÉËËËÑÕÔÑÒÍ“TFFEAADEMh·ïóïèââááÚÍÞæèèåäêîéâÛ××ÖÒÎǼÂÇ’nj_YSBD@]w}†‰‰‰‡……}}xzvppsrkjjjja]yš½ÉÄ£yfgbbhkqojelqu~…†ˆ†„€ƒ†~€{}xupjgehgcegpqpmeL„†„„„‚‚€ƒ„‚ƒ†‡„……‡†…†‚…€€~yvvvpropstttndZE23Gdp{ˆŠŒˆˆ……€~}ysihgfotxz~|~|}{~ƒ€}€„‚yyx€€­ðƒ€{`JMR_{š³ÀÈÇÈÌÊËÑÒÐÍɹrKBEBACFG[u†ÌñòìçáàäàÖÕäéééåêîìåàØØÚÓÍɽ½Î¬vogd\SD@G^w~††‹Œ‰…{{|vwutnolmolmljhgfr¢¯±¬¤©ŽZW[hlgc_lt|‚‰‰‡‡ƒ…€z|ronjeefacdglmnfZ‡†ƒ„‚~~‚ƒ††„…‡„…ƒ…„ƒ‚~}}yvtwuuttxxtng[=6%0Wiwƒ„Љ‹Š‚ƒƒ€}zwnh_efrwz}|||ƒƒ~||¶{~„€‚zsu}¼ðè’„ƒƒ‚|dLOWi‘­¼ÅÌÇÅËÌËÑÒÌÀ¹œXJEABBDHTl~’áóñëæààåÜÐßéëêéìðïéäÞÜÛÙÌȽÉÁumgbYQC<P]p}„†‹Šˆ…z{|wvuqooknqomkikol`atv|—¤XSR`db^Ngpxƒˆ††††}€|zssqllgg`c^efinj\‹‰†‚‚ƒ„€ƒ„†‡ˆ„‡ˆ†‡……„ƒ~~vvwxtuyzzvtm`P?*(C\q}…‡‹‹‹Š‡„„‚{uvplekmsu{€~}|‚‚‚‡…„‚~}|€„…€zuw~ƒÍñß…„ƒ‚}kOS_zª¾ÂÈÍÆÅËÇÊÑϺª|I@GDCAGTm}ƒ éôñêãâååÛ׿ìíìîòôïêäÝÞÝÓÇÁ½ÊÓ—zwso`ZSOBE^p‚‡ˆˆ‡‚€|{vwqtwomrqspmrtsmf]Xkz—‰bUVcfb[W`gzƒ††‰ˆˆ„„ƒ€~{uyssplkfe`cfmqtcˆˆ…„„‚†„ˆ„†Š…‡„„†Šˆ}€~yxwtttutwvzvi_L<-*F_u{„ˆŒŒ‹…„„…€~{vrofeimwx|~|||z‚‚‰†‚€|~€†ƒ~xvov|‹Þîχ„‚‚oPUk³ÄÁÅÈÅÁÇÄÄËÀž^EADD>?Oex°ðôñëåååä×àëìîðòôôðìåÝÞÖÒÈÀËÝ®zzwutdUTLDALp{€‡Š†‡…~}}zwxrsrolkmrnlqqsunf`JO[NNU[]^_XNVav…†Šˆ†„†~€}|}xxpjlhj_b`aadinc„ƒ‚€~ƒ‚„~„ƒ……ƒ†‡‡ƒƒ€{zvrqtrrqrvutpbTG+ 5Ugw}„‡ˆˆˆ†ƒ{xqolfklsx{||{zxy|}‚€{~~~€}{tpotzŽåﺄƒƒ}wWYuŸºÂÁÁþÈÀ¿»¦‡|lRFEBBBG^u~‚ÃðôñëèèçãÜêïîððôöôðéäßÚÓÍÇÄÚÆƒ}|xvrl\MRDHQjy|„ЋЉƒ|{{xrpqqnlmksnkosvuqmfa\V][]Z_\]UNP`ox€„†‡ƒ„‚{}}€~vyqmkkkbe`dcefjf‰„‚ƒ‚ƒ„„‚ƒ‡†ƒ‡‰‰†‚„€}vsqnqqwvwxyohXF<.'I_s„‡‹‰‡Š…ƒƒƒ{xtnikoux{|€~}xzx{{}~‚{~ƒƒ€€}ztrsr{¢íð­„…„€€|cfˆ«ÀÁ½¾¾¼¹É¼´£†tn\JDAECGSo}€„‰ÓòôñííìêââîòòòóôõóîéåÛÓÑÇË×ÛŒ}zxng\OAEMgw€ˆŒŒŠ„‚€}~uuutplmoqplpvvsvqkd\]\[[_`YQTFG]iv€‡‰ˆ…„…{~}€zusqomhfbadeefhj‡„‚‡„„‰‡ƒ‚†‡†…‰ˆŠ‹‡„ƒ}ywrrjssyx|t{p[P=98& ,Skz‡Š‰‹‰‡Š†ƒƒ„||qnptu{}}}‚~z{{|{|}„€‚€„ƒ‚}yttrrx´í领‰„€~woy£¼¾¼°®·²¬À§š€lf`MCDDDEPm{‚„„•ãóôñîðîêåìñòôóôôöñíéâØÔÍÉØä¨}‚……yuoePGGM^s‚ŠŒŽŒˆƒ|x{wupqrqpvpsywxtumghc``\]YVLQFISgw‚ˆ‰ˆˆ‰……‚„|}}zxuyjib``a`ain„ƒ…€€‡ƒƒ‡†…†ƒ€|wrrnhikiusvjf[G6&8Xmz†‡†‡‡ƒƒ‚€€{ulonrqxz}~~{x}{yywyzz{{ƒ‚}‚{vptnowÀíãš…„…}}xuŽ´¿º¬ ™šŸ³ƒpddXEDCCEOk€€……ƒŸêóóòñðíéêðòòôóôõôïìêÞØÔÍÖæ¾s{€}|}}{ukdVJ@GMnz„ŠŠ‹Œ†ƒ||yzwtuqoqlostkqqqvtmigc[S\]WPKJGIED_oy‡ˆŠ‰„‚‚z}{zyxtnniba[_^]]bf‡‡ƒ„ƒ‚†‚‚ЇІ‰‰‡~}wwsmknqsypskbNH0 !-Eew~†…Љ‹Š…†~{{unpsuw}~}|{{yyxyy|~|ƒ‚‚{susrr{ÌìÕ‡††‚|w~¤¸¾´˜ˆ‡‰›¤€rg^[UGEDIXn„‚…ƒƒ¶îóôòóñíêîòôóôõõõóïîèàÛÖÔæÔ€x{€€€‚|wpbMCEJjy…‹Œ‡†ƒ}~{yupprpptpouov{vppkia]]b[TVRM<PM[qv€‰ˆŠˆ………|~~}xussnhdcdc_[af‚……„…€€„…ˆŠ‰‹„‡„~}wusplsuuvqkbS=#6Wi{†ˆ‹†ˆŠ†‚}~{vrnqru{}|{y|}z}wxrv{z~}„‚~|ytptqpƒÛ퇆††|yˆ²µ®›…z€~‘†of^ZYQHDFR’…‚ƒ‚ƒ‡ÉòôõõôòðïóóôôôõõôñðìåáÛÖçèŽsyz|€ƒ{xpcG726fvŠŒŒˆ…„}|zzrnopnrrlkroyztsrkiXY]_YRNHLBHEVlw~†‡‡…ˆ…}{~yutwrpk^bdcZ^^bƒƒ‡„ƒ‚‚~„‚†‹ŒŒ„ˆ{{uvruqsrsuleX6&GZq}‚‡ˆˆ…ˆ‡‡ƒ‚~}{vnnrty{{}{{zzxzyw|wutwy€~€}|~{|wsrtráè°„„ƒ‡‚}~w€·«ž‰xr~zw€taZXWSIGNWe”•~‚ƒ‚ƒ‰ØóõöõóòðóóôõóôõôòñðêãÝÜãè”rv|{|€€~zvlZMA;dv€‰Š‰ˆƒƒyzwvxsoomopomootwustog_[YWU[MFKMONUer{ˆ‹‰ˆˆ…€|€}zwvqrjh_cb]^\d‚€ƒ…‚‚‚…€‚ƒ‰‹‹‡†€}zyvvtrwwrsjf\L.$:Xjt‚‡‹ˆ‰††‚…ƒ|wrqntuwz}~xxxzx|uw|yuy{|}|€y{wutsqŸå夆„…„‚~|w}§›oqwrrvg\XURLLR^co{}‚ƒ‚äõõõõôóñóôóóôóóôñóïæÞÜäë£nrxz~‚~€‚~}weVQC^v€‰‹Œ‹ˆ„~|zy{wurqqnmkkrpqovwrjd]]^URPLR][YY_dny…‡„‡ˆ†…ƒ€{|zy{rnpk^^\_a\_ƒ‚…~‡ˆ…‚‰ˆŠ‹Œ‰‚}|vvvspuvttpdZ5-"M_r{……†‰ˆ‡ˆ…ƒ‚}utoprvyxz|||wvyxxurtzux{‚…~|||xutrmp¶èܘ……„„€|ytzœ‡~uloqllk[XWSLKXbfkz}|€€ƒ‚¢ëööõõôñòòôôóôôôóòðêßÛâëµtnrux~}~}~zudLQhv€ˆŠŒ‹†…€€|{{vttvompklopppsusrme[Y_TWRTVcbfljbgw€€‡†‡…„„}€~~zxvtonh`abYWX[‚ƒ†ƒ‡Š‡ˆŠŠŒŽŠŠ…}}{ywtuyuqo[J.)#!6Pjx~ˆ‰‡‰Š†ˆ…„†|vwvww}|}{}{z~|{w{vwty~|€ƒ„…ƒ‚|{zvrsrvÂéÒŽ‰…†…‚}|utƒxztoqpjmeTVTPWelfjy}{‚‚…„»ðö÷öõóòóóóóòôôôóôíãÜÞç¹vvtvzz~€„‚~„}|rabmx€Š‹‹‹‰…‚}|wxwtpnrtqtvssszrsoh_^bNQSVbjoqsrdjz€‡ˆ‰†‚†€€~~vtopehea]Y\‚ƒ…ƒƒˆ‰Šˆˆ‰ŒŒŠ‰„…yyxwuz{{tmcM*##@]pz……‰††‚€ƒ„ƒ€}ytuvx€}zxz{z|zy}vvtvux|€€‚„‚|z|ywrtn‚ÊèɈ‡…„‚}}wuvooogllin^QRRZx‚nlw€z~ƒ‚„‚Ðñõôõôòòóóôññôôóôòéßàç¾truvvzx€‚€ƒ€‚…€{}zuiqw~ˆŠ‹Š†…€€}{yytssqosvrnrspo{tssj^PXPHMYjrtwx|mjqw‡Š‡…„ƒ€~‚€}|vxsqhje_UV^ƒ††ƒƒ‡‰‰‰Š‰Œ‹ˆ…‡‚}zyyxyxwumfUG$1Rjs~…‡ˆŠˆ„‚{}{uvxz{}~|yyzxyy}yxwvyz{|‚‚€€~|~wxwqoÎã´‰†‡‡}}wwxljghkkmlZVTZy—mt~‚‚„‚‰âóõôõóôóôóñðòóóóñëááä»rruxvy|{}‚‚~}~vpu{†ŒŒˆ……‚}yxzusvsrpqrqpquvzuurne`ZQPO]pvy€}~sjnv†ˆ‰‡‡†‚€€~‚€|z{sphlg`cYZ€‚€…ƒ…‹ŒŽŒ‹ŒŽˆƒ|{vsvt{wwohZK%F]ly}ƒ…„‰„…€‚{|vwxx{{~}||wuwzyvwyxzuw|€€€€‚{zzvwmp£ÕØŸ†‡†„‚|w~{mhhmklpk[W\zŽŠtq€|€€‚€…„€ êôööõôôôòñïðôôóòìäâã¬ustsuvzy~‚~~‚~~||}zv|€„„Š‹‡„‚{|z{ysorspjooprqnryzwsmgaZKDM]x}†ƒ„spls~ƒˆ‰‰„ˆ…†€}‚|wwsolkiab`Y€~ƒ„ˆ‰ŒŽ‹ŠŠƒƒ}{xsuzw|wriYB%5Sesz}ƒ‹ˆ†‡‡„€}z{vvy||{}}{yuxxuyvsywyx|z~ƒ€€}|z{wtuqw¬×Ë’†‡…|{xunloutnui]]oˆ…ur|€‚‚€„ƒ€ƒ~¯ðõõöööõòïíïôõôôðèæåªopuxvuxy{y€€~ƒ~}~~{yy}}…‹ŠŠŒ‰ˆ}~{ywwsqspmpqnotrqu{xtjgcZF?Mh|†ˆymls{‚ƒ‰Š†ˆ…„ƒ~|€€~}zvtilleb]Zƒ‚„„‰‡‹ŒŒŽ‹ˆƒyvuvzxyrk_F*#&J_iu|…‡†„……€‚}zzzz~}~}|xywyuwvxuvxwxx}|€‚~}zzuvtr|°ØÂ‡ˆ‡‡‚€~{wvmquuttvi^bx€wp}‚‚ƒ‚‚€†ƒ‚¿òôôõôõòñíëñôóóòëèà£rrqy|wwux}~€…€~‚‚~|~~{|‚ˆŒ‹Œ‹‰‚~zyyxytrnoonqsstqyzwuphfZJMBf{Œ”™™“ƒskqz…ˆ‹‹ˆ†ƒ†~~€|xunmkh]\W€ƒ‡ƒˆˆ‰‰‰ƒ{zutsuwzljbM& %G`mu}‚†…‚{{~xyxxx}~~|{yuvvxxxtttxuwx|€ƒ|€€~x{|vslmwµÕ»‰ˆˆˆƒ|{xvzsrvtqwsebg{xry|{‚†‚‚‚ƒ‚ƒÝòôóõóôïîêëñòòòðíà—rxoruvossyx|}~€ƒ}€zzw{||€‰Š‹‰ˆ†‚zvyxvspkrpmlqjpptu{xse^JF;Bd{Œ›¡¡˜…sgktw‚‡ˆˆ†…ƒ„‚}~~}€zuwmnkeb^[†…‰…ŠŒŽ‹ˆ†‚€ywztvzzwi_P2 ">Tbnw~‚†ƒƒ~}|z{z{|||||yxwxwxwwsqxwy}||„ƒ‚€€‚}}}vtin}½×²†‰Š‰‚~~}{w…~wswvtwogfv~twxy„†„‚„„„§ìôôôõôñëééîòóòðñÜt{xvvuqtvtuxz}}~€}}y{z}†Š‹‹‡†ˆ„~}ywvtqqopqlpomqopuywsndVE9Id}Ž ¦¥›„sgiqy†„…ˆ…‡†ƒ‚~}€}zwspqkid`„‡„‰Š‰ŒŠŠƒ€~ywxpqwvwo`J2!+?Xgsy|ƒƒ…†‚ƒ„~yv{~}}|zyxzuvxzvuusvwwy|ƒ…„…ƒƒ|}yzwsos„¾Ó¦ˆŒ‡Šƒ€~~zxxwvspuuehp|zxyw€…†„„ƒƒ…ƒ¹ðôôóóñëçæêðòôôñ̓wyvqqsrqvtutwzz}~|~}||~}~zuv}~€…‰ŒŒ‡‡‰…„~|ywvurrnrsproomquvwtncVDB:gz›¤¡™ƒpbcnu}†‰ˆˆ…ˆ‡ƒ{~||}{sonokf^‚‡…††ŠŒŒ‡ˆ€}urppmlvpkdV.7?Xitvzƒ~~€‚|w|{{z{{|yuyxxtuxyvntqsuwy€~„†ƒƒ€{xxxtprp„ÂÏž‡‡ƒ…†‚~}y|twxvqpvrhr|}yxty}‚‚‚ƒƒ…ƒ‚Ãñóòóòîçåçíñòóï»|}xxqllsrnqqoqpquy}~€{|{}~~{xusw~}ƒƒ‰‰ˆˆ…„~xzxtqpqpslhhnmlsqvusgdNF9.]x‹šž•}k[Vcvx……Ї‡„}}zz|z{wrtphjga†Š‰†ŠŽŒŠ‡„}{xupqljohfND!5LM[lv{}ƒ||zz}}~~{y{|vvvxzwwzwprvtvw}€ƒ‡ˆ„…ƒ~|wxtpll‚Å̘‡†…‡‡„€{yqw{xsu|pr~~z|ux‚€„‚‚ƒ„…„‡Óóôóôïéååéðñóèž}||xrpotqompqrpswyzz€|~~~~}zxtv}€ƒ‰Š‡‰†‡}~{xwuttpmtlmloortuwutmgTC3@Yr‚”œšq_TNWly}†‹‰ˆ†ƒƒ€}~}|yxwqjlj`ˆ‰‹‹Š‹Šˆ„€ytssnmpkg_Y;2GYblsyy~€€~~~zx{|z~~xyyxyyvtuyyvtssvw{{€„ƒ……†„~{zwuson‹ÆÁ“†‚‡‰‰„€|yoy€zƒy{†„~vv~ƒƒ~†ˆ…ƒ†‘äôôôóìæäçìòòÛ‹z€{{vpvqssnltqprtxwtz|zy}{€}|ywwrw{‚„†ƒ‰‡‰†|yxxsopnpnkiprkootuvwqlZH>;Tj|‡•€iYI<M^r|ƒ‡‡Šˆ„ƒ‚||}}€{xtqlicŠŠŠŽ‹‰ˆ„sttmgpngcXF&CUahgtyz}}~}{|zz}~~z{zxruwzzwxvwurvsvx|€‚…†††‡„y|utrnmŽÇ¼‘……‰Š‡…ƒ~yuq††‡Ž‡†ˆŠˆ}t|„ƒ‚‚„„ƒ‚£ìõóôïèåèéìæ»}ƒ}zyuppqspnomssqu{|y|{w|}}wxwry{wz~…ˆ…‡‚}zyztnlmonimnilmmsvutrpcPIDVgt†€qbWI8?Zkx‚†ˆˆˆ‡†€€~~~{xupldŽŒŠ‡†}}ruuotuneXM0$BU^jmlvsz|||z{€z|~}~xz{vuuyzzxysxvvx|~~„…‡‰ŠŠˆ‚…}€zturtÀº’ˆ‡‰ˆ…‡†}ympŠ“’““‹†„‡wz}~‚‚„‚„†…ƒ…„ÃòôôðéææéèÔš~…†…ƒ{xxvswvtrspturuvzx{|~‚y|yuxzz€~€ƒ‚††‡‚~|xvunovqlllooppsvxvtqdSMOajo~‚}ocUNF>Uiz„†‰‡ˆŠˆ‚ƒ~€}~zxrqnŒŽŒŠ‰„‚zywsqqtsjZA3#/MWgiopqosuvxyxy|}{z{{}wxwrvuvtyuwuustxz~‚…†ˆŠ‰ƒ‚€€|zytvsp’¾·‘……ˆ†ƒ‡…{vikŒ›š›’‰{}y{{~€…€„„†€„†ÞôõóêææåâÄŠ|ƒ‚„|{tssqrstrnoqstrqwv|x||}€|yyyuyvx~~}…‚~|yvtutompmehnnolotvzwkfYOWes—’~k_RF@Pdz{…ŠŠ‰‡…„ƒ|~~|z~ztrqkŽŽ‹Š†€{ywrsvxtm_N0% *9?O]hmllmotsszyxw|}z|}zzwuvuwuvtwvuswtxzz{‚…ˆ‹Œ‡…ƒ‚€yx{trqn‘»·‡‰ˆ…„†…|uflˆš¡™‹ƒ}ƒy~~ƒ‚ƒ‚…‚‚€„„ƒ–àôöìççâÕ«„†‚€||wopqsqqoqsuuqstuut{}~zz}{wywuy~€ƒ~}€‚‚~{yytvtoornhmpmpmpsuxxlh]Kev~Ž›¤ yh]TJL]r|‚ˆ‰Š‹Š†‡ƒ€}}tqo‘‘Œ‰‹‚|wwrovwrk[@'2FI[dhsnmmqsspvyvu}vyywxxsuzvwqtyvvkpxvxw{{†‰ŠŠ…‡ƒ{xx|uqmr‘»·†ˆ…††‡„{qch˜œ•…zz|}~€€€ƒ€‚‚‚ƒ€›ÕðîèèèÒœ~‚…‡„‚‚~{wpkosqolnnnqnssqtvwwy|}v|xxxuz~|}ƒ€‚}ywuutloqlilkiolkluxxpj\Tmyˆ—¤¬«Ÿ|pgbY[p{€ˆ‰‡ˆ‰‡„~€~€€|xvqІ€ytnvywnhS6,JO\ajnwvqpousqwz|{}{}zyxzwwy{xzxuvtttw}|}ƒ†‰Š’Š…‡…ƒ}{ztsloŒ½µ’ˆ‰‹‡‡ˆ„{tdl~–šyty|y}~ƒƒ„…ƒ…‚„…„€ƒšÀâææãј‚ƒ†ƒ†ƒ‚ƒƒ|zwrlrtrmjimnrqttvtuuy}~€w}|}|{w€€}€„‚}wxtrppsmhlloopnrsyztn``w„“¡«ºº«Ÿ“…}tlkr}€…‡‹‹‡‡‡†‚~€ƒ‚‚‚|xr‹Žˆ†ƒzyutsssrmeL+56INVehoppoplqpprw{x}xyvxwuurxxwwyxtpvrtrw{~}}‰‰ŒŠ‡„†ƒ‚z|{xqims’¾·’ˆ…†„‡†vrjz‡”‡tr|wx|z€‚€‚‚„~~{{Œ­š®ÛåàÃŒ|‚€„‚ƒ}}~~zwxtohkplhf[]mqrorpqurvty~wuyyxyvx{z}}z€{{yzwpmnpphgjjnhihkoywole^s…Ÿ¯¸ÂÀ¸¬ ›“…yqt‚„ŠŠˆƒ„‚€}}|~z|}xttŠ‚‚}wwtsutoogZC+%+@JN[dcmrstroqoptvyyw~wxwwzvuty{yuwvrsuoxy{{€€†ŠŠŠ‰ƒƒ‚‚}xyvsppl‘¾¶‘‡‡Š‰ˆ…~{w}–…xovzz|}}}„……€€|ŠÒÚª·Ùݸ„}€‚€€ƒƒ~€|vwwnoijlnc_^blrtopttvrxwvywwwuyzyz~|}}x€~ƒ‚y|xvupmpmhklnokjouvytodbvŒ¤¼ÄËÇÁ¹´­¨šŽ‚}{ƒ…ƒ‡ˆ‡„‡€ƒ~|}|~~{yzŒ‰‚}{xyxwvqln_G+2>QVV^ffnuvvnrpnqsw{|}|zzwquwxtyyvuvtvvuqwx|€‡‰Š‹‹Œ†…xyrrsrrŒ»´‡‹Š‹‹‡|ƒŽ˜”†wkiux~€zz}€€„„…ƒ‚„Áêß³«¼¥{~‚ƒ„„…†ƒ}€}zuvnoghghZPLXgntsqvsrsutsytvvrtxyz‚~}{{~‚€‚~~|x}usqqnljhiknjprsuxsgg{’ª¾ÉÑËÈÄÁ¿¹¬œ‘‡…ˆ†ƒ‰Š†‡ˆ~~}}€|w‡ˆ~{zyzuqwkkfM3#%9HX`W`ejqqstrsmjrwrt||yzztptvwwyxwrtutttryz{}~…ˆŽ‹‰ƒ…€~utrsoosж³‘ˆ‡ˆˆ…ƒyŽ•‘‚tifnvx~‚}ƒƒ€‚€´äèܸ†xz€‚ƒ……„€}}z{tokmlieXIBCJ[eospmrstrrqvwqvvt{yz~|}{|{~|~}z{zxnmoqojhglpkkouxtrip~–¯ÁÌÓÑÍÎÎËú¨œŽˆ‡‰‹‰‡ƒˆ…€}{z~~€zwˆ‚}}|{vtfeU>3HTW]f^lqoroqyvqojtv{y|}zxwvuuu{}vvxxtvstz||ƒ{uƒˆ‹‹‹‰‡…ƒ~}{svurrmŽ·²”‰ˆŠ‹‰‡„{†„zlhfivy|‚ƒƒƒ‡…ƒ…ˆ…ƒ‡ÝììÕ§~}~…‚…†‚‚„ˆ‡‚€‚~zqpqpllfYF$ AUgmxutsprtwssxx|vw|}}|z}y~‚„{zzvqromqnnnqssuvy|rqu†›´ÇÐÖÕÓÔÔÓ̵«œŒŠ‹‰‡‰Šˆˆ‚}€€ƒ…ƒ‚ˆƒ}|}{wsqbT;!KSYUclmmotvtsqqtkpvu|}y{|xwwtywvwwwvuusvvx|‚zssx~‡ŒŠ‡ˆ…€€{zywspnm¸µ–…‰ˆŒ‡‰…wrj`[airz…†„‚ƒ‚…‡…‚¨ãçÌ•~ƒ€ƒ†‰ƒ†…‚‡„ƒ„zwtlqli`O6&)N]nttvusmnsswxs|yyzwx{{|{x|‚~~}~{|wxutljlkpompqtvzusnvŒ¢¹ÍÔØØÖÖØÔÎÆ½°¢˜Ž‰„…‰‡…ƒ„z€†ƒ„€‚…ƒ|~}€|slZM1%7DY`^heopimqwurspwqwxy||~}yvwwuyxxvzwuvwuvz}~€sngv{‰‹‰‡‡‚…{xussnlpŠ·¸˜…Љ‰‰‡€rcWSVfty€„…„ƒƒƒ‚‚‡†„ƒˆ´²~~‚…„€„ƒ†‚ƒ††ˆ‚……~|xrklnk_R4"DYetuvutolnsvvuww{zz{~~{z{}~~~~~€~yvrmmqrthgmpptxxurz’§¾ÎÖÚÛØÖÕÒÎǾ³¥œ•ŽŠˆ…‡‰†„‚‚€~ƒ††„„~}y~‚~{pdC&!)LK[_^bdkcmikqsplnsryzw{||x|ttvuwwvputvrwutyz~{wdQYnw„‰ˆ†‚ƒ‚‚|yuspokhi‚¬²•‰‰Š‡‚rcTNNcpx‚ƒ‚‚…„ƒ†€‚‰¡‡}ƒ‚‚€€}~ƒ†ƒ‡‚„‚€|yumnkleV@&0J^msussmokjnruutwzy|z}|zxx{v{ywyx€}{xtplijknkkijkquuuvv°ÄÐ×ÚÙ×ÔÒÐÎÆÂµ¨œ˜’‹ˆƒƒ…‡}{{|ƒ„„}}yz{~zoeO!#4RZ]]^cbcdkgolnjjoopwyvvxyuxrtptutrppqrssuvvv{}xkV9Kf|…‡†ƒ€~}uwrpokggzš©“ˆ…ˆ…€p_OLVbqy€„€‚ƒ~}–’~‚‚€€~y}}}~|€…„€|}|vqnqifeX9A\krsrojpjinjnqrquyux{xvuvstxzxvwxzyvsklcigfiijglrrutruޝÅÑÖÙØÖÓ×ÒÌÆÀ¸­ ˜’ŒŽ‰…‚…ƒƒ‚}~w}{€}|~||€{xoV8!,;NOYceggigddljokglporwz{y{}vtvuqsv{vxvtrsvuvwy{|}wa6)Rp€ˆŒŠˆƒ†~zytqmmjiyŽ ‘ˆ†ˆ‰„thcgo{„……‚~‚……ƒƒ‚‚ƒ„†…„†ƒ‡„‚€~}‚ƒ‚†‰ˆ„‚‚~zwoknnj]B$'7Vkvvutqnoksnjuuvyyzz{zxvxzyzy{{zyz{xpqmndimnikorrwrr’ªÃÏÕÚÖÖÓÙÎÌÇ»²¤›•‡ŠŠŠ‡‡ƒ~|‚ƒ…‡€z|y|~wpQ.!:1>R^]bhehddfacigfegjourvwxuvuruqstqwspjmorsvwzy{|}iHKn~†‡‡†ƒ€}|zwsqmihdv‘¤”Š…„‡†„€|{}€„……†‚€ƒ€ƒƒ‚‚€‚†ƒ„„†‚‚ƒƒ‚~€}|€ƒƒ†‡†€~}yxuojjlfR<&M`kttsqinllogpnqtttuuvvvxxzywvvy{zyzyvsohhmhcefliovrt‚’¥ÀÎÓ×ÖÕÑÍÊÈÆÀº²¥š—ކˆ††…„€‚}y€|}‚~{~{wzibB" 6@DU[c]hfh`gjgdhgnhjlqux|yyxruvwqttttwommsrpvxz{y|v^<$Tq€†‡ƒƒ…z}zywrpooliw•«˜‰ˆ‰‰‰ˆ„{€‚…‚ƒƒ…€‚ƒƒ€ƒ€ƒ‚‚‚…„…ƒ„||~€€…ˆ…ƒ€~{ussqnongR96J_mstsprnnonkrqqptuywvssxx{ttzzz}}||zzvspnmllilmnquuw£¿ÍÔÖ×ÔÐËÉĽ¸²¥ž˜‘‰‡‡ƒƒƒ‚~z|‚€v{wrdO@ -=;RWSa^ed__egfggifgmpvz{wysvuuqsstsnkoutoqwy~ylB""\yƒˆ…†ƒ„~~zwtnjjiehx—¬šŒˆ‰‹Š‡ƒ„†€‚‚‚ƒ…‚€‚ƒ„„†„‚‚†‡ƒƒ‚‚‚†ƒ‚~‚†ƒƒ†‡‰‡‚}wplpnoqaM5*:Vfqvtssqopoktrroqu{ywuuwxuswyzvzvwy}€ytwlkfjjjljous{‡’Ÿ»ÍÖ×ÖÓÓÌÉÅÁ¼¶²¥Ÿ˜“ŽŒ‡‹†‡ƒ‚€}{€€€„…yzllS<!.8LUUVTX[f_^_difc`blhmtwzzƒwzztruqtqrromprprtz~~|rV*(_x„Š……ƒ€~{~usookgeey˜§’ˆˆˆˆ‡ˆ‡ƒ€€~‚ƒ„„†‚€€€ƒ„‚‚ƒ‡……ƒ„……ƒ„„„‚ƒ††‡†„‡…ƒ~{|stmlmqmaM-I\mtyxvossnhptpssqsuuurswrqusxxvx{y}}zzzqlgilhhginu~ƒ‘¤¸ÊÓÖÖÕÐÊż¹³¯¨ š”‘‹ŒŠ‡……ƒƒ„}y€‚~…updQ>! 9FPRLPSXXX\`ggcbb`fchss{|{wwtpvrqroutpsooruqttzƒ€{f=5ez†‰‡…€€~||}wsonkeff|Ÿ¥‚†‰‰ˆ‡‡…~‚…ˆ…ˆ…‚‚‚‚€ƒ………†ƒƒ…‡ƒƒ…‚ƒ„„ˆˆƒƒ}zqqkmptm`C(!-Kcnxxwstnmmlilqmopsrtolrruvuwwuxwvx~}ywtqidaijhppr}ˆ‘ ³ÈÑÔÕÓÏÉŽ¸·´«§¡œ–“ŒŠ†„†‚‚€|~|}~€leO($%8EA>>KERNS__dedb_cjjorsyvyurqrslppnrqpqonnrrvuz€~|oT)In{„†…‚~zyxxxqlklghn…¡œ…~†‹‹‰‡~~€„‚€‚~~~€€€ƒ…‚ƒ‚‚€‚€‚…‡‡„}|}yqnmnoohZ79Sjuutrrpkfifkkklsqooimpnnrsutuusvsz|zzssmjgkmhqlu}‡Ÿ±ÅÑÔÔÓÐÌü¶µ°®§¡›˜”ŒŠˆƒƒƒ‚|||~||~`M6+/<@;2,5<QRW\bdhikgbjlssxywzwqqqqlqrortnmnprrsz|~€€yb/#Wm…‡†€€z|xwrsjlpruyŒœ’|„‰ŒŒ‰ˆ†…‚~}|…‚„††€~}~‚ƒ‚‚‚‚‚‚…ƒ‚‚€„‡‚‚„ƒˆˆ„~~zvqqnjpnfXK -9Pbmyxwuumfighimlrtsqknqqnuvuvwtxww{~|‚zyxnknmoknu}‰‘ ±ÁÐÕÕÔÒÍÅ»³±®«§ž›—–’‹†‡ƒƒ‚|~|~€€N8,349,.((/;QRWbedekmccglvw|{{srrqssonokrspqnqrrvy~ƒ€tS,]qƒ‡ˆ„‚~|zzxtulpty~€‰‹v{…Š‹‹‹ˆ†ƒ‚€~…†Š‰„‚‚‚€€‚‡ƒƒ„„…ƒƒ…†ƒ„„‚„‚ƒ†‰‡{uqooovpfYC!"!AThtz~}xrlkbkqmorqsrpqrnrvyyx{yxvwyxz~}xspnjjiltŠ’£°¿ÏÔÓÔÑÍľµ®«£¦ œ˜”’މ†‡†……‚~|}‚458(,&%#".FR\aeejhgchosuzyxytssttromkinmnpjopwxz‚€{i57au€‰‡ƒ€€{z|{}trpu}€||ylj{…‹Œ‹ŠŒ‰‡‡†‚~‚‡‰‰‚€ƒ€‚ƒ…‚†‡„……‚†‡……ƒ…‚‚„„„‡‡~{zrnknrrtcN3+GWmx|rokhiomlopotqssostvtvwvwsxxyyz}|xtrigjln}‹• ²¹ÈÑÓÓÒÎÆ¾´«©¢ š—˜ŽŠ‰ƒ„„‚€~|}€'-+&$" +MYejjjmgekoqtyyzxvuvuwpqpqspqppqpqtx{}…rKIj{‚‰ˆ‡}||{|xxvtsu|}yoj__g{†ŠŒ‰‹‹‰ˆ†ƒ…ƒ‡‹ŠŒˆ„„~ƒƒ„„†…‚ˆ†„…†…„†„ƒ†…„…†‚†ƒƒzvtqmnsrlWB22Ihz{}xrpkkkklqtorqrvssutxxwtvvzzxwz€|xzxnjiks€Œ”Ÿ¬¶ÃÑÓÒÒÏÊÁµ©§¦ ™–—“’Ž‹ˆ„„‚‚ƒƒƒ€~€#$";U]hflmjedloruwxxvxwtsoqrrqrpoqoonrty|€€wb3*Or}„‰‡‚|{vuuuyrrol[Z[YZ`{ˆ‹‡ˆˆ†…†ˆˆŠ‡„ƒ‚€‚ƒ†…ƒƒ„ƒƒ‡ˆ„„‚ƒ€…‡†…€ƒ†‚~zutqlnrpcS; ?auwƒ~|vrjikijmpjkqssspsutuyuuvxzrvz}~~woojkny‰“™¥°¿ÍÔÔÒÐËø«¢ Ÿ™——’ŽŠ……ƒƒ‚„ƒ„ƒ~1"#";Jafjkikhgiorvxwztssussppqposlnqrqrptz€€}pG+^p{|‚ƒ|zvsu{{zuml`_[\WU\e{‰ŽŽ‰‡‰‡†…‡†Šˆ„ƒƒ€€‚†ˆ††„„„…„†‰…‚‚‚„ƒƒ„‚ƒ†„€~xuqrrrscR21Wnyzyrmgflnkgntosrqvuurvusoxyuvv|xy|~zvtnlmw†”œ¦·ÄÏÐÑÏÍż®¥žž›™˜–”‘ŽŽˆ†ƒ‚‚„„‚‚$')/.#*$#3K[fhfiiikjkqxyyxvvtxrutqpspmqkglprotz}~~€zfA<aosxz{yvwmlqyumhbdb[XZ\ZYbx…ŠŒŒ‰ˆ…†‰‰ˆŠˆ†ƒ€ƒ…ˆ‡„„‚†††‡Š†ƒƒƒƒ‚‚‚‡†ƒ‚‚…ƒ‚yxwuvvngP( 4Heu…‚€yvlhggggiqpstvvqutquttuvxwrz}w~|}|torr|‡‘—¡«½ËÒÐÐÐÅÀ±¤ž›šš—•—‘މ‰ƒ…ƒ„€„‚…„ƒ„)$),&332-**+)"!>QX^dhfggmrruwxvzuvustupropnomhkilqqsx}~ur\?#)2@[enosrpolhefif`^b__XXWZUT[t†Œ‹‹‹‰†††ƒ‡‰ŠŠˆ…„„†„ƒ‚„ƒ„„„‡†‡…€‚ƒƒ~€„ƒ~xyxut|s[=1]p|‚‚~zyqgfghcjronnsrrpnmqsrrutuvx{wyxz}}xvsqqv„™¥¶ÇÏÏÏÌÈÁ·§šš˜•—”“Œ‰‡‰€€‚€‡„€""$/+62&,+*/205>86LSXabghfdjvv}xvuwuutoqoonotnpognorqqz||wmZ@3.;<BOY]hmrrmjjibcb^a]`^a\_]][WcoŒŽ‹‹Š††…†‡ŠŽŠˆ‰ƒ}~†„†‡„„ƒƒ„…†Šˆ‡ƒ€~€„ƒ€ƒ‚‚ƒ€zyu{{{r`C%Pmz‚ƒ„~|sjhmkgklnqquoonopprsrutsutyyzzz|yyxyvom}‰Š’¡®½ËÎÑÍÈĹ­Ÿ™˜˜––””’ŒŒ‰„…ƒ„‚ˆƒ€„""%%",,-''6:@KTYc`]]^dlywvvrrpoqlkllkjmqnrkeiklusz~~~scPC3.)8?JMVZejpllle[\_afbafgefbefbco€Œ‹ŒŽŠ‡…‚ƒ„‡†‰††€}„ƒƒ†…€„„……ˆ„‚€~~€|}}€…„~~yzy|~vm\-!Efq|~‚~{rolecgfhnpsnlhmnkoppopsqnpqruwvvuwywxonxƒƒ‹—¥³ÆÎÍÌÈŽ°£™–—–•’‘ŽŠ‡…‚‚‚ƒ€‚C9825253-&#+5AQTZ[faihmdekqzy|wspttqnqlpontrononnqpyz}‚|yrdWF905DES_flrsvsmhdckkijijooqrononrz€‰‹‘……„‡ƒ„„Ї†‚€|ƒƒ…†‰‡…ƒƒ…„†‡„…ƒ…~€~‚ˆ‡‚{{y€€„€kM5.ds~ƒ‚€zroiijgmlpqssmqkihorssqnouxuunrptx~|zvss}†Œ‘¡¯½ÇËËÌǾ¸ª›™˜••““’‘އ…ƒ„€…‡†‚‚…;($#&+%0=JZ_bfisnqmqnv{xtqqnnjiqignqqpkmgngjjsz||}€xoj_WOK=>ISelrwz{|wsnklosqprqrrvupmmlmt~‡ŠŒŠ…†„‚„ˆˆ††„~|z}‚†‡ˆ……‡ƒƒ€ƒ‚}|~|~…ƒ|zyxw~}ueEEhz€~~unighfkhfomnongilhllllgfijojinlmsw{{ztruˆ›©¶ÂÊÌÍŹ±¡š–——”“’Љ†‚‚}ƒ…‚€&9QXcfjnijnutywxssronimmgljrpnmkjlfpmrx€‚}qf]XSENOBQeuz}„‚~}xzxxwvtvttsvwplihkm~ˆŒŠŒŠ††ƒ„„„ˆ‰‰‡ƒ{|‚†…‡ƒƒ†‡……„‚ƒ|}}zz|}„†yxy€zrf<&5^u‚„‚zvrlhjlejnonnnmqmjmnnoigijhilpmlrvv}yvuoy„“ž­½ÉÊÌÈĽµ§›–”””“‘‘‘Іƒƒ€……„/Gddbffdhopwytutnjnpkihijjlmkifcdfmspz}|~{hN4.'/9HDTgw‚…‡†Šƒ„‚|~zzyysornlmonlkhim~†‰ˆ‰‡€€~„‹Š~}}{sx|‚„€€ƒƒ‚ƒ‚}|}|yyxy{€{yuvw{ykT4!(Rlx}†‚{uomdhghimijigflnqmmnnecdcfgjfhnmqoxtxtmm„˜¨³ÅÊËÉÆÂ»¬ ˜“””’’‘ŽŒ‰…~|€ƒ€~z0J_liejpqsuxzxuxunrprrprrlrpkjhfhlnptxƒ~€yt\C6;>FJ@Q_q‚ˆ‹Ž‹‰ˆ„…†~~xtonkkhfhgkhm€‡‹‹ŠŠ…‚‚‚ƒƒ‚‹…ƒ~zx}}„…ƒ…‚‚„„‚†„~|€}~{x}„„{w{{~~ylJ,')&Inz~‚„~wrvoqiikmnmonqtpomqoogakjjkmlljmmrtz}|slˆŠ˜¡®½ÈÌÌÉÆ½´ª——’“’’‘ŽŠ‰€ƒ…ƒ„%@Ygklmmmsvtz}zttsqsppprtrorsmlklplnsx~ƒ…xfO>;=E;:3AZp„Œ‰Š‰‚†…ƒ‚}xvpkij``bd`f~‹ŒŽˆˆ„ƒƒƒ‰‰Œ‰†€}y}€€ƒ…‡†…‚„†„ƒ‚ƒ{~~}z|ƒƒ…~z}}}{j`B<$#)6ew„„~ƒ}y{srkeikklqkmnprnokqmbiifghghgfgnssx}vrz~‰‘›¦³ÄËÊÊÆÀ¸¯¢—•““•”’‘‹…ƒƒ…ˆ†„ƒ1O[hhfjmpnxxvzxvsupsppopsqprrokmlqrrvz€ƒ}kX,'$!' /RpƒŽ‘Œ‡‡‡‚„‚‚ƒ}‚zwwsiggcaf^_iz‹ŽŽŠ†ƒƒ…‡ˆŠ‹‰ƒ€~{€~€…„……‚……ƒ‚~~€{{‚‚‚yz~€ypcS;8$"#Rl{€…†‚|{pomielkjlklilmoqjkk`fejieeccdgmrqsxzxu}‡Ž˜Ÿ­¼ÇÊËÇĽ´¦˜“’”“‘‘މ~€‡……‚)=Wckiffrstuuywqrmtnsronppnrpqmllporqw}„tW4#[x…ŽŠ………ƒ|~|wurglnfegi]lyƒŒ‹Œˆ…„†€€‚‡‰‡‡}~}{|~}€‚‚ƒ‚€Œ…}z€||z||€~wqzztiZB0(8'Kix€€€„~tokefkjhjllilkfdihga`ekleidhgbjkrqtuxz}ˆŒ“š¨¶ÃËÌÉÇ¿º¬Ÿ—“•‘ŽŒ‡ƒƒ}€ƒ…„+H^gjghknpmpsstpojknjmllnllmlkjmphmquz}…€j4;g~ˆ‘ŠŠ†„„€‚{|xutujihad_Z]iw€‰‹ŽŒ†‡†…‚ƒ†‰Š‰„}}y}|}|ƒ„†‚‚€„„~{|}z|yw|zzvqnurlXN6&$/"8an|€}†…€|uplb^fkchgifhfddddfbffgmddcbacfffhnvy{w…‹•Ÿ­¾ÇÌËÇﲍ›–“”’ŽŽ‰†€‚€~8CVejomnqrvsrwttsprspnpoopplrolllqjsvy~„…„wVHo‚Ž‹‹ˆ‰……‚ƒ€~|zytqnhba_\dky†ŠŒŒ‹ˆˆ‡ƒ‰ŠŠˆŒ‰‚~‚‚……‡ƒ‚„…ƒ†€zyx|zywz~}vrsum`ZE34-,0' -Rlz~}…†ƒ}vsmdkhigdhfhhhdcdbbgdejiheffcfgiiqvtz|‚‹‘–§¶ÁÊËÉÆ¿·¯¢™•“’“‘Œ‹‹ƒ‚‚„„)CPaiklkoyvvssuvqsrqqqqtslrrhmlnllqrzy}€ƒ‚}d4"Sr‚ŽŽ‰‰‰†‡„‚€{ztrlh`_\]foz†‰‹Œ‰‰‰†„††ˆ‹‰ˆˆ‚€ƒ„‚‚„‚‡„‚€ƒ‡„}xvyytuvx{|xrpsaVJ6./463 (Chv}~„„…{|tklicebedecb^_`edaeefmggdbfeceiikoqxz|‚Œ“›¢¬¼ÆÉÆÂÀº²¥—”‘”ŒŒŽ‰††€ƒƒ‚}'J[ciiilpqruomosrrrmmnoononmghhljmqnvyz}xnH22"Qt…ŒŽŽ‹Š„„‚ƒƒ€}}~wvmkhaWYYZdh{‚‰Šˆ‡ƒ„€‚€ƒˆ‡ƒ‚~€‚€~~€€‚„€~{{uqrvsrsuxxslgbWQ6**208_q{z€€€…{wtkghcba]\^^_]Z_ddbb_fdcc`b\eadcghkqtswt„Œ•¥³¿ÇÉÄü³ªŸ˜‘’ŒŒŒŒˆ‚€{z}{{#'BSdlmnqquurtsnqtstrjijqqnllnhilonqpsz{ƒv\*!/]{†’ŽŠŠŠ„…„ƒ…‚ƒ‚€~vrigd]a\[gk†Š‰‹ˆ‚‚‚†ƒŠ†††ƒ~‚€‚€‚‚‚‚ƒ„~~zxvussrtyyzrkib\M7/)223)$%+Wox|‚‚ƒ„{xunehgcbc`^\_[_dedaddedehifeejggfknlruvt{˜¡«·ÂÇÄÁ½·®¦–”’ŽŒ‹‹…~|z~y"0K]enkjnqpqlppmnllqphggfkhehigfmjgllsyƒ‚xd;$Ff‰ŠŠˆ††……„€€ƒ€|{qokcZZ\X[el{†Šˆ‹†‚ƒ‚€ƒ‡…ˆ‡‡ƒ€‚‚„€€€}zxwwutsrwxwqic]VD'0),:42+%Eep{|‚ƒ}wtea_g`d^YZa]^Y\db]cb`fbafdc`che_cigiloquz„𥰼ÃÃÁ½·¯§›˜’“ŽŒ‹……{yutu+<Wcejjnponqhmiinhimhgekffjeeegfjhiimt|…‚~oI$(Bp‚…Œ‹ˆ†‚‚ƒ‚|~€}|vpnda^RVSSbiu„‰††}~{z~„……‚‚€€}~{}}~}|{ssqvuvpuwwljaXC3."'##!% ,^lww}{sk^]\d_`]a`_Z]\bc[]fc^bcacbae`eccfhjjhikltu~𣳻ÁÁ»¶±¥š“‘‡‚{zssq643260133:a‚€}{uuw~‡––œ–––”—”‘І‡…†wwwx‡……ƒ‡…‚~xumiebjv}|h:5)1,16<@O6$#%"(,.,-/-.+,*--.-8[ƒœžššž¤¥¤œ˜”™““•ˆw[;(!%',.*)& $)&46.3B)/$  !A<70"$(%(**.1,*4/-.-/2411D{}vvz~u{Šš¦¦¥¡Ÿž ¢—•Ž’ƒ{z€„ŠŽˆ‹ŠŠ‡|yvxoljd[fq}wf^F<51547DE3!"# !!!!"!(-,'++**)(+/+,,0?gŒ—šž¢ª¬§¨«¢¥¤§­©œ]9&%(.2.+(#$'"#3983A=-!"&) %!#) #&&*7>8$$'$$&'&)($'")%)+*+..01`wvtw}wss|š¢˜‘˜œš’”ŒŒ‰}‚„~€‹„ƒ…ƒxxtsmmhaW_duvjPD>81301:C;+#)# (.)(+*(*+,+-.../2Imˆ•ž¤«´µ·»¼¸¹¹¼¼®›ƒQ6/*16420,% %(((%&+18GMHGLHF?6,,'+)(*+:IF<';5F>7A1-19W`[DEIU9)&&&%'%$*-,.,&,()**,+,./Is{|sxxnmuƒ‹•™—ŽŒ’•™‘‹…ˆ„€z~„…‚}€twrikhb\WW[fjcSA>831.-.59,!# '))()*)*++*+-+-,.7Ke‚œ¦²¶¹¼Á¿¼º¼¼°¢[>.*//032-'&&$$$#$+/=HD?@?=83*)')('$&&$#%""$'%!##'-25>FIHID4)%$&"$$$'+..+,+-.+,/2/003fywxpnnmnrx—ŽŒŽ‘„…„~vvx~|v{xquqdbaYXQPU\ccVB9342/,-357-%$!'#'"$()#(!#('(#)!'+'$"$)+,+..-*)*..,,.03:Jiƒ˜§®±¸½½¿º¿Àº±¨”oQ:-//3631-&%&%&&&$%').2<=B?C=;1,)*')(&&$#"$##&$$"&*',45?FIHMK;)%$$""%$'./0./../-4///0..Afnlicjkkggw…Š‚‡…†‹ƒ†ƒ}y€‰Œ{yznnnnsunlf^][VRJJLRTTKB:1300)(--15*8!"%(--/.+,*),+*,,-14:He„¡¬¯°··»³³·»·¥•z_J5..32531+" !"%#''''!#,,25?@?;91-))(''%%##$"!!"!"!&+*/26=EIKOJ9*#!"$#%&)/--../.+.-1/0.,24Rekjf_fgebmu{~sv~}vw}††nwvhmnnhnh`b`\[UNKHCGH?<;:310.+)&%'+,?#'+./-*,**)('((*-/19Os˜©¬°´¸·±®®±±¤‘|jYA3,/34/2.(!!%%'())#! ((./3=?<7/+(&'%'$#""&#"!&"""+-0/:ABKPSD6(! ""$%(+,+)*-/,.40/210,32H]ehg`bb_\hckrpmjx…ƒ}vs}€zvjnnfllhc_ZW[d[URKCC?CCB867112-++%$%'-("  &%%('!!!')*,.,,*+,*'!"#)..0@^‚ ¬°±°¯«§¢©£Ÿ”‡vaL9,,2442..$ ! %)&'((%"&$)+-/8;;60*)&''&&$$#'%#!#"$$(*//8ADNWOA," #%&(*--**-.-.3*-01,-/04OhlabaZ\UWSYegihpw}zqsy|wocacaadig]ZNQZLIDG@?@BB@:672//-'(('&&(.*"# "!#$"&##*,,,,*)''(%!$(+./:^‹¤¯²²«¢œ— ——„wfT=1.157312-%  !#$(%%'%&$  +)(,0763.+'$)(%&##&%$#"$ #&&(006@EN\N;& #%&++*,+,*0//.2,(+.0-.//9fjc]\ZVSEEFM]efdeolkspvseYY[ZW\a`_\WRLCCA?:9?<C<=8682/.*()(&#',1 ! !%&.*-%$&(/$$'$"%**(-Crš­®­§Ÿ˜“„€ztbE5.,274320*$##!#"&$&#%&'''&  '(&'+01.,*(&(&$$#"&'$$##! !#%'/28>ENYN3% !"%%)1,.+)-,23/1/+,--0/3211U]]VTQKI>C@G\eb\]gfdslilfbZYSW\]b``YTJCAFB;=@<E?=>8<721,-)-*'&*/:"&$!#!  !94+($!+./&2*,$%',*/;V„ž¥¥Ÿ—‰€„††rT</-3637301)#%%%$%%%$%)*(((%%#')((*+*())(()&$%##&'%$!!#" &+-24<GPPE,#""#&')+,+,,-,.0+,"%'-*..314.:U\WNJHC?ACFOYk^Z\c\gdc`\XVRTSVZ^\\WNH@@C=78=:@DG@:<:42+,-*)((&*1, # $!"#,D&&$!&+-)'"$&'$*%/3B\w†„vutg^[^bl{xmU>6035251640$!##"##%$%&)+++%$!"!(&&(+'''(*'(&&$#$#$%&##""#" $(004>FPQ?+""$%''())+0-(+01+--+)+*0.-0011D[\OLF?=AHJKP]ZXS[[_\Z[TUPKHKOPTOSPF?<?;::568<DJD9:962*++)')'$(*/ !12!!!""''%*%)(*!& ()4;HTRNHH<98A>DSUN@62/455859961)&#"!$$'')*+-*& "'*#&''%''))'%&$%#%#"%%#$#""##$%+12:HSR<'""$&&)*+)-/.,+--/1.//-,1.1513/7QZRJC<;@CFEORROMQSU[Y]ULLJDBKPNJPMEA<>;=<77<>DE;98976/.*(*+'%''+.!'# &+4%!"%&&*(%++.&&!) "+,2<9422/./3--3352.118:::;?<>93+!"&$()+,./-(% !%'&&)&'((()($&$$"#$#%#"##"!"$%$)10<NSJ4%#&'&&((-,-----,./.+,00/.-11,--0DSTLA@<:=>>NOUJGMSTVTUNMFDCDDFBHIFBE<;;9;8865:86746430*()''''&#".$!*"-"%(($!!%$%%$!"!$+2/-,.-)*+ %(*0597?B?CCEA3* #""&++.0//+%!$"#''"'&&%%%&&###%"!""$#""!" !#$*,/?MNA.#%&&$$&(*&*/-*)/1.-..20.../1/00.5HNNE???=>?JJJDIPMMRSSMF@@AA>@<@AEDFG>A:997736201..020,,+)*(&&%#'; $'+#'&('#"#$!#!'*,3/0./++)+""+,58=AGFGMNIC6+ !"!&)+*//02+)& !"$('%&('&$%&$$$&$$"$##%#!""!" #&(/8FRO:)#%'(&%(*((*.,-,202.3441/20-/1210-;JNE=>C?@CHEFELPRKOLJJ@<=>;;<?@@CBBHCC?@=:6220//-/-50...)*)&'&$#+-!!!*# ,-&&(%&&'(%%!+!"$-12350130/--,#*.:DBCJMLVTTJE@4"!!$',,.0043--)'%'&')'++('&'('#!$&%$$$&$$&%%$"$"$').:FRJ3'$&*,)'**.-*-./-/.+-1110,/.--,/..*+@HE;=C?>CDDDBEPLACFEFA;;B=8<:?>?:>CC@B>;:9130.10..41.*('(+&'#!"!-&0>""#''&&&(*#&!)+.10530.3//+,-+%$.6BIIKQUV]ZPGCE<0$#"')*-10320-.*)%##&"'(&)))''&&&$ "#$$%##%#$#%%"##%$#(9CE=+%&*)*()+(*+*+--,11-020//.,.-*+/3.*,5DG@<E?;@A@DDHKHDAFJGA;>=7387;99@==::<998422.,.-030-*)'%'*'&$$##(1"(8Ž`$$$(%(('$"(504538111//.**,-'% ,5AJQW[[[\TRIJLKJ?3*'&)*,113420/,)&# ##&#,)($))&')$%""#"#&$#%$&##$%##%&%$(56--**++.+,/,-+..---/0././/0-.)--*-./))/?A@9@A?AA?AFBFEEFDHKD;9772365478<9979634.0--),.004/**)&)*'%%$"$#:*"!"! $" -I~5$%&(())'#&#+627658431/+--)+))*(0>F[dhcc\QMGNUXY`R@0+'))-224331/.*)&&"&(()((&')&%$#%"!##!!$%&&##"$&&#"$%$"#%*'3*+--/-,0--,-./0,--*,-..-*,))-*+,(&"$(5=:?A?>>:9;=>BAA@DIF?805202313386458612-+)+)+*)-3,()('(%&#&"!""&,-Jj)%#&&'**(#&$66644711/.*+*+)(&,3<NTgmqi`MGQR\biqpaJ:0+)),013331..-)(&!"$(('(*'*)(#!#"" ! "!!"#&%#""%%&""#%#%%%&8**.-,+,,,,*-.-/,...,-0/--00(-,+),/#""A>:<B?<;8;;>>AAB>?AA@:044521214645:6474/++*+.*(,-*-/+*)&%#$###!$,#!"!(1Qf(%"*+(++&'"(483434/0/,++.*)-*5?PcltssbOJHX]kqx}vj`C8/++/035743,,.,)(')***)-+'+)'###"#! "##"#%'&%$"$$&%$#%''(%2?***,/,++--,/-0/1..),++))-&&')&#" %?;:@A;:8998>>>?=<<<:606=C7-10134;965550)+)0-*'-*),.0(*(&'&$#%!#&4!!##%%%#;h‹$&&&('+%"- %376320..,).-/)+.6GQ^o~|iXLM_lt}zlOA/,-/055685--+.,)))*/*+--*)+&$'$#"!"" $##$$######%$%%$%'('Zc('&*-,)*.,)-+0.+/*'+,((!"%("%3<<@:9:6848;79>@A<<6879<E820./236559421*))***++)'*+,)))&'%"#'#"!.1%#')+(4f“/$$''$'& !/:;:4.-++)/01./4DVeu‚‡‚widclv}|†††‡}u_G5--0155784/.--*+)*+.+--,/-/(%&$#!!!!!!!#%"##"""!"#%"!%&%4r@'%%('*++),**/10-0)%''$)*!%"!% '&#>9>86418257438;A@867>:8;76321256638301*+)(+.+'''+*)'()'('&#&'&#&@ !"&++-..2c6"%**((#!# #"-9@83/.-+-/7202;Ndu~†‡{ns{|ƒ€„„ŒŒŠŠ„zqU@20159986730,-,*+-/20201-.-&%&&#!"#"!""$&#"##""$&$%$%&$'So6&&))+))-.0-./1021/++#$ !"!%#5B943115/342768?<:79<87:6:7651287:;5./,-**..)(&'(('+(&&(*%$&%("#31!#''-20/,9bœ5!(&$&&$+!&*(0;:542/..-08601@Xny…ƒmoxƒ‡ŒŠ‰Œ’–˜‡†~eN73468:6887-,+)(+./24401+-(##%%#!""#!"#$$# "#!"#$##!%&$=`Z1%%'(**(-/1),,/0,,-(**'$D;23634/010556=5883;<9<>:6756378;@91/-(*+-,+,(#%''('&)+(%%'$"!"&A '**.10*,4X¤@!%$&%%%-<>;961.,-/7527H^wz~ƒ|pru…’‰———•“‘†lV=6379:9831/.**()-067:57.+&" ""#"""""!!""$%#"""""&%#$$4XgO/$#%'),,.-/*)*%#!43-.,+*-+*"! #A5563116/115;564;9>B?;=75:98668:>4-.+*,-.*,2.%&')''&''&&##&$#!#.8!#(*,,40/%05O¡X##%&#$$%0>C??;83,-2715?Pbqwx€zx{‰ŠŒŽ’•–•š™—y_L869;<=99300-,)**-15:65/+'&$#!$$$""""!#"%&'$"$$%&%&*Yijii,##'))+-//&''* /2210,+)+2,/'$" 08620/-31/126249>DAGD9557<;8736872/.,,,.+**/5)((*)((&)(%$##"#!"%9#$-(,05.)%41?›d&!$""!!)&2=CBA<>80/5647GTfqzx}|ˆ‹Œ’Ž•™˜š¡Ÿ˜“†nWC9;?<<993/-,+))').2562.)%$&&!#$%#! "#"##"%%$$%&'$9‘ª†z†Š*%$$%'*)%$ !*,+-225200,,(-+)%%93.,*-2/-01201>ENFJB>868745767<814.**++'+,(-.+((')('''#%$$!"""")1 )(+194.$(+*<Ži( !&8CHB@?<5.144:P^lru{‚…}…‘’”’•“‘˜˜œŸ¢Ÿ—y[I;=AA@;65/-,*)&''),172+%#!!!"!! !!!"!!#!""$#%$%&jÉÓ³–¥c&$##'&#!**',01454964/)'$%.(''%!:00/-1//12/00=FJEA<>:444445688744-**+()(+++,-*()))''&'&%#"$#"##<%!$)..361+")+*6†*$$9@D@B@=:.413@Vlpoy|‚†††Ž‘–˜•••š› Ÿ¦¤¤œ„nYCBCC@?:511-+*()')*063*$!% " !""## "#"$"""&$&hÐÚÌ­Ÿ®›7('$#'""-+)-..1126496310+)'*/0/0+' $440-/10/,+-4;@HF?::9777336775931./-+')*,*,/4/)'(,-,,($&'%'%!""'6'(*17885)%++,6p6#!"2<AAEGCA8916Hexutu{‚ˆ†ˆ””™–˜”š˜ž¢¦§§Ÿ’‹}cPC@EBC;52100-,*()(+21*#"#!!""!%!$$" #"$&#"##)YµÕÔ¾±©šT%'%$$#"!.)*,20/111069;;::60,'')*//-'/1-.00./+(.4:;DE>8;<G<63472565131.0-**.(.0.41/-*+.22+)&)%%""#$"/4 &+-:??73&(((.8^‰>"$$,7>>HKLIC8.;Mnyzvxw€ŠŒ‹‘””™’˜™›–šž¥©§¤›‘‰jUICFDD@<505/.*+(''+2*%"!!!""""##&##"#%%$##*J”ÌÝθ´™[,''(''&!.-,/40024558;<C@A==84,)))*)*)20.2222-,/6==CC@AJV[G93985534341+1/-..+2/.1:75/-20/,+*((&&####&J('.4?D@3+(-,,23ZŒK$$$!"09<CGPPH75E^u}{y|}~ƒˆŠŽ‘“˜––—˜•––¢¤¡›’Šu\PEJDG><7462/+**((01)'"!!"" #$$$$#%""&%"$" =…ÆââÉ»›_/&'')&''&")+,2/343538;;<::;:89<6+&*/,+(&030211,027?EFCEEF;9D>6>==7554/1.1..,+063/69=?904.0-+,,)'$"%%""06## %'/:A@7.)%,-+-1T\*#%# 29@DOTG=?Ki|}}}~€…ƒ„‹’——˜•˜”–—œ¡Ÿ¡Ÿ–‘cSHFIFB<9893--''&(6/+'"!"!"!#""$!"!"#$#" !(v»ßãÛÆ­k*$('$&&&''&" "%**)-0112569:78656;7895)&,284/**100213577?@=;CC;<8<@8<@;445653234.-.6C=4749GC:0153213*+'%$%$!$B!#&.9;71-$&((,).S£r)!(%'4=DJQIHK[p~~€~†€€‚€Š‘”™›¥š—˜›Ÿ¡—‰jUIGIG?=@;83./*'''51'##!! !""! " !! "#" (d´ÖàÙ̼o,$),)'('$'%%%$  #+,19+(),/./1;;;=:<899:795.))/298563/5373748<>742;BECB8C@9=;58;3825483548D@=<9;@GA;58;;7532/+&'&$"0E&&&'/164-('.++,35Y›{5&%'$.:FONQW\gz~ƒ‚„€„††ƒ‰Ž”“•––›–š›ž¢¡ šŽs]NJHJDAB:9:2-(')-92'%#" !"###""""#"#"!.u¼ØàÛÍÁƒ1#(,-,,,'')(&&'))),5:BJ*'(*,/./429;88;<?2255-*/438:;;908633824>842-5<DEH<;89:;7<>6:94/:77;78<?<<<3?A<77;@>47952,))&"$G1$%%)')-,,)#'0+,.07V…ƒ>*&&!+7?EJ]chu€„†„‡ƒ‡„‚‹Ž‹—“•”›™ž™šž›¢›—xhTELQHBB<;;40'%)28/($$! $##"""$!!#" 8x¾ÙÝÛÐÅ<&%+.,+-,('))&&).0/58@GM)%'+*+-2101/017593020023358:<:=74663524421//49BBD<:75969<C=;>50;@898;;?:89156:999=@<7>948/-*#!#K$(&#(&%(*($+-(*)+1Tƒ“K-&$'#"0:DNepwz„„‹‡‹Š‡‡…„ŒŒŽ•’–›˜›šœ™Ÿ™œ–€o[PLJGF@<;930&(.15+%$&#! ###""%%! #$>‡ÁÕØÛÓÍ¥K(*%,-,**+,)-+((++.35;@DL'''*+)+-/..+./1,--+--062149988<723:547621/,04:@<@;533955<ABEF=56?9:=<42--)'%%',./3:E>A@>?;0-)&#/7 $),'%+)%%&&$/*)-))2R€‘W0&&#"*7DMdx|~‚„ƒ†ˆŒŒŽƒ†ŒŽ”™™ Ÿž™›œ™˜›œ››•…xbQNRKIED=>:2**162*$#$#"!$""!$&&"!'7]¢ÊÕØÕÊÇ»_+)-(-.,.**-+-*+*-.21389>A'&&(,-,)-,-(.,-*()*-+14-03332323/.9816301---16:8<7448869BADE@3330*()%#!""$"#"!$"#".>IAECCA:5/+($=#"&(&*#()+%$$$"#3)&,))2S…¡^:0)%'"$0=Jozz{…ˆ‰‚‡ˆŠŠ’•“˜›Ÿ¡œŸ™™——š˜—‘†}hPHQQNJG@?>0--67.'$#$""!####%%%!Ai~²Î×ÓÔȽ³k1'&*+.0/,*,/*,+,+/+.0231.,'((*1.-+/-+)+-,,(**,*---/4/,+/.../1024730)++-/43433/1/1---*%#""$$&%#$#"!#%###" #""!"(.29QC/%#&(*+;#$*''%''&$('$#"(2)&+('0T˜hB7-&#$(9Howv}€‚ˆ„‰ˆ‘Ž‘•–•™›ž¡¢¡ œ™›–“š”—”Œƒo[HMMLHIA;9//392.&" "$#""###%#$C˜¤¸ÏÕÒ˳»y4%()+./0.,+)*)+,*'++,-**)'%())+////.+)+.-+-,)*,(,,-,..,,..),.-*6>>80,+/.*1.)('%##%'$%#""#"#&&%$%%###"!"!""!! "" ! $!! ! !$(:3"''''(&'(%&('% !+.&(+*'-Qz¡kH=.'#$#0Akx{€‚†‰ŠŠ‘””•˜”•œ˜¡¡ž›š—”–˜–’‹†r\JHOIJIHB=3587+)&#!!#%$!"%$$"D¶¾ÍËÌÄ·©¶6%'%*.+0-,-.+)),-)(0+*,))(&$)'(,.252/.-.0++.,(+,+//.+-1-+*.-,.,()E?913.1.))'%#$#$$&'%&#""""#&(%%$$$$%##!!""!!!""! ##"!"$""!"&7%&()*(%'+(++$&#" .-)-+*)/Ey¥y]I0+'(-!$$);ix|„ŠŒ”“•‘””•˜–š˜œ—¡¡¡¢¦Ÿ—™–—™—“‹wcLFPNTFMH;3584*)&%#"#%$"$%$%Z µÁÅÁ½¼·Ÿ§˜D%$)(,./0..../**--+).,*((+*&$+*)..-1+.1.-.+*,-,+*/01-*/0*)+/-/0.(&4B610/)+'&'%$$"$%$%&'""#$##%%&%$$#$$!!#"$""! ""! ""! "##"##!%&&'+)'#')(**'&$!"31,++,/3E…£S>76+/+,""" $&)6aƒŒ‘–˜™–•–™––——žœ™š—Ÿ¡Ÿ¤¤§£œŸ™›š˜˜–€mTNRRSFSK=3361)&%%"$$&$"%&0k©³»¼·®°™•G!&%%$)/./.-...--.+*+-+*&%**('*-+,0,,*,/---,+*.-,.-*0-),*))+.-1:9.)(05.,,'&&#$##""$$$%$&!"$$"%'%%%%#!#$# !!!!! !""!!!"!!!""""$&""'(-(&)&'&&'*&#" ...+),+-,>~¡”Z?=<64--##$!!!%'+0Is…‘œš™—•—™——˜˜Ÿ ™›—œ¡¥§¬¦£¤£¡›–’‹{bOKTQNNG?4:6-&&$##%%$%#%?…¨¥¨£¦£¥š†‹Q#$%%%(.,,-+--/+..+(+,(**'))((,.//13./.,,--,,+.-*-++/.*+*+*(.+.6_P.**1/+%$$$"%"#"#%#$%%$"!#$#%%%$&$$""" "!!! ""!!!"! !#!$$##&%#$&#()+)'&%')+%%$/.-3++))-?t¢œlNF69<6/((,% $(((1R}”   š™˜—”™›Ÿ™žœ›œ¢¥¥ª­¯¬¨© ¥¤›––~hYTZTRPG==@4+'&&#$&&%%(D›¬›”œ˜–—™€‘](  $'&).,-,++..-/-++*,)*)((('(..0112.0-*./-+...,()-,+++,+)*,/)(/G{h7+..'$#$#%%#$$#%"#""""##""%''####"!" !! !""""##!" $#"$"&$$#&&$##+,&&&'*'(&%#&6571-/,-+Bw§¦tNHCBG?54.)$$###%'&''.S £¡œ™š–•”—››¡žžš ¨£­³±­§¨¡¢ š—–’‡qcVWXNM?5=:3'%&"$$#%,RŠ´¥”†…’”‡y^)!!#$&)+--,....-.-,'++)(')(('(73313331//01-.00-++*,(***.()(--*,+.>TD82-'##$#$$""""#"#$#"""!#$$$!$%"! "!" !! !"#$!!"$#$$"%#(&(&%"#%'()&$%$+("+34,)+0*-,Cv ¥zOIMPLJC+,(($%&!%('&)(%%Ey›¡Ÿ™š˜™•”–™Ÿ  œ˜¢¦ª³²°¥§¢¥£›˜–”‰w^RWYNG8484*%%$####J·ãѰ”€‚€‘¢¤zib2"! '#%((*(*.---+--*(,-+)&'''((84/13252575//340-+*++)*)+,,,*-.+.0.-9EGE?4-.,&&#" !!! #"*-07@>-*$""!! ! ! !!! !##!!"$$#$%$'$&''((##$')'(#&%*$# 042/-)3*,.<l›¢ƒ[EKTVUN=-)'%%#$#%%'&&+')=b“žžžœ—™””–™š£¢ ›œœ¡§¯®¯§§ª§¥œ–•’~aNOPN@1661)&$"!!)dÈíÛº¡€pos¬®‹`PA$$"!!'(+*())))+++*,,*),++(&&'))'01013011252,-11--.+++(+'*,/,)--++0+'0BEII=601*+,.+)(&051;N^qŠŸ¬¨™™‡p\@# ! !#"" "#"#!$"&#$%#&'#"#&'$("$$%$!(0/-2)+-*+/9d›§‹_EDRaZUI6,#''+%#&%($ (-Ls‹šŸšœ —––“”šš¤¥š›™£¢¨©«¨ª¥¤¢”’–ƒgMKHH7.61-'" (7ÖéàĨ‰hVb´³ˆmL5+"$"" "&-3/))('&(+*+*.*)***)%&'(&&*-,,))))+--**,/++-,))()(*,+/**,**.+''0FRMB@53/15?AE@>?=ERT`xŒ˜ž¡¬³´¯³µ®’vR-  !!""""# !$#""$"$$### "$#&$#""!+,.-1(*,(+.6`Žª“]QJSa]VQ@+&*''&$%&!#(7_‡šž›œ›”™–—˜œ¡§ž—˜šš ¤«©®ª  ¢œ’’†oSHIA405,+$"%.h¬ÌààÔ¼¢wT_˜³¬€u_6,%$"""$'+1--(*&''(),+.+)('*''%''(&,()+()*())(***,()**+*'*,)*)+,+,**),*(*.LMHPSXWZ_egc\UZ[b`]`cc[cq{ƒ‹Š‚…‚{{qaH1" !#"!"$"!#(##$$&&#$$%#!"'&&%%#!-,0./+)*),.3a”ªšgUORX\WXH-&'(&&#''$"$9\‚•–™˜™“”œ—’“—ž¤ž™˜˜™¢§®°°ª¤œ˜”އwZLB5.+'"!$(Gy«ÉÛáÞÓ»ŠaT€¨®dO>/% %#"!%&),+,+,,,(&')*,,,('((*($()*%+(('&))()'&)(''((()(((+(((,())+&&(*,),&$<<CR\iw‹—œ‡nqlchidgkre^VSKBFLLUPNID:7=9*# ## !"$"$$#"##%%"&%$"$""%$%#!$/./52+(+*./7_…§xbTOHTZQB2& "!"!!+4VtƒŒŽ–•’‘“‘‘“•˜Ÿšš—›Ÿ¦®°¯®¥›’‰‘‡vO>,*%$$!&.<l£ÂÔÝáåΧviw•­VEAD- &"!! &&')++,**,'''(()*)'')''&'*+*&*'+-('(&**$%')('(((&&*)&&(-*(&(&''()*.*#&)2<Oi†˜Ÿ¢œŒyphmad\kec\P?60.7@=;84/'()')*%  !!!!"%##!'&$"#"!""#"!(+-**6))*))/3X‹ž›‚lYNGMSNC5) -Lmv€Ž‘‘““•—š™šž››ž¥¨«°¯¤š™†ƒƒmM6*,%"# #"(Aj¦¿ÐÚãæÝ¼“}ŒŸšƒR;:G3" % !!"$%##%()&'('')'%&)''%)')%&$'('/+/-+*--./++.+(,,-,-,**-*/.-,+/),*+-.-..,"!+,>av’¢¥¦—Œ|€wgbb[VUD;2/13/21++('*%"!&+# !"!!$!#"$#$&&''$&%!!"%" !.2,*,0(+*3*0<`‹ ®‘~e\PNLE?5("%)C`t}‰Š‰”’“”“’––—š›ž¡¤ª­­ª£™•‹oI21)($#""*!%(9\}ªÇÙâåÜݘ˜£‘kYB/A:+!#&#" #%&! #'')''(('&$&)(&&,)&&)''&1--..-01/-,010/-./--/...-///.//,0+*,0-.-0+'!(.00AStƒ›š†wvj`FLB;575863.,/(+'&&%%""""--&!!!"!"$""&*'&$&(#!"#"%,1))-,,,,0-;BXˆ¡§š‰oZZPFE<6-)%"(&<Tnv†…Œ”“‘““–•”‘˜˜¡¡œ¡Ÿ£¨­¥™kE.()&$##"!#%+--8`ºÒâãáÖõ¥£˜`TQ465/"""%""!#'#!(**+')'&&%('(((+,''*'''0,0+./0-.**+2..*,....---./.-/-,+-*'++'(((&&##"%/1%2IrƒŒƒŒŠn[G=<57.2.157821++)$$"#!! !%,.$ " #!#&'"#$$#"""!"++,)(+.+.,-*5D\‡¦™Ÿ•‡fZLBC31-*  11"$$7Ngqy€€‹’”•—”••’‘•—œš›œ›¡¢¨“e@0-))$""#%""%&./0Hn¤ÆÙæçåÙĽ½¡tQK29>1(!#"#"!!$+( $(+,-)**)(''''''')'''&&( $*!%',',)++).0-//*))+*,++(($&&$%!"3$#0:YdjrVIC?1,:<0446-*1.)(%#$$# !'-* !!##%#%#""""" !,)+''(2)*60-5Nb…œ©šŽw^PI?00)'"$84(""6L\lvty…“•”’‘Ž’“•—š˜™š˜y8,*,111("##""#%%+0L€¥ÃÕßæåßÍÄŸ‚m[33I92#"!"#"#$' !'*3;466/20-+((''%&''&((%&(!!#  !;& '7AK??DA??:7245385,()/-%!" ! ! $2/ "#$)'#%'#!!#+%)+-,6))0,06Qz’¢¡®˜‰{gWKB=6)')28'#.CRjrqyŠ”–‘Ž’”•”•—”k;-,19=:3/,)$$$""$&17hŸ¼ÖåçäÝÓÊDz”ƒi>5@>3'!##"" #''')2@ELLQMG;>9622+)&$&&&'*('(&@(&(--4@CLE234.())8@,&)-("#'!!""" &$###!+*$),*(,+,*',5R€•œª ˆ~hXFD<;*(*+/'&9G\lsyw~„Œ“’Ž’”‘•–—•rA/3-4;IIC9.&'&'$$$%,=J…¸ÊàêèåàÙɯˆv?8EA3/"#""! $&(,1;KWa\SQRGIA?=50.&%#"#$&(%%#  &" $!H&$#"%#06:E@333/($(&;E3+''*.,&! "%%(360020) #$""!#-)'*,+)2,*-02:[ˆ’ –›¨Ž|iZNEC=./1* &*'%.9H[ilnw|…Ž’’“’’“˜™‡Y959E;DTI<@>20&*'&%')BYt¢¾ÕåêèæâÒ²§ ’TN?H7/%!"%#!!!&(*2:FVahiZXXNPIFC:73,)$###%&'(&#"!"#%! #&"&!B& %$$,18??=;/*2&$&'.41*))@1&# !#'(-2/1.,150/2, "###'-(**+,.,-*,22Ej¡’™«–†|^LFD?..3-!&+*+8<CKM_jŒ“’’’sA<BIEJUGST?AG:-()')'+?Je¡ÀÙæèéèäØÀ¸³W@FE:+&"&###!!%%(,9@R`e^`^WSRKHGC>=94/,(%#"&'('! !&&  " %&$&" M.%.&'.>DAG?B=04*'-*)4-%''#!##!$)*,.1/3--,+,+./61/!!""3))*()/,+(&)/2Qs“™Ž®”‚y_JIC>2*-)%$%&$'(,46=I]w‹‹€VBfmV^]ai`[XN?44.+)+*.5Hiš¿ØæìêêçÛÑÀ¿§]CLRG7(%'&$"#!"$$%)2ASS]YTTTRTPIFIDA>?84,)&&%"'&!!!%"! " ';/;;46Q]VSFedJED721*#*&'($!/&,0+*.-/-.,/.'.,,/++,-# /()'****)(&))3\›¢•Ь ‘teKCB>/)()2!#$'%(/7Qj|ˆˆo[yˆ‚w‹‹}ypiX783-48502Ee’¹ÓßçéèæßÓÎÍ»tqR]ZH.$#,&!!#"!"#&,9FIONJJILRLFEHDGEE@:1/,'##$$"""!"!&$($&&":c~“••’¡˜–jbb`L70,//0&"(.100,-.,/.././,.-*/+/)*-&)*()('-)),,*/0Fl‰¤§•–ƒ©ª•~sKB?71**)N""%&%"$%&1@Yke~°¹¶ªž£ ¡¥ŽJVCC?BDA:=Hg¥ÁÖáãèéæåàÙÕňsars@/($(%""!##"#$%)/:@@A=9<@LFLJKHMHGDB951*)%#%#$-%$! !!#!#! )'%!)(% …ÃËÌÃÃËÍÇûļ•p}{^=E>43(+01301.0..0-2230,+4/.*.-*--,+++''*)1-21;?U…š©¢ ˜€¯®˜‹€RI;73**-/#!'.%&# &&$#%$%#&$&CyÀÝÖÊ¿¹±¿º¶­¡td\VSJOQG?CZs–ÅØãçèêéçèæâÏ|rl{^</$&&$!&&&&%%%%$)0301368:BCLQPHKKC@AA>73-('$ " ##$$#!'.ÈâçáÞëéàÝæÞßÛ÷©˜nq^2*/..//,+),01-,430--,.*')-+*))')))))('-229BLqŸ§µ®§œ€ª¯žŽƒWEB>4)*.*-5511//&$%%&%""#%!"-k´äîäÜÎÊËÍÎÄ·¢‰{|yru^XZWVhŒ£ÃÎÙäçìëèéççÔ®±ž¢¨šŒQ;-#''&! #%%#"##$'(**(+/27;>CGLHNJIKD>?@;1,)%)"#!"'$&(''&$!(#VáçéîññíëîëéìæÚô±p8+*.,22/,--,,.2+.,0/,)+'())*)*,)((&')')(47Kbl‹°µ¿µ²­‹¥´—Œ‚`C@=>-,-+*./0*&&! ")-/(&&%$O®ÚèéëåÜÖÝÚÛÏ¿¬¬¦šœš‹sj]c{°ÅÓßäçééëíêèÖº¼µ­¶±¥rS5(((($##$$$%#$"#!"'('*,.338;?DEIINPICED=534/!! !""(%)((*&&'$( …äæçññííòíïîîïâÃx5/,-0,1/130/-0.1*.-3/-*-*++,+(,-).(('(+01HRhŠ™¦»¼Å¾¶ªŽ§·‹“‰rQXQ<0.)/.023)""%'(*)+)6‘ÙçèèèçáäæèàÕͼ¿¸¿¸²¢• —w‚¥§ÃÐÖäêèìííëêÚÄÉùõ´|W/())&##&&$$&$%!!!"%$%***/2356?BEKLIOHFD@<<=6 !'+%'''##!##‹Ï׿ðíîïíììïêäx5++--+*0./--/--.,--,2/-*,))-,*(,+',)(%(.4DYiŒ©º¿ÅÃÅÅ·ªƒ¨¶~ŒwWhc@:8**).1+,$ (**++,/P²æêêéêëæççæãßÓÐÇÃÆÂ»¶°±¤Ÿ¡¨²±ÂÐÕâçéêîîîêÞÊÑÑÍÌʺ z?&&$#&##"&##"#$! !"""&(((-..047;?FFFKHEEGHC?: & !&'&$&"$! tÀÙìîððïìïìà|5,((+*)),.-+)*,),,+,+/**-.)'*,,%,*(*&'&(7Bk‡—³ÆÇÍÍÊÆÁ³ªˆ¢·}}~Ztc@97)&&*-('!(-+*/0,TÄãåèéèèëëååÞÛÔÔÐÐÇÀ¿¾Å¸·¶µµ»À½ÃÙäåêìêîîìß×ÙÖÍÝÖȼ–vU/%%#!$%$#"!"!$"!!"! ##$%***)+02459BDHGGHJJFB<"!%).*&,+$##)(#"+€¼àòôïííïÖu;+))/+*)*../.,,.-,.-/,/-,.-.++./+/-+-)*-6Rq£µ½ÊÒÐÔÍÌŽµ«Œ•¹ŒfupSeKB@65('(,*!!-2/.45^¸ËÊÕÝÜÝÜ×ÕÔÒÌÄÇÑËÇÀ¾¾¿Á¾Â½À¾¾¿ÃÌÝèéêîëðëãÝåãÙàâǪ̈‚^;*-*&#%%%"""%$$""$$"#$!#&%(+)+.3214<>CECJKHFC? 0 %&$)(())%&" ('%.}Æïïïîìî¶;//-+,,--+/01..0+*,511+03/*.2/0225112710EZ­ËÑÎÙÙÛØÔÍÆ¹®›Š|¨xYYi?NNJA<:*)%!%%$37847R• ®»¾¶º´º¸¼»·»¿¿À¶»Ã´¿¾¾ÄÁÄ¿¿ÇÍàâèéìïìîâáéçæääÛÒ¶•pA0.,%#&&%$$$##%$$!#"#%$"###%'(+.+,0448=?CEIKIEC (&(#(*&&&'%!"#$%&%%B½ëðîíîðä’50))*)***24.)++++/1,-/01-*/030311/.18=Bd½ÎáàÝàãÝÓÐÇü«‚omMC^:DDG:A8,)&"!$!"1;:9SNIdˆ‡ˆxxx‘‚‘š««Äª°ª±º¸»º¼¿ÂÄÒÔäìéëîïïìçéçæêèáØÄ¡ˆM11-)'(*(%#""#"#%" ##""$###"#%()*)+.0/365<=@HFEC!  &,.&'(*(%$#"  $('#&%%'&~èïïðñîìà‡2'++((*+02.++*,--/,////.-//132/2137EZo¤ÀßäëêèéèÝÍȾ·¤|rW–U=3Q54>:?J;3.)#!!%(72+2,%*.3,/6.BTaNd{izŽÂ³™‘“–ª­®¼¼½ÄÐ×äîêìíòîðîêéêëéãÕ²–d820./))-)%!$#"#%#!!###"$$'$#%(,)*+*,+,002568>=@D"#%(')),(*)(**,&'"%% ""!("(-'%&%&%$'+‹âíïíëãßʬc-))*+*3/.-.-----//-/1560..08/,/8NrŽ«ÐäìîîïëéÝ×ÇÀ¼³ª™kW@oN0,22,.09E=53/("#" +',*''),)-,.(`QE;BNNOp‰‡ƒnft†›®®°½ÁÔØßçèæíòíðîìêïëêÞ¼«‡E-0574+(+(##!#%%$"!!$"$%'%)%"%,+))**..,0///235;@@! !$&#')*#'%%#!$%'+(%&%#&%$')'€×àââÔÔÅÏÇk,.-+(1.,,)+3..-)/,,/151/003.,-A\´ÇÜìííìëêèÞØË½²³§–|XP>T;*('*+-%,:;624)$"" $'*'*)(*+*,')(-406372DDBPOTUgn‰¡¡²½ÅÇÈÙäçìîñïðíìëïíèÒ´¥^-./6960*&!"# !%$""!#$"""#%%##)(%%(),..+,,,,0/27;9 !!*0(%*()(%&##!  #())''%$&&$%&&'(k´ÈÓÄ­†|Z6,*,,)+-*()(.,*+(,*).011./-1.*,E_«ÜïóíîêêåßØÈº®¢Ÿ{eC>5;3&(%!$'$*56-.;'""#&%&''(,(,&*())((&(+--'0((.0<LMRl£´³¶ÄÆÍæïïððñïïìêìíÛ´‚<'337:=7.&!!!!$$"!!$'$""$$$$%(&%%'(-/0/,+,)/-4066%'))-'--*,((*%!%"" !  "",+*'''(($''&&%&'NNG;.2.+-.0,../*,+)-,'/3.+41.341*,23*)On¤ëòñïëÝÖÍǵ’…zpeU72+.2&#"! #&(..,,4+(-())*+).1*,&*+-,+)('&%$"$'*$+8BHLZ{››¨»¾¿ÔíðîîíïñòêëìåÑ¡S,-138@B6+$%"!!$#"##$$'&$$&$&%%''&%$)+0020,-./,0024# "&+--*)())%$%!" (-*&'')''&&&&$&%&&%%#!'*-,,(**-+)+0(-*+,('/-**1/.0-(($#!"Y|‚dk°àÞÚÎÂÁ¶œzlecZD61(&%&"#!"" $'(*+'()'$$(+)+()('&''&&&&!$  !$%(,87J\\m”¦¯·×æíìïïîîïñêêæÞÑ»y/*5148?</%## !"$#!# """"$"$"%$#%%&#$%(+/31200+,*,-0!&)+*+*.-*''%#$!   " % ! " " $'!+1,''(()((''%'&'&'*&&'$ )*+,*+(+).,.')./+++2+++3.2/-$%## ^€}^MG_‘¿¼°¦x]PKBD4(($!!"$" !""&*,)()&$%'*))%(('&%((%&&#   "$#$1=BDlo‚¨Ìãåíëððñðïîêëç×Ê F"*1.5@@4(#"###"#"#"#!!#"#%$##$$($$$$'%*027964.)+*+. )))..+.+'&&$" (&&)&)((&'&)(%'**')))+,+(%'%'((''%%&&((')&',&""0,(+++++'++'-+,,,.-,,-,,-0&#ZtRLC46MrmZKQ8990/*##! !#!" ""$&-)*++-&%))(&&&&&$%$')(#> #+:9FYvÀÏÚâïîñðñïîïíéêÙºj'!&+26<8+&#$$#"#"""##!"#$#%%%"!$'%#$%&$(,1=;;99/2-*+%,++-.-)%($#!!((//-.+(*-,%%$#$#$&%)),,.0/+(&%)%&&'''&&'&('')'(("++,()''(-)))).-).-*,-+))25"HhLB6.),*+($*').($#"! #$#  ! ""#&.,+0*)'%%)*$&$%$"#%(*($!'1<j–»ËÎØëòðîðïïîíèæ×2""$)022,%""$&##""!$$"!"!"$#'&#"$%##%#%%'(-7?@>=865+(+!(.+,+%& $$"').0,0./-('++''''"####"$&('&)-/,)()(&%((('')(&&&'#"!-,+%)+,*-*,1/+.-0..2--01,;kaH=/+*)-(($''&&#"!!!!#%$'&%&&$&##$$&(+590&'&(('(('&&'(0+)($ #3Hƒ§¯¶ÃÜîððîòîñîëìã°K#%$"&+++'$$$(''%%$%$#$##!$#"#!"%&%%%&#%$(('/:BFCBB:81$$))++!&%%))*,).-,.*,+*&))'%&'##$%&#"#$%#"%)-+)'*'(,(+((&'%$" !" (++&',)'),,***,-*,43++'(,-VPD6)')*&(&#&(%&%!"#"&(''$#%%%&%$&''%+@@1&&/1*1311/,)-1+'*& '6Hcq–®ÅàëêíðññðíëçÕm%$$$#$(&&"&#"(()*)((%###$"#!"#"!"$$#$$$$$'(&*1=GEHHC>8"&&'+.%%%(./+-/,'--00+/-,))*)'#%$$$#$#"!""!!"%())(+()(')%&%" !! !!" %-&*-+*,+1,,++2.31/+.+),+ ,D;84.,,+(*('(('((''&(('-+*&%'(((%&&'(,;_J753?>;@@B@9728;G>8)$"!'*<B_®ÉØåëíòñïðîíß 1!%%&#$&$#"%&%'&**)(''&$"##$!""&$$#$$%%&$%&'&&,2AGOOJHB )% #'',,,,-.0/.--+..//)*./.+.+'#&#$$#""""  "##&(&&+,+($ !!! !" "$"$%*&&%#"#)+-.-+*0*/,,0-4/,)/*.()+'&)53.400++&-''))-)'*,--,*/,.)+(''('(%&'As€gRYT\TZPUSIC@AFKWQC2(&"%#18]ƒ«¼ÖÚëíðñîïíì»F!#%$%"$##$%%$%)('(((')'&"#&#!"""$$$&$$%%&%&$%$(.2ARSTPM$ ('&),-,)-0-/,+1-,--.-,-,-,*)&)'&*#$$%%##!" !"$#%''&%'$!!!!!!"#&$&'&&(2R@1*&" "'--/-+,,(+)).*,.)**(&&**+*).*++1,*,%+)**+-/*+.-0,,//-(,)*)(('!';ˆ¥¡†}„Št|jiol\PIU\`aTC0'$"% #$3V{·ÏçêëìðíìêÑb"""##"$$!"$&(($'(')()*('(""%%%##!"$&&$$&$%%'(&#'*,3CSRTY)"!%)&$)(*)***..++(*,-**,/.,,*,)+*-/*-)&(()&$&+($%&&$$$! !""!%&*)'((&$&*7.)%#" #).0,)**++)((/.)-)++'%$')*/+-,,aq@+,*,,,-/$  ($((++/,)%&'3‡­Â¶«²­žŸ”‰–ˆ‰re\nhl^L?,'##%# $(:Ga–°Óßçìðïîî߈,#!##!!%! $%%'&$$'&('*.+)(%$&%$!"!#$%%%$&%&''''&'''-3CPW]*($(''&'&)*)&*)+($&,))'&,-**-+.*))++((+))'('(((%%%#,7+*&""$&'%$&((&(&&$$"#"#$$##%++3,++(-,.,*,.23---)((+*(*-1.3›Á”:**/1,&!%!$*./*),.K—ÂÔÉËÈ»¸³Ÿ¯¥‡v{‚€q\F:0)%"%'&" !(6@Y—¾½Ýìððïîê°7$# !$"""$$$%%&%$#&$$')-.,)&$(%%"""%#$&%&&%(')(&&''')(1=SZ(*),+'%'&(%#'''(('')(%)'+,&$**(#*-(&),*'&&*&&%)#".PP/%#%&()'('$'&(''$#"$%###%$%'(.,/)+*),,26-+/3</38/,,.**+*),EĹ»~/&1&!  !##&$--+>n®ÝÞÚÛÖÊÆÂŽµ¨ ˜ŽŒlVB<1(& $'"$""#(7Gu‰§ÆæðìííìÍR#" !$%"%!&%"%#&%%%%'%$',/,-))'$$##! #%%%'(')&')'&''((*+0?R--,,-*$&('%%+)(('*&%%+,')(()('((*(')+))(&'&"%&'9R`E*('()),)'')%%')'&&)#$$&&###%(++--***,4;04678>DDMMC?6?5,+(**‚н«­|B3+#% #) %&&!%'!%4c’ÊçäÛÙØ×ÎÎÈú²¬£ˆ“ŒlRD:*(%#&'$&&""!%7LYl´Öçìíïêßc'$"!#%$##""%%$!#&&'&&%%')*+***(&$"!!"%$''),'(+,)&&('('',/7:/-,+(%%(&&'(('')(&'&&')&(%%%&)('&()(&%$$#$" &9VVE/&'%&)(()%'(%%'%'##&&%#$&($"!$',)))'&&)3D/40;@LOT_h_cWL8'*('T½ÃÀ³«¸©z@&#  $$!Hv²ÙååÙÙØÚÖÑÑÆÆ¿´ž‘™Œ}dMD4''$!&'$%""&/6K¿Øààäíçˆ*& ##""#$""!$%%'##&&'&))),'$!!#"#$&'')%'',*$%%&'%&++--./*('%(&&%#(%&((($%%%$#$%&&$#'&"$(%"""" !!$4CU@)&&%&$%&'(*%%%$%&$%$$'$##$$$""""'++)()'*)*/054FJ]\^rŒˆzqnA)''+‡·Âöµ½³™vH/$#"$! ".Q„ÂÔÖÖÖ×ÐÒÐÍÌÈÆÀµ›¦¢ŽfTC5*&% !&"""$"$'+7h°¹ÅÄÂåé¯5%$! #$#  "$##$#%$#%&'%%&%'$"  !#%%&(($$('(&$%$'&((,*,..-&('&$#&$!%%"$()%!#&#%$!#%##!"!""! ! $*7=*#&&%&&&&#&((%$$##$$###$%%##&! !#$")',+&'*+*/5<AO\t›§¯›™p8(%=w¸ÉÊ»¸µ»£XE*%%#%%,0N{œ­·ÃÆÆÅÇ¿¿ÈÂļ°§®œ–[{I/'&&"#%!#!#&#"%/J…‰™”¨Îê­5&&$"!""$" #$"" $$##%$%%&#"$$" ! #"#%$$%$&%(&%&%('&&+,.0/+%'*&$##!"##"$(*%$$$&%"""#!#$$"" !*1,'#$$&'$&'%&$('%$#$%$%$#$$$%%%#" "&$ '**(')+.69;IN[u“¤¨°«®¶¹¥†B'&@xÂÓκ»´¼·K(%(%#)) $%%&*%-<jLmœ­¶¶³·¹½Äµ¨µ£›ztM@/1'&' ##%%#'()"!!'=XfZZyÅã¢8$'$"$"#"!"!" !&$" %&&%$$&'$###!#!!#!!"#((&'$$'*''&&(($$*/14+%$$(%""" !"""%# !$$"# ""!##"! &)(&&'&%$'(%$##&$%###$"#"$$"##"$""" !&% %''&'**/AEL^pˆ“¤³¸½¼»¾¿½²`&%EÈÛÖü½¹°O" %,)))$$&"*('! &"8w‘£ ¥¬´¹«¡¬ª—ik?.((((""$$#$('$%$!#*8z}Cb³Ê˜3%"&$##!"$#! !! #%"!"%&$$%'&$$&# !##%"""%'#%'&$%'&&%%&'&%*002($'''%%#!(!!#""#! !##! ! !# %.+(&'('&&$'&$$#%&"#%!!"!##"#""$$#"! %'$$&('),2;LZk{‘«®¸¾ÅÈÍÎÉǼ¿&%H¢ÄÚÙÐÁ¾´h!" $).01**'#,$!-+$#!##"#Ohz‰’“§š™™¯Œ~e`R?-1/+&$$&%&((*(')*'()/3;I‹¡F)"&$%$$#!5.!%#"$%$"#%%&$&'''&'&&#$$%%$#%'&)(*&'&((*((')'*-.0'#%'&#$!!* !#"! !! !!#!! ! !# !(++'((('''%%%&*+-157663*(%-($# #! #$"+,)')19J\r‰ž±ÀÉÄËÐÖ×ÖÒÒÈ·•)'G ÃÔØÒÁº§5 !$&*+58/0'#*%)*,+**##('$$%!Q[]ejlwy|•“bhLVE9-R4)(%$((&),,)&)++')*/=cd+)$"##" !!)YO$$"!%#&%%$"#&'%&&&&&)*'&#%#'&&&',)&%'+(()+/('(),//#" """ !  !!!  #'**(&%(&&%$$'5:L^beqeYSH=5,')(%&#&&%%!+43'2 #$0+''(0Dhoƒ·¾ÈÓÖÕÕÚÆœ‹zyy\'#2‚¾Ò×Ë·ª’#!&&(/*/'&&***'%+,+*&-*$!""//5=S^Tr€^YGB@>0+-*(&#"%("$$)*&()))&*2>D!  #$"$7E( !!"$&$###!#$%%%&&%&'%'#" %&#%&%*$$#&'&&*/&$&(),+"! !!" "!"!"!!!!!! ! "(-((())($%(2ARr“¢§¡“‡‰‹ticC50,+)%$&%)'*''+,/6;DB:$*)%&('/Ljе»ÆÏ×áæãÓP3,()&#&#^©ÊÏ¿¨˜& &(*8e}~g)(-0*"('-*%&&" $ !):>HkOH@8?:5+*)($&&!$&"%%&'(*+/,&*2% !""####"'18,!#!  $$&%!#$! "$$#&%%$&((%"!%%#'%&'%&%%&$%(**(')))*#### #!##"#!""#"""! !!!! "$*/)+)+*),4>_ƒ£·Äº¹¬Ÿš£¤©ª›~dH?224-*-25:8;39<:*&&$"$&$#(('0Rp™®»ÁÈÓÝæçèÕE()()'$'$!M’­­™Šj$$%*1D´ÐÊÑÎÁ['%,.##'+.+(%! !*,>F.215640*,,.(((#&''''(&+,22.   "&&&%&&(&+6:-!$'$" #&'''%#%!""#%%%'&&),,+&#&&#&%(('''((&&((-.1+,*($"##" "###" ### "$" ! !"(.+*)+*7LošºÉÖãÚÔÌÀ¼¯°º¹»½¼±¦˜~gUOF=869GDLQSUWacYL?2.,)+"%''5Q}­¼ÅÐÙÚãÙ»¡Š5''%*)('((--!!#%-()*'(8ŒÖàäéêåËk+0820*. ++*&! #'&#%'+5611*)+-*&#!%'((''')*(%!#$&$$%&&)))/09=. $((% "&&&'&&&!##$#%%&$%((,,*&$""&$%''('((&$'()*-(--'" !!""""##!""#'##! #!%$%'$6z¾ÚééëìéêÙÓÎËÎËÎÒØÑÚÕÆ½³¬ŽvfbHcBDMAI[bdUYVNK>1-(&##*AX‚´½ÏØàÆ a>1,,%'(('((*("  $%()++!~·åééêéëà‘:(.$* ""& !1,$"!" !!#*,3/.)#%)'$$!#%$%('%$ !"&#!$%%(&+.0<C</'&'#" "##$&'%$#$$##$%%#$&((')*&!#'$%$'('(''')('%$('*'#"!"!!#### "##!  )+"!%2^™ÇÏÛßêîìêßßßÞÞãæãçâåØÉ¿¶¦ ‡vkŒYQNP[\ab_RLA58/+()!"(8\‡«ÃΫpLD<3($&&')(%&*+&%"$#$%)"•ÜÞêìéîÆÇͬT"(+ ,-) ,()"" ! !('/)(&"'&'&$" %"#&%"!!"#$ %$'(,+028C9,#$% ! ##"%&%#&'$"$""#%###&)+(*)""%$&%$&()(',)''$#&&$&%##""!!#""##"!"! !'*,(#%*4Ss’¬ÅÛÞÝàéçêèèíéæáÜÔÎÅÄ»¸¹¢—„wtnz€„xp}rnWMDG><895*()5V|¤º¾ZGD=5,($%((&*)',0('$((*%"2ßåíììÃI$B_oˆ\)+(,%(!' ,/)$$%"!#"$%'*)%%(((%&!!#"$$"  !!$%&'(*,01<@=+# !%&!!!##$%)%%%'&$"#!"#%$"%&'+-*,'%%"#&&'*.+)**))'()('(&$""#"#"#"#! !""%(.**+*'  !#+5F[€¢­ÆÙÜåèæéæäàÕÒÎÅÄÁÀ¸ª¤¨™šŸˆ–ž›—“ŠŠu^^`TNQ\R(#&3O_­ÁjJ@6+'"!%#%'&'(*+&)$&&!R×ìõâ‘*GI20"#!?6<E[paL:)&$" !""$'&$!&%'%$'$#!$#$&'(,18AA0' !" """ !###$%%$&&$#"#"%""#!&%%).+,('%"!#&&'(.,)*,)')(()+$##"#""#"!" #*-*)./-+-,*(""!&.;R¡ÂËÒÜÛááàÜØÓÒÏÎÌÃÁ¹·°ª²´ª³²µ²¯¨ª£š˜ƒz~‚2%$#+E_¢µ„J>3('#$)%%'+,*+& *(-Q_@S6+?f¢ÅÜÞͼ5'%&$"##(%&"#(*''''"!%2.-''$&$'(&.15JD5(!$" !!# !$#$"&%%%(&%%%#%#%$#&&*)(++,*,&%$'&()+*.0.,,--+,0$###""##" !!!(-.*,/.10/-,++(##   "&)7Po~“ª·¿ËÎÏÏÎÑÕÍÍÉÀ¾»¾½¿Â¸ÁÂÈÈÊÇÉÁý¹¹Ã¿¹J%&&%)2Tw‹Ÿ™I5&%&%"%%&+..,0'),$$B!$&4.!'/!N\gŠ®ÉÐØßã”*&&'%#%#%&'$$).*)%%%$"(4>BEJFF<8/,*)-,17GL7( !$" !" ""#$!'%%'(''$%%$$%%#$&+''))*+,,*%%#'(-.)/1//.01/.&$$##"#$""#$(*++-01/.2210.+,)(%!! "$,.6Me}Œž«´½ÃÈÆÇÊÈÀÁ¾Â¿ÆÐÉÖÛáÛÞÛßçãØÏÍÆ¨g(#)('&*<d‚S-$&&&#(&)*.002#!("';>563P^7(# $*#.)'&'"$An²ÛæéÒG))%&)(%%&(%&)-()+9Rgg\Yaaqfg^SF972875>=G=)!$!""#""# !#"#&#%%%%'((&$$%$%$#%&(%)+,'*--+'&$#'*,+02250520/$&%###!"!$()(,/+1100/++5/.+**)'$# ##''0BO_m|‹—ž°½»»ÂÃÅÂÆÅÉÑÙÛåèææçãâÞÕŽ·¦X%&%'&#'*)>t‡€]'#%###%%&+...'7WUID6S¦ÍÓ¸ŒV5')#(*"##=I`v…h@4¡ÓãÕG)'&&''%$#$%$$%%',:JZadgu†˜‘’z^UCB?G?>F=9+" "#! !#!" ""#&%%&$%&'('%$$#$%!#%%$)*'&(-*),+##'')).44216//0%%%## $$(+-.-0.00/0/*.4/0+)*+('(%"!#$)5DPWgz‡“™«¬¸¶³ºÁÅÇÐÕÞâÝàåáÞÜÚ×ÎÒ±8'&%%$&'%$(Bk`K)$"! "'&#'+/b³ÕÅ™_9N¿ééé׳}dhhA#4DOM<,5\^rÎÒǾ“(&/Jtˆ7)'$()&"# ""$#%-:FVh~‹šª­£”{lTTKOF>B8*"##! !"#"""!"$##"#'$$%&'(&###$"!#$##'&&)'((,--&&'&&%*031/3.-,'$#!#!'+,+/00.-/01-/-,.0.1,+(*+&')'$##$&/6=L_ru†§©³·¸ÆÎÎÙàèéèèèëéêêåâÙÓt&&)#%&&&%%&(7C2(!##!%'#"%#{ÖãæÓ ^P¬âêëêÛ©eH46Mˆ¸¿Á´}46PjœÊÜÝßæ¤!-)"7)*)''*'%!"#!&'-8Kgy”ª¯¶º¸·ªžŽ}kYMQM@<4 ""$!!!"!!!$###&$##$%$$$$&'&'#!$!"#$%%$$)&()'-+*'*(&%&*-/0/-+)+'"! "&))/.0././220..,../,---*--(&&(&$  $)*8:HNc~™¥¬¼ÉÐÔãâçééëíìêêèäãÜÈ9"%#"$"%$"#&$&-&##!#.fQbe9+°ÚØÔ›mgtÜëíñÃ8%VÒäÚáåËz2"3zÀæëêð5!*""$*'&&$#!""#'5?Wv•«µ»ÀÅù®¬žƒnfbYJ?4&###$#"! !!"!#""#%'####$%%'%&$"#" ""##$#&'(((,*)))($"#&())-*)(&&! $*(+.00001121/./0..10-//.,0,+)*))(%!! #+.33HXo†‹¬¿ÅÐÝâèêìîíííëèååßš)&&'%$%%$$%)&'*&$$$F„¥¤ŠwPRÕëã¹§žlvÚêØ›.(;31VšäééïîíЃ6"#! "wäëëêP+ (+*)''&$%!!#" "#+@Sl‘ª¼ÁÉÇËÍÆ»µ¥wpmbM7( #%%$#$$"!!#$#!$$%'$&(%%$$&&&&%$#""""$#$&&'(,,,-',.*&$%)'%()/*&$!$('*,/20..440/0/+..,,----+0.--+-+'+(%#"! !#(-6CUcr’²¿Ê×ãçëíïìííêèåãÕY'(''%%(&""%'&&)&(&7‘ÇÙ²qhãîëçÜžK2…x)*SWT>0V³éíðïîã®V0 oÁÚÍ9#'!&$#%%'! #  #';c…¤·ÁÆÐÔ×ÔÌÆ¹¯ €uk\A+)*#%&&"""!! ""$#'#$$"%$$%%%&%%%##"#"""#"%%$)$(,,,&),*)*&&#$)'('&#(*)(,/1/,.145110+*+,,++,,-../,.**(()'#&%#   #+8BTgޝ½ÃÜéééêëíëëêçäÆ8&&#%"$'' &%&(%()'ŽÒß¶ŒswosÃçëéÐV!)-W§¢…dF1) €ßæØÄ[@)%!B "!" !##6a’­ÀÊÓÓÚÜÖÓÉ»ª™‡z\H5(5TbC'&%##"!!!"$%$$""##%#"$#%%%$$%#""!"!!"$&&$*),*(*-.-,(&%#&$&&$ +),/432133236220+.0+)+./-./.110*+,-))(*'&#" "(1=He’¬¹Ïçäéìììîíì鿢+'&&&('(&"%'()((++(·ßÂ’~rqcErÝëë"<YS*!H±ÕͰ~\X($&DD4EShd`T8$-`C(+†#!"#';[«ÁËÖÖÙÛÚÔȽ«ž‹b:('@ÄÖn'&%%#"!"$%()$%'('&)'&$$&%'%'&#""$###$'$&+*,,,,00.---+("$''&$/++0630343146232-/,-,.0-.0//131*,./,(((''$%"  !",9J}Œ¶Çßæïíïíîïìêßu)&%+&&''&%%(&'(),*)—â¦hWYQ2oáïën<qzfZWF·Úçæá¿†:!(( @Wlu„_I8,0AR?++%!;6%, $"!"(:X‚¬ÁÊÔ×ÕÙÛÔʽ²¡‘{R/%(Q™ÕëÌQ%%'%#!#&'*'&('')(*+(('&&'')%$"$"#$"$%$$(,-./-0//0.0-*'"$$((10(/340131304122.*'./.+)//-./2.,*,-**)''$$&#" ! #03FX¢¿ÐßíîííìðïèÒM&!$%""$$$%%&%%')(+)?ºœ-5@,pèîæÑ¿€Z!‘âêïïî¿7#@j—¦¦¡”s',47:. <1% #%#%#3Q409&%9aˆ°ÀÉÖÛáÝÝÔʾ·¡ˆ`:)(2`«ÜæÝªM&%&!"%&&$'('$%&&''%%($%#&'$$%#!"""$%#$&&%(.*,/-.-..+'#%#%%41/54412/271110.,-*1.--/1/+,.0.-*,-,,''''%'$$$#!!!&3Dh›·Ïßïìëîììì¼4%%#&##&&('&%&')**..6Z#1¾ëêëìÌh$¢êïñìŸ/ -G<"%g±ÈÖÝàÏr,OjF/1XO/%&2Z†™”U3<^‚¥ÂÉÕÞãàÚÑÉø›rC,#,8c¯ÚÞÍÄ·`)%! "$')(+''%&%%*$&$##%%&&'&%$"!!%%%#%'&'**0-.,*0..,**)%$$341312/2-/4.0.,/--+./-)-/0,/-.,+*+-)($''*%&)'$$$  #4CkÄÔæéëìíîé˜&##$# "#&&#!!%($(,AOtzb(+HsÙíìå™6"qÚëé¶5,bfQB0""nÁçíïì³)g’‘os›œJ%4-_¹œT=^€§ÄËÑ×ÙÜÐÈÅÀµ˜V,*%,>{°Èʽ¹º«Y$ $$%#(($"#$%###&$#"$'&$%%$##" ##$!#%%((%*+**/.*,-,-*'$%71242/1111401002///110/00//0000*+*,,'('),*)++**($% '1PtªÁàèëïìïâi'%&&%!"&'$'%&')+B_†ŠubA-*9SHGÏìîÊG!1,2OywQ(Y††ŒŠwJ7$zæñóïÄ )xÀË¢¯Ñ½VH žƒZ{ºÃÍÓרÖÈÅÀ¯wC+'(.G«ºÀ¸¬¬©‰@$ %&*&'+($%$%'%'&('&&''%'&$$###$#%#%&&&('*++,0,*/0..0.+&7/400124-2400.2//./-/00/-..,+,*,('),&%%'-)))*((($$$""$0Dt¨¿Òáææê¾7'$%#%#"&&$&'((1AVtž­º¹»¨¨¥†mV:AÚïíŒ$$<.((.2E93‰®¸ÈÑÊ¢k(8µïñê•,£æçÏâåÉ2 „Ó˜In™·¾ÍØÙÛÖÉË¿Ÿ]0,$'8Fnœ¯´²¨¤ž—˜~+#%)((&$#$$#%$(&$&'%%&&%%%#""%$#$##%$#('%****,.---.0/+)6-//1101-011-+//.-/1/.,./0-*(*)*&&(($$$%(((()'('$$%%% 8-%I}­ÆÛæéì¦($##!!""%&&&,AE[t‘ºÅÊÕÍÍÒξ–r=++ÄíÓH#"#S06CIb]5"a³Öäìðïà„';}ÄÜ·M%+uèîééëä_1µ¡<Llš¿ÄÌÓØÚÙÑϸR)*!*8Hv¦·µ·²°«“œÌ¥=#&'&'$#$#$##&$$$###%'&%%%""! $"!!%#"$$%'''+,,**--/+,-6103115/-,2.-/0../00,0//1.,-,+-''(')(&(&)*')(+,(%&&&%Q±[$#8[–¹ÐßÞâg%%#$#"" $,0,8RmŸ·ÎÕÖÞÝÛßÞÉ™O-($mÉ‹8$.<TM+DgŒž‹MNÌëîòóòÙT)"A‡²¾—*+!-,$)6kåïÜàìàE !Zu.(6g„±ºÃÍÛÜÓÐêw@.(!(4Qˆ°¾ÀÄ»²¢‹Š»©A%'%'&&$$(*%%%&(&$$&')&&($&##%$$#&#$$%%(+)+(.+*...+-,51373340/1--/000010/121/-.-..+))**&(+++())-,)*+)(&&'?¹éñ݈*!!)8e¦ÉÎÔÑ@&&%$+&)"(-26=Oo“§¿ÏÖàåçäæêΑ;+'%#:OG&!o@&d•³Âž=%«ÙðòòóëšD96_‰B2 ).6GRlÌç–ºå¤B$! =+%&(Ox­¸ÁÏØÙÐÏÁ¥^37&")2Uƒª¾ÂÇËﱤ‰‚šg(&'&&'%%)(%*''(''''')''($'&&$"&&$%#&$$&*+)*10.-1//.,4214301.,2--/.///5+//1-+).),-+'((((')+)&%),++')*'%'/…ãïäÕÌŠ7 '=u­µÃÆ;(&$.62:7<769>Os‘©ÀÓÛàåèæìêÆ|4+'& CIH@…4"b¥Á¿e/žÓëòóïÝ—una]0 ,)'*aDxyhs‚6@S) !!"%#&$0u ¯¼ÉÌÑÕÌ»•N,0((*:mФ¿ÆÇÖÓÍĹ©ŒpW*!$$%%&$*&%''#%'&')&&&%&%$#$#%#$##"%$%)(*)*+/0-*+./.4651100.,101/.011/-/1-,-0/-*..-*(*..+((+.--./*'(('2g˜¯±—¢µ¿‰3 ! !"(H~›º²4,)FquUQRA::3BRl‰§ÀÑÚÝâåçìèÅ|7.+':\P9d*!4{’r*#AÁìòõòÕ£w›±ª¦F")20& !"'>‡–6!#&%%)'&##Jo•¬¾ËÔØÌ·~;'(+16Mz§°¿ÅÉÕÔÕÐɬnG*&&&%%+*)&(*')&&(*'%()-)(&%&&%%$%#$%(+/-++.///.0.-.7521/1-/,/1/0031///-.-,,+-.+.-*'----)(')+--+/)(&&,FmbWVgrvcQ6! !5ERˆ‹6,Lª§‘eNC4634FRc{®ÁÎÖÝãåèíã´i3-,/hdH2 –ˆ'!(.0/2EÇñóôñãÎ­ÅææÙ`#NKJ; $&,k¹Ÿ(%'''(''%",WŒ³ÀÈÏÔˤg+#*2BQz”­µ½ÁËÐÒÖÔÒËÀ´œwG/%$&&)*'%*-()&'('&%((+(&%$&&##$&%%&(&*,*++++-/--..96/43/./.320222101//.,/.,+.,-.+,-,,0.))-./.*-*),*,120,.0,,'')'" !"'4:PW30—º¡PF9;8:>K^p‰°½ÅÖàåæéïãœY3//WˆhL-'?ʼn,$!+9GL9RŽíòôóòðäéóóím,%4>#*#JŒ}9%*+?ªØ…,,),*')'$'<x®ÂÎПT&&.<Mu¡­¹»ÂÁÈÌÔÒÐÓÖϳ™uN/#''+)').-())-,(&+,)***)(%&$&'&$&%'(*++*+/.../10.3202..0//0./,0.//,)-0-,(+.+&*-/**+)*,++,/--****-)%%&$%%%$%%&&'%%!!"+.?D<KÂÉšrRTCJOACNQe¢²ÀÏÕØÝäîëÂQ8@–fK2*`á¯>*.EZWYD}B™åóòôôóóôóïk" HE/&3*%=¶Ìl1%+0>¬éÙe>A>850&&-/V™¶¼ÂÇ»™J$,8>Rˆ±±¾ÄÃÄÆÄËÉÎÑÔÕÐȸœ{V8)#%&+,*)()((('',((*-+&"#'$$&$$'$%(((')-,+,,,.0.22..0001.--11/-,.-+,-)+)+,%&(.,+0,('(./*+*++'&&$&%%%&%%&('$'(&%#$!!$&6B=rÛÓ¥y[K@?<79=DRlŠ¥¸ÆÒ×ÜßàæÜ½…]g¯Š^=,'€êÝnHMcY+5«[:¢ñóôôõôõóë{5.`]=791;Áè²B)%'/4@µêè•fdaZF=)(&+:n}¹¾´ƒ8#)@Tm”­°¾ÄÅÆÆÄÆÉÎÏÒÒØÙË·£[:'#*(&+)*)(*))'+('()*)$#$&%&#%&#$%&'&&'*)+.*+/,2/.012322//140/,....-.+.+(&()02..,)-+/..,,--))*&(('&&%&((&$((&&#$$$#$%',-7…ÄÑ¿žŠ_H=6754ALdˆ¤¹ÈÎÔÖÚÑÎű’{˜°zE..)…îðÉ‘‚r/0ijjrÖóõôìóöõé¶‚y}¨›TCILTÒðáfF',79NpÍë虑’Œu`C4))0Lr®¹©a,'(:d{ ®·ÁÁÄÆÆÅÈÒÏÎÕ×ÖÙÔǽª‹fD.(%'1/+),,./-.)((*--)#'*&&#%&%#&&(%&****+-/0212-/0/32111/0/-,---)+..,*)()*1,*,+*),/,/-.-**,()*('%&&&''&'&%%&"#%%$%*0..$+;š«–~fJ7--.5BLa€¦¯¶¾ÂÇÈËÆ¼­šp¬ÏD.++ZÜðïÕ’3"½í׸¾âÒ¸»îóóðêÛÏ ¾Ô¥=Q_‡ãñéj^X!-5Igޏãå»yˆ˜¯°©’vY2),8U~œ§h.'&&.a{¤³¿¿¿¿ÁÃÅÅÎÒÔÛßÛ×ÔÒÐÆ°y_6$+.-+*,+-***((&(--)$!%%&$%#&!$&&%&((*((/0//01,+.-/0./1,.,*++(*()'(&')*$(*')'%*()*-1,))))('''%$%%%$%(&%$#&#$%$#$$-494,%(A^mtiP8.&,7?Vi~•¢­µ¶½Å´¥…`Xºé¶j90/:m ¨Ž4“ïòòç±52²ðóóóòòî±Íìâb#]¡éë¼=N”J#Ck™À¦…n†•¢²´³°¡Šc:)*EVNB'$'&%'OwœµÁ½¿½¾À¾ÇÏÔØÚãÚרÒÒÏ˺¤–~D(')'(()+('&&'('''($ ##$%!""%$$%$'('&)-+*.30//2000-/+/0/.,,+)+)')*+-,,-,,&(+++-+..1+,,,-+()&&''%#()(%$&*%%%%%&(07=A:-"%26EFD=1*19@Oc{ˆ’šŸ¢©¦¡™ŠnSTÅïä¤pUJL:04P'"TÛòìÀH.Êóôõôôóñ´Üñð‘G¤D*;¯¥% #/F:R_‡ ¬¶¼¿´µª”_4(48/'#$(&'"QŠª¼¿ÀžÀÂÀÅÑØØØÞÙÝÜ×ÖÑØÐÄÀµª^')+-(+-*)+-))(()+)$#%$&%##$%&%#'(($'.,./0/.10,0.//*,,+-*,))+'&-).-&(*,( )-+*(*-/.).*-,*&((%$$%&'&(%&&'&#"$%(,4;AI<0&'*)/3*',/.5GYv}—’™“xnUDB¯ìîáÄJ 5.=['&! !)^Žp2(Áóôõõôôè¹êóð¬/!&()+A·à_ #*AZ{€ ´ººÀ¾¿·³ŽP.(+7<$$%&%$>™®»ÁÁÄÄÇÇÆÄÌ×ÝÝ×ÜâØÚÑÑØÔÍÓÊËÂj%')+',('-,&('(+,(&!%$"% "$''#%&(&$*,-////0-+*.--)+**(*)'&('((%-(&!'% !&))-*)(+,'*(*)('%(%$$%$%%()&$%####%+17?DF@0&!!'%''#%#*3CMPYTLMCJ>INAC£Öà¹[!":-Fl3*#"$,<B!+"! !wêóóôôê¿Âññë“&33--5@X¯ê¨" %7QrŽœ©°¹ÁÂÃÂÿ¼·‰K),,VŠA($%$*p³º¾ÁÅÎÐÕÕÌÐÓÙÛÚ××ÑÒÒ×ÔÐÉÎÉÊ×ÃW$&%$)(%%$#&%&**%& "#$!"##$!"%)&&&)*+4200/021/../-,--.,**-.-,/*,*)%%*.,,.0//--.-,,,-)('(''(''(*+*)'%%(').8?DOF@2+)" !$)(+)$()2<<JMC;2<8J`3')GJ-!1>2Y~?0(%*DW40($"#,•íòóè‹P¤èæ©\ 5GVduÍî×5#/Dq’£²¶¹½ÂÃÂÆÇÃĽ¯{>9<JŽÄ†,%%&G¯½½ÃÅÎÒÓÖØàÛßÜÖÐÍÍÎÑÔÖÔÉÅÅÅÐÏ¢8'))()-**&,++-,+,'##%$$&&#$#$$%(),.,,1////.00-...//--.,+*,..,-''%'(*,-/-0/-.30..-..-'&'*'()*''+)+)'%%'(-3=DHL?7.-($#""#%$##%%(.)15:=<=0/,(/1$!! ! @@3l—V;1/D_Q$%22'%$'4šÚÔ„*&6ng7I" "0Y‡­ÊëíÖ7#-Asž·½ÁÆÉÈžÀÄÂÆ¼²žgF[|œÀÝo$(&(v²·ÂÉÉÑÓÓ×àÜáÞÓÒÊÆÉÈÌÑÐÏÏÆÁÇÄÆ€,+-**,,,,,-,0+)+)&!&%$&&%#!%%'&)-.++10-./,*-,-,*,.,+)-*++,-'*'!"%()*,0..--000-,/-.+)(((*()%','&(&&$$*19CHNJ<2/.''##%&'&$%" #*),1/+(####$# "&$"M:0w¿ŠdR^qf*%*9@,-()4Jg„<(&''*.W, $%'6áéÙ„'$+A–²ÀÉÌÐÊÅ¿ºº·µ¤{>Lv©¼Ì;H%&":ЧµÆÌËÊÏÒÚ×àáâßÕÈÄÃÂÄÃÍÎÉÆÅËѶb*+.+(,,/,++.,*()($%%$%%$"#$'%'(,*.12-..-+,,-**,-**.,+/+'+$"$',++--//.1-./,/+*-+*''')'(*+,)%'($$$*4@IMPD6.0,+*'$&''&&''%&Q‚ˆ­‰eRI@?GHVehx`9-%"5b2/cßϸªµ¥>')5OW9>;>Mf~~.-)+*,8h3%(&()C©]<..1If‰ª¾Éżµ²­Ÿ‘ŒJ.'3†˜ËÙÚÇy0)%%Bƒ¢¼ÌÎÌÐÔÞÛÜÙßÛÔÒÐǾº±´¸ÅÍÍÐÔÀ§L(+*,*)+-.-+,,(+%##''%$"$%&%$&'+,*1./..-,,+/(,,+)(,.-+(&*!"!&,/,,.,02/..0,.,,(-(('&&*+++),)'&%%%(-8DKNJ>7-/,.)()&$$''&&%X’¿ÓÛÌþ¼¿»»»µ±§ŠdC4% F|8-NÚñîìè–/,8O\aWY\cw“«o974-/6Iƒ6()()+PÁ:!$)S0<KVm{Œ~rvolR=<*&%)n§°ÞÞÜÎF.&%%=p¡ÀÐÕÒÕÝÕØÖÕÔÐÎÊÉž³©§²ÀÈÙÎÀ½ž<&,0+(),-,(,/*+%$%&&#$&%'$$%%()&.-0//../.,(((*,)++-(%# ! #+,,,0/.20//0/*--0,,(*)&%(*+)(+'&&%&',2?FJNE98,/.,,**'%&&'&)K™ÄáèâÝÔÌÐÍÇÉĵ°ª‚`H3)"n“Q?A·òòòÐnFH\v=V‡‚Š–²Ë½UFAC=AMhªD-+++2_ÓS$))†-/<BFUMD7=;2'&'&$(k©¥ÈèäÜÓ™M0'$$4i©ÃÎÒÕÔÐÐÎÌÎÍÍÌÎÉ¿¸±©¤¢²ÎÏÉÁ¿z-+,.*)++*+-,+)(&!#$'&%&#&%$&#%'*../-/0//*()&(-0,+,&(" !,,3200312222-0/.+-/---+(-,(*+..''''))-5@ORL?97,-+-1-+''%&~ÃãîîìãßÞÚ×ÐÍÆÃ»£‡hH4.-’¶„iYl½ïÏšˆŠ‘ l:´ÌÑÚêí‰3ce[_hv¦Ñ^K=79I|ß}#-=­S'$%+./('**%!$&'-Jb©Ê×ëìãÍ›N4*" /b’¶Í×ÖÐÆÇÃÂÂÈÇÆÃ¾¸±²·ª¡«µº»½§W((,,)-*,,.-,)'*'&()'%$$%%%%'&'(0-,-*.*+*%%$*+,)+*# *.0-+-1..00-/-,*'+/,*+)+,-+'*++$%$&&(/;BNSH:50.-)+,)(&$%#!$FÑåììëäåæãÛ×ÑÌŹ­˜nH9+,ŸÔ·Ÿ”‰¥æÞÊËÓØ´+’íñðòÇB,j›š–°ÔÔAf„{‚´æ$8U¿}! #&"#$#''&'+GMZp°ÔäëêÝÆ¡U5)"!"%>†ÀÑÜÒÆÆÁ¹·¹µ³·²³´±¯­«©¯£›——r+(''*,+.)-,0'&*&'&'##$#$%%&&&&.-,.*-***(**+--))($$&,//-*./,/1//0-,**,0---.,,/,+,,($%%$'+4=DKKG=3-+,/.+%%%$#)L„ÏâééìçéæåÜÝÒÉ÷³‘rXA/-«éãÕØÐÕÖíñîìÅV XÓòñÛg2<‚¶ÑØ×æîÂ)%¾ËÙäëŽ:AVrÒ¡ #*(&,(.///;`mr¬ÂÔæéäÝœb>C% !!!I޹ÕÐÊÆÀ¹´°§ ¦¢Ÿ®¯±±«º¤€stj7%().0.+,+--*))'$$''#$##%&#%%%$0.,-..-+,.0///,-*%!%,.1012/0103651./-+-*/.0/0//200/,+((&&(.6ADGJD80*+*-.*%%$" !(N•ÇæêêîêïêæäåÙÊþ­“wZ@1>ÈíññðïØ´äðç¤= (l•ɺrKGv²€´îñðï”2$4½íìíã‰zwežáÄ-"$-12352;8AHTq€¥½àæìîëཋ\FH%! #$#$&<p­àØÓ¼¹°§—™‹†–¥¬­©•jSRWC',..-./0..,,*/+(%!"&&%%&)%%%&'&-*,,++*+,.+*.+&'""!(++,-10/010440.--+)*+,-,,/,-0.-(&'$$%')/=DEFB:20)+(')&&$" /x¶×éíêêíçèçåÙÑ̦eQ3;Êëìïíåд£d&*޹® ‚gm„Á×VJ¶íêÃF5($+b¤»±˜ºÉÓàåÄ6#(,35;?;DHTZs~“½ÉæíðîëÞÁ•c>1(" #"#$%%" .In~}‡yqwic`[^_gfeVA60.0),**(*/-.,+'+)((&"!&&$"""$$%%/+*()-/.,-,*.,+&#$'-/2-.0/114342.-*++)'+*.-..,/./-)''$$%&*1=DKKB810)(())%%$!! #EÆçïìëéêêèåßÚÕÀ¸ª‹{E/4¸ëêíêæÈ¡}Y+!$~ÉËÍÍ·Ÿ©ÌèÁNSÕU72*%##"&4JzŸÄľr'%&(16?HHPR\j‡—­ÊÜêêíëíßÛjD7/&!#&$&&&$$%$$$&#$'.)*))),...**%'+)+-,/-.-,/.,-+*()#!&&%" !"$"#.,*,(--..-*//+,!#&,/2-.010/00362./-+,+(**/.1..0..,*))%%&(.3?FMJ@9//,*0&%&%$ # !+x¹ßéëìéêìäçäáÙÇ¿¬¢j5,5¢æììçÅ£sG) pÓØÙÞæäÙáíì’c|ÈÆjO7,&&$! !!!"%083$&*(,6;GLR\^p~—³ÀÓìíìïìîܽ’pQ>5)" !"&$'')(&(%)((&%#())&++)*++/,)+../-*/,..+//.*--,)'&&&&&"!"""#.-*///,/-,/-,.-""! $$,041,-21100230.2/--)+,*+.20-,-/,+-*-'$)+.5>GHC960/-.('%%&#"%!!&X›ÏáêèèìëçêêâßÎĽS20;’Í××qS,#! [Õáäãäçìðòð× ›½ç³gH7+%&" "! !'&%##(/39@BT]e_sy”§ÂÏÞëîòððïܽŽ{cM8,*"! $$'*+)'(',)+'('))*+.*)-/+---//./.-2--/1-0/-...0+'"%&%#!""!#//,.000/.,..7+)(-***1/232.14/102/0/.0/+.++-,-/0.+0./*++(,'&.409@KIA830.-+&'%'%" "#" !!3`´ÓáäçêíèéæÞÚÒο’eK/>‹²‚bA2'$"!RÒççèêäãäëíìâÒÚëæ¢zW@1&$!##  ''%'),,8GHGTg{wˆ™¨¼ÊÙåìîôìíæØÅ«}XT>80("!$'+&*'%'*,/-+)%,))*++./,--./-//--0.//0,-/22,..-+%$#'%$#!!"".++,+-/1,,,3/(0*$#(*11/.0-.133,.0-/,+*+.*,.-.,+0-/.,)0*%*%'-14>FGH@5/..-)%$#&& "!!#-TšÍÖâççìéèåâßÙʰŠf@R†jNF/$"!GÀßæêìèæçèææçêííîÕ©‡[M4'$"$""!!#))**)36DXTfqrŠ™°½ÉÚÞçíïðñìá×ǧ`[E9/.& #%%%*($$,-.-(()*'&*((,.,.--./1..,.-,),,---0-.-(*'"$'(&%"!"#-*1.+,)11+(/1&/)$+./20.///220,-1-+++,*+(..+,-.-,---*+.*+$'*0:?GEA;32//*&&&&$# !" $>‰¾ÍßéèïéëçÝàØÊµ©¥—ane?@1!DºÝäêíêæäèçæââäãìáɱŒ^O4'%$$$%&!''(/42?DPcg{}|¬¸ÈÍÓáèííîòòêÝÑÆ¥’{YL:40'&!!"'%$'''++-/,*(()&&'(*-.0,0-..-/+-*,*+---*.--.*(*&"%+,'# ! ./201-.2./2470$) !'+14412443321-.1//.+...)-//046-0/./*).+*(*,2;=EE?83310,)'&&%%$%&$$# %9y´Æ×âçîæÜÜåà×ÍÆÁµŸZko1)"6¥ßàêíìèåèìçæâáÝÐØËÁ¦„dS5'$"#)/0+15559>JVajz€Œ›¤°Ã×ÜèéîòôòõóîåÎÀ°œŒldPA5.1%!()'*+**+---)+),*)+,)-..-10,,21+-,//..10-/-/2-+.+(",/3,&## .,,+.+,+.6)-2 '*+-/1///3//0.'*./-*)*,-)+0/,-..-*+)))'%(&(,3:@B?>6..++)$%%%$#!"#$# #5€¬²ÀÌØäÝÙÜßÚÒÐɾ·ˆKP§4 >†¼ØÚêëçåáàßßÔÓÍÌÅÆ¿²¢bF6)#I+09<:>A<<HW[c~‚•¢¹ÅÅÏÞåìíîòñóòîîãѬš‹m^N<72'"#%'$%(%''-(##&)'%')'(*+..,+--,-+---(-*-,++-,,*'$+265,%#!./-+,01,48*&' #(-100..13/-030*,*/-,,-,+,,/0.0,.,*+(*+)%*(+/2<GA<:7/,*)*&%$&##$%!$$!!! ";‚™¢¶¾ÊÏÑÖ×ÕÏÏÐÆ½¥fOO½d&,5?F4Z‰¹ÌÕãçãàØÕÎÎÅÁ¾½µ±¯›“u]?1(5iKPNNRRGOTh}~“©®»ÁÈ×âæèèìòêòîïñêëáÖÊ°ŽŠzzdLC=70" #('$$('(%()%&')&&*)+(**-----,+//-,.,-+-/-*-,+*,'#"/28?7,&#/0-.*06164,+$(-/024..250//101.*,,/...-.--3/2...--,---'++004:AA@;50.()(,&$$#&'%$('$"!!%?\f§±¿½ÇÏÈÉËÊÈÀ¤ŠhyWº¨…¢³›U7`‚­»ËÞßÚÔÃÉ»¸¬¦¢žŸ˜•‘‚fbU4$T›Œjhfhfvu{tvŠŸ³ºÉËÔÞåéîíîïðìñòìñíéêÚÌ»œ}nhWEE==*"!"%')&%(*')+(()*(&))-*-**.-,*)-00.--10,./,.0,+,-*&1&019E@2+&-001335:<2,)((.//0100.000,,11.0,(+0.-.011/0-1,/.**-0//(,,058<B>932.-)'('%&##'*&#$$"!" +IKf„›¥­°¨§®µµº¸¨–‹‚„]—ÆÓ¨d068Ph—µ¿ÆÀ¶©«¡ŠtqnmwowpmupA0†¦l|ŠŒ•š¥š¢«¶ÁÊÝâîîïðñïðîîîðòïóðëìßϾ«impMCAD2( "%*'$'+'*()++(+)&+*%+),.,,+*/,,01.-0.../10/-+,-(*-068<A:1(-2,219?78+(+%(/4....0./-101--,,-(,//-.020/.00+--**.-.1+,,177:D<;2-,,(&&%'&$!(+%$'*&#!!,HTu‹Œ–›‚r€ƒ•ˆœŠ‚…kdX‡§o=/-6CGQhr‰’›—zwoitnscw~fTB<AC;W£§nd“ª¥¢¯ºÅÅÉÑÖßíîóíïðïíïðíîððññíäéæÜɯ—†qmmZDGC53%!$'%&'.)*(*(%''+&'&%*-,-...../...---,-/.+..,,,0--/38;=>94+,0568=?43.&$!',02200-00121/03--*,,.-01.//1201100.-....,-.//27;=94:1-*/'))&%%#")))()(%$##5OgyŠ‚sbIHKELOsmUPA>?AGA8-2Q•YDEM_nv|{}vˆ¥ª©œÂ·i7.*,++z²¤‹qVn¤¶µ¸ÎÜçæãéèìïòïðïîïïòêéîñîìíêèèå×¾§u^cWQMBE:' #%%(&&+-,)'%)*'&%*,(*-.1,./-,.-/--//,0.-0.01/10026:A??;72..497;C7>,%&'-/32/11/44220//0.0,-/.//23..-200//0/...-/-//./59:=97530-,(+*+($#%0/+(*'&''*F[o|q`B6,#+&'*,7<4.+(*-52+0`§¯fTq€…—¥«ª¡…¡¸¼Â»¸Ô¨A3./1*=£¹›†oSXi¦ÏÔäññìíîïîïðóñììíîïîëéíîïííììæáÏ´žs_SOJRCC7*# %&)'&+.+)(&)*($)*('-.-2--.--,.//-2//0/11.1021237:@@@>94.///6958//*..,0110033552/30./-0/+//01/1./01.-/.0--,.1+-/03/7;<9:352/**+*&&'%"&,.-**)$)2:UjijP=0."!!"!!&,,-7g¨ª©‰¡·¶«µ±·´´´¼ÆÇÏÆÎÑf231/-&aµ»žuWRM_³äîñïíîìðíëèéåÞØÖÔÛäÝÕÕÝêêæêíéåâι”mVKENMC5'% "%*''*)()(((''(*)%'.//-0-...././,10//.1222011136<B?>A93+.*%+($)&$"+.320/.0110241/-.33/---+0./.3..,-//./.*+,.).///489:9:21/--,'%$($#&-,*(%'%,9ZheW?73(!$@D7,%*=E[|œ°©§—«´³·¿½ÂÂÂÆËÔØßÔ׎.--.),%†º»£t_VNKO¬çéééåÜÏËÉĽ¸°£šš›£¯¹·¹ÂÏÚäíêéçäÙ»”kN=CLM9*"#!$(*&((*'%()'&((())+-,..,,-/.--*0,+-,//--///1.4=>@CA9/' !$#&+../20/./1-0.23/0/4//0/-.0-12,)-./-..,+,-+/00017=AB=772./,)&%(($#!(.+'&%#+2Lp`H>3*(" 5’ªœ|^‹Ÿ…nq”¤©²•¯½¾¼ÁÄËËÉÕßáäâÓ8/-*)*'>­À¹¡‰wgXTWE7nª¯·­¦—|srlj`ZTHLP[›Ÿ– ´ËÜäêìéä׺Œa=<G>B4-%!#&($+''('*)'%+&'(*+,.-.0,,+,,,-.++-+/,+)-..2/38@BD?3.)  '/46022100/1202222011.01/02/20--1/,-/.---.,021587>BC;541-/,)')()%!"+,*'$$'0Ni\HB<." "#""$$""(jvdV…‰hY\jyªˆ¸ÂÆÈËÒØãÞäéëèå´F-..)))%`½Á¯˜ƒuo[a\F0?dbk‚xhfdZaYKA:44**:T[Naj„¯ÖàèêëáÕµaA<=A@,#" "$&#)+%%')*)%,)$*+*00-//,.,/./.-.0-*-,.,--/0035>BC4--($$#$#-00531132321110/12011..52.052102120-//00,,20057=9?CA84542/,*(*+(& (-*(*&(6QujPF2%" "$&$$#$""""=KFECUTKLR_p”¡’»ÁÅÉÎÛåéåììëëÏ_40-+*-*(ŠÈÁ¥wrhabcG4Trfdhbinrok_ZKB;83*-))-5:CO€´ÒáíèäÓ¿œlG;E>2'" !%*$*+)&#),(&*)&*-*20//1./-00/,/10,./.-.1./..01598/0-'"",033122243203.0002311441334/33530.120..2/./633777:D@@9442-,-.)+*+&.,+(&&4XrrUA3#"###&$##$"#"&(2/08=?BL^w’˜”¼ÇÉÅÍßêìçíîíæ‰1./)+,,)5ªÈ»¢‰lvsbmgG@et|oXQ[bjVA;;>?9;:0,""$#&*.L‹¾ÜççåÕŤmD:>5+)# #())%+''((-(*+))./000//.0+--0..././0/021/11.,2/130,(('.242/0255001300/02/101341472052.//.230//.0242647<AD@>6323/,.-'(++$$.,'%'1UwbW7& !"$$&#%%%%%### !"##+/79?HX„šŒ¸ÅÈËÏÙëîéëîîÆ?.,-*-+*&V½À² „sƒuihaE^v{ƒrZ[friTI;:>3//-+2E*!%':T›ËßëêÞͯxC76.+'#!*))%*(')++'(('*)-.12/..+/..0,/-.121-000.1/1//*,-,(%& "&%#!),/3451335351575226711244334784012001015611145536;;>AA?<555340//+,+(!++-+-,Dhb@/"!$%%'((%%&&'%$%%"!##"$*575BUx•œŠ¹ÉÍÒÔÞëíñíïßq//+-,.+)%{ÄÀ­™†…‰pifTK„‰‰sakvscbSGIK7/5:4BTA! !#'5j·ØééåÕ´…WA5.+!"(),--*),/,**++,-,22202210/-215031/331.1250430*)))(%'&!"""+01411/21221045251153213453453.10/101..0230.034269<=;@:;62132-,--*& #-))+07RE3(!%%&&)'&$&&%%&$$$!!"'"!&653BPuœ‘»ËÏÔÛæìðííé§5...0.,*'-šÅ½¤‘†‰‰ml`Ke†‰Œ{usqd^MIPG708:4Yb* " (IˆÂßêåÖÁ™bD6,# ""%)))*)'*++)')++-/10/111/--001201/00--212012/.*&&%&* #++-6141022101024317235417452323100000-/-/./4/,03536;;<:>;;51222,,+,)"!*('&#*5:% #'&$%))'&%'%#&($$#""$$! #138ARy”¤£¿ÎÐÒÝåéìëêÕS./0.-.+)'<«Å¸žˆ‰…‰xf[N~ƒŽ•ˆ‚ƒpcZJLYB87:57T:')+%%$!!!#MŸÔæíÞË©pG8*&#"$*'())(-)'),((,0020,00//01./40//0/.2.//1/020-*&%'')!'...545014472/066528555018430340010002/00/252/238623>@@:>8611332/-,**,'%%&'-'% !%''&&&(*'&('%$&(%%###!"!!&+.@DU{”§©ÅÎÓÙèìêéïê™3.+.,(*),'Y´Â³‡‹vhY`†…›—…‹ytmUR^\H<5AFJ0$+).)*+*'"% ,h¹ÜçßÒ¶ˆQ9+#%#('+-()+(%*-)(-0/01210./211/42/0../3..020.00/'&%(()!&(-1/324222743222217742244443241000/00/1/33243/0246327@?:=<520043/.-.)'!()%&,/%$!#'('&(,**,&('&%%%&%%$$!#"!!#+2?AO|ž®«ÀÌÒÝæëìîïàd.+*-)'*)-,{½Á®™ˆ“‹xoU{•Ÿ–…Ž›qrfS\iZH=3D`W/*+)/0.-.***'#!  !<€ËâæÖÀšlK4("#')*'%))+))*+-,.121./220/00010//3/.-022/.01.,&##&)%*0,/1522313560133.0664101744303/-/-00+.3231235-//3342;@==993/1-/21.,/+"!)%#5M2#"#%(&('&,+++*'''%$+(%$%#$#" !,;DBM€¡µ°ÀÍÔÞáÝèïì¹7)+++'&)+-7ŸÈ­”‰•“‰ye`™¢ž“˜™žŒup\Na]LKE3Kb:&(((./-*++.-)'%#$!'YÑÞ×ͯ…X2$!%(%')*+**+'++*-..0.*/1//.00/0021.-/.-2-*...-&#!"%-0/02131231.164/01/2581132552233/+.0-,..20/111.'222643=?>>85141/+,/0.,' ))#%UL$$&%$&))''*('*('&%%#O/#$%$ !"%$!+JLHX­·µ¿ÑÔÝâÚåïár)$)*))&**,I¸È½¨“š‘Š|\z—›«˜‘¤©œ’xiWYdQEMJD_J)((((,*++/++/+(*'*$# !R³ÍãÛ–_1%#&&((*'++'')./,+..,-.././../132..1--/-----*(&" ,104102/2322/23/00/1022.1450022/.-/0-)/..01.-*$,1454929>=:85530.,,++.,%!&'$#S4"&&&(''&()'*&+'&%&&.9O'%##!"!#"!-HXc{¢¸ÁºÅÏÒÚàåàæÇ7'()((&)))&kÃÆº¦’–˜—Žsa‘¤¨•—¦­•”vl`eeYSIKWV/'*)'),-,.*(*/,))**&'$$#(f¿ãÝʬy5& ###'&)*('(*-**../-,.00..30.201-,---/++./.*)&#! -0.104221401303214/22051344000/,.1..,+0,/0-.)'+0414589:?<9415100/++,,-+"##2#'$%*'%+(%&*)(()+)'&&(DW¥R&#$ "%$!&4KYeƒ§ºÃÂÇËÑÚÜÝÝØŒ()'*)(*-,'&‹ÊÇ¸š•›—˜…`yš©¥”¢±¦—ŠujieXZ^KR_:((($&--*-.*.)*-,+)))*'($#";„¶×ÝÅP* #&'),+&(++,+.,.0./10.-2./1/.1/,*+/-++...+'%#!/04148342430305633/5646354233/..///-+--,0//*%%.14555;;>;984243242.,-.--&"'#%*+.,),**(*+)*,,,*''-i«½N&$" !'&$(>Uo|—³ÀÇÃÃÍÖÙ×ÖÜÆQ++'*,,,.*&0¨Ê°™ž ™•|f™ £­Ÿžµ·©™qnvaSSTJZG)+**$&*,,*-/0+.0/)+---++(()$ !";‘ÈÛаY&!#())-)&'*..-000/022/.0/.2201-.///-/+-/0-*'&"3493577833554379775573768720331/2/231/14./,,.(+14656?>?=77:303652/,//00-$#%*,02//-/.-+,,*,--00*'aÙâ«*&%%! ('(,H[z‘ª¾ÅËÆÂÌÚÖÔÔÎ5-,+-.,.,&#B·Å¿ª ¢š‘v‡¤¦µ°¨³É¾®šˆzcWLIXR*)+./+*+.4...1020--/0.,-.,+)+*&" ([¯Ï×µm1$#)(+-.+).010/120311201025343342310010//0(($046633766514652267734348601/060-0/-/0-113-&!),0356<B>>872/110100)+21/,*,-*1,////,,+,*.*,)*./-'']àço&%$#!$$(3Plž·ÁÂÄÅ¾ËØÑÌ˼e*./,.-+-($#X¼Å½¬ž £¤‘w£¯´¶¬´½Ê¼ª—ŽŠ|l\ITZ0))**+'*&+4///.00-1.-/-/-*,-*'))%&"%9jŸÁ¼X<0#$%(-++)0/-.0/00//14/00.023//0/-.//,22/,(!213352226234676566736475411136332/211.0/4+$$)2336:=B?;96210311//-.10/+-,0.201/0,*--:,,-*./-/-*(qçßK)%%%##$)9_ƒ¢¸Åÿ½»ËÒÆ¿·D-.../0.,$$&sÁƹ¬ŸŸ¥ŸŠŽ³¹¹µ®ÀÈ÷¨•““teNQnG)+-.*+(*).330*0220/,//,-..,+)*+*'))*$&=w˜”˜–[#"$'+*,/.0..321002220/144.-03/.-.000/..*#511/15200/4754564534334333101532013/1-3-(#)0278;;>A?452520//.,-+/0/--.2./-131-++.‹,*+)./.,*&)‡èË4'&%%#"$1Gx²Á̺ľ¼ÆÈ¼¥šz4,/0-./-'#&-–Ŷ© ¢§š‡§À¾¿»ÁË̾²žš›ldTLjf,+(--++(&+.0/.+/10/.-0/,-.,+*)+-+'(*+,(#)8?Kua--'%'&,&-/,120/12//100021-/010/.-/00+,--(864013423256635986346243653226004331520,,(-256:;@>>>6832/-020.//.//../0.00162/,*,0-),//10/-*6²éµ,''&&$ '?Zšµ¸ÄÍÀ¹Ä¶¸Â¾›‚rS220.-10)#&'=©È¿µ¨­±¬˜–¼ÇÇÃÆÎÓɼ­—š™^VPl‚A+*(-(*.+++105400311./00//0-./,+,,./-0./(%$#<Iz`2(!(,+()+1220/21303302420/2264.-0/..-/22+996773278779:476648;64645442523.244601,'& +1557<?D?<<89650134///00/0/-/1012684/-.1/--10/01/2,DÏì‘(&&&'&#$/Nw¨¿¹¾Â¼°¼­­¸¤m^Q0040150(%&('R¾Ê¸®´¶°“ªÆÌÑÌÑÕÕËÀ°›™Ž~dRn—Y+,,-/,++,-),250023243/12/111/00-,./000,...*("'/#%$')*,*++-12205231730552115335.1//0.-./1.3423403334363331554754211/0//-.+.-/2/,'(,236=?<:9953510/./+./0...+,,--0-.00.-(-/,+-*,.,.0)GØâp'%$%&% !5Z’³½¸²´³¦¹¥¥}PD8',+-.-'##&&$f¾ÇÁ¸²¹º­›½ÌÔÑÎÕÖÖʶ²¢’l]_™4-+)(*)(#$)(%.1.-.314/-.00-**..+*+',-,,----+)*("#$+&''*%'$)+.//11.02002032/3/1/..+//,*+-/,:63334864236731699557:512/210/2//3//.+'!&)08659<=<987660/10-./41/.../+-.//,.//-'-/.----0.0/+càÕZ&&&%'%"#Ar¢ºº¯¦¦£š· “xO;3(*-,-.)%#&%'*ÀÆÂ»½À¾¨¯ÌÔ×ÖÖÞ×ÓÄ·²˜ƒx\h“¥G/0..+.))+***)/2/003470/2213.00.+*-*),.//.+.//-''&*&'*('('%/,..232/14500.150.210.,./.-,/0/-:83866:;649862759;66863413134563093.,'))  +068<<;>;<;9834221123251./20/0./1/.01./--...../.212+ŠåÈD',(%&&$(Y•¶·°œ”›”‚¦|kF.&$'0--//%"#&()4ŸÄËÅ»ÄÅ¿­Â×Ù×Úßà×Ðþ¦‡wfŒ²h01133,*-/0*+...012226762036423/2..,.,020121.10/-++.*++)),*(-+01341233635541143457/.//.--/105323345658662063474330/1.0--.4-..-,'! (026:=;<96664/32/-210/-*+0.,./.,.+,--,,*.+'.-..,0-/+˜ã»9&&'%%&#+q¬¹±›…ptmp“]O4&!"*+-0-' $&&(A±ÇÈÄÅÄżºÍØÙÙßàÝ×ÊľŸ•Žxµˆ+-0--,(+,),'*'&(--/013420-/./-,/.,,),,-+.*,0-+,,+,$)'&%$$#)!$,,.,1244412301.//02-.+*/*(*,*,-8623445:887:663675331222////03..0/(*"%.4279<;<99523/.0.000/./../.,.-,,..-01,,+.-,.-/.2/.00¦á¡0(&'&%$"3Œ¯²¦{_W\PmI8)!"%(*-.-*"%(%'U¹ÉËÅÊÈÆ¾Ç×ÝÜàâßÝÑÇÄ·¥“‘¹¡:+-1.-+*./--**'((..043462210000/-//0--,,-0/.0-+/-,.'(+'&'(($&'+/-.21435463100200101-,0,.,++--4556647779;97784542424402011111+..&!.0649:<;;=<4231.//101..21/-/00/2-/-,100--,/-..1/040/@ÃÝx*)'*&(&$=Ÿ¦œ„YDLGHaX6(# "%,//*OG#%&''(uÂËÏÏÓÌÈÈÔÚÝÝàßâÝÊÇÁ±¨Ÿ–¹ÂS+,,//0-,../.+*#$$/01346545612/21.0...0.,,0130,.2/-('*-()%(*%&$'.3122216622//21..230//..1-+10,327465436:717;;23210223.2/1//10,-"&.124;::9<9953100.0000/00///-,+//-0,-+---,-+,..30.1/.XÏÔ\'(&*('(#9¢”„dA5B>=N:%" !*0+&(T?#&&'(.ÇÐÓÖÛÐÈÑÓÙÙÞãâß×Êɾ­¤¢¶ºZ+*-.///.-.,-//.)$!+1/11843/31//./31--,--.+--/.,--0*''))()$$&*)&++/1653133121/42./24//././/-///5167455:6535698342210130021-//2., %*.257<;?>;:53300-.0,1...0/.-+)-1,-31../.-,,*+/-11.0.-mÖÇK+)()*()#,ŠfW73>63@+#',+('"!$&&')/£ÍÐÕÚ×ÌÌÑÕØ×ÛäêåÛÖȵ£¦¹Æl(,-,-0/.,-....1/*('(./31441121/00100-//-+,,/.,),.,')+**'&($&)+*++,-142/25433403..005/.02,,-/.-,855258777:868;:72350213133//331",-05;9;<B=:<8600.1.3300-.1.0-+)-/.+/0...//0*++,0.010*,ذ<*+).,)'#-vaTD/050--$(-.,'!$&&&))L´ÑÔÖÙÖÏÏÒÕÔÑÑãîèÝÖ¾¨Ÿ¶Åˆ0+--,/.1.-,*/--/1.'(.10215645110/1.,/1/,/)01///-,/,,++'-))%&(+-/1/,*030125246203200./2...**//-,-876347:788899;7884555331261341, "#+/54=<;??<:688211743310202/053,./0/0-01-/.0103//1///16¢Ò–3-,,.-)*$+UJI9*.2,1*$ #0:7/$%'*)(,*b¿Ó×ÖÓÔÒÒÑÑÎÉÔçíèÛÈ«Ÿ«½ˆ5../0.1201./-0.3-31,+1223366:621/33-/111/1/0241300-///.*-+*))+03243,.431547227633513334301/-01/+07885559:8659::638744474214230, (-367>;A?>875854551/123/./1003001.--/,//0.-.1211431/3/H¯Ëz-.--,-*)%(?B=.)-1-1%$!#.QW:)#'))**-(}ÂÓàÜÕÓÒÎÍËÇÉÜìëæÑ¸¦­»Š3-/10/,13010.0321+00200313367641132100..0/11.1410.5/.0.-)+)&-+156796.12/155530334543522122210+.--/79731463674866753123201.13//,)(/248;:??:7234-16/0/././--..-/..,-...0.*,./,./0231021-W²¿b))+,('$$$%960((+)*1$ ,TqK)"$%('()*)ÈÕÝÙÖÖÎËŽ¿ÍÞçäÙ¾¥­µˆ0+-.,/0,-3.-,+,///,-0/..///26414110--1.--,,/././/102+-/,)'**&'+238<>4/-./143320621442721041/,,+./,-851220437689975311101-3040/-,#*032899<<:5555/1351,/-././.*-0.)*-//+)-,-.,+/5322301/,m±£E&(+('(&$!(<-))-**44$#-OgZ-&&%((+((:«ËÕ×ÖÚÖËû·ÃÖèäÖ³±°r4--*,-..-/0-,-,+,-1,./,+01/-375461/0.0/-+*+,+++02/-.//.,,+'($%'*35BHJ@/-,/11234/546530352/02./,/-,..73.5312479653141/00/2.232/*&*/3317<<<=;6214240.2/../..-+*-,,*),.+-,+.,-.,///121.1/1{­Š3())&''&%!-3.0/6./A1&'?\R4$%%$)('('R»ÕÚØÙÝÓù³»Ïßëâʹµ³t0,-.+,//.*///-++--+./0-**/-23236791.0/0/0-*,.**-../..-/.,,*')$"%,9BNRYJ4-,0/0/44144463.242401/.-/./.,844575568:86403520233/222/&$)-17537:<<99547724303020.--,2--,-+/.-,-//.,+/0/021222218‚®~.)-,.++)%!-615373;B,*/KN9##&'%%&)+))sËÜÞÚáÙÌ´¯ÄÛçêÜÇ¿¬i,/./2-/./1//120,+-10-/00/./15626777242/2224+./--..2020420.-**-,(#/?Q\ehW;/,2102457645541443923532/10.-64948679;98920442123450/3-"%*,577699<>84336320201031/---/012.*.0/,,,1+-).012.4621/47‡­w,+----**$ +:64577E?,47LB*#%(,&'&*,+2–ØßÞÛßÎÀº­±ÏáåãÙϯX11.010*./1.103121,/.13.2.20/1042968745402321/,-2../421031411*)(*$&/DXjrubA2,/002744576463666;74731.0//-95848<:;<89734305135273,*"%..16:698:;952;=6130./.001...---0/++.0-0-+,.,-.1613402-/4ªh**--+*)($,645424F6*5DP/!''))%*'(*,L±àáßÝÙï§«¿ÝçèâÕ¯Q-2221/**/.,-/22//.+///022/2/110348443620/./0..,+..0/001..././0,*& '2D\oyzdB1/.-204204557438558565523//01754;;9:>8:7242042110340( &-00876:697764132034//-./.1.--.-//,/-.../-...*/1/221/203?’£P*-),*))($,0/52.5?..;L>""'*&)+'*(')*i¾Ûâäàʰ¢žµÏãêêÜ¥@-00-//.-/..--2/0...,+...530.,41./28323731-////--.*.1/10/..0--..+,$##1A[hxubA1-+/10231348744234345850011--5689899<89620/131/3../. $&*04768;9769750120//.0,+.-.,+-0/,.+.-.,/+,//.,/2/.02//11D•ŸG+*%*)''&# &.241.78/7LN. %&+(%()*(()-„ÆÝçæÖ»¤›¤ÁÞêéÙ”<115-*,/2,--)/-,-/000+--.013/./13./.5157540/./0---.-/.+./.,.,../))('"-?Wkvo[A3,)-4/110452415623224742/00..79:69><=:66465242/2-/+, $,'-269:7::9965535323.+100.//30,.30.-./0/.*-021/1311/440-0FžE,-*.+)(&")7962:G7<KNA% #+**')(()**,4˜ÐâêÝÁ§œž®ËåéËj44224/..00/+..10001205////10432/042005688572330//31+-30/./231.1.0+,)'!&,6IfrhP80,*+531054722656666576783011/78:8:;;;8640552112-*0(!' !).0558868:89735530221/21031/../0/1../-../,/.01/2443114310KŸB,).1/($'#.BG>AKQEPVP- #()-+&(),-+*.9°ÜëæË¯™ª¿××¶T-230120403..,1//.122.01..0.10342214121442989821112..-.+-001-012/.000)&#").=LbXD2**',/023627735756688964563000765=;8:9572042,010-+'%-31458:7;9879544440//01-/12/-//0/-1-./00/./0001433032210/QŸ>,+02.*&&"3OTQQ]WU`S@!#&,)+,+)(,/+**TÄåîܹ£§µ¿¹Ž?0440/222/.10-,.+01.-3410,+/.0//30/45120112779642112/--.,-1/.11/10/-/-/,%$).7EIE80*)*)0/12246755788977:87546530;<98<<;:574351330/,-!&,-4238996899667324500011/..013/1/200.03/00/011111361632123PšŠ>,+-/+-*%" 8\hdegTTVE'')(*+-+)./.,.+ÖèæÀ š¡®­‘R/346454014144210.+01-11111/01/2124//353621015685854154./3011/0741120.00..').48HGB7/**-)0154263697677:687857575636:<8<::831531/2321$"!).2/35863148544441-/.41.--/-,,2-0.21.,.21../.011/103021/01/N—ƒ=*(**'++$ "8drqsfUR>,#%$')*.+*./.),6©Ýå΢˜ œv4',2226400/323/0//++/..0+/12,-/.20100/001341/.126654//4310.02.0051..0/20*,-),0:D[eVB4+())./70037795574565624653441:<=9:82532123240./"#$(+-146634847932555//102/-..00-./.2./.20..300/122/1155./5.02/Q•ƒ;,-+)*+*' "7`t~n]QN, &$$*,,,/+,,.,*G¦Öѧ—–zM+(+/01332131111000./01/,00..0/01/3/42/3101146.012453333233//10/0112/03./0-.,%/6DTmxmP>3.)',-401788:8594788778757653??96955523//2431-)"'().137664894574312102010..311,,0//,+2.10/-1/0/133/1261.0320/1R˜‡:+,)))--%!3SuzfRC4"$#%(+*+.,++-++T—½®›žu>(**-//23312010.020-+/-,-,21-/0.-//334311004524101032543446300101//00.00-//./)&1>Qbx†€gVD<321,01165467661876577877655?=:87789321576331)%%3/0/599:8::9688984425531152213330-0221/2/01/02/9881144314321./Pœ‹?.*.,*.*$ )>Otw`E9$#$%'(+...+*.21+6b€¡š—”}A(,-,,13334404210252//2.012313200/40464546544685622344486676641343102122300331**8H_t•“{i\OF?7200033677:9:86799879:8649;767353102/131(!%'+*-1187885843555611./01.-2/1,/320,,51/+,./,+,0-53414361230/-/1Xž‘E-&'*+,&"#1R_klY=' !""''()*+,(+,+@|zƒ ›Œd/),)(*+/,.00..1/../1--,''//1,01//+/-/4.11134001331/1131-22531/-//-./-/++1//.0-/-'4Klˆ–¡™‰zne[K://41/0568577845388346520<8327511245/.12* *+),12588583625743104/,.13../2..,01--0+2.--/.-/105020/272132.-11^¡F,'',,*%$(BjtdRD/"%"#$%()+,)+*)9°˜ž “\1*++((',./.01...+/+-+-)(&+.-.+.111-/01/,10.10103030/100134.0201.-/0+.-2.,-.300,//*5Pu–¥«¡•Œ„zwZE3+*0//276473:47437344576:8525528934361*"'-3/-0428:9656657655432201.100/10000./13.0.0//10433316400462501244ZŠC*-,.,+''7ctnZB4* &(%&%')++-)++1ŒÇº¢Ž‚^.)-,,,,,/05/32101/2*,+0)%)-...213///10.202../12164520245214235322200/121.-/3/.012.-9U{˜«·ª£›˜˜oP:1+30/3768;89588854689956832433523126-$&,45/.14:858795236//43/210-.30/001/-/021.1/0.022000633122172214213W˜ŽH,/+,-**&MrkUB2( #)*')&%*+)()+*wÒή”P5(--,,)---./301/101./1.+)'$'',,.41,-12...00-2/-412226321640021141511.10/..01-./10,2/0:V𬷰¬®¬©œˆeF3,+03244888877864669965641464765512/'!"&342453566:77;:67247704750112/1136002021-0410122/2432432234136267441\›M0+,0/-)&@VL<0&# '+-+-,,-,,--+7¶äÒ—\+*,././-,,.216465300210//,))--046100022/.0270/56511731368433255342222255431320224123A^ˆ¡²½´±º¸±¤“x_@4--25976;;;65;8989;:::75234322230,"/35/45853788:787513242231000000104//.-/3022..0../12440,220/303541123\Ÿ”O-,-0+.+#%.2-($*.-,.-+*+-.-,`½Ä™E(*.+-+.0+/.)114334010.2-..,"&)/.2410,-4/0-/51/2412121//174113410-24.,.3111130/0212/2DjŒª¹Å»º¼¿°¦—„gH7--273369:8689556988998654437733-."'(/8775379367978969623463542001/11202/0/1.12720//./03/44113403412463.03V ˜S/..-..*$"(*'#&)*+--./,,0//.9qgM0),.0-..-/-./,204432120/121.*$&,-32052-,/161213332452423334545444663310265300223421404Ks“­ÁÇľ»»±¨›ŠmK70.353876;:8886887::898542457830' &3098722503545667585334545250031/11/0./.0010330-,('+0-140101252312241/1M‘•T0,/,*)$$%&' #&))').,0/--0-.8]M/'-,--...,.*,,0+1/43110..301,*$"&*230230--+105121425534214402333054530/1/11/11/1221/232J~œ±¼ÃÁº³±­©œ‘uR93-033663899379669;;9:521./4320+#/2865400/4330641430221.130300-0...+--0.+..-/--,*' $-00.-01000231120/-.AvˆQ/(,*&#"#  !#))%$'*++/,),,.-C=)*.+(+*-,)*,+*&',.--.3/,+/2-,,(!"&*2/-,(,.*-+10-,23.0/12.//5331-///110,/'/0--.---1./21-D{Ÿ±·¼¹µ¯¶«¢–Šz_@2*,043254754747349;84632464460&&,2269977752744887786454321552460123122100211.13111/!*3453432263454232142>k€V/(*/-'%$$%),)),-/,)../--01.002//2.0/,--,/,0/,.003323312003210( !,363210-/0154534323465344774563213843.333./1111/452346Eo™®µ»µ´¬¶¤ ˜mK50.1627=:9989:568=>985304963,#>% (-68599832112177752465110103502111031/-/--/2/..205/()452143421123412014/>oˆY3)'-.-**+,-+*..00-*/,///0011/1/1.-//-,+0,+.-,-,252113300-13.*$+-1410/,..-104/1122013443465200442223031/-1/,-.1/41148Fi•¬³º·²§¡œ™€rP82/030576778:98;5:>99322390+% &'-2493342002114134021.020-0-2/1-/0.+00,+*,*/,-*../,&.221005/.0132.-0320=q]2**,,,+),'**-,,,/,-+*/-+,,0-,,..*)+./1'(+.,*(,,/11../,,../-,&#+0/.,,-,,,++..*,//201.03342.2.04310//0/0//.--.0/0//02<c“¨±·´®§›˜•‰nL<3,,11/2266566473899713650**#-,465=955231444652444205:90503220040,.012-,-0//030-%+3551236322422--11/0<pŒ^2-/1-.,,/+,-.--/..0,02/10120-.1-.../120,/20--.1224322,,221/))$"+001/+//.0/.1/11/2654233334165/30112011500/.101121438?Z£³·´¯¤›–“‰ylI?80.040699789879899<=5414/'$#(5:9:7::822436623775444359=16443523/4/01/3./101-21/).2452363421600120-/1@p†W3.-//1.,--.*,///0..-.1111/44/.100/1///03.-1/0-.241.331.//41+)!(*122-//10/.1216533145144323232224140116233/2//1/.7639W…¢°¶µ²¢™“‚wpiSD<30.435788:;7798;9:@863,- '(-18989998663668943767736953333345215120022401/22123.$#05777215335631332021FzƒT100/010-,--..23110/114/.01240131112/01,/////.011454424111621+ #!)0/2/132/.23//54134660/466334342435322455201200413628S| ®°²¯¤™‘|vpcWGA9206447989989::>::;20**//,,-//--1332661444332412/1300011.//..--+./.,,/./-(%02231/124.113/..2/27SvI0-/000.)*)*,+../+,...1../.-/./3..0/,//,-,*+,-0/0.2351/1/../-"!&.0,+/./,.0+-0..001.,./20010-0-010/31500/2//..3,2027Nt™¬°²¯¦žŠ|uri_QF?950313687679958::971)$ %--+'%&'--/3545578361454204200001130010..0/-.10-//.-(-4441.334214021257?Eavf?10110/0-.+**,/0,+02/-/-.3000./0/3/00/.*.0-,.-1013663201-/0.,*#&),./.001/+../00/21300013033/12/342254;44210004/16139Lo‘§­²±­ŸŽwihc\NC<7623576:78;<878:=<9+#"#((%'#!$'+-135558994214342210010/022/121130..//0003/.*073502143057466=ABMP[^E10123000/--,-../-/2//.10/0/0200012,-200.//-..-/223852302043.-*%*,.155201.+,215404313203652255512243552121/.431545:Qm‰¥©®®©¡“~ge^NNE<95134458;=<9=99;:<:% ))"# !%%*,1289;87446321124221310110/112100/10/13021&"-2464245333;?<=?CONMEA;002121002/--/--..021.-.13//101.12010-310//..-/0/0437833.15252,%(,-26551110-3104144042364414635241455643531.252158BWt‚—§­¬«§š‰nW[JEA<79.21367::99=<8::<< $$ )+1677=753510/10211114.0232101012002/0020/(*/3264705426@FIED@IB70..,.20./,.1/,*+-.0//00./-/200000-11/.//100.0./00/1/2545130.4320(#%*+3023320010//2663/256322573124324576740562/3146:CTfu¨­¬¬¨ mNPL?<723.2346668<<<::<:99 %235899=88451/.22212/0//223122/0.23/300///1# $+4547453747=JXYK?971/--./.41-0033.../../-.0-//.5///0.0/20.01-1.0+.0200,03264353/.344,'#*1/52550/0/122440243522435424353156775464332045:DJ[k‰¡¬°°©¡sSFEA;534/1343658<<;<<><>;" %+347:6:::7112334///0--.1/.30../2021/0///..' +372459:86>GVNK<20+./--,-142,0121.,/0.,,*/-*./.1./1/-0//0-11---/-.-01.,0345732002112-$'/30155423/.2401.511203421320.312722224422421258=CQ^|–©«®©£˜‚bI?:9522110624569<9;:;;<=&,$ $''% &!$!%'0388:=;>>:64446540242/0121111/.2520343/034/(% *44699;?<<;@ITI8/0/,..1-.,11..2/0/300/./1-//011020010.0/42/131//100.04342167:55412236.%$.2364638222330123326435525143335787397558832565;AJ[nŒ¢¬¬¬©šŽkMB6983273034957;<==9=?==#%'%"(#***()(.+* -546:CG@><9822234323/12001023200124100003.0**!)-0446=?>>>=<?A>8/,00/-,,/+*+///30010-./,/111/0.1242.0//00120../1/.-..0/12007763561067/&+12536563.110/3521133532143321/45673545654133439@DSg‚œ©ª«¢ž”xS>77726443026869:<::@<;=!"'$*.$%&()),140+688=?GIGA;:862/05522042/-14222132402510130.++*(//3675:BHDA??@860/1/3410/-/.*..-11/222-.0-/1200211124.11/1133002110.,0/2/201026746465853( )22679763101212//3432642344614126545577753475206=BL`uŒ¡¨­¦ž—€_A46637535256778;<;<A<;A! !" &)(%%../58:AC@@@86931300/153110//022220./130231033,,*(&%+*.-03<B@@;6.((*,...031023751/.201110/,.--010..00322/02001421130/0/.100-0.0122634376440!"#$ */043434040./10.135411220335233345566766555671168?FVf~𧧤 šŒlN75424311466647<<=;<;;=5.0)+*,0+$$!*03;;9>D:HKMC<8464420242311122124321311153203/3742-+'(//-05<@B?;1+)*+/--./1437;57976+.1140//-1-,.10.//3/60/003311030100233//324//236643869<6.( 036054403201.02/13761542424352348897354786643435?AI\tž¢¥ª{]:7845363437338;::;<;:=3#%'%("0'#'!./5<9>?=JIMGD876411222/.2//13530204100343104108<>770.4469=@@B=70,-+/2.2635558911323*,122/.00---2/.0021.41/.02610/15//23310/3420/154424448991" &, )1523314100///0.+13323102/2211136363243253577356@BFVm…™£¨ª›–†nH<59937364354788;:?@;<! "")1176:?<<<;5824.331//11.102310132.32325623004584==36:<;::;:61.+02-.,12/33342,-0/)'.2/1/.//./.1/.1011/541/2/1/1/1600115.0/222/313633476799,#%!,345404421-/11,,0410124414211225541355224597344;CLR_w‘¦§©¢šW@66845566553789@=AB=: (44589885013./..+-+,,-+.+,-/.0.-+/2.01113,+## &2<579;443282/0-/,(+-)%'')%+*'**,((*-,-,**,,+(*00*,.01/-./0-/,/100./0-.././/..1.-000.3761,$")//060000.))-,*+.,,,-*/230..00//21.1.02130622/03?GNWk‚›¤¤¦Ÿ–‹lM;4344631220325:8=<;:"*166:;?:96210152.0120,0/00-/014110121502/01/(//7>397893678;753671264/+-/-*(.*+,)+-,.-.//--/,**12-113321262//.1210201/.04/11./134315348;6)!('33003312-4/1-,.31/12234//010/010323351344266631>FHV`wŸ§¨¤›|^D:4145454247358;=>?>$$ !!-2778=A>;966557524532435323523557403675662125015/0,255:<999:=:689677666512111///10022/301010/4122246555766465643264213551056214697675:;88,,'$4)!#176532462723//242245524424355375344475534866964:>EO_p‚𧥤”…mM977698876237:8<B@B? (13899?=:884256455220222512442141232444444/.!%"#(058;898599586674744420-/1.1*//1531210/..0001321564>7364354542671234213252354738878764+- ) (052225536/00/12/1224/334821402213321211274356657@FR`y ¥¥ŸšŽ|[E96266565543978?@AA'3699;6974312202.1.0/0.00/100..00.30//231/(/66765856757431333333.-0,.1-(.200.00--0---/021.0545201212/14/2>2110-30/-103232253454-& ) !(,121251363.-*.0/0//1/20--,/0-+-12.1-01-125121335@BFSm…™¥®§Ÿ“ŠkL=763224220/876;?@B*%#05;:9>:6401552140-1/31.///21.0/0//1331256/ *)3776;:888958554530335///10/./03/1.32/011//0554115260.15451360/55/13/3141131025332663*'    $#,0553754531.-./3/0.102/0100011./1040010244124577:@FQf{“ ª§£šŽ|]G;598534233378<>??#! +,37;?;>;66338733364514520116401155315546660 +59<8999;998:896758532633112021455244541104565765537314556423321646400554224674486543**($'& !  +385698657632/0420/203/4341/15/21570.334543675886>CPaq†–¤¨¦¡‘ƒpU?97886325857:<?B?"! #,368;?;9<864664236623464004132211469566452/%#079;:99;9:97:8::989744524530.145542427720235732443274254165332742333121/43/377747334+&(-,* # '"#(2655875866420-120/.20.1/23224366441/4414675568955:GXfxž£¢¢–Šx\J>969533568;8;@BB#-167875432310000120+011--/1/,-20/0-251110/'/0 058;;889465376367751310../*+*+/51210111//1-/31/001110121./111/41/..0.0//31.1134000.(" () .3623238221/.+-*+*).--/*+-///031/.+1/1,033235535/3:I\q…”Ÿ¨ž—mR?764322244635:=A!!+38:898765215/223422.02301/110122444424662+&28:?<:8899869:8779875110/1----06451234221/2.413233153132322421221332131112234541052)$ +**#! -3747668464///0.+,---..-.12101102113122553544474345?QfwŠ˜Ÿ˜“ˆx]G=:58313543689?=-%%1('%'&"(49:??:;76654325314411204310344410346466750$')$&""$39<>?=?8;<:;;<>:8;;78663/-/1..167443668753156434655474575575574316846473214556534371$(%'31-'% $)"(%4( "'&-05789::87723/1///--110/133133654133412662457595787;EUk€‘œ›—‹}gNB;96446579888:<#'"*479<;84125.1/031-110//,/2,.130.0103229551(!)-7::<:;::56:99956995213.,++++*.1121.3224/12/6200114224/3/.21451005532./031/1551010+$$#$ " '!!!/172566762)../,,-,,.,,./0.,0311//0.22044221325342236@Rj„’Ÿž•Œ€kTG?8346453556468Gauche-gl-0.5.1/examples/simple/��������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�015456� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/simple/minimum-viewer.scm��������������������������������������������������0000644�0000764�0000764�00000000375�11533026402�021141� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;; A minimum demo to use gl.simple.viewer (use gl) (use gl.glut) (use gl.simple.viewer) (define (main args) (glut-init args) (simple-viewer-display (lambda () (glut-wire-sphere 2.0 10 8))) (simple-viewer-window 'demo) (simple-viewer-run) 0) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/��������������������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�015456� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/README��������������������������������������������������������������0000644�0000764�0000764�00000000744�11533026402�016343� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������This directory containts example scripts that are described in the book "OpenGL Shading Language" by Randi J. Rost, Addison Wesley, and available at the 3DLabs website http://developer.3dlabs.com/openGL2/downloads/index.htm The code is copyrighted by 3Dlabs and redistributable under the revised BSD-license. See 3Dlabs-License.txt in each example directories for the details. Each subdirectory contains a shell script run.sh to run the example without installing Gauche-gl. ����������������������������Gauche-gl-0.5.1/examples/slbook/ogl2brick/����������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�017334� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2brick/brick.frag������������������������������������������������0000644�0000764�0000764�00000001466�11533026402�021276� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// // Fragment shader for procedural bricks // // Authors: Dave Baldwin, Steve Koren, Randi Rost // based on a shader by Darwyn Peachey // // Copyright (c) 2002-2004 3Dlabs Inc. Ltd. // // See 3Dlabs-License.txt for license information // uniform vec3 BrickColor, MortarColor; uniform vec2 BrickSize; uniform vec2 BrickPct; varying vec2 MCposition; varying float LightIntensity; void main(void) { vec3 color; vec2 position, useBrick; position = MCposition / BrickSize; if (fract(position.y * 0.5) > 0.5) position.x += 0.5; position = fract(position); useBrick = step(position, BrickPct); color = mix(MortarColor, BrickColor, useBrick.x * useBrick.y); color *= LightIntensity; gl_FragColor = vec4 (color, 1.0); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2brick/brick.vert������������������������������������������������0000644�0000764�0000764�00000002205�11533026402�021327� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// // Vertex shader for procedural bricks // // Authors: Dave Baldwin, Steve Koren, Randi Rost // based on a shader by Darwyn Peachey // // Copyright (c) 2002-2004 3Dlabs Inc. Ltd. // // See 3Dlabs-License.txt for license information // uniform vec3 LightPosition; const float SpecularContribution = 0.3; const float DiffuseContribution = 1.0 - SpecularContribution; varying float LightIntensity; varying vec2 MCposition; void main(void) { vec3 ecPosition = vec3 (gl_ModelViewMatrix * gl_Vertex); vec3 tnorm = normalize(gl_NormalMatrix * gl_Normal); vec3 lightVec = normalize(LightPosition - ecPosition); vec3 reflectVec = reflect(-lightVec, tnorm); vec3 viewVec = normalize(-ecPosition); float diffuse = max(dot(lightVec, tnorm), 0.0); float spec = 0.0; if (diffuse > 0.0) { spec = max(dot(reflectVec, viewVec), 0.0); spec = pow(spec, 16.0); } LightIntensity = DiffuseContribution * diffuse + SpecularContribution * spec; MCposition = gl_Vertex.xy; gl_Position = ftransform(); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2brick/README.txt������������������������������������������������0000644�0000764�0000764�00000002702�11533026402�021033� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LAST UPDATE TO THIS FILE 18-Mar-2004 LICENSING INFORMATION See 3Dlabs-License.txt for license information OVERVIEW This is a GLUT 3.7-based demo of the OpenGL Shading Language. It includes a vertex shader/fragment shader pair that procedurally generates a brick pattern. These shaders are the shaders that are described in Chapter 6 of the book, OpenGL Shading Language, published by Addison-Wesley. In addition, this demo includes the application source code that is included and described in Chapter 7 of this book. When launched, ogl2brick loads, compiles, and links the brick shaders, then installs them as part of current state. Keyboard commands for this demo are: b - Toggle among background clear colors q - Quit t - Toggle among models to render ? - Help <home> - reset zoom and rotation <space> or <click> - stop rotation <+>, <-> or <ctrl + drag> - zoom model <arrow keys> or <drag> - rotate model Be sure to cycle through the different models (box, teapot, sphere, torus) using the "t" key in order to see how this shader looks on different models. The application prints various diagnostic and InfoLog messages to the console window when building and applying GLSL shaders. This application can be compiled and linked using the VisualStudio.net solution file that is included (ogl2brick.sln). ��������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2brick/ogl2brick.scm���������������������������������������������0000644�0000764�0000764�00000032702�11533026402�021722� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; ogl2brick - OpenGL shading language demo ;;; ;;; This is a pretty straightforward port of the C code provided ;;; by 3DLabs Inc under the BSD-license. The original copyright ;;; notice follows. ;;; #| /************************************************************************ * * * Copyright (C) 2002-2004 3Dlabs Inc. Ltd. * * * * All rights reserved. * * * * Redistribution and use in source and binary forms, with or without * * modification, are permitted provided that the following conditions * * are met: * * * * Redistributions of source code must retain the above copyright * * notice, this list of conditions and the following disclaimer. * * * * Redistributions in binary form must reproduce the above * * copyright notice, this list of conditions and the following * * disclaimer in the documentation and/or other materials provided * * with the distribution. * * * * Neither the name of the 3Dlabs nor the names of its * * contributors may be used to endorse or promote products derived * * from this software without specific prior written permission. * * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * * POSSIBILITY OF SUCH DAMAGE. * * * /************************************************************************/ |# ;;; $Id: ogl2brick.scm,v 1.4 2005-06-10 11:27:16 shirok Exp $ (use srfi-1) (use gauche.uvector) (use gl) (use gl.glut) (use math.const) (use util.match) (use file.util) ;; Movement variables (define *fxdiff* 206) (define *fydiff* 16) (define *fzdiff* 10) (define *xlastincr* 0) (define *ylastincr* 0) (define *fxinertia* -0.5) (define *fyinertia* 0) (define *fxinertiaold* 0) (define *fyinertiaold* 0) (define *fscale* 1.0) (define *ftime* 0) (define *xlast* -1) (define *ylast* -1) (define *modifiers* 0) (define *rotate* #t) ;; rotation defines (define-constant INERTIA_THRESHOLD 1.0) (define-constant INERTIA_FACTOR 0.5) (define-constant SCALE_FACTOR 0.01) (define-constant SCALE_INCREMENT 0.5) (define-constant TIMER_FREQUENCY_MILLIS 20) (define *rotl* pi/180) (define *lasttime* 0) (define (print-opengl-error) (let loop ((err (gl-get-error)) (status 0)) (if (= err GL_NO_ERROR) status (begin (format "glError: ~s~%" (glu-error-string err)) (loop (gl-get-error) 1))))) (define next-clear-color (let1 color 0 (lambda () (case (modulo color 3) ((0) (gl-clear-color 0.0 0.0 0.0 1.0)) ((1) (gl-clear-color 0.2 0.2 0.3 1.0)) ((2) (gl-clear-color 0.7 0.7 0.7 1.0))) (inc! color)))) ;; Models to render ;; a circular list of thunks (define *models* (circular-list (lambda () (glut-solid-teapot 0.6)) (lambda () (glut-solid-torus 0.2 0.6 64 64)) (lambda () (glut-solid-sphere 0.6 64 64)) (lambda () (draw-cube)))) ;;; ;;; GLUT glue ;;; (define (display-proc) (gl-load-identity) (gl-translate 0.0 0.0 -5.0) (gl-rotate *fydiff* 1 0 0) (gl-rotate *fxdiff* 0 1 0) (gl-rotate *fzdiff* 0 0 1) (gl-scale *fscale* *fscale* *fscale*) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) ((car *models*)) (gl-flush) (glut-swap-buffers) ) (define (play-proc) (let1 thistime (glut-get GLUT_ELAPSED_TIME) (inc! *rotl* (* (- thistime *lasttime*) -0.001)) (set! *lasttime* thistime) (glut-post-redisplay))) (define (key-proc key x y) (cond ((eqv? key (char->integer #\b)) (next-clear-color)) ((eqv? key (char->integer #\q)) (exit)) ((eqv? key (char->integer #\t)) (pop! *models*)) ((eqv? key (char->integer #\space)) (set! *rotate* (not *rotate*)) (if (not *rotate*) (begin (set! *fxinertiaold* *fxinertia*) (set! *fyinertiaold* *fyinertia*)) (begin (set! *fxinertia* *fxinertiaold*) (set! *fyinertia* *fyinertiaold*) ;; To prevent confusion, force some rotation (when (and (zero? *fxinertia*) (zero? *fyinertia*)) (set! *fxinertia* -0.5))))) ((eqv? key (char->integer #\+)) (inc! *fscale* SCALE_INCREMENT)) ((eqv? key (char->integer #\-)) (dec! *fscale* SCALE_INCREMENT)) (else (print "Keyboard commands:\n") (print "b - Toggle among background clear colors") (print "q - Quit") (print "t - Toggle among models to render") (print "? - Help") (print "<home> - reset zoom and rotation") (print "<space> or <click> - stop rotation") (print "<+>, <-> or <ctrl + drag> - zoom model") (print "<arrow keys> or <drag> - rotate model")) )) (define (timer-proc value) (inc! *ftime* 0.01) (when *rotate* (inc! *fxdiff* *fxinertia*) (inc! *fydiff* *fyinertia*)) (glut-timer-func TIMER_FREQUENCY_MILLIS timer-proc 0)) (define (mouse-proc button state x y) (set! *modifiers* (glut-get-modifiers)) (when (= button GLUT_LEFT_BUTTON) (if (= state GLUT_UP) (begin (set! *xlast* -1) (set! *ylast* -1) (when (> *xlastincr* INERTIA_THRESHOLD) (set! *fxinertia* (* (- *xlastincr* INERTIA_THRESHOLD) INERTIA_FACTOR))) (when (> (- *xlastincr*) INERTIA_THRESHOLD) (set! *fxinertia* (* (+ *xlastincr* INERTIA_THRESHOLD) INERTIA_FACTOR))) (when (> *ylastincr* INERTIA_THRESHOLD) (set! *fyinertia* (* (- *ylastincr* INERTIA_THRESHOLD) INERTIA_FACTOR))) (when (> (- *ylastincr*) INERTIA_THRESHOLD) (set! *fyinertia* (* (+ *ylastincr* INERTIA_THRESHOLD) INERTIA_FACTOR))) ) (begin (set! *fxinertia* 0) (set! *fyinertia* 0))) (set! *xlastincr* 0) (set! *ylastincr* 0)) ) (define (motion-proc x y) (unless (and (= *xlast* -1) (= *ylast* -1)) (set! *xlastincr* (- x *xlast*)) (set! *ylastincr* (- y *ylast*)) (if (logand *modifiers* GLUT_ACTIVE_CTRL) (unless (= *xlast* -1) (inc! *fzdiff* *xlastincr*) (inc! *fscale* (* *ylastincr* SCALE_FACTOR))) (unless (= *xlast* -1) (inc! *fxdiff* *xlastincr*) (inc! *fydiff* *ylastincr*)))) (set! *xlast* x) (set! *ylast* y)) (define (reshape-proc w h) (let ((vp 0.8) (aspect (/ w h))) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-frustum (- vp) vp (/ (- vp) aspect) (/ vp aspect) 3 10.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -5.0))) (define (special-proc key x y) (cond ((= key GLUT_KEY_HOME) (set! *fxdiff* 0) (set! *fydiff* 35) (set! *fzdiff* 0) (set! *xlastincr* 0) (set! *ylastincr* 0) (set! *fxinertia* -0.5) (set! *fyinertia* 0) (set! *fscale* 1.0)) ((= key GLUT_KEY_LEFT) (dec! *fxdiff*)) ((= key GLUT_KEY_RIGHT) (inc! *fxdiff*)) ((= key GLUT_KEY_UP) (dec! *fydiff*)) ((= key GLUT_KEY_DOWN) (inc! *fydiff*)) )) ;;; ;;; draw-cube (original source is draw.c) ;;; (define (draw-cube) (let* ((size 1.0) (scale 0.2) (delta 0.1) (-size (- size)) (A (f32vector size size (+ (* size scale) delta))) (B (f32vector size size (+ (* -size scale) delta))) (C (f32vector size -size (* -size scale))) (D (f32vector size -size (* size scale))) (E (f32vector -size size (+ (* size scale) delta))) (F (f32vector -size size (+ (* -size scale) delta))) (G (f32vector -size -size (* -size scale))) (H (f32vector -size -size (* size scale))) (I '#f32( 1.0 0.0 0.0)) (K '#f32(-1.0 0.0 0.0)) (L '#f32( 0.0 0.0 -1.0)) (M '#f32( 0.0 0.0 1.0)) (N '#f32( 0.0 1.0 0.0)) (O '#f32( 0.0 -1.0 0.0)) ) (gl-begin GL_QUADS) (for-each (match-lambda ((n v0 v1 v2 v3) (gl-normal n) (gl-tex-coord 1 1) (gl-vertex v0) (gl-tex-coord 0 1) (gl-vertex v1) (gl-tex-coord 0 0) (gl-vertex v2) (gl-tex-coord 1 0) (gl-vertex v3))) `((,I ,D ,C ,B ,A) (,K ,G ,H ,E ,F) (,L ,C ,G ,F ,B) (,M ,H ,D ,A ,E) (,N ,E ,A ,B ,F) (,O ,G ,C ,D ,H))) (gl-end) )) ;;; ;;; shader stuff (original source is shader.c) ;;; (define (get-uniloc program name) (let1 loc (gl-get-uniform-location-arb program name) (when (negative? loc) (error "No such uniform:" name)) (print-opengl-error) loc)) (define (print-info-log obj) (print-opengl-error) (format #t "InfoLog:\n~a\n\n" (gl-get-info-log-arb obj)) (print-opengl-error)) (define (install-brick-shaders vsh fsh) ;; Create a vertex shader object and a fragment shader object (let* ((brickvs (gl-create-shader-object-arb GL_VERTEX_SHADER_ARB)) (brickfs (gl-create-shader-object-arb GL_FRAGMENT_SHADER_ARB)) (vert-compiled 1) (frag-compiled 1) (linked #f)) ;; Load source code strings into shaders (gl-shader-source-arb brickvs (list vsh)) (gl-shader-source-arb brickfs (list fsh)) ;; Compile the brick vertex shader, and print out ;; the compiler log file. (gl-compile-shader-arb brickvs) (print-opengl-error) ;; Check for OpenGL errors (set! vert-compiled (gl-get-object-parameter-arb brickvs GL_OBJECT_COMPILE_STATUS_ARB)) (print-info-log brickvs) ;; Compile the brick fragment shader, and print out ;; the compiler log file. (gl-compile-shader-arb brickfs) (print-opengl-error) (set! frag-compiled (gl-get-object-parameter-arb brickfs GL_OBJECT_COMPILE_STATUS_ARB)) (print-info-log brickfs) (if (or (zero? vert-compiled) (zero? frag-compiled)) #f ;; failure ;; Create a program object and attach the two compiled shaders (let1 brickprog (gl-create-program-object-arb) (gl-attach-object-arb brickprog brickvs) (gl-attach-object-arb brickprog brickfs) ;; Link the program object and print out the info log (gl-link-program-arb brickprog) (print-opengl-error) (set! linked (gl-get-object-parameter-arb brickprog GL_OBJECT_LINK_STATUS_ARB)) (print-info-log brickprog) (if (zero? linked) #f ;; failure (begin ;; Install program object as part of current state (gl-use-program-object-arb brickprog) (gl-uniform3-arb (get-uniloc brickprog "BrickColor") 1.0 0.3 0.2) (gl-uniform3-arb (get-uniloc brickprog "MortarColor") 0.85 0.86 0.84) (gl-uniform2-arb (get-uniloc brickprog "BrickSize") 0.30 0.15) (gl-uniform2-arb (get-uniloc brickprog "BrickPct") 0.90 0.85) (gl-uniform3-arb (get-uniloc brickprog "LightPosition") 0.0 0.0 4.0) #t ;; success )) ))) ) ;;; ;;; main ;;; (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_RGB GLUT_DEPTH GLUT_DOUBLE)) (glut-init-window-size 500 500) (let* ((window (glut-create-window "3Dlabs Brick Shader"))) (unless (gl-extension-available? 'GL_ARB_shader_objects 'GL_ARB_fragment_shader 'GL_ARB_vertex_shader 'GL_ARB_shading_language_100) (error "OpenGL Shading Language extensions not available")) (glut-idle-func play-proc) (glut-display-func display-proc) (glut-keyboard-func key-proc) (glut-reshape-func reshape-proc) (glut-motion-func motion-proc) (glut-mouse-func mouse-proc) (glut-special-func special-proc) (glut-timer-func TIMER_FREQUENCY_MILLIS timer-proc 0) (gl-depth-func GL_LESS) (gl-enable GL_DEPTH_TEST) (next-clear-color) (key-proc (char->integer #\?) 0 0) ;; display help (let ((vs (file->string "brick.vert")) (fs (file->string "brick.frag"))) (and (install-brick-shaders vs fs) (glut-main-loop))) 0)) ��������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2brick/run.sh����������������������������������������������������0000755�0000764�0000764�00000000075�11533026402�020501� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh gosh -I../../../lib -I../../../src ./ogl2brick.scm �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2brick/3Dlabs-License.txt����������������������������������������0000644�0000764�0000764�00000005214�11533026402�022567� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************ * * * Copyright (C) 2002-2004 3Dlabs Inc. Ltd. * * * * All rights reserved. * * * * Redistribution and use in source and binary forms, with or without * * modification, are permitted provided that the following conditions * * are met: * * * * Redistributions of source code must retain the above copyright * * notice, this list of conditions and the following disclaimer. * * * * Redistributions in binary form must reproduce the above * * copyright notice, this list of conditions and the following * * disclaimer in the documentation and/or other materials provided * * with the distribution. * * * * Neither the name of LightWork Design Ltd. nor the names of its * * contributors may be used to endorse or promote products derived * * from this software without specific prior written permission. * * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * * POSSIBILITY OF SUCH DAMAGE. * * * ************************************************************************/ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2particle/�������������������������������������������������������0000755�0000764�0000764�00000000000�11533026402�020045� 5����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2particle/ogl2particle.scm���������������������������������������0000644�0000764�0000764�00000035341�11533026402�023146� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������;;; ;;; ogl2brick - OpenGL shading language demo ;;; ;;; This is a pretty straightforward port of the C code provided ;;; by 3DLabs Inc under the BSD-license. The original copyright ;;; notice follows. ;;; #| /************************************************************************ * * * Copyright (C) 2002-2004 3Dlabs Inc. Ltd. * * * * All rights reserved. * * * * Redistribution and use in source and binary forms, with or without * * modification, are permitted provided that the following conditions * * are met: * * * * Redistributions of source code must retain the above copyright * * notice, this list of conditions and the following disclaimer. * * * * Redistributions in binary form must reproduce the above * * copyright notice, this list of conditions and the following * * disclaimer in the documentation and/or other materials provided * * with the distribution. * * * * Neither the name of the 3Dlabs nor the names of its * * contributors may be used to endorse or promote products derived * * from this software without specific prior written permission. * * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * * POSSIBILITY OF SUCH DAMAGE. * * * /************************************************************************/ |# ;;; $Id: ogl2particle.scm,v 1.4 2005-06-10 11:27:17 shirok Exp $ (use srfi-1) (use srfi-27) (use gauche.uvector) (use gl) (use gl.glut) (use file.util) (use math.const) ;; flags for doing animation (define *particle-time* 0.0) (define *program-object* #f) ;; Movement variables (define *fxdiff* 206.0) (define *fydiff* 16.0) (define *fzdiff* 10.0) (define *xlastincr* 0) (define *ylastincr* 0) (define *fxinertia* -0.5) (define *fyinertia* 0) (define *fxinertiaold* 0) (define *fyinertiaold* 0) (define *fscale* 0.25) (define *ftime* 0) (define *xlast* -1) (define *ylast* -1) (define *modifiers* 0) (define *rotate* #t) ;; rotation defines (define-constant INERTIA_THRESHOLD 1.0) (define-constant INERTIA_FACTOR 0.5) (define-constant SCALE_FACTOR 0.01) (define-constant SCALE_INCREMENT 0.5) (define-constant TIMER_FREQUENCY_MILLIS 20) ;; extra uniform arrays (define-constant VELOCITY_ARRAY 4) (define-constant START_TIME_ARRAY 5) (define (print-opengl-error) (let loop ((err (gl-get-error)) (status 0)) (if (= err GL_NO_ERROR) status (begin (format "glError: ~s~%" (glu-error-string err)) (loop (gl-get-error) 1))))) (define next-clear-color (let1 color 0 (lambda () (case (modulo color 3) ((0) (gl-clear-color 0.0 0.0 0.0 1.0)) ((1) (gl-clear-color 0.2 0.2 0.3 1.0)) ((2) (gl-clear-color 0.7 0.7 0.7 1.0))) (inc! color)))) ;; ;; GLUT glue ;; (define (display-proc) (gl-load-identity) (gl-translate 0.0 0.0 -5.0) (gl-rotate *fydiff* 1 0 0) (gl-rotate *fxdiff* 0 1 0) (gl-rotate *fzdiff* 0 0 1) (gl-scale *fscale* *fscale* *fscale*) (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (draw-points) (gl-flush) (glut-swap-buffers) ) (define (update-anim) (let1 location (get-uniloc *program-object* "Time") (inc! *particle-time* 0.002) (when (> *particle-time* 15.0) (set! *particle-time* 0.0)) (gl-uniform1-arb location *particle-time*) (print-opengl-error))) (define (play-proc) (let1 thistime (glut-get GLUT_ELAPSED_TIME) (update-anim) (print-opengl-error) (glut-post-redisplay) (print-opengl-error))) (define (key-proc key x y) (set! *particle-time* 0) (cond ((eqv? key (char->integer #\b)) (next-clear-color)) ((eqv? key (char->integer #\q)) (exit)) ((eqv? key (char->integer #\space)) (set! *rotate* (not *rotate*)) (if (not *rotate*) (begin (set! *fxinertiaold* *fxinertia*) (set! *fyinertiaold* *fyinertia*)) (begin (set! *fxinertia* *fxinertiaold*) (set! *fyinertia* *fyinertiaold*) ;; To prevent confusion, force some rotation (when (and (zero? *fxinertia*) (zero? *fyinertia*)) (set! *fxinertia* -0.5))))) ((eqv? key (char->integer #\+)) (inc! *fscale* SCALE_INCREMENT)) ((eqv? key (char->integer #\-)) (dec! *fscale* SCALE_INCREMENT)) (else (print "Keyboard commands:\n") (print "b - Toggle among background clear colors") (print "q - Quit") (print "? - Help") (print "<home> - reset zoom and rotation") (print "<space> or <click> - stop rotation") (print "<+>, <-> or <ctrl + drag> - zoom model") (print "<arrow keys> or <drag> - rotate model")) )) (define (timer-proc value) (inc! *ftime* 0.01) (when *rotate* (inc! *fxdiff* *fxinertia*) (inc! *fydiff* *fyinertia*)) (glut-timer-func TIMER_FREQUENCY_MILLIS timer-proc 0)) (define (mouse-proc button state x y) (set! *modifiers* (glut-get-modifiers)) (when (= button GLUT_LEFT_BUTTON) (if (= state GLUT_UP) (begin (set! *xlast* -1) (set! *ylast* -1) (when (> *xlastincr* INERTIA_THRESHOLD) (set! *fxinertia* (* (- *xlastincr* INERTIA_THRESHOLD) INERTIA_FACTOR))) (when (> (- *xlastincr*) INERTIA_THRESHOLD) (set! *fxinertia* (* (+ *xlastincr* INERTIA_THRESHOLD) INERTIA_FACTOR))) (when (> *ylastincr* INERTIA_THRESHOLD) (set! *fyinertia* (* (- *ylastincr* INERTIA_THRESHOLD) INERTIA_FACTOR))) (when (> (- *ylastincr*) INERTIA_THRESHOLD) (set! *fyinertia* (* (+ *ylastincr* INERTIA_THRESHOLD) INERTIA_FACTOR))) ) (begin (set! *fxinertia* 0) (set! *fyinertia* 0))) (set! *xlastincr* 0) (set! *ylastincr* 0)) ) (define (motion-proc x y) (unless (and (= *xlast* -1) (= *ylast* -1)) (set! *xlastincr* (- x *xlast*)) (set! *ylastincr* (- y *ylast*)) (if (logand *modifiers* GLUT_ACTIVE_CTRL) (unless (= *xlast* -1) (inc! *fzdiff* *xlastincr*) (inc! *fscale* (* *ylastincr* SCALE_FACTOR))) (unless (= *xlast* -1) (inc! *fxdiff* *xlastincr*) (inc! *fydiff* *ylastincr*)))) (set! *xlast* x) (set! *ylast* y)) (define (reshape-proc w h) (let ((vp 0.8) (aspect (/ w h))) (gl-viewport 0 0 w h) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-frustum (- vp) vp (/ (- vp) aspect) (/ vp aspect) 3 10.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -5.0))) (define (special-proc key x y) (cond ((= key GLUT_KEY_HOME) (set! *fxdiff* 0) (set! *fydiff* 35) (set! *fzdiff* 0) (set! *xlastincr* 0) (set! *ylastincr* 0) (set! *fxinertia* -0.5) (set! *fyinertia* 0) (set! *fscale* 1.0)) ((= key GLUT_KEY_LEFT) (dec! *fxdiff*)) ((= key GLUT_KEY_RIGHT) (inc! *fxdiff*)) ((= key GLUT_KEY_UP) (dec! *fydiff*)) ((= key GLUT_KEY_DOWN) (inc! *fydiff*)) )) ;;; ;;; create-points and draw-points (original source is draw.c) ;;; (define-values (create-points draw-points) (let ((array-width #f) (array-height #f) (verts #f) (colors #f) (velocities #f) (start-times #f)) (define (create-points w h) (set! verts (make-f32vector (* w h 3))) (set! colors (make-f32vector (* w h 3))) (set! velocities (make-f32vector (* w h 3))) (set! start-times (make-f32vector (* w h))) (do ((i (- (/ 0.5 w) 0.5) (+ i (/ w))) (n 0 (+ n 3)) (m 0 (+ m 1))) ((>= i 0.5)) (do ((j (- (/ 0.5 h) 0.5) (+ j (/ h))) (n n (+ n 3)) (m m (+ m 1))) ((>= j 0.5)) (set! (ref verts n) i) (set! (ref verts (+ n 1)) 0.0) (set! (ref verts (+ n 2)) j) (set! (ref colors n) (/ (+ (random-real) 1) 2)) (set! (ref colors (+ n 1)) (/ (+ (random-real) 1) 2)) (set! (ref colors (+ n 2)) (/ (+ (random-real) 1) 2)) (set! (ref velocities n) (+ (random-real) 3.0)) (set! (ref velocities (+ n 1)) (* (random-real) 10.0)) (set! (ref velocities (+ n 2)) (+ (random-real) 3.0)) (set! (ref start-times m) (* (random-real) 10.0)) ) ) (set! array-width w) (set! array-height h)) (define (draw-points) (gl-point-size 2.0) (gl-vertex-pointer 3 verts) (gl-color-pointer 3 colors) (gl-vertex-attrib-pointer-arb VELOCITY_ARRAY 3 velocities) (gl-vertex-attrib-pointer-arb START_TIME_ARRAY 1 start-times) (gl-enable-client-state GL_VERTEX_ARRAY) (gl-enable-client-state GL_COLOR_ARRAY) (gl-enable-vertex-attrib-array-arb VELOCITY_ARRAY) (gl-enable-vertex-attrib-array-arb START_TIME_ARRAY) (gl-draw-arrays GL_POINTS 0 (* array-width array-height)) (gl-disable-client-state GL_VERTEX_ARRAY) (gl-disable-client-state GL_COLOR_ARRAY) (gl-disable-vertex-attrib-array-arb VELOCITY_ARRAY) (gl-disable-vertex-attrib-array-arb START_TIME_ARRAY) ) (values create-points draw-points))) ;;; ;;; shader-stuff (original source in shader.c) ;;; (define (get-uniloc program name) (let1 loc (gl-get-uniform-location-arb program name) (when (negative? loc) (error "No such uniform:" name)) (print-opengl-error) loc)) (define (print-info-log obj) (print-opengl-error) (format #t "InfoLog:\n~a\n\n" (gl-get-info-log-arb obj)) (print-opengl-error)) (define (install-particle-shaders vsh fsh) ;; Create a vertex shader object and a fragment shader object (let* ((vs (gl-create-shader-object-arb GL_VERTEX_SHADER_ARB)) (fs (gl-create-shader-object-arb GL_FRAGMENT_SHADER_ARB)) (vert-compiled 1) (frag-compiled 1) (linked #f)) ;; Load source code strings into shaders (gl-shader-source-arb vs (list vsh)) (gl-shader-source-arb fs (list fsh)) ;; Compile the brick vertex shader, and print out ;; the compiler log file. (gl-compile-shader-arb vs) (print-opengl-error) ;; Check for OpenGL errors (set! vert-compiled (gl-get-object-parameter-arb vs GL_OBJECT_COMPILE_STATUS_ARB)) (print-info-log vs) ;; Compile the brick fragment shader, and print out ;; the compiler log file. (gl-compile-shader-arb fs) (print-opengl-error) (set! frag-compiled (gl-get-object-parameter-arb fs GL_OBJECT_COMPILE_STATUS_ARB)) (print-info-log fs) (if (or (zero? vert-compiled) (zero? frag-compiled)) #f ;; failure ;; Create a program object and attach the two compiled shaders (let1 progobj (gl-create-program-object-arb) (set! *program-object* progobj) (gl-attach-object-arb progobj vs) (gl-attach-object-arb progobj fs) ;; Bind generic attribute indices (gl-bind-attrib-location-arb progobj VELOCITY_ARRAY "Velocity") (gl-bind-attrib-location-arb progobj START_TIME_ARRAY "StartTime") ;; Link the program object and print out the info log (gl-link-program-arb progobj) (print-opengl-error) (set! linked (gl-get-object-parameter-arb progobj GL_OBJECT_LINK_STATUS_ARB)) (print-info-log progobj) (if (zero? linked) #f ;; failure (begin ;; Install program object as part of current state (gl-use-program-object-arb progobj) (gl-uniform4-arb (get-uniloc progobj "Background") 0.0 0.0 0.0 1.0) (print-opengl-error) (gl-uniform1-arb (get-uniloc progobj "Time") -5.0) (print-opengl-error) #t ;; success )) ))) ) ;;; ;;; main ;;; (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_RGB GLUT_DEPTH GLUT_DOUBLE)) (glut-init-window-size 500 500) (let* ((window (glut-create-window "3Dlabs OpenGL Shading Language Particle System Demo"))) (unless (gl-extension-available? 'GL_ARB_shader_objects 'GL_ARB_fragment_shader 'GL_ARB_vertex_shader 'GL_ARB_shading_language_100) (error "OpenGL Shading Language extensions not available")) (glut-idle-func play-proc) (glut-display-func display-proc) (glut-keyboard-func key-proc) (glut-reshape-func reshape-proc) (glut-motion-func motion-proc) (glut-mouse-func mouse-proc) (glut-special-func special-proc) (glut-timer-func TIMER_FREQUENCY_MILLIS timer-proc 0) (create-points 100 100) (gl-depth-func GL_LESS) (gl-enable GL_DEPTH_TEST) (next-clear-color) (key-proc (char->integer #\?) 0 0) ;; display help (let ((vs (file->string "particle.vert")) (fs (file->string "particle.frag"))) (and (install-particle-shaders vs fs) (glut-main-loop))) 0)) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2particle/particle.frag������������������������������������������0000644�0000764�0000764�00000000441�11533026402�022510� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// // Fragment shader for rendering a "confetti cannon" // via a partcle system // // Author: Randi Rost // // Copyright (c) 2003-2004: 3Dlabs, Inc. // // See 3Dlabs-License.txt for license information // varying vec4 Color; void main (void) { gl_FragColor = Color; }�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2particle/particle.vert������������������������������������������0000644�0000764�0000764�00000001635�11533026402�022557� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������// // Vertex shader for rendering a "confetti cannon" // via a partcle system // // Author: Randi Rost // // Copyright (c) 2003-2004: 3Dlabs, Inc. // // See 3Dlabs-License.txt for license information // uniform float Time; // updated each frame by the application uniform vec4 Background; // constant color equal to background attribute vec3 Velocity; // initial velocity attribute float StartTime; // time at which particle is activated varying vec4 Color; void main(void) { vec4 vert; float t = Time - StartTime; if (t >= 0.0) { vert = gl_Vertex + vec4 (Velocity * t, 0.0); vert.y -= 4.9 * t * t; Color = gl_Color; } else { vert = gl_Vertex; // Initial position Color = Background; // "pre-birth" color } gl_Position = gl_ModelViewProjectionMatrix * vert; }���������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2particle/README.txt���������������������������������������������0000644�0000764�0000764�00000002226�11533026402�021545� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������LAST UPDATE TO THIS FILE 18-Mar-2004 LICENSING INFORMATION See 3Dlabs-License.txt for license information OVERVIEW This is a GLUT 3.7-based demo of the OpenGL Shading Language. It includes a vertex shader/fragment shader pair that uses a particle system to render a "confetti cannon" effect. These shaders are the shaders that are described in Chapter 13 of the book, OpenGL Shading Language, published by Addison-Wesley. When launched, ogl2particle loads, compiles, and links the particle shaders, then installs them as part of current state. Keyboard commands for this demo are: b - Toggle among background clear colors q - Quit ? - Help <home> - reset zoom and rotation <space> or <click> - stop rotation <+>, <-> or <ctrl + drag> - zoom model <arrow keys> or <drag> - rotate model The application prints various diagnostic and InfoLog messages to the console window when building and applying GLSL shaders. This application can be compiled and linked using the VisualStudio.net solution file that is included (ogl2particle.sln). ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2particle/run.sh�������������������������������������������������0000755�0000764�0000764�00000000100�11533026402�021177� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh gosh -I../../../lib -I../../../src ./ogl2particle.scm ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/slbook/ogl2particle/3Dlabs-License.txt�������������������������������������0000644�0000764�0000764�00000005214�11533026402�023300� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������/************************************************************************ * * * Copyright (C) 2002-2004 3Dlabs Inc. Ltd. * * * * All rights reserved. * * * * Redistribution and use in source and binary forms, with or without * * modification, are permitted provided that the following conditions * * are met: * * * * Redistributions of source code must retain the above copyright * * notice, this list of conditions and the following disclaimer. * * * * Redistributions in binary form must reproduce the above * * copyright notice, this list of conditions and the following * * disclaimer in the documentation and/or other materials provided * * with the distribution. * * * * Neither the name of LightWork Design Ltd. nor the names of its * * contributors may be used to endorse or promote products derived * * from this software without specific prior written permission. * * * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER * * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * * POSSIBILITY OF SUCH DAMAGE. * * * ************************************************************************/ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/examples/gears.scm������������������������������������������������������������������0000644�0000764�0000764�00000021551�11533026402�015776� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/usr/bin/gosh ;; ;; 3-D gear wheels. This program is in the public domain. ;; ;; Brian Paul ;; ;; Conversion to GLUT by Mark J. Kilgard ;; Conversion to GtkGLExt by Naofumi Yasufuku ;; Port to Scheme/Gauche(GtkGLExt) by Shiro Kawai ;; Port to Scheme/Gauche(GLUT) by YOKOTA Hiroshi (use math.const) (use gl) (use gl.glut) ;(use slib) ;(require 'printf) ;; Draw a gear wheel. You'll probably want to call this function when ;; building a display list since we do a lot of trig here. ;; ;; Input: inner_radius - radius of hole at center ;; outer_radius - radius at center of teeth ;; width - width of gear ;; teeth - number of teeth ;; tooth_depth - depth of tooth (define (gear inner-radius outer-radius width teeth tooth-depth) (let ((r0 inner-radius) (r1 (- outer-radius (/ tooth-depth 2.0))) (r2 (+ outer-radius (/ tooth-depth 2.0))) (da (* 2.0 (/ pi teeth 4.0)))) (gl-shade-model GL_FLAT) (gl-normal 0.0 0.0 1.0) ;; draw front face (gl-begin GL_QUAD_STRIP) (dotimes (i (+ teeth 1)) (let1 _angle (* i 2.0 (/ pi teeth)) (gl-vertex (* r0 (cos _angle)) (* r0 (sin _angle)) (* width 0.5)) (gl-vertex (* r1 (cos _angle)) (* r1 (sin _angle)) (* width 0.5)) (when (< i teeth) (gl-vertex (* r0 (cos _angle)) (* r0 (sin _angle)) (* width 0.5)) (gl-vertex (* r1 (cos (+ _angle (* 3 da)))) (* r1 (sin (+ _angle (* 3 da)))) (* width 0.5))))) (gl-end) ;; draw front sides of teeth (gl-begin GL_QUADS) (dotimes (i teeth) (let1 _angle (* i 2.0 (/ pi teeth)) (gl-vertex (* r1 (cos _angle)) (* r1 (sin _angle)) (* width 0.5)) (gl-vertex (* r2 (cos (+ _angle da))) (* r2 (sin (+ _angle da))) (* width 0.5)) (gl-vertex (* r2 (cos (+ _angle (* 2 da)))) (* r2 (sin (+ _angle (* 2 da)))) (* width 0.5)) (gl-vertex (* r1 (cos (+ _angle (* 3 da)))) (* r1 (sin (+ _angle (* 3 da)))) (* width 0.5)))) (gl-end) (gl-normal 0.0 0.0 -1.0) ;; draw back face (gl-begin GL_QUAD_STRIP) (dotimes (i (+ teeth 1)) (let1 _angle (* i 2.0 (/ pi teeth)) (gl-vertex (* r1 (cos _angle)) (* r1 (sin _angle)) (* width -0.5)) (gl-vertex (* r0 (cos _angle)) (* r0 (sin _angle)) (* width -0.5)) (when (< i teeth) (gl-vertex (* r1 (cos (+ _angle (* 3 da)))) (* r1 (sin (+ _angle (* 3 da)))) (* width -0.5)) (gl-vertex (* r0 (cos _angle)) (* r0 (sin _angle)) (* width -0.5))))) (gl-end) ;; draw back sides of teeth (gl-begin GL_QUADS) (dotimes (i teeth) (let1 _angle (* i 2.0 (/ pi teeth)) (gl-vertex (* r1 (cos (+ _angle (* 3 da)))) (* r1 (sin (+ _angle (* 3 da)))) (* width -0.5)) (gl-vertex (* r2 (cos (+ _angle (* 2 da)))) (* r2 (sin (+ _angle (* 2 da)))) (* width -0.5)) (gl-vertex (* r2 (cos (+ _angle da))) (* r2 (sin (+ _angle da))) (* width -0.5)) (gl-vertex (* r1 (cos _angle)) (* r1 (sin _angle)) (* width -0.5)))) (gl-end) ;; draw outward faces of teeth (gl-begin GL_QUAD_STRIP) (dotimes (i teeth) (let ((_angle (* i 2.0 (/ pi teeth))) (u 0) (v 0) (len 0)) (gl-vertex (* r1 (cos _angle)) (* r1 (sin _angle)) (* width 0.5)) (gl-vertex (* r1 (cos _angle)) (* r1 (sin _angle)) (* width -0.5)) (set! u (- (* r2 (cos (+ _angle da))) (* r1 (cos _angle)))) (set! v (- (* r2 (sin (+ _angle da))) (* r1 (sin _angle)))) (set! len (sqrt (+ (* u u) (* v v)))) ;; canonicalize normal vector (set! u (/ u len)) (set! v (/ v len)) (gl-normal v (- u) 0.0) (gl-vertex (* r2 (cos (+ _angle da))) (* r2 (sin (+ _angle da))) (* width 0.5)) (gl-vertex (* r2 (cos (+ _angle da))) (* r2 (sin (+ _angle da))) (* width -0.5)) (gl-normal (cos _angle) (sin _angle) 0.0) (gl-vertex (* r2 (cos (+ _angle (* 2 da)))) (* r2 (sin (+ _angle (* 2 da)))) (* width 0.5)) (gl-vertex (* r2 (cos (+ _angle (* 2 da)))) (* r2 (sin (+ _angle (* 2 da)))) (* width -0.5)) (set! u (- (* r1 (cos (+ _angle (* 3 da)))) (* r2 (cos (+ _angle (* 2 da)))))) (set! v (- (* r1 (sin (+ _angle (* 3 da)))) (* r2 (sin (+ _angle (* 2 da)))))) (gl-normal v (- u) 0.0) (gl-vertex (* r1 (cos (+ _angle (* 3 da)))) (* r1 (sin (+ _angle (* 3 da)))) (* width 0.5)) (gl-vertex (* r1 (cos (+ _angle (* 3 da)))) (* r1 (sin (+ _angle (* 3 da)))) (* width -0.5)) (gl-normal (cos _angle) (sin _angle) 0.0))) (gl-vertex (* r1 (cos 0)) (* r1 (sin 0)) (* width 0.5)) (gl-vertex (* r1 (cos 0)) (* r1 (sin 0)) (* width -0.5)) (gl-end) (gl-shade-model GL_SMOOTH) ;; draw inside radius cylinder (gl-begin GL_QUAD_STRIP) (dotimes (i (+ teeth 1)) (let1 _angle (* i 2.0 (/ pi teeth)) (gl-normal (- (cos _angle)) (- (sin _angle)) 0.0) (gl-vertex (* r0 (cos _angle)) (* r0 (sin _angle)) (* width -0.5)) (gl-vertex (* r0 (cos _angle)) (* r0 (sin _angle)) (* width 0.5)))) (gl-end) )) (define *view-rotx* 20.0) (define *view-roty* 30.0) (define *view-rotz* 0.0) (define *gear1* 0) (define *gear2* 0) (define *gear3* 0) (define *angle* 0.0) (define *timer* #f) (define *frames* 0) (define *t0* 0) (define (draw) ;;*** OpenGL BEGIN *** (gl-clear (logior GL_COLOR_BUFFER_BIT GL_DEPTH_BUFFER_BIT)) (begin (gl-push-matrix) (gl-rotate *view-rotx* 1.0 0.0 0.0) (gl-rotate *view-roty* 0.0 1.0 0.0) (gl-rotate *view-rotz* 0.0 0.0 1.0) (begin (gl-push-matrix) (gl-translate -3.0 -2.0 0.0) (gl-rotate *angle* 0.0 0.0 1.0) (gl-call-list *gear1*) (gl-pop-matrix)) (begin (gl-push-matrix) (gl-translate 3.1 -2.0 0.0) (gl-rotate (- (* -2.0 *angle*) 9.0) 0.0 0.0 1.0) (gl-call-list *gear2*) (gl-pop-matrix)) (begin (gl-push-matrix) (gl-translate -3.1 4.2 0.0) (gl-rotate (- (* -2.0 *angle*) 25.0) 0.0 0.0 1.0) (gl-call-list *gear3*) (gl-pop-matrix)) (gl-pop-matrix)) (glut-swap-buffers) (inc! *frames*) (let1 t (glut-get GLUT_ELAPSED_TIME) (when (>= (- t *t0*) 5000) (let1 seconds (/ (- t *t0*) 1000.0) (print #`",*frames* in ,seconds seconds = ,(/ *frames* seconds) FPS") (set! *t0* t) (set! *frames* 0))))) ;; new window size or exposure (define (reshape width height) (let1 h (/ height width) ;;*** OpenGL BEGIN *** (gl-viewport 0 0 width height) (gl-matrix-mode GL_PROJECTION) (gl-load-identity) (gl-frustum -1.0 1.0 (- h) h 5.0 60.0) (gl-matrix-mode GL_MODELVIEW) (gl-load-identity) (gl-translate 0.0 0.0 -40.0) ;;*** OpenGL END *** )) (define (init) ;;*** OpenGL BEGIN *** (gl-light GL_LIGHT0 GL_POSITION '#f32(5.0 5.0 10.0 0.0)) (gl-enable GL_CULL_FACE) (gl-enable GL_LIGHTING) (gl-enable GL_LIGHT0) (gl-enable GL_DEPTH_TEST) ;; make the gears (set! *gear1* (gl-gen-lists 1)) (gl-new-list *gear1* GL_COMPILE) (gl-material GL_FRONT GL_AMBIENT_AND_DIFFUSE '#f32(0.8 0.1 0.0 1.0)) (gear 1.0 4.0 1.0 20 0.7) (gl-end-list) (set! *gear2* (gl-gen-lists 1)) (gl-new-list *gear2* GL_COMPILE) (gl-material GL_FRONT GL_AMBIENT_AND_DIFFUSE '#f32(0.0 0.8 0.2 1.0)) (gear 0.5 2.0 2.0 10 0.7) (gl-end-list) (set! *gear3* (gl-gen-lists 1)) (gl-new-list *gear3* GL_COMPILE) (gl-material GL_FRONT GL_AMBIENT_AND_DIFFUSE '#f32(0.2 0.2 1.0 1.0)) (gear 1.3 2.0 0.5 10 0.7) (gl-end-list) (gl-enable GL_NORMALIZE) (newline) (print #`"GL_RENDERER = ,(gl-get-string GL_RENDERER)") (print #`"GL_VERSION = ,(gl-get-string GL_VERSION)") (print #`"GL_VENDOR = ,(gl-get-string GL_VENDOR)") (print #`"GL_EXTENSIONS = ,(gl-get-string GL_EXTENSIONS)") (newline) ;;*** OpenGL END *** ) (define (idle) (inc! *angle* 0.5) (if (> *angle* 360) (set! *angle* (fmod *angle* 360))) (glut-post-redisplay)) ;; change view angle, exit upon ESC (define (key k x y) (let1 q (lambda () (glut-post-redisplay)) (cond ((= k (char->integer #\z)) (set! *view-rotz* (fmod (+ *view-rotz* 5.0) 360)) (q)) ((= k (char->integer #\Z)) (set! *view-rotz* (fmod (- *view-rotz* 5.0) 360)) (q)) ((= k (char->integer #\escape)) (exit))))) ;; change view angle (define (special k x y) (let1 q (lambda () (glut-post-redisplay)) (cond ((= k GLUT_KEY_UP) (set! *view-rotx* (fmod (+ *view-rotx* 5.0) 360)) (q)) ((= k GLUT_KEY_DOWN) (set! *view-rotx* (fmod (- *view-rotx* 5.0) 360)) (q)) ((= k GLUT_KEY_LEFT) (set! *view-roty* (fmod (+ *view-roty* 5.0) 360)) (q)) ((= k GLUT_KEY_RIGHT) (set! *view-roty* (fmod (- *view-roty* 5.0) 360)) (q))))) (define (visible vis) (if (= vis GLUT_VISIBLE) (glut-idle-func idle) (glut-idle-func #f))) (define (main args) (glut-init args) (glut-init-display-mode (logior GLUT_DOUBLE GLUT_DEPTH GLUT_RGB)) (glut-init-window-position 0 0) (glut-init-window-size 300 300) (glut-create-window "Gears") (init) (glut-display-func draw) (glut-reshape-func reshape) (glut-keyboard-func key) (glut-special-func special) (glut-visibility-func visible) (glut-main-loop) 0) ;; end �������������������������������������������������������������������������������������������������������������������������������������������������������Gauche-gl-0.5.1/ChangeLog���������������������������������������������������������������������������0000644�0000764�0000764�00000042767�11617171542�014152� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������2011-08-05 Shiro Kawai <shiro@acm.org> * release 0.5.1 2011-07-31 Shiro Kawai <shiro@acm.org> * src/gen-ptrs.scm, src/gen-syms.scm: Adapted to the change of gauche.cgen in Gauche 0.9.2. 2011-02-28 Shiro Kawai <shiro@acm.org> * Repository moved to git. 2010-12-11 Shiro Kawai <shiro@acm.org> * release 0.5 2010-12-03 Shiro Kawai <shiro@acm.org> * */Makefile.in: Install to site-specific directories instead of Gauche system directories (the new policy since Gauche 0.9.x). * INSTALL.in: Updated. 2010-11-26 Shiro Kawai <shiro@acm.org> * src/gl-lib.stub (gl-index): This one was missing. Added. 2010-11-25 Shiro Kawai <shiro@acm.org> * */Makefile.in, configure.in: Quote $GAUCHE_CONFIG etc, so that they work even spaces are included in the path of these programs. * Makefile.in: Added install-examples target that installs some examples into ${prefix}/examples. This is not normally called, but on MinGW, it will be useful to include examples in the binary distribution. 2010-11-21 Shiro Kawai <shiro@acm.org> * win32/freeglut-2.6.0-3: Included precompiled binary of freeglut for MinGW, for the convenience. By ./configure --with-glut=mingw-static, you can build gl.glut with freeglut statically linked to libgauche-glut.dll. This will free you from carrying around freeglut.dll. * configure.in: Check for MinGW. 2010-11-20 Shiro Kawai <shiro@acm.org> * AUTOCONF, DIST: Removed AUTOCONF; it does harm on windows where command search is case insensitive. './DIST gen' runs autoconf. * examples/glbook/example10-1.scm, examples/glbook/example13-6.scm, examples/glbook/example13-7.scm: Added missing gl-flush; lacking of it may cause some systems to hang. 2009-03-04 Shiro Kawai <shiro@acm.org> * src/*.stub: Updated uses of obsoleted (return "...") to (call "..."). 2008-10-15 Shiro Kawai <shiro@acm.org> * src/math3d-lib.stub (quatf-set4!): Added. 2008-06-10 Shiro Kawai <shiro@acm.org> * src/gauche-math3d.c (Scm_AxesToQuatfv): clamp the cos(theta) value to avoid getting NaN from rounding error when we take acosf. 2008-06-09 Shiro Kawai <shiro@acm.org> * src/math3d-lib.stub (f32vector->matrix4f!): added. (matrix4f->rotation!, matrix4f->translation!): changed the argument order to be consistent of other linear update APIs. 2008-06-08 Shiro Kawai <shiro@acm.org> * lib/gl/simple/viewer.scm: changed to keep callback and local state for each window individually. APIs may take optional window name. Without explicit window name, those APIs touches the global default settings, which will affect the windows created after the call. * src/gauche-glut.c (Scm_GlutRegisterCallback), src/gauche-glut.h, src/glut-lib.stub (glut-display-func etc): Rewrote to support per-window callbacks properly---the old version kept one closure per callback, so it was impossible to register different callbacks for multiple windows, and also it worked incorrectly since the last registered closure were called for all windows. Now we manage closure vectors associated to each window. 2008-06-06 Shiro Kawai <shiro@acm.org> * lib/gl/simple/image.scm, lib/gl/simple-image.scm: Moved gl.simple-image to gl.simple.image. * lib/gl/simple/viewer.scm: added. * examples/simple/minimum-viewer.scm: added. 2008-06-05 Shiro Kawai <shiro@acm.org> * src/gauche-math3d.c, src/gauche/math3d.h (Scm_VectorsToQuatf, Scm_AxesToQuatf): renamed from Scm_{Two|Four}Vectors... * src/math3d-lib.stub (vectors->quatf, axes->quatf): renamed accordingly. * repository migrated to subversion. * src/math3d-lib.stub (quatf-conjugate!, 4vectors->quatf, 4vectors->quatf!): added. 2008-06-04 Shiro Kawai <shiro@acm.org> * src/glext-lib.stub (gl-active-texture, gl-client-active-texture): added sans '-arb' versions, which were added in GL1.3. * src/math3d-lib.stub (vector4f-norm, matrix4f->translation, matrix4f->translation!, 2vectors->quatf, 2vectors->quatf!, vector4f-mul, vector4f-mul!, vector4f-div): added. 2007-08-05 Shiro Kawai <shiro@acm.org> * src/gl-lib.stub (gl-tex-coord-pointer, gl-index-pointer): Wrong GL functions were called. 2007-08-04 Shiro Kawai <shiro@acm.org> * src/glext-lib.stub: Added support of the framebuffer object extension. * src/gl-lib.stub (gl-tex-image-2d): allow passing #f to the texture texels array so that it is possible to allocate texture memory but not initialize it. It is useful when you want to render to the texture. 2007-07-09 Shiro Kawai <shiro@acm.org> * release 0.4.4 * configure.in, src/gauche-gl.h, src/gauche-gl.c: Fixed a problem when using GL extensions under cygwin. (Patch from Takashi Ishizaki). 2007-01-17 Shiro Kawai <shiro@acm.org> * release 0.4.3 2007-01-15 Shiro Kawai <shiro@acm.org> * src/gauche-gl.c: fixed bugs in finalizers of GLU objects, reported by Jens Thiele. * src/glut-lib.stub, cg/cg-lib.stub: adapted the new Scm_ApplyRec API of Gauche. 2006-11-11 Shiro Kawai <shiro@acm.org> * release 0.4.2 2006-11-09 Shiro Kawai <shiro@acm.org> * INSTALL.in, doc/extract: moved from using escm to generate INSTALL and INSTALL.eucjp, to avoid complication about character encodings. Using 'extract' script instead. * src/gauche/math3d.h (SCM_VECTOR4F_NORMV): use sqrtf instead of sqrt for float operation. * examples/gl-plot.scm: added. contribution from Issac Trotts. 2006-11-08 Shiro Kawai <shiro@acm.org> * src/gen-ptrs.scm (main): typo fix (pointed by Erik Greenwald) * src/gauche-gl.c (Scm_GLGetProcAddress): try glXGetProcAddressARB first, before glXGetProcAddress, since ARB version is the 'proper' one. See the comment in the source for the details. 2006-03-04 Shiro Kawai <shiro@acm.org> * configure.in: drop 'powerpc' from the check of OSX, for we have x86 OSX now. 2005-11-05 Shiro Kawai <shiro@acm.org> * release 0.4.1 2005-08-30 Shiro Kawai <shiro@acm.org> * lib/Makefile.in: gl/simple-image.scm wasn't installed. * cg/Makefile.in: gl/cg.scm wasn't installed. 2005-08-01 Shiro Kawai <shiro@acm.org> * src/configure.in, Makefile.ins: adapted to the new extension building scheme (requires Gauche-0.8.6). 2005-07-02 Shiro Kawai <shiro@acm.org> * src/gauche-gl.c (Scm_GLGetProcAddress): typo fix (Pointed by Takashi Ishizaki). * src/glext-lib.stub (gl-shader-source-arb): fix code that had declaration after expressions, causing older cc fail. 2005-06-30 Shiro Kawai <shiro@acm.org> * release 0.4 * src/gauche-gl.h, src/gauche-gl.c, configure.in: Make Scm_GLGetProcAddress work on MacOSX by using glutGetProcAddress (Patch provided by Issac Trotts.) 2005-06-14 Shiro Kawai <shiro@acm.org> * cg/*, examples/cg/* : Added NVidia's Cg Toolkit binding written by Issac Trotts. * configure.in, Makefile.in, README, INSTALL.esc: changed accordingly. 2005-06-10 Shiro Kawai <shiro@acm.org> * src/gen-ptrs.scm : use different name for the function ptr variables from the GL function name, to avoid possible conflict with gl.h. Also improved the #ifdef guards around typedefs. * src/glext-lib.stub : changed some APIs for consistency (e.g. gl-uniform*). * examples/slbool/* : fixed accordingly. * doc/gauche-gl-ref.texi : documented most supported GL and GLU APIs. 2005-06-08 Shiro Kawai <shiro@acm.org> * lib/gl/simple-image.scm : added. * src/glext-lib.stub, src/gl-lib.stub: more API support. * examples/images/* : added. 2005-06-05 Shiro Kawai <shiro@acm.org> * src/glext-api.scm: API definition of GL extension. We no longer rely on glext.h and generate various files from this file, since we cannot count on the client's glext.h which may likely be out of date and cause so much headache. * src/gen-syms.scm, src/gen-ptrs.scm : from glext-api.scm, these scripts generates gl-syms.h, gl-ptrs.h and gl-syms.c, which define all GL extension enums and function pointers. * src/gl-syms.stub : removed, for the info is now generated from glext-api.scm. * src/gauche-gl.c (Scm_GLGetProcAddress): wrapper of glXGetProcAddress or wglGetProcAddress. * src/glext-lib.stub : all calls to GL extensions are now through function pointers, and ENSURE macro sets the pointer by Scm_GLGetProcAddress. * src/gauche-gl.h, src/gauche-gl.c, src/gl-lib.stub, lib/gl.scm: Added <gl-boolean-vector> type to represent GLboolean[]. Changed gl-get-boolean(!) to deal with <gl-boolean-vector> rather than <u8vector>. THIS IS AN INCOMPATIBLE CHANGE. Note that a single value return of gl-get-boolean also changed to return a boolean value rather than an integer. * doc/gauche-gl-ref.texi: adding more stuff. 2005-06-04 Shiro Kawai <shiro@acm.org> * lib/gl.scm : added gl-extension-supported?, gl-version<?, etc. * lib/gl/util.scm : removed. 2005-06-02 Shiro Kawai <shiro@acm.org> * src/glext-lib.stub : added more bindings on vertex attributes. 2005-06-01 Shiro Kawai <shiro@acm.org> * examples/slbook : added OpenGL shading language book examples. * src/gauche-gl.h : define GL_GLEXT_PROTOTYPES to include gl extension procedure declarations properly. (In futuer, we should use function-pointer-finding way instead of relying on compile-time availability of extensions). * src/gauche-gl.c (Scm_GLGetProcAddress): added #ifdefs to compile properly. * src/glext-lib.stub : more bindings (patch provided by Issac Trotts). 2005-05-30 Shiro Kawai <shiro@acm.org> * src/glu-lib.stub (glu-build-2D-mipmaps): added (provided by Issac Trotts) 2004-08-21 Shiro Kawai <shiro@acm.org> * lib/gl/util.scm : added * src/glext-lib.stub : added ARB extension bindings. * src/gl-lib.stub, src/gl-syms.stub : moved ARB extension stuff to glext-lib.stub * src/Makefile.in : added glext-lib.stub 2004-07-05 Shiro Kawai <shiro@acm.org> * doc/gauche-gl-ref.texi : adding docs 2004-05-16 Shiro Kawai <shiro@acm.org> * configure.in : 0.3.2_pre1 2004-04-23 Shiro Kawai <shiro@acm.org> * Makefile.in, */Makefile.in, configure.in : adapted to the new packaging/installation scheme. 2003-12-16 Shiro Kawai <shiro@acm.org> * release 0.3.1 2003-12-04 Shiro Kawai <shiro@acm.org> * src/gauche-gl.c (Scm_Init_libgauche_gl) : adapted to Gauche-0.7.3 change 2003-11-11 Shiro Kawai <shiro@acm.org> * src/gauche-math3d.c (Scm_Matrix4fDecomposev): fixed a bug that referenced wrong shear vector value during calculation. 2003-10-14 Kimura Fuyuki <fuyuki@nigredo.org> * configure.in : fixed a bug that has prevented the configure script from finding glext.h 2003-10-09 Shiro Kawai <shiro@acm.org> * */Makefile.in : cleaned up install rules by using mkinstalldirs. 2003-10-04 Shiro Kawai <shiro@acm.org> * release 0.3 * configure.in, lib/gl.scm, lib/gl/glut.scm, lib/gl/math3d.scm, src/* : adapted to Cygwin - works with Cygwin 1.5.5/opengl 1.1.0-6. 2003-07-14 Shiro Kawai <shiro@acm.org> * */Makefile.in : added $(DESTDIR) to install target directories 2003-03-07 Shiro Kawai <shiro@acm.org> * doc/extract (filter): escaped '{' and '}' in regexp. 2003-02-10 Shiro Kawai <shiro@acm.org> * release 0.2.2 * doc/extract : use the newest extract so that the monolingual docs can be genarated by gosh with any internal encodings. 2003-02-07 Shiro Kawai <shiro@acm.org> * src/gauche-math3d.c (Scm_TRSToMatrix4fv): The order of multiplication was wrong (was TSR, not TRS). So as in Scm_TQSToMatrix4fv. 2003-01-29 Shiro Kawai <shiro@acm.org> * various files: applied patch from Yokota Hiroshi * examples/gears.scm : added (ported by Yokota Hiroshi) 2003-01-19 Shiro Kawai <shiro@acm.org> * lib/gl/math3d.scm (call-with-iterator): fixed typos. 2003-01-07 Shiro Kawai <shiro@acm.org> * src/math3d-lib.stub (matrix4f->rotation!): returns axis and angle, as matrix->rotation does. 2003-01-05 Shiro Kawai <shiro@acm.org> * src/gauche-math3d.c, src/math3d-lib.stub : added more matrix ops: determinant, inverse, euler angle conversion, matrix decomposition. added matrix->quaternion/quaternion->matrix conv. 2002-12-15 Shiro Kawai <shiro@acm.org> * release 0.2.1 * configure.in : add -lX11 -lXext to link gauche-gl if we're on X11 systems. FreeBSD seems to need it, and it won't do harm as far as we're on X11. * src/gauche-gl.c : add brackets around GLU object classes for consistency. * src/Makefile.in : install math3d.h under gauche subdirectory. 2002-11-12 Shiro Kawai <shiro@acm.org> * INSTALL.esc : added note about compiling on FreeBSD (based on the report from Kimura Fuyuki). 2002-10-23 Shiro Kawai <shiro@acm.org> * doc/Makefile.in : obtain the install path of info files from gauche-config. 2002-10-22 Shiro Kawai <shiro@acm.org> * lib/gl/math3d.scm : added reader ctor for vector4f-array and point4f-array 2002-10-14 Shiro Kawai <shiro@acm.org> * release 0.2 2002-10-08 Shiro Kawai <shiro@acm.org> * doc/* : start writing texinfo document. 2002-09-30 Shiro Kawai <shiro@acm.org> * src/glu-lib.stub : added glu-project! and glu-un-project!, the linear update version of glu-project and glu-un-project (thus avoid allocation) 2002-09-29 Shiro Kawai <shiro@acm.org> * src/gl-lib.stub (gl-mult-matrix): added. * src/math3d-lib.stub : added some more fns. 2002-09-28 Shiro Kawai <shiro@acm.org> * src/gauche-math3d.c, src/gauche/math3d.h, src/math3d-lib.stub : renamed 3dvector -> vector4f etc. 2002-09-27 Shiro Kawai <shiro@acm.org> * src/gl-lib.stub, lib/gl.scm : let some gl calls accept math3d object * src/math3d-lib.stub : added. 2002-09-26 Shiro Kawai <shiro@acm.org> * src/gauche-math3d.c, src/gauche/math3d.h, lib/gl/math3d : adding gl.math3d module 2002-09-22 Shiro Kawai <shiro@acm.org> * release 0.1.6 * src/gl-lib.stub : added gl-select-buffer and gl-feedback-buffer. * examples/glbook/ : more examples are added. added code to terminate the demo by ESC key to all the examples. added 'run' script that runs through all the examples. 2002-09-12 Shiro Kawai <shiro@acm.org> * src/gl-lib.stub : allow gl-call-lists to take a string as either signed or unsigned byte-array. It's convenient to draw a charater string using display lists, even though it only works for ASCII chars. Also added more texture-related functions. 2002-09-02 Shiro Kawai <shiro@acm.org> * release 0.1.5 2002-09-01 Shiro Kawai <shiro@acm.org> * src/gl-syms.stub : applied a patch for MacOS X contributed by KIMURA Shigenobu. 2002-08-30 Shiro Kawai <shiro@acm.org> * configure.in, src/Makefile.in, src/gauche-gl.h, src/gauche-glut.c, src/glu-lib.stub, src/glut-lib.stub : applied a patch for MacOS X contributed by KIMURA Shigenobu. 2002-08-29 Shiro Kawai <shiro@acm.org> * src/gauche-gl.c : refactored pixel data format check as Scm_GLPixelDataCheck. * src/gl-lib.stub : added some GL1.2 and extension procs. * examples/glbook/example8-4.scm : renamed from example8-3.scm 2002-08-27 Shiro Kawai <shiro@acm.org> * examples/glbook/example8-3.scm : added 2002-08-25 Shiro Kawai <shiro@acm.org> * src/gl-syms.stub, src/gauche-gl.c : #ifdef-ed most of extension symbols, as well as OpenGL 1.1, 1,2 and a part of 1.3 features. * src/glut-lib.stub : fixed a long-missed bug in glut-init that assumed the passed argument list lacks argv[0]. 2002-08-17 Shiro Kawai <shiro@acm.org> * src/gl-lib.stub : added gl-call-lists * src/gauche-glut.c, src/glut-lib.stub : rewrote using define-enum * examples/glbook/example7-[125].scm : added 2002-08-16 Shiro Kawai <shiro@acm.org> * src/glstate.scm: added code to generate #ifdef swithc for OpenGL1.2 state variables. * examples/glbook/example6-[345].scm: added 2002-07-31 Shiro Kawai <shiro@acm.org> * release 0.1.4 * src/*.stub : updated accodring to the new syntax of genstub. 2002-07-23 Shiro Kawai <shiro@acm.org> * src/*.stub : updated accodring to the new syntax of genstub. 2002-07-21 Shiro Kawai <shiro@acm.org> * src/gauche-gl.h : use SCM_CLASS_DECL macro instead of direct declaration of "extern ScmClass". Preparation for cygwin port. 2002-07-18 Shiro Kawai <shiro@acm.org> * release 0.1.3 * src/gl-syms.stub, src/glu-lib.stub: #ifdef-ed out GL_ALL_CLIENT_ATTIB_BITS and GLU_INCOMPATIBLE_GL_VERSION for they are not supported on nVidia linux driver (thanks to Karl Trygve Kalleberg for pointing this out). * src/glstate.scm : commented out gl_polygon_offset_bias_ext for it nost on nVidia linux driver (thanks to Karl Trygve Kalleberg for pointing this out). * configure.in : added check of GL/glext.h (thanks to Karl Trygve Kalleberg for pointing this out). * src/gauche-gl.h : include GL/glext.h if available. * example/* : removed escapes of uppercase symbols; they're ugly, and it's been some time since Gauche became case-sensitive. * src/gl-syms.stub : splitted symbol definitions from gl-lib.stub. 2002-02-14 Shiro Kawai <shiro@acm.org> * release 0.1.2 * examples/glbook/*.scm : fix some files that require (use srfi-4). 2002-02-11 Shiro Kawai <shiro@acm.org> * various files : adapted to Gauche 0.5.1 new extension protocol. 2001-12-21 Shiro Kawai <shiro@acm.org> * release 0.1.1 * src/Makefile.in : adapted to Gauche-0.4.11 2001-11-21 Shiro Kawai <shiro@acm.org> * src/glu-lib.stub : added more Nurbs support fns. 2001-11-20 Shiro Kawai <shiro@acm.org> * src/gauche-gl.h, src/gauche-gl.c, src/glu-lib.stub : added GLU quadrics, nurbs and tesselators (partially). 2001-10-19 Shiro Kawai <shiro@acm.org> * examples/mandelbrot.scm : added texturing sample. 2001-10-15 Shiro Kawai <shiro@acm.org> * examples/glbook/ : added example6-2 2001-10-14 Shiro Kawai <shiro@acm.org> * release 0.1 ���������Gauche-gl-0.5.1/COPYING�����������������������������������������������������������������������������0000644�0000764�0000764�00000002226�11533026402�013404� 0����������������������������������������������������������������������������������������������������ustar �shiro���������������������������shiro������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������ Copyright (c) 2001-2010 Shiro Kawai, All rights reserved. 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. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������