From gdesroch@slate.Mines.Colorado.EDU Mon Jan 4 12:23:33 1993 Received: from calvin.sfasu.edu by umaxc.weeg.uiowa.edu (5.61.jnf/920629) on Mon, 4 Jan 93 12:23:26 -0600 id AA14812 with SMTP Received: from slate.Mines.Colorado.EDU by calvin.sfasu.EDU with SMTP (5.59/25-eef) id AA25856; Mon, 4 Jan 93 12:13:32 CST Return-Path: Received: by slate.Mines.Colorado.EDU (AIX 3.2/UCB 5.64/4.03) id AA31940; Mon, 4 Jan 1993 11:10:15 -0700 Date: Mon, 4 Jan 1993 11:10:15 -0700 From: gdesroch@slate.Mines.Colorado.EDU (DESROCHERS GARY FREDERIC) Message-Id: <9301041810.AA31940@slate.Mines.Colorado.EDU> To: hyperc-l@calvin.sfasu.edu Subject: Beta 3 of HC.System Status: R Beta Manual HC.System V3.0 Beta 3 ( In other words a complete mess ) First thing is first. I would like to say that this program is not IIgs specific. There are some people that do not think they need this. That is fine with me. I am trying to make it work on all machines so that we can say that HyperC does work on all machines. For normal // users you can still use c.system. I have no qualms with that. Why the new code? I have put in the new code because people have said to me "wouldn't it be nice to....". I have tried to help everyone with putting in the new code. It is real helpful for the people that are trying to switch between different environments (opix not included, Wulf has the same IIgs code, or close to it, that is in this HC.System and it does not need a loading program.). It is also helpful for people using different shells.(With the new code there will be makers and testers) Or for the people who just want to customize there entry into HyperC. A script like this would be used to select between seperate opsys/shells or for disconnecting /RAM ect. : ;This will ignore the opening screen and /RAM file check. ;!Ignore /RAM ; ;This will just take up less space ;!set $VAR2 = " Which One: " ;!set $VAR3 = " 2) Quit!" ;This will clear the screen and ask my first message about /RAM. ;!do ;! clear ;! echo ;! echo ;! echo ;! echo ;! echo " Select an opsys to use" ;! echo " 0) Leave /RAM alone" ;! echo " 1) disonnect /RAM" ;! echo $VAR3 ;! GetKey $VAR2 ;!until ( $last < 3 ) ; ;!if ( $Last == 2 ) ;! quit ;!elseif ( $LAST == 1 ) ; I now want to make /RAM go away so that I can run some program I have ; that I want to test out. ;! setenv RAM ;!endif ; ; Now for opsys. ; ; 0 in $VAR1 means that the old opsys is used. ;!set $Var1 = 0 ; ;!do ;! clear ;! echo ;! echo ;! echo ;! echo ;! echo " Select an opsys to use" ;! echo " 0) Old opsys" ;! echo " 1) New opsys" ;! echo $VAR3 ;! GetKey $VAR2 ;!until ( $last < 3 ) ; ;!if ( $Last == 2 ) ;! quit ;!elseif ( $LAST == 1 ) ;! setenv opsys myopsys ; Now show that we don't have the old opsys ;! set $Var1 = 1 ; simulate a 0 selection below. ;! set $Last = 0 ; I have a IIgs. My new opsys needs native mode brks to go to my opsys ; so do this. Either that or I am using my IIc with a 65802 and I need ; stuff installed for Andy's new opsys also. ;! setenv 65802 ;!endif ; ; Since this is old opsys specific. It needs to be jumped over if I am ; using a new opsys. ; ;!if ( $VAR1 == 0 ) ;! do ;! clear ;! echo ;! echo ;! echo ;! echo ;! echo " Select a Shell to use" ;! echo " 0) Old Shell" ;! echo " 1) New Shell" ;! echo $VAR3 ;! GetKey $VAR2 ;! until ( $last < 3 ) ;!endif ; ;!if ( $Last = 2 ) ;! quit ;!elseif ( $LAST = 1 ) ;! setenv shell myshell Of course, there are probably many more that you could make up. This is just one that I have thought up at the spur of the moment. MISC CHANGES: The RAM option using the setenv is working and even installs it's own quit code (of course, it saves the old one in /RAM) that reinstalls /RAM on exit. Since Andy (and maybe other people in the future) is using native mode brk vectors, this beta version has a setenv 65802. This new setenv checks to see if you have a 65802/65816 and not IIgs and installs brk the necessary stuff for these processors to work with Andy's code. For the people with IIgs's this setenv will enable native mode brks to be processed by the HC.System Brk code. If, on the IIgs, you are not using this setenv you could brk out into your old brk code by setting the machine to native mode you can no longer do that when you use the setenv 65802. !!!!!Works on the 6502 also? (Could someone check this for me!)!!!!!!!!! In earlier versions of HC.System the credits screen came up no matter what you did and the ;!IGNORE option only jumped over the keypress. Now the credits screen is ignored as well. HC.System now checks for emulation mode on the IIgs on a break. If it finds out that it is in native mode before the brk then it jumps to your old break routine (Mine is GSBUG). So for you people who want to look at your code you need to put the following in your assembler (not cp) code: clc byte 0xfb ;xce I think. From memory. Look it up to be sure. byte 0x00 byte 0x00 Be careful, if you are using GSBug, GSBug seems to reinstall itself on returning with a j command. That means that hc.systems brk routine is thrown into the blue. But it stops the machine from running rampid. At least in native mode. This is a good idea because the brk routine stuff does not work in native mode anyways. It no longer assumes the address of the interpretor. It gets the value at $03f0 instead. Useful if you want the address different and you are designing your own interpretor. This does not mean that the address to jump to originally is the address at $03F0. It still jumps to $0800 to run the loaded program Notice I said the program loaded. It does not really need to be an interpreter. It could be anything.:-) Check out the SETENV command below. You can load your own interpretor or shell. (See discussion on SETENV below) More ;! commands. A new HCLogin file. HCLogin: I got sick of seeing the commands when the shell is loaded. If you do not want this there is a new file that is called 'hclogin' that is looked for first before autoexec. This means that all of your old commands can be switched over to this file and they will work as normal but won't show up when the autoexec file is executed at startup. If you do not want to use the hclogin file your old autoexec file will work as before. COMMAND LINES: Command lines can be up to 254 characters. HC.System is now case insensitive for the ;! commands. Commands do not need to be right after the ;! but they do need to be first on the command line. Since proccessing of commands is completed with the finding of any line without a ; at the beginning of it, there can be no blank lines in between ; lines. That does not mean you cannot create a blank line with no command like ;! or ;. See below. For HC.System commands are lines in your autoexec file that start with ';!SOMETHING'. (Or commented lines starting with ;.) Command lines must contain a Command. Optionally for most commands subcommands may be excluded. Subcommands are seperated from commands on the same line by one or more white spaces. White spaces include spaces, tabs, or commas. Comands and subcommands are case insensitive. !;IGNORE is the same as !;ignore. If you want to make a subcommand line option that contains any of these then you need to use string deliminators. String deliminators are " or ' . Whichever one you use the terminator for that string must be the same value or an end of line. So if you want to put a ' in the string use a " as the diliminators. For example: ;!echo " This doesn't terminate at the '." ;!echo 'He said "nope it will not terminate on the ",s here either"' Be careful of the following: ;!echo Hello! I am going to give a present of gold. This will print: Hello! I am going to give a present of Because a command line can only have 9 subcommands the ECHO command can only output what it is given. Also string deliminators are terminated by an end of command line as well as itself. Single words are just a string of characters with no white spaces. The single word is terminated by a white space or end of line. An example would be the 'Hello!' example above and what the echo prints out. VARIABLES: There is a $LAST variable for GETKEY and GETSTR and $VAR1 - $VAR9 that can be set by you using the SET command. In the future $VAR1-$VAR9 these may be filled in with command line options from programs like Basic.System. All variables are set memory variables. What this means is that they are not saved to disk and the names of them are set. In the future maybe I will allow for the changing of names. Variables can only contain 40 charcters. All variables start with a $. This character is not really unique. If you do: ;! echo $myvar and use a variable that is not already defined in memory the you get: $myval printed out. The set command will think an undefined variable is a string and do nothing. The $LAST variable is overwritten by any GETKEY or GETSTR command. If you want to keep it then you would need to send it to another variable like: ;!SET $VAR1 = $LAST Variables are treated as if they are strings. So if you have the following: ;!echo $var1 and $VAR1 has a string like. Hello There! then it is the same as putting: ;!echo Hello There! or it's equivalence on the command line. BOOLEAN EXPRESSIONS: Boolean expressions must start with the subcommand '(' and end with the subcommand ')'. In the middle there must be three subcommands. All three can be memory variables, deliminated strings or single words. As of right now there are four tests. The tests are >, <, ==, != and =. The == and = act the same. The = is not an assignment character. I strongly suggest that the == is used instead because this may change in the future. A boolean expression will evaluate as FALSE if the syntax is wrong. There will be a message put out with respect to a bad boolean expression. Some examples are: ( $LAST < '1' ) ( Hello = $VAR1 ) if $VAR2 has > contained in it: ( "Who are you?" $VAR2 $VAR3 ) Wrong examples are: ($LAST < '1') - no white space between ( and $LAST or '1' and ) ( $VAR1<$VAR2 ) - no white space between $VAR1 and VAR2 and the <. COMMANDS: ; ;! ;!IGNORE ;!ECHO ;!CLEAR ;!GETKEY ;!GETSTR ;!LOAD ;!SETENV ;!MARK ;!BACK ;!SET ;!QUIT ;!DO ;!UNTIL ;!WHILE ;!ENDWHILE ;!IF ;!ELSE ;!ELSEIF ;!ENDIF ; - Treated as a comment line. ;! - Just a line spacer. The line will be ignored. This can be used to format commands so that there are lines between them. It is faster using the comment line above though. because the interpreter must search throught the whole line for any commands. ;!IGNORE - This command is used to skip over the opening screen that HC.System puts up. It is included for compatability and the /RAM subcommand is the only way to ignore file check when removing /RAM. Subcommands: /RAM - Makes HC.System ignore the file check when disconnecting /RAM. If this is not specified then /RAM is checked for files and if any are found asks you if it is O.K. to delete them. Allows for you to be able to quit out of HyperC without deleting files in /RAM. ;!ECHO - This command outputs a return character unless there is anything after it. ECHO will print up to 9 subcommands. Subcommands: Anything - Anything on the same line as ECHO is outputed to the screen. You could actually design your own opening screen with this. This includes $variables. Check the above discussion on strings or variables above. ;!CLEAR - Clears the screen. ;!GETKEY - This command waits for a keypress. The key is saved and put into the $LAST variable. This command works exactly like the ECHO command above except that when completed printing out the subcommands (if any) it then asks for a keypress. No return is generated at the end. This means that the cursor position is on the same line. To generate a return use another ECHO commnad with no subcomands below it. ;!GETSTR - This command works just like the GETKEY command above with the exception that you can get a whole string terminated by a return put into the $LAST variable.(return removed) ;!LOAD - This command loads into memory what you want to. For this version the only thing it will load is the Floating point stuff if it is in the home directory. To do this use the subcommand below. FP - This subcommand is used to load in the floating point library into /RAM if you have it. Not implemented yet. (Being worked on.) ;!SETENV - This command alters the system and it's environment so that so that you do not need to do things like load different shell or opsys files yourself. RAM - If you do not have a IIgs then you can still disconnect /RAM with this command. This subcommand also switches out the your old quit code and places into a place in /RAM and then puts it's own there. When a ProDOS 8 quit call is made it swaps back in the old quit code and reinstalls /RAM. OPSYS - This subcommand allows you to vary the opsys name that you want loaded into memory. Up to 15 characters. Technically you the program you are going to use does not even need to be opsys or any equivelent environment. Just as long as your program runs at $0800 and exits with a quit call. If you are going to make/use such a program write to me and I will try to send you some of the specifics about /RAM and stuff like that. I am hoping to get an address option for this. That way the $0800 will also not be a set place. Just the default. SHELL - This subcommand allows you to vary the shell name that you want loaded into memory. This is only garanteed to work on the original opsys. It must also be up to 5 characters long. This does not need to be a shell. It could be any program (with a pathname of less then 6 characters that uses opsys. 65802 - This subcommand checks for the proper CPU which is either 65802 or a 65816 not in a IIgs and sets up brk vectors accordingly to use opsys658xx interpreter. (There you go Andy(w). And Thanks!) In the IIgs, this subcommand swaps the brk code to process native mode brks and pass them to the brk entry point at $03f0 Anyone got anything else modified within opsys then let me know. ;!MARK - Mark sets an internal variable that will alow you to jump back to the line under MARK using the BACK command below. Mark also saves the IF, WHILE, and DO state. So in effect you could jump back into or out of these commands. ;!BACK - Back jumps back to the place last marked as explained above. If no mark has been set the file is jumped back to the beginning. ;!SET - This command sets a variable to a string or another variable. The syntax is : ;!SET $variable = string ;!SET $variable = $variable The first subcomand must be a memory variable. The = must be the second subcommand. The third subcommand must be a memory variable, blank, or deliminated string. ;!QUIT - Quit gets you 'right out of there'. Stops anymore processing, puts up the exiting screen, asks for a keypress, and returns you to the lauching program. ;!DO - The DO command allows for end of loop testing. This also means that there is at least one pass through the DO loop. The testing at the end of the loop is the UNTIL command below. ;!UNTIL - The UNTIL command uses a subcommand of a boolean expression. If the value of the boolean expression is FALSE then the DO loop is excuted again. A TRUE returned by the boolean expression will terminate the DO loop. YOU CANNOT NEST DO-UNTIL COMMANDS! ;!WHILE - The WHILE command takes a boolean expression as explained above as its subcommand. If the expression is evalueated as TRUE the while commands in the while loop are performed. When and if the boolean expression evaluates as FALSE the commands in between the WHILE and the ENDWHILE comands are ignored and execution restarts after the ENDWHILE command. ;!ENDWHILE - This command is the end of the loop for the WHILE expression. All it does is send the processing back to the WHILE command for another test. ENDWHILE also marks the restarting of proccessing after a FALSE is returned by the boolean expression in the WHILE command. ;!IF - This command marks the beginning of processing an if statement. If works just like any other if statement that you may have run into. There is a boolean expression as explained above that is tested and if TRUE the lines after it up to the else, or endif statement if there is no else, are processed. If FALSE the commands after the else, or if no else then after the endif, are processed. YOU CANNOT NEST IF COMMANDS! An error in a boolean expression will evaluate as FALSE. ;!ELSE - Everything before this will be processed and everything after will be ignored if the IF is given a TRUE boolean expression. The oposite is TRUE for a FALSE given to the IF command. ;!ELSEIF - Everything is the same as the ELSE above except that the ELSEIF allows for another boolean operation to be done in the middle of an if. This is only if the last IF boolean expression generated a FALSE. ;!ENDIF - Any if statement processing will end with this statement or a blank line to end processing of the file as explained above. Thank you for your testing, Gary F. Desrochers FiLeStArTfIlEsTaRt ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789() IHC.SYSTEM AgBFAAAAA8)4MIAI6KCAiggAIIguAgBFA88N NCQqp(L)93IB)L6vY2qmCkyvMNA0peyhAAiklBywAyKLfAvAQKEwBBqACAYuw)Sy QjYBNAv9CAIj)CAIosjxQKAsAAyC7c8vDAJKncITCAYrnEajCAord(SqOKAgoLAg dCQqKLAgCAYvd(XKKLAggUP0QCyth48A07OLAAyAkg8vFALKokSrg4AkI)LAQiiH Ox0Aj06JK0IKP1ILH1IKT0IKY0ILd0ILAACLJk8vLBLLgsNInkDT)CAIocAywKAk M0aG)0IKP1IKAACK(o8vCAJKgYAsM)LAghiT)CAIoYkyowUrtaB8JLDAPA9OyEQr QHSyCI65g0PIgsNTcBCY6BbIs0gjpCAoR1IAN4KKAkLLoBfKoAVjowE7IDGsoAFz 9uBsoLDAQCUyfniApAQ2saO8ujCUujSUMhSU9GCDJLDAEAfDQDSyRxKxulLKZ1YK 5icINmibgEiWgBAAowE79eBsJLDAMAfDwnQyskMCJTA8IANIMxO6iDJKYAGOgCGY AkKF4AQm6DNiNCQqgwiIwGCXi066JkMLKQO8i4OqZqILpiDABkpMA0LOnksMJzC8 oAvIwTSyAAqTyAQvw3QyJksEJ7A8KAPLwDSysjuBQiCTAk65yAQnOyE6O0YIKiOL 4AQmowE7gSBsA0LANksMNvA8wziDsjuBQiCTAkq7yAQnOyE6AkaIs4Qjs0gjQ4I6 PwILMxOLCBLKs4Ar2AQu56fhwbTA)XIOs4g7s4g7uCAoszCEwiCTA0rJAlsMpIAk (H93oTN0EAMysiOklyyDphh)AkJB)XKO4EQmh4ITs0grs8ArhcLTsYg7hwFIgKCs UycAYAbKyAQvQCUyfniApQZ2o3A0owE7IfAsiEHTscg7cBCYiAbIMHAowmSmA0LG AlsMpIAkZm93NAdKMxO6HALKZyEyxAiIpCGLQ0IA)BCLA0aIAUIO4EQrwHQhC0KW (XIO4MQri(fhc2LAHBfKs0QjoDAos0A7x6BsPAPAQCUyfniApwZ3oTA0oDNys8Ar sAh7s0grtKN0JzCEqB)A4MQrtKB8JzCEDANAsgATwHQyCkcCgFD8sgg7AAKY4IQr tCQhFizAAEbAxuO8KAPAo4QmPAMyQ(NsNwo83CCKFALINCQqgxSItCAoFijAD0KA BUIOwDQsAE7vZqA8I)hcwaAwyD5sfIXmYgNYpiHCphPAEAdAayEK7jyI77AkfACO QAr)NCTqYUzIgkKYgAjo4wyN4hAYAjQjAnYrAnYr)7fr)7fj))fr))fjAjQjAvYr AvYrNKQqp(v5n3YCAk6))7ejNKRqN()7tCMCoAsi)BCYA0aIAUIO4EQrwHQhykMO tSD8FijAD0q))XIOgiC8(HLAQ3TyF0KIbAPOtCAoFiDBF0q))XIOw7fsAEZCnAMy pWPkAEJA)BCYAIaIs0gjs0gr4AQv9CQhFiTAUAfAs0g7s0g7xCAolDPAgAYSIP8B gRP0kcCI97IInACYyACJAmEL2oRjNCQqgZzGswGInACY6mKJgMThg3vaCAJKpiio a0JAwosNA0rCAmkA2oRnYMP0j0KYnANLh8HINGQqgwyIwSCwAkKDhYQjhgQjsERj O1KYG0YKekaIhgQjsEh7AAKY4AQrtCQhFiTADAdAlUFTJDQs(BNKAELygmH0I0KA AUIO4kQrF2G8AEbAQnSyxicZgBNAtCAoFijAD0KABUIOxmE8FBPA4YQrt6fhFizB 5A))w7fsE0aN8XIO4UQrw3fh8HbKqWC88HLyoOB8Qzfs9AsGgbB0LBfPwHC4MAtW wzD4(A(GgzC85AfPiqRq3AyLghDLi6eq3AiLYAGL)DKYAELyxaA0pDv)RHP0tDp) w(O8)D63AELyxiN8(HNAwWP8ODp2I)PoQDQs(HLBx2M8(HNAQHP8)D6uAELyxSA0 wCv)RDQsxDv)tKL0wzyIR06KMANLpgVrhYQjNKSqgFCCkgJIj0KYRAPLsERrtyA0 NmCWpGiBI0oIpCWIG0IAI0YIpCWIG0IAI0YIR0YIj0ILgAGLP)LAwyiER0KLn0IL j0KLo0ILG0KLp0YII0KLq0YIk0KLr0ILl0KLs0ILm0KLt0ILghBLi6Uq3AyLghDL )CAIsIhztyCsNyyJtySENyCKtyyINySKtGiBNyiKtGCCNyyKtyCJNyCLtySJNySL YwiJ5lKYg8io4wyNHyEYk06JNANL)CAIscxzuXAsYwCJsmKYg8io4wyNk0KYZAPL h8HIkAMIgoAkO)LAwyyFghRCNCQqYwCJGnKYg8io4wyNl0KYOBNLh8HIkAMIpODs G0IAI0YIm0YIAACLc88vzALLsUi7e0KOM1OLe0IKf0KLN1OLf0IKg0KLAkOLsASj tCGGNmSXpGiBI0IJl4eIm4OLghBLiOeq3AyLghDLsUSrt2B8QziJAACCc48vQALL NCQqNGiBNGCCNySJYwiJAkKYgAjo4wyNAACYOx8vh0KKFAPLgcLIt6DsQziBymqJ g0iopyyNtIa4scDIiyQq3AiLLlKLg4iopyyNuIKgscDIsIDIfACOFAp)sgQrgUA8 wGDAAw0AsBCC7mKLg4iopyyNuIKgscDIsIDI)CAIoAQZAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAo0wAAQEAQ9UB Tl1UAAAAAAAAAAAADAAAAgiMDAAQAgiKHAAQMNESJd0TBhgTPRVVFhVRAGwQAQgA AgAAAAAGAAABA4vMBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA Hl0BS9kTMxQREF0TFN1EOVEVHphVLRVRfkVRINURDVyTBVETHxiUTRVRwIFVUV0U B1UN6skUDFkQR9zSUlUVPRkQOVFSMlEVIdlTFxUSGlUUMVEWJV0UF1lRFNFTOV0Y GlEROVEbIdFRFxUSnBQbiIpIaJiukMFJvRyaj8NJwUy8m0mJLaCcmIrJrSyklUcJ OUC5vUwJNFkUQZ0ABJFBPpQTZNFUTBxUMVES2YBTwgTNAAgMAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AA7AAIgKAAAA)BwAAAQDAAAAAAgACAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAA gAGAY0PD9XIYg6vh9HLAGiuqBA6)xiEmNkc)gYA0YwSYgWAkHACAoi2w)TMyYYOk OCCYpCW)HAijghxwgwYqgN8BAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAANUEAN0QDgCaDgCKogCKogCKogCKogCKomDayuX)7mDK5 lze63D68snO60Da5pnv8geu7g(O9znO5u)(4jXu7vCK9NHs000grgCKogCKogCKo gCKogCKogCKogCKogCKogCKoznMooTPogOf6L76zg(orZja(u)aqp6MqNYjjN0QD gCaDgCKogCKogCKogCKogCKogCKogCKogCKogCKoS)Kog2cwgOf60)u7oTPolLf5 u0grN0QDg2QDgCKogCKogCKogCKogCKogCKogCKogCKogCKogCKoXDKojze5l3(7 gqSDgCKogCKogCKogCKogCKogCKogCKogCKogCKogCKovTNo5jMoyXO8(0wwgCKo gCKogCKogCKogCKogCKovnNohDa9gWu8pPf9geu7uOMyzn)0tXO9lbNopPv8g6(7 w66slLMogGO900wsgCKogCKogCKogCKogCKogCKogCKoyfNo0Tf6g6e5gmv4yH(x GDa(EDqryPf5oP(7zLf5NoTDN0QDN0QDN0QDg2QDgCKogCKogCKogCKogCKogCKo gCKogCKogCKo8C6jlLP0gO)8lLNoyXP9O6r7N0gMN0QDgCKogCKogCKogCKogCKo gCKogCKogCKogCKogCKoFDKo0nO(n7e6u6qrN4qryX8Ky)u8pfPogiO9hLv4lv(4 gOP9g6e6v)u4hXO7lDq7yDP(zPf5u)e6z0QoyLfxgK)7g6e6v)u4hXO7lDq7yDP( zPf5u)e6gCaohbfxhXP7unO9hD65mD68zze4NEa5yXsKy)u8unOoh3Moguu81)u8 unO9g6a5h3Moguu8zH(9v7OozDK9hSf5FLTDvLv8pDq8CDq7rPe4vLPopTf9uWu7 CDKorPe4h3OouDa(gS)72HO63Da5rL)7hSe5FnRDvLv8kDq8pLf9geu7g(Mxt)(4 uHe7NEK5yXMHy)u81TOounu8VD65JTtzjDKzt3(7k7e4c0QoyLfxgK)7yXP5n7e6 IfNoFzcyvPOoh3e7hSu7F)RDvLv8kDq8pLf9geu7E7cxJj81gWMzt)(4uHe7NEK5 yXsEy)u8XDaou)u8DD65hWN0AAQDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAtCAAQzyBAASLAA4vFALLqUSr gAC8pyCbtIKAscDIiaUq3ASLyACLflCLwnVyOlsB4IO04hAYNCQqtSj8N)rJQ)LE n0aGR08vRA9viuXq3ASLAmKLg4iogwyNsyiM5(bMp8rMzm88IaB8pSPEtI6escDI iCYq3AiLyACLyANL)KTu0Mfj)OTu)KTmIPA8tWP0N(rJtST8N(7JtSD8N(LEt(rJ N(bEO)7Ju)bMgQj8oMDAAAGGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAggDAw6)H7jRQiDhw1JKIA0LAA8ZNKHACCbPEAQPIAQPA cQPADIKAAISEoFOAIA1jPiWABggUAwB9AEA9IAA9QMgoAAgI7jT4AHRrzwbjALRr z0bjADYrADYr5SPoZGNAICGAQ)PwB2a9B2Kw0DKw0AQuRDQm)DMitWP0tODvQMDv 92qDGAxMAPYrAPYrzMKTz0brtmAEtC8iMB8itOzotCcipCci8UIApKUh9UIYpOUh (UY9FCWqggzPgNcEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAiCAAIo5)ggDew6)H7jhG0Djw vCAHBggUQ9KSIFACQMgoAAgI7jT4FCQqCVIPFCWqDVYPFWfqglqPY8ThDHBIAHRr QcejALRrQgejAHYrAHYr5SPoZCGAIGNAQ)Pwn3a9OABEQgertaAEtC8gMB8gtCxg QAB6L2aCL2KwDyEwJ2KEJ2KwtiCwwDh84hwT)GDr)KTuJDfKABPs0DBiQEfr)aSj QAfr)eSj)Gj7)GDr)GTu)KTm3DNiFOQqz3qQy0IEwnyvpOUhEVIAFCSqL2aRL2Kw kDCwCyCEOjCwgMA9l9LAQCR6sBAAA8rJAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA lCjwliEAIhkAJQPSDIKAAIiFoFOAoBQhgKQh3CADBkCAhAPAgCh4AcrBC8rqFCQA w)qOfCwAAEgAoBiwoJQhiDQhrhBIoBiwoJQhiDQhAwFMAAAAgCh4AcrBD8rqFCQA w)qOfCwAAEwAoBiwoJQhiDQhrhBIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAA2IEAaajb2YsNscDA3g1NweDh2YxNMBAAUNVQAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAEjUAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFkVAAgMAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWBAAzIVQAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAQjUAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWBAA1IVQAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABZFAAYjUAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASFkVAAwNAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAWBAA4IVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAABZFAAkjUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AcIV