'________________________________________________ ' ' M I D I T O O L S - S P 4 C E B A R '________________________________________________ AUTOMATIC_PLAYBACK=0 '"L" LOCAL, "E" EXTERNAL, "B" BOTH LOCATION$="L" 'ROM ENTRY FILE NUMBER (0-15) FILE_IN=4 '"P" PLAY, "C" CONVERT, "M" PLAY ONE TRACK AT A TIME, "R" READ COMMAND$="P" 'OUTPUT FILE (NX MUSIC EXTRACTED FROM MIDI) FILE_OUT=15 'NEW TO DO 'X FIX SCREEN FLICKERING IN FAST MIDI FILES, CPU ISN'T AT 100% MOST OF THE TIME ' X THAT IS PROBABLY THE PROBLEM, IT IS, THE METER DOEN'T UPDATE FAST ENOUGH '- LOAD THE MANY TRACKS INTO AN ARRAY (LIVE: NOTES AND VEL) '- DISPLAY THE ARRAY ON THE SCREEN '- ADD SOME ENVELOPE MAYBE '- READ THE SYNTH TYPE OF EACH TRACK FROM THE FILE 'MOST SIGNIFICANT BITS ARE FIRST: DON'T USE PEEKW OR PEEKL 'BUGS '- IN RUNNING STATUS FILES: KEY IS ALWAYS 2 WHILE CONVERTING: NO KEY UP COMMANDS '- MAYBE ALL KEY-UP COMMANDS ARE BLOCKED, BUT ONLY THE CONVERTER REALLY NEEDS IT '- CONVERSION VELOCITIES ARE 0 TOO OFTEN ' - DATA GOES SOMETHING LIKE THIS ' - HANDLE DT=0 BETTER ' ' 'MERGE THE MIDI FILE READER,PLAYER, AND CONVERTER IN ONE PROGRAM FOR EASY DEVELOPMENT 'AFTER ASKING WHAT FILE TO LOAD, ASK WHAT TO DO: '- READ MIDI '- PLAY MIDI '- CONVERT AND SAVE TO LOCATION (ASK LOCATION) ' 'TO DO: '- WRITE PALETTE DATA INTO THE PALETTE PART OF THE SIMULATED RAM (SEE MEMORY MAP) ' - PUT THE DATA AS DATA IN CODE, FOR LOOP TROUGH IT, DO SOMETHING LIKE: READ X, POKE(A,X) '- MORE PLAYBACK OPTIONS AFTER CONVERSION ' - JUST ADD THE TRACK COUNTER, SO THAT YOU CAN SEE IF IT LINES UP ' - ADD AN INDEX ARRAY FOR THE CONVERTOR OUTPUT ARRAY: AT WHAT TIMES DO TRACKS START ' - CHANGE SETTINGS BEFORE PLAYBACK: TRANSPOSE, START TIME ' - MAYBE DO THIS WHILE PLAYING WITH THE KEYBOARD ' - SET PLAYBACK TIME ' - HIT R TO REPLAY THE SONG ' - HIT L TO REWRITE MUSIC DATA ' - SKIP TRACKS OR GO BACK (WITH N AND P) ' - MUSIC FILE TRACK PLAYING OPTIONS: ONE AFTER ANOTHER OR AT THE SAME TIME '- MORE MIDI PLAYBACK OPTIONS ' - SKIP TRACKS OR GO BACK (WITH N AND P) '- USE MORE MIDI INFORMATION: ' - PLAYBACK SPEED ' - MIDI INSTRUMENT (LIKE DRUMS) '- PLAY TRACKS PARALLEL (MELODY, BASS, DRUMS, ALL INSTRUMENTS ALL AT ONCE) '[DONE] MAKE A FILE IMPORTER: ' - [DONE] IMPORT LOCAL OR EXTERNAL FILES, SPECIFY THE FILE NUMBER 'TEST THE ALGORITHM ON MORE MIDI FILES '- (SOME ARE POLYPHONIC, SOME ARE MORE COMPLEX, MANY TRACKS) '[DONE] A MESSAGE WHEN THE FILE IS TOO BIG 'ADD A SCANNING OPTION FOR WHEN THE PROGRAM GETS AN INVALID STATUS BYTE (AND GETS LOST) ' - FIRST ASSUME IT'S MIDI: SKIP 2 BYTES NOPE, IT CAN BE ONE BYTE, JUST SCAN ' - IT'LL SCAN FOR BYTES WITH BIT 7 (MSB) TURNED ON, THIS EITHER MEANS: ' - FIRST PART OF A LONG TIME VALUE ' - OR IT MEANS: NEW STATUS BYTE FOUND, ASSUME THIS, ERROR?: ASSUME THE OTHER OPTION 'MAKE IT WORK WITH BIG FILES: ' - IDEA: MAKE A FUNCTION WHICH LOADS VALUES FROM RAM AND SWAPS OUT THE RAM IF NECCESARY ' - LOAD THE FIRST 16KB IN RAM ' - WHEN IT HAS REACHED THE END: LOAD THE SECOND 16KB ' - IT CAN BE UP TO 32KB: THE CONVERSION OUTPUT WILL BE IN ANOTHER DISK ' - USE BOTH THE INTERNAL AND THE EXTERNAL DISK TO GET 2 X 32KB FILE INPUT 'REPLACE ADDRESS VARIABLE I WITH A, I IS TOO COMMON 'MARIO FILE NOT WORKING: '- [NOPE] MAYBE IT HAS DETECTED A TOO SMALL LENGTH OF A META EVENT (LENGTH HAS VAR LEN QUANTITY) '- [NOPE] CHECK HEX EDITOR ASCII '- THE FILE MAY HAVE BEEN CORRUPTED, CHECK WITH ANOTHER MIDI PLAYER TOUCHSCREEN DIM GLOBAL TRACKD(31,2) DIM GLOBAL INDEX(31) DIM GLOBAL TA(1,16383) DIM GLOBAL PLAYING(1,3) DIM GLOBAL VIRTUAL_VOICE(3,31) 'TA: TRACK ATTRIBUTES 'WRITE MAIN PALETTES DATA 0,12,8,4,0,56,36,16,0,15,11,7,0,44,40,20,0,63,42,21,0,63,42,21,0,63,42,21,0,63,42,21 FOR I=0 TO 31 READ V POKE $FF00+I,V NEXT I 'WRITE MAIN CHARACTERS DATA "00000000000000000000000000000000" DATA "00181404040C100C00000C1C1C0C080C" DATA "004812121200000000247E3612000000" DATA "0024601B12401B1200001E3F363E3F12" DATA "000830271021170400000E1F1E1F1F04" DATA "00401132040C11230022753A142A5723" DATA "00102A021013001D000C1E3A7E773A1D" DATA "0010040C1800000000081C3C18000000" DATA "0008160C0800000600040E3C38180C06" DATA "0030000002060C180000180C0E1E3C18" DATA "00002012402708120000040A3E3F2C12" DATA "000018144027040C0000000C3E3F1C0C" DATA "0000000010040C1800000000081C3C18" DATA "00000000603F0000000000001E3F0000" DATA "000000000010040C0000000000081C0C" DATA "00040B060C1830200002071E3C787020" DATA "002058110119031E001C3E7F777F3F1E" DATA "001024040404403F00081C1C1C1C3E3F" DATA "00205833060C003F001C3E3F1E3C7E3F" DATA "002058330041031E001C3E3F06273F1E" DATA "00665501390101030000337F3F070703" DATA "00605F003801433E001E3F7C3E073F3E" DATA "00102E001811031E000C1E7C7E773F1E" DATA "00603903060C0818001E3F0F1E3C3818" DATA "002058031811031E001C3E3F7E773F1E" DATA "002058011941031E001C3E3F1F273F1E" DATA "000000100C100C00000000080C080C00" DATA "000000100C100C18000000080C083C18" DATA "000008160C0000060000040E3C180C06" DATA "000000603F403F000000001E3F3E3F00" DATA "0000300000060C18000000180C1E3C18" DATA "00205833060C100C001C3E3F1E0C080C" DATA "002058191117001E001C3E777F773C1E" DATA "001020180119113300081C7E7F7F7733" DATA "006058031811033E001C3E7F7E777F3E" DATA "002058131010031E001C3E7370763F1E" DATA "006050101113063C00183C76777F7E3C" DATA "00605F001C10003F001E3F787C707E3F" DATA "00605F001C101030001E3F787C707030" DATA "00205E1C1111031E001C3E7277773F1E" DATA "00665501191111330000337F7F777733" DATA "003006040404001E000C1E1C1C1C3C1E" DATA "001C09010141031E00020F0707273F1E" DATA "00645B06041010330002377E7C7C7633" DATA "006050101010003F0000307070707E3F" DATA "0042450901191133000023777F7F7733" DATA "00664501111111330000337F7F777733" DATA "002058111111031E001C3E7777773F1E" DATA "006058031E101030001C3E7F7E707030" DATA "002058111111001F001C3E777B7D3E1F" DATA "0060580306101033001C3E7F7E7C7633" DATA "00205F001801033E001E3F3C1E077F3E" DATA "007027040404040C000E3F1C1C1C1C0C" DATA "006655111111031E0000337777773F1E" DATA "006655111103060C00003377773F1E0C" DATA "00665515011931210000336B7F7F7321" DATA "00640B06001811330002371E3C7E7733" DATA "0066550B0604040C000033371E1C1C0C" DATA "006033060C58003F001E3F1E3C387E3F" DATA "00302E080808001E000C1E3838383C1E" DATA "0060000000000101000030180C060301" DATA "003812020202021E00041E0E0E0E3E1E" DATA "001020183300000000081C7E33000000" DATA "000000000000603F0000000000001E3F" FOR J=0 TO 63 READ V$ FOR I=0 TO 15 V1=ASC(MID$(V$,I*2+1,1))-48 V2=ASC(MID$(V$,I*2+2,2))-48 V1=V1+7*(V1>9) V2=V2+7*(V2>9) V=V1*16+V2 TRACE V POKE $8000+I+J*16,V NEXT I NEXT J FONT 0 GLOBAL TYPE,S,V,V0,V1,V2,V3,F,F1,I,CSIZE,TN,TRACKS,TIME,STATUS,KEY,RECENT80,PITCH,VELOCITY,FILE_PART,ADDR_END,CHANNEL_MODE,K$,O$,OPERATION,DIV,TIME_UNIT,AUTOMATIC_PLAYBACK I=$A000 TYPE=0 CSIZE=0 TN=0 DT=0 TIME=0 KEY=0 STATUS=0 RECENT80=0 TIME_UNIT=10000 FILE_PART=0 CHANNEL_MODE=0 OPERATION=-1 ROT=0 'S E T U P : U S E R I N P U T IF AUTOMATIC_PLAYBACK THEN K$=LOCATION$ F=FILE_IN O$=COMMAND$ F1=FILE_OUT ELSE PRINT "DISK:" PRINT "LOCAL(L)/EXTERNAL(E)/BOTH(B)" KEYBOARD ON REPEAT K$=INKEY$ IF K$="L" OR K$="E" OR K$="B" THEN PRINT K$ WAIT 1 UNTIL K$="L" OR K$="E" OR K$="B" PRINT "" INPUT "FILE NUMBER (1-15) ";F PRINT "" PRINT "OPERATION:" PRINT "READ(R)/PLAY(P)" PRINT "/CONVERT(C)/PLAY" PRINT "TRACKS MONO(M)" DO O$=INKEY$ IF O$="R" OR O$="P" OR O$="C" OR O$="M" THEN PRINT O$ EXIT END IF WAIT 1 LOOP IF O$="C" THEN PRINT "" INPUT "OUTPUT FILE (1-15) ";F1 END IF KEYBOARD OFF CLW END IF 'B A S I C F I L E I N F O A N D H E A D E R PAL 3 PRINT "MIDI FILE LOADED" PRINT "DISK: "; IF K$="L" THEN PRINT "LOCAL "; S=SIZE(F) COPY ROM(F),S TO $A000 ELSE IF K$="E" THEN PRINT "EXTERNAL "; FILES S=FSIZE(F) 'REMOVE THIS SOON!!!!! - I FORGOT :( 'IF S>$4000 THEN S=$4000 LOAD F,$A000,$4000 ELSE IF K$="B" THEN PRINT "EXT+LOCAL "; FILES S=FSIZE(F) LOAD F,$A000,$4000 END IF PRINT F ADDR_END=$A000+S PRINT "SIZE:",S PRINT "" PAL 0 'PRINT HEX$(S) 'PRINT HEX$(ADDR_END) 'HEADER TYPE ASC CODES 4D546864 'PRINT $6468544D=PEEKL($A000)+63 'RETURNS TRUE -> SIX BITS GET LOST 'THESE FLOAT VARIABLES CAN'T STORE 32-BIT VALUES, THEY PROBABLY HAVE A 6-BIT EXPONENT 'DO 'WAIT 60 'LOOP 'R E A D H E A D E R PRINT "FORMAT:",256*PEEK($A008)+PEEK($A009) PRINT "TRACKS:",256*PEEK($A00A)+PEEK($A00B) D=256*PEEK($A00C)+PEEK($A00D) D1=D\2^15 D2=D MOD 2^15 IF D1=0 THEN PRINT "DIVISION:",D2 PRINT "TICKS/QUARTER NOTE" DIV=D2\24 ELSE IF D1=1 THEN PRINT "DIVISION:",D2\2^8,D2 MOD 2^8 PRINT "F/S AND TICKS/F" END IF PRINT "" CALL TAP_TO_CONTINUE 'I N D E X T H E F I L E REPEAT 'V=PEEK(I) 'V1=PEEK(I+1) 'V2=PEEK(I+2) 'V3=PEEK(I+3) CALL RAM_PEEK4(I) CALL DETERMINE_TYPE WAIT 1 UNTIL I=ADDR_END INDEX(TN)=ADDR_END TRACKS=TN-1 PRINT "" 'D E T E R M I N E B L O C K T Y P E SUB DETERMINE_TYPE IF V0=77 AND V1=84 THEN IF V2=104 AND V3=100 THEN TYPE=1 PRINT "HEADER: SIZE="; ADD I,4 CALL DETERMINE_SIZE ELSE IF V2=114 AND V3=107 THEN TYPE=2 PRINT "TRACK: SIZE="; INDEX(TN)=I INC TN ADD I,4 CALL DETERMINE_SIZE END IF ELSE I=ADDR_END END IF END SUB 'D E T E R M I N E B L O C K S I Z E SUB DETERMINE_SIZE 'THESE FLOAT VARIABLES CAN'T STORE 32-BIT VALUES 'BUT THE SIZE CAN'T BE 2^32-1, IT WON'T FIT IN NX, SO IT'S FINE 'MSB FIRST, SWAP THAT 'CSIZE=2^24*PEEK(I)+2^16*PEEK(I+1)+2^8*PEEK(I+2)+PEEK(I+3) CALL RAM_PEEK4(I) CSIZE=2^24*V0+2^16*V1+2^8*V2+V3 ADD I,4 PRINT CSIZE 'SKIP_CHUNK I=I+CSIZE END SUB CALL TAP_TO_CONTINUE 'DISPLAY STORED INDEX VALUES PRINT "INDEX:" FOR I=0 TO 15 V=INDEX(I) IF V<>0 THEN PRINT HEX$(V),""; NEXT I PRINT "" PRINT "" CALL TAP_TO_CONTINUE 'T A P T O C O N T I N U E SUB TAP_TO_CONTINUE IF AUTOMATIC_PLAYBACK THEN CLW EXIT SUB END IF PAL 2 PRINT "TAP TO CONTINUE" PAL 0 WHILE NOT TAP WAIT 1 WEND FOR J=0 TO 16 PRINT "" NEXT J CLW END SUB 'R E A D M I D I IF O$="R" THEN TIME=0 FOR J=0 TO TRACKS PAL 2 PRINT "===================" PRINT "===== TRACK",J,"=====" PRINT "===================" PRINT HEX$(INDEX(J)+8) PRINT "" PAL 0 'BUG MEMORIAL: FORGOT TO OFFSET THE INDEX VALUES FOR I=INDEX(J)+8 TO INDEX(J+1)-1 'TRACE " "+HEX$(I) 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V 'DT2=DT/TIME_UNIT PRINT "DT=",V CALL STATUS(I,J,ROT) 'TRACE HEX$(I-$A000) PVELOCITY=VELOCITY PPITCH=PITCH WAIT 1 WHILE NOT TAP WAIT 1 WEND PRINT "" NEXT I NEXT J STOP PAL 2 PRINT "" PRINT "===================" PRINT "=== END OF SONG ===" PRINT "===================" PAL 0 'P L A Y M I D I S I N G L E T R A C K ELSE IF O$="M" THEN O$="P" TIME=0 FOR J=0 TO TRACKS 'TRACE "TRACK",HEX$(I-$A000) FOR I=INDEX(J)+8 TO INDEX(J+1)-1 'TRACE "START",HEX$(I-$A000) 'TRACE " "+HEX$(I) 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V 'DT2=DT/TIME_UNIT DT3=DT\DIV PRINT "DT=",DT IF DT3>0 THEN WAIT DT3 CLW 'TRACE "TIME ",HEX$(I-$A000) CALL STATUS(I,J,ROT) 'TRACE HEX$(I-$A000) PVELOCITY=VELOCITY PPITCH=PITCH 'TRACE "END ",HEX$(I-$A000) NEXT I NEXT J STOP PAL 2 PRINT "" PRINT "===================" PRINT "=== END OF SONG ===" PRINT "===================" PAL 0 'P L A Y M I D I M U L T I T R A C K 'MULTITRACKPLAYER: ELSE IF O$="P" THEN 'O$="P" 'BUG MEMORIAL: FORGOT TO OFFSET THE INDEX VALUES (AGAIN): FIRST 8 BYTES AREN'T MIDI 'FILL ARRAY WITH FIRST DT AND ADDR OF EACH TRACK 'FIND LOWEST VALUE OF ARRAY, LOAD ITS PARAMETERS, AND ACT AS IF THERE WAS ONE TRACK 'AFTERWARDS, WRITE THE NEW VALUES TO THE ARRAY T_ZERO=TIMER FOR J=0 TO TRACKS I=INDEX(J)+8 CALL VAR_LEN_QUANTITY 'TRACE V,J,HEX$(I-$A000) DT=V DT3=DT\DIV 'DT3=0 ADD TRACKD(J,2),DT TRACKD(J,0)=TIMER-(DT3>=0)*DT3 TRACKD(J,1)=I 'TRACE J,HEX$(I-$A000),TIMER-(DT3>0)*DT3 NEXT J 'WAIT 60000 TIME=0 'FOR J=0 TO TRACKS J=0 'DO 'FOR I=INDEX(J)+8 TO INDEX(J+1)-1 I=INDEX(J)+8 'IF TRACKD(0,0)=-1 THEN TRACE TRACKD(0,0) 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V DT3=DT\DIV ADD TRACKD(J,2),DT TRACKD(J,0)=TIMER-(DT3>0)*DT3 TRACKD(J,1)=I PRINT "DT=",V LOCATE 0,11 PRINT "V PI VE TRACK" LOCATE 0,0 'REPEAT DO 'TRACE " "+HEX$(I) 'TRACE "START",J,HEX$(I-$A000) SOONEST=-1 'IF TRACKD(0,0)<>-1 THEN TRACE "T0",TRACKD(0,0)-TIMER MIDI_TIMER=TIMER*DIV 'FIND THE LOWEST NUMBER, I COULD USE THE "MIN" FUNCTION FOR I=0 TO TRACKS IF (SOONEST<0 OR TRACKD(I,0)0 THEN 'IF (SOONEST<0 OR TRACKD(I,2)0 THEN 'NEW TIME VALUE SOONEST=T_ZERO+TRACKD(I,2)\DIV J=I 'TRACE TRACKD(I,0),T_ZERO+TRACKD(I,2)\DIV 'OLD TIME VALUE 'SOONEST=TRACKD(I,0) 'JUST PLAY'S TRACK 1 FOR SOME REASON 'SOONEST=TRACKD(I,2) END IF 'TRACE I,J,SOONEST-TIMER,TRACKD(I,0)-TIMER NEXT I IF SOONEST=-1 THEN EXIT 'IF J=0 THEN TRACE "J=0",TIMER,I,TRACKD(0,0) 'TRACE J,SOONEST-TIMER 'WAIT 60 'TRACE J I=TRACKD(J,1) 'OLD TIME GENERATOR: EVERYTHING HAS BEEN ROUNDED BADLY BEFORE 'TI=TRACKD(J,0)-TIMER 'NEW TIME GENERATOR: IT'S SHARP AND ACCURATE TI=TRACKD(J,2)\DIV+T_ZERO-TIMER 'TRACE TRACKD(J,0)-TIMER,TRACKD(J,2)\DIV+T_ZERO-TIMER IF TI>0 THEN WAIT TI 'CLW BG FILL 0,5 TO 19,10 CHAR 0 BG TINT 0,12 TO 19,15 PAL 0 LOCATE 0,0 PRINT "TRACK:",J," " 'TRACE "LOAD ",J,HEX$(I-$A000) CALL STATUS(I,J,ROT) 'TRACE "DONE ",J,HEX$(I-$A000) 'TRACE HEX$(I-$A000) PVELOCITY=VELOCITY PPITCH=PITCH INC I 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V DT3=DT\DIV ADD TRACKD(J,2),DT TRACKD(J,0)=TIMER-(DT3>0)*DT3 TRACKD(J,1)=I PRINT "DT=",V," " IF I>=INDEX(J+1)-1 THEN TRACKD(J,0)=-1 'IF TRACKD(0,0)=-1 THEN TRACE TRACKD(0,0) 'TRACE "SAVE ",J,HEX$(I-$A000) LOOP 'UNTIL I>=INDEX(J+1)-1 'NEXT I 'LOOP 'NEXT J STOP PAL 2 PRINT "" PRINT "===================" PRINT "=== END OF SONG ===" PRINT "===================" PAL 0 'C O N V E R T M I D I ELSE IF O$="C" THEN PRINT "PLEASE WAIT" PRINT "FINDING SMALLEST DT" FOR OPERATION=0 TO 1 TIME=0 FOR J=0 TO TRACKS FOR I=INDEX(J)+8 TO INDEX(J+1)-1 'TRACE " "+HEX$(I) 'DETERMINE DELTA TIME CALL VAR_LEN_QUANTITY DT=V DT2=DT/TIME_UNIT IF OPERATION=0 AND V>0 THEN TIME_UNIT=MIN(TIME_UNIT,V) CALL STATUS(I,J,ROT) 'TRACE HEX$(I-$A000) 'IT NEEDS TO KEEP WRITING NOTES WHILE IT'S DOING CONTROLLER THINGS IF OPERATION=1 THEN IF STATUS>$7F AND STATUS<$A0 THEN FOR A=0 TO DT2-1 IF A+TIME<16384 THEN 'TRACE PPITCH,PVELOCITY 'WAIT VBL TA(0,A+TIME)=PPITCH TA(1,A+TIME)=PVELOCITY ELSE IF CURSOR.Y>3 THEN CLW LOCATE 0,0 PAL 1 PRINT TIME PRINT "CONVERTOR" PRINT "OUT OF MEMORY" PAL 0 END IF NEXT A END IF ADD TIME,DT2 END IF PVELOCITY=VELOCITY PPITCH=PITCH NEXT I NEXT J IF OPERATION=0 THEN PRINT "SMALLEST DT=",TIME_UNIT PRINT "CONVERTING..." PAL 2 INPUT "PRECISION 1,2,4,8...";PRECISION KEYBOARD OFF PAL 0 TIME_UNIT=TIME_UNIT*PRECISION END IF NEXT OPERATION 'E N C O D E T O N X STOP PRINT "ENCODING NX MUSIC..." 'WRITE TRACK DATA IN NX FORMAT 'TRACKS (6144 BYTES) FILL $A000,$4000 COPY ROM(14),SIZE(14) TO $A000 ADDR=$A180 FOR J=0 TO 63 FOR I=0 TO 31 K=I+32*J CALL SAVEDATA(ADDR,TA(0,K),0) INC ADDR CALL SAVEDATA(ADDR,TA(1,K),0) 'CALL SAVEDATA(ADDR,TSYNTH(J),4) INC ADDR 'CALL SAVEDATA(ADDR,TA(2,K),0) 'CALL SAVEDATA(ADDR,TA(3,K),4) INC ADDR NEXT I NEXT J SAVE 15,"MUSIC",$A000,ADDR-$A000 FILL $A000,$4000 PRINT "DONE" WAIT 1 'PLAY SONG FROM ARRAY CLW LOCATE 0,0 PRINT "TIME" LOCATE 5,0 PRINT "PIT" LOCATE 9,0 PRINT "VOL" 'PLAY FOR I=0 TO TIME LOCATE 0,1 PRINT " " LOCATE 0,1 IF I>2047 THEN PAL 1 PRINT I PAL 0 LOCATE 5,1 PRINT TA(0,I) LOCATE 9,1 PRINT TA(1,I) VOLUME 0,TA(1,I), PITCH=TA(0,I)-24 IF PITCH>0 AND PITCH<97 THEN 'OCT -2 PLAY 0,PITCH PRINT " " ELSE IF PITCH<1 THEN PLAY 0,PITCH MOD 12 PAL 1 PRINT "PITCH TOO LOW" PAL 0 ELSE PLAY 0,84+PITCH MOD 12 PAL 1 PRINT "PITCH TOO HIGH" PAL 0 END IF WAIT 4 '+PRECISION NEXT I CLW PAL 2 PRINT "===================" PRINT "=== END OF SONG ===" PRINT "===================" PAL 0 END IF 'S U B P R O G R A M S 'S T A T U S I N T E R P R E T E R SUB STATUS(I,TRACKN,ROT) 'INTERPRET THE STATUS BYTE: '- 00 TO 7F: NOT A STATUS CODE -> RUNNING STATUS (CONTINUE WITH PREVIOUS STATUS) '- 80 TO EF: MIDI STATUS CODE -> NEXT IS PITCH -> NEXT IS VELOCITY ' - 9N: KEY DOWN ' - 8N: KEY UP ' N=MIDI CHANNEL NUMBER (0 TO 15) '- F0=SYSEX 1 -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING '- F7=SYSEX 2 -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING '- FF=META -> NEXT IS META-CODE -> NEXT IS LENGTH: AMOUNT OF BYTES FOLLOWING CALL RAM_PEEK(I) 'TRACE "STATS",HEX$(I-$A000) 'WAIT 30 IF V\128=1 THEN STATUS=V INC I IF O$="P" THEN PRINT " " ELSE IF O$<>"C" THEN PRINT "RUNNING STATUS" END IF 'IF V>=$80 AND V<=$89 THEN TRACE "V1" 'IF STATUS>=$80 AND STATUS<=$89 THEN TRACE "K1" IF O$<>"C" THEN PAL 3 PRINT "STATUS:",HEX$(STATUS),""; END IF 'TRACE "SLOAD",HEX$(I-$A000) 'I N T E R P R E T O R IF STATUS>$7F AND STATUS<$F0 THEN 'TRACE "S",HEX$(I-$A000) 'MIDI TRACKM=STATUS AND 16 IF O$<>"C" THEN PRINT "MIDI " IF STATUS<$A0 THEN IF STATUS<$90 THEN IF O$<>"C" THEN PRINT "KEY UP " KEY=1 RECENT80=1 DT2=INT(DT2+0.5) ELSE IF STATUS<$A0 THEN IF O$<>"C" THEN PRINT "KEY DOWN " KEY=2 DT2=INT(DT2+0.49) END IF CALL RAM_PEEK(I) IF O$<>"C" THEN PAL 0 PRINT "PITCH=",V,""; END IF 'ROUTE NOT TAKEN AT PROBLEM 'TRACE 2,HEX$(I-$A000) 'MIDI PITCH STARTS AT 0, IT HAS TO BE TRANSPOSED +1 PITCH=V+1 INC I CALL RAM_PEEK(I) IF O$<>"C" THEN PRINT "VEL=",V,"" VELOCITY=V\8 IF O$="P" THEN 'VOLUME 0,VELOCITY, IF KEY=2 THEN CALL KEYDOWN(ROT,TRACKN,TRACKM,PITCH,VELOCITY) ELSE IF KEY=1 THEN CALL KEYUP(TRACKN,TRACKM,PITCH) END IF 'TRACE 3,HEX$(I-$A000) ELSE IF O$="C" AND OPERATION=1 THEN 'TRACE HEX$(I),TIME,VELOCITY,-(KEY=1 OR KEY=2 AND RECENT80=0) IF KEY=2 AND RECENT80=1 THEN RECENT80=0 END IF IF KEY=1 OR (KEY=2 AND RECENT80=0) THEN FOR A=0 TO DT2-1 IF A+TIME<16384 THEN TA(0,A+TIME)=PPITCH TA(1,A+TIME)=PVELOCITY ELSE IF CURSOR.Y>3 THEN CLW LOCATE 0,0 PAL 1 PRINT TIME PRINT "CONVERTOR" PRINT "OUT OF MEMORY" PAL 0 END IF 'TRACE A+TIME NEXT A END IF END IF ELSE IF STATUS<$B0 THEN 'TRACE "A",HEX$(I-$A000) 'A0-AF IF O$<>"C" THEN PRINT "AFTERTOUCH" PAL 0 CALL RAM_PEEK(I) PRINT "KEY=",V,""; LOCATE 0,12+VOI PAL 2 PRINT VOI,PITCH,VELOCITY," " LOCATE 0,5 PAL 0 END IF INC I CALL RAM_PEEK(I) IF O$<>"C" THEN PRINT "PRESS=",V ELSE IF STATUS<$C0 THEN 'TRACE "B",HEX$(I-$A000) 'B0-BF CALL RAM_PEEK(I) CTRL=V IF O$<>"C" THEN PAL 0 PRINT "CONTR=",HEX$(V),""; END IF INC I CALL RAM_PEEK(I) IF O$<>"C" THEN PRINT "VAL=",V IF CTRL=$7E THEN CHANNEL_MODE=0 STOP ELSE IF CTRL=$7F THEN CHANNEL_MODE=1 STOP END IF ELSE IF STATUS<$E0 THEN 'TRACE "CD",HEX$(I-$A000) 'C0-DF IF O$<>"C" THEN PAL 0 CALL RAM_PEEK(I) PRINT "VAL=",V END IF ELSE 'TRACE "E",HEX$(I-$A000) 'V0=PEEK(I) CALL RAM_PEEK(I) V0=V INC I CALL RAM_PEEK(I) V0=V0+256*V IF O$<>"C" THEN PAL 0 PRINT "VAL=",V END IF END IF ELSE IF STATUS>$EF THEN 'TRACE "F",HEX$(I-$A000) IF STATUS=$F0 THEN 'SYSEX 1 IF O$<>"C" THEN PRINT "SYSEX 1" PAL 0 END IF CALL VAR_LEN_QUANTITY IF O$<>"C" THEN PRINT "LENGTH= ",V LENGTH=V ADD I,V-1 ELSE IF STATUS=$F7 THEN 'TRACE "F7",HEX$(I-$A000) 'SYSEX 2 IF O$<>"C" THEN PRINT "SYSEX 2" PAL 0 END IF CALL VAR_LEN_QUANTITY IF O$<>"C" THEN PRINT "LENGTH= ",V LENGTH=V ADD I,V-1 ELSE IF STATUS=$FF THEN 'TRACE "FF",HEX$(I-$A000) 'META IF O$<>"C" THEN PRINT "META " PAL 0 END IF 'V=PEEK(I) CALL RAM_PEEK(I) IF O$<>"C" THEN PRINT "META CODE=",HEX$(V) IF V=$2F THEN PAL 1 PRINT "END OF TRACK " PAL 0 END IF END IF INC I CALL VAR_LEN_QUANTITY IF O$<>"C" THEN PRINT "LENGTH= ",V LENGTH=V 'TRACE V ADD I,V-1 'TRACE "F0",HEX$(I-$A000) END IF ELSE 'TRACE "R",HEX$(I-$A000) IF O$<>"C" THEN PAL 1 PRINT "RUNNING STATUS" PAL 0 END IF END IF 'TRACE 4,HEX$(I-$A000) CALL VOICESELECT(ROT,TRACKN,PITCH,VELOCITY) END SUB 'K E Y D O W N SUB KEYDOWN2(ROT,TRACKN,TRACKM,PITCH,VELOCITY) 'REUSE VIRTUAL VOICES FOR X=0 TO 31 VAR=VIRTUAL_VOICE(1,X) IF VAR=PITCH OR VAR=0 THEN T=X EXIT END IF NEXT X 'WRITE SOUND TO VIRTUAL VOICE VIRTUAL_VOICE(0,T)=TRACKN*16+TRACKM VIRTUAL_VOICE(1,T)=PITCH VIRTUAL_VOICE(2,T)=VELOCITY VIRTUAL_VOICE(3,T)=TIMER 'FIND OLDEST TRACK ON VOICE OLDEST=0 VOI=0 FOR X=0 TO 3 IF PLAYING(1,X)>OLDEST THEN OLDEST=PLAYING(1,X) VOI=X END IF NEXT X PLAYING(0,VOI)=VIRTUAL_VOICE(0,T) PLAYING(1,VOI)=VIRTUAL_VOICE(1,T) OFFSET=0 CALL PLAYSOUND(VOI,PITCH,VELOCITY,OFFSET) END SUB SUB PLAYSOUND(VOI,PITCH,VELOCITY,OFFSET) VOLUME VOI,VELOCITY, PLAY VOI,PITCH END SUB SUB VOICESELECT(ROT,TRACKN,PITCH,VELOCITY) END SUB SUB KEYDOWN(ROT,TRACKN,TRACKM,PITCH,VELOCITY) 'CALL KEYDOWN2(ROT,TRACKN,TRACKM,PITCH,VELOCITY) 'EXIT SUB VOI=ROT ADD ROT,1,0 TO 3 'VOI=-1 'FIND AVAILABLE VOICES FOR X=0 TO 3 IF PLAYING(0,X)=PITCH THEN VOI=X EXIT ELSE IF PLAYING(0,X)=0 THEN VOI=X EXIT END IF NEXT X 'IF VOI=-1 THEN EXIT SUB 'OVERWRITE VOICE IF THE SAME KEY IS ALREADY PRESSED (SAME PITCH) 'TRACE VOI,PITCH,PLAYING(0),PLAYING(1),PLAYING(2),PLAYING(3) PLAYING(0,VOI)=PITCH 'STOP SOUND IF VELOCITY=0 THEN 'TRACE "STOP",VOI PLAYING(0,VOI)=0 STOP VOI LOCATE 0,12+VOI PAL 1 'PRINT VOI,PITCH,0," " PRINT VOI," " LOCATE 0,5 PAL 0 ELSE LOCATE 0,12+VOI PAL 3 PRINT VOI,PITCH,VELOCITY," "; LOCATE 9,12+VOI PRINT TRACKN,TRACKM," " LOCATE 0,5 PAL 0 END IF 'VELOCITY VELOCITY=-VELOCITY*(VELOCITY>=0 AND VELOCITY<=15)-15*(VELOCITY>15) VOLUME VOI,VELOCITY, 'TWO OCTAVES DOWN ADD PITCH,-24 'OCT -2 'PLAY OR CLIP IF PITCH>0 AND PITCH<97 THEN PLAY VOI,PITCH ELSE IF PITCH<1 THEN PLAY VOI,PITCH AND 12 PRINT "PITCH TOO LOW" ELSE PLAY VOI,84+PITCH AND 12 PRINT "PITCH TOO HIGH" END IF END SUB SUB KEYUP(TRACKN,TRACKM,PITCH) FOR X=0 TO 3 IF PITCH=PLAYING(0,X) THEN STOP X PLAYING(0,X)=0 'TRACE "STOP",X LOCATE 0,12+X PAL 1 'PRINT X,PITCH,0," " PRINT X," " LOCATE 0,5 PAL 0 END IF NEXT X END SUB 'V A R I A B L E L E N G T H Q U A N T I T Y SUB VAR_LEN_QUANTITY V0=0 REPEAT V0=V0*128 CALL RAM_PEEK(I) 'PRINT " ",HEX$(V) ADD V0,V MOD 128 'PRINT " ",HEX$(V0) INC I UNTIL V\128=0 V=V0 END SUB SUB NEW_VAR_LEN_QUANTITY(I,V) V0=0 V=0 REPEAT V0=V0*128 CALL RAM_PEEK(I) 'PRINT " ",HEX$(V) ADD V0,V MOD 128 'PRINT " ",HEX$(V0) INC I UNTIL V\128=0 V=V0 END SUB 'THIS FUNCTION SIMULATES A 64KB RAM: 'IF THE ADDRESS IS OUT OF RANGE IT'LL CHANGE THE DATA BLOCK 'CALL RAM_PEEK(I) WILL BE USED INSTEAD OF PEEK(I) 'R A M P E E K SUB RAM_PEEK(A) 'TRACE HEX$(A-$A000) IF (A-$A000)\$4000 = FILE_PART THEN V=PEEK(A-FILE_PART*$4000) ELSE 'TRACE "SWITCH",FILE_PART FILE_PART=(A-$A000)\$4000 OFFSET=$4000*(FILE_PART MOD 2) IF K$<>"B" AND FILE_PART>1 THEN IF OPERATION<>-1 THEN PAL 1 PRINT "" PRINT "OUT OF DATA" PAL 0 END IF ELSE IF K$="L" OR K$="B" AND FILE_PART\2=1 THEN COPY ROM(F)+OFFSET,-(FILE_PART=1)*(S-$4000)-(FILE_PART=0)*$4000 TO $A000 ELSE IF K$="E" OR K$="B" AND FILE_PART\2=0 THEN LOAD F,$A000,$4000,OFFSET END IF V=PEEK(A-FILE_PART*$4000) 'TRACE "SWITCHED",FILE_PART END IF END IF END SUB 'R A M P E E K F O U R SUB RAM_PEEK4(A) CALL RAM_PEEK(A) V0=V CALL RAM_PEEK(A+1) V1=V CALL RAM_PEEK(A+2) V2=V CALL RAM_PEEK(A+3) V3=V END SUB 'S A V E SUB SAVEDATA(ADDR,V,OFFSET) 'BITSHIFT POKE ADDR,PEEK(ADDR)+INT(V*2^OFFSET)MOD 256 END SUB 'T R A S H SUB NOT_IN_USE WHILE 0 'V=PEEK(I) CALL RAM_PEEK(I) PRINT HEX$(V) WHILE NOT TAP WAIT 1 WEND INC I WAIT 1 WEND END SUB #4:ZELDA 4D546864000000060001000F00304D54 726B0000002000FF510307530078FF51 030927C030FF51030A2C2A30FF510307 530000FF2F004D54726B0000000400FF 2F004D54726B0000000400FF2F004D54 726B0000000400FF2F004D54726B0000 000400FF2F004D54726B0000000400FF 2F004D54726B0000011500B565000064 0000060C002600006800000000002000 00C50500B50A5800953F7A00457A004A 7A0C853F7A00457A004A7A00953E7100 44710049710C853E7100447100497100 95417F00477F004C7F0C85417F00477F 004C7F00954078004678004B780C8540 78004678004B780095427C00487C004D 7C0C85427C00487C004D7C0095417800 4778004C7803B5077403076803075A03 074E07074A03074E0307520307560307 5A03076003076403076603076A03076C 03076E03077203077403077603077803 077A03077C03077E06077F18077E0307 7C03077A03077803077403077203076E 03076B03076603076203075C03075603 075203074C03074603073E0307380307 3205854C7800477800417800FF2F004D 54726B000008F400B665000064000006 0C002600006800005B19000000002000 00C60600B60A260096457A004A7A0C86 457A004A7A009644710049710C864471 0049710096477F004C7F0C86477F004C 7F00964678004B780C864678004B7800 96487C004D7C0C86487C004D7C009647 78004C7803B6077403076803075A0307 4E07074A03074E03075203075603075A 03076003076403076603076A03076C03 076E0307720307740307760307780307 7A03077C03077E06077F18077E03077C 03077A03077803077403077203076E03 076B03076603076203075C0307560307 5203074C03074603073E030738030732 05864C7800477800963C790B863C7901 963C760B863C7601963A740B863A7401 963A710B863A7101963C7B0B863C7B01 963C760B863C7601963C6C0B863C6C01 963C740B863C7461963C790B863C7901 963C760B863C7601963A740B863A7401 963A710B863A7101963C7B0B863C7B01 963C760B863C7601963C6C0B863C6C01 963C740B863C7461963F790B863F7901 963F760B863F7601963D740B863D7401 963D710B863D7101963F7B0B863F7B01 963F760B863F7601963F6C0B863F6C01 963F740B863F7461963F790B863F7901 963F760B863F7601963D740B863D7401 963D710B863D7101963F7B0B863F7B01 963F760B863F7601963F6C0B863F6C01 963F740B863F7461963C790B863C7901 963C760B863C7601963A740B863A7401 963A710B863A7101963C7B0B863C7B01 963C760B863C7601963C6C0B863C6C01 963C740B863C7461963C790B863C7901 963C760B863C7601963A740B863A7401 963A710B863A7101963C7B0B863C7B01 963C760B863C7601963C6C0B863C6C01 963C740B863C7461963F790B863F7901 963F760B863F7601963D740B863D7401 963D710B863D7101963F7B0B863F7B01 963F760B863F7601963F6C0B863F6C01 963F740B863F7461963F790B863F7901 963F760B863F7601963D740B863D7401 963D710B863D7101963F7B0B863F7B01 963F760B863F7601963F6C0B863F6C01 963F740B863F74619640660C86406600 9640620C86406200963F660C863F6600 963F610C863F61009641680C86416800 9641640C864164009640660C86406600 9640620C864062009642630C86426300 9642610C864261009641620C86416200 96415C0C86415C009644660C86446600 9644630C864463009643640C86436400 96435C0C86435C009640600C86406000 9640600C86406000963F630C863F6300 963F5B0C863F5B009641640C86416400 96415C0C86415C009640660C86406600 9640600C864060009642630C86426300 9642630C864263009641620C86416200 9641600C864160009644610C86446100 9644660C864466009643680C86436800 96436A0C86436A0096445F0C86445F00 96445F0C86445F009643680C86436800 9643620C864362009642630C86426300 9642610C8642610096416A0C86416A00 9641600C8641600096426D0C86426D00 96425F0C86425F009641680C86416800 9641660C8641660096405F0C86405F00 96405D0C86405D00963F5E0C863F5E00 963F540C863F54009644630C86446300 9644660C864466009643600C86436000 96435A0C86435A009642660C86426600 9642610C864261009641660C86416600 96415E0C86415E0096426D0C86426D00 9642630C864263009641680C86416800 9641660C864166009640630C86406300 9640610C86406100963F600C863F6000 963F5E0C863F5E00963C790B863C7901 963C760B863C7601963A740B863A7401 963A710B863A7101963C7B0B863C7B01 963C760B863C7601963C6C0B863C6C01 963C740B863C7461963C790B863C7901 963C760B863C7601963A740B863A7401 963A710B863A7101963C7B0B863C7B01 963C760B863C7601963C6C0B863C6C01 963C740B863C7461963F790B863F7901 963F760B863F7601963D740B863D7401 963D710B863D7101963F7B0B863F7B01 963F760B863F7601963F6C0B863F6C01 963F740B863F7461963F790B863F7901 963F760B863F7601963D740B863D7401 963D710B863D7101963F7B0B863F7B01 963F760B863F7601963F6C0B863F6C01 963F740B863F7461963C790B863C7901 963C760B863C7601963A740B863A7401 963A710B863A7101963C7B0B863C7B01 963C760B863C7601963C6C0B863C6C01 963C740B863C7461963C790B863C7901 963C760B863C7601963A740B863A7401 963A710B863A7101963C7B0B863C7B01 963C760B863C7601963C6C0B863C6C01 963C740B863C7461963F790B863F7901 963F760B863F7601963D740B863D7401 963D710B863D7101963F7B0B863F7B01 963F760B863F7601963F6C0B863F6C01 963F740B863F7461963F790B863F7901 963F760B863F7601963D740B863D7401 963D710B863D7101963F7B0B863F7B01 963F760B863F7601963F6C0B863F6C01 963F740B863F74619640660C86406600 9640620C86406200963F660C863F6600 963F610C863F61009641680C86416800 9641640C864164009640660C86406600 9640620C864062009642630C86426300 9642610C864261009641620C86416200 96415C0C86415C009644660C86446600 9644630C864463009643640C86436400 96435C0C86435C009640600C86406000 9640600C86406000963F630C863F6300 963F5B0C863F5B009641640C86416400 96415C0C86415C009640660C86406600 9640600C864060009642630C86426300 9642630C864263009641620C86416200 9641600C864160009644610C86446100 9644660C864466009643680C86436800 96436A0C86436A0096445F0C86445F00 96445F0C86445F009643680C86436800 9643620C864362009642630C86426300 9642610C8642610096416A0C86416A00 9641600C8641600096426D0C86426D00 96425F0C86425F009641680C86416800 9641660C8641660096405F0C86405F00 96405D0C86405D00963F5E0C863F5E00 963F540C863F54009644630C86446300 9644660C864466009643600C86436000 96435A0C86435A009642660C86426600 9642610C864261009641660C86416600 96415E0C86415E0096426D0C86426D00 9642630C864263009641680C86416800 9641660C864166009640630C86406300 9640610C86406100963F600C863F6000 963F5E0C863F5E00FF2F004D54726B00 00000400FF2F004D54726B0000000400 FF2F004D54726B0000197300B9650000 640000060C0026000068000000000020 0000C97F00B9077B00993E7A0C893E7A 00993D710C893D710099407F0C89407F 00993F780C893F780099417C0C89417C 0099407800247F00317F0C2650018926 5003992651018926510399264B018926 4B0399264B0189264B03992656018926 56039926500189265003992651018926 510399264E0189264E03992650018926 50039926530189265303992656018926 5603992658018926580399265D018926 5D0399265F0189265F03992652018926 5203992655018926550399264F018926 4F039926570189265703992657018926 57039926540189265403992654018926 54039926540189265403992653018926 53039926570189265703992654018926 5403992653018926530399264C018926 4C03992650018926500399264F018926 4F039926520189265203992659018926 5903992664018926640399266C018926 6C03992679018926790399267C018926 7C07407800247F00317F0099247D0048 6B00267D0A89247D02486B00267D0099 486800276500247A0A89247A02486800 27650099247800267B0046660A892478 02267B00466600994663002772002475 0A8924750246630027720099247F0026 7B00486D0A89247F02267B00486D0099 486800277400247A0A89247A02486800 27740099247000267700485E0A892470 02267700485E00994866002478002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A486600 2671009927650C8927650099267D0048 6B00247D0A89247D02267D00486B0099 276500247A0048680A89247A02276500 48680099267B0046660024780A892478 02267B00466600992772002475004663 0A8924750227720046630099267B0048 6D00247F0A89247F02267B00486D0099 277400247A0048680A89247A02277400 48680099267700485E0024700A892470 02267700485E00992478004866002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A009926710C89267100992765 018924780B48660027650099247D004B 6B00267D0A89247D024B6B00267D0099 4B6800276500247A0A89247A024B6800 27650099247800496600267B0A892478 02496600267B00994963002475002772 0A8924750249630027720099247F0026 7B004B6D0A89247F02267B004B6D0099 4B6800247A0027740A89247A024B6800 277400992470004B5E0026770A892470 024B5E00267700992776002478004B66 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A4B6600 2671009927650C8927650099247D004B 6B00267D0A89247D024B6B00267D0099 4B6800276500247A0A89247A024B6800 27650099247800267B0049660A892478 02267B00496600994963002475002772 0A8924750249630027720099247F0026 7B004B6D0A89247F02267B004B6D0099 4B6800277400247A0A89247A024B6800 277400992677004B5E0024700A892470 022677004B5E00992478002776004B66 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A4B6600 2671009927650C8927650099486B0026 7D00247D0A89247D02486B00267D0099 247A0027650048680A89247A02276500 48680099466600247800267B0A892478 02466600267B00992475002772004663 0A8924750227720046630099486D0026 7B00247F0A89247F02486D00267B0099 277400247A0048680A89247A02277400 48680099267700247000485E0A892470 02267700485E00994866002776002478 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A486600 2671009927650C8927650099267D0024 7D00486B0A89247D02267D00486B0099 276500486800247A0A89247A02276500 48680099267B0024780046660A892478 02267B00466600992475002772004663 0A8924750227720046630099267B0024 7F00486D0A89247F02267B00486D0099 247A0048680027740A89247A02486800 27740099267700485E0024700A892470 02267700485E00994866002776002478 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A009926710C89267100992765 018924780B48660027650099247D0026 7D004B6B0A89247D02267D004B6B0099 4B6800276500247A0A89247A024B6800 27650099247800267B0049660A892478 02267B00496600992475004963002772 0A89247502496300277200994B6D0024 7F00267B0A89247F024B6D00267B0099 4B6800247A0027740A89247A024B6800 277400992470002677004B5E0A892470 022677004B5E00994B66002478002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A4B6600 2671009927650C89276500994B6B0024 7D00267D0A89247D024B6B00267D0099 247A004B680027650A89247A024B6800 27650099496600247800267B0A892478 02496600267B00992772002475004963 0A8924750227720049630099267B0024 7F004B6D0A89247F02267B004B6D0099 4B6800277400247A0A89247A024B6800 277400994B5E0024700026770A892470 024B5E00267700994B66002776002478 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A4B6600 2671009927650C8927650099247D0026 7D0040660A89247D02267D0040660099 406200276500247A0A89247A02406200 276500992478003F6600267B0A892478 023F6600267B00993F61002772002475 0A892475023F610027720099267B0041 6800247F0A89247F02267B0041680099 277400247A0041640A89247A02277400 4164009926770040660024700A892470 0226770040660099277600406200247D 0A89247D0227760040620099266F0024 7A0042630A89247A02266F0042630099 27610024780042610A89247802276100 42610099267B0024750041620A892475 02267B0041620099415C00276300247F 0A89247F02415C002763009924750026 7D0044660A89247502267D0044660099 446300247F00276A0A89247F02446300 276A0099267100247A0043640A89247A 0226710043640099276500247000435C 0A89247002276500435C009940600024 7D00267D0A89247D02406000267D0099 247A0040600027650A89247A02406000 276500993F6300267B0024780A892478 023F6300267B00992475003F5B002772 0A892475023F5B0027720099247F0041 6400267B0A89247F02416400267B0099 247A00415C0027740A89247A02415C00 2774009940660024700026770A892470 0240660026770099406000247D002776 0A89247D0240600027760099266F0024 7A0042630A89247A02266F0042630099 42630024780027610A89247802426300 27610099247500416200267B0A892475 02416200267B0099416000247F002763 0A89247F0241600027630099267D0044 610024750A89247502267D0044610099 247F00276A0044660A89247F02276A00 44660099436800267100247A0A89247A 0243680026710099436A002470002765 0A89247002436A0027650099247D0046 5F00267D0A89247D02465F00267D0099 465F00247A0027650A89247A02465F00 27650099456800247800267B0A892478 02456800267B00992772004562002475 0A8924750227720045620099267B0044 6300247F0A89247F02267B0044630099 446100247A0027740A89247A02446100 27740099267700436A0024700A892470 02267700436A0099436000247D002776 0A89247D0243600027760099247A0044 6D00266F0A89247A02446D00266F0099 247800276100445F0A89247802276100 445F0099436800267B0024750A892475 02436800267B0099247F002763004366 0A89247F0227630043660099267D0042 5F0024750A89247502267D00425F0099 247F00425D00276A0A89247F02425D00 276A0099247A00415E0026710A89247A 02415E00267100992470002765004154 0A892470022765004154009946630026 7D00247D0A89247D02466300267D0099 276500247A0046660A89247A02276500 46660099267B0045600024780A892478 02267B0045600099247500455A002772 0A89247502455A0027720099267B0044 6600247F0A89247F02267B0044660099 247A0027740044610A89247A02277400 4461009943660026770024700A892470 0243660026770099247D00277600435E 0A89247D02277600435E0099446D0026 6F00247A0A89247A02446D00266F0099 24780044630027610A89247802446300 27610099436800247500267B0A892475 02436800267B0099436600247F002763 0A89247F024366002763009942630024 7500267D0A89247502426300267D0099 247F00426100276A0A89247F02426100 276A0099267100416000247A0A89247A 0226710041600099415E002470002765 0A89247002415E0027650099247D0026 7D00486B0A89247D02267D00486B0099 486800276500247A0A89247A02486800 27650099247800267B0046660A892478 02267B00466600994663002475002772 0A8924750246630027720099247F0026 7B00486D0A89247F02267B00486D0099 486800247A0027740A89247A02486800 27740099247000485E0026770A892470 02485E00267700994866002478002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A486600 2671009927650C8927650099486B0024 7D00267D0A89247D02486B00267D0099 486800247A0027650A89247A02486800 27650099247800267B0046660A892478 02267B00466600994663002772002475 0A8924750246630027720099247F0048 6D00267B0A89247F02486D00267B0099 486800247A0027740A89247A02486800 27740099247000485E0026770A892470 02485E00267700994866002478002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A009926710C89267100992765 018924780B48660027650099247D004B 6B00267D0A89247D024B6B00267D0099 2765004B6800247A0A89247A02276500 4B680099247800267B0049660A892478 02267B00496600994963002772002475 0A89247502496300277200994B6D0026 7B00247F0A89247F024B6D00267B0099 277400247A004B680A89247A02277400 4B6800992677004B5E0024700A892470 022677004B5E00992478004B66002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A4B6600 2671009927650C8927650099247D004B 6B00267D0A89247D024B6B00267D0099 4B6800247A0027650A89247A024B6800 27650099247800267B0049660A892478 02267B00496600994963002772002475 0A8924750249630027720099247F004B 6D00267B0A89247F024B6D00267B0099 4B6800247A0027740A89247A024B6800 277400992470004B5E0026770A892470 024B5E00267700992478004B66002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A4B6600 2671009927650C8927650099267D0048 6B00247D0A89247D02267D00486B0099 486800247A0027650A89247A02486800 27650099267B0046660024780A892478 02267B00466600992772002475004663 0A8924750227720046630099267B0048 6D00247F0A89247F02267B00486D0099 486800247A0027740A89247A02486800 27740099267700485E0024700A892470 02267700485E00994866002776002478 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A486600 2671009927650C8927650099247D0048 6B00267D0A89247D02486B00267D0099 276500486800247A0A89247A02276500 48680099466600247800267B0A892478 02466600267B00992772004663002475 0A8924750227720046630099247F0026 7B00486D0A89247F02267B00486D0099 247A0048680027740A89247A02486800 27740099485E0024700026770A892470 02485E00267700994866002478002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A009926710C89267100992765 018924780B48660027650099267D0024 7D004B6B0A89247D02267D004B6B0099 4B6800247A0027650A89247A024B6800 27650099247800496600267B0A892478 02496600267B00992772004963002475 0A8924750227720049630099267B004B 6D00247F0A89247F02267B004B6D0099 4B6800247A0027740A89247A024B6800 277400992470004B5E0026770A892470 024B5E00267700994B66002478002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A4B6600 2671009927650C8927650099247D004B 6B00267D0A89247D024B6B00267D0099 4B6800276500247A0A89247A024B6800 27650099496600247800267B0A892478 02496600267B00994963002772002475 0A8924750249630027720099247F004B 6D00267B0A89247F024B6D00267B0099 4B6800247A0027740A89247A024B6800 277400992470004B5E0026770A892470 024B5E00267700992478004B66002776 0C8927760099266F0C89266F00992761 0C8927610099267B0C89267B00992763 0C8927630099267D0C89267D0099276A 0C89276A00992671028924780A4B6600 2671009927650C892765009940660026 7D00247D0A89247D02406600267D0099 406200276500247A0A89247A02406200 27650099247800267B003F660A892478 02267B003F6600993F61002772002475 0A892475023F610027720099247F0026 7B0041680A89247F02267B0041680099 277400416400247A0A89247A02277400 4164009926770024700040660A892470 0226770040660099247D002776004062 0A89247D022776004062009942630024 7A00266F0A89247A02426300266F0099 24780027610042610A89247802276100 42610099267B0024750041620A892475 02267B0041620099247F00276300415C 0A89247F02276300415C009944660026 7D0024750A89247502446600267D0099 247F00276A0044630A89247F02276A00 44630099436400267100247A0A89247A 0243640026710099276500247000435C 0A89247002276500435C0099247D0026 7D0040600A89247D02267D0040600099 406000247A0027650A89247A02406000 276500993F6300247800267B0A892478 023F6300267B00992772002475003F5B 0A892475022772003F5B0099247F0026 7B0041640A89247F02267B0041640099 277400415C00247A0A89247A02277400 415C009924700026770040660A892470 0226770040660099277600406000247D 0A89247D022776004060009942630026 6F00247A0A89247A02426300266F0099 27610042630024780A89247802276100 42630099247500267B0041620A892475 02267B0041620099276300416000247F 0A89247F0227630041600099267D0044 610024750A89247502267D0044610099 247F00276A0044660A89247F02276A00 44660099267100436800247A0A89247A 0226710043680099247000276500436A 0A89247002276500436A0099445F0024 7D00267D0A89247D02445F00267D0099 247A00445F0027650A89247A02445F00 27650099436800247800267B0A892478 02436800267B00994362002475002772 0A892475024362002772009942630024 7F00267B0A89247F02426300267B0099 277400247A0042610A89247A02277400 42610099247000416A0026770A892470 02416A0026770099247D004160002776 0A89247D0241600027760099426D0024 7A00266F0A89247A02426D00266F0099 247800425F0027610A89247802425F00 27610099416800247500267B0A892475 02416800267B0099416600247F002763 0A89247F024166002763009924750040 5F00267D0A89247502405F00267D0099 405D00247F00276A0A89247F02405D00 276A00993F5E00247A0026710A89247A 023F5E00267100993F54002765002470 0A892470023F540027650099267D0044 6300247D0A89247D02267D0044630099 276500446600247A0A89247A02276500 44660099267B0024780043600A892478 02267B0043600099435A002772002475 0A89247502435A0027720099267B0024 7F0042660A89247F02267B0042660099 426100247A0027740A89247A02426100 2774009924700041660026770A892470 0241660026770099415E00247D002776 0A89247D02415E0027760099426D0024 7A00266F0A89247A02426D00266F0099 24780042630027610A89247802426300 27610099247500416800267B0A892475 02416800267B0099416600247F002763 0A89247F024166002763009940630024 7500267D0A89247502406300267D0099 406100247F00276A0A89247F02406100 276A0099247A003F600026710A89247A 023F6000267100993F5E002470002765 0A892470023F5E00276500FF2F004D54 726B0000059500BA650000640000060C 0026000068008758000000200000CA0A 00BA0A00000750009A4362003D5B06BA 075A06076406076B0607720607760607 7A06077D06077E06077F24077E06077D 06077C06077A06077806077606077206 077006076C06076A0607680607640607 6006075C060759060756060752068A43 62003D5B00BA0750009A445B003E5606 BA075A06076406076B06077206077606 077A06077D06077E06077F24077E0607 7D06077C06077A060778060776060772 06077006076C06076A06076806076406 076006075C060759060756060752068A 445B003E5600BA0750009A3F5700455A 06BA075A06076406076B060772060776 06077A06077D06077E06077F24077E06 077D06077C06077A0607780607760607 7206077006076C06076A060768060764 06076006075C06075906075606075206 8A3F5700455A00BA0750009A3E5E0044 5706BA075A06076406076B0607720607 7606077A06077D06077E06077F24077E 06077D06077C06077A06077806077606 077206077006076C06076A0607680607 6406076006075C060759060756060752 068A3E5E00445700BA077E009A465700 404A608A465700404A009A3F4A004557 608A3F4A004557009A414A004757608A 414A004757009A404A004657608A404A 004657009A424A004857608A424A0048 57009A414A004757608A414A00475700 9A495700434A608A495700434A009A48 5700424A608A485700424A00BA075000 9A4457003E5606BA075A06076406076B 06077206077606077A06077D06077E06 077F24077E06077D06077C06077A0607 7806077606077206077006076C06076A 06076806076406076006075C06075906 0756060752068A4457003E5600BA0750 009A4558003F5106BA075A0607640607 6B06077206077606077A06077D06077E 06077F24077E06077D06077C06077A06 077806077606077206077006076C0607 6A06076806076406076006075C060759 060756060752068A4558003F5100BA07 50009A3E5C00445706BA075A06076406 076B06077206077606077A06077D0607 7E06077F24077E06077D06077C06077A 06077806077606077206077006076C06 076A06076806076406076006075C0607 59060756060752068A3E5C00445700BA 0750009A4362003D5B06BA075A060764 06076B06077206077606077A06077D06 077E06077F24077E06077D06077C0607 7A06077806077606077206077006076C 06076A06076806076406076006075C06 0759060756060752068A4362003D5B00 BA0750009A3E5600445B06BA075A0607 6406076B06077206077606077A06077D 06077E06077F24077E06077D06077C06 077A0607780607760607720607700607 6C06076A06076806076406076006075C 060759060756060752068A3E5600445B 00BA0750009A455A003F5706BA075A06 076406076B06077206077606077A0607 7D06077E06077F24077E06077D06077C 06077A06077806077606077206077006 076C06076A0607680607640607600607 5C060759060756060752068A455A003F 5700BA0750009A3E5E00445706BA075A 06076406076B06077206077606077A06 077D06077E06077F24077E06077D0607 7C06077A060778060776060772060770 06076C06076A06076806076406076006 075C060759060756060752068A3E5E00 445700BA0750009A413B00475806BA07 5A06076406076B06077206077606077A 06077D06077E06077F24077E06077D06 077C06077A0607780607760607720607 7006076C06076A060768060764060760 06075C060759060756060752068A413B 00475800BA077E009A404A004657608A 404A004657009A4557003F4A608A4557 003F4A009A475700414A608A47570041 4A009A404A004657608A404A00465700 9A485700424A608A485700424A009A47 5700414A608A475700414A009A495700 434A608A495700434A009A424A004857 608A424A00485700FF2F004D54726B00 0004E900BB650000640000060C002600 0068008758000000200000CB0B00BB0A 7F000750009B2B6206BB075A06076406 076B06077206077606077A06077D0607 7E06077F24077E06077D06077C06077A 06077806077606077206077006076C06 076A06076806076406076006075C0607 59060756060752068B2B6200BB075000 9B2C5B06BB075A06076406076B060772 06077606077A06077D06077E06077F24 077E06077D06077C06077A0607780607 7606077206077006076C06076A060768 06076406076006075C06075906075606 0752068B2C5B00BB0750009B2D5A06BB 075A06076406076B0607720607760607 7A06077D06077E06077F24077E06077D 06077C06077A06077806077606077206 077006076C06076A0607680607640607 6006075C060759060756060752068B2D 5A00BB0750009B2C5706BB075A060764 06076B06077206077606077A06077D06 077E06077F24077E06077D06077C0607 7A06077806077606077206077006076C 06076A06076806076406076006075C06 0759060756060752068B2C5700BB077E 009B2E57608B2E57009B2D57608B2D57 009B2F57608B2F57009B2E57608B2E57 009B3057608B3057009B2F57608B2F57 009B3157608B3157009B3057608B3057 00BB0750009B2C5706BB075A06076406 076B06077206077606077A06077D0607 7E06077F24077E06077D06077C06077A 06077806077606077206077006076C06 076A06076806076406076006075C0607 59060756060752068B2C5700BB075000 9B2D5806BB075A06076406076B060772 06077606077A06077D06077E06077F24 077E06077D06077C06077A0607780607 7606077206077006076C06076A060768 06076406076006075C06075906075606 0752068B2D5800BB0750009B2C5706BB 075A06076406076B0607720607760607 7A06077D06077E06077F24077E06077D 06077C06077A06077806077606077206 077006076C06076A0607680607640607 6006075C060759060756060752068B2C 5700BB0750009B2B6206BB075A060764 06076B06077206077606077A06077D06 077E06077F24077E06077D06077C0607 7A06077806077606077206077006076C 06076A06076806076406076006075C06 0759060756060752068B2B6200BB0750 009B2C5B06BB075A06076406076B0607 7206077606077A06077D06077E06077F 24077E06077D06077C06077A06077806 077606077206077006076C06076A0607 6806076406076006075C060759060756 060752068B2C5B00BB0750009B2D5A06 BB075A06076406076B06077206077606 077A06077D06077E06077F24077E0607 7D06077C06077A060778060776060772 06077006076C06076A06076806076406 076006075C060759060756060752068B 2D5A00BB0750009B2C5706BB075A0607 6406076B06077206077606077A06077D 06077E06077F24077E06077D06077C06 077A0607780607760607720607700607 6C06076A06076806076406076006075C 060759060756060752068B2C5700BB07 50009B2F5806BB075A06076406076B06 077206077606077A06077D06077E0607 7F24077E06077D06077C06077A060778 06077606077206077006076C06076A06 076806076406076006075C0607590607 56060752068B2F58009B2E57608B2E57 009B2D57608B2D57009B2F57608B2F57 009B2E57608B2E57009B3057608B3057 009B2F57608B2F57009B3157608B3157 009B3057608B305700FF2F004D54726B 0000000400FF2F004D54726B00000C22 00BD650000640000060C002600006800 8158000000200000CD0D00BD0A3A009D 247B0B8D247B019D24780B8D2478019D 22760B8D2276019D22730B8D2273019D 247D0B8D247D019D24780B8D2478019D 246E0B8D246E019D24760B8D2476019D 246D0B8D246D019D24680B8D2468019D 245E0B8D245E019D24660B8D2466019D 244B0B8D244B019D24460B8D2446019D 243C0B8D243C019D24440B8D2444019D 247B0B8D247B019D24780B8D2478019D 22760B8D2276019D22730B8D2273019D 247D0B8D247D019D24780B8D2478019D 246E0B8D246E019D24760B8D2476019D 246D0B8D246D019D24680B8D2468019D 245E0B8D245E019D24660B8D2466019D 244B0B8D244B019D24460B8D2446019D 243C0B8D243C019D24440B8D2444019D 277B0B8D277B019D27780B8D2778019D 25760B8D2576019D25730B8D2573019D 277D0B8D277D019D27780B8D2778019D 276E0B8D276E019D27760B8D2776019D 276D0B8D276D019D27680B8D2768019D 275E0B8D275E019D27660B8D2766019D 274B0B8D274B019D27460B8D2746019D 273C0B8D273C019D27440B8D2744019D 277B0B8D277B019D27780B8D2778019D 25760B8D2576019D25730B8D2573019D 277D0B8D277D019D27780B8D2778019D 276E0B8D276E019D27760B8D2776019D 276D0B8D276D019D27680B8D2768019D 275E0B8D275E019D27660B8D2766019D 274B0B8D274B019D27460B8D2746019D 273C0B8D273C019D27440B8D2744019D 247B0B8D247B019D24780B8D2478019D 22760B8D2276019D22730B8D2273019D 247D0B8D247D019D24780B8D2478019D 246E0B8D246E019D24760B8D2476019D 246D0B8D246D019D24680B8D2468019D 245E0B8D245E019D24660B8D2466019D 244B0B8D244B019D24460B8D2446019D 243C0B8D243C019D24440B8D2444019D 247B0B8D247B019D24780B8D2478019D 22760B8D2276019D22730B8D2273019D 247D0B8D247D019D24780B8D2478019D 246E0B8D246E019D24760B8D2476019D 246D0B8D246D019D24680B8D2468019D 245E0B8D245E019D24660B8D2466019D 244B0B8D244B019D24460B8D2446019D 243C0B8D243C019D24440B8D2444019D 277B0B8D277B019D27780B8D2778019D 25760B8D2576019D25730B8D2573019D 277D0B8D277D019D27780B8D2778019D 276E0B8D276E019D27760B8D2776019D 276D0B8D276D019D27680B8D2768019D 275E0B8D275E019D27660B8D2766019D 274B0B8D274B019D27460B8D2746019D 273C0B8D273C019D27440B8D2744019D 277B0B8D277B019D27780B8D2778019D 25760B8D2576019D25730B8D2573019D 277D0B8D277D019D27780B8D2778019D 276E0B8D276E019D27760B8D2776019D 276D0B8D276D019D27680B8D2768019D 275E0B8D275E019D27660B8D2766019D 274B0B8D274B019D27460B8D2746019D 273C0B8D273C019D27440B8D2744019D 28660C8D2866009D28620C8D2862009D 27660C8D2766009D27610C8D2761009D 29680C8D2968009D29640C8D2964009D 28660C8D2866009D28620C8D2862009D 2A630C8D2A63009D2A610C8D2A61009D 29620C8D2962009D295C0C8D295C009D 2C660C8D2C66009D2C630C8D2C63009D 2B640C8D2B64009D2B5C0C8D2B5C009D 28600C8D2860009D28600C8D2860009D 27630C8D2763009D275B0C8D275B009D 29640C8D2964009D295C0C8D295C009D 28660C8D2866009D28600C8D2860009D 2A630C8D2A63009D2A630C8D2A63009D 29620C8D2962009D29600C8D2960009D 2C610C8D2C61009D2C660C8D2C66009D 2B680C8D2B68009D2B6A0C8D2B6A009D 2C5F0C8D2C5F009D2C5F0C8D2C5F009D 2B680C8D2B68009D2B620C8D2B62009D 2A630C8D2A63009D2A610C8D2A61009D 296A0C8D296A009D29600C8D2960009D 2A6D0C8D2A6D009D2A5F0C8D2A5F009D 29680C8D2968009D29660C8D2966009D 285F0C8D285F009D285D0C8D285D009D 275E0C8D275E009D27540C8D2754009D 2C630C8D2C63009D2C660C8D2C66009D 2B600C8D2B60009D2B5A0C8D2B5A009D 2A660C8D2A66009D2A610C8D2A61009D 29660C8D2966009D295E0C8D295E009D 2A6D0C8D2A6D009D2A630C8D2A63009D 29680C8D2968009D29660C8D2966009D 28630C8D2863009D28610C8D2861009D 27600C8D2760009D275E0C8D275E009D 247B0B8D247B019D24780B8D2478019D 22760B8D2276019D22730B8D2273019D 247D0B8D247D019D24780B8D2478019D 246E0B8D246E019D24760B8D2476019D 246D0B8D246D019D24680B8D2468019D 245E0B8D245E019D24660B8D2466019D 244B0B8D244B019D24460B8D2446019D 243C0B8D243C019D24440B8D2444019D 247B0B8D247B019D24780B8D2478019D 22760B8D2276019D22730B8D2273019D 247D0B8D247D019D24780B8D2478019D 246E0B8D246E019D24760B8D2476019D 246D0B8D246D019D24680B8D2468019D 245E0B8D245E019D24660B8D2466019D 244B0B8D244B019D24460B8D2446019D 243C0B8D243C019D24440B8D2444019D 277B0B8D277B019D27780B8D2778019D 25760B8D2576019D25730B8D2573019D 277D0B8D277D019D27780B8D2778019D 276E0B8D276E019D27760B8D2776019D 276D0B8D276D019D27680B8D2768019D 275E0B8D275E019D27660B8D2766019D 274B0B8D274B019D27460B8D2746019D 273C0B8D273C019D27440B8D2744019D 277B0B8D277B019D27780B8D2778019D 25760B8D2576019D25730B8D2573019D 277D0B8D277D019D27780B8D2778019D 276E0B8D276E019D27760B8D2776019D 276D0B8D276D019D27680B8D2768019D 275E0B8D275E019D27660B8D2766019D 274B0B8D274B019D27460B8D2746019D 273C0B8D273C019D27440B8D2744019D 247B0B8D247B019D24780B8D2478019D 22760B8D2276019D22730B8D2273019D 247D0B8D247D019D24780B8D2478019D 246E0B8D246E019D24760B8D2476019D 246D0B8D246D019D24680B8D2468019D 245E0B8D245E019D24660B8D2466019D 244B0B8D244B019D24460B8D2446019D 243C0B8D243C019D24440B8D2444019D 247B0B8D247B019D24780B8D2478019D 22760B8D2276019D22730B8D2273019D 247D0B8D247D019D24780B8D2478019D 246E0B8D246E019D24760B8D2476019D 246D0B8D246D019D24680B8D2468019D 245E0B8D245E019D24660B8D2466019D 244B0B8D244B019D24460B8D2446019D 243C0B8D243C019D24440B8D2444019D 277B0B8D277B019D27780B8D2778019D 25760B8D2576019D25730B8D2573019D 277D0B8D277D019D27780B8D2778019D 276E0B8D276E019D27760B8D2776019D 276D0B8D276D019D27680B8D2768019D 275E0B8D275E019D27660B8D2766019D 274B0B8D274B019D27460B8D2746019D 273C0B8D273C019D27440B8D2744019D 277B0B8D277B019D27780B8D2778019D 25760B8D2576019D25730B8D2573019D 277D0B8D277D019D27780B8D2778019D 276E0B8D276E019D27760B8D2776019D 276D0B8D276D019D27680B8D2768019D 275E0B8D275E019D27660B8D2766019D 274B0B8D274B019D27460B8D2746019D 273C0B8D273C019D27440B8D2744019D 28660C8D2866009D28620C8D2862009D 27660C8D2766009D27610C8D2761009D 29680C8D2968009D29640C8D2964009D 28660C8D2866009D28620C8D2862009D 2A630C8D2A63009D2A610C8D2A61009D 29620C8D2962009D295C0C8D295C009D 2C660C8D2C66009D2C630C8D2C63009D 2B640C8D2B64009D2B5C0C8D2B5C009D 28600C8D2860009D28600C8D2860009D 27630C8D2763009D275B0C8D275B009D 29640C8D2964009D295C0C8D295C009D 28660C8D2866009D28600C8D2860009D 2A630C8D2A63009D2A630C8D2A63009D 29620C8D2962009D29600C8D2960009D 2C610C8D2C61009D2C660C8D2C66009D 2B680C8D2B68009D2B6A0C8D2B6A009D 2C5F0C8D2C5F009D2C5F0C8D2C5F009D 2B680C8D2B68009D2B620C8D2B62009D 2A630C8D2A63009D2A610C8D2A61009D 296A0C8D296A009D29600C8D2960009D 2A6D0C8D2A6D009D2A5F0C8D2A5F009D 29680C8D2968009D29660C8D2966009D 285F0C8D285F009D285D0C8D285D009D 275E0C8D275E009D27540C8D2754009D 2C630C8D2C63009D2C660C8D2C66009D 2B600C8D2B60009D2B5A0C8D2B5A009D 2A660C8D2A66009D2A610C8D2A61009D 29660C8D2966009D295E0C8D295E009D 2A6D0C8D2A6D009D2A630C8D2A63009D 29680C8D2968009D29660C8D2966009D 28630C8D2863009D28610C8D2861009D 27600C8D2760009D275E0C8D275E00FF 2F00