ࡱ> LNEFGHIJKq ~bjbjt+t+ 12AA:y9]^^^^^^^ 8   CajRv !"!!!1$l D N```````$bd"a!^S-$1$SS"aCW^^!!CRCWCWCWS:^!^!`r..^^^^S`CWCW[n`|^^`!.$JZ Sp`PROGRAMMING COLECOVISION GAMES DOCUMENT WRITTEN BY DANIEL BIENVENU 2003 Version 1-E Last update: August 4th, 2003 Table of content  TM \o "1-4" Table of content  RENVOIPAGE _Toc47724428 \h 2 INTRODUCTION  RENVOIPAGE _Toc47724429 \h 6 SETUP YOUR DEVELOPMENT ENVIRONMENT  RENVOIPAGE _Toc47724430 \h 7 MEMORY  RENVOIPAGE _Toc47724431 \h 8 ROM (Read Only Memory)  RENVOIPAGE _Toc47724432 \h 8 RAM (Read-Write Memory)  RENVOIPAGE _Toc47724433 \h 8 MEMORY MAP  RENVOIPAGE _Toc47724434 \h 8 RAM USED BY THE COLECOVISION BIOS  RENVOIPAGE _Toc47724435 \h 9 DATA TYPES  RENVOIPAGE _Toc47724436 \h 10 char  RENVOIPAGE _Toc47724437 \h 10 byte  RENVOIPAGE _Toc47724438 \h 10 int  RENVOIPAGE _Toc47724439 \h 10 unsigned  RENVOIPAGE _Toc47724440 \h 10 float  RENVOIPAGE _Toc47724441 \h 11 char [n]  RENVOIPAGE _Toc47724442 \h 11 * (pointer)  RENVOIPAGE _Toc47724443 \h 11 void  RENVOIPAGE _Toc47724444 \h 11 OPERATORS  RENVOIPAGE _Toc47724445 \h 12 USUAL SET OF BINARY ARITHMETIC OPERATORS:  RENVOIPAGE _Toc47724446 \h 12 INCREMENT (++) AND DECREMENT (--)  RENVOIPAGE _Toc47724447 \h 12 BITWISE OPERATORS  RENVOIPAGE _Toc47724448 \h 12 COMBINED OPERATORS  RENVOIPAGE _Toc47724449 \h 12 RELATIONAL OPERATORS  RENVOIPAGE _Toc47724450 \h 13 LOGICAL OPERATORS  RENVOIPAGE _Toc47724451 \h 13 SCREEN MODE  RENVOIPAGE _Toc47724452 \h 14 CHARACTERS  RENVOIPAGE _Toc47724453 \h 15 VIDEO MEMORY FOR CHARACTERS  RENVOIPAGE _Toc47724454 \h 15 CHARACTER PATTERN  RENVOIPAGE _Toc47724455 \h 16 EXAMPLE - SPACESHIP  RENVOIPAGE _Toc47724456 \h 16 UPLOAD CHARACTER SET  RENVOIPAGE _Toc47724457 \h 18 SPRITES  RENVOIPAGE _Toc47724458 \h 19 SPRITES COLOR  RENVOIPAGE _Toc47724459 \h 19 SPRITES PATTERN  RENVOIPAGE _Toc47724460 \h 19 SPRITES LOCATIONS ON SCREEN  RENVOIPAGE _Toc47724461 \h 20 SPRITES ROUTINES  RENVOIPAGE _Toc47724462 \h 20 TOOLS  RENVOIPAGE _Toc47724463 \h 21 WAV2CV  RENVOIPAGE _Toc47724464 \h 21 WAV2CVDS  RENVOIPAGE _Toc47724465 \h 22 I.C.V.G.M.  RENVOIPAGE _Toc47724466 \h 23 BMP2PP  RENVOIPAGE _Toc47724467 \h 24 PP2C and PP2ASM  RENVOIPAGE _Toc47724468 \h 25 CVPAINT  RENVOIPAGE _Toc47724469 \h 26 CCI - Coleco Compiler Interface  RENVOIPAGE _Toc47724470 \h 27 How to use CCI?  RENVOIPAGE _Toc47724471 \h 27 JOYSTICK  RENVOIPAGE _Toc47724472 \h 28 JOYPAD  RENVOIPAGE _Toc47724473 \h 28 KEYPAD  RENVOIPAGE _Toc47724474 \h 28 SOUND  RENVOIPAGE _Toc47724475 \h 29 THE SOUND ROUTINES  RENVOIPAGE _Toc47724476 \h 29 update_sound ();  RENVOIPAGE _Toc47724477 \h 29 start_sound (sound_data,sound_priority);  RENVOIPAGE _Toc47724478 \h 29 sound_pointer = start_sound(sound_data, sound_priority);  RENVOIPAGE _Toc47724479 \h 29 stop_sound(sound_pointer);  RENVOIPAGE _Toc47724480 \h 30 sound_on();  RENVOIPAGE _Toc47724481 \h 30 sound_off();  RENVOIPAGE _Toc47724482 \h 30 play_dsound(sound_pointer, step);  RENVOIPAGE _Toc47724483 \h 30 THE WAY I ADD SOUNDS IN MY COLECO PROJECTS  RENVOIPAGE _Toc47724484 \h 31 LIBRARY: COLECO  RENVOIPAGE _Toc47724485 \h 32 ROUTINES IN COLECO LIBRARY  RENVOIPAGE _Toc47724486 \h 32 vdp_out  RENVOIPAGE _Toc47724487 \h 32 put_vram  RENVOIPAGE _Toc47724488 \h 32 get_vram  RENVOIPAGE _Toc47724489 \h 32 fill_vram  RENVOIPAGE _Toc47724490 \h 32 put_vram_pattern  RENVOIPAGE _Toc47724491 \h 32 set_default_name_table  RENVOIPAGE _Toc47724492 \h 32 disable_nmi  RENVOIPAGE _Toc47724493 \h 33 enable_nmi  RENVOIPAGE _Toc47724494 \h 33 screen_on  RENVOIPAGE _Toc47724495 \h 33 screen_off  RENVOIPAGE _Toc47724496 \h 33 delay  RENVOIPAGE _Toc47724497 \h 33 update_sound  RENVOIPAGE _Toc47724498 \h 33 start_sound  RENVOIPAGE _Toc47724499 \h 33 stop_sound  RENVOIPAGE _Toc47724500 \h 33 sound_on  RENVOIPAGE _Toc47724501 \h 34 sound_off  RENVOIPAGE _Toc47724502 \h 34 sprites table  RENVOIPAGE _Toc47724503 \h 34 update_sprites  RENVOIPAGE _Toc47724504 \h 34 upload_ascii  RENVOIPAGE _Toc47724505 \h 34 get_random  RENVOIPAGE _Toc47724506 \h 34 LIBRARY: GETPUT  RENVOIPAGE _Toc47724507 \h 35 GETPUT  RENVOIPAGE _Toc47724508 \h 35 cls  RENVOIPAGE _Toc47724509 \h 35 get_char  RENVOIPAGE _Toc47724510 \h 35 put_char  RENVOIPAGE _Toc47724511 \h 35 center_string  RENVOIPAGE _Toc47724512 \h 35 print_at  RENVOIPAGE _Toc47724513 \h 36 pause  RENVOIPAGE _Toc47724514 \h 36 GETPUT 1  RENVOIPAGE _Toc47724515 \h 37 pause_delay  RENVOIPAGE _Toc47724516 \h 37 rnd  RENVOIPAGE _Toc47724517 \h 37 rnd_byte  RENVOIPAGE _Toc47724518 \h 37 str  RENVOIPAGE _Toc47724519 \h 37 show_picture  RENVOIPAGE _Toc47724520 \h 37 screen_mode_2_bitmap  RENVOIPAGE _Toc47724521 \h 38 screen_mode_2_text  RENVOIPAGE _Toc47724522 \h 38 upload_default_ascii  RENVOIPAGE _Toc47724523 \h 38 paper  RENVOIPAGE _Toc47724524 \h 38 load_color  RENVOIPAGE _Toc47724525 \h 38 load_namerle  RENVOIPAGE _Toc47724526 \h 38 load_patternrle  RENVOIPAGE _Toc47724527 \h 39 load_spatternrle  RENVOIPAGE _Toc47724528 \h 39 change_pattern  RENVOIPAGE _Toc47724529 \h 39 change_spattern  RENVOIPAGE _Toc47724530 \h 39 change_color  RENVOIPAGE _Toc47724531 \h 39 fill_color  RENVOIPAGE _Toc47724532 \h 40 change_multicolor  RENVOIPAGE _Toc47724533 \h 40 change_multicolor_pattern  RENVOIPAGE _Toc47724534 \h 40 choice_keypad_1 and choice_keypad_2  RENVOIPAGE _Toc47724535 \h 40 updatesprites  RENVOIPAGE _Toc47724536 \h 40 sprites_simple  RENVOIPAGE _Toc47724537 \h 41 sprites_double  RENVOIPAGE _Toc47724538 \h 41 sprites_8x8  RENVOIPAGE _Toc47724539 \h 41 sprites_16x16  RENVOIPAGE _Toc47724540 \h 41 Set of "AND" masks for the joystick: UP, DOWN, LEFT, RIGHT and FIREs  RENVOIPAGE _Toc47724541 \h 41 wipe_off_down  RENVOIPAGE _Toc47724542 \h 41 wipe_off_up  RENVOIPAGE _Toc47724543 \h 41 DSound library  RENVOIPAGE _Toc47724544 \h 42 play_dsound  RENVOIPAGE _Toc47724545 \h 42 C library  RENVOIPAGE _Toc47724546 \h 42 memcpy  RENVOIPAGE _Toc47724547 \h 42 sizeof  RENVOIPAGE _Toc47724548 \h 42 GETPUT 1 - VIDEO MEMORY MAP  RENVOIPAGE _Toc47724549 \h 43 SHOW BITMAP PICTURE IN SCREEN MODE 2 WITHOUT GETPUT 1  RENVOIPAGE _Toc47724550 \h 44 SHOW BITMAP PICTURE IN SCREEN MODE 2 WITH GETPUT 1  RENVOIPAGE _Toc47724551 \h 46 FACES - SPRITES DEMO  RENVOIPAGE _Toc47724552 \h 47 REBOUND  RENVOIPAGE _Toc47724553 \h 49 THE IDEA  RENVOIPAGE _Toc47724554 \h 49 THE PROGRAM  RENVOIPAGE _Toc47724555 \h 51 COMPILING  RENVOIPAGE _Toc47724556 \h 54 STILL BUGY?  RENVOIPAGE _Toc47724557 \h 58 CAN BE BETTER?  RENVOIPAGE _Toc47724558 \h 59 SMASH - A VIDEO GAME VERSION OF REBOUND  RENVOIPAGE _Toc47724559 \h 60 PADDLE GRAPHIC  RENVOIPAGE _Toc47724560 \h 62 THE PROGRAM  RENVOIPAGE _Toc47724561 \h 63 DEBUG EXERCISE  RENVOIPAGE _Toc47724562 \h 67 A TEST PROGRAM TO DEBUG  RENVOIPAGE _Toc47724563 \h 67 SOLUTION  RENVOIPAGE _Toc47724564 \h 68 ANNEXE - MORE TECHNICAL INFORMATIONS  RENVOIPAGE _Toc47724565 \h 70 HARDWARE SPECIFICATIONS  RENVOIPAGE _Toc47724566 \h 70 CARTRIDGE (ROM) HEADER  RENVOIPAGE _Toc47724567 \h 71 SOUND GENERATION HARDWARE  RENVOIPAGE _Toc47724568 \h 73 TONE GENERATORS  RENVOIPAGE _Toc47724569 \h 73 NOISE GENERATOR  RENVOIPAGE _Toc47724570 \h 73 CONTROL REGISTERS  RENVOIPAGE _Toc47724571 \h 74 SOUND DATA FORMATS  RENVOIPAGE _Toc47724572 \h 74 NOTES TABLE CONVERSION: FREQUENCIES (Hz) <-> HEX values  RENVOIPAGE _Toc47724573 \h 75 SCALES  RENVOIPAGE _Toc47724574 \h 75 VDP - VIDEO DISPLAY PROCESSOR  RENVOIPAGE _Toc47724575 \h 76 REGISTERS  RENVOIPAGE _Toc47724576 \h 76 Control registers  RENVOIPAGE _Toc47724577 \h 76 Status register  RENVOIPAGE _Toc47724578 \h 76 VDP register access  RENVOIPAGE _Toc47724579 \h 77 NMI Non maskable interrupt  RENVOIPAGE _Toc47724580 \h 77 Screen modes  RENVOIPAGE _Toc47724581 \h 78 Mode 0  RENVOIPAGE _Toc47724582 \h 78 Mode 1  RENVOIPAGE _Toc47724583 \h 78 Mode 2  RENVOIPAGE _Toc47724584 \h 78 Mode 3  RENVOIPAGE _Toc47724585 \h 78 COLOR PALETTE  RENVOIPAGE _Toc47724586 \h 79 COLECO ASCII TABLE  RENVOIPAGE _Toc47724587 \h 80  INTRODUCTION This text shows you the basic of ColecoVision capability and where you can find more information and software. You can do your own tools and documentation too. You need to know how to program in ANSI C language first. Learn the C language by yourself. You need also to improve your programming skills by testing all the concepts and routines mentioned in this documentation before thinking of releasing new ColecoVision games. Have fun! ( SETUP YOUR DEVELOPMENT ENVIRONMENT If you are using a Windows environment or a Linux with a great DOS emulator, you can setup your ColecoVision programming environment. First, you need to download the Hi-Tech C compiler for CP/M. Second, you need to download a CP/M emulator for your system. 22NICE for DOS is my personal choice but you need to read carefully the text files. Third, you need to download the Coleco library by Marcel de Kogel. You have to extract files into the Hi-Tech C compiler directory. To avoid all these steps, you can download an archive from my Coleco web site named z80.zip. Use your preferred text editor to code in C your Coleco projects. Make sure your C code is in a pure text file format before trying to compile it. My personal choice is NOTEPAD or WORDPAD for too big text files. You have two choices now to access to your Coleco environment: You can create a shortcut on your desktop to run the CP/M emulator and go directly into the Hi-Tech C compiler directory. You can download from my Coleco web site my personal front-end for windows named CCI (Coleco Compiler Interface). You just need to put the EXE file into your project directory to avoid using the command-line based interface under DOS. There is a help section in my Coleco web site where you can find how to use the compiler and a few samples like how to create your own screen show. MEMORY Before programming a ColecoVision project, you must learn about the memory "limits" for this game system. ROM (Read Only Memory) The binary code in the cartridge is named ROM because it's a read-only memory. The memory space for the game starts at 8000. Today, we have no problem using big memory capacity so we try to use all the 32K available: 8000 - FFFF. At 8000, there is a header. The header starts with 55 AA or AA 55. After this 2 bytes, there are hex values in the header to say where start the game, what to do if there is an interrupt (example: rst 08h, NMI), etc. The ColecoVision BIOS start at the address 0000 and it's the first thing running in the ColecoVision game system. First, the BIOS check if a cartridge is inserted by looking for the first two bytes of the ROM (cartridge). If these two bytes are 55 AA or AA 55, the Coleco BIOS check the start address in the ROM header then start the game, otherwise, a default screen appear about how to insert a cartridge: TURN GAME OFF BEFORE INSERTING CARTRIDGE OR EXPANSION MODULE. Second, the BIOS had many routines like sounds and sprites routines. Using the BIOS routines gives more free ROM space for the game itself but you have to be careful to not use address in RAM used by the BIOS. By using the Coleco library by Marcel de Kogel, don't worry about the header of your Coleco project because its already compiled into the crtcv.obj file. RAM (Read-Write Memory) The ColecoVision RAM is a bit weird. There is only 1K RAM (with a copy of itself at another memory location) and this RAM is not fully available if you use routines in the Coleco BIOS. The Coleco BIOS routines use some parts of the RAM at specific memory locations above 73B8. This is important to know to avoid memory corruption by using too big tables in RAM. Dont worry, normally, your first ColecoVision project will never use more than the free memory space available except if you implement complex AI and/or big dynamic environment. MEMORY MAP The ColecoVision BIOS starts at the address 0000 and ends at the address 1FFF. The cartridge (ROM) starts at the address 8000 and ends at the address FFFF. The read-write memory space is only 1K. The real addresses for the RAM are 7000-73FF. The RAM space addresses available in memory for your ColecoVision projects are 7000-73B8. The stack pointer is initialised at 73B9 (firsts instructions in BIOS) but the stack really started at 73B8, 73B7, 73B6, etc. If you need more RAM space, you can use the video memory (at your own risk). RAM USED BY THE COLECOVISION BIOS Thanks to Steve Bgin for all the informations (for expert only). 7020-702A: Used by BIOS sound routines 73B9-73C2: Used but we don't know by which routines yet 73C3: Used by video Read/Write routines. Copy of the video control register number 0. 73C4: Used by video Read/Write routines. Copy of the video control register number 1. 73C5: Seems to be unused by any BIOS routines (free) 73C6: Used by BIOS sprite routines. 73C7: Used by BIOS sprite routines. 73C8-73C9: Used by BIOS to generate Random numbers (call 1FFD). 73CA-73D2: Used by BIOS sprite routines. 73D3-73D6: Used by BIOS timer routines. 73D7-73EA: Used by BIOS joystick routines. (call 1FEB) 73EB: Used by BIOS joystick routines. Value of spinner on port#1 73EC: Used by BIOS joystick routines. Value of spinner on port#2 73ED: Seems to be unused by any BIOS routines (free) 73EE-73F1: Used by BIOS joystick routines. Raw joystick data from ports (Call 1F76). 73F2-73F3: Used Address of sprites attribute in VRAM. 73F4-73F5: Used by video Read/Write routines. Address of sprites pattern in VRAM. 73F6-73F7: Used by video Read/Write routines. Address of screen image (NAME). 73F8-73F9: Used by video Read/Write routines. Address of character pattern (PATTERN). 73FA-73FB: Used by video Read/Write routines. Address of character color pattern (COLOR). 73FC-73FD: Seems to be unused by any BIOS routines (free) 73FE-73FF: Temporary used when a call at routine in 1fbe is made. Ok, it's more information than you really need to know especially if you program your ColecoVision projects in C like me. The most important to know is some BIOS routines are used in the ColecoVision library. You can't use the address 73B9-73FF in RAM for your own purpose. The only exception is the RAM used by the BIOS for the sound routines. Marcel de Kogel writes his own sound routines in the ColecoVision library so you can use the addresses 7020-702A for your game without any problem. The only problem is the data sound format is not the same between BIOS sound routines and ColecoVision library sounds routines. In this document, you will not find information about BIOS sound routines. If you don't really know what is a stack, you may have a problem to understand why you can't really use all the free memory space 7000-73B8. If you program in C language, the Hi-Tech C compiler add some codes "pop" and "push" to stock information in the stack like the registers status. If you program in ASM, you have to add by yourself each "pop" and "push" instructions so you have more control but you have also more responsibility if your program doesn't run well. The stack is filled with data by decreasing first the stack pointer then by adding information. So, the real RAM space you can use depends on how big your stack can be. I think you must not use RAM address over 7300, otherwise you may have a problem of memory corruption. DATA TYPES char definition: character or short integer 1 byte and signed values : [ -128, 127 ] Exemple: char c = 'A'; byte definition: byte or short unsigned integer 1 byte and unsigned values : [ 0, 255 ] This type is defined in the coleco.h file. Exemple: byte i = 200; int definition: integer 2 bytes and signed values : [ -32768, 32767 ] Exemple: int i = -1000; unsigned definition: unsigned integer 2 bytes and unsigned values : [ 0, 65535 ] Exemple: unsigned score = 1000; print_at (10,0,str(score)); float definition: floating point 2 bytes and signed values : [ ??, ?? ] Exemple: float ratio = 10.0/4.0; Note: Try to never use floating point variables. char [n] definition: character array or string max 256 bytes long Note: A string ends with the character '/0'. * (pointer) definition: pointer, address in memory where is the data 2 bytes values : [ 0000 , FFFF ] (0,65535) Exemple: /* a char pointer */ char *msg; Note: A character pointer is not a character array. void definition: no defined type, void 2 bytes by default Exemple: void *msg; Note: This data type must be reserved for routines only. OPERATORS USUAL SET OF BINARY ARITHMETIC OPERATORS: multiplication (*) division (/) modulus (%) addition (+) subtraction (-) Note: Unary minus performs an arithmetic negation. Unary plus is supported. INCREMENT (++) AND DECREMENT (--) The most well know unary operators are increment (++) and decrement (--). These allow you to use a single operator that "adds 1 to" or "subtracts 1 from" any value. The increment and decrement can be done in the middle of an expression, and you can even decide whether you want it done before or after the expression is evaluated. Example: int sum = a + b++; /* sum = a + b then increment 'b' */ int sum = --a + b; /* decrement 'a' then sum = a + b */ BITWISE OPERATORS shift left (<<) shift right (>>) AND (&) OR (|) XOR (^) NOT (~) COMBINED OPERATORS The expression form: = ; Can be replaced with: = ; Exemple: a +=b; /* is the same thing as the expression "a = a + b;" RELATIONAL OPERATORS Relational operators allow you to compare two values, yielding a result based on whether the comparison is true or false. If the comparison is false, then the resulting value is 0. greater than (>) greater than or equal (>=) less than (<) less than or equal (<=) equal to (==) not equal to (!=) LOGICAL OPERATORS There are three logical operators: AND (&&) OR (||) NOT (!) Example: If (!(a==b && b==c)) /* If not (a equal to b and b equal to c) then */ If (a /* Important Video Memory Locations based on VDP control registers values */ #define chrgen 0x0000 #define coltab 0x2000 #define chrtab 0x1800 /* title is the name of the bitmap title screen table generated with PP2C in another C file */ extern byte title[]; /* The SHOOT sound from Cosmo Challenge */ static byte shoot_sound[]= { 1, 0xf8,0xe4, 1,0xf2, 1,0xe4, 1,0x63,0x02,0x01,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 5, 0,0,0}; /* The NMI routine: update sound at every vertical retrace. 60Hz (NTSC) or 50Hz (PAL) */ void nmi(void) { update_sound (); } /* To setup the graphic screen mode 2 */ void screen_mode_2_bitmap(void) { /* disable NMI calls*/ disable_nmi(); /* screen mode 2 */ vdp_out (0,2); /* set video memory address for chrgen and colortable */ vdp_out (3,0xff); vdp_out (4,0x03); /* fill screen with characters 00 to FF three times */ set_default_name_table (chrtab); /* clear chrgen and color table */ fill_vram(chrgen,0x00,0x1800); fill_vram(coltab,0x00,0x1800); /* setup sprites and video memory size and enable NMI calls*/ vdp_out(1,0xe2); } /* By using tools like BMP2PP by Marcel de Kogel and PP2C by Daniel Bienvenu (me), you can do a bitmap title screen without any problem. The title screen will be RLE encoded so you can use the following lines to show the title screen. */ /* To show a picture on screen */ void show_picture(void *picture) { /* turn display off */ screen_off (); /* disable NMI calls*/ disable_nmi (); /* Upload picture */ rle2vram (rle2vram(picture,coltab),chrgen); /* turn display on */ screen_on (); /* enable NMI calls*/ enable_nmi (); } /* The "main" routine to show the title screen can be something like this: */ void main(void) { /* init graphic mode 2 */ screen_mode_2_bitmap(); /* show title screen */ show_picture(title); /* play sound SHOOT with priority 1 */ start_sound(shoot_sound,1); /* infinite loop: constant relational expression (warning) */ while(1); } Note: See the order of the routines. If a routine needs another one to run properly, this routine must be after the other one. Otherwise, the compiler will not see the dependency and the result will never work properly. A solution can be: adding routines header at the top of the C file just before the routines. SHOW BITMAP PICTURE IN SCREEN MODE 2 WITH GETPUT 1 The following C code is used to show a bitmap title screen by using getput library routines. /* This is the header files (.h) to include in the project for the Coleco library by Marcel de Kogel and the Getput 1 library by Daniel Bienvenu */ #include #include /* title is the name of the bitmap title screen table generated with PP2C in another C file */ extern byte title[]; /* The SHOOT sound from Cosmo Challenge */ static byte shoot_sound[]= { 1, 0xf8,0xe4, 1,0xf2, 1,0xe4, 1,0x63,0x02,0x01,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 5, 0,0,0}; /* The NMI routine: update sound */ void nmi(void) { update_sound (); } /* Do a title screen by using tools like BMP2PP by Marcel de Kogel and PP2C by Daniel Bienvenu (me). The title screen will be RLE encoded so you have to use show_picture */ /* The "main" routine to show the title screen can be something like this: */ void main(void) { /* init graphic mode 2 */ screen_mode_2_bitmap(); /* show title screen */ show_picture(title); /* play noise sound: SHOOT with priority 1 */ start_sound(shoot_sound,1); /* infinite loop: constant relational expression (warning) */ while(1); } This new version of the "picture show" program with getput library is smaller than the first version. Getput 1 rules! It's the solution to program very quickly a ColecoVision project in C. FACES - SPRITES DEMO /* To test this demo, use ADAMEM with the following command line: */ /* cvem -vi 1 -if 60 -sprite 1 result.rom */ #include #include /* This flag is used to avoid VRAM corruption */ byte flag; /* sprite pattern - laughing face */ byte sprite_pattern[]= { 0,3,15,25,54,63,127,127, 127,112,48,56,30,15,3,0, 0,224,248,204,182,254,255,255, 255,7,6,14,60,248,224,0}; void initialize(void) { byte i; /* load 1 big 16x16 sprite pattern in video memory */ change_spattern(0,sprite_pattern,4); /* init the sprites table */ clear_sprites(0,64); for (i=1;i<6;i++) { sprites[i].y = i<<5; sprites[i].y--; sprites[i].x = i<<5; sprites[i].pattern = 0; sprites[i].colour = i<<1; sprites[i].colour += 3; } sprites_double(); } void faces(void) { byte k; initialize(); while(keypad_1 == 6) delay(1); /* Allow updating sprites on screen now */ flag=1; while(keypad_1 != 6) { /* UPDATE SPRITES POSITION */ k = keypad_1; if (k>0 && k<6) { if (joypad_1&LEFT) sprites[k].x--; if (joypad_1&RIGHT) sprites[k].x++; if (joypad_1&UP) sprites[k].y--; if (joypad_1&DOWN) sprites[k].y++; if (sprites[k].y ==193 ) sprites[k].y = 241; if (sprites[k].y ==240 ) sprites[k].y = 192; } /* TO SLOWDOWN THE ANIMATION */ delay(1); } } void main(void) { /* Don't update sprites on screen now */ flag=0; /* Initialize the VDP to the screen mode 2 */ screen_mode_2_text(); /* Set the default ascii character set */ upload_default_ascii (BOLD); /* Print an important message on screen */ center_string (10,"HOLD A NUMBER BETWEEN 1 AND 5"); center_string (11,"TO SELECT A SPRITE"); center_string (13,"THEN USE THE JOYSTICK"); center_string (14,"TO MOVE IT"); center_string (16,"PRESS 6 TO RESET POSITIONS"); /* Start the sprite demo program */ faces(); } /* NMI routine: update sprites at every vertical retrace */ void nmi(void) { /* THIS FLAG IS NECESSARY TO AVOID VRAM CORRUPTION */ if (flag) updatesprites(0,7); } Note: To avoid VRAM corruption, you must avoid updating VRAM inside and outside the NMI routine. Using a flag in the NMI routine like this sprites example is not a very good idea. There still a possibility of corruption with a flag. The right places to update sprites are after updating the "sprites" table and before a delay. REBOUND THE IDEA The following text explains how to program a simple bouncing ball in characters. First of all, we need to figure out how to move a character on screen. A character is not a sprite so you can't move a character on screen. You can create the illusion of a moving character. To create the illusion of a moving character, you have to erase the character you want to move by printing a "background" character over it and then print the same character at another location near the last location to create the illusion of a moving character. So, you need to know the exact location of the character to move at any moment. You will use the type "char" to use the negative and positive values: [-128,127]. /* To keep the information about the location of the ball */ char ball_x; char ball_y; () ball_y = 0; /* top */ ball_x = 0; /* left */ Now, to create the movement of the bouncing ball, you have to change the location of the ball by adding the direction in X and Y to change the X and Y values of the ball. /* To keep the information about the direction of the ball */ char ball_dx; char ball_dy; () ball_dx = 1; /* moving to the right */ ball_dy = 1; /* moving to the bottom */ () ball_x += ball_dx; ball_y += ball_dy; , to create the bouncing effect, you have to change the direction of the ball under some conditions. For this simple bouncing effect, you will use the border of the screen to rebound the ball on it. To know if the ball reach the border of the screen, you simply have to check the location of the ball you keep in memory. You can add a sound to indicate the bouncing condition is reached. if ( ball_x == 0 || ball_x == 31) { ball_dx = -ball_dx; pop(); } if ( ball_y == 0 || ball_y == 23) { ball_dy = -ball_dy; pop(); } Finally, to see the ball on screen, you must add, at the strategic places, the routines to "erase" and "print" the ball at the X and Y location. You need to add a delay to slow down the animation. /* Erase the ball at the actual location */ put_char ( ball_x, ball_y, 32 ); /* 32 is the value of the SPACE character */ /* Update the value of the location of the ball */ update_ball_location (); /* Print the ball at the new location */ put_char ( ball_x, ball_y, 'O' ); /* Slowdown the animation */ delay(5); To keep running, you have to do a LOOP with a condition to stop the animation like pressing the fire button #1 on joystick #1. while (!(joypad_1&FIRE1)) { /* Move the ball on screen */ () } THE PROGRAM To keep it simple, you can use the capital letter 'O' to be the ball and the "put_char" routine in "getput" library to print and erase the ball on screen. #include #include /* To keep the information about the location of the ball */ char ball_x; char ball_y; /* To keep the information about the direction of the ball */ char ball_dx; char ball_dy; /* A sound effect named "pop" is played when the ball reaches the border of the screen */ static byte pop_sound[] = { 0, 0x63,0xf,1, 0x81,0xa0,0x90,1, 0x81,0x1c,0x97,1, 0x81,0x2c,0x9d,2, 0x81,0x32,0x9e,1, 0,0,0 }; /* To start the "pop" sound */ static void pop (void) { start_sound (pop_sound,2); } /* To initialize the location and direction of the ball */ static void initialize (void) { ball_y = 0; /* top */ ball_x = 0; /* left */ ball_dx = 1; /* moving to the right */ ball_dy = 1; /* moving to the bottom */ } /* Change the direction of the ball when bouncing horizontally on the border of the screen */ static void bounce_on_walls_in_X (void) { if ( ball_x == 0 ) { ball_dx = -ball_dx; pop(); } if ( ball_x == 31 ) { ball_dx = -ball_dx; pop(); } } /* Change the direction of the ball when bouncing vertically on the border of the screen */ static void bounce_on_walls_in_Y (void) { if ( ball_y == 0 ) { ball_dy = -ball_dy; pop(); } if ( ball_y == 23 ) { ball_dy = -ball_dy; pop(); } } /* To update the location and direction of the ball. */ static void update_ball_location (void) { ball_x += ball_dx; ball_y += ball_dy; bounce_on_walls_in_X(); bounce_on_walls_in_Y(); } /* This part of the program is the game engine and it's used to rebound a ball on screen */ static void bounce(void) { /* Initialize the ball location and direction */ initialize (); /* Clear screen */ cls(); /* The animation will stop when pressing on fire1 on joystick#1 */ while (!(joypad_1&FIRE1)) { /* Erase the ball at the actual location */ put_char ( ball_x, ball_y, 32 ); /* 32 is the value of the SPACE character */ /* Update the value of the location of the ball */ update_ball_location (); /* Print the ball at the new location */ put_char ( ball_x, ball_y, 'O' ); /* Slowdown the animation */ delay(5); } /* Exit the bouncing routine when the fire button will be released */ while (joypad_1&FIRE1); } /* NMI routine: update sound at every vertical retrace */ void nmi(void) { update_sound(); } void main(void) { /* Initialize the VDP to the screen mode 2 */ screen_mode_2_text(); /* Set the default ascii character set */ upload_default_ascii (BOLD); /* Start the bouncing ball program */ bounce(); } COMPILING The rebound project must be in a sub-directory of the Hi-Tech C compiler. Name this sub-directory: "rebound". Create a new C file and write the rebound program. After writing the rebound program into a file named "rebound.c", you add the "cci.exe" program in the same sub-directory. If you don't see the extension of the files (".c" and ".exe"), there is a possibility that the rebound file you created didn't have the right extension. Note: CCI see only the files with the extension ".c" (for C files) and ".as" (for ASM files) in the current directory.  Figure  SEQ Figure \* ARABE 10 Rebound directory before compiling and linking the project If the rebound C program is correctly done, the following steps will be so easy that you will not believe you are compiling a program. First, make sure that the checkbox "Getput 1" is checked and the "rebound.c" file is listed in the file list box. If you are using a french version of Windows NT, XP or Windows 2000, you may have to check the "French Windows NT" checkbox.  Figure  SEQ Figure \* ARABE 11 CCI running in Rebound sub-directory Select the "rebound.c" file and click on the "Compile" button at the bottom. You can also simply click on "Compile All" button to compile all the files listed in the file list box. A popup DOS window will appear to run the 22NICE emulator. After you pressed the space bar to continue the execution of the 22NICE emulator, you will see the Hi-Tech C compiler compiling the Rebound program. Note: if you use the "Compile" button, after the compiling process, the execution will stop until you press a key. When the "rebound.c" file is compiled into a valid "rebound.obj" file, close the DOS Window if it's still opened. If the "rebound.obj" file is not a valid one (empty file, errors during the compiling process), it's because you make an error somewhere in your code. The error in your code is named a bug. A bug can be anything like not including the correct header files "#include " and "#include " or not using the correct routine name. There is no debug facility so you must be careful. To avoid doing so much errors when writing your code for the first time, try to write only one routine at a time and compile your code after each new version. To debug a code, you must use "/*" and "*/" (remarks) to "deactivate" the part of your code you think the bug is. Recompile your code and see if the bug is gone, if so, the bug is in the part of the code you placed in remarks.  Figure  SEQ Figure \* ARABE 12 Compiling Rebound program without any error After compiling the Rebound program, you have to link the "rebound.obj" file created by the compiler with the "coleco" and "getput" libraries to create a ROM file. If the "getput 1" checkbox is checked, click on the "Link" button at the bottom to start the 22NICE emulator in a popup DOS window. After pressing the space bar to continue the execution of the 22NICE emulator, you will see the word "LINK>". Simply do PASTE* in the popup DOS window to add the options for the linker. If the linker do right is job, you must find a valid "result.rom" file in the Rebound directory. If an error appear during the linking process, it's probably because you omit something like the nmi routine in your project or checked the "getput 1" checkbox. *: If you don't know how to PASTE in a popup DOS window, you can use the following trick: right-click on the title bar of the popup DOS window to see a popup menu and then choose the "Edit" option in the popup menu to see a PASTE option.  Figure  SEQ Figure \* ARABE 13 Linking Rebound program without any error If a valid (not empty) "result.rom" file is created, simply click on the "Run" button to test Rebound with a ColecoVision emulator. If you didn't like the result, you may have to modify (calibrate) your code.  Figure  SEQ Figure \* ARABE 14 Running Rebound in the Virtual ColecoVision emulator for Windows Now, if you check the Rebound directory you will find at least 6 files: "rebound.c", "cci.exe", "c.bat", "rebound.obj", "l.bat" and "result.rom". New versions of CCI add a file named "map.txt". The two batch files ("c.bat" and "l.bat") are generated by CCI to compile and link your project. You can erase these two batch files if you want.  Figure  SEQ Figure \* ARABE 15 Rebound directory after compiling and linking the project Congratulation! You compiled a ColecoVision project in C. After June 2003, new CCI versions add a "map.txt" file in your project directory after linking. If you open it, you will see the memory map of your project: where are your code, your data and how much ram you use, etc. The following table is only a small part of the memory map file. TOTALNameLinkLoadLength(abs)000text8000075Ddata875D75D2Fbss700078C4E Legend: "text" is for the ROM (header and code), "data" is for static data in ROM like text and graphics, and "bss" is for the RAM used by the ROM (doesn't include RAM used by the BIOS). Note: Make sure that bss length is never bigger than 300 to avoid memory corruption. (see pages about memory) Nobody knows your code better than you and it's why you must try to figure out by yourself how to optimize your code. STILL BUGY? The compiler and the linker are not intelligent, so they can't find errors of logic you made in your code. These errors can be described like wrong instructions who make your project not do what supposed to do. This kind of bug is more difficult to find because it can be the result of a combination of instructions in your code or a problem with pointers (a programmer nightmare). The programming kit came with the Virtual ColecoVision emulator for Windows but this emulator is not a good one to emulate perfectly the ColecoVision. My suggestion is to use ADAMEM and MESS to test your project. If your project works well with Virtual ColecoVision emulator but not with ADAMEM and MESS, maybe some instructions in your code are trying to write data in ROM (read only memory). Look how easy a bug can be done. # include /* "a" is a global variable (because not initialised here) */ byte a; /* "b" is not a global variable but a constant in ROM */ byte b=2; /* Oops! Where is the nmi routine? BUG! */ void main(void) { /* c is a local variable */ byte c; /* d is a valid local variable too because a local variable can be initialised */ byte d=4; a=1; /* We finally initialise the "a" global variable! Yeah! */ b=d-a; /* Oops, we try to write in ROM. BUG! */ c=(b+d)/2; /* No problem here */ d=a+b+c; /* No problem here */ } Note: Except for the nmi routine bug, this program will run perfectly with Virtual Coleco. Please, use a better Coleco emulator to test your projects. CAN BE BETTER? Yes, the Rebound project can be better by adding cool graphics, some colours and sound effects, a title screen, a background music, a menu, etc. All you can add in the project to make it better are welcome. But, all you are trying to add can makes some unwanted bugs. If so, you may have to forget about it unless you find another way to program what you want. You must change the ball by another graphic. Using the letter O is not really cool. You have to use an unused character to change his pattern and colours to be the new ball. Character graphic: BallColorPattern00111100403C01111110407E10011111479F10011111479F1111111140FF1111111140FF01111110407E00111100403C 1. Add the color and pattern data in the project. static byte ball_colors[] = {0x40, 0x40, 0x47, 0x47, 0x40, 0x40, 0x40, 0x40}; static byte ball_pattern[] = {0x3C, 0x7E, 0x9F, 0x9F, 0xFF, 0xFF, 0x7E, 0x3C}; 2. Add routines to load the pattern and color data into the video memory. void initialize (void) { /* To change the pattern and color of the character number 128 */ /* We not use the capital letter O anymore to be the ball */ change_pattern ( 128, ball_pattern,1 ); change_multicolor ( 128, ball_colors ); } 3. Modify the game engine to use the new graphic. /* We replaced the 'O' by the character number 128 */ put_char ( ball_x, ball_y, 128 ); SMASH - A VIDEO GAME VERSION OF REBOUND The Rebound project can be modified to be a cool video game like Pong or Breakout. Try to figure out all you need to make this simple project a real video game. Think about all the variables and routines you need before starting to modify the source code. Let's try to do a "smashing" game with the project Rebound by adding a paddle at the bottom of the screen. And if the ball reach the bottom of the screen, the game is over. This paddle will be 4 characters long and will move only left and right. The ball will bounce on the walls and the paddle without erasing it. You need to keep the information about the position of the paddle. Because the paddle move only horizontally (left and right) you can use a constant for the Y position of the paddle. char paddle_x; char paddle_y = 22; char paddle_len = 4; Don't forget to initialise the X position of the paddle. static void initialize (void) { paddle_x = 20; } You can use the position in X and Y of the ball and the paddle to detect if the ball is on the paddle. To make the ball bounce on the paddle, you need to change the Y direction of the ball. static void bounce_on_walls_in_Y (void) { char temp_x; if ( ball_y == 0 ) { ball_dy = 1; pop(); } /* To make the ball bounce on the paddle */ if ( ball_y == paddle_y-1 ) { if ( ball_x >= paddle_x && ball_x < paddle_x+paddle_len ) { ball_dy = -1; pop(); } else { temp_x = ball_x + ball_dx; if ( temp_x >= paddle_x && temp_x < paddle_x+paddle_len ) { ball_dx = -ball_dx; ball_dy = -1; pop(); bounce_on_walls_in_X(); } } } } If the Y position of the ball is the same as the Y position of the paddle then the game is over. So you have to change the condition of the "while" loop. In the "while" loop, you must add the instructions to show and move the paddle on screen. static void bounce(void) { while ( ball_y < paddle_y ) { if ( joypad_1 & ( LEFT | RIGHT ) ) { /* Erase the paddle */ print_at ( paddle_x, paddle_y, " " ); /* four(4) spaces */ /* Change the X position of the paddle */ if ( joypad_1 & LEFT ) paddle_x--; if ( joypad_1 & RIGHT ) paddle_x++; /* Keep the paddle in the limit of the screen */ if (paddle_x < 0 ) paddle_x = 0; if (paddle_x > 32-paddle_len ) paddle_x = 32-paddle_len; } print_at ( paddle_x, paddle_y, "XXXX" ); /* paddle: four(4) blocks * delay (5); } /* Exit this bouncing routine by pressing the fire button */ while (!(joypad_1&FIRE1)); } After compiling and testing these modifications, you may notice that the game is too slow. The actual game speed is not challenging. Try this: static void bounce(void) { delay (3); } The actual paddle speed is the same as the ball speed and this can be frustrating. You have to calibrate the game to let the paddle move faster than the ball sometimes. You may have to code a more natural movement for the paddle or use the fire button for fast movements. Find your own solution for the speed of the paddle. Replace the characters of the paddle with cool graphics. More suggestions: add bricks, modify the size of the paddle, add a "two players" mode, etc. PADDLE GRAPHIC Like for the ball character, we must use cool graphics for the paddle. Paddle graphic: blockColorPattern11111111E0FF00000001EF0111111011E7FB10000010E78211011000E7D800001010E70A11011111E7DF11111111E0FF Paddle graphic: leftColorPattern01111111807F1100001189C310011111899F1011111189BF1111110186FD1111000186F11100000186C101111111807F Paddle graphic: rightColorPattern1111111080FE10000011898310011111899F1011111189BF1111110186FD1111000186F11100001186C31111111080FE Note: The colors pattern of the extreme left and right part of the paddle are the same. THE PROGRAM #include #include /* Information about the location of the ball */ char ball_x; char ball_y; /* Information about the direction of the ball */ char ball_dx; char ball_dy; /* Information about the paddle */ char paddle_x; char paddle_y = 22; char paddle_len = 4; /* Graphics of the ball and the paddle */ static byte ball_colors[] = {0x40, 0x40, 0x47, 0x47, 0x40, 0x40, 0x40, 0x40}; static byte ball_pattern[] = {0x3C, 0x7E, 0x9F, 0x9F, 0xFF, 0xFF, 0x7E, 0x3C}; static byte paddle_bouncer_colors[] = {0x80, 0x89, 0x89, 0x89, 0x86, 0x86, 0x86, 0x80}; static byte paddle_block_colors[] = {0xE0, 0xEF, 0xE7, 0xE7, 0xE7, 0xE7, 0xE7, 0xE0}; static byte paddle_pattern[] = {0x7F, 0xC3, 0x9F, 0xBF, 0xFD, 0xF1, 0xC1, 0x7F, 0xFF, 0x01, 0xFB, 0x82, 0xD8, 0x0A, 0xDF, 0xFF, 0xFE, 0x83, 0x9F, 0xBF, 0xFD, 0xF1, 0xC3, 0xFE}; /* A sound effect named "pop" is played when the ball reaches the border of the screen */ static byte pop_sound[] = { 0, 0x63,0xf,1, 0x81,0xa0,0x90,1, 0x81,0x1c,0x97,1, 0x81,0x2c,0x9d,2, 0x81,0x32,0x9e,1, 0,0,0}; /* The SHOOT sound from Cosmo Challenge */ static byte shoot_sound[]= { 1, 0xf8,0xe4, 1,0xf2, 1,0xe4, 1,0x63,0x02,0x01,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 1,0xe5, 1,0xe4, 5, 0,0,0}; /* To start the "pop" sound */ static void pop (void) { start_sound (pop_sound,2); } /* To start the "shoot" sound */ static void shoot (void) { start_sound (shoot_sound,1); } /* To initialize the location and direction of the ball */ static void initialize (void) { ball_y = 0; /* top */ ball_x = 0; /* left */ ball_dx = 1; /* moving to the right */ ball_dy = 1; /* moving to the bottom */ paddle_x = 20; /* BALL */ change_pattern ( 128, ball_pattern,1 ); change_multicolor ( 128, ball_colors ); /* PADDLE */ change_pattern ( 'x', paddle_pattern,3 ); change_multicolor ( 'x', paddle_bouncer_colors ); change_multicolor ( 'y', paddle_block_colors ); change_multicolor ( 'z', paddle_bouncer_colors ); } /* Change the direction of the ball when bouncing horizontally on the border of the screen */ static void bounce_on_walls_in_X (void) { if ( ball_x == 0 ) { ball_dx = -ball_dx; pop(); } if ( ball_x == 31 ) { ball_dx = -ball_dx; pop(); } } /* Change the direction of the ball when bouncing vertically on the border of the screen */ static void bounce_on_walls_in_Y (void) { char temp_x; if ( ball_y == 0 ) { ball_dy = 1; pop(); } /* To make the ball bounce on the paddle */ if ( ball_y == paddle_y-1 ) { if ( ball_x >= paddle_x && ball_x < paddle_x+paddle_len ) { ball_dy = -1; pop(); } else { temp_x = ball_x + ball_dx; if ( temp_x >= paddle_x && temp_x < paddle_x+paddle_len ) { ball_dx = -ball_dx; ball_dy = -1; pop(); bounce_on_walls_in_X(); } } } } /* To update the location and direction of the ball. */ static void update_ball_location (void) { ball_x += ball_dx; ball_y += ball_dy; bounce_on_walls_in_X(); bounce_on_walls_in_Y(); } /* This part of the program is the game engine and it's used to rebound a ball on screen */ static void smash(void) { /* Initialize the ball and the paddle */ initialize (); /* Clear screen */ cls(); /* The animation will stop when pressing on fire1 on joystick#1 */ while ( ball_y < paddle_y ) { if ( joypad_1 & ( LEFT | RIGHT ) ) { /* Erase the paddle */ print_at ( paddle_x, paddle_y, " " ); /* four(4) spaces */ /* Change the X position of the paddle */ if ( joypad_1 & LEFT ) paddle_x--; if ( joypad_1 & RIGHT ) paddle_x++; /* Keep the paddle in the limit of the screen */ if (paddle_x < 0 ) paddle_x = 0; if (paddle_x > 32-paddle_len ) paddle_x = 32-paddle_len; } put_char ( ball_x, ball_y, 32 ); /* 32 is the value of the SPACE character */ /* Update the value of the location of the ball */ update_ball_location (); /* Print the ball at the new location */ put_char ( ball_x, ball_y, 128 ); /* Print the ball at the new location */ print_at ( paddle_x, paddle_y, "xyyz" ); /* paddle */ /* Slowdown the animation */ delay(3); } } /* NMI routine: update sound at every vertical retrace */ void nmi(void) { update_sound(); } void gameover(void) { /* Play shoot sound */ shoot(); /* Print "GAME OVER" on screen */ center_string ( 11, "GAME OVER" ); /* Waiting for FIRE button */ pause(); } void main(void) { /* Initialize the VDP to the screen mode 2 */ screen_mode_2_text(); /* Set the default ascii character set */ upload_default_ascii (BOLD); /* Start the bouncing ball video game */ smash(); /* Print "GAME OVER" on screen */ gameover(); }  Figure  SEQ Figure \* ARABE 16 Smash game running with VirtualColeco emulator DEBUG EXERCISE A TEST PROGRAM TO DEBUG Try to find the bugs in the following code. What is missing? What is typed in a wrong way? You can try to compile this code to help you find the bugs. #include #include byte a=1; static void test(void) { a--; } void main(void) { screen_mode_2_text(); cls() print(5,6,"PRESS FIRE TO CONTINUE..?"); pause(); test(); if (a==0) { print(5,6,"THIS PROGRAM IS BUG FREE"); pause(); } } SOLUTION This is the corrected version of the previous test program. Read the remarks for information. #include /* getpput.h is not the right name to use for the getput 1 library */ #include /* Oops, we can't initialise a global variable like this: byte a=0; */ byte a; static void test(void) { a--; } /* Oops, we forgot the NMI process. This process is necessary and can't be omitted */ void nmi() { /* do nothing */ } void main(void) { /* This is a good place to initialise the global variable "a" */ a=1; screen_mode_2_text(); /* Set the default ascii character set. Otherwise, we see nothing on screen. */ upload_default_ascii (BOLD); /* Oops, we forgot the ";" to separate the instructions */ cls(); /* The print instruction is not valid. We have to use the print_at instruction */ print_at(5,6,"PRESS FIRE TO CONTINUE..?"); pause(); /* Oops, an error of logic, we forgot to clear the screen */ cls(); test(); if (a==0) { /* The print instruction is not valid. We have to use the print_at instruction */ print_at(5,6,"THIS PROGRAM IS BUG FREE"); pause(); } } Thats all! Now, it's your turn to create a ColecoVision project. Make your first experimentation as simple as possible. Code your project one part at a time. Use a paper to write some notes. Find bugs by testing, testing and testing again or ask a beta-tester to test your creation for you. Share your new creation with your friends. Ask for feedback. Tune up your game. When the final version is ready, release your game in a cartridge format. Words of wisdom that all new ColecoVision games designers should adhere to: "You're very first effort should be something for YOU, not something you plan to release. Have fun with it, don't try to bite off more than you can chew... trust me on that one." Have fun! ( Best regards, Daniel Bienvenu ANNEXE - MORE TECHNICAL INFORMATIONS HARDWARE SPECIFICATIONS Note: This information came from the ColecoVision FAQ. Resolution: 256 x 192 CPU: Z-80A Bits: 8 Speed: 3.58 MHz RAM: 1K (7000-73FF but copied at different addresses) Video RAM: 16K = 8x 2K (4116 RAM chip) Video Display Processor: Texas Instruments TMS9928A Sprites: 32 Colors: 16 (15 colors plus one invisible) Sound: Texas Instruments SN76489AN; 3 tone channels, 1 noise Cartridge ROM: 8K/16K/24K/32K CARTRIDGE (ROM) HEADER Note: This information came from a ColecoVision technical documentation. 8000 - 8001: If AA and 55, the CV will show the CV title screen. If 55 and AA, the CV will jump directly to the start address. The following bytes always point to 0000 or RAM (7xxx) 8002 - 8003: Pointer to Sprites table (table sprites properties: Y, X, pattern, colour?) 8004 - 8005: Pointer to Sprites table (in which order the coleco bios show the sprites?) 8006 - 8007: Pointer to RAM space to let ColecoVision BIOS to temporary stock data 8008 - 8009: Pointer to Joysticks: 12 bytes: 2 control bytes, 5 bytes for joystick port#1, 5 bytes for joystick port#2. control byte : [READ JOYSTICK?][][][KEYPAD][RIGHT][SPINNER][JOYPAD][LEFT]) 5 bytes for the joystick attribute (bits set to one when pressed): left fire directions [left, down, right, up] spinner right fire keypad 800A - 800B: Start address of the game 800C - 800E: Jump to: RST 08h 800F - 8011: Jump to: RST 10h 8012 - 8014: Jump to: RST 18h 8015 - 8017: Jump to: RST 20h 8018 - 801A: Jump to: RST 28h 801B - 801D: Jump to: RST 30h 801E - 8020: Jump to: RST 38h 8021 - 8023: Jump to: NMI (Vertical Retrace Interrupt) 8024 - ????: Title screen data: COLECOVISION PRESENTS LINE 1 LINE 2 YEAR The title screen data is stored as one string with the '/' character (2Fh) used as a delimiter. It signals the end of a line, and isn't printed. The lines are stored out of order like so: "LINE 2/LINE 1/YEAR" Note: There isn't an end-of-line delimiter, because the year is always 4 characters long. SOUND GENERATION HARDWARE Note: This information came from a ColecoVision sound documentation. The ColecoVision uses the Texas Instruments SN76489A sound generator chip. It contains three programmable tone generators, each with its own programmable attenuator, and a noise source with its own attenuator. TONE GENERATORS Each tone generator consists of a frequency synthesis section requiring ten bits of information to define half the period of the desired frequency (n). F0 is the most significant bit and F9 is the least significant bit. The information is loaded into a ten stage tone counter, which is decremented at a N/16 rate where N (3.579MHz) is the input clock frequency. When the tone counter decrements to zero, a borrowed signal is produced. This borrowed signal toggles the frequency flip-flop and also reloads the tone counter. Thus, the period of the desired frequency is twice the value of the period register. The frequency can be calculated by the following: f = 3.579MHz/(32n) The output of the frequency flip-flop feeds into a four stage attenuator. The attenuator values, along with their bit position in the data word, are shown below. Multiple attenuation control bits may be true simultaneously. Thus, the maximum attenuation is 28 db. A0A1A2A3Weight00012 db00104 db01008 db100016 db1111OFF NOISE GENERATOR The noise generator consists of a noise source that is a shift register with an exclusive OR feedback network. The feedback network has provisions to protect the shift register from being locked in the zero state. Noise Feedback Control Feedback (FB)Configuration0Periodic Noise1White Noise Noise Generator Frequency Control NF0NF1Shift Rate00N/51201N/102410N/204811Tone gen. #3 output CONTROL REGISTERS The SN76489A has eight internal registers which are used to control the three tone generators and the noise source. During all data transfers to the SN76489A, the first byte contains a three bit field which determines the destination control register. The register address codes are shown here. Register Address Field R0R1R2Destination Control Register000Tone 1 Frequency001Tone 1 Attenuation010Tone 2 Frequency011Tone 2 Attenuation100Tone 3 Frequency101Tone 3 Attenuation110Noise Control111Noise Attenuation SOUND DATA FORMATS The formats required to transfer data are shown below. Frequency 1Reg. AddrData0XDataR0R1R2F6F7F8F9F0F1F2F3F4F5 Noise Control 1Reg. AddrXFBShift110NF0NF1 Attenuator 1Reg. AddrDataR0R1R2A0A1A2A3 NOTES TABLE CONVERSION: FREQUENCIES (Hz) <-> HEX values HzHEXHzHEXHzHEXHzHEXHzHEXA110.003F8220.001FC440.000FE880.0007F1760.003FA#/Bb116.543BF233.081DF466.160EF932.330FF1864.603BB123.47389246.941C4493.880E2987.770711975.5038C130.81356261.631AB523.250D51046.506A2093.0035C#/Db138.59327277.18193554.360C91108.70642217.5032D146.832F9293.6617C587.330BE1174.705F2349.302FD#/Eb155.562CE311.13167622.250B31244.50592489.002CE164.812A6329.63153659.250A91318.50542637.002AF174.61280349.23140698.460A01396.90502793.8028F#/Gb185.0025C370.0012E739.990971480.004B2960.0025G196.0023A391.9911D783.9908E1568.00473136.0023G#/Ab207.6521A415.3010D830.610861661.20433322.4021 Remark: The frequency of the medium C is 523.25 Hz. The frequency of the same note C but an octave higher is 1046.5 Hz. SCALES A Scale is a series of notes which we define as "correct" or appropriate for a song. Examples of various Scales (Root = "C"): NameCDbDEbEFGbGAbABbBMajor1234567Minor123456 7Harmonic Minor1234567Melodic Minor (asc)1234567Melodic Minor (desc)1234567Enigmatic1234567Flamenco12345678Major Triad123Minor Triad123 VDP - VIDEO DISPLAY PROCESSOR (from Texas Instrument documentation) VDP has 8 control registers (0-7) and one status register. REGISTERS Control registers RegisterBits765432100------M2EXT14/16KBLGINTM1M3-SIMAG2----PN13PN12PN11PN103CT13CT12CT11CT10CT9CT8CT7CT64-----PG13PG12PG115-SA13SA12SA11SA10SA9SA8SA76-----SG13SG12SG117TC3TC2TC1TC0BD3BD2BD1BD0 Legend M1, M2, M3 Select screen mode EXT Enables external video input 4/16K Selects 16K Video RAM if set BL Blank screen if reset SI 16x16 sprites if set; 8x8 if not MAG Sprites enlarged if set (double sized: sprite pixels are 2x2) GINT Generate interrupts if set PN* Address for pattern name table (screen) CT* Address for colour table (special meaning in M2) PG* Address for pattern generator table (special meaning in M2) SA* Address for sprite attribute (y, x, pattern, colour) table TC* Text colour (foreground) BD* Back drop (background) Status register INT5SCFS4FS3FS2FS1FS0 Legend FS* Fifth sprite (first sprite not displayed). Valid if 5S is set C Sprite collision detected 5S Fifth sprite (not displayed) detected INT Set at each screen update (refresh) VDP register access The status register can't be write. After reading the status register, INT (bit#7) and C (bit#5) are reset. In ASM: in a,(bfh) ; get register value (COLECO BIOS: call 1fdch) In C: byte a = vdp_status; /* vdp_status is updated after the NMI routine */ The control registers can't be read. Two bytes must be writen: Bit 7Bit 6Bit 5Bit 4Bit 3Bit 2Bit 1Bit 0Byte 0V7V6V5V4V3V2V1V0Byte 11----R2R1R0 Legend V* Value to be writen in the register. R* Register number. In ASM: ld a, value out (bfh),a ; set value ld a, register_number add a,80h out (bfh),a ; write value in register In C: vdp_out (register_number, value); /* (COLECO BIOS: call 1fd9h) */ NMI Non maskable interrupt After the vertical retrace (refresh is done), the bit 7 of the status register is set. If GINT (bit 5 of control register#1) is set, the NMI interrupts the normal execution. When it's time again to refresh, the bit 7 of the status register is reset. NMI can be used to execute something again and again at a regular speed like updating sounds. Some games use NMI to call the game engine. Screen modes Mode 0 Description: 32x24 characters, two colors per 8 characters, sprites active. Mode 1 Description: 40x24 characters (6x8), colors set in control register#7, sprites inactive. Mode 2 Description: 32x24 characters, 256x192 pixels, two colors per line of 8 pixels, sprites active. Special meaning for CT* and PG*: At control register#3, only bit 7 (CT13) sets the address of the color table (address: 0000 or 2000). Bits 6 - 0 are an AND mask over the top 7 bits of the character number. At control register#4, only bit 2 (PG13) sets the address of the pattern table (address: 0000 or 2000). Bits 1 and 0 are an AND mask over the top 2 bits of the character number. If the AND mask is: 00, only one set (the first one) of 256 characters is used on screen. 01, the middle of the screen (8 rows) use another set (the second one) of 256 characters. 10, the bottom of the screen (8 rows) use another set (the third one) of 256 characters. 11, three set of 256 characters are used on screen: set one at the top (8 rows), set two in the middle (8 rows), and set three at the bottom (8 rows). Mode 3 Description: 64x48 big pixels (4x4), sprites active. COLOR PALETTE 0 Invisible 1 Black 2 Medium Green 3 Light Green 4 Dark blue 5 Light blue 6 Dark Red (brown) 7 Cyan 8 Medium Red 9 Light Red (Pink/orange) 10 (A) Dark Yellow (Yellow) 11 (B) Light Yellow (Yellow + Light Grey) 12 (C) Dark Green 13 (D) Magenta 14 (E) Grey (Light Grey) 15 (F) White 0123456789ABCDEF TMS9918 color palette calculated by Richard F. Drushel  TMS9938 color palette calculated by Marat Fayzullin  TMS9928 color palette used in MESS emulator  The default color palette used in ADAMEM is the one calculated by Richard F. Drushel. The color palette used in COLEM is the one calculated by Marat Fayzullin. The color palette I see in my Commodore monitor model 1802 looks like the one used in MESS emulator. More information about Texas Instruments TMS99n8 color palette. URL: http://junior.apk.net/~drushel/pub/coleco/twwmca/wk961118.html http://junior.apk.net/~drushel/pub/coleco/twwmca/wk961201.html http://junior.apk.net/~drushel/pub/coleco/twwmca/wk970202.html COLECO ASCII TABLE DEC: 0-63 HEX: 00-3F DECHEXCHARACTERDECHEXCHARACTER0003220Space1013321!2023422"3033523#4043624$5053725%6063826&7073927'8084028(9094129)100A422A*110B432B+120C442C,130D452D-140E462E.150F472F/161048300171149311181250322191351333201452344211553355221654366231755377241856388251957399261A583A:271B593B;281C603C<291D613D=301ET623E>311FM633F? DEC: 64-127 HEX: 40-7F DECHEXCHARACTERDECHEXCHARACTER6440@9660`6541A9761a6642B9862b6743C9963c6844D10064d6945E10165e7046F10266f7147G10367g7248H10468h7349I10569i744AJ1066Aj754BK1076Bk764CL1086Cl774DM1096Dm784EN1106En794FO1116Fo8050P11270p8151Q11371q8252R11472r8353S11573s8454T11674t8555U11775u8656V11876v8757W11977w8858X12078x8959Y12179y905AZ1227Az915B[1237B{ (bracket left)925C\1247C| (broken vertical)935D]1257D} (bracket right)945E^1267E~ (tilde)955F_ (underline)1277F% (deleted) PROGRAMMING COLECOVISION GAMES PAGE  PAGE 5 Knp;<=>?GHdefgh+,HjUmHjgUmHjUmHjqUmHjUmHj{UmHjUmH jUmHmH jUmH H*mH mH CJ(mH ; 45EFKLXYwx@i M{ f# f# f#$$ 45EFKLXYwx@i M{GsD, a 2 i 0 o " P z  N z -a Gv9l-Z%R6b"P`HIJKLXYuvwyz$%ABCEFPQmnoqrj5UmHjUmHj?UmHjUmHjIUmHjUmHjSUmHjUmHmH jUmHj]UmH=GsD, a 2 i 0 o " P z  f# f# f#!">?@BCfg & ' ( * + > ? [ \ ] _ ` m n j UmHj UmHj UmHj UmHj UmHj! UmHjUmHj+UmHjUmHmH jUmH=   , - . 0 1 F G c d e g h ~   * + , . / L M i j jUmHj`UmHjUmHjjUmHj UmHjt UmHj UmHj~ UmHj UmHmH jUmH=j k m n    ! - . J K L N O W X t u v x y  jUmHj8UmHjUmHjBUmHjUmHjLUmHjUmHjVUmHmH jUmH>z  N z -a Gv9l-Z% f# f# f#     + , H I J L M W X t u v x y  '()+,>?[\]_`jUmHjUmHjUmHjUmHjUmHjUmHj$UmHjUmHmH jUmHj.UmH=$%ABCEFSTpqrtu34578IJfghjkjYUmHjUmHjcUmHjUmHjmUmHjUmHjwUmHjUmHjUmHmH jUmH=  '()+,78TUVXYkl !#$/0LMNPQ]^z{j UmHj1 UmHjUmHj;UmHjUmHjEUmHjUmHjOUmHjUmHmH jUmH=%R6b"P,] 4` f# f# f#{|~01245?@\]^`almj$UmHj $UmHj#UmHj#UmHj"UmHj"UmHj!UmHj'!UmHmH jUmH> !-.JKLNO`a}~  &'(*+:;WXY[\fgj(UmHj\(UmHj'UmHjf'UmHj&UmHjp&UmHj%UmHjz%UmHmH jUmHj$UmH=,] 4`%]K}C*\$U<fT?nL~- h !E!z!! "5"v""" #B####$.$X$$$$$%%{&|&&&&d {|xyV   ./023=>Z[\^_de !#j*-UmHj,UmHj4,UmHj+UmHj>+UmHj*UmHjH*UmHj)UmHjR)UmHmH jUmH=#$:;WXY[\cd()EFGIJZ[wxy{|j}1UmHj1UmHj0UmHj 0UmHj/UmHj/UmHj.UmHj .UmHj-UmHmH jUmH=%]K}C*\$U<f f# f#     !=>?AB]^z{|~$%&()9:VWXZ[hijU5UmHj4UmHj_4UmHj3UmHji3UmHj2UmHjs2UmHj1UmHmH jUmH> "#23OPQSTab~  678:;CD`abdej9UmHj-9UmHj8UmHj78UmHj7UmHjA7UmHj6UmHjK6UmHmH jUmHj5UmH=12NOPRSij  9:;=>KLhijlj=UmHj=UmHj=UmHj<UmHj<UmHj;UmHj;UmHj:UmHj#:UmHmH jUmH=T?nL~- h !E!z!! "5"v"" f# f# f#lm}~)*FGHJK[\xyz|} ' ( ) + , E F b c jNBUmHjAUmHjXAUmHj@UmHjb@UmHj?UmHjl?UmHj>UmHjv>UmHmH jUmH=c d f g  ! !!!!"!#!?!@!A!C!D!W!X!t!u!v!x!y!!!!!!!!!!""" " """/"0"1"3"4"S"T"p"j&FUmHjEUmHj0EUmHjDUmHj:DUmHjCUmHjDCUmHjBUmHmH jUmH>p"q"r"t"u"""""""""""""""""### # ## #<#=#>#@#A#]#^#z#{#|#~####################$$$ $jyJUmHjIUmHjIUmHjIUmHjHUmHjHUmHjGUmHjGUmHmH jUmHjFUmH="" #B####$.$X$$$$$%%{&|&&&&3'4'q'((($ f# f# f# $ $($)$*$,$-$5$6$R$S$T$V$W$f$g$$$$$$$$$$$$$$$&&++00G_aasbcckGlm:pq7rkrrs`sxss&u8uvvvvvvvvwýùùùùùõì jUjL5UmH 6mH B*mH  jJmH mH  jUmH jeLUmHjKUmHjoKUmHjJUmHmH jUmH@&3'4'q'((((()))v*a+b++++j,k,,,C.D.0011113333$4q456Q6R6;;>|yvspm"#e -|} Qo cpq  Q    ST() c*((()))v*a+b++++j,k,,,C.D.0011113333$4$ & F$$4q456Q6R6;;>>fArAwAxAAAAAAAAAAAB(B>fArAwAxAAAAAAAAAAAB(BRe v,CCCCCCCDD"D#DID\D]DDDDDDDDEEE*E+E_E`EeEgEgEEEEEEEEEEE#F6FCFOF\FlFmFFFFF(H)H2HkHHHH & F#F6FCFOF\FlFmFFFFF(H)H2HkHHHHHHHHHHHH II#IUIVIlIIII¿zwqnkheb_\+,^st |5=  E  L  T  e  u  v ef %  2  >  K  ^  "HHHHHHHHH II#IUIVIlIIIIIIIJJJJJJKK & FIIIIJJJJJJKKK)K*KMKVK^KfKgKpKKKKLLLMMMMMM#NQNRNEPŽ{xurolifc`01_z{ M/89A  I  R  uv ^I[  i          qr $KK)K*KMKVK^KfKgKpKKKKLLLMMMMMM#NQNRNEPFPP$ & FhEPFPPPPPPPPPPPPQQQ QQQQ"Q%Q(Q+Q-Q2Q6Q7Q8QlQQQRRRRRR½|yvqlgb        JKL  P  U  W  Z  ]  `  f  m  tu  |                <=%PPPPPPPPPPPQQQ Q$$$ QQQQ"Q%Q(Q+Q-Q2Q6Qzzzzzzzzz$$$$F t  # 6Q7Q8QlQQQRRRRRRRR||||||wwwwww$$$$$F t  # RRRRRRRRRRRSSSS S SSSSCSRSdSeSSSZUfUgUVVVV;W_?_@_A_B_C_D_E_F_G_[_m_{vqlhe_Y t                                                       "8_9_:_;_<_=_>_?_@_A_B_C_D_E_F_G_[_m_o_q_s_u_w_y_{_$$$$$FN} $$m_o_q_s_u_w_y_{_}___________________________Ŀzuplgb]X  4  6  8  :;  >  @  B  D  F  H  J  L  NO  R  T  V  X  Z  \  ^  `  bc  f  h  j  l  n  p  r  t  v"{_}______________{P{P|$$F4 N} $$$_______________{P|$$F4 N} $$$___________________________________Ŀ{vqlgb]X                                                "  $  &'  *  ,  .  0  2"_______________{P|$$F4 N} $$$_______________P{P$$$|$$F4 N} ___________````{P|$$F4 N} $$$______```` ` ` ``h`y``````````````````````¿~ytpkfa  T  V  XY  [  ]  _  e  g <^  a  b  cd  i  p  w g                    $` ` ` ``h`y````{yyw|$$F4 N} $$$ ```````````````<$$FFa   $$$8$$FFa ``````````D$z$$F4ִN}    `````````````````````````````aaaaa aĿ{vqlgb^Y              !  #  %&  (  *  ,  .  0  2  4  67  9  ;  =  ?  A  C  E  GH  J  L  N  P  R"```````````````DD$z$$F4ִN}    ``````````aaaaDz$$F4ִN}    $ aa a a aaaaaaaaaa aDD$z$$F4ִN}    a a aaaaaaaaaa a"a$a&a(a)a+a-a/a1a3a5a7a9a:a;auaaaaaaaĿ}ztojea\  bc  h  o  v Z                                              " a"a$a&a(a)a+a-a/a1a3a5a7a9aDz$$F4ִN}    $ 9a:a;auaaaaa{{{$$z$$F4ִN}    aaaaaaaaa<$$FFa   $$$8$$FFa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazuplic^  i 23  6  7  89  <  =  >?  B  C  DE  H  I  JK  N  O  PQ  T  U  VW  Z  [  \]  `  a"aaaaaaaaaaaaa<$$FFa   $$$<$$FFa   aaaaaaaaa<$$FFa  `$$$<$$FFa  aaaaaaaaaaaaaaa|z$<$$FFa   $$$<$$FFa   aaaaaaaaaabbbbb b b bbbbbbbbbb b"b$b&b(b*b,b.bĿ{vqlgb]X  (  *  ,  .  0  2  4  67  9  ;  =  ?  A  C  E  GH  J  L  N  P  R  T  V  XY  [  ]  _  a  c  e  g"aaaabbbbb b bDz$$F4ִN}   $ b bbbbbbbbbD$z$$F4ִN}   bb b"b$b&b(b*b,b.bD$z$$F4ִN}     .b/b1b3b5b7b9b;b=b?b@bBbDbFbHbJbLbNbPbQbSbUbWbYb[b]b_babbbdbfbhbjblbnb{wrmhc^Y                                                        !  #  %&".b/b1b3b5b7b9b;b=b?bD$z$$F4ִN}     ?b@bBbDbFbHbJbLbNbPbD$z$$F4ִN}   PbQbSbUbWbYb[b]b_babD$z$$F4ִN}  `` abbbdbfbhbjblbnbpbrbD$z$$F4ִN}     nbpbrbsbtbbbbbucvcccee e8e9eeedfeffffhh"i#i1i2iiiijjjkkkk{xuroj  wx     yz 9:~ s+, qr n    (rbsbtbbbbbucvcccee e8e$z$$F4ִN}   8e9eeedfeffffhh"i#i1i2iiiijjjkkkkk$$$ & F$kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkĿ{vqlgb^@  B  D  F  H  J  L  N  PQ  S  U  W  Y  [  ]  _  ab  d  f  h  j  l  n  p  r      "kkkkkkkkkkkkkkk0$$F0a @$$$-$$F0akkkkkkkkkkD$w$$F4ִN}  @@ kkkkkkkkkkkkkkkDD$z$$F4ִN}  @@@@kkkkkkklllll l l llllllllll l"l$l%l'l)l+l-l/l1l3lĿ{vqlgb]X                                   "  $  &  (  *  ,  ./  1  3  5  7  9  ;  =  ?"kkklllll l l llllDz$$F4ִN}  @@@@@@$ lllllll l"l$l%l'l)l+l-lDD$z$$F4ִN}  @@@@@@-l/l1l3l5l6l8l:ll@lBlDlFlDz$$F4ִN}  @@@@@@$ 3l5l6l8l:ll@lBlDlFlGlHlllllllllllmmmmmmm!m#m%m'm)m+m~ytoje`                        D{|}                          #FlGlHllllllllll~~d~~d$$FE$$$x$$F4ִN}  @@@@ llmmmmmmm!m#m%m'm)m+m-m/m1m3m6m9m$$$+m-m/m1m3m6m9m:mm@mBmDmFmHmJmLmNmPmRmTmVmXmZm]m`mamcmemgmimkmmmomqmĿzupkfa\W                                                                "9m:mm!$$$$F֐N} G v@ >m@mBmDmFmHmJmLmNmPmRmTmVmXmZm]m`m$$`mam$$F֐N} G v@  amcmemgmimkmmmomqmsmumwmym{m}mmmmm$$qmsmumwmym{m}mmmmmmmmmmmmmmmmmmmmmmmmmmmmmĿ~ytokfa\W  |  ~                                                            "mm$$F֐N} G v@  mmmmmmmmmmmmmmmmmmm$$mm$$F֐N} G v@  mmmmmmmmmmmmmmmmmmm$$mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmþ~ytoje`[W5  8  ;  =  ?  A  C  E  G  I  K  M  O  Q  S  U  W  Y  [\  _  b  d  f  h  j  l  n  p  r  t  v  x  z"mm$$F֐N} G v@  mmmmmmmmmmmmmmmmmmm$$mm$$F֐N} G v@  mmnnnn n n nnnnnnnnn n#n$n&n(n*n,n.n0n2n4n6n8n:nn@nþ~ytoje`[                                               "  $  &  (  *  ,  .  0  2  4!mmnnnn n n nnnnnnnnn n#n$$#n$n$$F֐N} G v@  $n&n(n*n,n.n0n2n4n6n8n:nn@nBnDnGnJn$$@nBnDnGnJnKnMnOnQnSnUnWnYn[n]n_nancnengninknnnqnrntnvnxnzn|n~nnnnnĿzupkfa\W                                                                "JnKn$$F֐N} G v@  KnMnOnQnSnUnWnYn[n]n_nancnengninknnnqn$$qnrn$$F֐N} G v@  rntnvnxnzn|n~nnnnnnnnnnnnn$$nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnĿ~yupkfa\W  g  i  k  m  o  qr  u  x  z  |  ~                                          "nn$$F֐N} G v@  nnnnnnnnnnnnnnnnnnn$$nn$$F֐N} G v@  nnnnnnnnnnnnnnnnnnn$$nnnnnnnnnnnnnnnnnnnnnnnnnnoooo o ooooÿ~ytojea\W  !  #$  '  *  ,  .  0  2  4  6  8  :  <  >  @  B  D  F  H  JK  N  Q  S  U  W  Y  [  ]  _  a  c  e"nn$$F֐N} G v@  nnnnnnnnnnnnnoooo o o$$ oo$$F֐N} G v@  ooooooooo o"o$o&o(o*o,o.o1o4o$$ooooooo o"o$o&o(o*o,o.o1o4o5o7o9o;o=o?oAoCoEoGoIoKoMoOoQoSoUoþ~ytoje`[                                                                !4o5o$$F֐N} G v@  5o7o9o;o=o?oAoCoEoGoIoKoMoOoQoSoUoXo[o$$UoXo[o\o^o`obodofohojolonoporotovoxozo|oooooo:pVpWpwqxqqqqq7rjrkrrĿ~{urolifc`;<vw Kkl "v                                        %[o\o$$F֐N} G v@  \o^o`obodofohojolonoporotovoxozo|ooo$$oooo!$$F֐N} G v@ o:pVpWpwqxqqqqq7rjrkrrs`swsxsssssttuu&u9u:u$rs`swsxsssssttuu&u9u:uvvvww#w$wx x.x/xxyyyy=z>z@zyzzzzz{xupmjd NPQ           _ `nojk~ wmn ^_ R /&:uvvvww#w$wx x.x/xxyyyy=z>z@zyzzzzzzz{{$ & F$$$$www#w>z?zGzHz]z^z_z`zzzzz{{{{ ||||*|,|̂,>tu}~:Ӎ jUmH  jUmH  j8UmH  jUmH  j~UmH5CJOJQJmH jU jocUmHmH 6mH 5mH Fzzz{{{+|,||G}t}L~~.#m͂΂,?@tv;<~{xsph-/cdw bVXYlm pi@5S78suvhi|+{{+|,||G}t}L~~.#m͂΂,?$$$$?@tv;<ҍӍՍ%FG$$$$<ҍӍՍ%FG hiHZ~r~~~~¿zxvvtv  z    I       ( )wx fg Xkl g"Ӎԍ܍ݍ$ ˒\w%O<| U[%O֬&')5G`k|-7Mep"(Ecp/:]~ñB*mH  jlUmHmH mH jU jUmH Y hiH̒͒opg$$$$ & Fgh  ar$$F tִ #$$$ab\]LM"UqȘϘИ`a<=B$Bfg 45vw$%OP<{|$ ۡܡFG,-ABզ֦+4Uv$$vzŧ֧ק )Щѩҩ[%$$%O ֬%&')5G`k|-7Mdepp"(Ebcp./:]~ñޱñޱA$3IVtb~ȶѶ+s|˷ .ָ&x~Ϲ˺(ei8|?)<žƾھ۾ek G*dUd6FWLn) _;B*mH B*mH aAPR[ds$3IVt̴ݴbbz{078}~ǶȶѶ+JKT\rs|˷$$  .ָ&NOXwx~Ϲ$$˺(FGPdeiŻƻϻ8ST]{|ϼмټ$?abk()<žƾ۾<=Fdek$ſƿϿ Gefo*d)*$*3TUd56FWMn)YZc$$ _;hir-.H4)$.H4))JY,k>WeL79G+UawLS2xn  014^ /f+?-.QvB*OJQJhmH nH mH B*mH ])S}~)JKY,k>$$>VWeLYix9G+D$  $DTUawKLS)$$$)56;@Gdejoqvw|޼H$$$$$F q( #$$!"',3CDEes۬Hۈ$$$$$F q( #$$$ ./49;@AFKRhH$$$$$F q( #hinsz~2I`wx$$$$$$F q( #6<n  134^ /f$$+=-.Qsv !0GWZ\ !He$$ !0G\ !He@6^|uv %;iCtJ7Wx 7b B{8F`\ #Mo6V7B*mH B*mH mH ae !~*?@6r{|$$uv %;i-BCt$$)*@BJ1Kg$$47Wgy}Dtx$ 7b 8Z Bacd$z{ 9abfgz$T[\ #$Mop36V\`acpq $ !67tD^`oTr$$7tDTQ? 5FZcAtLh  Ki3o p x y       jpUmH jAUmH j2UmHmH jU j$)UmHmH B*mH TrtQy{?gi 13FYq$$5EFZbcAtLegh$$  Ki45n o q  $$$$  qrt  *+16;@$$$$$$$$rs{| +GIVXik}dghn437:Ojv>BERgre""k##((Y+s+++++-,`,, --Y-333B*mH B*mH 5OJQJ jmUmH jU jUmH mH mHU@GHIJPRTVW<[$$F4ֈ #`$$$$ WXY^ceijL$$$$[$$F4ֈ #` jklqvz}~PL$$$$[$$F4ֈ # NO4ABKLno$[$$F4ֈ # ;<LNkvFh"23K M e k s $$$$$$s t v x z | ~      \$$$$:$$F4F             r\mmmmmmmmhh$$$$$$F N}  @@@@            q\llllllllgg$$$$$$F N}  @@@@@@            p\kkkkkkkkff$$$$$$F N}  @``@@@@@            p\kkkkkkkkff$$$$$$F N}  @``@@@@@            p\kkkkkkkkff$$$$$$F N}  @@@@@@@@  !!!!! ! !!!!p\kkkkkkkkff$$$$$$F N}  @@@@@@@@ !!!!!!!!!#!%!(!+!q\llllllllgg$$$$$$F N}  @@@@@@ +!,!-!_!`!!!!H"I"`"b"e"rooooooooooo$$$F N}  @@@@ e""" #5#7#8#j#k#####$$%%+&,&&&&'''V'W'u'$$u'w'z''''K(L(t(v((((((3)L)R)q)))))))))$$L$$$)** +++-+0+U+Y+s+++,-,`,,,,, ---Z-v-x-y-.$$$. .".$.&.3.5.7.8.|/}///0#0$0l0m0n0000$$$$$$000000000000\$$$$:$$F4F  000000000000p\kkkkkkkkff$$$$$$F N}   000000000000p\kkkkkkkkff$$$$$$F N}   000000000000p\kkkkkkkkff$$$$$$F N}  ` 000000000011p\kkkkkkkkff$$$$$$F N}  `````` 111 1 11111111p\kkkkkkkkff$$$$$$F N}  ```` 111!1#1%1'1)1+1-10131p\kkkkkkkkff$$$$$$F N}  `````` 31416181:1<1>1@1B1D1G1J1p\kkkkkkkkff$$$$$$F N}  ` J1K1L1M1b1h1p1pmmhcc$$$$$$$F N}  p1q1s1u1w1y1{1}11111\$$$$:$$F4F  111111111111p\kkkkkkkkff$$$$$$F N}   111111111111p\kkkkkkkkff$$$$$$F N}   111111111111p\kkkkkkkkff$$$$$$F N}   111111111111p\kkkkkkkkff$$$$$$F N}   111111111111p\kkkkkkkkff$$$$$$F N}   11112222 2 222p\kkkkkkkkff$$$$$$F N}   22222222 2"2%2(2p\kkkkkkkkff$$$$$$F N}   (2)2*2+2A2G2O2pmmhcc$$$$$$$F N}  O2P2R2T2V2X2Z2\2^2`2c2f2\$$$$:$$F4F  f2g2i2k2m2o2q2s2u2w2z2}2q\llllllllgg$$$$$$F N}   }2~22222222222p\kkkkkkkkff$$$$$$F N}   222222222222p\kkkkkkkkff$$$$$$F N}   222222222222p\kkkkkkkkff$$$$$$F N}   222222222222p\kkkkkkkkff$$$$$$F N}   222222222222p\kkkkkkkkff$$$$$$F N}   222222222333p\kkkkkkkkff$$$$$$F N}   33 3a3b3o3p3333333qnlljnnnnnnn$$$F N}   334&44454X4g4{4444 5Y5Z556'6X6666727C77777$$3454X44467778<8Z8y888 9G9s9|99999999:U:a:';;<t<<=&>^>>=?W??????;@U@@@ABAAAA(BABlBBBBBB CCWCCCCCCD:DiDDDDDDE0E1E9E:EOEPERESEEGH*HqHmH jU jUmH mH B*mH \7778P8Y8Z8y8888 9G9e9g9}999999:+:T:b::::%;$$%;';(;;;;;<<<t<<<<<== =[=t=z====>>>$$L$$$>!>#>%>^>>>>>>>>>=?U?W???????@@7@;@U@@@$$@@ABAfAAAAA(BABlBBBB CCCCWCfChCyC{C|CCCCC$$$CCCD%D'D(D8D:DiDDDDDD E-E/E0E2EEEEEEFDFEFYF$$$$YFnFoFyFzFFFFFFFFFFFG GGG@GJGMGOGYGZGGGGH$$H)H*HqHyHzHHHHHHHHHIII&I(IjIpIIII2J:JJJJK$qHHHHI(IjIIII2J:JJJK KsKrMMrN}N~NNN``,a-aaaBbCbbblcmcccyddd(e)e-e.e4e5e9e:e>e?eaffg@jPjkkl:lNmYmmmmmooooQpXpss-txuuuuuuuv jUmH jUmHH*H*mH CJmH 6mH  jJmH  569CJB*mH mH RK KKK KsKKKKKKKKKqMrMMMrNsNNNNNNNNN$$NNOO.O9OAOQOOOOOPUPsPtPuPPPPPQZQ[QQQERR$ @  RSS\S]SSSSSSSSTT/TMTkTTTTTTUU`H`M`N`P`R`W`$F$$F t\H #$$$$W`X`Y`\`_`b`e`h`k`n`o`p`q`t`w`z`}`$$i$$F4 t֞x,!`Dp``` }````#$$F4 tzx ,4Pl!     $$`````````````````HS$$F4 tr 5`&`-`A$$$````````D\=$$F4 tF,`7p$$$t$$F4 tִg 5 D - %```````````,a-a.a1a$t$$F4 tִvg , U$$1a5a8abDbKbObW$$F@ D X'l # `````$$$$ ObVbZbabeblbpbwb{b|b~bW$$F@ D X'l # `````$$$$ ~bbbbbbbbbbb$$$$ bbbbbbbbbbba\W\W\W\W\$$$$$$F@ D X'l # ````` bbbbbbcc cccW$$F@ D X'l # `````$$$$ cc"c)c-c.c0c7c;cBcFcW$$F@ D X'l # `````$$$$ FcMcQcXc\cccgchcncucycW$$F@ D X'l # `````$$$$ ycccccccccccW$$F@ D X'l # `````$$$$ ccccccccccc$$$$ cccccccdddda\W\W\W\W\$$$$$$F@ D X'l # ````` ddddddddddWUUUSUU$$F@ D X'l # `````$$$$ d e%e'e*e,e/e1e3e6e8e;e=e@eBe$$BeCeIeKeLeNeOeQeSeWhRMMMMMM$$$$$$F4" $ Z 6mH!#SeTeVeWeYeZe\e]eceRlM$$$$F4" $ Z 6mH!#$$ceeefehejekemeneperetevewexeeeeeeeeeeeeԌ$$&$$F4 $ Z 6mH!#$$eeeeeeeeeeeeeeeeeeeeeeeeeԠԤ$$&$$F4 $ Z 6mH!#$$eeeeeeeeeeeeeeefffff f ffffxx$$&$$F4 $ Z 6mH!#$$ffffff!f#f$f&f'f(f4f6f7f8f9f;fkkkk:l;lzl{l|llllll$ $ $$F97 53#lllllllllllllllllllllрl $$F  #*$$F*  #$llllllllm,m-mAmZmqm|mmmmnn_nnooo $  $$F  #$oooooooPpQpXpppppqqPrrrIsssst,t-tVu 8 @ & FVuXuZu\u^u`ubudufuhujulunupurutuvu$$ 8vuwuxu$ 8$$FHd8w 4 s0o,k!# ` @``xuuuuuuuvvvnvvww^w_wdwww!x5x6x@xKxLxPxTx^xbx$$vvw xqxsxvxwxzx}xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyy y yyyyyyyyy!y"y%y(y*y+y.y1y5mH  5B*mH  5B* mH mH  jRUmHZbxfxpxqxsxvxwxzx}xxxxxxxxxxxxxxxxxxL<<<$$$$Fd4(#$xxxxxxxxxxxxxxxxxxxxxxxxxx<<<$$Fd4(#$$$xxxxxxxxxxxxxxxxxxyyyy y yyy<<<@$$$$Fd4(#$yyyyyyy!y"y%y(y*y+y.y1y2y5y8y:y;y>yAyByEyHyJy@@@$$Fd4(#$$$1y2y5y8y:y;y>yAyByEyHyJyKyNyQyRyUyXyZy[y^yaybyeyhyjykynyqyryuyxyzy{y~yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzmH  5B*mH  5B* mH 5mH ]JyKyNyQyRyUyXyZy[y^yaybyeyhyjykynyqyryuyxyzy{y~yyy@@@@$$$$$Fd4(#yyyyyyyyyyyyyyyyyyyyyyyyyy@@@@$$Fd4(#$$$yyyyyyyyyyyyyyyyyyyyyyyyyy@@@$$Fd4(#$$$yyyyyzzzz z zzzzzzzzz!z"z%z(z*z+z.z@@@@$$Fd4(#$$$zz z zzzzzzzzz!z"z%z(z*z+z.z1z2z5z8z:z;z>zAzCzFzIzKzLzOzRzTzWzZz\z]z`zczezhzkzmzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{ { {{{{{{{{"{ 5H*mH  5B* mH mH 5mH  5B*mH [.z1z2z5z8z:z;z>zAzCzFzIzKzLzOzRzTzWzZz\z]z`zczezhzkzDDD$$Fd4(#$$$kzmznzozqz}zzzzzzzzzzzzzzzzzzzzzDD$$$$Fd4(#$zzzzzzzzzzzzzzzzzzzzzz{{{{DDHH$$Fd4(#$$${ { {{{{{{{{"{%{'{({+{.{0{4{7{9{:{={@{B{F{I{HHH$$Fd4(#$$$"{%{'{({+{.{0{4{7{9{:{={@{B{F{I{K{L{O{R{T{X{[{]{^{a{d{f{j{m{o{p{s{v{x{|{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{|||| |||| 5B* mH mH 5mH  5B*mH ^I{K{L{O{R{T{X{[{]{^{a{d{f{j{m{o{p{s{v{x{|{{{{{{HHHH$$$$Fd4(#${{{{{{{{{{{{{{{{{{{{{{{{{{HHH$$Fd4(#$$${{{{{{{{{{{{{{{{{{{{{{||||HHHH$$$$$Fd4(#| ||||||||!|#|$|'|*|,|0|3|5|6|9|<|>|B|E|G|H|HHHH$$Fd4(#$$$|||||!|#|$|'|*|,|0|3|5|6|9|<|>|B|E|G|H|K|N|P|T|W|Y|Z|]|`|b|f|i|k|l|o|r|t|x|{|}|~||||||||||||||||||||||||||||||||}}}}}}%})}~~~Z~\~^~j~0J j0JUmH mH 5mH  5B*mH  5B* mH XH|K|N|P|T|W|Y|Z|]|`|b|f|i|k|l|o|r|t|x|{|}|~|||||HHH$$Fd4(#$$$||||||||||||||||||||||||||لِوh$$Fd4(#$$$|||}}}}}}%})},}~~~Z~\~n~p~r~~~~~٠&`#$$$Fd4(#$$$j~l~n~r~t~~~~~~~~mH 0JmH0J j0JU ~~/ 01h. A!"#$% {DyK  _Toc47724428{DyK  _Toc47724429{DyK  _Toc47724430{DyK  _Toc47724431{DyK  _Toc47724432{DyK  _Toc47724433{DyK  _Toc47724434{DyK  _Toc47724435{DyK  _Toc47724436{DyK  _Toc47724437{DyK  _Toc47724438{DyK  _Toc47724439{DyK  _Toc47724440{DyK  _Toc47724441{DyK  _Toc47724442{DyK  _Toc47724443{DyK  _Toc47724444{DyK  _Toc47724445{DyK  _Toc47724446{DyK  _Toc47724447{DyK  _Toc47724448{DyK  _Toc47724449{DyK  _Toc47724450{DyK  _Toc47724451{DyK  _Toc47724452{DyK  _Toc47724453{DyK  _Toc47724454{DyK  _Toc47724455{DyK  _Toc47724456{DyK  _Toc47724457{DyK  _Toc47724458{DyK  _Toc47724459{DyK  _Toc47724460{DyK  _Toc47724461{DyK  _Toc47724462{DyK  _Toc47724463{DyK  _Toc47724464{DyK  _Toc47724465{DyK  _Toc47724466{DyK  _Toc47724467{DyK  _Toc47724468{DyK  _Toc47724469{DyK  _Toc47724470{DyK  _Toc47724471{DyK  _Toc47724472{DyK  _Toc47724473{DyK  _Toc47724474{DyK  _Toc47724475{DyK  _Toc47724476{DyK  _Toc47724477{DyK  _Toc47724478{DyK  _Toc47724479{DyK  _Toc47724480{DyK  _Toc47724481{DyK  _Toc47724482{DyK  _Toc47724483{DyK  _Toc47724484{DyK  _Toc47724485{DyK  _Toc47724486{DyK  _Toc47724487{DyK  _Toc47724488{DyK  _Toc47724489{DyK  _Toc47724490{DyK  _Toc47724491{DyK  _Toc47724492{DyK  _Toc47724493{DyK  _Toc47724494{DyK  _Toc47724495{DyK  _Toc47724496{DyK  _Toc47724497{DyK  _Toc47724498{DyK  _Toc47724499{DyK  _Toc47724500{DyK  _Toc47724501{DyK  _Toc47724502{DyK  _Toc47724503{DyK  _Toc47724504{DyK  _Toc47724505{DyK  _Toc47724506{DyK  _Toc47724507{DyK  _Toc47724508{DyK  _Toc47724509{DyK  _Toc47724510{DyK  _Toc47724511{DyK  _Toc47724512{DyK  _Toc47724513{DyK  _Toc47724514{DyK  _Toc47724515{DyK  _Toc47724516{DyK  _Toc47724517{DyK  _Toc47724518{DyK  _Toc47724519{DyK  _Toc47724520{DyK  _Toc47724521{DyK  _Toc47724522{DyK  _Toc47724523{DyK  _Toc47724524{DyK  _Toc47724525{DyK  _Toc47724526{DyK  _Toc47724527{DyK  _Toc47724528{DyK  _Toc47724529{DyK  _Toc47724530{DyK  _Toc47724531{DyK  _Toc47724532{DyK  _Toc47724533{DyK  _Toc47724534{DyK  _Toc47724535{DyK  _Toc47724536{DyK  _Toc47724537{DyK  _Toc47724538{DyK  _Toc47724539{DyK  _Toc47724540{DyK  _Toc47724541{DyK  _Toc47724542{DyK  _Toc47724543{DyK  _Toc47724544{DyK  _Toc47724545{DyK  _Toc47724546{DyK  _Toc47724547{DyK  _Toc47724548{DyK  _Toc47724549{DyK  _Toc47724550{DyK  _Toc47724551{DyK  _Toc47724552{DyK  _Toc47724553{DyK  _Toc47724554{DyK  _Toc47724555{DyK  _Toc47724556{DyK  _Toc47724557{DyK  _Toc47724558{DyK  _Toc47724559{DyK  _Toc47724560{DyK  _Toc47724561{DyK  _Toc47724562{DyK  _Toc47724563{DyK  _Toc47724564{DyK  _Toc47724565{DyK  _Toc47724566{DyK  _Toc47724567{DyK  _Toc47724568{DyK  _Toc47724569{DyK  _Toc47724570{DyK  _Toc47724571{DyK  _Toc47724572{DyK  _Toc47724573{DyK  _Toc47724574{DyK  _Toc47724575{DyK  _Toc47724576{DyK  _Toc47724577{DyK  _Toc47724578{DyK  _Toc47724579{DyK  _Toc47724580{DyK  _Toc47724581{DyK  _Toc47724582{DyK  _Toc47724583{DyK  _Toc47724584{DyK  _Toc47724585{DyK  _Toc47724586{DyK  _Toc47724587Ddb\|  c XA4rebound_images\wav2cv.gifb[NW\" $Mn)| QYg[NW\"PNG  IHDRb3kՍPLTE3f333f3333f3ffffff3f̙3f3f333f333333333f33333333f33f3ff3f3f3f3333f33̙33333f3333333f3333f3ffffff3f33ff3f3f3f3fff3ffffffffffff3ffff̙fff3fffffff3ffffff3f333f3333f3ffffff3f̙̙3̙f̙̙̙̙3f3f̙333f3̙333f3fff̙fff3f̙̙3f̙3f̙3f333f3333f3ffffff3f̙3f3f9ųbKGDH IDATx[,Eyӆ:[n}bwΎXa YA\1b4$b8_Uhl K 9cJG?oq<ϮY]gt ޤY nfJ◥HYB[(^H-'%!l)_+(>=WlHwB]f~nW]<,,S)c=X$_UMw0Qy_#wRq_H*Gx+ϟE?cC ;y}G봏^ r+e[ 5V7XFq q\_}صwᘺ- i#k}$i88Oozp.Kjm,oz,n8R~DjÖF LfᎥb8T P1*Cp Q*tWg]Ƽ81A|8{%LWPNUuX,븭x8%_zcϙqJ8è.PP)no*SlYu vPlA˭컊W_xr]ORzLJQkq@o2LPpe1亣*|&PN3J{,CR/os]Ghԥ 5VSL*.x#gCa~Vȥ]e]ĵHi99y߿H4P4C-Q|~>hG^@Y:n?8 4#y(nf=Q(~ͯulm(=WT;28~޼rEşKVՌd#4|GoeƏ4^]|K+^n;N.Jm8gk3lΠ>^e_B*U2P]'gZU1rlq/bN3y7QyKQ|f7YL"_<6T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1*Cpáb8T P1mӘHqeq=-.DVj/áb8T P1*Cp @ bC0m*F}]áb8}W\+};'b&|B8Mx-y#m-s)Sb#-5^P*^eڡ-e&ѡȗ3hYL\!/ Q,T ;/3R>cOrŦ KYEӔ|JbWK :蓟QJq,H2P}GRxy4Rb1} d˒(e:^Jh[5I3M/S^QL&W;/G yr|^ cP(䦇9Eģ&5J<37OS wK"O68T P1*Cpáb8T P1*ܓ Žl yŤ=T P1*Cpáb8Q.<=q$T,fi򊻴 17bvFL[]g7 `֋*Ա+ёKXv.b89SdσW1ޖQ< 27F"y}:1o\7?ۛ=N}<6Zq˄0GP1e]/K԰|Xxٙ *Nj'Appb#ԧOÆ9oh~ ]|ܸĄ&uOԧ]WSU+!mnrMDqbSgظZE)Yc!*6Vqi7wj3!6OWWX(NZ1wb0kGlDP)i7jP1O}񷊅_YޣbQl)~X_2moQ/՝69?G'uа(j*nT8=Qf:XBI\(Q֪b_~.Qú)&P1*Cpáb8T P1*Cpáb8T TӨKW_B3^_^jN߸߂S>|yd^\Us+8}i_*Rqj޹b=VLcpNJ+|5RllMlKI9`;nj^!ZѶsjg_ ٟ۩qJU̯sn'_ ~b}[qtv_ ;ږgb(^?6Q(^).ys׮)~ވ¯qh̯m)9~wIQ|/1K>k8ja//8p}áb8T P1*Cpz;8_LAn7_dS E^dB~~XIm*֋~Xeʟ?hQ3Ͷ5 '1nvo:`Xmcr`]Jj͔xb9Jn:6i;ԞoZBb1r<N QfjIEqXr>;3GԒOB`ޓL( ~SPJ>QUXحVwÈ՝;N(ξ[&vX}MhA|CpÉ{T @;F졝T `l=**CpNxZj**xT11Q@\Ň=W(i~܅,G}zg/{MQ9A}q/ޞԐW4_F;;b5a9O^݉ywIٺhBѯCka9 -6Ž4G1FQ<#)faay@d\LΆDx|&spS˪aoʽ%h_BŮ~G)6AQ{;;`ٷrTl w7V7lXjt&ݞ]Ž[bwǕ 싷]x~H1GyoE"\4Erw|*).0(ްkcFq8Q&:J]K%>֊LS. Qxhxhxhxhn.NS9Ʒb{ r|(S|(~c]8QK Qx]lGdQӉX޾(;bvg>.>bjmG,+^r.N8j{/&~?P(6fsrbވǏ(6޺ߨxw} ߺ _*Aa}UXNZHŏ'@UI]76X~D]áb8T P1*Cp[q|> [0 vIENDB`Dd<  C AbJ`X%83CcnJ`X%83CPNG  IHDR^pԨgAMApIDATx뵛8ۇw{f: w2lI:1<`2~Pҍgb9lCu<_Dr]0ƈmw, |qv"1\D%ҍ-ZfzU`ʐ9[m_߼xe|p밊^唨e>z27. ֫!sjw_'^W}oQ\z ܗ]kH>J-\З926K6 띰 mC mR!~p'jD>ꌈTQ3yU852̿Ke\1_E3^*kQu_3wFDUƽ=K2O_cb?vFD=JLxU`ʐ^_f:Z 6 4^1F9 5_%l. ߹Jރ&£3\*y#gϿe|{ ؟!ޏվӆ~juxp3~ύ׫!sjf7p^Ev%nHd"t_EʈHn5t? `vm&3:D'ϖk yE,z}~#1՟\J޸ ^׏].}U[z7~c6$#$n5tTzLoOVCPLUWg_Q&LjSK?@@@D>*sm,<:Mս #끆< Uz^^~:>؏ y}=/3޷p}j n! e'vq.D鸝AR>ujɃxf[e\ig;K2^=wݵm4u!XI]Uz8[ ճ)c wa kͥH`Ԭ<& ^m+رQK]ǢueθE,CVC:槯!ńVJ>?]Ho0+<{ &ٶ_^טkfZf>}uGq?Bb kkdK#W~>}gCФݺ켣">Mr▂}-9jHds.cuQ3Dz"^~{kXi5Ă~ǜt[ /ߥ^KDZs ܱ<_yV\ϖ"kz"ݏ~'砯A5ϙ<^`O!C}ޏYVu'} k,$~\ڶ}^^S^E.Ԅ9eŰzǾ߸ Ӿ#{9mۦi=ID_45#ա`^ɚZ;XDݒ_.Yopz2QπG62HqDg<&_ evkl^9˱w*8gAdc3r:=zG!X2̭:אU7.Cz2`j2׫azp{h58h ( h (C0W|Yifr`U=W"'rl|F=wcp}Ψg^ %g2cL"g]!gz4dPVU΍|;3db4cm۪8Bj; Ƙ&GzoӖԧ [$=4F,~kˎVL炻=c&`+ jlPi&,vbѐn8DA`_ R.F;M),nb_kB B8"`r*4ͬ ML"\@lu;fdz[ tutCB\':=[D @\ChؿvdSh8[0sdE~u-nd@xC6P D@A4P D@A4P (.r8YW^JM{nvh\S{ng2Iq4iLRv۶u}mۛ^py((\pO`d<,J6 ڶH Sd[ i`m)ҪCcm94vO"/BLkHi" 2M< id90kt4_"~???98ݐ}P׺gW4BL) ]"Ↄe 2pb[ ށ.O[ Wg37:8Y0/ cn'.!g^ @s 9Ľbn_CAIb䫳('ΰ 1=\M"P!^M. Ӯwi^'`cK(=l.ʷ@=

