ࡱ> j l W X Y Z [ \ ] ^ _ ` a b c d e f g h i [ ybjbj .jjylllll,ajT     (0aaaaaaa$b eX+a4  44+aq  @aqqq4   aq4aqqw~O8  p^,r\lvB\/X {Va0aheqheqMicroprocessor Simulator V5.0 Help  C Neil Bauers 2003  HYPERLINK "http://www.softwareforeducation.com/" http://www.softwareforeducation.com/ GeneralTutorialsReference  HYPERLINK \l "Intro" Introduction  HYPERLINK \l "Architecture" Architecture  HYPERLINK \l "Install" Installation  HYPERLINK \l "UnInstall" Un-Installation  HYPERLINK \l "Register" To Register  HYPERLINK \l "Form" Registration Form  HYPERLINK \l "FAQ" FAQ and Bugs  HYPERLINK \l "Handbook" PC Support Handbook Use Alt+Tab to switch between the help and simulator windows. HYPERLINK \l "GettingStarted" Getting Started  HYPERLINK \l "LearningTasks" All Learning Tasks  HYPERLINK \l "Ex01" 01 First Program --  HYPERLINK \l "Ex99" Nasty Example  HYPERLINK \l "Ex02" 02 Traffic Lights  HYPERLINK \l "Ex03" 03 Data Moves  HYPERLINK \l "Ex04" 04 Counting  HYPERLINK \l "Ex05" 05 Keyboard Input  HYPERLINK \l "Ex06" 06 Procedures  HYPERLINK \l "Ex07" 07 Text I/O  HYPERLINK \l "Ex08" 08 Data Tables  HYPERLINK \l "Ex09" 09 Parameters  HYPERLINK \l "Ex10" 10SWInterrupts  HYPERLINK \l "Ex11" 11HWInterrupts HYPERLINK \l "ShortCut" Shortcut Keys  HYPERLINK \l "Ascii" ASCII Codes  HYPERLINK \l "Glossary" Glossary  HYPERLINK \l "BinHex" HexadecimalandBinary  HYPERLINK \l "IsetSummary" InstructionSetSummary  HYPERLINK \l "IsetDetailed" InstructionSetDetailed  HYPERLINK \l "ListFile" The List File  HYPERLINK \l "NegNum" Negative Numbers  HYPERLINK \l "PopUpHelp" Pop-up Help  HYPERLINK \l "Truth" Logic and Truth  HYPERLINK \l "Editor" The Editor  HYPERLINK \l "Peripherals" Peripheral DevicesThis simulator is for learners in the 16+ age range although many younger enthusiasts have used it too. It introduces low level programming and microcomputer architecture. Tutorial materials are included covering the subject in some depth. The tutorials align closely with the British GCE A2 Computing specifications and also the British BTEC National for IT Practitioners (Computer Systems). The simulator has enough depth and flexibility to be used with university undergraduate students studying low level programming for the first time. Introduction  HYPERLINK \l "Contents" Contents Who Should Use the Simulator The simulator is intended for any student studying low level programming, control or machine architecture for the first time. The simulator can be used by students aged 14 to 16 to solve less complex problems such as controlling the traffic lights and snake. More advanced students typically 16 or older can solve quite complex low level programming problems involving conditional jumps, procedures, software and hardware interrupts and Boolean logic. Although programs will be small, there is good scope for modular design and separation of code and data tables. The simulator is suitable for courses such as BTEC National Diploma for IT Practitioners (Computer Systems and Control Technology) AS and A2 Computing (Low Level Programming) Electronics Courses. Courses involving microcontrollers. Courses involving control systems. Description of the Simulator In the shareware version the following instructions are not included. CALL, RET, INT and IRET. The hardware timer interrupt does not function because IRET can not be used either. The registered version includes these features. You can  HYPERLINK "https://secure.element5.com/shareit/checkout.html?productid=138531&language=English" register the software here. This simulator emulates an eight bit CPU that is similar to the low eight bits of the 80x86 family of chips. 256 bytes of RAM are simulated. It is surprising how much can be done with only 256 bytes or RAM. Features 8 bit CPU 16 Input Output ports. Not all are used. Simulated peripherals on ports 0 to 5. An assembler. On-line help. Single step through programs. Continuously run programs. Interrupt 02 triggered by a hardware timer (simulated). CPU Clock Speed can be altered. PeripheralsExample ProgramsKeyboard Input99keyb.asmTraffic Lights99tlight.asmSeven Segment Display99sevseg.asmHeater and Thermostat99hon.asm and 99hoff.asmSnake and Maze99snake.asmStepper Motor99step.asmMemory Mapped VDU99keyb.asm Documentation On-line hypertext help is stored in a Website. It is possible to copy from the help pages and paste into a word processor or text editor programs. Registered users have permission to modify help files for use by students and to print and or make multiple photocopies. Disclaimer This simulation software is not guaranteed in any way. It may differ from reality. It might not even work at all. Try it out and if you like it, please register. System Architecture  HYPERLINK \l "Contents" Contents Simplified Simulator Architecture  central processing unit (CPU) 256 bytes of random access memory (RAM) 16 input output (IO) ports. Only six are used. A hardware timer that triggers interrupt 02 at regular time intervals that you can pre-set using the configuration tab. A keyboard that triggers interrupt 03. Peripherals connected to the Ports. The simulator is programmable in that you can run many different programs. In real life, the RAM would be replaced by read only memory (ROM) and the system would only ever run one program hard wired into the ROM. There are hundreds of examples of systems like this controlling traffic lights, CD players, simple games consoles, many children's games, TV remote controls, microwave oven timers, clock radios, car engine management systems, central heating controllers, environmental control systems and the list goes on. The Central Processing Unit The central processing unit is the "brain" of the computer. All calculations, decisions and data moves are made here. The CPU has storage locations called registers. It has an arithmetic and logic unit (ALU) where the processing is done. Data is taken from the registers, processed and results go back into the registers. Move (MOV) commands are used to transfer data between RAM locations and the registers. There are many instructions, each with a specific purpose. This collection is called the instruction set. General Purpose Registers The CPU has four general-purpose registers called AL, BL, CL and DL. These are eight bits or one byte wide. Registers can hold unsigned numbers in the range 0 to +255 and signed numbers in the range 128 to +127. These are used as temporary storage locations. Registers are used in preference to RAM locations because it takes a relatively long time to transfer data between RAM and the CPU. Faster computers generally have more CPU registers or memory on the CPU chip. The registers are named AL, BL, CL and DL because the 16-bit version of this CPU has more registers called AH, BH, CH and DH. The 'L' means Low and the 'H' means High. These are the low and high ends of the 16-bit register. Special Purpose Registers The special purpose registers in the CPU are called IP, SR and SP. IP is the Instruction pointer This register contains the address of the instruction being executed. When execution is complete, IP is increased to point to the next instruction. Jump instructions alter the value of IP so the program flow jumps to a new position. CALL and INT also change the value stored in IP. In the RAM displays, the instruction pointer is highlighted red with yellow text. SR is the Status Register This register contains flags that report the CPU status. The 'Z' zero flag is set to one if a calculation gave a zero result. The 'S' sign flag is set to one if a calculation gave a negative result. The 'O' overflow flag is set if a result was too big to fit in a register. The 'I' interrupt is set if interrupts are enabled. See CLI and STI. SP is the Stack Pointer The stack is an area of memory organised using the LIFO last in first out rule. The stack pointer points to the next free stack location. The simulator stack starts at address BF just below the RAM used for the video display. The stack grows towards address zero. Data is pushed onto the stack to save it for later use. Data is popped off the stack when needed. The stack pointer SP keeps track of where to push or pop data items. In the RAM displays, the stack pointer is highlighted blue with yellow text. Random Access Memory The simulator has 256 bytes of ram. The addresses are from 0 to 255 in decimal numbers or from [00] to [FF] in hexadecimal. RAM addresses are usually given in square brackets such as [7C] where 7C is a hexadecimal number. Read [7C] as "the data stored at location 7C". Busses Busses are collections of wires used to carry signals around the computer. They are commonly printed as parallel tracks on circuit boards. Slots are sockets that enable cards to be connected to the system bus. An 8-bit computer typically has registers 8 bits wide and 8 wires in a bus. A 16-bit computer has 16 bit registers and 16 address and data wires and so on. The original IBM PC had 8 data wires and 20 address wires enabling one megabyte of RAM to be accessed. 32 bit registers and busses are now usual (1997-2003). DataBusThe Data Bus is used to carry data between the CPU, RAM and IO ports. The simulator has an 8-bit data bus.AddressBusThe Address Bus is used to specify what RAM address or IO port should be used. The simulator has an 8-bit address bus.ControlBusThe Control Bus This has a wire to determine whether to access RAM or IO ports. It also has a wire to determine whether data is being read or written. The CPU reads data when it flows into the CPU. It writes data when it flows out of the CPU to RAM or the IO ports. The System Clock wire carries regular pulses so that all the electronic components can function at the correct times. Clock speeds between 100 and 200 million cycles per second are typical (1997). This is referred to as the clock speed in MHz or megahertz. The simulator runs in slow motion at about one instruction per second. This is adjustable over a small range.HardwareInterruptsHardware Interrupts require at least one wire. These enable the CPU to respond to events triggered by hardware such as printers running out of paper. The CPU processes some machine code in response to the interrupt. When finished, it continues with its original task. The IBM PC has 16 interrupts controlled by 4 wires. To Install  HYPERLINK \l "Contents" Contents Important FIRST make a back-up copy of the distribution disk or downloaded file. Print and file Userinfo.Reg. This contains your registration key. System Requirements Sms32V50.Exe requires Windows95/98/NT/2000/XP. A mouse or other pointing device is highly recommended to access the hypertext help pages. To Install You don't need to run setup. In fact there is no setup program. Make a folder for all the simulator files and copy them from the distribution disk to this directory. If you have downloaded a Zip file, unzip it into this directory. Create a shortcut to sms32v50.exe and/or create a shortcut on the start menu. Suggestion In a School College or University setting, the exercise files should be made available to students. These files are numbered as in this example - 02tlight.asm and 99snake.asm. The other example files demonstrate the capabilities of the simulator and are typical of the sorts of programs students might write for assignments. DEMO.ASM could be made available. The other example files should be kept by the teacher for reference. Note Userinfo.reg, if available, should be in the same directory as Sms32V50.Exe. Userinfo.reg contains the registration key that you need to run the simulator as a registered program. When Userinfo.reg is missing or faulty, the simulator runs in shareware mode. When you register, you will get instructions relating to Userinfo.reg. This file has nothing to do with the Windows registry. It is a text file containing the key. The name is a hangover from the days of Windows 3.11 when there were no registries. Note The on line help should be in the same directory as Sms32V50.Exe Network Installation The simulator has been designed to run from a server. It does not need to be installed on workstations. This makes deployment simple. One day all software will be like this and stressed out network administrators will revert to being normal, kind, cheerful human beings. Create a read only folder on the server and make sure all users can access it. (Create a share or use a public drive). Copy all the files from the distribution into the folder on the server. If they are zipped, unzip them. Provide a shortcut to sms32v50.exe for users to start up the program. The shortcut should specify a working directory where users have write permission such as their home folder. Users need write access to their own home folder (a floppy disk would be OK too). Users need to save their work to this folder (or floppy). If the simulator starts in this directory, it will save an INI file in the user's directory that holds information about window positions and preferences. If the INI file is missing, the simulator will start with default settings and will attempt to create the INI file. If SMS starts in a read only directory, it will not be able to save its INI file. If possible, correct this non fatal problem. To Run If you have set up an icon, double click the icon or select the icon and press enter. You can double click on Sms32V50.exe within Windows Explorer or My Computer. You can drag and drop an assembly code file onto the program icon. Assembly code file names should end in .asm. You can drop any type of file into the simulator but the result is not likely to be useful. To Un-Install  HYPERLINK \l "Contents" Contents Important FIRST make a back-up copy of the distribution disk or downloaded file. Print and file Userinfo.Reg. This contains your registration key. To Un-install The simulator is completely self contained and can be deleted without upsetting any other applications. Using Windows Explorer or My Computer or Network Neighborhood (for a network installation) delete all the files in the simulator directory. Remove any icons or other references to the simulator from your system. There are NO registry entries or DLL files so the un-install is completely clean. To Register  HYPERLINK \l "Contents" Contents Please visit the website for registration information. If you have no internet access, please use this  HYPERLINK "055form.htm" form. When You Register You will be sent a software key that unlocks all the features in the simulator. You should enter this key into the place provided. The menu choice for entering your key is Help - Register Alt+H R Type or paste your key into the space provided and press the Register button. If there are no spelling errors, the simulator will be registered. Shareware The Microcontroller Simulator is shareware. In the unregistered shareware version the following features are not included. CALL, RET, INT, IRET and the simulated hardware timer interrupt 02. Distribution The complete unaltered shareware package may be distributed freely without restriction. Re-packaging to suit different distribution media is permitted. Please give a copy to any interested friend, colleague or student. Student Registration Individual students may use this software free. There is no need to register. Students may also use registered copies free of charge. These copies should, whenever possible, be obtained from your school, college or university. Educational Institutions Schools, Colleges, Universities and other Educational Institutions are asked to register. When you register, you will receive a key that unlocks the full version of this software. The prompts to register will go away and CALL, RET, INT, IRET and simulated hardware timer interrupts will be made available. Payment You are asked to register this software by paying 25 Euros (15.00 Pounds Sterling in the UK). To register quickly, use the  HYPERLINK "https://secure.element5.com/shareit/checkout.html?productid=138531&language=English" \t "_blank" on-line service. Alternatively please send a cheque in your local currency for the equivalent of 25 Euros. Cash is OK as a last resort. I hope to cover my software and Internet access costs. Please make cheques payable to C N BAUERS. Registered Sites All users are invited to visit the website regularly for upgrades and updates. Registered sites may photocopy manuals and help pages as required. You may give registered copies of the software to your students. These copies should be free. You may run unlimited instances of the software on a single site. If you have multiple sites in different villages, towns or cities, you are asked to register and pay for each site separately. Local Education Authorities You can register ALL the schools in your area. The cost is 10 Euros per school with learners over the age of 16. This software is intended for the 16+ age group but you may deploy the program for younger pupils too. Schools can download their own software. The registration key can be distributed in a letter to each school or in a newsletter. Here is an example of a registration key (you will get a valid key) Bawsetshire Local Education AuthorityABCDE Simulator Registration Form  HYPERLINK \l "Contents" Contents The fastest way to register is  HYPERLINK "https://secure.element5.com/shareit/checkout.html?productid=138531&language=English" on-line. If you can't use this service, please use this form. Please fill in this form and mail it to the address below. These details will not be passed to any junk mail organisation. Educational institutions should include a cheque for 15 GB Pounds OR 25 Euros OR 30 US Dollars OR the equivalent in your own currency. Cheques should be made payable to C N Bauers. Please mail me at  HYPERLINK "mailto:nbauers@samphire.demon.co.uk" nbauers@samphire.demon.co.uk to agree a price in your local currency. Please check this address is up-to-date on the  HYPERLINK "http://www.softwareforeducation.com/" \t "_blank" website. C N Bauers 87 Cliff Hill Gorleston Great Yarmouth Norfolk NR31 6DH United Kingdom Please provide your details below (please write clearly!) ... Contact Person ___________________________________________ Institution Name _________________________________________ Institution Address ______________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ __________________________________________________________ Your EMail address _______________________________________ FAQ and Bugs  HYPERLINK \l "Contents" Contents Bugs and Features Here are some bugs and features that I know about. If you discover other problems, please send me an  HYPERLINK "mailto:nbauers@samphire.demon.co.uk" E Mail. I will cure the easy bugs and list the hard ones here. Is there a Discussion Forum? Yes - it is here -  HYPERLINK "http://groups.yahoo.com/group/learn-asm/" \t "_blank" http://groups.yahoo.com/group/learn-asm/ Why is my display messed up? The simulator was developed using the default windows fonts, colours and borders. Some combinations of colours, fonts and window borders have caused problems. The symptoms include invisible text, text that won't fit inside the window, labels that don't line up with the item they are supposed to label and stretched bitmap images that look untidy. The cure is to use Windows default settings or compatible settings. Where are my windows? Beginners and some experts might hit another problem. With the display in a high resolution mode, the simulator windows can be moved towards the bottom right. When the display is restored to a lower resolution and the simulator is re-started, all its windows will be off screen where thay can't be seen or controlled. The cure is to close the simulator and delete Sms32V50.INI. The simulator will restart with its windows in default visible positions. Why won't this file save? "Sms32v50.Ini" This is common on a network installation. Make sure the working directory is one that you have permission to write to. Why can't I save my work? Make sure you are saving to a folder or directory where you have write permission. This problem usually occurs when you are running the simulator from a network installation. PC Support Handbook  HYPERLINK \l "Contents" Contents The PC Support Handbook This is an excellent book for anyone learning about personal computer hardware. Details are at  HYPERLINK "http://www.dumbreck.demon.co.uk/" \t "_blank" http://www.dumbreck.demon.co.uk/ This book covers PC architecture in some detail and makes excellent further reading in conjunction with the use of this simulator. The book's ISBN reference is 09541711-1-X and it is available in the following ways: From all major book distributors. From the  HYPERLINK "http://www.maplin.co.uk/" \t "_blank" Maplin chain of stores or Maplin mail/web order. Directly from the publishers, Dumbreck Publishing. This is often the quickest method. Please get up-to-date contact details from their  HYPERLINK "http://www.dumbreck.demon.co.uk/" \t "_blank" website. PC Support Handbook Contents Computer Basics Software & Data Operating Systems Numbering Systems Computer Architecture Display Technology Computer Memory Discs & Drives Computer Peripherals System Selection Hardware Installation P.C. Configuration Windows Configuration P.C. Support Faultfinding Computer Security Data Communications Local Area Networks The Internet Creating Websites Multimedia Using the Simulator - Getting Started  HYPERLINK \l "Contents" Contents  On Line Help Press the F1 key to get on line help. Writing a Program To write and run a program using the simulator, select the source code editor tab by pressing Alt+U. Type in your program. It is best to get small parts of the program working rather than typing it all in at once. Here is a simple example. Also look at the tutorial example programs. You can type this into the simulator or copy and paste it. The assembly code has been annotated with comments that explain the code. These comments are ignored by the assembler program. Comments begin with a semicolon and continue to the end of the line. ; ===== COUNT ================================================= MOV AL,0 ; Move 0 into the AL register REP: ; This label is used with jump commands ADD AL,2 ; Add two to AL JMP REP ; Jump back to the rep label END ; Program ends here ; ============================================================= Running a Program To run a program, you can step through it one line at a time by pressing Alt+P or by clicking this button repeatedly. You can run a program continuously by pressing F9 or Alt+R or by pressing this buttonTo speed up or slow down a running program use these buttons or type Alt+L or Alt+TTo stop a running program press Alt+O or click or press Escape or press this button.To restart a paused program, continuing from where it left off, press Alt+N or click this button.To restart a program from the beginning, reset the CPU by pressing Alt+E or click this button.To re-open the RAM display window, press Alt+M or click this button. Assembly Code The code you type is called assembly code. This human-readable code is translated into machine code by the Assembler. The machine code (binary) is understood by the CPU. To assemble a program, press Alt+A or click this button.You can see an animation of the assembler process by checking this box.When you run or setp a program, if necessary, the code is assembled. Assembler Phases There is short delay while the assembbler goes through all the stages of assembling the program. The steps are Save the source code. Convert the source code into tokens (this simulator uses human readable tokens for educational value rather than efficiency). Parse the source code and (if necessary) generate error messages. If there are no errors, generate the machine codes. This process could be coded more efficiently. If the tokens representing machine op codes like MOV and JMP were numerical, the assembler could look up the machine code equivalents in an array instead of ploughing through many if-then-else statements. Once again, this has been done to demonstrate the process of assembling code for educational reasons. Calculate jumps, the distances of the jump/branch instructions. Viewing Machine Code The machine code stored in RAM can be viewed in three modes by selecting the appropriate radio button.  Hexadecimal - This display corresponds exactly to the binary executed by the CPU. ASCII - This display is convenient if your program is processing text. The text is readable but the machine codes are not. Source Code - This display shows how the assembly code commands are placed in memory. Tutorial Examples The tutorial examples provide a step by step introduction to the commands and techniques of low level programming. Each program has one or more learning tasks associated with it. Some of the tasks are simple. Some are real brain teasers. Learning Tasks  HYPERLINK \l "Contents" Contents The Tasks Here are all the learning tasks grouped together with pointers to the example programs and explanatory notes.  Simple Arithmetic Example -  HYPERLINK \l "Ex01" 01first.asm - Arithmetic Write a program that subtracts using SUB Write a program that multiplies using MUL Write a program that divides using DIV Write a program that divides by zero. Make a note to avoid doing this in real life.  Using Hexadecimal Example - HYPERLINK \l "Ex02"02tlight.asm - Traffic Lights Use the help page on Hexadecimal and Binary numbers. Work out what hexadecimal numbers will activate the correct traffic lights. Modify the program to step the lights through a realistic sequence.  ASCII Codes Example - HYPERLINK \l "Ex03"03move.asm Look up the ASCII codes of H, E, L, L and O and copy these values to memory locations C0, C1, C2, C3 and C4. This is a simple and somewhat crude way to display text on a memory mapped display.  Counting and Jump Commands Example - HYPERLINK \l "Ex04"04incjmp.asm Rewrite the example program to count backwards using DEC BL. Rewrite the example program to count in threes using ADD BL,3. Rewrite the program to count 1 2 4 8 16 using MUL BL,2 Here is a more difficult task. Count 0 1 1 2 3 5 8 13 21 34 55 98 overflow. Here each number is the sum of the previous two. You will need to use two registers and two RAM locations for temporary storage of numbers. If you have never programmed before, this is a real brain teaser. Remember that the result will overflow when it goes above 127. This number sequence was first described by Leonardo Fibonacci of Pisa (1170_1230)  Character Input Output Example - HYPERLINK \l "Ex05"05keybin.asm Easy! Input characters and display each character at the top left position of the VDU by copying them all to address [C0]. Harder Use BL to point to address [C0] and increment BL after each key press in order to see the text as you type it. Harder! Store all the text you type in RAM when you type it in. When you press Enter, display the stored text on the VDU display. Difficult Type in text and store it. When Enter is pressed, display it on the VDU screen in reverse order. Using the stack makes this task easier  Procedures Example - HYPERLINK \l "Ex06"06proc.asm Re-do the traffic lights program and use this procedure to set up realistic time delays. 02tlight.asm Re-do the text input and display program with procedures. Use one procedure to input the text and one to display it.  Text IO and Procedures Example - HYPERLINK \l "Ex07"07textio.asm Write a program using three procedures. The first should read text from the keyboard and store it in RAM. The second should convert any upper case characters in the stored text to lower case. The third should display the text on the VDU screen.  Data Tables Example - HYPERLINK \l "Ex08"08table.asm Improve the traffic lights data table so there is an overlap with both sets of lights on red. Use a data table to navigate the snake through the maze. This is on port 04. Send FF to the snake to reset it. Up, down left and right are controlled by the left four bits. The right four bits control the distance moved. Write a program to spin the stepper motor. Activate bits 1, 2, 4 and 8 in sequence to energise the electromagnets in turn. The motor can be half stepped by turning on pairs of magnets followed by a single magnet followed by a pair and so on. Use a data table to make the motor perform a complex sequence of forward and reverse moves. This is the type of control needed in robotic systems, printers and plotters. For this exercise, it does not matter exactly what the motor does.  Parameters Example - HYPERLINK \l "Ex09"09param.asm Write a procedure that doubles a number. Pass the single parameter into the procedure using a register. Use the same register to return the result. Write a procedure to invert all the bits in a byte. All the zeros should become ones. All the ones should become zeros. Pass the value to be processed into the procedure using a RAM location. Return the result in the same RAM location. Write a procedure that works out Factorial N. This example shows one method for working out factorial N. Factorial 5 is 5 * 4 * 3 * 2 * 1 = 120. Your procedure should work properly for factorial 1, 2, 3, 4 or 5. Factorial 6 would cause an overflow. Use the stack to pass parameters and return the result. Calculate the result. Using a look up table is cheating! Write a procedure that works out Factorial N. Use the stack for parameter passing. Write a recursive procedure. Use this definition of Factorial. Factorial ( 0 ) is defined as 1. Factorial ( N ) is defined as N * Factorial (N - 1). To work out Factorial (N), the procedure first tests to see if N is zero and if not then re-uses itself to work out N * Factorial (N - 1). This problem is hard to understand in any programming language. In assembly code it is harder still.  Software Interrupts Example - HYPERLINK \l "Ex10"10swint.asm The simulated keyboard generates INT 03 every time a key is pressed. Write an interrupt 03 handler to process the key presses. Use IN 07 to fetch the pressed key into the AL register. The original IBM PC allocated 16 bytes for key press storage. The 16 locations are used in a circular buffer fashion. Try to implement this. Build on task 26 by puting characters onto the next free screen location. See if you can get correct behaviour in response to the Enter key being pressed (fairly easy) and if the Back Space key being pressed (harder).  Hardware Interrupts Example -  HYPERLINK \l "Ex11" 11hwint.asm Write a program that controls the heater and thermostat whilst at the same time counting from 0 to 9 repeatedly, displaying the result on one of the seven segment displays. If you want a harder challenge, count from 0 to 99 repeatedly using both displays. Use the simulated hardware interrupt to control the heater and thermostat. A fiendish problem. Solve the Tower of Hanoi problem whilst steering the snake through the maze. Use the text characters A, B, C Etc. to represent the disks. Use three of the four rows on the simulated screen to represent the pillars. I am not aware of anyone having solved the tower of Hanoi (including me), let alone controlling the snake at the same time.  Use the keyboard on Port 07. Write an interrupt handler (INT03) to process the key presses. You must also process INT02 (the hardware timer) but it need not perform any task. For a more advanced task, implement a 16 byte circular buffer. Write code to place the buffered text on the VDU screen when you press Enter. For an even harder task, implement code to process the Backspace key to delete text characters in the buffer. Example - 01first.asm - Arithmetic  HYPERLINK \l "Contents" Contents Most of these examples include a learning task. Study the example and if you can complete the task/s, it is likely that your understanding is good. Example - 01first.asm ; ===== WORK OUT 2 PLUS 2 ====================================== CLO ; Close unwanted windows. MOV AL,2 ; Copy a 2 into the AL register. MOV BL,2 ; Copy a 2 into the BL register. ADD AL,BL ; Add AL to BL. Answer goes into AL. END ; Program ends ; ===== Program Ends =========================================== YOUR TASK ========= Use SUB, DIV and MUL to subtract, divide and multiply. What happens if you divide by zero? Make use of CL and DL as well as AL and BL.Type this code into the simulator editor OR copy and paste the code OR load the example from disk. Step through the program by pressing Alt+P repeatedly. While you are stepping, watch the CPU registers. You should see a '2' appear in the AL register followed by a '2' in the BL register. AL should be added to BL and a '4' should appear in AL. The altered registers are highlighted yellow. Watch the register labelled IP (Instruction Pointer). This register keeps track of where the processor has got to in the program. If you look at the RAM display, one RAM location is labelled with a red blob. This corresponds to the Instruction Pointer. Note how the red blob (IP) moves when you step the program. When doing the learning exercises, add to and modify your own copy of the example. What you need to know CommentsAny text after a semicolon is not part of the program and is ignored by the simulator. These comments are used for explanations of what the program is doing. Good programmers make extensive use of comments. Good comments should not just repeat the code. Good comments should explain why things are begin done.CLOThe CLO command is unique to this simulator. It closes any window that is not needed while a program is running. This command makes it easier to write nice demonstration programs. It also avoids having to close several windows manually. MOVThe MOV command is short for Move. In this example numbers are being copied into registers where arithmetic can be done. MOV copies data from one location to another. The data in the original location is left intact by the MOV command. Move was shortened to Mov because, in olden times, computer memory was fiendishly expensive. Every command was shortened as much as possible, much like the mobile phone texting language used today.ADDArithmetic The add command comes in two versions. Here are two examples ADD AL,BL - Add BL to AL and store the result into AL ADD AL,5 - Add 5 to AL and store the result into AL  Look at the on-line help to find out about SUB, MUL and DIV. Remeber that you can access on-line help by pressing the F1 key.Registers Registers are storage locations where 8 bit binary numbers are stored. The central processing unit in this simulator has four general purpose registers called AL, BL, CL and DL. These registers are interchangeable and can, with a few exceptions, be used for any purpose. Newer central processing unit (CPU) chips have 16, 32 or even 64 bit registers. These work in the same way but more data can be moved in one step so there is a speed advantage. Wider registers can store larger integer (whole) numbers. This simplifies many programming tasks. The other three registers SP, IP and SR are described later. Hexadecimal Numbers In the command MOV AL,2 the 2 is a hexadecimal number. The hexadecimal number system is used in low level programming because there is a very convenient conversion between binary and hex. Study the  HYPERLINK "240-hex-bin.htm" Hexadecimal and Binary number systems.END The last command in all programs should be END. Any text after the END keyword is ignored. Your Tasks Use all the registers AL, BL, CL and DL and experiment with ADD, SUB, MUL and DIV. Find out what happens if you try to divide by zero. Example - 99nasty.asm - Nasty  HYPERLINK \l "Contents" Contents This example shows how you can create totally unreadable code. Try not to do this. This program actually works. Copy it and paste it into the simulator and try it! Click the List-File tab to see the code laid out better and to see the addresses where the code is stored. To get back to the editor window click the Source-Code tab. Example - 99nasty.asm ; ----- Here is how NOT to write a program ----- _: Mov BL,C0 Mov AL,3C Q: Mov [BL],AL CMP AL,7B JZ Z INC AL INC BL JMP Q Z: MOV CL,40 MOV AL,20 MOV BL,C0 Y: MOV [BL],AL INC BL DEC CL JNZ Y JMP _ END ; Look at the list file. It comes out OK! ; Press Escape to stop the program running. ; ---------------------------------------------- Here it is tidied up ; ----- A Program to display ASCII characters ----------------- ; ----- Here it is tidied up. This version is annotated. ------ ; ----- This makes it possible to understand. ----------------- ; ----- The labels have been given more readable names too. --- Start: Mov BL,C0 ; Make BL point to video RAM Mov AL,3C ; 3C is the ASCII code of the 'less than' symbol Here: Mov [BL],AL ; Copy the ASCII code in AL to the RAM location that BL is pointing to. CMP AL,7B ; Compare AL with '{' JZ Clear ; If AL contained '{' jump to Clear: INC AL ; Put the next ASCII code into AL INC BL ; Make BL point to the next video RAM location JMP Here ; Jump back to Here Clear: MOV CL,40 ; We are going to repeat 40 (hex) times MOV AL,20 ; The ASCII code of the space character MOV BL,C0 ; The address of the start of video RAM Loop: MOV [BL],AL ; Copy the ASCII space in AL to the video RAM that BL is pointing to. INC BL ; Make BL point to the next video RAM location DEC CL ; CL is counting down towards zero JNZ Loop ; If CL is not zero jump back to Loop JMP Start ; CL was zero so jump back to the Start and do it all again. END ; ------------------------------------------------------------- Your Task Write all your future programs ... with good layout with meaningful label names with useful comments that EXPLAIN the code avoiding comments that state the totally obvoius and just repeat the code Bad Comment - just repeats the code INC BL ; Add one to BL Useful Comment - explains why the step is needed INC BL ; Make BL point to the next video RAM location Example - 02tlight.asm - Traffic Lights  HYPERLINK \l "Contents" Contents Example - 02tlight.asm ; ===== CONTROL THE TRAFFIC LIGHTS ============================= CLO ; Close unwanted windows. Start: ; Turn off all the traffic lights. MOV AL,0 ; Copy 00000000 into the AL register. OUT 01 ; Send AL to Port One (The traffic lights). ; Turn on all the traffic lights. MOV AL,FC ; Copy 11111100 into the AL register. OUT 01 ; Send AL to Port One (The traffic lights). JMP Start ; Jump back to the start. END ; Program ends. ; ===== Program Ends ========================================== YOUR TASK ========= Use the help page on Hexadecimal and ASCII codes. Work out what hexadecimal numbers will activate the correct traffic lights. Modify the program to step the lights through a realistic sequence. To run the program press the Step button repeatedly or press the Run button. To stop the program, press Stop. When the program is running, click the RAM-Source or RAM-Hex or RAM-ASCII tabs. These give alternative views of the contents of random access memory (RAM). Also click the List File tab to see the machine code generated by the simulator and the addresses where the codes are stored. Ports The traffic lights are connected to port one. Imagine this as a socket on the back of the processor box. Data sent to port one goes to the traffic lights and controls them. There are six lamps to control. Red, Amber and Green for a pair of lights. This can be achieved with a single byte of data where two bits are unused. By setting the correct bits to One, the correct lamps come on. Fill in the rest of this table to work out the Hexadecimal values you need. Of course you need to know the sequence of lights in your country. Red Amber Green Red Amber Green Not used Not used Hex 1 0 0 0 0 1 0 0 84  What you need to know Labels and JumpsLabels mark positions that are used by Jump commands. All the commands in this program are repeated for ever or until Stop is pressed. Label names must start with a letter or _ character. Label names must not start with a digit. The line JMP Start causes the program to jump back and re-do the earlier commands. Destination labels end in a colon. For example Start:Controlling the LightsIf you look carefully at the traffic lights display, you can see which bit controls each light bulb. Work out the pattern of noughts and ones needed to turn on a sensible set of bulbs. Use the Hexadecimal and Binary numbers table to work out the hexadecimal equivalent. Move this hexadecimal number into AL. OUT 01 This command copies the contents of the AL register to Output Port One. The traffic lights are connected to port one. A binary one causes a bulb to switch on. A nought causes it to turn off. Example - 03move.asm - Data Moves  HYPERLINK \l "Contents" Contents Example - 03move.asm ; --------------------------------------------------------------- ; A program to demonstrate MOV commands. Mov is short for move. ; --------------------------------------------------------------- CLO ; Close unwanted windows. ; ===== IMMEDIATE MOVES ===== MOV AL,15 ; Copy 15 HEX into the AL register MOV BL,40 ; Copy 40 HEX into the BL register MOV CL,50 ; Copy 50 HEX into the CL register MOV DL,60 ; Copy 60 HEX into the DL register Foo: INC AL ; Increment AL for no particular reason. ; ===== INDIRECT MOVES ===== MOV [A0],AL ; Copy value in AL to RAM location [40] MOV BL,[40] ; Copy value in RAM location [A0] into BL ; ===== REGISTER INDIRECT MOVES ===== MOV [CL],AL ; Copy the value in AL to the RAM ; location that CL points to. MOV BL,[CL] ; Copy the RAM location that CL points ; to into the BL register. JMP Foo ; PRESS ESCAPE TO STOP THE PROGRAM END ; --------------------------------------------------------------- TASK ==== Look up the ASCII codes of the letters in H,E,L,L,O and move these ASCII codes to RAM addresses [C0], [C1], [C2], [C3] and [C4]. Run the program and watch how the text appears on the simulated VDU display. This is very much the same as what happens in the IBM PC running MS DOS. The program you write should work but if you continue to study low level programming, you will find much more efficient and flexible ways of solving this problem.Step through the program and watch the register values changing. In particular, look at the RAM-Hex display and note the way that values in RAM change. Addresses [50] and [A0] are altered. You can copy the example program from the help page and paste it into the source code editor. Addresing Modes There are several ADDRESSING MODES available with move commands. Immediate Addressing A hexadecimal number is copied into a register. Examples... MOV AL,15 ; Copy 15 HEX into the AL register MOV BL,40 ; Copy 40 HEX into the BL register MOV CL,50 ; Copy 50 HEX into the CL register MOV DL,60 ; Copy 60 HEX into the DL register Indirect Addressing A value is moved to or from RAM. The ram address is given as a number like [22] in square brackets. Examples... MOV [A0],AL ; Copy value in AL to RAM location [40] MOV BL,[40] ; Copy value in RAM location [A0] into BL Register Indirect Addressing Copy a value from RAM to a register or copy a value from a register to RAM. The RAM address is contained in a second register enclosed in square brackets like this [CL]. Examples ... MOV [CL],AL ; Copy the value in AL to the RAM location that CL points to. MOV BL,[CL] ; Copy the RAM location that CL points to into the BL register. Register Moves Not available in this simulation. A register move looks like this MOV AL,BL To do this using simulator commands, use PUSH BL POP AL Push and Pop are explained later. Calculated Addresses Not available in this simulator. Copy a value from RAM to a register or copy a value from a register to RAM. The RAM address is contained in square brackets and is calculated. This is done to simplify access to record structures. For example a surname might be stored 12 bytes from the start of the record. This technique is shown in the examples below. MOV [CL + 5],AL ; Copy the value in AL to the RAM location that CL + 5 points to. MOV BL,[CL + 12] ; Copy the RAM location that CL + 12 points to into the BL register. Implied Addresses Not available in this simulator. In this case, memory locations are named. Address [50] might be called 'puppy'. This means that moves can be programmed like this. MOV AL,puppy ; Copy the value in RAM at position puppy into the AL register. MOV puppy,BL ; Copy BL into the RAM location that puppy refers to. Example - 04IncJmp.asm - Counting  HYPERLINK \l "Contents" Contents Example - 04IncJmp.asm ; ===== Counting =================================== MOV BL,40 ; Initial value stored in BL Rep: ; Jump back to this label INC BL ; Add ONE to BL JMP Rep ; Jump back to Rep END ; Program Ends ; ===== Program Ends =============================== TASK ===== Rewrite the program to count backwards using DEC BL. Rewrite the program to count in threes using ADD BL,3. Rewrite the program to count 1 2 4 8 16 using MUL BL,2 Here is a more difficult task. Count 0 1 1 2 3 5 8 13 21 34 55 98 overflow. Here each number is the sum of the previous two. You will need to use registers or RAM locations for temporary storage of the numbers. If you have never programmed before, this is a real brain teaser. Remember that the result will overflow when it goes above 127. This number sequence was first described by Leonardo Fibonacci of Pisa (1170_1230)The program counts up in steps of one until the total is too big to be stored in a single byte. At this point the calculation overflows. Watch the values in the registers. In particular, watch IP and SR. These are explained below. Although this program is very simple, some new ideas are introduced. MOV BL,40 This line initialises BL to 40. Rep: Rep: is a label. Labels are used with Jump commands. It is possible for programs to jump backwards or forwards. Because of the way numbers are stored, the largest jumps are -128 backwards and + 127 forwards. Labels must begin with a letter or the _ character. Labels may contain letters, digits and the _ character. Destination labels must end with a Colon: INC BL This command adds one to BL. Watch the BL register. It will count up from 40 in hexadecimal so after 49 comes 4A, 4B, 4C, 4D, 4E, 4F, 50, 51 and so on. Overflow When BL reaches 7F hex or 127 in decimal numbers the next number ought to be 128 but because of the way numbers are stored in binary, the next number is minus 128. This effect is called an OVERFLOW. Status Register (SR) The status register labelled SR contains four flag bits that give information about the state of the CPU. There are three flags that indicate whether a calculation overflowed, gave a negative result or gave a zero result. Calculations set these flags S The sign flag indicates a negative result. O The overflow flag indicates overflows. Z The zero flag indicates a zero result. I Interrupts enabled. STI turns this on. CLI turns this off. These flags are described in more detail later. JMP Rep This command causes the central processing unit (CPU) to jump back and repeat earlier commands or jump forward and skip some commands. Instruction Pointer (IP) The instruction pointer labelled IP contains the address of the instruction being executed. This is indicated by a red highlighted RAM position in the simulator. Each CPU command causes the IP to be increased by 1, 2 or 3 depending on the size of the command. In the RAM displays, the instruction pointer is highlighted red with yellow text. NOP ; Increase IP by 1 INC BL ; Increase IP by 2 ADD AL,BL ; Increase IP by 3 JMP Rep ; Add or subtract a value from IP to ; jump to a new part of the program. Fetch Execute Cycle Fetch the instruction. IP points to it. This is called the operator. If necessary, fetch data. IP + 1 points to it. This is the first operand. If necessary, fetch data. IP + 2 points to it. This is the second operand. Execute the command. This may involve more fetching or putting of data. Increase IP to point to the next command or calculate IP for Jump commands. Repeat this cycle. Every machine cycle has one operator or instruction. There could be zero, one or two operands depending on the instruction. OP Codes are the machine codes that correspond to the operators and operands. Example - 05keyb-in.asm - Keyboard Input  HYPERLINK \l "Contents" Contents Example - 05keyb-in.asm  ; -------------------------------------------------------------- ; Input key presses from the keyboard until Enter is pressed. ; -------------------------------------------------------------- CLO ; Close unwanted windows. Rep: IN 00 ; Wait for key press - Store it in AL. CMP AL,0D ; Was it the Enter key? (ASCII 0D) JNZ Rep ; No - jump back. Yes - end. END ; -------------------------------------------------------------- TASK 11) Easy! Display each character at the top left position of the VDU by copying them all to address [C0]. 12) Harder Use BL to point to address [C0] and increment BL after each key press in order to see the text as you type it. 13) Harder! Store all the text you type in RAM when you type it in. When you press Enter, display the stored text on the VDU display. 14) Difficult Type in text and store it. When Enter is pressed, display it on the VDU screen in reverse order. Using the stack makes this task easier.You can copy this example program from the help page and paste it into the source code editor. IN 00 Input from port zero. In this simulator, port zero is wired to the keyboard hardware. The simulator waits for a key press and copies the ASCII code of the key press into the AL register. This is not very realistic but is easy to program. There is a more realistic keyboard on port 07 and interrupt 03 but this is for more advanced programmers. CMP AL,0D Compare the AL register with the ASCII code of the Enter key. The ASCII code of the Enter key is 0Dhex. CMP AL,BL works as follows. The processor calculates AL - BL. If the result is zero, the 'Z' flag in the status register SR is set. If the result is negative, the 'S' flag is set. If the result is positive, no flags are set. The 'Z' flag is set if AL and BL are equal. The 'S' flag is set if BL is greater then AL. No flag is set if AL is greater than BL. JNZ Rep JNZ stands for Jump Not Zero. Jump if the 'Z' flag is not set. The program will jump forwards or back to the address that Rep marks. A related command is JZ. This stands for Jump Zero. Jump if the zero flag is set. In this program, the CMP command sets the flags. Arithmetic commands also set the status flags. MOV [C0],AL This will copy AL to address [C0]. The visual display unit works with addresses [C0] to [FF]. This gives a display with 4 rows and 16 columns. Address [C0] is the top left corner of the screen. MOV [BL],AL This copies AL to the address that BL points to. BL can be made to point to the VDU screen at [C0] by using MOV BL,C0. BL can be made to point to each screen position in turn by using INC BL. This is needed for task 2. Example - 06proc.asm - Procedures  HYPERLINK \l "Contents" ContentsExample - 06proc.asm ; --------------------------------------------------------------- ; A general purpose time delay procedure. ; The delay is controlled by the value in AL. ; When the procedure terminates, the CPU registers are ; restored to the same values that were present before ; the procedure was called. Push, Pop, Pushf and Popf ; are used to achieve this. In this example one procedure ; is re-used three times. This re-use is one of the main ; advantages of using procedures. ;------ The Main Program ---------------------------------------- Start: MOV AL,8 ; A short delay. CALL 30 ; Call the procedure at address [30] MOV AL,10 ; A middle sized delay. CALL 30 ; Call the procedure at address [30] MOV AL,20 ; A Longer delay. CALL 30 ; Call the procedure at address [30] JMP Start ; Jump back to the start. ; ----- Time Delay Procedure Stored At Address [30] ------------- ORG 30 ; Generate machine code from address [30] PUSH AL ; Save AL on the stack. PUSHF ; Save the CPU flags on the stack. Rep: DEC AL ; Subtract one from AL. JNZ REP ; Jump back to Rep if AL was not Zero. POPF ; Restore the CPU flags from the stack. POP AL ; Restore AL from the stack. RET ; Return from the procedure. ; --------------------------------------------------------------- END ; --------------------------------------------------------------- TASK 15) Re-do the traffic lights program and use this procedure to set up realistic time delays. 02tlight.asm 16) Re-do the text input and display program with procedures. Use one procedure to input the text and one to display it. ; ---------------------------------------------------------------You can copy this example program from the help page and paste it into the source code editor. MOV AL,8 A value is placed into the AL register before calling the time delay procedure. This value determines the length of the delay. CALL 30 Call the procedure at address [30]. This alters the instruction pointer IP to [30] and the program continues to run from that address. When the CPU reaches the RET command it returns to the address that it came from. This return address is saved on the stack. Stack This is a region in memory where values are saved and restored. The stack uses the Last In First Out rule. LIFO. The CALL command saves the return address on the stack. The RET command gets the saved value from the stack and jumps to that address by setting IP. ORG 30 Origin at address [30]. ORG specifies at what RAM address machine code should be generated. The time delay procedure is stored at address [30]. PUSH AL Save the value of AL onto the stack. The CPU stack pointer SP points to the next free stack location. The push command saves a value at this position. SP is then moved back one place to the next free position. In this simulator, the stack grows towards address Zero. A stack overflow occurs if the stack tries to fill more than the available memory. A stack underflow occurs if you try to pop an empty stack. PUSHF Save the CPU flags in the status register SR onto the stack. This ensures that the flags can be put back as they were when the procedure completes. The stack pointer is moved back one place. See the Push command. NOTE: Items must be popped in the reverse order they were pushed. DEC AL Subtract one from AL. This command sets the Z flag if the answer was Zero or the S flag if the answer was negative. JNZ REP Jump Not Zero to the address that Rep marks. Jump if the Z flag is not set. POPF Restore the CPU flags from the stack. Increase the stack pointer by one. POP AL Restore the AL register from the stack. This is done by first moving the stack pointer SP forward one place and copying the value at that stack position into the AL register. A stack underflow occurs when an attempt is made to pop more items off the stack than were present. NOTE: Items must be popped in the reverse order they were pushed. RET Return from the procedure to the address that was saved on the stack by the CALL command. Procedures can re-use themselves. This is called recursion. It is a powerful technique and dangerous if you don't understand what is happening! Accidental or uncontrolled recursion causes the stack to grow until it overwrites the program or overflows. Example - 07textio.asm - Text I/O Procedures  HYPERLINK \l "Contents" Contents Example - 07textio.asm ; -------------------------------------------------------------- ; A program to read in a string of text and store it in RAM. ; The end of text will be labelled with ASCII code zero/null. ; -------------------------------------------------------------- ; THE MAIN PROGRAM MOV BL,70 ; [70] is the address where the text will ; be stored. The procedure uses this. CALL 10 ; The procedure at [10] reads in text and ; places it starting from the address ; in BL. ; BL should still contain [70] here. CALL 40 ; This procedure does nothing until you ; write it. It should display the text. HALT ; DON'T USE END HERE BY MISTAKE. ; -------------------------------------------------------------- ; A PROCEDURE TO READ IN THE TEXT ORG 10 ; Code starts from address [10] PUSH AL ; Save AL onto the stack PUSH BL ; Save BL onto the stack PUSHF ; Save the CPU flags onto the stack Rep: IN 00 ; Input from port 00 (keyboard) CMP AL,0D ; Was key press the Enter key? JZ Stop ; If yes then jump to Stop MOV [BL],AL ; Copy keypress to RAM at position [BL] INC BL ; BL points to the next location. JMP Rep ; Jump back to get the next character Stop: MOV AL,0 ; This is the NULL end marker MOV [BL],AL ; Copy NULL character to this position. POPF ; Restore flags from the stack POP BL ; Restore BL from the stack POP AL ; Restore AL from the stack RET ; Return from the procedure. ; -------------------------------------------------------------- ; A PROCEDURE TO DISPLAY TEXT ON THE SIMULATED SCREEN ORG 40 ; Code starts from address [10] ; **** YOU MUST FILL THIS GAP **** RET ; At present this procedure does ; nothing other than return. ; -------------------------------------------------------------- END ; It is correct to use END at the end. ; -------------------------------------------------------------- TASK 17) Write a program using three procedures. The first should read text from the keyboard and store it in RAM. The second should convert any upper case characters in the stored text to lower case. The third should display the text on the VDU screen. ; --------------------------------------------------------------You can copy this example program from the help page and paste it into the source code editor. Passing Parameters MOV BL,70 The BL register contains 70. This value is needed by the text input procedure. It is the address where the text will be stored in RAM. This is an example of passing a parameter using a register. All you are doing is getting a number from one part of a program to another. INC BL This command adds one to BL. The effect is to make BL point to the next memory location ready for the next text character to be stored. CALL 10 Call the procedure at address [10]. This is achieved in practice by setting the CPU instruction pointer IP to [10]. RET At the end of the procedure, the RET command resets the CPU instruction pointer IP back to the instruction after the CALL instruction to the procedure. This address was stored on the stack by the CALL instruction. HALT Don't confuse HALT and END. The END command causes the assembler to stop scanning for more instructions in the program. The HALT command generates machine code 00 which causes the CPU to halt. There can be several HALT commands in a program but only one END command. ORG 10 Origin [10]. The assembler program starts generating machine code from address [10]. PUSH AL and POP AL Save the value of AL onto the stack. This is an area of RAM starting at address BF. The stack grows towards zero. The RAM displays show the stack pointer as a blue highlight with yellow text. Push and Pop are used so that procedures and interrupts can tidy up after themselves. The procedure or interrupt can alter CPU registers but it restores them to their old values before returning. PUSHF and POPF PUSHF saves the CPU flags onto the stack. POPF restores the CPU flags to their original value. This enables procedures and interrupts to do useful work without unexpected side affects on the rest of the program. IN 00 Input from port zero. This port is connected to the keyboard. The key press is stored into the AL register. CMP AL,0D Compare the AL register with the hexadecimal number 0D. 0D is the ASCII code of the Enter key. This line is asking "Was the enter key pressed?" CMP works by subtracting 0D from AL. If they were equal then the subtraction gives an answer of zero. This causes the CPU zero or 'Z' flag to be set. JZ Stop Jump to the Stop label if the CPU 'Z' flag was set. This is a conditional jump. MOV [BL],AL Move the key press stored in AL into the RAM location that [BL] points to. INC BL is then used to make BL point to the next RAM location. JMP Rep Jump back to the Rep label. This is an unconditional jump. It always jumps and the CPU flags are ignored. RET Return from the procedure to the address stored on the stack. This is done by setting the instruction pointer IP in the CPU. Example - 08table.asm - Data Tables  HYPERLINK \l "Contents" Contents Example - 08table.asm ; ----- EXAMPLE 8 ------- DATA TABLES -------------------------- JMP Start ; Skip past the data table. DB 84 ; Data table begins. DB C8 ; These values control the traffic lights DB 31 ; This sequence is simplified. DB 58 ; Last entry is also used as end marker Start: MOV BL,02 ; 02 is start address of data table Rep: MOV AL,[BL] ; Copy data from table to AL OUT 01 ; Output from AL register to port 01 CMP AL,58 ; Last item in data table ??? JZ Start ; If yes then jump to Start INC BL ; In no then point BL to the next entry JMP Rep ; Jump back to do next table entry END ; -------------------------------------------------------------- TASK 18) Improve the traffic lights data table so there is an overlap with both sets of lights on red. 19) Use a data table to navigate the snake through the maze. This is on port 04. Send FF to the snake to reset it. Up, down left and right are controlled by the left four bits. The right four bits control the distance moved. 20) Write a program to spin the stepper motor. Activate bits 1, 2, 4 and 8 in sequence to energise the electromagnets in turn. The motor can be half stepped by turning on pairs of magnets followed by a single magnet followed by a pair and so on. 21) Use a data table to make the motor perform a complex sequence of forward and reverse moves. This is the type of control needed in robotic systems, printers and plotters. For this exercise, it does not matter exactly what the motor does. ; --------------------------------------------------------------You can copy this example program from the help page and paste it into the source code editor. DB 84 DB stands for Define Byte/s. In this case 84hex is stored into RAM at address [02]. Addresses [00] and [01] are occupied by the JMP Start machine codes. 84 hex is 1000 0100 in binary. This is the pattern or noughts and ones needed to turn on the left red light and the right green light. MOV BL,02 Move 02 into the BL register. [O2] is the RAM address of the start of the data table. BL is used as a pointer to the data table. MOV AL,[BL] [BL] points to the data table. This line copies a value from the data table into the AL register. OUT 01 Send the contents of the AL register to port 01. Port 01 is connected to the traffic lights. CMP AL,58 58 is the last entry in the data table. If AL contains 58, it is necessary to reset BL to point back to the start of the table ready to repeat the sequence. If AL is equal to 58, the 'Z' flag in the CPU will be set. JZ Start Jump back to start if the 'Z' flag in the CPU is set. INC BL Add one to BL to make it point to the next entry in the data table. Example - 09param.asm - Parameters  HYPERLINK \l "Contents" Contents Example - 09param.asm ; ----- EXAMPLE 9 ------- Passing Parameters ------------------- ; ----- Use Registers to pass parameters into a procedure ------ JMP Start ; Skip over bytes used for data storage DB 0 ; Reserve a byte of RAM at address [02] DB 0 ; Reserve a byte of RAM at address [03] Start: MOV AL,5 MOV BL,4 CALL 30 ; A procedure to add AL to BL ; Result returned in AL. ; ----- Use RAM locations to pass parameters into a procedure -- MOV AL,3 MOV [02],AL ; Store 3 into address [02] MOV BL,1 MOV [03],BL ; Store 1 into address [03] CALL 40 ; ----- Use the Stack to pass parameters into a procedure ------ MOV AL,7 PUSH AL MOV BL,2 PUSH BL CALL 60 POP BL POP AL ; This one contains the answer JMP Start ; Go back and do it again. ; ----- A procedure to add two numbers ------------------------- ; Parameters passed into procedure using AL and BL ; Result returned in AL ; This method is simple but is no good if there are a ; lot of parameters to be passed. ORG 30 ; Code starts at address [30] ADD AL,BL ; Do the addition. Result goes into AL RET ; Return from the procedure ; ----- A procedure to add two numbers ------------------------- ; Parameters passed into procedure using RAM locations. ; Result returned in RAM location ; This method is more complex and there is no limit on ; the number of parameters passed unless RAM runs out. ORG 40 ; Code starts at address [40] PUSH CL ; Save registers and flags on the stack PUSH DL PUSHF MOV CL,[02] ; Fetch a parameter from RAM MOV DL,[03] ; Fetch a parameter from RAM ADD CL,DL ; Do the addition MOV [02],CL ; Store the result in RAM POPF ; Restore original register POP DL ; and flag values POP CL RET ; ----- A procedure to add two numbers ------------------------- ; The numbers to be added are on the stack. ; POP parameters off the stack ; Do the addition ; Push answer back onto the stack ; The majority of procedure calls in real life make use ; of the stack for parameter passing. It is very common ; for the address of a complex data structure in RAM to ; be passed to a procedure using the stack. ORG 60 ; Code starts at address [60] POP DL ; Return address POP BL ; A parameter POP AL ; A parameter ADD AL,BL PUSH AL ; Answer ; The number of pushes must PUSH AL ; Answer ; match the number of pops. PUSH DL ; Put the stack back as it was before RET ; -------------------------------------------------------------- END Task 22) Write a procedure that doubles a number. Pass the single parameter into the procedure using a register. Use the same register to return the result. 23) Write a procedure to invert all the bits in a byte. All the zeros should become ones. All the ones should become zeros. Pass the value to be processed into the procedure using a RAM location. Return the result in the same RAM location. 24) Write a procedure that works out Factorial N. This example shows one method for working out factorial N. Factorial 5 is 5 * 4 * 3 * 2 * 1 = 120. Your procedure should work properly for factorial 1, 2, 3, 4 or 5. Factorial 6 would cause an overflow. Use the stack to pass parameters and return the result. Calculate the result. Using a look up table is cheating! 25) Write a procedure that works out Factorial N. Use the stack for parameter passing. Write a recursive procedure. Use this definition of Factorial. Factorial ( 0 ) is defined as 1. Factorial ( N ) is defined as N * Factorial (N - 1). To work out Factorial (N), the procedure first tests to see if N is zero and if not then re-uses itself to work out N * Factorial (N - 1). This problem is hard to understand in any programming language. In assembly code it is harder still.You can copy this example program from the help page and paste it into the source code editor. Passing Parameters Parameters can be passed in three ways. CPU registers can be used - Fast but little data can be passed. In some programming languages the "Register" keyword is used to achieve this. RAM locations can be used - Slower and recursion may not be possible. In some programming languages the "Static" keyword is used to achieve this. This technique is useful if very large amounts of data are help in RAM. Passing a pointer to the data is more efficient than making a copy of the data on the stack. The stack can be used - Harder to understand and code but a lot of data can be passed and recursion is possible. Compilers generally use this method by default unless otherwise directed. The example program uses all three methods to add two numbers together. The example tasks involve all three methods. Example - 10swint.asm Software Interrupts  HYPERLINK \l "Contents" Contents  Example - 10swint.asm ; -------------------------------------------------------------- ; An example of software interrupts. ; -------------------------------------------------------------- JMP Start ; Jump past table of interrupt vectors DB 51 ; Vector at 02 pointing to address 51 DB 71 ; Vector at 03 pointing to address 71 Start: INT 02 ; Do interrupt 02 INT 03 ; Do interrupt 03 JMP Start ; -------------------------------------------------------------- ORG 50 DB E0 ; Data byte - could be a whole table here ; Interrupt code starts here MOV AL,[50] ; Copy bits from RAM into AL NOT AL ; Invert the bits in AL MOV [50],AL ; Copy inverted bits back to RAM OUT 01 ; Send data to traffic lights IRET ; -------------------------------------------------------------- ORG 70 DB 0 ; Data byte - could be a table here ; Interrupt code starts here MOV AL,[70] ; Copy bits from RAM into AL NOT AL ; Invert the bits in AL AND AL,FE ; Force right most bit to zero MOV [70],AL ; Copy inverted bits back to RAM OUT 02 ; Send data to seven segment display IRET ; -------------------------------------------------------------- END ; -------------------------------------------------------------- TASK 26) Write a new interrupt 02 that fetches a key press from the keyboard and stores it into RAM. The IBM PC allocates 16 bytes for key press storage. The 16 locations are used in a circular fashion. 27) Create a new interrupt that puts characters onto the next free screen location. See if you can get correct behaviour in response to the Enter key being pressed (fairly easy) and if the Back Space key is pressed (harder).You can copy this example program from the help page and paste it into the source code editor. Interrupts and Procedures Interrupts are short code fragments that provide useful services that can be used by other programs. Typical routines handle key presses, mouse movements and button presses, screen writing, disk reading and writing and so on. An interrupt is like a procedure but it is called in a different way. Procedures are called by jumping to the start address of the procedure. This address is known only to the program that owns the procedure. Interrupts are called by looking up the address of the interrupt code in a table of interrupt vectors. The contents of this table is published and widely known. MS DOS makes heavy use of interrupts for all its disk, screen, mouse, network, keyboard and other services. By writing your own code and making the interrupt vector point to the code you wrote, the behaviour of interrupts can be completely altered. Your interrupt code might add some useful behaviour and then jump back to the original code to complete the work. This is called TRAPPING the interrupt. Software interrupts are triggered, on demand, by programs. Hardware interrupts are triggered by electronic signals to the CPU from hardware devices. Interrupt Vector Table In the IBM compatible computer, addresses 0 to 1024 decimal are used for storing interrupt vectors. The entries in this table of vectors point to all the code fragments that control MS DOS screen, disk, mouse, keyboard and other services. The simulator vectors sit between addresses 0 and 15 decimal. It is convenient to start a simulator program with a jump command that occupies two bytes. This means that the first free address for an interrupt vector is [02]. This is used by the hardware timer if the interrupt flag is set. Have another look at the example program. 10swint.asm Calling an Interrupt This is quite complex. The command INT 02 causes the CPU to retrieve the contents of RAM location 02. After saving the return address onto the stack, the instruction pointer IP is set to this address. The interrupt code is then executed. When complete the IRET command causes the return from the interrupt. The CPU instruction pointer IP is set to the address that was saved onto the stack earlier. Trapping an Interrupt If you wan to trap interrupt 02, change the address stored at address 02 to point to code that you have written. Your code will then handle the interrupt. When complete, your code can use IRET to return from the interrupt or it can jump to the address that was originally in address 02. This causes the original interrupt code to be executed as well. In this way, you can replace or modify the behaviour of an interrupt. Example - 11hwint.asm Hardware Interrupts  HYPERLINK \l "Contents" Contents Example - 11hwint.asm ; -------------------------------------------------------------- ; An example of using hardware interrupts. ; This program spins the stepper motor continuously and ; steps the traffic lights on each hardware interrupt. ; Uncheck the "Show only one peripheral at a time" box ; to enable both displays to appear simultaneously. ; -------------------------------------------------------------- JMP Start ; Jump past table of interrupt vectors DB 50 ; Vector at 02 pointing to address 50 Start: STI ; Set I flag. Enable hardware interrupts MOV AL,11 ; Rep: OUT 05 ; Stepper motor ROR AL ; Rotate bits in AL right JMP Rep JMP Start ; -------------------------------------------------------------- ORG 50 PUSH al ; Save AL onto the stack. PUSH bl ; Save BL onto the stack. PUSHF ; Save flags onto the stack. JMP PastData DB 84 ; Red Green DB c8 ; Red+Amber Amber DB 30 ; Green Red DB 58 ; Amber Red+Amber DB 57 ; Used to track progress through table PastData: MOV BL,[5B] ; BL now points to the data table MOV AL,[BL] ; Data from table goes into AL OUT 01 ; Send AL data to traffic lights CMP AL,58 ; Last entry in the table JZ Reset ; If last entry then reset pointer INC BL ; BL points to next table entry MOV [5B],BL ; Save pointer in RAM JMP Stop Reset: MOV BL,57 ; Pointer to data table start address MOV [5B],BL ; Save pointer into RAM location 54 Stop: POPF ; Restore flags to their previous value POP bl ; Restore BL to its previous value POP al ; Restore AL to its previous value IRET ; -------------------------------------------------------------- END ; -------------------------------------------------------------- TASK 28) Write a program that controls the heater and thermostat whilst at the same time counting from 0 to 9 repeatedly, displaying the result on one of the seven segment displays. If you want a harder challenge, count from 0 to 99 repeatedly using both displays. Use the simulated hardware interrupt to control the heater and thermostat. 29) A fiendish problem. Solve the Tower of Hanoi problem whilst steering the snake through the maze. Use the text characters A, B, C Etc. to represent the disks. Use three of the four rows on the simulated screen to represent the pillars. 30) Use the keyboard on Port 07. Write an interrupt handler (INT 03) to process the key presses. You must also process INT 02 (the hardware timer) but it need not perform any task. For a more advanced task, implement a 16 byte circular buffer. Write code to place the buffered text on the VDU screen when you press Enter. For an even harder task, implement code to process the Backspace key to delete text characters in the buffer. You can copy this example program from the help page and paste it into the source code editor. Hardware Interrupts Hardware Interrupts are short code fragments that provide useful services that can be triggered by items of hardware. When a printer runs out of paper, it sends a signal to the CPU. The CPU interrupts normal processing and processes the interrupt. In this case code would run to display a "Paper Out" message on the screen. When this processing is complete, normal processing resumes. This simulator has a timer that triggers INT 02 at regular time intervals that you can pre-set in the Configuration Tab. You must put an interrupt vector at address 02 that points to your interrupt code. Look at the example. STI and CLI Hardware interrupts are ignored unless the 'I' flag in the status register is set. To set the 'I' flag, use the set 'I' command, STI. To clear the 'I' flag, use the clear 'I' command CLI. Hardware interrupts can be trapped in the same way that software interrupts can. Hardware interrupts are triggered, as needed by disk drives, printers, key presses, mouse movements and other hardware events. This scheme makes processing more efficient. Without interrupts, the CPU would have to poll the hardware devices at regular time intervals to see if any processing was needed. This would happen whether or not processing was necessary. Interrupts can be assigned priorities such that a disk drive might take priority over a printer. It is up to the programmer to optimise all this for efficient processing. In the IBM compatible PC, low number interrupts have a higher priority than the higher numbers. Calling an Interrupt This is quite complex. The command INT 02 whether triggered by hardware or software, causes the CPU to retrieve the contents of RAM location 02. After saving the return address onto the stack, the instruction pointer IP is set to the address that came from RAM. The interrupt code is then executed. When complete the IRET command causes the return from the interrupt. The CPU instruction pointer IP is set to the address that was saved onto the stack earlier. Hardware interrupts differ slightly from software interrupts. A software interrupt is called with a command like INT 02 and the return address is the next instruction after this. IP + 2 is pushed onto the stack. Hardware interrupts are not triggered by an instruction in a program so the return address does not have to be set past the calling instruction. IP is pushed onto the stack. Trapping an Interrupt This is the same as trapping software interrupts described on the  HYPERLINK "200-10swint.htm" previous page. Shortcut Keys  HYPERLINK \l "Contents" Contents AltKeysControlKeysFunctionKeysAAssembleButtonAEdit Select AllF1HelpBLog Assembler ActivityBF2CConfigurationTabCEditCopyF3DDF4EEdit MenuEF5FFileMenuFEditFindF6GLogFileTabGF7HHelpMenuHF8IIF9RunJListFileTabJF10KTokens TabKF11LSlowerButtonLF12MShowRamButtonMNContinueButtonNOStopButtonOFileOpenPStepButtonPQQRRunButtonREditReplaceSReset ButtonSFileSaveTFasterButtonTUSourceCodeTabUVViewMenuVEditPasteWWrite Run LogWXExamplesMenuXEditCutYYZZ ASCII Codes  HYPERLINK \l "Contents" Contents American Standard Code for Information Interchange The ASCII code has 128 standard characters and a further 128 characters that vary from machine to machine and country to country. The first 128 ASCII characters are shown here. Dec00010203040506070809101112131415Hex000102030405060708090A0B0C0D0E0F0000NulBelBakTabLFCR1610EOFESC3220Spa!"#$%&'()*+,-./48300123456789:;<=>?6440@ABCDEFGHIJKLMNO8050PQRSTUVWXYZ[\]^_9660`abcdefghijklmno11270pqrstuvwxyz{|}~Nul The codes from 128 to 255 are not shown here. Codes with special meanings to DOS, Printers, Teletype Machines and ANSI screens. Decimal0NulNULL character. ( End of text string marker. )7BelBell or beep character.8BakBackspace character.9TabTAB character.10LFLine Feed (start a new line).13CRCarriage Return code.26EOFDOS End of text file code.27EscEscape code. It has special effects on older printers and ANSI screens. ANSI = American National Standards Institute. 32SpaSpace Character.255NulNULL character. Unicode ASCII is being replaced by the 16 bit Unicode with 65536 characters that represent every text character in every country in the world including those used historically. Most new operating systems software packages support Unicode. Glossary  HYPERLINK \l "Contents" Contents Glossary 386CPU chips in IBM compatible computers are typically numbered 086, 186, 286, 386, 486, 586, Pentium Etc. 086 chips are now regarded as old fashioned and slow. To run Windows, a 32 bit 386 chip was the minimum recommended.8 Bit CPUThe CPU has registers and connections to the outside world that are 8 bits wide. 16 bit and 32 bit CPUs are now more common, more powerful and more expensive. 64 bit CPUs exist but are not common (2003)80x86The family of Intel chips numbered 8086, 80186, 80286, 80386, 80486 and Pentium.Accelerator KeyImproves your productivity. For example Alt+F4 closes the current window and is quicker to press than the equivalent mouse or menu actions.AnalogueElectronic systems that deal with continuously varying signals. Radio, TV and HiFi systems are all analogue. CD Players are digital but the digital signals must be converted to analogue before being sent to the HiFi system.ANSIAmerican National Standards InstituteArchitectureCPU designs are more complex than typical building designs. Computer architecture is equivalent to building architecture. To make best use of a computer, it is useful to know something about the computer design or architecture.ASCIIThe American Standard Code for Information Interchange. This is an eight bit code. There are 128 characters which are standard. There are a further 128 characters that vary depending on the country and the graphics symbols required by printers. American ASCII is being replaced by International Unicode.ASMThe usual file extension for assembly code programsAssembler Assembly code Human readable commands like MOV AL,33 correspond closely to CPU machine codes. The assembler program translates the human readable codes into machine codes readable by the CPUAuthorC Neil Bauers can be E Mailed on the internet at nbauers@samphire.demon.co.ukBackup copy Copies of files kept in case of disaster. These should be kept in a secure place away from the computer system they belong to. Important files should be backed up in more than one place. Sod's law applies to back up files. The file you really need is the one you have failed to back up.Base Address The start address of an object stored in memory. For example : The original IBM PC VGA screen base address is B800:0000 followed by 4000 more bytes.BinaryBase two numbers used by digital systems. Count with two symbols [ 0 1 ] Binary numbers are composed of noughts and ones. Electronically this is achieved by circuits that are switched off or on.Bit Masks Patterns of noughts and ones used with AND, OR and XOR to extract or inserts bits into bytes.BitsBinary digits. Single digits that are nought or one.Byte Eight Bits. The data in a byte can have many different meanings depending on the context. A byte can represent a CPU command, an ASCII character, a decimal number, a graphics pattern or anything you have programmed it to represent.Carriage Return ASCII code 13 used to move the printer carriage or head to the left of the page. The screen cursor performs in the equivalent way. See also - Line FeedCase SensitiveUpper and lower case are taken to be different. This simulator is not case sensitive.ChipShorthand for microchip or integrated circuit. The CPU is often referred to as the CPU Chip.ClickUsually the left mouse button being pressed when the mouse is pointing at a screen object.ClockThe CPU clock steps the computer and CPU at regular time intervals keeping all parts of the computer in step. Typical clock speeds range between 1 to 500 Megahertz. 200 MHz was typical for a PC in 1997.CommentsThese begin with ';' and are used to explain what the program is doing. Good comments explain why things are being done. Bad comments simply repeat what is obvious by looking at the code.Conditional Jumps These jumps either take place or not depending on the flags in the status register. See JS, JNS, JO, JNO, JZ, JNZ, JMP.Control Key This is used to give keys special meanings. For example the combination of the control key with the F4 function key will close a window in some software packages.Control Systems Industrial and domestic equipment is frequently controlled by a small microcomputer called a microcontroller. The control system is programmed once for life so a TV remote controller can not be re-programmed as a washing machine controller.CPUCentral Processing Unit. The part of the computer that does the computations. Usually this is a single microchip.CursorA flashing symbol that indicates position within text. Alternatively the mouse cursor indicates the mouse position. Special purpose cursors are used in some software.Data tables These store numbers, text or pointers to other data objects. It is easier to look after data in a table than data scattered throughout a program. It is good style to use data tables.Decimal Base 10 numbers. Count and do arithmetic with ten symbols. [ 0 1 2 3 4 5 6 7 8 9 ]Digital Electronic Systems that use binary. Computers use binary numbers and are digital. HiFi systems do not use binary and are not digital. (A HiFi remote control system is digital) See analogue.Directory or Folder File systems are organised into directories in much the same way that filing cabinets are organised into draws and folders. Your files should be stored in a directory that you have created. This keeps your files from getting muddled up with all the other files on the computer.Divide by zero This will cause an error. Any number divided by zero is infinitely big. This can not be calculated.End Of File ASCII code 26 is used to indicate the end of MS DOS text files.Escape ASCII code 27 This character is often interpreted in a special way by programs, VDUs and printers.Executable Code Non human readable program code executed by the CPU.Explorer See File ManagerExtension The MS DOS file extension is zero or more characters after the dot in the file name. Word processor files often have .DOC on the end. Assembly code files end in .ASMF1 Key Commonly this accesses the on line help.File Data stored on disk or tape. When the data is loaded from the file into RAM, it could consist of a program or data used by the program.File Manager or Explorer A windows program that enables you to manage your files. Copying, renaming and deleting files and directories are typical file management tasks.FlagsThe Interrupt, Sign, Zero and Overflow flags in the status register indicate the outcome of the previous calculation. See S Flag, O flag and Z flag.Floppy disk Used to store files. 3.5 inch disks have a hard rectangular plastic casing to protect the thin floppy disk inside. Older disks are actually floppy. The case is bendy cardboard.Folder See DirectoryFunction keys F1, F2 ... F10. These keys have special purposes depending on the software in use. F1 usually activates help. F10 usually activates the menu.General Purpose RegistersAL, BL, CL and DL are used to store data and perform calculations.Gigahertz1000 Megahertz. CPU Clock speeds are now measured in gigahertz.GraphicsImages, pictures and geometrical shapes are examples of graphics. Windows displays everything as graphics. This gives good looking displays but a lot of processing is needed to achieve it.Hard diskA disk that can not normally be removed from the computer. Most computer files are stored on the hard disk. There should also be backup copies stored elsewhere in case the hard disk fails.Hexadecimal Base 16 numbers. Count and do arithmetic with 16 symbols. [ 0 1 2 3 4 5 6 7 8 9 A B C D E F ] Hexadecimal and Binary are easily converted which is why hexadecimal is used.Hot KeysCtrl+S and Ctrl+O are examples of hot keys. These give quick access to menu options. Ctrl+S gives the File Save command. Ctrl+O gives the File Open command.I Flag The I or interrupt flag in the status register indicates if the CPU will accept or ignore hardware interrupts. The commands CLI and STI clear and set this flag. Hardware interrupts are used to signal events like "Key pressed", "Disk Ready".or "Printer out of paper." A hardware timer can generate an interrupt at regular time intervals.Immediate The instruction MOV AL,25 is an example of an immediate instruction. See also : Register, Indirect, Register indirect and MOV.Indirect Indirection This is where data in RAM is referred to with a pointer. For example MOV AL,[20] moves the data from RAM location 20 into the AL register. [20] is a pointer to the RAM location. The technique is called indirection. See MOV, Immediate, Register, Register indirectInstruction Pointer IP points to the instruction being executed. When the instruction is complete, the IP is moved onto the next instruction. In the RAM displays, the instruction pointer is highlighted red with yellow text.Instruction SetThe set of instructions that are recognised by a CPU. Typical instructions are Move, Add and Subtract.interrupt code interrupt handler Interrupt routine A program fragment designed to be activated at any time that an interrupt occurs. The fragment is stored at an address pointed to by an interrupt vector. Interrupts can be triggered by hardware. For example a key press or the printer running out of paper cause a hardware interrupt. The CPU switches to the code that handles the interrupt. When finished, the CPU continues with its earlier task.Interrupt Vector A pointer stored in a table. The pointer points at the interrupt handler. See INT.IO Short for Input Output. See IN and OUTLeast significant bitLSB. The right hand bit in a byte which is worth 0 or 1. MSB. The left hand bit in a byte which is worth 0 or 128. Least and Most significant bits.LIFOSee Stack.Line Feed ASCII code 10 used to start a new line on the printed page or screen. See also - Carriage Return.List File This is generated by the simulator assembler. It contains the program written by the programmer. It also contains the machine codes generated by the assembler.Low level Low level programming is done using the CPU machine code or mnemonics the are close to the machine codes.LSBLSB. The right hand bit in a byte which is worth 0 or 1. MSB. The left hand bit in a byte which is worth 0 or 128. Least and Most significant bits. Machine codes Machine codes are executed by the CPU See Assembly codes. Human readable commands look like this MOV AL,55 The hexadecimal equivalent looks like this D0 00 55 The binary machine code looks like this 110100000000000001010101 A Megabyte224 bytes to be precise or a million bytes approximatelyMegahertzMHz. Million clock cycles per second. A 33 MHz clock means that the CPU performs 33 million steps per second. These sorts of speeds are needed to fill screens with high resolution graphics quickly.Memory Mapped Memory mapped hardware is controlled by writing data into memory locations occupied by that hardware device. This simulator has a memory mapped screen so each screen position corresponds to a memory location.Microchip Complex electronic circuits miniaturised onto a single wafer or chip of siliconMicrocontroller Usually a single chip microcircuit containing a CPU, RAM and ROM. Microcontrollers are used in TV remote controllers, washing machines, digital clocks, microwave ovens, industrial plant controllers, car engine management systems and computer games.MicroprocessorA single chip CPU.Mnemonic A memorable and human readable item like MOV that corresponds to a non memorable item like 11010000 that means the same thing.Most significant bit MSBLSB. The right hand bit in a byte which is worth 0 or 1. MSB. The left hand bit in a byte which is worth 0 or 128. Most Significant Bit. The left hand bit in a byte. It has a value of 128 decimal or 80Hex if the byte is unsigned (positive numbers only). It has a value of -128 if the byte is signed (positive and negative numbers). The MSB has a value that depends on how wide in bits the data storage location is.MultiplexingCombining two or more data flows onto a single carrying medium. For example a thousand telephone calls can be carried on a single cable. De-multiplexing separates the channels and routes them to their correct destinations.NULL ASCII code zero used to mark the end of text strings.O Flag The O or overflow Flag in the status register indicates if the previous calculation overflowed its register.Off Line The network is disconected. However resources, can be made available locally (off-line) even when the network is not available. When the network is re-connected, the data files are synchronised so everyone gets the most up-to-date information.On LineThe network is connected. Computer resources are connected and available and can be accessed with a negligible or short time delay. On line resources usually involve interaction with the user.OP CodeA binary code that the CPU can interpret as a command. These correspond to commands like MOV and ADD.OperandEssential data that comes after the op code. MOV AL, 55 Op-Code Operand Operand Overflow Flag This is set if the result of the previous calculation was too big to fit the register.Parameters Data passed into procedures of functions. Parameters can be passed using registers (very fast), RAM locations (good for big data items) or the Stack (useful if recursion is needed).PeripheralsHardware plugged into the computer. Anything from a keyboard or mouse to a power station or chemical works.PointersIn the command MOV AL,[25] the 25 is a pointer to the RAM location with address 25. See indirection.PortsInput Output Ports. Peripherals are connected to ports. The IN and OUT machine instructions are used to communicate with the peripherals.ProceduresSmall, modular, self contained, easily tested, code fragments that can be used many times during the execution of a program. See CALL and RET in the instruction set.ProcessA program that is running or loaded ready to run. Processes can be running, ready to run or waiting. Waiting processes are usually queueing up for disk or printer access. A waiting process might be waiting for its share of CPU time.ProgramsInstructions executed by a computer to perform tasks.RAMRandom access memory. Electronic memory that stores bytes. Normal RAM forgets what it was storing when switched off.RecursionA powerful technique where a procedure or function re-uses itself to achieve a task.RegisterA location in the CPU where data is stored. This simulator has four general purpose registers called AL, BL, CL and DL. It has special purpose registers called IP, SR and SP.RegisterIn the instruction CMP AL,BL registers are being compared. See also : Immediate, Indirect, Register indirect.Register indirectIn the instruction MOV AL,[BL] the BL register contains a pointer to a RAM location. The data in this RAM location is moved into AL. This is a register indirect move. See also : Immediate, Indirect and Register.RepetitionThis is achieved by using jump commands to make the program jump back and repeat instructions.Reset CPU Reset the CPU to its switch on state. Clear the general purpose registers to zero. Set IP to zero. Set the flags to Zero. Set the stack pointer to BF. The stack grows downwards from address FB.Return address The address stored on the stack that the program returns to when a procedure or interrupt is complete.RunRun a program. Programs are collections of stored instructions that are usually inactive. To run a program, it must be copied from disk into RAM and the CPU is given the address of the first instruction in the program so it can run it. A running program is often called a process.S Flag The S or sign flag in the status register indicates if the previous calculation gave a negative result.Save a file Copy processed data from RAM onto disk.Seven segment displays are used in digital clocks, watches, calculators and so on. Numbers are built up by illuminating combinations of the seven segments.SchedulerThe scheduler is a process that manages all the other processes in a computer. It aims to make best use of the hardware resources and to minimise delays to processes and users.Sign bitThe leftmost bit in a binary number that is used to indicate if the number is positive or negative.Sign Flag This is set if a calculation gives a negative result.Signed NumbersNumbers where the left most bit is the sign bit.Simulator Computer software that models reality in some way. Virtual reality aims to make the simulation so realistic that it seems real. Most simulations are designed to be useful rather than realistic.Source CodeThe human readable program code typed into the computer. See executable code.SPThe stack pointer register. In the RAM displays, the stack pointer is highlighted blue with yellow text.SRThe status register. This contains flags that are set as a result of the most recent calculation. A zero result will set the Z (zero) flag. A negative result will set the S (sign) flag. A result too big to fit in a register will set the O flag (overflow). If the I flag is clear (not set) interrupts will be ignored.StackAn area of memory used for temporary storage according to the LIFO rule. Last in First out. The stack is used to save register contents for later restoration, pass parameters into procedures and return results, reverse the order in which data is stored, save addresses so procedures can return to the right place and there are other uses including doing postfix arithmetic.Stack Pointer Points to the next free location on the stack. In the RAM displays, the stack pointer is highlighted blue with yellow text. The stack is memory organised as LIFO last in first out. It is used to store return addresses, the CPU state, parameters passed to procedures, results returned from procedures, arithmetic data being processed and data whose order is to be reversed.Status Flags Status Register The status Register contains status flags that indicate the outcome of the previous calculation. The flags are Sign, Zero and Overflow. See SR.Stepper motor A special motor that rotates in small controlled angular movements. It is used commonly in printers, plotters and medical instruments and disk drives.Task Switching Use Alt Tab to task switch manually. Operating systems also task switch automatically. For example when word processing, the clock display continues to work because from time to time the operating system switches tasks to keep both going.ThermostatA temperature controlled switch. On when too cold. Off when too hot.Token List When programs are translated into machine code, one of the first steps is to convert the source code of the program into tokens. These are not usually human readable. The tokens are designed to occupy minimal memory. This simulator converts source code to tokens but does not bother to code them to save memory. This is because the programs are too small use much memory.Twos complement Binary numbers where the left most bit determines whether the number is positive or negative.UnicodeA 16 bit character code with 65536 text characters for all the languages in the world including most dead (disused) languages. This code is replacing ASCII.Unsigned numbers Numbers without a sign bit. These are always positive.USERINFO.REG Simulator registration information is contained in this file. It is a text file and has nothing to do with the Windows registry. The same file format was used under Windows 3 which did not have a registry.VDUVisual display unit. Computer output is commonly displayed on the VDU. There are several VDU display technologies.WriteA simple Windows word processor. Data is saved to disk in a format unique to the Write program.Z FlagThe Z or zero flag is set it the previous calculation result was zero. Binary and Hexadecimal  HYPERLINK \l "Contents" Contents Converting Between Binary and Hex The CPU works using binary. Electronically this is done with electronic switches that are either on or off. This is represented on paper by noughts and ones. A single BIT or binary digit requires one wire or switch within the CPU. Usually data is handled in BYTES or multiples of bytes. A Byte is a group of eight bits. A byte looks like this 01001011 This is inconvenient to read, say and write down so programmers use hexadecimal to represent bytes. Converting between binary and hexadecimal is not difficult. First split the byte into two nybbles (half a byte) as follows 0100 1011 Then use the following table BINARYHEXADECIMALDECIMAL0 0 0 0000 0 0 1110 0 1 0220 0 1 1330 1 0 0440 1 0 1550 1 1 0660 1 1 1771 0 0 0881 0 0 1991 0 1 0A101 0 1 1B111 1 0 0C121 1 0 1D131 1 1 0E141 1 1 1F15 EXAMPLE Split the byte into two halves 01001011 becomes 01001011 Using the table above 0100 is 4 1011 is B The answer ... 01001011 is 4B in Hexadecimal. To convert the other way take a hexadecimal such as E7. Look up E in the table. It is 1110. Look up 7 in the table. It is 0111. E7 is 11100111. Instruction Set Summary  HYPERLINK \l "Contents" Contents AL, BL, CL and DL are eight bit, general purpose registers where data is stored. Square brackets indicate RAM locations. For example [15] means RAM location 15. Data can be moved from a register into into RAM and also from RAM into a register. Registers can be used as pointers to RAM. [BL] is the RAM location that BL points to. All numbers are in base 16 (Hexadecimal).  Move Instructions. Flags NOT set.AssemblerMachineCodeExplanationMOVAL,15D00015AL=15Copy 15 into ALMOVBL,[15]D1 01 15BL=[15]Copy RAM[15] into ALMOV[15],CLD2 15 02[15]=CLCopy CL into RAM[15]MOVDL,[AL]D3 03 00DL=[AL]Copy RAM[AL] into DLMOV[CL],ALD4 02 00[CL]=ALCopy AL into RAM[CL] Direct Arithmetic and Logic. Flags are set.AssemblerMachineCodeADDAL,BLA0 00 01AL=AL + BLSUBBL,CLA1 01 02BL=BL - CLMULCL,DLA2 02 03CL=CL * DLDIVDL,ALA3 03 00DL=DL / ALINCDLA4 03DL=DL + 1DECALA5 00AL=AL - 1ANDAL,BLAA 00 01AL=AL AND BLORCL,BLAB 03 02CL=CL OR BLXORAL,BLAC 00 01AL=AL XOR BLNOTBLAD 01BL=NOT BLROLAL9A 00Rotate bits left. LSB = MSBRORBL9B 01Rotate bits right. MSB = LSBSHLCL9C 02Shift bits left. Discard MSB. SHRDL9D 03Shift bits right. Discaed LSB.  Immediate Arithmetic and Logic. Flags are set.AssemblerMachineCodeADDAL,12B0 00 12AL=AL + 12SUBBL,15B1 01 15BL=BL - 15MULCL,03B2 02 03CL=CL * 3DIVDL,02B6 03 02DL=DL / 2ANDAL,10BA 00 10AL=AL AND 10ORCL,F0BB 02 F0CL=CL OR F0XORAL,AABC 00 AAAL=AL XOR AA Compare Instructions. Flags are set.AssemblerMachineCodeExplanationCMPAL,BLDA 00 01Set 'Z' flag if AL = BL. Set 'S' flag if AL < BL. CMPBL,13DB 01 13Set 'Z' flag if BL = 13. Set 'S' flag if BL < 13. CMPCL,[20]DC 02 20Set 'Z' flag if CL = [20]. Set 'S' flag if CL < [20].  Branch Instructions. Flags NOT set.Depending on the type of jump, different machine codes can be generated. Jump instructions cause the instruction pointer (IP) to be altered. The largest possible jumps are +127 bytes and -128 bytes. The CPU flags control these jumps. The 'Z' flag is set if the most recent calculation gave a Zero result. The 'S' flag is set if the most recent calculation gave a negative result. The 'O' flag is set if the most recent calculation gave a result too big to fit in the register.AssemblerMachineCodeExplanationJMPHEREC0 12 C0 FEIncrease IP by 12 Decrease IP by 2 (twos complement) JZTHEREC1 09 C1 9CIncrease IP by 9 if the 'Z' flag is set. Decrease IP by 100 if the 'Z' flag is set. JNZA_PlaceC2 04 C2 F0Increase IP by 4 if the 'Z' flag is NOT set. Decrease IP by 16 if the 'Z' flag is NOT set. JSSTOPC3 09 C3 E1Increase IP by 9 if the 'S' flag is set. Decrease IP by 31 if the 'S' flag is set. JNSSTARTC4 04 C4 E0Increase IP by 4 if the 'S' flag is NOT set. Decrease IP by 32 if the 'S' flag is NOT set. JOREPEATC5 09 C5 DFIncrease IP by 9 if the 'O' flag is set. Decrease IP by 33 if the 'O' flag is set. JNOAGAINC6 04 C6 FBIncrease IP by 4 if the 'O' flag is NOT set. Decrease IP by 5 if the 'O' flag is NOT set.  Procedures and Interrupts. Flags NOT set.CALL, RET, INT and IRET are available only in the registered version.AssemblerMachineCodeExplanationCALL30CA 30Save IP on the stack and jump to the procedure at address 30.RETCBRestore IP from the stack and jump to it.INT02CC 02Save IP on the stack and jump to the address (interrupt vector) retrieved from RAM[02].IRETCDRestore IP from the stack and jump to it. Stack Manipulation Instructions. Flags NOT set.AssemblerMachineCodeExplanationPUSHBLE0 01BL is saved onto the stack.POPCLE1 02CL is restored from the stack.PUSHFEASR flags are saved onto the stack.POPFEBSR flags are restored from the stack. Input Output Instructions. Flags NOT set.AssemblerMachineCodeExplanationIN07F0 07Data input from I/O port 07 to AL.OUT01F1 01Data output to I/O port 07 from AL. Miscellaneous Instructions. CLI and STI set I flag. AssemblerMachineCodeExplanationCLOFEClose visible peripheral windows.HALT00Halt the processor.NOPFFDo nothing for one clock cycle.STIFCSet the interrupt flag in the Status Register.CLIFDClear the interrupt flag in the Status Register.ORG40Code originAssembler directive: Generate code starting from address 40.DB"Hello"Define byteAssembler directive: Store the ASCII codes of 'Hello' into RAM.DB84Define byteAssembler directive: Store 84 into RAM. Detailed Instruction Set  HYPERLINK \l "Contents" Contents The Full Instruction Set HYPERLINK \l "ArithAndLogic"Arithmetic Logic HYPERLINK \l "JumpInstructions"Jump Instructions HYPERLINK \l "MoveInstructions"Move Instructions HYPERLINK \l "CompareInstructions"Compare Instructions HYPERLINK \l "StackInstructions"Stack Instructions HYPERLINK \l "ProcAndIntInstructions"Procedures And Interrupts HYPERLINK \l "IOInstructions"Inputs and Outputs HYPERLINK \l "OtherInstructions"Other Instructions General Information CPU Registers There are four general purpose registers called AL, BL, CL and DL. There are three special purpose registers. These are IP is the instruction pointer. SP is the stack pointer. SR is the status register. This contains the I, S, O and Z flags. Flags Flags give information about the outcome of computations performed by the CPU. Single bits in the status register are used as flags. This simulator has flags to indicate the following. S The sign flag is set if a calculation gives a negative result. O The overflow flag is set if a result is too big to fit in 8 bits. Z The zero flag is set if a calculation gives a zero result. I is the hardware interrupts enabled flag. Most real life CPUs have more than four flags. Registers and Machine Codes The registers and their equivalent machine code numbers are shown below. Register names AL BL CL DL Machine codes 00 01 02 03 Example : To add one to the CL register use the instruction Assembly Code INC CL Machine Code Hex A4 02 Machine code Binary 10100100 00000010 A4 is the machine instruction for the INC command. 02 refers to the CL register. The assembler is not case sensitive. mov is the same as MOV and Mov. Within the simulator, hexadecimal numbers may not have more than two hexadecimal digits. Hexadecimal numbers 15, 3C and FF are examples of hexadecimal numbers. When using the assembler, all numbers should be entered in hexadecimal. The CPU window displays the registers in binary, hexadecimal and decimal. Look at the HYPERLINK \l "BinHex"Hexadecimal and Binary page for more detail. Negative numbers FE is a negative number. Look at the HYPERLINK \l "NegNum"Negative Numbers table for details of twos complement numbers. In a byte, the left most bit is used as a sign bit. This has a value of minus 128 decimal. Bytes can hold signed numbers in the range -128 to +127. Bytes can hold unsigned numbers in the range 0 to 255. Indirection When referring to data in RAM, square brackets are used. For example [15] refers to the data at address 15hex in RAM. The same applies to registers. [BL] refers to the data in RAM at the address held in BL. This is important and frequently causes confusion. These are indirect references. Instead of using the number or the value in the register directly, these values refer to RAM locations. These are also called pointers. Comparing with 80x86 Chips At the mnemonic level, the simulator instructions look very like 80x86 assembly code mnemonics. Sufficient instructions are implemented to permit realistic programming but the full instruction set has not been implemented. All the simulated instructions apply to the low eight bits of the 80x86 CPU. The rest of the CPU has not been simulated. In the registered version, CALL, RET, INT, IRET and simulated hardware interrupts are available so procedures and interrupts can be written. Most of the instructions behave as an 80x86 programmer would expect. The MUL and DIV (multiplication and division) commands are simpler than the 80x86 equivalents. The disadvantage of the simulator approach is that overflow is much more probable. The simulator versions of ADD and SUB are realistic. The 8086 DIV instruction calculates both DIV and MOD in the same instruction. The simulator has MOD as a separate instruction. The machine codes are quite unlike the 80x86 machine codes. They are simpler, less compact but designed to make the machine code as simple as possible. With 80x86 machine code, a mnemonic like MOV AL,15 is encoded in two bytes. MOV AL, is encoded into one byte and the 15 goes into another. This means that a lot of different machine OP CODES are needed for all the different combinations of MOV commands and registers. This simulator needs three bytes. MOV is encoded as a byte sized OP CODE. AL is encoded as a byte containing 00. The 15 goes into a byte as before. This is not very efficient but is very simple. Arithmetic and Logic  HYPERLINK \l "IsetDetailed" Detailed Instruction Set Arithmetic Instructions - Flags are set. The Commands ArithmeticLogicBitwiseAdd - AdditionAND - Logical AND - 1 AND 1 gives 1. Any other input gives 0.ROL - Rotate bits left. Bit at left end moved to right end.Sub - SubtractionOR - Logical OR - 0 OR 0 gives 0. Any other input gives 1.ROR - Rotate bits right. Bit at right end moved to left end.Mul - MultiplicationXOR - Logical exclusive OR - Equal inputs give 0. Non equal inputs give 1.SHL - Shift bits left and discard leftmost bit.Div - DivisionNOT - Logical NOT - Invert the input. 0 gives 1. 1 gives 0.SHR - Shift bits right and discard rightmost bit.Mod - Remainder after divisionInc - Increment (add one)Dec - Decrement (subtract one) COMMANDSDIRECT EXAMPLESOPAssemblerMachine CodeExplanationADDADDAL,BLA0 00 01Add BL to ALSUBSUBCL,DLA1 02 03Subtract DL from CLMULMULAL,CLA2 00 02Multiply AL by CLDIVDIVBL,DLA3 01 03Divide BL by DLMODMODDL,BLA6 03 01Remainder after dividing DL by BLINCINCALA4 00Add one to ALDECDECBLA5 01Deduct one from BLANDANDCL,ALAA 02 00CL becomes CL AND ALOROR CL,DLAB 02 03CL becomes CL OR DLXORXORBL,ALAC 01 00BL becomes BL XOR ALNOTNOTCLAD 02Invert the bits in CLROLROLDL9A 03Bits in DL rotated one place leftRORRORAL9B 00Bits in AL rotated one place rightSHLSHLBL9C 01Bits in BL shifted one place leftSHRSHRCL9D 02Bits in CL shifted one place right COMMANDSIMMEDIATE EXAMPLESOPAssemblerMachine CodeExplanationADDADDAL,15B0 00 15Add 15 to ALSUBSUBBL,05B1 01 05Subtract 5 from BLMULMULAL,10B2 00 10Multiply AL by 10DIVDIVBL,04B3 01 04Divide BL by 4MODMODDL,20B6 03 20Remainder after dividing DL by 20ANDANDCL,55BA 02 55CL becomes CL AND 55 (01010101)OROR CL,AABB 02 AACL becomes CL OR AA (10101010)XORXORBL,F0BC 01 F0BL becomes BL XOR F0 Examples ADD CL,AL - Add CL to AL and put the answer into CL. ADDAL,22 - Add 22 to AL and put the answer into AL. The answer always goes into the first register in the command.  DEC BL - Subtract one from BL and put the answer into BL. The other commands all work in the same way. Flags If a calculation gives a zero answer, set the Z zero flag. If a calculation gives a negative answer, set the S sign flag. If a calculation overflows, set the O overflow flag. An overflow happens if the result of a calculation has more bits than will fit into the available register. With 8 bit registers, the largest numbers that fit are -128 to + 127. Jump Instructions  HYPERLINK \l "IsetDetailed" Detailed Instruction Set Jump Instructions - Flags are NOT set. These instructions do NOT set the Z, S or O flags but conditional jumps use the flags to determine whether or not to jump. The CPU contains a status register - SR. This contains flags that are set or cleared depending on the most recent calculation performed by the processor. The CMP compare instruction performs a subtraction like the SUB command. It sets the flags but the result is not stored. The Flags - ISOZ ZERO - The Z flag is set if the most recent calculation gave a zero result. SIGN - The S flag is set if the most recent calculation gave a negative result. OVERFLOW - The O flag is set if the most recent calculation gave a result too big to fit a register. INTERRUPT - The I flag is set in software using the STI command. If this flag is set, the CPU will respond to hardware interrupts. The CLI command clears the I flag and hardware interrupts are ignored. The I flag is off by default. The programmer enters a command like JMP HERE. The assembler converts this into machine code by calculating how far to jump. This tedious and error prone taks (for humans) is automated. In an 8 bit register, the largest numbers that can be stored are -128 and +127. This limits the maximum distance a jump can go. Negative numbers cause the processor to jump backwards towards zero. Positive numbers cause the processor to jump forward towards 255. The jump distance is added to IP, the instruction pointer. To understand jumps properly, you also need to understand  HYPERLINK "360-negativeNum.htm" negative numbers. COMMANDSEXAMPLESOPAssemblerMachine CodeExplanationJMPJMP HEREC0 25Unconditional jump. Flags are ignored. Jump forward 25h RAM locations.JMPJMP BACKC0 FEJump Unconditional jump. Flags are ignored. Jump back -2d RAM locations.JZJZ STOPC1 42Jump Zero. Jump if the zero flag (Z) is set. Jump forward +42h places if the (Z) flag is set.JZJZ STARTC1 F2Jump Zero. Jump if the zero flag (Z) is set. Jump back -14d places if the (Z) flag is set.JNZJNZFORWARDC2 22Jump Not Zero. Jump if the zero flag (Z) is NOT set. Jump forward 22h places if the (Z) flag is NOT set.JNZJNZ REPC2 EEJump Not Zero. Jump if the zero flag (Z) is NOT set. Jump back -18d places if the (Z) flag is NOT set.JSJS MinusC3 14Jump Sign. Jump if the sign flag (S) is set. Jump forward 14h places if the sign flag (S) is set.JSJS Minus2C3 FCJump Sign. Jump if the sign flag (S) is set. Jump back -4d places if the sign flag (S) is set.JNSJNS PlusC4 33Jump Not Sign. Jump if the sign flag (S) is NOT set. Jump forward 33h places if the sign flag (S) is NOT set.JNSJNS Plus2C4 E2Jump Not Sign. Jump if the sign flag (S) is NOT set. Jump back -30d places if the sign flag (S) is NOT set.JOJO TooBigC5 12Jump Overflow. Jump if the overflow flag (O) is set. Jump forward 12h places if the overflow flag (O) is set. JOJO ReDoC5 DFJump Overflow. Jump if the overflow flag (O) is set. Jump back -33d places if the overflow flag (O) is set.JNOJNO OKC6 33Jump Not Overflow. Jump if the overflow flag (O) is NOT set. Jump forward 33h places if the overflow flag (O) is NOT set. JNOJNO BackC6 E0Jump Not Overflow. Jump if the overflow flag (O) is NOT set. Jump back -32d places if the overflow flag (O) is NOT set.The full 8086 instruction set has many other jumps. There are more flags in the 8086 as well! Legal Destination Labels here:A nice correct label.here::Not allowed Only one colon is permitted.1234:Not allowed. Labels must begin with a letter or '_'._:OK but not human friendly.hereDestination labels must end in a colon.Some of these rules are not strictly enforced in the simulator. Move Instructions  HYPERLINK \l "IsetDetailed" Detailed Instruction Set Move Instructions - Flags are NOT set. Move instructions are used to copy data between registers and between RAM and registers. AddressingMode AssemblerExampleSupportedExplanationImmediatemov al,10YESCopy 10 into ALDirect (register)mov al,blNOCopy BL into ALDirect (memory)mov al,[50]YESCopy data from RAM at address 50 into AL.mov [40],clYESCopy data from CL into RAM at address 40.Indirectmov al,[bl]YESBL is a pointer to a RAM location. Copy data from that RAM location into AL.mov [cl],dlYESCL is a pointer to a RAM location. Copy data from DL into that RAM location.Indexedmov al,[20 + bl]NOA data table is held in RAM at address 20. BL indexes a data item within the data table. Copy from the data table at address 20+BL into AL.mov [20 + bl],alNOA data table is held in RAM at address 20. BL indexes a data item within the data table. Copy from AL into the data table at address 20+BL.Base Registermov al,[bl+si]NOBL points to a data table in memory. SI indexes to a record inside the data table. BL is called the "base register". SI is called the "offset or index". Copy from RAM at address BL+SI into AL.mov [bl+si],alNOBL points to a data table in memory. SI indexes to a record inside the data table. BL is called the "base register". SI is called the "offset". Copy from AL into RAM at address BL+SI. Right to Left Convention  ADDRESSING MODES Immediate MOV AL,10 Copy a number into a register. This is the simplest move command and easy to understand. Direct (register) MOV AL,BL Copy one register into another. This is easy to understand. The simulator does not support this command. If you have to copy from one register to another, use a RAM location or the stack to achieve the move. Direct (memory) MOV AL,[50]; Copy from RAM into AL. Copy the data from address 50. MOV [50],AL; Copy from AL into RAM. Copy the data to address 50. The square brackets indicate data in RAM. The number in the square brackets indicates the RAM address/location of the data. Indirect MOV AL,[BL]; Copy from RAM into AL. Copy from the address that BL points to. MOV [BL],AL; Copy from AL into RAM. Copy to the address that BL points to. Copy between a specified RAM location and a register. The square brackets indicate data in RAM. In this example BL points to RAM. Indexed MOV AL,[20 + BL]; Copy from RAM into AL. The RAM address is located at 20+BL. MOV [20 + BL],AL; Copy from AL into RAM. The RAM address is located at 20+BL. Here the BL register is used to "index" data held in a table. The table data starts at address 20. Base Register MOV AL,[BL+SI]; Copy from RAM into AL. The RAM address is located at BL+SI. MOV [BL+SI],AL; Copy from AL into RAM. The RAM address is located at BL+SI. BL is the "base register". It holds the start address of a data table. SI is the "source index". It is used to index a record in the data table. Compare Instructions  HYPERLINK \l "IsetDetailed" Detailed Instruction Set The Compare CMP Command - Flags are Set. When the simulator does a comparison using CMP, it does a subtraction of the two values it is comparing. The status register flags are set depending on the result of the subtraction. The flags are set but the answer is discarded. (Z)If the values are equal, the subtraction gives a zero result and the (Z) zero flag is set.(S)If the number being subtracted was greater than the other than a negative answer results so the (S) sign flag is set.If the number being subtracted is smaller than the other, no flags are set. Use JZ and JS or JNZ and JNS to test the result of a CMP command. Direct Memory Comparison AssemblerMachineCodeExplanationCMP CL,[20]DC 02 20Here the CL register is compared with RAM location 20. Work out CL - RAM[20]. DC is the machine instruction for direct memory comparison. 02 refers to the AL register. 20 points to RAM address 20. Direct Register Comparison AssemblerMachineCodeExplanationCMP AL,BLDA 00 01Here two registers are compared. Work out AL - BL DA is the machine instruction for register comparison. 00 refers to the AL register. 01 refers to the BL register.  Immediate Comparison AssemblerMachineCodeExplanationCMP AL,0DDB 00 0DHere the AL register is compared with 0D, (the ASCII code of the Enter key). Work out AL - 0D. DB is the machine instruction for register comparison. 00 refers to the AL register. 0D is the ASCII code of the Enter key. Stack Instructions  HYPERLINK \l "IsetDetailed" Detailed Instruction Set Stack Instructions - Flags are NOT set. After pushing items onto the stack, always pop them off in reverse order. This is because the stack works by the Last In First Out (LIFO) rule. The stack is an area of RAM used in this particular way. Any part of RAM could be used. In the simulator, the stack is located just below the Video RAM at address [BF]. The stack grows towards zero. It is easily possible to implement a stack that grows the other way. Stack Examples AssemblerMachineCodeExplanationPUSH BLE0 01Push BL onto the stack and subtract one from the stack pointer. E0 is the machine instruction for PUSH. 01 refers to the BL register.POP BLE1 01Add one to the stack pointer and pop BL from the stack. E1 is the machine instruction for POP. 01 refers to the BL register.PUSHFEASave the CPU status register (SR) onto the stack. This saves the CPU flags.POPFEBRestore the CPU status register (SR) from the stack. This restores the CPU flags. The stack is used to ... save register contents for later restoration. pass parameters into procedures and return results. reverse the order in which data is stored. save addresses so procedures and interrupts can return to the right place. perform postfix arithmetic. make recursion possible. Stack Pointer A CPU register (SP) that keeps track of (is a pointer to) the data on the stack. It is colour coded with a blue highlight in the simulator RAM display. Push and Pop Push - Add data to the stack at the stack pointer position and subtract one from the stack pointer. Pop - Add one to the stack pointer and remove data from the stack at the stack pointer position. LIFO Last in First out. The stack operates strictly to this rule. When data is pushed onto the stack, it must later be popped in reverse order. Stack Overflow The stack is repeatedly pushed until it is full. The simulator does not detect this condition and the stack can overwite program code or data. Real life programs can fail in the same way. Stack Underflow The stack is repeatedly popped until it is empty. The next pop causes an underflow. Procedures and Interrupts  HYPERLINK \l "IsetDetailed" Detailed Instruction Set Procedures and Interrupts - Flags are NOT set. These are available in the registered version. Please register. It is essential to save the registers and flags used by any procedure or interrupt and restore them after the procedure or interrupt has finished its work. Use push and pushf to save. Use pop and popf to restore values. AssemblerMachineCodeExplanationCALL 30CA 30Call the procedure at address 30. The return address is pushed onto the stack and the Instruction Pointer (IP) is set to 30. CA is the machine instruction for CALL. 30 is the address of the start of the procedure being called.RETCBReturn from the procedure. Set the Instruction Pointer (IP) to the return address popped off the stack. CB is the machine instruction for Return.INT 03CC 03The Instruction Pointer (IP) is set to the address of the interrupt vector retrieved from RAM address 03. The return address is pushed onto the stack. CC is the machine instruction for INT. 03 is the address of the interrupt vector used by the INT command.IRETCDReturn from the interrupt. Set the Instruction Pointer (IP) to the return address popped off the stack. CD is the machine instruction for IRET. Input Output Instructions  HYPERLINK \l "IsetDetailed" Detailed Instruction Set Input and Output Instructions - Flags are NOT set. The simulator has 16 ports numbered from 00 to 0F. These are connected to simulated, outside-world peripherals. AssemblerMachineCodeExplanationIN 07F0 07Input from Port 07. F0 is the machine instruction for Input. 07 is the port number.OUT 01F1 01Output to Port 01. F1 is the machine instruction for Output. 01 is the port number. Peripherals PortDescription00Input from port 00 for simulated keyboard input.01Output to port 01 to control the traffic lights.02Output to port 02 to control the seven segment displays.03Output to port 03 to control the heater. Input from port 03 to sense the thermostat state.04Output to port 04 to control the snake in the maze.05Output to port 05 to control the stepper motor.06Output to port 06 to control the lift.07Output to port 07 to make the keyboard visible. Input from port 07 to read the keyboard ASCII code.08Output to port 08 to make the numeric keypad visible. Input from port 08 to read from the numeric keypad.09-0FUnused Other Instructions  HYPERLINK \l "IsetDetailed" Detailed Instruction Set Miscellaneous Instructions - CLI and STI control the (I) Flag AssemblerMachineCodeExplanationHALT 00Stop the program. 00 is the machine instruction for HALT. The program will cease to run if it encounters a HALT instruction. Continuous running is cancelled by this command. You can have several halt commands in one program. There should be only one END and code after END is ignored.NOPFFDo nothing for one clock cycle. FF is the machine instruction for NOP. The program will do nothing for one clock cycle. The program then continues as normal. NOP is used to introduce time delays to allow slow electronics to keep up with the CPU. These are also called WAIT STATES. CLOFEClose all the peripheral windows. FE is the machine code for CLO. It applies to this simulator only, and is used to close peripheral windows. This makes it easier to write demonstration programs without the screen getting too cluttered. ORG 30NONECode Origin. Generate code starting from this address. To generate code from a starting address other than zero use ORG. This is useful to place procedures, interrupts or data tables at particular addresses in memory. ORG is an assembler directive and no code is generated.DB 8484Define a byte. Store the byte (84) in the next free RAM location. Use DB to create data tables containing bytes of data. Use BD to define an Interrupt Vector.DB "Hello"48,65,6C,6C,6FDefine a string. Store the ASCII codes of the text in quotes in the next free RAM locations. Use DB to store text strings. The stored ASCII codes do not include an end-of-string marker. Use DB 00 for this.CLIFDClear the I flag If the I flag is cleared, hardware interrupts are ignored. This is the default state for the simulator. Resetting the CPU will also clear the I flag. The timer that generates hardware interrupts will do nothing. STIFCSet the I flag If the I flag is set, the simulator will generate INT 02 at regular time intervals. It is necessary to have an interrupt vector stored at address 02 that points to interrupt handler code stored elsewhere. The interval between timer interrupts can be set using the slider in the Configuration Tab. If interrupts occur faster than the processor can handle them, a simulated system crash will follow. Adjust the CPU clock speed and the timer interval to prevent this or cause it if you want to see what happens.It is possible to program the simulator using pure machine codes. Here is a simple example. ; ===== NORMAL CODE ===== MOV AL,0 INC AL END ; ===== NORMAL CODE ===== Here is the same program in pure machine code apart from the required END keyword. This should run exactly as the program above. ; ===== PURE MACHINE CODE ===== DB D0 ; MOV DB 00 ; AL DB 00 ; 0 DB A4 ; INC DB 00 ; AL END ; ===== PURE MACHINE CODE ===== This is an interesting exercise but rather defeats the whole point of using an assembler. If you have a dog, why bark yourself? Manually calculating jump distances might be a useful learning exercise, especially for negative jumps. List File  HYPERLINK \l "Contents" Contents The List File  In the list file, your original program is shown. Numbers in square blackets such as [1C] are the addresses at which the machine codes were generated. The machine codes are shown. Here is a typical line. MOV CL,C0 ; [10] D0 02 C0 ; Video ram base address The command is to move C0 into the AL register. The machine code was generated at address [10]. The machine codes are D0 00 C0. The programmer's comment is reproduced. Negative Numbers  HYPERLINK \l "Contents" Contents Negative NumbersDecHexDecHexDecHexDecHexDecHexDecHexDecHexDecHex-12880-12781-12682-12583-12484-12385-12286-12187-12088-11989-1188A-1178B-1168C-1158D-1148E-1138F-11290-11191-11092-10993-10894-10795-10696-10597-10498-10399-1029A-1019B-1009C-0999D-0989E-0979F-096A0-095A1-094A2-093A3-092A4-091A5-090A6-089A7-088A8-087A9-086AA-085AB-084AC-083AD-082AE-081AF-080B0-079B1-078B2-077B3-076B4-075B5-074B6-073B7-072B8-071B9-070BA-069BB-068BC-067BD-066BE-065BF-064C0-063C1-062C2-061C3-060C4-059C5-058C6-057C7-056C8-055C9-054CA-053CB-052CC-051CD-050CE-049CF-048D0-047D1-046D2-045D3-044D4-043D5-042D6-041D7-040D8-039D9-038DA-037DB-036DC-035DD-034DE-033DF-032E0-031E1-030E2-029E3-028E4-027E5-026E6-025E7-024E8-023E9-022EA-021EB-020EC-019ED-018EE-017EF-016F0-015F1-014F2-013F3-012F4-011F5-010F6-009F7-008F8-007F9-006FA-005FB-004FC-003FD-002FE-001FFPositive NumbersDecHexDecHexDecHexDecHexDecHexDecHexDecHexDecHex+00000+00101+00202+00303+00404+00505+00606+00707+00808+00909+0100A+0110B+0120C+0130D+0140E+0150F+01610+01711+01812+01913+02014+02115+02216+02317+02418+02518+0261A+0271B+0281C+0291D+0301E+0311F+03220+03321+03422+03523+03624+03725+03826+03927+04028+04129+0422A+0432B+0442C+0452D+0462E+0472F+04830+04931+05032+05133+05234+05335+05436+05537+05638+05739+0583A+0593B+0603C+0613D+0623E+0633F+06440+06541+06642+06743+06844+06945+07046+07147+07248+07349+0744A+0754B+0764C+0774D+0784E+0794F+08050+08151+08252+08353+08454+08555+08656+08757+08858+08959+0905A+0915B+0925C+0935D+0945E+0955F+09660+09761+09863+09963+10064+10165+10266+10367+10468+10569+1066A+1076B+1086C+1096D+1106E+1116F+11270+11371+11472+11573+11674+11775+11876+11977+12078+12179+1227A+1237B+1247C+1257D+1267E+1277F Two's complement The numbers work as follows. The leftmost bit in an eight bit byte is the sign bit. 1 0 1 0 1 0 1 0 ^ ^ The sign bit has a value of -128 decimal or -80 hexadecimal. The other seven bits are treated as a normal positive number between 0 and 127. This is true whether the overall number is positive or negative. For example to store -1 the binary is 1 1 1 1 1 1 1 1 - 128d + 127d = -1d ^ ^ -128d To store 127 decimal, the binary is 0 1 1 1 1 1 1 1 0 + 127d = 127d ^ ^ The sign bit is zero. 16 and 32 bit machines also use the leftmost bit as the sign bit. The negative numbers work in exactly the same way but much bigger niumbers can be stored. In a 16 bit machine, the sign bit is worth -32768. In a 32 bit machine, the sign bit is worth -2147483648 (2000 million approximately). Pop-up Help  HYPERLINK \l "Contents" Contents  HYPERLINK "" \l "add" ADD  HYPERLINK "" \l "and" AND  HYPERLINK "" \l "call" CALL  HYPERLINK "" \l "cli" CLI  HYPERLINK "" \l "clo" CLO  HYPERLINK "" \l "cmp" CMP  HYPERLINK "" \l "db" DB  HYPERLINK "" \l "dec" DEC  HYPERLINK "" \l "div" DIV  HYPERLINK "" \l "end" END  HYPERLINK "" \l "halt" HALT  HYPERLINK "" \l "in" IN  HYPERLINK "" \l "inc" INC  HYPERLINK "" \l "int" INT  HYPERLINK "" \l "iret" IRET  HYPERLINK "" \l "jmp" JMP  HYPERLINK "" \l "jno" JNO  HYPERLINK "" \l "jns" JNS  HYPERLINK "" \l "jnz" JNZ  HYPERLINK "" \l "jo" JO  HYPERLINK "" \l "js" JS  HYPERLINK "" \l "jz" JZ  HYPERLINK "" \l "mod" MOD  HYPERLINK "" \l "mov" MOV  HYPERLINK "" \l "mul" MUL  HYPERLINK "" \l "nop" NOP  HYPERLINK "" \l "not" NOT  HYPERLINK "" \l "or" OR  HYPERLINK "" \l "org" ORG  HYPERLINK "" \l "out" OUT  HYPERLINK "" \l "pop" POP  HYPERLINK "" \l "popf" POPF  HYPERLINK "" \l "push" PUSH  HYPERLINK "" \l "pushf" PUSHF  HYPERLINK "" \l "ret" RET  HYPERLINK "" \l "rol" ROL  HYPERLINK "" \l "ror" ROR  HYPERLINK "" \l "shl" SHL  HYPERLINK "" \l "shr" SHR  HYPERLINK "" \l "sti" STI  HYPERLINK "" \l "sub" SUB  HYPERLINK "" \l "xor" XOR CPU General Purpose Registers The CPU is where all the arithmetic and logic (decision making) takes place. The CPU has storage locations called registers. The CPU has flags which indicate zero, negative or overflowed calculations. More information is included in the description of the system architecture. The CPU registers are called AL, BL, CL and DL. The machine code names are 00, 01, 02 and 03. Registers are used for storing binary numbers. Once the numbers are in the registers, it is possible to perform arithmetic or logic. Sending the correct binary patterns to peripherals like the traffic lights, makes it possible to control them. ; semicolon begins a program comment. Comments are used to document programs. They are helpful to new programmers joining a team and to existing people returning to a project having forgotten what it is about. Good comments explain WHY things are being done. Poor comments simply repeat the code or state the totally obvious. Ram Addresses Examples [7F] [22] [AL] [CL] [7F] the contents of RAM at location 7F [CL] the contents of the RAM location that CL points to. CL contains a number that is used as the address.  The Instruction Set   HYPERLINK "" \l "top" Pop-up Help ADD - Add two values togetherCPU flags are setAssemblerMachine CodeExplanationADD BL,CLA0 01 02Add CL to BL. Answer goes into BLADD AL,12B0 00 12Add 12 to AL. Answer goes into AL  HYPERLINK "" \l "top" Pop-up Help AND - Logical AND two values togetherCPU flags are setAssemblerMachine CodeExplanationAND BL,CLAA 01 02AND CL with BL. Answer goes into BLAND AL,12BA 00 12AND 12 with AL. Answer goes into ALThe AND rule is that two ones give a one. All other inputs give nought. Look at this example... 10101010 00001111 -------- ANSWER 00001010 The left four bits are masked to 0. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help CALL and RETCPU flags are NOT setAssemblerMachineCodeExplanationCALL 50CA 50Call the procedure at address 50. The CPU pushes the instruction pointer value IP + 2 onto the stack. Later the CPU returns to this address. IP is then set to 50.RETCBThe CPU instruction pointer is set to 50. The CPU executes instructions from this address until it reaches the RET command. It then pops the value of IP off the stack and jumps to this address where execution resumes. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help CLI and STICPU (I) flag is set/clearedAssemblerMachineCodeExplanationSTIFCSTI sets the Interrupt flag.CLIFDCLI clears the Interrupt flag 'I' in the status register. STI sets the interrupt flag 'I' in the status register. The machine code for CLI is FD. The machine code for STI is FC. If (I) is set, the CPU will respond to interrupts. The simulator generates a hardware interrupt at regular time intervals that you can adjust. If 'I' is set, there should be an interrupt vector at address [02]. The CPU will jump to the code that this vector points to whenever there is an interrupt.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help CLOCPU flags are NOT setAssemblerMachineCodeExplanationCLOFEClose unwanted peripheral windows. CLO is not an x86 command. It closes all unnecessary simulator windows which would otherwise have to be closed manually one by one.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help CMPCPU flags are setAssemblerMachineCodeExplanationCMP AL,0DDB 00 0DCompare AL with 0D If the values being compared are ... EQUAL set the 'Z' flag. AL less than 0D set the 'S' flag. AL greater than 0D set no flags.CMP AL,BLDA 00 01Compare AL with BL If the values being compared are ... EQUAL set the 'Z' flag. AL less than BL set the 'S' flag. AL greater than BL set no flags.CMP CL,[20]DC 02 20Compare CL with 20 If the values being compared are ... EQUAL set the 'Z' flag. CL less than RAM[20] set the 'S' flag. CL greater than RAM[20] set no flags.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help DBCPU flags are NOT setAssemblerMachineCodeExplanationDB 22 DB 33 DB 44 DB 022 33 44 00 Define Byte DB gives a method for loading values directly into RAM. DB does not have a machine code. The numbers or text after DB are loaded into RAM. Use DB to set up data tables.DB "Hello" DB 048 65 6C 6C 6F 00 ASCII codes are loaded into RAM. End of text is marked by NULL  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help DEC and INCCPU flags are setAssemblerMachineCodeExplanationINC BLA4 01Add one to BL.DEC ALA5 00Subtract one from AL.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help DIV and MODCPU flags are setAssemblerMachineCodeExplanationDIV AL,5B3 00 05Divide AL by 5. Answer goes into AL. DIV differs from the x86 DIV. DIV AL,BL A3 00 01Divide AL by BL. Answer goes into AL. DIV differs from the x86 DIV. MOD AL,5B6 00 05MOD AL by 5. Remainder after division goes into AL. MOD is not an x86 command. MOD AL,BLA6 00 01MOD AL by BL. Remainder after division goes into AL. MOD is not an x86 command. The x86 DIV calculates div and mod in one command. The answers are put into different registers. This is not possible with the 8 bit simulator so div and mod are separated and simplified. 8 DIV 3 is 3 (with remainder 2). 8 MOD 3 is 2 HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help ENDCPU flags are NOT setAssemblerMachineCodeExplanationEND00END stops further program execution. The simulator achieves this by stopping the CPU clock. END is also an assembler directive. All code after END is ignored by the assembler. There should be only one END in a program. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help HALTCPU flags are NOT setAssemblerMachineCodeExplanationHALT00HALT stops further program execution. The simulator achieves this by stopping the CPU clock. HALT is not an assembler directive. (See END) There can be any number of HALT commands in a program. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help IN and OUTCPU flags are NOT setAssemblerMachineCodeExplanationIN 07F0 07Input from port 07. The data is stored in the AL register.OUT 03F1 03Output to port 03. The data comes from the AL register.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help INC and DECCPU flags are setAssemblerMachineCodeExplanationINC BLA4 01Add one to BL.DEC ALA5 00Subtract one from AL. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help INT and IRETCPU flags are NOT setAssemblerMachineCodeExplanationINT 02CC 02The return address (IP + 2) is pushed onto the stack. The stack pointer (SP) is reduced by one. RAM location 02 contains the address of the Interrupt Handler. This address is "fetched" and IP is set to it.IRETCDThe return address is popped off the stack. The stack pointer (SP) is increased by one. IP is set to the return address popped off the stack. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help JMPCPU flags are NOT set and the flags are ignoredAssemblerMachineCodeExplanationJMP ForwardC0 12Set IP to a new value Add 12 to IP The assembler calculates the jump distance. The biggest possible forward jump is +127.JMP BackFESet IP to a new value Add -2 to IP FE is -2. This is  HYPERLINK "360-negativeNum.htm" explained here. The assembler calculates the jump distance. The biggest possible backward jump is -128. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help JNOCPU flags are NOT set. JNO uses the (O) flag. The (O) flag is set if a calculation gives a result too big to fit in an 8 but register.AssemblerMachineCodeExplanationJNO ForwardC6 12Jump if the (O) flag is NOT set. If the (O) flag is NOT set, jump forward 12 places. If the (O) flag is NOT set, add 12 to (IP). If the (O) flag is set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible forward jump is +127. JNO BackC6 FEJump if the (O) flag is NOT set. If the (O) flag is NOT set, jump back 2 places. If the (O) flag is NOT set, add -2 to (IP). If the (O) flag is set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible backward jump is -128. FE is -2. This is  HYPERLINK "360-negativeNum.htm" explained here.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help JNSCPU flags are NOT set. JNS uses the (S) flag. The (S) flag is set if a calculation gives a negative result.AssemblerMachineCodeExplanationJNS ForwardC4 12Jump if the (S) flag is NOT set. If the (S) flag is NOT set, jump forward 12 places. If the (S) flag is NOT set, add 12 to (IP). If the (S) flag is set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible forward jump is +127. JNS BackC4 FEJump if the (S) flag is NOT set. If the (S) flag is NOT set, jump back 2 places. If the (S) flag is NOT set, add -2 to (IP). If the (S) flag is set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible backward jump is -128. FE is -2. This is  HYPERLINK "360-negativeNum.htm" explained here.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help JNZCPU flags are NOT set. JNZ uses the (Z) flag. The (Z) flag is set if a calculation gives a zero result.AssemblerMachineCodeExplanationJNZ ForwardC2 12Jump if the (Z) flag is NOT set. If the (Z) flag is NOT set, jump forward 12 places. If the (Z) flag is NOT set, add 12 to (IP). If the (Z) flag is set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible forward jump is +127. JNZ BackC2 FEJump if the (Z) flag is NOT set. If the (Z) flag is NOT set, jump back 2 places. If the (Z) flag is NOT set, add -2 to (IP). If the (Z) flag is set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible backward jump is -128. FE is -2. This is  HYPERLINK "360-negativeNum.htm" explained here.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help JOCPU flags are NOT set. JO uses the (O) flag. The (O) flag is set if a calculation gives a result too big to fit in an 8 but register.AssemblerMachineCodeExplanationJO ForwardC5 12Jump if the (O) flag is set. If the (O) flag is set, jump forward 12 places. If the (O) flag is set, add 12 to (IP). If the (O) flag is NOT set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible forward jump is +127. JO BackC5 FEJump if the (O) flag is set. If the (O) flag is set, jump back 2 places. If the (O) flag is set, add -2 to (IP). If the (O) flag is NOT set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible backward jump is -128. FE is -2. This is  HYPERLINK "360-negativeNum.htm" explained here.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help JSCPU flags are NOT set. JS uses the (S) flag. The (S) flag is set if a calculation gives a negative result.AssemblerMachineCodeExplanationJS ForwardC3 12Jump if the (S) flag is set. If the (S) flag is set, jump forward 12 places. If the (S) flag is set, add 12 to (IP). If the (S) flag is NOT set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible forward jump is +127. JS BackC3 FEJump if the (S) flag is set. If the (S) flag is set, jump back 2 places. If the (S) flag is set, add -2 to (IP). If the (S) flag is NOT set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible backward jump is -128. FE is -2. This is  HYPERLINK "360-negativeNum.htm" explained here.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help JZCPU flags are NOT set. JZ uses the (Z) flag. The (Z) flag is set if a calculation gives a zero result.AssemblerMachineCodeExplanationJZ ForwardC1 12Jump if the (Z) flag is set. If the (Z) flag is set, jump forward 12 places. If the (Z) flag is set, add 12 to (IP). If the (Z) flag is NOT set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible forward jump is +127. JZ BackC1 FEJump if the (Z) flag is set. If the (Z) flag is set, jump back 2 places. If the (Z) flag is set, add -2 to (IP). If the (Z) flag is NOT set, add 2 to (IP). The assembler calculates the jump distance. The biggest possible backward jump is -128. FE is -2. This is  HYPERLINK "360-negativeNum.htm" explained here.   HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help DIV and MODCPU Flags are SetAssemblerMachineCodeExplanationDIV AL,5B3 00 05Divide AL by 5. Answer goes into AL. DIV differs from the x86 DIV. DIV AL,BL A3 00 01Divide AL by BL. Answer goes into AL. DIV differs from the x86 DIV. MOD AL,5B6 00 05MOD AL by 5. Remainder after division goes into AL. MOD is not an x86 command. MOD AL,BLA6 00 01MOD AL by BL. Remainder after division goes into AL. MOD is not an x86 command. The x86 DIV calculates div and mod in one command. The answers are put into different registers. This is not possible with the 8 bit simulator so div and mod are separated and simplified. 8 DIV 3 is 3 (with remainder 2). 8 MOD 3 is 2  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help MOVCPU flags are NOT setAddressingModeAssemblerExample Machine CodeSupportedExplanationImmediatemov al,10 D0 00 10YESCopy 10 into ALDirect (register)mov al,blNOCopy BL into ALDirect (memory)mov al,[50] D1 00 50YESCopy data from RAM at address 50 into AL. [50] is a pointer to data held in a RAM location.mov [40],cl D2 40 02YESCopy data from CL into RAM at address 40. [40] is a pointer to data held in a RAM location.Indirectmov al,[bl] D3 00 01YESBL is a pointer to a RAM location. Copy data from that RAM location into AL.mov [cl],dl D4 02 03YESCL is a pointer to a RAM location. Copy data from DL into that RAM location.Indexedmov al,[20 + bl]NOA data table is held in RAM at address 20. BL indexes a data item within the data table. Copy from the data table at address 20+BL into AL.mov [20 + bl],alNOA data table is held in RAM at address 20. BL indexes a data item within the data table. Copy from AL into the data table at address 20+BL.Base Registermov al,[bl+si]NOBL points to a data table in memory. SI indexes to a record inside the data table. BL is called the "base register". SI is called the "offset or index". Copy from RAM at address BL+SI into AL.mov [bl+si],alNOBL points to a data table in memory. SI indexes to a record inside the data table. BL is called the "base register". SI is called the "offset". Copy from AL into RAM at address BL+SI.  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help MULCPU Flags are SetAssemblerMachineCodeExplanationMUL AL,BLA2 00 01Multiply AL by BL. The result goes into AL MUL differs from the x86 MUL. MUL CL,12B2 02 12Multiply CL by 12. The result goes into CL MUL differs from the x86 MUL. The x86 MUL places the result into more than one register. This is not possible with the 8 bit simulator so MUL has been simplified. A disadvantage is that an overflow is much more likely to occur. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help NOPCPU Flags are NOT SetAssemblerMachineCodeExplanationNOPFFDo nothing. Do nothing for one CPU clock cycle. This is needed to keep the CPU synchronised with accurately timed electronic circuits. The CPU might need to delay before the electronics are ready. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help NOTCPU Flags are SetAssemblerMachineCodeExplanationNOT DLAD 03Invert all the bits in DL.If DL contained 01010101, after using NOT it will contain 10101010. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help ORCPU Flags are SetAssemblerMachineCodeExplanationOR AL,12BB 00 12Or 12 with AL. Answer goes into ALOR BL,CLAB 01 02Or CL with BL. Answer goes into BLThe OR rule is that two noughts give a nought. All other inputs give one. 10101010 OR 00001111 -------- = 10101111  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help ORGCPU Flags are NOT SetAssemblerMachineCodeExplanationORG 50NoneORG is not a CPU instruction. It is an instruction to the assembler to tell it to generate code at a particular address. It is useful for writing procedures and interrupts. It can also be used to specify where in memory, data tables go. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help OUT and INCPU Flags are NOT SetAssemblerMachineCodeExplanationIN 07F0 07Input from port 07. The data is stored in the AL register.OUT 03F1 03Output to port 03. The data comes from the AL register. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help PUSH, POP, PUSHF and POPFCPU Flags are NOT SetAssemblerMachineCodeExplanationPUSH ALE0 00Save AL onto the stack. Deduct one from the Stack Pointer (SP)POP BLE1 01Add one to the stack pointer (SP). Restore BL from the stackPUSHFEAPush the CPU flags from the status register (SR) onto the stack. Deduct one from the Stack Pointer (SP)POPFEBAdd one to the stack pointer (SP). POP the CPU flags from the stack into the ststus register (SR).PUSH saves a byte onto the stack. POP gets it back.The stack is an area of memory that obeys the LIFO rule - Last In First Out. When pushing items onto the stack, remember to pop them off again in exact reverse order. The stack can be used to hold the return address of a procedure call hold the return address of an interrupt call pass parameters into procedures get results back from procedures save and restore registers and flags reverse the order of data. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help RET and CALLCPU Flags are NOT SetAssemblerMachine CodeExplanationCALL 50CA 50Call the procedure at address 50. The CPU pushes the instruction pointer value IP + 2 onto the stack. Later the CPU returns to this address. IP is then set to 50.RETCBThe CPU instruction pointer is set to 50. The CPU executes instructions from this address until it reaches the RET command. It then pops the value of IP off the stack and jumps to this address where execution resumes. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help ROL and RORCPU Flags are SetAssemblerMachine CodeExplanationROL AL9A 00Rotate the bits in AL left one place. The leftmost bit is moved to the right end of the byte. Before ROL 10000110 - After ROL 00001101ROR DL9B 03Rotate the bits in DL right one place. The rightmost bit is moved to the left end of the byte. Before ROR 10000110 - After ROR 01000011 HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help SHL and SHRCPU Flags are SetAssemblerMachine CodeExplanationSHL AL9C 00Shift bits left one place. The leftmost bit is discarded. Before SHL 10000110 - After SHL 00001100SHR DL9D 03Shift bits right one place. The rightmost bit is discarded. Before SHR 10000110 - After SHR 01000011  HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help STI and CLICPU Flags are NOT SetAssemblerMachine CodeExplanationSTIFCSTI sets the Interrupt flag.CLIFDCLI clears the Interrupt flag 'I' in the status register. STI sets the interrupt flag 'I' in the status register. The machine code for CLI is FD. The machine code for STI is FC. If (I) is set, the CPU will respond to interrupts. The simulator generates a hardware interrupt at regular time intervals that you can adjust. If 'I' is set, there should be an interrupt vector at address [02]. The CPU will jump to the code that this vector points to whenever there is an interrupt.   HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help SUBCPU Flags are SetAssemblerMachine CodeExplanationSUB AL,12B1 00 12Subtract 12 from AL. The answer goes into AL.SUB BL,CLA1 01 02Subtract CL from BL. The answer goes into BL. HYPERLINK "" \l "top"  HYPERLINK "" \l "top" Pop-up Help XORCPU Flags are SetAssemblerMachine CodeExplanationXOR AL,12BC 00 1212 XOR AL. The answer goes into AL.XOR BL,CLAC 01 02CL XOR BL. The answer goes into BL.XOR can be used to invert selected bits. 00001111 This is a bit mask. XOR 01010101 -------- 01011010 The left four bits are unaltered. The right four bits are inverted. Truth Tables and Logic  HYPERLINK \l "Contents" Contents Boolean Operators - Flags are Set A mathematician called Bool invented a branch of maths for processing true and false values instead of numbers. This is called Boolean Algebra. Simple Boolean algebra is consistent with common sense but if you need to process decisions involving many values that might be true or false according to complex rules, you need this branch of mathematics. The Rules RuleOne Line ExplanationAND 1 AND 1 gives 1. Any other input gives 0.NAND(NOT AND) 1 AND 1 gives 0. Any other input gives 1.OR 0 OR 0 gives 0. Any other input gives 1.NOR(NOT OR) 0 OR 0 gives 1. Any other input gives 0.XOREqual inputs give 0. Non equal inputs give 1.NOTInvert input bits. 0 becomes 1. 1 becomes 0.Computers work using LOGIC. Displaying graphics such as the mouse cursor involves the XOR (Exclusive OR) command. Addition makes use of AND and XOR. These and a few of the other uses of logic are described below. Truth Tables The one line descriptions of the rules above are clearer if shown in Truth Tables. These tables show the output for all possible input conditions.  Logic Gates Logic gates are the building blocks of microcomputers. Modern processors contain millions of gates. Each gate is built from a few transistors. The gates are used to store data, perform arithmetic and manipulate bits using the rules above. The XOR rule can be used to test bits for equality.  AND  Both inputs must be true for the output to be true. AND is used for addition and decision making. ----------- A B Output ----------- 0 0 0 0 1 0 1 0 0 1 1 1  OR  Both inputs must be false for the output to be false. OR is used in decision making. Both AND and OR are used for Bit Masking. Bit masking is used to pick individual bits out of a byte or to set particular bits in a byte. OR is used to set bits to one. AND is used to set bits to nought. AND is used to test if bits are one. OR is used to test if bits are nought. ----------- A B Output ----------- 0 0 0 0 1 1 1 0 1 1 1 1  XOR  If the bits in a graphical image are XORed with other bits a new image appears. If the XORing is repeated the image disappears again. This is how the mouse and text cursors get moved around the screen. XOR is combined with AND for use in addition. XOR detects if the inputs are equal or not. ----------- A B Output ----------- 0 0 0 0 1 1 1 0 1 1 1 0  NAND  NAND is really AND followed by NOT. Electronic circuits are commonly built from NAND gates (circuits). Computer programming languages and this simulator do not provide NAND. Use NOT AND instead. ----------- A B Output ----------- 0 0 1 0 1 1 1 0 1 1 1 0  NOR  NOR is really OR followed by NOT. Electronic circuits are commonly built from NOR gates (circuits). Computer programming languages and this simulator do not provide NOR. Use NOT OR instead. ----------- A B Output ----------- 0 0 1 0 1 0 1 0 0 1 1 0  NOT  NOT is used to invert bits or True/False values. All the rules above had two inputs and one output. NOT has a single input and output. ----------- A Output ----------- 0 1 1 0  The Half Adder Truth Table  The half adder does binary addition on two bits. The AND gate conputes the carry bit. The XOR gate computes the sum bit. 0 + 0 = 0, carry 0 0 + 1 = 1, carry 0 1 + 0 = 1, carry 0 1 + 1 = 0, carry 1 ------------------ A B SUM CARRY ------------------ 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1  Using the Editor  HYPERLINK \l "Contents" Contents Using the Editor Editing the source code in the simulator is similar to most word processors and text editors such as the Windows Notepad. Undo You can undo an editing error. When you have an accident and delete or mess up something by mistake, you can press Ctrl+Z to UNDO the last thing you did. This can be very useful. Cursor Movements Move the text cursor. For small movements, use the Arrow Keys, Home, End, Page Up and Page Down. You can use the mouse too. For larger movements, hold down the Ctrl key and use the Arrow Keys, Home, End, Page Up, and Page Down. You can use the mouse too. Deleting Delete previous character with the Backspace Key Delete next character with the Delete Key Highlighting To highlight a block of text and hold down the Shift key and use the Arrow Keys, Home, End, Page Up and Page Down. You can drag the mouse with the left button pressed to do this too. To highlight whole words, lines or documents, hold down Shift and Ctrl and then use the Arrow Keys, Home, End, Page Up and Page Down. Alternatively drag the mouse with the left button pressed. KeyExplanationCtrl+CCopy a highlighted block Ctrl+XCut a highlighted block Ctrl+VPaste text copied or cut earlierDeleteDelete a highlighted blockCtrl+SSave a fileAlt+F aSave a file with a new name Ctrl+OOpen a fileAlt+F xQuit  Virtual Peripherals  HYPERLINK \l "Contents" Contents Using the Peripheral Devices Keyboard Port 07 INT 03How to UseThis is one of the more complex devices. To make the keyboard visible, use OUT 07. Every time a key is pressed, a hardware interrupt, INT 03 is generated. By default, the CPU will ignore this interrupt. To process the interrupt, at the start of the program, use the STI command to set the interrupt flag (I) in the CPU status register (SR). Place an interrupt vector at RAM address 03. This should point to your interrupt handler code. The interrupt handler should use IN 07 to read the key press into the AL register. Once STI has set the (I) flag in the status register (SR), interrupts from the hardware timer will also be generated. These must be processed too. The hardware timer generates INT 02. To process this interrupt, place an interrupt vector at RAM location 02. This should point to the timer interrupt handler code. The timer code can be as simple as IRET. This will cause an interrupt return without doing any other processing. jmp start db 10 ; Hardware Timer Interrupt Vector db 20 ; Keyboard Interrupt Vector ; ===== Hardware Timer ======= org 10 nop ; Do something useful here nop nop nop nop iret ; ============================ ; ===== Keyboard Handler ===== org 20 CLI ; Prevent re-entrant use push al pushf in 07 nop ; Process the key press here nop nop nop nop popf pop al STI iret ; ============================ ; ===== Idle Loop ============ start: STI ; Set (I) flag out 07 ; Make keyboard visible idle: nop ; Do something useful here nop nop nop nop jmp idle ; ============================ end ; ============================ Visual Display Unit Memory MappedHow to UseThe Visual Display Unit (VDU) is memory mapped. This means that RAM locations correspond to positions on the screen. RAM location C0 maps to the top left corner of the VDU. The screen has 16 columns and four rows mapped to RAM locations C0 to FF. When you write ASCII codes to these RAM locations, the corresponting text characters appear and the VDU is made visible. This device, when combined with a keyboard, is sometimes called a dumb terminal. It has no graphics capabilities. Here is a code snippet to write text to the screen. ; ===== Memory Mapped VDU ================================= MOV AL,41 ; ASCII code of 'A' MOV [C0],AL ; RAM location mapped to the ; top left corner of the VDU MOV AL,42 ; ASCII code of 'B' MOV [C1],AL ; RAM location mapped to the VDU MOV AL,43 ; ASCII code of 'C' MOV [C2],AL ; RAM location mapped to the VDU END ; ========================================================= Traffic Lights Port 01How to UseThe traffic lights are connected to Port 01. If a byte of data is sent to this port, wherever there is a one, the corresponding traffic light comes on. In the image on the left, the binary data is 01010101. If you look closely you can see that the lights that are on, correspond to the ones in the data byte. 01010101 is 55 hexadecimal. Hex' numbers are explained  HYPERLINK "240-hex-bin.htm" here. Here is a code snippet to control the lights. ; ======================================================== ; ===== 99Tlight.asm ===================================== ; ===== Traffic Lighte on Port 01 ======================== Start: MOV AL,55 ; 01010101 OUT 01 ; Send the data in AL to Port 01 ; (the traffic lights) MOV AL,AA ; 10101010 OUT 01 ; Send the data in AL to Port 01 ; (the traffic lights) JMP Start END ; ======================================================== Seven Segment Displays Port 02How to UseThe seven segments displays are connected to Port 02. If a byte of data is sent to this port, wherever there is a one, the corresponding segment comes on. The rightmost bit controls which of the two groups of segments is active. This is a simple example of mulitplexing. If the least significant bit (LSB) is zero, the left segments will be active. If the least significant bit (LSB) is one, the right segments will be active. Here is a code snippet. ; ====================================================== ; ===== 99sevseg.asm =================================== ; ===== Seven Segment Displays Port 02 ================= Start: MOV AL,FA ; 1111 1010 OUT 02 ; Send the data in AL to Port 02 MOV AL,0 ; 0000 0000 OUT 02 ; Send the data in AL to Port 02 MOV AL,FB ; 1111 1011 OUT 02 ; Send the data in AL to Port 02 MOV AL,1 ; 0000 0001 OUT 02 ; Send the data in AL to Port 02 JMP Start END ; ====================================================== Heater and Thermostat Port 03How to UseThe heater and thermostat system is connected to Port 03. Send 00 to port 3 to turn the heater off. Send 80 to port 03 to turn the heater on. Input from port 03 to test the thermostat state. The code snippet below is an incomplete solution to control the heater to keep the temperature steady at about 21 C. You can click the thermometer to set the temperature. This can save time when you are testing the system. ; ===== Heater and Thermostat on Port 03 ================= ; ===== 99Heater.asm ===================================== ; ===== Heater and Thermostat on Port 03 ================= MOV AL,0 ; Code to turn the heater off OUT 03 ; Send code to the heater IN 03 ; Input from Port 03 AND AL,1 ; Mask off left seven bits JZ Cold ; If the result is zero, turn the ; heater on HALT ; Quit Cold: MOV AL,80 ; Code to turn the heater on OUT 03 ; Send code to the heater END ; ========================================================== Snake and Maze Port 04How to UseThe left four bits control the direction of the snake. 80Up 40Down 20Left 10Right The right four bits control the distance moved. For example, 4F means Down 15. 4 means down. F means 15. This program is rather wasteful of RAM. If you want to traverse the entire maze and go back to the strart, you will run out of RAM. A good learning task is to use a data table. This reduces the size of the program greatly. Also, it is good style to separate code and data. Here is a code sample - not using a data table. ; ================================================================ ; ===== 99snake.asm ====================================== ; ===== Snake and Maze =================================== Start: MOV AL,FF ; Special code to reset the snake. OUT 04 ; Send AL to port 04 to control the ; snake. MOV AL,4F ; 4 means DOWN. F means 15. OUT 04 ; Send 4F to the snake OUT 04 ; Send 4F to the snake OUT 04 ; Send 4F to the snake OUT 04 ; Send 4F to the snake JMP Start END ; ======================================================== Stepper Motor Port 05How to UseHere is a stepper motor. Normal motors run continuously and it is hard to control their movement. Stepper motors step through a precise angle when electromagnets are energised. Stepper motors are used for precise positional control in printers, plotters, robotic devices, disk drives and for any application where precise positional accuracy is required. The motor is controlled by energising the four magnets in turn. It is possible to make the motor move in half steps by energising single and pairs of magnets. If the magnets are energised in the wrong sequence, the motor complains by a bleep from the computer speaker. Here is a code snippet to control the motor. Note that it would be better coding style to use a data table. ; ================================ ; ===== 99Step.asm =============== ; ===== Stepper Motor ============ mov al,1 out 05 mov al,2 out 05 mov al,4 out 05 mov al,8 out 05 mov al,9 out 05 mov al,1 out 05 mov al,3 out 05 mov al,2 out 05 mov al,6 out 05 mov al,4 out 05 mov al,c out 05 mov al,8 out 05 mov al,9 out 05 mov al,1 out 05 end ; ================================ Lift/Elevator Port 06How to UseInput Signals Bits 8 and 7 are unused. Bit 6 is wired to the top call button. Bit 5 is wired to the bottom call button. If these buttons are clicked with the mouse, the corresponding bits come on. Bit 4 senses the lift and goes high when the lift cage reaches the bottom of the shaft. Bit 3 senses the lift and goes high when the lift cage reaches the top of the shaft. Outputs Bit 2 turns on the lift motor and the cage goes down. Bit 1 turns on the lift motor and the cage goes up. Ways To Destroy the Lift Turn on bits 1 and 2 at the same time. This causes the motor to go up and down simulatneously! Crash the lift into the bottom of the shaft. Crash the lift into the top of the shaft. Run the simulation too slowly. Even if the code is logically correct, the lift crashes into the end of the shaft before the program has time to switch off the motor.  Hardware Timer INT 02How to UseThe hardware timer generates INT 02 at regular time intervals. The time interval can be changed using the Configuration tab as shown in the image. The CPU will ignore INT 02 unless the (I) flag in the status register (SR) is set. Use STI to set the (I) flag. Use CLI to clear the (I) flag. The code sample below processes INT 02 but does nothing useful. If the CPU clock is too slow, a new INT 02 can occur before the previous one has been handled. This is not necessarily a problem as long as the CPU eventually catches up. To allow this to work, it is essential that the interrupt handler saves and restores any registers it uses. Use PUSH and PUSF to save registers. Use POPF and POP to restore registers. Remember to pop items in the reverse order that they were pushed. Code like this is "re-entrant". If the CPU is too slow and does not catch up, the stack will gradually grow and eat up all the available RAM. Eventually the stack will overwrite the program causing a crash. It is a useful learning exercise to slow the CPU clock and watch this happen. jmp start db 10 ; Hardware Timer Interrupt Vector ; ===== Hardware Timer ======= org 10 nop ; Do something useful here nop nop nop nop iret ; ============================ ; ===== Idle Loop ============ start: STI ; Set (I) flag idle: nop ; Do something useful here nop nop nop nop jmp idle ; ============================ end ; ============================ Numeric Keypad Port 08 INT 04How to UseThis is one of the more complex devices. To make the numeric keypad visible, use OUT 08. Every time a key is pressed, a hardware interrupt, INT 04 is generated. By default, the CPU will ignore this interrupt. To process the interrupt, at the start of the program, use the STI command to set the interrupt flag (I) in the CPU status register (SR). Place an interrupt vector at RAM address 04. This should point to your interrupt handler code. The interrupt handler should use IN 08 to read the key press into the AL register. Once STI has set the (I) flag in the status register (SR), interrupts from the hardware timer will also be generated. These must be processed too. The hardware timer generates INT 02. To process this interrupt, place an interrupt vector at RAM location 02. This should point to the timer interrupt handler code. The timer code can be as simple as IRET. This will cause an interrupt return without doing any other processing. jmp start db 10 ; Hardware Timer Interrupt Vector db 00 ; Keyboard Interrupt Vector (unused) db 20 ; Numeric Keypad Interrupt Vector ; ===== Hardware Timer ======= org 10 nop ; Do something useful here nop nop nop nop iret ; ============================ ; ===== Keyboard Handler ===== org 20 CLI ; Prevent re-entrant use push al pushf in 08 nop ; Process the key press here nop nop nop nop popf pop al STI iret ; ============================ ; ===== Idle Loop ============ start: STI ; Set (I) flag out 08 ; Make keypad visible idle: nop ; Do something useful here nop nop nop nop jmp idle ; ============================ end ; ============================ &'>?qrs  ()*ֿ߳oeR%jP5CJOJQJU\aJ5CJOJQJ\%j5CJOJQJU\aJ CJOJQJ 0JOJQJ%jh5CJOJQJU\aJj5CJOJQJU\aJ5CJOJQJ\aJ0JCJOJQJaJj_OJQJUjOJQJUCJaJOJQJCJOJQJaJjCJOJQJUaJ %&'$IfH$$If0 634a$If$If$IfyT `ZZZTT$If$If$$IfFm " 0(#6    34ab *6789TUVefghְ֝֊wlB*CJOJQJph%j}5CJOJQJU\aJ%j5CJOJQJU\aJ%j5CJOJQJU\aJ%j65CJOJQJU\aJ%j5CJOJQJU\aJ5CJOJQJ\aJ CJOJQJj5CJOJQJU\aJ 0JOJQJ(!STUuvw,-.?@ABXY۽۸ө۽۸Ӛ۽۸Ӌ۽۸|۽۸mj- 5OJQJU\j 5OJQJU\jW 5OJQJU\j5OJQJU\jo5OJQJU\OJQJ 0JOJQJj5OJQJU\5OJQJ\j5OJQJU\B*CJOJQJph0JB*CJOJQJph*YZghij   !"0123IJKXYZ[q߲ߣߔ߅j 5OJQJU\jD 5OJQJU\j 5OJQJU\jn 5OJQJU\j 5OJQJU\j 5OJQJU\5OJQJ\OJQJ 0JOJQJj5OJQJU\0qrs      ( ) * + C D E [ \ ] ^ { вУДyjC5OJQJU\5B* OJQJ\phj5OJQJU\jc5OJQJU\j 5OJQJU\j 5OJQJU\5OJQJ\OJQJ 0JOJQJj5OJQJU\j 5OJQJU\*{ | }    ( ) * + F G H S T U V m n o ~  вУДЅvjj5OJQJU\j5OJQJU\j5OJQJU\j5OJQJU\j5OJQJU\j+5OJQJU\5OJQJ\OJQJ 0JOJQJj5OJQJU\j5OJQJU\. ' ( ) 1 2 3 4 56RSvwѭѭ̶̶̶̶̶̶̶j$CJOJQJUaJjOJQJUjOJQJUCJOJQJaJjRCJOJQJUaJCJaJ 0JOJQJj5OJQJU\5OJQJ\j5OJQJU\OJQJ7 e uxooo$If$$IfFm "rr0(#6    34ab  3 4 BH$$If0A634a$If$If$If`$$If"0(#634ab4 5 R W 7Lp&M[i & F & F *56ERSiltxj & F$If & F$If & F$If & F$If & F$IfH$$If0U N634a$If ivwp~phb & F $If & F $If & F $If & F $If & F $IfH$$If0U N634a & F$If  "x|$If$If & F$If & F$IfH$$If0U N634a & F$If '()b!*q(r((({+|+,,,,,,,,,,--- -91E13373999999999999;;0<޳ާޚގjaOJQJUjCJOJQJUaJjOJQJUj0CJOJQJUaJ 0JOJQJCJOJQJaJjOJQJUCJaJOJQJ 0JOJQJjOJQJUjOJQJU3')Go>bjyYs & FH$$If0Y634a$Ifs@!Z!!""$$%%''(q($If$Ifq(r(~((() *{+|++,,,,~ ~~T~||$If$Ifu$$IfK08 6(0634Kab ,,,- - --\---<.G.../}//04133H$$If0 634a$If$If$If33y334/6J8K8R89999999:P:::H$$If0634a$If$If$If:/<0<2<><e<f<g<<===a>k>*?7?@'@ AH$$If0J 634a$If$If$If0<1<2<><?<Y<Z<[<c<d<e<f<<<<<<<==BBGCHCOCPC"F%FGGGGGHHHHHH H@HAHHHHH0I3IIIIIII%J&JWJXJtJuJJjOJQJUjCJOJQJUaJ 0JOJQJ0JB*OJQJphCJaJ 0JOJQJj3OJQJUjOJQJUOJQJCJOJQJaJjԍCJOJQJUaJ< A$AVB^B3DDDEFiGGGGGGH H!HH^IH$$If0634a$If$If$If^IIJJKKkKmKKKKKKK%L&L'LbLcLdLLLLLLLMMMVMJJ KKKKK#K$K1K2K;KYSYaYtYY & F & FYYYYYYYYYZZZZ5\6\7\w\$IfH$$If0!634a$If$If$If h^hw\\\\]]*]j]k]n]]]]$Ifi$$IfK  0634Kab$If ]]]S^T^V^^^^___g_h_j__d\`$Ifu$$If0 (0634abT^U^^^^^^^^^^^^___K_P_g_h_i________``"`#`````aa aRaSaTaaab!bPbVbٿٲ٥٠نy٠j CJOJQJUaJjCJOJQJUaJj1CJOJQJUaJOJQJjCJOJQJUaJj2CJOJQJUaJjCJOJQJUaJjnCJOJQJUaJCJaJ0JCJOJQJaJCJOJQJaJjYCJOJQJUaJ/___```"`$`a y $$Ifa$$Ifu$$If0 (0634abaa aRaSaUaaaaab3bb, {yywnn & F $$Ifa$$Ifu$$If0 (0634ab VbbbdddFeGeHeSeeef"fpgqgrgggggggggg"h#hAhBhXhYhZhehfhthBiCi`iaiui甌}tjKOJQJUjJ5OJQJU\5OJQJ\j5OJQJU\jIOJQJUCJaJ 0JOJQJjIOJQJUjOJQJUj-FCJOJQJUaJ 0JOJQJj OJQJUOJQJ0JCJOJQJaJCJOJQJaJ(bdddFeHeefmffngpgrggggggH$$If05634a$If$If$If & Fg"h$h7hthhhhBiDiVii[j]jijjWkYktkkklVlnnn & F & F & F & Fuiviwiii[j\jsjtjjjjjjjWkXk~kkkkkkkknn'n(nnJnKnLnQpRpipjp~ppppppgqhqqޫޖށxj)POJQJUjOOJQJUj"OOJQJUjNOJQJUjNOJQJUjMOJQJUjMOJQJUCJOJQJaJjLOJQJUj LOJQJUOJQJ 0JOJQJjOJQJUjKOJQJU/nLnn=ooQpSp_pppgqiqqqrrrr?stuuu v8v & F & F & F & Fqqqqqqqqrrrrrrrrrruuvv)v*v+v6v7v8vzz{{0{1{2{={>{?{|^}_}~}}}շբy5OJQJ\j5OJQJU\jETOJQJUjSOJQJUj>SOJQJUjROJQJUj7ROJQJUjQOJQJUj0QOJQJUCJOJQJaJ 0JOJQJjPOJQJUOJQJjOJQJU+8vvw"yzz{?{|^}`}t}}~[ .U$If$If$If & F & F & F & F}}}}}}YZ ./IJKSTUV &(jo.1IJ<=@Iv~"$*+stϵجؠݬ؛ؔؔؔؔ؛؛؛ؔؔ؋ؔ؛؛ججݬj=vOJQJU 0JOJQJCJaJjuOJQJUjOJQJUjkrCJOJQJUaJjLUCJOJQJUaJCJOJQJaJOJQJ 0JOJQJj5OJQJU\jT5OJQJU\6UVWDd@ALW$IfH$$If0634aE|h I$If$Ifi$$IfK\  0634Kab IJN<=A@v*~~~~~~~$If$Ifu$$IfK0x6(0634Kab*+6E) ~~~~~||$If$Ifu$$IfK0x6(0634Kabґӑ]Ŕ~P./IJKSTUVnIJ^_`0JCJOJQJjCJOJQJUaJjOJQJUjCJOJQJUaJ0JCJOJQJaJ 0JOJQJj<OJQJUjOJQJUCJOJQJaJj݅CJOJQJUaJCJaJOJQJ6)|ґ;O G]^$IfH$$If0634a$If$If$If P|ŔƔFƕǕϕi$$IfK  0634Kab$If3:ߖ B`g͗[79>~$If~ۙPtĚ$If & F i$$IfK6(  0634Kab.UVWnopқٛ/d$IfH$$If0"634a$If$If*,lmxIJLX֟ܟi$$IfK?  0634Kab$Ifܟ^` !%&(*,.02469:PLFfFf $$IfK$a$$If$If  !$%&9:LM_`rstu%&()*LMghiqrst#$aq֭MY56PQRZ[\]uλλjOJQJUj1CJOJQJUaJ 0JOJQJ 0JOJQJjOJQJUjOJQJUj_CJOJQJUaJOJQJCJaJ0JCJOJQJCJOJQJaJ=:<>@BDFHJLMOQSUWY[]_`bdfhjlnLLFf;Ff)$IfK$nprstux٣ wuuoiiii$If$Ifu$$IfK0 %0634Kab$IfFfM$IfK$ )]f%&(*LsP~|vp$If$If$Ifu$$IfK06(0634Kab$If stuΦQqGL~Ҩ $IfH$$If0!634a 1`өة NTZժSӫ#$If#$?OZ!Bi$$IfKx!  0634KabBLv߱ ȳڳ5\]^H$$If0 634a$If$If$If^uvյֵ+,ABwx~13U$IfXȸع(INU^i$$IfKh"  0634Kab$If$7#7<2>RX/0345^_yz{no :;<DEFG\puннj4OJQJUjCJOJQJUaJjվOJQJU 0JOJQJjbOJQJUjOJQJUjCJOJQJUaJCJOJQJaJ 0JOJQJOJQJCJaJ<^&;7d$,Ϳ#$=Ywe/$If & F!/0135^caH$$If0\&634a$If$If$If>$$If(  634a $e SXY DEUn$Ifno,7 DP$Ifi$$IfKh"  0634KabFG\]4mA$IfH$$If0n 634a$If$IfAB&'Drs .Y^~'in$Ifn$%cCMi$$IfK   0634Kab$If{"9@ V] d$If$If=>XYZbcde} *+,4567Npq &  r־߹ѬѠ־ѹѓч־ѹ||0JCJOJQJaJj'OJQJUjK$CJOJQJUaJj#OJQJUjy CJOJQJUaJCJaJ 0JOJQJj OJQJUOJQJjOJQJU5CJ$OJQJ\CJOJQJaJjCJOJQJUaJ0def}~:{ IUV~$IfH$$If0('$A(634aFh.X| 9noBx$Ifx O|B $If j}(0~i$$IfK   0634Kabdj^jfj6$If$If$If678NO,[\c$IfH$$If0S!634a>n"LM67u(45x./p$IfpqoT^6?u|i$$IfK   0634Kab|&'hi<$IfH$$If0<"634a$If$If$If<CMW~CLMUV$If!"UVxyLA^$IfBas?klApqv$If < a b    S ^ _    B      O      $If  S     6Ir7gi & F"i$$IfK  0634Kab$If7Lijk:;"""##7#8#9#A#B#C#D#[#--8 8=8>8F8G8P8Q8R8`8a8{8ѾѾ皾Ѿj/CJOJQJUaJjN/0JOJQJUj0JOJQJUj+CJOJQJUaJ 0JOJQJCJaJ 0JOJQJj|+OJQJUjOJQJUj(CJOJQJUaJOJQJ0JCJOJQJaJCJOJQJaJ1ik<} *DO$IfH$$If0634a$If$If4b Jj6;|}<$If<QR :;u1HYi$$IfK  0634Kab$IfYm 3!I!"""#C#D#E#[#\###$8$$IfH$$If0634a$If$If8$9$p$$$$%E%F%M%|%%%%%%%&%&&&I&l&&&&&&&&&$If&*'4'c'''' ( (3(V(`(g((((())T)U)[))))))))&*a*$Ifa*** +D+E+++,=,?,|,,,:-y---$If--].q./0011m2c4y45E677N8i$$IfK"$  0634KabN8P8R8`8888888 $$Ifa$H$$If0N634a$If$If$If {8|8}88888888888888888899#9$9%9(9)9192939>9?9G9H9I9T9U9e9f9g9u9v9~9999999999999999999999999999:: ::: :!:(:):CJOJQJaJ0JCJOJQJaJCJaJOJQJ 0JOJQJjOJQJUj 3OJQJUN88888888`WQWQWQ$If $$Ifa$$$IfFW |u 06    34ab 888886-'-$If $$Ifa$$$IfֈW |u;0634ab88888'$$IfֈW |u0634ab $$Ifa$$If89999!9#9$If $$Ifa$#9$9&9(9*968-'-$If $$Ifa$$$IfֈW |u0634ab*9,9/91929'X$$IfֈW |u0634ab $$Ifa$$If2949>9@9B9E9G9$If $$Ifa$G9H9J9T9V96x-'-$If $$Ifa$$$IfֈW |u0634abV9`9c9e9f9'd$$IfֈW |u0634ab $$Ifa$$Iff9h9u9w9y9|9~9$If $$Ifa$~999996X-'-$If $$Ifa$$$IfֈW |u0634ab99999'@$$IfֈW |u0634ab $$Ifa$$If9999999$If $$Ifa$999996l-'-$If $$Ifa$$$IfֈW |u0634ab99999'`$$IfֈW |u0634ab $$Ifa$$If9999999$If $$Ifa$999996l-'-$If $$Ifa$$$IfֈW |u0634ab99999'l$$IfֈW |u0634ab $$Ifa$$If99:: : : :$If $$Ifa$ ::: :":6l-'-$If $$Ifa$$$IfֈW |u0634ab":$:&:(:):0|$$IfֈW |u0634ab$If):*:7:8:G:H:I:V:W:^:_:`:c:d:k:l:m:y:z:::::::::::::::::::::::;;;;;;(;);7;8;9;<;=;D;E;F;I;J;Q;R;T;U;V;b;c;};~;;;;;;o<̹ 0JOJQJj6OJQJUjOJQJUj3CJOJQJUaJOJQJCJaJCJOJQJaJ0JCJOJQJaJI):+:7:9:C:E:G:$If $$Ifa$G:H:J:V:X:6\-'-$If $$Ifa$$$IfֈW |u0634abX:Z:\:^:_:04$$IfֈW |u0634ab$If_:a:c:e:g:i:k:$If $$Ifa$k:l:n:y:{:6-'-$If $$Ifa$$$IfֈW |u0634ab{:::::0$$IfֈW |u0634ab$If:::::::$If $$Ifa$:::::6d-'-$If $$Ifa$$$IfֈW |u0634ab:::::0l$$IfֈW |u0634ab$If:::::::$If $$Ifa$:::::6x-'-$If $$Ifa$$$IfֈW |u0634ab:::::0d$$IfֈW |u0634ab$If:;;;;;;$If $$Ifa$;;;(;*;6-'-$If $$Ifa$$$IfֈW |u0634ab*;3;5;7;8;04$$IfֈW |u0634ab$If8;:;<;>;@;B;D;$If $$Ifa$D;E;G;I;K;64-'-$If $$Ifa$$$IfֈW |u0634abK;M;O;Q;R;T;0.$$IfֈW |u0634ab$IfT;V;b;;;;;@<o<u<x<<<<<<<< $$Ifa$H$$If0#634a$If$If$Ifo<t<u<w<x<~<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<====== = = ==============!="=$=%=(=5=8=9=<===@=A=C=H=J=O=P=R=CJaJCJOJQJaJ0JCJOJQJaJ[<<<<<<<<<<<<<<<<<<=== = ======$IfFfe7 $$Ifa$==="=%=)=+=-=/=1=3=5=9===A=D=F=H=K=M=O=P=S=V=X=Z=\=Ff-@$IfFf; $$Ifa$R=S=U=j=m=n=q=z={=}=~==================================================================================CJaJ0JCJOJQJaJCJOJQJaJ[\=^=`=b=d=f=h=j=n=r=t=v=x=z={=~=============FfC $$Ifa$$If============================FfKFfuG $$Ifa$=======================>>>>> >FfN $$Ifa$========================================>>>>>>>>> > > > > >>>>>>>>>>>>>>>>> >!>">#>$>%>&>'>(>)>*>+>,>->.>/>0>1>2>3>4>5>CJaJ0JCJOJQJaJCJOJQJaJ[ > >>>>>>>>>>!>#>%>'>)>+>->/>1>3>5>7>9>;>=>?>@>FfVFfaR $$Ifa$5>6>7>8>9>:>;><>=>>>?>@>C>D>F>G>H>I>J>K>L>M>N>O>P>Q>R>S>T>U>V>W>X>Y>Z>[>\>]>^>_>`>a>b>c>d>e>h>i>j>>>>>>>>-?.?/?0?3?L?M?N?O?R?h?i?j?k?n?~???????????????????OJQJCJaJCJOJQJaJ0JCJOJQJaJY@>D>G>I>K>M>O>Q>S>U>W>Y>[>]>_>a>c>e>i>j>>>>>>$IfFfY $$Ifa$>>>>-?.?0?4?L?ullfu|llf$If $$Ifa$$$IfF (06    34ab L?M?O?S?h?i?k?o?~????spjjdsXjjdsjj$If $$Ifa$$$IfhF (06    34ab  ????????????mtddmddmd $$Ifa$$$IfhF (06    34ab $If ??b@c@e@f@i@{@|@@@@@@AAAAAAAAAAAAAABBBzC{CCCCCoDpDxDYEZE^EEEEwFxF}FGGGGGGGHHHHI II5J6JCJJJJ̹5CJOJQJ\aJ 0JOJQJj`OJQJUjOJQJUjM]CJOJQJUaJOJQJCJaJCJOJQJaJ0JCJOJQJaJD??b@c@f@j@{@|@@@@@ddddd$$IfhF (06    34ab $If $$Ifa$ @@@AAAAAAAABH$$If0 634a$If$If$If BBBzC{CCCCCoDpDyDYEZE_EEX`t$Ifu$$If0 (0634abEEEwFxF~FGGGGGHHHHI,X$Ifu$$If0 (0634abI II5J6JDJJJJKKKLLLIL,$Ifu$$If0 (0634abJKKKLLLILJLOL8M9MIMMMMHNINMNNNN OOOOOOPPP1Q2Q>QQQQRRR\S]ScS T TTTTT-U.UAUUU V!W"W1WWWWWWWPXQXaXXXXXXXeYfYmYYYY&Z'Z@ZZZZn[o[{[-\.\5\D\0JCJOJQJaJCJaJCJOJQJaJ[ILJLPL8M9MJMMMMHNINNNNNN O$Ifu$$If0 (0634ab OOOOOOPPP1Q2Q?QQQQRH0 $Ifu$$If0 (0634abRRR\S]SdS T TTTTT-U.UBUUt $Ifu$$If0 (0634abUU V!W"W2WWWWWWWPXQXbXX8$Ifu$$If0 (0634abXXXXXXeYfYnYYYY&Z'ZAZZp<$Ifu$$If0 (0634abZZZn[o[|[-\.\6\D\E\T\\\\@]p\xx$Ifu$$If0 (0634abD\E\S\\\\@]A]J]]]]R^S^\^__'____{`|``aaa`babibjbvb~ccc`dadpddddddd effffgg+g,gAgggggggUhVh`hii iwixi{ijj jkkkkkHkIkRkll(lCJH*OJQJaJ5CJOJQJ\aJCJOJQJaJ0JCJOJQJaJCJaJR@]A]K]]]]R^S^]^__(____{`, $Ifu$$If0 (0634ab{`|``aaa`babwb~ccc`dadqddh,x$Ifu$$If0 (0634abdd effffgg+g,gBgggggD$Ifu$$If0 (0634abgggUhVhahii iwixi|ijj!jkh$Ifu$$If0 (0634abkkkHkIkSkll)lllmVmWmhmanDp,$Ifu$$If0 (0634ab(lllmVmWmgmanbnpnnnnoo'opppqqqqqqhrirrrgshsos1t2t9tttttttttt ucuduou&v'v2vvvvwwwwwwQxRxYxCyDyLyyyyyyz]z^zfz{{{{{{u|v|||||}}}&~'~*~0JCJOJQJaJCJaJCJOJQJaJ[anbnqnnnnoo(opppqqqq($Ifu$$If0 (0634abqqqhrirsrgshsps1t2t:ttttt(p$Ifu$$If0 (0634abttttttttttkdke$If$K$L$IfF8 06    34ab $IfK$ tt ucudupu&v'v3vvvvwwww D$Ifu$$If0 (0634abwwwQxRxZxCyDyMyyyyyyz]z$Ifu$$If0 (0634ab]z^zgz{{ {{{{u|v|||||}8$Ifu$$If0 (0634ab}}}&~'~+~DEMxx$Ifu$$If0 (0634ab*~DELEFN67A_`b̃̓σ -͈efuefpŠ78HMN_tuxSTZOJQJ5CJOJQJ\aJ0JCJOJQJaJCJaJCJOJQJaJPEFO67B8$Ifu$$If0 (0634ab_`c̃̓Ѓ l$Ifu$$If0 (0634ab.ΈefvefqÊ7D$Ifu$$If0 (0634ab78IMN`tuy(t$Ifu$$If0 (0634abST[<|v$If$If$Ifu$$If0 (0634ab ُڏۏv~ƒǒȒɒʒ˒̒ӒԒՒ֒גْؒøøøøøøøø0JCJOJQJaJCJaJ 0JOJQJj~dOJQJUjOJQJUOJQJCJOJQJaJjaCJOJQJUaJH clLYv $$Ifa$H$$If0f634a u4lllu4lllu4lll $$Ifa$$$IfF0| d06    34ab  ǒɒ˒̒Ԓْ֒ؒu4lllu4lllu4lll $$Ifa$$$IfF0| d06    34ab    u4lllu4lllu4lll $$Ifa$$$IfF0| d06    34ab       !"#$&'(/012456=>?@BCDKLMNPQRYZ[\^_`ghijlmn̓Г֓ړVWlpz{ 0JOJQJOJQJCJaJCJOJQJaJ0JCJOJQJaJT  "$'(025u4lllu8lllu8lll $$Ifa$$$IfF0| d06    34ab  56>@CDLNQRZ\_u8lllu8lllu8lll $$Ifa$$$IfF0| d06    34ab  _`hjmnpy̓u8lllujjhhhhh $$Ifa$$$IfF0| d06    34ab  MǔA:df$IfH$$If05634a$If$If$IfǔȔdefЖؖ $89:JRcxyzɗї'(*38EÞj+yCJOJQJUaJ0JCJOJQJaJjhCJOJQJUaJCJaJ 0JOJQJjPhOJQJUjOJQJUOJQJCJOJQJaJjdCJOJQJUaJ>ĖʖЖٖܖ $$Ifa$Ff_i$If>$$If$  634aܖޖ  "$9:<@HJSXFfn $$Ifa$Ffl$IfXZ\^acyz|ǗɗҗחFfs $$Ifa$FfEq$Ifחٗۗݗ'(*468FGIKMN>$$If$  634a$IfFfv$IfNPRSUY_enqsuwFfi| $$Ifa$Ffy$IfERSemǘݘޘ  01<AVWem™ʙ 67BGefqvȚɚʚ˚ %&4<RSai›כ؛OJQJjCJOJQJUaJ0JCJOJQJaJCJaJCJOJQJaJTȘ˘͘Ϙј٘ۘݘޘFf $$Ifa$Ff $If   !#%,.0137:<BEGIKRFf $$Ifa$FfO$IfRTVWY]cenqsuwFf5 $$Ifa$Ff$If™˙ΙЙҙԙޙFfy $$Ifa$Ff׎$If  6Ff$If 679=@BHC=====$If$$Ifֈe;Q $ <634aHefhloq=$$Ifֈe;Q $ <634a$Ifqw=$$Ifֈe;Q $ <634a$IfȚɚ˚=7$If$$Ifֈe;Q $ <634a$If   !#%&(,24=@ $$Ifa$FfY$If>$$If$  634a@BDFNPRSUY_ajmoqs{}Ff $$Ifa$Ff$IfÛƛțʛ̛ӛ՛כ؛ڛޛFf $$Ifa$Ff?$If؛34BJcdefŜ͜PQbj˝̝ΝΟϟڟ۟ܟ-.;@AF&+,15CJOJQJ\aJjCJOJQJUaJOJQJjiCJOJQJUaJCJaJ0JCJOJQJaJCJOJQJaJJ   "$&/1346:@BKNFf% $$Ifa$Ff$IfNPRT_acdf>$$If$  634a$IfFfǩ$IfÜŜΜC4=====$If$$Ifֈe;Q $ <634aΜ =4$$Ifֈe;Q $ <634a$IfPQSW`=P$$Ifֈe;Q $ <634a$If`bk˝=7$If$$Ifֈe;Q $ <634a$If˝̝Νϟ\W$$If0e$ 634a$If$If>$$If$  634a ϟ۟ܟޟ=H$$Ifֈe;Q $ <634a$If-.039=$$Ifֈe;Q $ <634a$If9;G=$$Ifֈe;Q $ <634a$If=$$Ifֈe;Q $ <634a$If$&2=$$Ifֈe;Q $ <634a$Ifrs`aclq~ܣݣ %~ "'DEPUuvj=CJOJQJUaJOJQJjCJOJQJUaJ5CJOJQJ\aJ0JCJOJQJaJCJOJQJaJCJaJJ$IfC=====$If$$Ifֈe;Q $ <634arsuy=$$Ifֈe;Q $ <634a$If=7$If$$Ifֈe;Q $ <634a$If`acmoq$\W$$If0e$ 634a$If$If>$$If$  634a CD=====$If$$Ifֈe;Q $ <634aܣݣߣ=$$Ifֈe;Q $ <634a$If=$$Ifֈe;Q $ <634a$If &~=$$Ifֈe;Q $ <634a$If=$$Ifֈe;Q $ <634a$If $If>$$If$  634a$If "(C=====$If$$Ifֈe;Q $ <634a(DEGKNP=$$Ifֈe;Q $ <634a$IfPVuvx~=$$Ifֈe;Q $ <634a$If=$$Ifֈe;Q $ <634a$Ifݥޥ=$$Ifֈe;Q $ <634a$Ifݥޥߥ   ()456ijצئڦ23UVUV)*+3456QRջղզղ 0JOJQJjpOJQJUjOJQJUjCJOJQJUaJjuCJOJQJUaJOJQJjٮCJOJQJUaJCJaJ0JCJOJQJaJCJOJQJaJ>   )5$If>$$If$  634a$If568;>@FC=====$If$$Ifֈe;Q $ <634aFijlpsu=$$Ifֈe;Q $ <634a$Ifu{צ=7$If$$Ifֈe;Q $ <634a$Ifצئڦ$If>$$If$  634a   C=====$If$$Ifֈe;Q $ <634a235:<>=$$Ifֈe;Q $ <634a$If>AUVX\^=$$Ifֈe;Q $ <634a$If^`c=$$Ifֈe;Q $ <634a$Ifç=$$Ifֈe;Q $ <634a$Ifçǧɧ˧Χ=X$$Ifֈe;Q $ <634a$If  U$IfUVX[ceqCp=====$If$$Ifֈe;Q $ <634aq=$$Ifֈe;Q $ <634a$IfȨ=;5$If$$Ifֈe;Q $ <634a$If567Q(7zΫ)/)m & F$ & F#H$$If0<634a$IfRopqک۩ܩ)*+,MNOabcdƪǪȪڪ۪ܪݪjOJQJUjOJQJUjtOJQJUjOJQJUjfOJQJUjOJQJUj`OJQJU 0JOJQJjOJQJUjOJQJUOJQJ6)խjT()?@AWXαϱ̺ͺκ",-23:;<?KNŻƻɻػڻPQTfi0JCJOJQJaJCJaJjDOJQJUjCJOJQJUaJjvOJQJU 0JOJQJjOJQJUjOJQJU 0JOJQJCJOJQJaJOJQJ<խ!j+TCWo[̲زO۳ & F$-Ÿѹ"-3;H$$If0634a$If$If$If;<KŻ`(ZZZ$If$$IfF+  ( 06    34ab ŻƻػPQf-_u,ooouDooouooo$If$$IfF+  (06    34ab  i-0_`cƽǽɽѽҽ   014^_b9:=hikĿſȿ$%([\_OJQJCJaJ0JCJOJQJaJCJOJQJaJY_`½Ľƽuooou|ooouooo$If$$IfF+  (06    34ab  ƽǽɽҽusjd$If $$Ifa$$$IfF+  (06    34ab  {rlll$If $$Ifa$$$If0\ 0634ab  #01E<666E$If $$Ifa$$$If\\  ````(0634ab15AJ^_c6$$If\\  ````(0634ab$If $$Ifa$cox?6 $$Ifa$$$If\\  ````(0634ab$Ifžξ?6 $$Ifa$$$If\\  ````(0634ab$Ifξ?6 $$Ifa$$$If\\  ````(0634ab$If &9:E<666E$If $$Ifa$$$If\\  ````(0634ab:>JShil6$$If\\  ````(0634ab$If $$Ifa$lx?6 $$Ifa$$$If\\  ````(0634ab$IfĿſɿҿؿ?6 $$Ifa$$$If\\  ````(0634ab$Ifؿ$?6 $$Ifa$$$If\\  ````(0634ab$If$%)28[\E<666E$If $$Ifa$$$If\\  ````(0634ab\`io6$$If\\  ````(0634ab$If $$Ifa$?=$$If\\  ````(0634ab$Ifl$$If0\ ``0634ab$If $$Ifa$ 569bcf-.0efiOP&'(:;YZ[stuv,@=A>Gru&KTð 0JOJQJ 0JOJQJjOJQJUjOJQJUj_CJOJQJUaJjOJQJUOJQJCJaJ0JCJOJQJaJCJOJQJaJB(56E<666E$If $$Ifa$$$If\\ " ````(0634ab6:FObcg6$$If\\ " ````(0634ab$If $$Ifa$gs|?6 $$Ifa$$$If\\ " ````(0634ab$If?6 $$Ifa$$$If\\ " ````(0634ab$If -?6 $$Ifa$$$If\\ " ````(0634ab$If-.1=FefE<666E$If $$Ifa$$$If\\ " ````(0634abfjv6$$If\\ " ````(0634ab$If $$Ifa$OQq$&(:uvwH$$If0634a$If$If$If,=>&"$If $$Ifa$ & F% \]~&'ps?Ccd"%59TW]^ EF ?BHICJaJCJOJQJaJ0JCJOJQJaJ 0JOJQJjOJQJUOJQJ 0JOJQJP{rlll$If $$Ifa$$$If0\ ( 0634ab&'El<666Et$If $$Ifa$$$If\\  ( ````(0634ab'+4:6$$If\\  ( ````(0634ab$If $$Ifa$?6 $$Ifa$$$If\\  ( ````(0634ab$Ifcdhtz?6 $$Ifa$$$If\\  ( ````(0634ab$Ifz]?6 $$Ifa$$$If\\  ( ````(0634ab$If]^ajpE<666E$If $$Ifa$$$If\\  ( ````(0634abEFJ6$$If\\  ( ````(0634ab$If $$Ifa$JSY?6 $$Ifa$$$If\\  ( ````(0634ab$IfHILV\? 6 $$Ifa$$$If\\  ( ````(0634ab$If\I?6 $$Ifa$$$If\\  ( ````(0634ab$If IJ!15Y\bc'(cd&'(@ABC&'VWDELM̹ 0JOJQJjOJQJUjOJQJUj9CJOJQJUaJOJQJ0JCJOJQJaJCJaJCJOJQJaJIIJNU[E4<666E0$If $$Ifa$$$If\\  ( ````(0634abbc6$$If\\  ( ````(0634ab$If $$Ifa$c'(.cdg|u$$If00634ab$IfB|v$If$Ifu$$If00634ab$IfBCDk$IfH$$If0634a&>88/8 $$Ifa$$If$$If\ ( (0634` ab&'9CFV>88/8 $$Ifa$$If$$If\ ( ````(0634` abVWgsw>,88/8 $$Ifa$$If$$If\ ( ````(0634` ab=77.7 $$Ifa$$If$$If4\ (` ````(0634` abD=77.7 $$Ifa$$If$$If4\ ( ````(0634` abDEFRV=|77.7 $$Ifa$$If$$If4\ (` ````(0634` abL=77.7 $$Ifa$$If$$If4\ ( ````(0634` abLMN_b=77.7 $$Ifa$$If$$If4\ (` ````(0634` ab =77.7 $$Ifa$$If$$If4\ ( ````(0634` ab=077.7 $$Ifa$$If$$If4\ (` ````(0634` ab   PQ λjCJOJQJUaJ0JCJOJQJaJ 0JOJQJjOJQJUjOJQJUjCJOJQJUaJjOJQJUOJQJCJaJCJOJQJaJ;=;;97;$$If4\ ( ````(0634` ab;MW'7?Hjry' $If$If$If 8&cc@H$$If0 (634a$IfH$$If0{634a PQH$$If0 (634a$If`pZZZ$If$$IfFv ( 06    34ab usqkkk$If$$IfFv (06    34ab `ZZZ$If$$IfF/  06    34ab usqkkk$If$$IfF/ 06    34ab `ZZZ$If$$IfF/ ( 06    34ab )ussmga$If$If$If$$IfF/ (06    34ab  '()* !"CD#:=]^_yz  %&'Z[]ǾǾǾپپپپ޾ޱޥǾǾǾپپپپjOJQJUjgCJOJQJUaJCJOJQJaJ0JCJOJQJaJ 0JOJQJCJaJOJQJ 0JOJQJjOJQJUjOJQJU?)*+S!$IfH$$If0634a!"*0`XZZZ$If$$IfF/ ( 06    34ab CDJMu0ooouXoooulooo$If$$IfF/ (06    34ab  ?t #1usqhhhhhhqsq & F&$$IfF/ (06    34ab  +;[]_y% H$$If0G634a$If$If$If &'/5Z$$IfF/ ( 06    34ab $If Zuhooou<oooudooo$If$$IfF/ (06    34ab  Z[]_yusmga$If$If$If$$IfF/ (06    34ab ]^_yz[deqr}~ABPTU`abd  ghjfgiøøøøøøøøøøjCJOJQJUaJ0JCJOJQJaJCJaJ 0JOJQJjOJQJUjOJQJUOJQJCJOJQJaJjACJOJQJUaJAY[er~$IfH$$If0634a~`ZZZ$If$$IfF/  06    34ab ABPUauoooumdo $$Ifa$$If$$IfF/ 06    34ab abe{rl$If $$Ifa$$$If0 0634ab  ghk{{|{{$If $$Ifa$u$$If00634abfgj{{{8 $$Ifa$u$$If00634ab$If567uH$$If0634a$If$If$If 3456u~MQ;<=GHbcdlmno~P012CD^޸ެޣޖjrtCJOJQJUaJjOJQJUjTOJQJUjCJOJQJUaJCJOJQJaJ0JCJOJQJaJCJaJOJQJ 0JOJQJjOJQJUjzOJQJU:`ZZZ$If$$IfFb ( 06    34ab uooouooouooo$If$$IfFb (06    34ab   uooouooouooo$If$$IfFb (06    34ab  &.3Mudoooumkkkkkk$If$$IfFb (06    34ab  M ,1Q9;=Gnop~H$$If0l 634a$If$If$If~7P.02Cjkl} $$Ifa$H$$If0634a$If$If$If ^_`hijk}~ UV-.uv  M N     % & m n     E F W X [ \ _ CJOJQJaJ0JCJOJQJaJCJaJOJQJ 0JOJQJjOJQJUjwOJQJUN}~ $If $$Ifa$i$$If'  0634ab FfDx $$Ifa$$If   %().127:;@CDIL Ff} $$Ifa$$IfLMRUV[^_dghmpqvyz Ff $$Ifa$$If  Ff$If $$Ifa$Ff[  !$%*-.367< Ff$If $$Ifa$<?@EHINQRWZ[`cdilmruv{~ Ffr$If $$Ifa$ Ffϝ$If $$Ifa$           ! & ) * /  Ff,$If $$Ifa$/ 2 3 8 ; < A D E J M N S V W \ _ ` e h i n q r w z {   Ff$If $$Ifa$                             Ff$If $$Ifa$                           "  FfC$If $$Ifa$" % & + . / 4 7 8 = @ A F I J O R S X [ \ a d e j m n   Ff$IfFf $$Ifa$n s v w |                         FfZ$If $$Ifa$                             Ff$If $$Ifa$     ! " ' * + 0 3 4 9 < = B E F W H $$Ifa$Ff$If $$Ifa$W X \ ` a e i j n r s w { |    $If $$Ifa$i$$If'  0634ab_ a d e h j m n q s v w z |                    / 0 w x     O P     '(opGH Qwxyj1OJQJUjOJQJUj.CJOJQJUaJOJQJCJaJ0JCJOJQJaJCJOJQJaJL                             Ffq $$Ifa$$If                          # &  Ff $$Ifa$$If& ' , / 0 5 8 9 > A B G J K P S T Y \ ] b e f k n o t w  Ff+ $$Ifa$$Ifw x }                           Ff$If $$Ifa$Ff                             FfB$If $$Ifa$    " # ( + , 1 4 5 : = > C F G L O P U X Y ^ a b g  Ff$If $$Ifa$g j k p s t y | }                     Ff$If $$Ifa$                          FfY$If $$Ifa$   $'(-0169:?BCHKLQTUZ Ff$If $$Ifa$Z]^cfglopuxy~ Ff $If $$Ifa$ Ffp$If $$Ifa$  #$),-256;>?DGH  Ff*$IfFf $$Ifa$HMPQVYZ_bchklqtuz}~ Ff$If $$Ifa$ Ff#$If $$Ifa$   #5RFfA)$If $$Ifa$/5QuwySH$$If0 634a$If$If$If   "#&'()@ADEFG^_bcde{|~./2345LMPQSTlmqCJaJOJQJjOJQJU 0JOJQJ[qrst!"#$:;=>?@WX[\]^uvyz{|   (),-. 0JOJQJOJQJjOJQJU\S/^#Iiw')=?e$If./FGJKLMefjklm  !$%&'>?BCDE\]`abcz{~ '(=>?@WXcj 3OJQJUjp2OJQJU 0JOJQJ 0JOJQJOJQJjOJQJURcd&')*ABMNuv}  ! # 1 2 H I l m !!"""""2"3">"@"M"N"j"k"""""$$$$$$$$$$$$$%%%%%%%%% & && 0JOJQJCJOJQJaJCJaJOJQJjOJQJUWL$If$Ifi$$If"  0(#634ab`ZZZ$If$$IfFy" 0(#6    34ab &'(Ouuoooummg$If$If$$IfFy"0(#6    34ab uvL$If$Ifi$$If"  0(#634ab`ZZZ$If$$IfF_r" 0(#6    34ab }~uooouiccccc$If$If$If$$IfF_r"0(#6    34ab  $ 1 $If`$$If"0(#634ab$If1 2 H I S ` l \$If$Ifi$$If"  0(#634abl m u { !!#!&!""A"M"uooouoooumg$If$If$$IfF@ "0(#6    34ab  M"N"j"k"u"""t$If$Ifi$$If"  0(#634ab""""""""$$$$uooouoooumg$If$If$$IfF@ "0(#6    34ab  $$$$%%%\$If$Ifi$$If"  0(#634ab%% %#%%% &&uoooumg$If$If$$IfF@ "0(#6    34ab &&#&$&.&;&G&L$If$Ifi$$If"  0(#634ab&&#&$&G&H&&&''I(J(K(b(d({(|((((((((())***)*+*B*C*N*P*]*^*p*q***********+ +++#+$+6+7+Z+[+++ , ,n,o,,,---------....>.?.!/"/#/:/.$Ifi$$If"  0(#634ab$If>.?.C.F.!/"/b/g/uoooumg$If$If$$IfF "0(#6    34ab >????@@@@@'@)@@@A@L@N@R@OJQJjOJQJUCJaJCJOJQJaJ 0JOJQJjCJOJQJUaJR6667777+7 $If$If$Ifi$$If"  0(#634ab+7,787>7?8@8I8O89999uPooouToooumg$If$If$$IfFR "0(#6    34ab  99:F:G:Q:^:j:$If$If$Ifi$$If"  0(#634abj:k:w:}:~;;;;<<==uPooouToooumg$If$If$$IfFK "0(#6    34ab  ==G======$If$If$Ifi$$If"  0(#634ab====>>>>@@O@R@uPooouToooumg$If$If$$IfFL "0(#6    34ab  R@S@@@@@@@$If$If$Ifi$$If"  0(#634abR@S@@@@@B BC CACBCKCLCTCUCVCmCoCCCCCCCDD(D)D3E4EJFKFlFmFvFwFFFFFFFFFFFF+G,GOGPGZH[HqIrIIIIIIIIIIIIIIIIIJ J,J-JJJJJ@KAKKjOJQJU 0JOJQJjCJOJQJUaJCJOJQJaJOJQJCJaJR@@ AAB BBBTCUCCCu,ooou0oooumg$If$If$$IfF "0(#6    34ab  CCCDDDD(D$If$If$Ifi$$If"  0(#634ab(D)D4D:D3E4EfCJOJQJaJCJaJOJQJ 0JOJQJjOJQJUWZZ [ [["[.[\$If$Ifi$$If"  0(#634ab.[/[7[=[|[}[[[[[[[9\u8ooou,ooouooo$If$$IfF4B "0(#6    34ab  9\:\?\B\\\]]]^4^uooou<i[[[[ & F'$If$If$If$$IfF4B "0(#6    34ab  4^Y^t^u^^^$If`$$If"0(#634ab & F'$If^^^^^^^\$If$Ifi$$If"  0(#634ab^^_ __`ZZZ$If$$IfF@g" 0(#6    34ab ____````uoooumg$If$If$$IfF@g"0(#6    34ab ````` aaL$If$Ifi$$If"  0(#634abaaa#aa`TZZZ$If$$IfF " 0(#6    34ab aaaa@bAbbbuXoooumg$If$If$$IfF "0(#6    34ab bbbbbbbL$If$Ifi$$If"  0(#634abbbbb5c`ZZZ$If$$IfFR " 0(#6    34ab 5c6c=cCcccccuoooumg$If$If$$IfFR "0(#6    34ab cc ddd%d1d\$If$Ifi$$If"  0(#634ab1d2d6d9dVdWd[d^d>f?f@ffuooouoooumm$If$$IfF@"0(#6    34ab  >f?fAfBfYf[frfsf~ffffffffff@gAgBgYg[grgsg~gggggggggg,h-hVhhhhhhhiii i!i)i*i+i,ijjjjjjjkkk=k>kAkkklkokkkkkkݹ0JCJOJQJaJj7OJQJUj3CJOJQJUaJCJOJQJaJ 0JOJQJjOJQJUOJQJCJaJIffffffffL$If$Ifi$$If"  0(#634ab$Ifffffff gg@gAggguooouoooumg$If$If$$IfFGH "0(#6    34ab  gggggggL$If$Ifi$$If"  0(#634abgggggggh,h-hVhWhuooouooouic$If$If$If$$IfF$,"0(#6    34ab  Whyhhhhhhhhi+i$If$If`$$If"0(#634ab$If$If +i,i-iOijjjj$IfH$$If0;634ajjjk{rl$If $$Ifa$$$If0' 0634abkk k=k>kBkkklkpkkkkkkk{{{{$If $$Ifa$u$$If0'0634abkkll}m~mnnnnolomorosop4q5q;qEFPQRSTj OCJOJQJUaJjx9CJOJQJUaJjcCJOJQJUaJCJOJQJaJ5CJOJQJ\aJ0JCJOJQJaJCJaJOJQJjOJQJUA||||}}}C i$$If (  0634ab$IfH$$If0634a}}}}р00i$$If (  0634ab$If`$$If (0634abрҀ݀)*IQrw|ˁӁ -27<ABH$IfHPU[z{ւ܂ :?^$If^_a$If`$$If (0634ab-Ml|pvpjjjjjjjjj$If$If$If$$If0 ( = 0A(34ab *+-/FQ}}$Ifs$$If0 ( =0A(34ab$IfQRTPƉ͉ &'| vpjjjjjjjjj$If$If$If$$If0> (k  0A(34ab ވ߈ΊϊъŽÎŎڎێÒĒΒϒВђҒ <#$%&jaCJOJQJUaJjĢCJOJQJUaJjCJOJQJUaJj"kCJOJQJUaJCJOJQJaJ5CJOJQJ\aJ0JCJOJQJaJCJaJ 0JOJQJjOJQJUOJQJ9'=fΊϊъ}}$Ifs$$If0> (k 0A(34ab$If Œ4mtˍ{uoiiiiiiiii$If$If$If$$If0? ( 0634ab ˍ 67MvwŽÎŎu$$If0? (0634ab$IfŎːAivpjjjjjjj$If$If$$If0> (k  0A(34ab$If ͑Dfhms$$If0> (k 0A(34ab$IfĒϒВҒ !.<lvpbbbbpp & F($If$If$$If0> (k  0A(34ab$If *e֕7VuŖ$If$If$$Ifs$$If0> (k 0A(34ab$%''Jm~{uooiiiiiiii$If$If$If$$If0? ( 0634ab &'$   !+,-.LR֟ܟ69rxӡסܡߡWҤӤդj7CJOJQJUaJjCJOJQJUaJ 0JOJQJjSCJOJQJUaJ5CJOJQJ\aJ0JCJOJQJaJCJaJOJQJCJOJQJaJBšӚ(9J[\au$$If0? (0634ab$If%[u ooooooo$If$$If0? ( 0634ab$If  6`  !,vtnn$Ifu$$If0? (0634ab$If & F)$If ,-/WXcգڣߣ{uuooooooooo$If$If$$If0 ( 0634ab ߣ.5JPqv{Ҥ$IfҤӤդ$Ifu$$If0 (0634abŨCDck{uuooooooooo$If$If$$If0` ( 0634ab RXܦŧ jnvwyCJaJ0JCJOJQJaJCJOJQJaJũƩ $GLQV[\bjouЪ$IfЪ$)3RWvwxyu$$If0` (0634ab$If,1h. A!S"S#S$S% _Ddd   C @A(..\help\005logo.PNGbGb 5H/+Dn{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB` DyK %http://www.softwareforeducation.com/yK Jhttp://www.softwareforeducation.com/mDyK Intro{DyK  ArchitectureqDyK InstalluDyK  UnInstallsDyK  RegisterkDyK FormiDyK FAQsDyK  HandbookDyK GettingStarted}DyK LearningTaskskDyK Ex01kDyK Ex99kDyK Ex02kDyK Ex03kDyK Ex04kDyK Ex05kDyK Ex06kDyK Ex07kDyK Ex08kDyK Ex09kDyK Ex10kDyK Ex11sDyK  ShortCutmDyK AsciisDyK  GlossaryoDyK BinHexyDyK  IsetSummary{DyK  IsetDetailedsDyK  ListFileoDyK NegNumuDyK  PopUpHelpmDyK TruthoDyK EditoryDyK  Peripherals_Ddd ! C @A(..\help\005logo.PNGbGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd " C @A(..\help\005logo.PNGbGb 5H/+hn{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents:kDd*0t K C PA8..\help\020architecture.PNGbrjʅ H 2ϓFNj:nFjʅ H 2ϓFPNG  IHDR isRGBgAMA a cHRMz&u0`:pQ< pHYs+iIDATx^}M'wyxBF 馛fe1EUYYYu$ڥ9"@ ; D"@ @ Dp D"@6Ad@ "@ D D" l :B D> Dm /&t"@ /y} "@  @^M( D#@^ D"@AdP"@ G)@ Dly6#D"@^yS"@mBAG Dק D" %ۄ"@x=yB~S;d·5b2ZISC^"@R&'qr=d$eנҜ&%  D":SqhT x0kuMLUTL"@vBEBLif.!4Q>1*'D"fꗄH%ZKHM޼ 8w"@x/5R;[Y] uϬQR=Ij "@x!xI 4UQ֕Iy L  0oHN[\Jj,h7W2>Jj "@ oC`"/y/ D"pr8 D"0 aPR D"pY "@ އL/V%g3vk|U РS`ޞ!~ Ur~nu?y4.Dmy"3C[,^6݉|e$;tn"p@A_rP/Hd>|Hv =&z%?~ oI%M)Y)9_®I}um8km `Eɾi={Ry &Ɖ컺RRru8q{}31s"x[ކ8iD JBEW>Y>l8BV Owz> @&&e !{7o*b3xi`!aY)H\%Y%23jl$;KY$&~}cp<ňQmK~yLRԙ &%4zHNQ#}KXGF?ga2E3BFt ޖ} K,0>Y! qW$N?m^M7F^5FlյϘhe /oopײH;W)˩qa闄^cj\:϶3;D>"6e=cd)O\t) b{e00o~9ofM=Yl <L 2w04w|PΓrh6 }@6a/dzbw^ 8wFl | h>E^4p.>Dؾx$4|4YQ7"^э+0+X"@E`\Y?^,^r<0s&o3gӵ[-;`޾*%K}ru)xw] >IjxDžԚ,^rn3C s= ICb^<%EֿP çż}xypsu-@&ʼn0oOZ% Ac! %5Cy ,, WRi#0 /A"5F*F ވFכ&/Y9WRi#0 /A"5F*F ވFכ&/Y9WRi#0KDx {fTS~.41)7f\u.۹n}./e;یLdzڟQTmf7G9J^Y¿oπ3ϼ=3n^%kQڟOy@WNnjS`*R$SxI튉x1<%ZƊ2l\ odW#J3Cx'!}R4s9DgKE/IC^LG Flns"/ɚ _7U?5M\]ۮ8 |I6MjOg:/ѽ@ Bx?j\؍L= j֩׌Zl d"} T 2w04͒Xȁ#~L>^֯!Ed!3?wsc,^pu!;ϑst[ rdiMc f D'Fgnzru1`Ò!]fvro>Ȕ/_>ˑft3##S*|F%SDǏ~ 8)fG muY /!5\.f 6CmyH@ BO#8Eɾi={R,^6JJ?"@~ +JBϿ+O,x6!+Mzd;A|^KyXIwk2 h(^H |hZH"ܞ"t$.丗]GitoVOUfKxAgU3W!M;#x[~Y,MLI*˗*nK"=zHV;ISۚ,^"PD ^f D -ҁU#40\XE,] $J.KJeRRrH%wGMf>o?*  % vm {4 pʼm’^yLd{JQgz0К!Wr(>&/Y؟|by'd [֕P§a}B?~Im3 gM- xIi0GCh"o!l57bW& ,p>-pk U;_ҢEvyCnEHֈ rBn4@d܆8YWfy<HN"2@MR{ꗼALGd\Fc R (n!$a8HN"2NR{%͞E`UCD>C;3K)PoD=D-N_/`Ƭ"2ݡC+ygy>au%K:cOy!%},z|XsD4Rџd/y:gq*tA":rQ!0(B2!*\]?!,MƘwNW`^ExIgE#^y9> D(0Ydj?O%FDǙ'F>3owȁD91VuruqOc<')9wȇ⪜q:)GlD&a"Dp(&"é,^ЇsY0:op(?obJ^C5Sj E]`.DִKD\]7N @É0ogG 鈓̎=V d.vjR"TUun93q|,"ocSp:sg <7voy;)Eo>>2Nx}+;`cP4bF ҹYG/ZpCV"pchz%´5F3jl}'ɓ9{*kV*\E.:5ܘ7^-C<<"5(|/I:'vHW\-h.򒚉SFYip5<nLM/s+]5/$;_2?Դu̍)~+ ʱc1 n4=Cj[sI8gt+j%Qx0gyi=)2~chJrXnLMŐ#pchz̋LBw>K!O SFԸnLM#Sf 7`K+1yn4=ϋD2?%cHC o)dxyI4ip٨RlnLMEY4UUgk' х? )GKIMj6#+l4s>rchXipe$nLM:) e.u)3G1ág1o4옞5FgňjnLMʄ!vM^2*L1o4}41 n4D8FC6Hp/x'2_/ D"n]+ּˏ^"#^oz OIz,4Zo ֘X<ێՑ}N(ݹ1_гru=;ώq~1;hbpU#ȇ֧'D!OE[D"@@GM_9h_+$FyiC?xzj3oO\W"`^ÏAy{7YKnň D7Px jer/glߞC@:`vf |+&/6pӘBȤ8LMf-)"D"@ %A r=d!]Of 3$g޺`qɸog/M#/o8Wku43v"[o+\?$/Ykix^` <1͙y% D­k%XX]#z]@fyۗ89@$#/I/CRd"[]Khc@f μ[7 7]Kn^\]ݫ=<3xb.3ofSKr+/quU꺊>'׆/b-v쭈ŎpzP"2#jXm\tv_%#$" MՆۥDdD-" K Dd:C"2ڢ݋\!2LOFGr&~I7t=Cd:l#jXm]JdF*2[@L"jXm!Wΐ$/jU'pLӈZD7=Vn%%[ftEdpc孈 y -$Cd:\A"2p$/!/y*@6DD-"MۍqK,I8DiD-" KI򒇭d3Ad:`A"2ڊv7&%x DpQjRaLX nzݝ y -$Cd:\A"2p$/!/y*@6DD-" pH$ nz6.%!EwŎpzP"2#jXm]Q\Kx@ QjRd3Ad:`A"2ښvqƐJ}c.5%(0$ nz6.%KK QjC"(QeIIY4eF!$"MՆۥ$y yV 2 jXm&51xIU\;Ҵ}NSlH!2 jXm]J%Kc$"4MՆۥ$y yV 2 jXm}$KI8DiD-" KI򒇭d3Ad:`A"2pH,pLӈZD7=Vn%%[ftEdpcv$/Y $ nz6.%KK Qj#I^4H!2N#jXm]J%Kc$"4MՆۥ$y yV 2 jXm}$KI8DiD-" KI򒇭d3Ad:`A"2pH,pLӈZD7=Vn%%[ftEdpcv$/Y $ nz6.%KK Qj#I^4H!2N#jXmy2#'!0oՌl&LWZD7=VnwI򒥱@pQjΓ3BLP8EhdQj#I^4H!2N#jXmy,WF;LV&Edpcv$/qIgjUН݈ԯ)ՈLZD7=VnwIG,~Y"*u0ESĐkdxMGs>!+[ R nz6>%X4yCb`k]t+>r]M$u {Hhg3ƷYiljƐ™ZgPs#.\oq.EڌGf앵rH}XACK 2iHǬu# T-Pd+ s7!e;v*7RՊѲY37(yI;E>8GQ$O:X\eRt8Edpcv$/qĂV :EKbzi]TOG%6IBCS%.{Ey8R nz6>%Xrn"iԲъK8;Qׂ^,.zTtXg<(io8a13PsM1R3VQT#2@"2pH8bA^B^j"(*#zav#yҬ6Y%Eϋ,8εkK;7Q% 2ݱpH8bq4- HoXnV3̴t_])^/#:Y5Ϩ n4Z_qUA+I5jصsQR7 nz6>%X\%ACYmv'?w1 Lq漤F8ЅJS"$)VC^jO 7 BjFPbƣ @"D""(uQ%ݰF ^R+.bSyI-lOĕkܨI BRF7bs65=Sj|Fn&-=.rubD%mE7읣bw.b.9Զю赶+n\Xh@7C%x74_1Nе)$11Nj8.)#S#/!/(pz]88 j]-$#IK+nѪѠxD^B^B^oRCX+FU %Cx.x魯AؾDSijk .~_ "qsc:d5Q3-8r:/ l*Vem5^b5BjM캌fvtFp c'ɖc￟?ߣ+>|'BdǏ僎_%~铌*&!i7yیхᶖ z])<$3*Ms liB58tJM:.t %JVd]R^`t  #b ,,%{0sٹCQi)P,fdKhRŚ'ŻFl|$|)sFTy?C*;#ǏJӌc _v{ado 1Pr 2gj]eltw҅^_]ɯ0%ī<"ƛ♰koD`FTy^&VşS\2J7ּ/QK|xx$^6F4[r妥߯@`FTyI0%V B>mu$#Q bՐf\K fE(LƳA*AGvc4eUx@5Z7yWg'b[ݢu($[#~KRFdY_H\KT4&ʆ4qP$f*A*M J\emjMcoG50EO\ɾ"aV|][aKRN:* 'i9%XBG␋ >j ,Ra*{(*u/ɬ_r4j|JJ»áE(؃dm^Oh IG4 y14ԖcL0$t;s_oޗ+Q-xYE . Nc IYCBS<p14^^=~orыFK 2U ?tY0y y 5JF\ҫ[~I6}@Do qktt6Tn3֜"do8U)5w%@otҩI^H Y,6]װ ?[4dLfE,xn{7B.%tT+gRɎ2( ث6M,56iGudK3\Mfű4i qeSb=8[Z-C^r1R# lBk_ Yű2Nx2蚷 XkgYq y/g4_>haJO\3L^\c^"ӔXHjliz.u5$)@^TJ2J2%͔+3/  ^<^5 A)ɌӚ/jafvW< 0$ē۾DE\n}3eQ@VEj TxWQU;^W5ž٭C_[6/䖔tEK4CDaICeR|@1]шf㬇JtTN{`?~jTcoϸY5, VzLώ䃷Eޑ-JaݷHBo"|6f/"R쾕ЌEyI:5tLv<qC'F8+rxvۧ9U{QxyCLQiG9Dd1RCmvd^lwdK(4~Q)@) WӞOtTߌ&Yh&d+b`IfۨZp~"clyIZ&XAM4\^R[5gd?TWO jDz#ŭ9j <KTl,J Q" 7Y7ss@ Q$<vK@+{I"(>$K2貽X/ ^IjnQh=. 3;0ovKEqAdz^jfЬ7MC},jlű 6G{38C3aS5?ʷIh0PPJ;EYt͗H4 x3j} R|D>{ ۰{;m2òRR~ƟH%.G3|!P Q\ WRTÏp4 x/17NDx8qn䀍eD^qoz]7 ]DWbWe ضU6e Y5To 8&iwgg6k \l%qa ,ŬUb(u yI'OμĞ;h6w m7,v)fLؤIOyMpSyجmtπ!%iԢ&p{gu=^Fw$cYi+=7%)҉-l۸!4](YеDiFTw$j5y$D{ i 򒻐n ^YFԊEBmEM^KyPm\,q/kSyIx".z /#x/j%M.jOcV(\|95xI[S+&R=8/kTK"v;NE]5沵r$݆\%$ 7n%ze Y&;+kg;cuo%%™'y#UQ%[E͵MJ-vhӚ*Mzqc_&tĵ܏rKoK >}ڷse;l"|/cb^->xMHh.*!/Hz0yA^bԵv(!K^P@^EZNڙ8|&J^򃘐DNms1#/qɵ8|&n^RqZ;fQ}%}-E^ܵ]4;q_.t%6`Qk1@v9t$v~_^o.-WPxJ̠\^) /.$%KarS%:Ns7di!@^rFr']%yx %t y#/"v<%]ۥC2Ky2p,RxʠteĒ_y1< /@!z\ڕ.nC-]F G2k':AYkKg%DdT$d!_*pTG^BV )yC-]F Q؝ؤDP%+{?ƝY]kH܈M Y)!/9"XּIJLDwń(I?qNM%w&/qCڵ9DEHIԕ9{HH6=yq"/qi /I[у?yI]ٸDa\` Q7 ʐUQse2lGvŏ~I߇)n0ѱ_wKR[W)L^Rݣ6m6j^"]_>;h /! MKX&C= %?UqαŴ0x i xIq 4 Y _7A^p`܎o]p 0E~ɼ3׿?SrP7b$.ߟ)?|>, 84$!/?F_O׏r' $Ę/n8ӧO#BPDm#mNa|I+)')%GDQeX jW4zV3KS|=_"XaYwa'2D7->GSmBUDY7l'Β%;Gvz89KZH@6D"._yt\H!ٕ#vrYڸ)RW QxC$^qi,/ ښa{U&5^ۜW制2??-FU*)Kzkn4@G&ʌR%qIKqV&M<}1wkjkr]nkL^BJ?hr.EQ#lwiun.F^yZGxmimHUxܸZ#?~^❭ASWQAvkD;Z4KK6ٷͧMʆ%(V&'ܼجp"Ð{5b#jܨȁfDф;[S5I/$ g  G\MkUv%v+K^]h7]8Wpg[(oMr&%I4֋hRAe 5 y/SU%p7d\s:zȵrM#E\8uFJj5HMZ#?#=r}a^P,y/ wF{֍^nbz2Y?,_wmv.paQCpF񯦹t1h5^"7XhԈ tCy$y#/qi2| Lj j \e[qCF~6\Qj.mSM.%v?Kx8´5/ik8w1!\X Wo ͺe_%bS_ZhԵ~I&е"|%Gĉ򀐒&/+q@['ݿ'?w'H'pEϢ%KvN!e>*|URk L[؅.bՖN5`ǣ1pݨFq%8V^v(~KZמ{ޔ$/)BԄ%M(bbue3 ¸;KKzӬ6\\E%[̅3fo8OSO:7㮎dM @%xΓ$/@8U&k9+[r7BdGiKMM*(3<14_ = G&^ܑ!ZD!/:y r;d/%)(EҷozrD"- w/5xF7KD~5LBp!i*|v@^C>4!)0}/^XRKj*R|Fޯꅥ= Mҕ##/9"%0-%  Ȅң5~.̲ͨ-bKމ O>iN_^0\!jOyIw ¸;Kc:b>SKj[>tmM垶: ^x՗'xIe"U (h+;dKӭ& ,I^stKz364 O *^D^D\P-rS9(?'~SJC![no8Z{d4#p$ya:M3K*iUIϵAwLz\)L^җ٨Mi຦*"`#@^Ȑ!$pdyI[v>_)FpKԅKKZK%^&zW{2M\]@ԅ;ܞyeV"=ܫFckD;j. "M(X?ϯ OfJ8^&g^ޘұŚTW:БuFa͉>(B @^zܑfԧI`hZxӄKFҕBސV K )ٵ`>j;K{~-^=k3>? 2pQh Qe2k$d]fm6{\{nYYD/dCwO^DؕBސx5C<[@~)X~iK~A$?| $~̲9"~$H^KRbgdzI&(r0ͶU iLmK7ɿ;z~>1lV'/q[l$6ĵ;mxџZW܍skN>PahY#_!j-Z%Gː8·[llr^^ָvs-'/j8-z@]^f2xKK9[K^N8m  oX\x×/_xSU<(|(E>ˑԇK'"}(Yk҄vQ6)^++w<y#e2?tx @uk)8a9 e.?|%U84dy%K/-%xu)ӛmS!2yIͨ+iq(K8߭L%/WTw#p8#v㉠65I I4p ;6U6/)憬>joH bҤ V9Vh8(_hG 9c ĥ00TKVe6v\ifҤy]5IfTf8Gk%zGy^h!E{jqnZ؁vvvo&p9 E:T mc?K,!( ٚ$,[Aօ}7D`āּIJshswe-c+Y횺ᆜ̅wǟ uklmkg{5#>05Gg7U%6u^e,JU!|H3?8ҵYiƉ~ !%%1G6 tPIaH5>#}fF8o &27pJڥ=dw?L(U4' cyIS&^":735vT>d[vMK^#ҐO}{ "h O蠉Bэ!$䪶L-^/"}&-Cv\F68!L$:Id7oR:YQ_T(-ѓ=k#3^t]/q ?ĴK?'-l}8Z*گxHҚ]nv3 4Ɂ&ͩ7jkFA?7 #1EHvl{6.zY4M-ۛt֞Ik4o'/q$"/%p:h O\Pn]Jϒ6Tev@~{MLdn4oţx0o83$q^"%~KD%q\'4HdhdK,c DcypXE][w2)Ԝ>1e!Eb!_]~B0]vVמJ|4}f K.膬 *!%Je%qNt/ !ѧ鍥ŗda$œ˹mJQ6yqR0 ! /q@4^1dbZw3.%bM$b~^HM3VG}]uԂ># !6Wp0)I&!@^v8/ kz2qZ8 ,g$Z>Gɘ FOԤxlt| *LJI8K:iNLcO$%s_G{ tzoyO W(/< RD` %0=L{>w[Fзz+f u-ϝMS[U_NJD` %0%%%޲3/ >ĿliڝTsL Qm8PYS⋤2uv@/:<ܔ$ /q@}/qL.^n^" jWCMO+`xEss™cCm$^!{_BFv0UI#/݉=]JA@<.^\8Ұ=!9K';4V<\;_∎8R pY gVC"o%) pX& ݖjj?WcN%%:=.^bR|OT![k[%4Z0}& `Oֵ5Wqhá-;W6 {x5~bHMk/,Û/ZsQRwԌ#0U2]*}((A}9z%qx|ACJL!^&eq,+4QRpS+ڍD>}x&:\^I/ ,A)mLsY=?^0zwSHv4AmYt̕-԰N^mhv4b^"/^{N}xG6hnjQ`Z/R9+|KGŃpEУ"."8"Emk ڤPýAd*T(jU-;;s*u2k;[P3k'sZϋMԍ+%d|,xćk_wQ~aNC@4X'Kb\i"B[vYN_ϴfuz'[qfe*+w4OSg"#fO^h_sNIob<]žBV<8_WEx`ߦٹV(N /ǎ#߆M,X`K&7FKD͕kw7KvU[qS57ėWv8kRw\ KuWz<.Kz8KRNh+ صK 'Exae x6v@d(Ї3p\F&#)MtҜ4ep1īWɜ /yY9 lr: iM*3r^!h @+CTu#=vY3AifA!tR WP2"r¬.E<_ß!*abQ(M(' pm>l?>xS\Dx^5jݝS9OJ XkjfWKp~x<á&ggy]\ 4iIaQ́M$%b֞fQ̪2"A?#؃ANk2~ISOšYMO} oZW59l$ f(\[A"0 */kVt)^SUĪ]/yXKx 8_j庠%M Zo͢!@)Ĺgi> qA>Û ۖ9QnZƍ'ȠX͆V^v Hd,?$݄`6ܜKd/ _ϟ?9bmk}=.%̩R1ºI+ 7)'ttBIerC4L\ 2ҕ |Hqqגz!eޘC4MB` A7H5j g^nTVD}-gytg8~ TTc=peKz=/1*^K)yIF'@STcsJ-V`ˉSMnGwݖo[.qKl$k0y yc8)/C6{Gm 4VC)5ρ!eOh49b0o4~ɍajj շȼ M舰 d%n^:~IOPؖѺwex`fqt%|W]fsI͕]݁aoy/ۅ1 -HcӗFi2[5|1ǩqaMH5H5D5\\ >NH٬Ql'eggcImB7# l3oSCbOR&\,4NJZE=}$1O"1SW_ %YjKğ"'"u7K2O~MzYe̷Vws/,6<)MA$ً/٨C?5io]DH KkQwF{mq ,I ^ROj`6fx nU!(LzLI"puK.\;}26yI¥"Klvf| mPt5Z6x< ;fFዓTTc=pe̔$xIVSi5Rʏ%` DAaM DBR"9S17mN[yaq^(kw=@ zgͦ*'&xiI"0 sa;KOmӚZ<^+'W|έvM@=X6ak1AF@ Wq651hV&kJc == a OfJ} Rr1j™W!$f=y6YyI5Lw7ŖYwxK^BBlBC; >Kp7"@^B^B^ƕ9Ed-޴v2ƽ/&'tYpa0{#jUНݍ뎦߆y"#zzqe#ؿl88 /qF#]нxs /Y8흋ŕ˖Kbe^;>̟>C^d6> r lQj!G#'D "P%i(H e]C:aql8&{mwmӡq(KjDz sdg?VQ6 ɘ"oΤVKH7xIU] n>2,WF;,Czx ^,yn\Iӎ5 y!zҪlwiYS$%jl4C\Ebr%m >^RuWDUB^^"^5ޓ>5$&b^OjT zadPe:*"`#0hPs?'"Raso< %5z^58e}~IeMf MQGA 9C#Ec3t&!]ӏ X\W܍3̔$N>;nQ]KcH$7L,,~ jqQjS+> ا)ϖ ЭOfJj<~,Oil^JqƓD"%%Ed[]ԉ?x_J^%5=ټd<ܳ~I$8\e8fE胈Q3Iz'%E焳׸1g{3ʗFM?t78.\w%`[hDq/TC,QblEөILR{ۤB ң謥JoF`^b oCs`Z늒5C/31} efWuex~Gͫs@u~d]2P8 8^u$")j͌Sx^bdV[,WF; M.藤L"W~LCM7FȤh6W&۝0 dUjtYK/)ڥ pd{/%q^5]3ĮtFO=dB%D  _[,OZ聶|t6EkXV5* %Ϛ3M2 ZaDOqRRM6P0C-̔${./BK"f\_/Ubj~TwBdhЗ(">@R)̔$ / _А녒FF"K6gȅD]DD BPKKKB9"ЋyI/r>g<y Y|roC6i8Xה@!ǭV:|.%ƎFrzɠ F{/FKe3ˠ=;5C2OmKbc-(^58_\;NpF-qrel޹,E8A%pM $,!@$%(E2CIHl믢~wbAMАF %&(5 u]Ñ PO14"KS{MVe)Rk"z4]|p+q8>.W](JJ ! nD`^|~lw.To=ʻ*jH{؜ oR!zỦK͉fDJ27) {}UY ^R'Lׄkt:a3X/KeMݾ{h_ɒz$+ ьl^j|id'Kܦ|dc+3e \S8_Y8K\X^l@uA9M4YAAW5l e-"Sh?SC@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd $ C @A(..\help\005logo.PNGbGb 5H/+Fn{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd % C @A(..\help\005logo.PNGbGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd & C @A(..\help\005logo.PNGbGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd ' C @A(..\help\005logo.PNGbGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd ( C @A(..\help\005logo.PNG bGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd ) C @A(..\help\005logo.PNG bGb 5H/+`n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsQDd$9b L C >A&..\help\080cpu.PNG bQhTu ̇qe8QĹ FhW+CĀCF(CI$$7471#&\DI~/E?F8Yj9>U/ D|+EC-v; k UG~6!ulT$`:S#Q/ 05P A 1&AbD Bj@"D ҆ \ 99C-ޅ#ӊ~Us`@J ĐrUn!OF '/,"tG@#qV9N+‡rAWD}?7"R mxyoV83#8q 2%HIeVK,D(ww$ ҆O^>m@ ZE&Q 6ry8m Q\{([HNHCޅQ iCAm+,>Qa=!_FKz$wCZ/l9!^ +!=-$)@ķ}Tzy;r 8}loo46R ^)X.HNN\'uBtDwdmIZA=ou^6ZpĕW;Y㰅{D z. 0e :G: v)( ҕ rNu w~Qd;eeqPSQ / r&/ zm&mN|$YW#LjWCJۑYvOȁvtBes>xCWʪqrU?- !!OX2ڴ#[ /^]D=ZZZZZ@--ZZd[|XʝE;ng5nѝpծ3?'>_/C ?ٕUT*qR(E?AAo1t?"h635 aJ)J=U~~$PnسQ3E-+?Vٴ31!ɓ FDA<~WA`CKj@*J)`)*R=TAĄ',})8deŚzȚ5~?"QLSvQTpeQnF"cD&ʪߖ;9^j:T`,6}^+U5Qߵ%F*5ViҤ">]⋈4ؕuΧnR阸J^OU@AY "w`6W2iָ}lZ η4?섹+d,.-۪FE;|5آ8;2 ۑqanFq{R`6}p n{5_fjh0Iy!5}Ĉv7g^&ył:y}I`^ƿhv |j˂,5?cV&]]qsȘveLL^0e 0͆`El*v~{e6AxīA>Jeǎ[| 38n@_@L}|||тzoE5s.x$u-g>[SX-iBĽowN (mC.q iD|sC 2d׵ IF͟ mAI''4!bJmd:6s^VNjYF[Zۺ =cOqœ *_1t7x>dʤ+F۩jIryYԓKLE3+Nv8SVmFaXm(Lek6Ԥ%hFߩg#"< KϬhAW*uWtC+7_G{*+Ԉ\rN?w\<Τ+,JYN􏢨Vo J>I+n?C+2WjҜRqM݇Q̣Q#Y|N[8ֿ%I&H>ܦWȊpX^!׷w!H>u"o9>řO\bl#ɸT"t7VaM?¤&FaۨjQe~dfjf&5{3MG#5dF<ꋴ<0 $#plՐ-y 3~bSEra,.gz'PގsV8O'>Z))/YQ%tXbZTHSssYYL5;vz".q2"ADG#25ԈNyV-Q3E#EW͉ؕ‰&fϳԑe3; x9g5TtQ|!IADRW+ʪ:¿B7"RtH OgiL4:kgJmk& vT }8Hy8x*J"R6:jH̺VJ# _yiOEA9LЍJIen^" ouF|>XϥM;ZLtZ݁VwT5F5S[ m(ɯ6ZMI2j:5c"}hyWJ<ӊ YGI+iSVA~8Zn'S:ĴY0xmK=)'FY'3`oh}6%X& O]31ZHt""d?}&UJ_|$GNERBHUS3}(0P/Z}++`:~&ZQw0uPy_Ww4d3QHIZ/O6|-GEPtPEm]{HAH =>joJޠ4Bf2"]YEd#Hv DV1y/ѪdǴ+:[;ɴct!X8ǘ[' m|Y-o680zHE}~#Q-# ^x%׶ GN L򲏫S{v aYtn!qPEK6sZ :ךLJ8+ќҀ ul ~cϣH4?Lxu5:1YBx y;gt;lAVƸ:oLݪ{7nxrQ{㦼'g54ovp߲hd\ic4w>jS?uqZu tBN~nnTgT;!r1b"Ocvy7O*6}Eg;1ǿ`ZwrUkg 2(^6#s[ї+=A^@n'KN"{?h%bҔRuEu$#tآL[KN"(:Z!pR:_QdnF2јȮ]-߇ mO\~>ňRŝQoWU^UɎi C ty>%#ji9hyh gdV _TQoK[/Qo[7*ltF W_rܘt':2JKEeM{/U[ju(BNW6sZ5E^q+*2J*Q@#D䴂̊ӽƬI_GcXMf;]]G;nzkĖkhJy cNlXY&[{_7i,X۴azs`jډc[hy7׏S0qЬf4e?\6K]EJ7 IEA9Լ~XV>*k`dIAڊ:-}~s^UɎ+:kZ 9_י3wgԟvχGuݦpj h/(؝ ^61>{5.>fF}anœ 6ڴ[mY:e禞+|cP{t:<pV_x%[Ew`: H/KKhsS]Oݽ-{g.OvyO.Im en JnEK}c] bl|+}hwY]pWʻk kVd׮\W0K6<4aAfÜLO9q'zuVb_y5xsooNқ/}[_}3mOu:$1<#J^JM@i7: ǭu5n\aݘº7*l\8bMõ-oסpVAPq 6| '|>=n.;|ϻb-'2oy7={ԩ_85گ ;1DbѲ g gEk.g%JoNauG1T&|bWz KG=rC_o{gw#w,#k~6c?F9G_^v:qoq֍{:.8ęԍ=I mۑi=Q FR r`߶>|y.9Uheq[M!ny`TG>sIH?$ @6huZՎVvUa*VvZ%ZCв Ԡ5(s47"%"%-$!5h9.ʣDŽ%X2sA3ϠgP8=yit_ M\0E)Gs}s}s+ B Vԅ`2@X'sa>=jk [* ZІrNqo̗Y)&&.8+B(Vb9Y@8Ă)xev1GmBwӞ~W(,28+A IDATC983g|ԹƤbCI#ge6n²=+Jq`CBILtiot#0q`W/E|A/Վ\ZF; hڞ_LYV;d6BtV;'YM[᮳Z֦ɓPgȞUyԶ S񐾳 ҆T5j &H&oyeB9qVZawP kz-S36%IZІrϠfK.Tzc*6SYMYMYMΊ!A $H8+$H AZ:YBYx2X OX`s@Y.Pc8k•j+N۷A$㙈lp!gM0mls`c 8ޏg@vBdXpV{. 1uVͬAq Nl:ukY3ބ Ngf𗫓]d'D6Κ0C M0)Ua2kj*w9΀ȦsYfhY ^ΊcY]mYY@˦s9k>D{t0 ٲ2JLKL'}ٲhBB%_ ]gMԒ-L.ٚjT Ôa Zܳ %iAtaWE!&k4߫ESµY܅%ZmOd mk 5Ke qlV,dd[ڳȈ a YD;/ɿjU1j6hS9+ 31,lTbMg.Y- (S(1-AWU%;K68kR SPgE+e"+'LXRVΚHJb\$[ѦXg!)j!g'[gp%Ke 9:YI oὄkk.Nt2Cuk#24)ܳ+faɮULY51m0IVp⛖-ɖ! Q3SFo˚lګBw`߳^ e{VaW5uV-=:0s#~WTYBͦ8>^cGM 8ЁZpVo߄=+x)c: 8ы1ЪgURx tٕއZpVo߄BgձU<2L|nVc-guEOqmsʬ c{0ӡx u*4hq&#e5,Sgu_q֞5Ȏgg5t(^3C:*uV9" jgmTg_88BDTqV'z Nlj$K L58ԩpVz mgD6"::+{)c#&8Fz Nl:Zpr09 -|P]xy(:dF )8d3 ;!7-sJlCAdVYMZMgU!L9 s*atI~dY=H˦sY]ġNfhYm+$UtVa ʝiwנ;kzΪvcq Nl:ǵo0E/Luh:?$&fF[VFoBB]_ѩie21¶l&ZMŮiNw`Vj0XPYVs֒YO5GgufۣfoXJ%6d38DiΚ0# M{2{V=+LugUgŐwV `F՛dt[Wg-%2KuD?\ g5݂^uV^9!V k]8U7д]2&\ &ΪYYNխsݲ(AWg>+lC =]' LdΚ ?`Md#ů;+8 K2 >kYK!P -:+#9—D 5mCٮ8l Ln8aD6R5NwoJJl8+tֲ80=+ ar{ 4qYeb6ġ:HBIMd#ůQg5'~{.*Ê*VY8IX'ΪoHILQfY uHpVo")~pVᶵd(8u*,;(=q-hS4E2)NAxtg {0ӡx}l7J'!_wB8H$4Mں8e[ cCKMI..koto.+^ $Uh/އZ5u9u}ΩM3)ع 3ULk;`xqKo,6kY%d5Pd]7KNkZv [6bKV~mkƒ[)Y<L*_]g1S3%l;ݡ;[2#Y- dy3BLRi 5h->d%!5LUY̔LkGeKVdU*Z(upku{:f׎AD~#mɺ_Yﶗͷd5zTE&>3UL_;q*Ȋ=['oʾvYZlSzMղNT$kZ'(ۣlŇeu-yVY̔L>q8fY d-YOdeX僗qwk`c-2uZBLfƙ yC1͝.5H=#IV! 7=kI=5L+߳K.;k@dmi=ġU&ͽL2Dvβ&虧Y k[l$er 'Y춗Z; xid6ZWVAֆY&k%Y֌{A< k[#k>~,2*mG/m5^@֌Y =+.Y‬ͷWA< k[LLᐷqCw[)!= UY-#S2d:elt`e" 5_Ym{݃,kDžKOdQCKGśD"ˇeF@wϪ*YKW)_l>B%w6YMU&]~qI2f 8&ʼn?cPF&‬~-UFV] Cj3{Vwȋ%E6,2H:9nYUX^;rf{V?"Gl&GNqɦ_U>Ѡ(=Hd՝- P9,!?ξaMVKF5m.zp [d'vϚIQNӺG¡ɪ즼-t{m ۽#{lzj; M3VΛ_ Y^9\jsavg-.Xd4ԑ'J +o=\-S>v$ꪲR2%R9Y KdSNl$2vq%գ<֯_tL[jY\P&yq@`'{7Rzlz!6UG.e@jH+H\Y72TSd91:_aQgǀY,Yu_Vw/aCJ!A+%Zi,Y%Y)!pJ"B\vݳFH mEUWi^vZ{aƚ3?ڐfyvCV: {"=@V/Y-.&kE=;k-&: Yb$_tC"Y\Ƨin{Ygdmud~i;Y-]]+f-ܳfߧYkq6ӯ;>YOzDvnګƚA4'+4!NdlFg'[au` =‚@6t}}-UM˩|^"ymVz*F~81ԅUnz\_/Բ辱f!16c31![FV#M:{VblƊL,I;ʃtmN'x*{.8QJ NVIeGe j<]>=& d&*_8!zkCV[Ik[r@2N;ߨZNf 2G65rd`9YWa:oUWsL τJtp8iW̝Mƾ;sɚbL ò+'kQ=nn+Q=bOz%׍m7U +\}tu[*R֬+cʪl$cB' +\¸g 427dd fP~rm|>XVzQǶhT=2m!͘A`N:lJFqlX3ݗˀh5Ӽi%m8mKem4i^6m6L26i^6m6L26:{b;֭oe])APz@Za4Yaa8AVai?; 0 ðyaaX֒?Y{AЃ9B{_<9׃yw~ua lO5 AyO<'G;{'nZ?N/|~?=Kk?7/NpY!(oowO/X]Z;qu}꣍6yahJ]O7:L/‰؁+"׸Mv:Y;/k?pZJuWubq = bqdUKRY/Jݶr=Mcccp$fY>rbqbAV. 7d.v׊(%:{vpvcڍmԇ|=uy~;r|;]~$LV8Pbdݻo{_}w^:d=82(CP@ 76^ 6cp;ni^0,V p+ BIk{:{|& :47Yu(\M:}mv˟nuC3]?uwdrqaCavԕu}:;_=ue[e*|ӭ.1JX6ŌL.z{Q U;p >/ &}D0 +vz־w'懏-o.Ovc]7:u_'.v CF&&w}P@:ޑ3+]t{,Ȉl$vԩSƞ조" 1#Lx(AY)Rz#gVj_pD BIk{ٗo>02!!v,GOv'd-z }96ٵpv7&.mͬ\v{ڑ|Iʱ+:ޱ+fVf=`6U0o8a}`zNw|nܺV~~;y^_|49d]C5F"O|D1㳫r(e|vuʽN7qh ǃ 0\AV(i1>ѩc'WgWe3Y{a %>,Ϯ8a5[/ 0 BIK WYn_3uFV +{άY UD0\AV(ide`bw/^빵/<-uum5p4P*0<1pY0 +v[?:rGGn] A"JZ +A5dw {~j APpY +AfȚ랟8G!KՊٗa?&|vujp%DV"?N_AR_h+]#d)}ReʒY 7 4k00)Ѧ#BFF@ViY$Kn|:'@WABFx4*;eMzY۝"Nh53Fs r_\$A\\OV>BuAiY_N4'K }e,ډyȚG=pJL_bXup]ˤ4G#+AWd]#`c d (R!+lvY! .5u=?5 d (@],YSwS@Vk A@V d APpPҪ§(f d APpPY! .JZ +ABI"dAsf~CtE(GmM1T?f*Us,`|JZZVlP hv޿!쓻A]h%l Rjt*N_fY2Y +D&kJG2xdY!(GVgi*_AU#ű8Z$KeY^@V(aF\OVݽYs{VnӼgm+ _y+ %֐6>Κn/ dV Vޘ]RmU~2Kp,DեZd 2b + %-YB\ +-r %-YB\ +@V+ u,/|$y9nGW.nu*Ǎ APp%A\'‚&Qf[olkme| +AMPrdn\8űi?SMy4s ^`lJǧ-*pd ()gթNdU> EV@V ddoCD{VW-RO&'Ct)H )`8#1[7b|:K:Y1ۺɑU>mzj BaEO=2dUn˽~ B +F%M 2Td1}(JXZfD[?{/Or_0d5_݈F&ΈytG,2M%XCB AmQNeE:JX +ABI d (@V(iWd%]ş٫P[l@V+ vn,<Y d (#vV'Y[*+Z@V d=kY! .dMZ +AY& APp%AV  APp%AV҉"C|"Hڧz ܳ76ET'})3)9w)GF#QSC518 +ﺑ%$_a eLaqAw,⚎w_Q*ѥTmlJZWu4-}I[nJe/CV_g#q&EVP +VKŒ%ADYPҢ[n/!V@]EHDSVUG%/.XB>\hL.uęz‬PB\ +@V d APpPY! .JZ +ABI d (@V(i %-YB\ +@V d APpPY! .JZo?|?'?,eQF+]m#I8*;*Rl垖Y臺 +EV6 "eX]X.l_qNI}V>fpѦ8}m{OE.>r(JXVWCC^BQid-YzF#h%ͼ(@fҗ*T/YuK_9`ɘt:a;HVOȚM#eʎ!k/Yvlݞ.ePҪ~NAl$+/N+_"ݼȍژ^m#AE&123YEMo Ɏ+qg]veRʼB]|]UY3rMKk $vpM]c_s'T"cpcRc] DN-bz6:XjB%@4&OPlOS7OB4]|5F >`WeR G4}]eYb젲}iEW9 JC$L<[8CtI)WPg ˘¯#+,̩=AW%g%)u-ıF*WJ8W<$k]d (;k^˺}^^  APp%j i!k댖wB\dm;Vu7W sսeUGh^D;Y! .W$U%J APpPY! .JZ +ABI d (@V(i %-3Ywg>Q$ſ?(⟯M>WE*+rpJ컊x> %XC,BPijK^n6Ԉ9Vi & 8 + "W[mwkY"ڪ\b*"2K/}ȵ՘dϣ5J!,|QCh,BގIV>BdƉ"+ߡtkN*'g)g)ۡYR?uL푛SIENDB`JDdYd M C @A(..\help\080step.PNG b C(}A.daQ[nnf C(}A.daQ[PNG  IHDR<sRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATXGc?ÐE @G|h5+f@!FM! /x%@ g# R'Tv4b4t4rCȕy^݁?@܍59z8[Ch8(B);(5M#'R|dDE83"Ac6 jT@oGQGӫ!:Bx!K(Pa)IENDB`WDdYb N C >A&..\help\080run.PNG bOge{4Va&C\8MsPѰZ &4?Yַ#㟪cf:1T`}͗ԗeY[*V.!w;nR_ ', NEieDj2~>ͿUꁕҗ 9a}%%#ɅIՒZ~ Zװ:9TfBR}jվc+ߗ0s3A%X,O܊b++OS$~LW"RNhڬ}ЎM>ax' CN费,Xm!(zd1|O@ 0-ـ2390m7䤮?o&K9 ̀@.a.IENDB`WDdYb V C >A&..\help\080run.PNGbOge{4VaA &..\help\080ram.PNGbs8:| )O8H nG8:| )PNG  IHDR,"?^sRGBgAMA a cHRMz&u0`:pQ< pHYs+7IDATx^yř˞93l`ffIhA[틪*Ui)I!@ ڄ̘`0ӦUhszzͼy***ryo8uRy#xEDfF~owOO^7ߖox_! @ _g_:u/.8S_}oÎ8ڲ.o<1.oH3^JxW@D@und8J/]mzATrQxr>gw]†c+ul@gl3t={QgϷ?߸?wHD^y9d..A麒vu+(^y2IXw@p$I~Qe'<MֽVeg.sϚqZ?Y9Z..?4nQtLݙ#r6^j h'@K%@Z\].SeG~lNQg#z?m Z,rm[Zާu4 $B 7%@J`ы_j7|GvC}7߷a{N'>v{؂ֱ\ / ]zseD%,| ~Ȏ{\`'hpa멆-V\{K^~eGyרrW5w^,w>7뾑M7$֬^E$a8b{qo`pv݁L̚;2o_?t-7/gWiOmÿWd MDҟtx#pᡞC\; hzԚ'y}ϣ^ܤ<':=] ě&hy @(DAoΈox&۶/S3jxf̣̒=okL}cz7:wC<G˻>g#O"B~xHTmr3Ozr6h4IND˧yf\&sM!Gˋj$@ x흫e*gEe:lkN7?>s[jyMc5\eg=_11sQ[8>~*)T|@S Ԫͧ$?'o<Ur孟8?~* ˴|Fg'薐[ZK[_:1ߙ'^"_䋿~>#rƌd|pd`56^IufN9{bV|}ɥ'v(Z~_䤱Sy[ML-+u3hsr%!X4O+h[qUn""sɀ5OOpL&7?I_d k{ "8e]}bǷen.>ܝy+sߺ{l_H Nő+8ZkT=H^-<9{ĹGsHy5V:3rcO-pby_䤩%8kryYҮnɹoOmT3N-5u\xLz2F֒CHK[YZC" hJgWlMʳzΤ+soG;ZokqƆor-k\c%"Zj%ğyyNˇ=P3CO͊-K:O-^wjIɥ.^rg٦ۜ=hdryN)^lLE̽-Ẇ_#8H' ,S?/[?.nˇ0spicKڏ=ھ{a䤥ﳦQuܥ=g[:rg9Z>Ժ#YG%S$?wrI=CNquu,ցHG1ӌql]bSGTq;γ{loF6|ԙX{ɱI+ d @ꇺWw_C /okxg⑾E&4pă7fd.X?qsč&o61%3kzi%h".I"z[wu|jX|mjv ?9chYcm/=ҺgaDZɹL=e)w\z^_?5uҺ^c<"9ͅ%pCck:+:)U"r^ڊ(6^E6w,˵ϓf{Yq2ke/3yV̂2ZL'74T r>)?Af ۘ$AmN7%݃-;w'r33pFV/o\#M{KNڶ rnُ]Ίˤq>o-}-=S7lkڎLpͥ/o;#Û47M.웼oR'" m%e KFڟn>Ҽtce-K^~qµ2;ev-ΐ#M!7#qtxqzF]¶AGb+;n7<.'3k9V$N8+͓:/O_n|bxB)ڄg~1&u rR]n2S>RLgfʹ2Ɗٕm_zD3!7~-wtM.|GM;uCS?A\ob&so%$6nnKF:v wnbuH˖M;yxqgIG%pZ.?ˤ\txŽ^Ψ @(3o~u͓{r띺oja=}SwMwޫ7m?mLI"nlڒ'жcm#[G7n9]uo=ixq]FrұG{Ger03r'2s@(+o~k7gtMܹauOKg[{&o醩]Iy伦ﭺ8oGokUQ{IS{ 66ouBƾᆍFVwlY2Xࢵ~fhVZ.o9._KOˏ\^J1捧7 *yY9. M`.zKu\pk[;.~7_+׶\am2oy+FoZMky(-{_;]Vw[ؚc7U/\|e;/o?_zxYAr"Oj72/ ˹r-+ !{d'+?pKɪO~?\?{5dVDv<{(kg^ӷіK,n߽coQSDwX({NEU:_(#e)a\HYҧZ6d˃5}/OsL*9e{NSFZүǚ EES_}h6ĒYSyhIjSSKtIʾML:sJ+D B@@˫R) rQTRX@yhyͻ @ ^djZ^.@pH'u"q_3nW3ɸ{\tnVqt2z]ڡKjVqtŪJ3_X#juP썣hDIR5-˜_VD U$TYZH$wf:,s]u&.~x@$gxlB@oܙ,w-7ۧ)1*C_Ed]eIW ix\?qǩϩ0-7;}Kkr,9 rB5FKQ{m cF-mb$cjB}p]}hCQ:Kw=v9%M%c1 *T#鍉>'dUTUbnR?9ct~x0*Ó@l7⁅jS}¤Dϱf^pVjfzzUzC{ܳ]Ͼ]c8Ą @ yhy@HZ$]҆ $O-O1 @I@˓K 3 @ IhytI ÝZUI7I]a*eUƐ0T Sg kNlTgϙejKvИ̳.jA51TZHF{.'Z$Z5vB^Ekm)P 3Q1JW΃TGS -i@i%Skn b8Ƹw yeLG*Tct+%Hlvep\PbvPSyo3EZGQ0- Pxi*{si})dzE9`65UTyڏ)ǮrlniQ<6H, @5/OWr v(W+WjFַUL!W]nSr3,Z@bx0 @J-J "W}@@ThyTbć @@ˣ#> @Dr:J~]BІyQ C"*&@{ouo]EmV|ıռv=juhyuc~!#g73hr#c}"z#â/Tϩ̵"V "i\0asϒIJh \Pj.R/ck1*z*hc-Ix9TCx<X jQ-[t>1{X *֑FtOh3W d. O82h/g HD@/a1V[>$ٷx  b@ˋM @@5@@ &Jz t ZѺkw6kM73X @ 2<22. @"垯rKo\}V,F% U}fT*>TY(Z[oϿUcy 9F{Uw-sw}J!.ǢTxГGQgnh&nbƳe-A[E"Tb4{BZ9HTDU<"fuk.պODgVX%c<s<'#Md@''  $ I%m@@c $´Z4vB^EtI^G=e܉1XQ -n'nt'P}xN;K1ZT2>z9B5F_繾B/W`/J˿sk\C :.cގ"U=;J+8~ĺZ)~uO}uśnODrc#iߵ#$ʊE%0 m??D\,|\(Xy8V|_3cϤtǧr_ΤiO܅5[ 'ǫ)7`s~5į={ldԐ4GL?w&yeH! P) r)~DHZ+Oj*S; B*  9/9uxU%)5W"ܸ|@y G! @ @+8 B@@r@@e@+*hHV!@ !h9Z@lhye_BC< "_% r&;wnE7/8S7M3@@;vç>ZwNt@@rv @E`@@?\PwIENDB`_Ddd * C @A(..\help\005logo.PNGbGb 5H/+qFn{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsDd'<P   3 3"((kDyK Ex01Dd'<P   3 3"((kDyK Ex02Dd'<P   3 3"((kDyK Ex03Dd'<P   3 3"((kDyK Ex04Dd'<P  3 3"((kDyK Ex05Dd'<P  3 3"((kDyK Ex06Dd'<P  3 3"((kDyK Ex07Dd'<P  3 3"((kDyK Ex08Dd'<P  3 3"(( kDyK Ex09Dd'<P  3 3"((!kDyK Ex10Dd'<P  3 3"(("kDyK Ex11Dd?f X C BA*..\help\090hanoi.PNG#be!dq^/>uAUn9!dq^/>uPNG  IHDRy3 sRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATx^v6E3oG7K@^hk~A  @  `#ڸ &PjA'X `Vr<'~~`)~sh 4q[gl12gt /ao[+bArgt / 4WX 7Y ξVd @: ?֦Tȭ@1Р"h\LLo-ͷE@OTܦډ'l\ m 8j11 xWI m.6մ 4jm$((hl1ߖڳ:)&P&Р:"h\LLL[.k넧@@֊LAr1226Nmخ=[be S[+2|L;blNx 4Nm$((hl1ߖڳ:)&P&Р:"h\LLL[.k넧@@֊LAr1226Nmخ=[be S[+2|L;blNx 4Nm$((hl1ߖڳ:)&P&Р:"h\LLL[.k넧@@֊LAr1226Nmخ=[:uÿOPm+M؜=cZ#T{Z-j9{F@1P"$~g(MO˙ TW)WZ tCT qb  *X[+bAr ++F@Oզډ'uUOV Z T eM5T@ ֊h\ J^hR ʫcT[>1j]u>$[+2oS-6g(Y_޶V@WxW DbOP^æ,ُ Th!Z 4V~j9{F@1P>WX 7Y ξVd @ T|DbOP^æ,ُ Th!Z 4V~j9{F@1P3 ^a1 Tƌ6^=$M% ݲF"kmc1PZZ"$OXj9{F@1P3 ^a1>k^E}m[6bs~{~gůV@g?kSm>;31)T۪zDbV@cŵgt /D+,7}KʫH߱@cæZlΞљ@@= 4WX ԫ"m-Oc @@֊h\?am@=W ^a1P^yꮡ}m:ybjfC&P&Рb"$U(ԑh6զBn0@be[ʧG@OTЦډ'::Ĭ"hl=T3:z֗1 x~+y_޷rlhSĂB0Njf֊LT3:zAtbɞ``ӘfzdMT r>Rhe[+r7&hЙB#Sɠ6&n8(hPyZ 4H.&P&+MO˙ TW)WZ tCT qmx)dm>(Q%M؜=c){ZܦZlΞ1P Գm7v&-Kt t%F6ᬵLLAkkE& @@ݽ:\1}igfSērfuwU[ekE&Jgt /D+,,zZg_[+2g||:mT&0r>dC[+2oS-6g(Y_|D+,g$W)@cugt&P&Pb eeꮡ}m:ybjfC&P&Рb"$OXj9{F@1P>WX Wx^ὺkh_[+2A^ئ4ِ 4m+|<u$~*M[?bAjkE& @@ݽ~1X,M @!Ц10 $`AikE x޽Lw+ OaS,\dkE& @@voli-:z6N<.g&P&P],_ekE&B mhSm(Q?_!pT%kkE t6f<[)3"\ m 8j11 &Dy{o/(MOyqbt}*[+2ƊoS-6g(%mkE 4H.^y+jlw<}`6p&н\uJ֊L^zU(TV@WW/:ˣ#`U_ԞVd-j9{F@1PAtbL?Wo@cgt&P&Pb eu!'7 "h6bsY_LAtbLC^uᾶVdҦZlΞљ@@= 4WX uܫ7֊LRT3:(g}1 2N{Z 4VJj9{Fge/& ^a1P&Prrsp_[+2JiS-6g'PT{43Հ,D5Ŧڳ9> TIIJ"\lT3:z ~%о6m /Fy`S<Teql=$OXj9{F7PA p bz @a*lA@! `FpG\$ @1P@F0P jwH+  `$^klA@! `FpG\$ @1P@F0P jwH+  `$^klA@! `FpG\$ @1P@F0P f! &06N@@MUb! 0P*jc0Pjjc0Pjjc0Pjjc0Pj@@>ؕue'|nL@O! tRv&)wΕDnx!z2?| TN١txYM-gVHzV'5J\Uȿu8#C`@K?*=JDyrz,?MGrԜ4ǡS[OuZU+K'W5%7ur|`h71W5@[+|$Z - H k #ld^aL?o-~i՘?UB@UϥACךU7n+V 4sѳ%`%  ~>7l }zC{eiVJMLћVeA2jc  @ߣ5'@e;@=0hI!0@x =ZsR@`1 t1PC}֜XL] @ߣ5'@e;@=0hI!0@x =ZsR@`1 t1PCo_7PnX d\?aY>M/e-1BZLNJ%9:al+^TYZ짦k0Y t6CI-k4`K0MKb/WYWY_,Or^(wT+'P;ڡT#߹0IfJ&UJݧez=VU/-grneU]Tį;ZGuR_xy+vѽ:_;d r̘VWz66,Z8H5LonmUڜ̤[U[W[B%\+%jԯn򷐕.)^)2B6/R:h+SU3вZirKHal醚lIz .!M pX}&NnXm'1jd-VnQZrzZWQKoUlkL%m9׭.IkƁYK>@UhdhF@G>_kri0]~t,=ҕUߔW-~5jۖ娚RnOMue]V}!(@eI(Rkveշ5PI-9͂rIU<ͧi;IFD)JBVa>eWBBev9Hw\//浧ӽl[MN8@?8 H Oh@l= H Oh@l5?Oe4y*%XBFrzUm[&O; ^y.ebˏ6Du*!j3e O_Οk~.4W PpCfLvKX"9O>ЇC-aE#/wSR ztܯQ{AHu¡agD7'cG"V'=c cdn>(#opW2PV.-JYih!X9PT ^YS*D9TA蚪ur@H3 nm> DK"_h[{˔v]KqXCG8'ҳʞ-Ub1ԡ4MVm\܆C.8P m;hlQ|OyC( hؔ-j\Wmѭ!тiijMY~?UwaW|z^~_Vw2JFNlV~1Йg&~Űaջ} mwʾ^tJk@S)ۅ;ݥ<7-4n ²]'1V)iNZ=Bi@YwY~ZIIڕ(Ԩ1z՛OSAxWzEk@'c8 0JGsy&|0НK`D[b3'"0PG}+0Pgl|. sd3 0CK\m9 Lo{IK6SNOfͪTuU'gH@< ~,%̟PzC's~2垓 >}~~]uy(d?Z<0Ix|2ޛn=\W-ۿMd̔[G~SqpHU^4JVj6qkx2h2/˯Qء4&gQ^;  UmΖeՓ=);g)tԌBpk*MCJ ڊ%HL(˲[2]*bvSK2C 6l XP.At*6ɌVSrЍu 0} @0a. kNIENDB`_Ddd + C @A(..\help\005logo.PNG$bGb 5H/+rn{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsDd<v Y C RA:..\help\100right-to-left.PNG%bHvf.KvnHvf.KPNG  IHDRQsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATx^]1ܸ@Ç|_sN:}|kI~~~=j (_|" @$#xA`Y2$"&{$fy$h|/jdZ6hVRd{ڮw:dOO7~"% "@2wN2\7XN2 M)%S(*yud>>O  67 @[Ʌ3Cm"L fߐ [PaWH=-d|a'WodVL2 =r٣E.s2Ǘd'3ɰӔCsO|(k(Ȅ5Q |2l ~"p GG!@2p@Lo03p^$ 3z;?h \&q@L"p4%RzpE2"ez#I\$.H \&MITk.Z4Z_z^ϯ$‘쪢F_B Ȱ-bH:d{ڮ"dOOs~aW N&Sz0Zc$1zc g5&ێ==cf`f`frf>a=kraHmdm7$fixa2|azk6,vd /OY D!@9xyX@"@2fxˤ0NK^2sކ3j)s9ތ *Sp9H;ZصWO{iaWt N}F B(20KAf Jʐ aUgs\18Hinp d6 w&́dhm]nY*ߌ )PS)=yB*9CpfĹ:wֶ{Lxh;y$!W.p ]{e:f?"e =fP/ 33_(qG"e De_D<%Q D "P m2 {ϟ=ϟ?0/)L$O>[uաbC gUS{ׯ_;i!,^ 9:NFc  C$ur _.qRq%1EÇ۷o!&Ϩr2i`2MCU5B S I_a4++-bYd,ׯ_Y-~YT@Fr9.WDH7ojΞQke--Uk]\XƷ.&rn4Vn 3#])awr%.͊Xhr.#Jlf%eY&U_#,c-^>hrP=.G4u=ޭ۝ZnS0TU"q..[) _<Fl(ԢD'.1UA38]Aȧ/cD H yy0LB!un,?Wn{,{tmg"Z~oC&ۋ2]o%n}KjeWD9BR#^k"=Y\+u0i0(٤w{baWt@jFԼ1dy v,]kG_ =a2Pb 3njj!.h=XWp*;M{A!0Z U][K+Uً`)R|+4|,o!k5:b 4e{wIQ$ky=c| :2}'&9'j[d hshP;vtMr&j>S{ 2hO☓A2<RSTppݵz%6 Dg d(K-Ę Ьu-PAlRƇsuqfqgm-ޓe8]\Y NS3(QWd äjXPO6Ul=h(3LI S гTYC%3C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd - C @A(..\help\005logo.PNG'bGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsDd0 z n Z C JA2..\help\120-02tlight.PNG(b|$?f|)6rōn|$?f|)6rPNG  IHDR+圓sRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATx^sG~Ǐ^'/Va?T*U[]?jlU*x]m ut B7,HBҹ 06l$@7He;&j}\S t|#=tPW\__'ٳ?}?]O}P>ϐBO?-㏏Q)ט?~K6KԷ]Znm١};!w|e'nW,M6M4@t&Vwv Jz'r*q4*BG&W Ҟj?BMz#wky7WŽ%_. ݢATQuFU|Tf_(](hSɯ}BۯDHi|>' 8\1(^0i[17IQ$ZQžOe]#1@A x=;j&bTN@y)JݤjE>Z\Z@7f1seb!O_&w# *>-tk^M`99 pl ,nic UJNuO%O&8Vz7V#pvD@5yroDN݉핇WxnVNmd pRڀ{/*E1Is8S+%z=Q?Lm0cd.-KDvVE'O:+R`/+lN8@$9 (jhĴ3ԭb'yatX/hЙMe.I_'yCXx=>IȎHVdvȎp>|H׋oD\!qoM]ޠxmd'ՀM޿KMmzk;uN2 iN=x>ƟHAΊ>)q v őK>/^2"pVHL73(%1 Խ~L*& )b#lNUtgE$ +Y1ZE ԁHIP*<h+X?{/7-j~I\t=U p[?Q"U?A ~R17nڠVpetddg9 xΐ3ݖT"WG9e&zqRnF@S'^q,^/?[Q;c.6*]YY>Zy E߹.F _vH,jIa)opl>` zU(wg>&-']GT&ɄmS=j'jd?-eygF>ʯErKÉa0CE4нLrɽ91z)yc^\y/ K.:" G£Ý ]/8pKbR<, ŠaxHObt|Z2=T޿ok|$򡖀?} #1 Jen{-N-Džl$Cm=$[޷AvRf>xW+9/NTMpsx!s&T$vsJc;K^-V0 7909ZAJ@FkY9B#'Odq`4CǙ&7$'3l8I8Gy5H5׍ObY4CbO$U6c]>BYg۳WFĊDy0FDi{5QnH'vIJOZؽ-oFi0Gq[m^6@ZZըؖէrG8 Lǃw: VVI)rS׏yy'ݐȎĢhg28w6hO`[t^bl$CZ|jGV\2 |+r+WXbÇݕ–xDHw$퉒dQTA=0S*oZwЮ7!EfQ3d =]Wͫ6ŊZb-fD~]":"7UY{vp<`s8ᆗjF7MNO\k0]+:`޺`$a$'3*!!>nh~N9~i% \~|~\c Tvw]Cwж[O3D8W@\ۧdc8U8W*|>%!p**VӬ8U8W-XmsUUm f!p**Omj#p pʭoN]Lȝi>a.r:FVA״zAU8W7`Wד3*2QQ&]PL_JALj40:cic ~r8ޤL GA|63O*UsqAzszYOg6Iy`6 ]Ӧ%\2^}`jʝl.vG +'8,S t}MtAڒ|Ļg|gզf4 ,ׁӕXK\ݓ;k)ӽ& |ȪxkX)pOOg3r(Uj:xH/ E8Wpi|:U ~ʯ6$p~Ym6ls[[L5̈&Ze aӦ\Ih !M@5J+ӳi.W6Z 9W dHELmZ 4c_gdXRyMG^2>[ޒ9ׁEA|2 JD8W0p4F K m 25 A<IJZp )c8? +CA8Whk&I!p**7:4̇+ٟƏD0_.AO PQ2BH^4Jj^_."L ym<%F2%l{0} F:qhJH4e>I NnXtR c{-B7j#Z^b}#d]8={X'\lR"pV$6~ &e9:}Ɩ @C8W@\ۢۡ9Z"dP> p pmpHu E=_*=(Rie9jJ'; p6a{Vnm.j9g8phpji#=@5pHu p8 $B|8:ZTR'6BC!p**7:p9|' Cls|p ĶF3 pN6a{VpC$C}!O}8W[+::}C)I`!p**wTW[(E8U8WF 86zmYv;Y=ɓ͇mL8zG YmdnE 3@p8z4_1G3Կ "-ԊgHۇTE?V UF_ty-^GU[8prCGM8[ˊ$á͊C NcWN4$Q$ƹ&i/靃C*-R*tICXڂ. =vծ'1;5jNfv2<Nm̢ʗ-٣1DPIVfKflz+uSm糢Aq´,#L Bi<J#ecTdML{nMݬ{>͹ibPk8FzU2{=).l-c*8 8slCbEIENDB`$K$L$If MEM bo06$$$$34ab$$K$L$If MEM bo06$$$$34ab$$K$L$If MEM bo06$$$$34ab$$K$L$If MEM bo06$$$$34ab$$K$L$If MEM bo06$$$$34ab$_Ddd . C @A(..\help\005logo.PNG)bGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd / C @A(..\help\005logo.PNG*bGb 5H/+un{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd 0 C @A(..\help\005logo.PNG+bGb 5H/+Gn{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsZDd. SSj [ C FA...\help\150-keybin.PNG,bBYhD4RqE[YnYhD4RqE[PNG  IHDRLqosRGBgAMA a cHRMz&u0`:pQ< pHYs+XnIDATx^y]ŝ@ϜSTt=uꙮ6.0# !B)@B!cXBRfJ`rľU $2%!{] _|#n"}ξ'';//{qw,<{Ɵ9P @(P |QWGV~\F}C_?Io]өry{SoyG/,[wSc}]={ȻgCP @(@})IaiΚӗ@E(ŕ1Z{k#옾ևZ-xYܙD։V=UtӽHP @( hUymUȑeًkݻn.Ef!ZÌEin#^HP @(#8eKPrjoH-ힹrۯ)?{)$"vNN"ҢĤŰE$&AG5Pah=-wGtoIQgW.+>4}Hi;-.)7oi;GQ"$YQ@XTtVkohxfUZ@*0]D?^EqV|O"秩Ki(o<=NSf7a;銎SK+bX"Q1x f-hXVF"hH9 TP{CϽQ)z99rWQzCϾD[tC-qJfd郻gA*Ƣ>b{xSޝ&Ly{heHWDX _Ia*͠)w&hpoP >ws';vYa W.lnez.igG– fv}{u[z2RTОٱi٣]sOG3o8m6NYBi&߲a|81m 6mw")oY mI?;J7=$5@Wh%&qR .؀(PyД fO+?eog1\gT{5󻯘sæ;zׯ{ôFhȦn^tgG׭kn~;1sVu^zwnzۆ ~kZ9]WFNPIѓthm];pRZPxf>PXж0}E~oX3vq\j뾴Ϧ;{܎\(Ji$\Et`gOz_f]]=ֵᮅv.c9u1kUGʍ8 o}GZvdv\ʠDL*FhEJb tՐ0JA((4ޜ'̻ߴ*?{se[7Z/}ьLM;Ol)K)LJ]ݻMWlt[$jEGʎw"W-0~q7?~FvTXScW%*N, b Z(ъ tUP @(^g0?mqRЊBV/.rՂ/3MpZSM>spȗ9駫C޴lݦeZzc)rՊ0opn\D?.X7fCν䉉fmF6VQX Z)t޾/8=U)*P_*:aDž6Jߥ~Y*ޥc:c3"<3oKu1Zp#Bէ,7?O%5ni!E(uy(ѥ"Qo80bV?zU]=ܔV!rC6VdJ`u[5,w]ǜ}%#T'$᧣v|z%+Q\l~Ce;ILq9 < 蝸pӲŅQ*EpzUMCΛi^[U1⃫+21MZH5ū6N$e c=>fDW OۦƮ-M9zLWg X{!U+wʠʼnC֒G+LC'-7Ӟ{D~:vnKW(s#ޢ1Aǀ%@'AbzI* `kef%3vzU2+_.hI(EVtutl+viC<ෘh^:jO'3U!'Wu..)ݱf?Q myHy!*$dx"XŅ\Yv[(!.[&@Ͼxy;\pͼmf\=æEPu(ցs#zǰhLSxJ1RuL}Mjj&-8aɆqQԊmnΆ1s3kq d)E[ .y*Ee*έ-OZe1hΖJ3_,H:Μu!xXwq;P [\YĒ/Kpc&t%xF3x7^Ve9uؘZsԓRpanRMCXD WK 7[ \FU[3{.ss5=gGu܉%bzW12U:%_vEg=85ѳ7\;kcʓ銶3C%“ᕉ+~|6xAJ˯M磁?8^!"qgP왾y4S>Oo~h?$,MKh_%K:v8gD'E?޺(d'q[l\#[FS\o|/@Q\ESJ$ڑ5F-"ۚ@AJeFfJTJӈΣtW.gjeMZ^=~};z܋.![x?!.j9z^b#$ٸߍ-%Mw?"2@ z%o.Y\sKajv-fϙ?kj)3#ΞQQĨDW8л?$"O6N^ٶ}=p x0jf?2jKG)PU/ 8+JII4[SH F9RF1ѕYlxKgݝ휽sֽDWhi 79cfw\Jiu֎iIDW֫ҳډݲЊS*Ne@+:ݺz%b,AWtkR>XH4D<>L+7?m>KZ6@KK"~Krc.6sWhn.eNҁPm!ਅfMͦCIdVB.+`H)5 {ƻ\)k GxdQs2+-.cfG  hŻzrVI(2T๗_ZZZXpu{.[Y[a9gNQ8}z'7#]ٍл6ddE3윽2Y+:ZUs;q]-kG9|*y2}Sw֫~}(pEDWo,h}pN2Jt@0S o~\%\\4D.[OE|_AF1BaS7.5c]l+hKIn߱!ͽ\A5O$y:d?5N2교]K Q&nYI,Mϸ>IݸVvs6F"٬bQ>`б>W11p@)aD&:Sz=G 3jԁkFfıQ gPxob~\{+ /( _h^a؜szϚ{zK3{O?ez(}vRDte7BFVm{xS{nj;:[Wt;jir?}u쮱n#f5| yBŀE~+ЊBP"v%@+X@)$(1l-M+z~)k閵O]aD&S‡{&Mnv]/ETA<'yO8quqXp#ց+E)Ȃ8Ǣ|* 1%:>'5܎FteD9ԓ *|=bDFFC^g}F(8ѱ~AVD$z]7,"kn9"-:rǖQB><([^9rK^;bQɉ_{zOwjk ?~_ FF{͢ޫ^;HDW]KF61}Yg˝]&tͼkҮ)75vF鏍b$dݔxU;WHtVXmwSb*Mk,|繷>{ѱ//[ DCp/`ͳ1✔x9 .˥c*GHWkp"'.$dg #uqXp#"T!C *`\褜E+IoJr-lDzF)Z|KC|aoJSjGF Mi:訢uwZERr[]Wtw|Rʷu?o:,,)*7-ti}[mK}dl(!,([^=rޟbA tusH҅.w1mՌM{O斗?fRhY?fƆ6Nj8iK:/阶8JSokIs7i\˦ӻ1jګ&ItLWVfSwU]?v-- (1]5`Bnu@()W {Κܖ}t^ZӲ얽g?e3<}є'M{ ;ƖWJtկ_I ֎v‚׎_4qs֍k[wc뺱-L_7zQfWNk\u8@WbW+]Qm:?` %:J3QM(P wn}a3qo:Sǿu7OiߦtMw~r~<w;?Icxuo=͵O嗯/piѿSlw#=k[z-+Q39SW^3垫's夕WN\q}o$/~Y]](EXPVDTŗrRj`(` H[ kP @R`CwhUNMo|<)}\J}|zw~6ZMW=I*'?|=ˣǮ}g0zhH<1,)z5F @(P B^ J1xJ~ЋDDĉR:)7͔o^=tEh8|۔'~RMWnOrqk(Q1ea u@>__JYEU h]qNq?"UT8 4x~_oKQV?xhH^=>٤6Y)W̐u@W#gbJCɏ^'ȀʋLT qkQ,>4).ѕ[9 @(PV2`7G+Bb1'Zܑ߾%Ƭ{EtrUҕ{P~7qteKWJ$RY1 )y@ϟ>g8c( t-ժuÀE6C0@BŢ+\qRJVP*dlE4 4yO"CM)0hLW"Xo'Ճ]sR)uY)Eۙ$*ñ~9eǝx4(U2H&x(VǮ9:iq}/vv< me 6"B40ˇޠS|ᄉk}<)]'t<v/m_E8QLo}oïI qݽߴϗ bܨt9e"?&ޒshhAaK7䷔ @J+ "Xgt/ccӕX8ȉKI"@>=D٠hZ08 +'On]$~N~~{#yC ^oj˯͝g_v<`G8gxtK/[~zE/g :zμ+rȬ/,|[H{>- ^rC64&OP.P1 h0]9J8|޴*@誈V6 /Ӑ˻8D E~q:#䍏>28cOW" e8? ǜ-U6[︿yN ?3r>%R.;;?Ȗ8r^ϗ< 1Q#9:7V1 0V?lh5OiWDW @rXLE;APt?KJ~пzdUZRRz" _:Чh-X8u]h}Z @Oc};R1u\XR:+"f1WGMtvVP U +P"*0Z bTvЃ-u]%#h!︓~w̕ DU$5c2^E8)slI6 FJq52wgHP`UHZXr"`,[(ӕgn0xDW3_dr׭/%8C[Ewzcv诎%-mK0eؾܕ@f;xOny[ct'X@ǜ8'EԌr8S1{ ?EmÌ  @(p9CEXU hVR`^%&-,q0yW;f(@\JtE{hYV`Atuo(|?wSj]|mǎ1_]6”F|IMmU ;U:.xu#':ΨЭۿ~B~el|AΠ.T=3RoM׾ m5>0@W|*ee++HϿ]y? l DZg~SYDW=]4/p-M@qepOG6Q?B+"w(t9o _^Oِ3[>DE;[G9qI3N|%ȷ]*98Fd GstV^6"USA8qXxKlG58 "̢8Twk1(-)o UU 7t·WI)B peT:XwB(+0n(bZR"[D]b%aJ_9PU *D7LativbjWFWDZ3ZJC+ e~tUz  41K?xKާ|ULWGI3FtE_+`EbPkBq?qRvPX/C<ꥥ'Įh}WJcWJ8ee2t(Tճ)tjNv]3hQX+"-Nnb Ts A+PZ ,}xvOjB)d%/ + &~!M@${K?v>dRHK{J AVi?YKǗתz{x:aSu?|bO~R?bhUX@W.WuAW8L^,ŮkyO:Qʝc)wS9 =pgį 42 H;6+~Y3+4ez6 k.]K08CD~wE6Yj8+P*@ 'de?323Ic] t,ӕwP R/eMSW+~\.ЦruB wG*跹Cj%v5y:\PyW N)Cm| g5x6ns6*+Qn`x*ŘRk&#]QqթHo͚VB(qxwL?lRdL * vlNW*`ɰM+%.h}f]5'uLP NUmĮaЗnRt5(vUҕuYz%?oiUw@QIӸk1nrh6t2+#OD|r-+Ah%;+2b kl֢s,Pg UkCu>'Y`g/WRU%NSmcW򾮲ҕqQnUUy+jm5Yqd6k Wpm]Ol-*!20]x"CHPJ8B/!֒ |U=.vxR ך汜vk=i2Tte5K8%9ٱЕcqPQI]ŠdI@W̵;| !W,k9Ak%e説sjʭpVWEeп]EI f29_; vU&Ѿ+󮲚``'s@WKZ&EW"$w%6~W( UlDѵvx zWx\<]O$5tUbt*nʽx=SZƢmq?r[kT8(ᆻ;ŝkcîQ83Yg*5fq/vUDekB?AW2]Q'M?nDkGoeb'!t`#`wҕa:av!$ဆƪX!up\C2?lj{% (agNq1eg,zޕ  }gF4%ܥ)8O |$W;˳i}lrǮ'*"줡+eg8ۜ Cf>ƌa$G#|ϾlKT^ i CY9$*i܁o{1qK]3>t0[[ëgnBt%OՎcD%/@*UK 4 WI.HyVLTn%eJo,,re?6[P'bW5ejwq ^cvt1^L4t grOlAw}7q~${{cʮC##2GFvX' uÌ,Е; zsVz`*:lyK6:rxOxeO)te[Äw*V+Z_3x֐N j]);9T ƨl#r@Nt6[KOĚz>rI87޲J@9{+ >`[S/xɍK*|$A +Vee0pEQұo;Ps`Ԫi>Q*)/r2mY+d7kXz% "q|8l!/-\ؐ$@yzռ v nMʓt:fd GC}7pbYA!ljŮB*yU1h]cIXYҕ#|d3|~EQd+dYtecA74E($7Z5pf&b.7A1NTT崅Ml:@tQq*j`9T`[G w%ޫF / JWt˃]x$%+佤aJG Cvb!EdP6tn$3F0$TF*_<>Im;&/9y1 T i:z1ZY;z'X椫(*=q&d)aBLi fӡjC.ѝ*A3%6hn/]@W21;]K#V>vGdjge0Y?۹ӆ {g>=<ֻCq~{t2W[$ęLOWJ7v/e: C]q?tX7TAyDnCt+Е{9[_vi#rxN/枸w>',Ap}8xd;zfղRRVF樑Wd[e{olz~*VV汫ڡ+ܣ61LOޱm5waۤWH1;jmS#V@6w\-wmnxU ^ŌنP@4 ewu?]2JQ _+`\h{"Cmҕ>Ћa]CJ2d"]=e+ EP0^6C.9UWt@Ȱ3dlADž>2VوtUA\(]FˌMWow,^g 6@KY3D/ѕqqV3: jnU!T;? V|R*v tU9&[0c BT*wB?]ʠ;BmƵ<>]پ$e('(,۱ ~[.߂ ]y[LL+~YTZ~b^rhrjvЍIۄ- ㊠@Xʺ[g ަtbuK8K@W8kg惪Jk4DR7!+6,lptʴ pp1Npg&t1wvnBUP@W>ʶ.z*vyЕܔ8^ߊIn)+ε3+TRGdPtZAWJ#0y◶pp #Xc͙9]Ut ykgng_oC*) KFB)@tAg>gGUp[ +7j D++ﴊ&e+K w7D9(n&7)-9v(@ 扵$O"Rk'mv='S$?J<}HYoKFS ]a^P +`m+5r &Z# uC~hąD*l7 ys ;P1e\?CC;#CuP~dIٍ]ܟm6D~8wJlBd&y5~NR)הnBu;鵐 ~էR}᭦32V 9`4|U_Զc򒝓!BT<_‰[#! rܿ\ .սtU]KoxʊҲÑ4޸̊3q&H^S M1};o:bW8 Ug7 XDƺOoBq7Av@WY5\e AU;AWr:bW/ru @W^޲p;B` ( @W@Ayzy`Pwgd~G~[q%FSHWbzш#[^R'QpF+_[Į ^@W]y;zdҕxS25 ]ɐ;AqÓ|iJ6ҝͭ^?+Ȑ^ 2~oNɴJY52({"`Q>mPĮdzctSj궣-|[@;|(%[]of+GZUņ&,(3rψPݜ6B*F? !5]50ZQHCWFz(ʠh]Eid@4,tYyN"ʱm*`1P8ۧsaȾ+@>{]m;/v-t%ϩQLwBeV`O,JАlp&\җDK8;ߕq8 zkEl{e4l2~^Uw𢎪JfYs}g̸לѕVT>;zLS'ÇXcK DvbWrWQ5}+kjѕBBgBWalXt尖 vU#̫@Qnצa38_;t jLLEF;q] XIZat~%.]ʞ*hǖL5-ۉk/bWŅ^@WxV{#(5AWw2'bC+vDt>^zV/:2X#=ī@#՚ZkFtlUܓ62.+:Qf k-nkbRbsAvBq͠ t ˽^ Ed]٢MNrk K̪2q&bWZ!g\@W]_y gYMۡꧬZJV @W!*!O2@WFP YU2]ѽ&7!y.oH;HRgղqMݮP^ W ևZi*JIQdUL 7õJyT* *nP(P ԩ+A(P K\tk!A(P RtP @(@ T3"3P @(А 4)]ENֈ램WuQ( @(Pw $+H8Q:R g=e2zeY[ƒN.B&m~z] i{+0ͩ83%Mg x9d^b FLڥ*e__ŅPb $+2F跫2w)B^Q&3MAWERD]R##Ȧn~eJlBs+%r oriǝ8j&rr+cH2m'_}h|{9V!<>;s`+ [*3}=wvԛ;B/ &7an#x\^ +oӘzԢgt.`'Fv8 =^=?Jl!w^;rzC(w)λAJ͕Ugkw~Xb0X dLWdtn[ w^Q+!sg* ^Bf/NHƺÄdt%+ nn}}1NkL+x5q'^kwҕ6S7v(NR!236b\%,…zG:o:坢Az9J'9۠"% '@Wdc\zf}ɨ r}ͫ[9+d1M1zdW5J̵zMIg3fk]lRYƶ9/nuERfk;i9]=X_exru@eWCWZAn,cpmG]^YIfn,2z~o(>!*غ֫lZw\Mۭa&seD-_{YRcThl3"[(FSs{^r_zek9[ku!dm*+65WP 4;]U@raX&lVn:9q}W1BUc$8P @(P-@W+(P d!A(P RtP @(@ T3"3P @(А Ġ+MGmHR& hm_x5@<?n#9t150Z@(@c+ltGj^q)7O >H`}I:f^l*}25aoq )~ܮ7ʚr(@*P!b*\+7sV8fZUiJiU'6 [7C`AFxʸ @(T Tx=c 8bN[!Mh+9`<MB( 4,!R"bHgM_֣϶dެ0@(]%WfZQztUk=@Pt-Мti6GAWh UI@,p5|UzbɅ^TgЕ+" MW2v$.&Dq5U\4ԷyQztU^@("r$ bcQe-+7+ʈ)M>x#\ɌE3 'Eh [e}Wj(T7we0Jst9o&Bc3)jE!}X\btl$UP 奫Q9b/T(Ru}mԣς2AW9* 6R<6V~ YJ%"+ !4r+Py]UolZף賭oPv]+HiܓI=j[>j( n#ͦv?ף3z> t\FMk~GmgU|CUrcWlP @(YF+&# A(MGAWYUc3Q (P +pP @(T (P @(Mg&?Oǿ2P @(+@UG\P @:R|Uw75]8慦Juԕ*P @Q?=rСn޽ž)uw@mCs&p @(@)tEh|B?>xH_1~Q|cQ?|tutU(! 0]?Z}GhU*FzwAW+P @(`UVWq*B);UH:݃%ﳓ!tP @(dhHh˿+r>|s 誾cW [P @ Ht8Z&wtς^1=Cgݚ k$P LW@*+Jkte]f tAf(q`"rRVJ`?3XI> @(@c(tED_8LviĮ\+ j;P @(W~AO^`bg\T]E_T6Z) @(@)tEO`@*N+^$Y]O.s']>w>?O믿_}ל(SǮjE!P @(P]@WlB(P K@WYY]RFP @(@-((]jP @(P&@W+jEU2B(@WICPJ JTrfUt}PL bӕGKy[2(B(UtؕO9tvwP ЕauUQP @(Pa@W+|gA(tū{ve뺲˱P @)JBWkXP @(] @(Y*RzgmP WtP @(@ T3=P @(P @WP @(RUj;k(P +P @(TtiP @zWtP @(@ TYC(]P @(,LOP Ի¤IENDB`_Ddd 1 C @A(..\help\005logo.PNG-bGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd 2 C @A(..\help\005logo.PNG.bGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd 3 C @A(..\help\005logo.PNG/bGb 5H/+ n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd 4 C @A(..\help\005logo.PNG0bGb 5H/+$n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd 5 C @A(..\help\005logo.PNG1bGb 5H/+a(n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd 6 C @A(..\help\005logo.PNG2bGb 5H/+3,n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd 7 C @A(..\help\005logo.PNG3bGb 5H/+0n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd 8 C @A(..\help\005logo.PNG4bGb 5H/+3n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contentsb$$If֐  7]Gm!#% (v\                 $ִ0HHHH34abHb$$If֐  7]Gm!#% (v\                 $ִ0HHHH34abH$$If֐  7]Gm!#% (v\                 0HHHH34abH$$If֐  7]Gm!#% (v\                 0HHHH34abH$$If֐  7]Gm!#% (v\                 0HHHH34abH$$If֐  7]Gm!#% (v\                 0HHHH34abH$$If֐  7]Gm!#% (v\                 0HHHH34abH$$If֐  7]Gm!#% (v\                 0HHHH34abH$$If֐  7]Gm!#% (v\                 0HHHH34abH$$If֐  7]Gm!#% (v\                 0HHHH34abH_Ddd 9 C @A(..\help\005logo.PNG5bGb 5H/+]n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd : C @A(..\help\005logo.PNG6bGb 5H/+can{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd ; C @A(..\help\005logo.PNG7bGb 5H/+5en{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsDd'<P  3 3"((8$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034aDd'<P  3 3"((9$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034aDd'<P  3 3"((:$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034a$$If  e;Q S3$ x6000034aDd'<P  3 3"((;Dd'<P  3 3"((<Dd'<P  3 3"((=Dd'<P  3 3"((>Dd'<P  3 3"((?Dd'<P   3 3"((@_Ddd < C @A(..\help\005logo.PNGAbGb 5H/+Un{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents}DyK ArithAndLogicDyK JumpInstructionsDyK MoveInstructionsDyK CompareInstructionsDyK StackInstructionsDyK ProcAndIntInstructionsDyK IOInstructionsDyK OtherInstructionsoDyK BinHexoDyK NegNum_Ddd = C @A(..\help\005logo.PNGBbGb 5H/+)n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`{DyK  IsetDetailedDd<v \ C RA:..\help\100right-to-left.PNGCbHvf.KnHvf.KPNG  IHDRQsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATx^]1ܸ@Ç|_sN:}|kI~~~=j (_|" @$#xA`Y2$"&{$fy$h|/jdZ6hVRd{ڮw:dOO7~"% "@2wN2\7XN2 M)%S(*yud>>O  67 @[Ʌ3Cm"L fߐ [PaWH=-d|a'WodVL2 =r٣E.s2Ǘd'3ɰӔCsO|(k(Ȅ5Q |2l ~"p GG!@2p@Lo03p^$ 3z;?h \&q@L"p4%RzpE2"ez#I\$.H \&MITk.Z4Z_z^ϯ$‘쪢F_B Ȱ-bH:d{ڮ"dOOs~aW N&Sz0Zc$1zc g5&ێ==cf`f`frf>a=kraHmdm7$fixa2|azk6,vd /OY D!@9xyX@"@2fxˤ0NK^2sކ3j)s9ތ *Sp9H;ZصWO{iaWt N}F B(20KAf Jʐ aUgs\18Hinp d6 w&́dhm]nY*ߌ )PS)=yB*9CpfĹ:wֶ{Lxh;y$!W.p ]{e:f?"e =fP/ 33_(qG"e De_D<%Q D "P m2 {ϟ=ϟ?0/)L$O>[uաbC gUS{ׯ_;i!,^ 9:NFc  C$ur _.qRq%1EÇ۷o!&Ϩr2i`2MCU5B S I_a4++-bYd,ׯ_Y-~YT@Fr9.WDH7ojΞQke--Uk]\XƷ.&rn4Vn 3#])awr%.͊Xhr.#Jlf%eY&U_#,c-^>hrP=.G4u=ޭ۝ZnS0TU"q..[) _<Fl(ԢD'.1UA38]Aȧ/cD H yy0LB!un,?Wn{,{tmg"Z~oC&ۋ2]o%n}KjeWD9BR#^k"=Y\+u0i0(٤w{baWt@jFԼ1dy v,]kG_ =a2Pb 3njj!.h=XWp*;M{A!0Z U][K+Uً`)R|+4|,o!k5:b 4e{wIQ$ky=c| :2}'&9'j[d hshP;vtMr&j>S{ 2hO☓A2<RSTppݵz%6 Dg d(K-Ę Ьu-PAlRƇsuqfqgm-ޓe8]\Y NS3(QWd äjXPO6Ul=h(3LI S гTYC%3 C @A(..\help\005logo.PNGDbGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`{DyK  IsetDetailed_Ddd ? C @A(..\help\005logo.PNGEbGb 5H/+}n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`{DyK  IsetDetailedDd<v ] C RA:..\help\100right-to-left.PNGFbHvf.KWnHvf.KPNG  IHDRQsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATx^]1ܸ@Ç|_sN:}|kI~~~=j (_|" @$#xA`Y2$"&{$fy$h|/jdZ6hVRd{ڮw:dOO7~"% "@2wN2\7XN2 M)%S(*yud>>O  67 @[Ʌ3Cm"L fߐ [PaWH=-d|a'WodVL2 =r٣E.s2Ǘd'3ɰӔCsO|(k(Ȅ5Q |2l ~"p GG!@2p@Lo03p^$ 3z;?h \&q@L"p4%RzpE2"ez#I\$.H \&MITk.Z4Z_z^ϯ$‘쪢F_B Ȱ-bH:d{ڮ"dOOs~aW N&Sz0Zc$1zc g5&ێ==cf`f`frf>a=kraHmdm7$fixa2|azk6,vd /OY D!@9xyX@"@2fxˤ0NK^2sކ3j)s9ތ *Sp9H;ZصWO{iaWt N}F B(20KAf Jʐ aUgs\18Hinp d6 w&́dhm]nY*ߌ )PS)=yB*9CpfĹ:wֶ{Lxh;y$!W.p ]{e:f?"e =fP/ 33_(qG"e De_D<%Q D "P m2 {ϟ=ϟ?0/)L$O>[uաbC gUS{ׯ_;i!,^ 9:NFc  C$ur _.qRq%1EÇ۷o!&Ϩr2i`2MCU5B S I_a4++-bYd,ׯ_Y-~YT@Fr9.WDH7ojΞQke--Uk]\XƷ.&rn4Vn 3#])awr%.͊Xhr.#Jlf%eY&U_#,c-^>hrP=.G4u=ޭ۝ZnS0TU"q..[) _<Fl(ԢD'.1UA38]Aȧ/cD H yy0LB!un,?Wn{,{tmg"Z~oC&ۋ2]o%n}KjeWD9BR#^k"=Y\+u0i0(٤w{baWt@jFԼ1dy v,]kG_ =a2Pb 3njj!.h=XWp*;M{A!0Z U][K+Uً`)R|+4|,o!k5:b 4e{wIQ$ky=c| :2}'&9'j[d hshP;vtMr&j>S{ 2hO☓A2<RSTppݵz%6 Dg d(K-Ę Ьu-PAlRƇsuqfqgm-ޓe8]\Y NS3(QWd äjXPO6Ul=h(3LI S гTYC%3C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`{DyK  IsetDetailed_Ddd A C @A(..\help\005logo.PNGHbGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`{DyK  IsetDetailed_Ddd B C @A(..\help\005logo.PNGIbGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`{DyK  IsetDetailed_Ddd C C @A(..\help\005logo.PNGJbGb 5H/+n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`{DyK  IsetDetailed_Ddd D C @A(..\help\005logo.PNGKbGb 5H/+_n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`{DyK  IsetDetailed_Ddd E C @A(..\help\005logo.PNGLbGb 5H/+9n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsyDd% #n ^ C JA2..\help\350-ListFile.PNGMbxP 2tsU0x nxP 2tsU0PNG  IHDRVEsRGBgAMA a cHRMz&u0`:pQ< pHYs+xIDATx^muw i(hĵ]C6,[dŪ#JL!4eBA[@AN:X[ ɊjǔlYeGHIVH=eIG>H;͝;?֬Y{~88wk|֚s?{` ;\w8ps ,s? MgF}ƷQݧν3Wo|OKnyчnlx f';oXiu?~ʹRb#yU=rP¬A<%p;}xÇS~(U>ƯY͇om'oAmuK<@@#p_1Ï^O|wѪX?U2|Z^yܳm]o <czGUubi2?KE _EQm>;~)mP5~{yק6(amE1osyCt|PG|i_@ùU?SBLCb&5,M6PiN9q^;CXޏ]u~ۯ/q|֫Gcw<쳋KӖo=-Ƈ^{o\^.a_:~ z{+_}g,u:|K'IJm_NcuczKQG^i<1 #ι8%5O?棞Z+Pg_A#/HO:<K}*\e>t?k}0"t1mV-姯9>Q(='1@TQʔ,yW~Gz5C>CYc2}Pru(#*|(Y ~u81c^(}=A,rKJ1:/X,%ר1V_5qWy<֭wWԟ޷Llz?Q;'^Wٿ1}XDhARأ#NڼҙWޯV\]/~W7T  ϳ/]Uf8@~G1IɏzD}PttX7P?ߦi§g3;3xeP-T|PjRK3?vMzp,ھQ\O_nI)FEDWOoPjݿ>\i+)vk;jq־n'WD?(K7S?G]ZJQy>~S"WޯssVm?[D=WuʟX qyI䧿dC%+2g~[F_{quYӝ"49(jh n~LPPVmƾ?~cĨKGg7c>|VI՚餎5^zALXhy%^Ǻjpt͚@ةd:'USFgL)zSK2.÷w/o YfX˰9*쉏ŋLeڟ׿ߨo.^/qu4˟:RD_|{3|O/R}gRW~{σK󃏩3˺<+Dգ]jyt}V{>s뿳\Ʋ#m ;SPm *;՟WիJ_;Ҹ>s4j?"fڠjƤPw=DO8>Q<iooyǒ Wo1A{J[U}_R uײ£JOBy^4rxry_]~|~#o?cO4[55ՏQ/aCrCzs_Qɣ}Q5w 3>^&ݍY&=swX>2{ko; J5cWO(WcX֜EI0|tܚ9ApJr(A=Gԧom˰:|uW?'5?:kY*PSڜptL~]:ɯ-.o?T \ү~]]^**I.DUJ'۵Z^r ~՜mcS챇p}ׇj,,=>ryzq-𔪳 z[׌@36P:W7z= N{vV|Av H0ǜͨuGK\_o_~KJN,D%*uՑGN.OY>Ug2Gw'|,I$˜`pF6nz"Hs}UC4`ş A.{bǟV71EdxQgg^kѯWU-է׊T2>2C_6mڦ>wuO/ >~+W )݋qN1>w,7{:pA>qMUmq}[x`GݨգnWb=7aGaf1\SI$ѣV$<"Ɠc<&cIoH ~*JSOY^=n_":oQ\6Yg}2A:95uN81fw2m&('N?k%eCb% 9jzO,WY+fԟF31-3Տ Wմs˧N~?^}g7*>"]da]&]Kf,>x/kr[}VV3yG;ؙ.o<QXu^]ŋH0"v|2:Rx<}PӃv cA;fD֝GP6GLs$Ɵ~?}[~qێߩ^I|3?%_\.u7W{l_In!`۱X0s^lk]n5{xfhf %GM s>S, 3GJՏ-2|M2?gn^f.=Ueuɢxgz'O,Ef'zIϕ]9~KL55PKUzRj;RUO規;ʸrULPo˝{,oW3>u\| QSRu6ӯ{ =3צz—*ř UGjٗE 4uIbP{nToL(q >gKyow81gD:T(;IUҚVQ)'qGgSJ}~[^:nc_FTL/Koy?4[.wju=bXE+bcG3A jzvөn"3C}م/g"ݩ3 'd8VWpQ:-Y-[_8sqx^lV?z_z%/?cTG~Y4?D{ϖF=W/7"~ǟ_g^/>ǗmϼGes~7ejj jY֟WOՏR'ϛuZ8{X3FsT,X 띿=@}vů/w*g''}6::+O-,YqN<#꥟ .x}̦_>g?bXq8t=1 bf ?6Tk^-WM+h,1c:3q?{N?|~)Zdx:ƫg~PJ/9}P?^}/eE4g';_OfRz^}Q?9e}}O>eg6O.oW-՝mG*#׽Im֔QݵX {mI`g D854ל\)ZGwB'Qأ<_!>GQ/1um_ѩh N0LL>ΨBC'nndkĚG3 %4 ::g6{$'ip*#Hui'U9XNXg)Tx&pO%V2>-ZozV=x18>%4mPm1p2GYxO?wǛ_PE=1y3ύlfDk d& SJ>sXk[qMkAFNrѩYh@jt Z<~9/Xc=V|q O&=$o m'J?Yqe[[>uW*aiʓ`GpC. @ oNXm񃇗~]87ǙW|V?z[}a~gl'U<@@%=&hK'%>cZn4N?MKI/ߟ ь3pz6vL4|O(@@@Zcikvc{8BJ%jd B%gzvKbUEæS{w  JvjwFWz*4߀ڂ-f *A#xbqzD$Z%Nv7z"wONC"/#y@@j)q<8^$}]ߛfp#fĞ$$8FM~\@@ #w:$k̹:t6ܛzՅ?cLqǷ[ɜ*Mٵt @@hRRFe܋ޫ  7Ppfg8k($%-@@$%@OP\%%O7zKFw   *~@@@@@@4Wq@@@%;ZQDIH 1Q% %OgݬxN#rfuZxj*MPY7+P&ጭWxצQ'nގVDϕ0* _zcN%CxQkqV+q1'JEns@US(=Xpe ()stHT]☂WUxU'ī2>鿤Hb%NzeӆstH X&NO>Kv`?˜(=,翇Ac J̡lVb=y`lS?c5o.^[Tb !B^<}0ŕ8'fu;!cDB'SvuVv*OIh4ؖG1%--vz@LJ#o qc=38B¾-Kߛ!3 \J L=3Ŏ/Oߺ% s| ~@Qbb3<A%n͖#gp_ ddȔ([my3t6ssPSh"ycl` ^>ᒹQ1]@rO<{ğZ92l ܁156%֐att]縈c]R iw %V(ƙqP)JɄ\ہ2:=s̽cʯsba%sp_vt2%.F矈ӬPo~'U@Y{:%ΪtP,\ޓ, OycV|(q؞_Ԥ HK)"6 ZbO<J%Vūa5FI;Z+tmM{΅%kL0Tk .U$hr %«`c2XH2q8_PJU;RC7[%ʙĞXwSω<}1qB,De;"4ɏ]5a:O*[ҘL`ykrb1U %>U?fTem{~"xS=CW+fMwJ-y(qL8R!RZyzs/b%V?`!bQ" 9V '%+ZUYz\Ά,'^*ql>bĹt*'Y8y鏹#Dtˈ^I[2?WyH [_ĹU.\WFTbJ6J{H3w`Л̺:>gO ߓ*~h>  r ` _(q&U5NSz͞괽/5I/7䎖snLko{ 'ՌX,Jy\t] D`Ĝ  ¬sL$g۷eL~rj91m:@ryLZpʢ3"gA`7i|޳r~cE$L==/C>i0a)17ǡ?2)$bIsJP7)epW6{bkbGulh=Vb;çrOTGyn,xUpJ;tZocA|ck|92SWk*(qݞyw}7zK2ʌu%j@'"!+}Y/X[OlN2quYLt"_eg+gRb~pCONJ+Rrv4:\.<ϽؿlJ*~8lSOl#^ mn`ls|({R gMIzXk؜7R*έ5zf껴i]+7'WjnщY._y?3j+YHHֹZTSrDF7 {N)ws _0mJl{XA;UG|ݕq;ͤ ||"#$~mwZ5嬲f%%v̐!R LRnX7&'E׻j[mY֠rweb2)E\ZaOwLl%v6:σUJ\)CsJ\W*}u: fU͊!KRovQ VX)pl3ۂ(MU)1vZ|R|DUEk2%d74bO\8 PA>cp|;?A(qĖ \oM/PbYNJx vGis^>(q?>?kv3Prul_sy6i@<6dMO:vt7 L%O ?X}AЈ9ȱ$@; >%[s{^qPmD=R_}Aq/ I%|#JlDP/Q~Oc3YNNG?fm493[e؞5_m$-\=|Y5]kpUy˩RWFtNҎ{\] u% n|De{((=͋gPHϷ'6 K)g3g45 㴟 [GVb[l;؟TtB+FIWbBU_I쥞IUI}NfBcrS:I'BNbnN۲JIW&ZPb:l;Stm%&T|X};Vv/|Ū:m u|2{1Q#-QǙ.'r-Qq88|B,u^Q\'NN/.k> ղۛ,E7hg,(LE7^ ^vNfҚI$H .bjQ8 %8s//d{SK/\')E}{W_]rZ'vR][c*x:~Ҧ'8.{d^AchIr(9.xJOǍ*ckYJI*wn )Ė8GLtG!wO *}Xik]'s sv0ՙ>4'3Y@ L`] Np'::4Ͳ86s3Xp%TCxϕ˂X{gf7V cOnITK6p 4d)Ѽ`qgiEFZtc%Tj.p~K+{_~Px=n땘0A%'9,+38-15q2߆_8~ &ҕ)츒^pQr~ۅs|m'ɄS &ĹuRjpO>$xkXUWb=>Pc(NpAw4 68rR;(7c6c̓e-NLcqWRr( 193'oK䊄3[DMY kwm$aa,'4{~r&f6YJlġ'ۘ]EЂc:p4ǘ"" 93]Yjw{l\$1r9@a2i}zEL=ҵ9=&ę`H,V*cP5|>e/F*fASI~d΋dhtЖ|%tӌ@ bM8w&P♢e0 qͦNx]w@@@ @@j(%>w}7zKW^}-,Jc  $PwyGk,'ɐhQ? %Vox\yaѲG -6ZPXimPõշ< 8٦A?)@5FmZ룶+ 剈폠m^a@k6TsKCTRF72=Lvl>7r8@I`=qLD^~3s&VCc~JJ,8  4fb9b? &^;RTMz6 N7.e&?CKf#$ Pb Ѫ㗀`Q8c=zP)ft*XPQS-'Ǎq'9Fd$Ǜ-H H,HN+4$M 9ޔ(JTzf{)129uǏ9Kx//N`F$ fI?(13dh- ̭Ĺ;-N9Iq,Ibޑ^l;ˠ$U'ؠX[t\+2:R |N @8 ǔնlC s(1-Kmz)1s"T%U%EPeX 6 LZpՒ~h K`]%/ܜ}8<8]g/־F3d BCg]묔{M9%6bi" $3@3Z(qVG㕸<]0\1 X}w~ǖci+qC)qY:]ieB6r`7@@Bi_t@dyJX50  0(1@@zXp.*Mz  ["%R&a,  ePbIJܓ~ gl)%V   В)%XwnY@6OJ\~uZk6nA@(q+maH~&=(;k%eFccvm+w{J (sX 0XDpgۂ7JsaFk ͘̕kFc@V3d @qujTfT}YLJ\C: %.uĉ3ڌ>C^,&%Wy]韱I`7J\5/k!Xrgǁ`\byhxObω<%C WּJ`X,{/Pb{ļc.ט/h)H1RENhILTq~NT`$B 6ܱW g)1'U'L:L X窚c%-%fƅ QA KJ|[/pM~t {mb2NARJ\R%N. SrE^:"쉓AlNѫ}b۬ZA,Ⓣ\UHW& 9bL%NSbBŃ^jX7%QyBh;3󄈯cU6-W73`d)`fA%H*qB3l(P }(ԁ;o L~)Uk )׎˵~G(qJ(o=}J,0!%^{9goFgT}YLJ %.$%.uĉ3ڌ>C^,&%.!EWquxJpՉ J,07a%NT+Heꯒ pX khی69@@ P>Or   0wXꓱxJ C l@O{n|%0ˆ@@$%0!@cPb(1$Rb=2!>h@@F#Rb-? 6di7~{n3lҞs@$e3}vx "CՎIױ-Ǿ1F*IR$m5Ѿdfü I^Sw:Ĝot`Krځ^b!lj0? 2' y38+IHo˜3mzūMPbe%``-sW(Ֆzr%GS G0ھ3ǝ| '9ѾR۴>sy 80h?xF[3mm"άݞNK(RaGg&d$fDP qY81)̈r$jЎ9>=YOmK&3vrr &3oоa&y2&n·XqκOLsY@`9ƙpIs 鑌fp0([f_9$&--~iD-'oآU=cAݣ/N'{bq$[[ Uđ\CT\Sh6A%V}Zh]PvHB^VdGcZC`O2#گ]D6l07&Ĺzñ^chYf(7&=+q0|౽i0:W8+ tۇkN`5NlfشϖtOcb!+N $Y?Yxm! w`ve߯e_cXHl,^~P =N˩`]d.N/葹'@q N_h66;%`/KfT~q$vm%aCf %%@OPeWU  0#(1@@z? >CA@@'](1qZ8ѧ]eY#ЯcCA Rw_-PA \7zK+OR9ŁKx~w) ]GMKd8"+}7ٖ!8WrfO޷3)>N.9vAо3ӆ?Ĥ}ڃ5f1L]9SI6EkHMN_!|MJN`B$=yvތ3 J"bKm[cyU0_lL)_5 JxIx6O$O[x2[Fh%>.=89eޔ)D Y4wT6^gUXt]n" +K.h^LJf/8sۗ;KE΁\e홚,cVp-"kϑur8|YRJt`CT,z2_zŐϜV1,Vbz]6*(JYRScir8I( e `bRpzZ8DlEC&ĸD8fs<](')jI;.OKDM5T<4N'?]8;u/ŶS8r\ f}~L74+B2 C8-I49Ŋ^IO5ƇXa'ĂliD/P;0Z.C)1k=JY` @{~T\Gf@`T❧5 CA@@'(qO-*JPbIJܓJ+J   = Bϛs gEVNvWo[[%q KRw1v*2NGě^*a2?R]Pb~tb'qŌ' =XhEg}%;"*USә9>@D莲Le5&2mٵVΚYU}d$"I4z)Ӭ,-o,9:Iz鑘fc[s:s~x N猚藰oތ3SMm6}H_bNQ b%(l!_SdGNbRv,~`caJ#V7D1N4a385}gEr8},J|n +WxX;;:'ػ;(c#+>OɾdXHVE=>|-H).1J -a/ȇ! ]ǘl_JփkٞU ְJY8Uot6 X$}e{Rh "%]"VߵUL/rqJSbW.O1XrLWƱ>,d1IY)=D3E!\>:9, %sX~n88ɳfa3>;.9Ǔ3=lSkfp%QOTN.Xظm1͂%ؕ=ȟ %@dJ8+ 쑨:CdDj6P!hr:RpJpRvV4B,6J{UK T.L,%&kKSYA0 @H#e?NnjW}V⠻AڗjZu_d轌Vep)5=Xa̎9XaFjA}ƙ26\1?:sd& ALIP$"4H\".Ʈei?Ǿs0f]{ѐ|ADT},_Ls6\%:i$nYy` k1tȪHJT\,?ltcSߘȐql6( 8 t=/=F8Px0NWb #NG"v$w7]؃l_c;,(1jm~2p A$[zKA4iL;=F>ns>˷?&>x$fAWm0l3c{nZS$ԩDӢ/;|_O6aa??{~29a\&6bW^v   = @{B  CCA@@'(qOC- @Pb(1$%I  E`Jv~s?8w_/P[UwD/-SL~ϘoT m8R9GW۪Z.X3a&%/!=)-x}0q2$pKc ZPfHJN8bd{3mV .J -sx#H`X/gz8dn fPvff3-#􊟙57C:fut^9+NvBD2'ٞOs=-6sINmĒW% Igl Y$\(Ol WJHYr(;iwO:9%r%ۏk,[U:dIgyRX# *Y7OnA%G7f})1]Yl=1fŲYYT(L}b3M^JLf4iInoto1lJlK\;׋.G$N= c9s,^2뒕.i!OpF'CS-8?QK3Q?` %sX~GeXeϊo+ifWYc/N|D+C'Qc0c< +)zzpm>/q,U8S R$%`J2j=FCcGKo r&(Rv8M;s<94"Ԧ|œN3G_a~v%ΥD(9׍`-[I)2%2_by\$^Y?9CWZQNo(ϲp$7R *e ,g%Kr eߤh0]((IV1.Ps4iY= nGǩɜRP);XZZʟ⏅{[|kUI`/JǙJ"'/MӘ_$?zP#ٷ3{䌔N_#z.'Kl8!R+Nh3)Ux*ۓSӀ qp.shP߫ RA 8|Vn %ަo;k1:(1@@z5  PFJ %=闭p@   Г8e_~!8Pr~@^)q"nWؗiX0b$dpfDqR֓+dQLgmGJcMO~=m栟\͚;󟈣HXcx2sOᾱa W`q"1O&'v/XAB-258$!iA񮜴I\Y@AMwznm 9ofVfd'vfJY6fVĦ#ٞ5{ I_HJ6HVdŒ0/ZTdUёJq V^ 'Υ%%PbzaX)GZo/p.WxX;A*w<鵼6}WI|%$2IO1qP3mk-86O9JF_ *sAmM2Şzb&'(Q(\ ',\d5"21)&f8y'*:r1sϕ]#x%}TO)ARvc^vt|͠=W%=7ڋ43jS3ӭ%@OPø@@PbIJܓ>ń  [%%@OPø@@vO;G?d[\F2;@/g9_S`q^7$0)%FO &?fmBZdvw }`н_=ޘR`$alZ@ ci)eGj|Dl jZc5V1?*6U$w5fZ䊇S8 kpףe,*N}#&ߜ0탧pHiba78oh%O9땜H_T0p,nș;,KN5+ _1CIa۔ԋ)Mr2&h(Yp"$ii] r87oyn/vBfQ?Xgot&65˞x vm4 BrM8_pJL&~as|V]€nn~bc E`Pix  YPbIJܓ~֢ A@6IJ %=orqAdCA@@'( z-3ڗ$l# K/6XRɺX8^"Itx=Iǘ"ig F\:9jMyٷӘJ[E%J7c׹clrnfow%k,]tg( M*Aʙ;G~8rpͶ?'y·)?9M)`$a'H($d7UU#A3ŕ/kRэJ+ϊHrE;!i?D`2"X0u48yJ|pps̄vm(q.بsiHMl_=A#~aeApBF+ɘֈEa,b~Tݡ$Ħ\H~(vxc̩eS3 QI9o4 |7RbNsd}fPb|rX3^**2\3gz1-+q=9;O9IBv!D?Np8&rLEXOZPSkYupp'aj% d~tӠ{\}A2JhD_Am#TXNu8ěAԲu j,~j9+_V]J bOb.٩or~ %^"'  N !e'9F4X[Xi0/5,8 yPb(1$%I = @@ IJ %='Jh  yPb(1$%I = @@ I`/Ji$3=TA6yG0)vkSV7D w͖>+9뻘?-gц܋PD~5W*JL|Y@Ϫt5 GDsu2:VgE}nNW~~JlP=GɪXqK77+g%hc+'Rq6ͺqt 3XׯH?1W-9܂|Y>ƹנ;(؞ij iʺWҤ,e8f?ٹmϟsV=n,3c6E;u(r BqO󗚧Yxho܉͒MGIXU+Dr%j ۋ#9NObhw-/6X~cI7i̷ajUǠQXQC}1M^{ 6Zo_Vq*'=trXLEqH*b,oqInP@5EX=&l\ Xu?NpXn/ NX2y&grͷƽEK+:!|?W n/ (D3Mm<ѻ_i 2ic>z^m\gV:I觮`yA]iبE3y|q28Ev̰pc*vz!u!TɑʆL`J8 UsiƉ~nYŧ}PeښR,ݳ6@ $*QMhgZ*1r"hǁ/d}G]؍y 7tD J|,&̙M̽)?^G *1Q]힨9I3 L #<9zzakM8n|%u}v60_Y:19uBىq֣UӃ+dz¡gZnͭNwh e⤄ݯR$ʑ_|돠Md{ȍaǸ=qR-WbǪO刂}_M)-D_v ĜleY(WbGP9J[|U'gP Ge]s*Blϑ 'X{bN8Hz/ǁإ Ɨl]( 9h76T #X-m\ 3q_s=kemk$s"'^%!A/ˇ)3Elɽ(9 ԥ );޶{"'ġ4f(1ckPW&-9idmp4PAuhD?  +CA@@'(qO+-`@@`"Pb(1$%I%\XJ   = ع\ߵy)v{[ia  `)]36` n.E0˚v1q-+}wa d(_Iu@Ǡ.@ Cݭ}~O<   )q(#J[~c>2̌W7\ @Kw1٪)uT@~.;x@G,%m^mF  !%@OP9k%6c%z8L( |9E5 0xNjf9CNdACclPsk 8.5 gXH^%dT()@,h ֡,(Psk K-;mU6 gRRBYHJ;(ڟA`R:w@jN 5Ğ{be Ѐ8`OX/ —匔4S)Y&%C}YP.q0X3@쉱'Zv۰  @ S]Jxw u\jN 5Ğ{be Ѐ8`O=1ıYР NK ?@@OP7@@PbIJܓ>sf  &%@OP7@@s+G\"'i筐)8 qg(7-x5]']F.Z"fF.nP$4ːĊ׼K bpN|%.]XkfK~a9 s K,bh܌8ՃtORbg],'EiFd|jͪ|8: ő*vJhӅxSm`w "+ )S YĔ8ބ! Tcj.Hm A9/0E3XJ߲lD/[}`&N> +tΩlδI9Est$ 3:R칚8JE%ά 5O*eű8r+n)RP)axr"@ %~=JlW妠OUjE.frnϸEw~NW[!JuMRDR/c뵹]"N[q1Vd!~y)E0c 3rϹ8$R 1^aSėPs ގLJ|;S/OIױb}F;! vq?JQ qS-C}ps(MbJ~FzvDYep Rv Y^g_):^VSG>C+񌹮+5YLG3dƮ rS(:'YBoj"RrU! *Rr=xaa%6jɡ#r%(_rS 3|zXK{g:>rSD{al/@s_Ƨu;';Oc05=G8K-Z8Lo }'(Y|ֹs%'LIhPtNs(MPӓ2j%*;*A;뉝? -S`)(+ǯO{jzt Q3ds=WVƎGJ=reސsI%%m%rs'0{- Η)#E AhPV-CڌBDK\\Vh#7OLJ:JF7DG> @@oDP[N.+E%: xS P&:wcd `O<'!V!3  #%v<ΰ%xav'^-#o }Ol8puzO?\m&~>Qq LP≕6)j@1.-(q_>`3Ŕ~"+$LGJMJO\\A9l8ً(a[GB,e,z{W`m p.6`=wXDW vĦ~uyYLX 횷88@ޕNB֞(٫Fxg/]BNAR 0;Ė v|hK&L@{Pb|F): 6(Fti=ld @ ЇGP#̂@3P>UYѰ>,Âc yPb(1! g/~͗- 6FOXa8>R!Pb(1t# ( %V S@ H@D@(1x>k_rW['{!ǬzG 0(1x>PbK:k> E%%OrcwM(YDMG *z@J %N7xymŊ>@8 !%[6ƞع̞ J\g@GPb(|>Krȵ } @ӡ3BQb)". C#s9ڃLJ<O]|.]S@ijQgg_Iy?=>T)3 БxV4ݻjpusRޑC#5Ӌ(z_LJ<9_ط'Rb);+^PofnsڷbE'P2n8 !%OɞAI^Pb3gW C Pr1k>x;yV0(zV"1@J %@PFNLXm4Xx>Z)&2ܴ3.8?Ɋ8 PoWuu(_Jч-Op vBJ<$5anc/(u>;C# %[}ZA`^PthlU {Yՠ  0#(1Rbƞx A` ]H}7wNA}6C<$ L.'@YO~u)@@{%i } alchM -JF-(@`^PUx\RTjo-5.(#%@kR *ev,)PUX*r35OlI& A`Pb>!"% #}A@AJ %=oc5QCA@@'(qO5k(   Pb(1$%I9@@J   = @{үYC\mCA@@'mIENDB`_Ddd F C @A(..\help\005logo.PNGNbGb 5H/+tn{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\[$$IfO\FS = J4A+8"/ &""%' *06\\\\34ab\_Ddd G C @A(..\help\005logo.PNGObGb 5H/+.n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsDd'<P  3 3"((PDd'<P  3 3"((Q_Ddd H C @A(..\help\005logo.PNGRbGb 5H/+3n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsDd"<P  3 3"((SDd"<P  3 3"((TDdq9d _ C @A(..\help\380-and.PNGUb:-etǛ@8n:-etǛ@PNG  IHDR7EsRGBgAMA a cHRMz&u0`:pQ< pHYs+GIDATx^n07ߛwRYSC ԧڏJ#\>0DoDx_[a}vR$@I߯z82#.'>ӯ-)Y \"Qd޴l=(0g뼡6JeVL@oQ(ʱ󭂲L8/?OH}}}UH:Ɍl Lqld΃hLqI䷠o{p Ӗ]V cW5\)"Ӭk˽zw\6)|4Ĉ߯M_{{GG1y$u&X<i3qڟY3DRV.v:A=M5Dgzx6STGA0Ę8S\rZO侯$xČxNԵongKN5w0.HQ#2n_.],HV@䗑k#(z7w뉬&%_n衍$#a'aU%/S)]N-ì}>tv@-b=vvvy";o ^C\IENDB`Dd"<P  3 3"((VDdqfb ` C >A&..\help\380-or.PNGWb=4H DKᓎH e=n4H DKᓎH PNG  IHDR:JsRGBgAMA a cHRMz&u0`:pQ< pHYs+iIDATx^nC!7ߛwkncZ9We??m(Eq_C H?RxIO}~lh*I|gk9$GU"@yjE%)DKCUEe@w S4pL&B^q۾p H޸QWwin~w#݅Wr5b>2|9]ɨ/OL/ '`ծ/>Ҟ:)n$j/?xGŒ*v,.wog|hrt,:BFK Pp _)z䓟0\Cƍ}zw-dM?HQ +Jb?D|Cּ6H(@\㠟WJ2Ł►sլ󻷴-iЏ}0c2ģ,S떏~G.q=dȜ%Q\vEoUGG7A@3 @{A"64bm2v:}F Gz%ܑnX;R @砇&NHឹٽ|Dpշ8M[ɓOFɜZ9 {^Ct/*ʳ 57*OWd1lIENDB`Dd"<P  3 3"((XDd9d a C @A(..\help\380-xor.PNGYbAD<屍>We RAnD<屍>We RPNG  IHDR7KQsRGBgAMA a cHRMz&u0`:pQ< pHYs+mIDATx^n1 D)h6fm%T}l??xDC*@+0S3 ;liBW/{xãdТRGt36T& 0c3[.z 7Q{£dwNb538m0dS-sA(etUZg3 𡠧/@ ց*]L_fWBXTgei'R^yl;t OcUg5WMdlĿ]7aK'󵣕6C48@{}imj M;be]Sd@#ќ!3Ik C:e0UP eQOxu^g_V!zyxۓ3bE ^ɕqR}Ε+ N6 .ï'~]xϓ[樍SH;xw9n333­E|d;Ϡso&8$kx ["[ J-D)v ᾖD󵵹׈'M'r)2'㹢g6{aZ-bsI|$":G./2Nb5=/qNTV u-O!O`O4+ 8`T| %5C<J(@j+9>x+-΍&nevƸǗʑ\Uj=2;Bvqs9n#NOh~"܌ :W9WX# i!RËd e:~*K{u1}M5ǵ:.">TAhlpRT?/DHU*R' UV?۲{Ǹ6IENDB`Dd"<P  3 3"((\ Dd*d c C @A(..\help\380-nor.PNG]bQ÷>є-Kn%÷>єPNG  IHDR6vsRGBgAMA a cHRMz&u0`:pQ< pHYs+}IDATx^[[R1ԛ{խb*/@p[$_GBul2wJ!IIR TIo|T2ݿ()5(5O'%_4(\BY Z)zZxʛn8WR(u#TMɅ"F+F1(-'CsX١/}HQRL+%E TAqۯb ${[nZz5'iifavJJIOj(L% ZPm!)1y `VP r53}6R|',AE$km3{b\:g^?lx5GaYy {-)Ku\$qVi൏[pel|$^WIENDB`Dd"<P  3 3"((^Ddd d C @A(..\help\380-not.PNG_b9ل~Ls>84ql @_y[8 _}: czFc Yq8;gr`045 j>0pCqkL=dEEۿ`.pf Q=   "T `@_+#(^H8@]^&BLh 8TF O™ 'E ( k7իp|2 ~_ 4tg`?C߆zb\|Y#d^qNu4j6LCxhm \݆2W`y/u^,S ȍ{UP WX˄fY9ӹ-V&pss6<.ԨC('X ,yO@ӗfOԓ<8";r &N~8ԏ T? Y}w=@IoO^ ͊7=p7rԟ1ֺtp hw{5+t8 _ai~IENDB`Dd"<P  3 3"((`Dd| p e C LA4..\help\380-halfAdder.PNGab0Ŕ"bGTn0Ŕ"bPNG  IHDRaasRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATx^흋r! E?I6B Lqz\^퟿o (S TxSNB-.TbWSpoX1%IT|sqMK{9𔫜fe_ZnWBt<{G5[c4SzS0+5NOo*܀.  bc$/>p/pL1h&dn&O%줾z*&kY/p`~;6yzĴ&L4/T/OӉ09i&S{әLN_3LxinLG'!L[h;Лd a:{S2| t᳂O0 Я7\S}ɔO~V&Ӓ{sQk^ֲk ~%$ތ`vB"/?bukl?50lX yNqOwŘoZ"Ds$AL`C&f"!,70![R}|NZ$0! yhO0qyB$-t|f`R n)S` GtIENDB`Dd"<P  3 3"((b_Ddd I C @A(..\help\005logo.PNGcbGb 5H/+\n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  Contents_Ddd J C @A(..\help\005logo.PNGdbGb 5H/+d`n{Gb 5H/PNG  IHDR@?YsRGBgAMA a cHRMz&u0`:pQ< pHYs+IDAThCՙ E?:U!LI.#t \m{RCϞ>C@w!ԦGC pq|zD=K@A$GPu{^,9έ,29N%&&k8X h 5glk7(PMÜ^)@B;$?Lp^e^ Px D~Q_οרB8@/P Át_@᥇PsrB@ vD?4b㪵-_A~ڙMo2/ߪdz!T<W22|]Z,~Tϼ@m&ͯTrdCtJOij5R^#E/2T`AH/H+K@ w[.^ 詀;D#'K/ JusD[Ko0-$"$>pIM1`IENDB`sDyK  ContentsDd n f C JA2..\help\400-keyboard.PNGebr_XG2er6dnr_XG2erPNG  IHDRwpsRGBgAMA a cHRMz&u0`:pQ< pHYs+yIDATx^t\Y&k;oֺ=gz0 2+([ d ![ R0G(h;jͼoGȑaYveYᣣlƲB/_|wM|S|O==oC-S k㝿8U P6+BQ'I-RY-*Nru}zS= +.@Y3rCkD@UYr|oGƧS|EŧtN. ʈ @L9D14])9*p%dƠRJ"qD5IR˛O=>rICP()RAp/0w!8/@CrP9Q^%t=V%t|e{ U0\@09 ?R0(SkCJ\Y{dA{hN{pf[@Z[`z_ VVߤVϸfFj6jb6'd `78B>$$*; [˿@1yV{'G293r33ZOIUvĔwDGGgz%7;TلFuIdts}VrUw4Cx՗+ ʢ[dT<0:{ Mrpꈫ..̥t7Rk)a!mm~ީͮqҍ}pǷG|1F8g9,¸.8B%?`=D>=ާg|Cp(h$+;%2L̒bZgr{bslmD ?,9d$N8߂QdJʎCSeb'p}E{ w38dߙԙ d02Xk iꖀ3-.MN15QfAȅG%1hWVë $8Vr#[ա-8!Oy|JRqdD 7qO8\8W޳Q,+MHVwccձ)_J#"A/f()G(U@@? #6o cRkzStSt-~,98BfT#@>ePlkxG3)qUS NdFVVfZȬACO6G%G,bxK6Qp<f~p'|]&7!p<+; "ȱ-༢w;>r+qc.(爒=EߢBJ2p.:K:B ECϤo[Z"Z"#߂#sTV + #GF LjXAW>6̻RXGGI<ڹ!ڢ+EP+D8o~u.S/st)CʯwW8W\_IAc:|8?n~eUmN?1o7R[;ѱݥ.UnYo Qxʽ7=rgJ=eA9)GA{I~|P'(zۑݱ3A.`(&m\Xy>Bi 9<\;"\x ߵJTClGW޿cur  Z VtD1\&jΑmǰ:l@x8Ʊ4|_P=%(Q$!W2)GyAZh(B&2]N 6&=P1q~T&G2BWK>1q(s@~i_zdA>-]_8bXh fr}#rK)_ߩGS>[;VW 䯉Łb/ؖo<YGU|)/8ZH6|1Yr+ñ6癩⎰"c;B21.,,`dDO pe@K+pbw"SXhɏw8rkl5Q+_!88W\\6y 5+߿7xlQ~K7-wuYt)_Eᇺ*nYٿy>}'uc{@ZF(l L q>!x L㑯{1v\'#?"/$ ˝6τBac[TKxSHcHCHmHÑm81d"6/(B1NZ씙7#jW"jp/_BMdV*9rJ~C_).UKpj` ^Q:͉u8ptC-aWKoR+(_Q~c|Q r{C3#+zCbIk$KςrpA# ˿EO`~{#w*?Dy/OwMˏQXG2|4G /þ9v?Nq pnw nxkv`<p LR!9 6<# ,m=~ux^# 4<'De]ʇW+d,g븂?*FWW~ ";#-y01oK{g}-F+(ک"T+yYG~~0Mi$_q~o>1||t3iV1;*j;^ NfA pH\ Y>̑8׆_j\+>s{Ń[ :p|r8ϪV)dy l.Q>qTM\#?!v+\Mkm(܌[۰*)95>otOrp[C=Ngxxt,cCh+cC$o?7_(H(HO W彡o֔Pߟ|_wʿg7jzV O&vQBT`gh6%4]{&k<a8[p @l#V 0Pz_9H ֱ!7t/&Tz8'?|j_[$l?x_+3m!ޱI2| Gp:%8B13 /'+-ٟbdg5<#&>eb#:E|rdo[?rȯ+'iYRGN7|FPm/ySkzOIοcx)#'?= =0= ~XOTgx{HK ѯλ+8p3#'9JUʌ#B#n}CΛq|?=?05#-O> 7[0b'9-3++33#==-%)Χƻ+!jxB 2 pK:QY>b+?=ާ6zݾ7*϶ sεqͱɓv m } ,} -̽r{r,Ǩr bv[9fe +w??dOmkznu(G8qS}w2fGxI, ā#Yr< svzSk聣!&cv#$GY4 ZxGrD#Q!k(H59h+~(V)Od+}:zS|=@(dL$큨!ـ|FƱQm O ާ?zGMgf}:>o'p4!>q8t~*Q77wwVwUeW$Edeff&gg'g'f%g%g$x3933/=?+ SrRZZ + 3s҃3})InnI1^)18<!V80yyYuEEiUέBbrKrKrs0ɱΡ'2鞇=GG#/{NFn&ƞ.^VAΙ)yYa.ၶ6.&ƾnvNf^Nz6Nv:Nƞ6N. \ =]0R2òS\|l|=<,lth;88[ݱqkkhgfagRZFꎳ]o{~aNIq~h6!;} ;K=k -+K-K[5lMլT]y`r..f>⣼Bx8- xX^53WVWuNhk}sRi#/lnY߹l~OTBZ鞧EDCbLOV [J[甉9-:go}km_􊃣us3uKYPsTGX[=BJI_GKUZZ|lB`DWH{&'M]5w-:'4Nm}5;nW::ssU+SuwG5k˻]=гv6 pK im*}bӾsSOS2пehj@;%e`Z}ǀԓ,t]\Lmmn}}<>Z`.kř|OR gu*XV͏o޺q@SG9&vw]̽X;jvv C,C%oY,aH܍M֖xscelxU't4\02V~`db`}_21LM3Y&}mً΢0$"XYYᮭ E,=@O]Cjj]3fmknvPƓE\.4M0L4>dس\`yEDH){m#pRJ /5]oegkdf@"5͎Ǜ/O3Lr2-Q%"e;gln`qAMU33UGS''{""EcNffk^ds8>&ҥhs#YiպZo^ƭjgܴhwBP-8ؔ4Ƥ/dxi>wEEhA"\^_e0i@o[7]󿺭vZ+!αR<>F./ώ,?]>_M?/1^Зdbq*Džj_^\CesC³-x兗-=gq0hL$;kJ~E~Jy[lvWʕӗNJC儽NbWMUPHr~̳a6cNg3'Xiw^$XvsYa_[*_ݻR?'ӽz8>?|b38285F.ic"<5.a1Au:Xܿvo45ϻT?쫦F8 yr c4jcLssaH"U,\Zr}C-Lկ]iZ=4j?z4;:c:=Ĥ|<-=Vkk'/"=\\>}o5n\VVҗFűŗT8F&}Ŝ-#nVWUߢMtwwmtd>1#!T[WEK>JDXZY{:?hqvx~zhi}91M TuL,67[[|`ebJAiqX7ttE".<Yyb`'x1$ 11 %J%5QN_g_GK-kW$lcifn~lnvtNY&kיd,ǚ>p8 \E. Tp<],1Ps)0el|J$J6$ {e-RPĭKM  a`zc0b~Ahp7.Ih}:Դ"0'B!\;M$`pkuͅɅ_7'[3M-}땅!%O\dď $C">M̧I `(@O-kW02TqreUȡN=sq>KӧwM0)pAbH8%Qa^Fjjj7Ld=]ԙ3 "3(-&*㣄'(J+r tV};z*z)e/5IrC nEA 0FZ״GV$uO>kYԩgԙ 3ϙ̅cq4N_xӦy1wI 9%-YUQ!Α&wԯ5T4.Jjkffǧ^QTv,͎,?gY˘q!KM)`{iDsL?{Ue 9Sɹ >.Y˓,4="+u4&[ NrwRsmIlgKᣞ:m6g3#S#1:Ж1ɘv.Vy "ږʣNC s vӺ}ՠ0)Q#>ʦ/,/Na.Шl,..sY萀$PԚxwc`WW󬘰(@W~IyATosPw|/gǃBO9 "o {sM*DyY0xY31Vws[VdaYǪ03ח##y`< ɥqd| f [Վp';7Ϊ^Ksin)}>T&cH,Os Փ܏bK~"!KR9+bU1W*A~mm)~1~n\8_p46VKJpjol/gYE92_INRBDUL^JwW_ߢQ 1a ^w­Zj=n@CO8,Dѕ wsK^vebcc|\m/zy6ץvUq,2/ % VRp{)ڑKŢxx?Gk ݠ,,} c/څc#ƝA.2ŦOxbP W*mô"moN wPjtrUItG3V}='ɯ_J_?JĂID %p+, O$ֺX߸h7oTr}<7%}}5Bl7K;!$G>xu_٥s#Ӓ}LQOOvhn/zBz,&2溔ހ4`kg%$'&:k[YQ6in{UU|NGl~ xŤC,`lHkU ^CEmZ\JXȽ§+T;ˌ'GIGX(ow@Ӛ҄R1练#ft99+.7ᮮ孊ֆɱ6O2qEƮ@ +B b &ý5U^( j.ꡔ?n]RDe@[.XaZFp6﬿$xemauПZY=2,MЗfqm<8ʇqM")+JMNACeRO{@LSx8ӯk\b~RӒ捯lmTv7TLq,6*GXp%R:fKMsR|`rgD¼>Jӡ:h<>8X3X1ч~prd>.#5ڥʭ/ʊ[PWa? ;˜2>2S<ذL;j&M F`ݹ8߄pO37o~b՜]@_82pGT1-AYmwwVV6gXqrҹhҔX^"OGҙY∀Wj_ےI7^ޥS91aq11 J!`#u iC(ċK8hvsC%l{wmꊴ8'75?#7<鮎, 91gav,.bڷ&oQlJ0;PQ1w4hpTB|DV#N84Up0! P,p%"6GQ G1F!EkP8mI1!PU? /_~|Be4<Ƈ6 (b%{<нs!Ϭ2@5 JV68*  &j޺Kfkmkj$P?gW,/U%@t꩝zٶYZ"|P+7#`.pKI tS}Ź 9 ,SG|GrG(a3]]mn5<ۘOIO?Q GEi&mN1ts21ɋY$PA0杞cz럥'[u4e vV>j౟&82%xyHy 76++l/1Òcb}m5?OKѭa[Ģ28™Np b`om`k"patt{oTW?Ux8 1 lm+2`G?Z]Y)KK H qVUҐ9]}M*ASKԉeڤ("!Ljgln:Sg3%Cq5rK?0*>eE\B Y!(=?T:xeW$,t#bHg-c1Q+RxH ?+G *87d=lx:ظ.yOrjl_S@07ݕݵ76w7+ғ2B|.O&ajBߊ8emZ1?"<&#<nKol4մ%'zk޼hmu"IW{ѣgk% J#5g"2l=Mc[͵-qi>A.ڪtWP_ڬ,){zE;#X> HV5 Ξd{wq.c)/16ňTHyd:- ZM1BUW"b.Bx1;+0~KRSb¼-<]U2;4:5%&;Z^,-C,w k 6^olmt7w#7#> ]UϟNvn䪖xF.ćlmnU5!ၾgN&*Ԡ!{fyn`Mit^V|KSRqRmERSCDgMk+|bʚwf*ܖB$ k`6%{\<β꙱TˈzV:8BvȄC냍owቂ+QGWEAMoI$^`.) _1Fj|aww&Sc}aLKp~pgMY0a?(α:dCyhȰ0LxE toswoիivb 60C;.")ޱ>p116P]4T\[-e y(7!0S< x׊ҡ`͠#9px|DfZe-cBS|aUq2O.Ҁ20gP3GkqE¦\m|jkee wzRp-W+x'/:VW؈B]ZB Cf(TG a0CiXnH "v_[*j.i_s "uz1Lf%"4ҖY*\jI# G6ʂeX XD;DADG$b#"%,Y#Qʇ N0S_Wh(ŹUrQuA_kCZ87 G@>~@?g-qR_K gz?&kv/ 9CybHRږ: <<{{_Z@*J#S2|=\o^.kerm[[9<.]| SvcuK:`OWA۠W?n.B 9zy~q }|ΜjSMv{K񣁆J˟9ĕ@W@|kowcwg3=3#) 27?p$s}pa1^LVښxo{`wnciqpA|qָyڍ.- h \9Y"FQoG]摠zI;TzzbR/Br3b#.]8ף`H0D M!V2>qarсׇsj:G$4X*œl/%oo놣c32t}l;_ޣS'aot~p*ҺZ EB,1h2r]A-!I%Ed8X_8?:c [^qt"ʃ"DɼFv^zzOQWqOpWj:+LQl} ƜSFFǩ- UalKKL poejv8xp㪄F2$z.AHYdFlf$FD#H^D1||4v&!p 1|CxوLuhC,c,cGŗu^fn#ɜs#qщf׷<__AHIH It˄xӶ<^< 2^̥&TWDkH8q{{lm~byv9(oS$)k76*ӓaw : mi~W 0 ro2FEe,,m499xy\E>b^>k K!qagg=1'=/]+j0|3iǀ#C&;y{;;խ:%!s~TۄU12(zc£r; 㻽?Y ~0aozWSlIWO[YO{PX\P j 2!G -%6aLFWNM9հq9 O,<zs8dVa\g9*0-'&\B[eY\?Qn(eF4ts8|>&H MO ;؝:YTbc/CV2rX"1{eM)܄Nmt,(-!&do{! a9BrU  "3nnI6 1%'%)04/וqm_F5HWc1T(%؂hs\-e,,Y qx"p蒗wh?}27+1 AHO~(y0ᝤAjl˯|QzbTfZPFJ=.e vW>{4;Ձe H@xРtj5 7Ұ\DZr`+# ZO) GG9ʛ?ep,+HJ Hu?w?W[V6izuO9D*Dryk *QWf{U/R}/]Ym}-^$G9ȸ7(^aD,{+spjjIJA* A49&*oDzq֎nWM IOMAcTVx"蒨sVr<qxa>|k_}.HO /R^dq0] E87w$۫^*]MJ L vRv#*:axS20iiwz{YGt.ʫWۛ[-I)a_Ҙ V0",^&fb]W*Omn@8 !԰q+G1 R PᇄN`&6" h`w썏9Rg≓(߭`ȣry$~| mO *RSbb /i} Q;VnyiϦRbSjprXi?j- Y@5l6doMdǔP?]+&5iPaQ8 QiH;*6*&ɫې{zSS'?ҸNP6#kâcN Ȝ-9lP {e"=!a$Vjb!ZaB@Ƅ~эNaB%G=с\x;;b\}B\7BH$U vtVԅnװ֕7&!F$:0eP J+Ĝ DA/ `+tȨG8 9D&tUUQ4243#1#d#xm ƒ;f=)1@@+,dzj8p6Lޥwp׾vs][r$G/Hdn]w%Eͅ2p0k(OH4&oqÁ뙱(#:丶5RlM,a%GD3&}髽mABq=o~j[Szhf5eXT˟q0a#1}2'%!<#9>CvJ{cN{]þZ |ɌC';k{o8ǂx0W?/GۛMi}2/Sᐁqae/ SfG!kiwvWwWw67S"B]\-Ut>{ țH3:R>bH+*G"9"6K-X'^ qA_Qq~ ,߫ySJV=o?N& $E"ot*+9?+=<9>ΓǃU0&I|I"p !976|(#!:%1 #<.jCU f`dqE2.ZEt:WyXՄ,O.g!V:u,#HР”$Ĉ_87^n UH#bH :Aya)"WБo=@E/5.)pC8dn.]88~2ڿ-'͓#ysVH@7_oyKJ orĉJjL옰9#yH|@:anp+x?y+љ)1.Ols-0 zMeE5*4cf3n6 ,Oh,'95('-ŋI1vB6 dzes, *ܢX_|ݝOUCU6WmC ,G"B^ XOA It~w?/O @4<ңj5?2cA{%!+9 ::jWn~VZKBO UH (SĚ /ʐ-onet)l AqQ&FwO rZk`QxjDFo^AD峿OԐ g}=o#xQ5'ShPa_D KPx&y;\:q1iĠ$N- 6P#`p@?˅w867I%i!i)H`{`}֍h,V#8aCa !% QWm@,*l.N|~[/kc)*{1ܸ.,/!@Y&+039D" ܃j5q[ si&cCM@@&R İ9J;#O*#= tEW3%67&#uPg%ev>}4gU aNH&hHxUlBDz0a%o" 3/#ծw)ZD yLuVts3AUuBr`;^8˅s?quPYQLq1K Zb66*3!QQMyw0CR1MGgLޚͱ z%wQ]Gif  GMD[rf(ou6uŸ#04OuI텈&vL G rĄf K.tU0`%7R||c#}o2UIOOkI?qe3dlBoD Kz7ۯvfǗ=} :!9v?cZ:bvdEHb':lz8Dvrwlٽ _urI[}NwkѣZ.gQQ_"}?oE.$\"8hw7+'&:^s1KD  WL/!.<=90%72ꅯ"B`sj{߰#N(PS&987"3+"~ut/W&7 O581lVnsk{ QiP-7!y$x?]ݟԔ'b[ArD2>Z=7 8hȻlo5PI0iY[q4!+E6QN A: 2[<.Eh9lEڲ{E9nGp>l9L;GB6acsD<_`{JLG/pi}!3x IGI~*xNY6r:J2y0B0F1^6vj~oڐ^p^,1 #D㊑Zf}:W?u=\6H " 8N, d' O>op ~WnHVKs InuM;0}>BCfAh}< G訑!z2HehH>ăo!(oAU/&(%X -< ,e nJD8ˣ,%V׺OI rtqi%uM<}?g96"cT4W,q]N^ߓH.9K\[_AT M0=}ljbID<)2ANb$Oc1aYk-{\(%. 'TKwG GkM8 pd/铘y a[5 ZX*b@+k- {MUk c ;>iQs$\$eE_TAvTcm棞Hc,)O& 2^"BȆ54l Y_Gh2HOTdH}co +Ew&/~cui]M}5~i$`X8A¸@GT1: k5lc;`pŧ{#ɟZZ~USLKQ9HVYi9x@CŖ.,Y=Ac ؏W"Hᔰ@{,p|-] ?'~{ ~]m/_/-? eF CP*Lu.0>{$?9=5b"=V9jTjzb`r#ʇ W2kUpID[-N){YVY }HjG<:fL2` Ɖ\0Nh,I0u~2ҍuRmeANZ$Q+$—{]oKy}zoYTmiŜFXX.&p |re`+32r=:;\(n/x?5>0L @ 2`tY`E+ڊ초8RHxJK> y/C`U,jKn'# c:LҴ8Xc"CU)ho~4P3wj[sL!l7PT "j}@ L6$%G?8&,k0Z|yɱŅt攬1#[0< @L!B_y>(539 j`l{g_k_EO)ss˨6Ab!iz1J2 @(tt8`iyOc" x>ktk)bzY S>9ȞDӡⲒ,L'2^n.|3/OP 島=/F{!>?lBh/%@ H*hyM=(l+.,(HHJM!fjW8[W'p=N>^XF3HP&M} c/z;*l}]aanBFZ84, Wْ; mc/v R! #ÍϟMN>y2li2m%Wm\()42J-/@SS/GQ G}5U}ݕ² Ҥp+4?VxIOBu3/&^=j iףO;G:ǞuPtuuTu7u7WdťAp65RQf^tzw(Bn'}Oj>lDpGmꆺk{Z(Uy9 AQ^N׮Ѱ%4(S=#:_~:^2@yPpoU_[i{%>{ۋ) չIEIJV]eg{FG44wՂ{R4a8I @ =Rkl/ZQ[[\(w7'N>:W]٘b峮h|RAi*k[W[1ޥRXWTRck{teq 8{56dcfRZQG%oJ)ii,섲Li-n+n-`57Fy@k_qQG[S$^<|2Uw]ս*p"4Y\TWPRYMXy]]lԮ~!###;Й}]xԎzxyىnho.ZJ* bBb=lկJ7% F#OZ{;z*z:k)e]n`6}ӎn4Ҭ̔0HZWc+!x?yԁYYGnG7u46VepLPvWP*(eD߄{^9 ?Mb̢ŽƒƢbIN*[ :K[ R|:1u1(4l/h*jk*ju+--)LL P(+7')t#O(X{C}5m <<}Gs RTVT6ע* Ey) bKr5weSE_lP`[OGM?jRQ2 Yx@jR/C6e$Ɔ9ة.K) U/5?yLmT#uvSz;1^LR%\Hül-@d$夡r&JQ_fP_h-œ`ZtaBo[ȜbFxYҕǔƆҲŒ4c͙|fny}yx<֍e^?l/존b%7c_)ƓeLMtl[S)$33=1^N}ˊ>B"Sp_#YixV<9*#D?u4574חUgdFg*q뚮9܁g0MUWeefp\Q(A_g[p@+ ,抎&4p.ғ2 {}uanvjDyYܼ{HoluI*ɃX Bqk.b\!51jͫ+̉Cl9q+sS[?IqkAxPpãޮ:e,*p2K7Ke0Y%j 7V姦&峿R[ xã%퍥h8Rmm.=?^̢f<-9 Sӣc,, }ܴ G_PPWcg;V-fK'ij̮̪N*s_Xr_fe Mb Dl.6 ͇n%s[{(M9M5yu5%鹙X!CrEA4i+ήH/.NQ1wlw]m=UF`i7ucM~mUVQ^*krzZGjrB;E-u(/Ssl,6VVd%C_v;y>7xȁ.l0/ȾßoσbbTw"fVeT%&F`c뺊8joσEMifeEJUYfuqb R,*Zr2*ҋ2BbCPIU7DZ{+Z uUYx5` B0.NSM~K}ڬ+O)O/-LLH֕+*-roF :캪̺, kkcDx ۦ2XD6Aέ̮*K//JɌAnlLݸL֚ved Uecrmuf#+*a>b_$k,,ԲܸHb]ܽvoc2:[ uu=+3+uՙ 59m-D}e0-̨)K(M.-JˌwpX"#˳&hkC~eyfmy:,2*`Y ylE؃ V6K3+*R ņ\9U%1Dtmk(·WeTV!hi(hk)lk.BmwlLEKKK "#߲\W(UEM5uUuՕiN%wZ!ؖw/in ɭ,&YRXzPի' 4/6 j*2*J  b+k k59ƂVX@ٌH>όKˎˊώ7(7 br?fDK b1(t񷅹19Q)q1fxғ-+Y5zω)-L.)H̀DVc&L겠_,=?#.+%87=^KAvW.oR_\RUS^\Vfs0oj2ۀ59[ŤAZt}avDFJXBoDխK/+J*N,̋37#"734'="?+4012 ͍u)ՐC^Mvv4|'wt~ZVQWSV%NgaVLiQ|SMf{Dl<ֺԒ@8c#C\}mt4n7XQRL߬Lfn6@d} , hHi.J6B hiab^zXNzXnjhB\ .9j8˲tKMK N -΍0TeYcu6qEaZ^_~FDJ^.#T1VqDU%Dg`AFde<7+8?"[VKi.nlR- >/=6pG ޽sO}2ªJS*  "rBA4{fZ`VFxAVxYQR]e:"џy}!<8#:+-cSN uw K b?h<'=$+ ,ȾAX&Eե 5h2& 㕑hD ''7NXY)ˋ mٴܟ X)+Nݱ*> ,O*ȌJ {. {K'4d%FƢR3ौHKOJ';Eh0)a1u u u r t tw uq4 s s q sOKt u%Rt(~D+HT%s>"%:9<5>+!y >Qa^UtQG _!0W'+9%1?Xl eʼnE1 `)/L-ʌNO ʌF"N]\͍uoM?=ޓ`GZHr_qz!ŘݣBR\_QW\]V_ (<+= cnQQ^!v>6fW$bB3 9zz(GI1{$&4Ց00;2%2;T0g& 477=g_d%{g4e5}"]Pdaģ$DWcW4T9SrlofetWٟkyYi=#>c uA8Ϣ芒"UeV` 'ѡ!1R&Fk?xPN A6P \t dgW 1ICMVMENaNt!.v~.oͫ0B=0+5! :9!v!C-Qiu9奙I TyEy:;x۹߾y%;;hDFD8GG`ЫQ.)A9YE UIyI)p\}‚m]LU/\3Skɉ^)A(VF^d}xCgdC.M,+HtNKx!<ѦwgSի]5p;&E<\ Uم؇8Q}@yUi¼ܴԐh?PV6.5T.8#MSIhkmab`9VS_PZu`gmiilj~O/UվLl` AhmdSl'@y&"]SF!.^^V*W^}(Lr,[@[owAGD8fUG'E[xZ;XFvw m=0cc}]9;cݝ;{{ZZX9ٜ樥szX8&[eyl^SUcehlbjgzEKM_P_`/s?7Sw3_731}7 2"c=ExZYzr6q7q(wlym1:1䎏(ȉ(/L,/NA9in'osos/7oS{Fj7O]?[8jddyp<*4  pC\E?ąCFq7r2vu0tw4v762ּqjkzp @/usdx^.|,3)./+JdfS3n]OVJ[Q/+7g#wS{Cw{#p,BdjLJy{xb :Qkh\VvZC+G;o[/;_7S'*D޵vu0tdgq&?' /17=‚1F^N&^[[;+=33U=ͫZgTUOXxٹ;<8޵dkp6@dh ^V.&8vN6VZ֦ZV:̍n޽mZ,$&,xZ;ۚXZh7T7{PU_ƭ'.ܼ LQ77So6FLt/i׸}NW_0лw L}Suui^2sX Cۆ:WunU?mifhmxPM}˚gtӹ}Fuf4{Y9j2:sA_ڭ3u4騟ָuNU+jhA[-ӷvN^uuKlu lM5PzWU֍W_~R[͋/\ͅ/^'Οٳ_^sg~{Wg}~҉˗N:WϪ\?}%]Kz7u4չqKܕ˧_a\|}*x]iZrhbD}}37R9s/}~W.ߝ9k =חn_=s_;ˋwʗ/|u/ݼ}ZO;vVچjZkk\׼yQ.ehde`jcciaue.h]RuGX& Ez:[S;vwOBi[45չdjc~徫!*\UxWZ*'5]0лvWOp\<u/뫞6>IqJuԾ8y=kw[#s{]CYի_\ m˚O=hw7h]15V1Sվb}C.fAN_3U4ѼqI_ڍ/nͯUNBG묍ovL TݹlyW2Ի}:N:{>phѺyN[ڭj޺[׾P}S7o5Կb`fga`fju]WemۺgE7/Ztqwcs ~ACwZ*'n3|rG=sVZ.V^.zfFz wu1n]=-`e-ʊ[u4׶44PrG z[C[W.Pમ:]5Ի`sCSVoz[ZZh\s0Q1iyAIjgZk9qцtWj!II>C%&(X*2 MտкuFiK.j8[ܺgp->qg7~{['h^K K U7g3[ 7TZ:n_T~BO2zX[]nl4M\=``su=ͮ[ꙘZYj5 𲹫}goTWsռv=y$9 .L?y67da..`ϖ@G;J4?QK26 % YB|>`pW[Km-M=U-s]nnҒᛚUSӒ0~q9/O"|Ws4h#IΜa2pLjj8WIcCOqHcs2CSl=7onvt 0FW bfZL cԅQuIEerQET!!wRBL 4վպhfnrWjtM>J>kyltDSOM?8;xzthYbgGش }(QVF:WjUQj0QU[ģI )gkIbTrws^h/Rk2P ,lr,=_^E1̓gFrFp;R!T:ZMT]FwfR*槺<wNM~ܹ8OB2͡*H(GilIWWFFbjbuE$ҔHϹNԽ*?PUJ`ѦËBXHEf=.L/&D0agi~_IœLP|Ov dv 3?r128XߔLMJ֭sLo׃muɠ3 n0K瑤G [|$5I,++)-2 h7B3|փL϶aQ^]2g!qaSECK2b uf@`&yrP%#Ǭ l3 ?=.t<jΎ BE?0et)q|d;YJߘiL ӑHxJG)&AuݕCLڰHFL=F`2& X LF&m Hpk;z7"##w a;A*0?8^A\_/PXQoDIrG E>蕐ۄeĤԯ/()'.5tjnJ)vg)H %NJd6E i6d-^/tiNar_b?Jyh_5 >% R_h{IF2 ell(L,K&)?k.B2 ˁPTQ\cr(EEIo!UU m cXؓhni~Bz iE2l +R8WV@BBcM!` uU={"80Z@JOT moJ7WV֞?C< 3345a"쇃 \S6cijr\V |%DՍBnT1G?6SIA`Ҍp}pGRr 450B#@A Ej|oҖ I ~x@/gC M5Y=>[!2P__ʈCŕ(oTu]!#[f'|/uqOPGӖQK?yE 첢b;d;Z斷S @cNBz!eP#GCycEZP ,FTPpE|&J'%EYXNx#|u!3)<"$rP. FIr (pH$Yb7GP>F3Pvyn0dd:#s飆g[6sr|XL82 Qs3h6ֹ :3hgq.; \u7Q#GB/(Qg}S.5*u9-)dy{:ښ\ 2P_řnf+ȥ%y%`ʚED_[V歯}=$.VÞ*.Lwo2$\Yo Q =^eQ׈Ӿeeq$%]/KWZ3KrUـ[,ⷷtJ@33MYEN$/C<+I!DRt qY[Hºd B+dkSݞXɷb9!A2,aAE2M=1pMTOv#'puGPAJx tkg}mmٓDHy1pXݻ{rZk3*rYOLd({Nb ?Q ax]\ LKK t8dGij`}wp>L1c!w9A->jW+|lmP{yq);%!%/ޞ0ez5AFJDHTȌ |DgHNB@n2#5*J*-ޚ*ML7֥U͆9:7KQ XT\ j ؅8JOJ>w qR$\FuK]3)ܿ<ݼgNiGOO *E*/p.?u Ra$U>"u* ؓ%$$+62Yl$9٩kq맔zEBpVl<G!G,5H"F-S7z: ۻZNO DTv72r0WKDfcSL^ڲ$ߌЬ@s`= ~S"(a#QB|To`@4SѦ2ti!w2>Җ`CFHHHQXzd,:7x ֢!9ҏG&T ˲OR q{gsnz) RydaGӾ'-Lȱ b jЗ H 6пgZ]Z7wGܹzSiՃ}/#̂I^#`T$"918CQׯ;Tp}eMˆY9,Q *DRF@!)!uHf2eX`okN@SOd!sg q}eH+y,b/]YblzX2/ ȽMWfA Dm(/,M ]n^ǞvB?x"J 1e" XFGdL$?7yv@wD'l3O#!$GXvPY whiJ vuQ۠]JK@o%f4eeqp|"cY bb3 h߼~A"~ %hJn@@į-EdfJ@b_5B̩x84UG*UeG6w *JWz2!Yx OlyyiԀ@c\;lWԂdHFwu&gGN'9#!"/v룴8߬4R͟UzY6G.8!B _x12X4<0uv[_џ\sXr@F5Isg{~f1#!4 i7o6)тZ0SgF@Nlm|9IMJCMPo.SZPzd8$w./-#;B|}Un܁jNwat<$ K` cg/Aa~*-i`_\q./$z$UKŕ1G02fpykc5EE6j ({kԤTR!!/>6dD8m >j>7lC6;OJQ٭HTk{5,02Ù [3l mT!tl@)ZܾYZP#C` G%k5Z-? DR#, *)!޾/:=Ū)X̧|,w]1䘨|.ק8Q~W.2:%?:QOiNN-!P՗9iqi!>~jgs0p_v 8c4k(#wP2넿JzVPPSVH|Y[ Y?1sAt5!raL9aLeڴ"!a;'q,i圀pJ͉@z&b5v`%{]/) J tvz(Ϗr|2z"䱏;Alww7L~^fRfFhj˶ffl68g=Grkŏ^_lollCrHMMyˍ+iuB(_EeOޔ2\>2"`WpT[s.rA'0ׇ%bA'Y#rؾuD(Bf ueuHJ?P5#X\^>k^Va}kt, 0ͯoGGչiwu41 M)knˠPQJG~\Y]԰(sL608{T6i&wjje{K@o/N-ύ)9)#+>\ې>MB?hl\RgHC} /F%bTY8bvɤ0p*5bFgɉ!!IVf&*?KIZ < [5#:2 HTS~RJ|DNjHNf?I7FnRkw8?#wobc :[aRs3m!)%Wv췼HIIJ H qvQ3K^gxf@xxo#`BZ烪/k*QgHuO[{^>aĮM1^^\/!$f4x{4}Fl/%bx!H' VD` X?'zaxK1 )!(*>xol!tL΍2 m8fx" %r}3Dp9BBzXmh!̔2.[BXQ0*/*̸ ">tqτ|2>Ne%p &2MNJEZÍ%/wχ a?_y+9* JpI`vn*ez^VzvJ /'Wk?j+ᩧjqaǃ"xPXa Av k4?;i*ˇX ;An!6TD5u(:2WҜ= /`wcҖ99y"!,7[ч,tR"Tյ16耔4*bH|S|8H41voKH&}8b7.#N';:kV߼zlRbRocbrO,AG'C| (K r#x k:f(ŵ󳴤ܴPz{_xLJ !t.ꔲ'qgIc$˲3"}/M@5'mˋ\D9by;mÈInOm8GNMtL #"=Unvg[)K #7Zfgm<BEP p~ HCt)DFl) zØCX0CiKl42!eR"#nn6G'33,^Pf&.=AM1*3IRvPCYPF#.HJK<.F?} m>?3ڐ </h! ?ly 2j(2G^D#~+H-Іaf炬 /g'˿F0 WJ0(o}oVD檆LO#MgRXdaq%4]FF}`"js^̥E*#UYvzWsK1Ɂa>/61Zz@C8>8*z*H8e/_UPHQQ2l͐7y(aOMIwL~ NG(`;@~8wo $'\ˇM&k+j܃Ɛp)#6C&e!/`v\B #qy$J:Jt"!<4+@G5X!QqEBGBh HCիxKwY)n-5szb*' ~$le5qH4)-(+(>c \1l\0HWʋ 33"\._Ufre?!:EcTz_G nЭ]+=[Ty˵?L6˧ j4ԿUe} C]uwcwtuV+0fF6ذ0/]ЖމsTJ$Gl e qs:Aم)޺ r? ~aD6 ٤OlTG immХ}3==5jkHH2Yt焞 :1HBG]Z8coxYj"ݿcr%ޠAM6穋@[Y@Lh[# ȣGqʮ1[od(]G<}^}sXB[\C\onEUi$~݌a{k6&@A q_2ꇍ@A'@PP x0J\Yxb1stUSQ&2L㵛N1h.H1"[hn^fKKӔN ~(4>JmU^+;l a {{`rI4vk\|Ez?E!2!qx @)Y"76WR"iJ섧zxbZͯeKpt?4.&ׯN}u+Z̍DΥt+K٩Vl&E)<>RR#HOyf lr g.)Є!׷CÑ6tݓWX* ݝXκݻ_Vĵt % Y00G# $T>7NZ[1%QEzj*ܽ?U2lo,>YF*me-V*#a 듓ZII>::*r?)!#i>ЃY_\oNm]/cAdݗxտl?8ЉGc}Osm9oH-l98 H䡋F'@ 3;_r/_:A-&T_OQ7Hsz77Vq>{m;k[zo"8N,F'ZY]U1BXRn/̌ZbdTlW>.~ [/k!twT,XY{ό/#fo޽zZ|T#آ2%%0 #<`=uWH`#)c}y d%=yt5(l> aV&lm6߷/n@QaʒGGU[rF07C=;4CpBȈBe] NO6IooG(36|o(sD*OAQs)N!9!qw> ;oޞq~sK1aqI1~ׯ~j\Sҷ87>7'tL-?׫k)11Qި|9Ԓ92+"Ѿ՞|ei31 ET\iH=_qy1 7aF{po#@H|F~㳏oKEa$؄omL!913Oǜކ AA5<ãmɵՍaᮡ7e@տMOxR΅c!Sd&@Y{}q%Y4d@@@o,b1#Kٶ"ETՌ$HgQ(&dydOD@b<>]귁L$tOOdnt~BW1Ѻ`Yz++VŴzqy*71p9BZ*=|_OQso\,w/-R'h'l鉦cI; @}rv_˻HO2~.7/ɧip(gk_#(pb3,kǸ~HYyMYSLH"KYTڐ32xQVOyuF8h^Da(qm$#=yy{ttR׎81AVU,i-Ǽ q{sI*ej,fp\G'$e5#j_AuՀ+^ώ qBh0IdVxvR3 +}DZN`Js~c#t:򰈤&m g^a-/I$χdyo~}NC )VK k$:B J:DTP8$%2*%Sozs7WTsWdwJMFظKl>6r?jZɥH3n-oaZ}r&¢H0D{[4AA ZH3 [Kh4?DQA`[8(]sR|:Z~򋿈"8ҕ/pw'>įg©}_y%y>u"ﳔi%!,G^SrHWΓvsJY̷o^uFw>޿}ӓ; {# I]p芝<+)QgGd/wo_FWo,4P"xWF:EXDq.¦by$N˷Saf%AkK,Ӫm`8Bi硠t뺖Ԗc^ќ7:pr%q~qEXBnh.4E="ۯ^3U?>8lkGF{@EM^1n+i<;X.OD E僄P3jF|,.vS8+Kʒ!uS9I)یib I׻n۹ɹ`?2O'b}ezw+Ψǽu;E &\?X%ao!lme%>2crGx/~mimq $8pn~pI0xYmFDݛӥUJu"#<]\s霋@y&_֟{95=25" bVYEno̱Pp_G˗omeaHKm&L\2/.̌, ,RMAF\Yg(Iہ^yz}!c4O8_j"=Â\9ޓQ򨣵xhal:aH&єMg,( (Txl[$MBgnֲX"@y%=D͍d|Y:XZ_'q1ϩodWDD䙠#8*/BG$q#˯O}$FR\Pp6v/cH R dMH* ~$Mu!H% =Μ1^fA=?UUĭRM7"Mks~kET6w|nQnaLGL[ocW[j'hⲒ&Vc UGof}m3+%#dEB4+Se: b9lН,,>ҍjHSIVYSZTT1>xr)MP_X-J ON ߿/-q.1>WAQYVQ Ce.,BJ,Y"kFbpp$Q`(k߹ɉk;Pa%2A\d5a?64u GryJ ‚Ц'2IEE~@eG6 NƢ"b"]"=,n\~Bd/5N&D ayVDX"6C7vz~ jSѡ>1*r>%h*/8\ǗX7:@&ZULx)BA[}w~v<>40 7'ۛcA8:&FQsg4 ^*"`ѥn?XYZM͌sǨ O0.pnwcrua ¼Hh`E-9*DBRI.:~%_I5B| ːzzoNO9^쬋iux.P +.)?V;"rb"<!6!4S҉QȔ 6LzA! xoyq2A t|nqO#x}幞Wpd/ @z%"}G |cqA~Q!~cL1 F˳(n-u鲉QP^8%}났͐gk~룃Qn667v]Y LX3ю,ߝh;XBmT0]ӣ-b[7go^Mͦ%łd{_g>A=^$/;wFwX"x1]-X<^7NGGSĆih­.l*lDbsiagNp,/JuKEuśW'ө Q,e 즭w@2{ 'F{y [}Ҧ@dThÆ7o޼y5;6}XJ`=)鿫, G$Emyg'w# >6aIua8oY[^)ʊn?n}mÛ7.3mc-K:dv!l3IB lvSpcXP$L0A ,KdC;W@&[_i{vw}DZ-W4 +䘳ahsu<5&X8ˈ:1NL|R;(Ke5Q(%¤Mzf3xj^6OocM}xghmi9^{6R^rww6hG2"?osn-*X|`B$vEHe NL \edfوXH%5Um'Crv&&<@be;!~EL~qYq<ݵCu޶.-} c#S/^vMc5=3bjgePH?LMUE)I 앥PS ޚuC=u/:n>zqy,djI0&h:q.   "1 9ܦEb5d>56R\WW\d)_/X C쨤eb~i-o/*:-&%.NϜkʒzڋ <Xv01 $twT4wwTuUvtW;[:[ʲ㓓}߹5@dԇ:k^5 U<P\GT"a} [ sRccc(V2yyI2Aѩhmh*%V֡rT ^0*,.*<ؖ5(K+,OJO쬣%Uo{y?;0,?&K2XSP_PK#<LeO[%LʮҾβJf sBhh(b/<2PBEvLؐ.Vq+?-ʵY}xHwo[- g߭/_WTWɟHbS᯵!Wʸo[k*r~Ź1캆Z\nSM.?fE9efCw5$hr᎞VKEoJv!U_TXR(w[SY]uaQ~jB?wcd\/:FF^tqPTP*YEfCmJ\%$g'GG^֯SP oi"xPU\VS_WSWXSX\[R(ׯ-k+ SR#|ݺmaEe1E*~WsE{cXMe MVZ}u~M%fqܺܺİ[e))m&}-}Dv f+nek֔&HNuywTS ⌼tÂݴ䵵~^RZ2QUƨ++n(E7UxQ#m]R[Y\g-4ߚj +3뫸`xde~}UNCu~yqF~:X}'c,+բ\2]%io(/-Lf%C6o-($ZՕe\,ڊ켜PS^N rxh,1˒Xr -e-uE,qZ.[XW]]S]YʩȪ)ϭ˳9م9 Ϭ^VUQ͋9 8M[cQ+϶{)-sܺJn5ׯ̭/-`9EbN$֡RXfi)hdoxZ*ԹZ<,<"'.䄐/W;7>~f&S^WSRU\P#btm~$X7VVq┒rqAx9E91 1!AN2jʿ) hi^j*`EWPWX_"5fht٢w!Y 1YP{h!Nfx_cV^AT1>!zZ)#Ѻ3cl,kuUe鵕ٕEi9Q¬~Kx&)a>^Vzw~jJ2KVOV[ }y $"<$CYG _1\C6P,< "WfuIfEq*3?+6+-235,35<+=<+-"'5B\63:;-<#1$6܃­_={.̭2#ayJrNʒ¤茤ЌԐԐL<he!/Bav*=R_X\G*SYRd'g$&e$f$%(CC8l}>jjeT%7V|7NMhȨ,N/)HψIOIC99֟'d&fr$(Q:*J_QU$74h}g;T>]uT%[8<6#tEH'a!Ht{qBrzXbSqvPIpw#<_E\io{qO{9$DZb/bx;*ypO )'b}bu ''>/!ڇn.\W tRajPD$Oj 4|@EVQ\U&  "lnNTfrH|7q($ 3;IIK t~PGC/Lodf%%U+*Jk*ꫳ+J 7aй**̷; '$1꾎5>H )c$RՈ2-4%$:׃zV[t$CjhHSGwo~(KY]ZWEZ:(-L͎L N"asD=VMaAaa8yZW\EyfJ@VzH^fDQALyiZMUYgeizA^t~NtjR0`*lCl‚Ã#B]9{YX>3'ٜ9Y9e%ՙuUYu5U%";쀄ZTcXSd# 2ڸ:Yܼu̯Rr3#8!HU'QAs) klB||mq7 1aLT'ˤ%d&pGT$X@Ш }oנE @[O+;˧*+ݺo$eUYR]!҂tBC~NLZJq\.g6hlrt"{C n>KIOK #/O'*+Nˊ S4>:3/+_/Ko+qxX>DZZ[cDߴTUlEYJEyG~yIjAn<_!>ƒWccn뙇s?/~~ŭm=VQx|J{-?7<) 3RShKDc3gsW'37=-e3_/ rJ Wo<{}[JWZ_~~Dc}vG[1:]<e4 %ָ ]NmB@; 02jj#MYMJvEqtUA*g&+2퉇cW7ǎ&..fNL:=r`ʟX9?vv0qq4w:>vl cGSW>f.mki<0(=5NLDy7%Iq}٨,g.];y8;=tyh@QemΦ1anlTki!9 yٱ29)^V^\6) *5)<1>,*'񩃕)ױ~ssOp}gfRJ |rp^K\gVfdanBQ~rNzr4qV܏s}ύ=~nhcedk½K.'F .0uLO *K(,HόIK ')KzgVOtj?5ղ~bhD3-e*|ྂ#ggswG.O=yv>x8z{`Em\}=e}{:4nT|-5뚪To~&+ܝ_(聼}G+mM~]>@H_]-jxbʪ5o*Qyծ(PI5S#ys-L͵,Z[wu =My{*Қ7T^3}(uIUM k OL5%7{GT?{dj` kb,hafgbgm!UKd?grҟ+}.{Se~'w7J7o++_UmmncceC{G73~λxmb``}/%/%%j d{2p]^m5j*t4-븻Y9ي[5ԕki:Rmu$j/:*7asjW 4%D^x ;pcf2b)*2T`5U6EF`muG\{w""3C-48$nΔd]WP(UF$+gR\{w>͛u[>u7~)uԍJ}v֍K~--55;zR+::="Cҵ7<{陕͇ut>T#}w#*HS MoՕ*_R'`\Mkdlx:[StE[|_%O>R'bҽK*rd>U"e]; e^n}sGFJ\󙞁e-u39I}uyod+|)%UQxSMG6&J U?7җt{d-J7>PBYDNg r_jzjXPYCYZ_γzV&M4kI=6Qrqx`e{7t*\WS$MsS n)UrSV R*:;Y=D{ te[h;[ۙ)@4oyh((+WUn=2VU|ﶌ'dmh$䡚֍6\lu)*PB%% ]ӺRRTd_WSU;Z=57Q37QאQq.%I]FC m[jJ7U]VUVxx.w;M7(8=p2zHOAOW澎c(_C =z ؙ+H*/eM*r,k"Mkϟ)4/mi RSH_k3:R717WzS[YJQd>S[7 PGVO_DٌCTEQFUwz Y[S *oʫ*ߔLM }m:7͌uLUwW+[ JR: ?ѱ2zne'GPt]OmM[j74 RQ+_UQc/o'M ūSᮉ Z BhJH7. ~Z gqd`-p&ØA4'ֳPkv+?4&~<5vv0t~h\DDD#݇zJn$AfU-UYxNfO\]̍tU<6Q5r~jLcMj,z#ŧ\TCUSc%m;+-O;_@cB0 {fzRྴM\nVbj✸$L rb '&ǗWSI%gxӊ5ЕUz``ok`둞^D [\"Kҏϡ7A.EUM\D^jfz~lkkZZh{IO N NdJEIE{dVUg 2X6OdTn׽i\*&95-7]p[Sn_O@O-1?xD^7jjd\`idu[O󶩩Y\KJGY~멉㽓c}S}3}OME }LE&ubicafPO^CQ\cz?Fh墵RRA#@sC1v#bW';-2#)")7񑑺˜FSNbPY^teaȡ=c=nǹ~0.S}I猞Hmi~ /GˇfFz e=]c<=>5505>0=983=z Bx =;(*[a f%Pljͱdp-iqgt>=579?>7Ey Oc czl ##+#"1>0c=M)m[~t0.w|I|ӱ>AM NM vL">PUf}}iqnf$S')5QSmE#V$`06WaίS ,FtQ 8Ǎ] x[_!{P3}u5sGO3Ō$4Da>A]]Ӡe{x\d3TW"2y kPNXbO5{)KQ$4!<GAİ]ͳӽҼlaNzRkR[4dO/I0h+2,ҫ_.2H'@o{WZ?p7sS^#{1vեIt:3gf'0cy~-@жցš8Yx571 &ɠtxi]I FQmy ٩<8 ''|Д z*wFה$%;1<;58;6`NLO@3h p\:|ͥ8p6JrZ*WtC ۚFz$pgf&! ]8G@ zjpRӋbzXxǾ L=,Di ł(}jts. (nF>_٩ѩB3K !! "~XnՕUp&A q0{]HVo,p$Ԃ(ĝ.2މL ܒ[kCݽa>AnVOn={P> ]<231!&^nLn.O&Gcp@6@KnAnڑͅif{f&F_g|~! [ G^J+1GUᆖjg;[w6FP$Uㅔ=H~ # g0Opx|cUCxw35m@>!ƪ! -63SC`KwĢGXpKl} '@4X  t瞏G Y]Ԃrftfg_.ώhýjCEht.O_:w qj&cg\XLP sD]yY(Qgc+$m)>W_}-R "|u5135 -/&/ 4d<P񯎷r3r㘫F8>05)m/Y ϓG>w9.b.`HPGPFY%,b `H0>7;;35+q^ quZgg;-!9<16PU<2qcy ־\D2gÃܝ'Řbs"wTN.̎/2^`iv`}er $O@̞t42Mu r23ԾcՂV3c/3=y[sp eGhca[HI>Q\/\euKJwpѸR ${dnsmȴ^^|`KK !d6̙}tan%:?φĨMušr~o}enj8(٨ uNU92bx(v'պ&Sudߍ?SF nU.^;>"#ہ,w=e[ʰ{9p?pUu!3 h$"$.&T5"\V]J"g 2Iybn?Q01һQY(T7g&G/~Ig|xv91NC uU7gйv؁5 N`pķK⸄(TNNvzGcbcDּdf."g됏 i9!{#bt?Pt|)<$CKxe6 ^S&),0mon'E8`央|+2@>0&FR?.Wff싥vfbrT3gX}=5GW҂Fu|t1 x?;_(D]Uxiq<6r&`Φ Aنa-Q)7e*DpDnAIpO B'XkiyGljCi`MЏ 4n̰jzCdRСBkr,:z7K1AV*_$6Ov!VM/ƄGF`z=*!'X=ݜ͈\.E;q4JvECIBGvfJzL;g[QᎍxtVL4GIn(wC*U0m)0P pѴ|| 꿈iOt/,~H! lA%_Y]Q!.z귳Rd؍fHHf;k"2+ C0UmK VR:镅Dža=Q;<;=>ÂB9G֝SAod=;ކ.w$pf~spZ&ۈ9X0zk[Mmcs]ZwYYfySo'=ᵕGFI<Ft?o]HvC}xy~-.?* xK0Ĵbywu2G䒈bui͡MOJ`&G8,o%D[džEtV eB83S-fp6Q *{@4 <6e'j8'QPHAQNAqeIUt(?&fudOm=8N̑@CGY=?<>>&8C5:l×bc} e[E^mô>8kq=Oq;>ïxgs'g$A;ENͦ*L`9&_60?$?,"HRJq\h#naEA[&u,/J@[AU` immMHWOȞ>+㭽_}g8NAN&Fw> gP O읛?ND];ۇ13ᜑ"{)=1n嫫ǿ'8~+_q7{_ M:FG9Z?5н^^}m֋d, pewEahp3T赋id hEq!肐h$LL enZbr\P7}꺨YNppDMLL`Aāȸ57ݠkIDAT2њC*⑽f]u:Inog%>EK@I&Éow21ўIQ ~U^ڐYɴzk]"{,#ܒ@H!*katT6+uĺzgwpp/{wgw;/d.?Pajkkdcmmle'dwqFu| oϏcqpSm\1.-5+[+SS:Jԭykj@ _=XL rp8㪋 ފݍ&7BNȐg eUO󘀣z֕gW)*P:m@rjbxhU$Q+sM;Υ_VW@MmLBF6fiS|w sqBgv(bŕq$#TkۆF}z*Ys3cM/4GM\PܧY<:={eyMCN"Ӊp@C闉Њ;[[zX#oQ1Y=k+1̸#}cCuT2lDDvmep~fؘ II~ Ǯ޾9g̈́īSE 3S_K_Zs ųf AGaIGlW՗g s1a1)IAnՃt?]USȚ~/&@#>ұFpw Y `wC{vwrR:$N$Ҡ4:{uFNrpyvakaTCE<XqlM8?=$ HdCxMX!ֽ]_Q+j㽑QVǘУ1ҕ!1AeNbD!1c`HH+Fߢ. bΣNeM_$]loW7Gy{[I;e~fQN;cauSC3#"J 7#zOltrzB tFU7ɱO(h-Z^:3^6"u. ys ^o,oD?PGK pk] `Dd3Ce'J@F_z'Eمt|kύ'ƋԪMG~ Gb;FӟԔDYE?32]sUdSӠ$Soŭ+ ;}F[vbpUI~`k+)IC]Y0u:}Eۛ//X#7OBWoz;vv55W+L{kgU–@QLDވ Xˈ!/Qf)"~ *{fz ~E 9_ *byvzhTp Q!.HKtȏR]KsPV_\ZUrd?c/D*ztYT Ӌa Q}̔#C̑,.CPiWFt*8E'Hv*=;K1!~ڪ-FSftdԸ+wB;"Nƥ0#:;}vuoTc&\L_Ig& m2}xH_?mjUDJki=i(im٘: V읗$o)%83^&X󾶩[#m9x}MB'd~$}϶Vħu};#qs;AhowK!ln.w~j.л4;=,ߎe..$.<rvZldD1X뎇R{C^ުΝ`"\IϽ@,|9㢏yD{%Ykv/j9&ƿh'Y69Lq vV,~ut𸶬&6->֛kj)+hs]y/W2eB-^|q 4~ :P'枞WVG&! 魫zCu͍?<}mͫWc\D8hݗ`nzj{gf M#"^DɋkJT{AoH|I$puB<\8+pj/X]4a[/Ћ 6n 9WXO@pzbIQv L){J,5y@\- . -ה_;Zی rQW%ِ hmz4:7%8gB| AfBJ\+ȻHݸjmqI4dC[k;YS9(Ba|p6 }wrRҐN9*CGY'"u_AÑuuEQ|4?WWp&#){ZVqj^."#5g:!@:l.n Yq8Av9"̿ZcL0l^ⰘĀ .A |Ёr_8}fFfX[*H-7vJr񹈏o>lc`pE'PW_bmԸH.Jkki.*`쟛.Wo#-<$Έ8O:>8*-U@ ({q,mAUp|xxqY_A"(lpOO(!Qv U͹%/PPY_\CWaW{/7_~꼺$1Oh}\^JɆ^Pow#mb >ׯ{35ibdKd~ #SH.--N@}1c;u> Odpuv9!-/'Λ /M$eCScx@hb/~*KGgO8p$bfw,&A]Eb{}~_gDdbLbG^٫#fĆ9'D)p37v!qXxħ?921'*|X[1A}ThU\~ʲTU a1}B2(Ң9MJ :+:S厔?6V#9^BLק| Cp?~En.k+b"&ayOտ*/Kpl-\ "4$~@y!Ap[M+Sb&!' J |N;nn ur}.#[-wSh/\Fc!W ǻ BpLD5~ p+w>xPo‹Mj6EJv-۳o9_]MN\v>n _NKMvo[POd;d ߆]~2IYoWc$"]"T:n/dW =ǧޞ{#ye0:!k((n]c, 2?9 hMꔍs:YFO^Wc$̗#<*}\U&(IWӰt޿&jMMAGk4p=,D¸U?e,D"qzvR2ͽ 'F>l)ia ?Λ< u u pv{t#!iCUZk]nGG|"U$cc;&o>\Z؈Aj91pF[769.b!*l[ voOwvR"]GG#JYᆓLڦٸ<0\E-Q0HZIp˓n`~ШIKd W]QOk/& mnL22>Ő󰮢6*!!䬬܍+[H:(\矰$TBGGt0 To1dzEڸNP=|UA.V4(4|$y}E="QΆj(2mkxptcvzP;qi}$& ~{jPWN{U啥ԿyT[S"q3{`>$kZ?}]#X. vzblaלRafOдgg*EM_S2;NK+QWI:5r/XRff8Mir|}dZM!OїN MK$5lnpcj*j;@Fe5,&6(e ø|zav=&4 \G$Hd+騬~/8 +A\7':v@8(E%ƆD{:i+} |M(1 dK`ܪBrxCRoHUcu mLףꋗ!9<QLJuj~ uS+./pkk*d5xJhsc 8`;NRs$9&>V'̴)x(`zk|]]e}u?Ní6HNLc@~8".|_q B|${"O]O[`/MVQ ?,-[d ^mEsA=/gkOaR8=?th+͐y?Vmhm Kݫ{D2N+ڎ?4p=DqsÕ&&C}uOg<^H)i7#828&_1j{{wvnv\l5+K:ԎAmq(4Gm9%2.#ImL~NZftz^^.J /V&w6#T5_=OV> E1:\94]"{Z+E {}i*08 *JL/;e wߡոGX2< 5-==)8?ہ̽;-1Agkp*Ug83  Vh",nX^?9ۼ(vc0J Gy׭`?%rވ7yc`~&3CtDh 0@kcu+I߰ޝD OU^HSgRω!Ќ B &<J¢Oؖ3VY]esX#."񑡑_VDbQT;2P gv!5X + Þz5+X7glt>[SZrx\ \`#m5%nļibk.8!h+K7_}{5r̍E>l^`Z_Z1xvj'g}Bǁ[%!#c]$#;8"q~zse3k'=YGmuY1arMd(A/in գݣS0GuDԇFeI(ZXZ=1Zó\¬I<'IK!qKl`l=zhyn=&5ˈ`g@[Y(o35r%Ո%:zUcRx0-?/d+cJBjiz3S>%ꘘ9HpAx cc8!,͍ u?Q>_EM [5m܋@6n VGUUn_ϥ@qy⍈]'V !9#IQC!4ujo`}!j?7[["=<|v޿EGb:0#1Eior07ӠO1 EDagNϏrus};96:2%*׭.S6`qwwkx҂IG14!2*^0cPlE.xt)y8j'^D*$@,! *hCbJhׇIiNQX 0{wnc! `G"݌ R\r8x5V y`C@ ӯ߾il&%ChWSˁ?H$FoI&+q,DA ٗեuA !NJJ2 PO4"BiBP xPW2z}~>2,@'``{__=)*(Y]]!140}B|$e ]-Bj꫃wO֗"C-}%5aGC!an A$g +7,*8=G[hXl|{~4OQ>4|j1X1<@)|D uH{DFGYtMM2\o\p l0V]_?}~xpZ[XtcG( me\,1=ݱDG][^c()^߼cqBc~kHSH o өGkv3&vn$ #bB R\S4E~r}ޞ)4(2991k&>ũ @hSS3 H!<(wČIB(bhBջ/^"gsGҡ!RJf.-t.sdEnTo /O|mi3"/:))RI1JOl&K%sRt$n]ћ{GYIɤ!!>rq/Ȏ󶻽lt5*wgDŽRS3^/^plqwȤѐ Jϟ(cqh!^?m uK9-9>!.K M%[R?)*poQkY"z? $..(mm Lz8mR?98D7`9]Wo;OKy!g[V#Oj:#$)BV(8t+l7e+tb>FB&Aqvr45l,n}~UIrws"=)&Fڇ ['C*X"oxH6dh`dxQ ?BYf&&Cm,XvμD1zBTr FI4Z[UkʓZ3Q;[FV@JM\qeI5{0G]?{}|~{~zP,ܸ}ߔ\0_7ޘ}_D yVaf}/_yw^Wր#[mey%ٿ//h͠z{wK3Ւ?ȇ+td%!7$}`pcd= kS#c9 mJ$k&z}eZD?( kI''_Lwwg̰Y\]݌ lrϒ7 $6(4@h< p9Fg02ƒ,"@RDyCU ,\25V 2"(ЫIc)q0L!w Lhܕ`@oUٻn.*U-eܩ=7̢⥳$aWhq4+of!/\o_+Ga68GD?G Ą7)i(dZo.CdJ!uWmc2"/٧{=c9!V&=fM>>xBn|܏+v,#`wPGqR{ш\ATtTĴz{ GI(JlII)O6v7 Z_;LԴmX1y_eD[6v5 Um.l_$S`}aoq"#nhcu,'jUqeP`Gw 2$?蟸4$'ǚOVr%Jk9qK+d~cigA#DVBRv|xRWHAQ=,JJB|K(8ǽQ EdifxB,5~C,02 c:.Q+smˆ3W3Lh3a-Ql%_ .?xv坝773Fr0<4Կ$w9PhBhClk_$6U ʵ Y&:&sqϜ40Ihaa$u XG|"B >sS-TsTB waZ74^"120}dW/;eOƪ4|{Ρ~O4 D*G,W- a߼0$hs3Q!F[/ 5ˎN%q (ngW莾DR0ENZ)Plkd-lX{ሱ%FDdD<鑡~Qrekchax$Z4iMe$yixrz3!1`*&+{_WNDEYaPH>,5h4@BIhigpxmivVb||S%?H<8j+2%²*5wn~5I"&>j% PD),_扁ў񡺱>:|ׯ'Gӓ0 VkdIQndCUPwKs (ЋcY\1(hO!("o1<zGqVT|/i9`Z&:''Z6r8¼ĸ뱾2I}XtaVr,l鯙mD4A?'^ < ym(wД6yv|5Ȥ(_:T>v:*zUǶrhD2嵶Ɍ.%ϮZAYѶv%IEEEApyqvfJxZcMzokHPt . = $Aሣ5&_}"tOYR'N ҟ[[DV<򢱣tehXT  1k/ -RAWݝ5U9I1ѡ^^r7.=QI~\Gk@@X 虝xmI^^2&0LJ6\_UC ԉOmjoiIs>m\h.,,NHyGH?ىЋ&4qњ@fnԋS/{Ƈ{[ʚk*s sӓ"z`TSX@pH`{G5V׃=5#M/FZGpxQp5ߦtt9:;*8# ւí|F[&Gbzیa5 rii]yNYQz*.Q^!NOMo["dEP`o}ORL#[ a"u/$* 4ySJU}EnmUfEIvVZLBt@r{& 4M wwvT575#\ј'Dp+,. j 1`ps4WwLyaQ/z*G[FZۛʛKko*T]BƢ⢌иP_5u4Z^o,q`@_SGse[KY{kEGSYkS)kWkŬokSy[KE}mAYQFjrTloܽ;wo,7˵]޺Φf~}AsM>_:**<>*{XSRPTWTYQZOiG}IZҰx9P79ҎJ_{eCENWC>p"ngWW-KkΨ̮/KJBWkEC|ыO(QH_Co[5䚲&BV_P]\ZXVWTS]X]U\U{tp]UC}MݨU6WTf4T%Vfڀ)6SRSĕ[js[ *sY% aڏaG 2? x\_C\`oCW{ _Pś^_hO272koͩEO/GC7g֦= nZkk_ǟy)$"RYlEaj>'SmU^&Y\ZƺBf,Mv^ME̬脸 G~F:jz.X_˗kU9eIzuUVME+?։ͩͫɯ+/JKK SsHwd_SVw5KꪳK3.柕U%SԪԊ┲JYyqnt?ƕg'e 0Sxןyp2:ioޡ)٫ ,>pʊS8[]XSWS[WUUUch*,2 @Wk55t /+Ikgoc"̩U[]W^Zh LnjDIƚV|u!,045Ωc3M%uU|r2 RCNDfoWWQ\Wiqf3-WZRJ0(˪˯,VXWPS&+Td%%$&e𾶜o}K˼4 P\^V^PW_UA4gesٍE|w"cnzT|ٓ⤆F;O$0 0?((:q$!666۳ rb [.;=@{Gw~07UQ[R[_Ķ- 73^~c}U6 ljyqZYAri~BQNWJ2#=-i[ ҂Ɗ҂,qļL@ME::+7+2TAN|Z2f~Aa~NOn}dV^VdNzTYa\~nRNfd~ztavLNZXFjDVfLIa2'"ƿu5Yҋne.EYa%q )a菥$g$f%9zn5edeqe y)™3_g&/ij^Lt*Ɏ +̊`}$pq~)1I~EqIy eyaY ~q ўmU]PL(3";=$;5,)߸dH׬X*Ԣbb^&<81VQU媟T}Xs@IKˌ(B*-SK*LK -ȈN `_pg/Km{ tM N cƆ7p w v dbiŗKrs2bqFtCg`@SUC-YIAi> 9G "Xix=U$U&.->0# F9y[Y;>1VWH.iz"q(G"f<".,)Ay1ũYlhP@@o/g箎fOQJ,(EG@ ! p}J2#{*G3Y1a.~||Mw33Wgs7[WGnOݝL+g[cwG3W'N֏\9>qu|dhhlXWCOG5IGZ'#<3Xw FhnE)l`x6!~66خ;Z>T" ?oo`av!~!vN~>V^ao&%fGdEscSS#0 wᑥ#mi=;A[ZZGZzY.-|nH 4>QSu ,>: e/O >ϼe/&6YEᅹitW]x>p4hmX'fnN&A=<:P$;e?r~b`Ձ%Â"4>?"-<%#3? C;SWNv,2*OM咱_w+.Nv֏m;9ۘ8;35г0ra@eOT禆M>5TtSK宁33 ++sCS CC9=]u-im͛ښ<0obXΈj`mbP}#]iCiC=%]-9nkTH≖'kKiוӗֺg+ss}熮N䛦FJtoQvCC5U+*2*_֑u,?3גVxC'w~,wYrw?/4TF꒴'Rҗ]WR }UY겴%r?WT25Uwv@SUᶜ {_(PU,{g7n.-e;r7de(TM*hjQUtWU&:RypԒg&f 5/)}vCO:Pmk m-Xg:&JjVּmMxiߴ4tu|f*1T}f_rCS-=My]5:IlK+>н~\EWSb)h^ՔVu_]}Mimkjw eL jXy=us0jab+ -2ЖՔUj׽3ZwTTWxEI钖U]uohi޵~nbXPWAW )\UBY DQ3u4ʰt7W3T)sGWm;oUy'on`ή02ҕQӔV֐>QrCGf6LTWU*&{M5)=*غFN6=ؘQvW[Zԕi(_6ҿkkj ҫj\톚% JTcϻ:=6wOg|GC|[]U=u)] )-MT NjܻVBzMW㖦--GNOPyo?ULMS|5i)0Ԗ2zbe!|[]:\UmrZjUjkIדz]E=Տ4XJ7Rj(_T̃aPScso4 /n޶xX}jZwuկ*VyOUmZ-h6=54Ԗ\붎uU[jl n0?99F;F1Hk~Օo?ͽ<5RSLlRSX[Mot請 C#EksNccMym+:P(JWktԯߗus}je܈b%=vMUi}uF,>zj{O]2a##CY-;*,PENW~jιVSqHG̣Gv6fz  44j<0gWk|𑶎??GO'֏5L ?Tyd¹@W^O㦙 XO@B33zFU uRw4nkPu݂桫C'ڏԭMM(=y܃373'[*C; }ۧzf溏hhjo>{Wyn`4ALm+çV.O}:XY[=olb-%rJD(㹇3/g^66&.:<$= w sjgBU`!dntG5O ]xXzQ[?շ{oc"6t{]ymp2w|jsg֦::wnUWrs{çv{Ws{bkfo`c(*.أ(|s}ݞ;>qqxfPGQM_uv0 e-I`Mu2tz>,&:)*54&ݒB17jgn騥tP<2 Y6Ã|P{Y<~o L uqaZTFP6fBG[妶FJ S#si&Aؤ|C hk4Gyby(̐dzIA99aYE';(;8/0YinTaFMhn38:}}i7CYUd-wUYJMiRcE&=̶< E/m@|#l"i2E}x_WS~njpynTMiJ]IHDfqtul}|sb}exx/L-YIQ1޸xZ= AUjkH<4"4`O=}x* 4Qp0 ɱ漌D|"܃p|)f0Hmn.]a0&gՆɁZ v|GWgUćyDq.n6ʊ_<лWUzCyj_:--#C/G:F_N:3=|# bUDy@pאոnjAG.4| cÝ/;&Fu7G`;^Z[[nmI v~x#}%5yLQfSxhho0satfBqϿHFey^}P>'͝Xhv{bh8}393Jiw~wn9!PH'_ҿKcmijpWK%Ge8:*הK(vWOO.BZ?K r>Xq(G- |}&G_&DG;;k*_v- G:4sSPZM// , vqByzom}+*Ԕ0lƪpkyTD\&D6jCloo6V։@lkxYWfQ^@CufG}BhH!&X?+j/CXAD=~wt|;)?"F;8wt4oЁ8ٜ?-jT Ӧd#?HAb  g&Rbc R;v%!ں"6$v_PvޑnUN(r/j=Cil 2"h;>26P"K*T@>뿸& w@Q@242ޝ*}|-0~xA+3j+S/W n)\g 40QГ@;ͺ[p.*&>3S][.fz]2m+cP NX_ ,2N{;]M(9>r0\_ɠ<x5̏_|G:':X|y؇*/b]uwtC?FC񒓍\}u*n`7/:KV36~XH싅y#Mؖ !xZ]\#JܽR-;~Q4ӉVotMx`j8;3(rcrRoLISG2wר2trACme}A<>?=p|d2,ȋ$"智eoH?@Fvb8=% D&WFi8=A!nW!xX)^RѐTU{/}|͆ #%O::np?9ZJI&Q prEY\gSQOK퍱 Spr1'a#|ONw4 Opz7<N[xuQQb( P'7jLcc67fc(zysea׼yM!#tgTBgN1;'GcdG'+U94íZ ]ʒ0㖈}"W0 A"&&k+k> U,ex w̝فݳ3fdf.3-KdIlK3YLd{#]n\Uj'+8q^:VQBuYN[sDݦ{r'SM鬫ǎ[=n4&&k+r8|On2<.|"CTޠL(uaTY]QvQl,5U_]v·@S'mX?i0vs{YϞR Crǡɨe 2!Nt}1h )TUdSL|*1[S_}C{vusS'*nh?`i>vVVzP⬞Z.AFILPJK=QeBnqm@g^1c|l3>pێ Z^G.ovQg_3٨?2(xQkF(0LlT fyX-=sQ.xl"G)"bNTB0qyFPOl;;:3Μ9>]P ϊȔ@mtG?V?Uxت1*fYXPɭ 5IdK_;ۀ102u/GѲyE;PuӎbD>:RU^p!7;f~㶕Yk P< 8ě].X\ V?I-5]nzs~,L+DE =h1(+5U<\NИyS{!ρ9j}MV<Jr5|&%Nǖ^7]_ۄĔ 퓶m̱oga.Q삢&~`n AxpђIg oM_V#ثi̱k?#7!a+@&-6u>Я}xhdI2lڶ 9q\ʼn/GхehZ"kɍb0 #tv%DA<\S\2sUcSyX-"+FP'4lwOWwfr3ae abZxU";$*)팺#Cpw`Gv/98wAx{#nV_W-R\ς#ˊd[dF(q*s',犒J'@/ww +tUSr旀T!$dE(G v ڬssv=tc[yٙP⢄ƺv+MD k.רkN?qR̶3RNWn) |)8"s 4U-` F=8:Ԃ̴X^¤6<]͒\:t=ɎqyhB mG]]9Hbw޸nl߆_:p+:—Z8#Gr:6d{ӅX{:ڼN.sR`UV7$(? G:Ոb=zxA]uEGT٭ރ~Mmr_,彎9B[iqy'/PuYy{ڿn9um%"T_W,8>!zJ qB+im^ ?QW幺cf3>@$3v>jk :υOL/F/(*Qܿ?š?t4w1zZJ"/Za\}M΋l>*%hmAn6:2T߄% =RY4c}hffr ?ѢL3/NJJQwۘF݆f8nvN՟2GƦv/&O%7+ @IQh6 d P0Ru݋F߶d.[Ε\mUՋ(kQqFF9wqv߶a_:^\|ZA [m@Kg#k>EnI2Ḿ~5Ճjj}ݜf2a){8-͊@׮ZJ{@E4|+j<-)0?* t&Ze>V ʹZ_[)OJպ#z[2q"c~ p=z0A_c}s_ 夃LnSic2G qƅ6uW@ 65!QɍɣVF㬏Jş 8B$Bl(ā" hbPjB-wKgu's=6wn$Wtִ#zY8' /}xoWՠ9X[v SCAv^Y/&jODLyv@1^h/>}ݳ$-]}xa7ڳdo5OMB60 œ.q>>FU++cWBG|O9im0}C~o&6Twj_sz(qiPA>VhO8|Lwv[P3ZnԵ1zGN/P9P="+Eg3- L4v =\KMAF(_ǒ_3Gɏ<Gf/ 8b~gwmf6OI %j[snw;~9gM L1a(^mmOO\ =nup1Gfbst~敺<kjŊKC,cLFFȑi4j7';דOXYO^L+hd$\_ς#ʸ"Эo'F=}1\;_8#tKHg$ifXDlWbߛYS. 244*75xZBg;:#3OF 4~ I#C#wJ]`d\'-kWYtĵniUMtQ"8>5vpJ⪡ ^wWONK_S--fuOL8gtjG %0HYHǢr/L<'Nu㫪 ѭnkg`xddEsCc/nNY͛md}:O9n/uJ'sAn[ 9,=\I7>4C]CF^\սjJ:5QHEgݗETp qq5^qL۽tBNr0ǍIZhho}p1_>$^WAڿy7 U˨S⠒(kmT}Jt+ &H@O{C4xq4pZMgDH3͹Ӈ皣eL!ZV*~njC< J1kv->ڀUjt 5&ڑΛ皘̟?22"(Nij_ 2s`n֐ ?x00_Ut5@hxl _^M{ EG*pdYuJ> *F{>90}q4כL˅Mb{VxCBq[zHFwxO >ݸ#u>&hc]~49x3'ǥi4l^pUiY1b{v-Ȣ۹bҊG UunhQ9sH9f|EαM⊇׮`^7 k;:F[#EԹS,, .F%66ۡh>p`{eChQu`p/676yxKm[qetYr>_NyI.OM֌j9?cxڄuhRI'u >?7Kk:9P@>ߖ*τ꜌7+JZ 8sw~C#آ>~ErY`~gl1ӿ9q,7SnH֨ti6"*7n?m-^ ,;5B&Gm@O Z:?'_ Z[M%?~qz }6ÝyN&<0Q:Vs odpmsy::P9kU;)IJ/IOAo 2Z-Lur;̑ݻ}m5X)Q!,B}tk%¼ݣ.}I~$LnRձZ3(gZ>MPL{Χ|6Y7c?99@?#-nV;quSuP=G~Gm{st =$~3&~viijbPvfdDZMb8<9Hy 'zz ]]ܵdʿ8`Mw9'/?-A2I3&ya@#-ͭB<=N2ѡ[PSs9Glf $Qꢇ&}@SӛV3'mͳoIZr81bM6 s|"j:33O`Fz#V/ [-<V>}wxӷV@+ t|%8U ᲞB{/Gڻ}I VM#Ck?|5Ճ:>Rٲcʸ;}|~ne/]Oմ#p1JưɅ!󿚆IS=> ALG5@/ڕ}]m43rBo6 f!%5 lBžfcdwDadbp֮Ubc~:9{Ƀ2 $nW\r"X D~?:&a>LcE9eF0zQ^6\q6NZDvwcqEdǣ_=(qGes-M R~ݰ*ۉHϡ>f0CT5i/(r:nbi:É8&` auIumF?٧J luғI$Ψ_u>NNشm.Sp1 r- ]=#ޯz!e0V+VgsًѨo]=͍aQZmYyr==~\_qT%)O+ryp=9<֩ 1<8r-2HR/01X0ob ][yb6 .M:`W$[{P/)tu8X`ٴ ܟ=H$jXbL>SW=|n#"Tmӟ/gd޹8v[g";|F8W=$nq>q접d +˸\|-^Q7" gu }]R<{jΟlу;wO{Rd2I+ Ӌ<~xHN=C bp =iwpMOՉHjkr }eDo3ȭ#Z{:<yӝ4S6Vf3>ڿ<)ڛJRIl}84;B&\CJC]P iwI+ϋZ?@:Ƿe:u̿?;Kshc< m 7vTutG5U >gOz{޼uw03%Ԫ8\C '櫋}T$_Pg+K_=hWCG4'2v3<$(%\<5|,;ZTHqIKH{:K߉Ѵ1_5ҕ#cd奩m@lhE14)Z#^{'.b!r#QralޢGb#9e-LIԔ  UIL&ES0;諑 Snj{F358`9\f{kժzsu Ԍ+~|ʵ]}Cp?|xtdd[4⬿XH_ϯKXׄ$dsRU2ގmɝ=Z=}1]^n:;n{x\#˲Ri$ՖиGgُFT,\$ Fhp^_VKcY< 3=1>hO82k,86'wd~=}]GIzPks3BGx &` zMeV[*>>6LUV'hx4oG7cVRb 4$\ZGNm{xw68p]=W.{{hsJZFU/]t?/.||y/9辠->d:}xqq~z84kk?'~C 恁nxXz]LGwo2]c~^^9iVd߄S6C |+9 >~^J_~f8䱾*KM>AG1= ?j)o.|4D.ȓ6pdI>򣣇fWwS#UV Z[!>-L1՗#ݝ=Hp!h0: 8Z[AOjcZAOY4;^ oIxtʿ_pXqvz935wcv?>O{{ ڽaޤ=vl&r^UH2 RZRUaޮibf{U] u1GG흁^G{9Wo5I^E]bcM@,L"`Lb-=F]5 䉔CUct]{FUE礆 @\rq #R5N& .;Oo)#\l]l23=oF8a[9V $ $$ōipIR~hdppFV:;X-hw&s,Ymkij{Ϯ)ʺ%Eo/塡* tV[\br\񍊻F0^rKiin[F(xLyߗǏIh;'_Ϝp53 ;][ l8F)IΪ[xDV[K l}Mn=tzm3DpO.G z!eq])1:d8+c="U72yaM)CfzoAcX^mefU}R1#Ǐddhm-~^hs\>o %iqޤ .MU]Y$UL[uaGǤ'"8D'.={`' I}ۃAZb 4;^sz;}%t.B.{] IgɣC Pm@4C/ƚ&/5yv^ ᯾2A9tϟ>˒?܅$c{j(Sv%8.JĮvpktx<,#+W'JEg5<ڶ]ZIL-#1QVYM{ M/FB G5u¿=8-{ C[7!9*7pWPVè$x0GnVWUrыvmި?Ƅa&S}U@OuH.Rȸd!g@8o%+'`--.q@q9k3Po>#9LtPl䎈'*q:=Tu'?~1>AeQ2_w޿rqW}rB.%Ѩ(w@QT% vdZSǓ_HV{% 8&A7JZ|[`z\^+9P@>+Y~i0g2`K+OUY@mPGeH$I.-"3O3Nl۰`i{d^9aew2wZ,-0FSBG,Qkm[zGv6o{v$^%ES}!<] =Џta ВuB6JK>>ΎVN[6ʅ#:ܑ^?UGfCEB(]\ؓB9x8yD#! M[tyoGה 72H%ʳ\zBc2mڃ#Sy+0#!"Κc0ow5J?7SzJAم4BI ҋ-OSڇ@G"s3k$] 1=Wǽ 1^Lpc@Vdj)n%(0Xj HO:Ԯ9 tWxu{࿟=5')''-(Nr{vPQ~]GRm$U$S6L1 6K}=7at]ݛ6[L삞 uUy#Ze2Ozf.?* q* uKO__F#h-ڹ0`8jAQ ӴʭQ2*̔R ȷC|C^xJ_OoWL$,C]%ٌT>ݠV*W)Y}nĘz>}s]Si7ب^)`/h6t|5sVdo:KVhZWRW-Wt@zbpPCٗ\rO8;޿}ۤO/&ذ\ˋ^_;:} 0Q#lnhI/ u*şo6v&FӰV~'`o@ 7v]g Fa\iE@kxG]׋9BY0eFd-J(AbP:FSSG}3="@G>J_n9;|>s*6{c9iNM6uj&r8٧}|Qajpmr=HgYz){/ڷ Uy7}hUtHAvp/+\@uz8T"^/p[Z _̏O)?#$(4qg-|/Aj 5Q& lkvɃo b34ʪ9]φq.HF23ѾZc.0M덦Oḅ^~S5$v4}uU8C=Z99 lQ?gNS73qWhGE \$07ގ$S]A>;'G P;2J˹V7gwtEjae%Yŷ3jfwKƖHÞ면s>Yh 0 77'F͞9@k$-_d ||upZ,;;n't~v ״ڑ}%I{ P;##\uLjwVlO79mح7mg'`iP^U]WW%t4K i0B%G(=DCuՕQ})>zmzYLeGL{+$F4 88_39GR찃fK C;L >[jҕ [ZJ{tW& @H)&lI5WQ[ck !pebF\+w.Y~7+{ ut`x98+vyI~͌䈫nnEoy憿 ݗ_ \jiqNqabʻJ|EMKtt+–{5Eerb.x g2h7 ׋Jsnf UCB6b_r3팻Knݺt )/3/@\iGux.3W&\κL: ;ܻ3º ؍4%(A`Eŷ sS#F;:;Gtcצ &3jEإE(%)H.ʎC 3<+5";= '&35 80#2? CJ9 qF%9alQYI ͬ[)y9i9^ii>*;{Avr5?qOn߼hn6 c޽]*3+JJ~m e\B`2pzN쌫)Q)/y) uk:Bh{;x5}5o |8'ǵWɨ(+MZΝE%ϾʔUAnl~Nl~vLnvlAn99Wr3c.;phώ3>:vtAJNz}sFQ*i*Bvjl@Z -xEɌͼo%%,-r\t@31c/{55=HnH3ӣA_I?;ˈ˼ag'ą]8}v1v+/d$'pe'GdD$] NMLᑔ}7j@jrXjrHJB(}W5;;<}ݖFz&Cr_^VDQNLvFDvVtj儘 HBc]M㗜{Jys6ϛ;O]qވl3Q|9>:8!6 1RJ|'-%Avp))RblprBBhb\0_PBLpeajY3Ǟ9.:- Qp)ŋ>1&OcՀh,nyO>w{eQd]q59>,I>Y53>60>& !.0>:(:/)pMQiIgDblhL_|oxG|oRl(%;=Z9!Y)үd\N)"Jpr֬]ciD B|lw?"-GGl񨐓WBC\"<#ݯDxFEqBD\ %5};ۭ@WtGCb##<"/{F^vq=GDgTgeW.Fy^r sCGlڳc铰ItQǁ6Sfkߎge&_S_r-zzAvbfJdnjD|?񑾱11ܹ5GES9, ޴vv@b#IeGqM47JvİĐdH+a!.\ r r~ d;?_m0|ĈsW\,4=]t/:."iIܱ9rJ\`\wd%_GrygX~ٸ%}<F\q5,9ȟ]]x}CO`|puu+eS:&3py):-6+2ȅ:vYiEo~v}Ox;{'Rs?0 =n4aaɡBG:r!.!ΰএ 7Nד=j18x"Bmm?/^z99d{p;j,E+BQj2Aϊ;z؜1dzV'޺vӷl".9]~95|(͛c0N{M9_=h@ i?7i{8~!#3c9 spA|xq]8Tn8;Fx^fs)<#9KX% 8^8sUK/ltwާ|E8^$i;$s.X#V.g]v9Nte0N{FpcCwڻnOS!gB9NtaOh} ' >v{ᠣg:p圕#<}us_*iK?O~#>§/ym=FzW!SgDH5XTy-6߲,)'/JfRhLߕP`^gDE`xmhG0P s99aѝf0O,:w|Ϲ?`׫^Q~ICGE^v=m!' pz3BߍǹՖ7Λm0xF_s͜?DI9x';sCޞC#|#|b,\}/q8zA;lZ2r%_E@k}n;'wނmǭ~zvll=nzcm9ifNgi6iY\cG\=Ա='mzfV[}#쬷3~qFkǎn9fa#6ڶ\3'Yeqn Ӷ[;ؑ 66܈ v6lkްhstG6pzQMyL'[YjOl:vdv9u?r`_ݻ6iF,-&-[dsvjkl8Ák]cu`աM'w"z픛 SnvGv193-5d͋;H}~`窽Vٶl׶vܷuۆE7/߾uَ-+l_sۚVޱa55Gk7z^;-7ٵf{vؽmծ-+mXs[mbKm\eâMm۴l슝W`F =kO(i=E7 ޾SGD2_Rqi+صs%a@dn9m]}ҭm^t}hڅ,|̍뗬Y1٫WYbʹ 28t 7oϚ6ܽiv}nmݡʏoKW-l%f,[h`y3ћ3Go26{9_t\eUKM,֟7[oLf5>ry6v/Y`eC{l߰b3h`LfM;sLɋmڴ;YxB Ɵ6c2uԏ^OCc}h0F3>6޴M0g&SL ']j9o9&cLƘ_r_ܴjL62֛3>|cOtď&`n3rdIg[xǖ&?Wo%3fjj1tY/غeQ=wm\b΂'.=Bog̚9e<+,K-gj0tYfzz,lx ?31>ˌI3P`D316GV3s3۹}7Y>r,&^lhXK-|6Cc>iS?6c}ON)ggsΙLӉ3[33oa2dLӱ,/=cطbm^`To|3[Lk9mńysV.X8pe Сm=MkZbraٺ[7ܳ𞕇=殛fɪ L]1OKz2% V,\|BKV,5Y>dbe .5[tRULW|mںjvٺ~޺>_mf%kZtRϗ\s׭z+-֮Xjkg[=kÚ9>9[Xs{WxfimwZY{pݛm߰dӚ9/7[| ~Z,zsX={*Mg_9s糾X?w m]wC]N>wmmZrp7,ٷlזŻ.زh۷߱q-wl\S/پuݺd. gOw:guo9 ۻ.9w.?k]Zך}V۹r;ݿ} ۽5ڿfǩϞ9rعS{p[+XnJkXްvL F̞i>'iY,{{1X~j_?e(5~MJ-l8ŽpH`ϳ' G:znǃ ;G~3lOOE;v=oAJLӅnVS@EzX弭 \%_2/IJ! yTqdQ {<?b䅂 *dӐ8n^Cas%I ;܃3!;q<8UȂ-,҂^ :7^d ٧iR gp٭sX%tF};qTرjzS܏#%bn'L)?>BH_ u v!rLYQszz8-Ot|%Oܫ lt!˞=ɜ!{1|8Kn$pyqE؜ahْ"ܽy}9G/&"_髾p2ٿѸ=;f'ƸgDZI/+aމAWB 3Ze):F]z$&҃S.WeWxER;woLg,+z5dxyb0/6M}9͍ᴙsDo9G/1K=|Ȯ(KL[*ȼ3g?Țgή. UpF=zҊo$N/~F=iK/-N/UVSv/N{yU++//ͭ(+(+QUZPQZXY^PU_ʊ+Kh`̹WYRyvZɭ2JdϒlTVWV6y4<͑斗2_sYau,Kyae˼{~U˥q ͪ8ʊškyTUU\^]yM7+VV^US}fMj^R}U׫W|kn4ܬY_{VC&jn7ޡ!ݦ;͍w[Ji(A˫Qano=t #bo$AYE Fm qt|e$Lӣ^ޢ h7Kz2=)sslh 7uwBQ:42#@jxäx]3 ld4H^P?EaKQB]ywhgX1idNm} 8&EYL-f~x/CVy1#dL*L#PRe$F:+ښ+TQ]t)gr9?Y'駰S/_׼>GɲM4Ծ9~?OyG|2܍ၖ^,e뺴uݠIGC7hjtՃ\cZULVٮ>kΆnp$`yG0쪫Yʮ' sYz_ @(yF !Q:/:NueJfUh[K*6M[YS[-XE,P3VOTVS5HU%YЫ;P3 5kUNke;Ō Mkj tԷw?@@ ʭc(!q'rG!?H5.w q@gW4ry X$g=h[8@$ U9Sr+TmܔU3q*F-]o?D2tOws|c]x*7ߕ'ݢW* UwFznzꕁHfVkU;}P,65\oGQWH'` ҁZ^v@w++A@1m^AIHhw@ekyQ-`[:KDc[`pUQޮ PBZU^E䢢H(ԷX =KAOv9 ( U`c 2)Xwd9խDrBrhr( ;0lZCT"j'*F2A "* qWיi6c}.Pј#d8}s-c!Ӌ&H?& t 2}]j FbC]ZsK[-$/("X=s~72Ⱦϱ-ݾc!Ǚ0? {q얺G Hq*1u/P1lD@k% 4ФƇ^tV=hbj4}րx0!&G[> dZ h.jEwC ר $% I@J2}ehz:j]&Y/IT`B!P6P#'3&)@B:Q \gQSN&[3,xݧ܇8]>5(SVE |B J—;p|a5 ߔ*YmkQA里"σ)O&}6࿽c? pă '2p%QSýwK}+gg?3ڲڊjb^F0NA~hKW\Ok6I-H m=mPEOzUAd.J@dLG} ?b0ZΨ=<$dm@CFy|(hFĿ&CcM- ryVz@@ 69eKy@ {՝jQ*ExI#3F LȬ0w<Ȫȱ5¸WP7RYHlZ_ʚC=svS~7}n|7Ikl*>{O_/*^[UxstPGN.rQಷ]`6}݊$wsK[{~>h# "ƜkO j"aAgU>'P_ JH4UꂼB-[ySTc!f3a|p:ek>Ν =݄؝T(Oa'!2.(-' T5Y_3?{EM9iD֒F {_aB'KUgg 8z="n-r` R?hf~8*CʒJTu$PTc&XZkWufnm{=Ԭ?ozw7+o~"6hD!WX)h@&`(Hj&@֧zqQF5"F} ; e;>׃}Mhn_M`I,?Jޫ_$SW#ThWǥd< +@򉠿ԝѩW5 Y@$x#|ʔgЩHYY Rc* MAF,qV"} [ hjn:|h@S~31*JM_3_iƒ}KT gx8̰F`%RBBL8 ,O\ᆼ]^A lG@6دTalA>@?AIȲaX0N@-)TX zhdI36j2a[` w-൐D~J bj\֡-`*Q H. Te$|io,w_/ߎrauv]E=%XID). %!x'@ɂR{38ZRWeZGȬs k%ƃ Д\O C9 mT6VvJ.8;8(;(4(<]&rSaz AOJX@Kx4K-C0ФELKEX^MZ%< +y誒&)VJd IG6&+сmOO"5RZR.蕃Q&t:{H Iguuɏ̅g 2z,/ ۳n|'9֕4 2u~_6(v$$^PWp m%\JWc]> ]D1|*yF%lCX{4H=H0@۷FFZpV2,ÁN>,ְ, ,r JJ\ς%ˡ".{d=P"+ZJ*@&0 $8ײ B$FwA@31IDb+IT!Y)~X霗{1[TbvzYWP /:;?o:>(̱Bdz6/7ΟUu5ޢB-|@|%FDž3jȾӲOxbOWtK\$t }U!lkx&&j) wRitH@_^RYSTK\IhJ)o! 4 ,+onec $9JLR w <[ũ&Gf#]CJJ4=B$(S~FI$|VN@Zv%*fLU_T#z.ߑU"w1vi6n|E5鲯 !Ad yq1.T cC4&"a|EW?^o~lf|n2a~#n(8Q>w/=5l鈵AQ^[5E⇏bBw74J(s,)c'_W`+qKMz\ :.Biu$(@H~~ᛒF7y(JF8{JӤy-e\X)L}2(߽m2#lJ%Z҈ |+MJOT2EftᒟkpK>'nlca2oA:D{9{>eO_/Eo`MuqMl IG!_y}_1#=JwI/d?^HGЕJt/4rH*ʳA؟5m8Z9m?$BQ\-zI*=@ JEBm<-5OiBٹ0A ;v.pLsWH$YoN@up(ɻZtJEkCS;&X\7iڬz;V?k/bܳp" Oaۂcei7/>ǟ>8~+ܹ`u<ߥDy2N'aO2aC`)DFd2O<&uGi7fl84+|ҕ (! YcҞ )$(ۃtBEz|U^xGj D]QIDK)IRV A_ɱ4 IƐғ0GXTxOJc|.$Lj#=ĈKoO*N9GE*G,+gRBx)O Rk&ɨRER_SI)2(3Ԣ֣huN.S{ISc'iA3F钿9c)L;YE*@|Cp| ~kp~ (7.;5FNWv|۞ O8qVuaWϫsKYطEo OCXY6{+LhDPډ%RXReϨkhY3`G40FkQBƟ{)^䌄JD t*26C`;0ğ!/IGzQiV tHJҐV+0ݫeFNn"P.CuM*I+rJh +2Ȏ)c|vZن k] +]Ҵ(a5mRD* Fw$hDrB2JǢmH(:HN. ቼJ-<KO]\O'[|ך[A){?A?nsqWe`UHUhkA>g}k/kigbc?&✺ Zyn?-j]L@<(5R ŏHxCyIF)JN3dtGI)ʺ^k4UJp- rIOGuѢnӵU7\ Gl 8RT@ &D# B?nBAzAdYzha EyAAX!wnMB$zEA)wuMuD ,sؽNeSŊ@ߦ ,,=S+'D #c 6^5;>Q¬A0XtjAIٌ V3 Q|) [Ѽ (V-v1K}اuDVT\@R/-]텇WScmM` GI3- S&7$I8Y)x;#d XQFPQVDQ:w!K*W)QH6yG/G@K\b-'QI9%=Did']I}7OL;u^5 GNeX[S^Id *uS1Z>G(:?_{ BQФPPR øQCNZ#-(+`Ql`:v\KX)⤨tH]٦[_&Mu| 7i/N~vMOƒpmL;E8GFxsd,q ?̛EEt78C)l-XޭWdYBUabC< ap*,6R=G6 Ao*m LHx h*J6௢5+))T "٠N$즎X(Ph |4I}C 5Sbd9fQs+eZAJACR|_@ EOWY6kTWYΰ AؤU\ s PRDn&7nCprj juFЦo q=}Xhw͚zŕJ+_x yZ|yqVeY^k.q ΂ v6v3b!OW'(U7q[&+&P,b_fWdTؓQO5d 5Z8`΋J& tUlU|d+Z6Z+1B<Mlhu^I|J+_TG:p BW|F<Ń[BZ VjaO-#Բx5fӚ&iNVM56A1+lYhᵜ| ^ݠA#FڶZ ؂T5Z5umVvp l٧OwR[Tݪj_xL >;y|IqQۙ%Yu7 ;xjι\0Ǵ^T=siAFO<5m8N#hiox’gWv˫@O]$8UX|Ec3ʎi:=A+E$ʫHA8I)^y/N^э`ZU`P?h@P% o l`#Bsٌ5bI(լicY TkX8mNN T9om-O sA6R +3VnokcZ _ZkokP%like[mUkGMEUZA~=ϛ-[2/ ^N~&K|3z٧vnaU~/[qO:ڸ}jv|YKPUA@ܜpyfW.@UPzCN0Y_†mP  KRn~i[ztnجPpOq$(nVag&t8[8SR%(lH$rWE`#|'>fr#Rn!uU MBjt|֢nQ֨*խjMKU8 j=m5m-J-fUxd?Uׂʶ'{(U-tWՔϳ\rO ;:/39] w_S)nmUW>wxwy۽h |E6;E/s,U](_[YΞ[}zUeyMu1Ҷ^judpR沄vԂwMM[cZ 5x.ry)mjԐ&Dj-V!M(#8R1%~TP-P蛰3Tْ( BQuM 6| $+O3q+,O6np7y!̟fBBYv kO!&ԏת!} uP9ΏVSÖ{* *0D쯕6X hZ@.Zj*'5VZT*U5 ]ksMm唪*Z,؆[Z] UQV6U^UՕ~>g.y^X:o/tuVg%䦅eE(X< |>Zp,)|s f:,sFJ-Mt 0|4V,kSՑƂ6k(hm(p"U*x@O6 CS *CFM't5fJ)` 5 K$BHM'?aZ/U I㠟?4$ P ޔ=F"y=6ÅmUNgi'~Nx@T-`' [Z+/n'*W⳷ʖ,TtbU͍e@ E_eKK12xX>[uI֖R hl,/l%f{^TUZ\倻 6B~6l}9XrFRPNFĵܨwh|ׁcuUqy ?-zgW!NFU͒7nfݹ}VN휲{Eת+oihZj)Lf X:PqAU U4j0BNHX&!Ѣ' Ȃ!րS6(%7*YA,CW#J.\à:%o-0T*I I$窚o@|<ಙXKPO?h DH ҁ_> <a-l\28l8U`Rb2n]Mu-bkes=ojhW65,xCC6h`B*YTU_{/?'묏Y/Ǖ˖oƵs8Zzv?tȹtO•1A8|(>̱v{}ԣ/7#i)+.}=?Z~janܤܜآkyE7 o\+Jy=Z~ kRo%߸vF֭鷮g_g!V;Y-+-/-bJH<@d}HPB*OUJ')l\\q+kUfUb[ ^JjkS@: ?hPVV5;#R0U)^ TUIWEeB*dAp c=mk)omhn*%Gj 4A+[ʚ;b憊&ٌ5w8K(ˍZksi M  ac}kj(o+W_snHŭ%ٷ((KL p>zfْk{gvp/Ztb}Ӆpou |>|8VTyi8cyzo&fdFg$Gf^JHNfeFzdNv|NVLNflnfL^f\Vf\NvlAvBA^|^v\aNB~nb>EȣPy9)׀ׂEi+72ae!fQ͢xܹqFf۷3κs'W/yw]+㹴zUŭꚒ;{u`Jce73>7;1'3&33&-5:!.<*20a…V^~Hw㟁d*K39|8g//شfѺ5[D\ J Ip9!rrBhB|hJbDjbXjRDjBxjʕ+)) i4_ΈɈLILʸ fF$r%ef$qU%y)0ܤpy 7hIs3$I/E7 Sn*+>^+LqkiׯY7,f 2 7eFu-Cgkd%/dϢE)  R8P\x姳k)rT|Ă!|4n- M+%5hNωSWm+ ʈJ͊r2r93.;3./jvf|VRfȏNJs9<+S ?U3p1ǻop&ĨUYUR^v7?kW[lټd;/^ly&3?dXs)&gL21&VM ?01h3izOS'Ks ֡WcCRS.$$%F%EDL]f5ş+p f$fe WˌOK  caLkN2UopsRK<U\N_yYEp.(m~jA~X\ B֒.Hɇ/D8?Nss'2Hɚ<*kKˆ%dgOt^\f"dsf:d<.;]xvZ,wWrsS3ӯds<3G&rg|&E's&sJ OKm,)<1rb|XR\HRؐA1.m߰L`x3wyGpSÄ `&x_oVJNZv77;كgvû۾jU7-۲nk_=oͲ-_lxѢY3՟ggb6r٦SL'5֟g0q?M FcLLtꤏO`}0mo&Mݴ5gp:sҚ#=1439TMe9!,hlH5Ң2Ӆfg I dkyYq&4>*8:"0O˅s=iϖU_,|ִ??דv҄ MdIY6zM0>^&f6|yF˖~re|?wc$wsB@J7+#^V~@Y./ş*t[(ʍRp'%45Rr\`lOtwDK@S<9v:}ɽgNsRK̖,07p)gͱBk,&31hf4hO&Ϙٌc?5O5{ԉc&xO&OxҔ0mةS?:~ej~el>m ?4tr4S.lU>8oيyV/[er킭;nشlݺkY\U˖6;mfǙkh1}>f4d餙zf,,,YXN7s&s-kx&KX\frڕs׮y?_a㢭ܾr=tp_hoN筼 JK[U/a^uuIUUqUխ2\JJn`eMoU߷C?_xYαN1>/8K\UQ\Y~U˔O^vh[qXdE>gWzxkSE,ȹgxw=n~!8 ?3 ?ޟgx=%%׍@IENDB`Dd d g C @A(..\help\400-vdu.PNGfbw4|9nw4|PNG  IHDR_RDsRGBgAMA a cHRMz&u0`:pQ<IDATx^sIى=Fvܟro yRj2$Vp 0xsJdL0qw;7VTmA5 nS#U֫zͯ랬Z Mo )O+6?*Q^]Yy6ϿYrPws{Lb7U? 4py&p51~B wNx!Sos<Ǹ{pzr pLw`" :5G[ 'jq1jb5zZi#  K=De89YBb0g)3{{ |lZulR=j+lw(WeWʀ*Mc,HZ@!$-љ9Sʑw(eP/O"8 >?EJK9HX<&QavD۪@d/xoPTgcS+JzJtʐS,=h)Kw713 #,aE՝}WWA %J`$atۑI+ЍB΅,\6?zyTuyȍ@HM'ѐfNOM:&PsOs􅫯ݒ 5@B`*Rh%1OK0I.[j(6q1^+F6#}nBNCYFڪmOu-I#83S驯/[_,}vիij[FGQ{CΡr`\T#=.PH]sX!A0ʕU@Rʫ HR +'a*)\n^ڏΓQu06)oK.t=2Rͬ+Zv'- sIp=@Styo?Y,=>Sյ{Շ<{o.Ցg_T*.UcӕU^e$ #% &w(-yaPG[I5N(1LY#]@Et>h }a1Pl_B}M& 4 N'|~1㣺S4XCOj,q3ڭUQTbsU*>]e,Ikɀ(F #T1t1N E4<9 DgS.]h6]ڦeC[&2@'RI,P53v[-ӻ SWQ䩬ׂ}ۻCbk$U|O jŤ%AJBUfl>:I > (Ck΋ #`)[2C+il}9Dgf%&o=BLdcn8r}>Vqn-m`j!E19VfᑢkL[T U9EdMoD8I+L8;^ [ HPmvګl MmuhMBLdZ *\J G$1ufwʘ!@ ݟ>UpN+1`MlN-Z{#|]q,8rm~ F=[ױN603{nޡ4MJ͈[~ 8IIIk>mkًR0ZūhT,E%1LC`>*w$*aoZ,l9b X`r29vfca>73;VIn24:5^M\VQ :qOBou7z#@4X +6 O?ޣ cxj][4X@ " M)-`A ̆3 ` uxѨ| PFO,ޔck=k@ e#K>B9,YP]ΣIU\vB 3=&_G~f";ԁj>Rna4·_x-%  t{Zg,TlQlѨ2J콗 PSR'&naDt|&{?`/6=6 'w6,,`֘™nz#[t[ur˭pq\'N @U4[ai[T{` [jq,:_Augv D<   `D 2 A 1[s=>ǻ:9 D{/G !$|"|,Sg#9Q"\oؠ>;9Tms7#뭑5jC-bע1u[ɩ  g»\a "qbo٧nŁ/@Tk@4 jmP}.Wՙ] -TAƂAp*T!fHץ$)x@ně !{BXCz=N]0BvԇC|Kvlb?'Jdۤ/~VngPlvF#ȧGZClF Wq8)xK>e_ڞ C[:5jɫ7K4@NunjET`ξHX!QwD?>>(>{ϲ'mYlxiv; BC{ɫ+_8O{;Wu8Gy@M}b jcmtijud,PAZ o%iq.aaqa3_ƒ#^Fu]m1I0NӉYTB+>ݒo npZB<%PLB) X"-yƆ-&Z!.d (.ST= ܈Z V D ^3wH6ӰD/DNw3@!5˺e";^XkT9?֊:o_MY#jPBr=.Cz/h$ޏ&Jx !./+ ظ~R,oɝs]CsI=IiO:J,W M%@V#\IԞtbK\W:Iy])/*et.-ԑWN,R։򐔽R*1& Uړ} )RP2?S)%"SE G7WBUʛ*"!{Y? *CU2Yɹ* \[@SIU:/]'舳/ݞע*Ė:ooe!`!rv i4''9WͦK;9K9C$dm !Uǔx$TJ*€ TSPE?*cJ<GP%LGBa@)H" B1% U#@?#0 Uǔx$TJ*€ TSPE?*cJ<GP%LGBa@)H" B1% U#@?#0 Uǔx$TJ*€ TSPE?*cJ<GP%LGBa@)H" B1% U#@?c UuqD"z\m}TVsgSȪr=&"XfHdUD@J'bIENDB`Dd j h C FA...\help\400-tlight.PNGgbY6 0tPf5OOn-6 0tPfPNG  IHDRf(sRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATx^SG5ݟ6v- NM-c}"Y3+[l{ $,Ox}YY]dWꚧxaWU'YO:~smo^ۿO_ݗ~'?`Cy?ЫO{$?;igj<[|]{z|5@`v8Ņ~ډ5 K v?{?4ʈfа8sŠU %DEJE1ھ9Zނ 5pʺx(1NrF0A/jVlw 05vO΢vomC,|Ӆ,:F6벺:rW>`;N 5e`iRum 1| }IR?cF%߻N?UD+ѲNHiG=reh}犚߶. *.2 5@5Q#ll!%z'IBM =+>NvM]4r%KJO7FcoGbuChU_TciP pv)W+J6U6~ f&X3>gʄWl%N8j7[/w魫DbB\y<8Gc#P?Z9~rP˹7jQCM4=R50X"9d2j'5p`vVdW2X)4|r~`>yj.db5CAd]csGf e% 5}Wc,BS9椐h j5j~B] X`{&= /^H D+"0bm>l`La =/W]]z knlU}Ga-*ܿڟ4Cv5Yj%Rq .\} ^ YsW## 'zƊtPˏ;X*/ *2sj Zu̬c2:<8Y8p>wU9>W8[xPUZZ7mw8j|1k-CE@MfnhU Zw$h V֨'V mr F77v#oKC3KOaĚT2yic`bpd65jn*{-l~43]Jŝ#ȁHalaÅUu'卿W;^y]QS?|8$ЦBDcKO?1M=߾WL~?{g7sk4^8tcKwSԷIߖoފu}w.6R+_ߛB=WP/oSqre3x4< 2v'iGzgkZp]Xx66$*7.%?Lөs5Uʹp l/||Px"J֬\NT*P>+r얯ɷ,ܸRHۻ || w5$N= Ǭb0c@c(9pսlZ"J*WJVYg(DqBL:mU8pw.>TfD 3K-܉o u#a@-*zbGbcu5So\q_|eh_eR~);M6Oy^y9k35#L_&mLLSN]PkS,] gd X Rl@{,wmՍjGB4~z K7x6 sɬ^{4}i;Vgڊ]H.)̞ eA>X T7[;I-~,z%Vu:^3;jwj8\8X/~olWP< 5g_xjS <±u;!~$.~=7:1 0=f^Ѡb݂b2oV)얙=S{B&?;4Xwq=9.mCn}=쎇@2n&{]ݕAP(q*VPy% 7vV6>]_L>.3̌X܊ )][؆z Z7H<{S&y%P|`>D/$%ïH{U n[S&Y=:c u+)֪ir>[aCf. 9S 3IwCXygtfwLzDUWcE/YT((z>`14 51LqV?8xg)Q㴍\}:vNƶg;xɥOج *'Pxn]] (T𩲫lG>|yi(wjދX͊wdZ O+ ׅ{oiZ1PxK4mZ!ot}уҶxUW"t'5ӉЩdde|y|i#_|QEbk~Y$4B=`i@733zٙJϼZ2W .]}υMjn]c6]\e.XҮ*'#~N )6h|} MԤ !멸rcqֻ@[ [S\GA.+GiyxC9~S@$ (oN1\ )={D>CTVzCx R}H{K x I @H 4x1ղ ?!P/ ܫ{ {J˥+{^ WuPmBz jK=iGB9XmBPHB#<-P#pYcTP2[:/+9,z^ELA5fRIIJt!5 h-WSOЏ9Lt~%WGm}jlڒj/#/ם \Ͳd6eCu*]\Ko9^k5vGR|$!H/ڹMrqH ]щm[;)xU.Z^Z60}P#9۝'WKN~sAx΢c4BPh"5BlDԋ~`FVo1cC @e(ď|{\uw6հ9=B>,PMohy4zJj 798CQ,p PGS5lW?eG ??l 5Ǝpvv@j?gjөI>yWj"ۙ-X1ムLWC\j.ZMq+toS ~mèզ[>F-Lqb 5wQsRV)GgE|a~wV ?X .ATP˛YAKj)@y$t{jG j mBPHB#ݓןP#egvW,$Bcwvkʦ:)^y7eU˿x~igszM__/oԯ8~g_y?y{&F^ZŽ#'5ϬY=o4Zvxzj2 pn Ŧji G[KT\x O?b-u0h lMPOz`8Z:aXX? VxZ1 }V1V3bG34hYRZ<z,[`h~^W/'P.t/Qy(vkEM/fm{`589"up*&)a+Grw l!5WcC`hܗ/oڗܞ6`s>)º{EU˾9v>!J5yaM&E)Lr=tO|#S$(VB$vb}2p6R芔wK¥VPaK9taxѺ? M=.;_u jFW҄1BtGJiviy eP9#KaϷm]NMĚ.FuњHHU7\.>oΫ;f@ (j#ZאZԐ&T Tڴ%Y&0#fr&w#L{l-Ehȥ޽/Zb#hP48åᢎSGοUW%$IBmw I%B@M LJ\x 5uFZ+Y@-80홍5gQ,n?R+vF-teXt^ӿ)fj3J@3`NMFM4o=ڍ~&썷Oۧw%z%]BX1O7>3s~*Wˮ-l@L@Qo bTgٵ;[ %8 {](pm0>w[j3˕( =jS`f[U-%&we`NB lP+OpJ> 5igrkskߖ]٨~[t5W^`WOj &d5nG #h+ʊ?N/K9# Qjalsrf ʟMڧ[ҎX9?Yp~k3't:[3[3voˮJUϐZrIvZt䊥Sy~8dD6DQzæ7_ vvIEkJ!hջ@_뜪PNp&z`u.j\]@sqSK3pYmylvϨSW`m} p<8NsE⬹,W6#m-BUkvgZ A6 )r[WI2q%`>BWM@oH=!ɢF@YkH!N ߴ6͎Q;z* h5fp-XOÇB9Z̡:_-Z"TMڀ6=u1v*}e!LlL۩U]cUz;OOYt-Dspr2U['V -zMQ01R:8E@gpyZVR=zv[SoUWcE?+.>lVFU@-Gh%2mcu#Ցܪȡ Сʉ+;_-& G@_IL @4`uxH05} ww*W | C#9Dzͦ[j5O]\ӪM*tc+d;HWmw΅UZAV AUZjl[&m ]poO)V*H@jѣ5U@P 8_V)mb@n;bmdd?.^|gm@ݮ%Lg@ $43LlfOfHFk.]%m$ ?|u&ѹs=Dس^\~Nw(~ 5>~$Zjm 24Oeu51<ݓ/ Y1Ɖ j_T| a=&7Ctf׬W֟UtJ #HqkL"n@G-^2[ +_|gO_jZlԈlJ5M?V:k7~O흦5Ks9.]{aمK_3Hyk_PvM/W6h崴Ϧ꘢N?lPΎK. V-S.x* 9![>VL?jlO8黍I"eVnWF em_Wt*eͳ ټ©7N&AB  i5pV= zoA[!uᣴAAw #Aۢ ;Mi2ji>EVV)KB7vN8/9Y)nh;M=V#Kޙ--ͯ=Z6W;X0F~ϾZ!5,&ID9k ?SMi,s.\_(nk(+,pŸB6Y|֎-@su_zn_Apuuq_pz@ Fpv9Dqxc*2#jB>=y5 aj(L9/D-hy)ăJ`z:V>ҰTlْSɬō"^F0,D 5U5CR*U&xB.EP?z0Uәٳ }\FN7mW=tSC?yvݩÙAM,~zs@?ٜZpZZ͎˔Daa@ya;NJvnhփW> F&;6Cx2y\?'wC?L/gMӶpKmf'~~rGdG6x-r TMT)݈" ႩQQ! Ux09[&TSs搻QP\گ j pƹ;%EG5D ղk󀪆VغTغhx@WDhDP-9kȒΫN?iYΩِAqV%l pD؏qUc)z8}" 5\VݜnE2 ji>Us/H¬ojf!(fhæQ5D6V90eF )!f<6g6 /DͲT zi۰@75)-:`JU 0;LN.Ow@9vT5_915>F5ЅHSn4P'Ԍ[<ΠϬc~D⎻ !X. ` Liiw#j_A5DMʓsy&X jBfHpİZf_8]DLT06d{ hq@Z:FsPs YΛd-OX`3桧fuUMу,S?+:QDOm:OhUXl(%7gj aEԸ6,S>q$4膐)Ϗfjw>A5QS /y8V=Z}zk.UʹY4qT%tojņ@QȘ":f:PbU.2eS{2,fs3M!ȹvݦBUð@O5ߣf9ZST){hWB6m#PeUszGBdPS(8QCxTDMQ51$ѥ{f?W3nf𐪙 YHilɄCmy5' Qd*D Lg "F5sLfѨj9bi-w;3j !zzFJ~{̰< ~dfd)SgKN%h!lnQC5r൅3|6XOjI3چ{ AOQ"3P*:f[2X-{5?28E 6"^o8@e@UCUCUzMweaT5T5T5V_ P>Iۈ/2lAFG!jٲWd:aMίHתJQHT@9E Doi~WEw~C\Z>찋q$&YeUMKU%x/#vXR UG~ΪnG /T'^Kɴ^Z#Odb UM~򓲒PVxm(4晢Nk|UMl$GT7Z.oNsMDUTXrT`wQWZ0[UM k ;}wl&򺃨 5Nawpӓ,D͎;s@Ը9wN͈5wKk5!j.yQsѨj5!j.yQsѨj5!j.yQsѨj5!j.yQsѨj5DmbaӃ֥484.H_znWhG=@ pWlj(5IENDB`Dd j j C FA...\help\400-heater.PNGibbOhY86֓x1$1tqb4 PB9~8T 4հ|Py p0 k?X^@\|TI\^chv?DU?:T;@2FP3CxYy1vjǎ—1bԥx#mQuzÒ侟z]& hH <"/G!@.!ʻQݡݝ jpYe 8 8~8$Jh rOsS`"/C+篭z#͍y>nlXj}Ks_h~^Y݃oA ^tUMKwqh5EAKBWxOXQI.u㋗XeO+Z tD "ֈ%rqṔ]5$m^, 'U\mj0jFGR8!KCJRz S& 5 .l<nB'8:h>h<׎jjcՃh'N՟8Ի6~amʾܲƴ1Tv5RiƖdG6kKM] -~EQu_J&gcO 'cuxx$V5 FѲH~RϾ/j顶9QIQ(d2jlLG ?\pjk4VA-MF-<4ۛMv$ZSq,|E ,5y-l*f)c^:ʮ&;!-9OīC)Ց=ULaMȾ?kK3ha~,ݞQ;%$u 9vU'̏Styx9̈́Y rji'/?=(u4G[taK0f;FO 54^1'rפ6N A%1Xztub|JHhehuꝎFM}##jN=5ϑ욢ӪһtSReNn7Cxe_z Uj;q:2^T[1Iwgܿm`li,Mڕ@x!L<[ɗ4|C%Ɂ4[z) U4Ҡ&ۜmK֝EėЪ{_F9mbx'Qq3Qѕ'R+Pb_0V8og@5FN3†˚g4jyH \$] 9j/F/̦g yi@ǾY2Ƀ UREΥV?+%*Sf"ԝ u%ٲF_((og705bgl IPhz+xyKj{sd5h ؙ x1:%SM=dڜpWa096F-X-VJ/kJɃ@boYlwĿj_`zSs5N?KH3 O,s5<[@LWexKz)V,͗[@}yè2p6[9n> uh+P+=} (ytW3Җ%AMtGay ON>\ 69"xN NO0-ȇO{z ϙ ISR]ks/~94k[-1P5-/aʹZ%vW,5'(z5?J!Aø. 4bp(t=Σ1mԍA\ds5ƙ< .|h>q(D{ 34k\Qj̟WsTիWفf?h JϜGF!jt(\6{5RA6\ j y 5 1Q@-\PFWS jf\Mmfzs5tllN!ȈV]e;UQkȸ,0@5 q wѺ XrlN1EԶ;c5DM -@^F5A jKtQ&HDMЖ / #j 5ABQY(D Q&HhK5DM Ҩ,] RQ$%ˆ&HDMyiT. QC) ڒeaD Q&H4*K!j@ m0 RQ$t^B5A jhUv{߸cԹ+5v w09#5D͂ lT*;p, VTy1S5j/N5<=,H0.DLy 54N5 šcj#G5BUϓlx׬]lnlSFt23âIݦZ&svlvhYƙ\PPGPsfP3X)Jjzّh&8"ߖƨin(2e4s yDy,Rl/皙Gg |y"N \gyƋoBMO~ovB1ةAb0W3d&+֨ ,P]ۘ[OƏ|d<ݣVLyY s5#/5Gڊ8?Rj#EԶ٫m38J&KsTث^l{ 5նXkԼEc6W㗢ERL.{vl1j uf&Ǒy.@ilzO h!9w5S4Lwiy,=4jꃨi֮D)âyWS ʿ|=t4 |(PjUGOS̵Hu ǀ|CNc3Sf0ǵ1IQӁCݚ'Ǚ~8R#+m5W327|7(xpך oyIMP銎ov@.F POrVlޖuNqMɹe>k({5DMevzU&k- (z1-F%pݸ!FD/,N\Y~ -\1!juNx> a5g̓Dg5kD QFLz}J艴 @t5ˌzeS| e̋%uW&e#) :GVj5DM =d?9j* RQ$tC"j 5AB{~rTD Q&HYE5q pM{lɓF:+6M{8p9X!RQ!/Bnɻڕɪ5DM#&B茾cG]RP(GB-f,A5t%_bsg`砫 4KmΈun13Y8P21YnhC5EqxD QCԜO]sKjYGWsн -@) Ybm&HDM^!gی!j@ Cx6D Q&Hh/mF5A jv!X RQ$}6#j 5AB;^ QC) ڋ>l5DM u/ֆ!j@ Er͈&HDM:kC5A j9fD Q&Hhg‹!j 5AB{чms KË6EF T9Jj_zA ȩ2j*k[,\]FIENDB`Dd h k C DA,..\help\400-snake.PNGjb%X[!vcʽ n%X[!vcʽ PNG  IHDR/isRGBgAMA a cHRMz&u0`:pQ<"IDATx^WWv5>Co9>''gqlB !7HɌ7ْ=YhA<'d+5EQ[ꮺ]չWr}[O^mYݥdw__OA,?<O?R O&^JW7'ﵩvl>ɹ}d _xl",7< ^F]P4W$* ]_lOJ͚swXG!@`\|D6z1,MOǨ9vb9`A$pD[Ϳ'c jqFzV5 IZ͙8ƙz|IMh!,< TΈ'Տ,4V=Vu/'P}sP_FFؑ y;lbn^Ьv.̕~?s;tzM!fXFSLX7*nR$Y躡W}[e]_p4HS0N ;}74z;VM Qɪo j|ErC uM}Ϟ&%]\AdO?RcfiK*CG~5I5-&hS5R|S0PF)VBT:~++X;SHuO+\.$//=6up{ÿk]) 'U\(Z&"iBtlRj˕y 1eRQ8SBaꕏ7] C^ĎOZDOGG# oGF"uCpU_|qlQ=ыjlZtuG Mi:iK5:1gZr(δ q.ɖ~%PIuȥ o_cіHhh~4R; +e=Gh=Fm^ZzJj[5*$MEMHY5m5R`婭@ʨRoB/'bLj3QHPzP% YCE-ԟYe5{US8SB1ZbJZ0Q F7*O$SQۈƻgݳ٭_?\l \7_Jo>eƞ./?56U}Iw)JpV9^xic%8ZF%j[ &.?^0f+7ֺ'.=hg$~Se T 8Ydmx3RQ܁6\alaYLԚ.o!P#Ψ33['.~̕i@-HZ KZ"Uc0jV5>B@6#jnD*{byff۴t;)z&k/l-lpUWFUtr2Jsf3oh j65"y pl&j*jѦw%;ѺSl9}]P7v~aroCjʾ>WgTJGC{6$#ɥo*{j"=ĕor5uyd!}Z׮#LA-3g%rxRVx>M)CwEMDHEJdV8ܲ97?,{DWݻFS6 hXlF&kk%iQCx_|V;nͺޗ+YֺBY+ePynO<-|1i׷LӡM6rF9=jfN̬SRѦ1!r#P:/2 pk,Ot~ 4DJVIcCVPҚse!e Upmcњhpn$Z;LEh G-r9r!RXWC6vޗ+K pcR `ϮO.?luC8kN'Ԃ.FIrT4Ռ$Rj>#wȖTYtAŵF/<ɴܴL j h9{SI?Z_%(6Tے5wm +#> y+RRh""!E6FE C}pAhjOow6[WtMZEҔTΈR2Bj>Xn\ vק{T;tvqjih75DJQJ%R*` n+ׂEe,}bTG150#Ȕ9OFNFkbubZ\-Zq\hD#ߨ]ʶD *,O)k75nuNO\M<~DхirgV_ xce~C~**哴20q;W jTvGC}AMXeWl{e?T|`wo6ֈ61]KLgB$M)"fC{UȖ?.|>R>َPo<Wt,jŋ*c_/}tçEK;P"*g$fՑ]h}(L&H9?2]-cE`>}C@o"}Vuw&p_$nRYt-Jԧ4'~7UҚےwĻcC#ot}ghUW,t֧#5Љxx居օ&Յҙ׎xYE;P Y:IH[P8a=FGB7vEіH1UwǪb gʚJkV-̼V{ޖ]ͦY]khߪ%>GbWIlǪ^]mq/z%t4 &-UvmY=":wWCSewl;?VNmu?:,ˡ-(]U3Ғ6M^4f9e rK,R`Ō̘cYb܎˙Ϯ]rovHVήd82LuKG,,f a&#)Za Ze ̧0 vbc(lV#Oo`+)U[|jXa9e_DmJ_C2vZ ޻=.f(:=Ԓl5&5&GDZ2X Ԙ<ԘA9 H@ 1y19: Ғj@rYv9H.w8Ð<rhL!%&Y|AnOjɸ\#iRNz"˂2[z>O`Z}t.ϲc "Q^+6R_s*i+sb50+|,GifѮcPYfIrЗhym knYs=-tnE&;'3ZG`QtЪ3('H"%_ y;kat:HEjLj;NɮQӏO59~(XAu0j7ƫC$[d)~dwle 0z 8i?Z15 q;棷(p`sQFPZ U);Ybri|ӿ^̣KPN Q;QZݸYiz*!0Mb5|GaKꭶ]_T o8jpsD,LijSwbhM_1\MjZ 7P;}OU|.l'/JoFMj:m띻/o|c@I-̀XU(E^<5=Fbbą2$@@TRTj[g] vIMST>ŚŚvu/蜯L靭]{U'Ъ5H N!x4^]k/7]ys*l:UkR!LpV8;toʳoi#QX-.P;~QǑ[Zp )5c"j˗MkµE ~ט795e@i8bw"3< ,8ۻGK_옯8VZǷuW)j3ڏ>qgG=qsIjQm[p )݄<G`(Plrc8~k掫Zڦ@Uڌ}$p0=Cg02+V=ڷYҶX>_~|sۡ_7}]!*ayB'ntuYϼ8mІ[pǛK}5 SCۂkn%6iv;U2G)LۙX{ [+ m'6 Q#j :N9F>!{ŜB8qꁦm4pB]p Ac6|# -Z3̕ڠ@ӕB1h #zDzR$j#{zZ 뚿=}8éq6Qp ptzjLhpu"rPKZAtekzK3▖7[_?w1pdR 80L0ovBy M8 pF/j`*W,)13=p9}SHp )1b*uo݅<sa*· s6Цwzj[馡L8eK'ў֚L$RMu˿yR}tu^m#F*P8z@ɳd~kXk FǘBhQ gX 1n~|[5pJ G?( Yc\P2q2w]ClXPk)2OvGkv[sfkSzK77.IC 0J3rV,M58>~S`Z딊 _pVK̙p(e09PjĦ.>0j+?|vj_<0o?Z' ޱF fdVٷtNjgEieeuGr7.Yb(n:VjS=0="w'[YenbyHySR \ ^ LBz#T5Ta@&68~ k5&_+Mjzo,Qe6U&kDM8`5\&j%jzNvKԄs 9-Qe6X&kDM8`5\&j%jzNvKԄs 9-Qe6X&kDM8`5\&j%jzNvKԄs 9-Qe6X&kDM8`ϽذLz@fOv$tJ(DfIvBSR%Q+$$VR})jI +Ed 5vhs&q%e#Wjl$YOt2 -95'QSOz +뼺6"Q+vp2ɠ Q BړdpQɪaILZSBRC H!95ffw %ZQ3*As1M Gy} m+%P)TLlU9bh3牽 'N}{L58-\i pijz!qѼ5J M̡KDgը_%{\%xȻ̸j aWDC^#b 14hD)*U,*#WUs1~B@8CR^(™|bWԐҥ!nMU#W 5)=CQ尨ff maV|񟘖j![eN9bfҽir4 AWߑĪQ Z$j5봘V4Zq)j [$ɱ+z[W8,El|^A0-)B,Pc _E; Dވ!f%Fɘ+UOmmQQ>95Cu͟By:zPj/]Em^k59gɄ4zԘކxYj̦ǗrfN ,z 5 g5F9jȩh!999gT|rpL?VsE>"ń0^14 pǗ}ZhPs˙~.~l[Q>i1א"GM߶r!S.5͋3?#61o٣Ɨ ~7h]en3fٰ7t22{k'_X5A< ~ pN`Pa6ϥ~}~aud.PC/יB ߐՈK`"!ܐҕLTB6Hi=S4 x)[z,WF]",pQs/1'2΢ 5:Ԇ !# Cfp+pQ+[\±> k*Dؕ~xx5s9A%jP=/񌋟 %j7xo s4jE11xcO͉qE("E͛D+DF->plJ:5(6ZZ kf$08´U5A|2J (pT8|Lj&jbeh7x yS5},U6o9_lsBT HH7@ _& _xF 95~[=ü* b(QO7`aNNlbAT?qޘ¸0bA0y7s87;明ֹ~fڵmCfЬj[Z3{;^@f6 %G8EmTP/RIHԐEr5k1?-+tI=o`8Z,ejo"=p m:=ؙhc5]v@ ցІCf(򆋳˽e$-H'S5mE2-8.L143m剚f(푀jLO39F3n(@uSg0̼vI*fa*Ej!\ʼnX/,xq5fQ޵Mf!lZPIԌaVyPƄ9V 0bz5%ƈ&|9 #Mմ@Ԙbn&hc 8cbA0b6kЀ8 5fLh1F&bfgL <+mbg'ls' ?Ea-Uh_f1匉OUCjVKfH6gxAsjZ$j(X-hCJZ 'p,U (l!p.\bxQ,Q@qqWָ4"קߴ 4B D-XQ)F@hQ3ܻD+j1>Xhp )2CpK:Vb Wa2Rb24`*jMFH, f'=.5Խ=zΒEnr$fQӽ@%Q Z9b۔ 9CP$rZKp j}gx yI ߃D G5\T br!D UTͳy s bLJv r WJ 1<9񋚡% uZFͼ؝7i3AJ\"tPc@26RgZ>w]ۓ^ZDFzђE;lVDMtb(/8C+mX(,9+J fa^5" 596ݏQTZ{8/Q\5"2JIBPs5Ӧ^ ^-Y es mippLJ~1-ДKZPbwW w]9] qMr5L. 3Ǐ&6PRg)en0VÌt0b$LRռ!OF{@&Q YI$j^{ԘS(뤪IU iDMAAP}tT5jApeQDM&Q ׾$jA,SP@ Q!YDMƄODIR$j5&$|2H$j|Hb"Q1!A&QCDy2C$= Q˱Rި$:L΁̅&53qg䒨<Uf{;[ ?\5m0&^,7vʬ%a[ 5}G*4Y>p<55/Q%jb&sC"%a F$bfK] e R$j Z(郣U'q /K?1TìnZ`{ jaD˿j(jr/ru5539VjKs3p:br•d"}SIl9{_ ިveZt}_f5KݮD-/%jenW]ߗY2sxt+QˬfZ9<ەEeVDPXqޠ/HtK=ziV}_ P#ij$H=t? _IENDB`$Dd f m C BA!*..\help\400-lift.PNGlb#*Xݺ44#n#*Xݺ44PNG  IHDRě1sRGBgAMA a cHRMz&u0`:pQ<# IDATx^isUǙI*Yf%U +wՂ0HAYHp-8Ke*8l L2as}Osz {#[~D\#|~;*+ G"׿˿?/ l__JnNVM>_|Hvdsj#qi æᛄA[®g˷ε~/mu.L*VycEa }e|ɬu&Md-{o.Z/6vʫjn5FF1YRWuݎ#Sh\Wx_C}}SO]ʳWf9? ُ-kM .}C 5bݭ͆X+bV[)b0UFT6'RPUj^+>S89ܟo;ݲkutTT㎩M&]{{y[k}x?UZoP 56VM0*=PG'+%S5Ι5qҮ33;_ڟ/<]~8f{$Fg,=<8ݶykq`yoq~݇ 4P5VThu5 b&g)Hg|A k%.j?- ;77+(v]L)z'/\5YB@lTqq}3R-َu}gW$~nY /_gql&6v um>zgBV{v*KKZUjmwt_?NU|3)?F+EvOo`LZ{vu=~v?UJK4۱^gረB&I#>8jtw@en›jT$ed9jr* L{..o{ZBhBǡE6X^=kjenruϩ= YjJߛ8c -&𭪯dYk߷:׳QWpӚI?|2dEX:W%rV1[et~- f"2m4N7rclY6tqVOLZIuM>Z[60GY[ePy*9~qƟi6lJhhbD'}ewm>g pR℘w5S3U c@&y5;Z[~lzˎBBBX0#NU]_a˅OI`kq@,! g!$ÎY؝jX-v.+kg;~o.a2t!VU+~S';D[ep?y6|BE[(aﰫZa}oamw~uG~Uʎ;/m|[ _o$*0dTGFXOF_߯`7~lkב{6ə3>xQLɦkr&jcwYc̕o7:G݇ZZвiwvִWYv`i/[$HتPkI g\ʄ=ȝ~ȭ9Ycf#GvWpG* U2ɖ~t+3kZ+'~e/Q#Aj{oYϩM< N# c !.qYp5-[;ʴ}w}WlLSLC殙m3k+&~ydK?Bm` QFmӏmsڜ̉:`/<_qrutt|Pu(2hYBӶbbCoiSwiCGimkqUS-c~B/50ZCŵZEՎ#I;gN.x b*-, ]TöSk:NϝwzӛNozfS}g6LlMX1ubek g^rǛtE@MpԘmjl-MՆ_~x#+ؿs|C˚G_m:C?nW6X{?==[w@ٶZ_5.U*",g%];v*Wo格PlcF'Jbxl;joOKh}lOeU;%UDL؏]B[dDtK4J萍LѯU#P,oey=[OmpX/TR.za=g*!$N=ߐZ|ZԲD|~vICnqFe|"иƺ@-"5a(@PQLjO]K2vUZ/Cϟ&>P52hT55ޯ0GjYe2YgiԸt(x*ȝ]'gg@3[0j|Ҵ3zMg.\PD&?khxyIz̵]8 pE6s rMZj~&n iN,hB(TfySZL Ȗ4d*O@-ꏚ2sL'5 yy ERd j|8j@j?ș6/Y)Jfjvö*$Syک疪ZLoTHUHjIԀ.5}Ϩ 7^ PBG"Fklxu0jq Ӆ,Kc*PtS%]LޞM{X( ΣN;lj_R_{X҂oUc'Q=@͕@DjѪhoB*Pst+yEY{LjU5^lyjiQ5N[xU>FI$́bM*5br֎ZOkcR{X@cG*[1՞Ts"8VX{+Z7B\i3+kx3g5ucbh@S"C-53q^RVN*Vw<)Vlɦju$9JAc; EbMxq^YXtȽl΢?vb)1 j e9*$QbmJ柛l l"ʒm@mPػJJ)W5'P5b.4fۦ \aXD9g(]@-b'0jI5ӧ\Nj@ %#GG:9@ kjbPj@-hXak*Ɯ#&И=Pj@-hXa! ԀPK4@_{LW1-9؁F@Ķ@i^N9jP5g*TAբ;zL9m+;G;2FiD}lukɀaFPj Pj@HS4qd U5f$)F r*5ccj6Ԁ`5fTl@ 5#j$̘@ W@1j88Ԃ)Ԁ3j@--@ i)8Ԃ)Ԁ3j@--@ i)8Ԃ)Ԁ3j@--@ i)8Ԃ) ^jlڰd߫҅3IAۊ6yfRgP{蚊5ڒ\Ѝơ9D'I g5}riC-(T DZ/ڀPӃ4aj@Mj$i55&f 2/aj@Mj\̼ 5UDIc{Waj@Mj5SҼ 5UԈ6aS'ؤ5%Ɠs\TQ3&5U>$$a^"bS'` H ;i@@jzP |G;P>=@-jIߘl\- Dt~4'e0 6;DK>)I@ HРj@ IF -dlcjP5C#5&SC2KoUSJڴ66)O1y^Nc6jS!D0jZ%pW*j+9 QdI4LcV!:ad=Kon T|jڃ=àN66K8L&߲mlfP)L1eNڒml6P/FBڒmlP5@f6ڒmlQ;:q*ڒmlQ3Ed^L))-5ih 5Ԗ 9P'/lcj&6Wq@ovREU34Pjf T hPj@u3 4W"?LKrz1Zª$IV/F# U3;Pj@jb>$ys]fP)X),$b$pQqj@M@ I Ԁ ?iPE5~$5&+Pj*Hj@MWTH Ԁ.*@ #5 \T\PSG"-Pj5DZ$pQqj@M@ I Ԁ ?iPE5~$5&+Pj*Hj@MWTH Ԁ.*@ #5 \T\PSG"-Pj5DZ$pQqj@M@ I Ԁ ?iPE5~$5&+Pj*Hj@MWTH Ԁ.*@ #5 \T\PSG"-Pj5DZ$pQqj@M@ I Ԁ ?iPE5~$5&+Pj*Hj@MWTH Ԁ.*@ #Q#nWDwHӛkg.Pj`j.Ƅ$!78tqhNx  4nw? be /dj@-f|cea͜QP345B.>`gUAՠj,sa[L>j@MWL5]|UGoN@ %&$j4L@ "iWX]yqxZ.ڀZ]5[uZf S@ Y xA#&7!mc[P+; gV URA UW#rj~x q= ͕#Pjo*)gL郪AՠjZԅTVRP5Z9mӲ8W s@_jlڰVI͎a(O`A:s(jDgmh>3aaCɣk*jFkHqÃ)SGͶEpN2Lk8ZUcj8rM'j j#Iˡ;BC5F,FzԴ/CM*)n A8W~j(jP5' q?j|Ug+m7#\F ˮ]m@ EG"lk8vyԀ*j6iAMKg"XűVcz& [*Pǣv?eh-y <3P@y=J5ׇT@ՂLӃ) /-gZ͹оK m֑j$^"KPwXy1|_M#m@PH]5EHoLs㊚]"I j.3{䅚ڀ jA&&lW+r_ ZA\-L&ԌZHJ|Tk|Cj\D:ܟs I V˨Iq8hxmjZxzlc @ 8jЈk5WyHcms[mO@Ӽ- j Z79j!9jP < 5P_ "g@M#IYe5u΀Z ΀F$j8K5v=Y8c_ea r;PD^Lf;$ xZiAQs+ڀZ]惔vڀZSCy>jJ7([jjRI9ooSYRDHpC0WӨE&rBռ]qєۂZ(ߘx_5 ]Buqέ >n &M5i(p}^uLk4L^q_>E.i t]`AzʖrCQTT&mg cW㸯֔j,K>p/ &jxZP@ DE 5UB7Zj"jOS"ҎjN9sZ}m d5Cjh ^ \C0D'gF5F55CNҘPj" ڤ~, E t:dP3f(&#e5f(F@R3,h5 ܫ91ԨT6D9aLq VUVgܜiU ٫*QfJΡ%9ҖO`xy?zX[ 5W *6*0hL5x[[:Fj^Cb>,Jk>^w޷ -"aTYNU_QGT q ]gp;Snmǫ>}XolQD/c\fxFuqL8BT9yQ/qcSkv.%V~H}5:!U7ٖ^{ǮF~ l̉kt"8tS5qW]| ޴uX6gd)gYRL.:8mX76VT[^M MLlN6PQɜD~퓏k恃ҵbVb3_xtO{][ 񊳏0M 5ي` l8MgAD"%  fan>@ P3쪑5f(@PuiCvj@P@gWt\jgg"eCDU#%.E>e5CO%[ Ԁ5C5f(@Pj@ P3h"jKW^m5n8tqhqXpߟ]B 5?0D ?)NIENDB`5Ddn n C JA"2..\help\400-hw-timer.PNGmb4ަPً<:4n4ަPً<:PNG  IHDRQN[sRGBgAMA a cHRMz&u0`:pQ< pHYs+4$IDATx^}]q}Rѿ C۠ 0jLjRǪ8Jm!ذQ"|hbDrKթ/i횢++6ɪ(ɡ(;((Dw99w9sqDgo7垻?{b=ٳo/mY]{7w^X!`ԇ\̇/Iضn?3 =vv6CҸsIw^\|rqn9 C`yysB]Og{aa!`ԏr~Ck]n^am/l3 Q Z_vhbqmy$7/CT tԗ_f<%` N#Tހ z:@K 4]kn*_Sï/e<h7,ۍ7'{ig/ ~a?>v˗._e-׾qlq30 6hC'^ S F8sAgh|ї7 -{LcSp!E?{c.~W(>^t*}\wc?rrp8D  O>}tg^Ĩb="11ƟbK~+,+/kCv0 ЬJ'/[5$d/^(ʲG  i=b+k VoC8'!~y3г?9G ̌ /\Gp&KgjbQׂ-:hM?zדXI/]{]_p[+ !Ñ0PW {-Ga+=}T̳cۿǶk9!X >\C@gٺY =-Qۿ@zIقfR 8НrVKcV/V7AI`~{+wgxsoO9}{K(8 C|֭Nv`~dA6\)E OpcYmc(Y=m`s(U%5pt;5LI&Gp܆jWv5&W~֨nc;J_^s>^nDn%2(W49qzuΟ# )lC/c1]\!o A@a?_QPŸ~MKl Ұg?r ToȀuu?ela=BȂ#zߧ:ЀP!+N$X 4ecO]'~!WϡDCcQG=};Ï[D,dw8$ ;n} 83O^ޡN{a8w^UQ6KhK=Q8YPwlrQ1V?3"J Y[ vϽnzNQ]C 8V^[qD`;Kz)UY`grj" u1TFW] @}l 30cE?A]1{@x!<>E;w|ͭ_mq0`}W r]XCA 8W] }`?خFK}G,wOo\-]r>+ƻZ,OGsx]>S]͟S>NwE- $%CU;XS8}ri~Kw=pwȧGbUyz5*OϟuE#wbv9Afc |߯@;|5Ge8 |Tm_tX*G/uQmЧÂ߇(NtVԊ{o/{86v `-{nw@O_ܿ]nl48 ~^}о_>ut rp8cAȞΡX0*:"H{pEcHpР k؏)@[vWm1J6 k.CA~ xXzv Gv؅GVg?#2W:ЎmW-=%7P/ۯ=iO\ۆZ yΏڊ7F|yW`޸cWo >&li ̾Xԇ!R$sxY×C*R=EIBQZnBk"JE`@㼻 \b>ܶ?zN{ƍ?^{>Q C`,痴GvpOl0C`q|0[3慀q~^O53KShyy͞rg{R~⠙v04~:b|tX&Uo: ]rh݀vX Z\ph^9N%J1o6wn(}.z/̤A5Oyv+ u>ws&B kۦh8Ϣk:kvuUAv}3CJ@iA7!㌪J3 W;oꕱ"и!4IS' ɳ8vk:W*ES4Iq;ƖA-@-R%Vm8€p=э1GyJ9*ӈqbg=&&ЧQ+|nQXKޢ+ԟBe9zzoN lBc#U:dWs#5Փ]uDŽ, rA!,D%\&HzQYTz4G8.aZ=Lcfk gV0߳*hf,q8o 0f!8i!`]Զ] Ps)]|RH-Qs?!ǒ5(Ͽl @*8?J//V q& 8:U/"8o9b1u@/=&q8:S8{26O#soid~,^ |$d;ӞMYp8{ó:mPþWE| ~^9 v *)qG2t>8mJ^ɩgF5Wu>.q>&me">OVkx3|K5Nί. J+ ,y?8*jӌ;*H'߫V9z8|xSRѐ%1nd'Jx"֐x8W[Ԩcʐii2Sql5 `hr}ԜwY%KxZ6k:_Cd)Y3|vaOiK1k8|%5n%IVO6f7qdɩGq8_qɵQ}#`Ri"`>RrSgu+ld w˔q8wwŏ ]GOvXzXl{gy`l .s|džL hC*lL@zRu}18ookC^5p^c^fw1R7n# Ϛ>zcG3W'F%㛋VJs$\ѣ]|zYϧVIW=W$o(k"ma/V7~_+e%#w;iVq +/L$h1^Vy%m1pֻŹgɡK{6M?mLz)b;I'gmφ<?t5 QS}oS私T8硌 ئo?UwHPApUW|~ɛ<=Qp~Dןn-ٳc}̖E|O-.6y/r>>`mǚٓ@~RXܳΧNd>Ή}49} AgO)ΗzGu)9kg*fTh媛S@Tj ajG2@@X~D5A`M-mav6 s+pٍ ")t+rq8 ZՃql57ڍ(9+ q VGGuqMďߦ!`7B8?/[3yC`^orq8o mU0 y!`y!0/U9C8o7慀q~^*g`8yn>7ymhvuDklS$9/.\󚩟dM5:~E,ll!_?9kd}tR!]* f\DOk+ŮؔR2гcZGM}el5VySȖJ>CDsiG8o Fج>^*0ySG48ݚRgEz92M崳]?KkSI&/!>S $ԟt^y(ӏ:.%4yѫH8;ҖlMT@8 V!,ۘ!l1Ė55J.攳ق#T*F[|%"*\D *Ϛ 4O[5QR5.qRyx dmiAP蟷s4PL^](WWD,sx % 0ږ͵w6.•,.eUOi,~^{r&!rn{ { .t )TTi@RL؏%ོrU ,pYD>bY+ҍ.T *jSv vvYz]-ճv @,jrv׹20 4`߾qԴEϽʸ>%Ej|j^}Ԧg@lH-^S# ^jަ>GLvHR'SRyǺ( bw$|:ĺ|jQV,I.Ƕ_"kl Go\@3 i-qem)-Ţ (/L28bë|*x0.nr>{ݪ\[Sd{vVܡX v pW>6Y! rm)X9,8B# ׋rIX4 I@ zv$hlB C)%lj7 .dTy:;Uh"BCh@;W'󁖩K-5۹4 bL. .&k9^D{dl I14Ywas,sndn: Sz.؂ z63ku:]?{dJ[OC \8ӂ7QcG]U88_jd׎=G۬J!8YE`2?' P<{2_O :|u[3߀Kz3S вo218_/!<m-0ηMb0L_08ogh]Z(Rێ* 65|q/8_Gp|߹.mH#V;7ΏVGy;}K39 IV+|qX:_)vݾ8Qq҈Gt|&L8c(nwnxh ۝?Q(8h s u~B2c E@3U_n؇QLXTSةA:`qC)?fNiQv opg9k]rhWyb2˧HTJ lu~u>'AѠ5-B,ŪcL{) 54)?7Ώ-Y>D 9[糁)ArEC>Jh%p^Ѡ[k5|8FγkrbAy.h8߂H/G?tHL{!}<R&ε)γkZrYY|XS v8Gy%U&mSh8ߴšK6Uǎ[Yp>Iv:_ܭpi/+ T3ΏG 3Z/h8ou{`-:7~ű:_5du{[:_5 <47LNR~V9|aԟb/q~ ηit9o{ueioo[k@xKs3lo7, 7˞k>^>.DZcz:ψ4guj~GC`."{t~GaK&|\ځe,uN yv: o1cƉs>X51d5t 23O|:GM&|(Lkh)b 煛IFi\c<5wԩj\='"yetZT5n|&FH3g;zV iSu(BAt٧4ImJxA*e4NGCA?otA'dz$ ;$[/9Z ,D[FH~ҦG0L1NI,2FGkt-Tc 3t`r0-d)$'#F[ /CSS-LK!Y ɉɩː,Ty ReHBrrjἅi2$K!9U98y1i2$K!9a9%9/e9oaZ* RHN[Na )a$pU-UNz%.AfYz 9%=Iγaxt@M^ (A,%Ȱ-S|Pevũq)/$-zb1)*mLJX!,>~Vj^+5<|v!P/}IEXgu. bI]1TFF[O*,)+G),5OfM@h8ˑLq> r"f뛦 5h$|n'}=({ZqO]hϦ"܋WlKwEC@9Hɱff@&f{") w>] u88J=I_ Zϛ>XU3Χ,r#UgiH54chp:ѕeNJl`Fr8m2tQ[Cx&24 k Ӹ\I] LѵٕH+Z-&-dVwZ#$|k6p&,^Ȑ,ː,qzJ4-LK!Y Iy ReHBxs´Tx49œ0-^d)$MN_@i2$K!irbyC#Fpœ7;"` "`ww/*ٌ8bj 0mc]1wy}=plJB~|d#}x̓/iJv:F_{C;;/_gChl<)n%6㼥]R8P9s^xԻR`b1@aO}/5GY9RLXN_c]_v~hfj( jI:@ĶpFN\Rdר#8vjFAH82c.5<)?>0yK}V~{k9f9OI}|Ld]YA}46=&s8,Pz)vev/d㴯S&.%xa!#@\e+bbiTaЬ41#bwhR6k.9SIQ4TơRv5b_5ƴم\j P`5ImO@5) eC3xؿ1l 0eW6ס g%kjWm ԬsݺG%9zoB%ח!y.a}TکuGUzsv+R'衪|l3DX!vf!0FMRC`^1%ӹ,y!0/wيaƈq8o =ƺd:E8o7慀q~^.[1L0 y!`XL0e+I#y!0/\qyl0icDZ`Ri{9IENDB`3Dd3  p o C LA#4..\help\400-numerickp.PNGnbod7/W"lK7nCd7/W"lPNG  IHDRg 1sRGBgAMA a cHRMz&u0`:pQ< pHYs+IDATx^XcY&owgLߞ骮#{K@{{#{+ !!U3wTɤczoƷ<q8k^k_Ŭٹ_oο }=_]?;?G?߾*B8~ibQxVHHNg`d$}̀leC>xs@421EJƃ 4L?)~@ \ wR Rk(h?d Ln.Ӗ>/u[&]6(K͆(_BPP֐ t1"kX&2-a3 ӿw /Gp((GK=g6F諵, g2ƐX&f[BVGh濰AsFpO.!!bd jfF@VßO \k?0%s0 ]ِKL(t2( .0?~+ _!B Viq7c88?8%F1c'z' \p8+- rW=Lߚ\?E1hAl@󠋯TL;jfl!="Nɴ/ ''#=5).y TP+^(=}_vrW*{N5K[;;/gOwtgr ԵαC1)Ng&W1ʙ%"Fd="Gˡdi~Ϥѥvm=2B.g;|ce_+Lę}%bΩyF'@TM y7)#))d0*qebzT#^@ͣ2h:ز)>gr=Sַ犿 e=$Jrm°J@Tg&)+6f3Yzf"Z€D!93qITP<.b^}%Jl%F WnU.3e#\6m\(3CX):U83f|`x\`h9)Y$&g&~ x vf,50d3z %{U&o67rI ke7X| cu Nz7㕀eI̸ROBҼ z8NQuNQ7J8(_O&Wh\_)y#JY/rDoJT&pQ{넲)Z`&h/u@eƖ>5hSh7BSe#""+EZ#VM_f}׉5[ų󛇼wl 7-k#s+.eɕUx.d3_ #CXózgiȕ80'Ʉ*װj a^GJ6[29B]6D U,u]Y\e1ofNe׬#O+:·}o;8d JafL4#KW{_%!fW4L2ʮ!y,)w5|^.T~ k APHCg$vѼ!Y\FX#4rOMw;C0CCl;ӫ쟸%C |W9;m?FWf{o6Ξqqrm9E[l-^?9i {O:G ѾY2CcG4xzP:#,mhdL Hs)Ls N?\7r&J=gbd6RYWH+_I0RwJJ-gU݇[*m?-ۖek=z^C0"tǏiTFH&3, dׯt c:0fXv  Zk$óL1d$T0^ӳxjFX)8h?d,|^"=3pvwwz¢߾mgEHa3C ZeQd%Hwyi5tDA2K e%F&̬l6#v0b=/1"k)_3Z 㼎3 KI/zwҘˮ["o?WKբ9]K8ݏJe64V0Hf'5ʅztʹ9\awa_ΕgBfĈRis:z m:M hvb#\y We7JϿOd]O}r+=t_%_B $=S4PO# NN.A4fH*3 Lf$66DuDs3'^V=gr\"(+Q)")4}G!=A+'g$ oΜҞӽb~g#(DfBMb7F7zG4z66>c>}i3zI5\ϔ$Lq C\i$4X..?2ߩ@/iޱ4D?@'/azG(. _oG92xf8E655qvXo \ltZgߞڶ,̇ߜtwOx׻3JrlKg_\3/z11N_oNGeM!o+DP, B #|(A[݇>˸ʷO0$IA#x8"SW:$X11y ;=('?\qk.&+f(V/Y5YeeeeԚ3+kr𣚊*,ZU>&VO܆\zM^P?Ý5 E/j*t0p*mb61 ۘ-&Fe[Se UΪja*+z А*oa7mʎFwۛxfX./B|C_Cewg쭸hgtT ut6WJ[z*{kZYƉIN|hǷm##~`7;k6'XW((d)HVKu`e] XlEڢh}qC^__ ¥ ʆhyS""ɑlrÝ9 cV!2~M;W ,M]{{b`euX]C3=%C]E}7t5nW0йqCW禊ʧڟ22RxDq}s5gO}Yszb{&ݜ,|(ռnhh}UGgW ]P6VO}lu t>T4|lyOꭏn\͟)VՍ[w|qn~z}e;;5/UTOF_嵫q_~ѧ~?2v;M/GpPPKvvIieMܹ٩顅ṙQ*wǞaLvwSbBܝ<2T07Uz䓗UO,Jlninmnmijhmjo*lhj/M$eR"b}lYYhCvfϰ-/Έ-MiHgLLLO;]^_Yg/-Ύ3kʊs bcC}\[=4xh`[]W9im,Y]Z[\]YMFG8+SܥI>oV(Ng?Og3}%[kVJ-MMr,,*/**tζδ}inNO%R)bO(a(_P {pjv(ˋ+Oh)fg1;sC C18weǝ^,n778ggGڛF%'Gz:ktc\6].ΏcFΏ1{2L-lUZy4rDb}s @_ڒ6zyG0fyaxqa8wN[/9Ԥ*)$2՝κюᦉ汑Ʊᦱ! k9d FC}ZV}69A8MN8PQ.Wp<%N,R o&;47 uӹ݋s3)T6[|h).2%90-9(*@NI'@Wp[-oulq~r]YYYY_],c+&SI^NOr3|i} RL,/CX1Y.w^$rDmhiHKJR`xKX|0ƛyʼn^Peqin~gy |WskkK;m@km\GlkY_\]螟욝蝞잙잞蜙oױіvfq\OB?&\'(E"ql¦DBvhdW{*Թ*? f6v$3UJ)+$3kr;|ھÓJWw񕽽*^J$xZ&6.ōYpbvDGW!*K@$DT-\_ Wֱ@@(aeXP"0,<3uT=ppppo5)!_DHBAKx BhC} rݖKv{[U ):䗟q=/׮xv^Zx \V2A@ ׽jn_Y^PX/T*l Ncw51QGɉvFf ]^}iziekhϹ~|EdgF>}dmV>Љ}m~k!B|]-%;. D,gdQC3)qQA6|U38a/S> _B5( ְ_rdJY&kl ўI"IAzvjR@Z A ܜkk xz}E_8߼K۷>ӄQ-y:Q~A9額u95=4w8cE!Zla`C]yd߬`kg8֮F4 wȅ)8BUOv_Hg}qfh)UX6]@8i_WBYY"&j_zr`d퟇jt6w6,Lw}K_ek?lmnlmneP3R"tT> 1@,Ʌ!yEfiu}%qQqCrzvOMEjW[`o=2!y eR)$po7G@CZL_1d QbQNN666s2rIITJHl^.= kElz/Sr=>)3y4:@FQrQbA"H"f[*Ž!*laz̃-ط]*?-9.1.GH ]Tێƒގ2o-ʦicsu ̃{A8&z<{GM̢2y+Kc0n y||,{f\9g{l1nG+k8OxPWW' }Ep~~UΓUX+D`l.{[7%9$$_3+AV*{Z?z|bo/re']NK߈#4 U,(x@2iT5ٶ0ܕ.9yy/nm aOWEIqɉё6 ==mҗ -229ճەD(9:څ '' 1Ƭ|F}vwK%V䐳OJN"B=[w65W 9ؽ}+n8nAf6Ô@ O[U^0` mA]v23vppppo@JPłR~NNxL/hk)gxˋsCs#*wmu*9DPϰ`g#(ľiivi8[#FeW trp>6—L}la^koG g2$cPPYSvs U/K$=wiB=yi"yꪙn[pǿ\Y@|xEkfR\ );2,2U'7#d-n*eOݼʆEWjP*:9[⥕EdgV+ӄh9X.Nu\JixRK8qK6xt{cwƍ/ʣhurܳfZN_{cr.pgy0VHήqQwBN.o \9r !Rp&7"D%W^T h\P-a5]Ō[XG KT벼(ΥD%xGj 1RT"yQB"PEaI 5kgYϡN_iB_@FLהp#=r_TuBF]6mSDypHPfGC-#cC-#-#C-8wwTwִ4eSq~нY~.|je| VىO-iq6{ Up #X@#m5ʼ,$1vfʨO`Mv7t"XэnP/}eD%%LZA}uQa.%=%:^Lؓ^pXXOUTH/@Qsig[eW **S(/mi`5Veq yfxOA]S D#P:\r̯Aq?~  7 ̛a =e}sQV1nat4Ww4U HuՄ8 73+贂JzCqeifVF)> PJu^l`=̾Ά6Ve{cy[c*`b-9J%ftbjZ҂X綏ByHSO'Y.iCQH+nf71m̒ΖFY^j(.B q1e嶷uԌ5u7![(%$*obfF9V\ނO.`RTZO uTrvPT)"BY K. 0ˈTD 3.D!{>3Յ5̍ 7 $ 4x8棆[Sp+zuZ+Ӂy)Ue8::.,՗43KQfKj*3!Tbz:hJ!7Te65JX % Y9UYWUfT 3bQ lH1V ZszQy17(M/KN%DŽ{>R<&aE UǬfUWo#PD_l!vG:^[PW[[US^Y;$S#]l-M%Eى2j_*) 8_J|%?/=(/44"4$8?)ZJb`JbOL}CcûfJff榅P*CI ' 1 +)H.OάήĂKMO I anqnA>O͌tn>~3XG ᢈ(P,c[$y4U[u&p5%U?ӄtx:dF0ԿvHCDkp}_'^Ox8Ԕȼ,RA)$󩗻#7zF*踻Y<pChq@O}}t39\Ri%7HRL@T{~vnNi2־}Jcw.ݜlٛ;[8Y{:[;?sr z)bs;3W'#G;]%c]ES}ksU'{co'lhZZh(53U~h~S#AvAnO=6B\RTx]##~sι8"&\'(`wさeSG +j_G徑 C}e}h枷Ǔ_853=ecۦw ߲4R0V5%3 '[k{7 fuඅ]`@l|Y?baatXGQEc=/ 4|inh}TWL#GzwiӸisLw-3S:Y>б4XLH c;&:n(=un=KSeC#<*u 5l;D\f_h4425++ugGKW' Wjվg:W,̔]-QnfgB\_顙6:x ]u*z=oajQFs#,kzJfFwM=l[h[*++[*j]0rCj?w51w@Y[ -J(LO =M{W n8ywwydinh{󙵊5336>X+ jtk)k|zjW~8"?\eqD8MN8Pѷ:Ι)E>x~6ſ[]$ #ネ S|g4J pxl{@ +|<$zWQA5W1һZ+)Ƶ QV)F`1,DpVVpZeV:.rmE`Gpxs/]["'Dńy975#()ޥ4Y{niqadpO4n|# -Qb4DM!bs边!p#BT'1rZJ6׸(q &)$Jb#ӫ?x9<=ۛJQuH"\ϋS^ H2rItָ@`~[J۫( 3Ʒr-,''Q*x9mMe4KĂr(Biwursz/ +*H >T?tՔ[|N7wwUr}P% 6-X-iG#`oqqK4*5 }8 0*y3_Gɋӣn6T)qPq`!zg$ŹNqWA GAM׻"R>?ݶZ_B-름HuG/^ S^TNIM"_[EcZ ڱm*+op@r^;yq ia6FyS5}e@yuRxU^^# J70)!YMzx"99;8:fRP쬢`_]=Q0ݲ]r}qڮ)NJRu .qVɖ`yy*ŃZX&Q@=T*?:8~@!,LI HM $h+57&:a留bY1[6o'+pFZX 9D;㈗ө̴gm¡:`k!*4B.ݣC '35%FtrQ FZ>ͥۛťKuC\SVJNOA.g͌Bz;gl,. teBK/D"qyI%¿i`(4,ʬKD;*Fp&˯*+!׭5t{њ㗒 vJ"r{iD rѢYW)w s|o[_Ow_RJk܁ y;,Ǩ@M/u@zrPrv*:zNj }=JiEe 4{_DUWZMeRÒbn^{&N}Ջs]g^fr}E5G*RbPjrM UGj.G.ktngk˙;B+DCnP~z|tGlKH M[ZRMSd]Η0l F,#^<[ pI]_GC~q9<ݛKMA A {^n10ot<@`b3 >f۶%"ǿ ֖ \srlʭ?함Agev\25j`f^/OJ4 IMHIչu觌&4+anKV ]X]}Uz^ ɋ/vfKb_vjJUo(``e ϝCO3tT-ε +!K9V&W87ՠ%*~dQ ŽKs G' qUi5F E{wZY ,Ww[0sg.sW_ar!Ps"G6LO1Q75r5uo0@S768"p{ xC, DB5t$Yb:S7Q+J69,J^uoc@C*5%)8r'~j\>u/ul`[x^D}}E%om5}=5K '9y~Xnx@&/dKY]ZLL V5sӿmOo?(q`+%kKMtA7ѣ+_Kww;⣽(aPcm y=A| tD(!l](&2&"(\@:D\)Vn>б5/8KQcUb5#Y;?"=+.Q3V.hwطp%ޮ$|7>st>Ë 툿psX+C|-hB}}zN*H 1z^JCeO왷Xps%:9';;6VgBPJr1WUTz=0Jxilmn"Uv\& =39sg]'0p909sP\ԶR& ]_s*K*PZH;W?>I:t\eŁ!n 1 @kM$}{_ }t\596 0cm-d?T8ob-Gԁ4묇`X7'ÿ&&:z=y١;ؗ@S$B|X:Č>)MV<* >tp ;efy9<?P!H#ww_e ($8 JU8AcW/v$h4&)]Vmvg ϙDU$Z@j@ VhoGbn&aĜBn $; 2?ٽ1!.Jjy~>N8El}#8>D#9ihiJA91XK嚛欌l|00xUQP*b㸀 |N:E@EdoWj_z?)lfw.`Bw֥Rtcۺm>$\P;2b#{tJ%=h,ꭝk,#f(j%zXkTXP[Ύx]6U%RxrRP׽;uSe5H xΌ!!h6:3Į^kEH{\"";+9=-:598&Sn1iDۻX b_am]tfX[hn!A0>ހV ),%7&@Ugd`?ttqbif0 ?58#L,A2|z.e{vj0+#X.$Gf—>vY[(ieaI%a{Fd67%[ۂmMp.">Hgsn,pdDHGo[C+[K;Kl v@j 9" + r)٩h~^j̾J^i;4%N]m͍%.p 4tuTwuc]wВV[XVMYش5v3нfD+joB~!ZA^ HK}FG -[iř9*hnjmꬎb9dž" *,_|NmEF#-bͬR@9 .e .We&gFiG>vDߐL >h ŭ .n kB'\5` ?xk|lCF+c}CA~:/SQ䄧h `P@7^_Ndc;[jۚj`BL#| 2HH,{z)6K. _GZX}4{1]2XfFe3V4 V%qf5;sHѱ:?PQtil " g )m1ps4,=A5BfE+)J#ee$F{詪u0t]g v1;+ilmhcV0+Ea75&|f5?*/Cĸ@S]-?ѻeRZVWQP،ܼܢܢ̢ܜҼܢ4Jb*)rNCgqO,`M_GVg$+՝Um2L^STS]YLHvjrjs+sk+-fPbc=?T]V}yJ = ݻ;껛j0]u4?nM^B-̫(hά*˨+ϮÝ+*shu@WdfG>׸s[%dీBN<$uXH/hV_S^O)-BSYYQxHqjE)D%y4FT礫|[Wey!Mu9m@SK[KhXge9Ӫ*/P;)U%iT-HHI0Q(;MWANr^. ;6+ =CSòRèfgP#SSCY0 ("@Rq:q1^_)}r9 q}jcgb]?;R7~=\cΰP(ot z _>OA뉿 m[* o<3"@Nq^TJdIa2>4?5_{?(swqvqqwv@YF|v]kϟ녇zD඙Y̤Drbxlwdh`sg+7ָ*;ԯij=Scuǧsgo7>x3'''w'7<\]]={j}'7t&&?x#nMtoi1м_~jp&1  jwB_mh\1~hafpudim ~历ʗW~ ;Z͍u5?U~DT떎Dx vOltZk]}`fhZfFNY*>~huMO m5UTvE[P@ Y<3STvr pq}}-+SUkͧOt{>Գ6gf`b M`Cٙh+(Y++jT+U#Ϟ=u}j= ;jC{ FWs?}՟苏Ϳ_~pW ~qOT-U[7йwUM, >xow2}!8.|P+m!$h$20hƁ> v;"H*7ֈ.zn^MiQ^f"qv6=R+cT<߱YXZf 4Kl۰郠%(G4j;{rӢ2QԤ@gvFJKx.^ر8hsB#BOxl7L?Sm"V^eOKmC07;<.3#KscXDw.$+͋8׊D\=KKRӉ E<0{ʨvK+AZ>07 |@-1l77ťyhKDOrx:s;-,mXf`f9 "U#.;(nh^KOE{llc#B,ՂCL\DB] XD_ф)#hms!*+(@rAz*͌C(u!r/A )EFRZ0Q":UVzRMxnf336[͡/ܻ*pw r>t?I%=jo,icO 3WC9bbvOne%"%RP'z;싳|x$8/ulBJe֖@$vw*JF@pO 8[Ͱ]͕3MHͼ Q!-1@/>:k#f7-4e}G0 0eeP@G{KjH>'ac`l{8uտ\?YTFzrp]핫˃ej]XS~!c"pg 9l ]%ocjJvVp_ $!Qh!Exm&ٕlWUK.3]to~s"!9~3-?$2Y^Wpp_r(e2R⃨n<{hVZ&Z7O5@_Ѥv~ZſnQ2MP _% 3]-z?Nk<$t_9_8.Orƒf$[чYM6PُvC(LJ\*Im_{h?my{c} ۱\+r.$[J4ձP*MIuaj;G"~v9sA>7"y;,gnH싎Z5>0{iU *1&ZGFᑄ(r;lb<+=59B[OWq-Bq\N[Mj*Y]CEՕ=oҵՃ 0'5IE"C,mjna 3Cw ʈ9]4kH%;%lRC_綿 )+wf3V!W9žfl]u,>Q $7i7Ө]%h99 fx\!Z/tQ3񩹾oA4'jr=N_DGt6 um@hּ<8J8e%|0_xtJr-Ã[Q} K("0Ȝ+.0a!sz-T&"C Rc_1{`ŢՅy05#0*$?;AXb[swz }e.\7oj42(z˦FQ'}WMwzvգ-|@^J8.Oh сJMƗcbO F?ݯ^ ٨3%a!~{+0"4Z\@31\ߵo:+7J!``/_n7w4mD˦Gc8fB! &b<=>loDK"r2(9m Wb4q"~&xSGm1v8 22о~>_V3}%8.w/# PH?`@le*jBǨ<=sRSp0~nښ_CԎ r%Z%LL_eE@E|0|A50 HGG]٣ߠm6L6y%G'W;,n&Κ(D9y62Z BOojP?L?,0/ ; ް!^>~r)0DM o}Sq9<"uq]fO{OLaRereTѼ {W#@5qn:`@KrCb oe/z{Wx mnuq9KG,@K_5sŠ cf{{"l#8'{}Ѫ[YAfP4m2X% 2F @ |`fhkV>K6`rd .ګ}.S!¾rr?QOqWaap#(7D{44pAҸOlw_lWG *?B|[g 43;<6-@V4苴Ipo<}.Rb})+?^6 i/mgP)ADQ "yqsC+) Q>6f:?F>aPK S"r2FhYE3oEKp띞@5y`V>K6r=#mq\OqxՇggCK^8q!ZGE+$[R.;hC$ 5>P/k4*}m~q iO:~W":ܖUT!mek.v]Yg]_Xzk@xցѾYxlejbqmEb=DP]2 ;;KK GHH`"؀C'/X*{[8.6@riH|iiL:1zrߦh9-AbO"L1.1_IE+5=*6r!R{+q0~0 䘆,)+y@CDr!ehCdH8D"#ͣ# -AR85BEo^I97[zvPOoJPZ>>D\ C2VA O H <|2NӃ_jž))LO[8Γ6|{29tZIuͅP౰}$#8.h\})MFz 9)Gؐ^ΊƪޮLogD7 z8av3Z- \}hh"ON''~X=% 2٩]*cfe=ncmnui,pr'{,Ք&3AێS5+ E?{&Df)Gމ =ۑW$"ln.o㐓67iFhirx:M%E=bd/08!z˜} Z[m,$ >hH:}BaR- 4ݞdѳϸ@^>%giT) D   =vw&GI0IFX:ܭVp0ša6YX(3hp_`Ƈ:';gV@8??7501ҁ^}ja5TTg}߷|5o A t{a` 6wbHiIrzCQ+\VuAQ:ĸ(pzny9mlEVNeF184 \iGT*U3QЉԄ 5O 蝡z0Mtv46 P,o2^4# I Nq͍M)obUUQil_SJ@ l5772Jt5jksh%Dw N;P#*??+%-9"2T_SWWoIM_ 4[ѻ@QTmO;UJ"hjXҦF \X_ EKc9'5y%ũ9I>n(vvV/ɉq++F5@鵘l1bV})st^ZIiIZ]m~yifvF9&0]G_u m5JV- k*О^WD+SA`9m =%x[]e.(aKPM w7(fQ4=`FkN}UNUE6<JYRjo+ (4 +RJ2)03@o㚭8.jea*(0SyB)&(&-"5.*+ϣ#]b()a1IeiեlVtϞ޷6MU]I341o UpQn~NRY!( 8Sq1na!>O=ٙh*q7 }<>)^ڂU ҲsbjuR&% p`א _5lp|jeLG|8l $x}/37~gOu޳0V415& ƺ-r qrzjcoP) (P1A>Hit}.whgfeeKCT+<0&@\呗#w{K 5MT-٘&SVzm̍AHOvO>ҷ|heih@R|dZ T^N-u<ҷֲ2W53R15V2S6U03Uru rSfO=u5vxj>)8$P6V.n,>467U1Ò8lMG~ 3# +rKr%2()p9Aigm427=O&Y_65c!O,Ln8>3N!Vesוg$g%~7NʢPl4TPkjJ&ee3 @WSSCVjAKbi USj5a |nhFPO p5Ks)I!D{(a8;"D! qDmG|;E{rx:m%ơt]`y!ѴPeqV?: K ^pO Fj*9|#}j*"Z{i ]h:7;zt" WlqFDh-}(]]Y"'W+~nJ 6i vsQ2ۺ!\ Tٷ@WRV?+'Ro =3!?=Eg[V#bzچ7劄M$ q0 _S-VW+iLԭyA $Zh(/d*7h 2[4nFEy$'㉵o}\{9yf3vx rOI%(?9DM"91XC(a/w^_Z+(8ky/}qt)lkj1j`<|W;y}_I)f-Eݨ1k,Wr합_!L{bsvW948 s/Âu6 <\,z@yꛈ3k,A FТN*X[+ʅ.."@hYό3v6 |i=,{q-M HiUh@{8]3ZXB!eY(hEI$mHC^=>@SN%Ě?^E)r}N&^ʌN!S@_\^woeHC5R6dM(cp4E'{WpSdž)~QvJf&ַ[*{THv+>ʡ(nzTLL8KG[ll_ re+8s='ilmu5u&mw|FM\?>n06V&kcwpZV&S\m /5~ֲ) 1wouϽ^ P)!n%J$G5̿$OmtݮL쨛hFm \+~L-֐GM jĴj:QKO SQ14EvN,cm˳sc2}SZa0սwO||Ǜz&tW]Dz;Nky۱(U9JB ]38jwIME ejYZa4Q +7޷Or}}v4.դ_#)c44.o"Ss&IfF dh, { \]NBCDP?#Ygya,GjIMDWV6w>yCNrx:rU~9=;h\ rg]Z_oyG{rï^ ¼t*9'=Q<=R{S> uc̕Ů]H8krWuqYa>ɥ%Fz]qJN Pٳ}UM9ʮvhh_˪aPq,QV iؐ?3$Nz^=pINNvބxWjb߽㕾qz㕌q9<ݵaahBƺ`m Ȇa \KTv}^ߗ/_?gnjFRA>wuHN;3d8׆S)T#r?;~ucp47!qDj+~noMd6;݄@z/ '-z{D:<aUUttƨ@_z|yw[[@Uͻ|+ ݕu;{Ҟ~Wrq<ݵ~n Q|Dl ~ͯ\~j-kAz9LUs_EupۡPV"G"^m7G?p,')ɁA^j?;ZIbW:5F[u%<u?x t~#IděU&vƽhB+.7x`'vOҍ'_77g߃Coq\ Owwf_#j~\\*8@t}]TIyO}(gsQ NGgoTVd2?;fxh4 )%QJ7>ydyu9IT .9!g!3H$$G޸egD4=cjyow g-Dh*zD)w^|}+@S8lQ>mt?}>|"tZh}Uc|nYW%"̽NtG+8  ?J [@ <bv}01gěu֕D~"Hĸ1PHVڞ 6U"8"qnZ:JOL3 lB;|"&DcxD$ugiN)$!JW~z*J;1z$J ȕHb .bWD3'1g ON⌤h?MU%-[]FjmٓD@m3EY<&}B /Q>ar)TX>t7(,@5NގG B{ BDEp yGDxGQ3 @o?rSaTg{VU})!OPoQy)l Zhm _Ff674$`ap~> SFP_gDLў)0K=@30 00$bwowp@ݽɡI0Ҡ)n\" 1fL:aB9B0=m¸m RQ /$z:*_k˒s{܁MdE .ᓣax} %^hn!go~r6>?X07w4enn'YR]]FErO ~^'0FCxE^f:> |ݺ@-z]jVG[g:AG[$i#*ʺ舨jfi~8;7Prl[W~ᮉPo[ k|mvu3 Di 0EΕۂ n7!.ht2%z9(|ley0H1љh. <3,& q' Z)>t`\c5Sm~z疹/+KA6 <mjezczgn{ei\|0Z|0Fb4=56 b"rQ~ 5%S=]5ſ|ݽQ>>T=uMw j: *T72Q[j2VCX6:Z[X̒FFq]UNnx˿tө.#7գ]9j5+j M*&T`Ac﮶QHw*(>;dco\A~vA!>O?vG rx:51* 7kζVn;{xy?fa=M LUP[m[ڷojR[ff*O:Y=54Q16uK_㎁G:j7u{C==Mp[(ٛy9<6WE=/n¯4T?ԼqCC܏lmM=ܞ89X[iҺ'?Qy֯ƯLo֍_+B/?VV=]~Nl--L U:p{jW*|rwn|rnѭR{֕߹ҭݻ]ūʊW4?3SSQDKʇ<RRlEnQ Td ơ L&,¾` GZ- F$/ggO Ѩ3:|q613I&άnhl B-U^ ,@70FCc@y>=53ىxѶɑVāgKo?fe C@>qk.!IV̀B 6&h@WyFNWR;U`%^$b1V8V%0~ bF}1J(?0g;xQ`(JFM96,Yeed#W.\wͻs~M9ߜ>~}\VyD]XySGV?)w4=z?b~/V??q)O, our}ss;?b=})=λ\>~Nj}4}/[i<ߜeW[s)웾}?s~G4Aߪ'n8M+3/3 \*'<qk^\¿B_ r7a ?WOIENDB` i8@8 NormalCJ_HaJmH sH tH <@< Heading 1@&5CJ$KH$\aJ$8@"8 Heading 2@&5CJ \aJ 8@28 Heading 3@&5CJ\aJ8@B8 Heading 4@&5CJ\aJ<A@< Default Paragraph Fonte@ HTML Preformatted7 2( Px 4 #\'*.25@9CJOJPJQJ^JaJ>V@> FollowedHyperlink >*B* ph<^@< Normal (Web) CJaJFU@!F Hyperlink#57>*B*CJS*Y(\aJph"W@1" Strong5\y %&'Te 3 4 5 R W 7 L p &M[i *56ERSivw "')Go>bjyYs@Z !!##$q$r$~$$$% &{'|''(((((() ) ))\)))<*G**.+}++,4-3/y//0/2J4K4R455555556P666/80828>8e8f8g88999a:k:*;7;<'< =$=V>^>3@D@ABiCCCCCCD D!DD^EEFFGGkGmGGGGGGG%H&H'HbHcHdHHHHHHHIIIVIWIXIIIIIIIIJJ JJNJJJKKKNMdM(OQOOOPPPPPPPP9QQ)RRRSgSSS TT1TDT[ToTTTTTTTTUU)U>USUaUtUUUUUUUUUUVVVV5X6X7XwXXXXYY*YjYkYnYYYYYYSZTZVZZZZ[[[g[h[j[[[[\\\"\$\]] ]R]S]U]]]]]^3^^```FaHaabmbbncpcrcccccc"d$d7dtddddBeDeVee[f]fiffWgYgtggghVhjjjLjj=kkQlSl_lllgmimmmnnnn?opqqq r8rrs"uvvw?wx^y`ytyyz[|~ ~ ~.~U~V~W~~Dd@ALWE|h IJN<=A@v*+6E)|ҍ;O G]^ P|ŐƐFƑǑϑ3:ߒ B`g͓[79>~ەPtĖ.UVWnopҗٗ/d*,lmxIJLX֛ܛ^` !%&(*,.02469:<>@BDFHJLMOQSUWY[]_`bdfhjlnprstuxٟ )]f%&(*Lstu΢QqGL~Ҥ 1`ӥإ NTZզSӧ#$?OZ!BLv߭ ȯگ5\]^uvձֱ+,ABwx~13UXȴص(INU^&;7d$,ͻ#$=Ywνнe/0135^$e SXY DEUno,7 DPFG\]4mAB&'Drs .Y^~'in$%cCM{"9@ V] def}~:{ IUV~Fh.X| 9noBx O|B j}(0~dj^jfj678NO,[\c>n"LM67u(45x./pqoT^6?u|&'hi<CMW~CLMUV!"UVxyLA^Bas?klApqv<abS^_ BO S     6 I r  7  g i k       <} *DO4b Jj6;|}<QR :;u1HYm3ICDE[\ 8 9 p    !E!F!M!|!!!!!!!"%"&"I"l"""""""""*#4#c#### $ $3$V$`$g$$$$$)%T%U%[%%%%%%%%&&a&&& 'D'E'''(=(?(|(((:)y))))]*q*+,,--m.c0y01E233N4P4R4`44444444444444444444445555!5#5$5&5(5*5,5/5152545>5@5B5E5G5H5J5T5V5`5c5e5f5h5u5w5y5|5~5555555555555555555555555555555555555566 6 6 666 6"6$6&6(6)6+67696C6E6G6H6J6V6X6Z6\6^6_6a6c6e6g6i6k6l6n6y6{66666666666666666666666666666666677777777(7*737577787:7<7>7@7B7D7E7G7I7K7M7O7Q7R7T7V7b77777@8o8u8x8888888888888888888888888999 9 99999999"9%9)9+9-9/919395999=9A9D9F9H9K9M9O9P9S9V9X9Z9\9^9`9b9d9f9h9j9n9r9t9v9x9z9{9~99999999999999999999999999999999999999999999999999999999999999::::: : ::::::::::!:#:%:':):+:-:/:1:3:5:7:9:;:=:?:@:D:G:I:K:M:O:Q:S:U:W:Y:[:]:_:a:c:e:i:j:::::::::-;.;0;4;L;M;O;S;h;i;k;o;~;;;;;;;;;;;;;;;;b<c<f<j<{<|<<<<<<<========>>>z?{?????o@p@y@YAZA_AAAAwBxB~BCCCCCDDDDE EE5F6FDFFFFGGGHHHIHJHPH8I9IJIIIIHJIJNJJJJ KKKKKKLLL1M2M?MMMMNNN\O]OdO P PPPPP-Q.QBQQQ R!S"S2SSSSSSSPTQTbTTTTTTTeUfUnUUUU&V'VAVVVVnWoW|W-X.X6XDXEXTXXXX@YAYKYYYYRZSZ]Z[[([[[[{\|\\]]]`^a^w^~___``a`q``` abbbbcc+c,cBcccccccUdVdadee ewexe|eff!fgggHgIgSghh)hhhiViWihiajbjqjjjjkk(klllmmmmmmhninsngohopo1p2p:ppppppppppppppp qcqdqpq&r'r3rrrrssssssQtRtZtCuDuMuuuuuuv]v^vgvww wwwwuxvxxxxxyyy&z'z+zD{E{M{{{{{{{|||E}F}O}}}}}}~6~7~B~_`c .΄efvefqÆ78IMN`tuyST[ clLYvǎɎˎ̎Ԏ֎؎َ   "$'(0256>@CDLNQRZ\_`hjmnpy̏MǐA:dfĒʒВْܒޒ  "$9:<@HJSXZ\^acyz|Ǔɓғדٓۓݓ'(*468FGIKMNPRSUY_enqsuwȔ˔͔ϔєٔ۔ݔޔ   !#%,.0137:<BEGIKRTVWY]cenqsuw•˕ΕЕҕԕޕ  679=@BHefhloqwȖɖ˖   !#%&(,24=@BDFNPRSUY_ajmoqs{}×Ɨȗʗ̗ӗ՗חؗڗޗ   "$&/1346:@BKNPRT_acdfØŘΘ PQSW`bk˙̙Ιϛۛܛޛ-.039;G$&2rsuy`acmoqܟݟߟ &~  "(DEGKNPVuvx~ݡޡ   )568;>@Fijlpsu{עآڢ   235:<>AUVX\^`cãǣɣˣΣ  UVX[ceqȤ567Q(7zΧ)/)mթ!j+TCWo[̮خOۯ-Ŵѵ"-3;<KŷƷطPQf-_`¹Ĺƹǹɹҹ  #015AJ^_coxźκ &9:>JShilxĻŻɻһػ$%)28[\`ioȼɼ˼Լ(56:FObcgs|Ƚѽ -.1=FefjvؾOQ¿q$&(:uvw,=>&"&'+4:cdhtz]^ajpEFJSYHILV\IJNU[bc'(.cdgBCDk&'9CFVWgswDEFRVLMN_b ;MW'7?Hjry' 8&PQ)*+S!"*0CDJM?t #1+;[]_y% &'/5 Z[]_yY[er~ABPUabe  ghkfgj567u &.3M ,1Q9;=Gnop~7P.02Cjkl}~   %().127:;@CDILMRUV[^_dghmpqvyz  !$%*-.367<?@EHINQRWZ[`cdilmruv{~  !&)*/238;<ADEJMNSVW\_`ehinqrwz{  "%&+./478=@AFIJORSX[\adejmnsvw| !"'*+0349<=BEFWX\`aeijnrsw{|  #&',/0589>ABGJKPSTY\]befknotwx}          " # ( + , 1 4 5 : = > C F G L O P U X Y ^ a b g j k p s t y | }                                                       $ ' ( - 0 1 6 9 : ? B C H K L Q T U Z ] ^ c f g l o p u x y ~                                                       # $ ) , - 2 5 6 ; > ? D G H M P Q V Y Z _ b c h k l q t u z } ~                                                       # 5 R           /5QuwyS/^#Iiw')=?e&'(Ouv}~$12HIS`lmu{#&AMNjku       !!!! !#!!! """#"$".";"G"H"R"[""""#####I$J$$$$$$$$$$$$%%%%&&Q&]&^&p&q&{&&&&&&&&&&&&'#'$'6'7'A'N'Z'['d'm''''' ( (((n(o(y(((())))****%*2*>*?*C*F*!+"+b+g+h+~++++++++m,n,,,,,,,,,,,-<-=-D-J----------....$.%.,.2.H.I............////E0F000000000000l1m1v1y1:2;2{22223333+3,383>3?4@4I4O4555556F6G6Q6^6j6k6w6}6~777788999G999999999::::<<O<R<S<<<<<<<< ==> >>>T?U?????@@@@(@)@4@:@3A4Ab?b@bbbbbbbbbbbbbb cc@cAcccccccccccccccd,d-dVdWdydddddddde+e,e-eOeffffffgg g=g>gBgkglgpggggggghhhh}iiijjjjkk&k3k@kKkVkaklknkrktkllllmmm)m4m6m;m=manbnon|nnnnnnnnnooooooooooooppppppppppppqqqqqqqqqqSrrrrrrrrss"s$s&s7s^s_s`sqssstt0uuuuv$vvwwwwwwwwwwwxx x;x(0503@(050A0A000C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C0C(0C0 J0 J0 J(0C0J(0C0K(0C0NM(0C0(O(0C0O0O0O0O0O0O0O(0C0P0P0P0P 0P 0P 0P0P(0C 0S 0S 0S 0S 0S 0S 0S 0S 0S 0 S 0 S 0 S 0 S 0 S 0S 0S 0S 0S 0S 0S 0S0S0S0S0S0S0S0S(0C0U(0C0V0V0V0V0V0V0V0V0V0V0V0V0V0V(0C(0C0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY0nY(0C(0C0\0\0\0\0\0\0\0\0\(0C(0C0] 0] 0] 0] 0](0C0`0`0`0`0`(0C0mb0mb0mb0mb0mb0mb0mb(0C0c0c(0C0$d 0$d 0$d 0$d 0$d0$d(0C0De 0De0De(0C0]f 0]f0]f(0C0Yg 0Yg 0Yg 0Yg 0Yg0Yg(0C0j 0j 0j 0j 0j0j(0C0Sl 0Sl 0Sl0Sl(0C0im 0im0im(0C0n 0n 0n 0n 0n0n(0C0q 0q 0q 0q 0q0q(0C0v 0v 0v0v(0C0`y 0`y 0`y 0`y0`y0`y0`y0`y0`y0`y0`y(0C0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~0~(0C0000000000000000000000000000(0C(0C0000000000000(0C0G0G0G0G0G0G0G0G0G(0C(0C000000000000000000000000000000(0C(0C0 0 0 0 0(0C0P(0C0000000(0C0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W0W(0C0J0J0J(0C0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛0֛(0C(0C0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x(0C0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u(0C0?(0C00(0C00(0C00(0C000000(0C000(0C0ȯ0ȯ0ȯ0ȯ0ȯ0ȯ0ȯ0ȯ0ȯ(0C0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^0^(0C0(0C0I(0C0(0C0U(0C0&! 0&! 0&! 0&! 0&0&(0C0$(0C00000000(0C0н0н0н0н0н0н0н0н0н0н(0C000000000000000000000000000000(0C0(0C0,0,(0C00(0C0D(0C000000(0C0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G0G(0C0C(0C0(0C0(0C0(0C0{(0C0(0C09(0C0(0C0(0C0V(0C000000(0C0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f(0C0j(0C0(0C0(0C0((0C0(0C0~(0C0(0C0(0C0(0C0d(0C0(0C0(0C0^(0C0(0C0f0f0f0f0f0f0f(0C080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808080808(0C00(0C0(0C0(0C0(0C0T(0C06(0C0u0u0u0u0u0u0u(0C000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000(0C06 " 06 " 06 " 06 06 06 06 06 06 06 06 (0C0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 (0C00000(0C0101(0C00(0C03030303030303(0C0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E0E(0C0]*0]*(0C0,0,0,0,(0C0c00c00c0(0C03030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303007070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707(07(070<0<0<0<0<0<00=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=0=00(00c(00L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L0L(0(00p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p0p007(07(070(0(# 0(# 0(# 0((070)$ 0)$ 0)$ 0)$ 0)0)(07000000000000(070C(070o0o0o0o(070̮0̮0̮(0700000000000000(0(00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000(0000000(000000000(00w0w(0% 0,% 0,% 0,% 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(00000000000000000000000(00D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D0D(0(000(0(000(00;0;(00'0'(00?0?(00j0j(00y0y0y0y0y0y0y0y(0000000000000(0000000000(0000000000(0000000000000000(00+(0000000000000000000000(0& 0& 0& 0& 0& 0& 0(00#(00(00(00+(00000000(000000000000000000000000000000(000000000000000(00B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B0B(0070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707(00p0p80p070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707070707(0(00# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# 0# (00000000(00i0i0i0i(00)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)' 0)' 0)' 0)' 0)' 0)' 0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)0)(00-e(00f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f(00h0h(00i0i(00j0j0j0j0j0j0j0j0j0j0j(00nk0nk0nk0nk0nk0nk0nk0nk0nk0nk0nk(006m06m06m06m06m06m06m06m06m06m06m(00n0n0n0n0n0n0n0n0n0n0n(00o0o0o0o0o0o0o0o0o0o0o(00p0p0p0p0p0p0p0p0p(00q0q0q0q0q0q0q0q0q0q0q0q0q0q0q0q0q0q(00`s(00s(00t0t(00u0u(00v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v(00x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x( 0x( 0x( 0x( 0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x0x) 0x) 0x) 0x) 0x0l0l0l0l0l0l0000000000000000000000000000000l0l0l0l00000000000000000000000000000000000000000000000000000l0*Yq{ 0<JUT^Vbuiq}{8):o<R==5>?JD\(l*~E؛Ri ]^_ q.c&fku|&y[_`abcdkrux} #)6CTefk} %5BR[`enx 4 isq(,33: A^IVMO)VYw\]_abgn8vUI*)~ܟ:n s #B^^/nAndx 6p|< i<Y8$&a*-N88888#9*929G9V9f9~999999999 :":):G:X:_:k:{::::::::;*;8;D;K;T;<=\=== >@>>L???@BEIIL ORUXZ@]{`dgkanqttw]z}7 5_ܖXחNR6Hq@NΜ`˝ϟ9(P5Fuצ>^çUq;Ż_ƽ 1cξ:lؿ$\6g-f'z]J\IcB&VDL )! Z~aM~}L</   " n   W   & w   g   ZHSu1 l M""$%&G&I(((]**#+Z+n,-.>.g//001222446+79j:==R@@C(DFOGI,J@KLL4MgMMNNOqOPPQjRRjTTTU5VVVWWNXXY ZZ.[9\4^^^_`aabb5cc1dffggWh+ijkk&ort^w{{X||}рH^Q'ˍŎ$,ߣҤЪy\^efghijlmnopqstvwyz{|~     !"$%&'(*+,-./012345789:;<=>?@ABDEFGHIJKLMNOPQRSUVWXYZ[\]^_`abcdghijlmnopqrstuvwxyz{|~     !"#$&'()*+,-./012346789:;<=>?@ACDEFGHIJKLMNOPQSTUVWXYZ\]^_abcdfghijklmopqrstuvwyz{|}~y]>r )68UegTv-?AYgi !02JXZr(*D[]|(*GSUn~ ( 1 (()555>8Z8c8888>G?O?CDD@DDD%FWFtFF GGIIJJJJ#KfKKPPPHQQQRRRSSSUUUcccAdYded`eveesfff~ggg'j=jJjilllmmmnnnr*r6rw1w=w~yyy.~J~S~sҍ.JSLhq5QZ^z;D=Yb+4   8A4=4F4`4|44b7~77===ڋǐ*3Qpۥ)+NacǦڦܦ(@WέͶ:Zs\~'@ 'yy3GclC_h "&(@DF^bd{~.24LPSlqs!#:=?W[]uy{  (,.FJLejl $&>BD\`bz~?Wc)AM!"2>?      !!!! " "J$b$c${$$$&)&*&B&N&O&&&&'''))))))"+:+;+S+_+`+n,,,,,,------I.a.b.z...F0^0_0w000111;2S2T2l2x2y2_555555555888888999;;<<'<(<@<L<M<?A?K?U?m?n????JBlBvBBBBBBBqEEEEEEEEEHHHHHHlNNNNNNkPPPPPPQQQQQQRRRRRR T"T#T;TGTHTUUUUUUVVVVVVuZZZZZZ\\\\\\A^Y^Z^r^~^^______AbYbZbrb~bbAcYcZcrc~cce e)e7sSs\sxxxބyXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXtXXXXX4X4XX4X4X4XX4X4XXTXTXTXXXXTXTXTXTXTXTXTXTXTXXXTXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXTContents _Hlt55775962 _Hlt55775966 _Hlt55775979 _Hlt55775983 _Hlt55775986 _Hlt55775990 _Hlt55772656 _Hlt55775994 _Hlt55772686 _Hlt55772684 _Hlt55771240 _Hlt55775997 _Hlt55772712 _Hlt55776004 _Hlt55772853 _Hlt55776001 _Hlt55772883 _Hlt55776007 _Hlt55772909 _Hlt55776011 _Hlt55772931 _Hlt55776014 _Hlt55772962 _Hlt55772958 _Hlt55776017 _Hlt55772981 _Hlt55776020 _Hlt55773003 _Hlt55773027 _Hlt55776024 _Hlt55773048 _Hlt55776027 _Hlt55776220 _Hlt55773084 _Hlt55776222 _Hlt55776043 _Hlt55776226 _Hlt55773102 _Hlt55776046 _Hlt55776228 _Hlt55773134 _Hlt55773152 _Hlt55773157 _Hlt55773182 _Hlt55773208 _Hlt55773234 _Hlt55773259 _Hlt55773272 _Hlt55773285 _Hlt55775057 _Hlt55773308 _Hlt55773344 _Hlt55773367 _Hlt55773395 _Hlt55773427 _Hlt55773445 _Hlt55773463Intro _Hlt55775957 _Hlt55775956 _Hlt55773509 Architecture _Hlt55776218Install UnInstallRegister _Hlt55771911Form _Hlt55773633 _Hlt55773628FAQ _Hlt55774682 _Hlt55774688Handbook _Hlt55773606 _Hlt55774703 _Hlt55774712GettingStarted LearningTasks _Hlt55776006 _Hlt55774751 _Hlt55774778 _Hlt55774798 _Hlt55774812 _Hlt55774826 _Hlt55774839 _Hlt55774854 _Hlt55774871 _Hlt55774886 _Hlt55774902Ex01Ex99 _Hlt55776010Ex02 _Hlt55776013Ex03 _Hlt55776016Ex04 _Hlt55776019Ex05 _Hlt55776023Ex06 _Hlt55776026Ex07Ex08 _Hlt55776221 _Hlt55776042Ex09 _Hlt55776227 _Hlt55776223 _Hlt55776045Ex10Ex11ShortCutAsciiGlossaryBinHex IsetSummary IsetDetailed _Hlt55775074 _Hlt55775114 _Hlt55775185 _Hlt55775215 _Hlt55775242 _Hlt55775269 _Hlt55775301 _Hlt55775329 _Hlt55775357 _Hlt55775383 _Hlt55775402 _Hlt55775418 ArithAndLogic _Hlt55775112JumpInstructions _Hlt55775166MoveInstructions _Hlt55775201CompareInstructions _Hlt55775231StackInstructions _Hlt55775254ProcAndIntInstructions _Hlt55775287IOInstructions _Hlt55775312 _Hlt55775355OtherInstructions _Hlt55775384 _Hlt55775368ListFileNegNumtop PopUpHelp _Hlt55775487 _Hlt55775492 _Hlt55775494 _Hlt55775496 _Hlt55775499 _Hlt55775501 _Hlt55775504 _Hlt55775507 _Hlt55775509 _Hlt55775511 _Hlt55775514 _Hlt55775516 _Hlt55775518 _Hlt55775520 _Hlt55775523 _Hlt55775526 _Hlt55775528 _Hlt55775530 _Hlt55775532 _Hlt55775534 _Hlt55775536 _Hlt55775538 _Hlt55775540 _Hlt55775542 _Hlt55775544 _Hlt55775546 _Hlt55775548 _Hlt55775550 _Hlt55775552 _Hlt55775554 _Hlt55775557 _Hlt55775559 _Hlt55775561 _Hlt55775563 _Hlt55775565 _Hlt55775567 _Hlt55775569 _Hlt55775571 _Hlt55775573 _Hlt55775575 _Hlt55775578 _Hlt55775580 _Hlt55775582 _Hlt55775488addand _Hlt55775495callcliclocmpdbdecdivendhaltininc _Hlt55775527iretintjmpjnojns _Hlt55775535jnzjojsjzmodmovmulnopnotororg _Hlt55775558outpopfpushfpoppushretrorrolshrshlstisubxorTruthEditor PeripheralsZ y{4<^cd'/OPQSvy~%NX$Q}. 0 (528z8CeFGIJKPQRSUrccbdefgCjlmn3r;w ~O*nW5C.1 k R4V7=v~"^ԦצQɭ߶(g7__#%=2yy$BFFdOS#Yw *Hh@^bXeO$A  "$Q&')b+,-I...0{2589O<?BEHNPQRJTUUVVVVZ\\^^_bcd&sx{@@@@@@@@ @ @ @ @ @@@@@@@@@@@@@@@@@@@ @!@"@#@$@%@&@'@(@)@*@+@,@-@.@/@0@1@2@3@4@5@6@7@8@9@:;@<@=@>?@@ABC@DE@F@GH@I@JK@L@M@NOP@Q@R@S@T@U@V@W@X@Y@Z@[\]@^_@`a@bc@de@fg@hij@k@lm@n@o@pqrstuvwx@y@z@{@|@}@~@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@[z|5=_de(0PQRTwz&OY%R~/ 1 (528{8CfFGIJKPQRSUrcccdefgDjlmn4rZx +Ii%A_ceO#$A  "$Q&)b+,-...0{2599O<?BEEHNPQRJTUUVVVVZ\\^^_bcd&sx{!^ n k)w)]*b*x*}*9-E-----t..`5c5_6k6:7F799o:~:CCCCIINNRRRS/S7SxV}VYY2Z7ZZZZZZZK[P[[[[[\\e]i]]]hhiixxjoCFև݇Бӑ;>/6GJݥ?Hаذ`aҴ۴O"Q"""""""*#2#%%%9(9598999<9%:&:1:2:;:<:e:h:::0;3;O;R;<<@@LAPAQN`NQQQQ[[[[3\9\W\]\m]v]Wifiiinntt*1ŽŎƎҎӎ./89<=FGTUVWbcdefgʫͫ3:QTOU 9<=BgjFIKMNQXZ               ?IBIzI}I~IIII J#J)J+JJJJJ K KKKyK|KKKLL%L'LLLLLMMMMXXXXfejehhDkEkIkJk_k`kekfkjkkkkk m mmmmm-m.m2m3mbmgmmmnnnnnnnnoooooopppppprrrrrrrrrrssctitwwwwww8d8e8g8888<&< = => >CCCCDDGGIIIIJJgKKMMPPPPPPQQUUUUUUUUVVWW~XXXXXXXXYYYYYYTZUZZZ[[h[i[[["\#\O\\\\] ]S]T]FaGabb^ckcpcqcrcccc7dsdVeeifftgghhShUhbinijKj_llmmnn r7ruuuuw>wwwtyyzz$|%|Y|Z| ~ ~ ~.~T~U~EKkm=BFI|~^aɋċҍ"'FGّ֑CFGMnqԓד`eĔʔÕەߕЖԖ.TU49Ę #>A^_ ()*LrsRXģǣ #QV٤ۤ:=emݥ֦٦T[ԧק#&MYbeHK,/xzհذ5[\ٱޱ-3.0IU$'%+BG`c|345^fl V[36LOEF7?ps!+BD.1JNw~/7cg JL?B))<c%+NPmq 58\bBEpw}PVCIfi56 04jm#CGsx#*),y{OUZ]ac JLTV]a#&),W]NQ HKgj ACquGK =AT\ #PY      i j    /3=@gk')OSqt=> %f29:CD  r t   ! !N!T!!!!!!!,"0"O"S"m"u"""""""""##;#=#j#l#######$$<$?$n$q$$$$$%%.%2%'&-&b&l&&&!'('''( (z)})))P4Q4R4`444T7U7V7b77777!:":#:$:%:&:':(:):*:+:,:-:.:/:0:1:2:3:4:5:6:7:8:9:::;:<:=:>:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:[:\:::;;<<======>!>>>BBBBsCC$D'DyFF"G%GjGG1H9HNNQQSSbTkTwUUWW ZZiZpZb[e[\\s]v]]]*^0^^^_ _``bb_cicccadd eeeeeeffghhhjjEkOk}kknnrrssvv9wU>U??wAABBDDEE3F5FFFFFGGJG%H*HHH?IBIzI}III J#JiJkJJJ K KyK|KLLLLMMlNNNNLOOOOPkPPQQRR$S'SZS]SSS TJTCUqUsUUUUVVXXYYYYYYZZ4Z8ZYZ`ZuZZ\\A^^__AbbbbccAccccccddde*e+eeegghhjjkkrkskkk;m 25TWux‚łRSԅׅ.1BFlo{~Љԉ>@RVʌˌ!"AHJnr͍#&IMmЎю*֑ <@[_z~Œ%&&-ȔnqÖƖԖז ),:=KN]`-.Y\dfٟ֟۟ޟ.36<JNQTruwz|ƤȤdglo  %(HKMPRUWZ]acfpt¦ѦԦ #%(*-SVwx{33333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333 C Neil BauerscC:\Documents and Settings\nbauers\Application Data\Microsoft\Word\AutoRecovery save of sms32v50.asd C N BauerscC:\Documents and Settings\nbauers\Application Data\Microsoft\Word\AutoRecovery save of sms32v50.asd C N Bauers7D:\src\Delphi\Simulator\Sms32v50\code\ship\sms32v50.doc C N Bauers7D:\src\Delphi\Simulator\Sms32v50\code\ship\sms32v50.doc C N Bauers7D:\src\Delphi\Simulator\Sms32v50\code\ship\sms32v50.doc C N Bauers7D:\src\Delphi\Simulator\Sms32v50\code\ship\sms32v50.doc C N Bauers7D:\src\Delphi\Simulator\Sms32v50\code\ship\sms32v50.doc C N Bauers7D:\src\Delphi\Simulator\Sms32v50\code\ship\sms32v50.doc C N Bauers7D:\src\Delphi\Simulator\Sms32v50\code\ship\sms32v50.doc C N Bauers7D:\src\Delphi\Simulator\Sms32v50\code\ship\sms32v50.doc)\)J9v~ cI qP] 'r6W "=MYC*?RNF]v\Z$'' nw!Iv'( u#P[Lt*:(>{2B 3 6*W?X @ nRY9Bv WBP&bD {'G^k^Iz%heIܤ!qUIzB|KN({RDTNpjbj45MuvkufÜXx~pg:zЦ_p^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo( ^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`CJOJQJo(^`CJOJQJo(opp^p`CJOJQJo(@ @ ^@ `CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(^`CJOJQJo(PP^P`CJOJQJo(^`.^`.pp^p`.@ @ ^@ `.^`.^`.^`.^`.PP^P`.) cpjUXSLt*w!*W? WB\){'GkuRY9BRNFqUIW ]v3cU=B[ @=~[|K9 4_{RMu( u#_D\Y{20G[iX''  e%heIk^IXxMYCg:zP] )) 氉*ugf08x<^b|rD?4Ӣو0zT s GP v&JH sT^06ՈhJzu `,0u\l=D#69P6>Q$v$+z(w䤪j1)L, Ihf6h_`F"o`r^7Ȁ^̷]J|5`UۢƩpD\ F"}+ *F-j>F-<*Nfx&8`&hj8pv\zp~2Qj GV@ r4dZkv;AEV[P 8]4/$iݺc<;9[TV(`@XbDrBꈫt'~" {LI¬^Nڰ:Жbv{L1R,ʘPB>Jr@.8 dBo6$szT/L'^Z~Te4Զ4uh̷g@D$cR &N(P.ے.2.fF8a/"P1bJFtԶ4A|^6Ɯy+|*s$ܦ8P޺C֧Pn7ޏ `.&yC^z) ]ę) D8˰*s,/6@ 0HtqZW_ @x䴬YG4&~j)TgK_\;2@?Җ^ 1MҶP ď$I<8KPP22`R"V``6Z *$<[<$RRX 6ĢNeJjO ,zFG$պ- ~h~$;TvVTU>ה'5nT>g8$,,JL6Ft`^ Z<(0:{ p.[z4fLNn:)z\.2lȟWZ7JUiGkv4μ^`%._R :,↶Բ|i*zt)FS򊯪<*0\>ZnD#(#:(RY{ =p3L \3 D^ȇ 9>`LPb.uN@cc "vn*Ƃ6bTrHSDcZ bX6"j>t^6G~G~PD7ZdAZJ@c qn(ߪ#>'| N84F.^\IK|rڄ8XLk`9znڹxZIZ@0`j?;gN5sV9X gXҥ:X`D+sviphgʗV @&'T3 4  *56ERSivw#$q$r$~$$$%{'|''(((() )55550828e8f8CCD DIIJJPPPPUUUU5XjYkYYYYYYSZTZVZZZZ[[[g[h[j[[[[\\"\$\]] ]R]S]U]]]pcrccc ~ ~U~V~ IJN<=A*+6]Ő~UVnIJ^` !%&(*,.02469:<>@BDFHJLMOQSUWY[]_`bdfhjlnprstu)%&(*st#$\]u/035noFG\de} 67Npq&  i k    :;CD[))P4R44444444444444444444445555!5#5$5&5(5*5,5/5152545>5@5B5E5G5H5J5T5V5`5c5e5f5h5u5w5y5|5~5555555555555555555555555555555555555566 6 6 666 6"6$6&6(6)6+67696C6E6G6H6J6V6X6Z6\6^6_6a6c6e6g6i6k6l6n6y6{66666666666666666666666666666666677777777(7*737577787:7<7>7@7B7D7E7G7I7K7M7O7Q7R7T7V777o8u8x8888888888888888888888888999 9 99999999"9%9)9+9-9/919395999=9A9D9F9H9K9M9O9P9S9V9X9Z9\9^9`9b9d9f9h9j9n9r9t9v9x9z9{9~99999999999999999999999999999999999999999999999999999999999999::::: : ::::::::::!:#:%:':):+:-:/:1:3:5:7:9:;:=:?:@:D:G:I:K:M:O:Q:S:U:W:Y:[:]:_:a:c:e:i:j::::::::-;.;0;4;L;M;O;S;h;i;k;o;~;;;;;;;;;;;;;;;;b<c<f<j<{<|<<<<<======>>>z?{?????o@p@y@YAZA_AAAAwBxB~BCCCCCDDDDE EE5F6FDFFFFGGGHHHIHJHPH8I9IJIIIIHJIJNJJJJ KKKKKKLLL1M2M?MMMMNNN\O]OdO P PPPPP-Q.QBQQQ R!S"S2SSSSSSSPTQTbTTTTTTTeUfUnUUUU&V'VAVVVVnWoW|W-X.X6XDXEXTXXXX@YAYKYYYYRZSZ]Z[[([[[[{\|\\]]]`^a^w^~___``a`q``` abbbbcc+c,cBcccccccUdVdadee ewexe|eff!fgggHgIgSghh)hhhiViWihiajbjqjjjjkk(klllmmmmmmhninsngohopo1p2p:ppppppppppppppp qcqdqpq&r'r3rrrrssssssQtRtZtCuDuMuuuuuuv]v^vgvww wwwwuxvxxxxxyyy&z'z+zD{E{M{{{{{{{|||E}F}O}}}}}}~6~7~B~_`c .΄efvefqÆ78IMN`tuyST[vǎɎˎ̎Ԏ֎؎َ   "$'(0256>@CDLNQRZ\_`hjmndĒʒВْܒޒ  "$9:<@HJSXZ\^acyz|Ǔɓғדٓۓݓ'(*468FGIKMNPRSUY_enqsuwȔ˔͔ϔєٔ۔ݔޔ   !#%,.0137:<BEGIKRTVWY]cenqsuw•˕ΕЕҕԕޕ  679=@BHefhloqwȖɖ   !#%&(,24=@BDFNPRSUY_ajmoqs{}×Ɨȗʗ̗ӗ՗חؗڗޗ   "$&/1346:@BKNPRT_acdØŘΘ PQSW`bk˙̙Ιϛۛܛޛ-.039;G$&2rsuy`acmoqܟݟߟ &~  "(DEGKNPVuvx~ݡޡ   )568;>@Fijlpsu{עآڢ   235:<>AUVX\^`cãǣɣˣΣ  UVX[ceqȤ56"-3;<KŷƷطPQf-_`¹Ĺƹǹɹҹ  #015AJ^_coxźκ &9:>JShilxĻŻɻһػ$%)28[\`ioȼɼ˼Լ(56:FObcgs|Ƚѽ -.1=Fefjv&(uv&'+4:cdhtz]^ajpEFJSYHILV\IJNU[bc'(.cdgBC&'9CFVWgswDEFRVLMN_b  &PQ)*!"*0CDJM]_ &'/5 Z[]_[er~ABPUabe  ghkfgj56u ;=no02jkl}~   %().127:;@CDILMRUV[^_dghmpqvyz  !$%*-.367<?@EHINQRWZ[`cdilmruv{~  !&)*/238;<ADEJMNSVW\_`ehinqrwz{  "%&+./478=@AFIJORSX[\adejmnsvw| !"'*+0349<=BEFWX\`aeijnrsw{|  #&',/0589>ABGJKPSTY\]befknotwx}          " # ( + , 1 4 5 : = > C F G L O P U X Y ^ a b g j k p s t y | }                                                       $ ' ( - 0 1 6 9 : ? B C H K L Q T U Z ] ^ c f g l o p u x y ~                                                       # $ ) , - 2 5 6 ; > ? D G H M P Q V Y Z _ b c h k l q t u z } ~                                                       wye&'Ouv$12HIS`lmu{#&AMNjku       !!!! !#!!! """#"$".";"G"H"R"[""""#####I$J$$$$$$$$$$$$%%%%&&Q&]&^&p&q&{&&&&&&&&&&&&'#'$'6'7'A'N'Z'['d'm''''' ( (((n(o(y(((()))****%*2*>*?*C*F*!+"+b+g+h+~++++++++m,n,,,,,,,,,,,-<-=-D-J----------....$.%.,.2.H.I............////E0F000000000000l1m1v1y1:2;2{2223333+3,383>3?4@4I4O455555F6G6Q6^6j6k6w6}6~77778899999999999::::<<O<R<S<<<<<<< ==> >>>T?U????@@@@(@)@4@:@3A4Ab?bbbbbbbbbbbbbb cc@cAcccccccccccccccd,d-ddddd+e,efffffgg g=g>gBgkglgpggggggghh$s&s^s_swwwwwwwwwwwxx x;x Contents ; IsetDetailed 8 IsetDetailed 5 IsetDetailed 2 IsetDetailed / IsetDetailed , IsetDetailedc<)360-negativeNum.htm & IsetDetailed # IsetDetailed|f NegNumiyBinHexOtherInstructionsehIOInstructionsxeProcAndIntInstructions StackInstructions~aCompareInstructions  MoveInstructions JumpInstructionsArithAndLogic Contents Contents Contents Contents Contents Contents5n200-10swint.htm Contents Contents Contents Contents Contents Contents Contents Contents Contents Contents Contentsvb240-hex-bin.htm ContentsTIEx11THEx10UAEx09U@Ex08UOEx07UNEx06UMEx05ULEx04UKEx03UJEx02UIEx01 Contents Contents !http://www.dumbreck.demon.co.uk/Dhttp://www.maplin.co.uk/ !http://www.dumbreck.demon.co.uk/ ContentsS)http://groups.yahoo.com/group/learn-asm/Xo$mailto:nbauers@samphire.demon.co.uk ContentsX]%http://www.softwareforeducation.com/Xo$mailto:nbauers@samphire.demon.co.ukz'Thttps://secure.element5.com/shareit/checkout.html?productid=138531&language=English Contentsz'~Thttps://secure.element5.com/shareit/checkout.html?productid=138531&language=Englisho{{ 055form.htmx Contentsu Contentsr Contentso Contentsz'lThttps://secure.element5.com/shareit/checkout.html?productid=138531&language=Englishi Contentsvzf PeripheralscbcEditor`Truth] PopUpHelp|fZNegNumW ListFile T IsetDetailedsmQ IsetSummaryiyNBinHex K GlossaryHAscii E ShortCutTIBEx11TH?Ex10UA<Ex09U@9Ex08UO6Ex07UN3Ex06UM0Ex05UL-Ex04UK*Ex03UJ'Ex02\A$Ex99UI!Ex01 LearningTasks~}GettingStarted  HandbookfaFAQForm  Register  UnInstall{v Install ArchitectureIntroX]%http://www.softwareforeducation.com/  ..\help\005logo.PNG  !..\help\005logo.PNG "..\help\005logo.PNG 'K..\help\020architecture.PNG ,#..\help\005logo.PNG 9$..\help\005logo.PNG 0<%..\help\005logo.PNG G&..\help\005logo.PNG M'..\help\005logo.PNG T(..\help\005logo.PNG Y)..\help\005logo.PNGWOYL..\help\080cpu.PNG]M..\help\080step.PNGRE]N..\help\080run.PNG9mT^O..\help\080faster-slower.PNG^P..\help\080stop.PNG_Q..\help\080continue.PNG',h_R..\help\080reset.PNG^_S..\help\080show-ram.PNG"`T..\help\080assemble.PNG^aU..\help\080log-asm.PNGRESaV..\help\080run.PNGFFFeW..\help\080ram.PNG pg*..\help\005logo.PNG)7YX..\help\090hanoi.PNG  +..\help\005logo.PNGoxY..\help\100right-to-left.PNG ,..\help\005logo.PNG -..\help\005logo.PNGc3^Z..\help\120-02tlight.PNG (...\help\005logo.PNG /..\help\005logo.PNG 30..\help\005logo.PNG][..\help\150-keybin.PNG 1..\help\005logo.PNG 2..\help\005logo.PNG 3..\help\005logo.PNG 4..\help\005logo.PNG i5..\help\005logo.PNG "6..\help\005logo.PNG P87..\help\005logo.PNG T;8..\help\005logo.PNG A9..\help\005logo.PNG :..\help\005logo.PNG ;..\help\005logo.PNG <..\help\005logo.PNG =..\help\005logo.PNGoxO\..\help\100right-to-left.PNG &>..\help\005logo.PNG ?..\help\005logo.PNGox]..\help\100right-to-left.PNG @..\help\005logo.PNG A..\help\005logo.PNG ]B..\help\005logo.PNG ]C..\help\005logo.PNG D..\help\005logo.PNG ;E..\help\005logo.PNG1h~^..\help\350-ListFile.PNG 0F..\help\005logo.PNG wG..\help\005logo.PNG hH..\help\005logo.PNGMn_..\help\380-and.PNGKro`..\help\380-or.PNGL;qa..\help\380-xor.PNG$qrb..\help\380-nand.PNGLsc..\help\380-nor.PNGLtd..\help\380-not.PNGg%ue..\help\380-halfAdder.PNG $wI..\help\005logo.PNG |J..\help\005logo.PNG,~}f..\help\400-keyboard.PNGOg..\help\400-vdu.PNGVRh..\help\400-tlight.PNGC i..\help\400-sevseg.PNGOj..\help\400-heater.PNGd.Вk..\help\400-snake.PNGx+%l..\help\400-motor.PNG)am..\help\400-lift.PNGj`-n..\help\400-hw-timer.PNGq9o..\help\400-numerickp.PNG  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                          ! " # $ % & ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V k Root Entry FiLrm Data 1TablelheWordDocument.SummaryInformation( DocumentSummaryInformation8' d_CompObjjObjectPooliLriLr  FMicrosoft Word Document MSWordDocWord.Document.89q