; --------------------------------------------------------------------------- ; enum Status2_Enum (bitfield) (width 8 bytes) Bit0: equ 1 PS: equ 2 AC: equ 4 PN: equ 8 IDLE: equ $10 ; --------------------------------------------------------------------------- ; enum Status1_Enum (bitfield) (width 8 bytes) Rich_Lean: equ 1 EGR_On: equ 2 PRG_ON: equ 4 ; --------------------------------------------------------------------------- ; enum TSCR1_enum (bitfield) (width 8 bytes) OLVL1: equ 1 IEDG1: equ 2 ETOI1: equ 4 EOCI1: equ 8 EICI1: equ $10 TOF1: equ $20 OCF1: equ $40 ICF1: equ $80 ; ; +-------------------------------------------------------------------------+ ; | This file has been generated by The Interactive Disassembler (IDA) | ; | Copyright (c) 2009 by Hex-Rays, | ; | License info: 54-F19A-B286-08 | ; | James Holland | ; +-------------------------------------------------------------------------+ ; ; Input MD5 : 781B9189EF502F5DA983B43293CCBB2A ; File Name : C:\Users\James\Documents\57B30\MG2130.bin ; Format : Binary file ; Base Address: 0000h Range: 8000h - 10000h Loaded length: 8000h ; Processor: 6301 [] ; Target assembler: Motorola FreeWare Assembler ; =========================================================================== ; Segment type: Regular ; segment RAM P1DDR: rmb 1 ; DATA XREF: ROM:C701w sub_C820+CAw P2DDR: rmb 1 PORT1: rmb 1 ; DATA XREF: ROM:C6FCw ROM:C7DDr ... PORT2: rmb 1 ; DATA XREF: sub_D96E+4r P3DDR: rmb 1 P4DDR: rmb 1 ; DATA XREF: ROM:C73Fw sub_C820+EDw PORT3: rmb 1 PORT4: rmb 1 TCSR1: rmb 1 ; DATA XREF: ROM:C6E7w sub_C820r ... FRCH: rmb 1 ; DATA XREF: sub_C820+2r sub_C820+70r ... FRCL: rmb 1 OCR1H: rmb 1 ; DATA XREF: sub_C820+7w sub_C820+72w ... OCR1L: rmb 1 ICRH: rmb 1 ; DATA XREF: sub_C820+6Er ICRL: rmb 1 P3CSR: rmb 1 ; DATA XREF: sub_C820+CEw RMCR: rmb 1 ; DATA XREF: ROM:C70Bw sub_CF12+Aw TRCSR1: rmb 1 ; DATA XREF: ROM:C7E0r sub_C820+Er ... RDR: rmb 1 ; DATA XREF: ROM:C7E2r sub_C820+AFr TDR: rmb 1 ; DATA XREF: ADC_CC1B+60w ; SCI_INT_HNDLR+22w RAMCR: rmb 1 ; DATA XREF: ROM:C6DEr ROM:C741r ... rmb 1 rmb 1 rmb 1 byte_18 Timer Control Register bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 - OC enable for 1B byte_18: rmb 1 ; DATA XREF: ROM:C6EBw sub_C820+74r ... ; timer control? byte_19: rmb 1 ; DATA XREF: sub_C820+78r sub_C820+92r ... rmb 1 byte_1B: rmb 1 ; DATA XREF: sub_C820+7Aw sub_D5A3+30w ... ; Output Compare Register rmb 1 byte_1D: rmb 1 ; DATA XREF: sub_C820+76r ; CAS_INT_HNDLR:IC1_INT_HDLRr ... rmb 1 byte_1F: rmb 1 ; DATA XREF: ROM:C6E3w sub_C820+F9w byte_20: rmb 1 ; DATA XREF: ROM:C6F3w sub_C820+104r ... byte_21: rmb 1 ; DATA XREF: Parse_SDL_Msg+7r ; sub_D818+13Cr ... rmb 1 byte_23: rmb 1 ; DATA XREF: sub_C820+8Bw sub_E18B+Ar ... rmb 1 byte_25: rmb 1 ; DATA XREF: sub_C820+B2w ; ROM:loc_D75Fw ... byte_26: rmb 1 ; DATA XREF: ROM:C706w sub_C820+F1w ... byte_27: rmb 1 ; DATA XREF: sub_C820+F5w byte_28: rmb 1 ; DATA XREF: ROM:C6F7w sub_C820+8Dr ... byte_29: rmb 1 ; DATA XREF: sub_EA6E+19r sub_EA6E+3Br rmb 1 byte_2B: rmb 1 ; DATA XREF: sub_C820+95w sub_C820+A4r ... rmb 1 byte_2D: rmb 1 ; DATA XREF: sub_C820:loc_C8A4r ; sub_C820+A9r ... byte_2E: rmb 1 ; DATA XREF: ROM:C6EFw rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 byte_40: rmb 1 ; DATA XREF: ROM:CFC6w ROM:CFCBr ... byte_41: rmb 1 ; DATA XREF: ROM:D018r sub_D44A+1Ew ... byte_42: rmb 1 ; DATA XREF: sub_D354+59w sub_D354+7Cr ... rmb 1 byte_44: rmb 1 ; DATA XREF: sub_CF25+23w sub_CF25+2Fr ... RICH_COUNT?: rmb 1 ; DATA XREF: sub_CF25+2Dw ; sub_D354:loc_D366w ... byte_46: rmb 1 ; DATA XREF: sub_CF25+29w sub_CF25+39r ... byte_47: rmb 1 ; DATA XREF: sub_F08B+4r sub_F08B+10w ... byte_48: rmb 1 ; DATA XREF: sub_F245+1Bw sub_F245+22r ... rmb 1 byte_4A: rmb 1 ; DATA XREF: SCI_INT_HNDLR:loc_CCB6w ; SCI_INT_HNDLR+3Dr ... byte_4B: rmb 1 ; DATA XREF: sub_E18B+27r byte_4C: rmb 1 ; DATA XREF: sub_D818+8Bw sub_D818+96r ... rmb 1 byte_4E: rmb 1 ; DATA XREF: sub_C820+12Dr ; sub_C820+150r ... byte_4F: rmb 1 ; DATA XREF: sub_C820+C2w sub_CC0A+Ar ... byte_50: rmb 1 ; DATA XREF: ROM:C7E6w ROM:C7ECw ... byte_51: rmb 1 ; DATA XREF: ADC_CC1B+5Aw ; SCI_INT_HNDLR:ADC_HDLRr byte_52: rmb 1 ; DATA XREF: SCI_INT_HNDLR+45w ; sub_CF12r ... SCI_STATUS_53: rmb 1 ; DATA XREF: sub_C820+19w sub_CC0Ar ... byte_54: rmb 1 ; DATA XREF: SCI_INT_HNDLR+1Ew ; SCI_INT_HNDLR+3Br IAT_Raw: rmb 1 ; DATA XREF: AIN4_IAT:loc_CD51w ; sub_D6CE:loc_D6DFr WTS_Raw: rmb 1 ; DATA XREF: AIN5_WTS:loc_CDB2w ; sub_D6CEr TPSV?: rmb 1 ; DATA XREF: AIN7_TPS:loc_CE5Fr ; AIN7_TPS+60w ... AFM: rmb 1 ; DATA XREF: AIN1_AFM:loc_CEF8r ; AIN1_AFM:loc_CEFBw ... rmb 1 STATUS_5A bit7 - Idle Sw bit6 bit5 bit4 bit3 bit2 bit1 - AC SW bit0 STATUS_5A: rmb 1 ; DATA XREF: sub_C820+35w ROM:CFDCr ... STATUS_5B bit7 bit6 bit5 bit4 bit3 - PS Switch bit2 bit1 bit0 STATUS_5B: rmb 1 ; DATA XREF: AIN1_AFM+8Aw ; SETUP_DIAG:loc_D32Dr ... byte_5C: rmb 1 ; DATA XREF: sub_C820+11Dr ; sub_C820+125r ... byte_5D: rmb 1 ; DATA XREF: sub_C820+187r ; sub_C820:loc_C9AEw ... byte_5E: rmb 1 ; DATA XREF: sub_C820+1C6r ; sub_C820+1C9w ... O2S_Volts: rmb 1 ; DATA XREF: AIN3_O2S:loc_CF0Fw ; sub_D354+14r ... BATTV: rmb 1 ; DATA XREF: AIN0_BATTVw BATTV_CORR1r ... WTS: rmb 1 ; DATA XREF: sub_D401+5r sub_D6CE+8w ... IAT: rmb 1 ; DATA XREF: sub_D6CE+19w sub_D6CE+1Br ... TPSA: rmb 1 ; DATA XREF: sub_D44A:loc_D475w ; sub_D44A+93r ... byte_64: rmb 1 ; DATA XREF: ROM:C780w sub_D281+4Fr ... WTS_SH: rmb 1 ; DATA XREF: sub_D6CE+Fw ; CALC_BYTE_9D+6Dr ... byte_66: rmb 1 ; DATA XREF: sub_D072+21w ROM:D18Fr byte_67: rmb 1 ; DATA XREF: ROM:D18Cw rmb 1 byte_69: rmb 1 ; DATA XREF: ROM:D194w ROM:D19Cr ... rmb 1 byte_6B: rmb 1 ; DATA XREF: ROM:loc_D1C3w sub_D1C6r ... rmb 1 byte_6D: rmb 1 ; DATA XREF: sub_D1C6+20w sub_D1C6+6Cw ... rmb 1 byte_6F: rmb 1 ; DATA XREF: sub_D1C6:loc_D1E2w ; sub_D1C6+4Ew ... rmb 1 byte_71: rmb 1 ; DATA XREF: sub_D1C6+1Ew sub_D1C6+5Dw ... rmb 1 byte_73: rmb 1 ; DATA XREF: sub_D1C6+22w ; sub_D1C6:loc_D246w ... byte_74: rmb 1 ; DATA XREF: sub_D1C6+25w ; sub_D1C6:loc_D25Aw ... byte_75: rmb 1 ; DATA XREF: sub_D1C6+9Bw ; CALC_LTFT_AFTr ... RPMH: rmb 1 ; DATA XREF: ROM:X_CF7Cr ROM:CF7Ew ... RPML: rmb 1 IFS_COUNT? - if clear IFS is OK bit7 bit6 bit5 bit4 bit3 - IFS OK bit2 bit1 bit0 IFS_COUNT: rmb 1 ; DATA XREF: ROM:C7B7w TEST_IFSr ... if CAS_COUNT = 0 then set CAS fault CAS_COUNT: rmb 1 ; DATA XREF: ROM:C788w sub_D79F+3Br ... byte_7A: rmb 1 ; DATA XREF: sub_D778+19w sub_D79F+1Dr ... IAT_COUNT?: rmb 1 ; DATA XREF: AIN4_IAT+Dw ; AIN4_IAT:loc_CD03r ... WTS_COUNT?: rmb 1 ; DATA XREF: AIN5_WTS+Dw ; AIN5_WTS:loc_CD64r ... TPS_COUNT?: rmb 1 ; DATA XREF: AIN7_TPS+Dw ; AIN7_TPS:loc_CE11r ... AFM_COUNT?: rmb 1 ; DATA XREF: AIN1_AFM+17w ; AIN1_AFM:loc_CE92r ... VSS: rmb 1 ; DATA XREF: IAT_CORR?r VSS_CALCS+11w byte_80: rmb 1 ; DATA XREF: ROM:CFB8w ROM:D052r ... byte_81: rmb 1 ; DATA XREF: ROM:CFC4r ROM:CFEBr ... byte_82: rmb 1 ; DATA XREF: ROM:loc_D046r ROM:D04Bw ... byte_83: rmb 1 ; DATA XREF: sub_D1C6+A4r sub_D1C6+ACw ... byte_84: rmb 1 ; DATA XREF: sub_D1C6+B3r sub_D1C6+B8w ... byte_85: rmb 1 ; DATA XREF: sub_D44A+9Br sub_D44A+B3w ... byte_86: rmb 1 ; DATA XREF: sub_D1C6+2Dr sub_D6CE+37r ... WTS?: rmb 1 ; DATA XREF: sub_D6CE+60r sub_D6CE+65w ... IAT?: rmb 1 ; DATA XREF: sub_D6CE+24r sub_D6CE+2Cw ... INT_FC0: rmb 1 ; DATA XREF: AIN4_IAT+5r AIN4_IAT+Ar ... FCodes0: rmb 1 ; DATA XREF: AIN4_IAT:loc_CD0Fr ; AIN4_IAT+26r ... FCodes1: rmb 1 ; DATA XREF: AIN1_AFM:loc_CE9Er ; AIN1_AFM:loc_CEC2r ... STATUS_8C bit7 bit6 bit5 bit4 bit3 - PN/D status bit2 bit1 bit0 STATUS_8C: rmb 1 ; DATA XREF: ROM:C77Cw sub_C820+130r ... STATUS_8D bit7 - bit6 - VSS timed out bit5 bit4 bit3 bit2 bit1 bit0 STATUS_8D: rmb 1 ; DATA XREF: SCI_JMP_15:loc_CDD6r ; SCI_JMP_15+24r ... byte_8E: rmb 1 ; DATA XREF: sub_C820+3Br ; SETUP_DIAG+4Ar ... byte_8F: rmb 1 ; DATA XREF: sub_D281+2Br sub_D281+30w ... STATUS_90 - Closed Loop Status bit7 bit6 bit5 bit4 bit3 bit2 bit1 bit0 - Rich/Lean Status STATUS_90: rmb 1 ; DATA XREF: ROM:C791w ROM:D05Br ... byte_91: rmb 1 ; DATA XREF: ROM:C795w sub_CBC3r ... byte_92: rmb 1 ; DATA XREF: sub_D818:loc_D8BBw ; sub_D818:loc_D8DDw ... byte_93: rmb 1 ; DATA XREF: sub_D818+71r sub_D818+EBr ... rmb 1 INJ_PW2: rmb 1 ; DATA XREF: SETUP_DIAG+18r ; sub_D818+36r ... ; Injector dead time rmb 1 byte_97: rmb 1 ; DATA XREF: ROM:D196r sub_DF16+13r ... byte_98: rmb 1 ; DATA XREF: CALC_BYTE_98:loc_DB14w ; CALC_BYTE_98:loc_DB18w ... byte_99: rmb 1 ; DATA XREF: sub_C820+58w ; CALC_BYTE_99:loc_DB4Fw ... byte_9A: rmb 1 ; DATA XREF: ROM:C7A1w ROM:loc_D00Aw ... byte_9B: rmb 1 ; DATA XREF: DEC_BYTE_9Br ; DEC_BYTE_9B:loc_DA6Dw ... byte_9C: rmb 1 ; DATA XREF: CALC_BYTE_9Cr ; CALC_BYTE_9C:loc_DA5Bw ... byte_9D: rmb 1 ; DATA XREF: ROM:C799w ; CALC_INJ_PW1_A6+12r ... STFT: rmb 1 ; DATA XREF: ROM:C79Bw ; CALC_LTFT_AFT+67r ... ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only rmb 1 LTFT: rmb 1 ; DATA XREF: ROM:C79Dw ; CALC_LTFT_AFT:loc_DC08w ... byte_A1: rmb 1 ; DATA XREF: ROM:C79Fw ; CALC_A1:loc_DBA8w ... byte_A2: rmb 1 ; DATA XREF: DEC_BYTE_A2r ; DEC_BYTE_A2:loc_DB26w ... byte_A3: rmb 1 ; DATA XREF: CALC_INJ_PW1_1+16r ; DEC_BYTE_A3+5r ... rmb 1 byte_A5: rmb 1 ; DATA XREF: CALC_INJ_PW1_A6+46r ; CALC_BYTE_A5+8w INJ_PW1_A6: rmb 1 ; DATA XREF: ROM:C7A7w ; CALC_INJ_PW1_1:CALC_INJ_PW1_Ar ... rmb 1 byte_A8: rmb 1 ; DATA XREF: ROM:C7A3w ROM:loc_CF8Fr ... byte_A9: rmb 1 ; DATA XREF: sub_C820+56r ; CALC_BYTE_99r ... INJ_PW1_1: rmb 1 ; DATA XREF: sub_D818+31r ; CALC_INJ_PW1_1:loc_D9E5w rmb 1 byte_AC: rmb 1 ; DATA XREF: sub_DA85+5r ; sub_DA85:loc_DA97w ... rmb 1 byte_AE: rmb 1 ; DATA XREF: sub_DE0Cr sub_DE0C+4w byte_AF: rmb 1 ; DATA XREF: CALC_LTFT_AFT+Fr ; CALC_LTFT_AFT+11w byte_B0: rmb 1 ; DATA XREF: CALC_LTFT_AFT+19r ; CALC_LTFT_AFT:loc_DBDEr ... byte_B1: rmb 1 ; DATA XREF: sub_D818+142w ; sub_D96E+20r ... rmb 1 byte_B3: rmb 1 ; DATA XREF: sub_D818+134w sub_D9E8+1r ... byte_B4: rmb 1 ; DATA XREF: sub_DF16:loc_DF6Er ; sub_E159+8w byte_B5: rmb 1 ; DATA XREF: sub_DF16+2Bw sub_DF16+34r ... byte_B6: rmb 1 ; DATA XREF: sub_DA3Dr sub_DA3D+5w ... byte_B7: rmb 1 ; DATA XREF: sub_DF16r sub_DF16+4w byte_B8: rmb 1 ; DATA XREF: ROM:CFDAr sub_E0E9+8w byte_B9: rmb 1 ; DATA XREF: ROM:CFE1r sub_E0E9+12w byte_BA: rmb 1 ; DATA XREF: CALC_BYTE_BA+24w ; CALC_BYTE_BA:loc_E087r ... byte_BB: rmb 1 ; DATA XREF: ROM:C7ABw ; sub_D6B1:loc_D6C6r ... byte_BC: rmb 1 ; DATA XREF: sub_D1C6+32r sub_D5A3+4Ew ... byte_BD: rmb 1 ; DATA XREF: sub_D6B1:loc_D6BFr ; sub_D6B1+13w ... byte_BE: rmb 1 ; DATA XREF: sub_D354:loc_D38Br ; sub_D354+3Cw byte_BF: rmb 1 ; DATA XREF: ROM:C784w ; sub_D354:loc_D3A8r ... byte_C0: rmb 1 ; DATA XREF: sub_D354+8w sub_D354+83w ... byte_C1: rmb 1 ; DATA XREF: sub_D354+4Br ; sub_D354:loc_D3F8w rmb 1 byte_C3: rmb 1 ; DATA XREF: ROM:C7AFw ROM:CFA7w ... byte_C4: rmb 1 ; DATA XREF: sub_D401+22r ; sub_D401:loc_D443w byte_C5: rmb 1 ; DATA XREF: CALC_STFT+A0r ; CALC_STFT+A5w ... byte_C6: rmb 1 ; DATA XREF: CALC_STFT+73w ; CALC_STFT+10Br ... byte_C7: rmb 1 ; DATA XREF: CALC_STFT:loc_DCA7w ; CALC_STFT+DDr ... byte_C8: rmb 1 ; DATA XREF: sub_D281+42w ; sub_D749:loc_D755r ... byte_C9: rmb 1 ; DATA XREF: sub_D281+39w ; CALC_STFT+5Aw ... byte_CA: rmb 1 ; DATA XREF: sub_D51A+8w sub_D51A+22r ... byte_CB: rmb 1 ; DATA XREF: sub_D51A+Br sub_D51A+10w ... byte_CC: rmb 1 ; DATA XREF: ROM:C7B3w ROM:D013r ... TIDLE: rmb 1 ; DATA XREF: ROM:CFBFr sub_E26B+10r ... rmb 1 TPS_CF?: rmb 1 ; DATA XREF: sub_E164+7w sub_E29E+2r ... byte_D0: rmb 1 ; DATA XREF: sub_E29E:loc_E2B9w byte_D1: rmb 1 ; DATA XREF: DO_IAC_2+3r ; DO_TIDLE:loc_E370w ... byte_D2: rmb 1 ; DATA XREF: sub_E18B+14w sub_E18B+34r ... rmb 1 byte_D4: rmb 1 ; DATA XREF: sub_E18B+8r DO_IAC_2+76w rmb 1 byte_D6: rmb 1 ; DATA XREF: sub_E164+3w DO_IAC+57w ... byte_D7: rmb 1 ; DATA XREF: sub_D778+1Br sub_D778+24w ... byte_D8: rmb 1 ; DATA XREF: sub_D44A+40w sub_D44A+47r ... byte_D9: rmb 1 ; DATA XREF: sub_E251+12r ; sub_E251:loc_E268w ... IACDuty: rmb 1 ; DATA XREF: DO_IAC_2:loc_E235w ; DO_IAC:loc_E470r ... byte_DB: rmb 1 ; DATA XREF: DO_IAC_2+Ar sub_E520+10w byte_DC: rmb 1 ; DATA XREF: ROM:D029r DO_IAC_2+Dr ... rmb 1 byte_DE: rmb 1 ; DATA XREF: DO_IAC_2+19r sub_E251+8w ... byte_DF: rmb 1 ; DATA XREF: ROM:D030r ROM:D034w ... byte_E0: rmb 1 ; DATA XREF: DO_IAC_2+13r sub_E310+23w ... byte_E1: rmb 1 ; DATA XREF: sub_E164+Cw DO_IAC_2+16r ... rmb 1 byte_E3: rmb 1 ; DATA XREF: DO_IAC_2+47r ; BATTV_CORR2+8w byte_E4: rmb 1 ; DATA XREF: DO_IAC_2+53r sub_E533+8w byte_E5: rmb 1 ; DATA XREF: DO_IAC_2+61r sub_E53E+8w byte_E6: rmb 1 ; DATA XREF: ROM:C7C8w SETUP_DIAG+25r ... byte_E7: rmb 1 ; DATA XREF: ROM:C7BCw sub_D5A3r ... byte_E8: rmb 1 ; DATA XREF: ROM:C7BEw sub_D5A3+27w ... byte_E9: rmb 1 ; DATA XREF: ROM:C7C0w sub_CF25r ... rmb 1 byte_EB: rmb 1 ; DATA XREF: CAS_INT_HNDLR+20r ; CAS_INT_HNDLR+74r ... rmb 1 COUNT_ED?: rmb 1 ; DATA XREF: ROM:C778w sub_D818r ... byte_EE: rmb 1 ; DATA XREF: sub_E7A4:loc_E7DDw ; sub_E7A4+53r ... rmb 1 byte_F0: rmb 1 ; DATA XREF: sub_E76F+20w sub_E76F+27r ... rmb 1 byte_F2: rmb 1 ; DATA XREF: sub_E76F+32w sub_E900+Fr ... rmb 1 byte_F4: rmb 1 ; DATA XREF: sub_E7A4+43w sub_E7A4+4Bw byte_F5: rmb 1 ; DATA XREF: sub_E7A4+5Dw rmb 1 byte_F7: rmb 1 ; DATA XREF: sub_E805+Cw sub_E805+14w ... byte_F8: rmb 1 ; DATA XREF: sub_E805+32w sub_E93F+15r rmb 1 byte_FA: rmb 1 ; DATA XREF: CAS_E892+31w sub_E900+9r ... rmb 1 byte_FC: rmb 1 ; DATA XREF: CAS_E892:loc_E8BDw ; CAS_E892:loc_E8C8r ... CAS_FD: rmb 1 ; DATA XREF: sub_E900+2r ; CAS_INT_HNDLR+38w rmb 1 byte_FF: rmb 1 ; DATA XREF: ROM:C7C4w sub_D5A3+22w ... byte_100: rmb 1 ; DATA XREF: sub_D5A3+3Ew ; CALC_IGN_PARAM4:loc_E642w ... word_101: rmb 2 ; DATA XREF: sub_D5A3+41w ; CALC_IGN_PARAM4:loc_E64Er ... byte_103: rmb 1 ; DATA XREF: AIN7_TPS:loc_CE71w ; sub_D44A+C4r ... IGN_PARAM1: rmb 1 ; DATA XREF: CALC_IGN_PARAM1:loc_E609w ; CALC_IGN_ADV+1r IGN_PARAM2: rmb 1 ; DATA XREF: sub_E549:loc_E572r ; CALC_IGN_PARAM2:loc_E62Dw ... IGN_PARAM4: rmb 1 ; DATA XREF: CALC_IGN_PARAM4:loc_E68Bw ; CALC_IGN_ADV+2Ar IGN_PARAM5: rmb 1 ; DATA XREF: CALC_IGN_PARAM5_A+18w ; CALC_IGN_PARAM5_Br ... IGN_PARAM6: rmb 1 ; DATA XREF: CALC_IGN_PARAM6:loc_E70Br ; CALC_IGN_PARAM6:loc_E716w ... IGNADV: rmb 1 ; DATA XREF: SETUP_DIAG+22r ; CALC_IGN_ADV+51w ... IGN_PARAM3: rmb 2 ; DATA XREF: ROM:C7D2w ; CALC_IGN_ADV:loc_E730r ... word_10C: rmb 2 ; DATA XREF: sub_E7A4+2r sub_E805+1Fr word_10E: rmb 2 ; DATA XREF: sub_E7A4+5w sub_E83B+12r ... word_110: rmb 2 ; DATA XREF: sub_E83B+15w sub_E83B+1Dr ... word_112: rmb 2 ; DATA XREF: sub_E83B+6w sub_E83B+31r ... word_114: rmb 2 ; DATA XREF: sub_E83B+9w sub_E83B+2Br ... word_116: rmb 2 ; DATA XREF: sub_E83B+Cw sub_E83B+25r ... word_118: rmb 2 ; DATA XREF: sub_E83B+Fw sub_E83B+20r ... word_11A: rmb 2 ; DATA XREF: sub_E7A4+4Er sub_E805+17r ... word_11C: rmb 2 ; DATA XREF: sub_E7A4+26r ; CAS_INT_HNDLR+D3w word_11E: rmb 2 ; DATA XREF: sub_E7A4+23w sub_E7A4+46r ... byte_120: rmb 1 ; DATA XREF: ROM:C7CDw ROM:D069w ... byte_121: rmb 1 ; DATA XREF: sub_D6A7r sub_D6A7+6w ... word_122: rmb 2 ; DATA XREF: sub_C820+9Bw sub_EA6E+Aw ... word_124: rmb 2 ; DATA XREF: sub_C820+A1w ; sub_D55A:loc_D59Fw ... byte_126: rmb 1 ; DATA XREF: sub_EB76+28w ; sub_EB76:loc_EBC1r ... byte_127: rmb 1 ; DATA XREF: sub_EB76+2Bw ; sub_EB76:loc_EBAAr ... byte_128: rmb 1 ; DATA XREF: sub_EB76+2Ew sub_EB76+63r ... byte_129: rmb 1 ; DATA XREF: sub_EB76+1Fw sub_EB76+6Fr ... byte_12A: rmb 1 ; DATA XREF: sub_ECBD+Ar ; sub_ECBD:loc_ECCDw byte_12B: rmb 1 ; DATA XREF: DO_IAC_DUTY:loc_ECB9w ; sub_ECBD+1Dr word_12C: rmb 2 ; DATA XREF: sub_ECBD+21w sub_ECBD+2Ar ... byte_12E: rmb 1 ; DATA XREF: ROM:C7DAw sub_C820+176r ... VSS_COUNT?: rmb 1 ; DATA XREF: ROM:C78Cw sub_EA6E+24r ... VSS_1: rmb 1 ; DATA XREF: ROM:D769r ROM:D771w ... VSS_2: rmb 1 ; DATA XREF: VSS_CALCS+3r VSS_CALCS+Dw VSS_3: rmb 1 ; DATA XREF: VSS_CALCSr VSS_CALCS+6w byte_133: rmb 1 ; DATA XREF: SCI_JMP_15+5w ROM:EFB3r ACIA_STATUS bit7 bit6 bit5 bit4 - Data Request bit3 bit2 bit1 - Msg Received bit0 - TX Msg in progress ACIA_STATUS: rmb 1 ; DATA XREF: Parse_SDL_Msgr ; Parse_SDL_Msg+22r ... OBD_CTRL: rmb 2 ; DATA XREF: OBD_HDR_15:loc_CB68w ; ACIA_TIMEOUT:loc_CBB6w ... ACIA_Timeout?: rmb 1 ; DATA XREF: Parse_SDL_Msg+9r ; SDL_INT_HNDLR+55w ; save current timer_21 value ACIA_COUNT: rmb 1 ; DATA XREF: ACIA_TIMEOUT+1r ; ACIA_TIMEOUT+7w ... ACIA_RX_COUNT: rmb 1 ; DATA XREF: SETUP_DIAG+9w ; SDL_INT_HNDLR+31r ... ACIA_CSUM: rmb 1 ; DATA XREF: SETUP_DIAG+Cw ; SDL_INT_HNDLR+2Br ... ACIA_HDR: rmb 1 ; DATA XREF: Parse_SDL_Msg+10r ; SDL_INT_HNDLR+70r ... ACIA_LNGTH: rmb 1 ; DATA XREF: OBD_HDR_10+2w ; OBD_HDR_13+8r ... ACIA_DATA0: rmb 2 ; DATA XREF: OBD_HDR_10+8w ; OBD_HDR_14+7w ... ACIA_DATA2: rmb 1 ACIA_DATA3: rmb 1 ACIA_DATA4: rmb 1 ACIA_DATA5: rmb 1 ACIA_DATA6: rmb 1 ACIA_DATA7: rmb 1 rmb 1 INJ_PW1: rmb 2 ; DATA XREF: SETUP_DIAG+15r ; sub_D818+33w ... ; injector pulse width without dead time INJPWH: rmb 2 ; DATA XREF: SETUP_DIAG:loc_D2FBw TIDLE_OBD: rmb 1 ; DATA XREF: DO_TIDLE:loc_E39Fw AIRFLOW: rmb 1 ; DATA XREF: ROM:loc_D685w AFT: rmb 1 ; DATA XREF: CALC_LTFT_AFT:loc_DC23w ; DO_IAC_DUTY+3Br IGNADV_OBD: rmb 1 ; DATA XREF: ROM:C7D5w ; SETUP_DIAG:loc_D308w STATUS1 bit7 bit6 bit5 bit4 bit3 bit2 - Evap Purge, 1=On bit1 - EGR, 1=On bit0 - Rich/Lean,1=Rich STATUS1: rmb 1 ; DATA XREF: SETUP_DIAG:loc_D322w STATUS2 bit7 bit6 bit5 bit4 bit3 - PN/D, 1=D bit2 - AC SW, 1=On bit1 - PS SW, 1=On bit0 STATUS2: rmb 1 ; DATA XREF: SETUP_DIAG:loc_D350w rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 STACK: rmb 1 ; top of stack ?????????? RAM_CHK: rmb 2 ; DATA XREF: ROM:C747w sub_CBC3+10r ... X_16C: rmb 1 ; 16C to 173 is part of fuel calcs? rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 FCodes2: rmb 2 ; DATA XREF: RESET_RAM+10w DoHistoryr ... FCodes3: rmb 2 ; DATA XREF: sub_C820+25r sub_C820+2Dw ... byte_178: rmb 1 ; DATA XREF: RESET_RAM+16w sub_D778+Fr ... word_179: rmb 2 ; DATA XREF: RESET_RAM+1Cw ; sub_E499+16w word_17B: rmb 2 ; DATA XREF: RESET_RAM+1Fw ; sub_E499+19w byte_17D: rmb 1 ; DATA XREF: ROM:loc_C765w ROM:EE5Dr RAM_CHK2: rmb 2 ; DATA XREF: sub_CBC3+15r ; RESET_RAM+28w rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 rmb 1 ; end of 'RAM' Asynchronous Communcations Interface Adapter ; =========================================================================== ; Segment type: Regular ; segment ACIA org $1000 ACIA_CR: rmb 1 ACIA_SR: rmb 1 rmb 1 ; end of 'ACIA' Peripheral Interface Adapter ; =========================================================================== ; Segment type: Regular ; segment PIA org $2000 unk_2000: rmb 1 unk_2001: rmb 1 PIA_PORTB bit7 bit6 bit5 bit4 - Evap Purge bit3 - EGR Output bit2 bit1 bit0 PIA_PORTB: rmb 1 PIA_PB_DDR?: rmb 1 rmb 1 ; end of 'PIA' rmb 1 ; =========================================================================== ; Segment type: Pure code ; segment ROM org $8000 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb $CE ; fcb 0 fcb $7F ;  fcb $86 ; fcb $55 ; U fcb 8 fcb $A7 ; fcb 0 fcb $A1 ; fcb 0 fcb $27 ; ' fcb $F9 ; fcb $35 ; 5 fcb $9F ; fcb $80 ; fcb $86 ; fcb 9 fcb $97 ; fcb $10 fcb $86 ; fcb 2 fcb $97 ; fcb $11 fcb $96 ; fcb $11 fcb $97 ; fcb $81 ; fcb $CE ; fcb $80 ; fcb 0 fcb $A6 ; fcb 0 fcb $BD ; fcb $B0 ; fcb $2B ; + fcb 8 fcb $8C ; fcb 0 fcb 0 fcb $26 ; & fcb $F5 ; fcb $20 fcb $FE ; fcb $36 ; 6 fcb $96 ; fcb $11 fcb $84 ; fcb $20 fcb $27 ; ' fcb $FA ; fcb $32 ; 2 fcb $97 ; fcb $13 fcb $39 ; 9 fcb $20 fcb $FE ; fcb $20 fcb $FE ; fcb $20 fcb $FE ; fcb $20 fcb $FE ; fcb $20 fcb $FE ; fcb $20 fcb $FE ; fcb $20 fcb $FE ; fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 fcb 0 X_C000: fcb $A5 ; fcb 0 fcb $11 fcb $91 ; fcb $10 fcb $23 ; # fcb $20 fcb $20 fcb $20 fcb $20 fcb $59 ; Y fcb $41 ; A fcb $37 ; 7 fcb $36 ; 6 fcb $83 ; fcb $AD ; fcb $10 fcb 3 fcb $2A ; * fcb 3 fcb $90 ; fcb 3 fcb $73 ; s fcb 3 fcb $D7 ; fcb 0 fcb $66 ; f fcb 3 fcb $68 ; h fcb 3 fcb $3A ; : fcb 3 fcb $2D ; - fcb 3 fcb $40 ; @ fcb 3 fcb $80 ; fcb 3 fcb $40 ; @ fcb 3 fcb 6 fcb 3 fcb $F fcb 3 fcb 7 fcb $A X_C02E: fcb $79,3 ; 0 ; inj related (byte_9A) fcb $A3,3 ; 2 fcb $50,3 ; 4 X_C034: fcb $20,3 ; 0 ; inj related (byte_9A) fcb $A3,3 ; 2 fcb $46,3 ; 4 X_C03A: fcb $E,2 ; 0 fcb $10,2 ; 2 fcb $17,2 ; 4 fcb $7D,2 ; 6 fcb $17,2 ; 8 fcb $FE,2 ; 10 fcb $56,2 ; 12 fcb $2F,2 ; 14 fcb $27,2 ; 16 X_C04C_TPS: fcb 2 fcb 6 fcb $7F ;  fcb 6 fcb $7F ;  fcb 6 fcb $7B ; { fcb 6 fcb $8F ; fcb $A X_C056: fcb 5,2 ; 0 X_C058_IAT?: fcb $5A,8 ; 0 fcb $A0,8 ; 2 fcb $58,8 ; 4 X_C05E_WTS?: fcb $7A,8 ; 0 fcb $8D,8 ; 2 X_C062_WTS?: fcb $70,8 ; 0 fcb $8D,8 ; 2 X_C066_WTS?: fcb $7A,8 ; 0 fcb $8D,8 ; 2 X_C06A: fcb $B0,8 ; 0 fcb $70,8 ; 2 fcb $B0,8 ; 4 fcb $70,8 ; 6 fcb $B0,$C ; 8 fcb $B0,$C ; 10 fcb $E0,8 ; 12 fcb $90,8 ; 14 fcb $90,8 ; 16 fcb $90,8 ; 18 fcb $F0,5 ; 20 fcb $B0,8 ; 22 fcb $98,8 ; 24 X_C084_VSS?: fcb $17,2 ; 0 fcb $20,2 ; 2 X_C088: fcb 5 fcb 5 X_C08A: fcb 5 fcb 5 X_C08C: fcb 5 fcb 5 X_C08E: fcb $32 ; 2 fcb $32 ; 2 X_C090: fcb $32 ; 2 fcb $32 ; 2 X_C092: fcb $32 ; 2 fcb $32 ; 2 byte_C094: fcb $C8 ; DATA XREF: CALC_STFT+75r byte_C095: fcb $C8 ; DATA XREF: CALC_STFT+7Dr byte_C096: fcb 6 ; DATA XREF: CALC_STFT:loc_DCD5r byte_C097: fcb 4 ; DATA XREF: CALC_STFT+70r X_C098: fcb 2 fcb $66 ; f fcb 0 fcb $CD ; X_C09C: fcb 2 fcb $66 ; f fcb 0 fcb $CD ; X_C0A0: fcb 2 fcb $66 ; f fcb 0 fcb $CD ; X_C0A4: fcb $2A ; * fcb $7E ; ~ X_C0A6_AFM: fcb 4 fcb $80 ; fcb 1 fcb $80 ; X_C0AA_AFM: fcb 3 fcb $80 ; fcb 1 fcb $80 ; byte_C0AE: fcb $80 ; DATA XREF: ROM:D186r byte_C0AF: fcb $20 ; DATA XREF: sub_D51A+38r byte_C0B0: fcb $20 ; DATA XREF: sub_D51A:loc_D532r byte_C0B1: fcb $14 ; DATA XREF: AIN4_IAT+17r AIN4_IAT+42r byte_C0B2: fcb $14 ; DATA XREF: AIN5_WTS+17r AIN5_WTS+42r byte_C0B3: fcb $FF ; DATA XREF: AIN7_TPS+17r AIN7_TPS+42r byte_C0B4: fcb $FF ; DATA XREF: AIN1_AFM+21r AIN1_AFM+45r byte_C0B5: fcb $F0 ; DATA XREF: sub_D1C6+61r X_C0B6_AFM: fcb $60,$60,$60,$70,$60,$4C,$42,$3E,$3E; 0 X_C0BF_AFM: fcb $60,$60,$60,$70,$60,$4C,$42,$3E,$3E; 0 X_C0C8_WTS: fcb $6D,$6D,$5D,$56,$4D,$46,$40; 0 X_C0CF_WTS: fcb $6D,$6D,$5D,$56,$4D,$46,$40; 0 X_C0D6_RPM: fcb 0,0,0,4,4,4,4,4,5,7,$A; 0 X_C0E1_RPM: fcb $1F fcb $31 ; 1 fcb $3D ; = fcb $42 ; B fcb $45 ; E fcb $41 ; A fcb $39 ; 9 fcb $32 ; 2 fcb 0 fcb $1F fcb $31 ; 1 fcb $3D ; = fcb $42 ; B fcb $45 ; E fcb $41 ; A fcb $39 ; 9 fcb $32 ; 2 fcb 0 fcb $1F fcb $31 ; 1 fcb $3D ; = fcb $42 ; B fcb $42 ; B fcb $3B ; ; fcb $35 ; 5 fcb $2B ; + fcb 0 fcb $1F fcb $31 ; 1 fcb $3D ; = fcb $42 ; B fcb $42 ; B fcb $3B ; ; fcb $35 ; 5 fcb $2B ; + fcb 0 byte_C105: fcb 0 ; DATA XREF: sub_D818+80r sub_D818+FAr byte_C106: fcb 5 ; DATA XREF: DEC_BYTE_A3+9r byte_C107: fcb 2 ; DATA XREF: DEC_BYTE_9B+9r X_C108_WTS: fcb $BC ; ; inj related (byte_98) fcb 6 X_C10A_WTS: fcb $BC ; ; inj related (byte_98) fcb 6 byte_C10C: fcb $13 ; DATA XREF: sub_DA85+9r X_C10D: fdb $20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20,$20; 0 X_C125: fcb $D fcb $91 ; fcb $F fcb $5C ; \ fcb $D fcb $91 ; fcb $13 fcb $33 ; 3 fcb $E fcb $56 ; V fcb $E fcb $56 ; V fcb $C fcb $CD ; fcb $F fcb $DF ; fcb $C fcb $CD ; fcb $11 fcb $EC ; fcb $E fcb $56 ; V fcb $E fcb $56 ; V fcb $C fcb $CD ; fcb $C fcb $CD ; fcb $C fcb $CD ; fcb $E fcb $D9 ; fcb $E fcb $56 ; V fcb $E fcb $56 ; V fcb $C fcb $CD ; fcb $D fcb $50 ; P fcb $C fcb $CD ; fcb $14 fcb $FE ; fcb $E fcb $56 ; V fcb $E fcb $56 ; V fcb $C fcb $CD ; fcb $C fcb $CD ; fcb $C fcb $CD ; fcb $E fcb $D9 ; fcb $E fcb $56 ; V fcb $E fcb $56 ; V fcb $C fcb $CD ; fcb $D fcb $50 ; P fcb $C fcb $CD ; fcb $14 fcb $FE ; fcb $E fcb $56 ; V fcb $E fcb $56 ; V X_C16D: fdb $28F,$28F,$28F,$28F,$28F,$28F,$28F,$28F,$28F,$28F,$28F,$28F; 0 byte_C185: fcb 0 ; DATA XREF: sub_CBC3+8r sub_DE0C+Ar byte_C186: fcb $85 ; DATA XREF: sub_DEC0+8r byte_C187: fcb $7B ; DATA XREF: sub_DEC0+3r byte_C188: fcb 1 ; DATA XREF: CALC_LTFT_AFT:loc_DBD7r X_C189: fcb 0 ; inj related (byte_9B) fcb 0 X_C18B: fcb $7B ; { ; inj related (byte_9B) fcb $35 ; 5 byte_C18D: fcb 0 ; DATA XREF: CALC_BYTE_9D:loc_E043r X_C18E: fcb $66 ; f ; inj related (byte_9a) fcb $8D ; byte_C190: fcb 1 ; DATA XREF: CALC_BYTE_9A_1+13r byte_C191: fcb 1 ; DATA XREF: CALC_BYTE_9A_1:loc_DF0Ar byte_C192: fcb $8C ; DATA XREF: ROM:CFF9r byte_C193: fcb $94 ; DATA XREF: ROM:CFFFr byte_C194: fcb 1 ; DATA XREF: CALC_BYTE_9C:loc_DA55r X_C195: fcb $3F ; ? fcb $30 ; 0 byte_C197: fcb 6 ; DATA XREF: sub_DF16+Er byte_C198: fcb $15 ; DATA XREF: sub_DF16+45r byte_C199: fcb $9C ; DATA XREF: sub_DF16:loc_DF67r byte_C19A: fcb 3 ; DATA XREF: CALC_BYTE_BA:loc_E076r byte_C19B: fcb 3 ; DATA XREF: sub_D818+98r sub_D818+9Cr ... byte_C19C: fcb 3 ; DATA XREF: OC1_INT_HDLR+35r byte_C19D: fcb 1 ; DATA XREF: DEC_BYTE_A2+4r byte_C19E: fcb $B1 ; DATA XREF: CALC_BYTE_9D+63r byte_C19F: fcb $DB ; DATA XREF: CALC_BYTE_9D+5Er byte_C1A0: fcb $AC ; DATA XREF: CALC_BYTE_9C+Br ; CALC_STFT+46r byte_C1A1: fcb $13 ; DATA XREF: CALC_STFT+11r byte_C1A2: fcb $73 ; DATA XREF: sub_EB26+1Dr byte_C1A3: fcb $1D ; DATA XREF: sub_D1C6+3Cr byte_C1A4: fcb $26 ; DATA XREF: sub_D1C6+34r X_C1A5_WTS: fcb $65,$59,$51,$4B,$49,$45,$45,$D3,$43,$10; 0 INJ_DEADTIME: fcb $D1,$A0,$7A,$5E,$4D,$41,$37,$2F,$29,$25; 0 ; deadtime v batt volts X_C1B9_IAT: fcb $C2,$AB,$94,$80,$71,$60,$60; 0 ; inj related (byte_A5) X_C1C0_RPM: fcb $60,$60,$60,$60,$62,$64,$68,$69,$6A,$6A,$68,$66,$66,$66; 0 X_C1CE_RPM: fcb $E,$A,9,3,3,3,3,3,3,3,3,3,3,3; 0 X_C1DC_WTS: fcb $C3,$89,$5A,$2E,$22,$13,$12; 0 X_C1E3_WTS: fcb $C3,$89,$5A,$2E,$22,$13,$12; 0 X_C1EA: fcb $9A,$B3,$CD,$E6,$FF ; 0 X_C1EF_WTS: fcb $80,$4D,$33,$17,6,0,0; 0 X_C1F6_RPM: fcb $80,$80,$80,$80,$80,$7D,$7A,$76,$73,$70,$6D,$6A,$66,$63; 0 ; inj related (byte_99) fcb $60,$5D,$5A,$56,$53,$50,$4D,$4A,$46,$43,$40; 14 X_C20F_WTS: fcb $8D,$8D,$1A,$D,0,0,0; 0 X_C216_WTS: fcb $8D,$8D,$1A,$D,0,0,0; 0 ; inj related (byte_9B) X_C21D_WTS: fcb $66,$5A,$33,$15,$10,$D,$D; 0 ; inj related (byte_A3) X_C224_WTS: fcb $66,$5A,$33,$1C,$12,$D,$D; 0 ; inj related (byte_A3) X_C22B_WTS: fcb $60,$5F,$5F,$46,$38,$20,8; 0 ; inj related (byte_98) X_C232_WTS: fcb $60,$5F,$5F,$46,$38,$20,8; 0 ; inj related (byte_98) X_C239_WTS: fcb $80,$80,$80,$6B,$50,$35,$11; 0 ; inj related (byte_98) X_C240_WTS: fcb $80,$80,$80,$6B,$50,$35,$11; 0 ; inj related (byte_98) X_C247_WTS: fcb $20,$1A,$1A,$13,$E,6,0,$E0,$80,$10; 0 X_C251_IAT: fcb 0,0,$E,$F,$10,$12,$14; 0 ; inj related (byte_9C) X_C258_RPM: fcb $16,$1A,$22,$30,$41,$54,$6A,$D4; 0 ; related to LTFT X_C260_WTS: fcb $66,$33,$F,0,0,0,0,$A,$C; 0 ; inj related (byte_A2) X_C269: fcb $80,$80,$80,$80,$80,$80,$80,$9D,$98,$9A,$97,$97,$97; 0 ; inj related (byte_9B) 11x13? fcb $80,$80,$80,$80,$80,$80,$80,$9A,$97,$9B,$96,$96,$96; 13 fcb $80,$80,$80,$80,$80,$80,$9B,$99,$98,$9B,$97,$97,$97; 26 fcb $80,$80,$80,$80,$80,$80,$9B,$99,$99,$98,$97,$97,$97; 39 fcb $96,$80,$80,$80,$80,$80,$9B,$99,$98,$98,$97,$97,$97; 52 fcb $96,$9B,$80,$80,$80,$9C,$99,$99,$98,$99,$97,$97,$97; 65 fcb $9F,$9B,$8B,$90,$94,$9C,$9A,$9A,$99,$99,$96,$96,$96; 78 fcb $9A,$98,$8B,$90,$94,$98,$96,$99,$99,$96,$93,$93,$93; 91 fcb $98,$8F,$8F,$94,$98,$92,$96,$97,$97,$94,$90,$90,$90; 104 fcb $95,$88,$8A,$8E,$92,$90,$92,$96,$96,$90,$8C,$8C,$8C; 117 fcb $95,$88,$8A,$91,$8E,$8D,$8F,$93,$92,$8C,$85,$85,$85; 130 fcb $A ; define LUT 10 x 13? fcb $C X_C2FA: fcb $80,$80,$80,$80,$80,$80,$80,$9D,$98,$9A,$97,$97,$97; 0 ; inj related (byte_9B) 11x13? fcb $80,$80,$80,$80,$80,$80,$80,$9A,$97,$9B,$96,$96,$96; 13 fcb $80,$80,$80,$80,$80,$80,$9B,$99,$98,$9B,$97,$97,$97; 26 fcb $80,$80,$80,$80,$80,$80,$9B,$99,$99,$98,$97,$97,$97; 39 fcb $96,$80,$80,$80,$80,$80,$9B,$99,$98,$98,$97,$97,$97; 52 fcb $96,$9B,$80,$80,$80,$9C,$99,$99,$98,$99,$97,$97,$97; 65 fcb $9F,$9B,$8B,$90,$94,$9C,$9A,$9A,$99,$99,$96,$96,$96; 78 fcb $9A,$98,$8B,$90,$94,$98,$96,$99,$99,$96,$93,$93,$93; 91 fcb $98,$8F,$8F,$94,$98,$92,$96,$97,$97,$94,$90,$90,$90; 104 fcb $95,$88,$8A,$8E,$92,$90,$92,$96,$96,$90,$8C,$8C,$8C; 117 fcb $95,$88,$8A,$91,$8E,$8D,$8F,$93,$92,$8C,$85,$85,$85; 130 fcb $60 ; ` fcb 0 fcb 8 X_C38C_WTS: fcb $A4 ; fcb $52 ; R fcb 0 fcb 0 byte_C390: fcb $24 ; DATA XREF: sub_E7A4+2Fr byte_C391: fcb 7 ; DATA XREF: CALC_IGN_PARAM2+11r IGNADV_MAX: fcb $AD ; ; = 50 degrees IGNADV_MIN: fcb $13 ; = -5degs byte_C394: fcb $2E ; DATA XREF: ROM:C7CAr ROM:D066r byte_C395: fcb $22 ; DATA XREF: CALC_IGN_PARAM5_A+15r byte_C396: fcb 3 ; DATA XREF: CALC_IGN_PARAM5_B+5r byte_C397: fcb $D ; DATA XREF: CALC_IGN_PARAM5_B+Ar byte_C398: fcb $A ; DATA XREF: CALC_IGN_PARAM5_A+8r byte_C399: fcb 3 ; DATA XREF: CALC_IGN_PARAM6+4Dr byte_C39A: fcb 2 ; DATA XREF: sub_D44A+C7r word_C39B: fdb $1B1C ; DATA XREF: CALC_IGN_PARAM6+2Br word_C39D: fdb $2423 ; DATA XREF: CALC_IGN_PARAM6+33r fcb 6 ; define table 6 x 13? fcb $C X_C3A1_BATTV?: fcb $C0,$A4,$89,$79,$6E,$65,$65,$65,$5F,$5A,$55,$52,$4E; 0 ; LUT 6 x 13? fcb $A5,$8F,$79,$6B,$60,$59,$5A,$59,$52,$4F,$4B,$47,$44; 13 fcb $89,$79,$68,$5F,$55,$4E,$4F,$4F,$4B,$46,$43,$41,$3E; 26 fcb $75,$6B,$5F,$54,$4C,$46,$47,$46,$43,$40,$3C,$39,$38; 39 fcb $60,$5C,$55,$4C,$44,$40,$40,$40,$3C,$39,$38,$35,$33; 52 fcb $4E,$4C,$49,$44,$3E,$3B,$3B,$3B,$38,$35,$33,$32,$2E; 65 fcb $3B,$3B,$3B,$39,$38,$36,$36,$36,$35,$32,$30,$2D,$2A; 78 X_C3FC_RPM: fcb $39 ; 9 fcb $39 ; 9 fcb $5B ; [ fcb $63 ; c fcb $C ; define LUT 13x13? fcb $C X_C402: fcb $4C,$71,$89,$A1,$A0,$97,$96,$95,$94,$A8,$A7,$A6,$A5; 0 ; LUT 13x13? fcb $4D,$71,$89,$A1,$A0,$A0,$96,$8F,$94,$A8,$A7,$A6,$A5; 13 fcb $4F,$71,$80,$92,$92,$90,$8D,$85,$8C,$92,$91,$90,$8F; 26 fcb $51,$68,$80,$87,$88,$87,$86,$7F,$7E,$82,$83,$82,$81; 39 fcb $5A,$5B,$5A,$65,$71,$7C,$7B,$7B,$7A,$77,$79,$78,$77; 52 fcb $46,$51,$57,$62,$6E,$79,$78,$75,$74,$74,$79,$78,$77; 65 fcb $24,$45,$4D,$5F,$69,$72,$72,$73,$71,$72,$71,$70,$6F; 78 fcb $22,$26,$39,$53,$5D,$72,$71,$6D,$6E,$72,$71,$70,$6F; 91 fcb $1E,$1E,$2E,$44,$4C,$6A,$68,$68,$6C,$6C,$6D,$6C,$6B; 104 fcb $28,$2F,$34,$47,$55,$61,$64,$62,$68,$6C,$6D,$6C,$6B; 117 fcb $28,$38,$3D,$3F,$50,$67,$64,$62,$68,$70,$76,$75,$74; 130 fcb $28,$38,$3D,$48,$59,$67,$64,$62,$70,$74,$73,$72,$71; 143 fcb $28,$38,$3D,$48,$59,$67,$64,$62,$70,$74,$73,$72,$71; 156 fcb $C ; define LUT 13x13? fcb $C X_C4AD: fcb $4C,$71,$89,$A1,$A0,$97,$96,$95,$94,$A8,$A7,$A6,$A5; 0 ; LUT 13x13? fcb $4D,$71,$89,$A1,$A0,$A0,$96,$8F,$94,$A8,$A7,$A6,$A5; 13 fcb $4F,$71,$80,$92,$92,$90,$8D,$85,$8C,$92,$91,$90,$8F; 26 fcb $51,$68,$80,$87,$88,$87,$86,$7F,$7E,$82,$83,$82,$81; 39 fcb $5A,$5B,$5A,$65,$71,$7C,$7B,$7B,$7A,$77,$79,$78,$77; 52 fcb $46,$51,$57,$62,$6E,$79,$78,$75,$74,$74,$79,$78,$77; 65 fcb $24,$45,$4D,$5F,$69,$72,$72,$73,$71,$72,$71,$70,$6F; 78 fcb $22,$26,$39,$53,$5D,$72,$71,$6D,$6E,$72,$71,$70,$6F; 91 fcb $1E,$1E,$2E,$44,$4C,$6A,$68,$68,$6C,$6C,$6D,$6C,$6B; 104 fcb $28,$2F,$34,$47,$55,$61,$64,$62,$68,$6C,$6D,$6C,$6B; 117 fcb $28,$38,$3D,$3F,$50,$67,$64,$62,$68,$70,$76,$75,$74; 130 fcb $28,$38,$3D,$48,$59,$67,$64,$62,$70,$74,$73,$72,$71; 143 fcb $28,$38,$3D,$48,$59,$67,$64,$62,$70,$74,$73,$72,$71; 156 fcb $C ; define LUT 13x13? fcb $C X_C558: fcb $4C,$71,$83,$9B,$9A,$8F,$8D,$8B,$89,$9B,$9A,$99,$98; 0 ; LUT 13x13? fcb $4D,$71,$83,$9B,$9A,$98,$8D,$85,$89,$9B,$9A,$99,$98; 13 fcb $4F,$71,$7A,$8C,$8C,$88,$84,$7B,$81,$85,$84,$83,$82; 26 fcb $51,$68,$7A,$81,$82,$7F,$7D,$75,$73,$75,$76,$75,$74; 39 fcb $5A,$5B,$5D,$68,$6B,$74,$72,$71,$6F,$6A,$6C,$6B,$6A; 52 fcb $46,$51,$5A,$65,$68,$71,$6F,$6B,$69,$67,$6C,$6B,$6A; 65 fcb $24,$45,$50,$62,$63,$6A,$69,$69,$66,$65,$64,$63,$62; 78 fcb $22,$35,$42,$56,$60,$6A,$68,$63,$63,$65,$64,$63,$62; 91 fcb $24,$2D,$37,$47,$4F,$62,$5F,$5E,$61,$63,$63,$61,$60; 104 fcb $28,$38,$38,$4A,$58,$59,$5B,$58,$62,$66,$67,$66,$65; 117 fcb $28,$38,$38,$42,$53,$5F,$5B,$58,$62,$6A,$70,$6F,$6E; 130 fcb $28,$38,$38,$42,$53,$5F,$5B,$58,$6A,$6E,$6D,$6C,$6B; 143 fcb $28,$38,$38,$42,$53,$5F,$5B,$58,$6A,$6E,$6D,$6C,$6B; 156 fcb $28 ; ( fcb 0 fcb $20 X_C604: fcb $8E,$85,$80,$7A,$71,$6A,$C0,0,8; 0 X_C60D_WTS: fcb $97,$97,$92,$88,$84,$80,$80,$F0,$D0,$10; 0 X_C617_WTS: fcb $80 ; fcb $80 ; fcb $75 ; u byte_C61A: fcb $13 ; DATA XREF: sub_E164r DO_IAC+54r word_C61B: fdb $20 ; DATA XREF: sub_E499+37r byte_C61D: fcb 7 ; DATA XREF: sub_E499:loc_E4E8r byte_C61E: fcb $8A ; DATA XREF: ROM:D024r word_C61F: fdb $140 ; DATA XREF: sub_E26B:loc_E282r byte_C621: fcb $14 ; DATA XREF: DO_IAC_2+21r byte_C622: fcb $D ; DATA XREF: sub_E251+5r byte_C623: fcb 1 ; DATA XREF: sub_E28C+9r byte_C624: fcb $D ; DATA XREF: DO_IAC_2+2Fr byte_C625: fcb $D ; DATA XREF: DO_IAC_2+38r byte_C626: fcb $10 ; DATA XREF: ROM:D02Dr byte_C627: fcb 2 ; DATA XREF: sub_E2FE+9r byte_C628: fcb $12 ; DATA XREF: sub_E310+20r byte_C629: fcb 1 ; DATA XREF: sub_E336+11r word_C62A: fdb $C000 ; DATA XREF: DO_IAC+C3r word_C62C: fdb 0 ; DATA XREF: DO_IAC+C8r byte_C62E: fcb 1 ; DATA XREF: sub_E499+5Fr ; sub_E499:loc_E500r X_C62F: fcb $B3 ; fcb $4D ; M byte_C631: fcb $80 ; DATA XREF: sub_E164+9r ; DO_IAC:loc_E3EBr byte_C632: fcb $7D ; DATA XREF: sub_E251:loc_E25Br fcb $C0 ; fcb 0 ; define LUT 0x32? fcb $20 X_C636_WTS: fcb $6C,$6C,$6C,$6C,$6C,$6C,$6C,$6C,$74,$78,$7A,$7A,$7B; 0 fcb $76,$73,$74,$76,$75,$77,$7F,$6E,$6C,$6C,$6C,$6C,$C0; 13 fcb 0 ; define table 1x32? fcb $20 X_C652_WTS: fcb $6C,$6C,$6C,$6C,$6C,$6C,$6C,$6C,$6C,$71,$73,$76,$77; 0 fcb $74,$74,$76,$7A,$74,$78,$7B,$6C,$6C,$6C,$6C,$6C; 13 X_C66B_WTS: fcb $9A,$4D,$26,$26,$26,$26,$26,$40; 0 fcb 8 fcb $20 X_C675: fcb $A,$C,$E,$10,$12,$14,$16,$18; 0 fcb $70 ; p fcb 0 fcb $10 IAC_STEPS_1?: fcb 1,1,1,4,8,8,$10,$10 ; 0 fcb $70 ; p fcb 0 fcb $10 IAC_STEPS_2?: fcb 1,8,8,8,$10,$10,$10,$10; 0 TIDLE_AC_On: fcb $FE,$E6,$CD,$C0,$A0,$6D,$66,$FE,$E6,$CD,$C0,$A0,$86,$73; 0 TIDLE_AC_Off: fcb $FE,$E6,$CD,$C0,$A0,$6D,$66,$BA,$B3,$9A,$8D,$73,$66,$60; 0 TIDLE_?: fcb $FE,$E6,$CD,$C0,$A0,$86,$7A,$BA,$B3,$9A,$8D,$73,$6D,$66; 0 fcb $D3 ; fcb $53 ; S fcb 8 X_C6C0_BATTV: fcb $C0,$AB,$95,$80,$6B,$E0; 0 fcb 0 fcb 8 X_C6C8_WTS: fcb $3D,$4D,$57,$61,$6E,$7B,$80,$8D; 0 fcb $E0 ; fcb $60 ; ` fcb 8 X_C6D3_IAT: fcb $80,$80,$8D,$9A,$A6 ; 0 byte_C6D8: fcb 0 ; DATA XREF: SCI_JMP_14r byte_C6D9: fcb 0 ; DATA XREF: SCI_JMP_15+8r ; --------------------------------------------------------------------------- START: ; CODE XREF: ROM:loc_EECFJ ; ROM:loc_EF06J sei lds #$169 ; end of RAM????? oim #$40, RAMCR ; '@' ldaa #2 staa byte_1F ; init byte_1F ldaa #9 staa TCSR1 ldaa #$19 staa byte_18 ; timer control? ldaa #$9A ; '' staa byte_2E ldaa #$A0 ; '' staa byte_20 ldaa #$A0 ; '' staa byte_28 ldd #$FFFF std PORT1 ; init timer port ldd #$5E16 std P1DDR ldd #$A020 std byte_26 ldd #$81A std RMCR ldaa #4 staa unk_2001 ldaa #$FF staa unk_2000 clra staa unk_2001 ldaa #0 staa unk_2000 ldaa #4 staa unk_2001 ldaa #4 staa PIA_PB_DDR? ldaa #$FF staa PIA_PORTB ; init PIA_PORTB clra staa PIA_PB_DDR? ldaa #$3F ; '?' staa PIA_PORTB ; init PIA_PORTB ldaa #4 staa PIA_PB_DDR? ldaa #$F0 ; '' staa P4DDR tim #$80, RAMCR ; '' bne CSUM_1 clra staa RAM_CHK ; clear RAM check register bra loc_C765 ; --------------------------------------------------------------------------- CSUM_1: ; CODE XREF: ROM:C744j ldx #$16A loc_C74F: ; CODE XREF: ROM:C75Dj ldd 0,x xgdx cpx #$AA55 xgdx bne loc_C763 inx inx cpx #$180 bcs loc_C74F ldaa #$5A ; 'Z' bra loc_C765 ; --------------------------------------------------------------------------- loc_C763: ; CODE XREF: ROM:C756j ldaa #$50 ; 'P' loc_C765: ; CODE XREF: ROM:C74Aj ROM:C761j staa byte_17D clra clrb ldx #$168 loc_C76D: ; CODE XREF: ROM:C774j std 0,x dex dex cpx #$3E ; '>' bhi loc_C76D ldaa #3 staa COUNT_ED? ldaa #3 staa STATUS_8C ldaa #$33 ; '3' staa byte_64 ldaa #$1E staa byte_BF ldaa #$7D ; '}' staa CAS_COUNT ldaa #$FE ; '' staa VSS_COUNT? ldaa #8 staa STATUS_90 ldaa #$81 ; '' staa byte_91 ldaa #$80 ; '' staa byte_9D staa STFT ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only staa LTFT staa byte_A1 staa byte_9A staa byte_A8 ldaa #$10 staa INJ_PW1_A6 ldaa #$4E ; 'N' staa byte_BB ldaa #$26 ; '&' staa byte_C3 ldaa #$1E staa byte_CC ldaa #8 staa IFS_COUNT ; 1 = IFS OK ldd #$FFFF staa byte_E7 staa byte_E8 std byte_E9 ldaa #5 staa byte_FF ldaa #$10 staa byte_E6 ldaa byte_C394 staa byte_120 ldaa #$30 ; '0' ; 30h = default ignition advance? staa IGN_PARAM3 staa IGNADV_OBD ldaa #$80 ; '' staa byte_12E eim #$40, PORT1 ; '@' ; update watchdog ldaa TRCSR1 ; SCI Status register ldaa RDR ldaa #$BF ; '' staa byte_50 bsr sub_C81D ldaa #$DF ; '' staa byte_50 bsr sub_C81D ldaa #0 staa byte_50 bsr sub_C81D bsr sub_C820 ldaa #2 staa byte_50 bsr sub_C81D bsr sub_C820 ldaa #6 staa byte_50 bsr sub_C81D ldaa #$F staa byte_50 bsr sub_C81D ldaa #$3F ; '?' staa byte_50 bsr sub_C81D ldaa #$7F ; '' staa byte_50 bsr sub_C81D eim #$40, PORT1 ; '@' ; update watchdog bra loc_C83C ; =============== S U B R O U T I N E ======================================= sub_C81D: ; CODE XREF: ROM:C7E8p ROM:C7EEp ... jsr ADC_CC1B ; End of function sub_C81D ; =============== S U B R O U T I N E ======================================= sub_C820: ; CODE XREF: ROM:C7F6p ROM:C7FEp ldaa TCSR1 ; clear interrupt flag ldd FRCH ; get timer addd #$7D0 ; add count std OCR1H ; set up output compare loc_C829: ; CODE XREF: sub_C820+11j tim #$40, TCSR1 ; '@' bne loc_C837 tim #$C0, TRCSR1 ; '' ; test RX and err flags beq loc_C829 jsr SCI_INT_HNDLR rts ; --------------------------------------------------------------------------- loc_C837: ; CODE XREF: sub_C820+Cj ldaa #8 staa SCI_STATUS_53 pulx loc_C83C: ; CODE XREF: ROM:C81Bj clra staa byte_50 jsr sub_CBC3 oim #$80, RAMCR ; '' ldd FCodes3 anda #$FD ; '' tab eorb #$FF std FCodes3 ldaa unk_2000 eora #$66 ; 'f' staa STATUS_5A bita #4 beq loc_C85E oim #6, byte_8E loc_C85E: ; CODE XREF: sub_C820+39j jsr sub_D6CE jsr sub_E0E9 jsr CALC_BYTE_9B jsr CALC_BYTE_A3 jsr CALC_BYTE_AC jsr CALC_A1 jsr sub_E129 jsr sub_E14E ldaa byte_A9 staa byte_99 jsr sub_E159 jsr CALC_BYTE_A5 jsr BATTV_CORR1 jsr CALC_INJ_PW1_1 jsr sub_E164 jsr sub_EB66 ldaa TCSR1 ldd ICRH ldd FRCH std OCR1H ldaa byte_18 ; timer control? ldd byte_1D ldd byte_19 std byte_1B ; Output Compare Register tim #1, PORT1 ; *** P0 *** bne loc_C8A4 oim #2, byte_18 ; timer control? loc_C8A4: ; CODE XREF: sub_C820+7Fj ldaa byte_2D ldd FRCH addd #$64 ; 'd' std byte_23 oim #$40, byte_28 ; '@' ldab #2 ldx byte_19 ; get timer abx ; add 2 stx byte_2B ; output compare xgdx addd #$F42 std word_122 ldd #$DD ; '' std word_124 addd byte_2B aim #$BF, byte_28 ; '' ldx byte_2D std byte_2B ldaa TRCSR1 ; SCI Status register ldaa RDR clra staa byte_25 ; clear timer??? ldaa #$17 staa ACIA_CR ; init ACIA ldaa #$95 ; '' staa ACIA_CR ; set RIE,8n1,7812 ldaa FRCH suba #4 staa byte_4F loc_C8E4: ; CODE XREF: sub_C820+18BJ ; sub_C820+1E2J lds #$169 ldd #$5E16 std P1DDR sei clra staa P3CSR staa unk_2001 ldaa #0 staa unk_2000 ldaa #4 staa unk_2001 clra staa PIA_PB_DDR? ldaa #$3F ; '?' staa PIA_PORTB ldaa #4 staa PIA_PB_DDR? ldaa #$F0 ; '' staa P4DDR ldaa #$A0 ; '' staa byte_26 ldaa #$20 ; ' ' staa byte_27 ldaa #2 staa byte_1F ; re-init byte_1F oim #$C0, RAMCR ; '' oim #8, TCSR1 oim #$10, byte_18 ; timer control? oim #$A0, byte_20 ; '' ; init byte_20 oim #$A0, byte_28 ; '' cli jsr sub_CC0A jsr Parse_SDL_Msg jsr sub_ECBD jsr sub_D072 jsr CALC_INJ_PW1_1 jsr sub_D778 tim #1, byte_5C beq loc_C948 jsr CALC_IGN_PARAM5_A aim #$FE, byte_5C ; '' loc_C948: ; CODE XREF: sub_C820+120j tim #$80, byte_5C ; '' beq loc_C96B eim #4, byte_4E aim #$BF, STATUS_8C ; '' jsr sub_CF25 jsr sub_D1C6 jsr CALC_BYTE_98 jsr DEC_BYTE_A2 jsr CALC_BYTE_99 jsr sub_E549 jsr CALC_IGN_PARAM5_B aim #$7F, byte_5C ; '' loc_C96B: ; CODE XREF: sub_C820+12Bj tim #$40, byte_5C ; '@' beq loc_C97F eim #1, byte_4E jsr sub_DA3D jsr DEC_BYTE_A3 jsr sub_DA85 aim #$BF, byte_5C ; '' loc_C97F: ; CODE XREF: sub_C820+14Ej tim #4, byte_5C beq loc_C98D jsr CALC_BYTE_9C jsr DEC_BYTE_9B aim #$FB, byte_5C ; '' loc_C98D: ; CODE XREF: sub_C820+162j jsr sub_CC0A jsr Parse_SDL_Msg jsr sub_ECBD ldaa byte_12E bmi loc_C9A3 ; get free running counter eim #$40, PORT1 ; '@' ; update watchdog ldaa #$F0 ; '' staa byte_12E loc_C9A3: ; CODE XREF: sub_C820+179j ldd FRCH ; get free running counter anda #$E0 ; '' ; mask off upper bits cmpa byte_5D ; test against 5D?????? bne loc_C9AE ; reset time? jmp loc_C8E4 ; --------------------------------------------------------------------------- loc_C9AE: ; CODE XREF: sub_C820+189j staa byte_5D ; reset time? jsr sub_D281 jsr sub_D354 jsr SETUP_DIAG jsr sub_D44A jsr sub_D51A jsr sub_CC0A jsr Parse_SDL_Msg jsr sub_ECBD jsr sub_D5A3 jsr sub_D9E8 jsr CALC_BYTE_A2 jsr CALC_STFT jsr CALC_A1 jsr CALC_LTFT_AFT jsr CALC_INJ_PW1_A6 jsr DoHistory jsr sub_D61A eim #$10, byte_4E ldaa byte_5E inca staa byte_5E ldx #$CA05 ; jump table loc_C9EE: ; CODE XREF: sub_C820+1D3j lsra bcc loc_C9F5 inx inx bra loc_C9EE ; --------------------------------------------------------------------------- loc_C9F5: ; CODE XREF: sub_C820+1CFj ldx 0,x jsr 0,x ; jump table 0? jsr sub_CC0A jsr Parse_SDL_Msg jsr sub_ECBD jmp loc_C8E4 ; End of function sub_C820 ; --------------------------------------------------------------------------- X_CA05: fdb $CA17 fdb $CA3C fdb $CA58 fdb $CA6B fdb $CA75 fdb $CA9A fdb $CAA4 fdb $CABD fdb $CABE ; --------------------------------------------------------------------------- JMP_0_0: jsr ACIA_TIMEOUT jsr sub_D55A jsr sub_D79F jsr sub_DF16 jsr CALC_BYTE_9A_1 jsr sub_EB76 jsr sub_E241 jsr sub_E251 jsr sub_E29E jsr sub_E310 jsr DO_IAC_2 eim #$20, byte_4E ; ' ' rts ; --------------------------------------------------------------------------- JMP_0_1: jsr TEST_IFS jsr sub_D691 jsr sub_DF8E ; RPM? jsr CALC_BYTE_9D jsr CALC_BYTE_BA jsr BATTV_CORR1 ; Inj PW jsr BATTV_CORR2 jsr DO_IAC_DUTY eim #$40, byte_4E ; '@' rts ; --------------------------------------------------------------------------- JMP_0_2: jsr sub_D6A7 jsr loc_EE0A jsr DO_EGR jsr DO_EVAP_PURGE jsr sub_EB26 eim #$80, byte_4E ; '' rts ; --------------------------------------------------------------------------- JMP_0_3: jsr IAT_CORR? jsr sub_D6B1 jsr DO_TIDLE rts ; --------------------------------------------------------------------------- JMP_0_4: jsr sub_CBC3 jsr sub_D6CE jsr sub_EB66 jsr CALC_BYTE_9B jsr CALC_BYTE_A5 jsr sub_E26B jsr sub_E28C jsr sub_E2FE jsr sub_E520 jsr sub_E533 jsr sub_E53E jsr DO_IAC rts ; --------------------------------------------------------------------------- JMP_0_5: jsr sub_CF12 jsr sub_D401 jsr sub_E336 rts ; --------------------------------------------------------------------------- JMP_0_6: jsr sub_D749 jsr sub_E0E9 jsr CALC_BYTE_A3 jsr CALC_BYTE_AC jsr sub_E129 jsr sub_E14E jsr sub_E159 jsr sub_E499 rts ; --------------------------------------------------------------------------- JMP_0_7: rts ; --------------------------------------------------------------------------- JMP_0_8: rts ; =============== S U B R O U T I N E ======================================= Parse_SDL_Msg: ; CODE XREF: sub_C820+10EP ; sub_C820+170P ... ldaa ACIA_STATUS ; get ACIA status bita #2 ; test for message received beq locret_CB03 ; if none then return ldaa byte_21 ; get timer 21? suba ACIA_Timeout? ; save current timer_21 value cmpa #5 ; 5 counts ??? bcs locret_CB03 ldaa ACIA_HDR ; SDL Header Byte ldab #3 ldx #$CB6C ; OBD_JMP_TBL loc_CAD7: ; CODE XREF: Parse_SDL_Msg+20j cmpa 0,x beq loc_CAF0 ; Load jump address to parse OBD header abx ; step on three bytes to next header cpx #$CB78 ; last address of OBD Header jump table bcs loc_CAD7 ldaa ACIA_STATUS ; get ACIA_Status anda #$FD ; '' staa ACIA_STATUS ; clear message received ldaa #$95 ; '' staa ACIA_CR ; set RIE,8n1,7812 bra locret_CB03 ; --------------------------------------------------------------------------- loc_CAF0: ; CODE XREF: Parse_SDL_Msg+1Aj ldx 1,x ; Load jump address to parse OBD header jsr 0,x ; execute jump ldaa ACIA_STATUS ; get ACIA_Status anda #$FD ; '' oraa #1 staa ACIA_STATUS ; set Tx message in progress ldaa #$35 ; '5' staa ACIA_CR ; set TIE,8n1,7812 locret_CB03: ; CODE XREF: Parse_SDL_Msg+5j ; Parse_SDL_Msg+Ej ... rts ; End of function Parse_SDL_Msg ; =============== S U B R O U T I N E ======================================= OBD_HDR_10: ldaa #2 staa ACIA_LNGTH ldd #$1103 std ACIA_DATA0 rts ; End of function OBD_HDR_10 ; =============== S U B R O U T I N E ======================================= OBD_HDR_13: ldaa ACIA_STATUS ; get ACIA_Status oraa #$10 staa ACIA_STATUS ; set Data Request ldaa ACIA_LNGTH staa ACIA_LNGTH clrb loc_CB1F: ; CODE XREF: OBD_HDR_13+34j cmpb ACIA_LNGTH bcc locret_CB46 ldx #$13D abx tba ldab 0,x cmpb #$19 bcc loc_CB3B aslb ldx #$CB78 ; OBD Addr table abx ldx 0,x tab ldaa 0,x bra loc_CB3D ; --------------------------------------------------------------------------- loc_CB3B: ; CODE XREF: OBD_HDR_13+1Dj tab clra loc_CB3D: ; CODE XREF: OBD_HDR_13+29j ldx #$13D abx staa 0,x incb bra loc_CB1F ; --------------------------------------------------------------------------- locret_CB46: ; CODE XREF: OBD_HDR_13+12j rts ; End of function OBD_HDR_13 ; =============== S U B R O U T I N E ======================================= OBD_HDR_14: ldaa #1 staa ACIA_LNGTH ; one byte message ldaa #2 staa ACIA_DATA0 ; data = 2? rts ; End of function OBD_HDR_14 ; =============== S U B R O U T I N E ======================================= OBD_HDR_15: clr ACIA_LNGTH ldd ACIA_DATA0 cmpa #$C0 ; '' ; C0h = RPM control bcs loc_CB68 ; if not RPM control then just store data cmpb #$40 ; '@' ; minimum idle speed = 500 RPM bcc loc_CB62 ; maximum idle speed = 1800 RPM ldab #$40 ; '@' loc_CB62: ; CODE XREF: OBD_HDR_15+Cj cmpb #$E6 ; '' ; maximum idle speed = 1800 RPM bls loc_CB68 ldab #$E6 ; '' loc_CB68: ; CODE XREF: OBD_HDR_15+8j ; OBD_HDR_15+12j std OBD_CTRL rts ; End of function OBD_HDR_15 ; --------------------------------------------------------------------------- OBD_JMP_TBL: fcb $10 fdb $CB04 ; SDL ID REQUEST fcb $13 fdb $CB10 ; SDL DATA fcb $14 fdb $CB47 ; SDL RESET fcb $15 fdb $CB52 ; SDL CONTROL OBD_ADDR_LUT: fdb $8A ; FCodes0 fdb $8B ; FCodes1 fdb $174 ; FCodes2 fdb $176 ; FCodes3 fdb $76 ; RPMH fdb $77 ; RPML fdb $14A ; Target Idle fdb $7F ; VSS fdb $61 ; WTS fdb $62 ; IAT fdb $63 ; TPS Angle fdb $57 ; TPS Volts fdb $5F ; O2 Sensor volts fdb $14D ; Ign Advance fdb $148 ; Injector PW H fdb $149 ; Injector PW L fdb $14B ; Air Flow fdb $DA ; IAC Duty Cycle fdb $9E ; STFT fdb $A0 ; LTFT fdb $14C ; AFT fdb $BC ; ??? fdb $60 ; Batt Volts fdb $14E ; Status1 fdb $14F ; Status2 ; =============== S U B R O U T I N E ======================================= ACIA_TIMEOUT: ; CODE XREF: ROM:JMP_0_0P sei ldaa ACIA_COUNT ; get count beq loc_CBB6 deca staa ACIA_COUNT ; store count-1 bne loc_CBC1 ; return if not zero loc_CBB6: ; CODE XREF: ACIA_TIMEOUT+4j clr OBD_CTRL clr ACIA_STATUS ; reset status ldaa #$95 ; '' staa ACIA_CR ; set RIE,8n1,7812 loc_CBC1: ; CODE XREF: ACIA_TIMEOUT+Aj cli rts ; End of function ACIA_TIMEOUT ; =============== S U B R O U T I N E ======================================= sub_CBC3: ; CODE XREF: sub_C820+1FP ROM:JMP_0_4P tim #$80, byte_91 ; '' beq CSUM_2 aim #$7F, byte_91 ; '' tst byte_C185 bne RESET_RAM CSUM_2: ; CODE XREF: sub_CBC3+3j ldx #$A5A5 cpx RAM_CHK bne RESET_RAM cpx RAM_CHK2 bne RESET_RAM rts ; End of function sub_CBC3 ; =============== S U B R O U T I N E ======================================= RESET_RAM: ; CODE XREF: sub_CBC3+Bj sub_CBC3+13j ... ldx #$16C ; reset RAM locations ldaa #$80 ; '' ; signed int loc_CBE3: ; CODE XREF: RESET_RAM+Bj staa 0,x inx cpx #$174 bne loc_CBE3 ldd #$FF ; set all history codes std FCodes2 std FCodes3 staa byte_178 ldd #$8080 std word_179 std word_17B ldx #$A5A5 stx RAM_CHK ; set RAM_CHK, $A5A5= RAM reset stx RAM_CHK2 rts ; End of function RESET_RAM ; =============== S U B R O U T I N E ======================================= sub_CC0A: ; CODE XREF: sub_C820+10BP ; sub_C820:loc_C98DP ... tim #$20, SCI_STATUS_53 ; ' ' beq loc_CC10 rts ; --------------------------------------------------------------------------- loc_CC10: ; CODE XREF: sub_CC0A+3j ldaa FRCH anda #$FC ; '' cmpa byte_4F bne loc_CC19 rts ; --------------------------------------------------------------------------- loc_CC19: ; CODE XREF: sub_CC0A+Cj staa byte_4F ; End of function sub_CC0A ; =============== S U B R O U T I N E ======================================= ADC_CC1B: ; CODE XREF: sub_C81DP aim #$EF, TRCSR1 ; '' ; set RX interrupt enable ldab byte_50 tba andb #7 beq loc_CC29 cmpb #4 bne loc_CC2D loc_CC29: ; CODE XREF: ADC_CC1B+8j ldaa #1 bra loc_CC6A ; --------------------------------------------------------------------------- loc_CC2D: ; CODE XREF: ADC_CC1B+Cj cmpb #2 bne loc_CC35 ldaa #3 bra loc_CC6A ; --------------------------------------------------------------------------- loc_CC35: ; CODE XREF: ADC_CC1B+14j cmpb #6 bne loc_CC3D ldaa #7 bra loc_CC5A ; --------------------------------------------------------------------------- loc_CC3D: ; CODE XREF: ADC_CC1B+1Cj cmpb #7 beq loc_CC46 loc_CC41: ; CODE XREF: ADC_CC1B+30j inc byte_50 bra loc_CC80 ; set RX interrupt enable ; --------------------------------------------------------------------------- loc_CC46: ; CODE XREF: ADC_CC1B+24j tab lsrb lsrb lsrb lsrb bcc loc_CC41 lsrb bcs GET_ADC_ADDR ldaa #0 bra loc_CC5A ; --------------------------------------------------------------------------- GET_ADC_ADDR: ; CODE XREF: ADC_CC1B+33j ldx #$CC62 ; ADC address LUT abx ldaa 0,x loc_CC5A: ; CODE XREF: ADC_CC1B+20j ADC_CC1B+37j aim #$7F, SCI_STATUS_53 ; '' inc byte_50 bra loc_CC72 ; --------------------------------------------------------------------------- ADC_ADDR_LUT: fcb 8 fcb 5 fcb $D fcb 4 fcb 9 fcb $F fcb $E fcb 6 ; --------------------------------------------------------------------------- loc_CC6A: ; CODE XREF: ADC_CC1B+10j ADC_CC1B+18j tim #$80, SCI_STATUS_53 ; '' bne loc_CC80 ; set RX interrupt enable oim #$80, SCI_STATUS_53 ; '' loc_CC72: ; CODE XREF: ADC_CC1B+45j aim #$BF, SCI_STATUS_53 ; '' staa byte_51 sec rola oraa #$E0 ; '' staa TDR oim #$20, SCI_STATUS_53 ; ' ' loc_CC80: ; CODE XREF: ADC_CC1B+29j ADC_CC1B+52j oim #$10, TRCSR1 ; set RX interrupt enable rts ; End of function ADC_CC1B ; --------------------------------------------------------------------------- SIO_ISR: bsr SCI_INT_HNDLR rti ; =============== S U B R O U T I N E ======================================= SCI_INT_HNDLR: ; CODE XREF: sub_C820+13P ROM:SIO_ISRp ldd TRCSR1 ; SCI Status register bita #$40 ; '@' ; test error flag beq ADC_HDLR aim #$1F, SCI_STATUS_53 rts ; --------------------------------------------------------------------------- ADC_HDLR: ; CODE XREF: SCI_INT_HNDLR+4j ldaa byte_51 cmpa #1 beq loc_CC9B cmpa #3 bne loc_CCB6 loc_CC9B: ; CODE XREF: SCI_INT_HNDLR+Ej tim #$80, SCI_STATUS_53 ; '' beq locret_CCCE tim #$40, SCI_STATUS_53 ; '@' bne loc_CCB0 stab byte_54 ldaa #$FA ; '' staa TDR oim #$40, SCI_STATUS_53 ; '@' bra locret_CCCE ; --------------------------------------------------------------------------- loc_CCB0: ; CODE XREF: SCI_INT_HNDLR+1Cj inc byte_50 aim #$3F, SCI_STATUS_53 ; '?' loc_CCB6: ; CODE XREF: SCI_INT_HNDLR+12j stab byte_4A tab aslb andb #$1E ldx #$CCCF abx ldx 0,x ldaa byte_54 ldab byte_4A jsr 0,x ; SCI_JMP_TABLE aim #$DF, SCI_STATUS_53 ; '' clra staa byte_52 locret_CCCE: ; CODE XREF: SCI_INT_HNDLR+17j ; SCI_INT_HNDLR+27j rts ; End of function SCI_INT_HNDLR ; --------------------------------------------------------------------------- SCI_JMP_TABLE: fdb $CCF0 ; Batt Volts fdb $CE78 ; AFM fdb $CCEF ; Not used fdb $CF05 ; O2 Sensor fdb $CCF3 ; IAT fdb $CD54 ; WTS fdb $CCEF ; Not used fdb $CE01 ; TPS fdb $CCEF ; Not used fdb $CCEF ; Not used fdb $CCEF ; Not used fdb $CCEF ; Not used fdb $CCEF ; Not used fdb $CCEF ; Baro (Not Used) fdb $CDE8 ; ? fdb $CDB5 ; ? ; --------------------------------------------------------------------------- SCI_JMP_DEFAULT: rts ; =============== S U B R O U T I N E ======================================= AIN0_BATTV: stab BATTV rts ; End of function AIN0_BATTV ; =============== S U B R O U T I N E ======================================= AIN4_IAT: tba cmpa #$F7 ; '' bls loc_CD14 tim #$20, INT_FC0 ; ' ' bne loc_CD03 oim #$20, INT_FC0 ; ' ' clr IAT_COUNT? loc_CD03: ; CODE XREF: AIN4_IAT+8j ldab IAT_COUNT? incb beq loc_CD0F ; set Code 23 - IAT stab IAT_COUNT? cmpb byte_C0B1 bcs loc_CD3F loc_CD0F: ; CODE XREF: AIN4_IAT+13j oim #$20, FCodes0 ; ' ' ; set Code 23 - IAT bra loc_CD3F ; --------------------------------------------------------------------------- loc_CD14: ; CODE XREF: AIN4_IAT+3j tim #$20, INT_FC0 ; ' ' bne loc_CD1C aim #$DF, FCodes0 ; '' ; cleear Code 23 - IAT? loc_CD1C: ; CODE XREF: AIN4_IAT+24j aim #$DF, INT_FC0 ; '' cmpa #8 bcc loc_CD3F tim #$80, INT_FC0 ; '' bne loc_CD2E oim #$80, INT_FC0 ; '' clr IAT_COUNT? loc_CD2E: ; CODE XREF: AIN4_IAT+33j ldab IAT_COUNT? incb beq loc_CD3A ; set Code 25 - IAT? stab IAT_COUNT? cmpb byte_C0B1 bcs loc_CD4A loc_CD3A: ; CODE XREF: AIN4_IAT+3Ej oim #$80, FCodes0 ; '' ; set Code 25 - IAT? bra loc_CD4A ; --------------------------------------------------------------------------- loc_CD3F: ; CODE XREF: AIN4_IAT+1Aj AIN4_IAT+1Fj ... tim #$80, INT_FC0 ; '' bne loc_CD47 aim #$7F, FCodes0 ; '' ; clear Code 25 - IAT? loc_CD47: ; CODE XREF: AIN4_IAT+4Fj aim #$7F, INT_FC0 ; '' loc_CD4A: ; CODE XREF: AIN4_IAT+45j AIN4_IAT+4Aj tim #$A0, INT_FC0 ; '' beq loc_CD51 ldaa #$79 ; 'y' loc_CD51: ; CODE XREF: AIN4_IAT+5Aj staa IAT_Raw rts ; End of function AIN4_IAT ; =============== S U B R O U T I N E ======================================= AIN5_WTS: tba cmpa #$F7 ; '' bls loc_CD75 tim #2, INT_FC0 bne loc_CD64 oim #2, INT_FC0 clr WTS_COUNT? loc_CD64: ; CODE XREF: AIN5_WTS+8j ldab WTS_COUNT? incb beq loc_CD70 ; set Code 14 - ECT? stab WTS_COUNT? cmpb byte_C0B2 bcs loc_CDA0 loc_CD70: ; CODE XREF: AIN5_WTS+13j oim #2, FCodes0 ; set Code 14 - ECT? bra loc_CDA0 ; --------------------------------------------------------------------------- loc_CD75: ; CODE XREF: AIN5_WTS+3j tim #2, INT_FC0 bne loc_CD7D aim #$FD, FCodes0 ; '' ; clear Code 14 - ECT? loc_CD7D: ; CODE XREF: AIN5_WTS+24j aim #$FD, INT_FC0 ; '' cmpa #5 bcc loc_CDA0 tim #4, INT_FC0 bne loc_CD8F oim #4, INT_FC0 clr WTS_COUNT? loc_CD8F: ; CODE XREF: AIN5_WTS+33j ldab WTS_COUNT? incb beq loc_CD9B ; Set Code 15 - ECT? stab WTS_COUNT? cmpb byte_C0B2 bcs loc_CDAB loc_CD9B: ; CODE XREF: AIN5_WTS+3Ej oim #4, FCodes0 ; Set Code 15 - ECT? bra loc_CDAB ; --------------------------------------------------------------------------- loc_CDA0: ; CODE XREF: AIN5_WTS+1Aj AIN5_WTS+1Fj ... tim #4, INT_FC0 bne loc_CDA8 aim #$FB, FCodes0 ; '' ; clear Code 15 - ECT? loc_CDA8: ; CODE XREF: AIN5_WTS+4Fj aim #$FB, INT_FC0 ; '' loc_CDAB: ; CODE XREF: AIN5_WTS+45j AIN5_WTS+4Aj tim #6, INT_FC0 beq loc_CDB2 ldaa #$1C loc_CDB2: ; CODE XREF: AIN5_WTS+5Aj staa WTS_Raw rts ; End of function AIN5_WTS ; =============== S U B R O U T I N E ======================================= SCI_JMP_15: tba lsra lsra adda #$70 ; 'p' staa byte_133 ldaa byte_C6D9 ; set to 1 for software test mode? beq loc_CDCE software test? cmpa #$10 beq loc_CDD6 ; set bit4 cmpa #$11 beq loc_CDDD ; clear bits4,3 cmpa #$12 beq loc_CDE1 ; set bit3, clear bit4 loc_CDCE: ; CODE XREF: SCI_JMP_15+Bj cmpb #$40 ; '@' bcs loc_CDDD ; clear bits4,3 cmpb #$C0 ; '' bcs loc_CDE1 ; set bit3, clear bit4 loc_CDD6: ; CODE XREF: SCI_JMP_15+Fj oim #$10, STATUS_8D ; set bit4 aim #$F7, STATUS_8D ; '' ; clear bit3 rts ; --------------------------------------------------------------------------- loc_CDDD: ; CODE XREF: SCI_JMP_15+13j ; SCI_JMP_15+1Bj aim #$E7, STATUS_8D ; '' ; clear bits4,3 rts ; --------------------------------------------------------------------------- loc_CDE1: ; CODE XREF: SCI_JMP_15+17j ; SCI_JMP_15+1Fj oim #8, STATUS_8D ; set bit3, clear bit4 aim #$EF, STATUS_8D ; '' rts ; End of function SCI_JMP_15 ; =============== S U B R O U T I N E ======================================= SCI_JMP_14: ldaa byte_C6D8 ; set to 1 for software test mode? beq loc_CDF5 cmpa #$10 beq loc_CDF9 ; set bit5 cmpa #$11 beq loc_CDFD loc_CDF5: ; CODE XREF: SCI_JMP_14+3j cmpb #$18 bcs loc_CDFD loc_CDF9: ; CODE XREF: SCI_JMP_14+7j oim #$20, STATUS_8D ; ' ' ; set bit5 rts ; --------------------------------------------------------------------------- loc_CDFD: ; CODE XREF: SCI_JMP_14+Bj ; SCI_JMP_14+Fj aim #$DF, STATUS_8D ; '' rts ; End of function SCI_JMP_14 ; =============== S U B R O U T I N E ======================================= AIN7_TPS: tba cmpa #5 bcc loc_CE22 tim #$10, INT_FC0 bne loc_CE11 oim #$10, INT_FC0 clr TPS_COUNT? loc_CE11: ; CODE XREF: AIN7_TPS+8j ldab TPS_COUNT? incb beq loc_CE1D ; set Code 22 - TPS? stab TPS_COUNT? cmpb byte_C0B3 bcs loc_CE4D loc_CE1D: ; CODE XREF: AIN7_TPS+13j oim #$10, FCodes0 ; set Code 22 - TPS? bra loc_CE4D ; --------------------------------------------------------------------------- loc_CE22: ; CODE XREF: AIN7_TPS+3j tim #$10, INT_FC0 bne loc_CE2A aim #$EF, FCodes0 ; '' ; clear Code 22 - TPS? loc_CE2A: ; CODE XREF: AIN7_TPS+24j aim #$EF, INT_FC0 ; '' cmpa #$FA ; '' bls loc_CE4D tim #8, INT_FC0 bne loc_CE3C oim #8, INT_FC0 clr TPS_COUNT? loc_CE3C: ; CODE XREF: AIN7_TPS+33j ldab TPS_COUNT? incb beq loc_CE48 ; set Code 21 - TPS? stab TPS_COUNT? cmpb byte_C0B3 bcs loc_CE58 loc_CE48: ; CODE XREF: AIN7_TPS+3Ej oim #8, FCodes0 ; set Code 21 - TPS? bra loc_CE58 ; --------------------------------------------------------------------------- loc_CE4D: ; CODE XREF: AIN7_TPS+1Aj AIN7_TPS+1Fj ... tim #8, INT_FC0 bne loc_CE55 aim #$F7, FCodes0 ; '' ; clear Code 21 - TPS? loc_CE55: ; CODE XREF: AIN7_TPS+4Fj aim #$F7, INT_FC0 ; '' loc_CE58: ; CODE XREF: AIN7_TPS+45j AIN7_TPS+4Aj tim #$18, INT_FC0 beq loc_CE5F ldaa #$33 ; '3' loc_CE5F: ; CODE XREF: AIN7_TPS+5Aj ldab TPSV? staa TPSV? tim #4, SCI_STATUS_53 bne loc_CE6D ; TPSV - TPSV? oim #4, SCI_STATUS_53 bra loc_CE70 ; --------------------------------------------------------------------------- loc_CE6D: ; CODE XREF: AIN7_TPS+65j sba ; TPSV - TPSV? bcc loc_CE71 ; delta TPS? loc_CE70: ; CODE XREF: AIN7_TPS+6Aj clra loc_CE71: ; CODE XREF: AIN7_TPS+6Dj staa byte_103 ; delta TPS? oim #1, byte_5C rts ; End of function AIN7_TPS ; =============== S U B R O U T I N E ======================================= AIN1_AFM: pshb ; save off B lsrd ; shift right five lsrd lsrd lsrd lsrd xgdx ; save off into X cpx #$29 ; ')' bcc loc_CEA3 aim #$FD, SCI_STATUS_53 ; '' tim #1, SCI_STATUS_53 bne loc_CE92 oim #1, SCI_STATUS_53 clr AFM_COUNT? loc_CE92: ; CODE XREF: AIN1_AFM+12j ldab AFM_COUNT? incb beq loc_CE9E ; set code 33 - AFM stab AFM_COUNT? cmpb byte_C0B4 ; FFh bcs loc_CED4 loc_CE9E: ; CODE XREF: AIN1_AFM+1Dj oim #1, FCodes1 ; set code 33 - AFM bra loc_CED4 ; --------------------------------------------------------------------------- loc_CEA3: ; CODE XREF: AIN1_AFM+Aj cpx #$7D7 bcs loc_CEC7 aim #$FE, SCI_STATUS_53 ; '' tim #2, SCI_STATUS_53 bne loc_CEB6 oim #2, SCI_STATUS_53 clr AFM_COUNT? loc_CEB6: ; CODE XREF: AIN1_AFM+36j ldab AFM_COUNT? incb beq loc_CEC2 ; set Code 33 - AFM stab AFM_COUNT? cmpb byte_C0B4 ; FFh bcs loc_CED4 loc_CEC2: ; CODE XREF: AIN1_AFM+41j oim #1, FCodes1 ; set Code 33 - AFM bra loc_CED4 ; --------------------------------------------------------------------------- loc_CEC7: ; CODE XREF: AIN1_AFM+2Ej tim #3, SCI_STATUS_53 bne loc_CECF aim #$FE, FCodes1 ; '' ; clear Code 33 - AFM loc_CECF: ; CODE XREF: AIN1_AFM+52j aim #$FC, SCI_STATUS_53 ; '' bra loc_CEED ; --------------------------------------------------------------------------- loc_CED4: ; CODE XREF: AIN1_AFM+24j AIN1_AFM+29j ... tim #3, SCI_STATUS_53 beq loc_CEED ldx #$C0A6 tim #$20, STATUS_8D ; ' ' ; check bit5 bne loc_CEE4 ldx #$C0AA loc_CEE4: ; CODE XREF: AIN1_AFM+67j tim #1, STATUS_8C bne loc_CEEB inx inx loc_CEEB: ; CODE XREF: AIN1_AFM+6Fj ldx 0,x loc_CEED: ; CODE XREF: AIN1_AFM+5Aj AIN1_AFM+5Fj xgdx tim #$10, SCI_STATUS_53 bne loc_CEF8 ; average with last AFM reading oim #$10, SCI_STATUS_53 bra loc_CEFB ; --------------------------------------------------------------------------- loc_CEF8: ; CODE XREF: AIN1_AFM+79j addd AFM ; average with last AFM reading lsrd loc_CEFB: ; CODE XREF: AIN1_AFM+7Ej std AFM pulb ; store new reading andb #$1F eorb #8 stab STATUS_5B rts ; End of function AIN1_AFM ; =============== S U B R O U T I N E ======================================= AIN3_O2S: cmpa #$40 ; '@' bcs loc_CF0D ldaa #$FF bra loc_CF0F ; --------------------------------------------------------------------------- loc_CF0D: ; CODE XREF: AIN3_O2S+2j lsld lsld loc_CF0F: ; CODE XREF: AIN3_O2S+6j staa O2S_Volts rts ; End of function AIN3_O2S ; =============== S U B R O U T I N E ======================================= sub_CF12: ; CODE XREF: ROM:JMP_0_5P ROM:EF3DP ldaa byte_52 inca cmpa #3 bls loc_CF22 ldd #$81A std RMCR aim #$1F, SCI_STATUS_53 clra loc_CF22: ; CODE XREF: sub_CF12+5j staa byte_52 rts ; End of function sub_CF12 ; =============== S U B R O U T I N E ======================================= sub_CF25: ; CODE XREF: sub_C820+133P ldd byte_E9 lsld bcc loc_CF2D ldd #$FFFF loc_CF2D: ; CODE XREF: sub_CF25+3j xgdx cpx #$400 bcc loc_CF36 ldx #$400 loc_CF36: ; CODE XREF: sub_CF25+Cj xgdx ldx #$CF7C loc_CF3A: ; CODE XREF: sub_CF25+1Bj cmpa #7 bls loc_CF42 lsrd dex bra loc_CF3A ; --------------------------------------------------------------------------- loc_CF42: ; CODE XREF: sub_CF25+17j pshx lsld asla ldx #$CF55 stab byte_44 tab abx ldd 0,x std byte_46 subd 2,x stab RICH_COUNT? ldab byte_44 mul xgdx ldd byte_44 mul tab abx xgdx subd byte_46 coma negb sbca #$FF rts ; End of function sub_CF25 ; --------------------------------------------------------------------------- fcb $3A ; : fcb $98 ; fcb $34 ; 4 fcb $15 fcb $2E ; . fcb $E0 ; fcb $2A ; * fcb $9D ; fcb $27 ; ' fcb $10 fcb $24 ; $ fcb $F fcb $21 ; ! fcb $7B ; { fcb $1F fcb $40 ; @ fcb $1D fcb $4C ; L fcb 4 fcb 4 fcb 4 fcb 4 fcb 4 ; --------------------------------------------------------------------------- X_CF7C: ldx RPMH std RPMH xgdx addd #$80 ; '' subd RPMH bcc loc_CF8A clra clrb loc_CF8A: ; CODE XREF: ROM:CF86j tsta beq loc_CF8F ldab #$FF loc_CF8F: ; CODE XREF: ROM:CF8Bj addb byte_A8 rorb stab byte_A8 ldd RPMH lsld lsld lsld bcc loc_CF9D ldaa #$FF loc_CF9D: ; CODE XREF: ROM:CF99j cmpa #$30 ; '0' bcs loc_CFA5 cmpa #$70 ; 'p' bcs loc_CFA9 loc_CFA5: ; CODE XREF: ROM:CF9Fj ldab #$26 ; '&' stab byte_C3 loc_CFA9: ; CODE XREF: ROM:CFA3j staa byte_46 ldd #$108 ; --------------------------------------------------------------------------- JMP_TBL_?: fdb $DD44 fdb $D680 ; CALC_AIRFLOW fdb $CEC0 ; --------------------------------------------------------------------------- sba jsr sub_F01C stab byte_80 ldd #$104 std byte_44 ldd TIDLE lsld lsld lsld ldab byte_81 std byte_40 jsr sub_F01C ldaa byte_40 jsr sub_F04A ldaa byte_40 jsr sub_F04A ldaa byte_40 jsr sub_F044 ldaa byte_B8 tim #2, STATUS_5A ; test AC Switch beq loc_CFE3 ldaa byte_B9 loc_CFE3: ; CODE XREF: ROM:CFDFj jsr sub_F044 tim #2, byte_91 beq loc_D00C tim #$80, byte_81 ; '' beq loc_D00C bitb #$80 ; '' bne loc_D00C ldx #$C18E ldaa byte_A8 cmpa byte_C192 bcs loc_D008 inx cmpa byte_C193 bcc loc_D008 ldaa #$80 ; '' bra loc_D00A ; --------------------------------------------------------------------------- loc_D008: ; CODE XREF: ROM:CFFCj ROM:D002j ldaa 0,x loc_D00A: ; CODE XREF: ROM:D006j staa byte_9A loc_D00C: ; CODE XREF: ROM:CFE9j ROM:CFEEj ... stab byte_81 tim #$80, STATUS_5A ; '' ; test idle switch beq loc_D036 tim #4, byte_CC beq loc_D036 tim #$20, byte_41 ; ' ' beq loc_D036 tim #$20, byte_81 ; ' ' bne loc_D036 ldaa byte_A8 cmpa byte_C61E bcs loc_D036 ldaa byte_DC bne loc_D036 ldaa byte_C626 cmpa byte_DF bls loc_D036 staa byte_DF loc_D036: ; CODE XREF: ROM:D011j ROM:D016j ... ldd #$103 std byte_44 ldx #$C02E tim #$20, STATUS_8D ; ' ' bne loc_D046 ldx #$C034 loc_D046: ; CODE XREF: ROM:D041j ldab byte_82 jsr sub_F01C stab byte_82 tim #$20, STATUS_5A ; ' ' beq loc_D06E tim #1, byte_80 bne loc_D06E ldaa #1 staa byte_91 oim #8, STATUS_90 ldaa byte_CC anda #$1C oraa #2 staa byte_CC ldaa byte_C394 staa byte_120 bra locret_D071 ; --------------------------------------------------------------------------- loc_D06E: ; CODE XREF: ROM:D050j ROM:D055j aim #$FE, byte_91 ; '' locret_D071: ; CODE XREF: ROM:D06Cj rts ; =============== S U B R O U T I N E ======================================= sub_D072: ; CODE XREF: sub_C820+114P ldd AFM std byte_40 cmpa #5 bcs loc_D07D ldd #$500 loc_D07D: ; CODE XREF: sub_D072+6j subd #$100 bcc loc_D084 clra clrb loc_D084: ; CODE XREF: sub_D072+Ej lsld ldx #$C0B6 tim #$10, STATUS_8D bne loc_D090 ldx #$C0BF loc_D090: ; CODE XREF: sub_D072+19j jsr sub_F1A2 staa byte_66 ldx byte_40 cpx #$40 ; '@' bcc loc_D09F ldx #$40 ; '@' loc_D09F: ; CODE XREF: sub_D072+28j xgdx lsld lsld lsld lsld ldx #$D0F9 ; jump table loc_D0A7: ; CODE XREF: sub_D072+3Cj cmpa #$40 ; '@' bcc loc_D0B0 lsld inx inx bra loc_D0A7 ; --------------------------------------------------------------------------- loc_D0B0: ; CODE XREF: sub_D072+37j pshx ldx #$D083 jsr sub_F1EF std byte_40 ldd byte_E9 lsld bcc loc_D0C1 ldd #$FFFF loc_D0C1: ; CODE XREF: sub_D072+4Aj xgdx ldd byte_40 jsr sub_F08B xgdx rts ; End of function sub_D072 ; --------------------------------------------------------------------------- loc_D0C9: ; CODE XREF: ROM:JMP_TBL_1j lsrd lsrd loc_D0CB: ; CODE XREF: ROM:D0FBj lsrd lsrd bra loc_D0F6 ; --------------------------------------------------------------------------- loc_D0CF: ; CODE XREF: ROM:D101j bita #$F0 ; '' bne loc_D0F1 lsld lsld lsld lsld xgdx lsra lsra lsra lsra tab abx xgdx bra loc_D0F6 ; --------------------------------------------------------------------------- loc_D0E1: ; CODE XREF: ROM:D0FFj bita #$C0 ; '' bne loc_D0F1 lsld lsld xgdx clrb asla rolb asla rolb abx xgdx bra loc_D0F6 ; --------------------------------------------------------------------------- loc_D0F1: ; CODE XREF: ROM:D0D1j ROM:D0E3j ldd #$FFFF bra *+2 loc_D0F6: ; CODE XREF: ROM:D0CDj ROM:D0DFj ... jmp loc_D185 ; --------------------------------------------------------------------------- JMP_TBL_1: bra loc_D0C9 ; --------------------------------------------------------------------------- bra loc_D0CB ; --------------------------------------------------------------------------- bra loc_D0F6 ; --------------------------------------------------------------------------- bra loc_D0E1 ; --------------------------------------------------------------------------- bra loc_D0CF ; --------------------------------------------------------------------------- X_D103: fdb $D7B9,$D122,$CAD8,$C4D6,$BF17,$B997,$B453,$AF48,$AA72,$A5CF; 0 fdb $A15B,$9D15,$98FA,$9507,$913B,$8D94,$8A10,$86AC,$8368,$8043; 10 fdb $7D3A,$7A4C,$7778,$74BD,$7219,$6F8D,$6D16,$6AB3,$6865,$6629; 20 fdb $6400,$61E7,$5FE0,$5DE8,$5C00,$5A27,$585C,$569E,$54ED,$5349; 30 fdb $51B1,$5025,$4EA3,$4D2D,$4BC1,$4A5E,$4906,$47B7,$4670,$4532; 40 fdb $43FD,$42D0,$41AA,$408C,$3F75,$3E65,$3D5C,$3C59,$3B5D,$3A67; 50 fdb $3977,$388C,$37A8,$36C8,$35EE; 60 ; --------------------------------------------------------------------------- loc_D185: ; CODE XREF: ROM:loc_D0F6J xgdx ldaa byte_C0AE jsr sub_F0B3 std byte_67 xgdx ldaa byte_66 jsr sub_F0B3 std byte_69 ldaa byte_97 ldab #$20 ; ' ' mul xgdx cpx byte_69 bls loc_D1C3 ldx RPMH cpx #$1C00 ; 7000 RPM bls loc_D1AA ldx #$1C00 ; limit RPM to 7000 loc_D1AA: ; CODE XREF: ROM:D1A5j xgdx subd #$200 ; 6500 RPM bcc loc_D1B2 clra clrb loc_D1B2: ; CODE XREF: ROM:D1AEj lsrd ldx #$C1CE jsr sub_F1A2 lsrd lsrd lsrd xgdx cpx byte_69 bcc loc_D1C3 ldx byte_69 loc_D1C3: ; CODE XREF: ROM:D19Ej ROM:D1BFj stx byte_6B rts ; =============== S U B R O U T I N E ======================================= sub_D1C6: ; CODE XREF: sub_C820+136P ldx byte_6B cpx #$5DC ; 1500 * 0.98 ? bcs loc_D1D2 cpx #$DAC ; 3500*0.98 RPM? bcs loc_D1D6 loc_D1D2: ; CODE XREF: sub_D1C6+5j ldab #$26 ; '&' stab byte_C3 loc_D1D6: ; CODE XREF: sub_D1C6+Aj ldd byte_6B tim #$20, STATUS_5A ; ' ' bne loc_D1E2 tim #6, byte_91 beq loc_D1F0 loc_D1E2: ; CODE XREF: sub_D1C6+15j std byte_6F std byte_71 std byte_6D clr byte_73 clr byte_74 bra loc_D25E ; --------------------------------------------------------------------------- loc_D1F0: ; CODE XREF: sub_D1C6+1Aj ldx #$F800 tim #$80, byte_86 ; '' bne loc_D20A ldaa byte_BC cmpa byte_C1A4 bcc loc_D20A ldx #$F900 cmpa byte_C1A3 bcc loc_D20A ldx #$FA00 loc_D20A: ; CODE XREF: sub_D1C6+30j sub_D1C6+37j ... stx byte_44 ldd byte_6B ldx #$6F ; 'o' jsr sub_F21F std byte_6F ldd byte_6B ldx #$C000 stx byte_44 ldx #$71 ; 'q' jsr sub_F21F std byte_71 ldd byte_6B ldx byte_C0B5 stx byte_44 ldx #$6D ; 'm' jsr sub_F21F std byte_6D ldd byte_6B subd byte_6F bcc loc_D23D clrb bra loc_D246 ; --------------------------------------------------------------------------- loc_D23D: ; CODE XREF: sub_D1C6+72j lsrd lsrd lsrd lsrd tsta beq loc_D246 ldab #$FF loc_D246: ; CODE XREF: sub_D1C6+75j sub_D1C6+7Cj stab byte_73 ldd byte_6B subd byte_71 bcc loc_D251 clrb bra loc_D25A ; --------------------------------------------------------------------------- loc_D251: ; CODE XREF: sub_D1C6+86j lsrd lsrd lsrd lsrd tsta beq loc_D25A ldab #$FF loc_D25A: ; CODE XREF: sub_D1C6+89j sub_D1C6+90j stab byte_74 ldd byte_6B loc_D25E: ; CODE XREF: sub_D1C6+28j lsld lsld lsld staa byte_75 staa byte_46 ldd #$108 std byte_44 ldab byte_83 ldx #$C03A jsr sub_F01C stab byte_83 ldd #$101 std byte_44 ldab byte_84 jsr sub_F01C stab byte_84 rts ; End of function sub_D1C6 ; =============== S U B R O U T I N E ======================================= sub_D281: ; CODE XREF: sub_C820+190P ldaa unk_2000 eora #$66 ; 'f' staa STATUS_5A bita #$20 ; ' ' bne loc_D295 bita #1 beq loc_D295 oim #4, STATUS_8C bra loc_D298 ; test idle switch ; --------------------------------------------------------------------------- loc_D295: ; CODE XREF: sub_D281+9j sub_D281+Dj aim #$FB, STATUS_8C ; '' loc_D298: ; CODE XREF: sub_D281+12j tim #$80, STATUS_5A ; '' ; test idle switch bne loc_D2A2 aim #$FD, STATUS_8C ; '' bra loc_D2C1 ; --------------------------------------------------------------------------- loc_D2A2: ; CODE XREF: sub_D281+1Aj tim #2, STATUS_8C beq loc_D2BE tim #1, STATUS_8C bne loc_D2BC ldaa byte_8F beq loc_D2B5 deca staa byte_8F bra loc_D2BC ; --------------------------------------------------------------------------- loc_D2B5: ; CODE XREF: sub_D281+2Dj oim #1, STATUS_8C ldaa #6 staa byte_C9 loc_D2BC: ; CODE XREF: sub_D281+29j sub_D281+32j bra locret_D2DB ; --------------------------------------------------------------------------- loc_D2BE: ; CODE XREF: sub_D281+24j oim #2, STATUS_8C loc_D2C1: ; CODE XREF: sub_D281+1Fj ldaa #$55 ; 'U' staa byte_C8 tim #1, STATUS_8C beq loc_D2D7 jsr sub_DB52 aim #$FE, STATUS_8C ; '' ldaa byte_64 inca beq loc_D2D7 staa byte_64 loc_D2D7: ; CODE XREF: sub_D281+47j sub_D281+52j ldaa #$3E ; '>' staa byte_8F locret_D2DB: ; CODE XREF: sub_D281:loc_D2BCj rts ; End of function sub_D281 ; =============== S U B R O U T I N E ======================================= SETUP_DIAG: ; CODE XREF: sub_C820+196P sei ldaa ACIA_STATUS ; get ACIA_Status bita #$20 ; ' ' ; test ACIA_Status bne loc_D2EB clrb stab ACIA_RX_COUNT stab ACIA_CSUM loc_D2EB: ; CODE XREF: SETUP_DIAG+6j anda #$DF ; '' staa ACIA_STATUS ; clear ? ACIA_Status cli ldd INJ_PW1 ; injector pulse width addd INJ_PW2 ; injector dead time bcc loc_D2FB ; total Pulse Width ldd #$FFFF loc_D2FB: ; CODE XREF: SETUP_DIAG+1Aj std INJPWH ; total Pulse Width ldaa IGNADV tim #$10, byte_E6 ; base advance required ??? idle??? beq loc_D308 ldaa #$30 ; '0' ; base advance loc_D308: ; CODE XREF: SETUP_DIAG+28j staa IGNADV_OBD clrb ; set up B for STATUS1 tim #1, STATUS_90 ; check Rich/Lean beq loc_D313 ; get PIA_PORTn orab #1 ; set Rich/lean bit loc_D313: ; CODE XREF: SETUP_DIAG+33j ldaa PIA_PORTB ; get PIA_PORTn bita #8 ; test EGR output bne loc_D31C ; test Evap Purge Output orab #2 ; set EGR status bit loc_D31C: ; CODE XREF: SETUP_DIAG+3Cj bita #$10 ; test Evap Purge Output bne loc_D322 ; set status 1 register orab #4 ; set Evap Purge Status bit loc_D322: ; CODE XREF: SETUP_DIAG+42j stab STATUS1 ; set status 1 register clrb ; reset B for status2 tim #4, byte_8E beq loc_D32D ; test PS Switch orab #1 ; status bit? loc_D32D: ; CODE XREF: SETUP_DIAG+4Dj tim #8, STATUS_5B ; test PS Switch beq loc_D334 ; get PN/D status orab #2 ; set PS status bit loc_D334: ; CODE XREF: SETUP_DIAG+54j tim #4, STATUS_8C ; get PN/D status beq loc_D33B orab #8 ; set PN/D status bit loc_D33B: ; CODE XREF: SETUP_DIAG+5Bj ldaa STATUS_5A bita #2 ; test AC SW status beq loc_D343 ; test idle switch orab #4 ; set AC status bit loc_D343: ; CODE XREF: SETUP_DIAG+63j bita #$80 ; '' ; test idle switch beq loc_D349 ; *** P17 *** orab #$10 ; set idle switch status bit loc_D349: ; CODE XREF: SETUP_DIAG+69j tim #$80, PORT1 ; '' ; *** P17 *** beq loc_D350 ; set STATUS2 orab #$20 ; ' ' loc_D350: ; CODE XREF: SETUP_DIAG+70j stab STATUS2 ; set STATUS2 rts ; End of function SETUP_DIAG ; =============== S U B R O U T I N E ======================================= sub_D354: ; CODE XREF: sub_C820+193P tim #2, STATUS_90 beq loc_D35F aim #$FD, STATUS_90 ; '' clr byte_C0 loc_D35F: ; CODE XREF: sub_D354+3j clrb tim #1, STATUS_90 ; check Rich/Lean beq loc_D366 incb loc_D366: ; CODE XREF: sub_D354+Fj stab RICH_COUNT? ldab O2S_Volts clra cmpb #$5C ; '\' bcs loc_D370 inca loc_D370: ; CODE XREF: sub_D354+19j staa byte_44 ldx #$C088 tim #$10, STATUS_8D bne loc_D385 ldx #$C08A tim #8, STATUS_8D beq loc_D385 ldx #$C08C loc_D385: ; CODE XREF: sub_D354+24j sub_D354+2Cj tim #$20, STATUS_8D ; ' ' bne loc_D38B inx loc_D38B: ; CODE XREF: sub_D354+34j ldaa byte_BE jsr sub_F2A0 staa byte_BE ldaa STATUS_90 tim #$FF, byte_44 beq loc_D39D eora #1 ; test for Rich/Lean change oraa #$10 loc_D39D: ; CODE XREF: sub_D354+43j staa byte_40 ldx byte_C1 ldab O2S_Volts subb #$5C ; '\' bls loc_D3A8 abx loc_D3A8: ; CODE XREF: sub_D354+51j ldab byte_BF decb bne loc_D3F8 stx byte_42 ldx #$C098 ; 266h tim #$10, STATUS_8D bne loc_D3C2 ldx #$C09C ; 266h tim #8, STATUS_8D beq loc_D3C2 ldx #$C0A0 ; 266h loc_D3C2: ; CODE XREF: sub_D354+61j sub_D354+69j tim #2, byte_81 beq loc_D3CE tim #1, byte_84 beq loc_D3CE inx inx loc_D3CE: ; CODE XREF: sub_D354+71j sub_D354+76j ldx 0,x cpx byte_42 bcc loc_D3DC oim #4, byte_40 clr byte_C0 bra loc_D3F3 ; --------------------------------------------------------------------------- loc_D3DC: ; CODE XREF: sub_D354+7Ej ldaa byte_C0 inca beq loc_D3F0 staa byte_C0 ldx #$C0A4 tim #6, byte_91 beq loc_D3EC inx loc_D3EC: ; CODE XREF: sub_D354+95j cmpa 0,x bcs loc_D3F3 loc_D3F0: ; CODE XREF: sub_D354+8Bj aim #$FB, byte_40 ; '' loc_D3F3: ; CODE XREF: sub_D354+86j sub_D354+9Aj ldx #0 ldab #$1E loc_D3F8: ; CODE XREF: sub_D354+57j stx byte_C1 stab byte_BF ldaa byte_40 staa STATUS_90 rts ; End of function sub_D354 ; =============== S U B R O U T I N E ======================================= sub_D401: ; CODE XREF: ROM:CA9DP tim #$40, STATUS_8C ; '@' bne loc_D416 ldaa WTS ; test engine temp cmpa #$B0 ; '' ; WTS - 70C bcs loc_D416 tim #1, FCodes1 ; test AFM bne loc_D416 tim #$A6, FCodes0 ; '' ; test IAT and WTS beq loc_D41C Come here if WTS<70C or there is a fault code loc_D416: ; CODE XREF: sub_D401+3j sub_D401+9j ... ldaa #$26 ; '&' staa byte_C3 bra locret_D449 ; --------------------------------------------------------------------------- come here if WTS>70C and no fault codes loc_D41C: ; CODE XREF: sub_D401+13j ldaa byte_C3 beq loc_D421 deca loc_D421: ; CODE XREF: sub_D401+1Dj bne loc_D447 ldaa byte_C4 tim #4, STATUS_90 bne loc_D42D inca bra loc_D431 ; --------------------------------------------------------------------------- loc_D42D: ; CODE XREF: sub_D401+27j tsta beq loc_D431 deca loc_D431: ; CODE XREF: sub_D401+2Aj sub_D401+2Dj cmpa #5 bhi loc_D43A aim #$FE, FCodes0 ; '' ; clear Code 13 - O2Sensor bra loc_D443 ; --------------------------------------------------------------------------- loc_D43A: ; CODE XREF: sub_D401+32j cmpa #$A bcs loc_D443 oim #1, FCodes0 ; set Code 13 - O2Sensor ldaa #$A loc_D443: ; CODE XREF: sub_D401+37j sub_D401+3Bj staa byte_C4 ldaa #$26 ; '&' loc_D447: ; CODE XREF: sub_D401:loc_D421j staa byte_C3 locret_D449: ; CODE XREF: sub_D401+19j rts ; End of function sub_D401 ; =============== S U B R O U T I N E ======================================= sub_D44A: ; CODE XREF: sub_C820+199P ldaa TPSV? staa byte_40 ldab #$32 ; '2' tim #$18, FCodes0 ; test TPS bne loc_D46C ldaa byte_64 cmpa #$33 ; '3' bcs loc_D45D ldaa #$33 ; '3' loc_D45D: ; CODE XREF: sub_D44A+Fj tab tim #1, STATUS_8C beq loc_D46C suba byte_40 bcs loc_D46C lsra staa byte_41 subb byte_41 loc_D46C: ; CODE XREF: sub_D44A+9j sub_D44A+17j ... tba staa byte_64 ldaa byte_40 sba bcc loc_D475 clra loc_D475: ; CODE XREF: sub_D44A+28j staa TPSA cmpa #1 bls loc_D48E tim #$10, byte_CC beq loc_D485 aim #$EF, byte_CC ; '' bra loc_D49D ; --------------------------------------------------------------------------- loc_D485: ; CODE XREF: sub_D44A+34j aim #$F3, byte_CC ; '' ldaa #$3F ; '?' staa byte_D8 bra loc_D49D ; --------------------------------------------------------------------------- loc_D48E: ; CODE XREF: sub_D44A+2Fj oim #$14, byte_CC ldaa byte_D8 beq loc_D49A deca staa byte_D8 bra loc_D49D ; --------------------------------------------------------------------------- loc_D49A: ; CODE XREF: sub_D44A+49j oim #8, byte_CC loc_D49D: ; CODE XREF: sub_D44A+39j sub_D44A+42j ... ldd RPMH cmpa #$18 ; 6000 RPM bcs loc_D4A6 ; 5000 RPM ldd #$1800 loc_D4A6: ; CODE XREF: sub_D44A+57j suba #4 ; 5000 RPM bcc loc_D4AC clra clrb loc_D4AC: ; CODE XREF: sub_D44A+5Ej lsrd ldx #$C0D6 jsr sub_F1A2 staa byte_40 ldx #$C0E1 clrb tim #$10, STATUS_8D bne loc_D4C0 addb #$12 loc_D4C0: ; CODE XREF: sub_D44A+72j tim #$20, STATUS_8D ; ' ' bne loc_D4C7 addb #9 loc_D4C7: ; CODE XREF: sub_D44A+79j abx ldd RPMH cmpa #$14 ; 5000 RPM bcs loc_D4D1 ldd #$1400 loc_D4D1: ; CODE XREF: sub_D44A+82j suba #4 ; 4000 RPM bcc loc_D4D7 clra clrb loc_D4D7: ; CODE XREF: sub_D44A+89j lsrd jsr sub_F1A2 staa byte_41 ldaa TPSA staa byte_46 ldaa #1 staa byte_44 ldab byte_85 stab byte_42 ldx #$C04C ldaa byte_40 jsr sub_F044 ldaa byte_41 jsr sub_F044 ldaa #4 staa RICH_COUNT? jsr sub_F01C stab byte_85 tim #$18, STATUS_8D bne locret_D519 tim #$20, byte_42 ; ' ' bne locret_D519 tim #$20, byte_85 ; ' ' beq locret_D519 ldaa byte_103 cmpa byte_C39A bcs locret_D519 oim #4, byte_E6 locret_D519: ; CODE XREF: sub_D44A+B8j sub_D44A+BDj ... rts ; End of function sub_D44A ; =============== S U B R O U T I N E ======================================= sub_D51A: ; CODE XREF: sub_C820+19CP tim #4, STATUS_8C bne loc_D532 aim #$7F, STATUS_8C ; '' clr byte_CA ldaa byte_CB beq loc_D52E deca staa byte_CB bra locret_D531 ; --------------------------------------------------------------------------- loc_D52E: ; CODE XREF: sub_D51A+Dj aim #$F7, STATUS_8C ; '' locret_D531: ; CODE XREF: sub_D51A+12j rts ; --------------------------------------------------------------------------- loc_D532: ; CODE XREF: sub_D51A+3j ldaa byte_C0B0 staa byte_CB tim #$80, STATUS_8C ; '' beq loc_D54F ldaa byte_CA beq locret_D559 deca staa byte_CA bne locret_D559 loc_D545: ; CODE XREF: sub_D51A+3Dj tim #8, STATUS_8C bne locret_D559 oim #$18, STATUS_8C bra locret_D559 ; --------------------------------------------------------------------------- loc_D54F: ; CODE XREF: sub_D51A+20j oim #$80, STATUS_8C ; '' ldaa byte_C0AF staa byte_CA beq loc_D545 locret_D559: ; CODE XREF: sub_D51A+24j sub_D51A+29j ... rts ; End of function sub_D51A ; =============== S U B R O U T I N E ======================================= sub_D55A: ; CODE XREF: ROM:CA1AP tim #$18, FCodes0 ; test TPS beq loc_D56C ldx #$4B ; 'K' tim #$10, FCodes0 ; test TPS bne loc_D59F ldx #$BB8 bra loc_D59F ; --------------------------------------------------------------------------- loc_D56C: ; CODE XREF: sub_D55A+3j clra ldab #$1B addb TPSV? adca #0 subb byte_64 sbca #0 bcc loc_D57B clra clrb loc_D57B: ; CODE XREF: sub_D55A+1Dj tsta beq loc_D580 ldab #$FF loc_D580: ; CODE XREF: sub_D55A+22j tba ldx #$B4F jsr MULT_8x16? subd #$5B ; '[' bcc loc_D58E clra clrb loc_D58E: ; CODE XREF: sub_D55A+30j xgdx cpx #$7D ; '}' bcc loc_D597 ldx #$7D ; '}' loc_D597: ; CODE XREF: sub_D55A+38j cpx #$915 bls loc_D59F ldx #$915 loc_D59F: ; CODE XREF: sub_D55A+Bj sub_D55A+10j ... stx word_124 rts ; End of function sub_D55A ; =============== S U B R O U T I N E ======================================= sub_D5A3: ; CODE XREF: sub_C820+1A8P ldaa byte_E7 inca beq loc_D5AB inc byte_E7 loc_D5AB: ; CODE XREF: sub_D5A3+3j ldaa byte_E7 cmpa #$26 ; '&' bls locret_D5F3 tim #$40, STATUS_8C ; '@' bne locret_D5F3 sei oim #$40, STATUS_8C ; '@' oim #$10, byte_E6 ldx #$2002 ; PIA_PORTB oim #$20, 0,x ; ' ' ldaa #5 staa byte_FF ldd #$FFFF stab byte_E8 std byte_E9 ldx byte_19 ldab #3 abx stx byte_1B ; Output Compare Register oim #1, byte_18 ; timer control? cli ldaa #1 staa byte_91 clra clrb std RPMH staa byte_100 std word_101 staa byte_80 staa byte_81 staa byte_82 staa byte_83 staa byte_84 staa byte_BC locret_D5F3: ; CODE XREF: sub_D5A3+Cj sub_D5A3+11j rts ; End of function sub_D5A3 ; =============== S U B R O U T I N E ======================================= DoHistory: ; CODE XREF: sub_C820+1BDP ldd FCodes2 eorb #$FF cba bne loc_D616 oraa FCodes0 tab eorb #$FF std FCodes2 ldd FCodes3 eorb #$FF cba bne loc_D616 oraa FCodes1 tab eorb #$FF std FCodes3 bra locret_D619 ; --------------------------------------------------------------------------- loc_D616: ; CODE XREF: DoHistory+6j ; DoHistory+16j jsr RESET_RAM locret_D619: ; CODE XREF: DoHistory+20j rts ; End of function DoHistory ; =============== S U B R O U T I N E ======================================= sub_D61A: ; CODE XREF: sub_C820+1C0P ldx AFM cpx #$80 ; '' bcc loc_D624 ldx #$80 ; '' loc_D624: ; CODE XREF: sub_D61A+5j xgdx lsld lsld lsld lsld lsld ldx #$D680 ; LUT? loc_D62D: ; CODE XREF: sub_D61A+1Aj cmpa #$1F bls loc_D636 lsrd dex dex bra loc_D62D ; --------------------------------------------------------------------------- loc_D636: ; CODE XREF: sub_D61A+15j pshx asla ldx #$D638 ; LUT? stab byte_44 tab abx ldd 0,x std byte_46 subd 2,x stab RICH_COUNT? ldab byte_44 mul xgdx ldd byte_44 mul tab abx xgdx subd byte_46 coma negb sbca #$FF rts ; End of function sub_D61A ; --------------------------------------------------------------------------- AIRFLOW_LUT: fdb $51F,$489,$40C,$3A1,$347,$2F9,$2B5,$27A; 0 fdb $247,$219,$1F0,$1CC,$1AC,$18F,$175,$15D; 8 fdb $148 ; 16 fcb 4 fcb 4 fcb 4 fcb 4 fcb 4 fcb 4 ; --------------------------------------------------------------------------- X_D680: tsta beq loc_D685 ldab #$FF loc_D685: ; CODE XREF: ROM:D681j stab AIRFLOW rts ; =============== S U B R O U T I N E ======================================= TEST_IFS: ; CODE XREF: ROM:JMP_0_1P ldaa IFS_COUNT bne locret_D690 oim #2, FCodes1 ; Set IFS fault locret_D690: ; CODE XREF: TEST_IFS+2j rts ; End of function TEST_IFS ; =============== S U B R O U T I N E ======================================= sub_D691: ; CODE XREF: ROM:CA3FP tim #4, STATUS_5A beq loc_D6A3 tim #2, byte_8E beq loc_D69E oim #4, byte_8E loc_D69E: ; CODE XREF: sub_D691+8j oim #2, byte_8E bra locret_D6A6 ; --------------------------------------------------------------------------- loc_D6A3: ; CODE XREF: sub_D691+3j aim #$F9, byte_8E ; '' locret_D6A6: ; CODE XREF: sub_D691+10j rts ; End of function sub_D691 ; =============== S U B R O U T I N E ======================================= sub_D6A7: ; CODE XREF: ROM:JMP_0_2P ldaa byte_121 beq locret_D6B0 deca staa byte_121 locret_D6B0: ; CODE XREF: sub_D6A7+3j rts ; End of function sub_D6A7 ; =============== S U B R O U T I N E ======================================= sub_D6B1: ; CODE XREF: ROM:CA6EP tim #1, byte_91 bne loc_D6BF ldaa byte_120 beq loc_D6BF deca staa byte_120 loc_D6BF: ; CODE XREF: sub_D6B1+3j sub_D6B1+8j ldaa byte_BD beq loc_D6C6 deca staa byte_BD loc_D6C6: ; CODE XREF: sub_D6B1+10j ldaa byte_BB beq locret_D6CD deca staa byte_BB locret_D6CD: ; CODE XREF: sub_D6B1+17j rts ; End of function sub_D6B1 ; =============== S U B R O U T I N E ======================================= sub_D6CE: ; CODE XREF: sub_C820:loc_C85EP ; ROM:CA78P ... ldaa WTS_Raw ldx #$D739 ; Temp Sensor Linearisation Table jsr sub_F19F staa WTS tim #1, byte_91 beq loc_D6DF staa WTS_SH loc_D6DF: ; CODE XREF: sub_D6CE+Dj ldaa IAT_Raw ldx #$D739 ; Temp Sensor Linearisation Table jsr sub_F19F staa IAT ldaa IAT staa byte_46 ldd #$103 std byte_44 ldab IAT? ldx #$C058 jsr sub_F01C stab IAT? ldaa WTS staa byte_46 ldd #$102 std byte_44 ldab byte_86 ldx #$C05E tim #$10, STATUS_8D bne loc_D71A ldx #$C062 tim #8, STATUS_8D beq loc_D71A ldx #$C066 loc_D71A: ; CODE XREF: sub_D6CE+3Fj sub_D6CE+47j jsr sub_F01C ldaa #6 staa RICH_COUNT? ldx #$C06A jsr sub_F01C stab byte_86 ldd #$107 std byte_44 ldab WTS? jsr sub_F01C stab WTS? rts ; End of function sub_D6CE ; --------------------------------------------------------------------------- fdb $F303 ; ? fcb $10 TEMP_LIN_LUT: fcb $FF,$D6,$B0,$98,$88,$7B,$6F,$64,$5A,$50,$47,$3E,$34,$27,$18,0; 0 ; =============== S U B R O U T I N E ======================================= sub_D749: ; CODE XREF: ROM:JMP_0_6P tim #1, byte_91 bne loc_D755 ldaa byte_BC inca beq loc_D755 staa byte_BC loc_D755: ; CODE XREF: sub_D749+3j sub_D749+8j ldaa byte_C8 beq locret_D75C deca staa byte_C8 locret_D75C: ; CODE XREF: sub_D749+Ej rts ; End of function sub_D749 ; --------------------------------------------------------------------------- TMR_OVF_ISR: ; timer interval is 223+ a few cycles ldaa #$DF ; '' loc_D75F: ; preload timer? staa byte_25 ldab byte_26 ; clear interrupt eorb PORT1 ; test PORT1 bitb #$20 ; ' ' ; test P15 bne locret_D777 ldaa VSS_1 ; VSS_1 max. count cmpa #$55 ; 'U' bcc loc_D774 ; stationary? inca ; maybe increment count staa VSS_1 ; store new count loc_D774: ; CODE XREF: ROM:D76Ej oim #$40, STATUS_8D ; '@' ; set bit6 - VSS timeout locret_D777: ; CODE XREF: ROM:D767j rti ; =============== S U B R O U T I N E ======================================= sub_D778: ; CODE XREF: sub_C820+11AP ROM:EF22P sei tim #$40, STATUS_8D ; '@' ; VSS timeout bne loc_D780 ; Clear VSS timeout cli rts ; --------------------------------------------------------------------------- loc_D780: ; CODE XREF: sub_D778+4j aim #$BF, STATUS_8D ; '' ; Clear VSS timeout cli aim #$BF, FCodes0 ; '' ; Clear Code 24 - VSS ldaa byte_178 anda #$BF ; '' staa byte_178 ldaa #$BB ; '' staa byte_7A ldaa byte_D7 beq loc_D79A oim #$20, STATUS_8C ; ' ' loc_D79A: ; CODE XREF: sub_D778+1Dj ldaa #$28 ; '(' staa byte_D7 rts ; End of function sub_D778 ; =============== S U B R O U T I N E ======================================= sub_D79F: ; CODE XREF: ROM:CA1DP ROM:EF3AP ldaa byte_D7 beq loc_D7A8 dec byte_D7 bra loc_D7AB ; --------------------------------------------------------------------------- loc_D7A8: ; CODE XREF: sub_D79F+2j aim #$DF, STATUS_8C ; '' loc_D7AB: ; CODE XREF: sub_D79F+7j ldaa WTS ; test engine temperature cmpa #$B0 ; '' ; 70C bcs loc_D7D0 ; branch if not warmed up ldaa RPMH cmpa #$12 ; 4500RPM bcc loc_D7D0 tim #6, byte_91 beq loc_D7D0 ldaa byte_7A beq loc_D7C1 deca loc_D7C1: ; CODE XREF: sub_D79F+1Fj bne loc_D7D2 oim #$40, FCodes0 ; '@' ; set Code 24 - VSS ldab byte_178 orab #$40 ; '@' stab byte_178 bra loc_D7D2 ; --------------------------------------------------------------------------- loc_D7D0: ; CODE XREF: sub_D79F+10j sub_D79F+16j ... ldaa #$BB ; '' loc_D7D2: ; CODE XREF: sub_D79F:loc_D7C1j ; sub_D79F+2Fj staa byte_7A tim #$20, STATUS_5A ; ' ' beq loc_D7E6 sei ldaa CAS_COUNT beq loc_D7DF deca loc_D7DF: ; CODE XREF: sub_D79F+3Dj bne loc_D7E8 oim #4, FCodes1 ; Set CAS Fault bra loc_D7E8 ; --------------------------------------------------------------------------- loc_D7E6: ; CODE XREF: sub_D79F+38j ldaa #$7D ; '}' loc_D7E8: ; CODE XREF: sub_D79F:loc_D7DFj ; sub_D79F+45j staa CAS_COUNT cli rts ; End of function sub_D79F ; =============== S U B R O U T I N E ======================================= IAT_CORR?: ; CODE XREF: ROM:JMP_0_3P ldaa VSS staa byte_46 ldd #$4002 std byte_44 ldx #$C084 ldab IAT? jsr sub_F01C stab IAT? rts ; End of function IAT_CORR? ; =============== S U B R O U T I N E ======================================= VSS_CALCS: ; CODE XREF: sub_EA6E+32P ldaa VSS_3 ; shuffle VSS buffer ldab VSS_2 stab VSS_3 aba ldab VSS_1 stab VSS_2 aba staa VSS clrb stab VSS_1 rts ; End of function VSS_CALCS ; =============== S U B R O U T I N E ======================================= sub_D818: ; CODE XREF: CAS_INT_HNDLR+D6P ldaa COUNT_ED? bita #1 beq loc_D81F rts ; --------------------------------------------------------------------------- loc_D81F: ; CODE XREF: sub_D818+4j oim #$40, byte_5C ; '@' bita #2 bne loc_D829 oim #4, byte_5C loc_D829: ; CODE XREF: sub_D818+Cj tim #$10, byte_80 beq loc_D833 oim #4, byte_91 bra loc_D836 ; IFS_Status ; --------------------------------------------------------------------------- loc_D833: ; CODE XREF: sub_D818+14j aim #$FB, byte_91 ; '' loc_D836: ; CODE XREF: sub_D818+19j ldaa IFS_COUNT ; IFS_Status cmpa #4 bls locret_D866 tim #1, byte_91 bne loc_D867 tim #6, byte_91 bne locret_D866 oim #$80, STATUS_8D ; '' ; bit7 ?? ldd INJ_PW1_1 std INJ_PW1 ; injector pulse width without dead time addd INJ_PW2 ; Injector dead time bcc loc_D855 ldd #$FFFF loc_D855: ; CODE XREF: sub_D818+38j xgdx cpx #$4B0 bcc loc_D85E ldx #$4B0 loc_D85E: ; CODE XREF: sub_D818+41j stx byte_4A jsr sub_D96E aim #$FD, STATUS_8D ; '' ; bit1 ??? locret_D866: ; CODE XREF: sub_D818+22j sub_D818+2Cj rts ; --------------------------------------------------------------------------- loc_D867: ; CODE XREF: sub_D818+27j aim #$7F, STATUS_8D ; '' tim #8, byte_86 bne loc_D8DD ldx byte_44 stx byte_4A ldaa byte_E8 cmpa #$28 ; '(' bls loc_D87B ldaa #$28 ; '(' loc_D87B: ; CODE XREF: sub_D818+5Fj suba #8 bcc loc_D880 clra loc_D880: ; CODE XREF: sub_D818+65j ldab #$20 ; ' ' mul ldx #$C1EA jsr sub_F1A2 ldx byte_93 jsr sub_F079 tim #$10, byte_85 beq loc_D89E tim #$18, FCodes0 ; test TPS bne loc_D89E ldaa byte_C105 jsr sub_F079 loc_D89E: ; CODE XREF: sub_D818+79j sub_D818+7Ej xgdx ldx byte_4A stx byte_44 std byte_4C lsld bcc loc_D8AB ldd #$FFFF loc_D8AB: ; CODE XREF: sub_D818+8Ej std INJ_PW1 ; injector pulse width without dead time ldd byte_4C ldab byte_C19B lsrb addb byte_C19B sba bcc loc_D8BB clra loc_D8BB: ; CODE XREF: sub_D818+A0j staa byte_92 ldaa byte_C19B clrb lsld addd INJ_PW2 ; Injector dead time bcc do_OLVL1 ldd #$FFFF do_OLVL1: ; CODE XREF: sub_D818+ACj std byte_4A ldd FRCH ; get count addd #9 ; add 9 std OCR1H ; set up output compare aim #$FE, TCSR1 ; '' ; clear OLVL1 addd byte_4A oim #1, TCSR1 ; set OLVL1 std OCR1H ; setup output compare rts ; --------------------------------------------------------------------------- loc_D8DD: ; CODE XREF: sub_D818+55j clr byte_92 ldx byte_44 stx byte_4A ldaa byte_E8 cmpa #$28 ; '(' bls loc_D8EC ldaa #$28 ; '(' loc_D8EC: ; CODE XREF: sub_D818+D0j cmpa #$18 bhi loc_D8F5 ldaa byte_E9 lsra lsra lsra loc_D8F5: ; CODE XREF: sub_D818+D6j suba #8 bcc loc_D8FA clra loc_D8FA: ; CODE XREF: sub_D818+DFj ldab #$20 ; ' ' mul ldx #$C1EA jsr sub_F1A2 ldx byte_93 jsr sub_F079 tim #$10, byte_85 beq loc_D918 tim #$18, FCodes0 ; test TPS bne loc_D918 ldaa byte_C105 jsr sub_F079 loc_D918: ; CODE XREF: sub_D818+F3j sub_D818+F8j xgdx ldx byte_4A stx byte_44 std byte_4C lsld bcc loc_D925 ldd #$FFFF loc_D925: ; CODE XREF: sub_D818+108j std INJ_PW1 ; injector pulse width without dead time ldd byte_4C ldx #0 lsld bcc loc_D931 inx loc_D931: ; CODE XREF: sub_D818+116j addd INJ_PW2 ; Injector dead time std byte_4A bcc loc_D938 inx loc_D938: ; CODE XREF: sub_D818+11Dj cpx #0 beq loc_D967 xgdx lsrd xgdx rora rorb xgdx lsrd xgdx rora rorb lsrd lsrd lsrd suba #4 staa byte_B3 aim #$FE, TCSR1 ; '' ldd #5 addd byte_21 std OCR1H addd byte_4A std byte_B1 aim #$FD, STATUS_8D ; '' ldaa TCSR1 ldd OCR1H std OCR1H bra locret_D96D ; --------------------------------------------------------------------------- loc_D967: ; CODE XREF: sub_D818+123j jsr sub_D96E aim #$FD, STATUS_8D ; '' locret_D96D: ; CODE XREF: sub_D818+14Dj rts ; End of function sub_D818 ; =============== S U B R O U T I N E ======================================= sub_D96E: ; CODE XREF: sub_D818+48P ; sub_D818:loc_D967P ... ldx byte_21 ; get timer_21 stx byte_4C tim #2, PORT2 bne loc_D97C tim #2, STATUS_8D bne loc_D97F loc_D97C: ; CODE XREF: sub_D96E+7j aim #$FD, STATUS_8D ; '' loc_D97F: ; CODE XREF: sub_D96E+Cj aim #$FE, TCSR1 ; '' ldd #5 addd byte_21 std OCR1H ; OCR1H = timer_21 + 5 tim #2, STATUS_8D beq loc_D99B ldd byte_B1 subd byte_4C addd byte_4A bcc loc_D99D ldd #$FFFF bra loc_D99D ; --------------------------------------------------------------------------- loc_D99B: ; CODE XREF: sub_D96E+1Ej ldd byte_4A loc_D99D: ; CODE XREF: sub_D96E+26j sub_D96E+2Bj oim #1, TCSR1 addd OCR1H std OCR1H std byte_B1 rts ; End of function sub_D96E ; =============== S U B R O U T I N E ======================================= CALC_INJ_PW1_1: ; CODE XREF: sub_C820+63P ; sub_C820+117P ldx byte_6B tim #$20, STATUS_8D ; ' ' beq CALC_INJ_PW1_A tim #$20, STATUS_8C ; ' ' beq CALC_INJ_PW1_A tim #$80, byte_80 ; '' bne CALC_INJ_PW1_A tim #$40, WTS? ; '@' beq CALC_INJ_PW1_A ldd byte_A3 bne CALC_INJ_PW1_A cpx byte_6D bcc CALC_INJ_PW1_A ldx byte_6D CALC_INJ_PW1_A: ; CODE XREF: CALC_INJ_PW1_1+5j ; CALC_INJ_PW1_1+Aj ... ldd INJ_PW1_A6 jsr sub_F08B xgdx lsrd xgdx rora xgdx lsrd xgdx rora xgdx lsrd xgdx rora stx byte_40 tab ldaa byte_41 tst byte_40 beq loc_D9E5 ldd #$FFFF loc_D9E5: ; CODE XREF: CALC_INJ_PW1_1+39j std INJ_PW1_1 rts ; End of function CALC_INJ_PW1_1 ; =============== S U B R O U T I N E ======================================= sub_D9E8: ; CODE XREF: sub_C820+1ABP sei ldaa byte_B3 beq loc_D9F9 deca staa byte_B3 bne loc_D9F9 oim #1, TCSR1 ldd byte_B1 std OCR1H loc_D9F9: ; CODE XREF: sub_D9E8+3j sub_D9E8+8j cli rts ; End of function sub_D9E8 ; =============== S U B R O U T I N E ======================================= OC1_INT_HDLR: ; CODE XREF: ROM:E97BP aim #$FD, STATUS_8D ; '' ldd OCR1H std OCR1H tim #$80, STATUS_8D ; '' beq loc_DA08 rts ; --------------------------------------------------------------------------- loc_DA08: ; CODE XREF: OC1_INT_HDLR+Aj tim #1, TCSR1 bne loc_DA2B ldaa byte_92 suba byte_C19B bcc loc_DA15 clra loc_DA15: ; CODE XREF: OC1_INT_HDLR+17j staa byte_92 ldaa byte_C19B clrb lsld addd INJ_PW2 ; Injector dead time bcc loc_DA23 ldd #$FFFF loc_DA23: ; CODE XREF: OC1_INT_HDLR+23j addd OCR1H std OCR1H oim #1, TCSR1 rts ; --------------------------------------------------------------------------- loc_DA2B: ; CODE XREF: OC1_INT_HDLR+10j tst byte_92 beq locret_DA3C ldaa byte_C19C clrb lsld addd OCR1H std OCR1H aim #$FE, TCSR1 ; '' locret_DA3C: ; CODE XREF: OC1_INT_HDLR+33j rts ; End of function OC1_INT_HDLR ; =============== S U B R O U T I N E ======================================= sub_DA3D: ; CODE XREF: sub_C820+153P ldaa byte_B6 beq locret_DA44 deca staa byte_B6 locret_DA44: ; CODE XREF: sub_DA3D+2j rts ; End of function sub_DA3D ; =============== S U B R O U T I N E ======================================= CALC_BYTE_9C: ; CODE XREF: sub_C820+164P ldaa byte_9C beq locret_DA5D tim #8, STATUS_90 beq loc_DA55 ; C194 = 1h ldab byte_BC cmpb byte_C1A0 ; C1A0 = ACh bcs locret_DA5D loc_DA55: ; CODE XREF: CALC_BYTE_9C+7j suba byte_C194 ; C194 = 1h bcc loc_DA5B clra loc_DA5B: ; CODE XREF: CALC_BYTE_9C+13j staa byte_9C locret_DA5D: ; CODE XREF: CALC_BYTE_9C+2j ; CALC_BYTE_9C+Ej rts ; End of function CALC_BYTE_9C ; =============== S U B R O U T I N E ======================================= DEC_BYTE_9B: ; CODE XREF: sub_C820+167P ldaa byte_9B beq locret_DA6F tim #$20, STATUS_5A ; ' ' bne locret_DA6F suba byte_C107 bcc loc_DA6D clra loc_DA6D: ; CODE XREF: DEC_BYTE_9B+Cj staa byte_9B locret_DA6F: ; CODE XREF: DEC_BYTE_9B+2j ; DEC_BYTE_9B+7j rts ; End of function DEC_BYTE_9B ; =============== S U B R O U T I N E ======================================= DEC_BYTE_A3: ; CODE XREF: sub_C820+156P tim #$20, STATUS_5A ; ' ' bne locret_DA84 ldd byte_A3 beq locret_DA84 subb byte_C106 ; C106 = 5h sbca #0 bcc loc_DA82 clra clrb loc_DA82: ; CODE XREF: DEC_BYTE_A3+Ej std byte_A3 locret_DA84: ; CODE XREF: DEC_BYTE_A3+3j ; DEC_BYTE_A3+7j rts ; End of function DEC_BYTE_A3 ; =============== S U B R O U T I N E ======================================= sub_DA85: ; CODE XREF: sub_C820+159P tim #$20, STATUS_5A ; ' ' bne locret_DA99 ldd byte_AC beq locret_DA99 subb byte_C10C sbca #0 bcc loc_DA97 clra clrb loc_DA97: ; CODE XREF: sub_DA85+Ej std byte_AC locret_DA99: ; CODE XREF: sub_DA85+3j sub_DA85+7j rts ; End of function sub_DA85 ; =============== S U B R O U T I N E ======================================= CALC_BYTE_98: ; CODE XREF: sub_C820+139P ldaa WTS ldx #$C22B tim #$10, STATUS_8D bne loc_DAA7 ldx #$C232 loc_DAA7: ; CODE XREF: CALC_BYTE_98+8j jsr sub_F1C3 adda byte_AC bcc loc_DAB0 ldaa #$FF loc_DAB0: ; CODE XREF: CALC_BYTE_98+12j ldab byte_74 ldx #$C108 tim #$10, STATUS_8D bne loc_DABD ldx #$C10A loc_DABD: ; CODE XREF: CALC_BYTE_98+1Ej cmpb 0,x bls loc_DAC3 ldab 0,x loc_DAC3: ; CODE XREF: CALC_BYTE_98+25j subb 1,x bcc loc_DAC8 clrb loc_DAC8: ; CODE XREF: CALC_BYTE_98+2Bj mul std byte_42 ldaa WTS ldx #$C239 tim #$10, STATUS_8D bne loc_DAD8 ldx #$C240 loc_DAD8: ; CODE XREF: CALC_BYTE_98+39j jsr sub_F1C3 ldab byte_73 ldx #$C108 tim #$10, STATUS_8D bne loc_DAE8 ldx #$C10A loc_DAE8: ; CODE XREF: CALC_BYTE_98+49j cmpb 0,x bls loc_DAEE ldab 0,x loc_DAEE: ; CODE XREF: CALC_BYTE_98+50j subb 1,x bcc loc_DAF3 clrb loc_DAF3: ; CODE XREF: CALC_BYTE_98+56j mul addd byte_42 beq loc_DB18 xgdx stx byte_40 ldx #$C108 tim #$10, STATUS_8D bne loc_DB06 ldx #$C10A loc_DB06: ; CODE XREF: CALC_BYTE_98+67j ldaa 0,x suba 1,x ldx byte_40 jsr sub_F0D3 tsta beq loc_DB14 ldab #$FF loc_DB14: ; CODE XREF: CALC_BYTE_98+76j stab byte_98 bra locret_DB1B ; --------------------------------------------------------------------------- loc_DB18: ; CODE XREF: CALC_BYTE_98+5Cj clr byte_98 locret_DB1B: ; CODE XREF: CALC_BYTE_98+7Cj rts ; End of function CALC_BYTE_98 ; =============== S U B R O U T I N E ======================================= DEC_BYTE_A2: ; CODE XREF: sub_C820+13CP ldaa byte_A2 beq locret_DB28 suba byte_C19D ; C19D = 1h bcc loc_DB26 clra loc_DB26: ; CODE XREF: DEC_BYTE_A2+7j staa byte_A2 locret_DB28: ; CODE XREF: DEC_BYTE_A2+2j rts ; End of function DEC_BYTE_A2 ; =============== S U B R O U T I N E ======================================= CALC_BYTE_99: ; CODE XREF: sub_C820+13FP ldaa byte_A9 beq loc_DB4F ldx RPMH cpx #$1000 ; 4000 RPM bls loc_DB37 ldx #$1000 ; 4000 RPM loc_DB37: ; CODE XREF: CALC_BYTE_99+9j xgdx subd #$400 ; 1000 RPM bcc loc_DB3F clra clrb loc_DB3F: ; CODE XREF: CALC_BYTE_99+12j lsld tab ldx #$C1F6 abx ldaa 0,x ldab byte_A9 mul lsld bcc loc_DB4F ldaa #$FF loc_DB4F: ; CODE XREF: CALC_BYTE_99+2j ; CALC_BYTE_99+22j staa byte_99 rts ; End of function CALC_BYTE_99 ; =============== S U B R O U T I N E ======================================= sub_DB52: ; CODE XREF: sub_D281+49P tim #5, byte_91 bne locret_DB8A tim #$80, STATUS_8D ; '' beq locret_DB8A ldx #$C195 tim #2, byte_91 bne loc_DB65 inx loc_DB65: ; CODE XREF: sub_DB52+10j ldaa 0,x clrb lsrd lsrd lsrd addd INJ_PW2 ; Injector dead time bcc loc_DB72 ldd #$FFFF loc_DB72: ; CODE XREF: sub_DB52+1Bj tim #2, byte_91 beq loc_DB7D aim #$FD, byte_91 ; '' oim #2, STATUS_90 loc_DB7D: ; CODE XREF: sub_DB52+23j sei std byte_4A oim #2, STATUS_8D jsr sub_D96E oim #2, STATUS_8D cli locret_DB8A: ; CODE XREF: sub_DB52+3j sub_DB52+8j rts ; End of function sub_DB52 ; =============== S U B R O U T I N E ======================================= CALC_A1: ; CODE XREF: sub_C820+4DP ; sub_C820+1B4P clra clrb ldx #$16C loc_DB90: ; CODE XREF: CALC_A1+Dj addb 0,x adca #0 inx cpx #$174 bcs loc_DB90 lsrd lsrd subd #$80 ; '' bcc loc_DBA3 clra clrb loc_DBA3: ; CODE XREF: CALC_A1+14j tsta beq loc_DBA8 ldab #$FF loc_DBA8: ; CODE XREF: CALC_A1+19j stab byte_A1 rts ; End of function CALC_A1 ; =============== S U B R O U T I N E ======================================= CALC_LTFT_AFT: ; CODE XREF: sub_C820+1B7P ldaa byte_75 ldx RPMH jsr MULT_8x16? lsrd lsrd tsta beq loc_DBB9 ldab #$FF loc_DBB9: ; CODE XREF: CALC_LTFT_AFT+Aj tba ldab byte_AF staa byte_AF ldx #$C258 cba bls loc_DBD7 ldab byte_B0 cmpb #7 ; 8 byte table bcc loc_DBED abx loc_DBCB: ; CODE XREF: CALC_LTFT_AFT+28j cmpa 0,x bcs loc_DBEF inx incb cmpb #7 ; 8 byte table ? bcs loc_DBCB bra loc_DBEF ; --------------------------------------------------------------------------- loc_DBD7: ; CODE XREF: CALC_LTFT_AFT+17j adda byte_C188 ; C188 = 1h bcc loc_DBDE ldaa #$FF loc_DBDE: ; CODE XREF: CALC_LTFT_AFT+2Fj ldab byte_B0 beq loc_DBEF abx loc_DBE3: ; CODE XREF: CALC_LTFT_AFT+3Ej dex cmpa 0,x bcc loc_DBEF decb bne loc_DBE3 bra loc_DBEF ; --------------------------------------------------------------------------- loc_DBED: ; CODE XREF: CALC_LTFT_AFT+1Dj ldab #7 loc_DBEF: ; CODE XREF: CALC_LTFT_AFT+22j ; CALC_LTFT_AFT+2Aj ... stab byte_B0 ldx #$16C abx clra ldab 0,x addb byte_A1 adca #0 subd #$80 ; '' bcc loc_DC03 clra clrb loc_DC03: ; CODE XREF: CALC_LTFT_AFT+54j tsta beq loc_DC08 ldab #$FF loc_DC08: ; CODE XREF: CALC_LTFT_AFT+59j stab LTFT Now we have LTFT we can calculate AFT ldaa #$80 ; '' tim #$20, STATUS_90 ; ' ' beq loc_DC23 clra addb STFT ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only adca #0 subd #$80 ; '' bcc loc_DC1D clra clrb loc_DC1D: ; CODE XREF: CALC_LTFT_AFT+6Ej tsta beq loc_DC22 ldab #$FF loc_DC22: ; CODE XREF: CALC_LTFT_AFT+73j tba loc_DC23: ; CODE XREF: CALC_LTFT_AFT+64j staa AFT rts ; End of function CALC_LTFT_AFT ; =============== S U B R O U T I N E ======================================= CALC_STFT: ; CODE XREF: sub_C820+1B1P tim #4, IAT? beq loc_DC3F tim #1, byte_86 bne loc_DC44 tim #$18, STATUS_8D bne loc_DC61 ldaa byte_BC cmpa byte_C1A1 bcc loc_DC44 bra loc_DC61 ; --------------------------------------------------------------------------- loc_DC3F: ; CODE XREF: CALC_STFT+3j tim #2, byte_86 beq loc_DC61 loc_DC44: ; CODE XREF: CALC_STFT+8j ; CALC_STFT+14j tim #6, byte_91 bne loc_DC61 ldd byte_A3 bne loc_DC61 tim #$10, byte_91 beq loc_DC57 tst byte_BD beq loc_DC61 loc_DC57: ; CODE XREF: CALC_STFT+29j tim #1, byte_83 beq loc_DC61 tim #4, STATUS_90 bne loc_DC86 loc_DC61: ; CODE XREF: CALC_STFT+Dj ; CALC_STFT+16j ... ldd #$8000 std STFT ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only tim #8, STATUS_90 beq loc_DC7C ldab byte_BC cmpb byte_C1A0 ; C1A0 = ACh bcc loc_DC7C ldaa IAT ldx #$C251 jsr sub_F19F staa byte_9C loc_DC7C: ; CODE XREF: CALC_STFT+42j ; CALC_STFT+49j aim #$DF, STATUS_90 ; '' ldaa #6 staa byte_C9 jmp locret_DDBD ; --------------------------------------------------------------------------- loc_DC86: ; CODE XREF: CALC_STFT+38j oim #$20, STATUS_90 ; ' ' aim #$F7, STATUS_90 ; '' tim #$10, STATUS_90 beq loc_DCFA jsr sub_DE0C aim #$7F, STATUS_90 ; '' ldaa byte_C097 ; C097 = 4h staa byte_C6 ldaa byte_C094 ; C094 = C8h tim #$20, STATUS_8D ; ' ' bne loc_DCA7 ldaa byte_C095 ; C095 = C8h loc_DCA7: ; CODE XREF: CALC_STFT+7Bj staa byte_C7 ldx #$C125 clrb tim #$10, STATUS_8D bne loc_DCBB addb #$18 tim #8, STATUS_8D beq loc_DCBB addb #$18 loc_DCBB: ; CODE XREF: CALC_STFT+89j ; CALC_STFT+90j tim #$20, STATUS_8D ; ' ' bne loc_DCC2 ; test idle switch addb #$C loc_DCC2: ; CODE XREF: CALC_STFT+97j tim #$80, STATUS_5A ; '' ; test idle switch beq loc_DCD5 ; C096 = 6h ldaa byte_C5 beq loc_DCE9 deca staa byte_C5 tim #1, byte_81 beq loc_DCE6 bra loc_DCDA ; --------------------------------------------------------------------------- loc_DCD5: ; CODE XREF: CALC_STFT+9Ej ldaa byte_C096 ; C096 = 6h staa byte_C5 loc_DCDA: ; CODE XREF: CALC_STFT+ACj aim #$BF, STATUS_90 ; '' tim #4, byte_82 beq loc_DCEE addb #4 bra loc_DCEE ; --------------------------------------------------------------------------- loc_DCE6: ; CODE XREF: CALC_STFT+AAj clr byte_C5 loc_DCE9: ; CODE XREF: CALC_STFT+A2j oim #$40, STATUS_90 ; '@' addb #8 loc_DCEE: ; CODE XREF: CALC_STFT+B9j ; CALC_STFT+BDj abx tim #1, STATUS_90 ; check Rich/Lean beq loc_DCF7 jmp MINUS_STFT ; --------------------------------------------------------------------------- loc_DCF7: ; CODE XREF: CALC_STFT+CBj jmp ADD_STFT ; --------------------------------------------------------------------------- loc_DCFA: ; CODE XREF: CALC_STFT+68j tim #$40, STATUS_90 ; '@' beq loc_DD7A tim #$80, STATUS_90 ; '' bne loc_DD2E ldaa byte_C7 beq loc_DD0B deca bne loc_DD29 loc_DD0B: ; CODE XREF: CALC_STFT+DFj oim #$80, STATUS_90 ; '' ldx #$C08E tim #$10, STATUS_8D bne loc_DD21 ldx #$C090 tim #8, STATUS_8D beq loc_DD21 ldx #$C092 loc_DD21: ; CODE XREF: CALC_STFT+EDj ; CALC_STFT+F5j tim #$20, STATUS_8D ; ' ' bne loc_DD27 inx loc_DD27: ; CODE XREF: CALC_STFT+FDj ldaa 0,x loc_DD29: ; CODE XREF: CALC_STFT+E2j staa byte_C7 jmp locret_DDBD ; --------------------------------------------------------------------------- loc_DD2E: ; CODE XREF: CALC_STFT+DBj ldaa byte_C7 bne loc_DD77 ldaa byte_C6 beq loc_DD7A deca staa byte_C6 ldx #$C08E tim #$10, STATUS_8D bne loc_DD4C ldx #$C090 tim #8, STATUS_8D beq loc_DD4C ldx #$C092 loc_DD4C: ; CODE XREF: CALC_STFT+118j ; CALC_STFT+120j tim #$20, STATUS_8D ; ' ' bne loc_DD52 inx loc_DD52: ; CODE XREF: CALC_STFT+128j ldaa 0,x staa byte_C7 ldx #$C16D clrb tim #$10, STATUS_8D bne loc_DD68 addb #8 tim #8, STATUS_8D beq loc_DD68 addb #8 loc_DD68: ; CODE XREF: CALC_STFT+136j ; CALC_STFT+13Dj tim #$20, STATUS_8D ; ' ' bne loc_DD6F addb #4 loc_DD6F: ; CODE XREF: CALC_STFT+144j abx tim #1, STATUS_90 ; check Rich/Lean beq MINUS_STFT bra ADD_STFT ; --------------------------------------------------------------------------- loc_DD77: ; CODE XREF: CALC_STFT+109j deca staa byte_C7 loc_DD7A: ; CODE XREF: CALC_STFT+D6j ; CALC_STFT+10Dj ldx #$C10D clrb tim #$10, STATUS_8D bne loc_DD8C addb #8 tim #8, STATUS_8D beq loc_DD8C addb #8 loc_DD8C: ; CODE XREF: CALC_STFT+15Aj ; CALC_STFT+161j tim #$20, STATUS_8D ; ' ' bne loc_DD93 addb #4 loc_DD93: ; CODE XREF: CALC_STFT+168j abx tim #1, STATUS_90 ; check Rich/Lean beq ADD_STFT MINUS_STFT: ; CODE XREF: CALC_STFT+CDJ ; CALC_STFT+14Cj ldd STFT ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only subd 0,x bcc loc_DDA7 bra loc_DDB5 ; --------------------------------------------------------------------------- ADD_STFT: ; CODE XREF: CALC_STFT:loc_DCF7J ; CALC_STFT+14Ej ... ldd STFT ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only addd 2,x bcs loc_DDAD loc_DDA7: ; CODE XREF: CALC_STFT+176j xgdx cpx #$E666 bls loc_DDB0 loc_DDAD: ; CODE XREF: CALC_STFT+17Ej ldx #$E666 loc_DDB0: ; CODE XREF: CALC_STFT+184j cpx #$1999 bcc loc_DDB8 loc_DDB5: ; CODE XREF: CALC_STFT+178j ldx #$1999 loc_DDB8: ; CODE XREF: CALC_STFT+18Cj stx STFT ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only aim #$EF, STATUS_90 ; '' locret_DDBD: ; CODE XREF: CALC_STFT+5CJ ; CALC_STFT+104J rts ; End of function CALC_STFT ; =============== S U B R O U T I N E ======================================= CALC_INJ_PW1_A6: ; CODE XREF: sub_C820+1BAP clra ldab byte_98 addb byte_9B adca #0 lsld xgdx ldab byte_99 abx ldab byte_9A abx ldab byte_9C abx ldab byte_9D abx xgdx lsld lsld lsld lsld lsld std byte_42 clrb ldx #0 ldaa LTFT adda byte_A2 bcc loc_DDE6 inx loc_DDE6: ; CODE XREF: CALC_INJ_PW1_A6+25j addd STFT ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only bcc loc_DDEB inx loc_DDEB: ; CODE XREF: CALC_INJ_PW1_A6+2Aj xgdx lsrd xgdx rora rorb xgdx lsrd xgdx rora rorb lsrd lsrd lsrd addd byte_A3 addd byte_42 subd #$1800 bcc loc_DE03 clra clrb loc_DE03: ; CODE XREF: CALC_INJ_PW1_A6+41j xgdx ldaa byte_A5 jsr sub_F0B3 std INJ_PW1_A6 rts ; End of function CALC_INJ_PW1_A6 ; =============== S U B R O U T I N E ======================================= sub_DE0C: ; CODE XREF: CALC_STFT+6AP ldab byte_AE ldaa STFT ; STFT is limited between 1999h and E666h ; STFT diagnostics is one byte only staa byte_AE aba rora staa byte_40 tst byte_C185 bne loc_DE41 ldab PIA_PORTB bitb #$10 ; Test Evap Purge bne loc_DE28 ldab byte_B0 bitb #$FE ; '' beq loc_DE41 loc_DE28: ; CODE XREF: sub_DE0C+14j tst byte_C8 beq loc_DE41 tim #1, FCodes1 ; test AFM bne loc_DE41 tim #$A7, FCodes0 ; '' bne loc_DE41 tim #2, byte_83 beq loc_DE41 tim #4, byte_86 bne loc_DE46 loc_DE41: ; CODE XREF: sub_DE0C+Dj sub_DE0C+1Aj ... ldab #6 stab byte_C9 rts ; --------------------------------------------------------------------------- loc_DE46: ; CODE XREF: sub_DE0C+33j dec byte_C9 beq loc_DE4C rts ; --------------------------------------------------------------------------- loc_DE4C: ; CODE XREF: sub_DE0C+3Dj ldab #6 stab byte_C9 ldx #$16C ldab byte_B0 ldaa #2 staa byte_41 jsr sub_DEC0 ldaa #1 staa byte_41 ldx #$16C decb bmi loc_DE6C jsr sub_DEC0 ldx #$16C loc_DE6C: ; CODE XREF: sub_DE0C+58j addb #2 cmpb #7 bhi loc_DE75 jsr sub_DEC0 loc_DE75: ; CODE XREF: sub_DE0C+64j ldaa byte_B0 bita #$FE ; '' beq loc_DE81 ldaa byte_40 bita #$80 ; '' bne locret_DEBF loc_DE81: ; CODE XREF: sub_DE0C+6Dj ldx #$16C ldaa 0,x cmpa #$80 ; '' bcs loc_DE8C ldaa #$80 ; '' loc_DE8C: ; CODE XREF: sub_DE0C+7Cj suba #$F staa byte_40 ldd #$70A4 suba byte_40 bcc loc_DE99 clra clrb loc_DE99: ; CODE XREF: sub_DE0C+89j xgdx ldaa #7 jsr sub_F0D3 std byte_42 ldaa #1 loc_DEA3: ; CODE XREF: sub_DE0C+B1j staa byte_41 ldx byte_42 jsr MULT_8x16? addb byte_40 tba ldab byte_41 ldx #$16C abx cmpa 0,x bcs loc_DEB9 staa 0,x loc_DEB9: ; CODE XREF: sub_DE0C+A9j incb tba cmpa #7 bls loc_DEA3 locret_DEBF: ; CODE XREF: sub_DE0C+73j rts ; End of function sub_DE0C ; =============== S U B R O U T I N E ======================================= sub_DEC0: ; CODE XREF: sub_DE0C+4DP sub_DE0C+5AP ... abx ldaa byte_40 cmpa byte_C187 bcs loc_DED7 cmpa byte_C186 bcs locret_DEEC ldaa 0,x adda byte_41 bcc loc_DEDE ldaa #$FF bra loc_DEDE ; --------------------------------------------------------------------------- loc_DED7: ; CODE XREF: sub_DEC0+6j ldaa 0,x suba byte_41 bcc loc_DEDE clra loc_DEDE: ; CODE XREF: sub_DEC0+11j sub_DEC0+15j ... cmpa #$1A bcc loc_DEE4 ldaa #$1A loc_DEE4: ; CODE XREF: sub_DEC0+20j cmpa #$E6 ; '' bls loc_DEEA ldaa #$E6 ; '' loc_DEEA: ; CODE XREF: sub_DEC0+26j staa 0,x locret_DEEC: ; CODE XREF: sub_DEC0+Bj rts ; End of function sub_DEC0 ; =============== S U B R O U T I N E ======================================= CALC_BYTE_9A_1: ; CODE XREF: ROM:CA23P tim #2, byte_91 bne locret_DF15 ldab #$80 ; '' ; 80h = 0? tim #1, STATUS_8C beq loc_DF13 ldaa byte_9A cba ; check for +/- or zero beq locret_DF15 bcc loc_DF0A ; subtract 1 adda byte_C190 ; add 1h bcs loc_DF13 cba bcc loc_DF13 bra loc_DF12 ; --------------------------------------------------------------------------- loc_DF0A: ; CODE XREF: CALC_BYTE_9A_1+11j suba byte_C191 ; subtract 1 bcs loc_DF13 cba bcs loc_DF13 loc_DF12: ; CODE XREF: CALC_BYTE_9A_1+1Bj tab loc_DF13: ; CODE XREF: CALC_BYTE_9A_1+Aj ; CALC_BYTE_9A_1+16j ... stab byte_9A locret_DF15: ; CODE XREF: CALC_BYTE_9A_1+3j ; CALC_BYTE_9A_1+Fj rts ; End of function CALC_BYTE_9A_1 ; =============== S U B R O U T I N E ======================================= sub_DF16: ; CODE XREF: ROM:CA20P ldab byte_B7 ldaa TPSA staa byte_B7 tim #$18, INT_FC0 bne loc_DF3F sba bls loc_DF3F suba byte_C197 bls loc_DF3F ldab byte_97 subb byte_75 bls loc_DF3F xgdx tim #7, byte_91 bne loc_DF3F tim #$80, STATUS_8D ; '' beq loc_DF3F tim #1, STATUS_8C beq loc_DF45 loc_DF3F: ; CODE XREF: sub_DF16+9j sub_DF16+Cj ... ldaa #2 staa byte_B5 bra locret_DF8D ; --------------------------------------------------------------------------- loc_DF45: ; CODE XREF: sub_DF16+27j tst byte_B6 bne loc_DF3F tst byte_B5 beq locret_DF8D dec byte_B5 bne loc_DF58 ldab #$A stab byte_B6 loc_DF58: ; CODE XREF: sub_DF16+3Cj xgdx mul xgdx ldaa byte_C198 jsr sub_F0D3 lsld tsta beq loc_DF67 ldab #$FF loc_DF67: ; CODE XREF: sub_DF16+4Dj ldaa byte_C199 cba bcc loc_DF6E tab loc_DF6E: ; CODE XREF: sub_DF16+55j ldaa byte_B4 mul lsrd xgdx cpx #0 beq loc_DF3F xgdx addd INJ_PW2 ; injector dead time bcc loc_DF80 ldd #$FFFF loc_DF80: ; CODE XREF: sub_DF16+65j sei std byte_4A oim #2, STATUS_8D jsr sub_D96E oim #2, STATUS_8D cli locret_DF8D: ; CODE XREF: sub_DF16+2Dj sub_DF16+37j rts ; End of function sub_DF16 ; =============== S U B R O U T I N E ======================================= sub_DF8E: ; CODE XREF: ROM:CA42P ldx RPMH cpx #$1C00 ; 7000 RPM bls loc_DF98 ldx #$1C00 ; 7000 RPM loc_DF98: ; CODE XREF: sub_DF8E+5j xgdx subd #$200 ; 6500 RPM bcc loc_DFA0 clra clrb loc_DFA0: ; CODE XREF: sub_DF8E+Ej lsrd ldx #$C1C0 jsr sub_F1A2 staa byte_97 rts ; End of function sub_DF8E ; =============== S U B R O U T I N E ======================================= CALC_BYTE_9D: ; CODE XREF: ROM:CA45P tim #1, byte_91 bne loc_DFFB tim #2, byte_85 beq loc_DFFE tim #4, byte_80 bne loc_DFC6 ldaa #4 tim #$20, STATUS_8D ; ' ' beq loc_DFC2 ldaa #8 loc_DFC2: ; CODE XREF: CALC_BYTE_9D+14j bita byte_85 beq loc_DFC9 loc_DFC6: ; CODE XREF: CALC_BYTE_9D+Dj clr byte_BD loc_DFC9: ; CODE XREF: CALC_BYTE_9D+1Aj oim #$10, byte_91 ldab byte_BD bne loc_E048 ldd RPMH subd #$400 ; subtract 1000 RPM bcc loc_DFD9 clra clrb loc_DFD9: ; CODE XREF: CALC_BYTE_9D+2Bj lsrd std byte_44 ldd byte_6B subd #$780 bcc loc_DFE5 clra clrb loc_DFE5: ; CODE XREF: CALC_BYTE_9D+37j lsld bcc loc_DFEB ldd #$FFFF loc_DFEB: ; CODE XREF: CALC_BYTE_9D+3Cj ldx #$C269 tim #$10, STATUS_8D bne loc_DFF6 ldx #$C2FA loc_DFF6: ; CODE XREF: CALC_BYTE_9D+47j jsr sub_F245 bra loc_E04A ; --------------------------------------------------------------------------- loc_DFFB: ; CODE XREF: CALC_BYTE_9D+3j clrb stab byte_BC loc_DFFE: ; CODE XREF: CALC_BYTE_9D+8j aim #$EF, byte_91 ; '' tim #4, byte_80 bne loc_E043 ; C18D = 0h ldab byte_BC cmpb byte_C19F bcc loc_E043 ; C18D = 0h cmpb byte_C19E bcs loc_E043 ; C18D = 0h tim #$20, STATUS_90 ; ' ' beq loc_E043 ; C18D = 0h ldab WTS_SH cmpb #$5A ; 'Z' bcs loc_E043 ; C18D = 0h cmpb #$E0 ; '' bcc loc_E043 ; C18D = 0h tim #1, IAT? beq loc_E043 ; C18D = 0h ldx #$C189 tim #$10, STATUS_8D bne loc_E031 ldx #$C18B loc_E031: ; CODE XREF: CALC_BYTE_9D+82j ldab #4 tim #$20, STATUS_8D ; ' ' beq loc_E03B ldab #8 inx loc_E03B: ; CODE XREF: CALC_BYTE_9D+8Cj bitb byte_85 bne loc_E043 ; C18D = 0h ldab 0,x bra loc_E046 ; --------------------------------------------------------------------------- loc_E043: ; CODE XREF: CALC_BYTE_9D+5Aj ; CALC_BYTE_9D+61j ... ldab byte_C18D ; C18D = 0h loc_E046: ; CODE XREF: CALC_BYTE_9D+97j stab byte_BD loc_E048: ; CODE XREF: CALC_BYTE_9D+24j ldaa #$80 ; '' loc_E04A: ; CODE XREF: CALC_BYTE_9D+4Fj staa byte_9D cmpa #$80 ; '' beq locret_E054 ldaa #$26 ; '&' staa byte_C3 locret_E054: ; CODE XREF: CALC_BYTE_9D+A4j rts ; End of function CALC_BYTE_9D ; =============== S U B R O U T I N E ======================================= CALC_BYTE_BA: ; CODE XREF: ROM:CA48P tim #$20, STATUS_5A ; ' ' beq loc_E05E ldaa #$4E ; 'N' staa byte_BB loc_E05E: ; CODE XREF: CALC_BYTE_BA+3j ldaa byte_BB bne loc_E076 tim #$80, byte_81 ; '' beq loc_E076 tim #1, byte_85 beq loc_E087 tim #$80, STATUS_5A ; '' ; test idle switch beq loc_E076 tim #4, byte_CC bne loc_E087 loc_E076: ; CODE XREF: CALC_BYTE_BA+Bj ; CALC_BYTE_BA+10j ... ldaa byte_C19A staa byte_BA tim #2, byte_91 beq locret_E086 aim #$FD, byte_91 ; '' oim #2, STATUS_90 locret_E086: ; CODE XREF: CALC_BYTE_BA+29j rts ; --------------------------------------------------------------------------- loc_E087: ; CODE XREF: CALC_BYTE_BA+15j ; CALC_BYTE_BA+1Fj tst byte_BA bne loc_E098 tim #2, byte_91 bne locret_E097 oim #2, byte_91 oim #2, STATUS_90 locret_E097: ; CODE XREF: CALC_BYTE_BA+3Aj rts ; --------------------------------------------------------------------------- loc_E098: ; CODE XREF: CALC_BYTE_BA+35j dec byte_BA rts ; End of function CALC_BYTE_BA ; =============== S U B R O U T I N E ======================================= CALC_BYTE_A2: ; CODE XREF: sub_C820+1AEP tim #$20, STATUS_8D ; ' ' beq loc_E0A4 clra bra loc_E0B4 ; --------------------------------------------------------------------------- loc_E0A4: ; CODE XREF: CALC_BYTE_A2+3j tim #$10, STATUS_8C beq locret_E0B6 aim #$EF, STATUS_8C ; '' ldaa WTS ldx #$C260 jsr sub_F1C3 loc_E0B4: ; CODE XREF: CALC_BYTE_A2+6j staa byte_A2 locret_E0B6: ; CODE XREF: CALC_BYTE_A2+Bj rts ; End of function CALC_BYTE_A2 ; =============== S U B R O U T I N E ======================================= CALC_BYTE_9B: ; CODE XREF: sub_C820+44P ROM:CA7EP tim #$20, STATUS_5A ; ' ' beq locret_E0CE ldaa WTS ldx #$C20F tim #$10, STATUS_8D bne loc_E0C9 ldx #$C216 loc_E0C9: ; CODE XREF: CALC_BYTE_9B+Dj jsr sub_F1C3 staa byte_9B locret_E0CE: ; CODE XREF: CALC_BYTE_9B+3j rts ; End of function CALC_BYTE_9B ; =============== S U B R O U T I N E ======================================= CALC_BYTE_A5: ; CODE XREF: sub_C820+5DP ROM:CA81P ldaa IAT ldx #$C1B9 jsr sub_F1C3 staa byte_A5 rts ; End of function CALC_BYTE_A5 ; =============== S U B R O U T I N E ======================================= BATTV_CORR1: ; CODE XREF: sub_C820+60P ROM:CA4BP ldaa BATTV ldx #$C1AF jsr sub_F19F lsrd lsrd lsrd lsrd std INJ_PW2 ; Injector dead time rts ; End of function BATTV_CORR1 ; =============== S U B R O U T I N E ======================================= sub_E0E9: ; CODE XREF: sub_C820+41P ROM:CAA7P ldaa WTS ldx #$C0C8 jsr sub_F1C3 staa byte_B8 ldaa WTS ldx #$C0CF jsr sub_F1C3 staa byte_B9 rts ; End of function sub_E0E9 ; =============== S U B R O U T I N E ======================================= CALC_BYTE_A3: ; CODE XREF: sub_C820+47P ROM:CAAAP tim #1, byte_91 beq locret_E118 ldaa WTS ldx #$C21D tim #$10, STATUS_8D bne loc_E110 ldx #$C224 loc_E110: ; CODE XREF: CALC_BYTE_A3+Dj jsr sub_F1C3 lsrd lsrd lsrd std byte_A3 locret_E118: ; CODE XREF: CALC_BYTE_A3+3j rts ; End of function CALC_BYTE_A3 ; =============== S U B R O U T I N E ======================================= CALC_BYTE_AC: ; CODE XREF: sub_C820+4AP ROM:CAADP tim #1, byte_91 beq locret_E128 ldaa WTS ldx #$C247 jsr sub_F1C3 std byte_AC locret_E128: ; CODE XREF: CALC_BYTE_AC+3j rts ; End of function CALC_BYTE_AC ; =============== S U B R O U T I N E ======================================= sub_E129: ; CODE XREF: sub_C820+50P ROM:CAB0P ldaa WTS ldx #$C1DC tim #$10, STATUS_8D bne loc_E136 ldx #$C1E3 loc_E136: ; CODE XREF: sub_E129+8j jsr sub_F1C3 xgdx ldaa byte_A1 cmpa #$1A bcc loc_E142 ldaa #$1A loc_E142: ; CODE XREF: sub_E129+15j cmpa #$E6 ; '' bls loc_E148 ldaa #$E6 ; '' loc_E148: ; CODE XREF: sub_E129+1Bj jsr sub_F0B3 std byte_93 rts ; End of function sub_E129 ; =============== S U B R O U T I N E ======================================= sub_E14E: ; CODE XREF: sub_C820+53P ROM:CAB3P ldaa WTS ldx #$C1EF jsr sub_F1C3 staa byte_A9 rts ; End of function sub_E14E ; =============== S U B R O U T I N E ======================================= sub_E159: ; CODE XREF: sub_C820+5AP ROM:CAB6P ldaa WTS ldx #$C1A5 jsr sub_F1C3 staa byte_B4 rts ; End of function sub_E159 ; =============== S U B R O U T I N E ======================================= sub_E164: ; CODE XREF: sub_C820+66P ldaa byte_C61A staa byte_D6 ldaa TPSA staa TPS_CF? ldaa byte_C631 staa byte_E1 jsr BATTV_CORR2 jsr sub_E533 jsr sub_E53E jsr DO_TIDLE jsr sub_E520 jsr sub_E241 jsr sub_E251 jsr DO_IAC_2 rts ; End of function sub_E164 ; =============== S U B R O U T I N E ======================================= sub_E18B: ; CODE XREF: ROM:E984P tim #4, PORT1 ; *** P12 *** bne loc_E1B7 ; clear bit6 asl byte_12E ldx byte_D4 ldd byte_23 ; is byte_23 a counter or capture reg? addd #$7D0 cpx #$78A bhi loc_E1B4 ; output compare? std byte_D2 oim #$40, byte_20 ; '@' ; byte 20 is a a control reg xgdx addd byte_23 std byte_4A ldab #$A ; load B with $A ldx byte_21 ; get counter? abx ; add $A to counter? cpx byte_4A bpl loc_E1C5 ; set up OC ldab byte_4B loc_E1B4: ; CODE XREF: sub_E18B+12j std byte_23 ; output compare? rts ; --------------------------------------------------------------------------- loc_E1B7: ; CODE XREF: sub_E18B+3j aim #$BF, byte_20 ; '' ; clear bit6 ldab #$B ldx byte_21 ; get timer? abx ; add $B cpx byte_D2 ; load X with byte_21+$B bpl loc_E1C5 ; set up OC ldx byte_D2 ; or load with byte_D2 loc_E1C5: ; CODE XREF: sub_E18B+25j sub_E18B+36j stx byte_23 ; set up OC rts ; End of function sub_E18B ; =============== S U B R O U T I N E ======================================= DO_IAC_2: ; CODE XREF: ROM:CA35P sub_E164+23P ldx #$179 ldab byte_D1 abx clra ldab 0,x xgdx ldab byte_DB abx ldab byte_DC abx ldab byte_DF abx ldab byte_E0 abx ldab byte_E1 abx ldab byte_DE abx tim #2, STATUS_5A ; test AC Switch beq loc_E1ED ldab byte_C621 abx loc_E1ED: ; CODE XREF: DO_IAC_2+1Fj tim #$20, STATUS_8D ; ' ' bne loc_E1FB tim #8, STATUS_8C beq loc_E1FB ldab byte_C624 abx loc_E1FB: ; CODE XREF: DO_IAC_2+28j DO_IAC_2+2Dj tim #8, STATUS_5B ; test PS Switch beq loc_E204 ldab byte_C625 abx loc_E204: ; CODE XREF: DO_IAC_2+36j xgdx subd #$100 bhi loc_E20D clrb bra loc_E235 ; --------------------------------------------------------------------------- loc_E20D: ; CODE XREF: DO_IAC_2+40j lsld xgdx ldaa byte_E3 jsr MULT_8x16? std byte_40 lsrd std byte_42 ldx byte_40 ldaa byte_E4 jsr MULT_8x16? addd byte_42 std byte_40 lsrd std byte_42 ldx byte_40 ldaa byte_E5 jsr MULT_8x16? addd byte_42 tsta beq loc_E235 ldab #$FF loc_E235: ; CODE XREF: DO_IAC_2+43j DO_IAC_2+69j stab IACDuty tba ldx #$7D0 jsr MULT_8x16? std byte_D4 rts ; End of function DO_IAC_2 ; =============== S U B R O U T I N E ======================================= sub_E241: ; CODE XREF: ROM:CA29P sub_E164+1DP tim #1, byte_91 beq locret_E250 ldaa WTS ldx #$C66B jsr sub_F1C3 std byte_DC locret_E250: ; CODE XREF: sub_E241+3j rts ; End of function sub_E241 ; =============== S U B R O U T I N E ======================================= sub_E251: ; CODE XREF: ROM:CA2CP sub_E164+20P tim #$10, STATUS_5B beq loc_E25B ldaa byte_C622 staa byte_DE loc_E25B: ; CODE XREF: sub_E251+3j ldaa byte_C632 tim #2, STATUS_5A ; test AC Switch bne loc_E268 ldaa byte_D9 beq locret_E26A deca loc_E268: ; CODE XREF: sub_E251+10j staa byte_D9 locret_E26A: ; CODE XREF: sub_E251+14j rts ; End of function sub_E251 ; =============== S U B R O U T I N E ======================================= sub_E26B: ; CODE XREF: ROM:CA84P ldd byte_DC beq locret_E28B tim #1, byte_91 bne locret_E28B tim #$20, byte_CC ; ' ' bne loc_E282 ldx RPMH ; somewhere here is idle switch cpx TIDLE bcs locret_E28B oim #$20, byte_CC ; ' ' loc_E282: ; CODE XREF: sub_E26B+Cj subd word_C61F bcc loc_E289 clra clrb loc_E289: ; CODE XREF: sub_E26B+1Aj std byte_DC locret_E28B: ; CODE XREF: sub_E26B+2j sub_E26B+7j ... rts ; End of function sub_E26B ; =============== S U B R O U T I N E ======================================= sub_E28C: ; CODE XREF: ROM:CA87P ldaa byte_DE beq locret_E29D tim #$10, STATUS_5B bne locret_E29D suba byte_C623 bcc loc_E29B clra loc_E29B: ; CODE XREF: sub_E28C+Cj staa byte_DE locret_E29D: ; CODE XREF: sub_E28C+2j sub_E28C+7j rts ; End of function sub_E28C ; =============== S U B R O U T I N E ======================================= sub_E29E: ; CODE XREF: ROM:CA2FP ldaa #$C0 ; '' ldab TPS_CF? subb TPSA bcs loc_E2A9 mul bra loc_E2AC ; --------------------------------------------------------------------------- loc_E2A9: ; CODE XREF: sub_E29E+6j negb mul nega loc_E2AC: ; CODE XREF: sub_E29E+9j adda TPSA ldab TPS_CF? stab byte_40 staa TPS_CF? suba TPSA bcc loc_E2B9 clra loc_E2B9: ; CODE XREF: sub_E29E+18j staa byte_D0 staa byte_46 ldd #$8001 std byte_44 ldab byte_85 stab byte_41 ldx #$C056 jsr sub_F01C stab byte_85 tim #$18, INT_FC0 bne loc_E2FA tim #$20, STATUS_5A ; ' ' bne loc_E2FA tim #$10, byte_81 beq loc_E2FA tim #$80, byte_41 ; '' bne locret_E2F9 tim #$80, byte_85 ; '' beq loc_E2FA tim #1, byte_CC bne locret_E2F9 ldaa byte_40 ldx #$C675 jsr sub_F19F staa byte_DF oim #1, byte_CC locret_E2F9: ; CODE XREF: sub_E29E+42j sub_E29E+4Cj rts ; --------------------------------------------------------------------------- loc_E2FA: ; CODE XREF: sub_E29E+33j sub_E29E+38j ... aim #$FE, byte_CC ; '' rts ; End of function sub_E29E ; =============== S U B R O U T I N E ======================================= sub_E2FE: ; CODE XREF: ROM:CA8AP ldaa byte_DF beq locret_E30F tim #1, byte_CC bne locret_E30F suba byte_C627 bcc loc_E30D clra loc_E30D: ; CODE XREF: sub_E2FE+Cj staa byte_DF locret_E30F: ; CODE XREF: sub_E2FE+2j sub_E2FE+7j rts ; End of function sub_E2FE ; =============== S U B R O U T I N E ======================================= sub_E310: ; CODE XREF: ROM:CA32P ldaa byte_DC bne locret_E335 tim #$20, STATUS_8C ; ' ' bne locret_E335 tim #$40, byte_81 ; '@' bne locret_E335 tim #8, WTS? beq locret_E335 tim #1, STATUS_8C beq locret_E335 tim #8, byte_CC beq locret_E335 aim #$BF, byte_CC ; '' ldaa byte_C628 staa byte_E0 locret_E335: ; CODE XREF: sub_E310+2j sub_E310+7j ... rts ; End of function sub_E310 ; =============== S U B R O U T I N E ======================================= sub_E336: ; CODE XREF: ROM:CAA0P tim #$40, byte_CC ; '@' bne loc_E343 tim #$40, byte_81 ; '@' beq locret_E34F oim #$40, byte_CC ; '@' loc_E343: ; CODE XREF: sub_E336+3j ldaa byte_E0 beq locret_E34F suba byte_C629 bcc loc_E34D clra loc_E34D: ; CODE XREF: sub_E336+14j staa byte_E0 locret_E34F: ; CODE XREF: sub_E336+8j sub_E336+Fj rts ; End of function sub_E336 ; =============== S U B R O U T I N E ======================================= DO_TIDLE: ; CODE XREF: ROM:CA71P sub_E164+17P ldaa OBD_CTRL ; Test for TIDLE scan tool control cmpa #$C0 ; '' ; TIDLE control byte bcs TIDLE_WTS ; not under scan tool control set by WTS value ldaa OBD_CTRL+1 ; otherwise load TIDLE RPM byte clrb bra STORE_TIDLE ; --------------------------------------------------------------------------- TIDLE_WTS: ; CODE XREF: DO_TIDLE+5j clra ; clear A tim #2, STATUS_5A ; test AC Switch beq TIDLE_AC_OFF adda #2 ; add two if AC On TIDLE_AC_OFF: ; CODE XREF: DO_TIDLE+11j tim #$20, STATUS_8D ; ' ' bne loc_E370 ; store idle up value in byte_D1 tim #4, STATUS_8C ; test PN/D status beq loc_E370 ; store idle up value in byte_D1 inca ; add one if in PN loc_E370: ; CODE XREF: DO_TIDLE+18j DO_TIDLE+1Dj staa byte_D1 ; store idle up value in byte_D1 tim #$20, STATUS_8D ; ' ' ; test something else? beq loc_E384 ldx #$C693 ; TIDLE with AC?? clrb tim #2, STATUS_5A ; test AC Switch beq loc_E38A ldab #7 bra loc_E38A ; --------------------------------------------------------------------------- loc_E384: ; CODE XREF: DO_TIDLE+25j ldab #7 mul ldx #$C6A1 loc_E38A: ; CODE XREF: DO_TIDLE+2Ej DO_TIDLE+32j abx ldaa WTS jsr sub_F1C3 STORE_TIDLE: ; CODE XREF: DO_TIDLE+Bj lsrd lsrd lsrd lsrd lsrd std TIDLE ; RPM*0.98 lsrd lsrd lsrd tsta beq loc_E39F ; RPM/7,8125 ldab #$FF loc_E39F: ; CODE XREF: DO_TIDLE+4Bj stab TIDLE_OBD ; RPM/7,8125 rts ; End of function DO_TIDLE ; =============== S U B R O U T I N E ======================================= DO_IAC: ; CODE XREF: ROM:CA96P tim #1, byte_91 bne loc_E3EB tim #$20, STATUS_8C ; ' ' bne loc_E3EB tim #1, STATUS_8C beq loc_E3EB tim #8, byte_CC beq loc_E3EB tim #$A6, FCodes0 ; '' ; test O2,TPS,VSS fault codes bne loc_E3EB tim #1, FCodes1 ; test AFM fault bne loc_E3EB ldaa byte_178 anda #$40 ; '@' bne loc_E3EB tim #$20, byte_CC ; ' ' beq loc_E3EB ldx RPMH ; Get RPM*0.98 cpx TIDLE ; test against target idle value bcs loc_E3FD ldaa byte_DF bne loc_E3EB tim #2, byte_CC beq loc_E3E0 ; test AC Switch ldaa byte_DC bne loc_E3EB loc_E3E0: ; CODE XREF: DO_IAC+37j tim #2, STATUS_5A ; test AC Switch bne loc_E405 ldaa byte_D9 bne loc_E3F4 bra loc_E405 ; --------------------------------------------------------------------------- loc_E3EB: ; CODE XREF: DO_IAC+3j DO_IAC+8j ... ldaa byte_C631 clrb std byte_E1 aim #$7F, byte_CC ; '' loc_E3F4: ; CODE XREF: DO_IAC+44j aim #$FE, byte_E6 ; '' ldaa byte_C61A staa byte_D6 rts ; --------------------------------------------------------------------------- loc_E3FD: ; CODE XREF: DO_IAC+2Ej tim #2, byte_D1 bne loc_E405 clr byte_D9 loc_E405: ; CODE XREF: DO_IAC+40j DO_IAC+46j ... aim #$FD, byte_CC ; '' oim #1, byte_E6 clr byte_40 ; byte_40 = 0 ldd RPMH ; Get RPM*0.98 subd TIDLE ; D= RPM-TIDLE bcc loc_E41B Execute following code if RPM is above TIDLE coma negb sbca #$FF inc byte_40 ; byte_40 = 1 loc_E41B: ; CODE XREF: DO_IAC+6Fj tsta beq loc_E420 ldab #$FF loc_E420: ; CODE XREF: DO_IAC+79j tba ldx #$C680 ; IAC steps or timer??? ldab OBD_CTRL ; test OBD Control bytes? andb #$C0 ; '' cmpb #$80 ; '' ; IAC Cal Mode? beq loc_E43E ldab ACIA_STATUS ; get ACIA status andb #$10 ; test for data request - we drop out if comms is lost bne loc_E441 tim #4, byte_8E bne loc_E441 tim #$40, STATUS_5A ; '@' beq loc_E441 loc_E43E: ; CODE XREF: DO_IAC+88j ldx #$C68B loc_E441: ; CODE XREF: DO_IAC+8Fj DO_IAC+94j ... jsr sub_F197 clrb lsrd lsrd lsrd std byte_42 ldd byte_E1 tst byte_40 bne loc_E459 subd byte_42 bcc loc_E460 clra clrb bra loc_E460 ; --------------------------------------------------------------------------- loc_E459: ; CODE XREF: DO_IAC+ACj addd byte_42 bcc loc_E460 ldd #$FFFF loc_E460: ; CODE XREF: DO_IAC+B0j DO_IAC+B4j ... xgdx tim #$20, WTS? ; ' ' beq loc_E470 cpx word_C62A bcc loc_E476 cpx word_C62C bcs loc_E483 loc_E470: ; CODE XREF: DO_IAC+C1j ldab IACDuty cmpb #$F3 ; '' bcs loc_E47F loc_E476: ; CODE XREF: DO_IAC+C6j oim #$80, byte_CC ; '' cpx byte_E1 bcc loc_E491 bra loc_E48F ; --------------------------------------------------------------------------- loc_E47F: ; CODE XREF: DO_IAC+D1j cmpb #$5A ; 'Z' bcc loc_E48C loc_E483: ; CODE XREF: DO_IAC+CBj oim #$80, byte_CC ; '' cpx byte_E1 bls loc_E491 bra loc_E48F ; --------------------------------------------------------------------------- loc_E48C: ; CODE XREF: DO_IAC+DEj aim #$7F, byte_CC ; '' loc_E48F: ; CODE XREF: DO_IAC+DAj DO_IAC+E7j stx byte_E1 loc_E491: ; CODE XREF: DO_IAC+D8j DO_IAC+E5j ldaa byte_D6 beq locret_E498 deca staa byte_D6 locret_E498: ; CODE XREF: DO_IAC+F0j rts ; End of function DO_IAC ; =============== S U B R O U T I N E ======================================= sub_E499: ; CODE XREF: ROM:CAB9P ldaa OBD_CTRL ; get OBD Control bytes bita #$80 ; '' ; test IAC Cal control bne locret_E4B5 ldaa ACIA_STATUS ; get ACIA_Status anda #$10 ; check that we're still scanning bne loc_E4B6 tim #4, byte_8E beq loc_E4B6 ldx #$8080 stx word_179 stx word_17B locret_E4B5: ; CODE XREF: sub_E499+5j rts ; --------------------------------------------------------------------------- loc_E4B6: ; CODE XREF: sub_E499+Cj sub_E499+11j tst byte_D6 bne locret_E514 tim #$10, byte_86 beq locret_E514 tim #2, IAT? bne locret_E514 ldd RPMH ; idle switch???? subd TIDLE bcc loc_E4CF coma negb sbca #$FF loc_E4CF: ; CODE XREF: sub_E499+30j xgdx cpx word_C61B bhi locret_E514 tim #8, STATUS_5B ; test PS Switch bne locret_E514 tim #$80, byte_CC ; '' bne locret_E514 clra ldab byte_E1 subb #$80 ; '' bcc loc_E4E8 negb inca loc_E4E8: ; CODE XREF: sub_E499+4Bj cmpb byte_C61D bcs locret_E514 ldx #$179 ldab byte_D1 abx ldab 0,x tsta beq loc_E500 subb byte_C62E bcc loc_E507 clrb bra loc_E507 ; --------------------------------------------------------------------------- loc_E500: ; CODE XREF: sub_E499+5Dj addb byte_C62E bcc loc_E507 ldab #$FF loc_E507: ; CODE XREF: sub_E499+62j sub_E499+65j ... tba stx byte_40 ldx #$C62F jsr sub_EFE7 ldx byte_40 staa 0,x locret_E514: ; CODE XREF: sub_E499+20j sub_E499+25j ... rts ; End of function sub_E499 ; =============== S U B R O U T I N E ======================================= BATTV_CORR2: ; CODE XREF: ROM:CA4EP sub_E164+EP ldaa BATTV ldx #$C6C0 jsr sub_F19F staa byte_E3 rts ; End of function BATTV_CORR2 ; =============== S U B R O U T I N E ======================================= sub_E520: ; CODE XREF: ROM:CA8DP sub_E164+1AP ldaa WTS ldx #$C636 tim #$20, STATUS_8D ; ' ' bne loc_E52D ldx #$C652 loc_E52D: ; CODE XREF: sub_E520+8j jsr sub_F19F staa byte_DB rts ; End of function sub_E520 ; =============== S U B R O U T I N E ======================================= sub_E533: ; CODE XREF: ROM:CA90P sub_E164+11P ldaa WTS ldx #$C6C8 jsr sub_F19F staa byte_E4 rts ; End of function sub_E533 ; =============== S U B R O U T I N E ======================================= sub_E53E: ; CODE XREF: ROM:CA93P sub_E164+14P ldaa IAT ldx #$C6D3 jsr sub_F19F staa byte_E5 rts ; End of function sub_E53E ; =============== S U B R O U T I N E ======================================= sub_E549: ; CODE XREF: sub_C820+142P ldaa RPMH cmpa #2 ; 500 RPM = cranking???? bcs loc_E588 cmpa #8 bcc loc_E579 tim #1, STATUS_8C beq loc_E579 ldab OBD_CTRL ; get OBD control bytes andb #$18 cmpb #$10 ; test for fixed spark control beq loc_E572 ; skip next bit if no fixed spark ldab ACIA_STATUS ; get ACIA_Status andb #$10 ; are we still scanning? bne loc_E579 tim #4, byte_8E beq loc_E579 tim #$40, STATUS_5A ; '@' bne loc_E579 loc_E572: ; CODE XREF: sub_E549+16j ldaa IGN_PARAM2 cmpa #$80 ; '' beq loc_E588 loc_E579: ; CODE XREF: sub_E549+8j sub_E549+Dj ... ldaa byte_FF bne loc_E58A loc_E57D: ; CODE XREF: sub_E549+44j aim #$EF, byte_E6 ; '' ldx #$2002 ; PIA_PORTB aim #$DF, 0,x ; '' ; PIA_PORTB bra IGN_ADV_CALCS? ; RPM ; --------------------------------------------------------------------------- loc_E588: ; CODE XREF: sub_E549+4j sub_E549+2Ej ldaa #6 loc_E58A: ; CODE XREF: sub_E549+32j deca staa byte_FF beq loc_E57D oim #$10, byte_E6 ldx #$2002 ; PIA_PORTB oim #$20, 0,x ; ' ' ; PIA_PORTB IGN_ADV_CALCS?: ; CODE XREF: sub_E549+3Dj jsr CALC_IGN_PARAM1 ; RPM jsr CALC_IGN_PARAM2 ; WTS jsr CALC_IGN_PARAM4 ; RPM jsr CALC_IGN_PARAM6 ; IAT? jsr CALC_IGN_ADV jsr sub_E76F ; RPM? jsr sub_E7A4 jsr sub_E805 sei jsr sub_E93F ; timer? cli rts ; End of function sub_E549 ; =============== S U B R O U T I N E ======================================= CALC_IGN_PARAM1: ; CODE XREF: sub_E549:IGN_ADV_CALCS?P tim #1, STATUS_8C beq loc_E5D6 ldx RPMH cpx #$800 ; 2000 RPM bcs loc_E5C5 ldx #$800 ; 2000 RPM loc_E5C5: ; CODE XREF: CALC_IGN_PARAM1+Aj xgdx subd #$200 ; 1500 RPM bcc loc_E5CD clra clrb loc_E5CD: ; CODE XREF: CALC_IGN_PARAM1+13j lsrd ldx #$C3FC jsr sub_F1A2 bra loc_E609 ; --------------------------------------------------------------------------- loc_E5D6: ; CODE XREF: CALC_IGN_PARAM1+3j ldd RPMH subd #$400 ; 1000 RPM bcc loc_E5DF clra clrb loc_E5DF: ; CODE XREF: CALC_IGN_PARAM1+25j lsrd std byte_44 ldd byte_6B tim #3, SCI_STATUS_53 beq loc_E5EC ldd #$F00 loc_E5EC: ; CODE XREF: CALC_IGN_PARAM1+31j subd #$300 bcc loc_E5F3 ; ignition table 1 clra clrb Ignition tables should be 'normal', start and idle loc_E5F3: ; CODE XREF: CALC_IGN_PARAM1+39j ldx #$C402 ; ignition table 1 tim #$10, STATUS_8D bne loc_E606 ldx #$C4AD ; ignition table 2 tim #8, STATUS_8D beq loc_E606 ldx #$C558 ; ignition table 3 loc_E606: ; CODE XREF: CALC_IGN_PARAM1+43j ; CALC_IGN_PARAM1+4Bj jsr sub_F245 loc_E609: ; CODE XREF: CALC_IGN_PARAM1+1Ej staa IGN_PARAM1 rts ; End of function CALC_IGN_PARAM1 ; =============== S U B R O U T I N E ======================================= CALC_IGN_PARAM2: ; CODE XREF: sub_E549+52P ldaa WTS cmpa #$C0 ; '' bcc loc_E618 ldx #$C60D bra loc_E626 ; --------------------------------------------------------------------------- loc_E618: ; CODE XREF: CALC_IGN_PARAM2+4j cmpa #$D0 ; '' bcs loc_E62B ldab byte_6B cmpb byte_C391 bls loc_E62B ldx #$C617 loc_E626: ; CODE XREF: CALC_IGN_PARAM2+9j jsr sub_F19F bra loc_E62D ; --------------------------------------------------------------------------- loc_E62B: ; CODE XREF: CALC_IGN_PARAM2+Dj ; CALC_IGN_PARAM2+14j ldaa #$80 ; '' loc_E62D: ; CODE XREF: CALC_IGN_PARAM2+1Cj staa IGN_PARAM2 rts ; End of function CALC_IGN_PARAM2 ; =============== S U B R O U T I N E ======================================= CALC_IGN_PARAM4: ; CODE XREF: sub_E549+55P ldd RPMH subd #$19A ; 400 RPM = cranking? bcc loc_E63A clra clrb loc_E63A: ; CODE XREF: CALC_IGN_PARAM4+5j lsrd lsrd tsta beq loc_E642 ldd #$FF loc_E642: ; CODE XREF: CALC_IGN_PARAM4+Cj stab byte_100 tim #$10, byte_E6 beq loc_E64E tba clrb bra loc_E659 ; --------------------------------------------------------------------------- loc_E64E: ; CODE XREF: CALC_IGN_PARAM4+17j subb word_101 sbca #0 lsld lsld lsld addd word_101 loc_E659: ; CODE XREF: CALC_IGN_PARAM4+1Bj std word_101 tim #1, byte_E6 beq loc_E689 tim #1, STATUS_8C beq loc_E689 ldaa byte_120 bne loc_E689 clra ldab byte_100 addd #$10 subb word_101 sbca #0 bcc loc_E67B clra clrb loc_E67B: ; CODE XREF: CALC_IGN_PARAM4+46j tsta beq loc_E680 ldab #$FF loc_E680: ; CODE XREF: CALC_IGN_PARAM4+4Bj tba ldx #$C604 jsr sub_F19F bra loc_E68B ; --------------------------------------------------------------------------- loc_E689: ; CODE XREF: CALC_IGN_PARAM4+2Ej ; CALC_IGN_PARAM4+33j ... ldaa #$80 ; '' loc_E68B: ; CODE XREF: CALC_IGN_PARAM4+56j staa IGN_PARAM4 rts ; End of function CALC_IGN_PARAM4 ; =============== S U B R O U T I N E ======================================= CALC_IGN_PARAM5_A: ; CODE XREF: sub_C820+122P tim #$18, INT_FC0 bne loc_E6AB ldaa byte_103 cmpa byte_C398 bls loc_E6AB tim #2, byte_E6 bne locret_E6AA oim #2, byte_E6 ldaa byte_C395 staa IGN_PARAM5 locret_E6AA: ; CODE XREF: CALC_IGN_PARAM5_A+10j rts ; --------------------------------------------------------------------------- loc_E6AB: ; CODE XREF: CALC_IGN_PARAM5_A+3j ; CALC_IGN_PARAM5_A+Bj aim #$FD, byte_E6 ; '' rts ; End of function CALC_IGN_PARAM5_A ; =============== S U B R O U T I N E ======================================= CALC_IGN_PARAM5_B: ; CODE XREF: sub_C820+145P ldaa IGN_PARAM5 beq locret_E6C2 suba byte_C396 bcs loc_E6BE cmpa byte_C397 bhi loc_E6BF loc_E6BE: ; CODE XREF: CALC_IGN_PARAM5_B+8j clra loc_E6BF: ; CODE XREF: CALC_IGN_PARAM5_B+Dj staa IGN_PARAM5 locret_E6C2: ; CODE XREF: CALC_IGN_PARAM5_B+3j rts ; End of function CALC_IGN_PARAM5_B ; =============== S U B R O U T I N E ======================================= CALC_IGN_PARAM6: ; CODE XREF: sub_E549+58P tim #$18, STATUS_8D bne locret_E719 tim #$40, byte_86 ; '@' beq loc_E705 tim #$40, IAT? ; '@' beq loc_E705 tim #$80, IAT? ; '' bne loc_E705 tim #1, byte_82 beq loc_E705 tim #2, byte_82 bne loc_E705 tim #$20, byte_85 ; ' ' beq loc_E705 tim #4, byte_E6 beq loc_E6FE aim #$FB, byte_E6 ; '' ldd word_C39B tim #$20, STATUS_8D ; ' ' bne loc_E6F9 ldd word_C39D loc_E6F9: ; CODE XREF: CALC_IGN_PARAM6+31j stab byte_121 bra loc_E716 ; --------------------------------------------------------------------------- loc_E6FE: ; CODE XREF: CALC_IGN_PARAM6+26j tst byte_121 bne locret_E719 bra loc_E70B ; --------------------------------------------------------------------------- loc_E705: ; CODE XREF: CALC_IGN_PARAM6+8j ; CALC_IGN_PARAM6+Dj ... aim #$FB, byte_E6 ; '' clr byte_121 loc_E70B: ; CODE XREF: CALC_IGN_PARAM6+40j ldaa IGN_PARAM6 beq locret_E719 suba byte_C399 bcc loc_E716 clra loc_E716: ; CODE XREF: CALC_IGN_PARAM6+39j ; CALC_IGN_PARAM6+50j staa IGN_PARAM6 locret_E719: ; CODE XREF: CALC_IGN_PARAM6+3j ; CALC_IGN_PARAM6+3Ej ... rts ; End of function CALC_IGN_PARAM6 ; =============== S U B R O U T I N E ======================================= CALC_IGN_ADV: ; CODE XREF: sub_E549+5BP clra ldab IGN_PARAM1 addb IGN_PARAM2 adca #0 subd #$80 ; '' bcc loc_E72A clra clrb loc_E72A: ; CODE XREF: CALC_IGN_ADV+Cj tsta beq loc_E730 ldd #$FF loc_E730: ; CODE XREF: CALC_IGN_ADV+11j subb IGN_PARAM3 sbca #0 lsld lsld lsld lsld lsld lsld lsld addd IGN_PARAM3 std IGN_PARAM3 tab clra addb IGN_PARAM4 adca #0 subb IGN_PARAM5 sbca #0 bcs loc_E75C subb IGN_PARAM6 sbca #0 bcs loc_E75C subd #$80 ; '' bcc loc_E75E loc_E75C: ; CODE XREF: CALC_IGN_ADV+34j ; CALC_IGN_ADV+3Bj clra clrb loc_E75E: ; CODE XREF: CALC_IGN_ADV+40j tsta beq LIMIT_ADV ldd #$FF LIMIT_ADV: ; CODE XREF: CALC_IGN_ADV+45j tba ldx #$C392 jsr sub_EFE7 ; limits = ADh, 13h = 50degs -> -5degs staa IGNADV rts ; End of function CALC_IGN_ADV ; =============== S U B R O U T I N E ======================================= sub_E76F: ; CODE XREF: sub_E549+5EP ldd RPMH subd #$200 ; 500 RPM bcc loc_E778 clra clrb loc_E778: ; CODE XREF: sub_E76F+5j lsrd std byte_44 ldaa BATTV suba #$73 ; 's' bcc loc_E782 clra loc_E782: ; CODE XREF: sub_E76F+10j ldab #$10 mul ldx #$C3A1 jsr sub_F245 lsrd lsrd lsrd lsrd std byte_F0 ldd byte_E9 subd #$FA ; '' subd byte_F0 bcc loc_E79E addd byte_F0 std byte_F0 loc_E79E: ; CODE XREF: sub_E76F+29j ldd byte_F0 lsrd std byte_F2 rts ; End of function sub_E76F ; =============== S U B R O U T I N E ======================================= sub_E7A4: ; CODE XREF: sub_E549+61P ldd byte_E9 subd word_10C std word_10E jsr sub_E83B ldd byte_E9 lsrd lsrd lsrd lsrd std byte_40 lsrd addd byte_40 std byte_42 ldd byte_40 lsrd lsrd lsrd lsrd lsrd lsrd lsrd addd byte_42 std word_11E ldx word_11C ldaa IGNADV jsr MULT_8x16? addb byte_C390 adca #0 bcc loc_E7DD ldd #$FFFF loc_E7DD: ; CODE XREF: sub_E7A4+34j std byte_EE coma negb sbca #$FF subd #$71 ; 'q' sei clr byte_F4 addd word_11E bcs loc_E7FE inc byte_F4 addd word_11A bcs loc_E7FE addd byte_EE std byte_EE ldd #0 loc_E7FE: ; CODE XREF: sub_E7A4+49j sub_E7A4+51j addd #$71 ; 'q' std byte_F5 cli rts ; End of function sub_E7A4 ; =============== S U B R O U T I N E ======================================= sub_E805: ; CODE XREF: sub_E549+64P ldd byte_EE addd byte_F0 coma negb sbca #$FF subd #$71 ; 'q' sei clr byte_F7 addd word_11E bcs loc_E834 inc byte_F7 addd word_11A bcs loc_E834 inc byte_F7 addd word_10C bcs loc_E834 inc byte_F7 addd word_11A bcs loc_E834 ldd #0 loc_E834: ; CODE XREF: sub_E805+12j sub_E805+1Aj ... addd #$71 ; 'q' std byte_F8 cli rts ; End of function sub_E805 ; =============== S U B R O U T I N E ======================================= sub_E83B: ; CODE XREF: sub_E7A4+8P ldaa byte_FF beq loc_E855 clra clrb std word_112 std word_114 std word_116 std word_118 ldd word_10E std word_110 bra loc_E883 ; --------------------------------------------------------------------------- loc_E855: ; CODE XREF: sub_E83B+2j ldd word_10E subd word_110 addd word_118 asra rorb ldx word_116 stx word_118 ldx word_114 stx word_116 ldx word_112 stx word_114 std word_112 ldd word_110 addd word_10E rora rorb std word_110 addd word_118 loc_E883: ; CODE XREF: sub_E83B+18j std word_11A rts ; End of function sub_E83B ; =============== S U B R O U T I N E ======================================= CLR_OC1_INT: ; CODE XREF: ROM:E973P ldaa byte_FF beq CAS_E892 ldaa byte_18 ; timer control? ldx byte_1B ; Output Compare Register stx byte_1B ; Output Compare Register rts ; End of function CLR_OC1_INT ; =============== S U B R O U T I N E ======================================= CAS_E892: ; CODE XREF: CLR_OC1_INT+2j ; CAS_INT_HNDLR:loc_E9EDP ldx #$F7 ; '' loc_E895: ; CODE XREF: CAS_E892+Dj ldab PORT1 pshb ldaa byte_18 ; timer control? eorb PORT1 bitb #2 pulb bne loc_E895 anda #$48 ; 'H' ; test flags cmpa #$48 ; 'H' bne loc_E8A9 bra loc_E8AF ; --------------------------------------------------------------------------- loc_E8A9: ; CODE XREF: CAS_E892+13j bitb #2 bne loc_E8C8 bra loc_E8C5 ; --------------------------------------------------------------------------- loc_E8AF: ; CODE XREF: CAS_E892+15j bitb #2 beq loc_E8C1 ldaa #2 ldab byte_18 ; timer control? bitb #2 bne loc_E8BD ldaa #3 loc_E8BD: ; CODE XREF: CAS_E892+27j staa byte_FC bra loc_E8C8 ; --------------------------------------------------------------------------- loc_E8C1: ; CODE XREF: CAS_E892+1Fj ldd byte_1B ; Output Compare Register std byte_FA loc_E8C5: ; CODE XREF: CAS_E892+1Bj ldx #$F4 ; '' loc_E8C8: ; CODE XREF: CAS_E892+19j CAS_E892+2Dj ldaa byte_FC cmpa 0,x beq sub_E900 bcc loc_E8F5 ldd byte_19 ; get timer? addd #$71 ; 'q' ; add $71 psha ; save A ldaa byte_18 ; test control reg? cpx #$F7 ; '' ; control byte = F7? beq loc_E8EE bita #1 beq loc_E8F2 loc_E8E1: ; CODE XREF: CAS_E892+5Ej pula subd byte_1B ; Output Compare Register bmi loc_E8EA cmpa #1 bcs locret_E93E loc_E8EA: ; CODE XREF: CAS_E892+52j addd byte_1B ; Output Compare Register bra loc_E904 ; --------------------------------------------------------------------------- loc_E8EE: ; CODE XREF: CAS_E892+49j bita #1 beq loc_E8E1 loc_E8F2: ; CODE XREF: CAS_E892+4Dj pula bra loc_E904 ; --------------------------------------------------------------------------- loc_E8F5: ; CODE XREF: CAS_E892+3Cj ldaa #$F7 ; '' anda byte_18 ; timer control? staa byte_18 ; timer control? ldd byte_1B ; Output Compare Register std byte_1B ; Output Compare Register rts ; End of function CAS_E892 ; =============== S U B R O U T I N E ======================================= sub_E900: ; CODE XREF: CAS_E892+3Aj sub_E93F+1FP ldd 1,x addd CAS_FD loc_E904: ; CODE XREF: CAS_E892+5Aj CAS_E892+61j cpx #$F7 ; '' beq loc_E91A subd byte_FA cmpa #$FF bcc loc_E913 subd byte_F2 bcc loc_E916 loc_E913: ; CODE XREF: sub_E900+Dj ldd #0 loc_E916: ; CODE XREF: sub_E900+11j addd byte_FA addd byte_F2 loc_E91A: ; CODE XREF: sub_E900+7j pshx xgdx ldd byte_19 addd #7 std byte_4A cpx byte_4A bpl loc_E928 xgdx loc_E928: ; CODE XREF: sub_E900+25j stx byte_1B ; Output Compare Register pulx ldaa byte_18 ; timer control? anda #$FE ; '' cpx #$F7 ; '' beq loc_E936 oraa #1 loc_E936: ; CODE XREF: sub_E900+32j oraa #8 staa byte_18 ; timer control? ldd byte_1B ; Output Compare Register std byte_1B ; Output Compare Register locret_E93E: ; CODE XREF: CAS_E892+56j rts ; End of function sub_E900 ; =============== S U B R O U T I N E ======================================= sub_E93F: ; CODE XREF: sub_E549+68P ldaa byte_FF beq loc_E944 rts ; --------------------------------------------------------------------------- loc_E944: ; CODE XREF: sub_E93F+2j ldaa byte_FC cmpa #2 bne locret_E96A ldaa byte_F7 cmpa #1 beq loc_E962 ; timer cmpa #2 bne locret_E96A ldx byte_F8 cpx #$9C4 bcs locret_E96A ldx #$F7 ; '' jsr sub_E900 rts ; --------------------------------------------------------------------------- loc_E962: ; CODE XREF: sub_E93F+Fj ldaa byte_18 ; timer anda #$F7 ; '' oraa #1 staa byte_18 ; timer control? locret_E96A: ; CODE XREF: sub_E93F+9j sub_E93F+13j ... rts ; End of function sub_E93F ; --------------------------------------------------------------------------- OC1_ISR: ; timer control? ldaa byte_18 anda #$48 ; 'H' cmpa #$48 ; 'H' bne loc_E976 ; not $48 means not OC1? jsr CLR_OC1_INT loc_E976: ; CODE XREF: ROM:E971j tim #$40, TCSR1 ; '@' beq locret_E97E jsr OC1_INT_HDLR locret_E97E: ; CODE XREF: ROM:E979j rti ; --------------------------------------------------------------------------- OCI3_ISR?: tim #$40, byte_2D ; '@' beq loc_E987 ; if int. flag not set then bra jsr sub_E18B loc_E987: ; CODE XREF: ROM:E982j tim #$80, byte_2D ; '' ; if int. flag not set then bra beq locret_E98F jsr sub_EA6E locret_E98F: ; CODE XREF: ROM:E98Aj rti ; --------------------------------------------------------------------------- IC1_ISR: jsr CAS_INT_HNDLR rti ; =============== S U B R O U T I N E ======================================= CAS_INT_HNDLR: ; CODE XREF: ROM:IC1_ISRP ldaa byte_18 ; timer control? bita #$80 ; '' ; test IC2 IF? bne IC1_INT_HDLR ; branch if IC1 interrupt rts ; or just return without clearing flags?? ; --------------------------------------------------------------------------- IC1_INT_HDLR: ; CODE XREF: CAS_INT_HNDLR+4j ldx byte_1D ; input capture register? tab lsrb eorb PORT1 ; PORT1 is timer port bitb #1 beq loc_E9A6 rts ; --------------------------------------------------------------------------- loc_E9A6: ; CODE XREF: CAS_INT_HNDLR+Fj bita #2 beq STORE_CAS_1 tim #1, byte_91 beq STORE_CAS_1 tim #$20, STATUS_5A ; ' ' beq STORE_CAS_1 ldd byte_EB addd #$9C4 std byte_4A cpx byte_4A bpl STORE_CAS ldab byte_E7 cmpb #4 bcc STORE_CAS rts ; --------------------------------------------------------------------------- STORE_CAS: ; CODE XREF: CAS_INT_HNDLR+29j ; CAS_INT_HNDLR+2Fj ldaa byte_18 ; timer control? STORE_CAS_1: ; CODE XREF: CAS_INT_HNDLR+14j ; CAS_INT_HNDLR+19j ... eora #2 staa byte_18 ; timer control? stx CAS_FD aim #$FB, FCodes1 ; '' ; Clear CAS fault ldab #$7D ; '}' stab CAS_COUNT ldab byte_FF beq CAS_E9E5 ldab #1 bita #2 beq CAS_E9E1 ldab #2 CAS_E9E1: ; CODE XREF: CAS_INT_HNDLR+49j stab byte_FC bra CAS_E9F0 ; --------------------------------------------------------------------------- CAS_E9E5: ; CODE XREF: CAS_INT_HNDLR+43j dec byte_FC bpl loc_E9ED clr byte_FC loc_E9ED: ; CODE XREF: CAS_INT_HNDLR+54j jsr CAS_E892 CAS_E9F0: ; CODE XREF: CAS_INT_HNDLR+4Fj ldx #$E9 ; '' tim #2, byte_18 ; timer control? bne loc_E9FB ldx #$10C loc_E9FB: ; CODE XREF: CAS_INT_HNDLR+62j ldab byte_E7 cmpb #$1E bcs loc_EA06 ldd #$FFFF bra loc_EA0A ; byte_10C ; --------------------------------------------------------------------------- loc_EA06: ; CODE XREF: CAS_INT_HNDLR+6Bj ldd byte_1D subd byte_EB loc_EA0A: ; CODE XREF: CAS_INT_HNDLR+70j std 0,x ; byte_10C tim #2, byte_18 ; timer control? bne loc_EA38 tim #$80, byte_25 ; '' ; test MSB on byte_25 beq loc_EA21 ldaa #$7F ; '' ; load byte_25 with 7Fh staa byte_25 aim #$FD, FCodes1 ; '' ; clear IFS fault ldaa #8 bra loc_EA26 ; and store ; --------------------------------------------------------------------------- loc_EA21: ; CODE XREF: CAS_INT_HNDLR+80j ldaa IFS_COUNT beq loc_EA28 deca ; decrement 78 loc_EA26: ; CODE XREF: CAS_INT_HNDLR+8Bj staa IFS_COUNT ; and store loc_EA28: ; CODE XREF: CAS_INT_HNDLR+8Fj ldaa byte_FF beq locret_EA6D ldx byte_19 ldab #3 abx stx byte_1B ; Output Compare Register aim #$FE, byte_18 ; '' ; timer control? bra locret_EA6D ; --------------------------------------------------------------------------- loc_EA38: ; CODE XREF: CAS_INT_HNDLR+7Bj ldx byte_1D ldab byte_E7 stab byte_E8 clra staa byte_E7 stx byte_EB oim #$80, byte_5C ; '' ldaa byte_FF beq loc_EA54 ldx byte_19 ; get timer ldab #3 abx ; add 3 stx byte_1B ; store in OC reg oim #1, byte_18 ; set OC flag loc_EA54: ; CODE XREF: CAS_INT_HNDLR+B4j ldaa COUNT_ED? cmpa #3 bcs loc_EA5D clra bra loc_EA5E ; --------------------------------------------------------------------------- loc_EA5D: ; CODE XREF: CAS_INT_HNDLR+C4j inca loc_EA5E: ; CODE XREF: CAS_INT_HNDLR+C7j staa COUNT_ED? bita #1 bne *+2 ldd byte_E9 lsrd std word_11C jsr sub_D818 locret_EA6D: ; CODE XREF: CAS_INT_HNDLR+96j ; CAS_INT_HNDLR+A2j rts ; End of function CAS_INT_HNDLR ; =============== S U B R O U T I N E ======================================= sub_EA6E: ; CODE XREF: ROM:E98CP tim #8, PORT1 ; *** P13 *** beq loc_EAA4 ldd byte_2B addd #$F42 std word_122 aim #$BF, byte_28 ; '' ldd word_124 addd byte_2B std byte_4A ldab #3 ; B=3 ldx byte_29 ; timer? abx cpx byte_4A bpl loc_EA90 ; output compare ldx byte_4A loc_EA90: ; CODE XREF: sub_EA6E+1Ej stx byte_2B ; output compare ldaa VSS_COUNT? inca cmpa #$F bcs loc_EA9B clra loc_EA9B: ; CODE XREF: sub_EA6E+2Aj staa VSS_COUNT? bne locret_EAA3 jsr VSS_CALCS locret_EAA3: ; CODE XREF: sub_EA6E+30j rts ; --------------------------------------------------------------------------- loc_EAA4: ; CODE XREF: sub_EA6E+3j oim #$40, byte_28 ; '@' ldab #3 ldx byte_29 abx cpx word_122 bpl loc_EAB4 ldx word_122 loc_EAB4: ; CODE XREF: sub_EA6E+41j stx byte_2B rts ; End of function sub_EA6E ; =============== S U B R O U T I N E ======================================= DO_EGR: ; CODE XREF: ROM:CA5EP ldx #$2002 ; PIA_PORTB tim #2, WTS? beq Set_EGR_On? tim #1, WTS? bne Set_EGR_On? tim #$20, STATUS_8C ; ' ' bne loc_EAD0 tim #$20, byte_80 ; ' ' beq Set_EGR_On? bra Clr_EGR_On ; --------------------------------------------------------------------------- loc_EAD0: ; CODE XREF: DO_EGR+10j tim #8, byte_80 bne Set_EGR_On? tim #8, byte_83 bne Set_EGR_On? tim #4, byte_83 beq Set_EGR_On? tim #1, STATUS_8C bne Set_EGR_On? ldd byte_A3 bne Set_EGR_On? Clr_EGR_On: ; CODE XREF: DO_EGR+17j aim #$F7, 0,x ; '' bra locret_EAF0 ; --------------------------------------------------------------------------- Set_EGR_On?: ; CODE XREF: DO_EGR+6j DO_EGR+Bj ... oim #8, 0,x locret_EAF0: ; CODE XREF: DO_EGR+34j rts ; End of function DO_EGR ; =============== S U B R O U T I N E ======================================= DO_EVAP_PURGE: ; CODE XREF: ROM:CA61P ldx #$2002 ; PIA_PORTB tim #4, WTS? beq Set_Evap_Purge tim #$20, STATUS_8C ; ' ' bne loc_EB05 tim #$40, byte_80 ; '@' beq Set_Evap_Purge bra Clr_Evap_Purge ; --------------------------------------------------------------------------- loc_EB05: ; CODE XREF: DO_EVAP_PURGE+Bj tim #2, byte_80 beq Set_Evap_Purge tim #$20, byte_83 ; ' ' bne Set_Evap_Purge tim #$10, byte_83 beq Set_Evap_Purge tim #1, STATUS_8C bne Set_Evap_Purge ldd byte_A3 bne Set_Evap_Purge Clr_Evap_Purge: ; CODE XREF: DO_EVAP_PURGE+12j aim #$EF, 0,x ; '' bra locret_EB25 ; --------------------------------------------------------------------------- Set_Evap_Purge: ; CODE XREF: DO_EVAP_PURGE+6j ; DO_EVAP_PURGE+10j ... oim #$10, 0,x locret_EB25: ; CODE XREF: DO_EVAP_PURGE+2Fj rts ; End of function DO_EVAP_PURGE ; =============== S U B R O U T I N E ======================================= sub_EB26: ; CODE XREF: ROM:CA64P tim #$18, STATUS_8D bne loc_EB62 tim #1, byte_91 bne loc_EB62 tim #$10, WTS? bne loc_EB62 ldaa WTS_SH ldx #$C38C ; WTS LUT jsr sub_F19F tab ldaa byte_BC cba bcs loc_EB62 cmpa byte_C1A2 bcc loc_EB54 tim #4, byte_81 bne loc_EB62 tim #$40, byte_83 ; '@' bne loc_EB62 bra loc_EB5E ; *** P14 *** ; --------------------------------------------------------------------------- loc_EB54: ; CODE XREF: sub_EB26+20j tim #8, byte_81 bne loc_EB62 tim #$80, byte_83 ; '' bne loc_EB62 loc_EB5E: ; CODE XREF: sub_EB26+2Cj aim #$EF, PORT1 ; '' ; *** P14 *** rts ; --------------------------------------------------------------------------- loc_EB62: ; CODE XREF: sub_EB26+3j sub_EB26+8j ... oim #$10, PORT1 ; *** P14 *** rts ; End of function sub_EB26 ; =============== S U B R O U T I N E ======================================= sub_EB66: ; CODE XREF: sub_C820+69P ROM:CA7BP ldx #$2002 ; PIA_PORTB tim #$20, byte_86 ; ' ' beq loc_EB72 aim #$FB, 0,x ; '' rts ; --------------------------------------------------------------------------- loc_EB72: ; CODE XREF: sub_EB66+6j oim #4, 0,x rts ; End of function sub_EB66 ; =============== S U B R O U T I N E ======================================= sub_EB76: ; CODE XREF: ROM:CA26P ldaa ACIA_STATUS ; get ACIA_Status anda #$10 ; are we still scanning? bne loc_EB9A tim #$40, STATUS_5A ; '@' beq loc_EB9A tim #4, byte_8E bne loc_EB9A tim #$20, byte_8E ; ' ' bne loc_EBAA oim #$20, byte_8E ; ' ' ldx #$2002 ; PIA_PORTB aim #$FD, 0,x ; '' clr byte_129 bra loc_EBEF ; --------------------------------------------------------------------------- loc_EB9A: ; CODE XREF: sub_EB76+5j sub_EB76+Aj ... aim #$DF, byte_8E ; '' clra staa byte_126 staa byte_127 staa byte_128 jmp loc_EC30 ; --------------------------------------------------------------------------- loc_EBAA: ; CODE XREF: sub_EB76+14j ldab byte_127 beq loc_EBB2 decb bra loc_EC2C ; --------------------------------------------------------------------------- loc_EBB2: ; CODE XREF: sub_EB76+37j ldx #$2002 ; PIA_PORTB eim #2, 0,x tim #2, 0,x beq loc_EBC1 ldab #$12 bra loc_EC2C ; --------------------------------------------------------------------------- loc_EBC1: ; CODE XREF: sub_EB76+45j ldaa byte_126 cmpa #$10 bcs loc_EBD6 suba #$10 cmpa #$10 bcs loc_EBD2 loc_EBCE: ; CODE XREF: sub_EB76+61j ldab #$12 bra loc_EC29 ; --------------------------------------------------------------------------- loc_EBD2: ; CODE XREF: sub_EB76+56j ldab #$3D ; '=' bra loc_EC29 ; --------------------------------------------------------------------------- loc_EBD6: ; CODE XREF: sub_EB76+50j deca bne loc_EBCE ldaa byte_128 deca bpl loc_EBE0 clra loc_EBE0: ; CODE XREF: sub_EB76+67j staa byte_128 beq loc_EBEA ldab byte_129 bra loc_EC1E ; --------------------------------------------------------------------------- loc_EBEA: ; CODE XREF: sub_EB76+6Dj tim #$20, byte_8E ; ' ' beq loc_EC30 loc_EBEF: ; CODE XREF: sub_EB76+22j ldaa #3 staa byte_128 ldaa byte_129 clrb xgdx ldab FCodes2 ldaa FCodes3 std byte_40 beq loc_EC1E cpx #0 beq loc_EC17 loc_EC08: ; CODE XREF: sub_EB76+97j lsrd xgdx incb cba xgdx bne loc_EC08 std byte_42 bne loc_EC17 clrb xgdx ldd byte_40 loc_EC17: ; CODE XREF: sub_EB76+90j sub_EB76+9Bj ... xgdx incb xgdx lsrd bcc loc_EC17 xgdx loc_EC1E: ; CODE XREF: sub_EB76+72j sub_EB76+8Bj ldx #$EC59 stab byte_129 abx ldaa 0,x ldab #$B7 ; '' loc_EC29: ; CODE XREF: sub_EB76+5Aj sub_EB76+5Ej staa byte_126 loc_EC2C: ; CODE XREF: sub_EB76+3Aj sub_EB76+49j stab byte_127 rts ; --------------------------------------------------------------------------- loc_EC30: ; CODE XREF: sub_EB76+31J sub_EB76+77j clra staa byte_129 tim #$40, STATUS_5A ; '@' beq loc_EC3E tim #4, byte_8E bne loc_EC52 loc_EC3E: ; CODE XREF: sub_EB76+C1j tim #1, byte_80 beq loc_EC4B ldab FCodes1 andb #$FD ; '' orab FCodes0 beq loc_EC52 loc_EC4B: ; CODE XREF: sub_EB76+CBj ldx #$2002 ; PIA_PORTB oim #2, 0,x rts ; --------------------------------------------------------------------------- loc_EC52: ; CODE XREF: sub_EB76+C6j sub_EB76+D3j ldx #$2002 ; PIA_PORTB aim #$FD, 0,x ; '' rts ; End of function sub_EB76 ; --------------------------------------------------------------------------- X_EC59: fcb $12,$13,$14,$15,$21,$22,$23,$24,$25,$33,$41,$42; 0 ; =============== S U B R O U T I N E ======================================= DO_IAC_DUTY: ; CODE XREF: ROM:CA51P ldaa OBD_CTRL ; get OBD Control bytes anda #$C0 ; '' cmpa #$80 ; '' ; test IAC Cal beq loc_EC89 ldaa ACIA_STATUS ; get ACIA_Status anda #$10 ; are we still scanning? bne loc_EC7A tim #$40, STATUS_5A ; '@' bne IAC_CTRL? loc_EC7A: ; CODE XREF: DO_IAC_DUTY+Ej aim #$EF, byte_8E ; '' ldx #$2002 ; PIA_PORTB aim #$FE, 0,x ; '' rts ; --------------------------------------------------------------------------- IAC_CTRL?: ; CODE XREF: DO_IAC_DUTY+13j tim #4, byte_8E bne loc_EC96 loc_EC89: ; CODE XREF: DO_IAC_DUTY+7j oim #$10, byte_8E ldab IACDuty addb #$14 bcc loc_ECA6 ldab #$FF bra loc_ECA6 ; --------------------------------------------------------------------------- loc_EC96: ; CODE XREF: DO_IAC_DUTY+22j oim #$10, byte_8E ldab #$FF tim #$20, STATUS_90 ; ' ' beq loc_ECA5 ldab AFT beq loc_ECAA loc_ECA5: ; CODE XREF: DO_IAC_DUTY+39j negb loc_ECA6: ; CODE XREF: DO_IAC_DUTY+2Bj ; DO_IAC_DUTY+2Fj cmpb #$F8 ; '' bls loc_ECAC loc_ECAA: ; CODE XREF: DO_IAC_DUTY+3Ej ldab #$F8 ; '' loc_ECAC: ; CODE XREF: DO_IAC_DUTY+43j cmpb #8 bcc loc_ECB2 ldab #8 loc_ECB2: ; CODE XREF: DO_IAC_DUTY+49j ldaa #$1E mul tstb bpl loc_ECB9 inca loc_ECB9: ; CODE XREF: DO_IAC_DUTY+51j staa byte_12B rts ; End of function DO_IAC_DUTY ; =============== S U B R O U T I N E ======================================= sub_ECBD: ; CODE XREF: sub_C820+111P ; sub_C820+173P ... tim #$10, byte_8E bne loc_ECC3 rts ; --------------------------------------------------------------------------- loc_ECC3: ; CODE XREF: sub_ECBD+3j ldaa FRCH anda #$F8 ; '' cmpa byte_12A bne loc_ECCD rts ; --------------------------------------------------------------------------- loc_ECCD: ; CODE XREF: sub_ECBD+Dj staa byte_12A ldx #$2002 ; PIA_PORTB ldab word_12C+1 bne loc_ECE3 ldab #$1D ldaa byte_12B deca std word_12C bra loc_ECF0 ; --------------------------------------------------------------------------- loc_ECE3: ; CODE XREF: sub_ECBD+19j decb stab word_12C+1 ldaa word_12C beq loc_ECF4 deca staa word_12C loc_ECF0: ; CODE XREF: sub_ECBD+24j aim #$FE, 0,x ; '' rts ; --------------------------------------------------------------------------- loc_ECF4: ; CODE XREF: sub_ECBD+2Dj oim #1, 0,x rts ; End of function sub_ECBD ; --------------------------------------------------------------------------- IRQ_ISR: jsr SDL_INT_HNDLR rti ; =============== S U B R O U T I N E ======================================= SDL_INT_HNDLR: ; CODE XREF: ROM:IRQ_ISRP ldx ACIA_CR ldaa ACIA_STATUS ; get ACIA_Status bita #1 ; check for Tx message in progress bne loc_ED1E bita #4 ; test bit 2 ??? beq loc_ED12 anda #$FB ; '' ; clear bit 2??? staa ACIA_STATUS ; save to ACIA_Status jmp loc_EDF0 ; --------------------------------------------------------------------------- loc_ED12: ; CODE XREF: SDL_INT_HNDLR+Cj xgdx bita #1 ; test PIA status bit0 beq loc_ED1B bita #$30 ; '0' ; test PIA status bits5-4 beq loc_ED26 loc_ED1B: ; CODE XREF: SDL_INT_HNDLR+19j ; SDL_INT_HNDLR+3Bj jmp loc_EDDC ; --------------------------------------------------------------------------- loc_ED1E: ; CODE XREF: SDL_INT_HNDLR+8j xgdx bita #2 bne loc_ED92 jmp loc_EDDC ; --------------------------------------------------------------------------- loc_ED26: ; CODE XREF: SDL_INT_HNDLR+1Dj tba addb ACIA_CSUM stab ACIA_CSUM ldab ACIA_RX_COUNT ldx #$13B abx cpx #$146 bcc loc_ED1B staa 0,x subb #2 bcs loc_ED6A cmpb ACIA_LNGTH beq loc_ED4A loc_ED44: ; CODE XREF: SDL_INT_HNDLR+87j ; SDL_INT_HNDLR+94j inc ACIA_RX_COUNT jmp loc_EDF0 ; --------------------------------------------------------------------------- loc_ED4A: ; CODE XREF: SDL_INT_HNDLR+46j ldaa ACIA_CSUM bne loc_ED7E ; otherwise reset ACiA ldaa byte_21 ; get timer_21 staa ACIA_Timeout? ; save to timeout? ldaa ACIA_STATUS ; get ACIA_Status oraa #2 staa ACIA_STATUS ; set msg received clr ACIA_RX_COUNT ; clear count clr ACIA_CSUM ; clear checksum ldaa #$15 staa ACIA_CR ; clear RIE and TIE? jmp loc_EDF0 ; --------------------------------------------------------------------------- loc_ED6A: ; CODE XREF: SDL_INT_HNDLR+41j suba #3 ldab ACIA_HDR ldx #$EDFE ; ;start of OBD_HDR_LUT_? loc_ED72: ; CODE XREF: SDL_INT_HNDLR+80j cmpb 0,x ; check header beq loc_ED80 ; bra if header found inx ; else step on three addresses inx inx cpx #$EE0A ; beyond end of table? bcs loc_ED72 ; no, loop back loc_ED7E: ; CODE XREF: SDL_INT_HNDLR+51j bra Reset_ACIA ; otherwise reset ACiA ; --------------------------------------------------------------------------- loc_ED80: ; CODE XREF: SDL_INT_HNDLR+78j tst ACIA_RX_COUNT beq loc_ED44 cmpa 1,x bcs Reset_ACIA cmpa 2,x bhi Reset_ACIA staa ACIA_LNGTH bra loc_ED44 ; --------------------------------------------------------------------------- loc_ED92: ; CODE XREF: SDL_INT_HNDLR+25j ldab ACIA_RX_COUNT beq loc_EDB6 decb beq loc_EDBB decb cmpb ACIA_LNGTH beq loc_EDC2 bcc loc_EDC8 ldx #$13D abx ldaa 0,x loc_EDA8: ; CODE XREF: SDL_INT_HNDLR+BDj ; SDL_INT_HNDLR+C4j ... staa ACIA_SR adda ACIA_CSUM staa ACIA_CSUM inc ACIA_RX_COUNT bra loc_EDF0 ; --------------------------------------------------------------------------- loc_EDB6: ; CODE XREF: SDL_INT_HNDLR+99j ldaa ACIA_HDR bra loc_EDA8 ; --------------------------------------------------------------------------- loc_EDBB: ; CODE XREF: SDL_INT_HNDLR+9Cj ldaa ACIA_LNGTH adda #3 bra loc_EDA8 ; --------------------------------------------------------------------------- loc_EDC2: ; CODE XREF: SDL_INT_HNDLR+A2j ldaa ACIA_CSUM nega bra loc_EDA8 ; --------------------------------------------------------------------------- loc_EDC8: ; CODE XREF: SDL_INT_HNDLR+A4j ldaa ACIA_STATUS ; get ACIA status anda #$FE ; '' ; clear TX in progress oraa #4 ; set ???? staa ACIA_STATUS ; save to ACIA status ldd ACIA_CR ldaa #$BC ; '' staa ACIA_COUNT ; timeout = 188*? bra Reset_ACIA ; --------------------------------------------------------------------------- loc_EDDC: ; CODE XREF: SDL_INT_HNDLR:loc_ED1BJ ; SDL_INT_HNDLR+27J ldaa ACIA_STATUS ; get ACIA status anda #$FE ; '' staa ACIA_STATUS ; clear TX msg in progress Reset_ACIA: ; CODE XREF: SDL_INT_HNDLR:loc_ED7Ej ; SDL_INT_HNDLR+8Bj ... ldaa #$95 ; '' staa ACIA_CR ; set RIE,8n1,7812 clr ACIA_RX_COUNT clr ACIA_CSUM rts ; --------------------------------------------------------------------------- loc_EDF0: ; CODE XREF: SDL_INT_HNDLR+13J ; SDL_INT_HNDLR+4BJ ... ldaa #$BC ; '' staa ACIA_COUNT ; timeout = 188*? ldaa ACIA_STATUS ; get ACIA status oraa #$20 ; ' ' staa ACIA_STATUS ; set bit5 ??? rts ; End of function SDL_INT_HNDLR ; --------------------------------------------------------------------------- OBD_HDR_LUT_?: fcb $10 fcb 0 fcb 0 fcb $13 fcb 0 fcb 8 fcb $14 fcb 0 fcb 0 fcb $15 fcb 8 fcb 8 ; --------------------------------------------------------------------------- loc_EE0A: ; CODE XREF: ROM:CA5BP tim #4, STATUS_5A beq loc_EE29 tim #$20, STATUS_5A ; ' ' beq loc_EE35 ; test idle switch ldaa RPMH cmpa #$1F ; 7775 RPM bcs loc_EE35 ; test idle switch tim #4, INT_FC0 beq loc_EE2D tim #$20, byte_5C ; ' ' bne loc_EE41 ; test AC Switch oim #$20, byte_5C ; ' ' bra loc_EE35 ; test idle switch ; --------------------------------------------------------------------------- loc_EE29: ; CODE XREF: ROM:EE0Dj aim #$C7, byte_5C ; '' rts ; --------------------------------------------------------------------------- loc_EE2D: ; CODE XREF: ROM:EE1Dj tim #$80, INT_FC0 ; '' beq loc_EE35 ; test idle switch oim #8, byte_5C loc_EE35: ; CODE XREF: ROM:EE12j ROM:EE18j ... tim #$80, STATUS_5A ; '' ; test idle switch beq loc_EE3D aim #$F7, byte_5C ; '' loc_EE3D: ; CODE XREF: ROM:EE38j aim #$EF, byte_5C ; '' rts ; --------------------------------------------------------------------------- loc_EE41: ; CODE XREF: ROM:EE22j tim #2, STATUS_5A ; test AC Switch bne loc_EE49 jmp loc_EEE5 ; --------------------------------------------------------------------------- loc_EE49: ; CODE XREF: ROM:EE44j sei ldx #$2002 ; PIA_PORTB aim #$FC, 0,x ; '' lds #4 loc_EE53: ; CODE XREF: ROM:EEE2J ldaa unk_2000 bita #$80 ; '' beq loc_EE70 lds #1 ldaa byte_17D beq loc_EE6A ; PIA_PORTB cmpa #$50 ; 'P' beq loc_EEBE cmpa #$5A ; 'Z' beq loc_EE70 loc_EE6A: ; CODE XREF: ROM:EE60j ldx #$2002 ; PIA_PORTB eim #1, 0,x loc_EE70: ; CODE XREF: ROM:EE58j ROM:EE68j ... des sts byte_42 beq loc_EEC4 clra clrb ldx #$C000 loc_EE7A: ; CODE XREF: ROM:EE86j xgdx tstb bne loc_EE81 eim #$40, PORT1 ; '@' ; update watchdog loc_EE81: ; CODE XREF: ROM:EE7Cj xgdx addd 0,x inx inx bne loc_EE7A xgdx cpx #$AA55 bne loc_EEB8 xgdx loc_EE8F: ; CODE XREF: ROM:EEB4j eim #$40, PORT1 ; '@' ; update watchdog tab coma ldx #$40 ; '@' loc_EE97: ; CODE XREF: ROM:EE9Ej std 0,x inx inx cpx #$180 bcs loc_EE97 ldx #$40 ; '@' loc_EEA3: ; CODE XREF: ROM:EEB0j cmpa 0,x bne loc_EEBE cmpb 1,x bne loc_EEBE inx inx cpx #$180 bcs loc_EEA3 cmpa #$55 ; 'U' beq loc_EE8F ; update watchdog bra loc_EE70 ; --------------------------------------------------------------------------- loc_EEB8: ; CODE XREF: ROM:EE8Cj ldx #$2002 ; PIA_PORTB oim #1, 0,x loc_EEBE: ; CODE XREF: ROM:EE64j ROM:EEA5j ... ldx #$2002 ; PIA_PORTB oim #2, 0,x loc_EEC4: ; CODE XREF: ROM:EE73j ROM:EEDBj ldaa unk_2000 bita #4 bne loc_EECF bita #$20 ; ' ' beq loc_EED2 loc_EECF: ; CODE XREF: ROM:EEC9j jmp START ; --------------------------------------------------------------------------- loc_EED2: ; CODE XREF: ROM:EECDj lds #1 ldd byte_21 anda #$E0 ; '' cmpa byte_5D beq loc_EEC4 staa byte_5D ; new time? eim #$40, PORT1 ; '@' ; update watchdog jmp loc_EE53 ; --------------------------------------------------------------------------- loc_EEE5: ; CODE XREF: ROM:EE46J aim #$F7, byte_5C ; '' oim #$10, byte_5C aim #$EF, byte_8E ; '' aim #$5F, byte_20 ; '_' ldx #$2002 ; PIA_PORTB aim #$E0, 0,x ; '' aim #$EB, PORT1 ; '' loc_EEFA: ; CODE XREF: ROM:EFE4J tim #$20, STATUS_5A ; ' ' beq loc_EF06 tim #4, STATUS_5A beq loc_EF06 bra loc_EF09 ; --------------------------------------------------------------------------- loc_EF06: ; CODE XREF: ROM:EEFDj ROM:EF02j jmp START ; --------------------------------------------------------------------------- loc_EF09: ; CODE XREF: ROM:EF04j aim #$F7, TCSR1 ; '' oim #8, byte_18 ; timer control? oim #$10, byte_18 ; timer control? aim #$5F, byte_20 ; '_' oim #$A0, byte_28 ; '' ldaa #5 staa byte_FF ldx #$2002 ; PIA_PORTB oim #$20, 0,x ; ' ' jsr sub_D778 ldd byte_21 anda #$E0 ; '' cmpa byte_5D beq loc_EF40 staa byte_5D ; new time? eim #$40, PORT1 ; '@' ; update watchdog ldaa byte_5E inca staa byte_5E lsra bcs loc_EF40 jsr sub_D79F jsr sub_CF12 loc_EF40: ; CODE XREF: ROM:EF2Bj ROM:EF38j jsr sub_CC0A jsr sub_D6CE ldaa unk_2000 eora #$66 ; 'f' staa STATUS_5A ldx #$2002 ; PIA_PORTB tim #$10, STATUS_5B beq loc_EF62 ldaa #$A4 ; '' oim #4, PORT1 ; *** P12 *** aim #$E0, 0,x ; '' aim #$EF, PORT1 ; '' ; *** P14 *** bra loc_EFDB ; --------------------------------------------------------------------------- loc_EF62: ; CODE XREF: ROM:EF53j tim #$20, STATUS_8D ; ' ' bne loc_EF78 ; test AC Switch ldd AFM lsrd lsrd lsrd tba oim #$10, PORT1 ; *** P14 *** aim #$E0, 0,x ; '' aim #$FB, PORT1 ; '' ; *** P12 *** bra loc_EFDB ; --------------------------------------------------------------------------- loc_EF78: ; CODE XREF: ROM:EF65j tim #2, STATUS_5A ; test AC Switch beq loc_EF8A ; test idle switch ldaa TPSV? oim #8, 0,x aim #$EB, PORT1 ; '' ; *** P14,P12 *** aim #$E8, 0,x ; '' bra loc_EFDB ; --------------------------------------------------------------------------- loc_EF8A: ; CODE XREF: ROM:EF7Bj tim #$80, STATUS_5A ; '' ; test idle switch beq loc_EF9C ldaa #$F6 ; '' oim #2, 0,x aim #$EB, PORT1 ; '' ; *** P14,P12 *** aim #$E2, 0,x ; '' bra loc_EFDB ; --------------------------------------------------------------------------- loc_EF9C: ; CODE XREF: ROM:EF8Dj tim #$40, STATUS_5A ; '@' beq loc_EFAE ldaa #$F6 ; '' oim #4, 0,x aim #$EB, PORT1 ; '' ; *** P14,P12 *** aim #$E4, 0,x ; '' bra loc_EFDB ; --------------------------------------------------------------------------- loc_EFAE: ; CODE XREF: ROM:EF9Fj tim #8, STATUS_5B ; test PS Switch beq loc_EFC1 ldaa byte_133 oim #1, 0,x aim #$EB, PORT1 ; '' ; *** P14,P12 *** aim #$E1, 0,x ; '' bra loc_EFDB ; --------------------------------------------------------------------------- loc_EFC1: ; CODE XREF: ROM:EFB1j tim #1, STATUS_5A bne loc_EFD3 ldaa #$F6 ; '' oim #$10, 0,x aim #$EB, PORT1 ; '' ; *** P14,P12 *** aim #$F0, 0,x ; '' bra loc_EFDB ; --------------------------------------------------------------------------- loc_EFD3: ; CODE XREF: ROM:EFC4j ldaa #$A aim #$E0, 0,x ; '' aim #$EB, PORT1 ; '' ; *** P14,P12 *** loc_EFDB: ; CODE XREF: ROM:EF60j ROM:EF76j ... ldx #$F42 jsr MULT_8x16? std word_124 jmp loc_EEFA ; =============== S U B R O U T I N E ======================================= sub_EFE7: ; CODE XREF: sub_E499+74P ; CALC_IGN_ADV+4EP cmpa 0,x bls loc_EFED ldaa 0,x loc_EFED: ; CODE XREF: sub_EFE7+2j cmpa 1,x bcc locret_EFF3 ldaa 1,x locret_EFF3: ; CODE XREF: sub_EFE7+8j rts ; End of function sub_EFE7 ; --------------------------------------------------------------------------- cmpa 0,x bcs loc_F00B cmpa 1,x bhi loc_F00B comb stab byte_46 andb byte_44 stab byte_44 ldab byte_46 andb RICH_COUNT? stab RICH_COUNT? bra locret_F01B ; --------------------------------------------------------------------------- loc_F00B: ; CODE XREF: ROM:EFF6j ROM:EFFAj bitb RICH_COUNT? beq loc_F015 orab byte_44 stab byte_44 bra loc_F019 ; --------------------------------------------------------------------------- loc_F015: ; CODE XREF: ROM:F00Dj orab RICH_COUNT? stab RICH_COUNT? loc_F019: ; CODE XREF: ROM:F013j ldaa 3,x locret_F01B: ; CODE XREF: ROM:F009j rts ; =============== S U B R O U T I N E ======================================= sub_F01C: ; CODE XREF: ROM:CFB5P ROM:CFC8P ... ldaa 0,x inx loc_F01F: ; CODE XREF: sub_F044+3J sub_F04A+AJ cmpa byte_46 bhi loc_F027 orab byte_44 bra loc_F037 ; --------------------------------------------------------------------------- loc_F027: ; CODE XREF: sub_F01C+5j suba 0,x bcs loc_F037 loc_F02B: ; CODE XREF: ROM:F06BJ cmpa byte_46 bls loc_F037 com byte_44 andb byte_44 com byte_44 loc_F037: ; CODE XREF: sub_F01C+9j sub_F01C+Dj ... inx asl byte_44 ldaa RICH_COUNT? suba #1 staa RICH_COUNT? bhi sub_F01C rts ; End of function sub_F01C ; =============== S U B R O U T I N E ======================================= sub_F044: ; CODE XREF: ROM:CFD7P ROM:loc_CFE3P ... clr RICH_COUNT? jmp loc_F01F ; End of function sub_F044 ; =============== S U B R O U T I N E ======================================= sub_F04A: ; CODE XREF: ROM:CFCDP ROM:CFD2P clr RICH_COUNT? adda 0,x bcc loc_F053 ldaa #$FF loc_F053: ; CODE XREF: sub_F04A+5j inx jmp loc_F01F ; End of function sub_F04A ; --------------------------------------------------------------------------- clr RICH_COUNT? adda 0,x bcc loc_F060 ldaa #$FF loc_F060: ; CODE XREF: ROM:F05Cj inx cmpa byte_46 bhi loc_F069 orab byte_44 bra loc_F037 ; --------------------------------------------------------------------------- loc_F069: ; CODE XREF: ROM:F063j ldaa 0,x jmp loc_F02B ; =============== S U B R O U T I N E ======================================= MULT_8x16?: ; CODE XREF: sub_D55A+2AP ; CALC_LTFT_AFT+4P ... psha ; save A pshx ; save X pulb mul ; multiply pulx xgdx mul tab abx xgdx rts ; End of function MULT_8x16? ; =============== S U B R O U T I N E ======================================= sub_F079: ; CODE XREF: sub_D818+73P sub_D818+83P ... stx byte_44 ldab byte_44 staa byte_44 mul xgdx ldaa byte_44 mul stab byte_44 tab abx ldaa byte_44 rts ; End of function sub_F079 ; =============== S U B R O U T I N E ======================================= sub_F08B: ; CODE XREF: sub_D072+52P ; CALC_INJ_PW1_1+22P std byte_44 stx byte_46 ldab byte_47 mul xgdx ldaa RICH_COUNT? mul tab abx ldd RICH_COUNT? mul stab byte_47 ldab byte_46 staa byte_46 ldaa byte_44 mul xgdx addd byte_46 bcc loc_F0AC xgdx inca xgdx loc_F0AC: ; CODE XREF: sub_F08B+1Cj stab byte_44 tab abx ldaa byte_44 rts ; End of function sub_F08B ; =============== S U B R O U T I N E ======================================= sub_F0B3: ; CODE XREF: ROM:D189P ROM:D191P ... stx byte_44 adda #$80 ; '' xgdx bcs loc_F0BB lsrd loc_F0BB: ; CODE XREF: sub_F0B3+5j std byte_46 xgdx ldab byte_44 staa byte_44 mul xgdx ldd byte_44 mul tab abx xgdx lsrd addd byte_46 bcc locret_F0D2 ldd #$FFFF locret_F0D2: ; CODE XREF: sub_F0B3+1Aj rts ; End of function sub_F0B3 ; =============== S U B R O U T I N E ======================================= sub_F0D3: ; CODE XREF: CALC_BYTE_98+72P ; sub_DE0C+90P ... tsta bne loc_F0DB ldd #$FFFF bra locret_F0FA ; --------------------------------------------------------------------------- loc_F0DB: ; CODE XREF: sub_F0D3+1j stx byte_46 ldx #$F0F2 loc_F0E0: ; CODE XREF: sub_F0D3+Fj inx asla bcc loc_F0E0 lsra pshx tab ldx #$F0FB abx ldaa 0,x ldx byte_46 jsr MULT_8x16? rts ; --------------------------------------------------------------------------- fcb 4 fcb 4 fcb 4 fcb 4 fcb 4 fcb 4 fcb 4 ; --------------------------------------------------------------------------- locret_F0FA: ; CODE XREF: sub_F0D3+6j rts ; End of function sub_F0D3 ; --------------------------------------------------------------------------- LUT_F0FB: fcb $FF fcb $FE ; fcb $FC ; fcb $FA ; fcb $F8 ; fcb $F6 ; fcb $F4 ; fcb $F2 ; fcb $F0 ; fcb $EF ; fcb $ED ; fcb $EB ; fcb $EA ; fcb $E8 ; fcb $E6 ; fcb $E5 ; fcb $E3 ; fcb $E1 ; fcb $E0 ; fcb $DE ; fcb $DD ; fcb $DB ; fcb $DA ; fcb $D9 ; fcb $D7 ; fcb $D6 ; fcb $D4 ; fcb $D3 ; fcb $D2 ; fcb $D0 ; fcb $CF ; fcb $CE ; fcb $CC ; fcb $CB ; fcb $CA ; fcb $C9 ; fcb $C7 ; fcb $C6 ; fcb $C5 ; fcb $C4 ; fcb $C3 ; fcb $C1 ; fcb $C0 ; fcb $BF ; fcb $BE ; fcb $BD ; fcb $BC ; fcb $BB ; fcb $BA ; fcb $B9 ; fcb $B8 ; fcb $B7 ; fcb $B6 ; fcb $B5 ; fcb $B4 ; fcb $B3 ; fcb $B2 ; fcb $B1 ; fcb $B0 ; fcb $AF ; fcb $AE ; fcb $AD ; fcb $AC ; fcb $AB ; fcb $AA ; fcb $A9 ; fcb $A8 ; fcb $9B ; fcb $A7 ; fcb $A6 ; fcb $A5 ; fcb $98 ; fcb $A3 ; fcb $A3 ; fcb $A2 ; fcb $95 ; fcb $A0 ; fcb $9F ; fcb $9F ; fcb $92 ; fcb $9D ; fcb $9C ; fcb $9C ; fcb $9B ; fcb $9A ; fcb $99 ; fcb $99 ; fcb $98 ; fcb $97 ; fcb $97 ; fcb $96 ; fcb $95 ; fcb $94 ; fcb $94 ; fcb $93 ; fcb $92 ; fcb $92 ; fcb $91 ; fcb $90 ; fcb $90 ; fcb $8F ; fcb $8F ; fcb $8E ; fcb $8D ; fcb $8D ; fcb $8C ; fcb $8C ; fcb $8B ; fcb $8A ; fcb $8A ; fcb $89 ; fcb $89 ; fcb $88 ; fcb $87 ; fcb $87 ; fcb $86 ; fcb $86 ; fcb $85 ; fcb $85 ; fcb $84 ; fcb $84 ; fcb $83 ; fcb $83 ; fcb $82 ; fcb $82 ; fcb $81 ; fcb $81 ; fcb $80 ; ; =============== S U B R O U T I N E ======================================= sub_F17B: ; CODE XREF: sub_F197P sub_F19FP xgdx subd #3 xgdx cmpa 0,x bls loc_F186 ldaa 0,x loc_F186: ; CODE XREF: sub_F17B+7j cmpa 1,x bcc loc_F18C ldaa 1,x loc_F18C: ; CODE XREF: sub_F17B+Dj suba 1,x ldab 2,x mul xgdx addd #3 xgdx rts ; End of function sub_F17B ; =============== S U B R O U T I N E ======================================= sub_F197: ; CODE XREF: DO_IAC:loc_E441P jsr sub_F17B tab abx ldaa 0,x rts ; End of function sub_F197 ; =============== S U B R O U T I N E ======================================= sub_F19F: ; CODE XREF: sub_D6CE+5P sub_D6CE+16P ... jsr sub_F17B ; End of function sub_F19F ; =============== S U B R O U T I N E ======================================= sub_F1A2: ; CODE XREF: sub_D072:loc_D090P ; ROM:D1B6P ... stab byte_44 tab abx ldab byte_44 bne loc_F1AE ldaa 0,x bra locret_F1C2 ; --------------------------------------------------------------------------- loc_F1AE: ; CODE XREF: sub_F1A2+6j ldaa 1,x suba 0,x bcc loc_F1BF nega mul std byte_44 ldaa 0,x clrb subd byte_44 bra locret_F1C2 ; --------------------------------------------------------------------------- loc_F1BF: ; CODE XREF: sub_F1A2+10j mul adda 0,x locret_F1C2: ; CODE XREF: sub_F1A2+Aj sub_F1A2+1Bj rts ; End of function sub_F1A2 ; =============== S U B R O U T I N E ======================================= sub_F1C3: ; CODE XREF: CALC_BYTE_98:loc_DAA7P ; CALC_BYTE_98:loc_DAD8P ... cmpa #$C0 ; '' bls loc_F1C9 ldaa #$C0 ; '' loc_F1C9: ; CODE XREF: sub_F1C3+2j ldab #8 mul jmp sub_F1A2 ; End of function sub_F1C3 ; --------------------------------------------------------------------------- ldx RPMH cpx #$1A00 ; 6500 RPM bls loc_F1D9 ldx #$1A00 ; 6500 RPM loc_F1D9: ; CODE XREF: ROM:F1D4j xgdx subd #$400 ; 5500 RPM bcc loc_F1E1 clra clrb loc_F1E1: ; CODE XREF: ROM:F1DDj lsrd rts ; --------------------------------------------------------------------------- ldab WTS cmpb #$E0 ; '' bls loc_F1EB ldab #$E0 ; '' loc_F1EB: ; CODE XREF: ROM:F1E7j clra lsld lsld lsld ; =============== S U B R O U T I N E ======================================= sub_F1EF: ; CODE XREF: sub_D072+42P asla stab byte_44 tab abx tst byte_44 bne loc_F1FD ldd 0,x bra locret_F21E ; --------------------------------------------------------------------------- loc_F1FD: ; CODE XREF: sub_F1EF+8j ldd 2,x subd 0,x bcc loc_F214 coma negb sbca #$FF pshx xgdx ldaa byte_44 jsr MULT_8x16? coma negb sbca #$FF bra loc_F21B ; --------------------------------------------------------------------------- loc_F214: ; CODE XREF: sub_F1EF+12j pshx xgdx ldaa byte_44 jsr MULT_8x16? loc_F21B: ; CODE XREF: sub_F1EF+23j pulx addd 0,x locret_F21E: ; CODE XREF: sub_F1EF+Cj rts ; End of function sub_F1EF ; =============== S U B R O U T I N E ======================================= sub_F21F: ; CODE XREF: sub_D1C6+4BP sub_D1C6+5AP ... tst byte_44 beq locret_F244 std RICH_COUNT? subd 0,x bcc loc_F236 coma negb sbca #$FF xgdx ldaa byte_44 jsr MULT_8x16? bra loc_F242 ; --------------------------------------------------------------------------- loc_F236: ; CODE XREF: sub_F21F+9j xgdx ldaa byte_44 jsr MULT_8x16? coma negb sbca #$FF bra *+2 loc_F242: ; CODE XREF: sub_F21F+15j addd RICH_COUNT? locret_F244: ; CODE XREF: sub_F21F+3j rts ; End of function sub_F21F ; =============== S U B R O U T I N E ======================================= sub_F245: ; CODE XREF: CALC_BYTE_9D:loc_DFF6P ; CALC_IGN_PARAM1:loc_E606P ... dex dex cmpa 0,x bcs loc_F24E ldaa 0,x clrb loc_F24E: ; CODE XREF: sub_F245+4j std byte_46 ldd byte_44 cmpa 1,x bcs loc_F259 ldaa 1,x clrb loc_F259: ; CODE XREF: sub_F245+Fj std byte_44 ldaa 1,x inca inx inx stx byte_48 ldab byte_46 staa byte_46 mul addd byte_48 std byte_48 xgdx ldab byte_46 abx ldd byte_44 staa byte_46 pshb jsr sub_F1A2 ldx byte_48 std byte_48 ldaa byte_46 pulb jsr sub_F1A2 std byte_44 subd byte_48 bls loc_F293 xgdx ldaa byte_47 jsr MULT_8x16? coma negb sbca #$FF bra loc_F29D ; --------------------------------------------------------------------------- loc_F293: ; CODE XREF: sub_F245+40j coma negb sbca #$FF xgdx ldaa byte_47 jsr MULT_8x16? loc_F29D: ; CODE XREF: sub_F245+4Cj addd byte_44 rts ; End of function sub_F245 ; =============== S U B R O U T I N E ======================================= sub_F2A0: ; CODE XREF: sub_D354+39P ldab byte_44 beq loc_F2BF clrb stab byte_44 inca ldab RICH_COUNT? beq loc_F2B3 ldab 0,x cba bcs locret_F2B2 tba locret_F2B2: ; CODE XREF: sub_F2A0+Fj rts ; --------------------------------------------------------------------------- loc_F2B3: ; CODE XREF: sub_F2A0+Aj tsta bpl loc_F2B7 rts ; --------------------------------------------------------------------------- loc_F2B7: ; CODE XREF: sub_F2A0+14j ldaa 0,x ldx #$101 stx byte_44 rts ; --------------------------------------------------------------------------- loc_F2BF: ; CODE XREF: sub_F2A0+2j deca ldab RICH_COUNT? bne loc_F2CD coma ldab 0,x cba bcs loc_F2CB tba loc_F2CB: ; CODE XREF: sub_F2A0+28j coma rts ; --------------------------------------------------------------------------- loc_F2CD: ; CODE XREF: sub_F2A0+22j tsta bmi loc_F2D1 rts ; --------------------------------------------------------------------------- loc_F2D1: ; CODE XREF: sub_F2A0+2Ej ldaa 0,x coma ldx #$100 stx byte_44 rts ; End of function sub_F2A0 ; --------------------------------------------------------------------------- NMI_ISR: ; CODE XREF: ROM:NMI_ISRj bra NMI_ISR ; wait for watchdog timeout ; --------------------------------------------------------------------------- fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? fcb $3F ; ? TMROVF: fdb $D75D ; Timer 25 overflow flag OCI3: fdb $E97F OCI2: fdb $C6DA ; RESET SIO: fdb $CC84 ; serial interrupt T1OI: fdb $C6DA ; RESET OCI1: fdb $E96B ; Injector ICI1: fdb $E990 ; IC1=CAS, IC2=N/A ??? IRQ: fdb $ECF8 ; Peripheral Interrupt SWI: fdb $C6DA ; RESET NMI: fdb $F2DA ; watchdog/safety shut down RESET: fdb $C6DA ; RESET ; end of 'ROM' end