PUfb`]?{@|Xq- ɑtjh`1194"&rrXt̒}Am!_sH `{h V3)㏟_l P\#|?1kFU-v@1xu"ljY+[ F|vKYr泳s&jcLWUٮOH!"P+[3ٮU=΋NbV$#ʍx]̒P8 h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h ( h3~<+@A~13hhvb`O?bY871!(8ޑ1&](Y8 pkn Hk (rzrW6~Lŵ׫נwZ`k ORL6 Yw(,<o ~Ns%] rxʉA_Ӥ/j_:~ѷ4U} >d(#۸r\?O,C)6hVCVi`q^jČbjΖm+,k/q=TXrc%WKEs5@ Qs&VG;O_%qyf۶MӼmV`A%Qm/lȢ x[G:R|~V7@A4P D@A4P D@A4P YWv,=siVjF,-|} ; & OL[w =+*5،}Er<<`GD"58vUD2z/"u]3d88) p\r&sKnۖ!}MvE~'oGO_6C ?I= =Ѡ^X9.ξ?װiQ/acx-pU1y6Kbx !F_xOoqxR1j;A=^^6^]f %݇6y?g bAGz:]5Ly~hX/儢3&co%l wol_/&+!})wZi50L VÜtԌsBl.6؜ hX<$o?g^9{ jO|w_vpoibR!R0/adpچVԋLߔA)滋 E߯S%l wc `z1Z$77>s^{6 dP'统3/XKrhݗ]2}ZGÜト6֒t6dQ׷|E]f %݇LTf:^4|||>绯j O?<-FY D@A4P 5zTUmx/NyZꎺˏ?\lgC5pz5P D@QEur/Fbb˓BSCEDCX>];BV/6gEm;*bO9i}|_\Ɋh5$wqxu0qߟf*X~b`3ipPFpMncUV4T:`O*slԼ|f1P&9W869c? ATi|[MSS\lD$qoZ( P .8'b2-e̾!*[N%`q4F}>c9~EnO{3oߟ1-g9iN1N/nj]TG<&J-3fw7xpݡۇ/ͱ=@z{fz D@A4P Y5,{?b;6(M GC!flo h ( h ( h ( h (n?k σ63Z;oVn|ϼ _sʮ7/~61i`|bߗh 6?Rfmp?b("]׹Qqe??} ק`xO7KyK9YAw4#Ѝ;.HL΢lŸ޾t`31}*]};IxY] D@A4P D@A4P|cVEIENDB`1Dd0*<  C Aba1kmi~c2}=19n51kmi~c2}PNG  IHDREgAMA IDATx?㸞q`Μa6uPنFvxuv7tVһݻȡQ+s8S H$ϙaKD$ (|"B.?\b,i.GWue"}s)7zڛ0z9aY.ߜe[֥p+!ervZ.l):ސm\Flv%k=V{~cwwW6A~YV>YΖioJ}h/Ma(5:_ßKJ9Ϟ x,^1MvvyR$<Tw|יitFo{*}?x}}ݷ{iq{_x y!<_R^ߌjR^_A^}WaY^^S,/^JgY;K, /eJˋY=u^k.ombk.omb˶W LTaXצg1yp̳g!ntPkWP_5ߩZ;ϺtߵuR8f]u)e ivem\^ڛVcwg9V{~wekotkC\.ۥ"B=R^oJsn=nY^s9,nq#^:j !0 z84M)+Lc1;(8}|[['hv>ou^mot5w5we[s!6áǦi4?Eݛz o| sn=kXYޭ][pijW|W_|\B>q*|1IUh(;Bmo>ivK{?˛+jۛm8v߭_]4ԲN hX7anϲQ rM| m2b{ݶ{.i/^s9rgY^ű~VOJ`RZ<Gko7z˶Wom]Ƚ>&Nk;iu" Ha "Њ=u\qԂna3 s5*Zԥİzq֮n# HBG}eg e_ d罶ꮰ3vlPD-'tL-G'v ǻŜ#[@7gt&77,G &=ٓVvuĽr$"tQd.ǁcmGw>'\uIAwvDŽ"@Nf|8zGچkF2Gy)6wk3׃ԬYVGm_d@O[QEN;'2G X|"6tk;ru&nϥeQJۡba@ccY!".j5!B*v1j;çs"WHok{[J9w"~o2}Jy8{Zw4}+]/U(ijX\5 xLVe~u/15?woAe3GFu2{<] U!?\Co3MkicQ=\*"jeGJE:> MV:@]ꙓ6[Ag*I6tbJB]7?n}\ pw}q:x>)5kE ,ydž٭oR93@ a†ܽZ/^JSQAzQSCᡵ> O_F {]-oUT vS捉Ϗe|w$ًgNI!U1r+u!pgM~zw)O[c;\>#[YjcvhCGG4\ i&ןf[ёUwl?R88$;zwVz+$vW8sZqc\RMb][>|>MG6Π~^Wۘow͋3\kbK~vNĮpEO Z󾇶[Rs/(177x=ɚ`(m,N TQ@t?4@9Гc8v/n1OOxޏ7I\ KAљ],սR(MZ"pgtdp(34W# 94g4h}ϬXrs(r1QP@axMFj?M;T&pw<{/^+L'bleե}?oË.l@Ȧ3տR'  (1'N *V`jFQo/WӡFtSCU~\nE[*ҍf9x 8Ԉ ?KB i9q\*H-ȑR1;UE(,YzzOiӿ{I2ƒ#pGú8>]#Tẹy4lkj 4  $֮nrE8,ћO뗨9?z 4&n71ϷF_W8[E9{^aB~ nSR pj@|kWl߫l]Z2U8BvE ?SU8UYÄޯk?u-]siBID+/1Х8(rE~f 0e,T0 :g{k&KD_W)#j{-ŕ#dr Gs4MVBW8tg⚍N¥ ;rQ]9"J](^Lz^_Jo6VJ a]V.rN8 T%py)R`#)Q 8EXV8{_4Mb:jXט]*a@RYaVPг(}g0;'`1k{5\s#Gr#",ޤxvNzg\ʊ*zw5|@f&?=_/W{BN}J[k\8vƹOO3`x7w(h'ayT8mpt.z,V2~W-P@8*H"Ak \zp^RSw?Qjt ш2sp;Y^H19nb7|*d0N֓b>:P3W8jSd&]EAfcmۇGG@B9vI|]`qN?eUG!6TS  8K#kڊTsMXhwD0.oXۚyz&UXځژo׷OOrMp9<5ZM%/mAĺFrs8P#*. [̩f^\"6j8U;p3l_ots<52  #p7)T>sl   aU/G-aiF8D@n-<{O˗eF+kKi~.PzƓQ0Ko_vqy8ܛpV x0CVPCB\ ^ FQF~t`F9,꜍Uï@uϏיF^2vdHf>X`bC@](rhob~r2qtq%~? MjAwTaf(iC8:||)n~iiHݙG*֐ Ob0󄹬Hbա!xRq"z9=`QxJyQ*@U8V.>`v.8P#xW8qx=JEY5Ec/A;4}bh5tN: {mos% $ygyjTY0yw]ame \yỵ`d/]m\sa~Ʒ jT=FI8Ө5$&ZR}T[ PXmjd{фA VqШ|R&RN0sC痴W]OVM;Վdr=Ƈ8NI9[,;YRy^WR*vD̦M| 8%)-mNfփ3ǔ<==a9<{.Ko6MW;k'Ŏ))(?\2phM!3dn*F? HWSRmmbGRMXĸU/# *l ̬V2 ECaxBt_aFqĎY8Gl:s:OuCaxN )uPt?r7U 5b0_5r{o[YyswH +F ).1/jj#p( ב?u~=Æ=vH)hBxb Ď>l)p( Y|ev,~SW#"vDG^JB:9B~ZMIPUnPXTOĎ|w8FPE*Ǝ!v`':IЮl_bݘ. tXc$:+rlp;h?௯׫9saYT;8{CaxڢR5y7*nbo ׫n;׍zd kWؑA}yP ;^]vy!im#D*'WVDXFhZEc8+tqfb J=>oIi1E]9ñ-'6`b2 v+[ǢkP*mNìg˝ L.'vH\D،~/z}O鷣>[s0U0(jsqPc c'bG/r`-inh9c$LL8HeB>I>or*eoBױc~~fQVR&xo t;Έ,f˵ L8`S qkOrv;jdccpqu;ry9 0[{\@ga9hqƅi19R;تؑ碾5:Xa+G&`p^?a:?Ⱦn#+bGA9S887NewD({yݏLۢqJoj.v-9!:G6O8 bxG~m9ۓxZ,u'e}2*Ŏ8ʣ.F:g w#vd;hI3<_ՂWֽM _cW%nWi Y5nt6!pԅfp\57=##=4`MVpKO*M"G=* y MybGbTU6<`ݪKO]celEB(YQOCQc)<]'޽QVúFfUŎPR~Mt!'+wPgH(u$/R2ϿQBJoET8X9b^QbAiïGi,_RG~UU;΀$w3MS Yuڴ6߽IxGƎ*)7'-GqD#9j" xpE4Q퐍[8z@@:Ѝ)`R͐a pD*ea~0cE.;{:rZyk`JbarIDAT0c+:VŎRa0ZC dV͡9wȑBH2BJcFq"'4vT8N87[<Qc;B8FzPC}k[z.E{${'؟.0E%&4tw$v,on\E?%Vl ESЎر^㐍M̳(:pd#v zOڵu2ug넓RI̳Cn5`x;FrDAIr&tY !/|8;p%9G!0, 8Xp~;PLps+:s@JYp8 wPxHǎaAޱIT(iL8M<߄v>kls~E˥o_WimȌљ\腐S}~9_H!' ;Σׯ9 }1"p nb"GG[q } HQ@tB{qEqAa-ZUz(kkz9$y+$!D@>b1B@n-@*‹;rLqPz!p wQɥ1PzpjR~o:R3'#g-T8P&YvdlۆJVi}>c\j[3$p"M 5UCj=ݔ!x_Ž|Dٞt:f'KmtOQ5[TC;BJE /{u+/ͻ}x,[xKCdbbWʞ'K\}8age0AX7GgY\v7C?,=&8Іb/ǻ?a4$>kTl?!p%Fr QjFCu#r_ݟB444ivV6z#ž6ȳП*{N8),%|wt fȷZz-2#V YwƑ8O;O/^rGVY{hk˻v/sl%t,>b,6}Gj?}~ϫ+?lM_CZ7[s^<)ZCŻ.)`~?2Ө8Mqdq}'`WZN  bwcM40  ΓcHK ݜ}L%^}w32!{M smЦPR>^ un^忕;6#[]9pBDL[má ڌJ%g̳~L 'W2k|8 &}^o zcGF)MQ|QJ%iUVMuGPzѮy[ae*8Kǡ&9L<瑩CTVE' 84A\?83]X[1i3@Y'$XJmUV96 qjEfP::~N@|Ӝm$H%G1 Q 9Uu QfG=+pÑS3prG=+qٷت Т3@~(T8Ȩ^OͨU@Y VPS71 *h1OǁNt T8BaTkNx6vtΣp>]* &+KYOM$amRJsOс 5yқkMа3p 9H#p ; WJ};8b԰n"yTLnз3zfƋ9p<,`jdr1CO(7^I@[g:8CFNBGAߪ݌Bj٤.M"sPemu8 ?7=7aRn}vGI5_Ѧ7v pz]c80YC뭛)o@o-"x"nT?VuXᐒL6v0phN¹Tb jgӣ bKzUC|ü@:=zJ ,T#p 9H#p 9H#p 9H& PzH)q,87қP ag(pq&Gf.k֌@EK 9uA:euQD;W`/@iieBt!4j w8=^?wdi$2]*MaܲGVpNG3yyB_Tԥ{%%DtZЉzuJ'kF_c+6бBábC\0`[{%A pzf Z\vÄy9έU ֊Vuk:YG,%+ȑ#"p:m0aj+݃Vn}5 b&F33 nHY[93ИT!pPi0؁\ p 9H#p 9&& $)eM@ƱN1 9H#p 9H#p 9H#p 9H4 CM"DZVG~ބ^__KoB-՟90$G8@r$G8@rw\hr0x6@`A(.@x1Y@T8V8\֮W!J&٭xbH[8X|!mlE@, ‘qzCHRs-pp:ge7m^X-ʵB؁.$G8@r$G8@r3ZZz)eMM=C4fmG!z-%DS;w󅥨i>''MIpO/ϛ+|z(>)OOGG1]#Tr}?[&G#?F8ߵʚOg 8ap8|΍> ZB<ipixh@{:P}AM |5O& Ԅ4UŸV|ܧ/F |5|OgƧͭLLv>˙D˃ *?M>)h6dl:B}!dcɧ)1',OW_&ن8ة~2}) @M |5O&O OǓPw* >pRY~¶f |J͔mYS 7 |f}ꦷ&nL"NML4rOaZx"䧮 _縌BӎϯKㄮlxK 9uI2SX\\g׵saS3tcrOa5]_+&!3g5a8a>U-6kO!ӹ8s~qk!3pOrOa9|qK'{3iWt h2OrOa>&^߹CsiF{}N]y]}ꆸC_G_kirwl }L[=p`߾422HߚɴO?{KX~[ O4ܧ𝋪׏KčVo0W*Hq>׏Kč6m{dIe ...^}S%nNK{-o ,22M1wK;m1֧ϵXܙ =LA\'{!.ei>͐a\T"?Yvۧ4o-7 |fO5@,O~o ۖ{ VmY?>'PjӁzt*8߁'Pj@M |5 |o9.v-3XW˦ٞЧ&f9fgF>U>>3m);0O^N؃K`Q0dȄSݧTŎq&\BCsO0}"nxp?c6>60wy)8dEk}㢩OψfM0cOf)JĤ<&ܽYrFkOtnz£̮_ܹ;us4tۢ%{4q>'P#NGyhO-Ct>$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O:LSr>āO2O| O2Odbd$L|O2O;>'t''II|I'c%B~O2HwG >q>bL"?gB~r >'d('f^eLz63̕ZG!W4l[v+jjO߆7F1fk lu߁` ~/4­f)&+ ֻV~:˼4|碨kR/>gӌFNc+#%Of.;mOoF3q2||7,ڹ~hĴxJ7Oϛad3Y2Gc'LN״ k؏[ˏht$ 7Gȏ Oǚj iz;f;bCmndCTB;#iȼ6 KtS~|m=azוT~QŻ#[:ӹ1ZW7O+TI4GMxu|nDia;0=sM{ o8r&,\1=T%=y{lO[OOMcRiF4+*% c>Vx$}~:ً i~CΝEoHێf*ynJxdßA*Uq.\ Fx ͯpOQq>q+'pEpb)oFz\=X [-ݥ@bKOI* 㛟hy*.$Ez:Tq)wtj7ö6M+ء>& ^jILO؊iEUG SƛwDՖDp>\}U^KSӼP=CLO+,xʰ<=?X6e*yn_{2(1y[v\y^i ƯɾR}SekyϕQuOntYf*roZ6ָ+lhHOvIOѫ2 3X8< @V GwSCƎKn{MݓQ|鋻FX;.TeS=wo[}U5cltNOU_qzݧT85dn_1s5&onO\u;V=YJ/AZyEw؝v7H;;n:U wl{70IHk}a31cmOO/z0T4io:1=2Іaj x1UOzpG麋"6'K~[xڥ V*/قQMi3daҌnRfg4wf YM<)|VoN*2x>$t'>'I>O2I|O:LG$$=.zx`4|'ȧ >q |d$t'>'I>O2 >ߋ>'OGS |}rI>H>>%O2 i|+|O2A~Z>ɤi$iz8|JdᵃOIf~ ?I'od$t'>Ʉ>oS|9>ɠ$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |d$t'>'I>O2I|O: |ґzt>G m'Pj@M |59GYBsYBv.] ሳ9Lw7<č>";3Do n~ Os: 7(ƥ'-Sk+ OIܿi7~_-=$.s9m1G!n~ O>iNP=a?-;@KK2팋_|⸴lj1wmq!mU=nI~VqaI;m=q1lf )-_!.e+#~e n~ 7rb\7j| PT~bq vq!7}^oVtO~zOR\'/qԏuGO+ą+o273 fI/7lҊ fISlj f}o273 fO5@,O>/.e nً7 'Pj@M |5O& >|= 6Bq'W5θ-$%XrƸ4SJ:%N}5v~.(JvfS܏O!v_Y^OO|pI"cqnaSK}O&=MY-[})l>-;vƯƚ-U5? ymzpiT讓h/_xu?_O=U7[.XI'_k}"_9sH_O34zKT\ yݾ"vwValU|iO؝VOnp,04ݴeV&#n'~?,V~e'Z|'OLLp/8CcC_JbQBFܖ۫E894qzL*?%TmOv'DlO>.đڥ.qodSN@>Ib)7ZQ:'zҴn9nJw^<}ʺ vuOd1Ÿ~fǝhs1ZIkO6bO2yt8qJL|##n;^\֧Q>} q찬>.MO2IK:)^姓1+ۿO'1c^;}:7ly)>fYgm>܏yO8=dl}|KіM܏1[)֠6sq0&8͇"n l>̌1oQlJ4_|6DZO/S}ڏoOO䉰n>cR>%GM\i5P=&k>1|rCmRkr}|ǔNq<,H 6/l`|GMh_# x$ j:]_?Vh~t 潴OZi}OmKthmT9>ُ7w7sIn.O/'>)GS?j?ZohgpTKF~>ݧdwe1V>9X|}On8(OI,DJ8}bNeϊc<'9ܧqg秀si8~}㪆r8~̽}*:lv/qd.MO2I|Owk)rA ))>]7>-MԾ5EH$V%*ͪO=ZS|iwqkPE3,vYkdMO#۩K-6h/iCG6* /e6t2uX?3 y=XwM}Lq?£$u *?-|Y%Z{qazk]!)tS>.$3*/y~؞qOn[$_twM>}$| ]קdR}6w)>}) |*NK| I>O2I|O9O dr5ރO2 ($>'DŽO"K\'-xRGL\ Zσj> -}f#|å;|2}ҧw%* ^Uj?&U'c|O|Az]_zM|cx+|:4|w|֞Pd۾U}e7SA x`|6 S` CЖ~#BֵOk,フϷZ > {)Ontj>S>U%j?-&ZO\dS2<7kG;Nt6Qw6-nO-sY-.>m)=Ƨ3L<ԧ-<'LW>)?&\ϧw'ǃO2iSv:d.MO2I|O: |d$t}r>}9)WxO['6@M |5O& >'PjsĝY+\k> |Wz~WR>"L oBn_}2-ұEμݭFE'9sv#铽]~;|bLIlh4A @;ޞğ`)@` "N{:.\,8#'.-Kj3l}>x@|jtZϧOd8m@}2 ~fqW0 ’T%}š؛|/ySq)Ͷq1Sii%n+>Cc~HTcEbsx&؆e'5~5bA`}ty,ϣq[6HqB`X{ ɟ;-BF5-!=v>pAiT T.<;Q qǺxcdۖ=6ᓍ\dqnq"!}"SϦ~D5nh)!Ųrܖ¦M> "U]<|Fh|wONԧ8)ڽ^${닞,GW,/ǥ ` Wmq4=-GTǗ㶥~|%?u~||;?95ĥ|:1[}Od+} L2ⶓOh.فY(>ٸ{tvXVv[&'>'pM@;en·?Wi#_pMO§m'a62 '8|-:v`_3 =帮E܈o>|Z'5Y~<>Gdi-u[;瓁Ol/YdHNׯg!G19 kOpEiWQ~7@;~ jwMDrgHwd!IDFen }:#ˎqۭ[O-9ǒHϧȲgoWUO$tS4eDs(ygim#DYx4v2{d0|׆B> ~>mY`WNqqyQyH۳OYT3zxk>}?nVD]lB6>|roѿt'>'I>O2ߋIDATI|O:>}9jO8'-O& >'Pj@M֧>'Pj@M |5O& >'Pj@M |5><U|:Ux?*@t&RIENDB`Dd(z  c VA2rebound_images\new03.gifbd<4@>75oi |n@&j*z09Ud<4@>75oiPNG  IHDRz(ePLTEdD<,\L<||||t|l|l|t-bKGDHrIDATxaEotk3~|$'!rpp̨ 1х'D1WK7y}K%'ֳ9s c9N)W2y}.>4I=) _1>/&&k17^Uo2^RCҘE2MK6!ϚĴ rBDQ^WO Zsc.\H~5nc "oA5|'e\l"Wrez\v+ 1C`rkn_lpb92yh:yisNL_ M /n6tOX^Qlh6mnZƮ`ZW}H{>/\-}dZ?05Ok/> sU[,( fM;6=#aL-䵿 O=cݦ]8v+=AB۶g^hKro7kt~yЊ 4ila0m1䴶X^R聟im0_җ$- : ~iw[Ҝ6{~g^|?#j~o^ȥyc'#vמH_=t{jiQ³Ҵ  Mo}lд  MX;6hZ Aj,mvҧctL{<Ҷv^Jw7ILM{ݪeƷm۹5qnHmʦ o% -mgE:fL[IH9,MV~C0m/?vӶд`ѴOLķk\fߡz~4-X2m+Z„| "~iZDlC2Ӷ_Z`D#Z,6qk{NLuhݜi]9<4Y4msm{BlnI6+Ly;jCӂ%ӊY`3L+lZ u/kjZl`ZcdM M6oZcXŲJw`̯GJ-M L{>Lۍ_>:ߧ=5˦M|g5H8=$GJ-M i v#O=ӼgDjϱJ]hZ1#`gy]M~$l;B/hZv-6P;vtA~hښ]0+CKӚ62^s)6'z04Y6m߸?H?v[Kӊ^lk:֠7{ҴfOk%/OᆻڂiC5>#MVF5qCKӚ[}Zaf'mF҉ى -Mk5m#FhZV:8Y{7؞LiZ0oڒzq+ӾD=h JɴoM L[Z@6덾x9G)4-3md. M+;}u/!MȫٯiqLى49i۾;7LØԎ;hڣr4Ӻb(Qۖ4Ŵw's#ܝ?1Rд@ihgӺmm[Ҵ[pf작д@iNL5!mInQLdߝϣv^S,M{P4j%VtTfָ.-M{L4i`XI;m=&iMrӎN5WȞ}Ci^iZt^+f]1xTR7\`LnѴj֏ѮtqZw8wӆZ`l`-xܴ9>M lQ{ӴiӴiӴiubCwiOL[7iaNfnx Z;ʦ%U_1KW>- MKAӲ+4-Q5mS !+?9RIENDB` Dd`Oz  c VA2rebound_images\new04.gifb KKl{ 5 `W [n rʧ-cC$MKKl{ 5 `WPNG  IHDR`%2sBITO0PLTEO&IbKGDHIDATxݍnH@ɆD&U``SPt9vmK@n.oEB +c =Kj旗Pm~yy`avmOLIc/{؊`/LڋuOv}1_ iM^˸lZaQhutooKȿNK7&Wo]1F٧vUzy>'?n[FjwHS. |Ic}NXFz`Kѝ5yO[ø[ߒ鐝%5Cz1;df+zR_^e,)HOAz S =mօ@֨6e0ɅOmP_fLͦ.=i ,8T/EGN\Nο'B|!x]]O8Z"Duqs( 3_6YP#l/d"]p2zYpR03] 6q.7E_"xt 58p)8N0t' !$Sw|Džh&'޹}^~o=X93i6B`:qۢB?`mєX}2!1!n4E;wڃ[|Tpma,x&'3l϶ nL0\^UTK8t@0>l.<5l'; H)`jw}w 0)Xz%O(Xz[LMj@kR'7v`܋οOk.яo /=/$c<**s Y曊 / BS:T ]mA~{';dav,g?f*(h=2" YKʖL dVpRT1KUI]_s'w[pVNc0&= t M&UE<0*yeUG(x*@M`[ g`UR1{ &~MK1{ ;`'w ;) 4)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =)HOAz S =\FSmL4J S =)HOAz S$X[[g Y{,_ !zԡ+K0(x8&⢴rwn g̱P9GJ?VM0)!R,\5|qK&s;u| U.\ڳy8|r|} ٸJ%]^0w~L"Kzo l9t)_Ky_mrK&_~ JiA+i*+")HOAzd xҫ6>'_L8u =)HOAz S I,O\=jIENDB` DdkEz  c VA2rebound_images\new05.gifbR&gE3҃. n&':Gz'Ǻ֐&gE3҃PNG  IHDRk2isBITO0PLTEO&IbKGDHtIDATxn0FsDxm%[I FCw'Qf@^ލ4[w|X6sa\fgC@cnC `i]X?'<,U7fhr:H9l:~U;emp|Y[)u=d=h0ĽoqmUXwZr}Fh=[nlmm 쌵s+Y;u\^u s[]ZڸC6޵D!k#*[_T'XW k]XZֺlú6Յ.ua 3]^4 \+.º2ua k]XeM}ڰ 喃`Rֶuwͯ>Ǻv[Xpc8-iGkIX)HZc]7/ʽ1#ޅum|ߨ k]XZֺuy9 Xcma k]XZֺօ.ua k]XZֺօ.ua k]XZֺօ.ua k]XZֵֺ y;i_d}㿢}u k]ekUvX!uwo [ǵ͈N;o=WW5CntJsm7Z?Ӆ#[ZӃa k]XZֺօ.uakRf"ߣ1qIENDB`$DdlT$~  c ZA6rebound_images\cvpaint.gifb#pN /~վ M# n#D{Y$؎̩pN /~վ MPNG  IHDRlPLTE99{199B!9!B999BJRJRRRRsZsss{s{s{{{RZZJBJJZνJRJֽRR{{RJRRss{s𠠤7NbKGDH IDATxK:FYYEϦsq̢M[R(rw^ $ߩx I$,Їe@l7:`e@6 V!>Y"߇S0ٖeȻĢ'%g1ki7jOI1WWAjָpWuc?_>o Nll T&Κ^XǣRX|J٢!VܶRmY̷1ܳC8W^V䢫dcM)P5B8l5a~[hb5I}MzwB(}r,Z?;ge1_sxዓd:t=JiaK=,Rmƾ9^?Mǎ;a\8S-VӂAP[7^E'Tg$e?NRmyl=7ܴd{1aĄl@^[`^xBҦ %[=jH-#BMgX)+P,ds_$[dk|/ -WP\?fs}={npuP'o8 U6L(-:d[eKޞ}Y݂oC׶aCMD=V)0Y cޤ!%n +jw6}Dپ=|%tm(m*V?3 %\h,v$tg?2!7en4/"߇SodN@G  A7l_q`"hS n@6Ѝrٞ=f;̿NZl(d[ll0шlp l"@٨&l ywvC l#l@7  2MٖÞ@ɀl5 ]%5=[ &cl+C಴AɘB6 dL!3vjf { 0F6rf@N $ۓ}[? d -8}ދ.{}lنNԸ^نRٺ3@5]gvَ_3UEG*6cl}43Vg!MƸ=t.# Nc}@w6G}[,~X=ۍ g{VaQ!m2.!ɖ#/m=f[B>jd U|J&Hs~d=@ɨ?z>̞gM>?s>v}ƃ=n@6ɠc%ѪMdlF. T3ٳ Is̖Npʶ!1q{dz6xrq}%Bl1*9xҏj[wBr\K>z^;xx#6u']kO>V96vMk S]K4U [by:gl[۳rm?uA̖H7zTmbb\wLFT2Ϥ[l\p;lQ'ۿ?z.Q|m JMwYl-?ee\&-m2iϯ=k7 4@Aթ+DO_խEekde@> '#HJũMgȶ@6΅dk a8HTny]6-ZB@R.$UT(eMudqssCٺ1FǢڀZ6#d]+/%\ ->L: dl5!F㕴`?~r`B2ͻMXf;3,7qB6zntqsln%tv5ȶ`̞rk7Ӎl1*~'NOL4D |z7EIUY@6 ]dcIg|n,d+<^6yrR5`_,Ad/]MOt|&ڂlq"[0Z (CƳLZ8mLaW_$Kw0V1{6c dg϶x?);x*iK7g6۳уt?бlc WtR\2WY>Փz6Gg͢5PzRW2BlhX1yfoM [7Xt4ω%J+Δ`既˦uB\r@5->gCsȖdmMvORKZvUM?]RZ B̓-Z \? 4~~/`ѕ  \pzh#LJ. 7|*||NR+ҵ)!dZqzpr|'8R&tP6+_z<9 ]y#[cq?hu5]6d|Bz;H,T.}iaDKRPv^hݺ[yeO/XWi,6d[%J܂4UQ$p6 nˎ~=}-fisvjd{l-5e,"e9蔐Mr0li^:-cڥӚbMsmRJkN>ը`[g 7H65:ll߶l"fI6XJ- k!zs .|%tp;u$kg=l,[c6Br(_Br*B8 yF&Yy - Ma4 0K-`O|4Oӄ1l}lI&mcLlI%oa^:1WuK[Ln mv=d_VU}QQM^DG˖;pkc'L޾O0WUl #[ìڍ4>H !>҇5hrOwįj0?O7g*lϳl ~ٴs N0\J\ǫcϩDXWaO}lߖ'!z5ܳF},MʕUopiaFݲDFeÇel@ɘvSXʿ0_C!V~Ooy{kW}@:-;x\I=lKldwjjuerJ~Rm7昍0z<d[Ͼ]Z[|);~w䅿9L_n-ic\{M6?ON#N"jd_A}#ud=B6|.ɔa--鲄&!RcMat $d d{ԥllڷ kJTX&[>Di ӚA9472ER6Z;)0ei]azJ20o=YSjO%m2䐡}t8A+-IuZ5 IoI:+s2lM]d߳՝I"*ՆR>7Mp;3H+˄ e|eg:$h[q^UIT d1Ud+I%Ro›6D6tZp /VkDoKE.HsvdlqG.è٤5[懇T[o.6/rz}Ѓ gRl^lN'mSfqk%r7 R2\>_(|ˊPIW«)k[ ܳN 5ոZ }`گ PP~ 3lZ@Jt!yӴ*8О,? ޡ ۾+XU$husI FNgacMCm Cxmo=WtN%,|Nc.MVn&deBNYPOXdom!\73 s'oYG魴b )=x)Îu}:&咩I!RͳZ#Le fld+X6{P!4l?ineATV;+Mnx0$mNkJ)M?nl̐ q.[07;dF. V$ƾv'ZBp|mGnvOp4rlຄC0nƜm;mNFkS^0 j!?TT.Or)+ul %7n"+ A0Xy:B.׀O?*tRm6'lA7t١mӞօTZ,[K*m݂F&*dlmMLތg܈;lS>_:a,3Od+m礲IT)è?%N'6B~yƾSlJp *qlt7Տ'*YXB}XRȶ@^\FW|H7ZvtؑM1ys/+)s{ d%e)Hk X"hKR9iWIVd©d+gKohuy@ևSRn}s!ԫ8ȶ\_P&¸ >2p:K(VqfA`?}G-Q?%TOk?` [m t3q7}|xx/Re dl8lO??c)ZZ 4'He#)3dDes_ԫZW<jU5%6-Ď͇uלw6 zPΖ;l.Œ%ߺN%~O|]t3 MExˢS% d{zPF(![xRE鍅 P *M6|9Ugؒ lmwd=!oSƶgPyHFmle[c2{e5-4GF)<@bra3]FeM:B,tiuIC7n!zْA}f/\.Q^_AMml8l-^_έulq ێP:Nx͉z\7Vgl!vl\hS*Z.r z .),| LOl %S mllOrM|ϟW<- "S sU=, d۟'-OI$0Vx}^uOś\Pglm+v-,..6}s 9RN N!דoWezͳ/UJȖP>}Yeۺ WP5ބ{C%ɶ0D>#lid[@h]UUtsLF53Dwa Tʓd[ [/e (R`c3s䩥QF!"A8j1cbaK<>h\0\Cɍ 0FOƀl{rFJ z wo]G @ `-9 |XK0kHG* m?N*>b>{z5熩gi6O8>y~6v62lij)IL?ٷC~#mݬñ 4N/bZRrCDGْ@\4/Q)ёIcc dSlpiŠһT<,dfY>G\qqly [O.Pw0POxNvnGBs>ll!%MTZW(c3Il/ ޜ\3V*c-̹l̀l9d33K~!BN9! N7KrEl> =ly*d[SO)ʖbixtYmm![B6ls)քPڄKܦ1n]/ٞ@RVY&۶5:qƬ:'-d7}( ?7Dm$vp5BT \B-Xjl@6\B6Nz^-%s-uf]Vdk6É'+wUplqN-dů$ׄflU@-\^=S ]K/dl8lc.rS\Vdkd[9/]\'!۩lS3v謂l@@M̠qll5@`.&vk"d@7N#hܹl?߿ Qt m5vApn 6-ӨP7C@= tn@B0+ȶvh~<d;4 MҐb@˰{Ϸ+ .@6 ȶ6-:gpVjl z\ dkdK@ B{-,d@NhO軣fllm -9m ݀l tn@6 @7 d݀l tn@6 ˱ almӧ6 F@6 @7 d݀l tn@6Ѝ}eb]`Meˁi*>eN+ es$__faTW2vWXm\٣ g Gm>lmX$l-^0dk d Zch1س ll![c [`/'т`!0IDAT]8eOWh@6 #CpF+o^qIENDB`Ddi<  C A b(أc VlOYn أc VlOYPNG  IHDRT~)gAMA IDATxu6ap]+t0b'iaW*a::SD( $}Ibu Rrl&Z+̝_[mkY-'kJe߼O[~γHE_^^™ߕz_{FD͒fثGdkkǍ=@crtzr&]mԣg ϟ?9 ah3WK]"J4g۳.{#7G|Ǣ׬kk?_4-m۶5O/IZ䀟׃F2;أLw7hY9֥*xȌfkp}c1kbbL>G[TۻOY૾p{o g[fg3c屰]9gqkG^\7Zj<-e_|*n,W #f+Yp?"Zr.XXۣ<ϙMݒU"uGZ-fūZ[ecihΣY ͻYZڲϿԬk}|w?cL3yJ)ffl{ݞ?f&cr؋-&%ZWs%Mse,97{{ijo>Z2G~4 9oy]b˻==g9NwLf?oZ%뫼g4: 9m~oy?~CϏ#9z^(hw>~dK-epe-[nco/ O(c߫efǢ׬kko~Q2v9ϲ8f69iL>G[T.Td".?Y14h ?-5̯uϩkr[!ڒkf[Xο|87B~@(E? "PjohǾe%O(1ĞnoqX)V:Go7k\csSL,_ӌ)W3,if^cn*s)˖)#>f9/~'v2j!e֟y0kf>-ˣ]=KLdv5+$s!W&}@{W½ol13i+v~.?r̍90C,p?.2!XԒ+:a.K l,g}7SYdb% _en9ށPxm-Ove}~5mu#)y(_Zho5gu"i?zL؛.K?|R&ZW%a|ˌcBvNLd>e;7h=tSE=߮3Q \G4|v^9|l#gqxu ?[ a &;ȏq%l[{~ p'f߆_kmwl@+cLo)b@5E*ls\2nIϏacwO r^HyS{|?h"!HGaCQG\ 8h? bqzI]_~i児}"k8o/>soMcw 9E(Gc0ZjI_PG.v>\ͻ7~c.[ycun݄+g#_u?'?z©XGRu.C |#㌝h? bqzI<b9OE?V?(<{ 1B~@(>?Wx>?EEFG;~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@( `n2Zp{{{J)zPRe'd85}g8g8g8:? "PB~@(EJw^\5MO =5g==:M^)ܤ>? "PBU X4Uvu 6lZxYLjvړm:juwAWOܴjίf_j6-40ʖu/^=oGMY `|m+Pf_bh9۪д.S]SRݼszfh_.uM7- j>=C7דinn:M3 qm𥜩-Qj]{GݝUwNFfQ,M[J>]|{lo?o\.ߺ^}S (n*wOM-{mN4` B_AρJ4ͪ7ܤ74ҎKs(? "PB~@(Zoդ IENDB` Dd  c hADrebound_images\rebound_before.gif bNwマ&F h)nF L: -Nwマ&FPNG  IHDRfVsBITO0PLTEO&IbKGDHIDATx휋*EOZ+rkQQFJڨɌtH(fp>Zpdt{"qЌ{)>yA37po2ıA7^.tN%9֧境:8B΁PC":臞ow@n_ٗ^mrv8*vZ:-FAt`@hƢyp'y˟@psr P=9{OF"[#jV4|'t{MF6+@x] ~Af~3t׫iLCeƕf݅6l$LR, ,2d)֌ād#l;(`.H$gE,;i{`q\Ṯ<ˁX4ƢL_~yp2`0f2ݘK*nfYm1.mkt$c)>3rX L5mu>]5, 4>f`@e[șZQqE:'Ya6*wvvD;13.]E' 9=,OsRv;p0w.33wlk&N{@v9(8PϒΗӪEou, v:O'ƹ #d] =cʜ9WKo 6 }V{9 6@܉]LR̓P{mkfËx:8JAODG}RcwtPJm6~7NFs%A7 WgrPwM;CVPv&]`TZ/'8p{ guNn-䷽UGd>pqm,{m*Qa 2X.3"kIA@T3}urvq]:'i)dɬǁN`oH(냧0ب/N` @T-NLkY-'kJe߼O[~γHE_^^™ߕz_{FD͒fثGdkkǍ=@crtzr&]mԣg ϟ?9 ah3WK]"J4g۳.{#7G|Ǣ׬kk?_4-m۶5O/IZ䀟׃F2;أLw7hY9֥*xȌfkp}c1kbbL>G[TۻOY૾p{o g[fg3c屰]9gqkG^\7Zj<-e_|*n,W #f+Yp?"Zr.XXۣ<ϙMݒU"uGZ-fūZ[ecihΣY ͻYZڲϿԬk}|w?cL3yJ)ffl{ݞ?f&cr؋-&%ZWs%Mse,97{{ijo>Z2G~4 9oy]b˻==g9NwLf?oZ%뫼g4: 9m~oy?~CϏ#9z^(hw>~dK-epe-[nco/ O(c߫efǢ׬kko~Q2v9ϲ8f69iL>G[T.Td".?Y14h ?-5̯uϩkr[!ڒkf[Xο|87B~@(E? "PjohǾe%O(1ĞnoqX)V:Go7k\csSL,_ӌ)W3,if^cn*s)˖)#>f9/~'v2j!e֟y0kf>-ˣ]=KLdv5+$s!W&}@{W½ol13i+v~.?r̍90C,p?.2!XԒ+:a.K l,g}7SYdb% _en9ށPxm-Ove}~5mu#)y(_Zho5gu"i?zL؛.K?|R&ZW%a|ˌcBvNLd>e;7h=tSE=߮3Q \G4|v^9|l#gqxu ?[ a &;ȏq%l[{~ p'f߆_kmwl@+cLo)b@5E*ls\2nIϏacwO r^HyS{|?h"!HGaCQG\ 8h? bqzI]_~i児}"k8o/>soMcw 9E(Gc0ZjI_PG.v>\ͻ7~c.[ycun݄+g#_u?'?z©XGRu.C |#㌝h? bqzI<b9OE?V?(<{ 1B~@(>?Wx>?EEFG;~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@(E? "PB~@( `n2Zp{{{J)zPRe'd85}g8g8g8:? "PB~@(EJw^\5MO =5g==:M^)ܤ>? "PBU X4Uvu 6lZxYLjvړm:juwAWOܴjίf_j6-40ʖu/^=oGMY `|m+Pf_bh9۪д.S]SRݼszfh_.uM7- j>=C7דinn:M3 qm𥜩-Qj]{GݝUwNFfQ,M[J>]|{lo?o\.ߺ^}S (n*wOM-{mN4` B_AρJ4ͪ7ܤ74ҎKs(? "PB~@(Zoդ IENDB`J/Dd4& <  C A b.3yf#WW*. An.3yf#WW*PNG  IHDRg:]gAMA IDATx˕붖a.}3UiZ3Agк:@lGЇFᱱ (%SM ~0;c~_;'o?mŬ?[}o̟?ϛ3ڟ^}V,+cuB1X>ngM\ɞ皭1\?rL6.9{{>~om{zzt>;>OǢk}i2P_._}2˕,c\2˕wr ex<&:+rer)Iocf>&~|c_p8|{{r9_^pb3X :Mhi2 2re-Q/c\21\2V?B2 yds-Xd\2.?Ƙ/k=½P`9l9!Hp8N/_?cZ>}6vwVwxdtnߠﭣu}6-Sg-˵1,W}drnsmIR_͢A_~׿P?O|p8&kW_{7}^Q}ש f'B2,c\~rI\~ 1\˸yerL1\)#{UVloׯӒ/_c.~??u5#mk}i2P_._}2˕,c\2˕wr ex<&:+rer)Iocf>&x/ڒ66p/9rzޓ4ll_e,w6Y\2&ʵ6Ys>&{k2.?& qV\(bN:E,ؒ>pt's's.|=׃1?vx:}b&ܻk8n%uO}_ru2,c\~s,c1))P.=ɞ皩}L<ׂe\~L,s19_AØ?2Ƙ߿1=0NvOMM]b=&Y. ~cv;&TS }n7'}~0fo1||L`͚S>Nlv4IO Anxϫc@=Β+l7v-fM@w1e]jf٤oѩ,Bn~9ZϤWW%T9W_@Ԫ<i;yt?Q]^ p<俏ǩfV6͞;ws o۬l8nW?`cN!=6W>Vn%='q@k _2vWjjoLjؚx4_ۙP=-?e\dS=`K:%my=NSl#t1 &AzƴM>p8Ϥ햴t|>ONoa#_Cƾ&t"S6ߎ'f]S}}m7cyw^%=d:x3$ϤP촞vSq==Nx+rK_rnβ=ؚ붤 i4|&(劲&lIXLSv<T6qz}g/y-&(S?HgP{6D|/+D8\oԀkB?^,ט{s[-Guw_[8V噴IhIU:~/,|z9@+^8/7O4U?HWX+|آZϤM-ڶkrwkIK-` ə_ k ˝[ovsw vXm+%]+>֒([K< v0_w߆ʉ1V럻0cXn/E#Z`nj}(1Ȧ&JW-iXŧ ݮ7hjϳskҒ0OAza\.gJdc~'P慞IUmqnM ~/hw=mhq?48Nv,vIϋaPUnE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`PiE`Pi]p/ ~e/) mIjʤZ7V[I+.{U|7z<@Kz>s \0-$e<5*9TŊMj ktP+?B:ZWEqRG/^A%]@43ֺmIݪOR%?r"kEh*c׸O5&S{ς]~K7hpn <.w%e~q2#/>;OoZ^S5 <1iXZMtg^2gr_Fh!ry֯({_ҏX'|*5O37}[& ~re?q!Ж'&v$So%X.g02?"xj "]*wD,ث;SkWnxPʤ& [l!<{WvX\ݳ!6ntb9'wpjը),ś:&VFQϱ+Hv%,3d^b|v~64t&3sr2vk]VMϯzf뼐 M+Zy ҹ|c0ЮΥ +n!jz/ٮďJ(< SҬtHh_29)e`>%rl{YB2*\4m4JCSN la~àO3ʮڜ):|.usYmn /53M~ԧuYt^ӈt*_krR+'mi4 W_KqP8KΣu~~3^k9Ko>@'c5Tw{xtJVi9(_XIG8 -X"U%ۍ]Y4[+*yheAR\CB9<w0[IB5a!oɬ.?|jϽΛLZ_K{=9[MZngqT5&?"Z+Q;$wV%6]6 ?"3w7 g;jU2;kse~!BuFwΏ֋yWhlnsm];y$#=R9 Fi? _Sj29JJR H;kAP:'BoGTw?cy8Ϥ/޴VBW!8x!B:wz?? D Y?L_ 4~IA0Wl$%ۦJ{?ӑ mh!};7dy\9A۾ %,DM+؝`q 4tʄ]*v+ObIČmNhh,V?"4'| 67}hBin"t2k:qWV 0RDzR+έOڝnDϿq#<rɳLxc6:sd:~~bs+o7Щ+|e!FyAOckW8hMtsw0(?"Wsg^-xjXFVzNۺt6UjuOؒ'P6TQqKnr¤eUcsCmy m62W:+95Xm-Y0 =ݱ5;k͹rh_WY3P\ ݍZ70w7qc 05qMxU؄֗CO's~rzճ>}D+Ogb:nѧ uw&*y'G$zSՏt`HKVD3YJv/90 >Şؚ i_tKDK}Q:, H `]]\[Sk,xUަ> Gm;Dh_g̹?rCbLutFhb۴bJ3.)>Wt Kqj! 0V%C`pz_hC+k8¶޳Lkz wn:kd>5i',i{Oa[?Hqut|aSN mw!ӷhF)/H c:+7YݛBh!<}B#VY6bY[ն`anFlAAޓ~ې b4mHW ~g$o#kmPAz"ĪdcYӇX !2!2uP_,?[] ƮC"N(7vv;KTD\cAr}.Wo)8d/\ܰrEKb{4pK:\7ߒv)8RD#+Pr= ?ק2'Nh?DWzm Uen#9+ #hlӒff2ϧBE͊є b̧>ِ~90pvs_r 3͚àǟ-Sބ[쯬$~re'sg(_bgY%Z~~%siA T.弉Eڮ=ʷOwG\+mTfIp\i EyM:Q#ԧ~iGLr`@nagEkƱZMZWK[~ƼʅS_:trcnGqT}JG761Z~Z]kC,~1fnIotܹ@t\d(IDAT/[l`r̵@pSIʪEO6qze慗ԨvK`xVdh?7ZX>sc}YV[%?Yh=7q^/͏&A!:vknGvNfci姵V=Zu\*UݔG>̢AZE3gТ>{\Թljp|L9'u/\|.ƴvcn|69Aʣ`Ru.Ϗ2 U][?.kr$B9O1窋տP.?5!?Sy' YIYd$-Or`]~Di(Fi}AYkVAE]k]8`"wTVHVq(|.M4äu=xM!J0h}k峵Pk@WhIWn_{ا~ni'$xmOC,|ꗗ:eU[[!yjrzUr YNgHA\Q=lF c!23es83s/SPyz$+9w6=rsXY/O\v(-gzn"MZvyhsvcSg[׃ݿN~^\u6&WYoY>c=mvD=$!Uz ӂf];=MY?$?aҮ^x<^`o+<7Ѵx&{iJrcsi$|fiL|XMa^sJ A=}{r!2/!;#u0ΫԃiOǯ:-oenlܮrݹ\U~aQ=vǂ}3Ss韃D)`*<72rzSsnIn"MH}y; +\<72e/RgܨH-i9%YCԽhmq)Q؜ sw"s)ǖbMIvڏֱu~>so]'狻$9?N+ՔeJQˏi} '3wynq=5mzSan'AY?$?6qR|.M4ݱ?S`SɅ)o Cl@ K%=_swPӉ=^91 nW(>|ꗗߨbSL幻5ˊб0V<;7Z3 azպ`ݽկP``{9w'=ԕk^^~.AY9ݵVtø^JgVb+6nVY z5(0/Tpn[XAY4[zpB=0w7#x-[y*Qa5y|VԂe+c?̰0hk߲W_~RUr vYCh'Вnd&2N_xr· g,^l} L']! %79􅔧u&Ք1[tbiz,uרu4mW/u[H(z Ta%.acϒӦ/.Ue K0톹5\_~歧I'I's6[@ӾօDԂOn7Wgn2'Fe9=M$C-i UgA7dy?sTn1$%G8~å:\C"sĆcxl `pۨN~WA/B\~:BmY+9I޴)gr iY c[gu='Y_|YIxA,I!){Y]2<iA1-|~DNJ[3kT4cMmA @K:68o&M2sd>ͳLxz="3Qñ׷2Z'}?Ot9Sgry%Nc&F|2PWZ-B`cuo>՜f9e -"F9۽\Ə;{xqcu9[,KN\ΤcsJ/\w \>FpثP~CO]/O2[ X sw'0w7`-5wwpPBsw/Χ~9^h\ XW:Hr>sw+ Xݝ)<6l p35swFBsw;瓹}0w[c`P]Or ݹMg+LzaQؖ[]w˛x>k B0@Ky(k] ݝL?r,|. ]`eG/ 7wwn~yclĹNm`m3w7`]㴰T 4wwrka`N^0w7`]RK:֌ED}Ps s;/o+S?YƝ;(08 @swϴ<78swF#'Dsw\.ƹ,C@pswGlpsw,hKgϊ78.ܒS>N+e>#4 w7sIENDB`%$Dd4& <  C A b#; j)u\ZfQ٦rq# qni#; j)u\ZfQ٦rPNG  IHDRg:]gAMA IDATxգF9ޏ3huAK֫3pB[g : 4 ܘ/y.\@hw(Dd߯]D?}߯X`n?LsˈU㲷]_1uۤ36Ud˸m|_Sp;=Qbr:}]i֗ZޮG%iC2^;:z^tuF\vq1:o'q9cteئ%@\vθ1l-5;6r_c&q1k~|?O>]$r~js<rq͞/qv-ZF6r_[h9j yp=&圱۔*$uݧO9L^ ڟ 9k8nKky;5{\)kgUSq9cteǘ3M2b eزMפvl9c,oθ1kuxz͛S#o!U/C)>}:Nz>~DdZkya_c}nWm\k+Ƶntf۽jlk :x<޽nO%-e*twm0ӧO"r~߻]=k}zDzk &@\vθ1:clgd .;Fg\[ɖcal1ViθSG#Sl$胟Nt3-Nbnn1_9ۥW׆uhOI\q1ek6Fg\1:vθ1Vl-d˸Ig\vU6۾Md6Y)bˇ|,/)Y󗯿/>3SI[R'y'K=U'sQa,Vd-5&[kۤ3.gZ66=ǤvwOo/An҉oGvwsR^Ha,R'seǘ' 5c>Y޾62d}͎юkEcbE."|!{}_9yߵb^Qyh=i;Mj'}dθuqmOr_c,l-5;*mc꾶.c{V(Iw"9<8<<ۗA:\E/u>'mF#ddθ1>Y^\v+6۾Md6:q}:,x,t|-<쓥*9rƨOk+}n-5gm3}n42r,:qx}:pyc?~_tbw}gg5n }g9iKE2b|ոmצWk6錫Ͷ{62.{) ETds*Nҗ/"g|9\wy< y oO1[mi-6zkǸ\\gNjn;g\m]6~}-Mvθl¸'q_;I?D_ߟED˯߾=>y<n9NƹZN͞':סs}c_;Ը$:.;Fg\q1匱z/oq1l-5&[kۤ3.gZ6)"]`9_)wy!/"DD""--zhXX:Uڴq&qv&[eo;ؿ7~^DǾNav3P8A*=,[!OzlMצڷɖ*mR "}_.7=JM`-a|&Iw]׸*`ja' Rߓ+,( v9?_B|Щ梅 "7h03h⣿9)<â@ٓ\.C>;O\a!-|8:ch.>)P*IIi ~o\UIGS6ИNz鏩U,|vƔnS 9u8WO}egʽ$-]w=Qw8~T cC'lv;rx<ϊ'>Wy Gd5x<|>Sv;JsnqzH~Ξ#FOZDv;J`Qk|}HUlCVб鈤rEn[˰x<"un zϵF>27'mL鏽Ğ4iZ*I ep3a}ߧ_<.i_b.LC;U<,zv]z̓qM {|=}1Γ8=2`>\R*cNyzaqIwn ]'-t,i$=δ=Ě]TkӞt7Yr<=fn2|o9F{<ܖ^D.n{IvOzLt4]^6zӴ=j=Fne'48]&,,r83sݞЙI/TrEI&I8ݮ{ȘŊSv?x˯I~Ovǘ*6mrdhzI :1ھ_WQԞ}J7&lmg{^Ckx>orMNvOZ濅IOW8]\0c=3ڀW_y.|.7W,~7bj]vv+Gk{:]kYOz:%'1yɯ}8Px;TpInٓhC7IOD| `i(I/Vu;_GI5㱯s!?gm^t=iXznCkهdyt%UFOV&I/7 ,jȸOKOfota^Tv ?N"x<}654z}\v5פТi.6I_.E7 _fww_N{|ט>[]_ӷ|õ.~m\g\dpc+bZ]Q%gyW: p49MSTdv $@||+Ij9KPzM:g\ZfBZx7tv (_=>izg6 uvٴx85[υ ~CJo.~![NeKWwKyI}w2oฝ]?@~i6%mS{'|;CLC"7%Ǘ3l;[xF-9(g:eXNhEXuu~\}MǮd?,qй]1ڋU)~zvq[Ͼ#yr |_\͋w]ZzT iM {kP~y9)7N;q`V%*g%=lɀq\ f?7.9Yuñ3=6gl'5.6샵j+Jw)ܢ C6N>0-wxʹI 0y%θ^/CApw6PEJU1}6S[ZPJ\Fxz:{$30}:cWn{EOگu-~v}}/"}_. o3ުس7={ߘmIK#?ޜ'0m3׮Hټ87sf_~bƺmp% \Έ\?BRxdrE9aaO姸Oy+P/wjP&8ZЫXkү^5.@u$ Kr׊G[}B2#~tMbM*JIF)JQd\xyn *8ƍ ı=gj+K X@);#+S$iCL]S~6eG~ǒ֥vg64=錯o~YΈOQ ]Ee\IVmه.t[nLZ y$]5}0&36w|Qϱbʑzx4R@M{6Ǵ1^slI{ҩkg#'rϐfӴCjd)>.l Ize357;kfߝކfq.R2"˱~e켲 xvU*UnW.E%oH^9'ݘeqg9Lߪ{ݨ@E<1d*mfbrNzהRZR댻74Ic᛼"5~uyq^']r.8Ij6뤕LY_I2f{tYrϸΨgwb^v;.eϠn 5`O:aMlD@n }#I,~N<{;q.R[yҏs^Y oIyܶyj3nJ׮@`xv7jZ F5q mѓ@)4JP$ R$i"IIH(E@)4JP$ R$i"IIܿ'}ڶOBIxW*vt@POz71@' XCp7JP$ R$iq #:t-xλ7hWiA_}>T]oqQrL\1^!$mq_= kKy]|϶ål'O]X=dc[r|‹{?tכ/t[/EV#{H\B=p}Vn{klϟZlWI03^$GUVEF!a%ҮZ"I盽<nʧN߮%DET)p;f4RsXζ*#k-7ROg/t,Xnz@!t>_K?G@7(~s_pLZcny9Jɬ L/WUr#>p.7[tS9Uk.&kZ17nvz m#*oVbѺv8sԧe:lYTa-v{߮4|vZ7ՍEM7m݊x5a[mI:ٸ%aߘ /bdv רdIRi9ۦ5@3M݈ x;Ŵr|EvgrR9E٩9n|>|qW%o4JP$ R$i"II -$ͷhn"IIH(E@)4~\n[?jtm6>m8I{ب?Yw {+۵$= 1k'cn҃[nZWygy0Hm'cq|橒qY;7c}F8v^XHIΏc]8 9|r| Sv2[ힺ\_9/_o; *;@9JƗSk:m wSڄGÃq6#OOKcDdsYMO׊72zNR듺S+n[kmvn/_\多]Ɯǁ֪&یvmk YT܇W)n%k;<NޟkW}M V39Q+D;VTlFV;\eM^%#ۡ}6,UHsvX+nc_PaW[wUvXn/=ni*Uߤgˤ͜IfT /aĵuk{Za+-?{ת=[U10̀sY ]>HXc/x.UŰٱ2[έ_N2GJ@PG50=>~rm';+uV)iI-#~i};NΣsv I#ϩ)\l9qYzRU##yn|fw80ʺ_t9h^ l팼nmloSZ/qX5o1Sn[mN4wnI:p )uPs} ͪRe $]Ɔ&_U?p7%@mw~W!dIrUyt7ZnYrFm'=pc8{ؚ跭ڎгE1{$m5?+{<90]f+_E%;+cS]?v| ?-I 9XnjUKzPr|,' wnv :dpO2(ݫ9.͹ϤOK+|TI7('s 6Pz|8Moh}U5wn=6T;o?1{ď/tSlUm\t9[)?Cr{B8b6n q@Pbt@-׹P?&3;X)UC9JUOdq^H*%[$*%PeEv:wKUE"zmU&NCHaMݝ@9nԒ]`988_BMM$6X' R$i"IT5in$}4n `E$7cH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(Ed96IDAT@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i"IIH(E@)4JP$ R$i~_&Iw]R5M~jפPax4( IENDB`~DdR  c jAFrebound_images\rebound_running.gif b}5qk=&Hx 3npzBR}Hj}5qk=&HPNG  IHDRR*3sBITO0PLTEO&IbKGDHIDATxڋ@@Q11VyJYwn3F>()CުB?ZI;T *tVH!tbliٛ952>^q0fSrֹX'vp 3 ÷!|^o֋nd|+rfS5zNa,_֟ӌ ŭ/mkkwz%&vFc\u}&o}*Ͷ oPC#cűJ|WRah'xkuRzBx+M6prd9|ɻd3h_Ew/t% IB ð1 t~nFJ7wbœVaDt3R/ɌM>^$#PQx|! uϝ[B6#ecs"qH r MBu<OF*R T *,gla#n?-On,U 1 !<2NT?}yn8^\ܻbelNrlUNWD,A0\M5} "_pp~<׊a*Gu%U`l,ODm;z9<(ۼJ Dƣל;@7LɄ{' CZw!\ 뤈0{^Գ8UEwl8\՘ `Tx\)0["1e`NbSD2L Jr?klNrlUNb1G^˓"B3QZɺyQUylb Zgg|cH(XvzUw˖HTbsu<XTn|Ix;1ؙ,XOFs'Q ;P&ӧ"_{#[":ab-E$ D$>DtBU8p-+(*1lĔu:)O-Fcm)$/.QK?vb'H>nhB>XLá- ԌXyJ{LU_yoK[ɾIhy\'eQ-DK1^s,B'HMNqZN+0>u*CLyN6Ru̦}\gEh;ͯ` J!..@˞>u_;Ǣ:cF2j_\ʟ1&,O2l_ $UtI=>~EZzA(YŢ@VJTS1t|p>&jXbK$<2N mjф}`p.y^-Iԉu(iUJ|b?\{{i˖HTbsu<0b"Dy.XBm ["`uR+h^*u:cĔ!<(N68ډcfDDQ&򗪈!'_#": 9"d2Bl8~NeJDa&QMfzD2;xv K5DDxhwܕy|bͬv̭ȹ1ho`Z?w ;m_ٷwͦi6goux&عn? r/F蛆I[cݓdzn?henJ6 8:zyzqy;gz=u&vG?y~ oOqß$Tו;a `Z|7鵴񖥔hw`59c-lv h9uf#k/ϮvnX$k,i!;f,qv3ǹ[s~1l>4NurNE/LGM')rˏ*FJ^$ 7:|K3܋|#}q\"JZR Z y t-Aj6m7m s 39ܞ)pb31jK] cQ}8Q[f*Z}M\;换BaI1fC8ύkݖ}Qfa t'Ob\۝1ng7Eۆh.hmc&2c v-mr#Kk²g|o=;~[|m]9Xq=r"Qʵ85^o򍧘6nLX\>?Q ޵c5G-tpv3Mi$s,:uVz0lŮE0޽͛f~-%AM_0 f/`q i'+S|$'V`gYA&JRďqAcI} $KMdw8M;\h^]ōe/>-KXE78zL%b8::@ pnͲfq{o9wz<> d2 R{ɨKuly͹,_K+]6nc`3jO󥽐|+o4KL']l/Rw~W6 sg`nٜ,HyMAD{gfs"^H&'3QU+D""3(4ͲKQTkK3DԷ Sݓƙ!Sc&ormo۲ޣt(0'QLa)"$6k*fI m'X7=0X7o8ON[P4i>:zze#]&L@ DTKZhn~6tBuoΦ)E&+ +Lj^Dр@:o8ThS1[ONT#}=OK-\וgzeXocӣ\ޱ{U((:xA*x_U8un74}!d$_{*"U>#1(ދ̧D}>g8 'IVhRȒEuU *wEg|P}o|&o{Uhn85l*U >ףEpv.ɫ%E_n?^8{}6Ho53nźyV>8qOCQv"m9}bg}$TGhШ1d0 >Aq .,O &-4[M4D!s73?p1*̪[0eyׁ`S(I@[X,-nV? Z>_[۷Vvb?\G)}$:vobqλDI%LG!s(}I?J{36c͏o_?pG oP@h,Nr>c_U<gZEy ͋3V_g\ys2^cQ˻&df~(mDs^j]+v?yPHQ|L؍>Q"Z7U9}GQGiS]-6_> tuj=KUlai1 xR9@\Qlt^tW|CN2ѧ `Z_#1ډo0(6K#Q]sYb.wJ`}O湱$ zO8{9@ .mLrq$WD Fn6m?[ϳW_:/:j|M"$|_ϨK˺ Pf QbS,wtr阻Z]k0z"QGѺ'cywOo/x^}ݓn' uͪTfbv:K«l*x6*X&4*Wۄkz|1,+IŠJM/T%ǒB M5To\ڡM/Y]Ɵ R/}K2jw&͠ {9}wϲj!Q(v5="Lmn,9߆jw&֟ QuL4:}6_&|2`n[^Ǚ(ϚM&ZDz_܂5AgA'<$<TM(9QencC{~VP2Q"cͲ-|/TeQje|c̲LTza%DIVzoILQ Ֆ6KQcjUčd A{HL&#X*] /_ 6* {prL&j5B6z[b]U.O)<=>SBBȶ@ 0OA]> ŏ wOTA9 .e;U۸NtmDx(T3-Drcib?r7F)Cfuu.z9\jGBCSQ_#{,V.'4!{{C?ҡpc ]pMSqб\;v~D0d}%)]21 @DG~20^4ǀa4w1듖GۚpFۉ=m5|5۲QݩV&FJ4F'00\^5s f;P-w`m2V+U39۞ioF>uF+rH:4 5ޞi{U?BDKl'R}oeL`R.TQL&p *?v^2{ouI`E%Mo^CDa&yDD20>E)*emDv;ƔO`-8AvbU#IU귒TGW2ۉGBD%*m=2*(}ƌ1 CJvnૂbfRUQo }mnoQMEeQՍ*:MC_U 9\'j >@2n\{Jmn7m9 Sx;QuݗT`cVbde]*TnPx\LgSΦּW}l;e je>^CXxlnkwD} NE}N _<^E8 .chc0Xcr*ߴ O+";~oV3墳[7vATϨꪥ3qdWm'y="ڝ&rpũGBD%:DT,HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&y+m< he4 <?o]NJ*Dm*6)'|p9o !ܕ+r`p9IF"zPR;0MN&"f[.jm@8HDJD,9sKV$ո6PPÜf2 RsfT1;Α< Uvq|ef/9E^X ݌Y517(ˁQygfbU.[w6lwҹ[EB^XF")j>eiSe"Tz&R*V3ۆr D=+g82djK16l7Z@>eXzJDylپ|V eaV&5nmf%P.ʦ;EN˟12^mOݓn\*3mxh]դTxhj>̕0:;}y <1eM&CnZGچ.9|LI5Vvi"uY?UV٨"eZϟ?;ΑK(ۆ2UmHf&uvQ8-weYkUؙpMe8#hIoF3D4kg|8ȼjߐ╖L _UmHQDzDkb3)J952y!J{^6xe?!?|(Sr%e*uIGE9كvHDa&yDDf"BhF̟DyE1*pN"|)~g"Q*='W+ᨪ[= *8wڈZO[Q f*U9fL]EX$j{**'~٘U:dq|UbfIO{[r*t=(c9 T˥¼2\;1:tv\҅Z^oumLU[ODcIB;Q.FuU6b'JTo.Y7$s}S;y5f Q.DDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDa&yDDf"HDbm;~R IDATQ& !J*Q%9 /O(y͐b,܆cg&ۇ/s4,7Fo h;.*/3 SбaQBpNIlMXĢޝm<bp|\&nSá?o->~8\Q\cr*|mA(4Eb[7EՈ81S7*l|U4f}N/Ī %IORF[QB/>w_e_TkxQ `⎾ia5MI&gd}.%iR;w9)hS_"}pVЭ&8ʒb?X,GGG|y>*f(H__?~SO?Ǐ߼}#o<gTVɩQ'N&`Pw D* {|(;5;OLxj% 2zeN)*7  !0gc nONVS; 'T?\) ;'L(| Z50IENDB`iDdhz  c VA2rebound_images\smash.gifbJ%D--lU w no~.L>LjPJ%D--lU PNG  IHDR:sBITO0PLTE???@@~~~@ ``>CbKGDHIDATxًzH@ቻUo̅#&!Qs6( 6\m cZ0P9XVSL_Ngң_voyaLHXc(#V`a.]Wk[n+y7_Tɡv G\/na6Ն+wLw{YMJoTkGգ;ә:S)}}oΕ0foi#Gmo gлaq>c/.!CjI$9U _xű0i4υrzL\f9$ 1!Υ~p?5 ;`W ByQ/_"J&WA0MLHHH(&wKurҠ>*`ezB>H`T͛xka; vMU_c;-N&q9 KL-m?atԗ0-rxάK~a3L[9>3f;](⟐L:̎/L/mG)O   Ebm                                                                               }!]}k/9ϻ:Ӿ0_ȏk/x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000`(l7i׷:Ԏ~v2~_;+)IENDB`Dd`qqZ  c 6A9929.bmpbF+ Xod[nF+ Xod[PNG  IHDR )WgAMA pHYs|4kjIDATxܡNBPs(n66&f0|߀7la6\P= G.QEvUU-z'{o7Y0t"tB;;GOÇu't0oo?(rxkH=;)@g P[E$5jw`)*d6Hj/,WAHjj4Hjp4Hjp4HjNJ$5ͦRn @R_ HZ){;IIENDB` [8@8 NormalCJ_HaJmH sH tH N@N Titre 1$<@&5CJ KH OJQJ\^JaJ P@P Titre 2$<@& 56CJOJQJ\]^JaJJ@J Titre 3$<@&5CJOJQJ\^JaJB@BTitre 4$<@&5>*OJQJmH 2@2Titre 5 <@&CJ2A@2 Police par dfaut.@.En-tte  p#4U@4Lien hypertexte>*B*8 @28 Pied de page  p#,)@A, Numro de page."@.Lgende xx5.@.TM 1h5;OJQJ(@(TM 25CJ$@$TM 3CJ$@$TM 4CJ$@$TM 5CJ$@$TM 6CJ$@$TM 7CJ$@$TM 8CJ$@$TM 9CJty2Q!!   !!!! ! ! ! ! !!!!!!!!!!!!!!!!!!! !!!"!#!$!%!&!'!(!)!*!+!,!-!.!/!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!Qyz } "'1g=y?AEH[QOZv]u^bhosv~&ɔƣ&|״E?Wd 5#%,c/ 5&:?APCGJvLQRX\cb)gkp"tpvty*33 #"   &    , !" # $%& '()*6+,3-./01 2\34 5x67U8 9:(;<= >;?8@:AB C D%EFGHI8JKL MNOP +888;H j  {#lc p" $wӍñ73qHv1yz"{|j~~afox z %"($4hBCgEHKP Q6QRSZU]__8_{_____`````a a9aaaaaa bb.b?bPbabrb8ekkkkl-lFll9m>m`mammmmmmmmm#n$nJnKnqnrnnnnnnn oo4o5o[o\ooo:u{?gaBv%pb*)>D)he r @Wjs       !+!e"u').000001131J1p11111112(2O2f2}222222337%;>@CYFHKNRKUW[[[3]u]]8_k__W`}````1aRaaaabOb~bbbcFcycccddBeSeceeefCff-gxgghmjlloVuvuxubxxxyJyyyy.zkzz{I{{{|H|||~~     !"$%&')*,-.01245789:<=>?ABCEFGIJKLNOPQSTUVXY[\]^`cdghijklmnpqrstuvwyz{|}~    &>xC#FIEPRW_'_m___` aaa.bnbkk3l+mqmmm@nnnoUorz<~ #(+/36;@DHMRWZ_be<>Geg+IKXvy$BEPnq!?Bf '*>\_m-0Fdg~ +.Ljm -KNWux  + I L W u x ( + > \ _   $ B E S q t  4 7 I g j ( + 7 U X k  #/MP]{~14?]`l -KN`~ '*:X[f /2=[^d #:X[c(FIZx{   >A]{~%(9WZh"2PSa 7:Cad1ORi :=Kil})GJ[y| (+Ecf "@CWux 03Sqt =@]{~ ) , 5 S V f rrrGv]v_vw xx}܉x      {9AOARAty %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%                '+24;!!`b$k2(2l:~mib$أc VlOYb$3yf#WW*.b$O | p#b$; j)u\ZfQ٦rq#b$J;8ҥy#b$J`X%83Cb$kmi~c2}=1@0(  B S  ?ty? _Toc36311299 _Toc47724428 _Toc36313438 _Toc36313635 _Toc47724429 _Toc36311304 _Toc36313444 _Toc36313641 _Toc47724430 _Toc36313439 _Toc36313636 _Toc47724431 _Toc36311300 _Toc36313440 _Toc36313637 _Toc47724432 _Toc36311301 _Toc36313441 _Toc36313638 _Toc47724433 _Toc36311303 _Toc36313443 _Toc36313640 _Toc47724434 _Toc47724435 _Toc36311306 _Toc36313446 _Toc36313643 _Toc47724436 _Toc47724437 _Toc47724438 _Toc47724439 _Toc47724440 _Toc47724441 _Toc47724442 _Toc47724443 _Toc47724444 _Toc47724445 _Toc47724446 _Toc47724447 _Toc47724448 _Toc47724449 _Toc47724450 _Toc47724451 _Toc36311305 _Toc36313445 _Toc36313642 _Toc47724452 _Toc47724453 _Toc36311307 _Toc36313447 _Toc36313644 _Toc47724454 _Toc36311308 _Toc36313448 _Toc36313645 _Toc47724455 _Toc47724456 _Toc36311309 _Toc36313449 _Toc36313646 _Toc47724457 _Toc36311310 _Toc36313450 _Toc36313647 _Toc47724458 _Toc36311311 _Toc36313451 _Toc36313648 _Toc47724459 _Toc36311312 _Toc36313452 _Toc36313649 _Toc47724460 _Toc36311313 _Toc36313453 _Toc36313650 _Toc47724461 _Toc36311314 _Toc36313454 _Toc36313651 _Toc47724462 _Toc36311315 _Toc36313455 _Toc36313652 _Toc47724463 _Toc47724464 _Toc47724465 _Toc47724466 _Toc47724467 _Toc47724468 _Toc47724469 _Toc47724470 _Toc47724471 _Toc47724472 _Toc36311316 _Toc36313456 _Toc36313653 _Toc47724473 _Toc36311317 _Toc36313457 _Toc36313654 _Toc47724474 _Toc36311318 _Toc36313458 _Toc36313655 _Toc47724475 _Toc36311319 _Toc36313459 _Toc36313656 _Toc47724476 _Toc47724477 _Toc47724478 _Toc47724479 _Toc47724480 _Toc47724481 _Toc47724482 _Toc47724483 _Toc36311320 _Toc36313460 _Toc36313657 _Toc47724484 _Toc47724485 _Toc47724486 _Toc47724487 _Toc47724488 _Toc47724489 _Toc47724490 _Toc47724491 _Toc47724492 _Toc47724493 _Toc47724494 _Toc47724495 _Toc47724496 _Toc47724497 _Toc47724498 _Toc47724499 _Toc47724500 _Toc47724501 _Toc47724502 _Toc47724503 _Toc47724504 _Toc47724505 _Toc47724506 _Toc36311322 _Toc36313462 _Toc36313659 _Toc47724507 _Toc36311323 _Toc36313463 _Toc36313660 _Toc47724508 _Toc36313661 _Toc47724509 _Toc36313662 _Toc47724510 _Toc36313663 _Toc47724511 _Toc36313664 _Toc47724512 _Toc36313665 _Toc47724513 _Toc36313666 _Toc47724514 _Toc36311324 _Toc36313464 _Toc36313667 _Toc47724515 _Toc36313668 _Toc47724516 _Toc36313669 _Toc47724517 _Toc36313670 _Toc47724518 _Toc36313671 _Toc47724519 _Toc36313672 _Toc47724520 _Toc36313673 _Toc47724521 _Toc36313674 _Toc47724522 _Toc36313675 _Toc47724523 _Toc36313676 _Toc47724524 _Toc36313677 _Toc47724525 _Toc36313678 _Toc47724526 _Toc36313679 _Toc47724527 _Toc36313680 _Toc47724528 _Toc36313681 _Toc47724529 _Toc47724530 _Toc36313682 _Toc47724531 _Toc36313683 _Toc47724532 _Toc36313684 _Toc47724533 _Toc36313685 _Toc47724534 _Toc36313686 _Toc47724535 _Toc47724536 _Toc47724537 _Toc47724538 _Toc47724539 _Toc47724540 _Toc47724541 _Toc47724542 _Toc47724543 _Toc47724544 _Toc47724545 _Toc47724546 _Toc47724547 _Toc47724548 _Hlt42969822 _Toc47724549 _Toc36311325 _Toc36313465 _Toc36313687 _Toc36311321 _Toc36313461 _Toc36313658 _Toc47724550 _Toc47724551 _Toc47724552 _Toc36311326 _Toc36313466 _Toc36313688 _Toc47724553 _Toc47724554 _Toc36311327 _Toc36313467 _Toc36313689 _Toc47724555 _Toc36311328 _Toc36313468 _Toc36313690 _Toc47724556 _Toc36311329 _Toc36313469 _Toc36313691 _Toc47724557 _Toc36311330 _Toc36313470 _Toc36313692 _Toc47724558 _Toc36311331 _Toc36313471 _Toc36313693 _Toc47724559 _Toc47724560 _Toc47724561 _Toc36311332 _Toc36313472 _Toc36313694 _Toc47724562 _Toc47724563 _Toc36311333 _Toc36313473 _Toc36313695 _Toc47724564 _Toc36311334 _Toc36313474 _Toc36313696 _Toc47724565 _Toc36311335 _Toc36313475 _Toc36313697 _Toc47724566 _Toc36311337 _Toc36313477 _Toc36313699 _Toc47724567 _Toc36311338 _Toc36313478 _Toc36313700 _Toc47724568 _Toc36311339 _Toc36313479 _Toc36313701 _Toc47724569 _Toc36311340 _Toc36313480 _Toc36313702 _Toc47724570 _Toc36313481 _Toc36313703 _Toc47724571 _Toc36311342 _Toc36313482 _Toc36313704 _Toc47724572 _Toc47724573 _Toc47724574 _Toc47724575 _Toc47724576 _Toc47724577 _Toc47724578 _Toc47724579 _Toc47724580 _Toc47724581 _Toc47724582 _Toc47724583 _Toc47724584 _Toc47724585 _Toc36311336 _Toc36313476 _Toc36313698 _Toc47724586 _Hlt45303058 _Toc47724587 _Toc36313437 _Toc36313634y """"'''k(k(k(k(----////1g=g=g=g=r==>>y?@@`AAABDDEGHHHH[QRRRROZOZOZOZG[t^t^t^u^bbbb#e#e#e#effff:l:l:l:lxmxmxmxmooooqsv~& ɔɔɔɔ w%|ƣ)`-e"c/$I||||0000~~ȲȲss ״״xxee||))ƺƺeeUU6..KW9EULdddd5555####,c/AAAAAPCPCPCPCJJJJJJJJvLvLvLvLRRRRSSSSWWWWYYY[[[[\`cbbb@f)gikkkQloppppt"toypyuy -./ !"#$%&'()*+,0123456789:;<=>?@ABCDEFGHIJKLMNOPQ[\]RSTUVWXYZ^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=> """"'''((((----////2q=v==>>~?!@@dAA"BBD EE(GIIIIeQeQeQeQRRRR`Z`Z`Z`ZZ[^^^^bbbb0e0e0e0effffUlUlUlUlmmmmo%qsv~+EΔΔΔΔ2222M: ٝٝٝٝգ($ը4j6o'o9­2U6666вв{{--ߴߴ}}ʶʶhh;;ںںjj ))ƽƽccE GGX+dFS`Roooo@@@@1111",n/AAAAAXCXCXCXCJJJJJJJJLLLLRRRRSSSSXXXXYYY[[[[+]`bbbOf.>s>w>>>>>>>>>>>>>!?'?C?K?[?`?y?~???????@@#@-@I@L@@@@@@@ A AA!A`AdAgAqAAA3D6DlDoD$E,EmEuEEEGGuGwG/H2HHHIILLMN>OAOCOFOROUOPPSSUVVVWW^^aaebmbccAdfdJgKgmm7n=nnn`oeooo&q(qssttzvVo:yuyPreferred Customer"F:\fromg\divers\cv programming.docPreferred Customer"F:\fromg\divers\cv programming.docPreferred Customer?C:\windows\TEMP\Enregistrement automatique decv programming.asdPreferred Customer"F:\fromg\divers\cv programming.docPreferred Customer"F:\fromg\divers\cv programming.docPreferred Customer"F:\fromg\divers\cv programming.docPreferred Customer"F:\fromg\divers\cv programming.docPreferred Customer?C:\windows\TEMP\Enregistrement automatique decv programming.asdPreferred Customer"F:\fromg\divers\cv programming.docPreferred Customer"F:\fromg\divers\cv programming.doc7y  n7j(T~ <@ qN x"Hhho(.^`OJPJQJ^Jo(-^`OJQJ^Jo(hHopp^p`OJQJo(hH@ @ ^@ `OJQJo(hH^`OJQJ^Jo(hHo^`OJQJo(hH^`OJQJo(hH^`OJQJ^Jo(hHoPP^P`OJQJo(hHhh. hhOJQJo( hhOJQJo(`o(n7x<@qN7y T~@ն,yty`@`~G:Times New Roman5Symbol3& :Arial;Wingdings?5 :Courier New71Courier"1[wf x&sF66Q HQ$Y0d}TCOLECOVISION PROGRAMMINGDaniel BienvenuPreferred Customer Oh+'0 0< X d p |COLECOVISION PROGRAMMING0OLEDaniel Bienvenuaniani Normal.dotvPreferred CustomerM22fMicrosoft Word 8.0M@N@6^o@$`$G@͐JZQ66 ՜.+,D՜.+,X px  bb}1 COLECOVISION PROGRAMMING Titreh(RZ _PID_GUID _PID_HLINKSAN{377A8BE0-599B-11D7-853F-444553540000}AHrgvrebound_images\wav2cv.gif"hrebound_images\new02.gif"itrebound_images\new03.gif"nrebound_images\new04.gif"orebound_images\new05.gifMӍrebound_images\cvpaint.gifr"rebound_images\rebound_before.gif9P#rebound_images\rebound_running.gifi90Erebound_images\smash.gifKu 9919.bmpIu 9939.bmpHv 9929.bmp  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./012346789:;<>?@ABCDMRoot Entry Fl /JZOData 1Table=eWordDocument12SummaryInformation(5DocumentSummaryInformation8=CompObjjObjectPool /JZ /JZ  FDocument Microsoft Word MSWordDocWord.Document.89q